Update Tokens Contract

in #he-dev4 years ago

{"id":"ssc-testnet-reaz","json":{"contractName":"contract","contractAction":"update","contractPayload":{"name":"tokens","params":"","code":"Y29uc3QgQUNDT1VOVF9CTEFDS0xJU1Q9e2dhdGVpb2RlcG9zaXQ6MSxkZWVwY3J5cHRvODoxLGJpdHRyZXg6MSxwb2xvbmlleDoxLCJodW9iaS1wcm8iOjEsImJpbmFuY2UtaG90IjoxLGJpdHZhdm86MSxibG9ja3RyYWRlczoxLHByb2JpdHN0ZWVtOjEscHJvYml0aGl2ZToxLGlvbm9teToxLG14Y2hpdmU6MSxjb2luYmFzZWJhc2U6MSxvcmlub2NvOjEsInVzZXIuZHVuYW11IjoxfSxIRV9BQ0NPVU5UUz17ImhpdmUtZW5naW5lIjoxLCJzd2FwLWV0aCI6MSwiYnRjLXN3YXAiOjEsImdyYXBoZW5lLXN3YXAiOjEsImhvbmV5LXN3YXAiOjF9LFJFU0VSVkVEX1NZTUJPTFM9e0VORzoibnVsbCIsU1RFRU1QOiJzdGVlbS1wZWciLEJUQ1A6ImJ0Y3BlZyIsTFRDUDoibHRjcCIsRE9HRVA6ImRvZ2VwIixCQ0hQOiJiY2hwIixTTVRUOiJzdGVlbW1vbnN0ZXJzIixFTToic3RlZW0tZW5nIixFTUZPVVI6InN0ZWVtLWVuZyIsSElWRVA6InN0ZWVtLXRva2VucyJ9LFZFUklGSUVEX0lTU1VFUlM9WyJtaW5pbmciLCJ0b2tlbmZ1bmRzIl0sY2FsY3VsYXRlQmFsYW5jZT0oYSxlLHQsaSk9PihpP2FwaS5CaWdOdW1iZXIoYSkucGx1cyhlKTphcGkuQmlnTnVtYmVyKGEpLm1pbnVzKGUpKS50b0ZpeGVkKHQpLGNvdW50RGVjaW1hbHM9YT0+YXBpLkJpZ051bWJlcihhKS5kcCgpLGZpbmRBbmRQcm9jZXNzQWxsPWFzeW5jKGEsZSx0KT0+e2xldCBpPTA7dmFyIG47bGV0IHM9ITE7Zm9yKDshczspaWYobj1hd2FpdCBhcGkuZGIuZmluZChhLGUsMWUzLGkpKXtmb3IobGV0IGE9MDthPG4ubGVuZ3RoO2ErPTEpYXdhaXQgdChuW2FdKTtuLmxlbmd0aDwxZTM/cz0hMDppKz0xZTN9fTthY3Rpb25zLmNyZWF0ZVNTQz1hc3luYygpPT57aWYoITE9PT1hd2FpdCBhcGkuZGIudGFibGVFeGlzdHMoInRva2VucyIpKXthd2FpdCBhcGkuZGIuY3JlYXRlVGFibGUoInRva2VucyIsWyJzeW1ib2wiXSksYXdhaXQgYXBpLmRiLmNyZWF0ZVRhYmxlKCJiYWxhbmNlcyIsWyJhY2NvdW50Il0pLGF3YWl0IGFwaS5kYi5jcmVhdGVUYWJsZSgiY29udHJhY3RzQmFsYW5jZXMiLFsiYWNjb3VudCJdKSxhd2FpdCBhcGkuZGIuY3JlYXRlVGFibGUoInBhcmFtcyIpLGF3YWl0IGFwaS5kYi5jcmVhdGVUYWJsZSgicGVuZGluZ1Vuc3Rha2VzIixbImFjY291bnQiLCJ1bnN0YWtlQ29tcGxldGVUaW1lc3RhbXAiXSksYXdhaXQgYXBpLmRiLmNyZWF0ZVRhYmxlKCJkZWxlZ2F0aW9ucyIsWyJmcm9tIiwidG8iXSksYXdhaXQgYXBpLmRiLmNyZWF0ZVRhYmxlKCJwZW5kaW5nVW5kZWxlZ2F0aW9ucyIsWyJhY2NvdW50IiwiY29tcGxldGVUaW1lc3RhbXAiXSk7Y29uc3QgYT17dG9rZW5DcmVhdGlvbkZlZToiMCIsZW5hYmxlRGVsZWdhdGlvbkZlZToiMCIsZW5hYmxlU3Rha2luZ0ZlZToiMCJ9O2F3YWl0IGFwaS5kYi5pbnNlcnQoInBhcmFtcyIsYSl9ZWxzZXtjb25zdCBlPWF3YWl0IGFwaS5kYi5maW5kT25lKCJwYXJhbXMiLHt9KTtpZighZS5ibGFja2xpc3Qpe2UuYmxhY2tsaXN0PUFDQ09VTlRfQkxBQ0tMSVNULGUuaGVBY2NvdW50cz1IRV9BQ0NPVU5UUztjb25zdCB0PXt9O2xldCBhPSExO2UuZml4TXVsdGlUeFVuc3Rha2VCYWxhbmNlJiYoZGVsZXRlIGUuZml4TXVsdGlUeFVuc3Rha2VCYWxhbmNlLHQuZml4TXVsdGlUeFVuc3Rha2VCYWxhbmNlPSIiLGE9ITApLGUuY2FuY2VsQmFkVW5zdGFrZXMmJihkZWxldGUgZS5jYW5jZWxCYWRVbnN0YWtlcyx0LmNhbmNlbEJhZFVuc3Rha2VzPSIiLGE9ITApLGE/YXdhaXQgYXBpLmRiLnVwZGF0ZSgicGFyYW1zIixlLHQpOmF3YWl0IGFwaS5kYi51cGRhdGUoInBhcmFtcyIsZSl9fX07Y29uc3QgYmFsYW5jZVRlbXBsYXRlPXthY2NvdW50Om51bGwsc3ltYm9sOm51bGwsYmFsYW5jZToiMCIsc3Rha2U6IjAiLHBlbmRpbmdVbnN0YWtlOiIwIixkZWxlZ2F0aW9uc0luOiIwIixkZWxlZ2F0aW9uc091dDoiMCIscGVuZGluZ1VuZGVsZWdhdGlvbnM6IjAifSxhZGRTdGFrZT1hc3luYyhhLGUsdCk9PntsZXQgaT1hd2FpdCBhcGkuZGIuZmluZE9uZSgiYmFsYW5jZXMiLHthY2NvdW50OmEsc3ltYm9sOmUuc3ltYm9sfSk7bnVsbD09PWkmJihpPWJhbGFuY2VUZW1wbGF0ZSxpLmFjY291bnQ9YSxpLnN5bWJvbD1lLnN5bWJvbCxpPWF3YWl0IGFwaS5kYi5pbnNlcnQoImJhbGFuY2VzIixpKSksdm9pZCAwPT09aS5zdGFrZSYmKGkuc3Rha2U9IjAiLGkucGVuZGluZ1Vuc3Rha2U9IjAiKTthPWkuc3Rha2U7cmV0dXJuIGkuc3Rha2U9Y2FsY3VsYXRlQmFsYW5jZShpLnN0YWtlLHQsZS5wcmVjaXNpb24sITApLCEhYXBpLmFzc2VydChhcGkuQmlnTnVtYmVyKGkuc3Rha2UpLmd0KGEpLCJjYW5ub3QgYWRkIikmJihhd2FpdCBhcGkuZGIudXBkYXRlKCJiYWxhbmNlcyIsaSksdm9pZCAwPT09ZS50b3RhbFN0YWtlZCYmKGUudG90YWxTdGFrZWQ9IjAiKSxlLnRvdGFsU3Rha2VkPWNhbGN1bGF0ZUJhbGFuY2UoZS50b3RhbFN0YWtlZCx0LGUucHJlY2lzaW9uLCEwKSxhd2FpdCBhcGkuZGIudXBkYXRlKCJ0b2tlbnMiLGUpLCEwKX0sc3ViQmFsYW5jZT1hc3luYyhhLGUsdCxpKT0+e2NvbnN0IG49YXdhaXQgYXBpLmRiLmZpbmRPbmUoaSx7YWNjb3VudDphLHN5bWJvbDplLnN5bWJvbH0pO2lmKGFwaS5hc3NlcnQobnVsbCE9PW4sImJhbGFuY2UgZG9lcyBub3QgZXhpc3QiKSYmYXBpLmFzc2VydChhcGkuQmlnTnVtYmVyKG4uYmFsYW5jZSkuZ3RlKHQpLCJvdmVyZHJhd24gYmFsYW5jZSIpKXthPW4uYmFsYW5jZTtpZihuLmJhbGFuY2U9Y2FsY3VsYXRlQmFsYW5jZShuLmJhbGFuY2UsdCxlLnByZWNpc2lvbiwhMSksYXBpLmFzc2VydChhcGkuQmlnTnVtYmVyKG4uYmFsYW5jZSkubHQoYSksImNhbm5vdCBzdWJ0cmFjdCIpKXJldHVybiBhd2FpdCBhcGkuZGIudXBkYXRlKGksbiksITB9cmV0dXJuITF9LGFkZEJhbGFuY2U9YXN5bmMoYSxlLHQsaSk9PntsZXQgbj1hd2FpdCBhcGkuZGIuZmluZE9uZShpLHthY2NvdW50OmEsc3ltYm9sOmUuc3ltYm9sfSk7aWYobnVsbD09PW4pcmV0dXJuIG49YmFsYW5jZVRlbXBsYXRlLG4uYWNjb3VudD1hLG4uc3ltYm9sPWUuc3ltYm9sLG4uYmFsYW5jZT10LGF3YWl0IGFwaS5kYi5pbnNlcnQoaSxuKSwhMDthPW4uYmFsYW5jZTtyZXR1cm4gbi5iYWxhbmNlPWNhbGN1bGF0ZUJhbGFuY2Uobi5iYWxhbmNlLHQsZS5wcmVjaXNpb24sITApLCEhYXBpLmFzc2VydChhcGkuQmlnTnVtYmVyKG4uYmFsYW5jZSkuZ3QoYSksImNhbm5vdCBhZGQiKSYmKGF3YWl0IGFwaS5kYi51cGRhdGUoaSxuKSwhMCl9O2FjdGlvbnMudXBkYXRlUGFyYW1zPWFzeW5jIGE9PntpZihhcGkuc2VuZGVyPT09YXBpLm93bmVyKXt2YXJ7dG9rZW5DcmVhdGlvbkZlZTplLGVuYWJsZURlbGVnYXRpb25GZWU6dCxlbmFibGVTdGFraW5nRmVlOmksYmxhY2tsaXN0Om4saGVBY2NvdW50czphfT1hO2NvbnN0IHM9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBhcmFtcyIse30pO2UmJiJzdHJpbmciPT10eXBlb2YgZSYmIWFwaS5CaWdOdW1iZXIoZSkuaXNOYU4oKSYmYXBpLkJpZ051bWJlcihlKS5ndGUoMCkmJihzLnRva2VuQ3JlYXRpb25GZWU9ZSksdCYmInN0cmluZyI9PXR5cGVvZiB0JiYhYXBpLkJpZ051bWJlcih0KS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKHQpLmd0ZSgwKSYmKHMuZW5hYmxlRGVsZWdhdGlvbkZlZT10KSxpJiYic3RyaW5nIj09dHlwZW9mIGkmJiFhcGkuQmlnTnVtYmVyKGkpLmlzTmFOKCkmJmFwaS5CaWdOdW1iZXIoaSkuZ3RlKDApJiYocy5lbmFibGVTdGFraW5nRmVlPWkpLG4mJiJvYmplY3QiPT10eXBlb2YgbiYmKHMuYmxhY2tsaXN0PW4pLGEmJiJvYmplY3QiPT10eXBlb2YgYSYmKHMuaGVBY2NvdW50cz1hKSxhd2FpdCBhcGkuZGIudXBkYXRlKCJwYXJhbXMiLHMpfX0sYWN0aW9ucy51cGRhdGVVcmw9YXN5bmMgYT0+e3Zhcnt1cmw6ZSxzeW1ib2w6YX09YTtpZihhcGkuYXNzZXJ0KGEmJiJzdHJpbmciPT10eXBlb2YgYSYmZSYmInN0cmluZyI9PXR5cGVvZiBlLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGUubGVuZ3RoPD0yNTUsImludmFsaWQgdXJsOiBtYXggbGVuZ3RoIG9mIDI1NSIpKXtjb25zdCB0PWF3YWl0IGFwaS5kYi5maW5kT25lKCJ0b2tlbnMiLHtzeW1ib2w6YX0pO2lmKHQmJmFwaS5hc3NlcnQodC5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSl0cnl7Y29uc3QgaT1KU09OLnBhcnNlKHQubWV0YWRhdGEpO2FwaS5hc3NlcnQoaSYmaS51cmwsImFuIGVycm9yIG9jY3VyZWQgd2hlbiB0cnlpbmcgdG8gdXBkYXRlIHRoZSB1cmwiKSYmKGkudXJsPWUsdC5tZXRhZGF0YT1KU09OLnN0cmluZ2lmeShpKSxhd2FpdCBhcGkuZGIudXBkYXRlKCJ0b2tlbnMiLHQpKX1jYXRjaChhKXt9fX0sYWN0aW9ucy51cGRhdGVNZXRhZGF0YT1hc3luYyBhPT57dmFye21ldGFkYXRhOmUsc3ltYm9sOmF9PWE7aWYoYXBpLmFzc2VydChhJiYic3RyaW5nIj09dHlwZW9mIGEmJmUmJiJvYmplY3QiPT10eXBlb2YgZSwiaW52YWxpZCBwYXJhbXMiKSl7Y29uc3QgaT1hd2FpdCBhcGkuZGIuZmluZE9uZSgidG9rZW5zIix7c3ltYm9sOmF9KTtpZihpJiZhcGkuYXNzZXJ0KGkuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpdHJ5e3ZhciB0PUpTT04uc3RyaW5naWZ5KGUpO2FwaS5hc3NlcnQodC5sZW5ndGg8PTFlMywiaW52YWxpZCBtZXRhZGF0YTogbWF4IGxlbmd0aCBvZiAxMDAwIikmJihpLm1ldGFkYXRhPXQsYXdhaXQgYXBpLmRiLnVwZGF0ZSgidG9rZW5zIixpKSl9Y2F0Y2goYSl7fX19LGFjdGlvbnMudXBkYXRlUHJlY2lzaW9uPWFzeW5jIGE9Pnt2YXJ7c3ltYm9sOmUscHJlY2lzaW9uOnQsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmF9PWE7aWYoYXBpLmFzc2VydCghMD09PWEsInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KGUmJiJzdHJpbmciPT10eXBlb2YgZSkmJmFwaS5hc3NlcnQoMDx0JiZ0PD04JiZOdW1iZXIuaXNJbnRlZ2VyKHQpLCJpbnZhbGlkIHByZWNpc2lvbiIpKXtjb25zdCBpPWF3YWl0IGFwaS5kYi5maW5kT25lKCJ0b2tlbnMiLHtzeW1ib2w6ZX0pO2kmJmFwaS5hc3NlcnQoaS5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSYmYXBpLmFzc2VydCh0PmkucHJlY2lzaW9uLCJwcmVjaXNpb24gY2FuIG9ubHkgYmUgaW5jcmVhc2VkIikmJihpLnByZWNpc2lvbj10LGF3YWl0IGFwaS5kYi51cGRhdGUoInRva2VucyIsaSkpfX0sYWN0aW9ucy50cmFuc2Zlck93bmVyc2hpcD1hc3luYyBhPT57Y29uc3R7c3ltYm9sOmUsdG86dCxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aX09YTtpZihhcGkuYXNzZXJ0KCEwPT09aSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQoZSYmInN0cmluZyI9PXR5cGVvZiBlJiZ0JiYic3RyaW5nIj09dHlwZW9mIHQsImludmFsaWQgcGFyYW1zIikpe2NvbnN0IG49YXdhaXQgYXBpLmRiLmZpbmRPbmUoInRva2VucyIse3N5bWJvbDplfSk7biYmYXBpLmFzc2VydChuLmlzc3Vlcj09PWFwaS5zZW5kZXIsIm11c3QgYmUgdGhlIGlzc3VlciIpJiYoYT10LnRyaW0oKSxhcGkuYXNzZXJ0KGFwaS5pc1ZhbGlkQWNjb3VudE5hbWUoYSksImludmFsaWQgdG8iKSYmKG4uaXNzdWVyPWEsYXdhaXQgYXBpLmRiLnVwZGF0ZSgidG9rZW5zIixuKSkpfX0sYWN0aW9ucy5jcmVhdGU9YXN5bmMgYT0+e2NvbnN0e25hbWU6ZSxzeW1ib2w6dCx1cmw6aSxwcmVjaXNpb246bixtYXhTdXBwbHk6cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6b309YTt2YXJ7dG9rZW5DcmVhdGlvbkZlZTpsLGhlQWNjb3VudHM6cn09YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBhcmFtcyIse30pLGE9YXdhaXQgYXBpLmRiLmZpbmRPbmUoImJhbGFuY2VzIix7YWNjb3VudDphcGkuc2VuZGVyLHN5bWJvbDoiQkVFIn0pLGE9ISghYXBpLkJpZ051bWJlcihsKS5sdGUoMCkmJjEhPT1yW2FwaS5zZW5kZXJdKXx8YSYmYXBpLkJpZ051bWJlcihhLmJhbGFuY2UpLmd0ZShsKTthcGkuYXNzZXJ0KGEsInlvdSBtdXN0IGhhdmUgZW5vdWdoIHRva2VucyB0byBjb3ZlciB0aGUgY3JlYXRpb24gZmVlcyIpJiZhcGkuYXNzZXJ0KCEwPT09bywieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQoZSYmInN0cmluZyI9PXR5cGVvZiBlJiZ0JiYic3RyaW5nIj09dHlwZW9mIHQmJih2b2lkIDA9PT1pfHxpJiYic3RyaW5nIj09dHlwZW9mIGkpJiYobiYmIm51bWJlciI9PXR5cGVvZiBufHwwPT09bikmJnMmJiJzdHJpbmciPT10eXBlb2YgcyYmIWFwaS5CaWdOdW1iZXIocykuaXNOYU4oKSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydCgwPHQubGVuZ3RoJiZ0Lmxlbmd0aDw9MTAmJmFwaS52YWxpZGF0b3IuaXNBbHBoYShhcGkudmFsaWRhdG9yLmJsYWNrbGlzdCh0LCIuIikpJiZhcGkudmFsaWRhdG9yLmlzVXBwZXJjYXNlKHQpJiYoLTE9PT10LmluZGV4T2YoIi4iKXx8MDx0LmluZGV4T2YoIi4iKSYmdC5pbmRleE9mKCIuIik8dC5sZW5ndGgtMSYmdC5pbmRleE9mKCIuIik9PT10Lmxhc3RJbmRleE9mKCIuIikpLCdpbnZhbGlkIHN5bWJvbDogdXBwZXJjYXNlIGxldHRlcnMgb25seSBhbmQgb25lICIuIiBhbGxvd2VkLCBtYXggbGVuZ3RoIG9mIDEwJykmJmFwaS5hc3NlcnQodm9pZCAwPT09UkVTRVJWRURfU1lNQk9MU1t0XXx8YXBpLnNlbmRlcj09PVJFU0VSVkVEX1NZTUJPTFNbdF0sImNhbm5vdCB1c2UgdGhpcyBzeW1ib2wiKSYmYXBpLmFzc2VydCgxPT09clthcGkuc2VuZGVyXXx8LTE9PT10LmluZGV4T2YoIlNXQVAiKSwiaW52YWxpZCBzeW1ib2w6IG5vdCBhbGxvd2VkIHRvIHVzZSBTV0FQIikmJmFwaS5hc3NlcnQoYXBpLnZhbGlkYXRvci5pc0FscGhhbnVtZXJpYyhhcGkudmFsaWRhdG9yLmJsYWNrbGlzdChlLCIgIikpJiYwPGUubGVuZ3RoJiZlLmxlbmd0aDw9NTAsImludmFsaWQgbmFtZTogbGV0dGVycywgbnVtYmVycywgd2hpdGVzcGFjZXMgb25seSwgbWF4IGxlbmd0aCBvZiA1MCIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PWl8fGkubGVuZ3RoPD0yNTUsImludmFsaWQgdXJsOiBtYXggbGVuZ3RoIG9mIDI1NSIpJiZhcGkuYXNzZXJ0KDA8PW4mJm48PTgmJk51bWJlci5pc0ludGVnZXIobiksImludmFsaWQgcHJlY2lzaW9uIikmJmFwaS5hc3NlcnQoYXBpLkJpZ051bWJlcihzKS5ndCgwKSwibWF4U3VwcGx5IG11c3QgYmUgcG9zaXRpdmUiKSYmYXBpLmFzc2VydChhcGkuQmlnTnVtYmVyKHMpLmx0ZShOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiksYG1heFN1cHBseSBtdXN0IGJlIGxvd2VyIHRoYW4gJHtOdW1iZXIuTUFYX1NBRkVfSU5URUdFUn1gKSYmKGE9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInRva2VucyIse3N5bWJvbDp0fSksYXBpLmFzc2VydChudWxsPT09YSwic3ltYm9sIGFscmVhZHkgZXhpc3RzIikmJihhPXt1cmw6dm9pZCAwPT09aT8iIjppfSxhPUpTT04uc3RyaW5naWZ5KGEpLGE9e2lzc3VlcjphcGkuc2VuZGVyLHN5bWJvbDp0LG5hbWU6ZSxtZXRhZGF0YTphLHByZWNpc2lvbjpuLG1heFN1cHBseTphcGkuQmlnTnVtYmVyKHMpLnRvRml4ZWQobiksc3VwcGx5OiIwIixjaXJjdWxhdGluZ1N1cHBseToiMCIsc3Rha2luZ0VuYWJsZWQ6ITEsdW5zdGFraW5nQ29vbGRvd246MSxkZWxlZ2F0aW9uRW5hYmxlZDohMSx1bmRlbGVnYXRpb25Db29sZG93bjowfSxhd2FpdCBhcGkuZGIuaW5zZXJ0KCJ0b2tlbnMiLGEpLGFwaS5CaWdOdW1iZXIobCkuZ3QoMCkmJnZvaWQgMD09PXJbYXBpLnNlbmRlcl0mJmF3YWl0IGFjdGlvbnMudHJhbnNmZXIoe3RvOiJudWxsIixzeW1ib2w6IkJFRSIscXVhbnRpdHk6bCxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6b30pKSl9LGFjdGlvbnMuaXNzdWU9YXN5bmMgZT0+e2NvbnN0e3RvOmEsc3ltYm9sOnQscXVhbnRpdHk6aSxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6bixjYWxsaW5nQ29udHJhY3RJbmZvOnN9PWU7dmFyIG89Im51bGwiPT09YXBpLnNlbmRlciYmLTEhPT1WRVJJRklFRF9JU1NVRVJTLmluZGV4T2Yocy5uYW1lKTtpZihvfHxhcGkuYXNzZXJ0KCEwPT09biwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQoYSYmInN0cmluZyI9PXR5cGVvZiBhJiZ0JiYic3RyaW5nIj09dHlwZW9mIHQmJmkmJiJzdHJpbmciPT10eXBlb2YgaSYmIWFwaS5CaWdOdW1iZXIoaSkuaXNOYU4oKSwiaW52YWxpZCBwYXJhbXMiKSl7ZT1hLnRyaW0oKTtjb25zdCBsPWF3YWl0IGFwaS5kYi5maW5kT25lKCJ0b2tlbnMiLHtzeW1ib2w6dH0pO2lmKGFwaS5hc3NlcnQobnVsbCE9PWwsInN5bWJvbCBkb2VzIG5vdCBleGlzdCIpJiZhcGkuYXNzZXJ0KG98fGwuaXNzdWVyPT09YXBpLnNlbmRlciwibm90IGFsbG93ZWQgdG8gaXNzdWUgdG9rZW5zIikmJmFwaS5hc3NlcnQoY291bnREZWNpbWFscyhpKTw9bC5wcmVjaXNpb24sInN5bWJvbCBwcmVjaXNpb24gbWlzbWF0Y2giKSYmYXBpLmFzc2VydChhcGkuQmlnTnVtYmVyKGkpLmd0KDApLCJtdXN0IGlzc3VlIHBvc2l0aXZlIHF1YW50aXR5IikmJmFwaS5hc3NlcnQoYXBpLkJpZ051bWJlcihsLm1heFN1cHBseSkubWludXMobC5zdXBwbHkpLmd0ZShpKSwicXVhbnRpdHkgZXhjZWVkcyBhdmFpbGFibGUgc3VwcGx5IikmJmFwaS5hc3NlcnQoYXBpLmlzVmFsaWRBY2NvdW50TmFtZShlKSwiaW52YWxpZCB0byIpKXtsZXQgYT1hd2FpdCBhZGRCYWxhbmNlKGwuaXNzdWVyLGwsaSwiYmFsYW5jZXMiKTshMD09PWEmJmUhPT1sLmlzc3VlciYmYXdhaXQgc3ViQmFsYW5jZShsLmlzc3VlcixsLGksImJhbGFuY2VzIikmJihhPWF3YWl0IGFkZEJhbGFuY2UoZSxsLGksImJhbGFuY2VzIiksITE9PT1hJiZhd2FpdCBhZGRCYWxhbmNlKGwuaXNzdWVyLGwsaSwiYmFsYW5jZXMiKSksITA9PT1hJiYobC5zdXBwbHk9Y2FsY3VsYXRlQmFsYW5jZShsLnN1cHBseSxpLGwucHJlY2lzaW9uLCEwKSwibnVsbCIhPT1lJiYobC5jaXJjdWxhdGluZ1N1cHBseT1jYWxjdWxhdGVCYWxhbmNlKGwuY2lyY3VsYXRpbmdTdXBwbHksaSxsLnByZWNpc2lvbiwhMCkpLGF3YWl0IGFwaS5kYi51cGRhdGUoInRva2VucyIsbCksYXBpLmVtaXQoInRyYW5zZmVyRnJvbUNvbnRyYWN0Iix7ZnJvbToidG9rZW5zIix0bzplLHN5bWJvbDp0LHF1YW50aXR5Oml9KSl9fX0sYWN0aW9ucy5pc3N1ZVRvQ29udHJhY3Q9YXN5bmMgYT0+e2NvbnN0e3RvOmUsc3ltYm9sOnQscXVhbnRpdHk6aSxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6bixjYWxsaW5nQ29udHJhY3RJbmZvOnN9PWE7dmFyIG89Im51bGwiPT09YXBpLnNlbmRlciYmLTEhPT1WRVJJRklFRF9JU1NVRVJTLmluZGV4T2Yocy5uYW1lKTtpZihvfHxhcGkuYXNzZXJ0KCEwPT09biwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQoZSYmInN0cmluZyI9PXR5cGVvZiBlJiZ0JiYic3RyaW5nIj09dHlwZW9mIHQmJmkmJiJzdHJpbmciPT10eXBlb2YgaSYmIWFwaS5CaWdOdW1iZXIoaSkuaXNOYU4oKSwiaW52YWxpZCBwYXJhbXMiKSl7YT1lLnRyaW0oKTtjb25zdCBsPWF3YWl0IGFwaS5kYi5maW5kT25lKCJ0b2tlbnMiLHtzeW1ib2w6dH0pO2FwaS5hc3NlcnQobnVsbCE9PWwsInN5bWJvbCBkb2VzIG5vdCBleGlzdCIpJiZhcGkuYXNzZXJ0KG98fGwuaXNzdWVyPT09YXBpLnNlbmRlciwibm90IGFsbG93ZWQgdG8gaXNzdWUgdG9rZW5zIikmJmFwaS5hc3NlcnQoY291bnREZWNpbWFscyhpKTw9bC5wcmVjaXNpb24sInN5bWJvbCBwcmVjaXNpb24gbWlzbWF0Y2giKSYmYXBpLmFzc2VydChhcGkuQmlnTnVtYmVyKGkpLmd0KDApLCJtdXN0IGlzc3VlIHBvc2l0aXZlIHF1YW50aXR5IikmJmFwaS5hc3NlcnQoYXBpLkJpZ051bWJlcihsLm1heFN1cHBseSkubWludXMobC5zdXBwbHkpLmd0ZShpKSwicXVhbnRpdHkgZXhjZWVkcyBhdmFpbGFibGUgc3VwcGx5IikmJmFwaS5hc3NlcnQoMzw9YS5sZW5ndGgmJmEubGVuZ3RoPD01MCwiaW52YWxpZCB0byIpJiYhMD09PWF3YWl0IGFkZEJhbGFuY2UoYSxsLGksImNvbnRyYWN0c0JhbGFuY2VzIikmJihsLnN1cHBseT1jYWxjdWxhdGVCYWxhbmNlKGwuc3VwcGx5LGksbC5wcmVjaXNpb24sITApLCJudWxsIiE9PWEmJihsLmNpcmN1bGF0aW5nU3VwcGx5PWNhbGN1bGF0ZUJhbGFuY2UobC5jaXJjdWxhdGluZ1N1cHBseSxpLGwucHJlY2lzaW9uLCEwKSksYXdhaXQgYXBpLmRiLnVwZGF0ZSgidG9rZW5zIixsKSxhcGkuZW1pdCgiaXNzdWVUb0NvbnRyYWN0Iix7ZnJvbToidG9rZW5zIix0bzphLHN5bWJvbDp0LHF1YW50aXR5Oml9KSl9fSxhY3Rpb25zLnRyYW5zZmVyPWFzeW5jIGE9Pntjb25zdHt0bzplLHN5bWJvbDp0LHF1YW50aXR5OmksaXNTaWduZWRXaXRoQWN0aXZlS2V5Om59PWE7aWYoYXBpLmFzc2VydCghMD09PW4sInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KGUmJiJzdHJpbmciPT10eXBlb2YgZSYmdCYmInN0cmluZyI9PXR5cGVvZiB0JiZpJiYic3RyaW5nIj09dHlwZW9mIGkmJiFhcGkuQmlnTnVtYmVyKGkpLmlzTmFOKCksImludmFsaWQgcGFyYW1zIikpe3ZhciBzPWUudHJpbSgpO2lmKGFwaS5hc3NlcnQocyE9PWFwaS5zZW5kZXIsImNhbm5vdCB0cmFuc2ZlciB0byBzZWxmIikpe3ZhcntibGFja2xpc3Q6YX09YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBhcmFtcyIse30pO2lmKGFwaS5hc3NlcnQoYXBpLmlzVmFsaWRBY2NvdW50TmFtZShzKSwiaW52YWxpZCB0byIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PWFbc10sYG5vdCBhbGxvd2VkIHRvIHNlbmQgdG8gJHtzfWApKXtjb25zdCBvPWF3YWl0IGFwaS5kYi5maW5kT25lKCJ0b2tlbnMiLHtzeW1ib2w6dH0pO2lmKGFwaS5hc3NlcnQobnVsbCE9PW8sInN5bWJvbCBkb2VzIG5vdCBleGlzdCIpJiZhcGkuYXNzZXJ0KGNvdW50RGVjaW1hbHMoaSk8PW8ucHJlY2lzaW9uLCJzeW1ib2wgcHJlY2lzaW9uIG1pc21hdGNoIikmJmFwaS5hc3NlcnQoYXBpLkJpZ051bWJlcihpKS5ndCgwKSwibXVzdCB0cmFuc2ZlciBwb3NpdGl2ZSBxdWFudGl0eSIpKWlmKGF3YWl0IHN1YkJhbGFuY2UoYXBpLnNlbmRlcixvLGksImJhbGFuY2VzIikpcmV0dXJuITE9PT1hd2FpdCBhZGRCYWxhbmNlKHMsbyxpLCJiYWxhbmNlcyIpPyhhd2FpdCBhZGRCYWxhbmNlKGFwaS5zZW5kZXIsbyxpLCJiYWxhbmNlcyIpLCExKTooIm51bGwiPT09cyYmKG8uY2lyY3VsYXRpbmdTdXBwbHk9Y2FsY3VsYXRlQmFsYW5jZShvLmNpcmN1bGF0aW5nU3VwcGx5LGksby5wcmVjaXNpb24sITEpLGF3YWl0IGFwaS5kYi51cGRhdGUoInRva2VucyIsbykpLGFwaS5lbWl0KCJ0cmFuc2ZlciIse2Zyb206YXBpLnNlbmRlcix0bzpzLHN5bWJvbDp0LHF1YW50aXR5Oml9KSwhMCl9fX1yZXR1cm4hMX0sYWN0aW9ucy50cmFuc2ZlclRvQ29udHJhY3Q9YXN5bmMgYT0+e2NvbnN0e2Zyb206ZSx0bzp0LHN5bWJvbDppLHF1YW50aXR5Om4saXNTaWduZWRXaXRoQWN0aXZlS2V5OnN9PWE7dmFyIG89dm9pZCAwPT09ZXx8Im51bGwiIT09YXBpLnNlbmRlcj9hcGkuc2VuZGVyOmU7aWYoYXBpLmFzc2VydCghMD09PXN8fCJudWxsIj09PWFwaS5zZW5kZXIsInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KHQmJiJzdHJpbmciPT10eXBlb2YgdCYmaSYmInN0cmluZyI9PXR5cGVvZiBpJiZuJiYic3RyaW5nIj09dHlwZW9mIG4mJiFhcGkuQmlnTnVtYmVyKG4pLmlzTmFOKCksImludmFsaWQgcGFyYW1zIikpe2E9dC50cmltKCkudG9Mb3dlckNhc2UoKTtpZihhcGkuYXNzZXJ0KGEhPT1vLCJjYW5ub3QgdHJhbnNmZXIgdG8gc2VsZiIpJiZhcGkuYXNzZXJ0KDM8PWEubGVuZ3RoJiZhLmxlbmd0aDw9NTAsImludmFsaWQgdG8iKSl7Y29uc3QgbD1hd2FpdCBhcGkuZGIuZmluZE9uZSgidG9rZW5zIix7c3ltYm9sOml9KTthcGkuYXNzZXJ0KG51bGwhPT1sLCJzeW1ib2wgZG9lcyBub3QgZXhpc3QiKSYmYXBpLmFzc2VydChjb3VudERlY2ltYWxzKG4pPD1sLnByZWNpc2lvbiwic3ltYm9sIHByZWNpc2lvbiBtaXNtYXRjaCIpJiZhcGkuYXNzZXJ0KGFwaS5CaWdOdW1iZXIobikuZ3QoMCksIm11c3QgdHJhbnNmZXIgcG9zaXRpdmUgcXVhbnRpdHkiKSYmYXdhaXQgc3ViQmFsYW5jZShvLGwsbiwiYmFsYW5jZXMiKSYmKCExPT09YXdhaXQgYWRkQmFsYW5jZShhLGwsbiwiY29udHJhY3RzQmFsYW5jZXMiKT9hd2FpdCBhZGRCYWxhbmNlKG8sbCxuLCJiYWxhbmNlcyIpOigibnVsbCI9PT1hJiYobC5jaXJjdWxhdGluZ1N1cHBseT1jYWxjdWxhdGVCYWxhbmNlKGwuY2lyY3VsYXRpbmdTdXBwbHksbixsLnByZWNpc2lvbiwhMSksYXdhaXQgYXBpLmRiLnVwZGF0ZSgidG9rZW5zIixsKSksYXBpLmVtaXQoInRyYW5zZmVyVG9Db250cmFjdCIse2Zyb206byx0bzphLHN5bWJvbDppLHF1YW50aXR5Om59KSkpfX19LGFjdGlvbnMudHJhbnNmZXJGcm9tQ29udHJhY3Q9YXN5bmMgYT0+e2lmKGFwaS5hc3NlcnQoIm51bGwiPT09YXBpLnNlbmRlciwibm90IGF1dGhvcml6ZWQiKSl7Y29uc3R7ZnJvbTppLHRvOm4sc3ltYm9sOnMscXVhbnRpdHk6byx0eXBlOmx9PWEscj1bInVzZXIiLCJjb250cmFjdCJdO2lmKGFwaS5hc3NlcnQobiYmInN0cmluZyI9PXR5cGVvZiBuJiZpJiYic3RyaW5nIj09dHlwZW9mIGkmJnMmJiJzdHJpbmciPT10eXBlb2YgcyYmbCYmci5pbmNsdWRlcyhsKSYmbyYmInN0cmluZyI9PXR5cGVvZiBvJiYhYXBpLkJpZ051bWJlcihvKS5pc05hTigpLCJpbnZhbGlkIHBhcmFtcyIpKXt2YXIgZT1uLnRyaW0oKSx0PSJ1c2VyIj09PWw/ImJhbGFuY2VzIjoiY29udHJhY3RzQmFsYW5jZXMiO2lmKGFwaS5hc3NlcnQoInVzZXIiPT09bHx8ImNvbnRyYWN0Ij09PWwmJmUhPT1pLCJjYW5ub3QgdHJhbnNmZXIgdG8gc2VsZiIpKXthPSJ1c2VyIj09PWw/YXBpLmlzVmFsaWRBY2NvdW50TmFtZShlKTozPD1lLmxlbmd0aCYmZS5sZW5ndGg8PTUwO2lmKGFwaS5hc3NlcnQoITA9PT1hLCJpbnZhbGlkIHRvIikpe2NvbnN0IHA9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInRva2VucyIse3N5bWJvbDpzfSk7YXBpLmFzc2VydChudWxsIT09cCwic3ltYm9sIGRvZXMgbm90IGV4aXN0IikmJmFwaS5hc3NlcnQoY291bnREZWNpbWFscyhvKTw9cC5wcmVjaXNpb24sInN5bWJvbCBwcmVjaXNpb24gbWlzbWF0Y2giKSYmYXBpLmFzc2VydChhcGkuQmlnTnVtYmVyKG8pLmd0KDApLCJtdXN0IHRyYW5zZmVyIHBvc2l0aXZlIHF1YW50aXR5IikmJmF3YWl0IHN1YkJhbGFuY2UoaSxwLG8sImNvbnRyYWN0c0JhbGFuY2VzIikmJighMT09PWF3YWl0IGFkZEJhbGFuY2UoZSxwLG8sdCk/YXdhaXQgYWRkQmFsYW5jZShpLHAsbywiY29udHJhY3RzQmFsYW5jZXMiKTooIm51bGwiPT09ZSYmKHAuY2lyY3VsYXRpbmdTdXBwbHk9Y2FsY3VsYXRlQmFsYW5jZShwLmNpcmN1bGF0aW5nU3VwcGx5LG8scC5wcmVjaXNpb24sITEpLGF3YWl0IGFwaS5kYi51cGRhdGUoInRva2VucyIscCkpLGFwaS5lbWl0KCJ0cmFuc2ZlckZyb21Db250cmFjdCIse2Zyb206aSx0bzplLHN5bWJvbDpzLHF1YW50aXR5Om99KSkpfX19fX07Y29uc3QgcHJvY2Vzc1Vuc3Rha2U9YXN5bmMgYT0+e3ZhcnthY2NvdW50OmUsc3ltYm9sOnQscXVhbnRpdHk6aSxxdWFudGl0eUxlZnQ6bixudW1iZXJUcmFuc2FjdGlvbnNMZWZ0OnN9PWE7Y29uc3Qgbz1hLGw9YXdhaXQgYXBpLmRiLmZpbmRPbmUoImJhbGFuY2VzIix7YWNjb3VudDplLHN5bWJvbDp0fSkscj1hd2FpdCBhcGkuZGIuZmluZE9uZSgidG9rZW5zIix7c3ltYm9sOnR9KTtsZXQgcD0wLGM9MDthcGkuYXNzZXJ0KG51bGwhPT1sLCJiYWxhbmNlIGRvZXMgbm90IGV4aXN0IikmJigxPT09cz8ocD1uLGF3YWl0IGFwaS5kYi5yZW1vdmUoInBlbmRpbmdVbnN0YWtlcyIsYSkpOihwPWFwaS5CaWdOdW1iZXIoaSkuZGl2aWRlZEJ5KHIubnVtYmVyVHJhbnNhY3Rpb25zKS50b0ZpeGVkKHIucHJlY2lzaW9uLGFwaS5CaWdOdW1iZXIuUk9VTkRfRE9XTiksby5xdWFudGl0eUxlZnQ9YXBpLkJpZ051bWJlcihvLnF1YW50aXR5TGVmdCkubWludXMocCkudG9GaXhlZChyLnByZWNpc2lvbiksLS1vLm51bWJlclRyYW5zYWN0aW9uc0xlZnQsYz0xPT09by5udW1iZXJUcmFuc2FjdGlvbnNMZWZ0P28ucXVhbnRpdHlMZWZ0OnAsby5uZXh0VHJhbnNhY3Rpb25UaW1lc3RhbXA9YXBpLkJpZ051bWJlcihvLm5leHRUcmFuc2FjdGlvblRpbWVzdGFtcCkucGx1cyhvLm1pbGxpc2VjUGVyUGVyaW9kKS50b051bWJlcigpLGF3YWl0IGFwaS5kYi51cGRhdGUoInBlbmRpbmdVbnN0YWtlcyIsbykpLGFwaS5CaWdOdW1iZXIocCkuZ3QoMCkmJihhPWwuYmFsYW5jZSxpPWwucGVuZGluZ1Vuc3Rha2UsbC5iYWxhbmNlPWNhbGN1bGF0ZUJhbGFuY2UobC5iYWxhbmNlLHAsci5wcmVjaXNpb24sITApLGwucGVuZGluZ1Vuc3Rha2U9Y2FsY3VsYXRlQmFsYW5jZShsLnBlbmRpbmdVbnN0YWtlLHAsci5wcmVjaXNpb24sITEpLGFwaS5hc3NlcnQoYXBpLkJpZ051bWJlcihsLnBlbmRpbmdVbnN0YWtlKS5sdChpKSYmYXBpLkJpZ051bWJlcihsLmJhbGFuY2UpLmd0KGEpLCJjYW5ub3Qgc3VidHJhY3QiKSYmKGFwaS5CaWdOdW1iZXIoYykuZ3QoMCkmJihsLnN0YWtlPWNhbGN1bGF0ZUJhbGFuY2UobC5zdGFrZSxjLHIucHJlY2lzaW9uLCExKSxyLnRvdGFsU3Rha2VkPWNhbGN1bGF0ZUJhbGFuY2Uoci50b3RhbFN0YWtlZCxjLHIucHJlY2lzaW9uLCExKSwiV09SS0VSQkVFIj09PXQmJmF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgid2l0bmVzc2VzIiwidXBkYXRlV2l0bmVzc2VzQXBwcm92YWxzIix7YWNjb3VudDplfSksYXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJtaW5pbmciLCJoYW5kbGVTdGFrZUNoYW5nZSIse2FjY291bnQ6ZSxzeW1ib2w6dCxxdWFudGl0eTphcGkuQmlnTnVtYmVyKGMpLm5lZ2F0ZWQoKX0pLGF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5mdW5kcyIsInVwZGF0ZVByb3Bvc2FsQXBwcm92YWxzIix7YWNjb3VudDplLHRva2VuOnJ9KSksYXdhaXQgYXBpLmRiLnVwZGF0ZSgiYmFsYW5jZXMiLGwpLGF3YWl0IGFwaS5kYi51cGRhdGUoInRva2VucyIsciksYXBpLmVtaXQoInVuc3Rha2UiLHthY2NvdW50OmUsc3ltYm9sOnQscXVhbnRpdHk6cH0pKSkpfTthY3Rpb25zLmNoZWNrUGVuZGluZ1Vuc3Rha2VzPWFzeW5jKCk9PntpZihhcGkuYXNzZXJ0KCJudWxsIj09PWFwaS5zZW5kZXIsIm5vdCBhdXRob3JpemVkIikpe2NvbnN0IG49bmV3IERhdGUoYCR7YXBpLmhpdmVCbG9ja1RpbWVzdGFtcH0uMDAwWmApO3ZhciBhPW4uZ2V0VGltZSgpO2xldCBlPWF3YWl0IGFwaS5kYi5maW5kKCJwZW5kaW5nVW5zdGFrZXMiLHtuZXh0VHJhbnNhY3Rpb25UaW1lc3RhbXA6eyRsdGU6YX19KSx0PWUubGVuZ3RoO2Zvcig7MDx0Oyl7Zm9yKGxldCBhPTA7YTx0O2ErPTEpe3ZhciBpPWVbYV07YXdhaXQgcHJvY2Vzc1Vuc3Rha2UoaSl9ZT1hd2FpdCBhcGkuZGIuZmluZCgicGVuZGluZ1Vuc3Rha2VzIix7bmV4dFRyYW5zYWN0aW9uVGltZXN0YW1wOnskbHRlOmF9fSksdD1lLmxlbmd0aH19fSxhY3Rpb25zLmVuYWJsZVN0YWtpbmc9YXN5bmMgYT0+e3ZhcntzeW1ib2w6ZSx1bnN0YWtpbmdDb29sZG93bjp0LG51bWJlclRyYW5zYWN0aW9uczppLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTpufT1hLHtlbmFibGVTdGFraW5nRmVlOnN9PWF3YWl0IGFwaS5kYi5maW5kT25lKCJwYXJhbXMiLHt9KSxhPWF3YWl0IGFwaS5kYi5maW5kT25lKCJiYWxhbmNlcyIse2FjY291bnQ6YXBpLnNlbmRlcixzeW1ib2w6IkJFRSJ9KSxhPWEmJmFwaS5CaWdOdW1iZXIoYS5iYWxhbmNlKS5ndGUocyksYT12b2lkIDA9PT1zfHxhcGkuQmlnTnVtYmVyKHMpLmx0ZSgwKXx8YTtpZihhcGkuYXNzZXJ0KGEsInlvdSBtdXN0IGhhdmUgZW5vdWdoIHRva2VucyB0byBjb3ZlciAgZmVlcyIpJiZhcGkuYXNzZXJ0KCEwPT09biwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQoZSYmInN0cmluZyI9PXR5cGVvZiBlLCJpbnZhbGlkIHN5bWJvbCIpJiZhcGkuYXNzZXJ0KHQmJk51bWJlci5pc0ludGVnZXIodCkmJjA8dCYmdDw9MTgyNTAsInVuc3Rha2luZ0Nvb2xkb3duIG11c3QgYmUgYW4gaW50ZWdlciBiZXR3ZWVuIDEgYW5kIDE4MjUwIikmJmFwaS5hc3NlcnQoaSYmTnVtYmVyLmlzSW50ZWdlcihpKSYmMDxpJiZpPD0xODI1MCwibnVtYmVyVHJhbnNhY3Rpb25zIG11c3QgYmUgYW4gaW50ZWdlciBiZXR3ZWVuIDEgYW5kIDE4MjUwIikpe2NvbnN0IG89YXdhaXQgYXBpLmRiLmZpbmRPbmUoInRva2VucyIse3N5bWJvbDplfSk7YXBpLmFzc2VydChudWxsIT09bywic3ltYm9sIGRvZXMgbm90IGV4aXN0IikmJmFwaS5hc3NlcnQoby5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1vLnN0YWtpbmdFbmFibGVkfHwhMT09PW8uc3Rha2luZ0VuYWJsZWQsInN0YWtpbmcgYWxyZWFkeSBlbmFibGVkIikmJihvLnN0YWtpbmdFbmFibGVkPSEwLG8udG90YWxTdGFrZWQ9IjAiLG8udW5zdGFraW5nQ29vbGRvd249dCxvLm51bWJlclRyYW5zYWN0aW9ucz1pLGF3YWl0IGFwaS5kYi51cGRhdGUoInRva2VucyIsbyksYXBpLkJpZ051bWJlcihzKS5ndCgwKSYmYXdhaXQgYWN0aW9ucy50cmFuc2Zlcih7dG86Im51bGwiLHN5bWJvbDoiQkVFIixxdWFudGl0eTpzLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTpufSkpfX0sYWN0aW9ucy5zdGFrZT1hc3luYyBhPT57Y29uc3R7c3ltYm9sOmUscXVhbnRpdHk6dCx0bzppLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTpufT1hO3ZhciBzO2FwaS5hc3NlcnQoITA9PT1uLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChlJiYic3RyaW5nIj09dHlwZW9mIGUmJmkmJiJzdHJpbmciPT10eXBlb2YgaSYmdCYmInN0cmluZyI9PXR5cGVvZiB0JiYhYXBpLkJpZ051bWJlcih0KS5pc05hTigpLCJpbnZhbGlkIHBhcmFtcyIpJiYocz1hd2FpdCBhcGkuZGIuZmluZE9uZSgidG9rZW5zIix7c3ltYm9sOmV9KSxhPWkudHJpbSgpLGFwaS5hc3NlcnQoYXBpLmlzVmFsaWRBY2NvdW50TmFtZShhKSwiaW52YWxpZCB0byIpJiZhcGkuYXNzZXJ0KG51bGwhPT1zLCJzeW1ib2wgZG9lcyBub3QgZXhpc3QiKSYmYXBpLmFzc2VydChjb3VudERlY2ltYWxzKHQpPD1zLnByZWNpc2lvbiwic3ltYm9sIHByZWNpc2lvbiBtaXNtYXRjaCIpJiZhcGkuYXNzZXJ0KCEwPT09cy5zdGFraW5nRW5hYmxlZCwic3Rha2luZyBub3QgZW5hYmxlZCIpJiZhcGkuYXNzZXJ0KGFwaS5CaWdOdW1iZXIodCkuZ3QoMCksIm11c3Qgc3Rha2UgcG9zaXRpdmUgcXVhbnRpdHkiKSYmYXdhaXQgc3ViQmFsYW5jZShhcGkuc2VuZGVyLHMsdCwiYmFsYW5jZXMiKSYmKCExPT09YXdhaXQgYWRkU3Rha2UoYSxzLHQpP2F3YWl0IGFkZEJhbGFuY2UoYXBpLnNlbmRlcixzLHQsImJhbGFuY2VzIik6KGFwaS5lbWl0KCJzdGFrZSIse2FjY291bnQ6YSxzeW1ib2w6ZSxxdWFudGl0eTp0fSksIldPUktFUkJFRSI9PT1lJiZhd2FpdCBhcGkuZXhlY3V0ZVNtYXJ0Q29udHJhY3QoIndpdG5lc3NlcyIsInVwZGF0ZVdpdG5lc3Nlc0FwcHJvdmFscyIse2FjY291bnQ6YX0pLGF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgibWluaW5nIiwiaGFuZGxlU3Rha2VDaGFuZ2UiLHthY2NvdW50OmEsc3ltYm9sOmUscXVhbnRpdHk6dH0pLGF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5mdW5kcyIsInVwZGF0ZVByb3Bvc2FsQXBwcm92YWxzIix7YWNjb3VudDphLHRva2VuOnN9KSkpKX0sYWN0aW9ucy5zdGFrZUZyb21Db250cmFjdD1hc3luYyBhPT57Y29uc3R7c3ltYm9sOmUscXVhbnRpdHk6dCx0bzppLGNhbGxpbmdDb250cmFjdEluZm86bn09YTt2YXIgcztuJiZhcGkuYXNzZXJ0KGUmJiJzdHJpbmciPT10eXBlb2YgZSYmaSYmInN0cmluZyI9PXR5cGVvZiBpJiZ0JiYic3RyaW5nIj09dHlwZW9mIHQmJiFhcGkuQmlnTnVtYmVyKHQpLmlzTmFOKCksImludmFsaWQgcGFyYW1zIikmJihzPWF3YWl0IGFwaS5kYi5maW5kT25lKCJ0b2tlbnMiLHtzeW1ib2w6ZX0pLGE9aS50cmltKCksYXBpLmFzc2VydChhcGkuaXNWYWxpZEFjY291bnROYW1lKGEpLCJpbnZhbGlkIHRvIikmJmFwaS5hc3NlcnQobnVsbCE9PXMsInN5bWJvbCBkb2VzIG5vdCBleGlzdCIpJiZhcGkuYXNzZXJ0KGNvdW50RGVjaW1hbHModCk8PXMucHJlY2lzaW9uLCJzeW1ib2wgcHJlY2lzaW9uIG1pc21hdGNoIikmJmFwaS5hc3NlcnQoITA9PT1zLnN0YWtpbmdFbmFibGVkLCJzdGFraW5nIG5vdCBlbmFibGVkIikmJmFwaS5hc3NlcnQoYXBpLkJpZ051bWJlcih0KS5ndCgwKSwibXVzdCBzdGFrZSBwb3NpdGl2ZSBxdWFudGl0eSIpJiZhd2FpdCBzdWJCYWxhbmNlKG4ubmFtZSxzLHQsImNvbnRyYWN0c0JhbGFuY2VzIikmJighMT09PWF3YWl0IGFkZFN0YWtlKGEscyx0KT9hd2FpdCBhZGRCYWxhbmNlKG4ubmFtZSxzLHQsImJhbGFuY2VzIik6KGFwaS5lbWl0KCJzdGFrZUZyb21Db250cmFjdCIse2FjY291bnQ6YSxzeW1ib2w6ZSxxdWFudGl0eTp0fSksIldPUktFUkJFRSI9PT1lJiZhd2FpdCBhcGkuZXhlY3V0ZVNtYXJ0Q29udHJhY3QoIndpdG5lc3NlcyIsInVwZGF0ZVdpdG5lc3Nlc0FwcHJvdmFscyIse2FjY291bnQ6YX0pLGF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgibWluaW5nIiwiaGFuZGxlU3Rha2VDaGFuZ2UiLHthY2NvdW50OmEsc3ltYm9sOmUscXVhbnRpdHk6dH0pLGF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5mdW5kcyIsInVwZGF0ZVByb3Bvc2FsQXBwcm92YWxzIix7YWNjb3VudDphLHRva2VuOnN9KSkpKX07Y29uc3QgdmFsaWRhdGVBdmFpbGFibGVTdGFrZT1hc3luYyhhLHQsZSk9PntsZXQgaT1hcGkuQmlnTnVtYmVyKGEuc3Rha2UpO3JldHVybiBhd2FpdCBmaW5kQW5kUHJvY2Vzc0FsbCgicGVuZGluZ1Vuc3Rha2VzIix7c3ltYm9sOmEuc3ltYm9sLGFjY291bnQ6YS5hY2NvdW50fSxhc3luYyBhPT57dmFyIGU7MTxhLm51bWJlclRyYW5zYWN0aW9uc0xlZnQmJihlPWFwaS5CaWdOdW1iZXIoYS5xdWFudGl0eSkuZGl2aWRlZEJ5KHQubnVtYmVyVHJhbnNhY3Rpb25zKS50b0ZpeGVkKHQucHJlY2lzaW9uLGFwaS5CaWdOdW1iZXIuUk9VTkRfRE9XTiksaT1pLm1pbnVzKGEucXVhbnRpdHlMZWZ0KS5wbHVzKGUpKX0pLGFwaS5hc3NlcnQoaS5ndGUoZSksIm92ZXJkcmF3biBzdGFrZSIpfSxzdGFydFVuc3Rha2U9YXN5bmMoYSxlLHQpPT57Y29uc3QgaT1hd2FpdCBhcGkuZGIuZmluZE9uZSgiYmFsYW5jZXMiLHthY2NvdW50OmEsc3ltYm9sOmUuc3ltYm9sfSk7aWYoIWFwaS5hc3NlcnQobnVsbCE9PWksImJhbGFuY2UgZG9lcyBub3QgZXhpc3QiKXx8IWF3YWl0IHZhbGlkYXRlQXZhaWxhYmxlU3Rha2UoaSxlLHQpKXJldHVybiExO3ZhciBuPWkuc3Rha2Uscz1pLnBlbmRpbmdVbnN0YWtlLG89MTxlLm51bWJlclRyYW5zYWN0aW9ucz9hcGkuQmlnTnVtYmVyKHQpLmRpdmlkZWRCeShlLm51bWJlclRyYW5zYWN0aW9ucykudG9GaXhlZChlLnByZWNpc2lvbixhcGkuQmlnTnVtYmVyLlJPVU5EX0RPV04pOnQ7aS5zdGFrZT1jYWxjdWxhdGVCYWxhbmNlKGkuc3Rha2UsbyxlLnByZWNpc2lvbiwhMSksaS5wZW5kaW5nVW5zdGFrZT1jYWxjdWxhdGVCYWxhbmNlKGkucGVuZGluZ1Vuc3Rha2UsdCxlLnByZWNpc2lvbiwhMCksYXBpLmFzc2VydChhcGkuQmlnTnVtYmVyKGkuc3Rha2UpLmx0KG4pJiZhcGkuQmlnTnVtYmVyKGkucGVuZGluZ1Vuc3Rha2UpLmd0KHMpLCJjYW5ub3Qgc3VidHJhY3QiKSYmKGF3YWl0IGFwaS5kYi51cGRhdGUoImJhbGFuY2VzIixpKSxlLnRvdGFsU3Rha2VkPWNhbGN1bGF0ZUJhbGFuY2UoZS50b3RhbFN0YWtlZCxvLGUucHJlY2lzaW9uLCExKSxhd2FpdCBhcGkuZGIudXBkYXRlKCJ0b2tlbnMiLGUpLCJXT1JLRVJCRUUiPT09ZS5zeW1ib2wmJmF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgid2l0bmVzc2VzIiwidXBkYXRlV2l0bmVzc2VzQXBwcm92YWxzIix7YWNjb3VudDphfSksYXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJtaW5pbmciLCJoYW5kbGVTdGFrZUNoYW5nZSIse2FjY291bnQ6YSxzeW1ib2w6ZS5zeW1ib2wscXVhbnRpdHk6YXBpLkJpZ051bWJlcihvKS5uZWdhdGVkKCl9KSxhd2FpdCBhcGkuZXhlY3V0ZVNtYXJ0Q29udHJhY3QoInRva2VuZnVuZHMiLCJ1cGRhdGVQcm9wb3NhbEFwcHJvdmFscyIse2FjY291bnQ6YSx0b2tlbjplfSkpO2NvbnN0IGw9bmV3IERhdGUoYCR7YXBpLmhpdmVCbG9ja1RpbWVzdGFtcH0uMDAwWmApO3M9MjQqZS51bnN0YWtpbmdDb29sZG93biozNjAwKjFlMyxvPWFwaS5CaWdOdW1iZXIocykuZGl2aWRlZEJ5KGUubnVtYmVyVHJhbnNhY3Rpb25zKS5pbnRlZ2VyVmFsdWUoYXBpLkJpZ051bWJlci5ST1VORF9ET1dOKSxzPWFwaS5CaWdOdW1iZXIobC5nZXRUaW1lKCkpLnBsdXMobykudG9OdW1iZXIoKSxvPXthY2NvdW50OmEsc3ltYm9sOmUuc3ltYm9sLHF1YW50aXR5OnQscXVhbnRpdHlMZWZ0OnQsbmV4dFRyYW5zYWN0aW9uVGltZXN0YW1wOnMsbnVtYmVyVHJhbnNhY3Rpb25zTGVmdDplLm51bWJlclRyYW5zYWN0aW9ucyxtaWxsaXNlY1BlclBlcmlvZDpvLHR4SUQ6YXBpLnRyYW5zYWN0aW9uSWR9O3JldHVybiBhd2FpdCBhcGkuZGIuaW5zZXJ0KCJwZW5kaW5nVW5zdGFrZXMiLG8pLCEwfTthY3Rpb25zLnVuc3Rha2U9YXN5bmMgYT0+e3ZhcntzeW1ib2w6ZSxxdWFudGl0eTp0LGlzU2lnbmVkV2l0aEFjdGl2ZUtleTphfT1hO2FwaS5hc3NlcnQoITA9PT1hLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChlJiYic3RyaW5nIj09dHlwZW9mIGUmJnQmJiJzdHJpbmciPT10eXBlb2YgdCYmIWFwaS5CaWdOdW1iZXIodCkuaXNOYU4oKSwiaW52YWxpZCBwYXJhbXMiKSYmKGE9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInRva2VucyIse3N5bWJvbDplfSksYXBpLmFzc2VydChudWxsIT09YSwic3ltYm9sIGRvZXMgbm90IGV4aXN0IikmJmFwaS5hc3NlcnQoITA9PT1hLnN0YWtpbmdFbmFibGVkLCJzdGFraW5nIG5vdCBlbmFibGVkIikmJmFwaS5hc3NlcnQoY291bnREZWNpbWFscyh0KTw9YS5wcmVjaXNpb24sInN5bWJvbCBwcmVjaXNpb24gbWlzbWF0Y2giKSYmYXBpLmFzc2VydChhcGkuQmlnTnVtYmVyKHQpLmd0KDApLCJtdXN0IHVuc3Rha2UgcG9zaXRpdmUgcXVhbnRpdHkiKSYmYXdhaXQgc3RhcnRVbnN0YWtlKGFwaS5zZW5kZXIsYSx0KSYmYXBpLmVtaXQoInVuc3Rha2VTdGFydCIse2FjY291bnQ6YXBpLnNlbmRlcixzeW1ib2w6ZSxxdWFudGl0eTp0fSkpfTtjb25zdCBwcm9jZXNzQ2FuY2VsVW5zdGFrZT1hc3luYyBhPT57dmFye2FjY291bnQ6ZSxzeW1ib2w6dCxxdWFudGl0eTppLHF1YW50aXR5TGVmdDpuLG51bWJlclRyYW5zYWN0aW9uc0xlZnQ6c309YTtjb25zdCBvPWF3YWl0IGFwaS5kYi5maW5kT25lKCJiYWxhbmNlcyIse2FjY291bnQ6ZSxzeW1ib2w6dH0pLGw9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInRva2VucyIse3N5bWJvbDp0fSk7aWYoYXBpLmFzc2VydChudWxsIT09bywiYmFsYW5jZSBkb2VzIG5vdCBleGlzdCIpJiZhcGkuYXNzZXJ0KGFwaS5CaWdOdW1iZXIoby5wZW5kaW5nVW5zdGFrZSkuZ3RlKG4pLCJvdmVyZHJhd24gcGVuZGluZ1Vuc3Rha2UiKSl7dmFyIHI9by5zdGFrZSxhPW8ucGVuZGluZ1Vuc3Rha2UsaT0xPHM/YXBpLkJpZ051bWJlcihpKS5kaXZpZGVkQnkobC5udW1iZXJUcmFuc2FjdGlvbnMpLnRvRml4ZWQobC5wcmVjaXNpb24sYXBpLkJpZ051bWJlci5ST1VORF9ET1dOKTpuO2lmKG8uc3Rha2U9Y2FsY3VsYXRlQmFsYW5jZShvLnN0YWtlLGksbC5wcmVjaXNpb24sITApLG8ucGVuZGluZ1Vuc3Rha2U9Y2FsY3VsYXRlQmFsYW5jZShvLnBlbmRpbmdVbnN0YWtlLG4sbC5wcmVjaXNpb24sITEpLGFwaS5hc3NlcnQoYXBpLkJpZ051bWJlcihvLnBlbmRpbmdVbnN0YWtlKS5sdChhKSYmYXBpLkJpZ051bWJlcihvLnN0YWtlKS5ndChyKSwiY2Fubm90IHN1YnRyYWN0IikpcmV0dXJuIGF3YWl0IGFwaS5kYi51cGRhdGUoImJhbGFuY2VzIixvKSxsLnRvdGFsU3Rha2VkPWNhbGN1bGF0ZUJhbGFuY2UobC50b3RhbFN0YWtlZCxpLGwucHJlY2lzaW9uLCEwKSxhd2FpdCBhcGkuZGIudXBkYXRlKCJ0b2tlbnMiLGwpLGFwaS5lbWl0KCJ1bnN0YWtlQ2FuY2VsIix7YWNjb3VudDplLHN5bWJvbDp0LHF1YW50aXR5Om59KSwiV09SS0VSQkVFIj09PXQmJmF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgid2l0bmVzc2VzIiwidXBkYXRlV2l0bmVzc2VzQXBwcm92YWxzIix7YWNjb3VudDplfSksYXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJtaW5pbmciLCJoYW5kbGVTdGFrZUNoYW5nZSIse2FjY291bnQ6ZSxzeW1ib2w6dCxxdWFudGl0eTppfSksYXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJ0b2tlbmZ1bmRzIiwidXBkYXRlUHJvcG9zYWxBcHByb3ZhbHMiLHthY2NvdW50OmUsdG9rZW46bH0pLCEwfXJldHVybiExfTthY3Rpb25zLmNhbmNlbFVuc3Rha2U9YXN5bmMgYT0+e3Zhcnt0eElEOmUsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmF9PWE7YXBpLmFzc2VydCghMD09PWEsInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KGUmJiJzdHJpbmciPT10eXBlb2YgZSwiaW52YWxpZCBwYXJhbXMiKSYmKGU9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBlbmRpbmdVbnN0YWtlcyIse2FjY291bnQ6YXBpLnNlbmRlcix0eElEOmV9KSxhcGkuYXNzZXJ0KGUsInVuc3Rha2UgZG9lcyBub3QgZXhpc3QiKSYmYXdhaXQgcHJvY2Vzc0NhbmNlbFVuc3Rha2UoZSkmJmF3YWl0IGFwaS5kYi5yZW1vdmUoInBlbmRpbmdVbnN0YWtlcyIsZSkpfSxhY3Rpb25zLmVuYWJsZURlbGVnYXRpb249YXN5bmMgYT0+e3ZhcntzeW1ib2w6ZSx1bmRlbGVnYXRpb25Db29sZG93bjp0LGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppfT1hLHtlbmFibGVEZWxlZ2F0aW9uRmVlOm59PWF3YWl0IGFwaS5kYi5maW5kT25lKCJwYXJhbXMiLHt9KSxhPWF3YWl0IGFwaS5kYi5maW5kT25lKCJiYWxhbmNlcyIse2FjY291bnQ6YXBpLnNlbmRlcixzeW1ib2w6IkJFRSJ9KSxhPWEmJmFwaS5CaWdOdW1iZXIoYS5iYWxhbmNlKS5ndGUobiksYT12b2lkIDA9PT1ufHxhcGkuQmlnTnVtYmVyKG4pLmx0ZSgwKXx8YTtpZihhcGkuYXNzZXJ0KGEsInlvdSBtdXN0IGhhdmUgZW5vdWdoIHRva2VucyB0byBjb3ZlciAgZmVlcyIpJiZhcGkuYXNzZXJ0KCEwPT09aSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQoZSYmInN0cmluZyI9PXR5cGVvZiBlLCJpbnZhbGlkIHN5bWJvbCIpJiZhcGkuYXNzZXJ0KHQmJk51bWJlci5pc0ludGVnZXIodCkmJjA8dCYmdDw9MTgyNTAsInVuZGVsZWdhdGlvbkNvb2xkb3duIG11c3QgYmUgYW4gaW50ZWdlciBiZXR3ZWVuIDEgYW5kIDE4MjUwIikpe2NvbnN0IHM9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInRva2VucyIse3N5bWJvbDplfSk7YXBpLmFzc2VydChudWxsIT09cywic3ltYm9sIGRvZXMgbm90IGV4aXN0IikmJmFwaS5hc3NlcnQocy5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSYmYXBpLmFzc2VydCghMD09PXMuc3Rha2luZ0VuYWJsZWQsInN0YWtpbmcgbm90IGVuYWJsZWQiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1zLmRlbGVnYXRpb25FbmFibGVkfHwhMT09PXMuZGVsZWdhdGlvbkVuYWJsZWQsImRlbGVnYXRpb24gYWxyZWFkeSBlbmFibGVkIikmJihzLmRlbGVnYXRpb25FbmFibGVkPSEwLHMudW5kZWxlZ2F0aW9uQ29vbGRvd249dCxhd2FpdCBhcGkuZGIudXBkYXRlKCJ0b2tlbnMiLHMpLGFwaS5CaWdOdW1iZXIobikuZ3QoMCkmJmF3YWl0IGFjdGlvbnMudHJhbnNmZXIoe3RvOiJudWxsIixzeW1ib2w6IkJFRSIscXVhbnRpdHk6bixpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aX0pKX19LGFjdGlvbnMuZGVsZWdhdGU9YXN5bmMgdD0+e2NvbnN0e3N5bWJvbDppLHF1YW50aXR5Om4sdG86YSxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6ZX09dDtpZihhcGkuYXNzZXJ0KCEwPT09ZSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQoaSYmInN0cmluZyI9PXR5cGVvZiBpJiZhJiYic3RyaW5nIj09dHlwZW9mIGEmJm4mJiJzdHJpbmciPT10eXBlb2YgbiYmIWFwaS5CaWdOdW1iZXIobikuaXNOYU4oKSwiaW52YWxpZCBwYXJhbXMiKSl7dmFyIHM9YS50cmltKCk7aWYoYXBpLmFzc2VydChhcGkuaXNWYWxpZEFjY291bnROYW1lKHMpLCJpbnZhbGlkIHRvIikpe3ZhciBvPWF3YWl0IGFwaS5kYi5maW5kT25lKCJ0b2tlbnMiLHtzeW1ib2w6aX0pO2lmKGFwaS5hc3NlcnQobnVsbCE9PW8sInN5bWJvbCBkb2VzIG5vdCBleGlzdCIpJiZhcGkuYXNzZXJ0KGNvdW50RGVjaW1hbHMobik8PW8ucHJlY2lzaW9uLCJzeW1ib2wgcHJlY2lzaW9uIG1pc21hdGNoIikmJmFwaS5hc3NlcnQoITA9PT1vLmRlbGVnYXRpb25FbmFibGVkLCJkZWxlZ2F0aW9uIG5vdCBlbmFibGVkIikmJmFwaS5hc3NlcnQocyE9PWFwaS5zZW5kZXIsImNhbm5vdCBkZWxlZ2F0ZSB0byB5b3Vyc2VsZiIpJiZhcGkuYXNzZXJ0KGFwaS5CaWdOdW1iZXIobikuZ3QoMCksIm11c3QgZGVsZWdhdGUgcG9zaXRpdmUgcXVhbnRpdHkiKSl7Y29uc3QgbD1hd2FpdCBhcGkuZGIuZmluZE9uZSgiYmFsYW5jZXMiLHthY2NvdW50OmFwaS5zZW5kZXIsc3ltYm9sOml9KTtpZihhcGkuYXNzZXJ0KG51bGwhPT1sLCJiYWxhbmNlRnJvbSBkb2VzIG5vdCBleGlzdCIpJiZhd2FpdCB2YWxpZGF0ZUF2YWlsYWJsZVN0YWtlKGwsbyxuKSl7dm9pZCAwPT09bC5zdGFrZT8obC5zdGFrZT0iMCIsbC5wZW5kaW5nVW5zdGFrZT0iMCIsbC5kZWxlZ2F0aW9uc0luPSIwIixsLmRlbGVnYXRpb25zT3V0PSIwIixsLnBlbmRpbmdVbmRlbGVnYXRpb25zPSIwIik6dm9pZCAwPT09bC5kZWxlZ2F0aW9uc0luJiYobC5kZWxlZ2F0aW9uc0luPSIwIixsLmRlbGVnYXRpb25zT3V0PSIwIixsLnBlbmRpbmdVbmRlbGVnYXRpb25zPSIwIixsLmRlbGVnYXRlZFN0YWtlJiYoZGVsZXRlIGwuZGVsZWdhdGVkU3Rha2UsZGVsZXRlIGwucmVjZWl2ZWRTdGFrZSkpO2xldCBhPWF3YWl0IGFwaS5kYi5maW5kT25lKCJiYWxhbmNlcyIse2FjY291bnQ6cyxzeW1ib2w6aX0pO251bGw9PT1hPyhhPWJhbGFuY2VUZW1wbGF0ZSxhLmFjY291bnQ9cyxhLnN5bWJvbD1pLGE9YXdhaXQgYXBpLmRiLmluc2VydCgiYmFsYW5jZXMiLGEpKTp2b2lkIDA9PT1hLnN0YWtlPyhhLnN0YWtlPSIwIixhLnBlbmRpbmdVbnN0YWtlPSIwIixhLmRlbGVnYXRpb25zSW49IjAiLGEuZGVsZWdhdGlvbnNPdXQ9IjAiLGEucGVuZGluZ1VuZGVsZWdhdGlvbnM9IjAiKTp2b2lkIDA9PT1hLmRlbGVnYXRpb25zSW4mJihhLmRlbGVnYXRpb25zSW49IjAiLGEuZGVsZWdhdGlvbnNPdXQ9IjAiLGEucGVuZGluZ1VuZGVsZWdhdGlvbnM9IjAiLGEuZGVsZWdhdGVkU3Rha2UmJihkZWxldGUgYS5kZWxlZ2F0ZWRTdGFrZSxkZWxldGUgYS5yZWNlaXZlZFN0YWtlKSk7bGV0IGU9YXdhaXQgYXBpLmRiLmZpbmRPbmUoImRlbGVnYXRpb25zIix7dG86cyxmcm9tOmFwaS5zZW5kZXIsc3ltYm9sOml9KTtjb25zdCByPW5ldyBEYXRlKGAke2FwaS5oaXZlQmxvY2tUaW1lc3RhbXB9LjAwMFpgKTt0PXIuZ2V0VGltZSgpO251bGw9PWU/KGwuc3Rha2U9Y2FsY3VsYXRlQmFsYW5jZShsLnN0YWtlLG4sby5wcmVjaXNpb24sITEpLGwuZGVsZWdhdGlvbnNPdXQ9Y2FsY3VsYXRlQmFsYW5jZShsLmRlbGVnYXRpb25zT3V0LG4sby5wcmVjaXNpb24sITApLGF3YWl0IGFwaS5kYi51cGRhdGUoImJhbGFuY2VzIixsKSxhLmRlbGVnYXRpb25zSW49Y2FsY3VsYXRlQmFsYW5jZShhLmRlbGVnYXRpb25zSW4sbixvLnByZWNpc2lvbiwhMCksYXdhaXQgYXBpLmRiLnVwZGF0ZSgiYmFsYW5jZXMiLGEpLGU9e30sZS5mcm9tPWFwaS5zZW5kZXIsZS50bz1zLGUuc3ltYm9sPWksZS5xdWFudGl0eT1uLGUuY3JlYXRlZD10LGUudXBkYXRlZD10LGF3YWl0IGFwaS5kYi5pbnNlcnQoImRlbGVnYXRpb25zIixlKSk6KGwuc3Rha2U9Y2FsY3VsYXRlQmFsYW5jZShsLnN0YWtlLG4sby5wcmVjaXNpb24sITEpLGwuZGVsZWdhdGlvbnNPdXQ9Y2FsY3VsYXRlQmFsYW5jZShsLmRlbGVnYXRpb25zT3V0LG4sby5wcmVjaXNpb24sITApLGF3YWl0IGFwaS5kYi51cGRhdGUoImJhbGFuY2VzIixsKSxhLmRlbGVnYXRpb25zSW49Y2FsY3VsYXRlQmFsYW5jZShhLmRlbGVnYXRpb25zSW4sbixvLnByZWNpc2lvbiwhMCksYXdhaXQgYXBpLmRiLnVwZGF0ZSgiYmFsYW5jZXMiLGEpLGUucXVhbnRpdHk9Y2FsY3VsYXRlQmFsYW5jZShlLnF1YW50aXR5LG4sby5wcmVjaXNpb24sITApLGUudXBkYXRlZD10LGF3YWl0IGFwaS5kYi51cGRhdGUoImRlbGVnYXRpb25zIixlKSksYXBpLmVtaXQoImRlbGVnYXRlIix7dG86cyxzeW1ib2w6aSxxdWFudGl0eTpufSksIldPUktFUkJFRSI9PT1pJiYoYXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJ3aXRuZXNzZXMiLCJ1cGRhdGVXaXRuZXNzZXNBcHByb3ZhbHMiLHthY2NvdW50OmFwaS5zZW5kZXJ9KSxhd2FpdCBhcGkuZXhlY3V0ZVNtYXJ0Q29udHJhY3QoIndpdG5lc3NlcyIsInVwZGF0ZVdpdG5lc3Nlc0FwcHJvdmFscyIse2FjY291bnQ6c30pKSxhd2FpdCBhcGkuZXhlY3V0ZVNtYXJ0Q29udHJhY3QoIm1pbmluZyIsImhhbmRsZVN0YWtlQ2hhbmdlIix7YWNjb3VudDpzLHN5bWJvbDppLHF1YW50aXR5Om4sZGVsZWdhdGVkOiEwfSksYXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJtaW5pbmciLCJoYW5kbGVTdGFrZUNoYW5nZSIse2FjY291bnQ6YXBpLnNlbmRlcixzeW1ib2w6aSxxdWFudGl0eTphcGkuQmlnTnVtYmVyKG4pLm5lZ2F0ZWQoKX0pLGF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5mdW5kcyIsInVwZGF0ZVByb3Bvc2FsQXBwcm92YWxzIix7YWNjb3VudDphcGkuc2VuZGVyLHRva2VuOm99KSxhd2FpdCBhcGkuZXhlY3V0ZVNtYXJ0Q29udHJhY3QoInRva2VuZnVuZHMiLCJ1cGRhdGVQcm9wb3NhbEFwcHJvdmFscyIse2FjY291bnQ6cyx0b2tlbjpvfSl9fX19fSxhY3Rpb25zLnVuZGVsZWdhdGU9YXN5bmMgYT0+e2NvbnN0e3N5bWJvbDplLHF1YW50aXR5OnQsZnJvbTppLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTpufT1hO2lmKGFwaS5hc3NlcnQoITA9PT1uLCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChlJiYic3RyaW5nIj09dHlwZW9mIGUmJmkmJiJzdHJpbmciPT10eXBlb2YgaSYmdCYmInN0cmluZyI9PXR5cGVvZiB0JiYhYXBpLkJpZ051bWJlcih0KS5pc05hTigpLCJpbnZhbGlkIHBhcmFtcyIpKXt2YXIgcz1pLnRyaW0oKTtpZihhcGkuYXNzZXJ0KDM8PXMubGVuZ3RoJiZzLmxlbmd0aDw9MTYsImludmFsaWQgZnJvbSIpKXt2YXIgbz1hd2FpdCBhcGkuZGIuZmluZE9uZSgidG9rZW5zIix7c3ltYm9sOmV9KTtpZihhcGkuYXNzZXJ0KG51bGwhPT1vLCJzeW1ib2wgZG9lcyBub3QgZXhpc3QiKSYmYXBpLmFzc2VydChjb3VudERlY2ltYWxzKHQpPD1vLnByZWNpc2lvbiwic3ltYm9sIHByZWNpc2lvbiBtaXNtYXRjaCIpJiZhcGkuYXNzZXJ0KCEwPT09by5kZWxlZ2F0aW9uRW5hYmxlZCwiZGVsZWdhdGlvbiBub3QgZW5hYmxlZCIpJiZhcGkuYXNzZXJ0KHMhPT1hcGkuc2VuZGVyLCJjYW5ub3QgdW5kZWxlZ2F0ZSBmcm9tIHlvdXJzZWxmIikmJmFwaS5hc3NlcnQoYXBpLkJpZ051bWJlcih0KS5ndCgwKSwibXVzdCB1bmRlbGVnYXRlIHBvc2l0aXZlIHF1YW50aXR5Iikpe2NvbnN0IGw9YXdhaXQgYXBpLmRiLmZpbmRPbmUoImJhbGFuY2VzIix7YWNjb3VudDphcGkuc2VuZGVyLHN5bWJvbDplfSk7aWYoYXBpLmFzc2VydChudWxsIT09bCwiYmFsYW5jZVRvIGRvZXMgbm90IGV4aXN0IikmJmFwaS5hc3NlcnQoYXBpLkJpZ051bWJlcihsLmRlbGVnYXRpb25zT3V0KS5ndGUodCksIm92ZXJkcmF3biBkZWxlZ2F0aW9uIikpe2NvbnN0IHI9YXdhaXQgYXBpLmRiLmZpbmRPbmUoImJhbGFuY2VzIix7YWNjb3VudDpzLHN5bWJvbDplfSk7aWYoYXBpLmFzc2VydChudWxsIT09ciwiYmFsYW5jZUZyb20gZG9lcyBub3QgZXhpc3QiKSl7Y29uc3QgcD1hd2FpdCBhcGkuZGIuZmluZE9uZSgiZGVsZWdhdGlvbnMiLHt0bzpzLGZyb206YXBpLnNlbmRlcixzeW1ib2w6ZX0pO2lmKGFwaS5hc3NlcnQobnVsbCE9PXAsImRlbGVnYXRpb24gZG9lcyBub3QgZXhpc3QiKSYmYXBpLmFzc2VydChhcGkuQmlnTnVtYmVyKHAucXVhbnRpdHkpLmd0ZSh0KSwib3ZlcmRyYXduIGRlbGVnYXRpb24iKSl7bC5wZW5kaW5nVW5kZWxlZ2F0aW9ucz1jYWxjdWxhdGVCYWxhbmNlKHIucGVuZGluZ1VuZGVsZWdhdGlvbnMsdCxvLnByZWNpc2lvbiwhMCksbC5kZWxlZ2F0aW9uc091dD1jYWxjdWxhdGVCYWxhbmNlKGwuZGVsZWdhdGlvbnNPdXQsdCxvLnByZWNpc2lvbiwhMSksYXdhaXQgYXBpLmRiLnVwZGF0ZSgiYmFsYW5jZXMiLGwpLHIuZGVsZWdhdGlvbnNJbj1jYWxjdWxhdGVCYWxhbmNlKHIuZGVsZWdhdGlvbnNJbix0LG8ucHJlY2lzaW9uLCExKSxhd2FpdCBhcGkuZGIudXBkYXRlKCJiYWxhbmNlcyIscikscC5xdWFudGl0eT1jYWxjdWxhdGVCYWxhbmNlKHAucXVhbnRpdHksdCxvLnByZWNpc2lvbiwhMSksYXBpLkJpZ051bWJlcihwLnF1YW50aXR5KS5ndCgwKT9hd2FpdCBhcGkuZGIudXBkYXRlKCJkZWxlZ2F0aW9ucyIscCk6YXdhaXQgYXBpLmRiLnJlbW92ZSgiZGVsZWdhdGlvbnMiLHApO2NvbnN0IGM9bmV3IERhdGUoYCR7YXBpLmhpdmVCbG9ja1RpbWVzdGFtcH0uMDAwWmApO2E9MjQqby51bmRlbGVnYXRpb25Db29sZG93biozNjAwKjFlMyxhPWMuZ2V0VGltZSgpK2EsYT17YWNjb3VudDphcGkuc2VuZGVyLHN5bWJvbDpvLnN5bWJvbCxxdWFudGl0eTp0LGNvbXBsZXRlVGltZXN0YW1wOmEsdHhJRDphcGkudHJhbnNhY3Rpb25JZH07YXdhaXQgYXBpLmRiLmluc2VydCgicGVuZGluZ1VuZGVsZWdhdGlvbnMiLGEpLGFwaS5lbWl0KCJ1bmRlbGVnYXRlU3RhcnQiLHtmcm9tOnMsc3ltYm9sOmUscXVhbnRpdHk6dH0pLCJXT1JLRVJCRUUiPT09ZSYmYXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJ3aXRuZXNzZXMiLCJ1cGRhdGVXaXRuZXNzZXNBcHByb3ZhbHMiLHthY2NvdW50OnN9KSxhd2FpdCBhcGkuZXhlY3V0ZVNtYXJ0Q29udHJhY3QoIm1pbmluZyIsImhhbmRsZVN0YWtlQ2hhbmdlIix7YWNjb3VudDpzLHN5bWJvbDplLHF1YW50aXR5OmFwaS5CaWdOdW1iZXIodCkubmVnYXRlZCgpLGRlbGVnYXRlZDohMH0pLGF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5mdW5kcyIsInVwZGF0ZVByb3Bvc2FsQXBwcm92YWxzIix7YWNjb3VudDpzLHRva2VuOm99KX19fX19fX07Y29uc3QgcHJvY2Vzc1VuZGVsZWdhdGlvbj1hc3luYyBhPT57dmFye2FjY291bnQ6ZSxzeW1ib2w6dCxxdWFudGl0eTppfT1hO2NvbnN0IG49YXdhaXQgYXBpLmRiLmZpbmRPbmUoImJhbGFuY2VzIix7YWNjb3VudDplLHN5bWJvbDp0fSk7dmFyIHMsbyxsPWF3YWl0IGFwaS5kYi5maW5kT25lKCJ0b2tlbnMiLHtzeW1ib2w6dH0pO2FwaS5hc3NlcnQobnVsbCE9PW4sImJhbGFuY2UgZG9lcyBub3QgZXhpc3QiKSYmKHM9bi5zdGFrZSxvPW4ucGVuZGluZ1VuZGVsZWdhdGlvbnMsbi5zdGFrZT1jYWxjdWxhdGVCYWxhbmNlKG4uc3Rha2UsaSxsLnByZWNpc2lvbiwhMCksbi5wZW5kaW5nVW5kZWxlZ2F0aW9ucz1jYWxjdWxhdGVCYWxhbmNlKG4ucGVuZGluZ1VuZGVsZWdhdGlvbnMsaSxsLnByZWNpc2lvbiwhMSksYXBpLmFzc2VydChhcGkuQmlnTnVtYmVyKG4ucGVuZGluZ1VuZGVsZWdhdGlvbnMpLmx0KG8pJiZhcGkuQmlnTnVtYmVyKG4uc3Rha2UpLmd0KHMpLCJjYW5ub3Qgc3VidHJhY3QiKSYmKGF3YWl0IGFwaS5kYi51cGRhdGUoImJhbGFuY2VzIixuKSxhd2FpdCBhcGkuZGIucmVtb3ZlKCJwZW5kaW5nVW5kZWxlZ2F0aW9ucyIsYSksYXBpLmVtaXQoInVuZGVsZWdhdGVEb25lIix7YWNjb3VudDplLHN5bWJvbDp0LHF1YW50aXR5Oml9KSwiV09SS0VSQkVFIj09PXQmJmF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgid2l0bmVzc2VzIiwidXBkYXRlV2l0bmVzc2VzQXBwcm92YWxzIix7YWNjb3VudDplfSksYXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJtaW5pbmciLCJoYW5kbGVTdGFrZUNoYW5nZSIse2FjY291bnQ6ZSxzeW1ib2w6dCxxdWFudGl0eTppfSksYXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJ0b2tlbmZ1bmRzIiwidXBkYXRlUHJvcG9zYWxBcHByb3ZhbHMiLHthY2NvdW50OmUsdG9rZW46bH0pKSl9O2FjdGlvbnMuY2hlY2tQZW5kaW5nVW5kZWxlZ2F0aW9ucz1hc3luYygpPT57aWYoYXBpLmFzc2VydCgibnVsbCI9PT1hcGkuc2VuZGVyLCJub3QgYXV0aG9yaXplZCIpKXtjb25zdCBuPW5ldyBEYXRlKGAke2FwaS5oaXZlQmxvY2tUaW1lc3RhbXB9LjAwMFpgKTt2YXIgYT1uLmdldFRpbWUoKTtsZXQgZT1hd2FpdCBhcGkuZGIuZmluZCgicGVuZGluZ1VuZGVsZWdhdGlvbnMiLHtjb21wbGV0ZVRpbWVzdGFtcDp7JGx0ZTphfX0pLHQ9ZS5sZW5ndGg7Zm9yKDswPHQ7KXtmb3IobGV0IGE9MDthPHQ7YSs9MSl7dmFyIGk9ZVthXTthd2FpdCBwcm9jZXNzVW5kZWxlZ2F0aW9uKGkpfWU9YXdhaXQgYXBpLmRiLmZpbmQoInBlbmRpbmdVbmRlbGVnYXRpb25zIix7Y29tcGxldGVUaW1lc3RhbXA6eyRsdGU6YX19KSx0PWUubGVuZ3RofX19Ow=="}}}