tx · D18xoxbLqTha7wG2fC3Dy8j8638yL4Wd2HvFYLpsBrFZ

3NBf9paePfCRTe5teHMeQYwBTeXb8w5X8XU:  -0.01800000 Waves

2022.10.26 11:02 [2289127] smart account 3NBf9paePfCRTe5teHMeQYwBTeXb8w5X8XU > SELF 0.00000000 Waves

{ "type": 13, "id": "D18xoxbLqTha7wG2fC3Dy8j8638yL4Wd2HvFYLpsBrFZ", "fee": 1800000, "feeAssetId": null, "timestamp": 1666771373304, "version": 2, "chainId": 84, "sender": "3NBf9paePfCRTe5teHMeQYwBTeXb8w5X8XU", "senderPublicKey": "DCKh8MYoZuPLjqsqXu8UuTXcxwZPKkDTCdAjpLiRXffa", "proofs": [ "FaqHMK9YHNrzE6MkpobNAm4KjqwnFSbwZupT1SyBNwHA2r1afAuTGH7FyfC67kcVSZppEaNhCeTvtCvLQrKRTYP" ], "script": "base64:BgJkCAISBAoCCAgSCAoGCAgICAgIEgkKBwgICAgICAgSAwoBCBIECgIICBIGCgQICAgIEggKBggICAEBARIJCgcICAgIAQEBEgUKAwgBBBIECgIICBIFCgMICAgSBAoCCAgSAwoBCDMAB1ZFUlNJT04CBTEuMC4wAQ5nZXRTdHJpbmdCeUtleQEDa2V5CQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFA2tleQIAAAh1c2VyRGFwcAkBBXZhbHVlAQkApggBCQEOZ2V0U3RyaW5nQnlLZXkBAg9jb25mX3VzZXJzX2RhcHAAC2ZlZVJlY2VpdmVyCQEOZ2V0U3RyaW5nQnlLZXkBAhFjb25mX2ZlZV9yZWNlaXZlcgALc2lnbkFzc2V0SWQJANkEAQkBDmdldFN0cmluZ0J5S2V5AQIYY29uZl9hY2NlcHRlZF9hc3NldF9TSUdOAAVjaHJpcwkBDmdldFN0cmluZ0J5S2V5AQIMY29uZl9hZG1pbl8xAQ9nZXRJbnRlZ2VyQnlLZXkBA2tleQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQNrZXkAAAEPZ2V0Qm9vbGVhbkJ5S2V5AQNrZXkJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwUDa2V5BwALZGFwcFJ1bm5pbmcJAQt2YWx1ZU9yRWxzZQIJAJsIAgUIdXNlckRhcHACFGNvbmZfZGFwcF9pc19ydW5uaW5nBgAObWFpbnRlbmFuY2VNU0cJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUIdXNlckRhcHACFGNvbmZfbWFpbnRlbmFuY2VfbXNnAgAADXVzZXJTdXNwZW5kZWQCCVNVU1BFTkRFRAAQdXNlclVucmVnaXN0ZXJlZAIMVU5SRUdJU1RFUkVEAQt2YWxpZGF0ZUNJRAEDY2lkAwkBCGNvbnRhaW5zAgUDY2lkAgEvAwMJAGYCAEwJALECAQUDY2lkCQAAAgkAsQIBCQCRAwIJALUJAgUDY2lkAgEvAAAAOwcJAGYCABAJALECAQkAkQMCCQC1CQIFA2NpZAIBLwABBwcAB3NpZ25DdXQAAgENa2V5VXNlclN0YXR1cwEGY2FsbGVyCQCsAgICDHVzZXJfc3RhdHVzXwUGY2FsbGVyARZrZXlFdmVudE93bmVyQnlFdmVudElkAQdldmVudElkCQCsAgICEGdldF9ldmVudF9vd25lcl8FB2V2ZW50SWQBEWtleUV2ZW50QWRkZWREYXRlAgZjYWxsZXIHZXZlbnRJZAkArAICCQCsAgIJAKwCAgIQZXZlbnRfYWRkZWREYXRlXwUHZXZlbnRJZAIBXwUGY2FsbGVyAQxrZXlFdmVudERhdGUCBmNhbGxlcgdldmVudElkCQCsAgIJAKwCAgkArAICAgtldmVudF9kYXRlXwUHZXZlbnRJZAIBXwUGY2FsbGVyAQxrZXlFdmVudE5hbWUCBmNhbGxlcgdldmVudElkCQCsAgIJAKwCAgkArAICAgtldmVudF9uYW1lXwUHZXZlbnRJZAIBXwUGY2FsbGVyAQxrZXlFdmVudERlc2MCBmNhbGxlcgdldmVudElkCQCsAgIJAKwCAgkArAICAgtldmVudF9kZXNjXwUHZXZlbnRJZAIBXwUGY2FsbGVyARJrZXlFdmVudERpc3BsYXlDaWQCBmNhbGxlcgdldmVudElkCQCsAgIJAKwCAgkArAICAhFldmVudF9kaXNwbGF5Q2lkXwUHZXZlbnRJZAIBXwUGY2FsbGVyAQxrZXlFdmVudFRhZ3MCBmNhbGxlcgdldmVudElkCQCsAgIJAKwCAgkArAICAgtldmVudF90YWdzXwUHZXZlbnRJZAIBXwUGY2FsbGVyAQxrZXlFdmVudEZsYWcCBmNhbGxlcgdldmVudElkCQCsAgIJAKwCAgkArAICAgtldmVudF9mbGFnXwUHZXZlbnRJZAIBXwUGY2FsbGVyAQxrZXlFdmVudE5vdGUCBmNhbGxlcgdldmVudElkCQCsAgIJAKwCAgkArAICAgtldmVudF9ub3RlXwUHZXZlbnRJZAIBXwUGY2FsbGVyAQ9rZXlFdmVudENyYXdsZXICBmNhbGxlcgdldmVudElkCQCsAgIJAKwCAgkArAICAhFldmVudF9jcmF3bGVyQ2lkXwUHZXZlbnRJZAIBXwUGY2FsbGVyARhrZXlFdmVudFRvdGFsVGlja2V0VHlwZXMCBmNhbGxlcgdldmVudElkCQCsAgIJAKwCAgkArAICAhdldmVudF90b3RhbFRpY2tldFR5cGVzXwUHZXZlbnRJZAIBXwUGY2FsbGVyARprZXlFdmVudFRvdGFsVGlja2V0c0lzc3VlZAIGY2FsbGVyB2V2ZW50SWQJAKwCAgkArAICCQCsAgICEmV2ZW50X3RvdGFsSXNzdWVkXwUHZXZlbnRJZAIBXwUGY2FsbGVyARBrZXlFdmVudENhbmNlbGVkAgZjYWxsZXIHZXZlbnRJZAkArAICCQCsAgIJAKwCAgIPZXZlbnRfY2FuY2VsZWRfBQdldmVudElkAgFfBQZjYWxsZXIBFmtleUV2ZW50Q2FuY2VsZWRSZWFzb24CBmNhbGxlcgdldmVudElkCQCsAgIJAKwCAgkArAICAhVldmVudF9jYW5jZWxlZFJlYXNvbl8FB2V2ZW50SWQCAV8FBmNhbGxlcgENa2V5VGlja2V0TmFtZQMGY2FsbGVyB2V2ZW50SWQIdGlja2V0SWQJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgx0aWNrZXRfbmFtZV8FB2V2ZW50SWQCAV8FBmNhbGxlcgIBXwUIdGlja2V0SWQBDWtleVRpY2tldERlc2MDBmNhbGxlcgdldmVudElkCHRpY2tldElkCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIMdGlja2V0X2Rlc2NfBQdldmVudElkAgFfBQZjYWxsZXICAV8FCHRpY2tldElkAQ5rZXlUaWNrZXRQcmljZQMGY2FsbGVyB2V2ZW50SWQIdGlja2V0SWQJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg10aWNrZXRfcHJpY2VfBQdldmVudElkAgFfBQZjYWxsZXICAV8FCHRpY2tldElkAQ1rZXlUaWNrZXREYXRlAwZjYWxsZXIHZXZlbnRJZAh0aWNrZXRJZAkArAICCQCsAgIJAKwCAgkArAICCQCsAgICDHRpY2tldF9kYXRlXwUHZXZlbnRJZAIBXwUGY2FsbGVyAgFfBQh0aWNrZXRJZAEVa2V5VGlja2V0TWF4QXZhaWxhYmxlAwZjYWxsZXIHZXZlbnRJZAh0aWNrZXRJZAkArAICCQCsAgIJAKwCAgkArAICCQCsAgICFHRpY2tldF9tYXhBdmFpbGFibGVfBQdldmVudElkAgFfBQZjYWxsZXICAV8FCHRpY2tldElkAQ1rZXlUaWNrZXRTb2xkAwZjYWxsZXIHZXZlbnRJZAh0aWNrZXRJZAkArAICCQCsAgIJAKwCAgkArAICCQCsAgICDHRpY2tldF9zb2xkXwUHZXZlbnRJZAIBXwUGY2FsbGVyAgFfBQh0aWNrZXRJZAEPa2V5VGlja2V0T25TYWxlAwZjYWxsZXIHZXZlbnRJZAh0aWNrZXRJZAkArAICCQCsAgIJAKwCAgkArAICCQCsAgICDnRpY2tldF9vblNhbGVfBQdldmVudElkAgFfBQZjYWxsZXICAV8FCHRpY2tldElkARNrZXlUaWNrZXRBbW91bnRVc2VkAwZjYWxsZXIHZXZlbnRJZAh0aWNrZXRJZAkArAICCQCsAgIJAKwCAgkArAICCQCsAgICEnRpY2tldF9hbW91bnRVc2VkXwUHZXZlbnRJZAIBXwUGY2FsbGVyAgFfBQh0aWNrZXRJZAEPa2V5VGlja2V0TWF4VXNlAwZjYWxsZXIHZXZlbnRJZAh0aWNrZXRJZAkArAICCQCsAgIJAKwCAgkArAICCQCsAgICDnRpY2tldF9tYXhVc2VfBQdldmVudElkAgFfBQZjYWxsZXICAV8FCHRpY2tldElkARRrZXlUaWNrZXRUb3RhbElzc3VlZAMGY2FsbGVyB2V2ZW50SWQIdGlja2V0SWQJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhN0aWNrZXRfdG90YWxJc3N1ZWRfBQdldmVudElkAgFfBQZjYWxsZXICAV8FCHRpY2tldElkAQ52YWxpZGF0ZVN0cmluZwIDc3RyA21heAMJAAACCQCxAgEFA3N0cgAACQACAQIYRmllbGQgY2Fubm90IGJlIGlzIGVtcHR5AwkAZgIJALECAQUDc3RyBQNtYXgJAAIBCQCsAgIFA3N0cgIMIGlzIHRvbyBsb25nBgELdmFsaWRhdGVJbnQBA251bQkAZgIAAAUDbnVtARZnZXRFdmVudE93bmVyQnlFdmVudElkAQdldmVudElkCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMJARZrZXlFdmVudE93bmVyQnlFdmVudElkAQUHZXZlbnRJZAIAAQx2YWxpZGF0ZVVzZXIBBmNhbGxlcgQKdXNlclN0YXR1cwkBC3ZhbHVlT3JFbHNlAgkAnQgCBQh1c2VyRGFwcAkBDWtleVVzZXJTdGF0dXMBBQZjYWxsZXIFEHVzZXJVbnJlZ2lzdGVyZWQDCQAAAgUKdXNlclN0YXR1cwUQdXNlclVucmVnaXN0ZXJlZAIuUmVnaXN0ZXIgdGhpcyBhY2NvdW50IGZpcnN0IHdpdGggIkFjY291bnQiIHRhYgMJAAACBQp1c2VyU3RhdHVzBQ11c2VyU3VzcGVuZGVkAhFBY2NvdW50IHN1c3BlbmRlZAIAARF2YWxpZGF0ZUV2ZW50RGF0YQYGY2FsbGVyCmNpZERpc3BsYXkEbmFtZQtkZXNjcmlwdGlvbgR0YWdzBGRhdGUECWNoZWNrVXNlcgkBDHZhbGlkYXRlVXNlcgEFBmNhbGxlcgMJAQIhPQIFCWNoZWNrVXNlcgIACQACAQUJY2hlY2tVc2VyAwkAAAIJALECAQUKY2lkRGlzcGxheQAACQACAQIbRGlzcGxheSBDSUQgY2Fubm90IGJlIGVtcHR5AwkBASEBCQELdmFsaWRhdGVDSUQBBQpjaWREaXNwbGF5CQACAQIQUHJvYmxlbSB3aXRoIENJRAMJAQEhAQkBDnZhbGlkYXRlU3RyaW5nAgUEbmFtZQDIAQkAAgECEjEwMCBDaGFyLiBtYXggbmFtZQMJAQEhAQkBDnZhbGlkYXRlU3RyaW5nAgULZGVzY3JpcHRpb24A6AcJAAIBAhoxMDAwIENoYXIuIG1heCBkZXNjcmlwdGlvbgMJAQEhAQkBDnZhbGlkYXRlU3RyaW5nAgUEZGF0ZQDoBwkAAgECEzEwMDAgQ2hhci4gbWF4IGRhdGUDCQBmAgkAkAMBCQC1CQIFBHRhZ3MCASwABQkAAgECCzUgdGFncyBtYXguAgABEnZhbGlkYXRlVGlja2V0RGF0YQcHZXZlbnRJZAZjYWxsZXIEbmFtZQtkZXNjcmlwdGlvbgVwcmljZQxtYXhBdmFpbGFibGUGbWF4VXNlBAljaGVja1VzZXIJAQx2YWxpZGF0ZVVzZXIBBQZjYWxsZXIDCQECIT0CBQljaGVja1VzZXICAAkAAgEFCWNoZWNrVXNlcgMJAQEhAQkBDnZhbGlkYXRlU3RyaW5nAgUEbmFtZQDIAQkAAgECEjEwMCBDaGFyLiBtYXggbmFtZQMJAQEhAQkBDnZhbGlkYXRlU3RyaW5nAgULZGVzY3JpcHRpb24A6AcJAAIBAhoxMDAwIENoYXIuIG1heCBkZXNjcmlwdGlvbgMDAwkBC3ZhbGlkYXRlSW50AQUFcHJpY2UGCQELdmFsaWRhdGVJbnQBBQZtYXhVc2UGCQELdmFsaWRhdGVJbnQBBQxtYXhBdmFpbGFibGUJAAIBAhRQb3NpdGl2ZSBhbW91bnQgb25seQMJAQEhAQkBDnZhbGlkYXRlU3RyaW5nAgULZGVzY3JpcHRpb24A6AcJAAIBAhoxMDAwIENoYXIuIG1heCBkZXNjcmlwdGlvbgIAAQxpZENhbGxlckRhdGUBAWkDCQEBIQEFC2RhcHBSdW5uaW5nCQACAQUObWFpbnRlbmFuY2VNU0cJAJUKAwkA2AQBCAUBaQ10cmFuc2FjdGlvbklkCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMIBQlsYXN0QmxvY2sJdGltZXN0YW1wAQlpc1BheW1lbnQBAWkDCQAAAgkAkAMBCAUBaQhwYXltZW50cwAACQACAQITTm8gcGF5bWVudCBhdHRhY2hlZAQHcGF5bWVudAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAZhbW91bnQJAQV2YWx1ZQEIBQdwYXltZW50BmFtb3VudAkAlAoCBQdwYXltZW50BQZhbW91bnQBFHZhbGlkYXRlUHJpY2VBc3NldElkAwFpDHByaWNlQXNzZXRJZAxhcnR3b3JrUHJpY2UECyR0MDY0ODM2NTE5CQEJaXNQYXltZW50AQUBaQQHcGF5bWVudAgFCyR0MDY0ODM2NTE5Al8xBAZhbW91bnQIBQskdDA2NDgzNjUxOQJfMgMJAQEhAQkBCWlzRGVmaW5lZAEIBQdwYXltZW50B2Fzc2V0SWQJAAIBAhRXcm9uZyBhc3NldCBhdHRhY2hlZAQHYXNzZXRJZAMDCQBmAgkAsQIBBQxwcmljZUFzc2V0SWQAAAkAAAIJANgEAQkBBXZhbHVlAQgFB3BheW1lbnQHYXNzZXRJZAUMcHJpY2VBc3NldElkBwgFB3BheW1lbnQHYXNzZXRJZAkAAgECFFdyb25nIGFzc2V0IGF0dGFjaGVkAwkBAiE9AgUMYXJ0d29ya1ByaWNlBQZhbW91bnQJAAIBAhpQYXltZW50IGFtb3VudCBkb24ndCBtYXRjaAkAlAoCBQZhbW91bnQFB2Fzc2V0SWQBDGlzRXZlbnRPd25lcgIHZXZlbnRJZAZjYWxsZXIECmV2ZW50T3duZXIJARZnZXRFdmVudE93bmVyQnlFdmVudElkAQUHZXZlbnRJZAMJAAACBQpldmVudE93bmVyAgAJAAIBAg9FdmVudCBub3QgZm91bmQJAAACBQpldmVudE93bmVyBQZjYWxsZXIBC3RpY2tldEV4aXN0AwZjYWxsZXIHZXZlbnRJZAh0aWNrZXRJZAQGdGlja2V0CQEOZ2V0U3RyaW5nQnlLZXkBCQENa2V5VGlja2V0TmFtZQMFBmNhbGxlcgUHZXZlbnRJZAUIdGlja2V0SWQJAQIhPQIJALECAQUGdGlja2V0AAABD2V2ZW50SXNDYW5jZWxlZAIGaXNzdWVyB2V2ZW50SWQJAQ9nZXRCb29sZWFuQnlLZXkBCQEQa2V5RXZlbnRDYW5jZWxlZAIFBmlzc3VlcgUHZXZlbnRJZA0GaW52b2tlAQdzZXRDb25mAgNrZXkDdmFsBAZjYWxsZXIJAKUIAQgFBmludm9rZQZjYWxsZXIDCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQVjaHJpcwkAzAgCCQClCAEFBHRoaXMFA25pbAUGY2FsbGVyAwkBCGNvbnRhaW5zAgUDa2V5AgVjb25mXwkAzAgCCQELU3RyaW5nRW50cnkCBQNrZXkFA3ZhbAUDbmlsCQACAQIgRW50cmllcyBzdGFydGluZyB3aXRoIGNvbmZfIG9ubHkJAAIBAiJZb3UgYXJlIG5vdCBhbGxvd2VkIHRvIGNoYW5nZSB0aGlzAWkBCGFkZEV2ZW50BgRuYW1lC2Rlc2NyaXB0aW9uBHRhZ3MKY2lkRGlzcGxheQdjcmF3bGVyBGRhdGUECyR0MDc4NDg3ODk3CQEMaWRDYWxsZXJEYXRlAQUBaQQHZXZlbnRJZAgFCyR0MDc4NDg3ODk3Al8xBAZjYWxsZXIIBQskdDA3ODQ4Nzg5NwJfMgQJYWRkZWREYXRlCAULJHQwNzg0ODc4OTcCXzMECWNoZWNrVXNlcgkBDHZhbGlkYXRlVXNlcgEFBmNhbGxlcgMJAQIhPQIFCWNoZWNrVXNlcgIACQACAQUJY2hlY2tVc2VyBA12YWxpZGF0ZUV2ZW50CQERdmFsaWRhdGVFdmVudERhdGEGBQZjYWxsZXIFCmNpZERpc3BsYXkFBG5hbWUFC2Rlc2NyaXB0aW9uBQR0YWdzBQRkYXRlAwkBAiE9AgUNdmFsaWRhdGVFdmVudAIACQACAQIVU29tZXRoaW5nIHdlbnQgd3JvbmchCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQERa2V5RXZlbnRBZGRlZERhdGUCBQZjYWxsZXIFB2V2ZW50SWQFCWFkZGVkRGF0ZQkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5RXZlbnREYXRlAgUGY2FsbGVyBQdldmVudElkBQRkYXRlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxrZXlFdmVudE5hbWUCBQZjYWxsZXIFB2V2ZW50SWQFBG5hbWUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleUV2ZW50RGVzYwIFBmNhbGxlcgUHZXZlbnRJZAULZGVzY3JpcHRpb24JAMwIAgkBC1N0cmluZ0VudHJ5AgkBEmtleUV2ZW50RGlzcGxheUNpZAIFBmNhbGxlcgUHZXZlbnRJZAUKY2lkRGlzcGxheQkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5RXZlbnRUYWdzAgUGY2FsbGVyBQdldmVudElkBQR0YWdzCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ9rZXlFdmVudENyYXdsZXICBQZjYWxsZXIFB2V2ZW50SWQFB2NyYXdsZXIJAMwIAgkBDEludGVnZXJFbnRyeQIJARprZXlFdmVudFRvdGFsVGlja2V0c0lzc3VlZAIFBmNhbGxlcgUHZXZlbnRJZAAACQDMCAIJAQxCb29sZWFuRW50cnkCCQEQa2V5RXZlbnRDYW5jZWxlZAIFBmNhbGxlcgUHZXZlbnRJZAcJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFmtleUV2ZW50T3duZXJCeUV2ZW50SWQBBQdldmVudElkBQZjYWxsZXIFA25pbAFpAQllZGl0RXZlbnQHB2V2ZW50SWQEbmFtZQtkZXNjcmlwdGlvbgR0YWdzCmNpZERpc3BsYXkHY3Jhd2xlcgRkYXRlAwkBASEBBQtkYXBwUnVubmluZwkAAgEFDm1haW50ZW5hbmNlTVNHBAZjYWxsZXIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwQJY2hlY2tVc2VyCQEMdmFsaWRhdGVVc2VyAQUGY2FsbGVyAwkBAiE9AgUJY2hlY2tVc2VyAgAJAAIBBQljaGVja1VzZXIEDXZhbGlkYXRlRXZlbnQJARF2YWxpZGF0ZUV2ZW50RGF0YQYFBmNhbGxlcgUKY2lkRGlzcGxheQUEbmFtZQULZGVzY3JpcHRpb24FBHRhZ3MFBGRhdGUDCQECIT0CBQ12YWxpZGF0ZUV2ZW50AgAJAAIBAhVTb21ldGhpbmcgd2VudCB3cm9uZyEECmVudHJ5RXhpc3QJAQ5nZXRTdHJpbmdCeUtleQEJAQxrZXlFdmVudE5hbWUCBQZjYWxsZXIFB2V2ZW50SWQDCQAAAgUKZW50cnlFeGlzdAIACQACAQIPRW50cnkgbm90IGZvdW5kBARmbGFnCQEOZ2V0U3RyaW5nQnlLZXkBCQEMa2V5RXZlbnRGbGFnAgUGY2FsbGVyBQdldmVudElkAwkAAAIFBGZsYWcCB0lMTEVHQUwJAAIBAhtDYW5ub3QgdXBkYXRlIElMTEVHQUwgRXZlbnQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleUV2ZW50TmFtZQIFBmNhbGxlcgUHZXZlbnRJZAUEbmFtZQkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5RXZlbnREYXRlAgUGY2FsbGVyBQdldmVudElkBQRkYXRlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxrZXlFdmVudERlc2MCBQZjYWxsZXIFB2V2ZW50SWQFC2Rlc2NyaXB0aW9uCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxrZXlFdmVudFRhZ3MCBQZjYWxsZXIFB2V2ZW50SWQFBHRhZ3MJAMwIAgkBC1N0cmluZ0VudHJ5AgkBD2tleUV2ZW50Q3Jhd2xlcgIFBmNhbGxlcgUHZXZlbnRJZAUHY3Jhd2xlcgUDbmlsAWkBC2RlbGV0ZUV2ZW50AQdldmVudElkBA0kdDAxMDExNzEwMTYxCQEMaWRDYWxsZXJEYXRlAQUBaQQCaWQIBQ0kdDAxMDExNzEwMTYxAl8xBAZjYWxsZXIIBQ0kdDAxMDExNzEwMTYxAl8yBAlhZGRlZERhdGUIBQ0kdDAxMDExNzEwMTYxAl8zBAljaGVja1VzZXIJAQx2YWxpZGF0ZVVzZXIBBQZjYWxsZXIDCQECIT0CBQljaGVja1VzZXICAAkAAgEFCWNoZWNrVXNlcgMJAQEhAQkBDGlzRXZlbnRPd25lcgIFB2V2ZW50SWQFBmNhbGxlcgkAAgECI1lvdSBhcmUgbm90IHRoZSBvd25lciBvZiB0aGlzIGV2ZW50BA1ldmVudFRvdGFsTkZUCQEPZ2V0SW50ZWdlckJ5S2V5AQkBGmtleUV2ZW50VG90YWxUaWNrZXRzSXNzdWVkAgUGY2FsbGVyBQdldmVudElkAwkBAiE9AgUNZXZlbnRUb3RhbE5GVAAACQACAQItQ2Fubm90IGRlbGV0ZSBldmVudCB3aXRoIGFscmVhZHkgc29sZCB0aWNrZXRzBBd0b3RhbFRpY2tldFR5cGVGb3JFdmVudAkBD2dldEludGVnZXJCeUtleQEJARhrZXlFdmVudFRvdGFsVGlja2V0VHlwZXMCBQZjYWxsZXIFB2V2ZW50SWQDCQBmAgUXdG90YWxUaWNrZXRUeXBlRm9yRXZlbnQAAAkAAgECGERlbGV0ZSBhbGwgdGlja2V0cyBmaXJzdAkAzAgCCQELRGVsZXRlRW50cnkBCQERa2V5RXZlbnRBZGRlZERhdGUCBQZjYWxsZXIFB2V2ZW50SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDGtleUV2ZW50RGF0ZQIFBmNhbGxlcgUHZXZlbnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEMa2V5RXZlbnROYW1lAgUGY2FsbGVyBQdldmVudElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQxrZXlFdmVudERlc2MCBQZjYWxsZXIFB2V2ZW50SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBEmtleUV2ZW50RGlzcGxheUNpZAIFBmNhbGxlcgUHZXZlbnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEMa2V5RXZlbnRUYWdzAgUGY2FsbGVyBQdldmVudElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ9rZXlFdmVudENyYXdsZXICBQZjYWxsZXIFB2V2ZW50SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBGmtleUV2ZW50VG90YWxUaWNrZXRzSXNzdWVkAgUGY2FsbGVyBQdldmVudElkCQDMCAIJAQtEZWxldGVFbnRyeQEJARBrZXlFdmVudENhbmNlbGVkAgUGY2FsbGVyBQdldmVudElkCQDMCAIJAQtEZWxldGVFbnRyeQEJARZrZXlFdmVudE93bmVyQnlFdmVudElkAQUHZXZlbnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEYa2V5RXZlbnRUb3RhbFRpY2tldFR5cGVzAgUGY2FsbGVyBQdldmVudElkBQNuaWwBaQELY2FuY2VsRXZlbnQCB2V2ZW50SWQGcmVhc29uBA0kdDAxMTUwMjExNTQ2CQEMaWRDYWxsZXJEYXRlAQUBaQQCaWQIBQ0kdDAxMTUwMjExNTQ2Al8xBAZjYWxsZXIIBQ0kdDAxMTUwMjExNTQ2Al8yBAlhZGRlZERhdGUIBQ0kdDAxMTUwMjExNTQ2Al8zBAljaGVja1VzZXIJAQx2YWxpZGF0ZVVzZXIBBQZjYWxsZXIDCQECIT0CBQljaGVja1VzZXICAAkAAgEFCWNoZWNrVXNlcgMJAQEhAQkBDGlzRXZlbnRPd25lcgIFB2V2ZW50SWQFBmNhbGxlcgkAAgECI1lvdSBhcmUgbm90IHRoZSBvd25lciBvZiB0aGlzIGV2ZW50CQDMCAIJAQxCb29sZWFuRW50cnkCCQEQa2V5RXZlbnRDYW5jZWxlZAIFBmNhbGxlcgUHZXZlbnRJZAYJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFmtleUV2ZW50Q2FuY2VsZWRSZWFzb24CBQZjYWxsZXIFB2V2ZW50SWQFBnJlYXNvbgUDbmlsAWkBCWZsYWdFdmVudAQHZXZlbnRJZARhZGRyBGZsYWcEbm90ZQQNJHQwMTE5ODExMjAxNAkBDGlkQ2FsbGVyRGF0ZQEFAWkEAmlkCAUNJHQwMTE5ODExMjAxNAJfMQQGY2FsbGVyCAUNJHQwMTE5ODExMjAxNAJfMgMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFBWNocmlzCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQZjYWxsZXIDCQEPY29udGFpbnNFbGVtZW50AgkAzAgCAgAJAMwIAgIPQ0hBTkdFX1JFUVVJUkVECQDMCAICB0ZMQUdHRUQJAMwIAgIHSUxMRUdBTAUDbmlsBQRmbGFnCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxrZXlFdmVudEZsYWcCBQRhZGRyBQdldmVudElkBQRmbGFnCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxrZXlFdmVudE5vdGUCBQRhZGRyBQdldmVudElkBQRub3RlBQNuaWwJAAIBCQCsAgICDlVua25vdyBzdGF0dXMgBQRmbGFnCQACAQITWW91IGFyZSBub3QgYWxsb3dlZAFpAQlhZGRUaWNrZXQGB2V2ZW50SWQEbmFtZQtkZXNjcmlwdGlvbgVwcmljZQxtYXhBdmFpbGFibGUGTWF4VXNlBA0kdDAxMjUxNTEyNTU1CQEMaWRDYWxsZXJEYXRlAQUBaQQCaWQIBQ0kdDAxMjUxNTEyNTU1Al8xBAZjYWxsZXIIBQ0kdDAxMjUxNTEyNTU1Al8yBARkYXRlCAUNJHQwMTI1MTUxMjU1NQJfMwQJY2hlY2tVc2VyCQEMdmFsaWRhdGVVc2VyAQUGY2FsbGVyAwkBAiE9AgUJY2hlY2tVc2VyAgAJAAIBBQljaGVja1VzZXIDCQEPZXZlbnRJc0NhbmNlbGVkAgUGY2FsbGVyBQdldmVudElkCQACAQIYRXZlbnQgaGF2ZSBiZWVuIGNhbmNlbGVkAwkBASEBCQEMaXNFdmVudE93bmVyAgUHZXZlbnRJZAUGY2FsbGVyCQACAQIjWW91IGFyZSBub3QgdGhlIG93bmVyIG9mIHRoaXMgZXZlbnQEDnZhbGlkYXRlVGlja2V0CQESdmFsaWRhdGVUaWNrZXREYXRhBwUHZXZlbnRJZAUGY2FsbGVyBQRuYW1lBQtkZXNjcmlwdGlvbgUFcHJpY2UFDG1heEF2YWlsYWJsZQUGTWF4VXNlAwkBAiE9AgUOdmFsaWRhdGVUaWNrZXQCAAkAAgECFVNvbWV0aGluZyB3ZW50IHdyb25nIQQXdG90YWxUaWNrZXRUeXBlRm9yRXZlbnQJAQ9nZXRJbnRlZ2VyQnlLZXkBCQEYa2V5RXZlbnRUb3RhbFRpY2tldFR5cGVzAgUGY2FsbGVyBQdldmVudElkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ1rZXlUaWNrZXROYW1lAwUGY2FsbGVyBQdldmVudElkBQJpZAUEbmFtZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDWtleVRpY2tldERhdGUDBQZjYWxsZXIFB2V2ZW50SWQFAmlkBQRkYXRlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ1rZXlUaWNrZXREZXNjAwUGY2FsbGVyBQdldmVudElkBQJpZAULZGVzY3JpcHRpb24JAMwIAgkBDEludGVnZXJFbnRyeQIJAQ5rZXlUaWNrZXRQcmljZQMFBmNhbGxlcgUHZXZlbnRJZAUCaWQFBXByaWNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEVa2V5VGlja2V0TWF4QXZhaWxhYmxlAwUGY2FsbGVyBQdldmVudElkBQJpZAUMbWF4QXZhaWxhYmxlCQDMCAIJAQxCb29sZWFuRW50cnkCCQEPa2V5VGlja2V0T25TYWxlAwUGY2FsbGVyBQdldmVudElkBQJpZAYJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ9rZXlUaWNrZXRNYXhVc2UDBQZjYWxsZXIFB2V2ZW50SWQFAmlkBQZNYXhVc2UJAMwIAgkBDEludGVnZXJFbnRyeQIJARRrZXlUaWNrZXRUb3RhbElzc3VlZAMFBmNhbGxlcgUHZXZlbnRJZAUCaWQAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBGGtleUV2ZW50VG90YWxUaWNrZXRUeXBlcwIFBmNhbGxlcgUHZXZlbnRJZAkAZAIFF3RvdGFsVGlja2V0VHlwZUZvckV2ZW50AAEFA25pbAFpAQplZGl0VGlja2V0Bwh0aWNrZXRJZAdldmVudElkBG5hbWULZGVzY3JpcHRpb24FcHJpY2UMbWF4QXZhaWxhYmxlBm1heFVzZQQNJHQwMTM4OTAxMzkzMAkBDGlkQ2FsbGVyRGF0ZQEFAWkEAmlkCAUNJHQwMTM4OTAxMzkzMAJfMQQGY2FsbGVyCAUNJHQwMTM4OTAxMzkzMAJfMgQEZGF0ZQgFDSR0MDEzODkwMTM5MzACXzMECWNoZWNrVXNlcgkBDHZhbGlkYXRlVXNlcgEFBmNhbGxlcgMJAQIhPQIFCWNoZWNrVXNlcgIACQACAQUJY2hlY2tVc2VyAwkBASEBCQEMaXNFdmVudE93bmVyAgUHZXZlbnRJZAUGY2FsbGVyCQACAQIjWW91IGFyZSBub3QgdGhlIG93bmVyIG9mIHRoaXMgZXZlbnQDCQEBIQEJAQt0aWNrZXRFeGlzdAMFBmNhbGxlcgUHZXZlbnRJZAUIdGlja2V0SWQJAAIBAhBUaWNrZXQgbm90IGZvdW5kBA52YWxpZGF0ZVRpY2tldAkBEnZhbGlkYXRlVGlja2V0RGF0YQcFB2V2ZW50SWQFBmNhbGxlcgUEbmFtZQULZGVzY3JpcHRpb24FBXByaWNlBQxtYXhBdmFpbGFibGUFBm1heFVzZQMJAQIhPQIFDnZhbGlkYXRlVGlja2V0AgAJAAIBAhVTb21ldGhpbmcgd2VudCB3cm9uZyEECnRpY2tldFNvbGQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDWtleVRpY2tldFNvbGQDBQZjYWxsZXIFB2V2ZW50SWQFCHRpY2tldElkAAADCQBmAgUKdGlja2V0U29sZAUMbWF4QXZhaWxhYmxlCQACAQI+TWF4IHRpY2tldHMgYXZhaWxhYmxlIGNhbm5vdCBiZSBsb3dlciB0aGFuIGFtb3VudCBhbHJlYWR5IHNvbGQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDWtleVRpY2tldE5hbWUDBQZjYWxsZXIFB2V2ZW50SWQFCHRpY2tldElkBQRuYW1lCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ1rZXlUaWNrZXREZXNjAwUGY2FsbGVyBQdldmVudElkBQh0aWNrZXRJZAULZGVzY3JpcHRpb24JAMwIAgkBDEludGVnZXJFbnRyeQIJAQ5rZXlUaWNrZXRQcmljZQMFBmNhbGxlcgUHZXZlbnRJZAUIdGlja2V0SWQFBXByaWNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEVa2V5VGlja2V0TWF4QXZhaWxhYmxlAwUGY2FsbGVyBQdldmVudElkBQh0aWNrZXRJZAUMbWF4QXZhaWxhYmxlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEPa2V5VGlja2V0TWF4VXNlAwUGY2FsbGVyBQdldmVudElkBQJpZAUGbWF4VXNlBQNuaWwBaQEPcGF1c2VUaWNrZXRTYWxlAwdldmVudElkCHRpY2tldElkBnN0YXR1cwQNJHQwMTUwNTkxNTA5OQkBDGlkQ2FsbGVyRGF0ZQEFAWkEAmlkCAUNJHQwMTUwNTkxNTA5OQJfMQQGY2FsbGVyCAUNJHQwMTUwNTkxNTA5OQJfMgQEZGF0ZQgFDSR0MDE1MDU5MTUwOTkCXzMECWNoZWNrVXNlcgkBDHZhbGlkYXRlVXNlcgEFBmNhbGxlcgMJAQIhPQIFCWNoZWNrVXNlcgIACQACAQUJY2hlY2tVc2VyAwkBASEBCQEMaXNFdmVudE93bmVyAgUHZXZlbnRJZAUGY2FsbGVyCQACAQIjWW91IGFyZSBub3QgdGhlIG93bmVyIG9mIHRoaXMgZXZlbnQJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQ9rZXlUaWNrZXRPblNhbGUDBQZjYWxsZXIFB2V2ZW50SWQFAmlkBQZzdGF0dXMFA25pbAFpAQxkZWxldGVUaWNrZXQCCHRpY2tldElkB2V2ZW50SWQEDSR0MDE1NDczMTU1MTMJAQxpZENhbGxlckRhdGUBBQFpBAJpZAgFDSR0MDE1NDczMTU1MTMCXzEEBmNhbGxlcggFDSR0MDE1NDczMTU1MTMCXzIEBGRhdGUIBQ0kdDAxNTQ3MzE1NTEzAl8zBAljaGVja1VzZXIJAQx2YWxpZGF0ZVVzZXIBBQZjYWxsZXIDCQECIT0CBQljaGVja1VzZXICAAkAAgEFCWNoZWNrVXNlcgMJAQEhAQkBDGlzRXZlbnRPd25lcgIFB2V2ZW50SWQFBmNhbGxlcgkAAgECI1lvdSBhcmUgbm90IHRoZSBvd25lciBvZiB0aGlzIGV2ZW50AwkBASEBCQELdGlja2V0RXhpc3QDBQZjYWxsZXIFB2V2ZW50SWQFCHRpY2tldElkCQACAQIQVGlja2V0IG5vdCBmb3VuZAQKYW1vdW50U29sZAkBD2dldEludGVnZXJCeUtleQEJAQ1rZXlUaWNrZXRTb2xkAwUGY2FsbGVyBQdldmVudElkBQh0aWNrZXRJZAMJAQIhPQIFCmFtb3VudFNvbGQAAAkAAgECJkNhbm5vdCBkZWxldGUgdGlja2V0IHRoYXQgc29sZCBhbHJlYWR5BBd0b3RhbFRpY2tldFR5cGVGb3JFdmVudAkBD2dldEludGVnZXJCeUtleQEJARhrZXlFdmVudFRvdGFsVGlja2V0VHlwZXMCBQZjYWxsZXIFB2V2ZW50SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDWtleVRpY2tldE5hbWUDBQZjYWxsZXIFB2V2ZW50SWQFCHRpY2tldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ1rZXlUaWNrZXREYXRlAwUGY2FsbGVyBQdldmVudElkBQh0aWNrZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQENa2V5VGlja2V0RGVzYwMFBmNhbGxlcgUHZXZlbnRJZAUIdGlja2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDmtleVRpY2tldFByaWNlAwUGY2FsbGVyBQdldmVudElkBQh0aWNrZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEVa2V5VGlja2V0TWF4QXZhaWxhYmxlAwUGY2FsbGVyBQdldmVudElkBQh0aWNrZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEPa2V5VGlja2V0T25TYWxlAwUGY2FsbGVyBQdldmVudElkBQh0aWNrZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEPa2V5VGlja2V0TWF4VXNlAwUGY2FsbGVyBQdldmVudElkBQh0aWNrZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEUa2V5VGlja2V0VG90YWxJc3N1ZWQDBQZjYWxsZXIFB2V2ZW50SWQFCHRpY2tldElkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEYa2V5RXZlbnRUb3RhbFRpY2tldFR5cGVzAgUGY2FsbGVyBQdldmVudElkCQBlAgUXdG90YWxUaWNrZXRUeXBlRm9yRXZlbnQAAQUDbmlsAWkBCWJ1eVRpY2tldAMIdGlja2V0SWQHZXZlbnRJZAZpc3N1ZXIEDSR0MDE2NzM3MTY3NzUJAQxpZENhbGxlckRhdGUBBQFpBAJpZAgFDSR0MDE2NzM3MTY3NzUCXzEEBmNhbGxlcggFDSR0MDE2NzM3MTY3NzUCXzIEBGRhdGUIBQ0kdDAxNjczNzE2Nzc1Al8zBAh0b3RhbE5GVAkBC3ZhbHVlT3JFbHNlAgkBD2dldEludGVnZXJCeUtleQECFHRvdGFsX3RpY2tldHNfaXNzdWVkAAADCQEBIQEJAQxpc0V2ZW50T3duZXICBQdldmVudElkBQZpc3N1ZXIJAAIBAh9FdmVudCBJRCBhbmQgSXNzdWVyIGRvbid0IG1hdGNoAwkBASEBCQELdGlja2V0RXhpc3QDBQZpc3N1ZXIFB2V2ZW50SWQFCHRpY2tldElkCQACAQIQVGlja2V0IG5vdCBmb3VuZAQJZXZlbnROYW1lCQEOZ2V0U3RyaW5nQnlLZXkBCQEMa2V5RXZlbnROYW1lAgUGaXNzdWVyBQdldmVudElkAwkAAAIFCWV2ZW50TmFtZQIACQACAQIRQXJ0IGRvZXNuJ3QgZXhpc3QDCQEPZXZlbnRJc0NhbmNlbGVkAgUGaXNzdWVyBQdldmVudElkCQACAQIYRXZlbnQgaGF2ZSBiZWVuIGNhbmNlbGVkBAhpc09uU2FsZQkBD2dldEJvb2xlYW5CeUtleQEJAQ9rZXlUaWNrZXRPblNhbGUDBQZpc3N1ZXIFB2V2ZW50SWQFCHRpY2tldElkAwkBASEBBQhpc09uU2FsZQkAAgECFFRpY2tldHMgbm90IGZvciBzYWxlBAphbW91bnRTb2xkCQEPZ2V0SW50ZWdlckJ5S2V5AQkBDWtleVRpY2tldFNvbGQDBQZpc3N1ZXIFB2V2ZW50SWQFCHRpY2tldElkBAt0aWNrZXRQcmljZQkBD2dldEludGVnZXJCeUtleQEJAQ5rZXlUaWNrZXRQcmljZQMFBmlzc3VlcgUHZXZlbnRJZAUIdGlja2V0SWQEDHByaWNlQXNzZXRJZAkA2AQBBQtzaWduQXNzZXRJZAQNJHQwMTc2MjExNzY5NQkBFHZhbGlkYXRlUHJpY2VBc3NldElkAwUBaQUMcHJpY2VBc3NldElkBQt0aWNrZXRQcmljZQQGYW1vdW50CAUNJHQwMTc2MjExNzY5NQJfMQQHYXNzZXRJZAgFDSR0MDE3NjIxMTc2OTUCXzIECm1heENhblNlbGwJAQ9nZXRJbnRlZ2VyQnlLZXkBCQEVa2V5VGlja2V0TWF4QXZhaWxhYmxlAwUGaXNzdWVyBQdldmVudElkBQh0aWNrZXRJZAQNYW1vdW50Rm9yU2lnbgkAawMFBmFtb3VudAUHc2lnbkN1dABkBBJhbW91bnRGb3JPcmdhbml6ZXIJAGUCBQZhbW91bnQFDWFtb3VudEZvclNpZ24DCQAAAgUKYW1vdW50U29sZAUKbWF4Q2FuU2VsbAkAAgECDEFydCBzb2xkIG91dAQNbmV3QW1vdW50U29sZAkAZAIFCmFtb3VudFNvbGQAAQQJaXNzdWVNZXRhCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgILT3JnYW5pemVyOiAFBmlzc3VlcgIMLAogRXZlbnRJRDogBQdldmVudElkAg0sCiBUaWNrZXRJRDogBQh0aWNrZXRJZAIOLAogRXZlbnROYW1lOiAFCWV2ZW50TmFtZQIKLAogSXNzdWU6IAkApAMBBQ1uZXdBbW91bnRTb2xkAgEvCQCkAwEFCm1heENhblNlbGwECGlzc3VlTkZUCQDCCAUJAKwCAgIDU1RfCQCkAwEJAGQCBQh0b3RhbE5GVAABBQlpc3N1ZU1ldGEAAQAABwQFaWRORlQJALgIAQUIaXNzdWVORlQECnNlbGxTdGF0dXMDCQAAAgUNbmV3QW1vdW50U29sZAUKbWF4Q2FuU2VsbAcGBApyZWNlaXZlTkZUCAUBaQZjYWxsZXIEB3NvbGRLZXkJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICDHRpY2tldF9zb2xkXwkApAMBBQ1uZXdBbW91bnRTb2xkAgRfb2ZfCQCkAwEFCm1heENhblNlbGwCAV8FB2V2ZW50SWQCAV8FBmlzc3VlcgIBXwUIdGlja2V0SWQECXNvbGRWYWx1ZQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKUIAQUKcmVjZWl2ZU5GVAIBXwkApAMBBQRkYXRlAgFfBQJpZAIBXwkApAMBBQZhbW91bnQCAV8JANgEAQUFaWRORlQECHNvbGREYXRhCQELU3RyaW5nRW50cnkCBQdzb2xkS2V5BQlzb2xkVmFsdWUEDWV2ZW50VG90YWxORlQJAQ9nZXRJbnRlZ2VyQnlLZXkBCQEaa2V5RXZlbnRUb3RhbFRpY2tldHNJc3N1ZWQCBQZpc3N1ZXIFB2V2ZW50SWQEDnRpY2tldFRvdGFsTkZUCQEPZ2V0SW50ZWdlckJ5S2V5AQkBFGtleVRpY2tldFRvdGFsSXNzdWVkAwUGaXNzdWVyBQdldmVudElkBQh0aWNrZXRJZAQGYnV5UmVzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQENa2V5VGlja2V0U29sZAMFBmlzc3VlcgUHZXZlbnRJZAUIdGlja2V0SWQFDW5ld0Ftb3VudFNvbGQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICAgRuZnRfCQDYBAEFBWlkTkZUBQdzb2xkS2V5CQDMCAIJAQxJbnRlZ2VyRW50cnkCAhB0b3RhbF9uZnRfaXNzdWVkCQBkAgUIdG90YWxORlQAAQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBGmtleUV2ZW50VG90YWxUaWNrZXRzSXNzdWVkAgUGaXNzdWVyBQdldmVudElkCQBkAgUNZXZlbnRUb3RhbE5GVAABCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEUa2V5VGlja2V0VG90YWxJc3N1ZWQDBQZpc3N1ZXIFB2V2ZW50SWQFCHRpY2tldElkCQBkAgUOdGlja2V0VG90YWxORlQAAQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgIDU1RfCQCkAwEJAGQCBQh0b3RhbE5GVAABAghfYXNzZXRJZAkA2AQBBQVpZE5GVAkAzAgCCQEMQm9vbGVhbkVudHJ5AgkBD2tleVRpY2tldE9uU2FsZQMFBmlzc3VlcgUHZXZlbnRJZAUIdGlja2V0SWQFCnNlbGxTdGF0dXMJAMwIAgkBDEludGVnZXJFbnRyeQIJARNrZXlUaWNrZXRBbW91bnRVc2VkAwUGaXNzdWVyBQdldmVudElkBQh0aWNrZXRJZAAACQDMCAIFCGlzc3VlTkZUCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQZpc3N1ZXIFEmFtb3VudEZvck9yZ2FuaXplcgUHYXNzZXRJZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQpyZWNlaXZlTkZUAAEFBWlkTkZUCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQtmZWVSZWNlaXZlcgUNYW1vdW50Rm9yU2lnbgUHYXNzZXRJZAUDbmlsCQDMCAIFCHNvbGREYXRhBQZidXlSZXMBaQEJdXNlVGlja2V0AgdldmVudElkBmlzc3VlcgQNJHQwMTk5NzQyMDAxMgkBDGlkQ2FsbGVyRGF0ZQEFAWkEAmlkCAUNJHQwMTk5NzQyMDAxMgJfMQQGY2FsbGVyCAUNJHQwMTk5NzQyMDAxMgJfMgQEZGF0ZQgFDSR0MDE5OTc0MjAwMTICXzMEDSR0MDIwMDE4MjAwNTQJAQlpc1BheW1lbnQBBQFpBAdwYXltZW50CAUNJHQwMjAwMTgyMDA1NAJfMQQGYW1vdW50CAUNJHQwMjAwMTgyMDA1NAJfMgMJAQEhAQkBCWlzRGVmaW5lZAEIBQdwYXltZW50B2Fzc2V0SWQJAAIBAhRXcm9uZyBhc3NldCBhdHRhY2hlZAQIdGlja2V0SWQJANgEAQkBBXZhbHVlAQgFB3BheW1lbnQHYXNzZXRJZAMJAQEhAQkBC3RpY2tldEV4aXN0AwUGaXNzdWVyBQdldmVudElkBQh0aWNrZXRJZAkAAgECEFRpY2tldCBub3QgZm91bmQECmFtb3VudFVzZWQJAQ9nZXRJbnRlZ2VyQnlLZXkBCQETa2V5VGlja2V0QW1vdW50VXNlZAMFBmlzc3VlcgUHZXZlbnRJZAUIdGlja2V0SWQEDG1heFVzaW5nVGltZQkBD2dldEludGVnZXJCeUtleQEJAQ9rZXlUaWNrZXRNYXhVc2UDBQZpc3N1ZXIFB2V2ZW50SWQFCHRpY2tldElkAwkAAAIFDG1heFVzaW5nVGltZQUKYW1vdW50VXNlZAkAAgEJAKwCAgkArAICAgxUaWNrZXQgdXNlZCAJAKQDAQUKYW1vdW50VXNlZAIOIHRpbWVzIGFscmVhZHkJAMwIAgkBDEludGVnZXJFbnRyeQIJARNrZXlUaWNrZXRBbW91bnRVc2VkAwUGaXNzdWVyBQdldmVudElkBQh0aWNrZXRJZAkAZAIFCmFtb3VudFVzZWQAAQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUGY2FsbGVyAAEIBQdwYXltZW50B2Fzc2V0SWQFA25pbAFpAQtkZWxldGVFbnRyeQEFZW50cnkEBmNhbGxlcgkApQgBCAUBaQZjYWxsZXIDCQAAAgUGY2FsbGVyBQVjaHJpcwkAzAgCCQELRGVsZXRlRW50cnkBBQVlbnRyeQUDbmlsCQACAQICbm8Ajzoytg==", "height": 2289127, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 3kCvxDYyA49Xq2wj14yhCeiwReZJS6d64DXoiYfCN5UD Next: EQbN2YdZyr5QV5AAffip2qxvig91oFqePKHDD3K4LjQL Diff:
OldNewDifferences
137137 }
138138
139139
140-func validateType (type) = containsElement(["online", "offline", "both"], type)
141-
142-
143-func validateEventData (caller,cidDisplay,name,description,tags,type,date) = {
140+func validateEventData (caller,cidDisplay,name,description,tags,date) = {
144141 let checkUser = validateUser(caller)
145142 if ((checkUser != ""))
146143 then throw(checkUser)
150147 then throw("Problem with CID")
151148 else if (!(validateString(name, 200)))
152149 then throw("100 Char. max name")
153- else if (!(validateType(type)))
154- then throw("Wrong event type")
155- else if (!(validateString(description, 1000)))
156- then throw("1000 Char. max description")
157- else if (!(validateString(date, 1000)))
158- then throw("1000 Char. max date")
159- else if ((size(split(tags, ",")) > 5))
160- then throw("5 tags max.")
161- else ""
150+ else if (!(validateString(description, 1000)))
151+ then throw("1000 Char. max description")
152+ else if (!(validateString(date, 1000)))
153+ then throw("1000 Char. max date")
154+ else if ((size(split(tags, ",")) > 5))
155+ then throw("5 tags max.")
156+ else ""
162157 }
163158
164159
197192
198193
199194 func validatePriceAssetId (i,priceAssetId,artworkPrice) = {
200- let $t066536689 = isPayment(i)
201- let payment = $t066536689._1
202- let amount = $t066536689._2
195+ let $t064836519 = isPayment(i)
196+ let payment = $t064836519._1
197+ let amount = $t064836519._2
203198 if (!(isDefined(payment.assetId)))
204199 then throw("Wrong asset attached")
205200 else {
245240
246241
247242 @Callable(i)
248-func addEvent (name,description,tags,cidDisplay,crawler,type,date) = {
249- let $t080328081 = idCallerDate(i)
250- let eventId = $t080328081._1
251- let caller = $t080328081._2
252- let addedDate = $t080328081._3
243+func addEvent (name,description,tags,cidDisplay,crawler,date) = {
244+ let $t078487897 = idCallerDate(i)
245+ let eventId = $t078487897._1
246+ let caller = $t078487897._2
247+ let addedDate = $t078487897._3
253248 let checkUser = validateUser(caller)
254249 if ((checkUser != ""))
255250 then throw(checkUser)
256251 else {
257- let validateEvent = validateEventData(caller, cidDisplay, name, description, tags, type, date)
252+ let validateEvent = validateEventData(caller, cidDisplay, name, description, tags, date)
258253 if ((validateEvent != ""))
259254 then throw("Something went wrong!")
260255 else [IntegerEntry(keyEventAddedDate(caller, eventId), addedDate), StringEntry(keyEventDate(caller, eventId), date), StringEntry(keyEventName(caller, eventId), name), StringEntry(keyEventDesc(caller, eventId), description), StringEntry(keyEventDisplayCid(caller, eventId), cidDisplay), StringEntry(keyEventTags(caller, eventId), tags), StringEntry(keyEventCrawler(caller, eventId), crawler), IntegerEntry(keyEventTotalTicketsIssued(caller, eventId), 0), BooleanEntry(keyEventCanceled(caller, eventId), false), StringEntry(keyEventOwnerByEventId(eventId), caller)]
264259
265260
266261 @Callable(i)
267-func editEvent (eventId,name,description,tags,cidDisplay,crawler,type,date) = if (!(dappRunning))
262+func editEvent (eventId,name,description,tags,cidDisplay,crawler,date) = if (!(dappRunning))
268263 then throw(maintenanceMSG)
269264 else {
270265 let caller = toBase58String(i.caller.bytes)
272267 if ((checkUser != ""))
273268 then throw(checkUser)
274269 else {
275- let validateEvent = validateEventData(caller, cidDisplay, name, description, tags, type, date)
270+ let validateEvent = validateEventData(caller, cidDisplay, name, description, tags, date)
276271 if ((validateEvent != ""))
277272 then throw("Something went wrong!")
278273 else {
293288
294289 @Callable(i)
295290 func deleteEvent (eventId) = {
296- let $t01032710371 = idCallerDate(i)
297- let id = $t01032710371._1
298- let caller = $t01032710371._2
299- let addedDate = $t01032710371._3
291+ let $t01011710161 = idCallerDate(i)
292+ let id = $t01011710161._1
293+ let caller = $t01011710161._2
294+ let addedDate = $t01011710161._3
300295 let checkUser = validateUser(caller)
301296 if ((checkUser != ""))
302297 then throw(checkUser)
319314
320315 @Callable(i)
321316 func cancelEvent (eventId,reason) = {
322- let $t01171211756 = idCallerDate(i)
323- let id = $t01171211756._1
324- let caller = $t01171211756._2
325- let addedDate = $t01171211756._3
317+ let $t01150211546 = idCallerDate(i)
318+ let id = $t01150211546._1
319+ let caller = $t01150211546._2
320+ let addedDate = $t01150211546._3
326321 let checkUser = validateUser(caller)
327322 if ((checkUser != ""))
328323 then throw(checkUser)
335330
336331 @Callable(i)
337332 func flagEvent (eventId,addr,flag,note) = {
338- let $t01219112224 = idCallerDate(i)
339- let id = $t01219112224._1
340- let caller = $t01219112224._2
333+ let $t01198112014 = idCallerDate(i)
334+ let id = $t01198112014._1
335+ let caller = $t01198112014._2
341336 if (containsElement([chris, toString(this)], caller))
342337 then if (containsElement(["", "CHANGE_REQUIRED", "FLAGGED", "ILLEGAL"], flag))
343338 then [StringEntry(keyEventFlag(addr, eventId), flag), StringEntry(keyEventNote(addr, eventId), note)]
349344
350345 @Callable(i)
351346 func addTicket (eventId,name,description,price,maxAvailable,MaxUse) = {
352- let $t01272512765 = idCallerDate(i)
353- let id = $t01272512765._1
354- let caller = $t01272512765._2
355- let date = $t01272512765._3
347+ let $t01251512555 = idCallerDate(i)
348+ let id = $t01251512555._1
349+ let caller = $t01251512555._2
350+ let date = $t01251512555._3
356351 let checkUser = validateUser(caller)
357352 if ((checkUser != ""))
358353 then throw(checkUser)
375370
376371 @Callable(i)
377372 func editTicket (ticketId,eventId,name,description,price,maxAvailable,maxUse) = {
378- let $t01410014140 = idCallerDate(i)
379- let id = $t01410014140._1
380- let caller = $t01410014140._2
381- let date = $t01410014140._3
373+ let $t01389013930 = idCallerDate(i)
374+ let id = $t01389013930._1
375+ let caller = $t01389013930._2
376+ let date = $t01389013930._3
382377 let checkUser = validateUser(caller)
383378 if ((checkUser != ""))
384379 then throw(checkUser)
403398
404399 @Callable(i)
405400 func pauseTicketSale (eventId,ticketId,status) = {
406- let $t01526915309 = idCallerDate(i)
407- let id = $t01526915309._1
408- let caller = $t01526915309._2
409- let date = $t01526915309._3
401+ let $t01505915099 = idCallerDate(i)
402+ let id = $t01505915099._1
403+ let caller = $t01505915099._2
404+ let date = $t01505915099._3
410405 let checkUser = validateUser(caller)
411406 if ((checkUser != ""))
412407 then throw(checkUser)
419414
420415 @Callable(i)
421416 func deleteTicket (ticketId,eventId) = {
422- let $t01568315723 = idCallerDate(i)
423- let id = $t01568315723._1
424- let caller = $t01568315723._2
425- let date = $t01568315723._3
417+ let $t01547315513 = idCallerDate(i)
418+ let id = $t01547315513._1
419+ let caller = $t01547315513._2
420+ let date = $t01547315513._3
426421 let checkUser = validateUser(caller)
427422 if ((checkUser != ""))
428423 then throw(checkUser)
445440
446441 @Callable(i)
447442 func buyTicket (ticketId,eventId,issuer) = {
448- let $t01694716985 = idCallerDate(i)
449- let id = $t01694716985._1
450- let caller = $t01694716985._2
451- let date = $t01694716985._3
443+ let $t01673716775 = idCallerDate(i)
444+ let id = $t01673716775._1
445+ let caller = $t01673716775._2
446+ let date = $t01673716775._3
452447 let totalNFT = valueOrElse(getIntegerByKey("total_tickets_issued"), 0)
453448 if (!(isEventOwner(eventId, issuer)))
454449 then throw("Event ID and Issuer don't match")
468463 let amountSold = getIntegerByKey(keyTicketSold(issuer, eventId, ticketId))
469464 let ticketPrice = getIntegerByKey(keyTicketPrice(issuer, eventId, ticketId))
470465 let priceAssetId = toBase58String(signAssetId)
471- let $t01783117905 = validatePriceAssetId(i, priceAssetId, ticketPrice)
472- let amount = $t01783117905._1
473- let assetId = $t01783117905._2
466+ let $t01762117695 = validatePriceAssetId(i, priceAssetId, ticketPrice)
467+ let amount = $t01762117695._1
468+ let assetId = $t01762117695._2
474469 let maxCanSell = getIntegerByKey(keyTicketMaxAvailable(issuer, eventId, ticketId))
475470 let amountForSign = fraction(amount, signCut, 100)
476471 let amountForOrganizer = (amount - amountForSign)
506501
507502 @Callable(i)
508503 func useTicket (eventId,issuer) = {
509- let $t02018420222 = idCallerDate(i)
510- let id = $t02018420222._1
511- let caller = $t02018420222._2
512- let date = $t02018420222._3
513- let $t02022820264 = isPayment(i)
514- let payment = $t02022820264._1
515- let amount = $t02022820264._2
504+ let $t01997420012 = idCallerDate(i)
505+ let id = $t01997420012._1
506+ let caller = $t01997420012._2
507+ let date = $t01997420012._3
508+ let $t02001820054 = isPayment(i)
509+ let payment = $t02001820054._1
510+ let amount = $t02001820054._2
516511 if (!(isDefined(payment.assetId)))
517512 then throw("Wrong asset attached")
518513 else {
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let VERSION = "1.0.0"
55
66 func getStringByKey (key) = valueOrElse(getString(this, key), "")
77
88
99 let userDapp = value(addressFromString(getStringByKey("conf_users_dapp")))
1010
1111 let feeReceiver = getStringByKey("conf_fee_receiver")
1212
1313 let signAssetId = fromBase58String(getStringByKey("conf_accepted_asset_SIGN"))
1414
1515 let chris = getStringByKey("conf_admin_1")
1616
1717 func getIntegerByKey (key) = valueOrElse(getInteger(this, key), 0)
1818
1919
2020 func getBooleanByKey (key) = valueOrElse(getBoolean(this, key), false)
2121
2222
2323 let dappRunning = valueOrElse(getBoolean(userDapp, "conf_dapp_is_running"), true)
2424
2525 let maintenanceMSG = valueOrElse(getString(userDapp, "conf_maintenance_msg"), "")
2626
2727 let userSuspended = "SUSPENDED"
2828
2929 let userUnregistered = "UNREGISTERED"
3030
3131 func validateCID (cid) = if (contains(cid, "/"))
3232 then if (if ((76 > size(cid)))
3333 then (size(split(cid, "/")[0]) == 59)
3434 else false)
3535 then (16 > size(split(cid, "/")[1]))
3636 else false
3737 else false
3838
3939
4040 let signCut = 2
4141
4242 func keyUserStatus (caller) = ("user_status_" + caller)
4343
4444
4545 func keyEventOwnerByEventId (eventId) = ("get_event_owner_" + eventId)
4646
4747
4848 func keyEventAddedDate (caller,eventId) = ((("event_addedDate_" + eventId) + "_") + caller)
4949
5050
5151 func keyEventDate (caller,eventId) = ((("event_date_" + eventId) + "_") + caller)
5252
5353
5454 func keyEventName (caller,eventId) = ((("event_name_" + eventId) + "_") + caller)
5555
5656
5757 func keyEventDesc (caller,eventId) = ((("event_desc_" + eventId) + "_") + caller)
5858
5959
6060 func keyEventDisplayCid (caller,eventId) = ((("event_displayCid_" + eventId) + "_") + caller)
6161
6262
6363 func keyEventTags (caller,eventId) = ((("event_tags_" + eventId) + "_") + caller)
6464
6565
6666 func keyEventFlag (caller,eventId) = ((("event_flag_" + eventId) + "_") + caller)
6767
6868
6969 func keyEventNote (caller,eventId) = ((("event_note_" + eventId) + "_") + caller)
7070
7171
7272 func keyEventCrawler (caller,eventId) = ((("event_crawlerCid_" + eventId) + "_") + caller)
7373
7474
7575 func keyEventTotalTicketTypes (caller,eventId) = ((("event_totalTicketTypes_" + eventId) + "_") + caller)
7676
7777
7878 func keyEventTotalTicketsIssued (caller,eventId) = ((("event_totalIssued_" + eventId) + "_") + caller)
7979
8080
8181 func keyEventCanceled (caller,eventId) = ((("event_canceled_" + eventId) + "_") + caller)
8282
8383
8484 func keyEventCanceledReason (caller,eventId) = ((("event_canceledReason_" + eventId) + "_") + caller)
8585
8686
8787 func keyTicketName (caller,eventId,ticketId) = ((((("ticket_name_" + eventId) + "_") + caller) + "_") + ticketId)
8888
8989
9090 func keyTicketDesc (caller,eventId,ticketId) = ((((("ticket_desc_" + eventId) + "_") + caller) + "_") + ticketId)
9191
9292
9393 func keyTicketPrice (caller,eventId,ticketId) = ((((("ticket_price_" + eventId) + "_") + caller) + "_") + ticketId)
9494
9595
9696 func keyTicketDate (caller,eventId,ticketId) = ((((("ticket_date_" + eventId) + "_") + caller) + "_") + ticketId)
9797
9898
9999 func keyTicketMaxAvailable (caller,eventId,ticketId) = ((((("ticket_maxAvailable_" + eventId) + "_") + caller) + "_") + ticketId)
100100
101101
102102 func keyTicketSold (caller,eventId,ticketId) = ((((("ticket_sold_" + eventId) + "_") + caller) + "_") + ticketId)
103103
104104
105105 func keyTicketOnSale (caller,eventId,ticketId) = ((((("ticket_onSale_" + eventId) + "_") + caller) + "_") + ticketId)
106106
107107
108108 func keyTicketAmountUsed (caller,eventId,ticketId) = ((((("ticket_amountUsed_" + eventId) + "_") + caller) + "_") + ticketId)
109109
110110
111111 func keyTicketMaxUse (caller,eventId,ticketId) = ((((("ticket_maxUse_" + eventId) + "_") + caller) + "_") + ticketId)
112112
113113
114114 func keyTicketTotalIssued (caller,eventId,ticketId) = ((((("ticket_totalIssued_" + eventId) + "_") + caller) + "_") + ticketId)
115115
116116
117117 func validateString (str,max) = if ((size(str) == 0))
118118 then throw("Field cannot be is empty")
119119 else if ((size(str) > max))
120120 then throw((str + " is too long"))
121121 else true
122122
123123
124124 func validateInt (num) = (0 > num)
125125
126126
127127 func getEventOwnerByEventId (eventId) = valueOrElse(getString(this, keyEventOwnerByEventId(eventId)), "")
128128
129129
130130 func validateUser (caller) = {
131131 let userStatus = valueOrElse(getString(userDapp, keyUserStatus(caller)), userUnregistered)
132132 if ((userStatus == userUnregistered))
133133 then "Register this account first with \"Account\" tab"
134134 else if ((userStatus == userSuspended))
135135 then "Account suspended"
136136 else ""
137137 }
138138
139139
140-func validateType (type) = containsElement(["online", "offline", "both"], type)
141-
142-
143-func validateEventData (caller,cidDisplay,name,description,tags,type,date) = {
140+func validateEventData (caller,cidDisplay,name,description,tags,date) = {
144141 let checkUser = validateUser(caller)
145142 if ((checkUser != ""))
146143 then throw(checkUser)
147144 else if ((size(cidDisplay) == 0))
148145 then throw("Display CID cannot be empty")
149146 else if (!(validateCID(cidDisplay)))
150147 then throw("Problem with CID")
151148 else if (!(validateString(name, 200)))
152149 then throw("100 Char. max name")
153- else if (!(validateType(type)))
154- then throw("Wrong event type")
155- else if (!(validateString(description, 1000)))
156- then throw("1000 Char. max description")
157- else if (!(validateString(date, 1000)))
158- then throw("1000 Char. max date")
159- else if ((size(split(tags, ",")) > 5))
160- then throw("5 tags max.")
161- else ""
150+ else if (!(validateString(description, 1000)))
151+ then throw("1000 Char. max description")
152+ else if (!(validateString(date, 1000)))
153+ then throw("1000 Char. max date")
154+ else if ((size(split(tags, ",")) > 5))
155+ then throw("5 tags max.")
156+ else ""
162157 }
163158
164159
165160 func validateTicketData (eventId,caller,name,description,price,maxAvailable,maxUse) = {
166161 let checkUser = validateUser(caller)
167162 if ((checkUser != ""))
168163 then throw(checkUser)
169164 else if (!(validateString(name, 200)))
170165 then throw("100 Char. max name")
171166 else if (!(validateString(description, 1000)))
172167 then throw("1000 Char. max description")
173168 else if (if (if (validateInt(price))
174169 then true
175170 else validateInt(maxUse))
176171 then true
177172 else validateInt(maxAvailable))
178173 then throw("Positive amount only")
179174 else if (!(validateString(description, 1000)))
180175 then throw("1000 Char. max description")
181176 else ""
182177 }
183178
184179
185180 func idCallerDate (i) = if (!(dappRunning))
186181 then throw(maintenanceMSG)
187182 else $Tuple3(toBase58String(i.transactionId), toBase58String(i.caller.bytes), lastBlock.timestamp)
188183
189184
190185 func isPayment (i) = if ((size(i.payments) == 0))
191186 then throw("No payment attached")
192187 else {
193188 let payment = value(i.payments[0])
194189 let amount = value(payment.amount)
195190 $Tuple2(payment, amount)
196191 }
197192
198193
199194 func validatePriceAssetId (i,priceAssetId,artworkPrice) = {
200- let $t066536689 = isPayment(i)
201- let payment = $t066536689._1
202- let amount = $t066536689._2
195+ let $t064836519 = isPayment(i)
196+ let payment = $t064836519._1
197+ let amount = $t064836519._2
203198 if (!(isDefined(payment.assetId)))
204199 then throw("Wrong asset attached")
205200 else {
206201 let assetId = if (if ((size(priceAssetId) > 0))
207202 then (toBase58String(value(payment.assetId)) == priceAssetId)
208203 else false)
209204 then payment.assetId
210205 else throw("Wrong asset attached")
211206 if ((artworkPrice != amount))
212207 then throw("Payment amount don't match")
213208 else $Tuple2(amount, assetId)
214209 }
215210 }
216211
217212
218213 func isEventOwner (eventId,caller) = {
219214 let eventOwner = getEventOwnerByEventId(eventId)
220215 if ((eventOwner == ""))
221216 then throw("Event not found")
222217 else (eventOwner == caller)
223218 }
224219
225220
226221 func ticketExist (caller,eventId,ticketId) = {
227222 let ticket = getStringByKey(keyTicketName(caller, eventId, ticketId))
228223 (size(ticket) != 0)
229224 }
230225
231226
232227 func eventIsCanceled (issuer,eventId) = getBooleanByKey(keyEventCanceled(issuer, eventId))
233228
234229
235230 @Callable(invoke)
236231 func setConf (key,val) = {
237232 let caller = toString(invoke.caller)
238233 if (containsElement([chris, toString(this)], caller))
239234 then if (contains(key, "conf_"))
240235 then [StringEntry(key, val)]
241236 else throw("Entries starting with conf_ only")
242237 else throw("You are not allowed to change this")
243238 }
244239
245240
246241
247242 @Callable(i)
248-func addEvent (name,description,tags,cidDisplay,crawler,type,date) = {
249- let $t080328081 = idCallerDate(i)
250- let eventId = $t080328081._1
251- let caller = $t080328081._2
252- let addedDate = $t080328081._3
243+func addEvent (name,description,tags,cidDisplay,crawler,date) = {
244+ let $t078487897 = idCallerDate(i)
245+ let eventId = $t078487897._1
246+ let caller = $t078487897._2
247+ let addedDate = $t078487897._3
253248 let checkUser = validateUser(caller)
254249 if ((checkUser != ""))
255250 then throw(checkUser)
256251 else {
257- let validateEvent = validateEventData(caller, cidDisplay, name, description, tags, type, date)
252+ let validateEvent = validateEventData(caller, cidDisplay, name, description, tags, date)
258253 if ((validateEvent != ""))
259254 then throw("Something went wrong!")
260255 else [IntegerEntry(keyEventAddedDate(caller, eventId), addedDate), StringEntry(keyEventDate(caller, eventId), date), StringEntry(keyEventName(caller, eventId), name), StringEntry(keyEventDesc(caller, eventId), description), StringEntry(keyEventDisplayCid(caller, eventId), cidDisplay), StringEntry(keyEventTags(caller, eventId), tags), StringEntry(keyEventCrawler(caller, eventId), crawler), IntegerEntry(keyEventTotalTicketsIssued(caller, eventId), 0), BooleanEntry(keyEventCanceled(caller, eventId), false), StringEntry(keyEventOwnerByEventId(eventId), caller)]
261256 }
262257 }
263258
264259
265260
266261 @Callable(i)
267-func editEvent (eventId,name,description,tags,cidDisplay,crawler,type,date) = if (!(dappRunning))
262+func editEvent (eventId,name,description,tags,cidDisplay,crawler,date) = if (!(dappRunning))
268263 then throw(maintenanceMSG)
269264 else {
270265 let caller = toBase58String(i.caller.bytes)
271266 let checkUser = validateUser(caller)
272267 if ((checkUser != ""))
273268 then throw(checkUser)
274269 else {
275- let validateEvent = validateEventData(caller, cidDisplay, name, description, tags, type, date)
270+ let validateEvent = validateEventData(caller, cidDisplay, name, description, tags, date)
276271 if ((validateEvent != ""))
277272 then throw("Something went wrong!")
278273 else {
279274 let entryExist = getStringByKey(keyEventName(caller, eventId))
280275 if ((entryExist == ""))
281276 then throw("Entry not found")
282277 else {
283278 let flag = getStringByKey(keyEventFlag(caller, eventId))
284279 if ((flag == "ILLEGAL"))
285280 then throw("Cannot update ILLEGAL Event")
286281 else [StringEntry(keyEventName(caller, eventId), name), StringEntry(keyEventDate(caller, eventId), date), StringEntry(keyEventDesc(caller, eventId), description), StringEntry(keyEventTags(caller, eventId), tags), StringEntry(keyEventCrawler(caller, eventId), crawler)]
287282 }
288283 }
289284 }
290285 }
291286
292287
293288
294289 @Callable(i)
295290 func deleteEvent (eventId) = {
296- let $t01032710371 = idCallerDate(i)
297- let id = $t01032710371._1
298- let caller = $t01032710371._2
299- let addedDate = $t01032710371._3
291+ let $t01011710161 = idCallerDate(i)
292+ let id = $t01011710161._1
293+ let caller = $t01011710161._2
294+ let addedDate = $t01011710161._3
300295 let checkUser = validateUser(caller)
301296 if ((checkUser != ""))
302297 then throw(checkUser)
303298 else if (!(isEventOwner(eventId, caller)))
304299 then throw("You are not the owner of this event")
305300 else {
306301 let eventTotalNFT = getIntegerByKey(keyEventTotalTicketsIssued(caller, eventId))
307302 if ((eventTotalNFT != 0))
308303 then throw("Cannot delete event with already sold tickets")
309304 else {
310305 let totalTicketTypeForEvent = getIntegerByKey(keyEventTotalTicketTypes(caller, eventId))
311306 if ((totalTicketTypeForEvent > 0))
312307 then throw("Delete all tickets first")
313308 else [DeleteEntry(keyEventAddedDate(caller, eventId)), DeleteEntry(keyEventDate(caller, eventId)), DeleteEntry(keyEventName(caller, eventId)), DeleteEntry(keyEventDesc(caller, eventId)), DeleteEntry(keyEventDisplayCid(caller, eventId)), DeleteEntry(keyEventTags(caller, eventId)), DeleteEntry(keyEventCrawler(caller, eventId)), DeleteEntry(keyEventTotalTicketsIssued(caller, eventId)), DeleteEntry(keyEventCanceled(caller, eventId)), DeleteEntry(keyEventOwnerByEventId(eventId)), DeleteEntry(keyEventTotalTicketTypes(caller, eventId))]
314309 }
315310 }
316311 }
317312
318313
319314
320315 @Callable(i)
321316 func cancelEvent (eventId,reason) = {
322- let $t01171211756 = idCallerDate(i)
323- let id = $t01171211756._1
324- let caller = $t01171211756._2
325- let addedDate = $t01171211756._3
317+ let $t01150211546 = idCallerDate(i)
318+ let id = $t01150211546._1
319+ let caller = $t01150211546._2
320+ let addedDate = $t01150211546._3
326321 let checkUser = validateUser(caller)
327322 if ((checkUser != ""))
328323 then throw(checkUser)
329324 else if (!(isEventOwner(eventId, caller)))
330325 then throw("You are not the owner of this event")
331326 else [BooleanEntry(keyEventCanceled(caller, eventId), true), StringEntry(keyEventCanceledReason(caller, eventId), reason)]
332327 }
333328
334329
335330
336331 @Callable(i)
337332 func flagEvent (eventId,addr,flag,note) = {
338- let $t01219112224 = idCallerDate(i)
339- let id = $t01219112224._1
340- let caller = $t01219112224._2
333+ let $t01198112014 = idCallerDate(i)
334+ let id = $t01198112014._1
335+ let caller = $t01198112014._2
341336 if (containsElement([chris, toString(this)], caller))
342337 then if (containsElement(["", "CHANGE_REQUIRED", "FLAGGED", "ILLEGAL"], flag))
343338 then [StringEntry(keyEventFlag(addr, eventId), flag), StringEntry(keyEventNote(addr, eventId), note)]
344339 else throw(("Unknow status " + flag))
345340 else throw("You are not allowed")
346341 }
347342
348343
349344
350345 @Callable(i)
351346 func addTicket (eventId,name,description,price,maxAvailable,MaxUse) = {
352- let $t01272512765 = idCallerDate(i)
353- let id = $t01272512765._1
354- let caller = $t01272512765._2
355- let date = $t01272512765._3
347+ let $t01251512555 = idCallerDate(i)
348+ let id = $t01251512555._1
349+ let caller = $t01251512555._2
350+ let date = $t01251512555._3
356351 let checkUser = validateUser(caller)
357352 if ((checkUser != ""))
358353 then throw(checkUser)
359354 else if (eventIsCanceled(caller, eventId))
360355 then throw("Event have been canceled")
361356 else if (!(isEventOwner(eventId, caller)))
362357 then throw("You are not the owner of this event")
363358 else {
364359 let validateTicket = validateTicketData(eventId, caller, name, description, price, maxAvailable, MaxUse)
365360 if ((validateTicket != ""))
366361 then throw("Something went wrong!")
367362 else {
368363 let totalTicketTypeForEvent = getIntegerByKey(keyEventTotalTicketTypes(caller, eventId))
369364 [StringEntry(keyTicketName(caller, eventId, id), name), IntegerEntry(keyTicketDate(caller, eventId, id), date), StringEntry(keyTicketDesc(caller, eventId, id), description), IntegerEntry(keyTicketPrice(caller, eventId, id), price), IntegerEntry(keyTicketMaxAvailable(caller, eventId, id), maxAvailable), BooleanEntry(keyTicketOnSale(caller, eventId, id), true), IntegerEntry(keyTicketMaxUse(caller, eventId, id), MaxUse), IntegerEntry(keyTicketTotalIssued(caller, eventId, id), 0), IntegerEntry(keyEventTotalTicketTypes(caller, eventId), (totalTicketTypeForEvent + 1))]
370365 }
371366 }
372367 }
373368
374369
375370
376371 @Callable(i)
377372 func editTicket (ticketId,eventId,name,description,price,maxAvailable,maxUse) = {
378- let $t01410014140 = idCallerDate(i)
379- let id = $t01410014140._1
380- let caller = $t01410014140._2
381- let date = $t01410014140._3
373+ let $t01389013930 = idCallerDate(i)
374+ let id = $t01389013930._1
375+ let caller = $t01389013930._2
376+ let date = $t01389013930._3
382377 let checkUser = validateUser(caller)
383378 if ((checkUser != ""))
384379 then throw(checkUser)
385380 else if (!(isEventOwner(eventId, caller)))
386381 then throw("You are not the owner of this event")
387382 else if (!(ticketExist(caller, eventId, ticketId)))
388383 then throw("Ticket not found")
389384 else {
390385 let validateTicket = validateTicketData(eventId, caller, name, description, price, maxAvailable, maxUse)
391386 if ((validateTicket != ""))
392387 then throw("Something went wrong!")
393388 else {
394389 let ticketSold = valueOrElse(getInteger(keyTicketSold(caller, eventId, ticketId)), 0)
395390 if ((ticketSold > maxAvailable))
396391 then throw("Max tickets available cannot be lower than amount already sold")
397392 else [StringEntry(keyTicketName(caller, eventId, ticketId), name), StringEntry(keyTicketDesc(caller, eventId, ticketId), description), IntegerEntry(keyTicketPrice(caller, eventId, ticketId), price), IntegerEntry(keyTicketMaxAvailable(caller, eventId, ticketId), maxAvailable), IntegerEntry(keyTicketMaxUse(caller, eventId, id), maxUse)]
398393 }
399394 }
400395 }
401396
402397
403398
404399 @Callable(i)
405400 func pauseTicketSale (eventId,ticketId,status) = {
406- let $t01526915309 = idCallerDate(i)
407- let id = $t01526915309._1
408- let caller = $t01526915309._2
409- let date = $t01526915309._3
401+ let $t01505915099 = idCallerDate(i)
402+ let id = $t01505915099._1
403+ let caller = $t01505915099._2
404+ let date = $t01505915099._3
410405 let checkUser = validateUser(caller)
411406 if ((checkUser != ""))
412407 then throw(checkUser)
413408 else if (!(isEventOwner(eventId, caller)))
414409 then throw("You are not the owner of this event")
415410 else [BooleanEntry(keyTicketOnSale(caller, eventId, id), status)]
416411 }
417412
418413
419414
420415 @Callable(i)
421416 func deleteTicket (ticketId,eventId) = {
422- let $t01568315723 = idCallerDate(i)
423- let id = $t01568315723._1
424- let caller = $t01568315723._2
425- let date = $t01568315723._3
417+ let $t01547315513 = idCallerDate(i)
418+ let id = $t01547315513._1
419+ let caller = $t01547315513._2
420+ let date = $t01547315513._3
426421 let checkUser = validateUser(caller)
427422 if ((checkUser != ""))
428423 then throw(checkUser)
429424 else if (!(isEventOwner(eventId, caller)))
430425 then throw("You are not the owner of this event")
431426 else if (!(ticketExist(caller, eventId, ticketId)))
432427 then throw("Ticket not found")
433428 else {
434429 let amountSold = getIntegerByKey(keyTicketSold(caller, eventId, ticketId))
435430 if ((amountSold != 0))
436431 then throw("Cannot delete ticket that sold already")
437432 else {
438433 let totalTicketTypeForEvent = getIntegerByKey(keyEventTotalTicketTypes(caller, eventId))
439434 [DeleteEntry(keyTicketName(caller, eventId, ticketId)), DeleteEntry(keyTicketDate(caller, eventId, ticketId)), DeleteEntry(keyTicketDesc(caller, eventId, ticketId)), DeleteEntry(keyTicketPrice(caller, eventId, ticketId)), DeleteEntry(keyTicketMaxAvailable(caller, eventId, ticketId)), DeleteEntry(keyTicketOnSale(caller, eventId, ticketId)), DeleteEntry(keyTicketMaxUse(caller, eventId, ticketId)), DeleteEntry(keyTicketTotalIssued(caller, eventId, ticketId)), IntegerEntry(keyEventTotalTicketTypes(caller, eventId), (totalTicketTypeForEvent - 1))]
440435 }
441436 }
442437 }
443438
444439
445440
446441 @Callable(i)
447442 func buyTicket (ticketId,eventId,issuer) = {
448- let $t01694716985 = idCallerDate(i)
449- let id = $t01694716985._1
450- let caller = $t01694716985._2
451- let date = $t01694716985._3
443+ let $t01673716775 = idCallerDate(i)
444+ let id = $t01673716775._1
445+ let caller = $t01673716775._2
446+ let date = $t01673716775._3
452447 let totalNFT = valueOrElse(getIntegerByKey("total_tickets_issued"), 0)
453448 if (!(isEventOwner(eventId, issuer)))
454449 then throw("Event ID and Issuer don't match")
455450 else if (!(ticketExist(issuer, eventId, ticketId)))
456451 then throw("Ticket not found")
457452 else {
458453 let eventName = getStringByKey(keyEventName(issuer, eventId))
459454 if ((eventName == ""))
460455 then throw("Art doesn't exist")
461456 else if (eventIsCanceled(issuer, eventId))
462457 then throw("Event have been canceled")
463458 else {
464459 let isOnSale = getBooleanByKey(keyTicketOnSale(issuer, eventId, ticketId))
465460 if (!(isOnSale))
466461 then throw("Tickets not for sale")
467462 else {
468463 let amountSold = getIntegerByKey(keyTicketSold(issuer, eventId, ticketId))
469464 let ticketPrice = getIntegerByKey(keyTicketPrice(issuer, eventId, ticketId))
470465 let priceAssetId = toBase58String(signAssetId)
471- let $t01783117905 = validatePriceAssetId(i, priceAssetId, ticketPrice)
472- let amount = $t01783117905._1
473- let assetId = $t01783117905._2
466+ let $t01762117695 = validatePriceAssetId(i, priceAssetId, ticketPrice)
467+ let amount = $t01762117695._1
468+ let assetId = $t01762117695._2
474469 let maxCanSell = getIntegerByKey(keyTicketMaxAvailable(issuer, eventId, ticketId))
475470 let amountForSign = fraction(amount, signCut, 100)
476471 let amountForOrganizer = (amount - amountForSign)
477472 if ((amountSold == maxCanSell))
478473 then throw("Art sold out")
479474 else {
480475 let newAmountSold = (amountSold + 1)
481476 let issueMeta = ((((((((((("Organizer: " + issuer) + ",
482477 EventID: ") + eventId) + ",
483478 TicketID: ") + ticketId) + ",
484479 EventName: ") + eventName) + ",
485480 Issue: ") + toString(newAmountSold)) + "/") + toString(maxCanSell))
486481 let issueNFT = Issue(("ST_" + toString((totalNFT + 1))), issueMeta, 1, 0, false)
487482 let idNFT = calculateAssetId(issueNFT)
488483 let sellStatus = if ((newAmountSold == maxCanSell))
489484 then false
490485 else true
491486 let receiveNFT = i.caller
492487 let soldKey = ((((((((("ticket_sold_" + toString(newAmountSold)) + "_of_") + toString(maxCanSell)) + "_") + eventId) + "_") + issuer) + "_") + ticketId)
493488 let soldValue = ((((((((toString(receiveNFT) + "_") + toString(date)) + "_") + id) + "_") + toString(amount)) + "_") + toBase58String(idNFT))
494489 let soldData = StringEntry(soldKey, soldValue)
495490 let eventTotalNFT = getIntegerByKey(keyEventTotalTicketsIssued(issuer, eventId))
496491 let ticketTotalNFT = getIntegerByKey(keyTicketTotalIssued(issuer, eventId, ticketId))
497492 let buyRes = [IntegerEntry(keyTicketSold(issuer, eventId, ticketId), newAmountSold), StringEntry(("nft_" + toBase58String(idNFT)), soldKey), IntegerEntry("total_nft_issued", (totalNFT + 1)), IntegerEntry(keyEventTotalTicketsIssued(issuer, eventId), (eventTotalNFT + 1)), IntegerEntry(keyTicketTotalIssued(issuer, eventId, ticketId), (ticketTotalNFT + 1)), StringEntry((("ST_" + toString((totalNFT + 1))) + "_assetId"), toBase58String(idNFT)), BooleanEntry(keyTicketOnSale(issuer, eventId, ticketId), sellStatus), IntegerEntry(keyTicketAmountUsed(issuer, eventId, ticketId), 0), issueNFT, ScriptTransfer(Address(fromBase58String(issuer)), amountForOrganizer, assetId), ScriptTransfer(receiveNFT, 1, idNFT), ScriptTransfer(Address(fromBase58String(feeReceiver)), amountForSign, assetId)]
498493 soldData :: buyRes
499494 }
500495 }
501496 }
502497 }
503498 }
504499
505500
506501
507502 @Callable(i)
508503 func useTicket (eventId,issuer) = {
509- let $t02018420222 = idCallerDate(i)
510- let id = $t02018420222._1
511- let caller = $t02018420222._2
512- let date = $t02018420222._3
513- let $t02022820264 = isPayment(i)
514- let payment = $t02022820264._1
515- let amount = $t02022820264._2
504+ let $t01997420012 = idCallerDate(i)
505+ let id = $t01997420012._1
506+ let caller = $t01997420012._2
507+ let date = $t01997420012._3
508+ let $t02001820054 = isPayment(i)
509+ let payment = $t02001820054._1
510+ let amount = $t02001820054._2
516511 if (!(isDefined(payment.assetId)))
517512 then throw("Wrong asset attached")
518513 else {
519514 let ticketId = toBase58String(value(payment.assetId))
520515 if (!(ticketExist(issuer, eventId, ticketId)))
521516 then throw("Ticket not found")
522517 else {
523518 let amountUsed = getIntegerByKey(keyTicketAmountUsed(issuer, eventId, ticketId))
524519 let maxUsingTime = getIntegerByKey(keyTicketMaxUse(issuer, eventId, ticketId))
525520 if ((maxUsingTime == amountUsed))
526521 then throw((("Ticket used " + toString(amountUsed)) + " times already"))
527522 else [IntegerEntry(keyTicketAmountUsed(issuer, eventId, ticketId), (amountUsed + 1)), ScriptTransfer(Address(fromBase58String(caller)), 1, payment.assetId)]
528523 }
529524 }
530525 }
531526
532527
533528
534529 @Callable(i)
535530 func deleteEntry (entry) = {
536531 let caller = toString(i.caller)
537532 if ((caller == chris))
538533 then [DeleteEntry(entry)]
539534 else throw("no")
540535 }
541536
542537

github/deemru/w8io/3ef1775 
115.01 ms