{
"version": 4,
"timestamp": 1577467581301,
"reference": "3pzGjAQQWXP8MQM2LWRNkEyFRYiXvqADWqx32ojNQQG94rLeNdFhFz4VXqiSfGsxqF6jLSTo6Y4k7bNJgPV8swPn",
"nxt-consensus": {
"base-target": 936,
"generation-signature": "ASvYay9F23Rx48yqNvjKqGfxLfTwp8D2unfiRun8sGCc"
},
"features": [],
"desiredReward": -1,
"generator": "3NB1Yz7fH1bJ2gVDjyJnuyKNTdMFARkKEpV",
"generatorPublicKey": "BeaUPHHepTBnfjt9jxv53S4PnQELfxs8XgJX6hNqu3vu",
"signature": "9b3GHcPUxKUyRL7hmFsWDbx8m9XTR8wUKgPWwJjwXjpL2S4AdWsJXi11r9gJiFkqawsMTQ7VV8PK2Md7wvF9ajV",
"blocksize": 541914,
"transactionCount": 6,
"id": "9b3GHcPUxKUyRL7hmFsWDbx8m9XTR8wUKgPWwJjwXjpL2S4AdWsJXi11r9gJiFkqawsMTQ7VV8PK2Md7wvF9ajV",
"totalFee": 85200000,
"reward": 600000000,
"rewardShares": {
"3NB1Yz7fH1bJ2gVDjyJnuyKNTdMFARkKEpV": 600000000
},
"fee": 85200000,
"previous": "827740",
"height": "827741",
"next": "827742",
"transactions": [
{
"type": 12,
"id": "5iec4EjdyNnfSYNLr8KJMdMpdRftns48bfWig9YgcT6j",
"fee": 14200000,
"feeAssetId": null,
"timestamp": 1577467390313,
"version": 1,
"sender": "3NAxHUEaM6RAG7rVDPL9L6DFZWkrqFtY98t",
"senderPublicKey": "4Jwx6yN9LNc5XbrqwrSdp2hok5niFKzGzfZwSxFH6FsV",
"proofs": [
"3JYc9DHFmFCbXLv5c8WsPVpENdVmUo3WRsFsfibnUUAeJWjGZjVE58a2oMNVn4oxJX15JhMhNuR7qa75TSchNEnV"
],
"data": [
{
"key": "Chart.bundle.min.js?4?0?1",
"type": "binary",
"value": "base64:bytsLHMrZCksImNlbnRlciI9PT1yJiYicmlnaHQiPT09YSYmdGhpcy5kcmF3Q2FyZXQodCxuKSxpLmxpbmVUbyhvK2wscyt1LWQpLGkucXVhZHJhdGljQ3VydmVUbyhvK2wscyt1LG8rbC1kLHMrdSksImJvdHRvbSI9PT1yJiZ0aGlzLmRyYXdDYXJldCh0LG4pLGkubGluZVRvKG8rZCxzK3UpLGkucXVhZHJhdGljQ3VydmVUbyhvLHMrdSxvLHMrdS1kKSwiY2VudGVyIj09PXImJiJsZWZ0Ij09PWEmJnRoaXMuZHJhd0NhcmV0KHQsbiksaS5saW5lVG8obyxzK2QpLGkucXVhZHJhdGljQ3VydmVUbyhvLHMsbytkLHMpLGkuY2xvc2VQYXRoKCksaS5maWxsKCksZS5ib3JkZXJXaWR0aD4wJiZpLnN0cm9rZSgpfSxkcmF3OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fY2hhcnQuY3R4LGU9dGhpcy5fdmlldztpZigwIT09ZS5vcGFjaXR5KXt2YXIgaT17d2lkdGg6ZS53aWR0aCxoZWlnaHQ6ZS5oZWlnaHR9LG49e3g6ZS54LHk6ZS55fSxhPU1hdGguYWJzKGUub3BhY2l0eTwuMDAxKT8wOmUub3BhY2l0eSxyPWUudGl0bGUubGVuZ3RofHxlLmJlZm9yZUJvZHkubGVuZ3RofHxlLmJvZHkubGVuZ3RofHxlLmFmdGVyQm9keS5sZW5ndGh8fGUuZm9vdGVyLmxlbmd0aDt0aGlzLl9vcHRpb25zLmVuYWJsZWQmJnImJih0LnNhdmUoKSx0Lmdsb2JhbEFscGhhPWEsdGhpcy5kcmF3QmFja2dyb3VuZChuLGUsdCxpKSxuLnkrPWUueVBhZGRpbmcsdGhpcy5kcmF3VGl0bGUobixlLHQpLHRoaXMuZHJhd0JvZHkobixlLHQpLHRoaXMuZHJhd0Zvb3RlcihuLGUsdCksdC5yZXN0b3JlKCkpfX0saGFuZGxlRXZlbnQ6ZnVuY3Rpb24odCl7dmFyIGUsaT10aGlzLG49aS5fb3B0aW9ucztyZXR1cm4gaS5fbGFzdEFjdGl2ZT1pLl9sYXN0QWN0aXZlfHxbXSwibW91c2VvdXQiPT09dC50eXBlP2kuX2FjdGl2ZT1bXTppLl9hY3RpdmU9aS5fY2hhcnQuZ2V0RWxlbWVudHNBdEV2ZW50Rm9yTW9kZSh0LG4ubW9kZSxuKSwoZT0hdXQuYXJyYXlFcXVhbHMoaS5fYWN0aXZlLGkuX2xhc3RBY3RpdmUpKSYmKGkuX2xhc3RBY3RpdmU9aS5fYWN0aXZlLChuLmVuYWJsZWR8fG4uY3VzdG9tKSYmKGkuX2V2ZW50UG9zaXRpb249e3g6dC54LHk6dC55fSxpLnVwZGF0ZSghMCksaS5waXZvdCgpKSksZX19KSxLZT1qZSxKZT1YZTtKZS5wb3NpdGlvbmVycz1LZTt2YXIgUWU9dXQudmFsdWVPckRlZmF1bHQ7ZnVuY3Rpb24gdGkoKXtyZXR1cm4gdXQubWVyZ2Uoe30sW10uc2xpY2UuY2FsbChhcmd1bWVudHMpLHttZXJnZXI6ZnVuY3Rpb24odCxlLGksbil7aWYoInhBeGVzIj09PXR8fCJ5QXhlcyI9PT10KXt2YXIgYSxyLG8scz1pW3RdLmxlbmd0aDtmb3IoZVt0XXx8KGVbdF09W10pLGE9MDthPHM7KythKW89aVt0XVthXSxyPVFlKG8udHlwZSwieEF4ZXMiPT09dD8iY2F0ZWdvcnkiOiJsaW5lYXIiKSxhPj1lW3RdLmxlbmd0aCYmZVt0XS5wdXNoKHt9KSwhZVt0XVthXS50eXBlfHxvLnR5cGUmJm8udHlwZSE9PWVbdF1bYV0udHlwZT91dC5tZXJnZShlW3RdW2FdLFtFZS5nZXRTY2FsZURlZmF1bHRzKHIpLG9dKTp1dC5tZXJnZShlW3RdW2FdLG8pfWVsc2UgdXQuX21lcmdlcih0LGUsaSxuKX19KX1mdW5jdGlvbiBlaSgpe3JldHVybiB1dC5tZXJnZSh7fSxbXS5zbGljZS5jYWxsKGFyZ3VtZW50cykse21lcmdlcjpmdW5jdGlvbih0LGUsaSxuKXt2YXIgYT1lW3RdfHx7fSxyPWlbdF07InNjYWxlcyI9PT10P2VbdF09dGkoYSxyKToic2NhbGUiPT09dD9lW3RdPXV0Lm1lcmdlKGEsW0VlLmdldFNjYWxlRGVmYXVsdHMoci50eXBlKSxyXSk6dXQuX21lcmdlcih0LGUsaSxuKX19KX1mdW5jdGlvbiBpaSh0KXtyZXR1cm4idG9wIj09PXR8fCJib3R0b20iPT09dH1vdC5fc2V0KCJnbG9iYWwiLHtlbGVtZW50czp7fSxldmVudHM6WyJtb3VzZW1vdmUiLCJtb3VzZW91dCIsImNsaWNrIiwidG91Y2hzdGFydCIsInRvdWNobW92ZSJdLGhvdmVyOntvbkhvdmVyOm51bGwsbW9kZToibmVhcmVzdCIsaW50ZXJzZWN0OiEwLGFuaW1hdGlvbkR1cmF0aW9uOjQwMH0sb25DbGljazpudWxsLG1haW50YWluQXNwZWN0UmF0aW86ITAscmVzcG9uc2l2ZTohMCxyZXNwb25zaXZlQW5pbWF0aW9uRHVyYXRpb246MH0pO3ZhciBuaT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmNvbnN0cnVjdCh0LGUpLHRoaXN9O3V0LmV4dGVuZChuaS5wcm90b3R5cGUse2NvbnN0cnVjdDpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXM7ZT1mdW5jdGlvbih0KXt2YXIgZT0odD10fHx7fSkuZGF0YT10LmRhdGF8fHt9O3JldHVybiBlLmRhdGFzZXRzPWUuZGF0YXNldHN8fFtdLGUubGFiZWxzPWUubGFiZWxzfHxbXSx0Lm9wdGlvbnM9ZWkob3QuZ2xvYmFsLG90W3QudHlwZV0sdC5vcHRpb25zfHx7fSksdH0oZSk7dmFyIG49VmUuYWNxdWlyZUNvbnRleHQodCxlKSxhPW4mJm4uY2FudmFzLHI9YSYmYS5oZWlnaHQsbz1hJiZhLndpZHRoO2kuaWQ9dXQudWlkKCksaS5jdHg9bixpLmNhbnZhcz1hLGkuY29uZmlnPWUsaS53aWR0aD1vLGkuaGVpZ2h0PXIsaS5hc3BlY3RSYXRpbz1yP28vcjpudWxsLGkub3B0aW9ucz1lLm9wdGlvbnMsaS5fYnVmZmVyZWRSZW5kZXI9ITEsaS5jaGFydD1pLGkuY29udHJvbGxlcj1pLG5pLmluc3RhbmNlc1tpLmlkXT1pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLCJkYXRhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuY29uZmlnLmRhdGF9LHNldDpmdW5jdGlvbih0KXtpLmNvbmZpZy5kYXRhPXR9fSksbiYmYT8oaS5pbml0aWFsaXplKCksaS51cGRhdGUoKSk6Y29uc29sZS5lcnJvcigiRmFpbGVkIHRvIGNyZWF0ZSBjaGFydDogY2FuJ3QgYWNxdWlyZSBjb250ZXh0IGZyb20gdGhlIGdpdmVuIGl0ZW0iKX0saW5pdGlhbGl6ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIEhlLm5vdGlmeSh0LCJiZWZvcmVJbml0IiksdXQucmV0aW5hU2NhbGUodCx0Lm9wdGlvbnMuZGV2aWNlUGl4ZWxSYXRpbyksdC5iaW5kRXZlbnRzKCksdC5vcHRpb25zLnJlc3BvbnNpdmUmJnQucmVzaXplKCEwKSx0LmVuc3VyZVNjYWxlc0hhdmVJRHMoKSx0LmJ1aWxkT3JVcGRhdGVTY2FsZXMoKSx0LmluaXRUb29sVGlwKCksSGUubm90aWZ5KHQsImFmdGVySW5pdCIpLHR9LGNsZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHV0LmNhbnZhcy5jbGVhcih0aGlzKSx0aGlzfSxzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIHZ0LmNhbmNlbEFuaW1hdGlvbih0aGlzKSx0aGlzfSxyZXNpemU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxpPWUub3B0aW9ucyxuPWUuY2FudmFzLGE9aS5tYWludGFpbkFzcGVjdFJhdGlvJiZlLmFzcGVjdFJhdGlvfHxudWxsLHI9TWF0aC5tYXgoMCxNYXRoLmZsb29yKHV0LmdldE1heGltdW1XaWR0aChuKSkpLG89TWF0aC5tYXgoMCxNYXRoLmZsb29yKGE/ci9hOnV0LmdldE1heGltdW1IZWlnaHQobikpKTtpZigoZS53aWR0aCE9PXJ8fGUuaGVpZ2h0IT09bykmJihuLndpZHRoPWUud2lkdGg9cixuLmhlaWdodD1lLmhlaWdodD1vLG4uc3R5bGUud2lkdGg9cisicHgiLG4uc3R5bGUuaGVpZ2h0PW8rInB4Iix1dC5yZXRpbmFTY2FsZShlLGkuZGV2aWNlUGl4ZWxSYXRpbyksIXQpKXt2YXIgcz17d2lkdGg6cixoZWlnaHQ6b307SGUubm90aWZ5KGUsInJlc2l6ZSIsW3NdKSxpLm9uUmVzaXplJiZpLm9uUmVzaXplKGUscyksZS5zdG9wKCksZS51cGRhdGUoe2R1cmF0aW9uOmkucmVzcG9uc2l2ZUFuaW1hdGlvbkR1cmF0aW9ufSl9fSxlbnN1cmVTY2FsZXNIYXZlSURzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zLGU9dC5zY2FsZXN8fHt9LGk9dC5zY2FsZTt1dC5lYWNoKGUueEF4ZXMsZnVuY3Rpb24odCxlKXt0LmlkPXQuaWR8fCJ4LWF4aXMtIitlfSksdXQuZWFjaChlLnlBeGVzLGZ1bmN0aW9uKHQsZSl7dC5pZD10LmlkfHwieS1heGlzLSIrZX0pLGkmJihpLmlkPWkuaWR8fCJzY2FsZSIpfSxidWlsZE9yVXBkYXRlU2NhbGVzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXQub3B0aW9ucyxpPXQuc2NhbGVzfHx7fSxuPVtdLGE9T2JqZWN0LmtleXMoaSkucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbZV09ITEsdH0se30pO2Uuc2NhbGVzJiYobj1uLmNvbmNhdCgoZS5zY2FsZXMueEF4ZXN8fFtdKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJue29wdGlvbnM6dCxkdHlwZToiY2F0ZWdvcnkiLGRwb3NpdGlvbjoiYm90dG9tIn19KSwoZS5zY2FsZXMueUF4ZXN8fFtdKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJue29wdGlvbnM6dCxkdHlwZToibGluZWFyIixkcG9zaXRpb246ImxlZnQifX0pKSksZS5zY2FsZSYmbi5wdXNoKHtvcHRpb25zOmUuc2NhbGUsZHR5cGU6InJhZGlhbExpbmVhciIsaXNEZWZhdWx0OiEwLGRwb3NpdGlvbjoiY2hhcnRBcmVhIn0pLHV0LmVhY2gobixmdW5jdGlvbihlKXt2YXIgbj1lLm9wdGlvbnMscj1uLmlkLG89UWUobi50eXBlLGUuZHR5cGUpO2lpKG4ucG9zaXRpb24pIT09aWkoZS5kcG9zaXRpb24pJiYobi5wb3NpdGlvbj1lLmRwb3NpdGlvbiksYVtyXT0hMDt2YXIgcz1udWxsO2lmKHIgaW4gaSYmaVtyXS50eXBlPT09bykocz1pW3JdKS5vcHRpb25zPW4scy5jdHg9dC5jdHgscy5jaGFydD10O2Vsc2V7dmFyIGw9RWUuZ2V0U2NhbGVDb25zdHJ1Y3RvcihvKTtpZighbClyZXR1cm47cz1uZXcgbCh7aWQ6cix0eXBlOm8sb3B0aW9uczpuLGN0eDp0LmN0eCxjaGFydDp0fSksaVtzLmlkXT1zfXMubWVyZ2VUaWNrc09wdGlvbnMoKSxlLmlzRGVmYXVsdCYmKHQuc2NhbGU9cyl9KSx1dC5lYWNoKGEsZnVuY3Rpb24odCxlKXt0fHxkZWxldGUgaVtlXX0pLHQuc2NhbGVzPWksRWUuYWRkU2NhbGVzVG9MYXlvdXQodGhpcyl9LGJ1aWxkT3JVcGRhdGVDb250cm9sbGVyczpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT1bXTtyZXR1cm4gdXQuZWFjaCh0LmRhdGEuZGF0YXNldHMsZnVuY3Rpb24oaSxuKXt2YXIgYT10LmdldERhdGFzZXRNZXRhKG4pLHI9aS50eXBlfHx0LmNvbmZpZy50eXBlO2lmKGEudHlwZSYmYS50eXBlIT09ciYmKHQuZGVzdHJveURhdGFzZXRNZXRhKG4pLGE9dC5nZXREYXRhc2V0TWV0YShuKSksYS50eXBlPXIsYS5jb250cm9sbGVyKWEuY29udHJvbGxlci51cGRhdGVJbmRleChuKSxhLmNvbnRyb2xsZXIubGlua1NjYWxlcygpO2Vsc2V7dmFyIG89dWVbYS50eXBlXTtpZih2b2lkIDA9PT1vKXRocm93IG5ldyBFcnJvcignIicrYS50eXBlKyciIGlzIG5vdCBhIGNoYXJ0IHR5cGUuJyk7YS5jb250cm9sbGVyPW5ldyBvKHQsbiksZS5wdXNoKGEuY29udHJvbGxlcil9fSx0KSxlfSxyZXNldEVsZW1lbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt1dC5lYWNoKHQuZGF0YS5kYXRhc2V0cyxmdW5jdGlvbihlLGkpe3QuZ2V0RGF0YXNldE1ldGEoaSkuY29udHJvbGxlci5yZXNldCgpfSx0KX0scmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLnJlc2V0RWxlbWVudHMoKSx0aGlzLnRvb2x0aXAuaW5pdGlhbGl6ZSgpfSx1cGRhdGU6ZnVuY3Rpb24odCl7dmFyIGUsaSxuPXRoaXM7aWYodCYmIm9iamVjdCI9PXR5cGVvZiB0fHwodD17ZHVyYXRpb246dCxsYXp5OmFyZ3VtZW50c1sxXX0pLGk9KGU9bikub3B0aW9ucyx1dC5lYWNoKGUuc2NhbGVzLGZ1bmN0aW9uKHQpe3hlLnJlbW92ZUJveChlLHQpfSksaT1laShvdC5nbG9iYWwsb3RbZS5jb25maWcudHlwZV0saSksZS5vcHRpb25zPWUuY29uZmlnLm9wdGlvbnM9aSxlLmVuc3VyZVNjYWxlc0hhdmVJRHMoKSxlLmJ1aWxkT3JVcGRhdGVTY2FsZXMoKSxlLnRvb2x0aXAuX29wdGlvbnM9aS50b29sdGlwcyxlLnRvb2x0aXAuaW5pdGlhbGl6ZSgpLEhlLl9pbnZhbGlkYXRlKG4pLCExIT09SGUubm90aWZ5KG4sImJlZm9yZVVwZGF0ZSIpKXtuLnRvb2x0aXAuX2RhdGE9bi5kYXRhO3ZhciBhPW4uYnVpbGRPclVwZGF0ZUNvbnRyb2xsZXJzKCk7dXQuZWFjaChuLmRhdGEuZGF0YXNldHMsZnVuY3Rpb24odCxlKXtuLmdldERhdGFzZXRNZXRhKGUpLmNvbnRyb2xsZXIuYnVpbGRPclVwZGF0ZUVsZW1lbnRzKCl9LG4pLG4udXBkYXRlTGF5b3V0KCksbi5vcHRpb25zLmFuaW1hdGlvbiYmbi5vcHRpb25zLmFuaW1hdGlvbi5kdXJhdGlvbiYmdXQuZWFjaChhLGZ1bmN0aW9uKHQpe3QucmVzZXQoKX0pLG4udXBkYXRlRGF0YXNldHMoKSxuLnRvb2x0aXAuaW5pdGlhbGl6ZSgpLG4ubGFzdEFjdGl2ZT1bXSxIZS5ub3RpZnkobiwiYWZ0ZXJVcGRhdGUiKSxuLl9idWZmZXJlZFJlbmRlcj9uLl9idWZmZXJlZFJlcXVlc3Q9e2R1cmF0aW9uOnQuZHVyYXRpb24sZWFzaW5nOnQuZWFzaW5nLGxhenk6dC5sYXp5fTpuLnJlbmRlcih0KX19LHVwZGF0ZUxheW91dDpmdW5jdGlvbigpeyExIT09SGUubm90aWZ5KHRoaXMsImJlZm9yZUxheW91dCIpJiYoeGUudXBkYXRlKHRoaXMsdGhpcy53aWR0aCx0aGlzLmhlaWdodCksSGUubm90aWZ5KHRoaXMsImFmdGVyU2NhbGVVcGRhdGUiKSxIZS5ub3RpZnkodGhpcywiYWZ0ZXJMYXlvdXQiKSl9LHVwZGF0ZURhdGFzZXRzOmZ1bmN0aW9uKCl7aWYoITEhPT1IZS5ub3RpZnkodGhpcywiYmVmb3JlRGF0YXNldHNVcGRhdGUiKSl7Zm9yKHZhciB0PTAsZT10aGlzLmRhdGEuZGF0YXNldHMubGVuZ3RoO3Q8ZTsrK3QpdGhpcy51cGRhdGVEYXRhc2V0KHQpO0hlLm5vdGlmeSh0aGlzLCJhZnRlckRhdGFzZXRzVXBkYXRlIil9fSx1cGRhdGVEYXRhc2V0OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2V0RGF0YXNldE1ldGEodCksaT17bWV0YTplLGluZGV4OnR9OyExIT09SGUubm90aWZ5KHRoaXMsImJlZm9yZURhdGFzZXRVcGRhdGUiLFtpXSkmJihlLmNvbnRyb2xsZXIudXBkYXRlKCksSGUubm90aWZ5KHRoaXMsImFmdGVyRGF0YXNldFVwZGF0ZSIsW2ldKSl9LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3QmJiJvYmplY3QiPT10eXBlb2YgdHx8KHQ9e2R1cmF0aW9uOnQsbGF6eTphcmd1bWVudHNbMV19KTt2YXIgaT1lLm9wdGlvbnMuYW5pbWF0aW9uLG49UWUodC5kdXJhdGlvbixpJiZpLmR1cmF0aW9uKSxhPXQubGF6eTtpZighMSE9PUhlLm5vdGlmeShlLCJiZWZvcmVSZW5kZXIiKSl7dmFyIHI9ZnVuY3Rpb24odCl7SGUubm90aWZ5KGUsImFmdGVyUmVuZGVyIiksdXQuY2FsbGJhY2soaSYmaS5vbkNvbXBsZXRlLFt0XSxlKX07aWYoaSYmbil7dmFyIG89bmV3IHB0KHtudW1TdGVwczpuLzE2LjY2LGVhc2luZzp0LmVhc2luZ3x8aS5lYXNpbmcscmVuZGVyOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dXQuZWFzaW5nLmVmZmVjdHNbZS5lYXNpbmddLG49ZS5jdXJyZW50U3RlcCxhPW4vZS5udW1TdGVwczt0LmRyYXcoaShhKSxhLG4pfSxvbkFuaW1hdGlvblByb2dyZXNzOmkub25Qcm9ncmVzcyxvbkFuaW1hdGlvbkNvbXBsZXRlOnJ9KTt2dC5hZGRBbmltYXRpb24oZSxvLG4sYSl9ZWxzZSBlLmRyYXcoKSxyKG5ldyBwdCh7bnVtU3RlcHM6MCxjaGFydDplfSkpO3JldHVybiBlfX0sZHJhdzpmdW5jdGlvbih0KXt2YXIgZT10aGlzO2UuY2xlYXIoKSx1dC5pc051bGxPclVuZGVmKHQpJiYodD0xKSxlLnRyYW5zaXRpb24odCksZS53aWR0aDw9MHx8ZS5oZWlnaHQ8PTB8fCExIT09SGUubm90aWZ5KGUsImJlZm9yZURyYXciLFt0XSkmJih1dC5lYWNoKGUuYm94ZXMsZnVuY3Rpb24odCl7dC5kcmF3KGUuY2hhcnRBcmVhKX0sZSksZS5kcmF3RGF0YXNldHModCksZS5fZHJhd1Rvb2x0aXAodCksSGUubm90aWZ5KGUsImFmdGVyRHJhdyIsW3RdKSl9LHRyYW5zaXRpb246ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAsaT0odGhpcy5kYXRhLmRhdGFzZXRzfHxbXSkubGVuZ3RoO2U8aTsrK2UpdGhpcy5pc0RhdGFzZXRWaXNpYmxlKGUpJiZ0aGlzLmdldERhdGFzZXRNZXRhKGUpLmNvbnRyb2xsZXIudHJhbnNpdGlvbih0KTt0aGlzLnRvb2x0aXAudHJhbnNpdGlvbih0KX0sZHJhd0RhdGFzZXRzOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoITEhPT1IZS5ub3RpZnkoZSwiYmVmb3JlRGF0YXNldHNEcmF3IixbdF0pKXtmb3IodmFyIGk9KGUuZGF0YS5kYXRhc2V0c3x8W10pLmxlbmd0aC0xO2k+PTA7LS1pKWUuaXNEYXRhc2V0VmlzaWJsZShpKSYmZS5kcmF3RGF0YXNldChpLHQpO0hlLm5vdGlmeShlLCJhZnRlckRhdGFzZXRzRHJhdyIsW3RdKX19LGRyYXdEYXRhc2V0OmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5nZXREYXRhc2V0TWV0YSh0KSxuPXttZXRhOmksaW5kZXg6dCxlYXNpbmdWYWx1ZTplfTshMSE9PUhlLm5vdGlmeSh0aGlzLCJiZWZvcmVEYXRhc2V0RHJhdyIsW25dKSYmKGkuY29udHJvbGxlci5kcmF3KGUpLEhlLm5vdGlmeSh0aGlzLCJhZnRlckRhdGFzZXREcmF3Iixbbl0pKX0sX2RyYXdUb29sdGlwOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMudG9vbHRpcCxpPXt0b29sdGlwOmUsZWFzaW5nVmFsdWU6dH07ITEhPT1IZS5ub3RpZnkodGhpcywiYmVmb3JlVG9vbHRpcERyYXciLFtpXSkmJihlLmRyYXcoKSxIZS5ub3RpZnkodGhpcywiYWZ0ZXJUb29sdGlwRHJhdyIsW2ldKSl9LGdldEVsZW1lbnRBdEV2ZW50OmZ1bmN0aW9uKHQpe3JldHVybiBwZS5tb2Rlcy5zaW5nbGUodGhpcyx0KX0sZ2V0RWxlbWVudHNBdEV2ZW50OmZ1bmN0aW9uKHQpe3JldHVybiBwZS5tb2Rlcy5sYWJlbCh0aGlzLHQse2ludGVyc2VjdDohMH0pfSxnZXRFbGVtZW50c0F0WEF4aXM6ZnVuY3Rpb24odCl7cmV0dXJuIHBlLm1vZGVzWyJ4LWF4aXMiXSh0aGlzLHQse2ludGVyc2VjdDohMH0pfSxnZXRFbGVtZW50c0F0RXZlbnRGb3JNb2RlOmZ1bmN0aW9uKHQsZSxpKXt2YXIgbj1wZS5tb2Rlc1tlXTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbj9uKHRoaXMsdCxpKTpbXX0sZ2V0RGF0YXNldEF0RXZlbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHBlLm1vZGVzLmRhdGFzZXQodGhpcyx0LHtpbnRlcnNlY3Q6ITB9KX0sZ2V0RGF0YXNldE1ldGE6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kYXRhLmRhdGFzZXRzW3RdO2UuX21ldGF8fChlLl9tZXRhPXt9KTt2YXIgaT1lLl9tZXRhW3RoaXMuaWRdO3JldHVybiBpfHwoaT1lLl9tZXRhW3RoaXMuaWRdPXt0eXBlOm51bGwsZGF0YTpbXSxkYXRhc2V0Om51bGwsY29udHJvbGxlcjpudWxsLGhpZGRlbjpudWxsLHhBeGlzSUQ6bnVsbCx5QXhpc0lEOm51bGx9KSxpfSxnZXRWaXNpYmxlRGF0YXNldENvdW50OmZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsZT0wLGk9dGhpcy5kYXRhLmRhdGFzZXRzLmxlbmd0aDtlPGk7KytlKXRoaXMuaXNEYXRhc2V0VmlzaWJsZShlKSYmdCsrO3JldHVybiB0fSxpc0RhdGFzZXRWaXNpYmxlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2V0RGF0YXNldE1ldGEodCk7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgZS5oaWRkZW4/IWUuaGlkZGVuOiF0aGlzLmRhdGEuZGF0YXNldHNbdF0uaGlkZGVufSxnZW5lcmF0ZUxlZ2VuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMubGVnZW5kQ2FsbGJhY2sodGhpcyl9LGRlc3Ryb3lEYXRhc2V0TWV0YTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmlkLGk9dGhpcy5kYXRhLmRhdGFzZXRzW3RdLG49aS5fbWV0YSYmaS5fbWV0YVtlXTtuJiYobi5jb250cm9sbGVyLmRlc3Ryb3koKSxkZWxldGUgaS5fbWV0YVtlXSl9LGRlc3Ryb3k6ZnVuY3Rpb24oKXt2YXIgdCxlLGk9dGhpcyxuPWkuY2FudmFzO2ZvcihpLnN0b3AoKSx0PTAsZT1pLmRhdGEuZGF0YXNldHMubGVuZ3RoO3Q8ZTsrK3QpaS5kZXN0cm95RGF0YXNldE1ldGEodCk7biYmKGkudW5iaW5kRXZlbnRzKCksdXQuY2FudmFzLmNsZWFyKGkpLFZlLnJlbGVhc2VDb250ZXh0KGkuY3R4KSxpLmNhbnZhcz1udWxsLGkuY3R4PW51bGwpLEhlLm5vdGlmeShpLCJkZXN0cm95IiksZGVsZXRlIG5pLmluc3RhbmNlc1tpLmlkXX0sdG9CYXNlNjRJbWFnZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNhbnZhcy50b0RhdGFVUkwuYXBwbHkodGhpcy5jYW52YXMsYXJndW1lbnRzKX0saW5pdFRvb2xUaXA6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3QudG9vbHRpcD1uZXcgSmUoe19jaGFydDp0LF9jaGFydEluc3RhbmNlOnQsX2RhdGE6dC5kYXRhLF9vcHRpb25zOnQub3B0aW9ucy50b29sdGlwc30sdCl9LGJpbmRFdmVudHM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dC5fbGlzdGVuZXJzPXt9LGk9ZnVuY3Rpb24oKXt0LmV2ZW50SGFuZGxlci5hcHBseSh0LGFyZ3VtZW50cyl9O3V0LmVhY2godC5vcHRpb25zLmV2ZW50cyxmdW5jdGlvbihuKXtWZS5hZGRFdmVudExpc3RlbmVyKHQsbixpKSxlW25dPWl9KSx0Lm9wdGlvbnMucmVzcG9uc2l2ZSYmKGk9ZnVuY3Rpb24oKXt0LnJlc2l6ZSgpfSxWZS5hZGRFdmVudExpc3RlbmVyKHQsInJlc2l6ZSIsaSksZS5yZXNpemU9aSl9LHVuYmluZEV2ZW50czpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10Ll9saXN0ZW5lcnM7ZSYmKGRlbGV0ZSB0Ll9saXN0ZW5lcnMsdXQuZWFjaChlLGZ1bmN0aW9uKGUsaSl7VmUucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LGksZSl9KSl9LHVwZGF0ZUhvdmVyU3R5bGU6ZnVuY3Rpb24odCxlLGkpe3ZhciBuLGEscixvPWk/InNldEhvdmVyU3R5bGUiOiJyZW1vdmVIb3ZlclN0eWxlIjtmb3IoYT0wLHI9dC5sZW5ndGg7YTxyOysrYSkobj10W2FdKSYmdGhpcy5nZXREYXRhc2V0TWV0YShuLl9kYXRhc2V0SW5kZXgpLmNvbnRyb2xsZXJbb10obil9LGV2ZW50SGFuZGxlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLGk9ZS50b29sdGlwO2lmKCExIT09SGUubm90aWZ5KGUsImJlZm9yZUV2ZW50IixbdF0pKXtlLl9idWZmZXJlZFJlbmRlcj0hMCxlLl9idWZmZXJlZFJlcXVlc3Q9bnVsbDt2YXIgbj1lLmhhbmRsZUV2ZW50KHQpO2kmJihuPWkuX3N0YXJ0P2kuaGFuZGxlRXZlbnQodCk6bnxpLmhhbmRsZUV2ZW50KHQpKSxIZS5ub3RpZnkoZSwiYWZ0ZXJFdmVudCIsW3RdKTt2YXIgYT1lLl9idWZmZXJlZFJlcXVlc3Q7cmV0dXJuIGE/ZS5yZW5kZXIoYSk6biYmIWUuYW5pbWF0aW5nJiYoZS5zdG9wKCksZS5yZW5kZXIoe2R1cmF0aW9uOmUub3B0aW9ucy5ob3Zlci5hbmltYXRpb25EdXJhdGlvbixsYXp5OiEwfSkpLGUuX2J1ZmZlcmVkUmVuZGVyPSExLGUuX2J1ZmZlcmVkUmVxdWVzdD1udWxsLGV9fSxoYW5kbGVFdmVudDpmdW5jdGlvbih0KXt2YXIgZSxpPXRoaXMsbj1pLm9wdGlvbnN8fHt9LGE9bi5ob3ZlcjtyZXR1cm4gaS5sYXN0QWN0aXZlPWkubGFzdEFjdGl2ZXx8W10sIm1vdXNlb3V0Ij09PXQudHlwZT9pLmFjdGl2ZT1bXTppLmFjdGl2ZT1pLmdldEVsZW1lbnRzQXRFdmVudEZvck1vZGUodCxhLm1vZGUsYSksdXQuY2FsbGJhY2sobi5vbkhvdmVyfHxuLmhvdmVyLm9uSG92ZXIsW3QubmF0aXZlLGkuYWN0aXZlXSxpKSwibW91c2V1cCIhPT10LnR5cGUmJiJjbGljayIhPT10LnR5cGV8fG4ub25DbGljayYmbi5vbkNsaWNrLmNhbGwoaSx0Lm5hdGl2ZSxpLmFjdGl2ZSksaS5sYXN0QWN0aXZlLmxlbmd0aCYmaS51cGRhdGVIb3ZlclN0eWxlKGkubGFzdEFjdGl2ZSxhLm1vZGUsITEpLGkuYWN0aXZlLmxlbmd0aCYmYS5tb2RlJiZpLnVwZGF0ZUhvdmVyU3R5bGUoaS5hY3RpdmUsYS5tb2RlLCEwKSxlPSF1dC5hcnJheUVxdWFscyhpLmFjdGl2ZSxpLmxhc3RBY3RpdmUpLGkubGFzdEFjdGl2ZT1pLmFjdGl2ZSxlfX0pLG5pLmluc3RhbmNlcz17fTt2YXIgYWk9bmk7bmkuQ29udHJvbGxlcj1uaSxuaS50eXBlcz17fSx1dC5jb25maWdNZXJnZT1laSx1dC5zY2FsZU1lcmdlPXRpO2Z1bmN0aW9uIHJpKCl7dGhyb3cgbmV3IEVycm9yKCJUaGlzIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQ6IGVpdGhlciBubyBhZGFwdGVyIGNhbiBiZSBmb3VuZCBvciBhbiBpbmNvbXBsZXRlIGludGVncmF0aW9uIHdhcyBwcm92aWRlZC4iKX1mdW5jdGlvbiBvaSh0KXt0aGlzLm9wdGlvbnM9dHx8e319dXQuZXh0ZW5kKG9pLnByb3RvdHlwZSx7Zm9ybWF0czpyaSxwYXJzZTpyaSxmb3JtYXQ6cmksYWRkOnJpLGRpZmY6cmksc3RhcnRPZjpyaSxlbmRPZjpyaSxfY3JlYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0fX0pLG9pLm92ZXJyaWRlPWZ1bmN0aW9uKHQpe3V0LmV4dGVuZChvaS5wcm90b3R5cGUsdCl9O3ZhciBzaT17X2RhdGU6b2l9LGxpPXtmb3JtYXR0ZXJzOnt2YWx1ZXM6ZnVuY3Rpb24odCl7cmV0dXJuIHV0LmlzQXJyYXkodCk/dDoiIit0fSxsaW5lYXI6ZnVuY3Rpb24odCxlLGkpe3ZhciBuPWkubGVuZ3RoPjM/aVsyXS1pWzFdOmlbMV0taVswXTtNYXRoLmFicyhuKT4xJiZ0IT09TWF0aC5mbG9vcih0KSYmKG49dC1NYXRoLmZsb29yKHQpKTt2YXIgYT11dC5sb2cxMChNYXRoLmFicyhuKSkscj0iIjtpZigwIT09dClpZihNYXRoLm1heChNYXRoLmFicyhpWzBdKSxNYXRoLmFicyhpW2kubGVuZ3RoLTFdKSk8MWUtNCl7dmFyIG89dXQubG9nMTAoTWF0aC5hYnModCkpO3I9dC50b0V4cG9uZW50aWFsKE1hdGguZmxvb3IobyktTWF0aC5mbG9vcihhKSl9ZWxzZXt2YXIgcz0tMSpNYXRoLmZsb29yKGEpO3M9TWF0aC5tYXgoTWF0aC5taW4ocywyMCksMCkscj10LnRvRml4ZWQocyl9ZWxzZSByPSIwIjtyZXR1cm4gcn0sbG9nYXJpdGhtaWM6ZnVuY3Rpb24odCxlLGkpe3ZhciBuPXQvTWF0aC5wb3coMTAsTWF0aC5mbG9vcih1dC5sb2cxMCh0KSkpO3JldHVybiAwPT09dD8iMCI6MT09PW58fDI9PT1ufHw1PT09bnx8MD09PWV8fGU9PT1pLmxlbmd0aC0xP3QudG9FeHBvbmVudGlhbCgpOiIifX19LHVpPXV0LnZhbHVlT3JEZWZhdWx0LGRpPXV0LnZhbHVlQXRJbmRleE9yRGVmYXVsdDtmdW5jdGlvbiBoaSh0KXt2YXIgZSxpLG49W107Zm9yKGU9MCxpPXQubGVuZ3RoO2U8aTsrK2Upbi5wdXNoKHRbZV0ubGFiZWwpO3JldHVybiBufWZ1bmN0aW9uIGNpKHQsZSxpKXtyZXR1cm4gdXQuaXNBcnJheShlKT91dC5sb25nZXN0VGV4dCh0LGksZSk6dC5tZWFzdXJlVGV4dChlKS53aWR0aH1vdC5fc2V0KCJzY2FsZSIse2Rpc3BsYXk6ITAscG9zaXRpb246ImxlZnQiLG9mZnNldDohMSxncmlkTGluZXM6e2Rpc3BsYXk6ITAsY29sb3I6InJnYmEoMCwgMCwgMCwgMC4xKSIsbGluZVdpZHRoOjEsZHJhd0JvcmRlcjohMCxkcmF3T25DaGFydEFyZWE6ITAsZHJhd1RpY2tzOiEwLHRpY2tNYXJrTGVuZ3RoOjEwLHplcm9MaW5lV2lkdGg6MSx6ZXJvTGluZUNvbG9yOiJyZ2JhKDAsMCwwLDAuMjUpIix6ZXJvTGluZUJvcmRlckRhc2g6W10semVyb0xpbmVCb3JkZXJEYXNoT2Zmc2V0OjAsb2Zmc2V0R3JpZExpbmVzOiExLGJvcmRlckRhc2g6W10sYm9yZGVyRGFzaE9mZnNldDowfSxzY2FsZUxhYmVsOntkaXNwbGF5OiExLGxhYmVsU3RyaW5nOiIiLHBhZGRpbmc6e3RvcDo0LGJvdHRvbTo0fX0sdGlja3M6e2JlZ2luQXRaZXJvOiExLG1pblJvdGF0aW9uOjAsbWF4Um90YXRpb246NTAsbWlycm9yOiExLHBhZGRpbmc6MCxyZXZlcnNlOiExLGRpc3BsYXk6ITAsYXV0b1NraXA6ITAsYXV0b1NraXBQYWRkaW5nOjAsbGFiZWxPZmZzZXQ6MCxjYWxsYmFjazpsaS5mb3JtYXR0ZXJzLnZhbHVlcyxtaW5vcjp7fSxtYWpvcjp7fX19KTt2YXIgZmk9Z3QuZXh0ZW5kKHtnZXRQYWRkaW5nOmZ1bmN0aW9uKCl7cmV0dXJue2xlZnQ6dGhpcy5wYWRkaW5nTGVmdHx8MCx0b3A6dGhpcy5wYWRkaW5nVG9wfHwwLHJpZ2h0OnRoaXMucGFkZGluZ1JpZ2h0fHwwLGJvdHRvbTp0aGlzLnBhZGRpbmdCb3R0b218fDB9fSxnZXRUaWNrczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90aWNrc30sbWVyZ2VUaWNrc09wdGlvbnM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMudGlja3M7Zm9yKHZhciBlIGluITE9PT10Lm1pbm9yJiYodC5taW5vcj17ZGlzcGxheTohMX0pLCExPT09dC5tYWpvciYmKHQubWFqb3I9e2Rpc3BsYXk6ITF9KSx0KSJtYWpvciIhPT1lJiYibWlub3IiIT09ZSYmKHZvaWQgMD09PXQubWlub3JbZV0mJih0Lm1pbm9yW2VdPXRbZV0pLHZvaWQgMD09PXQubWFqb3JbZV0mJih0Lm1ham9yW2VdPXRbZV0pKX0sYmVmb3JlVXBkYXRlOmZ1bmN0aW9uKCl7dXQuY2FsbGJhY2sodGhpcy5vcHRpb25zLmJlZm9yZVVwZGF0ZSxbdGhpc10pfSx1cGRhdGU6ZnVuY3Rpb24odCxlLGkpe3ZhciBuLGEscixvLHMsbCx1PXRoaXM7Zm9yKHUuYmVmb3JlVXBkYXRlKCksdS5tYXhXaWR0aD10LHUubWF4SGVpZ2h0PWUsdS5tYXJnaW5zPXV0LmV4dGVuZCh7bGVmdDowLHJpZ2h0OjAsdG9wOjAsYm90dG9tOjB9LGkpLHUuX21heExhYmVsTGluZXM9MCx1Lmxvbmdlc3RMYWJlbFdpZHRoPTAsdS5sb25nZXN0VGV4dENhY2hlPXUubG9uZ2VzdFRleHRDYWNoZXx8e30sdS5iZWZvcmVTZXREaW1lbnNpb25zKCksdS5zZXREaW1lbnNpb25zKCksdS5hZnRlclNldERpbWVuc2lvbnMoKSx1LmJlZm9yZURhdGFMaW1pdHMoKSx1LmRldGVybWluZURhdGFMaW1pdHMoKSx1LmFmdGVyRGF0YUxpbWl0cygpLHUuYmVmb3JlQnVpbGRUaWNrcygpLHM9dS5idWlsZFRpY2tzKCl8fFtdLHM9dS5hZnRlckJ1aWxkVGlja3Mocyl8fHMsdS5iZWZvcmVUaWNrVG9MYWJlbENvbnZlcnNpb24oKSxyPXUuY29udmVydFRpY2tzVG9MYWJlbHMocyl8fHUudGlja3MsdS5hZnRlclRpY2tUb0xhYmVsQ29udmVyc2lvbigpLHUudGlja3M9cixuPTAsYT1yLmxlbmd0aDtuPGE7KytuKW89cltuXSwobD1zW25dKT9sLmxhYmVsPW86cy5wdXNoKGw9e2xhYmVsOm8sbWFqb3I6ITF9KTtyZXR1cm4gdS5fdGlja3M9cyx1LmJlZm9yZUNhbGN1bGF0ZVRpY2tSb3RhdGlvbigpLHUuY2FsY3VsYXRlVGlja1JvdGF0aW9uKCksdS5hZnRlckNhbGN1bGF0ZVRpY2tSb3RhdGlvbigpLHUuYmVmb3JlRml0KCksdS5maXQoKSx1LmFmdGVyRml0KCksdS5hZnRlclVwZGF0ZSgpLHUubWluU2l6ZX0sYWZ0ZXJVcGRhdGU6ZnVuY3Rpb24oKXt1dC5jYWxsYmFjayh0aGlzLm9wdGlvbnMuYWZ0ZXJVcGRhdGUsW3RoaXNdKX0sYmVmb3JlU2V0RGltZW5zaW9uczpmdW5jdGlvbigpe3V0LmNhbGxiYWNrKHRoaXMub3B0aW9ucy5iZWZvcmVTZXREaW1lbnNpb25zLFt0aGlzXSl9LHNldERpbWVuc2lvbnM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3QuaXNIb3Jpem9udGFsKCk/KHQud2lkdGg9dC5tYXhXaWR0aCx0LmxlZnQ9MCx0LnJpZ2h0PXQud2lkdGgpOih0LmhlaWdodD10Lm1heEhlaWdodCx0LnRvcD0wLHQuYm90dG9tPXQuaGVpZ2h0KSx0LnBhZGRpbmdMZWZ0PTAsdC5wYWRkaW5nVG9wPTAsdC5wYWRkaW5nUmlnaHQ9MCx0LnBhZGRpbmdCb3R0b209MH0sYWZ0ZXJTZXREaW1lbnNpb25zOmZ1bmN0aW9uKCl7dXQuY2FsbGJhY2sodGhpcy5vcHRpb25zLmFmdGVyU2V0RGltZW5zaW9ucyxbdGhpc10pfSxiZWZvcmVEYXRhTGltaXRzOmZ1bmN0aW9uKCl7dXQuY2FsbGJhY2sodGhpcy5vcHRpb25zLmJlZm9yZURhdGFMaW1pdHMsW3RoaXNdKX0sZGV0ZXJtaW5lRGF0YUxpbWl0czp1dC5ub29wLGFmdGVyRGF0YUxpbWl0czpmdW5jdGlvbigpe3V0LmNhbGxiYWNrKHRoaXMub3B0aW9ucy5hZnRlckRhdGFMaW1pdHMsW3RoaXNdKX0sYmVmb3JlQnVpbGRUaWNrczpmdW5jdGlvbigpe3V0LmNhbGxiYWNrKHRoaXMub3B0aW9ucy5iZWZvcmVCdWlsZFRpY2tzLFt0aGlzXSl9LGJ1aWxkVGlja3M6dXQubm9vcCxhZnRlckJ1aWxkVGlja3M6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdXQuaXNBcnJheSh0KSYmdC5sZW5ndGg/dXQuY2FsbGJhY2soZS5vcHRpb25zLmFmdGVyQnVpbGRUaWNrcyxbZSx0XSk6KGUudGlja3M9dXQuY2FsbGJhY2soZS5vcHRpb25zLmFmdGVyQnVpbGRUaWNrcyxbZSxlLnRpY2tzXSl8fGUudGlja3MsdCl9LGJlZm9yZVRpY2tUb0xhYmVsQ29udmVyc2lvbjpmdW5jdGlvbigpe3V0LmNhbGxiYWNrKHRoaXMub3B0aW9ucy5iZWZvcmVUaWNrVG9MYWJlbENvbnZlcnNpb24sW3RoaXNdKX0sY29udmVydFRpY2tzVG9MYWJlbHM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMudGlja3M7dGhpcy50aWNrcz10aGlzLnRpY2tzLm1hcCh0LnVzZXJDYWxsYmFja3x8dC5jYWxsYmFjayx0aGlzKX0sYWZ0ZXJUaWNrVG9MYWJlbENvbnZlcnNpb246ZnVuY3Rpb24oKXt1dC5jYWxsYmFjayh0aGlzLm9wdGlvbnMuYWZ0ZXJUaWNrVG9MYWJlbENvbnZlcnNpb24sW3RoaXNdKX0sYmVmb3JlQ2FsY3VsYXRlVGlja1JvdGF0aW9uOmZ1bmN0aW9uKCl7dXQuY2FsbGJhY2sodGhpcy5vcHRpb25zLmJlZm9yZUNhbGN1bGF0ZVRpY2tSb3RhdGlvbixbdGhpc10pfSxjYWxjdWxhdGVUaWNrUm90YXRpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dC5jdHgsaT10Lm9wdGlvbnMudGlja3Msbj1oaSh0Ll90aWNrcyksYT11dC5vcHRpb25zLl9wYXJzZUZvbnQoaSk7ZS5mb250PWEuc3RyaW5nO3ZhciByPWkubWluUm90YXRpb258fDA7aWYobi5sZW5ndGgmJnQub3B0aW9ucy5kaXNwbGF5JiZ0LmlzSG9yaXpvbnRhbCgpKWZvcih2YXIgbyxzPXV0Lmxvbmdlc3RUZXh0KGUsYS5zdHJpbmcsbix0Lmxvbmdlc3RUZXh0Q2FjaGUpLGw9cyx1PXQuZ2V0UGl4ZWxGb3JUaWNrKDEpLXQuZ2V0UGl4ZWxGb3JUaWNrKDApLTY7bD51JiZyPGkubWF4Um90YXRpb247KXt2YXIgZD11dC50b1JhZGlhbnMocik7aWYobz1NYXRoLmNvcyhkKSxNYXRoLnNpbihkKSpzPnQubWF4SGVpZ2h0KXtyLS07YnJlYWt9cisrLGw9bypzfXQubGFiZWxSb3RhdGlvbj1yfSxhZnRlckNhbGN1bGF0ZVRpY2tSb3RhdGlvbjpmdW5jdGlvbigpe3V0LmNhbGxiYWNrKHRoaXMub3B0aW9ucy5hZnRlckNhbGN1bGF0ZVRpY2tSb3RhdGlvbixbdGhpc10pfSxiZWZvcmVGaXQ6ZnVuY3Rpb24oKXt1dC5jYWxsYmFjayh0aGlzLm9wdGlvbnMuYmVmb3JlRml0LFt0aGlzXSl9LGZpdDpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10Lm1pblNpemU9e3dpZHRoOjAsaGVpZ2h0OjB9LGk9aGkodC5fdGlja3MpLG49dC5vcHRpb25zLGE9bi50aWNrcyxyPW4uc2NhbGVMYWJlbCxvPW4uZ3JpZExpbmVzLHM9dC5faXNWaXNpYmxlKCksbD1uLnBvc2l0aW9uLHU9dC5pc0hvcml6b250YWwoKSxkPXV0Lm9wdGlvbnMuX3BhcnNlRm9udCxoPWQoYSksYz1uLmdyaWRMaW5lcy50aWNrTWFya0xlbmd0aDtpZihlLndpZHRoPXU/dC5pc0Z1bGxXaWR0aCgpP3QubWF4V2lkdGgtdC5tYXJnaW5zLmxlZnQtdC5tYXJnaW5zLnJpZ2h0OnQubWF4V2lkdGg6cyYmby5kcmF3VGlja3M/YzowLGUuaGVpZ2h0PXU/cyYmby5kcmF3VGlja3M/YzowOnQubWF4SGVpZ2h0LHIuZGlzcGxheSYmcyl7dmFyIGY9ZChyKSxnPXV0Lm9wdGlvbnMudG9QYWRkaW5nKHIucGFkZGluZyksbT1mLmxpbmVIZWlnaHQrZy5oZWlnaHQ7dT9lLmhlaWdodCs9bTplLndpZHRoKz1tfWlmKGEuZGlzcGxheSYmcyl7dmFyIHA9dXQubG9uZ2VzdFRleHQodC5jdHgsaC5zdHJpbmcsaSx0Lmxvbmdlc3RUZXh0Q2FjaGUpLHY9dXQubnVtYmVyT2ZMYWJlbExpbmVzKGkpLHk9LjUqaC5zaXplLGI9dC5vcHRpb25zLnRpY2tzLnBhZGRpbmc7aWYodC5fbWF4TGFiZWxMaW5lcz12LHQubG9uZ2VzdExhYmVsV2lkdGg9cCx1KXt2YXIgeD11dC50b1JhZGlhbnModC5sYWJlbFJvdGF0aW9uKSxfPU1hdGguY29zKHgpLGs9TWF0aC5zaW4oeCkqcCtoLmxpbmVIZWlnaHQqdit5O2UuaGVpZ2h0PU1hdGgubWluKHQubWF4SGVpZ2h0LGUuaGVpZ2h0K2srYiksdC5jdHguZm9udD1oLnN0cmluZzt2YXIgdyxNLFM9Y2kodC5jdHgsaVswXSxoLnN0cmluZyksRD1jaSh0LmN0eCxpW2kubGVuZ3RoLTFdLGguc3RyaW5nKSxDPXQuZ2V0UGl4ZWxGb3JUaWNrKDApLXQubGVmdCxQPXQucmlnaHQtdC5nZXRQaXhlbEZvclRpY2soaS5sZW5ndGgtMSk7MCE9PXQubGFiZWxSb3RhdGlvbj8odz0iYm90dG9tIj09PWw/XypTOl8qeSxNPSJib3R0b20iPT09bD9fKnk6XypEKToodz1TLzIsTT1ELzIpLHQucGFkZGluZ0xlZnQ9TWF0aC5tYXgody1DLDApKzMsdC5wYWRkaW5nUmlnaHQ9TWF0aC5tYXgoTS1QLDApKzN9ZWxzZSBhLm1pcnJvcj9wPTA6cCs9Yit5LGUud2lkdGg9TWF0aC5taW4odC5tYXhXaWR0aCxlLndpZHRoK3ApLHQucGFkZGluZ1RvcD1oLnNpemUvMix0LnBhZGRpbmdCb3R0b209aC5zaXplLzJ9dC5oYW5kbGVNYXJnaW5zKCksdC53aWR0aD1lLndpZHRoLHQuaGVpZ2h0PWUuaGVpZ2h0fSxoYW5kbGVNYXJnaW5zOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0Lm1hcmdpbnMmJih0LnBhZGRpbmdMZWZ0PU1hdGgubWF4KHQucGFkZGluZ0xlZnQtdC5tYXJnaW5zLmxlZnQsMCksdC5wYWRkaW5nVG9wPU1hdGgubWF4KHQucGFkZGluZ1RvcC10Lm1hcmdpbnMudG9wLDApLHQucGFkZGluZ1JpZ2h0PU1hdGgubWF4KHQucGFkZGluZ1JpZ2h0LXQubWFyZ2lucy5yaWdodCwwKSx0LnBhZGRpbmdCb3R0b209TWF0aC5tYXgodC5wYWRkaW5nQm90dG9tLXQubWFyZ2lucy5ib3R0b20sMCkpfSxhZnRlckZpdDpmdW5jdGlvbigpe3V0LmNhbGxiYWNrKHRoaXMub3B0aW9ucy5hZnRlckZpdCxbdGhpc10pfSxpc0hvcml6b250YWw6ZnVuY3Rpb24oKXtyZXR1cm4idG9wIj09PXRoaXMub3B0aW9ucy5wb3NpdGlvbnx8ImJvdHRvbSI9PT10aGlzLm9wdGlvbnMucG9zaXRpb259LGlzRnVsbFdpZHRoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5mdWxsV2lkdGh9LGdldFJpZ2h0VmFsdWU6ZnVuY3Rpb24odCl7aWYodXQuaXNOdWxsT3JVbmRlZih0KSlyZXR1cm4gTmFOO2lmKCgibnVtYmVyIj09dHlwZW9mIHR8fHQgaW5zdGFuY2VvZiBOdW1iZXIpJiYhaXNGaW5pdGUodCkpcmV0dXJuIE5hTjtpZih0KWlmKHRoaXMuaXNIb3Jpem9udGFsKCkpe2lmKHZvaWQgMCE9PXQueClyZXR1cm4gdGhpcy5nZXRSaWdodFZhbHVlKHQueCl9ZWxzZSBpZih2b2lkIDAhPT10LnkpcmV0dXJuIHRoaXMuZ2V0UmlnaHRWYWx1ZSh0LnkpO3JldHVybiB0fSxnZXRMYWJlbEZvckluZGV4OnV0Lm5vb3AsZ2V0UGl4ZWxGb3JWYWx1ZTp1dC5ub29wLGdldFZhbHVlRm9yUGl4ZWw6dXQubm9vcCxnZXRQaXhlbEZvclRpY2s6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxpPWUub3B0aW9ucy5vZmZzZXQ7aWYoZS5pc0hvcml6b250YWwoKSl7dmFyIG49KGUud2lkdGgtKGUucGFkZGluZ0xlZnQrZS5wYWRkaW5nUmlnaHQpKS9NYXRoLm1heChlLl90aWNrcy5sZW5ndGgtKGk/MDoxKSwxKSxhPW4qdCtlLnBhZGRpbmdMZWZ0O2kmJihhKz1uLzIpO3ZhciByPWUubGVmdCthO3JldHVybiByKz1lLmlzRnVsbFdpZHRoKCk/ZS5tYXJnaW5zLmxlZnQ6MH12YXIgbz1lLmhlaWdodC0oZS5wYWRkaW5nVG9wK2UucGFkZGluZ0JvdHRvbSk7cmV0dXJuIGUudG9wK3QqKG8vKGUuX3RpY2tzLmxlbmd0aC0xKSl9LGdldFBpeGVsRm9yRGVjaW1hbDpmdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKGUuaXNIb3Jpem9udGFsKCkpe3ZhciBpPShlLndpZHRoLShlLnBhZGRpbmdMZWZ0K2UucGFkZGluZ1JpZ2h0KSkqdCtlLnBhZGRpbmdMZWZ0LG49ZS5sZWZ0K2k7cmV0dXJuIG4rPWUuaXNGdWxsV2lkdGgoKT9lLm1hcmdpbnMubGVmdDowfXJldHVybiBlLnRvcCt0KmUuaGVpZ2h0fSxnZXRCYXNlUGl4ZWw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRQaXhlbEZvclZhbHVlKHRoaXMuZ2V0QmFzZVZhbHVlKCkpfSxnZXRCYXNlVmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1pbixlPXRoaXMubWF4O3JldHVybiB0aGlzLmJlZ2luQXRaZXJvPzA6dDwwJiZlPDA/ZTp0PjAmJmU+MD90OjB9LF9hdXRvU2tpcDpmdW5jdGlvbih0KXt2YXIgZSxpLG49dGhpcyxhPW4uaXNIb3Jpem9udGFsKCkscj1uLm9wdGlvbnMudGlja3MubWlub3Isbz10Lmxlbmd0aCxzPSExLGw9ci5tYXhUaWNrc0xpbWl0LHU9bi5fdGlja1NpemUoKSooby0xKSxkPWE/bi53aWR0aC0obi5wYWRkaW5nTGVmdCtuLnBhZGRpbmdSaWdodCk6bi5oZWlnaHQtKG4ucGFkZGluZ1RvcCtuLlBhZGRpbmdCb3R0b20pLGg9W107Zm9yKHU+ZCYmKHM9MStNYXRoLmZsb29yKHUvZCkpLG8+bCYmKHM9TWF0aC5tYXgocywxK01hdGguZmxvb3Ioby9sKSkpLGU9MDtlPG87ZSsrKWk9dFtlXSxzPjEmJmUlcz4wJiZkZWxldGUgaS5sYWJlbA=="
},
{
"key": "Chart.bundle.min.js?4?1?1",
"type": "binary",
"value": "base64:LGgucHVzaChpKTtyZXR1cm4gaH0sX3RpY2tTaXplOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXQuaXNIb3Jpem9udGFsKCksaT10Lm9wdGlvbnMudGlja3MubWlub3Isbj11dC50b1JhZGlhbnModC5sYWJlbFJvdGF0aW9uKSxhPU1hdGguYWJzKE1hdGguY29zKG4pKSxyPU1hdGguYWJzKE1hdGguc2luKG4pKSxvPWkuYXV0b1NraXBQYWRkaW5nfHwwLHM9dC5sb25nZXN0TGFiZWxXaWR0aCtvfHwwLGw9dXQub3B0aW9ucy5fcGFyc2VGb250KGkpLHU9dC5fbWF4TGFiZWxMaW5lcypsLmxpbmVIZWlnaHQrb3x8MDtyZXR1cm4gZT91KmE+cypyP3MvYTp1L3I6dSpyPHMqYT91L2E6cy9yfSxfaXNWaXNpYmxlOmZ1bmN0aW9uKCl7dmFyIHQsZSxpLG49dGhpcy5jaGFydCxhPXRoaXMub3B0aW9ucy5kaXNwbGF5O2lmKCJhdXRvIiE9PWEpcmV0dXJuISFhO2Zvcih0PTAsZT1uLmRhdGEuZGF0YXNldHMubGVuZ3RoO3Q8ZTsrK3QpaWYobi5pc0RhdGFzZXRWaXNpYmxlKHQpJiYoKGk9bi5nZXREYXRhc2V0TWV0YSh0KSkueEF4aXNJRD09PXRoaXMuaWR8fGkueUF4aXNJRD09PXRoaXMuaWQpKXJldHVybiEwO3JldHVybiExfSxkcmF3OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsaT1lLm9wdGlvbnM7aWYoZS5faXNWaXNpYmxlKCkpe3ZhciBuLGEscixvPWUuY2hhcnQscz1lLmN0eCxsPW90Lmdsb2JhbC5kZWZhdWx0Rm9udENvbG9yLHU9aS50aWNrcy5taW5vcixkPWkudGlja3MubWFqb3J8fHUsaD1pLmdyaWRMaW5lcyxjPWkuc2NhbGVMYWJlbCxmPWkucG9zaXRpb24sZz0wIT09ZS5sYWJlbFJvdGF0aW9uLG09dS5taXJyb3IscD1lLmlzSG9yaXpvbnRhbCgpLHY9dXQub3B0aW9ucy5fcGFyc2VGb250LHk9dS5kaXNwbGF5JiZ1LmF1dG9Ta2lwP2UuX2F1dG9Ta2lwKGUuZ2V0VGlja3MoKSk6ZS5nZXRUaWNrcygpLGI9dWkodS5mb250Q29sb3IsbCkseD12KHUpLF89eC5saW5lSGVpZ2h0LGs9dWkoZC5mb250Q29sb3IsbCksdz12KGQpLE09dS5wYWRkaW5nLFM9dS5sYWJlbE9mZnNldCxEPWguZHJhd1RpY2tzP2gudGlja01hcmtMZW5ndGg6MCxDPXVpKGMuZm9udENvbG9yLGwpLFA9dihjKSxUPXV0Lm9wdGlvbnMudG9QYWRkaW5nKGMucGFkZGluZyksTz11dC50b1JhZGlhbnMoZS5sYWJlbFJvdGF0aW9uKSxJPVtdLEE9aC5kcmF3Qm9yZGVyP2RpKGgubGluZVdpZHRoLDAsMCk6MCxGPXV0Ll9hbGlnblBpeGVsOyJ0b3AiPT09Zj8obj1GKG8sZS5ib3R0b20sQSksYT1lLmJvdHRvbS1ELHI9bi1BLzIpOiJib3R0b20iPT09Zj8obj1GKG8sZS50b3AsQSksYT1uK0EvMixyPWUudG9wK0QpOiJsZWZ0Ij09PWY/KG49RihvLGUucmlnaHQsQSksYT1lLnJpZ2h0LUQscj1uLUEvMik6KG49RihvLGUubGVmdCxBKSxhPW4rQS8yLHI9ZS5sZWZ0K0QpO2lmKHV0LmVhY2goeSxmdW5jdGlvbihuLHMpe2lmKCF1dC5pc051bGxPclVuZGVmKG4ubGFiZWwpKXt2YXIgbCx1LGQsYyx2LHksYix4LGssdyxDLFAsVCxSLEwsVyxZPW4ubGFiZWw7cz09PWUuemVyb0xpbmVJbmRleCYmaS5vZmZzZXQ9PT1oLm9mZnNldEdyaWRMaW5lcz8obD1oLnplcm9MaW5lV2lkdGgsdT1oLnplcm9MaW5lQ29sb3IsZD1oLnplcm9MaW5lQm9yZGVyRGFzaHx8W10sYz1oLnplcm9MaW5lQm9yZGVyRGFzaE9mZnNldHx8MCk6KGw9ZGkoaC5saW5lV2lkdGgscyksdT1kaShoLmNvbG9yLHMpLGQ9aC5ib3JkZXJEYXNofHxbXSxjPWguYm9yZGVyRGFzaE9mZnNldHx8MCk7dmFyIE49dXQuaXNBcnJheShZKT9ZLmxlbmd0aDoxLHo9ZnVuY3Rpb24odCxlLGkpe3ZhciBuPXQuZ2V0UGl4ZWxGb3JUaWNrKGUpO3JldHVybiBpJiYoMT09PXQuZ2V0VGlja3MoKS5sZW5ndGg/bi09dC5pc0hvcml6b250YWwoKT9NYXRoLm1heChuLXQubGVmdCx0LnJpZ2h0LW4pOk1hdGgubWF4KG4tdC50b3AsdC5ib3R0b20tbik6bi09MD09PWU/KHQuZ2V0UGl4ZWxGb3JUaWNrKDEpLW4pLzI6KG4tdC5nZXRQaXhlbEZvclRpY2soZS0xKSkvMiksbn0oZSxzLGgub2Zmc2V0R3JpZExpbmVzKTtpZihwKXt2YXIgVj1EK007ejxlLmxlZnQtMWUtNyYmKHU9InJnYmEoMCwwLDAsMCkiKSx2PWI9az1DPUYobyx6LGwpLHk9YSx4PXIsVD1lLmdldFBpeGVsRm9yVGljayhzKStTLCJ0b3AiPT09Zj8odz1GKG8sdC50b3AsQSkrQS8yLFA9dC5ib3R0b20sTD0oKGc/MTouNSktTikqXyxXPWc/ImxlZnQiOiJjZW50ZXIiLFI9ZS5ib3R0b20tVik6KHc9dC50b3AsUD1GKG8sdC5ib3R0b20sQSktQS8yLEw9KGc/MDouNSkqXyxXPWc/InJpZ2h0IjoiY2VudGVyIixSPWUudG9wK1YpfWVsc2V7dmFyIEg9KG0/MDpEKStNO3o8ZS50b3AtMWUtNyYmKHU9InJnYmEoMCwwLDAsMCkiKSx2PWEsYj1yLHk9eD13PVA9RihvLHosbCksUj1lLmdldFBpeGVsRm9yVGljayhzKStTLEw9KDEtTikqXy8yLCJsZWZ0Ij09PWY/KGs9RihvLHQubGVmdCxBKStBLzIsQz10LnJpZ2h0LFc9bT8ibGVmdCI6InJpZ2h0IixUPWUucmlnaHQtSCk6KGs9dC5sZWZ0LEM9RihvLHQucmlnaHQsQSktQS8yLFc9bT8icmlnaHQiOiJsZWZ0IixUPWUubGVmdCtIKX1JLnB1c2goe3R4MTp2LHR5MTp5LHR4MjpiLHR5Mjp4LHgxOmsseTE6dyx4MjpDLHkyOlAsbGFiZWxYOlQsbGFiZWxZOlIsZ2xXaWR0aDpsLGdsQ29sb3I6dSxnbEJvcmRlckRhc2g6ZCxnbEJvcmRlckRhc2hPZmZzZXQ6Yyxyb3RhdGlvbjotMSpPLGxhYmVsOlksbWFqb3I6bi5tYWpvcix0ZXh0T2Zmc2V0OkwsdGV4dEFsaWduOld9KX19KSx1dC5lYWNoKEksZnVuY3Rpb24odCl7dmFyIGU9dC5nbFdpZHRoLGk9dC5nbENvbG9yO2lmKGguZGlzcGxheSYmZSYmaSYmKHMuc2F2ZSgpLHMubGluZVdpZHRoPWUscy5zdHJva2VTdHlsZT1pLHMuc2V0TGluZURhc2gmJihzLnNldExpbmVEYXNoKHQuZ2xCb3JkZXJEYXNoKSxzLmxpbmVEYXNoT2Zmc2V0PXQuZ2xCb3JkZXJEYXNoT2Zmc2V0KSxzLmJlZ2luUGF0aCgpLGguZHJhd1RpY2tzJiYocy5tb3ZlVG8odC50eDEsdC50eTEpLHMubGluZVRvKHQudHgyLHQudHkyKSksaC5kcmF3T25DaGFydEFyZWEmJihzLm1vdmVUbyh0LngxLHQueTEpLHMubGluZVRvKHQueDIsdC55MikpLHMuc3Ryb2tlKCkscy5yZXN0b3JlKCkpLHUuZGlzcGxheSl7cy5zYXZlKCkscy50cmFuc2xhdGUodC5sYWJlbFgsdC5sYWJlbFkpLHMucm90YXRlKHQucm90YXRpb24pLHMuZm9udD10Lm1ham9yP3cuc3RyaW5nOnguc3RyaW5nLHMuZmlsbFN0eWxlPXQubWFqb3I/azpiLHMudGV4dEJhc2VsaW5lPSJtaWRkbGUiLHMudGV4dEFsaWduPXQudGV4dEFsaWduO3ZhciBuPXQubGFiZWwsYT10LnRleHRPZmZzZXQ7aWYodXQuaXNBcnJheShuKSlmb3IodmFyIHI9MDtyPG4ubGVuZ3RoOysrcilzLmZpbGxUZXh0KCIiK25bcl0sMCxhKSxhKz1fO2Vsc2Ugcy5maWxsVGV4dChuLDAsYSk7cy5yZXN0b3JlKCl9fSksYy5kaXNwbGF5KXt2YXIgUixMLFc9MCxZPVAubGluZUhlaWdodC8yO2lmKHApUj1lLmxlZnQrKGUucmlnaHQtZS5sZWZ0KS8yLEw9ImJvdHRvbSI9PT1mP2UuYm90dG9tLVktVC5ib3R0b206ZS50b3ArWStULnRvcDtlbHNle3ZhciBOPSJsZWZ0Ij09PWY7Uj1OP2UubGVmdCtZK1QudG9wOmUucmlnaHQtWS1ULnRvcCxMPWUudG9wKyhlLmJvdHRvbS1lLnRvcCkvMixXPU4/LS41Kk1hdGguUEk6LjUqTWF0aC5QSX1zLnNhdmUoKSxzLnRyYW5zbGF0ZShSLEwpLHMucm90YXRlKFcpLHMudGV4dEFsaWduPSJjZW50ZXIiLHMudGV4dEJhc2VsaW5lPSJtaWRkbGUiLHMuZmlsbFN0eWxlPUMscy5mb250PVAuc3RyaW5nLHMuZmlsbFRleHQoYy5sYWJlbFN0cmluZywwLDApLHMucmVzdG9yZSgpfWlmKEEpe3ZhciB6LFYsSCxFLEI9QSxqPWRpKGgubGluZVdpZHRoLHkubGVuZ3RoLTEsMCk7cD8oej1GKG8sZS5sZWZ0LEIpLUIvMixWPUYobyxlLnJpZ2h0LGopK2ovMixIPUU9bik6KEg9RihvLGUudG9wLEIpLUIvMixFPUYobyxlLmJvdHRvbSxqKStqLzIsej1WPW4pLHMubGluZVdpZHRoPUEscy5zdHJva2VTdHlsZT1kaShoLmNvbG9yLDApLHMuYmVnaW5QYXRoKCkscy5tb3ZlVG8oeixIKSxzLmxpbmVUbyhWLEUpLHMuc3Ryb2tlKCl9fX19KSxnaT1maS5leHRlbmQoe2dldExhYmVsczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuY2hhcnQuZGF0YTtyZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsc3x8KHRoaXMuaXNIb3Jpem9udGFsKCk/dC54TGFiZWxzOnQueUxhYmVscyl8fHQubGFiZWxzfSxkZXRlcm1pbmVEYXRhTGltaXRzOmZ1bmN0aW9uKCl7dmFyIHQsZT10aGlzLGk9ZS5nZXRMYWJlbHMoKTtlLm1pbkluZGV4PTAsZS5tYXhJbmRleD1pLmxlbmd0aC0xLHZvaWQgMCE9PWUub3B0aW9ucy50aWNrcy5taW4mJih0PWkuaW5kZXhPZihlLm9wdGlvbnMudGlja3MubWluKSxlLm1pbkluZGV4PS0xIT09dD90OmUubWluSW5kZXgpLHZvaWQgMCE9PWUub3B0aW9ucy50aWNrcy5tYXgmJih0PWkuaW5kZXhPZihlLm9wdGlvbnMudGlja3MubWF4KSxlLm1heEluZGV4PS0xIT09dD90OmUubWF4SW5kZXgpLGUubWluPWlbZS5taW5JbmRleF0sZS5tYXg9aVtlLm1heEluZGV4XX0sYnVpbGRUaWNrczpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10LmdldExhYmVscygpO3QudGlja3M9MD09PXQubWluSW5kZXgmJnQubWF4SW5kZXg9PT1lLmxlbmd0aC0xP2U6ZS5zbGljZSh0Lm1pbkluZGV4LHQubWF4SW5kZXgrMSl9LGdldExhYmVsRm9ySW5kZXg6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLG49aS5jaGFydDtyZXR1cm4gbi5nZXREYXRhc2V0TWV0YShlKS5jb250cm9sbGVyLl9nZXRWYWx1ZVNjYWxlSWQoKT09PWkuaWQ/aS5nZXRSaWdodFZhbHVlKG4uZGF0YS5kYXRhc2V0c1tlXS5kYXRhW3RdKTppLnRpY2tzW3QtaS5taW5JbmRleF19LGdldFBpeGVsRm9yVmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgaSxuPXRoaXMsYT1uLm9wdGlvbnMub2Zmc2V0LHI9TWF0aC5tYXgobi5tYXhJbmRleCsxLW4ubWluSW5kZXgtKGE/MDoxKSwxKTtpZihudWxsIT10JiYoaT1uLmlzSG9yaXpvbnRhbCgpP3QueDp0LnkpLHZvaWQgMCE9PWl8fHZvaWQgMCE9PXQmJmlzTmFOKGUpKXt0PWl8fHQ7dmFyIG89bi5nZXRMYWJlbHMoKS5pbmRleE9mKHQpO2U9LTEhPT1vP286ZX1pZihuLmlzSG9yaXpvbnRhbCgpKXt2YXIgcz1uLndpZHRoL3IsbD1zKihlLW4ubWluSW5kZXgpO3JldHVybiBhJiYobCs9cy8yKSxuLmxlZnQrbH12YXIgdT1uLmhlaWdodC9yLGQ9dSooZS1uLm1pbkluZGV4KTtyZXR1cm4gYSYmKGQrPXUvMiksbi50b3ArZH0sZ2V0UGl4ZWxGb3JUaWNrOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmdldFBpeGVsRm9yVmFsdWUodGhpcy50aWNrc1t0XSx0K3RoaXMubWluSW5kZXgsbnVsbCl9LGdldFZhbHVlRm9yUGl4ZWw6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxpPWUub3B0aW9ucy5vZmZzZXQsbj1NYXRoLm1heChlLl90aWNrcy5sZW5ndGgtKGk/MDoxKSwxKSxhPWUuaXNIb3Jpem9udGFsKCkscj0oYT9lLndpZHRoOmUuaGVpZ2h0KS9uO3JldHVybiB0LT1hP2UubGVmdDplLnRvcCxpJiYodC09ci8yKSwodDw9MD8wOk1hdGgucm91bmQodC9yKSkrZS5taW5JbmRleH0sZ2V0QmFzZVBpeGVsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYm90dG9tfX0pLG1pPXtwb3NpdGlvbjoiYm90dG9tIn07Z2kuX2RlZmF1bHRzPW1pO3ZhciBwaT11dC5ub29wLHZpPXV0LmlzTnVsbE9yVW5kZWY7dmFyIHlpPWZpLmV4dGVuZCh7Z2V0UmlnaHRWYWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/K3Q6ZmkucHJvdG90eXBlLmdldFJpZ2h0VmFsdWUuY2FsbCh0aGlzLHQpfSxoYW5kbGVUaWNrUmFuZ2VPcHRpb25zOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXQub3B0aW9ucy50aWNrcztpZihlLmJlZ2luQXRaZXJvKXt2YXIgaT11dC5zaWduKHQubWluKSxuPXV0LnNpZ24odC5tYXgpO2k8MCYmbjwwP3QubWF4PTA6aT4wJiZuPjAmJih0Lm1pbj0wKX12YXIgYT12b2lkIDAhPT1lLm1pbnx8dm9pZCAwIT09ZS5zdWdnZXN0ZWRNaW4scj12b2lkIDAhPT1lLm1heHx8dm9pZCAwIT09ZS5zdWdnZXN0ZWRNYXg7dm9pZCAwIT09ZS5taW4/dC5taW49ZS5taW46dm9pZCAwIT09ZS5zdWdnZXN0ZWRNaW4mJihudWxsPT09dC5taW4/dC5taW49ZS5zdWdnZXN0ZWRNaW46dC5taW49TWF0aC5taW4odC5taW4sZS5zdWdnZXN0ZWRNaW4pKSx2b2lkIDAhPT1lLm1heD90Lm1heD1lLm1heDp2b2lkIDAhPT1lLnN1Z2dlc3RlZE1heCYmKG51bGw9PT10Lm1heD90Lm1heD1lLnN1Z2dlc3RlZE1heDp0Lm1heD1NYXRoLm1heCh0Lm1heCxlLnN1Z2dlc3RlZE1heCkpLGEhPT1yJiZ0Lm1pbj49dC5tYXgmJihhP3QubWF4PXQubWluKzE6dC5taW49dC5tYXgtMSksdC5taW49PT10Lm1heCYmKHQubWF4KyssZS5iZWdpbkF0WmVyb3x8dC5taW4tLSl9LGdldFRpY2tMaW1pdDpmdW5jdGlvbigpe3ZhciB0LGU9dGhpcy5vcHRpb25zLnRpY2tzLGk9ZS5zdGVwU2l6ZSxuPWUubWF4VGlja3NMaW1pdDtyZXR1cm4gaT90PU1hdGguY2VpbCh0aGlzLm1heC9pKS1NYXRoLmZsb29yKHRoaXMubWluL2kpKzE6KHQ9dGhpcy5fY29tcHV0ZVRpY2tMaW1pdCgpLG49bnx8MTEpLG4mJih0PU1hdGgubWluKG4sdCkpLHR9LF9jb21wdXRlVGlja0xpbWl0OmZ1bmN0aW9uKCl7cmV0dXJuIE51bWJlci5QT1NJVElWRV9JTkZJTklUWX0saGFuZGxlRGlyZWN0aW9uYWxDaGFuZ2VzOnBpLGJ1aWxkVGlja3M6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dC5vcHRpb25zLnRpY2tzLGk9dC5nZXRUaWNrTGltaXQoKSxuPXttYXhUaWNrczppPU1hdGgubWF4KDIsaSksbWluOmUubWluLG1heDplLm1heCxwcmVjaXNpb246ZS5wcmVjaXNpb24sc3RlcFNpemU6dXQudmFsdWVPckRlZmF1bHQoZS5maXhlZFN0ZXBTaXplLGUuc3RlcFNpemUpfSxhPXQudGlja3M9ZnVuY3Rpb24odCxlKXt2YXIgaSxuLGEscixvPVtdLHM9dC5zdGVwU2l6ZSxsPXN8fDEsdT10Lm1heFRpY2tzLTEsZD10Lm1pbixoPXQubWF4LGM9dC5wcmVjaXNpb24sZj1lLm1pbixnPWUubWF4LG09dXQubmljZU51bSgoZy1mKS91L2wpKmw7aWYobTwxZS0xNCYmdmkoZCkmJnZpKGgpKXJldHVybltmLGddOyhyPU1hdGguY2VpbChnL20pLU1hdGguZmxvb3IoZi9tKSk+dSYmKG09dXQubmljZU51bShyKm0vdS9sKSpsKSxzfHx2aShjKT9pPU1hdGgucG93KDEwLHV0Ll9kZWNpbWFsUGxhY2VzKG0pKTooaT1NYXRoLnBvdygxMCxjKSxtPU1hdGguY2VpbChtKmkpL2kpLG49TWF0aC5mbG9vcihmL20pKm0sYT1NYXRoLmNlaWwoZy9tKSptLHMmJighdmkoZCkmJnV0LmFsbW9zdFdob2xlKGQvbSxtLzFlMykmJihuPWQpLCF2aShoKSYmdXQuYWxtb3N0V2hvbGUoaC9tLG0vMWUzKSYmKGE9aCkpLHI9KGEtbikvbSxyPXV0LmFsbW9zdEVxdWFscyhyLE1hdGgucm91bmQociksbS8xZTMpP01hdGgucm91bmQocik6TWF0aC5jZWlsKHIpLG49TWF0aC5yb3VuZChuKmkpL2ksYT1NYXRoLnJvdW5kKGEqaSkvaSxvLnB1c2godmkoZCk/bjpkKTtmb3IodmFyIHA9MTtwPHI7KytwKW8ucHVzaChNYXRoLnJvdW5kKChuK3AqbSkqaSkvaSk7cmV0dXJuIG8ucHVzaCh2aShoKT9hOmgpLG99KG4sdCk7dC5oYW5kbGVEaXJlY3Rpb25hbENoYW5nZXMoKSx0Lm1heD11dC5tYXgoYSksdC5taW49dXQubWluKGEpLGUucmV2ZXJzZT8oYS5yZXZlcnNlKCksdC5zdGFydD10Lm1heCx0LmVuZD10Lm1pbik6KHQuc3RhcnQ9dC5taW4sdC5lbmQ9dC5tYXgpfSxjb252ZXJ0VGlja3NUb0xhYmVsczpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dC50aWNrc0FzTnVtYmVycz10LnRpY2tzLnNsaWNlKCksdC56ZXJvTGluZUluZGV4PXQudGlja3MuaW5kZXhPZigwKSxmaS5wcm90b3R5cGUuY29udmVydFRpY2tzVG9MYWJlbHMuY2FsbCh0KX19KSxiaT17cG9zaXRpb246ImxlZnQiLHRpY2tzOntjYWxsYmFjazpsaS5mb3JtYXR0ZXJzLmxpbmVhcn19LHhpPXlpLmV4dGVuZCh7ZGV0ZXJtaW5lRGF0YUxpbWl0czpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10Lm9wdGlvbnMsaT10LmNoYXJ0LG49aS5kYXRhLmRhdGFzZXRzLGE9dC5pc0hvcml6b250YWwoKTtmdW5jdGlvbiByKGUpe3JldHVybiBhP2UueEF4aXNJRD09PXQuaWQ6ZS55QXhpc0lEPT09dC5pZH10Lm1pbj1udWxsLHQubWF4PW51bGw7dmFyIG89ZS5zdGFja2VkO2lmKHZvaWQgMD09PW8mJnV0LmVhY2gobixmdW5jdGlvbih0LGUpe2lmKCFvKXt2YXIgbj1pLmdldERhdGFzZXRNZXRhKGUpO2kuaXNEYXRhc2V0VmlzaWJsZShlKSYmcihuKSYmdm9pZCAwIT09bi5zdGFjayYmKG89ITApfX0pLGUuc3RhY2tlZHx8byl7dmFyIHM9e307dXQuZWFjaChuLGZ1bmN0aW9uKG4sYSl7dmFyIG89aS5nZXREYXRhc2V0TWV0YShhKSxsPVtvLnR5cGUsdm9pZCAwPT09ZS5zdGFja2VkJiZ2b2lkIDA9PT1vLnN0YWNrP2E6IiIsby5zdGFja10uam9pbigiLiIpO3ZvaWQgMD09PXNbbF0mJihzW2xdPXtwb3NpdGl2ZVZhbHVlczpbXSxuZWdhdGl2ZVZhbHVlczpbXX0pO3ZhciB1PXNbbF0ucG9zaXRpdmVWYWx1ZXMsZD1zW2xdLm5lZ2F0aXZlVmFsdWVzO2kuaXNEYXRhc2V0VmlzaWJsZShhKSYmcihvKSYmdXQuZWFjaChuLmRhdGEsZnVuY3Rpb24oaSxuKXt2YXIgYT0rdC5nZXRSaWdodFZhbHVlKGkpO2lzTmFOKGEpfHxvLmRhdGFbbl0uaGlkZGVufHwodVtuXT11W25dfHwwLGRbbl09ZFtuXXx8MCxlLnJlbGF0aXZlUG9pbnRzP3Vbbl09MTAwOmE8MD9kW25dKz1hOnVbbl0rPWEpfSl9KSx1dC5lYWNoKHMsZnVuY3Rpb24oZSl7dmFyIGk9ZS5wb3NpdGl2ZVZhbHVlcy5jb25jYXQoZS5uZWdhdGl2ZVZhbHVlcyksbj11dC5taW4oaSksYT11dC5tYXgoaSk7dC5taW49bnVsbD09PXQubWluP246TWF0aC5taW4odC5taW4sbiksdC5tYXg9bnVsbD09PXQubWF4P2E6TWF0aC5tYXgodC5tYXgsYSl9KX1lbHNlIHV0LmVhY2gobixmdW5jdGlvbihlLG4pe3ZhciBhPWkuZ2V0RGF0YXNldE1ldGEobik7aS5pc0RhdGFzZXRWaXNpYmxlKG4pJiZyKGEpJiZ1dC5lYWNoKGUuZGF0YSxmdW5jdGlvbihlLGkpe3ZhciBuPSt0LmdldFJpZ2h0VmFsdWUoZSk7aXNOYU4obil8fGEuZGF0YVtpXS5oaWRkZW58fChudWxsPT09dC5taW4/dC5taW49bjpuPHQubWluJiYodC5taW49biksbnVsbD09PXQubWF4P3QubWF4PW46bj50Lm1heCYmKHQubWF4PW4pKX0pfSk7dC5taW49aXNGaW5pdGUodC5taW4pJiYhaXNOYU4odC5taW4pP3QubWluOjAsdC5tYXg9aXNGaW5pdGUodC5tYXgpJiYhaXNOYU4odC5tYXgpP3QubWF4OjEsdGhpcy5oYW5kbGVUaWNrUmFuZ2VPcHRpb25zKCl9LF9jb21wdXRlVGlja0xpbWl0OmZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHRoaXMuaXNIb3Jpem9udGFsKCk/TWF0aC5jZWlsKHRoaXMud2lkdGgvNDApOih0PXV0Lm9wdGlvbnMuX3BhcnNlRm9udCh0aGlzLm9wdGlvbnMudGlja3MpLE1hdGguY2VpbCh0aGlzLmhlaWdodC90LmxpbmVIZWlnaHQpKX0saGFuZGxlRGlyZWN0aW9uYWxDaGFuZ2VzOmZ1bmN0aW9uKCl7dGhpcy5pc0hvcml6b250YWwoKXx8dGhpcy50aWNrcy5yZXZlcnNlKCl9LGdldExhYmVsRm9ySW5kZXg6ZnVuY3Rpb24odCxlKXtyZXR1cm4rdGhpcy5nZXRSaWdodFZhbHVlKHRoaXMuY2hhcnQuZGF0YS5kYXRhc2V0c1tlXS5kYXRhW3RdKX0sZ2V0UGl4ZWxGb3JWYWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLGk9ZS5zdGFydCxuPStlLmdldFJpZ2h0VmFsdWUodCksYT1lLmVuZC1pO3JldHVybiBlLmlzSG9yaXpvbnRhbCgpP2UubGVmdCtlLndpZHRoL2EqKG4taSk6ZS5ib3R0b20tZS5oZWlnaHQvYSoobi1pKX0sZ2V0VmFsdWVGb3JQaXhlbDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLGk9ZS5pc0hvcml6b250YWwoKSxuPWk/ZS53aWR0aDplLmhlaWdodCxhPShpP3QtZS5sZWZ0OmUuYm90dG9tLXQpL247cmV0dXJuIGUuc3RhcnQrKGUuZW5kLWUuc3RhcnQpKmF9LGdldFBpeGVsRm9yVGljazpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5nZXRQaXhlbEZvclZhbHVlKHRoaXMudGlja3NBc051bWJlcnNbdF0pfX0pLF9pPWJpO3hpLl9kZWZhdWx0cz1faTt2YXIga2k9dXQudmFsdWVPckRlZmF1bHQ7dmFyIHdpPXtwb3NpdGlvbjoibGVmdCIsdGlja3M6e2NhbGxiYWNrOmxpLmZvcm1hdHRlcnMubG9nYXJpdGhtaWN9fTtmdW5jdGlvbiBNaSh0LGUpe3JldHVybiB1dC5pc0Zpbml0ZSh0KSYmdD49MD90OmV9dmFyIFNpPWZpLmV4dGVuZCh7ZGV0ZXJtaW5lRGF0YUxpbWl0czpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10Lm9wdGlvbnMsaT10LmNoYXJ0LG49aS5kYXRhLmRhdGFzZXRzLGE9dC5pc0hvcml6b250YWwoKTtmdW5jdGlvbiByKGUpe3JldHVybiBhP2UueEF4aXNJRD09PXQuaWQ6ZS55QXhpc0lEPT09dC5pZH10Lm1pbj1udWxsLHQubWF4PW51bGwsdC5taW5Ob3RaZXJvPW51bGw7dmFyIG89ZS5zdGFja2VkO2lmKHZvaWQgMD09PW8mJnV0LmVhY2gobixmdW5jdGlvbih0LGUpe2lmKCFvKXt2YXIgbj1pLmdldERhdGFzZXRNZXRhKGUpO2kuaXNEYXRhc2V0VmlzaWJsZShlKSYmcihuKSYmdm9pZCAwIT09bi5zdGFjayYmKG89ITApfX0pLGUuc3RhY2tlZHx8byl7dmFyIHM9e307dXQuZWFjaChuLGZ1bmN0aW9uKG4sYSl7dmFyIG89aS5nZXREYXRhc2V0TWV0YShhKSxsPVtvLnR5cGUsdm9pZCAwPT09ZS5zdGFja2VkJiZ2b2lkIDA9PT1vLnN0YWNrP2E6IiIsby5zdGFja10uam9pbigiLiIpO2kuaXNEYXRhc2V0VmlzaWJsZShhKSYmcihvKSYmKHZvaWQgMD09PXNbbF0mJihzW2xdPVtdKSx1dC5lYWNoKG4uZGF0YSxmdW5jdGlvbihlLGkpe3ZhciBuPXNbbF0sYT0rdC5nZXRSaWdodFZhbHVlKGUpO2lzTmFOKGEpfHxvLmRhdGFbaV0uaGlkZGVufHxhPDB8fChuW2ldPW5baV18fDAsbltpXSs9YSl9KSl9KSx1dC5lYWNoKHMsZnVuY3Rpb24oZSl7aWYoZS5sZW5ndGg+MCl7dmFyIGk9dXQubWluKGUpLG49dXQubWF4KGUpO3QubWluPW51bGw9PT10Lm1pbj9pOk1hdGgubWluKHQubWluLGkpLHQubWF4PW51bGw9PT10Lm1heD9uOk1hdGgubWF4KHQubWF4LG4pfX0pfWVsc2UgdXQuZWFjaChuLGZ1bmN0aW9uKGUsbil7dmFyIGE9aS5nZXREYXRhc2V0TWV0YShuKTtpLmlzRGF0YXNldFZpc2libGUobikmJnIoYSkmJnV0LmVhY2goZS5kYXRhLGZ1bmN0aW9uKGUsaSl7dmFyIG49K3QuZ2V0UmlnaHRWYWx1ZShlKTtpc05hTihuKXx8YS5kYXRhW2ldLmhpZGRlbnx8bjwwfHwobnVsbD09PXQubWluP3QubWluPW46bjx0Lm1pbiYmKHQubWluPW4pLG51bGw9PT10Lm1heD90Lm1heD1uOm4+dC5tYXgmJih0Lm1heD1uKSwwIT09biYmKG51bGw9PT10Lm1pbk5vdFplcm98fG48dC5taW5Ob3RaZXJvKSYmKHQubWluTm90WmVybz1uKSl9KX0pO3RoaXMuaGFuZGxlVGlja1JhbmdlT3B0aW9ucygpfSxoYW5kbGVUaWNrUmFuZ2VPcHRpb25zOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXQub3B0aW9ucy50aWNrczt0Lm1pbj1NaShlLm1pbix0Lm1pbiksdC5tYXg9TWkoZS5tYXgsdC5tYXgpLHQubWluPT09dC5tYXgmJigwIT09dC5taW4mJm51bGwhPT10Lm1pbj8odC5taW49TWF0aC5wb3coMTAsTWF0aC5mbG9vcih1dC5sb2cxMCh0Lm1pbikpLTEpLHQubWF4PU1hdGgucG93KDEwLE1hdGguZmxvb3IodXQubG9nMTAodC5tYXgpKSsxKSk6KHQubWluPTEsdC5tYXg9MTApKSxudWxsPT09dC5taW4mJih0Lm1pbj1NYXRoLnBvdygxMCxNYXRoLmZsb29yKHV0LmxvZzEwKHQubWF4KSktMSkpLG51bGw9PT10Lm1heCYmKHQubWF4PTAhPT10Lm1pbj9NYXRoLnBvdygxMCxNYXRoLmZsb29yKHV0LmxvZzEwKHQubWluKSkrMSk6MTApLG51bGw9PT10Lm1pbk5vdFplcm8mJih0Lm1pbj4wP3QubWluTm90WmVybz10Lm1pbjp0Lm1heDwxP3QubWluTm90WmVybz1NYXRoLnBvdygxMCxNYXRoLmZsb29yKHV0LmxvZzEwKHQubWF4KSkpOnQubWluTm90WmVybz0xKX0sYnVpbGRUaWNrczpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10Lm9wdGlvbnMudGlja3MsaT0hdC5pc0hvcml6b250YWwoKSxuPXttaW46TWkoZS5taW4pLG1heDpNaShlLm1heCl9LGE9dC50aWNrcz1mdW5jdGlvbih0LGUpe3ZhciBpLG4sYT1bXSxyPWtpKHQubWluLE1hdGgucG93KDEwLE1hdGguZmxvb3IodXQubG9nMTAoZS5taW4pKSkpLG89TWF0aC5mbG9vcih1dC5sb2cxMChlLm1heCkpLHM9TWF0aC5jZWlsKGUubWF4L01hdGgucG93KDEwLG8pKTswPT09cj8oaT1NYXRoLmZsb29yKHV0LmxvZzEwKGUubWluTm90WmVybykpLG49TWF0aC5mbG9vcihlLm1pbk5vdFplcm8vTWF0aC5wb3coMTAsaSkpLGEucHVzaChyKSxyPW4qTWF0aC5wb3coMTAsaSkpOihpPU1hdGguZmxvb3IodXQubG9nMTAocikpLG49TWF0aC5mbG9vcihyL01hdGgucG93KDEwLGkpKSk7dmFyIGw9aTwwP01hdGgucG93KDEwLE1hdGguYWJzKGkpKToxO2Rve2EucHVzaChyKSwxMD09KytuJiYobj0xLGw9KytpPj0wPzE6bCkscj1NYXRoLnJvdW5kKG4qTWF0aC5wb3coMTAsaSkqbCkvbH13aGlsZShpPG98fGk9PT1vJiZuPHMpO3ZhciB1PWtpKHQubWF4LHIpO3JldHVybiBhLnB1c2godSksYX0obix0KTt0Lm1heD11dC5tYXgoYSksdC5taW49dXQubWluKGEpLGUucmV2ZXJzZT8oaT0haSx0LnN0YXJ0PXQubWF4LHQuZW5kPXQubWluKToodC5zdGFydD10Lm1pbix0LmVuZD10Lm1heCksaSYmYS5yZXZlcnNlKCl9LGNvbnZlcnRUaWNrc1RvTGFiZWxzOmZ1bmN0aW9uKCl7dGhpcy50aWNrVmFsdWVzPXRoaXMudGlja3Muc2xpY2UoKSxmaS5wcm90b3R5cGUuY29udmVydFRpY2tzVG9MYWJlbHMuY2FsbCh0aGlzKX0sZ2V0TGFiZWxGb3JJbmRleDpmdW5jdGlvbih0LGUpe3JldHVybit0aGlzLmdldFJpZ2h0VmFsdWUodGhpcy5jaGFydC5kYXRhLmRhdGFzZXRzW2VdLmRhdGFbdF0pfSxnZXRQaXhlbEZvclRpY2s6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZ2V0UGl4ZWxGb3JWYWx1ZSh0aGlzLnRpY2tWYWx1ZXNbdF0pfSxfZ2V0Rmlyc3RUaWNrVmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5mbG9vcih1dC5sb2cxMCh0KSk7cmV0dXJuIE1hdGguZmxvb3IodC9NYXRoLnBvdygxMCxlKSkqTWF0aC5wb3coMTAsZSl9LGdldFBpeGVsRm9yVmFsdWU6ZnVuY3Rpb24odCl7dmFyIGUsaSxuLGEscixvPXRoaXMscz1vLm9wdGlvbnMudGlja3MsbD1zLnJldmVyc2UsdT11dC5sb2cxMCxkPW8uX2dldEZpcnN0VGlja1ZhbHVlKG8ubWluTm90WmVybyksaD0wO3JldHVybiB0PStvLmdldFJpZ2h0VmFsdWUodCksbD8obj1vLmVuZCxhPW8uc3RhcnQscj0tMSk6KG49by5zdGFydCxhPW8uZW5kLHI9MSksby5pc0hvcml6b250YWwoKT8oZT1vLndpZHRoLGk9bD9vLnJpZ2h0Om8ubGVmdCk6KGU9by5oZWlnaHQscio9LTEsaT1sP28udG9wOm8uYm90dG9tKSx0IT09biYmKDA9PT1uJiYoZS09aD1raShzLmZvbnRTaXplLG90Lmdsb2JhbC5kZWZhdWx0Rm9udFNpemUpLG49ZCksMCE9PXQmJihoKz1lLyh1KGEpLXUobikpKih1KHQpLXUobikpKSxpKz1yKmgpLGl9LGdldFZhbHVlRm9yUGl4ZWw6ZnVuY3Rpb24odCl7dmFyIGUsaSxuLGEscj10aGlzLG89ci5vcHRpb25zLnRpY2tzLHM9by5yZXZlcnNlLGw9dXQubG9nMTAsdT1yLl9nZXRGaXJzdFRpY2tWYWx1ZShyLm1pbk5vdFplcm8pO2lmKHM/KGk9ci5lbmQsbj1yLnN0YXJ0KTooaT1yLnN0YXJ0LG49ci5lbmQpLHIuaXNIb3Jpem9udGFsKCk/KGU9ci53aWR0aCxhPXM/ci5yaWdodC10OnQtci5sZWZ0KTooZT1yLmhlaWdodCxhPXM/dC1yLnRvcDpyLmJvdHRvbS10KSxhIT09aSl7aWYoMD09PWkpe3ZhciBkPWtpKG8uZm9udFNpemUsb3QuZ2xvYmFsLmRlZmF1bHRGb250U2l6ZSk7YS09ZCxlLT1kLGk9dX1hKj1sKG4pLWwoaSksYS89ZSxhPU1hdGgucG93KDEwLGwoaSkrYSl9cmV0dXJuIGF9fSksRGk9d2k7U2kuX2RlZmF1bHRzPURpO3ZhciBDaT11dC52YWx1ZU9yRGVmYXVsdCxQaT11dC52YWx1ZUF0SW5kZXhPckRlZmF1bHQsVGk9dXQub3B0aW9ucy5yZXNvbHZlLE9pPXtkaXNwbGF5OiEwLGFuaW1hdGU6ITAscG9zaXRpb246ImNoYXJ0QXJlYSIsYW5nbGVMaW5lczp7ZGlzcGxheTohMCxjb2xvcjoicmdiYSgwLCAwLCAwLCAwLjEpIixsaW5lV2lkdGg6MSxib3JkZXJEYXNoOltdLGJvcmRlckRhc2hPZmZzZXQ6MH0sZ3JpZExpbmVzOntjaXJjdWxhcjohMX0sdGlja3M6e3Nob3dMYWJlbEJhY2tkcm9wOiEwLGJhY2tkcm9wQ29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC43NSkiLGJhY2tkcm9wUGFkZGluZ1k6MixiYWNrZHJvcFBhZGRpbmdYOjIsY2FsbGJhY2s6bGkuZm9ybWF0dGVycy5saW5lYXJ9LHBvaW50TGFiZWxzOntkaXNwbGF5OiEwLGZvbnRTaXplOjEwLGNhbGxiYWNrOmZ1bmN0aW9uKHQpe3JldHVybiB0fX19O2Z1bmN0aW9uIElpKHQpe3ZhciBlPXQub3B0aW9ucztyZXR1cm4gZS5hbmdsZUxpbmVzLmRpc3BsYXl8fGUucG9pbnRMYWJlbHMuZGlzcGxheT90LmNoYXJ0LmRhdGEubGFiZWxzLmxlbmd0aDowfWZ1bmN0aW9uIEFpKHQpe3ZhciBlPXQudGlja3M7cmV0dXJuIGUuZGlzcGxheSYmdC5kaXNwbGF5P0NpKGUuZm9udFNpemUsb3QuZ2xvYmFsLmRlZmF1bHRGb250U2l6ZSkrMiplLmJhY2tkcm9wUGFkZGluZ1k6MH1mdW5jdGlvbiBGaSh0LGUsaSxuLGEpe3JldHVybiB0PT09bnx8dD09PWE/e3N0YXJ0OmUtaS8yLGVuZDplK2kvMn06dDxufHx0PmE/e3N0YXJ0OmUtaSxlbmQ6ZX06e3N0YXJ0OmUsZW5kOmUraX19ZnVuY3Rpb24gUmkodCl7cmV0dXJuIDA9PT10fHwxODA9PT10PyJjZW50ZXIiOnQ8MTgwPyJsZWZ0IjoicmlnaHQifWZ1bmN0aW9uIExpKHQsZSxpLG4pe3ZhciBhLHIsbz1pLnkrbi8yO2lmKHV0LmlzQXJyYXkoZSkpZm9yKGE9MCxyPWUubGVuZ3RoO2E8cjsrK2EpdC5maWxsVGV4dChlW2FdLGkueCxvKSxvKz1uO2Vsc2UgdC5maWxsVGV4dChlLGkueCxvKX1mdW5jdGlvbiBXaSh0LGUsaSl7OTA9PT10fHwyNzA9PT10P2kueS09ZS5oLzI6KHQ+MjcwfHx0PDkwKSYmKGkueS09ZS5oKX1mdW5jdGlvbiBZaSh0KXtyZXR1cm4gdXQuaXNOdW1iZXIodCk/dDowfXZhciBOaT15aS5leHRlbmQoe3NldERpbWVuc2lvbnM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3Qud2lkdGg9dC5tYXhXaWR0aCx0LmhlaWdodD10Lm1heEhlaWdodCx0LnBhZGRpbmdUb3A9QWkodC5vcHRpb25zKS8yLHQueENlbnRlcj1NYXRoLmZsb29yKHQud2lkdGgvMiksdC55Q2VudGVyPU1hdGguZmxvb3IoKHQuaGVpZ2h0LXQucGFkZGluZ1RvcCkvMiksdC5kcmF3aW5nQXJlYT1NYXRoLm1pbih0LmhlaWdodC10LnBhZGRpbmdUb3AsdC53aWR0aCkvMn0sZGV0ZXJtaW5lRGF0YUxpbWl0czpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10LmNoYXJ0LGk9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLG49TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO3V0LmVhY2goZS5kYXRhLmRhdGFzZXRzLGZ1bmN0aW9uKGEscil7aWYoZS5pc0RhdGFzZXRWaXNpYmxlKHIpKXt2YXIgbz1lLmdldERhdGFzZXRNZXRhKHIpO3V0LmVhY2goYS5kYXRhLGZ1bmN0aW9uKGUsYSl7dmFyIHI9K3QuZ2V0UmlnaHRWYWx1ZShlKTtpc05hTihyKXx8by5kYXRhW2FdLmhpZGRlbnx8KGk9TWF0aC5taW4ocixpKSxuPU1hdGgubWF4KHIsbikpfSl9fSksdC5taW49aT09PU51bWJlci5QT1NJVElWRV9JTkZJTklUWT8wOmksdC5tYXg9bj09PU51bWJlci5ORUdBVElWRV9JTkZJTklUWT8wOm4sdC5oYW5kbGVUaWNrUmFuZ2VPcHRpb25zKCl9LF9jb21wdXRlVGlja0xpbWl0OmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmRyYXdpbmdBcmVhL0FpKHRoaXMub3B0aW9ucykpfSxjb252ZXJ0VGlja3NUb0xhYmVsczpmdW5jdGlvbigpe3ZhciB0PXRoaXM7eWkucHJvdG90eXBlLmNvbnZlcnRUaWNrc1RvTGFiZWxzLmNhbGwodCksdC5wb2ludExhYmVscz10LmNoYXJ0LmRhdGEubGFiZWxzLm1hcCh0Lm9wdGlvbnMucG9pbnRMYWJlbHMuY2FsbGJhY2ssdCl9LGdldExhYmVsRm9ySW5kZXg6ZnVuY3Rpb24odCxlKXtyZXR1cm4rdGhpcy5nZXRSaWdodFZhbHVlKHRoaXMuY2hhcnQuZGF0YS5kYXRhc2V0c1tlXS5kYXRhW3RdKX0sZml0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zO3QuZGlzcGxheSYmdC5wb2ludExhYmVscy5kaXNwbGF5P2Z1bmN0aW9uKHQpe3ZhciBlLGksbixhPXV0Lm9wdGlvbnMuX3BhcnNlRm9udCh0Lm9wdGlvbnMucG9pbnRMYWJlbHMpLHI9e2w6MCxyOnQud2lkdGgsdDowLGI6dC5oZWlnaHQtdC5wYWRkaW5nVG9wfSxvPXt9O3QuY3R4LmZvbnQ9YS5zdHJpbmcsdC5fcG9pbnRMYWJlbFNpemVzPVtdO3ZhciBzLGwsdSxkPUlpKHQpO2ZvcihlPTA7ZTxkO2UrKyl7bj10LmdldFBvaW50UG9zaXRpb24oZSx0LmRyYXdpbmdBcmVhKzUpLHM9dC5jdHgsbD1hLmxpbmVIZWlnaHQsdT10LnBvaW50TGFiZWxzW2VdfHwiIixpPXV0LmlzQXJyYXkodSk/e3c6dXQubG9uZ2VzdFRleHQocyxzLmZvbnQsdSksaDp1Lmxlbmd0aCpsfTp7dzpzLm1lYXN1cmVUZXh0KHUpLndpZHRoLGg6bH0sdC5fcG9pbnRMYWJlbFNpemVzW2VdPWk7dmFyIGg9dC5nZXRJbmRleEFuZ2xlKGUpLGM9dXQudG9EZWdyZWVzKGgpJTM2MCxmPUZpKGMsbi54LGkudywwLDE4MCksZz1GaShjLG4ueSxpLmgsOTAsMjcwKTtmLnN0YXJ0PHIubCYmKHIubD1mLnN0YXJ0LG8ubD1oKSxmLmVuZD5yLnImJihyLnI9Zi5lbmQsby5yPWgpLGcuc3RhcnQ8ci50JiYoci50PWcuc3RhcnQsby50PWgpLGcuZW5kPnIuYiYmKHIuYj1nLmVuZCxvLmI9aCl9dC5zZXRSZWR1Y3Rpb25zKHQuZHJhd2luZ0FyZWEscixvKX0odGhpcyk6dGhpcy5zZXRDZW50ZXJQb2ludCgwLDAsMCwwKX0sc2V0UmVkdWN0aW9uczpmdW5jdGlvbih0LGUsaSl7dmFyIG49dGhpcyxhPWUubC9NYXRoLnNpbihpLmwpLHI9TWF0aC5tYXgoZS5yLW4ud2lkdGgsMCkvTWF0aC5zaW4oaS5yKSxvPS1lLnQvTWF0aC5jb3MoaS50KSxzPS1NYXRoLm1heChlLmItKG4uaGVpZ2h0LW4ucGFkZGluZ1RvcCksMCkvTWF0aC5jb3MoaS5iKTthPVlpKGEpLHI9WWkociksbz1ZaShvKSxzPVlpKHMpLG4uZHJhd2luZ0FyZWE9TWF0aC5taW4oTWF0aC5mbG9vcih0LShhK3IpLzIpLE1hdGguZmxvb3IodC0obytzKS8yKSksbi5zZXRDZW50ZXJQb2ludChhLHIsbyxzKX0sc2V0Q2VudGVyUG9pbnQ6ZnVuY3Rpb24odCxlLGksbil7dmFyIGE9dGhpcyxyPWEud2lkdGgtZS1hLmRyYXdpbmdBcmVhLG89dCthLmRyYXdpbmdBcmVhLHM9aSthLmRyYXdpbmdBcmVhLGw9YS5oZWlnaHQtYS5wYWRkaW5nVG9wLW4tYS5kcmF3aW5nQXJlYTthLnhDZW50ZXI9TWF0aC5mbG9vcigobytyKS8yK2EubGVmdCksYS55Q2VudGVyPU1hdGguZmxvb3IoKHMrbCkvMithLnRvcCthLnBhZGRpbmdUb3ApfSxnZXRJbmRleEFuZ2xlOmZ1bmN0aW9uKHQpe3JldHVybiB0KigyKk1hdGguUEkvSWkodGhpcykpKyh0aGlzLmNoYXJ0Lm9wdGlvbnMmJnRoaXMuY2hhcnQub3B0aW9ucy5zdGFydEFuZ2xlP3RoaXMuY2hhcnQub3B0aW9ucy5zdGFydEFuZ2xlOjApKk1hdGguUEkqMi8zNjB9LGdldERpc3RhbmNlRnJvbUNlbnRlckZvclZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYobnVsbD09PXQpcmV0dXJuIDA7dmFyIGk9ZS5kcmF3aW5nQXJlYS8oZS5tYXgtZS5taW4pO3JldHVybiBlLm9wdGlvbnMudGlja3MucmV2ZXJzZT8oZS5tYXgtdCkqaToodC1lLm1pbikqaX0sZ2V0UG9pbnRQb3NpdGlvbjpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMuZ2V0SW5kZXhBbmdsZSh0KS1NYXRoLlBJLzI7cmV0dXJue3g6TWF0aC5jb3MoaSkqZSt0aGlzLnhDZW50ZXIseTpNYXRoLnNpbihpKSplK3RoaXMueUNlbnRlcn19LGdldFBvaW50UG9zaXRpb25Gb3JWYWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmdldFBvaW50UG9zaXRpb24odCx0aGlzLmdldERpc3RhbmNlRnJvbUNlbnRlckZvclZhbHVlKGUpKX0sZ2V0QmFzZVBvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5taW4sZT10aGlzLm1heDtyZXR1cm4gdGhpcy5nZXRQb2ludFBvc2l0aW9uRm9yVmFsdWUoMCx0aGlzLmJlZ2luQXRaZXJvPzA6dDwwJiZlPDA/ZTp0PjAmJmU+MD90OjApfSxkcmF3OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXQub3B0aW9ucyxpPWUuZ3JpZExpbmVzLG49ZS50aWNrcztpZihlLmRpc3BsYXkpe3ZhciBhPXQuY3R4LHI9dGhpcy5nZXRJbmRleEFuZ2xlKDApLG89dXQub3B0aW9ucy5fcGFyc2VGb250KG4pOyhlLmFuZ2xlTGluZXMuZGlzcGxheXx8ZS5wb2ludExhYmVscy5kaXNwbGF5KSYmZnVuY3Rpb24odCl7dmFyIGU9dC5jdHgsaT10Lm9wdGlvbnMsbj1pLmFuZ2xlTGluZXMsYT1pLmdyaWRMaW5lcyxyPWkucG9pbnRMYWJlbHMsbz1DaShuLmxpbmVXaWR0aCxhLmxpbmVXaWR0aCkscz1DaShuLmNvbG9yLGEuY29sb3IpLGw9QWkoaSk7ZS5zYXZlKCksZS5saW5lV2lkdGg9byxlLnN0cm9rZVN0eWxlPXMsZS5zZXRMaW5lRGFzaCYmKGUuc2V0TGluZURhc2goVGkoW24uYm9yZGVyRGFzaCxhLmJvcmRlckRhc2gsW11dKSksZS5saW5lRGFzaE9mZnNldD1UaShbbi5ib3JkZXJEYXNoT2Zmc2V0LGEuYm9yZGVyRGFzaE9mZnNldCwwXSkpO3ZhciB1PXQuZ2V0RGlzdGFuY2VGcm9tQ2VudGVyRm9yVmFsdWUoaS50aWNrcy5yZXZlcnNlP3QubWluOnQubWF4KSxkPXV0Lm9wdGlvbnMuX3BhcnNlRm9udChyKTtlLmZvbnQ9ZC5zdHJpbmcsZS50ZXh0QmFzZWxpbmU9Im1pZGRsZSI7Zm9yKHZhciBoPUlpKHQpLTE7aD49MDtoLS0pe2lmKG4uZGlzcGxheSYmbyYmcyl7dmFyIGM9dC5nZXRQb2ludFBvc2l0aW9uKGgsdSk7ZS5iZWdpblBhdGgoKSxlLm1vdmVUbyh0LnhDZW50ZXIsdC55Q2VudGVyKSxlLmxpbmVUbyhjLngsYy55KSxlLnN0cm9rZSgpfWlmKHIuZGlzcGxheSl7dmFyIGY9MD09PWg/bC8yOjAsZz10LmdldFBvaW50UG9zaXRpb24oaCx1K2YrNSksbT1QaShyLmZvbnRDb2xvcixoLG90Lmdsb2JhbC5kZWZhdWx0Rm9udENvbG9yKTtlLmZpbGxTdHlsZT1tO3ZhciBwPXQuZ2V0SW5kZXhBbmdsZShoKSx2PXV0LnRvRGVncmVlcyhwKTtlLnRleHRBbGlnbj1SaSh2KSxXaSh2LHQuX3BvaW50TGFiZWxTaXplc1toXSxnKSxMaShlLHQucG9pbnRMYWJlbHNbaF18fCIiLGcsZC5saW5lSGVpZ2h0KX19ZS5yZXN0b3JlKCl9KHQpLHV0LmVhY2godC50aWNrcyxmdW5jdGlvbihlLHMpe2lmKHM+MHx8bi5yZXZlcnNlKXt2YXIgbD10LmdldERpc3RhbmNlRnJvbUNlbnRlckZvclZhbHVlKHQudGlja3NBc051bWJlcnNbc10pO2lmKGkuZGlzcGxheSYmMCE9PXMmJmZ1bmN0aW9uKHQsZSxpLG4pe3ZhciBhLHI9dC5jdHgsbz1lLmNpcmN1bGFyLHM9SWkodCksbD1QaShlLmNvbG9yLG4tMSksdT1QaShlLmxpbmVXaWR0aCxuLTEpO2lmKChvfHxzKSYmbCYmdSl7aWYoci5zYXZlKCksci5zdHJva2VTdHlsZT1sLHIubGluZVdpZHRoPXUsci5zZXRMaW5lRGFzaCYmKHIuc2V0TGluZURhc2goZS5ib3JkZXJEYXNofHxbXSksci5saW5lRGFzaE9mZnNldD1lLmJvcmRlckRhc2hPZmZzZXR8fDApLHIuYmVnaW5QYXRoKCksbylyLmFyYyh0LnhDZW50ZXIsdC55Q2VudGVyLGksMCwyKk1hdGguUEkpO2Vsc2V7YT10LmdldFBvaW50UG9zaXRpb24oMCxpKSxyLm1vdmVUbyhhLngsYS55KTtmb3IodmFyIGQ9MTtkPHM7ZCsrKWE9dC5nZXRQb2ludFBvc2l0aW9uKGQsaSksci5saW5lVG8oYS54LGEueSl9ci5jbG9zZVBhdGgoKSxyLnN0cm9rZSgpLHIucmVzdG9yZSgpfX0odCxpLGwscyksbi5kaXNwbGF5KXt2YXIgdT1DaShuLmZvbnRDb2xvcixvdC5nbG9iYWwuZGVmYXVsdEZvbnRDb2xvcik7aWYoYS5mb250PW8uc3RyaW5nLGEuc2F2ZSgpLGEudHJhbnNsYXRlKHQueENlbnRlcix0LnlDZW50ZXIpLGEucm90YXRlKHIpLG4uc2hvd0xhYmVsQmFja2Ryb3Ape3ZhciBkPWEubWVhc3VyZQ=="
},
{
"key": "Chart.bundle.min.js?4?2?1",
"type": "binary",
"value": "base64:VGV4dChlKS53aWR0aDthLmZpbGxTdHlsZT1uLmJhY2tkcm9wQ29sb3IsYS5maWxsUmVjdCgtZC8yLW4uYmFja2Ryb3BQYWRkaW5nWCwtbC1vLnNpemUvMi1uLmJhY2tkcm9wUGFkZGluZ1ksZCsyKm4uYmFja2Ryb3BQYWRkaW5nWCxvLnNpemUrMipuLmJhY2tkcm9wUGFkZGluZ1kpfWEudGV4dEFsaWduPSJjZW50ZXIiLGEudGV4dEJhc2VsaW5lPSJtaWRkbGUiLGEuZmlsbFN0eWxlPXUsYS5maWxsVGV4dChlLDAsLWwpLGEucmVzdG9yZSgpfX19KX19fSksemk9T2k7TmkuX2RlZmF1bHRzPXppO3ZhciBWaT11dC52YWx1ZU9yRGVmYXVsdCxIaT1OdW1iZXIuTUlOX1NBRkVfSU5URUdFUnx8LTkwMDcxOTkyNTQ3NDA5OTEsRWk9TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJ8fDkwMDcxOTkyNTQ3NDA5OTEsQmk9e21pbGxpc2Vjb25kOntjb21tb246ITAsc2l6ZToxLHN0ZXBzOlsxLDIsNSwxMCwyMCw1MCwxMDAsMjUwLDUwMF19LHNlY29uZDp7Y29tbW9uOiEwLHNpemU6MWUzLHN0ZXBzOlsxLDIsNSwxMCwxNSwzMF19LG1pbnV0ZTp7Y29tbW9uOiEwLHNpemU6NmU0LHN0ZXBzOlsxLDIsNSwxMCwxNSwzMF19LGhvdXI6e2NvbW1vbjohMCxzaXplOjM2ZTUsc3RlcHM6WzEsMiwzLDYsMTJdfSxkYXk6e2NvbW1vbjohMCxzaXplOjg2NGU1LHN0ZXBzOlsxLDIsNV19LHdlZWs6e2NvbW1vbjohMSxzaXplOjYwNDhlNSxzdGVwczpbMSwyLDMsNF19LG1vbnRoOntjb21tb246ITAsc2l6ZToyNjI4ZTYsc3RlcHM6WzEsMiwzXX0scXVhcnRlcjp7Y29tbW9uOiExLHNpemU6Nzg4NGU2LHN0ZXBzOlsxLDIsMyw0XX0seWVhcjp7Y29tbW9uOiEwLHNpemU6MzE1NGU3fX0samk9T2JqZWN0LmtleXMoQmkpO2Z1bmN0aW9uIFVpKHQsZSl7cmV0dXJuIHQtZX1mdW5jdGlvbiBHaSh0KXt2YXIgZSxpLG4sYT17fSxyPVtdO2ZvcihlPTAsaT10Lmxlbmd0aDtlPGk7KytlKWFbbj10W2VdXXx8KGFbbl09ITAsci5wdXNoKG4pKTtyZXR1cm4gcn1mdW5jdGlvbiBxaSh0LGUsaSxuKXt2YXIgYT1mdW5jdGlvbih0LGUsaSl7Zm9yKHZhciBuLGEscixvPTAscz10Lmxlbmd0aC0xO28+PTAmJm88PXM7KXtpZihhPXRbKG49bytzPj4xKS0xXXx8bnVsbCxyPXRbbl0sIWEpcmV0dXJue2xvOm51bGwsaGk6cn07aWYocltlXTxpKW89bisxO2Vsc2V7aWYoIShhW2VdPmkpKXJldHVybntsbzphLGhpOnJ9O3M9bi0xfX1yZXR1cm57bG86cixoaTpudWxsfX0odCxlLGkpLHI9YS5sbz9hLmhpP2EubG86dFt0Lmxlbmd0aC0yXTp0WzBdLG89YS5sbz9hLmhpP2EuaGk6dFt0Lmxlbmd0aC0xXTp0WzFdLHM9b1tlXS1yW2VdLGw9cz8oaS1yW2VdKS9zOjAsdT0ob1tuXS1yW25dKSpsO3JldHVybiByW25dK3V9ZnVuY3Rpb24gWmkodCxlKXt2YXIgaT10Ll9hZGFwdGVyLG49dC5vcHRpb25zLnRpbWUsYT1uLnBhcnNlcixyPWF8fG4uZm9ybWF0LG89ZTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgYSYmKG89YShvKSksdXQuaXNGaW5pdGUobyl8fChvPSJzdHJpbmciPT10eXBlb2Ygcj9pLnBhcnNlKG8scik6aS5wYXJzZShvKSksbnVsbCE9PW8/K286KGF8fCJmdW5jdGlvbiIhPXR5cGVvZiByfHwobz1yKGUpLHV0LmlzRmluaXRlKG8pfHwobz1pLnBhcnNlKG8pKSksbyl9ZnVuY3Rpb24gJGkodCxlKXtpZih1dC5pc051bGxPclVuZGVmKGUpKXJldHVybiBudWxsO3ZhciBpPXQub3B0aW9ucy50aW1lLG49WmkodCx0LmdldFJpZ2h0VmFsdWUoZSkpO3JldHVybiBudWxsPT09bj9uOihpLnJvdW5kJiYobj0rdC5fYWRhcHRlci5zdGFydE9mKG4saS5yb3VuZCkpLG4pfWZ1bmN0aW9uIFhpKHQpe2Zvcih2YXIgZT1qaS5pbmRleE9mKHQpKzEsaT1qaS5sZW5ndGg7ZTxpOysrZSlpZihCaVtqaVtlXV0uY29tbW9uKXJldHVybiBqaVtlXX1mdW5jdGlvbiBLaSh0LGUsaSxuKXt2YXIgYSxyPXQuX2FkYXB0ZXIsbz10Lm9wdGlvbnMscz1vLnRpbWUsbD1zLnVuaXR8fGZ1bmN0aW9uKHQsZSxpLG4pe3ZhciBhLHIsbyxzPWppLmxlbmd0aDtmb3IoYT1qaS5pbmRleE9mKHQpO2E8cy0xOysrYSlpZihvPShyPUJpW2ppW2FdXSkuc3RlcHM/ci5zdGVwc1tyLnN0ZXBzLmxlbmd0aC0xXTpFaSxyLmNvbW1vbiYmTWF0aC5jZWlsKChpLWUpLyhvKnIuc2l6ZSkpPD1uKXJldHVybiBqaVthXTtyZXR1cm4gamlbcy0xXX0ocy5taW5Vbml0LGUsaSxuKSx1PVhpKGwpLGQ9Vmkocy5zdGVwU2l6ZSxzLnVuaXRTdGVwU2l6ZSksaD0id2VlayI9PT1sJiZzLmlzb1dlZWtkYXksYz1vLnRpY2tzLm1ham9yLmVuYWJsZWQsZj1CaVtsXSxnPWUsbT1pLHA9W107Zm9yKGR8fChkPWZ1bmN0aW9uKHQsZSxpLG4pe3ZhciBhLHIsbyxzPWUtdCxsPUJpW2ldLHU9bC5zaXplLGQ9bC5zdGVwcztpZighZClyZXR1cm4gTWF0aC5jZWlsKHMvKG4qdSkpO2ZvcihhPTAscj1kLmxlbmd0aDthPHImJihvPWRbYV0sIShNYXRoLmNlaWwocy8odSpvKSk8PW4pKTsrK2EpO3JldHVybiBvfShlLGksbCxuKSksaCYmKGc9K3Iuc3RhcnRPZihnLCJpc29XZWVrIixoKSxtPStyLnN0YXJ0T2YobSwiaXNvV2VlayIsaCkpLGc9K3Iuc3RhcnRPZihnLGg/ImRheSI6bCksKG09K3Iuc3RhcnRPZihtLGg/ImRheSI6bCkpPGkmJihtPStyLmFkZChtLDEsbCkpLGE9ZyxjJiZ1JiYhaCYmIXMucm91bmQmJihhPStyLnN0YXJ0T2YoYSx1KSxhPStyLmFkZChhLH5+KChnLWEpLyhmLnNpemUqZCkpKmQsbCkpO2E8bTthPStyLmFkZChhLGQsbCkpcC5wdXNoKCthKTtyZXR1cm4gcC5wdXNoKCthKSxwfXZhciBKaT1maS5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24oKXt0aGlzLm1lcmdlVGlja3NPcHRpb25zKCksZmkucHJvdG90eXBlLmluaXRpYWxpemUuY2FsbCh0aGlzKX0sdXBkYXRlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zLGU9dC50aW1lfHwodC50aW1lPXt9KSxpPXRoaXMuX2FkYXB0ZXI9bmV3IHNpLl9kYXRlKHQuYWRhcHRlcnMuZGF0ZSk7cmV0dXJuIGUuZm9ybWF0JiZjb25zb2xlLndhcm4oIm9wdGlvbnMudGltZS5mb3JtYXQgaXMgZGVwcmVjYXRlZCBhbmQgcmVwbGFjZWQgYnkgb3B0aW9ucy50aW1lLnBhcnNlci4iKSx1dC5tZXJnZUlmKGUuZGlzcGxheUZvcm1hdHMsaS5mb3JtYXRzKCkpLGZpLnByb3RvdHlwZS51cGRhdGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxnZXRSaWdodFZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0JiZ2b2lkIDAhPT10LnQmJih0PXQudCksZmkucHJvdG90eXBlLmdldFJpZ2h0VmFsdWUuY2FsbCh0aGlzLHQpfSxkZXRlcm1pbmVEYXRhTGltaXRzOmZ1bmN0aW9uKCl7dmFyIHQsZSxpLG4sYSxyLG89dGhpcyxzPW8uY2hhcnQsbD1vLl9hZGFwdGVyLHU9by5vcHRpb25zLnRpbWUsZD11LnVuaXR8fCJkYXkiLGg9RWksYz1IaSxmPVtdLGc9W10sbT1bXSxwPXMuZGF0YS5sYWJlbHN8fFtdO2Zvcih0PTAsaT1wLmxlbmd0aDt0PGk7Kyt0KW0ucHVzaCgkaShvLHBbdF0pKTtmb3IodD0wLGk9KHMuZGF0YS5kYXRhc2V0c3x8W10pLmxlbmd0aDt0PGk7Kyt0KWlmKHMuaXNEYXRhc2V0VmlzaWJsZSh0KSlpZihhPXMuZGF0YS5kYXRhc2V0c1t0XS5kYXRhLHV0LmlzT2JqZWN0KGFbMF0pKWZvcihnW3RdPVtdLGU9MCxuPWEubGVuZ3RoO2U8bjsrK2Upcj0kaShvLGFbZV0pLGYucHVzaChyKSxnW3RdW2VdPXI7ZWxzZXtmb3IoZT0wLG49bS5sZW5ndGg7ZTxuOysrZSlmLnB1c2gobVtlXSk7Z1t0XT1tLnNsaWNlKDApfWVsc2UgZ1t0XT1bXTttLmxlbmd0aCYmKG09R2kobSkuc29ydChVaSksaD1NYXRoLm1pbihoLG1bMF0pLGM9TWF0aC5tYXgoYyxtW20ubGVuZ3RoLTFdKSksZi5sZW5ndGgmJihmPUdpKGYpLnNvcnQoVWkpLGg9TWF0aC5taW4oaCxmWzBdKSxjPU1hdGgubWF4KGMsZltmLmxlbmd0aC0xXSkpLGg9JGkobyx1Lm1pbil8fGgsYz0kaShvLHUubWF4KXx8YyxoPWg9PT1FaT8rbC5zdGFydE9mKERhdGUubm93KCksZCk6aCxjPWM9PT1IaT8rbC5lbmRPZihEYXRlLm5vdygpLGQpKzE6YyxvLm1pbj1NYXRoLm1pbihoLGMpLG8ubWF4PU1hdGgubWF4KGgrMSxjKSxvLl9ob3Jpem9udGFsPW8uaXNIb3Jpem9udGFsKCksby5fdGFibGU9W10sby5fdGltZXN0YW1wcz17ZGF0YTpmLGRhdGFzZXRzOmcsbGFiZWxzOm19fSxidWlsZFRpY2tzOmZ1bmN0aW9uKCl7dmFyIHQsZSxpLG49dGhpcyxhPW4ubWluLHI9bi5tYXgsbz1uLm9wdGlvbnMscz1vLnRpbWUsbD1bXSx1PVtdO3N3aXRjaChvLnRpY2tzLnNvdXJjZSl7Y2FzZSJkYXRhIjpsPW4uX3RpbWVzdGFtcHMuZGF0YTticmVhaztjYXNlImxhYmVscyI6bD1uLl90aW1lc3RhbXBzLmxhYmVsczticmVhaztjYXNlImF1dG8iOmRlZmF1bHQ6bD1LaShuLGEscixuLmdldExhYmVsQ2FwYWNpdHkoYSkpfWZvcigidGlja3MiPT09by5ib3VuZHMmJmwubGVuZ3RoJiYoYT1sWzBdLHI9bFtsLmxlbmd0aC0xXSksYT0kaShuLHMubWluKXx8YSxyPSRpKG4scy5tYXgpfHxyLHQ9MCxlPWwubGVuZ3RoO3Q8ZTsrK3QpKGk9bFt0XSk+PWEmJmk8PXImJnUucHVzaChpKTtyZXR1cm4gbi5taW49YSxuLm1heD1yLG4uX3VuaXQ9cy51bml0fHxmdW5jdGlvbih0LGUsaSxuLGEpe3ZhciByLG87Zm9yKHI9amkubGVuZ3RoLTE7cj49amkuaW5kZXhPZihpKTtyLS0paWYobz1qaVtyXSxCaVtvXS5jb21tb24mJnQuX2FkYXB0ZXIuZGlmZihhLG4sbyk+PWUubGVuZ3RoKXJldHVybiBvO3JldHVybiBqaVtpP2ppLmluZGV4T2YoaSk6MF19KG4sdSxzLm1pblVuaXQsbi5taW4sbi5tYXgpLG4uX21ham9yVW5pdD1YaShuLl91bml0KSxuLl90YWJsZT1mdW5jdGlvbih0LGUsaSxuKXtpZigibGluZWFyIj09PW58fCF0Lmxlbmd0aClyZXR1cm5be3RpbWU6ZSxwb3M6MH0se3RpbWU6aSxwb3M6MX1dO3ZhciBhLHIsbyxzLGwsdT1bXSxkPVtlXTtmb3IoYT0wLHI9dC5sZW5ndGg7YTxyOysrYSkocz10W2FdKT5lJiZzPGkmJmQucHVzaChzKTtmb3IoZC5wdXNoKGkpLGE9MCxyPWQubGVuZ3RoO2E8cjsrK2EpbD1kW2ErMV0sbz1kW2EtMV0scz1kW2FdLHZvaWQgMCE9PW8mJnZvaWQgMCE9PWwmJk1hdGgucm91bmQoKGwrbykvMik9PT1zfHx1LnB1c2goe3RpbWU6cyxwb3M6YS8oci0xKX0pO3JldHVybiB1fShuLl90aW1lc3RhbXBzLmRhdGEsYSxyLG8uZGlzdHJpYnV0aW9uKSxuLl9vZmZzZXRzPWZ1bmN0aW9uKHQsZSxpLG4sYSl7dmFyIHIsbyxzPTAsbD0wO3JldHVybiBhLm9mZnNldCYmZS5sZW5ndGgmJihhLnRpbWUubWlufHwocj1xaSh0LCJ0aW1lIixlWzBdLCJwb3MiKSxzPTE9PT1lLmxlbmd0aD8xLXI6KHFpKHQsInRpbWUiLGVbMV0sInBvcyIpLXIpLzIpLGEudGltZS5tYXh8fChvPXFpKHQsInRpbWUiLGVbZS5sZW5ndGgtMV0sInBvcyIpLGw9MT09PWUubGVuZ3RoP286KG8tcWkodCwidGltZSIsZVtlLmxlbmd0aC0yXSwicG9zIikpLzIpKSx7c3RhcnQ6cyxlbmQ6bH19KG4uX3RhYmxlLHUsMCwwLG8pLG8udGlja3MucmV2ZXJzZSYmdS5yZXZlcnNlKCksZnVuY3Rpb24odCxlLGkpe3ZhciBuLGEscixvLHM9W107Zm9yKG49MCxhPWUubGVuZ3RoO248YTsrK24pcj1lW25dLG89ISFpJiZyPT09K3QuX2FkYXB0ZXIuc3RhcnRPZihyLGkpLHMucHVzaCh7dmFsdWU6cixtYWpvcjpvfSk7cmV0dXJuIHN9KG4sdSxuLl9tYWpvclVuaXQpfSxnZXRMYWJlbEZvckluZGV4OmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcyxuPWkuX2FkYXB0ZXIsYT1pLmNoYXJ0LmRhdGEscj1pLm9wdGlvbnMudGltZSxvPWEubGFiZWxzJiZ0PGEubGFiZWxzLmxlbmd0aD9hLmxhYmVsc1t0XToiIixzPWEuZGF0YXNldHNbZV0uZGF0YVt0XTtyZXR1cm4gdXQuaXNPYmplY3QocykmJihvPWkuZ2V0UmlnaHRWYWx1ZShzKSksci50b29sdGlwRm9ybWF0P24uZm9ybWF0KFppKGksbyksci50b29sdGlwRm9ybWF0KToic3RyaW5nIj09dHlwZW9mIG8/bzpuLmZvcm1hdChaaShpLG8pLHIuZGlzcGxheUZvcm1hdHMuZGF0ZXRpbWUpfSx0aWNrRm9ybWF0RnVuY3Rpb246ZnVuY3Rpb24odCxlLGksbil7dmFyIGE9dGhpcy5fYWRhcHRlcixyPXRoaXMub3B0aW9ucyxvPXIudGltZS5kaXNwbGF5Rm9ybWF0cyxzPW9bdGhpcy5fdW5pdF0sbD10aGlzLl9tYWpvclVuaXQsdT1vW2xdLGQ9K2Euc3RhcnRPZih0LGwpLGg9ci50aWNrcy5tYWpvcixjPWguZW5hYmxlZCYmbCYmdSYmdD09PWQsZj1hLmZvcm1hdCh0LG58fChjP3U6cykpLGc9Yz9oOnIudGlja3MubWlub3IsbT1WaShnLmNhbGxiYWNrLGcudXNlckNhbGxiYWNrKTtyZXR1cm4gbT9tKGYsZSxpKTpmfSxjb252ZXJ0VGlja3NUb0xhYmVsczpmdW5jdGlvbih0KXt2YXIgZSxpLG49W107Zm9yKGU9MCxpPXQubGVuZ3RoO2U8aTsrK2Upbi5wdXNoKHRoaXMudGlja0Zvcm1hdEZ1bmN0aW9uKHRbZV0udmFsdWUsZSx0KSk7cmV0dXJuIG59LGdldFBpeGVsRm9yT2Zmc2V0OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsaT1lLm9wdGlvbnMudGlja3MucmV2ZXJzZSxuPWUuX2hvcml6b250YWw/ZS53aWR0aDplLmhlaWdodCxhPWUuX2hvcml6b250YWw/aT9lLnJpZ2h0OmUubGVmdDppP2UuYm90dG9tOmUudG9wLHI9cWkoZS5fdGFibGUsInRpbWUiLHQsInBvcyIpLG89biooZS5fb2Zmc2V0cy5zdGFydCtyKS8oZS5fb2Zmc2V0cy5zdGFydCsxK2UuX29mZnNldHMuZW5kKTtyZXR1cm4gaT9hLW86YStvfSxnZXRQaXhlbEZvclZhbHVlOmZ1bmN0aW9uKHQsZSxpKXt2YXIgbj1udWxsO2lmKHZvaWQgMCE9PWUmJnZvaWQgMCE9PWkmJihuPXRoaXMuX3RpbWVzdGFtcHMuZGF0YXNldHNbaV1bZV0pLG51bGw9PT1uJiYobj0kaSh0aGlzLHQpKSxudWxsIT09bilyZXR1cm4gdGhpcy5nZXRQaXhlbEZvck9mZnNldChuKX0sZ2V0UGl4ZWxGb3JUaWNrOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2V0VGlja3MoKTtyZXR1cm4gdD49MCYmdDxlLmxlbmd0aD90aGlzLmdldFBpeGVsRm9yT2Zmc2V0KGVbdF0udmFsdWUpOm51bGx9LGdldFZhbHVlRm9yUGl4ZWw6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxpPWUuX2hvcml6b250YWw/ZS53aWR0aDplLmhlaWdodCxuPWUuX2hvcml6b250YWw/ZS5sZWZ0OmUudG9wLGE9KGk/KHQtbikvaTowKSooZS5fb2Zmc2V0cy5zdGFydCsxK2UuX29mZnNldHMuc3RhcnQpLWUuX29mZnNldHMuZW5kLHI9cWkoZS5fdGFibGUsInBvcyIsYSwidGltZSIpO3JldHVybiBlLl9hZGFwdGVyLl9jcmVhdGUocil9LGdldExhYmVsV2lkdGg6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5vcHRpb25zLnRpY2tzLGk9dGhpcy5jdHgubWVhc3VyZVRleHQodCkud2lkdGgsbj11dC50b1JhZGlhbnMoZS5tYXhSb3RhdGlvbiksYT1NYXRoLmNvcyhuKSxyPU1hdGguc2luKG4pO3JldHVybiBpKmErVmkoZS5mb250U2l6ZSxvdC5nbG9iYWwuZGVmYXVsdEZvbnRTaXplKSpyfSxnZXRMYWJlbENhcGFjaXR5OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsaT1lLm9wdGlvbnMudGltZS5kaXNwbGF5Rm9ybWF0cy5taWxsaXNlY29uZCxuPWUudGlja0Zvcm1hdEZ1bmN0aW9uKHQsMCxbXSxpKSxhPWUuZ2V0TGFiZWxXaWR0aChuKSxyPWUuaXNIb3Jpem9udGFsKCk/ZS53aWR0aDplLmhlaWdodCxvPU1hdGguZmxvb3Ioci9hKTtyZXR1cm4gbz4wP286MX19KSxRaT17cG9zaXRpb246ImJvdHRvbSIsZGlzdHJpYnV0aW9uOiJsaW5lYXIiLGJvdW5kczoiZGF0YSIsYWRhcHRlcnM6e30sdGltZTp7cGFyc2VyOiExLGZvcm1hdDohMSx1bml0OiExLHJvdW5kOiExLGRpc3BsYXlGb3JtYXQ6ITEsaXNvV2Vla2RheTohMSxtaW5Vbml0OiJtaWxsaXNlY29uZCIsZGlzcGxheUZvcm1hdHM6e319LHRpY2tzOnthdXRvU2tpcDohMSxzb3VyY2U6ImF1dG8iLG1ham9yOntlbmFibGVkOiExfX19O0ppLl9kZWZhdWx0cz1RaTt2YXIgdG4sZW49e2NhdGVnb3J5OmdpLGxpbmVhcjp4aSxsb2dhcml0aG1pYzpTaSxyYWRpYWxMaW5lYXI6TmksdGltZTpKaX0sbm49KGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIGUsaTtmdW5jdGlvbiBuKCl7cmV0dXJuIGUuYXBwbHkobnVsbCxhcmd1bWVudHMpfWZ1bmN0aW9uIGEodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBBcnJheXx8IltvYmplY3QgQXJyYXldIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiByKHQpe3JldHVybiBudWxsIT10JiYiW29iamVjdCBPYmplY3RdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiBvKHQpe3JldHVybiB2b2lkIDA9PT10fWZ1bmN0aW9uIHModCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0fHwiW29iamVjdCBOdW1iZXJdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiBsKHQpe3JldHVybiB0IGluc3RhbmNlb2YgRGF0ZXx8IltvYmplY3QgRGF0ZV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIHUodCxlKXt2YXIgaSxuPVtdO2ZvcihpPTA7aTx0Lmxlbmd0aDsrK2kpbi5wdXNoKGUodFtpXSxpKSk7cmV0dXJuIG59ZnVuY3Rpb24gZCh0LGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKX1mdW5jdGlvbiBoKHQsZSl7Zm9yKHZhciBpIGluIGUpZChlLGkpJiYodFtpXT1lW2ldKTtyZXR1cm4gZChlLCJ0b1N0cmluZyIpJiYodC50b1N0cmluZz1lLnRvU3RyaW5nKSxkKGUsInZhbHVlT2YiKSYmKHQudmFsdWVPZj1lLnZhbHVlT2YpLHR9ZnVuY3Rpb24gYyh0LGUsaSxuKXtyZXR1cm4gT2UodCxlLGksbiwhMCkudXRjKCl9ZnVuY3Rpb24gZih0KXtyZXR1cm4gbnVsbD09dC5fcGYmJih0Ll9wZj17ZW1wdHk6ITEsdW51c2VkVG9rZW5zOltdLHVudXNlZElucHV0OltdLG92ZXJmbG93Oi0yLGNoYXJzTGVmdE92ZXI6MCxudWxsSW5wdXQ6ITEsaW52YWxpZE1vbnRoOm51bGwsaW52YWxpZEZvcm1hdDohMSx1c2VySW52YWxpZGF0ZWQ6ITEsaXNvOiExLHBhcnNlZERhdGVQYXJ0czpbXSxtZXJpZGllbTpudWxsLHJmYzI4MjI6ITEsd2Vla2RheU1pc21hdGNoOiExfSksdC5fcGZ9ZnVuY3Rpb24gZyh0KXtpZihudWxsPT10Ll9pc1ZhbGlkKXt2YXIgZT1mKHQpLG49aS5jYWxsKGUucGFyc2VkRGF0ZVBhcnRzLGZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT10fSksYT0haXNOYU4odC5fZC5nZXRUaW1lKCkpJiZlLm92ZXJmbG93PDAmJiFlLmVtcHR5JiYhZS5pbnZhbGlkTW9udGgmJiFlLmludmFsaWRXZWVrZGF5JiYhZS53ZWVrZGF5TWlzbWF0Y2gmJiFlLm51bGxJbnB1dCYmIWUuaW52YWxpZEZvcm1hdCYmIWUudXNlckludmFsaWRhdGVkJiYoIWUubWVyaWRpZW18fGUubWVyaWRpZW0mJm4pO2lmKHQuX3N0cmljdCYmKGE9YSYmMD09PWUuY2hhcnNMZWZ0T3ZlciYmMD09PWUudW51c2VkVG9rZW5zLmxlbmd0aCYmdm9pZCAwPT09ZS5iaWdIb3VyKSxudWxsIT1PYmplY3QuaXNGcm96ZW4mJk9iamVjdC5pc0Zyb3plbih0KSlyZXR1cm4gYTt0Ll9pc1ZhbGlkPWF9cmV0dXJuIHQuX2lzVmFsaWR9ZnVuY3Rpb24gbSh0KXt2YXIgZT1jKE5hTik7cmV0dXJuIG51bGwhPXQ/aChmKGUpLHQpOmYoZSkudXNlckludmFsaWRhdGVkPSEwLGV9aT1BcnJheS5wcm90b3R5cGUuc29tZT9BcnJheS5wcm90b3R5cGUuc29tZTpmdW5jdGlvbih0KXtmb3IodmFyIGU9T2JqZWN0KHRoaXMpLGk9ZS5sZW5ndGg+Pj4wLG49MDtuPGk7bisrKWlmKG4gaW4gZSYmdC5jYWxsKHRoaXMsZVtuXSxuLGUpKXJldHVybiEwO3JldHVybiExfTt2YXIgcD1uLm1vbWVudFByb3BlcnRpZXM9W107ZnVuY3Rpb24gdih0LGUpe3ZhciBpLG4sYTtpZihvKGUuX2lzQU1vbWVudE9iamVjdCl8fCh0Ll9pc0FNb21lbnRPYmplY3Q9ZS5faXNBTW9tZW50T2JqZWN0KSxvKGUuX2kpfHwodC5faT1lLl9pKSxvKGUuX2YpfHwodC5fZj1lLl9mKSxvKGUuX2wpfHwodC5fbD1lLl9sKSxvKGUuX3N0cmljdCl8fCh0Ll9zdHJpY3Q9ZS5fc3RyaWN0KSxvKGUuX3R6bSl8fCh0Ll90em09ZS5fdHptKSxvKGUuX2lzVVRDKXx8KHQuX2lzVVRDPWUuX2lzVVRDKSxvKGUuX29mZnNldCl8fCh0Ll9vZmZzZXQ9ZS5fb2Zmc2V0KSxvKGUuX3BmKXx8KHQuX3BmPWYoZSkpLG8oZS5fbG9jYWxlKXx8KHQuX2xvY2FsZT1lLl9sb2NhbGUpLHAubGVuZ3RoPjApZm9yKGk9MDtpPHAubGVuZ3RoO2krKyluPXBbaV0sbyhhPWVbbl0pfHwodFtuXT1hKTtyZXR1cm4gdH12YXIgeT0hMTtmdW5jdGlvbiBiKHQpe3YodGhpcyx0KSx0aGlzLl9kPW5ldyBEYXRlKG51bGwhPXQuX2Q/dC5fZC5nZXRUaW1lKCk6TmFOKSx0aGlzLmlzVmFsaWQoKXx8KHRoaXMuX2Q9bmV3IERhdGUoTmFOKSksITE9PT15JiYoeT0hMCxuLnVwZGF0ZU9mZnNldCh0aGlzKSx5PSExKX1mdW5jdGlvbiB4KHQpe3JldHVybiB0IGluc3RhbmNlb2YgYnx8bnVsbCE9dCYmbnVsbCE9dC5faXNBTW9tZW50T2JqZWN0fWZ1bmN0aW9uIF8odCl7cmV0dXJuIHQ8MD9NYXRoLmNlaWwodCl8fDA6TWF0aC5mbG9vcih0KX1mdW5jdGlvbiBrKHQpe3ZhciBlPSt0LGk9MDtyZXR1cm4gMCE9PWUmJmlzRmluaXRlKGUpJiYoaT1fKGUpKSxpfWZ1bmN0aW9uIHcodCxlLGkpe3ZhciBuLGE9TWF0aC5taW4odC5sZW5ndGgsZS5sZW5ndGgpLHI9TWF0aC5hYnModC5sZW5ndGgtZS5sZW5ndGgpLG89MDtmb3Iobj0wO248YTtuKyspKGkmJnRbbl0hPT1lW25dfHwhaSYmayh0W25dKSE9PWsoZVtuXSkpJiZvKys7cmV0dXJuIG8rcn1mdW5jdGlvbiBNKHQpeyExPT09bi5zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ3MmJiJ1bmRlZmluZWQiIT10eXBlb2YgY29uc29sZSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4oIkRlcHJlY2F0aW9uIHdhcm5pbmc6ICIrdCl9ZnVuY3Rpb24gUyh0LGUpe3ZhciBpPSEwO3JldHVybiBoKGZ1bmN0aW9uKCl7aWYobnVsbCE9bi5kZXByZWNhdGlvbkhhbmRsZXImJm4uZGVwcmVjYXRpb25IYW5kbGVyKG51bGwsdCksaSl7Zm9yKHZhciBhLHI9W10sbz0wO288YXJndW1lbnRzLmxlbmd0aDtvKyspe2lmKGE9IiIsIm9iamVjdCI9PXR5cGVvZiBhcmd1bWVudHNbb10pe2Zvcih2YXIgcyBpbiBhKz0iXG5bIitvKyJdICIsYXJndW1lbnRzWzBdKWErPXMrIjogIithcmd1bWVudHNbMF1bc10rIiwgIjthPWEuc2xpY2UoMCwtMil9ZWxzZSBhPWFyZ3VtZW50c1tvXTtyLnB1c2goYSl9TSh0KyJcbkFyZ3VtZW50czogIitBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChyKS5qb2luKCIiKSsiXG4iKyhuZXcgRXJyb3IpLnN0YWNrKSxpPSExfXJldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZSl9dmFyIEQsQz17fTtmdW5jdGlvbiBQKHQsZSl7bnVsbCE9bi5kZXByZWNhdGlvbkhhbmRsZXImJm4uZGVwcmVjYXRpb25IYW5kbGVyKHQsZSksQ1t0XXx8KE0oZSksQ1t0XT0hMCl9ZnVuY3Rpb24gVCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIEZ1bmN0aW9ufHwiW29iamVjdCBGdW5jdGlvbl0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIE8odCxlKXt2YXIgaSxuPWgoe30sdCk7Zm9yKGkgaW4gZSlkKGUsaSkmJihyKHRbaV0pJiZyKGVbaV0pPyhuW2ldPXt9LGgobltpXSx0W2ldKSxoKG5baV0sZVtpXSkpOm51bGwhPWVbaV0/bltpXT1lW2ldOmRlbGV0ZSBuW2ldKTtmb3IoaSBpbiB0KWQodCxpKSYmIWQoZSxpKSYmcih0W2ldKSYmKG5baV09aCh7fSxuW2ldKSk7cmV0dXJuIG59ZnVuY3Rpb24gSSh0KXtudWxsIT10JiZ0aGlzLnNldCh0KX1uLnN1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5ncz0hMSxuLmRlcHJlY2F0aW9uSGFuZGxlcj1udWxsLEQ9T2JqZWN0LmtleXM/T2JqZWN0LmtleXM6ZnVuY3Rpb24odCl7dmFyIGUsaT1bXTtmb3IoZSBpbiB0KWQodCxlKSYmaS5wdXNoKGUpO3JldHVybiBpfTt2YXIgQT17fTtmdW5jdGlvbiBGKHQsZSl7dmFyIGk9dC50b0xvd2VyQ2FzZSgpO0FbaV09QVtpKyJzIl09QVtlXT10fWZ1bmN0aW9uIFIodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P0FbdF18fEFbdC50b0xvd2VyQ2FzZSgpXTp2b2lkIDB9ZnVuY3Rpb24gTCh0KXt2YXIgZSxpLG49e307Zm9yKGkgaW4gdClkKHQsaSkmJihlPVIoaSkpJiYobltlXT10W2ldKTtyZXR1cm4gbn12YXIgVz17fTtmdW5jdGlvbiBZKHQsZSl7V1t0XT1lfWZ1bmN0aW9uIE4odCxlLGkpe3ZhciBuPSIiK01hdGguYWJzKHQpLGE9ZS1uLmxlbmd0aCxyPXQ+PTA7cmV0dXJuKHI/aT8iKyI6IiI6Ii0iKStNYXRoLnBvdygxMCxNYXRoLm1heCgwLGEpKS50b1N0cmluZygpLnN1YnN0cigxKStufXZhciB6PS8oXFtbXlxbXSpcXSl8KFxcKT8oW0hoXW1tKHNzKT98TW98TU0/TT9NP3xEb3xERERvfEREP0Q/RD98ZGRkP2Q/fGRvP3x3W298d10/fFdbb3xXXT98UW8/fFlZWVlZWXxZWVlZWXxZWVlZfFlZfGdnKGdnZz8pP3xHRyhHR0c/KT98ZXxFfGF8QXxoaD98SEg/fGtrP3xtbT98c3M/fFN7MSw5fXx4fFh8eno/fFpaP3wuKS9nLFY9LyhcW1teXFtdKlxdKXwoXFwpPyhMVFN8TFR8TEw/TD9MP3xsezEsNH0pL2csSD17fSxFPXt9O2Z1bmN0aW9uIEIodCxlLGksbil7dmFyIGE9bjsic3RyaW5nIj09dHlwZW9mIG4mJihhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbbl0oKX0pLHQmJihFW3RdPWEpLGUmJihFW2VbMF1dPWZ1bmN0aW9uKCl7cmV0dXJuIE4oYS5hcHBseSh0aGlzLGFyZ3VtZW50cyksZVsxXSxlWzJdKX0pLGkmJihFW2ldPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm9yZGluYWwoYS5hcHBseSh0aGlzLGFyZ3VtZW50cyksdCl9KX1mdW5jdGlvbiBqKHQsZSl7cmV0dXJuIHQuaXNWYWxpZCgpPyhlPVUoZSx0LmxvY2FsZURhdGEoKSksSFtlXT1IW2VdfHxmdW5jdGlvbih0KXt2YXIgZSxpLG4sYT10Lm1hdGNoKHopO2ZvcihlPTAsaT1hLmxlbmd0aDtlPGk7ZSsrKUVbYVtlXV0/YVtlXT1FW2FbZV1dOmFbZV09KG49YVtlXSkubWF0Y2goL1xbW1xzXFNdLyk/bi5yZXBsYWNlKC9eXFt8XF0kL2csIiIpOm4ucmVwbGFjZSgvXFwvZywiIik7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuLHI9IiI7Zm9yKG49MDtuPGk7bisrKXIrPVQoYVtuXSk/YVtuXS5jYWxsKGUsdCk6YVtuXTtyZXR1cm4gcn19KGUpLEhbZV0odCkpOnQubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCl9ZnVuY3Rpb24gVSh0LGUpe3ZhciBpPTU7ZnVuY3Rpb24gbih0KXtyZXR1cm4gZS5sb25nRGF0ZUZvcm1hdCh0KXx8dH1mb3IoVi5sYXN0SW5kZXg9MDtpPj0wJiZWLnRlc3QodCk7KXQ9dC5yZXBsYWNlKFYsbiksVi5sYXN0SW5kZXg9MCxpLT0xO3JldHVybiB0fXZhciBHPS9cZC8scT0vXGRcZC8sWj0vXGR7M30vLCQ9L1xkezR9LyxYPS9bKy1dP1xkezZ9LyxLPS9cZFxkPy8sSj0vXGRcZFxkXGQ/LyxRPS9cZFxkXGRcZFxkXGQ/Lyx0dD0vXGR7MSwzfS8sZXQ9L1xkezEsNH0vLGl0PS9bKy1dP1xkezEsNn0vLG50PS9cZCsvLGF0PS9bKy1dP1xkKy8scnQ9L1p8WystXVxkXGQ6P1xkXGQvZ2ksb3Q9L1p8WystXVxkXGQoPzo6P1xkXGQpPy9naSxzdD0vWzAtOV17MCwyNTZ9WydhLXpcdTAwQTAtXHUwNUZGXHUwNzAwLVx1RDdGRlx1RjkwMC1cdUZEQ0ZcdUZERjAtXHVGRjA3XHVGRjEwLVx1RkZFRl17MSwyNTZ9fFtcdTA2MDAtXHUwNkZGXC9dezEsMjU2fShccyo/W1x1MDYwMC1cdTA2RkZdezEsMjU2fSl7MSwyfS9pLGx0PXt9O2Z1bmN0aW9uIHV0KHQsZSxpKXtsdFt0XT1UKGUpP2U6ZnVuY3Rpb24odCxuKXtyZXR1cm4gdCYmaT9pOmV9fWZ1bmN0aW9uIGR0KHQsZSl7cmV0dXJuIGQobHQsdCk/bHRbdF0oZS5fc3RyaWN0LGUuX2xvY2FsZSk6bmV3IFJlZ0V4cChodCh0LnJlcGxhY2UoIlxcIiwiIikucmVwbGFjZSgvXFwoXFspfFxcKFxdKXxcWyhbXlxdXFtdKilcXXxcXCguKS9nLGZ1bmN0aW9uKHQsZSxpLG4sYSl7cmV0dXJuIGV8fGl8fG58fGF9KSkpfWZ1bmN0aW9uIGh0KHQpe3JldHVybiB0LnJlcGxhY2UoL1stXC9cXF4kKis/LigpfFtcXXt9XS9nLCJcXCQmIil9dmFyIGN0PXt9O2Z1bmN0aW9uIGZ0KHQsZSl7dmFyIGksbj1lO2Zvcigic3RyaW5nIj09dHlwZW9mIHQmJih0PVt0XSkscyhlKSYmKG49ZnVuY3Rpb24odCxpKXtpW2VdPWsodCl9KSxpPTA7aTx0Lmxlbmd0aDtpKyspY3RbdFtpXV09bn1mdW5jdGlvbiBndCh0LGUpe2Z0KHQsZnVuY3Rpb24odCxpLG4sYSl7bi5fdz1uLl93fHx7fSxlKHQsbi5fdyxuLGEpfSl9ZnVuY3Rpb24gbXQodCxlLGkpe251bGwhPWUmJmQoY3QsdCkmJmN0W3RdKGUsaS5fYSxpLHQpfXZhciBwdD0wLHZ0PTEseXQ9MixidD0zLHh0PTQsX3Q9NSxrdD02LHd0PTcsTXQ9ODtmdW5jdGlvbiBTdCh0KXtyZXR1cm4gRHQodCk/MzY2OjM2NX1mdW5jdGlvbiBEdCh0KXtyZXR1cm4gdCU0PT0wJiZ0JTEwMCE9MHx8dCU0MDA9PTB9QigiWSIsMCwwLGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy55ZWFyKCk7cmV0dXJuIHQ8PTk5OTk/IiIrdDoiKyIrdH0pLEIoMCxbIllZIiwyXSwwLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueWVhcigpJTEwMH0pLEIoMCxbIllZWVkiLDRdLDAsInllYXIiKSxCKDAsWyJZWVlZWSIsNV0sMCwieWVhciIpLEIoMCxbIllZWVlZWSIsNiwhMF0sMCwieWVhciIpLEYoInllYXIiLCJ5IiksWSgieWVhciIsMSksdXQoIlkiLGF0KSx1dCgiWVkiLEsscSksdXQoIllZWVkiLGV0LCQpLHV0KCJZWVlZWSIsaXQsWCksdXQoIllZWVlZWSIsaXQsWCksZnQoWyJZWVlZWSIsIllZWVlZWSJdLHB0KSxmdCgiWVlZWSIsZnVuY3Rpb24odCxlKXtlW3B0XT0yPT09dC5sZW5ndGg/bi5wYXJzZVR3b0RpZ2l0WWVhcih0KTprKHQpfSksZnQoIllZIixmdW5jdGlvbih0LGUpe2VbcHRdPW4ucGFyc2VUd29EaWdpdFllYXIodCl9KSxmdCgiWSIsZnVuY3Rpb24odCxlKXtlW3B0XT1wYXJzZUludCh0LDEwKX0pLG4ucGFyc2VUd29EaWdpdFllYXI9ZnVuY3Rpb24odCl7cmV0dXJuIGsodCkrKGsodCk+Njg/MTkwMDoyZTMpfTt2YXIgQ3QsUHQ9VHQoIkZ1bGxZZWFyIiwhMCk7ZnVuY3Rpb24gVHQodCxlKXtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIG51bGwhPWk/KEl0KHRoaXMsdCxpKSxuLnVwZGF0ZU9mZnNldCh0aGlzLGUpLHRoaXMpOk90KHRoaXMsdCl9fWZ1bmN0aW9uIE90KHQsZSl7cmV0dXJuIHQuaXNWYWxpZCgpP3QuX2RbImdldCIrKHQuX2lzVVRDPyJVVEMiOiIiKStlXSgpOk5hTn1mdW5jdGlvbiBJdCh0LGUsaSl7dC5pc1ZhbGlkKCkmJiFpc05hTihpKSYmKCJGdWxsWWVhciI9PT1lJiZEdCh0LnllYXIoKSkmJjE9PT10Lm1vbnRoKCkmJjI5PT09dC5kYXRlKCk/dC5fZFsic2V0IisodC5faXNVVEM/IlVUQyI6IiIpK2VdKGksdC5tb250aCgpLEF0KGksdC5tb250aCgpKSk6dC5fZFsic2V0IisodC5faXNVVEM/IlVUQyI6IiIpK2VdKGkpKX1mdW5jdGlvbiBBdCh0LGUpe2lmKGlzTmFOKHQpfHxpc05hTihlKSlyZXR1cm4gTmFOO3ZhciBpLG49KGUlKGk9MTIpK2kpJWk7cmV0dXJuIHQrPShlLW4pLzEyLDE9PT1uP0R0KHQpPzI5OjI4OjMxLW4lNyUyfUN0PUFycmF5LnByb3RvdHlwZS5pbmRleE9mP0FycmF5LnByb3RvdHlwZS5pbmRleE9mOmZ1bmN0aW9uKHQpe3ZhciBlO2ZvcihlPTA7ZTx0aGlzLmxlbmd0aDsrK2UpaWYodGhpc1tlXT09PXQpcmV0dXJuIGU7cmV0dXJuLTF9LEIoIk0iLFsiTU0iLDJdLCJNbyIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb250aCgpKzF9KSxCKCJNTU0iLDAsMCxmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubW9udGhzU2hvcnQodGhpcyx0KX0pLEIoIk1NTU0iLDAsMCxmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubW9udGhzKHRoaXMsdCl9KSxGKCJtb250aCIsIk0iKSxZKCJtb250aCIsOCksdXQoIk0iLEspLHV0KCJNTSIsSyxxKSx1dCgiTU1NIixmdW5jdGlvbih0LGUpe3JldHVybiBlLm1vbnRoc1Nob3J0UmVnZXgodCl9KSx1dCgiTU1NTSIsZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5tb250aHNSZWdleCh0KX0pLGZ0KFsiTSIsIk1NIl0sZnVuY3Rpb24odCxlKXtlW3Z0XT1rKHQpLTF9KSxmdChbIk1NTSIsIk1NTU0iXSxmdW5jdGlvbih0LGUsaSxuKXt2YXIgYT1pLl9sb2NhbGUubW9udGhzUGFyc2UodCxuLGkuX3N0cmljdCk7bnVsbCE9YT9lW3Z0XT1hOmYoaSkuaW52YWxpZE1vbnRoPXR9KTt2YXIgRnQ9L0Rbb0RdPyhcW1teXFtcXV0qXF18XHMpK01NTU0/LyxSdD0iSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxMdD0iSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIik7ZnVuY3Rpb24gV3QodCxlKXt2YXIgaTtpZighdC5pc1ZhbGlkKCkpcmV0dXJuIHQ7aWYoInN0cmluZyI9PXR5cGVvZiBlKWlmKC9eXGQrJC8udGVzdChlKSllPWsoZSk7ZWxzZSBpZighcyhlPXQubG9jYWxlRGF0YSgpLm1vbnRoc1BhcnNlKGUpKSlyZXR1cm4gdDtyZXR1cm4gaT1NYXRoLm1pbih0LmRhdGUoKSxBdCh0LnllYXIoKSxlKSksdC5fZFsic2V0IisodC5faXNVVEM/IlVUQyI6IiIpKyJNb250aCJdKGUsaSksdH1mdW5jdGlvbiBZdCh0KXtyZXR1cm4gbnVsbCE9dD8oV3QodGhpcyx0KSxuLnVwZGF0ZU9mZnNldCh0aGlzLCEwKSx0aGlzKTpPdCh0aGlzLCJNb250aCIpfXZhciBOdD1zdCx6dD1zdDtmdW5jdGlvbiBWdCgpe2Z1bmN0aW9uIHQodCxlKXtyZXR1cm4gZS5sZW5ndGgtdC5sZW5ndGh9dmFyIGUsaSxuPVtdLGE9W10scj1bXTtmb3IoZT0wO2U8MTI7ZSsrKWk9YyhbMmUzLGVdKSxuLnB1c2godGhpcy5tb250aHNTaG9ydChpLCIiKSksYS5wdXNoKHRoaXMubW9udGhzKGksIiIpKSxyLnB1c2godGhpcy5tb250aHMoaSwiIikpLHIucHVzaCh0aGlzLm1vbnRoc1Nob3J0KGksIiIpKTtmb3Iobi5zb3J0KHQpLGEuc29ydCh0KSxyLnNvcnQodCksZT0wO2U8MTI7ZSsrKW5bZV09aHQobltlXSksYVtlXT1odChhW2VdKTtmb3IoZT0wO2U8MjQ7ZSsrKXJbZV09aHQocltlXSk7dGhpcy5fbW9udGhzUmVnZXg9bmV3IFJlZ0V4cCgiXigiK3Iuam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX21vbnRoc1Nob3J0UmVnZXg9dGhpcy5fbW9udGhzUmVnZXgsdGhpcy5fbW9udGhzU3RyaWN0UmVnZXg9bmV3IFJlZ0V4cCgiXigiK2Euam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXg9bmV3IFJlZ0V4cCgiXigiK24uam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIEh0KHQpe3ZhciBlO2lmKHQ8MTAwJiZ0Pj0wKXt2YXIgaT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO2lbMF09dCs0MDAsZT1uZXcgRGF0ZShEYXRlLlVUQy5hcHBseShudWxsLGkpKSxpc0Zpbml0ZShlLmdldFVUQ0Z1bGxZZWFyKCkpJiZlLnNldFVUQ0Z1bGxZZWFyKHQpfWVsc2UgZT1uZXcgRGF0ZShEYXRlLlVUQy5hcHBseShudWxsLGFyZ3VtZW50cykpO3JldHVybiBlfWZ1bmN0aW9uIEV0KHQsZSxpKXt2YXIgbj03K2UtaSxhPSg3K0h0KHQsMCxuKS5nZXRVVENEYXkoKS1lKSU3O3JldHVybi1hK24tMX1mdW5jdGlvbiBCdCh0LGUsaSxuLGEpe3ZhciByLG8scz0oNytpLW4pJTcsbD1FdCh0LG4sYSksdT0xKzcqKGUtMSkrcytsO3JldHVybiB1PD0wP289U3Qocj10LTEpK3U6dT5TdCh0KT8ocj10KzEsbz11LVN0KHQpKToocj10LG89dSkse3llYXI6cixkYXlPZlllYXI6b319ZnVuY3Rpb24ganQodCxlLGkpe3ZhciBuLGEscj1FdCh0LnllYXIoKSxlLGkpLG89TWF0aC5mbG9vcigodC5kYXlPZlllYXIoKS1yLTEpLzcpKzE7cmV0dXJuIG88MT8oYT10LnllYXIoKS0xLG49bytVdChhLGUsaSkpOm8+VXQodC55ZWFyKCksZSxpKT8obj1vLVV0KHQueWVhcigpLGUsaSksYT10LnllYXIoKSsxKTooYT10LnllYXIoKSxuPW8pLHt3ZWVrOm4seWVhcjphfX1mdW5jdGlvbiBVdCh0LGUsaSl7dmFyIG49RXQodCxlLGkpLGE9RXQodCsxLGUsaSk7cmV0dXJuKFN0KHQpLW4rYSkvN31mdW5jdGlvbiBHdCh0LGUpe3JldHVybiB0LnNsaWNlKGUsNykuY29uY2F0KHQuc2xpY2UoMCxlKSl9QigidyIsWyJ3dyIsMl0sIndvIiwid2VlayIpLEIoIlciLFsiV1ciLDJdLCJXbyIsImlzb1dlZWsiKSxGKCJ3ZWVrIiwidyIpLEYoImlzb1dlZWsiLCJXIiksWSgid2VlayIsNSksWSgiaXNvV2VlayIsNSksdXQoInciLEspLHV0KCJ3dyIsSyxxKSx1dCgiVyIsSyksdXQoIldXIixLLHEpLGd0KFsidyIsInd3IiwiVyIsIldXIl0sZnVuY3Rpb24odCxlLGksbil7ZVtuLnN1YnN0cigwLDEpXT1rKHQpfSksQigiZCIsMCwiZG8iLCJkYXkiKSxCKCJkZCIsMCwwLGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5c01pbih0aGlzLHQpfSksQigiZGRkIiwwLDAsZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzU2hvcnQodGhpcyx0KX0pLEIoImRkZGQiLDAsMCxmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXModGhpcyx0KX0pLEIoImUiLDAsMCwid2Vla2RheSIpLEIoIkUiLDAsMCwiaXNvV2Vla2RheSIpLEYoImRheSIsImQiKSxGKCJ3ZWVrZGF5IiwiZSIpLEYoImlzb1dlZWtkYXkiLCJFIiksWSgiZGF5IiwxMSksWSgid2Vla2RheSIsMTEpLFkoImlzb1dlZWtkYXkiLDExKSx1dCgiZCIsSyksdXQoImUiLEspLHV0KCJFIixLKSx1dCgiZGQiLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUud2Vla2RheXNNaW5SZWdleCh0KX0pLHV0KCJkZGQiLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUud2Vla2RheXNTaG9ydFJlZ2V4KHQpfSksdXQoImRkZGQiLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUud2Vla2RheXNSZWdleCh0KX0pLGd0KFsiZGQiLCJkZGQiLCJkZGRkIl0sZnVuY3Rpb24odCxlLGksbil7dmFyIGE9aS5fbG9jYWxlLndlZWtkYXlzUGFyc2UodCxuLGkuX3N0cmljdCk7bnVsbCE9YT9lLmQ9YTpmKGkpLmludmFsaWRXZWVrZGF5PXR9KSxndChbImQiLCJlIiwiRSJdLGZ1bmN0aW9uKHQsZSxpLG4pe2Vbbl09ayh0KX0pO3ZhciBxdD0iU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksWnQ9IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIuc3BsaXQoIl8iKSwkdD0iU3VfTW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksWHQ9c3QsS3Q9c3QsSnQ9c3Q7ZnVuY3Rpb24gUXQoKXtmdW5jdGlvbiB0KHQsZSl7cmV0dXJuIGUubGVuZ3RoLXQubGVuZ3RofXZhciBlLGksbixhLHIsbz1bXSxzPVtdLGw9W10sdT1bXTtmb3IoZT0wO2U8NztlKyspaT1jKFsyZTMsMV0pLmRheShlKSxuPXRoaXMud2Vla2RheXNNaW4oaSwiIiksYT10aGlzLndlZWtkYXlzU2hvcnQoaSwiIikscj10aGlzLndlZWtkYXlzKGksIiIpLG8ucHVzaChuKSxzLnB1c2goYSksbC5wdXNoKHIpLHUucHVzaChuKSx1LnB1c2goYSksdS5wdXNoKHIpO2ZvcihvLnNvcnQodCkscy5zb3J0KHQpLGwuc29ydCh0KSx1LnNvcnQodCksZT0wO2U8NztlKyspc1tlXT1odChzW2VdKSxsW2VdPWh0KGxbZV0pLHVbZV09aHQodVtlXSk7dGhpcy5fd2Vla2RheXNSZWdleD1uZXcgUmVnRXhwKCJeKCIrdS5qb2luKCJ8IikrIikiLCJpIiksdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4PXRoaXMuX3dlZWtkYXlzUmVnZXgsdGhpcy5fd2Vla2RheXNNaW5SZWdleD10aGlzLl93ZWVrZGF5c1JlZ2V4LHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXg9bmV3IFJlZ0V4cCgiXigiK2wuam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleD1uZXcgUmVnRXhwKCJeKCIrcy5qb2luKCJ8IikrIikiLCJpIiksdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleD1uZXcgUmVnRXhwKCJeKCIrby5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gdGUoKXtyZXR1cm4gdGhpcy5ob3VycygpJTEyfHwxMn1mdW5jdGlvbiBlZSh0LGUpe0IodA=="
},
{
"key": "Chart.bundle.min.js?4?3?1",
"type": "binary",
"value": "base64:LDAsMCxmdW5jdGlvbigpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tZXJpZGllbSh0aGlzLmhvdXJzKCksdGhpcy5taW51dGVzKCksZSl9KX1mdW5jdGlvbiBpZSh0LGUpe3JldHVybiBlLl9tZXJpZGllbVBhcnNlfUIoIkgiLFsiSEgiLDJdLDAsImhvdXIiKSxCKCJoIixbImhoIiwyXSwwLHRlKSxCKCJrIixbImtrIiwyXSwwLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaG91cnMoKXx8MjR9KSxCKCJobW0iLDAsMCxmdW5jdGlvbigpe3JldHVybiIiK3RlLmFwcGx5KHRoaXMpK04odGhpcy5taW51dGVzKCksMil9KSxCKCJobW1zcyIsMCwwLGZ1bmN0aW9uKCl7cmV0dXJuIiIrdGUuYXBwbHkodGhpcykrTih0aGlzLm1pbnV0ZXMoKSwyKStOKHRoaXMuc2Vjb25kcygpLDIpfSksQigiSG1tIiwwLDAsZnVuY3Rpb24oKXtyZXR1cm4iIit0aGlzLmhvdXJzKCkrTih0aGlzLm1pbnV0ZXMoKSwyKX0pLEIoIkhtbXNzIiwwLDAsZnVuY3Rpb24oKXtyZXR1cm4iIit0aGlzLmhvdXJzKCkrTih0aGlzLm1pbnV0ZXMoKSwyKStOKHRoaXMuc2Vjb25kcygpLDIpfSksZWUoImEiLCEwKSxlZSgiQSIsITEpLEYoImhvdXIiLCJoIiksWSgiaG91ciIsMTMpLHV0KCJhIixpZSksdXQoIkEiLGllKSx1dCgiSCIsSyksdXQoImgiLEspLHV0KCJrIixLKSx1dCgiSEgiLEsscSksdXQoImhoIixLLHEpLHV0KCJrayIsSyxxKSx1dCgiaG1tIixKKSx1dCgiaG1tc3MiLFEpLHV0KCJIbW0iLEopLHV0KCJIbW1zcyIsUSksZnQoWyJIIiwiSEgiXSxidCksZnQoWyJrIiwia2siXSxmdW5jdGlvbih0LGUsaSl7dmFyIG49ayh0KTtlW2J0XT0yND09PW4/MDpufSksZnQoWyJhIiwiQSJdLGZ1bmN0aW9uKHQsZSxpKXtpLl9pc1BtPWkuX2xvY2FsZS5pc1BNKHQpLGkuX21lcmlkaWVtPXR9KSxmdChbImgiLCJoaCJdLGZ1bmN0aW9uKHQsZSxpKXtlW2J0XT1rKHQpLGYoaSkuYmlnSG91cj0hMH0pLGZ0KCJobW0iLGZ1bmN0aW9uKHQsZSxpKXt2YXIgbj10Lmxlbmd0aC0yO2VbYnRdPWsodC5zdWJzdHIoMCxuKSksZVt4dF09ayh0LnN1YnN0cihuKSksZihpKS5iaWdIb3VyPSEwfSksZnQoImhtbXNzIixmdW5jdGlvbih0LGUsaSl7dmFyIG49dC5sZW5ndGgtNCxhPXQubGVuZ3RoLTI7ZVtidF09ayh0LnN1YnN0cigwLG4pKSxlW3h0XT1rKHQuc3Vic3RyKG4sMikpLGVbX3RdPWsodC5zdWJzdHIoYSkpLGYoaSkuYmlnSG91cj0hMH0pLGZ0KCJIbW0iLGZ1bmN0aW9uKHQsZSxpKXt2YXIgbj10Lmxlbmd0aC0yO2VbYnRdPWsodC5zdWJzdHIoMCxuKSksZVt4dF09ayh0LnN1YnN0cihuKSl9KSxmdCgiSG1tc3MiLGZ1bmN0aW9uKHQsZSxpKXt2YXIgbj10Lmxlbmd0aC00LGE9dC5sZW5ndGgtMjtlW2J0XT1rKHQuc3Vic3RyKDAsbikpLGVbeHRdPWsodC5zdWJzdHIobiwyKSksZVtfdF09ayh0LnN1YnN0cihhKSl9KTt2YXIgbmUsYWU9VHQoIkhvdXJzIiwhMCkscmU9e2NhbGVuZGFyOntzYW1lRGF5OiJbVG9kYXkgYXRdIExUIixuZXh0RGF5OiJbVG9tb3Jyb3cgYXRdIExUIixuZXh0V2VlazoiZGRkZCBbYXRdIExUIixsYXN0RGF5OiJbWWVzdGVyZGF5IGF0XSBMVCIsbGFzdFdlZWs6IltMYXN0XSBkZGRkIFthdF0gTFQiLHNhbWVFbHNlOiJMIn0sbG9uZ0RhdGVGb3JtYXQ6e0xUUzoiaDptbTpzcyBBIixMVDoiaDptbSBBIixMOiJNTS9ERC9ZWVlZIixMTDoiTU1NTSBELCBZWVlZIixMTEw6Ik1NTU0gRCwgWVlZWSBoOm1tIEEiLExMTEw6ImRkZGQsIE1NTU0gRCwgWVlZWSBoOm1tIEEifSxpbnZhbGlkRGF0ZToiSW52YWxpZCBkYXRlIixvcmRpbmFsOiIlZCIsZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS8scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiIlcyBhZ28iLHM6ImEgZmV3IHNlY29uZHMiLHNzOiIlZCBzZWNvbmRzIixtOiJhIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6ImFuIGhvdXIiLGhoOiIlZCBob3VycyIsZDoiYSBkYXkiLGRkOiIlZCBkYXlzIixNOiJhIG1vbnRoIixNTToiJWQgbW9udGhzIix5OiJhIHllYXIiLHl5OiIlZCB5ZWFycyJ9LG1vbnRoczpSdCxtb250aHNTaG9ydDpMdCx3ZWVrOntkb3c6MCxkb3k6Nn0sd2Vla2RheXM6cXQsd2Vla2RheXNNaW46JHQsd2Vla2RheXNTaG9ydDpadCxtZXJpZGllbVBhcnNlOi9bYXBdXC4/bT9cLj8vaX0sb2U9e30sc2U9e307ZnVuY3Rpb24gbGUodCl7cmV0dXJuIHQ/dC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoIl8iLCItIik6dH1mdW5jdGlvbiB1ZShlKXt2YXIgaT1udWxsO2lmKCFvZVtlXSYmdCYmdC5leHBvcnRzKXRyeXtpPW5lLl9hYmJyO3ZhciBuPV9lO24oIi4vbG9jYWxlLyIrZSksZGUoaSl9Y2F0Y2godCl7fXJldHVybiBvZVtlXX1mdW5jdGlvbiBkZSh0LGUpe3ZhciBpO3JldHVybiB0JiYoKGk9byhlKT9jZSh0KTpoZSh0LGUpKT9uZT1pOiJ1bmRlZmluZWQiIT10eXBlb2YgY29uc29sZSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4oIkxvY2FsZSAiK3QrIiBub3QgZm91bmQuIERpZCB5b3UgZm9yZ2V0IHRvIGxvYWQgaXQ/IikpLG5lLl9hYmJyfWZ1bmN0aW9uIGhlKHQsZSl7aWYobnVsbCE9PWUpe3ZhciBpLG49cmU7aWYoZS5hYmJyPXQsbnVsbCE9b2VbdF0pUCgiZGVmaW5lTG9jYWxlT3ZlcnJpZGUiLCJ1c2UgbW9tZW50LnVwZGF0ZUxvY2FsZShsb2NhbGVOYW1lLCBjb25maWcpIHRvIGNoYW5nZSBhbiBleGlzdGluZyBsb2NhbGUuIG1vbWVudC5kZWZpbmVMb2NhbGUobG9jYWxlTmFtZSwgY29uZmlnKSBzaG91bGQgb25seSBiZSB1c2VkIGZvciBjcmVhdGluZyBhIG5ldyBsb2NhbGUgU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvZGVmaW5lLWxvY2FsZS8gZm9yIG1vcmUgaW5mby4iKSxuPW9lW3RdLl9jb25maWc7ZWxzZSBpZihudWxsIT1lLnBhcmVudExvY2FsZSlpZihudWxsIT1vZVtlLnBhcmVudExvY2FsZV0pbj1vZVtlLnBhcmVudExvY2FsZV0uX2NvbmZpZztlbHNle2lmKG51bGw9PShpPXVlKGUucGFyZW50TG9jYWxlKSkpcmV0dXJuIHNlW2UucGFyZW50TG9jYWxlXXx8KHNlW2UucGFyZW50TG9jYWxlXT1bXSksc2VbZS5wYXJlbnRMb2NhbGVdLnB1c2goe25hbWU6dCxjb25maWc6ZX0pLG51bGw7bj1pLl9jb25maWd9cmV0dXJuIG9lW3RdPW5ldyBJKE8obixlKSksc2VbdF0mJnNlW3RdLmZvckVhY2goZnVuY3Rpb24odCl7aGUodC5uYW1lLHQuY29uZmlnKX0pLGRlKHQpLG9lW3RdfXJldHVybiBkZWxldGUgb2VbdF0sbnVsbH1mdW5jdGlvbiBjZSh0KXt2YXIgZTtpZih0JiZ0Ll9sb2NhbGUmJnQuX2xvY2FsZS5fYWJiciYmKHQ9dC5fbG9jYWxlLl9hYmJyKSwhdClyZXR1cm4gbmU7aWYoIWEodCkpe2lmKGU9dWUodCkpcmV0dXJuIGU7dD1bdF19cmV0dXJuIGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxpLG4sYSxyPTA7cjx0Lmxlbmd0aDspe2ZvcihhPWxlKHRbcl0pLnNwbGl0KCItIiksZT1hLmxlbmd0aCxpPShpPWxlKHRbcisxXSkpP2kuc3BsaXQoIi0iKTpudWxsO2U+MDspe2lmKG49dWUoYS5zbGljZSgwLGUpLmpvaW4oIi0iKSkpcmV0dXJuIG47aWYoaSYmaS5sZW5ndGg+PWUmJncoYSxpLCEwKT49ZS0xKWJyZWFrO2UtLX1yKyt9cmV0dXJuIG5lfSh0KX1mdW5jdGlvbiBmZSh0KXt2YXIgZSxpPXQuX2E7cmV0dXJuIGkmJi0yPT09Zih0KS5vdmVyZmxvdyYmKGU9aVt2dF08MHx8aVt2dF0+MTE/dnQ6aVt5dF08MXx8aVt5dF0+QXQoaVtwdF0saVt2dF0pP3l0OmlbYnRdPDB8fGlbYnRdPjI0fHwyND09PWlbYnRdJiYoMCE9PWlbeHRdfHwwIT09aVtfdF18fDAhPT1pW2t0XSk/YnQ6aVt4dF08MHx8aVt4dF0+NTk/eHQ6aVtfdF08MHx8aVtfdF0+NTk/X3Q6aVtrdF08MHx8aVtrdF0+OTk5P2t0Oi0xLGYodCkuX292ZXJmbG93RGF5T2ZZZWFyJiYoZTxwdHx8ZT55dCkmJihlPXl0KSxmKHQpLl9vdmVyZmxvd1dlZWtzJiYtMT09PWUmJihlPXd0KSxmKHQpLl9vdmVyZmxvd1dlZWtkYXkmJi0xPT09ZSYmKGU9TXQpLGYodCkub3ZlcmZsb3c9ZSksdH1mdW5jdGlvbiBnZSh0LGUsaSl7cmV0dXJuIG51bGwhPXQ/dDpudWxsIT1lP2U6aX1mdW5jdGlvbiBtZSh0KXt2YXIgZSxpLGEscixvLHM9W107aWYoIXQuX2Qpe2ZvcihhPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBEYXRlKG4ubm93KCkpO3JldHVybiB0Ll91c2VVVEM/W2UuZ2V0VVRDRnVsbFllYXIoKSxlLmdldFVUQ01vbnRoKCksZS5nZXRVVENEYXRlKCldOltlLmdldEZ1bGxZZWFyKCksZS5nZXRNb250aCgpLGUuZ2V0RGF0ZSgpXX0odCksdC5fdyYmbnVsbD09dC5fYVt5dF0mJm51bGw9PXQuX2FbdnRdJiZmdW5jdGlvbih0KXt2YXIgZSxpLG4sYSxyLG8scyxsO2lmKG51bGwhPShlPXQuX3cpLkdHfHxudWxsIT1lLld8fG51bGwhPWUuRSlyPTEsbz00LGk9Z2UoZS5HRyx0Ll9hW3B0XSxqdChJZSgpLDEsNCkueWVhciksbj1nZShlLlcsMSksKChhPWdlKGUuRSwxKSk8MXx8YT43KSYmKGw9ITApO2Vsc2V7cj10Ll9sb2NhbGUuX3dlZWsuZG93LG89dC5fbG9jYWxlLl93ZWVrLmRveTt2YXIgdT1qdChJZSgpLHIsbyk7aT1nZShlLmdnLHQuX2FbcHRdLHUueWVhciksbj1nZShlLncsdS53ZWVrKSxudWxsIT1lLmQ/KChhPWUuZCk8MHx8YT42KSYmKGw9ITApOm51bGwhPWUuZT8oYT1lLmUrciwoZS5lPDB8fGUuZT42KSYmKGw9ITApKTphPXJ9bjwxfHxuPlV0KGkscixvKT9mKHQpLl9vdmVyZmxvd1dlZWtzPSEwOm51bGwhPWw/Zih0KS5fb3ZlcmZsb3dXZWVrZGF5PSEwOihzPUJ0KGksbixhLHIsbyksdC5fYVtwdF09cy55ZWFyLHQuX2RheU9mWWVhcj1zLmRheU9mWWVhcil9KHQpLG51bGwhPXQuX2RheU9mWWVhciYmKG89Z2UodC5fYVtwdF0sYVtwdF0pLCh0Ll9kYXlPZlllYXI+U3Qobyl8fDA9PT10Ll9kYXlPZlllYXIpJiYoZih0KS5fb3ZlcmZsb3dEYXlPZlllYXI9ITApLGk9SHQobywwLHQuX2RheU9mWWVhciksdC5fYVt2dF09aS5nZXRVVENNb250aCgpLHQuX2FbeXRdPWkuZ2V0VVRDRGF0ZSgpKSxlPTA7ZTwzJiZudWxsPT10Ll9hW2VdOysrZSl0Ll9hW2VdPXNbZV09YVtlXTtmb3IoO2U8NztlKyspdC5fYVtlXT1zW2VdPW51bGw9PXQuX2FbZV0/Mj09PWU/MTowOnQuX2FbZV07MjQ9PT10Ll9hW2J0XSYmMD09PXQuX2FbeHRdJiYwPT09dC5fYVtfdF0mJjA9PT10Ll9hW2t0XSYmKHQuX25leHREYXk9ITAsdC5fYVtidF09MCksdC5fZD0odC5fdXNlVVRDP0h0OmZ1bmN0aW9uKHQsZSxpLG4sYSxyLG8pe3ZhciBzO3JldHVybiB0PDEwMCYmdD49MD8ocz1uZXcgRGF0ZSh0KzQwMCxlLGksbixhLHIsbyksaXNGaW5pdGUocy5nZXRGdWxsWWVhcigpKSYmcy5zZXRGdWxsWWVhcih0KSk6cz1uZXcgRGF0ZSh0LGUsaSxuLGEscixvKSxzfSkuYXBwbHkobnVsbCxzKSxyPXQuX3VzZVVUQz90Ll9kLmdldFVUQ0RheSgpOnQuX2QuZ2V0RGF5KCksbnVsbCE9dC5fdHptJiZ0Ll9kLnNldFVUQ01pbnV0ZXModC5fZC5nZXRVVENNaW51dGVzKCktdC5fdHptKSx0Ll9uZXh0RGF5JiYodC5fYVtidF09MjQpLHQuX3cmJnZvaWQgMCE9PXQuX3cuZCYmdC5fdy5kIT09ciYmKGYodCkud2Vla2RheU1pc21hdGNoPSEwKX19dmFyIHBlPS9eXHMqKCg/OlsrLV1cZHs2fXxcZHs0fSktKD86XGRcZC1cZFxkfFdcZFxkLVxkfFdcZFxkfFxkXGRcZHxcZFxkKSkoPzooVHwgKShcZFxkKD86OlxkXGQoPzo6XGRcZCg/OlsuLF1cZCspPyk/KT8pKFtcK1wtXVxkXGQoPzo6P1xkXGQpP3xccypaKT8pPyQvLHZlPS9eXHMqKCg/OlsrLV1cZHs2fXxcZHs0fSkoPzpcZFxkXGRcZHxXXGRcZFxkfFdcZFxkfFxkXGRcZHxcZFxkKSkoPzooVHwgKShcZFxkKD86XGRcZCg/OlxkXGQoPzpbLixdXGQrKT8pPyk/KShbXCtcLV1cZFxkKD86Oj9cZFxkKT98XHMqWik/KT8kLyx5ZT0vWnxbKy1dXGRcZCg/Ojo/XGRcZCk/LyxiZT1bWyJZWVlZWVktTU0tREQiLC9bKy1dXGR7Nn0tXGRcZC1cZFxkL10sWyJZWVlZLU1NLUREIiwvXGR7NH0tXGRcZC1cZFxkL10sWyJHR0dHLVtXXVdXLUUiLC9cZHs0fS1XXGRcZC1cZC9dLFsiR0dHRy1bV11XVyIsL1xkezR9LVdcZFxkLywhMV0sWyJZWVlZLURERCIsL1xkezR9LVxkezN9L10sWyJZWVlZLU1NIiwvXGR7NH0tXGRcZC8sITFdLFsiWVlZWVlZTU1ERCIsL1srLV1cZHsxMH0vXSxbIllZWVlNTUREIiwvXGR7OH0vXSxbIkdHR0dbV11XV0UiLC9cZHs0fVdcZHszfS9dLFsiR0dHR1tXXVdXIiwvXGR7NH1XXGR7Mn0vLCExXSxbIllZWVlEREQiLC9cZHs3fS9dXSx4ZT1bWyJISDptbTpzcy5TU1NTIiwvXGRcZDpcZFxkOlxkXGRcLlxkKy9dLFsiSEg6bW06c3MsU1NTUyIsL1xkXGQ6XGRcZDpcZFxkLFxkKy9dLFsiSEg6bW06c3MiLC9cZFxkOlxkXGQ6XGRcZC9dLFsiSEg6bW0iLC9cZFxkOlxkXGQvXSxbIkhIbW1zcy5TU1NTIiwvXGRcZFxkXGRcZFxkXC5cZCsvXSxbIkhIbW1zcyxTU1NTIiwvXGRcZFxkXGRcZFxkLFxkKy9dLFsiSEhtbXNzIiwvXGRcZFxkXGRcZFxkL10sWyJISG1tIiwvXGRcZFxkXGQvXSxbIkhIIiwvXGRcZC9dXSxrZT0vXlwvP0RhdGVcKChcLT9cZCspL2k7ZnVuY3Rpb24gd2UodCl7dmFyIGUsaSxuLGEscixvLHM9dC5faSxsPXBlLmV4ZWMocyl8fHZlLmV4ZWMocyk7aWYobCl7Zm9yKGYodCkuaXNvPSEwLGU9MCxpPWJlLmxlbmd0aDtlPGk7ZSsrKWlmKGJlW2VdWzFdLmV4ZWMobFsxXSkpe2E9YmVbZV1bMF0sbj0hMSE9PWJlW2VdWzJdO2JyZWFrfWlmKG51bGw9PWEpcmV0dXJuIHZvaWQodC5faXNWYWxpZD0hMSk7aWYobFszXSl7Zm9yKGU9MCxpPXhlLmxlbmd0aDtlPGk7ZSsrKWlmKHhlW2VdWzFdLmV4ZWMobFszXSkpe3I9KGxbMl18fCIgIikreGVbZV1bMF07YnJlYWt9aWYobnVsbD09cilyZXR1cm4gdm9pZCh0Ll9pc1ZhbGlkPSExKX1pZighbiYmbnVsbCE9cilyZXR1cm4gdm9pZCh0Ll9pc1ZhbGlkPSExKTtpZihsWzRdKXtpZigheWUuZXhlYyhsWzRdKSlyZXR1cm4gdm9pZCh0Ll9pc1ZhbGlkPSExKTtvPSJaIn10Ll9mPWErKHJ8fCIiKSsob3x8IiIpLFBlKHQpfWVsc2UgdC5faXNWYWxpZD0hMX12YXIgTWU9L14oPzooTW9ufFR1ZXxXZWR8VGh1fEZyaXxTYXR8U3VuKSw/XHMpPyhcZHsxLDJ9KVxzKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKVxzKFxkezIsNH0pXHMoXGRcZCk6KFxkXGQpKD86OihcZFxkKSk/XHMoPzooVVR8R01UfFtFQ01QXVtTRF1UKXwoW1p6XSl8KFsrLV1cZHs0fSkpJC87ZnVuY3Rpb24gU2UodCl7dmFyIGU9cGFyc2VJbnQodCwxMCk7cmV0dXJuIGU8PTQ5PzJlMytlOmU8PTk5OT8xOTAwK2U6ZX12YXIgRGU9e1VUOjAsR01UOjAsRURUOi0yNDAsRVNUOi0zMDAsQ0RUOi0zMDAsQ1NUOi0zNjAsTURUOi0zNjAsTVNUOi00MjAsUERUOi00MjAsUFNUOi00ODB9O2Z1bmN0aW9uIENlKHQpe3ZhciBlLGksbixhLHIsbyxzLGw9TWUuZXhlYyh0Ll9pLnJlcGxhY2UoL1woW14pXSpcKXxbXG5cdF0vZywiICIpLnJlcGxhY2UoLyhcc1xzKykvZywiICIpLnJlcGxhY2UoL15cc1xzKi8sIiIpLnJlcGxhY2UoL1xzXHMqJC8sIiIpKTtpZihsKXt2YXIgdT0oZT1sWzRdLGk9bFszXSxuPWxbMl0sYT1sWzVdLHI9bFs2XSxvPWxbN10scz1bU2UoZSksTHQuaW5kZXhPZihpKSxwYXJzZUludChuLDEwKSxwYXJzZUludChhLDEwKSxwYXJzZUludChyLDEwKV0sbyYmcy5wdXNoKHBhcnNlSW50KG8sMTApKSxzKTtpZighZnVuY3Rpb24odCxlLGkpe2lmKHQpe3ZhciBuPVp0LmluZGV4T2YodCksYT1uZXcgRGF0ZShlWzBdLGVbMV0sZVsyXSkuZ2V0RGF5KCk7aWYobiE9PWEpcmV0dXJuIGYoaSkud2Vla2RheU1pc21hdGNoPSEwLGkuX2lzVmFsaWQ9ITEsITF9cmV0dXJuITB9KGxbMV0sdSx0KSlyZXR1cm47dC5fYT11LHQuX3R6bT1mdW5jdGlvbih0LGUsaSl7aWYodClyZXR1cm4gRGVbdF07aWYoZSlyZXR1cm4gMDt2YXIgbj1wYXJzZUludChpLDEwKSxhPW4lMTAwLHI9KG4tYSkvMTAwO3JldHVybiA2MCpyK2F9KGxbOF0sbFs5XSxsWzEwXSksdC5fZD1IdC5hcHBseShudWxsLHQuX2EpLHQuX2Quc2V0VVRDTWludXRlcyh0Ll9kLmdldFVUQ01pbnV0ZXMoKS10Ll90em0pLGYodCkucmZjMjgyMj0hMH1lbHNlIHQuX2lzVmFsaWQ9ITF9ZnVuY3Rpb24gUGUodCl7aWYodC5fZiE9PW4uSVNPXzg2MDEpaWYodC5fZiE9PW4uUkZDXzI4MjIpe3QuX2E9W10sZih0KS5lbXB0eT0hMDt2YXIgZSxpLGEscixvLHM9IiIrdC5faSxsPXMubGVuZ3RoLHU9MDtmb3IoYT1VKHQuX2YsdC5fbG9jYWxlKS5tYXRjaCh6KXx8W10sZT0wO2U8YS5sZW5ndGg7ZSsrKXI9YVtlXSwoaT0ocy5tYXRjaChkdChyLHQpKXx8W10pWzBdKSYmKChvPXMuc3Vic3RyKDAscy5pbmRleE9mKGkpKSkubGVuZ3RoPjAmJmYodCkudW51c2VkSW5wdXQucHVzaChvKSxzPXMuc2xpY2Uocy5pbmRleE9mKGkpK2kubGVuZ3RoKSx1Kz1pLmxlbmd0aCksRVtyXT8oaT9mKHQpLmVtcHR5PSExOmYodCkudW51c2VkVG9rZW5zLnB1c2gociksbXQocixpLHQpKTp0Ll9zdHJpY3QmJiFpJiZmKHQpLnVudXNlZFRva2Vucy5wdXNoKHIpO2YodCkuY2hhcnNMZWZ0T3Zlcj1sLXUscy5sZW5ndGg+MCYmZih0KS51bnVzZWRJbnB1dC5wdXNoKHMpLHQuX2FbYnRdPD0xMiYmITA9PT1mKHQpLmJpZ0hvdXImJnQuX2FbYnRdPjAmJihmKHQpLmJpZ0hvdXI9dm9pZCAwKSxmKHQpLnBhcnNlZERhdGVQYXJ0cz10Ll9hLnNsaWNlKDApLGYodCkubWVyaWRpZW09dC5fbWVyaWRpZW0sdC5fYVtidF09KGQ9dC5fbG9jYWxlLGg9dC5fYVtidF0sbnVsbD09KGM9dC5fbWVyaWRpZW0pP2g6bnVsbCE9ZC5tZXJpZGllbUhvdXI/ZC5tZXJpZGllbUhvdXIoaCxjKTpudWxsIT1kLmlzUE0/KChnPWQuaXNQTShjKSkmJmg8MTImJihoKz0xMiksZ3x8MTIhPT1ofHwoaD0wKSxoKTpoKSxtZSh0KSxmZSh0KX1lbHNlIENlKHQpO2Vsc2Ugd2UodCk7dmFyIGQsaCxjLGd9ZnVuY3Rpb24gVGUodCl7dmFyIGU9dC5faSxpPXQuX2Y7cmV0dXJuIHQuX2xvY2FsZT10Ll9sb2NhbGV8fGNlKHQuX2wpLG51bGw9PT1lfHx2b2lkIDA9PT1pJiYiIj09PWU/bSh7bnVsbElucHV0OiEwfSk6KCJzdHJpbmciPT10eXBlb2YgZSYmKHQuX2k9ZT10Ll9sb2NhbGUucHJlcGFyc2UoZSkpLHgoZSk/bmV3IGIoZmUoZSkpOihsKGUpP3QuX2Q9ZTphKGkpP2Z1bmN0aW9uKHQpe3ZhciBlLGksbixhLHI7aWYoMD09PXQuX2YubGVuZ3RoKXJldHVybiBmKHQpLmludmFsaWRGb3JtYXQ9ITAsdm9pZCh0Ll9kPW5ldyBEYXRlKE5hTikpO2ZvcihhPTA7YTx0Ll9mLmxlbmd0aDthKyspcj0wLGU9dih7fSx0KSxudWxsIT10Ll91c2VVVEMmJihlLl91c2VVVEM9dC5fdXNlVVRDKSxlLl9mPXQuX2ZbYV0sUGUoZSksZyhlKSYmKHIrPWYoZSkuY2hhcnNMZWZ0T3ZlcixyKz0xMCpmKGUpLnVudXNlZFRva2Vucy5sZW5ndGgsZihlKS5zY29yZT1yLChudWxsPT1ufHxyPG4pJiYobj1yLGk9ZSkpO2godCxpfHxlKX0odCk6aT9QZSh0KTpmdW5jdGlvbih0KXt2YXIgZT10Ll9pO28oZSk/dC5fZD1uZXcgRGF0ZShuLm5vdygpKTpsKGUpP3QuX2Q9bmV3IERhdGUoZS52YWx1ZU9mKCkpOiJzdHJpbmciPT10eXBlb2YgZT9mdW5jdGlvbih0KXt2YXIgZT1rZS5leGVjKHQuX2kpO251bGw9PT1lPyh3ZSh0KSwhMT09PXQuX2lzVmFsaWQmJihkZWxldGUgdC5faXNWYWxpZCxDZSh0KSwhMT09PXQuX2lzVmFsaWQmJihkZWxldGUgdC5faXNWYWxpZCxuLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrKHQpKSkpOnQuX2Q9bmV3IERhdGUoK2VbMV0pfSh0KTphKGUpPyh0Ll9hPXUoZS5zbGljZSgwKSxmdW5jdGlvbih0KXtyZXR1cm4gcGFyc2VJbnQodCwxMCl9KSxtZSh0KSk6cihlKT9mdW5jdGlvbih0KXtpZighdC5fZCl7dmFyIGU9TCh0Ll9pKTt0Ll9hPXUoW2UueWVhcixlLm1vbnRoLGUuZGF5fHxlLmRhdGUsZS5ob3VyLGUubWludXRlLGUuc2Vjb25kLGUubWlsbGlzZWNvbmRdLGZ1bmN0aW9uKHQpe3JldHVybiB0JiZwYXJzZUludCh0LDEwKX0pLG1lKHQpfX0odCk6cyhlKT90Ll9kPW5ldyBEYXRlKGUpOm4uY3JlYXRlRnJvbUlucHV0RmFsbGJhY2sodCl9KHQpLGcodCl8fCh0Ll9kPW51bGwpLHQpKX1mdW5jdGlvbiBPZSh0LGUsaSxuLG8pe3ZhciBzLGw9e307cmV0dXJuITAhPT1pJiYhMSE9PWl8fChuPWksaT12b2lkIDApLChyKHQpJiZmdW5jdGlvbih0KXtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcylyZXR1cm4gMD09PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHQpLmxlbmd0aDt2YXIgZTtmb3IoZSBpbiB0KWlmKHQuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuITE7cmV0dXJuITB9KHQpfHxhKHQpJiYwPT09dC5sZW5ndGgpJiYodD12b2lkIDApLGwuX2lzQU1vbWVudE9iamVjdD0hMCxsLl91c2VVVEM9bC5faXNVVEM9byxsLl9sPWksbC5faT10LGwuX2Y9ZSxsLl9zdHJpY3Q9biwocz1uZXcgYihmZShUZShsKSkpKS5fbmV4dERheSYmKHMuYWRkKDEsImQiKSxzLl9uZXh0RGF5PXZvaWQgMCksc31mdW5jdGlvbiBJZSh0LGUsaSxuKXtyZXR1cm4gT2UodCxlLGksbiwhMSl9bi5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjaz1TKCJ2YWx1ZSBwcm92aWRlZCBpcyBub3QgaW4gYSByZWNvZ25pemVkIFJGQzI4MjIgb3IgSVNPIGZvcm1hdC4gbW9tZW50IGNvbnN0cnVjdGlvbiBmYWxscyBiYWNrIHRvIGpzIERhdGUoKSwgd2hpY2ggaXMgbm90IHJlbGlhYmxlIGFjcm9zcyBhbGwgYnJvd3NlcnMgYW5kIHZlcnNpb25zLiBOb24gUkZDMjgyMi9JU08gZGF0ZSBmb3JtYXRzIGFyZSBkaXNjb3VyYWdlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGFuIHVwY29taW5nIG1ham9yIHJlbGVhc2UuIFBsZWFzZSByZWZlciB0byBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2pzLWRhdGUvIGZvciBtb3JlIGluZm8uIixmdW5jdGlvbih0KXt0Ll9kPW5ldyBEYXRlKHQuX2krKHQuX3VzZVVUQz8iIFVUQyI6IiIpKX0pLG4uSVNPXzg2MDE9ZnVuY3Rpb24oKXt9LG4uUkZDXzI4MjI9ZnVuY3Rpb24oKXt9O3ZhciBBZT1TKCJtb21lbnQoKS5taW4gaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5tYXggaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LyIsZnVuY3Rpb24oKXt2YXIgdD1JZS5hcHBseShudWxsLGFyZ3VtZW50cyk7cmV0dXJuIHRoaXMuaXNWYWxpZCgpJiZ0LmlzVmFsaWQoKT90PHRoaXM/dGhpczp0Om0oKX0pLEZlPVMoIm1vbWVudCgpLm1heCBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50Lm1pbiBpbnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL21pbi1tYXgvIixmdW5jdGlvbigpe3ZhciB0PUllLmFwcGx5KG51bGwsYXJndW1lbnRzKTtyZXR1cm4gdGhpcy5pc1ZhbGlkKCkmJnQuaXNWYWxpZCgpP3Q+dGhpcz90aGlzOnQ6bSgpfSk7ZnVuY3Rpb24gUmUodCxlKXt2YXIgaSxuO2lmKDE9PT1lLmxlbmd0aCYmYShlWzBdKSYmKGU9ZVswXSksIWUubGVuZ3RoKXJldHVybiBJZSgpO2ZvcihpPWVbMF0sbj0xO248ZS5sZW5ndGg7KytuKWVbbl0uaXNWYWxpZCgpJiYhZVtuXVt0XShpKXx8KGk9ZVtuXSk7cmV0dXJuIGl9dmFyIExlPVsieWVhciIsInF1YXJ0ZXIiLCJtb250aCIsIndlZWsiLCJkYXkiLCJob3VyIiwibWludXRlIiwic2Vjb25kIiwibWlsbGlzZWNvbmQiXTtmdW5jdGlvbiBXZSh0KXt2YXIgZT1MKHQpLGk9ZS55ZWFyfHwwLG49ZS5xdWFydGVyfHwwLGE9ZS5tb250aHx8MCxyPWUud2Vla3x8ZS5pc29XZWVrfHwwLG89ZS5kYXl8fDAscz1lLmhvdXJ8fDAsbD1lLm1pbnV0ZXx8MCx1PWUuc2Vjb25kfHwwLGQ9ZS5taWxsaXNlY29uZHx8MDt0aGlzLl9pc1ZhbGlkPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0KWlmKC0xPT09Q3QuY2FsbChMZSxlKXx8bnVsbCE9dFtlXSYmaXNOYU4odFtlXSkpcmV0dXJuITE7Zm9yKHZhciBpPSExLG49MDtuPExlLmxlbmd0aDsrK24paWYodFtMZVtuXV0pe2lmKGkpcmV0dXJuITE7cGFyc2VGbG9hdCh0W0xlW25dXSkhPT1rKHRbTGVbbl1dKSYmKGk9ITApfXJldHVybiEwfShlKSx0aGlzLl9taWxsaXNlY29uZHM9K2QrMWUzKnUrNmU0KmwrMWUzKnMqNjAqNjAsdGhpcy5fZGF5cz0rbys3KnIsdGhpcy5fbW9udGhzPSthKzMqbisxMippLHRoaXMuX2RhdGE9e30sdGhpcy5fbG9jYWxlPWNlKCksdGhpcy5fYnViYmxlKCl9ZnVuY3Rpb24gWWUodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBXZX1mdW5jdGlvbiBOZSh0KXtyZXR1cm4gdDwwPy0xKk1hdGgucm91bmQoLTEqdCk6TWF0aC5yb3VuZCh0KX1mdW5jdGlvbiB6ZSh0LGUpe0IodCwwLDAsZnVuY3Rpb24oKXt2YXIgdD10aGlzLnV0Y09mZnNldCgpLGk9IisiO3JldHVybiB0PDAmJih0PS10LGk9Ii0iKSxpK04ofn4odC82MCksMikrZStOKH5+dCU2MCwyKX0pfXplKCJaIiwiOiIpLHplKCJaWiIsIiIpLHV0KCJaIixvdCksdXQoIlpaIixvdCksZnQoWyJaIiwiWloiXSxmdW5jdGlvbih0LGUsaSl7aS5fdXNlVVRDPSEwLGkuX3R6bT1IZShvdCx0KX0pO3ZhciBWZT0vKFtcK1wtXXxcZFxkKS9naTtmdW5jdGlvbiBIZSh0LGUpe3ZhciBpPShlfHwiIikubWF0Y2godCk7aWYobnVsbD09PWkpcmV0dXJuIG51bGw7dmFyIG49aVtpLmxlbmd0aC0xXXx8W10sYT0obisiIikubWF0Y2goVmUpfHxbIi0iLDAsMF0scj02MCphWzFdK2soYVsyXSk7cmV0dXJuIDA9PT1yPzA6IisiPT09YVswXT9yOi1yfWZ1bmN0aW9uIEVlKHQsZSl7dmFyIGksYTtyZXR1cm4gZS5faXNVVEM/KGk9ZS5jbG9uZSgpLGE9KHgodCl8fGwodCk/dC52YWx1ZU9mKCk6SWUodCkudmFsdWVPZigpKS1pLnZhbHVlT2YoKSxpLl9kLnNldFRpbWUoaS5fZC52YWx1ZU9mKCkrYSksbi51cGRhdGVPZmZzZXQoaSwhMSksaSk6SWUodCkubG9jYWwoKX1mdW5jdGlvbiBCZSh0KXtyZXR1cm4gMTUqLU1hdGgucm91bmQodC5fZC5nZXRUaW1lem9uZU9mZnNldCgpLzE1KX1mdW5jdGlvbiBqZSgpe3JldHVybiEhdGhpcy5pc1ZhbGlkKCkmJnRoaXMuX2lzVVRDJiYwPT09dGhpcy5fb2Zmc2V0fW4udXBkYXRlT2Zmc2V0PWZ1bmN0aW9uKCl7fTt2YXIgVWU9L14oXC18XCspPyg/OihcZCopWy4gXSk/KFxkKylcOihcZCspKD86XDooXGQrKShcLlxkKik/KT8kLyxHZT0vXigtfFwrKT9QKD86KFstK10/WzAtOSwuXSopWSk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopVyk/KD86KFstK10/WzAtOSwuXSopRCk/KD86VCg/OihbLStdP1swLTksLl0qKUgpPyg/OihbLStdP1swLTksLl0qKU0pPyg/OihbLStdP1swLTksLl0qKVMpPyk/JC87ZnVuY3Rpb24gcWUodCxlKXt2YXIgaSxuLGEscixvLGwsdT10LGg9bnVsbDtyZXR1cm4gWWUodCk/dT17bXM6dC5fbWlsbGlzZWNvbmRzLGQ6dC5fZGF5cyxNOnQuX21vbnRoc306cyh0KT8odT17fSxlP3VbZV09dDp1Lm1pbGxpc2Vjb25kcz10KTooaD1VZS5leGVjKHQpKT8oaT0iLSI9PT1oWzFdPy0xOjEsdT17eTowLGQ6ayhoW3l0XSkqaSxoOmsoaFtidF0pKmksbTprKGhbeHRdKSppLHM6ayhoW190XSkqaSxtczprKE5lKDFlMypoW2t0XSkpKml9KTooaD1HZS5leGVjKHQpKT8oaT0iLSI9PT1oWzFdPy0xOjEsdT17eTpaZShoWzJdLGkpLE06WmUoaFszXSxpKSx3OlplKGhbNF0saSksZDpaZShoWzVdLGkpLGg6WmUoaFs2XSxpKSxtOlplKGhbN10saSksczpaZShoWzhdLGkpfSk6bnVsbD09dT91PXt9OiJvYmplY3QiPT10eXBlb2YgdSYmKCJmcm9tImluIHV8fCJ0byJpbiB1KSYmKHI9SWUodS5mcm9tKSxvPUllKHUudG8pLGE9ci5pc1ZhbGlkKCkmJm8uaXNWYWxpZCgpPyhvPUVlKG8sciksci5pc0JlZm9yZShvKT9sPSRlKHIsbyk6KChsPSRlKG8scikpLm1pbGxpc2Vjb25kcz0tbC5taWxsaXNlY29uZHMsbC5tb250aHM9LWwubW9udGhzKSxsKTp7bWlsbGlzZWNvbmRzOjAsbW9udGhzOjB9LCh1PXt9KS5tcz1hLm1pbGxpc2Vjb25kcyx1Lk09YS5tb250aHMpLG49bmV3IFdlKHUpLFllKHQpJiZkKHQsIl9sb2NhbGUiKSYmKG4uX2xvY2FsZT10Ll9sb2NhbGUpLG59ZnVuY3Rpb24gWmUodCxlKXt2YXIgaT10JiZwYXJzZUZsb2F0KHQucmVwbGFjZSgiLCIsIi4iKSk7cmV0dXJuKGlzTmFOKGkpPzA6aSkqZX1mdW5jdGlvbiAkZSh0LGUpe3ZhciBpPXt9O3JldHVybiBpLm1vbnRocz1lLm1vbnRoKCktdC5tb250aCgpKzEyKihlLnllYXIoKS10LnllYXIoKSksdC5jbG9uZSgpLmFkZChpLm1vbnRocywiTSIpLmlzQWZ0ZXIoZSkmJi0taS5tb250aHMsaS5taWxsaXNlY29uZHM9K2UtK3QuY2xvbmUoKS5hZGQoaS5tb250aHMsIk0iKSxpfWZ1bmN0aW9uIFhlKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKGksbil7dmFyIGE7cmV0dXJuIG51bGw9PT1ufHxpc05hTigrbil8fChQKGUsIm1vbWVudCgpLiIrZSsiKHBlcmlvZCwgbnVtYmVyKSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIG1vbWVudCgpLiIrZSsiKG51bWJlciwgcGVyaW9kKS4gU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvYWRkLWludmVydGVkLXBhcmFtLyBmb3IgbW9yZSBpbmZvLiIpLGE9aSxpPW4sbj1hKSxLZSh0aGlzLHFlKGk9InN0cmluZyI9PXR5cGVvZiBpPytpOmksbiksdCksdGhpc319ZnVuY3Rpb24gS2UodCxlLGksYSl7dmFyIHI9ZS5fbWlsbGlzZWNvbmRzLG89TmUoZS5fZGF5cykscz1OZShlLl9tb250aHMpO3QuaXNWYWxpZCgpJiYoYT1udWxsPT1hfHxhLHMmJld0KHQsT3QodCwiTW9udGgiKStzKmkpLG8mJkl0KHQsIkRhdGUiLE90KHQsIkRhdGUiKStvKmkpLHImJnQuX2Quc2V0VGltZSh0Ll9kLnZhbHVlT2YoKStyKmkpLGEmJm4udXBkYXRlT2Zmc2V0KHQsb3x8cykpfXFlLmZuPVdlLnByb3RvdHlwZSxxZS5pbnZhbGlkPWZ1bmN0aW9uKCl7cmV0dXJuIHFlKE5hTil9O3ZhciBKZT1YZSgxLCJhZGQiKSxRZT1YZSgtMSwic3VidHJhY3QiKTtmdW5jdGlvbiB0aSh0LGUpe3ZhciBpLG4sYT0xMiooZS55ZWFyKCktdC55ZWFyKCkpKyhlLm1vbnRoKCktdC5tb250aCgpKSxyPXQuY2xvbmUoKS5hZGQoYSwibW9udGhzIik7cmV0dXJuIGUtcjwwPyhpPXQuY2xvbmUoKS5hZGQoYS0xLCJtb250aHMiKSxuPShlLXIpLyhyLWkpKTooaT10LmNsb25lKCkuYWRkKGErMSwibW9udGhzIiksbj0oZS1yKS8oaS1yKSksLShhK24pfHwwfWZ1bmN0aW9uIGVpKHQpe3ZhciBlO3JldHVybiB2b2lkIDA9PT10P3RoaXMuX2xvY2FsZS5fYWJicjoobnVsbCE9KGU9Y2UodCkpJiYodGhpcy5fbG9jYWxlPWUpLHRoaXMpfW4uZGVmYXVsdEZvcm1hdD0iWVlZWS1NTS1ERFRISDptbTpzc1oiLG4uZGVmYXVsdEZvcm1hdFV0Yz0iWVlZWS1NTS1ERFRISDptbTpzc1taXSI7dmFyIGlpPVMoIm1vbWVudCgpLmxhbmcoKSBpcyBkZXByZWNhdGVkLiBJbnN0ZWFkLCB1c2UgbW9tZW50KCkubG9jYWxlRGF0YSgpIHRvIGdldCB0aGUgbGFuZ3VhZ2UgY29uZmlndXJhdGlvbi4gVXNlIG1vbWVudCgpLmxvY2FsZSgpIHRvIGNoYW5nZSBsYW5ndWFnZXMuIixmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dD90aGlzLmxvY2FsZURhdGEoKTp0aGlzLmxvY2FsZSh0KX0pO2Z1bmN0aW9uIG5pKCl7cmV0dXJuIHRoaXMuX2xvY2FsZX12YXIgYWk9MWUzLHJpPTYwKmFpLG9pPTYwKnJpLHNpPTM1MDYzMjgqb2k7ZnVuY3Rpb24gbGkodCxlKXtyZXR1cm4odCVlK2UpJWV9ZnVuY3Rpb24gdWkodCxlLGkpe3JldHVybiB0PDEwMCYmdD49MD9uZXcgRGF0ZSh0KzQwMCxlLGkpLXNpOm5ldyBEYXRlKHQsZSxpKS52YWx1ZU9mKCl9ZnVuY3Rpb24gZGkodCxlLGkpe3JldHVybiB0PDEwMCYmdD49MD9EYXRlLlVUQyh0KzQwMCxlLGkpLXNpOkRhdGUuVVRDKHQsZSxpKX1mdW5jdGlvbiBoaSh0LGUpe0IoMCxbdCx0Lmxlbmd0aF0sMCxlKX1mdW5jdGlvbiBjaSh0LGUsaSxuLGEpe3ZhciByO3JldHVybiBudWxsPT10P2p0KHRoaXMsbixhKS55ZWFyOihyPVV0KHQsbixhKSxlPnImJihlPXIpLGZ1bmN0aW9uKHQsZSxpLG4sYSl7dmFyIHI9QnQodCxlLGksbixhKSxvPUh0KHIueWVhciwwLHIuZGF5T2ZZZWFyKTtyZXR1cm4gdGhpcy55ZWFyKG8uZ2V0VVRDRnVsbFllYXIoKSksdGhpcy5tb250aChvLmdldFVUQ01vbnRoKCkpLHRoaXMuZGF0ZShvLmdldFVUQ0RhdGUoKSksdGhpc30uY2FsbCh0aGlzLHQsZSxpLG4sYSkpfUIoMCxbImdnIiwyXSwwLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud2Vla1llYXIoKSUxMDB9KSxCKDAsWyJHRyIsMl0sMCxmdW5jdGlvbigpe3JldHVybiB0aGlzLmlzb1dlZWtZZWFyKCklMTAwfSksaGkoImdnZ2ciLCJ3ZWVrWWVhciIpLGhpKCJnZ2dnZyIsIndlZWtZZWFyIiksaGkoIkdHR0ciLCJpc29XZWVrWWVhciIpLGhpKCJHR0dHRyIsImlzb1dlZWtZZWFyIiksRigid2Vla1llYXIiLCJnZyIpLEYoImlzb1dlZWtZZWFyIiwiR0ciKSxZKCJ3ZWVrWWVhciIsMSksWSgiaXNvV2Vla1llYXIiLDEpLHV0KCJHIixhdCksdXQoImciLGF0KSx1dCgiR0ciLEsscSksdXQoImdnIixLLHEpLHV0KCJHR0dHIixldCwkKSx1dCgiZ2dnZyIsZXQsJCksdXQoIkdHR0dHIixpdCxYKSx1dCgiZ2dnZ2ciLGl0LFgpLGd0KFsiZ2dnZyIsImdnZ2dnIiwiR0dHRyIsIkdHR0dHIl0sZnVuY3Rpb24odCxlLGksbil7ZVtuLnN1YnN0cigwLDIpXT1rKHQpfSksZ3QoWyJnZyIsIkdHIl0sZnVuY3Rpb24odCxlLGksYSl7ZVthXT1uLnBhcnNlVHdvRGlnaXRZZWFyKHQpfSksQigiUSIsMCwiUW8iLCJxdWFydGVyIiksRigicXVhcnRlciIsIlEiKSxZKCJxdWFydGVyIiw3KSx1dCgiUSIsRyksZnQoIlEiLGZ1bmN0aW9uKHQsZSl7ZVt2dF09Myooayh0KS0xKX0pLEIoIkQiLFsiREQiLDJdLCJEbyIsImRhdGUiKSxGKCJkYXRlIiwiRCIpLFkoImRhdGUiLDkpLHV0KCJEIixLKSx1dCgiREQiLEsscSksdXQoIkRvIixmdW5jdGlvbih0LGUpe3JldHVybiB0P2UuX2RheU9mTW9udGhPcmRpbmFsUGFyc2V8fGUuX29yZGluYWxQYXJzZTplLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlTGVuaWVudH0pLGZ0KFsiRCIsIkREIl0seXQpLGZ0KCJEbyIsZnVuY3Rpb24odCxlKXtlW3l0XT1rKHQubWF0Y2goSylbMF0pfSk7dmFyIGZpPVR0KCJEYXRlIiwhMCk7QigiREREIixbIkREREQiLDNdLCJERERvIiwiZGF5T2ZZZWFyIiksRigiZGF5T2ZZZWFyIiwiREREIiksWSgiZGF5T2ZZZWFyIiw0KSx1dCgiREREIix0dCksdXQoIkREREQiLFopLGZ0KFsiREREIiwiRERERCJdLGZ1bmN0aW9uKHQsZSxpKXtpLl9kYXlPZlllYXI9ayh0KX0pLEIoIm0iLFsibW0iLDJdLDAsIm1pbnV0ZSIpLEYoIm1pbnV0ZSIsIm0iKSxZKCJtaW51dGUiLDE0KSx1dCgibSIsSyksdXQoIm1tIixLLHEpLGZ0KFsibSIsIm1tIl0seHQpO3ZhciBnaT1UdCgiTWludXRlcyIsITEpO0IoInMiLFsic3MiLDJdLDAsInNlY29uZCIpLEYoInNlY29uZCIsInMiKSxZKCJzZWNvbmQiLDE1KSx1dCgicyIsSyksdXQoInNzIixLLHEpLGZ0KFsicyIsInNzIl0sX3QpO3ZhciBtaSxwaT1UdCgiU2Vjb25kcyIsITEpO2ZvcihCKCJTIiwwLDAsZnVuY3Rpb24oKXtyZXR1cm5+fih0aGlzLm1pbGxpc2Vjb25kKCkvMTAwKX0pLEIoMCxbIlNTIiwyXSwwLGZ1bmN0aW9uKCl7cmV0dXJufn4odGhpcy5taWxsaXNlY29uZCgpLzEwKX0pLEIoMCxbIlNTUyIsM10sMCwibWlsbGlzZWNvbmQiKSxCKDAsWyJTU1NTIiw0XSwwLGZ1bmN0aW9uKCl7cmV0dXJuIDEwKnRoaXMubWlsbGlzZWNvbmQoKX0pLEIoMCxbIlNTU1NTIiw1XSwwLGZ1bmN0aW9uKCl7cmV0dXJuIDEwMCp0aGlzLm1pbGxpc2Vjb25kKCl9KSxCKDAsWyJTU1NTU1MiLDZdLDAsZnVuY3Rpb24oKXtyZXR1cm4gMWUzKnRoaXMubWlsbGlzZWNvbmQoKX0pLEIoMCxbIlNTU1NTU1MiLDddLDAsZnVuY3Rpb24oKXtyZXR1cm4gMWU0KnRoaXMubWlsbGlzZWNvbmQoKX0pLEIoMCxbIlNTU1NTU1NTIiw4XSwwLGZ1bmN0aW9uKCl7cmV0dXJuIDFlNSp0aGlzLm1pbGxpc2Vjb25kKCl9KSxCKDAsWyJTU1NTU1NTU1MiLDldLDAsZnVuY3Rpb24oKXtyZXR1cm4gMWU2KnRoaXMubWlsbGlzZWNvbmQoKX0pLEYoIm1pbGxpc2Vjb25kIiwibXMiKSxZKCJtaWxsaXNlY29uZCIsMTYpLHV0KCJTIix0dCxHKSx1dCgiU1MiLHR0LHEpLHV0KCJTU1MiLHR0LFopLG1pPSJTU1NTIjttaS5sZW5ndGg8PTk7bWkrPSJTIil1dChtaSxudCk7ZnVuY3Rpb24gdmkodCxlKXtlW2t0XT1rKDFlMyooIjAuIit0KSl9Zm9yKG1pPSJTIjttaS5sZW5ndGg8PTk7bWkrPSJTIilmdChtaSx2aSk7dmFyIHlpPVR0KCJNaWxsaXNlY29uZHMiLCExKTtCKCJ6IiwwLDAsInpvbmVBYmJyIiksQigienoiLDAsMCwiem9uZU5hbWUiKTt2YXIgYmk9Yi5wcm90b3R5cGU7ZnVuY3Rpb24geGkodCl7cmV0dXJuIHR9YmkuYWRkPUplLGJpLmNhbGVuZGFyPWZ1bmN0aW9uKHQsZSl7dmFyIGk9dHx8SWUoKSxhPUVlKGksdGhpcykuc3RhcnRPZigiZGF5Iikscj1uLmNhbGVuZGFyRm9ybWF0KHRoaXMsYSl8fCJzYW1lRWxzZSIsbz1lJiYoVChlW3JdKT9lW3JdLmNhbGwodGhpcyxpKTplW3JdKTtyZXR1cm4gdGhpcy5mb3JtYXQob3x8dGhpcy5sb2NhbGVEYXRhKCkuY2FsZW5kYXIocix0aGlzLEllKGkpKSl9LGJpLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBiKHRoaXMpfSxiaS5kaWZmPWZ1bmN0aW9uKHQsZSxpKXt2YXIgbixhLHI7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBOYU47aWYoIShuPUVlKHQsdGhpcykpLmlzVmFsaWQoKSlyZXR1cm4gTmFOO3N3aXRjaChhPTZlNCoobi51dGNPZmZzZXQoKS10aGlzLnV0Y09mZnNldCgpKSxlPVIoZSkpe2Nhc2UieWVhciI6cj10aSh0aGlzLG4pLzEyO2JyZWFrO2Nhc2UibW9udGgiOnI9dGkodGhpcyxuKTticmVhaztjYXNlInF1YXJ0ZXIiOnI9dGkodGhpcyxuKS8zO2JyZWFrO2Nhc2Uic2Vjb25kIjpyPSh0aGlzLW4pLzFlMzticmVhaztjYXNlIm1pbnV0ZSI6cj0odGhpcy1uKS82ZTQ7YnJlYWs7Y2FzZSJob3VyIjpyPSh0aGlzLW4pLzM2ZTU7YnJlYWs7Y2FzZSJkYXkiOnI9KHRoaXMtbi1hKS84NjRlNTticmVhaztjYXNlIndlZWsiOnI9KHRoaXMtbi1hKS82MDQ4ZTU7YnJlYWs7ZGVmYXVsdDpyPXRoaXMtbn1yZXR1cm4gaT9yOl8ocil9LGJpLmVuZE9mPWZ1bmN0aW9uKHQpe3ZhciBlO2lmKHZvaWQgMD09PSh0PVIodCkpfHwibWlsbGlzZWNvbmQiPT09dHx8IXRoaXMuaXNWYWxpZCgpKXJldHVybiB0aGlzO3ZhciBpPXRoaXMuX2lzVVRDP2RpOnVpO3N3aXRjaCh0KXtjYXNlInllYXIiOmU9aSh0aGlzLnllYXIoKSsxLDAsMSktMTticmVhaztjYXNlInF1YXJ0ZXIiOmU9aSh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCktdGhpcy5tb250aCgpJTMrMywxKS0xO2JyZWFrO2Nhc2UibW9udGgiOmU9aSh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCkrMSwxKS0xO2JyZWFrO2Nhc2Uid2VlayI6ZT1pKHRoaXMueWVhcigpLHRoaXMubW9udGgoKSx0aGlzLmRhdGUoKS10aGlzLndlZWtkYXkoKSs3KS0xO2JyZWFrO2Nhc2UiaXNvV2VlayI6ZT1pKHRoaXMueWVhcigpLHRoaXMubW9udGgoKSx0aGlzLmRhdGUoKS0odGhpcy5pc29XZWVrZGF5KCktMSkrNyktMTticmVhaztjYXNlImRheSI6Y2FzZSJkYXRlIjplPWkodGhpcy55ZWFyKCksdGhpcy5tb250aCgpLHRoaXMuZGF0ZSgpKzEpLTE7YnJlYWs7Y2FzZSJob3VyIjplPXRoaXMuX2QudmFsdWVPZigpLGUrPW9pLWxpKGUrKHRoaXMuX2lzVVRDPzA6dGhpcy51dGNPZmZzZXQoKSpyaSksb2kpLTE7YnJlYWs7Y2FzZSJtaW51dGUiOmU9dGhpcy5fZC52YWx1ZU9mKCksZSs9cmktbGkoZSxyaSktMTticmVhaztjYXNlInNlY29uZCI6ZT10aGlzLl9kLnZhbHVlT2YoKSxlKz1haS1saShlLGFpKS0xfXJldHVybiB0aGlzLl9kLnNldFRpbWUoZSksbi51cGRhdGVPZmZzZXQodGhpcywhMCksdGhpc30sYmkuZm9ybWF0PWZ1bmN0aW9uKHQpe3R8fCh0PXRoaXMuaXNVdGMoKT9uLmRlZmF1bHRGb3JtYXRVdGM6bi5kZWZhdWx0Rm9ybWF0KTt2YQ=="
},
{
"key": "Chart.bundle.min.js?4?4?1",
"type": "binary",
"value": "base64:ciBlPWoodGhpcyx0KTtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkucG9zdGZvcm1hdChlKX0sYmkuZnJvbT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmlzVmFsaWQoKSYmKHgodCkmJnQuaXNWYWxpZCgpfHxJZSh0KS5pc1ZhbGlkKCkpP3FlKHt0bzp0aGlzLGZyb206dH0pLmxvY2FsZSh0aGlzLmxvY2FsZSgpKS5odW1hbml6ZSghZSk6dGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKX0sYmkuZnJvbU5vdz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5mcm9tKEllKCksdCl9LGJpLnRvPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuaXNWYWxpZCgpJiYoeCh0KSYmdC5pc1ZhbGlkKCl8fEllKHQpLmlzVmFsaWQoKSk/cWUoe2Zyb206dGhpcyx0bzp0fSkubG9jYWxlKHRoaXMubG9jYWxlKCkpLmh1bWFuaXplKCFlKTp0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpfSxiaS50b05vdz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50byhJZSgpLHQpfSxiaS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIFQodGhpc1t0PVIodCldKT90aGlzW3RdKCk6dGhpc30sYmkuaW52YWxpZEF0PWZ1bmN0aW9uKCl7cmV0dXJuIGYodGhpcykub3ZlcmZsb3d9LGJpLmlzQWZ0ZXI9ZnVuY3Rpb24odCxlKXt2YXIgaT14KHQpP3Q6SWUodCk7cmV0dXJuISghdGhpcy5pc1ZhbGlkKCl8fCFpLmlzVmFsaWQoKSkmJigibWlsbGlzZWNvbmQiPT09KGU9UihlKXx8Im1pbGxpc2Vjb25kIik/dGhpcy52YWx1ZU9mKCk+aS52YWx1ZU9mKCk6aS52YWx1ZU9mKCk8dGhpcy5jbG9uZSgpLnN0YXJ0T2YoZSkudmFsdWVPZigpKX0sYmkuaXNCZWZvcmU9ZnVuY3Rpb24odCxlKXt2YXIgaT14KHQpP3Q6SWUodCk7cmV0dXJuISghdGhpcy5pc1ZhbGlkKCl8fCFpLmlzVmFsaWQoKSkmJigibWlsbGlzZWNvbmQiPT09KGU9UihlKXx8Im1pbGxpc2Vjb25kIik/dGhpcy52YWx1ZU9mKCk8aS52YWx1ZU9mKCk6dGhpcy5jbG9uZSgpLmVuZE9mKGUpLnZhbHVlT2YoKTxpLnZhbHVlT2YoKSl9LGJpLmlzQmV0d2Vlbj1mdW5jdGlvbih0LGUsaSxuKXt2YXIgYT14KHQpP3Q6SWUodCkscj14KGUpP2U6SWUoZSk7cmV0dXJuISEodGhpcy5pc1ZhbGlkKCkmJmEuaXNWYWxpZCgpJiZyLmlzVmFsaWQoKSkmJigoIigiPT09KG49bnx8IigpIilbMF0/dGhpcy5pc0FmdGVyKGEsaSk6IXRoaXMuaXNCZWZvcmUoYSxpKSkmJigiKSI9PT1uWzFdP3RoaXMuaXNCZWZvcmUocixpKTohdGhpcy5pc0FmdGVyKHIsaSkpKX0sYmkuaXNTYW1lPWZ1bmN0aW9uKHQsZSl7dmFyIGksbj14KHQpP3Q6SWUodCk7cmV0dXJuISghdGhpcy5pc1ZhbGlkKCl8fCFuLmlzVmFsaWQoKSkmJigibWlsbGlzZWNvbmQiPT09KGU9UihlKXx8Im1pbGxpc2Vjb25kIik/dGhpcy52YWx1ZU9mKCk9PT1uLnZhbHVlT2YoKTooaT1uLnZhbHVlT2YoKSx0aGlzLmNsb25lKCkuc3RhcnRPZihlKS52YWx1ZU9mKCk8PWkmJmk8PXRoaXMuY2xvbmUoKS5lbmRPZihlKS52YWx1ZU9mKCkpKX0sYmkuaXNTYW1lT3JBZnRlcj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmlzU2FtZSh0LGUpfHx0aGlzLmlzQWZ0ZXIodCxlKX0sYmkuaXNTYW1lT3JCZWZvcmU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5pc1NhbWUodCxlKXx8dGhpcy5pc0JlZm9yZSh0LGUpfSxiaS5pc1ZhbGlkPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcyl9LGJpLmxhbmc9aWksYmkubG9jYWxlPWVpLGJpLmxvY2FsZURhdGE9bmksYmkubWF4PUZlLGJpLm1pbj1BZSxiaS5wYXJzaW5nRmxhZ3M9ZnVuY3Rpb24oKXtyZXR1cm4gaCh7fSxmKHRoaXMpKX0sYmkuc2V0PWZ1bmN0aW9uKHQsZSl7aWYoIm9iamVjdCI9PXR5cGVvZiB0KWZvcih2YXIgaT1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIGkgaW4gdCllLnB1c2goe3VuaXQ6aSxwcmlvcml0eTpXW2ldfSk7cmV0dXJuIGUuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LnByaW9yaXR5LWUucHJpb3JpdHl9KSxlfSh0PUwodCkpLG49MDtuPGkubGVuZ3RoO24rKyl0aGlzW2lbbl0udW5pdF0odFtpW25dLnVuaXRdKTtlbHNlIGlmKFQodGhpc1t0PVIodCldKSlyZXR1cm4gdGhpc1t0XShlKTtyZXR1cm4gdGhpc30sYmkuc3RhcnRPZj1mdW5jdGlvbih0KXt2YXIgZTtpZih2b2lkIDA9PT0odD1SKHQpKXx8Im1pbGxpc2Vjb25kIj09PXR8fCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gdGhpczt2YXIgaT10aGlzLl9pc1VUQz9kaTp1aTtzd2l0Y2godCl7Y2FzZSJ5ZWFyIjplPWkodGhpcy55ZWFyKCksMCwxKTticmVhaztjYXNlInF1YXJ0ZXIiOmU9aSh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCktdGhpcy5tb250aCgpJTMsMSk7YnJlYWs7Y2FzZSJtb250aCI6ZT1pKHRoaXMueWVhcigpLHRoaXMubW9udGgoKSwxKTticmVhaztjYXNlIndlZWsiOmU9aSh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksdGhpcy5kYXRlKCktdGhpcy53ZWVrZGF5KCkpO2JyZWFrO2Nhc2UiaXNvV2VlayI6ZT1pKHRoaXMueWVhcigpLHRoaXMubW9udGgoKSx0aGlzLmRhdGUoKS0odGhpcy5pc29XZWVrZGF5KCktMSkpO2JyZWFrO2Nhc2UiZGF5IjpjYXNlImRhdGUiOmU9aSh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksdGhpcy5kYXRlKCkpO2JyZWFrO2Nhc2UiaG91ciI6ZT10aGlzLl9kLnZhbHVlT2YoKSxlLT1saShlKyh0aGlzLl9pc1VUQz8wOnRoaXMudXRjT2Zmc2V0KCkqcmkpLG9pKTticmVhaztjYXNlIm1pbnV0ZSI6ZT10aGlzLl9kLnZhbHVlT2YoKSxlLT1saShlLHJpKTticmVhaztjYXNlInNlY29uZCI6ZT10aGlzLl9kLnZhbHVlT2YoKSxlLT1saShlLGFpKX1yZXR1cm4gdGhpcy5fZC5zZXRUaW1lKGUpLG4udXBkYXRlT2Zmc2V0KHRoaXMsITApLHRoaXN9LGJpLnN1YnRyYWN0PVFlLGJpLnRvQXJyYXk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVyblt0LnllYXIoKSx0Lm1vbnRoKCksdC5kYXRlKCksdC5ob3VyKCksdC5taW51dGUoKSx0LnNlY29uZCgpLHQubWlsbGlzZWNvbmQoKV19LGJpLnRvT2JqZWN0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm57eWVhcnM6dC55ZWFyKCksbW9udGhzOnQubW9udGgoKSxkYXRlOnQuZGF0ZSgpLGhvdXJzOnQuaG91cnMoKSxtaW51dGVzOnQubWludXRlcygpLHNlY29uZHM6dC5zZWNvbmRzKCksbWlsbGlzZWNvbmRzOnQubWlsbGlzZWNvbmRzKCl9fSxiaS50b0RhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkpfSxiaS50b0lTT1N0cmluZz1mdW5jdGlvbih0KXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIG51bGw7dmFyIGU9ITAhPT10LGk9ZT90aGlzLmNsb25lKCkudXRjKCk6dGhpcztyZXR1cm4gaS55ZWFyKCk8MHx8aS55ZWFyKCk+OTk5OT9qKGksZT8iWVlZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdIjoiWVlZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTWiIpOlQoRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcpP2U/dGhpcy50b0RhdGUoKS50b0lTT1N0cmluZygpOm5ldyBEYXRlKHRoaXMudmFsdWVPZigpKzYwKnRoaXMudXRjT2Zmc2V0KCkqMWUzKS50b0lTT1N0cmluZygpLnJlcGxhY2UoIloiLGooaSwiWiIpKTpqKGksZT8iWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1taXSI6IllZWVktTU0tRERbVF1ISDptbTpzcy5TU1NaIil9LGJpLmluc3BlY3Q9ZnVuY3Rpb24oKXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIm1vbWVudC5pbnZhbGlkKC8qICIrdGhpcy5faSsiICovKSI7dmFyIHQ9Im1vbWVudCIsZT0iIjt0aGlzLmlzTG9jYWwoKXx8KHQ9MD09PXRoaXMudXRjT2Zmc2V0KCk/Im1vbWVudC51dGMiOiJtb21lbnQucGFyc2Vab25lIixlPSJaIik7dmFyIGk9IlsiK3QrJygiXScsbj0wPD10aGlzLnllYXIoKSYmdGhpcy55ZWFyKCk8PTk5OTk/IllZWVkiOiJZWVlZWVkiLGE9ZSsnWyIpXSc7cmV0dXJuIHRoaXMuZm9ybWF0KGkrbisiLU1NLUREW1RdSEg6bW06c3MuU1NTIithKX0sYmkudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNWYWxpZCgpP3RoaXMudG9JU09TdHJpbmcoKTpudWxsfSxiaS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkubG9jYWxlKCJlbiIpLmZvcm1hdCgiZGRkIE1NTSBERCBZWVlZIEhIOm1tOnNzIFtHTVRdWloiKX0sYmkudW5peD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmZsb29yKHRoaXMudmFsdWVPZigpLzFlMyl9LGJpLnZhbHVlT2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZC52YWx1ZU9mKCktNmU0Kih0aGlzLl9vZmZzZXR8fDApfSxiaS5jcmVhdGlvbkRhdGE9ZnVuY3Rpb24oKXtyZXR1cm57aW5wdXQ6dGhpcy5faSxmb3JtYXQ6dGhpcy5fZixsb2NhbGU6dGhpcy5fbG9jYWxlLGlzVVRDOnRoaXMuX2lzVVRDLHN0cmljdDp0aGlzLl9zdHJpY3R9fSxiaS55ZWFyPVB0LGJpLmlzTGVhcFllYXI9ZnVuY3Rpb24oKXtyZXR1cm4gRHQodGhpcy55ZWFyKCkpfSxiaS53ZWVrWWVhcj1mdW5jdGlvbih0KXtyZXR1cm4gY2kuY2FsbCh0aGlzLHQsdGhpcy53ZWVrKCksdGhpcy53ZWVrZGF5KCksdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93LHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRveSl9LGJpLmlzb1dlZWtZZWFyPWZ1bmN0aW9uKHQpe3JldHVybiBjaS5jYWxsKHRoaXMsdCx0aGlzLmlzb1dlZWsoKSx0aGlzLmlzb1dlZWtkYXkoKSwxLDQpfSxiaS5xdWFydGVyPWJpLnF1YXJ0ZXJzPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P01hdGguY2VpbCgodGhpcy5tb250aCgpKzEpLzMpOnRoaXMubW9udGgoMyoodC0xKSt0aGlzLm1vbnRoKCklMyl9LGJpLm1vbnRoPVl0LGJpLmRheXNJbk1vbnRoPWZ1bmN0aW9uKCl7cmV0dXJuIEF0KHRoaXMueWVhcigpLHRoaXMubW9udGgoKSl9LGJpLndlZWs9Ymkud2Vla3M9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sb2NhbGVEYXRhKCkud2Vlayh0aGlzKTtyZXR1cm4gbnVsbD09dD9lOnRoaXMuYWRkKDcqKHQtZSksImQiKX0sYmkuaXNvV2Vlaz1iaS5pc29XZWVrcz1mdW5jdGlvbih0KXt2YXIgZT1qdCh0aGlzLDEsNCkud2VlaztyZXR1cm4gbnVsbD09dD9lOnRoaXMuYWRkKDcqKHQtZSksImQiKX0sYmkud2Vla3NJblllYXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxvY2FsZURhdGEoKS5fd2VlaztyZXR1cm4gVXQodGhpcy55ZWFyKCksdC5kb3csdC5kb3kpfSxiaS5pc29XZWVrc0luWWVhcj1mdW5jdGlvbigpe3JldHVybiBVdCh0aGlzLnllYXIoKSwxLDQpfSxiaS5kYXRlPWZpLGJpLmRheT1iaS5kYXlzPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbnVsbCE9dD90aGlzOk5hTjt2YXIgZT10aGlzLl9pc1VUQz90aGlzLl9kLmdldFVUQ0RheSgpOnRoaXMuX2QuZ2V0RGF5KCk7cmV0dXJuIG51bGwhPXQ/KHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIHQ/dDppc05hTih0KT8ibnVtYmVyIj09dHlwZW9mKHQ9ZS53ZWVrZGF5c1BhcnNlKHQpKT90Om51bGw6cGFyc2VJbnQodCwxMCl9KHQsdGhpcy5sb2NhbGVEYXRhKCkpLHRoaXMuYWRkKHQtZSwiZCIpKTplfSxiaS53ZWVrZGF5PWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbnVsbCE9dD90aGlzOk5hTjt2YXIgZT0odGhpcy5kYXkoKSs3LXRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdyklNztyZXR1cm4gbnVsbD09dD9lOnRoaXMuYWRkKHQtZSwiZCIpfSxiaS5pc29XZWVrZGF5PWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbnVsbCE9dD90aGlzOk5hTjtpZihudWxsIT10KXt2YXIgZT1mdW5jdGlvbih0LGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD9lLndlZWtkYXlzUGFyc2UodCklN3x8Nzppc05hTih0KT9udWxsOnR9KHQsdGhpcy5sb2NhbGVEYXRhKCkpO3JldHVybiB0aGlzLmRheSh0aGlzLmRheSgpJTc/ZTplLTcpfXJldHVybiB0aGlzLmRheSgpfHw3fSxiaS5kYXlPZlllYXI9ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5yb3VuZCgodGhpcy5jbG9uZSgpLnN0YXJ0T2YoImRheSIpLXRoaXMuY2xvbmUoKS5zdGFydE9mKCJ5ZWFyIikpLzg2NGU1KSsxO3JldHVybiBudWxsPT10P2U6dGhpcy5hZGQodC1lLCJkIil9LGJpLmhvdXI9YmkuaG91cnM9YWUsYmkubWludXRlPWJpLm1pbnV0ZXM9Z2ksYmkuc2Vjb25kPWJpLnNlY29uZHM9cGksYmkubWlsbGlzZWNvbmQ9YmkubWlsbGlzZWNvbmRzPXlpLGJpLnV0Y09mZnNldD1mdW5jdGlvbih0LGUsaSl7dmFyIGEscj10aGlzLl9vZmZzZXR8fDA7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBudWxsIT10P3RoaXM6TmFOO2lmKG51bGwhPXQpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl7aWYobnVsbD09PSh0PUhlKG90LHQpKSlyZXR1cm4gdGhpc31lbHNlIE1hdGguYWJzKHQpPDE2JiYhaSYmKHQqPTYwKTtyZXR1cm4hdGhpcy5faXNVVEMmJmUmJihhPUJlKHRoaXMpKSx0aGlzLl9vZmZzZXQ9dCx0aGlzLl9pc1VUQz0hMCxudWxsIT1hJiZ0aGlzLmFkZChhLCJtIiksciE9PXQmJighZXx8dGhpcy5fY2hhbmdlSW5Qcm9ncmVzcz9LZSh0aGlzLHFlKHQtciwibSIpLDEsITEpOnRoaXMuX2NoYW5nZUluUHJvZ3Jlc3N8fCh0aGlzLl9jaGFuZ2VJblByb2dyZXNzPSEwLG4udXBkYXRlT2Zmc2V0KHRoaXMsITApLHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3M9bnVsbCkpLHRoaXN9cmV0dXJuIHRoaXMuX2lzVVRDP3I6QmUodGhpcyl9LGJpLnV0Yz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy51dGNPZmZzZXQoMCx0KX0sYmkubG9jYWw9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2lzVVRDJiYodGhpcy51dGNPZmZzZXQoMCx0KSx0aGlzLl9pc1VUQz0hMSx0JiZ0aGlzLnN1YnRyYWN0KEJlKHRoaXMpLCJtIikpLHRoaXN9LGJpLnBhcnNlWm9uZT1mdW5jdGlvbigpe2lmKG51bGwhPXRoaXMuX3R6bSl0aGlzLnV0Y09mZnNldCh0aGlzLl90em0sITEsITApO2Vsc2UgaWYoInN0cmluZyI9PXR5cGVvZiB0aGlzLl9pKXt2YXIgdD1IZShydCx0aGlzLl9pKTtudWxsIT10P3RoaXMudXRjT2Zmc2V0KHQpOnRoaXMudXRjT2Zmc2V0KDAsITApfXJldHVybiB0aGlzfSxiaS5oYXNBbGlnbmVkSG91ck9mZnNldD1mdW5jdGlvbih0KXtyZXR1cm4hIXRoaXMuaXNWYWxpZCgpJiYodD10P0llKHQpLnV0Y09mZnNldCgpOjAsKHRoaXMudXRjT2Zmc2V0KCktdCklNjA9PTApfSxiaS5pc0RTVD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnV0Y09mZnNldCgpPnRoaXMuY2xvbmUoKS5tb250aCgwKS51dGNPZmZzZXQoKXx8dGhpcy51dGNPZmZzZXQoKT50aGlzLmNsb25lKCkubW9udGgoNSkudXRjT2Zmc2V0KCl9LGJpLmlzTG9jYWw9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuaXNWYWxpZCgpJiYhdGhpcy5faXNVVEN9LGJpLmlzVXRjT2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmlzVmFsaWQoKSYmdGhpcy5faXNVVEN9LGJpLmlzVXRjPWplLGJpLmlzVVRDPWplLGJpLnpvbmVBYmJyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzVVRDPyJVVEMiOiIifSxiaS56b25lTmFtZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1VUQz8iQ29vcmRpbmF0ZWQgVW5pdmVyc2FsIFRpbWUiOiIifSxiaS5kYXRlcz1TKCJkYXRlcyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgZGF0ZSBpbnN0ZWFkLiIsZmkpLGJpLm1vbnRocz1TKCJtb250aHMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbnRoIGluc3RlYWQiLFl0KSxiaS55ZWFycz1TKCJ5ZWFycyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgeWVhciBpbnN0ZWFkIixQdCksYmkuem9uZT1TKCJtb21lbnQoKS56b25lIGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQoKS51dGNPZmZzZXQgaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy96b25lLyIsZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbCE9dD8oInN0cmluZyIhPXR5cGVvZiB0JiYodD0tdCksdGhpcy51dGNPZmZzZXQodCxlKSx0aGlzKTotdGhpcy51dGNPZmZzZXQoKX0pLGJpLmlzRFNUU2hpZnRlZD1TKCJpc0RTVFNoaWZ0ZWQgaXMgZGVwcmVjYXRlZC4gU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvZHN0LXNoaWZ0ZWQvIGZvciBtb3JlIGluZm9ybWF0aW9uIixmdW5jdGlvbigpe2lmKCFvKHRoaXMuX2lzRFNUU2hpZnRlZCkpcmV0dXJuIHRoaXMuX2lzRFNUU2hpZnRlZDt2YXIgdD17fTtpZih2KHQsdGhpcyksKHQ9VGUodCkpLl9hKXt2YXIgZT10Ll9pc1VUQz9jKHQuX2EpOkllKHQuX2EpO3RoaXMuX2lzRFNUU2hpZnRlZD10aGlzLmlzVmFsaWQoKSYmdyh0Ll9hLGUudG9BcnJheSgpKT4wfWVsc2UgdGhpcy5faXNEU1RTaGlmdGVkPSExO3JldHVybiB0aGlzLl9pc0RTVFNoaWZ0ZWR9KTt2YXIgX2k9SS5wcm90b3R5cGU7ZnVuY3Rpb24ga2kodCxlLGksbil7dmFyIGE9Y2UoKSxyPWMoKS5zZXQobixlKTtyZXR1cm4gYVtpXShyLHQpfWZ1bmN0aW9uIHdpKHQsZSxpKXtpZihzKHQpJiYoZT10LHQ9dm9pZCAwKSx0PXR8fCIiLG51bGwhPWUpcmV0dXJuIGtpKHQsZSxpLCJtb250aCIpO3ZhciBuLGE9W107Zm9yKG49MDtuPDEyO24rKylhW25dPWtpKHQsbixpLCJtb250aCIpO3JldHVybiBhfWZ1bmN0aW9uIE1pKHQsZSxpLG4peyJib29sZWFuIj09dHlwZW9mIHQ/KHMoZSkmJihpPWUsZT12b2lkIDApLGU9ZXx8IiIpOihpPWU9dCx0PSExLHMoZSkmJihpPWUsZT12b2lkIDApLGU9ZXx8IiIpO3ZhciBhLHI9Y2UoKSxvPXQ/ci5fd2Vlay5kb3c6MDtpZihudWxsIT1pKXJldHVybiBraShlLChpK28pJTcsbiwiZGF5Iik7dmFyIGw9W107Zm9yKGE9MDthPDc7YSsrKWxbYV09a2koZSwoYStvKSU3LG4sImRheSIpO3JldHVybiBsfV9pLmNhbGVuZGFyPWZ1bmN0aW9uKHQsZSxpKXt2YXIgbj10aGlzLl9jYWxlbmRhclt0XXx8dGhpcy5fY2FsZW5kYXIuc2FtZUVsc2U7cmV0dXJuIFQobik/bi5jYWxsKGUsaSk6bn0sX2kubG9uZ0RhdGVGb3JtYXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbG9uZ0RhdGVGb3JtYXRbdF0saT10aGlzLl9sb25nRGF0ZUZvcm1hdFt0LnRvVXBwZXJDYXNlKCldO3JldHVybiBlfHwhaT9lOih0aGlzLl9sb25nRGF0ZUZvcm1hdFt0XT1pLnJlcGxhY2UoL01NTU18TU18RER8ZGRkZC9nLGZ1bmN0aW9uKHQpe3JldHVybiB0LnNsaWNlKDEpfSksdGhpcy5fbG9uZ0RhdGVGb3JtYXRbdF0pfSxfaS5pbnZhbGlkRGF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pbnZhbGlkRGF0ZX0sX2kub3JkaW5hbD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb3JkaW5hbC5yZXBsYWNlKCIlZCIsdCl9LF9pLnByZXBhcnNlPXhpLF9pLnBvc3Rmb3JtYXQ9eGksX2kucmVsYXRpdmVUaW1lPWZ1bmN0aW9uKHQsZSxpLG4pe3ZhciBhPXRoaXMuX3JlbGF0aXZlVGltZVtpXTtyZXR1cm4gVChhKT9hKHQsZSxpLG4pOmEucmVwbGFjZSgvJWQvaSx0KX0sX2kucGFzdEZ1dHVyZT1mdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMuX3JlbGF0aXZlVGltZVt0PjA/ImZ1dHVyZSI6InBhc3QiXTtyZXR1cm4gVChpKT9pKGUpOmkucmVwbGFjZSgvJXMvaSxlKX0sX2kuc2V0PWZ1bmN0aW9uKHQpe3ZhciBlLGk7Zm9yKGkgaW4gdClUKGU9dFtpXSk/dGhpc1tpXT1lOnRoaXNbIl8iK2ldPWU7dGhpcy5fY29uZmlnPXQsdGhpcy5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnQ9bmV3IFJlZ0V4cCgodGhpcy5fZGF5T2ZNb250aE9yZGluYWxQYXJzZS5zb3VyY2V8fHRoaXMuX29yZGluYWxQYXJzZS5zb3VyY2UpKyJ8IisvXGR7MSwyfS8uc291cmNlKX0sX2kubW9udGhzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ/YSh0aGlzLl9tb250aHMpP3RoaXMuX21vbnRoc1t0Lm1vbnRoKCldOnRoaXMuX21vbnRoc1sodGhpcy5fbW9udGhzLmlzRm9ybWF0fHxGdCkudGVzdChlKT8iZm9ybWF0Ijoic3RhbmRhbG9uZSJdW3QubW9udGgoKV06YSh0aGlzLl9tb250aHMpP3RoaXMuX21vbnRoczp0aGlzLl9tb250aHMuc3RhbmRhbG9uZX0sX2kubW9udGhzU2hvcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD9hKHRoaXMuX21vbnRoc1Nob3J0KT90aGlzLl9tb250aHNTaG9ydFt0Lm1vbnRoKCldOnRoaXMuX21vbnRoc1Nob3J0W0Z0LnRlc3QoZSk/ImZvcm1hdCI6InN0YW5kYWxvbmUiXVt0Lm1vbnRoKCldOmEodGhpcy5fbW9udGhzU2hvcnQpP3RoaXMuX21vbnRoc1Nob3J0OnRoaXMuX21vbnRoc1Nob3J0LnN0YW5kYWxvbmV9LF9pLm1vbnRoc1BhcnNlPWZ1bmN0aW9uKHQsZSxpKXt2YXIgbixhLHI7aWYodGhpcy5fbW9udGhzUGFyc2VFeGFjdClyZXR1cm4gZnVuY3Rpb24odCxlLGkpe3ZhciBuLGEscixvPXQudG9Mb2NhbGVMb3dlckNhc2UoKTtpZighdGhpcy5fbW9udGhzUGFyc2UpZm9yKHRoaXMuX21vbnRoc1BhcnNlPVtdLHRoaXMuX2xvbmdNb250aHNQYXJzZT1bXSx0aGlzLl9zaG9ydE1vbnRoc1BhcnNlPVtdLG49MDtuPDEyOysrbilyPWMoWzJlMyxuXSksdGhpcy5fc2hvcnRNb250aHNQYXJzZVtuXT10aGlzLm1vbnRoc1Nob3J0KHIsIiIpLnRvTG9jYWxlTG93ZXJDYXNlKCksdGhpcy5fbG9uZ01vbnRoc1BhcnNlW25dPXRoaXMubW9udGhzKHIsIiIpLnRvTG9jYWxlTG93ZXJDYXNlKCk7cmV0dXJuIGk/Ik1NTSI9PT1lPy0xIT09KGE9Q3QuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLG8pKT9hOm51bGw6LTEhPT0oYT1DdC5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSxvKSk/YTpudWxsOiJNTU0iPT09ZT8tMSE9PShhPUN0LmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSxvKSk/YTotMSE9PShhPUN0LmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLG8pKT9hOm51bGw6LTEhPT0oYT1DdC5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSxvKSk/YTotMSE9PShhPUN0LmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSxvKSk/YTpudWxsfS5jYWxsKHRoaXMsdCxlLGkpO2Zvcih0aGlzLl9tb250aHNQYXJzZXx8KHRoaXMuX21vbnRoc1BhcnNlPVtdLHRoaXMuX2xvbmdNb250aHNQYXJzZT1bXSx0aGlzLl9zaG9ydE1vbnRoc1BhcnNlPVtdKSxuPTA7bjwxMjtuKyspe2lmKGE9YyhbMmUzLG5dKSxpJiYhdGhpcy5fbG9uZ01vbnRoc1BhcnNlW25dJiYodGhpcy5fbG9uZ01vbnRoc1BhcnNlW25dPW5ldyBSZWdFeHAoIl4iK3RoaXMubW9udGhzKGEsIiIpLnJlcGxhY2UoIi4iLCIiKSsiJCIsImkiKSx0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW25dPW5ldyBSZWdFeHAoIl4iK3RoaXMubW9udGhzU2hvcnQoYSwiIikucmVwbGFjZSgiLiIsIiIpKyIkIiwiaSIpKSxpfHx0aGlzLl9tb250aHNQYXJzZVtuXXx8KHI9Il4iK3RoaXMubW9udGhzKGEsIiIpKyJ8XiIrdGhpcy5tb250aHNTaG9ydChhLCIiKSx0aGlzLl9tb250aHNQYXJzZVtuXT1uZXcgUmVnRXhwKHIucmVwbGFjZSgiLiIsIiIpLCJpIikpLGkmJiJNTU1NIj09PWUmJnRoaXMuX2xvbmdNb250aHNQYXJzZVtuXS50ZXN0KHQpKXJldHVybiBuO2lmKGkmJiJNTU0iPT09ZSYmdGhpcy5fc2hvcnRNb250aHNQYXJzZVtuXS50ZXN0KHQpKXJldHU="
}
]
},
{
"type": 12,
"id": "HcNcaqV8RSYcUjd28cueqbFof9jYDNxuMYQPMHZbNWGw",
"fee": 14200000,
"feeAssetId": null,
"timestamp": 1577467380967,
"version": 1,
"sender": "3NAxHUEaM6RAG7rVDPL9L6DFZWkrqFtY98t",
"senderPublicKey": "4Jwx6yN9LNc5XbrqwrSdp2hok5niFKzGzfZwSxFH6FsV",
"proofs": [
"3jFFtECPELgtv3FejtX5Dg6dhij6DY3Gufh7fBWQSASCs1TGL1kJ1rLYKXMhHGZuNENLfr2s6h6qTYRRtRe38nbd"
],
"data": [
{
"key": "jquery.dataTables.js?4?0?0",
"type": "binary",
"value": "base64:LyohIERhdGFUYWJsZXMgMS4xMC4xOQogKiDCqTIwMDgtMjAxOCBTcHJ5TWVkaWEgTHRkIC0gZGF0YXRhYmxlcy5uZXQvbGljZW5zZQogKi8KCi8qKgogKiBAc3VtbWFyeSAgICAgRGF0YVRhYmxlcwogKiBAZGVzY3JpcHRpb24gUGFnaW5hdGUsIHNlYXJjaCBhbmQgb3JkZXIgSFRNTCB0YWJsZXMKICogQHZlcnNpb24gICAgIDEuMTAuMTkKICogQGZpbGUgICAgICAgIGpxdWVyeS5kYXRhVGFibGVzLmpzCiAqIEBhdXRob3IgICAgICBTcHJ5TWVkaWEgTHRkCiAqIEBjb250YWN0ICAgICB3d3cuZGF0YXRhYmxlcy5uZXQKICogQGNvcHlyaWdodCAgIENvcHlyaWdodCAyMDA4LTIwMTggU3ByeU1lZGlhIEx0ZC4KICoKICogVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBhdmFpbGFibGUgdW5kZXIgdGhlIGZvbGxvd2luZyBsaWNlbnNlOgogKiAgIE1JVCBsaWNlbnNlIC0gaHR0cDovL2RhdGF0YWJsZXMubmV0L2xpY2Vuc2UKICoKICogVGhpcyBzb3VyY2UgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKICogb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgbGljZW5zZSBmaWxlcyBmb3IgZGV0YWlscy4KICoKICogRm9yIGRldGFpbHMgcGxlYXNlIHJlZmVyIHRvOiBodHRwOi8vd3d3LmRhdGF0YWJsZXMubmV0CiAqLwoKLypqc2xpbnQgZXZpbDogdHJ1ZSwgdW5kZWY6IHRydWUsIGJyb3dzZXI6IHRydWUgKi8KLypnbG9iYWxzICQscmVxdWlyZSxqUXVlcnksZGVmaW5lLF9zZWxlY3Rvcl9ydW4sX3NlbGVjdG9yX29wdHMsX3NlbGVjdG9yX2ZpcnN0LF9zZWxlY3Rvcl9yb3dfaW5kZXhlcyxfZXh0LF9BcGksX2FwaV9yZWdpc3RlcixfYXBpX3JlZ2lzdGVyUGx1cmFsLF9yZV9uZXdfbGluZXMsX3JlX2h0bWwsX3JlX2Zvcm1hdHRlZF9udW1lcmljLF9yZV9lc2NhcGVfcmVnZXgsX2VtcHR5LF9pbnRWYWwsX251bVRvRGVjaW1hbCxfaXNOdW1iZXIsX2lzSHRtbCxfaHRtbE51bWVyaWMsX3BsdWNrLF9wbHVja19vcmRlcixfcmFuZ2UsX3N0cmlwSHRtbCxfdW5pcXVlLF9mbkJ1aWxkQWpheCxfZm5BamF4VXBkYXRlLF9mbkFqYXhQYXJhbWV0ZXJzLF9mbkFqYXhVcGRhdGVEcmF3LF9mbkFqYXhEYXRhU3JjLF9mbkFkZENvbHVtbixfZm5Db2x1bW5PcHRpb25zLF9mbkFkanVzdENvbHVtblNpemluZyxfZm5WaXNpYmxlVG9Db2x1bW5JbmRleCxfZm5Db2x1bW5JbmRleFRvVmlzaWJsZSxfZm5WaXNibGVDb2x1bW5zLF9mbkdldENvbHVtbnMsX2ZuQ29sdW1uVHlwZXMsX2ZuQXBwbHlDb2x1bW5EZWZzLF9mbkh1bmdhcmlhbk1hcCxfZm5DYW1lbFRvSHVuZ2FyaWFuLF9mbkxhbmd1YWdlQ29tcGF0LF9mbkJyb3dzZXJEZXRlY3QsX2ZuQWRkRGF0YSxfZm5BZGRUcixfZm5Ob2RlVG9EYXRhSW5kZXgsX2ZuTm9kZVRvQ29sdW1uSW5kZXgsX2ZuR2V0Q2VsbERhdGEsX2ZuU2V0Q2VsbERhdGEsX2ZuU3BsaXRPYmpOb3RhdGlvbixfZm5HZXRPYmplY3REYXRhRm4sX2ZuU2V0T2JqZWN0RGF0YUZuLF9mbkdldERhdGFNYXN0ZXIsX2ZuQ2xlYXJUYWJsZSxfZm5EZWxldGVJbmRleCxfZm5JbnZhbGlkYXRlLF9mbkdldFJvd0VsZW1lbnRzLF9mbkNyZWF0ZVRyLF9mbkJ1aWxkSGVhZCxfZm5EcmF3SGVhZCxfZm5EcmF3LF9mblJlRHJhdyxfZm5BZGRPcHRpb25zSHRtbCxfZm5EZXRlY3RIZWFkZXIsX2ZuR2V0VW5pcXVlVGhzLF9mbkZlYXR1cmVIdG1sRmlsdGVyLF9mbkZpbHRlckNvbXBsZXRlLF9mbkZpbHRlckN1c3RvbSxfZm5GaWx0ZXJDb2x1bW4sX2ZuRmlsdGVyLF9mbkZpbHRlckNyZWF0ZVNlYXJjaCxfZm5Fc2NhcGVSZWdleCxfZm5GaWx0ZXJEYXRhLF9mbkZlYXR1cmVIdG1sSW5mbyxfZm5VcGRhdGVJbmZvLF9mbkluZm9NYWNyb3MsX2ZuSW5pdGlhbGlzZSxfZm5Jbml0Q29tcGxldGUsX2ZuTGVuZ3RoQ2hhbmdlLF9mbkZlYXR1cmVIdG1sTGVuZ3RoLF9mbkZlYXR1cmVIdG1sUGFnaW5hdGUsX2ZuUGFnZUNoYW5nZSxfZm5GZWF0dXJlSHRtbFByb2Nlc3NpbmcsX2ZuUHJvY2Vzc2luZ0Rpc3BsYXksX2ZuRmVhdHVyZUh0bWxUYWJsZSxfZm5TY3JvbGxEcmF3LF9mbkFwcGx5VG9DaGlsZHJlbixfZm5DYWxjdWxhdGVDb2x1bW5XaWR0aHMsX2ZuVGhyb3R0bGUsX2ZuQ29udmVydFRvV2lkdGgsX2ZuR2V0V2lkZXN0Tm9kZSxfZm5HZXRNYXhMZW5TdHJpbmcsX2ZuU3RyaW5nVG9Dc3MsX2ZuU29ydEZsYXR0ZW4sX2ZuU29ydCxfZm5Tb3J0QXJpYSxfZm5Tb3J0TGlzdGVuZXIsX2ZuU29ydEF0dGFjaExpc3RlbmVyLF9mblNvcnRpbmdDbGFzc2VzLF9mblNvcnREYXRhLF9mblNhdmVTdGF0ZSxfZm5Mb2FkU3RhdGUsX2ZuU2V0dGluZ3NGcm9tTm9kZSxfZm5Mb2csX2ZuTWFwLF9mbkJpbmRBY3Rpb24sX2ZuQ2FsbGJhY2tSZWcsX2ZuQ2FsbGJhY2tGaXJlLF9mbkxlbmd0aE92ZXJmbG93LF9mblJlbmRlcmVyLF9mbkRhdGFTb3VyY2UsX2ZuUm93QXR0cmlidXRlcyovCgooZnVuY3Rpb24oIGZhY3RvcnkgKSB7CgkidXNlIHN0cmljdCI7CgoJaWYgKCB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgKSB7CgkJLy8gQU1ECgkJZGVmaW5lKCBbJ2pxdWVyeSddLCBmdW5jdGlvbiAoICQgKSB7CgkJCXJldHVybiBmYWN0b3J5KCAkLCB3aW5kb3csIGRvY3VtZW50ICk7CgkJfSApOwoJfQoJZWxzZSBpZiAoIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyApIHsKCQkvLyBDb21tb25KUwoJCW1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHJvb3QsICQpIHsKCQkJaWYgKCAhIHJvb3QgKSB7CgkJCQkvLyBDb21tb25KUyBlbnZpcm9ubWVudHMgd2l0aG91dCBhIHdpbmRvdyBnbG9iYWwgbXVzdCBwYXNzIGEKCQkJCS8vIHJvb3QuIFRoaXMgd2lsbCBnaXZlIGFuIGVycm9yIG90aGVyd2lzZQoJCQkJcm9vdCA9IHdpbmRvdzsKCQkJfQoKCQkJaWYgKCAhICQgKSB7CgkJCQkkID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyAvLyBqUXVlcnkncyBmYWN0b3J5IGNoZWNrcyBmb3IgYSBnbG9iYWwgd2luZG93CgkJCQkJcmVxdWlyZSgnanF1ZXJ5JykgOgoJCQkJCXJlcXVpcmUoJ2pxdWVyeScpKCByb290ICk7CgkJCX0KCgkJCXJldHVybiBmYWN0b3J5KCAkLCByb290LCByb290LmRvY3VtZW50ICk7CgkJfTsKCX0KCWVsc2UgewoJCS8vIEJyb3dzZXIKCQlmYWN0b3J5KCBqUXVlcnksIHdpbmRvdywgZG9jdW1lbnQgKTsKCX0KfQooZnVuY3Rpb24oICQsIHdpbmRvdywgZG9jdW1lbnQsIHVuZGVmaW5lZCApIHsKCSJ1c2Ugc3RyaWN0IjsKCgkvKioKCSAqIERhdGFUYWJsZXMgaXMgYSBwbHVnLWluIGZvciB0aGUgalF1ZXJ5IEphdmFzY3JpcHQgbGlicmFyeS4gSXQgaXMgYSBoaWdobHkKCSAqIGZsZXhpYmxlIHRvb2wsIGJhc2VkIHVwb24gdGhlIGZvdW5kYXRpb25zIG9mIHByb2dyZXNzaXZlIGVuaGFuY2VtZW50LAoJICogd2hpY2ggd2lsbCBhZGQgYWR2YW5jZWQgaW50ZXJhY3Rpb24gY29udHJvbHMgdG8gYW55IEhUTUwgdGFibGUuIEZvciBhCgkgKiBmdWxsIGxpc3Qgb2YgZmVhdHVyZXMgcGxlYXNlIHJlZmVyIHRvCgkgKiBbRGF0YVRhYmxlcy5uZXRdKGhyZWY9Imh0dHA6Ly9kYXRhdGFibGVzLm5ldCkuCgkgKgoJICogTm90ZSB0aGF0IHRoZSBgRGF0YVRhYmxlYCBvYmplY3QgaXMgbm90IGEgZ2xvYmFsIHZhcmlhYmxlIGJ1dCBpcyBhbGlhc2VkCgkgKiB0byBgalF1ZXJ5LmZuLkRhdGFUYWJsZWAgYW5kIGBqUXVlcnkuZm4uZGF0YVRhYmxlYCB0aHJvdWdoIHdoaWNoIGl0IG1heQoJICogYmUgIGFjY2Vzc2VkLgoJICoKCSAqICBAY2xhc3MKCSAqICBAcGFyYW0ge29iamVjdH0gW2luaXQ9e31dIENvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciBEYXRhVGFibGVzLiBPcHRpb25zCgkgKiAgICBhcmUgZGVmaW5lZCBieSB7QGxpbmsgRGF0YVRhYmxlLmRlZmF1bHRzfQoJICogIEByZXF1aXJlcyBqUXVlcnkgMS43KwoJICoKCSAqICBAZXhhbXBsZQoJICogICAgLy8gQmFzaWMgaW5pdGlhbGlzYXRpb24KCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbiB7CgkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCk7CgkgKiAgICB9ICk7CgkgKgoJICogIEBleGFtcGxlCgkgKiAgICAvLyBJbml0aWFsaXNhdGlvbiB3aXRoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyAtIGluIHRoaXMgY2FzZSwgZGlzYWJsZQoJICogICAgLy8gcGFnaW5hdGlvbiBhbmQgc29ydGluZy4KCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbiB7CgkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkgKiAgICAgICAgInBhZ2luYXRlIjogZmFsc2UsCgkgKiAgICAgICAgInNvcnQiOiBmYWxzZQoJICogICAgICB9ICk7CgkgKiAgICB9ICk7CgkgKi8KCXZhciBEYXRhVGFibGUgPSBmdW5jdGlvbiAoIG9wdGlvbnMgKQoJewoJCS8qKgoJCSAqIFBlcmZvcm0gYSBqUXVlcnkgc2VsZWN0b3IgYWN0aW9uIG9uIHRoZSB0YWJsZSdzIFRSIGVsZW1lbnRzIChmcm9tIHRoZSB0Ym9keSkgYW5kCgkJICogcmV0dXJuIHRoZSByZXN1bHRpbmcgalF1ZXJ5IG9iamVjdC4KCQkgKiAgQHBhcmFtIHtzdHJpbmd8bm9kZXxqUXVlcnl9IHNTZWxlY3RvciBqUXVlcnkgc2VsZWN0b3Igb3Igbm9kZSBjb2xsZWN0aW9uIHRvIGFjdCBvbgoJCSAqICBAcGFyYW0ge29iamVjdH0gW29PcHRzXSBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBtb2RpZnlpbmcgdGhlIHJvd3MgdG8gYmUgaW5jbHVkZWQKCQkgKiAgQHBhcmFtIHtzdHJpbmd9IFtvT3B0cy5maWx0ZXI9bm9uZV0gU2VsZWN0IFRSIGVsZW1lbnRzIHRoYXQgbWVldCB0aGUgY3VycmVudCBmaWx0ZXIKCQkgKiAgICBjcml0ZXJpb24gKCJhcHBsaWVkIikgb3IgYWxsIFRSIGVsZW1lbnRzIChpLmUuIG5vIGZpbHRlcikuCgkJICogIEBwYXJhbSB7c3RyaW5nfSBbb09wdHMub3JkZXI9Y3VycmVudF0gT3JkZXIgb2YgdGhlIFRSIGVsZW1lbnRzIGluIHRoZSBwcm9jZXNzZWQgYXJyYXkuCgkJICogICAgQ2FuIGJlIGVpdGhlciAnY3VycmVudCcsIHdoZXJlYnkgdGhlIGN1cnJlbnQgc29ydGluZyBvZiB0aGUgdGFibGUgaXMgdXNlZCwgb3IKCQkgKiAgICAnb3JpZ2luYWwnIHdoZXJlYnkgdGhlIG9yaWdpbmFsIG9yZGVyIHRoZSBkYXRhIHdhcyByZWFkIGludG8gdGhlIHRhYmxlIGlzIHVzZWQuCgkJICogIEBwYXJhbSB7c3RyaW5nfSBbb09wdHMucGFnZT1hbGxdIExpbWl0IHRoZSBzZWxlY3Rpb24gdG8gdGhlIGN1cnJlbnRseSBkaXNwbGF5ZWQgcGFnZQoJCSAqICAgICgiY3VycmVudCIpIG9yIG5vdCAoImFsbCIpLiBJZiAnY3VycmVudCcgaXMgZ2l2ZW4sIHRoZW4gb3JkZXIgaXMgYXNzdW1lZCB0byBiZQoJCSAqICAgICdjdXJyZW50JyBhbmQgZmlsdGVyIGlzICdhcHBsaWVkJywgcmVnYXJkbGVzcyBvZiB3aGF0IHRoZXkgbWlnaHQgYmUgZ2l2ZW4gYXMuCgkJICogIEByZXR1cm5zIHtvYmplY3R9IGpRdWVyeSBvYmplY3QsIGZpbHRlcmVkIGJ5IHRoZSBnaXZlbiBzZWxlY3Rvci4KCQkgKiAgQGR0b3B0IEFQSQoJCSAqICBAZGVwcmVjYXRlZCBTaW5jZSB2MS4xMAoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CgkJICogICAgICB2YXIgb1RhYmxlID0gJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoKTsKCQkgKgoJCSAqICAgICAgLy8gSGlnaGxpZ2h0IGV2ZXJ5IHNlY29uZCByb3cKCQkgKiAgICAgIG9UYWJsZS4kKCd0cjpvZGQnKS5jc3MoJ2JhY2tncm91bmRDb2xvcicsICdibHVlJyk7CgkJICogICAgfSApOwoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CgkJICogICAgICB2YXIgb1RhYmxlID0gJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoKTsKCQkgKgoJCSAqICAgICAgLy8gRmlsdGVyIHRvIHJvd3Mgd2l0aCAnV2Via2l0JyBpbiB0aGVtLCBhZGQgYSBiYWNrZ3JvdW5kIGNvbG91ciBhbmQgdGhlbgoJCSAqICAgICAgLy8gcmVtb3ZlIHRoZSBmaWx0ZXIsIHRodXMgaGlnaGxpZ2h0aW5nIHRoZSAnV2Via2l0JyByb3dzIG9ubHkuCgkJICogICAgICBvVGFibGUuZm5GaWx0ZXIoJ1dlYmtpdCcpOwoJCSAqICAgICAgb1RhYmxlLiQoJ3RyJywgeyJzZWFyY2giOiAiYXBwbGllZCJ9KS5jc3MoJ2JhY2tncm91bmRDb2xvcicsICdibHVlJyk7CgkJICogICAgICBvVGFibGUuZm5GaWx0ZXIoJycpOwoJCSAqICAgIH0gKTsKCQkgKi8KCQl0aGlzLiQgPSBmdW5jdGlvbiAoIHNTZWxlY3Rvciwgb09wdHMgKQoJCXsKCQkJcmV0dXJuIHRoaXMuYXBpKHRydWUpLiQoIHNTZWxlY3Rvciwgb09wdHMgKTsKCQl9OwoJCQoJCQoJCS8qKgoJCSAqIEFsbW9zdCBpZGVudGljYWwgdG8gJCBpbiBvcGVyYXRpb24sIGJ1dCBpbiB0aGlzIGNhc2UgcmV0dXJucyB0aGUgZGF0YSBmb3IgdGhlIG1hdGNoZWQKCQkgKiByb3dzIC0gYXMgc3VjaCwgdGhlIGpRdWVyeSBzZWxlY3RvciB1c2VkIHNob3VsZCBtYXRjaCBUUiByb3cgbm9kZXMgb3IgVEQvVEggY2VsbCBub2RlcwoJCSAqIHJhdGhlciB0aGFuIGFueSBkZXNjZW5kYW50cywgc28gdGhlIGRhdGEgY2FuIGJlIG9idGFpbmVkIGZvciB0aGUgcm93L2NlbGwuIElmIG1hdGNoaW5nCgkJICogcm93cyBhcmUgZm91bmQsIHRoZSBkYXRhIHJldHVybmVkIGlzIHRoZSBvcmlnaW5hbCBkYXRhIGFycmF5L29iamVjdCB0aGF0IHdhcyB1c2VkIHRvCgkJICogY3JlYXRlIHRoZSByb3cgKG9yIGEgZ2VuZXJhdGVkIGFycmF5IGlmIGZyb20gYSBET00gc291cmNlKS4KCQkgKgoJCSAqIFRoaXMgbWV0aG9kIGlzIG9mdGVuIHVzZWZ1bCBpbi1jb21iaW5hdGlvbiB3aXRoICQgd2hlcmUgYm90aCBmdW5jdGlvbnMgYXJlIGdpdmVuIHRoZQoJCSAqIHNhbWUgcGFyYW1ldGVycyBhbmQgdGhlIGFycmF5IGluZGV4ZXMgd2lsbCBtYXRjaCBpZGVudGljYWxseS4KCQkgKiAgQHBhcmFtIHtzdHJpbmd8bm9kZXxqUXVlcnl9IHNTZWxlY3RvciBqUXVlcnkgc2VsZWN0b3Igb3Igbm9kZSBjb2xsZWN0aW9uIHRvIGFjdCBvbgoJCSAqICBAcGFyYW0ge29iamVjdH0gW29PcHRzXSBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBtb2RpZnlpbmcgdGhlIHJvd3MgdG8gYmUgaW5jbHVkZWQKCQkgKiAgQHBhcmFtIHtzdHJpbmd9IFtvT3B0cy5maWx0ZXI9bm9uZV0gU2VsZWN0IGVsZW1lbnRzIHRoYXQgbWVldCB0aGUgY3VycmVudCBmaWx0ZXIKCQkgKiAgICBjcml0ZXJpb24gKCJhcHBsaWVkIikgb3IgYWxsIGVsZW1lbnRzIChpLmUuIG5vIGZpbHRlcikuCgkJICogIEBwYXJhbSB7c3RyaW5nfSBbb09wdHMub3JkZXI9Y3VycmVudF0gT3JkZXIgb2YgdGhlIGRhdGEgaW4gdGhlIHByb2Nlc3NlZCBhcnJheS4KCQkgKiAgICBDYW4gYmUgZWl0aGVyICdjdXJyZW50Jywgd2hlcmVieSB0aGUgY3VycmVudCBzb3J0aW5nIG9mIHRoZSB0YWJsZSBpcyB1c2VkLCBvcgoJCSAqICAgICdvcmlnaW5hbCcgd2hlcmVieSB0aGUgb3JpZ2luYWwgb3JkZXIgdGhlIGRhdGEgd2FzIHJlYWQgaW50byB0aGUgdGFibGUgaXMgdXNlZC4KCQkgKiAgQHBhcmFtIHtzdHJpbmd9IFtvT3B0cy5wYWdlPWFsbF0gTGltaXQgdGhlIHNlbGVjdGlvbiB0byB0aGUgY3VycmVudGx5IGRpc3BsYXllZCBwYWdlCgkJICogICAgKCJjdXJyZW50Iikgb3Igbm90ICgiYWxsIikuIElmICdjdXJyZW50JyBpcyBnaXZlbiwgdGhlbiBvcmRlciBpcyBhc3N1bWVkIHRvIGJlCgkJICogICAgJ2N1cnJlbnQnIGFuZCBmaWx0ZXIgaXMgJ2FwcGxpZWQnLCByZWdhcmRsZXNzIG9mIHdoYXQgdGhleSBtaWdodCBiZSBnaXZlbiBhcy4KCQkgKiAgQHJldHVybnMge2FycmF5fSBEYXRhIGZvciB0aGUgbWF0Y2hlZCBlbGVtZW50cy4gSWYgYW55IGVsZW1lbnRzLCBhcyBhIHJlc3VsdCBvZiB0aGUKCQkgKiAgICBzZWxlY3Rvciwgd2VyZSBub3QgVFIsIFREIG9yIFRIIGVsZW1lbnRzIGluIHRoZSBEYXRhVGFibGUsIHRoZXkgd2lsbCBoYXZlIGEgbnVsbAoJCSAqICAgIGVudHJ5IGluIHRoZSBhcnJheS4KCQkgKiAgQGR0b3B0IEFQSQoJCSAqICBAZGVwcmVjYXRlZCBTaW5jZSB2MS4xMAoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CgkJICogICAgICB2YXIgb1RhYmxlID0gJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoKTsKCQkgKgoJCSAqICAgICAgLy8gR2V0IHRoZSBkYXRhIGZyb20gdGhlIGZpcnN0IHJvdyBpbiB0aGUgdGFibGUKCQkgKiAgICAgIHZhciBkYXRhID0gb1RhYmxlLl8oJ3RyOmZpcnN0Jyk7CgkJICoKCQkgKiAgICAgIC8vIERvIHNvbWV0aGluZyB1c2VmdWwgd2l0aCB0aGUgZGF0YQoJCSAqICAgICAgYWxlcnQoICJGaXJzdCBjZWxsIGlzOiAiK2RhdGFbMF0gKTsKCQkgKiAgICB9ICk7CgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKCQkgKiAgICAgIHZhciBvVGFibGUgPSAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSgpOwoJCSAqCgkJICogICAgICAvLyBGaWx0ZXIgdG8gJ1dlYmtpdCcgYW5kIGdldCBhbGwgZGF0YSBmb3IKCQkgKiAgICAgIG9UYWJsZS5mbkZpbHRlcignV2Via2l0Jyk7CgkJICogICAgICB2YXIgZGF0YSA9IG9UYWJsZS5fKCd0cicsIHsic2VhcmNoIjogImFwcGxpZWQifSk7CgkJICoKCQkgKiAgICAgIC8vIERvIHNvbWV0aGluZyB3aXRoIHRoZSBkYXRhCgkJICogICAgICBhbGVydCggZGF0YS5sZW5ndGgrIiByb3dzIG1hdGNoZWQgdGhlIHNlYXJjaCIgKTsKCQkgKiAgICB9ICk7CgkJICovCgkJdGhpcy5fID0gZnVuY3Rpb24gKCBzU2VsZWN0b3IsIG9PcHRzICkKCQl7CgkJCXJldHVybiB0aGlzLmFwaSh0cnVlKS5yb3dzKCBzU2VsZWN0b3IsIG9PcHRzICkuZGF0YSgpOwoJCX07CgkJCgkJCgkJLyoqCgkJICogQ3JlYXRlIGEgRGF0YVRhYmxlcyBBcGkgaW5zdGFuY2UsIHdpdGggdGhlIGN1cnJlbnRseSBzZWxlY3RlZCB0YWJsZXMgZm9yCgkJICogdGhlIEFwaSdzIGNvbnRleHQuCgkJICogQHBhcmFtIHtib29sZWFufSBbdHJhZGl0aW9uYWw9ZmFsc2VdIFNldCB0aGUgQVBJIGluc3RhbmNlJ3MgY29udGV4dCB0byBiZQoJCSAqICAgb25seSB0aGUgdGFibGUgcmVmZXJyZWQgdG8gYnkgdGhlIGBEYXRhVGFibGUuZXh0LmlBcGlJbmRleGAgb3B0aW9uLCBhcyB3YXMKCQkgKiAgIHVzZWQgaW4gdGhlIEFQSSBwcmVzZW50ZWQgYnkgRGF0YVRhYmxlcyAxLjktIChpLmUuIHRoZSB0cmFkaXRpb25hbCBtb2RlKSwKCQkgKiAgIG9yIGlmIGFsbCB0YWJsZXMgY2FwdHVyZWQgaW4gdGhlIGpRdWVyeSBvYmplY3Qgc2hvdWxkIGJlIHVzZWQuCgkJICogQHJldHVybiB7RGF0YVRhYmxlcy5BcGl9CgkJICovCgkJdGhpcy5hcGkgPSBmdW5jdGlvbiAoIHRyYWRpdGlvbmFsICkKCQl7CgkJCXJldHVybiB0cmFkaXRpb25hbCA/CgkJCQluZXcgX0FwaSgKCQkJCQlfZm5TZXR0aW5nc0Zyb21Ob2RlKCB0aGlzWyBfZXh0LmlBcGlJbmRleCBdICkKCQkJCSkgOgoJCQkJbmV3IF9BcGkoIHRoaXMgKTsKCQl9OwoJCQoJCQoJCS8qKgoJCSAqIEFkZCBhIHNpbmdsZSBuZXcgcm93IG9yIG11bHRpcGxlIHJvd3Mgb2YgZGF0YSB0byB0aGUgdGFibGUuIFBsZWFzZSBub3RlCgkJICogdGhhdCB0aGlzIGlzIHN1aXRhYmxlIGZvciBjbGllbnQtc2lkZSBwcm9jZXNzaW5nIG9ubHkgLSBpZiB5b3UgYXJlIHVzaW5nCgkJICogc2VydmVyLXNpZGUgcHJvY2Vzc2luZyAoaS5lLiAiYlNlcnZlclNpZGUiOiB0cnVlKSwgdGhlbiB0byBhZGQgZGF0YSwgeW91CgkJICogbXVzdCBhZGQgaXQgdG8gdGhlIGRhdGEgc291cmNlLCBpLmUuIHRoZSBzZXJ2ZXItc2lkZSwgdGhyb3VnaCBhbiBBamF4IGNhbGwuCgkJICogIEBwYXJhbSB7YXJyYXl8b2JqZWN0fSBkYXRhIFRoZSBkYXRhIHRvIGJlIGFkZGVkIHRvIHRoZSB0YWJsZS4gVGhpcyBjYW4gYmU6CgkJICogICAgPHVsPgoJCSAqICAgICAgPGxpPjFEIGFycmF5IG9mIGRhdGEgLSBhZGQgYSBzaW5nbGUgcm93IHdpdGggdGhlIGRhdGEgcHJvdmlkZWQ8L2xpPgoJCSAqICAgICAgPGxpPjJEIGFycmF5IG9mIGFycmF5cyAtIGFkZCBtdWx0aXBsZSByb3dzIGluIGEgc2luZ2xlIGNhbGw8L2xpPgoJCSAqICAgICAgPGxpPm9iamVjdCAtIGRhdGEgb2JqZWN0IHdoZW4gdXNpbmcgPGk+bURhdGE8L2k+PC9saT4KCQkgKiAgICAgIDxsaT5hcnJheSBvZiBvYmplY3RzIC0gbXVsdGlwbGUgZGF0YSBvYmplY3RzIHdoZW4gdXNpbmcgPGk+bURhdGE8L2k+PC9saT4KCQkgKiAgICA8L3VsPgoJCSAqICBAcGFyYW0ge2Jvb2x9IFtyZWRyYXc9dHJ1ZV0gcmVkcmF3IHRoZSB0YWJsZSBvciBub3QKCQkgKiAgQHJldHVybnMge2FycmF5fSBBbiBhcnJheSBvZiBpbnRlZ2VycywgcmVwcmVzZW50aW5nIHRoZSBsaXN0IG9mIGluZGV4ZXMgaW4KCQkgKiAgICA8aT5hb0RhdGE8L2k+ICh7QGxpbmsgRGF0YVRhYmxlLm1vZGVscy5vU2V0dGluZ3N9KSB0aGF0IGhhdmUgYmVlbiBhZGRlZCB0bwoJCSAqICAgIHRoZSB0YWJsZS4KCQkgKiAgQGR0b3B0IEFQSQoJCSAqICBAZGVwcmVjYXRlZCBTaW5jZSB2MS4xMAoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgLy8gR2xvYmFsIHZhciBmb3IgY291bnRlcgoJCSAqICAgIHZhciBnaUNvdW50ID0gMjsKCQkgKgoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoKTsKCQkgKiAgICB9ICk7CgkJICoKCQkgKiAgICBmdW5jdGlvbiBmbkNsaWNrQWRkUm93KCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoKS5mbkFkZERhdGEoIFsKCQkgKiAgICAgICAgZ2lDb3VudCsiLjEiLAoJCSAqICAgICAgICBnaUNvdW50KyIuMiIsCgkJICogICAgICAgIGdpQ291bnQrIi4zIiwKCQkgKiAgICAgICAgZ2lDb3VudCsiLjQiIF0KCQkgKiAgICAgICk7CgkJICoKCQkgKiAgICAgIGdpQ291bnQrKzsKCQkgKiAgICB9CgkJICovCgkJdGhpcy5mbkFkZERhdGEgPSBmdW5jdGlvbiggZGF0YSwgcmVkcmF3ICkKCQl7CgkJCXZhciBhcGkgPSB0aGlzLmFwaSggdHJ1ZSApOwoJCQoJCQkvKiBDaGVjayBpZiB3ZSB3YW50IHRvIGFkZCBtdWx0aXBsZSByb3dzIG9yIG5vdCAqLwoJCQl2YXIgcm93cyA9ICQuaXNBcnJheShkYXRhKSAmJiAoICQuaXNBcnJheShkYXRhWzBdKSB8fCAkLmlzUGxhaW5PYmplY3QoZGF0YVswXSkgKSA/CgkJCQlhcGkucm93cy5hZGQoIGRhdGEgKSA6CgkJCQlhcGkucm93LmFkZCggZGF0YSApOwoJCQoJCQlpZiAoIHJlZHJhdyA9PT0gdW5kZWZpbmVkIHx8IHJlZHJhdyApIHsKCQkJCWFwaS5kcmF3KCk7CgkJCX0KCQkKCQkJcmV0dXJuIHJvd3MuZmxhdHRlbigpLnRvQXJyYXkoKTsKCQl9OwoJCQoJCQoJCS8qKgoJCSAqIFRoaXMgZnVuY3Rpb24gd2lsbCBtYWtlIERhdGFUYWJsZXMgcmVjYWxjdWxhdGUgdGhlIGNvbHVtbiBzaXplcywgYmFzZWQgb24gdGhlIGRhdGEKCQkgKiBjb250YWluZWQgaW4gdGhlIHRhYmxlIGFuZCB0aGUgc2l6ZXMgYXBwbGllZCB0byB0aGUgY29sdW1ucyAoaW4gdGhlIERPTSwgQ1NTIG9yCgkJICogdGhyb3VnaCB0aGUgc1dpZHRoIHBhcmFtZXRlcikuIFRoaXMgY2FuIGJlIHVzZWZ1bCB3aGVuIHRoZSB3aWR0aCBvZiB0aGUgdGFibGUncwoJCSAqIHBhcmVudCBlbGVtZW50IGNoYW5nZXMgKGZvciBleGFtcGxlIGEgd2luZG93IHJlc2l6ZSkuCgkJICogIEBwYXJhbSB7Ym9vbGVhbn0gW2JSZWRyYXc9dHJ1ZV0gUmVkcmF3IHRoZSB0YWJsZSBvciBub3QsIHlvdSB3aWxsIHR5cGljYWxseSB3YW50IHRvCgkJICogIEBkdG9wdCBBUEkKCQkgKiAgQGRlcHJlY2F0ZWQgU2luY2UgdjEuMTAKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgewoJCSAqICAgICAgdmFyIG9UYWJsZSA9ICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJzU2Nyb2xsWSI6ICIyMDBweCIsCgkJICogICAgICAgICJiUGFnaW5hdGUiOiBmYWxzZQoJCSAqICAgICAgfSApOwoJCSAqCgkJICogICAgICAkKHdpbmRvdykub24oJ3Jlc2l6ZScsIGZ1bmN0aW9uICgpIHsKCQkgKiAgICAgICAgb1RhYmxlLmZuQWRqdXN0Q29sdW1uU2l6aW5nKCk7CgkJICogICAgICB9ICk7CgkJICogICAgfSApOwoJCSAqLwoJCXRoaXMuZm5BZGp1c3RDb2x1bW5TaXppbmcgPSBmdW5jdGlvbiAoIGJSZWRyYXcgKQoJCXsKCQkJdmFyIGFwaSA9IHRoaXMuYXBpKCB0cnVlICkuY29sdW1ucy5hZGp1c3QoKTsKCQkJdmFyIHNldHRpbmdzID0gYXBpLnNldHRpbmdzKClbMF07CgkJCXZhciBzY3JvbGwgPSBzZXR0aW5ncy5vU2Nyb2xsOwoJCQoJCQlpZiAoIGJSZWRyYXcgPT09IHVuZGVmaW5lZCB8fCBiUmVkcmF3ICkgewoJCQkJYXBpLmRyYXcoIGZhbHNlICk7CgkJCX0KCQkJZWxzZSBpZiAoIHNjcm9sbC5zWCAhPT0gIiIgfHwgc2Nyb2xsLnNZICE9PSAiIiApIHsKCQkJCS8qIElmIG5vdCByZWRyYXdpbmcsIGJ1dCBzY3JvbGxpbmcsIHdlIHdhbnQgdG8gYXBwbHkgdGhlIG5ldyBjb2x1bW4gc2l6ZXMgYW55d2F5ICovCgkJCQlfZm5TY3JvbGxEcmF3KCBzZXR0aW5ncyApOwoJCQl9CgkJfTsKCQkKCQkKCQkvKioKCQkgKiBRdWlja2x5IGFuZCBzaW1wbHkgY2xlYXIgYSB0YWJsZQoJCSAqICBAcGFyYW0ge2Jvb2x9IFtiUmVkcmF3PXRydWVdIHJlZHJhdyB0aGUgdGFibGUgb3Igbm90CgkJICogIEBkdG9wdCBBUEkKCQkgKiAgQGRlcHJlY2F0ZWQgU2luY2UgdjEuMTAKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgewoJCSAqICAgICAgdmFyIG9UYWJsZSA9ICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCk7CgkJICoKCQkgKiAgICAgIC8vIEltbWVkaWF0ZWx5ICdudWtlJyB0aGUgY3VycmVudCByb3dzIChwZXJoYXBzIHdhaXRpbmcgZm9yIGFuIEFqYXggY2FsbGJhY2suLi4pCgkJICogICAgICBvVGFibGUuZm5DbGVhclRhYmxlKCk7CgkJICogICAgfSApOwoJCSAqLwoJCXRoaXMuZm5DbGVhclRhYmxlID0gZnVuY3Rpb24oIGJSZWRyYXcgKQoJCXsKCQkJdmFyIGFwaSA9IHRoaXMuYXBpKCB0cnVlICkuY2xlYXIoKTsKCQkKCQkJaWYgKCBiUmVkcmF3ID09PSB1bmRlZmluZWQgfHwgYlJlZHJhdyApIHsKCQkJCWFwaS5kcmF3KCk7CgkJCX0KCQl9OwoJCQoJCQoJCS8qKgoJCSAqIFRoZSBleGFjdCBvcHBvc2l0ZSBvZiAnb3BlbmluZycgYSByb3csIHRoaXMgZnVuY3Rpb24gd2lsbCBjbG9zZSBhbnkgcm93cyB3aGljaAoJCSAqIGFyZSBjdXJyZW50bHkgJ29wZW4nLgoJCSAqICBAcGFyYW0ge25vZGV9IG5UciB0aGUgdGFibGUgcm93IHRvICdjbG9zZScKCQkgKiAgQHJldHVybnMge2ludH0gMCBvbiBzdWNjZXNzLCBvciAxIGlmIGZhaWxlZCAoY2FuJ3QgZmluZCB0aGUgcm93KQoJCSAqICBAZHRvcHQgQVBJCgkJICogIEBkZXByZWNhdGVkIFNpbmNlIHYxLjEwCgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKCQkgKiAgICAgIHZhciBvVGFibGU7CgkJICoKCQkgKiAgICAgIC8vICdvcGVuJyBhbiBpbmZvcm1hdGlvbiByb3cgd2hlbiBhIHJvdyBpcyBjbGlja2VkIG9uCgkJICogICAgICAkKCcjZXhhbXBsZSB0Ym9keSB0cicpLmNsaWNrKCBmdW5jdGlvbiAoKSB7CgkJICogICAgICAgIGlmICggb1RhYmxlLmZuSXNPcGVuKHRoaXMpICkgewoJCSAqICAgICAgICAgIG9UYWJsZS5mbkNsb3NlKCB0aGlzICk7CgkJICogICAgICAgIH0gZWxzZSB7CgkJICogICAgICAgICAgb1RhYmxlLmZuT3BlbiggdGhpcywgIlRlbXBvcmFyeSByb3cgb3BlbmVkIiwgImluZm9fcm93IiApOwoJCSAqICAgICAgICB9CgkJICogICAgICB9ICk7CgkJICoKCQkgKiAgICAgIG9UYWJsZSA9ICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCk7CgkJICogICAgfSApOwoJCSAqLwoJCXRoaXMuZm5DbG9zZSA9IGZ1bmN0aW9uKCBuVHIgKQoJCXsKCQkJdGhpcy5hcGkoIHRydWUgKS5yb3coIG5UciApLmNoaWxkLmhpZGUoKTsKCQl9OwoJCQoJCQoJCS8qKgoJCSAqIFJlbW92ZSBhIHJvdyBmb3IgdGhlIHRhYmxlCgkJICogIEBwYXJhbSB7bWl4ZWR9IHRhcmdldCBUaGUgaW5kZXggb2YgdGhlIHJvdyBmcm9tIGFvRGF0YSB0byBiZSBkZWxldGVkLCBvcgoJCSAqICAgIHRoZSBUUiBlbGVtZW50IHlvdSB3YW50IHRvIGRlbGV0ZQoJCSAqICBAcGFyYW0ge2Z1bmN0aW9ufG51bGx9IFtjYWxsQmFja10gQ2FsbGJhY2sgZnVuY3Rpb24KCQkgKiAgQHBhcmFtIHtib29sfSBbcmVkcmF3PXRydWVdIFJlZHJhdyB0aGUgdGFibGUgb3Igbm90CgkJICogIEByZXR1cm5zIHthcnJheX0gVGhlIHJvdyB0aGF0IHdhcyBkZWxldGVkCgkJICogIEBkdG9wdCBBUEkKCQkgKiAgQGRlcHJlY2F0ZWQgU2luY2UgdjEuMTAKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgewoJCSAqICAgICAgdmFyIG9UYWJsZSA9ICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCk7CgkJICoKCQkgKiAgICAgIC8vIEltbWVkaWF0ZWx5IHJlbW92ZSB0aGUgZmlyc3Qgcm93CgkJICogICAgICBvVGFibGUuZm5EZWxldGVSb3coIDAgKTsKCQkgKiAgICB9ICk7CgkJICovCgkJdGhpcy5mbkRlbGV0ZVJvdyA9IGZ1bmN0aW9uKCB0YXJnZXQsIGNhbGxiYWNrLCByZWRyYXcgKQoJCXsKCQkJdmFyIGFwaSA9IHRoaXMuYXBpKCB0cnVlICk7CgkJCXZhciByb3dzID0gYXBpLnJvd3MoIHRhcmdldCApOwoJCQl2YXIgc2V0dGluZ3MgPSByb3dzLnNldHRpbmdzKClbMF07CgkJCXZhciBkYXRhID0gc2V0dGluZ3MuYW9EYXRhWyByb3dzWzBdWzBdIF07CgkJCgkJCXJvd3MucmVtb3ZlKCk7CgkJCgkJCWlmICggY2FsbGJhY2sgKSB7CgkJCQljYWxsYmFjay5jYWxsKCB0aGlzLCBzZXR0aW5ncywgZGF0YSApOwoJCQl9CgkJCgkJCWlmICggcmVkcmF3ID09PSB1bmRlZmluZWQgfHwgcmVkcmF3ICkgewoJCQkJYXBpLmRyYXcoKTsKCQkJfQoJCQoJCQlyZXR1cm4gZGF0YTsKCQl9OwoJCQoJCQoJCS8qKgoJCSAqIFJlc3RvcmUgdGhlIHRhYmxlIHRvIGl0J3Mgb3JpZ2luYWwgc3RhdGUgaW4gdGhlIERPTSBieSByZW1vdmluZyBhbGwgb2YgRGF0YVRhYmxlcwoJCSAqIGVuaGFuY2VtZW50cywgYWx0ZXJhdGlvbnMgdG8gdGhlIERPTSBzdHJ1Y3R1cmUgb2YgdGhlIHRhYmxlIGFuZCBldmVudCBsaXN0ZW5lcnMuCgkJICogIEBwYXJhbSB7Ym9vbGVhbn0gW3JlbW92ZT1mYWxzZV0gQ29tcGxldGVseSByZW1vdmUgdGhlIHRhYmxlIGZyb20gdGhlIERPTQoJCSAqICBAZHRvcHQgQVBJCgkJICogIEBkZXByZWNhdGVkIFNpbmNlIHYxLjEwCgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKCQkgKiAgICAgIC8vIFRoaXMgZXhhbXBsZSBpcyBmYWlybHkgcG9pbnRsZXNzIGluIHJlYWxpdHksIGJ1dCBzaG93cyBob3cgZm5EZXN0cm95IGNhbiBiZSB1c2VkCgkJICogICAgICB2YXIgb1RhYmxlID0gJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoKTsKCQkgKiAgICAgIG9UYWJsZS5mbkRlc3Ryb3koKTsKCQkgKiAgICB9ICk7CgkJICovCgkJdGhpcy5mbkRlc3Ryb3kgPSBmdW5jdGlvbiAoIHJlbW92ZSApCgkJewoJCQl0aGlzLmFwaSggdHJ1ZSApLmRlc3Ryb3koIHJlbW92ZSApOwoJCX07CgkJCgkJCgkJLyoqCgkJICogUmVkcmF3IHRoZSB0YWJsZQoJCSAqICBAcGFyYW0ge2Jvb2x9IFtjb21wbGV0ZT10cnVlXSBSZS1maWx0ZXIgYW5kIHJlc29ydCAoaWYgZW5hYmxlZCkgdGhlIHRhYmxlIGJlZm9yZSB0aGUgZHJhdy4KCQkgKiAgQGR0b3B0IEFQSQoJCSAqICBAZGVwcmVjYXRlZCBTaW5jZSB2MS4xMAoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CgkJICogICAgICB2YXIgb1RhYmxlID0gJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoKTsKCQkgKgoJCSAqICAgICAgLy8gUmUtZHJhdyB0aGUgdGFibGUgLSB5b3Ugd291bGRuJ3Qgd2FudCB0byBkbyBpdCBoZXJlLCBidXQgaXQncyBhbiBleGFtcGxlIDotKQoJCSAqICAgICAgb1RhYmxlLmZuRHJhdygpOwoJCSAqICAgIH0gKTsKCQkgKi8KCQl0aGlzLmZuRHJhdyA9IGZ1bmN0aW9uKCBjb21wbGV0ZSApCgkJewoJCQkvLyBOb3RlIHRoYXQgdGhpcyBpc24ndCBhbiBleGFjdCBtYXRjaCB0byB0aGUgb2xkIGNhbGwgdG8gX2ZuRHJhdyAtIGl0IHRha2VzCgkJCS8vIGludG8gYWNjb3VudCB0aGUgbmV3IGRhdGEsIGJ1dCBjYW4gaG9sZCBwb3NpdGlvbi4KCQkJdGhpcy5hcGkoIHRydWUgKS5kcmF3KCBjb21wbGV0ZSApOwoJCX07CgkJCgkJCgkJLyoqCgkJICogRmlsdGVyIHRoZSBpbnB1dCBiYXNlZCBvbiBkYXRhCgkJICogIEBwYXJhbSB7c3RyaW5nfSBzSW5wdXQgU3RyaW5nIHRvIGZpbHRlciB0aGUgdGFibGUgb24KCQkgKiAgQHBhcmFtIHtpbnR8bnVsbH0gW2lDb2x1bW5dIENvbHVtbiB0byBsaW1pdCBmaWx0ZXJpbmcgdG8KCQkgKiAgQHBhcmFtIHtib29sfSBbYlJlZ2V4PWZhbHNlXSBUcmVhdCBhcyByZWd1bGFyIGV4cHJlc3Npb24gb3Igbm90CgkJICogIEBwYXJhbSB7Ym9vbH0gW2JTbWFydD10cnVlXSBQZXJmb3JtIHNtYXJ0IGZpbHRlcmluZyBvciBub3QKCQkgKiAgQHBhcmFtIHtib29sfSBbYlNob3dHbG9iYWw9dHJ1ZV0gU2hvdyB0aGUgaW5wdXQgZ2xvYmFsIGZpbHRlciBpbiBpdCdzIGlucHV0IGJveChlcykKCQkgKiAgQHBhcmFtIHtib29sfSBbYkNhc2VJbnNlbnNpdGl2ZT10cnVlXSBEbyBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoaW5nICh0cnVlKSBvciBub3QgKGZhbHNlKQoJCSAqICBAZHRvcHQgQVBJCgkJICogIEBkZXByZWNhdGVkIFNpbmNlIHYxLjEwCgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKCQkgKiAgICAgIHZhciBvVGFibGUgPSAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSgpOwoJCSAqCgkJICogICAgICAvLyBTb21ldGltZSBsYXRlciAtIGZpbHRlci4uLgoJCSAqICAgICAgb1RhYmxlLmZuRmlsdGVyKCAndGVzdCBzdHJpbmcnICk7CgkJICogICAgfSApOwoJCSAqLwoJCXRoaXMuZm5GaWx0ZXIgPSBmdW5jdGlvbiggc0lucHV0LCBpQ29sdW1uLCBiUmVnZXgsIGJTbWFydCwgYlNob3dHbG9iYWwsIGJDYXNlSW5zZW5zaXRpdmUgKQoJCXsKCQkJdmFyIGFwaSA9IHRoaXMuYXBpKCB0cnVlICk7CgkJCgkJCWlmICggaUNvbHVtbiA9PT0gbnVsbCB8fCBpQ29sdW1uID09PSB1bmRlZmluZWQgKSB7CgkJCQlhcGkuc2VhcmNoKCBzSW5wdXQsIGJSZWdleCwgYlNtYXJ0LCBiQ2FzZUluc2Vuc2l0aXZlICk7CgkJCX0KCQkJZWxzZSB7CgkJCQlhcGkuY29sdW1uKCBpQ29sdW1uICkuc2VhcmNoKCBzSW5wdXQsIGJSZWdleCwgYlNtYXJ0LCBiQ2FzZUluc2Vuc2l0aXZlICk7CgkJCX0KCQkKCQkJYXBpLmRyYXcoKTsKCQl9OwoJCQoJCQoJCS8qKgoJCSAqIEdldCB0aGUgZGF0YSBmb3IgdGhlIHdob2xlIHRhYmxlLCBhbiBpbmRpdmlkdWFsIHJvdyBvciBhbiBpbmRpdmlkdWFsIGNlbGwgYmFzZWQgb24gdGhlCgkJICogcHJvdmlkZWQgcGFyYW1ldGVycy4KCQkgKiAgQHBhcmFtIHtpbnR8bm9kZX0gW3NyY10gQSBUUiByb3cgbm9kZSwgVEQvVEggY2VsbCBub2RlIG9yIGFuIGludGVnZXIuIElmIGdpdmVuIGFzCgkJICogICAgYSBUUiBub2RlIHRoZW4gdGhlIGRhdGEgc291cmNlIGZvciB0aGUgd2hvbGUgcm93IHdpbGwgYmUgcmV0dXJuZWQuIElmIGdpdmVuIGFzIGEKCQkgKiAgICBURC9USCBjZWxsIG5vZGUgdGhlbiBpQ29sIHdpbGwgYmUgYXV0b21hdGljYWxseSBjYWxjdWxhdGVkIGFuZCB0aGUgZGF0YSBmb3IgdGhlCgkJICogICAgY2VsbCByZXR1cm5lZC4gSWYgZ2l2ZW4gYXMgYW4gaW50ZWdlciwgdGhlbiB0aGlzIGlzIHRyZWF0ZWQgYXMgdGhlIGFvRGF0YSBpbnRlcm5hbAoJCSAqICAgIGRhdGEgaW5kZXggZm9yIHRoZSByb3cgKHNlZSBmbkdldFBvc2l0aW9uKSBhbmQgdGhlIGRhdGEgZm9yIHRoYXQgcm93IHVzZWQuCgkJICogIEBwYXJhbSB7aW50fSBbY29sXSBPcHRpb25hbCBjb2x1bW4gaW5kZXggdGhhdCB5b3Ugd2FudCB0aGUgZGF0YSBvZi4KCQkgKiAgQHJldHVybnMge2FycmF5fG9iamVjdHxzdHJpbmd9IElmIG1Sb3cgaXMgdW5kZWZpbmVkLCB0aGVuIHRoZSBkYXRhIGZvciBhbGwgcm93cyBpcwoJCSAqICAgIHJldHVybmVkLiBJZiBtUm93IGlzIGRlZmluZWQsIGp1c3QgZGF0YSBmb3IgdGhhdCByb3csIGFuZCBpcyBpQ29sIGlzCgkJICogICAgZGVmaW5lZCwgb25seSBkYXRhIGZvciB0aGUgZGVzaWduYXRlZCBjZWxsIGlzIHJldHVybmVkLgoJCSAqICBAZHRvcHQgQVBJCgkJICogIEBkZXByZWNhdGVkIFNpbmNlIHYxLjEwCgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAvLyBSb3cgZGF0YQoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgewoJCSAqICAgICAgb1RhYmxlID0gJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoKTsKCQkgKgoJCSAqICAgICAgb1RhYmxlLiQoJ3RyJykuY2xpY2soIGZ1bmN0aW9uICgpIHsKCQkgKiAgICAgICAgdmFyIGRhdGEgPSBvVGFibGUuZm5HZXREYXRhKCB0aGlzICk7CgkJICogICAgICAgIC8vIC4uLiBkbyBzb21ldGhpbmcgd2l0aCB0aGUgYXJyYXkgLyBvYmplY3Qgb2YgZGF0YSBmb3IgdGhlIHJvdwoJCSAqICAgICAgfSApOwoJCSAqICAgIH0gKTsKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgIC8vIEluZGl2aWR1YWwgY2VsbCBkYXRhCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CgkJICogICAgICBvVGFibGUgPSAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSgpOwoJCSAqCgkJICogICAgICBvVGFibGUuJCgndGQnKS5jbGljayggZnVuY3Rpb24gKCkgewoJCSAqICAgICAgICB2YXIgc0RhdGEgPSBvVGFibGUuZm5HZXREYXRhKCB0aGlzICk7CgkJICogICAgICAgIGFsZXJ0KCAnVGhlIGNlbGwgY2xpY2tlZCBvbiBoYWQgdGhlIHZhbHVlIG9mICcrc0RhdGEgKTsKCQkgKiAgICAgIH0gKTsKCQkgKiAgICB9ICk7CgkJICovCgkJdGhpcy5mbkdldERhdGEgPSBmdW5jdGlvbiggc3JjLCBjb2wgKQoJCXsKCQkJdmFyIGFwaSA9IHRoaXMuYXBpKCB0cnVlICk7CgkJCgkJCWlmICggc3JjICE9PSB1bmRlZmluZWQgKSB7CgkJCQl2YXIgdHlwZSA9IHNyYy5ub2RlTmFtZSA/IHNyYy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIDogJyc7CgkJCgkJCQlyZXR1cm4gY29sICE9PSB1bmRlZmluZWQgfHwgdHlwZSA9PSAndGQnIHx8IHR5cGUgPT0gJ3RoJyA/CgkJCQkJYXBpLmNlbGwoIHNyYywgY29sICkuZGF0YSgpIDoKCQkJCQlhcGkucm93KCBzcmMgKS5kYXRhKCkgfHwgbnVsbDsKCQkJfQoJCQoJCQlyZXR1cm4gYXBpLmRhdGEoKS50b0FycmF5KCk7CgkJfTsKCQkKCQkKCQkvKioKCQkgKiBHZXQgYW4gYXJyYXkgb2YgdGhlIFRSIG5vZGVzIHRoYXQgYXJlIHVzZWQgaW4gdGhlIHRhYmxlJ3MgYm9keS4gTm90ZSB0aGF0IHlvdSB3aWxsCgkJICogdHlwaWNhbGx5IHdhbnQgdG8gdXNlIHRoZSAnJCcgQVBJIG1ldGhvZCBpbiBwcmVmZXJlbmNlIHRvIHRoaXMgYXMgaXQgaXMgbW9yZQoJCSAqIGZsZXhpYmxlLgoJCSAqICBAcGFyYW0ge2ludH0gW2lSb3ddIE9wdGlvbmFsIHJvdyBpbmRleCBmb3IgdGhlIFRSIGVsZW1lbnQgeW91IHdhbnQKCQkgKiAgQHJldHVybnMge2FycmF5fG5vZGV9IElmIGlSb3cgaXMgdW5kZWZpbmVkLCByZXR1cm5zIGFuIGFycmF5IG9mIGFsbA=="
},
{
"key": "jquery.dataTables.js?4?1?0",
"type": "binary",
"value": "base64:IFRSIGVsZW1lbnRzCgkJICogICAgaW4gdGhlIHRhYmxlJ3MgYm9keSwgb3IgaVJvdyBpcyBkZWZpbmVkLCBqdXN0IHRoZSBUUiBlbGVtZW50IHJlcXVlc3RlZC4KCQkgKiAgQGR0b3B0IEFQSQoJCSAqICBAZGVwcmVjYXRlZCBTaW5jZSB2MS4xMAoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CgkJICogICAgICB2YXIgb1RhYmxlID0gJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoKTsKCQkgKgoJCSAqICAgICAgLy8gR2V0IHRoZSBub2RlcyBmcm9tIHRoZSB0YWJsZQoJCSAqICAgICAgdmFyIG5Ob2RlcyA9IG9UYWJsZS5mbkdldE5vZGVzKCApOwoJCSAqICAgIH0gKTsKCQkgKi8KCQl0aGlzLmZuR2V0Tm9kZXMgPSBmdW5jdGlvbiggaVJvdyApCgkJewoJCQl2YXIgYXBpID0gdGhpcy5hcGkoIHRydWUgKTsKCQkKCQkJcmV0dXJuIGlSb3cgIT09IHVuZGVmaW5lZCA/CgkJCQlhcGkucm93KCBpUm93ICkubm9kZSgpIDoKCQkJCWFwaS5yb3dzKCkubm9kZXMoKS5mbGF0dGVuKCkudG9BcnJheSgpOwoJCX07CgkJCgkJCgkJLyoqCgkJICogR2V0IHRoZSBhcnJheSBpbmRleGVzIG9mIGEgcGFydGljdWxhciBjZWxsIGZyb20gaXQncyBET00gZWxlbWVudAoJCSAqIGFuZCBjb2x1bW4gaW5kZXggaW5jbHVkaW5nIGhpZGRlbiBjb2x1bW5zCgkJICogIEBwYXJhbSB7bm9kZX0gbm9kZSB0aGlzIGNhbiBlaXRoZXIgYmUgYSBUUiwgVEQgb3IgVEggaW4gdGhlIHRhYmxlJ3MgYm9keQoJCSAqICBAcmV0dXJucyB7aW50fSBJZiBuTm9kZSBpcyBnaXZlbiBhcyBhIFRSLCB0aGVuIGEgc2luZ2xlIGluZGV4IGlzIHJldHVybmVkLCBvcgoJCSAqICAgIGlmIGdpdmVuIGFzIGEgY2VsbCwgYW4gYXJyYXkgb2YgW3JvdyBpbmRleCwgY29sdW1uIGluZGV4ICh2aXNpYmxlKSwKCQkgKiAgICBjb2x1bW4gaW5kZXggKGFsbCldIGlzIGdpdmVuLgoJCSAqICBAZHRvcHQgQVBJCgkJICogIEBkZXByZWNhdGVkIFNpbmNlIHYxLjEwCgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlIHRib2R5IHRkJykuY2xpY2soIGZ1bmN0aW9uICgpIHsKCQkgKiAgICAgICAgLy8gR2V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgY3VycmVudCBkYXRhIGZyb20gdGhlIG5vZGUKCQkgKiAgICAgICAgdmFyIGFQb3MgPSBvVGFibGUuZm5HZXRQb3NpdGlvbiggdGhpcyApOwoJCSAqCgkJICogICAgICAgIC8vIEdldCB0aGUgZGF0YSBhcnJheSBmb3IgdGhpcyByb3cKCQkgKiAgICAgICAgdmFyIGFEYXRhID0gb1RhYmxlLmZuR2V0RGF0YSggYVBvc1swXSApOwoJCSAqCgkJICogICAgICAgIC8vIFVwZGF0ZSB0aGUgZGF0YSBhcnJheSBhbmQgcmV0dXJuIHRoZSB2YWx1ZQoJCSAqICAgICAgICBhRGF0YVsgYVBvc1sxXSBdID0gJ2NsaWNrZWQnOwoJCSAqICAgICAgICB0aGlzLmlubmVySFRNTCA9ICdjbGlja2VkJzsKCQkgKiAgICAgIH0gKTsKCQkgKgoJCSAqICAgICAgLy8gSW5pdCBEYXRhVGFibGVzCgkJICogICAgICBvVGFibGUgPSAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSgpOwoJCSAqICAgIH0gKTsKCQkgKi8KCQl0aGlzLmZuR2V0UG9zaXRpb24gPSBmdW5jdGlvbiggbm9kZSApCgkJewoJCQl2YXIgYXBpID0gdGhpcy5hcGkoIHRydWUgKTsKCQkJdmFyIG5vZGVOYW1lID0gbm9kZS5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpOwoJCQoJCQlpZiAoIG5vZGVOYW1lID09ICdUUicgKSB7CgkJCQlyZXR1cm4gYXBpLnJvdyggbm9kZSApLmluZGV4KCk7CgkJCX0KCQkJZWxzZSBpZiAoIG5vZGVOYW1lID09ICdURCcgfHwgbm9kZU5hbWUgPT0gJ1RIJyApIHsKCQkJCXZhciBjZWxsID0gYXBpLmNlbGwoIG5vZGUgKS5pbmRleCgpOwoJCQoJCQkJcmV0dXJuIFsKCQkJCQljZWxsLnJvdywKCQkJCQljZWxsLmNvbHVtblZpc2libGUsCgkJCQkJY2VsbC5jb2x1bW4KCQkJCV07CgkJCX0KCQkJcmV0dXJuIG51bGw7CgkJfTsKCQkKCQkKCQkvKioKCQkgKiBDaGVjayB0byBzZWUgaWYgYSByb3cgaXMgJ29wZW4nIG9yIG5vdC4KCQkgKiAgQHBhcmFtIHtub2RlfSBuVHIgdGhlIHRhYmxlIHJvdyB0byBjaGVjawoJCSAqICBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgcm93IGlzIGN1cnJlbnRseSBvcGVuLCBmYWxzZSBvdGhlcndpc2UKCQkgKiAgQGR0b3B0IEFQSQoJCSAqICBAZGVwcmVjYXRlZCBTaW5jZSB2MS4xMAoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CgkJICogICAgICB2YXIgb1RhYmxlOwoJCSAqCgkJICogICAgICAvLyAnb3BlbicgYW4gaW5mb3JtYXRpb24gcm93IHdoZW4gYSByb3cgaXMgY2xpY2tlZCBvbgoJCSAqICAgICAgJCgnI2V4YW1wbGUgdGJvZHkgdHInKS5jbGljayggZnVuY3Rpb24gKCkgewoJCSAqICAgICAgICBpZiAoIG9UYWJsZS5mbklzT3Blbih0aGlzKSApIHsKCQkgKiAgICAgICAgICBvVGFibGUuZm5DbG9zZSggdGhpcyApOwoJCSAqICAgICAgICB9IGVsc2UgewoJCSAqICAgICAgICAgIG9UYWJsZS5mbk9wZW4oIHRoaXMsICJUZW1wb3Jhcnkgcm93IG9wZW5lZCIsICJpbmZvX3JvdyIgKTsKCQkgKiAgICAgICAgfQoJCSAqICAgICAgfSApOwoJCSAqCgkJICogICAgICBvVGFibGUgPSAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSgpOwoJCSAqICAgIH0gKTsKCQkgKi8KCQl0aGlzLmZuSXNPcGVuID0gZnVuY3Rpb24oIG5UciApCgkJewoJCQlyZXR1cm4gdGhpcy5hcGkoIHRydWUgKS5yb3coIG5UciApLmNoaWxkLmlzU2hvd24oKTsKCQl9OwoJCQoJCQoJCS8qKgoJCSAqIFRoaXMgZnVuY3Rpb24gd2lsbCBwbGFjZSBhIG5ldyByb3cgZGlyZWN0bHkgYWZ0ZXIgYSByb3cgd2hpY2ggaXMgY3VycmVudGx5CgkJICogb24gZGlzcGxheSBvbiB0aGUgcGFnZSwgd2l0aCB0aGUgSFRNTCBjb250ZW50cyB0aGF0IGlzIHBhc3NlZCBpbnRvIHRoZQoJCSAqIGZ1bmN0aW9uLiBUaGlzIGNhbiBiZSB1c2VkLCBmb3IgZXhhbXBsZSwgdG8gYXNrIGZvciBjb25maXJtYXRpb24gdGhhdCBhCgkJICogcGFydGljdWxhciByZWNvcmQgc2hvdWxkIGJlIGRlbGV0ZWQuCgkJICogIEBwYXJhbSB7bm9kZX0gblRyIFRoZSB0YWJsZSByb3cgdG8gJ29wZW4nCgkJICogIEBwYXJhbSB7c3RyaW5nfG5vZGV8alF1ZXJ5fSBtSHRtbCBUaGUgSFRNTCB0byBwdXQgaW50byB0aGUgcm93CgkJICogIEBwYXJhbSB7c3RyaW5nfSBzQ2xhc3MgQ2xhc3MgdG8gZ2l2ZSB0aGUgbmV3IFREIGNlbGwKCQkgKiAgQHJldHVybnMge25vZGV9IFRoZSByb3cgb3BlbmVkLiBOb3RlIHRoYXQgaWYgdGhlIHRhYmxlIHJvdyBwYXNzZWQgaW4gYXMgdGhlCgkJICogICAgZmlyc3QgcGFyYW1ldGVyLCBpcyBub3QgZm91bmQgaW4gdGhlIHRhYmxlLCB0aGlzIG1ldGhvZCB3aWxsIHNpbGVudGx5CgkJICogICAgcmV0dXJuLgoJCSAqICBAZHRvcHQgQVBJCgkJICogIEBkZXByZWNhdGVkIFNpbmNlIHYxLjEwCgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKCQkgKiAgICAgIHZhciBvVGFibGU7CgkJICoKCQkgKiAgICAgIC8vICdvcGVuJyBhbiBpbmZvcm1hdGlvbiByb3cgd2hlbiBhIHJvdyBpcyBjbGlja2VkIG9uCgkJICogICAgICAkKCcjZXhhbXBsZSB0Ym9keSB0cicpLmNsaWNrKCBmdW5jdGlvbiAoKSB7CgkJICogICAgICAgIGlmICggb1RhYmxlLmZuSXNPcGVuKHRoaXMpICkgewoJCSAqICAgICAgICAgIG9UYWJsZS5mbkNsb3NlKCB0aGlzICk7CgkJICogICAgICAgIH0gZWxzZSB7CgkJICogICAgICAgICAgb1RhYmxlLmZuT3BlbiggdGhpcywgIlRlbXBvcmFyeSByb3cgb3BlbmVkIiwgImluZm9fcm93IiApOwoJCSAqICAgICAgICB9CgkJICogICAgICB9ICk7CgkJICoKCQkgKiAgICAgIG9UYWJsZSA9ICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCk7CgkJICogICAgfSApOwoJCSAqLwoJCXRoaXMuZm5PcGVuID0gZnVuY3Rpb24oIG5UciwgbUh0bWwsIHNDbGFzcyApCgkJewoJCQlyZXR1cm4gdGhpcy5hcGkoIHRydWUgKQoJCQkJLnJvdyggblRyICkKCQkJCS5jaGlsZCggbUh0bWwsIHNDbGFzcyApCgkJCQkuc2hvdygpCgkJCQkuY2hpbGQoKVswXTsKCQl9OwoJCQoJCQoJCS8qKgoJCSAqIENoYW5nZSB0aGUgcGFnaW5hdGlvbiAtIHByb3ZpZGVzIHRoZSBpbnRlcm5hbCBsb2dpYyBmb3IgcGFnaW5hdGlvbiBpbiBhIHNpbXBsZSBBUEkKCQkgKiBmdW5jdGlvbi4gV2l0aCB0aGlzIGZ1bmN0aW9uIHlvdSBjYW4gaGF2ZSBhIERhdGFUYWJsZXMgdGFibGUgZ28gdG8gdGhlIG5leHQsCgkJICogcHJldmlvdXMsIGZpcnN0IG9yIGxhc3QgcGFnZXMuCgkJICogIEBwYXJhbSB7c3RyaW5nfGludH0gbUFjdGlvbiBQYWdpbmcgYWN0aW9uIHRvIHRha2U6ICJmaXJzdCIsICJwcmV2aW91cyIsICJuZXh0IiBvciAibGFzdCIKCQkgKiAgICBvciBwYWdlIG51bWJlciB0byBqdW1wIHRvIChpbnRlZ2VyKSwgbm90ZSB0aGF0IHBhZ2UgMCBpcyB0aGUgZmlyc3QgcGFnZS4KCQkgKiAgQHBhcmFtIHtib29sfSBbYlJlZHJhdz10cnVlXSBSZWRyYXcgdGhlIHRhYmxlIG9yIG5vdAoJCSAqICBAZHRvcHQgQVBJCgkJICogIEBkZXByZWNhdGVkIFNpbmNlIHYxLjEwCgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKCQkgKiAgICAgIHZhciBvVGFibGUgPSAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSgpOwoJCSAqICAgICAgb1RhYmxlLmZuUGFnZUNoYW5nZSggJ25leHQnICk7CgkJICogICAgfSApOwoJCSAqLwoJCXRoaXMuZm5QYWdlQ2hhbmdlID0gZnVuY3Rpb24gKCBtQWN0aW9uLCBiUmVkcmF3ICkKCQl7CgkJCXZhciBhcGkgPSB0aGlzLmFwaSggdHJ1ZSApLnBhZ2UoIG1BY3Rpb24gKTsKCQkKCQkJaWYgKCBiUmVkcmF3ID09PSB1bmRlZmluZWQgfHwgYlJlZHJhdyApIHsKCQkJCWFwaS5kcmF3KGZhbHNlKTsKCQkJfQoJCX07CgkJCgkJCgkJLyoqCgkJICogU2hvdyBhIHBhcnRpY3VsYXIgY29sdW1uCgkJICogIEBwYXJhbSB7aW50fSBpQ29sIFRoZSBjb2x1bW4gd2hvc2UgZGlzcGxheSBzaG91bGQgYmUgY2hhbmdlZAoJCSAqICBAcGFyYW0ge2Jvb2x9IGJTaG93IFNob3cgKHRydWUpIG9yIGhpZGUgKGZhbHNlKSB0aGUgY29sdW1uCgkJICogIEBwYXJhbSB7Ym9vbH0gW2JSZWRyYXc9dHJ1ZV0gUmVkcmF3IHRoZSB0YWJsZSBvciBub3QKCQkgKiAgQGR0b3B0IEFQSQoJCSAqICBAZGVwcmVjYXRlZCBTaW5jZSB2MS4xMAoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CgkJICogICAgICB2YXIgb1RhYmxlID0gJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoKTsKCQkgKgoJCSAqICAgICAgLy8gSGlkZSB0aGUgc2Vjb25kIGNvbHVtbiBhZnRlciBpbml0aWFsaXNhdGlvbgoJCSAqICAgICAgb1RhYmxlLmZuU2V0Q29sdW1uVmlzKCAxLCBmYWxzZSApOwoJCSAqICAgIH0gKTsKCQkgKi8KCQl0aGlzLmZuU2V0Q29sdW1uVmlzID0gZnVuY3Rpb24gKCBpQ29sLCBiU2hvdywgYlJlZHJhdyApCgkJewoJCQl2YXIgYXBpID0gdGhpcy5hcGkoIHRydWUgKS5jb2x1bW4oIGlDb2wgKS52aXNpYmxlKCBiU2hvdyApOwoJCQoJCQlpZiAoIGJSZWRyYXcgPT09IHVuZGVmaW5lZCB8fCBiUmVkcmF3ICkgewoJCQkJYXBpLmNvbHVtbnMuYWRqdXN0KCkuZHJhdygpOwoJCQl9CgkJfTsKCQkKCQkKCQkvKioKCQkgKiBHZXQgdGhlIHNldHRpbmdzIGZvciBhIHBhcnRpY3VsYXIgdGFibGUgZm9yIGV4dGVybmFsIG1hbmlwdWxhdGlvbgoJCSAqICBAcmV0dXJucyB7b2JqZWN0fSBEYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdC4gU2VlCgkJICogICAge0BsaW5rIERhdGFUYWJsZS5tb2RlbHMub1NldHRpbmdzfQoJCSAqICBAZHRvcHQgQVBJCgkJICogIEBkZXByZWNhdGVkIFNpbmNlIHYxLjEwCgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKCQkgKiAgICAgIHZhciBvVGFibGUgPSAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSgpOwoJCSAqICAgICAgdmFyIG9TZXR0aW5ncyA9IG9UYWJsZS5mblNldHRpbmdzKCk7CgkJICoKCQkgKiAgICAgIC8vIFNob3cgYW4gZXhhbXBsZSBwYXJhbWV0ZXIgZnJvbSB0aGUgc2V0dGluZ3MKCQkgKiAgICAgIGFsZXJ0KCBvU2V0dGluZ3MuX2lEaXNwbGF5U3RhcnQgKTsKCQkgKiAgICB9ICk7CgkJICovCgkJdGhpcy5mblNldHRpbmdzID0gZnVuY3Rpb24oKQoJCXsKCQkJcmV0dXJuIF9mblNldHRpbmdzRnJvbU5vZGUoIHRoaXNbX2V4dC5pQXBpSW5kZXhdICk7CgkJfTsKCQkKCQkKCQkvKioKCQkgKiBTb3J0IHRoZSB0YWJsZSBieSBhIHBhcnRpY3VsYXIgY29sdW1uCgkJICogIEBwYXJhbSB7aW50fSBpQ29sIHRoZSBkYXRhIGluZGV4IHRvIHNvcnQgb24uIE5vdGUgdGhhdCB0aGlzIHdpbGwgbm90IG1hdGNoIHRoZQoJCSAqICAgICdkaXNwbGF5IGluZGV4JyBpZiB5b3UgaGF2ZSBoaWRkZW4gZGF0YSBlbnRyaWVzCgkJICogIEBkdG9wdCBBUEkKCQkgKiAgQGRlcHJlY2F0ZWQgU2luY2UgdjEuMTAKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgewoJCSAqICAgICAgdmFyIG9UYWJsZSA9ICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCk7CgkJICoKCQkgKiAgICAgIC8vIFNvcnQgaW1tZWRpYXRlbHkgd2l0aCBjb2x1bW5zIDAgYW5kIDEKCQkgKiAgICAgIG9UYWJsZS5mblNvcnQoIFsgWzAsJ2FzYyddLCBbMSwnYXNjJ10gXSApOwoJCSAqICAgIH0gKTsKCQkgKi8KCQl0aGlzLmZuU29ydCA9IGZ1bmN0aW9uKCBhYVNvcnQgKQoJCXsKCQkJdGhpcy5hcGkoIHRydWUgKS5vcmRlciggYWFTb3J0ICkuZHJhdygpOwoJCX07CgkJCgkJCgkJLyoqCgkJICogQXR0YWNoIGEgc29ydCBsaXN0ZW5lciB0byBhbiBlbGVtZW50IGZvciBhIGdpdmVuIGNvbHVtbgoJCSAqICBAcGFyYW0ge25vZGV9IG5Ob2RlIHRoZSBlbGVtZW50IHRvIGF0dGFjaCB0aGUgc29ydCBsaXN0ZW5lciB0bwoJCSAqICBAcGFyYW0ge2ludH0gaUNvbHVtbiB0aGUgY29sdW1uIHRoYXQgYSBjbGljayBvbiB0aGlzIG5vZGUgd2lsbCBzb3J0IG9uCgkJICogIEBwYXJhbSB7ZnVuY3Rpb259IFtmbkNhbGxiYWNrXSBjYWxsYmFjayBmdW5jdGlvbiB3aGVuIHNvcnQgaXMgcnVuCgkJICogIEBkdG9wdCBBUEkKCQkgKiAgQGRlcHJlY2F0ZWQgU2luY2UgdjEuMTAKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgewoJCSAqICAgICAgdmFyIG9UYWJsZSA9ICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCk7CgkJICoKCQkgKiAgICAgIC8vIFNvcnQgb24gY29sdW1uIDEsIHdoZW4gJ3NvcnRlcicgaXMgY2xpY2tlZCBvbgoJCSAqICAgICAgb1RhYmxlLmZuU29ydExpc3RlbmVyKCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc29ydGVyJyksIDEgKTsKCQkgKiAgICB9ICk7CgkJICovCgkJdGhpcy5mblNvcnRMaXN0ZW5lciA9IGZ1bmN0aW9uKCBuTm9kZSwgaUNvbHVtbiwgZm5DYWxsYmFjayApCgkJewoJCQl0aGlzLmFwaSggdHJ1ZSApLm9yZGVyLmxpc3RlbmVyKCBuTm9kZSwgaUNvbHVtbiwgZm5DYWxsYmFjayApOwoJCX07CgkJCgkJCgkJLyoqCgkJICogVXBkYXRlIGEgdGFibGUgY2VsbCBvciByb3cgLSB0aGlzIG1ldGhvZCB3aWxsIGFjY2VwdCBlaXRoZXIgYSBzaW5nbGUgdmFsdWUgdG8KCQkgKiB1cGRhdGUgdGhlIGNlbGwgd2l0aCwgYW4gYXJyYXkgb2YgdmFsdWVzIHdpdGggb25lIGVsZW1lbnQgZm9yIGVhY2ggY29sdW1uIG9yCgkJICogYW4gb2JqZWN0IGluIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGUgb3JpZ2luYWwgZGF0YSBzb3VyY2UuIFRoZSBmdW5jdGlvbiBpcwoJCSAqIHNlbGYtcmVmZXJlbmNpbmcgaW4gb3JkZXIgdG8gbWFrZSB0aGUgbXVsdGkgY29sdW1uIHVwZGF0ZXMgZWFzaWVyLgoJCSAqICBAcGFyYW0ge29iamVjdHxhcnJheXxzdHJpbmd9IG1EYXRhIERhdGEgdG8gdXBkYXRlIHRoZSBjZWxsL3JvdyB3aXRoCgkJICogIEBwYXJhbSB7bm9kZXxpbnR9IG1Sb3cgVFIgZWxlbWVudCB5b3Ugd2FudCB0byB1cGRhdGUgb3IgdGhlIGFvRGF0YSBpbmRleAoJCSAqICBAcGFyYW0ge2ludH0gW2lDb2x1bW5dIFRoZSBjb2x1bW4gdG8gdXBkYXRlLCBnaXZlIGFzIG51bGwgb3IgdW5kZWZpbmVkIHRvCgkJICogICAgdXBkYXRlIGEgd2hvbGUgcm93LgoJCSAqICBAcGFyYW0ge2Jvb2x9IFtiUmVkcmF3PXRydWVdIFJlZHJhdyB0aGUgdGFibGUgb3Igbm90CgkJICogIEBwYXJhbSB7Ym9vbH0gW2JBY3Rpb249dHJ1ZV0gUGVyZm9ybSBwcmUtZHJhdyBhY3Rpb25zIG9yIG5vdAoJCSAqICBAcmV0dXJucyB7aW50fSAwIG9uIHN1Y2Nlc3MsIDEgb24gZXJyb3IKCQkgKiAgQGR0b3B0IEFQSQoJCSAqICBAZGVwcmVjYXRlZCBTaW5jZSB2MS4xMAoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CgkJICogICAgICB2YXIgb1RhYmxlID0gJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoKTsKCQkgKiAgICAgIG9UYWJsZS5mblVwZGF0ZSggJ0V4YW1wbGUgdXBkYXRlJywgMCwgMCApOyAvLyBTaW5nbGUgY2VsbAoJCSAqICAgICAgb1RhYmxlLmZuVXBkYXRlKCBbJ2EnLCAnYicsICdjJywgJ2QnLCAnZSddLCAkKCd0Ym9keSB0cicpWzBdICk7IC8vIFJvdwoJCSAqICAgIH0gKTsKCQkgKi8KCQl0aGlzLmZuVXBkYXRlID0gZnVuY3Rpb24oIG1EYXRhLCBtUm93LCBpQ29sdW1uLCBiUmVkcmF3LCBiQWN0aW9uICkKCQl7CgkJCXZhciBhcGkgPSB0aGlzLmFwaSggdHJ1ZSApOwoJCQoJCQlpZiAoIGlDb2x1bW4gPT09IHVuZGVmaW5lZCB8fCBpQ29sdW1uID09PSBudWxsICkgewoJCQkJYXBpLnJvdyggbVJvdyApLmRhdGEoIG1EYXRhICk7CgkJCX0KCQkJZWxzZSB7CgkJCQlhcGkuY2VsbCggbVJvdywgaUNvbHVtbiApLmRhdGEoIG1EYXRhICk7CgkJCX0KCQkKCQkJaWYgKCBiQWN0aW9uID09PSB1bmRlZmluZWQgfHwgYkFjdGlvbiApIHsKCQkJCWFwaS5jb2x1bW5zLmFkanVzdCgpOwoJCQl9CgkJCgkJCWlmICggYlJlZHJhdyA9PT0gdW5kZWZpbmVkIHx8IGJSZWRyYXcgKSB7CgkJCQlhcGkuZHJhdygpOwoJCQl9CgkJCXJldHVybiAwOwoJCX07CgkJCgkJCgkJLyoqCgkJICogUHJvdmlkZSBhIGNvbW1vbiBtZXRob2QgZm9yIHBsdWctaW5zIHRvIGNoZWNrIHRoZSB2ZXJzaW9uIG9mIERhdGFUYWJsZXMgYmVpbmcgdXNlZCwgaW4gb3JkZXIKCQkgKiB0byBlbnN1cmUgY29tcGF0aWJpbGl0eS4KCQkgKiAgQHBhcmFtIHtzdHJpbmd9IHNWZXJzaW9uIFZlcnNpb24gc3RyaW5nIHRvIGNoZWNrIGZvciwgaW4gdGhlIGZvcm1hdCAiWC5ZLloiLiBOb3RlIHRoYXQgdGhlCgkJICogICAgZm9ybWF0cyAiWCIgYW5kICJYLlkiIGFyZSBhbHNvIGFjY2VwdGFibGUuCgkJICogIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHRoaXMgdmVyc2lvbiBvZiBEYXRhVGFibGVzIGlzIGdyZWF0ZXIgb3IgZXF1YWwgdG8gdGhlIHJlcXVpcmVkCgkJICogICAgdmVyc2lvbiwgb3IgZmFsc2UgaWYgdGhpcyB2ZXJzaW9uIG9mIERhdGFUYWxlcyBpcyBub3Qgc3VpdGFibGUKCQkgKiAgQG1ldGhvZAoJCSAqICBAZHRvcHQgQVBJCgkJICogIEBkZXByZWNhdGVkIFNpbmNlIHYxLjEwCgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKCQkgKiAgICAgIHZhciBvVGFibGUgPSAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSgpOwoJCSAqICAgICAgYWxlcnQoIG9UYWJsZS5mblZlcnNpb25DaGVjayggJzEuOS4wJyApICk7CgkJICogICAgfSApOwoJCSAqLwoJCXRoaXMuZm5WZXJzaW9uQ2hlY2sgPSBfZXh0LmZuVmVyc2lvbkNoZWNrOwoJCQoKCQl2YXIgX3RoYXQgPSB0aGlzOwoJCXZhciBlbXB0eUluaXQgPSBvcHRpb25zID09PSB1bmRlZmluZWQ7CgkJdmFyIGxlbiA9IHRoaXMubGVuZ3RoOwoKCQlpZiAoIGVtcHR5SW5pdCApIHsKCQkJb3B0aW9ucyA9IHt9OwoJCX0KCgkJdGhpcy5vQXBpID0gdGhpcy5pbnRlcm5hbCA9IF9leHQuaW50ZXJuYWw7CgoJCS8vIEV4dGVuZCB3aXRoIG9sZCBzdHlsZSBwbHVnLWluIEFQSSBtZXRob2RzCgkJZm9yICggdmFyIGZuIGluIERhdGFUYWJsZS5leHQuaW50ZXJuYWwgKSB7CgkJCWlmICggZm4gKSB7CgkJCQl0aGlzW2ZuXSA9IF9mbkV4dGVybkFwaUZ1bmMoZm4pOwoJCQl9CgkJfQoKCQl0aGlzLmVhY2goZnVuY3Rpb24oKSB7CgkJCS8vIEZvciBlYWNoIGluaXRpYWxpc2F0aW9uIHdlIHdhbnQgdG8gZ2l2ZSBpdCBhIGNsZWFuIGluaXRpYWxpc2F0aW9uCgkJCS8vIG9iamVjdCB0aGF0IGNhbiBiZSBiYXNoZWQgYXJvdW5kCgkJCXZhciBvID0ge307CgkJCXZhciBvSW5pdCA9IGxlbiA+IDEgPyAvLyBvcHRpbWlzYXRpb24gZm9yIHNpbmdsZSB0YWJsZSBjYXNlCgkJCQlfZm5FeHRlbmQoIG8sIG9wdGlvbnMsIHRydWUgKSA6CgkJCQlvcHRpb25zOwoKCQkJLypnbG9iYWwgb0luaXQsX3RoYXQsZW1wdHlJbml0Ki8KCQkJdmFyIGk9MCwgaUxlbiwgaiwgakxlbiwgaywga0xlbjsKCQkJdmFyIHNJZCA9IHRoaXMuZ2V0QXR0cmlidXRlKCAnaWQnICk7CgkJCXZhciBiSW5pdEhhbmRlZE9mZiA9IGZhbHNlOwoJCQl2YXIgZGVmYXVsdHMgPSBEYXRhVGFibGUuZGVmYXVsdHM7CgkJCXZhciAkdGhpcyA9ICQodGhpcyk7CgkJCQoJCQkKCQkJLyogU2FuaXR5IGNoZWNrICovCgkJCWlmICggdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9ICd0YWJsZScgKQoJCQl7CgkJCQlfZm5Mb2coIG51bGwsIDAsICdOb24tdGFibGUgbm9kZSBpbml0aWFsaXNhdGlvbiAoJyt0aGlzLm5vZGVOYW1lKycpJywgMiApOwoJCQkJcmV0dXJuOwoJCQl9CgkJCQoJCQkvKiBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBmb3IgdGhlIGRlZmF1bHRzICovCgkJCV9mbkNvbXBhdE9wdHMoIGRlZmF1bHRzICk7CgkJCV9mbkNvbXBhdENvbHMoIGRlZmF1bHRzLmNvbHVtbiApOwoJCQkKCQkJLyogQ29udmVydCB0aGUgY2FtZWwtY2FzZSBkZWZhdWx0cyB0byBIdW5nYXJpYW4gKi8KCQkJX2ZuQ2FtZWxUb0h1bmdhcmlhbiggZGVmYXVsdHMsIGRlZmF1bHRzLCB0cnVlICk7CgkJCV9mbkNhbWVsVG9IdW5nYXJpYW4oIGRlZmF1bHRzLmNvbHVtbiwgZGVmYXVsdHMuY29sdW1uLCB0cnVlICk7CgkJCQoJCQkvKiBTZXR0aW5nIHVwIHRoZSBpbml0aWFsaXNhdGlvbiBvYmplY3QgKi8KCQkJX2ZuQ2FtZWxUb0h1bmdhcmlhbiggZGVmYXVsdHMsICQuZXh0ZW5kKCBvSW5pdCwgJHRoaXMuZGF0YSgpICkgKTsKCQkJCgkJCQoJCQkKCQkJLyogQ2hlY2sgdG8gc2VlIGlmIHdlIGFyZSByZS1pbml0aWFsaXNpbmcgYSB0YWJsZSAqLwoJCQl2YXIgYWxsU2V0dGluZ3MgPSBEYXRhVGFibGUuc2V0dGluZ3M7CgkJCWZvciAoIGk9MCwgaUxlbj1hbGxTZXR0aW5ncy5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCQl7CgkJCQl2YXIgcyA9IGFsbFNldHRpbmdzW2ldOwoJCQkKCQkJCS8qIEJhc2UgY2hlY2sgb24gdGFibGUgbm9kZSAqLwoJCQkJaWYgKAoJCQkJCXMublRhYmxlID09IHRoaXMgfHwKCQkJCQkocy5uVEhlYWQgJiYgcy5uVEhlYWQucGFyZW50Tm9kZSA9PSB0aGlzKSB8fAoJCQkJCShzLm5URm9vdCAmJiBzLm5URm9vdC5wYXJlbnROb2RlID09IHRoaXMpCgkJCQkpIHsKCQkJCQl2YXIgYlJldHJpZXZlID0gb0luaXQuYlJldHJpZXZlICE9PSB1bmRlZmluZWQgPyBvSW5pdC5iUmV0cmlldmUgOiBkZWZhdWx0cy5iUmV0cmlldmU7CgkJCQkJdmFyIGJEZXN0cm95ID0gb0luaXQuYkRlc3Ryb3kgIT09IHVuZGVmaW5lZCA/IG9Jbml0LmJEZXN0cm95IDogZGVmYXVsdHMuYkRlc3Ryb3k7CgkJCQoJCQkJCWlmICggZW1wdHlJbml0IHx8IGJSZXRyaWV2ZSApCgkJCQkJewoJCQkJCQlyZXR1cm4gcy5vSW5zdGFuY2U7CgkJCQkJfQoJCQkJCWVsc2UgaWYgKCBiRGVzdHJveSApCgkJCQkJewoJCQkJCQlzLm9JbnN0YW5jZS5mbkRlc3Ryb3koKTsKCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJCWVsc2UKCQkJCQl7CgkJCQkJCV9mbkxvZyggcywgMCwgJ0Nhbm5vdCByZWluaXRpYWxpc2UgRGF0YVRhYmxlJywgMyApOwoJCQkJCQlyZXR1cm47CgkJCQkJfQoJCQkJfQoJCQkKCQkJCS8qIElmIHRoZSBlbGVtZW50IHdlIGFyZSBpbml0aWFsaXNpbmcgaGFzIHRoZSBzYW1lIElEIGFzIGEgdGFibGUgd2hpY2ggd2FzIHByZXZpb3VzbHkKCQkJCSAqIGluaXRpYWxpc2VkLCBidXQgdGhlIHRhYmxlIG5vZGVzIGRvbid0IG1hdGNoIChmcm9tIGJlZm9yZSkgdGhlbiB3ZSBkZXN0cm95IHRoZSBvbGQKCQkJCSAqIGluc3RhbmNlIGJ5IHNpbXBseSBkZWxldGluZyBpdC4gVGhpcyBpcyB1bmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSB0YWJsZSBoYXMgYmVlbgoJCQkJICogZGVzdHJveWVkIGJ5IG90aGVyIG1ldGhvZHMuIEFueW9uZSB1c2luZyBub24taWQgc2VsZWN0b3JzIHdpbGwgbmVlZCB0byBkbyB0aGlzIG1hbnVhbGx5CgkJCQkgKi8KCQkJCWlmICggcy5zVGFibGVJZCA9PSB0aGlzLmlkICkKCQkJCXsKCQkJCQlhbGxTZXR0aW5ncy5zcGxpY2UoIGksIDEgKTsKCQkJCQlicmVhazsKCQkJCX0KCQkJfQoJCQkKCQkJLyogRW5zdXJlIHRoZSB0YWJsZSBoYXMgYW4gSUQgLSByZXF1aXJlZCBmb3IgYWNjZXNzaWJpbGl0eSAqLwoJCQlpZiAoIHNJZCA9PT0gbnVsbCB8fCBzSWQgPT09ICIiICkKCQkJewoJCQkJc0lkID0gIkRhdGFUYWJsZXNfVGFibGVfIisoRGF0YVRhYmxlLmV4dC5fdW5pcXVlKyspOwoJCQkJdGhpcy5pZCA9IHNJZDsKCQkJfQoJCQkKCQkJLyogQ3JlYXRlIHRoZSBzZXR0aW5ncyBvYmplY3QgZm9yIHRoaXMgdGFibGUgYW5kIHNldCBzb21lIG9mIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnMgKi8KCQkJdmFyIG9TZXR0aW5ncyA9ICQuZXh0ZW5kKCB0cnVlLCB7fSwgRGF0YVRhYmxlLm1vZGVscy5vU2V0dGluZ3MsIHsKCQkJCSJzRGVzdHJveVdpZHRoIjogJHRoaXNbMF0uc3R5bGUud2lkdGgsCgkJCQkic0luc3RhbmNlIjogICAgIHNJZCwKCQkJCSJzVGFibGVJZCI6ICAgICAgc0lkCgkJCX0gKTsKCQkJb1NldHRpbmdzLm5UYWJsZSA9IHRoaXM7CgkJCW9TZXR0aW5ncy5vQXBpICAgPSBfdGhhdC5pbnRlcm5hbDsKCQkJb1NldHRpbmdzLm9Jbml0ICA9IG9Jbml0OwoJCQkKCQkJYWxsU2V0dGluZ3MucHVzaCggb1NldHRpbmdzICk7CgkJCQoJCQkvLyBOZWVkIHRvIGFkZCB0aGUgaW5zdGFuY2UgYWZ0ZXIgdGhlIGluc3RhbmNlIGFmdGVyIHRoZSBzZXR0aW5ncyBvYmplY3QgaGFzIGJlZW4gYWRkZWQKCQkJLy8gdG8gdGhlIHNldHRpbmdzIGFycmF5LCBzbyB3ZSBjYW4gc2VsZiByZWZlcmVuY2UgdGhlIHRhYmxlIGluc3RhbmNlIGlmIG1vcmUgdGhhbiBvbmUKCQkJb1NldHRpbmdzLm9JbnN0YW5jZSA9IChfdGhhdC5sZW5ndGg9PT0xKSA/IF90aGF0IDogJHRoaXMuZGF0YVRhYmxlKCk7CgkJCQoJCQkvLyBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgYmVmb3JlIHdlIGFwcGx5IGFsbCB0aGUgZGVmYXVsdHMKCQkJX2ZuQ29tcGF0T3B0cyggb0luaXQgKTsKCQkJX2ZuTGFuZ3VhZ2VDb21wYXQoIG9Jbml0Lm9MYW5ndWFnZSApOwoJCQkKCQkJLy8gSWYgdGhlIGxlbmd0aCBtZW51IGlzIGdpdmVuLCBidXQgdGhlIGluaXQgZGlzcGxheSBsZW5ndGggaXMgbm90LCB1c2UgdGhlIGxlbmd0aCBtZW51CgkJCWlmICggb0luaXQuYUxlbmd0aE1lbnUgJiYgISBvSW5pdC5pRGlzcGxheUxlbmd0aCApCgkJCXsKCQkJCW9Jbml0LmlEaXNwbGF5TGVuZ3RoID0gJC5pc0FycmF5KCBvSW5pdC5hTGVuZ3RoTWVudVswXSApID8KCQkJCQlvSW5pdC5hTGVuZ3RoTWVudVswXVswXSA6IG9Jbml0LmFMZW5ndGhNZW51WzBdOwoJCQl9CgkJCQoJCQkvLyBBcHBseSB0aGUgZGVmYXVsdHMgYW5kIGluaXQgb3B0aW9ucyB0byBtYWtlIGEgc2luZ2xlIGluaXQgb2JqZWN0IHdpbGwgYWxsCgkJCS8vIG9wdGlvbnMgZGVmaW5lZCBmcm9tIGRlZmF1bHRzIGFuZCBpbnN0YW5jZSBvcHRpb25zLgoJCQlvSW5pdCA9IF9mbkV4dGVuZCggJC5leHRlbmQoIHRydWUsIHt9LCBkZWZhdWx0cyApLCBvSW5pdCApOwoJCQkKCQkJCgkJCS8vIE1hcCB0aGUgaW5pdGlhbGlzYXRpb24gb3B0aW9ucyBvbnRvIHRoZSBzZXR0aW5ncyBvYmplY3QKCQkJX2ZuTWFwKCBvU2V0dGluZ3Mub0ZlYXR1cmVzLCBvSW5pdCwgWwoJCQkJImJQYWdpbmF0ZSIsCgkJCQkiYkxlbmd0aENoYW5nZSIsCgkJCQkiYkZpbHRlciIsCgkJCQkiYlNvcnQiLAoJCQkJImJTb3J0TXVsdGkiLAoJCQkJImJJbmZvIiwKCQkJCSJiUHJvY2Vzc2luZyIsCgkJCQkiYkF1dG9XaWR0aCIsCgkJCQkiYlNvcnRDbGFzc2VzIiwKCQkJCSJiU2VydmVyU2lkZSIsCgkJCQkiYkRlZmVyUmVuZGVyIgoJCQldICk7CgkJCV9mbk1hcCggb1NldHRpbmdzLCBvSW5pdCwgWwoJCQkJImFzU3RyaXBlQ2xhc3NlcyIsCgkJCQkiYWpheCIsCgkJCQkiZm5TZXJ2ZXJEYXRhIiwKCQkJCSJmbkZvcm1hdE51bWJlciIsCgkJCQkic1NlcnZlck1ldGhvZCIsCgkJCQkiYWFTb3J0aW5nIiwKCQkJCSJhYVNvcnRpbmdGaXhlZCIsCgkJCQkiYUxlbmd0aE1lbnUiLAoJCQkJInNQYWdpbmF0aW9uVHlwZSIsCgkJCQkic0FqYXhTb3VyY2UiLAoJCQkJInNBamF4RGF0YVByb3AiLAoJCQkJImlTdGF0ZUR1cmF0aW9uIiwKCQkJCSJzRG9tIiwKCQkJCSJiU29ydENlbGxzVG9wIiwKCQkJCSJpVGFiSW5kZXgiLAoJCQkJImZuU3RhdGVMb2FkQ2FsbGJhY2siLAoJCQkJImZuU3RhdGVTYXZlQ2FsbGJhY2siLAoJCQkJInJlbmRlcmVyIiwKCQkJCSJzZWFyY2hEZWxheSIsCgkJCQkicm93SWQiLAoJCQkJWyAiaUNvb2tpZUR1cmF0aW9uIiwgImlTdGF0ZUR1cmF0aW9uIiBdLCAvLyBiYWNrd2FyZHMgY29tcGF0CgkJCQlbICJvU2VhcmNoIiwgIm9QcmV2aW91c1NlYXJjaCIgXSwKCQkJCVsgImFvU2VhcmNoQ29scyIsICJhb1ByZVNlYXJjaENvbHMiIF0sCgkJCQlbICJpRGlzcGxheUxlbmd0aCIsICJfaURpc3BsYXlMZW5ndGgiIF0KCQkJXSApOwoJCQlfZm5NYXAoIG9TZXR0aW5ncy5vU2Nyb2xsLCBvSW5pdCwgWwoJCQkJWyAic1Njcm9sbFgiLCAic1giIF0sCgkJCQlbICJzU2Nyb2xsWElubmVyIiwgInNYSW5uZXIiIF0sCgkJCQlbICJzU2Nyb2xsWSIsICJzWSIgXSwKCQkJCVsgImJTY3JvbGxDb2xsYXBzZSIsICJiQ29sbGFwc2UiIF0KCQkJXSApOwoJCQlfZm5NYXAoIG9TZXR0aW5ncy5vTGFuZ3VhZ2UsIG9Jbml0LCAiZm5JbmZvQ2FsbGJhY2siICk7CgkJCQoJCQkvKiBDYWxsYmFjayBmdW5jdGlvbnMgd2hpY2ggYXJlIGFycmF5IGRyaXZlbiAqLwoJCQlfZm5DYWxsYmFja1JlZyggb1NldHRpbmdzLCAnYW9EcmF3Q2FsbGJhY2snLCAgICAgICBvSW5pdC5mbkRyYXdDYWxsYmFjaywgICAgICAndXNlcicgKTsKCQkJX2ZuQ2FsbGJhY2tSZWcoIG9TZXR0aW5ncywgJ2FvU2VydmVyUGFyYW1zJywgICAgICAgb0luaXQuZm5TZXJ2ZXJQYXJhbXMsICAgICAgJ3VzZXInICk7CgkJCV9mbkNhbGxiYWNrUmVnKCBvU2V0dGluZ3MsICdhb1N0YXRlU2F2ZVBhcmFtcycsICAgIG9Jbml0LmZuU3RhdGVTYXZlUGFyYW1zLCAgICd1c2VyJyApOwoJCQlfZm5DYWxsYmFja1JlZyggb1NldHRpbmdzLCAnYW9TdGF0ZUxvYWRQYXJhbXMnLCAgICBvSW5pdC5mblN0YXRlTG9hZFBhcmFtcywgICAndXNlcicgKTsKCQkJX2ZuQ2FsbGJhY2tSZWcoIG9TZXR0aW5ncywgJ2FvU3RhdGVMb2FkZWQnLCAgICAgICAgb0luaXQuZm5TdGF0ZUxvYWRlZCwgICAgICAgJ3VzZXInICk7CgkJCV9mbkNhbGxiYWNrUmVnKCBvU2V0dGluZ3MsICdhb1Jvd0NhbGxiYWNrJywgICAgICAgIG9Jbml0LmZuUm93Q2FsbGJhY2ssICAgICAgICd1c2VyJyApOwoJCQlfZm5DYWxsYmFja1JlZyggb1NldHRpbmdzLCAnYW9Sb3dDcmVhdGVkQ2FsbGJhY2snLCBvSW5pdC5mbkNyZWF0ZWRSb3csICAgICAgICAndXNlcicgKTsKCQkJX2ZuQ2FsbGJhY2tSZWcoIG9TZXR0aW5ncywgJ2FvSGVhZGVyQ2FsbGJhY2snLCAgICAgb0luaXQuZm5IZWFkZXJDYWxsYmFjaywgICAgJ3VzZXInICk7CgkJCV9mbkNhbGxiYWNrUmVnKCBvU2V0dGluZ3MsICdhb0Zvb3RlckNhbGxiYWNrJywgICAgIG9Jbml0LmZuRm9vdGVyQ2FsbGJhY2ssICAgICd1c2VyJyApOwoJCQlfZm5DYWxsYmFja1JlZyggb1NldHRpbmdzLCAnYW9Jbml0Q29tcGxldGUnLCAgICAgICBvSW5pdC5mbkluaXRDb21wbGV0ZSwgICAgICAndXNlcicgKTsKCQkJX2ZuQ2FsbGJhY2tSZWcoIG9TZXR0aW5ncywgJ2FvUHJlRHJhd0NhbGxiYWNrJywgICAgb0luaXQuZm5QcmVEcmF3Q2FsbGJhY2ssICAgJ3VzZXInICk7CgkJCQoJCQlvU2V0dGluZ3Mucm93SWRGbiA9IF9mbkdldE9iamVjdERhdGFGbiggb0luaXQucm93SWQgKTsKCQkJCgkJCS8qIEJyb3dzZXIgc3VwcG9ydCBkZXRlY3Rpb24gKi8KCQkJX2ZuQnJvd3NlckRldGVjdCggb1NldHRpbmdzICk7CgkJCQoJCQl2YXIgb0NsYXNzZXMgPSBvU2V0dGluZ3Mub0NsYXNzZXM7CgkJCQoJCQkkLmV4dGVuZCggb0NsYXNzZXMsIERhdGFUYWJsZS5leHQuY2xhc3Nlcywgb0luaXQub0NsYXNzZXMgKTsKCQkJJHRoaXMuYWRkQ2xhc3MoIG9DbGFzc2VzLnNUYWJsZSApOwoJCQkKCQkJCgkJCWlmICggb1NldHRpbmdzLmlJbml0RGlzcGxheVN0YXJ0ID09PSB1bmRlZmluZWQgKQoJCQl7CgkJCQkvKiBEaXNwbGF5IHN0YXJ0IHBvaW50LCB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBzYXZlIHNhdmluZyAqLwoJCQkJb1NldHRpbmdzLmlJbml0RGlzcGxheVN0YXJ0ID0gb0luaXQuaURpc3BsYXlTdGFydDsKCQkJCW9TZXR0aW5ncy5faURpc3BsYXlTdGFydCA9IG9Jbml0LmlEaXNwbGF5U3RhcnQ7CgkJCX0KCQkJCgkJCWlmICggb0luaXQuaURlZmVyTG9hZGluZyAhPT0gbnVsbCApCgkJCXsKCQkJCW9TZXR0aW5ncy5iRGVmZXJMb2FkaW5nID0gdHJ1ZTsKCQkJCXZhciB0bXAgPSAkLmlzQXJyYXkoIG9Jbml0LmlEZWZlckxvYWRpbmcgKTsKCQkJCW9TZXR0aW5ncy5faVJlY29yZHNEaXNwbGF5ID0gdG1wID8gb0luaXQuaURlZmVyTG9hZGluZ1swXSA6IG9Jbml0LmlEZWZlckxvYWRpbmc7CgkJCQlvU2V0dGluZ3MuX2lSZWNvcmRzVG90YWwgPSB0bXAgPyBvSW5pdC5pRGVmZXJMb2FkaW5nWzFdIDogb0luaXQuaURlZmVyTG9hZGluZzsKCQkJfQoJCQkKCQkJLyogTGFuZ3VhZ2UgZGVmaW5pdGlvbnMgKi8KCQkJdmFyIG9MYW5ndWFnZSA9IG9TZXR0aW5ncy5vTGFuZ3VhZ2U7CgkJCSQuZXh0ZW5kKCB0cnVlLCBvTGFuZ3VhZ2UsIG9Jbml0Lm9MYW5ndWFnZSApOwoJCQkKCQkJaWYgKCBvTGFuZ3VhZ2Uuc1VybCApCgkJCXsKCQkJCS8qIEdldCB0aGUgbGFuZ3VhZ2UgZGVmaW5pdGlvbnMgZnJvbSBhIGZpbGUgLSBiZWNhdXNlIHRoaXMgQWpheCBjYWxsIG1ha2VzIHRoZSBsYW5ndWFnZQoJCQkJICogZ2V0IGFzeW5jIHRvIHRoZSByZW1haW5kZXIgb2YgdGhpcyBmdW5jdGlvbiB3ZSB1c2UgYkluaXRIYW5kZWRPZmYgdG8gaW5kaWNhdGUgdGhhdAoJCQkJICogX2ZuSW5pdGlhbGlzZSB3aWxsIGJlIGZpcmVkIGJ5IHRoZSByZXR1cm5lZCBBamF4IGhhbmRsZXIsIHJhdGhlciB0aGFuIHRoZSBjb25zdHJ1Y3RvcgoJCQkJICovCgkJCQkkLmFqYXgoIHsKCQkJCQlkYXRhVHlwZTogJ2pzb24nLAoJCQkJCXVybDogb0xhbmd1YWdlLnNVcmwsCgkJCQkJc3VjY2VzczogZnVuY3Rpb24gKCBqc29uICkgewoJCQkJCQlfZm5MYW5ndWFnZUNvbXBhdCgganNvbiApOwoJCQkJCQlfZm5DYW1lbFRvSHVuZ2FyaWFuKCBkZWZhdWx0cy5vTGFuZ3VhZ2UsIGpzb24gKTsKCQkJCQkJJC5leHRlbmQoIHRydWUsIG9MYW5ndWFnZSwganNvbiApOwoJCQkJCQlfZm5Jbml0aWFsaXNlKCBvU2V0dGluZ3MgKTsKCQkJCQl9LAoJCQkJCWVycm9yOiBmdW5jdGlvbiAoKSB7CgkJCQkJCS8vIEVycm9yIG9jY3VycmVkIGxvYWRpbmcgbGFuZ3VhZ2UgZmlsZSwgY29udGludWUgb24gYXMgYmVzdCB3ZSBjYW4KCQkJCQkJX2ZuSW5pdGlhbGlzZSggb1NldHRpbmdzICk7CgkJCQkJfQoJCQkJfSApOwoJCQkJYkluaXRIYW5kZWRPZmYgPSB0cnVlOwoJCQl9CgkJCQoJCQkvKgoJCQkgKiBTdHJpcGVzCgkJCSAqLwoJCQlpZiAoIG9Jbml0LmFzU3RyaXBlQ2xhc3NlcyA9PT0gbnVsbCApCgkJCXsKCQkJCW9TZXR0aW5ncy5hc1N0cmlwZUNsYXNzZXMgPVsKCQkJCQlvQ2xhc3Nlcy5zU3RyaXBlT2RkLAoJCQkJCW9DbGFzc2VzLnNTdHJpcGVFdmVuCgkJCQldOwoJCQl9CgkJCQoJCQkvKiBSZW1vdmUgcm93IHN0cmlwZSBjbGFzc2VzIGlmIHRoZXkgYXJlIGFscmVhZHkgb24gdGhlIHRhYmxlIHJvdyAqLwoJCQl2YXIgc3RyaXBlQ2xhc3NlcyA9IG9TZXR0aW5ncy5hc1N0cmlwZUNsYXNzZXM7CgkJCXZhciByb3dPbmUgPSAkdGhpcy5jaGlsZHJlbigndGJvZHknKS5maW5kKCd0cicpLmVxKDApOwoJCQlpZiAoICQuaW5BcnJheSggdHJ1ZSwgJC5tYXAoIHN0cmlwZUNsYXNzZXMsIGZ1bmN0aW9uKGVsLCBpKSB7CgkJCQlyZXR1cm4gcm93T25lLmhhc0NsYXNzKGVsKTsKCQkJfSApICkgIT09IC0xICkgewoJCQkJJCgndGJvZHkgdHInLCB0aGlzKS5yZW1vdmVDbGFzcyggc3RyaXBlQ2xhc3Nlcy5qb2luKCcgJykgKTsKCQkJCW9TZXR0aW5ncy5hc0Rlc3Ryb3lTdHJpcGVzID0gc3RyaXBlQ2xhc3Nlcy5zbGljZSgpOwoJCQl9CgkJCQoJCQkvKgoJCQkgKiBDb2x1bW5zCgkJCSAqIFNlZSBpZiB3ZSBzaG91bGQgbG9hZCBjb2x1bW5zIGF1dG9tYXRpY2FsbHkgb3IgdXNlIGRlZmluZWQgb25lcwoJCQkgKi8KCQkJdmFyIGFuVGhzID0gW107CgkJCXZhciBhb0NvbHVtbnNJbml0OwoJCQl2YXIgblRoZWFkID0gdGhpcy5nZXRFbGVtZW50c0J5VGFnTmFtZSgndGhlYWQnKTsKCQkJaWYgKCBuVGhlYWQubGVuZ3RoICE9PSAwICkKCQkJewoJCQkJX2ZuRGV0ZWN0SGVhZGVyKCBvU2V0dGluZ3MuYW9IZWFkZXIsIG5UaGVhZFswXSApOwoJCQkJYW5UaHMgPSBfZm5HZXRVbmlxdWVUaHMoIG9TZXR0aW5ncyApOwoJCQl9CgkJCQoJCQkvKiBJZiBub3QgZ2l2ZW4gYSBjb2x1bW4gYXJyYXksIGdlbmVyYXRlIG9uZSB3aXRoIG51bGxzICovCgkJCWlmICggb0luaXQuYW9Db2x1bW5zID09PSBudWxsICkKCQkJewoJCQkJYW9Db2x1bW5zSW5pdCA9IFtdOwoJCQkJZm9yICggaT0wLCBpTGVuPWFuVGhzLmxlbmd0aCA7IGk8aUxlbiA7IGkrKyApCgkJCQl7CgkJCQkJYW9Db2x1bW5zSW5pdC5wdXNoKCBudWxsICk7CgkJCQl9CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQlhb0NvbHVtbnNJbml0ID0gb0luaXQuYW9Db2x1bW5zOwoJCQl9CgkJCQoJCQkvKiBBZGQgdGhlIGNvbHVtbnMgKi8KCQkJZm9yICggaT0wLCBpTGVuPWFvQ29sdW1uc0luaXQubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkKCQkJewoJCQkJX2ZuQWRkQ29sdW1uKCBvU2V0dGluZ3MsIGFuVGhzID8gYW5UaHNbaV0gOiBudWxsICk7CgkJCX0KCQkJCgkJCS8qIEFwcGx5IHRoZSBjb2x1bW4gZGVmaW5pdGlvbnMgKi8KCQkJX2ZuQXBwbHlDb2x1bW5EZWZzKCBvU2V0dGluZ3MsIG9Jbml0LmFvQ29sdW1uRGVmcywgYW9Db2x1bW5zSW5pdCwgZnVuY3Rpb24gKGlDb2wsIG9EZWYpIHsKCQkJCV9mbkNvbHVtbk9wdGlvbnMoIG9TZXR0aW5ncywgaUNvbCwgb0RlZiApOwoJCQl9ICk7CgkJCQoJCQkvKiBIVE1MNSBhdHRyaWJ1dGUgZGV0ZWN0aW9uIC0gYnVpbGQgYW4gbURhdGEgb2JqZWN0IGF1dG9tYXRpY2FsbHkgaWYgdGhlCgkJCSAqIGF0dHJpYnV0ZXMgYXJlIGZvdW5kCgkJCSAqLwoJCQlpZiAoIHJvd09uZS5sZW5ndGggKSB7Cg=="
},
{
"key": "jquery.dataTables.js?4?2?0",
"type": "binary",
"value": "base64:CQkJCXZhciBhID0gZnVuY3Rpb24gKCBjZWxsLCBuYW1lICkgewoJCQkJCXJldHVybiBjZWxsLmdldEF0dHJpYnV0ZSggJ2RhdGEtJytuYW1lICkgIT09IG51bGwgPyBuYW1lIDogbnVsbDsKCQkJCX07CgkJCQoJCQkJJCggcm93T25lWzBdICkuY2hpbGRyZW4oJ3RoLCB0ZCcpLmVhY2goIGZ1bmN0aW9uIChpLCBjZWxsKSB7CgkJCQkJdmFyIGNvbCA9IG9TZXR0aW5ncy5hb0NvbHVtbnNbaV07CgkJCQoJCQkJCWlmICggY29sLm1EYXRhID09PSBpICkgewoJCQkJCQl2YXIgc29ydCA9IGEoIGNlbGwsICdzb3J0JyApIHx8IGEoIGNlbGwsICdvcmRlcicgKTsKCQkJCQkJdmFyIGZpbHRlciA9IGEoIGNlbGwsICdmaWx0ZXInICkgfHwgYSggY2VsbCwgJ3NlYXJjaCcgKTsKCQkJCgkJCQkJCWlmICggc29ydCAhPT0gbnVsbCB8fCBmaWx0ZXIgIT09IG51bGwgKSB7CgkJCQkJCQljb2wubURhdGEgPSB7CgkJCQkJCQkJXzogICAgICBpKycuZGlzcGxheScsCgkJCQkJCQkJc29ydDogICBzb3J0ICE9PSBudWxsICAgPyBpKycuQGRhdGEtJytzb3J0ICAgOiB1bmRlZmluZWQsCgkJCQkJCQkJdHlwZTogICBzb3J0ICE9PSBudWxsICAgPyBpKycuQGRhdGEtJytzb3J0ICAgOiB1bmRlZmluZWQsCgkJCQkJCQkJZmlsdGVyOiBmaWx0ZXIgIT09IG51bGwgPyBpKycuQGRhdGEtJytmaWx0ZXIgOiB1bmRlZmluZWQKCQkJCQkJCX07CgkJCQoJCQkJCQkJX2ZuQ29sdW1uT3B0aW9ucyggb1NldHRpbmdzLCBpICk7CgkJCQkJCX0KCQkJCQl9CgkJCQl9ICk7CgkJCX0KCQkJCgkJCXZhciBmZWF0dXJlcyA9IG9TZXR0aW5ncy5vRmVhdHVyZXM7CgkJCXZhciBsb2FkZWRJbml0ID0gZnVuY3Rpb24gKCkgewoJCQkJLyoKCQkJCSAqIFNvcnRpbmcKCQkJCSAqIEB0b2RvIEZvciBtb2R1bGFyaXNhdGlvbiAoMS4xMSkgdGhpcyBuZWVkcyB0byBkbyBpbnRvIGEgc29ydCBzdGFydCB1cCBoYW5kbGVyCgkJCQkgKi8KCQkJCgkJCQkvLyBJZiBhYVNvcnRpbmcgaXMgbm90IGRlZmluZWQsIHRoZW4gd2UgdXNlIHRoZSBmaXJzdCBpbmRpY2F0b3IgaW4gYXNTb3J0aW5nCgkJCQkvLyBpbiBjYXNlIHRoYXQgaGFzIGJlZW4gYWx0ZXJlZCwgc28gdGhlIGRlZmF1bHQgc29ydCByZWZsZWN0cyB0aGF0IG9wdGlvbgoJCQkJaWYgKCBvSW5pdC5hYVNvcnRpbmcgPT09IHVuZGVmaW5lZCApIHsKCQkJCQl2YXIgc29ydGluZyA9IG9TZXR0aW5ncy5hYVNvcnRpbmc7CgkJCQkJZm9yICggaT0wLCBpTGVuPXNvcnRpbmcubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkgewoJCQkJCQlzb3J0aW5nW2ldWzFdID0gb1NldHRpbmdzLmFvQ29sdW1uc1sgaSBdLmFzU29ydGluZ1swXTsKCQkJCQl9CgkJCQl9CgkJCQoJCQkJLyogRG8gYSBmaXJzdCBwYXNzIG9uIHRoZSBzb3J0aW5nIGNsYXNzZXMgKGFsbG93cyBhbnkgc2l6ZSBjaGFuZ2VzIHRvIGJlIHRha2VuIGludG8KCQkJCSAqIGFjY291bnQsIGFuZCBhbHNvIHdpbGwgYXBwbHkgc29ydGluZyBkaXNhYmxlZCBjbGFzc2VzIGlmIGRpc2FibGVkCgkJCQkgKi8KCQkJCV9mblNvcnRpbmdDbGFzc2VzKCBvU2V0dGluZ3MgKTsKCQkJCgkJCQlpZiAoIGZlYXR1cmVzLmJTb3J0ICkgewoJCQkJCV9mbkNhbGxiYWNrUmVnKCBvU2V0dGluZ3MsICdhb0RyYXdDYWxsYmFjaycsIGZ1bmN0aW9uICgpIHsKCQkJCQkJaWYgKCBvU2V0dGluZ3MuYlNvcnRlZCApIHsKCQkJCQkJCXZhciBhU29ydCA9IF9mblNvcnRGbGF0dGVuKCBvU2V0dGluZ3MgKTsKCQkJCQkJCXZhciBzb3J0ZWRDb2x1bW5zID0ge307CgkJCQoJCQkJCQkJJC5lYWNoKCBhU29ydCwgZnVuY3Rpb24gKGksIHZhbCkgewoJCQkJCQkJCXNvcnRlZENvbHVtbnNbIHZhbC5zcmMgXSA9IHZhbC5kaXI7CgkJCQkJCQl9ICk7CgkJCQoJCQkJCQkJX2ZuQ2FsbGJhY2tGaXJlKCBvU2V0dGluZ3MsIG51bGwsICdvcmRlcicsIFtvU2V0dGluZ3MsIGFTb3J0LCBzb3J0ZWRDb2x1bW5zXSApOwoJCQkJCQkJX2ZuU29ydEFyaWEoIG9TZXR0aW5ncyApOwoJCQkJCQl9CgkJCQkJfSApOwoJCQkJfQoJCQkKCQkJCV9mbkNhbGxiYWNrUmVnKCBvU2V0dGluZ3MsICdhb0RyYXdDYWxsYmFjaycsIGZ1bmN0aW9uICgpIHsKCQkJCQlpZiAoIG9TZXR0aW5ncy5iU29ydGVkIHx8IF9mbkRhdGFTb3VyY2UoIG9TZXR0aW5ncyApID09PSAnc3NwJyB8fCBmZWF0dXJlcy5iRGVmZXJSZW5kZXIgKSB7CgkJCQkJCV9mblNvcnRpbmdDbGFzc2VzKCBvU2V0dGluZ3MgKTsKCQkJCQl9CgkJCQl9LCAnc2MnICk7CgkJCQoJCQkKCQkJCS8qCgkJCQkgKiBGaW5hbCBpbml0CgkJCQkgKiBDYWNoZSB0aGUgaGVhZGVyLCBib2R5IGFuZCBmb290ZXIgYXMgcmVxdWlyZWQsIGNyZWF0aW5nIHRoZW0gaWYgbmVlZGVkCgkJCQkgKi8KCQkJCgkJCQkvLyBXb3JrIGFyb3VuZCBmb3IgV2Via2l0IGJ1ZyA4Mzg2NyAtIHN0b3JlIHRoZSBjYXB0aW9uLXNpZGUgYmVmb3JlIHJlbW92aW5nIGZyb20gZG9jCgkJCQl2YXIgY2FwdGlvbnMgPSAkdGhpcy5jaGlsZHJlbignY2FwdGlvbicpLmVhY2goIGZ1bmN0aW9uICgpIHsKCQkJCQl0aGlzLl9jYXB0aW9uU2lkZSA9ICQodGhpcykuY3NzKCdjYXB0aW9uLXNpZGUnKTsKCQkJCX0gKTsKCQkJCgkJCQl2YXIgdGhlYWQgPSAkdGhpcy5jaGlsZHJlbigndGhlYWQnKTsKCQkJCWlmICggdGhlYWQubGVuZ3RoID09PSAwICkgewoJCQkJCXRoZWFkID0gJCgnPHRoZWFkLz4nKS5hcHBlbmRUbygkdGhpcyk7CgkJCQl9CgkJCQlvU2V0dGluZ3MublRIZWFkID0gdGhlYWRbMF07CgkJCQoJCQkJdmFyIHRib2R5ID0gJHRoaXMuY2hpbGRyZW4oJ3Rib2R5Jyk7CgkJCQlpZiAoIHRib2R5Lmxlbmd0aCA9PT0gMCApIHsKCQkJCQl0Ym9keSA9ICQoJzx0Ym9keS8+JykuYXBwZW5kVG8oJHRoaXMpOwoJCQkJfQoJCQkJb1NldHRpbmdzLm5UQm9keSA9IHRib2R5WzBdOwoJCQkKCQkJCXZhciB0Zm9vdCA9ICR0aGlzLmNoaWxkcmVuKCd0Zm9vdCcpOwoJCQkJaWYgKCB0Zm9vdC5sZW5ndGggPT09IDAgJiYgY2FwdGlvbnMubGVuZ3RoID4gMCAmJiAob1NldHRpbmdzLm9TY3JvbGwuc1ggIT09ICIiIHx8IG9TZXR0aW5ncy5vU2Nyb2xsLnNZICE9PSAiIikgKSB7CgkJCQkJLy8gSWYgd2UgYXJlIGEgc2Nyb2xsaW5nIHRhYmxlLCBhbmQgbm8gZm9vdGVyIGhhcyBiZWVuIGdpdmVuLCB0aGVuIHdlIG5lZWQgdG8gY3JlYXRlCgkJCQkJLy8gYSB0Zm9vdCBlbGVtZW50IGZvciB0aGUgY2FwdGlvbiBlbGVtZW50IHRvIGJlIGFwcGVuZGVkIHRvCgkJCQkJdGZvb3QgPSAkKCc8dGZvb3QvPicpLmFwcGVuZFRvKCR0aGlzKTsKCQkJCX0KCQkJCgkJCQlpZiAoIHRmb290Lmxlbmd0aCA9PT0gMCB8fCB0Zm9vdC5jaGlsZHJlbigpLmxlbmd0aCA9PT0gMCApIHsKCQkJCQkkdGhpcy5hZGRDbGFzcyggb0NsYXNzZXMuc05vRm9vdGVyICk7CgkJCQl9CgkJCQllbHNlIGlmICggdGZvb3QubGVuZ3RoID4gMCApIHsKCQkJCQlvU2V0dGluZ3MublRGb290ID0gdGZvb3RbMF07CgkJCQkJX2ZuRGV0ZWN0SGVhZGVyKCBvU2V0dGluZ3MuYW9Gb290ZXIsIG9TZXR0aW5ncy5uVEZvb3QgKTsKCQkJCX0KCQkJCgkJCQkvKiBDaGVjayBpZiB0aGVyZSBpcyBkYXRhIHBhc3NpbmcgaW50byB0aGUgY29uc3RydWN0b3IgKi8KCQkJCWlmICggb0luaXQuYWFEYXRhICkgewoJCQkJCWZvciAoIGk9MCA7IGk8b0luaXQuYWFEYXRhLmxlbmd0aCA7IGkrKyApIHsKCQkJCQkJX2ZuQWRkRGF0YSggb1NldHRpbmdzLCBvSW5pdC5hYURhdGFbIGkgXSApOwoJCQkJCX0KCQkJCX0KCQkJCWVsc2UgaWYgKCBvU2V0dGluZ3MuYkRlZmVyTG9hZGluZyB8fCBfZm5EYXRhU291cmNlKCBvU2V0dGluZ3MgKSA9PSAnZG9tJyApIHsKCQkJCQkvKiBHcmFiIHRoZSBkYXRhIGZyb20gdGhlIHBhZ2UgLSBvbmx5IGRvIHRoaXMgd2hlbiBkZWZlcnJlZCBsb2FkaW5nIG9yIG5vIEFqYXgKCQkJCQkgKiBzb3VyY2Ugc2luY2UgdGhlcmUgaXMgbm8gcG9pbnQgaW4gcmVhZGluZyB0aGUgRE9NIGRhdGEgaWYgd2UgYXJlIHRoZW4gZ29pbmcKCQkJCQkgKiB0byByZXBsYWNlIGl0IHdpdGggQWpheCBkYXRhCgkJCQkJICovCgkJCQkJX2ZuQWRkVHIoIG9TZXR0aW5ncywgJChvU2V0dGluZ3MublRCb2R5KS5jaGlsZHJlbigndHInKSApOwoJCQkJfQoJCQkKCQkJCS8qIENvcHkgdGhlIGRhdGEgaW5kZXggYXJyYXkgKi8KCQkJCW9TZXR0aW5ncy5haURpc3BsYXkgPSBvU2V0dGluZ3MuYWlEaXNwbGF5TWFzdGVyLnNsaWNlKCk7CgkJCQoJCQkJLyogSW5pdGlhbGlzYXRpb24gY29tcGxldGUgLSB0YWJsZSBjYW4gYmUgZHJhd24gKi8KCQkJCW9TZXR0aW5ncy5iSW5pdGlhbGlzZWQgPSB0cnVlOwoJCQkKCQkJCS8qIENoZWNrIGlmIHdlIG5lZWQgdG8gaW5pdGlhbGlzZSB0aGUgdGFibGUgKGl0IG1pZ2h0IG5vdCBoYXZlIGJlZW4gaGFuZGVkIG9mZiB0byB0aGUKCQkJCSAqIGxhbmd1YWdlIHByb2Nlc3NvcikKCQkJCSAqLwoJCQkJaWYgKCBiSW5pdEhhbmRlZE9mZiA9PT0gZmFsc2UgKSB7CgkJCQkJX2ZuSW5pdGlhbGlzZSggb1NldHRpbmdzICk7CgkJCQl9CgkJCX07CgkJCQoJCQkvKiBNdXN0IGJlIGRvbmUgYWZ0ZXIgZXZlcnl0aGluZyB3aGljaCBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgc3RhdGUgc2F2aW5nISAqLwoJCQlpZiAoIG9Jbml0LmJTdGF0ZVNhdmUgKQoJCQl7CgkJCQlmZWF0dXJlcy5iU3RhdGVTYXZlID0gdHJ1ZTsKCQkJCV9mbkNhbGxiYWNrUmVnKCBvU2V0dGluZ3MsICdhb0RyYXdDYWxsYmFjaycsIF9mblNhdmVTdGF0ZSwgJ3N0YXRlX3NhdmUnICk7CgkJCQlfZm5Mb2FkU3RhdGUoIG9TZXR0aW5ncywgb0luaXQsIGxvYWRlZEluaXQgKTsKCQkJfQoJCQllbHNlIHsKCQkJCWxvYWRlZEluaXQoKTsKCQkJfQoJCQkKCQl9ICk7CgkJX3RoYXQgPSBudWxsOwoJCXJldHVybiB0aGlzOwoJfTsKCgkKCS8qCgkgKiBJdCBpcyB1c2VmdWwgdG8gaGF2ZSB2YXJpYWJsZXMgd2hpY2ggYXJlIHNjb3BlZCBsb2NhbGx5IHNvIG9ubHkgdGhlCgkgKiBEYXRhVGFibGVzIGZ1bmN0aW9ucyBjYW4gYWNjZXNzIHRoZW0gYW5kIHRoZXkgZG9uJ3QgbGVhayBpbnRvIGdsb2JhbCBzcGFjZS4KCSAqIEF0IHRoZSBzYW1lIHRpbWUgdGhlc2UgZnVuY3Rpb25zIGFyZSBvZnRlbiB1c2VmdWwgb3ZlciBtdWx0aXBsZSBmaWxlcyBpbiB0aGUKCSAqIGNvcmUgYW5kIEFQSSwgc28gd2UgbGlzdCwgb3IgYXQgbGVhc3QgZG9jdW1lbnQsIGFsbCB2YXJpYWJsZXMgd2hpY2ggYXJlIHVzZWQKCSAqIGJ5IERhdGFUYWJsZXMgYXMgcHJpdmF0ZSB2YXJpYWJsZXMgaGVyZS4gVGhpcyBhbHNvIGVuc3VyZXMgdGhhdCB0aGVyZSBpcyBubwoJICogY2xhc2hpbmcgb2YgdmFyaWFibGUgbmFtZXMgYW5kIHRoYXQgdGhleSBjYW4gZWFzaWx5IHJlZmVyZW5jZWQgZm9yIHJldXNlLgoJICovCgkKCQoJLy8gRGVmaW5lZCBlbHNlIHdoZXJlCgkvLyAgX3NlbGVjdG9yX3J1bgoJLy8gIF9zZWxlY3Rvcl9vcHRzCgkvLyAgX3NlbGVjdG9yX2ZpcnN0CgkvLyAgX3NlbGVjdG9yX3Jvd19pbmRleGVzCgkKCXZhciBfZXh0OyAvLyBEYXRhVGFibGUuZXh0Cgl2YXIgX0FwaTsgLy8gRGF0YVRhYmxlLkFwaQoJdmFyIF9hcGlfcmVnaXN0ZXI7IC8vIERhdGFUYWJsZS5BcGkucmVnaXN0ZXIKCXZhciBfYXBpX3JlZ2lzdGVyUGx1cmFsOyAvLyBEYXRhVGFibGUuQXBpLnJlZ2lzdGVyUGx1cmFsCgkKCXZhciBfcmVfZGljID0ge307Cgl2YXIgX3JlX25ld19saW5lcyA9IC9bXHJcbl0vZzsKCXZhciBfcmVfaHRtbCA9IC88Lio/Pi9nOwoJCgkvLyBUaGlzIGlzIG5vdCBzdHJpY3QgSVNPODYwMSAtIERhdGUucGFyc2UoKSBpcyBxdWl0ZSBsYXgsIGFsdGhvdWdoCgkvLyBpbXBsZW1lbnRhdGlvbnMgZGlmZmVyIGJldHdlZW4gYnJvd3NlcnMuCgl2YXIgX3JlX2RhdGUgPSAvXlxkezIsNH1bXC5cL1wtXVxkezEsMn1bXC5cL1wtXVxkezEsMn0oW1QgXXsxfVxkezEsMn1bOlwuXVxkezJ9KFtcLjpdXGR7Mn0pPyk/JC87CgkKCS8vIEVzY2FwZSByZWd1bGFyIGV4cHJlc3Npb24gc3BlY2lhbCBjaGFyYWN0ZXJzCgl2YXIgX3JlX2VzY2FwZV9yZWdleCA9IG5ldyBSZWdFeHAoICcoXFwnICsgWyAnLycsICcuJywgJyonLCAnKycsICc/JywgJ3wnLCAnKCcsICcpJywgJ1snLCAnXScsICd7JywgJ30nLCAnXFwnLCAnJCcsICdeJywgJy0nIF0uam9pbignfFxcJykgKyAnKScsICdnJyApOwoJCgkvLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0ZvcmVpZ25fZXhjaGFuZ2VfbWFya2V0CgkvLyAtIFx1MjBCRCAtIFJ1c3NpYW4gcnVibGUuCgkvLyAtIFx1MjBhOSAtIFNvdXRoIEtvcmVhbiBXb24KCS8vIC0gXHUyMEJBIC0gVHVya2lzaCBMaXJhCgkvLyAtIFx1MjBCOSAtIEluZGlhbiBSdXBlZQoJLy8gLSBSIC0gQnJhemlsIChSJCkgYW5kIFNvdXRoIEFmcmljYQoJLy8gLSBmciAtIFN3aXNzIEZyYW5jCgkvLyAtIGtyIC0gU3dlZGlzaCBrcm9uYSwgTm9yd2VnaWFuIGtyb25lIGFuZCBEYW5pc2gga3JvbmUKCS8vIC0gXHUyMDA5IGlzIHRoaW4gc3BhY2UgYW5kIFx1MjAyRiBpcyBuYXJyb3cgbm8tYnJlYWsgc3BhY2UsIGJvdGggdXNlZCBpbiBtYW55CgkvLyAtIMmDIC0gQml0Y29pbgoJLy8gLSDOniAtIEV0aGVyZXVtCgkvLyAgIHN0YW5kYXJkcyBhcyB0aG91c2FuZHMgc2VwYXJhdG9ycy4KCXZhciBfcmVfZm9ybWF0dGVkX251bWVyaWMgPSAvWycsJMKj4oKswqUlXHUyMDA5XHUyMDJGXHUyMEJEXHUyMGE5XHUyMEJBcmZryYPOnl0vZ2k7CgkKCQoJdmFyIF9lbXB0eSA9IGZ1bmN0aW9uICggZCApIHsKCQlyZXR1cm4gIWQgfHwgZCA9PT0gdHJ1ZSB8fCBkID09PSAnLScgPyB0cnVlIDogZmFsc2U7Cgl9OwoJCgkKCXZhciBfaW50VmFsID0gZnVuY3Rpb24gKCBzICkgewoJCXZhciBpbnRlZ2VyID0gcGFyc2VJbnQoIHMsIDEwICk7CgkJcmV0dXJuICFpc05hTihpbnRlZ2VyKSAmJiBpc0Zpbml0ZShzKSA/IGludGVnZXIgOiBudWxsOwoJfTsKCQoJLy8gQ29udmVydCBmcm9tIGEgZm9ybWF0dGVkIG51bWJlciB3aXRoIGNoYXJhY3RlcnMgb3RoZXIgdGhhbiBgLmAgYXMgdGhlCgkvLyBkZWNpbWFsIHBsYWNlLCB0byBhIEphdmFzY3JpcHQgbnVtYmVyCgl2YXIgX251bVRvRGVjaW1hbCA9IGZ1bmN0aW9uICggbnVtLCBkZWNpbWFsUG9pbnQgKSB7CgkJLy8gQ2FjaGUgY3JlYXRlZCByZWd1bGFyIGV4cHJlc3Npb25zIGZvciBzcGVlZCBhcyB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvZnRlbgoJCWlmICggISBfcmVfZGljWyBkZWNpbWFsUG9pbnQgXSApIHsKCQkJX3JlX2RpY1sgZGVjaW1hbFBvaW50IF0gPSBuZXcgUmVnRXhwKCBfZm5Fc2NhcGVSZWdleCggZGVjaW1hbFBvaW50ICksICdnJyApOwoJCX0KCQlyZXR1cm4gdHlwZW9mIG51bSA9PT0gJ3N0cmluZycgJiYgZGVjaW1hbFBvaW50ICE9PSAnLicgPwoJCQludW0ucmVwbGFjZSggL1wuL2csICcnICkucmVwbGFjZSggX3JlX2RpY1sgZGVjaW1hbFBvaW50IF0sICcuJyApIDoKCQkJbnVtOwoJfTsKCQoJCgl2YXIgX2lzTnVtYmVyID0gZnVuY3Rpb24gKCBkLCBkZWNpbWFsUG9pbnQsIGZvcm1hdHRlZCApIHsKCQl2YXIgc3RyVHlwZSA9IHR5cGVvZiBkID09PSAnc3RyaW5nJzsKCQoJCS8vIElmIGVtcHR5IHJldHVybiBpbW1lZGlhdGVseSBzbyB0aGVyZSBtdXN0IGJlIGEgbnVtYmVyIGlmIGl0IGlzIGEKCQkvLyBmb3JtYXR0ZWQgc3RyaW5nICh0aGlzIHN0b3BzIHRoZSBzdHJpbmcgImsiLCBvciAia3IiLCBldGMgYmVpbmcgZGV0ZWN0ZWQKCQkvLyBhcyBhIGZvcm1hdHRlZCBudW1iZXIgZm9yIGN1cnJlbmN5CgkJaWYgKCBfZW1wdHkoIGQgKSApIHsKCQkJcmV0dXJuIHRydWU7CgkJfQoJCgkJaWYgKCBkZWNpbWFsUG9pbnQgJiYgc3RyVHlwZSApIHsKCQkJZCA9IF9udW1Ub0RlY2ltYWwoIGQsIGRlY2ltYWxQb2ludCApOwoJCX0KCQoJCWlmICggZm9ybWF0dGVkICYmIHN0clR5cGUgKSB7CgkJCWQgPSBkLnJlcGxhY2UoIF9yZV9mb3JtYXR0ZWRfbnVtZXJpYywgJycgKTsKCQl9CgkKCQlyZXR1cm4gIWlzTmFOKCBwYXJzZUZsb2F0KGQpICkgJiYgaXNGaW5pdGUoIGQgKTsKCX07CgkKCQoJLy8gQSBzdHJpbmcgd2l0aG91dCBIVE1MIGluIGl0IGNhbiBiZSBjb25zaWRlcmVkIHRvIGJlIEhUTUwgc3RpbGwKCXZhciBfaXNIdG1sID0gZnVuY3Rpb24gKCBkICkgewoJCXJldHVybiBfZW1wdHkoIGQgKSB8fCB0eXBlb2YgZCA9PT0gJ3N0cmluZyc7Cgl9OwoJCgkKCXZhciBfaHRtbE51bWVyaWMgPSBmdW5jdGlvbiAoIGQsIGRlY2ltYWxQb2ludCwgZm9ybWF0dGVkICkgewoJCWlmICggX2VtcHR5KCBkICkgKSB7CgkJCXJldHVybiB0cnVlOwoJCX0KCQoJCXZhciBodG1sID0gX2lzSHRtbCggZCApOwoJCXJldHVybiAhIGh0bWwgPwoJCQludWxsIDoKCQkJX2lzTnVtYmVyKCBfc3RyaXBIdG1sKCBkICksIGRlY2ltYWxQb2ludCwgZm9ybWF0dGVkICkgPwoJCQkJdHJ1ZSA6CgkJCQludWxsOwoJfTsKCQoJCgl2YXIgX3BsdWNrID0gZnVuY3Rpb24gKCBhLCBwcm9wLCBwcm9wMiApIHsKCQl2YXIgb3V0ID0gW107CgkJdmFyIGk9MCwgaWVuPWEubGVuZ3RoOwoJCgkJLy8gQ291bGQgaGF2ZSB0aGUgdGVzdCBpbiB0aGUgbG9vcCBmb3Igc2xpZ2h0bHkgc21hbGxlciBjb2RlLCBidXQgc3BlZWQKCQkvLyBpcyBlc3NlbnRpYWwgaGVyZQoJCWlmICggcHJvcDIgIT09IHVuZGVmaW5lZCApIHsKCQkJZm9yICggOyBpPGllbiA7IGkrKyApIHsKCQkJCWlmICggYVtpXSAmJiBhW2ldWyBwcm9wIF0gKSB7CgkJCQkJb3V0LnB1c2goIGFbaV1bIHByb3AgXVsgcHJvcDIgXSApOwoJCQkJfQoJCQl9CgkJfQoJCWVsc2UgewoJCQlmb3IgKCA7IGk8aWVuIDsgaSsrICkgewoJCQkJaWYgKCBhW2ldICkgewoJCQkJCW91dC5wdXNoKCBhW2ldWyBwcm9wIF0gKTsKCQkJCX0KCQkJfQoJCX0KCQoJCXJldHVybiBvdXQ7Cgl9OwoJCgkKCS8vIEJhc2ljYWxseSB0aGUgc2FtZSBhcyBfcGx1Y2ssIGJ1dCByYXRoZXIgdGhhbiBsb29waW5nIG92ZXIgYGFgIHdlIHVzZSBgb3JkZXJgCgkvLyBhcyB0aGUgaW5kZXhlcyB0byBwaWNrIGZyb20gYGFgCgl2YXIgX3BsdWNrX29yZGVyID0gZnVuY3Rpb24gKCBhLCBvcmRlciwgcHJvcCwgcHJvcDIgKQoJewoJCXZhciBvdXQgPSBbXTsKCQl2YXIgaT0wLCBpZW49b3JkZXIubGVuZ3RoOwoJCgkJLy8gQ291bGQgaGF2ZSB0aGUgdGVzdCBpbiB0aGUgbG9vcCBmb3Igc2xpZ2h0bHkgc21hbGxlciBjb2RlLCBidXQgc3BlZWQKCQkvLyBpcyBlc3NlbnRpYWwgaGVyZQoJCWlmICggcHJvcDIgIT09IHVuZGVmaW5lZCApIHsKCQkJZm9yICggOyBpPGllbiA7IGkrKyApIHsKCQkJCWlmICggYVsgb3JkZXJbaV0gXVsgcHJvcCBdICkgewoJCQkJCW91dC5wdXNoKCBhWyBvcmRlcltpXSBdWyBwcm9wIF1bIHByb3AyIF0gKTsKCQkJCX0KCQkJfQoJCX0KCQllbHNlIHsKCQkJZm9yICggOyBpPGllbiA7IGkrKyApIHsKCQkJCW91dC5wdXNoKCBhWyBvcmRlcltpXSBdWyBwcm9wIF0gKTsKCQkJfQoJCX0KCQoJCXJldHVybiBvdXQ7Cgl9OwoJCgkKCXZhciBfcmFuZ2UgPSBmdW5jdGlvbiAoIGxlbiwgc3RhcnQgKQoJewoJCXZhciBvdXQgPSBbXTsKCQl2YXIgZW5kOwoJCgkJaWYgKCBzdGFydCA9PT0gdW5kZWZpbmVkICkgewoJCQlzdGFydCA9IDA7CgkJCWVuZCA9IGxlbjsKCQl9CgkJZWxzZSB7CgkJCWVuZCA9IHN0YXJ0OwoJCQlzdGFydCA9IGxlbjsKCQl9CgkKCQlmb3IgKCB2YXIgaT1zdGFydCA7IGk8ZW5kIDsgaSsrICkgewoJCQlvdXQucHVzaCggaSApOwoJCX0KCQoJCXJldHVybiBvdXQ7Cgl9OwoJCgkKCXZhciBfcmVtb3ZlRW1wdHkgPSBmdW5jdGlvbiAoIGEgKQoJewoJCXZhciBvdXQgPSBbXTsKCQoJCWZvciAoIHZhciBpPTAsIGllbj1hLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQlpZiAoIGFbaV0gKSB7IC8vIGNhcmVmdWwgLSB3aWxsIHJlbW92ZSBhbGwgZmFsc3kgdmFsdWVzIQoJCQkJb3V0LnB1c2goIGFbaV0gKTsKCQkJfQoJCX0KCQoJCXJldHVybiBvdXQ7Cgl9OwoJCgkKCXZhciBfc3RyaXBIdG1sID0gZnVuY3Rpb24gKCBkICkgewoJCXJldHVybiBkLnJlcGxhY2UoIF9yZV9odG1sLCAnJyApOwoJfTsKCQoJCgkvKioKCSAqIERldGVybWluZSBpZiBhbGwgdmFsdWVzIGluIHRoZSBhcnJheSBhcmUgdW5pcXVlLiBUaGlzIG1lYW5zIHdlIGNhbiBzaG9ydAoJICogY3V0IHRoZSBfdW5pcXVlIG1ldGhvZCBhdCB0aGUgY29zdCBvZiBhIHNpbmdsZSBsb29wLiBBIHNvcnRlZCBhcnJheSBpcyB1c2VkCgkgKiB0byBlYXNpbHkgY2hlY2sgdGhlIHZhbHVlcy4KCSAqCgkgKiBAcGFyYW0gIHthcnJheX0gc3JjIFNvdXJjZSBhcnJheQoJICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiBhbGwgdW5pcXVlLCBmYWxzZSBvdGhlcndpc2UKCSAqIEBpZ25vcmUKCSAqLwoJdmFyIF9hcmVBbGxVbmlxdWUgPSBmdW5jdGlvbiAoIHNyYyApIHsKCQlpZiAoIHNyYy5sZW5ndGggPCAyICkgewoJCQlyZXR1cm4gdHJ1ZTsKCQl9CgkKCQl2YXIgc29ydGVkID0gc3JjLnNsaWNlKCkuc29ydCgpOwoJCXZhciBsYXN0ID0gc29ydGVkWzBdOwoJCgkJZm9yICggdmFyIGk9MSwgaWVuPXNvcnRlZC5sZW5ndGggOyBpPGllbiA7IGkrKyApIHsKCQkJaWYgKCBzb3J0ZWRbaV0gPT09IGxhc3QgKSB7CgkJCQlyZXR1cm4gZmFsc2U7CgkJCX0KCQoJCQlsYXN0ID0gc29ydGVkW2ldOwoJCX0KCQoJCXJldHVybiB0cnVlOwoJfTsKCQoJCgkvKioKCSAqIEZpbmQgdGhlIHVuaXF1ZSBlbGVtZW50cyBpbiBhIHNvdXJjZSBhcnJheS4KCSAqCgkgKiBAcGFyYW0gIHthcnJheX0gc3JjIFNvdXJjZSBhcnJheQoJICogQHJldHVybiB7YXJyYXl9IEFycmF5IG9mIHVuaXF1ZSBpdGVtcwoJICogQGlnbm9yZQoJICovCgl2YXIgX3VuaXF1ZSA9IGZ1bmN0aW9uICggc3JjICkKCXsKCQlpZiAoIF9hcmVBbGxVbmlxdWUoIHNyYyApICkgewoJCQlyZXR1cm4gc3JjLnNsaWNlKCk7CgkJfQoJCgkJLy8gQSBmYXN0ZXIgdW5pcXVlIG1ldGhvZCBpcyB0byB1c2Ugb2JqZWN0IGtleXMgdG8gaWRlbnRpZnkgdXNlZCB2YWx1ZXMsCgkJLy8gYnV0IHRoaXMgZG9lc24ndCB3b3JrIHdpdGggYXJyYXlzIG9yIG9iamVjdHMsIHdoaWNoIHdlIG11c3QgYWxzbwoJCS8vIGNvbnNpZGVyLiBTZWUganNwZXJmLmNvbS9jb21wYXJlLWFycmF5LXVuaXF1ZS12ZXJzaW9ucy80IGZvciBtb3JlCgkJLy8gaW5mb3JtYXRpb24uCgkJdmFyCgkJCW91dCA9IFtdLAoJCQl2YWwsCgkJCWksIGllbj1zcmMubGVuZ3RoLAoJCQlqLCBrPTA7CgkKCQlhZ2FpbjogZm9yICggaT0wIDsgaTxpZW4gOyBpKysgKSB7CgkJCXZhbCA9IHNyY1tpXTsKCQoJCQlmb3IgKCBqPTAgOyBqPGsgOyBqKysgKSB7CgkJCQlpZiAoIG91dFtqXSA9PT0gdmFsICkgewoJCQkJCWNvbnRpbnVlIGFnYWluOwoJCQkJfQoJCQl9CgkKCQkJb3V0LnB1c2goIHZhbCApOwoJCQlrKys7CgkJfQoJCgkJcmV0dXJuIG91dDsKCX07CgkKCQoJLyoqCgkgKiBEYXRhVGFibGVzIHV0aWxpdHkgbWV0aG9kcwoJICogCgkgKiBUaGlzIG5hbWVzcGFjZSBwcm92aWRlcyBoZWxwZXIgbWV0aG9kcyB0aGF0IERhdGFUYWJsZXMgdXNlcyBpbnRlcm5hbGx5IHRvCgkgKiBjcmVhdGUgYSBEYXRhVGFibGUsIGJ1dCB3aGljaCBhcmUgbm90IGV4Y2x1c2l2ZWx5IHVzZWQgb25seSBmb3IgRGF0YVRhYmxlcy4KCSAqIFRoZXNlIG1ldGhvZHMgY2FuIGJlIHVzZWQgYnkgZXh0ZW5zaW9uIGF1dGhvcnMgdG8gc2F2ZSB0aGUgZHVwbGljYXRpb24gb2YKCSAqIGNvZGUuCgkgKgoJICogIEBuYW1lc3BhY2UKCSAqLwoJRGF0YVRhYmxlLnV0aWwgPSB7CgkJLyoqCgkJICogVGhyb3R0bGUgdGhlIGNhbGxzIHRvIGEgZnVuY3Rpb24uIEFyZ3VtZW50cyBhbmQgY29udGV4dCBhcmUgbWFpbnRhaW5lZAoJCSAqIGZvciB0aGUgdGhyb3R0bGVkIGZ1bmN0aW9uLgoJCSAqCgkJICogQHBhcmFtIHtmdW5jdGlvbn0gZm4gRnVuY3Rpb24gdG8gYmUgY2FsbGVkCgkJICogQHBhcmFtIHtpbnRlZ2VyfSBmcmVxIENhbGwgZnJlcXVlbmN5IGluIG1TCgkJICogQHJldHVybiB7ZnVuY3Rpb259IFdyYXBwZWQgZnVuY3Rpb24KCQkgKi8KCQl0aHJvdHRsZTogZnVuY3Rpb24gKCBmbiwgZnJlcSApIHsKCQkJdmFyCgkJCQlmcmVxdWVuY3kgPSBmcmVxICE9PSB1bmRlZmluZWQgPyBmcmVxIDogMjAwLAoJCQkJbGFzdCwKCQkJCXRpbWVyOwoJCgkJCXJldHVybiBmdW5jdGlvbiAoKSB7CgkJCQl2YXIKCQkJCQl0aGF0ID0gdGhpcywKCQkJCQlub3cgID0gK25ldyBEYXRlKCksCgkJCQkJYXJncyA9IGFyZ3VtZW50czsKCQoJCQkJaWYgKCBsYXN0ICYmIG5vdyA8IGxhc3QgKyBmcmVxdWVuY3kgKSB7CgkJCQkJY2xlYXJUaW1lb3V0KCB0aW1lciApOwoJCgkJCQkJdGltZXIgPSBzZXRUaW1lb3V0KCBmdW5jdGlvbiAoKSB7CgkJCQkJCWxhc3QgPSB1bmRlZmluZWQ7CgkJCQkJCWZuLmFwcGx5KCB0aGF0LCBhcmdzICk7CgkJCQkJfSwgZnJlcXVlbmN5ICk7CgkJCQl9CgkJCQllbHNlIHsKCQkJCQlsYXN0ID0gbm93OwoJCQkJCWZuLmFwcGx5KCB0aGF0LCBhcmdzICk7CgkJCQl9CgkJCX07CgkJfSwKCQoJCgkJLyoqCgkJICogRXNjYXBlIGEgc3RyaW5nIHN1Y2ggdGhhdCBpdCBjYW4gYmUgdXNlZCBpbiBhIHJlZ3VsYXIgZXhwcmVzc2lvbgoJCSAqCgkJICogIEBwYXJhbSB7c3RyaW5nfSB2YWwgc3RyaW5nIHRvIGVzY2FwZQoJCSAqICBAcmV0dXJucyB7c3RyaW5nfSBlc2NhcGVkIHN0cmluZwoJCSAqLwoJCWVzY2FwZVJlZ2V4OiBmdW5jdGlvbiAoIHZhbCApIHsKCQkJcmV0dXJuIHZhbC5yZXBsYWNlKCBfcmVfZXNjYXBlX3JlZ2V4LCAnXFwkMScgKTsKCQl9Cgl9OwoJCgkKCQoJLyoqCgkgKiBDcmVhdGUgYSBtYXBwaW5nIG9iamVjdCB0aGF0IGFsbG93cyBjYW1lbCBjYXNlIHBhcmFtZXRlcnMgdG8gYmUgbG9va2VkIHVwCgkgKiBmb3IgdGhlaXIgSHVuZ2FyaWFuIGNvdW50ZXJwYXJ0cy4gVGhlIG1hcHBpbmcgaXMgc3RvcmVkIGluIGEgcHJpdmF0ZQoJICogcGFyYW1ldGVyIGNhbGxlZCBgX2h1bmdhcmlhbk1hcGAgd2hpY2ggY2FuIGJlIGFjY2Vzc2VkIG9uIHRoZSBzb3VyY2Ugb2JqZWN0LgoJICogIEBwYXJhbSB7b2JqZWN0fSBvCgkgKiAgQG1lbWJlcm9mIERhdGFUYWJsZSNvQXBpCgkgKi8KCWZ1bmN0aW9uIF9mbkh1bmdhcmlhbk1hcCAoIG8gKQoJewoJCXZhcgoJCQlodW5nYXJpYW4gPSAnYSBhYSBhaSBhbyBhcyBiIGZuIGkgbSBvIHMgJywKCQkJbWF0Y2gsCgkJCW5ld0tleSwKCQkJbWFwID0ge307CgkKCQkkLmVhY2goIG8sIGZ1bmN0aW9uIChrZXksIHZhbCkgewoJCQltYXRjaCA9IGtleS5tYXRjaCgvXihbXkEtWl0rPykoW0EtWl0pLyk7CgkKCQkJaWYgKCBtYXRjaCAmJiBodW5nYXJpYW4uaW5kZXhPZihtYXRjaFsxXSsnICcpICE9PSAtMSApCgkJCXsKCQkJCW5ld0tleSA9IGtleS5yZXBsYWNlKCBtYXRjaFswXSwgbWF0Y2hbMl0udG9Mb3dlckNhc2UoKSApOwoJCQkJbWFwWyBuZXdLZXkgXSA9IGtleTsKCQoJCQkJaWYgKCBtYXRjaFsxXSA9PT0gJ28nICkKCQkJCXsKCQkJCQlfZm5IdW5nYXJpYW5NYXAoIG9ba2V5XSApOwoJCQkJfQoJCQl9CgkJfSApOwoJCgkJby5faHVuZ2FyaWFuTWFwID0gbWFwOwoJfQoJCgkKCS8qKgoJICogQ29udmVydCBmcm9tIGNhbWVsIGNhc2UgcGFyYW1ldGVycyB0byBIdW5nYXJpYW4sIGJhc2VkIG9uIGEgSHVuZ2FyaWFuIG1hcAoJICogY3JlYXRlZCBieSBfZm5IdW5nYXJpYW5NYXAuCgkgKiAgQHBhcmFtIHtvYmplY3R9IHNyYyBUaGUgbW9kZWwgb2JqZWN0IHdoaWNoIGhvbGRzIGFsbCBwYXJhbWV0ZXJzIHRoYXQgY2FuIGJlCgkgKiAgICBtYXBwZWQuCgkgKiAgQHBhcmFtIHtvYmplY3R9IHVzZXIgVGhlIG9iamVjdCB0byBjb252ZXJ0IGZyb20gY2FtZWwgY2FzZSB0byBIdW5nYXJpYW4uCgkgKiAgQHBhcmFtIHtib29sZWFufSBmb3JjZSBXaGVuIHNldCB0byBgdHJ1ZWAsIHByb3BlcnRpZXMgd2hpY2ggYWxyZWFkeSBoYXZlIGEKCSAqICAgIEh1bmdhcmlhbiB2YWx1ZSBpbiB0aGUgYHVzZXJgIG9iamVjdCB3aWxsIGJlIG92ZXJ3cml0dGVuLiBPdGhlcndpc2UgdGhleQoJICogICAgd29uJ3QgYmUuCgkgKiAgQG1lbWJlcm9mIERhdGFUYWJsZSNvQXBpCgkgKi8KCWZ1bmN0aW9uIF9mbkNhbWVsVG9IdW5nYXJpYW4gKCBzcmMsIHVzZXIsIGZvcmNlICkKCXsKCQlpZiAoICEgc3JjLl9odW5nYXJpYW5NYXAgKSB7CgkJCV9mbkh1bmdhcmlhbk1hcCggc3JjICk7CgkJfQoJCgkJdmFyIGh1bmdhcmlhbktleTsKCQoJCSQuZWFjaCggdXNlciwgZnVuY3Rpb24gKGtleSwgdmFsKSB7CgkJCWh1bmdhcmlhbktleSA9IHNyYy5faHVuZ2FyaWFuTWFwWyBrZXkgXTsKCQoJCQlpZiAoIGh1bmdhcmlhbktleSAhPT0gdW5kZWZpbmVkICYmIChmb3JjZSB8fCB1c2VyW2h1bmdhcmlhbktleV0gPT09IHVuZGVmaW5lZCkgKQoJCQl7CgkJCQkvLyBGb3Igb2JqZWN0cywgd2UgbmVlZCB0byBidXp6IGRvd24gaW50byB0aGUgb2JqZWN0IHRvIGNvcHkgcGFyYW1ldGVycwoJCQkJaWYgKCBodW5nYXJpYW5LZXkuY2hhckF0KDApID09PSAnbycgKQoJCQkJewoJCQkJCS8vIENvcHkgdGhlIGNhbWVsQ2FzZSBvcHRpb25zIG92ZXIgdG8gdGhlIGh1bmdhcmlhbgoJCQkJCWlmICggISB1c2VyWyBodW5nYXJpYW5LZXkgXSApIHsKCQkJCQkJdXNlclsgaHVuZ2FyaWFuS2V5IF0gPSB7fTsKCQkJCQl9CgkJCQkJJC5leHRlbmQoIHRydWUsIHVzZXJbaHVuZ2FyaWFuS2V5XSwgdXNlcltrZXldICk7CgkKCQkJCQlfZm5DYW1lbFRvSHVuZ2FyaWFuKCBzcmNbaHVuZ2FyaWFuS2V5XSwgdXNlcltodW5nYXJpYW5LZXldLCBmb3JjZSApOwoJCQkJfQoJCQkJZWxzZSB7CgkJCQkJdXNlcltodW5nYXJpYW5LZXldID0gdXNlclsga2V5IF07CgkJCQl9CgkJCX0KCQl9ICk7Cgl9CgkKCQoJLyoqCgkgKiBMYW5ndWFnZSBjb21wYXRpYmlsaXR5IC0gd2hlbiBjZXJ0YWluIG9wdGlvbnMgYXJlIGdpdmVuLCBhbmQgb3RoZXJzIGFyZW4ndCwgd2UKCSAqIG5lZWQgdG8gZHVwbGljYXRlIHRoZSB2YWx1ZXMgb3ZlciwgaW4gb3JkZXIgdG8gcHJvdmlkZSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQoJICogd2l0aCBvbGRlciBsYW5ndWFnZSBmaWxlcy4KCSAqICBAcGFyYW0ge29iamVjdH0gb1NldHRpbmdzIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkgKiAgQG1lbWJlcm9mIERhdGFUYWJsZSNvQXBpCgkgKi8KCWZ1bmN0aW9uIF9mbkxhbmd1YWdlQ29tcGF0KCBsYW5nICkKCXsKCQkvLyBOb3RlIHRoZSB1c2Ugb2YgdGhlIEh1bmdhcmlhbiBub3RhdGlvbiBmb3IgdGhlIHBhcmFtZXRlcnMgaW4gdGhpcyBtZXRob2QgYXMKCQkvLyB0aGlzIGlzIGNhbGxlZCBhZnRlciB0aGUgbWFwcGluZyBvZiBjYW1lbENhc2UgdG8gSHVuZ2FyaWFuCgkJdmFyIGRlZmF1bHRzID0gRGF0YVRhYmxlLmRlZmF1bHRzLm9MYW5ndWFnZTsKCQoJCS8vIERlZmF1bHQgbWFwcGluZwoJCXZhciBkZWZhdWx0RGVjaW1hbCA9IGRlZmF1bHRzLnNEZWNpbWFsOwoJCWlmICggZGVmYXVsdERlY2ltYWwgKSB7CgkJCV9hZGROdW1lcmljU29ydCggZGVmYXVsdERlY2ltYWwgKTsKCQl9CgkKCQlpZiAoIGxhbmcgKSB7CgkJCXZhciB6ZXJvUmVjb3JkcyA9IGxhbmcuc1plcm9SZWNvcmRzOwoJCgkJCS8vIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IC0gaWYgdGhlcmUgaXMgbm8gc0VtcHR5VGFibGUgZ2l2ZW4sIHRoZW4gdXNlIHRoZSBzYW1lIGFzCgkJCS8vIHNaZXJvUmVjb3JkcyAtIGFzc3VtaW5nIHRoYXQgaXMgZ2l2ZW4uCgkJCWlmICggISBsYW5nLnNFbXB0eVRhYmxlICYmIHplcm9SZWNvcmRzICYmCgkJCQlkZWZhdWx0cy5zRW1wdHlUYWJsZSA9PT0gIk5vIGRhdGEgYXZhaWxhYmxlIGluIHRhYmxlIiApCgkJCXsKCQkJCV9mbk1hcCggbGFuZywgbGFuZywgJ3NaZXJvUmVjb3JkcycsICdzRW1wdHlUYWJsZScgKTsKCQkJfQoJCgkJCS8vIExpa2V3aXNlIHdpdGggbG9hZGluZyByZWNvcmRzCgkJCWlmICggISBsYW5nLnNMb2FkaW5nUmVjb3JkcyAmJiB6ZXJvUmVjb3JkcyAmJgoJCQkJZGVmYXVsdHMuc0xvYWRpbmdSZWNvcmRzID09PSAiTG9hZGluZy4uLiIgKQoJCQl7CgkJCQlfZm5NYXAoIGxhbmcsIGxhbmcsICdzWmVyb1JlY29yZHMnLCAnc0xvYWRpbmdSZWNvcmRzJyApOwoJCQl9CgkKCQkJLy8gT2xkIHBhcmFtZXRlciBuYW1lIG9mIHRoZSB0aG91c2FuZHMgc2VwYXJhdG9yIG1hcHBlZCBvbnRvIHRoZSBuZXcKCQkJaWYgKCBsYW5nLnNJbmZvVGhvdXNhbmRzICkgewoJCQkJbGFuZy5zVGhvdXNhbmRzID0gbGFuZy5zSW5mb1Rob3VzYW5kczsKCQkJfQoJCgkJCXZhciBkZWNpbWFsID0gbGFuZy5zRGVjaW1hbDsKCQkJaWYgKCBkZWNpbWFsICYmIGRlZmF1bHREZWNpbWFsICE9PSBkZWNpbWFsICkgewoJCQkJX2FkZE51bWVyaWNTb3J0KCBkZWNpbWFsICk7CgkJCX0KCQl9Cgl9CgkKCQoJLyoqCgkgKiBNYXAgb25lIHBhcmFtZXRlciBvbnRvIGFub3RoZXIKCSAqICBAcGFyYW0ge29iamVjdH0gbyBPYmplY3QgdG8gbWFwCgkgKiAgQHBhcmFtIHsqfSBrbmV3IFRoZSBuZXcgcGFyYW1ldGVyIG5hbWUKCSAqICBAcGFyYW0geyp9IG9sZCBUaGUgb2xkIHBhcmFtZXRlciBuYW1lCgkgKi8KCXZhciBfZm5Db21wYXRNYXAgPSBmdW5jdGlvbiAoIG8sIGtuZXcsIG9sZCApIHsKCQlpZiAoIG9bIGtuZXcgXSAhPT0gdW5kZWZpbmVkICkgewoJCQlvWyBvbGQgXSA9IG9bIGtuZXcgXTsKCQl9Cgl9OwoJCgkKCS8qKgoJICogUHJvdmlkZSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBmb3IgdGhlIG1haW4gRFQgb3B0aW9ucy4gTm90ZSB0aGF0IHRoZSBuZXcKCSAqIG9wdGlvbnMgYXJlIG1hcHBlZCBvbnRvIHRoZSBvbGQgcGFyYW1ldGVycywgc28gdGhpcyBpcyBhbiBleHRlcm5hbCBpbnRlcmZhY2UKCSAqIGNoYW5nZSBvbmx5LgoJICogIEBwYXJhbSB7b2JqZWN0fSBpbml0IE9iamVjdCB0byBtYXAKCSAqLwoJZnVuY3Rpb24gX2ZuQ29tcGF0T3B0cyAoIGluaXQgKQoJewoJCV9mbkNvbXBhdE1hcCggaW5pdCwgJ29yZGVyaW5nJywgICAgICAnYlNvcnQnICk7CgkJX2ZuQ29tcGF0TWFwKCBpbml0LCAnb3JkZXJNdWx0aScsICAgICdiU29ydE11bHRpJyApOwoJCV9mbkNvbXBhdE1hcCggaW5pdCwgJ29yZGVyQ2xhc3NlcycsICAnYlNvcnRDbGFzc2VzJyApOwoJCV9mbkNvbXBhdE1hcCggaW5pdCwgJ29yZGVyQ2VsbHNUb3AnLCAnYlNvcnRDZWxsc1RvcCcgKTsKCQlfZm5Db21wYXRNYXAoIGluaXQsICdvcmRlcicsICAgICAgICAgJ2FhU29ydGluZycgKTsKCQlfZm5Db21wYXRNYXAoIGluaXQsICdvcmRlckZpeGVkJywgICAgJ2FhU29ydGluZ0ZpeGVkJyApOwoJCV9mbkNvbXBhdE1hcCggaW5pdCwgJ3BhZ2luZycsICAgICAgICAnYlBhZ2luYXRlJyApOwoJCV9mbkNvbXBhdE1hcCggaW5pdCwgJ3BhZ2luZ1R5cGUnLCAgICAnc1BhZ2luYXRpb25UeXBlJyApOwoJCV9mbkNvbXBhdE1hcCggaW5pdCwgJ3BhZ2VMZW5ndGgnLCAgICAnaURpc3BsYXlMZW5ndGgnICk7CgkJX2ZuQ29tcGF0TWFwKCBpbml0LCAnc2VhcmNoaW5nJywgICAgICdiRmlsdGVyJyApOwoJCgkJLy8gQm9vbGVhbiBpbml0aWFsaXNhdGlvbiBvZiB4LXNjcm9sbGluZwoJCWlmICggdHlwZW9mIGluaXQuc1Njcm9sbFggPT09ICdib29sZWFuJyApIHsKCQkJaW5pdC5zU2Nyb2xsWCA9IGluaXQuc1Njcm9sbFggPyAnMTAwJScgOiAnJzsKCQl9CgkJaWYgKCB0eXBlb2YgaW5pdC5zY3JvbGxYID09PSAnYm9vbGVhbicgKSB7CgkJCWluaXQuc2Nyb2xsWCA9IGluaXQuc2Nyb2xsWCA/ICcxMDAlJyA6ICcnOwoJCX0KCQoJCS8vIENvbHVtbiBzZWFyY2ggb2JqZWN0cyBhcmUgaW4gYW4gYXJyYXksIHNvIGl0IG5lZWRzIHRvIGJlIGNvbnZlcnRlZAoJCS8vIGVsZW1lbnQgYnkgZWxlbWVudAoJCXZhciBzZWFyY2hDb2xzID0gaW5pdC5hb1NlYXJjaENvbHM7CgkKCQlpZiAoIHNlYXJjaENvbHMgKSB7CgkJCWZvciAoIHZhciBpPTAsIGllbj1zZWFyY2hDb2xzLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQkJaWYgKCBzZWFyY2hDb2xzW2ldICkgewoJCQkJCV9mbkNhbWVsVG9IdW5nYXJpYW4oIERhdGFUYWJsZS5tb2RlbHMub1NlYXJjaCwgc2VhcmNoQ29sc1tpXSApOwoJCQkJfQoJCQl9CgkJfQoJfQoJCgkKCS8qKgoJICogUHJvdmlkZSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBmb3IgY29sdW1uIG9wdGlvbnMuIE5vdGUgdGhhdCB0aGUgbmV3IG9wdGlvbnMKCSAqIGFyZSBtYXBwZWQgb250byB0aGUgb2xkIHBhcmFtZXRlcnMsIHNvIHRoaXMgaXMgYW4gZXh0ZXJuYWwgaW50ZXJmYWNlIGNoYW5nZQoJICogb25seS4KCSAqICBAcGFyYW0ge29iamVjdH0gaW5pdCBPYmplY3QgdG8gbWFwCgkgKi8KCWZ1bmN0aW9uIF9mbkNvbXBhdENvbHMgKCBpbml0ICkKCXsKCQlfZm5Db21wYXRNYXAoIGluaXQsICdvcmRlcmFibGUnLCAgICAgJ2JTb3J0YWJsZScgKTsKCQlfZm5Db21wYXRNYXAoIGluaXQsICdvcmRlckRhdGEnLCAgICAgJ2FEYXRhU29ydCcgKTsKCQlfZm5Db21wYXRNYXAoIGluaXQsICdvcmRlclNlcXVlbmNlJywgJ2FzU29ydGluZycgKTsKCQlfZm5Db21wYXRNYXAoIGluaXQsICdvcmRlckRhdGFUeXBlJywgJ3NvcnREYXRhVHlwZScgKTsKCQoJCS8vIG9yZGVyRGF0YSBjYW4gYmUgZ2l2ZW4gYXMgYW4gaW50ZWdlcgoJCXZhciBkYXRhU29ydCA9IGluaXQuYURhdGFTb3J0OwoJCWlmICggdHlwZW9mIGRhdGFTb3J0ID09PSAnbnVtYmVyJyAmJiAhICQuaXNBcnJheSggZGF0YVNvcnQgKSApIHsKCQkJaW5pdC5hRGF0YVNvcnQgPSBbIGRhdGFTb3J0IF07CgkJfQoJfQoJCgkKCS8qKgoJICogQnJvd3NlciBmZWF0dXJlIGRldGVjdGlvbiBmb3IgY2FwYWJpbGl0aWVzLCBxdWlya3MKCSAqICBAcGFyYW0ge29iamVjdH0gc2V0dGluZ3MgZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuQnJvd3NlckRldGVjdCggc2V0dGluZ3MgKQoJewoJCS8vIFdlIGRvbid0IG5lZWQgdG8gZG8gdGhpcyBldmVyeSB0aW1lIERhdGFUYWJsZXMgaXMgY29uc3RydWN0ZWQsIHRoZSB2YWx1ZXMKCQkvLyBjYWxjdWxhdGVkIGFyZSBzcGVjaWZpYyB0byB0aGUgYnJvd3NlciBhbmQgT1MgY29uZmlndXJhdGlvbiB3aGljaCB3ZQoJCS8vIGRvbid0IGV4cGVjdCB0byBjaGFuZ2UgYmV0d2VlbiBpbml0aWFsaXNhdGlvbnMKCQlpZiAoICEgRGF0YVRhYmxlLl9fYnJvd3NlciApIHsKCQkJdmFyIGJyb3dzZXIgPSB7fTsKCQkJRGF0YVRhYmxlLl9fYnJvd3NlciA9IGJyb3dzZXI7CgkKCQkJLy8gU2Nyb2xsaW5nIGZlYXR1cmUgLyBxdWlya3MgZGV0ZWN0aW9uCgkJCXZhciBuID0gJCgnPGRpdi8+JykKCQkJCS5jc3MoIHsKCQkJCQlwb3NpdGlvbjogJ2ZpeGVkJywKCQkJCQl0b3A6IDAsCgkJCQkJbGVmdDogJCh3aW5kb3cpLnNjcm9sbExlZnQoKSotMSwgLy8gYWxsb3cgZm9yIHNjcm9sbGluZwoJCQkJCWhlaWdodDogMSwKCQkJCQl3aWR0aDogMSwKCQkJCQlvdmVyZmxvdzogJ2hpZGRlbicKCQkJCX0gKQoJCQkJLmFwcGVuZCgKCQkJCQkkKCc8ZGl2Lz4nKQoJCQkJCQkuY3NzKCB7CgkJCQkJCQlwb3NpdGlvbjogJ2Fic29sdXRlJywKCQkJCQkJCXRvcDogMSwKCQkJCQkJCWxlZnQ6IDEsCgkJCQkJCQl3aWR0aDogMTAwLAoJCQkJCQkJb3ZlcmZsb3c6ICdzY3JvbGwnCgkJCQkJCX0gKQoJCQkJCQkuYXBwZW5kKAoJCQkJCQkJJCgnPGRpdi8+JykKCQkJCQkJCQkuY3NzKCB7CgkJCQkJCQkJCXdpZHRoOiAnMTAwJScsCgkJCQkJCQkJCWhlaWdodDogMTAKCQkJCQkJCQl9ICkKCQkJCQkJKQoJCQkJKQoJCQkJLmFwcGVuZFRvKCAnYm9keScgKTsKCQoJCQl2YXIgb3V0ZXIgPSBuLmNoaWxkcmVuKCk7Cg=="
},
{
"key": "jquery.dataTables.js?4?3?0",
"type": "binary",
"value": "base64:CQkJdmFyIGlubmVyID0gb3V0ZXIuY2hpbGRyZW4oKTsKCQoJCQkvLyBOdW1iZXJzIGJlbG93LCBpbiBvcmRlciwgYXJlOgoJCQkvLyBpbm5lci5vZmZzZXRXaWR0aCwgaW5uZXIuY2xpZW50V2lkdGgsIG91dGVyLm9mZnNldFdpZHRoLCBvdXRlci5jbGllbnRXaWR0aAoJCQkvLwoJCQkvLyBJRTYgWFA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwIDEwMCAxMDAgIDgzCgkJCS8vIElFNyBWaXN0YTogICAgICAgICAgICAgICAgICAgICAgICAxMDAgMTAwIDEwMCAgODMKCQkJLy8gSUUgOCsgV2luZG93czogICAgICAgICAgICAgICAgICAgICA4MyAgODMgMTAwICA4MwoJCQkvLyBFdmVyZ3JlZW4gV2luZG93czogICAgICAgICAgICAgICAgIDgzICA4MyAxMDAgIDgzCgkJCS8vIEV2ZXJncmVlbiBNYWMgd2l0aCBzY3JvbGxiYXJzOiAgICAgODUgIDg1IDEwMCAgODUKCQkJLy8gRXZlcmdyZWVuIE1hYyB3aXRob3V0IHNjcm9sbGJhcnM6IDEwMCAxMDAgMTAwIDEwMAoJCgkJCS8vIEdldCBzY3JvbGxiYXIgd2lkdGgKCQkJYnJvd3Nlci5iYXJXaWR0aCA9IG91dGVyWzBdLm9mZnNldFdpZHRoIC0gb3V0ZXJbMF0uY2xpZW50V2lkdGg7CgkKCQkJLy8gSUU2Lzcgd2lsbCBvdmVyc2l6ZSBhIHdpZHRoIDEwMCUgZWxlbWVudCBpbnNpZGUgYSBzY3JvbGxpbmcgZWxlbWVudCwgdG8KCQkJLy8gaW5jbHVkZSB0aGUgd2lkdGggb2YgdGhlIHNjcm9sbGJhciwgd2hpbGUgb3RoZXIgYnJvd3NlcnMgZW5zdXJlIHRoZSBpbm5lcgoJCQkvLyBlbGVtZW50IGlzIGNvbnRhaW5lZCB3aXRob3V0IGZvcmNpbmcgc2Nyb2xsaW5nCgkJCWJyb3dzZXIuYlNjcm9sbE92ZXJzaXplID0gaW5uZXJbMF0ub2Zmc2V0V2lkdGggPT09IDEwMCAmJiBvdXRlclswXS5jbGllbnRXaWR0aCAhPT0gMTAwOwoJCgkJCS8vIEluIHJ0bCB0ZXh0IGxheW91dCwgc29tZSBicm93c2VycyAobW9zdCwgYnV0IG5vdCBhbGwpIHdpbGwgcGxhY2UgdGhlCgkJCS8vIHNjcm9sbGJhciBvbiB0aGUgbGVmdCwgcmF0aGVyIHRoYW4gdGhlIHJpZ2h0LgoJCQlicm93c2VyLmJTY3JvbGxiYXJMZWZ0ID0gTWF0aC5yb3VuZCggaW5uZXIub2Zmc2V0KCkubGVmdCApICE9PSAxOwoJCgkJCS8vIElFOC0gZG9uJ3QgcHJvdmlkZSBoZWlnaHQgYW5kIHdpZHRoIGZvciBnZXRCb3VuZGluZ0NsaWVudFJlY3QKCQkJYnJvd3Nlci5iQm91bmRpbmcgPSBuWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoID8gdHJ1ZSA6IGZhbHNlOwoJCgkJCW4ucmVtb3ZlKCk7CgkJfQoJCgkJJC5leHRlbmQoIHNldHRpbmdzLm9Ccm93c2VyLCBEYXRhVGFibGUuX19icm93c2VyICk7CgkJc2V0dGluZ3Mub1Njcm9sbC5pQmFyV2lkdGggPSBEYXRhVGFibGUuX19icm93c2VyLmJhcldpZHRoOwoJfQoJCgkKCS8qKgoJICogQXJyYXkucHJvdG90eXBlIHJlZHVjZVtSaWdodF0gbWV0aG9kLCB1c2VkIGZvciBicm93c2VycyB3aGljaCBkb24ndCBzdXBwb3J0CgkgKiBKUyAxLjYuIERvbmUgdGhpcyB3YXkgdG8gcmVkdWNlIGNvZGUgc2l6ZSwgc2luY2Ugd2UgaXRlcmF0ZSBlaXRoZXIgd2F5CgkgKiAgQHBhcmFtIHtvYmplY3R9IHNldHRpbmdzIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkgKiAgQG1lbWJlcm9mIERhdGFUYWJsZSNvQXBpCgkgKi8KCWZ1bmN0aW9uIF9mblJlZHVjZSAoIHRoYXQsIGZuLCBpbml0LCBzdGFydCwgZW5kLCBpbmMgKQoJewoJCXZhcgoJCQlpID0gc3RhcnQsCgkJCXZhbHVlLAoJCQlpc1NldCA9IGZhbHNlOwoJCgkJaWYgKCBpbml0ICE9PSB1bmRlZmluZWQgKSB7CgkJCXZhbHVlID0gaW5pdDsKCQkJaXNTZXQgPSB0cnVlOwoJCX0KCQoJCXdoaWxlICggaSAhPT0gZW5kICkgewoJCQlpZiAoICEgdGhhdC5oYXNPd25Qcm9wZXJ0eShpKSApIHsKCQkJCWNvbnRpbnVlOwoJCQl9CgkKCQkJdmFsdWUgPSBpc1NldCA/CgkJCQlmbiggdmFsdWUsIHRoYXRbaV0sIGksIHRoYXQgKSA6CgkJCQl0aGF0W2ldOwoJCgkJCWlzU2V0ID0gdHJ1ZTsKCQkJaSArPSBpbmM7CgkJfQoJCgkJcmV0dXJuIHZhbHVlOwoJfQoJCgkvKioKCSAqIEFkZCBhIGNvbHVtbiB0byB0aGUgbGlzdCB1c2VkIGZvciB0aGUgdGFibGUgd2l0aCBkZWZhdWx0IHZhbHVlcwoJICogIEBwYXJhbSB7b2JqZWN0fSBvU2V0dGluZ3MgZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCSAqICBAcGFyYW0ge25vZGV9IG5UaCBUaGUgdGggZWxlbWVudCBmb3IgdGhpcyBjb2x1bW4KCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuQWRkQ29sdW1uKCBvU2V0dGluZ3MsIG5UaCApCgl7CgkJLy8gQWRkIGNvbHVtbiB0byBhb0NvbHVtbnMgYXJyYXkKCQl2YXIgb0RlZmF1bHRzID0gRGF0YVRhYmxlLmRlZmF1bHRzLmNvbHVtbjsKCQl2YXIgaUNvbCA9IG9TZXR0aW5ncy5hb0NvbHVtbnMubGVuZ3RoOwoJCXZhciBvQ29sID0gJC5leHRlbmQoIHt9LCBEYXRhVGFibGUubW9kZWxzLm9Db2x1bW4sIG9EZWZhdWx0cywgewoJCQkiblRoIjogblRoID8gblRoIDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGgnKSwKCQkJInNUaXRsZSI6ICAgIG9EZWZhdWx0cy5zVGl0bGUgICAgPyBvRGVmYXVsdHMuc1RpdGxlICAgIDogblRoID8gblRoLmlubmVySFRNTCA6ICcnLAoJCQkiYURhdGFTb3J0Ijogb0RlZmF1bHRzLmFEYXRhU29ydCA/IG9EZWZhdWx0cy5hRGF0YVNvcnQgOiBbaUNvbF0sCgkJCSJtRGF0YSI6IG9EZWZhdWx0cy5tRGF0YSA/IG9EZWZhdWx0cy5tRGF0YSA6IGlDb2wsCgkJCWlkeDogaUNvbAoJCX0gKTsKCQlvU2V0dGluZ3MuYW9Db2x1bW5zLnB1c2goIG9Db2wgKTsKCQoJCS8vIEFkZCBzZWFyY2ggb2JqZWN0IGZvciBjb2x1bW4gc3BlY2lmaWMgc2VhcmNoLiBOb3RlIHRoYXQgdGhlIGBzZWFyY2hDb2xzWyBpQ29sIF1gCgkJLy8gcGFzc2VkIGludG8gZXh0ZW5kIGNhbiBiZSB1bmRlZmluZWQuIFRoaXMgYWxsb3dzIHRoZSB1c2VyIHRvIGdpdmUgYSBkZWZhdWx0CgkJLy8gd2l0aCBvbmx5IHNvbWUgb2YgdGhlIHBhcmFtZXRlcnMgZGVmaW5lZCwgYW5kIGFsc28gbm90IGdpdmUgYSBkZWZhdWx0CgkJdmFyIHNlYXJjaENvbHMgPSBvU2V0dGluZ3MuYW9QcmVTZWFyY2hDb2xzOwoJCXNlYXJjaENvbHNbIGlDb2wgXSA9ICQuZXh0ZW5kKCB7fSwgRGF0YVRhYmxlLm1vZGVscy5vU2VhcmNoLCBzZWFyY2hDb2xzWyBpQ29sIF0gKTsKCQoJCS8vIFVzZSB0aGUgZGVmYXVsdCBjb2x1bW4gb3B0aW9ucyBmdW5jdGlvbiB0byBpbml0aWFsaXNlIGNsYXNzZXMgZXRjCgkJX2ZuQ29sdW1uT3B0aW9ucyggb1NldHRpbmdzLCBpQ29sLCAkKG5UaCkuZGF0YSgpICk7Cgl9CgkKCQoJLyoqCgkgKiBBcHBseSBvcHRpb25zIGZvciBhIGNvbHVtbgoJICogIEBwYXJhbSB7b2JqZWN0fSBvU2V0dGluZ3MgZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCSAqICBAcGFyYW0ge2ludH0gaUNvbCBjb2x1bW4gaW5kZXggdG8gY29uc2lkZXIKCSAqICBAcGFyYW0ge29iamVjdH0gb09wdGlvbnMgb2JqZWN0IHdpdGggc1R5cGUsIGJWaXNpYmxlIGFuZCBiU2VhcmNoYWJsZSBldGMKCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuQ29sdW1uT3B0aW9ucyggb1NldHRpbmdzLCBpQ29sLCBvT3B0aW9ucyApCgl7CgkJdmFyIG9Db2wgPSBvU2V0dGluZ3MuYW9Db2x1bW5zWyBpQ29sIF07CgkJdmFyIG9DbGFzc2VzID0gb1NldHRpbmdzLm9DbGFzc2VzOwoJCXZhciB0aCA9ICQob0NvbC5uVGgpOwoJCgkJLy8gVHJ5IHRvIGdldCB3aWR0aCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBET00uIFdlIGNhbid0IGdldCBpdCBmcm9tIENTUwoJCS8vIGFzIHdlJ2QgbmVlZCB0byBwYXJzZSB0aGUgQ1NTIHN0eWxlc2hlZXQuIGB3aWR0aGAgb3B0aW9uIGNhbiBvdmVycmlkZQoJCWlmICggISBvQ29sLnNXaWR0aE9yaWcgKSB7CgkJCS8vIFdpZHRoIGF0dHJpYnV0ZQoJCQlvQ29sLnNXaWR0aE9yaWcgPSB0aC5hdHRyKCd3aWR0aCcpIHx8IG51bGw7CgkKCQkJLy8gU3R5bGUgYXR0cmlidXRlCgkJCXZhciB0ID0gKHRoLmF0dHIoJ3N0eWxlJykgfHwgJycpLm1hdGNoKC93aWR0aDpccyooXGQrW3B4ZW0lXSspLyk7CgkJCWlmICggdCApIHsKCQkJCW9Db2wuc1dpZHRoT3JpZyA9IHRbMV07CgkJCX0KCQl9CgkKCQkvKiBVc2VyIHNwZWNpZmllZCBjb2x1bW4gb3B0aW9ucyAqLwoJCWlmICggb09wdGlvbnMgIT09IHVuZGVmaW5lZCAmJiBvT3B0aW9ucyAhPT0gbnVsbCApCgkJewoJCQkvLyBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eQoJCQlfZm5Db21wYXRDb2xzKCBvT3B0aW9ucyApOwoJCgkJCS8vIE1hcCBjYW1lbCBjYXNlIHBhcmFtZXRlcnMgdG8gdGhlaXIgSHVuZ2FyaWFuIGNvdW50ZXJwYXJ0cwoJCQlfZm5DYW1lbFRvSHVuZ2FyaWFuKCBEYXRhVGFibGUuZGVmYXVsdHMuY29sdW1uLCBvT3B0aW9ucyApOwoJCgkJCS8qIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGZvciBtRGF0YVByb3AgKi8KCQkJaWYgKCBvT3B0aW9ucy5tRGF0YVByb3AgIT09IHVuZGVmaW5lZCAmJiAhb09wdGlvbnMubURhdGEgKQoJCQl7CgkJCQlvT3B0aW9ucy5tRGF0YSA9IG9PcHRpb25zLm1EYXRhUHJvcDsKCQkJfQoJCgkJCWlmICggb09wdGlvbnMuc1R5cGUgKQoJCQl7CgkJCQlvQ29sLl9zTWFudWFsVHlwZSA9IG9PcHRpb25zLnNUeXBlOwoJCQl9CgkKCQkJLy8gYGNsYXNzYCBpcyBhIHJlc2VydmVkIHdvcmQgaW4gSmF2YXNjcmlwdCwgc28gd2UgbmVlZCB0byBwcm92aWRlCgkJCS8vIHRoZSBhYmlsaXR5IHRvIHVzZSBhIHZhbGlkIG5hbWUgZm9yIHRoZSBjYW1lbCBjYXNlIGlucHV0CgkJCWlmICggb09wdGlvbnMuY2xhc3NOYW1lICYmICEgb09wdGlvbnMuc0NsYXNzICkKCQkJewoJCQkJb09wdGlvbnMuc0NsYXNzID0gb09wdGlvbnMuY2xhc3NOYW1lOwoJCQl9CgkJCWlmICggb09wdGlvbnMuc0NsYXNzICkgewoJCQkJdGguYWRkQ2xhc3MoIG9PcHRpb25zLnNDbGFzcyApOwoJCQl9CgkKCQkJJC5leHRlbmQoIG9Db2wsIG9PcHRpb25zICk7CgkJCV9mbk1hcCggb0NvbCwgb09wdGlvbnMsICJzV2lkdGgiLCAic1dpZHRoT3JpZyIgKTsKCQoJCQkvKiBpRGF0YVNvcnQgdG8gYmUgYXBwbGllZCAoYmFja3dhcmRzIGNvbXBhdGliaWxpdHkpLCBidXQgYURhdGFTb3J0IHdpbGwgdGFrZQoJCQkgKiBwcmlvcml0eSBpZiBkZWZpbmVkCgkJCSAqLwoJCQlpZiAoIG9PcHRpb25zLmlEYXRhU29ydCAhPT0gdW5kZWZpbmVkICkKCQkJewoJCQkJb0NvbC5hRGF0YVNvcnQgPSBbIG9PcHRpb25zLmlEYXRhU29ydCBdOwoJCQl9CgkJCV9mbk1hcCggb0NvbCwgb09wdGlvbnMsICJhRGF0YVNvcnQiICk7CgkJfQoJCgkJLyogQ2FjaGUgdGhlIGRhdGEgZ2V0IGFuZCBzZXQgZnVuY3Rpb25zIGZvciBzcGVlZCAqLwoJCXZhciBtRGF0YVNyYyA9IG9Db2wubURhdGE7CgkJdmFyIG1EYXRhID0gX2ZuR2V0T2JqZWN0RGF0YUZuKCBtRGF0YVNyYyApOwoJCXZhciBtUmVuZGVyID0gb0NvbC5tUmVuZGVyID8gX2ZuR2V0T2JqZWN0RGF0YUZuKCBvQ29sLm1SZW5kZXIgKSA6IG51bGw7CgkKCQl2YXIgYXR0clRlc3QgPSBmdW5jdGlvbiggc3JjICkgewoJCQlyZXR1cm4gdHlwZW9mIHNyYyA9PT0gJ3N0cmluZycgJiYgc3JjLmluZGV4T2YoJ0AnKSAhPT0gLTE7CgkJfTsKCQlvQ29sLl9iQXR0clNyYyA9ICQuaXNQbGFpbk9iamVjdCggbURhdGFTcmMgKSAmJiAoCgkJCWF0dHJUZXN0KG1EYXRhU3JjLnNvcnQpIHx8IGF0dHJUZXN0KG1EYXRhU3JjLnR5cGUpIHx8IGF0dHJUZXN0KG1EYXRhU3JjLmZpbHRlcikKCQkpOwoJCW9Db2wuX3NldHRlciA9IG51bGw7CgkKCQlvQ29sLmZuR2V0RGF0YSA9IGZ1bmN0aW9uIChyb3dEYXRhLCB0eXBlLCBtZXRhKSB7CgkJCXZhciBpbm5lckRhdGEgPSBtRGF0YSggcm93RGF0YSwgdHlwZSwgdW5kZWZpbmVkLCBtZXRhICk7CgkKCQkJcmV0dXJuIG1SZW5kZXIgJiYgdHlwZSA/CgkJCQltUmVuZGVyKCBpbm5lckRhdGEsIHR5cGUsIHJvd0RhdGEsIG1ldGEgKSA6CgkJCQlpbm5lckRhdGE7CgkJfTsKCQlvQ29sLmZuU2V0RGF0YSA9IGZ1bmN0aW9uICggcm93RGF0YSwgdmFsLCBtZXRhICkgewoJCQlyZXR1cm4gX2ZuU2V0T2JqZWN0RGF0YUZuKCBtRGF0YVNyYyApKCByb3dEYXRhLCB2YWwsIG1ldGEgKTsKCQl9OwoJCgkJLy8gSW5kaWNhdGUgaWYgRGF0YVRhYmxlcyBzaG91bGQgcmVhZCBET00gZGF0YSBhcyBhbiBvYmplY3Qgb3IgYXJyYXkKCQkvLyBVc2VkIGluIF9mbkdldFJvd0VsZW1lbnRzCgkJaWYgKCB0eXBlb2YgbURhdGFTcmMgIT09ICdudW1iZXInICkgewoJCQlvU2V0dGluZ3MuX3Jvd1JlYWRPYmplY3QgPSB0cnVlOwoJCX0KCQoJCS8qIEZlYXR1cmUgc29ydGluZyBvdmVycmlkZXMgY29sdW1uIHNwZWNpZmljIHdoZW4gb2ZmICovCgkJaWYgKCAhb1NldHRpbmdzLm9GZWF0dXJlcy5iU29ydCApCgkJewoJCQlvQ29sLmJTb3J0YWJsZSA9IGZhbHNlOwoJCQl0aC5hZGRDbGFzcyggb0NsYXNzZXMuc1NvcnRhYmxlTm9uZSApOyAvLyBIYXZlIHRvIGFkZCBjbGFzcyBoZXJlIGFzIG9yZGVyIGV2ZW50IGlzbid0IGNhbGxlZAoJCX0KCQoJCS8qIENoZWNrIHRoYXQgdGhlIGNsYXNzIGFzc2lnbm1lbnQgaXMgY29ycmVjdCBmb3Igc29ydGluZyAqLwoJCXZhciBiQXNjID0gJC5pbkFycmF5KCdhc2MnLCBvQ29sLmFzU29ydGluZykgIT09IC0xOwoJCXZhciBiRGVzYyA9ICQuaW5BcnJheSgnZGVzYycsIG9Db2wuYXNTb3J0aW5nKSAhPT0gLTE7CgkJaWYgKCAhb0NvbC5iU29ydGFibGUgfHwgKCFiQXNjICYmICFiRGVzYykgKQoJCXsKCQkJb0NvbC5zU29ydGluZ0NsYXNzID0gb0NsYXNzZXMuc1NvcnRhYmxlTm9uZTsKCQkJb0NvbC5zU29ydGluZ0NsYXNzSlVJID0gIiI7CgkJfQoJCWVsc2UgaWYgKCBiQXNjICYmICFiRGVzYyApCgkJewoJCQlvQ29sLnNTb3J0aW5nQ2xhc3MgPSBvQ2xhc3Nlcy5zU29ydGFibGVBc2M7CgkJCW9Db2wuc1NvcnRpbmdDbGFzc0pVSSA9IG9DbGFzc2VzLnNTb3J0SlVJQXNjQWxsb3dlZDsKCQl9CgkJZWxzZSBpZiAoICFiQXNjICYmIGJEZXNjICkKCQl7CgkJCW9Db2wuc1NvcnRpbmdDbGFzcyA9IG9DbGFzc2VzLnNTb3J0YWJsZURlc2M7CgkJCW9Db2wuc1NvcnRpbmdDbGFzc0pVSSA9IG9DbGFzc2VzLnNTb3J0SlVJRGVzY0FsbG93ZWQ7CgkJfQoJCWVsc2UKCQl7CgkJCW9Db2wuc1NvcnRpbmdDbGFzcyA9IG9DbGFzc2VzLnNTb3J0YWJsZTsKCQkJb0NvbC5zU29ydGluZ0NsYXNzSlVJID0gb0NsYXNzZXMuc1NvcnRKVUk7CgkJfQoJfQoJCgkKCS8qKgoJICogQWRqdXN0IHRoZSB0YWJsZSBjb2x1bW4gd2lkdGhzIGZvciBuZXcgZGF0YS4gTm90ZTogeW91IHdvdWxkIHByb2JhYmx5IHdhbnQgdG8KCSAqIGRvIGEgcmVkcmF3IGFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiEKCSAqICBAcGFyYW0ge29iamVjdH0gc2V0dGluZ3MgZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuQWRqdXN0Q29sdW1uU2l6aW5nICggc2V0dGluZ3MgKQoJewoJCS8qIE5vdCBpbnRlcmVzdGVkIGluIGRvaW5nIGNvbHVtbiB3aWR0aCBjYWxjdWxhdGlvbiBpZiBhdXRvLXdpZHRoIGlzIGRpc2FibGVkICovCgkJaWYgKCBzZXR0aW5ncy5vRmVhdHVyZXMuYkF1dG9XaWR0aCAhPT0gZmFsc2UgKQoJCXsKCQkJdmFyIGNvbHVtbnMgPSBzZXR0aW5ncy5hb0NvbHVtbnM7CgkKCQkJX2ZuQ2FsY3VsYXRlQ29sdW1uV2lkdGhzKCBzZXR0aW5ncyApOwoJCQlmb3IgKCB2YXIgaT0wICwgaUxlbj1jb2x1bW5zLmxlbmd0aCA7IGk8aUxlbiA7IGkrKyApCgkJCXsKCQkJCWNvbHVtbnNbaV0ublRoLnN0eWxlLndpZHRoID0gY29sdW1uc1tpXS5zV2lkdGg7CgkJCX0KCQl9CgkKCQl2YXIgc2Nyb2xsID0gc2V0dGluZ3Mub1Njcm9sbDsKCQlpZiAoIHNjcm9sbC5zWSAhPT0gJycgfHwgc2Nyb2xsLnNYICE9PSAnJykKCQl7CgkJCV9mblNjcm9sbERyYXcoIHNldHRpbmdzICk7CgkJfQoJCgkJX2ZuQ2FsbGJhY2tGaXJlKCBzZXR0aW5ncywgbnVsbCwgJ2NvbHVtbi1zaXppbmcnLCBbc2V0dGluZ3NdICk7Cgl9CgkKCQoJLyoqCgkgKiBDb3ZlcnQgdGhlIGluZGV4IG9mIGEgdmlzaWJsZSBjb2x1bW4gdG8gdGhlIGluZGV4IGluIHRoZSBkYXRhIGFycmF5ICh0YWtlIGFjY291bnQKCSAqIG9mIGhpZGRlbiBjb2x1bW5zKQoJICogIEBwYXJhbSB7b2JqZWN0fSBvU2V0dGluZ3MgZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCSAqICBAcGFyYW0ge2ludH0gaU1hdGNoIFZpc2libGUgY29sdW1uIGluZGV4IHRvIGxvb2t1cAoJICogIEByZXR1cm5zIHtpbnR9IGkgdGhlIGRhdGEgaW5kZXgKCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuVmlzaWJsZVRvQ29sdW1uSW5kZXgoIG9TZXR0aW5ncywgaU1hdGNoICkKCXsKCQl2YXIgYWlWaXMgPSBfZm5HZXRDb2x1bW5zKCBvU2V0dGluZ3MsICdiVmlzaWJsZScgKTsKCQoJCXJldHVybiB0eXBlb2YgYWlWaXNbaU1hdGNoXSA9PT0gJ251bWJlcicgPwoJCQlhaVZpc1tpTWF0Y2hdIDoKCQkJbnVsbDsKCX0KCQoJCgkvKioKCSAqIENvdmVydCB0aGUgaW5kZXggb2YgYW4gaW5kZXggaW4gdGhlIGRhdGEgYXJyYXkgYW5kIGNvbnZlcnQgaXQgdG8gdGhlIHZpc2libGUKCSAqICAgY29sdW1uIGluZGV4ICh0YWtlIGFjY291bnQgb2YgaGlkZGVuIGNvbHVtbnMpCgkgKiAgQHBhcmFtIHtpbnR9IGlNYXRjaCBDb2x1bW4gaW5kZXggdG8gbG9va3VwCgkgKiAgQHBhcmFtIHtvYmplY3R9IG9TZXR0aW5ncyBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJICogIEByZXR1cm5zIHtpbnR9IGkgdGhlIGRhdGEgaW5kZXgKCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuQ29sdW1uSW5kZXhUb1Zpc2libGUoIG9TZXR0aW5ncywgaU1hdGNoICkKCXsKCQl2YXIgYWlWaXMgPSBfZm5HZXRDb2x1bW5zKCBvU2V0dGluZ3MsICdiVmlzaWJsZScgKTsKCQl2YXIgaVBvcyA9ICQuaW5BcnJheSggaU1hdGNoLCBhaVZpcyApOwoJCgkJcmV0dXJuIGlQb3MgIT09IC0xID8gaVBvcyA6IG51bGw7Cgl9CgkKCQoJLyoqCgkgKiBHZXQgdGhlIG51bWJlciBvZiB2aXNpYmxlIGNvbHVtbnMKCSAqICBAcGFyYW0ge29iamVjdH0gb1NldHRpbmdzIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkgKiAgQHJldHVybnMge2ludH0gaSB0aGUgbnVtYmVyIG9mIHZpc2libGUgY29sdW1ucwoJICogIEBtZW1iZXJvZiBEYXRhVGFibGUjb0FwaQoJICovCglmdW5jdGlvbiBfZm5WaXNibGVDb2x1bW5zKCBvU2V0dGluZ3MgKQoJewoJCXZhciB2aXMgPSAwOwoJCgkJLy8gTm8gcmVkdWNlIGluIElFOCwgdXNlIGEgbG9vcCBmb3Igbm93CgkJJC5lYWNoKCBvU2V0dGluZ3MuYW9Db2x1bW5zLCBmdW5jdGlvbiAoIGksIGNvbCApIHsKCQkJaWYgKCBjb2wuYlZpc2libGUgJiYgJChjb2wublRoKS5jc3MoJ2Rpc3BsYXknKSAhPT0gJ25vbmUnICkgewoJCQkJdmlzKys7CgkJCX0KCQl9ICk7CgkKCQlyZXR1cm4gdmlzOwoJfQoJCgkKCS8qKgoJICogR2V0IGFuIGFycmF5IG9mIGNvbHVtbiBpbmRleGVzIHRoYXQgbWF0Y2ggYSBnaXZlbiBwcm9wZXJ0eQoJICogIEBwYXJhbSB7b2JqZWN0fSBvU2V0dGluZ3MgZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCSAqICBAcGFyYW0ge3N0cmluZ30gc1BhcmFtIFBhcmFtZXRlciBpbiBhb0NvbHVtbnMgdG8gbG9vayBmb3IgLSB0eXBpY2FsbHkKCSAqICAgIGJWaXNpYmxlIG9yIGJTZWFyY2hhYmxlCgkgKiAgQHJldHVybnMge2FycmF5fSBBcnJheSBvZiBpbmRleGVzIHdpdGggbWF0Y2hlZCBwcm9wZXJ0aWVzCgkgKiAgQG1lbWJlcm9mIERhdGFUYWJsZSNvQXBpCgkgKi8KCWZ1bmN0aW9uIF9mbkdldENvbHVtbnMoIG9TZXR0aW5ncywgc1BhcmFtICkKCXsKCQl2YXIgYSA9IFtdOwoJCgkJJC5tYXAoIG9TZXR0aW5ncy5hb0NvbHVtbnMsIGZ1bmN0aW9uKHZhbCwgaSkgewoJCQlpZiAoIHZhbFtzUGFyYW1dICkgewoJCQkJYS5wdXNoKCBpICk7CgkJCX0KCQl9ICk7CgkKCQlyZXR1cm4gYTsKCX0KCQoJCgkvKioKCSAqIENhbGN1bGF0ZSB0aGUgJ3R5cGUnIG9mIGEgY29sdW1uCgkgKiAgQHBhcmFtIHtvYmplY3R9IHNldHRpbmdzIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkgKiAgQG1lbWJlcm9mIERhdGFUYWJsZSNvQXBpCgkgKi8KCWZ1bmN0aW9uIF9mbkNvbHVtblR5cGVzICggc2V0dGluZ3MgKQoJewoJCXZhciBjb2x1bW5zID0gc2V0dGluZ3MuYW9Db2x1bW5zOwoJCXZhciBkYXRhID0gc2V0dGluZ3MuYW9EYXRhOwoJCXZhciB0eXBlcyA9IERhdGFUYWJsZS5leHQudHlwZS5kZXRlY3Q7CgkJdmFyIGksIGllbiwgaiwgamVuLCBrLCBrZW47CgkJdmFyIGNvbCwgY2VsbCwgZGV0ZWN0ZWRUeXBlLCBjYWNoZTsKCQoJCS8vIEZvciBlYWNoIGNvbHVtbiwgc3BpbiBvdmVyIHRoZSAKCQlmb3IgKCBpPTAsIGllbj1jb2x1bW5zLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQljb2wgPSBjb2x1bW5zW2ldOwoJCQljYWNoZSA9IFtdOwoJCgkJCWlmICggISBjb2wuc1R5cGUgJiYgY29sLl9zTWFudWFsVHlwZSApIHsKCQkJCWNvbC5zVHlwZSA9IGNvbC5fc01hbnVhbFR5cGU7CgkJCX0KCQkJZWxzZSBpZiAoICEgY29sLnNUeXBlICkgewoJCQkJZm9yICggaj0wLCBqZW49dHlwZXMubGVuZ3RoIDsgajxqZW4gOyBqKysgKSB7CgkJCQkJZm9yICggaz0wLCBrZW49ZGF0YS5sZW5ndGggOyBrPGtlbiA7IGsrKyApIHsKCQkJCQkJLy8gVXNlIGEgY2FjaGUgYXJyYXkgc28gd2Ugb25seSBuZWVkIHRvIGdldCB0aGUgdHlwZSBkYXRhCgkJCQkJCS8vIGZyb20gdGhlIGZvcm1hdHRlciBvbmNlICh3aGVuIHVzaW5nIG11bHRpcGxlIGRldGVjdG9ycykKCQkJCQkJaWYgKCBjYWNoZVtrXSA9PT0gdW5kZWZpbmVkICkgewoJCQkJCQkJY2FjaGVba10gPSBfZm5HZXRDZWxsRGF0YSggc2V0dGluZ3MsIGssIGksICd0eXBlJyApOwoJCQkJCQl9CgkKCQkJCQkJZGV0ZWN0ZWRUeXBlID0gdHlwZXNbal0oIGNhY2hlW2tdLCBzZXR0aW5ncyApOwoJCgkJCQkJCS8vIElmIG51bGwsIHRoZW4gdGhpcyB0eXBlIGNhbid0IGFwcGx5IHRvIHRoaXMgY29sdW1uLCBzbwoJCQkJCQkvLyByYXRoZXIgdGhhbiB0ZXN0aW5nIGFsbCBjZWxscywgYnJlYWsgb3V0LiBUaGVyZSBpcyBhbgoJCQkJCQkvLyBleGNlcHRpb24gZm9yIHRoZSBsYXN0IHR5cGUgd2hpY2ggaXMgYGh0bWxgLiBXZSBuZWVkIHRvCgkJCQkJCS8vIHNjYW4gYWxsIHJvd3Mgc2luY2UgaXQgaXMgcG9zc2libGUgdG8gbWl4IHN0cmluZyBhbmQgSFRNTAoJCQkJCQkvLyB0eXBlcwoJCQkJCQlpZiAoICEgZGV0ZWN0ZWRUeXBlICYmIGogIT09IHR5cGVzLmxlbmd0aC0xICkgewoJCQkJCQkJYnJlYWs7CgkJCQkJCX0KCQoJCQkJCQkvLyBPbmx5IGEgc2luZ2xlIG1hdGNoIGlzIG5lZWRlZCBmb3IgaHRtbCB0eXBlIHNpbmNlIGl0IGlzCgkJCQkJCS8vIGJvdHRvbSBvZiB0aGUgcGlsZSBhbmQgdmVyeSBzaW1pbGFyIHRvIHN0cmluZwoJCQkJCQlpZiAoIGRldGVjdGVkVHlwZSA9PT0gJ2h0bWwnICkgewoJCQkJCQkJYnJlYWs7CgkJCQkJCX0KCQkJCQl9CgkKCQkJCQkvLyBUeXBlIGlzIHZhbGlkIGZvciBhbGwgZGF0YSBwb2ludHMgaW4gdGhlIGNvbHVtbiAtIHVzZSB0aGlzCgkJCQkJLy8gdHlwZQoJCQkJCWlmICggZGV0ZWN0ZWRUeXBlICkgewoJCQkJCQljb2wuc1R5cGUgPSBkZXRlY3RlZFR5cGU7CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCX0KCQoJCQkJLy8gRmFsbCBiYWNrIC0gaWYgbm8gdHlwZSB3YXMgZGV0ZWN0ZWQsIGFsd2F5cyB1c2Ugc3RyaW5nCgkJCQlpZiAoICEgY29sLnNUeXBlICkgewoJCQkJCWNvbC5zVHlwZSA9ICdzdHJpbmcnOwoJCQkJfQoJCQl9CgkJfQoJfQoJCgkKCS8qKgoJICogVGFrZSB0aGUgY29sdW1uIGRlZmluaXRpb25zIGFuZCBzdGF0aWMgY29sdW1ucyBhcnJheXMgYW5kIGNhbGN1bGF0ZSBob3cKCSAqIHRoZXkgcmVsYXRlIHRvIGNvbHVtbiBpbmRleGVzLiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gd2lsbCB0aGVuIGFwcGx5IHRoZQoJICogZGVmaW5pdGlvbiBmb3VuZCBmb3IgYSBjb2x1bW4gdG8gYSBzdWl0YWJsZSBjb25maWd1cmF0aW9uIG9iamVjdC4KCSAqICBAcGFyYW0ge29iamVjdH0gb1NldHRpbmdzIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkgKiAgQHBhcmFtIHthcnJheX0gYW9Db2xEZWZzIFRoZSBhb0NvbHVtbkRlZnMgYXJyYXkgdGhhdCBpcyB0byBiZSBhcHBsaWVkCgkgKiAgQHBhcmFtIHthcnJheX0gYW9Db2xzIFRoZSBhb0NvbHVtbnMgYXJyYXkgdGhhdCBkZWZpbmVzIGNvbHVtbnMgaW5kaXZpZHVhbGx5CgkgKiAgQHBhcmFtIHtmdW5jdGlvbn0gZm4gQ2FsbGJhY2sgZnVuY3Rpb24gLSB0YWtlcyB0d28gcGFyYW1ldGVycywgdGhlIGNhbGN1bGF0ZWQKCSAqICAgIGNvbHVtbiBpbmRleCBhbmQgdGhlIGRlZmluaXRpb24gZm9yIHRoYXQgY29sdW1uLgoJICogIEBtZW1iZXJvZiBEYXRhVGFibGUjb0FwaQoJICovCglmdW5jdGlvbiBfZm5BcHBseUNvbHVtbkRlZnMoIG9TZXR0aW5ncywgYW9Db2xEZWZzLCBhb0NvbHMsIGZuICkKCXsKCQl2YXIgaSwgaUxlbiwgaiwgakxlbiwgaywga0xlbiwgZGVmOwoJCXZhciBjb2x1bW5zID0gb1NldHRpbmdzLmFvQ29sdW1uczsKCQoJCS8vIENvbHVtbiBkZWZpbml0aW9ucyB3aXRoIGFUYXJnZXRzCgkJaWYgKCBhb0NvbERlZnMgKQoJCXsKCQkJLyogTG9vcCBvdmVyIHRoZSBkZWZpbml0aW9ucyBhcnJheSAtIGxvb3AgaW4gcmV2ZXJzZSBzbyBmaXJzdCBpbnN0YW5jZSBoYXMgcHJpb3JpdHkgKi8KCQkJZm9yICggaT1hb0NvbERlZnMubGVuZ3RoLTEgOyBpPj0wIDsgaS0tICkKCQkJewoJCQkJZGVmID0gYW9Db2xEZWZzW2ldOwoJCgkJCQkvKiBFYWNoIGRlZmluaXRpb24gY2FuIHRhcmdldCBtdWx0aXBsZSBjb2x1bW5zLCBhcyBpdCBpcyBhbiBhcnJheSAqLwoJCQkJdmFyIGFUYXJnZXRzID0gZGVmLnRhcmdldHMgIT09IHVuZGVmaW5lZCA/CgkJCQkJZGVmLnRhcmdldHMgOgoJCQkJCWRlZi5hVGFyZ2V0czsKCQoJCQkJaWYgKCAhICQuaXNBcnJheSggYVRhcmdldHMgKSApCgkJCQl7CgkJCQkJYVRhcmdldHMgPSBbIGFUYXJnZXRzIF07CgkJCQl9CgkKCQkJCWZvciAoIGo9MCwgakxlbj1hVGFyZ2V0cy5sZW5ndGggOyBqPGpMZW4gOyBqKysgKQoJCQkJewoJCQkJCWlmICggdHlwZW9mIGFUYXJnZXRzW2pdID09PSAnbnVtYmVyJyAmJiBhVGFyZ2V0c1tqXSA+PSAwICkKCQkJCQl7CgkJCQkJCS8qIEFkZCBjb2x1bW5zIHRoYXQgd2UgZG9uJ3QgeWV0IGtub3cgYWJvdXQgKi8KCQkJCQkJd2hpbGUoIGNvbHVtbnMubGVuZ3RoIDw9IGFUYXJnZXRzW2pdICkKCQkJCQkJewoJCQkJCQkJX2ZuQWRkQ29sdW1uKCBvU2V0dGluZ3MgKTsKCQkJCQkJfQoJCgkJCQkJCS8qIEludGVnZXIsIGJhc2ljIGluZGV4ICovCgkJCQkJCWZuKCBhVGFyZ2V0c1tqXSwgZGVmICk7CgkJCQkJfQoJCQkJCWVsc2UgaWYgKCB0eXBlb2YgYVRhcmdldHNbal0gPT09ICdudW1iZXInICYmIGFUYXJnZXRzW2pdIDwgMCApCgkJCQkJewoJCQkJCQkvKiBOZWdhdGl2ZSBpbnRlZ2VyLCByaWdodCB0byBsZWZ0IGNvbHVtbiBjb3VudGluZyAqLwoJCQkJCQlmbiggY29sdW1ucy5sZW5ndGgrYVRhcmdldHNbal0sIGRlZiApOwoJCQkJCX0KCQkJCQllbHNlIGlmICggdHlwZW9mIGFUYXJnZXRzW2pdID09PSAnc3RyaW5nJyApCgkJCQkJewoJCQkJCQkvKiBDbGFzcyBuYW1lIG1hdGNoaW5nIG9uIFRIIGVsZW1lbnQgKi8KCQkJCQkJZm9yICggaz0wLCBrTGVuPWNvbHVtbnMubGVuZ3RoIDsgazxrTGVuIDsgaysrICkKCQkJCQkJewoJCQkJCQkJaWYgKCBhVGFyZ2V0c1tqXSA9PSAiX2FsbCIgfHwKCQkJCQkJCSAgICAgJChjb2x1bW5zW2tdLm5UaCkuaGFzQ2xhc3MoIGFUYXJnZXRzW2pdICkgKQoJCQkJCQkJewoJCQkJCQkJCWZuKCBrLCBkZWYgKTsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCQoJCS8vIFN0YXRpY2FsbHkgZGVmaW5lZCBjb2x1bW5zIGFycmF5CgkJaWYgKCBhb0NvbHMgKQoJCXsKCQkJZm9yICggaT0wLCBpTGVuPWFvQ29scy5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCQl7CgkJCQlmbiggaSwgYW9Db2xzW2ldICk7CgkJCX0KCQl9Cgl9CgkKCS8qKgoJICogQWRkIGEgZGF0YSBhcnJheSB0byB0aGUgdGFibGUsIGNyZWF0aW5nIERPTSBub2RlIGV0Yy4gVGhpcyBpcyB0aGUgcGFyYWxsZWwgdG8KCSAqIF9mbkdhdGhlckRhdGEsIGJ1dCBmb3IgYWRkaW5nIHJvd3MgZnJvbSBhIEphdmFzY3JpcHQgc291cmNlLCByYXRoZXIgdGhhbiBhCgkgKiBET00gc291cmNlLgoJICogIEBwYXJhbSB7b2JqZWN0fSBvU2V0dGluZ3MgZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCSAqICBAcGFyYW0ge2FycmF5fSBhRGF0YSBkYXRhIGFycmF5IHRvIGJlIGFkZGVkCgkgKiAgQHBhcmFtIHtub2RlfSBbblRyXSBUUiBlbGVtZW50IHRvIGFkZCB0byB0aGUgdGFibGUgLSBvcHRpb25hbC4gSWYgbm90IGdpdmVuLAoJICogICAgRGF0YVRhYmxlcyB3aWxsIGNyZWF0ZSBhIHJvdyBhdXRvbWF0aWNhbGx5CgkgKiAgQHBhcmFtIHthcnJheX0gW2FuVGRzXSBBcnJheSBvZiBURHxUSCBlbGVtZW50cyBmb3IgdGhlIHJvdyAtIG11c3QgYmUgZ2l2ZW4KCSAqICAgIGlmIG5UciBpcy4KCSAqICBAcmV0dXJucyB7aW50fSA+PTAgaWYgc3VjY2Vzc2Z1bCAoaW5kZXggb2YgbmV3IGFvRGF0YSBlbnRyeSksIC0xIGlmIGZhaWxlZAoJICogIEBtZW1iZXJvZiBEYXRhVGFibGUjb0FwaQoJICovCglmdW5jdGlvbiBfZm5BZGREYXRhICggb1NldHRpbmdzLCBhRGF0YUluLCBuVHIsIGFuVGRzICkKCXsKCQkvKiBDcmVhdGUgdGhlIG9iamVjdCBmb3Igc3RvcmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIG5ldyByb3cgKi8KCQl2YXIgaVJvdyA9IG9TZXR0aW5ncy5hb0RhdGEubGVuZ3RoOwoJCXZhciBvRGF0YSA9ICQuZXh0ZW5kKCB0cnVlLCB7fSwgRGF0YVRhYmxlLm1vZGVscy5vUm93LCB7CgkJCXNyYzogblRyID8gJ2RvbScgOiAnZGF0YScsCgkJCWlkeDogaVJvdwoJCX0gKTsKCQoJCW9EYXRhLl9hRGF0YSA9IGFEYXRhSW47CgkJb1NldHRpbmdzLmFvRGF0YS5wdXNoKCBvRGF0YSApOwoJCgkJLyogQ3JlYXRlIHRoZSBjZWxscyAqLwoJCXZhciBuVGQsIHNUaGlzVHlwZTsKCQl2YXIgY29sdW1ucyA9IG9TZXR0aW5ncy5hb0NvbHVtbnM7CgkKCQkvLyBJbnZhbGlkYXRlIHRoZSBjb2x1bW4gdHlwZXMgYXMgdGhlIG5ldyBkYXRhIG5lZWRzIHRvIGJlIHJldmFsaWRhdGVkCgkJZm9yICggdmFyIGk9MCwgaUxlbj1jb2x1bW5zLmxlbmd0aCA7IGk8aUxlbiA7IGkrKyApCgkJewoJCQljb2x1bW5zW2ldLnNUeXBlID0gbnVsbDsKCQl9CgkKCQkvKiBBZGQgdG8gdGhlIGRpc3BsYXkgYXJyYXkgKi8KCQlvU2V0dGluZ3MuYWlEaXNwbGF5TWFzdGVyLnB1c2goIGlSb3cgKTsKCQoJCXZhciBpZCA9IG9TZXR0aW5ncy5yb3dJZEZuKCBhRGF0YUluICk7CgkJaWYgKCBpZCAhPT0gdW5kZWZpbmVkICkgewoJCQlvU2V0dGluZ3MuYUlkc1sgaWQgXSA9IG9EYXRhOwoJCX0KCQoJCS8qIENyZWF0ZSB0aGUgRE9NIGluZm9ybWF0aW9uLCBvciByZWdpc3RlciBpdCBpZiBhbHJlYWR5IHByZXNlbnQgKi8KCQlpZiAoIG5UciB8fCAhIG9TZXR0aW5ncy5vRmVhdHVyZXMuYkRlZmVyUmVuZGVyICkKCQl7CgkJCV9mbkNyZWF0ZVRyKCBvU2V0dGluZ3MsIGlSb3csIG5UciwgYW5UZHMgKTsKCQl9CgkKCQlyZXR1cm4gaVJvdzsKCX0KCQoJCgkvKioKCSAqIEFkZCBvbmUgb3IgbW9yZSBUUiBlbGVtZW50cyB0byB0aGUgdGFibGUuIEdlbmVyYWxseSB3ZSdkIGV4cGVjdCB0bwoJICogdXNlIHRoaXMgZm9yIHJlYWRpbmcgZGF0YSBmcm9tIGEgRE9NIHNvdXJjZWQgdGFibGUsIGJ1dCBpdCBjb3VsZCBiZQoJICogdXNlZCBmb3IgYW4gVFIgZWxlbWVudC4gTm90ZSB0aGF0IGlmIGEgVFIgaXMgZ2l2ZW4sIGl0IGlzIHVzZWQgKGkuZS4KCSAqIGl0IGlzIG5vdCBjbG9uZWQpLgoJICogIEBwYXJhbSB7b2JqZWN0fSBzZXR0aW5ncyBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJICogIEBwYXJhbSB7YXJyYXl8bm9kZXxqUXVlcnl9IHRycyBUaGUgVFIgZWxlbWVudChzKSB0byBhZGQgdG8gdGhlIHRhYmxlCgkgKiAgQHJldHVybnMge2FycmF5fSBBcnJheSBvZiBpbmRleGVzIGZvciB0aGUgYWRkZWQgcm93cwoJICogIEBtZW1iZXJvZiBEYXRhVGFibGUjb0FwaQoJICovCglmdW5jdGlvbiBfZm5BZGRUciggc2V0dGluZ3MsIHRycyApCgl7CgkJdmFyIHJvdzsKCQoJCS8vIEFsbG93IGFuIGluZGl2aWR1YWwgbm9kZSB0byBiZSBwYXNzZWQgaW4KCQlpZiAoICEgKHRycyBpbnN0YW5jZW9mICQpICkgewoJCQl0cnMgPSAkKHRycyk7CgkJfQoJCgkJcmV0dXJuIHRycy5tYXAoIGZ1bmN0aW9uIChpLCBlbCkgewoJCQlyb3cgPSBfZm5HZXRSb3dFbGVtZW50cyggc2V0dGluZ3MsIGVsICk7CgkJCXJldHVybiBfZm5BZGREYXRhKCBzZXR0aW5ncywgcm93LmRhdGEsIGVsLCByb3cuY2VsbHMgKTsKCQl9ICk7Cgl9CgkKCQoJLyoqCgkgKiBUYWtlIGEgVFIgZWxlbWVudCBhbmQgY29udmVydCBpdCB0byBhbiBpbmRleCBpbiBhb0RhdGEKCSAqICBAcGFyYW0ge29iamVjdH0gb1NldHRpbmdzIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkgKiAgQHBhcmFtIHtub2RlfSBuIHRoZSBUUiBlbGVtZW50IHRvIGZpbmQKCSAqICBAcmV0dXJucyB7aW50fSBpbmRleCBpZiB0aGUgbm9kZSBpcyBmb3VuZCwgbnVsbCBpZiBub3QKCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuTm9kZVRvRGF0YUluZGV4KCBvU2V0dGluZ3MsIG4gKQoJewoJCXJldHVybiAobi5fRFRfUm93SW5kZXghPT11bmRlZmluZWQpID8gbi5fRFRfUm93SW5kZXggOiBudWxsOwoJfQoJCgkKCS8qKgoJICogVGFrZSBhIFREIGVsZW1lbnQgYW5kIGNvbnZlcnQgaXQgaW50byBhIGNvbHVtbiBkYXRhIGluZGV4IChub3QgdGhlIHZpc2libGUgaW5kZXgpCgkgKiAgQHBhcmFtIHtvYmplY3R9IG9TZXR0aW5ncyBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJICogIEBwYXJhbSB7aW50fSBpUm93IFRoZSByb3cgbnVtYmVyIHRoZSBURC9USCBjYW4gYmUgZm91bmQgaW4KCSAqICBAcGFyYW0ge25vZGV9IG4gVGhlIFREL1RIIGVsZW1lbnQgdG8gZmluZAoJICogIEByZXR1cm5zIHtpbnR9IGluZGV4IGlmIHRoZSBub2RlIGlzIGZvdW5kLCAtMSBpZiBub3QKCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuTm9kZVRvQ29sdW1uSW5kZXgoIG9TZXR0aW5ncywgaVJvdywgbiApCgl7CgkJcmV0dXJuICQuaW5BcnJheSggbiwgb1NldHRpbmdzLmFvRGF0YVsgaVJvdyBdLmFuQ2VsbHMgKTsKCX0KCQoJCgkvKioKCSAqIEdldCB0aGUgZGF0YSBmb3IgYSBnaXZlbiBjZWxsIGZyb20gdGhlIGludGVybmFsIGNhY2hlLCB0YWtpbmcgaW50byBhY2NvdW50IGRhdGEgbWFwcGluZwoJICogIEBwYXJhbSB7b2JqZWN0fSBzZXR0aW5ncyBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJICogIEBwYXJhbSB7aW50fSByb3dJZHggYW9EYXRhIHJvdyBpZAoJICogIEBwYXJhbSB7aW50fSBjb2xJZHggQ29sdW1uIGluZGV4CgkgKiAgQHBhcmFtIHtzdHJpbmd9IHR5cGUgZGF0YSBnZXQgdHlwZSAoJ2Rpc3BsYXknLCAndHlwZScgJ2ZpbHRlcicgJ3NvcnQnKQoJICogIEByZXR1cm5zIHsqfSBDZWxsIGRhdGEKCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuR2V0Q2VsbERhdGEoIHNldHRpbmdzLCByb3dJZHgsIGNvbElkeCwgdHlwZSApCgl7CgkJdmFyIGRyYXcgICAgICAgICAgID0gc2V0dGluZ3MuaURyYXc7CgkJdmFyIGNvbCAgICAgICAgICAgID0gc2V0dGluZ3MuYW9Db2x1bW5zW2NvbElkeF07CgkJdmFyIHJvd0RhdGEgICAgICAgID0gc2V0dGluZ3MuYW9EYXRhW3Jvd0lkeF0uX2FEYXRhOwoJCXZhciBkZWZhdWx0Q29udGVudCA9IGNvbC5zRGVmYXVsdENvbnRlbnQ7CgkJdmFyIGNlbGxEYXRhICAgICAgID0gY29sLmZuR2V0RGF0YSggcm93RGF0YSwgdHlwZSwgewoJCQlzZXR0aW5nczogc2V0dGluZ3MsCgkJCXJvdzogICAgICByb3dJZHgsCgkJCWNvbDogICAgICBjb2xJZHgKCQl9ICk7CgkKCQlpZiAoIGNlbGxEYXRhID09PSB1bmRlZmluZWQgKSB7CgkJCWlmICggc2V0dGluZ3MuaURyYXdFcnJvciAhPSBkcmF3ICYmIGRlZmF1bHRDb250ZW50ID09PSBudWxsICkgewoJCQkJX2ZuTG9nKCBzZXR0aW5ncywgMCwgIlJlcXVlc3RlZCB1bmtub3duIHBhcmFtZXRlciAiKwoJCQkJCSh0eXBlb2YgY29sLm1EYXRhPT0nZnVuY3Rpb24nID8gJ3tmdW5jdGlvbn0nIDogIiciK2NvbC5tRGF0YSsiJyIpKwoJCQkJCSIgZm9yIHJvdyAiK3Jvd0lkeCsiLCBjb2x1bW4gIitjb2xJZHgsIDQgKTsKCQkJCXNldHRpbmdzLmlEcmF3RXJyb3IgPSBkcmF3OwoJCQl9CgkJCXJldHVybiBkZWZhdWx0Q29udGVudDsKCQl9CgkKCQkvLyBXaGVuIHRoZSBkYXRhIHNvdXJjZSBpcyBudWxsIGFuZCBhIHNwZWNpZmljIGRhdGEgdHlwZSBpcyByZXF1ZXN0ZWQgKGkuZS4KCQkvLyBub3QgdGhlIG9yaWdpbmFsIGRhdGEpLCB3ZSBjYW4gdXNlIGRlZmF1bHQgY29sdW1uIGRhdGEKCQlpZiAoIChjZWxsRGF0YSA9PT0gcm93RGF0YSB8fCBjZWxsRGF0YSA9PT0gbnVsbCkgJiYgZGVmYXVsdENvbnRlbnQgIT09IG51bGwgJiYgdHlwZSAhPT0gdW5kZWZpbmVkICkgewoJCQljZWxsRGF0YSA9IGRlZmF1bHRDb250ZW50OwoJCX0KCQllbHNlIGlmICggdHlwZW9mIGNlbGxEYXRhID09PSAnZnVuY3Rpb24nICkgewoJCQkvLyBJZiB0aGUgZGF0YSBzb3VyY2UgaXMgYSBmdW5jdGlvbiwgdGhlbiB3ZSBydW4gaXQgYW5kIHVzZSB0aGUgcmV0dXJuLAoJCQkvLyBleGVjdXRpbmcgaW4gdGhlIHNjb3BlIG9mIHRoZSBkYXRhIG9iamVjdCAoZm9yIGluc3RhbmNlcykKCQkJcmV0dXJuIGNlbGxEYXRhLmNhbGwoIHJvd0RhdGEgKTsKCQl9CgkKCQlpZiAoIGNlbGxEYXRhID09PSBudWxsICYmIHR5cGUgPT0gJ2Rpc3BsYXknICkgewoJCQlyZXR1cm4gJyc7CgkJfQoJCXJldHVybiBjZWxsRGF0YTsKCX0KCQoJCgkvKioKCSAqIFNldCB0aGUgdmFsdWUgZm9yIGEgc3BlY2lmaWMgY2VsbCwgaW50byB0aGUgaW50ZXJuYWwgZGF0YSBjYWNoZQoJICogIEBwYXJhbSB7b2JqZWN0fSBzZXR0aW5ncyBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJICogIEBwYXJhbSB7aW50fSByb3dJZHggYW9EYXRhIHJvdyBpZAoJICogIEBwYXJhbSB7aW50fSBjb2xJZHggQ29sdW1uIGluZGV4CgkgKiAgQHBhcmFtIHsqfSB2YWwgVmFsdWUgdG8gc2V0CgkgKiAgQG1lbWJlcm9mIERhdGFUYWJsZSNvQXBpCgkgKi8KCWZ1bmN0aW9uIF9mblNldENlbGxEYXRhKCBzZXR0aW5ncywgcm93SWR4LCBjb2xJZHgsIHZhbCApCgl7CgkJdmFyIGNvbCAgICAgPSBzZXR0aW5ncy5hb0NvbHVtbnNbY29sSWR4XTsKCQl2YXIgcm93RGF0YSA9IHNldHRpbmdzLmFvRGF0YVtyb3dJZHhdLl9hRGF0YTsKCQoJCWNvbC5mblNldERhdGEoIHJvd0RhdGEsIHZhbCwgewoJCQlzZXR0aW5nczogc2V0dGluZ3MsCgkJCXJvdzogICAgICByb3dJZHgsCgkJCWNvbDogICAgICBjb2xJZHgKCQl9ICApOwoJfQoJCgkKCS8vIFByaXZhdGUgdmFyaWFibGUgdGhhdCBpcyB1c2VkIHRvIG1hdGNoIGFjdGlvbiBzeW50YXggaW4gdGhlIGRhdGEgcHJvcGVydHkgb2JqZWN0Cgl2YXIgX19yZUFycmF5ID0gL1xbLio/XF0kLzsKCXZhciBfX3JlRm4gPSAvXA=="
},
{
"key": "jquery.dataTables.js?4?4?0",
"type": "binary",
"value": "base64:KFwpJC87CgkKCS8qKgoJICogU3BsaXQgc3RyaW5nIG9uIHBlcmlvZHMsIHRha2luZyBpbnRvIGFjY291bnQgZXNjYXBlZCBwZXJpb2RzCgkgKiBAcGFyYW0gIHtzdHJpbmd9IHN0ciBTdHJpbmcgdG8gc3BsaXQKCSAqIEByZXR1cm4ge2FycmF5fSBTcGxpdCBzdHJpbmcKCSAqLwoJZnVuY3Rpb24gX2ZuU3BsaXRPYmpOb3RhdGlvbiggc3RyICkKCXsKCQlyZXR1cm4gJC5tYXAoIHN0ci5tYXRjaCgvKFxcLnxbXlwuXSkrL2cpIHx8IFsnJ10sIGZ1bmN0aW9uICggcyApIHsKCQkJcmV0dXJuIHMucmVwbGFjZSgvXFxcLi9nLCAnLicpOwoJCX0gKTsKCX0KCQoJCgkvKioKCSAqIFJldHVybiBhIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgdG8gZ2V0IGRhdGEgZnJvbSBhIHNvdXJjZSBvYmplY3QsIHRha2luZwoJICogaW50byBhY2NvdW50IHRoZSBhYmlsaXR5IHRvIHVzZSBuZXN0ZWQgb2JqZWN0cyBhcyBhIHNvdXJjZQoJICogIEBwYXJhbSB7c3RyaW5nfGludHxmdW5jdGlvbn0gbVNvdXJjZSBUaGUgZGF0YSBzb3VyY2UgZm9yIHRoZSBvYmplY3QKCSAqICBAcmV0dXJucyB7ZnVuY3Rpb259IERhdGEgZ2V0IGZ1bmN0aW9uCgkgKiAgQG1lbWJlcm9mIERhdGFUYWJsZSNvQXBpCgkgKi8KCWZ1bmN0aW9uIF9mbkdldE9iamVjdERhdGFGbiggbVNvdXJjZSApCgl7CgkJaWYgKCAkLmlzUGxhaW5PYmplY3QoIG1Tb3VyY2UgKSApCgkJewoJCQkvKiBCdWlsZCBhbiBvYmplY3Qgb2YgZ2V0IGZ1bmN0aW9ucywgYW5kIHdyYXAgdGhlbSBpbiBhIHNpbmdsZSBjYWxsICovCgkJCXZhciBvID0ge307CgkJCSQuZWFjaCggbVNvdXJjZSwgZnVuY3Rpb24gKGtleSwgdmFsKSB7CgkJCQlpZiAoIHZhbCApIHsKCQkJCQlvW2tleV0gPSBfZm5HZXRPYmplY3REYXRhRm4oIHZhbCApOwoJCQkJfQoJCQl9ICk7CgkKCQkJcmV0dXJuIGZ1bmN0aW9uIChkYXRhLCB0eXBlLCByb3csIG1ldGEpIHsKCQkJCXZhciB0ID0gb1t0eXBlXSB8fCBvLl87CgkJCQlyZXR1cm4gdCAhPT0gdW5kZWZpbmVkID8KCQkJCQl0KGRhdGEsIHR5cGUsIHJvdywgbWV0YSkgOgoJCQkJCWRhdGE7CgkJCX07CgkJfQoJCWVsc2UgaWYgKCBtU291cmNlID09PSBudWxsICkKCQl7CgkJCS8qIEdpdmUgYW4gZW1wdHkgc3RyaW5nIGZvciByZW5kZXJpbmcgLyBzb3J0aW5nIGV0YyAqLwoJCQlyZXR1cm4gZnVuY3Rpb24gKGRhdGEpIHsgLy8gdHlwZSwgcm93IGFuZCBtZXRhIGFsc28gcGFzc2VkLCBidXQgbm90IHVzZWQKCQkJCXJldHVybiBkYXRhOwoJCQl9OwoJCX0KCQllbHNlIGlmICggdHlwZW9mIG1Tb3VyY2UgPT09ICdmdW5jdGlvbicgKQoJCXsKCQkJcmV0dXJuIGZ1bmN0aW9uIChkYXRhLCB0eXBlLCByb3csIG1ldGEpIHsKCQkJCXJldHVybiBtU291cmNlKCBkYXRhLCB0eXBlLCByb3csIG1ldGEgKTsKCQkJfTsKCQl9CgkJZWxzZSBpZiAoIHR5cGVvZiBtU291cmNlID09PSAnc3RyaW5nJyAmJiAobVNvdXJjZS5pbmRleE9mKCcuJykgIT09IC0xIHx8CgkJCSAgICAgIG1Tb3VyY2UuaW5kZXhPZignWycpICE9PSAtMSB8fCBtU291cmNlLmluZGV4T2YoJygnKSAhPT0gLTEpICkKCQl7CgkJCS8qIElmIHRoZXJlIGlzIGEgLiBpbiB0aGUgc291cmNlIHN0cmluZyB0aGVuIHRoZSBkYXRhIHNvdXJjZSBpcyBpbiBhCgkJCSAqIG5lc3RlZCBvYmplY3Qgc28gd2UgbG9vcCBvdmVyIHRoZSBkYXRhIGZvciBlYWNoIGxldmVsIHRvIGdldCB0aGUgbmV4dAoJCQkgKiBsZXZlbCBkb3duLiBPbiBlYWNoIGxvb3Agd2UgdGVzdCBmb3IgdW5kZWZpbmVkLCBhbmQgaWYgZm91bmQgaW1tZWRpYXRlbHkKCQkJICogcmV0dXJuLiBUaGlzIGFsbG93cyBlbnRpcmUgb2JqZWN0cyB0byBiZSBtaXNzaW5nIGFuZCBzRGVmYXVsdENvbnRlbnQgdG8KCQkJICogYmUgdXNlZCBpZiBkZWZpbmVkLCByYXRoZXIgdGhhbiB0aHJvd2luZyBhbiBlcnJvcgoJCQkgKi8KCQkJdmFyIGZldGNoRGF0YSA9IGZ1bmN0aW9uIChkYXRhLCB0eXBlLCBzcmMpIHsKCQkJCXZhciBhcnJheU5vdGF0aW9uLCBmdW5jTm90YXRpb24sIG91dCwgaW5uZXJTcmM7CgkKCQkJCWlmICggc3JjICE9PSAiIiApCgkJCQl7CgkJCQkJdmFyIGEgPSBfZm5TcGxpdE9iak5vdGF0aW9uKCBzcmMgKTsKCQoJCQkJCWZvciAoIHZhciBpPTAsIGlMZW49YS5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCQkJCXsKCQkJCQkJLy8gQ2hlY2sgaWYgd2UgYXJlIGRlYWxpbmcgd2l0aCBzcGVjaWFsIG5vdGF0aW9uCgkJCQkJCWFycmF5Tm90YXRpb24gPSBhW2ldLm1hdGNoKF9fcmVBcnJheSk7CgkJCQkJCWZ1bmNOb3RhdGlvbiA9IGFbaV0ubWF0Y2goX19yZUZuKTsKCQoJCQkJCQlpZiAoIGFycmF5Tm90YXRpb24gKQoJCQkJCQl7CgkJCQkJCQkvLyBBcnJheSBub3RhdGlvbgoJCQkJCQkJYVtpXSA9IGFbaV0ucmVwbGFjZShfX3JlQXJyYXksICcnKTsKCQoJCQkJCQkJLy8gQ29uZGl0aW9uIGFsbG93cyBzaW1wbHkgW10gdG8gYmUgcGFzc2VkIGluCgkJCQkJCQlpZiAoIGFbaV0gIT09ICIiICkgewoJCQkJCQkJCWRhdGEgPSBkYXRhWyBhW2ldIF07CgkJCQkJCQl9CgkJCQkJCQlvdXQgPSBbXTsKCQoJCQkJCQkJLy8gR2V0IHRoZSByZW1haW5kZXIgb2YgdGhlIG5lc3RlZCBvYmplY3QgdG8gZ2V0CgkJCQkJCQlhLnNwbGljZSggMCwgaSsxICk7CgkJCQkJCQlpbm5lclNyYyA9IGEuam9pbignLicpOwoJCgkJCQkJCQkvLyBUcmF2ZXJzZSBlYWNoIGVudHJ5IGluIHRoZSBhcnJheSBnZXR0aW5nIHRoZSBwcm9wZXJ0aWVzIHJlcXVlc3RlZAoJCQkJCQkJaWYgKCAkLmlzQXJyYXkoIGRhdGEgKSApIHsKCQkJCQkJCQlmb3IgKCB2YXIgaj0wLCBqTGVuPWRhdGEubGVuZ3RoIDsgajxqTGVuIDsgaisrICkgewoJCQkJCQkJCQlvdXQucHVzaCggZmV0Y2hEYXRhKCBkYXRhW2pdLCB0eXBlLCBpbm5lclNyYyApICk7CgkJCQkJCQkJfQoJCQkJCQkJfQoJCgkJCQkJCQkvLyBJZiBhIHN0cmluZyBpcyBnaXZlbiBpbiBiZXR3ZWVuIHRoZSBhcnJheSBub3RhdGlvbiBpbmRpY2F0b3JzLCB0aGF0CgkJCQkJCQkvLyBpcyB1c2VkIHRvIGpvaW4gdGhlIHN0cmluZ3MgdG9nZXRoZXIsIG90aGVyd2lzZSBhbiBhcnJheSBpcyByZXR1cm5lZAoJCQkJCQkJdmFyIGpvaW4gPSBhcnJheU5vdGF0aW9uWzBdLnN1YnN0cmluZygxLCBhcnJheU5vdGF0aW9uWzBdLmxlbmd0aC0xKTsKCQkJCQkJCWRhdGEgPSAoam9pbj09PSIiKSA/IG91dCA6IG91dC5qb2luKGpvaW4pOwoJCgkJCQkJCQkvLyBUaGUgaW5uZXIgY2FsbCB0byBmZXRjaERhdGEgaGFzIGFscmVhZHkgdHJhdmVyc2VkIHRocm91Z2ggdGhlIHJlbWFpbmRlcgoJCQkJCQkJLy8gb2YgdGhlIHNvdXJjZSByZXF1ZXN0ZWQsIHNvIHdlIGV4aXQgZnJvbSB0aGUgbG9vcAoJCQkJCQkJYnJlYWs7CgkJCQkJCX0KCQkJCQkJZWxzZSBpZiAoIGZ1bmNOb3RhdGlvbiApCgkJCQkJCXsKCQkJCQkJCS8vIEZ1bmN0aW9uIGNhbGwKCQkJCQkJCWFbaV0gPSBhW2ldLnJlcGxhY2UoX19yZUZuLCAnJyk7CgkJCQkJCQlkYXRhID0gZGF0YVsgYVtpXSBdKCk7CgkJCQkJCQljb250aW51ZTsKCQkJCQkJfQoJCgkJCQkJCWlmICggZGF0YSA9PT0gbnVsbCB8fCBkYXRhWyBhW2ldIF0gPT09IHVuZGVmaW5lZCApCgkJCQkJCXsKCQkJCQkJCXJldHVybiB1bmRlZmluZWQ7CgkJCQkJCX0KCQkJCQkJZGF0YSA9IGRhdGFbIGFbaV0gXTsKCQkJCQl9CgkJCQl9CgkKCQkJCXJldHVybiBkYXRhOwoJCQl9OwoJCgkJCXJldHVybiBmdW5jdGlvbiAoZGF0YSwgdHlwZSkgeyAvLyByb3cgYW5kIG1ldGEgYWxzbyBwYXNzZWQsIGJ1dCBub3QgdXNlZAoJCQkJcmV0dXJuIGZldGNoRGF0YSggZGF0YSwgdHlwZSwgbVNvdXJjZSApOwoJCQl9OwoJCX0KCQllbHNlCgkJewoJCQkvKiBBcnJheSBvciBmbGF0IG9iamVjdCBtYXBwaW5nICovCgkJCXJldHVybiBmdW5jdGlvbiAoZGF0YSwgdHlwZSkgeyAvLyByb3cgYW5kIG1ldGEgYWxzbyBwYXNzZWQsIGJ1dCBub3QgdXNlZAoJCQkJcmV0dXJuIGRhdGFbbVNvdXJjZV07CgkJCX07CgkJfQoJfQoJCgkKCS8qKgoJICogUmV0dXJuIGEgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB0byBzZXQgZGF0YSBmcm9tIGEgc291cmNlIG9iamVjdCwgdGFraW5nCgkgKiBpbnRvIGFjY291bnQgdGhlIGFiaWxpdHkgdG8gdXNlIG5lc3RlZCBvYmplY3RzIGFzIGEgc291cmNlCgkgKiAgQHBhcmFtIHtzdHJpbmd8aW50fGZ1bmN0aW9ufSBtU291cmNlIFRoZSBkYXRhIHNvdXJjZSBmb3IgdGhlIG9iamVjdAoJICogIEByZXR1cm5zIHtmdW5jdGlvbn0gRGF0YSBzZXQgZnVuY3Rpb24KCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuU2V0T2JqZWN0RGF0YUZuKCBtU291cmNlICkKCXsKCQlpZiAoICQuaXNQbGFpbk9iamVjdCggbVNvdXJjZSApICkKCQl7CgkJCS8qIFVubGlrZSBnZXQsIG9ubHkgdGhlIHVuZGVyc2NvcmUgKGdsb2JhbCkgb3B0aW9uIGlzIHVzZWQgZm9yIGZvcgoJCQkgKiBzZXR0aW5nIGRhdGEgc2luY2Ugd2UgZG9uJ3Qga25vdyB0aGUgdHlwZSBoZXJlLiBUaGlzIGlzIHdoeSBhbiBvYmplY3QKCQkJICogb3B0aW9uIGlzIG5vdCBkb2N1bWVudGVkIGZvciBgbURhdGFgICh3aGljaCBpcyByZWFkL3dyaXRlKSwgYnV0IGl0IGlzCgkJCSAqIGZvciBgbVJlbmRlcmAgd2hpY2ggaXMgcmVhZCBvbmx5LgoJCQkgKi8KCQkJcmV0dXJuIF9mblNldE9iamVjdERhdGFGbiggbVNvdXJjZS5fICk7CgkJfQoJCWVsc2UgaWYgKCBtU291cmNlID09PSBudWxsICkKCQl7CgkJCS8qIE5vdGhpbmcgdG8gZG8gd2hlbiB0aGUgZGF0YSBzb3VyY2UgaXMgbnVsbCAqLwoJCQlyZXR1cm4gZnVuY3Rpb24gKCkge307CgkJfQoJCWVsc2UgaWYgKCB0eXBlb2YgbVNvdXJjZSA9PT0gJ2Z1bmN0aW9uJyApCgkJewoJCQlyZXR1cm4gZnVuY3Rpb24gKGRhdGEsIHZhbCwgbWV0YSkgewoJCQkJbVNvdXJjZSggZGF0YSwgJ3NldCcsIHZhbCwgbWV0YSApOwoJCQl9OwoJCX0KCQllbHNlIGlmICggdHlwZW9mIG1Tb3VyY2UgPT09ICdzdHJpbmcnICYmIChtU291cmNlLmluZGV4T2YoJy4nKSAhPT0gLTEgfHwKCQkJICAgICAgbVNvdXJjZS5pbmRleE9mKCdbJykgIT09IC0xIHx8IG1Tb3VyY2UuaW5kZXhPZignKCcpICE9PSAtMSkgKQoJCXsKCQkJLyogTGlrZSB0aGUgZ2V0LCB3ZSBuZWVkIHRvIGdldCBkYXRhIGZyb20gYSBuZXN0ZWQgb2JqZWN0ICovCgkJCXZhciBzZXREYXRhID0gZnVuY3Rpb24gKGRhdGEsIHZhbCwgc3JjKSB7CgkJCQl2YXIgYSA9IF9mblNwbGl0T2JqTm90YXRpb24oIHNyYyApLCBiOwoJCQkJdmFyIGFMYXN0ID0gYVthLmxlbmd0aC0xXTsKCQkJCXZhciBhcnJheU5vdGF0aW9uLCBmdW5jTm90YXRpb24sIG8sIGlubmVyU3JjOwoJCgkJCQlmb3IgKCB2YXIgaT0wLCBpTGVuPWEubGVuZ3RoLTEgOyBpPGlMZW4gOyBpKysgKQoJCQkJewoJCQkJCS8vIENoZWNrIGlmIHdlIGFyZSBkZWFsaW5nIHdpdGggYW4gYXJyYXkgbm90YXRpb24gcmVxdWVzdAoJCQkJCWFycmF5Tm90YXRpb24gPSBhW2ldLm1hdGNoKF9fcmVBcnJheSk7CgkJCQkJZnVuY05vdGF0aW9uID0gYVtpXS5tYXRjaChfX3JlRm4pOwoJCgkJCQkJaWYgKCBhcnJheU5vdGF0aW9uICkKCQkJCQl7CgkJCQkJCWFbaV0gPSBhW2ldLnJlcGxhY2UoX19yZUFycmF5LCAnJyk7CgkJCQkJCWRhdGFbIGFbaV0gXSA9IFtdOwoJCgkJCQkJCS8vIEdldCB0aGUgcmVtYWluZGVyIG9mIHRoZSBuZXN0ZWQgb2JqZWN0IHRvIHNldCBzbyB3ZSBjYW4gcmVjdXJzZQoJCQkJCQliID0gYS5zbGljZSgpOwoJCQkJCQliLnNwbGljZSggMCwgaSsxICk7CgkJCQkJCWlubmVyU3JjID0gYi5qb2luKCcuJyk7CgkKCQkJCQkJLy8gVHJhdmVyc2UgZWFjaCBlbnRyeSBpbiB0aGUgYXJyYXkgc2V0dGluZyB0aGUgcHJvcGVydGllcyByZXF1ZXN0ZWQKCQkJCQkJaWYgKCAkLmlzQXJyYXkoIHZhbCApICkKCQkJCQkJewoJCQkJCQkJZm9yICggdmFyIGo9MCwgakxlbj12YWwubGVuZ3RoIDsgajxqTGVuIDsgaisrICkKCQkJCQkJCXsKCQkJCQkJCQlvID0ge307CgkJCQkJCQkJc2V0RGF0YSggbywgdmFsW2pdLCBpbm5lclNyYyApOwoJCQkJCQkJCWRhdGFbIGFbaV0gXS5wdXNoKCBvICk7CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQkJZWxzZQoJCQkJCQl7CgkJCQkJCQkvLyBXZSd2ZSBiZWVuIGFza2VkIHRvIHNhdmUgZGF0YSB0byBhbiBhcnJheSwgYnV0IGl0CgkJCQkJCQkvLyBpc24ndCBhcnJheSBkYXRhIHRvIGJlIHNhdmVkLiBCZXN0IHRoYXQgY2FuIGJlIGRvbmUKCQkJCQkJCS8vIGlzIHRvIGp1c3Qgc2F2ZSB0aGUgdmFsdWUuCgkJCQkJCQlkYXRhWyBhW2ldIF0gPSB2YWw7CgkJCQkJCX0KCQoJCQkJCQkvLyBUaGUgaW5uZXIgY2FsbCB0byBzZXREYXRhIGhhcyBhbHJlYWR5IHRyYXZlcnNlZCB0aHJvdWdoIHRoZSByZW1haW5kZXIKCQkJCQkJLy8gb2YgdGhlIHNvdXJjZSBhbmQgaGFzIHNldCB0aGUgZGF0YSwgdGh1cyB3ZSBjYW4gZXhpdCBoZXJlCgkJCQkJCXJldHVybjsKCQkJCQl9CgkJCQkJZWxzZSBpZiAoIGZ1bmNOb3RhdGlvbiApCgkJCQkJewoJCQkJCQkvLyBGdW5jdGlvbiBjYWxsCgkJCQkJCWFbaV0gPSBhW2ldLnJlcGxhY2UoX19yZUZuLCAnJyk7CgkJCQkJCWRhdGEgPSBkYXRhWyBhW2ldIF0oIHZhbCApOwoJCQkJCX0KCQoJCQkJCS8vIElmIHRoZSBuZXN0ZWQgb2JqZWN0IGRvZXNuJ3QgY3VycmVudGx5IGV4aXN0IC0gc2luY2Ugd2UgYXJlCgkJCQkJLy8gdHJ5aW5nIHRvIHNldCB0aGUgdmFsdWUgLSBjcmVhdGUgaXQKCQkJCQlpZiAoIGRhdGFbIGFbaV0gXSA9PT0gbnVsbCB8fCBkYXRhWyBhW2ldIF0gPT09IHVuZGVmaW5lZCApCgkJCQkJewoJCQkJCQlkYXRhWyBhW2ldIF0gPSB7fTsKCQkJCQl9CgkJCQkJZGF0YSA9IGRhdGFbIGFbaV0gXTsKCQkJCX0KCQoJCQkJLy8gTGFzdCBpdGVtIGluIHRoZSBpbnB1dCAtIGkuZSwgdGhlIGFjdHVhbCBzZXQKCQkJCWlmICggYUxhc3QubWF0Y2goX19yZUZuICkgKQoJCQkJewoJCQkJCS8vIEZ1bmN0aW9uIGNhbGwKCQkJCQlkYXRhID0gZGF0YVsgYUxhc3QucmVwbGFjZShfX3JlRm4sICcnKSBdKCB2YWwgKTsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQkvLyBJZiBhcnJheSBub3RhdGlvbiBpcyB1c2VkLCB3ZSBqdXN0IHdhbnQgdG8gc3RyaXAgaXQgYW5kIHVzZSB0aGUgcHJvcGVydHkgbmFtZQoJCQkJCS8vIGFuZCBhc3NpZ24gdGhlIHZhbHVlLiBJZiBpdCBpc24ndCB1c2VkLCB0aGVuIHdlIGdldCB0aGUgcmVzdWx0IHdlIHdhbnQgYW55d2F5CgkJCQkJZGF0YVsgYUxhc3QucmVwbGFjZShfX3JlQXJyYXksICcnKSBdID0gdmFsOwoJCQkJfQoJCQl9OwoJCgkJCXJldHVybiBmdW5jdGlvbiAoZGF0YSwgdmFsKSB7IC8vIG1ldGEgaXMgYWxzbyBwYXNzZWQgaW4sIGJ1dCBub3QgdXNlZAoJCQkJcmV0dXJuIHNldERhdGEoIGRhdGEsIHZhbCwgbVNvdXJjZSApOwoJCQl9OwoJCX0KCQllbHNlCgkJewoJCQkvKiBBcnJheSBvciBmbGF0IG9iamVjdCBtYXBwaW5nICovCgkJCXJldHVybiBmdW5jdGlvbiAoZGF0YSwgdmFsKSB7IC8vIG1ldGEgaXMgYWxzbyBwYXNzZWQgaW4sIGJ1dCBub3QgdXNlZAoJCQkJZGF0YVttU291cmNlXSA9IHZhbDsKCQkJfTsKCQl9Cgl9CgkKCQoJLyoqCgkgKiBSZXR1cm4gYW4gYXJyYXkgd2l0aCB0aGUgZnVsbCB0YWJsZSBkYXRhCgkgKiAgQHBhcmFtIHtvYmplY3R9IG9TZXR0aW5ncyBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJICogIEByZXR1cm5zIGFycmF5IHthcnJheX0gYURhdGEgTWFzdGVyIGRhdGEgYXJyYXkKCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuR2V0RGF0YU1hc3RlciAoIHNldHRpbmdzICkKCXsKCQlyZXR1cm4gX3BsdWNrKCBzZXR0aW5ncy5hb0RhdGEsICdfYURhdGEnICk7Cgl9CgkKCQoJLyoqCgkgKiBOdWtlIHRoZSB0YWJsZQoJICogIEBwYXJhbSB7b2JqZWN0fSBvU2V0dGluZ3MgZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuQ2xlYXJUYWJsZSggc2V0dGluZ3MgKQoJewoJCXNldHRpbmdzLmFvRGF0YS5sZW5ndGggPSAwOwoJCXNldHRpbmdzLmFpRGlzcGxheU1hc3Rlci5sZW5ndGggPSAwOwoJCXNldHRpbmdzLmFpRGlzcGxheS5sZW5ndGggPSAwOwoJCXNldHRpbmdzLmFJZHMgPSB7fTsKCX0KCQoJCgkgLyoqCgkgKiBUYWtlIGFuIGFycmF5IG9mIGludGVnZXJzIChpbmRleCBhcnJheSkgYW5kIHJlbW92ZSBhIHRhcmdldCBpbnRlZ2VyICh2YWx1ZSAtIG5vdAoJICogdGhlIGtleSEpCgkgKiAgQHBhcmFtIHthcnJheX0gYSBJbmRleCBhcnJheSB0byB0YXJnZXQKCSAqICBAcGFyYW0ge2ludH0gaVRhcmdldCB2YWx1ZSB0byBmaW5kCgkgKiAgQG1lbWJlcm9mIERhdGFUYWJsZSNvQXBpCgkgKi8KCWZ1bmN0aW9uIF9mbkRlbGV0ZUluZGV4KCBhLCBpVGFyZ2V0LCBzcGxpY2UgKQoJewoJCXZhciBpVGFyZ2V0SW5kZXggPSAtMTsKCQoJCWZvciAoIHZhciBpPTAsIGlMZW49YS5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCXsKCQkJaWYgKCBhW2ldID09IGlUYXJnZXQgKQoJCQl7CgkJCQlpVGFyZ2V0SW5kZXggPSBpOwoJCQl9CgkJCWVsc2UgaWYgKCBhW2ldID4gaVRhcmdldCApCgkJCXsKCQkJCWFbaV0tLTsKCQkJfQoJCX0KCQoJCWlmICggaVRhcmdldEluZGV4ICE9IC0xICYmIHNwbGljZSA9PT0gdW5kZWZpbmVkICkKCQl7CgkJCWEuc3BsaWNlKCBpVGFyZ2V0SW5kZXgsIDEgKTsKCQl9Cgl9CgkKCQoJLyoqCgkgKiBNYXJrIGNhY2hlZCBkYXRhIGFzIGludmFsaWQgc3VjaCB0aGF0IGEgcmUtcmVhZCBvZiB0aGUgZGF0YSB3aWxsIG9jY3VyIHdoZW4KCSAqIHRoZSBjYWNoZWQgZGF0YSBpcyBuZXh0IHJlcXVlc3RlZC4gQWxzbyB1cGRhdGUgZnJvbSB0aGUgZGF0YSBzb3VyY2Ugb2JqZWN0LgoJICoKCSAqIEBwYXJhbSB7b2JqZWN0fSBzZXR0aW5ncyBEYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJICogQHBhcmFtIHtpbnR9ICAgIHJvd0lkeCAgIFJvdyBpbmRleCB0byBpbnZhbGlkYXRlCgkgKiBAcGFyYW0ge3N0cmluZ30gW3NyY10gICAgU291cmNlIHRvIGludmFsaWRhdGUgZnJvbTogdW5kZWZpbmVkLCAnYXV0bycsICdkb20nCgkgKiAgICAgb3IgJ2RhdGEnCgkgKiBAcGFyYW0ge2ludH0gICAgW2NvbElkeF0gQ29sdW1uIGluZGV4IHRvIGludmFsaWRhdGUuIElmIHVuZGVmaW5lZCB0aGUgd2hvbGUKCSAqICAgICByb3cgd2lsbCBiZSBpbnZhbGlkYXRlZAoJICogQG1lbWJlcm9mIERhdGFUYWJsZSNvQXBpCgkgKgoJICogQHRvZG8gRm9yIHRoZSBtb2R1bGFyaXNhdGlvbiBvZiB2MS4xMSB0aGlzIHdpbGwgbmVlZCB0byBiZWNvbWUgYSBjYWxsYmFjaywgc28KCSAqICAgdGhlIHNvcnQgYW5kIGZpbHRlciBtZXRob2RzIGNhbiBzdWJzY3JpYmUgdG8gaXQuIFRoYXQgd2lsbCByZXF1aXJlZAoJICogICBpbml0aWFsaXNhdGlvbiBvcHRpb25zIGZvciBzb3J0aW5nLCB3aGljaCBpcyB3aHkgaXQgaXMgbm90IGFscmVhZHkgYmFrZWQgaW4KCSAqLwoJZnVuY3Rpb24gX2ZuSW52YWxpZGF0ZSggc2V0dGluZ3MsIHJvd0lkeCwgc3JjLCBjb2xJZHggKQoJewoJCXZhciByb3cgPSBzZXR0aW5ncy5hb0RhdGFbIHJvd0lkeCBdOwoJCXZhciBpLCBpZW47CgkJdmFyIGNlbGxXcml0ZSA9IGZ1bmN0aW9uICggY2VsbCwgY29sICkgewoJCQkvLyBUaGlzIGlzIHZlcnkgZnJ1c3RyYXRpbmcsIGJ1dCBpbiBJRSBpZiB5b3UganVzdCB3cml0ZSBkaXJlY3RseQoJCQkvLyB0byBpbm5lckhUTUwsIGFuZCBlbGVtZW50cyB0aGF0IGFyZSBvdmVyd3JpdHRlbiBhcmUgR0MnZWQsCgkJCS8vIGV2ZW4gaWYgdGhlcmUgaXMgYSByZWZlcmVuY2UgdG8gdGhlbSBlbHNld2hlcmUKCQkJd2hpbGUgKCBjZWxsLmNoaWxkTm9kZXMubGVuZ3RoICkgewoJCQkJY2VsbC5yZW1vdmVDaGlsZCggY2VsbC5maXJzdENoaWxkICk7CgkJCX0KCQoJCQljZWxsLmlubmVySFRNTCA9IF9mbkdldENlbGxEYXRhKCBzZXR0aW5ncywgcm93SWR4LCBjb2wsICdkaXNwbGF5JyApOwoJCX07CgkKCQkvLyBBcmUgd2UgcmVhZGluZyBsYXN0IGRhdGEgZnJvbSBET00gb3IgdGhlIGRhdGEgb2JqZWN0PwoJCWlmICggc3JjID09PSAnZG9tJyB8fCAoKCEgc3JjIHx8IHNyYyA9PT0gJ2F1dG8nKSAmJiByb3cuc3JjID09PSAnZG9tJykgKSB7CgkJCS8vIFJlYWQgdGhlIGRhdGEgZnJvbSB0aGUgRE9NCgkJCXJvdy5fYURhdGEgPSBfZm5HZXRSb3dFbGVtZW50cygKCQkJCQlzZXR0aW5ncywgcm93LCBjb2xJZHgsIGNvbElkeCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogcm93Ll9hRGF0YQoJCQkJKQoJCQkJLmRhdGE7CgkJfQoJCWVsc2UgewoJCQkvLyBSZWFkaW5nIGZyb20gZGF0YSBvYmplY3QsIHVwZGF0ZSB0aGUgRE9NCgkJCXZhciBjZWxscyA9IHJvdy5hbkNlbGxzOwoJCgkJCWlmICggY2VsbHMgKSB7CgkJCQlpZiAoIGNvbElkeCAhPT0gdW5kZWZpbmVkICkgewoJCQkJCWNlbGxXcml0ZSggY2VsbHNbY29sSWR4XSwgY29sSWR4ICk7CgkJCQl9CgkJCQllbHNlIHsKCQkJCQlmb3IgKCBpPTAsIGllbj1jZWxscy5sZW5ndGggOyBpPGllbiA7IGkrKyApIHsKCQkJCQkJY2VsbFdyaXRlKCBjZWxsc1tpXSwgaSApOwoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCQoJCS8vIEZvciBib3RoIHJvdyBhbmQgY2VsbCBpbnZhbGlkYXRpb24sIHRoZSBjYWNoZWQgZGF0YSBmb3Igc29ydGluZyBhbmQKCQkvLyBmaWx0ZXJpbmcgaXMgbnVsbGVkIG91dAoJCXJvdy5fYVNvcnREYXRhID0gbnVsbDsKCQlyb3cuX2FGaWx0ZXJEYXRhID0gbnVsbDsKCQoJCS8vIEludmFsaWRhdGUgdGhlIHR5cGUgZm9yIGEgc3BlY2lmaWMgY29sdW1uIChpZiBnaXZlbikgb3IgYWxsIGNvbHVtbnMgc2luY2UKCQkvLyB0aGUgZGF0YSBtaWdodCBoYXZlIGNoYW5nZWQKCQl2YXIgY29scyA9IHNldHRpbmdzLmFvQ29sdW1uczsKCQlpZiAoIGNvbElkeCAhPT0gdW5kZWZpbmVkICkgewoJCQljb2xzWyBjb2xJZHggXS5zVHlwZSA9IG51bGw7CgkJfQoJCWVsc2UgewoJCQlmb3IgKCBpPTAsIGllbj1jb2xzLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQkJY29sc1tpXS5zVHlwZSA9IG51bGw7CgkJCX0KCQoJCQkvLyBVcGRhdGUgRGF0YVRhYmxlcyBzcGVjaWFsIGBEVF8qYCBhdHRyaWJ1dGVzIGZvciB0aGUgcm93CgkJCV9mblJvd0F0dHJpYnV0ZXMoIHNldHRpbmdzLCByb3cgKTsKCQl9Cgl9CgkKCQoJLyoqCgkgKiBCdWlsZCBhIGRhdGEgc291cmNlIG9iamVjdCBmcm9tIGFuIEhUTUwgcm93LCByZWFkaW5nIHRoZSBjb250ZW50cyBvZiB0aGUKCSAqIGNlbGxzIHRoYXQgYXJlIGluIHRoZSByb3cuCgkgKgoJICogQHBhcmFtIHtvYmplY3R9IHNldHRpbmdzIERhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkgKiBAcGFyYW0ge25vZGV8b2JqZWN0fSBUUiBlbGVtZW50IGZyb20gd2hpY2ggdG8gcmVhZCBkYXQ="
}
]
},
{
"type": 12,
"id": "GgWPLNrSf3AbUfPHsjz25Xqd4YHL6Erg9WgCzzGuzWKz",
"fee": 14200000,
"feeAssetId": null,
"timestamp": 1577467381229,
"version": 1,
"sender": "3NAxHUEaM6RAG7rVDPL9L6DFZWkrqFtY98t",
"senderPublicKey": "4Jwx6yN9LNc5XbrqwrSdp2hok5niFKzGzfZwSxFH6FsV",
"proofs": [
"3SoV3mkMCZB2fNVcpphkzv3nSeLswLCksm5ko7trByvnbbCEBr6umZqmeYfDKeapFrjF599QZ5hDHaMJCx4WUeH5"
],
"data": [
{
"key": "jquery.dataTables.js?4?0?1",
"type": "binary",
"value": "base64:YSBvciBleGlzdGluZyByb3cKCSAqICAgb2JqZWN0IGZyb20gd2hpY2ggdG8gcmUtcmVhZCB0aGUgZGF0YSBmcm9tIHRoZSBjZWxscwoJICogQHBhcmFtIHtpbnR9IFtjb2xJZHhdIE9wdGlvbmFsIGNvbHVtbiBpbmRleAoJICogQHBhcmFtIHthcnJheXxvYmplY3R9IFtkXSBEYXRhIHNvdXJjZSBvYmplY3QuIElmIGBjb2xJZHhgIGlzIGdpdmVuIHRoZW4gdGhpcwoJICogICBwYXJhbWV0ZXIgc2hvdWxkIGFsc28gYmUgZ2l2ZW4gYW5kIHdpbGwgYmUgdXNlZCB0byB3cml0ZSB0aGUgZGF0YSBpbnRvLgoJICogICBPbmx5IHRoZSBjb2x1bW4gaW4gcXVlc3Rpb24gd2lsbCBiZSB3cml0dGVuCgkgKiBAcmV0dXJucyB7b2JqZWN0fSBPYmplY3Qgd2l0aCB0d28gcGFyYW1ldGVyczogYGRhdGFgIHRoZSBkYXRhIHJlYWQsIGluCgkgKiAgIGRvY3VtZW50IG9yZGVyLCBhbmQgYGNlbGxzYCBhbmQgYXJyYXkgb2Ygbm9kZXMgKHRoZXkgY2FuIGJlIHVzZWZ1bCB0byB0aGUKCSAqICAgY2FsbGVyLCBzbyByYXRoZXIgdGhhbiBuZWVkaW5nIGEgc2Vjb25kIHRyYXZlcnNhbCB0byBnZXQgdGhlbSwganVzdCByZXR1cm4KCSAqICAgdGhlbSBmcm9tIGhlcmUpLgoJICogQG1lbWJlcm9mIERhdGFUYWJsZSNvQXBpCgkgKi8KCWZ1bmN0aW9uIF9mbkdldFJvd0VsZW1lbnRzKCBzZXR0aW5ncywgcm93LCBjb2xJZHgsIGQgKQoJewoJCXZhcgoJCQl0ZHMgPSBbXSwKCQkJdGQgPSByb3cuZmlyc3RDaGlsZCwKCQkJbmFtZSwgY29sLCBvLCBpPTAsIGNvbnRlbnRzLAoJCQljb2x1bW5zID0gc2V0dGluZ3MuYW9Db2x1bW5zLAoJCQlvYmplY3RSZWFkID0gc2V0dGluZ3MuX3Jvd1JlYWRPYmplY3Q7CgkKCQkvLyBBbGxvdyB0aGUgZGF0YSBvYmplY3QgdG8gYmUgcGFzc2VkIGluLCBvciBjb25zdHJ1Y3QKCQlkID0gZCAhPT0gdW5kZWZpbmVkID8KCQkJZCA6CgkJCW9iamVjdFJlYWQgPwoJCQkJe30gOgoJCQkJW107CgkKCQl2YXIgYXR0ciA9IGZ1bmN0aW9uICggc3RyLCB0ZCAgKSB7CgkJCWlmICggdHlwZW9mIHN0ciA9PT0gJ3N0cmluZycgKSB7CgkJCQl2YXIgaWR4ID0gc3RyLmluZGV4T2YoJ0AnKTsKCQoJCQkJaWYgKCBpZHggIT09IC0xICkgewoJCQkJCXZhciBhdHRyID0gc3RyLnN1YnN0cmluZyggaWR4KzEgKTsKCQkJCQl2YXIgc2V0dGVyID0gX2ZuU2V0T2JqZWN0RGF0YUZuKCBzdHIgKTsKCQkJCQlzZXR0ZXIoIGQsIHRkLmdldEF0dHJpYnV0ZSggYXR0ciApICk7CgkJCQl9CgkJCX0KCQl9OwoJCgkJLy8gUmVhZCBkYXRhIGZyb20gYSBjZWxsIGFuZCBzdG9yZSBpbnRvIHRoZSBkYXRhIG9iamVjdAoJCXZhciBjZWxsUHJvY2VzcyA9IGZ1bmN0aW9uICggY2VsbCApIHsKCQkJaWYgKCBjb2xJZHggPT09IHVuZGVmaW5lZCB8fCBjb2xJZHggPT09IGkgKSB7CgkJCQljb2wgPSBjb2x1bW5zW2ldOwoJCQkJY29udGVudHMgPSAkLnRyaW0oY2VsbC5pbm5lckhUTUwpOwoJCgkJCQlpZiAoIGNvbCAmJiBjb2wuX2JBdHRyU3JjICkgewoJCQkJCXZhciBzZXR0ZXIgPSBfZm5TZXRPYmplY3REYXRhRm4oIGNvbC5tRGF0YS5fICk7CgkJCQkJc2V0dGVyKCBkLCBjb250ZW50cyApOwoJCgkJCQkJYXR0ciggY29sLm1EYXRhLnNvcnQsIGNlbGwgKTsKCQkJCQlhdHRyKCBjb2wubURhdGEudHlwZSwgY2VsbCApOwoJCQkJCWF0dHIoIGNvbC5tRGF0YS5maWx0ZXIsIGNlbGwgKTsKCQkJCX0KCQkJCWVsc2UgewoJCQkJCS8vIERlcGVuZGluZyBvbiB0aGUgYGRhdGFgIG9wdGlvbiBmb3IgdGhlIGNvbHVtbnMgdGhlIGRhdGEgY2FuCgkJCQkJLy8gYmUgcmVhZCB0byBlaXRoZXIgYW4gb2JqZWN0IG9yIGFuIGFycmF5LgoJCQkJCWlmICggb2JqZWN0UmVhZCApIHsKCQkJCQkJaWYgKCAhIGNvbC5fc2V0dGVyICkgewoJCQkJCQkJLy8gQ2FjaGUgdGhlIHNldHRlciBmdW5jdGlvbgoJCQkJCQkJY29sLl9zZXR0ZXIgPSBfZm5TZXRPYmplY3REYXRhRm4oIGNvbC5tRGF0YSApOwoJCQkJCQl9CgkJCQkJCWNvbC5fc2V0dGVyKCBkLCBjb250ZW50cyApOwoJCQkJCX0KCQkJCQllbHNlIHsKCQkJCQkJZFtpXSA9IGNvbnRlbnRzOwoJCQkJCX0KCQkJCX0KCQkJfQoJCgkJCWkrKzsKCQl9OwoJCgkJaWYgKCB0ZCApIHsKCQkJLy8gYHRyYCBlbGVtZW50IHdhcyBwYXNzZWQgaW4KCQkJd2hpbGUgKCB0ZCApIHsKCQkJCW5hbWUgPSB0ZC5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpOwoJCgkJCQlpZiAoIG5hbWUgPT0gIlREIiB8fCBuYW1lID09ICJUSCIgKSB7CgkJCQkJY2VsbFByb2Nlc3MoIHRkICk7CgkJCQkJdGRzLnB1c2goIHRkICk7CgkJCQl9CgkKCQkJCXRkID0gdGQubmV4dFNpYmxpbmc7CgkJCX0KCQl9CgkJZWxzZSB7CgkJCS8vIEV4aXN0aW5nIHJvdyBvYmplY3QgcGFzc2VkIGluCgkJCXRkcyA9IHJvdy5hbkNlbGxzOwoJCgkJCWZvciAoIHZhciBqPTAsIGplbj10ZHMubGVuZ3RoIDsgajxqZW4gOyBqKysgKSB7CgkJCQljZWxsUHJvY2VzcyggdGRzW2pdICk7CgkJCX0KCQl9CgkKCQkvLyBSZWFkIHRoZSBJRCBmcm9tIHRoZSBET00gaWYgcHJlc2VudAoJCXZhciByb3dOb2RlID0gcm93LmZpcnN0Q2hpbGQgPyByb3cgOiByb3cublRyOwoJCgkJaWYgKCByb3dOb2RlICkgewoJCQl2YXIgaWQgPSByb3dOb2RlLmdldEF0dHJpYnV0ZSggJ2lkJyApOwoJCgkJCWlmICggaWQgKSB7CgkJCQlfZm5TZXRPYmplY3REYXRhRm4oIHNldHRpbmdzLnJvd0lkICkoIGQsIGlkICk7CgkJCX0KCQl9CgkKCQlyZXR1cm4gewoJCQlkYXRhOiBkLAoJCQljZWxsczogdGRzCgkJfTsKCX0KCS8qKgoJICogQ3JlYXRlIGEgbmV3IFRSIGVsZW1lbnQgKGFuZCBpdCdzIFREIGNoaWxkcmVuKSBmb3IgYSByb3cKCSAqICBAcGFyYW0ge29iamVjdH0gb1NldHRpbmdzIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkgKiAgQHBhcmFtIHtpbnR9IGlSb3cgUm93IHRvIGNvbnNpZGVyCgkgKiAgQHBhcmFtIHtub2RlfSBbblRySW5dIFRSIGVsZW1lbnQgdG8gYWRkIHRvIHRoZSB0YWJsZSAtIG9wdGlvbmFsLiBJZiBub3QgZ2l2ZW4sCgkgKiAgICBEYXRhVGFibGVzIHdpbGwgY3JlYXRlIGEgcm93IGF1dG9tYXRpY2FsbHkKCSAqICBAcGFyYW0ge2FycmF5fSBbYW5UZHNdIEFycmF5IG9mIFREfFRIIGVsZW1lbnRzIGZvciB0aGUgcm93IC0gbXVzdCBiZSBnaXZlbgoJICogICAgaWYgblRyIGlzLgoJICogIEBtZW1iZXJvZiBEYXRhVGFibGUjb0FwaQoJICovCglmdW5jdGlvbiBfZm5DcmVhdGVUciAoIG9TZXR0aW5ncywgaVJvdywgblRySW4sIGFuVGRzICkKCXsKCQl2YXIKCQkJcm93ID0gb1NldHRpbmdzLmFvRGF0YVtpUm93XSwKCQkJcm93RGF0YSA9IHJvdy5fYURhdGEsCgkJCWNlbGxzID0gW10sCgkJCW5UciwgblRkLCBvQ29sLAoJCQlpLCBpTGVuOwoJCgkJaWYgKCByb3cublRyID09PSBudWxsICkKCQl7CgkJCW5UciA9IG5UckluIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkKCQkJcm93Lm5UciA9IG5UcjsKCQkJcm93LmFuQ2VsbHMgPSBjZWxsczsKCQoJCQkvKiBVc2UgYSBwcml2YXRlIHByb3BlcnR5IG9uIHRoZSBub2RlIHRvIGFsbG93IHJlc2VydmUgbWFwcGluZyBmcm9tIHRoZSBub2RlCgkJCSAqIHRvIHRoZSBhb0RhdGEgYXJyYXkgZm9yIGZhc3QgbG9vayB1cAoJCQkgKi8KCQkJblRyLl9EVF9Sb3dJbmRleCA9IGlSb3c7CgkKCQkJLyogU3BlY2lhbCBwYXJhbWV0ZXJzIGNhbiBiZSBnaXZlbiBieSB0aGUgZGF0YSBzb3VyY2UgdG8gYmUgdXNlZCBvbiB0aGUgcm93ICovCgkJCV9mblJvd0F0dHJpYnV0ZXMoIG9TZXR0aW5ncywgcm93ICk7CgkKCQkJLyogUHJvY2VzcyBlYWNoIGNvbHVtbiAqLwoJCQlmb3IgKCBpPTAsIGlMZW49b1NldHRpbmdzLmFvQ29sdW1ucy5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCQl7CgkJCQlvQ29sID0gb1NldHRpbmdzLmFvQ29sdW1uc1tpXTsKCQoJCQkJblRkID0gblRySW4gPyBhblRkc1tpXSA6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIG9Db2wuc0NlbGxUeXBlICk7CgkJCQluVGQuX0RUX0NlbGxJbmRleCA9IHsKCQkJCQlyb3c6IGlSb3csCgkJCQkJY29sdW1uOiBpCgkJCQl9OwoJCQkJCgkJCQljZWxscy5wdXNoKCBuVGQgKTsKCQoJCQkJLy8gTmVlZCB0byBjcmVhdGUgdGhlIEhUTUwgaWYgbmV3LCBvciBpZiBhIHJlbmRlcmluZyBmdW5jdGlvbiBpcyBkZWZpbmVkCgkJCQlpZiAoICghblRySW4gfHwgb0NvbC5tUmVuZGVyIHx8IG9Db2wubURhdGEgIT09IGkpICYmCgkJCQkJICghJC5pc1BsYWluT2JqZWN0KG9Db2wubURhdGEpIHx8IG9Db2wubURhdGEuXyAhPT0gaSsnLmRpc3BsYXknKQoJCQkJKSB7CgkJCQkJblRkLmlubmVySFRNTCA9IF9mbkdldENlbGxEYXRhKCBvU2V0dGluZ3MsIGlSb3csIGksICdkaXNwbGF5JyApOwoJCQkJfQoJCgkJCQkvKiBBZGQgdXNlciBkZWZpbmVkIGNsYXNzICovCgkJCQlpZiAoIG9Db2wuc0NsYXNzICkKCQkJCXsKCQkJCQluVGQuY2xhc3NOYW1lICs9ICcgJytvQ29sLnNDbGFzczsKCQkJCX0KCQoJCQkJLy8gVmlzaWJpbGl0eSAtIGFkZCBvciByZW1vdmUgYXMgcmVxdWlyZWQKCQkJCWlmICggb0NvbC5iVmlzaWJsZSAmJiAhIG5UckluICkKCQkJCXsKCQkJCQluVHIuYXBwZW5kQ2hpbGQoIG5UZCApOwoJCQkJfQoJCQkJZWxzZSBpZiAoICEgb0NvbC5iVmlzaWJsZSAmJiBuVHJJbiApCgkJCQl7CgkJCQkJblRkLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIG5UZCApOwoJCQkJfQoJCgkJCQlpZiAoIG9Db2wuZm5DcmVhdGVkQ2VsbCApCgkJCQl7CgkJCQkJb0NvbC5mbkNyZWF0ZWRDZWxsLmNhbGwoIG9TZXR0aW5ncy5vSW5zdGFuY2UsCgkJCQkJCW5UZCwgX2ZuR2V0Q2VsbERhdGEoIG9TZXR0aW5ncywgaVJvdywgaSApLCByb3dEYXRhLCBpUm93LCBpCgkJCQkJKTsKCQkJCX0KCQkJfQoJCgkJCV9mbkNhbGxiYWNrRmlyZSggb1NldHRpbmdzLCAnYW9Sb3dDcmVhdGVkQ2FsbGJhY2snLCBudWxsLCBbblRyLCByb3dEYXRhLCBpUm93LCBjZWxsc10gKTsKCQl9CgkKCQkvLyBSZW1vdmUgb25jZSB3ZWJraXQgYnVnIDEzMTgxOSBhbmQgQ2hyb21pdW0gYnVnIDM2NTYxOSBoYXZlIGJlZW4gcmVzb2x2ZWQKCQkvLyBhbmQgZGVwbG95ZWQKCQlyb3cublRyLnNldEF0dHJpYnV0ZSggJ3JvbGUnLCAncm93JyApOwoJfQoJCgkKCS8qKgoJICogQWRkIGF0dHJpYnV0ZXMgdG8gYSByb3cgYmFzZWQgb24gdGhlIHNwZWNpYWwgYERUXypgIHBhcmFtZXRlcnMgaW4gYSBkYXRhCgkgKiBzb3VyY2Ugb2JqZWN0LgoJICogIEBwYXJhbSB7b2JqZWN0fSBzZXR0aW5ncyBEYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJICogIEBwYXJhbSB7b2JqZWN0fSBEYXRhVGFibGVzIHJvdyBvYmplY3QgZm9yIHRoZSByb3cgdG8gYmUgbW9kaWZpZWQKCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuUm93QXR0cmlidXRlcyggc2V0dGluZ3MsIHJvdyApCgl7CgkJdmFyIHRyID0gcm93Lm5UcjsKCQl2YXIgZGF0YSA9IHJvdy5fYURhdGE7CgkKCQlpZiAoIHRyICkgewoJCQl2YXIgaWQgPSBzZXR0aW5ncy5yb3dJZEZuKCBkYXRhICk7CgkKCQkJaWYgKCBpZCApIHsKCQkJCXRyLmlkID0gaWQ7CgkJCX0KCQoJCQlpZiAoIGRhdGEuRFRfUm93Q2xhc3MgKSB7CgkJCQkvLyBSZW1vdmUgYW55IGNsYXNzZXMgYWRkZWQgYnkgRFRfUm93Q2xhc3MgYmVmb3JlCgkJCQl2YXIgYSA9IGRhdGEuRFRfUm93Q2xhc3Muc3BsaXQoJyAnKTsKCQkJCXJvdy5fX3Jvd2MgPSByb3cuX19yb3djID8KCQkJCQlfdW5pcXVlKCByb3cuX19yb3djLmNvbmNhdCggYSApICkgOgoJCQkJCWE7CgkKCQkJCSQodHIpCgkJCQkJLnJlbW92ZUNsYXNzKCByb3cuX19yb3djLmpvaW4oJyAnKSApCgkJCQkJLmFkZENsYXNzKCBkYXRhLkRUX1Jvd0NsYXNzICk7CgkJCX0KCQoJCQlpZiAoIGRhdGEuRFRfUm93QXR0ciApIHsKCQkJCSQodHIpLmF0dHIoIGRhdGEuRFRfUm93QXR0ciApOwoJCQl9CgkKCQkJaWYgKCBkYXRhLkRUX1Jvd0RhdGEgKSB7CgkJCQkkKHRyKS5kYXRhKCBkYXRhLkRUX1Jvd0RhdGEgKTsKCQkJfQoJCX0KCX0KCQoJCgkvKioKCSAqIENyZWF0ZSB0aGUgSFRNTCBoZWFkZXIgZm9yIHRoZSB0YWJsZQoJICogIEBwYXJhbSB7b2JqZWN0fSBvU2V0dGluZ3MgZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuQnVpbGRIZWFkKCBvU2V0dGluZ3MgKQoJewoJCXZhciBpLCBpZW4sIGNlbGwsIHJvdywgY29sdW1uOwoJCXZhciB0aGVhZCA9IG9TZXR0aW5ncy5uVEhlYWQ7CgkJdmFyIHRmb290ID0gb1NldHRpbmdzLm5URm9vdDsKCQl2YXIgY3JlYXRlSGVhZGVyID0gJCgndGgsIHRkJywgdGhlYWQpLmxlbmd0aCA9PT0gMDsKCQl2YXIgY2xhc3NlcyA9IG9TZXR0aW5ncy5vQ2xhc3NlczsKCQl2YXIgY29sdW1ucyA9IG9TZXR0aW5ncy5hb0NvbHVtbnM7CgkKCQlpZiAoIGNyZWF0ZUhlYWRlciApIHsKCQkJcm93ID0gJCgnPHRyLz4nKS5hcHBlbmRUbyggdGhlYWQgKTsKCQl9CgkKCQlmb3IgKCBpPTAsIGllbj1jb2x1bW5zLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQljb2x1bW4gPSBjb2x1bW5zW2ldOwoJCQljZWxsID0gJCggY29sdW1uLm5UaCApLmFkZENsYXNzKCBjb2x1bW4uc0NsYXNzICk7CgkKCQkJaWYgKCBjcmVhdGVIZWFkZXIgKSB7CgkJCQljZWxsLmFwcGVuZFRvKCByb3cgKTsKCQkJfQoJCgkJCS8vIDEuMTEgbW92ZSBpbnRvIHNvcnRpbmcKCQkJaWYgKCBvU2V0dGluZ3Mub0ZlYXR1cmVzLmJTb3J0ICkgewoJCQkJY2VsbC5hZGRDbGFzcyggY29sdW1uLnNTb3J0aW5nQ2xhc3MgKTsKCQoJCQkJaWYgKCBjb2x1bW4uYlNvcnRhYmxlICE9PSBmYWxzZSApIHsKCQkJCQljZWxsCgkJCQkJCS5hdHRyKCAndGFiaW5kZXgnLCBvU2V0dGluZ3MuaVRhYkluZGV4ICkKCQkJCQkJLmF0dHIoICdhcmlhLWNvbnRyb2xzJywgb1NldHRpbmdzLnNUYWJsZUlkICk7CgkKCQkJCQlfZm5Tb3J0QXR0YWNoTGlzdGVuZXIoIG9TZXR0aW5ncywgY29sdW1uLm5UaCwgaSApOwoJCQkJfQoJCQl9CgkKCQkJaWYgKCBjb2x1bW4uc1RpdGxlICE9IGNlbGxbMF0uaW5uZXJIVE1MICkgewoJCQkJY2VsbC5odG1sKCBjb2x1bW4uc1RpdGxlICk7CgkJCX0KCQoJCQlfZm5SZW5kZXJlciggb1NldHRpbmdzLCAnaGVhZGVyJyApKAoJCQkJb1NldHRpbmdzLCBjZWxsLCBjb2x1bW4sIGNsYXNzZXMKCQkJKTsKCQl9CgkKCQlpZiAoIGNyZWF0ZUhlYWRlciApIHsKCQkJX2ZuRGV0ZWN0SGVhZGVyKCBvU2V0dGluZ3MuYW9IZWFkZXIsIHRoZWFkICk7CgkJfQoJCQoJCS8qIEFSSUEgcm9sZSBmb3IgdGhlIHJvd3MgKi8KCSAJJCh0aGVhZCkuZmluZCgnPnRyJykuYXR0cigncm9sZScsICdyb3cnKTsKCQoJCS8qIERlYWwgd2l0aCB0aGUgZm9vdGVyIC0gYWRkIGNsYXNzZXMgaWYgcmVxdWlyZWQgKi8KCQkkKHRoZWFkKS5maW5kKCc+dHI+dGgsID50cj50ZCcpLmFkZENsYXNzKCBjbGFzc2VzLnNIZWFkZXJUSCApOwoJCSQodGZvb3QpLmZpbmQoJz50cj50aCwgPnRyPnRkJykuYWRkQ2xhc3MoIGNsYXNzZXMuc0Zvb3RlclRIICk7CgkKCQkvLyBDYWNoZSB0aGUgZm9vdGVyIGNlbGxzLiBOb3RlIHRoYXQgd2Ugb25seSB0YWtlIHRoZSBjZWxscyBmcm9tIHRoZSBmaXJzdAoJCS8vIHJvdyBpbiB0aGUgZm9vdGVyLiBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHJvdyB0aGUgdXNlciB3YW50cyB0bwoJCS8vIGludGVyYWN0IHdpdGgsIHRoZXkgbmVlZCB0byB1c2UgdGhlIHRhYmxlKCkuZm9vdCgpIG1ldGhvZC4gTm90ZSBhbHNvIHRoaXMKCQkvLyBhbGxvd3MgY2VsbHMgdG8gYmUgdXNlZCBmb3IgbXVsdGlwbGUgY29sdW1ucyB1c2luZyBjb2xzcGFuCgkJaWYgKCB0Zm9vdCAhPT0gbnVsbCApIHsKCQkJdmFyIGNlbGxzID0gb1NldHRpbmdzLmFvRm9vdGVyWzBdOwoJCgkJCWZvciAoIGk9MCwgaWVuPWNlbGxzLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQkJY29sdW1uID0gY29sdW1uc1tpXTsKCQkJCWNvbHVtbi5uVGYgPSBjZWxsc1tpXS5jZWxsOwoJCgkJCQlpZiAoIGNvbHVtbi5zQ2xhc3MgKSB7CgkJCQkJJChjb2x1bW4ublRmKS5hZGRDbGFzcyggY29sdW1uLnNDbGFzcyApOwoJCQkJfQoJCQl9CgkJfQoJfQoJCgkKCS8qKgoJICogRHJhdyB0aGUgaGVhZGVyIChvciBmb290ZXIpIGVsZW1lbnQgYmFzZWQgb24gdGhlIGNvbHVtbiB2aXNpYmlsaXR5IHN0YXRlcy4gVGhlCgkgKiBtZXRob2RvbG9neSBoZXJlIGlzIHRvIHVzZSB0aGUgbGF5b3V0IGFycmF5IGZyb20gX2ZuRGV0ZWN0SGVhZGVyLCBtb2RpZmllZCBmb3IKCSAqIHRoZSBpbnN0YW50YW5lb3VzIGNvbHVtbiB2aXNpYmlsaXR5LCB0byBjb25zdHJ1Y3QgdGhlIG5ldyBsYXlvdXQuIFRoZSBncmlkIGlzCgkgKiB0cmF2ZXJzZWQgb3ZlciBjZWxsIGF0IGEgdGltZSBpbiBhIHJvd3MgeCBjb2x1bW5zIGdyaWQgZmFzaGlvbiwgYWx0aG91Z2ggZWFjaAoJICogY2VsbCBpbnNlcnQgY2FuIGNvdmVyIG11bHRpcGxlIGVsZW1lbnRzIGluIHRoZSBncmlkIC0gd2hpY2ggaXMgdHJhY2tzIHVzaW5nIHRoZQoJICogYUFwcGxpZWQgYXJyYXkuIENlbGwgaW5zZXJ0cyBpbiB0aGUgZ3JpZCB3aWxsIG9ubHkgb2NjdXIgd2hlcmUgdGhlcmUgaXNuJ3QKCSAqIGFscmVhZHkgYSBjZWxsIGluIHRoYXQgcG9zaXRpb24uCgkgKiAgQHBhcmFtIHtvYmplY3R9IG9TZXR0aW5ncyBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJICogIEBwYXJhbSBhcnJheSB7b2JqZWN0c30gYW9Tb3VyY2UgTGF5b3V0IGFycmF5IGZyb20gX2ZuRGV0ZWN0SGVhZGVyCgkgKiAgQHBhcmFtIHtib29sZWFufSBbYkluY2x1ZGVIaWRkZW49ZmFsc2VdIElmIHRydWUgdGhlbiBpbmNsdWRlIHRoZSBoaWRkZW4gY29sdW1ucyBpbiB0aGUgY2FsYywKCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuRHJhd0hlYWQoIG9TZXR0aW5ncywgYW9Tb3VyY2UsIGJJbmNsdWRlSGlkZGVuICkKCXsKCQl2YXIgaSwgaUxlbiwgaiwgakxlbiwgaywga0xlbiwgbiwgbkxvY2FsVHI7CgkJdmFyIGFvTG9jYWwgPSBbXTsKCQl2YXIgYUFwcGxpZWQgPSBbXTsKCQl2YXIgaUNvbHVtbnMgPSBvU2V0dGluZ3MuYW9Db2x1bW5zLmxlbmd0aDsKCQl2YXIgaVJvd3NwYW4sIGlDb2xzcGFuOwoJCgkJaWYgKCAhIGFvU291cmNlICkKCQl7CgkJCXJldHVybjsKCQl9CgkKCQlpZiAoICBiSW5jbHVkZUhpZGRlbiA9PT0gdW5kZWZpbmVkICkKCQl7CgkJCWJJbmNsdWRlSGlkZGVuID0gZmFsc2U7CgkJfQoJCgkJLyogTWFrZSBhIGNvcHkgb2YgdGhlIG1hc3RlciBsYXlvdXQgYXJyYXksIGJ1dCB3aXRob3V0IHRoZSB2aXNpYmxlIGNvbHVtbnMgaW4gaXQgKi8KCQlmb3IgKCBpPTAsIGlMZW49YW9Tb3VyY2UubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkKCQl7CgkJCWFvTG9jYWxbaV0gPSBhb1NvdXJjZVtpXS5zbGljZSgpOwoJCQlhb0xvY2FsW2ldLm5UciA9IGFvU291cmNlW2ldLm5UcjsKCQoJCQkvKiBSZW1vdmUgYW55IGNvbHVtbnMgd2hpY2ggYXJlIGN1cnJlbnRseSBoaWRkZW4gKi8KCQkJZm9yICggaj1pQ29sdW1ucy0xIDsgaj49MCA7IGotLSApCgkJCXsKCQkJCWlmICggIW9TZXR0aW5ncy5hb0NvbHVtbnNbal0uYlZpc2libGUgJiYgIWJJbmNsdWRlSGlkZGVuICkKCQkJCXsKCQkJCQlhb0xvY2FsW2ldLnNwbGljZSggaiwgMSApOwoJCQkJfQoJCQl9CgkKCQkJLyogUHJlcCB0aGUgYXBwbGllZCBhcnJheSAtIGl0IG5lZWRzIGFuIGVsZW1lbnQgZm9yIGVhY2ggcm93ICovCgkJCWFBcHBsaWVkLnB1c2goIFtdICk7CgkJfQoJCgkJZm9yICggaT0wLCBpTGVuPWFvTG9jYWwubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkKCQl7CgkJCW5Mb2NhbFRyID0gYW9Mb2NhbFtpXS5uVHI7CgkKCQkJLyogQWxsIGNlbGxzIGFyZSBnb2luZyB0byBiZSByZXBsYWNlZCwgc28gZW1wdHkgb3V0IHRoZSByb3cgKi8KCQkJaWYgKCBuTG9jYWxUciApCgkJCXsKCQkJCXdoaWxlKCAobiA9IG5Mb2NhbFRyLmZpcnN0Q2hpbGQpICkKCQkJCXsKCQkJCQluTG9jYWxUci5yZW1vdmVDaGlsZCggbiApOwoJCQkJfQoJCQl9CgkKCQkJZm9yICggaj0wLCBqTGVuPWFvTG9jYWxbaV0ubGVuZ3RoIDsgajxqTGVuIDsgaisrICkKCQkJewoJCQkJaVJvd3NwYW4gPSAxOwoJCQkJaUNvbHNwYW4gPSAxOwoJCgkJCQkvKiBDaGVjayB0byBzZWUgaWYgdGhlcmUgaXMgYWxyZWFkeSBhIGNlbGwgKHJvdy9jb2xzcGFuKSBjb3ZlcmluZyBvdXIgdGFyZ2V0CgkJCQkgKiBpbnNlcnQgcG9pbnQuIElmIHRoZXJlIGlzLCB0aGVuIHRoZXJlIGlzIG5vdGhpbmcgdG8gZG8uCgkJCQkgKi8KCQkJCWlmICggYUFwcGxpZWRbaV1bal0gPT09IHVuZGVmaW5lZCApCgkJCQl7CgkJCQkJbkxvY2FsVHIuYXBwZW5kQ2hpbGQoIGFvTG9jYWxbaV1bal0uY2VsbCApOwoJCQkJCWFBcHBsaWVkW2ldW2pdID0gMTsKCQoJCQkJCS8qIEV4cGFuZCB0aGUgY2VsbCB0byBjb3ZlciBhcyBtYW55IHJvd3MgYXMgbmVlZGVkICovCgkJCQkJd2hpbGUgKCBhb0xvY2FsW2kraVJvd3NwYW5dICE9PSB1bmRlZmluZWQgJiYKCQkJCQkgICAgICAgIGFvTG9jYWxbaV1bal0uY2VsbCA9PSBhb0xvY2FsW2kraVJvd3NwYW5dW2pdLmNlbGwgKQoJCQkJCXsKCQkJCQkJYUFwcGxpZWRbaStpUm93c3Bhbl1bal0gPSAxOwoJCQkJCQlpUm93c3BhbisrOwoJCQkJCX0KCQoJCQkJCS8qIEV4cGFuZCB0aGUgY2VsbCB0byBjb3ZlciBhcyBtYW55IGNvbHVtbnMgYXMgbmVlZGVkICovCgkJCQkJd2hpbGUgKCBhb0xvY2FsW2ldW2oraUNvbHNwYW5dICE9PSB1bmRlZmluZWQgJiYKCQkJCQkgICAgICAgIGFvTG9jYWxbaV1bal0uY2VsbCA9PSBhb0xvY2FsW2ldW2oraUNvbHNwYW5dLmNlbGwgKQoJCQkJCXsKCQkJCQkJLyogTXVzdCB1cGRhdGUgdGhlIGFwcGxpZWQgYXJyYXkgb3ZlciB0aGUgcm93cyBmb3IgdGhlIGNvbHVtbnMgKi8KCQkJCQkJZm9yICggaz0wIDsgazxpUm93c3BhbiA7IGsrKyApCgkJCQkJCXsKCQkJCQkJCWFBcHBsaWVkW2kra11baitpQ29sc3Bhbl0gPSAxOwoJCQkJCQl9CgkJCQkJCWlDb2xzcGFuKys7CgkJCQkJfQoJCgkJCQkJLyogRG8gdGhlIGFjdHVhbCBleHBhbnNpb24gaW4gdGhlIERPTSAqLwoJCQkJCSQoYW9Mb2NhbFtpXVtqXS5jZWxsKQoJCQkJCQkuYXR0cigncm93c3BhbicsIGlSb3dzcGFuKQoJCQkJCQkuYXR0cignY29sc3BhbicsIGlDb2xzcGFuKTsKCQkJCX0KCQkJfQoJCX0KCX0KCQoJCgkvKioKCSAqIEluc2VydCB0aGUgcmVxdWlyZWQgVFIgbm9kZXMgaW50byB0aGUgdGFibGUgZm9yIGRpc3BsYXkKCSAqICBAcGFyYW0ge29iamVjdH0gb1NldHRpbmdzIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkgKiAgQG1lbWJlcm9mIERhdGFUYWJsZSNvQXBpCgkgKi8KCWZ1bmN0aW9uIF9mbkRyYXcoIG9TZXR0aW5ncyApCgl7CgkJLyogUHJvdmlkZSBhIHByZS1jYWxsYmFjayBmdW5jdGlvbiB3aGljaCBjYW4gYmUgdXNlZCB0byBjYW5jZWwgdGhlIGRyYXcgaXMgZmFsc2UgaXMgcmV0dXJuZWQgKi8KCQl2YXIgYVByZURyYXcgPSBfZm5DYWxsYmFja0ZpcmUoIG9TZXR0aW5ncywgJ2FvUHJlRHJhd0NhbGxiYWNrJywgJ3ByZURyYXcnLCBbb1NldHRpbmdzXSApOwoJCWlmICggJC5pbkFycmF5KCBmYWxzZSwgYVByZURyYXcgKSAhPT0gLTEgKQoJCXsKCQkJX2ZuUHJvY2Vzc2luZ0Rpc3BsYXkoIG9TZXR0aW5ncywgZmFsc2UgKTsKCQkJcmV0dXJuOwoJCX0KCQoJCXZhciBpLCBpTGVuLCBuOwoJCXZhciBhblJvd3MgPSBbXTsKCQl2YXIgaVJvd0NvdW50ID0gMDsKCQl2YXIgYXNTdHJpcGVDbGFzc2VzID0gb1NldHRpbmdzLmFzU3RyaXBlQ2xhc3NlczsKCQl2YXIgaVN0cmlwZXMgPSBhc1N0cmlwZUNsYXNzZXMubGVuZ3RoOwoJCXZhciBpT3BlblJvd3MgPSBvU2V0dGluZ3MuYW9PcGVuUm93cy5sZW5ndGg7CgkJdmFyIG9MYW5nID0gb1NldHRpbmdzLm9MYW5ndWFnZTsKCQl2YXIgaUluaXREaXNwbGF5U3RhcnQgPSBvU2V0dGluZ3MuaUluaXREaXNwbGF5U3RhcnQ7CgkJdmFyIGJTZXJ2ZXJTaWRlID0gX2ZuRGF0YVNvdXJjZSggb1NldHRpbmdzICkgPT0gJ3NzcCc7CgkJdmFyIGFpRGlzcGxheSA9IG9TZXR0aW5ncy5haURpc3BsYXk7CgkKCQlvU2V0dGluZ3MuYkRyYXdpbmcgPSB0cnVlOwoJCgkJLyogQ2hlY2sgYW5kIHNlZSBpZiB3ZSBoYXZlIGFuIGluaXRpYWwgZHJhdyBwb3NpdGlvbiBmcm9tIHN0YXRlIHNhdmluZyAqLwoJCWlmICggaUluaXREaXNwbGF5U3RhcnQgIT09IHVuZGVmaW5lZCAmJiBpSW5pdERpc3BsYXlTdGFydCAhPT0gLTEgKQoJCXsKCQkJb1NldHRpbmdzLl9pRGlzcGxheVN0YXJ0ID0gYlNlcnZlclNpZGUgPwoJCQkJaUluaXREaXNwbGF5U3RhcnQgOgoJCQkJaUluaXREaXNwbGF5U3RhcnQgPj0gb1NldHRpbmdzLmZuUmVjb3Jkc0Rpc3BsYXkoKSA/CgkJCQkJMCA6CgkJCQkJaUluaXREaXNwbGF5U3RhcnQ7CgkKCQkJb1NldHRpbmdzLmlJbml0RGlzcGxheVN0YXJ0ID0gLTE7CgkJfQoJCgkJdmFyIGlEaXNwbGF5U3RhcnQgPSBvU2V0dGluZ3MuX2lEaXNwbGF5U3RhcnQ7CgkJdmFyIGlEaXNwbGF5RW5kID0gb1NldHRpbmdzLmZuRGlzcGxheUVuZCgpOwoJCgkJLyogU2VydmVyLXNpZGUgcHJvY2Vzc2luZyBkcmF3IGludGVyY2VwdCAqLwoJCWlmICggb1NldHRpbmdzLmJEZWZlckxvYWRpbmcgKQoJCXsKCQkJb1NldHRpbmdzLmJEZWZlckxvYWRpbmcgPSBmYWxzZTsKCQkJb1NldHRpbmdzLmlEcmF3Kys7CgkJCV9mblByb2Nlc3NpbmdEaXNwbGF5KCBvU2V0dGluZ3MsIGZhbHNlICk7CgkJfQoJCWVsc2UgaWYgKCAhYlNlcnZlclNpZGUgKQoJCXsKCQkJb1NldHRpbmdzLmlEcmF3Kys7CgkJfQoJCWVsc2UgaWYgKCAhb1NldHRpbmdzLmJEZXN0cm95aW5nICYmICFfZm5BamF4VXBkYXRlKCBvU2V0dGluZ3MgKSApCgkJewoJCQlyZXR1cm47CgkJfQoJCgkJaWYgKCBhaURpc3BsYXkubGVuZ3RoICE9PSAwICkKCQl7CgkJCXZhciBpU3RhcnQgPSBiU2VydmVyU2lkZSA/IDAgOiBpRGlzcGxheVN0YXJ0OwoJCQl2YXIgaUVuZCA9IGJTZXJ2ZXJTaWRlID8gb1NldHRpbmdzLmFvRGF0YS5sZW5ndGggOiBpRGlzcGxheUVuZDsKCQoJCQlmb3IgKCB2YXIgaj1pU3RhcnQgOyBqPGlFbmQgOyBqKysgKQoJCQl7CgkJCQl2YXIgaURhdGFJbmRleCA9IGFpRGlzcGxheVtqXTsKCQkJCXZhciBhb0RhdGEgPSBvU2V0dGluZ3MuYW9EYXRhWyBpRGF0YUluZGV4IF07CgkJCQlpZiAoIGFvRGF0YS5uVHIgPT09IG51bGwgKQoJCQkJewoJCQkJCV9mbkNyZWF0ZVRyKCBvU2V0dGluZ3MsIGlEYXRhSW5kZXggKTsKCQkJCX0KCQoJCQkJdmFyIG5Sb3cgPSBhb0RhdGEublRyOwoJCgkJCQkvKiBSZW1vdmUgdGhlIG9sZCBzdHJpcGluZyBjbGFzc2VzIGFuZCB0aGVuIGFkZCB0aGUgbmV3IG9uZSAqLwoJCQkJaWYgKCBpU3RyaXBlcyAhPT0gMCApCgkJCQl7CgkJCQkJdmFyIHNTdHJpcGUgPSBhc1N0cmlwZUNsYXNzZXNbIGlSb3dDb3VudCAlIGlTdHJpcGVzIF07CgkJCQkJaWYgKCBhb0RhdGEuX3NSb3dTdHJpcGUgIT0gc1N0cmlwZSApCgkJCQkJewoJCQkJCQkkKG5Sb3cpLnJlbW92ZUNsYXNzKCBhb0RhdGEuX3NSb3dTdHJpcGUgKS5hZGRDbGFzcyggc1N0cmlwZSApOwoJCQkJCQlhb0RhdGEuX3NSb3dTdHJpcGUgPSBzU3RyaXBlOwoJCQkJCX0KCQkJCX0KCQoJCQkJLy8gUm93IGNhbGxiYWNrIGZ1bmN0aW9ucyAtIG1pZ2h0IHdhbnQgdG8gbWFuaXB1bGF0ZSB0aGUgcm93CgkJCQkvLyBpUm93Q291bnQgYW5kIGogYXJlIG5vdCBjdXJyZW50bHkgZG9jdW1lbnRlZC4gQXJlIHRoZXkgYXQgYWxsCgkJCQkvLyB1c2VmdWw/CgkJCQlfZm5DYWxsYmFja0ZpcmUoIG9TZXR0aW5ncywgJ2FvUm93Q2FsbGJhY2snLCBudWxsLAoJCQkJCVtuUm93LCBhb0RhdGEuX2FEYXRhLCBpUm93Q291bnQsIGosIGlEYXRhSW5kZXhdICk7CgkKCQkJCWFuUm93cy5wdXNoKCBuUm93ICk7CgkJCQlpUm93Q291bnQrKzsKCQkJfQoJCX0KCQllbHNlCgkJewoJCQkvKiBUYWJsZSBpcyBlbXB0eSAtIGNyZWF0ZSBhIHJvdyB3aXRoIGFuIGVtcHR5IG1lc3NhZ2UgaW4gaXQgKi8KCQkJdmFyIHNaZXJvID0gb0xhbmcuc1plcm9SZWNvcmRzOwoJCQlpZiAoIG9TZXR0aW5ncy5pRHJhdyA9PSAxICYmICBfZm5EYXRhU291cmNlKCBvU2V0dGluZ3MgKSA9PSAnYWpheCcgKQoJCQl7CgkJCQlzWmVybyA9IG9MYW5nLnNMb2FkaW5nUmVjb3JkczsKCQkJfQoJCQllbHNlIGlmICggb0xhbmcuc0VtcHR5VGFibGUgJiYgb1NldHRpbmdzLmZuUmVjb3Jkc1RvdGFsKCkgPT09IDAgKQoJCQl7CgkJCQlzWmVybyA9IG9MYW5nLnNFbXB0eVRhYmxlOwoJCQl9CgkKCQkJYW5Sb3dzWyAwIF0gPSAkKCAnPHRyLz4nLCB7ICdjbGFzcyc6IGlTdHJpcGVzID8gYXNTdHJpcGVDbGFzc2VzWzBdIDogJycgfSApCgkJCQkuYXBwZW5kKCAkKCc8dGQgLz4nLCB7CgkJCQkJJ3ZhbGlnbic6ICAndG9wJywKCQkJCQknY29sU3Bhbic6IF9mblZpc2JsZUNvbHVtbnMoIG9TZXR0aW5ncyApLAoJCQkJCSdjbGFzcyc6ICAgb1NldHRpbmdzLm9DbGFzc2VzLnNSb3dFbXB0eQoJCQkJfSApLmh0bWwoIHNaZXJvICkgKVswXTsKCQl9CgkKCQkvKiBIZWFkZXIgYW5kIGZvb3RlciBjYWxsYmFja3MgKi8KCQlfZm5DYWxsYmFja0ZpcmUoIG9TZXR0aW5ncywgJ2FvSGVhZGVyQ2FsbGJhY2snLCAnaGVhZGVyJywgWyAkKG9TZXR0aW5ncy5uVEhlYWQpLmNoaWxkcmVuKCd0cicpWzBdLAoJCQlfZm5HZXREYXRhTWFzdGVyKCBvU2V0dGluZ3MgKSwgaURpc3BsYXlTdGFydCwgaURpc3BsYXlFbmQsIGFpRGlzcGxheSBdICk7CgkKCQlfZm5DYWxsYmFja0ZpcmUoIG9TZXR0aW5ncywgJ2FvRm9vdGVyQ2FsbGJhY2snLCAnZm9vdGVyJywgWyAkKG9TZXR0aW5ncy5uVEZvb3QpLmNoaWxkcmVuKCd0cicpWzBdLAoJCQlfZm5HZXREYXRhTWFzdGVyKCBvU2V0dGluZ3MgKSwgaURpc3BsYXlTdGFydCwgaURpc3BsYXlFbmQsIGFpRGlzcGxheSBdICk7CgkKCQl2YXIgYm9keSA9ICQob1NldHRpbmdzLm5UQm9keSk7CgkKCQlib2R5LmNoaWxkcmVuKCkuZGV0YWNoKCk7CgkJYm9keS5hcHBlbmQoICQoYW5Sb3dzKSApOwoJCgkJLyogQ2FsbCBhbGwgcmVxdWlyZWQgY2FsbGJhY2sgZnVuY3Rpb25zIGZvciB0aGUgZW5kIG9mIGEgZHJhdyAqLwoJCV9mbkNhbGxiYWNrRmlyZSggb1NldHRpbmdzLCAnYW9EcmF3Q2FsbGJhY2snLCAnZHJhdycsIFtvU2V0dGluZ3NdICk7CgkKCQkvKiBEcmF3IGlzIGNvbXBsZXRlLCBzb3J0aW5nIGFuZCBmaWx0ZXJpbmcgbXVzdCBiZSBhcyB3ZWxsICovCgkJb1NldHRpbmdzLmJTb3J0ZWQgPSBmYWxzZTsKCQlvU2V0dGluZ3MuYkZpbHRlcmVkID0gZmFsc2U7CgkJb1NldHRpbmdzLmJEcmF3aW5nID0gZmFsc2U7Cgl9CgkKCQoJLyoqCgkgKiBSZWRyYXcgdGhlIHRhYmxlIC0gdGFraW5nIGFjY291bnQgb2YgdGhlIHZhcmlvdXMgZmVhdHVyZXMgd2hpY2ggYXJlIGVuYWJsZWQKCSAqICBAcGFyYW0ge29iamVjdH0gb1NldHRpbmdzIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkgKiAgQHBhcmFtIHtib29sZWFufSBbaG9sZFBvc2l0aW9uXSBLZWVwIHRoZSBjdXJyZW50IHBhZ2luZyBwb3NpdGlvbi4gQnkgZGVmYXVsdAoJICogICAgdGhlIHBhZ2luZyBpcyByZXNldCB0byB0aGUgZmlyc3QgcGFnZQoJICogIEBtZW1iZXJvZiBEYXRhVGFibGUjb0FwaQoJICovCglmdW5jdGlvbiBfZm5SZURyYXcoIHNldHRpbmdzLCBob2xkUG9zaXRpb24gKQoJewoJCXZhcgoJCQlmZWF0dXJlcyA9IHNldHRpbmdzLm9GZWF0dXJlcywKCQkJc29ydCAgICAgPSBmZWF0dXJlcy5iU29ydCwKCQkJZmlsdGVyICAgPSBmZWF0dXJlcy5iRmlsdGVyOwoJCgkJaWYgKCBzb3J0ICkgewoJCQlfZm5Tb3J0KCBzZXR0aW5ncyApOwoJCX0KCQoJCWlmICggZmlsdGVyICkgewoJCQlfZm5GaWx0ZXJDb21wbGV0ZSggc2V0dGluZ3MsIHNldHRpbmdzLm9QcmV2aW91c1NlYXJjaCApOwoJCX0KCQllbHNlIHsKCQkJLy8gTm8gZmlsdGVyaW5nLCBzbyB3ZSB3YW50IHRvIGp1c3QgdXNlIHRoZSBkaXNwbGF5IG1hc3RlcgoJCQlzZXR0aW5ncy5haURpc3BsYXkgPSBzZXR0aW5ncy5haURpc3BsYXlNYXN0ZXIuc2xpY2UoKTsKCQl9CgkKCQlpZiAoIGhvbGRQb3NpdGlvbiAhPT0gdHJ1ZSApIHsKCQkJc2V0dGluZ3MuX2lEaXNwbGF5U3RhcnQgPSAwOwoJCX0KCQoJCS8vIExldCBhbnkgbW9kdWxlcyBrbm93IGFib3V0IHRoZSBkcmF3IGhvbGQgcG9zaXRpb24gc3RhdGUgKHVzZWQgYnkKCQkvLyBzY3JvbGxpbmcgaW50ZXJuYWxseSkKCQlzZXR0aW5ncy5fZHJhd0hvbGQgPSBob2xkUG9zaXRpb247CgkKCQlfZm5EcmF3KCBzZXR0aW5ncyApOwoJCgkJc2V0dGluZ3MuX2RyYXdIb2xkID0gZmFsc2U7Cgl9CgkKCQoJLyoqCgkgKiBBZGQgdGhlIG9wdGlvbnMgdG8gdGhlIHBhZ2UgSFRNTCBmb3IgdGhlIHRhYmxlCgkgKiAgQHBhcmFtIHtvYmplY3R9IG9TZXR0aW5ncyBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJICogIEBtZW1iZXJvZiBEYXRhVGFibGUjb0FwaQoJICovCglmdW5jdGlvbiBfZm5BZGRPcHRpb25zSHRtbCAoIG9TZXR0aW5ncyApCgl7CgkJdmFyIGNsYXNzZXMgPSBvU2V0dGluZ3Mub0NsYXNzZXM7CgkJdmFyIHRhYmxlID0gJChvU2V0dGluZ3MublRhYmxlKTsKCQl2YXIgaG9sZGluZyA9ICQoJzxkaXYvPicpLmluc2VydEJlZm9yZSggdGFibGUgKTsgLy8gSG9sZGluZyBlbGVtZW50IGZvciBzcGVlZAoJCXZhciBmZWF0dXJlcyA9IG9TZXR0aW5ncy5vRmVhdHVyZXM7CgkKCQkvLyBBbGwgRGF0YVRhYmxlcyBhcmUgd3JhcHBlZCBpbiBhIGRpdgoJCXZhciBpbnNlcnQgPSAkKCc8ZGl2Lz4nLCB7CgkJCWlkOiAgICAgIG9TZXR0aW5ncy5zVGFibGVJZCsnX3dyYXBwZXInLAoJCQknY2xhc3MnOiBjbGFzc2VzLnNXcmFwcGVyICsgKG9TZXR0aW5ncy5uVEZvb3QgPyAnJyA6ICcgJytjbGFzc2VzLnNOb0Zvb3RlcikKCQl9ICk7CgkKCQlvU2V0dGluZ3MubkhvbGRpbmcgPSBob2xkaW5nWzBdOwoJCW9TZXR0aW5ncy5uVGFibGVXcmFwcGVyID0gaW5zZXJ0WzBdOwoJCW9TZXR0aW5ncy5uVGFibGVSZWluc2VydEJlZm9yZSA9IG9TZXR0aW5ncy5uVGFibGUubmV4dFNpYmxpbmc7CgkKCQkvKiBMb29wIG92ZXIgdGhlIHVzZXIgc2V0IHBvc2l0aW9uaW5nIGFuZCBwbGFjZSB0aGUgZWxlbWVudHMgYXMgbmVlZGVkICovCgkJdmFyIGFEb20gPSBvU2V0dGluZ3Muc0RvbS5zcGxpdCgnJyk7CgkJdmFyIGZlYXR1cmVOb2RlLCBjT3B0aW9uLCBuTmV3Tm9kZSwgY05leHQsIHNBdHRyLCBqOwoJCWZvciAoIHZhciBpPTAgOyBpPGFEb20ubGVuZ3RoIDsgaSsrICkKCQl7CgkJCWZlYXR1cmVOb2RlID0gbnVsbDsKCQkJY09wdGlvbiA9IGFEb21baV07CgkKCQkJaWYgKCBjT3B0aW9uID09ICc8JyApCgkJCXsKCQkJCS8qIE5ldyBjb250YWluZXIgZGl2ICovCgkJCQluTmV3Tm9kZSA9ICQoJzxkaXYvPicpWzBdOwoJCgkJCQkvKiBDaGVjayB0byBzZWUgaWYgd2Ugc2hvdWxkIGFwcGVuZCBhbiBpZCBhbmQvb3IgYSBjbGFzcyBuYW1lIHRvIHRoZSBjb250YWluZXIgKi8KCQkJCWNOZXh0ID0gYURvbVtpKzFdOwoJCQkJaWYgKCBjTmV4dCA9PSAiJyIgfHwgY05leHQgPT0gJyInICkKCQkJCXsKCQkJCQlzQXR0ciA9ICIiOwoJCQkJCWogPSAyOwoJCQkJCXdoaWxlICggYURvbVtpK2pdICE9IGNOZXh0ICkKCQkJCQl7CgkJCQkJCXNBdHRyICs9IGFEb21baStqXTsKCQkJCQkJaisrOwoJCQkJCX0KCQoJCQkJCS8qIFJlcGxhY2UgalF1ZXJ5IFVJIGNvbnN0YW50cyBAdG9kbyBkZXByZWNpYXRlZCAqLwoJCQkJCWlmICggc0F0dHIgPT0gIkgiICkKCQkJCQl7CgkJCQkJCXNBdHRyID0gY2xhc3Nlcy5zSlVJSGVhZGVyOwoJCQkJCX0KCQkJCQllbHNlIGlmICggc0F0dHIgPT0gIkYiICkKCQkJCQl7CgkJCQkJCXNBdHRyID0gY2xhc3Nlcy5zSlVJRm9vdGVyOwoJCQkJCX0KCQoJCQkJCS8qIFRoZSBhdHRyaWJ1dGUgY2FuIGJlIGluIHRoZSBmb3JtYXQgb2YgIiNpZC5jbGFzcyIsICIjaWQiIG9yICJjbGFzcyIgVGhpcyBsb2dpYwoJCQkJCSAqIGJyZWFrcyB0aGUgc3RyaW5nIGludG8gcGFydHMgYW5kIGFwcGxpZXMgdGhlbSBhcyBuZWVkZWQKCQkJCQkgKi8KCQkJCQlpZiAoIHNBdHRyLmluZGV4T2YoJy4nKSAhPSAtMSApCgkJCQkJewoJCQkJCQl2YXIgYVNwbGl0ID0gc0F0dHIuc3BsaXQoJy4nKTsKCQkJCQkJbk5ld05vZGUuaWQgPSBhU3BsaXRbMF0uc3Vic3RyKDEsIGFTcGxpdFswXS5sZW5ndGgtMSk7CgkJCQkJCW5OZXdOb2RlLmNsYXNzTmFtZSA9IGFTcGxpdFsxXTsKCQkJCQl9CgkJCQkJZWxzZSBpZiAoIHNBdHRyLmNoYXJBdCgwKSA9PSAiIyIgKQoJCQkJCXsKCQkJCQkJbk5ld05vZGUuaWQgPSBzQXR0ci5zdWJzdHIoMSwgc0F0dHIubGVuZ3RoLTEpOwoJCQkJCX0KCQkJCQllbHNlCgkJCQkJewoJCQkJCQluTmV3Tm9kZS5jbGFzc05hbWUgPSBzQXR0cjsKCQkJCQl9CgkKCQkJCQlpICs9IGo7IC8qIE1vdmUgYWxvbmcgdGhlIHBvc2l0aW9uIGFycmF5ICovCgkJCQl9CgkKCQkJCWluc2VydC5hcHBlbmQoIG5OZXdOb2RlICk7CgkJCQlpbnNlcnQgPSAkKG5OZXdOb2RlKTsKCQkJfQoJCQllbHNlIGlmICggY09wdGlvbiA9PSAnPicgKQoJCQl7CgkJCQkvKiBFbmQgY29udGFpbmVyIGRpdiAqLwoJCQkJaW5zZXJ0ID0gaW5zZXJ0LnBhcmVudCgpOwoJCQl9CgkJCS8vIEB0b2RvIE1vdmUgb3B0aW9ucyBpbnRvIHRoZWlyIG93biBwbHVnaW5zPwoJCQllbHNlIGlmICggY09wdGlvbiA9PSAnbCcgJiYgZmVhdHVyZXMuYlBhZ2luYXRlICYmIGZlYXR1cmVzLmJMZW5ndGhDaGFuZ2UgKQoJCQl7CgkJCQkvKiBMZW5ndGggKi8KCQkJCWZlYXR1cmVOb2RlID0gX2ZuRmVhdHVyZUh0bWxMZW5ndGgoIG9TZXR0aW5ncyApOwoJCQl9CgkJCWVsc2UgaWYgKCBjT3B0aW9uID09ICdmJyAmJiBmZWF0dXJlcy5iRmlsdGVyICkKCQkJewoJCQkJLyogRmlsdGVyICovCgkJCQlmZWF0dXJlTm9kZSA9IF9mbkZlYXR1cmVIdG1sRmlsdGVyKCBvU2V0dGluZ3MgKTsKCQkJfQoJCQllbHNlIGlmICggY09wdGlvbiA9PSAncicgJiYgZmVhdHVyZXMuYlByb2Nlc3NpbmcgKQoJCQl7CgkJCQkvKiBwUm9jZXNzaW5nICovCgkJCQlmZWF0dXJlTm9kZSA9IF9mbkZlYXR1cmVIdG1sUHJvY2Vzc2luZyggb1NldHRpbmdzICk7CgkJCX0KCQkJZWxzZSBpZiAoIGNPcHRpb24gPT0gJ3QnICkKCQkJewoJCQkJLyogVGFibGUgKi8KCQkJCWZlYXR1cmVOb2RlID0gX2ZuRmVhdHVyZUh0bWxUYWJsZSggb1NldHRpbmdzICk7CgkJCX0KCQkJZWxzZSBpZiAoIGNPcHRpb24gPT0gICdpJyAmJiBmZWF0dXJlcy5iSW5mbyApCgkJCXsKCQkJCS8qIEluZm8gKi8KCQkJCWZlYXR1cmVOb2RlID0gX2ZuRmVhdHVyZUh0bWxJbmZvKCBvU2V0dGluZ3MgKTsKCQkJfQoJCQllbHNlIGlmICggY09wdGlvbiA9PSAncCcgJiYgZmVhdHVyZXMuYlBhZ2luYXRlICkKCQkJewoJCQkJLyogUGFnaW5hdGlvbiAqLwoJCQkJZmVhdHVyZU5vZGUgPSBfZm5GZWF0dXJlSHRtbFBhZ2luYXRlKCBvU2V0dGluZ3MgKTsKCQkJfQoJCQllbHNlIGlmICggRGF0YVRhYmxlLmV4dC5mZWF0dXJlLmxlbmd0aCAhPT0gMCApCgkJCXsKCQkJCS8qIFBsdWctaW4gZmVhdHVyZXMgKi8KCQkJCXZhciBhb0ZlYXR1cmVzID0gRGF0YVRhYmxlLmV4dC5mZWF0dXJlOwoJCQkJZm9yICggdmFyIGs9MCwga0xlbj1hb0ZlYXR1cmVzLmxlbmd0aCA7IGs8a0xlbiA7IGsrKyApCgkJCQl7CgkJCQkJaWYgKCBjT3B0aW9uID09IGFvRmVhdHVyZXNba10uY0ZlYXR1cmUgKQoJCQkJCXsKCQkJCQkJZmVhdHVyZU5vZGUgPSBhb0ZlYXR1cmVzW2tdLmZuSQ=="
},
{
"key": "jquery.dataTables.js?4?1?1",
"type": "binary",
"value": "base64:bml0KCBvU2V0dGluZ3MgKTsKCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJfQoJCQl9CgkKCQkJLyogQWRkIHRvIHRoZSAyRCBmZWF0dXJlcyBhcnJheSAqLwoJCQlpZiAoIGZlYXR1cmVOb2RlICkKCQkJewoJCQkJdmFyIGFhbkZlYXR1cmVzID0gb1NldHRpbmdzLmFhbkZlYXR1cmVzOwoJCgkJCQlpZiAoICEgYWFuRmVhdHVyZXNbY09wdGlvbl0gKQoJCQkJewoJCQkJCWFhbkZlYXR1cmVzW2NPcHRpb25dID0gW107CgkJCQl9CgkKCQkJCWFhbkZlYXR1cmVzW2NPcHRpb25dLnB1c2goIGZlYXR1cmVOb2RlICk7CgkJCQlpbnNlcnQuYXBwZW5kKCBmZWF0dXJlTm9kZSApOwoJCQl9CgkJfQoJCgkJLyogQnVpbHQgb3VyIERPTSBzdHJ1Y3R1cmUgLSByZXBsYWNlIHRoZSBob2xkaW5nIGRpdiB3aXRoIHdoYXQgd2Ugd2FudCAqLwoJCWhvbGRpbmcucmVwbGFjZVdpdGgoIGluc2VydCApOwoJCW9TZXR0aW5ncy5uSG9sZGluZyA9IG51bGw7Cgl9CgkKCQoJLyoqCgkgKiBVc2UgdGhlIERPTSBzb3VyY2UgdG8gY3JlYXRlIHVwIGFuIGFycmF5IG9mIGhlYWRlciBjZWxscy4gVGhlIGlkZWEgaGVyZSBpcyB0bwoJICogY3JlYXRlIGEgbGF5b3V0IGdyaWQgKGFycmF5KSBvZiByb3dzIHggY29sdW1ucywgd2hpY2ggY29udGFpbnMgYSByZWZlcmVuY2UKCSAqIHRvIHRoZSBjZWxsIHRoYXQgdGhhdCBwb2ludCBpbiB0aGUgZ3JpZCAocmVnYXJkbGVzcyBvZiBjb2wvcm93c3BhbiksIHN1Y2ggdGhhdAoJICogYW55IGNvbHVtbiAvIHJvdyBjb3VsZCBiZSByZW1vdmVkIGFuZCB0aGUgbmV3IGdyaWQgY29uc3RydWN0ZWQKCSAqICBAcGFyYW0gYXJyYXkge29iamVjdH0gYUxheW91dCBBcnJheSB0byBzdG9yZSB0aGUgY2FsY3VsYXRlZCBsYXlvdXQgaW4KCSAqICBAcGFyYW0ge25vZGV9IG5UaGVhZCBUaGUgaGVhZGVyL2Zvb3RlciBlbGVtZW50IGZvciB0aGUgdGFibGUKCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuRGV0ZWN0SGVhZGVyICggYUxheW91dCwgblRoZWFkICkKCXsKCQl2YXIgblRycyA9ICQoblRoZWFkKS5jaGlsZHJlbigndHInKTsKCQl2YXIgblRyLCBuQ2VsbDsKCQl2YXIgaSwgaywgbCwgaUxlbiwgakxlbiwgaUNvbFNoaWZ0ZWQsIGlDb2x1bW4sIGlDb2xzcGFuLCBpUm93c3BhbjsKCQl2YXIgYlVuaXF1ZTsKCQl2YXIgZm5TaGlmdENvbCA9IGZ1bmN0aW9uICggYSwgaSwgaiApIHsKCQkJdmFyIGsgPSBhW2ldOwoJICAgICAgICAgICAgICAgIHdoaWxlICgga1tqXSApIHsKCQkJCWorKzsKCQkJfQoJCQlyZXR1cm4gajsKCQl9OwoJCgkJYUxheW91dC5zcGxpY2UoIDAsIGFMYXlvdXQubGVuZ3RoICk7CgkKCQkvKiBXZSBrbm93IGhvdyBtYW55IHJvd3MgdGhlcmUgYXJlIGluIHRoZSBsYXlvdXQgLSBzbyBwcmVwIGl0ICovCgkJZm9yICggaT0wLCBpTGVuPW5UcnMubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkKCQl7CgkJCWFMYXlvdXQucHVzaCggW10gKTsKCQl9CgkKCQkvKiBDYWxjdWxhdGUgYSBsYXlvdXQgYXJyYXkgKi8KCQlmb3IgKCBpPTAsIGlMZW49blRycy5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCXsKCQkJblRyID0gblRyc1tpXTsKCQkJaUNvbHVtbiA9IDA7CgkKCQkJLyogRm9yIGV2ZXJ5IGNlbGwgaW4gdGhlIHJvdy4uLiAqLwoJCQluQ2VsbCA9IG5Uci5maXJzdENoaWxkOwoJCQl3aGlsZSAoIG5DZWxsICkgewoJCQkJaWYgKCBuQ2VsbC5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpID09ICJURCIgfHwKCQkJCSAgICAgbkNlbGwubm9kZU5hbWUudG9VcHBlckNhc2UoKSA9PSAiVEgiICkKCQkJCXsKCQkJCQkvKiBHZXQgdGhlIGNvbCBhbmQgcm93c3BhbiBhdHRyaWJ1dGVzIGZyb20gdGhlIERPTSBhbmQgc2FuaXRpc2UgdGhlbSAqLwoJCQkJCWlDb2xzcGFuID0gbkNlbGwuZ2V0QXR0cmlidXRlKCdjb2xzcGFuJykgKiAxOwoJCQkJCWlSb3dzcGFuID0gbkNlbGwuZ2V0QXR0cmlidXRlKCdyb3dzcGFuJykgKiAxOwoJCQkJCWlDb2xzcGFuID0gKCFpQ29sc3BhbiB8fCBpQ29sc3Bhbj09PTAgfHwgaUNvbHNwYW49PT0xKSA/IDEgOiBpQ29sc3BhbjsKCQkJCQlpUm93c3BhbiA9ICghaVJvd3NwYW4gfHwgaVJvd3NwYW49PT0wIHx8IGlSb3dzcGFuPT09MSkgPyAxIDogaVJvd3NwYW47CgkKCQkJCQkvKiBUaGVyZSBtaWdodCBiZSBjb2xzcGFuIGNlbGxzIGFscmVhZHkgaW4gdGhpcyByb3csIHNvIHNoaWZ0IG91ciB0YXJnZXQKCQkJCQkgKiBhY2NvcmRpbmdseQoJCQkJCSAqLwoJCQkJCWlDb2xTaGlmdGVkID0gZm5TaGlmdENvbCggYUxheW91dCwgaSwgaUNvbHVtbiApOwoJCgkJCQkJLyogQ2FjaGUgY2FsY3VsYXRpb24gZm9yIHVuaXF1ZSBjb2x1bW5zICovCgkJCQkJYlVuaXF1ZSA9IGlDb2xzcGFuID09PSAxID8gdHJ1ZSA6IGZhbHNlOwoJCgkJCQkJLyogSWYgdGhlcmUgaXMgY29sIC8gcm93c3BhbiwgY29weSB0aGUgaW5mb3JtYXRpb24gaW50byB0aGUgbGF5b3V0IGdyaWQgKi8KCQkJCQlmb3IgKCBsPTAgOyBsPGlDb2xzcGFuIDsgbCsrICkKCQkJCQl7CgkJCQkJCWZvciAoIGs9MCA7IGs8aVJvd3NwYW4gOyBrKysgKQoJCQkJCQl7CgkJCQkJCQlhTGF5b3V0W2kra11baUNvbFNoaWZ0ZWQrbF0gPSB7CgkJCQkJCQkJImNlbGwiOiBuQ2VsbCwKCQkJCQkJCQkidW5pcXVlIjogYlVuaXF1ZQoJCQkJCQkJfTsKCQkJCQkJCWFMYXlvdXRbaStrXS5uVHIgPSBuVHI7CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCQluQ2VsbCA9IG5DZWxsLm5leHRTaWJsaW5nOwoJCQl9CgkJfQoJfQoJCgkKCS8qKgoJICogR2V0IGFuIGFycmF5IG9mIHVuaXF1ZSB0aCBlbGVtZW50cywgb25lIGZvciBlYWNoIGNvbHVtbgoJICogIEBwYXJhbSB7b2JqZWN0fSBvU2V0dGluZ3MgZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCSAqICBAcGFyYW0ge25vZGV9IG5IZWFkZXIgYXV0b21hdGljYWxseSBkZXRlY3QgdGhlIGxheW91dCBmcm9tIHRoaXMgbm9kZSAtIG9wdGlvbmFsCgkgKiAgQHBhcmFtIHthcnJheX0gYUxheW91dCB0aGVhZC90Zm9vdCBsYXlvdXQgZnJvbSBfZm5EZXRlY3RIZWFkZXIgLSBvcHRpb25hbAoJICogIEByZXR1cm5zIGFycmF5IHtub2RlfSBhUmV0dXJuIGxpc3Qgb2YgdW5pcXVlIHRoJ3MKCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuR2V0VW5pcXVlVGhzICggb1NldHRpbmdzLCBuSGVhZGVyLCBhTGF5b3V0ICkKCXsKCQl2YXIgYVJldHVybiA9IFtdOwoJCWlmICggIWFMYXlvdXQgKQoJCXsKCQkJYUxheW91dCA9IG9TZXR0aW5ncy5hb0hlYWRlcjsKCQkJaWYgKCBuSGVhZGVyICkKCQkJewoJCQkJYUxheW91dCA9IFtdOwoJCQkJX2ZuRGV0ZWN0SGVhZGVyKCBhTGF5b3V0LCBuSGVhZGVyICk7CgkJCX0KCQl9CgkKCQlmb3IgKCB2YXIgaT0wLCBpTGVuPWFMYXlvdXQubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkKCQl7CgkJCWZvciAoIHZhciBqPTAsIGpMZW49YUxheW91dFtpXS5sZW5ndGggOyBqPGpMZW4gOyBqKysgKQoJCQl7CgkJCQlpZiAoIGFMYXlvdXRbaV1bal0udW5pcXVlICYmCgkJCQkJICghYVJldHVybltqXSB8fCAhb1NldHRpbmdzLmJTb3J0Q2VsbHNUb3ApICkKCQkJCXsKCQkJCQlhUmV0dXJuW2pdID0gYUxheW91dFtpXVtqXS5jZWxsOwoJCQkJfQoJCQl9CgkJfQoJCgkJcmV0dXJuIGFSZXR1cm47Cgl9CgkKCS8qKgoJICogQ3JlYXRlIGFuIEFqYXggY2FsbCBiYXNlZCBvbiB0aGUgdGFibGUncyBzZXR0aW5ncywgdGFraW5nIGludG8gYWNjb3VudCB0aGF0CgkgKiBwYXJhbWV0ZXJzIGNhbiBoYXZlIG11bHRpcGxlIGZvcm1zLCBhbmQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCgkgKgoJICogQHBhcmFtIHtvYmplY3R9IG9TZXR0aW5ncyBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJICogQHBhcmFtIHthcnJheX0gZGF0YSBEYXRhIHRvIHNlbmQgdG8gdGhlIHNlcnZlciwgcmVxdWlyZWQgYnkKCSAqICAgICBEYXRhVGFibGVzIC0gbWF5IGJlIGF1Z21lbnRlZCBieSBkZXZlbG9wZXIgY2FsbGJhY2tzCgkgKiBAcGFyYW0ge2Z1bmN0aW9ufSBmbiBDYWxsYmFjayBmdW5jdGlvbiB0byBydW4gd2hlbiBkYXRhIGlzIG9idGFpbmVkCgkgKi8KCWZ1bmN0aW9uIF9mbkJ1aWxkQWpheCggb1NldHRpbmdzLCBkYXRhLCBmbiApCgl7CgkJLy8gQ29tcGF0aWJpbGl0eSB3aXRoIDEuOS0sIGFsbG93IGZuU2VydmVyRGF0YSBhbmQgZXZlbnQgdG8gbWFuaXB1bGF0ZQoJCV9mbkNhbGxiYWNrRmlyZSggb1NldHRpbmdzLCAnYW9TZXJ2ZXJQYXJhbXMnLCAnc2VydmVyUGFyYW1zJywgW2RhdGFdICk7CgkKCQkvLyBDb252ZXJ0IHRvIG9iamVjdCBiYXNlZCBmb3IgMS4xMCsgaWYgdXNpbmcgdGhlIG9sZCBhcnJheSBzY2hlbWUgd2hpY2ggY2FuCgkJLy8gY29tZSBmcm9tIHNlcnZlci1zaWRlIHByb2Nlc3Npbmcgb3Igc2VydmVyUGFyYW1zCgkJaWYgKCBkYXRhICYmICQuaXNBcnJheShkYXRhKSApIHsKCQkJdmFyIHRtcCA9IHt9OwoJCQl2YXIgcmJyYWNrZXQgPSAvKC4qPylcW1xdJC87CgkKCQkJJC5lYWNoKCBkYXRhLCBmdW5jdGlvbiAoa2V5LCB2YWwpIHsKCQkJCXZhciBtYXRjaCA9IHZhbC5uYW1lLm1hdGNoKHJicmFja2V0KTsKCQoJCQkJaWYgKCBtYXRjaCApIHsKCQkJCQkvLyBTdXBwb3J0IGZvciBhcnJheXMKCQkJCQl2YXIgbmFtZSA9IG1hdGNoWzBdOwoJCgkJCQkJaWYgKCAhIHRtcFsgbmFtZSBdICkgewoJCQkJCQl0bXBbIG5hbWUgXSA9IFtdOwoJCQkJCX0KCQkJCQl0bXBbIG5hbWUgXS5wdXNoKCB2YWwudmFsdWUgKTsKCQkJCX0KCQkJCWVsc2UgewoJCQkJCXRtcFt2YWwubmFtZV0gPSB2YWwudmFsdWU7CgkJCQl9CgkJCX0gKTsKCQkJZGF0YSA9IHRtcDsKCQl9CgkKCQl2YXIgYWpheERhdGE7CgkJdmFyIGFqYXggPSBvU2V0dGluZ3MuYWpheDsKCQl2YXIgaW5zdGFuY2UgPSBvU2V0dGluZ3Mub0luc3RhbmNlOwoJCXZhciBjYWxsYmFjayA9IGZ1bmN0aW9uICgganNvbiApIHsKCQkJX2ZuQ2FsbGJhY2tGaXJlKCBvU2V0dGluZ3MsIG51bGwsICd4aHInLCBbb1NldHRpbmdzLCBqc29uLCBvU2V0dGluZ3MuanFYSFJdICk7CgkJCWZuKCBqc29uICk7CgkJfTsKCQoJCWlmICggJC5pc1BsYWluT2JqZWN0KCBhamF4ICkgJiYgYWpheC5kYXRhICkKCQl7CgkJCWFqYXhEYXRhID0gYWpheC5kYXRhOwoJCgkJCXZhciBuZXdEYXRhID0gdHlwZW9mIGFqYXhEYXRhID09PSAnZnVuY3Rpb24nID8KCQkJCWFqYXhEYXRhKCBkYXRhLCBvU2V0dGluZ3MgKSA6ICAvLyBmbiBjYW4gbWFuaXB1bGF0ZSBkYXRhIG9yIHJldHVybgoJCQkJYWpheERhdGE7ICAgICAgICAgICAgICAgICAgICAgIC8vIGFuIG9iamVjdCBvYmplY3Qgb3IgYXJyYXkgdG8gbWVyZ2UKCQoJCQkvLyBJZiB0aGUgZnVuY3Rpb24gcmV0dXJuZWQgc29tZXRoaW5nLCB1c2UgdGhhdCBhbG9uZQoJCQlkYXRhID0gdHlwZW9mIGFqYXhEYXRhID09PSAnZnVuY3Rpb24nICYmIG5ld0RhdGEgPwoJCQkJbmV3RGF0YSA6CgkJCQkkLmV4dGVuZCggdHJ1ZSwgZGF0YSwgbmV3RGF0YSApOwoJCgkJCS8vIFJlbW92ZSB0aGUgZGF0YSBwcm9wZXJ0eSBhcyB3ZSd2ZSByZXNvbHZlZCBpdCBhbHJlYWR5IGFuZCBkb24ndCB3YW50CgkJCS8vIGpRdWVyeSB0byBkbyBpdCBhZ2FpbiAoaXQgaXMgcmVzdG9yZWQgYXQgdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24pCgkJCWRlbGV0ZSBhamF4LmRhdGE7CgkJfQoJCgkJdmFyIGJhc2VBamF4ID0gewoJCQkiZGF0YSI6IGRhdGEsCgkJCSJzdWNjZXNzIjogZnVuY3Rpb24gKGpzb24pIHsKCQkJCXZhciBlcnJvciA9IGpzb24uZXJyb3IgfHwganNvbi5zRXJyb3I7CgkJCQlpZiAoIGVycm9yICkgewoJCQkJCV9mbkxvZyggb1NldHRpbmdzLCAwLCBlcnJvciApOwoJCQkJfQoJCgkJCQlvU2V0dGluZ3MuanNvbiA9IGpzb247CgkJCQljYWxsYmFjaygganNvbiApOwoJCQl9LAoJCQkiZGF0YVR5cGUiOiAianNvbiIsCgkJCSJjYWNoZSI6IGZhbHNlLAoJCQkidHlwZSI6IG9TZXR0aW5ncy5zU2VydmVyTWV0aG9kLAoJCQkiZXJyb3IiOiBmdW5jdGlvbiAoeGhyLCBlcnJvciwgdGhyb3duKSB7CgkJCQl2YXIgcmV0ID0gX2ZuQ2FsbGJhY2tGaXJlKCBvU2V0dGluZ3MsIG51bGwsICd4aHInLCBbb1NldHRpbmdzLCBudWxsLCBvU2V0dGluZ3MuanFYSFJdICk7CgkKCQkJCWlmICggJC5pbkFycmF5KCB0cnVlLCByZXQgKSA9PT0gLTEgKSB7CgkJCQkJaWYgKCBlcnJvciA9PSAicGFyc2VyZXJyb3IiICkgewoJCQkJCQlfZm5Mb2coIG9TZXR0aW5ncywgMCwgJ0ludmFsaWQgSlNPTiByZXNwb25zZScsIDEgKTsKCQkJCQl9CgkJCQkJZWxzZSBpZiAoIHhoci5yZWFkeVN0YXRlID09PSA0ICkgewoJCQkJCQlfZm5Mb2coIG9TZXR0aW5ncywgMCwgJ0FqYXggZXJyb3InLCA3ICk7CgkJCQkJfQoJCQkJfQoJCgkJCQlfZm5Qcm9jZXNzaW5nRGlzcGxheSggb1NldHRpbmdzLCBmYWxzZSApOwoJCQl9CgkJfTsKCQoJCS8vIFN0b3JlIHRoZSBkYXRhIHN1Ym1pdHRlZCBmb3IgdGhlIEFQSQoJCW9TZXR0aW5ncy5vQWpheERhdGEgPSBkYXRhOwoJCgkJLy8gQWxsb3cgcGx1Zy1pbnMgYW5kIGV4dGVybmFsIHByb2Nlc3NlcyB0byBtb2RpZnkgdGhlIGRhdGEKCQlfZm5DYWxsYmFja0ZpcmUoIG9TZXR0aW5ncywgbnVsbCwgJ3ByZVhocicsIFtvU2V0dGluZ3MsIGRhdGFdICk7CgkKCQlpZiAoIG9TZXR0aW5ncy5mblNlcnZlckRhdGEgKQoJCXsKCQkJLy8gRGF0YVRhYmxlcyAxLjktIGNvbXBhdGliaWxpdHkKCQkJb1NldHRpbmdzLmZuU2VydmVyRGF0YS5jYWxsKCBpbnN0YW5jZSwKCQkJCW9TZXR0aW5ncy5zQWpheFNvdXJjZSwKCQkJCSQubWFwKCBkYXRhLCBmdW5jdGlvbiAodmFsLCBrZXkpIHsgLy8gTmVlZCB0byBjb252ZXJ0IGJhY2sgdG8gMS45IHRyYWQgZm9ybWF0CgkJCQkJcmV0dXJuIHsgbmFtZToga2V5LCB2YWx1ZTogdmFsIH07CgkJCQl9ICksCgkJCQljYWxsYmFjaywKCQkJCW9TZXR0aW5ncwoJCQkpOwoJCX0KCQllbHNlIGlmICggb1NldHRpbmdzLnNBamF4U291cmNlIHx8IHR5cGVvZiBhamF4ID09PSAnc3RyaW5nJyApCgkJewoJCQkvLyBEYXRhVGFibGVzIDEuOS0gY29tcGF0aWJpbGl0eQoJCQlvU2V0dGluZ3MuanFYSFIgPSAkLmFqYXgoICQuZXh0ZW5kKCBiYXNlQWpheCwgewoJCQkJdXJsOiBhamF4IHx8IG9TZXR0aW5ncy5zQWpheFNvdXJjZQoJCQl9ICkgKTsKCQl9CgkJZWxzZSBpZiAoIHR5cGVvZiBhamF4ID09PSAnZnVuY3Rpb24nICkKCQl7CgkJCS8vIElzIGEgZnVuY3Rpb24gLSBsZXQgdGhlIGNhbGxlciBkZWZpbmUgd2hhdCBuZWVkcyB0byBiZSBkb25lCgkJCW9TZXR0aW5ncy5qcVhIUiA9IGFqYXguY2FsbCggaW5zdGFuY2UsIGRhdGEsIGNhbGxiYWNrLCBvU2V0dGluZ3MgKTsKCQl9CgkJZWxzZQoJCXsKCQkJLy8gT2JqZWN0IHRvIGV4dGVuZCB0aGUgYmFzZSBzZXR0aW5ncwoJCQlvU2V0dGluZ3MuanFYSFIgPSAkLmFqYXgoICQuZXh0ZW5kKCBiYXNlQWpheCwgYWpheCApICk7CgkKCQkJLy8gUmVzdG9yZSBmb3IgbmV4dCB0aW1lIGFyb3VuZAoJCQlhamF4LmRhdGEgPSBhamF4RGF0YTsKCQl9Cgl9CgkKCQoJLyoqCgkgKiBVcGRhdGUgdGhlIHRhYmxlIHVzaW5nIGFuIEFqYXggY2FsbAoJICogIEBwYXJhbSB7b2JqZWN0fSBzZXR0aW5ncyBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJICogIEByZXR1cm5zIHtib29sZWFufSBCbG9jayB0aGUgdGFibGUgZHJhd2luZyBvciBub3QKCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuQWpheFVwZGF0ZSggc2V0dGluZ3MgKQoJewoJCWlmICggc2V0dGluZ3MuYkFqYXhEYXRhR2V0ICkgewoJCQlzZXR0aW5ncy5pRHJhdysrOwoJCQlfZm5Qcm9jZXNzaW5nRGlzcGxheSggc2V0dGluZ3MsIHRydWUgKTsKCQoJCQlfZm5CdWlsZEFqYXgoCgkJCQlzZXR0aW5ncywKCQkJCV9mbkFqYXhQYXJhbWV0ZXJzKCBzZXR0aW5ncyApLAoJCQkJZnVuY3Rpb24oanNvbikgewoJCQkJCV9mbkFqYXhVcGRhdGVEcmF3KCBzZXR0aW5ncywganNvbiApOwoJCQkJfQoJCQkpOwoJCgkJCXJldHVybiBmYWxzZTsKCQl9CgkJcmV0dXJuIHRydWU7Cgl9CgkKCQoJLyoqCgkgKiBCdWlsZCB1cCB0aGUgcGFyYW1ldGVycyBpbiBhbiBvYmplY3QgbmVlZGVkIGZvciBhIHNlcnZlci1zaWRlIHByb2Nlc3NpbmcKCSAqIHJlcXVlc3QuIE5vdGUgdGhhdCB0aGlzIGlzIGJhc2ljYWxseSBkb25lIHR3aWNlLCBpcyBkaWZmZXJlbnQgd2F5cyAtIGEgbW9kZXJuCgkgKiBtZXRob2Qgd2hpY2ggaXMgdXNlZCBieSBkZWZhdWx0IGluIERhdGFUYWJsZXMgMS4xMCB3aGljaCB1c2VzIG9iamVjdHMgYW5kCgkgKiBhcnJheXMsIG9yIHRoZSAxLjktIG1ldGhvZCB3aXRoIGlzIG5hbWUgLyB2YWx1ZSBwYWlycy4gMS45IG1ldGhvZCBpcyB1c2VkIGlmCgkgKiB0aGUgc0FqYXhTb3VyY2Ugb3B0aW9uIGlzIHVzZWQgaW4gdGhlIGluaXRpYWxpc2F0aW9uLCBvciB0aGUgbGVnYWN5QWpheAoJICogb3B0aW9uIGlzIHNldC4KCSAqICBAcGFyYW0ge29iamVjdH0gb1NldHRpbmdzIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkgKiAgQHJldHVybnMge2Jvb2x9IGJsb2NrIHRoZSB0YWJsZSBkcmF3aW5nIG9yIG5vdAoJICogIEBtZW1iZXJvZiBEYXRhVGFibGUjb0FwaQoJICovCglmdW5jdGlvbiBfZm5BamF4UGFyYW1ldGVycyggc2V0dGluZ3MgKQoJewoJCXZhcgoJCQljb2x1bW5zID0gc2V0dGluZ3MuYW9Db2x1bW5zLAoJCQljb2x1bW5Db3VudCA9IGNvbHVtbnMubGVuZ3RoLAoJCQlmZWF0dXJlcyA9IHNldHRpbmdzLm9GZWF0dXJlcywKCQkJcHJlU2VhcmNoID0gc2V0dGluZ3Mub1ByZXZpb3VzU2VhcmNoLAoJCQlwcmVDb2xTZWFyY2ggPSBzZXR0aW5ncy5hb1ByZVNlYXJjaENvbHMsCgkJCWksIGRhdGEgPSBbXSwgZGF0YVByb3AsIGNvbHVtbiwgY29sdW1uU2VhcmNoLAoJCQlzb3J0ID0gX2ZuU29ydEZsYXR0ZW4oIHNldHRpbmdzICksCgkJCWRpc3BsYXlTdGFydCA9IHNldHRpbmdzLl9pRGlzcGxheVN0YXJ0LAoJCQlkaXNwbGF5TGVuZ3RoID0gZmVhdHVyZXMuYlBhZ2luYXRlICE9PSBmYWxzZSA/CgkJCQlzZXR0aW5ncy5faURpc3BsYXlMZW5ndGggOgoJCQkJLTE7CgkKCQl2YXIgcGFyYW0gPSBmdW5jdGlvbiAoIG5hbWUsIHZhbHVlICkgewoJCQlkYXRhLnB1c2goIHsgJ25hbWUnOiBuYW1lLCAndmFsdWUnOiB2YWx1ZSB9ICk7CgkJfTsKCQoJCS8vIERhdGFUYWJsZXMgMS45LSBjb21wYXRpYmxlIG1ldGhvZAoJCXBhcmFtKCAnc0VjaG8nLCAgICAgICAgICBzZXR0aW5ncy5pRHJhdyApOwoJCXBhcmFtKCAnaUNvbHVtbnMnLCAgICAgICBjb2x1bW5Db3VudCApOwoJCXBhcmFtKCAnc0NvbHVtbnMnLCAgICAgICBfcGx1Y2soIGNvbHVtbnMsICdzTmFtZScgKS5qb2luKCcsJykgKTsKCQlwYXJhbSggJ2lEaXNwbGF5U3RhcnQnLCAgZGlzcGxheVN0YXJ0ICk7CgkJcGFyYW0oICdpRGlzcGxheUxlbmd0aCcsIGRpc3BsYXlMZW5ndGggKTsKCQoJCS8vIERhdGFUYWJsZXMgMS4xMCsgbWV0aG9kCgkJdmFyIGQgPSB7CgkJCWRyYXc6ICAgIHNldHRpbmdzLmlEcmF3LAoJCQljb2x1bW5zOiBbXSwKCQkJb3JkZXI6ICAgW10sCgkJCXN0YXJ0OiAgIGRpc3BsYXlTdGFydCwKCQkJbGVuZ3RoOiAgZGlzcGxheUxlbmd0aCwKCQkJc2VhcmNoOiAgewoJCQkJdmFsdWU6IHByZVNlYXJjaC5zU2VhcmNoLAoJCQkJcmVnZXg6IHByZVNlYXJjaC5iUmVnZXgKCQkJfQoJCX07CgkKCQlmb3IgKCBpPTAgOyBpPGNvbHVtbkNvdW50IDsgaSsrICkgewoJCQljb2x1bW4gPSBjb2x1bW5zW2ldOwoJCQljb2x1bW5TZWFyY2ggPSBwcmVDb2xTZWFyY2hbaV07CgkJCWRhdGFQcm9wID0gdHlwZW9mIGNvbHVtbi5tRGF0YT09ImZ1bmN0aW9uIiA/ICdmdW5jdGlvbicgOiBjb2x1bW4ubURhdGEgOwoJCgkJCWQuY29sdW1ucy5wdXNoKCB7CgkJCQlkYXRhOiAgICAgICBkYXRhUHJvcCwKCQkJCW5hbWU6ICAgICAgIGNvbHVtbi5zTmFtZSwKCQkJCXNlYXJjaGFibGU6IGNvbHVtbi5iU2VhcmNoYWJsZSwKCQkJCW9yZGVyYWJsZTogIGNvbHVtbi5iU29ydGFibGUsCgkJCQlzZWFyY2g6ICAgICB7CgkJCQkJdmFsdWU6IGNvbHVtblNlYXJjaC5zU2VhcmNoLAoJCQkJCXJlZ2V4OiBjb2x1bW5TZWFyY2guYlJlZ2V4CgkJCQl9CgkJCX0gKTsKCQoJCQlwYXJhbSggIm1EYXRhUHJvcF8iK2ksIGRhdGFQcm9wICk7CgkKCQkJaWYgKCBmZWF0dXJlcy5iRmlsdGVyICkgewoJCQkJcGFyYW0oICdzU2VhcmNoXycraSwgICAgIGNvbHVtblNlYXJjaC5zU2VhcmNoICk7CgkJCQlwYXJhbSggJ2JSZWdleF8nK2ksICAgICAgY29sdW1uU2VhcmNoLmJSZWdleCApOwoJCQkJcGFyYW0oICdiU2VhcmNoYWJsZV8nK2ksIGNvbHVtbi5iU2VhcmNoYWJsZSApOwoJCQl9CgkKCQkJaWYgKCBmZWF0dXJlcy5iU29ydCApIHsKCQkJCXBhcmFtKCAnYlNvcnRhYmxlXycraSwgY29sdW1uLmJTb3J0YWJsZSApOwoJCQl9CgkJfQoJCgkJaWYgKCBmZWF0dXJlcy5iRmlsdGVyICkgewoJCQlwYXJhbSggJ3NTZWFyY2gnLCBwcmVTZWFyY2guc1NlYXJjaCApOwoJCQlwYXJhbSggJ2JSZWdleCcsIHByZVNlYXJjaC5iUmVnZXggKTsKCQl9CgkKCQlpZiAoIGZlYXR1cmVzLmJTb3J0ICkgewoJCQkkLmVhY2goIHNvcnQsIGZ1bmN0aW9uICggaSwgdmFsICkgewoJCQkJZC5vcmRlci5wdXNoKCB7IGNvbHVtbjogdmFsLmNvbCwgZGlyOiB2YWwuZGlyIH0gKTsKCQoJCQkJcGFyYW0oICdpU29ydENvbF8nK2ksIHZhbC5jb2wgKTsKCQkJCXBhcmFtKCAnc1NvcnREaXJfJytpLCB2YWwuZGlyICk7CgkJCX0gKTsKCQoJCQlwYXJhbSggJ2lTb3J0aW5nQ29scycsIHNvcnQubGVuZ3RoICk7CgkJfQoJCgkJLy8gSWYgdGhlIGxlZ2FjeS5hamF4IHBhcmFtZXRlciBpcyBudWxsLCB0aGVuIHdlIGF1dG9tYXRpY2FsbHkgZGVjaWRlIHdoaWNoCgkJLy8gZm9ybSB0byB1c2UsIGJhc2VkIG9uIHNBamF4U291cmNlCgkJdmFyIGxlZ2FjeSA9IERhdGFUYWJsZS5leHQubGVnYWN5LmFqYXg7CgkJaWYgKCBsZWdhY3kgPT09IG51bGwgKSB7CgkJCXJldHVybiBzZXR0aW5ncy5zQWpheFNvdXJjZSA/IGRhdGEgOiBkOwoJCX0KCQoJCS8vIE90aGVyd2lzZSwgaWYgbGVnYWN5IGhhcyBiZWVuIHNwZWNpZmllZCB0aGVuIHdlIHVzZSB0aGF0IHRvIGRlY2lkZSBvbiB0aGUKCQkvLyBmb3JtCgkJcmV0dXJuIGxlZ2FjeSA/IGRhdGEgOiBkOwoJfQoJCgkKCS8qKgoJICogRGF0YSB0aGUgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgKG51a2luZyB0aGUgb2xkKSBhbmQgcmVkcmF3IHRoZSB0YWJsZQoJICogIEBwYXJhbSB7b2JqZWN0fSBvU2V0dGluZ3MgZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCSAqICBAcGFyYW0ge29iamVjdH0ganNvbiBqc29uIGRhdGEgcmV0dXJuIGZyb20gdGhlIHNlcnZlci4KCSAqICBAcGFyYW0ge3N0cmluZ30ganNvbi5zRWNobyBUcmFja2luZyBmbGFnIGZvciBEYXRhVGFibGVzIHRvIG1hdGNoIHJlcXVlc3RzCgkgKiAgQHBhcmFtIHtpbnR9IGpzb24uaVRvdGFsUmVjb3JkcyBOdW1iZXIgb2YgcmVjb3JkcyBpbiB0aGUgZGF0YSBzZXQsIG5vdCBhY2NvdW50aW5nIGZvciBmaWx0ZXJpbmcKCSAqICBAcGFyYW0ge2ludH0ganNvbi5pVG90YWxEaXNwbGF5UmVjb3JkcyBOdW1iZXIgb2YgcmVjb3JkcyBpbiB0aGUgZGF0YSBzZXQsIGFjY291bnRpbmcgZm9yIGZpbHRlcmluZwoJICogIEBwYXJhbSB7YXJyYXl9IGpzb24uYWFEYXRhIFRoZSBkYXRhIHRvIGRpc3BsYXkgb24gdGhpcyBwYWdlCgkgKiAgQHBhcmFtIHtzdHJpbmd9IFtqc29uLnNDb2x1bW5zXSBDb2x1bW4gb3JkZXJpbmcgKHNOYW1lLCBjb21tYSBzZXBhcmF0ZWQpCgkgKiAgQG1lbWJlcm9mIERhdGFUYWJsZSNvQXBpCgkgKi8KCWZ1bmN0aW9uIF9mbkFqYXhVcGRhdGVEcmF3ICggc2V0dGluZ3MsIGpzb24gKQoJewoJCS8vIHYxLjEwIHVzZXMgY2FtZWxDYXNlIHZhcmlhYmxlcywgd2hpbGUgMS45IHVzZXMgSHVuZ2FyaWFuIG5vdGF0aW9uLgoJCS8vIFN1cHBvcnQgYm90aAoJCXZhciBjb21wYXQgPSBmdW5jdGlvbiAoIG9sZCwgbW9kZXJuICkgewoJCQlyZXR1cm4ganNvbltvbGRdICE9PSB1bmRlZmluZWQgPyBqc29uW29sZF0gOiBqc29uW21vZGVybl07CgkJfTsKCQoJCXZhciBkYXRhID0gX2ZuQWpheERhdGFTcmMoIHNldHRpbmdzLCBqc29uICk7CgkJdmFyIGRyYXcgICAgICAgICAgICA9IGNvbXBhdCggJ3NFY2hvJywgICAgICAgICAgICAgICAgJ2RyYXcnICk7CgkJdmFyIHJlY29yZHNUb3RhbCAgICA9IGNvbXBhdCggJ2lUb3RhbFJlY29yZHMnLCAgICAgICAgJ3JlY29yZHNUb3RhbCcgKTsKCQl2YXIgcmVjb3Jkc0ZpbHRlcmVkID0gY29tcGF0KCAnaVRvdGFsRGlzcGxheVJlY29yZHMnLCAncmVjb3Jkc0ZpbHRlcmVkJyApOwoJCgkJaWYgKCBkcmF3ICkgewoJCQkvLyBQcm90ZWN0IGFnYWluc3Qgb3V0IG9mIHNlcXVlbmNlIHJldHVybnMKCQkJaWYgKCBkcmF3KjEgPCBzZXR0aW5ncy5pRHJhdyApIHsKCQkJCXJldHVybjsKCQkJfQoJCQlzZXR0aW5ncy5pRHJhdyA9IGRyYXcgKiAxOwoJCX0KCQoJCV9mbkNsZWFyVGFibGUoIHNldHRpbmdzICk7CgkJc2V0dGluZ3MuX2lSZWNvcmRzVG90YWwgICA9IHBhcnNlSW50KHJlY29yZHNUb3RhbCwgMTApOwoJCXNldHRpbmdzLl9pUmVjb3Jkc0Rpc3BsYXkgPSBwYXJzZUludChyZWNvcmRzRmlsdGVyZWQsIDEwKTsKCQoJCWZvciAoIHZhciBpPTAsIGllbj1kYXRhLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQlfZm5BZGREYXRhKCBzZXR0aW5ncywgZGF0YVtpXSApOwoJCX0KCQlzZXR0aW5ncy5haURpc3BsYXkgPSBzZXR0aW5ncy5haURpc3BsYXlNYXN0ZXIuc2xpY2UoKTsKCQoJCXNldHRpbmdzLmJBamF4RGF0YUdldCA9IGZhbHNlOwoJCV9mbkRyYXcoIHNldHRpbmdzICk7CgkKCQlpZiAoICEgc2V0dGluZ3MuX2JJbml0Q29tcGxldGUgKSB7CgkJCV9mbkluaXRDb21wbGV0ZSggc2V0dGluZ3MsIGpzb24gKTsKCQl9CgkKCQlzZXR0aW5ncy5iQWpheERhdGFHZXQgPSB0cnVlOwoJCV9mblByb2Nlc3NpbmdEaXNwbGF5KCBzZXR0aW5ncywgZmFsc2UgKTsKCX0KCQoJCgkvKioKCSAqIEdldCB0aGUgZGF0YSBmcm9tIHRoZSBKU09OIGRhdGEgc291cmNlIHRvIHVzZSBmb3IgZHJhd2luZyBhIHRhYmxlLiBVc2luZwoJICogYF9mbkdldE9iamVjdERhdGFGbmAgYWxsb3dzIHRoZSBkYXRhIHRvIGJlIHNvdXJjZWQgZnJvbSBhIHByb3BlcnR5IG9mIHRoZQoJICogc291cmNlIG9iamVjdCwgb3IgZnJvbSBhIHByb2Nlc3NpbmcgZnVuY3Rpb24uCgkgKiAgQHBhcmFtIHtvYmplY3R9IG9TZXR0aW5ncyBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJICogIEBwYXJhbSAge29iamVjdH0ganNvbiBEYXRhIHNvdXJjZSBvYmplY3QgLyBhcnJheSBmcm9tIHRoZSBzZXJ2ZXIKCSAqICBAcmV0dXJuIHthcnJheX0gQXJyYXkgb2YgZGF0YSB0byB1c2UKCSAqLwoJZnVuY3Rpb24gX2ZuQWpheERhdGFTcmMgKCBvU2V0dGluZ3MsIGpzb24gKQoJewoJCXZhciBkYXRhU3JjID0gJC5pc1BsYWluT2JqZWN0KCBvU2V0dGluZ3MuYWpheCApICYmIG9TZXR0aW5ncy5hamF4LmRhdGFTcmMgIT09IHVuZGVmaW5lZCA/CgkJCW9TZXR0aW5ncy5hamF4LmRhdGFTcmMgOgoJCQlvU2V0dGluZ3Muc0FqYXhEYXRhUHJvcDsgLy8gQ29tcGF0aWJpbGl0eSB3aXRoIDEuOS0uCgkKCQkvLyBDb21wYXRpYmlsaXR5IHdpdGggMS45LS4gSW4gb3JkZXIgdG8gcmVhZCBmcm9tIGFhRGF0YSwgY2hlY2sgaWYgdGhlCgkJLy8gZGVmYXVsdCBoYXMgYmVlbiBjaGFuZ2VkLCBpZiBub3QsIGNoZWNrIGZvciBhYURhdGEKCQlpZiAoIGRhdGFTcmMgPT09ICdkYXRhJyApIHsKCQkJcmV0dXJuIGpzb24uYWFEYXRhIHx8IGpzb25bZGF0YVNyY107CgkJfQoJCgkJcmV0dXJuIGRhdGFTcmMgIT09ICIiID8KCQkJX2ZuR2V0T2JqZWN0RGF0YUZuKCBkYXRhU3JjICkoIGpzb24gKSA6CgkJCWpzb247Cgl9CgkKCS8qKgoJICogR2VuZXJhdGUgdGhlIG5vZGUgcmVxdWlyZWQgZm9yIGZpbHRlcmluZyB0ZXh0CgkgKiAgQHJldHVybnMge25vZGV9IEZpbHRlciBjb250cm9sIGVsZW1lbnQKCSAqICBAcGFyYW0ge29iamVjdH0gb1NldHRpbmdzIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkgKiAgQG1lbWJlcm9mIERhdGFUYWJsZSNvQXBpCgkgKi8KCWZ1bmN0aW9uIF9mbkZlYXR1cmVIdG1sRmlsdGVyICggc2V0dGluZ3MgKQoJewoJCXZhciBjbGFzc2VzID0gc2V0dGluZ3Mub0NsYXNzZXM7CgkJdmFyIHRhYmxlSWQgPSBzZXR0aW5ncy5zVGFibGVJZDsKCQl2YXIgbGFuZ3VhZ2UgPSBzZXR0aW5ncy5vTGFuZ3VhZ2U7CgkJdmFyIHByZXZpb3VzU2VhcmNoID0gc2V0dGluZ3Mub1ByZXZpb3VzU2VhcmNoOwoJCXZhciBmZWF0dXJlcyA9IHNldHRpbmdzLmFhbkZlYXR1cmVzOwoJCXZhciBpbnB1dCA9ICc8aW5wdXQgdHlwZT0ic2VhcmNoIiBjbGFzcz0iJytjbGFzc2VzLnNGaWx0ZXJJbnB1dCsnIi8+JzsKCQoJCXZhciBzdHIgPSBsYW5ndWFnZS5zU2VhcmNoOwoJCXN0ciA9IHN0ci5tYXRjaCgvX0lOUFVUXy8pID8KCQkJc3RyLnJlcGxhY2UoJ19JTlBVVF8nLCBpbnB1dCkgOgoJCQlzdHIraW5wdXQ7CgkKCQl2YXIgZmlsdGVyID0gJCgnPGRpdi8+JywgewoJCQkJJ2lkJzogISBmZWF0dXJlcy5mID8gdGFibGVJZCsnX2ZpbHRlcicgOiBudWxsLAoJCQkJJ2NsYXNzJzogY2xhc3Nlcy5zRmlsdGVyCgkJCX0gKQoJCQkuYXBwZW5kKCAkKCc8bGFiZWwvPicgKS5hcHBlbmQoIHN0ciApICk7CgkKCQl2YXIgc2VhcmNoRm4gPSBmdW5jdGlvbigpIHsKCQkJLyogVXBkYXRlIGFsbCBvdGhlciBmaWx0ZXIgaW5wdXQgZWxlbWVudHMgZm9yIHRoZSBuZXcgZGlzcGxheSAqLwoJCQl2YXIgbiA9IGZlYXR1cmVzLmY7CgkJCXZhciB2YWwgPSAhdGhpcy52YWx1ZSA/ICIiIDogdGhpcy52YWx1ZTsgLy8gbWVudGFsIElFOCBmaXggOi0oCgkKCQkJLyogTm93IGRvIHRoZSBmaWx0ZXIgKi8KCQkJaWYgKCB2YWwgIT0gcHJldmlvdXNTZWFyY2guc1NlYXJjaCApIHsKCQkJCV9mbkZpbHRlckNvbXBsZXRlKCBzZXR0aW5ncywgewoJCQkJCSJzU2VhcmNoIjogdmFsLAoJCQkJCSJiUmVnZXgiOiBwcmV2aW91c1NlYXJjaC5iUmVnZXgsCgkJCQkJImJTbWFydCI6IHByZXZpb3VzU2VhcmNoLmJTbWFydCAsCgkJCQkJImJDYXNlSW5zZW5zaXRpdmUiOiBwcmV2aW91c1NlYXJjaC5iQ2FzZUluc2Vuc2l0aXZlCgkJCQl9ICk7CgkKCQkJCS8vIE5lZWQgdG8gcmVkcmF3LCB3aXRob3V0IHJlc29ydGluZwoJCQkJc2V0dGluZ3MuX2lEaXNwbGF5U3RhcnQgPSAwOwoJCQkJX2ZuRHJhdyggc2V0dGluZ3MgKTsKCQkJfQoJCX07CgkKCQl2YXIgc2VhcmNoRGVsYXkgPSBzZXR0aW5ncy5zZWFyY2hEZWxheSAhPT0gbnVsbCA/CgkJCXNldHRpbmdzLnNlYXJjaERlbGF5IDoKCQkJX2ZuRGF0YVNvdXJjZSggc2V0dGluZ3MgKSA9PT0gJ3NzcCcgPwoJCQkJNDAwIDoKCQkJCTA7CgkKCQl2YXIganFGaWx0ZXIgPSAkKCdpbnB1dCcsIGZpbHRlcikKCQkJLnZhbCggcHJldmlvdXNTZWFyY2guc1NlYXJjaCApCgkJCS5hdHRyKCAncGxhY2Vob2xkZXInLCBsYW5ndWFnZS5zU2VhcmNoUGxhY2Vob2xkZXIgKQoJCQkub24oCgkJCQkna2V5dXAuRFQgc2VhcmNoLkRUIGlucHV0LkRUIHBhc3RlLkRUIGN1dC5EVCcsCgkJCQlzZWFyY2hEZWxheSA/CgkJCQkJX2ZuVGhyb3R0bGUoIHNlYXJjaEZuLCBzZWFyY2hEZWxheSApIDoKCQkJCQlzZWFyY2hGbgoJCQkpCgkJCS5vbiggJ2tleXByZXNzLkRUJywgZnVuY3Rpb24oZSkgewoJCQkJLyogUHJldmVudCBmb3JtIHN1Ym1pc3Npb24gKi8KCQkJCWlmICggZS5rZXlDb2RlID09IDEzICkgewoJCQkJCXJldHVybiBmYWxzZTsKCQkJCX0KCQkJfSApCgkJCS5hdHRyKCdhcmlhLWNvbnRyb2xzJywgdGFibGVJZCk7CgkKCQkvLyBVcGRhdGUgdGhlIGlucHV0IGVsZW1lbnRzIHdoZW5ldmVyIHRoZSB0YWJsZSBpcyBmaWx0ZXJlZAoJCSQoc2V0dGluZ3MublRhYmxlKS5vbiggJ3NlYXJjaC5kdC5EVCcsIGZ1bmN0aW9uICggZXYsIHMgKSB7CgkJCWlmICggc2V0dGluZ3MgPT09IHMgKSB7CgkJCQkvLyBJRTkgdGhyb3dzIGFuICd1bmtub3duIGVycm9yJyBpZiBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGlzIHVzZWQKCQkJCS8vIGluc2lkZSBhbiBpZnJhbWUgb3IgZnJhbWUuLi4KCQkJCXRyeSB7CgkJCQkJaWYgKCBqcUZpbHRlclswXSAhPT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCApIHsKCQkJCQkJanFGaWx0ZXIudmFsKCBwcmV2aW91c1NlYXJjaC5zU2VhcmNoICk7CgkJCQkJfQoJCQkJfQoJCQkJY2F0Y2ggKCBlICkge30KCQkJfQoJCX0gKTsKCQoJCXJldHVybiBmaWx0ZXJbMF07Cgl9CgkKCQoJLyoqCgkgKiBGaWx0ZXIgdGhlIHRhYmxlIHVzaW5nIGJvdGggdGhlIGdsb2JhbCBmaWx0ZXIgYW5kIGNvbHVtbiBiYXNlZCBmaWx0ZXJpbmcKCSAqICBAcGFyYW0ge29iamVjdH0gb1NldHRpbmdzIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkgKiAgQHBhcmFtIHtvYmplY3R9IG9TZWFyY2ggc2VhcmNoIGluZm9ybWF0aW9uCgkgKiAgQHBhcmFtIHtpbnR9IFtpRm9yY2VdIGZvcmNlIGEgcmVzZWFyY2ggb2YgdGhlIG1hc3RlciBhcnJheSAoMSkgb3Igbm90ICh1bmRlZmluZWQgb3IgMCkKCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuRmlsdGVyQ29tcGxldGUgKCBvU2V0dGluZ3MsIG9JbnB1dCwgaUZvcmNlICkKCXsKCQl2YXIgb1ByZXZTZWFyY2ggPSBvU2V0dGluZ3Mub1ByZXZpb3VzU2VhcmNoOwoJCXZhciBhb1ByZXZTZWFyY2ggPSBvU2V0dGluZ3MuYW9QcmVTZWFyY2hDb2xzOwoJCXZhciBmblNhdmVGaWx0ZXIgPSBmdW5jdGlvbiAoIG9GaWx0ZXIgKSB7CgkJCS8qIFNhdmUgdGhlIGZpbHRlcmluZyB2YWx1ZXMgKi8KCQkJb1ByZXZTZWFyY2guc1NlYXJjaCA9IG9GaWx0ZXIuc1NlYXJjaDsKCQkJb1ByZXZTZWFyY2guYlJlZ2V4ID0gb0ZpbHRlci5iUmVnZXg7CgkJCW9QcmV2U2VhcmNoLmJTbWFydCA9IG9GaWx0ZXIuYlNtYXJ0OwoJCQlvUHJldlNlYXJjaC5iQ2FzZUluc2Vuc2l0aXZlID0gb0ZpbHRlci5iQ2FzZUluc2Vuc2l0aXZlOwoJCX07CgkJdmFyIGZuUmVnZXggPSBmdW5jdGlvbiAoIG8gKSB7CgkJCS8vIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggdGhlIGJFc2NhcGVSZWdleCBvcHRpb24KCQkJcmV0dXJuIG8uYkVzY2FwZVJlZ2V4ICE9PSB1bmRlZmluZWQgPyAhby5iRXNjYXBlUmVnZXggOiBvLmJSZWdleDsKCQl9OwoJCgkJLy8gUmVzb2x2ZSBhbnkgY29sdW1uIHR5cGVzIHRoYXQgYXJlIHVua25vd24gZHVlIHRvIGFkZGl0aW9uIG9yIGludmFsaWRhdGlvbgoJCS8vIEB0b2RvIEFzIHBlciBzb3J0IC0gY2FuIHRoaXMgYmUgbW92ZWQgaW50byBhbiBldmVudCBoYW5kbGVyPwoJCV9mbkNvbHVtblR5cGVzKCBvU2V0dGluZ3MgKTsKCQoJCS8qIEluIHNlcnZlci1zaWRlIHByb2Nlc3NpbmcgYWxsIGZpbHRlcmluZyBpcyBkb25lIGJ5IHRoZSBzZXJ2ZXIsIHNvIG5vIHBvaW50IGhhbmdpbmcgYXJvdW5kIGhlcmUgKi8KCQlpZiAoIF9mbkRhdGFTb3VyY2UoIG9TZXR0aW5ncyApICE9ICdzc3AnICkKCQl7CgkJCS8qIEdsb2JhbCBmaWx0ZXIgKi8KCQkJX2ZuRmlsdGVyKCBvU2V0dGluZ3MsIG9JbnB1dC5zU2VhcmNoLCBpRm9yY2UsIGZuUmVnZXgob0lucHV0KSwgb0lucHV0LmJTbWFydCwgb0lucHV0LmJDYXNlSW5zZW5zaXRpdmUgKTsKCQkJZm5TYXZlRmlsdGVyKCBvSW5wdXQgKTsKCQoJCQkvKiBOb3cgZG8gdGhlIGluZGl2aWR1YWwgY29sdW1uIGZpbHRlciAqLwoJCQlmb3IgKCB2YXIgaT0wIDsgaTxhb1ByZXZTZWFyY2gubGVuZ3RoIDsgaSsrICkKCQkJewoJCQkJX2ZuRmlsdGVyQ29sdW1uKCBvU2V0dGluZ3MsIGFvUHJldlNlYXJjaFtpXS5zU2VhcmNoLCBpLCBmblJlZ2V4KGFvUHJldlNlYXJjaFtpXSksCgkJCQkJYW9QcmV2U2VhcmNoW2ldLmJTbWFydCwgYW9QcmV2U2VhcmNoW2ldLmJDYXNlSW5zZW5zaXRpdmUgKTsKCQkJfQoJCgkJCS8qIEN1c3RvbSBmaWx0ZXJpbmcgKi8KCQkJX2ZuRmlsdGVyQ3VzdG9tKCBvU2V0dGluZ3MgKTsKCQl9CgkJZWxzZQoJCXsKCQkJZm5TYXZlRmlsdGVyKCBvSW5wdXQgKTsKCQl9CgkKCQkvKiBUZWxsIHRoZSBkcmF3IGZ1bmN0aW9uIHdlIGhhdmUgYmVlbiBmaWx0ZXJpbmcgKi8KCQlvU2V0dGluZ3MuYkZpbHRlcmVkID0gdHJ1ZTsKCQlfZm5DYWxsYmFja0ZpcmUoIG9TZXR0aW5ncywgbnVsbCwgJ3NlYXJjaCcsIFtvU2V0dGluZ3NdICk7Cgl9CgkKCQoJLyoqCgkgKiBBcHBseSBjdXN0b20gZmlsdGVyaW5nIGZ1bmN0aW9ucwoJICogIEBwYXJhbSB7b2JqZWN0fSBvU2V0dGluZ3MgZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuRmlsdGVyQ3VzdG9tKCBzZXR0aW5ncyApCgl7CgkJdmFyIGZpbHRlcnMgPSBEYXRhVGFibGUuZXh0LnNlYXJjaDsKCQl2YXIgZGlzcGxheVJvd3MgPSBzZXR0aW5ncy5haURpc3BsYXk7CgkJdmFyIHJvdywgcm93SWR4OwoJCgkJZm9yICggdmFyIGk9MCwgaWVuPWZpbHRlcnMubGVuZ3RoIDsgaTxpZW4gOyBpKysgKSB7CgkJCXZhciByb3dzID0gW107CgkKCQkJLy8gTG9vcCBvdmVyIGVhY2ggcm93IGFuZCBzZWUgaWYgaXQgc2hvdWxkIGJlIGluY2x1ZGVkCgkJCWZvciAoIHZhciBqPTAsIGplbj1kaXNwbGF5Um93cy5sZW5ndGggOyBqPGplbiA7IGorKyApIHsKCQkJCXJvd0lkeCA9IGRpc3BsYXlSb3dzWyBqIF07CgkJCQlyb3cgPSBzZXR0aW5ncy5hb0RhdGFbIHJvd0lkeCBdOwoJCgkJCQlpZiAoIGZpbHRlcnNbaV0oIHNldHRpbmdzLCByb3cuX2FGaWx0ZXJEYXRhLCByb3dJZHgsIHJvdy5fYURhdGEsIGogKSApIHsKCQkJCQlyb3dzLnB1c2goIHJvd0lkeCApOwoJCQkJfQoJCQl9CgkKCQkJLy8gU28gdGhlIGFycmF5IHJlZmVyZW5jZSBkb2Vzbid0IGJyZWFrIHNldCB0aGUgcmVzdWx0cyBpbnRvIHRoZQoJCQkvLyBleGlzdGluZyBhcnJheQoJCQlkaXNwbGF5Um93cy5sZW5ndGggPSAwOwoJCQkkLm1lcmdlKCBkaXNwbGF5Um93cywgcm93cyApOwoJCX0KCX0KCQoJCgkvKioKCSAqIEZpbHRlciB0aGUgdGFibGUgb24gYSBwZXItY29sdW1uIGJhc2lzCgkgKiAgQHBhcmFtIHtvYmplY3R9IG9TZXR0aW5ncyBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJICogIEBwYXJhbSB7c3RyaW5nfSBzSW5wdXQgc3RyaW5nIHRvIGZpbHRlciBvbgoJICogIEBwYXJhbSB7aW50fSBpQ29sdW1uIGNvbHVtbiB0byBmaWx0ZXIKCSAqICBAcGFyYW0ge2Jvb2x9IGJSZWdleCB0cmVhdCBzZWFyY2ggc3RyaW5nIGFzIGEgcmVndWxhciBleHByZXNzaW9uIG9yIG5vdAoJICogIEBwYXJhbSB7Ym9vbH0gYlNtYXJ0IHVzZSBzbWFydCBmaWx0ZXJpbmcgb3Igbm90CgkgKiAgQHBhcmFtIHtib29sfSBiQ2FzZUluc2Vuc2l0aXZlIERvIGNhc2UgaW5zZW5zdGl2ZSBtYXRjaGluZyBvciBub3QKCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuRmlsdGVyQ29sdW1uICggc2V0dGluZ3MsIHNlYXJjaFN0ciwgY29sSWR4LCByZWdleCwgc21hcnQsIGNhc2VJbnNlbnNpdGl2ZSApCgl7CgkJaWYgKCBzZWFyY2hTdHIgPT09ICcnICkgewoJCQlyZXR1cm47CgkJfQoJCgkJdmFyIGRhdGE7CgkJdmFyIG91dCA9IFtdOwoJCXZhciBkaXNwbGF5ID0gc2V0dGluZ3MuYWlEaXNwbGF5OwoJCXZhciBycFNlYXJjaCA9IF9mbkZpbHRlckNyZWF0ZVNlYXJjaCggc2VhcmNoU3RyLCByZWdleCwgc21hcnQsIGNhc2VJbnNlbnNpdGl2ZSApOwoJCgkJZg=="
},
{
"key": "jquery.dataTables.js?4?2?1",
"type": "binary",
"value": "base64:b3IgKCB2YXIgaT0wIDsgaTxkaXNwbGF5Lmxlbmd0aCA7IGkrKyApIHsKCQkJZGF0YSA9IHNldHRpbmdzLmFvRGF0YVsgZGlzcGxheVtpXSBdLl9hRmlsdGVyRGF0YVsgY29sSWR4IF07CgkKCQkJaWYgKCBycFNlYXJjaC50ZXN0KCBkYXRhICkgKSB7CgkJCQlvdXQucHVzaCggZGlzcGxheVtpXSApOwoJCQl9CgkJfQoJCgkJc2V0dGluZ3MuYWlEaXNwbGF5ID0gb3V0OwoJfQoJCgkKCS8qKgoJICogRmlsdGVyIHRoZSBkYXRhIHRhYmxlIGJhc2VkIG9uIHVzZXIgaW5wdXQgYW5kIGRyYXcgdGhlIHRhYmxlCgkgKiAgQHBhcmFtIHtvYmplY3R9IHNldHRpbmdzIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkgKiAgQHBhcmFtIHtzdHJpbmd9IGlucHV0IHN0cmluZyB0byBmaWx0ZXIgb24KCSAqICBAcGFyYW0ge2ludH0gZm9yY2Ugb3B0aW9uYWwgLSBmb3JjZSBhIHJlc2VhcmNoIG9mIHRoZSBtYXN0ZXIgYXJyYXkgKDEpIG9yIG5vdCAodW5kZWZpbmVkIG9yIDApCgkgKiAgQHBhcmFtIHtib29sfSByZWdleCB0cmVhdCBhcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBvciBub3QKCSAqICBAcGFyYW0ge2Jvb2x9IHNtYXJ0IHBlcmZvcm0gc21hcnQgZmlsdGVyaW5nIG9yIG5vdAoJICogIEBwYXJhbSB7Ym9vbH0gY2FzZUluc2Vuc2l0aXZlIERvIGNhc2UgaW5zZW5zdGl2ZSBtYXRjaGluZyBvciBub3QKCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuRmlsdGVyKCBzZXR0aW5ncywgaW5wdXQsIGZvcmNlLCByZWdleCwgc21hcnQsIGNhc2VJbnNlbnNpdGl2ZSApCgl7CgkJdmFyIHJwU2VhcmNoID0gX2ZuRmlsdGVyQ3JlYXRlU2VhcmNoKCBpbnB1dCwgcmVnZXgsIHNtYXJ0LCBjYXNlSW5zZW5zaXRpdmUgKTsKCQl2YXIgcHJldlNlYXJjaCA9IHNldHRpbmdzLm9QcmV2aW91c1NlYXJjaC5zU2VhcmNoOwoJCXZhciBkaXNwbGF5TWFzdGVyID0gc2V0dGluZ3MuYWlEaXNwbGF5TWFzdGVyOwoJCXZhciBkaXNwbGF5LCBpbnZhbGlkYXRlZCwgaTsKCQl2YXIgZmlsdGVyZWQgPSBbXTsKCQoJCS8vIE5lZWQgdG8gdGFrZSBhY2NvdW50IG9mIGN1c3RvbSBmaWx0ZXJpbmcgZnVuY3Rpb25zIC0gYWx3YXlzIGZpbHRlcgoJCWlmICggRGF0YVRhYmxlLmV4dC5zZWFyY2gubGVuZ3RoICE9PSAwICkgewoJCQlmb3JjZSA9IHRydWU7CgkJfQoJCgkJLy8gQ2hlY2sgaWYgYW55IG9mIHRoZSByb3dzIHdlcmUgaW52YWxpZGF0ZWQKCQlpbnZhbGlkYXRlZCA9IF9mbkZpbHRlckRhdGEoIHNldHRpbmdzICk7CgkKCQkvLyBJZiB0aGUgaW5wdXQgaXMgYmxhbmsgLSB3ZSBqdXN0IHdhbnQgdGhlIGZ1bGwgZGF0YSBzZXQKCQlpZiAoIGlucHV0Lmxlbmd0aCA8PSAwICkgewoJCQlzZXR0aW5ncy5haURpc3BsYXkgPSBkaXNwbGF5TWFzdGVyLnNsaWNlKCk7CgkJfQoJCWVsc2UgewoJCQkvLyBOZXcgc2VhcmNoIC0gc3RhcnQgZnJvbSB0aGUgbWFzdGVyIGFycmF5CgkJCWlmICggaW52YWxpZGF0ZWQgfHwKCQkJCSBmb3JjZSB8fAoJCQkJIHByZXZTZWFyY2gubGVuZ3RoID4gaW5wdXQubGVuZ3RoIHx8CgkJCQkgaW5wdXQuaW5kZXhPZihwcmV2U2VhcmNoKSAhPT0gMCB8fAoJCQkJIHNldHRpbmdzLmJTb3J0ZWQgLy8gT24gcmVzb3J0LCB0aGUgZGlzcGxheSBtYXN0ZXIgbmVlZHMgdG8gYmUKCQkJCSAgICAgICAgICAgICAgICAgIC8vIHJlLWZpbHRlcmVkIHNpbmNlIGluZGV4ZXMgd2lsbCBoYXZlIGNoYW5nZWQKCQkJKSB7CgkJCQlzZXR0aW5ncy5haURpc3BsYXkgPSBkaXNwbGF5TWFzdGVyLnNsaWNlKCk7CgkJCX0KCQoJCQkvLyBTZWFyY2ggdGhlIGRpc3BsYXkgYXJyYXkKCQkJZGlzcGxheSA9IHNldHRpbmdzLmFpRGlzcGxheTsKCQoJCQlmb3IgKCBpPTAgOyBpPGRpc3BsYXkubGVuZ3RoIDsgaSsrICkgewoJCQkJaWYgKCBycFNlYXJjaC50ZXN0KCBzZXR0aW5ncy5hb0RhdGFbIGRpc3BsYXlbaV0gXS5fc0ZpbHRlclJvdyApICkgewoJCQkJCWZpbHRlcmVkLnB1c2goIGRpc3BsYXlbaV0gKTsKCQkJCX0KCQkJfQoJCgkJCXNldHRpbmdzLmFpRGlzcGxheSA9IGZpbHRlcmVkOwoJCX0KCX0KCQoJCgkvKioKCSAqIEJ1aWxkIGEgcmVndWxhciBleHByZXNzaW9uIG9iamVjdCBzdWl0YWJsZSBmb3Igc2VhcmNoaW5nIGEgdGFibGUKCSAqICBAcGFyYW0ge3N0cmluZ30gc1NlYXJjaCBzdHJpbmcgdG8gc2VhcmNoIGZvcgoJICogIEBwYXJhbSB7Ym9vbH0gYlJlZ2V4IHRyZWF0IGFzIGEgcmVndWxhciBleHByZXNzaW9uIG9yIG5vdAoJICogIEBwYXJhbSB7Ym9vbH0gYlNtYXJ0IHBlcmZvcm0gc21hcnQgZmlsdGVyaW5nIG9yIG5vdAoJICogIEBwYXJhbSB7Ym9vbH0gYkNhc2VJbnNlbnNpdGl2ZSBEbyBjYXNlIGluc2Vuc2l0aXZlIG1hdGNoaW5nIG9yIG5vdAoJICogIEByZXR1cm5zIHtSZWdFeHB9IGNvbnN0cnVjdGVkIG9iamVjdAoJICogIEBtZW1iZXJvZiBEYXRhVGFibGUjb0FwaQoJICovCglmdW5jdGlvbiBfZm5GaWx0ZXJDcmVhdGVTZWFyY2goIHNlYXJjaCwgcmVnZXgsIHNtYXJ0LCBjYXNlSW5zZW5zaXRpdmUgKQoJewoJCXNlYXJjaCA9IHJlZ2V4ID8KCQkJc2VhcmNoIDoKCQkJX2ZuRXNjYXBlUmVnZXgoIHNlYXJjaCApOwoJCQoJCWlmICggc21hcnQgKSB7CgkJCS8qIEZvciBzbWFydCBmaWx0ZXJpbmcgd2Ugd2FudCB0byBhbGxvdyB0aGUgc2VhcmNoIHRvIHdvcmsgcmVnYXJkbGVzcyBvZgoJCQkgKiB3b3JkIG9yZGVyLiBXZSBhbHNvIHdhbnQgZG91YmxlIHF1b3RlZCB0ZXh0IHRvIGJlIHByZXNlcnZlZCwgc28gd29yZAoJCQkgKiBvcmRlciBpcyBpbXBvcnRhbnQgLSBhIGxhIGdvb2dsZS4gU28gdGhpcyBpcyB3aGF0IHdlIHdhbnQgdG8KCQkJICogZ2VuZXJhdGU6CgkJCSAqIAoJCQkgKiBeKD89Lio/XGJvbmVcYikoPz0uKj9cYnR3byB0aHJlZVxiKSg/PS4qP1xiZm91clxiKS4qJAoJCQkgKi8KCQkJdmFyIGEgPSAkLm1hcCggc2VhcmNoLm1hdGNoKCAvIlteIl0rInxbXiBdKy9nICkgfHwgWycnXSwgZnVuY3Rpb24gKCB3b3JkICkgewoJCQkJaWYgKCB3b3JkLmNoYXJBdCgwKSA9PT0gJyInICkgewoJCQkJCXZhciBtID0gd29yZC5tYXRjaCggL14iKC4qKSIkLyApOwoJCQkJCXdvcmQgPSBtID8gbVsxXSA6IHdvcmQ7CgkJCQl9CgkKCQkJCXJldHVybiB3b3JkLnJlcGxhY2UoJyInLCAnJyk7CgkJCX0gKTsKCQoJCQlzZWFyY2ggPSAnXig/PS4qPycrYS5qb2luKCAnKSg/PS4qPycgKSsnKS4qJCc7CgkJfQoJCgkJcmV0dXJuIG5ldyBSZWdFeHAoIHNlYXJjaCwgY2FzZUluc2Vuc2l0aXZlID8gJ2knIDogJycgKTsKCX0KCQoJCgkvKioKCSAqIEVzY2FwZSBhIHN0cmluZyBzdWNoIHRoYXQgaXQgY2FuIGJlIHVzZWQgaW4gYSByZWd1bGFyIGV4cHJlc3Npb24KCSAqICBAcGFyYW0ge3N0cmluZ30gc1ZhbCBzdHJpbmcgdG8gZXNjYXBlCgkgKiAgQHJldHVybnMge3N0cmluZ30gZXNjYXBlZCBzdHJpbmcKCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJdmFyIF9mbkVzY2FwZVJlZ2V4ID0gRGF0YVRhYmxlLnV0aWwuZXNjYXBlUmVnZXg7CgkKCXZhciBfX2ZpbHRlcl9kaXYgPSAkKCc8ZGl2PicpWzBdOwoJdmFyIF9fZmlsdGVyX2Rpdl90ZXh0Q29udGVudCA9IF9fZmlsdGVyX2Rpdi50ZXh0Q29udGVudCAhPT0gdW5kZWZpbmVkOwoJCgkvLyBVcGRhdGUgdGhlIGZpbHRlcmluZyBkYXRhIGZvciBlYWNoIHJvdyBpZiBuZWVkZWQgKGJ5IGludmFsaWRhdGlvbiBvciBmaXJzdCBydW4pCglmdW5jdGlvbiBfZm5GaWx0ZXJEYXRhICggc2V0dGluZ3MgKQoJewoJCXZhciBjb2x1bW5zID0gc2V0dGluZ3MuYW9Db2x1bW5zOwoJCXZhciBjb2x1bW47CgkJdmFyIGksIGosIGllbiwgamVuLCBmaWx0ZXJEYXRhLCBjZWxsRGF0YSwgcm93OwoJCXZhciBmb21hdHRlcnMgPSBEYXRhVGFibGUuZXh0LnR5cGUuc2VhcmNoOwoJCXZhciB3YXNJbnZhbGlkYXRlZCA9IGZhbHNlOwoJCgkJZm9yICggaT0wLCBpZW49c2V0dGluZ3MuYW9EYXRhLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQlyb3cgPSBzZXR0aW5ncy5hb0RhdGFbaV07CgkKCQkJaWYgKCAhIHJvdy5fYUZpbHRlckRhdGEgKSB7CgkJCQlmaWx0ZXJEYXRhID0gW107CgkKCQkJCWZvciAoIGo9MCwgamVuPWNvbHVtbnMubGVuZ3RoIDsgajxqZW4gOyBqKysgKSB7CgkJCQkJY29sdW1uID0gY29sdW1uc1tqXTsKCQoJCQkJCWlmICggY29sdW1uLmJTZWFyY2hhYmxlICkgewoJCQkJCQljZWxsRGF0YSA9IF9mbkdldENlbGxEYXRhKCBzZXR0aW5ncywgaSwgaiwgJ2ZpbHRlcicgKTsKCQoJCQkJCQlpZiAoIGZvbWF0dGVyc1sgY29sdW1uLnNUeXBlIF0gKSB7CgkJCQkJCQljZWxsRGF0YSA9IGZvbWF0dGVyc1sgY29sdW1uLnNUeXBlIF0oIGNlbGxEYXRhICk7CgkJCQkJCX0KCQoJCQkJCQkvLyBTZWFyY2ggaW4gRGF0YVRhYmxlcyAxLjEwIGlzIHN0cmluZyBiYXNlZC4gSW4gMS4xMSB0aGlzCgkJCQkJCS8vIHNob3VsZCBiZSBhbHRlcmVkIHRvIGFsc28gYWxsb3cgc3RyaWN0IHR5cGUgY2hlY2tpbmcuCgkJCQkJCWlmICggY2VsbERhdGEgPT09IG51bGwgKSB7CgkJCQkJCQljZWxsRGF0YSA9ICcnOwoJCQkJCQl9CgkKCQkJCQkJaWYgKCB0eXBlb2YgY2VsbERhdGEgIT09ICdzdHJpbmcnICYmIGNlbGxEYXRhLnRvU3RyaW5nICkgewoJCQkJCQkJY2VsbERhdGEgPSBjZWxsRGF0YS50b1N0cmluZygpOwoJCQkJCQl9CgkJCQkJfQoJCQkJCWVsc2UgewoJCQkJCQljZWxsRGF0YSA9ICcnOwoJCQkJCX0KCQoJCQkJCS8vIElmIGl0IGxvb2tzIGxpa2UgdGhlcmUgaXMgYW4gSFRNTCBlbnRpdHkgaW4gdGhlIHN0cmluZywKCQkJCQkvLyBhdHRlbXB0IHRvIGRlY29kZSBpdCBzbyBzb3J0aW5nIHdvcmtzIGFzIGV4cGVjdGVkLiBOb3RlIHRoYXQKCQkJCQkvLyB3ZSBjb3VsZCB1c2UgYSBzaW5nbGUgbGluZSBvZiBqUXVlcnkgdG8gZG8gdGhpcywgYnV0IHRoZSBET00KCQkJCQkvLyBtZXRob2QgdXNlZCBoZXJlIGlzIG11Y2ggZmFzdGVyIGh0dHA6Ly9qc3BlcmYuY29tL2h0bWwtZGVjb2RlCgkJCQkJaWYgKCBjZWxsRGF0YS5pbmRleE9mICYmIGNlbGxEYXRhLmluZGV4T2YoJyYnKSAhPT0gLTEgKSB7CgkJCQkJCV9fZmlsdGVyX2Rpdi5pbm5lckhUTUwgPSBjZWxsRGF0YTsKCQkJCQkJY2VsbERhdGEgPSBfX2ZpbHRlcl9kaXZfdGV4dENvbnRlbnQgPwoJCQkJCQkJX19maWx0ZXJfZGl2LnRleHRDb250ZW50IDoKCQkJCQkJCV9fZmlsdGVyX2Rpdi5pbm5lclRleHQ7CgkJCQkJfQoJCgkJCQkJaWYgKCBjZWxsRGF0YS5yZXBsYWNlICkgewoJCQkJCQljZWxsRGF0YSA9IGNlbGxEYXRhLnJlcGxhY2UoL1tcclxuXS9nLCAnJyk7CgkJCQkJfQoJCgkJCQkJZmlsdGVyRGF0YS5wdXNoKCBjZWxsRGF0YSApOwoJCQkJfQoJCgkJCQlyb3cuX2FGaWx0ZXJEYXRhID0gZmlsdGVyRGF0YTsKCQkJCXJvdy5fc0ZpbHRlclJvdyA9IGZpbHRlckRhdGEuam9pbignICAnKTsKCQkJCXdhc0ludmFsaWRhdGVkID0gdHJ1ZTsKCQkJfQoJCX0KCQoJCXJldHVybiB3YXNJbnZhbGlkYXRlZDsKCX0KCQoJCgkvKioKCSAqIENvbnZlcnQgZnJvbSB0aGUgaW50ZXJuYWwgSHVuZ2FyaWFuIG5vdGF0aW9uIHRvIGNhbWVsQ2FzZSBmb3IgZXh0ZXJuYWwKCSAqIGludGVyYWN0aW9uCgkgKiAgQHBhcmFtIHtvYmplY3R9IG9iaiBPYmplY3QgdG8gY29udmVydAoJICogIEByZXR1cm5zIHtvYmplY3R9IEludmVydGVkIG9iamVjdAoJICogIEBtZW1iZXJvZiBEYXRhVGFibGUjb0FwaQoJICovCglmdW5jdGlvbiBfZm5TZWFyY2hUb0NhbWVsICggb2JqICkKCXsKCQlyZXR1cm4gewoJCQlzZWFyY2g6ICAgICAgICAgIG9iai5zU2VhcmNoLAoJCQlzbWFydDogICAgICAgICAgIG9iai5iU21hcnQsCgkJCXJlZ2V4OiAgICAgICAgICAgb2JqLmJSZWdleCwKCQkJY2FzZUluc2Vuc2l0aXZlOiBvYmouYkNhc2VJbnNlbnNpdGl2ZQoJCX07Cgl9CgkKCQoJCgkvKioKCSAqIENvbnZlcnQgZnJvbSBjYW1lbENhc2Ugbm90YXRpb24gdG8gdGhlIGludGVybmFsIEh1bmdhcmlhbi4gV2UgY291bGQgdXNlIHRoZQoJICogSHVuZ2FyaWFuIGNvbnZlcnQgZnVuY3Rpb24gaGVyZSwgYnV0IHRoaXMgaXMgY2xlYW5lcgoJICogIEBwYXJhbSB7b2JqZWN0fSBvYmogT2JqZWN0IHRvIGNvbnZlcnQKCSAqICBAcmV0dXJucyB7b2JqZWN0fSBJbnZlcnRlZCBvYmplY3QKCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuU2VhcmNoVG9IdW5nICggb2JqICkKCXsKCQlyZXR1cm4gewoJCQlzU2VhcmNoOiAgICAgICAgICBvYmouc2VhcmNoLAoJCQliU21hcnQ6ICAgICAgICAgICBvYmouc21hcnQsCgkJCWJSZWdleDogICAgICAgICAgIG9iai5yZWdleCwKCQkJYkNhc2VJbnNlbnNpdGl2ZTogb2JqLmNhc2VJbnNlbnNpdGl2ZQoJCX07Cgl9CgkKCS8qKgoJICogR2VuZXJhdGUgdGhlIG5vZGUgcmVxdWlyZWQgZm9yIHRoZSBpbmZvIGRpc3BsYXkKCSAqICBAcGFyYW0ge29iamVjdH0gb1NldHRpbmdzIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkgKiAgQHJldHVybnMge25vZGV9IEluZm9ybWF0aW9uIGVsZW1lbnQKCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuRmVhdHVyZUh0bWxJbmZvICggc2V0dGluZ3MgKQoJewoJCXZhcgoJCQl0aWQgPSBzZXR0aW5ncy5zVGFibGVJZCwKCQkJbm9kZXMgPSBzZXR0aW5ncy5hYW5GZWF0dXJlcy5pLAoJCQluID0gJCgnPGRpdi8+JywgewoJCQkJJ2NsYXNzJzogc2V0dGluZ3Mub0NsYXNzZXMuc0luZm8sCgkJCQknaWQnOiAhIG5vZGVzID8gdGlkKydfaW5mbycgOiBudWxsCgkJCX0gKTsKCQoJCWlmICggISBub2RlcyApIHsKCQkJLy8gVXBkYXRlIGRpc3BsYXkgb24gZWFjaCBkcmF3CgkJCXNldHRpbmdzLmFvRHJhd0NhbGxiYWNrLnB1c2goIHsKCQkJCSJmbiI6IF9mblVwZGF0ZUluZm8sCgkJCQkic05hbWUiOiAiaW5mb3JtYXRpb24iCgkJCX0gKTsKCQoJCQluCgkJCQkuYXR0ciggJ3JvbGUnLCAnc3RhdHVzJyApCgkJCQkuYXR0ciggJ2FyaWEtbGl2ZScsICdwb2xpdGUnICk7CgkKCQkJLy8gVGFibGUgaXMgZGVzY3JpYmVkIGJ5IG91ciBpbmZvIGRpdgoJCQkkKHNldHRpbmdzLm5UYWJsZSkuYXR0ciggJ2FyaWEtZGVzY3JpYmVkYnknLCB0aWQrJ19pbmZvJyApOwoJCX0KCQoJCXJldHVybiBuWzBdOwoJfQoJCgkKCS8qKgoJICogVXBkYXRlIHRoZSBpbmZvcm1hdGlvbiBlbGVtZW50cyBpbiB0aGUgZGlzcGxheQoJICogIEBwYXJhbSB7b2JqZWN0fSBzZXR0aW5ncyBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJICogIEBtZW1iZXJvZiBEYXRhVGFibGUjb0FwaQoJICovCglmdW5jdGlvbiBfZm5VcGRhdGVJbmZvICggc2V0dGluZ3MgKQoJewoJCS8qIFNob3cgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRhYmxlICovCgkJdmFyIG5vZGVzID0gc2V0dGluZ3MuYWFuRmVhdHVyZXMuaTsKCQlpZiAoIG5vZGVzLmxlbmd0aCA9PT0gMCApIHsKCQkJcmV0dXJuOwoJCX0KCQoJCXZhcgoJCQlsYW5nICA9IHNldHRpbmdzLm9MYW5ndWFnZSwKCQkJc3RhcnQgPSBzZXR0aW5ncy5faURpc3BsYXlTdGFydCsxLAoJCQllbmQgICA9IHNldHRpbmdzLmZuRGlzcGxheUVuZCgpLAoJCQltYXggICA9IHNldHRpbmdzLmZuUmVjb3Jkc1RvdGFsKCksCgkJCXRvdGFsID0gc2V0dGluZ3MuZm5SZWNvcmRzRGlzcGxheSgpLAoJCQlvdXQgICA9IHRvdGFsID8KCQkJCWxhbmcuc0luZm8gOgoJCQkJbGFuZy5zSW5mb0VtcHR5OwoJCgkJaWYgKCB0b3RhbCAhPT0gbWF4ICkgewoJCQkvKiBSZWNvcmQgc2V0IGFmdGVyIGZpbHRlcmluZyAqLwoJCQlvdXQgKz0gJyAnICsgbGFuZy5zSW5mb0ZpbHRlcmVkOwoJCX0KCQoJCS8vIENvbnZlcnQgdGhlIG1hY3JvcwoJCW91dCArPSBsYW5nLnNJbmZvUG9zdEZpeDsKCQlvdXQgPSBfZm5JbmZvTWFjcm9zKCBzZXR0aW5ncywgb3V0ICk7CgkKCQl2YXIgY2FsbGJhY2sgPSBsYW5nLmZuSW5mb0NhbGxiYWNrOwoJCWlmICggY2FsbGJhY2sgIT09IG51bGwgKSB7CgkJCW91dCA9IGNhbGxiYWNrLmNhbGwoIHNldHRpbmdzLm9JbnN0YW5jZSwKCQkJCXNldHRpbmdzLCBzdGFydCwgZW5kLCBtYXgsIHRvdGFsLCBvdXQKCQkJKTsKCQl9CgkKCQkkKG5vZGVzKS5odG1sKCBvdXQgKTsKCX0KCQoJCglmdW5jdGlvbiBfZm5JbmZvTWFjcm9zICggc2V0dGluZ3MsIHN0ciApCgl7CgkJLy8gV2hlbiBpbmZpbml0ZSBzY3JvbGxpbmcsIHdlIGFyZSBhbHdheXMgc3RhcnRpbmcgYXQgMS4gX2lEaXNwbGF5U3RhcnQgaXMgdXNlZCBvbmx5CgkJLy8gaW50ZXJuYWxseQoJCXZhcgoJCQlmb3JtYXR0ZXIgID0gc2V0dGluZ3MuZm5Gb3JtYXROdW1iZXIsCgkJCXN0YXJ0ICAgICAgPSBzZXR0aW5ncy5faURpc3BsYXlTdGFydCsxLAoJCQlsZW4gICAgICAgID0gc2V0dGluZ3MuX2lEaXNwbGF5TGVuZ3RoLAoJCQl2aXMgICAgICAgID0gc2V0dGluZ3MuZm5SZWNvcmRzRGlzcGxheSgpLAoJCQlhbGwgICAgICAgID0gbGVuID09PSAtMTsKCQoJCXJldHVybiBzdHIuCgkJCXJlcGxhY2UoL19TVEFSVF8vZywgZm9ybWF0dGVyLmNhbGwoIHNldHRpbmdzLCBzdGFydCApICkuCgkJCXJlcGxhY2UoL19FTkRfL2csICAgZm9ybWF0dGVyLmNhbGwoIHNldHRpbmdzLCBzZXR0aW5ncy5mbkRpc3BsYXlFbmQoKSApICkuCgkJCXJlcGxhY2UoL19NQVhfL2csICAgZm9ybWF0dGVyLmNhbGwoIHNldHRpbmdzLCBzZXR0aW5ncy5mblJlY29yZHNUb3RhbCgpICkgKS4KCQkJcmVwbGFjZSgvX1RPVEFMXy9nLCBmb3JtYXR0ZXIuY2FsbCggc2V0dGluZ3MsIHZpcyApICkuCgkJCXJlcGxhY2UoL19QQUdFXy9nLCAgZm9ybWF0dGVyLmNhbGwoIHNldHRpbmdzLCBhbGwgPyAxIDogTWF0aC5jZWlsKCBzdGFydCAvIGxlbiApICkgKS4KCQkJcmVwbGFjZSgvX1BBR0VTXy9nLCBmb3JtYXR0ZXIuY2FsbCggc2V0dGluZ3MsIGFsbCA/IDEgOiBNYXRoLmNlaWwoIHZpcyAvIGxlbiApICkgKTsKCX0KCQoJCgkKCS8qKgoJICogRHJhdyB0aGUgdGFibGUgZm9yIHRoZSBmaXJzdCB0aW1lLCBhZGRpbmcgYWxsIHJlcXVpcmVkIGZlYXR1cmVzCgkgKiAgQHBhcmFtIHtvYmplY3R9IHNldHRpbmdzIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkgKiAgQG1lbWJlcm9mIERhdGFUYWJsZSNvQXBpCgkgKi8KCWZ1bmN0aW9uIF9mbkluaXRpYWxpc2UgKCBzZXR0aW5ncyApCgl7CgkJdmFyIGksIGlMZW4sIGlBamF4U3RhcnQ9c2V0dGluZ3MuaUluaXREaXNwbGF5U3RhcnQ7CgkJdmFyIGNvbHVtbnMgPSBzZXR0aW5ncy5hb0NvbHVtbnMsIGNvbHVtbjsKCQl2YXIgZmVhdHVyZXMgPSBzZXR0aW5ncy5vRmVhdHVyZXM7CgkJdmFyIGRlZmVyTG9hZGluZyA9IHNldHRpbmdzLmJEZWZlckxvYWRpbmc7IC8vIHZhbHVlIG1vZGlmaWVkIGJ5IHRoZSBkcmF3CgkKCQkvKiBFbnN1cmUgdGhhdCB0aGUgdGFibGUgZGF0YSBpcyBmdWxseSBpbml0aWFsaXNlZCAqLwoJCWlmICggISBzZXR0aW5ncy5iSW5pdGlhbGlzZWQgKSB7CgkJCXNldFRpbWVvdXQoIGZ1bmN0aW9uKCl7IF9mbkluaXRpYWxpc2UoIHNldHRpbmdzICk7IH0sIDIwMCApOwoJCQlyZXR1cm47CgkJfQoJCgkJLyogU2hvdyB0aGUgZGlzcGxheSBIVE1MIG9wdGlvbnMgKi8KCQlfZm5BZGRPcHRpb25zSHRtbCggc2V0dGluZ3MgKTsKCQoJCS8qIEJ1aWxkIGFuZCBkcmF3IHRoZSBoZWFkZXIgLyBmb290ZXIgZm9yIHRoZSB0YWJsZSAqLwoJCV9mbkJ1aWxkSGVhZCggc2V0dGluZ3MgKTsKCQlfZm5EcmF3SGVhZCggc2V0dGluZ3MsIHNldHRpbmdzLmFvSGVhZGVyICk7CgkJX2ZuRHJhd0hlYWQoIHNldHRpbmdzLCBzZXR0aW5ncy5hb0Zvb3RlciApOwoJCgkJLyogT2theSB0byBzaG93IHRoYXQgc29tZXRoaW5nIGlzIGdvaW5nIG9uIG5vdyAqLwoJCV9mblByb2Nlc3NpbmdEaXNwbGF5KCBzZXR0aW5ncywgdHJ1ZSApOwoJCgkJLyogQ2FsY3VsYXRlIHNpemVzIGZvciBjb2x1bW5zICovCgkJaWYgKCBmZWF0dXJlcy5iQXV0b1dpZHRoICkgewoJCQlfZm5DYWxjdWxhdGVDb2x1bW5XaWR0aHMoIHNldHRpbmdzICk7CgkJfQoJCgkJZm9yICggaT0wLCBpTGVuPWNvbHVtbnMubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkgewoJCQljb2x1bW4gPSBjb2x1bW5zW2ldOwoJCgkJCWlmICggY29sdW1uLnNXaWR0aCApIHsKCQkJCWNvbHVtbi5uVGguc3R5bGUud2lkdGggPSBfZm5TdHJpbmdUb0NzcyggY29sdW1uLnNXaWR0aCApOwoJCQl9CgkJfQoJCgkJX2ZuQ2FsbGJhY2tGaXJlKCBzZXR0aW5ncywgbnVsbCwgJ3ByZUluaXQnLCBbc2V0dGluZ3NdICk7CgkKCQkvLyBJZiB0aGVyZSBpcyBkZWZhdWx0IHNvcnRpbmcgcmVxdWlyZWQgLSBsZXQncyBkbyBpdC4gVGhlIHNvcnQgZnVuY3Rpb24KCQkvLyB3aWxsIGRvIHRoZSBkcmF3aW5nIGZvciB1cy4gT3RoZXJ3aXNlIHdlIGRyYXcgdGhlIHRhYmxlIHJlZ2FyZGxlc3Mgb2YgdGhlCgkJLy8gQWpheCBzb3VyY2UgLSB0aGlzIGFsbG93cyB0aGUgdGFibGUgdG8gbG9vayBpbml0aWFsaXNlZCBmb3IgQWpheCBzb3VyY2luZwoJCS8vIGRhdGEgKHNob3cgJ2xvYWRpbmcnIG1lc3NhZ2UgcG9zc2libHkpCgkJX2ZuUmVEcmF3KCBzZXR0aW5ncyApOwoJCgkJLy8gU2VydmVyLXNpZGUgcHJvY2Vzc2luZyBpbml0IGNvbXBsZXRlIGlzIGRvbmUgYnkgX2ZuQWpheFVwZGF0ZURyYXcKCQl2YXIgZGF0YVNyYyA9IF9mbkRhdGFTb3VyY2UoIHNldHRpbmdzICk7CgkJaWYgKCBkYXRhU3JjICE9ICdzc3AnIHx8IGRlZmVyTG9hZGluZyApIHsKCQkJLy8gaWYgdGhlcmUgaXMgYW4gYWpheCBzb3VyY2UgbG9hZCB0aGUgZGF0YQoJCQlpZiAoIGRhdGFTcmMgPT0gJ2FqYXgnICkgewoJCQkJX2ZuQnVpbGRBamF4KCBzZXR0aW5ncywgW10sIGZ1bmN0aW9uKGpzb24pIHsKCQkJCQl2YXIgYURhdGEgPSBfZm5BamF4RGF0YVNyYyggc2V0dGluZ3MsIGpzb24gKTsKCQoJCQkJCS8vIEdvdCB0aGUgZGF0YSAtIGFkZCBpdCB0byB0aGUgdGFibGUKCQkJCQlmb3IgKCBpPTAgOyBpPGFEYXRhLmxlbmd0aCA7IGkrKyApIHsKCQkJCQkJX2ZuQWRkRGF0YSggc2V0dGluZ3MsIGFEYXRhW2ldICk7CgkJCQkJfQoJCgkJCQkJLy8gUmVzZXQgdGhlIGluaXQgZGlzcGxheSBmb3IgY29va2llIHNhdmluZy4gV2UndmUgYWxyZWFkeSBkb25lCgkJCQkJLy8gYSBmaWx0ZXIsIGFuZCB0aGVyZWZvcmUgY2xlYXJlZCBpdCBiZWZvcmUuIFNvIHdlIG5lZWQgdG8gbWFrZQoJCQkJCS8vIGl0IGFwcGVhciAnZnJlc2gnCgkJCQkJc2V0dGluZ3MuaUluaXREaXNwbGF5U3RhcnQgPSBpQWpheFN0YXJ0OwoJCgkJCQkJX2ZuUmVEcmF3KCBzZXR0aW5ncyApOwoJCgkJCQkJX2ZuUHJvY2Vzc2luZ0Rpc3BsYXkoIHNldHRpbmdzLCBmYWxzZSApOwoJCQkJCV9mbkluaXRDb21wbGV0ZSggc2V0dGluZ3MsIGpzb24gKTsKCQkJCX0sIHNldHRpbmdzICk7CgkJCX0KCQkJZWxzZSB7CgkJCQlfZm5Qcm9jZXNzaW5nRGlzcGxheSggc2V0dGluZ3MsIGZhbHNlICk7CgkJCQlfZm5Jbml0Q29tcGxldGUoIHNldHRpbmdzICk7CgkJCX0KCQl9Cgl9CgkKCQoJLyoqCgkgKiBEcmF3IHRoZSB0YWJsZSBmb3IgdGhlIGZpcnN0IHRpbWUsIGFkZGluZyBhbGwgcmVxdWlyZWQgZmVhdHVyZXMKCSAqICBAcGFyYW0ge29iamVjdH0gb1NldHRpbmdzIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkgKiAgQHBhcmFtIHtvYmplY3R9IFtqc29uXSBKU09OIGZyb20gdGhlIHNlcnZlciB0aGF0IGNvbXBsZXRlZCB0aGUgdGFibGUsIGlmIHVzaW5nIEFqYXggc291cmNlCgkgKiAgICB3aXRoIGNsaWVudC1zaWRlIHByb2Nlc3NpbmcgKG9wdGlvbmFsKQoJICogIEBtZW1iZXJvZiBEYXRhVGFibGUjb0FwaQoJICovCglmdW5jdGlvbiBfZm5Jbml0Q29tcGxldGUgKCBzZXR0aW5ncywganNvbiApCgl7CgkJc2V0dGluZ3MuX2JJbml0Q29tcGxldGUgPSB0cnVlOwoJCgkJLy8gV2hlbiBkYXRhIHdhcyBhZGRlZCBhZnRlciB0aGUgaW5pdGlhbGlzYXRpb24gKGRhdGEgb3IgQWpheCkgd2UgbmVlZCB0bwoJCS8vIGNhbGN1bGF0ZSB0aGUgY29sdW1uIHNpemluZwoJCWlmICgganNvbiB8fCBzZXR0aW5ncy5vSW5pdC5hYURhdGEgKSB7CgkJCV9mbkFkanVzdENvbHVtblNpemluZyggc2V0dGluZ3MgKTsKCQl9CgkKCQlfZm5DYWxsYmFja0ZpcmUoIHNldHRpbmdzLCBudWxsLCAncGx1Z2luLWluaXQnLCBbc2V0dGluZ3MsIGpzb25dICk7CgkJX2ZuQ2FsbGJhY2tGaXJlKCBzZXR0aW5ncywgJ2FvSW5pdENvbXBsZXRlJywgJ2luaXQnLCBbc2V0dGluZ3MsIGpzb25dICk7Cgl9CgkKCQoJZnVuY3Rpb24gX2ZuTGVuZ3RoQ2hhbmdlICggc2V0dGluZ3MsIHZhbCApCgl7CgkJdmFyIGxlbiA9IHBhcnNlSW50KCB2YWwsIDEwICk7CgkJc2V0dGluZ3MuX2lEaXNwbGF5TGVuZ3RoID0gbGVuOwoJCgkJX2ZuTGVuZ3RoT3ZlcmZsb3coIHNldHRpbmdzICk7CgkKCQkvLyBGaXJlIGxlbmd0aCBjaGFuZ2UgZXZlbnQKCQlfZm5DYWxsYmFja0ZpcmUoIHNldHRpbmdzLCBudWxsLCAnbGVuZ3RoJywgW3NldHRpbmdzLCBsZW5dICk7Cgl9CgkKCQoJLyoqCgkgKiBHZW5lcmF0ZSB0aGUgbm9kZSByZXF1aXJlZCBmb3IgdXNlciBkaXNwbGF5IGxlbmd0aCBjaGFuZ2luZwoJICogIEBwYXJhbSB7b2JqZWN0fSBzZXR0aW5ncyBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJICogIEByZXR1cm5zIHtub2RlfSBEaXNwbGF5IGxlbmd0aCBmZWF0dXJlIG5vZGUKCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuRmVhdHVyZUh0bWxMZW5ndGggKCBzZXR0aW5ncyApCgl7CgkJdmFyCgkJCWNsYXNzZXMgID0gc2V0dGluZ3Mub0NsYXNzZXMsCgkJCXRhYmxlSWQgID0gc2V0dGluZ3Muc1RhYmxlSWQsCgkJCW1lbnUgICAgID0gc2V0dGluZ3MuYUxlbmd0aE1lbnUsCgkJCWQyICAgICAgID0gJC5pc0FycmF5KCBtZW51WzBdICksCgkJCWxlbmd0aHMgID0gZDIgPyBtZW51WzBdIDogbWVudSwKCQkJbGFuZ3VhZ2UgPSBkMiA/IG1lbnVbMV0gOiBtZW51OwoJCgkJdmFyIHNlbGVjdCA9ICQoJzxzZWxlY3QvPicsIHsKCQkJJ25hbWUnOiAgICAgICAgICB0YWJsZUlkKydfbGVuZ3RoJywKCQkJJ2FyaWEtY29udHJvbHMnOiB0YWJsZUlkLAoJCQknY2xhc3MnOiAgICAgICAgIGNsYXNzZXMuc0xlbmd0aFNlbGVjdAoJCX0gKTsKCQoJCWZvciAoIHZhciBpPTAsIGllbj1sZW5ndGhzLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQlzZWxlY3RbMF1bIGkgXSA9IG5ldyBPcHRpb24oCgkJCQl0eXBlb2YgbGFuZ3VhZ2VbaV0gPT09ICdudW1iZXInID8KCQkJCQlzZXR0aW5ncy5mbkZvcm1hdE51bWJlciggbGFuZ3VhZ2VbaV0gKSA6CgkJCQkJbGFuZ3VhZ2VbaV0sCgkJCQlsZW5ndGhzW2ldCgkJCSk7CgkJfQoJCgkJdmFyIGRpdiA9ICQoJzxkaXY+PGxhYmVsLz48L2Rpdj4nKS5hZGRDbGFzcyggY2xhc3Nlcy5zTGVuZ3RoICk7CgkJaWYgKCAhIHNldHRpbmdzLmFhbkZlYXR1cmVzLmwgKSB7CgkJCWRpdlswXS5pZCA9IHRhYmxlSWQrJ19sZW5ndGgnOwoJCX0KCQoJCWRpdi5jaGlsZHJlbigpLmFwcGVuZCgKCQkJc2V0dGluZ3Mub0xhbmd1YWdlLnNMZW5ndGhNZW51LnJlcGxhY2UoICdfTUVOVV8nLCBzZWxlY3RbMF0ub3V0ZXJIVE1MICkKCQkpOwoJCgkJLy8gQ2FuJ3QgdXNlIGBzZWxlY3RgIHZhcmlhYmxlIGFzIHVzZXIgbWlnaHQgcHJvdmlkZSB0aGVpciBvd24gYW5kIHRoZQoJCS8vIHJlZmVyZW5jZSBpcyBicm9rZW4gYnkgdGhlIHVzZSBvZiBvdXRlckhUTUwKCQkkKCdzZWxlY3QnLCBkaXYpCgkJCS52YWwoIHNldHRpbmdzLl9pRGlzcGxheUxlbmd0aCApCgkJCS5vbiggJ2NoYW5nZS5EVCcsIGZ1bmN0aW9uKGUpIHsKCQkJCV9mbkxlbmd0aENoYW5nZSggc2V0dGluZ3MsICQodGhpcykudmFsKCkgKTsKCQkJCV9mbkRyYXcoIHNldHRpbmdzICk7CgkJCX0gKTsKCQoJCS8vIFVwZGF0ZSBub2RlIHZhbHVlIHdoZW5ldmVyIGFueXRoaW5nIGNoYW5nZXMgdGhlIHRhYmxlJ3MgbGVuZ3RoCgkJJChzZXR0aW5ncy5uVGFibGUpLm9uKCAnbGVuZ3RoLmR0LkRUJywgZnVuY3Rpb24gKGUsIHMsIGxlbikgewoJCQlpZiAoIHNldHRpbmdzID09PSBzICkgewoJCQkJJCgnc2VsZWN0JywgZGl2KS52YWwoIGxlbiApOwoJCQl9CgkJfSApOwoJCgkJcmV0dXJuIGRpdlswXTsKCX0KCQoJCgkKCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCgkgKiBOb3RlIHRoYXQgbW9zdCBvZiB0aGUgcGFnaW5nIGxvZ2ljIGlzIGRvbmUgaW4KCSAqIERhdGFUYWJsZS5leHQucGFnZXIKCSAqLwoJCgkvKioKCSAqIEdlbmVyYXRlIHRoZSBub2RlIHJlcXVpcmVkIGZvciBkZWZhdWx0IHBhZ2luYXRpb24KCSAqICBAcGFyYW0ge29iamVjdH0gb1NldHRpbmdzIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkgKiAgQHJldHVybnMge25vZGV9IFBhZ2luYXRpb24gZmVhdHVyZSBub2RlCgkgKiAgQG1lbWJlcm9mIERhdGFUYWJsZSNvQXBpCgkgKi8KCWZ1bmN0aW9uIF9mbkZlYXR1cmVIdG1sUGFnaW5hdGUgKCBzZXR0aW5ncyApCgl7CgkJdmFyCgkJCXR5cGUgICA9IHNldHRpbmdzLnNQYWdpbmF0aW9uVHlwZSwKCQkJcGx1Z2luID0gRGF0YVRhYmxlLmV4dC5wYWdlclsgdHlwZSBdLAoJCQltb2Rlcm4gPSB0eXBlb2YgcGx1Z2luID09PSAnZnVuY3Rpb24nLAoJCQlyZWRyYXcgPSBmdW5jdGlvbiggc2V0dGluZ3MgKSB7CgkJCQlfZm5EcmF3KCBzZXR0aW5ncyApOwoJCQl9LAoJCQlub2RlID0gJCgnPGRpdi8+JykuYWRkQ2xhc3MoIHNldHRpbmdzLm9DbGFzc2VzLnNQYWdpbmcgKyB0eXBlIClbMF0sCgkJCWZlYXR1cmVzID0gc2V0dGluZ3MuYWFuRmVhdHVyZXM7CgkKCQlpZiAoICEgbW9kZXJuICkgewoJCQlwbHVnaW4uZm5Jbml0KCBzZXR0aW5ncywgbm9kZSwgcmVkcmF3ICk7CgkJfQoJCgkJLyogQWRkIGEgZHJhdyBjYWxsYmFjayBmb3IgdGhlIHBhZ2luYXRpb24gb24gZmlyc3QgaW5zdGFuY2UsIHRvIHVwZGF0ZSB0aGUgcGFnaW5nIGRpc3BsYXkgKi8KCQlpZiAoICEgZmVhdHVyZXMucCApCgkJewoJCQlub2RlLmlkID0gc2V0dGluZ3Muc1RhYmxlSWQrJ19wYWdpbmF0ZSc7CgkKCQkJc2V0dGluZ3MuYW9EcmF3Q2FsbGJhY2sucHVzaCggewoJCQkJImZuIjogZnVuY3Rpb24oIHNldHRpbmdzICkgewoJCQkJCWlmICggbW9kZXJuICkgewoJCQkJCQl2YXIKCQkJCQkJCXN0YXJ0ICAgICAgPSBzZXR0aW5ncy5faURpc3BsYXlTdGFydCwKCQkJCQkJCWxlbiAgICAgICAgPSBzZXR0aW5ncy5faURpc3BsYXlMZW5ndGgsCgkJCQkJCQl2aXNSZWNvcmRzID0gc2V0dGluZ3MuZm5SZWNvcmRzRGlzcGxheSgpLAoJCQkJCQkJYWxsICAgICAgICA9IGxlbiA9PT0gLTEsCgkJCQkJCQlwYWdlID0gYWxsID8gMCA6IE1hdGguY2VpbCggc3RhcnQgLyBsZW4gKSwKCQkJCQkJCXBhZ2VzID0gYWxsID8gMSA6IE1hdGguY2VpbCggdmlzUmVjb3JkcyAvIGxlbiApLAoJCQkJCQkJYnV0dG9ucyA9IHBsdWdpbihwYWdlLCBwYWdlcyksCgkJCQkJCQlpLCBpZW47CgkKCQkJCQkJZm9yICggaT0wLCBpZW49ZmVhdHVyZXMucC5sZW5ndGggOyBpPGllbiA7IGkrKyApIHsKCQkJCQkJCV9mblJlbmRlcmVyKCBzZXR0aW5ncywgJ3BhZ2VCdXR0b24nICkoCgkJCQkJCQkJc2V0dGluZ3MsIGZlYXR1cmVzLnBbaV0sIGksIGJ1dHRvbnMsIHBhZ2UsIHBhZ2VzCgkJCQkJCQkpOwoJCQkJCQl9CgkJCQkJfQoJCQkJCWVsc2UgewoJCQkJCQlwbHVnaW4uZm5VcGRhdGUoIHNldHRpbmdzLCByZWRyYXcgKTsKCQkJCQl9CgkJCQl9LAoJCQkJInNOYW1lIjogInBhZ2luYXRpb24iCgkJCX0gKTsKCQl9CgkKCQlyZXR1cm4gbm9kZTsKCX0KCQoJCgkvKioKCSAqIEFsdGVyIHRoZSBkaXNwbGF5IHNldHRpbmdzIHRvIGNoYW5nZSB0aGUgcGFnZQoJICogIEBwYXJhbSB7b2JqZWN0fSBzZXR0aW5ncyBEYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJICogIEBwYXJhbSB7c3RyaW5nfGludH0gYWN0aW9uIFBhZ2luZyBhY3Rpb24gdG8gdGFrZTogImZpcnN0IiwgInByZXZpb3VzIiwKCSAqICAgICJuZXh0IiBvciAibGFzdCIgb3IgcGFnZSBudW1iZXIgdG8ganVtcCB0byAoaW50ZWdlcikKCSAqICBAcGFyYW0gW2Jvb2xdIHJlZHJhdyBBdXRvbWF0aWNhbGx5IGRyYXcgdGhlIHVwZGF0ZSBvciBub3QKCSAqICBAcmV0dXJucyB7Ym9vbH0gdHJ1ZSBwYWdlIGhhcyBjaGFuZ2VkLCBmYWxzZSAtIG5vIGNoYW5nZQoJICogIEBtZW1iZXJvZiBEYXRhVGFibGUjb0FwaQoJICovCglmdW5jdGlvbiBfZm5QYWdlQ2hhbmdlICggc2V0dGluZ3MsIGFjdGlvbiwgcmVkcmF3ICkKCXsKCQl2YXIKCQkJc3RhcnQgICAgID0gc2V0dGluZ3MuX2lEaXNwbGF5U3RhcnQsCgkJCWxlbiAgICAgICA9IHNldHRpbmdzLl9pRGlzcGxheUxlbmd0aCwKCQkJcmVjb3JkcyAgID0gc2V0dGluZ3MuZm5SZWNvcmRzRGlzcGxheSgpOwoJCgkJaWYgKCByZWNvcmRzID09PSAwIHx8IGxlbiA9PT0gLTEgKQoJCXsKCQkJc3RhcnQgPSAwOwoJCX0KCQllbHNlIGlmICggdHlwZW9mIGFjdGlvbiA9PT0gIm51bWJlciIgKQoJCXsKCQkJc3RhcnQgPSBhY3Rpb24gKiBsZW47CgkKCQkJaWYgKCBzdGFydCA+IHJlY29yZHMgKQoJCQl7CgkJCQlzdGFydCA9IDA7CgkJCX0KCQl9CgkJZWxzZSBpZiAoIGFjdGlvbiA9PSAiZmlyc3QiICkKCQl7CgkJCXN0YXJ0ID0gMDsKCQl9CgkJZWxzZSBpZiAoIGFjdGlvbiA9PSAicHJldmlvdXMiICkKCQl7CgkJCXN0YXJ0ID0gbGVuID49IDAgPwoJCQkJc3RhcnQgLSBsZW4gOgoJCQkJMDsKCQoJCQlpZiAoIHN0YXJ0IDwgMCApCgkJCXsKCQkJICBzdGFydCA9IDA7CgkJCX0KCQl9CgkJZWxzZSBpZiAoIGFjdGlvbiA9PSAibmV4dCIgKQoJCXsKCQkJaWYgKCBzdGFydCArIGxlbiA8IHJlY29yZHMgKQoJCQl7CgkJCQlzdGFydCArPSBsZW47CgkJCX0KCQl9CgkJZWxzZSBpZiAoIGFjdGlvbiA9PSAibGFzdCIgKQoJCXsKCQkJc3RhcnQgPSBNYXRoLmZsb29yKCAocmVjb3Jkcy0xKSAvIGxlbikgKiBsZW47CgkJfQoJCWVsc2UKCQl7CgkJCV9mbkxvZyggc2V0dGluZ3MsIDAsICJVbmtub3duIHBhZ2luZyBhY3Rpb246ICIrYWN0aW9uLCA1ICk7CgkJfQoJCgkJdmFyIGNoYW5nZWQgPSBzZXR0aW5ncy5faURpc3BsYXlTdGFydCAhPT0gc3RhcnQ7CgkJc2V0dGluZ3MuX2lEaXNwbGF5U3RhcnQgPSBzdGFydDsKCQoJCWlmICggY2hhbmdlZCApIHsKCQkJX2ZuQ2FsbGJhY2tGaXJlKCBzZXR0aW5ncywgbnVsbCwgJ3BhZ2UnLCBbc2V0dGluZ3NdICk7CgkKCQkJaWYgKCByZWRyYXcgKSB7CgkJCQlfZm5EcmF3KCBzZXR0aW5ncyApOwoJCQl9CgkJfQoJCgkJcmV0dXJuIGNoYW5nZWQ7Cgl9CgkKCQoJCgkvKioKCSAqIEdlbmVyYXRlIHRoZSBub2RlIHJlcXVpcmVkIGZvciB0aGUgcHJvY2Vzc2luZyBub2RlCgkgKiAgQHBhcmFtIHtvYmplY3R9IHNldHRpbmdzIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkgKiAgQHJldHVybnMge25vZGV9IFByb2Nlc3NpbmcgZWxlbWVudAoJICogIEBtZW1iZXJvZiBEYXRhVGFibGUjb0FwaQoJICovCglmdW5jdGlvbiBfZm5GZWF0dXJlSHRtbFByb2Nlc3NpbmcgKCBzZXR0aW5ncyApCgl7CgkJcmV0dXJuICQoJzxkaXYvPicsIHsKCQkJCSdpZCc6ICEgc2V0dGluZ3MuYWFuRmVhdHVyZXMuciA/IHNldHRpbmdzLnNUYWJsZUlkKydfcHJvY2Vzc2luZycgOiBudWxsLAoJCQkJJ2NsYXNzJzogc2V0dGluZ3Mub0NsYXNzZXMuc1Byb2Nlc3NpbmcKCQkJfSApCgkJCS5odG1sKCBzZXR0aW5ncy5vTGFuZ3VhZ2Uuc1Byb2Nlc3NpbmcgKQoJCQkuaW5zZXJ0QmVmb3JlKCBzZXR0aW5ncy5uVGFibGUgKVswXTsKCX0KCQoJCgkvKioKCSAqIERpc3BsYXkgb3IgaGlkZSB0aGUgcHJvY2Vzc2luZyBpbmRpY2F0b3IKCSAqICBAcGFyYW0ge29iamVjdH0gc2V0dGluZ3MgZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCSAqICBAcGFyYW0ge2Jvb2x9IHNob3cgU2hvdyB0aGUgcHJvY2Vzc2luZyBpbmRpY2F0b3IgKHRydWUpIG9yIG5vdCAoZmFsc2UpCgkgKiAgQG1lbWJlcm9mIERhdGFUYWJsZSNvQXBpCgkgKi8KCWZ1bmN0aW9uIF9mblByb2Nlc3NpbmdEaXNwbGF5ICggc2V0dGluZ3MsIHNob3cgKQoJewoJCWlmICggc2V0dGluZ3Mub0ZlYXR1cmVzLmJQcm9jZXNzaW5nICkgewoJCQkkKHNldHRpbmdzLmFhbkZlYXR1cmVzLnIpLmNzcyggJ2Rpc3BsYXknLCBzaG93ID8gJ2Jsb2NrJyA6ICdub25lJyApOwoJCX0KCQoJCV9mbkNhbGxiYWNrRmlyZSggc2V0dGluZ3MsIG51bGwsICdwcm9jZXNzaW5nJywgW3NldHRpbmdzLCBzaG93XSApOwoJfQoJCgkvKioKCSAqIEFkZCBhbnkgY29udHJvbCBlbGVtZW50cyBmb3IgdGhlIHRhYmxlIC0gc3BlY2lmaWNhbGx5IHNjcm9sbGluZwoJICogIEBwYXJhbSB7b2JqZWN0fSBzZXR0aW5ncyBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJICogIEByZXR1cm5zIHtub2RlfSBOb2RlIHRvIGFkZCB0byB0aGUgRE9NCgkgKiAgQG1lbWJlcm9mIERhdGFUYWJsZSNvQXBpCgkgKi8KCWZ1bmN0aW9uIF9mbkZlYXR1cmVIdG1sVGFibGUgKCBzZXR0aW5ncyApCgl7CgkJdmFyIHRhYmxlID0gJChzZXR0aW5ncy5uVGFibGUpOwoJCgkJLy8gQWRkIHRoZSBBUklBIGdyaWQgcm9sZSB0byB0aGUgdGFibGUKCQl0YWJsZS5hdHRyKCAncm9sZScsICdncmlkJyApOwoJCgkJLy8gU2Nyb2xsaW5nIGZyb20gaGVyZSBvbiBpbgoJCXZhciBzY3JvbGwgPSBzZXR0aW5ncy5vU2Nyb2xsOwoJCgkJaWYgKCBzY3JvbGwuc1ggPT09ICcnICYmIHNjcm9sbC5zWSA9PT0gJycgKSB7CgkJCXJldHVybiBzZXR0aW5ncy5uVGFibGU7CgkJfQoJCgkJdmFyIHNjcm9sbFggPSBzY3JvbGwuc1g7CgkJdmFyIHNjcm9sbFkgPSBzY3JvbGwuc1k7CgkJdmFyIGNsYXNzZXMgPSBzZXR0aW5ncy5vQ2xhc3NlczsKCQl2YXIgY2FwdGlvbiA9IHRhYmxlLmNoaWxkcmVuKCdjYXB0aW9uJyk7CgkJdmFyIGNhcHRpb25TaWRlID0gY2FwdGlvbi5sZW5ndGggPyBjYXB0aW9uWzBdLl9jYXB0aW9uU2lkZSA6IG51bGw7CgkJdmFyIGhlYWRlckNsb25lID0gJCggdGFibGVbMF0uY2xvbmVOb2RlKGZhbHNlKSApOwoJCXZhciBmb290ZXJDbG9uZSA9ICQoIHRhYmxlWzBdLmNsb25lTm9kZShmYWxzZSkgKTsKCQl2YXIgZm9vdGVyID0gdGFibGUuY2hpbGRyZW4oJ3Rmb290Jyk7CgkJdmFyIF9kaXYgPSAnPGRpdi8+JzsKCQl2YXIgc2l6ZSA9IGZ1bmN0aW9uICggcyApIHsKCQkJcmV0dXJuICFzID8gbnVsbCA6IF9mblN0cmluZ1RvQ3NzKCBzICk7CgkJfTsKCQoJCWlmICggISBmb290ZXIubGVuZ3RoICkgewoJCQlmb290ZXIgPSBudWxsOwoJCX0KCQoJCS8qCgkJICogVGhlIEhUTUwgc3RydWN0dXJlIHRoYXQgd2Ugd2FudCB0byBnZW5lcmF0ZSBpbiB0aGlzIGZ1bmN0aW9uIGlzOgoJCSAqICBkaXYgLSBzY3JvbGxlcgoJCSAqICAgIGRpdiAtIHNjcm9sbCBoZWFkCgkJICogICAgICBkaXYgLSBzY3JvbGwgaGVhZCBpbm5lcgoJCSAqICAgICAgICB0YWJsZSAtIHNjcm9sbCBoZWFkIHRhYmxlCgkJICogICAgICAgICAgdGhlYWQgLSB0aGVhZAoJCSAqICAgIGRpdiAtIHNjcm9sbCBib2R5CgkJICogICAgICB0YWJsZSAtIHRhYmxlIChtYXN0ZXIgdGFibGUpCgkJICogICAgICAgIHRoZWFkIC0gdGhlYWQgY2xvbmUgZm9yIHNpemluZwoJCSAqICAgICAgICB0Ym9keSAtIHRib2R5CgkJICogICAgZGl2IC0gc2Nyb2xsIGZvb3QKCQkgKiAgICAgIGRpdiAtIHNjcm9sbCBmb290IGlubmVyCgkJICogICAgICAgIHRhYmxlIC0gc2Nyb2xsIGZvb3QgdGFibGUKCQkgKiAgICAgICAgICB0Zm9vdCAtIHRmb290CgkJIA=="
},
{
"key": "jquery.dataTables.js?4?3?1",
"type": "binary",
"value": "base64:Ki8KCQl2YXIgc2Nyb2xsZXIgPSAkKCBfZGl2LCB7ICdjbGFzcyc6IGNsYXNzZXMuc1Njcm9sbFdyYXBwZXIgfSApCgkJCS5hcHBlbmQoCgkJCQkkKF9kaXYsIHsgJ2NsYXNzJzogY2xhc3Nlcy5zU2Nyb2xsSGVhZCB9ICkKCQkJCQkuY3NzKCB7CgkJCQkJCW92ZXJmbG93OiAnaGlkZGVuJywKCQkJCQkJcG9zaXRpb246ICdyZWxhdGl2ZScsCgkJCQkJCWJvcmRlcjogMCwKCQkJCQkJd2lkdGg6IHNjcm9sbFggPyBzaXplKHNjcm9sbFgpIDogJzEwMCUnCgkJCQkJfSApCgkJCQkJLmFwcGVuZCgKCQkJCQkJJChfZGl2LCB7ICdjbGFzcyc6IGNsYXNzZXMuc1Njcm9sbEhlYWRJbm5lciB9ICkKCQkJCQkJCS5jc3MoIHsKCQkJCQkJCQknYm94LXNpemluZyc6ICdjb250ZW50LWJveCcsCgkJCQkJCQkJd2lkdGg6IHNjcm9sbC5zWElubmVyIHx8ICcxMDAlJwoJCQkJCQkJfSApCgkJCQkJCQkuYXBwZW5kKAoJCQkJCQkJCWhlYWRlckNsb25lCgkJCQkJCQkJCS5yZW1vdmVBdHRyKCdpZCcpCgkJCQkJCQkJCS5jc3MoICdtYXJnaW4tbGVmdCcsIDAgKQoJCQkJCQkJCQkuYXBwZW5kKCBjYXB0aW9uU2lkZSA9PT0gJ3RvcCcgPyBjYXB0aW9uIDogbnVsbCApCgkJCQkJCQkJCS5hcHBlbmQoCgkJCQkJCQkJCQl0YWJsZS5jaGlsZHJlbigndGhlYWQnKQoJCQkJCQkJCQkpCgkJCQkJCQkpCgkJCQkJKQoJCQkpCgkJCS5hcHBlbmQoCgkJCQkkKF9kaXYsIHsgJ2NsYXNzJzogY2xhc3Nlcy5zU2Nyb2xsQm9keSB9ICkKCQkJCQkuY3NzKCB7CgkJCQkJCXBvc2l0aW9uOiAncmVsYXRpdmUnLAoJCQkJCQlvdmVyZmxvdzogJ2F1dG8nLAoJCQkJCQl3aWR0aDogc2l6ZSggc2Nyb2xsWCApCgkJCQkJfSApCgkJCQkJLmFwcGVuZCggdGFibGUgKQoJCQkpOwoJCgkJaWYgKCBmb290ZXIgKSB7CgkJCXNjcm9sbGVyLmFwcGVuZCgKCQkJCSQoX2RpdiwgeyAnY2xhc3MnOiBjbGFzc2VzLnNTY3JvbGxGb290IH0gKQoJCQkJCS5jc3MoIHsKCQkJCQkJb3ZlcmZsb3c6ICdoaWRkZW4nLAoJCQkJCQlib3JkZXI6IDAsCgkJCQkJCXdpZHRoOiBzY3JvbGxYID8gc2l6ZShzY3JvbGxYKSA6ICcxMDAlJwoJCQkJCX0gKQoJCQkJCS5hcHBlbmQoCgkJCQkJCSQoX2RpdiwgeyAnY2xhc3MnOiBjbGFzc2VzLnNTY3JvbGxGb290SW5uZXIgfSApCgkJCQkJCQkuYXBwZW5kKAoJCQkJCQkJCWZvb3RlckNsb25lCgkJCQkJCQkJCS5yZW1vdmVBdHRyKCdpZCcpCgkJCQkJCQkJCS5jc3MoICdtYXJnaW4tbGVmdCcsIDAgKQoJCQkJCQkJCQkuYXBwZW5kKCBjYXB0aW9uU2lkZSA9PT0gJ2JvdHRvbScgPyBjYXB0aW9uIDogbnVsbCApCgkJCQkJCQkJCS5hcHBlbmQoCgkJCQkJCQkJCQl0YWJsZS5jaGlsZHJlbigndGZvb3QnKQoJCQkJCQkJCQkpCgkJCQkJCQkpCgkJCQkJKQoJCQkpOwoJCX0KCQoJCXZhciBjaGlsZHJlbiA9IHNjcm9sbGVyLmNoaWxkcmVuKCk7CgkJdmFyIHNjcm9sbEhlYWQgPSBjaGlsZHJlblswXTsKCQl2YXIgc2Nyb2xsQm9keSA9IGNoaWxkcmVuWzFdOwoJCXZhciBzY3JvbGxGb290ID0gZm9vdGVyID8gY2hpbGRyZW5bMl0gOiBudWxsOwoJCgkJLy8gV2hlbiB0aGUgYm9keSBpcyBzY3JvbGxlZCwgdGhlbiB3ZSBhbHNvIHdhbnQgdG8gc2Nyb2xsIHRoZSBoZWFkZXJzCgkJaWYgKCBzY3JvbGxYICkgewoJCQkkKHNjcm9sbEJvZHkpLm9uKCAnc2Nyb2xsLkRUJywgZnVuY3Rpb24gKGUpIHsKCQkJCXZhciBzY3JvbGxMZWZ0ID0gdGhpcy5zY3JvbGxMZWZ0OwoJCgkJCQlzY3JvbGxIZWFkLnNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0OwoJCgkJCQlpZiAoIGZvb3RlciApIHsKCQkJCQlzY3JvbGxGb290LnNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0OwoJCQkJfQoJCQl9ICk7CgkJfQoJCgkJJChzY3JvbGxCb2R5KS5jc3MoCgkJCXNjcm9sbFkgJiYgc2Nyb2xsLmJDb2xsYXBzZSA/ICdtYXgtaGVpZ2h0JyA6ICdoZWlnaHQnLCAKCQkJc2Nyb2xsWQoJCSk7CgkKCQlzZXR0aW5ncy5uU2Nyb2xsSGVhZCA9IHNjcm9sbEhlYWQ7CgkJc2V0dGluZ3MublNjcm9sbEJvZHkgPSBzY3JvbGxCb2R5OwoJCXNldHRpbmdzLm5TY3JvbGxGb290ID0gc2Nyb2xsRm9vdDsKCQoJCS8vIE9uIHJlZHJhdyAtIGFsaWduIGNvbHVtbnMKCQlzZXR0aW5ncy5hb0RyYXdDYWxsYmFjay5wdXNoKCB7CgkJCSJmbiI6IF9mblNjcm9sbERyYXcsCgkJCSJzTmFtZSI6ICJzY3JvbGxpbmciCgkJfSApOwoJCgkJcmV0dXJuIHNjcm9sbGVyWzBdOwoJfQoJCgkKCQoJLyoqCgkgKiBVcGRhdGUgdGhlIGhlYWRlciwgZm9vdGVyIGFuZCBib2R5IHRhYmxlcyBmb3IgcmVzaXppbmcgLSBpLmUuIGNvbHVtbgoJICogYWxpZ25tZW50LgoJICoKCSAqIFdlbGNvbWUgdG8gdGhlIG1vc3QgaG9ycmlibGUgZnVuY3Rpb24gRGF0YVRhYmxlcy4gVGhlIHByb2Nlc3MgdGhhdCB0aGlzCgkgKiBmdW5jdGlvbiBmb2xsb3dzIGlzIGJhc2ljYWxseToKCSAqICAgMS4gUmUtY3JlYXRlIHRoZSB0YWJsZSBpbnNpZGUgdGhlIHNjcm9sbGluZyBkaXYKCSAqICAgMi4gVGFrZSBsaXZlIG1lYXN1cmVtZW50cyBmcm9tIHRoZSBET00KCSAqICAgMy4gQXBwbHkgdGhlIG1lYXN1cmVtZW50cyB0byBhbGlnbiB0aGUgY29sdW1ucwoJICogICA0LiBDbGVhbiB1cAoJICoKCSAqICBAcGFyYW0ge29iamVjdH0gc2V0dGluZ3MgZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuU2Nyb2xsRHJhdyAoIHNldHRpbmdzICkKCXsKCQkvLyBHaXZlbiB0aGF0IHRoaXMgaXMgc3VjaCBhIG1vbnN0ZXIgZnVuY3Rpb24sIGEgbG90IG9mIHZhcmlhYmxlcyBhcmUgdXNlCgkJLy8gdG8gdHJ5IGFuZCBrZWVwIHRoZSBtaW5pbWlzZWQgc2l6ZSBhcyBzbWFsbCBhcyBwb3NzaWJsZQoJCXZhcgoJCQlzY3JvbGwgICAgICAgICA9IHNldHRpbmdzLm9TY3JvbGwsCgkJCXNjcm9sbFggICAgICAgID0gc2Nyb2xsLnNYLAoJCQlzY3JvbGxYSW5uZXIgICA9IHNjcm9sbC5zWElubmVyLAoJCQlzY3JvbGxZICAgICAgICA9IHNjcm9sbC5zWSwKCQkJYmFyV2lkdGggICAgICAgPSBzY3JvbGwuaUJhcldpZHRoLAoJCQlkaXZIZWFkZXIgICAgICA9ICQoc2V0dGluZ3MublNjcm9sbEhlYWQpLAoJCQlkaXZIZWFkZXJTdHlsZSA9IGRpdkhlYWRlclswXS5zdHlsZSwKCQkJZGl2SGVhZGVySW5uZXIgPSBkaXZIZWFkZXIuY2hpbGRyZW4oJ2RpdicpLAoJCQlkaXZIZWFkZXJJbm5lclN0eWxlID0gZGl2SGVhZGVySW5uZXJbMF0uc3R5bGUsCgkJCWRpdkhlYWRlclRhYmxlID0gZGl2SGVhZGVySW5uZXIuY2hpbGRyZW4oJ3RhYmxlJyksCgkJCWRpdkJvZHlFbCAgICAgID0gc2V0dGluZ3MublNjcm9sbEJvZHksCgkJCWRpdkJvZHkgICAgICAgID0gJChkaXZCb2R5RWwpLAoJCQlkaXZCb2R5U3R5bGUgICA9IGRpdkJvZHlFbC5zdHlsZSwKCQkJZGl2Rm9vdGVyICAgICAgPSAkKHNldHRpbmdzLm5TY3JvbGxGb290KSwKCQkJZGl2Rm9vdGVySW5uZXIgPSBkaXZGb290ZXIuY2hpbGRyZW4oJ2RpdicpLAoJCQlkaXZGb290ZXJUYWJsZSA9IGRpdkZvb3RlcklubmVyLmNoaWxkcmVuKCd0YWJsZScpLAoJCQloZWFkZXIgICAgICAgICA9ICQoc2V0dGluZ3MublRIZWFkKSwKCQkJdGFibGUgICAgICAgICAgPSAkKHNldHRpbmdzLm5UYWJsZSksCgkJCXRhYmxlRWwgICAgICAgID0gdGFibGVbMF0sCgkJCXRhYmxlU3R5bGUgICAgID0gdGFibGVFbC5zdHlsZSwKCQkJZm9vdGVyICAgICAgICAgPSBzZXR0aW5ncy5uVEZvb3QgPyAkKHNldHRpbmdzLm5URm9vdCkgOiBudWxsLAoJCQlicm93c2VyICAgICAgICA9IHNldHRpbmdzLm9Ccm93c2VyLAoJCQlpZTY3ICAgICAgICAgICA9IGJyb3dzZXIuYlNjcm9sbE92ZXJzaXplLAoJCQlkdEhlYWRlckNlbGxzICA9IF9wbHVjayggc2V0dGluZ3MuYW9Db2x1bW5zLCAnblRoJyApLAoJCQloZWFkZXJUcmdFbHMsIGZvb3RlclRyZ0VscywKCQkJaGVhZGVyU3JjRWxzLCBmb290ZXJTcmNFbHMsCgkJCWhlYWRlckNvcHksIGZvb3RlckNvcHksCgkJCWhlYWRlcldpZHRocz1bXSwgZm9vdGVyV2lkdGhzPVtdLAoJCQloZWFkZXJDb250ZW50PVtdLCBmb290ZXJDb250ZW50PVtdLAoJCQlpZHgsIGNvcnJlY3Rpb24sIHNhbml0eVdpZHRoLAoJCQl6ZXJvT3V0ID0gZnVuY3Rpb24oblNpemVyKSB7CgkJCQl2YXIgc3R5bGUgPSBuU2l6ZXIuc3R5bGU7CgkJCQlzdHlsZS5wYWRkaW5nVG9wID0gIjAiOwoJCQkJc3R5bGUucGFkZGluZ0JvdHRvbSA9ICIwIjsKCQkJCXN0eWxlLmJvcmRlclRvcFdpZHRoID0gIjAiOwoJCQkJc3R5bGUuYm9yZGVyQm90dG9tV2lkdGggPSAiMCI7CgkJCQlzdHlsZS5oZWlnaHQgPSAwOwoJCQl9OwoJCgkJLy8gSWYgdGhlIHNjcm9sbGJhciB2aXNpYmlsaXR5IGhhcyBjaGFuZ2VkIGZyb20gdGhlIGxhc3QgZHJhdywgd2UgbmVlZCB0bwoJCS8vIGFkanVzdCB0aGUgY29sdW1uIHNpemVzIGFzIHRoZSB0YWJsZSB3aWR0aCB3aWxsIGhhdmUgY2hhbmdlZCB0byBhY2NvdW50CgkJLy8gZm9yIHRoZSBzY3JvbGxiYXIKCQl2YXIgc2Nyb2xsQmFyVmlzID0gZGl2Qm9keUVsLnNjcm9sbEhlaWdodCA+IGRpdkJvZHlFbC5jbGllbnRIZWlnaHQ7CgkJCgkJaWYgKCBzZXR0aW5ncy5zY3JvbGxCYXJWaXMgIT09IHNjcm9sbEJhclZpcyAmJiBzZXR0aW5ncy5zY3JvbGxCYXJWaXMgIT09IHVuZGVmaW5lZCApIHsKCQkJc2V0dGluZ3Muc2Nyb2xsQmFyVmlzID0gc2Nyb2xsQmFyVmlzOwoJCQlfZm5BZGp1c3RDb2x1bW5TaXppbmcoIHNldHRpbmdzICk7CgkJCXJldHVybjsgLy8gYWRqdXN0IGNvbHVtbiBzaXppbmcgd2lsbCBjYWxsIHRoaXMgZnVuY3Rpb24gYWdhaW4KCQl9CgkJZWxzZSB7CgkJCXNldHRpbmdzLnNjcm9sbEJhclZpcyA9IHNjcm9sbEJhclZpczsKCQl9CgkKCQkvKgoJCSAqIDEuIFJlLWNyZWF0ZSB0aGUgdGFibGUgaW5zaWRlIHRoZSBzY3JvbGxpbmcgZGl2CgkJICovCgkKCQkvLyBSZW1vdmUgdGhlIG9sZCBtaW5pbWlzZWQgdGhlYWQgYW5kIHRmb290IGVsZW1lbnRzIGluIHRoZSBpbm5lciB0YWJsZQoJCXRhYmxlLmNoaWxkcmVuKCd0aGVhZCwgdGZvb3QnKS5yZW1vdmUoKTsKCQoJCWlmICggZm9vdGVyICkgewoJCQlmb290ZXJDb3B5ID0gZm9vdGVyLmNsb25lKCkucHJlcGVuZFRvKCB0YWJsZSApOwoJCQlmb290ZXJUcmdFbHMgPSBmb290ZXIuZmluZCgndHInKTsgLy8gdGhlIG9yaWdpbmFsIHRmb290IGlzIGluIGl0cyBvd24gdGFibGUgYW5kIG11c3QgYmUgc2l6ZWQKCQkJZm9vdGVyU3JjRWxzID0gZm9vdGVyQ29weS5maW5kKCd0cicpOwoJCX0KCQoJCS8vIENsb25lIHRoZSBjdXJyZW50IGhlYWRlciBhbmQgZm9vdGVyIGVsZW1lbnRzIGFuZCB0aGVuIHBsYWNlIGl0IGludG8gdGhlIGlubmVyIHRhYmxlCgkJaGVhZGVyQ29weSA9IGhlYWRlci5jbG9uZSgpLnByZXBlbmRUbyggdGFibGUgKTsKCQloZWFkZXJUcmdFbHMgPSBoZWFkZXIuZmluZCgndHInKTsgLy8gb3JpZ2luYWwgaGVhZGVyIGlzIGluIGl0cyBvd24gdGFibGUKCQloZWFkZXJTcmNFbHMgPSBoZWFkZXJDb3B5LmZpbmQoJ3RyJyk7CgkJaGVhZGVyQ29weS5maW5kKCd0aCwgdGQnKS5yZW1vdmVBdHRyKCd0YWJpbmRleCcpOwoJCgkKCQkvKgoJCSAqIDIuIFRha2UgbGl2ZSBtZWFzdXJlbWVudHMgZnJvbSB0aGUgRE9NIC0gZG8gbm90IGFsdGVyIHRoZSBET00gaXRzZWxmIQoJCSAqLwoJCgkJLy8gUmVtb3ZlIG9sZCBzaXppbmcgYW5kIGFwcGx5IHRoZSBjYWxjdWxhdGVkIGNvbHVtbiB3aWR0aHMKCQkvLyBHZXQgdGhlIHVuaXF1ZSBjb2x1bW4gaGVhZGVycyBpbiB0aGUgbmV3bHkgY3JlYXRlZCAoY2xvbmVkKSBoZWFkZXIuIFdlIHdhbnQgdG8gYXBwbHkgdGhlCgkJLy8gY2FsY3VsYXRlZCBzaXplcyB0byB0aGlzIGhlYWRlcgoJCWlmICggISBzY3JvbGxYICkKCQl7CgkJCWRpdkJvZHlTdHlsZS53aWR0aCA9ICcxMDAlJzsKCQkJZGl2SGVhZGVyWzBdLnN0eWxlLndpZHRoID0gJzEwMCUnOwoJCX0KCQoJCSQuZWFjaCggX2ZuR2V0VW5pcXVlVGhzKCBzZXR0aW5ncywgaGVhZGVyQ29weSApLCBmdW5jdGlvbiAoIGksIGVsICkgewoJCQlpZHggPSBfZm5WaXNpYmxlVG9Db2x1bW5JbmRleCggc2V0dGluZ3MsIGkgKTsKCQkJZWwuc3R5bGUud2lkdGggPSBzZXR0aW5ncy5hb0NvbHVtbnNbaWR4XS5zV2lkdGg7CgkJfSApOwoJCgkJaWYgKCBmb290ZXIgKSB7CgkJCV9mbkFwcGx5VG9DaGlsZHJlbiggZnVuY3Rpb24obikgewoJCQkJbi5zdHlsZS53aWR0aCA9ICIiOwoJCQl9LCBmb290ZXJTcmNFbHMgKTsKCQl9CgkKCQkvLyBTaXplIHRoZSB0YWJsZSBhcyBhIHdob2xlCgkJc2FuaXR5V2lkdGggPSB0YWJsZS5vdXRlcldpZHRoKCk7CgkJaWYgKCBzY3JvbGxYID09PSAiIiApIHsKCQkJLy8gTm8geCBzY3JvbGxpbmcKCQkJdGFibGVTdHlsZS53aWR0aCA9ICIxMDAlIjsKCQoJCQkvLyBJRTcgd2lsbCBtYWtlIHRoZSB3aWR0aCBvZiB0aGUgdGFibGUgd2hlbiAxMDAlIGluY2x1ZGUgdGhlIHNjcm9sbGJhcgoJCQkvLyAtIHdoaWNoIGlzIHNob3VsZG4ndC4gV2hlbiB0aGVyZSBpcyBhIHNjcm9sbGJhciB3ZSBuZWVkIHRvIHRha2UgdGhpcwoJCQkvLyBpbnRvIGFjY291bnQuCgkJCWlmICggaWU2NyAmJiAodGFibGUuZmluZCgndGJvZHknKS5oZWlnaHQoKSA+IGRpdkJvZHlFbC5vZmZzZXRIZWlnaHQgfHwKCQkJCWRpdkJvZHkuY3NzKCdvdmVyZmxvdy15JykgPT0gInNjcm9sbCIpCgkJCSkgewoJCQkJdGFibGVTdHlsZS53aWR0aCA9IF9mblN0cmluZ1RvQ3NzKCB0YWJsZS5vdXRlcldpZHRoKCkgLSBiYXJXaWR0aCk7CgkJCX0KCQoJCQkvLyBSZWNhbGN1bGF0ZSB0aGUgc2FuaXR5IHdpZHRoCgkJCXNhbml0eVdpZHRoID0gdGFibGUub3V0ZXJXaWR0aCgpOwoJCX0KCQllbHNlIGlmICggc2Nyb2xsWElubmVyICE9PSAiIiApIHsKCQkJLy8gbGVnYWN5IHggc2Nyb2xsIGlubmVyIGhhcyBiZWVuIGdpdmVuIC0gdXNlIGl0CgkJCXRhYmxlU3R5bGUud2lkdGggPSBfZm5TdHJpbmdUb0NzcyhzY3JvbGxYSW5uZXIpOwoJCgkJCS8vIFJlY2FsY3VsYXRlIHRoZSBzYW5pdHkgd2lkdGgKCQkJc2FuaXR5V2lkdGggPSB0YWJsZS5vdXRlcldpZHRoKCk7CgkJfQoJCgkJLy8gSGlkZGVuIGhlYWRlciBzaG91bGQgaGF2ZSB6ZXJvIGhlaWdodCwgc28gcmVtb3ZlIHBhZGRpbmcgYW5kIGJvcmRlcnMuIFRoZW4KCQkvLyBzZXQgdGhlIHdpZHRoIGJhc2VkIG9uIHRoZSByZWFsIGhlYWRlcnMKCQoJCS8vIEFwcGx5IGFsbCBzdHlsZXMgaW4gb25lIHBhc3MKCQlfZm5BcHBseVRvQ2hpbGRyZW4oIHplcm9PdXQsIGhlYWRlclNyY0VscyApOwoJCgkJLy8gUmVhZCBhbGwgd2lkdGhzIGluIG5leHQgcGFzcwoJCV9mbkFwcGx5VG9DaGlsZHJlbiggZnVuY3Rpb24oblNpemVyKSB7CgkJCWhlYWRlckNvbnRlbnQucHVzaCggblNpemVyLmlubmVySFRNTCApOwoJCQloZWFkZXJXaWR0aHMucHVzaCggX2ZuU3RyaW5nVG9Dc3MoICQoblNpemVyKS5jc3MoJ3dpZHRoJykgKSApOwoJCX0sIGhlYWRlclNyY0VscyApOwoJCgkJLy8gQXBwbHkgYWxsIHdpZHRocyBpbiBmaW5hbCBwYXNzCgkJX2ZuQXBwbHlUb0NoaWxkcmVuKCBmdW5jdGlvbihuVG9TaXplLCBpKSB7CgkJCS8vIE9ubHkgYXBwbHkgd2lkdGhzIHRvIHRoZSBEYXRhVGFibGVzIGRldGVjdGVkIGhlYWRlciBjZWxscyAtIHRoaXMKCQkJLy8gcHJldmVudHMgY29tcGxleCBoZWFkZXJzIGZyb20gaGF2aW5nIGNvbnRyYWRpY3Rvcnkgc2l6ZXMgYXBwbGllZAoJCQlpZiAoICQuaW5BcnJheSggblRvU2l6ZSwgZHRIZWFkZXJDZWxscyApICE9PSAtMSApIHsKCQkJCW5Ub1NpemUuc3R5bGUud2lkdGggPSBoZWFkZXJXaWR0aHNbaV07CgkJCX0KCQl9LCBoZWFkZXJUcmdFbHMgKTsKCQoJCSQoaGVhZGVyU3JjRWxzKS5oZWlnaHQoMCk7CgkKCQkvKiBTYW1lIGFnYWluIHdpdGggdGhlIGZvb3RlciBpZiB3ZSBoYXZlIG9uZSAqLwoJCWlmICggZm9vdGVyICkKCQl7CgkJCV9mbkFwcGx5VG9DaGlsZHJlbiggemVyb091dCwgZm9vdGVyU3JjRWxzICk7CgkKCQkJX2ZuQXBwbHlUb0NoaWxkcmVuKCBmdW5jdGlvbihuU2l6ZXIpIHsKCQkJCWZvb3RlckNvbnRlbnQucHVzaCggblNpemVyLmlubmVySFRNTCApOwoJCQkJZm9vdGVyV2lkdGhzLnB1c2goIF9mblN0cmluZ1RvQ3NzKCAkKG5TaXplcikuY3NzKCd3aWR0aCcpICkgKTsKCQkJfSwgZm9vdGVyU3JjRWxzICk7CgkKCQkJX2ZuQXBwbHlUb0NoaWxkcmVuKCBmdW5jdGlvbihuVG9TaXplLCBpKSB7CgkJCQluVG9TaXplLnN0eWxlLndpZHRoID0gZm9vdGVyV2lkdGhzW2ldOwoJCQl9LCBmb290ZXJUcmdFbHMgKTsKCQoJCQkkKGZvb3RlclNyY0VscykuaGVpZ2h0KDApOwoJCX0KCQoJCgkJLyoKCQkgKiAzLiBBcHBseSB0aGUgbWVhc3VyZW1lbnRzCgkJICovCgkKCQkvLyAiSGlkZSIgdGhlIGhlYWRlciBhbmQgZm9vdGVyIHRoYXQgd2UgdXNlZCBmb3IgdGhlIHNpemluZy4gV2UgbmVlZCB0byBrZWVwCgkJLy8gdGhlIGNvbnRlbnQgb2YgdGhlIGNlbGwgc28gdGhhdCB0aGUgd2lkdGggYXBwbGllZCB0byB0aGUgaGVhZGVyIGFuZCBib2R5CgkJLy8gYm90aCBtYXRjaCwgYnV0IHdlIHdhbnQgdG8gaGlkZSBpdCBjb21wbGV0ZWx5LiBXZSB3YW50IHRvIGFsc28gZml4IHRoZWlyCgkJLy8gd2lkdGggdG8gd2hhdCB0aGV5IGN1cnJlbnRseSBhcmUKCQlfZm5BcHBseVRvQ2hpbGRyZW4oIGZ1bmN0aW9uKG5TaXplciwgaSkgewoJCQluU2l6ZXIuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9ImRhdGFUYWJsZXNfc2l6aW5nIj4nK2hlYWRlckNvbnRlbnRbaV0rJzwvZGl2Pic7CgkJCW5TaXplci5jaGlsZE5vZGVzWzBdLnN0eWxlLmhlaWdodCA9ICIwIjsKCQkJblNpemVyLmNoaWxkTm9kZXNbMF0uc3R5bGUub3ZlcmZsb3cgPSAiaGlkZGVuIjsKCQkJblNpemVyLnN0eWxlLndpZHRoID0gaGVhZGVyV2lkdGhzW2ldOwoJCX0sIGhlYWRlclNyY0VscyApOwoJCgkJaWYgKCBmb290ZXIgKQoJCXsKCQkJX2ZuQXBwbHlUb0NoaWxkcmVuKCBmdW5jdGlvbihuU2l6ZXIsIGkpIHsKCQkJCW5TaXplci5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz0iZGF0YVRhYmxlc19zaXppbmciPicrZm9vdGVyQ29udGVudFtpXSsnPC9kaXY+JzsKCQkJCW5TaXplci5jaGlsZE5vZGVzWzBdLnN0eWxlLmhlaWdodCA9ICIwIjsKCQkJCW5TaXplci5jaGlsZE5vZGVzWzBdLnN0eWxlLm92ZXJmbG93ID0gImhpZGRlbiI7CgkJCQluU2l6ZXIuc3R5bGUud2lkdGggPSBmb290ZXJXaWR0aHNbaV07CgkJCX0sIGZvb3RlclNyY0VscyApOwoJCX0KCQoJCS8vIFNhbml0eSBjaGVjayB0aGF0IHRoZSB0YWJsZSBpcyBvZiBhIHNlbnNpYmxlIHdpZHRoLiBJZiBub3QgdGhlbiB3ZSBhcmUgZ29pbmcgdG8gZ2V0CgkJLy8gbWlzYWxpZ25tZW50IC0gdHJ5IHRvIHByZXZlbnQgdGhpcyBieSBub3QgYWxsb3dpbmcgdGhlIHRhYmxlIHRvIHNocmluayBiZWxvdyBpdHMgbWluIHdpZHRoCgkJaWYgKCB0YWJsZS5vdXRlcldpZHRoKCkgPCBzYW5pdHlXaWR0aCApCgkJewoJCQkvLyBUaGUgbWluIHdpZHRoIGRlcGVuZHMgdXBvbiBpZiB3ZSBoYXZlIGEgdmVydGljYWwgc2Nyb2xsYmFyIHZpc2libGUgb3Igbm90ICovCgkJCWNvcnJlY3Rpb24gPSAoKGRpdkJvZHlFbC5zY3JvbGxIZWlnaHQgPiBkaXZCb2R5RWwub2Zmc2V0SGVpZ2h0IHx8CgkJCQlkaXZCb2R5LmNzcygnb3ZlcmZsb3cteScpID09ICJzY3JvbGwiKSkgPwoJCQkJCXNhbml0eVdpZHRoK2JhcldpZHRoIDoKCQkJCQlzYW5pdHlXaWR0aDsKCQoJCQkvLyBJRTYvNyBhcmUgYSBsYXcgdW50byB0aGVtc2VsdmVzLi4uCgkJCWlmICggaWU2NyAmJiAoZGl2Qm9keUVsLnNjcm9sbEhlaWdodCA+CgkJCQlkaXZCb2R5RWwub2Zmc2V0SGVpZ2h0IHx8IGRpdkJvZHkuY3NzKCdvdmVyZmxvdy15JykgPT0gInNjcm9sbCIpCgkJCSkgewoJCQkJdGFibGVTdHlsZS53aWR0aCA9IF9mblN0cmluZ1RvQ3NzKCBjb3JyZWN0aW9uLWJhcldpZHRoICk7CgkJCX0KCQoJCQkvLyBBbmQgZ2l2ZSB0aGUgdXNlciBhIHdhcm5pbmcgdGhhdCB3ZSd2ZSBzdG9wcGVkIHRoZSB0YWJsZSBnZXR0aW5nIHRvbyBzbWFsbAoJCQlpZiAoIHNjcm9sbFggPT09ICIiIHx8IHNjcm9sbFhJbm5lciAhPT0gIiIgKSB7CgkJCQlfZm5Mb2coIHNldHRpbmdzLCAxLCAnUG9zc2libGUgY29sdW1uIG1pc2FsaWdubWVudCcsIDYgKTsKCQkJfQoJCX0KCQllbHNlCgkJewoJCQljb3JyZWN0aW9uID0gJzEwMCUnOwoJCX0KCQoJCS8vIEFwcGx5IHRvIHRoZSBjb250YWluZXIgZWxlbWVudHMKCQlkaXZCb2R5U3R5bGUud2lkdGggPSBfZm5TdHJpbmdUb0NzcyggY29ycmVjdGlvbiApOwoJCWRpdkhlYWRlclN0eWxlLndpZHRoID0gX2ZuU3RyaW5nVG9Dc3MoIGNvcnJlY3Rpb24gKTsKCQoJCWlmICggZm9vdGVyICkgewoJCQlzZXR0aW5ncy5uU2Nyb2xsRm9vdC5zdHlsZS53aWR0aCA9IF9mblN0cmluZ1RvQ3NzKCBjb3JyZWN0aW9uICk7CgkJfQoJCgkKCQkvKgoJCSAqIDQuIENsZWFuIHVwCgkJICovCgkJaWYgKCAhIHNjcm9sbFkgKSB7CgkJCS8qIElFNzwgcHV0cyBhIHZlcnRpY2FsIHNjcm9sbGJhciBpbiBwbGFjZSAod2hlbiBpdCBzaG91bGRuJ3QgYmUpIGR1ZSB0byBzdWJ0cmFjdGluZwoJCQkgKiB0aGUgc2Nyb2xsYmFyIGhlaWdodCBmcm9tIHRoZSB2aXNpYmxlIGRpc3BsYXksIHJhdGhlciB0aGFuIGFkZGluZyBpdCBvbi4gV2UgbmVlZCB0bwoJCQkgKiBzZXQgdGhlIGhlaWdodCBpbiBvcmRlciB0byBzb3J0IHRoaXMuIERvbid0IHdhbnQgdG8gZG8gaXQgaW4gYW55IG90aGVyIGJyb3dzZXJzLgoJCQkgKi8KCQkJaWYgKCBpZTY3ICkgewoJCQkJZGl2Qm9keVN0eWxlLmhlaWdodCA9IF9mblN0cmluZ1RvQ3NzKCB0YWJsZUVsLm9mZnNldEhlaWdodCtiYXJXaWR0aCApOwoJCQl9CgkJfQoJCgkJLyogRmluYWxseSBzZXQgdGhlIHdpZHRoJ3Mgb2YgdGhlIGhlYWRlciBhbmQgZm9vdGVyIHRhYmxlcyAqLwoJCXZhciBpT3V0ZXJXaWR0aCA9IHRhYmxlLm91dGVyV2lkdGgoKTsKCQlkaXZIZWFkZXJUYWJsZVswXS5zdHlsZS53aWR0aCA9IF9mblN0cmluZ1RvQ3NzKCBpT3V0ZXJXaWR0aCApOwoJCWRpdkhlYWRlcklubmVyU3R5bGUud2lkdGggPSBfZm5TdHJpbmdUb0NzcyggaU91dGVyV2lkdGggKTsKCQoJCS8vIEZpZ3VyZSBvdXQgaWYgdGhlcmUgYXJlIHNjcm9sbGJhciBwcmVzZW50IC0gaWYgc28gdGhlbiB3ZSBuZWVkIGEgdGhlIGhlYWRlciBhbmQgZm9vdGVyIHRvCgkJLy8gcHJvdmlkZSBhIGJpdCBtb3JlIHNwYWNlIHRvIGFsbG93ICJvdmVyZmxvdyIgc2Nyb2xsaW5nIChpLmUuIHBhc3QgdGhlIHNjcm9sbGJhcikKCQl2YXIgYlNjcm9sbGluZyA9IHRhYmxlLmhlaWdodCgpID4gZGl2Qm9keUVsLmNsaWVudEhlaWdodCB8fCBkaXZCb2R5LmNzcygnb3ZlcmZsb3cteScpID09ICJzY3JvbGwiOwoJCXZhciBwYWRkaW5nID0gJ3BhZGRpbmcnICsgKGJyb3dzZXIuYlNjcm9sbGJhckxlZnQgPyAnTGVmdCcgOiAnUmlnaHQnICk7CgkJZGl2SGVhZGVySW5uZXJTdHlsZVsgcGFkZGluZyBdID0gYlNjcm9sbGluZyA/IGJhcldpZHRoKyJweCIgOiAiMHB4IjsKCQoJCWlmICggZm9vdGVyICkgewoJCQlkaXZGb290ZXJUYWJsZVswXS5zdHlsZS53aWR0aCA9IF9mblN0cmluZ1RvQ3NzKCBpT3V0ZXJXaWR0aCApOwoJCQlkaXZGb290ZXJJbm5lclswXS5zdHlsZS53aWR0aCA9IF9mblN0cmluZ1RvQ3NzKCBpT3V0ZXJXaWR0aCApOwoJCQlkaXZGb290ZXJJbm5lclswXS5zdHlsZVtwYWRkaW5nXSA9IGJTY3JvbGxpbmcgPyBiYXJXaWR0aCsicHgiIDogIjBweCI7CgkJfQoJCgkJLy8gQ29ycmVjdCBET00gb3JkZXJpbmcgZm9yIGNvbGdyb3VwIC0gY29tZXMgYmVmb3JlIHRoZSB0aGVhZAoJCXRhYmxlLmNoaWxkcmVuKCdjb2xncm91cCcpLmluc2VydEJlZm9yZSggdGFibGUuY2hpbGRyZW4oJ3RoZWFkJykgKTsKCQoJCS8qIEFkanVzdCB0aGUgcG9zaXRpb24gb2YgdGhlIGhlYWRlciBpbiBjYXNlIHdlIGxvb3NlIHRoZSB5LXNjcm9sbGJhciAqLwoJCWRpdkJvZHkuc2Nyb2xsKCk7CgkKCQkvLyBJZiBzb3J0aW5nIG9yIGZpbHRlcmluZyBoYXMgb2NjdXJyZWQsIGp1bXAgdGhlIHNjcm9sbGluZyBiYWNrIHRvIHRoZSB0b3AKCQkvLyBvbmx5IGlmIHdlIGFyZW4ndCBob2xkaW5nIHRoZSBwb3NpdGlvbgoJCWlmICggKHNldHRpbmdzLmJTb3J0ZWQgfHwgc2V0dGluZ3MuYkZpbHRlcmVkKSAmJiAhIHNldHRpbmdzLl9kcmF3SG9sZCApIHsKCQkJZGl2Qm9keUVsLnNjcm9sbFRvcCA9IDA7CgkJfQoJfQoJCgkKCQoJLyoqCgkgKiBBcHBseSBhIGdpdmVuIGZ1bmN0aW9uIHRvIHRoZSBkaXNwbGF5IGNoaWxkIG5vZGVzIG9mIGFuIGVsZW1lbnQgYXJyYXkgKHR5cGljYWxseQoJICogVEQgY2hpbGRyZW4gb2YgVFIgcm93cwoJICogIEBwYXJhbSB7ZnVuY3Rpb259IGZuIE1ldGhvZCB0byBhcHBseSB0byB0aGUgb2JqZWN0cwoJICogIEBwYXJhbSBhcnJheSB7bm9kZXN9IGFuMSBMaXN0IG9mIGVsZW1lbnRzIHRvIGxvb2sgdGhyb3VnaCBmb3IgZGlzcGxheSBjaGlsZHJlbgoJICogIEBwYXJhbSBhcnJheSB7bm9kZXN9IGFuMiBBbm90aGVyIGxpc3QgKGlkZW50aWNhbCBzdHJ1Y3R1cmUgdG8gdGhlIGZpcnN0KSAtIG9wdGlvbmFsCgkgKiAgQG1lbWJlcm9mIERhdGFUYWJsZSNvQXBpCgkgKi8KCWZ1bmN0aW9uIF9mbkFwcGx5VG9DaGlsZHJlbiggZm4sIGFuMSwgYW4yICkKCXsKCQl2YXIgaW5kZXg9MCwgaT0wLCBpTGVuPWFuMS5sZW5ndGg7CgkJdmFyIG5Ob2RlMSwgbk5vZGUyOwoJCgkJd2hpbGUgKCBpIDwgaUxlbiApIHsKCQkJbk5vZGUxID0gYW4xW2ldLmZpcnN0Q2hpbGQ7CgkJCW5Ob2RlMiA9IGFuMiA/IGFuMltpXS5maXJzdENoaWxkIDogbnVsbDsKCQoJCQl3aGlsZSAoIG5Ob2RlMSApIHsKCQkJCWlmICggbk5vZGUxLm5vZGVUeXBlID09PSAxICkgewoJCQkJCWlmICggYW4yICkgewoJCQkJCQlmbiggbk5vZGUxLCBuTm9kZTIsIGluZGV4ICk7CgkJCQkJfQoJCQkJCWVsc2UgewoJCQkJCQlmbiggbk5vZGUxLCBpbmRleCApOwoJCQkJCX0KCQoJCQkJCWluZGV4Kys7CgkJCQl9CgkKCQkJCW5Ob2RlMSA9IG5Ob2RlMS5uZXh0U2libGluZzsKCQkJCW5Ob2RlMiA9IGFuMiA/IG5Ob2RlMi5uZXh0U2libGluZyA6IG51bGw7CgkJCX0KCQoJCQlpKys7CgkJfQoJfQoJCgkKCQoJdmFyIF9fcmVfaHRtbF9yZW1vdmUgPSAvPC4qPz4vZzsKCQoJCgkvKioKCSAqIENhbGN1bGF0ZSB0aGUgd2lkdGggb2YgY29sdW1ucyBmb3IgdGhlIHRhYmxlCgkgKiAgQHBhcmFtIHtvYmplY3R9IG9TZXR0aW5ncyBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJICogIEBtZW1iZXJvZiBEYXRhVGFibGUjb0FwaQoJICovCglmdW5jdGlvbiBfZm5DYWxjdWxhdGVDb2x1bW5XaWR0aHMgKCBvU2V0dGluZ3MgKQoJewoJCXZhcgoJCQl0YWJsZSA9IG9TZXR0aW5ncy5uVGFibGUsCgkJCWNvbHVtbnMgPSBvU2V0dGluZ3MuYW9Db2x1bW5zLAoJCQlzY3JvbGwgPSBvU2V0dGluZ3Mub1Njcm9sbCwKCQkJc2Nyb2xsWSA9IHNjcm9sbC5zWSwKCQkJc2Nyb2xsWCA9IHNjcm9sbC5zWCwKCQkJc2Nyb2xsWElubmVyID0gc2Nyb2xsLnNYSW5uZXIsCgkJCWNvbHVtbkNvdW50ID0gY29sdW1ucy5sZW5ndGgsCgkJCXZpc2libGVDb2x1bW5zID0gX2ZuR2V0Q29sdW1ucyggb1NldHRpbmdzLCAnYlZpc2libGUnICksCgkJCWhlYWRlckNlbGxzID0gJCgndGgnLCBvU2V0dGluZ3MublRIZWFkKSwKCQkJdGFibGVXaWR0aEF0dHIgPSB0YWJsZS5nZXRBdHRyaWJ1dGUoJ3dpZHRoJyksIC8vIGZyb20gRE9NIGVsZW1lbnQKCQkJdGFibGVDb250YWluZXIgPSB0YWJsZS5wYXJlbnROb2RlLAoJCQl1c2VySW5wdXRzID0gZmFsc2UsCgkJCWksIGNvbHVtbiwgY29sdW1uSWR4LCB3aWR0aCwgb3V0ZXJXaWR0aCwKCQkJYnJvd3NlciA9IG9TZXR0aW5ncy5vQnJvd3NlciwKCQkJaWU2NyA9IGJyb3dzZXIuYlNjcm9sbE92ZXJzaXplOwoJCgkJdmFyIHN0eWxlV2lkdGggPSB0YWJsZS5zdHlsZS53aWR0aDsKCQlpZiAoIHN0eWxlV2lkdGggJiYgc3R5bGVXaWR0aC5pbmRleE9mKCclJykgIT09IC0xICkgewoJCQl0YWJsZVdpZHRoQXR0ciA9IHN0eWxlV2lkdGg7CgkJfQoJCgkJLyogQ29udmVydCBhbnkgdXNlciBpbnB1dCBzaXplcyBpbnRvIHBpeGVsIHNpemVzICovCgkJZm9yICggaT0wIDsgaTx2aXNpYmxlQ29sdW1ucy5sZW5ndGggOyBpKysgKSB7CgkJCWNvbHVtbiA9IGNvbHVtbnNbIHZpc2libGVDb2x1bW5zW2ldIF07CgkKCQkJaWYgKCBjb2x1bW4uc1dpZHRoICE9PSBudWxsICkgewoJCQkJY29sdW1uLnNXaWR0aCA9IF9mbkNvbnZlcnRUb1dpZHRoKCBjb2x1bW4uc1dpZHRoT3JpZywgdGFibGVDb250YWluZXIgKTsKCQoJCQkJdXNlcklucHV0cyA9IHRydWU7CgkJCX0KCQl9CgkKCQkvKiBJZiB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIERPTSBlcXVhbHMgdGhlIG51bWJlciB0aGF0IHdlIGhhdmUgdG8KCQkgKiBwcm9jZXNzIGluIERhdGFUYWJsZXMsIHRoZW4gd2UgY2FuIHVzZSB0aGUgb2Zmc2V0cyB0aGF0IGFyZSBjcmVhdGVkIGJ5CgkJICogdGhlIHdlYi0gYnJvd3Nlci4gTm8gY3VzdG9tIHNpemVzIGNhbiBiZSBzZXQgaW4gb3JkZXIgZm9yIHRoaXMgdG8gaGFwcGVuLAoJCSAqIG5vciBzY3JvbGxpbmcgdXNlZAoJCSAqLwoJCWlmICggaWU2NyB8fCAhIHVzZXJJbnB1dHMgJiYgISBzY3JvbGxYICYmICEgc2Nyb2xsWSAmJgoJCSAgICAgY29sdW1uQ291bnQgPT0gX2ZuVmlzYmxlQ29sdW1ucyggb1NldHRpbmdzICkgJiYKCQkgICAgIGNvbHVtbkNvdW50ID09IGhlYWRlckNlbGxzLmxlbmd0aAoJCSkgewoJCQlmb3IgKCBpPTAgOyBpPGNvbHVtbkNvdW50IDsgaSsrICkgewoJCQkJdmFyIGNvbElkeCA9IF9mblZpc2libGVUb0NvbHVtbkluZGV4KCBvU2V0dGluZ3MsIGkgKTsKCQoJCQkJaWYgKCBjb2xJZHggIT09IG51bGwgKSB7CgkJCQkJY29sdW1uc1sgY29sSWR4IF0uc1dpZHRoID0gX2ZuU3RyaW5nVG9Dc3MoIGhlYWRlckNlbGxzLmVxKGkpLndpZHRoKCkgKTsKCQkJCX0KCQkJfQoJCX0KCQllbHNlCgkJewoJCQkvLyBPdGhlcndpc2UgY29uc3RydWN0IGEgc2luZ2xlIHJvdywgd29yc3QgY2FzZSwgdGFibGUgd2l0aCB0aGUgd2lkZXN0CgkJCS8vIG5vZGUgaW4gdGhlIGRhdGEsIGFzc2lnbiBhbnkgdXNlciBkZWZpbmVkIHdpZHRocywgdGhlbiBpbnNlcnQgaXQgaW50bwoJCQkvLyB0aGUgRE9NIGFuZCBhbGxvdyB0aGUgYnJvd3NlciB0byBkbyBhbGwgdGhlIGhhcmQgd29yayBvZiBjYWxjdWxhdGluZwoJCQkvLyB0YWJsZSB3aWR0aHMKCQkJdmFyIHRtcFRhYmxlID0gJCh0YWJsZSkuY2xvbmUoKSAvLyBkb24ndCB1c2UgY2xvbmVOb2RlIC0gSUU4IHdpbGwgcmVtb3ZlIGV2ZW50cyBvbiB0aGUgbWFpbiB0YWJsZQoJCQkJLmNzcyggJ3Zpc2liaWxpdHknLCAnaGlkZGVuJyApCgkJCQkucmVtb3ZlQXR0ciggJ2lkJyApOwoJCgkJCS8vIENsZWFuIHVwIHRoZSB0YWJsZSBib2R5CgkJCXRtcFRhYmxlLmZpbmQoJ3Rib2R5IHRyJykucmVtb3ZlKCk7CgkJCXZhciB0ciA9ICQoJzx0ci8+JykuYXBwZW5kVG8oIHRtcFRhYmxlLmZpbmQoJ3Rib2R5JykgKTsKCQoJCQkvLyBDbG9uZSB0aGUgdGFibGUgaGVhZGVyIGFuZCBmb290ZXIgLSB3ZSBjYW4ndCB1c2UgdGhlIGhlYWRlciAvIGZvb3RlcgoJCQkvLyBmcm9tIHRoZSBjbG9uZWQgdGFibGUsIHNpbmNlIGlmIHNjcm9sbGluZyBpcyBhY3RpdmUsIHRoZSB0YWJsZSdzCgkJCS8vIHJlYWwgaGVhZGVyIGFuZCBmb290ZXIgYXJlIGNvbnRhaW5lZCBpbiBkaWZmZXJlbnQgdGFibGUgdGFncwoJCQl0bXBUYWJsZS5maW5kKCd0aGVhZCwgdGZvb3QnKS5yZW1vdmUoKTsKCQkJdG1wVGFibGUKCQkJCS5hcHBlbmQoICQob1NldHRpbmdzLm5USGVhZCkuY2xvbmUoKSApCgkJCQkuYXBwZW5kKCAkKG9TZXR0aW5ncy5uVEZvb3QpLmNsb25lKCkgKTsKCQoJCQkvLyBSZW1vdmUgYW55IGFzc2lnbmVkIHdpZHRocyBmcm9tIHRoZSBmb290ZXIgKGZyb20gc2Nyb2xsaW5nKQoJCQl0bXBUYWJsZS5maW5kKCd0Zm9vdCB0aCwgdGZvb3QgdGQnKS5jc3MoJ3dpZHRoJywgJycpOwoJCgkJCS8vIEFwcGx5IGN1c3RvbSBzaXppbmcgdG8gdGhlIGNsb25lZCBoZWFkZXIKCQkJaGVhZGVyQ2VsbHMgPSBfZm5HZXRVbmlxdWVUaHMoIG9TZXR0aW5ncywgdG1wVGFibGUuZmluZCgndGhlYWQnKVswXSApOwoJCgkJCWZvciAoIGk9MCA7IGk8dmlzaWJsZUNvbHVtbnMubGVuZ3RoIDsgaSsrICkgewoJCQkJY29sdW1uID0gY29sdW1uc1sgdmlzaWJsZUNvbHVtbnNbaV0gXTsKCQoJCQkJaGVhZGVyQ2VsbHNbaV0uc3R5bGUud2lkdGggPSBjb2x1bW4uc1dpZHRoT3JpZyAhPT0gbnVsbCAmJiBjb2x1bW4uc1dpZHRoT3JpZyAhPT0gJycgPwoJCQkJCV9mblN0cmluZ1RvQ3NzKCBjb2x1bW4uc1dpZHRoT3JpZyApIDoKCQkJCQknJzsKCQoJCQkJLy8gRm9yIHNjcm9sbFggd2UgbmVlZCB0byBmb3JjZSB0aGUgY29sdW1uIHdpZHRoIG90aGVyd2lzZSB0aGUKCQkJCS8vIGJyb3dzZXIgd2lsbCBjb2xsYXBzZSBpdC4gSWYgdGhpcyB3aWR0aCBpcyBzbWFsbGVyIHRoYW4gdGhlCgkJCQkvLyB3aWR0aCB0aGUgY29sdW1uIHJlcXVpcmVzLCB0aGVuIGl0IHdpbGwgaGF2ZSBubyBlZmZlY3QKCQkJCWlmICggY29sdW1uLnNXaWR0aE9yaWcgJiYgc2Nyb2xsWCApIHsKCQkJCQkkKCBoZWFkZXJDZWxsc1tpXSApLmFwcGVuZCggJCgnPGRpdi8+JykuY3NzKCB7CgkJCQkJCXdpZHRoOiBjb2x1bW4uc1dpZHRoT3JpZywKCQkJCQkJbWFyZ2luOiAwLAoJCQkJCQlwYWRkaW5nOiAwLAoJCQkJCQlib3JkZXI6IDAsCgkJCQkJCWhlaWdodDogMQoJCQkJCX0gKSApOwoJCQkJfQoJCQl9CgkKCQkJLy8gRmluZCB0aGUgd2lkZXN0IGNlbGwgZm9yIGVhY2ggY29sdW1uIGFuZCBwdXQgaXQgaW50byB0aGUgdGFibGUKCQkJaWYgKCBvU2V0dGluZ3MuYW9EYXRhLmxlbmd0aCApIHsKCQkJCWZvciAoIGk9MCA7IGk8dmlzaWJsZUNvbHVtbnMubGVuZ3RoIDsgaSsrICkgewoJCQkJCWNvbHVtbklkeCA9IHZpc2libGVDb2x1bW5zW2ldOwoJCQkJCWNvbHVtbiA9IGNvbHVtbnNbIGNvbHVtbklkeCBdOwoJCgkJCQkJJCggX2ZuR2V0V2lkZXN0Tm9kZSggb1NldHRpbmdzLCBjb2x1bW5JZHggKSApCgkJCQkJCS5jbG9uZSggZmFsc2UgKQoJCQkJCQkuYXBwZW5kKCBjb2x1bW4uc0NvbnRlbnRQYWRkaW5nICkKCQkJCQkJLmFwcGVuZFRvKCB0ciApOwoJCQkJfQoJCQl9CgkKCQkJLy8gVGlkeSB0aGUgdGVtcG9yYXJ5IHRhYmxlIC0gcmVtb3ZlIG5hbWUgYXR0cmlidXRlcyBzbyB0aGVyZSBhcmVuJ3QKCQkJLy8gZHVwbGljYXRlZCBpbiB0aGUgZG9tIChyYWRpbyBlbGVtZW50cyBmb3IgZXhhbXBsZSkKCQkJJCgnW25hbWVdJywgdG1wVGFibGUpLnJlbW92ZUF0dHIoJ25hbWUnKTsKCQoJCQkvLyBUYWJsZSBoYXMgYmVlbiBidWlsdCwgYXR0YWNoIHRvIHRoZSBkb2N1bWVudCBzbyB3ZSBjYW4gd29yayB3aXRoIGl0LgoJCQkvLyBBIGhvbGRpbmcgZWxlbWVudCBpcyB1c2VkLCBwb3NpdGlvbmVkIGF0IHRoZSB0b3Agb2YgdGhlIGNvbnRhaW5lcgoJCQkvLyB3aXRoIG1pbmltYWwgaGVpZ2h0LCBzbyBpdCBoYXMgbm8gZWZmZWN0IG9uIGlmIHRoZSBjb250YWluZXIgc2Nyb2xscwoJCQkvLyBvciBub3QuIE90aGVyd2lzZSBpdCBtaWdodCB0cmlnZ2VyIHNjcm9sbGluZyB3aGVuIGl0IGFjdHVhbGx5IGlzbid0CgkJCS8vIG5lZWRlZAoJCQl2YXIgaG9sZGVyID0gJCgnPGRpdi8+JykuY3NzKCBzY3JvbGxYIHx8IHNjcm9sbFkgPwoJCQkJCXsKCQkJCQkJcG9zaXRpb246ICdhYnNvbHV0ZScsCgkJCQkJCXRvcDogMCwKCQkJCQkJbGVmdDogMCwKCQkJCQkJaGVpZ2h0OiAxLAoJCQkJCQlyaWdodDogMCwKCQkJCQkJb3ZlcmZsb3c6ICdoaWRkZW4nCgkJCQkJfSA6CgkJCQkJe30KCQkJCSkKCQkJCS5hcHBlbmQoIHRtcFRhYmxlICkKCQkJCS5hcHBlbmRUbyggdGFibGVDb250YWluZXIgKTsKCQoJCQkvLyBXaGVuIHNjcm9sbGluZyAoWCBvciBZKSB3ZSB3YW50IHRvIHNldCB0aGUgd2lkdGggb2YgdGhlIHRhYmxlIGFzIAoJCQkvLyBhcHByb3ByaWF0ZS4gSG93ZXZlciwgd2hlbiBub3Qgc2Nyb2xsaW5nIGxlYXZlIHRoZSB0YWJsZSB3aWR0aCBhcyBpdAoJCQkvLyBpcy4gVGhpcyByZXN1bHRzIGluIHNsaWdodGx5IGRpZmZlcmVudCwgYnV0IEkgdGhpbmsgY29ycmVjdCBiZWhhdmlvdXIKCQkJaWYgKCBzY3JvbGxYICYmIHNjcm9sbFhJbm5lciApIHsKCQkJCXRtcFRhYmxlLndpZHRoKCBzY3JvbGxYSW5uZXIgKTsKCQkJfQoJCQllbHNlIGlmICggc2Nyb2xsWCApIHsKCQkJCXRtcFRhYmxlLmNzcyggJ3dpZHRoJywgJ2F1dG8nICk7CgkJCQl0bXBUYWJsZS5yZW1vdmVBdHRyKCd3aWR0aCcpOwoJCgkJCQkvLyBJZiB0aGVyZSBpcyBubyB3aWR0aCBhdHRyaWJ1dGUgb3Igc3R5bGUsIHRoZW4gYWxsb3cgdGhlIHRhYmxlIHRvCgkJCQkvLyBjb2xsYXBzZQoJCQkJaWYgKCB0bXBUYWJsZS53aWR0aCgpIDwgdGFibGVDb250YWluZXIuY2xpZW50V2lkdGggJiYgdGFibGVXaWR0aEF0dHIgKSB7CgkJCQkJdG1wVGFibGUud2lkdGgoIHRhYmxlQ29udGFpbmVyLmNsaWVudFdpZHRoICk7CgkJCQl9CgkJCX0KCQkJZWxzZSBpZiAoIHNjcm9sbFkgKSB7CgkJCQl0bXBUYWJsZS53aWR0aCggdGFibGVDb250YWluZXIuY2xpZW50V2lkdGggKTsKCQkJfQoJCQllbHNlIGlmICggdGFibGVXaWR0aEF0dHIgKSB7CgkJCQl0bXBUYWJsZS53aWR0aCggdGFibGVXaWR0aEF0dHIgKTsKCQkJfQoJCgkJCS8vIEdldCB0aGUgd2lkdGggb2YgZWFjaCBjb2x1bW4gaW4gdGhlIGNvbnN0cnVjdGVkIHRhYmxlIC0gd2UgbmVlZCB0bwoJCQkvLyBrbm93IHRoZSBpbm5lciB3aWR0aCAoc28gaXQgY2FuIGJlIGFzc2lnbmVkIHRvIHRoZSBvdGhlciB0YWJsZSdzCgkJCS8vIGNlbGxzKSBhbmQgdGhlIG91dGVyIHdpZHRoIHNvIHdlIGNhbiBjYWxjdWxhdGUgdGhlIGZ1bGwgd2lkdGggb2YgdGhlCgkJCS8vIHRhYmxlLiBUaGlzIGlzIHNhZmUgc2luY2UgRGF0YVRhYmxlcyByZXF1aXJlcyBhIHVuaXF1ZSBjZWxsIGZvciBlYWNoCgkJCS8vIGNvbHVtbiwgYnV0IGlmIGV2ZXIgYSBoZWFkZXIgY2FuIHNwYW4gbXVsdGlwbGUgY29sdW1ucywgdGhpcyB3aWxsCgkJCS8vIG5lZWQgdG8gYmUgbW9kaWZpZWQuCgkJCXZhciB0b3RhbCA9IDA7CgkJCWZvciAoIGk9MCA7IGk8dmlzaWJsZUNvbHVtbnMubGVuZ3RoIDsgaSsrICkgewoJCQkJdmFyIGNlbGwgPSAkKGhlYWRlckNlbGxzW2ldKTsKCQkJCXZhciBib3JkZXIgPSBjZWxsLm91dGVyV2lkdGgoKSAtIGNlbGwud2lkdGgoKTsKCQoJCQkJLy8gVXNlIGdldEJvdW5kaW5nLi4uIHdoZXJlIHBvc3NpYmxlIChub3QgSUU4LSkgYmVjYXVzZSBpdCBjYW4gZ2l2ZQoJCQkJLy8gc3ViLXBpeGVsIGFjY3VyYWN5LCB3aGljaCB3ZSB0aGVuIHdhbnQgdG8gcm91bmQgdXAhCgkJCQl2YXIgYm91bmRpbmcgPSBicm93c2VyLmJCb3VuZGluZyA/CgkJCQkJTWF0aC5jZWlsKCBoZWFkZXJDZWxsc1tpXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCApIDoKCQkJCQljZWxsLm91dGVyV2lkdGgoKTsKCQoJCQkJLy8gVG90YWwgaXMgdHJhY2tlZCB0byByZW1vdmUgYW55IHN1Yi1waXhlbCBlcnJvcnMgYXMgdGhlIG91dGVyV2lkdGgKCQkJCS8vIG9mIHRoZSB0YWJsZSBtaWdodCBub3QgZXF1YWwgdGhlIHRvdGFsIGdpdmVuIGhlcmUgKElFISkuCgkJCQl0b3RhbCArPSBib3VuZGluZzsKCQoJCQkJLy8gV2lkdGggZm9yIGVhY2ggY29sdW1uIHRvIHVzZQoJCQkJY29sdW1uc1sgdmlzaWJsZUNvbHVtbnNbaQ=="
},
{
"key": "jquery.dataTables.js?4?4?1",
"type": "binary",
"value": "base64:XSBdLnNXaWR0aCA9IF9mblN0cmluZ1RvQ3NzKCBib3VuZGluZyAtIGJvcmRlciApOwoJCQl9CgkKCQkJdGFibGUuc3R5bGUud2lkdGggPSBfZm5TdHJpbmdUb0NzcyggdG90YWwgKTsKCQoJCQkvLyBGaW5pc2hlZCB3aXRoIHRoZSB0YWJsZSAtIGRpdGNoIGl0CgkJCWhvbGRlci5yZW1vdmUoKTsKCQl9CgkKCQkvLyBJZiB0aGVyZSBpcyBhIHdpZHRoIGF0dHIsIHdlIHdhbnQgdG8gYXR0YWNoIGFuIGV2ZW50IGxpc3RlbmVyIHdoaWNoCgkJLy8gYWxsb3dzIHRoZSB0YWJsZSBzaXppbmcgdG8gYXV0b21hdGljYWxseSBhZGp1c3Qgd2hlbiB0aGUgd2luZG93IGlzCgkJLy8gcmVzaXplZC4gVXNlIHRoZSB3aWR0aCBhdHRyIHJhdGhlciB0aGFuIENTUywgc2luY2Ugd2UgY2FuJ3Qga25vdyBpZiB0aGUKCQkvLyBDU1MgaXMgYSByZWxhdGl2ZSB2YWx1ZSBvciBhYnNvbHV0ZSAtIERPTSByZWFkIGlzIGFsd2F5cyBweC4KCQlpZiAoIHRhYmxlV2lkdGhBdHRyICkgewoJCQl0YWJsZS5zdHlsZS53aWR0aCA9IF9mblN0cmluZ1RvQ3NzKCB0YWJsZVdpZHRoQXR0ciApOwoJCX0KCQoJCWlmICggKHRhYmxlV2lkdGhBdHRyIHx8IHNjcm9sbFgpICYmICEgb1NldHRpbmdzLl9yZXN6RXZ0ICkgewoJCQl2YXIgYmluZFJlc2l6ZSA9IGZ1bmN0aW9uICgpIHsKCQkJCSQod2luZG93KS5vbigncmVzaXplLkRULScrb1NldHRpbmdzLnNJbnN0YW5jZSwgX2ZuVGhyb3R0bGUoIGZ1bmN0aW9uICgpIHsKCQkJCQlfZm5BZGp1c3RDb2x1bW5TaXppbmcoIG9TZXR0aW5ncyApOwoJCQkJfSApICk7CgkJCX07CgkKCQkJLy8gSUU2Lzcgd2lsbCBjcmFzaCBpZiB3ZSBiaW5kIGEgcmVzaXplIGV2ZW50IGhhbmRsZXIgb24gcGFnZSBsb2FkLgoJCQkvLyBUbyBiZSByZW1vdmVkIGluIDEuMTEgd2hpY2ggZHJvcHMgSUU2Lzcgc3VwcG9ydAoJCQlpZiAoIGllNjcgKSB7CgkJCQlzZXRUaW1lb3V0KCBiaW5kUmVzaXplLCAxMDAwICk7CgkJCX0KCQkJZWxzZSB7CgkJCQliaW5kUmVzaXplKCk7CgkJCX0KCQoJCQlvU2V0dGluZ3MuX3Jlc3pFdnQgPSB0cnVlOwoJCX0KCX0KCQoJCgkvKioKCSAqIFRocm90dGxlIHRoZSBjYWxscyB0byBhIGZ1bmN0aW9uLiBBcmd1bWVudHMgYW5kIGNvbnRleHQgYXJlIG1haW50YWluZWQgZm9yCgkgKiB0aGUgdGhyb3R0bGVkIGZ1bmN0aW9uCgkgKiAgQHBhcmFtIHtmdW5jdGlvbn0gZm4gRnVuY3Rpb24gdG8gYmUgY2FsbGVkCgkgKiAgQHBhcmFtIHtpbnR9IFtmcmVxPTIwMF0gY2FsbCBmcmVxdWVuY3kgaW4gbVMKCSAqICBAcmV0dXJucyB7ZnVuY3Rpb259IHdyYXBwZWQgZnVuY3Rpb24KCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJdmFyIF9mblRocm90dGxlID0gRGF0YVRhYmxlLnV0aWwudGhyb3R0bGU7CgkKCQoJLyoqCgkgKiBDb252ZXJ0IGEgQ1NTIHVuaXQgd2lkdGggdG8gcGl4ZWxzIChlLmcuIDJlbSkKCSAqICBAcGFyYW0ge3N0cmluZ30gd2lkdGggd2lkdGggdG8gYmUgY29udmVydGVkCgkgKiAgQHBhcmFtIHtub2RlfSBwYXJlbnQgcGFyZW50IHRvIGdldCB0aGUgd2l0aCBmb3IgKHJlcXVpcmVkIGZvciByZWxhdGl2ZSB3aWR0aHMpIC0gb3B0aW9uYWwKCSAqICBAcmV0dXJucyB7aW50fSB3aWR0aCBpbiBwaXhlbHMKCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuQ29udmVydFRvV2lkdGggKCB3aWR0aCwgcGFyZW50ICkKCXsKCQlpZiAoICEgd2lkdGggKSB7CgkJCXJldHVybiAwOwoJCX0KCQoJCXZhciBuID0gJCgnPGRpdi8+JykKCQkJLmNzcyggJ3dpZHRoJywgX2ZuU3RyaW5nVG9Dc3MoIHdpZHRoICkgKQoJCQkuYXBwZW5kVG8oIHBhcmVudCB8fCBkb2N1bWVudC5ib2R5ICk7CgkKCQl2YXIgdmFsID0gblswXS5vZmZzZXRXaWR0aDsKCQluLnJlbW92ZSgpOwoJCgkJcmV0dXJuIHZhbDsKCX0KCQoJCgkvKioKCSAqIEdldCB0aGUgd2lkZXN0IG5vZGUKCSAqICBAcGFyYW0ge29iamVjdH0gc2V0dGluZ3MgZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCSAqICBAcGFyYW0ge2ludH0gY29sSWR4IGNvbHVtbiBvZiBpbnRlcmVzdAoJICogIEByZXR1cm5zIHtub2RlfSB3aWRlc3QgdGFibGUgbm9kZQoJICogIEBtZW1iZXJvZiBEYXRhVGFibGUjb0FwaQoJICovCglmdW5jdGlvbiBfZm5HZXRXaWRlc3ROb2RlKCBzZXR0aW5ncywgY29sSWR4ICkKCXsKCQl2YXIgaWR4ID0gX2ZuR2V0TWF4TGVuU3RyaW5nKCBzZXR0aW5ncywgY29sSWR4ICk7CgkJaWYgKCBpZHggPCAwICkgewoJCQlyZXR1cm4gbnVsbDsKCQl9CgkKCQl2YXIgZGF0YSA9IHNldHRpbmdzLmFvRGF0YVsgaWR4IF07CgkJcmV0dXJuICEgZGF0YS5uVHIgPyAvLyBNaWdodCBub3QgaGF2ZSBiZWVuIGNyZWF0ZWQgd2hlbiBkZWZlcnJlZCByZW5kZXJpbmcKCQkJJCgnPHRkLz4nKS5odG1sKCBfZm5HZXRDZWxsRGF0YSggc2V0dGluZ3MsIGlkeCwgY29sSWR4LCAnZGlzcGxheScgKSApWzBdIDoKCQkJZGF0YS5hbkNlbGxzWyBjb2xJZHggXTsKCX0KCQoJCgkvKioKCSAqIEdldCB0aGUgbWF4aW11bSBzdHJsZW4gZm9yIGVhY2ggZGF0YSBjb2x1bW4KCSAqICBAcGFyYW0ge29iamVjdH0gc2V0dGluZ3MgZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCSAqICBAcGFyYW0ge2ludH0gY29sSWR4IGNvbHVtbiBvZiBpbnRlcmVzdAoJICogIEByZXR1cm5zIHtzdHJpbmd9IG1heCBzdHJpbmcgbGVuZ3RoIGZvciBlYWNoIGNvbHVtbgoJICogIEBtZW1iZXJvZiBEYXRhVGFibGUjb0FwaQoJICovCglmdW5jdGlvbiBfZm5HZXRNYXhMZW5TdHJpbmcoIHNldHRpbmdzLCBjb2xJZHggKQoJewoJCXZhciBzLCBtYXg9LTEsIG1heElkeCA9IC0xOwoJCgkJZm9yICggdmFyIGk9MCwgaWVuPXNldHRpbmdzLmFvRGF0YS5sZW5ndGggOyBpPGllbiA7IGkrKyApIHsKCQkJcyA9IF9mbkdldENlbGxEYXRhKCBzZXR0aW5ncywgaSwgY29sSWR4LCAnZGlzcGxheScgKSsnJzsKCQkJcyA9IHMucmVwbGFjZSggX19yZV9odG1sX3JlbW92ZSwgJycgKTsKCQkJcyA9IHMucmVwbGFjZSggLyZuYnNwOy9nLCAnICcgKTsKCQoJCQlpZiAoIHMubGVuZ3RoID4gbWF4ICkgewoJCQkJbWF4ID0gcy5sZW5ndGg7CgkJCQltYXhJZHggPSBpOwoJCQl9CgkJfQoJCgkJcmV0dXJuIG1heElkeDsKCX0KCQoJCgkvKioKCSAqIEFwcGVuZCBhIENTUyB1bml0IChvbmx5IGlmIHJlcXVpcmVkKSB0byBhIHN0cmluZwoJICogIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSB0byBjc3MtaWZ5CgkgKiAgQHJldHVybnMge3N0cmluZ30gdmFsdWUgd2l0aCBjc3MgdW5pdAoJICogIEBtZW1iZXJvZiBEYXRhVGFibGUjb0FwaQoJICovCglmdW5jdGlvbiBfZm5TdHJpbmdUb0NzcyggcyApCgl7CgkJaWYgKCBzID09PSBudWxsICkgewoJCQlyZXR1cm4gJzBweCc7CgkJfQoJCgkJaWYgKCB0eXBlb2YgcyA9PSAnbnVtYmVyJyApIHsKCQkJcmV0dXJuIHMgPCAwID8KCQkJCScwcHgnIDoKCQkJCXMrJ3B4JzsKCQl9CgkKCQkvLyBDaGVjayBpdCBoYXMgYSB1bml0IGNoYXJhY3RlciBhbHJlYWR5CgkJcmV0dXJuIHMubWF0Y2goL1xkJC8pID8KCQkJcysncHgnIDoKCQkJczsKCX0KCQoJCgkKCWZ1bmN0aW9uIF9mblNvcnRGbGF0dGVuICggc2V0dGluZ3MgKQoJewoJCXZhcgoJCQlpLCBpTGVuLCBrLCBrTGVuLAoJCQlhU29ydCA9IFtdLAoJCQlhaU9yaWcgPSBbXSwKCQkJYW9Db2x1bW5zID0gc2V0dGluZ3MuYW9Db2x1bW5zLAoJCQlhRGF0YVNvcnQsIGlDb2wsIHNUeXBlLCBzcmNDb2wsCgkJCWZpeGVkID0gc2V0dGluZ3MuYWFTb3J0aW5nRml4ZWQsCgkJCWZpeGVkT2JqID0gJC5pc1BsYWluT2JqZWN0KCBmaXhlZCApLAoJCQluZXN0ZWRTb3J0ID0gW10sCgkJCWFkZCA9IGZ1bmN0aW9uICggYSApIHsKCQkJCWlmICggYS5sZW5ndGggJiYgISAkLmlzQXJyYXkoIGFbMF0gKSApIHsKCQkJCQkvLyAxRCBhcnJheQoJCQkJCW5lc3RlZFNvcnQucHVzaCggYSApOwoJCQkJfQoJCQkJZWxzZSB7CgkJCQkJLy8gMkQgYXJyYXkKCQkJCQkkLm1lcmdlKCBuZXN0ZWRTb3J0LCBhICk7CgkJCQl9CgkJCX07CgkKCQkvLyBCdWlsZCB0aGUgc29ydCBhcnJheSwgd2l0aCBwcmUtZml4IGFuZCBwb3N0LWZpeCBvcHRpb25zIGlmIHRoZXkgaGF2ZSBiZWVuCgkJLy8gc3BlY2lmaWVkCgkJaWYgKCAkLmlzQXJyYXkoIGZpeGVkICkgKSB7CgkJCWFkZCggZml4ZWQgKTsKCQl9CgkKCQlpZiAoIGZpeGVkT2JqICYmIGZpeGVkLnByZSApIHsKCQkJYWRkKCBmaXhlZC5wcmUgKTsKCQl9CgkKCQlhZGQoIHNldHRpbmdzLmFhU29ydGluZyApOwoJCgkJaWYgKGZpeGVkT2JqICYmIGZpeGVkLnBvc3QgKSB7CgkJCWFkZCggZml4ZWQucG9zdCApOwoJCX0KCQoJCWZvciAoIGk9MCA7IGk8bmVzdGVkU29ydC5sZW5ndGggOyBpKysgKQoJCXsKCQkJc3JjQ29sID0gbmVzdGVkU29ydFtpXVswXTsKCQkJYURhdGFTb3J0ID0gYW9Db2x1bW5zWyBzcmNDb2wgXS5hRGF0YVNvcnQ7CgkKCQkJZm9yICggaz0wLCBrTGVuPWFEYXRhU29ydC5sZW5ndGggOyBrPGtMZW4gOyBrKysgKQoJCQl7CgkJCQlpQ29sID0gYURhdGFTb3J0W2tdOwoJCQkJc1R5cGUgPSBhb0NvbHVtbnNbIGlDb2wgXS5zVHlwZSB8fCAnc3RyaW5nJzsKCQoJCQkJaWYgKCBuZXN0ZWRTb3J0W2ldLl9pZHggPT09IHVuZGVmaW5lZCApIHsKCQkJCQluZXN0ZWRTb3J0W2ldLl9pZHggPSAkLmluQXJyYXkoIG5lc3RlZFNvcnRbaV1bMV0sIGFvQ29sdW1uc1tpQ29sXS5hc1NvcnRpbmcgKTsKCQkJCX0KCQoJCQkJYVNvcnQucHVzaCggewoJCQkJCXNyYzogICAgICAgc3JjQ29sLAoJCQkJCWNvbDogICAgICAgaUNvbCwKCQkJCQlkaXI6ICAgICAgIG5lc3RlZFNvcnRbaV1bMV0sCgkJCQkJaW5kZXg6ICAgICBuZXN0ZWRTb3J0W2ldLl9pZHgsCgkJCQkJdHlwZTogICAgICBzVHlwZSwKCQkJCQlmb3JtYXR0ZXI6IERhdGFUYWJsZS5leHQudHlwZS5vcmRlclsgc1R5cGUrIi1wcmUiIF0KCQkJCX0gKTsKCQkJfQoJCX0KCQoJCXJldHVybiBhU29ydDsKCX0KCQoJLyoqCgkgKiBDaGFuZ2UgdGhlIG9yZGVyIG9mIHRoZSB0YWJsZQoJICogIEBwYXJhbSB7b2JqZWN0fSBvU2V0dGluZ3MgZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqICBAdG9kbyBUaGlzIHJlYWxseSBuZWVkcyBzcGxpdCB1cCEKCSAqLwoJZnVuY3Rpb24gX2ZuU29ydCAoIG9TZXR0aW5ncyApCgl7CgkJdmFyCgkJCWksIGllbiwgaUxlbiwgaiwgakxlbiwgaywga0xlbiwKCQkJc0RhdGFUeXBlLCBuVGgsCgkJCWFpT3JpZyA9IFtdLAoJCQlvRXh0U29ydCA9IERhdGFUYWJsZS5leHQudHlwZS5vcmRlciwKCQkJYW9EYXRhID0gb1NldHRpbmdzLmFvRGF0YSwKCQkJYW9Db2x1bW5zID0gb1NldHRpbmdzLmFvQ29sdW1ucywKCQkJYURhdGFTb3J0LCBkYXRhLCBpQ29sLCBzVHlwZSwgb1NvcnQsCgkJCWZvcm1hdHRlcnMgPSAwLAoJCQlzb3J0Q29sLAoJCQlkaXNwbGF5TWFzdGVyID0gb1NldHRpbmdzLmFpRGlzcGxheU1hc3RlciwKCQkJYVNvcnQ7CgkKCQkvLyBSZXNvbHZlIGFueSBjb2x1bW4gdHlwZXMgdGhhdCBhcmUgdW5rbm93biBkdWUgdG8gYWRkaXRpb24gb3IgaW52YWxpZGF0aW9uCgkJLy8gQHRvZG8gQ2FuIHRoaXMgYmUgbW92ZWQgaW50byBhICdkYXRhLXJlYWR5JyBoYW5kbGVyIHdoaWNoIGlzIGNhbGxlZCB3aGVuCgkJLy8gICBkYXRhIGlzIGdvaW5nIHRvIGJlIHVzZWQgaW4gdGhlIHRhYmxlPwoJCV9mbkNvbHVtblR5cGVzKCBvU2V0dGluZ3MgKTsKCQoJCWFTb3J0ID0gX2ZuU29ydEZsYXR0ZW4oIG9TZXR0aW5ncyApOwoJCgkJZm9yICggaT0wLCBpZW49YVNvcnQubGVuZ3RoIDsgaTxpZW4gOyBpKysgKSB7CgkJCXNvcnRDb2wgPSBhU29ydFtpXTsKCQoJCQkvLyBUcmFjayBpZiB3ZSBjYW4gdXNlIHRoZSBmYXN0IHNvcnQgYWxnb3JpdGhtCgkJCWlmICggc29ydENvbC5mb3JtYXR0ZXIgKSB7CgkJCQlmb3JtYXR0ZXJzKys7CgkJCX0KCQoJCQkvLyBMb2FkIHRoZSBkYXRhIG5lZWRlZCBmb3IgdGhlIHNvcnQsIGZvciBlYWNoIGNlbGwKCQkJX2ZuU29ydERhdGEoIG9TZXR0aW5ncywgc29ydENvbC5jb2wgKTsKCQl9CgkKCQkvKiBObyBzb3J0aW5nIHJlcXVpcmVkIGlmIHNlcnZlci1zaWRlIG9yIG5vIHNvcnRpbmcgYXJyYXkgKi8KCQlpZiAoIF9mbkRhdGFTb3VyY2UoIG9TZXR0aW5ncyApICE9ICdzc3AnICYmIGFTb3J0Lmxlbmd0aCAhPT0gMCApCgkJewoJCQkvLyBDcmVhdGUgYSB2YWx1ZSAtIGtleSBhcnJheSBvZiB0aGUgY3VycmVudCByb3cgcG9zaXRpb25zIHN1Y2ggdGhhdCB3ZSBjYW4gdXNlIHRoZWlyCgkJCS8vIGN1cnJlbnQgcG9zaXRpb24gZHVyaW5nIHRoZSBzb3J0LCBpZiB2YWx1ZXMgbWF0Y2gsIGluIG9yZGVyIHRvIHBlcmZvcm0gc3RhYmxlIHNvcnRpbmcKCQkJZm9yICggaT0wLCBpTGVuPWRpc3BsYXlNYXN0ZXIubGVuZ3RoIDsgaTxpTGVuIDsgaSsrICkgewoJCQkJYWlPcmlnWyBkaXNwbGF5TWFzdGVyW2ldIF0gPSBpOwoJCQl9CgkKCQkJLyogRG8gdGhlIHNvcnQgLSBoZXJlIHdlIHdhbnQgbXVsdGktY29sdW1uIHNvcnRpbmcgYmFzZWQgb24gYSBnaXZlbiBkYXRhIHNvdXJjZSAoY29sdW1uKQoJCQkgKiBhbmQgc29ydGluZyBmdW5jdGlvbiAoZnJvbSBvU29ydCkgaW4gYSBjZXJ0YWluIGRpcmVjdGlvbi4gSXQncyByZWFzb25hYmx5IGNvbXBsZXggdG8KCQkJICogZm9sbG93IG9uIGl0J3Mgb3duLCBidXQgdGhpcyBpcyB3aGF0IHdlIHdhbnQgKGV4YW1wbGUgdHdvIGNvbHVtbiBzb3J0aW5nKToKCQkJICogIGZuTG9jYWxTb3J0aW5nID0gZnVuY3Rpb24oYSxiKXsKCQkJICogICAgdmFyIGlUZXN0OwoJCQkgKiAgICBpVGVzdCA9IG9Tb3J0WydzdHJpbmctYXNjJ10oJ2RhdGExMScsICdkYXRhMTInKTsKCQkJICogICAgICBpZiAoaVRlc3QgIT09IDApCgkJCSAqICAgICAgICByZXR1cm4gaVRlc3Q7CgkJCSAqICAgIGlUZXN0ID0gb1NvcnRbJ251bWVyaWMtZGVzYyddKCdkYXRhMjEnLCAnZGF0YTIyJyk7CgkJCSAqICAgIGlmIChpVGVzdCAhPT0gMCkKCQkJICogICAgICByZXR1cm4gaVRlc3Q7CgkJCSAqICAgIHJldHVybiBvU29ydFsnbnVtZXJpYy1hc2MnXSggYWlPcmlnW2FdLCBhaU9yaWdbYl0gKTsKCQkJICogIH0KCQkJICogQmFzaWNhbGx5IHdlIGhhdmUgYSB0ZXN0IGZvciBlYWNoIHNvcnRpbmcgY29sdW1uLCBpZiB0aGUgZGF0YSBpbiB0aGF0IGNvbHVtbiBpcyBlcXVhbCwKCQkJICogdGVzdCB0aGUgbmV4dCBjb2x1bW4uIElmIGFsbCBjb2x1bW5zIG1hdGNoLCB0aGVuIHdlIHVzZSBhIG51bWVyaWMgc29ydCBvbiB0aGUgcm93CgkJCSAqIHBvc2l0aW9ucyBpbiB0aGUgb3JpZ2luYWwgZGF0YSBhcnJheSB0byBwcm92aWRlIGEgc3RhYmxlIHNvcnQuCgkJCSAqCgkJCSAqIE5vdGUgLSBJIGtub3cgaXQgc2VlbXMgZXhjZXNzaXZlIHRvIGhhdmUgdHdvIHNvcnRpbmcgbWV0aG9kcywgYnV0IHRoZSBmaXJzdCBpcyBhcm91bmQKCQkJICogMTUlIGZhc3Rlciwgc28gdGhlIHNlY29uZCBpcyBvbmx5IG1haW50YWluZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggc29ydGluZwoJCQkgKiBtZXRob2RzIHdoaWNoIGRvIG5vdCBoYXZlIGEgcHJlLXNvcnQgZm9ybWF0dGluZyBmdW5jdGlvbi4KCQkJICovCgkJCWlmICggZm9ybWF0dGVycyA9PT0gYVNvcnQubGVuZ3RoICkgewoJCQkJLy8gQWxsIHNvcnQgdHlwZXMgaGF2ZSBmb3JtYXR0aW5nIGZ1bmN0aW9ucwoJCQkJZGlzcGxheU1hc3Rlci5zb3J0KCBmdW5jdGlvbiAoIGEsIGIgKSB7CgkJCQkJdmFyCgkJCQkJCXgsIHksIGssIHRlc3QsIHNvcnQsCgkJCQkJCWxlbj1hU29ydC5sZW5ndGgsCgkJCQkJCWRhdGFBID0gYW9EYXRhW2FdLl9hU29ydERhdGEsCgkJCQkJCWRhdGFCID0gYW9EYXRhW2JdLl9hU29ydERhdGE7CgkKCQkJCQlmb3IgKCBrPTAgOyBrPGxlbiA7IGsrKyApIHsKCQkJCQkJc29ydCA9IGFTb3J0W2tdOwoJCgkJCQkJCXggPSBkYXRhQVsgc29ydC5jb2wgXTsKCQkJCQkJeSA9IGRhdGFCWyBzb3J0LmNvbCBdOwoJCgkJCQkJCXRlc3QgPSB4PHkgPyAtMSA6IHg+eSA/IDEgOiAwOwoJCQkJCQlpZiAoIHRlc3QgIT09IDAgKSB7CgkJCQkJCQlyZXR1cm4gc29ydC5kaXIgPT09ICdhc2MnID8gdGVzdCA6IC10ZXN0OwoJCQkJCQl9CgkJCQkJfQoJCgkJCQkJeCA9IGFpT3JpZ1thXTsKCQkJCQl5ID0gYWlPcmlnW2JdOwoJCQkJCXJldHVybiB4PHkgPyAtMSA6IHg+eSA/IDEgOiAwOwoJCQkJfSApOwoJCQl9CgkJCWVsc2UgewoJCQkJLy8gRGVwcmVjaWF0ZWQgLSByZW1vdmUgaW4gMS4xMSAocHJvdmlkaW5nIGEgcGx1Zy1pbiBvcHRpb24pCgkJCQkvLyBOb3QgYWxsIHNvcnQgdHlwZXMgaGF2ZSBmb3JtYXR0aW5nIG1ldGhvZHMsIHNvIHdlIGhhdmUgdG8gY2FsbCB0aGVpciBzb3J0aW5nCgkJCQkvLyBtZXRob2RzLgoJCQkJZGlzcGxheU1hc3Rlci5zb3J0KCBmdW5jdGlvbiAoIGEsIGIgKSB7CgkJCQkJdmFyCgkJCQkJCXgsIHksIGssIGwsIHRlc3QsIHNvcnQsIGZuLAoJCQkJCQlsZW49YVNvcnQubGVuZ3RoLAoJCQkJCQlkYXRhQSA9IGFvRGF0YVthXS5fYVNvcnREYXRhLAoJCQkJCQlkYXRhQiA9IGFvRGF0YVtiXS5fYVNvcnREYXRhOwoJCgkJCQkJZm9yICggaz0wIDsgazxsZW4gOyBrKysgKSB7CgkJCQkJCXNvcnQgPSBhU29ydFtrXTsKCQoJCQkJCQl4ID0gZGF0YUFbIHNvcnQuY29sIF07CgkJCQkJCXkgPSBkYXRhQlsgc29ydC5jb2wgXTsKCQoJCQkJCQlmbiA9IG9FeHRTb3J0WyBzb3J0LnR5cGUrIi0iK3NvcnQuZGlyIF0gfHwgb0V4dFNvcnRbICJzdHJpbmctIitzb3J0LmRpciBdOwoJCQkJCQl0ZXN0ID0gZm4oIHgsIHkgKTsKCQkJCQkJaWYgKCB0ZXN0ICE9PSAwICkgewoJCQkJCQkJcmV0dXJuIHRlc3Q7CgkJCQkJCX0KCQkJCQl9CgkKCQkJCQl4ID0gYWlPcmlnW2FdOwoJCQkJCXkgPSBhaU9yaWdbYl07CgkJCQkJcmV0dXJuIHg8eSA/IC0xIDogeD55ID8gMSA6IDA7CgkJCQl9ICk7CgkJCX0KCQl9CgkKCQkvKiBUZWxsIHRoZSBkcmF3IGZ1bmN0aW9uIHRoYXQgd2UgaGF2ZSBzb3J0ZWQgdGhlIGRhdGEgKi8KCQlvU2V0dGluZ3MuYlNvcnRlZCA9IHRydWU7Cgl9CgkKCQoJZnVuY3Rpb24gX2ZuU29ydEFyaWEgKCBzZXR0aW5ncyApCgl7CgkJdmFyIGxhYmVsOwoJCXZhciBuZXh0U29ydDsKCQl2YXIgY29sdW1ucyA9IHNldHRpbmdzLmFvQ29sdW1uczsKCQl2YXIgYVNvcnQgPSBfZm5Tb3J0RmxhdHRlbiggc2V0dGluZ3MgKTsKCQl2YXIgb0FyaWEgPSBzZXR0aW5ncy5vTGFuZ3VhZ2Uub0FyaWE7CgkKCQkvLyBBUklBIGF0dHJpYnV0ZXMgLSBuZWVkIHRvIGxvb3AgYWxsIGNvbHVtbnMsIHRvIHVwZGF0ZSBhbGwgKHJlbW92aW5nIG9sZAoJCS8vIGF0dHJpYnV0ZXMgYXMgbmVlZGVkKQoJCWZvciAoIHZhciBpPTAsIGlMZW49Y29sdW1ucy5sZW5ndGggOyBpPGlMZW4gOyBpKysgKQoJCXsKCQkJdmFyIGNvbCA9IGNvbHVtbnNbaV07CgkJCXZhciBhc1NvcnRpbmcgPSBjb2wuYXNTb3J0aW5nOwoJCQl2YXIgc1RpdGxlID0gY29sLnNUaXRsZS5yZXBsYWNlKCAvPC4qPz4vZywgIiIgKTsKCQkJdmFyIHRoID0gY29sLm5UaDsKCQoJCQkvLyBJRTcgaXMgdGhyb3dpbmcgYW4gZXJyb3Igd2hlbiBzZXR0aW5nIHRoZXNlIHByb3BlcnRpZXMgd2l0aCBqUXVlcnkncwoJCQkvLyBhdHRyKCkgYW5kIHJlbW92ZUF0dHIoKSBtZXRob2RzLi4uCgkJCXRoLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1zb3J0Jyk7CgkKCQkJLyogSW4gQVJJQSBvbmx5IHRoZSBmaXJzdCBzb3J0aW5nIGNvbHVtbiBjYW4gYmUgbWFya2VkIGFzIHNvcnRpbmcgLSBubyBtdWx0aS1zb3J0IG9wdGlvbiAqLwoJCQlpZiAoIGNvbC5iU29ydGFibGUgKSB7CgkJCQlpZiAoIGFTb3J0Lmxlbmd0aCA+IDAgJiYgYVNvcnRbMF0uY29sID09IGkgKSB7CgkJCQkJdGguc2V0QXR0cmlidXRlKCdhcmlhLXNvcnQnLCBhU29ydFswXS5kaXI9PSJhc2MiID8gImFzY2VuZGluZyIgOiAiZGVzY2VuZGluZyIgKTsKCQkJCQluZXh0U29ydCA9IGFzU29ydGluZ1sgYVNvcnRbMF0uaW5kZXgrMSBdIHx8IGFzU29ydGluZ1swXTsKCQkJCX0KCQkJCWVsc2UgewoJCQkJCW5leHRTb3J0ID0gYXNTb3J0aW5nWzBdOwoJCQkJfQoJCgkJCQlsYWJlbCA9IHNUaXRsZSArICggbmV4dFNvcnQgPT09ICJhc2MiID8KCQkJCQlvQXJpYS5zU29ydEFzY2VuZGluZyA6CgkJCQkJb0FyaWEuc1NvcnREZXNjZW5kaW5nCgkJCQkpOwoJCQl9CgkJCWVsc2UgewoJCQkJbGFiZWwgPSBzVGl0bGU7CgkJCX0KCQoJCQl0aC5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCBsYWJlbCk7CgkJfQoJfQoJCgkKCS8qKgoJICogRnVuY3Rpb24gdG8gcnVuIG9uIHVzZXIgc29ydCByZXF1ZXN0CgkgKiAgQHBhcmFtIHtvYmplY3R9IHNldHRpbmdzIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkgKiAgQHBhcmFtIHtub2RlfSBhdHRhY2hUbyBub2RlIHRvIGF0dGFjaCB0aGUgaGFuZGxlciB0bwoJICogIEBwYXJhbSB7aW50fSBjb2xJZHggY29sdW1uIHNvcnRpbmcgaW5kZXgKCSAqICBAcGFyYW0ge2Jvb2xlYW59IFthcHBlbmQ9ZmFsc2VdIEFwcGVuZCB0aGUgcmVxdWVzdGVkIHNvcnQgdG8gdGhlIGV4aXN0aW5nCgkgKiAgICBzb3J0IGlmIHRydWUgKGkuZS4gbXVsdGktY29sdW1uIHNvcnQpCgkgKiAgQHBhcmFtIHtmdW5jdGlvbn0gW2NhbGxiYWNrXSBjYWxsYmFjayBmdW5jdGlvbgoJICogIEBtZW1iZXJvZiBEYXRhVGFibGUjb0FwaQoJICovCglmdW5jdGlvbiBfZm5Tb3J0TGlzdGVuZXIgKCBzZXR0aW5ncywgY29sSWR4LCBhcHBlbmQsIGNhbGxiYWNrICkKCXsKCQl2YXIgY29sID0gc2V0dGluZ3MuYW9Db2x1bW5zWyBjb2xJZHggXTsKCQl2YXIgc29ydGluZyA9IHNldHRpbmdzLmFhU29ydGluZzsKCQl2YXIgYXNTb3J0aW5nID0gY29sLmFzU29ydGluZzsKCQl2YXIgbmV4dFNvcnRJZHg7CgkJdmFyIG5leHQgPSBmdW5jdGlvbiAoIGEsIG92ZXJmbG93ICkgewoJCQl2YXIgaWR4ID0gYS5faWR4OwoJCQlpZiAoIGlkeCA9PT0gdW5kZWZpbmVkICkgewoJCQkJaWR4ID0gJC5pbkFycmF5KCBhWzFdLCBhc1NvcnRpbmcgKTsKCQkJfQoJCgkJCXJldHVybiBpZHgrMSA8IGFzU29ydGluZy5sZW5ndGggPwoJCQkJaWR4KzEgOgoJCQkJb3ZlcmZsb3cgPwoJCQkJCW51bGwgOgoJCQkJCTA7CgkJfTsKCQoJCS8vIENvbnZlcnQgdG8gMkQgYXJyYXkgaWYgbmVlZGVkCgkJaWYgKCB0eXBlb2Ygc29ydGluZ1swXSA9PT0gJ251bWJlcicgKSB7CgkJCXNvcnRpbmcgPSBzZXR0aW5ncy5hYVNvcnRpbmcgPSBbIHNvcnRpbmcgXTsKCQl9CgkKCQkvLyBJZiBhcHBlbmRpbmcgdGhlIHNvcnQgdGhlbiB3ZSBhcmUgbXVsdGktY29sdW1uIHNvcnRpbmcKCQlpZiAoIGFwcGVuZCAmJiBzZXR0aW5ncy5vRmVhdHVyZXMuYlNvcnRNdWx0aSApIHsKCQkJLy8gQXJlIHdlIGFscmVhZHkgZG9pbmcgc29tZSBraW5kIG9mIHNvcnQgb24="
}
]
},
{
"type": 12,
"id": "HE6SaebEzmf4qpwmYyBwfAWYnYZvyaZvKztUCzoVE9cx",
"fee": 14200000,
"feeAssetId": null,
"timestamp": 1577467381480,
"version": 1,
"sender": "3NAxHUEaM6RAG7rVDPL9L6DFZWkrqFtY98t",
"senderPublicKey": "4Jwx6yN9LNc5XbrqwrSdp2hok5niFKzGzfZwSxFH6FsV",
"proofs": [
"3BdYcdUcMsdtaKJDcqjsGNb3Uy1SiCGpYo1xh3GHLy5rEqh3TwVVFSAQFWgDjYbCTrFBq3NaU1crTKepq8V3jAya"
],
"data": [
{
"key": "jquery.dataTables.js?4?0?2",
"type": "binary",
"value": "base64:IHRoaXMgY29sdW1uPwoJCQl2YXIgc29ydElkeCA9ICQuaW5BcnJheSggY29sSWR4LCBfcGx1Y2soc29ydGluZywgJzAnKSApOwoJCgkJCWlmICggc29ydElkeCAhPT0gLTEgKSB7CgkJCQkvLyBZZXMsIG1vZGlmeSB0aGUgc29ydAoJCQkJbmV4dFNvcnRJZHggPSBuZXh0KCBzb3J0aW5nW3NvcnRJZHhdLCB0cnVlICk7CgkKCQkJCWlmICggbmV4dFNvcnRJZHggPT09IG51bGwgJiYgc29ydGluZy5sZW5ndGggPT09IDEgKSB7CgkJCQkJbmV4dFNvcnRJZHggPSAwOyAvLyBjYW4ndCByZW1vdmUgc29ydGluZyBjb21wbGV0ZWx5CgkJCQl9CgkKCQkJCWlmICggbmV4dFNvcnRJZHggPT09IG51bGwgKSB7CgkJCQkJc29ydGluZy5zcGxpY2UoIHNvcnRJZHgsIDEgKTsKCQkJCX0KCQkJCWVsc2UgewoJCQkJCXNvcnRpbmdbc29ydElkeF1bMV0gPSBhc1NvcnRpbmdbIG5leHRTb3J0SWR4IF07CgkJCQkJc29ydGluZ1tzb3J0SWR4XS5faWR4ID0gbmV4dFNvcnRJZHg7CgkJCQl9CgkJCX0KCQkJZWxzZSB7CgkJCQkvLyBObyBzb3J0IG9uIHRoaXMgY29sdW1uIHlldAoJCQkJc29ydGluZy5wdXNoKCBbIGNvbElkeCwgYXNTb3J0aW5nWzBdLCAwIF0gKTsKCQkJCXNvcnRpbmdbc29ydGluZy5sZW5ndGgtMV0uX2lkeCA9IDA7CgkJCX0KCQl9CgkJZWxzZSBpZiAoIHNvcnRpbmcubGVuZ3RoICYmIHNvcnRpbmdbMF1bMF0gPT0gY29sSWR4ICkgewoJCQkvLyBTaW5nbGUgY29sdW1uIC0gYWxyZWFkeSBzb3J0aW5nIG9uIHRoaXMgY29sdW1uLCBtb2RpZnkgdGhlIHNvcnQKCQkJbmV4dFNvcnRJZHggPSBuZXh0KCBzb3J0aW5nWzBdICk7CgkKCQkJc29ydGluZy5sZW5ndGggPSAxOwoJCQlzb3J0aW5nWzBdWzFdID0gYXNTb3J0aW5nWyBuZXh0U29ydElkeCBdOwoJCQlzb3J0aW5nWzBdLl9pZHggPSBuZXh0U29ydElkeDsKCQl9CgkJZWxzZSB7CgkJCS8vIFNpbmdsZSBjb2x1bW4gLSBzb3J0IG9ubHkgb24gdGhpcyBjb2x1bW4KCQkJc29ydGluZy5sZW5ndGggPSAwOwoJCQlzb3J0aW5nLnB1c2goIFsgY29sSWR4LCBhc1NvcnRpbmdbMF0gXSApOwoJCQlzb3J0aW5nWzBdLl9pZHggPSAwOwoJCX0KCQoJCS8vIFJ1biB0aGUgc29ydCBieSBjYWxsaW5nIGEgZnVsbCByZWRyYXcKCQlfZm5SZURyYXcoIHNldHRpbmdzICk7CgkKCQkvLyBjYWxsYmFjayB1c2VkIGZvciBhc3luYyB1c2VyIGludGVyYWN0aW9uCgkJaWYgKCB0eXBlb2YgY2FsbGJhY2sgPT0gJ2Z1bmN0aW9uJyApIHsKCQkJY2FsbGJhY2soIHNldHRpbmdzICk7CgkJfQoJfQoJCgkKCS8qKgoJICogQXR0YWNoIGEgc29ydCBoYW5kbGVyIChjbGljaykgdG8gYSBub2RlCgkgKiAgQHBhcmFtIHtvYmplY3R9IHNldHRpbmdzIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkgKiAgQHBhcmFtIHtub2RlfSBhdHRhY2hUbyBub2RlIHRvIGF0dGFjaCB0aGUgaGFuZGxlciB0bwoJICogIEBwYXJhbSB7aW50fSBjb2xJZHggY29sdW1uIHNvcnRpbmcgaW5kZXgKCSAqICBAcGFyYW0ge2Z1bmN0aW9ufSBbY2FsbGJhY2tdIGNhbGxiYWNrIGZ1bmN0aW9uCgkgKiAgQG1lbWJlcm9mIERhdGFUYWJsZSNvQXBpCgkgKi8KCWZ1bmN0aW9uIF9mblNvcnRBdHRhY2hMaXN0ZW5lciAoIHNldHRpbmdzLCBhdHRhY2hUbywgY29sSWR4LCBjYWxsYmFjayApCgl7CgkJdmFyIGNvbCA9IHNldHRpbmdzLmFvQ29sdW1uc1sgY29sSWR4IF07CgkKCQlfZm5CaW5kQWN0aW9uKCBhdHRhY2hUbywge30sIGZ1bmN0aW9uIChlKSB7CgkJCS8qIElmIHRoZSBjb2x1bW4gaXMgbm90IHNvcnRhYmxlIC0gZG9uJ3QgdG8gYW55dGhpbmcgKi8KCQkJaWYgKCBjb2wuYlNvcnRhYmxlID09PSBmYWxzZSApIHsKCQkJCXJldHVybjsKCQkJfQoJCgkJCS8vIElmIHByb2Nlc3NpbmcgaXMgZW5hYmxlZCB1c2UgYSB0aW1lb3V0IHRvIGFsbG93IHRoZSBwcm9jZXNzaW5nCgkJCS8vIGRpc3BsYXkgdG8gYmUgc2hvd24gLSBvdGhlcndpc2UgdG8gaXQgc3luY2hyb25vdXNseQoJCQlpZiAoIHNldHRpbmdzLm9GZWF0dXJlcy5iUHJvY2Vzc2luZyApIHsKCQkJCV9mblByb2Nlc3NpbmdEaXNwbGF5KCBzZXR0aW5ncywgdHJ1ZSApOwoJCgkJCQlzZXRUaW1lb3V0KCBmdW5jdGlvbigpIHsKCQkJCQlfZm5Tb3J0TGlzdGVuZXIoIHNldHRpbmdzLCBjb2xJZHgsIGUuc2hpZnRLZXksIGNhbGxiYWNrICk7CgkKCQkJCQkvLyBJbiBzZXJ2ZXItc2lkZSBwcm9jZXNzaW5nLCB0aGUgZHJhdyBjYWxsYmFjayB3aWxsIHJlbW92ZSB0aGUKCQkJCQkvLyBwcm9jZXNzaW5nIGRpc3BsYXkKCQkJCQlpZiAoIF9mbkRhdGFTb3VyY2UoIHNldHRpbmdzICkgIT09ICdzc3AnICkgewoJCQkJCQlfZm5Qcm9jZXNzaW5nRGlzcGxheSggc2V0dGluZ3MsIGZhbHNlICk7CgkJCQkJfQoJCQkJfSwgMCApOwoJCQl9CgkJCWVsc2UgewoJCQkJX2ZuU29ydExpc3RlbmVyKCBzZXR0aW5ncywgY29sSWR4LCBlLnNoaWZ0S2V5LCBjYWxsYmFjayApOwoJCQl9CgkJfSApOwoJfQoJCgkKCS8qKgoJICogU2V0IHRoZSBzb3J0aW5nIGNsYXNzZXMgb24gdGFibGUncyBib2R5LCBOb3RlOiBpdCBpcyBzYWZlIHRvIGNhbGwgdGhpcyBmdW5jdGlvbgoJICogd2hlbiBiU29ydCBhbmQgYlNvcnRDbGFzc2VzIGFyZSBmYWxzZQoJICogIEBwYXJhbSB7b2JqZWN0fSBvU2V0dGluZ3MgZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuU29ydGluZ0NsYXNzZXMoIHNldHRpbmdzICkKCXsKCQl2YXIgb2xkU29ydCA9IHNldHRpbmdzLmFMYXN0U29ydDsKCQl2YXIgc29ydENsYXNzID0gc2V0dGluZ3Mub0NsYXNzZXMuc1NvcnRDb2x1bW47CgkJdmFyIHNvcnQgPSBfZm5Tb3J0RmxhdHRlbiggc2V0dGluZ3MgKTsKCQl2YXIgZmVhdHVyZXMgPSBzZXR0aW5ncy5vRmVhdHVyZXM7CgkJdmFyIGksIGllbiwgY29sSWR4OwoJCgkJaWYgKCBmZWF0dXJlcy5iU29ydCAmJiBmZWF0dXJlcy5iU29ydENsYXNzZXMgKSB7CgkJCS8vIFJlbW92ZSBvbGQgc29ydGluZyBjbGFzc2VzCgkJCWZvciAoIGk9MCwgaWVuPW9sZFNvcnQubGVuZ3RoIDsgaTxpZW4gOyBpKysgKSB7CgkJCQljb2xJZHggPSBvbGRTb3J0W2ldLnNyYzsKCQoJCQkJLy8gUmVtb3ZlIGNvbHVtbiBzb3J0aW5nCgkJCQkkKCBfcGx1Y2soIHNldHRpbmdzLmFvRGF0YSwgJ2FuQ2VsbHMnLCBjb2xJZHggKSApCgkJCQkJLnJlbW92ZUNsYXNzKCBzb3J0Q2xhc3MgKyAoaTwyID8gaSsxIDogMykgKTsKCQkJfQoJCgkJCS8vIEFkZCBuZXcgY29sdW1uIHNvcnRpbmcKCQkJZm9yICggaT0wLCBpZW49c29ydC5sZW5ndGggOyBpPGllbiA7IGkrKyApIHsKCQkJCWNvbElkeCA9IHNvcnRbaV0uc3JjOwoJCgkJCQkkKCBfcGx1Y2soIHNldHRpbmdzLmFvRGF0YSwgJ2FuQ2VsbHMnLCBjb2xJZHggKSApCgkJCQkJLmFkZENsYXNzKCBzb3J0Q2xhc3MgKyAoaTwyID8gaSsxIDogMykgKTsKCQkJfQoJCX0KCQoJCXNldHRpbmdzLmFMYXN0U29ydCA9IHNvcnQ7Cgl9CgkKCQoJLy8gR2V0IHRoZSBkYXRhIHRvIHNvcnQgYSBjb2x1bW4sIGJlIGl0IGZyb20gY2FjaGUsIGZyZXNoIChwb3B1bGF0aW5nIHRoZQoJLy8gY2FjaGUpLCBvciBmcm9tIGEgc29ydCBmb3JtYXR0ZXIKCWZ1bmN0aW9uIF9mblNvcnREYXRhKCBzZXR0aW5ncywgaWR4ICkKCXsKCQkvLyBDdXN0b20gc29ydGluZyBmdW5jdGlvbiAtIHByb3ZpZGVkIGJ5IHRoZSBzb3J0IGRhdGEgdHlwZQoJCXZhciBjb2x1bW4gPSBzZXR0aW5ncy5hb0NvbHVtbnNbIGlkeCBdOwoJCXZhciBjdXN0b21Tb3J0ID0gRGF0YVRhYmxlLmV4dC5vcmRlclsgY29sdW1uLnNTb3J0RGF0YVR5cGUgXTsKCQl2YXIgY3VzdG9tRGF0YTsKCQoJCWlmICggY3VzdG9tU29ydCApIHsKCQkJY3VzdG9tRGF0YSA9IGN1c3RvbVNvcnQuY2FsbCggc2V0dGluZ3Mub0luc3RhbmNlLCBzZXR0aW5ncywgaWR4LAoJCQkJX2ZuQ29sdW1uSW5kZXhUb1Zpc2libGUoIHNldHRpbmdzLCBpZHggKQoJCQkpOwoJCX0KCQoJCS8vIFVzZSAvIHBvcHVsYXRlIGNhY2hlCgkJdmFyIHJvdywgY2VsbERhdGE7CgkJdmFyIGZvcm1hdHRlciA9IERhdGFUYWJsZS5leHQudHlwZS5vcmRlclsgY29sdW1uLnNUeXBlKyItcHJlIiBdOwoJCgkJZm9yICggdmFyIGk9MCwgaWVuPXNldHRpbmdzLmFvRGF0YS5sZW5ndGggOyBpPGllbiA7IGkrKyApIHsKCQkJcm93ID0gc2V0dGluZ3MuYW9EYXRhW2ldOwoJCgkJCWlmICggISByb3cuX2FTb3J0RGF0YSApIHsKCQkJCXJvdy5fYVNvcnREYXRhID0gW107CgkJCX0KCQoJCQlpZiAoICEgcm93Ll9hU29ydERhdGFbaWR4XSB8fCBjdXN0b21Tb3J0ICkgewoJCQkJY2VsbERhdGEgPSBjdXN0b21Tb3J0ID8KCQkJCQljdXN0b21EYXRhW2ldIDogLy8gSWYgdGhlcmUgd2FzIGEgY3VzdG9tIHNvcnQgZnVuY3Rpb24sIHVzZSBkYXRhIGZyb20gdGhlcmUKCQkJCQlfZm5HZXRDZWxsRGF0YSggc2V0dGluZ3MsIGksIGlkeCwgJ3NvcnQnICk7CgkKCQkJCXJvdy5fYVNvcnREYXRhWyBpZHggXSA9IGZvcm1hdHRlciA/CgkJCQkJZm9ybWF0dGVyKCBjZWxsRGF0YSApIDoKCQkJCQljZWxsRGF0YTsKCQkJfQoJCX0KCX0KCQoJCgkKCS8qKgoJICogU2F2ZSB0aGUgc3RhdGUgb2YgYSB0YWJsZQoJICogIEBwYXJhbSB7b2JqZWN0fSBvU2V0dGluZ3MgZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuU2F2ZVN0YXRlICggc2V0dGluZ3MgKQoJewoJCWlmICggIXNldHRpbmdzLm9GZWF0dXJlcy5iU3RhdGVTYXZlIHx8IHNldHRpbmdzLmJEZXN0cm95aW5nICkKCQl7CgkJCXJldHVybjsKCQl9CgkKCQkvKiBTdG9yZSB0aGUgaW50ZXJlc3RpbmcgdmFyaWFibGVzICovCgkJdmFyIHN0YXRlID0gewoJCQl0aW1lOiAgICArbmV3IERhdGUoKSwKCQkJc3RhcnQ6ICAgc2V0dGluZ3MuX2lEaXNwbGF5U3RhcnQsCgkJCWxlbmd0aDogIHNldHRpbmdzLl9pRGlzcGxheUxlbmd0aCwKCQkJb3JkZXI6ICAgJC5leHRlbmQoIHRydWUsIFtdLCBzZXR0aW5ncy5hYVNvcnRpbmcgKSwKCQkJc2VhcmNoOiAgX2ZuU2VhcmNoVG9DYW1lbCggc2V0dGluZ3Mub1ByZXZpb3VzU2VhcmNoICksCgkJCWNvbHVtbnM6ICQubWFwKCBzZXR0aW5ncy5hb0NvbHVtbnMsIGZ1bmN0aW9uICggY29sLCBpICkgewoJCQkJcmV0dXJuIHsKCQkJCQl2aXNpYmxlOiBjb2wuYlZpc2libGUsCgkJCQkJc2VhcmNoOiBfZm5TZWFyY2hUb0NhbWVsKCBzZXR0aW5ncy5hb1ByZVNlYXJjaENvbHNbaV0gKQoJCQkJfTsKCQkJfSApCgkJfTsKCQoJCV9mbkNhbGxiYWNrRmlyZSggc2V0dGluZ3MsICJhb1N0YXRlU2F2ZVBhcmFtcyIsICdzdGF0ZVNhdmVQYXJhbXMnLCBbc2V0dGluZ3MsIHN0YXRlXSApOwoJCgkJc2V0dGluZ3Mub1NhdmVkU3RhdGUgPSBzdGF0ZTsKCQlzZXR0aW5ncy5mblN0YXRlU2F2ZUNhbGxiYWNrLmNhbGwoIHNldHRpbmdzLm9JbnN0YW5jZSwgc2V0dGluZ3MsIHN0YXRlICk7Cgl9CgkKCQoJLyoqCgkgKiBBdHRlbXB0IHRvIGxvYWQgYSBzYXZlZCB0YWJsZSBzdGF0ZQoJICogIEBwYXJhbSB7b2JqZWN0fSBvU2V0dGluZ3MgZGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCSAqICBAcGFyYW0ge29iamVjdH0gb0luaXQgRGF0YVRhYmxlcyBpbml0IG9iamVjdCBzbyB3ZSBjYW4gb3ZlcnJpZGUgc2V0dGluZ3MKCSAqICBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsYmFjayB0byBleGVjdXRlIHdoZW4gdGhlIHN0YXRlIGhhcyBiZWVuIGxvYWRlZAoJICogIEBtZW1iZXJvZiBEYXRhVGFibGUjb0FwaQoJICovCglmdW5jdGlvbiBfZm5Mb2FkU3RhdGUgKCBzZXR0aW5ncywgb0luaXQsIGNhbGxiYWNrICkKCXsKCQl2YXIgaSwgaWVuOwoJCXZhciBjb2x1bW5zID0gc2V0dGluZ3MuYW9Db2x1bW5zOwoJCXZhciBsb2FkZWQgPSBmdW5jdGlvbiAoIHMgKSB7CgkJCWlmICggISBzIHx8ICEgcy50aW1lICkgewoJCQkJY2FsbGJhY2soKTsKCQkJCXJldHVybjsKCQkJfQoJCgkJCS8vIEFsbG93IGN1c3RvbSBhbmQgcGx1Zy1pbiBtYW5pcHVsYXRpb24gZnVuY3Rpb25zIHRvIGFsdGVyIHRoZSBzYXZlZCBkYXRhIHNldCBhbmQKCQkJLy8gY2FuY2VsbGluZyBvZiBsb2FkaW5nIGJ5IHJldHVybmluZyBmYWxzZQoJCQl2YXIgYWJTdGF0ZUxvYWQgPSBfZm5DYWxsYmFja0ZpcmUoIHNldHRpbmdzLCAnYW9TdGF0ZUxvYWRQYXJhbXMnLCAnc3RhdGVMb2FkUGFyYW1zJywgW3NldHRpbmdzLCBzXSApOwoJCQlpZiAoICQuaW5BcnJheSggZmFsc2UsIGFiU3RhdGVMb2FkICkgIT09IC0xICkgewoJCQkJY2FsbGJhY2soKTsKCQkJCXJldHVybjsKCQkJfQoJCgkJCS8vIFJlamVjdCBvbGQgZGF0YQoJCQl2YXIgZHVyYXRpb24gPSBzZXR0aW5ncy5pU3RhdGVEdXJhdGlvbjsKCQkJaWYgKCBkdXJhdGlvbiA+IDAgJiYgcy50aW1lIDwgK25ldyBEYXRlKCkgLSAoZHVyYXRpb24qMTAwMCkgKSB7CgkJCQljYWxsYmFjaygpOwoJCQkJcmV0dXJuOwoJCQl9CgkKCQkJLy8gTnVtYmVyIG9mIGNvbHVtbnMgaGF2ZSBjaGFuZ2VkIC0gYWxsIGJldHMgYXJlIG9mZiwgbm8gcmVzdG9yZSBvZiBzZXR0aW5ncwoJCQlpZiAoIHMuY29sdW1ucyAmJiBjb2x1bW5zLmxlbmd0aCAhPT0gcy5jb2x1bW5zLmxlbmd0aCApIHsKCQkJCWNhbGxiYWNrKCk7CgkJCQlyZXR1cm47CgkJCX0KCQoJCQkvLyBTdG9yZSB0aGUgc2F2ZWQgc3RhdGUgc28gaXQgbWlnaHQgYmUgYWNjZXNzZWQgYXQgYW55IHRpbWUKCQkJc2V0dGluZ3Mub0xvYWRlZFN0YXRlID0gJC5leHRlbmQoIHRydWUsIHt9LCBzICk7CgkKCQkJLy8gUmVzdG9yZSBrZXkgZmVhdHVyZXMgLSB0b2RvIC0gZm9yIDEuMTEgdGhpcyBuZWVkcyB0byBiZSBkb25lIGJ5CgkJCS8vIHN1YnNjcmliZWQgZXZlbnRzCgkJCWlmICggcy5zdGFydCAhPT0gdW5kZWZpbmVkICkgewoJCQkJc2V0dGluZ3MuX2lEaXNwbGF5U3RhcnQgICAgPSBzLnN0YXJ0OwoJCQkJc2V0dGluZ3MuaUluaXREaXNwbGF5U3RhcnQgPSBzLnN0YXJ0OwoJCQl9CgkJCWlmICggcy5sZW5ndGggIT09IHVuZGVmaW5lZCApIHsKCQkJCXNldHRpbmdzLl9pRGlzcGxheUxlbmd0aCAgID0gcy5sZW5ndGg7CgkJCX0KCQoJCQkvLyBPcmRlcgoJCQlpZiAoIHMub3JkZXIgIT09IHVuZGVmaW5lZCApIHsKCQkJCXNldHRpbmdzLmFhU29ydGluZyA9IFtdOwoJCQkJJC5lYWNoKCBzLm9yZGVyLCBmdW5jdGlvbiAoIGksIGNvbCApIHsKCQkJCQlzZXR0aW5ncy5hYVNvcnRpbmcucHVzaCggY29sWzBdID49IGNvbHVtbnMubGVuZ3RoID8KCQkJCQkJWyAwLCBjb2xbMV0gXSA6CgkJCQkJCWNvbAoJCQkJCSk7CgkJCQl9ICk7CgkJCX0KCQoJCQkvLyBTZWFyY2gKCQkJaWYgKCBzLnNlYXJjaCAhPT0gdW5kZWZpbmVkICkgewoJCQkJJC5leHRlbmQoIHNldHRpbmdzLm9QcmV2aW91c1NlYXJjaCwgX2ZuU2VhcmNoVG9IdW5nKCBzLnNlYXJjaCApICk7CgkJCX0KCQoJCQkvLyBDb2x1bW5zCgkJCS8vCgkJCWlmICggcy5jb2x1bW5zICkgewoJCQkJZm9yICggaT0wLCBpZW49cy5jb2x1bW5zLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQkJCXZhciBjb2wgPSBzLmNvbHVtbnNbaV07CgkKCQkJCQkvLyBWaXNpYmlsaXR5CgkJCQkJaWYgKCBjb2wudmlzaWJsZSAhPT0gdW5kZWZpbmVkICkgewoJCQkJCQljb2x1bW5zW2ldLmJWaXNpYmxlID0gY29sLnZpc2libGU7CgkJCQkJfQoJCgkJCQkJLy8gU2VhcmNoCgkJCQkJaWYgKCBjb2wuc2VhcmNoICE9PSB1bmRlZmluZWQgKSB7CgkJCQkJCSQuZXh0ZW5kKCBzZXR0aW5ncy5hb1ByZVNlYXJjaENvbHNbaV0sIF9mblNlYXJjaFRvSHVuZyggY29sLnNlYXJjaCApICk7CgkJCQkJfQoJCQkJfQoJCQl9CgkKCQkJX2ZuQ2FsbGJhY2tGaXJlKCBzZXR0aW5ncywgJ2FvU3RhdGVMb2FkZWQnLCAnc3RhdGVMb2FkZWQnLCBbc2V0dGluZ3MsIHNdICk7CgkJCWNhbGxiYWNrKCk7CgkJfQoJCgkJaWYgKCAhIHNldHRpbmdzLm9GZWF0dXJlcy5iU3RhdGVTYXZlICkgewoJCQljYWxsYmFjaygpOwoJCQlyZXR1cm47CgkJfQoJCgkJdmFyIHN0YXRlID0gc2V0dGluZ3MuZm5TdGF0ZUxvYWRDYWxsYmFjay5jYWxsKCBzZXR0aW5ncy5vSW5zdGFuY2UsIHNldHRpbmdzLCBsb2FkZWQgKTsKCQoJCWlmICggc3RhdGUgIT09IHVuZGVmaW5lZCApIHsKCQkJbG9hZGVkKCBzdGF0ZSApOwoJCX0KCQkvLyBvdGhlcndpc2UsIHdhaXQgZm9yIHRoZSBsb2FkZWQgY2FsbGJhY2sgdG8gYmUgZXhlY3V0ZWQKCX0KCQoJCgkvKioKCSAqIFJldHVybiB0aGUgc2V0dGluZ3Mgb2JqZWN0IGZvciBhIHBhcnRpY3VsYXIgdGFibGUKCSAqICBAcGFyYW0ge25vZGV9IHRhYmxlIHRhYmxlIHdlIGFyZSB1c2luZyBhcyBhIGRhdGFUYWJsZQoJICogIEByZXR1cm5zIHtvYmplY3R9IFNldHRpbmdzIG9iamVjdCAtIG9yIG51bGwgaWYgbm90IGZvdW5kCgkgKiAgQG1lbWJlcm9mIERhdGFUYWJsZSNvQXBpCgkgKi8KCWZ1bmN0aW9uIF9mblNldHRpbmdzRnJvbU5vZGUgKCB0YWJsZSApCgl7CgkJdmFyIHNldHRpbmdzID0gRGF0YVRhYmxlLnNldHRpbmdzOwoJCXZhciBpZHggPSAkLmluQXJyYXkoIHRhYmxlLCBfcGx1Y2soIHNldHRpbmdzLCAnblRhYmxlJyApICk7CgkKCQlyZXR1cm4gaWR4ICE9PSAtMSA/CgkJCXNldHRpbmdzWyBpZHggXSA6CgkJCW51bGw7Cgl9CgkKCQoJLyoqCgkgKiBMb2cgYW4gZXJyb3IgbWVzc2FnZQoJICogIEBwYXJhbSB7b2JqZWN0fSBzZXR0aW5ncyBkYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJICogIEBwYXJhbSB7aW50fSBsZXZlbCBsb2cgZXJyb3IgbWVzc2FnZXMsIG9yIGRpc3BsYXkgdGhlbSB0byB0aGUgdXNlcgoJICogIEBwYXJhbSB7c3RyaW5nfSBtc2cgZXJyb3IgbWVzc2FnZQoJICogIEBwYXJhbSB7aW50fSB0biBUZWNobmljYWwgbm90ZSBpZCB0byBnZXQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZXJyb3IuCgkgKiAgQG1lbWJlcm9mIERhdGFUYWJsZSNvQXBpCgkgKi8KCWZ1bmN0aW9uIF9mbkxvZyggc2V0dGluZ3MsIGxldmVsLCBtc2csIHRuICkKCXsKCQltc2cgPSAnRGF0YVRhYmxlcyB3YXJuaW5nOiAnKwoJCQkoc2V0dGluZ3MgPyAndGFibGUgaWQ9JytzZXR0aW5ncy5zVGFibGVJZCsnIC0gJyA6ICcnKSttc2c7CgkKCQlpZiAoIHRuICkgewoJCQltc2cgKz0gJy4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBlcnJvciwgcGxlYXNlIHNlZSAnKwoJCQknaHR0cDovL2RhdGF0YWJsZXMubmV0L3RuLycrdG47CgkJfQoJCgkJaWYgKCAhIGxldmVsICApIHsKCQkJLy8gQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgcHJlIDEuMTAKCQkJdmFyIGV4dCA9IERhdGFUYWJsZS5leHQ7CgkJCXZhciB0eXBlID0gZXh0LnNFcnJNb2RlIHx8IGV4dC5lcnJNb2RlOwoJCgkJCWlmICggc2V0dGluZ3MgKSB7CgkJCQlfZm5DYWxsYmFja0ZpcmUoIHNldHRpbmdzLCBudWxsLCAnZXJyb3InLCBbIHNldHRpbmdzLCB0biwgbXNnIF0gKTsKCQkJfQoJCgkJCWlmICggdHlwZSA9PSAnYWxlcnQnICkgewoJCQkJYWxlcnQoIG1zZyApOwoJCQl9CgkJCWVsc2UgaWYgKCB0eXBlID09ICd0aHJvdycgKSB7CgkJCQl0aHJvdyBuZXcgRXJyb3IobXNnKTsKCQkJfQoJCQllbHNlIGlmICggdHlwZW9mIHR5cGUgPT0gJ2Z1bmN0aW9uJyApIHsKCQkJCXR5cGUoIHNldHRpbmdzLCB0biwgbXNnICk7CgkJCX0KCQl9CgkJZWxzZSBpZiAoIHdpbmRvdy5jb25zb2xlICYmIGNvbnNvbGUubG9nICkgewoJCQljb25zb2xlLmxvZyggbXNnICk7CgkJfQoJfQoJCgkKCS8qKgoJICogU2VlIGlmIGEgcHJvcGVydHkgaXMgZGVmaW5lZCBvbiBvbmUgb2JqZWN0LCBpZiBzbyBhc3NpZ24gaXQgdG8gdGhlIG90aGVyIG9iamVjdAoJICogIEBwYXJhbSB7b2JqZWN0fSByZXQgdGFyZ2V0IG9iamVjdAoJICogIEBwYXJhbSB7b2JqZWN0fSBzcmMgc291cmNlIG9iamVjdAoJICogIEBwYXJhbSB7c3RyaW5nfSBuYW1lIHByb3BlcnR5CgkgKiAgQHBhcmFtIHtzdHJpbmd9IFttYXBwZWROYW1lXSBuYW1lIHRvIG1hcCB0b28gLSBvcHRpb25hbCwgbmFtZSB1c2VkIGlmIG5vdCBnaXZlbgoJICogIEBtZW1iZXJvZiBEYXRhVGFibGUjb0FwaQoJICovCglmdW5jdGlvbiBfZm5NYXAoIHJldCwgc3JjLCBuYW1lLCBtYXBwZWROYW1lICkKCXsKCQlpZiAoICQuaXNBcnJheSggbmFtZSApICkgewoJCQkkLmVhY2goIG5hbWUsIGZ1bmN0aW9uIChpLCB2YWwpIHsKCQkJCWlmICggJC5pc0FycmF5KCB2YWwgKSApIHsKCQkJCQlfZm5NYXAoIHJldCwgc3JjLCB2YWxbMF0sIHZhbFsxXSApOwoJCQkJfQoJCQkJZWxzZSB7CgkJCQkJX2ZuTWFwKCByZXQsIHNyYywgdmFsICk7CgkJCQl9CgkJCX0gKTsKCQoJCQlyZXR1cm47CgkJfQoJCgkJaWYgKCBtYXBwZWROYW1lID09PSB1bmRlZmluZWQgKSB7CgkJCW1hcHBlZE5hbWUgPSBuYW1lOwoJCX0KCQoJCWlmICggc3JjW25hbWVdICE9PSB1bmRlZmluZWQgKSB7CgkJCXJldFttYXBwZWROYW1lXSA9IHNyY1tuYW1lXTsKCQl9Cgl9CgkKCQoJLyoqCgkgKiBFeHRlbmQgb2JqZWN0cyAtIHZlcnkgc2ltaWxhciB0byBqUXVlcnkuZXh0ZW5kLCBidXQgZGVlcCBjb3B5IG9iamVjdHMsIGFuZAoJICogc2hhbGxvdyBjb3B5IGFycmF5cy4gVGhlIHJlYXNvbiB3ZSBuZWVkIHRvIGRvIHRoaXMsIGlzIHRoYXQgd2UgZG9uJ3Qgd2FudCB0bwoJICogZGVlcCBjb3B5IGFycmF5IGluaXQgdmFsdWVzIChzdWNoIGFzIGFhU29ydGluZykgc2luY2UgdGhlIGRldiB3b3VsZG4ndCBiZQoJICogYWJsZSB0byBvdmVycmlkZSB0aGVtLCBidXQgd2UgZG8gd2FudCB0byBkZWVwIGNvcHkgYXJyYXlzLgoJICogIEBwYXJhbSB7b2JqZWN0fSBvdXQgT2JqZWN0IHRvIGV4dGVuZAoJICogIEBwYXJhbSB7b2JqZWN0fSBleHRlbmRlciBPYmplY3QgZnJvbSB3aGljaCB0aGUgcHJvcGVydGllcyB3aWxsIGJlIGFwcGxpZWQgdG8KCSAqICAgICAgb3V0CgkgKiAgQHBhcmFtIHtib29sZWFufSBicmVha1JlZnMgSWYgdHJ1ZSwgdGhlbiBhcnJheXMgd2lsbCBiZSBzbGljZWQgdG8gdGFrZSBhbgoJICogICAgICBpbmRlcGVuZGVudCBjb3B5IHdpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUgYGRhdGFgIG9yIGBhYURhdGFgIHBhcmFtZXRlcnMKCSAqICAgICAgaWYgdGhleSBhcmUgcHJlc2VudC4gVGhpcyBpcyBzbyB5b3UgY2FuIHBhc3MgaW4gYSBjb2xsZWN0aW9uIHRvCgkgKiAgICAgIERhdGFUYWJsZXMgYW5kIGhhdmUgdGhhdCB1c2VkIGFzIHlvdXIgZGF0YSBzb3VyY2Ugd2l0aG91dCBicmVha2luZyB0aGUKCSAqICAgICAgcmVmZXJlbmNlcwoJICogIEByZXR1cm5zIHtvYmplY3R9IG91dCBSZWZlcmVuY2UsIGp1c3QgZm9yIGNvbnZlbmllbmNlIC0gb3V0ID09PSB0aGUgcmV0dXJuLgoJICogIEBtZW1iZXJvZiBEYXRhVGFibGUjb0FwaQoJICogIEB0b2RvIFRoaXMgZG9lc24ndCB0YWtlIGFjY291bnQgb2YgYXJyYXlzIGluc2lkZSB0aGUgZGVlcCBjb3BpZWQgb2JqZWN0cy4KCSAqLwoJZnVuY3Rpb24gX2ZuRXh0ZW5kKCBvdXQsIGV4dGVuZGVyLCBicmVha1JlZnMgKQoJewoJCXZhciB2YWw7CgkKCQlmb3IgKCB2YXIgcHJvcCBpbiBleHRlbmRlciApIHsKCQkJaWYgKCBleHRlbmRlci5oYXNPd25Qcm9wZXJ0eShwcm9wKSApIHsKCQkJCXZhbCA9IGV4dGVuZGVyW3Byb3BdOwoJCgkJCQlpZiAoICQuaXNQbGFpbk9iamVjdCggdmFsICkgKSB7CgkJCQkJaWYgKCAhICQuaXNQbGFpbk9iamVjdCggb3V0W3Byb3BdICkgKSB7CgkJCQkJCW91dFtwcm9wXSA9IHt9OwoJCQkJCX0KCQkJCQkkLmV4dGVuZCggdHJ1ZSwgb3V0W3Byb3BdLCB2YWwgKTsKCQkJCX0KCQkJCWVsc2UgaWYgKCBicmVha1JlZnMgJiYgcHJvcCAhPT0gJ2RhdGEnICYmIHByb3AgIT09ICdhYURhdGEnICYmICQuaXNBcnJheSh2YWwpICkgewoJCQkJCW91dFtwcm9wXSA9IHZhbC5zbGljZSgpOwoJCQkJfQoJCQkJZWxzZSB7CgkJCQkJb3V0W3Byb3BdID0gdmFsOwoJCQkJfQoJCQl9CgkJfQoJCgkJcmV0dXJuIG91dDsKCX0KCQoJCgkvKioKCSAqIEJpbmQgYW4gZXZlbnQgaGFuZGVycyB0byBhbGxvdyBhIGNsaWNrIG9yIHJldHVybiBrZXkgdG8gYWN0aXZhdGUgdGhlIGNhbGxiYWNrLgoJICogVGhpcyBpcyBnb29kIGZvciBhY2Nlc3NpYmlsaXR5IHNpbmNlIGEgcmV0dXJuIG9uIHRoZSBrZXlib2FyZCB3aWxsIGhhdmUgdGhlCgkgKiBzYW1lIGVmZmVjdCBhcyBhIGNsaWNrLCBpZiB0aGUgZWxlbWVudCBoYXMgZm9jdXMuCgkgKiAgQHBhcmFtIHtlbGVtZW50fSBuIEVsZW1lbnQgdG8gYmluZCB0aGUgYWN0aW9uIHRvCgkgKiAgQHBhcmFtIHtvYmplY3R9IG9EYXRhIERhdGEgb2JqZWN0IHRvIHBhc3MgdG8gdGhlIHRyaWdnZXJlZCBmdW5jdGlvbgoJICogIEBwYXJhbSB7ZnVuY3Rpb259IGZuIENhbGxiYWNrIGZ1bmN0aW9uIGZvciB3aGVuIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQKCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuQmluZEFjdGlvbiggbiwgb0RhdGEsIGZuICkKCXsKCQkkKG4pCgkJCS5vbiggJ2NsaWNrLkRUJywgb0RhdGEsIGZ1bmN0aW9uIChlKSB7CgkJCQkJJChuKS5ibHVyKCk7IC8vIFJlbW92ZSBmb2N1cyBvdXRsaW5lIGZvciBtb3VzZSB1c2VycwoJCQkJCWZuKGUpOwoJCQkJfSApCgkJCS5vbiggJ2tleXByZXNzLkRUJywgb0RhdGEsIGZ1bmN0aW9uIChlKXsKCQkJCQlpZiAoIGUud2hpY2ggPT09IDEzICkgewoJCQkJCQllLnByZXZlbnREZWZhdWx0KCk7CgkJCQkJCWZuKGUpOwoJCQkJCX0KCQkJCX0gKQoJCQkub24oICdzZWxlY3RzdGFydC5EVCcsIGZ1bmN0aW9uICgpIHsKCQkJCQkvKiBUYWtlIHRoZSBicnV0YWwgYXBwcm9hY2ggdG8gY2FuY2VsbGluZyB0ZXh0IHNlbGVjdGlvbiAqLwoJCQkJCXJldHVybiBmYWxzZTsKCQkJCX0gKTsKCX0KCQoJCgkvKioKCSAqIFJlZ2lzdGVyIGEgY2FsbGJhY2sgZnVuY3Rpb24uIEVhc2lseSBhbGxvd3MgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBhZGRlZCB0bwoJICogYW4gYXJyYXkgc3RvcmUgb2YgY2FsbGJhY2sgZnVuY3Rpb25zIHRoYXQgY2FuIHRoZW4gYWxsIGJlIGNhbGxlZCB0b2dldGhlci4KCSAqICBAcGFyYW0ge29iamVjdH0gb1NldHRpbmdzIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkgKiAgQHBhcmFtIHtzdHJpbmd9IHNTdG9yZSBOYW1lIG9mIHRoZSBhcnJheSBzdG9yYWdlIGZvciB0aGUgY2FsbGJhY2tzIGluIG9TZXR0aW5ncwoJICogIEBwYXJhbSB7ZnVuY3Rpb259IGZuIEZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBiYWNrCgkgKiAgQHBhcmFtIHtzdHJpbmd9IHNOYW1lIElkZW50aWZ5aW5nIG5hbWUgZm9yIHRoZSBjYWxsYmFjayAoaS5lLiBhIGxhYmVsKQoJICogIEBtZW1iZXJvZiBEYXRhVGFibGUjb0FwaQoJICovCglmdW5jdGlvbiBfZm5DYWxsYmFja1JlZyggb1NldHRpbmdzLCBzU3RvcmUsIGZuLCBzTmFtZSApCgl7CgkJaWYgKCBmbiApCgkJewoJCQlvU2V0dGluZ3Nbc1N0b3JlXS5wdXNoKCB7CgkJCQkiZm4iOiBmbiwKCQkJCSJzTmFtZSI6IHNOYW1lCgkJCX0gKTsKCQl9Cgl9CgkKCQoJLyoqCgkgKiBGaXJlIGNhbGxiYWNrIGZ1bmN0aW9ucyBhbmQgdHJpZ2dlciBldmVudHMuIE5vdGUgdGhhdCB0aGUgbG9vcCBvdmVyIHRoZQoJICogY2FsbGJhY2sgYXJyYXkgc3RvcmUgaXMgZG9uZSBiYWNrd2FyZHMhIEZ1cnRoZXIgbm90ZSB0aGF0IHlvdSBkbyBub3Qgd2FudCB0bwoJICogZmlyZSBvZmYgdHJpZ2dlcnMgaW4gdGltZSBzZW5zaXRpdmUgYXBwbGljYXRpb25zIChmb3IgZXhhbXBsZSBjZWxsIGNyZWF0aW9uKQoJICogYXMgaXRzIHNsb3cuCgkgKiAgQHBhcmFtIHtvYmplY3R9IHNldHRpbmdzIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkgKiAgQHBhcmFtIHtzdHJpbmd9IGNhbGxiYWNrQXJyIE5hbWUgb2YgdGhlIGFycmF5IHN0b3JhZ2UgZm9yIHRoZSBjYWxsYmFja3MgaW4KCSAqICAgICAgb1NldHRpbmdzCgkgKiAgQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZSBOYW1lIG9mIHRoZSBqUXVlcnkgY3VzdG9tIGV2ZW50IHRvIHRyaWdnZXIuIElmCgkgKiAgICAgIG51bGwgbm8gdHJpZ2dlciBpcyBmaXJlZAoJICogIEBwYXJhbSB7YXJyYXl9IGFyZ3MgQXJyYXkgb2YgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIC8KCSAqICAgICAgdHJpZ2dlcgoJICogIEBtZW1iZXJvZiBEYXRhVGFibGUjb0FwaQoJICovCglmdW5jdGlvbiBfZm5DYWxsYmFja0ZpcmUoIHNldHRpbmdzLCBjYWxsYmFja0FyciwgZXZlbnROYW1lLCBhcmdzICkKCXsKCQl2YXIgcmV0ID0gW107CgkKCQlpZiAoIGNhbGxiYWNrQXJyICkgewoJCQlyZXQgPSAkLm1hcCggc2V0dGluZ3NbY2FsbGJhY2tBcnJdLnNsaWNlKCkucmV2ZXJzZSgpLCBmdW5jdGlvbiAodmFsLCBpKSB7CgkJCQlyZXR1cm4gdmFsLmZuLmFwcGx5KCBzZXR0aW5ncy5vSW5zdGFuY2UsIGFyZ3MgKTsKCQkJfSApOwoJCX0KCQoJCWlmICggZXZlbnROYW1lICE9PSBudWxsICkgewoJCQl2YXIgZSA9ICQuRXZlbnQoIGV2ZW50TmFtZSsnLmR0JyApOwoJCgkJCSQoc2V0dGluZ3MublRhYmxlKS50cmlnZ2VyKCBlLCBhcmdzICk7CgkKCQkJcmV0LnB1c2goIGUucmVzdWx0ICk7CgkJfQoJCgkJcmV0dXJuIHJldDsKCX0KCQoJCglmdW5jdGlvbiBfZm5MZW5ndGhPdmVyZmxvdyAoIHNldHRpbmdzICkKCXsKCQl2YXIKCQkJc3RhcnQgPSBzZXR0aW5ncy5faURpc3BsYXlTdGFydCwKCQkJZW5kID0gc2V0dGluZ3MuZm5EaXNwbGF5RW5kKCksCgkJCWxlbiA9IHNldHRpbmdzLl9pRGlzcGxheUxlbmd0aDsKCQoJCS8qIElmIHdlIGhhdmUgc3BhY2UgdG8gc2hvdyBleHRyYSByb3dzIChiYWNraW5nIHVwIGZyb20gdGhlIGVuZCBwb2ludCAtIHRoZW4gZG8gc28gKi8KCQlpZiAoIHN0YXJ0ID49IGVuZCApCgkJewoJCQlzdGFydCA9IGVuZCAtIGxlbjsKCQl9CgkKCQkvLyBLZWVwIHRoZSBzdGFydCByZWNvcmQgb24gdGhlIGN1cnJlbnQgcGFnZQoJCXN0YXJ0IC09IChzdGFydCAlIGxlbik7CgkKCQlpZiAoIGxlbiA9PT0gLTEgfHwgc3RhcnQgPCAwICkKCQl7CgkJCXN0YXJ0ID0gMDsKCQl9CgkKCQlzZXR0aW5ncy5faURpc3BsYXlTdGFydCA9IHN0YXJ0OwoJfQoJCgkKCWZ1bmN0aW9uIF9mblJlbmRlcmVyKCBzZXR0aW5ncywgdHlwZSApCgl7CgkJdmFyIHJlbmRlcmVyID0gc2V0dGluZ3MucmVuZGVyZXI7CgkJdmFyIGhvc3QgPSBEYXRhVGFibGUuZXh0LnJlbmRlcmVyW3R5cGVdOwoJCgkJaWYgKCAkLmlzUGxhaW5PYmplY3QoIHJlbmRlcmVyICkgJiYgcmVuZGVyZXJbdHlwZV0gKSB7CgkJCS8vIFNwZWNpZmljIHJlbmRlcmVyIGZvciB0aGlzIHR5cGUuIElmIGF2YWlsYWJsZSB1c2UgaXQsIG90aGVyd2lzZSB1c2UKCQkJLy8gdGhlIGRlZmF1bHQuCgkJCXJldHVybiBob3N0W3JlbmRlcmVyW3R5cGVdXSB8fCBob3N0Ll87CgkJfQoJCWVsc2UgaWYgKCB0eXBlb2YgcmVuZGVyZXIgPT09ICdzdHJpbmcnICkgewoJCQkvLyBDb21tb24gcmVuZGVyZXIgLSBpZiB0aGVyZSBpcyBvbmUgYXZhaWxhYmxlIGZvciB0aGlzIHR5cGUgdXNlIGl0LAoJCQkvLyBvdGhlcndpc2UgdXNlIHRoZSBkZWZhdWx0CgkJCXJldHVybiBob3N0W3JlbmRlcmVyXSB8fCBob3N0Ll87CgkJfQoJCgkJLy8gVXNlIHRoZSBkZWZhdWx0CgkJcmV0dXJuIGhvc3QuXzsKCX0KCQoJCgkvKioKCSAqIERldGVjdCB0aGUgZGF0YSBzb3VyY2UgYmVpbmcgdXNlZCBmb3IgdGhlIHRhYmxlLiBVc2VkIHRvIHNpbXBsaWZ5IHRoZSBjb2RlCgkgKiBhIGxpdHRsZSAoYWpheCkgYW5kIHRvIG1ha2UgaXQgY29tcHJlc3MgYSBsaXR0bGUgc21hbGxlci4KCSAqCgkgKiAgQHBhcmFtIHtvYmplY3R9IHNldHRpbmdzIGRhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkgKiAgQHJldHVybnMge3N0cmluZ30gRGF0YSBzb3VyY2UKCSAqICBAbWVtYmVyb2YgRGF0YVRhYmxlI29BcGkKCSAqLwoJZnVuY3Rpb24gX2ZuRGF0YVNvdXJjZSAoIHNldHRpbmdzICkKCXsKCQlpZiAoIHNldHRpbmdzLm9GZWF0dXJlcy5iU2VydmVyU2lkZSApIHsKCQkJcmV0dXJuICdzc3AnOwoJCX0KCQllbHNlIGlmICggc2V0dGluZ3MuYWpheCB8fCBzZXR0aW5ncy5zQWpheFNvdXJjZSApIHsKCQkJcmV0dXJuICdhamF4JzsKCQl9CgkJcmV0dXJuICdkb20nOwoJfQoJCgoJCgkKCS8qKgoJICogQ29tcHV0ZWQgc3RydWN0dXJlIG9mIHRoZSBEYXRhVGFibGVzIEFQSSwgZGVmaW5lZCBieSB0aGUgb3B0aW9ucyBwYXNzZWQgdG8KCSAqIGBEYXRhVGFibGUuQXBpLnJlZ2lzdGVyKClgIHdoZW4gYnVpbGRpbmcgdGhlIEFQSS4KCSAqCgkgKiBUaGUgc3RydWN0dXJlIGlzIGJ1aWx0IGluIG9yZGVyIHRvIHNwZWVkIGNyZWF0aW9uIGFuZCBleHRlbnNpb24gb2YgdGhlIEFwaQoJICogb2JqZWN0cyBzaW5jZSB0aGUgZXh0ZW5zaW9ucyBhcmUgZWZmZWN0aXZlbHkgcHJlLXBhcnNlZC4KCSAqCgkgKiBUaGUgYXJyYXkgaXMgYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlLCB3aGVyZSB0aGlzCgkgKiBiYXNlIGFycmF5IHJlcHJlc2VudHMgdGhlIEFwaSBwcm90b3R5cGUgYmFzZToKCSAqCgkgKiAgICAgWwoJICogICAgICAgewoJICogICAgICAgICBuYW1lOiAgICAgICdkYXRhJyAgICAgICAgICAgICAgICAtLSBzdHJpbmcgICAtIFByb3BlcnR5IG5hbWUKCSAqICAgICAgICAgdmFsOiAgICAgICBmdW5jdGlvbiAoKSB7fSwgICAgICAgLS0gZnVuY3Rpb24gLSBBcGkgbWV0aG9kIChvciB1bmRlZmluZWQgaWYganVzdCBhbiBvYmplY3QKCSAqICAgICAgICAgbWV0aG9kRXh0OiBbIC4uLiBdLCAgICAgICAgICAgICAgLS0gYXJyYXkgICAgLSBBcnJheSBvZiBBcGkgb2JqZWN0IGRlZmluaXRpb25zIHRvIGV4dGVuZCB0aGUgbWV0aG9kIHJlc3VsdAoJICogICAgICAgICBwcm9wRXh0OiAgIFsgLi4uIF0gICAgICAgICAgICAgICAtLSBhcnJheSAgICAtIEFycmF5IG9mIEFwaSBvYmplY3QgZGVmaW5pdGlvbnMgdG8gZXh0ZW5kIHRoZSBwcm9wZXJ0eQoJICogICAgICAgfSwKCSAqICAgICAgIHsKCSAqICAgICAgICAgbmFtZTogICAgICdyb3cnCgkgKiAgICAgICAgIHZhbDogICAgICAge30sCgkgKiAgICAgICAgIG1ldGhvZEV4dDogWyAuLi4gXSwKCSAqICAgICAgICAgcHJvcEV4dDogICBbCgkgKiAgICAgICAgICAgewoJICogICAgICAgICAgICAgbmFtZTogICAgICAnZGF0YScKCSAqICAgICAgICAgICAgIHZhbDogICAgICAgZnVuY3Rpb24gKCkge30sCgkgKiAgICAgICAgICAgICBtZXRob2RFeHQ6IFsgLi4uIF0sCgkgKiAgICAgICAgICAgICBwcm9wRXh0OiAgIFsgLi4uIF0KCSAqICAgICAgICAgICB9LAoJICogICAgICAgICAgIC4uLgoJICogICAgICAgICBdCgkgKiAgICAgICB9CgkgKiAgICAgXQoJICoKCSAqIEB0eXBlIHtBcnJheX0KCSAqIEBpZ25vcmUKCSAqLwoJdmFyIF9fYXBpU3RydWN0ID0gW107CgkKCQoJLyoqCgkgKiBgQXJyYXkucHJvdG90eXBlYCByZWZlcmVuY2UuCgkgKgoJICogQHR5cGUgb2JqZWN0CgkgKiBAaWdub3JlCgkgKi8KCXZhciBfX2FycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7CgkKCQoJLyoqCgkgKiBBYnN0cmFjdGlvbiBmb3IgYGNvbnRleHRgIHBhcmFtZXRlciBvZiB0aGUgYEFwaWAgY29uc3RydWN0b3IgdG8gYWxsb3cgaXQgdG8KCSAqIHRha2Ugc2V2ZXJhbCBkaWZmZXJlbnQgZm9ybXMgZm9yIGVhc2Ugb2YgdXNlLgoJICoKCSAqIEVhY2ggb2YgdGhlIGlucHV0IHBhcmFtZXRlciB0eXBlcyB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIERhdGFUYWJsZXMgc2V0dGluZ3MKCSAqIG9iamVjdCB3aGVyZSBwb3NzaWJsZS4KCSAqCgkgKiBAcGFyYW0gIHtzdHJpbmd8bm9kZXxqUXVlcnl8b2JqZWN0fSBtaXhlZCBEYXRhVGFibGUgaWRlbnRpZmllci4gQ2FuIGJlIG9uZQoJICogICBvZjoKCSAqCgkgKiAgICogYHN0cmluZ2AgLSBqUXVlcnkgc2VsZWN0b3IuIEFueSBEYXRhVGFibGVzJyBtYXRjaGluZyB0aGUgZ2l2ZW4gc2VsZWN0b3IKCSAqICAgICB3aXRoIGJlIGZvdW5kIGFuZCB1c2VkLgoJICogICAqIGBub2RlYCAtIGBUQUJMRWAgbm9kZSB3aGljaCBoYXMgYWxyZWFkeSBiZWVuIGZvcm1lZCBpbnRvIGEgRGF0YVRhYmxlLgoJICogICAqIGBqUXVlcnlgIC0gQSBqUXVlcnkgb2JqZWN0IG9mIGBUQUJMRWAgbm9kZXMuCgkgKiAgICogYG9iamVjdGAgLSBEYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJICogICAqIGBEYXRhVGFibGVzLkFwaWAgLSBBUEkgaW5zdGFuY2UKCSAqIEByZXR1cm4ge2FycmF5fG51bGx9IE1hdGNoaW5nIERhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0cy4gYG51bGxgIG9yCgkgKiAgIGB1bmRlZmluZWRgIGlzIHJldHVybmVkIGlmIG5vIG1hdGNoaW5nIERhdGFUYWJsZSBpcyBmb3VuZC4KCSAqIEBpZ25vcmUKCSAqLwoJdmFyIF90b1NldHRpbmdzID0gZnVuY3Rpb24gKCBtaXhlZCApCgl7CgkJdmFyIGlkeCwganE7CgkJdmFyIHNldHRpbmdzID0gRGF0YVRhYmxlLnNldHRpbmdzOwoJCXZhciB0YWJsZXMgPSAkLm1hcCggc2V0dGluZ3MsIGZ1bmN0aW9uIChlbCwgaSkgewoJCQlyZXR1cm4gZWwublRhYmxlOwoJCX0gKTsKCQoJCWlmICggISBtaXhlZCApIHsKCQkJcmV0dXJuIFtdOwoJCX0KCQllbHNlIGlmICggbWl4ZWQublRhYmxlICYmIG1peGVkLm9BcGkgKSB7CgkJCS8vIERhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkJCXJldHVybiBbIG1peGVkIF07CgkJfQoJCWVsc2UgaWYgKCBtaXhlZC5ub2RlTmFtZSAmJiBtaXhlZC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAndGFibGUnICkgewoJCQkvLyBUYWJsZSBub2RlCgkJCWlkeCA9ICQuaW5BcnJheSggbWl4ZWQsIHRhYmxlcyApOwoJCQlyZXR1cm4gaWR4ICE9PSAtMSA/IFsgc2V0dGluZ3NbaWR4XSBdIDogbnVsbDsKCQl9CgkJZWxzZSBpZiAoIG1peGVkICYmIHR5cGVvZiBtaXhlZC5zZXR0aW5ncyA9PT0gJ2Z1bmN0aW9uJyApIHsKCQkJcmV0dXJuIG1peGVkLnNldHRpbmdzKCkudG9BcnJheSgpOwoJCX0KCQllbHNlIGlmICggdHlwZW9mIG1peGVkID09PSAnc3RyaW5nJyApIHsKCQkJLy8galF1ZXJ5IHNlbGVjdG9yCgkJCWpxID0gJChtaXhlZCk7CgkJfQoJCWVsc2UgaWYgKCBtaXhlZCBpbnN0YW5jZW9mICQgKSB7CgkJCS8vIGpRdWVyeSBvYmplY3QgKGFsc28gRGF0YVRhYmxlcyBpbnN0YW5jZSkKCQkJanEgPSBtaXhlZDsKCQl9CgkKCQlpZiAoIGpxICkgewoJCQlyZXR1cm4ganEubWFwKCBmdW5jdGlvbihpKSB7CgkJCQlpZHggPSAkLmluQXJyYXkoIHRoaXMsIHRhYmxlcyApOwoJCQkJcmV0dXJuIGlkeCAhPT0gLTEgPyBzZXR0aW5nc1tpZHhdIDogbnVsbDsKCQkJfSApLnRvQXJyYXkoKTsKCQl9Cgl9OwoJCgkKCS8qKgoJICogRGF0YVRhYmxlcyBBUEkgY2xhc3MgLSB1c2VkIHRvIGNvbnRyb2wgYW5kIGludGVyZmFjZSB3aXRoICBvbmUgb3IgbW9yZQoJICogRGF0YVRhYmxlcyBlbmhhbmNlZCB0YWJsZXMuCgkgKgoJICogVGhlIEFQSSBjbGFzcyBpcyBoZWF2aWx5IGJhc2VkIG9uIGpRdWVyeSwgcHJlc2VudGluZyBhIGNoYWluYWJsZSBpbnRlcmZhY2UKCSAqIHRoYXQgeW91IGNhbiB1c2UgdG8gaW50ZXJhY3Qgd2l0aCB0YWJsZXMuIEVhY2ggaW5zdGFuY2Ugb2YgdGhlIEFQSSBjbGFzcyBoYXMKCSAqIGEgImNvbnRleHQiIC0gaS5lLiB0aGUgdGFibGVzIHRoYXQgaXQgd2lsbCBvcGVyYXRlIG9uLiBUaGlzIGNvdWxkIGJlIGEgc2luZ2xlCgkgKiB0YWJsZSwgYWxsIHRhYmxlcyBvbiBhIHBhZ2Ugb3IgYSBzdWItc2V0IHRoZXJlb2YuCgkgKgoJICogQWRkaXRpb25hbGx5IHRoZSBBUEkgaXMgZGVzaWduZWQgdG8gYWxsb3cgeW91IHRvIA=="
},
{
"key": "jquery.dataTables.js?4?1?2",
"type": "binary",
"value": "base64:ZWFzaWx5IHdvcmsgd2l0aCB0aGUgZGF0YSBpbgoJICogdGhlIHRhYmxlcywgcmV0cmlldmluZyBhbmQgbWFuaXB1bGF0aW5nIGl0IGFzIHJlcXVpcmVkLiBUaGlzIGlzIGRvbmUgYnkKCSAqIHByZXNlbnRpbmcgdGhlIEFQSSBjbGFzcyBhcyBhbiBhcnJheSBsaWtlIGludGVyZmFjZS4gVGhlIGNvbnRlbnRzIG9mIHRoZQoJICogYXJyYXkgZGVwZW5kIHVwb24gdGhlIGFjdGlvbnMgcmVxdWVzdGVkIGJ5IGVhY2ggbWV0aG9kIChmb3IgZXhhbXBsZQoJICogYHJvd3MoKS5ub2RlcygpYCB3aWxsIHJldHVybiBhbiBhcnJheSBvZiBub2Rlcywgd2hpbGUgYHJvd3MoKS5kYXRhKClgIHdpbGwKCSAqIHJldHVybiBhbiBhcnJheSBvZiBvYmplY3RzIG9yIGFycmF5cyBkZXBlbmRpbmcgdXBvbiB5b3VyIHRhYmxlJ3MKCSAqIGNvbmZpZ3VyYXRpb24pLiBUaGUgQVBJIG9iamVjdCBoYXMgYSBudW1iZXIgb2YgYXJyYXkgbGlrZSBtZXRob2RzIChgcHVzaGAsCgkgKiBgcG9wYCwgYHJldmVyc2VgIGV0YykgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIGhlbHBlciBtZXRob2RzIChgZWFjaGAsIGBwbHVja2AsCgkgKiBgdW5pcXVlYCBldGMpIHRvIGFzc2lzdCB5b3VyIHdvcmtpbmcgd2l0aCB0aGUgZGF0YSBoZWxkIGluIGEgdGFibGUuCgkgKgoJICogTW9zdCBtZXRob2RzICh0aG9zZSB3aGljaCByZXR1cm4gYW4gQXBpIGluc3RhbmNlKSBhcmUgY2hhaW5hYmxlLCB3aGljaCBtZWFucwoJICogdGhlIHJldHVybiBmcm9tIGEgbWV0aG9kIGNhbGwgYWxzbyBoYXMgYWxsIG9mIHRoZSBtZXRob2RzIGF2YWlsYWJsZSB0aGF0IHRoZQoJICogdG9wIGxldmVsIG9iamVjdCBoYWQuIEZvciBleGFtcGxlLCB0aGVzZSB0d28gY2FsbHMgYXJlIGVxdWl2YWxlbnQ6CgkgKgoJICogICAgIC8vIE5vdCBjaGFpbmVkCgkgKiAgICAgYXBpLnJvdy5hZGQoIHsuLi59ICk7CgkgKiAgICAgYXBpLmRyYXcoKTsKCSAqCgkgKiAgICAgLy8gQ2hhaW5lZAoJICogICAgIGFwaS5yb3cuYWRkKCB7Li4ufSApLmRyYXcoKTsKCSAqCgkgKiBAY2xhc3MgRGF0YVRhYmxlLkFwaQoJICogQHBhcmFtIHthcnJheXxvYmplY3R8c3RyaW5nfGpRdWVyeX0gY29udGV4dCBEYXRhVGFibGUgaWRlbnRpZmllci4gVGhpcyBpcwoJICogICB1c2VkIHRvIGRlZmluZSB3aGljaCBEYXRhVGFibGVzIGVuaGFuY2VkIHRhYmxlcyB0aGlzIEFQSSB3aWxsIG9wZXJhdGUgb24uCgkgKiAgIENhbiBiZSBvbmUgb2Y6CgkgKgoJICogICAqIGBzdHJpbmdgIC0galF1ZXJ5IHNlbGVjdG9yLiBBbnkgRGF0YVRhYmxlcycgbWF0Y2hpbmcgdGhlIGdpdmVuIHNlbGVjdG9yCgkgKiAgICAgd2l0aCBiZSBmb3VuZCBhbmQgdXNlZC4KCSAqICAgKiBgbm9kZWAgLSBgVEFCTEVgIG5vZGUgd2hpY2ggaGFzIGFscmVhZHkgYmVlbiBmb3JtZWQgaW50byBhIERhdGFUYWJsZS4KCSAqICAgKiBgalF1ZXJ5YCAtIEEgalF1ZXJ5IG9iamVjdCBvZiBgVEFCTEVgIG5vZGVzLgoJICogICAqIGBvYmplY3RgIC0gRGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCSAqIEBwYXJhbSB7YXJyYXl9IFtkYXRhXSBEYXRhIHRvIGluaXRpYWxpc2UgdGhlIEFwaSBpbnN0YW5jZSB3aXRoLgoJICoKCSAqIEBleGFtcGxlCgkgKiAgIC8vIERpcmVjdCBpbml0aWFsaXNhdGlvbiBkdXJpbmcgRGF0YVRhYmxlcyBjb25zdHJ1Y3Rpb24KCSAqICAgdmFyIGFwaSA9ICQoJyNleGFtcGxlJykuRGF0YVRhYmxlKCk7CgkgKgoJICogQGV4YW1wbGUKCSAqICAgLy8gSW5pdGlhbGlzYXRpb24gdXNpbmcgYSBEYXRhVGFibGVzIGpRdWVyeSBvYmplY3QKCSAqICAgdmFyIGFwaSA9ICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCkuYXBpKCk7CgkgKgoJICogQGV4YW1wbGUKCSAqICAgLy8gSW5pdGlhbGlzYXRpb24gYXMgYSBjb25zdHJ1Y3RvcgoJICogICB2YXIgYXBpID0gbmV3ICQuZm4uRGF0YVRhYmxlLkFwaSggJ3RhYmxlLmRhdGFUYWJsZScgKTsKCSAqLwoJX0FwaSA9IGZ1bmN0aW9uICggY29udGV4dCwgZGF0YSApCgl7CgkJaWYgKCAhICh0aGlzIGluc3RhbmNlb2YgX0FwaSkgKSB7CgkJCXJldHVybiBuZXcgX0FwaSggY29udGV4dCwgZGF0YSApOwoJCX0KCQoJCXZhciBzZXR0aW5ncyA9IFtdOwoJCXZhciBjdHhTZXR0aW5ncyA9IGZ1bmN0aW9uICggbyApIHsKCQkJdmFyIGEgPSBfdG9TZXR0aW5ncyggbyApOwoJCQlpZiAoIGEgKSB7CgkJCQlzZXR0aW5ncyA9IHNldHRpbmdzLmNvbmNhdCggYSApOwoJCQl9CgkJfTsKCQoJCWlmICggJC5pc0FycmF5KCBjb250ZXh0ICkgKSB7CgkJCWZvciAoIHZhciBpPTAsIGllbj1jb250ZXh0Lmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQkJY3R4U2V0dGluZ3MoIGNvbnRleHRbaV0gKTsKCQkJfQoJCX0KCQllbHNlIHsKCQkJY3R4U2V0dGluZ3MoIGNvbnRleHQgKTsKCQl9CgkKCQkvLyBSZW1vdmUgZHVwbGljYXRlcwoJCXRoaXMuY29udGV4dCA9IF91bmlxdWUoIHNldHRpbmdzICk7CgkKCQkvLyBJbml0aWFsIGRhdGEKCQlpZiAoIGRhdGEgKSB7CgkJCSQubWVyZ2UoIHRoaXMsIGRhdGEgKTsKCQl9CgkKCQkvLyBzZWxlY3RvcgoJCXRoaXMuc2VsZWN0b3IgPSB7CgkJCXJvd3M6IG51bGwsCgkJCWNvbHM6IG51bGwsCgkJCW9wdHM6IG51bGwKCQl9OwoJCgkJX0FwaS5leHRlbmQoIHRoaXMsIHRoaXMsIF9fYXBpU3RydWN0ICk7Cgl9OwoJCglEYXRhVGFibGUuQXBpID0gX0FwaTsKCQoJLy8gRG9uJ3QgZGVzdHJveSB0aGUgZXhpc3RpbmcgcHJvdG90eXBlLCBqdXN0IGV4dGVuZCBpdC4gUmVxdWlyZWQgZm9yIGpRdWVyeSAyJ3MKCS8vIGlzUGxhaW5PYmplY3QuCgkkLmV4dGVuZCggX0FwaS5wcm90b3R5cGUsIHsKCQlhbnk6IGZ1bmN0aW9uICgpCgkJewoJCQlyZXR1cm4gdGhpcy5jb3VudCgpICE9PSAwOwoJCX0sCgkKCQoJCWNvbmNhdDogIF9fYXJyYXlQcm90by5jb25jYXQsCgkKCQoJCWNvbnRleHQ6IFtdLCAvLyBhcnJheSBvZiB0YWJsZSBzZXR0aW5ncyBvYmplY3RzCgkKCQoJCWNvdW50OiBmdW5jdGlvbiAoKQoJCXsKCQkJcmV0dXJuIHRoaXMuZmxhdHRlbigpLmxlbmd0aDsKCQl9LAoJCgkKCQllYWNoOiBmdW5jdGlvbiAoIGZuICkKCQl7CgkJCWZvciAoIHZhciBpPTAsIGllbj10aGlzLmxlbmd0aCA7IGk8aWVuOyBpKysgKSB7CgkJCQlmbi5jYWxsKCB0aGlzLCB0aGlzW2ldLCBpLCB0aGlzICk7CgkJCX0KCQoJCQlyZXR1cm4gdGhpczsKCQl9LAoJCgkKCQllcTogZnVuY3Rpb24gKCBpZHggKQoJCXsKCQkJdmFyIGN0eCA9IHRoaXMuY29udGV4dDsKCQoJCQlyZXR1cm4gY3R4Lmxlbmd0aCA+IGlkeCA/CgkJCQluZXcgX0FwaSggY3R4W2lkeF0sIHRoaXNbaWR4XSApIDoKCQkJCW51bGw7CgkJfSwKCQoJCgkJZmlsdGVyOiBmdW5jdGlvbiAoIGZuICkKCQl7CgkJCXZhciBhID0gW107CgkKCQkJaWYgKCBfX2FycmF5UHJvdG8uZmlsdGVyICkgewoJCQkJYSA9IF9fYXJyYXlQcm90by5maWx0ZXIuY2FsbCggdGhpcywgZm4sIHRoaXMgKTsKCQkJfQoJCQllbHNlIHsKCQkJCS8vIENvbXBhdGliaWxpdHkgZm9yIGJyb3dzZXJzIHdpdGhvdXQgRU1DQS0yNTItNSAoSlMgMS42KQoJCQkJZm9yICggdmFyIGk9MCwgaWVuPXRoaXMubGVuZ3RoIDsgaTxpZW4gOyBpKysgKSB7CgkJCQkJaWYgKCBmbi5jYWxsKCB0aGlzLCB0aGlzW2ldLCBpLCB0aGlzICkgKSB7CgkJCQkJCWEucHVzaCggdGhpc1tpXSApOwoJCQkJCX0KCQkJCX0KCQkJfQoJCgkJCXJldHVybiBuZXcgX0FwaSggdGhpcy5jb250ZXh0LCBhICk7CgkJfSwKCQoJCgkJZmxhdHRlbjogZnVuY3Rpb24gKCkKCQl7CgkJCXZhciBhID0gW107CgkJCXJldHVybiBuZXcgX0FwaSggdGhpcy5jb250ZXh0LCBhLmNvbmNhdC5hcHBseSggYSwgdGhpcy50b0FycmF5KCkgKSApOwoJCX0sCgkKCQoJCWpvaW46ICAgIF9fYXJyYXlQcm90by5qb2luLAoJCgkKCQlpbmRleE9mOiBfX2FycmF5UHJvdG8uaW5kZXhPZiB8fCBmdW5jdGlvbiAob2JqLCBzdGFydCkKCQl7CgkJCWZvciAoIHZhciBpPShzdGFydCB8fCAwKSwgaWVuPXRoaXMubGVuZ3RoIDsgaTxpZW4gOyBpKysgKSB7CgkJCQlpZiAoIHRoaXNbaV0gPT09IG9iaiApIHsKCQkJCQlyZXR1cm4gaTsKCQkJCX0KCQkJfQoJCQlyZXR1cm4gLTE7CgkJfSwKCQoJCWl0ZXJhdG9yOiBmdW5jdGlvbiAoIGZsYXR0ZW4sIHR5cGUsIGZuLCBhbHdheXNOZXcgKSB7CgkJCXZhcgoJCQkJYSA9IFtdLCByZXQsCgkJCQlpLCBpZW4sIGosIGplbiwKCQkJCWNvbnRleHQgPSB0aGlzLmNvbnRleHQsCgkJCQlyb3dzLCBpdGVtcywgaXRlbSwKCQkJCXNlbGVjdG9yID0gdGhpcy5zZWxlY3RvcjsKCQoJCQkvLyBBcmd1bWVudCBzaGlmdGluZwoJCQlpZiAoIHR5cGVvZiBmbGF0dGVuID09PSAnc3RyaW5nJyApIHsKCQkJCWFsd2F5c05ldyA9IGZuOwoJCQkJZm4gPSB0eXBlOwoJCQkJdHlwZSA9IGZsYXR0ZW47CgkJCQlmbGF0dGVuID0gZmFsc2U7CgkJCX0KCQoJCQlmb3IgKCBpPTAsIGllbj1jb250ZXh0Lmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQkJdmFyIGFwaUluc3QgPSBuZXcgX0FwaSggY29udGV4dFtpXSApOwoJCgkJCQlpZiAoIHR5cGUgPT09ICd0YWJsZScgKSB7CgkJCQkJcmV0ID0gZm4uY2FsbCggYXBpSW5zdCwgY29udGV4dFtpXSwgaSApOwoJCgkJCQkJaWYgKCByZXQgIT09IHVuZGVmaW5lZCApIHsKCQkJCQkJYS5wdXNoKCByZXQgKTsKCQkJCQl9CgkJCQl9CgkJCQllbHNlIGlmICggdHlwZSA9PT0gJ2NvbHVtbnMnIHx8IHR5cGUgPT09ICdyb3dzJyApIHsKCQkJCQkvLyB0aGlzIGhhcyBzYW1lIGxlbmd0aCBhcyBjb250ZXh0IC0gb25lIGVudHJ5IGZvciBlYWNoIHRhYmxlCgkJCQkJcmV0ID0gZm4uY2FsbCggYXBpSW5zdCwgY29udGV4dFtpXSwgdGhpc1tpXSwgaSApOwoJCgkJCQkJaWYgKCByZXQgIT09IHVuZGVmaW5lZCApIHsKCQkJCQkJYS5wdXNoKCByZXQgKTsKCQkJCQl9CgkJCQl9CgkJCQllbHNlIGlmICggdHlwZSA9PT0gJ2NvbHVtbicgfHwgdHlwZSA9PT0gJ2NvbHVtbi1yb3dzJyB8fCB0eXBlID09PSAncm93JyB8fCB0eXBlID09PSAnY2VsbCcgKSB7CgkJCQkJLy8gY29sdW1ucyBhbmQgcm93cyBzaGFyZSB0aGUgc2FtZSBzdHJ1Y3R1cmUuCgkJCQkJLy8gJ3RoaXMnIGlzIGFuIGFycmF5IG9mIGNvbHVtbiBpbmRleGVzIGZvciBlYWNoIGNvbnRleHQKCQkJCQlpdGVtcyA9IHRoaXNbaV07CgkKCQkJCQlpZiAoIHR5cGUgPT09ICdjb2x1bW4tcm93cycgKSB7CgkJCQkJCXJvd3MgPSBfc2VsZWN0b3Jfcm93X2luZGV4ZXMoIGNvbnRleHRbaV0sIHNlbGVjdG9yLm9wdHMgKTsKCQkJCQl9CgkKCQkJCQlmb3IgKCBqPTAsIGplbj1pdGVtcy5sZW5ndGggOyBqPGplbiA7IGorKyApIHsKCQkJCQkJaXRlbSA9IGl0ZW1zW2pdOwoJCgkJCQkJCWlmICggdHlwZSA9PT0gJ2NlbGwnICkgewoJCQkJCQkJcmV0ID0gZm4uY2FsbCggYXBpSW5zdCwgY29udGV4dFtpXSwgaXRlbS5yb3csIGl0ZW0uY29sdW1uLCBpLCBqICk7CgkJCQkJCX0KCQkJCQkJZWxzZSB7CgkJCQkJCQlyZXQgPSBmbi5jYWxsKCBhcGlJbnN0LCBjb250ZXh0W2ldLCBpdGVtLCBpLCBqLCByb3dzICk7CgkJCQkJCX0KCQoJCQkJCQlpZiAoIHJldCAhPT0gdW5kZWZpbmVkICkgewoJCQkJCQkJYS5wdXNoKCByZXQgKTsKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJfQoJCgkJCWlmICggYS5sZW5ndGggfHwgYWx3YXlzTmV3ICkgewoJCQkJdmFyIGFwaSA9IG5ldyBfQXBpKCBjb250ZXh0LCBmbGF0dGVuID8gYS5jb25jYXQuYXBwbHkoIFtdLCBhICkgOiBhICk7CgkJCQl2YXIgYXBpU2VsZWN0b3IgPSBhcGkuc2VsZWN0b3I7CgkJCQlhcGlTZWxlY3Rvci5yb3dzID0gc2VsZWN0b3Iucm93czsKCQkJCWFwaVNlbGVjdG9yLmNvbHMgPSBzZWxlY3Rvci5jb2xzOwoJCQkJYXBpU2VsZWN0b3Iub3B0cyA9IHNlbGVjdG9yLm9wdHM7CgkJCQlyZXR1cm4gYXBpOwoJCQl9CgkJCXJldHVybiB0aGlzOwoJCX0sCgkKCQoJCWxhc3RJbmRleE9mOiBfX2FycmF5UHJvdG8ubGFzdEluZGV4T2YgfHwgZnVuY3Rpb24gKG9iaiwgc3RhcnQpCgkJewoJCQkvLyBCaXQgY2hlZWt5Li4uCgkJCXJldHVybiB0aGlzLmluZGV4T2YuYXBwbHkoIHRoaXMudG9BcnJheS5yZXZlcnNlKCksIGFyZ3VtZW50cyApOwoJCX0sCgkKCQoJCWxlbmd0aDogIDAsCgkKCQoJCW1hcDogZnVuY3Rpb24gKCBmbiApCgkJewoJCQl2YXIgYSA9IFtdOwoJCgkJCWlmICggX19hcnJheVByb3RvLm1hcCApIHsKCQkJCWEgPSBfX2FycmF5UHJvdG8ubWFwLmNhbGwoIHRoaXMsIGZuLCB0aGlzICk7CgkJCX0KCQkJZWxzZSB7CgkJCQkvLyBDb21wYXRpYmlsaXR5IGZvciBicm93c2VycyB3aXRob3V0IEVNQ0EtMjUyLTUgKEpTIDEuNikKCQkJCWZvciAoIHZhciBpPTAsIGllbj10aGlzLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQkJCWEucHVzaCggZm4uY2FsbCggdGhpcywgdGhpc1tpXSwgaSApICk7CgkJCQl9CgkJCX0KCQoJCQlyZXR1cm4gbmV3IF9BcGkoIHRoaXMuY29udGV4dCwgYSApOwoJCX0sCgkKCQoJCXBsdWNrOiBmdW5jdGlvbiAoIHByb3AgKQoJCXsKCQkJcmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbiAoIGVsICkgewoJCQkJcmV0dXJuIGVsWyBwcm9wIF07CgkJCX0gKTsKCQl9LAoJCgkJcG9wOiAgICAgX19hcnJheVByb3RvLnBvcCwKCQoJCgkJcHVzaDogICAgX19hcnJheVByb3RvLnB1c2gsCgkKCQoJCS8vIERvZXMgbm90IHJldHVybiBhbiBBUEkgaW5zdGFuY2UKCQlyZWR1Y2U6IF9fYXJyYXlQcm90by5yZWR1Y2UgfHwgZnVuY3Rpb24gKCBmbiwgaW5pdCApCgkJewoJCQlyZXR1cm4gX2ZuUmVkdWNlKCB0aGlzLCBmbiwgaW5pdCwgMCwgdGhpcy5sZW5ndGgsIDEgKTsKCQl9LAoJCgkKCQlyZWR1Y2VSaWdodDogX19hcnJheVByb3RvLnJlZHVjZVJpZ2h0IHx8IGZ1bmN0aW9uICggZm4sIGluaXQgKQoJCXsKCQkJcmV0dXJuIF9mblJlZHVjZSggdGhpcywgZm4sIGluaXQsIHRoaXMubGVuZ3RoLTEsIC0xLCAtMSApOwoJCX0sCgkKCQoJCXJldmVyc2U6IF9fYXJyYXlQcm90by5yZXZlcnNlLAoJCgkKCQkvLyBPYmplY3Qgd2l0aCByb3dzLCBjb2x1bW5zIGFuZCBvcHRzCgkJc2VsZWN0b3I6IG51bGwsCgkKCQoJCXNoaWZ0OiAgIF9fYXJyYXlQcm90by5zaGlmdCwKCQoJCgkJc2xpY2U6IGZ1bmN0aW9uICgpIHsKCQkJcmV0dXJuIG5ldyBfQXBpKCB0aGlzLmNvbnRleHQsIHRoaXMgKTsKCQl9LAoJCgkKCQlzb3J0OiAgICBfX2FycmF5UHJvdG8uc29ydCwgLy8gPyBuYW1lIC0gb3JkZXI/CgkKCQoJCXNwbGljZTogIF9fYXJyYXlQcm90by5zcGxpY2UsCgkKCQoJCXRvQXJyYXk6IGZ1bmN0aW9uICgpCgkJewoJCQlyZXR1cm4gX19hcnJheVByb3RvLnNsaWNlLmNhbGwoIHRoaXMgKTsKCQl9LAoJCgkKCQl0byQ6IGZ1bmN0aW9uICgpCgkJewoJCQlyZXR1cm4gJCggdGhpcyApOwoJCX0sCgkKCQoJCXRvSlF1ZXJ5OiBmdW5jdGlvbiAoKQoJCXsKCQkJcmV0dXJuICQoIHRoaXMgKTsKCQl9LAoJCgkKCQl1bmlxdWU6IGZ1bmN0aW9uICgpCgkJewoJCQlyZXR1cm4gbmV3IF9BcGkoIHRoaXMuY29udGV4dCwgX3VuaXF1ZSh0aGlzKSApOwoJCX0sCgkKCQoJCXVuc2hpZnQ6IF9fYXJyYXlQcm90by51bnNoaWZ0Cgl9ICk7CgkKCQoJX0FwaS5leHRlbmQgPSBmdW5jdGlvbiAoIHNjb3BlLCBvYmosIGV4dCApCgl7CgkJLy8gT25seSBleHRlbmQgQVBJIGluc3RhbmNlcyBhbmQgc3RhdGljIHByb3BlcnRpZXMgb2YgdGhlIEFQSQoJCWlmICggISBleHQubGVuZ3RoIHx8ICEgb2JqIHx8ICggISAob2JqIGluc3RhbmNlb2YgX0FwaSkgJiYgISBvYmouX19kdF93cmFwcGVyICkgKSB7CgkJCXJldHVybjsKCQl9CgkKCQl2YXIKCQkJaSwgaWVuLAoJCQlqLCBqZW4sCgkJCXN0cnVjdCwgaW5uZXIsCgkJCW1ldGhvZFNjb3BpbmcgPSBmdW5jdGlvbiAoIHNjb3BlLCBmbiwgc3RydWMgKSB7CgkJCQlyZXR1cm4gZnVuY3Rpb24gKCkgewoJCQkJCXZhciByZXQgPSBmbi5hcHBseSggc2NvcGUsIGFyZ3VtZW50cyApOwoJCgkJCQkJLy8gTWV0aG9kIGV4dGVuc2lvbgoJCQkJCV9BcGkuZXh0ZW5kKCByZXQsIHJldCwgc3RydWMubWV0aG9kRXh0ICk7CgkJCQkJcmV0dXJuIHJldDsKCQkJCX07CgkJCX07CgkKCQlmb3IgKCBpPTAsIGllbj1leHQubGVuZ3RoIDsgaTxpZW4gOyBpKysgKSB7CgkJCXN0cnVjdCA9IGV4dFtpXTsKCQoJCQkvLyBWYWx1ZQoJCQlvYmpbIHN0cnVjdC5uYW1lIF0gPSB0eXBlb2Ygc3RydWN0LnZhbCA9PT0gJ2Z1bmN0aW9uJyA/CgkJCQltZXRob2RTY29waW5nKCBzY29wZSwgc3RydWN0LnZhbCwgc3RydWN0ICkgOgoJCQkJJC5pc1BsYWluT2JqZWN0KCBzdHJ1Y3QudmFsICkgPwoJCQkJCXt9IDoKCQkJCQlzdHJ1Y3QudmFsOwoJCgkJCW9ialsgc3RydWN0Lm5hbWUgXS5fX2R0X3dyYXBwZXIgPSB0cnVlOwoJCgkJCS8vIFByb3BlcnR5IGV4dGVuc2lvbgoJCQlfQXBpLmV4dGVuZCggc2NvcGUsIG9ialsgc3RydWN0Lm5hbWUgXSwgc3RydWN0LnByb3BFeHQgKTsKCQl9Cgl9OwoJCgkKCS8vIEB0b2RvIC0gSXMgdGhlcmUgbmVlZCBmb3IgYW4gYXVnbWVudCBmdW5jdGlvbj8KCS8vIF9BcGkuYXVnbWVudCA9IGZ1bmN0aW9uICggaW5zdCwgbmFtZSApCgkvLyB7CgkvLyAJLy8gRmluZCBzcmMgb2JqZWN0IGluIHRoZSBzdHJ1Y3R1cmUgZnJvbSB0aGUgbmFtZQoJLy8gCXZhciBwYXJ0cyA9IG5hbWUuc3BsaXQoJy4nKTsKCQoJLy8gCV9BcGkuZXh0ZW5kKCBpbnN0LCBvYmogKTsKCS8vIH07CgkKCQoJLy8gICAgIFsKCS8vICAgICAgIHsKCS8vICAgICAgICAgbmFtZTogICAgICAnZGF0YScgICAgICAgICAgICAgICAgLS0gc3RyaW5nICAgLSBQcm9wZXJ0eSBuYW1lCgkvLyAgICAgICAgIHZhbDogICAgICAgZnVuY3Rpb24gKCkge30sICAgICAgIC0tIGZ1bmN0aW9uIC0gQXBpIG1ldGhvZCAob3IgdW5kZWZpbmVkIGlmIGp1c3QgYW4gb2JqZWN0CgkvLyAgICAgICAgIG1ldGhvZEV4dDogWyAuLi4gXSwgICAgICAgICAgICAgIC0tIGFycmF5ICAgIC0gQXJyYXkgb2YgQXBpIG9iamVjdCBkZWZpbml0aW9ucyB0byBleHRlbmQgdGhlIG1ldGhvZCByZXN1bHQKCS8vICAgICAgICAgcHJvcEV4dDogICBbIC4uLiBdICAgICAgICAgICAgICAgLS0gYXJyYXkgICAgLSBBcnJheSBvZiBBcGkgb2JqZWN0IGRlZmluaXRpb25zIHRvIGV4dGVuZCB0aGUgcHJvcGVydHkKCS8vICAgICAgIH0sCgkvLyAgICAgICB7CgkvLyAgICAgICAgIG5hbWU6ICAgICAncm93JwoJLy8gICAgICAgICB2YWw6ICAgICAgIHt9LAoJLy8gICAgICAgICBtZXRob2RFeHQ6IFsgLi4uIF0sCgkvLyAgICAgICAgIHByb3BFeHQ6ICAgWwoJLy8gICAgICAgICAgIHsKCS8vICAgICAgICAgICAgIG5hbWU6ICAgICAgJ2RhdGEnCgkvLyAgICAgICAgICAgICB2YWw6ICAgICAgIGZ1bmN0aW9uICgpIHt9LAoJLy8gICAgICAgICAgICAgbWV0aG9kRXh0OiBbIC4uLiBdLAoJLy8gICAgICAgICAgICAgcHJvcEV4dDogICBbIC4uLiBdCgkvLyAgICAgICAgICAgfSwKCS8vICAgICAgICAgICAuLi4KCS8vICAgICAgICAgXQoJLy8gICAgICAgfQoJLy8gICAgIF0KCQoJX0FwaS5yZWdpc3RlciA9IF9hcGlfcmVnaXN0ZXIgPSBmdW5jdGlvbiAoIG5hbWUsIHZhbCApCgl7CgkJaWYgKCAkLmlzQXJyYXkoIG5hbWUgKSApIHsKCQkJZm9yICggdmFyIGo9MCwgamVuPW5hbWUubGVuZ3RoIDsgajxqZW4gOyBqKysgKSB7CgkJCQlfQXBpLnJlZ2lzdGVyKCBuYW1lW2pdLCB2YWwgKTsKCQkJfQoJCQlyZXR1cm47CgkJfQoJCgkJdmFyCgkJCWksIGllbiwKCQkJaGVpciA9IG5hbWUuc3BsaXQoJy4nKSwKCQkJc3RydWN0ID0gX19hcGlTdHJ1Y3QsCgkJCWtleSwgbWV0aG9kOwoJCgkJdmFyIGZpbmQgPSBmdW5jdGlvbiAoIHNyYywgbmFtZSApIHsKCQkJZm9yICggdmFyIGk9MCwgaWVuPXNyYy5sZW5ndGggOyBpPGllbiA7IGkrKyApIHsKCQkJCWlmICggc3JjW2ldLm5hbWUgPT09IG5hbWUgKSB7CgkJCQkJcmV0dXJuIHNyY1tpXTsKCQkJCX0KCQkJfQoJCQlyZXR1cm4gbnVsbDsKCQl9OwoJCgkJZm9yICggaT0wLCBpZW49aGVpci5sZW5ndGggOyBpPGllbiA7IGkrKyApIHsKCQkJbWV0aG9kID0gaGVpcltpXS5pbmRleE9mKCcoKScpICE9PSAtMTsKCQkJa2V5ID0gbWV0aG9kID8KCQkJCWhlaXJbaV0ucmVwbGFjZSgnKCknLCAnJykgOgoJCQkJaGVpcltpXTsKCQoJCQl2YXIgc3JjID0gZmluZCggc3RydWN0LCBrZXkgKTsKCQkJaWYgKCAhIHNyYyApIHsKCQkJCXNyYyA9IHsKCQkJCQluYW1lOiAgICAgIGtleSwKCQkJCQl2YWw6ICAgICAgIHt9LAoJCQkJCW1ldGhvZEV4dDogW10sCgkJCQkJcHJvcEV4dDogICBbXQoJCQkJfTsKCQkJCXN0cnVjdC5wdXNoKCBzcmMgKTsKCQkJfQoJCgkJCWlmICggaSA9PT0gaWVuLTEgKSB7CgkJCQlzcmMudmFsID0gdmFsOwoJCQl9CgkJCWVsc2UgewoJCQkJc3RydWN0ID0gbWV0aG9kID8KCQkJCQlzcmMubWV0aG9kRXh0IDoKCQkJCQlzcmMucHJvcEV4dDsKCQkJfQoJCX0KCX07CgkKCQoJX0FwaS5yZWdpc3RlclBsdXJhbCA9IF9hcGlfcmVnaXN0ZXJQbHVyYWwgPSBmdW5jdGlvbiAoIHBsdXJhbE5hbWUsIHNpbmd1bGFyTmFtZSwgdmFsICkgewoJCV9BcGkucmVnaXN0ZXIoIHBsdXJhbE5hbWUsIHZhbCApOwoJCgkJX0FwaS5yZWdpc3Rlciggc2luZ3VsYXJOYW1lLCBmdW5jdGlvbiAoKSB7CgkJCXZhciByZXQgPSB2YWwuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApOwoJCgkJCWlmICggcmV0ID09PSB0aGlzICkgewoJCQkJLy8gUmV0dXJuZWQgaXRlbSBpcyB0aGUgQVBJIGluc3RhbmNlIHRoYXQgd2FzIHBhc3NlZCBpbiwgcmV0dXJuIGl0CgkJCQlyZXR1cm4gdGhpczsKCQkJfQoJCQllbHNlIGlmICggcmV0IGluc3RhbmNlb2YgX0FwaSApIHsKCQkJCS8vIE5ldyBBUEkgaW5zdGFuY2UgcmV0dXJuZWQsIHdhbnQgdGhlIHZhbHVlIGZyb20gdGhlIGZpcnN0IGl0ZW0KCQkJCS8vIGluIHRoZSByZXR1cm5lZCBhcnJheSBmb3IgdGhlIHNpbmd1bGFyIHJlc3VsdC4KCQkJCXJldHVybiByZXQubGVuZ3RoID8KCQkJCQkkLmlzQXJyYXkoIHJldFswXSApID8KCQkJCQkJbmV3IF9BcGkoIHJldC5jb250ZXh0LCByZXRbMF0gKSA6IC8vIEFycmF5IHJlc3VsdHMgYXJlICdlbmhhbmNlZCcKCQkJCQkJcmV0WzBdIDoKCQkJCQl1bmRlZmluZWQ7CgkJCX0KCQoJCQkvLyBOb24tQVBJIHJldHVybiAtIGp1c3QgZmlyZSBpdCBiYWNrCgkJCXJldHVybiByZXQ7CgkJfSApOwoJfTsKCQoJCgkvKioKCSAqIFNlbGVjdG9yIGZvciBIVE1MIHRhYmxlcy4gQXBwbHkgdGhlIGdpdmVuIHNlbGVjdG9yIHRvIHRoZSBnaXZlIGFycmF5IG9mCgkgKiBEYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdHMuCgkgKgoJICogQHBhcmFtIHtzdHJpbmd8aW50ZWdlcn0gW3NlbGVjdG9yXSBqUXVlcnkgc2VsZWN0b3Igc3RyaW5nIG9yIGludGVnZXIKCSAqIEBwYXJhbSAge2FycmF5fSBBcnJheSBvZiBEYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdHMgdG8gYmUgZmlsdGVyZWQKCSAqIEByZXR1cm4ge2FycmF5fQoJICogQGlnbm9yZQoJICovCgl2YXIgX190YWJsZV9zZWxlY3RvciA9IGZ1bmN0aW9uICggc2VsZWN0b3IsIGEgKQoJewoJCS8vIEludGVnZXIgaXMgdXNlZCB0byBwaWNrIG91dCBhIHRhYmxlIGJ5IGluZGV4CgkJaWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT09ICdudW1iZXInICkgewoJCQlyZXR1cm4gWyBhWyBzZWxlY3RvciBdIF07CgkJfQoJCgkJLy8gUGVyZm9ybSBhIGpRdWVyeSBzZWxlY3RvciBvbiB0aGUgdGFibGUgbm9kZXMKCQl2YXIgbm9kZXMgPSAkLm1hcCggYSwgZnVuY3Rpb24gKGVsLCBpKSB7CgkJCXJldHVybiBlbC5uVGFibGU7CgkJfSApOwoJCgkJcmV0dXJuICQobm9kZXMpCgkJCS5maWx0ZXIoIHNlbGVjdG9yICkKCQkJLm1hcCggZnVuY3Rpb24gKGkpIHsKCQkJCS8vIE5lZWQgdG8gdHJhbnNsYXRlIGJhY2sgZnJvbSB0aGUgdGFibGUgbm9kZSB0byB0aGUgc2V0dGluZ3MKCQkJCXZhciBpZHggPSAkLmluQXJyYXkoIHRoaXMsIG5vZGVzICk7CgkJCQlyZXR1cm4gYVsgaWR4IF07CgkJCX0gKQoJCQkudG9BcnJheSgpOwoJfTsKCQoJCgkKCS8qKgoJICogQ29udGV4dCBzZWxlY3RvciBmb3IgdGhlIEFQSSdzIGNvbnRleHQgKGkuZS4gdGhlIHRhYmxlcyB0aGUgQVBJIGluc3RhbmNlCgkgKiByZWZlcnMgdG8uCgkgKgoJICogQG5hbWUgICAgRGF0YVRhYmxlLkFwaSN0YWJsZXMKCSAqIEBwYXJhbSB7c3RyaW5nfGludGVnZXJ9IFtzZWxlY3Rvcl0gU2VsZWN0b3IgdG8gcGljayB3aGljaCB0YWJsZXMgdGhlIGl0ZXJhdG9yCgkgKiAgIHNob3VsZCBvcGVyYXRlIG9uLiBJZiBub3QgZ2l2ZW4sIGFsbCB0YWJsZXMgaW4gdGhlIGN1cnJlbnQgY29udGV4dCBhcmUKCSAqICAgdXNlZC4gVGhpcyBjYW4gYmUgZ2l2ZW4gYXMgYSBqUXVlcnkgc2VsZWN0b3IgKGZvciBleGFtcGxlIGAnOmd0KDApJ2ApIHRvCgkgKiAgIHNlbGVjdCBtdWx0aXBsZSB0YWJsZXMgb3IgYXMgYW4gaW50ZWdlciB0byBzZWxlY3QgYSBzaW5nbGUgdGFibGUuCgkgKiBAcmV0dXJucyB7RGF0YVRhYmxlLkFwaX0gUmV0dXJucyBhIG5ldyBBUEkgaW5zdGFuY2UgaWYgYSBzZWxlY3RvciBpcyBnaXZlbi4KCSAqLwoJX2FwaV9yZWdpc3RlciggJ3RhYmxlcygpJywgZnVuY3Rpb24gKCBzZWxlY3RvciApIHsKCQkvLyBBIG5ldyBpbnN0YW5jZSBpcyBjcmVhdGVkIGlmIHRoZXJlIHdhcyBhIHNlbGVjdG9yIHNwZWNpZmllZAoJCXJldHVybiBzZWxlY3RvciA/CgkJCW5ldyBfQXBpKCBfX3RhYmxlX3NlbGVjdG9yKCBzZWxlY3RvciwgdGhpcy5jb250ZXh0ICkgKSA6CgkJCXRoaXM7Cgl9ICk7CgkKCQoJX2FwaV9yZWdpc3RlciggJ3RhYmxlKCknLCBmdW5jdGlvbiAoIHNlbGVjdG9yICkgewoJCXZhciB0YWJsZXMgPSB0aGlzLnRhYmxlcyggc2VsZWN0b3IgKTsKCQl2YXIgY3R4ID0gdGFibGVzLmNvbnRleHQ7CgkKCQkvLyBUcnVuY2F0ZSB0byB0aGUgZmlyc3QgbWF0Y2hlZCB0YWJsZQoJCXJldHVybiBjdHgubGVuZ3RoID8KCQkJbmV3IF9BcGkoIGN0eFswXSApIDoKCQkJdGFibGVzOwoJfSApOwoJCgkKCV9hcGlfcmVnaXN0ZXJQbHVyYWwoICd0YWJsZXMoKS5ub2RlcygpJywgJ3RhYmxlKCkubm9kZSgpJyAsIGZ1bmN0aW9uICgpIHsKCQlyZXR1cm4gdGhpcy5pdGVyYXRvciggJ3RhYmxlJywgZnVuY3Rpb24gKCBjdHggKSB7CgkJCXJldHVybiBjdHgublRhYmxlOwoJCX0sIDEgKTsKCX0gKTsKCQoJCglfYXBpX3JlZ2lzdGVyUGx1cmFsKCAndGFibGVzKCkuYm9keSgpJywgJ3RhYmxlKCkuYm9keSgpJyAsIGZ1bmN0aW9uICgpIHsKCQlyZXR1cm4gdGhpcy5pdGVyYXRvciggJ3RhYmxlJywgZnVuY3Rpb24gKCBjdHggKSB7CgkJCXJldHVybiBjdHgublRCb2R5OwoJCX0sIDEgKTsKCX0gKTsKCQoJCglfYXBpX3JlZ2lzdGVyUGx1cmFsKCAndGFibGVzKCkuaGVhZGVyKCknLCAndGFibGUoKS5oZWFkZXIoKScgLCBmdW5jdGlvbiAoKSB7CgkJcmV0dXJuIHRoaXMuaXRlcmF0b3IoICd0YWJsZScsIGZ1bmN0aW9uICggY3R4ICkgewoJCQlyZXR1cm4gY3R4Lm5USGVhZDsKCQl9LCAxICk7Cgl9ICk7CgkKCQoJX2FwaV9yZWdpc3RlclBsdXJhbCggJ3RhYmxlcygpLmZvb3RlcigpJywgJ3RhYmxlKCkuZm9vdGVyKCknICwgZnVuY3Rpb24gKCkgewoJCXJldHVybiB0aGlzLml0ZXJhdG9yKCAndGFibGUnLCBmdW5jdGlvbiAoIGN0eCApIHsKCQkJcmV0dXJuIGN0eC5uVEZvb3Q7CgkJfSwgMSApOwoJfSApOwoJCgkKCV9hcGlfcmVnaXN0ZXJQbHVyYWwoICd0YWJsZXMoKS5jb250YWluZXJzKCknLCAndGFibGUoKS5jb250YWluZXIoKScgLCBmdW5jdGlvbiAoKSB7CgkJcmV0dXJuIHRoaXMuaXRlcmF0b3IoICd0YWJsZScsIGZ1bmN0aW9uICggY3R4ICkgewoJCQlyZXR1cm4gY3R4Lm5UYWJsZVdyYXBwZXI7CgkJfSwgMSApOwoJfSApOwoJCgkKCQoJLyoqCgkgKiBSZWRyYXcgdGhlIHRhYmxlcyBpbiB0aGUgY3VycmVudCBjb250ZXh0LgoJICovCglfYXBpX3JlZ2lzdGVyKCAnZHJhdygpJywgZnVuY3Rpb24gKCBwYWdpbmcgKSB7CgkJcmV0dXJuIHRoaXMuaXRlcmF0b3IoICd0YWJsZScsIGZ1bmN0aW9uICggc2V0dGluZ3MgKSB7CgkJCWlmICggcGFnaW5nID09PSAncGFnZScgKSB7CgkJCQlfZm5EcmF3KCBzZXR0aW5ncyApOwoJCQl9CgkJCWVsc2UgewoJCQkJaWYgKCB0eXBlb2YgcGFnaW5nID09PSAnc3RyaW5nJyApIHsKCQkJCQlwYWdpbmcgPSBwYWdpbmcgPT09ICdmdWxsLWhvbGQnID8KCQkJCQkJZmFsc2UgOgoJCQkJCQl0cnVlOwoJCQkJfQoJCgkJCQlfZm5SZURyYXcoIHNldHRpbmdzLCBwYWdpbmc9PT1mYWxzZSApOwoJCQl9CgkJfSApOwoJfSApOwoJCgkKCQoJLyoqCgkgKiBHZXQgdGhlIGN1cnJlbnQgcGFnZSBpbmRleC4KCSAqCgkgKiBAcmV0dXJuIHtpbnRlZ2VyfSBDdXJyZW50IHBhZ2UgaW5kZXggKHplcm8gYmFzZWQpCgkgKi8vKioKCSAqIFNldCB0aGUgY3VycmVudCBwYWdlLgoJICoKCSAqIE5vdGUgdGhhdCBpZiB5b3UgYXR0ZW1wdCB0byBzaG93IGEgcGFnZSB3aGljaCBkb2VzIG5vdCBleGlzdCwgRGF0YVRhYmxlcyB3aWxsCgkgKiBub3QgdGhyb3cgYW4gZXJyb3IsIGJ1dCByYXRoZXIgcmVzZXQgdGhlIHBhZ2luZy4KCSAqCgkgKiBAcGFyYW0ge2ludGVnZXJ8c3RyaW5nfSBhY3Rpb24gVGhlIHBhZ2luZyBhY3Rpb24gdG8gdGFrZS4gVGhpcyBjYW4gYmUgb25lIG9mOgoJICogICogYGludGVnZXJgIC0gVGhlIHBhZ2UgaW5kZXggdG8ganVtcCB0bwoJICogICogYHN0cmluZ2AgLSBBbiBhY3Rpb24gdG8gdGFrZToKCSAqICAgICogYGZpcnN0YCAtIEp1bXAgdG8gZmlyc3QgcGFnZS4KCSAqICAgICogYG5leHRgIC0gSnVtcCB0byB0aGUgbmV4dCBwYWdlCgkgKiAgICAqIGBwcmV2aW91c2AgLSBKdW1wIHRvIHByZXZpb3VzIHBhZ2UKCSAqICAgICogYGxhc3RgIC0gSnVtcCB0byB0aGUgbGFzdCBwYWdlLgoJICogQHJldHVybnMge0RhdGFUYWJsZXMuQXBpfSB0aGlzCgkgKi8KCV9hcGlfcmVnaXN0ZXIoICdwYWdlKCknLCBmdW5jdGlvbiAoIGFjdGlvbiApIHsKCQlpZiAoIGFjdGlvbiA9PT0gdW5kZWZpbmVkICkgewoJCQlyZXR1cm4gdGhpcy5wYWdlLmluZm8oKS5wYWdlOyAvLyBub3QgYW4gZXhwZW5zaXZlIGNhbGwKCQl9CgkKCQkvLyBlbHNlLCBoYXZlIGFuIGFjdGlvbiB0byB0YWtlIG9uIGFsbCB0YWJsZXMKCQlyZXR1cm4gdGhpcy5pdGVyYXRvciggJ3RhYmxlJywgZnVuY3Rpb24gKCBzZXR0aW5ncyApIHsKCQkJX2ZuUGFnZUNoYW5nZSggc2V0dGluZ3MsIGFjdGlvbiApOwoJCX0gKTsKCX0gKTsKCQoJCgkvKioKCSAqIFBhZ2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIGZpcnN0IHRhYmxlIGluIHRoZSBjdXJyZW50IGNvbnRleHQuCgkgKgoJICogSWYgeW91IHJlcXVpcmUgcGFnaW5nIGluZm9ybWF0aW9uIGZvciBhbm90aGVyIHRhYmxlLCB1c2UgdGhlIGB0YWJsZSgpYCBtZXRob2QKCSAqIHdpdGggYSBzdWl0YWJsZSBzZWxlY3Rvci4KCSAqCgkgKiBAcmV0dXJuIHtvYmplY3R9IE9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyBzZXQ6CgkgKiAgKiBgcGFnZWAgLSBDdXJyZW50IHBhZ2UgaW5kZXggKHplcm8gYmFzZWQgLSBpLmUuIHRoZSBmaXJzdCBwYWdlIGlzIGAwYCkKCSAqICAqIGBwYWdlc2AgLSBUb3RhbCBudW1iZXIgb2YgcGFnZXMKCSAqICAqIGBzdGFydGAgLSBEaXNwbGF5IGluZGV4IGZvciB0aGUgZmlyc3QgcmVjb3JkIHNob3duIG9uIHRoZSBjdXJyZW50IHBhZ2UKCSAqICAqIGBlbmRgIC0gRGlzcGxheSBpbmRleCBmb3IgdGhlIGxhc3QgcmVjb3JkIHNob3duIG9uIHRoZSBjdXJyZW50IHBhZ2UKCSAqICAqIGBsZW5ndGhgIC0gRGlzcGxheSBsZW5ndGggKG51bWJlciBvZiByZWNvcmRzKS4gTm90ZSB0aGF0IGdlbmVyYWxseSBgc3RhcnQKCSAqICAgICsgbGVuZ3RoID0gZW5kYCwgYnV0IHRoaXMgaXMgbm90IGFsd2F5cyB0cnVlLCBmb3IgZXhhbXBsZSBpZiB0aGVyZSBhcmUKCSAqICAgIG9ubHkgMiByZWNvcmRzIHRvIHNob3cgb24gdGhlIGZpbmFsIHBhZ2UsIHdpdGggYSBsZW5ndGggb2YgMTAuCgkgKiAgKiBgcmVjb3Jkc1RvdGFsYCAtIEZ1bGwgZGF0YSBzZXQgbGVuZ3RoCgkgKiAgKiBgcmVjb3Jkc0Rpc3BsYXlgIC0gRGF0YSBzZXQgbGVuZ3RoIG9uY2UgdGhlIGN1cnJlbnQgZmlsdGVyaW5nIGNyaXRlcmlvbgoJICogICAgYXJlIGFwcGxpZWQuCgkgKi8KCV9hcGlfcmVnaXN0ZXIoICdwYWdlLmluZm8oKScsIGZ1bmN0aW9uICggYWN0aW9uICkgewoJCWlmICggdGhpcy5jb250ZXh0Lmxlbmd0aCA9PT0gMCApIHsKCQkJcmV0dXJuIHVuZGVmaW5lZDsKCQl9CgkKCQl2YXIKCQkJc2V0dGluZ3MgICA9IHRoaXMuY29udGV4dFswXSwKCQkJc3RhcnQgICAgICA9IHNldHRpbmdzLl9pRGlzcGxheVN0YXJ0LAoJCQlsZW4gICAgICAgID0gc2V0dGluZ3Mub0ZlYXR1cmVzLmJQYWdpbmF0ZSA/IHNldHRpbmdzLl9pRGlzcGxheUxlbmd0aCA6IC0xLAoJCQl2aXNSZWNvcmRzID0gc2V0dGluZ3MuZm5SZWNvcmRzRGlzcGxheSgpLAoJCQlhbGwgICAgICAgID0gbGVuID09PSAtMTsKCQoJCXJldHVybiB7CgkJCSJwYWdlIjogICAgICAgICAgIGFsbCA/IDAgOiBNYXRoLmZsb29yKCBzdGFydCAvIGxlbiApLAoJCQkicGFnZXMiOiAgICAgICAgICBhbGwgPyAxIDogTWF0aC5jZWlsKCB2aXNSZWNvcmRzIC8gbGVuICksCgkJCSJzdGFydCI6ICAgICAgICAgIHN0YXJ0LAoJCQkiZW5kIjogICAgICAgICAgICBzZXR0aW5ncy5mbkRpc3BsYXlFbmQoKSwKCQkJImxlbmd0aCI6ICAgICAgICAgbGVuLAoJCQkicmVjb3Jkc1RvdGFsIjogICBzZXR0aW5ncy5mblJlY29yZHNUb3RhbCgpLAoJCQkicmVjb3Jkc0Rpc3BsYXkiOiB2aXNSZWNvcmRzLAoJCQkic2VydmVyU2lkZSI6ICAgICBfZm5EYXRhU291cmNlKCBzZXR0aW5ncyApID09PSAnc3NwJwoJCX07Cgl9ICk7CgkKCQoJLyoqCgkgKiBHZXQgdGhlIGN1cnJlbnQgcGFnZSBsZW5ndGguCgkgKgoJICogQHJldHVybiB7aW50ZWdlcn0gQ3VycmVudCBwYWdlIGxlbmd0aC4gTm90ZSBgLTFgIGluZGljYXRlcyB0aGF0IGFsbCByZWNvcmRzCgkgKiAgIGFyZSB0byBiZSBzaG93bi4KCSAqLy8qKgoJICogU2V0IHRoZSBjdXJyZW50IHBhZ2UgbGVuZ3RoLgoJICoKCSAqIEBwYXJhbSB7aW50ZWdlcn0gUGFnZSBsZW5ndGggdG8gc2V0LiBVc2UgYC0xYCB0byBzaG93IGFsbCByZWNvcmRzLgoJICogQHJldHVybnMge0RhdGFUYWJsZXMuQXBpfSB0aGlzCgkgKi8KCV9hcGlfcmVnaXN0ZXIoICdwYWdlLmxlbigpJywgZnVuY3Rpb24gKCBsZW4gKSB7CgkJLy8gTm90ZSB0aGF0IHdlIGNhbid0IGNhbGwgdGhpcyBmdW5jdGlvbiAnbGVuZ3RoKCknIGJlY2F1c2UgYGxlbmd0aGAKCQkvLyBpcyBhIEphdmFzY3JpcHQgcHJvcGVydHkgb2YgZnVuY3Rpb25zIHdoaWNoIGRlZmluZXMgaG93IG1hbnkgYXJndW1lbnRzCgkJLy8gdGhlIGZ1bmN0aW9uIGV4cGVjdHMuCgkJaWYgKCBsZW4gPT09IHVuZGVmaW5lZCApIHsKCQkJcmV0dXJuIHRoaXMuY29udGV4dC5sZW5ndGggIT09IDAgPwoJCQkJdGhpcy5jb250ZXh0WzBdLl9pRGlzcGxheUxlbmd0aCA6CgkJCQl1bmRlZmluZWQ7CgkJfQoJCgkJLy8gZWxzZSwgc2V0IHRoZSBwYWdlIGxlbmd0aAoJCXJldHVybiB0aGlzLml0ZXJhdG9yKCAndGFibGUnLCBmdW5jdGlvbiAoIHNldHRpbmdzICkgewoJCQlfZm5MZW5ndGhDaGFuZ2UoIHNldHRpbmdzLCBsZW4gKTsKCQl9ICk7Cgl9ICk7CgkKCQoJCgl2YXIgX19yZWxvYWQgPSBmdW5jdGlvbiAoIHNldHRpbmdzLCBob2xkUG9zaXRpb24sIGNhbGxiYWNrICkgewoJCS8vIFVzZSB0aGUgZHJhdyBldmVudCB0byB0cmlnZ2VyIGEgY2FsbGJhY2sKCQlpZiAoIGNhbGxiYWNrICkgewoJCQl2YXIgYXBpID0gbmV3IF9BcGkoIHNldHRpbmdzICk7CgkKCQkJYXBpLm9uZSggJ2RyYXcnLCBmdW5jdGlvbiAoKSB7CgkJCQljYWxsYmFjayggYXBpLmFqYXguanNvbigpICk7CgkJCX0gKTsKCQl9CgkKCQlpZiAoIF9mbkRhdGFTb3VyY2UoIHNldHRpbmdzICkgPT0gJ3NzcCcgKSB7CgkJCV9mblJlRHJhdyggc2V0dGluZ3MsIGhvbGRQb3NpdGlvbiApOwoJCX0KCQllbHNlIHsKCQkJX2ZuUHJvY2Vzc2luZ0Rpc3BsYXkoIHNldHRpbmdzLCB0cnVlICk7CgkKCQkJLy8gQ2FuY2VsIGFuIGV4aXN0aW5nIHJlcXVlc3QKCQkJdmFyIHhociA9IHNldHRpbmdzLmpxWEhSOwoJCQlpZiAoIHhociAmJiB4aHIucmVhZHlTdGF0ZSAhPT0gNCApIHsKCQkJCXhoci5hYm9ydCgpOwoJCQl9CgkKCQkJLy8gVHJpZ2dlciB4aHIKCQkJX2ZuQnVpbGRBamF4KCBzZXR0aW5ncywgW10sIGZ1bmN0aW9uKCBqc29uICkgewoJCQkJX2ZuQ2xlYXJUYWJsZSggc2V0dGluZ3MgKTsKCQoJCQkJdmFyIGRhdGEgPSBfZm5BamF4RGF0YVNyYyggc2V0dGluZ3MsIGpzb24gKTsKCQkJCWZvciAoIHZhciBpPTAsIGllbj1kYXRhLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQkJCV9mbkFkZERhdGEoIHNldHRpbmdzLCBkYXRhW2ldICk7CgkJCQl9CgkKCQkJCV9mblJlRHJhdyggc2V0dGluZ3MsIGhvbGRQb3NpdGlvbiApOwoJCQkJX2ZuUHJvY2Vzc2luZ0Rpc3BsYXkoIHNldHRpbmdzLCBmYWxzZSApOwoJCQl9ICk7CgkJfQoJfTsKCQoJCgkvKioKCSAqIEdldCB0aGUgSlNPTiByZXNwb25zZSBmcm9tIHRoZSBsYXN0IEFqYXggcmVxdWVzdCB0aGF0IERhdGFUYWJsZXMgbWFkZSB0byB0aGUKCSAqIHNlcnZlci4gTm90ZSB0aGF0IHRoaXMgcmV0dXJucyB0aGUgSlNPTiBmcm9tIHRoZSBmaXJzdCB0YWJsZSBpbiB0aGUgY3VycmVudAoJICogY29udGV4dC4KCSAqCgkgKiBAcmV0dXJuIHtvYmplY3R9IEpTT04gcmVjZWl2ZWQgZnJvbSB0aGUgc2VydmVyLgoJICovCglfYXBpX3JlZ2lzdGVyKCAnYWpheC5qc29uKCknLCBmdW5jdGlvbiAoKSB7CgkJdmFyIGN0eCA9IHRoaXMuY29udGV4dDsKCQoJCWlmICggY3R4Lmxlbmd0aCA+IDAgKSB7CgkJCXJldHVybiBjdHhbMF0uanNvbjsKCQl9CgkKCQkvLyBlbHNlIHJldHVybiB1bmRlZmluZWQ7Cgl9ICk7CgkKCQoJLyoqCgkgKiBHZXQgdGhlIGRhdGEgc3VibWl0dGVkIGluIHRoZSBsYXN0IEFqYXggcmVxdWVzdAoJICovCglfYXBpX3JlZ2lzdGVyKCAnYWpheC5wYXJhbXMoKScsIGZ1bmN0aW9uICgpIHsKCQl2YXIgY3R4ID0gdGhpcy5jb250ZXh0OwoJCgkJaWYgKCBjdHgubGVuZ3RoID4gMCApIHsKCQkJcmV0dXJuIGN0eFswXS5vQWpheERhdGE7CgkJfQoJCgkJLy8gZWxzZSByZXR1cm4gdW5kZWZpbmVkOwoJfSApOwoJCgkKCS8qKgoJICogUmVsb2FkIHRhYmxlcyBmcm9tIHRoZSBBamF4IGRhdGEgc291cmNlLiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiB3aWxsCgkgKiBhdXRvbWF0aWNhbGx5IHJlLWRyYXcgdGhlIHRhYmxlIHdoZW4gdGhlIHJlbW90ZSBkYXRhIGhhcyBiZWVuIGxvYWRlZC4KCSAqCgkgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZXNldD10cnVlXSBSZXNldCAoZGVmYXVsdCkgb3IgaG9sZCB0aGUgY3VycmVudCBwYWdpbmcKCSAqICAgcG9zaXRpb24uIEEgZnVsbCByZS1zb3J0IGFuZCByZS1maWx0ZXIgaXMgcGVyZm9ybWVkIHdoZW4gdGhpcyBtZXRob2QgaXMKCSAqICAgY2FsbGVkLCB3aGljaCBpcyB3aHkgdGhlIHBhZ2luYXRpb24gcmVzZXQgaXMgdGhlIGRlZmF1bHQgYWN0aW9uLgoJICogQHJldHVybnMge0RhdGFUYWJsZXMuQXBpfSB0aGlzCgkgKi8KCV9hcGlfcmVnaXN0ZXIoICdhamF4LnJlbG9hZCgpJywgZnVuY3Rpb24gKCBjYWxsYmFjaywgcmVzZXRQYWdpbmcgKSB7CgkJcmV0dXJuIHRoaXMuaXRlcmF0b3IoICd0YWJsZScsIGZ1bmN0aW9uIChzZXR0aW5ncykgewoJCQlfX3JlbG9hZCggc2V0dGluZ3MsIHJlc2V0UGFnaW5nPT09Zg=="
},
{
"key": "jquery.dataTables.js?4?2?2",
"type": "binary",
"value": "base64:YWxzZSwgY2FsbGJhY2sgKTsKCQl9ICk7Cgl9ICk7CgkKCQoJLyoqCgkgKiBHZXQgdGhlIGN1cnJlbnQgQWpheCBVUkwuIE5vdGUgdGhhdCB0aGlzIHJldHVybnMgdGhlIFVSTCBmcm9tIHRoZSBmaXJzdAoJICogdGFibGUgaW4gdGhlIGN1cnJlbnQgY29udGV4dC4KCSAqCgkgKiBAcmV0dXJuIHtzdHJpbmd9IEN1cnJlbnQgQWpheCBzb3VyY2UgVVJMCgkgKi8vKioKCSAqIFNldCB0aGUgQWpheCBVUkwuIE5vdGUgdGhhdCB0aGlzIHdpbGwgc2V0IHRoZSBVUkwgZm9yIGFsbCB0YWJsZXMgaW4gdGhlCgkgKiBjdXJyZW50IGNvbnRleHQuCgkgKgoJICogQHBhcmFtIHtzdHJpbmd9IHVybCBVUkwgdG8gc2V0LgoJICogQHJldHVybnMge0RhdGFUYWJsZXMuQXBpfSB0aGlzCgkgKi8KCV9hcGlfcmVnaXN0ZXIoICdhamF4LnVybCgpJywgZnVuY3Rpb24gKCB1cmwgKSB7CgkJdmFyIGN0eCA9IHRoaXMuY29udGV4dDsKCQoJCWlmICggdXJsID09PSB1bmRlZmluZWQgKSB7CgkJCS8vIGdldAoJCQlpZiAoIGN0eC5sZW5ndGggPT09IDAgKSB7CgkJCQlyZXR1cm4gdW5kZWZpbmVkOwoJCQl9CgkJCWN0eCA9IGN0eFswXTsKCQoJCQlyZXR1cm4gY3R4LmFqYXggPwoJCQkJJC5pc1BsYWluT2JqZWN0KCBjdHguYWpheCApID8KCQkJCQljdHguYWpheC51cmwgOgoJCQkJCWN0eC5hamF4IDoKCQkJCWN0eC5zQWpheFNvdXJjZTsKCQl9CgkKCQkvLyBzZXQKCQlyZXR1cm4gdGhpcy5pdGVyYXRvciggJ3RhYmxlJywgZnVuY3Rpb24gKCBzZXR0aW5ncyApIHsKCQkJaWYgKCAkLmlzUGxhaW5PYmplY3QoIHNldHRpbmdzLmFqYXggKSApIHsKCQkJCXNldHRpbmdzLmFqYXgudXJsID0gdXJsOwoJCQl9CgkJCWVsc2UgewoJCQkJc2V0dGluZ3MuYWpheCA9IHVybDsKCQkJfQoJCQkvLyBObyBuZWVkIHRvIGNvbnNpZGVyIHNBamF4U291cmNlIGhlcmUgc2luY2UgRGF0YVRhYmxlcyBnaXZlcyBwcmlvcml0eQoJCQkvLyB0byBgYWpheGAgb3ZlciBgc0FqYXhTb3VyY2VgLiBTbyBzZXR0aW5nIGBhamF4YCBoZXJlLCByZW5kZXJzIGFueQoJCQkvLyB2YWx1ZSBvZiBgc0FqYXhTb3VyY2VgIHJlZHVuZGFudC4KCQl9ICk7Cgl9ICk7CgkKCQoJLyoqCgkgKiBMb2FkIGRhdGEgZnJvbSB0aGUgbmV3bHkgc2V0IEFqYXggVVJMLiBOb3RlIHRoYXQgdGhpcyBtZXRob2QgaXMgb25seQoJICogYXZhaWxhYmxlIHdoZW4gYGFqYXgudXJsKClgIGlzIHVzZWQgdG8gc2V0IGEgVVJMLiBBZGRpdGlvbmFsbHksIHRoaXMgbWV0aG9kCgkgKiBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzIGNhbGxpbmcgYGFqYXgucmVsb2FkKClgIGJ1dCBpcyBwcm92aWRlZCBmb3IKCSAqIGNvbnZlbmllbmNlIHdoZW4gc2V0dGluZyBhIG5ldyBVUkwuIExpa2UgYGFqYXgucmVsb2FkKClgIGl0IHdpbGwKCSAqIGF1dG9tYXRpY2FsbHkgcmVkcmF3IHRoZSB0YWJsZSBvbmNlIHRoZSByZW1vdGUgZGF0YSBoYXMgYmVlbiBsb2FkZWQuCgkgKgoJICogQHJldHVybnMge0RhdGFUYWJsZXMuQXBpfSB0aGlzCgkgKi8KCV9hcGlfcmVnaXN0ZXIoICdhamF4LnVybCgpLmxvYWQoKScsIGZ1bmN0aW9uICggY2FsbGJhY2ssIHJlc2V0UGFnaW5nICkgewoJCS8vIFNhbWUgYXMgYSByZWxvYWQsIGJ1dCBtYWtlcyBzZW5zZSB0byBwcmVzZW50IGl0IGZvciBlYXN5IGFjY2VzcyBhZnRlciBhCgkJLy8gdXJsIGNoYW5nZQoJCXJldHVybiB0aGlzLml0ZXJhdG9yKCAndGFibGUnLCBmdW5jdGlvbiAoIGN0eCApIHsKCQkJX19yZWxvYWQoIGN0eCwgcmVzZXRQYWdpbmc9PT1mYWxzZSwgY2FsbGJhY2sgKTsKCQl9ICk7Cgl9ICk7CgkKCQoJCgkKCXZhciBfc2VsZWN0b3JfcnVuID0gZnVuY3Rpb24gKCB0eXBlLCBzZWxlY3Rvciwgc2VsZWN0Rm4sIHNldHRpbmdzLCBvcHRzICkKCXsKCQl2YXIKCQkJb3V0ID0gW10sIHJlcywKCQkJYSwgaSwgaWVuLCBqLCBqZW4sCgkJCXNlbGVjdG9yVHlwZSA9IHR5cGVvZiBzZWxlY3RvcjsKCQoJCS8vIENhbid0IGp1c3QgY2hlY2sgZm9yIGlzQXJyYXkgaGVyZSwgYXMgYW4gQVBJIG9yIGpRdWVyeSBpbnN0YW5jZSBtaWdodCBiZQoJCS8vIGdpdmVuIHdpdGggdGhlaXIgYXJyYXkgbGlrZSBsb29rCgkJaWYgKCAhIHNlbGVjdG9yIHx8IHNlbGVjdG9yVHlwZSA9PT0gJ3N0cmluZycgfHwgc2VsZWN0b3JUeXBlID09PSAnZnVuY3Rpb24nIHx8IHNlbGVjdG9yLmxlbmd0aCA9PT0gdW5kZWZpbmVkICkgewoJCQlzZWxlY3RvciA9IFsgc2VsZWN0b3IgXTsKCQl9CgkKCQlmb3IgKCBpPTAsIGllbj1zZWxlY3Rvci5sZW5ndGggOyBpPGllbiA7IGkrKyApIHsKCQkJLy8gT25seSBzcGxpdCBvbiBzaW1wbGUgc3RyaW5ncyAtIGNvbXBsZXggZXhwcmVzc2lvbnMgd2lsbCBiZSBqUXVlcnkgc2VsZWN0b3JzCgkJCWEgPSBzZWxlY3RvcltpXSAmJiBzZWxlY3RvcltpXS5zcGxpdCAmJiAhIHNlbGVjdG9yW2ldLm1hdGNoKC9bXFtcKDpdLykgPwoJCQkJc2VsZWN0b3JbaV0uc3BsaXQoJywnKSA6CgkJCQlbIHNlbGVjdG9yW2ldIF07CgkKCQkJZm9yICggaj0wLCBqZW49YS5sZW5ndGggOyBqPGplbiA7IGorKyApIHsKCQkJCXJlcyA9IHNlbGVjdEZuKCB0eXBlb2YgYVtqXSA9PT0gJ3N0cmluZycgPyAkLnRyaW0oYVtqXSkgOiBhW2pdICk7CgkKCQkJCWlmICggcmVzICYmIHJlcy5sZW5ndGggKSB7CgkJCQkJb3V0ID0gb3V0LmNvbmNhdCggcmVzICk7CgkJCQl9CgkJCX0KCQl9CgkKCQkvLyBzZWxlY3RvciBleHRlbnNpb25zCgkJdmFyIGV4dCA9IF9leHQuc2VsZWN0b3JbIHR5cGUgXTsKCQlpZiAoIGV4dC5sZW5ndGggKSB7CgkJCWZvciAoIGk9MCwgaWVuPWV4dC5sZW5ndGggOyBpPGllbiA7IGkrKyApIHsKCQkJCW91dCA9IGV4dFtpXSggc2V0dGluZ3MsIG9wdHMsIG91dCApOwoJCQl9CgkJfQoJCgkJcmV0dXJuIF91bmlxdWUoIG91dCApOwoJfTsKCQoJCgl2YXIgX3NlbGVjdG9yX29wdHMgPSBmdW5jdGlvbiAoIG9wdHMgKQoJewoJCWlmICggISBvcHRzICkgewoJCQlvcHRzID0ge307CgkJfQoJCgkJLy8gQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZm9yIDEuOS0gd2hpY2ggdXNlZCB0aGUgdGVybWlub2xvZ3kgZmlsdGVyIHJhdGhlcgoJCS8vIHRoYW4gc2VhcmNoCgkJaWYgKCBvcHRzLmZpbHRlciAmJiBvcHRzLnNlYXJjaCA9PT0gdW5kZWZpbmVkICkgewoJCQlvcHRzLnNlYXJjaCA9IG9wdHMuZmlsdGVyOwoJCX0KCQoJCXJldHVybiAkLmV4dGVuZCggewoJCQlzZWFyY2g6ICdub25lJywKCQkJb3JkZXI6ICdjdXJyZW50JywKCQkJcGFnZTogJ2FsbCcKCQl9LCBvcHRzICk7Cgl9OwoJCgkKCXZhciBfc2VsZWN0b3JfZmlyc3QgPSBmdW5jdGlvbiAoIGluc3QgKQoJewoJCS8vIFJlZHVjZSB0aGUgQVBJIGluc3RhbmNlIHRvIHRoZSBmaXJzdCBpdGVtIGZvdW5kCgkJZm9yICggdmFyIGk9MCwgaWVuPWluc3QubGVuZ3RoIDsgaTxpZW4gOyBpKysgKSB7CgkJCWlmICggaW5zdFtpXS5sZW5ndGggPiAwICkgewoJCQkJLy8gQXNzaWduIHRoZSBmaXJzdCBlbGVtZW50IHRvIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBpbnN0YW5jZQoJCQkJLy8gYW5kIHRydW5jYXRlIHRoZSBpbnN0YW5jZSBhbmQgY29udGV4dAoJCQkJaW5zdFswXSA9IGluc3RbaV07CgkJCQlpbnN0WzBdLmxlbmd0aCA9IDE7CgkJCQlpbnN0Lmxlbmd0aCA9IDE7CgkJCQlpbnN0LmNvbnRleHQgPSBbIGluc3QuY29udGV4dFtpXSBdOwoJCgkJCQlyZXR1cm4gaW5zdDsKCQkJfQoJCX0KCQoJCS8vIE5vdCBmb3VuZCAtIHJldHVybiBhbiBlbXB0eSBpbnN0YW5jZQoJCWluc3QubGVuZ3RoID0gMDsKCQlyZXR1cm4gaW5zdDsKCX07CgkKCQoJdmFyIF9zZWxlY3Rvcl9yb3dfaW5kZXhlcyA9IGZ1bmN0aW9uICggc2V0dGluZ3MsIG9wdHMgKQoJewoJCXZhcgoJCQlpLCBpZW4sIHRtcCwgYT1bXSwKCQkJZGlzcGxheUZpbHRlcmVkID0gc2V0dGluZ3MuYWlEaXNwbGF5LAoJCQlkaXNwbGF5TWFzdGVyID0gc2V0dGluZ3MuYWlEaXNwbGF5TWFzdGVyOwoJCgkJdmFyCgkJCXNlYXJjaCA9IG9wdHMuc2VhcmNoLCAgLy8gbm9uZSwgYXBwbGllZCwgcmVtb3ZlZAoJCQlvcmRlciAgPSBvcHRzLm9yZGVyLCAgIC8vIGFwcGxpZWQsIGN1cnJlbnQsIGluZGV4IChvcmlnaW5hbCAtIGNvbXBhdGliaWxpdHkgd2l0aCAxLjkpCgkJCXBhZ2UgICA9IG9wdHMucGFnZTsgICAgLy8gYWxsLCBjdXJyZW50CgkKCQlpZiAoIF9mbkRhdGFTb3VyY2UoIHNldHRpbmdzICkgPT0gJ3NzcCcgKSB7CgkJCS8vIEluIHNlcnZlci1zaWRlIHByb2Nlc3NpbmcgbW9kZSwgbW9zdCBvcHRpb25zIGFyZSBpcnJlbGV2YW50IHNpbmNlCgkJCS8vIHJvd3Mgbm90IHNob3duIGRvbid0IGV4aXN0IGFuZCB0aGUgaW5kZXggb3JkZXIgaXMgdGhlIGFwcGxpZWQgb3JkZXIKCQkJLy8gUmVtb3ZlZCBpcyBhIHNwZWNpYWwgY2FzZSAtIGZvciBjb25zaXN0ZW5jeSBqdXN0IHJldHVybiBhbiBlbXB0eQoJCQkvLyBhcnJheQoJCQlyZXR1cm4gc2VhcmNoID09PSAncmVtb3ZlZCcgPwoJCQkJW10gOgoJCQkJX3JhbmdlKCAwLCBkaXNwbGF5TWFzdGVyLmxlbmd0aCApOwoJCX0KCQllbHNlIGlmICggcGFnZSA9PSAnY3VycmVudCcgKSB7CgkJCS8vIEN1cnJlbnQgcGFnZSBpbXBsaWVzIHRoYXQgb3JkZXI9Y3VycmVudCBhbmQgZml0bGVyPWFwcGxpZWQsIHNpbmNlIGl0IGlzCgkJCS8vIGZhaXJseSBzZW5zZWxlc3Mgb3RoZXJ3aXNlLCByZWdhcmRsZXNzIG9mIHdoYXQgb3JkZXIgYW5kIHNlYXJjaCBhY3R1YWxseQoJCQkvLyBhcmUKCQkJZm9yICggaT1zZXR0aW5ncy5faURpc3BsYXlTdGFydCwgaWVuPXNldHRpbmdzLmZuRGlzcGxheUVuZCgpIDsgaTxpZW4gOyBpKysgKSB7CgkJCQlhLnB1c2goIGRpc3BsYXlGaWx0ZXJlZFtpXSApOwoJCQl9CgkJfQoJCWVsc2UgaWYgKCBvcmRlciA9PSAnY3VycmVudCcgfHwgb3JkZXIgPT0gJ2FwcGxpZWQnICkgewoJCQlpZiAoIHNlYXJjaCA9PSAnbm9uZScpIHsKCQkJCWEgPSBkaXNwbGF5TWFzdGVyLnNsaWNlKCk7CgkJCX0KCQkJZWxzZSBpZiAoIHNlYXJjaCA9PSAnYXBwbGllZCcgKSB7CgkJCQlhID0gZGlzcGxheUZpbHRlcmVkLnNsaWNlKCk7CgkJCX0KCQkJZWxzZSBpZiAoIHNlYXJjaCA9PSAncmVtb3ZlZCcgKSB7CgkJCQkvLyBPKG4rbSkgc29sdXRpb24gYnkgY3JlYXRpbmcgYSBoYXNoIG1hcAoJCQkJdmFyIGRpc3BsYXlGaWx0ZXJlZE1hcCA9IHt9OwoJCgkJCQlmb3IgKCB2YXIgaT0wLCBpZW49ZGlzcGxheUZpbHRlcmVkLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQkJCWRpc3BsYXlGaWx0ZXJlZE1hcFtkaXNwbGF5RmlsdGVyZWRbaV1dID0gbnVsbDsKCQkJCX0KCQoJCQkJYSA9ICQubWFwKCBkaXNwbGF5TWFzdGVyLCBmdW5jdGlvbiAoZWwpIHsKCQkJCQlyZXR1cm4gISBkaXNwbGF5RmlsdGVyZWRNYXAuaGFzT3duUHJvcGVydHkoZWwpID8KCQkJCQkJZWwgOgoJCQkJCQludWxsOwoJCQkJfSApOwoJCQl9CgkJfQoJCWVsc2UgaWYgKCBvcmRlciA9PSAnaW5kZXgnIHx8IG9yZGVyID09ICdvcmlnaW5hbCcgKSB7CgkJCWZvciAoIGk9MCwgaWVuPXNldHRpbmdzLmFvRGF0YS5sZW5ndGggOyBpPGllbiA7IGkrKyApIHsKCQkJCWlmICggc2VhcmNoID09ICdub25lJyApIHsKCQkJCQlhLnB1c2goIGkgKTsKCQkJCX0KCQkJCWVsc2UgeyAvLyBhcHBsaWVkIHwgcmVtb3ZlZAoJCQkJCXRtcCA9ICQuaW5BcnJheSggaSwgZGlzcGxheUZpbHRlcmVkICk7CgkKCQkJCQlpZiAoKHRtcCA9PT0gLTEgJiYgc2VhcmNoID09ICdyZW1vdmVkJykgfHwKCQkJCQkJKHRtcCA+PSAwICAgJiYgc2VhcmNoID09ICdhcHBsaWVkJykgKQoJCQkJCXsKCQkJCQkJYS5wdXNoKCBpICk7CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoJCgkJcmV0dXJuIGE7Cgl9OwoJCgkKCS8qICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKgoJICogUm93cwoJICoKCSAqIHt9ICAgICAgICAgIC0gbm8gc2VsZWN0b3IgLSB1c2UgYWxsIGF2YWlsYWJsZSByb3dzCgkgKiB7aW50ZWdlcn0gICAtIHJvdyBhb0RhdGEgaW5kZXgKCSAqIHtub2RlfSAgICAgIC0gVFIgbm9kZQoJICoge3N0cmluZ30gICAgLSBqUXVlcnkgc2VsZWN0b3IgdG8gYXBwbHkgdG8gdGhlIFRSIGVsZW1lbnRzCgkgKiB7YXJyYXl9ICAgICAtIGpRdWVyeSBhcnJheSBvZiBub2Rlcywgb3Igc2ltcGx5IGFuIGFycmF5IG9mIFRSIG5vZGVzCgkgKgoJICovCgl2YXIgX19yb3dfc2VsZWN0b3IgPSBmdW5jdGlvbiAoIHNldHRpbmdzLCBzZWxlY3Rvciwgb3B0cyApCgl7CgkJdmFyIHJvd3M7CgkJdmFyIHJ1biA9IGZ1bmN0aW9uICggc2VsICkgewoJCQl2YXIgc2VsSW50ID0gX2ludFZhbCggc2VsICk7CgkJCXZhciBpLCBpZW47CgkJCXZhciBhb0RhdGEgPSBzZXR0aW5ncy5hb0RhdGE7CgkKCQkJLy8gU2hvcnQgY3V0IC0gc2VsZWN0b3IgaXMgYSBudW1iZXIgYW5kIG5vIG9wdGlvbnMgcHJvdmlkZWQgKGRlZmF1bHQgaXMKCQkJLy8gYWxsIHJlY29yZHMsIHNvIG5vIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGluZGV4IGlzIGluIHRoZXJlLCBzaW5jZSBpdAoJCQkvLyBtdXN0IGJlIC0gZGV2IGVycm9yIGlmIHRoZSBpbmRleCBkb2Vzbid0IGV4aXN0KS4KCQkJaWYgKCBzZWxJbnQgIT09IG51bGwgJiYgISBvcHRzICkgewoJCQkJcmV0dXJuIFsgc2VsSW50IF07CgkJCX0KCQoJCQlpZiAoICEgcm93cyApIHsKCQkJCXJvd3MgPSBfc2VsZWN0b3Jfcm93X2luZGV4ZXMoIHNldHRpbmdzLCBvcHRzICk7CgkJCX0KCQoJCQlpZiAoIHNlbEludCAhPT0gbnVsbCAmJiAkLmluQXJyYXkoIHNlbEludCwgcm93cyApICE9PSAtMSApIHsKCQkJCS8vIFNlbGVjdG9yIC0gaW50ZWdlcgoJCQkJcmV0dXJuIFsgc2VsSW50IF07CgkJCX0KCQkJZWxzZSBpZiAoIHNlbCA9PT0gbnVsbCB8fCBzZWwgPT09IHVuZGVmaW5lZCB8fCBzZWwgPT09ICcnICkgewoJCQkJLy8gU2VsZWN0b3IgLSBub25lCgkJCQlyZXR1cm4gcm93czsKCQkJfQoJCgkJCS8vIFNlbGVjdG9yIC0gZnVuY3Rpb24KCQkJaWYgKCB0eXBlb2Ygc2VsID09PSAnZnVuY3Rpb24nICkgewoJCQkJcmV0dXJuICQubWFwKCByb3dzLCBmdW5jdGlvbiAoaWR4KSB7CgkJCQkJdmFyIHJvdyA9IGFvRGF0YVsgaWR4IF07CgkJCQkJcmV0dXJuIHNlbCggaWR4LCByb3cuX2FEYXRhLCByb3cublRyICkgPyBpZHggOiBudWxsOwoJCQkJfSApOwoJCQl9CgkKCQkJLy8gU2VsZWN0b3IgLSBub2RlCgkJCWlmICggc2VsLm5vZGVOYW1lICkgewoJCQkJdmFyIHJvd0lkeCA9IHNlbC5fRFRfUm93SW5kZXg7ICAvLyBQcm9wZXJ0eSBhZGRlZCBieSBEVCBmb3IgZmFzdCBsb29rdXAKCQkJCXZhciBjZWxsSWR4ID0gc2VsLl9EVF9DZWxsSW5kZXg7CgkKCQkJCWlmICggcm93SWR4ICE9PSB1bmRlZmluZWQgKSB7CgkJCQkJLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHJvdyBpcyBhY3R1YWxseSBzdGlsbCBwcmVzZW50IGluIHRoZSB0YWJsZQoJCQkJCXJldHVybiBhb0RhdGFbIHJvd0lkeCBdICYmIGFvRGF0YVsgcm93SWR4IF0ublRyID09PSBzZWwgPwoJCQkJCQlbIHJvd0lkeCBdIDoKCQkJCQkJW107CgkJCQl9CgkJCQllbHNlIGlmICggY2VsbElkeCApIHsKCQkJCQlyZXR1cm4gYW9EYXRhWyBjZWxsSWR4LnJvdyBdICYmIGFvRGF0YVsgY2VsbElkeC5yb3cgXS5uVHIgPT09IHNlbCA/CgkJCQkJCVsgY2VsbElkeC5yb3cgXSA6CgkJCQkJCVtdOwoJCQkJfQoJCQkJZWxzZSB7CgkJCQkJdmFyIGhvc3QgPSAkKHNlbCkuY2xvc2VzdCgnKltkYXRhLWR0LXJvd10nKTsKCQkJCQlyZXR1cm4gaG9zdC5sZW5ndGggPwoJCQkJCQlbIGhvc3QuZGF0YSgnZHQtcm93JykgXSA6CgkJCQkJCVtdOwoJCQkJfQoJCQl9CgkKCQkJLy8gSUQgc2VsZWN0b3IuIFdhbnQgdG8gYWx3YXlzIGJlIGFibGUgdG8gc2VsZWN0IHJvd3MgYnkgaWQsIHJlZ2FyZGxlc3MKCQkJLy8gb2YgaWYgdGhlIHRyIGVsZW1lbnQgaGFzIGJlZW4gY3JlYXRlZCBvciBub3QsIHNvIGNhbid0IHJlbHkgdXBvbgoJCQkvLyBqUXVlcnkgaGVyZSAtIGhlbmNlIGEgY3VzdG9tIGltcGxlbWVudGF0aW9uLiBUaGlzIGRvZXMgbm90IG1hdGNoCgkJCS8vIFNpenpsZSdzIGZhc3Qgc2VsZWN0b3Igb3IgSFRNTDQgLSBpbiBIVE1MNSB0aGUgSUQgY2FuIGJlIGFueXRoaW5nLAoJCQkvLyBidXQgdG8gc2VsZWN0IGl0IHVzaW5nIGEgQ1NTIHNlbGVjdG9yIGVuZ2luZSAobGlrZSBTaXp6bGUgb3IKCQkJLy8gcXVlcnlTZWxlY3QpIGl0IHdvdWxkIG5lZWQgdG8gbmVlZCB0byBiZSBlc2NhcGVkIGZvciBzb21lIGNoYXJhY3RlcnMuCgkJCS8vIERhdGFUYWJsZXMgc2ltcGxpZmllcyB0aGlzIGZvciByb3cgc2VsZWN0b3JzIHNpbmNlIHlvdSBjYW4gc2VsZWN0CgkJCS8vIG9ubHkgYSByb3cuIEEgIyBpbmRpY2F0ZXMgYW4gaWQgYW55IGFueXRoaW5nIHRoYXQgZm9sbG93cyBpcyB0aGUgaWQgLQoJCQkvLyB1bmVzY2FwZWQuCgkJCWlmICggdHlwZW9mIHNlbCA9PT0gJ3N0cmluZycgJiYgc2VsLmNoYXJBdCgwKSA9PT0gJyMnICkgewoJCQkJLy8gZ2V0IHJvdyBpbmRleCBmcm9tIGlkCgkJCQl2YXIgcm93T2JqID0gc2V0dGluZ3MuYUlkc1sgc2VsLnJlcGxhY2UoIC9eIy8sICcnICkgXTsKCQkJCWlmICggcm93T2JqICE9PSB1bmRlZmluZWQgKSB7CgkJCQkJcmV0dXJuIFsgcm93T2JqLmlkeCBdOwoJCQkJfQoJCgkJCQkvLyBuZWVkIHRvIGZhbGwgdGhyb3VnaCB0byBqUXVlcnkgaW4gY2FzZSB0aGVyZSBpcyBET00gaWQgdGhhdAoJCQkJLy8gbWF0Y2hlcwoJCQl9CgkJCQoJCQkvLyBHZXQgbm9kZXMgaW4gdGhlIG9yZGVyIGZyb20gdGhlIGByb3dzYCBhcnJheSB3aXRoIG51bGwgdmFsdWVzIHJlbW92ZWQKCQkJdmFyIG5vZGVzID0gX3JlbW92ZUVtcHR5KAoJCQkJX3BsdWNrX29yZGVyKCBzZXR0aW5ncy5hb0RhdGEsIHJvd3MsICduVHInICkKCQkJKTsKCQoJCQkvLyBTZWxlY3RvciAtIGpRdWVyeSBzZWxlY3RvciBzdHJpbmcsIGFycmF5IG9mIG5vZGVzIG9yIGpRdWVyeSBvYmplY3QvCgkJCS8vIEFzIGpRdWVyeSdzIC5maWx0ZXIoKSBhbGxvd3MgalF1ZXJ5IG9iamVjdHMgdG8gYmUgcGFzc2VkIGluIGZpbHRlciwKCQkJLy8gaXQgYWxzbyBhbGxvd3MgYXJyYXlzLCBzbyB0aGlzIHdpbGwgY29wZSB3aXRoIGFsbCB0aHJlZSBvcHRpb25zCgkJCXJldHVybiAkKG5vZGVzKQoJCQkJLmZpbHRlciggc2VsICkKCQkJCS5tYXAoIGZ1bmN0aW9uICgpIHsKCQkJCQlyZXR1cm4gdGhpcy5fRFRfUm93SW5kZXg7CgkJCQl9ICkKCQkJCS50b0FycmF5KCk7CgkJfTsKCQoJCXJldHVybiBfc2VsZWN0b3JfcnVuKCAncm93Jywgc2VsZWN0b3IsIHJ1biwgc2V0dGluZ3MsIG9wdHMgKTsKCX07CgkKCQoJX2FwaV9yZWdpc3RlciggJ3Jvd3MoKScsIGZ1bmN0aW9uICggc2VsZWN0b3IsIG9wdHMgKSB7CgkJLy8gYXJndW1lbnQgc2hpZnRpbmcKCQlpZiAoIHNlbGVjdG9yID09PSB1bmRlZmluZWQgKSB7CgkJCXNlbGVjdG9yID0gJyc7CgkJfQoJCWVsc2UgaWYgKCAkLmlzUGxhaW5PYmplY3QoIHNlbGVjdG9yICkgKSB7CgkJCW9wdHMgPSBzZWxlY3RvcjsKCQkJc2VsZWN0b3IgPSAnJzsKCQl9CgkKCQlvcHRzID0gX3NlbGVjdG9yX29wdHMoIG9wdHMgKTsKCQoJCXZhciBpbnN0ID0gdGhpcy5pdGVyYXRvciggJ3RhYmxlJywgZnVuY3Rpb24gKCBzZXR0aW5ncyApIHsKCQkJcmV0dXJuIF9fcm93X3NlbGVjdG9yKCBzZXR0aW5ncywgc2VsZWN0b3IsIG9wdHMgKTsKCQl9LCAxICk7CgkKCQkvLyBXYW50IGFyZ3VtZW50IHNoaWZ0aW5nIGhlcmUgYW5kIGluIF9fcm93X3NlbGVjdG9yPwoJCWluc3Quc2VsZWN0b3Iucm93cyA9IHNlbGVjdG9yOwoJCWluc3Quc2VsZWN0b3Iub3B0cyA9IG9wdHM7CgkKCQlyZXR1cm4gaW5zdDsKCX0gKTsKCQoJX2FwaV9yZWdpc3RlciggJ3Jvd3MoKS5ub2RlcygpJywgZnVuY3Rpb24gKCkgewoJCXJldHVybiB0aGlzLml0ZXJhdG9yKCAncm93JywgZnVuY3Rpb24gKCBzZXR0aW5ncywgcm93ICkgewoJCQlyZXR1cm4gc2V0dGluZ3MuYW9EYXRhWyByb3cgXS5uVHIgfHwgdW5kZWZpbmVkOwoJCX0sIDEgKTsKCX0gKTsKCQoJX2FwaV9yZWdpc3RlciggJ3Jvd3MoKS5kYXRhKCknLCBmdW5jdGlvbiAoKSB7CgkJcmV0dXJuIHRoaXMuaXRlcmF0b3IoIHRydWUsICdyb3dzJywgZnVuY3Rpb24gKCBzZXR0aW5ncywgcm93cyApIHsKCQkJcmV0dXJuIF9wbHVja19vcmRlciggc2V0dGluZ3MuYW9EYXRhLCByb3dzLCAnX2FEYXRhJyApOwoJCX0sIDEgKTsKCX0gKTsKCQoJX2FwaV9yZWdpc3RlclBsdXJhbCggJ3Jvd3MoKS5jYWNoZSgpJywgJ3JvdygpLmNhY2hlKCknLCBmdW5jdGlvbiAoIHR5cGUgKSB7CgkJcmV0dXJuIHRoaXMuaXRlcmF0b3IoICdyb3cnLCBmdW5jdGlvbiAoIHNldHRpbmdzLCByb3cgKSB7CgkJCXZhciByID0gc2V0dGluZ3MuYW9EYXRhWyByb3cgXTsKCQkJcmV0dXJuIHR5cGUgPT09ICdzZWFyY2gnID8gci5fYUZpbHRlckRhdGEgOiByLl9hU29ydERhdGE7CgkJfSwgMSApOwoJfSApOwoJCglfYXBpX3JlZ2lzdGVyUGx1cmFsKCAncm93cygpLmludmFsaWRhdGUoKScsICdyb3coKS5pbnZhbGlkYXRlKCknLCBmdW5jdGlvbiAoIHNyYyApIHsKCQlyZXR1cm4gdGhpcy5pdGVyYXRvciggJ3JvdycsIGZ1bmN0aW9uICggc2V0dGluZ3MsIHJvdyApIHsKCQkJX2ZuSW52YWxpZGF0ZSggc2V0dGluZ3MsIHJvdywgc3JjICk7CgkJfSApOwoJfSApOwoJCglfYXBpX3JlZ2lzdGVyUGx1cmFsKCAncm93cygpLmluZGV4ZXMoKScsICdyb3coKS5pbmRleCgpJywgZnVuY3Rpb24gKCkgewoJCXJldHVybiB0aGlzLml0ZXJhdG9yKCAncm93JywgZnVuY3Rpb24gKCBzZXR0aW5ncywgcm93ICkgewoJCQlyZXR1cm4gcm93OwoJCX0sIDEgKTsKCX0gKTsKCQoJX2FwaV9yZWdpc3RlclBsdXJhbCggJ3Jvd3MoKS5pZHMoKScsICdyb3coKS5pZCgpJywgZnVuY3Rpb24gKCBoYXNoICkgewoJCXZhciBhID0gW107CgkJdmFyIGNvbnRleHQgPSB0aGlzLmNvbnRleHQ7CgkKCQkvLyBgaXRlcmF0b3JgIHdpbGwgZHJvcCB1bmRlZmluZWQgdmFsdWVzLCBidXQgaW4gdGhpcyBjYXNlIHdlIHdhbnQgdGhlbQoJCWZvciAoIHZhciBpPTAsIGllbj1jb250ZXh0Lmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQlmb3IgKCB2YXIgaj0wLCBqZW49dGhpc1tpXS5sZW5ndGggOyBqPGplbiA7IGorKyApIHsKCQkJCXZhciBpZCA9IGNvbnRleHRbaV0ucm93SWRGbiggY29udGV4dFtpXS5hb0RhdGFbIHRoaXNbaV1bal0gXS5fYURhdGEgKTsKCQkJCWEucHVzaCggKGhhc2ggPT09IHRydWUgPyAnIycgOiAnJyApKyBpZCApOwoJCQl9CgkJfQoJCgkJcmV0dXJuIG5ldyBfQXBpKCBjb250ZXh0LCBhICk7Cgl9ICk7CgkKCV9hcGlfcmVnaXN0ZXJQbHVyYWwoICdyb3dzKCkucmVtb3ZlKCknLCAncm93KCkucmVtb3ZlKCknLCBmdW5jdGlvbiAoKSB7CgkJdmFyIHRoYXQgPSB0aGlzOwoJCgkJdGhpcy5pdGVyYXRvciggJ3JvdycsIGZ1bmN0aW9uICggc2V0dGluZ3MsIHJvdywgdGhhdElkeCApIHsKCQkJdmFyIGRhdGEgPSBzZXR0aW5ncy5hb0RhdGE7CgkJCXZhciByb3dEYXRhID0gZGF0YVsgcm93IF07CgkJCXZhciBpLCBpZW4sIGosIGplbjsKCQkJdmFyIGxvb3BSb3csIGxvb3BDZWxsczsKCQoJCQlkYXRhLnNwbGljZSggcm93LCAxICk7CgkKCQkJLy8gVXBkYXRlIHRoZSBjYWNoZWQgaW5kZXhlcwoJCQlmb3IgKCBpPTAsIGllbj1kYXRhLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQkJbG9vcFJvdyA9IGRhdGFbaV07CgkJCQlsb29wQ2VsbHMgPSBsb29wUm93LmFuQ2VsbHM7CgkKCQkJCS8vIFJvd3MKCQkJCWlmICggbG9vcFJvdy5uVHIgIT09IG51bGwgKSB7CgkJCQkJbG9vcFJvdy5uVHIuX0RUX1Jvd0luZGV4ID0gaTsKCQkJCX0KCQoJCQkJLy8gQ2VsbHMKCQkJCWlmICggbG9vcENlbGxzICE9PSBudWxsICkgewoJCQkJCWZvciAoIGo9MCwgamVuPWxvb3BDZWxscy5sZW5ndGggOyBqPGplbiA7IGorKyApIHsKCQkJCQkJbG9vcENlbGxzW2pdLl9EVF9DZWxsSW5kZXgucm93ID0gaTsKCQkJCQl9CgkJCQl9CgkJCX0KCQoJCQkvLyBEZWxldGUgZnJvbSB0aGUgZGlzcGxheSBhcnJheXMKCQkJX2ZuRGVsZXRlSW5kZXgoIHNldHRpbmdzLmFpRGlzcGxheU1hc3Rlciwgcm93ICk7CgkJCV9mbkRlbGV0ZUluZGV4KCBzZXR0aW5ncy5haURpc3BsYXksIHJvdyApOwoJCQlfZm5EZWxldGVJbmRleCggdGhhdFsgdGhhdElkeCBdLCByb3csIGZhbHNlICk7IC8vIG1haW50YWluIGxvY2FsIGluZGV4ZXMKCQoJCQkvLyBGb3Igc2VydmVyLXNpZGUgcHJvY2Vzc2luZyB0YWJsZXMgLSBzdWJ0cmFjdCB0aGUgZGVsZXRlZCByb3cgZnJvbSB0aGUgY291bnQKCQkJaWYgKCBzZXR0aW5ncy5faVJlY29yZHNEaXNwbGF5ID4gMCApIHsKCQkJCXNldHRpbmdzLl9pUmVjb3Jkc0Rpc3BsYXktLTsKCQkJfQoJCgkJCS8vIENoZWNrIGZvciBhbiAnb3ZlcmZsb3cnIHRoZXkgY2FzZSBmb3IgZGlzcGxheWluZyB0aGUgdGFibGUKCQkJX2ZuTGVuZ3RoT3ZlcmZsb3coIHNldHRpbmdzICk7CgkKCQkJLy8gUmVtb3ZlIHRoZSByb3cncyBJRCByZWZlcmVuY2UgaWYgdGhlcmUgaXMgb25lCgkJCXZhciBpZCA9IHNldHRpbmdzLnJvd0lkRm4oIHJvd0RhdGEuX2FEYXRhICk7CgkJCWlmICggaWQgIT09IHVuZGVmaW5lZCApIHsKCQkJCWRlbGV0ZSBzZXR0aW5ncy5hSWRzWyBpZCBdOwoJCQl9CgkJfSApOwoJCgkJdGhpcy5pdGVyYXRvciggJ3RhYmxlJywgZnVuY3Rpb24gKCBzZXR0aW5ncyApIHsKCQkJZm9yICggdmFyIGk9MCwgaWVuPXNldHRpbmdzLmFvRGF0YS5sZW5ndGggOyBpPGllbiA7IGkrKyApIHsKCQkJCXNldHRpbmdzLmFvRGF0YVtpXS5pZHggPSBpOwoJCQl9CgkJfSApOwoJCgkJcmV0dXJuIHRoaXM7Cgl9ICk7CgkKCQoJX2FwaV9yZWdpc3RlciggJ3Jvd3MuYWRkKCknLCBmdW5jdGlvbiAoIHJvd3MgKSB7CgkJdmFyIG5ld1Jvd3MgPSB0aGlzLml0ZXJhdG9yKCAndGFibGUnLCBmdW5jdGlvbiAoIHNldHRpbmdzICkgewoJCQkJdmFyIHJvdywgaSwgaWVuOwoJCQkJdmFyIG91dCA9IFtdOwoJCgkJCQlmb3IgKCBpPTAsIGllbj1yb3dzLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQkJCXJvdyA9IHJvd3NbaV07CgkKCQkJCQlpZiAoIHJvdy5ub2RlTmFtZSAmJiByb3cubm9kZU5hbWUudG9VcHBlckNhc2UoKSA9PT0gJ1RSJyApIHsKCQkJCQkJb3V0LnB1c2goIF9mbkFkZFRyKCBzZXR0aW5ncywgcm93IClbMF0gKTsKCQkJCQl9CgkJCQkJZWxzZSB7CgkJCQkJCW91dC5wdXNoKCBfZm5BZGREYXRhKCBzZXR0aW5ncywgcm93ICkgKTsKCQkJCQl9CgkJCQl9CgkKCQkJCXJldHVybiBvdXQ7CgkJCX0sIDEgKTsKCQoJCS8vIFJldHVybiBhbiBBcGkucm93cygpIGV4dGVuZGVkIGluc3RhbmNlLCBzbyByb3dzKCkubm9kZXMoKSBldGMgY2FuIGJlIHVzZWQKCQl2YXIgbW9kUm93cyA9IHRoaXMucm93cyggLTEgKTsKCQltb2RSb3dzLnBvcCgpOwoJCSQubWVyZ2UoIG1vZFJvd3MsIG5ld1Jvd3MgKTsKCQoJCXJldHVybiBtb2RSb3dzOwoJfSApOwoJCgkKCQoJCgkKCS8qKgoJICoKCSAqLwoJX2FwaV9yZWdpc3RlciggJ3JvdygpJywgZnVuY3Rpb24gKCBzZWxlY3Rvciwgb3B0cyApIHsKCQlyZXR1cm4gX3NlbGVjdG9yX2ZpcnN0KCB0aGlzLnJvd3MoIHNlbGVjdG9yLCBvcHRzICkgKTsKCX0gKTsKCQoJCglfYXBpX3JlZ2lzdGVyKCAncm93KCkuZGF0YSgpJywgZnVuY3Rpb24gKCBkYXRhICkgewoJCXZhciBjdHggPSB0aGlzLmNvbnRleHQ7CgkKCQlpZiAoIGRhdGEgPT09IHVuZGVmaW5lZCApIHsKCQkJLy8gR2V0CgkJCXJldHVybiBjdHgubGVuZ3RoICYmIHRoaXMubGVuZ3RoID8KCQkJCWN0eFswXS5hb0RhdGFbIHRoaXNbMF0gXS5fYURhdGEgOgoJCQkJdW5kZWZpbmVkOwoJCX0KCQoJCS8vIFNldAoJCXZhciByb3cgPSBjdHhbMF0uYW9EYXRhWyB0aGlzWzBdIF07CgkJcm93Ll9hRGF0YSA9IGRhdGE7CgkKCQkvLyBJZiB0aGUgRE9NIGhhcyBhbiBpZCwgYW5kIHRoZSBkYXRhIHNvdXJjZSBpcyBhbiBhcnJheQoJCWlmICggJC5pc0FycmF5KCBkYXRhICkgJiYgcm93Lm5Uci5pZCApIHsKCQkJX2ZuU2V0T2JqZWN0RGF0YUZuKCBjdHhbMF0ucm93SWQgKSggZGF0YSwgcm93Lm5Uci5pZCApOwoJCX0KCQoJCS8vIEF1dG9tYXRpY2FsbHkgaW52YWxpZGF0ZQoJCV9mbkludmFsaWRhdGUoIGN0eFswXSwgdGhpc1swXSwgJ2RhdGEnICk7CgkKCQlyZXR1cm4gdGhpczsKCX0gKTsKCQoJCglfYXBpX3JlZ2lzdGVyKCAncm93KCkubm9kZSgpJywgZnVuY3Rpb24gKCkgewoJCXZhciBjdHggPSB0aGlzLmNvbnRleHQ7CgkKCQlyZXR1cm4gY3R4Lmxlbmd0aCAmJiB0aGlzLmxlbmd0aCA/CgkJCWN0eFswXS5hb0RhdGFbIHRoaXNbMF0gXS5uVHIgfHwgbnVsbCA6CgkJCW51bGw7Cgl9ICk7CgkKCQoJX2FwaV9yZWdpc3RlciggJ3Jvdy5hZGQoKScsIGZ1bmN0aW9uICggcm93ICkgewoJCS8vIEFsbG93IGEgalF1ZXJ5IG9iamVjdCB0byBiZSBwYXNzZWQgaW4gLSBvbmx5IGEgc2luZ2xlIHJvdyBpcyBhZGRlZCBmcm9tCgkJLy8gaXQgdGhvdWdoIC0gdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIHNldAoJCWlmICggcm93IGluc3RhbmNlb2YgJCAmJiByb3cubGVuZ3RoICkgewoJCQlyb3cgPSByb3dbMF07CgkJfQoJCgkJdmFyIHJvd3MgPSB0aGlzLml0ZXJhdG9yKCAndGFibGUnLCBmdW5jdGlvbiAoIHNldHRpbmdzICkgewoJCQlpZiAoIHJvdy5ub2RlTmFtZSAmJiByb3cubm9kZU5hbWUudG9VcHBlckNhc2UoKSA9PT0gJ1RSJyApIHsKCQkJCXJldHVybiBfZm5BZGRUciggc2V0dGluZ3MsIHJvdyApWzBdOwoJCQl9CgkJCXJldHVybiBfZm5BZGREYXRhKCBzZXR0aW5ncywgcm93ICk7CgkJfSApOwoJCgkJLy8gUmV0dXJuIGFuIEFwaS5yb3dzKCkgZXh0ZW5kZWQgaW5zdGFuY2UsIHdpdGggdGhlIG5ld2x5IGFkZGVkIHJvdyBzZWxlY3RlZAoJCXJldHVybiB0aGlzLnJvdyggcm93c1swXSApOwoJfSApOwoJCgkKCQoJdmFyIF9fZGV0YWlsc19hZGQgPSBmdW5jdGlvbiAoIGN0eCwgcm93LCBkYXRhLCBrbGFzcyApCgl7CgkJLy8gQ29udmVydCB0byBhcnJheSBvZiBUUiBlbGVtZW50cwoJCXZhciByb3dzID0gW107CgkJdmFyIGFkZFJvdyA9IGZ1bmN0aW9uICggciwgayApIHsKCQkJLy8gUmVjdXJzaW9uIHRvIGFsbG93IGZvciBhcnJheXMgb2YgalF1ZXJ5IG9iamVjdHMKCQkJaWYgKCAkLmlzQXJyYXkoIHIgKSB8fCByIGluc3RhbmNlb2YgJCApIHsKCQkJCWZvciAoIHZhciBpPTAsIGllbj1yLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQkJCWFkZFJvdyggcltpXSwgayApOwoJCQkJfQoJCQkJcmV0dXJuOwoJCQl9CgkKCQkJLy8gSWYgd2UgZ2V0IGEgVFIgZWxlbWVudCwgdGhlbiBqdXN0IGFkZCBpdCBkaXJlY3RseSAtIHVwIHRvIHRoZSBkZXYKCQkJLy8gdG8gYWRkIHRoZSBjb3JyZWN0IG51bWJlciBvZiBjb2x1bW5zIGV0YwoJCQlpZiAoIHIubm9kZU5hbWUgJiYgci5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAndHInICkgewoJCQkJcm93cy5wdXNoKCByICk7CgkJCX0KCQkJZWxzZSB7CgkJCQkvLyBPdGhlcndpc2UgY3JlYXRlIGEgcm93IHdpdGggYSB3cmFwcGVyCgkJCQl2YXIgY3JlYXRlZCA9ICQoJzx0cj48dGQvPjwvdHI+JykuYWRkQ2xhc3MoIGsgKTsKCQkJCSQoJ3RkJywgY3JlYXRlZCkKCQkJCQkuYWRkQ2xhc3MoIGsgKQoJCQkJCS5odG1sKCByICkKCQkJCQlbMF0uY29sU3BhbiA9IF9mblZpc2JsZUNvbHVtbnMoIGN0eCApOwoJCgkJCQlyb3dzLnB1c2goIGNyZWF0ZWRbMF0gKTsKCQkJfQoJCX07CgkKCQlhZGRSb3coIGRhdGEsIGtsYXNzICk7CgkKCQlpZiAoIHJvdy5fZGV0YWlscyApIHsKCQkJcm93Ll9kZXRhaWxzLmRldGFjaCgpOwoJCX0KCQoJCXJvdy5fZGV0YWlscyA9ICQocm93cyk7CgkKCQkvLyBJZiB0aGUgY2hpbGRyZW4gd2VyZSBhbHJlYWR5IHNob3duLCB0aGF0IHN0YXRlIHNob3VsZCBiZSByZXRhaW5lZAoJCWlmICggcm93Ll9kZXRhaWxzU2hvdyApIHsKCQkJcm93Ll9kZXRhaWxzLmluc2VydEFmdGVyKCByb3cublRyICk7CgkJfQoJfTsKCQoJCgl2YXIgX19kZXRhaWxzX3JlbW92ZSA9IGZ1bmN0aW9uICggYXBpLCBpZHggKQoJewoJCXZhciBjdHggPSBhcGkuY29udGV4dDsKCQoJCWlmICggY3R4Lmxlbmd0aCApIHsKCQkJdmFyIHJvdyA9IGN0eFswXS5hb0RhdGFbIGlkeCAhPT0gdW5kZWZpbmVkID8gaWR4IDogYXBpWzBdIF07CgkKCQkJaWYgKCByb3cgJiYgcm93Ll9kZXRhaWxzICkgewoJCQkJcm93Ll9kZXRhaWxzLnJlbW92ZSgpOwoJCgkJCQlyb3cuX2RldGFpbHNTaG93ID0gdW5kZWZpbmVkOwoJCQkJcm93Ll9kZXRhaWxzID0gdW5kZWZpbmVkOwoJCQl9CgkJfQoJfTsKCQoJCgl2YXIgX19kZXRhaWxzX2Rpc3BsYXkgPSBmdW5jdGlvbiAoIGFwaSwgc2hvdyApIHsKCQl2YXIgY3R4ID0gYXBpLmNvbnRleHQ7CgkKCQlpZiAoIGN0eC5sZW5ndGggJiYgYXBpLmxlbmd0aCApIHsKCQkJdmFyIHJvdyA9IGN0eFswXS5hb0RhdGFbIGFwaVswXSBdOwoJCgkJCWlmICggcm93Ll9kZXRhaWxzICkgewoJCQkJcm93Ll9kZXRhaWxzU2hvdyA9IHNob3c7CgkKCQkJCWlmICggc2hvdyApIHsKCQkJCQlyb3cuX2RldGFpbHMuaW5zZXJ0QWZ0ZXIoIHJvdy5uVHIgKTsKCQkJCX0KCQkJCWVsc2UgewoJCQkJCXJvdy5fZGV0YWlscy5kZXRhY2goKTsKCQkJCX0KCQoJCQkJX19kZXRhaWxzX2V2ZW50cyggY3R4WzBdICk7CgkJCX0KCQl9Cgl9OwoJCgkKCXZhciBfX2RldGFpbHNfZXZlbnRzID0gZnVuY3Rpb24gKCBzZXR0aW5ncyApCgl7CgkJdmFyIGFwaSA9IG5ldyBfQXBpKCBzZXR0aW5ncyApOwoJCXZhciBuYW1lc3BhY2UgPSAnLmR0LkRUX2RldGFpbHMnOwoJCXZhciBkcmF3RXZlbnQgPSAnZHJhdycrbmFtZXNwYWNlOwoJCXZhciBjb2x2aXNFdmVudCA9ICdjb2x1bW4tdmlzaWJpbGl0eScrbmFtZXNwYWNlOwoJCXZhciBkZXN0cm95RXZlbnQgPSAnZGVzdHJveScrbmFtZXNwYWNlOwoJCXZhciBkYXRhID0gc2V0dGluZ3MuYW9EYXRhOwoJCgkJYXBpLm9mZiggZHJhd0V2ZW50ICsnICcrIGNvbHZpc0V2ZW50ICsnICcrIGRlc3Ryb3lFdmVudCApOwoJCgkJaWYgKCBfcGx1Y2soIGRhdGEsICdfZGV0YWlscycgKS5sZW5ndGggPiAwICkgewoJCQkvLyBPbiBlYWNoIGRyYXcsIGluc2VydCB0aGUgcmVxdWlyZWQgZWxlbWVudHMgaW50byB0aGUgZG9jdW1lbnQKCQkJYXBpLm9uKCBkcmF3RXZlbnQsIGZ1bmN0aW9uICggZSwgY3R4ICkgewoJCQkJaWYgKCBzZXR0aW5ncyAhPT0gY3R4ICkgewoJCQkJCXJldHVybjsKCQkJCX0KCQoJCQkJYXBpLnJvd3MoIHtwYWdlOidjdXJyZW50J30gKS5lcSgwKS5lYWNoKCBmdW5jdGlvbiAoaWR4KSB7CgkJCQkJLy8gSW50ZXJuYWwgZGF0YSBncmFiCgkJCQkJdmFyIHJvdyA9IGRhdGFbIGlkeCBdOwoJCgkJCQkJaWYgKCByb3cuX2RldGFpbHNTaG93ICkgewoJCQkJCQlyb3cuX2RldGFpbHMuaW5zZXJ0QWZ0ZXIoIHJvdy5uVHIgKTsKCQkJCQl9CgkJCQl9ICk7CgkJCX0gKTsKCQoJCQkvLyBDb2x1bW4gdmlzaWJpbGl0eSBjaGFuZ2UgLSB1cGRhdGUgdGhlIGNvbHNwYW4KCQkJYXBpLm9uKCBjb2x2aXNFdmVudCwgZnVuY3Rpb24gKCBlLCBjdHgsIGlkeCwgdmlzICkgewoJCQkJaWYgKCBzZXR0aW5ncyAhPT0gY3R4ICkgewoJCQkJCXJldHVybjsKCQkJCX0KCQoJCQkJLy8gVXBkYXRlIHRoZSBjb2xzcGFuIGZvciB0aGUgZGV0YWlscyByb3dzIChub3RlLCBvbmx5IGlmIGl0IGFscmVhZHkgaGFzCgkJCQkvLyBhIGNvbHNwYW4pCgkJCQl2YXIgcm93LCB2aXNpYmxlID0gX2ZuVmlzYmxlQ29sdW1ucyggY3R4ICk7CgkKCQkJCWZvciAoIHZhciBpPTAsIGllbj1kYXRhLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQkJCXJvdyA9IGRhdGFbaV07CgkKCQkJCQlpZiAoIHJvdy5fZGV0YWlscyApIHsKCQkJCQkJcm93Ll9kZXRhaWxzLmNoaWxkcmVuKCd0ZFtjb2xzcGFuXScpLmF0dHIoJ2NvbHNwYW4nLCB2aXNpYmxlICk7CgkJCQkJfQoJCQkJfQoJCQl9ICk7CgkKCQkJLy8gVGFibGUgZGVzdHJveWVkIC0gbnVrZSBhbnkgY2hpbGQgcm93cwoJCQlhcGkub24oIGRlc3Ryb3lFdmVudCwgZnVuY3Rpb24gKCBlLCBjdHggKSB7CgkJCQlpZiAoIHNldHRpbmdzICE9PSBjdHggKSB7CgkJCQkJcmV0dXJuOwoJCQkJfQoJCgkJCQlmb3IgKCB2YXIgaT0wLCBpZW49ZGF0YS5sZW5ndGggOyBpPGllbiA7IGkrKyApIHsKCQkJCQlpZiAoIGRhdGFbaV0uX2RldGFpbHMgKSB7CgkJCQkJCV9fZGV0YWlsc19yZW1vdmUoIGFwaSwgaSApOwoJCQkJCX0KCQkJCX0KCQkJfSApOwoJCX0KCX07CgkKCS8vIFN0cmluZ3MgZm9yIHRoZSBtZXRob2QgbmFtZXMgdG8gaGVscCBtaW5pZmljYXRpb24KCXZhciBfZW1wID0gJyc7Cgl2YXIgX2NoaWxkX29iaiA9IF9lbXArJ3JvdygpLmNoaWxkJzsKCXZhciBfY2hpbGRfbXRoID0gX2NoaWxkX29iaisnKCknOwoJCgkvLyBkYXRhIGNhbiBiZToKCS8vICB0cgoJLy8gIHN0cmluZwoJLy8gIGpRdWVyeSBvciBhcnJheSBvZiBhbnkgb2YgdGhlIGFib3ZlCglfYXBpX3JlZ2lzdGVyKCBfY2hpbGRfbXRoLCBmdW5jdGlvbiAoIGRhdGEsIGtsYXNzICkgewoJCXZhciBjdHggPSB0aGlzLmNvbnRleHQ7CgkKCQlpZiAoIGRhdGEgPT09IHVuZGVmaW5lZCApIHsKCQkJLy8gZ2V0CgkJCXJldHVybiBjdHgubGVuZ3RoICYmIHRoaXMubGVuZ3RoID8KCQkJCWN0eFswXS5hb0RhdGFbIHRoaXNbMF0gXS5fZGV0YWlscyA6CgkJCQl1bmRlZmluZWQ7CgkJfQoJCWVsc2UgaWYgKCBkYXRhID09PSB0cnVlICkgewoJCQkvLyBzaG93CgkJCXRoaXMuY2hpbGQuc2hvdygpOwoJCX0KCQllbHNlIGlmICggZGF0YSA9PT0gZmFsc2UgKSB7CgkJCS8vIHJlbW92ZQoJCQlfX2RldGFpbHNfcmVtb3ZlKCB0aGlzICk7CgkJfQoJCWVsc2UgaWYgKCBjdHgubGVuZ3RoICYmIHRoaXMubGVuZ3RoICkgewoJCQkvLyBzZXQKCQkJX19kZXRhaWxzX2FkZCggY3R4WzBdLCBjdHhbMF0uYW9EYXRhWyB0aGlzWzBdIF0sIGRhdGEsIGtsYXNzICk7CgkJfQoJCgkJcmV0dXJuIHRoaXM7Cgl9ICk7CgkKCQoJX2FwaV9yZWdpc3RlciggWwoJCV9jaGlsZF9vYmorJy5zaG93KCknLAoJCV9jaGlsZF9tdGgrJy5zaG93KCknIC8vIG9ubHkgd2hlbiBgY2hpbGQoKWAgd2FzIGNhbGxlZCB3aXRoIHBhcmFtZXRlcnMgKHdpdGhvdXQKCV0sIGZ1bmN0aW9uICggc2hvdyApIHsgICAvLyBpdCByZXR1cm5zIGFuIG9iamVjdCBhbmQgdGhpcyBtZXRob2QgaXMgbm90IGV4ZWN1dGVkKQoJCV9fZGV0YWlsc19kaXNwbGF5KCB0aGlzLCB0cnVlICk7CgkJcmV0dXJuIHRoaXM7Cgl9ICk7CgkKCQoJX2FwaV9yZWdpc3RlciggWwoJCV9jaGlsZF9vYmorJy5oaWRlKCknLAoJCV9jaGlsZF9tdGgrJy5oaWRlKCknIC8vIG9ubHkgd2hlbiBgY2hpbGQoKWAgd2FzIGNhbGxlZCB3aXRoIHBhcmFtZXRlcnMgKHdpdGhvdXQKCV0sIGZ1bmN0aW9uICgpIHsgICAgICAgICAvLyBpdCByZXR1cm5zIGFuIG9iamVjdCBhbmQgdGhpcyBtZXRob2QgaXMgbm90IGV4ZWN1dGVkKQoJCV9fZGV0YWlsc19kaXNwbGF5KCB0aGlzLCBmYWxzZSApOwoJCXJldHVybiB0aGlzOwoJfSApOwoJCgkKCV9hcGlfcmVnaXN0ZXIoIFsKCQlfY2hpbGRfb2JqKycucmVtb3ZlKCknLAoJCV9jaGlsZF9tdGgrJy5yZW1vdmUoKScgLy8gb25seSB3aGVuIGBjaGlsZCgpYCB3YXMgY2FsbGVkIHdpdGggcGFyYW1ldGVycyAod2l0aG91dAoJXSwgZnVuY3Rpb24gKCkgeyAgICAgICAgICAgLy8gaXQgcmV0dXJucyBhbiBvYmplY3QgYW5kIHRoaXMgbWV0aG9kIGlzIG5vdCBleGVjdXRlZCkKCQlfX2RldGFpbHNfcmVtbw=="
},
{
"key": "jquery.dataTables.js?4?3?2",
"type": "binary",
"value": "base64:dmUoIHRoaXMgKTsKCQlyZXR1cm4gdGhpczsKCX0gKTsKCQoJCglfYXBpX3JlZ2lzdGVyKCBfY2hpbGRfb2JqKycuaXNTaG93bigpJywgZnVuY3Rpb24gKCkgewoJCXZhciBjdHggPSB0aGlzLmNvbnRleHQ7CgkKCQlpZiAoIGN0eC5sZW5ndGggJiYgdGhpcy5sZW5ndGggKSB7CgkJCS8vIF9kZXRhaWxzU2hvd24gYXMgZmFsc2Ugb3IgdW5kZWZpbmVkIHdpbGwgZmFsbCB0aHJvdWdoIHRvIHJldHVybiBmYWxzZQoJCQlyZXR1cm4gY3R4WzBdLmFvRGF0YVsgdGhpc1swXSBdLl9kZXRhaWxzU2hvdyB8fCBmYWxzZTsKCQl9CgkJcmV0dXJuIGZhbHNlOwoJfSApOwoJCgkKCQoJLyogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqCgkgKiBDb2x1bW5zCgkgKgoJICoge2ludGVnZXJ9ICAgICAgICAgICAtIGNvbHVtbiBpbmRleCAoPj0wIGNvdW50IGZyb20gbGVmdCwgPDAgY291bnQgZnJvbSByaWdodCkKCSAqICJ7aW50ZWdlcn06dmlzSWR4IiAgLSB2aXNpYmxlIGNvbHVtbiBpbmRleCAoaS5lLiB0cmFuc2xhdGUgdG8gY29sdW1uIGluZGV4KSAgKD49MCBjb3VudCBmcm9tIGxlZnQsIDwwIGNvdW50IGZyb20gcmlnaHQpCgkgKiAie2ludGVnZXJ9OnZpc2libGUiIC0gYWxpYXMgZm9yIHtpbnRlZ2VyfTp2aXNJZHggICg+PTAgY291bnQgZnJvbSBsZWZ0LCA8MCBjb3VudCBmcm9tIHJpZ2h0KQoJICogIntzdHJpbmd9Om5hbWUiICAgICAtIGNvbHVtbiBuYW1lCgkgKiAie3N0cmluZ30iICAgICAgICAgIC0galF1ZXJ5IHNlbGVjdG9yIG9uIGNvbHVtbiBoZWFkZXIgbm9kZXMKCSAqCgkgKi8KCQoJLy8gY2FuIGJlIGFuIGFycmF5IG9mIHRoZXNlIGl0ZW1zLCBjb21tYSBzZXBhcmF0ZWQgbGlzdCwgb3IgYW4gYXJyYXkgb2YgY29tbWEKCS8vIHNlcGFyYXRlZCBsaXN0cwoJCgl2YXIgX19yZV9jb2x1bW5fc2VsZWN0b3IgPSAvXihbXjpdKyk6KG5hbWV8dmlzSWR4fHZpc2libGUpJC87CgkKCQoJLy8gcjEgYW5kIHIyIGFyZSByZWR1bmRhbnQgLSBidXQgaXQgbWVhbnMgdGhhdCB0aGUgcGFyYW1ldGVycyBtYXRjaCBmb3IgdGhlCgkvLyBpdGVyYXRvciBjYWxsYmFjayBpbiBjb2x1bW5zKCkuZGF0YSgpCgl2YXIgX19jb2x1bW5EYXRhID0gZnVuY3Rpb24gKCBzZXR0aW5ncywgY29sdW1uLCByMSwgcjIsIHJvd3MgKSB7CgkJdmFyIGEgPSBbXTsKCQlmb3IgKCB2YXIgcm93PTAsIGllbj1yb3dzLmxlbmd0aCA7IHJvdzxpZW4gOyByb3crKyApIHsKCQkJYS5wdXNoKCBfZm5HZXRDZWxsRGF0YSggc2V0dGluZ3MsIHJvd3Nbcm93XSwgY29sdW1uICkgKTsKCQl9CgkJcmV0dXJuIGE7Cgl9OwoJCgkKCXZhciBfX2NvbHVtbl9zZWxlY3RvciA9IGZ1bmN0aW9uICggc2V0dGluZ3MsIHNlbGVjdG9yLCBvcHRzICkKCXsKCQl2YXIKCQkJY29sdW1ucyA9IHNldHRpbmdzLmFvQ29sdW1ucywKCQkJbmFtZXMgPSBfcGx1Y2soIGNvbHVtbnMsICdzTmFtZScgKSwKCQkJbm9kZXMgPSBfcGx1Y2soIGNvbHVtbnMsICduVGgnICk7CgkKCQl2YXIgcnVuID0gZnVuY3Rpb24gKCBzICkgewoJCQl2YXIgc2VsSW50ID0gX2ludFZhbCggcyApOwoJCgkJCS8vIFNlbGVjdG9yIC0gYWxsCgkJCWlmICggcyA9PT0gJycgKSB7CgkJCQlyZXR1cm4gX3JhbmdlKCBjb2x1bW5zLmxlbmd0aCApOwoJCQl9CgkKCQkJLy8gU2VsZWN0b3IgLSBpbmRleAoJCQlpZiAoIHNlbEludCAhPT0gbnVsbCApIHsKCQkJCXJldHVybiBbIHNlbEludCA+PSAwID8KCQkJCQlzZWxJbnQgOiAvLyBDb3VudCBmcm9tIGxlZnQKCQkJCQljb2x1bW5zLmxlbmd0aCArIHNlbEludCAvLyBDb3VudCBmcm9tIHJpZ2h0ICgrIGJlY2F1c2UgaXRzIGEgbmVnYXRpdmUgdmFsdWUpCgkJCQldOwoJCQl9CgkKCQkJLy8gU2VsZWN0b3IgPSBmdW5jdGlvbgoJCQlpZiAoIHR5cGVvZiBzID09PSAnZnVuY3Rpb24nICkgewoJCQkJdmFyIHJvd3MgPSBfc2VsZWN0b3Jfcm93X2luZGV4ZXMoIHNldHRpbmdzLCBvcHRzICk7CgkKCQkJCXJldHVybiAkLm1hcCggY29sdW1ucywgZnVuY3Rpb24gKGNvbCwgaWR4KSB7CgkJCQkJcmV0dXJuIHMoCgkJCQkJCQlpZHgsCgkJCQkJCQlfX2NvbHVtbkRhdGEoIHNldHRpbmdzLCBpZHgsIDAsIDAsIHJvd3MgKSwKCQkJCQkJCW5vZGVzWyBpZHggXQoJCQkJCQkpID8gaWR4IDogbnVsbDsKCQkJCX0gKTsKCQkJfQoJCgkJCS8vIGpRdWVyeSBvciBzdHJpbmcgc2VsZWN0b3IKCQkJdmFyIG1hdGNoID0gdHlwZW9mIHMgPT09ICdzdHJpbmcnID8KCQkJCXMubWF0Y2goIF9fcmVfY29sdW1uX3NlbGVjdG9yICkgOgoJCQkJJyc7CgkKCQkJaWYgKCBtYXRjaCApIHsKCQkJCXN3aXRjaCggbWF0Y2hbMl0gKSB7CgkJCQkJY2FzZSAndmlzSWR4JzoKCQkJCQljYXNlICd2aXNpYmxlJzoKCQkJCQkJdmFyIGlkeCA9IHBhcnNlSW50KCBtYXRjaFsxXSwgMTAgKTsKCQkJCQkJLy8gVmlzaWJsZSBpbmRleCBnaXZlbiwgY29udmVydCB0byBjb2x1bW4gaW5kZXgKCQkJCQkJaWYgKCBpZHggPCAwICkgewoJCQkJCQkJLy8gQ291bnRpbmcgZnJvbSB0aGUgcmlnaHQKCQkJCQkJCXZhciB2aXNDb2x1bW5zID0gJC5tYXAoIGNvbHVtbnMsIGZ1bmN0aW9uIChjb2wsaSkgewoJCQkJCQkJCXJldHVybiBjb2wuYlZpc2libGUgPyBpIDogbnVsbDsKCQkJCQkJCX0gKTsKCQkJCQkJCXJldHVybiBbIHZpc0NvbHVtbnNbIHZpc0NvbHVtbnMubGVuZ3RoICsgaWR4IF0gXTsKCQkJCQkJfQoJCQkJCQkvLyBDb3VudGluZyBmcm9tIHRoZSBsZWZ0CgkJCQkJCXJldHVybiBbIF9mblZpc2libGVUb0NvbHVtbkluZGV4KCBzZXR0aW5ncywgaWR4ICkgXTsKCQoJCQkJCWNhc2UgJ25hbWUnOgoJCQkJCQkvLyBtYXRjaCBieSBuYW1lLiBgbmFtZXNgIGlzIGNvbHVtbiBpbmRleCBjb21wbGV0ZSBhbmQgaW4gb3JkZXIKCQkJCQkJcmV0dXJuICQubWFwKCBuYW1lcywgZnVuY3Rpb24gKG5hbWUsIGkpIHsKCQkJCQkJCXJldHVybiBuYW1lID09PSBtYXRjaFsxXSA/IGkgOiBudWxsOwoJCQkJCQl9ICk7CgkKCQkJCQlkZWZhdWx0OgoJCQkJCQlyZXR1cm4gW107CgkJCQl9CgkJCX0KCQoJCQkvLyBDZWxsIGluIHRoZSB0YWJsZSBib2R5CgkJCWlmICggcy5ub2RlTmFtZSAmJiBzLl9EVF9DZWxsSW5kZXggKSB7CgkJCQlyZXR1cm4gWyBzLl9EVF9DZWxsSW5kZXguY29sdW1uIF07CgkJCX0KCQoJCQkvLyBqUXVlcnkgc2VsZWN0b3Igb24gdGhlIFRIIGVsZW1lbnRzIGZvciB0aGUgY29sdW1ucwoJCQl2YXIganFSZXN1bHQgPSAkKCBub2RlcyApCgkJCQkuZmlsdGVyKCBzICkKCQkJCS5tYXAoIGZ1bmN0aW9uICgpIHsKCQkJCQlyZXR1cm4gJC5pbkFycmF5KCB0aGlzLCBub2RlcyApOyAvLyBgbm9kZXNgIGlzIGNvbHVtbiBpbmRleCBjb21wbGV0ZSBhbmQgaW4gb3JkZXIKCQkJCX0gKQoJCQkJLnRvQXJyYXkoKTsKCQoJCQlpZiAoIGpxUmVzdWx0Lmxlbmd0aCB8fCAhIHMubm9kZU5hbWUgKSB7CgkJCQlyZXR1cm4ganFSZXN1bHQ7CgkJCX0KCQoJCQkvLyBPdGhlcndpc2UgYSBub2RlIHdoaWNoIG1pZ2h0IGhhdmUgYSBgZHQtY29sdW1uYCBkYXRhIGF0dHJpYnV0ZSwgb3IgYmUKCQkJLy8gYSBjaGlsZCBvciBzdWNoIGFuIGVsZW1lbnQKCQkJdmFyIGhvc3QgPSAkKHMpLmNsb3Nlc3QoJypbZGF0YS1kdC1jb2x1bW5dJyk7CgkJCXJldHVybiBob3N0Lmxlbmd0aCA/CgkJCQlbIGhvc3QuZGF0YSgnZHQtY29sdW1uJykgXSA6CgkJCQlbXTsKCQl9OwoJCgkJcmV0dXJuIF9zZWxlY3Rvcl9ydW4oICdjb2x1bW4nLCBzZWxlY3RvciwgcnVuLCBzZXR0aW5ncywgb3B0cyApOwoJfTsKCQoJCgl2YXIgX19zZXRDb2x1bW5WaXMgPSBmdW5jdGlvbiAoIHNldHRpbmdzLCBjb2x1bW4sIHZpcyApIHsKCQl2YXIKCQkJY29scyA9IHNldHRpbmdzLmFvQ29sdW1ucywKCQkJY29sICA9IGNvbHNbIGNvbHVtbiBdLAoJCQlkYXRhID0gc2V0dGluZ3MuYW9EYXRhLAoJCQlyb3csIGNlbGxzLCBpLCBpZW4sIHRyOwoJCgkJLy8gR2V0CgkJaWYgKCB2aXMgPT09IHVuZGVmaW5lZCApIHsKCQkJcmV0dXJuIGNvbC5iVmlzaWJsZTsKCQl9CgkKCQkvLyBTZXQKCQkvLyBObyBjaGFuZ2UKCQlpZiAoIGNvbC5iVmlzaWJsZSA9PT0gdmlzICkgewoJCQlyZXR1cm47CgkJfQoJCgkJaWYgKCB2aXMgKSB7CgkJCS8vIEluc2VydCBjb2x1bW4KCQkJLy8gTmVlZCB0byBkZWNpZGUgaWYgd2Ugc2hvdWxkIHVzZSBhcHBlbmRDaGlsZCBvciBpbnNlcnRCZWZvcmUKCQkJdmFyIGluc2VydEJlZm9yZSA9ICQuaW5BcnJheSggdHJ1ZSwgX3BsdWNrKGNvbHMsICdiVmlzaWJsZScpLCBjb2x1bW4rMSApOwoJCgkJCWZvciAoIGk9MCwgaWVuPWRhdGEubGVuZ3RoIDsgaTxpZW4gOyBpKysgKSB7CgkJCQl0ciA9IGRhdGFbaV0ublRyOwoJCQkJY2VsbHMgPSBkYXRhW2ldLmFuQ2VsbHM7CgkKCQkJCWlmICggdHIgKSB7CgkJCQkJLy8gaW5zZXJ0QmVmb3JlIGNhbiBhY3QgbGlrZSBhcHBlbmRDaGlsZCBpZiAybmQgYXJnIGlzIG51bGwKCQkJCQl0ci5pbnNlcnRCZWZvcmUoIGNlbGxzWyBjb2x1bW4gXSwgY2VsbHNbIGluc2VydEJlZm9yZSBdIHx8IG51bGwgKTsKCQkJCX0KCQkJfQoJCX0KCQllbHNlIHsKCQkJLy8gUmVtb3ZlIGNvbHVtbgoJCQkkKCBfcGx1Y2soIHNldHRpbmdzLmFvRGF0YSwgJ2FuQ2VsbHMnLCBjb2x1bW4gKSApLmRldGFjaCgpOwoJCX0KCQoJCS8vIENvbW1vbiBhY3Rpb25zCgkJY29sLmJWaXNpYmxlID0gdmlzOwoJCV9mbkRyYXdIZWFkKCBzZXR0aW5ncywgc2V0dGluZ3MuYW9IZWFkZXIgKTsKCQlfZm5EcmF3SGVhZCggc2V0dGluZ3MsIHNldHRpbmdzLmFvRm9vdGVyICk7CgkKCQkvLyBVcGRhdGUgY29sc3BhbiBmb3Igbm8gcmVjb3JkcyBkaXNwbGF5LiBDaGlsZCByb3dzIGFuZCBleHRlbnNpb25zIHdpbGwgdXNlIHRoZWlyIG93bgoJCS8vIGxpc3RlbmVycyB0byBkbyB0aGlzIC0gb25seSBuZWVkIHRvIHVwZGF0ZSB0aGUgZW1wdHkgdGFibGUgaXRlbSBoZXJlCgkJaWYgKCAhIHNldHRpbmdzLmFpRGlzcGxheS5sZW5ndGggKSB7CgkJCSQoc2V0dGluZ3MublRCb2R5KS5maW5kKCd0ZFtjb2xzcGFuXScpLmF0dHIoJ2NvbHNwYW4nLCBfZm5WaXNibGVDb2x1bW5zKHNldHRpbmdzKSk7CgkJfQoJCgkJX2ZuU2F2ZVN0YXRlKCBzZXR0aW5ncyApOwoJfTsKCQoJCglfYXBpX3JlZ2lzdGVyKCAnY29sdW1ucygpJywgZnVuY3Rpb24gKCBzZWxlY3Rvciwgb3B0cyApIHsKCQkvLyBhcmd1bWVudCBzaGlmdGluZwoJCWlmICggc2VsZWN0b3IgPT09IHVuZGVmaW5lZCApIHsKCQkJc2VsZWN0b3IgPSAnJzsKCQl9CgkJZWxzZSBpZiAoICQuaXNQbGFpbk9iamVjdCggc2VsZWN0b3IgKSApIHsKCQkJb3B0cyA9IHNlbGVjdG9yOwoJCQlzZWxlY3RvciA9ICcnOwoJCX0KCQoJCW9wdHMgPSBfc2VsZWN0b3Jfb3B0cyggb3B0cyApOwoJCgkJdmFyIGluc3QgPSB0aGlzLml0ZXJhdG9yKCAndGFibGUnLCBmdW5jdGlvbiAoIHNldHRpbmdzICkgewoJCQlyZXR1cm4gX19jb2x1bW5fc2VsZWN0b3IoIHNldHRpbmdzLCBzZWxlY3Rvciwgb3B0cyApOwoJCX0sIDEgKTsKCQoJCS8vIFdhbnQgYXJndW1lbnQgc2hpZnRpbmcgaGVyZSBhbmQgaW4gX3Jvd19zZWxlY3Rvcj8KCQlpbnN0LnNlbGVjdG9yLmNvbHMgPSBzZWxlY3RvcjsKCQlpbnN0LnNlbGVjdG9yLm9wdHMgPSBvcHRzOwoJCgkJcmV0dXJuIGluc3Q7Cgl9ICk7CgkKCV9hcGlfcmVnaXN0ZXJQbHVyYWwoICdjb2x1bW5zKCkuaGVhZGVyKCknLCAnY29sdW1uKCkuaGVhZGVyKCknLCBmdW5jdGlvbiAoIHNlbGVjdG9yLCBvcHRzICkgewoJCXJldHVybiB0aGlzLml0ZXJhdG9yKCAnY29sdW1uJywgZnVuY3Rpb24gKCBzZXR0aW5ncywgY29sdW1uICkgewoJCQlyZXR1cm4gc2V0dGluZ3MuYW9Db2x1bW5zW2NvbHVtbl0ublRoOwoJCX0sIDEgKTsKCX0gKTsKCQoJX2FwaV9yZWdpc3RlclBsdXJhbCggJ2NvbHVtbnMoKS5mb290ZXIoKScsICdjb2x1bW4oKS5mb290ZXIoKScsIGZ1bmN0aW9uICggc2VsZWN0b3IsIG9wdHMgKSB7CgkJcmV0dXJuIHRoaXMuaXRlcmF0b3IoICdjb2x1bW4nLCBmdW5jdGlvbiAoIHNldHRpbmdzLCBjb2x1bW4gKSB7CgkJCXJldHVybiBzZXR0aW5ncy5hb0NvbHVtbnNbY29sdW1uXS5uVGY7CgkJfSwgMSApOwoJfSApOwoJCglfYXBpX3JlZ2lzdGVyUGx1cmFsKCAnY29sdW1ucygpLmRhdGEoKScsICdjb2x1bW4oKS5kYXRhKCknLCBmdW5jdGlvbiAoKSB7CgkJcmV0dXJuIHRoaXMuaXRlcmF0b3IoICdjb2x1bW4tcm93cycsIF9fY29sdW1uRGF0YSwgMSApOwoJfSApOwoJCglfYXBpX3JlZ2lzdGVyUGx1cmFsKCAnY29sdW1ucygpLmRhdGFTcmMoKScsICdjb2x1bW4oKS5kYXRhU3JjKCknLCBmdW5jdGlvbiAoKSB7CgkJcmV0dXJuIHRoaXMuaXRlcmF0b3IoICdjb2x1bW4nLCBmdW5jdGlvbiAoIHNldHRpbmdzLCBjb2x1bW4gKSB7CgkJCXJldHVybiBzZXR0aW5ncy5hb0NvbHVtbnNbY29sdW1uXS5tRGF0YTsKCQl9LCAxICk7Cgl9ICk7CgkKCV9hcGlfcmVnaXN0ZXJQbHVyYWwoICdjb2x1bW5zKCkuY2FjaGUoKScsICdjb2x1bW4oKS5jYWNoZSgpJywgZnVuY3Rpb24gKCB0eXBlICkgewoJCXJldHVybiB0aGlzLml0ZXJhdG9yKCAnY29sdW1uLXJvd3MnLCBmdW5jdGlvbiAoIHNldHRpbmdzLCBjb2x1bW4sIGksIGosIHJvd3MgKSB7CgkJCXJldHVybiBfcGx1Y2tfb3JkZXIoIHNldHRpbmdzLmFvRGF0YSwgcm93cywKCQkJCXR5cGUgPT09ICdzZWFyY2gnID8gJ19hRmlsdGVyRGF0YScgOiAnX2FTb3J0RGF0YScsIGNvbHVtbgoJCQkpOwoJCX0sIDEgKTsKCX0gKTsKCQoJX2FwaV9yZWdpc3RlclBsdXJhbCggJ2NvbHVtbnMoKS5ub2RlcygpJywgJ2NvbHVtbigpLm5vZGVzKCknLCBmdW5jdGlvbiAoKSB7CgkJcmV0dXJuIHRoaXMuaXRlcmF0b3IoICdjb2x1bW4tcm93cycsIGZ1bmN0aW9uICggc2V0dGluZ3MsIGNvbHVtbiwgaSwgaiwgcm93cyApIHsKCQkJcmV0dXJuIF9wbHVja19vcmRlciggc2V0dGluZ3MuYW9EYXRhLCByb3dzLCAnYW5DZWxscycsIGNvbHVtbiApIDsKCQl9LCAxICk7Cgl9ICk7CgkKCV9hcGlfcmVnaXN0ZXJQbHVyYWwoICdjb2x1bW5zKCkudmlzaWJsZSgpJywgJ2NvbHVtbigpLnZpc2libGUoKScsIGZ1bmN0aW9uICggdmlzLCBjYWxjICkgewoJCXZhciByZXQgPSB0aGlzLml0ZXJhdG9yKCAnY29sdW1uJywgZnVuY3Rpb24gKCBzZXR0aW5ncywgY29sdW1uICkgewoJCQlpZiAoIHZpcyA9PT0gdW5kZWZpbmVkICkgewoJCQkJcmV0dXJuIHNldHRpbmdzLmFvQ29sdW1uc1sgY29sdW1uIF0uYlZpc2libGU7CgkJCX0gLy8gZWxzZQoJCQlfX3NldENvbHVtblZpcyggc2V0dGluZ3MsIGNvbHVtbiwgdmlzICk7CgkJfSApOwoJCgkJLy8gR3JvdXAgdGhlIGNvbHVtbiB2aXNpYmlsaXR5IGNoYW5nZXMKCQlpZiAoIHZpcyAhPT0gdW5kZWZpbmVkICkgewoJCQkvLyBTZWNvbmQgbG9vcCBvbmNlIHRoZSBmaXJzdCBpcyBkb25lIGZvciBldmVudHMKCQkJdGhpcy5pdGVyYXRvciggJ2NvbHVtbicsIGZ1bmN0aW9uICggc2V0dGluZ3MsIGNvbHVtbiApIHsKCQkJCV9mbkNhbGxiYWNrRmlyZSggc2V0dGluZ3MsIG51bGwsICdjb2x1bW4tdmlzaWJpbGl0eScsIFtzZXR0aW5ncywgY29sdW1uLCB2aXMsIGNhbGNdICk7CgkJCX0gKTsKCQoJCQlpZiAoIGNhbGMgPT09IHVuZGVmaW5lZCB8fCBjYWxjICkgewoJCQkJdGhpcy5jb2x1bW5zLmFkanVzdCgpOwoJCQl9CgkJfQoJCgkJcmV0dXJuIHJldDsKCX0gKTsKCQoJX2FwaV9yZWdpc3RlclBsdXJhbCggJ2NvbHVtbnMoKS5pbmRleGVzKCknLCAnY29sdW1uKCkuaW5kZXgoKScsIGZ1bmN0aW9uICggdHlwZSApIHsKCQlyZXR1cm4gdGhpcy5pdGVyYXRvciggJ2NvbHVtbicsIGZ1bmN0aW9uICggc2V0dGluZ3MsIGNvbHVtbiApIHsKCQkJcmV0dXJuIHR5cGUgPT09ICd2aXNpYmxlJyA/CgkJCQlfZm5Db2x1bW5JbmRleFRvVmlzaWJsZSggc2V0dGluZ3MsIGNvbHVtbiApIDoKCQkJCWNvbHVtbjsKCQl9LCAxICk7Cgl9ICk7CgkKCV9hcGlfcmVnaXN0ZXIoICdjb2x1bW5zLmFkanVzdCgpJywgZnVuY3Rpb24gKCkgewoJCXJldHVybiB0aGlzLml0ZXJhdG9yKCAndGFibGUnLCBmdW5jdGlvbiAoIHNldHRpbmdzICkgewoJCQlfZm5BZGp1c3RDb2x1bW5TaXppbmcoIHNldHRpbmdzICk7CgkJfSwgMSApOwoJfSApOwoJCglfYXBpX3JlZ2lzdGVyKCAnY29sdW1uLmluZGV4KCknLCBmdW5jdGlvbiAoIHR5cGUsIGlkeCApIHsKCQlpZiAoIHRoaXMuY29udGV4dC5sZW5ndGggIT09IDAgKSB7CgkJCXZhciBjdHggPSB0aGlzLmNvbnRleHRbMF07CgkKCQkJaWYgKCB0eXBlID09PSAnZnJvbVZpc2libGUnIHx8IHR5cGUgPT09ICd0b0RhdGEnICkgewoJCQkJcmV0dXJuIF9mblZpc2libGVUb0NvbHVtbkluZGV4KCBjdHgsIGlkeCApOwoJCQl9CgkJCWVsc2UgaWYgKCB0eXBlID09PSAnZnJvbURhdGEnIHx8IHR5cGUgPT09ICd0b1Zpc2libGUnICkgewoJCQkJcmV0dXJuIF9mbkNvbHVtbkluZGV4VG9WaXNpYmxlKCBjdHgsIGlkeCApOwoJCQl9CgkJfQoJfSApOwoJCglfYXBpX3JlZ2lzdGVyKCAnY29sdW1uKCknLCBmdW5jdGlvbiAoIHNlbGVjdG9yLCBvcHRzICkgewoJCXJldHVybiBfc2VsZWN0b3JfZmlyc3QoIHRoaXMuY29sdW1ucyggc2VsZWN0b3IsIG9wdHMgKSApOwoJfSApOwoJCgkKCQoJdmFyIF9fY2VsbF9zZWxlY3RvciA9IGZ1bmN0aW9uICggc2V0dGluZ3MsIHNlbGVjdG9yLCBvcHRzICkKCXsKCQl2YXIgZGF0YSA9IHNldHRpbmdzLmFvRGF0YTsKCQl2YXIgcm93cyA9IF9zZWxlY3Rvcl9yb3dfaW5kZXhlcyggc2V0dGluZ3MsIG9wdHMgKTsKCQl2YXIgY2VsbHMgPSBfcmVtb3ZlRW1wdHkoIF9wbHVja19vcmRlciggZGF0YSwgcm93cywgJ2FuQ2VsbHMnICkgKTsKCQl2YXIgYWxsQ2VsbHMgPSAkKCBbXS5jb25jYXQuYXBwbHkoW10sIGNlbGxzKSApOwoJCXZhciByb3c7CgkJdmFyIGNvbHVtbnMgPSBzZXR0aW5ncy5hb0NvbHVtbnMubGVuZ3RoOwoJCXZhciBhLCBpLCBpZW4sIGosIG8sIGhvc3Q7CgkKCQl2YXIgcnVuID0gZnVuY3Rpb24gKCBzICkgewoJCQl2YXIgZm5TZWxlY3RvciA9IHR5cGVvZiBzID09PSAnZnVuY3Rpb24nOwoJCgkJCWlmICggcyA9PT0gbnVsbCB8fCBzID09PSB1bmRlZmluZWQgfHwgZm5TZWxlY3RvciApIHsKCQkJCS8vIEFsbCBjZWxscyBhbmQgZnVuY3Rpb24gc2VsZWN0b3JzCgkJCQlhID0gW107CgkKCQkJCWZvciAoIGk9MCwgaWVuPXJvd3MubGVuZ3RoIDsgaTxpZW4gOyBpKysgKSB7CgkJCQkJcm93ID0gcm93c1tpXTsKCQoJCQkJCWZvciAoIGo9MCA7IGo8Y29sdW1ucyA7IGorKyApIHsKCQkJCQkJbyA9IHsKCQkJCQkJCXJvdzogcm93LAoJCQkJCQkJY29sdW1uOiBqCgkJCQkJCX07CgkKCQkJCQkJaWYgKCBmblNlbGVjdG9yICkgewoJCQkJCQkJLy8gU2VsZWN0b3IgLSBmdW5jdGlvbgoJCQkJCQkJaG9zdCA9IGRhdGFbIHJvdyBdOwoJCgkJCQkJCQlpZiAoIHMoIG8sIF9mbkdldENlbGxEYXRhKHNldHRpbmdzLCByb3csIGopLCBob3N0LmFuQ2VsbHMgPyBob3N0LmFuQ2VsbHNbal0gOiBudWxsICkgKSB7CgkJCQkJCQkJYS5wdXNoKCBvICk7CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQkJZWxzZSB7CgkJCQkJCQkvLyBTZWxlY3RvciAtIGFsbAoJCQkJCQkJYS5wdXNoKCBvICk7CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkKCQkJCXJldHVybiBhOwoJCQl9CgkJCQoJCQkvLyBTZWxlY3RvciAtIGluZGV4CgkJCWlmICggJC5pc1BsYWluT2JqZWN0KCBzICkgKSB7CgkJCQkvLyBWYWxpZCBjZWxsIGluZGV4IGFuZCBpdHMgaW4gdGhlIGFycmF5IG9mIHNlbGVjdGFibGUgcm93cwoJCQkJcmV0dXJuIHMuY29sdW1uICE9PSB1bmRlZmluZWQgJiYgcy5yb3cgIT09IHVuZGVmaW5lZCAmJiAkLmluQXJyYXkoIHMucm93LCByb3dzICkgIT09IC0xID8KCQkJCQlbc10gOgoJCQkJCVtdOwoJCQl9CgkKCQkJLy8gU2VsZWN0b3IgLSBqUXVlcnkgZmlsdGVyZWQgY2VsbHMKCQkJdmFyIGpxUmVzdWx0ID0gYWxsQ2VsbHMKCQkJCS5maWx0ZXIoIHMgKQoJCQkJLm1hcCggZnVuY3Rpb24gKGksIGVsKSB7CgkJCQkJcmV0dXJuIHsgLy8gdXNlIGEgbmV3IG9iamVjdCwgaW4gY2FzZSBzb21lb25lIGNoYW5nZXMgdGhlIHZhbHVlcwoJCQkJCQlyb3c6ICAgIGVsLl9EVF9DZWxsSW5kZXgucm93LAoJCQkJCQljb2x1bW46IGVsLl9EVF9DZWxsSW5kZXguY29sdW1uCgkgCQkJCX07CgkJCQl9ICkKCQkJCS50b0FycmF5KCk7CgkKCQkJaWYgKCBqcVJlc3VsdC5sZW5ndGggfHwgISBzLm5vZGVOYW1lICkgewoJCQkJcmV0dXJuIGpxUmVzdWx0OwoJCQl9CgkKCQkJLy8gT3RoZXJ3aXNlIHRoZSBzZWxlY3RvciBpcyBhIG5vZGUsIGFuZCB0aGVyZSBpcyBvbmUgbGFzdCBvcHRpb24gLSB0aGUKCQkJLy8gZWxlbWVudCBtaWdodCBiZSBhIGNoaWxkIG9mIGFuIGVsZW1lbnQgd2hpY2ggaGFzIGR0LXJvdyBhbmQgZHQtY29sdW1uCgkJCS8vIGRhdGEgYXR0cmlidXRlcwoJCQlob3N0ID0gJChzKS5jbG9zZXN0KCcqW2RhdGEtZHQtcm93XScpOwoJCQlyZXR1cm4gaG9zdC5sZW5ndGggPwoJCQkJWyB7CgkJCQkJcm93OiBob3N0LmRhdGEoJ2R0LXJvdycpLAoJCQkJCWNvbHVtbjogaG9zdC5kYXRhKCdkdC1jb2x1bW4nKQoJCQkJfSBdIDoKCQkJCVtdOwoJCX07CgkKCQlyZXR1cm4gX3NlbGVjdG9yX3J1biggJ2NlbGwnLCBzZWxlY3RvciwgcnVuLCBzZXR0aW5ncywgb3B0cyApOwoJfTsKCQoJCgkKCQoJX2FwaV9yZWdpc3RlciggJ2NlbGxzKCknLCBmdW5jdGlvbiAoIHJvd1NlbGVjdG9yLCBjb2x1bW5TZWxlY3Rvciwgb3B0cyApIHsKCQkvLyBBcmd1bWVudCBzaGlmdGluZwoJCWlmICggJC5pc1BsYWluT2JqZWN0KCByb3dTZWxlY3RvciApICkgewoJCQkvLyBJbmRleGVzCgkJCWlmICggcm93U2VsZWN0b3Iucm93ID09PSB1bmRlZmluZWQgKSB7CgkJCQkvLyBTZWxlY3RvciBvcHRpb25zIGluIGZpcnN0IHBhcmFtZXRlcgoJCQkJb3B0cyA9IHJvd1NlbGVjdG9yOwoJCQkJcm93U2VsZWN0b3IgPSBudWxsOwoJCQl9CgkJCWVsc2UgewoJCQkJLy8gQ2VsbCBpbmRleCBvYmplY3RzIGluIGZpcnN0IHBhcmFtZXRlcgoJCQkJb3B0cyA9IGNvbHVtblNlbGVjdG9yOwoJCQkJY29sdW1uU2VsZWN0b3IgPSBudWxsOwoJCQl9CgkJfQoJCWlmICggJC5pc1BsYWluT2JqZWN0KCBjb2x1bW5TZWxlY3RvciApICkgewoJCQlvcHRzID0gY29sdW1uU2VsZWN0b3I7CgkJCWNvbHVtblNlbGVjdG9yID0gbnVsbDsKCQl9CgkKCQkvLyBDZWxsIHNlbGVjdG9yCgkJaWYgKCBjb2x1bW5TZWxlY3RvciA9PT0gbnVsbCB8fCBjb2x1bW5TZWxlY3RvciA9PT0gdW5kZWZpbmVkICkgewoJCQlyZXR1cm4gdGhpcy5pdGVyYXRvciggJ3RhYmxlJywgZnVuY3Rpb24gKCBzZXR0aW5ncyApIHsKCQkJCXJldHVybiBfX2NlbGxfc2VsZWN0b3IoIHNldHRpbmdzLCByb3dTZWxlY3RvciwgX3NlbGVjdG9yX29wdHMoIG9wdHMgKSApOwoJCQl9ICk7CgkJfQoJCgkJLy8gUm93ICsgY29sdW1uIHNlbGVjdG9yCgkJdmFyIGNvbHVtbnMgPSB0aGlzLmNvbHVtbnMoIGNvbHVtblNlbGVjdG9yICk7CgkJdmFyIHJvd3MgPSB0aGlzLnJvd3MoIHJvd1NlbGVjdG9yICk7CgkJdmFyIGEsIGksIGllbiwgaiwgamVuOwoJCgkJdGhpcy5pdGVyYXRvciggJ3RhYmxlJywgZnVuY3Rpb24gKCBzZXR0aW5ncywgaWR4ICkgewoJCQlhID0gW107CgkKCQkJZm9yICggaT0wLCBpZW49cm93c1tpZHhdLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCQkJZm9yICggaj0wLCBqZW49Y29sdW1uc1tpZHhdLmxlbmd0aCA7IGo8amVuIDsgaisrICkgewoJCQkJCWEucHVzaCggewoJCQkJCQlyb3c6ICAgIHJvd3NbaWR4XVtpXSwKCQkJCQkJY29sdW1uOiBjb2x1bW5zW2lkeF1bal0KCQkJCQl9ICk7CgkJCQl9CgkJCX0KCQl9LCAxICk7CgkKCSAgICAvLyBOb3cgcGFzcyB0aHJvdWdoIHRoZSBjZWxsIHNlbGVjdG9yIGZvciBvcHRpb25zCgkgICAgdmFyIGNlbGxzID0gdGhpcy5jZWxscyggYSwgb3B0cyApOwoJCgkJJC5leHRlbmQoIGNlbGxzLnNlbGVjdG9yLCB7CgkJCWNvbHM6IGNvbHVtblNlbGVjdG9yLAoJCQlyb3dzOiByb3dTZWxlY3RvciwKCQkJb3B0czogb3B0cwoJCX0gKTsKCQoJCXJldHVybiBjZWxsczsKCX0gKTsKCQoJCglfYXBpX3JlZ2lzdGVyUGx1cmFsKCAnY2VsbHMoKS5ub2RlcygpJywgJ2NlbGwoKS5ub2RlKCknLCBmdW5jdGlvbiAoKSB7CgkJcmV0dXJuIHRoaXMuaXRlcmF0b3IoICdjZWxsJywgZnVuY3Rpb24gKCBzZXR0aW5ncywgcm93LCBjb2x1bW4gKSB7CgkJCXZhciBkYXRhID0gc2V0dGluZ3MuYW9EYXRhWyByb3cgXTsKCQoJCQlyZXR1cm4gZGF0YSAmJiBkYXRhLmFuQ2VsbHMgPwoJCQkJZGF0YS5hbkNlbGxzWyBjb2x1bW4gXSA6CgkJCQl1bmRlZmluZWQ7CgkJfSwgMSApOwoJfSApOwoJCgkKCV9hcGlfcmVnaXN0ZXIoICdjZWxscygpLmRhdGEoKScsIGZ1bmN0aW9uICgpIHsKCQlyZXR1cm4gdGhpcy5pdGVyYXRvciggJ2NlbGwnLCBmdW5jdGlvbiAoIHNldHRpbmdzLCByb3csIGNvbHVtbiApIHsKCQkJcmV0dXJuIF9mbkdldENlbGxEYXRhKCBzZXR0aW5ncywgcm93LCBjb2x1bW4gKTsKCQl9LCAxICk7Cgl9ICk7CgkKCQoJX2FwaV9yZWdpc3RlclBsdXJhbCggJ2NlbGxzKCkuY2FjaGUoKScsICdjZWxsKCkuY2FjaGUoKScsIGZ1bmN0aW9uICggdHlwZSApIHsKCQl0eXBlID0gdHlwZSA9PT0gJ3NlYXJjaCcgPyAnX2FGaWx0ZXJEYXRhJyA6ICdfYVNvcnREYXRhJzsKCQoJCXJldHVybiB0aGlzLml0ZXJhdG9yKCAnY2VsbCcsIGZ1bmN0aW9uICggc2V0dGluZ3MsIHJvdywgY29sdW1uICkgewoJCQlyZXR1cm4gc2V0dGluZ3MuYW9EYXRhWyByb3cgXVsgdHlwZSBdWyBjb2x1bW4gXTsKCQl9LCAxICk7Cgl9ICk7CgkKCQoJX2FwaV9yZWdpc3RlclBsdXJhbCggJ2NlbGxzKCkucmVuZGVyKCknLCAnY2VsbCgpLnJlbmRlcigpJywgZnVuY3Rpb24gKCB0eXBlICkgewoJCXJldHVybiB0aGlzLml0ZXJhdG9yKCAnY2VsbCcsIGZ1bmN0aW9uICggc2V0dGluZ3MsIHJvdywgY29sdW1uICkgewoJCQlyZXR1cm4gX2ZuR2V0Q2VsbERhdGEoIHNldHRpbmdzLCByb3csIGNvbHVtbiwgdHlwZSApOwoJCX0sIDEgKTsKCX0gKTsKCQoJCglfYXBpX3JlZ2lzdGVyUGx1cmFsKCAnY2VsbHMoKS5pbmRleGVzKCknLCAnY2VsbCgpLmluZGV4KCknLCBmdW5jdGlvbiAoKSB7CgkJcmV0dXJuIHRoaXMuaXRlcmF0b3IoICdjZWxsJywgZnVuY3Rpb24gKCBzZXR0aW5ncywgcm93LCBjb2x1bW4gKSB7CgkJCXJldHVybiB7CgkJCQlyb3c6IHJvdywKCQkJCWNvbHVtbjogY29sdW1uLAoJCQkJY29sdW1uVmlzaWJsZTogX2ZuQ29sdW1uSW5kZXhUb1Zpc2libGUoIHNldHRpbmdzLCBjb2x1bW4gKQoJCQl9OwoJCX0sIDEgKTsKCX0gKTsKCQoJCglfYXBpX3JlZ2lzdGVyUGx1cmFsKCAnY2VsbHMoKS5pbnZhbGlkYXRlKCknLCAnY2VsbCgpLmludmFsaWRhdGUoKScsIGZ1bmN0aW9uICggc3JjICkgewoJCXJldHVybiB0aGlzLml0ZXJhdG9yKCAnY2VsbCcsIGZ1bmN0aW9uICggc2V0dGluZ3MsIHJvdywgY29sdW1uICkgewoJCQlfZm5JbnZhbGlkYXRlKCBzZXR0aW5ncywgcm93LCBzcmMsIGNvbHVtbiApOwoJCX0gKTsKCX0gKTsKCQoJCgkKCV9hcGlfcmVnaXN0ZXIoICdjZWxsKCknLCBmdW5jdGlvbiAoIHJvd1NlbGVjdG9yLCBjb2x1bW5TZWxlY3Rvciwgb3B0cyApIHsKCQlyZXR1cm4gX3NlbGVjdG9yX2ZpcnN0KCB0aGlzLmNlbGxzKCByb3dTZWxlY3RvciwgY29sdW1uU2VsZWN0b3IsIG9wdHMgKSApOwoJfSApOwoJCgkKCV9hcGlfcmVnaXN0ZXIoICdjZWxsKCkuZGF0YSgpJywgZnVuY3Rpb24gKCBkYXRhICkgewoJCXZhciBjdHggPSB0aGlzLmNvbnRleHQ7CgkJdmFyIGNlbGwgPSB0aGlzWzBdOwoJCgkJaWYgKCBkYXRhID09PSB1bmRlZmluZWQgKSB7CgkJCS8vIEdldAoJCQlyZXR1cm4gY3R4Lmxlbmd0aCAmJiBjZWxsLmxlbmd0aCA/CgkJCQlfZm5HZXRDZWxsRGF0YSggY3R4WzBdLCBjZWxsWzBdLnJvdywgY2VsbFswXS5jb2x1bW4gKSA6CgkJCQl1bmRlZmluZWQ7CgkJfQoJCgkJLy8gU2V0CgkJX2ZuU2V0Q2VsbERhdGEoIGN0eFswXSwgY2VsbFswXS5yb3csIGNlbGxbMF0uY29sdW1uLCBkYXRhICk7CgkJX2ZuSW52YWxpZGF0ZSggY3R4WzBdLCBjZWxsWzBdLnJvdywgJ2RhdGEnLCBjZWxsWzBdLmNvbHVtbiApOwoJCgkJcmV0dXJuIHRoaXM7Cgl9ICk7CgkKCQoJCgkvKioKCSAqIEdldCBjdXJyZW50IG9yZGVyaW5nIChzb3J0aW5nKSB0aGF0IGhhcyBiZWVuIGFwcGxpZWQgdG8gdGhlIHRhYmxlLgoJICoKCSAqIEByZXR1cm5zIHthcnJheX0gMkQgYXJyYXkgY29udGFpbmluZyB0aGUgc29ydGluZyBpbmZvcm1hdGlvbiBmb3IgdGhlIGZpcnN0CgkgKiAgIHRhYmxlIGluIHRoZSBjdXJyZW50IGNvbnRleHQuIEVhY2ggZWxlbWVudCBpbiB0aGUgcGFyZW50IGFycmF5IHJlcHJlc2VudHMKCSAqICAgYSBjb2x1bW4gYmVpbmcgc29ydGVkIHVwb24gKGkuZS4gbXVsdGktc29ydGluZyB3aXRoIHR3byBjb2x1bW5zIHdvdWxkIGhhdmUKCSAqICAgMiBpbm5lciBhcnJheXMpLiBUaGUgaW5uZXIgYXJyYXlzIG1heSBoYXZlIDIgb3IgMyBlbGVtZW50cy4gVGhlIGZpcnN0IGlzCgkgKiAgIHRoZSBjb2x1bW4gaW5kZXggdGhhdCB0aGUgc29ydGluZyBjb25kaXRpb24gYXBwbGllcyB0bywgdGhlIHNlY29uZCBpcyB0aGUKCSAqICAgZGlyZWN0aW9uIG9mIHRoZSBzb3J0IChgZGVzY2Agb3IgYGFzY2ApIGFuZCwgb3B0aW9uYWxseSwgdGhlIHRoaXJkIGlzIHRoZQoJICogICBpbmRleCBvZiB0aGUgc29ydGluZyBvcmRlciBmcm9tIHRoZSBgY29sdW1uLnNvcnRpbmdgIGluaXRpYWxpc2F0aW9uIGFycmF5LgoJICovLyoqCgkgKiBTZXQgdGhlIG9yZGVyaW5nIGZvciB0aGUgdGFibGUuCgkgKgoJICogQHBhcmFtIHtpbnRlZ2VyfSBvcmRlciBDb2x1bW4gaW5kZXggdG8gc29ydCB1cG9uLgoJICogQHBhcmFtIHtzdHJpbmd9IGRpcmVjdGlvbiBEaXJlY3Rpb24gb2YgdGhlIHNvcnQgdG8gYmUgYXBwbGllZCAoYGFzY2Agb3IgYGRlc2NgKQoJICogQHJldHVybnMge0RhdGFUYWJsZXMuQXBpfSB0aGlzCgkgKi8vKioKCSAqIFNldCB0aGUgb3JkZXJpbmcgZm9yIHRoZSB0YWJsZS4KCSAqCgkgKiBAcGFyYW0ge2FycmF5fSBvcmRlciAxRCBhcnJheSBvZiBzb3J0aW5nIGluZm9ybWF0aW9uIHRvIGJlIGFwcGxpZWQuCgkgKiBAcGFyYW0ge2FycmF5fSBbLi4uXSBPcHRpb25hbCBhZGRpdGlvbmFsIHNvcnRpbmcgY29uZGl0aW9ucwoJICogQHJldHVybnMge0RhdGFUYWJsZXMuQXBpfSB0aGlzCgkgKi8vKioKCSAqIFNldCB0aGUgb3JkZXJpbmcgZm9yIHRoZSB0YWJsZS4KCSAqCgkgKiBAcGFyYW0ge2FycmF5fSBvcmRlciAyRCBhcnJheSBvZiBzb3J0aW5nIGluZm9ybWF0aW9uIHRvIGJlIGFwcGxpZWQuCgkgKiBAcmV0dXJucyB7RGF0YVRhYmxlcy5BcGl9IHRoaXMKCSAqLwoJX2FwaV9yZWdpc3RlciggJ29yZGVyKCknLCBmdW5jdGlvbiAoIG9yZGVyLCBkaXIgKSB7CgkJdmFyIGN0eCA9IHRoaXMuY29udGV4dDsKCQoJCWlmICggb3JkZXIgPT09IHVuZGVmaW5lZCApIHsKCQkJLy8gZ2V0CgkJCXJldHVybiBjdHgubGVuZ3RoICE9PSAwID8KCQkJCWN0eFswXS5hYVNvcnRpbmcgOgoJCQkJdW5kZWZpbmVkOwoJCX0KCQoJCS8vIHNldAoJCWlmICggdHlwZW9mIG9yZGVyID09PSAnbnVtYmVyJyApIHsKCQkJLy8gU2ltcGxlIGNvbHVtbiAvIGRpcmVjdGlvbiBwYXNzZWQgaW4KCQkJb3JkZXIgPSBbIFsgb3JkZXIsIGRpciBdIF07CgkJfQoJCWVsc2UgaWYgKCBvcmRlci5sZW5ndGggJiYgISAkLmlzQXJyYXkoIG9yZGVyWzBdICkgKSB7CgkJCS8vIEFyZ3VtZW50cyBwYXNzZWQgaW4gKGxpc3Qgb2YgMUQgYXJyYXlzKQoJCQlvcmRlciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKCBhcmd1bWVudHMgKTsKCQl9CgkJLy8gb3RoZXJ3aXNlIGEgMkQgYXJyYXkgd2FzIHBhc3NlZCBpbgoJCgkJcmV0dXJuIHRoaXMuaXRlcmF0b3IoICd0YWJsZScsIGZ1bmN0aW9uICggc2V0dGluZ3MgKSB7CgkJCXNldHRpbmdzLmFhU29ydGluZyA9IG9yZGVyLnNsaWNlKCk7CgkJfSApOwoJfSApOwoJCgkKCS8qKgoJICogQXR0YWNoIGEgc29ydCBsaXN0ZW5lciB0byBhbiBlbGVtZW50IGZvciBhIGdpdmVuIGNvbHVtbgoJICoKCSAqIEBwYXJhbSB7bm9kZXxqUXVlcnl8c3RyaW5nfSBub2RlIElkZW50aWZpZXIgZm9yIHRoZSBlbGVtZW50KHMpIHRvIGF0dGFjaCB0aGUKCSAqICAgbGlzdGVuZXIgdG8uIFRoaXMgY2FuIHRha2UgdGhlIGZvcm0gb2YgYSBzaW5nbGUgRE9NIG5vZGUsIGEgalF1ZXJ5CgkgKiAgIGNvbGxlY3Rpb24gb2Ygbm9kZXMgb3IgYSBqUXVlcnkgc2VsZWN0b3Igd2hpY2ggd2lsbCBpZGVudGlmeSB0aGUgbm9kZShzKS4KCSAqIEBwYXJhbSB7aW50ZWdlcn0gY29sdW1uIHRoZSBjb2x1bW4gdGhhdCBhIGNsaWNrIG9uIHRoaXMgbm9kZSB3aWxsIHNvcnQgb24KCSAqIEBwYXJhbSB7ZnVuY3Rpb259IFtjYWxsYmFja10gY2FsbGJhY2sgZnVuY3Rpb24gd2hlbiBzb3J0IGlzIHJ1bgoJICogQHJldHVybnMge0RhdGFUYWJsZXMuQXBpfSB0aGlzCgkgKi8KCV9hcGlfcmVnaXN0ZXIoICdvcmRlci5saXN0ZW5lcigpJywgZnVuY3Rpb24gKCBub2RlLCBjb2x1bW4sIGNhbGxiYWNrICkgewoJCXJldHVybiB0aGlzLml0ZXJhdG9yKCAndGFibGUnLCBmdW5jdGlvbiAoIHNldHRpbmdzICkgewoJCQlfZm5Tb3J0QXR0YWNoTGlzdGVuZXIoIHNldHRpbmdzLCBub2RlLCBjb2x1bW4sIGNhbGxiYWNrICk7CgkJfSApOwoJfSApOwoJCgkKCV9hcGlfcmVnaXN0ZXIoICdvcmRlci5maXhlZCgpJywgZnVuY3Rpb24gKCBzZXQgKSB7CgkJaWYgKCAhIHNldCApIHsKCQkJdmFyIGN0eCA9IHRoaXMuY29udGV4dDsKCQkJdmFyIGZpeGVkID0gY3R4Lmxlbmd0aCA/CgkJCQljdHhbMF0uYWFTb3J0aW5nRml4ZWQgOgoJCQkJdW5kZWZpbmVkOwoJCgkJCXJldHVybiAkLmlzQXJyYXkoIGZpeGVkICkgPwoJCQkJeyBwcmU6IGZpeGVkIH0gOgoJCQkJZml4ZWQ7CgkJfQoJCgkJcmV0dXJuIHRoaXMuaXRlcmF0b3IoICd0YWJsZScsIGZ1bmN0aW9uICggc2V0dGluZ3MgKSB7CgkJCXNldHRpbmdzLmFhU29ydGluZ0ZpeGVkID0gJC5leHRlbmQoIHRydWUsIHt9LCBzZXQgKTsKCQl9ICk7Cgl9ICk7CgkKCQoJLy8gT3JkZXIgYnkgdGhlIHNlbGVjdGVkIGNvbHVtbihzKQoJX2FwaV9yZWdpc3RlciggWwoJCSdjb2x1bW5zKCkub3JkZXIoKScsCgkJJ2NvbHVtbigpLm9yZGVyKCknCgldLCBmdW5jdGlvbiAoIGRpciApIHsKCQl2YXIgdGhhdCA9IHRoaXM7CgkKCQlyZXR1cm4gdGhpcy5pdGVyYXRvciggJ3RhYmxlJywgZnVuY3Rpb24gKCBzZXR0aW5ncywgaSApIHsKCQkJdmFyIHNvcnQgPSBbXTsKCQoJCQkkLmVhY2goIHRoYXRbaV0sIGZ1bmN0aW9uIChqLCBjb2wpIHsKCQkJCXNvcnQucHVzaCggWyBjb2wsIGRpciBdICk7CgkJCX0gKTsKCQoJCQlzZXR0aW5ncy5hYVNvcnRpbmcgPSBzb3J0OwoJCX0gKTsKCX0gKTsKCQoJCgkKCV9hcGlfcmVnaXN0ZXIoICdzZWFyY2goKScsIGZ1bmN0aW9uICggaW5wdXQsIHJlZ2V4LCBzbWFydCwgY2FzZUluc2VuICkgewoJCXZhciBjdHggPSB0aGlzLmNvbnRleHQ7CgkKCQlpZiAoIGlucHV0ID09PSB1bmRlZmluZWQgKSB7CgkJCS8vIGdldAoJCQlyZXR1cm4gY3R4Lmxlbmd0aCAhPT0gMCA/CgkJCQljdHhbMF0ub1ByZXZpb3VzU2VhcmNoLnNTZWFyY2ggOgoJCQkJdW5kZWZpbmVkOwoJCX0KCQoJCS8vIHNldAoJCXJldHVybiB0aGlzLml0ZXJhdG9yKCAndGFibGUnLCBmdW5jdGlvbiAoIHNldHRpbmdzICkgewoJCQlpZiAoICEgc2V0dGluZ3Mub0ZlYXR1cmVzLmJGaWx0ZXIgKSB7CgkJCQlyZXR1cm47CgkJCX0KCQoJCQlfZm5GaWx0ZXJDb21wbGV0ZSggc2V0dGluZ3MsICQuZXh0ZW5kKCB7fSwgc2V0dGluZ3Mub1ByZXZpb3VzU2VhcmNoLCB7CgkJCQkic1NlYXJjaCI6IGlucHV0KyIiLAoJCQkJImJSZWdleCI6ICByZWdleCA9PT0gbnVsbCA/IGZhbHNlIDogcmVnZXgsCgkJCQkiYlNtYXJ0IjogIHNtYXJ0ID09PSBudWxsID8gdHJ1ZSAgOiBzbWFydCwKCQkJCSJiQ2FzZUluc2Vuc2l0aXZlIjogY2FzZUluc2VuID09PSBudWxsID8gdHJ1ZSA6IGNhc2VJbnNlbgoJCQl9ICksIDEgKTsKCQl9ICk7Cgl9ICk7CgkKCQoJX2FwaV9yZWdpc3RlclBsdXJhbCgKCQknY29sdW1ucygpLnNlYXJjaCgpJywKCQknY29sdW1uKCkuc2VhcmNoKCknLAoJCWZ1bmN0aW9uICggaW5wdXQsIHJlZ2V4LCBzbWFydCwgY2FzZUluc2VuICkgewoJCQlyZXR1cm4gdGhpcy5pdGVyYXRvciggJ2NvbHVtbicsIGZ1bmN0aW9uICggc2V0dGluZ3MsIGNvbHVtbiApIHsKCQkJCXZhciBwcmVTZWFyY2ggPSBzZXR0aW5ncy5hb1ByZVNlYXJjaENvbHM7CgkKCQkJCWlmICggaW5wdXQgPT09IHVuZGVmaW5lZCApIHsKCQkJCQkvLyBnZXQKCQkJCQlyZXR1cm4gcHJlU2VhcmNoWyBjb2x1bW4gXS5zU2VhcmNoOwoJCQkJfQoJCgkJCQkvLyBzZXQKCQkJCWlmICggISBzZXR0aW5ncy5vRmVhdHVyZXMuYkZpbHRlciApIHsKCQkJCQlyZXR1cm47CgkJCQl9CgkKCQkJCSQuZXh0ZW5kKCBwcmVTZWFyY2hbIGNvbHVtbiBdLCB7CgkJCQkJInNTZWFyY2giOiBpbnB1dCsiIiwKCQkJCQkiYlJlZ2V4IjogIHJlZ2V4ID09PSBudWxsID8gZmFsc2UgOiByZWdleCwKCQkJCQkiYlNtYXJ0IjogIHNtYXJ0ID09PSBudWxsID8gdHJ1ZSAgOiBzbWFydCwKCQkJCQkiYkNhc2VJbnNlbnNpdGl2ZSI6IGNhc2VJbnNlbiA9PT0gbnVsbCA/IHRydWUgOiBjYXNlSW5zZW4KCQkJCX0gKTsKCQoJCQkJX2ZuRmlsdGVyQ29tcGxldGUoIHNldHRpbmdzLCBzZXR0aW5ncy5vUHJldmlvdXNTZWFyY2gsIDEgKTsKCQkJfSApOwoJCX0KCSk7CgkKCS8qCgkgKiBTdGF0ZSBBUEkgbWV0aG9kcwoJICovCgkKCV9hcGlfcmVnaXN0ZXIoICdzdGF0ZSgpJywgZnVuY3Rpb24gKCkgewoJCXJldHVybiB0aGlzLmNvbnRleHQubGVuZ3RoID8KCQkJdGhpcy5jb250ZXh0WzBdLm9TYXZlZFN0YXRlIDoKCQkJbnVsbDsKCX0gKTsKCQoJCglfYXBpX3JlZ2lzdGVyKCAnc3RhdGUuY2xlYXIoKScsIGZ1bmN0aW9uICgpIHsKCQlyZXR1cm4gdGhpcy5pdGVyYXRvciggJ3RhYmxlJywgZnVuY3Rpb24gKCBzZXR0aW5ncyApIHsKCQkJLy8gU2F2ZSBhbiBlbXB0eSBvYmplY3QKCQkJc2V0dGluZ3MuZm5TdGF0ZVNhdmVDYWxsYmFjay5jYWxsKCBzZXR0aW5ncy5vSW5zdGFuY2UsIHNldHRpbmdzLCB7fSApOwoJCX0gKTsKCX0gKTsKCQoJCglfYXBpX3JlZ2lzdGVyKCAnc3RhdGUubG9hZGVkKCknLCBmdW5jdGlvbiAoKSB7CgkJcmV0dXJuIHRoaXMuY29udGV4dC5sZW5ndGggPwoJCQl0aGlzLmNvbnRleHRbMF0ub0xvYWRlZFN0YXRlIDoKCQkJbnVsbDsKCX0gKTsKCQoJCglfYXBpX3JlZ2lzdGVyKCAnc3RhdGUuc2F2ZSgpJywgZnVuY3Rpb24gKCkgewoJCXJldHVybiB0aGlzLml0ZXJhdG9yKCAndGFibGUnLCBmdW5jdGlvbiAoIHNldHRpbmdzICkgewoJCQlfZm5TYXZlU3RhdGUoIHNldHRpbmdzICk7CgkJfSApOwoJfSApOwoJCgkKCQoJLyoqCgkgKiBQcm92aWRlIGEgY29tbW9uIG1ldGhvZCBmb3IgcGx1Zy1pbnMgdG8gY2hlY2sgdGhlIHZlcnNpb24gb2YgRGF0YVRhYmxlcyBiZWluZwoJICogdXNlZCwgaW4gb3JkZXIgdG8gZW5zdXJlIGNvbXBhdGliaWxpdHkuCgkgKgoJICogIEBwYXJhbSB7c3RyaW5nfSB2ZXJzaW9uIFZlcnNpb24gc3RyaW5nIHRvIGNoZWNrIGZvciwgaW4gdGhlIGZvcm1hdCAiWC5ZLloiLgoJICogICAgTm90ZSB0aGF0IHRoZSBmb3JtYXRzICJYIiBhbg=="
},
{
"key": "jquery.dataTables.js?4?4?2",
"type": "binary",
"value": "base64:ZCAiWC5ZIiBhcmUgYWxzbyBhY2NlcHRhYmxlLgoJICogIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHRoaXMgdmVyc2lvbiBvZiBEYXRhVGFibGVzIGlzIGdyZWF0ZXIgb3IgZXF1YWwgdG8KCSAqICAgIHRoZSByZXF1aXJlZCB2ZXJzaW9uLCBvciBmYWxzZSBpZiB0aGlzIHZlcnNpb24gb2YgRGF0YVRhbGVzIGlzIG5vdAoJICogICAgc3VpdGFibGUKCSAqICBAc3RhdGljCgkgKiAgQGR0b3B0IEFQSS1TdGF0aWMKCSAqCgkgKiAgQGV4YW1wbGUKCSAqICAgIGFsZXJ0KCAkLmZuLmRhdGFUYWJsZS52ZXJzaW9uQ2hlY2soICcxLjkuMCcgKSApOwoJICovCglEYXRhVGFibGUudmVyc2lvbkNoZWNrID0gRGF0YVRhYmxlLmZuVmVyc2lvbkNoZWNrID0gZnVuY3Rpb24oIHZlcnNpb24gKQoJewoJCXZhciBhVGhpcyA9IERhdGFUYWJsZS52ZXJzaW9uLnNwbGl0KCcuJyk7CgkJdmFyIGFUaGF0ID0gdmVyc2lvbi5zcGxpdCgnLicpOwoJCXZhciBpVGhpcywgaVRoYXQ7CgkKCQlmb3IgKCB2YXIgaT0wLCBpTGVuPWFUaGF0Lmxlbmd0aCA7IGk8aUxlbiA7IGkrKyApIHsKCQkJaVRoaXMgPSBwYXJzZUludCggYVRoaXNbaV0sIDEwICkgfHwgMDsKCQkJaVRoYXQgPSBwYXJzZUludCggYVRoYXRbaV0sIDEwICkgfHwgMDsKCQoJCQkvLyBQYXJ0cyBhcmUgdGhlIHNhbWUsIGtlZXAgY29tcGFyaW5nCgkJCWlmIChpVGhpcyA9PT0gaVRoYXQpIHsKCQkJCWNvbnRpbnVlOwoJCQl9CgkKCQkJLy8gUGFydHMgYXJlIGRpZmZlcmVudCwgcmV0dXJuIGltbWVkaWF0ZWx5CgkJCXJldHVybiBpVGhpcyA+IGlUaGF0OwoJCX0KCQoJCXJldHVybiB0cnVlOwoJfTsKCQoJCgkvKioKCSAqIENoZWNrIGlmIGEgYDx0YWJsZT5gIG5vZGUgaXMgYSBEYXRhVGFibGUgdGFibGUgYWxyZWFkeSBvciBub3QuCgkgKgoJICogIEBwYXJhbSB7bm9kZXxqcXVlcnl8c3RyaW5nfSB0YWJsZSBUYWJsZSBub2RlLCBqUXVlcnkgb2JqZWN0IG9yIGpRdWVyeQoJICogICAgICBzZWxlY3RvciBmb3IgdGhlIHRhYmxlIHRvIHRlc3QuIE5vdGUgdGhhdCBpZiBtb3JlIHRoYW4gbW9yZSB0aGFuIG9uZQoJICogICAgICB0YWJsZSBpcyBwYXNzZWQgb24sIG9ubHkgdGhlIGZpcnN0IHdpbGwgYmUgY2hlY2tlZAoJICogIEByZXR1cm5zIHtib29sZWFufSB0cnVlIHRoZSB0YWJsZSBnaXZlbiBpcyBhIERhdGFUYWJsZSwgb3IgZmFsc2Ugb3RoZXJ3aXNlCgkgKiAgQHN0YXRpYwoJICogIEBkdG9wdCBBUEktU3RhdGljCgkgKgoJICogIEBleGFtcGxlCgkgKiAgICBpZiAoICEgJC5mbi5EYXRhVGFibGUuaXNEYXRhVGFibGUoICcjZXhhbXBsZScgKSApIHsKCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoKTsKCSAqICAgIH0KCSAqLwoJRGF0YVRhYmxlLmlzRGF0YVRhYmxlID0gRGF0YVRhYmxlLmZuSXNEYXRhVGFibGUgPSBmdW5jdGlvbiAoIHRhYmxlICkKCXsKCQl2YXIgdCA9ICQodGFibGUpLmdldCgwKTsKCQl2YXIgaXMgPSBmYWxzZTsKCQoJCWlmICggdGFibGUgaW5zdGFuY2VvZiBEYXRhVGFibGUuQXBpICkgewoJCQlyZXR1cm4gdHJ1ZTsKCQl9CgkKCQkkLmVhY2goIERhdGFUYWJsZS5zZXR0aW5ncywgZnVuY3Rpb24gKGksIG8pIHsKCQkJdmFyIGhlYWQgPSBvLm5TY3JvbGxIZWFkID8gJCgndGFibGUnLCBvLm5TY3JvbGxIZWFkKVswXSA6IG51bGw7CgkJCXZhciBmb290ID0gby5uU2Nyb2xsRm9vdCA/ICQoJ3RhYmxlJywgby5uU2Nyb2xsRm9vdClbMF0gOiBudWxsOwoJCgkJCWlmICggby5uVGFibGUgPT09IHQgfHwgaGVhZCA9PT0gdCB8fCBmb290ID09PSB0ICkgewoJCQkJaXMgPSB0cnVlOwoJCQl9CgkJfSApOwoJCgkJcmV0dXJuIGlzOwoJfTsKCQoJCgkvKioKCSAqIEdldCBhbGwgRGF0YVRhYmxlIHRhYmxlcyB0aGF0IGhhdmUgYmVlbiBpbml0aWFsaXNlZCAtIG9wdGlvbmFsbHkgeW91IGNhbgoJICogc2VsZWN0IHRvIGdldCBvbmx5IGN1cnJlbnRseSB2aXNpYmxlIHRhYmxlcy4KCSAqCgkgKiAgQHBhcmFtIHtib29sZWFufSBbdmlzaWJsZT1mYWxzZV0gRmxhZyB0byBpbmRpY2F0ZSBpZiB5b3Ugd2FudCBhbGwgKGRlZmF1bHQpCgkgKiAgICBvciB2aXNpYmxlIHRhYmxlcyBvbmx5LgoJICogIEByZXR1cm5zIHthcnJheX0gQXJyYXkgb2YgYHRhYmxlYCBub2RlcyAobm90IERhdGFUYWJsZSBpbnN0YW5jZXMpIHdoaWNoIGFyZQoJICogICAgRGF0YVRhYmxlcwoJICogIEBzdGF0aWMKCSAqICBAZHRvcHQgQVBJLVN0YXRpYwoJICoKCSAqICBAZXhhbXBsZQoJICogICAgJC5lYWNoKCAkLmZuLmRhdGFUYWJsZS50YWJsZXModHJ1ZSksIGZ1bmN0aW9uICgpIHsKCSAqICAgICAgJCh0YWJsZSkuRGF0YVRhYmxlKCkuY29sdW1ucy5hZGp1c3QoKTsKCSAqICAgIH0gKTsKCSAqLwoJRGF0YVRhYmxlLnRhYmxlcyA9IERhdGFUYWJsZS5mblRhYmxlcyA9IGZ1bmN0aW9uICggdmlzaWJsZSApCgl7CgkJdmFyIGFwaSA9IGZhbHNlOwoJCgkJaWYgKCAkLmlzUGxhaW5PYmplY3QoIHZpc2libGUgKSApIHsKCQkJYXBpID0gdmlzaWJsZS5hcGk7CgkJCXZpc2libGUgPSB2aXNpYmxlLnZpc2libGU7CgkJfQoJCgkJdmFyIGEgPSAkLm1hcCggRGF0YVRhYmxlLnNldHRpbmdzLCBmdW5jdGlvbiAobykgewoJCQlpZiAoICF2aXNpYmxlIHx8ICh2aXNpYmxlICYmICQoby5uVGFibGUpLmlzKCc6dmlzaWJsZScpKSApIHsKCQkJCXJldHVybiBvLm5UYWJsZTsKCQkJfQoJCX0gKTsKCQoJCXJldHVybiBhcGkgPwoJCQluZXcgX0FwaSggYSApIDoKCQkJYTsKCX07CgkKCQoJLyoqCgkgKiBDb252ZXJ0IGZyb20gY2FtZWwgY2FzZSBwYXJhbWV0ZXJzIHRvIEh1bmdhcmlhbiBub3RhdGlvbi4gVGhpcyBpcyBtYWRlIHB1YmxpYwoJICogZm9yIHRoZSBleHRlbnNpb25zIHRvIHByb3ZpZGUgdGhlIHNhbWUgYWJpbGl0eSBhcyBEYXRhVGFibGVzIGNvcmUgdG8gYWNjZXB0CgkgKiBlaXRoZXIgdGhlIDEuOSBzdHlsZSBIdW5nYXJpYW4gbm90YXRpb24sIG9yIHRoZSAxLjEwKyBzdHlsZSBjYW1lbENhc2UKCSAqIHBhcmFtZXRlcnMuCgkgKgoJICogIEBwYXJhbSB7b2JqZWN0fSBzcmMgVGhlIG1vZGVsIG9iamVjdCB3aGljaCBob2xkcyBhbGwgcGFyYW1ldGVycyB0aGF0IGNhbiBiZQoJICogICAgbWFwcGVkLgoJICogIEBwYXJhbSB7b2JqZWN0fSB1c2VyIFRoZSBvYmplY3QgdG8gY29udmVydCBmcm9tIGNhbWVsIGNhc2UgdG8gSHVuZ2FyaWFuLgoJICogIEBwYXJhbSB7Ym9vbGVhbn0gZm9yY2UgV2hlbiBzZXQgdG8gYHRydWVgLCBwcm9wZXJ0aWVzIHdoaWNoIGFscmVhZHkgaGF2ZSBhCgkgKiAgICBIdW5nYXJpYW4gdmFsdWUgaW4gdGhlIGB1c2VyYCBvYmplY3Qgd2lsbCBiZSBvdmVyd3JpdHRlbi4gT3RoZXJ3aXNlIHRoZXkKCSAqICAgIHdvbid0IGJlLgoJICovCglEYXRhVGFibGUuY2FtZWxUb0h1bmdhcmlhbiA9IF9mbkNhbWVsVG9IdW5nYXJpYW47CgkKCQoJCgkvKioKCSAqCgkgKi8KCV9hcGlfcmVnaXN0ZXIoICckKCknLCBmdW5jdGlvbiAoIHNlbGVjdG9yLCBvcHRzICkgewoJCXZhcgoJCQlyb3dzICAgPSB0aGlzLnJvd3MoIG9wdHMgKS5ub2RlcygpLCAvLyBHZXQgYWxsIHJvd3MKCQkJanFSb3dzID0gJChyb3dzKTsKCQoJCXJldHVybiAkKCBbXS5jb25jYXQoCgkJCWpxUm93cy5maWx0ZXIoIHNlbGVjdG9yICkudG9BcnJheSgpLAoJCQlqcVJvd3MuZmluZCggc2VsZWN0b3IgKS50b0FycmF5KCkKCQkpICk7Cgl9ICk7CgkKCQoJLy8galF1ZXJ5IGZ1bmN0aW9ucyB0byBvcGVyYXRlIG9uIHRoZSB0YWJsZXMKCSQuZWFjaCggWyAnb24nLCAnb25lJywgJ29mZicgXSwgZnVuY3Rpb24gKGksIGtleSkgewoJCV9hcGlfcmVnaXN0ZXIoIGtleSsnKCknLCBmdW5jdGlvbiAoIC8qIGV2ZW50LCBoYW5kbGVyICovICkgewoJCQl2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7CgkKCQkJLy8gQWRkIHRoZSBgZHRgIG5hbWVzcGFjZSBhdXRvbWF0aWNhbGx5IGlmIGl0IGlzbid0IGFscmVhZHkgcHJlc2VudAoJCQlhcmdzWzBdID0gJC5tYXAoIGFyZ3NbMF0uc3BsaXQoIC9ccy8gKSwgZnVuY3Rpb24gKCBlICkgewoJCQkJcmV0dXJuICEgZS5tYXRjaCgvXC5kdFxiLykgPwoJCQkJCWUrJy5kdCcgOgoJCQkJCWU7CgkJCQl9ICkuam9pbiggJyAnICk7CgkKCQkJdmFyIGluc3QgPSAkKCB0aGlzLnRhYmxlcygpLm5vZGVzKCkgKTsKCQkJaW5zdFtrZXldLmFwcGx5KCBpbnN0LCBhcmdzICk7CgkJCXJldHVybiB0aGlzOwoJCX0gKTsKCX0gKTsKCQoJCglfYXBpX3JlZ2lzdGVyKCAnY2xlYXIoKScsIGZ1bmN0aW9uICgpIHsKCQlyZXR1cm4gdGhpcy5pdGVyYXRvciggJ3RhYmxlJywgZnVuY3Rpb24gKCBzZXR0aW5ncyApIHsKCQkJX2ZuQ2xlYXJUYWJsZSggc2V0dGluZ3MgKTsKCQl9ICk7Cgl9ICk7CgkKCQoJX2FwaV9yZWdpc3RlciggJ3NldHRpbmdzKCknLCBmdW5jdGlvbiAoKSB7CgkJcmV0dXJuIG5ldyBfQXBpKCB0aGlzLmNvbnRleHQsIHRoaXMuY29udGV4dCApOwoJfSApOwoJCgkKCV9hcGlfcmVnaXN0ZXIoICdpbml0KCknLCBmdW5jdGlvbiAoKSB7CgkJdmFyIGN0eCA9IHRoaXMuY29udGV4dDsKCQlyZXR1cm4gY3R4Lmxlbmd0aCA/IGN0eFswXS5vSW5pdCA6IG51bGw7Cgl9ICk7CgkKCQoJX2FwaV9yZWdpc3RlciggJ2RhdGEoKScsIGZ1bmN0aW9uICgpIHsKCQlyZXR1cm4gdGhpcy5pdGVyYXRvciggJ3RhYmxlJywgZnVuY3Rpb24gKCBzZXR0aW5ncyApIHsKCQkJcmV0dXJuIF9wbHVjayggc2V0dGluZ3MuYW9EYXRhLCAnX2FEYXRhJyApOwoJCX0gKS5mbGF0dGVuKCk7Cgl9ICk7CgkKCQoJX2FwaV9yZWdpc3RlciggJ2Rlc3Ryb3koKScsIGZ1bmN0aW9uICggcmVtb3ZlICkgewoJCXJlbW92ZSA9IHJlbW92ZSB8fCBmYWxzZTsKCQoJCXJldHVybiB0aGlzLml0ZXJhdG9yKCAndGFibGUnLCBmdW5jdGlvbiAoIHNldHRpbmdzICkgewoJCQl2YXIgb3JpZyAgICAgID0gc2V0dGluZ3MublRhYmxlV3JhcHBlci5wYXJlbnROb2RlOwoJCQl2YXIgY2xhc3NlcyAgID0gc2V0dGluZ3Mub0NsYXNzZXM7CgkJCXZhciB0YWJsZSAgICAgPSBzZXR0aW5ncy5uVGFibGU7CgkJCXZhciB0Ym9keSAgICAgPSBzZXR0aW5ncy5uVEJvZHk7CgkJCXZhciB0aGVhZCAgICAgPSBzZXR0aW5ncy5uVEhlYWQ7CgkJCXZhciB0Zm9vdCAgICAgPSBzZXR0aW5ncy5uVEZvb3Q7CgkJCXZhciBqcVRhYmxlICAgPSAkKHRhYmxlKTsKCQkJdmFyIGpxVGJvZHkgICA9ICQodGJvZHkpOwoJCQl2YXIganFXcmFwcGVyID0gJChzZXR0aW5ncy5uVGFibGVXcmFwcGVyKTsKCQkJdmFyIHJvd3MgICAgICA9ICQubWFwKCBzZXR0aW5ncy5hb0RhdGEsIGZ1bmN0aW9uIChyKSB7IHJldHVybiByLm5UcjsgfSApOwoJCQl2YXIgaSwgaWVuOwoJCgkJCS8vIEZsYWcgdG8gbm90ZSB0aGF0IHRoZSB0YWJsZSBpcyBjdXJyZW50bHkgYmVpbmcgZGVzdHJveWVkIC0gbm8gYWN0aW9uCgkJCS8vIHNob3VsZCBiZSB0YWtlbgoJCQlzZXR0aW5ncy5iRGVzdHJveWluZyA9IHRydWU7CgkKCQkJLy8gRmlyZSBvZmYgdGhlIGRlc3Ryb3kgY2FsbGJhY2tzIGZvciBwbHVnLWlucyBldGMKCQkJX2ZuQ2FsbGJhY2tGaXJlKCBzZXR0aW5ncywgImFvRGVzdHJveUNhbGxiYWNrIiwgImRlc3Ryb3kiLCBbc2V0dGluZ3NdICk7CgkKCQkJLy8gSWYgbm90IGJlaW5nIHJlbW92ZWQgZnJvbSB0aGUgZG9jdW1lbnQsIG1ha2UgYWxsIGNvbHVtbnMgdmlzaWJsZQoJCQlpZiAoICEgcmVtb3ZlICkgewoJCQkJbmV3IF9BcGkoIHNldHRpbmdzICkuY29sdW1ucygpLnZpc2libGUoIHRydWUgKTsKCQkJfQoJCgkJCS8vIEJsaXR6IGFsbCBgRFRgIG5hbWVzcGFjZWQgZXZlbnRzICh0aGVzZSBhcmUgaW50ZXJuYWwgZXZlbnRzLCB0aGUKCQkJLy8gbG93ZXJjYXNlLCBgZHRgIGV2ZW50cyBhcmUgdXNlciBzdWJzY3JpYmVkIGFuZCB0aGV5IGFyZSByZXNwb25zaWJsZQoJCQkvLyBmb3IgcmVtb3ZpbmcgdGhlbQoJCQlqcVdyYXBwZXIub2ZmKCcuRFQnKS5maW5kKCc6bm90KHRib2R5ICopJykub2ZmKCcuRFQnKTsKCQkJJCh3aW5kb3cpLm9mZignLkRULScrc2V0dGluZ3Muc0luc3RhbmNlKTsKCQoJCQkvLyBXaGVuIHNjcm9sbGluZyB3ZSBoYWQgdG8gYnJlYWsgdGhlIHRhYmxlIHVwIC0gcmVzdG9yZSBpdAoJCQlpZiAoIHRhYmxlICE9IHRoZWFkLnBhcmVudE5vZGUgKSB7CgkJCQlqcVRhYmxlLmNoaWxkcmVuKCd0aGVhZCcpLmRldGFjaCgpOwoJCQkJanFUYWJsZS5hcHBlbmQoIHRoZWFkICk7CgkJCX0KCQoJCQlpZiAoIHRmb290ICYmIHRhYmxlICE9IHRmb290LnBhcmVudE5vZGUgKSB7CgkJCQlqcVRhYmxlLmNoaWxkcmVuKCd0Zm9vdCcpLmRldGFjaCgpOwoJCQkJanFUYWJsZS5hcHBlbmQoIHRmb290ICk7CgkJCX0KCQoJCQlzZXR0aW5ncy5hYVNvcnRpbmcgPSBbXTsKCQkJc2V0dGluZ3MuYWFTb3J0aW5nRml4ZWQgPSBbXTsKCQkJX2ZuU29ydGluZ0NsYXNzZXMoIHNldHRpbmdzICk7CgkKCQkJJCggcm93cyApLnJlbW92ZUNsYXNzKCBzZXR0aW5ncy5hc1N0cmlwZUNsYXNzZXMuam9pbignICcpICk7CgkKCQkJJCgndGgsIHRkJywgdGhlYWQpLnJlbW92ZUNsYXNzKCBjbGFzc2VzLnNTb3J0YWJsZSsnICcrCgkJCQljbGFzc2VzLnNTb3J0YWJsZUFzYysnICcrY2xhc3Nlcy5zU29ydGFibGVEZXNjKycgJytjbGFzc2VzLnNTb3J0YWJsZU5vbmUKCQkJKTsKCQoJCQkvLyBBZGQgdGhlIFRSIGVsZW1lbnRzIGJhY2sgaW50byB0aGUgdGFibGUgaW4gdGhlaXIgb3JpZ2luYWwgb3JkZXIKCQkJanFUYm9keS5jaGlsZHJlbigpLmRldGFjaCgpOwoJCQlqcVRib2R5LmFwcGVuZCggcm93cyApOwoJCgkJCS8vIFJlbW92ZSB0aGUgRGF0YVRhYmxlcyBnZW5lcmF0ZWQgbm9kZXMsIGV2ZW50cyBhbmQgY2xhc3NlcwoJCQl2YXIgcmVtb3ZlZE1ldGhvZCA9IHJlbW92ZSA/ICdyZW1vdmUnIDogJ2RldGFjaCc7CgkJCWpxVGFibGVbIHJlbW92ZWRNZXRob2QgXSgpOwoJCQlqcVdyYXBwZXJbIHJlbW92ZWRNZXRob2QgXSgpOwoJCgkJCS8vIElmIHdlIG5lZWQgdG8gcmVhdHRhY2ggdGhlIHRhYmxlIHRvIHRoZSBkb2N1bWVudAoJCQlpZiAoICEgcmVtb3ZlICYmIG9yaWcgKSB7CgkJCQkvLyBpbnNlcnRCZWZvcmUgYWN0cyBsaWtlIGFwcGVuZENoaWxkIGlmICFhcmdbMV0KCQkJCW9yaWcuaW5zZXJ0QmVmb3JlKCB0YWJsZSwgc2V0dGluZ3MublRhYmxlUmVpbnNlcnRCZWZvcmUgKTsKCQoJCQkJLy8gUmVzdG9yZSB0aGUgd2lkdGggb2YgdGhlIG9yaWdpbmFsIHRhYmxlIC0gd2FzIHJlYWQgZnJvbSB0aGUgc3R5bGUgcHJvcGVydHksCgkJCQkvLyBzbyB3ZSBjYW4gcmVzdG9yZSBkaXJlY3RseSB0byB0aGF0CgkJCQlqcVRhYmxlCgkJCQkJLmNzcyggJ3dpZHRoJywgc2V0dGluZ3Muc0Rlc3Ryb3lXaWR0aCApCgkJCQkJLnJlbW92ZUNsYXNzKCBjbGFzc2VzLnNUYWJsZSApOwoJCgkJCQkvLyBJZiB0aGUgd2VyZSBvcmlnaW5hbGx5IHN0cmlwZSBjbGFzc2VzIC0gdGhlbiB3ZSBhZGQgdGhlbSBiYWNrIGhlcmUuCgkJCQkvLyBOb3RlIHRoaXMgaXMgbm90IGZvb2wgcHJvb2YgKGZvciBleGFtcGxlIGlmIG5vdCBhbGwgcm93cyBoYWQgc3RyaXBlCgkJCQkvLyBjbGFzc2VzIC0gYnV0IGl0J3MgYSBnb29kIGVmZm9ydCB3aXRob3V0IGdldHRpbmcgY2FycmllZCBhd2F5CgkJCQlpZW4gPSBzZXR0aW5ncy5hc0Rlc3Ryb3lTdHJpcGVzLmxlbmd0aDsKCQoJCQkJaWYgKCBpZW4gKSB7CgkJCQkJanFUYm9keS5jaGlsZHJlbigpLmVhY2goIGZ1bmN0aW9uIChpKSB7CgkJCQkJCSQodGhpcykuYWRkQ2xhc3MoIHNldHRpbmdzLmFzRGVzdHJveVN0cmlwZXNbaSAlIGllbl0gKTsKCQkJCQl9ICk7CgkJCQl9CgkJCX0KCQoJCQkvKiBSZW1vdmUgdGhlIHNldHRpbmdzIG9iamVjdCBmcm9tIHRoZSBzZXR0aW5ncyBhcnJheSAqLwoJCQl2YXIgaWR4ID0gJC5pbkFycmF5KCBzZXR0aW5ncywgRGF0YVRhYmxlLnNldHRpbmdzICk7CgkJCWlmICggaWR4ICE9PSAtMSApIHsKCQkJCURhdGFUYWJsZS5zZXR0aW5ncy5zcGxpY2UoIGlkeCwgMSApOwoJCQl9CgkJfSApOwoJfSApOwoJCgkKCS8vIEFkZCB0aGUgYGV2ZXJ5KClgIG1ldGhvZCBmb3Igcm93cywgY29sdW1ucyBhbmQgY2VsbHMgaW4gYSBjb21wYWN0IGZvcm0KCSQuZWFjaCggWyAnY29sdW1uJywgJ3JvdycsICdjZWxsJyBdLCBmdW5jdGlvbiAoIGksIHR5cGUgKSB7CgkJX2FwaV9yZWdpc3RlciggdHlwZSsncygpLmV2ZXJ5KCknLCBmdW5jdGlvbiAoIGZuICkgewoJCQl2YXIgb3B0cyA9IHRoaXMuc2VsZWN0b3Iub3B0czsKCQkJdmFyIGFwaSA9IHRoaXM7CgkKCQkJcmV0dXJuIHRoaXMuaXRlcmF0b3IoIHR5cGUsIGZ1bmN0aW9uICggc2V0dGluZ3MsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQgKSB7CgkJCQkvLyBSb3dzIGFuZCBjb2x1bW5zOgoJCQkJLy8gIGFyZzEgLSBpbmRleAoJCQkJLy8gIGFyZzIgLSB0YWJsZSBjb3VudGVyCgkJCQkvLyAgYXJnMyAtIGxvb3AgY291bnRlcgoJCQkJLy8gIGFyZzQgLSB1bmRlZmluZWQKCQkJCS8vIENlbGxzOgoJCQkJLy8gIGFyZzEgLSByb3cgaW5kZXgKCQkJCS8vICBhcmcyIC0gY29sdW1uIGluZGV4CgkJCQkvLyAgYXJnMyAtIHRhYmxlIGNvdW50ZXIKCQkJCS8vICBhcmc0IC0gbG9vcCBjb3VudGVyCgkJCQlmbi5jYWxsKAoJCQkJCWFwaVsgdHlwZSBdKAoJCQkJCQlhcmcxLAoJCQkJCQl0eXBlPT09J2NlbGwnID8gYXJnMiA6IG9wdHMsCgkJCQkJCXR5cGU9PT0nY2VsbCcgPyBvcHRzIDogdW5kZWZpbmVkCgkJCQkJKSwKCQkJCQlhcmcxLCBhcmcyLCBhcmczLCBhcmc0CgkJCQkpOwoJCQl9ICk7CgkJfSApOwoJfSApOwoJCgkKCS8vIGkxOG4gbWV0aG9kIGZvciBleHRlbnNpb25zIHRvIGJlIGFibGUgdG8gdXNlIHRoZSBsYW5ndWFnZSBvYmplY3QgZnJvbSB0aGUKCS8vIERhdGFUYWJsZQoJX2FwaV9yZWdpc3RlciggJ2kxOG4oKScsIGZ1bmN0aW9uICggdG9rZW4sIGRlZiwgcGx1cmFsICkgewoJCXZhciBjdHggPSB0aGlzLmNvbnRleHRbMF07CgkJdmFyIHJlc29sdmVkID0gX2ZuR2V0T2JqZWN0RGF0YUZuKCB0b2tlbiApKCBjdHgub0xhbmd1YWdlICk7CgkKCQlpZiAoIHJlc29sdmVkID09PSB1bmRlZmluZWQgKSB7CgkJCXJlc29sdmVkID0gZGVmOwoJCX0KCQoJCWlmICggcGx1cmFsICE9PSB1bmRlZmluZWQgJiYgJC5pc1BsYWluT2JqZWN0KCByZXNvbHZlZCApICkgewoJCQlyZXNvbHZlZCA9IHJlc29sdmVkWyBwbHVyYWwgXSAhPT0gdW5kZWZpbmVkID8KCQkJCXJlc29sdmVkWyBwbHVyYWwgXSA6CgkJCQlyZXNvbHZlZC5fOwoJCX0KCQoJCXJldHVybiByZXNvbHZlZC5yZXBsYWNlKCAnJWQnLCBwbHVyYWwgKTsgLy8gbmI6IHBsdXJhbCBtaWdodCBiZSB1bmRlZmluZWQsCgl9ICk7CgkvKioKCSAqIFZlcnNpb24gc3RyaW5nIGZvciBwbHVnLWlucyB0byBjaGVjayBjb21wYXRpYmlsaXR5LiBBbGxvd2VkIGZvcm1hdCBpcwoJICogYGEuYi5jLWRgIHdoZXJlOiBhOmludCwgYjppbnQsIGM6aW50LCBkOnN0cmluZyhkZXZ8YmV0YXxhbHBoYSkuIGBkYCBpcyB1c2VkCgkgKiBvbmx5IGZvciBub24tcmVsZWFzZSBidWlsZHMuIFNlZSBodHRwOi8vc2VtdmVyLm9yZy8gZm9yIG1vcmUgaW5mb3JtYXRpb24uCgkgKiAgQG1lbWJlcgoJICogIEB0eXBlIHN0cmluZwoJICogIEBkZWZhdWx0IFZlcnNpb24gbnVtYmVyCgkgKi8KCURhdGFUYWJsZS52ZXJzaW9uID0gIjEuMTAuMTkiOwoKCS8qKgoJICogUHJpdmF0ZSBkYXRhIHN0b3JlLCBjb250YWluaW5nIGFsbCBvZiB0aGUgc2V0dGluZ3Mgb2JqZWN0cyB0aGF0IGFyZQoJICogY3JlYXRlZCBmb3IgdGhlIHRhYmxlcyBvbiBhIGdpdmVuIHBhZ2UuCgkgKgoJICogTm90ZSB0aGF0IHRoZSBgRGF0YVRhYmxlLnNldHRpbmdzYCBvYmplY3QgaXMgYWxpYXNlZCB0bwoJICogYGpRdWVyeS5mbi5kYXRhVGFibGVFeHRgIHRocm91Z2ggd2hpY2ggaXQgbWF5IGJlIGFjY2Vzc2VkIGFuZAoJICogbWFuaXB1bGF0ZWQsIG9yIGBqUXVlcnkuZm4uZGF0YVRhYmxlLnNldHRpbmdzYC4KCSAqICBAbWVtYmVyCgkgKiAgQHR5cGUgYXJyYXkKCSAqICBAZGVmYXVsdCBbXQoJICogIEBwcml2YXRlCgkgKi8KCURhdGFUYWJsZS5zZXR0aW5ncyA9IFtdOwoKCS8qKgoJICogT2JqZWN0IG1vZGVscyBjb250YWluZXIsIGZvciB0aGUgdmFyaW91cyBtb2RlbHMgdGhhdCBEYXRhVGFibGVzIGhhcwoJICogYXZhaWxhYmxlIHRvIGl0LiBUaGVzZSBtb2RlbHMgZGVmaW5lIHRoZSBvYmplY3RzIHRoYXQgYXJlIHVzZWQgdG8gaG9sZAoJICogdGhlIGFjdGl2ZSBzdGF0ZSBhbmQgY29uZmlndXJhdGlvbiBvZiB0aGUgdGFibGUuCgkgKiAgQG5hbWVzcGFjZQoJICovCglEYXRhVGFibGUubW9kZWxzID0ge307CgkKCQoJCgkvKioKCSAqIFRlbXBsYXRlIG9iamVjdCBmb3IgdGhlIHdheSBpbiB3aGljaCBEYXRhVGFibGVzIGhvbGRzIGluZm9ybWF0aW9uIGFib3V0CgkgKiBzZWFyY2ggaW5mb3JtYXRpb24gZm9yIHRoZSBnbG9iYWwgZmlsdGVyIGFuZCBpbmRpdmlkdWFsIGNvbHVtbiBmaWx0ZXJzLgoJICogIEBuYW1lc3BhY2UKCSAqLwoJRGF0YVRhYmxlLm1vZGVscy5vU2VhcmNoID0gewoJCS8qKgoJCSAqIEZsYWcgdG8gaW5kaWNhdGUgaWYgdGhlIGZpbHRlcmluZyBzaG91bGQgYmUgY2FzZSBpbnNlbnNpdGl2ZSBvciBub3QKCQkgKiAgQHR5cGUgYm9vbGVhbgoJCSAqICBAZGVmYXVsdCB0cnVlCgkJICovCgkJImJDYXNlSW5zZW5zaXRpdmUiOiB0cnVlLAoJCgkJLyoqCgkJICogQXBwbGllZCBzZWFyY2ggdGVybQoJCSAqICBAdHlwZSBzdHJpbmcKCQkgKiAgQGRlZmF1bHQgPGk+RW1wdHkgc3RyaW5nPC9pPgoJCSAqLwoJCSJzU2VhcmNoIjogIiIsCgkKCQkvKioKCQkgKiBGbGFnIHRvIGluZGljYXRlIGlmIHRoZSBzZWFyY2ggdGVybSBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgYXMgYQoJCSAqIHJlZ3VsYXIgZXhwcmVzc2lvbiAodHJ1ZSkgb3Igbm90IChmYWxzZSkgYW5kIHRoZXJlZm9yZSBhbmQgc3BlY2lhbAoJCSAqIHJlZ2V4IGNoYXJhY3RlcnMgZXNjYXBlZC4KCQkgKiAgQHR5cGUgYm9vbGVhbgoJCSAqICBAZGVmYXVsdCBmYWxzZQoJCSAqLwoJCSJiUmVnZXgiOiBmYWxzZSwKCQoJCS8qKgoJCSAqIEZsYWcgdG8gaW5kaWNhdGUgaWYgRGF0YVRhYmxlcyBpcyB0byB1c2UgaXRzIHNtYXJ0IGZpbHRlcmluZyBvciBub3QuCgkJICogIEB0eXBlIGJvb2xlYW4KCQkgKiAgQGRlZmF1bHQgdHJ1ZQoJCSAqLwoJCSJiU21hcnQiOiB0cnVlCgl9OwoJCgkKCQoJCgkvKioKCSAqIFRlbXBsYXRlIG9iamVjdCBmb3IgdGhlIHdheSBpbiB3aGljaCBEYXRhVGFibGVzIGhvbGRzIGluZm9ybWF0aW9uIGFib3V0CgkgKiBlYWNoIGluZGl2aWR1YWwgcm93LiBUaGlzIGlzIHRoZSBvYmplY3QgZm9ybWF0IHVzZWQgZm9yIHRoZSBzZXR0aW5ncwoJICogYW9EYXRhIGFycmF5LgoJICogIEBuYW1lc3BhY2UKCSAqLwoJRGF0YVRhYmxlLm1vZGVscy5vUm93ID0gewoJCS8qKgoJCSA="
}
]
},
{
"type": 12,
"id": "9pzKxi8Lt6THkTUCESpwbQB2hKTdYsmm4Z8J8QCgvMvN",
"fee": 14200000,
"feeAssetId": null,
"timestamp": 1577467381744,
"version": 1,
"sender": "3NAxHUEaM6RAG7rVDPL9L6DFZWkrqFtY98t",
"senderPublicKey": "4Jwx6yN9LNc5XbrqwrSdp2hok5niFKzGzfZwSxFH6FsV",
"proofs": [
"5LMJEQSeGho6Ez4qbLbBow4nogMebSNZHvA1tHwfJc4AJHeJmJQcB8di1Ux36tBTynzWFhWWSNJa3mzrggyRdudr"
],
"data": [
{
"key": "jquery.dataTables.js?4?0?3",
"type": "binary",
"value": "base64:KiBUUiBlbGVtZW50IGZvciB0aGUgcm93CgkJICogIEB0eXBlIG5vZGUKCQkgKiAgQGRlZmF1bHQgbnVsbAoJCSAqLwoJCSJuVHIiOiBudWxsLAoJCgkJLyoqCgkJICogQXJyYXkgb2YgVEQgZWxlbWVudHMgZm9yIGVhY2ggcm93LiBUaGlzIGlzIG51bGwgdW50aWwgdGhlIHJvdyBoYXMgYmVlbgoJCSAqIGNyZWF0ZWQuCgkJICogIEB0eXBlIGFycmF5IG5vZGVzCgkJICogIEBkZWZhdWx0IFtdCgkJICovCgkJImFuQ2VsbHMiOiBudWxsLAoJCgkJLyoqCgkJICogRGF0YSBvYmplY3QgZnJvbSB0aGUgb3JpZ2luYWwgZGF0YSBzb3VyY2UgZm9yIHRoZSByb3cuIFRoaXMgaXMgZWl0aGVyCgkJICogYW4gYXJyYXkgaWYgdXNpbmcgdGhlIHRyYWRpdGlvbmFsIGZvcm0gb2YgRGF0YVRhYmxlcywgb3IgYW4gb2JqZWN0IGlmCgkJICogdXNpbmcgbURhdGEgb3B0aW9ucy4gVGhlIGV4YWN0IHR5cGUgd2lsbCBkZXBlbmQgb24gdGhlIHBhc3NlZCBpbgoJCSAqIGRhdGEgZnJvbSB0aGUgZGF0YSBzb3VyY2UsIG9yIHdpbGwgYmUgYW4gYXJyYXkgaWYgdXNpbmcgRE9NIGEgZGF0YQoJCSAqIHNvdXJjZS4KCQkgKiAgQHR5cGUgYXJyYXl8b2JqZWN0CgkJICogIEBkZWZhdWx0IFtdCgkJICovCgkJIl9hRGF0YSI6IFtdLAoJCgkJLyoqCgkJICogU29ydGluZyBkYXRhIGNhY2hlIC0gdGhpcyBhcnJheSBpcyBvc3RlbnNpYmx5IHRoZSBzYW1lIGxlbmd0aCBhcyB0aGUKCQkgKiBudW1iZXIgb2YgY29sdW1ucyAoYWx0aG91Z2ggZWFjaCBpbmRleCBpcyBnZW5lcmF0ZWQgb25seSBhcyBpdCBpcwoJCSAqIG5lZWRlZCksIGFuZCBob2xkcyB0aGUgZGF0YSB0aGF0IGlzIHVzZWQgZm9yIHNvcnRpbmcgZWFjaCBjb2x1bW4gaW4gdGhlCgkJICogcm93LiBXZSBkbyB0aGlzIGNhY2hlIGdlbmVyYXRpb24gYXQgdGhlIHN0YXJ0IG9mIHRoZSBzb3J0IGluIG9yZGVyIHRoYXQKCQkgKiB0aGUgZm9ybWF0dGluZyBvZiB0aGUgc29ydCBkYXRhIG5lZWQgYmUgZG9uZSBvbmx5IG9uY2UgZm9yIGVhY2ggY2VsbAoJCSAqIHBlciBzb3J0LiBUaGlzIGFycmF5IHNob3VsZCBub3QgYmUgcmVhZCBmcm9tIG9yIHdyaXR0ZW4gdG8gYnkgYW55dGhpbmcKCQkgKiBvdGhlciB0aGFuIHRoZSBtYXN0ZXIgc29ydGluZyBtZXRob2RzLgoJCSAqICBAdHlwZSBhcnJheQoJCSAqICBAZGVmYXVsdCBudWxsCgkJICogIEBwcml2YXRlCgkJICovCgkJIl9hU29ydERhdGEiOiBudWxsLAoJCgkJLyoqCgkJICogUGVyIGNlbGwgZmlsdGVyaW5nIGRhdGEgY2FjaGUuIEFzIHBlciB0aGUgc29ydCBkYXRhIGNhY2hlLCB1c2VkIHRvCgkJICogaW5jcmVhc2UgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBmaWx0ZXJpbmcgaW4gRGF0YVRhYmxlcwoJCSAqICBAdHlwZSBhcnJheQoJCSAqICBAZGVmYXVsdCBudWxsCgkJICogIEBwcml2YXRlCgkJICovCgkJIl9hRmlsdGVyRGF0YSI6IG51bGwsCgkKCQkvKioKCQkgKiBGaWx0ZXJpbmcgZGF0YSBjYWNoZS4gVGhpcyBpcyB0aGUgc2FtZSBhcyB0aGUgY2VsbCBmaWx0ZXJpbmcgY2FjaGUsIGJ1dAoJCSAqIGluIHRoaXMgY2FzZSBhIHN0cmluZyByYXRoZXIgdGhhbiBhbiBhcnJheS4gVGhpcyBpcyBlYXNpbHkgY29tcHV0ZWQgd2l0aAoJCSAqIGEgam9pbiBvbiBgX2FGaWx0ZXJEYXRhYCwgYnV0IGlzIHByb3ZpZGVkIGFzIGEgY2FjaGUgc28gdGhlIGpvaW4gaXNuJ3QKCQkgKiBuZWVkZWQgb24gZXZlcnkgc2VhcmNoIChtZW1vcnkgdHJhZGVkIGZvciBwZXJmb3JtYW5jZSkKCQkgKiAgQHR5cGUgYXJyYXkKCQkgKiAgQGRlZmF1bHQgbnVsbAoJCSAqICBAcHJpdmF0ZQoJCSAqLwoJCSJfc0ZpbHRlclJvdyI6IG51bGwsCgkKCQkvKioKCQkgKiBDYWNoZSBvZiB0aGUgY2xhc3MgbmFtZSB0aGF0IERhdGFUYWJsZXMgaGFzIGFwcGxpZWQgdG8gdGhlIHJvdywgc28gd2UKCQkgKiBjYW4gcXVpY2tseSBsb29rIGF0IHRoaXMgdmFyaWFibGUgcmF0aGVyIHRoYW4gbmVlZGluZyB0byBkbyBhIERPTSBjaGVjawoJCSAqIG9uIGNsYXNzTmFtZSBmb3IgdGhlIG5UciBwcm9wZXJ0eS4KCQkgKiAgQHR5cGUgc3RyaW5nCgkJICogIEBkZWZhdWx0IDxpPkVtcHR5IHN0cmluZzwvaT4KCQkgKiAgQHByaXZhdGUKCQkgKi8KCQkiX3NSb3dTdHJpcGUiOiAiIiwKCQoJCS8qKgoJCSAqIERlbm90ZSBpZiB0aGUgb3JpZ2luYWwgZGF0YSBzb3VyY2Ugd2FzIGZyb20gdGhlIERPTSwgb3IgdGhlIGRhdGEgc291cmNlCgkJICogb2JqZWN0LiBUaGlzIGlzIHVzZWQgZm9yIGludmFsaWRhdGluZyBkYXRhLCBzbyBEYXRhVGFibGVzIGNhbgoJCSAqIGF1dG9tYXRpY2FsbHkgcmVhZCBkYXRhIGZyb20gdGhlIG9yaWdpbmFsIHNvdXJjZSwgdW5sZXNzIHVuaW5zdHJ1Y3RlZAoJCSAqIG90aGVyd2lzZS4KCQkgKiAgQHR5cGUgc3RyaW5nCgkJICogIEBkZWZhdWx0IG51bGwKCQkgKiAgQHByaXZhdGUKCQkgKi8KCQkic3JjIjogbnVsbCwKCQoJCS8qKgoJCSAqIEluZGV4IGluIHRoZSBhb0RhdGEgYXJyYXkuIFRoaXMgc2F2ZXMgYW4gaW5kZXhPZiBsb29rdXAgd2hlbiB3ZSBoYXZlIHRoZQoJCSAqIG9iamVjdCwgYnV0IHdhbnQgdG8ga25vdyB0aGUgaW5kZXgKCQkgKiAgQHR5cGUgaW50ZWdlcgoJCSAqICBAZGVmYXVsdCAtMQoJCSAqICBAcHJpdmF0ZQoJCSAqLwoJCSJpZHgiOiAtMQoJfTsKCQoJCgkvKioKCSAqIFRlbXBsYXRlIG9iamVjdCBmb3IgdGhlIGNvbHVtbiBpbmZvcm1hdGlvbiBvYmplY3QgaW4gRGF0YVRhYmxlcy4gVGhpcyBvYmplY3QKCSAqIGlzIGhlbGQgaW4gdGhlIHNldHRpbmdzIGFvQ29sdW1ucyBhcnJheSBhbmQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB0aGF0CgkgKiBEYXRhVGFibGVzIG5lZWRzIGFib3V0IGVhY2ggaW5kaXZpZHVhbCBjb2x1bW4uCgkgKgoJICogTm90ZSB0aGF0IHRoaXMgb2JqZWN0IGlzIHJlbGF0ZWQgdG8ge0BsaW5rIERhdGFUYWJsZS5kZWZhdWx0cy5jb2x1bW59CgkgKiBidXQgdGhpcyBvbmUgaXMgdGhlIGludGVybmFsIGRhdGEgc3RvcmUgZm9yIERhdGFUYWJsZXMncyBjYWNoZSBvZiBjb2x1bW5zLgoJICogSXQgc2hvdWxkIE5PVCBiZSBtYW5pcHVsYXRlZCBvdXRzaWRlIG9mIERhdGFUYWJsZXMuIEFueSBjb25maWd1cmF0aW9uIHNob3VsZAoJICogYmUgZG9uZSB0aHJvdWdoIHRoZSBpbml0aWFsaXNhdGlvbiBvcHRpb25zLgoJICogIEBuYW1lc3BhY2UKCSAqLwoJRGF0YVRhYmxlLm1vZGVscy5vQ29sdW1uID0gewoJCS8qKgoJCSAqIENvbHVtbiBpbmRleC4gVGhpcyBjb3VsZCBiZSB3b3JrZWQgb3V0IG9uLXRoZS1mbHkgd2l0aCAkLmluQXJyYXksIGJ1dCBpdAoJCSAqIGlzIGZhc3RlciB0byBqdXN0IGhvbGQgaXQgYXMgYSB2YXJpYWJsZQoJCSAqICBAdHlwZSBpbnRlZ2VyCgkJICogIEBkZWZhdWx0IG51bGwKCQkgKi8KCQkiaWR4IjogbnVsbCwKCQoJCS8qKgoJCSAqIEEgbGlzdCBvZiB0aGUgY29sdW1ucyB0aGF0IHNvcnRpbmcgc2hvdWxkIG9jY3VyIG9uIHdoZW4gdGhpcyBjb2x1bW4KCQkgKiBpcyBzb3J0ZWQuIFRoYXQgdGhpcyBwcm9wZXJ0eSBpcyBhbiBhcnJheSBhbGxvd3MgbXVsdGktY29sdW1uIHNvcnRpbmcKCQkgKiB0byBiZSBkZWZpbmVkIGZvciBhIGNvbHVtbiAoZm9yIGV4YW1wbGUgZmlyc3QgbmFtZSAvIGxhc3QgbmFtZSBjb2x1bW5zCgkJICogd291bGQgYmVuZWZpdCBmcm9tIHRoaXMpLiBUaGUgdmFsdWVzIGFyZSBpbnRlZ2VycyBwb2ludGluZyB0byB0aGUKCQkgKiBjb2x1bW5zIHRvIGJlIHNvcnRlZCBvbiAodHlwaWNhbGx5IGl0IHdpbGwgYmUgYSBzaW5nbGUgaW50ZWdlciBwb2ludGluZwoJCSAqIGF0IGl0c2VsZiwgYnV0IHRoYXQgZG9lc24ndCBuZWVkIHRvIGJlIHRoZSBjYXNlKS4KCQkgKiAgQHR5cGUgYXJyYXkKCQkgKi8KCQkiYURhdGFTb3J0IjogbnVsbCwKCQoJCS8qKgoJCSAqIERlZmluZSB0aGUgc29ydGluZyBkaXJlY3Rpb25zIHRoYXQgYXJlIGFwcGxpZWQgdG8gdGhlIGNvbHVtbiwgaW4gc2VxdWVuY2UKCQkgKiBhcyB0aGUgY29sdW1uIGlzIHJlcGVhdGVkbHkgc29ydGVkIHVwb24gLSBpLmUuIHRoZSBmaXJzdCB2YWx1ZSBpcyB1c2VkCgkJICogYXMgdGhlIHNvcnRpbmcgZGlyZWN0aW9uIHdoZW4gdGhlIGNvbHVtbiBpZiBmaXJzdCBzb3J0ZWQgKGNsaWNrZWQgb24pLgoJCSAqIFNvcnQgaXQgYWdhaW4gKGNsaWNrIGFnYWluKSBhbmQgaXQgd2lsbCBtb3ZlIG9uIHRvIHRoZSBuZXh0IGluZGV4LgoJCSAqIFJlcGVhdCB1bnRpbCBsb29wLgoJCSAqICBAdHlwZSBhcnJheQoJCSAqLwoJCSJhc1NvcnRpbmciOiBudWxsLAoJCgkJLyoqCgkJICogRmxhZyB0byBpbmRpY2F0ZSBpZiB0aGUgY29sdW1uIGlzIHNlYXJjaGFibGUsIGFuZCB0aHVzIHNob3VsZCBiZSBpbmNsdWRlZAoJCSAqIGluIHRoZSBmaWx0ZXJpbmcgb3Igbm90LgoJCSAqICBAdHlwZSBib29sZWFuCgkJICovCgkJImJTZWFyY2hhYmxlIjogbnVsbCwKCQoJCS8qKgoJCSAqIEZsYWcgdG8gaW5kaWNhdGUgaWYgdGhlIGNvbHVtbiBpcyBzb3J0YWJsZSBvciBub3QuCgkJICogIEB0eXBlIGJvb2xlYW4KCQkgKi8KCQkiYlNvcnRhYmxlIjogbnVsbCwKCQoJCS8qKgoJCSAqIEZsYWcgdG8gaW5kaWNhdGUgaWYgdGhlIGNvbHVtbiBpcyBjdXJyZW50bHkgdmlzaWJsZSBpbiB0aGUgdGFibGUgb3Igbm90CgkJICogIEB0eXBlIGJvb2xlYW4KCQkgKi8KCQkiYlZpc2libGUiOiBudWxsLAoJCgkJLyoqCgkJICogU3RvcmUgZm9yIG1hbnVhbCB0eXBlIGFzc2lnbm1lbnQgdXNpbmcgdGhlIGBjb2x1bW4udHlwZWAgb3B0aW9uLiBUaGlzCgkJICogaXMgaGVsZCBpbiBzdG9yZSBzbyB3ZSBjYW4gbWFuaXB1bGF0ZSB0aGUgY29sdW1uJ3MgYHNUeXBlYCBwcm9wZXJ0eS4KCQkgKiAgQHR5cGUgc3RyaW5nCgkJICogIEBkZWZhdWx0IG51bGwKCQkgKiAgQHByaXZhdGUKCQkgKi8KCQkiX3NNYW51YWxUeXBlIjogbnVsbCwKCQoJCS8qKgoJCSAqIEZsYWcgdG8gaW5kaWNhdGUgaWYgSFRNTDUgZGF0YSBhdHRyaWJ1dGVzIHNob3VsZCBiZSB1c2VkIGFzIHRoZSBkYXRhCgkJICogc291cmNlIGZvciBmaWx0ZXJpbmcgb3Igc29ydGluZy4gVHJ1ZSBpcyBlaXRoZXIgYXJlLgoJCSAqICBAdHlwZSBib29sZWFuCgkJICogIEBkZWZhdWx0IGZhbHNlCgkJICogIEBwcml2YXRlCgkJICovCgkJIl9iQXR0clNyYyI6IGZhbHNlLAoJCgkJLyoqCgkJICogRGV2ZWxvcGVyIGRlZmluYWJsZSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuZXZlciBhIGNlbGwgaXMgY3JlYXRlZCAoQWpheCBzb3VyY2UsCgkJICogZXRjKSBvciBwcm9jZXNzZWQgZm9yIGlucHV0IChET00gc291cmNlKS4gVGhpcyBjYW4gYmUgdXNlZCBhcyBhIGNvbXBsaW1lbnQgdG8gbVJlbmRlcgoJCSAqIGFsbG93aW5nIHlvdSB0byBtb2RpZnkgdGhlIERPTSBlbGVtZW50IChhZGQgYmFja2dyb3VuZCBjb2xvdXIgZm9yIGV4YW1wbGUpIHdoZW4gdGhlCgkJICogZWxlbWVudCBpcyBhdmFpbGFibGUuCgkJICogIEB0eXBlIGZ1bmN0aW9uCgkJICogIEBwYXJhbSB7ZWxlbWVudH0gblRkIFRoZSBURCBub2RlIHRoYXQgaGFzIGJlZW4gY3JlYXRlZAoJCSAqICBAcGFyYW0geyp9IHNEYXRhIFRoZSBEYXRhIGZvciB0aGUgY2VsbAoJCSAqICBAcGFyYW0ge2FycmF5fG9iamVjdH0gb0RhdGEgVGhlIGRhdGEgZm9yIHRoZSB3aG9sZSByb3cKCQkgKiAgQHBhcmFtIHtpbnR9IGlSb3cgVGhlIHJvdyBpbmRleCBmb3IgdGhlIGFvRGF0YSBkYXRhIHN0b3JlCgkJICogIEBkZWZhdWx0IG51bGwKCQkgKi8KCQkiZm5DcmVhdGVkQ2VsbCI6IG51bGwsCgkKCQkvKioKCQkgKiBGdW5jdGlvbiB0byBnZXQgZGF0YSBmcm9tIGEgY2VsbCBpbiBhIGNvbHVtbi4gWW91IHNob3VsZCA8Yj5uZXZlcjwvYj4KCQkgKiBhY2Nlc3MgZGF0YSBkaXJlY3RseSB0aHJvdWdoIF9hRGF0YSBpbnRlcm5hbGx5IGluIERhdGFUYWJsZXMgLSBhbHdheXMgdXNlCgkJICogdGhlIG1ldGhvZCBhdHRhY2hlZCB0byB0aGlzIHByb3BlcnR5LiBJdCBhbGxvd3MgbURhdGEgdG8gZnVuY3Rpb24gYXMKCQkgKiByZXF1aXJlZC4gVGhpcyBmdW5jdGlvbiBpcyBhdXRvbWF0aWNhbGx5IGFzc2lnbmVkIGJ5IHRoZSBjb2x1bW4KCQkgKiBpbml0aWFsaXNhdGlvbiBtZXRob2QKCQkgKiAgQHR5cGUgZnVuY3Rpb24KCQkgKiAgQHBhcmFtIHthcnJheXxvYmplY3R9IG9EYXRhIFRoZSBkYXRhIGFycmF5L29iamVjdCBmb3IgdGhlIGFycmF5CgkJICogICAgKGkuZS4gYW9EYXRhW10uX2FEYXRhKQoJCSAqICBAcGFyYW0ge3N0cmluZ30gc1NwZWNpZmljIFRoZSBzcGVjaWZpYyBkYXRhIHR5cGUgeW91IHdhbnQgdG8gZ2V0IC0KCQkgKiAgICAnZGlzcGxheScsICd0eXBlJyAnZmlsdGVyJyAnc29ydCcKCQkgKiAgQHJldHVybnMgeyp9IFRoZSBkYXRhIGZvciB0aGUgY2VsbCBmcm9tIHRoZSBnaXZlbiByb3cncyBkYXRhCgkJICogIEBkZWZhdWx0IG51bGwKCQkgKi8KCQkiZm5HZXREYXRhIjogbnVsbCwKCQoJCS8qKgoJCSAqIEZ1bmN0aW9uIHRvIHNldCBkYXRhIGZvciBhIGNlbGwgaW4gdGhlIGNvbHVtbi4gWW91IHNob3VsZCA8Yj5uZXZlcjwvYj4KCQkgKiBzZXQgdGhlIGRhdGEgZGlyZWN0bHkgdG8gX2FEYXRhIGludGVybmFsbHkgaW4gRGF0YVRhYmxlcyAtIGFsd2F5cyB1c2UKCQkgKiB0aGlzIG1ldGhvZC4gSXQgYWxsb3dzIG1EYXRhIHRvIGZ1bmN0aW9uIGFzIHJlcXVpcmVkLiBUaGlzIGZ1bmN0aW9uCgkJICogaXMgYXV0b21hdGljYWxseSBhc3NpZ25lZCBieSB0aGUgY29sdW1uIGluaXRpYWxpc2F0aW9uIG1ldGhvZAoJCSAqICBAdHlwZSBmdW5jdGlvbgoJCSAqICBAcGFyYW0ge2FycmF5fG9iamVjdH0gb0RhdGEgVGhlIGRhdGEgYXJyYXkvb2JqZWN0IGZvciB0aGUgYXJyYXkKCQkgKiAgICAoaS5lLiBhb0RhdGFbXS5fYURhdGEpCgkJICogIEBwYXJhbSB7Kn0gc1ZhbHVlIFZhbHVlIHRvIHNldAoJCSAqICBAZGVmYXVsdCBudWxsCgkJICovCgkJImZuU2V0RGF0YSI6IG51bGwsCgkKCQkvKioKCQkgKiBQcm9wZXJ0eSB0byByZWFkIHRoZSB2YWx1ZSBmb3IgdGhlIGNlbGxzIGluIHRoZSBjb2x1bW4gZnJvbSB0aGUgZGF0YQoJCSAqIHNvdXJjZSBhcnJheSAvIG9iamVjdC4gSWYgbnVsbCwgdGhlbiB0aGUgZGVmYXVsdCBjb250ZW50IGlzIHVzZWQsIGlmIGEKCQkgKiBmdW5jdGlvbiBpcyBnaXZlbiB0aGVuIHRoZSByZXR1cm4gZnJvbSB0aGUgZnVuY3Rpb24gaXMgdXNlZC4KCQkgKiAgQHR5cGUgZnVuY3Rpb258aW50fHN0cmluZ3xudWxsCgkJICogIEBkZWZhdWx0IG51bGwKCQkgKi8KCQkibURhdGEiOiBudWxsLAoJCgkJLyoqCgkJICogUGFydG5lciBwcm9wZXJ0eSB0byBtRGF0YSB3aGljaCBpcyB1c2VkIChvbmx5IHdoZW4gZGVmaW5lZCkgdG8gZ2V0CgkJICogdGhlIGRhdGEgLSBpLmUuIGl0IGlzIGJhc2ljYWxseSB0aGUgc2FtZSBhcyBtRGF0YSwgYnV0IHdpdGhvdXQgdGhlCgkJICogJ3NldCcgb3B0aW9uLCBhbmQgYWxzbyB0aGUgZGF0YSBmZWQgdG8gaXQgaXMgdGhlIHJlc3VsdCBmcm9tIG1EYXRhLgoJCSAqIFRoaXMgaXMgdGhlIHJlbmRlcmluZyBtZXRob2QgdG8gbWF0Y2ggdGhlIGRhdGEgbWV0aG9kIG9mIG1EYXRhLgoJCSAqICBAdHlwZSBmdW5jdGlvbnxpbnR8c3RyaW5nfG51bGwKCQkgKiAgQGRlZmF1bHQgbnVsbAoJCSAqLwoJCSJtUmVuZGVyIjogbnVsbCwKCQoJCS8qKgoJCSAqIFVuaXF1ZSBoZWFkZXIgVEgvVEQgZWxlbWVudCBmb3IgdGhpcyBjb2x1bW4gLSB0aGlzIGlzIHdoYXQgdGhlIHNvcnRpbmcKCQkgKiBsaXN0ZW5lciBpcyBhdHRhY2hlZCB0byAoaWYgc29ydGluZyBpcyBlbmFibGVkLikKCQkgKiAgQHR5cGUgbm9kZQoJCSAqICBAZGVmYXVsdCBudWxsCgkJICovCgkJIm5UaCI6IG51bGwsCgkKCQkvKioKCQkgKiBVbmlxdWUgZm9vdGVyIFRIL1REIGVsZW1lbnQgZm9yIHRoaXMgY29sdW1uIChpZiB0aGVyZSBpcyBvbmUpLiBOb3QgdXNlZAoJCSAqIGluIERhdGFUYWJsZXMgYXMgc3VjaCwgYnV0IGNhbiBiZSB1c2VkIGZvciBwbHVnLWlucyB0byByZWZlcmVuY2UgdGhlCgkJICogZm9vdGVyIGZvciBlYWNoIGNvbHVtbi4KCQkgKiAgQHR5cGUgbm9kZQoJCSAqICBAZGVmYXVsdCBudWxsCgkJICovCgkJIm5UZiI6IG51bGwsCgkKCQkvKioKCQkgKiBUaGUgY2xhc3MgdG8gYXBwbHkgdG8gYWxsIFREIGVsZW1lbnRzIGluIHRoZSB0YWJsZSdzIFRCT0RZIGZvciB0aGUgY29sdW1uCgkJICogIEB0eXBlIHN0cmluZwoJCSAqICBAZGVmYXVsdCBudWxsCgkJICovCgkJInNDbGFzcyI6IG51bGwsCgkKCQkvKioKCQkgKiBXaGVuIERhdGFUYWJsZXMgY2FsY3VsYXRlcyB0aGUgY29sdW1uIHdpZHRocyB0byBhc3NpZ24gdG8gZWFjaCBjb2x1bW4sCgkJICogaXQgZmluZHMgdGhlIGxvbmdlc3Qgc3RyaW5nIGluIGVhY2ggY29sdW1uIGFuZCB0aGVuIGNvbnN0cnVjdHMgYQoJCSAqIHRlbXBvcmFyeSB0YWJsZSBhbmQgcmVhZHMgdGhlIHdpZHRocyBmcm9tIHRoYXQuIFRoZSBwcm9ibGVtIHdpdGggdGhpcwoJCSAqIGlzIHRoYXQgIm1tbSIgaXMgbXVjaCB3aWRlciB0aGVuICJpaWlpIiwgYnV0IHRoZSBsYXR0ZXIgaXMgYSBsb25nZXIKCQkgKiBzdHJpbmcgLSB0aHVzIHRoZSBjYWxjdWxhdGlvbiBjYW4gZ28gd3JvbmcgKGRvaW5nIGl0IHByb3Blcmx5IGFuZCBwdXR0aW5nCgkJICogaXQgaW50byBhbiBET00gb2JqZWN0IGFuZCBtZWFzdXJpbmcgdGhhdCBpcyBob3JyaWJseSghKSBzbG93KS4gVGh1cyBhcwoJCSAqIGEgIndvcmsgYXJvdW5kIiB3ZSBwcm92aWRlIHRoaXMgb3B0aW9uLiBJdCB3aWxsIGFwcGVuZCBpdHMgdmFsdWUgdG8gdGhlCgkJICogdGV4dCB0aGF0IGlzIGZvdW5kIHRvIGJlIHRoZSBsb25nZXN0IHN0cmluZyBmb3IgdGhlIGNvbHVtbiAtIGkuZS4gcGFkZGluZy4KCQkgKiAgQHR5cGUgc3RyaW5nCgkJICovCgkJInNDb250ZW50UGFkZGluZyI6IG51bGwsCgkKCQkvKioKCQkgKiBBbGxvd3MgYSBkZWZhdWx0IHZhbHVlIHRvIGJlIGdpdmVuIGZvciBhIGNvbHVtbidzIGRhdGEsIGFuZCB3aWxsIGJlIHVzZWQKCQkgKiB3aGVuZXZlciBhIG51bGwgZGF0YSBzb3VyY2UgaXMgZW5jb3VudGVyZWQgKHRoaXMgY2FuIGJlIGJlY2F1c2UgbURhdGEKCQkgKiBpcyBzZXQgdG8gbnVsbCwgb3IgYmVjYXVzZSB0aGUgZGF0YSBzb3VyY2UgaXRzZWxmIGlzIG51bGwpLgoJCSAqICBAdHlwZSBzdHJpbmcKCQkgKiAgQGRlZmF1bHQgbnVsbAoJCSAqLwoJCSJzRGVmYXVsdENvbnRlbnQiOiBudWxsLAoJCgkJLyoqCgkJICogTmFtZSBmb3IgdGhlIGNvbHVtbiwgYWxsb3dpbmcgcmVmZXJlbmNlIHRvIHRoZSBjb2x1bW4gYnkgbmFtZSBhcyB3ZWxsIGFzCgkJICogYnkgaW5kZXggKG5lZWRzIGEgbG9va3VwIHRvIHdvcmsgYnkgbmFtZSkuCgkJICogIEB0eXBlIHN0cmluZwoJCSAqLwoJCSJzTmFtZSI6IG51bGwsCgkKCQkvKioKCQkgKiBDdXN0b20gc29ydGluZyBkYXRhIHR5cGUgLSBkZWZpbmVzIHdoaWNoIG9mIHRoZSBhdmFpbGFibGUgcGx1Zy1pbnMgaW4KCQkgKiBhZm5Tb3J0RGF0YSB0aGUgY3VzdG9tIHNvcnRpbmcgd2lsbCB1c2UgLSBpZiBhbnkgaXMgZGVmaW5lZC4KCQkgKiAgQHR5cGUgc3RyaW5nCgkJICogIEBkZWZhdWx0IHN0ZAoJCSAqLwoJCSJzU29ydERhdGFUeXBlIjogJ3N0ZCcsCgkKCQkvKioKCQkgKiBDbGFzcyB0byBiZSBhcHBsaWVkIHRvIHRoZSBoZWFkZXIgZWxlbWVudCB3aGVuIHNvcnRpbmcgb24gdGhpcyBjb2x1bW4KCQkgKiAgQHR5cGUgc3RyaW5nCgkJICogIEBkZWZhdWx0IG51bGwKCQkgKi8KCQkic1NvcnRpbmdDbGFzcyI6IG51bGwsCgkKCQkvKioKCQkgKiBDbGFzcyB0byBiZSBhcHBsaWVkIHRvIHRoZSBoZWFkZXIgZWxlbWVudCB3aGVuIHNvcnRpbmcgb24gdGhpcyBjb2x1bW4gLQoJCSAqIHdoZW4galF1ZXJ5IFVJIHRoZW1pbmcgaXMgdXNlZC4KCQkgKiAgQHR5cGUgc3RyaW5nCgkJICogIEBkZWZhdWx0IG51bGwKCQkgKi8KCQkic1NvcnRpbmdDbGFzc0pVSSI6IG51bGwsCgkKCQkvKioKCQkgKiBUaXRsZSBvZiB0aGUgY29sdW1uIC0gd2hhdCBpcyBzZWVuIGluIHRoZSBUSCBlbGVtZW50IChuVGgpLgoJCSAqICBAdHlwZSBzdHJpbmcKCQkgKi8KCQkic1RpdGxlIjogbnVsbCwKCQoJCS8qKgoJCSAqIENvbHVtbiBzb3J0aW5nIGFuZCBmaWx0ZXJpbmcgdHlwZQoJCSAqICBAdHlwZSBzdHJpbmcKCQkgKiAgQGRlZmF1bHQgbnVsbAoJCSAqLwoJCSJzVHlwZSI6IG51bGwsCgkKCQkvKioKCQkgKiBXaWR0aCBvZiB0aGUgY29sdW1uCgkJICogIEB0eXBlIHN0cmluZwoJCSAqICBAZGVmYXVsdCBudWxsCgkJICovCgkJInNXaWR0aCI6IG51bGwsCgkKCQkvKioKCQkgKiBXaWR0aCBvZiB0aGUgY29sdW1uIHdoZW4gaXQgd2FzIGZpcnN0ICJlbmNvdW50ZXJlZCIKCQkgKiAgQHR5cGUgc3RyaW5nCgkJICogIEBkZWZhdWx0IG51bGwKCQkgKi8KCQkic1dpZHRoT3JpZyI6IG51bGwKCX07CgkKCQoJLyoKCSAqIERldmVsb3BlciBub3RlOiBUaGUgcHJvcGVydGllcyBvZiB0aGUgb2JqZWN0IGJlbG93IGFyZSBnaXZlbiBpbiBIdW5nYXJpYW4KCSAqIG5vdGF0aW9uLCB0aGF0IHdhcyB1c2VkIGFzIHRoZSBpbnRlcmZhY2UgZm9yIERhdGFUYWJsZXMgcHJpb3IgdG8gdjEuMTAsIGhvd2V2ZXIKCSAqIGZyb20gdjEuMTAgb253YXJkcyB0aGUgcHJpbWFyeSBpbnRlcmZhY2UgaXMgY2FtZWwgY2FzZS4gSW4gb3JkZXIgdG8gYXZvaWQKCSAqIGJyZWFraW5nIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHV0dGVybHkgd2l0aCB0aGlzIGNoYW5nZSwgdGhlIEh1bmdhcmlhbgoJICogdmVyc2lvbiBpcyBzdGlsbCwgaW50ZXJuYWxseSB0aGUgcHJpbWFyeSBpbnRlcmZhY2UsIGJ1dCBpcyBpcyBub3QgZG9jdW1lbnRlZAoJICogLSBoZW5jZSB0aGUgQG5hbWUgdGFncyBpbiBlYWNoIGRvYyBjb21tZW50LiBUaGlzIGFsbG93cyBhIEphdmFzY3JpcHQgZnVuY3Rpb24KCSAqIHRvIGNyZWF0ZSBhIG1hcCBmcm9tIEh1bmdhcmlhbiBub3RhdGlvbiB0byBjYW1lbCBjYXNlIChnb2luZyB0aGUgb3RoZXIgZGlyZWN0aW9uCgkgKiB3b3VsZCByZXF1aXJlIGVhY2ggcHJvcGVydHkgdG8gYmUgbGlzdGVkLCB3aGljaCB3b3VsZCBhdCBhcm91bmQgM0sgdG8gdGhlIHNpemUKCSAqIG9mIERhdGFUYWJsZXMsIHdoaWxlIHRoaXMgbWV0aG9kIGlzIGFib3V0IGEgMC41SyBoaXQuCgkgKgoJICogVWx0aW1hdGVseSB0aGlzIGRvZXMgcGF2ZSB0aGUgd2F5IGZvciBIdW5nYXJpYW4gbm90YXRpb24gdG8gYmUgZHJvcHBlZAoJICogY29tcGxldGVseSwgYnV0IHRoYXQgaXMgYSBtYXNzaXZlIGFtb3VudCBvZiB3b3JrIGFuZCB3aWxsIGJyZWFrIGN1cnJlbnQKCSAqIGluc3RhbGxzICh0aGVyZWZvcmUgaXMgb24taG9sZCB1bnRpbCB2MikuCgkgKi8KCQoJLyoqCgkgKiBJbml0aWFsaXNhdGlvbiBvcHRpb25zIHRoYXQgY2FuIGJlIGdpdmVuIHRvIERhdGFUYWJsZXMgYXQgaW5pdGlhbGlzYXRpb24KCSAqIHRpbWUuCgkgKiAgQG5hbWVzcGFjZQoJICovCglEYXRhVGFibGUuZGVmYXVsdHMgPSB7CgkJLyoqCgkJICogQW4gYXJyYXkgb2YgZGF0YSB0byB1c2UgZm9yIHRoZSB0YWJsZSwgcGFzc2VkIGluIGF0IGluaXRpYWxpc2F0aW9uIHdoaWNoCgkJICogd2lsbCBiZSB1c2VkIGluIHByZWZlcmVuY2UgdG8gYW55IGRhdGEgd2hpY2ggaXMgYWxyZWFkeSBpbiB0aGUgRE9NLiBUaGlzIGlzCgkJICogcGFydGljdWxhcmx5IHVzZWZ1bCBmb3IgY29uc3RydWN0aW5nIHRhYmxlcyBwdXJlbHkgaW4gSmF2YXNjcmlwdCwgZm9yCgkJICogZXhhbXBsZSB3aXRoIGEgY3VzdG9tIEFqYXggY2FsbC4KCQkgKiAgQHR5cGUgYXJyYXkKCQkgKiAgQGRlZmF1bHQgbnVsbAoJCSAqCgkJICogIEBkdG9wdCBPcHRpb24KCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLmRhdGEKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgIC8vIFVzaW5nIGEgMkQgYXJyYXkgZGF0YSBzb3VyY2UKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24gKCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgICAgImRhdGEiOiBbCgkJICogICAgICAgICAgWydUcmlkZW50JywgJ0ludGVybmV0IEV4cGxvcmVyIDQuMCcsICdXaW4gOTUrJywgNCwgJ1gnXSwKCQkgKiAgICAgICAgICBbJ1RyaWRlbnQnLCAnSW50ZXJuZXQgRXhwbG9yZXIgNS4wJywgJ1dpbiA5NSsnLCA1LCAnQyddLAoJCSAqICAgICAgICBdLAoJCSAqICAgICAgICAiY29sdW1ucyI6IFsKCQkgKiAgICAgICAgICB7ICJ0aXRsZSI6ICJFbmdpbmUiIH0sCgkJICogICAgICAgICAgeyAidGl0bGUiOiAiQnJvd3NlciIgfSwKCQkgKiAgICAgICAgICB7ICJ0aXRsZSI6ICJQbGF0Zm9ybSIgfSwKCQkgKiAgICAgICAgICB7ICJ0aXRsZSI6ICJWZXJzaW9uIiB9LAoJCSAqICAgICAgICAgIHsgInRpdGxlIjogIkdyYWRlIiB9CgkJICogICAgICAgIF0KCQkgKiAgICAgIH0gKTsKCQkgKiAgICB9ICk7CgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAvLyBVc2luZyBhbiBhcnJheSBvZiBvYmplY3RzIGFzIGEgZGF0YSBzb3VyY2UgKGBkYXRhYCkKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24gKCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgICAgImRhdGEiOiBbCgkJICogICAgICAgICAgewoJCSAqICAgICAgICAgICAgImVuZ2luZSI6ICAgIlRyaWRlbnQiLAoJCSAqICAgICAgICAgICAgImJyb3dzZXIiOiAgIkludGVybmV0IEV4cGxvcmVyIDQuMCIsCgkJICogICAgICAgICAgICAicGxhdGZvcm0iOiAiV2luIDk1KyIsCgkJICogICAgICAgICAgICAidmVyc2lvbiI6ICA0LAoJCSAqICAgICAgICAgICAgImdyYWRlIjogICAgIlgiCgkJICogICAgICAgICAgfSwKCQkgKiAgICAgICAgICB7CgkJICogICAgICAgICAgICAiZW5naW5lIjogICAiVHJpZGVudCIsCgkJICogICAgICAgICAgICAiYnJvd3NlciI6ICAiSW50ZXJuZXQgRXhwbG9yZXIgNS4wIiwKCQkgKiAgICAgICAgICAgICJwbGF0Zm9ybSI6ICJXaW4gOTUrIiwKCQkgKiAgICAgICAgICAgICJ2ZXJzaW9uIjogIDUsCgkJICogICAgICAgICAgICAiZ3JhZGUiOiAgICAiQyIKCQkgKiAgICAgICAgICB9CgkJICogICAgICAgIF0sCgkJICogICAgICAgICJjb2x1bW5zIjogWwoJCSAqICAgICAgICAgIHsgInRpdGxlIjogIkVuZ2luZSIsICAgImRhdGEiOiAiZW5naW5lIiB9LAoJCSAqICAgICAgICAgIHsgInRpdGxlIjogIkJyb3dzZXIiLCAgImRhdGEiOiAiYnJvd3NlciIgfSwKCQkgKiAgICAgICAgICB7ICJ0aXRsZSI6ICJQbGF0Zm9ybSIsICJkYXRhIjogInBsYXRmb3JtIiB9LAoJCSAqICAgICAgICAgIHsgInRpdGxlIjogIlZlcnNpb24iLCAgImRhdGEiOiAidmVyc2lvbiIgfSwKCQkgKiAgICAgICAgICB7ICJ0aXRsZSI6ICJHcmFkZSIsICAgICJkYXRhIjogImdyYWRlIiB9CgkJICogICAgICAgIF0KCQkgKiAgICAgIH0gKTsKCQkgKiAgICB9ICk7CgkJICovCgkJImFhRGF0YSI6IG51bGwsCgkKCQoJCS8qKgoJCSAqIElmIG9yZGVyaW5nIGlzIGVuYWJsZWQsIHRoZW4gRGF0YVRhYmxlcyB3aWxsIHBlcmZvcm0gYSBmaXJzdCBwYXNzIHNvcnQgb24KCQkgKiBpbml0aWFsaXNhdGlvbi4gWW91IGNhbiBkZWZpbmUgd2hpY2ggY29sdW1uKHMpIHRoZSBzb3J0IGlzIHBlcmZvcm1lZAoJCSAqIHVwb24sIGFuZCB0aGUgc29ydGluZyBkaXJlY3Rpb24sIHdpdGggdGhpcyB2YXJpYWJsZS4gVGhlIGBzb3J0aW5nYCBhcnJheQoJCSAqIHNob3VsZCBjb250YWluIGFuIGFycmF5IGZvciBlYWNoIGNvbHVtbiB0byBiZSBzb3J0ZWQgaW5pdGlhbGx5IGNvbnRhaW5pbmcKCQkgKiB0aGUgY29sdW1uJ3MgaW5kZXggYW5kIGEgZGlyZWN0aW9uIHN0cmluZyAoJ2FzYycgb3IgJ2Rlc2MnKS4KCQkgKiAgQHR5cGUgYXJyYXkKCQkgKiAgQGRlZmF1bHQgW1swLCdhc2MnXV0KCQkgKgoJCSAqICBAZHRvcHQgT3B0aW9uCgkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5vcmRlcgoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgLy8gU29ydCBieSAzcmQgY29sdW1uIGZpcnN0LCBhbmQgdGhlbiA0dGggY29sdW1uCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uKCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgICAgIm9yZGVyIjogW1syLCdhc2MnXSwgWzMsJ2Rlc2MnXV0KCQkgKiAgICAgIH0gKTsKCQkgKiAgICB9ICk7CgkJICoKCQkgKiAgICAvLyBObyBpbml0aWFsIHNvcnRpbmcKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24oKSB7CgkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCSAqICAgICAgICAib3JkZXIiOiBbXQoJCSAqICAgICAgfSApOwoJCSAqICAgIH0gKTsKCQkgKi8KCQkiYWFTb3J0aW5nIjogW1swLCdhc2MnXV0sCgkKCQoJCS8qKgoJCSAqIFRoaXMgcGFyYW1ldGVyIGlzIGJhc2ljYWxseSBpZGVudGljYWwgdG8gdGhlIGBzb3J0aW5nYCBwYXJhbWV0ZXIsIGJ1dAoJCSAqIGNhbm5vdCBiZSBvdmVycmlkZGVuIGJ5IHVzZXIgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdGFibGUuIFdoYXQgdGhpcyBtZWFucwoJCSAqIGlzIHRoYXQgeW91IGNvdWxkIGhhdmUgYSBjb2x1bW4gKHZpc2libGUgb3IgaGlkZGVuKSB3aGljaCB0aGUgc29ydGluZwoJCSAqIHdpbGwgYWx3YXlzIGJlIGZvcmNlZCBvbiBmaXJzdCAtIGFueSBzb3J0aW5nIGFmdGVyIHRoYXQgKGZyb20gdGhlIHVzZXIpCgkJICogd2lsbCB0aGVuIGJlIHBlcmZvcm1lZCBhcyByZXF1aXJlZC4gVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBncm91cGluZyByb3dzCgkJICogdG9nZXRoZXIuCgkJICogIEB0eXBlIGFycmF5CgkJICogIEBkZWZhdWx0IG51bGwKCQkgKgoJCSAqICBAZHRvcHQgT3B0aW9uCgkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5vcmRlckZpeGVkCgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24oKSB7CgkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCSAqICAgICAgICAib3JkZXJGaXhlZCI6IFtbMCwnYXNjJ11dCgkJICogICAgICB9ICk7CgkJICogICAgfSApCgkJICovCgkJImFhU29ydGluZ0ZpeGVkIjogW10sCgkKCQoJCS8qKgoJCSAqIERhdGFUYWJsZXMgY2FuIGJlIGluc3RydWN0ZWQgdG8gbG9hZCBkYXRhIHRvIGRpc3BsYXkgaW4gdGhlIHRhYmxlIGZyb20gYQoJCSAqIEFqYXggc291cmNlLiBUaGlzIG9wdGlvbiBkZWZpbmVzIGhvdyB0aGF0IEFqYXggY2FsbCBpcyBtYWRlIGFuZCB3aGVyZSB0by4KCQkgKgoJCSAqIFRoZSBgYWpheGAgcHJvcGVydHkgaGFzIHRocmVlIGRpZmZlcmVudCBtb2RlcyBvZiBvcGVyYXRpb24sIGRlcGVuZGluZyBvbgoJCSAqIGhvdyBpdCBpcyBkZWZpbmVkLiBUaGVzZSBhcmU6CgkJICoKCQkgKiAqIGBzdHJpbmdgIC0gU2V0IHRoZSBVUkwgZnJvbSB3aGVyZSB0aGUgZGF0YSBzaG91bGQgYmUgbG9hZGVkIGZyb20uCgkJICogKiBgb2JqZWN0YCAtIERlZmluZSBwcm9wZXJ0aWVzIGZvciBgalF1ZXJ5LmFqYXhgLgoJCSAqICogYGZ1bmN0aW9uYCAtIEN1c3RvbSBkYXRhIGdldCBmdW5jdGlvbgoJCSAqCgkJICogYHN0cmluZ2AKCQkgKiAtLS0tLS0tLQoJCSAqCgkJICogQXMgYSBzdHJpbmcsIHRoZSBgYWpheGAgcHJvcGVydHkgc2ltcGx5IGRlZmluZXMgdGhlIFVSTCBmcm9tIHdoaWNoCgkJICogRGF0YVRhYmxlcyB3aWxsIGxvYWQgZGF0YS4KCQkgKgoJCSAqIGBvYmplY3RgCgkJICogLS0tLS0tLS0KCQkgKgoJCSAqIEFzIGFuIG9iamVjdCwgdGhlIHBhcmFtZXRlcnMgaW4gdGhlIG9iamVjdCBhcmUgcGFzc2VkIHRvCgkJICogW2pRdWVyeS5hamF4XShodHRwOi8vYXBpLmpxdWVyeS5jb20valF1ZXJ5LmFqYXgvKSBhbGxvd2luZyBmaW5lIGNvbnRyb2wKCQkgKiBvZiB0aGUgQWpheCByZXF1ZXN0LiBEYXRhVGFibGVzIGhhcyBhIG51bWJlciBvZiBkZWZhdWx0IHBhcmFtZXRlcnMgd2hpY2gKCQkgKiB5b3UgY2FuIG92ZXJyaWRlIHVzaW5nIHRoaXMgb3B0aW9uLiBQbGVhc2UgcmVmZXIgdG8gdGhlIGpRdWVyeQoJCSAqIGRvY3VtZW50YXRpb24gZm9yIGEgZnVsbCBkZXNjcmlwdGlvbiBvZiB0aGUgb3B0aW9ucyBhdmFpbGFibGUsIGFsdGhvdWdoCgkJICogdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIHByb3ZpZGUgYWRkaXRpb25hbCBvcHRpb25zIGluIERhdGFUYWJsZXMgb3IKCQkgKiByZXF1aXJlIHNwZWNpYWwgY29uc2lkZXJhdGlvbjoKCQkgKgoJCSAqICogYGRhdGFgIC0gQXMgd2l0aCBqUXVlcnksIGBkYXRhYCBjYW4gYmUgcHJvdmlkZWQgYXMgYW4gb2JqZWN0LCBidXQgaXQKCQkgKiAgIGNhbiBhbHNvIGJlIHVzZWQgYXMgYSBmdW5jdGlvbiB0byBtYW5pcHVsYXRlIHRoZSBkYXRhIERhdGFUYWJsZXMgc2VuZHMKCQkgKiAgIHRvIHRoZSBzZXJ2ZXIuIFRoZSBmdW5jdGlvbiB0YWtlcyBhIHNpbmdsZSBwYXJhbWV0ZXIsIGFuIG9iamVjdCBvZgoJCSAqICAgcGFyYW1ldGVycyB3aXRoIHRoZSB2YWx1ZXMgdGhhdCBEYXRhVGFibGVzIGhhcyByZWFkaWVkIGZvciBzZW5kaW5nLiBBbgoJCSAqICAgb2JqZWN0IG1heSBiZSByZXR1cm5lZCB3aGljaCB3aWxsIGJlIG1lcmdlZCBpbnRvIHRoZSBEYXRhVGFibGVzCgkJICogICBkZWZhdWx0cywgb3IgeW91IGNhbiBhZGQgdGhlIGl0ZW1zIHRvIHRoZSBvYmplY3QgdGhhdCB3YXMgcGFzc2VkIGluIGFuZAoJCSAqICAgbm90IHJldHVybiBhbnl0aGluZyBmcm9tIHRoZSBmdW5jdGlvbi4gVGhpcyBzdXBlcnNlZGVzIGBmblNlcnZlclBhcmFtc2AKCQkgKiAgIGZyb20gRGF0YVRhYmxlcyAxLjktLgoJCSAqCgkJICogKiBgZGF0YVNyY2AgLSBCeSBkZWZhdWx0IERhdGFUYWJsZXMgd2lsbCBsb29rIGZvciB0aGUgcHJvcGVydHkgYGRhdGFgIChvcgoJCSAqICAgYGFhRGF0YWAgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBEYXRhVGFibGVzIDEuOS0pIHdoZW4gb2J0YWluaW5nIGRhdGEKCQkgKiAgIGZyb20gYW4gQWpheCBzb3VyY2Ugb3IgZm9yIHNlcnZlci1zaWRlIHByb2Nlc3NpbmcgLSB0aGlzIHBhcmFtZXRlcgoJCSAqICAgYWxsb3dzIHRoYXQgcHJvcGVydHkgdG8gYmUgY2hhbmdlZC4gWW91IGNhbiB1c2UgSmF2YXNjcmlwdCBkb3R0ZWQKCQkgKiAgIG9iamVjdCBub3RhdGlvbiB0byBnZXQgYSBkYXRhIHNvdXJjZSBmb3IgbXVsdGlwbGUgbGV2ZWxzIG9mIG5lc3RpbmcsIG9yCgkJICogICBpdCBteSBiZSB1c2VkIGFzIGEgZnVuY3Rpb24uIEFzIGEgZnVuY3Rpb24gaXQgdGFrZXMgYSBzaW5nbGUgcGFyYW1ldGVyLAoJCSAqICAgdGhlIEpTT04gcmV0dXJuZWQgZnJvbSB0aGUgc2VydmVyLCB3aGljaCBjYW4gYmUgbWFuaXB1bGF0ZWQgYXMKCQkgKiAgIHJlcXVpcmVkLCB3aXRoIHRoZSByZXR1cm5lZCB2YWx1ZSBiZWluZyB0aGF0IHVzZWQgYnkgRGF0YVRhYmxlcyBhcyB0aGUKCQkgKiAgIGRhdGEgc291cmNlIGZvciB0aGUgdGFibGUuIFRoaXMgc3VwZXJzZWRlcyBgc0FqYXhEYXRhUHJvcGAgZnJvbQoJCSAqICAgRGF0YVRhYmxlcyAxLjktLgoJCSAqCgkJICogKiBgc3VjY2Vzc2AgLSBTaG91bGQgbm90IGJlIG92ZXJyaWRkZW4gaXQgaXMgdXNlZCBpbnRlcm5hbGx5IGluCgkJICogICBEYXRhVGFibGVzLiBUbyBtYW5pcHVsYXRlIC8gdHJhbnNmb3JtIHRoZSBkYXRhIHJldHVybmVkIGJ5IHRoZSBzZXJ2ZXIKCQkgKiAgIHVzZSBgYWpheC5kYXRhU3JjYCwgb3IgdXNlIGBhamF4YCBhcyBhIGZ1bmN0aW9uIChzZWUgYmVsb3cpLgoJCSAqCgkJICogYGZ1bmN0aW9uYAoJCSAqIC0tLS0tLS0tLS0KCQkgKgoJCSAqIEFzIGEgZnVuY3Rpb24sIG1ha2luZyB0aGUgQWpheCBjYWxsIGlzIGxlZnQgdXAgdG8geW91cnNlbGYgYWxsb3dpbmcKCQkgKiBjb21wbGV0ZSBjb250cm9sIG9mIHRoZSBBamF4IHJlcXVlc3QuIEluZGVlZCwgaWYgZGVzaXJlZCwgYSBtZXRob2Qgb3RoZXIKCQkgKiB0aGFuIEFqYXggY291bGQgYmUgdXNlZCB0byBvYnRhaW4gdGhlIHJlcXVpcmVkIGRhdGEsIHN1Y2ggYXMgV2ViIHN0b3JhZ2UKCQkgKiBvciBhbiBBSVIgZGF0YWJhc2UuCgkJICoKCQkgKiBUaGUgZnVuY3Rpb24gaXMgZ2l2ZW4gZm91ciBwYXJhbWV0ZXJzIGFuZCBubyByZXR1cm4gaXMgcmVxdWlyZWQuIFRoZQoJCSAqIHBhcmFtZXRlcnMgYXJlOgoJCSAqCgkJICogMS4gX29iamVjdF8gLSBEYXRhIHRvIHNlbmQgdG8gdGhlIHNlcnZlcgoJCSAqIDIuIF9mdW5jdGlvbl8gLSBDYWxsYmFjayBmdW5jdGlvbiB0aGF0IG11c3QgYmUgZXhlY3V0ZWQgd2hlbiB0aGUgcmVxdWlyZWQKCQkgKiAgICBkYXRhIGhhcyBiZWVuIG9idGFpbmVkLiBUaGF0IGRhdGEgc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoZSBjYWxsYmFjawoJCSAqICAgIGFzIHRoZSBvbmx5IHBhcmFtZXRlcgoJCSAqIDMuIF9vYmplY3RfIC0gRGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QgZm9yIHRoZSB0YWJsZQoJCSAqCgkJICogTm90ZSB0aGF0IHRoaXMgc3VwZXJzZWRlcyBgZm5TZXJ2ZXJEYXRhYCBmcm9tIERhdGFUYWJsZXMgMS45LS4KCQkgKgoJCSAqICBAdHlwZSBzdHJpbmd8b2JqZWN0fGZ1bmN0aW9uCgkJICogIEBkZWZhdWx0IG51bGwKCQkgKgoJCSAqICBAZHRvcHQgT3B0aW9uCgkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5hamF4CgkJICogIEBzaW5jZSAxLjEwLjAKCQkgKgoJCSAqIEBleGFtcGxlCgkJICogICAvLyBHZXQgSlNPTiBkYXRhIGZyb20gYSBmaWxlIHZpYSBBamF4LgoJCSAqICAgLy8gTm90ZSBEYXRhVGFibGVzIGV4cGVjdHMgZGF0YSBpbiB0aGUgZm9ybSBgeyBkYXRhOiBbIC4uLmRhdGEuLi4gXSB9YCBieSBkZWZhdWx0KS4KCQkgKiAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICJhamF4IjogImRhdGEuanNvbiIKCQkgKiAgIH0gKTsKCQkgKgoJCSAqIEBleGFtcGxlCgkJICogICAvLyBHZXQgSlNPTiBkYXRhIGZyb20gYSBmaWxlIHZpYSBBamF4LCB1c2luZyBgZGF0YVNyY2AgdG8gY2hhbmdlCgkJICogICAvLyBgZGF0YWAgdG8gYHRhYmxlRGF0YWAgKGkuZS4gYHsgdGFibGVEYXRhOiBbIC4uLmRhdGEuLi4gXSB9YCkKCQkgKiAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICJhamF4IjogewoJCSAqICAgICAgICJ1cmwiOiAiZGF0YS5qc29uIiwKCQkgKiAgICAgICAiZGF0YVNyYyI6ICJ0YWJsZURhdGEiCgkJICogICAgIH0KCQkgKiAgIH0gKTsKCQkgKgoJCSAqIEBleGFtcGxlCgkJICogICAvLyBHZXQgSlNPTiBkYXRhIGZyb20gYSBmaWxlIHZpYSBBamF4LCB1c2luZyBgZGF0YVNyY2AgdG8gcmVhZCBkYXRhCgkJICogICAvLyBmcm9tIGEgcGxhaW4gYXJyYXkgcmF0aGVyIHRoYW4gYW4gYXJyYXkgaW4gYW4gb2JqZWN0CgkJICogICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCSAqICAgICAiYWpheCI6IHsKCQkgKiAgICAgICAidXJsIjogImRhdGEuanNvbiIsCgkJICogICAgICAgImRhdGFTcmMiOiAiIgoJCSAqICAgICB9CgkJICogICB9ICk7CgkJICoKCQkgKiBAZXhhbXBsZQoJCSAqICAgLy8gTWFuaXB1bGF0ZSB0aGUgZGF0YSByZXR1cm5lZCBmcm9tIHRoZSBzZXJ2ZXIgLSBhZGQgYSBsaW5rIHRvIGRhdGEKCQkgKiAgIC8vIChub3RlIHRoaXMgY2FuLCBzaG91bGQsIGJlIGRvbmUgdXNpbmcgYHJlbmRlcmAgZm9yIHRoZSBjb2x1bW4gLSB0aGlzCgkJICogICAvLyBpcyBqdXN0IGEgc2ltcGxlIGV4YW1wbGUgb2YgaG93IHRoZSBkYXRhIGNhbiBiZSBtYW5pcHVsYXRlZCkuCgkJICogICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCSAqICAgICAiYWpheCI6IHsKCQkgKiAgICAgICAidXJsIjogIg=="
},
{
"key": "jquery.dataTables.js?4?1?3",
"type": "binary",
"value": "base64:ZGF0YS5qc29uIiwKCQkgKiAgICAgICAiZGF0YVNyYyI6IGZ1bmN0aW9uICgganNvbiApIHsKCQkgKiAgICAgICAgIGZvciAoIHZhciBpPTAsIGllbj1qc29uLmxlbmd0aCA7IGk8aWVuIDsgaSsrICkgewoJCSAqICAgICAgICAgICBqc29uW2ldWzBdID0gJzxhIGhyZWY9Ii9tZXNzYWdlLycranNvbltpXVswXSsnPlZpZXcgbWVzc2FnZTwvYT4nOwoJCSAqICAgICAgICAgfQoJCSAqICAgICAgICAgcmV0dXJuIGpzb247CgkJICogICAgICAgfQoJCSAqICAgICB9CgkJICogICB9ICk7CgkJICoKCQkgKiBAZXhhbXBsZQoJCSAqICAgLy8gQWRkIGRhdGEgdG8gdGhlIHJlcXVlc3QKCQkgKiAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICJhamF4IjogewoJCSAqICAgICAgICJ1cmwiOiAiZGF0YS5qc29uIiwKCQkgKiAgICAgICAiZGF0YSI6IGZ1bmN0aW9uICggZCApIHsKCQkgKiAgICAgICAgIHJldHVybiB7CgkJICogICAgICAgICAgICJleHRyYV9zZWFyY2giOiAkKCcjZXh0cmEnKS52YWwoKQoJCSAqICAgICAgICAgfTsKCQkgKiAgICAgICB9CgkJICogICAgIH0KCQkgKiAgIH0gKTsKCQkgKgoJCSAqIEBleGFtcGxlCgkJICogICAvLyBTZW5kIHJlcXVlc3QgYXMgUE9TVAoJCSAqICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgImFqYXgiOiB7CgkJICogICAgICAgInVybCI6ICJkYXRhLmpzb24iLAoJCSAqICAgICAgICJ0eXBlIjogIlBPU1QiCgkJICogICAgIH0KCQkgKiAgIH0gKTsKCQkgKgoJCSAqIEBleGFtcGxlCgkJICogICAvLyBHZXQgdGhlIGRhdGEgZnJvbSBsb2NhbFN0b3JhZ2UgKGNvdWxkIGludGVyZmFjZSB3aXRoIGEgZm9ybSBmb3IKCQkgKiAgIC8vIGFkZGluZywgZWRpdGluZyBhbmQgcmVtb3Zpbmcgcm93cykuCgkJICogICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCSAqICAgICAiYWpheCI6IGZ1bmN0aW9uIChkYXRhLCBjYWxsYmFjaywgc2V0dGluZ3MpIHsKCQkgKiAgICAgICBjYWxsYmFjaygKCQkgKiAgICAgICAgIEpTT04ucGFyc2UoIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdkYXRhVGFibGVzRGF0YScpICkKCQkgKiAgICAgICApOwoJCSAqICAgICB9CgkJICogICB9ICk7CgkJICovCgkJImFqYXgiOiBudWxsLAoJCgkKCQkvKioKCQkgKiBUaGlzIHBhcmFtZXRlciBhbGxvd3MgeW91IHRvIHJlYWRpbHkgc3BlY2lmeSB0aGUgZW50cmllcyBpbiB0aGUgbGVuZ3RoIGRyb3AKCQkgKiBkb3duIG1lbnUgdGhhdCBEYXRhVGFibGVzIHNob3dzIHdoZW4gcGFnaW5hdGlvbiBpcyBlbmFibGVkLiBJdCBjYW4gYmUKCQkgKiBlaXRoZXIgYSAxRCBhcnJheSBvZiBvcHRpb25zIHdoaWNoIHdpbGwgYmUgdXNlZCBmb3IgYm90aCB0aGUgZGlzcGxheWVkCgkJICogb3B0aW9uIGFuZCB0aGUgdmFsdWUsIG9yIGEgMkQgYXJyYXkgd2hpY2ggd2lsbCB1c2UgdGhlIGFycmF5IGluIHRoZSBmaXJzdAoJCSAqIHBvc2l0aW9uIGFzIHRoZSB2YWx1ZSwgYW5kIHRoZSBhcnJheSBpbiB0aGUgc2Vjb25kIHBvc2l0aW9uIGFzIHRoZQoJCSAqIGRpc3BsYXllZCBvcHRpb25zICh1c2VmdWwgZm9yIGxhbmd1YWdlIHN0cmluZ3Mgc3VjaCBhcyAnQWxsJykuCgkJICoKCQkgKiBOb3RlIHRoYXQgdGhlIGBwYWdlTGVuZ3RoYCBwcm9wZXJ0eSB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc2V0IHRvIHRoZQoJCSAqIGZpcnN0IHZhbHVlIGdpdmVuIGluIHRoaXMgYXJyYXksIHVubGVzcyBgcGFnZUxlbmd0aGAgaXMgYWxzbyBwcm92aWRlZC4KCQkgKiAgQHR5cGUgYXJyYXkKCQkgKiAgQGRlZmF1bHQgWyAxMCwgMjUsIDUwLCAxMDAgXQoJCSAqCgkJICogIEBkdG9wdCBPcHRpb24KCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLmxlbmd0aE1lbnUKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJsZW5ndGhNZW51IjogW1sxMCwgMjUsIDUwLCAtMV0sIFsxMCwgMjUsIDUwLCAiQWxsIl1dCgkJICogICAgICB9ICk7CgkJICogICAgfSApOwoJCSAqLwoJCSJhTGVuZ3RoTWVudSI6IFsgMTAsIDI1LCA1MCwgMTAwIF0sCgkKCQoJCS8qKgoJCSAqIFRoZSBgY29sdW1uc2Agb3B0aW9uIGluIHRoZSBpbml0aWFsaXNhdGlvbiBwYXJhbWV0ZXIgYWxsb3dzIHlvdSB0byBkZWZpbmUKCQkgKiBkZXRhaWxzIGFib3V0IHRoZSB3YXkgaW5kaXZpZHVhbCBjb2x1bW5zIGJlaGF2ZS4gRm9yIGEgZnVsbCBsaXN0IG9mCgkJICogY29sdW1uIG9wdGlvbnMgdGhhdCBjYW4gYmUgc2V0LCBwbGVhc2Ugc2VlCgkJICoge0BsaW5rIERhdGFUYWJsZS5kZWZhdWx0cy5jb2x1bW59LiBOb3RlIHRoYXQgaWYgeW91IHVzZSBgY29sdW1uc2AgdG8KCQkgKiBkZWZpbmUgeW91ciBjb2x1bW5zLCB5b3UgbXVzdCBoYXZlIGFuIGVudHJ5IGluIHRoZSBhcnJheSBmb3IgZXZlcnkgc2luZ2xlCgkJICogY29sdW1uIHRoYXQgeW91IGhhdmUgaW4geW91ciB0YWJsZSAodGhlc2UgY2FuIGJlIG51bGwgaWYgeW91IGRvbid0IHdoaWNoCgkJICogdG8gc3BlY2lmeSBhbnkgb3B0aW9ucykuCgkJICogIEBtZW1iZXIKCQkgKgoJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMuY29sdW1uCgkJICovCgkJImFvQ29sdW1ucyI6IG51bGwsCgkKCQkvKioKCQkgKiBWZXJ5IHNpbWlsYXIgdG8gYGNvbHVtbnNgLCBgY29sdW1uRGVmc2AgYWxsb3dzIHlvdSB0byB0YXJnZXQgYSBzcGVjaWZpYwoJCSAqIGNvbHVtbiwgbXVsdGlwbGUgY29sdW1ucywgb3IgYWxsIGNvbHVtbnMsIHVzaW5nIHRoZSBgdGFyZ2V0c2AgcHJvcGVydHkgb2YKCQkgKiBlYWNoIG9iamVjdCBpbiB0aGUgYXJyYXkuIFRoaXMgYWxsb3dzIGdyZWF0IGZsZXhpYmlsaXR5IHdoZW4gY3JlYXRpbmcKCQkgKiB0YWJsZXMsIGFzIHRoZSBgY29sdW1uRGVmc2AgYXJyYXlzIGNhbiBiZSBvZiBhbnkgbGVuZ3RoLCB0YXJnZXRpbmcgdGhlCgkJICogY29sdW1ucyB5b3Ugc3BlY2lmaWNhbGx5IHdhbnQuIGBjb2x1bW5EZWZzYCBtYXkgdXNlIGFueSBvZiB0aGUgY29sdW1uCgkJICogb3B0aW9ucyBhdmFpbGFibGU6IHtAbGluayBEYXRhVGFibGUuZGVmYXVsdHMuY29sdW1ufSwgYnV0IGl0IF9tdXN0XwoJCSAqIGhhdmUgYHRhcmdldHNgIGRlZmluZWQgaW4gZWFjaCBvYmplY3QgaW4gdGhlIGFycmF5LiBWYWx1ZXMgaW4gdGhlIGB0YXJnZXRzYAoJCSAqIGFycmF5IG1heSBiZToKCQkgKiAgIDx1bD4KCQkgKiAgICAgPGxpPmEgc3RyaW5nIC0gY2xhc3MgbmFtZSB3aWxsIGJlIG1hdGNoZWQgb24gdGhlIFRIIGZvciB0aGUgY29sdW1uPC9saT4KCQkgKiAgICAgPGxpPjAgb3IgYSBwb3NpdGl2ZSBpbnRlZ2VyIC0gY29sdW1uIGluZGV4IGNvdW50aW5nIGZyb20gdGhlIGxlZnQ8L2xpPgoJCSAqICAgICA8bGk+YSBuZWdhdGl2ZSBpbnRlZ2VyIC0gY29sdW1uIGluZGV4IGNvdW50aW5nIGZyb20gdGhlIHJpZ2h0PC9saT4KCQkgKiAgICAgPGxpPnRoZSBzdHJpbmcgIl9hbGwiIC0gYWxsIGNvbHVtbnMgKGkuZS4gYXNzaWduIGEgZGVmYXVsdCk8L2xpPgoJCSAqICAgPC91bD4KCQkgKiAgQG1lbWJlcgoJCSAqCgkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5jb2x1bW5EZWZzCgkJICovCgkJImFvQ29sdW1uRGVmcyI6IG51bGwsCgkKCQoJCS8qKgoJCSAqIEJhc2ljYWxseSB0aGUgc2FtZSBhcyBgc2VhcmNoYCwgdGhpcyBwYXJhbWV0ZXIgZGVmaW5lcyB0aGUgaW5kaXZpZHVhbCBjb2x1bW4KCQkgKiBmaWx0ZXJpbmcgc3RhdGUgYXQgaW5pdGlhbGlzYXRpb24gdGltZS4gVGhlIGFycmF5IG11c3QgYmUgb2YgdGhlIHNhbWUgc2l6ZQoJCSAqIGFzIHRoZSBudW1iZXIgb2YgY29sdW1ucywgYW5kIGVhY2ggZWxlbWVudCBiZSBhbiBvYmplY3Qgd2l0aCB0aGUgcGFyYW1ldGVycwoJCSAqIGBzZWFyY2hgIGFuZCBgZXNjYXBlUmVnZXhgICh0aGUgbGF0dGVyIGlzIG9wdGlvbmFsKS4gJ251bGwnIGlzIGFsc28KCQkgKiBhY2NlcHRlZCBhbmQgdGhlIGRlZmF1bHQgd2lsbCBiZSB1c2VkLgoJCSAqICBAdHlwZSBhcnJheQoJCSAqICBAZGVmYXVsdCBbXQoJCSAqCgkJICogIEBkdG9wdCBPcHRpb24KCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLnNlYXJjaENvbHMKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJzZWFyY2hDb2xzIjogWwoJCSAqICAgICAgICAgIG51bGwsCgkJICogICAgICAgICAgeyAic2VhcmNoIjogIk15IGZpbHRlciIgfSwKCQkgKiAgICAgICAgICBudWxsLAoJCSAqICAgICAgICAgIHsgInNlYXJjaCI6ICJeWzAtOV0iLCAiZXNjYXBlUmVnZXgiOiBmYWxzZSB9CgkJICogICAgICAgIF0KCQkgKiAgICAgIH0gKTsKCQkgKiAgICB9ICkKCQkgKi8KCQkiYW9TZWFyY2hDb2xzIjogW10sCgkKCQoJCS8qKgoJCSAqIEFuIGFycmF5IG9mIENTUyBjbGFzc2VzIHRoYXQgc2hvdWxkIGJlIGFwcGxpZWQgdG8gZGlzcGxheWVkIHJvd3MuIFRoaXMKCQkgKiBhcnJheSBtYXkgYmUgb2YgYW55IGxlbmd0aCwgYW5kIERhdGFUYWJsZXMgd2lsbCBhcHBseSBlYWNoIGNsYXNzCgkJICogc2VxdWVudGlhbGx5LCBsb29waW5nIHdoZW4gcmVxdWlyZWQuCgkJICogIEB0eXBlIGFycmF5CgkJICogIEBkZWZhdWx0IG51bGwgPGk+V2lsbCB0YWtlIHRoZSB2YWx1ZXMgZGV0ZXJtaW5lZCBieSB0aGUgYG9DbGFzc2VzLnN0cmlwZSpgCgkJICogICAgb3B0aW9uczwvaT4KCQkgKgoJCSAqICBAZHRvcHQgT3B0aW9uCgkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5zdHJpcGVDbGFzc2VzCgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24oKSB7CgkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCSAqICAgICAgICAic3RyaXBlQ2xhc3NlcyI6IFsgJ3N0cmlwMScsICdzdHJpcDInLCAnc3RyaXAzJyBdCgkJICogICAgICB9ICk7CgkJICogICAgfSApCgkJICovCgkJImFzU3RyaXBlQ2xhc3NlcyI6IG51bGwsCgkKCQoJCS8qKgoJCSAqIEVuYWJsZSBvciBkaXNhYmxlIGF1dG9tYXRpYyBjb2x1bW4gd2lkdGggY2FsY3VsYXRpb24uIFRoaXMgY2FuIGJlIGRpc2FibGVkCgkJICogYXMgYW4gb3B0aW1pc2F0aW9uIChpdCB0YWtlcyBzb21lIHRpbWUgdG8gY2FsY3VsYXRlIHRoZSB3aWR0aHMpIGlmIHRoZQoJCSAqIHRhYmxlcyB3aWR0aHMgYXJlIHBhc3NlZCBpbiB1c2luZyBgY29sdW1uc2AuCgkJICogIEB0eXBlIGJvb2xlYW4KCQkgKiAgQGRlZmF1bHQgdHJ1ZQoJCSAqCgkJICogIEBkdG9wdCBGZWF0dXJlcwoJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMuYXV0b1dpZHRoCgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24gKCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgICAgImF1dG9XaWR0aCI6IGZhbHNlCgkJICogICAgICB9ICk7CgkJICogICAgfSApOwoJCSAqLwoJCSJiQXV0b1dpZHRoIjogdHJ1ZSwKCQoJCgkJLyoqCgkJICogRGVmZXJyZWQgcmVuZGVyaW5nIGNhbiBwcm92aWRlIERhdGFUYWJsZXMgd2l0aCBhIGh1Z2Ugc3BlZWQgYm9vc3Qgd2hlbiB5b3UKCQkgKiBhcmUgdXNpbmcgYW4gQWpheCBvciBKUyBkYXRhIHNvdXJjZSBmb3IgdGhlIHRhYmxlLiBUaGlzIG9wdGlvbiwgd2hlbiBzZXQgdG8KCQkgKiB0cnVlLCB3aWxsIGNhdXNlIERhdGFUYWJsZXMgdG8gZGVmZXIgdGhlIGNyZWF0aW9uIG9mIHRoZSB0YWJsZSBlbGVtZW50cyBmb3IKCQkgKiBlYWNoIHJvdyB1bnRpbCB0aGV5IGFyZSBuZWVkZWQgZm9yIGEgZHJhdyAtIHNhdmluZyBhIHNpZ25pZmljYW50IGFtb3VudCBvZgoJCSAqIHRpbWUuCgkJICogIEB0eXBlIGJvb2xlYW4KCQkgKiAgQGRlZmF1bHQgZmFsc2UKCQkgKgoJCSAqICBAZHRvcHQgRmVhdHVyZXMKCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLmRlZmVyUmVuZGVyCgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24oKSB7CgkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCSAqICAgICAgICAiYWpheCI6ICJzb3VyY2VzL2FycmF5cy50eHQiLAoJCSAqICAgICAgICAiZGVmZXJSZW5kZXIiOiB0cnVlCgkJICogICAgICB9ICk7CgkJICogICAgfSApOwoJCSAqLwoJCSJiRGVmZXJSZW5kZXIiOiBmYWxzZSwKCQoJCgkJLyoqCgkJICogUmVwbGFjZSBhIERhdGFUYWJsZSB3aGljaCBtYXRjaGVzIHRoZSBnaXZlbiBzZWxlY3RvciBhbmQgcmVwbGFjZSBpdCB3aXRoCgkJICogb25lIHdoaWNoIGhhcyB0aGUgcHJvcGVydGllcyBvZiB0aGUgbmV3IGluaXRpYWxpc2F0aW9uIG9iamVjdCBwYXNzZWQuIElmIG5vCgkJICogdGFibGUgbWF0Y2hlcyB0aGUgc2VsZWN0b3IsIHRoZW4gdGhlIG5ldyBEYXRhVGFibGUgd2lsbCBiZSBjb25zdHJ1Y3RlZCBhcwoJCSAqIHBlciBub3JtYWwuCgkJICogIEB0eXBlIGJvb2xlYW4KCQkgKiAgQGRlZmF1bHQgZmFsc2UKCQkgKgoJCSAqICBAZHRvcHQgT3B0aW9ucwoJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMuZGVzdHJveQoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uKCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgICAgInNyb2xsWSI6ICIyMDBweCIsCgkJICogICAgICAgICJwYWdpbmF0ZSI6IGZhbHNlCgkJICogICAgICB9ICk7CgkJICoKCQkgKiAgICAgIC8vIFNvbWUgdGltZSBsYXRlci4uLi4KCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJmaWx0ZXIiOiBmYWxzZSwKCQkgKiAgICAgICAgImRlc3Ryb3kiOiB0cnVlCgkJICogICAgICB9ICk7CgkJICogICAgfSApOwoJCSAqLwoJCSJiRGVzdHJveSI6IGZhbHNlLAoJCgkKCQkvKioKCQkgKiBFbmFibGUgb3IgZGlzYWJsZSBmaWx0ZXJpbmcgb2YgZGF0YS4gRmlsdGVyaW5nIGluIERhdGFUYWJsZXMgaXMgInNtYXJ0IiBpbgoJCSAqIHRoYXQgaXQgYWxsb3dzIHRoZSBlbmQgdXNlciB0byBpbnB1dCBtdWx0aXBsZSB3b3JkcyAoc3BhY2Ugc2VwYXJhdGVkKSBhbmQKCQkgKiB3aWxsIG1hdGNoIGEgcm93IGNvbnRhaW5pbmcgdGhvc2Ugd29yZHMsIGV2ZW4gaWYgbm90IGluIHRoZSBvcmRlciB0aGF0IHdhcwoJCSAqIHNwZWNpZmllZCAodGhpcyBhbGxvdyBtYXRjaGluZyBhY3Jvc3MgbXVsdGlwbGUgY29sdW1ucykuIE5vdGUgdGhhdCBpZiB5b3UKCQkgKiB3aXNoIHRvIHVzZSBmaWx0ZXJpbmcgaW4gRGF0YVRhYmxlcyB0aGlzIG11c3QgcmVtYWluICd0cnVlJyAtIHRvIHJlbW92ZSB0aGUKCQkgKiBkZWZhdWx0IGZpbHRlcmluZyBpbnB1dCBib3ggYW5kIHJldGFpbiBmaWx0ZXJpbmcgYWJpbGl0aWVzLCBwbGVhc2UgdXNlCgkJICoge0BsaW5rIERhdGFUYWJsZS5kZWZhdWx0cy5kb219LgoJCSAqICBAdHlwZSBib29sZWFuCgkJICogIEBkZWZhdWx0IHRydWUKCQkgKgoJCSAqICBAZHRvcHQgRmVhdHVyZXMKCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLnNlYXJjaGluZwoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uICgpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJzZWFyY2hpbmciOiBmYWxzZQoJCSAqICAgICAgfSApOwoJCSAqICAgIH0gKTsKCQkgKi8KCQkiYkZpbHRlciI6IHRydWUsCgkKCQoJCS8qKgoJCSAqIEVuYWJsZSBvciBkaXNhYmxlIHRoZSB0YWJsZSBpbmZvcm1hdGlvbiBkaXNwbGF5LiBUaGlzIHNob3dzIGluZm9ybWF0aW9uCgkJICogYWJvdXQgdGhlIGRhdGEgdGhhdCBpcyBjdXJyZW50bHkgdmlzaWJsZSBvbiB0aGUgcGFnZSwgaW5jbHVkaW5nIGluZm9ybWF0aW9uCgkJICogYWJvdXQgZmlsdGVyZWQgZGF0YSBpZiB0aGF0IGFjdGlvbiBpcyBiZWluZyBwZXJmb3JtZWQuCgkJICogIEB0eXBlIGJvb2xlYW4KCQkgKiAgQGRlZmF1bHQgdHJ1ZQoJCSAqCgkJICogIEBkdG9wdCBGZWF0dXJlcwoJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMuaW5mbwoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uICgpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJpbmZvIjogZmFsc2UKCQkgKiAgICAgIH0gKTsKCQkgKiAgICB9ICk7CgkJICovCgkJImJJbmZvIjogdHJ1ZSwKCQoJCgkJLyoqCgkJICogQWxsb3dzIHRoZSBlbmQgdXNlciB0byBzZWxlY3QgdGhlIHNpemUgb2YgYSBmb3JtYXR0ZWQgcGFnZSBmcm9tIGEgc2VsZWN0CgkJICogbWVudSAoc2l6ZXMgYXJlIDEwLCAyNSwgNTAgYW5kIDEwMCkuIFJlcXVpcmVzIHBhZ2luYXRpb24gKGBwYWdpbmF0ZWApLgoJCSAqICBAdHlwZSBib29sZWFuCgkJICogIEBkZWZhdWx0IHRydWUKCQkgKgoJCSAqICBAZHRvcHQgRmVhdHVyZXMKCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLmxlbmd0aENoYW5nZQoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uICgpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJsZW5ndGhDaGFuZ2UiOiBmYWxzZQoJCSAqICAgICAgfSApOwoJCSAqICAgIH0gKTsKCQkgKi8KCQkiYkxlbmd0aENoYW5nZSI6IHRydWUsCgkKCQoJCS8qKgoJCSAqIEVuYWJsZSBvciBkaXNhYmxlIHBhZ2luYXRpb24uCgkJICogIEB0eXBlIGJvb2xlYW4KCQkgKiAgQGRlZmF1bHQgdHJ1ZQoJCSAqCgkJICogIEBkdG9wdCBGZWF0dXJlcwoJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMucGFnaW5nCgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24gKCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgICAgInBhZ2luZyI6IGZhbHNlCgkJICogICAgICB9ICk7CgkJICogICAgfSApOwoJCSAqLwoJCSJiUGFnaW5hdGUiOiB0cnVlLAoJCgkKCQkvKioKCQkgKiBFbmFibGUgb3IgZGlzYWJsZSB0aGUgZGlzcGxheSBvZiBhICdwcm9jZXNzaW5nJyBpbmRpY2F0b3Igd2hlbiB0aGUgdGFibGUgaXMKCQkgKiBiZWluZyBwcm9jZXNzZWQgKGUuZy4gYSBzb3J0KS4gVGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciB0YWJsZXMgd2l0aAoJCSAqIGxhcmdlIGFtb3VudHMgb2YgZGF0YSB3aGVyZSBpdCBjYW4gdGFrZSBhIG5vdGljZWFibGUgYW1vdW50IG9mIHRpbWUgdG8gc29ydAoJCSAqIHRoZSBlbnRyaWVzLgoJCSAqICBAdHlwZSBib29sZWFuCgkJICogIEBkZWZhdWx0IGZhbHNlCgkJICoKCQkgKiAgQGR0b3B0IEZlYXR1cmVzCgkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5wcm9jZXNzaW5nCgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24gKCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgICAgInByb2Nlc3NpbmciOiB0cnVlCgkJICogICAgICB9ICk7CgkJICogICAgfSApOwoJCSAqLwoJCSJiUHJvY2Vzc2luZyI6IGZhbHNlLAoJCgkKCQkvKioKCQkgKiBSZXRyaWV2ZSB0aGUgRGF0YVRhYmxlcyBvYmplY3QgZm9yIHRoZSBnaXZlbiBzZWxlY3Rvci4gTm90ZSB0aGF0IGlmIHRoZQoJCSAqIHRhYmxlIGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGlzZWQsIHRoaXMgcGFyYW1ldGVyIHdpbGwgY2F1c2UgRGF0YVRhYmxlcwoJCSAqIHRvIHNpbXBseSByZXR1cm4gdGhlIG9iamVjdCB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gc2V0IHVwIC0gaXQgd2lsbCBub3QgdGFrZQoJCSAqIGFjY291bnQgb2YgYW55IGNoYW5nZXMgeW91IG1pZ2h0IGhhdmUgbWFkZSB0byB0aGUgaW5pdGlhbGlzYXRpb24gb2JqZWN0CgkJICogcGFzc2VkIHRvIERhdGFUYWJsZXMgKHNldHRpbmcgdGhpcyBwYXJhbWV0ZXIgdG8gdHJ1ZSBpcyBhbiBhY2tub3dsZWRnZW1lbnQKCQkgKiB0aGF0IHlvdSB1bmRlcnN0YW5kIHRoaXMpLiBgZGVzdHJveWAgY2FuIGJlIHVzZWQgdG8gcmVpbml0aWFsaXNlIGEgdGFibGUgaWYKCQkgKiB5b3UgbmVlZC4KCQkgKiAgQHR5cGUgYm9vbGVhbgoJCSAqICBAZGVmYXVsdCBmYWxzZQoJCSAqCgkJICogIEBkdG9wdCBPcHRpb25zCgkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5yZXRyaWV2ZQoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uKCkgewoJCSAqICAgICAgaW5pdFRhYmxlKCk7CgkJICogICAgICB0YWJsZUFjdGlvbnMoKTsKCQkgKiAgICB9ICk7CgkJICoKCQkgKiAgICBmdW5jdGlvbiBpbml0VGFibGUgKCkKCQkgKiAgICB7CgkJICogICAgICByZXR1cm4gJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgICAgInNjcm9sbFkiOiAiMjAwcHgiLAoJCSAqICAgICAgICAicGFnaW5hdGUiOiBmYWxzZSwKCQkgKiAgICAgICAgInJldHJpZXZlIjogdHJ1ZQoJCSAqICAgICAgfSApOwoJCSAqICAgIH0KCQkgKgoJCSAqICAgIGZ1bmN0aW9uIHRhYmxlQWN0aW9ucyAoKQoJCSAqICAgIHsKCQkgKiAgICAgIHZhciB0YWJsZSA9IGluaXRUYWJsZSgpOwoJCSAqICAgICAgLy8gcGVyZm9ybSBBUEkgb3BlcmF0aW9ucyB3aXRoIG9UYWJsZQoJCSAqICAgIH0KCQkgKi8KCQkiYlJldHJpZXZlIjogZmFsc2UsCgkKCQoJCS8qKgoJCSAqIFdoZW4gdmVydGljYWwgKHkpIHNjcm9sbGluZyBpcyBlbmFibGVkLCBEYXRhVGFibGVzIHdpbGwgZm9yY2UgdGhlIGhlaWdodCBvZgoJCSAqIHRoZSB0YWJsZSdzIHZpZXdwb3J0IHRvIHRoZSBnaXZlbiBoZWlnaHQgYXQgYWxsIHRpbWVzICh1c2VmdWwgZm9yIGxheW91dCkuCgkJICogSG93ZXZlciwgdGhpcyBjYW4gbG9vayBvZGQgd2hlbiBmaWx0ZXJpbmcgZGF0YSBkb3duIHRvIGEgc21hbGwgZGF0YSBzZXQsCgkJICogYW5kIHRoZSBmb290ZXIgaXMgbGVmdCAiZmxvYXRpbmciIGZ1cnRoZXIgZG93bi4gVGhpcyBwYXJhbWV0ZXIgKHdoZW4KCQkgKiBlbmFibGVkKSB3aWxsIGNhdXNlIERhdGFUYWJsZXMgdG8gY29sbGFwc2UgdGhlIHRhYmxlJ3Mgdmlld3BvcnQgZG93biB3aGVuCgkJICogdGhlIHJlc3VsdCBzZXQgd2lsbCBmaXQgd2l0aGluIHRoZSBnaXZlbiBZIGhlaWdodC4KCQkgKiAgQHR5cGUgYm9vbGVhbgoJCSAqICBAZGVmYXVsdCBmYWxzZQoJCSAqCgkJICogIEBkdG9wdCBPcHRpb25zCgkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5zY3JvbGxDb2xsYXBzZQoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uKCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgICAgInNjcm9sbFkiOiAiMjAwIiwKCQkgKiAgICAgICAgInNjcm9sbENvbGxhcHNlIjogdHJ1ZQoJCSAqICAgICAgfSApOwoJCSAqICAgIH0gKTsKCQkgKi8KCQkiYlNjcm9sbENvbGxhcHNlIjogZmFsc2UsCgkKCQoJCS8qKgoJCSAqIENvbmZpZ3VyZSBEYXRhVGFibGVzIHRvIHVzZSBzZXJ2ZXItc2lkZSBwcm9jZXNzaW5nLiBOb3RlIHRoYXQgdGhlCgkJICogYGFqYXhgIHBhcmFtZXRlciBtdXN0IGFsc28gYmUgZ2l2ZW4gaW4gb3JkZXIgdG8gZ2l2ZSBEYXRhVGFibGVzIGEKCQkgKiBzb3VyY2UgdG8gb2J0YWluIHRoZSByZXF1aXJlZCBkYXRhIGZvciBlYWNoIGRyYXcuCgkJICogIEB0eXBlIGJvb2xlYW4KCQkgKiAgQGRlZmF1bHQgZmFsc2UKCQkgKgoJCSAqICBAZHRvcHQgRmVhdHVyZXMKCQkgKiAgQGR0b3B0IFNlcnZlci1zaWRlCgkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5zZXJ2ZXJTaWRlCgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24gKCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgICAgInNlcnZlclNpZGUiOiB0cnVlLAoJCSAqICAgICAgICAiYWpheCI6ICJ4aHIucGhwIgoJCSAqICAgICAgfSApOwoJCSAqICAgIH0gKTsKCQkgKi8KCQkiYlNlcnZlclNpZGUiOiBmYWxzZSwKCQoJCgkJLyoqCgkJICogRW5hYmxlIG9yIGRpc2FibGUgc29ydGluZyBvZiBjb2x1bW5zLiBTb3J0aW5nIG9mIGluZGl2aWR1YWwgY29sdW1ucyBjYW4gYmUKCQkgKiBkaXNhYmxlZCBieSB0aGUgYHNvcnRhYmxlYCBvcHRpb24gZm9yIGVhY2ggY29sdW1uLgoJCSAqICBAdHlwZSBib29sZWFuCgkJICogIEBkZWZhdWx0IHRydWUKCQkgKgoJCSAqICBAZHRvcHQgRmVhdHVyZXMKCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLm9yZGVyaW5nCgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24gKCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgICAgIm9yZGVyaW5nIjogZmFsc2UKCQkgKiAgICAgIH0gKTsKCQkgKiAgICB9ICk7CgkJICovCgkJImJTb3J0IjogdHJ1ZSwKCQoJCgkJLyoqCgkJICogRW5hYmxlIG9yIGRpc3BsYXkgRGF0YVRhYmxlcycgYWJpbGl0eSB0byBzb3J0IG11bHRpcGxlIGNvbHVtbnMgYXQgdGhlCgkJICogc2FtZSB0aW1lIChhY3RpdmF0ZWQgYnkgc2hpZnQtY2xpY2sgYnkgdGhlIHVzZXIpLgoJCSAqICBAdHlwZSBib29sZWFuCgkJICogIEBkZWZhdWx0IHRydWUKCQkgKgoJCSAqICBAZHRvcHQgT3B0aW9ucwoJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMub3JkZXJNdWx0aQoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgLy8gRGlzYWJsZSBtdWx0aXBsZSBjb2x1bW4gc29ydGluZyBhYmlsaXR5CgkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uICgpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJvcmRlck11bHRpIjogZmFsc2UKCQkgKiAgICAgIH0gKTsKCQkgKiAgICB9ICk7CgkJICovCgkJImJTb3J0TXVsdGkiOiB0cnVlLAoJCgkKCQkvKioKCQkgKiBBbGxvd3MgY29udHJvbCBvdmVyIHdoZXRoZXIgRGF0YVRhYmxlcyBzaG91bGQgdXNlIHRoZSB0b3AgKHRydWUpIHVuaXF1ZQoJCSAqIGNlbGwgdGhhdCBpcyBmb3VuZCBmb3IgYSBzaW5nbGUgY29sdW1uLCBvciB0aGUgYm90dG9tIChmYWxzZSAtIGRlZmF1bHQpLgoJCSAqIFRoaXMgaXMgdXNlZnVsIHdoZW4gdXNpbmcgY29tcGxleCBoZWFkZXJzLgoJCSAqICBAdHlwZSBib29sZWFuCgkJICogIEBkZWZhdWx0IGZhbHNlCgkJICoKCQkgKiAgQGR0b3B0IE9wdGlvbnMKCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLm9yZGVyQ2VsbHNUb3AKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJvcmRlckNlbGxzVG9wIjogdHJ1ZQoJCSAqICAgICAgfSApOwoJCSAqICAgIH0gKTsKCQkgKi8KCQkiYlNvcnRDZWxsc1RvcCI6IGZhbHNlLAoJCgkKCQkvKioKCQkgKiBFbmFibGUgb3IgZGlzYWJsZSB0aGUgYWRkaXRpb24gb2YgdGhlIGNsYXNzZXMgYHNvcnRpbmdcXzFgLCBgc29ydGluZ1xfMmAgYW5kCgkJICogYHNvcnRpbmdcXzNgIHRvIHRoZSBjb2x1bW5zIHdoaWNoIGFyZSBjdXJyZW50bHkgYmVpbmcgc29ydGVkIG9uLiBUaGlzIGlzCgkJICogcHJlc2VudGVkIGFzIGEgZmVhdHVyZSBzd2l0Y2ggYXMgaXQgY2FuIGluY3JlYXNlIHByb2Nlc3NpbmcgdGltZSAod2hpbGUKCQkgKiBjbGFzc2VzIGFyZSByZW1vdmVkIGFuZCBhZGRlZCkgc28gZm9yIGxhcmdlIGRhdGEgc2V0cyB5b3UgbWlnaHQgd2FudCB0bwoJCSAqIHR1cm4gdGhpcyBvZmYuCgkJICogIEB0eXBlIGJvb2xlYW4KCQkgKiAgQGRlZmF1bHQgdHJ1ZQoJCSAqCgkJICogIEBkdG9wdCBGZWF0dXJlcwoJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMub3JkZXJDbGFzc2VzCgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24gKCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgICAgIm9yZGVyQ2xhc3NlcyI6IGZhbHNlCgkJICogICAgICB9ICk7CgkJICogICAgfSApOwoJCSAqLwoJCSJiU29ydENsYXNzZXMiOiB0cnVlLAoJCgkKCQkvKioKCQkgKiBFbmFibGUgb3IgZGlzYWJsZSBzdGF0ZSBzYXZpbmcuIFdoZW4gZW5hYmxlZCBIVE1MNSBgbG9jYWxTdG9yYWdlYCB3aWxsIGJlCgkJICogdXNlZCB0byBzYXZlIHRhYmxlIGRpc3BsYXkgaW5mb3JtYXRpb24gc3VjaCBhcyBwYWdpbmF0aW9uIGluZm9ybWF0aW9uLAoJCSAqIGRpc3BsYXkgbGVuZ3RoLCBmaWx0ZXJpbmcgYW5kIHNvcnRpbmcuIEFzIHN1Y2ggd2hlbiB0aGUgZW5kIHVzZXIgcmVsb2FkcwoJCSAqIHRoZSBwYWdlIHRoZSBkaXNwbGF5IGRpc3BsYXkgd2lsbCBtYXRjaCB3aGF0IHRoeSBoYWQgcHJldmlvdXNseSBzZXQgdXAuCgkJICoKCQkgKiBEdWUgdG8gdGhlIHVzZSBvZiBgbG9jYWxTdG9yYWdlYCB0aGUgZGVmYXVsdCBzdGF0ZSBzYXZpbmcgaXMgbm90IHN1cHBvcnRlZAoJCSAqIGluIElFNiBvciA3LiBJZiBzdGF0ZSBzYXZpbmcgaXMgcmVxdWlyZWQgaW4gdGhvc2UgYnJvd3NlcnMsIHVzZQoJCSAqIGBzdGF0ZVNhdmVDYWxsYmFja2AgdG8gcHJvdmlkZSBhIHN0b3JhZ2Ugc29sdXRpb24gc3VjaCBhcyBjb29raWVzLgoJCSAqICBAdHlwZSBib29sZWFuCgkJICogIEBkZWZhdWx0IGZhbHNlCgkJICoKCQkgKiAgQGR0b3B0IEZlYXR1cmVzCgkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5zdGF0ZVNhdmUKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbiAoKSB7CgkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCSAqICAgICAgICAic3RhdGVTYXZlIjogdHJ1ZQoJCSAqICAgICAgfSApOwoJCSAqICAgIH0gKTsKCQkgKi8KCQkiYlN0YXRlU2F2ZSI6IGZhbHNlLAoJCgkKCQkvKioKCQkgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEgVFIgZWxlbWVudCBpcyBjcmVhdGVkIChhbmQgYWxsIFREIGNoaWxkCgkJICogZWxlbWVudHMgaGF2ZSBiZWVuIGluc2VydGVkKSwgb3IgcmVnaXN0ZXJlZCBpZiB1c2luZyBhIERPTSBzb3VyY2UsIGFsbG93aW5nCgkJICogbWFuaXB1bGF0aW9uIG9mIHRoZSBUUiBlbGVtZW50IChhZGRpbmcgY2xhc3NlcyBldGMpLgoJCSAqICBAdHlwZSBmdW5jdGlvbgoJCSAqICBAcGFyYW0ge25vZGV9IHJvdyAiVFIiIGVsZW1lbnQgZm9yIHRoZSBjdXJyZW50IHJvdwoJCSAqICBAcGFyYW0ge2FycmF5fSBkYXRhIFJhdyBkYXRhIGFycmF5IGZvciB0aGlzIHJvdwoJCSAqICBAcGFyYW0ge2ludH0gZGF0YUluZGV4IFRoZSBpbmRleCBvZiB0aGlzIHJvdyBpbiB0aGUgaW50ZXJuYWwgYW9EYXRhIGFycmF5CgkJICoKCQkgKiAgQGR0b3B0IENhbGxiYWNrcwoJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMuY3JlYXRlZFJvdwoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uKCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgICAgImNyZWF0ZWRSb3ciOiBmdW5jdGlvbiggcm93LCBkYXRhLCBkYXRhSW5kZXggKSB7CgkJICogICAgICAgICAgLy8gQm9sZCB0aGUgZ3JhZGUgZm9yIGFsbCAnQScgZ3JhZGUgYnJvd3NlcnMKCQkgKiAgICAgICAgICBpZiAoIGRhdGFbNF0gPT0gIkEiICkKCQkgKiAgICAgICAgICB7CgkJICogICAgICAgICAgICAkKCd0ZDplcSg0KScsIHJvdykuaHRtbCggJzxiPkE8L2I+JyApOwoJCSAqICAgICAgICAgIH0KCQkgKiAgICAgICAgfQoJCSAqICAgICAgfSApOwoJCSAqICAgIH0gKTsKCQkgKi8KCQkiZm5DcmVhdGVkUm93IjogbnVsbCwKCQoJCgkJLyoqCgkJICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb24gZXZlcnkgJ2RyYXcnIGV2ZW50LCBhbmQgYWxsb3dzIHlvdSB0bwoJCSAqIGR5bmFtaWNhbGx5IG1vZGlmeSBhbnkgYXNwZWN0IHlvdSB3YW50IGFib3V0IHRoZSBjcmVhdGVkIERPTS4KCQkgKiAgQHR5cGUgZnVuY3Rpb24KCQkgKiAgQHBhcmFtIHtvYmplY3R9IHNldHRpbmdzIERhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkJICoKCQkgKiAgQGR0b3B0IENhbGxiYWNrcwoJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMuZHJhd0NhbGxiYWNrCgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24oKSB7CgkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCSAqICAgICAgICAiZHJhd0NhbGxiYWNrIjogZnVuY3Rpb24oIHNldHRpbmdzICkgewoJCSAqICAgICAgICAgIGFsZXJ0KCAnRGF0YVRhYmxlcyBoYXMgcmVkcmF3biB0aGUgdGFibGUnICk7CgkJICogICAgICAgIH0KCQkgKiAgICAgIH0gKTsKCQkgKiAgICB9ICk7CgkJICovCgkJImZuRHJhd0NhbGxiYWNrIjogbnVsbCwKCQoJCgkJLyoqCgkJICogSWRlbnRpY2FsIHRvIGZuSGVhZGVyQ2FsbGJhY2soKSBidXQgZm9yIHRoZSB0YWJsZSBmb290ZXIgdGhpcyBmdW5jdGlvbgoJCSAqIGFsbG93cyB5b3UgdG8gbW9kaWZ5IHRoZSB0YWJsZSBmb290ZXIgb24gZXZlcnkgJ2RyYXcnIGV2ZW50LgoJCSAqICBAdHlwZSBmdW5jdGlvbgoJCSAqICBAcGFyYW0ge25vZGV9IGZvb3QgIlRSIiBlbGVtZW50IGZvciB0aGUgZm9vdGVyCgkJICogIEBwYXJhbSB7YXJyYXl9IGRhdGEgRnVsbCB0YWJsZSBkYXRhIChhcyBkZXJpdmVkIGZyb20gdGhlIG9yaWdpbmFsIEhUTUwpCgkJICogIEBwYXJhbSB7aW50fSBzdGFydCBJbmRleCBmb3IgdGhlIGN1cnJlbnQgZGlzcGxheSBzdGFydGluZyBwb2ludCBpbiB0aGUKCQkgKiAgICBkaXNwbGF5IGFycmF5CgkJICogIEBwYXJhbSB7aW50fSBlbmQgSW5kZXggZm9yIHRoZSBjdXJyZW50IGRpc3BsYXkgZW5kaW5nIHBvaW50IGluIHRoZQoJCSAqICAgIGRpc3BsYXkgYXJyYXkKCQkgKiAgQHBhcmFtIHthcnJheSBpbnR9IGRpc3BsYXkgSW5kZXggYXJyYXkgdG8gdHJhbnNsYXRlIHRoZSB2aXN1YWwgcG9zaXRpb24KCQkgKiAgICB0byB0aGUgZnVsbCBkYXRhIGFycmF5CgkJICoKCQkgKiAgQGR0b3B0IENhbGxiYWNrcwoJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMuZm9vdGVyQ2FsbGJhY2sKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJmb290ZXJDYWxsYmFjayI6IGZ1bmN0aW9uKCB0Zm9vdCwgZGF0YSwgc3RhcnQsIGVuZCwgZGlzcGxheSApIHsKCQkgKiAgICAgICAgICB0Zm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZSgndGgnKVswXS5pbm5lckhUTUwgPSAiU3RhcnRpbmcgaW5kZXggaXMgIitzdGFydDsKCQkgKiAgICAgICAgfQoJCSAqICAgICAgfSApOwoJCSAqICAgIH0gKQoJCSAqLwoJCSJmbkZvb3RlckNhbGxiYWNrIjogbnVsbCwKCQoJCgkJLyoqCgkJICogV2hlbiByZW5kZXJpbmcgbGFyZ2UgbnVtYmVycyBpbiB0aGUgaW5mb3JtYXRpb24gZWxlbWVudCBmb3IgdGhlIHRhYmxlCgkJICogKGkuZS4gIlNob3dpbmcgMSB0byAxMCBvZiA1NyBlbnRyaWVzIikgRGF0YVRhYmxlcyB3aWxsIHJlbmRlciBsYXJnZSBudW1iZXJzCgkJICogdG8gaGF2ZSBhIGNvbW1hIHNlcGFyYXRvciBmb3IgdGhlICd0aG91c2FuZHMnIHVuaXRzIChlLmcuIDEgbWlsbGlvbiBpcwoJCSAqIHJlbmRlcmVkIGFzICIxLDAwMCwwMDAiKSB0byBoZWxwIHJlYWRhYmlsaXR5IGZvciB0aGUgZW5kIHVzZXIuIFRoaXMKCQkgKiBmdW5jdGlvbiB3aWxsIG92ZXJyaWRlIHRoZSBkZWZhdWx0IG1ldGhvZCBEYXRhVGFibGVzIHVzZXMuCgkJICogIEB0eXBlIGZ1bmN0aW9uCgkJICogIEBtZW1iZXIKCQkgKiAgQHBhcmFtIHtpbnR9IHRvRm9ybWF0IG51bWJlciB0byBiZSBmb3JtYXR0ZWQKCQkgKiAgQHJldHVybnMge3N0cmluZ30gZm9ybWF0dGVkIHN0cmluZyBmb3IgRGF0YVRhYmxlcyB0byBzaG93IHRoZSBudW1iZXIKCQkgKgoJCSAqICBAZHRvcHQgQ2FsbGJhY2tzCgkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5mb3JtYXROdW1iZXIKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgIC8vIEZvcm1hdCBhIG51bWJlciB1c2luZyBhIHNpbmdsZSBxdW90ZSBmb3IgdGhlIHNlcGFyYXRvciAobm90ZSB0aGF0CgkJICogICAgLy8gdGhpcyBjYW4gYWxzbyBiZSBkb25lIHdpdGggdGhlIGxhbmd1YWdlLnRob3VzYW5kcyBvcHRpb24pCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uKCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgICAgImZvcm1hdE51bWJlciI6IGZ1bmN0aW9uICggdG9Gb3JtYXQgKSB7CgkJICogICAgICAgICAgcmV0dXJuIHRvRm9ybWF0LnRvU3RyaW5nKCkucmVwbGFjZSgKCQkgKiAgICAgICAgICAgIC9cQig/PShcZHszfSkrKD8hXGQpKS9nLCAiJyIKCQkgKiAgICAgICAgICApOwoJCSAqICAgICAgICB9OwoJCSAqICAgICAgfSApOwoJCSAqICAgIH0gKTsKCQkgKi8KCQkiZm5Gb3JtYXROdW1iZXIiOiBmdW5jdGlvbiAoIHRvRm9ybWF0ICkgewoJCQlyZXR1cm4gdG9Gb3JtYXQudG9TdHJpbmcoKS5yZXBsYWNlKAoJCQkJL1xCKD89KFxkezN9KSsoPyFcZCkpL2csCgkJCQl0aGlzLm9MYW5ndWFnZS5zVGhvdXNhbmRzCgkJCSk7CgkJfSwKCQoJCgkJLyoqCgkJICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb24gZXZlcnkgJ2RyYXcnIGV2ZW50LCBhbmQgYWxsb3dzIHlvdSB0bwoJCSAqIGR5bmFtaWNhbGx5IG1vZGlmeSB0aGUgaGVhZGVyIHJvdy4gVGhpcyBjYW4gYmUgdXNlZCB0byBjYWxjdWxhdGUgYW5kCgkJICogZGlzcGxheSB1c2VmdWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRhYmxlLgoJCSAqICBAdHlwZSBmdW5jdGlvbgoJCSAqICBAcGFyYW0ge25vZGV9IGhlYWQgIlRSIiBlbGVtZW50IGZvciB0aGUgaGVhZGVyCgkJICogIEBwYXJhbSB7YXJyYXl9IGRhdGEgRnVsbCB0YWJsZSBkYXRhIChhcyBkZXJpdmVkIGZyb20gdGhlIG9yaWdpbmFsIEhUTUwpCgkJICogIEBwYXJhbSB7aW50fSBzdGFydCBJbmRleCBmb3IgdGhlIGN1cnJlbnQgZGlzcGxheSBzdGFydGluZyBwb2ludCBpbiB0aGUKCQkgKiAgICBkaXNwbGF5IGFycmF5CgkJICogIEBwYXJhbSB7aW50fSBlbmQgSW5kZXggZm9yIHRoZSBjdXJyZW50IGRpc3BsYXkgZW5kaW5nIHBvaW50IGluIHRoZQoJCSAqICAgIGRpc3BsYXkgYXJyYXkKCQkgKiAgQHBhcmFtIHthcnJheSBpbnR9IGRpc3BsYXkgSW5kZXggYXJyYXkgdG8gdHJhbnNsYXRlIHRoZSB2aXN1YWwgcG9zaXRpb24KCQkgKiAgICB0byB0aGUgZnVsbCBkYXRhIGFycmF5CgkJICoKCQkgKiAgQGR0b3B0IENhbGxiYWNrcwoJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMuaGVhZGVyQ2FsbGJhY2sKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJmaGVhZGVyQ2FsbGJhY2siOiBmdW5jdGlvbiggaGVhZCwgZGF0YSwgcw=="
},
{
"key": "jquery.dataTables.js?4?2?3",
"type": "binary",
"value": "base64:dGFydCwgZW5kLCBkaXNwbGF5ICkgewoJCSAqICAgICAgICAgIGhlYWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3RoJylbMF0uaW5uZXJIVE1MID0gIkRpc3BsYXlpbmcgIisoZW5kLXN0YXJ0KSsiIHJlY29yZHMiOwoJCSAqICAgICAgICB9CgkJICogICAgICB9ICk7CgkJICogICAgfSApCgkJICovCgkJImZuSGVhZGVyQ2FsbGJhY2siOiBudWxsLAoJCgkKCQkvKioKCQkgKiBUaGUgaW5mb3JtYXRpb24gZWxlbWVudCBjYW4gYmUgdXNlZCB0byBjb252ZXkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQKCQkgKiBzdGF0ZSBvZiB0aGUgdGFibGUuIEFsdGhvdWdoIHRoZSBpbnRlcm5hdGlvbmFsaXNhdGlvbiBvcHRpb25zIHByZXNlbnRlZCBieQoJCSAqIERhdGFUYWJsZXMgYXJlIHF1aXRlIGNhcGFibGUgb2YgZGVhbGluZyB3aXRoIG1vc3QgY3VzdG9taXNhdGlvbnMsIHRoZXJlIG1heQoJCSAqIGJlIHRpbWVzIHdoZXJlIHlvdSB3aXNoIHRvIGN1c3RvbWlzZSB0aGUgc3RyaW5nIGZ1cnRoZXIuIFRoaXMgY2FsbGJhY2sKCQkgKiBhbGxvd3MgeW91IHRvIGRvIGV4YWN0bHkgdGhhdC4KCQkgKiAgQHR5cGUgZnVuY3Rpb24KCQkgKiAgQHBhcmFtIHtvYmplY3R9IG9TZXR0aW5ncyBEYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJCSAqICBAcGFyYW0ge2ludH0gc3RhcnQgU3RhcnRpbmcgcG9zaXRpb24gaW4gZGF0YSBmb3IgdGhlIGRyYXcKCQkgKiAgQHBhcmFtIHtpbnR9IGVuZCBFbmQgcG9zaXRpb24gaW4gZGF0YSBmb3IgdGhlIGRyYXcKCQkgKiAgQHBhcmFtIHtpbnR9IG1heCBUb3RhbCBudW1iZXIgb2Ygcm93cyBpbiB0aGUgdGFibGUgKHJlZ2FyZGxlc3Mgb2YKCQkgKiAgICBmaWx0ZXJpbmcpCgkJICogIEBwYXJhbSB7aW50fSB0b3RhbCBUb3RhbCBudW1iZXIgb2Ygcm93cyBpbiB0aGUgZGF0YSBzZXQsIGFmdGVyIGZpbHRlcmluZwoJCSAqICBAcGFyYW0ge3N0cmluZ30gcHJlIFRoZSBzdHJpbmcgdGhhdCBEYXRhVGFibGVzIGhhcyBmb3JtYXR0ZWQgdXNpbmcgaXQncwoJCSAqICAgIG93biBydWxlcwoJCSAqICBAcmV0dXJucyB7c3RyaW5nfSBUaGUgc3RyaW5nIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgaW5mb3JtYXRpb24gZWxlbWVudC4KCQkgKgoJCSAqICBAZHRvcHQgQ2FsbGJhY2tzCgkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5pbmZvQ2FsbGJhY2sKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAiaW5mb0NhbGxiYWNrIjogZnVuY3Rpb24oIHNldHRpbmdzLCBzdGFydCwgZW5kLCBtYXgsIHRvdGFsLCBwcmUgKSB7CgkJICogICAgICAgIHJldHVybiBzdGFydCArIiB0byAiKyBlbmQ7CgkJICogICAgICB9CgkJICogICAgfSApOwoJCSAqLwoJCSJmbkluZm9DYWxsYmFjayI6IG51bGwsCgkKCQoJCS8qKgoJCSAqIENhbGxlZCB3aGVuIHRoZSB0YWJsZSBoYXMgYmVlbiBpbml0aWFsaXNlZC4gTm9ybWFsbHkgRGF0YVRhYmxlcyB3aWxsCgkJICogaW5pdGlhbGlzZSBzZXF1ZW50aWFsbHkgYW5kIHRoZXJlIHdpbGwgYmUgbm8gbmVlZCBmb3IgdGhpcyBmdW5jdGlvbiwKCQkgKiBob3dldmVyLCB0aGlzIGRvZXMgbm90IGhvbGQgdHJ1ZSB3aGVuIHVzaW5nIGV4dGVybmFsIGxhbmd1YWdlIGluZm9ybWF0aW9uCgkJICogc2luY2UgdGhhdCBpcyBvYnRhaW5lZCB1c2luZyBhbiBhc3luYyBYSFIgY2FsbC4KCQkgKiAgQHR5cGUgZnVuY3Rpb24KCQkgKiAgQHBhcmFtIHtvYmplY3R9IHNldHRpbmdzIERhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkJICogIEBwYXJhbSB7b2JqZWN0fSBqc29uIFRoZSBKU09OIG9iamVjdCByZXF1ZXN0IGZyb20gdGhlIHNlcnZlciAtIG9ubHkKCQkgKiAgICBwcmVzZW50IGlmIGNsaWVudC1zaWRlIEFqYXggc291cmNlZCBkYXRhIGlzIHVzZWQKCQkgKgoJCSAqICBAZHRvcHQgQ2FsbGJhY2tzCgkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5pbml0Q29tcGxldGUKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJpbml0Q29tcGxldGUiOiBmdW5jdGlvbihzZXR0aW5ncywganNvbikgewoJCSAqICAgICAgICAgIGFsZXJ0KCAnRGF0YVRhYmxlcyBoYXMgZmluaXNoZWQgaXRzIGluaXRpYWxpc2F0aW9uLicgKTsKCQkgKiAgICAgICAgfQoJCSAqICAgICAgfSApOwoJCSAqICAgIH0gKQoJCSAqLwoJCSJmbkluaXRDb21wbGV0ZSI6IG51bGwsCgkKCQoJCS8qKgoJCSAqIENhbGxlZCBhdCB0aGUgdmVyeSBzdGFydCBvZiBlYWNoIHRhYmxlIGRyYXcgYW5kIGNhbiBiZSB1c2VkIHRvIGNhbmNlbCB0aGUKCQkgKiBkcmF3IGJ5IHJldHVybmluZyBmYWxzZSwgYW55IG90aGVyIHJldHVybiAoaW5jbHVkaW5nIHVuZGVmaW5lZCkgcmVzdWx0cyBpbgoJCSAqIHRoZSBmdWxsIGRyYXcgb2NjdXJyaW5nKS4KCQkgKiAgQHR5cGUgZnVuY3Rpb24KCQkgKiAgQHBhcmFtIHtvYmplY3R9IHNldHRpbmdzIERhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkJICogIEByZXR1cm5zIHtib29sZWFufSBGYWxzZSB3aWxsIGNhbmNlbCB0aGUgZHJhdywgYW55dGhpbmcgZWxzZSAoaW5jbHVkaW5nIG5vCgkJICogICAgcmV0dXJuKSB3aWxsIGFsbG93IGl0IHRvIGNvbXBsZXRlLgoJCSAqCgkJICogIEBkdG9wdCBDYWxsYmFja3MKCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLnByZURyYXdDYWxsYmFjawoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uKCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgICAgInByZURyYXdDYWxsYmFjayI6IGZ1bmN0aW9uKCBzZXR0aW5ncyApIHsKCQkgKiAgICAgICAgICBpZiAoICQoJyN0ZXN0JykudmFsKCkgPT0gMSApIHsKCQkgKiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCQkgKiAgICAgICAgICB9CgkJICogICAgICAgIH0KCQkgKiAgICAgIH0gKTsKCQkgKiAgICB9ICk7CgkJICovCgkJImZuUHJlRHJhd0NhbGxiYWNrIjogbnVsbCwKCQoJCgkJLyoqCgkJICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgeW91IHRvICdwb3N0IHByb2Nlc3MnIGVhY2ggcm93IGFmdGVyIGl0IGhhdmUgYmVlbgoJCSAqIGdlbmVyYXRlZCBmb3IgZWFjaCB0YWJsZSBkcmF3LCBidXQgYmVmb3JlIGl0IGlzIHJlbmRlcmVkIG9uIHNjcmVlbi4gVGhpcwoJCSAqIGZ1bmN0aW9uIG1pZ2h0IGJlIHVzZWQgZm9yIHNldHRpbmcgdGhlIHJvdyBjbGFzcyBuYW1lIGV0Yy4KCQkgKiAgQHR5cGUgZnVuY3Rpb24KCQkgKiAgQHBhcmFtIHtub2RlfSByb3cgIlRSIiBlbGVtZW50IGZvciB0aGUgY3VycmVudCByb3cKCQkgKiAgQHBhcmFtIHthcnJheX0gZGF0YSBSYXcgZGF0YSBhcnJheSBmb3IgdGhpcyByb3cKCQkgKiAgQHBhcmFtIHtpbnR9IGRpc3BsYXlJbmRleCBUaGUgZGlzcGxheSBpbmRleCBmb3IgdGhlIGN1cnJlbnQgdGFibGUgZHJhdwoJCSAqICBAcGFyYW0ge2ludH0gZGlzcGxheUluZGV4RnVsbCBUaGUgaW5kZXggb2YgdGhlIGRhdGEgaW4gdGhlIGZ1bGwgbGlzdCBvZgoJCSAqICAgIHJvd3MgKGFmdGVyIGZpbHRlcmluZykKCQkgKgoJCSAqICBAZHRvcHQgQ2FsbGJhY2tzCgkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5yb3dDYWxsYmFjawoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uKCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgICAgInJvd0NhbGxiYWNrIjogZnVuY3Rpb24oIHJvdywgZGF0YSwgZGlzcGxheUluZGV4LCBkaXNwbGF5SW5kZXhGdWxsICkgewoJCSAqICAgICAgICAgIC8vIEJvbGQgdGhlIGdyYWRlIGZvciBhbGwgJ0EnIGdyYWRlIGJyb3dzZXJzCgkJICogICAgICAgICAgaWYgKCBkYXRhWzRdID09ICJBIiApIHsKCQkgKiAgICAgICAgICAgICQoJ3RkOmVxKDQpJywgcm93KS5odG1sKCAnPGI+QTwvYj4nICk7CgkJICogICAgICAgICAgfQoJCSAqICAgICAgICB9CgkJICogICAgICB9ICk7CgkJICogICAgfSApOwoJCSAqLwoJCSJmblJvd0NhbGxiYWNrIjogbnVsbCwKCQoJCgkJLyoqCgkJICogX19EZXByZWNhdGVkX18gVGhlIGZ1bmN0aW9uYWxpdHkgcHJvdmlkZWQgYnkgdGhpcyBwYXJhbWV0ZXIgaGFzIG5vdyBiZWVuCgkJICogc3VwZXJzZWRlZCBieSB0aGF0IHByb3ZpZGVkIHRocm91Z2ggYGFqYXhgLCB3aGljaCBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLgoJCSAqCgkJICogVGhpcyBwYXJhbWV0ZXIgYWxsb3dzIHlvdSB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBmdW5jdGlvbiB3aGljaCBvYnRhaW5zCgkJICogdGhlIGRhdGEgZnJvbSB0aGUgc2VydmVyIHNvIHNvbWV0aGluZyBtb3JlIHN1aXRhYmxlIGZvciB5b3VyIGFwcGxpY2F0aW9uLgoJCSAqIEZvciBleGFtcGxlIHlvdSBjb3VsZCB1c2UgUE9TVCBkYXRhLCBvciBwdWxsIGluZm9ybWF0aW9uIGZyb20gYSBHZWFycyBvcgoJCSAqIEFJUiBkYXRhYmFzZS4KCQkgKiAgQHR5cGUgZnVuY3Rpb24KCQkgKiAgQG1lbWJlcgoJCSAqICBAcGFyYW0ge3N0cmluZ30gc291cmNlIEhUVFAgc291cmNlIHRvIG9idGFpbiB0aGUgZGF0YSBmcm9tIChgYWpheGApCgkJICogIEBwYXJhbSB7YXJyYXl9IGRhdGEgQSBrZXkvdmFsdWUgcGFpciBvYmplY3QgY29udGFpbmluZyB0aGUgZGF0YSB0byBzZW5kCgkJICogICAgdG8gdGhlIHNlcnZlcgoJCSAqICBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayB0byBiZSBjYWxsZWQgb24gY29tcGxldGlvbiBvZiB0aGUgZGF0YSBnZXQKCQkgKiAgICBwcm9jZXNzIHRoYXQgd2lsbCBkcmF3IHRoZSBkYXRhIG9uIHRoZSBwYWdlLgoJCSAqICBAcGFyYW0ge29iamVjdH0gc2V0dGluZ3MgRGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCQkgKgoJCSAqICBAZHRvcHQgQ2FsbGJhY2tzCgkJICogIEBkdG9wdCBTZXJ2ZXItc2lkZQoJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMuc2VydmVyRGF0YQoJCSAqCgkJICogIEBkZXByZWNhdGVkIDEuMTAuIFBsZWFzZSB1c2UgYGFqYXhgIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHkgbm93LgoJCSAqLwoJCSJmblNlcnZlckRhdGEiOiBudWxsLAoJCgkKCQkvKioKCQkgKiBfX0RlcHJlY2F0ZWRfXyBUaGUgZnVuY3Rpb25hbGl0eSBwcm92aWRlZCBieSB0aGlzIHBhcmFtZXRlciBoYXMgbm93IGJlZW4KCQkgKiBzdXBlcnNlZGVkIGJ5IHRoYXQgcHJvdmlkZWQgdGhyb3VnaCBgYWpheGAsIHdoaWNoIHNob3VsZCBiZSB1c2VkIGluc3RlYWQuCgkJICoKCQkgKiAgSXQgaXMgb2Z0ZW4gdXNlZnVsIHRvIHNlbmQgZXh0cmEgZGF0YSB0byB0aGUgc2VydmVyIHdoZW4gbWFraW5nIGFuIEFqYXgKCQkgKiByZXF1ZXN0IC0gZm9yIGV4YW1wbGUgY3VzdG9tIGZpbHRlcmluZyBpbmZvcm1hdGlvbiwgYW5kIHRoaXMgY2FsbGJhY2sKCQkgKiBmdW5jdGlvbiBtYWtlcyBpdCB0cml2aWFsIHRvIHNlbmQgZXh0cmEgaW5mb3JtYXRpb24gdG8gdGhlIHNlcnZlci4gVGhlCgkJICogcGFzc2VkIGluIHBhcmFtZXRlciBpcyB0aGUgZGF0YSBzZXQgdGhhdCBoYXMgYmVlbiBjb25zdHJ1Y3RlZCBieQoJCSAqIERhdGFUYWJsZXMsIGFuZCB5b3UgY2FuIGFkZCB0byB0aGlzIG9yIG1vZGlmeSBpdCBhcyB5b3UgcmVxdWlyZS4KCQkgKiAgQHR5cGUgZnVuY3Rpb24KCQkgKiAgQHBhcmFtIHthcnJheX0gZGF0YSBEYXRhIGFycmF5IChhcnJheSBvZiBvYmplY3RzIHdoaWNoIGFyZSBuYW1lL3ZhbHVlCgkJICogICAgcGFpcnMpIHRoYXQgaGFzIGJlZW4gY29uc3RydWN0ZWQgYnkgRGF0YVRhYmxlcyBhbmQgd2lsbCBiZSBzZW50IHRvIHRoZQoJCSAqICAgIHNlcnZlci4gSW4gdGhlIGNhc2Ugb2YgQWpheCBzb3VyY2VkIGRhdGEgd2l0aCBzZXJ2ZXItc2lkZSBwcm9jZXNzaW5nCgkJICogICAgdGhpcyB3aWxsIGJlIGFuIGVtcHR5IGFycmF5LCBmb3Igc2VydmVyLXNpZGUgcHJvY2Vzc2luZyB0aGVyZSB3aWxsIGJlIGEKCQkgKiAgICBzaWduaWZpY2FudCBudW1iZXIgb2YgcGFyYW1ldGVycyEKCQkgKiAgQHJldHVybnMge3VuZGVmaW5lZH0gRW5zdXJlIHRoYXQgeW91IG1vZGlmeSB0aGUgZGF0YSBhcnJheSBwYXNzZWQgaW4sCgkJICogICAgYXMgdGhpcyBpcyBwYXNzZWQgYnkgcmVmZXJlbmNlLgoJCSAqCgkJICogIEBkdG9wdCBDYWxsYmFja3MKCQkgKiAgQGR0b3B0IFNlcnZlci1zaWRlCgkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5zZXJ2ZXJQYXJhbXMKCQkgKgoJCSAqICBAZGVwcmVjYXRlZCAxLjEwLiBQbGVhc2UgdXNlIGBhamF4YCBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5IG5vdy4KCQkgKi8KCQkiZm5TZXJ2ZXJQYXJhbXMiOiBudWxsLAoJCgkKCQkvKioKCQkgKiBMb2FkIHRoZSB0YWJsZSBzdGF0ZS4gV2l0aCB0aGlzIGZ1bmN0aW9uIHlvdSBjYW4gZGVmaW5lIGZyb20gd2hlcmUsIGFuZCBob3csIHRoZQoJCSAqIHN0YXRlIG9mIGEgdGFibGUgaXMgbG9hZGVkLiBCeSBkZWZhdWx0IERhdGFUYWJsZXMgd2lsbCBsb2FkIGZyb20gYGxvY2FsU3RvcmFnZWAKCQkgKiBidXQgeW91IG1pZ2h0IHdpc2ggdG8gdXNlIGEgc2VydmVyLXNpZGUgZGF0YWJhc2Ugb3IgY29va2llcy4KCQkgKiAgQHR5cGUgZnVuY3Rpb24KCQkgKiAgQG1lbWJlcgoJCSAqICBAcGFyYW0ge29iamVjdH0gc2V0dGluZ3MgRGF0YVRhYmxlcyBzZXR0aW5ncyBvYmplY3QKCQkgKiAgQHBhcmFtIHtvYmplY3R9IGNhbGxiYWNrIENhbGxiYWNrIHRoYXQgY2FuIGJlIGV4ZWN1dGVkIHdoZW4gZG9uZS4gSXQKCQkgKiAgICBzaG91bGQgYmUgcGFzc2VkIHRoZSBsb2FkZWQgc3RhdGUgb2JqZWN0LgoJCSAqICBAcmV0dXJuIHtvYmplY3R9IFRoZSBEYXRhVGFibGVzIHN0YXRlIG9iamVjdCB0byBiZSBsb2FkZWQKCQkgKgoJCSAqICBAZHRvcHQgQ2FsbGJhY2tzCgkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5zdGF0ZUxvYWRDYWxsYmFjawoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uKCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgICAgInN0YXRlU2F2ZSI6IHRydWUsCgkJICogICAgICAgICJzdGF0ZUxvYWRDYWxsYmFjayI6IGZ1bmN0aW9uIChzZXR0aW5ncywgY2FsbGJhY2spIHsKCQkgKiAgICAgICAgICAkLmFqYXgoIHsKCQkgKiAgICAgICAgICAgICJ1cmwiOiAiL3N0YXRlX2xvYWQiLAoJCSAqICAgICAgICAgICAgImRhdGFUeXBlIjogImpzb24iLAoJCSAqICAgICAgICAgICAgInN1Y2Nlc3MiOiBmdW5jdGlvbiAoanNvbikgewoJCSAqICAgICAgICAgICAgICBjYWxsYmFjaygganNvbiApOwoJCSAqICAgICAgICAgICAgfQoJCSAqICAgICAgICAgIH0gKTsKCQkgKiAgICAgICAgfQoJCSAqICAgICAgfSApOwoJCSAqICAgIH0gKTsKCQkgKi8KCQkiZm5TdGF0ZUxvYWRDYWxsYmFjayI6IGZ1bmN0aW9uICggc2V0dGluZ3MgKSB7CgkJCXRyeSB7CgkJCQlyZXR1cm4gSlNPTi5wYXJzZSgKCQkJCQkoc2V0dGluZ3MuaVN0YXRlRHVyYXRpb24gPT09IC0xID8gc2Vzc2lvblN0b3JhZ2UgOiBsb2NhbFN0b3JhZ2UpLmdldEl0ZW0oCgkJCQkJCSdEYXRhVGFibGVzXycrc2V0dGluZ3Muc0luc3RhbmNlKydfJytsb2NhdGlvbi5wYXRobmFtZQoJCQkJCSkKCQkJCSk7CgkJCX0gY2F0Y2ggKGUpIHt9CgkJfSwKCQoJCgkJLyoqCgkJICogQ2FsbGJhY2sgd2hpY2ggYWxsb3dzIG1vZGlmaWNhdGlvbiBvZiB0aGUgc2F2ZWQgc3RhdGUgcHJpb3IgdG8gbG9hZGluZyB0aGF0IHN0YXRlLgoJCSAqIFRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIHRhYmxlIGlzIGxvYWRpbmcgc3RhdGUgZnJvbSB0aGUgc3RvcmVkIGRhdGEsIGJ1dAoJCSAqIHByaW9yIHRvIHRoZSBzZXR0aW5ncyBvYmplY3QgYmVpbmcgbW9kaWZpZWQgYnkgdGhlIHNhdmVkIHN0YXRlLiBOb3RlIHRoYXQgZm9yCgkJICogcGx1Zy1pbiBhdXRob3JzLCB5b3Ugc2hvdWxkIHVzZSB0aGUgYHN0YXRlTG9hZFBhcmFtc2AgZXZlbnQgdG8gbG9hZCBwYXJhbWV0ZXJzIGZvcgoJCSAqIGEgcGx1Zy1pbi4KCQkgKiAgQHR5cGUgZnVuY3Rpb24KCQkgKiAgQHBhcmFtIHtvYmplY3R9IHNldHRpbmdzIERhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkJICogIEBwYXJhbSB7b2JqZWN0fSBkYXRhIFRoZSBzdGF0ZSBvYmplY3QgdGhhdCBpcyB0byBiZSBsb2FkZWQKCQkgKgoJCSAqICBAZHRvcHQgQ2FsbGJhY2tzCgkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5zdGF0ZUxvYWRQYXJhbXMKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgIC8vIFJlbW92ZSBhIHNhdmVkIGZpbHRlciwgc28gZmlsdGVyaW5nIGlzIG5ldmVyIGxvYWRlZAoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJzdGF0ZVNhdmUiOiB0cnVlLAoJCSAqICAgICAgICAic3RhdGVMb2FkUGFyYW1zIjogZnVuY3Rpb24gKHNldHRpbmdzLCBkYXRhKSB7CgkJICogICAgICAgICAgZGF0YS5vU2VhcmNoLnNTZWFyY2ggPSAiIjsKCQkgKiAgICAgICAgfQoJCSAqICAgICAgfSApOwoJCSAqICAgIH0gKTsKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgIC8vIERpc2FsbG93IHN0YXRlIGxvYWRpbmcgYnkgcmV0dXJuaW5nIGZhbHNlCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uKCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgICAgInN0YXRlU2F2ZSI6IHRydWUsCgkJICogICAgICAgICJzdGF0ZUxvYWRQYXJhbXMiOiBmdW5jdGlvbiAoc2V0dGluZ3MsIGRhdGEpIHsKCQkgKiAgICAgICAgICByZXR1cm4gZmFsc2U7CgkJICogICAgICAgIH0KCQkgKiAgICAgIH0gKTsKCQkgKiAgICB9ICk7CgkJICovCgkJImZuU3RhdGVMb2FkUGFyYW1zIjogbnVsbCwKCQoJCgkJLyoqCgkJICogQ2FsbGJhY2sgdGhhdCBpcyBjYWxsZWQgd2hlbiB0aGUgc3RhdGUgaGFzIGJlZW4gbG9hZGVkIGZyb20gdGhlIHN0YXRlIHNhdmluZyBtZXRob2QKCQkgKiBhbmQgdGhlIERhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0IGhhcyBiZWVuIG1vZGlmaWVkIGFzIGEgcmVzdWx0IG9mIHRoZSBsb2FkZWQgc3RhdGUuCgkJICogIEB0eXBlIGZ1bmN0aW9uCgkJICogIEBwYXJhbSB7b2JqZWN0fSBzZXR0aW5ncyBEYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJCSAqICBAcGFyYW0ge29iamVjdH0gZGF0YSBUaGUgc3RhdGUgb2JqZWN0IHRoYXQgd2FzIGxvYWRlZAoJCSAqCgkJICogIEBkdG9wdCBDYWxsYmFja3MKCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLnN0YXRlTG9hZGVkCgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAvLyBTaG93IGFuIGFsZXJ0IHdpdGggdGhlIGZpbHRlcmluZyB2YWx1ZSB0aGF0IHdhcyBzYXZlZAoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJzdGF0ZVNhdmUiOiB0cnVlLAoJCSAqICAgICAgICAic3RhdGVMb2FkZWQiOiBmdW5jdGlvbiAoc2V0dGluZ3MsIGRhdGEpIHsKCQkgKiAgICAgICAgICBhbGVydCggJ1NhdmVkIGZpbHRlciB3YXM6ICcrZGF0YS5vU2VhcmNoLnNTZWFyY2ggKTsKCQkgKiAgICAgICAgfQoJCSAqICAgICAgfSApOwoJCSAqICAgIH0gKTsKCQkgKi8KCQkiZm5TdGF0ZUxvYWRlZCI6IG51bGwsCgkKCQoJCS8qKgoJCSAqIFNhdmUgdGhlIHRhYmxlIHN0YXRlLiBUaGlzIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gZGVmaW5lIHdoZXJlIGFuZCBob3cgdGhlIHN0YXRlCgkJICogaW5mb3JtYXRpb24gZm9yIHRoZSB0YWJsZSBpcyBzdG9yZWQgQnkgZGVmYXVsdCBEYXRhVGFibGVzIHdpbGwgdXNlIGBsb2NhbFN0b3JhZ2VgCgkJICogYnV0IHlvdSBtaWdodCB3aXNoIHRvIHVzZSBhIHNlcnZlci1zaWRlIGRhdGFiYXNlIG9yIGNvb2tpZXMuCgkJICogIEB0eXBlIGZ1bmN0aW9uCgkJICogIEBtZW1iZXIKCQkgKiAgQHBhcmFtIHtvYmplY3R9IHNldHRpbmdzIERhdGFUYWJsZXMgc2V0dGluZ3Mgb2JqZWN0CgkJICogIEBwYXJhbSB7b2JqZWN0fSBkYXRhIFRoZSBzdGF0ZSBvYmplY3QgdG8gYmUgc2F2ZWQKCQkgKgoJCSAqICBAZHRvcHQgQ2FsbGJhY2tzCgkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5zdGF0ZVNhdmVDYWxsYmFjawoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uKCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgICAgInN0YXRlU2F2ZSI6IHRydWUsCgkJICogICAgICAgICJzdGF0ZVNhdmVDYWxsYmFjayI6IGZ1bmN0aW9uIChzZXR0aW5ncywgZGF0YSkgewoJCSAqICAgICAgICAgIC8vIFNlbmQgYW4gQWpheCByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgd2l0aCB0aGUgc3RhdGUgb2JqZWN0CgkJICogICAgICAgICAgJC5hamF4KCB7CgkJICogICAgICAgICAgICAidXJsIjogIi9zdGF0ZV9zYXZlIiwKCQkgKiAgICAgICAgICAgICJkYXRhIjogZGF0YSwKCQkgKiAgICAgICAgICAgICJkYXRhVHlwZSI6ICJqc29uIiwKCQkgKiAgICAgICAgICAgICJtZXRob2QiOiAiUE9TVCIKCQkgKiAgICAgICAgICAgICJzdWNjZXNzIjogZnVuY3Rpb24gKCkge30KCQkgKiAgICAgICAgICB9ICk7CgkJICogICAgICAgIH0KCQkgKiAgICAgIH0gKTsKCQkgKiAgICB9ICk7CgkJICovCgkJImZuU3RhdGVTYXZlQ2FsbGJhY2siOiBmdW5jdGlvbiAoIHNldHRpbmdzLCBkYXRhICkgewoJCQl0cnkgewoJCQkJKHNldHRpbmdzLmlTdGF0ZUR1cmF0aW9uID09PSAtMSA/IHNlc3Npb25TdG9yYWdlIDogbG9jYWxTdG9yYWdlKS5zZXRJdGVtKAoJCQkJCSdEYXRhVGFibGVzXycrc2V0dGluZ3Muc0luc3RhbmNlKydfJytsb2NhdGlvbi5wYXRobmFtZSwKCQkJCQlKU09OLnN0cmluZ2lmeSggZGF0YSApCgkJCQkpOwoJCQl9IGNhdGNoIChlKSB7fQoJCX0sCgkKCQoJCS8qKgoJCSAqIENhbGxiYWNrIHdoaWNoIGFsbG93cyBtb2RpZmljYXRpb24gb2YgdGhlIHN0YXRlIHRvIGJlIHNhdmVkLiBDYWxsZWQgd2hlbiB0aGUgdGFibGUKCQkgKiBoYXMgY2hhbmdlZCBzdGF0ZSBhIG5ldyBzdGF0ZSBzYXZlIGlzIHJlcXVpcmVkLiBUaGlzIG1ldGhvZCBhbGxvd3MgbW9kaWZpY2F0aW9uIG9mCgkJICogdGhlIHN0YXRlIHNhdmluZyBvYmplY3QgcHJpb3IgdG8gYWN0dWFsbHkgZG9pbmcgdGhlIHNhdmUsIGluY2x1ZGluZyBhZGRpdGlvbiBvcgoJCSAqIG90aGVyIHN0YXRlIHByb3BlcnRpZXMgb3IgbW9kaWZpY2F0aW9uLiBOb3RlIHRoYXQgZm9yIHBsdWctaW4gYXV0aG9ycywgeW91IHNob3VsZAoJCSAqIHVzZSB0aGUgYHN0YXRlU2F2ZVBhcmFtc2AgZXZlbnQgdG8gc2F2ZSBwYXJhbWV0ZXJzIGZvciBhIHBsdWctaW4uCgkJICogIEB0eXBlIGZ1bmN0aW9uCgkJICogIEBwYXJhbSB7b2JqZWN0fSBzZXR0aW5ncyBEYXRhVGFibGVzIHNldHRpbmdzIG9iamVjdAoJCSAqICBAcGFyYW0ge29iamVjdH0gZGF0YSBUaGUgc3RhdGUgb2JqZWN0IHRvIGJlIHNhdmVkCgkJICoKCQkgKiAgQGR0b3B0IENhbGxiYWNrcwoJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMuc3RhdGVTYXZlUGFyYW1zCgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAvLyBSZW1vdmUgYSBzYXZlZCBmaWx0ZXIsIHNvIGZpbHRlcmluZyBpcyBuZXZlciBzYXZlZAoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJzdGF0ZVNhdmUiOiB0cnVlLAoJCSAqICAgICAgICAic3RhdGVTYXZlUGFyYW1zIjogZnVuY3Rpb24gKHNldHRpbmdzLCBkYXRhKSB7CgkJICogICAgICAgICAgZGF0YS5vU2VhcmNoLnNTZWFyY2ggPSAiIjsKCQkgKiAgICAgICAgfQoJCSAqICAgICAgfSApOwoJCSAqICAgIH0gKTsKCQkgKi8KCQkiZm5TdGF0ZVNhdmVQYXJhbXMiOiBudWxsLAoJCgkKCQkvKioKCQkgKiBEdXJhdGlvbiBmb3Igd2hpY2ggdGhlIHNhdmVkIHN0YXRlIGluZm9ybWF0aW9uIGlzIGNvbnNpZGVyZWQgdmFsaWQuIEFmdGVyIHRoaXMgcGVyaW9kCgkJICogaGFzIGVsYXBzZWQgdGhlIHN0YXRlIHdpbGwgYmUgcmV0dXJuZWQgdG8gdGhlIGRlZmF1bHQuCgkJICogVmFsdWUgaXMgZ2l2ZW4gaW4gc2Vjb25kcy4KCQkgKiAgQHR5cGUgaW50CgkJICogIEBkZWZhdWx0IDcyMDAgPGk+KDIgaG91cnMpPC9pPgoJCSAqCgkJICogIEBkdG9wdCBPcHRpb25zCgkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5zdGF0ZUR1cmF0aW9uCgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24oKSB7CgkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCSAqICAgICAgICAic3RhdGVEdXJhdGlvbiI6IDYwKjYwKjI0OyAvLyAxIGRheQoJCSAqICAgICAgfSApOwoJCSAqICAgIH0gKQoJCSAqLwoJCSJpU3RhdGVEdXJhdGlvbiI6IDcyMDAsCgkKCQoJCS8qKgoJCSAqIFdoZW4gZW5hYmxlZCBEYXRhVGFibGVzIHdpbGwgbm90IG1ha2UgYSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgZm9yIHRoZSBmaXJzdAoJCSAqIHBhZ2UgZHJhdyAtIHJhdGhlciBpdCB3aWxsIHVzZSB0aGUgZGF0YSBhbHJlYWR5IG9uIHRoZSBwYWdlIChubyBzb3J0aW5nIGV0YwoJCSAqIHdpbGwgYmUgYXBwbGllZCB0byBpdCksIHRodXMgc2F2aW5nIG9uIGFuIFhIUiBhdCBsb2FkIHRpbWUuIGBkZWZlckxvYWRpbmdgCgkJICogaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IGRlZmVycmVkIGxvYWRpbmcgaXMgcmVxdWlyZWQsIGJ1dCBpdCBpcyBhbHNvIHVzZWQKCQkgKiB0byB0ZWxsIERhdGFUYWJsZXMgaG93IG1hbnkgcmVjb3JkcyB0aGVyZSBhcmUgaW4gdGhlIGZ1bGwgdGFibGUgKGFsbG93aW5nCgkJICogdGhlIGluZm9ybWF0aW9uIGVsZW1lbnQgYW5kIHBhZ2luYXRpb24gdG8gYmUgZGlzcGxheWVkIGNvcnJlY3RseSkuIEluIHRoZSBjYXNlCgkJICogd2hlcmUgYSBmaWx0ZXJpbmcgaXMgYXBwbGllZCB0byB0aGUgdGFibGUgb24gaW5pdGlhbCBsb2FkLCB0aGlzIGNhbiBiZQoJCSAqIGluZGljYXRlZCBieSBnaXZpbmcgdGhlIHBhcmFtZXRlciBhcyBhbiBhcnJheSwgd2hlcmUgdGhlIGZpcnN0IGVsZW1lbnQgaXMKCQkgKiB0aGUgbnVtYmVyIG9mIHJlY29yZHMgYXZhaWxhYmxlIGFmdGVyIGZpbHRlcmluZyBhbmQgdGhlIHNlY29uZCBlbGVtZW50IGlzIHRoZQoJCSAqIG51bWJlciBvZiByZWNvcmRzIHdpdGhvdXQgZmlsdGVyaW5nIChhbGxvd2luZyB0aGUgdGFibGUgaW5mb3JtYXRpb24gZWxlbWVudAoJCSAqIHRvIGJlIHNob3duIGNvcnJlY3RseSkuCgkJICogIEB0eXBlIGludCB8IGFycmF5CgkJICogIEBkZWZhdWx0IG51bGwKCQkgKgoJCSAqICBAZHRvcHQgT3B0aW9ucwoJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMuZGVmZXJMb2FkaW5nCgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAvLyA1NyByZWNvcmRzIGF2YWlsYWJsZSBpbiB0aGUgdGFibGUsIG5vIGZpbHRlcmluZyBhcHBsaWVkCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uKCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgICAgInNlcnZlclNpZGUiOiB0cnVlLAoJCSAqICAgICAgICAiYWpheCI6ICJzY3JpcHRzL3NlcnZlcl9wcm9jZXNzaW5nLnBocCIsCgkJICogICAgICAgICJkZWZlckxvYWRpbmciOiA1NwoJCSAqICAgICAgfSApOwoJCSAqICAgIH0gKTsKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgIC8vIDU3IHJlY29yZHMgYWZ0ZXIgZmlsdGVyaW5nLCAxMDAgd2l0aG91dCBmaWx0ZXJpbmcgKGFuIGluaXRpYWwgZmlsdGVyIGFwcGxpZWQpCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uKCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgICAgInNlcnZlclNpZGUiOiB0cnVlLAoJCSAqICAgICAgICAiYWpheCI6ICJzY3JpcHRzL3NlcnZlcl9wcm9jZXNzaW5nLnBocCIsCgkJICogICAgICAgICJkZWZlckxvYWRpbmciOiBbIDU3LCAxMDAgXSwKCQkgKiAgICAgICAgInNlYXJjaCI6IHsKCQkgKiAgICAgICAgICAic2VhcmNoIjogIm15X2ZpbHRlciIKCQkgKiAgICAgICAgfQoJCSAqICAgICAgfSApOwoJCSAqICAgIH0gKTsKCQkgKi8KCQkiaURlZmVyTG9hZGluZyI6IG51bGwsCgkKCQoJCS8qKgoJCSAqIE51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgb24gYSBzaW5nbGUgcGFnZSB3aGVuIHVzaW5nIHBhZ2luYXRpb24uIElmCgkJICogZmVhdHVyZSBlbmFibGVkIChgbGVuZ3RoQ2hhbmdlYCkgdGhlbiB0aGUgZW5kIHVzZXIgd2lsbCBiZSBhYmxlIHRvIG92ZXJyaWRlCgkJICogdGhpcyB0byBhIGN1c3RvbSBzZXR0aW5nIHVzaW5nIGEgcG9wLXVwIG1lbnUuCgkJICogIEB0eXBlIGludAoJCSAqICBAZGVmYXVsdCAxMAoJCSAqCgkJICogIEBkdG9wdCBPcHRpb25zCgkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5wYWdlTGVuZ3RoCgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24oKSB7CgkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCSAqICAgICAgICAicGFnZUxlbmd0aCI6IDUwCgkJICogICAgICB9ICk7CgkJICogICAgfSApCgkJICovCgkJImlEaXNwbGF5TGVuZ3RoIjogMTAsCgkKCQoJCS8qKgoJCSAqIERlZmluZSB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIGRhdGEgZGlzcGxheSB3aGVuIHVzaW5nIERhdGFUYWJsZXMgd2l0aAoJCSAqIHBhZ2luYXRpb24uIE5vdGUgdGhhdCB0aGlzIHBhcmFtZXRlciBpcyB0aGUgbnVtYmVyIG9mIHJlY29yZHMsIHJhdGhlciB0aGFuCgkJICogdGhlIHBhZ2UgbnVtYmVyLCBzbyBpZiB5b3UgaGF2ZSAxMCByZWNvcmRzIHBlciBwYWdlIGFuZCB3YW50IHRvIHN0YXJ0IG9uCgkJICogdGhlIHRoaXJkIHBhZ2UsIGl0IHNob3VsZCBiZSAiMjAiLgoJCSAqICBAdHlwZSBpbnQKCQkgKiAgQGRlZmF1bHQgMAoJCSAqCgkJICogIEBkdG9wdCBPcHRpb25zCgkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5kaXNwbGF5U3RhcnQKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJkaXNwbGF5U3RhcnQiOiAyMAoJCSAqICAgICAgfSApOwoJCSAqICAgIH0gKQoJCSAqLwoJCSJpRGlzcGxheVN0YXJ0IjogMCwKCQoJCgkJLyoqCgkJICogQnkgZGVmYXVsdCBEYXRhVGFibGVzIGFsbG93cyBrZXlib2FyZCBuYXZpZ2F0aW9uIG9mIHRoZSB0YWJsZSAoc29ydGluZywgcGFnaW5nLAoJCSAqIGFuZCBmaWx0ZXJpbmcpIGJ5IGFkZGluZyBhIGB0YWJpbmRleGAgYXR0cmlidXRlIHRvIHRoZSByZXF1aXJlZCBlbGVtZW50cy4gVGhpcwoJCSAqIGFsbG93cyB5b3UgdG8gdGFiIHRocm91Z2ggdGhlIGNvbnRyb2xzIGFuZCBwcmVzcyB0aGUgZW50ZXIga2V5IHRvIGFjdGl2YXRlIHRoZW0uCgkJICogVGhlIHRhYmluZGV4IGlzIGRlZmF1bHQgMCwgbWVhbmluZyB0aGF0IHRoZSB0YWIgZm9sbG93cyB0aGUgZmxvdyBvZiB0aGUgZG9jdW1lbnQuCgkJICogWW91IGNhbiBvdmVycnVsZSB0aGlzIHVzaW5nIHRoaXMgcGFyYW1ldGVyIGlmIHlvdSB3aXNoLiBVc2UgYSB2YWx1ZSBvZiAtMSB0bwoJCSAqIGRpc2FibGUgYnVpbHQtaW4ga2V5Ym9hcmQgbmF2aWdhdGlvbi4KCQkgKiAgQHR5cGUgaW50CgkJICogIEBkZWZhdWx0IDAKCQkgKgoJCSAqICBAZHRvcHQgT3B0aW9ucwoJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMudGFiSW5kZXgKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJ0YWJJbmRleCI6IDEKCQkgKiAgICAgIH0gKTsKCQkgKiAgICB9ICk7CgkJICovCgkJImlUYWJJbmRleCI6IDAsCgkKCQoJCS8qKgoJCSAqIENsYXNzZXMgdGhhdCBEYXRhVGFibGVzIGFzc2lnbnMgdG8gdGhlIHZhcmlvdXMgY29tcG9uZW50cyBhbmQgZmVhdHVyZXMKCQkgKiB0aGF0IGl0IGFkZHMgdG8gdGhlIEhUTUwgdGFibGUuIFRoaXMgYWxsb3dzIGNsYXNzZXMgdG8gYmUgY29uZmlndXJlZAoJCSAqIGR1cmluZyBpbml0aWFsaXNhdGlvbiBpbiBhZGRpdGlvbiB0byB0aHJvdWdoIHRoZSBzdGF0aWMKCQkgKiB7QGxpbmsgRGF0YVRhYmxlLmV4dC5vU3RkQ2xhc3Nlc30gb2JqZWN0KS4KCQkgKiAgQG5hbWVzcGFjZQoJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMuY2xhc3NlcwoJCSAqLwoJCSJvQ2xhc3NlcyI6IHt9LAoJCgkKCQkvKioKCQkgKiBBbGwgc3RyaW5ncyB0aGF0IERhdGFUYWJsZXMgdXNlcyBpbiB0aGUgdXNlciBpbnRlcmZhY2UgdGhhdCBpdCBjcmVhdGVzCgkJICogYXJlIGRlZmluZWQgaW4gdGhpcyBvYmplY3QsIGFsbG93aW5nIHlvdSB0byBtb2RpZmllZCB0aGVtIGluZGl2aWR1YWxseSBvcgoJCSAqIGNvbXBsZXRlbHkgcmVwbGFjZSB0aGVtIGFsbCBhcyByZXF1aXJlZC4KCQkgKiAgQG5hbWVzcGFjZQoJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMubGFuZ3VhZ2UKCQkgKi8KCQkib0xhbmd1YWdlIjogewoJCQkvKioKCQkJICogU3RyaW5ncyB0aGF0IGFyZSB1c2VkIGZvciBXQUktQVJJQSBsYWJlbHMgYW5kIGNvbnRyb2xzIG9ubHkgKHRoZXNlIGFyZSBub3QKCQkJICogYWN0dWFsbHkgdmlzaWJsZSBvbiB0aGUgcGFnZSwgYnV0IHdpbGwgYmUgcmVhZCBieSBzY3JlZW5yZWFkZXJzLCBhbmQgdGh1cwoJCQkgKiBtdXN0IGJlIGludGVybmF0aW9uYWxpc2VkIGFzIHdlbGwpLgoJCQkgKiAgQG5hbWVzcGFjZQoJCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLmxhbmd1YWdlLmFyaWEKCQkJICovCgkJCSJvQXJpYSI6IHsKCQkJCS8qKgoJCQkJICogQVJJQSBsYWJlbCB0aGF0IGlzIGFkZGVkIHRvIHRoZSB0YWJsZSBoZWFkZXJzIHdoZW4gdGhlIGNvbHVtbiBtYXkgYmUKCQkJCSAqIHNvcnRlZCBhc2NlbmRpbmcgYnkgYWN0aXZpbmcgdGhlIGNvbHVtbiAoY2xpY2sgb3IgcmV0dXJuIHdoZW4gZm9jdXNlZCkuCgkJCQkgKiBOb3RlIHRoYXQgdGhlIGNvbHVtbiBoZWFkZXIgaXMgcHJlZml4ZWQgdG8gdGhpcyBzdHJpbmcuCgkJCQkgKiAgQHR5cGUgc3RyaW5nCgkJCQkgKiAgQGRlZmF1bHQgOiBhY3RpdmF0ZSB0byBzb3J0IGNvbHVtbiBhc2NlbmRpbmcKCQkJCSAqCgkJCQkgKiAgQGR0b3B0IExhbmd1YWdlCgkJCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLmxhbmd1YWdlLmFyaWEuc29ydEFzY2VuZGluZwoJCQkJICoKCQkJCSAqICBAZXhhbXBsZQoJCQkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uKCkgewoJCQkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCQkJICogICAgICAgICJsYW5ndWFnZSI6IHsKCQkJCSAqICAgICAgICAgICJhcmlhIjogewoJCQkJICogICAgICAgICAgICAic29ydEFzY2VuZGluZyI6ICIgLSBjbGljay9yZXR1cm4gdG8gc29ydCBhc2NlbmRpbmciCgkJCQkgKiAgICAgICAgICB9CgkJCQkgKiAgICAgICAgfQoJCQkJICogICAgICB9ICk7CgkJCQkgKiAgICB9ICk7CgkJCQkgKi8KCQkJCSJzU29ydEFzY2VuZGluZyI6ICI6IGFjdGl2YXRlIHRvIHNvcnQgY29sdW1uIGFzY2VuZGluZyIsCgkKCQkJCS8qKgoJCQkJICogQVJJQSBsYWJlbCB0aGF0IGlzIGFkZGVkIHRvIHRoZSB0YWJsZSBoZWFkZXJzIHdoZW4gdGhlIGNvbHVtbiBtYXkgYmUKCQkJCSAqIHNvcnRlZCBkZXNjZW5kaW5nIGJ5IGFjdGl2aW5nIHRoZSBjb2x1bW4gKGNsaWNrIG9yIHJldHVybiB3aGVuIGZvY3VzZWQpLgoJCQkJICogTm90ZSB0aGF0IHRoZSBjb2x1bW4gaGVhZGVyIGlzIHByZWZpeGVkIHRvIHRoaXMgc3RyaW5nLgoJCQkJICogIEB0eXBlIHN0cmluZwoJCQkJICogIEBkZWZhdWx0IDogYWN0aXZhdGUgdG8gc29ydCBjb2x1bW4gYXNjZW5kaW5nCgkJCQkgKgoJCQkJICogIEBkdG9wdCBMYW5ndWFnZQoJCQkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5sYW5ndWFnZS5hcmlhLnNvcnREZXNjZW5kaW5nCgkJCQkgKgoJCQkJICogIEBleGFtcGxlCgkJCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24oKSB7CgkJCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJCQkgKiAgICAgICAgImxhbmd1YWdlIjogewoJCQkJICogICAgICAgICAgImFyaWEiOiB7CgkJCQkgKiAgICAgICAgICAgICJzb3J0RGVzY2VuZGluZyI6ICIgLSBjbGljay9yZXR1cm4gdG8gc29ydCBkZXNjZW5kaW5nIgoJCQkJICogICAgICAgICAgfQoJCQkJICogICAgICAgIH0KCQkJCSAqICAgICAgfSApOwoJCQkJICogICAgfSApOwoJCQkJICovCgkJCQkic1NvcnREZXNjZW5kaW5nIjogIjogYWN0aXZhdGUgdG8gc29ydCBjb2x1bW4gZGVzY2VuZGluZyIKCQkJfSwKCQoJCQkvKioKCQkJICogUGFnaW5hdGlvbiBzdHJpbmcgdXNlZCBieSBEYXRhVGFibGVzIGZvciB0aGUgYnVpbHQtaW4gcGFnaW5hdGlvbgoJCQkgKiBjb250cm9sIHR5cGVzLgoJCQkgKiAgQG5hbWVzcGFjZQoJCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLmxhbmd1YWdlLnBhZ2luYXRlCgkJCSAqLwoJCQkib1BhZ2luYXRlIjogewoJCQkJLyoqCgkJCQkgKiBUZXh0IHRvIHVzZSB3aGVuIHVzaW5nIHRoZSAnZnVsbF9udW1iZXJzJyB0eXBlIG9mIHBhZ2luYXRpb24gZm9yIHRoZQoJCQkJICogYnV0dG9uIHRvIHRha2UgdGhlIHVzZXIgdG8gdGhlIGZpcnN0IHBhZ2UuCgkJCQkgKiAgQHR5cGUgc3RyaW5nCgkJCQkgKiAgQGRlZmF1bHQgRmlyc3QKCQkJCSAqCgkJCQkgKiAgQGR0b3B0IExhbmd1YWdlCgkJCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLmxhbmd1YWdlLnBhZ2luYXRlLmZpcnN0CgkJCQkgKgoJCQkJICogIEBleGFtcGxlCgkJCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24oKSB7CgkJCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJCQkgKiAgICAgICAgImxhbmd1YWdlIjogewoJCQkJICogICAgICAgICAgInBhZ2luYXRlIjogewoJCQkJICogICAgICAgICAgICAiZmlyc3QiOiAiRmlyc3QgcGFnZSIKCQkJCSAqICAgICAgICAgIH0KCQkJCSAqICAgICAgICB9CgkJCQkgKiAgICAgIH0gKTsKCQkJCSAqICAgIH0gKTsKCQkJCSAqLwoJCQkJInNGaXJzdCI6ICJGaXJzdCIsCgkKCQoJCQkJLyoqCgkJCQkgKiBUZXh0IHRvIHVzZSB3aGVuIHVzaW5nIHRoZSAnZnVsbF9udW1iZXJzJyB0eXBlIG9mIHBhZ2luYXRpb24gZm9yIHRoZQoJCQkJICogYnV0dG9uIHRvIHRha2UgdGhlIHVzZXIgdG8gdGhlIGxhc3QgcGFnZS4KCQkJCSAqICBAdHlwZSBzdHJpbmcKCQkJCSAqICBAZGVmYXVsdCBMYXN0CgkJCQkgKgoJCQkJICogIEBkdG9wdCBMYW5ndWFnZQoJCQkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5sYW5ndWFnZS5wYWdpbmF0ZS5sYXN0CgkJCQkgKgoJCQkJICogIEBleGFtcGxlCgkJCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24oKSB7CgkJCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYg=="
},
{
"key": "jquery.dataTables.js?4?3?3",
"type": "binary",
"value": "base64:bGUoIHsKCQkJCSAqICAgICAgICAibGFuZ3VhZ2UiOiB7CgkJCQkgKiAgICAgICAgICAicGFnaW5hdGUiOiB7CgkJCQkgKiAgICAgICAgICAgICJsYXN0IjogIkxhc3QgcGFnZSIKCQkJCSAqICAgICAgICAgIH0KCQkJCSAqICAgICAgICB9CgkJCQkgKiAgICAgIH0gKTsKCQkJCSAqICAgIH0gKTsKCQkJCSAqLwoJCQkJInNMYXN0IjogIkxhc3QiLAoJCgkKCQkJCS8qKgoJCQkJICogVGV4dCB0byB1c2UgZm9yIHRoZSAnbmV4dCcgcGFnaW5hdGlvbiBidXR0b24gKHRvIHRha2UgdGhlIHVzZXIgdG8gdGhlCgkJCQkgKiBuZXh0IHBhZ2UpLgoJCQkJICogIEB0eXBlIHN0cmluZwoJCQkJICogIEBkZWZhdWx0IE5leHQKCQkJCSAqCgkJCQkgKiAgQGR0b3B0IExhbmd1YWdlCgkJCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLmxhbmd1YWdlLnBhZ2luYXRlLm5leHQKCQkJCSAqCgkJCQkgKiAgQGV4YW1wbGUKCQkJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkJCSAqICAgICAgICAibGFuZ3VhZ2UiOiB7CgkJCQkgKiAgICAgICAgICAicGFnaW5hdGUiOiB7CgkJCQkgKiAgICAgICAgICAgICJuZXh0IjogIk5leHQgcGFnZSIKCQkJCSAqICAgICAgICAgIH0KCQkJCSAqICAgICAgICB9CgkJCQkgKiAgICAgIH0gKTsKCQkJCSAqICAgIH0gKTsKCQkJCSAqLwoJCQkJInNOZXh0IjogIk5leHQiLAoJCgkKCQkJCS8qKgoJCQkJICogVGV4dCB0byB1c2UgZm9yIHRoZSAncHJldmlvdXMnIHBhZ2luYXRpb24gYnV0dG9uICh0byB0YWtlIHRoZSB1c2VyIHRvCgkJCQkgKiB0aGUgcHJldmlvdXMgcGFnZSkuCgkJCQkgKiAgQHR5cGUgc3RyaW5nCgkJCQkgKiAgQGRlZmF1bHQgUHJldmlvdXMKCQkJCSAqCgkJCQkgKiAgQGR0b3B0IExhbmd1YWdlCgkJCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLmxhbmd1YWdlLnBhZ2luYXRlLnByZXZpb3VzCgkJCQkgKgoJCQkJICogIEBleGFtcGxlCgkJCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24oKSB7CgkJCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJCQkgKiAgICAgICAgImxhbmd1YWdlIjogewoJCQkJICogICAgICAgICAgInBhZ2luYXRlIjogewoJCQkJICogICAgICAgICAgICAicHJldmlvdXMiOiAiUHJldmlvdXMgcGFnZSIKCQkJCSAqICAgICAgICAgIH0KCQkJCSAqICAgICAgICB9CgkJCQkgKiAgICAgIH0gKTsKCQkJCSAqICAgIH0gKTsKCQkJCSAqLwoJCQkJInNQcmV2aW91cyI6ICJQcmV2aW91cyIKCQkJfSwKCQoJCQkvKioKCQkJICogVGhpcyBzdHJpbmcgaXMgc2hvd24gaW4gcHJlZmVyZW5jZSB0byBgemVyb1JlY29yZHNgIHdoZW4gdGhlIHRhYmxlIGlzCgkJCSAqIGVtcHR5IG9mIGRhdGEgKHJlZ2FyZGxlc3Mgb2YgZmlsdGVyaW5nKS4gTm90ZSB0aGF0IHRoaXMgaXMgYW4gb3B0aW9uYWwKCQkJICogcGFyYW1ldGVyIC0gaWYgaXQgaXMgbm90IGdpdmVuLCB0aGUgdmFsdWUgb2YgYHplcm9SZWNvcmRzYCB3aWxsIGJlIHVzZWQKCQkJICogaW5zdGVhZCAoZWl0aGVyIHRoZSBkZWZhdWx0IG9yIGdpdmVuIHZhbHVlKS4KCQkJICogIEB0eXBlIHN0cmluZwoJCQkgKiAgQGRlZmF1bHQgTm8gZGF0YSBhdmFpbGFibGUgaW4gdGFibGUKCQkJICoKCQkJICogIEBkdG9wdCBMYW5ndWFnZQoJCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLmxhbmd1YWdlLmVtcHR5VGFibGUKCQkJICoKCQkJICogIEBleGFtcGxlCgkJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCQkgKiAgICAgICAgImxhbmd1YWdlIjogewoJCQkgKiAgICAgICAgICAiZW1wdHlUYWJsZSI6ICJObyBkYXRhIGF2YWlsYWJsZSBpbiB0YWJsZSIKCQkJICogICAgICAgIH0KCQkJICogICAgICB9ICk7CgkJCSAqICAgIH0gKTsKCQkJICovCgkJCSJzRW1wdHlUYWJsZSI6ICJObyBkYXRhIGF2YWlsYWJsZSBpbiB0YWJsZSIsCgkKCQoJCQkvKioKCQkJICogVGhpcyBzdHJpbmcgZ2l2ZXMgaW5mb3JtYXRpb24gdG8gdGhlIGVuZCB1c2VyIGFib3V0IHRoZSBpbmZvcm1hdGlvbgoJCQkgKiB0aGF0IGlzIGN1cnJlbnQgb24gZGlzcGxheSBvbiB0aGUgcGFnZS4gVGhlIGZvbGxvd2luZyB0b2tlbnMgY2FuIGJlCgkJCSAqIHVzZWQgaW4gdGhlIHN0cmluZyBhbmQgd2lsbCBiZSBkeW5hbWljYWxseSByZXBsYWNlZCBhcyB0aGUgdGFibGUKCQkJICogZGlzcGxheSB1cGRhdGVzLiBUaGlzIHRva2VucyBjYW4gYmUgcGxhY2VkIGFueXdoZXJlIGluIHRoZSBzdHJpbmcsIG9yCgkJCSAqIHJlbW92ZWQgYXMgbmVlZGVkIGJ5IHRoZSBsYW5ndWFnZSByZXF1aXJlczoKCQkJICoKCQkJICogKiBgXF9TVEFSVFxfYCAtIERpc3BsYXkgaW5kZXggb2YgdGhlIGZpcnN0IHJlY29yZCBvbiB0aGUgY3VycmVudCBwYWdlCgkJCSAqICogYFxfRU5EXF9gIC0gRGlzcGxheSBpbmRleCBvZiB0aGUgbGFzdCByZWNvcmQgb24gdGhlIGN1cnJlbnQgcGFnZQoJCQkgKiAqIGBcX1RPVEFMXF9gIC0gTnVtYmVyIG9mIHJlY29yZHMgaW4gdGhlIHRhYmxlIGFmdGVyIGZpbHRlcmluZwoJCQkgKiAqIGBcX01BWFxfYCAtIE51bWJlciBvZiByZWNvcmRzIGluIHRoZSB0YWJsZSB3aXRob3V0IGZpbHRlcmluZwoJCQkgKiAqIGBcX1BBR0VcX2AgLSBDdXJyZW50IHBhZ2UgbnVtYmVyCgkJCSAqICogYFxfUEFHRVNcX2AgLSBUb3RhbCBudW1iZXIgb2YgcGFnZXMgb2YgZGF0YSBpbiB0aGUgdGFibGUKCQkJICoKCQkJICogIEB0eXBlIHN0cmluZwoJCQkgKiAgQGRlZmF1bHQgU2hvd2luZyBfU1RBUlRfIHRvIF9FTkRfIG9mIF9UT1RBTF8gZW50cmllcwoJCQkgKgoJCQkgKiAgQGR0b3B0IExhbmd1YWdlCgkJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMubGFuZ3VhZ2UuaW5mbwoJCQkgKgoJCQkgKiAgQGV4YW1wbGUKCQkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uKCkgewoJCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJCSAqICAgICAgICAibGFuZ3VhZ2UiOiB7CgkJCSAqICAgICAgICAgICJpbmZvIjogIlNob3dpbmcgcGFnZSBfUEFHRV8gb2YgX1BBR0VTXyIKCQkJICogICAgICAgIH0KCQkJICogICAgICB9ICk7CgkJCSAqICAgIH0gKTsKCQkJICovCgkJCSJzSW5mbyI6ICJTaG93aW5nIF9TVEFSVF8gdG8gX0VORF8gb2YgX1RPVEFMXyBlbnRyaWVzIiwKCQoJCgkJCS8qKgoJCQkgKiBEaXNwbGF5IGluZm9ybWF0aW9uIHN0cmluZyBmb3Igd2hlbiB0aGUgdGFibGUgaXMgZW1wdHkuIFR5cGljYWxseSB0aGUKCQkJICogZm9ybWF0IG9mIHRoaXMgc3RyaW5nIHNob3VsZCBtYXRjaCBgaW5mb2AuCgkJCSAqICBAdHlwZSBzdHJpbmcKCQkJICogIEBkZWZhdWx0IFNob3dpbmcgMCB0byAwIG9mIDAgZW50cmllcwoJCQkgKgoJCQkgKiAgQGR0b3B0IExhbmd1YWdlCgkJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMubGFuZ3VhZ2UuaW5mb0VtcHR5CgkJCSAqCgkJCSAqICBAZXhhbXBsZQoJCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24oKSB7CgkJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkJICogICAgICAgICJsYW5ndWFnZSI6IHsKCQkJICogICAgICAgICAgImluZm9FbXB0eSI6ICJObyBlbnRyaWVzIHRvIHNob3ciCgkJCSAqICAgICAgICB9CgkJCSAqICAgICAgfSApOwoJCQkgKiAgICB9ICk7CgkJCSAqLwoJCQkic0luZm9FbXB0eSI6ICJTaG93aW5nIDAgdG8gMCBvZiAwIGVudHJpZXMiLAoJCgkKCQkJLyoqCgkJCSAqIFdoZW4gYSB1c2VyIGZpbHRlcnMgdGhlIGluZm9ybWF0aW9uIGluIGEgdGFibGUsIHRoaXMgc3RyaW5nIGlzIGFwcGVuZGVkCgkJCSAqIHRvIHRoZSBpbmZvcm1hdGlvbiAoYGluZm9gKSB0byBnaXZlIGFuIGlkZWEgb2YgaG93IHN0cm9uZyB0aGUgZmlsdGVyaW5nCgkJCSAqIGlzLiBUaGUgdmFyaWFibGUgX01BWF8gaXMgZHluYW1pY2FsbHkgdXBkYXRlZC4KCQkJICogIEB0eXBlIHN0cmluZwoJCQkgKiAgQGRlZmF1bHQgKGZpbHRlcmVkIGZyb20gX01BWF8gdG90YWwgZW50cmllcykKCQkJICoKCQkJICogIEBkdG9wdCBMYW5ndWFnZQoJCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLmxhbmd1YWdlLmluZm9GaWx0ZXJlZAoJCQkgKgoJCQkgKiAgQGV4YW1wbGUKCQkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uKCkgewoJCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJCSAqICAgICAgICAibGFuZ3VhZ2UiOiB7CgkJCSAqICAgICAgICAgICJpbmZvRmlsdGVyZWQiOiAiIC0gZmlsdGVyaW5nIGZyb20gX01BWF8gcmVjb3JkcyIKCQkJICogICAgICAgIH0KCQkJICogICAgICB9ICk7CgkJCSAqICAgIH0gKTsKCQkJICovCgkJCSJzSW5mb0ZpbHRlcmVkIjogIihmaWx0ZXJlZCBmcm9tIF9NQVhfIHRvdGFsIGVudHJpZXMpIiwKCQoJCgkJCS8qKgoJCQkgKiBJZiBjYW4gYmUgdXNlZnVsIHRvIGFwcGVuZCBleHRyYSBpbmZvcm1hdGlvbiB0byB0aGUgaW5mbyBzdHJpbmcgYXQgdGltZXMsCgkJCSAqIGFuZCB0aGlzIHZhcmlhYmxlIGRvZXMgZXhhY3RseSB0aGF0LiBUaGlzIGluZm9ybWF0aW9uIHdpbGwgYmUgYXBwZW5kZWQgdG8KCQkJICogdGhlIGBpbmZvYCAoYGluZm9FbXB0eWAgYW5kIGBpbmZvRmlsdGVyZWRgIGluIHdoYXRldmVyIGNvbWJpbmF0aW9uIHRoZXkgYXJlCgkJCSAqIGJlaW5nIHVzZWQpIGF0IGFsbCB0aW1lcy4KCQkJICogIEB0eXBlIHN0cmluZwoJCQkgKiAgQGRlZmF1bHQgPGk+RW1wdHkgc3RyaW5nPC9pPgoJCQkgKgoJCQkgKiAgQGR0b3B0IExhbmd1YWdlCgkJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMubGFuZ3VhZ2UuaW5mb1Bvc3RGaXgKCQkJICoKCQkJICogIEBleGFtcGxlCgkJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCQkgKiAgICAgICAgImxhbmd1YWdlIjogewoJCQkgKiAgICAgICAgICAiaW5mb1Bvc3RGaXgiOiAiQWxsIHJlY29yZHMgc2hvd24gYXJlIGRlcml2ZWQgZnJvbSByZWFsIGluZm9ybWF0aW9uLiIKCQkJICogICAgICAgIH0KCQkJICogICAgICB9ICk7CgkJCSAqICAgIH0gKTsKCQkJICovCgkJCSJzSW5mb1Bvc3RGaXgiOiAiIiwKCQoJCgkJCS8qKgoJCQkgKiBUaGlzIGRlY2ltYWwgcGxhY2Ugb3BlcmF0b3IgaXMgYSBsaXR0bGUgZGlmZmVyZW50IGZyb20gdGhlIG90aGVyCgkJCSAqIGxhbmd1YWdlIG9wdGlvbnMgc2luY2UgRGF0YVRhYmxlcyBkb2Vzbid0IG91dHB1dCBmbG9hdGluZyBwb2ludAoJCQkgKiBudW1iZXJzLCBzbyBpdCB3b24ndCBldmVyIHVzZSB0aGlzIGZvciBkaXNwbGF5IG9mIGEgbnVtYmVyLiBSYXRoZXIsCgkJCSAqIHdoYXQgdGhpcyBwYXJhbWV0ZXIgZG9lcyBpcyBtb2RpZnkgdGhlIHNvcnQgbWV0aG9kcyBvZiB0aGUgdGFibGUgc28KCQkJICogdGhhdCBudW1iZXJzIHdoaWNoIGFyZSBpbiBhIGZvcm1hdCB3aGljaCBoYXMgYSBjaGFyYWN0ZXIgb3RoZXIgdGhhbgoJCQkgKiBhIHBlcmlvZCAoYC5gKSBhcyBhIGRlY2ltYWwgcGxhY2Ugd2lsbCBiZSBzb3J0ZWQgbnVtZXJpY2FsbHkuCgkJCSAqCgkJCSAqIE5vdGUgdGhhdCBudW1iZXJzIHdpdGggZGlmZmVyZW50IGRlY2ltYWwgcGxhY2VzIGNhbm5vdCBiZSBzaG93biBpbgoJCQkgKiB0aGUgc2FtZSB0YWJsZSBhbmQgc3RpbGwgYmUgc29ydGFibGUsIHRoZSB0YWJsZSBtdXN0IGJlIGNvbnNpc3RlbnQuCgkJCSAqIEhvd2V2ZXIsIG11bHRpcGxlIGRpZmZlcmVudCB0YWJsZXMgb24gdGhlIHBhZ2UgY2FuIHVzZSBkaWZmZXJlbnQKCQkJICogZGVjaW1hbCBwbGFjZSBjaGFyYWN0ZXJzLgoJCQkgKiAgQHR5cGUgc3RyaW5nCgkJCSAqICBAZGVmYXVsdCAKCQkJICoKCQkJICogIEBkdG9wdCBMYW5ndWFnZQoJCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLmxhbmd1YWdlLmRlY2ltYWwKCQkJICoKCQkJICogIEBleGFtcGxlCgkJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCQkgKiAgICAgICAgImxhbmd1YWdlIjogewoJCQkgKiAgICAgICAgICAiZGVjaW1hbCI6ICIsIgoJCQkgKiAgICAgICAgICAidGhvdXNhbmRzIjogIi4iCgkJCSAqICAgICAgICB9CgkJCSAqICAgICAgfSApOwoJCQkgKiAgICB9ICk7CgkJCSAqLwoJCQkic0RlY2ltYWwiOiAiIiwKCQoJCgkJCS8qKgoJCQkgKiBEYXRhVGFibGVzIGhhcyBhIGJ1aWxkIGluIG51bWJlciBmb3JtYXR0ZXIgKGBmb3JtYXROdW1iZXJgKSB3aGljaCBpcwoJCQkgKiB1c2VkIHRvIGZvcm1hdCBsYXJnZSBudW1iZXJzIHRoYXQgYXJlIHVzZWQgaW4gdGhlIHRhYmxlIGluZm9ybWF0aW9uLgoJCQkgKiBCeSBkZWZhdWx0IGEgY29tbWEgaXMgdXNlZCwgYnV0IHRoaXMgY2FuIGJlIHRyaXZpYWxseSBjaGFuZ2VkIHRvIGFueQoJCQkgKiBjaGFyYWN0ZXIgeW91IHdpc2ggd2l0aCB0aGlzIHBhcmFtZXRlci4KCQkJICogIEB0eXBlIHN0cmluZwoJCQkgKiAgQGRlZmF1bHQgLAoJCQkgKgoJCQkgKiAgQGR0b3B0IExhbmd1YWdlCgkJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMubGFuZ3VhZ2UudGhvdXNhbmRzCgkJCSAqCgkJCSAqICBAZXhhbXBsZQoJCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24oKSB7CgkJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkJICogICAgICAgICJsYW5ndWFnZSI6IHsKCQkJICogICAgICAgICAgInRob3VzYW5kcyI6ICInIgoJCQkgKiAgICAgICAgfQoJCQkgKiAgICAgIH0gKTsKCQkJICogICAgfSApOwoJCQkgKi8KCQkJInNUaG91c2FuZHMiOiAiLCIsCgkKCQoJCQkvKioKCQkJICogRGV0YWlsIHRoZSBhY3Rpb24gdGhhdCB3aWxsIGJlIHRha2VuIHdoZW4gdGhlIGRyb3AgZG93biBtZW51IGZvciB0aGUKCQkJICogcGFnaW5hdGlvbiBsZW5ndGggb3B0aW9uIGlzIGNoYW5nZWQuIFRoZSAnX01FTlVfJyB2YXJpYWJsZSBpcyByZXBsYWNlZAoJCQkgKiB3aXRoIGEgZGVmYXVsdCBzZWxlY3QgbGlzdCBvZiAxMCwgMjUsIDUwIGFuZCAxMDAsIGFuZCBjYW4gYmUgcmVwbGFjZWQKCQkJICogd2l0aCBhIGN1c3RvbSBzZWxlY3QgYm94IGlmIHJlcXVpcmVkLgoJCQkgKiAgQHR5cGUgc3RyaW5nCgkJCSAqICBAZGVmYXVsdCBTaG93IF9NRU5VXyBlbnRyaWVzCgkJCSAqCgkJCSAqICBAZHRvcHQgTGFuZ3VhZ2UKCQkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5sYW5ndWFnZS5sZW5ndGhNZW51CgkJCSAqCgkJCSAqICBAZXhhbXBsZQoJCQkgKiAgICAvLyBMYW5ndWFnZSBjaGFuZ2Ugb25seQoJCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24oKSB7CgkJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkJICogICAgICAgICJsYW5ndWFnZSI6IHsKCQkJICogICAgICAgICAgImxlbmd0aE1lbnUiOiAiRGlzcGxheSBfTUVOVV8gcmVjb3JkcyIKCQkJICogICAgICAgIH0KCQkJICogICAgICB9ICk7CgkJCSAqICAgIH0gKTsKCQkJICoKCQkJICogIEBleGFtcGxlCgkJCSAqICAgIC8vIExhbmd1YWdlIGFuZCBvcHRpb25zIGNoYW5nZQoJCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24oKSB7CgkJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkJICogICAgICAgICJsYW5ndWFnZSI6IHsKCQkJICogICAgICAgICAgImxlbmd0aE1lbnUiOiAnRGlzcGxheSA8c2VsZWN0PicrCgkJCSAqICAgICAgICAgICAgJzxvcHRpb24gdmFsdWU9IjEwIj4xMDwvb3B0aW9uPicrCgkJCSAqICAgICAgICAgICAgJzxvcHRpb24gdmFsdWU9IjIwIj4yMDwvb3B0aW9uPicrCgkJCSAqICAgICAgICAgICAgJzxvcHRpb24gdmFsdWU9IjMwIj4zMDwvb3B0aW9uPicrCgkJCSAqICAgICAgICAgICAgJzxvcHRpb24gdmFsdWU9IjQwIj40MDwvb3B0aW9uPicrCgkJCSAqICAgICAgICAgICAgJzxvcHRpb24gdmFsdWU9IjUwIj41MDwvb3B0aW9uPicrCgkJCSAqICAgICAgICAgICAgJzxvcHRpb24gdmFsdWU9Ii0xIj5BbGw8L29wdGlvbj4nKwoJCQkgKiAgICAgICAgICAgICc8L3NlbGVjdD4gcmVjb3JkcycKCQkJICogICAgICAgIH0KCQkJICogICAgICB9ICk7CgkJCSAqICAgIH0gKTsKCQkJICovCgkJCSJzTGVuZ3RoTWVudSI6ICJTaG93IF9NRU5VXyBlbnRyaWVzIiwKCQoJCgkJCS8qKgoJCQkgKiBXaGVuIHVzaW5nIEFqYXggc291cmNlZCBkYXRhIGFuZCBkdXJpbmcgdGhlIGZpcnN0IGRyYXcgd2hlbiBEYXRhVGFibGVzIGlzCgkJCSAqIGdhdGhlcmluZyB0aGUgZGF0YSwgdGhpcyBtZXNzYWdlIGlzIHNob3duIGluIGFuIGVtcHR5IHJvdyBpbiB0aGUgdGFibGUgdG8KCQkJICogaW5kaWNhdGUgdG8gdGhlIGVuZCB1c2VyIHRoZSB0aGUgZGF0YSBpcyBiZWluZyBsb2FkZWQuIE5vdGUgdGhhdCB0aGlzCgkJCSAqIHBhcmFtZXRlciBpcyBub3QgdXNlZCB3aGVuIGxvYWRpbmcgZGF0YSBieSBzZXJ2ZXItc2lkZSBwcm9jZXNzaW5nLCBqdXN0CgkJCSAqIEFqYXggc291cmNlZCBkYXRhIHdpdGggY2xpZW50LXNpZGUgcHJvY2Vzc2luZy4KCQkJICogIEB0eXBlIHN0cmluZwoJCQkgKiAgQGRlZmF1bHQgTG9hZGluZy4uLgoJCQkgKgoJCQkgKiAgQGR0b3B0IExhbmd1YWdlCgkJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMubGFuZ3VhZ2UubG9hZGluZ1JlY29yZHMKCQkJICoKCQkJICogIEBleGFtcGxlCgkJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCQkgKiAgICAgICAgImxhbmd1YWdlIjogewoJCQkgKiAgICAgICAgICAibG9hZGluZ1JlY29yZHMiOiAiUGxlYXNlIHdhaXQgLSBsb2FkaW5nLi4uIgoJCQkgKiAgICAgICAgfQoJCQkgKiAgICAgIH0gKTsKCQkJICogICAgfSApOwoJCQkgKi8KCQkJInNMb2FkaW5nUmVjb3JkcyI6ICJMb2FkaW5nLi4uIiwKCQoJCgkJCS8qKgoJCQkgKiBUZXh0IHdoaWNoIGlzIGRpc3BsYXllZCB3aGVuIHRoZSB0YWJsZSBpcyBwcm9jZXNzaW5nIGEgdXNlciBhY3Rpb24KCQkJICogKHVzdWFsbHkgYSBzb3J0IGNvbW1hbmQgb3Igc2ltaWxhcikuCgkJCSAqICBAdHlwZSBzdHJpbmcKCQkJICogIEBkZWZhdWx0IFByb2Nlc3NpbmcuLi4KCQkJICoKCQkJICogIEBkdG9wdCBMYW5ndWFnZQoJCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLmxhbmd1YWdlLnByb2Nlc3NpbmcKCQkJICoKCQkJICogIEBleGFtcGxlCgkJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCQkgKiAgICAgICAgImxhbmd1YWdlIjogewoJCQkgKiAgICAgICAgICAicHJvY2Vzc2luZyI6ICJEYXRhVGFibGVzIGlzIGN1cnJlbnRseSBidXN5IgoJCQkgKiAgICAgICAgfQoJCQkgKiAgICAgIH0gKTsKCQkJICogICAgfSApOwoJCQkgKi8KCQkJInNQcm9jZXNzaW5nIjogIlByb2Nlc3NpbmcuLi4iLAoJCgkKCQkJLyoqCgkJCSAqIERldGFpbHMgdGhlIGFjdGlvbnMgdGhhdCB3aWxsIGJlIHRha2VuIHdoZW4gdGhlIHVzZXIgdHlwZXMgaW50byB0aGUKCQkJICogZmlsdGVyaW5nIGlucHV0IHRleHQgYm94LiBUaGUgdmFyaWFibGUgIl9JTlBVVF8iLCBpZiB1c2VkIGluIHRoZSBzdHJpbmcsCgkJCSAqIGlzIHJlcGxhY2VkIHdpdGggdGhlIEhUTUwgdGV4dCBib3ggZm9yIHRoZSBmaWx0ZXJpbmcgaW5wdXQgYWxsb3dpbmcKCQkJICogY29udHJvbCBvdmVyIHdoZXJlIGl0IGFwcGVhcnMgaW4gdGhlIHN0cmluZy4gSWYgIl9JTlBVVF8iIGlzIG5vdCBnaXZlbgoJCQkgKiB0aGVuIHRoZSBpbnB1dCBib3ggaXMgYXBwZW5kZWQgdG8gdGhlIHN0cmluZyBhdXRvbWF0aWNhbGx5LgoJCQkgKiAgQHR5cGUgc3RyaW5nCgkJCSAqICBAZGVmYXVsdCBTZWFyY2g6CgkJCSAqCgkJCSAqICBAZHRvcHQgTGFuZ3VhZ2UKCQkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5sYW5ndWFnZS5zZWFyY2gKCQkJICoKCQkJICogIEBleGFtcGxlCgkJCSAqICAgIC8vIElucHV0IHRleHQgYm94IHdpbGwgYmUgYXBwZW5kZWQgYXQgdGhlIGVuZCBhdXRvbWF0aWNhbGx5CgkJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCQkgKiAgICAgICAgImxhbmd1YWdlIjogewoJCQkgKiAgICAgICAgICAic2VhcmNoIjogIkZpbHRlciByZWNvcmRzOiIKCQkJICogICAgICAgIH0KCQkJICogICAgICB9ICk7CgkJCSAqICAgIH0gKTsKCQkJICoKCQkJICogIEBleGFtcGxlCgkJCSAqICAgIC8vIFNwZWNpZnkgd2hlcmUgdGhlIGZpbHRlciBzaG91bGQgYXBwZWFyCgkJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCQkgKiAgICAgICAgImxhbmd1YWdlIjogewoJCQkgKiAgICAgICAgICAic2VhcmNoIjogIkFwcGx5IGZpbHRlciBfSU5QVVRfIHRvIHRhYmxlIgoJCQkgKiAgICAgICAgfQoJCQkgKiAgICAgIH0gKTsKCQkJICogICAgfSApOwoJCQkgKi8KCQkJInNTZWFyY2giOiAiU2VhcmNoOiIsCgkKCQoJCQkvKioKCQkJICogQXNzaWduIGEgYHBsYWNlaG9sZGVyYCBhdHRyaWJ1dGUgdG8gdGhlIHNlYXJjaCBgaW5wdXRgIGVsZW1lbnQKCQkJICogIEB0eXBlIHN0cmluZwoJCQkgKiAgQGRlZmF1bHQgCgkJCSAqCgkJCSAqICBAZHRvcHQgTGFuZ3VhZ2UKCQkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5sYW5ndWFnZS5zZWFyY2hQbGFjZWhvbGRlcgoJCQkgKi8KCQkJInNTZWFyY2hQbGFjZWhvbGRlciI6ICIiLAoJCgkKCQkJLyoqCgkJCSAqIEFsbCBvZiB0aGUgbGFuZ3VhZ2UgaW5mb3JtYXRpb24gY2FuIGJlIHN0b3JlZCBpbiBhIGZpbGUgb24gdGhlCgkJCSAqIHNlcnZlci1zaWRlLCB3aGljaCBEYXRhVGFibGVzIHdpbGwgbG9vayB1cCBpZiB0aGlzIHBhcmFtZXRlciBpcyBwYXNzZWQuCgkJCSAqIEl0IG11c3Qgc3RvcmUgdGhlIFVSTCBvZiB0aGUgbGFuZ3VhZ2UgZmlsZSwgd2hpY2ggaXMgaW4gYSBKU09OIGZvcm1hdCwKCQkJICogYW5kIHRoZSBvYmplY3QgaGFzIHRoZSBzYW1lIHByb3BlcnRpZXMgYXMgdGhlIG9MYW5ndWFnZSBvYmplY3QgaW4gdGhlCgkJCSAqIGluaXRpYWxpc2VyIG9iamVjdCAoaS5lLiB0aGUgYWJvdmUgcGFyYW1ldGVycykuIFBsZWFzZSByZWZlciB0byBvbmUgb2YKCQkJICogdGhlIGV4YW1wbGUgbGFuZ3VhZ2UgZmlsZXMgdG8gc2VlIGhvdyB0aGlzIHdvcmtzIGluIGFjdGlvbi4KCQkJICogIEB0eXBlIHN0cmluZwoJCQkgKiAgQGRlZmF1bHQgPGk+RW1wdHkgc3RyaW5nIC0gaS5lLiBkaXNhYmxlZDwvaT4KCQkJICoKCQkJICogIEBkdG9wdCBMYW5ndWFnZQoJCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLmxhbmd1YWdlLnVybAoJCQkgKgoJCQkgKiAgQGV4YW1wbGUKCQkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uKCkgewoJCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJCSAqICAgICAgICAibGFuZ3VhZ2UiOiB7CgkJCSAqICAgICAgICAgICJ1cmwiOiAiaHR0cDovL3d3dy5zcHJ5bWVkaWEuY28udWsvZGF0YVRhYmxlcy9sYW5nLnR4dCIKCQkJICogICAgICAgIH0KCQkJICogICAgICB9ICk7CgkJCSAqICAgIH0gKTsKCQkJICovCgkJCSJzVXJsIjogIiIsCgkKCQoJCQkvKioKCQkJICogVGV4dCBzaG93biBpbnNpZGUgdGhlIHRhYmxlIHJlY29yZHMgd2hlbiB0aGUgaXMgbm8gaW5mb3JtYXRpb24gdG8gYmUKCQkJICogZGlzcGxheWVkIGFmdGVyIGZpbHRlcmluZy4gYGVtcHR5VGFibGVgIGlzIHNob3duIHdoZW4gdGhlcmUgaXMgc2ltcGx5IG5vCgkJCSAqIGluZm9ybWF0aW9uIGluIHRoZSB0YWJsZSBhdCBhbGwgKHJlZ2FyZGxlc3Mgb2YgZmlsdGVyaW5nKS4KCQkJICogIEB0eXBlIHN0cmluZwoJCQkgKiAgQGRlZmF1bHQgTm8gbWF0Y2hpbmcgcmVjb3JkcyBmb3VuZAoJCQkgKgoJCQkgKiAgQGR0b3B0IExhbmd1YWdlCgkJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMubGFuZ3VhZ2UuemVyb1JlY29yZHMKCQkJICoKCQkJICogIEBleGFtcGxlCgkJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCQkgKiAgICAgICAgImxhbmd1YWdlIjogewoJCQkgKiAgICAgICAgICAiemVyb1JlY29yZHMiOiAiTm8gcmVjb3JkcyB0byBkaXNwbGF5IgoJCQkgKiAgICAgICAgfQoJCQkgKiAgICAgIH0gKTsKCQkJICogICAgfSApOwoJCQkgKi8KCQkJInNaZXJvUmVjb3JkcyI6ICJObyBtYXRjaGluZyByZWNvcmRzIGZvdW5kIgoJCX0sCgkKCQoJCS8qKgoJCSAqIFRoaXMgcGFyYW1ldGVyIGFsbG93cyB5b3UgdG8gaGF2ZSBkZWZpbmUgdGhlIGdsb2JhbCBmaWx0ZXJpbmcgc3RhdGUgYXQKCQkgKiBpbml0aWFsaXNhdGlvbiB0aW1lLiBBcyBhbiBvYmplY3QgdGhlIGBzZWFyY2hgIHBhcmFtZXRlciBtdXN0IGJlCgkJICogZGVmaW5lZCwgYnV0IGFsbCBvdGhlciBwYXJhbWV0ZXJzIGFyZSBvcHRpb25hbC4gV2hlbiBgcmVnZXhgIGlzIHRydWUsCgkJICogdGhlIHNlYXJjaCBzdHJpbmcgd2lsbCBiZSB0cmVhdGVkIGFzIGEgcmVndWxhciBleHByZXNzaW9uLCB3aGVuIGZhbHNlCgkJICogKGRlZmF1bHQpIGl0IHdpbGwgYmUgdHJlYXRlZCBhcyBhIHN0cmFpZ2h0IHN0cmluZy4gV2hlbiBgc21hcnRgCgkJICogRGF0YVRhYmxlcyB3aWxsIHVzZSBpdCdzIHNtYXJ0IGZpbHRlcmluZyBtZXRob2RzICh0byB3b3JkIG1hdGNoIGF0CgkJICogYW55IHBvaW50IGluIHRoZSBkYXRhKSwgd2hlbiBmYWxzZSB0aGlzIHdpbGwgbm90IGJlIGRvbmUuCgkJICogIEBuYW1lc3BhY2UKCQkgKiAgQGV4dGVuZHMgRGF0YVRhYmxlLm1vZGVscy5vU2VhcmNoCgkJICoKCQkgKiAgQGR0b3B0IE9wdGlvbnMKCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLnNlYXJjaAoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uKCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgICAgInNlYXJjaCI6IHsic2VhcmNoIjogIkluaXRpYWwgc2VhcmNoIn0KCQkgKiAgICAgIH0gKTsKCQkgKiAgICB9ICkKCQkgKi8KCQkib1NlYXJjaCI6ICQuZXh0ZW5kKCB7fSwgRGF0YVRhYmxlLm1vZGVscy5vU2VhcmNoICksCgkKCQoJCS8qKgoJCSAqIF9fRGVwcmVjYXRlZF9fIFRoZSBmdW5jdGlvbmFsaXR5IHByb3ZpZGVkIGJ5IHRoaXMgcGFyYW1ldGVyIGhhcyBub3cgYmVlbgoJCSAqIHN1cGVyc2VkZWQgYnkgdGhhdCBwcm92aWRlZCB0aHJvdWdoIGBhamF4YCwgd2hpY2ggc2hvdWxkIGJlIHVzZWQgaW5zdGVhZC4KCQkgKgoJCSAqIEJ5IGRlZmF1bHQgRGF0YVRhYmxlcyB3aWxsIGxvb2sgZm9yIHRoZSBwcm9wZXJ0eSBgZGF0YWAgKG9yIGBhYURhdGFgIGZvcgoJCSAqIGNvbXBhdGliaWxpdHkgd2l0aCBEYXRhVGFibGVzIDEuOS0pIHdoZW4gb2J0YWluaW5nIGRhdGEgZnJvbSBhbiBBamF4CgkJICogc291cmNlIG9yIGZvciBzZXJ2ZXItc2lkZSBwcm9jZXNzaW5nIC0gdGhpcyBwYXJhbWV0ZXIgYWxsb3dzIHRoYXQKCQkgKiBwcm9wZXJ0eSB0byBiZSBjaGFuZ2VkLiBZb3UgY2FuIHVzZSBKYXZhc2NyaXB0IGRvdHRlZCBvYmplY3Qgbm90YXRpb24gdG8KCQkgKiBnZXQgYSBkYXRhIHNvdXJjZSBmb3IgbXVsdGlwbGUgbGV2ZWxzIG9mIG5lc3RpbmcuCgkJICogIEB0eXBlIHN0cmluZwoJCSAqICBAZGVmYXVsdCBkYXRhCgkJICoKCQkgKiAgQGR0b3B0IE9wdGlvbnMKCQkgKiAgQGR0b3B0IFNlcnZlci1zaWRlCgkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5hamF4RGF0YVByb3AKCQkgKgoJCSAqICBAZGVwcmVjYXRlZCAxLjEwLiBQbGVhc2UgdXNlIGBhamF4YCBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5IG5vdy4KCQkgKi8KCQkic0FqYXhEYXRhUHJvcCI6ICJkYXRhIiwKCQoJCgkJLyoqCgkJICogX19EZXByZWNhdGVkX18gVGhlIGZ1bmN0aW9uYWxpdHkgcHJvdmlkZWQgYnkgdGhpcyBwYXJhbWV0ZXIgaGFzIG5vdyBiZWVuCgkJICogc3VwZXJzZWRlZCBieSB0aGF0IHByb3ZpZGVkIHRocm91Z2ggYGFqYXhgLCB3aGljaCBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLgoJCSAqCgkJICogWW91IGNhbiBpbnN0cnVjdCBEYXRhVGFibGVzIHRvIGxvYWQgZGF0YSBmcm9tIGFuIGV4dGVybmFsCgkJICogc291cmNlIHVzaW5nIHRoaXMgcGFyYW1ldGVyICh1c2UgYURhdGEgaWYgeW91IHdhbnQgdG8gcGFzcyBkYXRhIGluIHlvdQoJCSAqIGFscmVhZHkgaGF2ZSkuIFNpbXBseSBwcm92aWRlIGEgdXJsIGEgSlNPTiBvYmplY3QgY2FuIGJlIG9idGFpbmVkIGZyb20uCgkJICogIEB0eXBlIHN0cmluZwoJCSAqICBAZGVmYXVsdCBudWxsCgkJICoKCQkgKiAgQGR0b3B0IE9wdGlvbnMKCQkgKiAgQGR0b3B0IFNlcnZlci1zaWRlCgkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5hamF4U291cmNlCgkJICoKCQkgKiAgQGRlcHJlY2F0ZWQgMS4xMC4gUGxlYXNlIHVzZSBgYWpheGAgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eSBub3cuCgkJICovCgkJInNBamF4U291cmNlIjogbnVsbCwKCQoJCgkJLyoqCgkJICogVGhpcyBpbml0aWFsaXNhdGlvbiB2YXJpYWJsZSBhbGxvd3MgeW91IHRvIHNwZWNpZnkgZXhhY3RseSB3aGVyZSBpbiB0aGUKCQkgKiBET00geW91IHdhbnQgRGF0YVRhYmxlcyB0byBpbmplY3QgdGhlIHZhcmlvdXMgY29udHJvbHMgaXQgYWRkcyB0byB0aGUgcGFnZQoJCSAqIChmb3IgZXhhbXBsZSB5b3UgbWlnaHQgd2FudCB0aGUgcGFnaW5hdGlvbiBjb250cm9scyBhdCB0aGUgdG9wIG9mIHRoZQoJCSAqIHRhYmxlKS4gRElWIGVsZW1lbnRzICh3aXRoIG9yIHdpdGhvdXQgYSBjdXN0b20gY2xhc3MpIGNhbiBhbHNvIGJlIGFkZGVkIHRvCgkJICogYWlkIHN0eWxpbmcuIFRoZSBmb2xsb3cgc3ludGF4IGlzIHVzZWQ6CgkJICogICA8dWw+CgkJICogICAgIDxsaT5UaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGFsbG93ZWQ6CgkJICogICAgICAgPHVsPgoJCSAqICAgICAgICAgPGxpPidsJyAtIExlbmd0aCBjaGFuZ2luZzwvbGk+CgkJICogICAgICAgICA8bGk+J2YnIC0gRmlsdGVyaW5nIGlucHV0PC9saT4KCQkgKiAgICAgICAgIDxsaT4ndCcgLSBUaGUgdGFibGUhPC9saT4KCQkgKiAgICAgICAgIDxsaT4naScgLSBJbmZvcm1hdGlvbjwvbGk+CgkJICogICAgICAgICA8bGk+J3AnIC0gUGFnaW5hdGlvbjwvbGk+CgkJICogICAgICAgICA8bGk+J3InIC0gcFJvY2Vzc2luZzwvbGk+CgkJICogICAgICAgPC91bD4KCQkgKiAgICAgPC9saT4KCQkgKiAgICAgPGxpPlRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGFyZSBhbGxvd2VkOgoJCSAqICAgICAgIDx1bD4KCQkgKiAgICAgICAgIDxsaT4nSCcgLSBqUXVlcnlVSSB0aGVtZSAiaGVhZGVyIiBjbGFzc2VzICgnZmctdG9vbGJhciB1aS13aWRnZXQtaGVhZGVyIHVpLWNvcm5lci10bCB1aS1jb3JuZXItdHIgdWktaGVscGVyLWNsZWFyZml4Jyk8L2xpPgoJCSAqICAgICAgICAgPGxpPidGJyAtIGpRdWVyeVVJIHRoZW1lICJmb290ZXIiIGNsYXNzZXMgKCdmZy10b29sYmFyIHVpLXdpZGdldC1oZWFkZXIgdWktY29ybmVyLWJsIHVpLWNvcm5lci1iciB1aS1oZWxwZXItY2xlYXJmaXgnKTwvbGk+CgkJICogICAgICAgPC91bD4KCQkgKiAgICAgPC9saT4KCQkgKiAgICAgPGxpPlRoZSBmb2xsb3dpbmcgc3ludGF4IGlzIGV4cGVjdGVkOgoJCSAqICAgICAgIDx1bD4KCQkgKiAgICAgICAgIDxsaT4nJmx0OycgYW5kICcmZ3Q7JyAtIGRpdiBlbGVtZW50czwvbGk+CgkJICogICAgICAgICA8bGk+JyZsdDsiY2xhc3MiIGFuZCAnJmd0OycgLSBkaXYgd2l0aCBhIGNsYXNzPC9saT4KCQkgKiAgICAgICAgIDxsaT4nJmx0OyIjaWQiIGFuZCAnJmd0OycgLSBkaXYgd2l0aCBhbiBJRDwvbGk+CgkJICogICAgICAgPC91bD4KCQkgKiAgICAgPC9saT4KCQkgKiAgICAgPGxpPkV4YW1wbGVzOgoJCSAqICAgICAgIDx1bD4KCQkgKiAgICAgICAgIDxsaT4nJmx0OyJ3cmFwcGVyImZsaXB0Jmd0Oyc8L2xpPgoJCSAqICAgICAgICAgPGxpPicmbHQ7bGYmbHQ7dCZndDtpcCZndDsnPC9saT4KCQkgKiAgICAgICA8L3VsPgoJCSAqICAgICA8L2xpPgoJCSAqICAgPC91bD4KCQkgKiAgQHR5cGUgc3RyaW5nCgkJICogIEBkZWZhdWx0IGxmcnRpcCA8aT4od2hlbiBgalF1ZXJ5VUlgIGlzIGZhbHNlKTwvaT4gPGI+b3I8L2I+CgkJICogICAgPCJIImxmcj50PCJGImlwPiA8aT4od2hlbiBgalF1ZXJ5VUlgIGlzIHRydWUpPC9pPgoJCSAqCgkJICogIEBkdG9wdCBPcHRpb25zCgkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5kb20KCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJkb20iOiAnJmx0OyJ0b3AiaSZndDtydCZsdDsiYm90dG9tImZscCZndDsmbHQ7ImNsZWFyIiZndDsnCgkJICogICAgICB9ICk7CgkJICogICAgfSApOwoJCSAqLwoJCSJzRG9tIjogImxmcnRpcCIsCgkKCQoJCS8qKgoJCSAqIFNlYXJjaCBkZWxheSBvcHRpb24uIFRoaXMgd2lsbCB0aHJvdHRsZSBmdWxsIHRhYmxlIHNlYXJjaGVzIHRoYXQgdXNlIHRoZQoJCSAqIERhdGFUYWJsZXMgcHJvdmlkZWQgc2VhcmNoIGlucHV0IGVsZW1lbnQgKGl0IGRvZXMgbm90IGVmZmVjdCBjYWxscyB0bwoJCSAqIGBkdC1hcGkgc2VhcmNoKClgLCBwcm92aWRpbmcgYSBkZWxheSBiZWZvcmUgdGhlIHNlYXJjaCBpcyBtYWRlLgoJCSAqICBAdHlwZSBpbnRlZ2VyCgkJICogIEBkZWZhdWx0IDAKCQkgKgoJCSAqICBAZHRvcHQgT3B0aW9ucwoJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMuc2VhcmNoRGVsYXkKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJzZWFyY2hEZWxheSI6IDIwMAoJCSAqICAgICAgfSApOwoJCSAqICAgIH0gKQoJCSAqLwoJCSJzZWFyY2hEZWxheSI6IG51bGwsCgkKCQoJCS8qKgoJCSAqIERhdGFUYWJsZXMgZmVhdHVyZXMgc2l4IGRpZmZlcmVudCBidWlsdC1pbiBvcHRpb25zIGZvciB0aGUgYnV0dG9ucyB0bwoJCSAqIGRpc3BsYXkgZm9yIHBhZ2luYXRpb24gY29udHJvbDoKCQkgKgoJCSAqICogYG51bWJlcnNgIC0gUGFnZSBudW1iZXIgYnV0dG9ucyBvbmx5CgkJICogKiBgc2ltcGxlYCAtICdQcmV2aW91cycgYW5kICdOZXh0JyBidXR0b25zIG9ubHkKCQkgKiAqICdzaW1wbGVfbnVtYmVyc2AgLSAnUHJldmlvdXMnIGFuZCAnTmV4dCcgYnV0dG9ucywgcGx1cyBwYWdlIG51bWJlcnMKCQkgKiAqIGBmdWxsYCAtICdGaXJzdCcsICdQcmV2aW91cycsICdOZXh0JyBhbmQgJ0xhc3QnIGJ1dHRvbnMKCQkgKiAqIGBmdWxsX251bWJlcnNgIC0gJ0ZpcnN0JywgJ1ByZXZpb3VzJywgJ05leHQnIGFuZCAnTGFzdCcgYnV0dG9ucywgcGx1cyBwYWdlIG51bWJlcnMKCQkgKiAqIGBmaXJzdF9sYXN0X251bWJlcnNgIC0gJ0ZpcnN0JyBhbmQgJ0xhc3QnIGJ1dHRvbnMsIHBsdXMgcGFnZSBudW1iZXJzCgkJICogIAoJCSAqIEZ1cnRoZXIgbWV0aG9kcyBjYW4gYmUgYWRkZWQgdXNpbmcge0BsaW5rIERhdGFUYWJsZS5leHQub1BhZ2luYXRpb259LgoJCSAqICBAdHlwZSBzdHJpbmcKCQkgKiAgQGRlZmF1bHQgc2ltcGxlX251bWJlcnMKCQkgKgoJCSAqICBAZHRvcHQgT3B0aW9ucwoJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMucGFnaW5nVHlwZQoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uKCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgICAgInBhZ2luZ1R5cGUiOiAiZnVsbF9udW1iZXJzIgoJCSAqICAgICAgfSApOwoJCSAqICAgIH0gKQoJCSAqLwoJCSJzUGFnaW5hdGlvblR5cGUiOiAic2ltcGxlX251bWJlcnMiLAoJCgkKCQkvKioKCQkgKiBFbmFibGUgaG9yaXpvbnRhbCBzY3JvbGxpbmcuIFdoZW4gYSB0YWJsZSBpcyB0b28gd2lkZSB0byBmaXQgaW50byBhCgkJICogY2VydGFpbiBsYXlvdXQsIG9yIHlvdSBoYXZlIGEgbGFyZ2UgbnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIHRhYmxlLCB5b3UKCQkgKiBjYW4gZW5hYmxlIHgtc2Nyb2xsaW5nIHRvIHNob3cgdGhlIHRhYmxlIGluIGEgdmlld3BvcnQsIHdoaWNoIGNhbiBiZQoJCSAqIHNjcm9sbGVkLiBUaGlzIHByb3BlcnR5IGNhbiBiZSBgdHJ1ZWAgd2hpY2ggd2lsbCBhbGxvdyB0aGUgdGFibGUgdG8KCQkgKiBzY3JvbGwgaG9yaXpvbnRhbGx5IHdoZW4gbmVlZGVkLCBvciBhbnkgQ1NTIHVuaXQsIG9yIGEgbnVtYmVyIChpbiB3aGljaAoJCSAqIGNhc2UgaXQgd2lsbCBiZSB0cmVhdGVkIGFzIGEgcGl4ZWwgbWVhc3VyZW1lbnQpLiBTZXR0aW5nIGFzIHNpbXBseSBgdHJ1ZWAKCQkgKiBpcyByZWNvbW1lbmRlZC4KCQkgKiAgQHR5cGUgYm9vbGVhbnxzdHJpbmcKCQkgKiAgQGRlZmF1bHQgPGk+Ymxhbmsgc3RyaW5nIC0gaS5lLiBkaXNhYmxlZDwvaT4KCQkgKgoJCSAqICBAZHRvcHQgRmVhdHVyZXMKCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLnNjcm9sbFgKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJzY3JvbGxYIjogdHJ1ZSwKCQkgKiAgICAgICAgInNjcm9sbENvbGxhcHNlIjogdHJ1ZQoJCSAqICAgICAgfSApOwoJCSAqICAgIH0gKTsKCQkgKi8KCQkic1Njcm9sbFgiOiAiIiwKCQoJCgkJLyoqCgkJICogVGhpcyBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB0byBmb3JjZSBhIERhdGFUYWJsZSB0byB1c2UgbW9yZSB3aWR0aCB0aGFuIGl0CgkJICogbWlnaHQgb3RoZXJ3aXNlIGRvIHdoZW4geC1zY3JvbGxpbmcgaXMgZW5hYmxlZC4gRm9yIGV4YW1wbGUgaWYgeW91IGhhdmUgYQoJCSAqIHRhYmxlIHdoaWNoIHJlcXVpcmVzIHRvIGJlIHdlbGwgc3BhY2VkLCB0aGlzIHBhcmFtZXRlciBpcyB1c2VmdWwgZm9yCgkJICogIm92ZXItc2l6aW5nIiB0aGUgdGFibGUsIGFuZCB0aHVzIGZvcmNpbmcgc2Nyb2xsaW5nLiBUaGlzIHByb3BlcnR5IGNhbiBieQoJCSAqIGFueSBDU1MgdW5pdCwgb3IgYSBudW1iZXIgKGluIHdoaWNoIGNhc2UgaXQgd2lsbCBiZSB0cmVhdGVkIGFzIGEgcGl4ZWwKCQkgKiBtZWFzdXJlbWVudCkuCgkJICogIEB0eXBlIHN0cmluZwoJCSAqICBAZGVmYXVsdCA8aT5ibGFuayBzdHJpbmcgLSBpLmUuIGRpc2FibGVkPC9pPgoJCSAqCgkJICogIEBkdG9wdCBPcHRpb25zCgkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5zY3JvbGxYSW5uZXIKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJzY3JvbGxYIjogIjEwMCUiLAoJCSAqICAgICAgICAic2Nyb2xsWElubmVyIjogIjExMCUiCg=="
},
{
"key": "jquery.dataTables.js?4?4?3",
"type": "binary",
"value": "base64:CQkgKiAgICAgIH0gKTsKCQkgKiAgICB9ICk7CgkJICovCgkJInNTY3JvbGxYSW5uZXIiOiAiIiwKCQoJCgkJLyoqCgkJICogRW5hYmxlIHZlcnRpY2FsIHNjcm9sbGluZy4gVmVydGljYWwgc2Nyb2xsaW5nIHdpbGwgY29uc3RyYWluIHRoZSBEYXRhVGFibGUKCQkgKiB0byB0aGUgZ2l2ZW4gaGVpZ2h0LCBhbmQgZW5hYmxlIHNjcm9sbGluZyBmb3IgYW55IGRhdGEgd2hpY2ggb3ZlcmZsb3dzIHRoZQoJCSAqIGN1cnJlbnQgdmlld3BvcnQuIFRoaXMgY2FuIGJlIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgdG8gcGFnaW5nIHRvIGRpc3BsYXkKCQkgKiBhIGxvdCBvZiBkYXRhIGluIGEgc21hbGwgYXJlYSAoYWx0aG91Z2ggcGFnaW5nIGFuZCBzY3JvbGxpbmcgY2FuIGJvdGggYmUKCQkgKiBlbmFibGVkIGF0IHRoZSBzYW1lIHRpbWUpLiBUaGlzIHByb3BlcnR5IGNhbiBiZSBhbnkgQ1NTIHVuaXQsIG9yIGEgbnVtYmVyCgkJICogKGluIHdoaWNoIGNhc2UgaXQgd2lsbCBiZSB0cmVhdGVkIGFzIGEgcGl4ZWwgbWVhc3VyZW1lbnQpLgoJCSAqICBAdHlwZSBzdHJpbmcKCQkgKiAgQGRlZmF1bHQgPGk+Ymxhbmsgc3RyaW5nIC0gaS5lLiBkaXNhYmxlZDwvaT4KCQkgKgoJCSAqICBAZHRvcHQgRmVhdHVyZXMKCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLnNjcm9sbFkKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJzY3JvbGxZIjogIjIwMHB4IiwKCQkgKiAgICAgICAgInBhZ2luYXRlIjogZmFsc2UKCQkgKiAgICAgIH0gKTsKCQkgKiAgICB9ICk7CgkJICovCgkJInNTY3JvbGxZIjogIiIsCgkKCQoJCS8qKgoJCSAqIF9fRGVwcmVjYXRlZF9fIFRoZSBmdW5jdGlvbmFsaXR5IHByb3ZpZGVkIGJ5IHRoaXMgcGFyYW1ldGVyIGhhcyBub3cgYmVlbgoJCSAqIHN1cGVyc2VkZWQgYnkgdGhhdCBwcm92aWRlZCB0aHJvdWdoIGBhamF4YCwgd2hpY2ggc2hvdWxkIGJlIHVzZWQgaW5zdGVhZC4KCQkgKgoJCSAqIFNldCB0aGUgSFRUUCBtZXRob2QgdGhhdCBpcyB1c2VkIHRvIG1ha2UgdGhlIEFqYXggY2FsbCBmb3Igc2VydmVyLXNpZGUKCQkgKiBwcm9jZXNzaW5nIG9yIEFqYXggc291cmNlZCBkYXRhLgoJCSAqICBAdHlwZSBzdHJpbmcKCQkgKiAgQGRlZmF1bHQgR0VUCgkJICoKCQkgKiAgQGR0b3B0IE9wdGlvbnMKCQkgKiAgQGR0b3B0IFNlcnZlci1zaWRlCgkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5zZXJ2ZXJNZXRob2QKCQkgKgoJCSAqICBAZGVwcmVjYXRlZCAxLjEwLiBQbGVhc2UgdXNlIGBhamF4YCBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5IG5vdy4KCQkgKi8KCQkic1NlcnZlck1ldGhvZCI6ICJHRVQiLAoJCgkKCQkvKioKCQkgKiBEYXRhVGFibGVzIG1ha2VzIHVzZSBvZiByZW5kZXJlcnMgd2hlbiBkaXNwbGF5aW5nIEhUTUwgZWxlbWVudHMgZm9yCgkJICogYSB0YWJsZS4gVGhlc2UgcmVuZGVyZXJzIGNhbiBiZSBhZGRlZCBvciBtb2RpZmllZCBieSBwbHVnLWlucyB0bwoJCSAqIGdlbmVyYXRlIHN1aXRhYmxlIG1hcmstdXAgZm9yIGEgc2l0ZS4gRm9yIGV4YW1wbGUgdGhlIEJvb3RzdHJhcAoJCSAqIGludGVncmF0aW9uIHBsdWctaW4gZm9yIERhdGFUYWJsZXMgdXNlcyBhIHBhZ2luZyBidXR0b24gcmVuZGVyZXIgdG8KCQkgKiBkaXNwbGF5IHBhZ2luYXRpb24gYnV0dG9ucyBpbiB0aGUgbWFyay11cCByZXF1aXJlZCBieSBCb290c3RyYXAuCgkJICoKCQkgKiBGb3IgZnVydGhlciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVuZGVyZXJzIGF2YWlsYWJsZSBzZWUKCQkgKiBEYXRhVGFibGUuZXh0LnJlbmRlcmVyCgkJICogIEB0eXBlIHN0cmluZ3xvYmplY3QKCQkgKiAgQGRlZmF1bHQgbnVsbAoJCSAqCgkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5yZW5kZXJlcgoJCSAqCgkJICovCgkJInJlbmRlcmVyIjogbnVsbCwKCQoJCgkJLyoqCgkJICogU2V0IHRoZSBkYXRhIHByb3BlcnR5IG5hbWUgdGhhdCBEYXRhVGFibGVzIHNob3VsZCB1c2UgdG8gZ2V0IGEgcm93J3MgaWQKCQkgKiB0byBzZXQgYXMgdGhlIGBpZGAgcHJvcGVydHkgaW4gdGhlIG5vZGUuCgkJICogIEB0eXBlIHN0cmluZwoJCSAqICBAZGVmYXVsdCBEVF9Sb3dJZAoJCSAqCgkJICogIEBuYW1lIERhdGFUYWJsZS5kZWZhdWx0cy5yb3dJZAoJCSAqLwoJCSJyb3dJZCI6ICJEVF9Sb3dJZCIKCX07CgkKCV9mbkh1bmdhcmlhbk1hcCggRGF0YVRhYmxlLmRlZmF1bHRzICk7CgkKCQoJCgkvKgoJICogRGV2ZWxvcGVyIG5vdGUgLSBTZWUgbm90ZSBpbiBtb2RlbC5kZWZhdWx0cy5qcyBhYm91dCB0aGUgdXNlIG9mIEh1bmdhcmlhbgoJICogbm90YXRpb24gYW5kIGNhbWVsIGNhc2UuCgkgKi8KCQoJLyoqCgkgKiBDb2x1bW4gb3B0aW9ucyB0aGF0IGNhbiBiZSBnaXZlbiB0byBEYXRhVGFibGVzIGF0IGluaXRpYWxpc2F0aW9uIHRpbWUuCgkgKiAgQG5hbWVzcGFjZQoJICovCglEYXRhVGFibGUuZGVmYXVsdHMuY29sdW1uID0gewoJCS8qKgoJCSAqIERlZmluZSB3aGljaCBjb2x1bW4ocykgYW4gb3JkZXIgd2lsbCBvY2N1ciBvbiBmb3IgdGhpcyBjb2x1bW4uIFRoaXMKCQkgKiBhbGxvd3MgYSBjb2x1bW4ncyBvcmRlcmluZyB0byB0YWtlIG11bHRpcGxlIGNvbHVtbnMgaW50byBhY2NvdW50IHdoZW4KCQkgKiBkb2luZyBhIHNvcnQgb3IgdXNlIHRoZSBkYXRhIGZyb20gYSBkaWZmZXJlbnQgY29sdW1uLiBGb3IgZXhhbXBsZSBmaXJzdAoJCSAqIG5hbWUgLyBsYXN0IG5hbWUgY29sdW1ucyBtYWtlIHNlbnNlIHRvIGRvIGEgbXVsdGktY29sdW1uIHNvcnQgb3ZlciB0aGUKCQkgKiB0d28gY29sdW1ucy4KCQkgKiAgQHR5cGUgYXJyYXl8aW50CgkJICogIEBkZWZhdWx0IG51bGwgPGk+VGFrZXMgdGhlIHZhbHVlIG9mIHRoZSBjb2x1bW4gaW5kZXggYXV0b21hdGljYWxseTwvaT4KCQkgKgoJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMuY29sdW1uLm9yZGVyRGF0YQoJCSAqICBAZHRvcHQgQ29sdW1ucwoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgLy8gVXNpbmcgYGNvbHVtbkRlZnNgCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uKCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgICAgImNvbHVtbkRlZnMiOiBbCgkJICogICAgICAgICAgeyAib3JkZXJEYXRhIjogWyAwLCAxIF0sICJ0YXJnZXRzIjogWyAwIF0gfSwKCQkgKiAgICAgICAgICB7ICJvcmRlckRhdGEiOiBbIDEsIDAgXSwgInRhcmdldHMiOiBbIDEgXSB9LAoJCSAqICAgICAgICAgIHsgIm9yZGVyRGF0YSI6IDIsICJ0YXJnZXRzIjogWyAyIF0gfQoJCSAqICAgICAgICBdCgkJICogICAgICB9ICk7CgkJICogICAgfSApOwoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgLy8gVXNpbmcgYGNvbHVtbnNgCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uKCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgICAgImNvbHVtbnMiOiBbCgkJICogICAgICAgICAgeyAib3JkZXJEYXRhIjogWyAwLCAxIF0gfSwKCQkgKiAgICAgICAgICB7ICJvcmRlckRhdGEiOiBbIDEsIDAgXSB9LAoJCSAqICAgICAgICAgIHsgIm9yZGVyRGF0YSI6IDIgfSwKCQkgKiAgICAgICAgICBudWxsLAoJCSAqICAgICAgICAgIG51bGwKCQkgKiAgICAgICAgXQoJCSAqICAgICAgfSApOwoJCSAqICAgIH0gKTsKCQkgKi8KCQkiYURhdGFTb3J0IjogbnVsbCwKCQkiaURhdGFTb3J0IjogLTEsCgkKCQoJCS8qKgoJCSAqIFlvdSBjYW4gY29udHJvbCB0aGUgZGVmYXVsdCBvcmRlcmluZyBkaXJlY3Rpb24sIGFuZCBldmVuIGFsdGVyIHRoZQoJCSAqIGJlaGF2aW91ciBvZiB0aGUgc29ydCBoYW5kbGVyIChpLmUuIG9ubHkgYWxsb3cgYXNjZW5kaW5nIG9yZGVyaW5nIGV0YykKCQkgKiB1c2luZyB0aGlzIHBhcmFtZXRlci4KCQkgKiAgQHR5cGUgYXJyYXkKCQkgKiAgQGRlZmF1bHQgWyAnYXNjJywgJ2Rlc2MnIF0KCQkgKgoJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMuY29sdW1uLm9yZGVyU2VxdWVuY2UKCQkgKiAgQGR0b3B0IENvbHVtbnMKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgIC8vIFVzaW5nIGBjb2x1bW5EZWZzYAoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJjb2x1bW5EZWZzIjogWwoJCSAqICAgICAgICAgIHsgIm9yZGVyU2VxdWVuY2UiOiBbICJhc2MiIF0sICJ0YXJnZXRzIjogWyAxIF0gfSwKCQkgKiAgICAgICAgICB7ICJvcmRlclNlcXVlbmNlIjogWyAiZGVzYyIsICJhc2MiLCAiYXNjIiBdLCAidGFyZ2V0cyI6IFsgMiBdIH0sCgkJICogICAgICAgICAgeyAib3JkZXJTZXF1ZW5jZSI6IFsgImRlc2MiIF0sICJ0YXJnZXRzIjogWyAzIF0gfQoJCSAqICAgICAgICBdCgkJICogICAgICB9ICk7CgkJICogICAgfSApOwoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgLy8gVXNpbmcgYGNvbHVtbnNgCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uKCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgICAgImNvbHVtbnMiOiBbCgkJICogICAgICAgICAgbnVsbCwKCQkgKiAgICAgICAgICB7ICJvcmRlclNlcXVlbmNlIjogWyAiYXNjIiBdIH0sCgkJICogICAgICAgICAgeyAib3JkZXJTZXF1ZW5jZSI6IFsgImRlc2MiLCAiYXNjIiwgImFzYyIgXSB9LAoJCSAqICAgICAgICAgIHsgIm9yZGVyU2VxdWVuY2UiOiBbICJkZXNjIiBdIH0sCgkJICogICAgICAgICAgbnVsbAoJCSAqICAgICAgICBdCgkJICogICAgICB9ICk7CgkJICogICAgfSApOwoJCSAqLwoJCSJhc1NvcnRpbmciOiBbICdhc2MnLCAnZGVzYycgXSwKCQoJCgkJLyoqCgkJICogRW5hYmxlIG9yIGRpc2FibGUgZmlsdGVyaW5nIG9uIHRoZSBkYXRhIGluIHRoaXMgY29sdW1uLgoJCSAqICBAdHlwZSBib29sZWFuCgkJICogIEBkZWZhdWx0IHRydWUKCQkgKgoJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMuY29sdW1uLnNlYXJjaGFibGUKCQkgKiAgQGR0b3B0IENvbHVtbnMKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgIC8vIFVzaW5nIGBjb2x1bW5EZWZzYAoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJjb2x1bW5EZWZzIjogWwoJCSAqICAgICAgICAgIHsgInNlYXJjaGFibGUiOiBmYWxzZSwgInRhcmdldHMiOiBbIDAgXSB9CgkJICogICAgICAgIF0gfSApOwoJCSAqICAgIH0gKTsKCQkgKgoJCSAqICBAZXhhbXBsZQoJCSAqICAgIC8vIFVzaW5nIGBjb2x1bW5zYAoJCSAqICAgICQoZG9jdW1lbnQpLnJlYWR5KCBmdW5jdGlvbigpIHsKCQkgKiAgICAgICQoJyNleGFtcGxlJykuZGF0YVRhYmxlKCB7CgkJICogICAgICAgICJjb2x1bW5zIjogWwoJCSAqICAgICAgICAgIHsgInNlYXJjaGFibGUiOiBmYWxzZSB9LAoJCSAqICAgICAgICAgIG51bGwsCgkJICogICAgICAgICAgbnVsbCwKCQkgKiAgICAgICAgICBudWxsLAoJCSAqICAgICAgICAgIG51bGwKCQkgKiAgICAgICAgXSB9ICk7CgkJICogICAgfSApOwoJCSAqLwoJCSJiU2VhcmNoYWJsZSI6IHRydWUsCgkKCQoJCS8qKgoJCSAqIEVuYWJsZSBvciBkaXNhYmxlIG9yZGVyaW5nIG9uIHRoaXMgY29sdW1uLgoJCSAqICBAdHlwZSBib29sZWFuCgkJICogIEBkZWZhdWx0IHRydWUKCQkgKgoJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMuY29sdW1uLm9yZGVyYWJsZQoJCSAqICBAZHRvcHQgQ29sdW1ucwoJCSAqCgkJICogIEBleGFtcGxlCgkJICogICAgLy8gVXNpbmcgYGNvbHVtbkRlZnNgCgkJICogICAgJChkb2N1bWVudCkucmVhZHkoIGZ1bmN0aW9uKCkgewoJCSAqICAgICAgJCgnI2V4YW1wbGUnKS5kYXRhVGFibGUoIHsKCQkgKiAgICAgICAgImNvbHVtbkRlZnMiOiBbCgkJICogICAgICAgICAgeyAib3JkZXJhYmxlIjogZmFsc2UsICJ0YXJnZXRzIjogWyAwIF0gfQoJCSAqICAgICAgICBdIH0gKTsKCQkgKiAgICB9ICk7CgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAvLyBVc2luZyBgY29sdW1uc2AKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24oKSB7CgkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCSAqICAgICAgICAiY29sdW1ucyI6IFsKCQkgKiAgICAgICAgICB7ICJvcmRlcmFibGUiOiBmYWxzZSB9LAoJCSAqICAgICAgICAgIG51bGwsCgkJICogICAgICAgICAgbnVsbCwKCQkgKiAgICAgICAgICBudWxsLAoJCSAqICAgICAgICAgIG51bGwKCQkgKiAgICAgICAgXSB9ICk7CgkJICogICAgfSApOwoJCSAqLwoJCSJiU29ydGFibGUiOiB0cnVlLAoJCgkKCQkvKioKCQkgKiBFbmFibGUgb3IgZGlzYWJsZSB0aGUgZGlzcGxheSBvZiB0aGlzIGNvbHVtbi4KCQkgKiAgQHR5cGUgYm9vbGVhbgoJCSAqICBAZGVmYXVsdCB0cnVlCgkJICoKCQkgKiAgQG5hbWUgRGF0YVRhYmxlLmRlZmF1bHRzLmNvbHVtbi52aXNpYmxlCgkJICogIEBkdG9wdCBDb2x1bW5zCgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAvLyBVc2luZyBgY29sdW1uRGVmc2AKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24oKSB7CgkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCSAqICAgICAgICAiY29sdW1uRGVmcyI6IFsKCQkgKiAgICAgICAgICB7ICJ2aXNpYmxlIjogZmFsc2UsICJ0YXJnZXRzIjogWyAwIF0gfQoJCSAqICAgICAgICBdIH0gKTsKCQkgKiAgICB9ICk7CgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAvLyBVc2luZyBgY29sdW1uc2AKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24oKSB7CgkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCSAqICAgICAgICAiY29sdW1ucyI6IFsKCQkgKiAgICAgICAgICB7ICJ2aXNpYmxlIjogZmFsc2UgfSwKCQkgKiAgICAgICAgICBudWxsLAoJCSAqICAgICAgICAgIG51bGwsCgkJICogICAgICAgICAgbnVsbCwKCQkgKiAgICAgICAgICBudWxsCgkJICogICAgICAgIF0gfSApOwoJCSAqICAgIH0gKTsKCQkgKi8KCQkiYlZpc2libGUiOiB0cnVlLAoJCgkKCQkvKioKCQkgKiBEZXZlbG9wZXIgZGVmaW5hYmxlIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW5ldmVyIGEgY2VsbCBpcyBjcmVhdGVkIChBamF4IHNvdXJjZSwKCQkgKiBldGMpIG9yIHByb2Nlc3NlZCBmb3IgaW5wdXQgKERPTSBzb3VyY2UpLiBUaGlzIGNhbiBiZSB1c2VkIGFzIGEgY29tcGxpbWVudCB0byBtUmVuZGVyCgkJICogYWxsb3dpbmcgeW91IHRvIG1vZGlmeSB0aGUgRE9NIGVsZW1lbnQgKGFkZCBiYWNrZ3JvdW5kIGNvbG91ciBmb3IgZXhhbXBsZSkgd2hlbiB0aGUKCQkgKiBlbGVtZW50IGlzIGF2YWlsYWJsZS4KCQkgKiAgQHR5cGUgZnVuY3Rpb24KCQkgKiAgQHBhcmFtIHtlbGVtZW50fSB0ZCBUaGUgVEQgbm9kZSB0aGF0IGhhcyBiZWVuIGNyZWF0ZWQKCQkgKiAgQHBhcmFtIHsqfSBjZWxsRGF0YSBUaGUgRGF0YSBmb3IgdGhlIGNlbGwKCQkgKiAgQHBhcmFtIHthcnJheXxvYmplY3R9IHJvd0RhdGEgVGhlIGRhdGEgZm9yIHRoZSB3aG9sZSByb3cKCQkgKiAgQHBhcmFtIHtpbnR9IHJvdyBUaGUgcm93IGluZGV4IGZvciB0aGUgYW9EYXRhIGRhdGEgc3RvcmUKCQkgKiAgQHBhcmFtIHtpbnR9IGNvbCBUaGUgY29sdW1uIGluZGV4IGZvciBhb0NvbHVtbnMKCQkgKgoJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMuY29sdW1uLmNyZWF0ZWRDZWxsCgkJICogIEBkdG9wdCBDb2x1bW5zCgkJICoKCQkgKiAgQGV4YW1wbGUKCQkgKiAgICAkKGRvY3VtZW50KS5yZWFkeSggZnVuY3Rpb24oKSB7CgkJICogICAgICAkKCcjZXhhbXBsZScpLmRhdGFUYWJsZSggewoJCSAqICAgICAgICAiY29sdW1uRGVmcyI6IFsgewoJCSAqICAgICAgICAgICJ0YXJnZXRzIjogWzNdLAoJCSAqICAgICAgICAgICJjcmVhdGVkQ2VsbCI6IGZ1bmN0aW9uICh0ZCwgY2VsbERhdGEsIHJvd0RhdGEsIHJvdywgY29sKSB7CgkJICogICAgICAgICAgICBpZiAoIGNlbGxEYXRhID09ICIxLjciICkgewoJCSAqICAgICAgICAgICAgICAkKHRkKS5jc3MoJ2NvbG9yJywgJ2JsdWUnKQoJCSAqICAgICAgICAgICAgfQoJCSAqICAgICAgICAgIH0KCQkgKiAgICAgICAgfSBdCgkJICogICAgICB9KTsKCQkgKiAgICB9ICk7CgkJICovCgkJImZuQ3JlYXRlZENlbGwiOiBudWxsLAoJCgkKCQkvKioKCQkgKiBUaGlzIHBhcmFtZXRlciBoYXMgYmVlbiByZXBsYWNlZCBieSBgZGF0YWAgaW4gRGF0YVRhYmxlcyB0byBlbnN1cmUgbmFtaW5nCgkJICogY29uc2lzdGVuY3kuIGBkYXRhUHJvcGAgY2FuIHN0aWxsIGJlIHVzZWQsIGFzIHRoZXJlIGlzIGJhY2t3YXJkcwoJCSAqIGNvbXBhdGliaWxpdHkgaW4gRGF0YVRhYmxlcyBmb3IgdGhpcyBvcHRpb24sIGJ1dCBpdCBpcyBzdHJvbmdseQoJCSAqIHJlY29tbWVuZGVkIHRoYXQgeW91IHVzZSBgZGF0YWAgaW4gcHJlZmVyZW5jZSB0byBgZGF0YVByb3BgLgoJCSAqICBAbmFtZSBEYXRhVGFibGUuZGVmYXVsdHMuY29sdW1uLmRhdGFQcm9wCgkJICovCgkKCQoJCS8qKgoJCSAqIFRoaXMgcHJvcGVydHkgY2FuIGJlIHVzZWQgdG8gcmVhZCBkYXRhIGZyb20gYW55IGRhdGEgc291cmNlIHByb3BlcnR5LAoJCSAqIGluY2x1ZGluZyBkZWVwbHkgbmVzdGVkIG9iamVjdHMgLyBwcm9wZXJ0aWVzLiBgZGF0YWAgY2FuIGJlIGdpdmVuIGluIGEKCQkgKiBudW1iZXIgb2YgZGlmZmVyZW50IHdheXMgd2hpY2ggZWZmZWN0IGl0cyBiZWhhdmlvdXI6CgkJICoKCQkgKiAqIGBpbnRlZ2VyYCAtIHRyZWF0ZWQgYXMgYW4gYXJyYXkgaW5kZXggZm9yIHRoZSBkYXRhIHNvdXJjZS4gVGhpcyBpcyB0aGUKCQkgKiAgIGRlZmF1bHQgdGhhdCBEYXRhVGFibGVzIHVzZXMgKGluY3JlbWVudGFsbHkgaW5jcmVhc2VkIGZvciBlYWNoIGNvbHVtbikuCgkJICogKiBgc3RyaW5nYCAtIHJlYWQgYW4gb2JqZWN0IHByb3BlcnR5IGZyb20gdGhlIGRhdGEgc291cmNlLiBUaGVyZSBhcmUKCQkgKiAgIHRocmVlICdzcGVjaWFsJyBvcHRpb25zIHRoYXQgY2FuIGJlIHVzZWQgaW4gdGhlIHN0cmluZyB0byBhbHRlciBob3cKCQkgKiAgIERhdGFUYWJsZXMgcmVhZHMgdGhlIGRhdGEgZnJvbSB0aGUgc291cmNlIG9iamVjdDoKCQkgKiAgICAqIGAuYCAtIERvdHRlZCBKYXZhc2NyaXB0IG5vdGF0aW9uLiBKdXN0IGFzIHlvdSB1c2UgYSBgLmAgaW4KCQkgKiAgICAgIEphdmFzY3JpcHQgdG8gcmVhZCBmcm9tIG5lc3RlZCBvYmplY3RzLCBzbyB0byBjYW4gdGhlIG9wdGlvbnMKCQkgKiAgICAgIHNwZWNpZmllZCBpbiBgZGF0YWAuIEZvciBleGFtcGxlOiBgYnJvd3Nlci52ZXJzaW9uYCBvcgoJCSAqICAgICAgYGJyb3dzZXIubmFtZWAuIElmIHlvdXIgb2JqZWN0IHBhcmFtZXRlciBuYW1lIGNvbnRhaW5zIGEgcGVyaW9kLCB1c2UKCQkgKiAgICAgIGBcXGAgdG8gZXNjYXBlIGl0IC0gaS5lLiBgZmlyc3RcXC5uYW1lYC4KCQkgKiAgICAqIGBbXWAgLSBBcnJheSBub3RhdGlvbi4gRGF0YVRhYmxlcyBjYW4gYXV0b21hdGljYWxseSBjb21iaW5lIGRhdGEKCQkgKiAgICAgIGZyb20gYW5kIGFycmF5IHNvdXJjZSwgam9pbmluZyB0aGUgZGF0YSB3aXRoIHRoZSBjaGFyYWN0ZXJzIHByb3ZpZGVkCgkJICogICAgICBiZXR3ZWVuIHRoZSB0d28gYnJhY2tldHMuIEZvciBleGFtcGxlOiBgbmFtZVssIF1gIHdvdWxkIHByb3ZpZGUgYQoJCSAqICAgICAgY29tbWEtc3BhY2Ugc2VwYXJhdGVkIGxpc3QgZnJvbSB0aGUgc291cmNlIGFycmF5LiBJZiBubyBjaGFyYWN0ZXJzCgkJICogICAgICBhcmUgcHJvdmlkZWQgYmV0d2VlbiB0aGUgYnJhY2tldHMsIHRoZSBvcmlnaW5hbCBhcnJheSBzb3VyY2UgaXMKCQkgKiAgICAgIHJldHVybmVkLgoJCSAqICAgICogYCgpYCAtIEZ1bmN0aW9uIG5vdGF0aW9uLiBBZGRpbmcgYCgpYCB0byB0aGUgZW5kIG9mIGEgcGFyYW1ldGVyIHdpbGwKCQkgKiAgICAgIGV4ZWN1dGUgYSBmdW5jdGlvbiBvZiB0aGUgbmFtZSBnaXZlbi4gRm9yIGV4YW1wbGU6IGBicm93c2VyKClgIGZvciBhCgkJICogICAgICBzaW1wbGUgZnVuY3Rpb24gb24gdGhlIGRhdGEgc291cmNlLCBgYnJvd3Nlci52ZXJzaW9uKClgIGZvciBhCgkJICogICAgICBmdW5jdGlvbiBpbiBhIG5lc3RlZCBwcm9wZXJ0eSBvciBldmVuIGBicm93c2VyKCkudmVyc2lvbmAgdG8gZ2V0IGFuCgkJICogICAgICBvYmplY3QgcHJvcGVydHkgaWYgdGhlIGZ1bmN0aW9uIGNhbGxlZCByZXR1cm5zIGFuIG9iamVjdC4gTm90ZSB0aGF0CgkJICogICAgICBmdW5jdGlvbiBub3RhdGlvbiBpcyByZWNvbW1lbmRlZCBmb3IgdXNlIGluIGByZW5kZXJgIHJhdGhlciB0aGFuCgkJICogICAgICBgZGF0YWAgYXMgaXQgaXMgbXVjaCBzaW1wbGVyIHRvIHVzZSBhcyBhIHJlbmRlcmVyLgoJCSAqICogYG51bGxgIC0gdXNlIHRoZSBvcmlnaW5hbCBkYXRhIHNvdXJjZSBmb3IgdGhlIHJvdyByYXRoZXIgdGhhbiBwbHVja2luZwoJCSAqICAgZGF0YSBkaXJlY3RseSBmcm9tIGl0LiBUaGlzIGFjdGlvbiBoYXMgZWZmZWN0cyBvbiB0d28gb3RoZXIKCQkgKiAgIGluaXRpYWxpc2F0aW9uIG9wdGlvbnM6CgkJICogICAgKiBgZGVmYXVsdENvbnRlbnRgIC0gV2hlbiBudWxsIGlzIGdpdmVuIGFzIHRoZSBgZGF0YWAgb3B0aW9uIGFuZAoJCSAqICAgICAgYGRlZmF1bHRDb250ZW50YCBpcyBzcGVjaWZpZWQgZm9yIHRoZSBjb2x1bW4sIHRoZSB2YWx1ZSBkZWZpbmVkIGJ5CgkJICogICAgICBgZGVmYXVsdENvbnRlbnRgIHdpbGwgYmUgdXNlZCBmb3IgdGhlIGNlbGwuCgkJICogICAgKiBgcmVuZGVyYCAtIFdoZW4gbnVsbCBpcyB1c2VkIGZvciB0aGUgYGRhdGFgIG9wdGlvbiBhbmQgdGhlIGByZW5kZXJgCgkJICogICAgICBvcHRpb24gaXMgc3BlY2lmaWVkIGZvciB0aGUgY29sdW1uLCB0aGUgd2hvbGUgZGF0YSBzb3VyY2UgZm9yIHRoZQoJCSAqICAgICAgcm93IGlzIHVzZWQgZm9yIHRoZSByZW5kZXJlci4KCQkgKiAqIGBmdW5jdGlvbmAgLSB0aGUgZnVuY3Rpb24gZ2l2ZW4gd2lsbCBiZSBleGVjdXRlZCB3aGVuZXZlciBEYXRhVGFibGVzCgkJICogICBuZWVkcyB0byBzZXQgb3IgZ2V0IHRoZSBkYXRhIGZvciBhIGNlbGwgaW4gdGhlIGNvbHVtbi4gVGhlIGZ1bmN0aW9uCgkJICogICB0YWtlcyB0aHJlZSBwYXJhbWV0ZXJzOgoJCSAqICAgICogUGFyYW1ldGVyczoKCQkgKiAgICAgICogYHthcnJheXxvYmplY3R9YCBUaGUgZGF0YSBzb3VyY2UgZm9yIHRoZSByb3cKCQkgKiAgICAgICogYHtzdHJpbmd9YCBUaGUgdHlwZSBjYWxsIGRhdGEgcmVxdWVzdGVkIC0="
}
]
},
{
"type": 12,
"id": "GC1RMrQALJyF7L8aVou4KvffA84SXtXXkiStHSukoCqS",
"fee": 14200000,
"feeAssetId": null,
"timestamp": 1577467389327,
"version": 1,
"sender": "3NAxHUEaM6RAG7rVDPL9L6DFZWkrqFtY98t",
"senderPublicKey": "4Jwx6yN9LNc5XbrqwrSdp2hok5niFKzGzfZwSxFH6FsV",
"proofs": [
"3P7vCaKmcP4znZYup5LAHuzgJwBo6uDvtBHGSgZBnud32cEPEVC571gPrAW1AMp9vs31qxF4yCWHHM54YxnrKHxC"
],
"data": [
{
"key": "bootstrap.min.js.map?4?0?0",
"type": "binary",
"value": "base64:eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2pzL3NyYy91dGlsLmpzIiwiLi4vLi4vanMvc3JjL2FsZXJ0LmpzIiwiLi4vLi4vanMvc3JjL2J1dHRvbi5qcyIsIi4uLy4uL2pzL3NyYy9jYXJvdXNlbC5qcyIsIi4uLy4uL2pzL3NyYy9jb2xsYXBzZS5qcyIsIi4uLy4uL2pzL3NyYy9kcm9wZG93bi5qcyIsIi4uLy4uL2pzL3NyYy9tb2RhbC5qcyIsIi4uLy4uL2pzL3NyYy90b29scy9zYW5pdGl6ZXIuanMiLCIuLi8uLi9qcy9zcmMvdG9vbHRpcC5qcyIsIi4uLy4uL2pzL3NyYy9wb3BvdmVyLmpzIiwiLi4vLi4vanMvc3JjL3Njcm9sbHNweS5qcyIsIi4uLy4uL2pzL3NyYy90YWIuanMiLCIuLi8uLi9qcy9zcmMvdG9hc3QuanMiLCIuLi8uLi9qcy9zcmMvaW5kZXguanMiXSwibmFtZXMiOlsiVFJBTlNJVElPTl9FTkQiLCJ0cmFuc2l0aW9uRW5kRW11bGF0b3IiLCJkdXJhdGlvbiIsIl90aGlzIiwidGhpcyIsImNhbGxlZCIsIiQiLCJvbmUiLCJVdGlsIiwic2V0VGltZW91dCIsInRyaWdnZXJUcmFuc2l0aW9uRW5kIiwiZ2V0VUlEIiwicHJlZml4IiwiTWF0aCIsInJhbmRvbSIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJnZXRTZWxlY3RvckZyb21FbGVtZW50IiwiZWxlbWVudCIsInNlbGVjdG9yIiwiZ2V0QXR0cmlidXRlIiwiaHJlZkF0dHIiLCJ0cmltIiwicXVlcnlTZWxlY3RvciIsImVyciIsImdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50IiwidHJhbnNpdGlvbkR1cmF0aW9uIiwiY3NzIiwidHJhbnNpdGlvbkRlbGF5IiwiZmxvYXRUcmFuc2l0aW9uRHVyYXRpb24iLCJwYXJzZUZsb2F0IiwiZmxvYXRUcmFuc2l0aW9uRGVsYXkiLCJzcGxpdCIsInJlZmxvdyIsIm9mZnNldEhlaWdodCIsInRyaWdnZXIiLCJzdXBwb3J0c1RyYW5zaXRpb25FbmQiLCJCb29sZWFuIiwiaXNFbGVtZW50Iiwib2JqIiwibm9kZVR5cGUiLCJ0eXBlQ2hlY2tDb25maWciLCJjb21wb25lbnROYW1lIiwiY29uZmlnIiwiY29uZmlnVHlwZXMiLCJwcm9wZXJ0eSIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImV4cGVjdGVkVHlwZXMiLCJ2YWx1ZSIsInZhbHVlVHlwZSIsInRvU3RyaW5nIiwibWF0Y2giLCJ0b0xvd2VyQ2FzZSIsIlJlZ0V4cCIsInRlc3QiLCJFcnJvciIsInRvVXBwZXJDYXNlIiwiZmluZFNoYWRvd1Jvb3QiLCJkb2N1bWVudEVsZW1lbnQiLCJhdHRhY2hTaGFkb3ciLCJnZXRSb290Tm9kZSIsIlNoYWRvd1Jvb3QiLCJwYXJlbnROb2RlIiwicm9vdCIsImZuIiwiZW11bGF0ZVRyYW5zaXRpb25FbmQiLCJldmVudCIsInNwZWNpYWwiLCJiaW5kVHlwZSIsImRlbGVnYXRlVHlwZSIsImhhbmRsZSIsInRhcmdldCIsImlzIiwiaGFuZGxlT2JqIiwiaGFuZGxlciIsImFwcGx5IiwiYXJndW1lbnRzIiwiTkFNRSIsIkRBVEFfS0VZIiwiRVZFTlRfS0VZIiwiSlFVRVJZX05PX0NPTkZMSUNUIiwiRXZlbnQiLCJDTE9TRSIsIkNMT1NFRCIsIkNMSUNLX0RBVEFfQVBJIiwiQ2xhc3NOYW1lIiwiQWxlcnQiLCJfZWxlbWVudCIsImNsb3NlIiwicm9vdEVsZW1lbnQiLCJfZ2V0Um9vdEVsZW1lbnQiLCJfdHJpZ2dlckNsb3NlRXZlbnQiLCJpc0RlZmF1bHRQcmV2ZW50ZWQiLCJfcmVtb3ZlRWxlbWVudCIsImRpc3Bvc2UiLCJyZW1vdmVEYXRhIiwicGFyZW50IiwiY2xvc2VzdCIsImNsb3NlRXZlbnQiLCJyZW1vdmVDbGFzcyIsImhhc0NsYXNzIiwiX2Rlc3Ryb3lFbGVtZW50IiwiZGV0YWNoIiwicmVtb3ZlIiwiX2pRdWVyeUludGVyZmFjZSIsImVhY2giLCIkZWxlbWVudCIsImRhdGEiLCJfaGFuZGxlRGlzbWlzcyIsImFsZXJ0SW5zdGFuY2UiLCJwcmV2ZW50RGVmYXVsdCIsIm9uIiwiQ29uc3RydWN0b3IiLCJub0NvbmZsaWN0IiwiREFUQV9BUElfS0VZIiwiU2VsZWN0b3IiLCJGT0NVU19CTFVSX0RBVEFfQVBJIiwiQnV0dG9uIiwidG9nZ2xlIiwidHJpZ2dlckNoYW5nZUV2ZW50IiwiYWRkQXJpYVByZXNzZWQiLCJpbnB1dCIsInR5cGUiLCJjaGVja2VkIiwiY2xhc3NMaXN0IiwiY29udGFpbnMiLCJhY3RpdmVFbGVtZW50IiwiaGFzQXR0cmlidXRlIiwiZm9jdXMiLCJzZXRBdHRyaWJ1dGUiLCJ0b2dnbGVDbGFzcyIsImJ1dHRvbiIsIkRlZmF1bHQiLCJpbnRlcnZhbCIsImtleWJvYXJkIiwic2xpZGUiLCJwYXVzZSIsIndyYXAiLCJ0b3VjaCIsIkRlZmF1bHRUeXBlIiwiRGlyZWN0aW9uIiwiU0xJREUiLCJTTElEIiwiS0VZRE9XTiIsIk1PVVNFRU5URVIiLCJNT1VTRUxFQVZFIiwiVE9VQ0hTVEFSVCIsIlRPVUNITU9WRSIsIlRPVUNIRU5EIiwiUE9JTlRFUkRPV04iLCJQT0lOVEVSVVAiLCJEUkFHX1NUQVJUIiwiTE9BRF9EQVRBX0FQSSIsIlBvaW50ZXJUeXBlIiwiVE9VQ0giLCJQRU4iLCJDYXJvdXNlbCIsIl9pdGVtcyIsIl9pbnRlcnZhbCIsIl9hY3RpdmVFbGVtZW50IiwiX2lzUGF1c2VkIiwiX2lzU2xpZGluZyIsInRvdWNoVGltZW91dCIsInRvdWNoU3RhcnRYIiwidG91Y2hEZWx0YVgiLCJfY29uZmlnIiwiX2dldENvbmZpZyIsIl9pbmRpY2F0b3JzRWxlbWVudCIsIl90b3VjaFN1cHBvcnRlZCIsIm5hdmlnYXRvciIsIm1heFRvdWNoUG9pbnRzIiwiX3BvaW50ZXJFdmVudCIsIndpbmRvdyIsIlBvaW50ZXJFdmVudCIsIk1TUG9pbnRlckV2ZW50IiwiX2FkZEV2ZW50TGlzdGVuZXJzIiwibmV4dCIsIl9zbGlkZSIsIm5leHRXaGVuVmlzaWJsZSIsImhpZGRlbiIsInByZXYiLCJjeWNsZSIsImNsZWFySW50ZXJ2YWwiLCJzZXRJbnRlcnZhbCIsInZpc2liaWxpdHlTdGF0ZSIsImJpbmQiLCJ0byIsImluZGV4IiwiYWN0aXZlSW5kZXgiLCJfZ2V0SXRlbUluZGV4IiwibGVuZ3RoIiwiZGlyZWN0aW9uIiwib2ZmIiwiX29iamVjdFNwcmVhZCIsIl9oYW5kbGVTd2lwZSIsImFic0RlbHRheCIsImFicyIsIl90aGlzMiIsIl9rZXlkb3duIiwiX2FkZFRvdWNoRXZlbnRMaXN0ZW5lcnMiLCJfdGhpczMiLCJzdGFydCIsIm9yaWdpbmFsRXZlbnQiLCJwb2ludGVyVHlwZSIsImNsaWVudFgiLCJ0b3VjaGVzIiwiZW5kIiwiY2xlYXJUaW1lb3V0IiwicXVlcnlTZWxlY3RvckFsbCIsImUiLCJhZGQiLCJ0YWdOYW1lIiwid2hpY2giLCJzbGljZSIsImluZGV4T2YiLCJfZ2V0SXRlbUJ5RGlyZWN0aW9uIiwiaXNOZXh0RGlyZWN0aW9uIiwiaXNQcmV2RGlyZWN0aW9uIiwibGFzdEl0ZW1JbmRleCIsIml0ZW1JbmRleCIsIl90cmlnZ2VyU2xpZGVFdmVudCIsInJlbGF0ZWRUYXJnZXQiLCJldmVudERpcmVjdGlvbk5hbWUiLCJ0YXJnZXRJbmRleCIsImZyb21JbmRleCIsInNsaWRlRXZlbnQiLCJmcm9tIiwiX3NldEFjdGl2ZUluZGljYXRvckVsZW1lbnQiLCJpbmRpY2F0b3JzIiwibmV4dEluZGljYXRvciIsImNoaWxkcmVuIiwiYWRkQ2xhc3MiLCJkaXJlY3Rpb25hbENsYXNzTmFtZSIsIm9yZGVyQ2xhc3NOYW1lIiwiX3RoaXM0IiwiYWN0aXZlRWxlbWVudEluZGV4IiwibmV4dEVsZW1lbnQiLCJuZXh0RWxlbWVudEluZGV4IiwiaXNDeWNsaW5nIiwic2xpZEV2ZW50IiwibmV4dEVsZW1lbnRJbnRlcnZhbCIsInBhcnNlSW50IiwiZGVmYXVsdEludGVydmFsIiwiYWN0aW9uIiwiVHlwZUVycm9yIiwicmlkZSIsIl9kYXRhQXBpQ2xpY2tIYW5kbGVyIiwic2xpZGVJbmRleCIsImNhcm91c2VscyIsImkiLCJsZW4iLCIkY2Fyb3VzZWwiLCJTSE9XIiwiU0hPV04iLCJISURFIiwiSElEREVOIiwiRGltZW5zaW9uIiwiQ29sbGFwc2UiLCJfaXNUcmFuc2l0aW9uaW5nIiwiX3RyaWdnZXJBcnJheSIsImlkIiwidG9nZ2xlTGlzdCIsImVsZW0iLCJmaWx0ZXJFbGVtZW50IiwiZmlsdGVyIiwiZm91bmRFbGVtIiwiX3NlbGVjdG9yIiwicHVzaCIsIl9wYXJlbnQiLCJfZ2V0UGFyZW50IiwiX2FkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyIsImhpZGUiLCJzaG93IiwiYWN0aXZlcyIsImFjdGl2ZXNEYXRhIiwibm90Iiwic3RhcnRFdmVudCIsImRpbWVuc2lvbiIsIl9nZXREaW1lbnNpb24iLCJzdHlsZSIsImF0dHIiLCJzZXRUcmFuc2l0aW9uaW5nIiwic2Nyb2xsU2l6ZSIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInRyaWdnZXJBcnJheUxlbmd0aCIsImlzVHJhbnNpdGlvbmluZyIsImpxdWVyeSIsIl9nZXRUYXJnZXRGcm9tRWxlbWVudCIsInRyaWdnZXJBcnJheSIsImlzT3BlbiIsIiR0aGlzIiwiY3VycmVudFRhcmdldCIsIiR0cmlnZ2VyIiwic2VsZWN0b3JzIiwiJHRhcmdldCIsIlJFR0VYUF9LRVlET1dOIiwiQVJST1dfVVBfS0VZQ09ERSIsIkNMSUNLIiwiS0VZRE9XTl9EQVRBX0FQSSIsIktFWVVQX0RBVEFfQVBJIiwiQXR0YWNobWVudE1hcCIsIm9mZnNldCIsImZsaXAiLCJib3VuZGFyeSIsInJlZmVyZW5jZSIsImRpc3BsYXkiLCJEcm9wZG93biIsIl9wb3BwZXIiLCJfbWVudSIsIl9nZXRNZW51RWxlbWVudCIsIl9pbk5hdmJhciIsIl9kZXRlY3ROYXZiYXIiLCJkaXNhYmxlZCIsIl9nZXRQYXJlbnRGcm9tRWxlbWVudCIsImlzQWN0aXZlIiwiX2NsZWFyTWVudXMiLCJzaG93RXZlbnQiLCJQb3BwZXIiLCJyZWZlcmVuY2VFbGVtZW50IiwiX2dldFBvcHBlckNvbmZpZyIsImJvZHkiLCJub29wIiwiaGlkZUV2ZW50IiwiZGVzdHJveSIsInVwZGF0ZSIsInNjaGVkdWxlVXBkYXRlIiwic3RvcFByb3BhZ2F0aW9uIiwiY29uc3RydWN0b3IiLCJfZ2V0UGxhY2VtZW50IiwiJHBhcmVudERyb3Bkb3duIiwicGxhY2VtZW50IiwiX2dldE9mZnNldCIsIm9mZnNldHMiLCJwb3BwZXJDb25maWciLCJtb2RpZmllcnMiLCJlbmFibGVkIiwicHJldmVudE92ZXJmbG93IiwiYm91bmRhcmllc0VsZW1lbnQiLCJhcHBseVN0eWxlIiwidG9nZ2xlcyIsImNvbnRleHQiLCJjbGlja0V2ZW50IiwiZHJvcGRvd25NZW51IiwiX2RhdGFBcGlLZXlkb3duSGFuZGxlciIsIml0ZW1zIiwiYmFja2Ryb3AiLCJGT0NVU0lOIiwiUkVTSVpFIiwiQ0xJQ0tfRElTTUlTUyIsIktFWURPV05fRElTTUlTUyIsIk1PVVNFVVBfRElTTUlTUyIsIk1PVVNFRE9XTl9ESVNNSVNTIiwiTW9kYWwiLCJfZGlhbG9nIiwiX2JhY2tkcm9wIiwiX2lzU2hvd24iLCJfaXNCb2R5T3ZlcmZsb3dpbmciLCJfaWdub3JlQmFja2Ryb3BDbGljayIsIl9zY3JvbGxiYXJXaWR0aCIsIl9jaGVja1Njcm9sbGJhciIsIl9zZXRTY3JvbGxiYXIiLCJfYWRqdXN0RGlhbG9nIiwiX3NldEVzY2FwZUV2ZW50IiwiX3NldFJlc2l6ZUV2ZW50IiwiX3Nob3dCYWNrZHJvcCIsIl9zaG93RWxlbWVudCIsInRyYW5zaXRpb24iLCJfaGlkZU1vZGFsIiwiZm9yRWFjaCIsImh0bWxFbGVtZW50IiwiaGFuZGxlVXBkYXRlIiwiTm9kZSIsIkVMRU1FTlRfTk9ERSIsImFwcGVuZENoaWxkIiwicmVtb3ZlQXR0cmlidXRlIiwic2Nyb2xsVG9wIiwiX2VuZm9yY2VGb2N1cyIsInNob3duRXZlbnQiLCJ0cmFuc2l0aW9uQ29tcGxldGUiLCJoYXMiLCJfdGhpczUiLCJfdGhpczYiLCJfdGhpczciLCJfcmVzZXRBZGp1c3RtZW50cyIsIl9yZXNldFNjcm9sbGJhciIsIl9yZW1vdmVCYWNrZHJvcCIsImNhbGxiYWNrIiwiX3RoaXM4IiwiYW5pbWF0ZSIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJhcHBlbmRUbyIsImJhY2tkcm9wVHJhbnNpdGlvbkR1cmF0aW9uIiwiY2FsbGJhY2tSZW1vdmUiLCJpc01vZGFsT3ZlcmZsb3dpbmciLCJzY3JvbGxIZWlnaHQiLCJjbGllbnRIZWlnaHQiLCJwYWRkaW5nTGVmdCIsInBhZGRpbmdSaWdodCIsInJlY3QiLCJsZWZ0IiwicmlnaHQiLCJpbm5lcldpZHRoIiwiX2dldFNjcm9sbGJhcldpZHRoIiwiX3RoaXM5IiwiZml4ZWRDb250ZW50Iiwic3RpY2t5Q29udGVudCIsImFjdHVhbFBhZGRpbmciLCJjYWxjdWxhdGVkUGFkZGluZyIsImFjdHVhbE1hcmdpbiIsIm1hcmdpblJpZ2h0IiwiY2FsY3VsYXRlZE1hcmdpbiIsInBhZGRpbmciLCJlbGVtZW50cyIsIm1hcmdpbiIsInNjcm9sbERpdiIsInNjcm9sbGJhcldpZHRoIiwid2lkdGgiLCJjbGllbnRXaWR0aCIsInJlbW92ZUNoaWxkIiwiX3RoaXMxMCIsInVyaUF0dHJzIiwiRGVmYXVsdFdoaXRlbGlzdCIsIioiLCJhIiwiYXJlYSIsImIiLCJiciIsImNvbCIsImNvZGUiLCJkaXYiLCJlbSIsImhyIiwiaDEiLCJoMiIsImgzIiwiaDQiLCJoNSIsImg2IiwiaW1nIiwibGkiLCJvbCIsInAiLCJwcmUiLCJzIiwic21hbGwiLCJzcGFuIiwic3ViIiwic3VwIiwic3Ryb25nIiwidSIsInVsIiwiU0FGRV9VUkxfUEFUVEVSTiIsIkRBVEFfVVJMX1BBVFRFUk4iLCJzYW5pdGl6ZUh0bWwiLCJ1bnNhZmVIdG1sIiwid2hpdGVMaXN0Iiwic2FuaXRpemVGbiIsImNyZWF0ZWREb2N1bWVudCIsIkRPTVBhcnNlciIsInBhcnNlRnJvbVN0cmluZyIsIndoaXRlbGlzdEtleXMiLCJrZXlzIiwiX2xvb3AiLCJlbCIsImVsTmFtZSIsIm5vZGVOYW1lIiwiYXR0cmlidXRlTGlzdCIsImF0dHJpYnV0ZXMiLCJ3aGl0ZWxpc3RlZEF0dHJpYnV0ZXMiLCJjb25jYXQiLCJhbGxvd2VkQXR0cmlidXRlTGlzdCIsImF0dHJOYW1lIiwibm9kZVZhbHVlIiwicmVnRXhwIiwiYXR0clJlZ2V4IiwibCIsImFsbG93ZWRBdHRyaWJ1dGUiLCJpbm5lckhUTUwiLCJDTEFTU19QUkVGSVgiLCJCU0NMU19QUkVGSVhfUkVHRVgiLCJESVNBTExPV0VEX0FUVFJJQlVURVMiLCJhbmltYXRpb24iLCJ0ZW1wbGF0ZSIsInRpdGxlIiwiZGVsYXkiLCJodG1sIiwiY29udGFpbmVyIiwiZmFsbGJhY2tQbGFjZW1lbnQiLCJzYW5pdGl6ZSIsIkFVVE8iLCJUT1AiLCJSSUdIVCIsIkJPVFRPTSIsIkxFRlQiLCJIb3ZlclN0YXRlIiwiSU5TRVJURUQiLCJGT0NVU09VVCIsIlRyaWdnZXIiLCJUb29sdGlwIiwiX2lzRW5hYmxlZCIsIl90aW1lb3V0IiwiX2hvdmVyU3RhdGUiLCJfYWN0aXZlVHJpZ2dlciIsInRpcCIsIl9zZXRMaXN0ZW5lcnMiLCJlbmFibGUiLCJkaXNhYmxlIiwidG9nZ2xlRW5hYmxlZCIsImRhdGFLZXkiLCJfZ2V0RGVsZWdhdGVDb25maWciLCJjbGljayIsIl9pc1dpdGhBY3RpdmVUcmlnZ2VyIiwiX2VudGVyIiwiX2xlYXZlIiwiZ2V0VGlwRWxlbWVudCIsImlzV2l0aENvbnRlbnQiLCJzaGFkb3dSb290IiwiaXNJblRoZURvbSIsIm93bmVyRG9jdW1lbnQiLCJ0aXBJZCIsInNldENvbnRlbnQiLCJhdHRhY2htZW50IiwiX2dldEF0dGFjaG1lbnQiLCJhZGRBdHRhY2htZW50Q2xhc3MiLCJfZ2V0Q29udGFpbmVyIiwiYmVoYXZpb3IiLCJhcnJvdyIsIm9uQ3JlYXRlIiwib3JpZ2luYWxQbGFjZW1lbnQiLCJfaGFuZGxlUG9wcGVyUGxhY2VtZW50Q2hhbmdlIiwib25VcGRhdGUiLCJjb21wbGV0ZSIsIl9maXhUcmFuc2l0aW9uIiwicHJldkhvdmVyU3RhdGUiLCJfY2xlYW5UaXBDbGFzcyIsImdldFRpdGxlIiwic2V0RWxlbWVudENvbnRlbnQiLCJjb250ZW50IiwidGV4dCIsImVtcHR5IiwiYXBwZW5kIiwiZmluZCIsImV2ZW50SW4iLCJldmVudE91dCIsIl9maXhUaXRsZSIsInRpdGxlVHlwZSIsImRhdGFBdHRyaWJ1dGVzIiwiZGF0YUF0dHIiLCJrZXkiLCIkdGlwIiwidGFiQ2xhc3MiLCJqb2luIiwicG9wcGVyRGF0YSIsInBvcHBlckluc3RhbmNlIiwiaW5zdGFuY2UiLCJwb3BwZXIiLCJpbml0Q29uZmlnQW5pbWF0aW9uIiwiUG9wb3ZlciIsIl9nZXRDb250ZW50IiwibWV0aG9kIiwiQUNUSVZBVEUiLCJTQ1JPTEwiLCJPZmZzZXRNZXRob2QiLCJTY3JvbGxTcHkiLCJfc2Nyb2xsRWxlbWVudCIsIl9vZmZzZXRzIiwiX3RhcmdldHMiLCJfYWN0aXZlVGFyZ2V0IiwiX3Njcm9sbEhlaWdodCIsIl9wcm9jZXNzIiwicmVmcmVzaCIsImF1dG9NZXRob2QiLCJvZmZzZXRNZXRob2QiLCJvZmZzZXRCYXNlIiwiX2dldFNjcm9sbFRvcCIsIl9nZXRTY3JvbGxIZWlnaHQiLCJtYXAiLCJ0YXJnZXRTZWxlY3RvciIsInRhcmdldEJDUiIsImhlaWdodCIsInRvcCIsIml0ZW0iLCJzb3J0IiwicGFnZVlPZmZzZXQiLCJtYXgiLCJfZ2V0T2Zmc2V0SGVpZ2h0IiwiaW5uZXJIZWlnaHQiLCJtYXhTY3JvbGwiLCJfYWN0aXZhdGUiLCJfY2xlYXIiLCJxdWVyaWVzIiwiJGxpbmsiLCJwYXJlbnRzIiwibm9kZSIsInNjcm9sbFNweXMiLCIkc3B5IiwiVGFiIiwicHJldmlvdXMiLCJsaXN0RWxlbWVudCIsIml0ZW1TZWxlY3RvciIsIm1ha2VBcnJheSIsImhpZGRlbkV2ZW50IiwiYWN0aXZlIiwiX3RyYW5zaXRpb25Db21wbGV0ZSIsImRyb3Bkb3duQ2hpbGQiLCJkcm9wZG93bkVsZW1lbnQiLCJkcm9wZG93blRvZ2dsZUxpc3QiLCJhdXRvaGlkZSIsIlRvYXN0Iiwid2l0aG91dFRpbWVvdXQiLCJfY2xvc2UiLCJ2ZXJzaW9uIl0sIm1hcHBpbmdzIjoiOzs7Ozs2L0JBZUEsSUFBTUEsRUFBaUIsZ0JBc0J2QixTQUFTQyxFQUFzQkMsR0FBVSxJQUFBQyxFQUFBQyxLQUNuQ0MsR0FBUyxFQVliLE9BVkFDLEVBQUVGLE1BQU1HLElBQUlDLEVBQUtSLGVBQWdCLFdBQy9CSyxHQUFTLElBR1hJLFdBQVcsV0FDSkosR0FDSEcsRUFBS0UscUJBQXFCUCxJQUUzQkQsR0FFSUUsS0FjVCxJQUFNSSxFQUFPLENBRVhSLGVBQWdCLGtCQUVoQlcsT0FKVyxTQUlKQyxHQUNMLEtBRUVBLE1BdkRVLElBdURHQyxLQUFLQyxVQUNYQyxTQUFTQyxlQUFlSixLQUNqQyxPQUFPQSxHQUdUSyx1QkFaVyxTQVlZQyxHQUNyQixJQUFJQyxFQUFXRCxFQUFRRSxhQUFhLGVBRXBDLElBQUtELEdBQXlCLE1BQWJBLEVBQWtCLENBQ2pDLElBQU1FLEVBQVdILEVBQVFFLGFBQWEsUUFDdENELEVBQVdFLEdBQXlCLE1BQWJBLEVBQW1CQSxFQUFTQyxPQUFTLEdBRzlELElBQ0UsT0FBT1AsU0FBU1EsY0FBY0osR0FBWUEsRUFBVyxLQUNyRCxNQUFPSyxHQUNQLE9BQU8sT0FJWEMsaUNBM0JXLFNBMkJzQlAsR0FDL0IsSUFBS0EsRUFDSCxPQUFPLEVBSVQsSUFBSVEsRUFBcUJwQixFQUFFWSxHQUFTUyxJQUFJLHVCQUNwQ0MsRUFBa0J0QixFQUFFWSxHQUFTUyxJQUFJLG9CQUUvQkUsRUFBMEJDLFdBQVdKLEdBQ3JDSyxFQUF1QkQsV0FBV0YsR0FHeEMsT0FBS0MsR0FBNEJFLEdBS2pDTCxFQUFxQkEsRUFBbUJNLE1BQU0sS0FBSyxHQUNuREosRUFBa0JBLEVBQWdCSSxNQUFNLEtBQUssR0E3RmpCLEtBK0ZwQkYsV0FBV0osR0FBc0JJLFdBQVdGLEtBUDNDLEdBVVhLLE9BbkRXLFNBbURKZixHQUNMLE9BQU9BLEVBQVFnQixjQUdqQnhCLHFCQXZEVyxTQXVEVVEsR0FDbkJaLEVBQUVZLEdBQVNpQixRQUFRbkMsSUFJckJvQyxzQkE1RFcsV0E2RFQsT0FBT0MsUUFBUXJDLElBR2pCc0MsVUFoRVcsU0FnRURDLEdBQ1IsT0FBUUEsRUFBSSxJQUFNQSxHQUFLQyxVQUd6QkMsZ0JBcEVXLFNBb0VLQyxFQUFlQyxFQUFRQyxHQUNyQyxJQUFLLElBQU1DLEtBQVlELEVBQ3JCLEdBQUlFLE9BQU9DLFVBQVVDLGVBQWVDLEtBQUtMLEVBQWFDLEdBQVcsQ0FDL0QsSUFBTUssRUFBZ0JOLEVBQVlDLEdBQzVCTSxFQUFnQlIsRUFBT0UsR0FDdkJPLEVBQWdCRCxHQUFTM0MsRUFBSzhCLFVBQVVhLEdBQzFDLFdBdEhJWixFQXNIZVksRUFySHRCLEdBQUdFLFNBQVNKLEtBQUtWLEdBQUtlLE1BQU0sZUFBZSxHQUFHQyxlQXVIL0MsSUFBSyxJQUFJQyxPQUFPTixHQUFlTyxLQUFLTCxHQUNsQyxNQUFNLElBQUlNLE1BQ0xoQixFQUFjaUIsY0FBakIsYUFDV2QsRUFEWCxvQkFDdUNPLEVBRHZDLHdCQUVzQkYsRUFGdEIsTUExSFosSUFBZ0JYLEdBa0lkcUIsZUF0RlcsU0FzRkkxQyxHQUNiLElBQUtILFNBQVM4QyxnQkFBZ0JDLGFBQzVCLE9BQU8sS0FJVCxHQUFtQyxtQkFBeEI1QyxFQUFRNkMsWUFLbkIsT0FBSTdDLGFBQW1COEMsV0FDZDlDLEVBSUpBLEVBQVErQyxXQUlOekQsRUFBS29ELGVBQWUxQyxFQUFRK0MsWUFIMUIsS0FWUCxJQUFNQyxFQUFPaEQsRUFBUTZDLGNBQ3JCLE9BQU9HLGFBQWdCRixXQUFhRSxFQUFPLE9BeEcvQzVELEVBQUU2RCxHQUFHQyxxQkFBdUJuRSxFQUM1QkssRUFBRStELE1BQU1DLFFBQVE5RCxFQUFLUixnQkE5QmQsQ0FDTHVFLFNBQVV2RSxFQUNWd0UsYUFBY3hFLEVBQ2R5RSxPQUhLLFNBR0VKLEdBQ0wsR0FBSS9ELEVBQUUrRCxFQUFNSyxRQUFRQyxHQUFHdkUsTUFDckIsT0FBT2lFLEVBQU1PLFVBQVVDLFFBQVFDLE1BQU0xRSxLQUFNMkUsYUNkbkQsSUFBTUMsRUFBc0IsUUFFdEJDLEVBQXNCLFdBQ3RCQyxFQUFTLElBQWlCRCxFQUUxQkUsRUFBc0I3RSxFQUFFNkQsR0FBR2EsR0FNM0JJLEVBQVEsQ0FDWkMsTUFBSyxRQUFvQkgsRUFDekJJLE9BQU0sU0FBb0JKLEVBQzFCSyxlQUFjLFFBQVdMLEVBVkMsYUFhdEJNLEVBQ0ksUUFESkEsRUFFSSxPQUZKQSxFQUdJLE9BU0pDLGFBQ0osU0FBQUEsRUFBWXZFLEdBQ1ZkLEtBQUtzRixTQUFXeEUsNkJBV2xCeUUsTUFBQSxTQUFNekUsR0FDSixJQUFJMEUsRUFBY3hGLEtBQUtzRixTQUNuQnhFLElBQ0YwRSxFQUFjeEYsS0FBS3lGLGdCQUFnQjNFLElBR2pCZCxLQUFLMEYsbUJBQW1CRixHQUU1Qkcsc0JBSWhCM0YsS0FBSzRGLGVBQWVKLE1BR3RCSyxRQUFBLFdBQ0UzRixFQUFFNEYsV0FBVzlGLEtBQUtzRixTQUFVVCxHQUM1QjdFLEtBQUtzRixTQUFXLFFBS2xCRyxnQkFBQSxTQUFnQjNFLEdBQ2QsSUFBTUMsRUFBV1gsRUFBS1MsdUJBQXVCQyxHQUN6Q2lGLEdBQWEsRUFVakIsT0FSSWhGLElBQ0ZnRixFQUFTcEYsU0FBU1EsY0FBY0osSUFHN0JnRixJQUNIQSxFQUFTN0YsRUFBRVksR0FBU2tGLFFBQVgsSUFBdUJaLEdBQW1CLElBRzlDVyxLQUdUTCxtQkFBQSxTQUFtQjVFLEdBQ2pCLElBQU1tRixFQUFhL0YsRUFBRThFLE1BQU1BLEVBQU1DLE9BR2pDLE9BREEvRSxFQUFFWSxHQUFTaUIsUUFBUWtFLEdBQ1pBLEtBR1RMLGVBQUEsU0FBZTlFLEdBQVMsSUFBQWYsRUFBQUMsS0FHdEIsR0FGQUUsRUFBRVksR0FBU29GLFlBQVlkLEdBRWxCbEYsRUFBRVksR0FBU3FGLFNBQVNmLEdBQXpCLENBS0EsSUFBTTlELEVBQXFCbEIsRUFBS2lCLGlDQUFpQ1AsR0FFakVaLEVBQUVZLEdBQ0NYLElBQUlDLEVBQUtSLGVBQWdCLFNBQUNxRSxHQUFELE9BQVdsRSxFQUFLcUcsZ0JBQWdCdEYsRUFBU21ELEtBQ2xFRCxxQkFBcUIxQyxRQVJ0QnRCLEtBQUtvRyxnQkFBZ0J0RixNQVd6QnNGLGdCQUFBLFNBQWdCdEYsR0FDZFosRUFBRVksR0FDQ3VGLFNBQ0F0RSxRQUFRaUQsRUFBTUUsUUFDZG9CLFlBS0VDLGlCQUFQLFNBQXdCaEUsR0FDdEIsT0FBT3ZDLEtBQUt3RyxLQUFLLFdBQ2YsSUFBTUMsRUFBV3ZHLEVBQUVGLE1BQ2YwRyxFQUFhRCxFQUFTQyxLQUFLN0IsR0FFMUI2QixJQUNIQSxFQUFPLElBQUlyQixFQUFNckYsTUFDakJ5RyxFQUFTQyxLQUFLN0IsRUFBVTZCLElBR1gsVUFBWG5FLEdBQ0ZtRSxFQUFLbkUsR0FBUXZDLFdBS1oyRyxlQUFQLFNBQXNCQyxHQUNwQixPQUFPLFNBQVUzQyxHQUNYQSxHQUNGQSxFQUFNNEMsaUJBR1JELEVBQWNyQixNQUFNdkYsZ0RBL0Z0QixNQXBDd0IsaUJBOEk1QkUsRUFBRVMsVUFBVW1HLEdBQ1Y5QixFQUFNRyxlQXhJSSx5QkEwSVZFLEVBQU1zQixlQUFlLElBQUl0QixJQVMzQm5GLEVBQUU2RCxHQUFHYSxHQUFvQlMsRUFBTWtCLGlCQUMvQnJHLEVBQUU2RCxHQUFHYSxHQUFNbUMsWUFBYzFCLEVBQ3pCbkYsRUFBRTZELEdBQUdhLEdBQU1vQyxXQUFjLFdBRXZCLE9BREE5RyxFQUFFNkQsR0FBR2EsR0FBUUcsRUFDTk0sRUFBTWtCLGtCQ2hLZixJQUFNM0IsRUFBc0IsU0FFdEJDLEVBQXNCLFlBQ3RCQyxFQUFTLElBQWlCRCxFQUMxQm9DLEVBQXNCLFlBQ3RCbEMsRUFBc0I3RSxFQUFFNkQsR0FBR2EsR0FFM0JRLEVBQ0ssU0FETEEsRUFFSyxNQUZMQSxFQUdLLFFBR0w4QixFQUNpQiwwQkFEakJBLEVBRWlCLDBCQUZqQkEsRUFHaUIsNkJBSGpCQSxFQUlpQixVQUpqQkEsRUFLaUIsT0FHakJsQyxFQUFRLENBQ1pHLGVBQWMsUUFBZ0JMLEVBQVltQyxFQUMxQ0Usb0JBQXNCLFFBQVFyQyxFQUFZbUMsRUFBcEIsUUFDU25DLEVBQVltQyxHQVN2Q0csYUFDSixTQUFBQSxFQUFZdEcsR0FDVmQsS0FBS3NGLFNBQVd4RSw2QkFXbEJ1RyxPQUFBLFdBQ0UsSUFBSUMsR0FBcUIsRUFDckJDLEdBQWlCLEVBQ2YvQixFQUFjdEYsRUFBRUYsS0FBS3NGLFVBQVVVLFFBQ25Da0IsR0FDQSxHQUVGLEdBQUkxQixFQUFhLENBQ2YsSUFBTWdDLEVBQVF4SCxLQUFLc0YsU0FBU25FLGNBQWMrRixHQUUxQyxHQUFJTSxFQUFPLENBQ1QsR0FBbUIsVUFBZkEsRUFBTUMsS0FDUixHQUFJRCxFQUFNRSxTQUNSMUgsS0FBS3NGLFNBQVNxQyxVQUFVQyxTQUFTeEMsR0FDakNrQyxHQUFxQixNQUNoQixDQUNMLElBQU1PLEVBQWdCckMsRUFBWXJFLGNBQWMrRixHQUU1Q1csR0FDRjNILEVBQUUySCxHQUFlM0IsWUFBWWQsR0FLbkMsR0FBSWtDLEVBQW9CLENBQ3RCLEdBQUlFLEVBQU1NLGFBQWEsYUFDckJ0QyxFQUFZc0MsYUFBYSxhQUN6Qk4sRUFBTUcsVUFBVUMsU0FBUyxhQUN6QnBDLEVBQVltQyxVQUFVQyxTQUFTLFlBQy9CLE9BRUZKLEVBQU1FLFNBQVcxSCxLQUFLc0YsU0FBU3FDLFVBQVVDLFNBQVN4QyxHQUNsRGxGLEVBQUVzSCxHQUFPekYsUUFBUSxVQUduQnlGLEVBQU1PLFFBQ05SLEdBQWlCLEdBSWpCQSxHQUNGdkgsS0FBS3NGLFNBQVMwQyxhQUFhLGdCQUN4QmhJLEtBQUtzRixTQUFTcUMsVUFBVUMsU0FBU3hDLElBR2xDa0MsR0FDRnBILEVBQUVGLEtBQUtzRixVQUFVMkMsWUFBWTdDLE1BSWpDUyxRQUFBLFdBQ0UzRixFQUFFNEYsV0FBVzlGLEtBQUtzRixTQUFVVCxHQUM1QjdFLEtBQUtzRixTQUFXLFFBS1hpQixpQkFBUCxTQUF3QmhFLEdBQ3RCLE9BQU92QyxLQUFLd0csS0FBSyxXQUNmLElBQUlFLEVBQU94RyxFQUFFRixNQUFNMEcsS0FBSzdCLEdBRW5CNkIsSUFDSEEsRUFBTyxJQUFJVSxFQUFPcEgsTUFDbEJFLEVBQUVGLE1BQU0wRyxLQUFLN0IsRUFBVTZCLElBR1YsV0FBWG5FLEdBQ0ZtRSxFQUFLbkUsZ0RBeEVULE1BeEN3QixpQkE0SDVCckMsRUFBRVMsVUFDQ21HLEdBQUc5QixFQUFNRyxlQUFnQitCLEVBQTZCLFNBQUNqRCxHQUN0REEsRUFBTTRDLGlCQUVOLElBQUlxQixFQUFTakUsRUFBTUssT0FFZHBFLEVBQUVnSSxHQUFRL0IsU0FBU2YsS0FDdEI4QyxFQUFTaEksRUFBRWdJLEdBQVFsQyxRQUFRa0IsSUFHN0JFLEVBQU9iLGlCQUFpQjFELEtBQUszQyxFQUFFZ0ksR0FBUyxZQUV6Q3BCLEdBQUc5QixFQUFNbUMsb0JBQXFCRCxFQUE2QixTQUFDakQsR0FDM0QsSUFBTWlFLEVBQVNoSSxFQUFFK0QsRUFBTUssUUFBUTBCLFFBQVFrQixHQUFpQixHQUN4RGhILEVBQUVnSSxHQUFRRCxZQUFZN0MsRUFBaUIsZUFBZS9CLEtBQUtZLEVBQU13RCxTQVNyRXZILEVBQUU2RCxHQUFHYSxHQUFRd0MsRUFBT2IsaUJBQ3BCckcsRUFBRTZELEdBQUdhLEdBQU1tQyxZQUFjSyxFQUN6QmxILEVBQUU2RCxHQUFHYSxHQUFNb0MsV0FBYSxXQUV0QixPQURBOUcsRUFBRTZELEdBQUdhLEdBQVFHLEVBQ05xQyxFQUFPYixrQkN2SmhCLElBQU0zQixFQUF5QixXQUV6QkMsRUFBeUIsY0FDekJDLEVBQVMsSUFBb0JELEVBQzdCb0MsRUFBeUIsWUFDekJsQyxFQUF5QjdFLEVBQUU2RCxHQUFHYSxHQU05QnVELEVBQVUsQ0FDZEMsU0FBVyxJQUNYQyxVQUFXLEVBQ1hDLE9BQVcsRUFDWEMsTUFBVyxRQUNYQyxNQUFXLEVBQ1hDLE9BQVcsR0FHUEMsRUFBYyxDQUNsQk4sU0FBVyxtQkFDWEMsU0FBVyxVQUNYQyxNQUFXLG1CQUNYQyxNQUFXLG1CQUNYQyxLQUFXLFVBQ1hDLE1BQVcsV0FHUEUsRUFDTyxPQURQQSxFQUVPLE9BRlBBLEVBR08sT0FIUEEsRUFJTyxRQUdQM0QsRUFBUSxDQUNaNEQsTUFBSyxRQUFvQjlELEVBQ3pCK0QsS0FBSSxPQUFvQi9ELEVBQ3hCZ0UsUUFBTyxVQUFvQmhFLEVBQzNCaUUsV0FBVSxhQUFvQmpFLEVBQzlCa0UsV0FBVSxhQUFvQmxFLEVBQzlCbUUsV0FBVSxhQUFvQm5FLEVBQzlCb0UsVUFBUyxZQUFvQnBFLEVBQzdCcUUsU0FBUSxXQUFvQnJFLEVBQzVCc0UsWUFBVyxjQUFvQnRFLEVBQy9CdUUsVUFBUyxZQUFvQnZFLEVBQzdCd0UsV0FBVSxZQUFtQnhFLEVBQzdCeUUsY0FBYSxPQUFXekUsRUFBWW1DLEVBQ3BDOUIsZUFBYyxRQUFXTCxFQUFZbUMsR0FHakM3QixFQUNZLFdBRFpBLEVBRVksU0FGWkEsRUFHWSxRQUhaQSxFQUlZLHNCQUpaQSxFQUtZLHFCQUxaQSxFQU1ZLHFCQU5aQSxFQU9ZLHFCQVBaQSxFQVNZLGdCQUdaOEIsRUFDVSxVQURWQSxHQUVVLHdCQUZWQSxHQUdVLGlCQUhWQSxHQUlVLHFCQUpWQSxHQUtVLDJDQUxWQSxHQU1VLHVCQU5WQSxHQU9VLGdDQVBWQSxHQVFVLHlCQUdWc0MsR0FBYyxDQUNsQkMsTUFBUSxRQUNSQyxJQUFRLE9BUUpDLGNBQ0osU0FBQUEsRUFBWTdJLEVBQVN5QixHQUNuQnZDLEtBQUs0SixPQUFpQixLQUN0QjVKLEtBQUs2SixVQUFpQixLQUN0QjdKLEtBQUs4SixlQUFpQixLQUN0QjlKLEtBQUsrSixXQUFpQixFQUN0Qi9KLEtBQUtnSyxZQUFpQixFQUN0QmhLLEtBQUtpSyxhQUFpQixLQUN0QmpLLEtBQUtrSyxZQUFpQixFQUN0QmxLLEtBQUttSyxZQUFpQixFQUV0Qm5LLEtBQUtvSyxRQUFxQnBLLEtBQUtxSyxXQUFXOUgsR0FDMUN2QyxLQUFLc0YsU0FBcUJ4RSxFQUMxQmQsS0FBS3NLLG1CQUFxQnRLLEtBQUtzRixTQUFTbkUsY0FBYytGLElBQ3REbEgsS0FBS3VLLGdCQUFxQixpQkFBa0I1SixTQUFTOEMsaUJBQThDLEVBQTNCK0csVUFBVUMsZUFDbEZ6SyxLQUFLMEssY0FBcUJ6SSxRQUFRMEksT0FBT0MsY0FBZ0JELE9BQU9FLGdCQUVoRTdLLEtBQUs4SyxnREFlUEMsS0FBQSxXQUNPL0ssS0FBS2dLLFlBQ1JoSyxLQUFLZ0wsT0FBT3JDLE1BSWhCc0MsZ0JBQUEsWUFHT3RLLFNBQVN1SyxRQUNYaEwsRUFBRUYsS0FBS3NGLFVBQVVmLEdBQUcsYUFBc0QsV0FBdkNyRSxFQUFFRixLQUFLc0YsVUFBVS9ELElBQUksZUFDekR2QixLQUFLK0ssVUFJVEksS0FBQSxXQUNPbkwsS0FBS2dLLFlBQ1JoSyxLQUFLZ0wsT0FBT3JDLE1BSWhCSixNQUFBLFNBQU10RSxHQUNDQSxJQUNIakUsS0FBSytKLFdBQVksR0FHZi9KLEtBQUtzRixTQUFTbkUsY0FBYytGLE1BQzlCOUcsRUFBS0UscUJBQXFCTixLQUFLc0YsVUFDL0J0RixLQUFLb0wsT0FBTSxJQUdiQyxjQUFjckwsS0FBSzZKLFdBQ25CN0osS0FBSzZKLFVBQVksUUFHbkJ1QixNQUFBLFNBQU1uSCxHQUNDQSxJQUNIakUsS0FBSytKLFdBQVksR0FHZi9KLEtBQUs2SixZQUNQd0IsY0FBY3JMLEtBQUs2SixXQUNuQjdKLEtBQUs2SixVQUFZLE1BR2Y3SixLQUFLb0ssUUFBUWhDLFdBQWFwSSxLQUFLK0osWUFDakMvSixLQUFLNkosVUFBWXlCLGFBQ2QzSyxTQUFTNEssZ0JBQWtCdkwsS0FBS2lMLGdCQUFrQmpMLEtBQUsrSyxNQUFNUyxLQUFLeEwsTUFDbkVBLEtBQUtvSyxRQUFRaEMsY0FLbkJxRCxHQUFBLFNBQUdDLEdBQU8sSUFBQTNMLEVBQUFDLEtBQ1JBLEtBQUs4SixlQUFpQjlKLEtBQUtzRixTQUFTbkUsY0FBYytGLElBRWxELElBQU15RSxFQUFjM0wsS0FBSzRMLGNBQWM1TCxLQUFLOEosZ0JBRTVDLEtBQUk0QixFQUFRMUwsS0FBSzRKLE9BQU9pQyxPQUFTLEdBQUtILEVBQVEsR0FJOUMsR0FBSTFMLEtBQUtnSyxXQUNQOUosRUFBRUYsS0FBS3NGLFVBQVVuRixJQUFJNkUsRUFBTTZELEtBQU0sV0FBQSxPQUFNOUksRUFBSzBMLEdBQUdDLFNBRGpELENBS0EsR0FBSUMsSUFBZ0JELEVBR2xCLE9BRkExTCxLQUFLdUksYUFDTHZJLEtBQUtvTCxRQUlQLElBQU1VLEVBQW9CSCxFQUFSRCxFQUNkL0MsRUFDQUEsRUFFSjNJLEtBQUtnTCxPQUFPYyxFQUFXOUwsS0FBSzRKLE9BQU84QixRQUdyQzdGLFFBQUEsV0FDRTNGLEVBQUVGLEtBQUtzRixVQUFVeUcsSUFBSWpILEdBQ3JCNUUsRUFBRTRGLFdBQVc5RixLQUFLc0YsU0FBVVQsR0FFNUI3RSxLQUFLNEosT0FBcUIsS0FDMUI1SixLQUFLb0ssUUFBcUIsS0FDMUJwSyxLQUFLc0YsU0FBcUIsS0FDMUJ0RixLQUFLNkosVUFBcUIsS0FDMUI3SixLQUFLK0osVUFBcUIsS0FDMUIvSixLQUFLZ0ssV0FBcUIsS0FDMUJoSyxLQUFLOEosZUFBcUIsS0FDMUI5SixLQUFLc0ssbUJBQXFCLFFBSzVCRCxXQUFBLFNBQVc5SCxHQU1ULE9BTEFBLEVBQU15SixFQUFBLEdBQ0Q3RCxFQUNBNUYsR0FFTG5DLEVBQUtpQyxnQkFBZ0J1QyxFQUFNckMsRUFBUW1HLEdBQzVCbkcsS0FHVDBKLGFBQUEsV0FDRSxJQUFNQyxFQUFZekwsS0FBSzBMLElBQUluTSxLQUFLbUssYUFFaEMsS0FBSStCLEdBeE51QixJQXdOM0IsQ0FJQSxJQUFNSixFQUFZSSxFQUFZbE0sS0FBS21LLFlBR25CLEVBQVoyQixHQUNGOUwsS0FBS21MLE9BSUhXLEVBQVksR0FDZDlMLEtBQUsrSyxXQUlURCxtQkFBQSxXQUFxQixJQUFBc0IsRUFBQXBNLEtBQ2ZBLEtBQUtvSyxRQUFRL0IsVUFDZm5JLEVBQUVGLEtBQUtzRixVQUNKd0IsR0FBRzlCLEVBQU04RCxRQUFTLFNBQUM3RSxHQUFELE9BQVdtSSxFQUFLQyxTQUFTcEksS0FHckIsVUFBdkJqRSxLQUFLb0ssUUFBUTdCLE9BQ2ZySSxFQUFFRixLQUFLc0YsVUFDSndCLEdBQUc5QixFQUFNK0QsV0FBWSxTQUFDOUUsR0FBRCxPQUFXbUksRUFBSzdELE1BQU10RSxLQUMzQzZDLEdBQUc5QixFQUFNZ0UsV0FBWSxTQUFDL0UsR0FBRCxPQUFXbUksRUFBS2hCLE1BQU1uSCxLQUc1Q2pFLEtBQUtvSyxRQUFRM0IsT0FDZnpJLEtBQUtzTSw2QkFJVEEsd0JBQUEsV0FBMEIsSUFBQUMsRUFBQXZNLEtBQ3hCLEdBQUtBLEtBQUt1SyxnQkFBVixDQUlBLElBQU1pQyxFQUFRLFNBQUN2SSxHQUNUc0ksRUFBSzdCLGVBQWlCbEIsR0FBWXZGLEVBQU13SSxjQUFjQyxZQUFZbkosZUFDcEVnSixFQUFLckMsWUFBY2pHLEVBQU13SSxjQUFjRSxRQUM3QkosRUFBSzdCLGdCQUNmNkIsRUFBS3JDLFlBQWNqRyxFQUFNd0ksY0FBY0csUUFBUSxHQUFHRCxVQWFoREUsRUFBTSxTQUFDNUksR0FDUHNJLEVBQUs3QixlQUFpQmxCLEdBQVl2RixFQUFNd0ksY0FBY0MsWUFBWW5KLGlCQUNwRWdKLEVBQUtwQyxZQUFjbEcsRUFBTXdJLGNBQWNFLFFBQVVKLEVBQUtyQyxhQUd4RHFDLEVBQUtOLGVBQ3NCLFVBQXZCTSxFQUFLbkMsUUFBUTdCLFFBU2ZnRSxFQUFLaEUsUUFDRGdFLEVBQUt0QyxjQUNQNkMsYUFBYVAsRUFBS3RDLGNBRXBCc0MsRUFBS3RDLGFBQWU1SixXQUFXLFNBQUM0RCxHQUFELE9BQVdzSSxFQUFLbkIsTUFBTW5ILElBcFM5QixJQW9TK0RzSSxFQUFLbkMsUUFBUWhDLFlBSXZHbEksRUFBRUYsS0FBS3NGLFNBQVN5SCxpQkFBaUI3RixLQUFvQkosR0FBRzlCLEVBQU1zRSxXQUFZLFNBQUMwRCxHQUFELE9BQU9BLEVBQUVuRyxtQkFDL0U3RyxLQUFLMEssZUFDUHhLLEVBQUVGLEtBQUtzRixVQUFVd0IsR0FBRzlCLEVBQU1vRSxZQUFhLFNBQUNuRixHQUFELE9BQVd1SSxFQUFNdkksS0FDeEQvRCxFQUFFRixLQUFLc0YsVUFBVXdCLEdBQUc5QixFQUFNcUUsVUFBVyxTQUFDcEYsR0FBRCxPQUFXNEksRUFBSTVJLEtBRXBEakUsS0FBS3NGLFNBQVNxQyxVQUFVc0YsSUFBSTdILEtBRTVCbEYsRUFBRUYsS0FBS3NGLFVBQVV3QixHQUFHOUIsRUFBTWlFLFdBQVksU0FBQ2hGLEdBQUQsT0FBV3VJLEVBQU12SSxLQUN2RC9ELEVBQUVGLEtBQUtzRixVQUFVd0IsR0FBRzlCLEVBQU1rRSxVQUFXLFNBQUNqRixHQXhDM0IsSUFBQ0EsR0FBQUEsRUF3Q3lDQSxHQXRDM0N3SSxjQUFjRyxTQUFnRCxFQUFyQzNJLEVBQU13SSxjQUFjRyxRQUFRZixPQUM3RFUsRUFBS3BDLFlBQWMsRUFFbkJvQyxFQUFLcEMsWUFBY2xHLEVBQU13SSxjQUFjRyxRQUFRLEdBQUdELFFBQVVKLEVBQUtyQyxjQW9DbkVoSyxFQUFFRixLQUFLc0YsVUFBVXdCLEdBQUc5QixFQUFNbUUsU0FBVSxTQUFDbEYsR0FBRCxPQUFXNEksRUFBSTVJLFVBSXZEb0ksU0FBQSxTQUFTcEksR0FDUCxJQUFJLGtCQUFrQlosS0FBS1ksRUFBTUssT0FBTzRJLFNBSXhDLE9BQVFqSixFQUFNa0osT0FDWixLQTdUeUIsR0E4VHZCbEosRUFBTTRDLGlCQUNON0csS0FBS21MLE9BQ0wsTUFDRixLQWhVeUIsR0FpVXZCbEgsRUFBTTRDLGlCQUNON0csS0FBSytLLFdBTVhhLGNBQUEsU0FBYzlLLEdBSVosT0FIQWQsS0FBSzRKLE9BQVM5SSxHQUFXQSxFQUFRK0MsV0FDN0IsR0FBR3VKLE1BQU12SyxLQUFLL0IsRUFBUStDLFdBQVdrSixpQkFBaUI3RixLQUNsRCxHQUNHbEgsS0FBSzRKLE9BQU95RCxRQUFRdk0sTUFHN0J3TSxvQkFBQSxTQUFvQnhCLEVBQVdqRSxHQUM3QixJQUFNMEYsRUFBa0J6QixJQUFjbkQsRUFDaEM2RSxFQUFrQjFCLElBQWNuRCxFQUNoQ2dELEVBQWtCM0wsS0FBSzRMLGNBQWMvRCxHQUNyQzRGLEVBQWtCek4sS0FBSzRKLE9BQU9pQyxPQUFTLEVBSTdDLElBSHdCMkIsR0FBbUMsSUFBaEI3QixHQUNuQjRCLEdBQW1CNUIsSUFBZ0I4QixLQUVyQ3pOLEtBQUtvSyxRQUFRNUIsS0FDakMsT0FBT1gsRUFHVCxJQUNNNkYsR0FBYS9CLEdBRERHLElBQWNuRCxHQUFrQixFQUFJLElBQ1ozSSxLQUFLNEosT0FBT2lDLE9BRXRELE9BQXNCLElBQWY2QixFQUNIMU4sS0FBSzRKLE9BQU81SixLQUFLNEosT0FBT2lDLE9BQVMsR0FBSzdMLEtBQUs0SixPQUFPOEQsTUFHeERDLG1CQUFBLFNBQW1CQyxFQUFlQyxHQUNoQyxJQUFNQyxFQUFjOU4sS0FBSzRMLGNBQWNnQyxHQUNqQ0csRUFBWS9OLEtBQUs0TCxjQUFjNUwsS0FBS3NGLFNBQVNuRSxjQUFjK0YsS0FDM0Q4RyxFQUFhOU4sRUFBRThFLE1BQU1BLEVBQU00RCxNQUFPLENBQ3RDZ0YsY0FBQUEsRUFDQTlCLFVBQVcrQixFQUNYSSxLQUFNRixFQUNOdEMsR0FBSXFDLElBS04sT0FGQTVOLEVBQUVGLEtBQUtzRixVQUFVdkQsUUFBUWlNLEdBRWxCQSxLQUdURSwyQkFBQSxTQUEyQnBOLEdBQ3pCLEdBQUlkLEtBQUtzSyxtQkFBb0IsQ0FDM0IsSUFBTTZELEVBQWEsR0FBR2YsTUFBTXZLLEtBQUs3QyxLQUFLc0ssbUJBQW1CeUMsaUJBQWlCN0YsSUFDMUVoSCxFQUFFaU8sR0FDQ2pJLFlBQVlkLEdBRWYsSUFBTWdKLEVBQWdCcE8sS0FBS3NLLG1CQUFtQitELFNBQzVDck8sS0FBSzRMLGNBQWM5SyxJQUdqQnNOLEdBQ0ZsTyxFQUFFa08sR0FBZUUsU0FBU2xKLE9BS2hDNEYsT0FBQSxTQUFPYyxFQUFXaEwsR0FBUyxJQVFyQnlOLEVBQ0FDLEVBQ0FYLEVBVnFCWSxFQUFBek8sS0FDbkI2SCxFQUFnQjdILEtBQUtzRixTQUFTbkUsY0FBYytGLElBQzVDd0gsRUFBcUIxTyxLQUFLNEwsY0FBYy9ELEdBQ3hDOEcsRUFBZ0I3TixHQUFXK0csR0FDL0I3SCxLQUFLc04sb0JBQW9CeEIsRUFBV2pFLEdBQ2hDK0csRUFBbUI1TyxLQUFLNEwsY0FBYytDLEdBQ3RDRSxFQUFZNU0sUUFBUWpDLEtBQUs2SixXQWdCL0IsR0FQRWdFLEVBSEUvQixJQUFjbkQsR0FDaEI0RixFQUF1Qm5KLEVBQ3ZCb0osRUFBaUJwSixFQUNJdUQsSUFFckI0RixFQUF1Qm5KLEVBQ3ZCb0osRUFBaUJwSixFQUNJdUQsR0FHbkJnRyxHQUFlek8sRUFBRXlPLEdBQWF4SSxTQUFTZixHQUN6Q3BGLEtBQUtnSyxZQUFhLE9BS3BCLElBRG1CaEssS0FBSzJOLG1CQUFtQmdCLEVBQWFkLEdBQ3pDbEksc0JBSVZrQyxHQUFrQjhHLEVBQXZCLENBS0EzTyxLQUFLZ0ssWUFBYSxFQUVkNkUsR0FDRjdPLEtBQUt1SSxRQUdQdkksS0FBS2tPLDJCQUEyQlMsR0FFaEMsSUFBTUcsRUFBWTVPLEVBQUU4RSxNQUFNQSxFQUFNNkQsS0FBTSxDQUNwQytFLGNBQWVlLEVBQ2Y3QyxVQUFXK0IsRUFDWEksS0FBTVMsRUFDTmpELEdBQUltRCxJQUdOLEdBQUkxTyxFQUFFRixLQUFLc0YsVUFBVWEsU0FBU2YsR0FBa0IsQ0FDOUNsRixFQUFFeU8sR0FBYUwsU0FBU0UsR0FFeEJwTyxFQUFLeUIsT0FBTzhNLEdBRVp6TyxFQUFFMkgsR0FBZXlHLFNBQVNDLEdBQzFCck8sRUFBRXlPLEdBQWFMLFNBQVNDLEdBRXhCLElBQU1RLEVBQXNCQyxTQUFTTCxFQUFZM04sYUFBYSxpQkFBa0IsSUFHOUVoQixLQUFLb0ssUUFBUWhDLFNBRlgyRyxHQUNGL08sS0FBS29LLFFBQVE2RSxnQkFBa0JqUCxLQUFLb0ssUUFBUTZFLGlCQUFtQmpQLEtBQUtvSyxRQUFRaEMsU0FDcEQyRyxHQUVBL08sS0FBS29LLFFBQVE2RSxpQkFBbUJqUCxLQUFLb0ssUUFBUWhDLFNBR3ZFLElBQU05RyxFQUFxQmxCLEVBQUtpQixpQ0FBaUN3RyxHQUVqRTNILEVBQUUySCxHQUNDMUgsSUFBSUMsRUFBS1IsZUFBZ0IsV0FDeEJNLEVBQUV5TyxHQUNDekksWUFBZXFJLEVBRGxCLElBQzBDQyxHQUN2Q0YsU0FBU2xKLEdBRVpsRixFQUFFMkgsR0FBZTNCLFlBQWVkLEVBQWhDLElBQW9Eb0osRUFBcEQsSUFBc0VELEdBRXRFRSxFQUFLekUsWQ=="
},
{
"key": "bootstrap.min.js.map?4?1?0",
"type": "binary",
"value": "base64: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"
},
{
"key": "bootstrap.min.js.map?4?2?0",
"type": "binary",
"value": "base64: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"
},
{
"key": "bootstrap.min.js.map?4?3?0",
"type": "binary",
"value": "base64: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QixHQUZBLElBTW9DQSxFQUFRLElBSjVDLElBSStEQSxFQUFRLElBQW1CQSxFQUFRLEdBSGxHLEdBQ0EsR0FFbUhBLEVBQVEsR0FDMUksTUFBTSxJQUFJN2lCLE1BQU0sK0VBYnBCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwICh2NC4zLjEpOiB1dGlsLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgJCBmcm9tICdqcXVlcnknXG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBQcml2YXRlIFRyYW5zaXRpb25FbmQgSGVscGVyc1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY29uc3QgVFJBTlNJVElPTl9FTkQgPSAndHJhbnNpdGlvbmVuZCdcbmNvbnN0IE1BWF9VSUQgPSAxMDAwMDAwXG5jb25zdCBNSUxMSVNFQ09ORFNfTVVMVElQTElFUiA9IDEwMDBcblxuLy8gU2hvdXRvdXQgQW5ndXNDcm9sbCAoaHR0cHM6Ly9nb28uZ2wvcHh3UUdwKVxuZnVuY3Rpb24gdG9UeXBlKG9iaikge1xuICByZXR1cm4ge30udG9TdHJpbmcuY2FsbChvYmopLm1hdGNoKC9cXHMoW2Etel0rKS9pKVsxXS50b0xvd2VyQ2FzZSgpXG59XG5cbmZ1bmN0aW9uIGdldFNwZWNpYWxUcmFuc2l0aW9uRW5kRXZlbnQoKSB7XG4gIHJldHVybiB7XG4gICAgYmluZFR5cGU6IFRSQU5TSVRJT05fRU5ELFxuICAgIGRlbGVnYXRlVHlwZTogVFJBTlNJVElPTl9FTkQsXG4gICAgaGFuZGxlKGV2ZW50KSB7XG4gICAgICBpZiAoJChldmVudC50YXJnZXQpLmlzKHRoaXMpKSB7XG4gICAgICAgIHJldHVybiBldmVudC5oYW5kbGVPYmouaGFuZGxlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zXG4gICAgICB9XG4gICAgICByZXR1cm4gdW5kZWZpbmVkIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZpbmVkXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHRyYW5zaXRpb25FbmRFbXVsYXRvcihkdXJhdGlvbikge1xuICBsZXQgY2FsbGVkID0gZmFsc2VcblxuICAkKHRoaXMpLm9uZShVdGlsLlRSQU5TSVRJT05fRU5ELCAoKSA9PiB7XG4gICAgY2FsbGVkID0gdHJ1ZVxuICB9KVxuXG4gIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIGlmICghY2FsbGVkKSB7XG4gICAgICBVdGlsLnRyaWdnZXJUcmFuc2l0aW9uRW5kKHRoaXMpXG4gICAgfVxuICB9LCBkdXJhdGlvbilcblxuICByZXR1cm4gdGhpc1xufVxuXG5mdW5jdGlvbiBzZXRUcmFuc2l0aW9uRW5kU3VwcG9ydCgpIHtcbiAgJC5mbi5lbXVsYXRlVHJhbnNpdGlvbkVuZCA9IHRyYW5zaXRpb25FbmRFbXVsYXRvclxuICAkLmV2ZW50LnNwZWNpYWxbVXRpbC5UUkFOU0lUSU9OX0VORF0gPSBnZXRTcGVjaWFsVHJhbnNpdGlvbkVuZEV2ZW50KClcbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogUHVibGljIFV0aWwgQXBpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNvbnN0IFV0aWwgPSB7XG5cbiAgVFJBTlNJVElPTl9FTkQ6ICdic1RyYW5zaXRpb25FbmQnLFxuXG4gIGdldFVJRChwcmVmaXgpIHtcbiAgICBkbyB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxuICAgICAgcHJlZml4ICs9IH5+KE1hdGgucmFuZG9tKCkgKiBNQVhfVUlEKSAvLyBcIn5+XCIgYWN0cyBsaWtlIGEgZmFzdGVyIE1hdGguZmxvb3IoKSBoZXJlXG4gICAgfSB3aGlsZSAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHJlZml4KSlcbiAgICByZXR1cm4gcHJlZml4XG4gIH0sXG5cbiAgZ2V0U2VsZWN0b3JGcm9tRWxlbWVudChlbGVtZW50KSB7XG4gICAgbGV0IHNlbGVjdG9yID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdGFyZ2V0JylcblxuICAgIGlmICghc2VsZWN0b3IgfHwgc2VsZWN0b3IgPT09ICcjJykge1xuICAgICAgY29uc3QgaHJlZkF0dHIgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnaHJlZicpXG4gICAgICBzZWxlY3RvciA9IGhyZWZBdHRyICYmIGhyZWZBdHRyICE9PSAnIycgPyBocmVmQXR0ci50cmltKCkgOiAnJ1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3RvcikgPyBzZWxlY3RvciA6IG51bGxcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KGVsZW1lbnQpIHtcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybiAwXG4gICAgfVxuXG4gICAgLy8gR2V0IHRyYW5zaXRpb24tZHVyYXRpb24gb2YgdGhlIGVsZW1lbnRcbiAgICBsZXQgdHJhbnNpdGlvbkR1cmF0aW9uID0gJChlbGVtZW50KS5jc3MoJ3RyYW5zaXRpb24tZHVyYXRpb24nKVxuICAgIGxldCB0cmFuc2l0aW9uRGVsYXkgPSAkKGVsZW1lbnQpLmNzcygndHJhbnNpdGlvbi1kZWxheScpXG5cbiAgICBjb25zdCBmbG9hdFRyYW5zaXRpb25EdXJhdGlvbiA9IHBhcnNlRmxvYXQodHJhbnNpdGlvbkR1cmF0aW9uKVxuICAgIGNvbnN0IGZsb2F0VHJhbnNpdGlvbkRlbGF5ID0gcGFyc2VGbG9hdCh0cmFuc2l0aW9uRGVsYXkpXG5cbiAgICAvLyBSZXR1cm4gMCBpZiBlbGVtZW50IG9yIHRyYW5zaXRpb24gZHVyYXRpb24gaXMgbm90IGZvdW5kXG4gICAgaWYgKCFmbG9hdFRyYW5zaXRpb25EdXJhdGlvbiAmJiAhZmxvYXRUcmFuc2l0aW9uRGVsYXkpIHtcbiAgICAgIHJldHVybiAwXG4gICAgfVxuXG4gICAgLy8gSWYgbXVsdGlwbGUgZHVyYXRpb25zIGFyZSBkZWZpbmVkLCB0YWtlIHRoZSBmaXJzdFxuICAgIHRyYW5zaXRpb25EdXJhdGlvbiA9IHRyYW5zaXRpb25EdXJhdGlvbi5zcGxpdCgnLCcpWzBdXG4gICAgdHJhbnNpdGlvbkRlbGF5ID0gdHJhbnNpdGlvbkRlbGF5LnNwbGl0KCcsJylbMF1cblxuICAgIHJldHVybiAocGFyc2VGbG9hdCh0cmFuc2l0aW9uRHVyYXRpb24pICsgcGFyc2VGbG9hdCh0cmFuc2l0aW9uRGVsYXkpKSAqIE1JTExJU0VDT05EU19NVUxUSVBMSUVSXG4gIH0sXG5cbiAgcmVmbG93KGVsZW1lbnQpIHtcbiAgICByZXR1cm4gZWxlbWVudC5vZmZzZXRIZWlnaHRcbiAgfSxcblxuICB0cmlnZ2VyVHJhbnNpdGlvbkVuZChlbGVtZW50KSB7XG4gICAgJChlbGVtZW50KS50cmlnZ2VyKFRSQU5TSVRJT05fRU5EKVxuICB9LFxuXG4gIC8vIFRPRE86IFJlbW92ZSBpbiB2NVxuICBzdXBwb3J0c1RyYW5zaXRpb25FbmQoKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4oVFJBTlNJVElPTl9FTkQpXG4gIH0sXG5cbiAgaXNFbGVtZW50KG9iaikge1xuICAgIHJldHVybiAob2JqWzBdIHx8IG9iaikubm9kZVR5cGVcbiAgfSxcblxuICB0eXBlQ2hlY2tDb25maWcoY29tcG9uZW50TmFtZSwgY29uZmlnLCBjb25maWdUeXBlcykge1xuICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gY29uZmlnVHlwZXMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY29uZmlnVHlwZXMsIHByb3BlcnR5KSkge1xuICAgICAgICBjb25zdCBleHBlY3RlZFR5cGVzID0gY29uZmlnVHlwZXNbcHJvcGVydHldXG4gICAgICAgIGNvbnN0IHZhbHVlICAgICAgICAgPSBjb25maWdbcHJvcGVydHldXG4gICAgICAgIGNvbnN0IHZhbHVlVHlwZSAgICAgPSB2YWx1ZSAmJiBVdGlsLmlzRWxlbWVudCh2YWx1ZSlcbiAgICAgICAgICA/ICdlbGVtZW50JyA6IHRvVHlwZSh2YWx1ZSlcblxuICAgICAgICBpZiAoIW5ldyBSZWdFeHAoZXhwZWN0ZWRUeXBlcykudGVzdCh2YWx1ZVR5cGUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYCR7Y29tcG9uZW50TmFtZS50b1VwcGVyQ2FzZSgpfTogYCArXG4gICAgICAgICAgICBgT3B0aW9uIFwiJHtwcm9wZXJ0eX1cIiBwcm92aWRlZCB0eXBlIFwiJHt2YWx1ZVR5cGV9XCIgYCArXG4gICAgICAgICAgICBgYnV0IGV4cGVjdGVkIHR5cGUgXCIke2V4cGVjdGVkVHlwZXN9XCIuYClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBmaW5kU2hhZG93Um9vdChlbGVtZW50KSB7XG4gICAgaWYgKCFkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYXR0YWNoU2hhZG93KSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIC8vIENhbiBmaW5kIHRoZSBzaGFkb3cgcm9vdCBvdGhlcndpc2UgaXQnbGwgcmV0dXJuIHRoZSBkb2N1bWVudFxuICAgIGlmICh0eXBlb2YgZWxlbWVudC5nZXRSb290Tm9kZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc3Qgcm9vdCA9IGVsZW1lbnQuZ2V0Um9vdE5vZGUoKVxuICAgICAgcmV0dXJuIHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IG51bGxcbiAgICB9XG5cbiAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpIHtcbiAgICAgIHJldHVybiBlbGVtZW50XG4gICAgfVxuXG4gICAgLy8gd2hlbiB3ZSBkb24ndCBmaW5kIGEgc2hhZG93IHJvb3RcbiAgICBpZiAoIWVsZW1lbnQucGFyZW50Tm9kZSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICByZXR1cm4gVXRpbC5maW5kU2hhZG93Um9vdChlbGVtZW50LnBhcmVudE5vZGUpXG4gIH1cbn1cblxuc2V0VHJhbnNpdGlvbkVuZFN1cHBvcnQoKVxuXG5leHBvcnQgZGVmYXVsdCBVdGlsXG4iLCIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgKHY0LjMuMSk6IGFsZXJ0LmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgJCBmcm9tICdqcXVlcnknXG5pbXBvcnQgVXRpbCBmcm9tICcuL3V0aWwnXG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDb25zdGFudHNcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNvbnN0IE5BTUUgICAgICAgICAgICAgICAgPSAnYWxlcnQnXG5jb25zdCBWRVJTSU9OICAgICAgICAgICAgID0gJzQuMy4xJ1xuY29uc3QgREFUQV9LRVkgICAgICAgICAgICA9ICdicy5hbGVydCdcbmNvbnN0IEVWRU5UX0tFWSAgICAgICAgICAgPSBgLiR7REFUQV9LRVl9YFxuY29uc3QgREFUQV9BUElfS0VZICAgICAgICA9ICcuZGF0YS1hcGknXG5jb25zdCBKUVVFUllfTk9fQ09ORkxJQ1QgID0gJC5mbltOQU1FXVxuXG5jb25zdCBTZWxlY3RvciA9IHtcbiAgRElTTUlTUyA6ICdbZGF0YS1kaXNtaXNzPVwiYWxlcnRcIl0nXG59XG5cbmNvbnN0IEV2ZW50ID0ge1xuICBDTE9TRSAgICAgICAgICA6IGBjbG9zZSR7RVZFTlRfS0VZfWAsXG4gIENMT1NFRCAgICAgICAgIDogYGNsb3NlZCR7RVZFTlRfS0VZfWAsXG4gIENMSUNLX0RBVEFfQVBJIDogYGNsaWNrJHtFVkVOVF9LRVl9JHtEQVRBX0FQSV9LRVl9YFxufVxuXG5jb25zdCBDbGFzc05hbWUgPSB7XG4gIEFMRVJUIDogJ2FsZXJ0JyxcbiAgRkFERSAgOiAnZmFkZScsXG4gIFNIT1cgIDogJ3Nob3cnXG59XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDbGFzcyBEZWZpbml0aW9uXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jbGFzcyBBbGVydCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQpIHtcbiAgICB0aGlzLl9lbGVtZW50ID0gZWxlbWVudFxuICB9XG5cbiAgLy8gR2V0dGVyc1xuXG4gIHN0YXRpYyBnZXQgVkVSU0lPTigpIHtcbiAgICByZXR1cm4gVkVSU0lPTlxuICB9XG5cbiAgLy8gUHVibGljXG5cbiAgY2xvc2UoZWxlbWVudCkge1xuICAgIGxldCByb290RWxlbWVudCA9IHRoaXMuX2VsZW1lbnRcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgcm9vdEVsZW1lbnQgPSB0aGlzLl9nZXRSb290RWxlbWVudChlbGVtZW50KVxuICAgIH1cblxuICAgIGNvbnN0IGN1c3RvbUV2ZW50ID0gdGhpcy5fdHJpZ2dlckNsb3NlRXZlbnQocm9vdEVsZW1lbnQpXG5cbiAgICBpZiAoY3VzdG9tRXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX3JlbW92ZUVsZW1lbnQocm9vdEVsZW1lbnQpXG4gIH1cblxuICBkaXNwb3NlKCkge1xuICAgICQucmVtb3ZlRGF0YSh0aGlzLl9lbGVtZW50LCBEQVRBX0tFWSlcbiAgICB0aGlzLl9lbGVtZW50ID0gbnVsbFxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuXG4gIF9nZXRSb290RWxlbWVudChlbGVtZW50KSB7XG4gICAgY29uc3Qgc2VsZWN0b3IgPSBVdGlsLmdldFNlbGVjdG9yRnJvbUVsZW1lbnQoZWxlbWVudClcbiAgICBsZXQgcGFyZW50ICAgICA9IGZhbHNlXG5cbiAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgIHBhcmVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpXG4gICAgfVxuXG4gICAgaWYgKCFwYXJlbnQpIHtcbiAgICAgIHBhcmVudCA9ICQoZWxlbWVudCkuY2xvc2VzdChgLiR7Q2xhc3NOYW1lLkFMRVJUfWApWzBdXG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmVudFxuICB9XG5cbiAgX3RyaWdnZXJDbG9zZUV2ZW50KGVsZW1lbnQpIHtcbiAgICBjb25zdCBjbG9zZUV2ZW50ID0gJC5FdmVudChFdmVudC5DTE9TRSlcblxuICAgICQoZWxlbWVudCkudHJpZ2dlcihjbG9zZUV2ZW50KVxuICAgIHJldHVybiBjbG9zZUV2ZW50XG4gIH1cblxuICBfcmVtb3ZlRWxlbWVudChlbGVtZW50KSB7XG4gICAgJChlbGVtZW50KS5yZW1vdmVDbGFzcyhDbGFzc05hbWUuU0hPVylcblxuICAgIGlmICghJChlbGVtZW50KS5oYXNDbGFzcyhDbGFzc05hbWUuRkFERSkpIHtcbiAgICAgIHRoaXMuX2Rlc3Ryb3lFbGVtZW50KGVsZW1lbnQpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCB0cmFuc2l0aW9uRHVyYXRpb24gPSBVdGlsLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KGVsZW1lbnQpXG5cbiAgICAkKGVsZW1lbnQpXG4gICAgICAub25lKFV0aWwuVFJBTlNJVElPTl9FTkQsIChldmVudCkgPT4gdGhpcy5fZGVzdHJveUVsZW1lbnQoZWxlbWVudCwgZXZlbnQpKVxuICAgICAgLmVtdWxhdGVUcmFuc2l0aW9uRW5kKHRyYW5zaXRpb25EdXJhdGlvbilcbiAgfVxuXG4gIF9kZXN0cm95RWxlbWVudChlbGVtZW50KSB7XG4gICAgJChlbGVtZW50KVxuICAgICAgLmRldGFjaCgpXG4gICAgICAudHJpZ2dlcihFdmVudC5DTE9TRUQpXG4gICAgICAucmVtb3ZlKClcbiAgfVxuXG4gIC8vIFN0YXRpY1xuXG4gIHN0YXRpYyBfalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgJGVsZW1lbnQgPSAkKHRoaXMpXG4gICAgICBsZXQgZGF0YSAgICAgICA9ICRlbGVtZW50LmRhdGEoREFUQV9LRVkpXG5cbiAgICAgIGlmICghZGF0YSkge1xuICAgICAgICBkYXRhID0gbmV3IEFsZXJ0KHRoaXMpXG4gICAgICAgICRlbGVtZW50LmRhdGEoREFUQV9LRVksIGRhdGEpXG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcgPT09ICdjbG9zZScpIHtcbiAgICAgICAgZGF0YVtjb25maWddKHRoaXMpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHN0YXRpYyBfaGFuZGxlRGlzbWlzcyhhbGVydEluc3RhbmNlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgIH1cblxuICAgICAgYWxlcnRJbnN0YW5jZS5jbG9zZSh0aGlzKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogRGF0YSBBcGkgaW1wbGVtZW50YXRpb25cbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbiQoZG9jdW1lbnQpLm9uKFxuICBFdmVudC5DTElDS19EQVRBX0FQSSxcbiAgU2VsZWN0b3IuRElTTUlTUyxcbiAgQWxlcnQuX2hhbmRsZURpc21pc3MobmV3IEFsZXJ0KCkpXG4pXG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBqUXVlcnlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbiQuZm5bTkFNRV0gICAgICAgICAgICAgPSBBbGVydC5falF1ZXJ5SW50ZXJmYWNlXG4kLmZuW05BTUVdLkNvbnN0cnVjdG9yID0gQWxlcnRcbiQuZm5bTkFNRV0ubm9Db25mbGljdCAgPSAoKSA9PiB7XG4gICQuZm5bTkFNRV0gPSBKUVVFUllfTk9fQ09ORkxJQ1RcbiAgcmV0dXJuIEFsZXJ0Ll9qUXVlcnlJbnRlcmZhY2Vcbn1cblxuZXhwb3J0IGRlZmF1bHQgQWxlcnRcbiIsIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjQuMy4xKTogYnV0dG9uLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgJCBmcm9tICdqcXVlcnknXG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDb25zdGFudHNcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNvbnN0IE5BTUUgICAgICAgICAgICAgICAgPSAnYnV0dG9uJ1xuY29uc3QgVkVSU0lPTiAgICAgICAgICAgICA9ICc0LjMuMSdcbmNvbnN0IERBVEFfS0VZICAgICAgICAgICAgPSAnYnMuYnV0dG9uJ1xuY29uc3QgRVZFTlRfS0VZICAgICAgICAgICA9IGAuJHtEQVRBX0tFWX1gXG5jb25zdCBEQVRBX0FQSV9LRVkgICAgICAgID0gJy5kYXRhLWFwaSdcbmNvbnN0IEpRVUVSWV9OT19DT05GTElDVCAgPSAkLmZuW05BTUVdXG5cbmNvbnN0IENsYXNzTmFtZSA9IHtcbiAgQUNUSVZFIDogJ2FjdGl2ZScsXG4gIEJVVFRPTiA6ICdidG4nLFxuICBGT0NVUyAgOiAnZm9jdXMnXG59XG5cbmNvbnN0IFNlbGVjdG9yID0ge1xuICBEQVRBX1RPR0dMRV9DQVJST1QgOiAnW2RhdGEtdG9nZ2xlXj1cImJ1dHRvblwiXScsXG4gIERBVEFfVE9HR0xFICAgICAgICA6ICdbZGF0YS10b2dnbGU9XCJidXR0b25zXCJdJyxcbiAgSU5QVVQgICAgICAgICAgICAgIDogJ2lucHV0Om5vdChbdHlwZT1cImhpZGRlblwiXSknLFxuICBBQ1RJVkUgICAgICAgICAgICAgOiAnLmFjdGl2ZScsXG4gIEJVVFRPTiAgICAgICAgICAgICA6ICcuYnRuJ1xufVxuXG5jb25zdCBFdmVudCA9IHtcbiAgQ0xJQ0tfREFUQV9BUEkgICAgICA6IGBjbGljayR7RVZFTlRfS0VZfSR7REFUQV9BUElfS0VZfWAsXG4gIEZPQ1VTX0JMVVJfREFUQV9BUEkgOiBgZm9jdXMke0VWRU5UX0tFWX0ke0RBVEFfQVBJX0tFWX0gYCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGBibHVyJHtFVkVOVF9LRVl9JHtEQVRBX0FQSV9LRVl9YFxufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQ2xhc3MgRGVmaW5pdGlvblxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY2xhc3MgQnV0dG9uIHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCkge1xuICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50XG4gIH1cblxuICAvLyBHZXR0ZXJzXG5cbiAgc3RhdGljIGdldCBWRVJTSU9OKCkge1xuICAgIHJldHVybiBWRVJTSU9OXG4gIH1cblxuICAvLyBQdWJsaWNcblxuICB0b2dnbGUoKSB7XG4gICAgbGV0IHRyaWdnZXJDaGFuZ2VFdmVudCA9IHRydWVcbiAgICBsZXQgYWRkQXJpYVByZXNzZWQgPSB0cnVlXG4gICAgY29uc3Qgcm9vdEVsZW1lbnQgPSAkKHRoaXMuX2VsZW1lbnQpLmNsb3Nlc3QoXG4gICAgICBTZWxlY3Rvci5EQVRBX1RPR0dMRVxuICAgIClbMF1cblxuICAgIGlmIChyb290RWxlbWVudCkge1xuICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoU2VsZWN0b3IuSU5QVVQpXG5cbiAgICAgIGlmIChpbnB1dCkge1xuICAgICAgICBpZiAoaW5wdXQudHlwZSA9PT0gJ3JhZGlvJykge1xuICAgICAgICAgIGlmIChpbnB1dC5jaGVja2VkICYmXG4gICAgICAgICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDbGFzc05hbWUuQUNUSVZFKSkge1xuICAgICAgICAgICAgdHJpZ2dlckNoYW5nZUV2ZW50ID0gZmFsc2VcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgYWN0aXZlRWxlbWVudCA9IHJvb3RFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoU2VsZWN0b3IuQUNUSVZFKVxuXG4gICAgICAgICAgICBpZiAoYWN0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgICAkKGFjdGl2ZUVsZW1lbnQpLnJlbW92ZUNsYXNzKENsYXNzTmFtZS5BQ1RJVkUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRyaWdnZXJDaGFuZ2VFdmVudCkge1xuICAgICAgICAgIGlmIChpbnB1dC5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykgfHxcbiAgICAgICAgICAgIHJvb3RFbGVtZW50Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSB8fFxuICAgICAgICAgICAgaW5wdXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdkaXNhYmxlZCcpIHx8XG4gICAgICAgICAgICByb290RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2Rpc2FibGVkJykpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICBpbnB1dC5jaGVja2VkID0gIXRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENsYXNzTmFtZS5BQ1RJVkUpXG4gICAgICAgICAgJChpbnB1dCkudHJpZ2dlcignY2hhbmdlJylcbiAgICAgICAgfVxuXG4gICAgICAgIGlucHV0LmZvY3VzKClcbiAgICAgICAgYWRkQXJpYVByZXNzZWQgPSBmYWxzZVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhZGRBcmlhUHJlc3NlZCkge1xuICAgICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtcHJlc3NlZCcsXG4gICAgICAgICF0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDbGFzc05hbWUuQUNUSVZFKSlcbiAgICB9XG5cbiAgICBpZiAodHJpZ2dlckNoYW5nZUV2ZW50KSB7XG4gICAgICAkKHRoaXMuX2VsZW1lbnQpLnRvZ2dsZUNsYXNzKENsYXNzTmFtZS5BQ1RJVkUpXG4gICAgfVxuICB9XG5cbiAgZGlzcG9zZSgpIHtcbiAgICAkLnJlbW92ZURhdGEodGhpcy5fZWxlbWVudCwgREFUQV9LRVkpXG4gICAgdGhpcy5fZWxlbWVudCA9IG51bGxcbiAgfVxuXG4gIC8vIFN0YXRpY1xuXG4gIHN0YXRpYyBfalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IGRhdGEgPSAkKHRoaXMpLmRhdGEoREFUQV9LRVkpXG5cbiAgICAgIGlmICghZGF0YSkge1xuICAgICAgICBkYXRhID0gbmV3IEJ1dHRvbih0aGlzKVxuICAgICAgICAkKHRoaXMpLmRhdGEoREFUQV9LRVksIGRhdGEpXG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcgPT09ICd0b2dnbGUnKSB7XG4gICAgICAgIGRhdGFbY29uZmlnXSgpXG4gICAgICB9XG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogRGF0YSBBcGkgaW1wbGVtZW50YXRpb25cbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbiQoZG9jdW1lbnQpXG4gIC5vbihFdmVudC5DTElDS19EQVRBX0FQSSwgU2VsZWN0b3IuREFUQV9UT0dHTEVfQ0FSUk9ULCAoZXZlbnQpID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG5cbiAgICBsZXQgYnV0dG9uID0gZXZlbnQudGFyZ2V0XG5cbiAgICBpZiAoISQoYnV0dG9uKS5oYXNDbGFzcyhDbGFzc05hbWUuQlVUVE9OKSkge1xuICAgICAgYnV0dG9uID0gJChidXR0b24pLmNsb3Nlc3QoU2VsZWN0b3IuQlVUVE9OKVxuICAgIH1cblxuICAgIEJ1dHRvbi5falF1ZXJ5SW50ZXJmYWNlLmNhbGwoJChidXR0b24pLCAndG9nZ2xlJylcbiAgfSlcbiAgLm9uKEV2ZW50LkZPQ1VTX0JMVVJfREFUQV9BUEksIFNlbGVjdG9yLkRBVEFfVE9HR0xFX0NBUlJPVCwgKGV2ZW50KSA9PiB7XG4gICAgY29uc3QgYnV0dG9uID0gJChldmVudC50YXJnZXQpLmNsb3Nlc3QoU2VsZWN0b3IuQlVUVE9OKVswXVxuICAgICQoYnV0dG9uKS50b2dnbGVDbGFzcyhDbGFzc05hbWUuRk9DVVMsIC9eZm9jdXMoaW4pPyQvLnRlc3QoZXZlbnQudHlwZSkpXG4gIH0pXG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ=="
},
{
"key": "bootstrap.min.js.map?4?4?0",
"type": "binary",
"value": "base64:LS0tLS0tLS0tLS1cbiAqIGpRdWVyeVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuJC5mbltOQU1FXSA9IEJ1dHRvbi5falF1ZXJ5SW50ZXJmYWNlXG4kLmZuW05BTUVdLkNvbnN0cnVjdG9yID0gQnV0dG9uXG4kLmZuW05BTUVdLm5vQ29uZmxpY3QgPSAoKSA9PiB7XG4gICQuZm5bTkFNRV0gPSBKUVVFUllfTk9fQ09ORkxJQ1RcbiAgcmV0dXJuIEJ1dHRvbi5falF1ZXJ5SW50ZXJmYWNlXG59XG5cbmV4cG9ydCBkZWZhdWx0IEJ1dHRvblxuIiwiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwICh2NC4zLjEpOiBjYXJvdXNlbC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYXN0ZXIvTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0ICQgZnJvbSAnanF1ZXJ5J1xuaW1wb3J0IFV0aWwgZnJvbSAnLi91dGlsJ1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQ29uc3RhbnRzXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jb25zdCBOQU1FICAgICAgICAgICAgICAgICAgID0gJ2Nhcm91c2VsJ1xuY29uc3QgVkVSU0lPTiAgICAgICAgICAgICAgICA9ICc0LjMuMSdcbmNvbnN0IERBVEFfS0VZICAgICAgICAgICAgICAgPSAnYnMuY2Fyb3VzZWwnXG5jb25zdCBFVkVOVF9LRVkgICAgICAgICAgICAgID0gYC4ke0RBVEFfS0VZfWBcbmNvbnN0IERBVEFfQVBJX0tFWSAgICAgICAgICAgPSAnLmRhdGEtYXBpJ1xuY29uc3QgSlFVRVJZX05PX0NPTkZMSUNUICAgICA9ICQuZm5bTkFNRV1cbmNvbnN0IEFSUk9XX0xFRlRfS0VZQ09ERSAgICAgPSAzNyAvLyBLZXlib2FyZEV2ZW50LndoaWNoIHZhbHVlIGZvciBsZWZ0IGFycm93IGtleVxuY29uc3QgQVJST1dfUklHSFRfS0VZQ09ERSAgICA9IDM5IC8vIEtleWJvYXJkRXZlbnQud2hpY2ggdmFsdWUgZm9yIHJpZ2h0IGFycm93IGtleVxuY29uc3QgVE9VQ0hFVkVOVF9DT01QQVRfV0FJVCA9IDUwMCAvLyBUaW1lIGZvciBtb3VzZSBjb21wYXQgZXZlbnRzIHRvIGZpcmUgYWZ0ZXIgdG91Y2hcbmNvbnN0IFNXSVBFX1RIUkVTSE9MRCAgICAgICAgPSA0MFxuXG5jb25zdCBEZWZhdWx0ID0ge1xuICBpbnRlcnZhbCA6IDUwMDAsXG4gIGtleWJvYXJkIDogdHJ1ZSxcbiAgc2xpZGUgICAgOiBmYWxzZSxcbiAgcGF1c2UgICAgOiAnaG92ZXInLFxuICB3cmFwICAgICA6IHRydWUsXG4gIHRvdWNoICAgIDogdHJ1ZVxufVxuXG5jb25zdCBEZWZhdWx0VHlwZSA9IHtcbiAgaW50ZXJ2YWwgOiAnKG51bWJlcnxib29sZWFuKScsXG4gIGtleWJvYXJkIDogJ2Jvb2xlYW4nLFxuICBzbGlkZSAgICA6ICcoYm9vbGVhbnxzdHJpbmcpJyxcbiAgcGF1c2UgICAgOiAnKHN0cmluZ3xib29sZWFuKScsXG4gIHdyYXAgICAgIDogJ2Jvb2xlYW4nLFxuICB0b3VjaCAgICA6ICdib29sZWFuJ1xufVxuXG5jb25zdCBEaXJlY3Rpb24gPSB7XG4gIE5FWFQgICAgIDogJ25leHQnLFxuICBQUkVWICAgICA6ICdwcmV2JyxcbiAgTEVGVCAgICAgOiAnbGVmdCcsXG4gIFJJR0hUICAgIDogJ3JpZ2h0J1xufVxuXG5jb25zdCBFdmVudCA9IHtcbiAgU0xJREUgICAgICAgICAgOiBgc2xpZGUke0VWRU5UX0tFWX1gLFxuICBTTElEICAgICAgICAgICA6IGBzbGlkJHtFVkVOVF9LRVl9YCxcbiAgS0VZRE9XTiAgICAgICAgOiBga2V5ZG93biR7RVZFTlRfS0VZfWAsXG4gIE1PVVNFRU5URVIgICAgIDogYG1vdXNlZW50ZXIke0VWRU5UX0tFWX1gLFxuICBNT1VTRUxFQVZFICAgICA6IGBtb3VzZWxlYXZlJHtFVkVOVF9LRVl9YCxcbiAgVE9VQ0hTVEFSVCAgICAgOiBgdG91Y2hzdGFydCR7RVZFTlRfS0VZfWAsXG4gIFRPVUNITU9WRSAgICAgIDogYHRvdWNobW92ZSR7RVZFTlRfS0VZfWAsXG4gIFRPVUNIRU5EICAgICAgIDogYHRvdWNoZW5kJHtFVkVOVF9LRVl9YCxcbiAgUE9JTlRFUkRPV04gICAgOiBgcG9pbnRlcmRvd24ke0VWRU5UX0tFWX1gLFxuICBQT0lOVEVSVVAgICAgICA6IGBwb2ludGVydXAke0VWRU5UX0tFWX1gLFxuICBEUkFHX1NUQVJUICAgICA6IGBkcmFnc3RhcnQke0VWRU5UX0tFWX1gLFxuICBMT0FEX0RBVEFfQVBJICA6IGBsb2FkJHtFVkVOVF9LRVl9JHtEQVRBX0FQSV9LRVl9YCxcbiAgQ0xJQ0tfREFUQV9BUEkgOiBgY2xpY2ske0VWRU5UX0tFWX0ke0RBVEFfQVBJX0tFWX1gXG59XG5cbmNvbnN0IENsYXNzTmFtZSA9IHtcbiAgQ0FST1VTRUwgICAgICA6ICdjYXJvdXNlbCcsXG4gIEFDVElWRSAgICAgICAgOiAnYWN0aXZlJyxcbiAgU0xJREUgICAgICAgICA6ICdzbGlkZScsXG4gIFJJR0hUICAgICAgICAgOiAnY2Fyb3VzZWwtaXRlbS1yaWdodCcsXG4gIExFRlQgICAgICAgICAgOiAnY2Fyb3VzZWwtaXRlbS1sZWZ0JyxcbiAgTkVYVCAgICAgICAgICA6ICdjYXJvdXNlbC1pdGVtLW5leHQnLFxuICBQUkVWICAgICAgICAgIDogJ2Nhcm91c2VsLWl0ZW0tcHJldicsXG4gIElURU0gICAgICAgICAgOiAnY2Fyb3VzZWwtaXRlbScsXG4gIFBPSU5URVJfRVZFTlQgOiAncG9pbnRlci1ldmVudCdcbn1cblxuY29uc3QgU2VsZWN0b3IgPSB7XG4gIEFDVElWRSAgICAgIDogJy5hY3RpdmUnLFxuICBBQ1RJVkVfSVRFTSA6ICcuYWN0aXZlLmNhcm91c2VsLWl0ZW0nLFxuICBJVEVNICAgICAgICA6ICcuY2Fyb3VzZWwtaXRlbScsXG4gIElURU1fSU1HICAgIDogJy5jYXJvdXNlbC1pdGVtIGltZycsXG4gIE5FWFRfUFJFViAgIDogJy5jYXJvdXNlbC1pdGVtLW5leHQsIC5jYXJvdXNlbC1pdGVtLXByZXYnLFxuICBJTkRJQ0FUT1JTICA6ICcuY2Fyb3VzZWwtaW5kaWNhdG9ycycsXG4gIERBVEFfU0xJREUgIDogJ1tkYXRhLXNsaWRlXSwgW2RhdGEtc2xpZGUtdG9dJyxcbiAgREFUQV9SSURFICAgOiAnW2RhdGEtcmlkZT1cImNhcm91c2VsXCJdJ1xufVxuXG5jb25zdCBQb2ludGVyVHlwZSA9IHtcbiAgVE9VQ0ggOiAndG91Y2gnLFxuICBQRU4gICA6ICdwZW4nXG59XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDbGFzcyBEZWZpbml0aW9uXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuY2xhc3MgQ2Fyb3VzZWwge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICB0aGlzLl9pdGVtcyAgICAgICAgID0gbnVsbFxuICAgIHRoaXMuX2ludGVydmFsICAgICAgPSBudWxsXG4gICAgdGhpcy5fYWN0aXZlRWxlbWVudCA9IG51bGxcbiAgICB0aGlzLl9pc1BhdXNlZCAgICAgID0gZmFsc2VcbiAgICB0aGlzLl9pc1NsaWRpbmcgICAgID0gZmFsc2VcbiAgICB0aGlzLnRvdWNoVGltZW91dCAgID0gbnVsbFxuICAgIHRoaXMudG91Y2hTdGFydFggICAgPSAwXG4gICAgdGhpcy50b3VjaERlbHRhWCAgICA9IDBcblxuICAgIHRoaXMuX2NvbmZpZyAgICAgICAgICAgID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZylcbiAgICB0aGlzLl9lbGVtZW50ICAgICAgICAgICA9IGVsZW1lbnRcbiAgICB0aGlzLl9pbmRpY2F0b3JzRWxlbWVudCA9IHRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvcihTZWxlY3Rvci5JTkRJQ0FUT1JTKVxuICAgIHRoaXMuX3RvdWNoU3VwcG9ydGVkICAgID0gJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8IG5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyA+IDBcbiAgICB0aGlzLl9wb2ludGVyRXZlbnQgICAgICA9IEJvb2xlYW4od2luZG93LlBvaW50ZXJFdmVudCB8fCB3aW5kb3cuTVNQb2ludGVyRXZlbnQpXG5cbiAgICB0aGlzLl9hZGRFdmVudExpc3RlbmVycygpXG4gIH1cblxuICAvLyBHZXR0ZXJzXG5cbiAgc3RhdGljIGdldCBWRVJTSU9OKCkge1xuICAgIHJldHVybiBWRVJTSU9OXG4gIH1cblxuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRcbiAgfVxuXG4gIC8vIFB1YmxpY1xuXG4gIG5leHQoKSB7XG4gICAgaWYgKCF0aGlzLl9pc1NsaWRpbmcpIHtcbiAgICAgIHRoaXMuX3NsaWRlKERpcmVjdGlvbi5ORVhUKVxuICAgIH1cbiAgfVxuXG4gIG5leHRXaGVuVmlzaWJsZSgpIHtcbiAgICAvLyBEb24ndCBjYWxsIG5leHQgd2hlbiB0aGUgcGFnZSBpc24ndCB2aXNpYmxlXG4gICAgLy8gb3IgdGhlIGNhcm91c2VsIG9yIGl0cyBwYXJlbnQgaXNuJ3QgdmlzaWJsZVxuICAgIGlmICghZG9jdW1lbnQuaGlkZGVuICYmXG4gICAgICAoJCh0aGlzLl9lbGVtZW50KS5pcygnOnZpc2libGUnKSAmJiAkKHRoaXMuX2VsZW1lbnQpLmNzcygndmlzaWJpbGl0eScpICE9PSAnaGlkZGVuJykpIHtcbiAgICAgIHRoaXMubmV4dCgpXG4gICAgfVxuICB9XG5cbiAgcHJldigpIHtcbiAgICBpZiAoIXRoaXMuX2lzU2xpZGluZykge1xuICAgICAgdGhpcy5fc2xpZGUoRGlyZWN0aW9uLlBSRVYpXG4gICAgfVxuICB9XG5cbiAgcGF1c2UoZXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50KSB7XG4gICAgICB0aGlzLl9pc1BhdXNlZCA9IHRydWVcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fZWxlbWVudC5xdWVyeVNlbGVjdG9yKFNlbGVjdG9yLk5FWFRfUFJFVikpIHtcbiAgICAgIFV0aWwudHJpZ2dlclRyYW5zaXRpb25FbmQodGhpcy5fZWxlbWVudClcbiAgICAgIHRoaXMuY3ljbGUodHJ1ZSlcbiAgICB9XG5cbiAgICBjbGVhckludGVydmFsKHRoaXMuX2ludGVydmFsKVxuICAgIHRoaXMuX2ludGVydmFsID0gbnVsbFxuICB9XG5cbiAgY3ljbGUoZXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50KSB7XG4gICAgICB0aGlzLl9pc1BhdXNlZCA9IGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2ludGVydmFsKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMuX2ludGVydmFsKVxuICAgICAgdGhpcy5faW50ZXJ2YWwgPSBudWxsXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2NvbmZpZy5pbnRlcnZhbCAmJiAhdGhpcy5faXNQYXVzZWQpIHtcbiAgICAgIHRoaXMuX2ludGVydmFsID0gc2V0SW50ZXJ2YWwoXG4gICAgICAgIChkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUgPyB0aGlzLm5leHRXaGVuVmlzaWJsZSA6IHRoaXMubmV4dCkuYmluZCh0aGlzKSxcbiAgICAgICAgdGhpcy5fY29uZmlnLmludGVydmFsXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgdG8oaW5kZXgpIHtcbiAgICB0aGlzLl9hY3RpdmVFbGVtZW50ID0gdGhpcy5fZWxlbWVudC5xdWVyeVNlbGVjdG9yKFNlbGVjdG9yLkFDVElWRV9JVEVNKVxuXG4gICAgY29uc3QgYWN0aXZlSW5kZXggPSB0aGlzLl9nZXRJdGVtSW5kZXgodGhpcy5fYWN0aXZlRWxlbWVudClcblxuICAgIGlmIChpbmRleCA+IHRoaXMuX2l0ZW1zLmxlbmd0aCAtIDEgfHwgaW5kZXggPCAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAodGhpcy5faXNTbGlkaW5nKSB7XG4gICAgICAkKHRoaXMuX2VsZW1lbnQpLm9uZShFdmVudC5TTElELCAoKSA9PiB0aGlzLnRvKGluZGV4KSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChhY3RpdmVJbmRleCA9PT0gaW5kZXgpIHtcbiAgICAgIHRoaXMucGF1c2UoKVxuICAgICAgdGhpcy5jeWNsZSgpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBkaXJlY3Rpb24gPSBpbmRleCA+IGFjdGl2ZUluZGV4XG4gICAgICA/IERpcmVjdGlvbi5ORVhUXG4gICAgICA6IERpcmVjdGlvbi5QUkVWXG5cbiAgICB0aGlzLl9zbGlkZShkaXJlY3Rpb24sIHRoaXMuX2l0ZW1zW2luZGV4XSlcbiAgfVxuXG4gIGRpc3Bvc2UoKSB7XG4gICAgJCh0aGlzLl9lbGVtZW50KS5vZmYoRVZFTlRfS0VZKVxuICAgICQucmVtb3ZlRGF0YSh0aGlzLl9lbGVtZW50LCBEQVRBX0tFWSlcblxuICAgIHRoaXMuX2l0ZW1zICAgICAgICAgICAgID0gbnVsbFxuICAgIHRoaXMuX2NvbmZpZyAgICAgICAgICAgID0gbnVsbFxuICAgIHRoaXMuX2VsZW1lbnQgICAgICAgICAgID0gbnVsbFxuICAgIHRoaXMuX2ludGVydmFsICAgICAgICAgID0gbnVsbFxuICAgIHRoaXMuX2lzUGF1c2VkICAgICAgICAgID0gbnVsbFxuICAgIHRoaXMuX2lzU2xpZGluZyAgICAgICAgID0gbnVsbFxuICAgIHRoaXMuX2FjdGl2ZUVsZW1lbnQgICAgID0gbnVsbFxuICAgIHRoaXMuX2luZGljYXRvcnNFbGVtZW50ID0gbnVsbFxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuXG4gIF9nZXRDb25maWcoY29uZmlnKSB7XG4gICAgY29uZmlnID0ge1xuICAgICAgLi4uRGVmYXVsdCxcbiAgICAgIC4uLmNvbmZpZ1xuICAgIH1cbiAgICBVdGlsLnR5cGVDaGVja0NvbmZpZyhOQU1FLCBjb25maWcsIERlZmF1bHRUeXBlKVxuICAgIHJldHVybiBjb25maWdcbiAgfVxuXG4gIF9oYW5kbGVTd2lwZSgpIHtcbiAgICBjb25zdCBhYnNEZWx0YXggPSBNYXRoLmFicyh0aGlzLnRvdWNoRGVsdGFYKVxuXG4gICAgaWYgKGFic0RlbHRheCA8PSBTV0lQRV9USFJFU0hPTEQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGRpcmVjdGlvbiA9IGFic0RlbHRheCAvIHRoaXMudG91Y2hEZWx0YVhcblxuICAgIC8vIHN3aXBlIGxlZnRcbiAgICBpZiAoZGlyZWN0aW9uID4gMCkge1xuICAgICAgdGhpcy5wcmV2KClcbiAgICB9XG5cbiAgICAvLyBzd2lwZSByaWdodFxuICAgIGlmIChkaXJlY3Rpb24gPCAwKSB7XG4gICAgICB0aGlzLm5leHQoKVxuICAgIH1cbiAgfVxuXG4gIF9hZGRFdmVudExpc3RlbmVycygpIHtcbiAgICBpZiAodGhpcy5fY29uZmlnLmtleWJvYXJkKSB7XG4gICAgICAkKHRoaXMuX2VsZW1lbnQpXG4gICAgICAgIC5vbihFdmVudC5LRVlET1dOLCAoZXZlbnQpID0+IHRoaXMuX2tleWRvd24oZXZlbnQpKVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9jb25maWcucGF1c2UgPT09ICdob3ZlcicpIHtcbiAgICAgICQodGhpcy5fZWxlbWVudClcbiAgICAgICAgLm9uKEV2ZW50Lk1PVVNFRU5URVIsIChldmVudCkgPT4gdGhpcy5wYXVzZShldmVudCkpXG4gICAgICAgIC5vbihFdmVudC5NT1VTRUxFQVZFLCAoZXZlbnQpID0+IHRoaXMuY3ljbGUoZXZlbnQpKVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9jb25maWcudG91Y2gpIHtcbiAgICAgIHRoaXMuX2FkZFRvdWNoRXZlbnRMaXN0ZW5lcnMoKVxuICAgIH1cbiAgfVxuXG4gIF9hZGRUb3VjaEV2ZW50TGlzdGVuZXJzKCkge1xuICAgIGlmICghdGhpcy5fdG91Y2hTdXBwb3J0ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0ID0gKGV2ZW50KSA9PiB7XG4gICAgICBpZiAodGhpcy5fcG9pbnRlckV2ZW50ICYmIFBvaW50ZXJUeXBlW2V2ZW50Lm9yaWdpbmFsRXZlbnQucG9pbnRlclR5cGUudG9VcHBlckNhc2UoKV0pIHtcbiAgICAgICAgdGhpcy50b3VjaFN0YXJ0WCA9IGV2ZW50Lm9yaWdpbmFsRXZlbnQuY2xpZW50WFxuICAgICAgfSBlbHNlIGlmICghdGhpcy5fcG9pbnRlckV2ZW50KSB7XG4gICAgICAgIHRoaXMudG91Y2hTdGFydFggPSBldmVudC5vcmlnaW5hbEV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WFxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG1vdmUgPSAoZXZlbnQpID0+IHtcbiAgICAgIC8vIGVuc3VyZSBzd2lwaW5nIHdpdGggb25lIHRvdWNoIGFuZCBub3QgcGluY2hpbmdcbiAgICAgIGlmIChldmVudC5vcmlnaW5hbEV2ZW50LnRvdWNoZXMgJiYgZXZlbnQub3JpZ2luYWxFdmVudC50b3VjaGVzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgdGhpcy50b3VjaERlbHRhWCA9IDBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudG91Y2hEZWx0YVggPSBldmVudC5vcmlnaW5hbEV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WCAtIHRoaXMudG91Y2hTdGFydFhcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBlbmQgPSAoZXZlbnQpID0+IHtcbiAgICAgIGlmICh0aGlzLl9wb2ludGVyRXZlbnQgJiYgUG9pbnRlclR5cGVbZXZlbnQub3JpZ2luYWxFdmVudC5wb2ludGVyVHlwZS50b1VwcGVyQ2FzZSgpXSkge1xuICAgICAgICB0aGlzLnRvdWNoRGVsdGFYID0gZXZlbnQub3JpZ2luYWxFdmVudC5jbGllbnRYIC0gdGhpcy50b3VjaFN0YXJ0WFxuICAgICAgfVxuXG4gICAgICB0aGlzLl9oYW5kbGVTd2lwZSgpXG4gICAgICBpZiAodGhpcy5fY29uZmlnLnBhdXNlID09PSAnaG92ZXInKSB7XG4gICAgICAgIC8vIElmIGl0J3MgYSB0b3VjaC1lbmFibGVkIGRldmljZSwgbW91c2VlbnRlci9sZWF2ZSBhcmUgZmlyZWQgYXNcbiAgICAgICAgLy8gcGFydCBvZiB0aGUgbW91c2UgY29tcGF0aWJpbGl0eSBldmVudHMgb24gZmlyc3QgdGFwIC0gdGhlIGNhcm91c2VsXG4gICAgICAgIC8vIHdvdWxkIHN0b3AgY3ljbGluZyB1bnRpbCB1c2VyIHRhcHBlZCBvdXQgb2YgaXQ7XG4gICAgICAgIC8vIGhlcmUsIHdlIGxpc3RlbiBmb3IgdG91Y2hlbmQsIGV4cGxpY2l0bHkgcGF1c2UgdGhlIGNhcm91c2VsXG4gICAgICAgIC8vIChhcyBpZiBpdCdzIHRoZSBzZWNvbmQgdGltZSB3ZSB0YXAgb24gaXQsIG1vdXNlZW50ZXIgY29tcGF0IGV2ZW50XG4gICAgICAgIC8vIGlzIE5PVCBmaXJlZCkgYW5kIGFmdGVyIGEgdGltZW91dCAodG8gYWxsb3cgZm9yIG1vdXNlIGNvbXBhdGliaWxpdHlcbiAgICAgICAgLy8gZXZlbnRzIHRvIGZpcmUpIHdlIGV4cGxpY2l0bHkgcmVzdGFydCBjeWNsaW5nXG5cbiAgICAgICAgdGhpcy5wYXVzZSgpXG4gICAgICAgIGlmICh0aGlzLnRvdWNoVGltZW91dCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRvdWNoVGltZW91dClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRvdWNoVGltZW91dCA9IHNldFRpbWVvdXQoKGV2ZW50KSA9PiB0aGlzLmN5Y2xlKGV2ZW50KSwgVE9VQ0hFVkVOVF9DT01QQVRfV0FJVCArIHRoaXMuX2NvbmZpZy5pbnRlcnZhbClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAkKHRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvckFsbChTZWxlY3Rvci5JVEVNX0lNRykpLm9uKEV2ZW50LkRSQUdfU1RBUlQsIChlKSA9PiBlLnByZXZlbnREZWZhdWx0KCkpXG4gICAgaWYgKHRoaXMuX3BvaW50ZXJFdmVudCkge1xuICAgICAgJCh0aGlzLl9lbGVtZW50KS5vbihFdmVudC5QT0lOVEVSRE9XTiwgKGV2ZW50KSA9PiBzdGFydChldmVudCkpXG4gICAgICAkKHRoaXMuX2VsZW1lbnQpLm9uKEV2ZW50LlBPSU5URVJVUCwgKGV2ZW50KSA9PiBlbmQoZXZlbnQpKVxuXG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ2xhc3NOYW1lLlBPSU5URVJfRVZFTlQpXG4gICAgfSBlbHNlIHtcbiAgICAgICQodGhpcy5fZWxlbWVudCkub24oRXZlbnQuVE9VQ0hTVEFSVCwgKGV2ZW50KSA9PiBzdGFydChldmVudCkpXG4gICAgICAkKHRoaXMuX2VsZW1lbnQpLm9uKEV2ZW50LlRPVUNITU9WRSwgKGV2ZW50KSA9PiBtb3ZlKGV2ZW50KSlcbiAgICAgICQodGhpcy5fZWxlbWVudCkub24oRXZlbnQuVE9VQ0hFTkQsIChldmVudCkgPT4gZW5kKGV2ZW50KSlcbiAgICB9XG4gIH1cblxuICBfa2V5ZG93bihldmVudCkge1xuICAgIGlmICgvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGV2ZW50LnRhcmdldC50YWdOYW1lKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgc3dpdGNoIChldmVudC53aGljaCkge1xuICAgICAgY2FzZSBBUlJPV19MRUZUX0tFWUNPREU6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgdGhpcy5wcmV2KClcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgQVJST1dfUklHSFRfS0VZQ09ERTpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICB0aGlzLm5leHQoKVxuICAgICAgICBicmVha1xuICAgICAgZGVmYXVsdDpcbiAgICB9XG4gIH1cblxuICBfZ2V0SXRlbUluZGV4KGVsZW1lbnQpIHtcbiAgICB0aGlzLl9pdGVtcyA9IGVsZW1lbnQgJiYgZWxlbWVudC5wYXJlbnROb2RlXG4gICAgICA/IFtdLnNsaWNlLmNhbGwoZWxlbWVudC5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoU2VsZWN0b3IuSVRFTSkpXG4gICAgICA6IFtdXG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zLmluZGV4T2YoZWxlbWVudClcbiAgfVxuXG4gIF9nZXRJdGVtQnlEaXJlY3Rpb24oZGlyZWN0aW9uLCBhY3RpdmVFbGVtZW50KSB7XG4gICAgY29uc3QgaXNOZXh0RGlyZWN0aW9uID0gZGlyZWN0aW9uID09PSBEaXJlY3Rpb24uTkVYVFxuICAgIGNvbnN0IGlzUHJldkRpcmVjdGlvbiA9IGRpcmVjdGlvbiA9PT0gRGlyZWN0aW9uLlBSRVZcbiAgICBjb25zdCBhY3RpdmVJbmRleCAgICAgPSB0aGlzLl9nZXRJdGVtSW5kZXgoYWN0aXZlRWxlbWVudClcbiAgICBjb25zdCBsYXN0SXRlbUluZGV4ICAgPSB0aGlzLl9pdGVtcy5sZW5ndGggLSAxXG4gICAgY29uc3QgaXNHb2luZ1RvV3JhcCAgID0gaXNQcmV2RGlyZWN0aW9uICYmIGFjdGl2ZUluZGV4ID09PSAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNOZXh0RGlyZWN0aW9uICYmIGFjdGl2ZUluZGV4ID09PSBsYXN0SXRlbUluZGV4XG5cbiAgICBpZiAoaXNHb2luZ1RvV3JhcCAmJiAhdGhpcy5fY29uZmlnLndyYXApIHtcbiAgICAgIHJldHVybiBhY3RpdmVFbGVtZW50XG4gICAgfVxuXG4gICAgY29uc3QgZGVsdGEgICAgID0gZGlyZWN0aW9uID09PSBEaXJlY3Rpb24uUFJFViA/IC0xIDogMVxuICAgIGNvbnN0IGl0ZW1JbmRleCA9IChhY3RpdmVJbmRleCArIGRlbHRhKSAlIHRoaXMuX2l0ZW1zLmxlbmd0aFxuXG4gICAgcmV0dXJuIGl0ZW1JbmRleCA9PT0gLTFcbiAgICAgID8gdGhpcy5faXRlbXNbdGhpcy5faXRlbXMubGVuZ3RoIC0gMV0gOiB0aGlzLl9pdGVtc1tpdGVtSW5kZXhdXG4gIH1cblxuICBfdHJpZ2dlclNsaWRlRXZlbnQocmVsYXRlZFRhcmdldCwgZXZlbnREaXJlY3Rpb25OYW1lKSB7XG4gICAgY29uc3QgdGFyZ2V0SW5kZXggPSB0aGlzLl9nZXRJdGVtSW5kZXgocmVsYXRlZFRhcmdldClcbiAgICBjb25zdCBmcm9tSW5kZXggPSB0aGlzLl9nZXRJdGVtSW5kZXgodGhpcy5fZWxlbWVudC5xdWVyeVNlbGVjdG9yKFNlbGVjdG9yLkFDVElWRV9JVEVNKSlcbiAgICBjb25zdCBzbGlkZUV2ZW50ID0gJC5FdmVudChFdmVudC5TTElERSwge1xuICAgICAgcmVsYXRlZFRhcmdldCxcbiAgICAgIGRpcmVjdGlvbjogZXZlbnREaXJlY3Rpb25OYW1lLFxuICAgICAgZnJvbTogZnJvbUk="
}
]
}
]
}