NFT Smart Contract

Words
1
Reading
1 min
Listen
Play
5y

{"id":"ssc-mainnet-hive","json":{"contractName":"contract","contractAction":"update","contractPayload":{"name":"nft","params":"","code":"Y29uc3QgQ09OVFJBQ1RfTkFNRT0ibmZ0IixVVElMSVRZX1RPS0VOX1NZTUJPTD0iQkVFIixNQVhfTlVNX0FVVEhPUklaRURfSVNTVUVSUz0xMCxNQVhfTlVNX0xPQ0tFRF9UT0tFTl9UWVBFUz0xMCxNQVhfU1lNQk9MX0xFTkdUSD0xMCxNQVhfREFUQV9QUk9QRVJUWV9MRU5HVEg9MTAwLE1BWF9OVU1fTkZUU19JU1NVQUJMRT0xMCxNQVhfTlVNX05GVFNfRURJVEFCTEU9NTAsTUFYX05VTV9ORlRTX09QRVJBQkxFPTUwLE1BWF9OVU1fQ09OVEFJTkVSX05GVFNfT1BFUkFCTEU9MSxSRVNFUlZFRF9TWU1CT0xTPXtDRUxMOiJiZWdnYXJzIixRVVNUOiJzaW1wbGVnYW1lIixURVNURVJBOiJhZ2dyb2VkIixTUVJMOiJzdHVmZmJ5c3BlbmNlciIsQ1JBRlQ6ImltbWFudWVsOTQiLE1VU0lDOiJhdG9tY29sbGVjdG9yIixDR1VMTDoiY2d1bGwiLE5GVDoiY2FkYXdnIixSQVJFOiJiZWdnYXJzIixMSUM6ImxpY3Rva2VuIixNRU1CRVI6Im1lbWJlcnRva2VuIixDT0ZGRUU6ImMwZmYzM2EiLEFSVDoiYnlvIixST0NLOiJiZWdnYXJzIixDUklUVEVSOiJjcnlwdG9tYW5jZXIiLENJVFk6ImdlcmJlciIsTU9OU1RFUlM6InNpbXBsZWdhbWUiLFNFVFM6Imxvb3RraXQuZ2FtZXMiLEFOSU1FOiJhbmltZXRva2VuIixQSE9UT0ZUOiJ3d3dpZWJlIixCRUVSOiJkZXRsZXYiLFNQSVI6InNwaW52ZXN0IixJRkc6Imxpb24yMDAiLEdVSUxEUzoic2ltcGxlZ2FtZSIsRkNBUkQ6Imxpb24yMDAiLFBYTDoicGl4ZWxuZnQiLENPVzoic3R1ZmZieXNwZW5jZXIiLExPT09UOiJzdHVmZmJ5c3BlbmNlciIsQVBJOiJzdGVlbWNpdHlhcGkiLFNQT1JUU01PTToic3BvcnRzdGVzdGVyIixTV1Q6InNhdHJlbiIsU1RBUjoiYXRvbWNvbGxlY3RvciJ9O2FjdGlvbnMuY3JlYXRlU1NDPWFzeW5jKCk9PntpZighMT09PWF3YWl0IGFwaS5kYi50YWJsZUV4aXN0cygibmZ0cyIpKXthd2FpdCBhcGkuZGIuY3JlYXRlVGFibGUoIm5mdHMiLFsic3ltYm9sIl0pLGF3YWl0IGFwaS5kYi5jcmVhdGVUYWJsZSgicGFyYW1zIiksYXdhaXQgYXBpLmRiLmNyZWF0ZVRhYmxlKCJwZW5kaW5nVW5kZWxlZ2F0aW9ucyIsWyJzeW1ib2wiLCJjb21wbGV0ZVRpbWVzdGFtcCJdKTtjb25zdCBwYXJhbXM9e25mdENyZWF0aW9uRmVlOiIxMDAiLG5mdElzc3VhbmNlRmVlOnsiQkVFIjoiMC4wMDEiLFBBTDoiMC4wMDEifSxkYXRhUHJvcGVydHlDcmVhdGlvbkZlZToiMTAwIixlbmFibGVEZWxlZ2F0aW9uRmVlOiIxMDAwIn07YXdhaXQgYXBpLmRiLmluc2VydCgicGFyYW1zIixwYXJhbXMpfX0sYWN0aW9ucy51cGRhdGVQYXJhbXM9YXN5bmMgcGF5bG9hZD0+e2lmKGFwaS5zZW5kZXIhPT1hcGkub3duZXIpcmV0dXJuO2NvbnN0e25mdENyZWF0aW9uRmVlOm5mdENyZWF0aW9uRmVlLG5mdElzc3VhbmNlRmVlOm5mdElzc3VhbmNlRmVlLGRhdGFQcm9wZXJ0eUNyZWF0aW9uRmVlOmRhdGFQcm9wZXJ0eUNyZWF0aW9uRmVlLGVuYWJsZURlbGVnYXRpb25GZWU6ZW5hYmxlRGVsZWdhdGlvbkZlZX09cGF5bG9hZCxwYXJhbXM9YXdhaXQgYXBpLmRiLmZpbmRPbmUoInBhcmFtcyIse30pO25mdENyZWF0aW9uRmVlJiYic3RyaW5nIj09dHlwZW9mIG5mdENyZWF0aW9uRmVlJiYhYXBpLkJpZ051bWJlcihuZnRDcmVhdGlvbkZlZSkuaXNOYU4oKSYmYXBpLkJpZ051bWJlcihuZnRDcmVhdGlvbkZlZSkuZ3RlKDApJiYocGFyYW1zLm5mdENyZWF0aW9uRmVlPW5mdENyZWF0aW9uRmVlKSxuZnRJc3N1YW5jZUZlZSYmIm9iamVjdCI9PXR5cGVvZiBuZnRJc3N1YW5jZUZlZSYmKHBhcmFtcy5uZnRJc3N1YW5jZUZlZT1uZnRJc3N1YW5jZUZlZSksZGF0YVByb3BlcnR5Q3JlYXRpb25GZWUmJiJzdHJpbmciPT10eXBlb2YgZGF0YVByb3BlcnR5Q3JlYXRpb25GZWUmJiFhcGkuQmlnTnVtYmVyKGRhdGFQcm9wZXJ0eUNyZWF0aW9uRmVlKS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKGRhdGFQcm9wZXJ0eUNyZWF0aW9uRmVlKS5ndGUoMCkmJihwYXJhbXMuZGF0YVByb3BlcnR5Q3JlYXRpb25GZWU9ZGF0YVByb3BlcnR5Q3JlYXRpb25GZWUpLGVuYWJsZURlbGVnYXRpb25GZWUmJiJzdHJpbmciPT10eXBlb2YgZW5hYmxlRGVsZWdhdGlvbkZlZSYmIWFwaS5CaWdOdW1iZXIoZW5hYmxlRGVsZWdhdGlvbkZlZSkuaXNOYU4oKSYmYXBpLkJpZ051bWJlcihlbmFibGVEZWxlZ2F0aW9uRmVlKS5ndGUoMCkmJihwYXJhbXMuZW5hYmxlRGVsZWdhdGlvbkZlZT1lbmFibGVEZWxlZ2F0aW9uRmVlKSxhd2FpdCBhcGkuZGIudXBkYXRlKCJwYXJhbXMiLHBhcmFtcyl9O2NvbnN0IGlzVG9rZW5UcmFuc2ZlclZlcmlmaWVkPShyZXN1bHQsZnJvbSx0byxzeW1ib2wscXVhbnRpdHksZXZlbnRTdHIpPT4hKHZvaWQgMCE9PXJlc3VsdC5lcnJvcnN8fCFyZXN1bHQuZXZlbnRzfHx2b2lkIDA9PT1yZXN1bHQuZXZlbnRzLmZpbmQoZWw9PiJ0b2tlbnMiPT09ZWwuY29udHJhY3QmJmVsLmV2ZW50PT09ZXZlbnRTdHImJmVsLmRhdGEuZnJvbT09PWZyb20mJmVsLmRhdGEudG89PT10byYmZWwuZGF0YS5xdWFudGl0eT09PXF1YW50aXR5JiZlbC5kYXRhLnN5bWJvbD09PXN5bWJvbCkpLGNhbGN1bGF0ZUJhbGFuY2U9KGJhbGFuY2UscXVhbnRpdHkscHJlY2lzaW9uLGFkZCk9PmFkZD9hcGkuQmlnTnVtYmVyKGJhbGFuY2UpLnBsdXMocXVhbnRpdHkpLnRvRml4ZWQocHJlY2lzaW9uKTphcGkuQmlnTnVtYmVyKGJhbGFuY2UpLm1pbnVzKHF1YW50aXR5KS50b0ZpeGVkKHByZWNpc2lvbiksY291bnREZWNpbWFscz12YWx1ZT0+YXBpLkJpZ051bWJlcih2YWx1ZSkuZHAoKSxjb250YWluc0R1cGxpY2F0ZXM9YXJyPT5uZXcgU2V0KGFycikuc2l6ZSE9PWFyci5sZW5ndGgsaXNWYWxpZEhpdmVBY2NvdW50TGVuZ3RoPWFjY291bnQ9PmFjY291bnQubGVuZ3RoPj0zJiZhY2NvdW50Lmxlbmd0aDw9MTYsaXNWYWxpZENvbnRyYWN0TGVuZ3RoPWNvbnRyYWN0PT5jb250cmFjdC5sZW5ndGg+PTMmJmNvbnRyYWN0Lmxlbmd0aDw9NTAsaXNWYWxpZEFjY291bnRzQXJyYXk9YXJyPT57bGV0IHZhbGlkQ29udGVudHM9ITA7cmV0dXJuIGFyci5mb3JFYWNoKGFjY291bnQ9Pnsic3RyaW5nIj09dHlwZW9mIGFjY291bnQmJmlzVmFsaWRIaXZlQWNjb3VudExlbmd0aChhY2NvdW50KXx8KHZhbGlkQ29udGVudHM9ITEpfSksdmFsaWRDb250ZW50c30saXNWYWxpZENvbnRyYWN0c0FycmF5PWFycj0+e2xldCB2YWxpZENvbnRlbnRzPSEwO3JldHVybiBhcnIuZm9yRWFjaChjb250cmFjdD0+eyJzdHJpbmciPT10eXBlb2YgY29udHJhY3QmJmlzVmFsaWRDb250cmFjdExlbmd0aChjb250cmFjdCl8fCh2YWxpZENvbnRlbnRzPSExKX0pLHZhbGlkQ29udGVudHN9LGlzVmFsaWREYXRhUHJvcGVydGllcz0oZnJvbSxmcm9tVHlwZSxuZnQscHJvcGVydGllcyk9Pntjb25zdCBwcm9wZXJ0eUNvdW50PU9iamVjdC5rZXlzKHByb3BlcnRpZXMpLmxlbmd0aCxuZnRQcm9wZXJ0eUNvdW50PU9iamVjdC5rZXlzKG5mdC5wcm9wZXJ0aWVzKS5sZW5ndGg7aWYoIWFwaS5hc3NlcnQocHJvcGVydHlDb3VudDw9bmZ0UHJvcGVydHlDb3VudCwiY2Fubm90IHNldCBtb3JlIGRhdGEgcHJvcGVydGllcyB0aGFuIE5GVCBoYXMiKSlyZXR1cm4hMTtmb3IoY29uc3RbbmFtZSxkYXRhXW9mIE9iamVjdC5lbnRyaWVzKHByb3BlcnRpZXMpKXtsZXQgdmFsaWRDb250ZW50cz0hMTtpZihhcGkuYXNzZXJ0KG5hbWUmJiJzdHJpbmciPT10eXBlb2YgbmFtZSYmYXBpLnZhbGlkYXRvci5pc0FscGhhbnVtZXJpYyhuYW1lKSYmbmFtZS5sZW5ndGg+MCYmbmFtZS5sZW5ndGg8PTI1LCJpbnZhbGlkIGRhdGEgcHJvcGVydHkgbmFtZTogbGV0dGVycyAmIG51bWJlcnMgb25seSwgbWF4IGxlbmd0aCBvZiAyNSIpJiZhcGkuYXNzZXJ0KG5hbWUgaW4gbmZ0LnByb3BlcnRpZXMsImRhdGEgcHJvcGVydHkgbXVzdCBleGlzdCIpKXtjb25zdCBwcm9wZXJ0eVNjaGVtYT1uZnQucHJvcGVydGllc1tuYW1lXTthcGkuYXNzZXJ0KG51bGwhPWRhdGEmJih0eXBlb2YgZGF0YT09PXByb3BlcnR5U2NoZW1hLnR5cGV8fCJudW1iZXIiPT09cHJvcGVydHlTY2hlbWEudHlwZSYmInN0cmluZyI9PXR5cGVvZiBkYXRhJiYhYXBpLkJpZ051bWJlcihkYXRhKS5pc05hTigpKSxgZGF0YSBwcm9wZXJ0eSB0eXBlIG1pc21hdGNoOiBleHBlY3RlZCAke3Byb3BlcnR5U2NoZW1hLnR5cGV9IGJ1dCBnb3QgJHt0eXBlb2YgZGF0YX0gZm9yIHByb3BlcnR5ICR7bmFtZX1gKSYmYXBpLmFzc2VydCgic3RyaW5nIiE9dHlwZW9mIGRhdGF8fGRhdGEubGVuZ3RoPD0xMDAsInN0cmluZyBwcm9wZXJ0eSBtYXggbGVuZ3RoIGlzIDEwMCBjaGFyYWN0ZXJzIikmJmFwaS5hc3NlcnQoImNvbnRyYWN0Ij09PWZyb21UeXBlJiZwcm9wZXJ0eVNjaGVtYS5hdXRob3JpemVkRWRpdGluZ0NvbnRyYWN0cy5pbmNsdWRlcyhmcm9tKXx8InVzZXIiPT09ZnJvbVR5cGUmJnByb3BlcnR5U2NoZW1hLmF1dGhvcml6ZWRFZGl0aW5nQWNjb3VudHMuaW5jbHVkZXMoZnJvbSksIm5vdCBhbGxvd2VkIHRvIHNldCBkYXRhIHByb3BlcnRpZXMiKSYmKHZhbGlkQ29udGVudHM9ITAsIm51bWJlciI9PT1wcm9wZXJ0eVNjaGVtYS50eXBlJiYic3RyaW5nIj09dHlwZW9mIGRhdGEmJihwcm9wZXJ0aWVzW25hbWVdPWFwaS5CaWdOdW1iZXIoZGF0YSkudG9OdW1iZXIoKSkpfWlmKCF2YWxpZENvbnRlbnRzKXJldHVybiExfXJldHVybiEwfSxpc1ZhbGlkRGF0YVByb3BlcnRpZXNBcnJheT0oZnJvbSxmcm9tVHlwZSxuZnQsYXJyKT0+e3RyeXtmb3IobGV0IGk9MDtpPGFyci5sZW5ndGg7aSs9MSl7bGV0IHZhbGlkQ29udGVudHM9ITE7Y29uc3R7aWQ6aWQscHJvcGVydGllczpwcm9wZXJ0aWVzfT1hcnJbaV07aWYoYXBpLmFzc2VydChpZCYmInN0cmluZyI9PXR5cGVvZiBpZCYmIWFwaS5CaWdOdW1iZXIoaWQpLmlzTmFOKCkmJmFwaS5CaWdOdW1iZXIoaWQpLmd0KDApJiZwcm9wZXJ0aWVzJiYib2JqZWN0Ij09dHlwZW9mIHByb3BlcnRpZXMsImludmFsaWQgZGF0YSBwcm9wZXJ0aWVzIikmJmlzVmFsaWREYXRhUHJvcGVydGllcyhmcm9tLGZyb21UeXBlLG5mdCxwcm9wZXJ0aWVzKSYmKHZhbGlkQ29udGVudHM9ITApLCF2YWxpZENvbnRlbnRzKXJldHVybiExfX1jYXRjaChlKXtyZXR1cm4hMX1yZXR1cm4hMH0saXNWYWxpZE5mdElkQXJyYXk9YXJyPT57dHJ5e2xldCBpbnN0YW5jZUNvdW50PTA7Zm9yKGxldCBpPTA7aTxhcnIubGVuZ3RoO2krPTEpe2xldCB2YWxpZENvbnRlbnRzPSExO2NvbnN0e3N5bWJvbDpzeW1ib2wsaWRzOmlkc309YXJyW2ldO2lmKGFwaS5hc3NlcnQoc3ltYm9sJiYic3RyaW5nIj09dHlwZW9mIHN5bWJvbCYmYXBpLnZhbGlkYXRvci5pc0FscGhhKHN5bWJvbCkmJmFwaS52YWxpZGF0b3IuaXNVcHBlcmNhc2Uoc3ltYm9sKSYmc3ltYm9sLmxlbmd0aD4wJiZzeW1ib2wubGVuZ3RoPD0xMCYmaWRzJiYib2JqZWN0Ij09dHlwZW9mIGlkcyYmQXJyYXkuaXNBcnJheShpZHMpLCJpbnZhbGlkIG5mdCBsaXN0IikmJihpbnN0YW5jZUNvdW50Kz1pZHMubGVuZ3RoLGFwaS5hc3NlcnQoaW5zdGFuY2VDb3VudDw9NTAsImNhbm5vdCBvcGVyYXRlIG9uIG1vcmUgdGhhbiA1MCBORlQgaW5zdGFuY2VzIGF0IG9uY2UiKSkpe2ZvcihsZXQgaj0wO2o8aWRzLmxlbmd0aDtqKz0xKXtjb25zdCBpZD1pZHNbal07aWYoIWFwaS5hc3NlcnQoaWQmJiJzdHJpbmciPT10eXBlb2YgaWQmJiFhcGkuQmlnTnVtYmVyKGlkKS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKGlkKS5ndCgwKSwiaW52YWxpZCBuZnQgbGlzdCIpKXJldHVybiExfXZhbGlkQ29udGVudHM9ITB9aWYoIXZhbGlkQ29udGVudHMpcmV0dXJuITF9fWNhdGNoKGUpe3JldHVybiExfXJldHVybiEwfSxpc1ZhbGlkVG9rZW5CYXNrZXQ9YXN5bmMoYmFza2V0LGJhbGFuY2VUYWJsZU5hbWUsYWNjb3VudE5hbWUsZmVlU3ltYm9sLGZlZVF1YW50aXR5KT0+e3RyeXtpZihPYmplY3Qua2V5cyhiYXNrZXQpLmxlbmd0aD4xMClyZXR1cm4hMTtmb3IoY29uc3Rbc3ltYm9sLHF1YW50aXR5XW9mIE9iamVjdC5lbnRyaWVzKGJhc2tldCkpe2xldCB2YWxpZENvbnRlbnRzPSExO2lmKCJzdHJpbmciPT10eXBlb2Ygc3ltYm9sJiZhcGkudmFsaWRhdG9yLmlzQWxwaGEoc3ltYm9sKSYmYXBpLnZhbGlkYXRvci5pc1VwcGVyY2FzZShzeW1ib2wpJiZzeW1ib2wubGVuZ3RoPjAmJnN5bWJvbC5sZW5ndGg8PTEwKXtjb25zdCB0b2tlbj1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDpzeW1ib2x9KTtpZih0b2tlbiYmcXVhbnRpdHkmJiJzdHJpbmciPT10eXBlb2YgcXVhbnRpdHkmJiFhcGkuQmlnTnVtYmVyKHF1YW50aXR5KS5pc05hTigpJiZhcGkuQmlnTnVtYmVyKHF1YW50aXR5KS5ndCgwKSYmKHZhbHVlPXF1YW50aXR5LGFwaS5CaWdOdW1iZXIodmFsdWUpLmRwKCk8PXRva2VuLnByZWNpc2lvbikpe2NvbnN0IGZpbmFsUXVhbnRpdHk9c3ltYm9sPT09ZmVlU3ltYm9sP2NhbGN1bGF0ZUJhbGFuY2UocXVhbnRpdHksZmVlUXVhbnRpdHksdG9rZW4ucHJlY2lzaW9uLCEwKTpxdWFudGl0eSxiYXNrZXRUb2tlbkJhbGFuY2U9YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLGJhbGFuY2VUYWJsZU5hbWUse2FjY291bnQ6YWNjb3VudE5hbWUsc3ltYm9sOnN5bWJvbH0pO2Jhc2tldFRva2VuQmFsYW5jZSYmYXBpLkJpZ051bWJlcihiYXNrZXRUb2tlbkJhbGFuY2UuYmFsYW5jZSkuZ3RlKGZpbmFsUXVhbnRpdHkpJiYodmFsaWRDb250ZW50cz0hMCl9fWlmKCF2YWxpZENvbnRlbnRzKXJldHVybiExfX1jYXRjaChlKXtyZXR1cm4hMX12YXIgdmFsdWU7cmV0dXJuITB9LHRyYW5zZmVyQW5kVmVyaWZ5TmZ0cz1hc3luYyhmcm9tLGZyb21UeXBlLHRvLHRvVHlwZSxuZnRzLGlzU2lnbmVkV2l0aEFjdGl2ZUtleSxjYWxsaW5nQ29udHJhY3RJbmZvKT0+e2NvbnN0IHJlc3VsdHM9e3N1Y2Nlc3M6W10sZmFpbDpbXX0sZmluYWxGcm9tVHlwZT0idXNlciI9PT1mcm9tVHlwZT8idSI6ImMiLGZpbmFsVG9UeXBlPSJ1c2VyIj09PXRvVHlwZT8idSI6ImMiO2F3YWl0IGFjdGlvbnMudHJhbnNmZXIoe2Zyb21UeXBlOmZyb21UeXBlLHRvOnRvLHRvVHlwZTp0b1R5cGUsbmZ0czpuZnRzLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXksY2FsbGluZ0NvbnRyYWN0SW5mbzpjYWxsaW5nQ29udHJhY3RJbmZvfSk7Y29uc3QgbG9ncz1hcGkubG9ncygpLHRva2VuTWFwPXt9LGNvdW50ZWRNYXA9e307aWYobG9ncy5ldmVudHMpZm9yKGxldCBpPTA7aTxsb2dzLmV2ZW50cy5sZW5ndGg7aSs9MSl7Y29uc3QgZXY9bG9ncy5ldmVudHNbaV07aWYoZXYuY29udHJhY3QmJmV2LmV2ZW50JiZldi5kYXRhJiYibmZ0Ij09PWV2LmNvbnRyYWN0JiYidHJhbnNmZXIiPT09ZXYuZXZlbnQmJmV2LmRhdGEuZnJvbT09PWZyb20mJmV2LmRhdGEuZnJvbVR5cGU9PT1maW5hbEZyb21UeXBlJiZldi5kYXRhLnRvPT09dG8mJmV2LmRhdGEudG9UeXBlPT09ZmluYWxUb1R5cGUpe3Rva2VuTWFwW2V2LmRhdGEuc3ltYm9sKyItIitldi5kYXRhLmlkXT0xfX1mb3IobGV0IGluZGV4PTA7aW5kZXg8bmZ0cy5sZW5ndGg7aW5kZXgrPTEpe2NvbnN0e3N5bWJvbDpzeW1ib2wsaWRzOmlkc309bmZ0c1tpbmRleF0sc3VjY2Vzcz1bXSxmYWlsPVtdO2ZvcihsZXQgaj0wO2o8aWRzLmxlbmd0aDtqKz0xKXtjb25zdCBpbnB1dEtleT1zeW1ib2wrIi0iK2lkc1tqXTtpbnB1dEtleSBpbiBjb3VudGVkTWFwfHwoaW5wdXRLZXkgaW4gdG9rZW5NYXA/c3VjY2Vzcy5wdXNoKGlkc1tqXS50b1N0cmluZygpKTpmYWlsLnB1c2goaWRzW2pdLnRvU3RyaW5nKCkpLGNvdW50ZWRNYXBbaW5wdXRLZXldPTEpfXN1Y2Nlc3MubGVuZ3RoPjAmJnJlc3VsdHMuc3VjY2Vzcy5wdXNoKHtzeW1ib2w6c3ltYm9sLGlkczpzdWNjZXNzfSksZmFpbC5sZW5ndGg+MCYmcmVzdWx0cy5mYWlsLnB1c2goe3N5bWJvbDpzeW1ib2wsaWRzOmZhaWx9KX1yZXR1cm4gcmVzdWx0c307YWN0aW9ucy51cGRhdGVVcmw9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e3VybDp1cmwsc3ltYm9sOnN5bWJvbH09cGF5bG9hZDtpZihhcGkuYXNzZXJ0KHN5bWJvbCYmInN0cmluZyI9PXR5cGVvZiBzeW1ib2wmJnVybCYmInN0cmluZyI9PXR5cGVvZiB1cmwsImludmFsaWQgcGFyYW1zIikmJmFwaS5hc3NlcnQodXJsLmxlbmd0aDw9MjU1LCJpbnZhbGlkIHVybDogbWF4IGxlbmd0aCBvZiAyNTUiKSl7Y29uc3QgbmZ0PWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN5bWJvbH0pO2lmKG5mdCYmYXBpLmFzc2VydChuZnQuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpdHJ5e2NvbnN0IG1ldGFkYXRhPUpTT04ucGFyc2UobmZ0Lm1ldGFkYXRhKTthcGkuYXNzZXJ0KG1ldGFkYXRhJiZtZXRhZGF0YS51cmwsImFuIGVycm9yIG9jY3VyZWQgd2hlbiB0cnlpbmcgdG8gdXBkYXRlIHRoZSB1cmwiKSYmKG1ldGFkYXRhLnVybD11cmwsbmZ0Lm1ldGFkYXRhPUpTT04uc3RyaW5naWZ5KG1ldGFkYXRhKSxhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixuZnQpKX1jYXRjaChlKXt9fX0sYWN0aW9ucy51cGRhdGVNZXRhZGF0YT1hc3luYyBwYXlsb2FkPT57Y29uc3R7bWV0YWRhdGE6bWV0YWRhdGEsc3ltYm9sOnN5bWJvbH09cGF5bG9hZDtpZihhcGkuYXNzZXJ0KHN5bWJvbCYmInN0cmluZyI9PXR5cGVvZiBzeW1ib2wmJm1ldGFkYXRhJiYib2JqZWN0Ij09dHlwZW9mIG1ldGFkYXRhLCJpbnZhbGlkIHBhcmFtcyIpKXtjb25zdCBuZnQ9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c3ltYm9sfSk7aWYobmZ0JiZhcGkuYXNzZXJ0KG5mdC5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSl0cnl7Y29uc3QgZmluYWxNZXRhZGF0YT1KU09OLnN0cmluZ2lmeShtZXRhZGF0YSk7YXBpLmFzc2VydChmaW5hbE1ldGFkYXRhLmxlbmd0aDw9MWUzLCJpbnZhbGlkIG1ldGFkYXRhOiBtYXggbGVuZ3RoIG9mIDEwMDAiKSYmKG5mdC5tZXRhZGF0YT1maW5hbE1ldGFkYXRhLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLG5mdCkpfWNhdGNoKGUpe319fSxhY3Rpb25zLnVwZGF0ZU5hbWU9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e25hbWU6bmFtZSxzeW1ib2w6c3ltYm9sfT1wYXlsb2FkO2lmKGFwaS5hc3NlcnQoc3ltYm9sJiYic3RyaW5nIj09dHlwZW9mIHN5bWJvbCYmbmFtZSYmInN0cmluZyI9PXR5cGVvZiBuYW1lLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMoYXBpLnZhbGlkYXRvci5ibGFja2xpc3QobmFtZSwiICIpKSYmbmFtZS5sZW5ndGg+MCYmbmFtZS5sZW5ndGg8PTUwLCJpbnZhbGlkIG5hbWU6IGxldHRlcnMsIG51bWJlcnMsIHdoaXRlc3BhY2VzIG9ubHksIG1heCBsZW5ndGggb2YgNTAiKSl7Y29uc3QgbmZ0PWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN5bWJvbH0pO25mdCYmYXBpLmFzc2VydChuZnQuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikmJihuZnQubmFtZT1uYW1lLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLG5mdCkpfX0sYWN0aW9ucy51cGRhdGVPcmdOYW1lPWFzeW5jIHBheWxvYWQ9Pntjb25zdHtvcmdOYW1lOm9yZ05hbWUsc3ltYm9sOnN5bWJvbH09cGF5bG9hZDtpZihhcGkuYXNzZXJ0KHN5bWJvbCYmInN0cmluZyI9PXR5cGVvZiBzeW1ib2wmJm9yZ05hbWUmJiJzdHJpbmciPT10eXBlb2Ygb3JnTmFtZSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydChhcGkudmFsaWRhdG9yLmlzQWxwaGFudW1lcmljKGFwaS52YWxpZGF0b3IuYmxhY2tsaXN0KG9yZ05hbWUsIiAiKSkmJm9yZ05hbWUubGVuZ3RoPjAmJm9yZ05hbWUubGVuZ3RoPD01MCwiaW52YWxpZCBvcmcgbmFtZTogbGV0dGVycywgbnVtYmVycywgd2hpdGVzcGFjZXMgb25seSwgbWF4IGxlbmd0aCBvZiA1MCIpKXtjb25zdCBuZnQ9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c3ltYm9sfSk7bmZ0JiZhcGkuYXNzZXJ0KG5mdC5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSYmKG5mdC5vcmdOYW1lPW9yZ05hbWUsYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsbmZ0KSl9fSxhY3Rpb25zLnVwZGF0ZVByb2R1Y3ROYW1lPWFzeW5jIHBheWxvYWQ9Pntjb25zdHtwcm9kdWN0TmFtZTpwcm9kdWN0TmFtZSxzeW1ib2w6c3ltYm9sfT1wYXlsb2FkO2lmKGFwaS5hc3NlcnQoc3ltYm9sJiYic3RyaW5nIj09dHlwZW9mIHN5bWJvbCYmcHJvZHVjdE5hbWUmJiJzdHJpbmciPT10eXBlb2YgcHJvZHVjdE5hbWUsImludmFsaWQgcGFyYW1zIikmJmFwaS5hc3NlcnQoYXBpLnZhbGlkYXRvci5pc0FscGhhbnVtZXJpYyhhcGkudmFsaWRhdG9yLmJsYWNrbGlzdChwcm9kdWN0TmFtZSwiICIpKSYmcHJvZHVjdE5hbWUubGVuZ3RoPjAmJnByb2R1Y3ROYW1lLmxlbmd0aDw9NTAsImludmFsaWQgcHJvZHVjdCBuYW1lOiBsZXR0ZXJzLCBudW1iZXJzLCB3aGl0ZXNwYWNlcyBvbmx5LCBtYXggbGVuZ3RoIG9mIDUwIikpe2NvbnN0IG5mdD1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpzeW1ib2x9KTtuZnQmJmFwaS5hc3NlcnQobmZ0Lmlzc3Vlcj09PWFwaS5zZW5kZXIsIm11c3QgYmUgdGhlIGlzc3VlciIpJiYobmZ0LnByb2R1Y3ROYW1lPXByb2R1Y3ROYW1lLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLG5mdCkpfX0sYWN0aW9ucy5hZGRBdXRob3JpemVkSXNzdWluZ0FjY291bnRzPWFzeW5jIHBheWxvYWQ9Pntjb25zdHthY2NvdW50czphY2NvdW50cyxzeW1ib2w6c3ltYm9sLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9PXBheWxvYWQ7aWYoYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQoc3ltYm9sJiYic3RyaW5nIj09dHlwZW9mIHN5bWJvbCYmYWNjb3VudHMmJiJvYmplY3QiPT10eXBlb2YgYWNjb3VudHMmJkFycmF5LmlzQXJyYXkoYWNjb3VudHMpLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGFjY291bnRzLmxlbmd0aDw9MTAsImNhbm5vdCBoYXZlIG1vcmUgdGhhbiAxMCBhdXRob3JpemVkIGlzc3VpbmcgYWNjb3VudHMiKSl7Y29uc3QgdmFsaWRDb250ZW50cz1pc1ZhbGlkQWNjb3VudHNBcnJheShhY2NvdW50cyk7aWYoYXBpLmFzc2VydCh2YWxpZENvbnRlbnRzLCJpbnZhbGlkIGFjY291bnQgbGlzdCIpKXtjb25zdCBuZnQ9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c3ltYm9sfSk7aWYobmZ0KXtjb25zdCBzYW5pdGl6ZWRMaXN0PVtdO2lmKGFjY291bnRzLmZvckVhY2goYWNjb3VudD0+e2NvbnN0IGZpbmFsQWNjb3VudD1hY2NvdW50LnRyaW0oKS50b0xvd2VyQ2FzZSgpO2xldCBpc0R1cGxpY2F0ZT0hMTtmb3IobGV0IGk9MDtpPG5mdC5hdXRob3JpemVkSXNzdWluZ0FjY291bnRzLmxlbmd0aDtpKz0xKWlmKGZpbmFsQWNjb3VudD09PW5mdC5hdXRob3JpemVkSXNzdWluZ0FjY291bnRzW2ldKXtpc0R1cGxpY2F0ZT0hMDticmVha31pc0R1cGxpY2F0ZXx8c2FuaXRpemVkTGlzdC5wdXNoKGZpbmFsQWNjb3VudCl9KSxhcGkuYXNzZXJ0KG5mdC5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSYmYXBpLmFzc2VydCghY29udGFpbnNEdXBsaWNhdGVzKHNhbml0aXplZExpc3QpLCJjYW5ub3QgYWRkIHRoZSBzYW1lIGFjY291bnQgdHdpY2UiKSYmYXBpLmFzc2VydChuZnQuYXV0aG9yaXplZElzc3VpbmdBY2NvdW50cy5sZW5ndGgrc2FuaXRpemVkTGlzdC5sZW5ndGg8PTEwLCJjYW5ub3QgaGF2ZSBtb3JlIHRoYW4gMTAgYXV0aG9yaXplZCBpc3N1aW5nIGFjY291bnRzIikpe2NvbnN0IGZpbmFsQWNjb3VudExpc3Q9bmZ0LmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMuY29uY2F0KHNhbml0aXplZExpc3QpO25mdC5hdXRob3JpemVkSXNzdWluZ0FjY291bnRzPWZpbmFsQWNjb3VudExpc3QsYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsbmZ0KX19fX19LGFjdGlvbnMuYWRkQXV0aG9yaXplZElzc3VpbmdDb250cmFjdHM9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e2NvbnRyYWN0czpjb250cmFjdHMsc3ltYm9sOnN5bWJvbCxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5fT1wYXlsb2FkO2lmKGFwaS5hc3NlcnQoITA9PT1pc1NpZ25lZFdpdGhBY3RpdmVLZXksInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KHN5bWJvbCYmInN0cmluZyI9PXR5cGVvZiBzeW1ib2wmJmNvbnRyYWN0cyYmIm9iamVjdCI9PXR5cGVvZiBjb250cmFjdHMmJkFycmF5LmlzQXJyYXkoY29udHJhY3RzKSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydChjb250cmFjdHMubGVuZ3RoPD0xMCwiY2Fubm90IGhhdmUgbW9yZSB0aGFuIDEwIGF1dGhvcml6ZWQgaXNzdWluZyBjb250cmFjdHMiKSl7Y29uc3QgdmFsaWRDb250ZW50cz1pc1ZhbGlkQ29udHJhY3RzQXJyYXkoY29udHJhY3RzKTtpZihhcGkuYXNzZXJ0KHZhbGlkQ29udGVudHMsImludmFsaWQgY29udHJhY3QgbGlzdCIpKXtjb25zdCBuZnQ9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c3ltYm9sfSk7aWYobmZ0KXtjb25zdCBzYW5pdGl6ZWRMaXN0PVtdO2lmKGNvbnRyYWN0cy5mb3JFYWNoKGNvbnRyYWN0PT57Y29uc3QgZmluYWxDb250cmFjdD1jb250cmFjdC50cmltKCk7bGV0IGlzRHVwbGljYXRlPSExO2ZvcihsZXQgaT0wO2k8bmZ0LmF1dGhvcml6ZWRJc3N1aW5nQ29udHJhY3RzLmxlbmd0aDtpKz0xKWlmKGZpbmFsQ29udHJhY3Q9PT1uZnQuYXV0aG9yaXplZElzc3VpbmdDb250cmFjdHNbaV0pe2lzRHVwbGljYXRlPSEwO2JyZWFrfWlzRHVwbGljYXRlfHxzYW5pdGl6ZWRMaXN0LnB1c2goZmluYWxDb250cmFjdCl9KSxhcGkuYXNzZXJ0KG5mdC5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSYmYXBpLmFzc2VydCghY29udGFpbnNEdXBsaWNhdGVzKHNhbml0aXplZExpc3QpLCJjYW5ub3QgYWRkIHRoZSBzYW1lIGNvbnRyYWN0IHR3aWNlIikmJmFwaS5hc3NlcnQobmZ0LmF1dGhvcml6ZWRJc3N1aW5nQ29udHJhY3RzLmxlbmd0aCtzYW5pdGl6ZWRMaXN0Lmxlbmd0aDw9MTAsImNhbm5vdCBoYXZlIG1vcmUgdGhhbiAxMCBhdXRob3JpemVkIGlzc3VpbmcgY29udHJhY3RzIikpe2NvbnN0IGZpbmFsQ29udHJhY3RMaXN0PW5mdC5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cy5jb25jYXQoc2FuaXRpemVkTGlzdCk7bmZ0LmF1dGhvcml6ZWRJc3N1aW5nQ29udHJhY3RzPWZpbmFsQ29udHJhY3RMaXN0LGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLG5mdCl9fX19fSxhY3Rpb25zLnJlbW92ZUF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHM9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e2FjY291bnRzOmFjY291bnRzLHN5bWJvbDpzeW1ib2wsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX09cGF5bG9hZDtpZihhcGkuYXNzZXJ0KCEwPT09aXNTaWduZWRXaXRoQWN0aXZlS2V5LCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChzeW1ib2wmJiJzdHJpbmciPT10eXBlb2Ygc3ltYm9sJiZhY2NvdW50cyYmIm9iamVjdCI9PXR5cGVvZiBhY2NvdW50cyYmQXJyYXkuaXNBcnJheShhY2NvdW50cyksImludmFsaWQgcGFyYW1zIikmJmFwaS5hc3NlcnQoYWNjb3VudHMubGVuZ3RoPD0xMCwiY2Fubm90IHJlbW92ZSBtb3JlIHRoYW4gMTAgYXV0aG9yaXplZCBpc3N1aW5nIGFjY291bnRzIikpe2NvbnN0IHZhbGlkQ29udGVudHM9aXNWYWxpZEFjY291bnRzQXJyYXkoYWNjb3VudHMpO2lmKGFwaS5hc3NlcnQodmFsaWRDb250ZW50cywiaW52YWxpZCBhY2NvdW50IGxpc3QiKSl7Y29uc3QgbmZ0PWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN5bWJvbH0pO2lmKG5mdCYmYXBpLmFzc2VydChuZnQuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpe2NvbnN0IGZpbmFsQWNjb3VudExpc3Q9bmZ0LmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMuZmlsdGVyKGN1cnJlbnRWYWx1ZT0+e2ZvcihsZXQgaT0wO2k8YWNjb3VudHMubGVuZ3RoO2krPTEpe2lmKGN1cnJlbnRWYWx1ZT09PWFjY291bnRzW2ldLnRyaW0oKS50b0xvd2VyQ2FzZSgpKXJldHVybiExfXJldHVybiEwfSk7bmZ0LmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHM9ZmluYWxBY2NvdW50TGlzdCxhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixuZnQpfX19fSxhY3Rpb25zLnJlbW92ZUF1dGhvcml6ZWRJc3N1aW5nQ29udHJhY3RzPWFzeW5jIHBheWxvYWQ9Pntjb25zdHtjb250cmFjdHM6Y29udHJhY3RzLHN5bWJvbDpzeW1ib2wsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX09cGF5bG9hZDtpZihhcGkuYXNzZXJ0KCEwPT09aXNTaWduZWRXaXRoQWN0aXZlS2V5LCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChzeW1ib2wmJiJzdHJpbmciPT10eXBlb2Ygc3ltYm9sJiZjb250cmFjdHMmJiJvYmplY3QiPT10eXBlb2YgY29udHJhY3RzJiZBcnJheS5pc0FycmF5KGNvbnRyYWN0cyksImludmFsaWQgcGFyYW1zIikmJmFwaS5hc3NlcnQoY29udHJhY3RzLmxlbmd0aDw9MTAsImNhbm5vdCByZW1vdmUgbW9yZSB0aGFuIDEwIGF1dGhvcml6ZWQgaXNzdWluZyBjb250cmFjdHMiKSl7Y29uc3QgdmFsaWRDb250ZW50cz1pc1ZhbGlkQ29udHJhY3RzQXJyYXkoY29udHJhY3RzKTtpZihhcGkuYXNzZXJ0KHZhbGlkQ29udGVudHMsImludmFsaWQgY29udHJhY3QgbGlzdCIpKXtjb25zdCBuZnQ9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c3ltYm9sfSk7aWYobmZ0JiZhcGkuYXNzZXJ0KG5mdC5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSl7Y29uc3QgZmluYWxDb250cmFjdExpc3Q9bmZ0LmF1dGhvcml6ZWRJc3N1aW5nQ29udHJhY3RzLmZpbHRlcihjdXJyZW50VmFsdWU9Pntmb3IobGV0IGk9MDtpPGNvbnRyYWN0cy5sZW5ndGg7aSs9MSl7aWYoY3VycmVudFZhbHVlPT09Y29udHJhY3RzW2ldLnRyaW0oKSlyZXR1cm4hMX1yZXR1cm4hMH0pO25mdC5hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cz1maW5hbENvbnRyYWN0TGlzdCxhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixuZnQpfX19fSxhY3Rpb25zLnRyYW5zZmVyT3duZXJzaGlwPWFzeW5jIHBheWxvYWQ9Pntjb25zdHtzeW1ib2w6c3ltYm9sLHRvOnRvLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9PXBheWxvYWQ7aWYoYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQoc3ltYm9sJiYic3RyaW5nIj09dHlwZW9mIHN5bWJvbCYmdG8mJiJzdHJpbmciPT10eXBlb2YgdG8sImludmFsaWQgcGFyYW1zIikpe2NvbnN0IG5mdD1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpzeW1ib2x9KTtpZihuZnQmJmFwaS5hc3NlcnQobmZ0Lmlzc3Vlcj09PWFwaS5zZW5kZXIsIm11c3QgYmUgdGhlIGlzc3VlciIpKXtjb25zdCBmaW5hbFRvPXRvLnRyaW0oKS50b0xvd2VyQ2FzZSgpO2FwaS5hc3NlcnQoaXNWYWxpZEhpdmVBY2NvdW50TGVuZ3RoKGZpbmFsVG8pLCJpbnZhbGlkIHRvIikmJihuZnQuaXNzdWVyPWZpbmFsVG8sYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsbmZ0KSl9fX0sYWN0aW9ucy5lbmFibGVEZWxlZ2F0aW9uPWFzeW5jIHBheWxvYWQ9Pntjb25zdHtzeW1ib2w6c3ltYm9sLHVuZGVsZWdhdGlvbkNvb2xkb3duOnVuZGVsZWdhdGlvbkNvb2xkb3duLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9PXBheWxvYWQscGFyYW1zPWF3YWl0IGFwaS5kYi5maW5kT25lKCJwYXJhbXMiLHt9KSx7ZW5hYmxlRGVsZWdhdGlvbkZlZTplbmFibGVEZWxlZ2F0aW9uRmVlfT1wYXJhbXMsdXRpbGl0eVRva2VuQmFsYW5jZT1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsImJhbGFuY2VzIix7YWNjb3VudDphcGkuc2VuZGVyLHN5bWJvbDpVVElMSVRZX1RPS0VOX1NZTUJPTH0pLGF1dGhvcml6ZWQ9ISFhcGkuQmlnTnVtYmVyKGVuYWJsZURlbGVnYXRpb25GZWUpLmx0ZSgwKXx8dXRpbGl0eVRva2VuQmFsYW5jZSYmYXBpLkJpZ051bWJlcih1dGlsaXR5VG9rZW5CYWxhbmNlLmJhbGFuY2UpLmd0ZShlbmFibGVEZWxlZ2F0aW9uRmVlKTtpZihhcGkuYXNzZXJ0KGF1dGhvcml6ZWQsInlvdSBtdXN0IGhhdmUgZW5vdWdoIHRva2VucyB0byBjb3ZlciBmZWVzIikmJmFwaS5hc3NlcnQoITA9PT1pc1NpZ25lZFdpdGhBY3RpdmVLZXksInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KHN5bWJvbCYmInN0cmluZyI9PXR5cGVvZiBzeW1ib2wsImludmFsaWQgc3ltYm9sIikmJmFwaS5hc3NlcnQodW5kZWxlZ2F0aW9uQ29vbGRvd24mJk51bWJlci5pc0ludGVnZXIodW5kZWxlZ2F0aW9uQ29vbGRvd24pJiZ1bmRlbGVnYXRpb25Db29sZG93bj4wJiZ1bmRlbGVnYXRpb25Db29sZG93bjw9MTgyNTAsInVuZGVsZWdhdGlvbkNvb2xkb3duIG11c3QgYmUgYW4gaW50ZWdlciBiZXR3ZWVuIDEgYW5kIDE4MjUwIikpe2NvbnN0IG5mdD1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpzeW1ib2x9KTtpZihhcGkuYXNzZXJ0KG51bGwhPT1uZnQsInN5bWJvbCBkb2VzIG5vdCBleGlzdCIpJiZhcGkuYXNzZXJ0KG5mdC5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1uZnQuZGVsZWdhdGlvbkVuYWJsZWR8fCExPT09bmZ0LmRlbGVnYXRpb25FbmFibGVkLCJkZWxlZ2F0aW9uIGFscmVhZHkgZW5hYmxlZCIpKXtpZihhcGkuQmlnTnVtYmVyKGVuYWJsZURlbGVnYXRpb25GZWUpLmd0KDApKXtjb25zdCByZXM9YXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJ0b2tlbnMiLCJ0cmFuc2ZlciIse3RvOiJudWxsIixzeW1ib2w6VVRJTElUWV9UT0tFTl9TWU1CT0wscXVhbnRpdHk6ZW5hYmxlRGVsZWdhdGlvbkZlZSxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5fSk7aWYoIWlzVG9rZW5UcmFuc2ZlclZlcmlmaWVkKHJlcyxhcGkuc2VuZGVyLCJudWxsIixVVElMSVRZX1RPS0VOX1NZTUJPTCxlbmFibGVEZWxlZ2F0aW9uRmVlLCJ0cmFuc2ZlciIpKXJldHVybiExfXJldHVybiBuZnQuZGVsZWdhdGlvbkVuYWJsZWQ9ITAsbmZ0LnVuZGVsZWdhdGlvbkNvb2xkb3duPXVuZGVsZWdhdGlvbkNvb2xkb3duLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLG5mdCksITB9fXJldHVybiExfSxhY3Rpb25zLnVwZGF0ZVByb3BlcnR5RGVmaW5pdGlvbj1hc3luYyBwYXlsb2FkPT57Y29uc3R7c3ltYm9sOnN5bWJvbCxuYW1lOm5hbWUsbmV3TmFtZTpuZXdOYW1lLHR5cGU6dHlwZSxpc1JlYWRPbmx5OmlzUmVhZE9ubHksaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX09cGF5bG9hZDtpZihhcGkuYXNzZXJ0KCEwPT09aXNTaWduZWRXaXRoQWN0aXZlS2V5LCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChzeW1ib2wmJiJzdHJpbmciPT10eXBlb2Ygc3ltYm9sJiZuYW1lJiYic3RyaW5nIj09dHlwZW9mIG5hbWUsImludmFsaWQgcGFyYW1zIikmJmFwaS5hc3NlcnQoYXBpLnZhbGlkYXRvci5pc0FscGhhbnVtZXJpYyhuYW1lKSYmbmFtZS5sZW5ndGg+MCYmbmFtZS5sZW5ndGg8PTI1LCJpbnZhbGlkIG5hbWU6IGxldHRlcnMgJiBudW1iZXJzIG9ubHksIG1heCBsZW5ndGggb2YgMjUiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1uZXdOYW1lfHwic3RyaW5nIj09dHlwZW9mIG5ld05hbWUmJmFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMobmV3TmFtZSkmJm5ld05hbWUubGVuZ3RoPjAmJm5ld05hbWUubGVuZ3RoPD0yNSwiaW52YWxpZCBuZXcgbmFtZTogbGV0dGVycyAmIG51bWJlcnMgb25seSwgbWF4IGxlbmd0aCBvZiAyNSIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PXR5cGV8fCJzdHJpbmciPT10eXBlb2YgdHlwZSYmKCJudW1iZXIiPT09dHlwZXx8InN0cmluZyI9PT10eXBlfHwiYm9vbGVhbiI9PT10eXBlKSwiaW52YWxpZCB0eXBlOiBtdXN0IGJlIG51bWJlciwgc3RyaW5nLCBvciBib29sZWFuIikmJmFwaS5hc3NlcnQodm9pZCAwPT09aXNSZWFkT25seXx8ImJvb2xlYW4iPT10eXBlb2YgaXNSZWFkT25seSwiaW52YWxpZCBpc1JlYWRPbmx5OiBtdXN0IGJlIHRydWUgb3IgZmFsc2UiKSl7Y29uc3QgbmZ0PWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN5bWJvbH0pO2lmKG5mdCYmYXBpLmFzc2VydCgwPT09bmZ0LnN1cHBseSwiY2Fubm90IGNoYW5nZSBkYXRhIHByb3BlcnR5IGRlZmluaXRpb247IHRva2VucyBhbHJlYWR5IGlzc3VlZCIpJiZhcGkuYXNzZXJ0KG5hbWUgaW4gbmZ0LnByb3BlcnRpZXMsInByb3BlcnR5IG11c3QgZXhpc3QiKSYmYXBpLmFzc2VydChuZnQuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpe2lmKHZvaWQgMCE9PW5ld05hbWUpe2lmKHZvaWQgMCE9PW5mdC5ncm91cEJ5JiZuZnQuZ3JvdXBCeS5sZW5ndGg+MCYmIWFwaS5hc3NlcnQoIW5mdC5ncm91cEJ5LmluY2x1ZGVzKG5hbWUpLCJjYW5ub3QgY2hhbmdlIGRhdGEgcHJvcGVydHkgbmFtZTsgcHJvcGVydHkgaXMgcGFydCBvZiBncm91cEJ5IikpcmV0dXJuITE7aWYoIWFwaS5hc3NlcnQobmV3TmFtZSE9PW5hbWUsIm5ldyBuYW1lIG11c3QgYmUgZGlmZmVyZW50IGZyb20gb2xkIG5hbWUiKXx8IWFwaS5hc3NlcnQoIShuZXdOYW1lIGluIG5mdC5wcm9wZXJ0aWVzKSwidGhlcmUgaXMgYWxyZWFkeSBhIGRhdGEgcHJvcGVydHkgd2l0aCB0aGUgZ2l2ZW4gbmV3IG5hbWUiKSlyZXR1cm4hMX1sZXQgc2hvdWxkVXBkYXRlPSExO2NvbnN0IG9yaWdpbmFsVHlwZT1uZnQucHJvcGVydGllc1tuYW1lXS50eXBlLG9yaWdpbmFsSXNSZWFkT25seT1uZnQucHJvcGVydGllc1tuYW1lXS5pc1JlYWRPbmx5O3JldHVybiB2b2lkIDAhPT10eXBlJiZ0eXBlIT09b3JpZ2luYWxUeXBlJiYobmZ0LnByb3BlcnRpZXNbbmFtZV0udHlwZT10eXBlLHNob3VsZFVwZGF0ZT0hMCksdm9pZCAwIT09aXNSZWFkT25seSYmaXNSZWFkT25seSE9PW9yaWdpbmFsSXNSZWFkT25seSYmKG5mdC5wcm9wZXJ0aWVzW25hbWVdLmlzUmVhZE9ubHk9aXNSZWFkT25seSxzaG91bGRVcGRhdGU9ITApLHZvaWQgMCE9PW5ld05hbWUmJm5ld05hbWUhPT1uYW1lJiYobmZ0LnByb3BlcnRpZXNbbmV3TmFtZV09bmZ0LnByb3BlcnRpZXNbbmFtZV0sZGVsZXRlIG5mdC5wcm9wZXJ0aWVzW25hbWVdLHNob3VsZFVwZGF0ZT0hMCksc2hvdWxkVXBkYXRlJiYoYXdhaXQgYXBpLmRiLnVwZGF0ZSgibmZ0cyIsbmZ0KSxhcGkuZW1pdCgidXBkYXRlUHJvcGVydHlEZWZpbml0aW9uIix7c3ltYm9sOnN5bWJvbCxvcmlnaW5hbE5hbWU6bmFtZSxvcmlnaW5hbFR5cGU6b3JpZ2luYWxUeXBlLG9yaWdpbmFsSXNSZWFkT25seTpvcmlnaW5hbElzUmVhZE9ubHksbmV3TmFtZTpuZXdOYW1lLG5ld1R5cGU6dHlwZSxuZXdJc1JlYWRPbmx5OmlzUmVhZE9ubHl9KSksITB9fXJldHVybiExfSxhY3Rpb25zLmFkZFByb3BlcnR5PWFzeW5jIHBheWxvYWQ9Pntjb25zdHtzeW1ib2w6c3ltYm9sLG5hbWU6bmFtZSx0eXBlOnR5cGUsaXNSZWFkT25seTppc1JlYWRPbmx5LGF1dGhvcml6ZWRFZGl0aW5nQWNjb3VudHM6YXV0aG9yaXplZEVkaXRpbmdBY2NvdW50cyxhdXRob3JpemVkRWRpdGluZ0NvbnRyYWN0czphdXRob3JpemVkRWRpdGluZ0NvbnRyYWN0cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5fT1wYXlsb2FkLHBhcmFtcz1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSkse2RhdGFQcm9wZXJ0eUNyZWF0aW9uRmVlOmRhdGFQcm9wZXJ0eUNyZWF0aW9uRmVlfT1wYXJhbXM7aWYoYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQoc3ltYm9sJiYic3RyaW5nIj09dHlwZW9mIHN5bWJvbCYmbmFtZSYmInN0cmluZyI9PXR5cGVvZiBuYW1lJiYodm9pZCAwPT09aXNSZWFkT25seXx8ImJvb2xlYW4iPT10eXBlb2YgaXNSZWFkT25seSkmJih2b2lkIDA9PT1hdXRob3JpemVkRWRpdGluZ0FjY291bnRzfHxhdXRob3JpemVkRWRpdGluZ0FjY291bnRzJiYib2JqZWN0Ij09dHlwZW9mIGF1dGhvcml6ZWRFZGl0aW5nQWNjb3VudHMmJkFycmF5LmlzQXJyYXkoYXV0aG9yaXplZEVkaXRpbmdBY2NvdW50cykpJiYodm9pZCAwPT09YXV0aG9yaXplZEVkaXRpbmdDb250cmFjdHN8fGF1dGhvcml6ZWRFZGl0aW5nQ29udHJhY3RzJiYib2JqZWN0Ij09dHlwZW9mIGF1dGhvcml6ZWRFZGl0aW5nQ29udHJhY3RzJiZBcnJheS5pc0FycmF5KGF1dGhvcml6ZWRFZGl0aW5nQ29udHJhY3RzKSkmJnR5cGUmJiJzdHJpbmciPT10eXBlb2YgdHlwZSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydChhcGkudmFsaWRhdG9yLmlzQWxwaGFudW1lcmljKG5hbWUpJiZuYW1lLmxlbmd0aD4wJiZuYW1lLmxlbmd0aDw9MjUsImludmFsaWQgbmFtZTogbGV0dGVycyAmIG51bWJlcnMgb25seSwgbWF4IGxlbmd0aCBvZiAyNSIpJiZhcGkuYXNzZXJ0KCJudW1iZXIiPT09dHlwZXx8InN0cmluZyI9PT10eXBlfHwiYm9vbGVhbiI9PT10eXBlLCJpbnZhbGlkIHR5cGU6IG11c3QgYmUgbnVtYmVyLCBzdHJpbmcsIG9yIGJvb2xlYW4iKSl7Y29uc3QgbmZ0PWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN5bWJvbH0pO2lmKG5mdCYmYXBpLmFzc2VydCghKG5hbWUgaW4gbmZ0LnByb3BlcnRpZXMpLCJjYW5ub3QgYWRkIHRoZSBzYW1lIHByb3BlcnR5IHR3aWNlIikmJmFwaS5hc3NlcnQobmZ0Lmlzc3Vlcj09PWFwaS5zZW5kZXIsIm11c3QgYmUgdGhlIGlzc3VlciIpKXtpZihPYmplY3Qua2V5cyhuZnQucHJvcGVydGllcykubGVuZ3RoPj0zKXtjb25zdCB1dGlsaXR5VG9rZW5CYWxhbmNlPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwiYmFsYW5jZXMiLHthY2NvdW50OmFwaS5zZW5kZXIsc3ltYm9sOlVUSUxJVFlfVE9LRU5fU1lNQk9MfSksYXV0aG9yaXplZENyZWF0aW9uPSEhYXBpLkJpZ051bWJlcihkYXRhUHJvcGVydHlDcmVhdGlvbkZlZSkubHRlKDApfHx1dGlsaXR5VG9rZW5CYWxhbmNlJiZhcGkuQmlnTnVtYmVyKHV0aWxpdHlUb2tlbkJhbGFuY2UuYmFsYW5jZSkuZ3RlKGRhdGFQcm9wZXJ0eUNyZWF0aW9uRmVlKTtpZighYXBpLmFzc2VydChhdXRob3JpemVkQ3JlYXRpb24sInlvdSBtdXN0IGhhdmUgZW5vdWdoIHRva2VucyB0byBjb3ZlciB0aGUgY3JlYXRpb24gZmVlcyIpKXJldHVybiExO2lmKGFwaS5CaWdOdW1iZXIoZGF0YVByb3BlcnR5Q3JlYXRpb25GZWUpLmd0KDApKXtjb25zdCByZXM9YXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJ0b2tlbnMiLCJ0cmFuc2ZlciIse3RvOiJudWxsIixzeW1ib2w6VVRJTElUWV9UT0tFTl9TWU1CT0wscXVhbnRpdHk6ZGF0YVByb3BlcnR5Q3JlYXRpb25GZWUsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX0pO2lmKCFpc1Rva2VuVHJhbnNmZXJWZXJpZmllZChyZXMsYXBpLnNlbmRlciwibnVsbCIsVVRJTElUWV9UT0tFTl9TWU1CT0wsZGF0YVByb3BlcnR5Q3JlYXRpb25GZWUsInRyYW5zZmVyIikpcmV0dXJuITF9fWNvbnN0IG5ld1Byb3BlcnR5PXt0eXBlOnR5cGUsaXNSZWFkT25seTp2b2lkIDAhPT1pc1JlYWRPbmx5JiZpc1JlYWRPbmx5LGF1dGhvcml6ZWRFZGl0aW5nQWNjb3VudHM6dm9pZCAwPT09YXV0aG9yaXplZEVkaXRpbmdBY2NvdW50cz9bYXBpLnNlbmRlcl06W10sYXV0aG9yaXplZEVkaXRpbmdDb250cmFjdHM6W119O3JldHVybiBuZnQucHJvcGVydGllc1tuYW1lXT1uZXdQcm9wZXJ0eSxhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixuZnQpLChhdXRob3JpemVkRWRpdGluZ0FjY291bnRzfHxhdXRob3JpemVkRWRpdGluZ0NvbnRyYWN0cykmJmF3YWl0IGFjdGlvbnMuc2V0UHJvcGVydHlQZXJtaXNzaW9ucyh7c3ltYm9sOnN5bWJvbCxuYW1lOm5hbWUsYWNjb3VudHM6YXV0aG9yaXplZEVkaXRpbmdBY2NvdW50cyxjb250cmFjdHM6YXV0aG9yaXplZEVkaXRpbmdDb250cmFjdHMsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX0pLCEwfX1yZXR1cm4hMX0sYWN0aW9ucy5zZXRQcm9wZXJ0eVBlcm1pc3Npb25zPWFzeW5jIHBheWxvYWQ9Pntjb25zdHtzeW1ib2w6c3ltYm9sLG5hbWU6bmFtZSxhY2NvdW50czphY2NvdW50cyxjb250cmFjdHM6Y29udHJhY3RzLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9PXBheWxvYWQ7aWYoYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQoc3ltYm9sJiYic3RyaW5nIj09dHlwZW9mIHN5bWJvbCYmbmFtZSYmInN0cmluZyI9PXR5cGVvZiBuYW1lJiYodm9pZCAwPT09YWNjb3VudHN8fGFjY291bnRzJiYib2JqZWN0Ij09dHlwZW9mIGFjY291bnRzJiZBcnJheS5pc0FycmF5KGFjY291bnRzKSkmJih2b2lkIDA9PT1jb250cmFjdHN8fGNvbnRyYWN0cyYmIm9iamVjdCI9PXR5cGVvZiBjb250cmFjdHMmJkFycmF5LmlzQXJyYXkoY29udHJhY3RzKSksImludmFsaWQgcGFyYW1zIikmJmFwaS5hc3NlcnQoYXBpLnZhbGlkYXRvci5pc0FscGhhbnVtZXJpYyhuYW1lKSYmbmFtZS5sZW5ndGg+MCYmbmFtZS5sZW5ndGg8PTI1LCJpbnZhbGlkIG5hbWU6IGxldHRlcnMgJiBudW1iZXJzIG9ubHksIG1heCBsZW5ndGggb2YgMjUiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1hY2NvdW50c3x8YWNjb3VudHMubGVuZ3RoPD0xMCwiY2Fubm90IGhhdmUgbW9yZSB0aGFuIDEwIGF1dGhvcml6ZWQgYWNjb3VudHMiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1jb250cmFjdHN8fGNvbnRyYWN0cy5sZW5ndGg8PTEwLCJjYW5ub3QgaGF2ZSBtb3JlIHRoYW4gMTAgYXV0aG9yaXplZCBjb250cmFjdHMiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1hY2NvdW50c3x8aXNWYWxpZEFjY291bnRzQXJyYXkoYWNjb3VudHMpLCJpbnZhbGlkIGFjY291bnQgbGlzdCIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PWNvbnRyYWN0c3x8aXNWYWxpZENvbnRyYWN0c0FycmF5KGNvbnRyYWN0cyksImludmFsaWQgY29udHJhY3QgbGlzdCIpKXtjb25zdCBuZnQ9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c3ltYm9sfSk7aWYobmZ0JiZhcGkuYXNzZXJ0KG5hbWUgaW4gbmZ0LnByb3BlcnRpZXMsInByb3BlcnR5IG11c3QgZXhpc3QiKSYmYXBpLmFzc2VydChuZnQuaXNzdWVyPT09YXBpLnNlbmRlciwibXVzdCBiZSB0aGUgaXNzdWVyIikpe2xldCBzYW5pdGl6ZWRBY2NvdW50TGlzdD1bXSxzYW5pdGl6ZWRDb250cmFjdExpc3Q9W107aWYoYWNjb3VudHMmJihzYW5pdGl6ZWRBY2NvdW50TGlzdD1hY2NvdW50cy5tYXAoYWNjb3VudD0+YWNjb3VudC50cmltKCkudG9Mb3dlckNhc2UoKSkpLGNvbnRyYWN0cyYmKHNhbml0aXplZENvbnRyYWN0TGlzdD1jb250cmFjdHMubWFwKGNvbnRyYWN0PT5jb250cmFjdC50cmltKCkpKSxhcGkuYXNzZXJ0KHZvaWQgMD09PWFjY291bnRzfHwhY29udGFpbnNEdXBsaWNhdGVzKHNhbml0aXplZEFjY291bnRMaXN0KSwiY2Fubm90IGFkZCB0aGUgc2FtZSBhY2NvdW50IHR3aWNlIikmJmFwaS5hc3NlcnQodm9pZCAwPT09Y29udHJhY3RzfHwhY29udGFpbnNEdXBsaWNhdGVzKHNhbml0aXplZENvbnRyYWN0TGlzdCksImNhbm5vdCBhZGQgdGhlIHNhbWUgY29udHJhY3QgdHdpY2UiKSl7bGV0IHNob3VsZFVwZGF0ZT0hMTthY2NvdW50cyYmKG5mdC5wcm9wZXJ0aWVzW25hbWVdLmF1dGhvcml6ZWRFZGl0aW5nQWNjb3VudHM9c2FuaXRpemVkQWNjb3VudExpc3Qsc2hvdWxkVXBkYXRlPSEwKSxjb250cmFjdHMmJihuZnQucHJvcGVydGllc1tuYW1lXS5hdXRob3JpemVkRWRpdGluZ0NvbnRyYWN0cz1zYW5pdGl6ZWRDb250cmFjdExpc3Qsc2hvdWxkVXBkYXRlPSEwKSxzaG91bGRVcGRhdGUmJmF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLG5mdCl9fX19LGFjdGlvbnMuc2V0R3JvdXBCeT1hc3luYyBwYXlsb2FkPT57Y29uc3R7c3ltYm9sOnN5bWJvbCxwcm9wZXJ0aWVzOnByb3BlcnRpZXMsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX09cGF5bG9hZDtpZihhcGkuYXNzZXJ0KCEwPT09aXNTaWduZWRXaXRoQWN0aXZlS2V5LCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChzeW1ib2wmJiJzdHJpbmciPT10eXBlb2Ygc3ltYm9sJiZwcm9wZXJ0aWVzJiYib2JqZWN0Ij09dHlwZW9mIHByb3BlcnRpZXMmJkFycmF5LmlzQXJyYXkocHJvcGVydGllcyksImludmFsaWQgcGFyYW1zIikpe2NvbnN0IG5mdD1hd2FpdCBhcGkuZGIuZmluZE9uZSgibmZ0cyIse3N5bWJvbDpzeW1ib2x9KTtpZihuZnQpe2NvbnN0IG5mdFByb3BlcnR5Q291bnQ9T2JqZWN0LmtleXMobmZ0LnByb3BlcnRpZXMpLmxlbmd0aDtpZihhcGkuYXNzZXJ0KG5mdC5pc3N1ZXI9PT1hcGkuc2VuZGVyLCJtdXN0IGJlIHRoZSBpc3N1ZXIiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1uZnQuZ3JvdXBCeXx8MD09PW5mdC5ncm91cEJ5Lmxlbmd0aCwibGlzdCBpcyBhbHJlYWR5IHNldCIpJiZhcGkuYXNzZXJ0KHByb3BlcnRpZXMubGVuZ3RoPD1uZnRQcm9wZXJ0eUNvdW50LCJjYW5ub3Qgc2V0IG1vcmUgZGF0YSBwcm9wZXJ0aWVzIHRoYW4gTkZUIGhhcyIpJiZhcGkuYXNzZXJ0KCFjb250YWluc0R1cGxpY2F0ZXMocHJvcGVydGllcyksImxpc3QgY2Fubm90IGNvbnRhaW4gZHVwbGljYXRlcyIpKXtmb3IobGV0IGk9MDtpPHByb3BlcnRpZXMubGVuZ3RoO2krPTEpe2NvbnN0IG5hbWU9cHJvcGVydGllc1tpXTtpZighYXBpLmFzc2VydChuYW1lJiYic3RyaW5nIj09dHlwZW9mIG5hbWUmJm5hbWUgaW4gbmZ0LnByb3BlcnRpZXMsImRhdGEgcHJvcGVydHkgbXVzdCBleGlzdCIpKXJldHVybiExfXJldHVybiBuZnQuZ3JvdXBCeT1wcm9wZXJ0aWVzLGF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLG5mdCksITB9fX1yZXR1cm4hMX0sYWN0aW9ucy5zZXRQcm9wZXJ0aWVzPWFzeW5jIHBheWxvYWQ9Pntjb25zdHtzeW1ib2w6c3ltYm9sLGZyb21UeXBlOmZyb21UeXBlLG5mdHM6bmZ0cyxjYWxsaW5nQ29udHJhY3RJbmZvOmNhbGxpbmdDb250cmFjdEluZm99PXBheWxvYWQsZmluYWxGcm9tVHlwZT12b2lkIDA9PT1mcm9tVHlwZT8idXNlciI6ZnJvbVR5cGU7aWYoYXBpLmFzc2VydChuZnRzJiYib2JqZWN0Ij09dHlwZW9mIG5mdHMmJkFycmF5LmlzQXJyYXkobmZ0cykmJmZpbmFsRnJvbVR5cGUmJiJzdHJpbmciPT10eXBlb2YgZmluYWxGcm9tVHlwZSYmWyJ1c2VyIiwiY29udHJhY3QiXS5pbmNsdWRlcyhmaW5hbEZyb21UeXBlKSYmc3ltYm9sJiYic3RyaW5nIj09dHlwZW9mIHN5bWJvbCYmKGNhbGxpbmdDb250cmFjdEluZm98fHZvaWQgMD09PWNhbGxpbmdDb250cmFjdEluZm8mJiJ1c2VyIj09PWZpbmFsRnJvbVR5cGUpLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KG5mdHMubGVuZ3RoPD01MCwiY2Fubm90IHNldCBwcm9wZXJ0aWVzIG9uIG1vcmUgdGhhbiA1MCBORlQgaW5zdGFuY2VzIGF0IG9uY2UiKSl7Y29uc3QgZmluYWxGcm9tPSJ1c2VyIj09PWZpbmFsRnJvbVR5cGU/YXBpLnNlbmRlcjpjYWxsaW5nQ29udHJhY3RJbmZvLm5hbWUsbmZ0PWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN5bWJvbH0pO2lmKGFwaS5hc3NlcnQobnVsbCE9PW5mdCwic3ltYm9sIGRvZXMgbm90IGV4aXN0Iikpe2lmKCFpc1ZhbGlkRGF0YVByb3BlcnRpZXNBcnJheShmaW5hbEZyb20sZmluYWxGcm9tVHlwZSxuZnQsbmZ0cykpcmV0dXJuITE7Y29uc3QgaW5zdGFuY2VUYWJsZU5hbWU9c3ltYm9sKyJpbnN0YW5jZXMiO2ZvcihsZXQgaT0wO2k8bmZ0cy5sZW5ndGg7aSs9MSl7Y29uc3R7aWQ6aWQscHJvcGVydGllczpwcm9wZXJ0aWVzfT1uZnRzW2ldO2lmKDA9PT1PYmplY3Qua2V5cyhwcm9wZXJ0aWVzKS5sZW5ndGgpY29udGludWU7Y29uc3QgbmZ0SW5zdGFuY2U9YXdhaXQgYXBpLmRiLmZpbmRPbmUoaW5zdGFuY2VUYWJsZU5hbWUse19pZDphcGkuQmlnTnVtYmVyKGlkKS50b051bWJlcigpfSk7aWYoYXBpLmFzc2VydChudWxsIT09bmZ0SW5zdGFuY2UsIm5mdCBpbnN0YW5jZSBkb2VzIG5vdCBleGlzdCIpKXtsZXQgc2hvdWxkVXBkYXRlPSExO2Zvcihjb25zdFtuYW1lLGRhdGFdb2YgT2JqZWN0LmVudHJpZXMocHJvcGVydGllcykpe2xldCBvbGRQcm9wZXJ0eT1udWxsO25mdC5wcm9wZXJ0aWVzW25hbWVdLmlzUmVhZE9ubHk/YXBpLmFzc2VydCghKG5hbWUgaW4gbmZ0SW5zdGFuY2UucHJvcGVydGllcyksImNhbm5vdCBlZGl0IHJlYWQtb25seSBwcm9wZXJ0aWVzIikmJihuZnRJbnN0YW5jZS5wcm9wZXJ0aWVzW25hbWVdPWRhdGEsc2hvdWxkVXBkYXRlPSEwKToob2xkUHJvcGVydHk9bmZ0SW5zdGFuY2UucHJvcGVydGllc1tuYW1lXSxuZnRJbnN0YW5jZS5wcm9wZXJ0aWVzW25hbWVdPWRhdGEsc2hvdWxkVXBkYXRlPSEwKSxzaG91bGRVcGRhdGUmJm9sZFByb3BlcnR5IT09ZGF0YSYmYXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJtaW5pbmciLCJoYW5kbGVOZnRTZXRQcm9wZXJ0eSIse3N5bWJvbDpzeW1ib2wsbmZ0Om5mdEluc3RhbmNlLHByb3BlcnR5TmFtZTpuYW1lLG9sZFZhbHVlOm9sZFByb3BlcnR5fSl9c2hvdWxkVXBkYXRlJiZhd2FpdCBhcGkuZGIudXBkYXRlKGluc3RhbmNlVGFibGVOYW1lLG5mdEluc3RhbmNlKX19cmV0dXJuITB9fXJldHVybiExfSxhY3Rpb25zLmJ1cm49YXN5bmMgcGF5bG9hZD0+e2NvbnN0e2Zyb21UeXBlOmZyb21UeXBlLG5mdHM6bmZ0cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5LGNhbGxpbmdDb250cmFjdEluZm86Y2FsbGluZ0NvbnRyYWN0SW5mb309cGF5bG9hZCxmaW5hbEZyb21UeXBlPXZvaWQgMD09PWZyb21UeXBlPyJ1c2VyIjpmcm9tVHlwZTtpZihhcGkuYXNzZXJ0KCEwPT09aXNTaWduZWRXaXRoQWN0aXZlS2V5LCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChmaW5hbEZyb21UeXBlJiYic3RyaW5nIj09dHlwZW9mIGZpbmFsRnJvbVR5cGUmJlsidXNlciIsImNvbnRyYWN0Il0uaW5jbHVkZXMoZmluYWxGcm9tVHlwZSkmJihjYWxsaW5nQ29udHJhY3RJbmZvfHx2b2lkIDA9PT1jYWxsaW5nQ29udHJhY3RJbmZvJiYidXNlciI9PT1maW5hbEZyb21UeXBlKSYmbmZ0cyYmIm9iamVjdCI9PXR5cGVvZiBuZnRzJiZBcnJheS5pc0FycmF5KG5mdHMpLCJpbnZhbGlkIHBhcmFtcyIpJiZpc1ZhbGlkTmZ0SWRBcnJheShuZnRzKSl7Y29uc3QgZmluYWxGcm9tPSJ1c2VyIj09PWZpbmFsRnJvbVR5cGU/YXBpLnNlbmRlcjpjYWxsaW5nQ29udHJhY3RJbmZvLm5hbWU7bGV0IGNvbnRhaW5lckNvdW50PTAsdG9rZW5Db3VudD0wLGlzRmlyc3RJbnN0YW5jZUNvbnRhaW5lcj0hMTtmb3IobGV0IGk9MDtpPG5mdHMubGVuZ3RoO2krPTEpe2NvbnN0e3N5bWJvbDpzeW1ib2wsaWRzOmlkc309bmZ0c1tpXSxuZnQ9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c3ltYm9sfSk7aWYobmZ0KXtjb25zdCBpbnN0YW5jZVRhYmxlTmFtZT1zeW1ib2wrImluc3RhbmNlcyI7Zm9yKGxldCBqPTA7ajxpZHMubGVuZ3RoO2orPTEpe2NvbnN0IGlkPWlkc1tqXSxuZnRJbnN0YW5jZT1hd2FpdCBhcGkuZGIuZmluZE9uZShpbnN0YW5jZVRhYmxlTmFtZSx7X2lkOmFwaS5CaWdOdW1iZXIoaWQpLnRvTnVtYmVyKCl9KTtpZihuZnRJbnN0YW5jZSl7bGV0IGlzQnVybkF1dGhvcml6ZWQ9ITA7aWYobmZ0SW5zdGFuY2UubG9ja2VkTmZ0cyYmbmZ0SW5zdGFuY2UubG9ja2VkTmZ0cy5sZW5ndGg+MD8oMD09PXRva2VuQ291bnQmJihpc0ZpcnN0SW5zdGFuY2VDb250YWluZXI9ITApLGNvbnRhaW5lckNvdW50Kz0xLChjb250YWluZXJDb3VudD4xfHwhaXNGaXJzdEluc3RhbmNlQ29udGFpbmVyKSYmKGlzQnVybkF1dGhvcml6ZWQ9ITEpKTppc0ZpcnN0SW5zdGFuY2VDb250YWluZXImJihpc0J1cm5BdXRob3JpemVkPSExKSx0b2tlbkNvdW50Kz0xLG5mdEluc3RhbmNlLmFjY291bnQ9PT1maW5hbEZyb20mJigidSI9PT1uZnRJbnN0YW5jZS5vd25lZEJ5JiYidXNlciI9PT1maW5hbEZyb21UeXBlfHwiYyI9PT1uZnRJbnN0YW5jZS5vd25lZEJ5JiYiY29udHJhY3QiPT09ZmluYWxGcm9tVHlwZSkmJnZvaWQgMD09PW5mdEluc3RhbmNlLmRlbGVnYXRlZFRvJiZpc0J1cm5BdXRob3JpemVkKXtjb25zdCBmaW5hbExvY2tUb2tlbnM9e307bGV0IGlzVHJhbnNmZXJTdWNjZXNzPSEwO2Zvcihjb25zdFtsb2Nrc3ltYm9sLHF1YW50aXR5XW9mIE9iamVjdC5lbnRyaWVzKG5mdEluc3RhbmNlLmxvY2tlZFRva2Vucykpe2NvbnN0IHJlcz1hd2FpdCBhcGkudHJhbnNmZXJUb2tlbnMoZmluYWxGcm9tLGxvY2tzeW1ib2wscXVhbnRpdHksZmluYWxGcm9tVHlwZSk7aXNUb2tlblRyYW5zZmVyVmVyaWZpZWQocmVzLCJuZnQiLGZpbmFsRnJvbSxsb2Nrc3ltYm9sLHF1YW50aXR5LCJ0cmFuc2ZlckZyb21Db250cmFjdCIpfHwoZmluYWxMb2NrVG9rZW5zW2xvY2tzeW1ib2xdPXF1YW50aXR5LGlzVHJhbnNmZXJTdWNjZXNzPSExKX1hcGkuYXNzZXJ0KGlzVHJhbnNmZXJTdWNjZXNzLGB1bmFibGUgdG8gcmVsZWFzZSBsb2NrZWQgdG9rZW5zIGluOiAke3N5bWJvbH0sIGlkICR7aWR9YCk7Y29uc3Qgb3JpZ0xvY2tOZnRzPW5mdEluc3RhbmNlLmxvY2tlZE5mdHMmJm5mdEluc3RhbmNlLmxvY2tlZE5mdHMubGVuZ3RoPjA/bmZ0SW5zdGFuY2UubG9ja2VkTmZ0czpbXTtpZihpc1RyYW5zZmVyU3VjY2VzcyYmbmZ0SW5zdGFuY2UubG9ja2VkTmZ0cyYmbmZ0SW5zdGFuY2UubG9ja2VkTmZ0cy5sZW5ndGg+MCl7Y29uc3QgcmVzPWF3YWl0IHRyYW5zZmVyQW5kVmVyaWZ5TmZ0cygibmZ0IiwiY29udHJhY3QiLGZpbmFsRnJvbSxmaW5hbEZyb21UeXBlLG5mdEluc3RhbmNlLmxvY2tlZE5mdHMsaXNTaWduZWRXaXRoQWN0aXZlS2V5LHtuYW1lOiJuZnQifSk7bmZ0SW5zdGFuY2UubG9ja2VkTmZ0cz1yZXMuZmFpbCxuZnRJbnN0YW5jZS5sb2NrZWROZnRzLmxlbmd0aD4wJiYoaXNUcmFuc2ZlclN1Y2Nlc3M9ITEpLGFwaS5hc3NlcnQoaXNUcmFuc2ZlclN1Y2Nlc3MsYHVuYWJsZSB0byByZWxlYXNlIGxvY2tlZCBORlQgaW5zdGFuY2VzIGluOiAke3N5bWJvbH0sIGlkICR7aWR9YCl9Y29uc3Qgb3JpZ093bmVkQnk9bmZ0SW5zdGFuY2Uub3duZWRCeSxvcmlnTG9ja1Rva2Vucz1uZnRJbnN0YW5jZS5sb2NrZWRUb2tlbnM7bmZ0SW5zdGFuY2UubG9ja2VkVG9rZW5zPWZpbmFsTG9ja1Rva2Vucyxpc1RyYW5zZmVyU3VjY2VzcyYmKG5mdEluc3RhbmNlLnByZXZpb3VzQWNjb3VudD1uZnRJbnN0YW5jZS5hY2NvdW50LG5mdEluc3RhbmNlLnByZXZpb3VzT3duZWRCeT1uZnRJbnN0YW5jZS5vd25lZEJ5LG5mdEluc3RhbmNlLmFjY291bnQ9Im51bGwiLG5mdEluc3RhbmNlLm93bmVkQnk9InUiLG5mdC5jaXJjdWxhdGluZ1N1cHBseS09MSksYXdhaXQgYXBpLmRiLnVwZGF0ZShpbnN0YW5jZVRhYmxlTmFtZSxuZnRJbnN0YW5jZSksaXNUcmFuc2ZlclN1Y2Nlc3MmJmFwaS5lbWl0KCJidXJuIix7YWNjb3VudDpmaW5hbEZyb20sb3duZWRCeTpvcmlnT3duZWRCeSx1bmxvY2tlZFRva2VuczpvcmlnTG9ja1Rva2Vucyx1bmxvY2tlZE5mdHM6b3JpZ0xvY2tOZnRzLHN5bWJvbDpzeW1ib2wsaWQ6aWR9KX19fWF3YWl0IGFwaS5kYi51cGRhdGUoIm5mdHMiLG5mdCl9fX19LGFjdGlvbnMudHJhbnNmZXI9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e2Zyb21UeXBlOmZyb21UeXBlLHRvOnRvLHRvVHlwZTp0b1R5cGUsbmZ0czpuZnRzLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXksY2FsbGluZ0NvbnRyYWN0SW5mbzpjYWxsaW5nQ29udHJhY3RJbmZvfT1wYXlsb2FkLHR5cGVzPVsidXNlciIsImNvbnRyYWN0Il0sZmluYWxUb1R5cGU9dm9pZCAwPT09dG9UeXBlPyJ1c2VyIjp0b1R5cGUsZmluYWxGcm9tVHlwZT12b2lkIDA9PT1mcm9tVHlwZT8idXNlciI6ZnJvbVR5cGU7aWYoYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQoZmluYWxGcm9tVHlwZSYmInN0cmluZyI9PXR5cGVvZiBmaW5hbEZyb21UeXBlJiZ0eXBlcy5pbmNsdWRlcyhmaW5hbEZyb21UeXBlKSYmdG8mJiJzdHJpbmciPT10eXBlb2YgdG8mJmZpbmFsVG9UeXBlJiYic3RyaW5nIj09dHlwZW9mIGZpbmFsVG9UeXBlJiZ0eXBlcy5pbmNsdWRlcyhmaW5hbFRvVHlwZSkmJihjYWxsaW5nQ29udHJhY3RJbmZvfHx2b2lkIDA9PT1jYWxsaW5nQ29udHJhY3RJbmZvJiYidXNlciI9PT1maW5hbEZyb21UeXBlKSYmbmZ0cyYmIm9iamVjdCI9PXR5cGVvZiBuZnRzJiZBcnJheS5pc0FycmF5KG5mdHMpLCJpbnZhbGlkIHBhcmFtcyIpJiZpc1ZhbGlkTmZ0SWRBcnJheShuZnRzKSl7Y29uc3QgZmluYWxUbz0idXNlciI9PT1maW5hbFRvVHlwZT90by50cmltKCkudG9Mb3dlckNhc2UoKTp0by50cmltKCksdG9WYWxpZD0idXNlciI9PT1maW5hbFRvVHlwZT9pc1ZhbGlkSGl2ZUFjY291bnRMZW5ndGgoZmluYWxUbyk6aXNWYWxpZENvbnRyYWN0TGVuZ3RoKGZpbmFsVG8pLGZpbmFsRnJvbT0idXNlciI9PT1maW5hbEZyb21UeXBlP2FwaS5zZW5kZXI6Y2FsbGluZ0NvbnRyYWN0SW5mby5uYW1lO2lmKGFwaS5hc3NlcnQodG9WYWxpZCwiaW52YWxpZCB0byIpJiZhcGkuYXNzZXJ0KCEoZmluYWxUb1R5cGU9PT1maW5hbEZyb21UeXBlJiZmaW5hbFRvPT09ZmluYWxGcm9tKSwiY2Fubm90IHRyYW5zZmVyIHRvIHNlbGYiKSYmYXBpLmFzc2VydCghKCJ1c2VyIj09PWZpbmFsVG9UeXBlJiYibnVsbCI9PT1maW5hbFRvKSwiY2Fubm90IHRyYW5zZmVyIHRvIG51bGw7IHVzZSBidXJuIGFjdGlvbiBpbnN0ZWFkIikpZm9yKGxldCBpPTA7aTxuZnRzLmxlbmd0aDtpKz0xKXtjb25zdHtzeW1ib2w6c3ltYm9sLGlkczppZHN9PW5mdHNbaV07aWYoYXdhaXQgYXBpLmRiLmZpbmRPbmUoIm5mdHMiLHtzeW1ib2w6c3ltYm9sfSkpe2NvbnN0IGluc3RhbmNlVGFibGVOYW1lPXN5bWJvbCsiaW5zdGFuY2VzIjtmb3IobGV0IGo9MDtqPGlkcy5sZW5ndGg7ais9MSl7Y29uc3QgaWQ9aWRzW2pdLG5mdEluc3RhbmNlPWF3YWl0IGFwaS5kYi5maW5kT25lKGluc3RhbmNlVGFibGVOYW1lLHtfaWQ6YXBpLkJpZ051bWJlcihpZCkudG9OdW1iZXIoKX0pO2lmKG5mdEluc3RhbmNlJiZuZnRJbnN0YW5jZS5hY2NvdW50PT09ZmluYWxGcm9tJiYoInUiPT09bmZ0SW5zdGFuY2Uub3duZWRCeSYmInVzZXIiPT09ZmluYWxGcm9tVHlwZXx8ImMiPT09bmZ0SW5zdGFuY2Uub3duZWRCeSYmImNvbnRyYWN0Ij09PWZpbmFsRnJvbVR5cGUpJiZ2b2lkIDA9PT1uZnRJbnN0YW5jZS5kZWxlZ2F0ZWRUbyl7Y29uc3Qgb3JpZ093bmVkQnk9bmZ0SW5zdGFuY2Uub3duZWRCeSxuZXdPd25lZEJ5PSJ1c2VyIj09PWZpbmFsVG9UeXBlPyJ1IjoiYyI7bmZ0SW5zdGFuY2UucHJldmlvdXNBY2NvdW50PW5mdEluc3RhbmNlLmFjY291bnQsbmZ0SW5zdGFuY2UucHJldmlvdXNPd25lZEJ5PW5mdEluc3RhbmNlLm93bmVkQnksbmZ0SW5zdGFuY2UuYWNjb3VudD1maW5hbFRvLG5mdEluc3RhbmNlLm93bmVkQnk9bmV3T3duZWRCeSxhd2FpdCBhcGkuZGIudXBkYXRlKGluc3RhbmNlVGFibGVOYW1lLG5mdEluc3RhbmNlKSxhcGkuZW1pdCgidHJhbnNmZXIiLHtmcm9tOmZpbmFsRnJvbSxmcm9tVHlwZTpvcmlnT3duZWRCeSx0bzpmaW5hbFRvLHRvVHlwZTpuZXdPd25lZEJ5LHN5bWJvbDpzeW1ib2wsaWQ6aWR9KX19fX19fSxhY3Rpb25zLmRlbGVnYXRlPWFzeW5jIHBheWxvYWQ9Pntjb25zdHtmcm9tVHlwZTpmcm9tVHlwZSx0bzp0byx0b1R5cGU6dG9UeXBlLG5mdHM6bmZ0cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5LGNhbGxpbmdDb250cmFjdEluZm86Y2FsbGluZ0NvbnRyYWN0SW5mb309cGF5bG9hZCx0eXBlcz1bInVzZXIiLCJjb250cmFjdCJdLGZpbmFsVG9UeXBlPXZvaWQgMD09PXRvVHlwZT8idXNlciI6dG9UeXBlLGZpbmFsRnJvbVR5cGU9dm9pZCAwPT09ZnJvbVR5cGU/InVzZXIiOmZyb21UeXBlO2lmKGFwaS5hc3NlcnQoITA9PT1pc1NpZ25lZFdpdGhBY3RpdmVLZXksInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KGZpbmFsRnJvbVR5cGUmJiJzdHJpbmciPT10eXBlb2YgZmluYWxGcm9tVHlwZSYmdHlwZXMuaW5jbHVkZXMoZmluYWxGcm9tVHlwZSkmJnRvJiYic3RyaW5nIj09dHlwZW9mIHRvJiZmaW5hbFRvVHlwZSYmInN0cmluZyI9PXR5cGVvZiBmaW5hbFRvVHlwZSYmdHlwZXMuaW5jbHVkZXMoZmluYWxUb1R5cGUpJiYoY2FsbGluZ0NvbnRyYWN0SW5mb3x8dm9pZCAwPT09Y2FsbGluZ0NvbnRyYWN0SW5mbyYmInVzZXIiPT09ZmluYWxGcm9tVHlwZSkmJm5mdHMmJiJvYmplY3QiPT10eXBlb2YgbmZ0cyYmQXJyYXkuaXNBcnJheShuZnRzKSwiaW52YWxpZCBwYXJhbXMiKSYmaXNWYWxpZE5mdElkQXJyYXkobmZ0cykpe2NvbnN0IGZpbmFsVG89InVzZXIiPT09ZmluYWxUb1R5cGU/dG8udHJpbSgpLnRvTG93ZXJDYXNlKCk6dG8udHJpbSgpLHRvVmFsaWQ9InVzZXIiPT09ZmluYWxUb1R5cGU/aXNWYWxpZEhpdmVBY2NvdW50TGVuZ3RoKGZpbmFsVG8pOmlzVmFsaWRDb250cmFjdExlbmd0aChmaW5hbFRvKSxmaW5hbEZyb209InVzZXIiPT09ZmluYWxGcm9tVHlwZT9hcGkuc2VuZGVyOmNhbGxpbmdDb250cmFjdEluZm8ubmFtZTtpZihhcGkuYXNzZXJ0KHRvVmFsaWQsImludmFsaWQgdG8iKSYmYXBpLmFzc2VydCghKGZpbmFsVG9UeXBlPT09ZmluYWxGcm9tVHlwZSYmZmluYWxUbz09PWZpbmFsRnJvbSksImNhbm5vdCBkZWxlZ2F0ZSB0byBzZWxmIikmJmFwaS5hc3NlcnQoISgidXNlciI9PT1maW5hbFRvVHlwZSYmIm51bGwiPT09ZmluYWxUbyksImNhbm5vdCBkZWxlZ2F0ZSB0byBudWxsIikpZm9yKGxldCBpPTA7aTxuZnRzLmxlbmd0aDtpKz0xKXtjb25zdHtzeW1ib2w6c3ltYm9sLGlkczppZHN9PW5mdHNbaV0sbmZ0PWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN5bWJvbH0pO2lmKG5mdCYmYXBpLmFzc2VydCghMD09PW5mdC5kZWxlZ2F0aW9uRW5hYmxlZCwiZGVsZWdhdGlvbiBub3QgZW5hYmxlZCBmb3IgIitzeW1ib2wpKXtjb25zdCBpbnN0YW5jZVRhYmxlTmFtZT1zeW1ib2wrImluc3RhbmNlcyI7Zm9yKGxldCBqPTA7ajxpZHMubGVuZ3RoO2orPTEpe2NvbnN0IGlkPWlkc1tqXSxuZnRJbnN0YW5jZT1hd2FpdCBhcGkuZGIuZmluZE9uZShpbnN0YW5jZVRhYmxlTmFtZSx7X2lkOmFwaS5CaWdOdW1iZXIoaWQpLnRvTnVtYmVyKCl9KTtpZihuZnRJbnN0YW5jZSYmbmZ0SW5zdGFuY2UuYWNjb3VudD09PWZpbmFsRnJvbSYmKCJ1Ij09PW5mdEluc3RhbmNlLm93bmVkQnkmJiJ1c2VyIj09PWZpbmFsRnJvbVR5cGV8fCJjIj09PW5mdEluc3RhbmNlLm93bmVkQnkmJiJjb250cmFjdCI9PT1maW5hbEZyb21UeXBlKSYmdm9pZCAwPT09bmZ0SW5zdGFuY2UuZGVsZWdhdGVkVG8pe2NvbnN0IG5ld093bmVkQnk9InVzZXIiPT09ZmluYWxUb1R5cGU/InUiOiJjIixuZXdEZWxlZ2F0aW9uPXthY2NvdW50OmZpbmFsVG8sb3duZWRCeTpuZXdPd25lZEJ5fTtuZnRJbnN0YW5jZS5kZWxlZ2F0ZWRUbz1uZXdEZWxlZ2F0aW9uLGF3YWl0IGFwaS5kYi51cGRhdGUoaW5zdGFuY2VUYWJsZU5hbWUsbmZ0SW5zdGFuY2UpLGFwaS5lbWl0KCJkZWxlZ2F0ZSIse2Zyb206ZmluYWxGcm9tLGZyb21UeXBlOm5mdEluc3RhbmNlLm93bmVkQnksdG86ZmluYWxUbyx0b1R5cGU6bmV3T3duZWRCeSxzeW1ib2w6c3ltYm9sLGlkOmlkfSksYXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJtaW5pbmciLCJoYW5kbGVOZnRDaGFuZ2UiLHtzeW1ib2w6c3ltYm9sLG5mdDpuZnRJbnN0YW5jZSxhZGQ6ITB9KX19fX19fSxhY3Rpb25zLnVuZGVsZWdhdGU9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e2Zyb21UeXBlOmZyb21UeXBlLG5mdHM6bmZ0cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5LGNhbGxpbmdDb250cmFjdEluZm86Y2FsbGluZ0NvbnRyYWN0SW5mb309cGF5bG9hZCxmaW5hbEZyb21UeXBlPXZvaWQgMD09PWZyb21UeXBlPyJ1c2VyIjpmcm9tVHlwZTtpZihhcGkuYXNzZXJ0KCEwPT09aXNTaWduZWRXaXRoQWN0aXZlS2V5LCJ5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXkiKSYmYXBpLmFzc2VydChmaW5hbEZyb21UeXBlJiYic3RyaW5nIj09dHlwZW9mIGZpbmFsRnJvbVR5cGUmJlsidXNlciIsImNvbnRyYWN0Il0uaW5jbHVkZXMoZmluYWxGcm9tVHlwZSkmJihjYWxsaW5nQ29udHJhY3RJbmZvfHx2b2lkIDA9PT1jYWxsaW5nQ29udHJhY3RJbmZvJiYidXNlciI9PT1maW5hbEZyb21UeXBlKSYmbmZ0cyYmIm9iamVjdCI9PXR5cGVvZiBuZnRzJiZBcnJheS5pc0FycmF5KG5mdHMpLCJpbnZhbGlkIHBhcmFtcyIpJiZpc1ZhbGlkTmZ0SWRBcnJheShuZnRzKSl7Y29uc3QgZmluYWxGcm9tPSJ1c2VyIj09PWZpbmFsRnJvbVR5cGU/YXBpLnNlbmRlcjpjYWxsaW5nQ29udHJhY3RJbmZvLm5hbWUsYmxvY2tEYXRlPW5ldyBEYXRlKGFwaS5oaXZlQmxvY2tUaW1lc3RhbXArIi4wMDBaIik7Zm9yKGxldCBpPTA7aTxuZnRzLmxlbmd0aDtpKz0xKXtjb25zdHtzeW1ib2w6c3ltYm9sLGlkczppZHN9PW5mdHNbaV0sbmZ0PWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN5bWJvbH0pO2lmKG5mdCYmYXBpLmFzc2VydCghMD09PW5mdC5kZWxlZ2F0aW9uRW5hYmxlZCwiZGVsZWdhdGlvbiBub3QgZW5hYmxlZCBmb3IgIitzeW1ib2wpKXtjb25zdCBjb29sZG93blBlcmlvZE1pbGxpc2VjPTI0Km5mdC51bmRlbGVnYXRpb25Db29sZG93biozNjAwKjFlMyxjb21wbGV0ZVRpbWVzdGFtcD1ibG9ja0RhdGUuZ2V0VGltZSgpK2Nvb2xkb3duUGVyaW9kTWlsbGlzZWMsaW5zdGFuY2VUYWJsZU5hbWU9c3ltYm9sKyJpbnN0YW5jZXMiLHVuZGVsZWdhdGlvbj17c3ltYm9sOnN5bWJvbCxpZHM6W10sY29tcGxldGVUaW1lc3RhbXA6Y29tcGxldGVUaW1lc3RhbXB9O2ZvcihsZXQgaj0wO2o8aWRzLmxlbmd0aDtqKz0xKXtjb25zdCBpZD1pZHNbal0sbmZ0SW5zdGFuY2U9YXdhaXQgYXBpLmRiLmZpbmRPbmUoaW5zdGFuY2VUYWJsZU5hbWUse19pZDphcGkuQmlnTnVtYmVyKGlkKS50b051bWJlcigpfSk7bmZ0SW5zdGFuY2UmJm5mdEluc3RhbmNlLmFjY291bnQ9PT1maW5hbEZyb20mJigidSI9PT1uZnRJbnN0YW5jZS5vd25lZEJ5JiYidXNlciI9PT1maW5hbEZyb21UeXBlfHwiYyI9PT1uZnRJbnN0YW5jZS5vd25lZEJ5JiYiY29udHJhY3QiPT09ZmluYWxGcm9tVHlwZSkmJm5mdEluc3RhbmNlLmRlbGVnYXRlZFRvJiZ2b2lkIDA9PT1uZnRJbnN0YW5jZS5kZWxlZ2F0ZWRUby51bmRlbGVnYXRlQXQmJihuZnRJbnN0YW5jZS5kZWxlZ2F0ZWRUby51bmRlbGVnYXRlQXQ9Y29tcGxldGVUaW1lc3RhbXAsdW5kZWxlZ2F0aW9uLmlkcy5wdXNoKG5mdEluc3RhbmNlLl9pZCksYXdhaXQgYXBpLmRiLnVwZGF0ZShpbnN0YW5jZVRhYmxlTmFtZSxuZnRJbnN0YW5jZSksYXBpLmVtaXQoInVuZGVsZWdhdGVTdGFydCIse2Zyb206bmZ0SW5zdGFuY2UuZGVsZWdhdGVkVG8uYWNjb3VudCxmcm9tVHlwZTpuZnRJbnN0YW5jZS5kZWxlZ2F0ZWRUby5vd25lZEJ5LHN5bWJvbDpzeW1ib2wsaWQ6aWR9KSxhd2FpdCBhcGkuZXhlY3V0ZVNtYXJ0Q29udHJhY3QoIm1pbmluZyIsImhhbmRsZU5mdENoYW5nZSIse3N5bWJvbDpzeW1ib2wsbmZ0Om5mdEluc3RhbmNlLGFkZDohMX0pKX11bmRlbGVnYXRpb24uaWRzLmxlbmd0aD4wJiZhd2FpdCBhcGkuZGIuaW5zZXJ0KCJwZW5kaW5nVW5kZWxlZ2F0aW9ucyIsdW5kZWxlZ2F0aW9uKX19fX07Y29uc3QgcHJvY2Vzc1VuZGVsZWdhdGlvbj1hc3luYyB1bmRlbGVnYXRpb249Pntjb25zdHtzeW1ib2w6c3ltYm9sLGlkczppZHN9PXVuZGVsZWdhdGlvbixpbnN0YW5jZVRhYmxlTmFtZT1zeW1ib2wrImluc3RhbmNlcyIsaW5zdGFuY2VzPWF3YWl0IGFwaS5kYi5maW5kKGluc3RhbmNlVGFibGVOYW1lLHtfaWQ6eyRpbjppZHN9fSw1MCwwLFt7aW5kZXg6Il9pZCIsZGVzY2VuZGluZzohMX1dKTtmb3IobGV0IGk9MDtpPGluc3RhbmNlcy5sZW5ndGg7aSs9MSlkZWxldGUgaW5zdGFuY2VzW2ldLmRlbGVnYXRlZFRvLGF3YWl0IGFwaS5kYi51cGRhdGUoaW5zdGFuY2VUYWJsZU5hbWUsaW5zdGFuY2VzW2ldLHtkZWxlZ2F0ZWRUbzoiIn0pO2F3YWl0IGFwaS5kYi5yZW1vdmUoInBlbmRpbmdVbmRlbGVnYXRpb25zIix1bmRlbGVnYXRpb24pLGFwaS5lbWl0KCJ1bmRlbGVnYXRlRG9uZSIse3N5bWJvbDpzeW1ib2wsaWRzOmlkc30pfTthY3Rpb25zLmNoZWNrUGVuZGluZ1VuZGVsZWdhdGlvbnM9YXN5bmMoKT0+e2lmKGFwaS5hc3NlcnQoIm51bGwiPT09YXBpLnNlbmRlciwibm90IGF1dGhvcml6ZWQiKSl7Y29uc3QgdGltZXN0YW1wPW5ldyBEYXRlKGFwaS5oaXZlQmxvY2tUaW1lc3RhbXArIi4wMDBaIikuZ2V0VGltZSgpO2xldCBwZW5kaW5nVW5kZWxlZ2F0aW9ucz1hd2FpdCBhcGkuZGIuZmluZCgicGVuZGluZ1VuZGVsZWdhdGlvbnMiLHtjb21wbGV0ZVRpbWVzdGFtcDp7JGx0ZTp0aW1lc3RhbXB9fSksbmJQZW5kaW5nVW5kZWxlZ2F0aW9ucz1wZW5kaW5nVW5kZWxlZ2F0aW9ucy5sZW5ndGg7Zm9yKDtuYlBlbmRpbmdVbmRlbGVnYXRpb25zPjA7KXtmb3IobGV0IGluZGV4PTA7aW5kZXg8bmJQZW5kaW5nVW5kZWxlZ2F0aW9ucztpbmRleCs9MSl7Y29uc3QgcGVuZGluZ1VuZGVsZWdhdGlvbj1wZW5kaW5nVW5kZWxlZ2F0aW9uc1tpbmRleF07YXdhaXQgcHJvY2Vzc1VuZGVsZWdhdGlvbihwZW5kaW5nVW5kZWxlZ2F0aW9uKX1wZW5kaW5nVW5kZWxlZ2F0aW9ucz1hd2FpdCBhcGkuZGIuZmluZCgicGVuZGluZ1VuZGVsZWdhdGlvbnMiLHtjb21wbGV0ZVRpbWVzdGFtcDp7JGx0ZTp0aW1lc3RhbXB9fSksbmJQZW5kaW5nVW5kZWxlZ2F0aW9ucz1wZW5kaW5nVW5kZWxlZ2F0aW9ucy5sZW5ndGh9fX0sYWN0aW9ucy5jcmVhdGU9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e25hbWU6bmFtZSxvcmdOYW1lOm9yZ05hbWUscHJvZHVjdE5hbWU6cHJvZHVjdE5hbWUsc3ltYm9sOnN5bWJvbCx1cmw6dXJsLG1heFN1cHBseTptYXhTdXBwbHksYXV0aG9yaXplZElzc3VpbmdBY2NvdW50czphdXRob3JpemVkSXNzdWluZ0FjY291bnRzLGF1dGhvcml6ZWRJc3N1aW5nQ29udHJhY3RzOmF1dGhvcml6ZWRJc3N1aW5nQ29udHJhY3RzLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9PXBheWxvYWQscGFyYW1zPWF3YWl0IGFwaS5kYi5maW5kT25lKCJwYXJhbXMiLHt9KSx7bmZ0Q3JlYXRpb25GZWU6bmZ0Q3JlYXRpb25GZWV9PXBhcmFtcyx1dGlsaXR5VG9rZW5CYWxhbmNlPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwiYmFsYW5jZXMiLHthY2NvdW50OmFwaS5zZW5kZXIsc3ltYm9sOlVUSUxJVFlfVE9LRU5fU1lNQk9MfSksYXV0aG9yaXplZENyZWF0aW9uPSEhYXBpLkJpZ051bWJlcihuZnRDcmVhdGlvbkZlZSkubHRlKDApfHx1dGlsaXR5VG9rZW5CYWxhbmNlJiZhcGkuQmlnTnVtYmVyKHV0aWxpdHlUb2tlbkJhbGFuY2UuYmFsYW5jZSkuZ3RlKG5mdENyZWF0aW9uRmVlKTtpZihhcGkuYXNzZXJ0KGF1dGhvcml6ZWRDcmVhdGlvbiwieW91IG11c3QgaGF2ZSBlbm91Z2ggdG9rZW5zIHRvIGNvdmVyIHRoZSBjcmVhdGlvbiBmZWVzIikmJmFwaS5hc3NlcnQoITA9PT1pc1NpZ25lZFdpdGhBY3RpdmVLZXksInlvdSBtdXN0IHVzZSBhIGN1c3RvbV9qc29uIHNpZ25lZCB3aXRoIHlvdXIgYWN0aXZlIGtleSIpJiZhcGkuYXNzZXJ0KG5hbWUmJiJzdHJpbmciPT10eXBlb2YgbmFtZSYmc3ltYm9sJiYic3RyaW5nIj09dHlwZW9mIHN5bWJvbCYmKHZvaWQgMD09PXVybHx8dXJsJiYic3RyaW5nIj09dHlwZW9mIHVybCkmJih2b2lkIDA9PT1vcmdOYW1lfHxvcmdOYW1lJiYic3RyaW5nIj09dHlwZW9mIG9yZ05hbWUpJiYodm9pZCAwPT09cHJvZHVjdE5hbWV8fHByb2R1Y3ROYW1lJiYic3RyaW5nIj09dHlwZW9mIHByb2R1Y3ROYW1lKSYmKHZvaWQgMD09PWF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHN8fGF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMmJiJvYmplY3QiPT10eXBlb2YgYXV0aG9yaXplZElzc3VpbmdBY2NvdW50cyYmQXJyYXkuaXNBcnJheShhdXRob3JpemVkSXNzdWluZ0FjY291bnRzKSkmJih2b2lkIDA9PT1hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0c3x8YXV0aG9yaXplZElzc3VpbmdDb250cmFjdHMmJiJvYmplY3QiPT10eXBlb2YgYXV0aG9yaXplZElzc3VpbmdDb250cmFjdHMmJkFycmF5LmlzQXJyYXkoYXV0aG9yaXplZElzc3VpbmdDb250cmFjdHMpKSYmKHZvaWQgMD09PW1heFN1cHBseXx8bWF4U3VwcGx5JiYic3RyaW5nIj09dHlwZW9mIG1heFN1cHBseSYmIWFwaS5CaWdOdW1iZXIobWF4U3VwcGx5KS5pc05hTigpKSwiaW52YWxpZCBwYXJhbXMiKSYmYXBpLmFzc2VydChhcGkudmFsaWRhdG9yLmlzQWxwaGEoc3ltYm9sKSYmYXBpLnZhbGlkYXRvci5pc1VwcGVyY2FzZShzeW1ib2wpJiZzeW1ib2wubGVuZ3RoPjAmJnN5bWJvbC5sZW5ndGg8PTEwLCJpbnZhbGlkIHN5bWJvbDogdXBwZXJjYXNlIGxldHRlcnMgb25seSwgbWF4IGxlbmd0aCBvZiAxMCIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PVJFU0VSVkVEX1NZTUJPTFNbc3ltYm9sXXx8YXBpLnNlbmRlcj09PVJFU0VSVkVEX1NZTUJPTFNbc3ltYm9sXSwiY2Fubm90IHVzZSB0aGlzIHN5bWJvbCIpJiZhcGkuYXNzZXJ0KGFwaS52YWxpZGF0b3IuaXNBbHBoYW51bWVyaWMoYXBpLnZhbGlkYXRvci5ibGFja2xpc3QobmFtZSwiICIpKSYmbmFtZS5sZW5ndGg+MCYmbmFtZS5sZW5ndGg8PTUwLCJpbnZhbGlkIG5hbWU6IGxldHRlcnMsIG51bWJlcnMsIHdoaXRlc3BhY2VzIG9ubHksIG1heCBsZW5ndGggb2YgNTAiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT1vcmdOYW1lfHxhcGkudmFsaWRhdG9yLmlzQWxwaGFudW1lcmljKGFwaS52YWxpZGF0b3IuYmxhY2tsaXN0KG9yZ05hbWUsIiAiKSkmJm9yZ05hbWUubGVuZ3RoPjAmJm9yZ05hbWUubGVuZ3RoPD01MCwiaW52YWxpZCBvcmcgbmFtZTogbGV0dGVycywgbnVtYmVycywgd2hpdGVzcGFjZXMgb25seSwgbWF4IGxlbmd0aCBvZiA1MCIpJiZhcGkuYXNzZXJ0KHZvaWQgMD09PXByb2R1Y3ROYW1lfHxhcGkudmFsaWRhdG9yLmlzQWxwaGFudW1lcmljKGFwaS52YWxpZGF0b3IuYmxhY2tsaXN0KHByb2R1Y3ROYW1lLCIgIikpJiZwcm9kdWN0TmFtZS5sZW5ndGg+MCYmcHJvZHVjdE5hbWUubGVuZ3RoPD01MCwiaW52YWxpZCBwcm9kdWN0IG5hbWU6IGxldHRlcnMsIG51bWJlcnMsIHdoaXRlc3BhY2VzIG9ubHksIG1heCBsZW5ndGggb2YgNTAiKSYmYXBpLmFzc2VydCh2b2lkIDA9PT11cmx8fHVybC5sZW5ndGg8PTI1NSwiaW52YWxpZCB1cmw6IG1heCBsZW5ndGggb2YgMjU1IikmJmFwaS5hc3NlcnQodm9pZCAwPT09bWF4U3VwcGx5fHxhcGkuQmlnTnVtYmVyKG1heFN1cHBseSkuZ3QoMCksIm1heFN1cHBseSBtdXN0IGJlIHBvc2l0aXZlIikmJmFwaS5hc3NlcnQodm9pZCAwPT09bWF4U3VwcGx5fHxhcGkuQmlnTnVtYmVyKG1heFN1cHBseSkubHRlKE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSwibWF4U3VwcGx5IG11c3QgYmUgbG93ZXIgdGhhbiAiK051bWJlci5NQVhfU0FGRV9JTlRFR0VSKSl7Y29uc3QgbmZ0PWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN5bWJvbH0pO2lmKGFwaS5hc3NlcnQobnVsbD09PW5mdCwic3ltYm9sIGFscmVhZHkgZXhpc3RzIikpe2lmKGFwaS5CaWdOdW1iZXIobmZ0Q3JlYXRpb25GZWUpLmd0KDApKXtjb25zdCByZXM9YXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJ0b2tlbnMiLCJ0cmFuc2ZlciIse3RvOiJudWxsIixzeW1ib2w6VVRJTElUWV9UT0tFTl9TWU1CT0wscXVhbnRpdHk6bmZ0Q3JlYXRpb25GZWUsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX0pO2lmKCFpc1Rva2VuVHJhbnNmZXJWZXJpZmllZChyZXMsYXBpLnNlbmRlciwibnVsbCIsVVRJTElUWV9UT0tFTl9TWU1CT0wsbmZ0Q3JlYXRpb25GZWUsInRyYW5zZmVyIikpcmV0dXJuITF9Y29uc3QgZmluYWxNYXhTdXBwbHk9dm9pZCAwPT09bWF4U3VwcGx5PzA6YXBpLkJpZ051bWJlcihtYXhTdXBwbHkpLmludGVnZXJWYWx1ZShhcGkuQmlnTnVtYmVyLlJPVU5EX0RPV04pLnRvTnVtYmVyKCksZmluYWxPcmdOYW1lPXZvaWQgMD09PW9yZ05hbWU/IiI6b3JnTmFtZSxmaW5hbFByb2R1Y3ROYW1lPXZvaWQgMD09PXByb2R1Y3ROYW1lPyIiOnByb2R1Y3ROYW1lO2xldCBtZXRhZGF0YT17dXJsOnZvaWQgMD09PXVybD8iIjp1cmx9O21ldGFkYXRhPUpTT04uc3RyaW5naWZ5KG1ldGFkYXRhKTtjb25zdCBpbml0aWFsQWNjb3VudExpc3Q9dm9pZCAwPT09YXV0aG9yaXplZElzc3VpbmdBY2NvdW50cz9bYXBpLnNlbmRlcl06W10sbmV3TmZ0PXtpc3N1ZXI6YXBpLnNlbmRlcixzeW1ib2w6c3ltYm9sLG5hbWU6bmFtZSxvcmdOYW1lOmZpbmFsT3JnTmFtZSxwcm9kdWN0TmFtZTpmaW5hbFByb2R1Y3ROYW1lLG1ldGFkYXRhOm1ldGFkYXRhLG1heFN1cHBseTpmaW5hbE1heFN1cHBseSxzdXBwbHk6MCxjaXJjdWxhdGluZ1N1cHBseTowLGRlbGVnYXRpb25FbmFibGVkOiExLHVuZGVsZWdhdGlvbkNvb2xkb3duOjAsYXV0aG9yaXplZElzc3VpbmdBY2NvdW50czppbml0aWFsQWNjb3VudExpc3QsYXV0aG9yaXplZElzc3VpbmdDb250cmFjdHM6W10scHJvcGVydGllczp7fSxncm91cEJ5OltdfSxpbnN0YW5jZVRhYmxlTmFtZT1zeW1ib2wrImluc3RhbmNlcyI7cmV0dXJuITE9PT1hd2FpdCBhcGkuZGIudGFibGVFeGlzdHMoaW5zdGFuY2VUYWJsZU5hbWUpJiZhd2FpdCBhcGkuZGIuY3JlYXRlVGFibGUoaW5zdGFuY2VUYWJsZU5hbWUsWyJhY2NvdW50Iiwib3duZWRCeSJdKSxhd2FpdCBhcGkuZGIuaW5zZXJ0KCJuZnRzIixuZXdOZnQpLHZvaWQgMCE9PWF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMmJmF3YWl0IGFjdGlvbnMuYWRkQXV0aG9yaXplZElzc3VpbmdBY2NvdW50cyh7YWNjb3VudHM6YXV0aG9yaXplZElzc3VpbmdBY2NvdW50cyxzeW1ib2w6c3ltYm9sLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXl9KSx2b2lkIDAhPT1hdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cyYmYXdhaXQgYWN0aW9ucy5hZGRBdXRob3JpemVkSXNzdWluZ0NvbnRyYWN0cyh7Y29udHJhY3RzOmF1dGhvcml6ZWRJc3N1aW5nQ29udHJhY3RzLHN5bWJvbDpzeW1ib2wsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX0pLCEwfX1yZXR1cm4hMX0sYWN0aW9ucy5pc3N1ZT1hc3luYyBwYXlsb2FkPT57Y29uc3R7c3ltYm9sOnN5bWJvbCxmcm9tVHlwZTpmcm9tVHlwZSx0bzp0byx0b1R5cGU6dG9UeXBlLGZlZVN5bWJvbDpmZWVTeW1ib2wsbG9ja1Rva2Vuczpsb2NrVG9rZW5zLGxvY2tOZnRzOmxvY2tOZnRzLHByb3BlcnRpZXM6cHJvcGVydGllcyxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5LGNhbGxpbmdDb250cmFjdEluZm86Y2FsbGluZ0NvbnRyYWN0SW5mb309cGF5bG9hZCx0eXBlcz1bInVzZXIiLCJjb250cmFjdCJdLGZpbmFsVG9UeXBlPXZvaWQgMD09PXRvVHlwZT8idXNlciI6dG9UeXBlLGZpbmFsRnJvbVR5cGU9dm9pZCAwPT09ZnJvbVR5cGU/InVzZXIiOmZyb21UeXBlLHBhcmFtcz1hd2FpdCBhcGkuZGIuZmluZE9uZSgicGFyYW1zIix7fSkse25mdElzc3VhbmNlRmVlOm5mdElzc3VhbmNlRmVlfT1wYXJhbXM7aWYoYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQoc3ltYm9sJiYic3RyaW5nIj09dHlwZW9mIHN5bWJvbCYmZmluYWxGcm9tVHlwZSYmInN0cmluZyI9PXR5cGVvZiBmaW5hbEZyb21UeXBlJiZ0eXBlcy5pbmNsdWRlcyhmaW5hbEZyb21UeXBlKSYmKGNhbGxpbmdDb250cmFjdEluZm98fHZvaWQgMD09PWNhbGxpbmdDb250cmFjdEluZm8mJiJ1c2VyIj09PWZpbmFsRnJvbVR5cGUpJiZ0byYmInN0cmluZyI9PXR5cGVvZiB0byYmZmluYWxUb1R5cGUmJiJzdHJpbmciPT10eXBlb2YgZmluYWxUb1R5cGUmJnR5cGVzLmluY2x1ZGVzKGZpbmFsVG9UeXBlKSYmZmVlU3ltYm9sJiYic3RyaW5nIj09dHlwZW9mIGZlZVN5bWJvbCYmZmVlU3ltYm9sIGluIG5mdElzc3VhbmNlRmVlJiYodm9pZCAwPT09cHJvcGVydGllc3x8cHJvcGVydGllcyYmIm9iamVjdCI9PXR5cGVvZiBwcm9wZXJ0aWVzKSYmKHZvaWQgMD09PWxvY2tUb2tlbnN8fGxvY2tUb2tlbnMmJiJvYmplY3QiPT10eXBlb2YgbG9ja1Rva2VucykmJih2b2lkIDA9PT1sb2NrTmZ0c3x8bG9ja05mdHMmJiJvYmplY3QiPT10eXBlb2YgbG9ja05mdHMmJkFycmF5LmlzQXJyYXkobG9ja05mdHMpKSwiaW52YWxpZCBwYXJhbXMiKSYmKHZvaWQgMD09PWxvY2tOZnRzfHxpc1ZhbGlkTmZ0SWRBcnJheShsb2NrTmZ0cykpKXtjb25zdCBmaW5hbFRvPSJ1c2VyIj09PWZpbmFsVG9UeXBlP3RvLnRyaW0oKS50b0xvd2VyQ2FzZSgpOnRvLnRyaW0oKSx0b1ZhbGlkPSJ1c2VyIj09PWZpbmFsVG9UeXBlP2lzVmFsaWRIaXZlQWNjb3VudExlbmd0aChmaW5hbFRvKTppc1ZhbGlkQ29udHJhY3RMZW5ndGgoZmluYWxUbyksZmluYWxGcm9tPSJ1c2VyIj09PWZpbmFsRnJvbVR5cGU/YXBpLnNlbmRlcjpjYWxsaW5nQ29udHJhY3RJbmZvLm5hbWUsYmFsYW5jZVRhYmxlTmFtZT0idXNlciI9PT1maW5hbEZyb21UeXBlPyJiYWxhbmNlcyI6ImNvbnRyYWN0c0JhbGFuY2VzIjtpZihhcGkuYXNzZXJ0KHRvVmFsaWQsImludmFsaWQgdG8iKSl7Y29uc3QgbmZ0PWF3YWl0IGFwaS5kYi5maW5kT25lKCJuZnRzIix7c3ltYm9sOnN5bWJvbH0pLGZlZVRva2VuPWF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgidG9rZW5zIiwidG9rZW5zIix7c3ltYm9sOmZlZVN5bWJvbH0pO2lmKGFwaS5hc3NlcnQobnVsbCE9PW5mdCwic3ltYm9sIGRvZXMgbm90IGV4aXN0IikmJmFwaS5hc3NlcnQobnVsbCE9PWZlZVRva2VuLCJmZWUgc3ltYm9sIGRvZXMgbm90IGV4aXN0Iikpe2NvbnN0IGluc3RhbmNlVGFibGVOYW1lPXN5bWJvbCsiaW5zdGFuY2VzIjtpZihhcGkuYXNzZXJ0KCJjb250cmFjdCI9PT1maW5hbEZyb21UeXBlJiZuZnQuYXV0aG9yaXplZElzc3VpbmdDb250cmFjdHMuaW5jbHVkZXMoZmluYWxGcm9tKXx8InVzZXIiPT09ZmluYWxGcm9tVHlwZSYmbmZ0LmF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHMuaW5jbHVkZXMoZmluYWxGcm9tKSwibm90IGFsbG93ZWQgdG8gaXNzdWUgdG9rZW5zIikmJmFwaS5hc3NlcnQoMD09PW5mdC5tYXhTdXBwbHl8fG5mdC5zdXBwbHk8bmZ0Lm1heFN1cHBseSwibWF4IHN1cHBseSBsaW1pdCByZWFjaGVkIikpe2NvbnN0IHByb3BlcnR5Q291bnQ9T2JqZWN0LmtleXMobmZ0LnByb3BlcnRpZXMpLmxlbmd0aCxwcm9wZXJ0eUZlZT1hcGkuQmlnTnVtYmVyKG5mdElzc3VhbmNlRmVlW2ZlZVN5bWJvbF0pLm11bHRpcGxpZWRCeShwcm9wZXJ0eUNvdW50KSxpc3N1YW5jZUZlZT1jYWxjdWxhdGVCYWxhbmNlKG5mdElzc3VhbmNlRmVlW2ZlZVN5bWJvbF0scHJvcGVydHlGZWUsZmVlVG9rZW4ucHJlY2lzaW9uLCEwKSxmZWVUb2tlbkJhbGFuY2U9YXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCJ0b2tlbnMiLGJhbGFuY2VUYWJsZU5hbWUse2FjY291bnQ6ZmluYWxGcm9tLHN5bWJvbDpmZWVTeW1ib2x9KSxhdXRob3JpemVkQ3JlYXRpb249ISFhcGkuQmlnTnVtYmVyKGlzc3VhbmNlRmVlKS5sdGUoMCl8fGZlZVRva2VuQmFsYW5jZSYmYXBpLkJpZ051bWJlcihmZWVUb2tlbkJhbGFuY2UuYmFsYW5jZSkuZ3RlKGlzc3VhbmNlRmVlKTtpZihsb2NrVG9rZW5zKXtjb25zdCBpc0xvY2tWYWxpZD1hd2FpdCBpc1ZhbGlkVG9rZW5CYXNrZXQobG9ja1Rva2VucyxiYWxhbmNlVGFibGVOYW1lLGZpbmFsRnJvbSxmZWVTeW1ib2wsaXNzdWFuY2VGZWUpO2lmKCFhcGkuYXNzZXJ0KGlzTG9ja1ZhbGlkLCJpbnZhbGlkIGJhc2tldCBvZiB0b2tlbnMgdG8gbG9jayAoY2Fubm90IGxvY2sgbW9yZSB0aGFuIDEwIHRva2VuIHR5cGVzOyBpc3N1aW5nIGFjY291bnQgbXVzdCBoYXZlIGVub3VnaCBiYWxhbmNlKSIpKXJldHVybiExfWxldCBmaW5hbFByb3BlcnRpZXM9e307aWYodm9pZCAwIT09cHJvcGVydGllcyl7dHJ5e2lmKCFpc1ZhbGlkRGF0YVByb3BlcnRpZXMoZmluYWxGcm9tLGZpbmFsRnJvbVR5cGUsbmZ0LHByb3BlcnRpZXMpKXJldHVybiExfWNhdGNoKGUpe3JldHVybiExfWZpbmFsUHJvcGVydGllcz1wcm9wZXJ0aWVzfWlmKGFwaS5hc3NlcnQoYXV0aG9yaXplZENyZWF0aW9uLCJ5b3UgbXVzdCBoYXZlIGVub3VnaCB0b2tlbnMgdG8gY292ZXIgdGhlIGlzc3VhbmNlIGZlZXMiKSl7aWYoYXBpLkJpZ051bWJlcihpc3N1YW5jZUZlZSkuZ3QoMCkpaWYoImNvbnRyYWN0Ij09PWZpbmFsRnJvbVR5cGUpe2NvbnN0IHJlcz1hd2FpdCBhcGkudHJhbnNmZXJUb2tlbnNGcm9tQ2FsbGluZ0NvbnRyYWN0KCJudWxsIixmZWVTeW1ib2wsaXNzdWFuY2VGZWUsInVzZXIiKTtpZighYXBpLmFzc2VydChpc1Rva2VuVHJhbnNmZXJWZXJpZmllZChyZXMsZmluYWxGcm9tLCJudWxsIixmZWVTeW1ib2wsaXNzdWFuY2VGZWUsInRyYW5zZmVyRnJvbUNvbnRyYWN0IiksInVuYWJsZSB0byB0cmFuc2ZlciBpc3N1YW5jZSBmZWUiKSlyZXR1cm4hMX1lbHNle2NvbnN0IHJlcz1hd2FpdCBhcGkuZXhlY3V0ZVNtYXJ0Q29udHJhY3QoInRva2VucyIsInRyYW5zZmVyIix7dG86Im51bGwiLHN5bWJvbDpmZWVTeW1ib2wscXVhbnRpdHk6aXNzdWFuY2VGZWUsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX0pO2lmKCFhcGkuYXNzZXJ0KGlzVG9rZW5UcmFuc2ZlclZlcmlmaWVkKHJlcyxmaW5hbEZyb20sIm51bGwiLGZlZVN5bWJvbCxpc3N1YW5jZUZlZSwidHJhbnNmZXIiKSwidW5hYmxlIHRvIHRyYW5zZmVyIGlzc3VhbmNlIGZlZSIpKXJldHVybiExfWNvbnN0IGZpbmFsTG9ja1Rva2Vucz17fTtpZihsb2NrVG9rZW5zKWZvcihjb25zdFtsb2Nrc3ltYm9sLHF1YW50aXR5XW9mIE9iamVjdC5lbnRyaWVzKGxvY2tUb2tlbnMpKWlmKCJjb250cmFjdCI9PT1maW5hbEZyb21UeXBlKXtjb25zdCByZXM9YXdhaXQgYXBpLnRyYW5zZmVyVG9rZW5zRnJvbUNhbGxpbmdDb250cmFjdCgibmZ0Iixsb2Nrc3ltYm9sLHF1YW50aXR5LCJjb250cmFjdCIpO2lzVG9rZW5UcmFuc2ZlclZlcmlmaWVkKHJlcyxmaW5hbEZyb20sIm5mdCIsbG9ja3N5bWJvbCxxdWFudGl0eSwidHJhbnNmZXJGcm9tQ29udHJhY3QiKSYmKGZpbmFsTG9ja1Rva2Vuc1tsb2Nrc3ltYm9sXT1xdWFudGl0eSl9ZWxzZXtjb25zdCByZXM9YXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJ0b2tlbnMiLCJ0cmFuc2ZlclRvQ29udHJhY3QiLHt0bzoibmZ0IixzeW1ib2w6bG9ja3N5bWJvbCxxdWFudGl0eTpxdWFudGl0eSxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5fSk7aXNUb2tlblRyYW5zZmVyVmVyaWZpZWQocmVzLGZpbmFsRnJvbSwibmZ0Iixsb2Nrc3ltYm9sLHF1YW50aXR5LCJ0cmFuc2ZlclRvQ29udHJhY3QiKSYmKGZpbmFsTG9ja1Rva2Vuc1tsb2Nrc3ltYm9sXT1xdWFudGl0eSl9bGV0IGZpbmFsTG9ja05mdHM9W107aWYobG9ja05mdHMmJmxvY2tOZnRzLmxlbmd0aD4wKXtmaW5hbExvY2tOZnRzPShhd2FpdCB0cmFuc2ZlckFuZFZlcmlmeU5mdHMoZmluYWxGcm9tLGZpbmFsRnJvbVR5cGUsIm5mdCIsImNvbnRyYWN0Iixsb2NrTmZ0cyxpc1NpZ25lZFdpdGhBY3RpdmVLZXksY2FsbGluZ0NvbnRyYWN0SW5mbykpLnN1Y2Nlc3N9Y29uc3Qgb3duZWRCeT0idXNlciI9PT1maW5hbFRvVHlwZT8idSI6ImMiO2xldCBuZXdJbnN0YW5jZT17fTtuZXdJbnN0YW5jZT1maW5hbExvY2tOZnRzLmxlbmd0aD4wP3thY2NvdW50OmZpbmFsVG8sb3duZWRCeTpvd25lZEJ5LGxvY2tlZFRva2VuczpmaW5hbExvY2tUb2tlbnMsbG9ja2VkTmZ0czpmaW5hbExvY2tOZnRzLHByb3BlcnRpZXM6ZmluYWxQcm9wZXJ0aWVzfTp7YWNjb3VudDpmaW5hbFRvLG93bmVkQnk6b3duZWRCeSxsb2NrZWRUb2tlbnM6ZmluYWxMb2NrVG9rZW5zLHByb3BlcnRpZXM6ZmluYWxQcm9wZXJ0aWVzfTtjb25zdCByZXN1bHQ9YXdhaXQgYXBpLmRiLmluc2VydChpbnN0YW5jZVRhYmxlTmFtZSxuZXdJbnN0YW5jZSk7cmV0dXJuIG5mdC5zdXBwbHkrPTEsIm51bGwiPT09ZmluYWxUbyYmImNvbnRyYWN0IiE9PWZpbmFsVG9UeXBlfHwobmZ0LmNpcmN1bGF0aW5nU3VwcGx5Kz0xKSxhd2FpdCBhcGkuZGIudXBkYXRlKCJuZnRzIixuZnQpLGFwaS5lbWl0KCJpc3N1ZSIse2Zyb206ZmluYWxGcm9tLGZyb21UeXBlOmZpbmFsRnJvbVR5cGUsdG86ZmluYWxUbyx0b1R5cGU6ZmluYWxUb1R5cGUsc3ltYm9sOnN5bWJvbCxsb2NrZWRUb2tlbnM6ZmluYWxMb2NrVG9rZW5zLGxvY2tlZE5mdHM6ZmluYWxMb2NrTmZ0cyxwcm9wZXJ0aWVzOmZpbmFsUHJvcGVydGllcyxpZDpyZXN1bHQuX2lkfSksITB9fX19fXJldHVybiExfSxhY3Rpb25zLmlzc3VlTXVsdGlwbGU9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e2luc3RhbmNlczppbnN0YW5jZXMsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleSxjYWxsaW5nQ29udHJhY3RJbmZvOmNhbGxpbmdDb250cmFjdEluZm99PXBheWxvYWQ7aWYoYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleSwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQoaW5zdGFuY2VzJiYib2JqZWN0Ij09dHlwZW9mIGluc3RhbmNlcyYmQXJyYXkuaXNBcnJheShpbnN0YW5jZXMpLCJpbnZhbGlkIHBhcmFtcyIpJiZhcGkuYXNzZXJ0KGluc3RhbmNlcy5sZW5ndGg8PTEwLCJjYW5ub3QgaXNzdWUgbW9yZSB0aGFuIDEwIE5GVCBpbnN0YW5jZXMgYXQgb25jZSIpKXtsZXQgY29udGFpbmVyQ291bnQ9MDtpZihpbnN0YW5jZXMuZm9yRWFjaChpbnN0YW5jZT0+e2luc3RhbmNlLmxvY2tOZnRzJiYoY29udGFpbmVyQ291bnQrPTEpfSksYXBpLmFzc2VydChjb250YWluZXJDb3VudDw9MSwiY2Fubm90IGlzc3VlIG1vcmUgdGhhbiAxIGNvbnRhaW5lciBORlQgaW5zdGFuY2VzIGF0IG9uY2UiKSYmYXBpLmFzc2VydCgwPT09Y29udGFpbmVyQ291bnR8fGNvbnRhaW5lckNvdW50PT09aW5zdGFuY2VzLmxlbmd0aCwiY2Fubm90IGlzc3VlIGEgbWl4IG9mIGNvbnRhaW5lciBhbmQgbm9uLWNvbnRhaW5lciBORlQgaW5zdGFuY2VzIHNpbXVsdGFuZW91c2x5IikpZm9yKGxldCBpPTA7aTxpbnN0YW5jZXMubGVuZ3RoO2krPTEpe2NvbnN0e3N5bWJvbDpzeW1ib2wsZnJvbVR5cGU6ZnJvbVR5cGUsdG86dG8sdG9UeXBlOnRvVHlwZSxmZWVTeW1ib2w6ZmVlU3ltYm9sLGxvY2tUb2tlbnM6bG9ja1Rva2Vucyxsb2NrTmZ0czpsb2NrTmZ0cyxwcm9wZXJ0aWVzOnByb3BlcnRpZXN9PWluc3RhbmNlc1tpXTthd2FpdCBhY3Rpb25zLmlzc3VlKHtzeW1ib2w6c3ltYm9sLGZyb21UeXBlOmZyb21UeXBlLHRvOnRvLHRvVHlwZTp0b1R5cGUsZmVlU3ltYm9sOmZlZVN5bWJvbCxsb2NrVG9rZW5zOmxvY2tUb2tlbnMsbG9ja05mdHM6bG9ja05mdHMscHJvcGVydGllczpwcm9wZXJ0aWVzLGlzU2lnbmVkV2l0aEFjdGl2ZUtleTppc1NpZ25lZFdpdGhBY3RpdmVLZXksY2FsbGluZ0NvbnRyYWN0SW5mbzpjYWxsaW5nQ29udHJhY3RJbmZvfSl9fX07"}}}

NFT Smart Contract | Ecency