{"id":"ssc-mainnet-hive","json":{"contractName":"contract","contractAction":"deploy","contractPayload":{"name":"tokenfunds","params":"","code":"Y29uc3QgRmVlTWV0aG9kPVsiYnVybiIsImlzc3VlciJdLFBheW91dFR5cGU9WyJ1c2VyIiwiY29udHJhY3QiXTtmdW5jdGlvbiB2YWxpZGF0ZVRva2VucyhwYXlUb2tlbk9iaix2b3RlVG9rZW5PYmope3JldHVybiEhYXBpLmFzc2VydChwYXlUb2tlbk9iaiYmKHBheVRva2VuT2JqLmlzc3Vlcj09PWFwaS5zZW5kZXJ8fCJCRUUiPT09cGF5VG9rZW5PYmouc3ltYm9sJiZhcGkuc2VuZGVyPT09YXBpLm93bmVyKSwibXVzdCBiZSBpc3N1ZXIgb2YgcGF5VG9rZW4iKSYmISFhcGkuYXNzZXJ0KHZvdGVUb2tlbk9iaiYmdm90ZVRva2VuT2JqLnN0YWtpbmdFbmFibGVkLCJ2b3RlVG9rZW4gbXVzdCBoYXZlIHN0YWtpbmcgZW5hYmxlZCIpfWZ1bmN0aW9uIHZhbGlkYXRlRGF0ZVRpbWUoc3RyKXtpZigyND09PXN0ci5sZW5ndGgpe2ZvcihsZXQgaT0wO2k8c3RyLmxlbmd0aCYmMT09PVs1LDgsMTEsMTQsMTcsMjFdLmluZGV4T2YoaSk7aSs9MSl7Y29uc3QgY29kZT1zdHIuY2hhckNvZGVBdChpKTtpZighKGNvZGU+NDcmJmNvZGU8NTgpKXJldHVybiExfXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIHZhbGlkYXRlRGF0ZVJhbmdlKHN0YXJ0RGF0ZSxlbmREYXRlLG1heERheXMpe2lmKCFhcGkuYXNzZXJ0KHZhbGlkYXRlRGF0ZVRpbWUoc3RhcnREYXRlKSYmdmFsaWRhdGVEYXRlVGltZShlbmREYXRlKSwiaW52YWxpZCBkYXRldGltZSBmb3JtYXQ6IFlZWVktTU0tRERUaGg6bW06c3Muc3NzWiIpKXJldHVybiExO2NvbnN0IG5vdz1uZXcgRGF0ZShhcGkuaGl2ZUJsb2NrVGltZXN0YW1wKyIuMDAwWiIpLHN0YXJ0PW5ldyBEYXRlKHN0YXJ0RGF0ZSksZW5kPW5ldyBEYXRlKGVuZERhdGUpO2lmKCFhcGkuYXNzZXJ0KGFwaS5CaWdOdW1iZXIoc3RhcnQuZ2V0VGltZSgpKS5sdChhcGkuQmlnTnVtYmVyKGVuZC5nZXRUaW1lKCkpLm1pbnVzKDg2NGU1KSksImRhdGVzIG11c3QgYmUgYXQgbGVhc3QgMSBkYXkgYXBhcnQiKXx8IWFwaS5hc3NlcnQoYXBpLkJpZ051bWJlcihzdGFydC5nZXRUaW1lKCkpLmd0KGFwaS5CaWdOdW1iZXIobm93LmdldFRpbWUoKSkucGx1cyg4NjRlNSkpLCJzdGFydERhdGUgbXVzdCBiZSBhdCBsZWFzdCAxIGRheSBpbiB0aGUgZnV0dXJlIikpcmV0dXJuITE7Y29uc3QgcmFuZ2VEYXlzPWFwaS5CaWdOdW1iZXIoc3RhcnQuZ2V0VGltZSgpKS5taW51cyhlbmQuZ2V0VGltZSgpKS5hYnMoKS5kaXZpZGVkQnkoODY0ZTUpLnRvRml4ZWQoMCxhcGkuQmlnTnVtYmVyLlJPVU5EX0NFSUwpO3JldHVybiEhYXBpLmFzc2VydChhcGkuQmlnTnVtYmVyKHJhbmdlRGF5cykubHRlKG1heERheXMpLCJkYXRlIHJhbmdlIGV4Y2VlZHMgRFRGIG1heERheXMiKX1mdW5jdGlvbiB2YWxpZGF0ZURhdGVDaGFuZ2UoZGF0ZSxuZXdEYXRlKXtjb25zdCBjdXI9bmV3IERhdGUoZGF0ZSkscmVwbD1uZXcgRGF0ZShuZXdEYXRlKTtyZXR1cm4hIWFwaS5hc3NlcnQocmVwbDw9Y3VyLCJkYXRlIGNhbiBvbmx5IGJlIHJlZHVjZWQiKX1mdW5jdGlvbiB2YWxpZGF0ZVBlbmRpbmcocHJvcG9zYWwpe2NvbnN0IGJsb2NrRGF0ZT1uZXcgRGF0ZShhcGkuaGl2ZUJsb2NrVGltZXN0YW1wKyIuMDAwWiIpO3JldHVybiBuZXcgRGF0ZShwcm9wb3NhbC5lbmREYXRlKT49YmxvY2tEYXRlfWFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVByb3Bvc2FsV2VpZ2h0KGlkLGRlbHRhQXBwcm92YWxXZWlnaHQpe2NvbnN0IHByb3Bvc2FsPWF3YWl0IGFwaS5kYi5maW5kT25lKCJwcm9wb3NhbHMiLHtfaWQ6aWR9KTtyZXR1cm4hKCFwcm9wb3NhbHx8IXZhbGlkYXRlUGVuZGluZyhwcm9wb3NhbCkpJiYocHJvcG9zYWwuYXBwcm92YWxXZWlnaHQ9eyRudW1iZXJEZWNpbWFsOmFwaS5CaWdOdW1iZXIocHJvcG9zYWwuYXBwcm92YWxXZWlnaHQuJG51bWJlckRlY2ltYWwpLnBsdXMoZGVsdGFBcHByb3ZhbFdlaWdodCl9LGF3YWl0IGFwaS5kYi51cGRhdGUoInByb3Bvc2FscyIscHJvcG9zYWwpLCEwKX1hc3luYyBmdW5jdGlvbiBjaGVja1BlbmRpbmdQcm9wb3NhbHMoZHRmLHBhcmFtcyl7Y29uc3QgYmxvY2tEYXRlPW5ldyBEYXRlKGFwaS5oaXZlQmxvY2tUaW1lc3RhbXArIi4wMDBaIikscGF5VG9rZW5PYmo9YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLCJ0b2tlbnMiLHtzeW1ib2w6ZHRmLnBheVRva2VufSksdGlja1BheVJhdGlvPWFwaS5CaWdOdW1iZXIocGFyYW1zLmR0ZlRpY2tIb3VycykuZGl2aWRlZEJ5KDI0KSxmdW5kZWQ9W10sZnVuZGVkTG9nPVtdO2xldCBwcm9wb3NhbHMsb2Zmc2V0PTAscnVubmluZ1BheT1hcGkuQmlnTnVtYmVyKGR0Zi5tYXhBbW91bnRQZXJEYXkpLnRpbWVzKHRpY2tQYXlSYXRpbyk7Zm9yKDtydW5uaW5nUGF5Lmd0KDApOyl7cHJvcG9zYWxzPWF3YWl0IGFwaS5kYi5maW5kKCJwcm9wb3NhbHMiLHtmdW5kSWQ6ZHRmLmlkLGFjdGl2ZTohMCxhcHByb3ZhbFdlaWdodDp7JGd0OnskbnVtYmVyRGVjaW1hbDphcGkuQmlnTnVtYmVyKGR0Zi52b3RlVGhyZXNob2xkKX19LHN0YXJ0RGF0ZTp7JGx0ZTpibG9ja0RhdGUudG9JU09TdHJpbmcoKX0sZW5kRGF0ZTp7JGd0ZTpibG9ja0RhdGUudG9JU09TdHJpbmcoKX19LHBhcmFtcy5wcm9jZXNzUXVlcnlMaW1pdCxvZmZzZXQsW3tpbmRleDoiYnlBcHByb3ZhbFdlaWdodCIsZGVzY2VuZGluZzohMH0se2luZGV4OiJfaWQiLGRlc2NlbmRpbmc6ITF9XSk7Zm9yKGxldCBpPTA7aTxwcm9wb3NhbHMubGVuZ3RoO2krPTEpe2lmKGFwaS5CaWdOdW1iZXIocHJvcG9zYWxzW2ldLmFtb3VudFBlckRheSkudGltZXModGlja1BheVJhdGlvKS5ndGUocnVubmluZ1BheSkpe3Byb3Bvc2Fsc1tpXS50aWNrUGF5PXJ1bm5pbmdQYXkudG9GaXhlZChwYXlUb2tlbk9iai5wcmVjaXNpb24sYXBpLkJpZ051bWJlci5ST1VORF9ET1dOKSxmdW5kZWQucHVzaChwcm9wb3NhbHNbaV0pLHJ1bm5pbmdQYXk9YXBpLkJpZ051bWJlcigwKTticmVha31wcm9wb3NhbHNbaV0udGlja1BheT1hcGkuQmlnTnVtYmVyKHByb3Bvc2Fsc1tpXS5hbW91bnRQZXJEYXkpLnRpbWVzKHRpY2tQYXlSYXRpbykudG9GaXhlZChwYXlUb2tlbk9iai5wcmVjaXNpb24sYXBpLkJpZ051bWJlci5ST1VORF9ET1dOKSxmdW5kZWQucHVzaChwcm9wb3NhbHNbaV0pLHJ1bm5pbmdQYXk9cnVubmluZ1BheS5taW51cyhwcm9wb3NhbHNbaV0udGlja1BheSl9aWYocHJvcG9zYWxzLmxlbmd0aDxwYXJhbXMucHJvY2Vzc1F1ZXJ5TGltaXQpYnJlYWs7b2Zmc2V0Kz1wYXJhbXMucHJvY2Vzc1F1ZXJ5TGltaXR9Zm9yKGxldCBpPTA7aTxmdW5kZWQubGVuZ3RoO2krPTEpe2NvbnN0IGZ1bmQ9ZnVuZGVkW2ldO2Z1bmRlZExvZy5wdXNoKHtpZDpmdW5kLl9pZCx0aWNrUGF5OmZ1bmQudGlja1BheX0pLCJ1c2VyIj09PWZ1bmQucGF5b3V0LnR5cGU/YXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJ0b2tlbnMiLCJpc3N1ZSIse3RvOmZ1bmQucGF5b3V0Lm5hbWUsc3ltYm9sOnBheVRva2VuT2JqLnN5bWJvbCxxdWFudGl0eTpmdW5kLnRpY2tQYXl9KToiY29udHJhY3QiPT09ZnVuZC5wYXlvdXQudHlwZSYmKGF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5zIiwiaXNzdWVUb0NvbnRyYWN0Iix7dG86ZnVuZC5wYXlvdXQubmFtZSxzeW1ib2w6cGF5VG9rZW5PYmouc3ltYm9sLHF1YW50aXR5OmZ1bmQudGlja1BheX0pLGF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdChmdW5kLnBheW91dC5uYW1lLCJyZWNlaXZlRHRmVG9rZW5zIix7ZGF0YTpmdW5kLnBheW91dC5jb250cmFjdFBheWxvYWQsc3ltYm9sOnBheVRva2VuT2JqLnN5bWJvbCxxdWFudGl0eTpmdW5kLnRpY2tQYXl9KSl9ZHRmLmxhc3RUaWNrVGltZT1hcGkuQmlnTnVtYmVyKGJsb2NrRGF0ZS5nZXRUaW1lKCkpLnRvTnVtYmVyKCksYXdhaXQgYXBpLmRiLnVwZGF0ZSgiZnVuZHMiLGR0ZiksYXBpLmVtaXQoImZ1bmRQcm9wb3NhbHMiLHtmdW5kSWQ6ZHRmLmlkLGZ1bmRlZDpmdW5kZWRMb2d9KX1hY3Rpb25zLmNyZWF0ZVNTQz1hc3luYygpPT57aWYoITE9PT1hd2FpdCBhcGkuZGIudGFibGVFeGlzdHMoImZ1bmRzIikpe2F3YWl0IGFwaS5kYi5jcmVhdGVUYWJsZSgiZnVuZHMiLFsiaWQiLCJsYXN0VGlja1RpbWUiXSksYXdhaXQgYXBpLmRiLmNyZWF0ZVRhYmxlKCJwcm9wb3NhbHMiLFsiZnVuZElkIix7bmFtZToiYnlBcHByb3ZhbFdlaWdodCIsaW5kZXg6e2Z1bmRJZDoxLGFwcHJvdmFsV2VpZ2h0OjF9fV0pLGF3YWl0IGFwaS5kYi5jcmVhdGVUYWJsZSgiYXBwcm92YWxzIixbImZyb20iLCJ0byJdKSxhd2FpdCBhcGkuZGIuY3JlYXRlVGFibGUoImFjY291bnRzIixbXSx7cHJpbWFyeUtleTpbImFjY291bnQiXX0pLGF3YWl0IGFwaS5kYi5jcmVhdGVUYWJsZSgicGFyYW1zIik7Y29uc3QgcGFyYW1zPXtkdGZDcmVhdGlvbkZlZToiMTAwMCIsZHRmVXBkYXRlRmVlOiIzMDAiLGR0ZlRpY2tIb3VyczoiMjQiLG1heER0ZnNQZXJCbG9jazo0MCxtYXhBY2NvdW50QXBwcm92YWxzOjUwLHByb2Nlc3NRdWVyeUxpbWl0OjFlM307YXdhaXQgYXBpLmRiLmluc2VydCgicGFyYW1zIixwYXJhbXMpfX0sYWN0aW9ucy51cGRhdGVQYXJhbXM9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e2R0ZkNyZWF0aW9uRmVlOmR0ZkNyZWF0aW9uRmVlLGR0ZlVwZGF0ZUZlZTpkdGZVcGRhdGVGZWUsZHRmVGlja0hvdXJzOmR0ZlRpY2tIb3VycyxtYXhEdGZzUGVyQmxvY2s6bWF4RHRmc1BlckJsb2NrLG1heEFjY291bnRBcHByb3ZhbHM6bWF4QWNjb3VudEFwcHJvdmFscyxwcm9jZXNzUXVlcnlMaW1pdDpwcm9jZXNzUXVlcnlMaW1pdH09cGF5bG9hZDtpZihhcGkuc2VuZGVyIT09YXBpLm93bmVyKXJldHVybjtjb25zdCBwYXJhbXM9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBhcmFtcyIse30pO2lmKGR0ZkNyZWF0aW9uRmVlKXtpZighYXBpLmFzc2VydCgic3RyaW5nIj09dHlwZW9mIGR0ZkNyZWF0aW9uRmVlJiYhYXBpLkJpZ051bWJlcihkdGZDcmVhdGlvbkZlZSkuaXNOYU4oKSYmYXBpLkJpZ051bWJlcihkdGZDcmVhdGlvbkZlZSkuZ3RlKDApLCJpbnZhbGlkIGR0ZkNyZWF0aW9uRmVlIikpcmV0dXJuO3BhcmFtcy5kdGZDcmVhdGlvbkZlZT1kdGZDcmVhdGlvbkZlZX1pZihkdGZVcGRhdGVGZWUpe2lmKCFhcGkuYXNzZXJ0KCJzdHJpbmciPT10eXBlb2YgZHRmVXBkYXRlRmVlJiYhYXBpLkJpZ051bWJlcihkdGZVcGRhdGVGZWUpLmlzTmFOKCkmJmFwaS5CaWdOdW1iZXIoZHRmVXBkYXRlRmVlKS5ndGUoMCksImludmFsaWQgZHRmVXBkYXRlRmVlIikpcmV0dXJuO3BhcmFtcy5kdGZVcGRhdGVGZWU9ZHRmVXBkYXRlRmVlfWlmKGR0ZlRpY2tIb3Vycyl7aWYoIWFwaS5hc3NlcnQoInN0cmluZyI9PXR5cGVvZiBkdGZUaWNrSG91cnMmJmFwaS5CaWdOdW1iZXIoZHRmVGlja0hvdXJzKS5pc0ludGVnZXIoKSYmYXBpLkJpZ051bWJlcihkdGZUaWNrSG91cnMpLmd0ZSgxKSwiaW52YWxpZCBkdGZUaWNrSG91cnMiKSlyZXR1cm47cGFyYW1zLmR0ZlRpY2tIb3Vycz1kdGZUaWNrSG91cnN9aWYobWF4RHRmc1BlckJsb2NrKXtpZighYXBpLmFzc2VydCgic3RyaW5nIj09dHlwZW9mIG1heER0ZnNQZXJCbG9jayYmYXBpLkJpZ051bWJlcihtYXhEdGZzUGVyQmxvY2spLmlzSW50ZWdlcigpJiZhcGkuQmlnTnVtYmVyKG1heER0ZnNQZXJCbG9jaykuZ3RlKDEpLCJpbnZhbGlkIG1heER0ZnNQZXJCbG9jayIpKXJldHVybjtwYXJhbXMubWF4RHRmc1BlckJsb2NrPWFwaS5CaWdOdW1iZXIobWF4RHRmc1BlckJsb2NrKS50b051bWJlcigpfWlmKG1heEFjY291bnRBcHByb3ZhbHMpe2lmKCFhcGkuYXNzZXJ0KCJzdHJpbmciPT10eXBlb2YgbWF4QWNjb3VudEFwcHJvdmFscyYmYXBpLkJpZ051bWJlcihtYXhBY2NvdW50QXBwcm92YWxzKS5pc0ludGVnZXIoKSYmYXBpLkJpZ051bWJlcihtYXhBY2NvdW50QXBwcm92YWxzKS5ndGUoMSksImludmFsaWQgbWF4RHRmc1BlckJsb2NrIikpcmV0dXJuO3BhcmFtcy5tYXhBY2NvdW50QXBwcm92YWxzPWFwaS5CaWdOdW1iZXIobWF4QWNjb3VudEFwcHJvdmFscykudG9OdW1iZXIoKX1pZihwcm9jZXNzUXVlcnlMaW1pdCl7aWYoIWFwaS5hc3NlcnQoInN0cmluZyI9PXR5cGVvZiBwcm9jZXNzUXVlcnlMaW1pdCYmYXBpLkJpZ051bWJlcihwcm9jZXNzUXVlcnlMaW1pdCkuaXNJbnRlZ2VyKCkmJmFwaS5CaWdOdW1iZXIocHJvY2Vzc1F1ZXJ5TGltaXQpLmd0ZSgxKSwiaW52YWxpZCBwcm9jZXNzUXVlcnlMaW1pdCIpKXJldHVybjtwYXJhbXMucHJvY2Vzc1F1ZXJ5TGltaXQ9YXBpLkJpZ051bWJlcihwcm9jZXNzUXVlcnlMaW1pdCkudG9OdW1iZXIoKX1hd2FpdCBhcGkuZGIudXBkYXRlKCJwYXJhbXMiLHBhcmFtcyl9LGFjdGlvbnMuY3JlYXRlRnVuZD1hc3luYyBwYXlsb2FkPT57Y29uc3R7cGF5VG9rZW46cGF5VG9rZW4sdm90ZVRva2VuOnZvdGVUb2tlbix2b3RlVGhyZXNob2xkOnZvdGVUaHJlc2hvbGQsbWF4RGF5czptYXhEYXlzLG1heEFtb3VudFBlckRheTptYXhBbW91bnRQZXJEYXkscHJvcG9zYWxGZWU6cHJvcG9zYWxGZWUsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX09cGF5bG9hZCxwYXJhbXM9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBhcmFtcyIse30pLHtkdGZDcmVhdGlvbkZlZTpkdGZDcmVhdGlvbkZlZX09cGFyYW1zLHV0aWxpdHlUb2tlbkJhbGFuY2U9YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLCJiYWxhbmNlcyIse2FjY291bnQ6YXBpLnNlbmRlcixzeW1ib2w6IkJFRSJ9KSxhdXRob3JpemVkQ3JlYXRpb249ISghYXBpLkJpZ051bWJlcihkdGZDcmVhdGlvbkZlZSkubHRlKDApJiZhcGkuc2VuZGVyIT09YXBpLm93bmVyKXx8dXRpbGl0eVRva2VuQmFsYW5jZSYmYXBpLkJpZ051bWJlcih1dGlsaXR5VG9rZW5CYWxhbmNlLmJhbGFuY2UpLmd0ZShkdGZDcmVhdGlvbkZlZSk7aWYoYXBpLmFzc2VydChhdXRob3JpemVkQ3JlYXRpb24sInlvdSBtdXN0IGhhdmUgZW5vdWdoIHRva2VucyB0byBjb3ZlciB0aGUgY3JlYXRpb24gZmVlIikmJmFwaS5hc3NlcnQoITA9PT1pc1NpZ25lZFdpdGhBY3RpdmVLZXksInlvdSBtdXN0IHVzZSBhIHRyYW5zYWN0aW9uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KCJzdHJpbmciPT10eXBlb2Ygdm90ZVRocmVzaG9sZCYmYXBpLkJpZ051bWJlcih2b3RlVGhyZXNob2xkKS5ndCgwKSwiaW52YWxpZCB2b3RlVGhyZXNob2xkOiBncmVhdGVyIHRoYW4gMCIpJiZhcGkuYXNzZXJ0KCJzdHJpbmciPT10eXBlb2YgbWF4RGF5cyYmYXBpLkJpZ051bWJlcihtYXhEYXlzKS5pc0ludGVnZXIoKSYmYXBpLkJpZ051bWJlcihtYXhEYXlzKS5ndCgwKSYmYXBpLkJpZ051bWJlcihtYXhEYXlzKS5sdGUoNzMwKSwiaW52YWxpZCBtYXhEYXlzOiBpbnRlZ2VyIGJldHdlZW4gMSBhbmQgNzMwIikmJmFwaS5hc3NlcnQoInN0cmluZyI9PXR5cGVvZiBtYXhBbW91bnRQZXJEYXkmJmFwaS5CaWdOdW1iZXIobWF4QW1vdW50UGVyRGF5KS5ndCgwKSwiaW52YWxpZCBtYXhBbW91bnRQZXJEYXk6IGdyZWF0ZXIgdGhhbiAwIikpe2lmKHByb3Bvc2FsRmVlKXtpZighYXBpLmFzc2VydCgib2JqZWN0Ij09dHlwZW9mIHByb3Bvc2FsRmVlJiYic3RyaW5nIj09dHlwZW9mIHByb3Bvc2FsRmVlLm1ldGhvZCYmLTEhPT1GZWVNZXRob2QuaW5kZXhPZihwcm9wb3NhbEZlZS5tZXRob2QpJiYic3RyaW5nIj09dHlwZW9mIHByb3Bvc2FsRmVlLnN5bWJvbCYmInN0cmluZyI9PXR5cGVvZiBwcm9wb3NhbEZlZS5hbW91bnQmJmFwaS5CaWdOdW1iZXIocHJvcG9zYWxGZWUuYW1vdW50KS5ndCgwKSwiaW52YWxpZCBwcm9wb3NhbEZlZSIpKXJldHVybjtjb25zdCBmZWVUb2tlbk9iaj1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDpwcm9wb3NhbEZlZS5zeW1ib2x9KTtpZighYXBpLmFzc2VydChmZWVUb2tlbk9iaiYmYXBpLkJpZ051bWJlcihwcm9wb3NhbEZlZS5hbW91bnQpLmRwKCk8PWZlZVRva2VuT2JqLnByZWNpc2lvbiwiaW52YWxpZCBwcm9wb3NhbEZlZSB0b2tlbiBvciBwcmVjaXNpb24iKSlyZXR1cm59Y29uc3QgcGF5VG9rZW5PYmo9YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLCJ0b2tlbnMiLHtzeW1ib2w6cGF5VG9rZW59KSx2b3RlVG9rZW5PYmo9YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLCJ0b2tlbnMiLHtzeW1ib2w6dm90ZVRva2VufSk7aWYoIXZhbGlkYXRlVG9rZW5zKHBheVRva2VuT2JqLHZvdGVUb2tlbk9iail8fCFhcGkuYXNzZXJ0KGFwaS5CaWdOdW1iZXIobWF4QW1vdW50UGVyRGF5KS5kcCgpPD1wYXlUb2tlbk9iai5wcmVjaXNpb24sIm1heEFtb3VudFBlckRheSBwcmVjaXNpb24gbWlzbWF0Y2giKXx8IWFwaS5hc3NlcnQoYXBpLkJpZ051bWJlcih2b3RlVGhyZXNob2xkKS5kcCgpPD12b3RlVG9rZW5PYmoucHJlY2lzaW9uLCJ2b3RlVGhyZXNob2xkIHByZWNpc2lvbiBtaXNtYXRjaCIpKXJldHVybjtjb25zdCBub3c9bmV3IERhdGUoYXBpLmhpdmVCbG9ja1RpbWVzdGFtcCsiLjAwMFoiKSxuZXdEdGY9e3BheVRva2VuOnBheVRva2VuLHZvdGVUb2tlbjp2b3RlVG9rZW4sdm90ZVRocmVzaG9sZDp2b3RlVGhyZXNob2xkLG1heERheXM6bWF4RGF5cyxtYXhBbW91bnRQZXJEYXk6bWF4QW1vdW50UGVyRGF5LHByb3Bvc2FsRmVlOnByb3Bvc2FsRmVlLGFjdGl2ZTohMSxjcmVhdG9yOmFwaS5zZW5kZXIsbGFzdFRpY2tUaW1lOm5vdy5nZXRUaW1lKCl9O25ld0R0Zi5pZD1gJHtwYXlUb2tlbn06JHt2b3RlVG9rZW59YDtjb25zdCBleGlzdGluZ0R0Zj1hd2FpdCBhcGkuZGIuZmluZE9uZSgiZnVuZHMiLHtpZDpuZXdEdGYuaWR9KTtpZighYXBpLmFzc2VydCghZXhpc3RpbmdEdGYsIkRURiBhbHJlYWR5IGV4aXN0cyIpKXJldHVybjtjb25zdCBpbnNlcnRlZER0Zj1hd2FpdCBhcGkuZGIuaW5zZXJ0KCJmdW5kcyIsbmV3RHRmKTthcGkuc2VuZGVyIT09YXBpLm93bmVyJiZhcGkuQmlnTnVtYmVyKGR0ZkNyZWF0aW9uRmVlKS5ndCgwKSYmYXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJ0b2tlbnMiLCJ0cmFuc2ZlciIse3RvOiJudWxsIixzeW1ib2w6IkJFRSIscXVhbnRpdHk6ZHRmQ3JlYXRpb25GZWUsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX0pLGFwaS5lbWl0KCJjcmVhdGVGdW5kIix7aWQ6aW5zZXJ0ZWREdGYuaWR9KX19LGFjdGlvbnMudXBkYXRlRnVuZD1hc3luYyBwYXlsb2FkPT57Y29uc3R7ZnVuZElkOmZ1bmRJZCx2b3RlVGhyZXNob2xkOnZvdGVUaHJlc2hvbGQsbWF4RGF5czptYXhEYXlzLG1heEFtb3VudFBlckRheTptYXhBbW91bnRQZXJEYXkscHJvcG9zYWxGZWU6cHJvcG9zYWxGZWUsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX09cGF5bG9hZCxwYXJhbXM9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBhcmFtcyIse30pLHtkdGZVcGRhdGVGZWU6ZHRmVXBkYXRlRmVlfT1wYXJhbXMsdXRpbGl0eVRva2VuQmFsYW5jZT1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsImJhbGFuY2VzIix7YWNjb3VudDphcGkuc2VuZGVyLHN5bWJvbDoiQkVFIn0pLGF1dGhvcml6ZWRVcGRhdGU9ISghYXBpLkJpZ051bWJlcihkdGZVcGRhdGVGZWUpLmx0ZSgwKSYmYXBpLnNlbmRlciE9PWFwaS5vd25lcil8fHV0aWxpdHlUb2tlbkJhbGFuY2UmJmFwaS5CaWdOdW1iZXIodXRpbGl0eVRva2VuQmFsYW5jZS5iYWxhbmNlKS5ndGUoZHRmVXBkYXRlRmVlKTtpZihhcGkuYXNzZXJ0KGF1dGhvcml6ZWRVcGRhdGUsInlvdSBtdXN0IGhhdmUgZW5vdWdoIHRva2VucyB0byBjb3ZlciB0aGUgdXBkYXRlIGZlZSIpJiZhcGkuYXNzZXJ0KCEwPT09aXNTaWduZWRXaXRoQWN0aXZlS2V5LCJ5b3UgbXVzdCB1c2UgYSB0cmFuc2FjdGlvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydCgic3RyaW5nIj09dHlwZW9mIHZvdGVUaHJlc2hvbGQmJmFwaS5CaWdOdW1iZXIodm90ZVRocmVzaG9sZCkuZ3QoMCksImludmFsaWQgdm90ZVRocmVzaG9sZDogZ3JlYXRlciB0aGFuIDAiKSYmYXBpLmFzc2VydCgic3RyaW5nIj09dHlwZW9mIG1heERheXMmJmFwaS5CaWdOdW1iZXIobWF4RGF5cykuaXNJbnRlZ2VyKCkmJmFwaS5CaWdOdW1iZXIobWF4RGF5cykuZ3QoMCkmJmFwaS5CaWdOdW1iZXIobWF4RGF5cykubHRlKDczMCksImludmFsaWQgbWF4RGF5czogaW50ZWdlciBiZXR3ZWVuIDEgYW5kIDczMCIpJiZhcGkuYXNzZXJ0KCJzdHJpbmciPT10eXBlb2YgbWF4QW1vdW50UGVyRGF5JiZhcGkuQmlnTnVtYmVyKG1heEFtb3VudFBlckRheSkuZ3QoMCksImludmFsaWQgbWF4QW1vdW50UGVyRGF5OiBncmVhdGVyIHRoYW4gMCIpKXtpZihwcm9wb3NhbEZlZSl7aWYoIWFwaS5hc3NlcnQoIm9iamVjdCI9PXR5cGVvZiBwcm9wb3NhbEZlZSYmInN0cmluZyI9PXR5cGVvZiBwcm9wb3NhbEZlZS5tZXRob2QmJi0xIT09RmVlTWV0aG9kLmluZGV4T2YocHJvcG9zYWxGZWUubWV0aG9kKSYmInN0cmluZyI9PXR5cGVvZiBwcm9wb3NhbEZlZS5zeW1ib2wmJiJzdHJpbmciPT10eXBlb2YgcHJvcG9zYWxGZWUuYW1vdW50JiZhcGkuQmlnTnVtYmVyKHByb3Bvc2FsRmVlLmFtb3VudCkuZ3QoMCksImludmFsaWQgcHJvcG9zYWxGZWUiKSlyZXR1cm47Y29uc3QgZmVlVG9rZW5PYmo9YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLCJ0b2tlbnMiLHtzeW1ib2w6cHJvcG9zYWxGZWUuc3ltYm9sfSk7aWYoIWFwaS5hc3NlcnQoZmVlVG9rZW5PYmomJmFwaS5CaWdOdW1iZXIocHJvcG9zYWxGZWUuYW1vdW50KS5kcCgpPD1mZWVUb2tlbk9iai5wcmVjaXNpb24sImludmFsaWQgcHJvcG9zYWxGZWUgdG9rZW4gb3IgcHJlY2lzaW9uIikpcmV0dXJufWNvbnN0IGV4aXN0aW5nRHRmPWF3YWl0IGFwaS5kYi5maW5kT25lKCJmdW5kcyIse2lkOmZ1bmRJZH0pO2lmKCFhcGkuYXNzZXJ0KGV4aXN0aW5nRHRmLCJEVEYgbm90IGZvdW5kIil8fCFhcGkuYXNzZXJ0KGV4aXN0aW5nRHRmLmNyZWF0b3I9PT1hcGkuc2VuZGVyfHxhcGkub3duZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIERURiBjcmVhdG9yIikpcmV0dXJuO2NvbnN0IHBheVRva2VuT2JqPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwidG9rZW5zIix7c3ltYm9sOmV4aXN0aW5nRHRmLnBheVRva2VufSksdm90ZVRva2VuT2JqPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwidG9rZW5zIix7c3ltYm9sOmV4aXN0aW5nRHRmLnZvdGVUb2tlbn0pO2lmKCFhcGkuYXNzZXJ0KGFwaS5CaWdOdW1iZXIobWF4QW1vdW50UGVyRGF5KS5kcCgpPD1wYXlUb2tlbk9iai5wcmVjaXNpb24sIm1heEFtb3VudFBlckRheSBwcmVjaXNpb24gbWlzbWF0Y2giKXx8IWFwaS5hc3NlcnQoYXBpLkJpZ051bWJlcih2b3RlVGhyZXNob2xkKS5kcCgpPD12b3RlVG9rZW5PYmoucHJlY2lzaW9uLCJ2b3RlVGhyZXNob2xkIHByZWNpc2lvbiBtaXNtYXRjaCIpKXJldHVybjtleGlzdGluZ0R0Zi52b3RlVGhyZXNob2xkPXZvdGVUaHJlc2hvbGQsZXhpc3RpbmdEdGYubWF4RGF5cz1tYXhEYXlzLGV4aXN0aW5nRHRmLm1heEFtb3VudFBlckRheT1tYXhBbW91bnRQZXJEYXkscHJvcG9zYWxGZWUmJihleGlzdGluZ0R0Zi5wcm9wb3NhbEZlZT1wcm9wb3NhbEZlZSksYXdhaXQgYXBpLmRiLnVwZGF0ZSgiZnVuZHMiLGV4aXN0aW5nRHRmKSxhcGkuc2VuZGVyIT09YXBpLm93bmVyJiZhcGkuQmlnTnVtYmVyKGR0ZlVwZGF0ZUZlZSkuZ3QoMCkmJmF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5zIiwidHJhbnNmZXIiLHt0bzoibnVsbCIsc3ltYm9sOiJCRUUiLHF1YW50aXR5OmR0ZlVwZGF0ZUZlZSxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5fSksYXBpLmVtaXQoInVwZGF0ZUZ1bmQiLHtpZDpmdW5kSWR9KX19LGFjdGlvbnMuc2V0RHRmQWN0aXZlPWFzeW5jIHBheWxvYWQ9Pntjb25zdHtmdW5kSWQ6ZnVuZElkLGFjdGl2ZTphY3RpdmUsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX09cGF5bG9hZDtpZighYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleSwieW91IG11c3QgdXNlIGEgdHJhbnNhY3Rpb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikpcmV0dXJuO2NvbnN0IGR0Zj1hd2FpdCBhcGkuZGIuZmluZE9uZSgiZnVuZHMiLHtpZDpmdW5kSWR9KTthcGkuYXNzZXJ0KGR0ZiwiRFRGIGRvZXMgbm90IGV4aXN0IikmJmFwaS5hc3NlcnQoZHRmLmNyZWF0b3I9PT1hcGkuc2VuZGVyfHxhcGkub3duZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIERURiBjcmVhdG9yIikmJihkdGYuYWN0aXZlPSEhYWN0aXZlLGF3YWl0IGFwaS5kYi51cGRhdGUoImZ1bmRzIixkdGYpLGFwaS5lbWl0KCJzZXREdGZBY3RpdmUiLHtpZDpkdGYuaWQsYWN0aXZlOmR0Zi5hY3RpdmV9KSl9LGFjdGlvbnMuY3JlYXRlUHJvcG9zYWw9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e2Z1bmRJZDpmdW5kSWQsdGl0bGU6dGl0bGUsc3RhcnREYXRlOnN0YXJ0RGF0ZSxlbmREYXRlOmVuZERhdGUsYW1vdW50UGVyRGF5OmFtb3VudFBlckRheSxhdXRob3JQZXJtbGluazphdXRob3JQZXJtbGluayxwYXlvdXQ6cGF5b3V0LGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9PXBheWxvYWQsZHRmPWF3YWl0IGFwaS5kYi5maW5kT25lKCJmdW5kcyIse2lkOmZ1bmRJZH0pO2lmKCFhcGkuYXNzZXJ0KGR0ZiwiRFRGIGRvZXMgbm90IGV4aXN0IikpcmV0dXJuO2xldCBhdXRob3JpemVkQ3JlYXRpb249ITA7aWYoZHRmLnByb3Bvc2FsRmVlKXtjb25zdCBmZWVUb2tlbkJhbGFuY2U9YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLCJiYWxhbmNlcyIse2FjY291bnQ6YXBpLnNlbmRlcixzeW1ib2w6ZHRmLnByb3Bvc2FsRmVlLnN5bWJvbH0pO2F1dGhvcml6ZWRDcmVhdGlvbj0hKCFhcGkuQmlnTnVtYmVyKGR0Zi5wcm9wb3NhbEZlZS5hbW91bnQpLmx0ZSgwKSYmYXBpLnNlbmRlciE9PWFwaS5vd25lcil8fGZlZVRva2VuQmFsYW5jZSYmYXBpLkJpZ051bWJlcihmZWVUb2tlbkJhbGFuY2UuYmFsYW5jZSkuZ3RlKGR0Zi5wcm9wb3NhbEZlZS5hbW91bnQpfWlmKGFwaS5hc3NlcnQoYXV0aG9yaXplZENyZWF0aW9uLCJ5b3UgbXVzdCBoYXZlIGVub3VnaCB0b2tlbnMgdG8gY292ZXIgdGhlIGNyZWF0aW9uIGZlZSIpJiZhcGkuYXNzZXJ0KCEwPT09aXNTaWduZWRXaXRoQWN0aXZlS2V5LCJ5b3UgbXVzdCB1c2UgYSB0cmFuc2FjdGlvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydCghMD09PWR0Zi5hY3RpdmUsIkRURiBpcyBub3QgYWN0aXZlIikmJmFwaS5hc3NlcnQoInN0cmluZyI9PXR5cGVvZiB0aXRsZSYmdGl0bGUubGVuZ3RoPjAmJnRpdGxlLmxlbmd0aDw9ODAsImludmFsaWQgdGl0bGU6IGJldHdlZW4gMSBhbmQgODAgY2hhcmFjdGVycyIpJiZhcGkuYXNzZXJ0KCJzdHJpbmciPT10eXBlb2YgYXV0aG9yUGVybWxpbmsmJmF1dGhvclBlcm1saW5rLmxlbmd0aD4wJiZhdXRob3JQZXJtbGluay5sZW5ndGg8PTI1NSwiaW52YWxpZCBhdXRob3JQZXJtbGluazogYmV0d2VlbiAxIGFuZCAyNTUgY2hhcmFjdGVycyIpJiZhcGkuYXNzZXJ0KCJzdHJpbmciPT10eXBlb2YgYW1vdW50UGVyRGF5JiZhcGkuQmlnTnVtYmVyKGFtb3VudFBlckRheSkuaXNJbnRlZ2VyKCkmJmFwaS5CaWdOdW1iZXIoYW1vdW50UGVyRGF5KS5ndCgwKSwiaW52YWxpZCBhbW91bnRQZXJEYXk6IGdyZWF0ZXIgdGhhbiAwIikmJmFwaS5hc3NlcnQoYXBpLkJpZ051bWJlcihhbW91bnRQZXJEYXkpLmx0ZShkdGYubWF4QW1vdW50UGVyRGF5KSwiaW52YWxpZCBhbW91bnRQZXJEYXk6IGV4Y2VlZHMgRFRGIG1heEFtb3VudFBlckRheSIpJiZhcGkuYXNzZXJ0KCJvYmplY3QiPT10eXBlb2YgcGF5b3V0JiYic3RyaW5nIj09dHlwZW9mIHBheW91dC50eXBlJiYtMSE9PVBheW91dFR5cGUuaW5kZXhPZihwYXlvdXQudHlwZSkmJigiY29udHJhY3QiIT09cGF5b3V0LnR5cGV8fCJvYmplY3QiPT10eXBlb2YgcGF5b3V0LmNvbnRyYWN0UGF5bG9hZCkmJiJzdHJpbmciPT10eXBlb2YgcGF5b3V0Lm5hbWUmJnBheW91dC5uYW1lLmxlbmd0aD49MyYmcGF5b3V0Lm5hbWUubGVuZ3RoPD01MCwiaW52YWxpZCBwYXlvdXQgc2V0dGluZ3MiKSYmdmFsaWRhdGVEYXRlUmFuZ2Uoc3RhcnREYXRlLGVuZERhdGUsZHRmLm1heERheXMpKXtjb25zdCBuZXdQcm9wb3NhbD17ZnVuZElkOmZ1bmRJZCx0aXRsZTp0aXRsZSxzdGFydERhdGU6c3RhcnREYXRlLGVuZERhdGU6ZW5kRGF0ZSxhbW91bnRQZXJEYXk6YW1vdW50UGVyRGF5LGF1dGhvclBlcm1saW5rOmF1dGhvclBlcm1saW5rLHBheW91dDpwYXlvdXQsY3JlYXRvcjphcGkuc2VuZGVyLGFwcHJvdmFsV2VpZ2h0OnskbnVtYmVyRGVjaW1hbDoiMCJ9LGFjdGl2ZTohMH0saW5zZXJ0ZWRQcm9wb3NhbD1hd2FpdCBhcGkuZGIuaW5zZXJ0KCJwcm9wb3NhbHMiLG5ld1Byb3Bvc2FsKTtpZihhcGkuc2VuZGVyIT09YXBpLm93bmVyJiZkdGYucHJvcG9zYWxGZWUpaWYoImJ1cm4iPT09ZHRmLnByb3Bvc2FsRmVlLm1ldGhvZClhd2FpdCBhcGkuZXhlY3V0ZVNtYXJ0Q29udHJhY3QoInRva2VucyIsInRyYW5zZmVyIix7dG86Im51bGwiLHN5bWJvbDpkdGYucHJvcG9zYWxGZWUuc3ltYm9sLHF1YW50aXR5OmR0Zi5wcm9wb3NhbEZlZS5hbW91bnR9KTtlbHNlIGlmKCJpc3N1ZXIiPT09ZHRmLnByb3Bvc2FsRmVlLm1ldGhvZCl7Y29uc3QgZmVlVG9rZW5PYmo9YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLCJ0b2tlbnMiLHtzeW1ib2w6ZHRmLnByb3Bvc2FsRmVlLnN5bWJvbH0pO2F3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5zIiwidHJhbnNmZXIiLHt0bzpmZWVUb2tlbk9iai5pc3N1ZXIsc3ltYm9sOmR0Zi5wcm9wb3NhbEZlZS5zeW1ib2wscXVhbnRpdHk6ZHRmLnByb3Bvc2FsRmVlLmFtb3VudH0pfWFwaS5lbWl0KCJjcmVhdGVQcm9wb3NhbCIse2lkOmluc2VydGVkUHJvcG9zYWwuX2lkfSl9fSxhY3Rpb25zLnVwZGF0ZVByb3Bvc2FsPWFzeW5jIHBheWxvYWQ9Pntjb25zdHtpZDppZCx0aXRsZTp0aXRsZSxlbmREYXRlOmVuZERhdGUsYW1vdW50UGVyRGF5OmFtb3VudFBlckRheSxhdXRob3JQZXJtbGluazphdXRob3JQZXJtbGluayxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5fT1wYXlsb2FkO2lmKCFhcGkuYXNzZXJ0KCJzdHJpbmciPT10eXBlb2YgaWQmJmFwaS5CaWdOdW1iZXIoaWQpLmlzSW50ZWdlcigpLCJpbnZhbGlkIGlkIikpcmV0dXJuO2NvbnN0IHByb3Bvc2FsPWF3YWl0IGFwaS5kYi5maW5kT25lKCJwcm9wb3NhbHMiLHtfaWQ6YXBpLkJpZ051bWJlcihpZCkudG9OdW1iZXIoKX0pO2lmKCFhcGkuYXNzZXJ0KHByb3Bvc2FsLCJwcm9wb3NhbCBkb2VzIG5vdCBleGlzdCIpfHwhYXBpLmFzc2VydChwcm9wb3NhbC5jcmVhdG9yPT09YXBpLnNlbmRlcnx8YXBpLm93bmVyPT09YXBpLnNlbmRlciwibXVzdCBiZSBwcm9wb3NhbCBjcmVhdG9yIikpcmV0dXJuO2NvbnN0IGR0Zj1hd2FpdCBhcGkuZGIuZmluZE9uZSgiZnVuZHMiLHtpZDpwcm9wb3NhbC5mdW5kSWQsYWN0aXZlOiEwfSk7YXBpLmFzc2VydChkdGYsIkRURiBkb2VzIG5vdCBleGlzdCBvciBpbmFjdGl2ZSIpJiZhcGkuYXNzZXJ0KCEwPT09aXNTaWduZWRXaXRoQWN0aXZlS2V5LCJ5b3UgbXVzdCB1c2UgYSB0cmFuc2FjdGlvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydCghMD09PWR0Zi5hY3RpdmUsIkRURiBpcyBub3QgYWN0aXZlIikmJmFwaS5hc3NlcnQoITA9PT1wcm9wb3NhbC5hY3RpdmUsInByb3Bvc2FsIGlzIG5vdCBhY3RpdmUiKSYmYXBpLmFzc2VydCgic3RyaW5nIj09dHlwZW9mIHRpdGxlJiZ0aXRsZS5sZW5ndGg+MCYmdGl0bGUubGVuZ3RoPD04MCwiaW52YWxpZCB0aXRsZTogYmV0d2VlbiAxIGFuZCA4MCBjaGFyYWN0ZXJzIikmJmFwaS5hc3NlcnQoInN0cmluZyI9PXR5cGVvZiBhdXRob3JQZXJtbGluayYmYXV0aG9yUGVybWxpbmsubGVuZ3RoPjAmJmF1dGhvclBlcm1saW5rLmxlbmd0aDw9MjU1LCJpbnZhbGlkIGF1dGhvclBlcm1saW5rOiBiZXR3ZWVuIDEgYW5kIDI1NSBjaGFyYWN0ZXJzIikmJmFwaS5hc3NlcnQoInN0cmluZyI9PXR5cGVvZiBhbW91bnRQZXJEYXkmJmFwaS5CaWdOdW1iZXIoYW1vdW50UGVyRGF5KS5pc0ludGVnZXIoKSYmYXBpLkJpZ051bWJlcihhbW91bnRQZXJEYXkpLmd0KDApJiZhcGkuQmlnTnVtYmVyKGFtb3VudFBlckRheSkubHRlKHByb3Bvc2FsLmFtb3VudFBlckRheSksImludmFsaWQgYW1vdW50UGVyRGF5OiBncmVhdGVyIHRoYW4gMCBhbmQgY2Fubm90IGJlIGluY3JlYXNlZCIpJiZhcGkuYXNzZXJ0KGFwaS5CaWdOdW1iZXIoYW1vdW50UGVyRGF5KS5sdGUoZHRmLm1heEFtb3VudFBlckRheSksImludmFsaWQgYW1vdW50UGVyRGF5OiBleGNlZWRzIERURiBtYXhBbW91bnRQZXJEYXkiKSYmdmFsaWRhdGVEYXRlQ2hhbmdlKHByb3Bvc2FsLmVuZERhdGUsZW5kRGF0ZSkmJnZhbGlkYXRlRGF0ZVJhbmdlKHByb3Bvc2FsLnN0YXJ0RGF0ZSxlbmREYXRlLGR0Zi5tYXhEYXlzKSYmKHByb3Bvc2FsLnRpdGxlPXRpdGxlLHByb3Bvc2FsLmVuZERhdGU9ZW5kRGF0ZSxwcm9wb3NhbC5hbW91bnRQZXJEYXk9YW1vdW50UGVyRGF5LHByb3Bvc2FsLmF1dGhvclBlcm1saW5rPWF1dGhvclBlcm1saW5rLGF3YWl0IGFwaS5kYi51cGRhdGUoInByb3Bvc2FscyIscHJvcG9zYWwpLGFwaS5lbWl0KCJ1cGRhdGVQcm9wb3NhbCIse2lkOnByb3Bvc2FsLl9pZH0pKX0sYWN0aW9ucy5kaXNhYmxlUHJvcG9zYWw9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e2lkOmlkLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9PXBheWxvYWQ7aWYoIWFwaS5hc3NlcnQoInN0cmluZyI9PXR5cGVvZiBpZCYmYXBpLkJpZ051bWJlcihpZCkuaXNJbnRlZ2VyKCksImludmFsaWQgaWQiKSlyZXR1cm47Y29uc3QgcHJvcG9zYWw9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInByb3Bvc2FscyIse19pZDphcGkuQmlnTnVtYmVyKGlkKS50b051bWJlcigpfSk7YXBpLmFzc2VydChwcm9wb3NhbCwicHJvcG9zYWwgZG9lcyBub3QgZXhpc3QiKSYmYXBpLmFzc2VydCghMD09PXByb3Bvc2FsLmFjdGl2ZSwicHJvcG9zYWwgYWxyZWFkeSBkaXNhYmxlZCIpJiZhcGkuYXNzZXJ0KHByb3Bvc2FsLmNyZWF0b3I9PT1hcGkuc2VuZGVyfHxhcGkub3duZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHByb3Bvc2FsIGNyZWF0b3IiKSYmKHByb3Bvc2FsLmFjdGl2ZT0hMSxhd2FpdCBhcGkuZGIudXBkYXRlKCJwcm9wb3NhbHMiLHByb3Bvc2FsKSxhcGkuZW1pdCgiZGlzYWJsZVByb3Bvc2FsIix7aWQ6cHJvcG9zYWwuX2lkfSkpfSxhY3Rpb25zLmFwcHJvdmVQcm9wb3NhbD1hc3luYyBwYXlsb2FkPT57Y29uc3R7aWQ6aWR9PXBheWxvYWQscGFyYW1zPWF3YWl0IGFwaS5kYi5maW5kT25lKCJwYXJhbXMiLHt9KTtpZihhcGkuYXNzZXJ0KCJzdHJpbmciPT10eXBlb2YgaWQmJmFwaS5CaWdOdW1iZXIoaWQpLmlzSW50ZWdlcigpLCJpbnZhbGlkIGlkIikpe2NvbnN0IHByb3Bvc2FsPWF3YWl0IGFwaS5kYi5maW5kT25lKCJwcm9wb3NhbHMiLHtfaWQ6YXBpLkJpZ051bWJlcihpZCkudG9OdW1iZXIoKX0pO2lmKGFwaS5hc3NlcnQocHJvcG9zYWwsInByb3Bvc2FsIGRvZXMgbm90IGV4aXN0IikmJmFwaS5hc3NlcnQodmFsaWRhdGVQZW5kaW5nKHByb3Bvc2FsKSwicHJvcG9zYWwgaXMgbm90IHBlbmRpbmciKSl7Y29uc3QgZHRmPWF3YWl0IGFwaS5kYi5maW5kT25lKCJmdW5kcyIse2lkOnByb3Bvc2FsLmZ1bmRJZH0pLHZvdGVUb2tlbk9iaj1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDpkdGYudm90ZVRva2VufSk7bGV0IGFjY3Q9YXdhaXQgYXBpLmRiLmZpbmRPbmUoImFjY291bnRzIix7YWNjb3VudDphcGkuc2VuZGVyfSk7bnVsbD09PWFjY3QmJihhY2N0PXthY2NvdW50OmFwaS5zZW5kZXIsd2VpZ2h0czpbXX0sYWNjdD1hd2FpdCBhcGkuZGIuaW5zZXJ0KCJhY2NvdW50cyIsYWNjdCkpO2xldCBhY3RpdmVBcHByb3ZhbHM9MDtjb25zdCBhcHByb3ZhbHM9YXdhaXQgYXBpLmRiLmZpbmQoImFwcHJvdmFscyIse2Zyb206YXBpLnNlbmRlcixwcm9wb3NhbFBlbmRpbmc6ITB9LHBhcmFtcy5tYXhBY2NvdW50QXBwcm92YWxzLDAsW3tpbmRleDoiX2lkIixkZXNjZW5kaW5nOiEwfV0pO2ZvcihsZXQgaW5kZXg9MDtpbmRleDxhcHByb3ZhbHMubGVuZ3RoO2luZGV4Kz0xKXtjb25zdCBhcHByb3ZhbD1hcHByb3ZhbHNbaW5kZXhdLGFwcHJvdmFsUHJvcG9zYWw9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInByb3Bvc2FscyIse19pZDphcHByb3ZhbC50b30pO2FwcHJvdmFsUHJvcG9zYWwmJnZhbGlkYXRlUGVuZGluZyhhcHByb3ZhbFByb3Bvc2FsKT9hY3RpdmVBcHByb3ZhbHMrPTE6KGFwcHJvdmFsLnByb3Bvc2FsUGVuZGluZz0hMSxhd2FpdCBhcGkuZGIudXBkYXRlKCJhcHByb3ZhbHMiLGFwcHJvdmFsKSl9aWYoIWFwaS5hc3NlcnQoYWN0aXZlQXBwcm92YWxzPHBhcmFtcy5tYXhBY2NvdW50QXBwcm92YWxzLGB5b3UgY2FuIG9ubHkgYXBwcm92ZSAke3BhcmFtcy5tYXhBY2NvdW50QXBwcm92YWxzfSBhY3RpdmUgcHJvcG9zYWxzYCkpcmV0dXJuO2xldCBhcHByb3ZhbD1hd2FpdCBhcGkuZGIuZmluZE9uZSgiYXBwcm92YWxzIix7ZnJvbTphcGkuc2VuZGVyLHRvOnByb3Bvc2FsLl9pZH0pO2lmKGFwaS5hc3NlcnQobnVsbD09PWFwcHJvdmFsLCJ5b3UgYWxyZWFkeSBhcHByb3ZlZCB0aGlzIHByb3Bvc2FsIikpe2FwcHJvdmFsPXtmcm9tOmFwaS5zZW5kZXIsdG86cHJvcG9zYWwuX2lkLHByb3Bvc2FsUGVuZGluZzohMH0sYXdhaXQgYXBpLmRiLmluc2VydCgiYXBwcm92YWxzIixhcHByb3ZhbCk7Y29uc3QgYmFsYW5jZT1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsImJhbGFuY2VzIix7YWNjb3VudDphcGkuc2VuZGVyLHN5bWJvbDpkdGYudm90ZVRva2VufSk7bGV0IGFwcHJvdmFsV2VpZ2h0PTA7YmFsYW5jZSYmYmFsYW5jZS5zdGFrZSYmKGFwcHJvdmFsV2VpZ2h0PWJhbGFuY2Uuc3Rha2UpLGJhbGFuY2UmJmJhbGFuY2UuZGVsZWdhdGlvbnNJbiYmKGFwcHJvdmFsV2VpZ2h0PWFwaS5CaWdOdW1iZXIoYXBwcm92YWxXZWlnaHQpLnBsdXMoYmFsYW5jZS5kZWxlZ2F0aW9uc0luKS50b0ZpeGVkKHZvdGVUb2tlbk9iai5wcmVjaXNpb24sYXBpLkJpZ051bWJlci5ST1VORF9IQUxGX1VQKSk7Y29uc3Qgd0luZGV4PWFjY3Qud2VpZ2h0cy5maW5kSW5kZXgoeD0+eC5zeW1ib2w9PT1kdGYudm90ZVRva2VuKTstMSE9PXdJbmRleD9hY2N0LndlaWdodHNbd0luZGV4XS53ZWlnaHQ9YXBwcm92YWxXZWlnaHQ6YWNjdC53ZWlnaHRzLnB1c2goe3N5bWJvbDpkdGYudm90ZVRva2VuLHdlaWdodDphcHByb3ZhbFdlaWdodH0pLGF3YWl0IGFwaS5kYi51cGRhdGUoImFjY291bnRzIixhY2N0KSxhd2FpdCB1cGRhdGVQcm9wb3NhbFdlaWdodChwcm9wb3NhbC5faWQsYXBwcm92YWxXZWlnaHQpLGFwaS5lbWl0KCJhcHByb3ZlUHJvcG9zYWwiLHtpZDpwcm9wb3NhbC5faWR9KX19fX0sYWN0aW9ucy5kaXNhcHByb3ZlUHJvcG9zYWw9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e2lkOmlkfT1wYXlsb2FkO2lmKGFwaS5hc3NlcnQoInN0cmluZyI9PXR5cGVvZiBpZCYmYXBpLkJpZ051bWJlcihpZCkuaXNJbnRlZ2VyKCksImludmFsaWQgaWQiKSl7Y29uc3QgcHJvcG9zYWw9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInByb3Bvc2FscyIse19pZDphcGkuQmlnTnVtYmVyKGlkKS50b051bWJlcigpfSk7aWYoYXBpLmFzc2VydChwcm9wb3NhbCwicHJvcG9zYWwgZG9lcyBub3QgZXhpc3QiKSYmYXBpLmFzc2VydCh2YWxpZGF0ZVBlbmRpbmcocHJvcG9zYWwpLCJwcm9wb3NhbCBpcyBub3QgcGVuZGluZyIpKXtjb25zdCBkdGY9YXdhaXQgYXBpLmRiLmZpbmRPbmUoImZ1bmRzIix7aWQ6cHJvcG9zYWwuZnVuZElkfSksdm90ZVRva2VuT2JqPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwidG9rZW5zIix7c3ltYm9sOmR0Zi52b3RlVG9rZW59KTtsZXQgYWNjdD1hd2FpdCBhcGkuZGIuZmluZE9uZSgiYWNjb3VudHMiLHthY2NvdW50OmFwaS5zZW5kZXJ9KTtudWxsPT09YWNjdCYmKGFjY3Q9e2FjY291bnQ6YXBpLnNlbmRlcix3ZWlnaHRzOltdfSxhY2N0PWF3YWl0IGFwaS5kYi5pbnNlcnQoImFjY291bnRzIixhY2N0KSk7Y29uc3QgYXBwcm92YWw9YXdhaXQgYXBpLmRiLmZpbmRPbmUoImFwcHJvdmFscyIse2Zyb206YXBpLnNlbmRlcix0bzpwcm9wb3NhbC5faWR9KTtpZihhcGkuYXNzZXJ0KG51bGwhPT1hcHByb3ZhbCwieW91IGhhdmUgbm90IGFwcHJvdmVkIHRoaXMgcHJvcG9zYWwiKSl7YXdhaXQgYXBpLmRiLnJlbW92ZSgiYXBwcm92YWxzIixhcHByb3ZhbCk7Y29uc3QgYmFsYW5jZT1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsImJhbGFuY2VzIix7YWNjb3VudDphcGkuc2VuZGVyLHN5bWJvbDpkdGYudm90ZVRva2VufSk7bGV0IGFwcHJvdmFsV2VpZ2h0PTA7YmFsYW5jZSYmYmFsYW5jZS5zdGFrZSYmKGFwcHJvdmFsV2VpZ2h0PWJhbGFuY2Uuc3Rha2UpLGJhbGFuY2UmJmJhbGFuY2UuZGVsZWdhdGlvbnNJbiYmKGFwcHJvdmFsV2VpZ2h0PWFwaS5CaWdOdW1iZXIoYXBwcm92YWxXZWlnaHQpLnBsdXMoYmFsYW5jZS5kZWxlZ2F0aW9uc0luKS50b0ZpeGVkKHZvdGVUb2tlbk9iai5wcmVjaXNpb24sYXBpLkJpZ051bWJlci5ST1VORF9IQUxGX1VQKSk7Y29uc3Qgd0luZGV4PWFjY3Qud2VpZ2h0cy5maW5kSW5kZXgoeD0+eC5zeW1ib2w9PT1kdGYudm90ZVRva2VuKTstMSE9PXdJbmRleD9hY2N0LndlaWdodHNbd0luZGV4XS53ZWlnaHQ9YXBwcm92YWxXZWlnaHQ6YWNjdC53ZWlnaHRzLnB1c2goe3N5bWJvbDpkdGYudm90ZVRva2VuLHdlaWdodDphcHByb3ZhbFdlaWdodH0pLGF3YWl0IGFwaS5kYi51cGRhdGUoImFjY291bnRzIixhY2N0KSxhd2FpdCB1cGRhdGVQcm9wb3NhbFdlaWdodChwcm9wb3NhbC5faWQsYXBpLkJpZ051bWJlcihhcHByb3ZhbFdlaWdodCkubmVnYXRlZCgpKSxhcGkuZW1pdCgiZGlzYXBwcm92ZVByb3Bvc2FsIix7aWQ6cHJvcG9zYWwuX2lkfSl9fX19LGFjdGlvbnMudXBkYXRlUHJvcG9zYWxBcHByb3ZhbHM9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e2FjY291bnQ6YWNjb3VudCx0b2tlbjp0b2tlbixjYWxsaW5nQ29udHJhY3RJbmZvOmNhbGxpbmdDb250cmFjdEluZm99PXBheWxvYWQ7aWYodm9pZCAwPT09Y2FsbGluZ0NvbnRyYWN0SW5mbylyZXR1cm47aWYoInRva2VucyIhPT1jYWxsaW5nQ29udHJhY3RJbmZvLm5hbWUpcmV0dXJuO2NvbnN0IGFjY3Q9YXdhaXQgYXBpLmRiLmZpbmRPbmUoImFjY291bnRzIix7YWNjb3VudDphY2NvdW50fSk7aWYobnVsbCE9PWFjY3Qpe2NvbnN0IHBhcmFtcz1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSksYmFsYW5jZT1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsImJhbGFuY2VzIix7YWNjb3VudDphY2NvdW50LHN5bWJvbDp0b2tlbi5zeW1ib2x9KTtsZXQgYXBwcm92YWxXZWlnaHQ9MDtiYWxhbmNlJiZiYWxhbmNlLnN0YWtlJiYoYXBwcm92YWxXZWlnaHQ9YmFsYW5jZS5zdGFrZSksYmFsYW5jZSYmYmFsYW5jZS5kZWxlZ2F0aW9uc0luJiYoYXBwcm92YWxXZWlnaHQ9YXBpLkJpZ051bWJlcihhcHByb3ZhbFdlaWdodCkucGx1cyhiYWxhbmNlLmRlbGVnYXRpb25zSW4pLnRvRml4ZWQodG9rZW4ucHJlY2lzaW9uLGFwaS5CaWdOdW1iZXIuUk9VTkRfSEFMRl9VUCkpO2NvbnN0IHdJbmRleD1hY2N0LndlaWdodHMuZmluZEluZGV4KHg9Pnguc3ltYm9sPT09dG9rZW4uc3ltYm9sKTtsZXQgb2xkQXBwcm92YWxXZWlnaHQ9MDstMSE9PXdJbmRleD8ob2xkQXBwcm92YWxXZWlnaHQ9YWNjdC53ZWlnaHRzW3dJbmRleF0ud2VpZ2h0LGFjY3Qud2VpZ2h0c1t3SW5kZXhdLndlaWdodD1hcHByb3ZhbFdlaWdodCk6YWNjdC53ZWlnaHRzLnB1c2goe3N5bWJvbDp0b2tlbi5zeW1ib2wsd2VpZ2h0OmFwcHJvdmFsV2VpZ2h0fSk7Y29uc3QgZGVsdGFBcHByb3ZhbFdlaWdodD1hcGkuQmlnTnVtYmVyKGFwcHJvdmFsV2VpZ2h0KS5taW51cyhvbGRBcHByb3ZhbFdlaWdodCkuZHAodG9rZW4ucHJlY2lzaW9uLGFwaS5CaWdOdW1iZXIuUk9VTkRfSEFMRl9VUCk7aWYoIWFwaS5CaWdOdW1iZXIoZGVsdGFBcHByb3ZhbFdlaWdodCkuZXEoMCkpe2F3YWl0IGFwaS5kYi51cGRhdGUoImFjY291bnRzIixhY2N0KTtjb25zdCBhcHByb3ZhbHM9YXdhaXQgYXBpLmRiLmZpbmQoImFwcHJvdmFscyIse2Zyb206YWNjb3VudCxwcm9wb3NhbFBlbmRpbmc6ITB9LHBhcmFtcy5tYXhBY2NvdW50QXBwcm92YWxzLDAsW3tpbmRleDoiX2lkIixkZXNjZW5kaW5nOiEwfV0pO2ZvcihsZXQgaW5kZXg9MDtpbmRleDxhcHByb3ZhbHMubGVuZ3RoO2luZGV4Kz0xKXtjb25zdCBhcHByb3ZhbD1hcHByb3ZhbHNbaW5kZXhdO2F3YWl0IHVwZGF0ZVByb3Bvc2FsV2VpZ2h0KGFwcHJvdmFsLnRvLGRlbHRhQXBwcm92YWxXZWlnaHQpfHwoYXBwcm92YWwucHJvcG9zYWxQZW5kaW5nPSExLGF3YWl0IGFwaS5kYi51cGRhdGUoImFwcHJvdmFscyIsYXBwcm92YWwpKX19fX0sYWN0aW9ucy5jaGVja1BlbmRpbmdEdGZzPWFzeW5jKCk9PntpZihhcGkuYXNzZXJ0KCJudWxsIj09PWFwaS5zZW5kZXIsIm5vdCBhdXRob3JpemVkIikpe2NvbnN0IHBhcmFtcz1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSksYmxvY2tEYXRlPW5ldyBEYXRlKGFwaS5oaXZlQmxvY2tUaW1lc3RhbXArIi4wMDBaIiksdGlja1RpbWU9YXBpLkJpZ051bWJlcihibG9ja0RhdGUuZ2V0VGltZSgpKS5taW51cygzNjAwKnBhcmFtcy5kdGZUaWNrSG91cnMqMWUzKS50b051bWJlcigpLHBlbmRpbmdEdGZzPWF3YWl0IGFwaS5kYi5maW5kKCJmdW5kcyIse2FjdGl2ZTohMCxsYXN0VGlja1RpbWU6eyRsdGU6dGlja1RpbWV9fSxwYXJhbXMubWF4RHRmc1BlckJsb2NrLDAsW3tpbmRleDoibGFzdFRpY2tUaW1lIixkZXNjZW5kaW5nOiExfSx7aW5kZXg6Il9pZCIsZGVzY2VuZGluZzohMX1dKTtmb3IobGV0IGk9MDtpPHBlbmRpbmdEdGZzLmxlbmd0aDtpKz0xKWF3YWl0IGNoZWNrUGVuZGluZ1Byb3Bvc2FscyhwZW5kaW5nRHRmc1tpXSxwYXJhbXMpfX07"}}}