{"id":"ssc-mainnet-hive","json":{"contractName":"contract","contractAction":"update","contractPayload":{"name":"mining","params":"","code":"Y29uc3QgUFJPUEVSVFlfT1BTPXtBREQ6e2FkZDooeCx5KT0+YXBpLkJpZ051bWJlcih4KS5wbHVzKHkpLHJlbW92ZTooeCx5KT0+YXBpLkJpZ051bWJlcih4KS5taW51cyh5KSxkZWZhdWx0VmFsdWU6MH0sTVVMVElQTFk6e2FkZDooeCx5KT0+YXBpLkJpZ051bWJlcih4KS5tdWx0aXBsaWVkQnkoeSkscmVtb3ZlOih4LHkpPT5hcGkuQmlnTnVtYmVyKHgpLmRpdmlkZWRCeSh5KSxkZWZhdWx0VmFsdWU6MX19O2FjdGlvbnMuY3JlYXRlU1NDPWFzeW5jKCk9PntpZighMT09PWF3YWl0IGFwaS5kYi50YWJsZUV4aXN0cygibWluaW5nUG93ZXIiKSl7YXdhaXQgYXBpLmRiLmNyZWF0ZVRhYmxlKCJtaW5pbmdQb3dlciIsWyJpZCIsInBvd2VyIl0pLGF3YWl0IGFwaS5kYi5jcmVhdGVUYWJsZSgicG9vbHMiLFsiaWQiXSksYXdhaXQgYXBpLmRiLmNyZWF0ZVRhYmxlKCJ0b2tlblBvb2xzIixbInN5bWJvbCJdKSxhd2FpdCBhcGkuZGIuY3JlYXRlVGFibGUoInBhcmFtcyIpO2NvbnN0IHBhcmFtcz17cG9vbENyZWF0aW9uRmVlOiIxMDAwIixwb29sVXBkYXRlRmVlOiIzMDAiLG1heExvdHRlcmllc1BlckJsb2NrOjIwLG1heEJhbGFuY2VzUHJvY2Vzc2VkUGVyQmxvY2s6MWU0LHByb2Nlc3NRdWVyeUxpbWl0OjFlM307YXdhaXQgYXBpLmRiLmluc2VydCgicGFyYW1zIixwYXJhbXMpfWF3YWl0IGFwaS5kYi50YWJsZUV4aXN0cygibmZ0VG9rZW5Qb29scyIpfHxhd2FpdCBhcGkuZGIuY3JlYXRlVGFibGUoIm5mdFRva2VuUG9vbHMiLFsic3ltYm9sIl0pfSxhY3Rpb25zLnVwZGF0ZVBhcmFtcz1hc3luYyBwYXlsb2FkPT57aWYoYXBpLnNlbmRlciE9PWFwaS5vd25lcilyZXR1cm47Y29uc3R7cG9vbENyZWF0aW9uRmVlOnBvb2xDcmVhdGlvbkZlZSxwb29sVXBkYXRlRmVlOnBvb2xVcGRhdGVGZWUsbWF4TG90dGVyaWVzUGVyQmxvY2s6bWF4TG90dGVyaWVzUGVyQmxvY2ssbWF4QmFsYW5jZXNQcm9jZXNzZWRQZXJCbG9jazptYXhCYWxhbmNlc1Byb2Nlc3NlZFBlckJsb2NrLHByb2Nlc3NRdWVyeUxpbWl0OnByb2Nlc3NRdWVyeUxpbWl0fT1wYXlsb2FkLHBhcmFtcz1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSk7aWYocG9vbENyZWF0aW9uRmVlKXtpZighYXBpLmFzc2VydCgic3RyaW5nIj09dHlwZW9mIHBvb2xDcmVhdGlvbkZlZSYmIWFwaS5CaWdOdW1iZXIocG9vbENyZWF0aW9uRmVlKS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKHBvb2xDcmVhdGlvbkZlZSkuZ3RlKDApLCJpbnZhbGlkIHBvb2xDcmVhdGlvbkZlZSIpKXJldHVybjtwYXJhbXMucG9vbENyZWF0aW9uRmVlPXBvb2xDcmVhdGlvbkZlZX1pZihwb29sVXBkYXRlRmVlKXtpZighYXBpLmFzc2VydCgic3RyaW5nIj09dHlwZW9mIHBvb2xVcGRhdGVGZWUmJiFhcGkuQmlnTnVtYmVyKHBvb2xVcGRhdGVGZWUpLmlzTmFOKCkmJmFwaS5CaWdOdW1iZXIocG9vbFVwZGF0ZUZlZSkuZ3RlKDApLCJpbnZhbGlkIHBvb2xVcGRhdGVGZWUiKSlyZXR1cm47cGFyYW1zLnBvb2xVcGRhdGVGZWU9cG9vbFVwZGF0ZUZlZX1pZihtYXhMb3R0ZXJpZXNQZXJCbG9jayl7aWYoIWFwaS5hc3NlcnQoTnVtYmVyLmlzSW50ZWdlcihtYXhMb3R0ZXJpZXNQZXJCbG9jaykmJm1heExvdHRlcmllc1BlckJsb2NrPj0xLCJpbnZhbGlkIG1heExvdHRlcmllc1BlckJsb2NrIikpcmV0dXJuO3BhcmFtcy5tYXhMb3R0ZXJpZXNQZXJCbG9jaz1tYXhMb3R0ZXJpZXNQZXJCbG9ja31pZihtYXhCYWxhbmNlc1Byb2Nlc3NlZFBlckJsb2NrKXtpZighYXBpLmFzc2VydChOdW1iZXIuaXNJbnRlZ2VyKG1heEJhbGFuY2VzUHJvY2Vzc2VkUGVyQmxvY2spJiZtYXhCYWxhbmNlc1Byb2Nlc3NlZFBlckJsb2NrPj0xLCJpbnZhbGlkIG1heEJhbGFuY2VzUHJvY2Vzc2VkUGVyQmxvY2siKSlyZXR1cm47cGFyYW1zLm1heEJhbGFuY2VzUHJvY2Vzc2VkUGVyQmxvY2s9bWF4QmFsYW5jZXNQcm9jZXNzZWRQZXJCbG9ja31pZihwcm9jZXNzUXVlcnlMaW1pdCl7aWYoIWFwaS5hc3NlcnQoTnVtYmVyLmlzSW50ZWdlcihwcm9jZXNzUXVlcnlMaW1pdCkmJnByb2Nlc3NRdWVyeUxpbWl0Pj0xLCJpbnZhbGlkIHByb2Nlc3NRdWVyeUxpbWl0IikpcmV0dXJuO3BhcmFtcy5wcm9jZXNzUXVlcnlMaW1pdD1wcm9jZXNzUXVlcnlMaW1pdH1hd2FpdCBhcGkuZGIudXBkYXRlKCJwYXJhbXMiLHBhcmFtcyl9O2NvbnN0IGZpbmRBbmRQcm9jZXNzQWxsPWFzeW5jKGNvbnRyYWN0TmFtZSx0YWJsZSxxdWVyeSxjYWxsYmFjayk9PntsZXQgb2Zmc2V0PTAscmVzdWx0cz1bXSxkb25lPSExO2Zvcig7IWRvbmU7KWlmKHJlc3VsdHM9YXdhaXQgYXBpLmRiLmZpbmRJblRhYmxlKGNvbnRyYWN0TmFtZSx0YWJsZSxxdWVyeSwxZTMsb2Zmc2V0KSxyZXN1bHRzKXtmb3IobGV0IGk9MDtpPHJlc3VsdHMubGVuZ3RoO2krPTEpYXdhaXQgY2FsbGJhY2socmVzdWx0c1tpXSk7cmVzdWx0cy5sZW5ndGg8MWUzP2RvbmU9ITA6b2Zmc2V0Kz0xZTN9fTthc3luYyBmdW5jdGlvbiB2YWxpZGF0ZU5mdFByb3BlcnRpZXMocHJvcGVydGllcyl7aWYoIWFwaS5hc3NlcnQocHJvcGVydGllcyYmQXJyYXkuaXNBcnJheShwcm9wZXJ0aWVzKSwiaW52YWxpZCBuZnRUb2tlbk1pbmVyIHByb3BlcnRpZXMiKSlyZXR1cm4hMTtpZighYXBpLmFzc2VydChwcm9wZXJ0aWVzLmxlbmd0aD4wJiZwcm9wZXJ0aWVzLmxlbmd0aDw9NCwibmZ0VG9rZW5NaW5lciBwcm9wZXJ0aWVzIHNpemUgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDQiKSlyZXR1cm4hMTtmb3IobGV0IGk9MDtpPHByb3BlcnRpZXMubGVuZ3RoO2krPTEpe2NvbnN0IHByb3A9cHJvcGVydGllc1tpXSxwcm9wS2V5cz1PYmplY3Qua2V5cyhwcm9wKTtmb3IobGV0IGo9MDtqPHByb3BLZXlzLmxlbmd0aDtqKz0xKXtjb25zdCBwcm9wS2V5PXByb3BLZXlzW2pdO2lmKCJvcCI9PT1wcm9wS2V5KXtpZighYXBpLmFzc2VydCgic3RyaW5nIj09dHlwZW9mIHByb3Aub3AmJlBST1BFUlRZX09QU1twcm9wLm9wXSwibmZ0VG9rZW5NaW5lciBwcm9wZXJ0aWVzIG9wIHNob3VsZCBiZSBBREQgb3IgTVVMVElQTFkiKSlyZXR1cm4hMX1lbHNlIGlmKCJuYW1lIj09PXByb3BLZXkpe2lmKCFhcGkuYXNzZXJ0KCJzdHJpbmciPT10eXBlb2YgcHJvcC5uYW1lJiZwcm9wLm5hbWUubGVuZ3RoPD0xNiwibmZ0VG9rZW5NaW5lciBwcm9wZXJ0aWVzIG5hbWUgc2hvdWxkIGJlIGEgc3RyaW5nIG9mIGxlbmd0aCA8PSAxNiIpKXJldHVybiExfWVsc2V7aWYoImJ1cm5DaGFuZ2UiIT09cHJvcEtleSlyZXR1cm4gYXBpLmFzc2VydCghMSwibmZ0VG9rZW5NaW5lciBwcm9wZXJ0aWVzIGZpZWxkIGludmFsaWQiKSwhMTt7aWYoIWFwaS5hc3NlcnQoIm9iamVjdCI9PXR5cGVvZiBwcm9wLmJ1cm5DaGFuZ2UmJiJzdHJpbmciPT10eXBlb2YgcHJvcC5idXJuQ2hhbmdlLnN5bWJvbCYmYXBpLkJpZ051bWJlcihwcm9wLmJ1cm5DaGFuZ2UucXVhbnRpdHkpLmlzRmluaXRlKCkmJmFwaS5CaWdOdW1iZXIocHJvcC5idXJuQ2hhbmdlLnF1YW50aXR5KS5pc1Bvc2l0aXZlKCksIm5mdFRva2VuTWluZXIgcHJvcGVydGllcyBidXJuQ2hhbmdlIGludmFsaWQiKSlyZXR1cm4hMTtjb25zdCB0b2tlbj1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDpwcm9wLmJ1cm5DaGFuZ2Uuc3ltYm9sfSk7aWYoIWFwaS5hc3NlcnQodG9rZW4sIm5mdFRva2VuTWluZXIgcHJvcGVydGllcyBidXJuQ2hhbmdlIHN5bWJvbCBub3QgZm91bmQiKSlyZXR1cm4hMX19fX1yZXR1cm4hMH1mdW5jdGlvbiB2YWxpZGF0ZU5mdFR5cGVNYXAodHlwZU1hcCxwcm9wZXJ0aWVzKXtpZighYXBpLmFzc2VydCh0eXBlTWFwJiYib2JqZWN0Ij09dHlwZW9mIHR5cGVNYXAsImludmFsaWQgbmZ0VG9rZW5NaW5lciB0eXBlTWFwIikpcmV0dXJuITE7Y29uc3QgdHlwZXM9T2JqZWN0LmtleXModHlwZU1hcCk7Zm9yKGxldCBqPTA7ajx0eXBlcy5sZW5ndGg7ais9MSl7Y29uc3QgdHlwZUNvbmZpZz10eXBlTWFwW3R5cGVzW2pdXTtpZighYXBpLmFzc2VydChBcnJheS5pc0FycmF5KHR5cGVDb25maWcpJiZ0eXBlQ29uZmlnLmxlbmd0aD09PXByb3BlcnRpZXMubGVuZ3RoLCJuZnRUb2tlbk1pbmVyIHR5cGVDb25maWcgbGVuZ3RoIG1pc21hdGNoIikpcmV0dXJuITE7Zm9yKGxldCBrPTA7azx0eXBlQ29uZmlnLmxlbmd0aDtrKz0xKXtjb25zdCB0eXBlUHJvcGVydHk9YXBpLkJpZ051bWJlcih0eXBlQ29uZmlnW2tdKTtpZighYXBpLmFzc2VydCghdHlwZVByb3BlcnR5LmlzTmFOKCkmJnR5cGVQcm9wZXJ0eS5pc0Zpbml0ZSgpLCJuZnRUb2tlbk1pbmVyIHR5cGVDb25maWcgaW52YWxpZCIpKXJldHVybiExO2lmKCJNVUxUSVBMWSI9PT1wcm9wZXJ0aWVzW2tdLm9wJiYhYXBpLmFzc2VydCh0eXBlUHJvcGVydHkuZ3RlKC4wMSkmJnR5cGVQcm9wZXJ0eS5sdGUoMTAwKSwibmZ0VG9rZW5NaW5lciB0eXBlQ29uZmlnIE1VTFRJUExZIHByb3BlcnR5IHNob3VsZCBiZSBiZXR3ZWVuIDAuMDEgYW5kIDEwMCIpKXJldHVybiExfX1yZXR1cm4hMH1hc3luYyBmdW5jdGlvbiB2YWxpZGF0ZVRva2VuTWluZXJzKHRva2VuTWluZXJzLG5mdFRva2VuTWluZXIpe2lmKCFhcGkuYXNzZXJ0KHRva2VuTWluZXJzJiZBcnJheS5pc0FycmF5KHRva2VuTWluZXJzKSwidG9rZW5NaW5lcnMgaW52YWxpZCIpKXJldHVybiExO2lmKCFhcGkuYXNzZXJ0KHRva2VuTWluZXJzLmxlbmd0aD49MSYmdG9rZW5NaW5lcnMubGVuZ3RoPD0yfHxuZnRUb2tlbk1pbmVyJiYwPT09dG9rZW5NaW5lcnMubGVuZ3RoLCJvbmx5IDEgb3IgMiB0b2tlbk1pbmVycyBhbGxvd2VkIikpcmV0dXJuITE7Y29uc3QgdG9rZW5NaW5lclN5bWJvbHM9bmV3IFNldDtmb3IobGV0IGk9MDtpPHRva2VuTWluZXJzLmxlbmd0aDtpKz0xKXtjb25zdCB0b2tlbk1pbmVyQ29uZmlnPXRva2VuTWluZXJzW2ldO2lmKCFhcGkuYXNzZXJ0KHRva2VuTWluZXJDb25maWcmJnRva2VuTWluZXJDb25maWcuc3ltYm9sJiYic3RyaW5nIj09dHlwZW9mIHRva2VuTWluZXJDb25maWcuc3ltYm9sLCJ0b2tlbk1pbmVycyBpbnZhbGlkIikpcmV0dXJuITE7aWYoIWFwaS5hc3NlcnQoIXRva2VuTWluZXJTeW1ib2xzLmhhcyh0b2tlbk1pbmVyQ29uZmlnLnN5bWJvbCksInRva2VuTWluZXJzIGNhbm5vdCBoYXZlIGR1cGxpY2F0ZSBzeW1ib2xzIikpcmV0dXJuITE7dG9rZW5NaW5lclN5bWJvbHMuYWRkKHRva2VuTWluZXJDb25maWcuc3ltYm9sKTtjb25zdHtzeW1ib2w6c3ltYm9sfT10b2tlbk1pbmVyQ29uZmlnLHRva2VuPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwidG9rZW5zIix7c3ltYm9sOnN5bWJvbH0pO2lmKCFhcGkuYXNzZXJ0KHRva2VuJiZ0b2tlbi5zdGFraW5nRW5hYmxlZCwidG9rZW5NaW5lcnMgbXVzdCBoYXZlIHN0YWtpbmcgZW5hYmxlZCIpKXJldHVybiExO2lmKCFhcGkuYXNzZXJ0KE51bWJlci5pc0ludGVnZXIodG9rZW5NaW5lckNvbmZpZy5tdWx0aXBsaWVyKSYmdG9rZW5NaW5lckNvbmZpZy5tdWx0aXBsaWVyPj0xJiZ0b2tlbk1pbmVyQ29uZmlnLm11bHRpcGxpZXI8PTEwMCwidG9rZW5NaW5lciBtdWx0aXBsaWVyIG11c3QgYmUgYW4gaW50ZWdlciBmcm9tIDEgdG8gMTAwIikpcmV0dXJuITF9aWYobmZ0VG9rZW5NaW5lcil7aWYoIWFwaS5hc3NlcnQobmZ0VG9rZW5NaW5lci5zeW1ib2wmJiJzdHJpbmciPT10eXBlb2YgbmZ0VG9rZW5NaW5lci5zeW1ib2wsIm5mdFRva2VuTWluZXIgaW52YWxpZCIpKXJldHVybiExO2NvbnN0e3N5bWJvbDpzeW1ib2wsdHlwZU1hcDp0eXBlTWFwLHByb3BlcnRpZXM6cHJvcGVydGllcyx0eXBlRmllbGQ6dHlwZUZpZWxkfT1uZnRUb2tlbk1pbmVyLG5mdD1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoIm5mdCIsIm5mdHMiLHtzeW1ib2w6c3ltYm9sfSk7aWYoIWFwaS5hc3NlcnQobmZ0JiZuZnQuZGVsZWdhdGlvbkVuYWJsZWQsIm5mdFRva2VuTWluZXIgbXVzdCBoYXZlIGRlbGVnYXRpb24gZW5hYmxlZCIpKXJldHVybiExO2lmKCFhcGkuYXNzZXJ0KHR5cGVGaWVsZCYmInN0cmluZyI9PXR5cGVvZiB0eXBlRmllbGQsInR5cGVGaWVsZCBtdXN0IGJlIGEgc3RyaW5nIikpcmV0dXJuITE7aWYoIWFwaS5hc3NlcnQobmZ0LnByb3BlcnRpZXNbdHlwZUZpZWxkXSYmInN0cmluZyI9PT1uZnQucHJvcGVydGllc1t0eXBlRmllbGRdLnR5cGUsIm5mdFRva2VuTWluZXIgbXVzdCBoYXZlIHN0cmluZyB0eXBlIHByb3BlcnR5IikpcmV0dXJuITE7aWYoIWF3YWl0IHZhbGlkYXRlTmZ0UHJvcGVydGllcyhwcm9wZXJ0aWVzKSlyZXR1cm4hMTtpZighdmFsaWRhdGVOZnRUeXBlTWFwKHR5cGVNYXAscHJvcGVydGllcykpcmV0dXJuITF9cmV0dXJuITB9YXN5bmMgZnVuY3Rpb24gdmFsaWRhdGVUb2tlbk1pbmVyc0NoYW5nZShvbGRUb2tlbk1pbmVycyx0b2tlbk1pbmVycyxvbGROZnRUb2tlbk1pbmVyLG5mdFRva2VuTWluZXIpe2lmKCFhcGkuYXNzZXJ0KHRva2VuTWluZXJzLmxlbmd0aD09PW9sZFRva2VuTWluZXJzLmxlbmd0aCwiY2Fubm90IGNoYW5nZSB3aGljaCB0b2tlbnMgYXJlIGluIHRva2VuTWluZXJzIikpcmV0dXJuITE7bGV0IGNoYW5nZWQ9ITE7Zm9yKGxldCBpPTA7aTx0b2tlbk1pbmVycy5sZW5ndGg7aSs9MSl7Y29uc3Qgb2xkQ29uZmlnPW9sZFRva2VuTWluZXJzW2ldLG5ld0NvbmZpZz10b2tlbk1pbmVyc1tpXTtpZighYXBpLmFzc2VydChvbGRDb25maWcuc3ltYm9sPT09bmV3Q29uZmlnLnN5bWJvbCwiY2Fubm90IGNoYW5nZSB3aGljaCB0b2tlbnMgYXJlIGluIHRva2VuTWluZXJzIikpcmV0dXJuITE7aWYoIWFwaS5hc3NlcnQoTnVtYmVyLmlzSW50ZWdlcihuZXdDb25maWcubXVsdGlwbGllcikmJm5ld0NvbmZpZy5tdWx0aXBsaWVyPj0xJiZuZXdDb25maWcubXVsdGlwbGllcjw9MTAwLCJ0b2tlbk1pbmVyIG11bHRpcGxpZXIgbXVzdCBiZSBhbiBpbnRlZ2VyIGZyb20gMSB0byAxMDAiKSlyZXR1cm4hMTtvbGRDb25maWcubXVsdGlwbGllciE9PW5ld0NvbmZpZy5tdWx0aXBsaWVyJiYoY2hhbmdlZD0hMCl9aWYoIWFwaS5hc3NlcnQoISFvbGROZnRUb2tlbk1pbmVyPT0hIW5mdFRva2VuTWluZXIsImNhbm5vdCBjaGFuZ2UgbmZ0VG9rZW5NaW5lciB0b2tlbiIpKXJldHVybiExO2lmKG5mdFRva2VuTWluZXIpe2lmKCFhcGkuYXNzZXJ0KG9sZE5mdFRva2VuTWluZXIuc3ltYm9sPT09bmZ0VG9rZW5NaW5lci5zeW1ib2wsImNhbm5vdCBjaGFuZ2UgbmZ0VG9rZW5NaW5lciB0b2tlbiIpKXJldHVybiExO2NvbnN0e3R5cGVNYXA6dHlwZU1hcCxwcm9wZXJ0aWVzOnByb3BlcnRpZXMsdHlwZUZpZWxkOnR5cGVGaWVsZH09bmZ0VG9rZW5NaW5lcjtpZighYXBpLmFzc2VydCh0eXBlRmllbGQmJiJzdHJpbmciPT10eXBlb2YgdHlwZUZpZWxkJiZ0eXBlRmllbGQ9PT1vbGROZnRUb2tlbk1pbmVyLnR5cGVGaWVsZCwiY2Fubm90IGNoYW5nZSBuZnRUb2tlbk1pbmVyIHR5cGVGaWVsZCIpKXJldHVybiExO2lmKCFhcGkuYXNzZXJ0KHR5cGVNYXAmJiJvYmplY3QiPT10eXBlb2YgdHlwZU1hcCwiaW52YWxpZCBuZnRUb2tlbk1pbmVyIHR5cGVNYXAiKSlyZXR1cm4hMTtpZighYXdhaXQgdmFsaWRhdGVOZnRQcm9wZXJ0aWVzKHByb3BlcnRpZXMpKXJldHVybiExO2lmKHByb3BlcnRpZXMubGVuZ3RoIT09b2xkTmZ0VG9rZW5NaW5lci5wcm9wZXJ0aWVzLmxlbmd0aCljaGFuZ2VkPSEwO2Vsc2UgZm9yKGxldCBpPTA7aTxwcm9wZXJ0aWVzLmxlbmd0aDtpKz0xKXtjb25zdCBwcm9wPXByb3BlcnRpZXNbaV0sb2xkUHJvcD1vbGROZnRUb2tlbk1pbmVyLnByb3BlcnRpZXNbaV07cHJvcC5vcCE9PW9sZFByb3Aub3AmJihjaGFuZ2VkPSEwKX1pZighdmFsaWRhdGVOZnRUeXBlTWFwKHR5cGVNYXAscHJvcGVydGllcykpcmV0dXJuITE7Y29uc3Qgb2xkVHlwZXM9T2JqZWN0LmtleXMob2xkTmZ0VG9rZW5NaW5lci50eXBlTWFwKTtmb3IobGV0IGk9MDtpPG9sZFR5cGVzLmxlbmd0aDtpKz0xKXtjb25zdCBvbGRUeXBlPW9sZFR5cGVzW2ldLG9sZFR5cGVDb25maWc9b2xkTmZ0VG9rZW5NaW5lci50eXBlTWFwW29sZFR5cGVdLHR5cGVDb25maWc9dHlwZU1hcFtvbGRUeXBlXTtpZighYXBpLmFzc2VydCh0eXBlQ29uZmlnLCJ0eXBlQ29uZmlnIHR5cGVzIG11c3QgYmUgYSBzdXBlcnNldCBvZiBvbGQgdHlwZUNvbmZpZyB0eXBlcyIpKXJldHVybiExO2ZvcihsZXQgaj0wO2o8dHlwZUNvbmZpZy5sZW5ndGg7ais9MSlvbGRUeXBlQ29uZmlnW2pdIT09dHlwZUNvbmZpZ1tqXSYmKGNoYW5nZWQ9ITApfX1yZXR1cm57Y2hhbmdlZDpjaGFuZ2VkfX1mdW5jdGlvbiBjb21wdXRlTWluaW5nUG93ZXIobWluaW5nUG93ZXIsdG9rZW5NaW5lcnMsbmZ0VG9rZW5NaW5lcil7bGV0IHBvd2VyPWFwaS5CaWdOdW1iZXIoMCk7Zm9yKGxldCBpPTA7aTx0b2tlbk1pbmVycy5sZW5ndGg7aSs9MSltaW5pbmdQb3dlci5iYWxhbmNlc1tpXSYmKHBvd2VyPXBvd2VyLnBsdXMoYXBpLkJpZ051bWJlcihtaW5pbmdQb3dlci5iYWxhbmNlc1tpXSkubXVsdGlwbGllZEJ5KHRva2VuTWluZXJzW2ldLm11bHRpcGxpZXIpKSk7aWYobmZ0VG9rZW5NaW5lciYmbWluaW5nUG93ZXIubmZ0QmFsYW5jZXMpe2xldCBuZnRQb3dlcj1hcGkuQmlnTnVtYmVyKDEpO2ZvcihsZXQgaT0wO2k8bmZ0VG9rZW5NaW5lci5wcm9wZXJ0aWVzLmxlbmd0aDtpKz0xKW5mdFBvd2VyPW5mdFBvd2VyLm11bHRpcGxpZWRCeShtaW5pbmdQb3dlci5uZnRCYWxhbmNlc1tpXSk7cG93ZXI9cG93ZXIucGx1cyhuZnRQb3dlcil9cmV0dXJuIHBvd2VyLmlzUG9zaXRpdmUoKSYmcG93ZXIuaXNGaW5pdGUoKT9wb3dlcjphcGkuQmlnTnVtYmVyKDApfWFzeW5jIGZ1bmN0aW9uIHVwZGF0ZU1pbmluZ1Bvd2VyKHBvb2wsdG9rZW4sYWNjb3VudCxzdGFrZWRRdWFudGl0eSxkZWxlZ2F0ZWRRdWFudGl0eSxyZXNldCl7bGV0IG1pbmluZ1Bvd2VyPWF3YWl0IGFwaS5kYi5maW5kT25lKCJtaW5pbmdQb3dlciIse2lkOnBvb2wuaWQsYWNjb3VudDphY2NvdW50fSksc3Rha2U9YXBpLkJpZ051bWJlcihzdGFrZWRRdWFudGl0eSksb2xkTWluaW5nUG93ZXI9YXBpLkJpZ051bWJlcigwKTtzdGFrZT1zdGFrZS5wbHVzKGRlbGVnYXRlZFF1YW50aXR5KTtjb25zdCB0b2tlbkluZGV4PXBvb2wudG9rZW5NaW5lcnMuZmluZEluZGV4KHQ9PnQuc3ltYm9sPT09dG9rZW4pO2lmKG1pbmluZ1Bvd2VyKW1pbmluZ1Bvd2VyLmJhbGFuY2VzW3Rva2VuSW5kZXhdJiYhcmVzZXR8fChtaW5pbmdQb3dlci5iYWxhbmNlc1t0b2tlbkluZGV4XT0iMCIpLG1pbmluZ1Bvd2VyLmJhbGFuY2VzW3Rva2VuSW5kZXhdPXN0YWtlLnBsdXMobWluaW5nUG93ZXIuYmFsYW5jZXNbdG9rZW5JbmRleF0pLG9sZE1pbmluZ1Bvd2VyPW1pbmluZ1Bvd2VyLnBvd2VyLiRudW1iZXJEZWNpbWFsO2Vsc2V7Y29uc3QgYmFsYW5jZXM9e307YmFsYW5jZXNbdG9rZW5JbmRleF09c3Rha2UsbWluaW5nUG93ZXI9e2lkOnBvb2wuaWQsYWNjb3VudDphY2NvdW50LGJhbGFuY2VzOmJhbGFuY2VzLHBvd2VyOnskbnVtYmVyRGVjaW1hbDoiMCJ9fSxtaW5pbmdQb3dlcj1hd2FpdCBhcGkuZGIuaW5zZXJ0KCJtaW5pbmdQb3dlciIsbWluaW5nUG93ZXIpfWNvbnN0IG5ld01pbmluZ1Bvd2VyPWNvbXB1dGVNaW5pbmdQb3dlcihtaW5pbmdQb3dlcixwb29sLnRva2VuTWluZXJzLHBvb2wubmZ0VG9rZW5NaW5lcik7cmV0dXJuIG1pbmluZ1Bvd2VyLnBvd2VyPXskbnVtYmVyRGVjaW1hbDpuZXdNaW5pbmdQb3dlcn0sYXdhaXQgYXBpLmRiLnVwZGF0ZSgibWluaW5nUG93ZXIiLG1pbmluZ1Bvd2VyKSxuZXdNaW5pbmdQb3dlci5taW51cyhvbGRNaW5pbmdQb3dlcil9ZnVuY3Rpb24gZ2V0TmZ0QWNjb3VudChuZnQpe3JldHVybiJtaW5pbmciPT09bmZ0LmRlbGVnYXRlZFRvLmFjY291bnQmJiJjIj09PW5mdC5kZWxlZ2F0ZWRUby5vd25lZEJ5P25mdC5hY2NvdW50OiJ1Ij09PW5mdC5kZWxlZ2F0ZWRUby5vd25lZEJ5P25mdC5kZWxlZ2F0ZWRUby5hY2NvdW50Om51bGx9YXN5bmMgZnVuY3Rpb24gdXBkYXRlTmZ0TWluaW5nUG93ZXIocG9vbCxuZnQsdHlwZVByb3BlcnRpZXMsYWRkLHVwZGF0ZVBvb2xUaW1lc3RhbXApe2NvbnN0IGFjY291bnQ9Z2V0TmZ0QWNjb3VudChuZnQpO2lmKCFhY2NvdW50KXJldHVybiAwO2xldCBtaW5pbmdQb3dlcj1hd2FpdCBhcGkuZGIuZmluZE9uZSgibWluaW5nUG93ZXIiLHtpZDpwb29sLmlkLGFjY291bnQ6YWNjb3VudH0pLG9sZE1pbmluZ1Bvd2VyPWFwaS5CaWdOdW1iZXIoMCk7aWYobWluaW5nUG93ZXIpe21pbmluZ1Bvd2VyLm5mdEJhbGFuY2VzfHwobWluaW5nUG93ZXIubmZ0QmFsYW5jZXM9e30pO2NvbnN0e25mdEJhbGFuY2VzOm5mdEJhbGFuY2VzfT1taW5pbmdQb3dlcjtmb3IobGV0IGk9MDtpPHBvb2wubmZ0VG9rZW5NaW5lci5wcm9wZXJ0aWVzLmxlbmd0aDtpKz0xKXtjb25zdCBwcm9wZXJ0eT1wb29sLm5mdFRva2VuTWluZXIucHJvcGVydGllc1tpXSxvcEluZm89UFJPUEVSVFlfT1BTW3Byb3BlcnR5Lm9wXTtuZnRCYWxhbmNlc1tpXSYmbWluaW5nUG93ZXIudXBkYXRlUG9vbFRpbWVzdGFtcD09PXVwZGF0ZVBvb2xUaW1lc3RhbXB8fChuZnRCYWxhbmNlc1tpXT1vcEluZm8uZGVmYXVsdFZhbHVlKSxuZnRCYWxhbmNlc1tpXT1hZGQ/b3BJbmZvLmFkZChuZnRCYWxhbmNlc1tpXSx0eXBlUHJvcGVydGllc1tpXSk6b3BJbmZvLnJlbW92ZShuZnRCYWxhbmNlc1tpXSx0eXBlUHJvcGVydGllc1tpXSl9b2xkTWluaW5nUG93ZXI9bWluaW5nUG93ZXIucG93ZXIuJG51bWJlckRlY2ltYWx9ZWxzZXtjb25zdCBuZnRCYWxhbmNlcz17fTtmb3IobGV0IGk9MDtpPHBvb2wubmZ0VG9rZW5NaW5lci5wcm9wZXJ0aWVzLmxlbmd0aDtpKz0xKXtjb25zdCBwcm9wZXJ0eT1wb29sLm5mdFRva2VuTWluZXIucHJvcGVydGllc1tpXSxvcEluZm89UFJPUEVSVFlfT1BTW3Byb3BlcnR5Lm9wXTthZGQ/bmZ0QmFsYW5jZXNbaV09b3BJbmZvLmFkZChvcEluZm8uZGVmYXVsdFZhbHVlLHR5cGVQcm9wZXJ0aWVzW2ldKTphcGkuYXNzZXJ0KCExLCJ1bmV4cGVjdGVkIGNvbmRpdGlvbjogcmVtb3ZlIHdpdGhvdXQgcHJldmlvdXMgbWluaW5nUG93ZXIiKX1taW5pbmdQb3dlcj17aWQ6cG9vbC5pZCxhY2NvdW50OmFjY291bnQsYmFsYW5jZXM6e30sbmZ0QmFsYW5jZXM6bmZ0QmFsYW5jZXMscG93ZXI6eyRudW1iZXJEZWNpbWFsOiIwIn19LG1pbmluZ1Bvd2VyPWF3YWl0IGFwaS5kYi5pbnNlcnQoIm1pbmluZ1Bvd2VyIixtaW5pbmdQb3dlcil9Y29uc3QgbmV3TWluaW5nUG93ZXI9Y29tcHV0ZU1pbmluZ1Bvd2VyKG1pbmluZ1Bvd2VyLHBvb2wudG9rZW5NaW5lcnMscG9vbC5uZnRUb2tlbk1pbmVyKTtyZXR1cm4gbWluaW5nUG93ZXIucG93ZXI9eyRudW1iZXJEZWNpbWFsOm5ld01pbmluZ1Bvd2VyfSxtaW5pbmdQb3dlci51cGRhdGVQb29sVGltZXN0YW1wPXVwZGF0ZVBvb2xUaW1lc3RhbXAsYXdhaXQgYXBpLmRiLnVwZGF0ZSgibWluaW5nUG93ZXIiLG1pbmluZ1Bvd2VyKSxuZXdNaW5pbmdQb3dlci5taW51cyhvbGRNaW5pbmdQb3dlcil9YXN5bmMgZnVuY3Rpb24gaW5pdE1pbmluZ1Bvd2VyKHBvb2wscGFyYW1zLHRva2VuLGxhc3RJZCl7bGV0IGJhbGFuY2VzLGFkanVzdGVkUG93ZXI9YXBpLkJpZ051bWJlcigwKSxvZmZzZXQ9MCxsYXN0SWRQcm9jZXNzZWQ9bGFzdElkLGNvbXBsZXRlPSExO2Zvcig7IWNvbXBsZXRlJiZvZmZzZXQ8cGFyYW1zLm1heEJhbGFuY2VzUHJvY2Vzc2VkUGVyQmxvY2s7KXtiYWxhbmNlcz1hd2FpdCBhcGkuZGIuZmluZEluVGFibGUoInRva2VucyIsImJhbGFuY2VzIix7c3ltYm9sOnRva2VuLF9pZDp7JGd0Omxhc3RJZH19LHBhcmFtcy5wcm9jZXNzUXVlcnlMaW1pdCxvZmZzZXQsW3tpbmRleDoiX2lkIixkZXNjZW5kaW5nOiExfV0pO2ZvcihsZXQgaT0wO2k8YmFsYW5jZXMubGVuZ3RoO2krPTEpe2NvbnN0IGJhbGFuY2U9YmFsYW5jZXNbaV07aWYoYXBpLkJpZ051bWJlcihiYWxhbmNlLnN0YWtlKS5ndCgwKXx8YXBpLkJpZ051bWJlcihiYWxhbmNlLmRlbGVnYXRpb25zSW4pLmd0KDApKXtjb25zdCBhZGp1c3RlZD1hd2FpdCB1cGRhdGVNaW5pbmdQb3dlcihwb29sLHRva2VuLGJhbGFuY2UuYWNjb3VudCxiYWxhbmNlLnN0YWtlLGJhbGFuY2UuZGVsZWdhdGlvbnNJbiwhMCk7YWRqdXN0ZWRQb3dlcj1hZGp1c3RlZFBvd2VyLnBsdXMoYWRqdXN0ZWQpfWxhc3RJZFByb2Nlc3NlZD1iYWxhbmNlLl9pZH1iYWxhbmNlcy5sZW5ndGg8cGFyYW1zLnByb2Nlc3NRdWVyeUxpbWl0JiYoY29tcGxldGU9ITApLG9mZnNldCs9cGFyYW1zLnByb2Nlc3NRdWVyeUxpbWl0fXJldHVybnthZGp1c3RlZFBvd2VyOmFkanVzdGVkUG93ZXIsbmV4dElkOmxhc3RJZFByb2Nlc3NlZCxjb21wbGV0ZTpjb21wbGV0ZX19YXN5bmMgZnVuY3Rpb24gaW5pdE5mdE1pbmluZ1Bvd2VyKHBvb2wsdXBkYXRlUG9vbFRpbWVzdGFtcCxwYXJhbXMsbmZ0VG9rZW5NaW5lcixsYXN0SWQpe2xldCBuZnRzLGFkanVzdGVkUG93ZXI9YXBpLkJpZ051bWJlcigwKSxvZmZzZXQ9MCxsYXN0SWRQcm9jZXNzZWQ9bGFzdElkLGNvbXBsZXRlPSExO2Zvcig7IWNvbXBsZXRlJiZvZmZzZXQ8cGFyYW1zLm1heEJhbGFuY2VzUHJvY2Vzc2VkUGVyQmxvY2s7KXtuZnRzPWF3YWl0IGFwaS5kYi5maW5kSW5UYWJsZSgibmZ0IixuZnRUb2tlbk1pbmVyLnN5bWJvbCsiaW5zdGFuY2VzIix7X2lkOnskZ3Q6bGFzdElkfSxkZWxlZ2F0ZWRUbzp7JG5lOm51bGx9LCJkZWxlZ2F0ZWRUby51bmRlbGVnYXRlQXQiOnskZXE6bnVsbH19LHBhcmFtcy5wcm9jZXNzUXVlcnlMaW1pdCxvZmZzZXQsW3tpbmRleDoiX2lkIixkZXNjZW5kaW5nOiExfV0pO2ZvcihsZXQgaT0wO2k8bmZ0cy5sZW5ndGg7aSs9MSl7Y29uc3QgbmZ0PW5mdHNbaV07aWYobmZ0VG9rZW5NaW5lci50eXBlTWFwW25mdC5wcm9wZXJ0aWVzW25mdFRva2VuTWluZXIudHlwZUZpZWxkXV0pe2NvbnN0IGFkanVzdGVkPWF3YWl0IHVwZGF0ZU5mdE1pbmluZ1Bvd2VyKHBvb2wsbmZ0LG5mdFRva2VuTWluZXIudHlwZU1hcFtuZnQucHJvcGVydGllc1tuZnRUb2tlbk1pbmVyLnR5cGVGaWVsZF1dLCEwLHVwZGF0ZVBvb2xUaW1lc3RhbXApO2FkanVzdGVkUG93ZXI9YWRqdXN0ZWRQb3dlci5wbHVzKGFkanVzdGVkKX1sYXN0SWRQcm9jZXNzZWQ9bmZ0Ll9pZH1uZnRzLmxlbmd0aDxwYXJhbXMucHJvY2Vzc1F1ZXJ5TGltaXQmJihjb21wbGV0ZT0hMCksb2Zmc2V0Kz1wYXJhbXMucHJvY2Vzc1F1ZXJ5TGltaXR9cmV0dXJue2FkanVzdGVkUG93ZXI6YWRqdXN0ZWRQb3dlcixuZXh0SWQ6bGFzdElkUHJvY2Vzc2VkLGNvbXBsZXRlOmNvbXBsZXRlfX1hc3luYyBmdW5jdGlvbiByZXN1bWVQb3dlclVwZGF0ZShwb29sLHBhcmFtcyl7bGV0e2luUHJvZ3Jlc3M6aW5Qcm9ncmVzcyx0b2tlbkluZGV4OnRva2VuSW5kZXgsbmZ0VG9rZW5JbmRleDpuZnRUb2tlbkluZGV4LGxhc3RJZDpsYXN0SWR9PXBvb2wudXBkYXRpbmc7Y29uc3R7dXBkYXRlUG9vbFRpbWVzdGFtcDp1cGRhdGVQb29sVGltZXN0YW1wfT1wb29sLnVwZGF0aW5nO2lmKCFpblByb2dyZXNzKXJldHVybjtpZih0b2tlbkluZGV4PHBvb2wudG9rZW5NaW5lcnMubGVuZ3RoKXtjb25zdCB0b2tlbkNvbmZpZz1wb29sLnRva2VuTWluZXJzW3Rva2VuSW5kZXhdLHthZGp1c3RlZFBvd2VyOmFkanVzdGVkUG93ZXIsbmV4dElkOm5leHRJZCxjb21wbGV0ZTpjb21wbGV0ZX09YXdhaXQgaW5pdE1pbmluZ1Bvd2VyKHBvb2wscGFyYW1zLHRva2VuQ29uZmlnLnN5bWJvbCxsYXN0SWQpO3Bvb2wudG90YWxQb3dlcj1hcGkuQmlnTnVtYmVyKHBvb2wudG90YWxQb3dlcikucGx1cyhhZGp1c3RlZFBvd2VyKSxjb21wbGV0ZT8obGFzdElkPTAsdG9rZW5JbmRleCs9MSk6bGFzdElkPW5leHRJZH1lbHNlIGlmKHBvb2wubmZ0VG9rZW5NaW5lciYmbmZ0VG9rZW5JbmRleDwxKXtjb25zdHtuZnRUb2tlbk1pbmVyOm5mdFRva2VuTWluZXJ9PXBvb2wse2FkanVzdGVkUG93ZXI6YWRqdXN0ZWRQb3dlcixuZXh0SWQ6bmV4dElkLGNvbXBsZXRlOmNvbXBsZXRlfT1hd2FpdCBpbml0TmZ0TWluaW5nUG93ZXIocG9vbCx1cGRhdGVQb29sVGltZXN0YW1wLHBhcmFtcyxuZnRUb2tlbk1pbmVyLGxhc3RJZCk7cG9vbC50b3RhbFBvd2VyPWFwaS5CaWdOdW1iZXIocG9vbC50b3RhbFBvd2VyKS5wbHVzKGFkanVzdGVkUG93ZXIpLGNvbXBsZXRlPyhsYXN0SWQ9MCxuZnRUb2tlbkluZGV4Kz0xKTpsYXN0SWQ9bmV4dElkfXRva2VuSW5kZXghPT1wb29sLnRva2VuTWluZXJzLmxlbmd0aHx8cG9vbC5uZnRUb2tlbk1pbmVyJiYxIT09bmZ0VG9rZW5JbmRleHx8KGluUHJvZ3Jlc3M9ITEsdG9rZW5JbmRleD0wLG5mdFRva2VuSW5kZXg9MCk7Y29uc3R7dXBkYXRpbmc6dXBkYXRpbmd9PXBvb2w7dXBkYXRpbmcuaW5Qcm9ncmVzcz1pblByb2dyZXNzLHVwZGF0aW5nLnRva2VuSW5kZXg9dG9rZW5JbmRleCx1cGRhdGluZy5uZnRUb2tlbkluZGV4PW5mdFRva2VuSW5kZXgsdXBkYXRpbmcubGFzdElkPWxhc3RJZCxhd2FpdCBhcGkuZGIudXBkYXRlKCJwb29scyIscG9vbCl9ZnVuY3Rpb24gZ2VuZXJhdGVQb29sSWQocG9vbCl7Y29uc3QgdG9rZW5NaW5lclN0cmluZz1wb29sLmV4dGVybmFsQ29udHJhY3QmJnBvb2wuZXh0ZXJuYWxNaW5lcnM/IkVYVC0iK3Bvb2wuZXh0ZXJuYWxNaW5lcnMucmVwbGFjZSgiOiIsIiIpOnBvb2wudG9rZW5NaW5lcnMubWFwKHQ9PnQuc3ltYm9sLnJlcGxhY2UoIi4iLCItIikpLnNvcnQoKS5qb2luKCIsIiksbmZ0VG9rZW5NaW5lclN0cmluZz1wb29sLm5mdFRva2VuTWluZXI/IjoiK3Bvb2wubmZ0VG9rZW5NaW5lci5zeW1ib2w6IiI7cmV0dXJuYCR7cG9vbC5taW5lZFRva2VuLnJlcGxhY2UoIi4iLCItIil9OiR7dG9rZW5NaW5lclN0cmluZ30ke25mdFRva2VuTWluZXJTdHJpbmd9YH1hc3luYyBmdW5jdGlvbiBydW5Mb3R0ZXJ5KHBvb2wscGFyYW1zKXtjb25zdCBibG9ja0RhdGU9bmV3IERhdGUoYXBpLmhpdmVCbG9ja1RpbWVzdGFtcCsiLjAwMFoiKSx3aW5uaW5nTnVtYmVycz1bXSxtaW5lZFRva2VuPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwidG9rZW5zIix7c3ltYm9sOnBvb2wubWluZWRUb2tlbn0pLHdpbm5pbmdBbW91bnQ9YXBpLkJpZ051bWJlcihwb29sLmxvdHRlcnlBbW91bnQpLmRpdmlkZWRCeShwb29sLmxvdHRlcnlXaW5uZXJzKS50b0ZpeGVkKG1pbmVkVG9rZW4ucHJlY2lzaW9uLGFwaS5CaWdOdW1iZXIuUk9VTkRfSEFMRl9VUCk7aWYocG9vbC5leHRlcm5hbENvbnRyYWN0KXtpZigibWFya2V0cG9vbHMiPT09cG9vbC5leHRlcm5hbENvbnRyYWN0KXtjb25zdCBtYXJrZXRwb29sPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgibWFya2V0cG9vbHMiLCJwb29scyIse3Rva2VuUGFpcjpwb29sLmV4dGVybmFsTWluZXJzfSk7Zm9yKGxldCBpPTA7aTxwb29sLmxvdHRlcnlXaW5uZXJzO2krPTEpd2lubmluZ051bWJlcnNbaV09YXBpLkJpZ051bWJlcihtYXJrZXRwb29sLnRvdGFsU2hhcmVzKS5tdWx0aXBsaWVkQnkoYXBpLnJhbmRvbSgpKX19ZWxzZSBmb3IobGV0IGk9MDtpPHBvb2wubG90dGVyeVdpbm5lcnM7aSs9MSl3aW5uaW5nTnVtYmVyc1tpXT1hcGkuQmlnTnVtYmVyKHBvb2wudG90YWxQb3dlcikubXVsdGlwbGllZEJ5KGFwaS5yYW5kb20oKSk7bGV0IG1pbmluZ1Bvd2VycyxvZmZzZXQ9MCxjdW11bGF0aXZlUG93ZXI9YXBpLkJpZ051bWJlcigwKSxuZXh0Q3VtdWxhdGl2ZVBvd2VyPWFwaS5CaWdOdW1iZXIoMCksY29tcHV0ZWRXaW5uZXJzPTA7Y29uc3Qgd2lubmVycz1bXTtmb3IoO2NvbXB1dGVkV2lubmVyczxwb29sLmxvdHRlcnlXaW5uZXJzOyl7aWYocG9vbC5leHRlcm5hbENvbnRyYWN0KXtpZigibWFya2V0cG9vbHMiPT09cG9vbC5leHRlcm5hbENvbnRyYWN0KXttaW5pbmdQb3dlcnM9YXdhaXQgYXBpLmRiLmZpbmRJblRhYmxlKCJtYXJrZXRwb29scyIsImxpcXVpZGl0eVBvc2l0aW9ucyIse3Rva2VuUGFpcjpwb29sLmV4dGVybmFsTWluZXJzfSxwYXJhbXMucHJvY2Vzc1F1ZXJ5TGltaXQsb2Zmc2V0LFt7aW5kZXg6Il9pZCIsZGVzY2VuZGluZzohMX1dKTtmb3IobGV0IGk9MDtpPG1pbmluZ1Bvd2Vycy5sZW5ndGg7aSs9MSltaW5pbmdQb3dlcnNbaV0ucG93ZXI9eyRudW1iZXJEZWNpbWFsOmFwaS5CaWdOdW1iZXIobWluaW5nUG93ZXJzW2ldLnNoYXJlcykudG9GaXhlZChtaW5lZFRva2VuLnByZWNpc2lvbixhcGkuQmlnTnVtYmVyLlJPVU5EX0hBTEZfVVApfX19ZWxzZSBtaW5pbmdQb3dlcnM9YXdhaXQgYXBpLmRiLmZpbmQoIm1pbmluZ1Bvd2VyIix7aWQ6cG9vbC5pZCxwb3dlcjp7JGd0OnskbnVtYmVyRGVjaW1hbDoiMCJ9fX0scGFyYW1zLnByb2Nlc3NRdWVyeUxpbWl0LG9mZnNldCxbe2luZGV4OiJwb3dlciIsZGVzY2VuZGluZzohMH0se2luZGV4OiJfaWQiLGRlc2NlbmRpbmc6ITF9XSk7Zm9yKGxldCBpPTA7aTxtaW5pbmdQb3dlcnMubGVuZ3RoO2krPTEpe2NvbnN0IG1pbmluZ1Bvd2VyPW1pbmluZ1Bvd2Vyc1tpXTtuZXh0Q3VtdWxhdGl2ZVBvd2VyPWN1bXVsYXRpdmVQb3dlci5wbHVzKG1pbmluZ1Bvd2VyLnBvd2VyLiRudW1iZXJEZWNpbWFsKTtmb3IobGV0IGo9MDtqPHBvb2wubG90dGVyeVdpbm5lcnM7ais9MSl7Y29uc3QgY3VycmVudFdpbm5pbmdOdW1iZXI9d2lubmluZ051bWJlcnNbal07Y3VtdWxhdGl2ZVBvd2VyLmx0ZShjdXJyZW50V2lubmluZ051bWJlcikmJm5leHRDdW11bGF0aXZlUG93ZXIuZ3QoY3VycmVudFdpbm5pbmdOdW1iZXIpJiYoY29tcHV0ZWRXaW5uZXJzKz0xLHdpbm5lcnMucHVzaCh7d2lubmVyOm1pbmluZ1Bvd2VyLmFjY291bnQsd2lubmluZ051bWJlcjpjdXJyZW50V2lubmluZ051bWJlcix3aW5uaW5nQW1vdW50Ondpbm5pbmdBbW91bnR9KSl9Y3VtdWxhdGl2ZVBvd2VyPW5leHRDdW11bGF0aXZlUG93ZXJ9aWYoY29tcHV0ZWRXaW5uZXJzPT09cG9vbC5sb3R0ZXJ5V2lubmVyc3x8bWluaW5nUG93ZXJzLmxlbmd0aDxwYXJhbXMucHJvY2Vzc1F1ZXJ5TGltaXQpYnJlYWs7b2Zmc2V0Kz1wYXJhbXMucHJvY2Vzc1F1ZXJ5TGltaXR9YXBpLmVtaXQoIm1pbmluZ0xvdHRlcnkiLHtwb29sSWQ6cG9vbC5pZCx3aW5uZXJzOndpbm5lcnN9KTtmb3IobGV0IGk9MDtpPHdpbm5lcnMubGVuZ3RoO2krPTEpe2NvbnN0IHdpbm5lcj13aW5uZXJzW2ldO2F3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5zIiwiaXNzdWUiLHt0bzp3aW5uZXIud2lubmVyLHN5bWJvbDptaW5lZFRva2VuLnN5bWJvbCxxdWFudGl0eTp3aW5uaW5nQW1vdW50fSl9cG9vbC5uZXh0TG90dGVyeVRpbWVzdGFtcD1hcGkuQmlnTnVtYmVyKGJsb2NrRGF0ZS5nZXRUaW1lKCkpLnBsdXMoMzYwMCpwb29sLmxvdHRlcnlJbnRlcnZhbEhvdXJzKjFlMykudG9OdW1iZXIoKSxhd2FpdCBhcGkuZGIudXBkYXRlKCJwb29scyIscG9vbCl9YWN0aW9ucy5zZXRBY3RpdmU9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e2lkOmlkLGFjdGl2ZTphY3RpdmUsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX09cGF5bG9hZDtpZighYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikpcmV0dXJuO2NvbnN0IHBvb2w9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBvb2xzIix7aWQ6aWR9KTtpZihhcGkuYXNzZXJ0KHBvb2wsInBvb2wgaWQgbm90IGZvdW5kIikpe3Bvb2wuYWN0aXZlPSEhYWN0aXZlO2NvbnN0IG1pbmVkVG9rZW5PYmplY3Q9YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLCJ0b2tlbnMiLHtzeW1ib2w6cG9vbC5taW5lZFRva2VufSk7aWYoYXBpLmFzc2VydChtaW5lZFRva2VuT2JqZWN0JiYobWluZWRUb2tlbk9iamVjdC5pc3N1ZXI9PT1hcGkuc2VuZGVyfHwiQkVFIj09PW1pbmVkVG9rZW5PYmplY3Quc3ltYm9sJiZhcGkuc2VuZGVyPT09YXBpLm93bmVyKSwibXVzdCBiZSBpc3N1ZXIgb2YgbWluZWRUb2tlbiIpKXtjb25zdCBibG9ja0RhdGU9bmV3IERhdGUoYXBpLmhpdmVCbG9ja1RpbWVzdGFtcCsiLjAwMFoiKTtwb29sLm5leHRMb3R0ZXJ5VGltZXN0YW1wPWFwaS5CaWdOdW1iZXIoYmxvY2tEYXRlLmdldFRpbWUoKSkucGx1cygzNjAwKnBvb2wubG90dGVyeUludGVydmFsSG91cnMqMWUzKS50b051bWJlcigpLGF3YWl0IGFwaS5kYi51cGRhdGUoInBvb2xzIixwb29sKX19fSxhY3Rpb25zLnVwZGF0ZVBvb2w9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e2lkOmlkLGxvdHRlcnlXaW5uZXJzOmxvdHRlcnlXaW5uZXJzLGxvdHRlcnlJbnRlcnZhbEhvdXJzOmxvdHRlcnlJbnRlcnZhbEhvdXJzLGxvdHRlcnlBbW91bnQ6bG90dGVyeUFtb3VudCx0b2tlbk1pbmVyczp0b2tlbk1pbmVycyxuZnRUb2tlbk1pbmVyOm5mdFRva2VuTWluZXIsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX09cGF5bG9hZCxwYXJhbXM9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBhcmFtcyIse30pLHtwb29sVXBkYXRlRmVlOnBvb2xVcGRhdGVGZWV9PXBhcmFtcyx1dGlsaXR5VG9rZW5CYWxhbmNlPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwiYmFsYW5jZXMiLHthY2NvdW50OmFwaS5zZW5kZXIsc3ltYm9sOiJCRUUifSksYXV0aG9yaXplZD0hKCFhcGkuQmlnTnVtYmVyKHBvb2xVcGRhdGVGZWUpLmx0ZSgwKSYmYXBpLnNlbmRlciE9PWFwaS5vd25lcil8fHV0aWxpdHlUb2tlbkJhbGFuY2UmJmFwaS5CaWdOdW1iZXIodXRpbGl0eVRva2VuQmFsYW5jZS5iYWxhbmNlKS5ndGUocG9vbFVwZGF0ZUZlZSk7aWYoYXBpLmFzc2VydChhdXRob3JpemVkLCJ5b3UgbXVzdCBoYXZlIGVub3VnaCB0b2tlbnMgdG8gY292ZXIgdGhlIHVwZGF0ZSBmZWUiKSYmYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQoaWQmJiJzdHJpbmciPT10eXBlb2YgaWQmJmxvdHRlcnlBbW91bnQmJiJzdHJpbmciPT10eXBlb2YgbG90dGVyeUFtb3VudCYmIWFwaS5CaWdOdW1iZXIobG90dGVyeUFtb3VudCkuaXNOYU4oKSYmYXBpLkJpZ051bWJlcihsb3R0ZXJ5QW1vdW50KS5ndCgwKSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydChOdW1iZXIuaXNJbnRlZ2VyKGxvdHRlcnlXaW5uZXJzKSYmbG90dGVyeVdpbm5lcnM+PTEmJmxvdHRlcnlXaW5uZXJzPD0yMCwiaW52YWxpZCBsb3R0ZXJ5V2lubmVyczogaW50ZWdlciBiZXR3ZWVuIDEgYW5kIDIwIG9ubHkiKSYmYXBpLmFzc2VydChOdW1iZXIuaXNJbnRlZ2VyKGxvdHRlcnlJbnRlcnZhbEhvdXJzKSYmbG90dGVyeUludGVydmFsSG91cnM+PTEmJmxvdHRlcnlJbnRlcnZhbEhvdXJzPD03MjAsImludmFsaWQgbG90dGVyeUludGVydmFsSG91cnM6IGludGVnZXIgYmV0d2VlbiAxIGFuZCA3MjAgb25seSIpKXtjb25zdCBwb29sPWF3YWl0IGFwaS5kYi5maW5kT25lKCJwb29scyIse2lkOmlkfSk7aWYoYXBpLmFzc2VydChwb29sLCJwb29sIGlkIG5vdCBmb3VuZCIpKXtjb25zdCBtaW5lZFRva2VuT2JqZWN0PWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwidG9rZW5zIix7c3ltYm9sOnBvb2wubWluZWRUb2tlbn0pO2lmKGFwaS5hc3NlcnQobWluZWRUb2tlbk9iamVjdCYmKG1pbmVkVG9rZW5PYmplY3QuaXNzdWVyPT09YXBpLnNlbmRlcnx8IkJFRSI9PT1taW5lZFRva2VuT2JqZWN0LnN5bWJvbCYmYXBpLnNlbmRlcj09PWFwaS5vd25lciksIm11c3QgYmUgaXNzdWVyIG9mIG1pbmVkVG9rZW4iKSYmYXBpLmFzc2VydChhcGkuQmlnTnVtYmVyKGxvdHRlcnlBbW91bnQpLmRwKCk8PW1pbmVkVG9rZW5PYmplY3QucHJlY2lzaW9uLCJtaW5lZFRva2VuIHByZWNpc2lvbiBtaXNtYXRjaCBmb3IgbG90dGVyeUFtb3VudCIpKXtjb25zdCB2YWxpZE1pbmVyc0NoYW5nZT1hd2FpdCB2YWxpZGF0ZVRva2VuTWluZXJzQ2hhbmdlKHBvb2wudG9rZW5NaW5lcnMsdG9rZW5NaW5lcnMscG9vbC5uZnRUb2tlbk1pbmVyLG5mdFRva2VuTWluZXIpO2lmKHZhbGlkTWluZXJzQ2hhbmdlKXtwb29sLmxvdHRlcnlXaW5uZXJzPWxvdHRlcnlXaW5uZXJzLHBvb2wubG90dGVyeUludGVydmFsSG91cnM9bG90dGVyeUludGVydmFsSG91cnMscG9vbC5sb3R0ZXJ5QW1vdW50PWxvdHRlcnlBbW91bnQscG9vbC50b2tlbk1pbmVycz10b2tlbk1pbmVycyxwb29sLm5mdFRva2VuTWluZXI9bmZ0VG9rZW5NaW5lcjtjb25zdCBibG9ja0RhdGU9bmV3IERhdGUoYXBpLmhpdmVCbG9ja1RpbWVzdGFtcCsiLjAwMFoiKTt2YWxpZE1pbmVyc0NoYW5nZS5jaGFuZ2VkJiYocG9vbC51cGRhdGluZy51cGRhdGVQb29sVGltZXN0YW1wPWFwaS5CaWdOdW1iZXIoYmxvY2tEYXRlLmdldFRpbWUoKSkudG9OdW1iZXIoKSxwb29sLnVwZGF0aW5nLmluUHJvZ3Jlc3M9ITAscG9vbC51cGRhdGluZy50b2tlbkluZGV4PTAscG9vbC51cGRhdGluZy5uZnRUb2tlbkluZGV4PTAscG9vbC51cGRhdGluZy5sYXN0SWQ9MCkscG9vbC5uZXh0TG90dGVyeVRpbWVzdGFtcD1hcGkuQmlnTnVtYmVyKGJsb2NrRGF0ZS5nZXRUaW1lKCkpLnBsdXMoMzYwMCpsb3R0ZXJ5SW50ZXJ2YWxIb3VycyoxZTMpLnRvTnVtYmVyKCksYXdhaXQgYXBpLmRiLnVwZGF0ZSgicG9vbHMiLHBvb2wpLGFwaS5zZW5kZXIhPT1hcGkub3duZXImJmFwaS5CaWdOdW1iZXIocG9vbFVwZGF0ZUZlZSkuZ3QoMCkmJmF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5zIiwidHJhbnNmZXIiLHt0bzoibnVsbCIsc3ltYm9sOiJCRUUiLHF1YW50aXR5OnBvb2xVcGRhdGVGZWUsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX0pfX19fX0sYWN0aW9ucy5jaGFuZ2VOZnRQcm9wZXJ0eT1hc3luYyBwYXlsb2FkPT57Y29uc3R7aWQ6aWQsdHlwZTp0eXBlLHByb3BlcnR5TmFtZTpwcm9wZXJ0eU5hbWUsY2hhbmdlQW1vdW50OmNoYW5nZUFtb3VudCxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5fT1wYXlsb2FkO2lmKCFhcGkuYXNzZXJ0KGlkJiYic3RyaW5nIj09dHlwZW9mIGlkJiZ0eXBlJiYic3RyaW5nIj09dHlwZW9mIHR5cGUmJnByb3BlcnR5TmFtZSYmInN0cmluZyI9PXR5cGVvZiBwcm9wZXJ0eU5hbWUmJmNoYW5nZUFtb3VudCYmInN0cmluZyI9PXR5cGVvZiBjaGFuZ2VBbW91bnQmJiFhcGkuQmlnTnVtYmVyKGNoYW5nZUFtb3VudCkuaXNOYU4oKSYmYXBpLkJpZ051bWJlcihjaGFuZ2VBbW91bnQpLmlzRmluaXRlKCksImludmFsaWQgcGFyYW1zIikpcmV0dXJuO2lmKCFhcGkuYXNzZXJ0KCEwPT09aXNTaWduZWRXaXRoQWN0aXZlS2V5LCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSlyZXR1cm47Y29uc3QgcG9vbD1hd2FpdCBhcGkuZGIuZmluZE9uZSgicG9vbHMiLHtpZDppZH0pO2lmKCFhcGkuYXNzZXJ0KHBvb2wsInBvb2wgaWQgbm90IGZvdW5kIikpcmV0dXJuO2NvbnN0IHByb3BlcnR5SW5kZXg9cG9vbC5uZnRUb2tlbk1pbmVyLnByb3BlcnRpZXMuZmluZEluZGV4KHA9PnAubmFtZT09PXByb3BlcnR5TmFtZSkscHJvcGVydHk9cG9vbC5uZnRUb2tlbk1pbmVyLnByb3BlcnRpZXNbcHJvcGVydHlJbmRleF07aWYoIWFwaS5hc3NlcnQocHJvcGVydHkmJnByb3BlcnR5LmJ1cm5DaGFuZ2UsInByb3BlcnR5IG5vdCBlbmFibGVkIGZvciBidXJuIGNoYW5nZSIpKXJldHVybjtjb25zdCB0eXBlUHJvcGVydGllcz1wb29sLm5mdFRva2VuTWluZXIudHlwZU1hcFt0eXBlXTtpZighYXBpLmFzc2VydCh0eXBlUHJvcGVydGllcywidHlwZSBub3QgZm91bmQiKSlyZXR1cm47Y29uc3QgYnVyblN5bWJvbD1wcm9wZXJ0eS5idXJuQ2hhbmdlLnN5bWJvbCx0b2tlbj1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDpidXJuU3ltYm9sfSksZmVlPWFwaS5CaWdOdW1iZXIoY2hhbmdlQW1vdW50KS5hYnMoKS5tdWx0aXBsaWVkQnkocHJvcGVydHkuYnVybkNoYW5nZS5xdWFudGl0eSk7aWYoIWFwaS5hc3NlcnQoZmVlLmRwKCk8PXRva2VuLnByZWNpc2lvbiwiZmVlIHByZWNpc2lvbiBtaXNtYXRjaCBmb3IgYW1vdW50ICIrZmVlKSlyZXR1cm47Y29uc3QgYmFsYW5jZT1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsImJhbGFuY2VzIix7YWNjb3VudDphcGkuc2VuZGVyLHN5bWJvbDpidXJuU3ltYm9sfSksYXV0aG9yaXplZD1hcGkuQmlnTnVtYmVyKGZlZSkubHRlKDApfHxiYWxhbmNlJiZhcGkuQmlnTnVtYmVyKGJhbGFuY2UuYmFsYW5jZSkuZ3RlKGZlZSk7aWYoIWFwaS5hc3NlcnQoYXV0aG9yaXplZCxgeW91IG11c3QgaGF2ZSBlbm91Z2ggdG9rZW5zIHRvIGNvdmVyIHRoZSB1cGRhdGUgZmVlIG9mICR7ZmVlfSAke2J1cm5TeW1ib2x9YCkpcmV0dXJuO2lmKHR5cGVQcm9wZXJ0aWVzW3Byb3BlcnR5SW5kZXhdPWFwaS5CaWdOdW1iZXIodHlwZVByb3BlcnRpZXNbcHJvcGVydHlJbmRleF0pLnBsdXMoY2hhbmdlQW1vdW50KSwhdmFsaWRhdGVOZnRUeXBlTWFwKHBvb2wubmZ0VG9rZW5NaW5lci50eXBlTWFwLHBvb2wubmZ0VG9rZW5NaW5lci5wcm9wZXJ0aWVzKSlyZXR1cm47Y29uc3QgYmxvY2tEYXRlPW5ldyBEYXRlKGFwaS5oaXZlQmxvY2tUaW1lc3RhbXArIi4wMDBaIik7cG9vbC51cGRhdGluZy51cGRhdGVQb29sVGltZXN0YW1wPWFwaS5CaWdOdW1iZXIoYmxvY2tEYXRlLmdldFRpbWUoKSkudG9OdW1iZXIoKSxwb29sLnVwZGF0aW5nLmluUHJvZ3Jlc3M9ITAscG9vbC51cGRhdGluZy50b2tlbkluZGV4PTAscG9vbC51cGRhdGluZy5uZnRUb2tlbkluZGV4PTAscG9vbC51cGRhdGluZy5sYXN0SWQ9MCxhd2FpdCBhcGkuZGIudXBkYXRlKCJwb29scyIscG9vbCksYXBpLkJpZ051bWJlcihmZWUpLmd0KDApJiZhd2FpdCBhcGkuZXhlY3V0ZVNtYXJ0Q29udHJhY3QoInRva2VucyIsInRyYW5zZmVyIix7dG86Im51bGwiLHN5bWJvbDpidXJuU3ltYm9sLHF1YW50aXR5OmZlZSxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5fSl9LGFjdGlvbnMuY3JlYXRlUG9vbD1hc3luYyBwYXlsb2FkPT57Y29uc3R7bG90dGVyeVdpbm5lcnM6bG90dGVyeVdpbm5lcnMsbG90dGVyeUludGVydmFsSG91cnM6bG90dGVyeUludGVydmFsSG91cnMsbG90dGVyeUFtb3VudDpsb3R0ZXJ5QW1vdW50LG1pbmVkVG9rZW46bWluZWRUb2tlbix0b2tlbk1pbmVyczp0b2tlbk1pbmVycyxuZnRUb2tlbk1pbmVyOm5mdFRva2VuTWluZXIsZXh0ZXJuYWxNaW5lcnM6ZXh0ZXJuYWxNaW5lcnMsY2FsbGluZ0NvbnRyYWN0SW5mbzpjYWxsaW5nQ29udHJhY3RJbmZvLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9PXBheWxvYWQscGFyYW1zPWF3YWl0IGFwaS5kYi5maW5kT25lKCJwYXJhbXMiLHt9KSx7cG9vbENyZWF0aW9uRmVlOnBvb2xDcmVhdGlvbkZlZX09cGFyYW1zO2lmKCEodm9pZCAwPT09ZXh0ZXJuYWxNaW5lcnN8fGFwaS5hc3NlcnQoInN0cmluZyI9PXR5cGVvZiBleHRlcm5hbE1pbmVycywiZXh0ZXJuYWxNaW5lcnMgbXVzdCBiZSBhIHN0cmluZyIpJiZhcGkuYXNzZXJ0KGNhbGxpbmdDb250cmFjdEluZm8sIm11c3QgYmUgY2FsbGVkIGZyb20gYSBjb250cmFjdCIpKSlyZXR1cm47Y29uc3QgdXRpbGl0eVRva2VuQmFsYW5jZT1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsImJhbGFuY2VzIix7YWNjb3VudDphcGkuc2VuZGVyLHN5bWJvbDoiQkVFIn0pLGF1dGhvcml6ZWRDcmVhdGlvbj0hKCFhcGkuQmlnTnVtYmVyKHBvb2xDcmVhdGlvbkZlZSkubHRlKDApJiZhcGkuc2VuZGVyIT09YXBpLm93bmVyKXx8dXRpbGl0eVRva2VuQmFsYW5jZSYmYXBpLkJpZ051bWJlcih1dGlsaXR5VG9rZW5CYWxhbmNlLmJhbGFuY2UpLmd0ZShwb29sQ3JlYXRpb25GZWUpO2lmKGFwaS5hc3NlcnQoYXV0aG9yaXplZENyZWF0aW9uLCJ5b3UgbXVzdCBoYXZlIGVub3VnaCB0b2tlbnMgdG8gY292ZXIgdGhlIGNyZWF0aW9uIGZlZSIpJiZhcGkuYXNzZXJ0KCEwPT09aXNTaWduZWRXaXRoQWN0aXZlS2V5LCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChtaW5lZFRva2VuJiYic3RyaW5nIj09dHlwZW9mIG1pbmVkVG9rZW4mJmxvdHRlcnlBbW91bnQmJiJzdHJpbmciPT10eXBlb2YgbG90dGVyeUFtb3VudCYmIWFwaS5CaWdOdW1iZXIobG90dGVyeUFtb3VudCkuaXNOYU4oKSYmYXBpLkJpZ051bWJlcihsb3R0ZXJ5QW1vdW50KS5ndCgwKSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydChtaW5lZFRva2VuLmxlbmd0aD4wJiZtaW5lZFRva2VuLmxlbmd0aDw9MTAsImludmFsaWQgc3ltYm9sOiB1cHBlcmNhc2UgbGV0dGVycyBvbmx5LCBtYXggbGVuZ3RoIG9mIDEwIikmJmFwaS5hc3NlcnQoTnVtYmVyLmlzSW50ZWdlcihsb3R0ZXJ5V2lubmVycykmJmxvdHRlcnlXaW5uZXJzPj0xJiZsb3R0ZXJ5V2lubmVyczw9MjAsImludmFsaWQgbG90dGVyeVdpbm5lcnM6IGludGVnZXIgYmV0d2VlbiAxIGFuZCAyMCBvbmx5IikmJmFwaS5hc3NlcnQoTnVtYmVyLmlzSW50ZWdlcihsb3R0ZXJ5SW50ZXJ2YWxIb3VycykmJmxvdHRlcnlJbnRlcnZhbEhvdXJzPj0xJiZsb3R0ZXJ5SW50ZXJ2YWxIb3Vyczw9NzIwLCJpbnZhbGlkIGxvdHRlcnlJbnRlcnZhbEhvdXJzOiBpbnRlZ2VyIGJldHdlZW4gMSBhbmQgNzIwIG9ubHkiKSl7Y29uc3QgbWluZWRUb2tlbk9iamVjdD1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDptaW5lZFRva2VufSk7aWYoYXBpLmFzc2VydChtaW5lZFRva2VuT2JqZWN0LCJtaW5lZFRva2VuIGRvZXMgbm90IGV4aXN0IikmJmFwaS5hc3NlcnQobWluZWRUb2tlbk9iamVjdC5pc3N1ZXI9PT1hcGkuc2VuZGVyfHwiQkVFIj09PW1pbmVkVG9rZW5PYmplY3Quc3ltYm9sJiZhcGkuc2VuZGVyPT09YXBpLm93bmVyLCJtdXN0IGJlIGlzc3VlciBvZiBtaW5lZFRva2VuIikmJmFwaS5hc3NlcnQoYXBpLkJpZ051bWJlcihsb3R0ZXJ5QW1vdW50KS5kcCgpPD1taW5lZFRva2VuT2JqZWN0LnByZWNpc2lvbiwibWluZWRUb2tlbiBwcmVjaXNpb24gbWlzbWF0Y2ggZm9yIGxvdHRlcnlBbW91bnQiKSYmKGNhbGxpbmdDb250cmFjdEluZm98fGF3YWl0IHZhbGlkYXRlVG9rZW5NaW5lcnModG9rZW5NaW5lcnMsbmZ0VG9rZW5NaW5lcikpKXtjb25zdCBibG9ja0RhdGU9bmV3IERhdGUoYXBpLmhpdmVCbG9ja1RpbWVzdGFtcCsiLjAwMFoiKSxuZXdQb29sPXttaW5lZFRva2VuOm1pbmVkVG9rZW4sbG90dGVyeVdpbm5lcnM6bG90dGVyeVdpbm5lcnMsbG90dGVyeUludGVydmFsSG91cnM6bG90dGVyeUludGVydmFsSG91cnMsbG90dGVyeUFtb3VudDpsb3R0ZXJ5QW1vdW50LHRva2VuTWluZXJzOnRva2VuTWluZXJzfHxbXSxuZnRUb2tlbk1pbmVyOm5mdFRva2VuTWluZXIsYWN0aXZlOiExLG5leHRMb3R0ZXJ5VGltZXN0YW1wOmFwaS5CaWdOdW1iZXIoYmxvY2tEYXRlLmdldFRpbWUoKSkucGx1cygzNjAwKmxvdHRlcnlJbnRlcnZhbEhvdXJzKjFlMykudG9OdW1iZXIoKSx0b3RhbFBvd2VyOiIwIn07aWYoY2FsbGluZ0NvbnRyYWN0SW5mbyl7aWYoIWFwaS5hc3NlcnQoIW5mdFRva2VuTWluZXIsImV4dGVybmFsIG5mdFRva2VuTWluZXIgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQiKSlyZXR1cm47bmV3UG9vbC5leHRlcm5hbENvbnRyYWN0PWNhbGxpbmdDb250cmFjdEluZm8ubmFtZSxuZXdQb29sLmV4dGVybmFsTWluZXJzPWV4dGVybmFsTWluZXJzfW5ld1Bvb2wuaWQ9Z2VuZXJhdGVQb29sSWQobmV3UG9vbCk7Y29uc3QgZXhpc3RpbmdQb29sPWF3YWl0IGFwaS5kYi5maW5kT25lKCJwb29scyIse2lkOm5ld1Bvb2wuaWR9KTtpZihhcGkuYXNzZXJ0KCFleGlzdGluZ1Bvb2wsInBvb2wgYWxyZWFkeSBleGlzdHMiKSl7aWYodG9rZW5NaW5lcnMpZm9yKGxldCBpPTA7aTx0b2tlbk1pbmVycy5sZW5ndGg7aSs9MSl7Y29uc3QgdG9rZW5Db25maWc9dG9rZW5NaW5lcnNbaV07YXdhaXQgYXBpLmRiLmluc2VydCgidG9rZW5Qb29scyIse3N5bWJvbDp0b2tlbkNvbmZpZy5zeW1ib2wsaWQ6bmV3UG9vbC5pZH0pfW5mdFRva2VuTWluZXImJmF3YWl0IGFwaS5kYi5pbnNlcnQoIm5mdFRva2VuUG9vbHMiLHtzeW1ib2w6bmZ0VG9rZW5NaW5lci5zeW1ib2wsaWQ6bmV3UG9vbC5pZH0pLG5ld1Bvb2wudXBkYXRpbmc9e2luUHJvZ3Jlc3M6ITAsdXBkYXRlUG9vbFRpbWVzdGFtcDphcGkuQmlnTnVtYmVyKGJsb2NrRGF0ZS5nZXRUaW1lKCkpLnRvTnVtYmVyKCksdG9rZW5JbmRleDowLG5mdFRva2VuSW5kZXg6MCxsYXN0SWQ6MH07Y29uc3QgaW5zZXJ0ZWRQb29sPWF3YWl0IGFwaS5kYi5pbnNlcnQoInBvb2xzIixuZXdQb29sKTthcGkuc2VuZGVyIT09YXBpLm93bmVyJiZhcGkuQmlnTnVtYmVyKHBvb2xDcmVhdGlvbkZlZSkuZ3QoMCkmJmF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5zIiwidHJhbnNmZXIiLHt0bzoibnVsbCIsc3ltYm9sOiJCRUUiLHF1YW50aXR5OnBvb2xDcmVhdGlvbkZlZSxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5fSksYXBpLmVtaXQoImNyZWF0ZVBvb2wiLHtpZDppbnNlcnRlZFBvb2wuaWR9KX19fX0sYWN0aW9ucy5jaGVja1BlbmRpbmdMb3R0ZXJpZXM9YXN5bmMoKT0+e2lmKGFwaS5hc3NlcnQoIm51bGwiPT09YXBpLnNlbmRlciwibm90IGF1dGhvcml6ZWQiKSl7Y29uc3QgdGltZXN0YW1wPW5ldyBEYXRlKGFwaS5oaXZlQmxvY2tUaW1lc3RhbXArIi4wMDBaIikuZ2V0VGltZSgpLHBhcmFtcz1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSksdXBkYXRpbmdMb3R0ZXJpZXM9YXdhaXQgYXBpLmRiLmZpbmQoInBvb2xzIix7InVwZGF0aW5nLmluUHJvZ3Jlc3MiOiEwfSxwYXJhbXMubWF4TG90dGVyaWVzUGVyQmxvY2ssMCxbe2luZGV4OiJpZCIsZGVzY2VuZGluZzohMX1dKTtmb3IobGV0IGk9MDtpPHVwZGF0aW5nTG90dGVyaWVzLmxlbmd0aDtpKz0xKXtjb25zdCBwb29sPXVwZGF0aW5nTG90dGVyaWVzW2ldO2F3YWl0IHJlc3VtZVBvd2VyVXBkYXRlKHBvb2wscGFyYW1zKX1jb25zdCBwZW5kaW5nTG90dGVyaWVzPWF3YWl0IGFwaS5kYi5maW5kKCJwb29scyIse2FjdGl2ZTohMCwidXBkYXRpbmcuaW5Qcm9ncmVzcyI6ITEsbmV4dExvdHRlcnlUaW1lc3RhbXA6eyRsdGU6dGltZXN0YW1wfX0scGFyYW1zLm1heExvdHRlcmllc1BlckJsb2NrLDAsW3tpbmRleDoiaWQiLGRlc2NlbmRpbmc6ITF9XSk7Zm9yKGxldCBpPTA7aTxwZW5kaW5nTG90dGVyaWVzLmxlbmd0aDtpKz0xKXtjb25zdCBwb29sPXBlbmRpbmdMb3R0ZXJpZXNbaV07YXdhaXQgcnVuTG90dGVyeShwb29sLHBhcmFtcyl9fX0sYWN0aW9ucy5oYW5kbGVTdGFrZUNoYW5nZT1hc3luYyBwYXlsb2FkPT57Y29uc3R7YWNjb3VudDphY2NvdW50LHN5bWJvbDpzeW1ib2wscXVhbnRpdHk6cXVhbnRpdHksZGVsZWdhdGVkOmRlbGVnYXRlZCxjYWxsaW5nQ29udHJhY3RJbmZvOmNhbGxpbmdDb250cmFjdEluZm99PXBheWxvYWQ7YXBpLmFzc2VydChjYWxsaW5nQ29udHJhY3RJbmZvJiYidG9rZW5zIj09PWNhbGxpbmdDb250cmFjdEluZm8ubmFtZSwibXVzdCBiZSBjYWxsZWQgZnJvbSB0b2tlbnMgY29udHJhY3QiKSYmYXdhaXQgZmluZEFuZFByb2Nlc3NBbGwoIm1pbmluZyIsInRva2VuUG9vbHMiLHtzeW1ib2w6c3ltYm9sfSxhc3luYyB0b2tlblBvb2w9Pntjb25zdCBwb29sPWF3YWl0IGFwaS5kYi5maW5kT25lKCJwb29scyIse2lkOnRva2VuUG9vbC5pZH0pO2xldCBhZGp1c3RlZDthZGp1c3RlZD1kZWxlZ2F0ZWQ/YXdhaXQgdXBkYXRlTWluaW5nUG93ZXIocG9vbCxzeW1ib2wsYWNjb3VudCwwLHF1YW50aXR5KTphd2FpdCB1cGRhdGVNaW5pbmdQb3dlcihwb29sLHN5bWJvbCxhY2NvdW50LHF1YW50aXR5LDApLHBvb2wudG90YWxQb3dlcj1hZGp1c3RlZC5wbHVzKHBvb2wudG90YWxQb3dlciksYXdhaXQgYXBpLmRiLnVwZGF0ZSgicG9vbHMiLHBvb2wpfSl9LGFjdGlvbnMuaGFuZGxlTmZ0Q2hhbmdlPWFzeW5jIHBheWxvYWQ9Pntjb25zdHtzeW1ib2w6c3ltYm9sLG5mdDpuZnQsYWRkOmFkZCxjYWxsaW5nQ29udHJhY3RJbmZvOmNhbGxpbmdDb250cmFjdEluZm99PXBheWxvYWQ7YXBpLmFzc2VydChjYWxsaW5nQ29udHJhY3RJbmZvJiYibmZ0Ij09PWNhbGxpbmdDb250cmFjdEluZm8ubmFtZSwibXVzdCBiZSBjYWxsZWQgZnJvbSBuZnQgY29udHJhY3QiKSYmYXdhaXQgZmluZEFuZFByb2Nlc3NBbGwoIm1pbmluZyIsIm5mdFRva2VuUG9vbHMiLHtzeW1ib2w6c3ltYm9sfSxhc3luYyB0b2tlblBvb2w9Pntjb25zdCBwb29sPWF3YWl0IGFwaS5kYi5maW5kT25lKCJwb29scyIse2lkOnRva2VuUG9vbC5pZH0pO2lmKHBvb2wudXBkYXRpbmcuaW5Qcm9ncmVzcyYmcG9vbC51cGRhdGluZy50b2tlbkluZGV4PT09cG9vbC50b2tlbk1pbmVycy5sZW5ndGgmJnBvb2wudXBkYXRpbmcubGFzdElkPG5mdC5faWQpcmV0dXJuO2NvbnN0IHR5cGVQcm9wZXJ0aWVzPXBvb2wubmZ0VG9rZW5NaW5lci50eXBlTWFwW25mdC5wcm9wZXJ0aWVzW3Bvb2wubmZ0VG9rZW5NaW5lci50eXBlRmllbGRdXTtpZih0eXBlUHJvcGVydGllcyl7Y29uc3QgYWRqdXN0ZWQ9YXdhaXQgdXBkYXRlTmZ0TWluaW5nUG93ZXIocG9vbCxuZnQsdHlwZVByb3BlcnRpZXMsYWRkLHBvb2wudXBkYXRpbmcudXBkYXRlUG9vbFRpbWVzdGFtcCk7cG9vbC50b3RhbFBvd2VyPWFkanVzdGVkLnBsdXMocG9vbC50b3RhbFBvd2VyKSxhd2FpdCBhcGkuZGIudXBkYXRlKCJwb29scyIscG9vbCl9fSl9Ow=="}}}