tx · AmQMAA9kpqWAbpWnjhziZShNUHoSnVNMK88gK5yWLcBg

3NBynfbXC2KastUxhukcMUaE58K9cBdB9UY:  -0.19000000 Waves

2023.03.24 06:59 [2503578] smart account 3NBynfbXC2KastUxhukcMUaE58K9cBdB9UY > SELF 0.00000000 Waves

{ "type": 13, "id": "AmQMAA9kpqWAbpWnjhziZShNUHoSnVNMK88gK5yWLcBg", "fee": 19000000, "feeAssetId": null, "timestamp": 1679630339592, "version": 2, "chainId": 84, "sender": "3NBynfbXC2KastUxhukcMUaE58K9cBdB9UY", "senderPublicKey": "J9DCtJJxJBWZdtDR12BA1U94Q3cZzMi4R6k5hYkAzmzC", "proofs": [ "45NoerogzstNQ2wzXVWDhnrxqEJ5SyGTNSgbBnmDq1cnsx9Ekq8dK9oqcLPynKe4AYjNWTgqa9mSB3rp6UFRTSJY" ], "script": "base64:BgKKFQgCEgQKAggIEhAKDggICAgICAgICAgICAEIEg8KDQgICAgICAgICAgIAQgSBgoECAgICBIECgIICBIICgYIAQEIAQgSBAoCCAgSBAoCCAgSBwoFCAgICAgSBgoECAgICCIOZ2V0U3RyaW5nQnlLZXkiA2tleSIIdW5pdFRlc3QiCW9yYWNsZUZlZSIIc2lnbkRhcHAiC2ZlZVJlY2VpdmVyIgh1c2VyRGFwcCINd2hpdGVsaXN0RGFwcCILc2lnbkFzc2V0SWQiC3VzZG5Bc3NldElkIgt1c2R0QXNzZXRJZCIMd2F2ZXNBc3NldElkIgVjaHJpcyIZZ2V0SW50ZWdlckJ5S2V5RnJvbU9yYWNsZSIPZ2V0SW50ZWdlckJ5S2V5Ig5jaGVja1doaXRlbGlzdCIPZ2V0Qm9vbGVhbkJ5S2V5IgdzaWduQ3V0Igt1c2RuV2F2ZUN1dCIOZGVmYXVsdExpY2VuY2UiEmRlZmF1bHRIYXNoTGljZW5jZSILZGFwcFJ1bm5pbmciDm1haW50ZW5hbmNlTVNHIg11c2VyU3VzcGVuZGVkIgt1c2VyUmVtb3ZlZCIQdXNlclVucmVnaXN0ZXJlZCILdXNlckFsbG93ZWQiGWN1cnJlbnRDZXJ0aWZpY2F0aW9uUHJpY2UiFGNoZWNrU2lnbkNlcnRpZmljYXRlIgZzaWduSUQiBU93bmVyIgpzaGEyNTZIYXNoIgckbWF0Y2gwIgFhIgt2YWxpZGF0ZUNJRCIDY2lkIgx2YWxpZGF0ZUhhc2giBGhhc2giDWtleVVzZXJTdGF0dXMiBmNhbGxlciIHa2V5RGF0ZSIFYXJ0SWQiB2tleU5hbWUiB2tleURlc2MiDWtleURpc3BsYXlDaWQiDWtleUV4cG9ydEhhc2giDGtleUV4cG9ydENpZCIKa2V5TWF4TWludCIJa2V5U2lnbklEIglrZXlJc3N1ZWQiCWtleU9uU2FsZSIOa2V5TGljZW5jZUhhc2giDWtleUxpY2VuY2VDaWQiB2tleVRhZ3MiB2tleVR5cGUiB2tleU5vdGUiCmtleUNyYXdsZXIiDGtleVJveWFsdGllcyIIa2V5UHJpY2UiCmtleUVuZFNhbGUiEmtleUFzc2V0SWRBY2NlcHRlZCIHa2V5RmxhZyISa2V5QXJ0aXN0QWdlbnRBZGRyIgphcnRpc3RBZGRyIhRrZXlQcmltYXJ5U2hhcmVBZ2VudCIYa2V5QXJ0aXN0UHVibGljQWdlbnRBZGRyIhprZXlQcmltYXJ5U2hhcmVQdWJsaWNBZ2VudCIRa2V5SGFzaEJ5VHhpZEFkZHIiBHR4aWQiDmtleU93bmVyQnlIYXNoIg1rZXlpZEJ5U2lnbmlkIgZzaWduSWQiEmtleVR4aWRCeUhhc2hPd25lciIOdmFsaWRhdGVBbGxDSUQiCmNpZERpc3BsYXkiCWNpZEV4cG9ydCIKY2lkTGljZW5jZSIPdmFsaWRhdGVBbGxIYXNoIgxzaGEyNTZFeHBvcnQiDXNoYTI1NkxpY2VuY2UiDnZhbGlkYXRlU3RyaW5nIgNzdHIiA21heCIMdmFsaWRhdGVVc2VyIgp1c2VyU3RhdHVzIgpzZXRMSWNlbmNlIhN2YWxpZGF0ZUFydHdvcmtEYXRhIgpsaWNlbmNlQ0lEIgtsaWNlbmNlSGFzaCIEbmFtZSILZGVzY3JpcHRpb24iBHRhZ3MiCXJveWFsdGllcyIJY2hlY2tVc2VyIglpc1BheW1lbnQiAWkiB3BheW1lbnQiBmFtb3VudCIPdmFsaWRhdGVQYXltZW50IgskdDA5MTgwOTIxNiIHYXNzZXRJZCILaXNBcnRNaW50ZWQiCWFkZHJUb1VzZSIBYiIUdmFsaWRhdGVQcmljZUFzc2V0SWQiDHByaWNlQXNzZXRJZCIMYXJ0d29ya1ByaWNlIgskdDA5ODA0OTg0MCIQYWNjZXB0ZWRBc3NldElkcyIPdmFsaWRhdGVNaW5TZWxsIgVwcmljZSIMbWluU2VsbFdhdmVzIgttaW5TZWxsVXNkbiILbWluU2VsbFNpZ24iDWdldEJpZEFzc2V0SWQiFmdldFByaWNlQXNzZXRJZEZyb21CaWQiCmJpZERhdGFLZXkiB2JpZERhdGEiCmJpZERhdGFBcnIiCWJpZEFtb3VudCIKYmlkQXNzZXRJZCIVaWRDYWxsZXJEYXRlU3BvbnNvcmVkIgZwdWJLZXkiC2lzU3BvbnNvcmVkIhNnZXRfc3BvbnNvcmVkX3dhdmVzIgxpZENhbGxlckRhdGUiB2J1eU1pbnQiBmlzc3VlciIFYmlkSWQiCGJpZE93bmVyIg0kdDAxMzAzNzEzMTA3IgJpZCIEZGF0ZSIKbmV3X2NhbGxlciIFaXNCaWQiCGJsb2NrRW5kIg5jYWxsZXJJc0lzc3VlciIIdG90YWxORlQiC2FydHdvcmtOYW1lIghpc09uU2FsZSIKYW1vdW50U29sZCIKbWF4Q2FuU2VsbCINJHQwMTQ5ODMxNTE3NSIFYWdlbnQiCmFnZW50U2hhcmUiC3B1YmxpY0FnZW50IhBwdWJsaWNBZ2VudFNoYXJlIg1pc1doaXRlbGlzdGVkIgNjdXQiDWFtb3VudEZvclNpZ24iDmFtb3VudEZvckFnZW50IhRhbW91bnRGb3JQdWJsaWNBZ2VudCIQYW1vdW50Rm9yQ3JlYXRvciINbmV3QW1vdW50U29sZCIJaXNzdWVNZXRhIghpc3N1ZU5GVCIFaWRORlQiCnNlbGxTdGF0dXMiCnJlY2VpdmVORlQiCmFzc2V0SWRCaWQiCWJpZERlbE9sZCIJYmlkVXBkYXRlIgdzb2xkS2V5Iglzb2xkVmFsdWUiCHNvbGREYXRhIhRjb21taXNzaW9uc1dpdGhBZ2VudCIaY29tbWlzc2lvbnNXaXRoUHVibGljQWdlbnQiCnR4VG9DYWxsZXIiBmJ1eVJlcyIIYXNTdHJpbmciAmJ2IgNidjAiBmludm9rZSIDdmFsIgR0eXBlIgdjcmF3bGVyIg0kdDAyMDM1NTIwNDI4Ig0kdDAyMDUyOTIwNTk4Ig92YWxpZGF0ZUFydHdvcmsiEHdoaXRlbGlzdGVkX2Ryb3AiDSR0MDIwODk3MjA5ODEiCmVudHJ5RXhpc3QiCWhhc2hFeGlzdCIPaXNTaWduQ2VydGlmaWVkIhdkZWNyZWFzZV93aGl0ZWxpc3RfZHJvcCINJHQwMjQwMTkyNDA4OSINJHQwMjQwOTkyNDE2OCIEZmxhZyIEYWRkciIEbm90ZSINJHQwMjU3OTkyNTgzMyINJHQwMjYyNjkyNjMwMyIMZGF0YVRvRGVsZXRlIgdtYXhNaW50Ig0kdDAyOTEzOTI5MjA5IgZiaWROYnIiCmJhc2VIZWlnaHQiDSR0MDMxNTk1MzE2MzUiDSR0MDMxNjQwMzE2NzYiDSR0MDMyODk2MzI5NjciB2NhbGxlcjEiDSR0MDMzMjAyMzMyNjMiDXJldHVybk1vbmV5VG8iCWJpZFN0YXR1cyICdHgiCHZlcmlmaWVyIgNpbnZOAQFhAQFiCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFAWICAAABYwcAAWQJAQV2YWx1ZQEJAKYIAQkBAWEBAg9jb25mX29yYWNsZV9mZWUAAWUJAQV2YWx1ZQEJAKYIAQkBAWEBAhFjb25mX3NpZ253ZWJfZGFwcAABZgkBAWEBAhFjb25mX2ZlZV9yZWNlaXZlcgABZwMFAWMJAQV2YWx1ZQEJAKYIAQIjM010NFJHTUV5alNXWUFvY1RQcWQ1NXdkSFFRQjNQVTJVQ20JAQV2YWx1ZQEJAKYIAQkBAWEBAg9jb25mX3VzZXJzX2RhcHAAAWgJAQV2YWx1ZQEJAKYIAQkBAWEBAhNjb25mX3doaXRlbGlzdF9kYXBwAAFpCQDZBAEJAQFhAQIYY29uZl9hY2NlcHRlZF9hc3NldF9TSUdOAAFqCQDZBAEJAQFhAQIYY29uZl9hY2NlcHRlZF9hc3NldF9VU0ROAAFrCQDZBAEJAQFhAQIYY29uZl9hY2NlcHRlZF9hc3NldF9VU0RUAAFsAQAAAW0JAQFhAQIMY29uZl9hZG1pbl8xAQFuAQFiCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUBZAUBYgIfSW50ZWdlciB1bmRlZmluZSBvciAwIGluIG9yYWNsZQEBbwEBYgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQFiAAABAXABAWIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUBaAUBYgAAAQFxAQFiCQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFAWIHAAFyAAcAAXMACgABdAkBAWEBAhRjb25mX2RlZmF1bHRfbGljZW5jZQABdQkBAWEBAhljb25mX2RlZmF1bHRfbGljZW5jZV9oYXNoAAF2CQELdmFsdWVPckVsc2UCCQCbCAIFAWcCFGNvbmZfZGFwcF9pc19ydW5uaW5nBgABdwkBC3ZhbHVlT3JFbHNlAgkAnQgCBQFnAhRjb25mX21haW50ZW5hbmNlX21zZwIAAAF4AglTVVNQRU5ERUQAAXkCB1JFTU9WRUQAAXoCDFVOUkVHSVNURVJFRAABQQIHQUxMT1dFRAABQgkBAW4BCQCsAgICEmNlcnRpZmljYXRpb25fZmVlXwkA2AQBBQFpAQFDAwFEAUUBRgQBRwkAnQgCBQFlCQCsAgIJAKwCAgkArAICAghkYXRhX2ZjXwUBRAIBXwUBRQMJAAECBQFHAgZTdHJpbmcEAUgFAUcDCQEIY29udGFpbnMCBQFIBQFGBgcHAQFJAQFKAwkBCGNvbnRhaW5zAgUBSgIBLwMDCQBmAgBMCQCxAgEFAUoJAAACCQCxAgEJAJEDAgkAtQkCBQFKAgEvAAAAOwcJAGYCABAJALECAQkAkQMCCQC1CQIFAUoCAS8AAQcHAQFLAQFMCQAAAgkAsQIBBQFMAEABAU0BAU4JAKwCAgIMdXNlcl9zdGF0dXNfBQFOAQFPAgFOAVAJAKwCAgkArAICCQCsAgICCWFydF9kYXRlXwUBUAIBXwUBTgEBUQIBTgFQCQCsAgIJAKwCAgkArAICAglhcnRfbmFtZV8FAVACAV8FAU4BAVICAU4BUAkArAICCQCsAgIJAKwCAgIJYXJ0X2Rlc2NfBQFQAgFfBQFOAQFTAgFOAVAJAKwCAgkArAICCQCsAgICEGFydF9kaXNwbGF5X2NpZF8FAVACAV8FAU4BAVQCAU4BUAkArAICCQCsAgIJAKwCAgIQYXJ0X2V4cG9ydF9oYXNoXwUBUAIBXwUBTgEBVQIBTgFQCQCsAgIJAKwCAgkArAICAg9hcnRfZXhwb3J0X2NpZF8FAVACAV8FAU4BAVYCAU4BUAkArAICCQCsAgIJAKwCAgIMYXJ0X21heG1pbnRfBQFQAgFfBQFOAQFXAgFOAVAJAKwCAgkArAICCQCsAgICC2FydF9zaWduaWRfBQFQAgFfBQFOAQFYAgFOAVAJAKwCAgkArAICCQCsAgICC2FydF9pc3N1ZWRfBQFQAgFfBQFOAQFZAgFOAVAJAKwCAgkArAICCQCsAgICC2FydF9vbnNhbGVfBQFQAgFfBQFOAQFaAgFOAVAJAKwCAgkArAICCQCsAgICEWFydF9saWNlbmNlX2hhc2hfBQFQAgFfBQFOAQJhYQIBTgFQCQCsAgIJAKwCAgkArAICAhBhcnRfbGljZW5jZV9jaWRfBQFQAgFfBQFOAQJhYgIBTgFQCQCsAgIJAKwCAgkArAICAglhcnRfdGFnc18FAVACAV8FAU4BAmFjAgFOAVAJAKwCAgkArAICCQCsAgICCWFydF90eXBlXwUBUAIBXwUBTgECYWQCAU4BUAkArAICCQCsAgIJAKwCAgIJYXJ0X25vdGVfBQFQAgFfBQFOAQJhZQIBTgFQCQCsAgIJAKwCAgkArAICAhBhcnRfY3Jhd2xlcl9jaWRfBQFQAgFfBQFOAQJhZgIBTgFQCQCsAgIJAKwCAgkArAICAg5hcnRfcm95YWx0aWVzXwUBUAIBXwUBTgECYWcCAU4BUAkArAICCQCsAgIJAKwCAgIKYXJ0X3ByaWNlXwUBUAIBXwUBTgECYWgCAU4BUAkArAICCQCsAgIJAKwCAgIMYXJ0X2VuZHNhbGVfBQFQAgFfBQFOAQJhaQIBTgFQCQCsAgIJAKwCAgkArAICAhJhcnRfYXNzZXRBY2NlcHRlZF8FAVACAV8FAU4BAmFqAgFOAVAJAKwCAgkArAICCQCsAgICCWFydF9mbGFnXwUBUAIBXwUBTgECYWsBAmFsCQCsAgICDWFydGlzdF9hZ2VudF8FAmFsAQJhbQECYWwJAKwCAgIVYXJ0aXN0X2FnZW50X3ByaW1hcnlfBQJhbAECYW4BAmFsCQCsAgICFGFydGlzdF9wdWJsaWNfYWdlbnRfBQJhbAECYW8BAmFsCQCsAgICHGFydGlzdF9wdWJsaWNfYWdlbnRfcHJpbWFyeV8FAmFsAQJhcAIBTgJhcQkArAICCQCsAgIJAKwCAgITZ2V0X2hhc2hieXR4aWRhZGRyXwUCYXECAV8FAU4BAmFyAQFGCQCsAgICEmdldF9vd25lcl9ieV9oYXNoXwUBRgECYXMCAU4CYXQJAKwCAgkArAICCQCsAgICEmdldF9hcnRpZGJ5c2lnbmlkXwUCYXQCAV8FAU4BAmF1AgFGAU4JAKwCAgIXZ2V0X3R4aWRfYnlfaGFzaF9vd25lcl8JANgEAQkA1BYBCQCbAwEJAKwCAgUBRgUBTgECYXYDAmF3AmF4AmF5AwkBASEBCQEBSQEFAmF3CQACAQIRV3JvbmcgRGlzcGxheSBDSUQDCQEBIQEJAQFJAQUCYXgJAAIBAhBXcm9uZyBFeHBvcnQgQ0lEAwMJAQIhPQIFAmF5AgAJAQEhAQkBAUkBBQJheQcJAAIBAhFXcm9uZyBMaWNlbmNlIENJRAYBAmF6AgJhQQJhQgMJAQEhAQkBAUsBBQJhQQkAAgECGEV4cG9ydCBIYXNoIDY0IGNoYXIuIG1heAMJAQEhAQkBAUsBBQJhQgkAAgECGUxpY2VuY2UgSGFzaCA2NCBjaGFyLiBtYXgGAQJhQwICYUQCYUUDCQAAAgkAsQIBBQJhRAAACQACAQIYRmllbGQgY2Fubm90IGJlIGlzIGVtcHR5AwkAZgIJALECAQUCYUQFAmFFCQACAQkArAICBQJhRAIMIGlzIHRvbyBsb25nBgECYUYBAU4EAmFHCQELdmFsdWVPckVsc2UCCQCdCAIFAWcJAQFNAQUBTgUBegMDCQAAAgUCYUcFAXoGCQAAAgUCYUcFAUECLlJlZ2lzdGVyIHRoaXMgYWNjb3VudCBmaXJzdCB3aXRoICJBY2NvdW50IiB0YWIDCQAAAgUCYUcFAXgCEUFjY291bnQgc3VzcGVuZGVkAwkAAAIFAmFHBQF5Ag9BY2NvdW50IHJlbW92ZWQCAAECYUgCAmF5AmFCBAFKAwkAAAIJALECAQUCYXkAAAUBdAUCYXkEAUwDCQAAAgkAsQIBBQJhQgAABQF1BQJhQgkAlAoCBQFKBQFMAQJhSQoBTgJhdwJheAJhSgJhQQJhSwJhTAJhTQJhTgJhTwQCYVAJAQJhRgEFAU4DCQECIT0CBQJhUAIACQACAQUCYVADCQAAAgkAsQIBBQJhdwAACQACAQIbRGlzcGxheSBDSUQgY2Fubm90IGJlIGVtcHR5AwkBASEBCQECYXYDBQJhdwUCYXgFAmFKCQACAQIQUHJvYmxlbSB3aXRoIENJRAMJAQEhAQkBAmF6AgUCYUEFAmFLCQACAQITUHJvYmxlbSB3aXRoIEhhc2hlcwMJAQEhAQkBAmFDAgUCYUwAZAkAAgECEjEwMCBDaGFyLiBtYXggbmFtZQMJAQEhAQkBAmFDAgUCYU0A6AcJAAIBAhoxMDAwIENoYXIuIG1heCBkZXNjcmlwdGlvbgMDCQBmAgAABQJhTwYJAGYCBQJhTwDoBwkAAgECM1JveWFsdGllcyBjYW5ub3QgYmUgbGVzcyB0aGFuIDAlIG9yIGhpZ2hlciB0aGFuIDEwJQMJAGYCCQCQAwEJALUJAgUCYU4CASwABQkAAgECCzUgdGFncyBtYXguAgABAmFRAQJhUgMJAAACCQCQAwEIBQJhUghwYXltZW50cwAACQACAQITTm8gcGF5bWVudCBhdHRhY2hlZAQCYVMJAQV2YWx1ZQEJAJEDAggFAmFSCHBheW1lbnRzAAAEAmFUCQEFdmFsdWUBCAUCYVMGYW1vdW50CQCUCgIFAmFTBQJhVAECYVUBAmFSBAJhVgkBAmFRAQUCYVIEAmFTCAUCYVYCXzEEAmFUCAUCYVYCXzIEAmFXAwMJAQlpc0RlZmluZWQBCAUCYVMHYXNzZXRJZAkAAAIIBQJhUwdhc3NldElkBQFpBwgFAmFTB2Fzc2V0SWQJAAIBAitPbmx5IFNJR04gdG9rZW4gYWNjZXB0ZWQgYXMgdHJhbnNhY3Rpb24gZmVlAwkBAiE9AgUCYVQFAUIJAAIBCQCsAgICGVBheW1lbnQgYW1vdW50IHNob3VsZCBiZSAJAKQDAQUBQgkAlAoCBQJhVAUCYVcBAmFYAgJhWQFQBAFHCQCaCAIFBHRoaXMJAQFYAgUCYVkFAVADCQABAgUBRwIDSW50BAJhWgUBRwMJAQIhPQIFAmFaAAAGBwcBAmJhAwJhUgJiYgJiYwQCYmQJAQJhUQEFAmFSBAJhUwgFAmJkAl8xBAJhVAgFAmJkAl8yBAJhVwMJAQEhAQkBCWlzRGVmaW5lZAEIBQJhUwdhc3NldElkBQR1bml0AwMJAGYCCQCxAgEFAmJiAAAJAAACCQDYBAEJAQV2YWx1ZQEIBQJhUwdhc3NldElkBQJiYgcIBQJhUwdhc3NldElkCQACAQIOV3JvbmcgYXNzZXQgaWQDAwkAAAIFAmFXBQR1bml0CQECIT0CBQJiYgIABwkAAgECDldyb25nIGFzc2V0IGlkAwkBAiE9AgUCYmMFAmFUCQACAQITUGF5bWVudCBkb24ndCBtYXRjaAkAlAoCBQJhVAUCYVcBAmJlAQJhVwMDAwMDCQECIT0CBQJhVwkA2AQBBQFpCQECIT0CBQJhVwkA2AQBBQFsBwkBAiE9AgUCYVcCBVdBVkVTBwkBAiE9AgUCYVcJANgEAQUBagcJAQIhPQIFAmFXCQDYBAEFAWsHCQACAQImT25seSBTSUdOLCBVU0ROLFVTRFQgb3IgV0FWRVMgYWNjZXB0ZWQGAQJiZgICYVcCYmcEAmJoAwUBYwAKCQEBbgECDndhdmVzX21pbl9zZWxsBAJiaQDAhD0EAmJqAwUBYwABCQBoAgUBQgACAwMDAwMDCQAAAgUCYVcJANgEAQUBagkAZgIFAmJpBQJiZwcJAQIhPQIFAmJnAAAHBgMDCQAAAgUCYVcJANgEAQUBawkAZgIFAmJpBQJiZwcJAQIhPQIFAmJnAAAHBgMDCQAAAgUCYVcJANgEAQUBaQkAZgIFAmJqBQJiZwcJAQIhPQIFAmJnAAAHBgMDAwkAAAIFAmFXCQDYBAEFAWwGCQAAAgUCYVcCBVdBVkVTCQBmAgUCYmgFAmJnBwkBAiE9AgUCYmcAAAcJAAIBAhhXcm9uZyBtaW5pbXVtIHNlbGwgcHJpY2UGAQJiawECYVcDCQAAAgUCYVcCBVdBVkVTBQR1bml0CQDZBAEFAmFXAQJibAECYm0EAmJuCQEBYQEJAKwCAgUCYm0CBV9PUEVOAwkAAAIFAmJuAgAJAAIBAg1CaWQgbm90IGZvdW5kBAJibwkAtQkCBQJibgIBXwQCYnAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJibwABBAJicQkBAmJrAQkAkQMCBQJibwAAAwkAZwIAAAUCYnAJAAIBAgxXcm9uZyBhbW91bnQJAJQKAgUCYnAFAmJxAQJicgICYVICYnMDCQEBIQEFAXYJAAIBBQF3BAJidAMJAQIhPQIFAmJzAgAJAQt2YWx1ZU9yRWxzZQIJAQFwAQkArAICCQClCAEJAKcIAQkA2QQBBQJicwIJX2ZyZWVfdHhzAAAAAAQBTgMDCQAAAgkA2AQBCAgFAmFSBmNhbGxlcgVieXRlcwkApQgBBQR0aGlzCQBmAgUCYnQAAAcJAKUIAQkApwgBCQDZBAEFAmJzCQDYBAEICAUCYVIGY2FsbGVyBWJ5dGVzBAJidQMDCQECIT0CBQJicwIACQBmAgUCYnQAAAcJAPwHBAUBaAIJdXNlRnJlZVR4CQDMCAIJAKUIAQkApwgBCQDZBAEFAmJzBQNuaWwFA25pbAUEdW5pdAMJAAACBQJidQUCYnUJAJYKBAkA2AQBCAUCYVINdHJhbnNhY3Rpb25JZAUBTggFCWxhc3RCbG9jawl0aW1lc3RhbXAFAmJ0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJidgECYVIDCQEBIQEFAXYJAAIBBQF3CQCVCgMJANgEAQgFAmFSDXRyYW5zYWN0aW9uSWQJANgEAQgIBQJhUgZjYWxsZXIFYnl0ZXMIBQlsYXN0QmxvY2sJdGltZXN0YW1wAQJidwYCYVIBUAJieAJieQJiegJicwQCYkEJAQJicgIFAmFSBQJicwQCYkIIBQJiQQJfMQQBTggFAmJBAl8yBAJiQwgFAmJBAl8zBAJidAgFAmJBAl80AwYJAAIBCQCkAwEFAmJ0BAJiRAMDCQAAAgkA2AQBCAgFAmFSBmNhbGxlcgVieXRlcwkApQgBBQR0aGlzCQBmAgUCYnQAAAcJAKUIAQkApwgBCQDZBAEFAmJzCQDYBAEICAUCYVIGY2FsbGVyBWJ5dGVzAwYJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQJiRAIDIC8gBQJieAIDIC8gBQJiegIDIC8gBQJicwQCYkUDAwMJAAACBQFOBQJieAkBAiE9AgUCYnoCAAcJAQIhPQIFAmJ5AgAHBgcEAmJGCQEBbwEJAQJhaAIFAU4FAVADAwMJAQIhPQIFAmJGAAAJAGcCBQZoZWlnaHQFAmJGBwkBASEBBQJiRQcJAAIBAgtTYWxlIGVuZGVkLgQCYkcJAAACBQFOBQJieAQCYkgJAQFvAQIQdG90YWxfbmZ0X2lzc3VlZAQBRAkBAWEBCQEBVwIFAmJ4BQFQBAJiSQkBAWEBCQEBUQIFAmJ4BQFQAwkAAAIFAmJJAgAJAAIBAhFBcnQgZG9lc24ndCBleGlzdAQCYkoJAQFxAQkBAVkCBQJieAUBUAQCYksJAQFvAQkBAVgCBQJieAUBUAQCYmMDBQJiRwkAaAIFAUIAAgkBAW8BCQECYWcCBQJieAUBUAQCYmIDBQJiRwkA2AQBBQFpCQEBYQEJAQJhaQIFAmJ4BQFQBAJiTAkBAW8BCQEBVgIFAmJ4BQFQAwMDCQEBIQEFAmJFCQEBIQEFAmJHBwMDCQBnAgAABQJiYwYJAQEhAQUCYkoGCQBnAgAABQJiTAcJAAIBAhBBcnQgbm90IGZvciBzYWxlAwMDCQEBIQEFAmJFBQJiRwcJAGcCAAAFAmJMBwkAAgECFE1heCBpc3N1YWJsZSBub3Qgc2V0BAJhUAkBAmFGAQUCYngDAwUCYkUJAQIhPQIFAmFQAgAHCQACAQUCYVAEAmJtCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICBGJpZF8FAVACAV8FAmJ4AgFfBQJiegIBXwUCYnkEAmJNAwUCYkUJAQJibAEFAmJtCQECYmEDBQJhUgUCYmIFAmJjBAJhVAgFAmJNAl8xBAJhVwgFAmJNAl8yBAJiTgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQFnCQECYWsBBQJieAUBZgQCYk8JAQt2YWx1ZU9yRWxzZQIJAJoIAgUBZwkBAmFtAQUCYngAAAQCYlAJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUBZwkBAmFuAQUCYngFAWYEAmJRCQELdmFsdWVPckVsc2UCCQCaCAIFAWcJAQJhbwEFAmJ4AAAEAmJSCQEBcAEFAmJ4BAJiUwMJAGYCBQJiUgUGaGVpZ2h0AAADCQAAAgUCYVcFAWkFAXIFAXMEAmJUCQBrAwUCYVQFAmJTAGQEAmJVAwMDCQECIT0CBQJiTgUBZgkAZgIFAmJPAAAHCQBmAgUGaGVpZ2h0BQJiUgcJAGsDBQJhVAUCYk8AkE4AAAQCYlYDAwMJAQIhPQIFAmJQBQFmCQBmAgUCYlEAAAcJAGYCBQZoZWlnaHQFAmJSBwkAawMFAmFUBQJiUQCQTgAABAJiVwkAZQIFAmFUBQJiVAMJAAACBQJiSwUCYkwJAAIBAgxBcnQgc29sZCBvdXQEAmJYCQBkAgUCYksAAQQCYlkJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAglDcmVhdG9yOiAFAmJ4AgosCiBBcnRJRDogBQFQAgssCiBTaWduSUQ6IAUBRAIRLAogQXJ0d29yayBuYW1lOiAFAmJJAgosCiBJc3N1ZTogCQCkAwEFAmJYAgEvCQCkAwEFAmJMBAJiWgkAwggFCQCsAgICA1NBXwkApAMBCQBkAgUCYkgAAQUCYlkAAQAABwQCY2EJALgIAQUCYloEAmNiAwMJAAACBQJiWAUCYkwGCQEBIQEFAmJKBwYEAmNjAwMDCQAAAgUBTgUCYngJAQIhPQIFAmJ6AgAHCQECIT0CBQJieQIABwkBEUBleHRyTmF0aXZlKDEwNjIpAQUCYnoIBQJhUgZjYWxsZXIEAmNkAwkBASEBCQEJaXNEZWZpbmVkAQUCYVcCBVdBVkVTCQDYBAEJAQV2YWx1ZQEFAmFXBAJibgkBAWEBCQCsAgIFAmJtAgVfT1BFTgQCY2UJAQtEZWxldGVFbnRyeQEJAKwCAgUCYm0CBV9PUEVOBAJjZgkBC1N0cmluZ0VudHJ5AgkArAICBQJibQIHX0NMT1NFRAkArAICCQCsAgIFAmJuAgFfCQCkAwEFAmJDBAJjZwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAglhcnRfc29sZF8JAKQDAQUCYlgCBF9vZl8JAKQDAQUCYkwCAV8FAVACAV8FAmJ4BAJjaAMJAQEhAQUCYkUJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUBTgIBXwkApAMBBQJiQwIBXwUCYkICAV8JAKQDAQUCYmMCAV8FAmJiAgFfCQDYBAEFAmNhCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKUIAQUCY2MCAV8JAKQDAQUCYkMCAV8FAmJCAgFfCQCkAwEFAmFUAgFfBQJjZAIBXwkA2AQBBQJjYQQCY2kJAQtTdHJpbmdFbnRyeQIFAmNnBQJjaAQCY2oDCQECIT0CBQJiVQAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQFmCQBlAgUCYlQFAmJVBQJhVwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUCYk4FAmJVBQJhVwUDbmlsCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQFmBQJiVAUCYVcFA25pbAQCY2sDCQECIT0CBQJiVgAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQJiUAUCYlYFAmFXCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQJieAkAZQIFAmJXBQJiVgUCYVcFA25pbAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUCYngFAmJXBQJhVwUDbmlsBAJjbAMJAGYCBQJidAAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQFOAAAFBHVuaXQFA25pbAUDbmlsBAJjbQkAzggCCQDOCAIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVgCBQJieAUBUAUCYlgJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICAgRuZnRfCQDYBAEFAmNhBQJjZwkAzAgCCQEMSW50ZWdlckVudHJ5AgIQdG90YWxfbmZ0X2lzc3VlZAkAZAIFAmJIAAEJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhaAIFAmJ4BQFQAAAJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQFZAgUCYngFAVAFAmNiCQDMCAIFAmJaCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAmNjAAEFAmNhBQNuaWwFAmNqBQJjawUCY2wDBQJiRQkAzAgCBQJjaQkAzAgCBQJjZgkAzAgCBQJjZQUCY20JAMwIAgUCY2kFAmNtAQJjbgECY28EAUcFAmNvAwkAAQIFAUcCBlN0cmluZwQCY3AFAUcFAmNwCQACAQIkU3BvbnNvcmVkIFB1YmxpYyBLZXkgU3RyaW5nIGV4cGVjdGVkCgJjcQEHc2V0Q29uZgIBYgJjcgQBTgkApQgBCAUCY3EGY2FsbGVyAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUBbQkAzAgCCQClCAEFBHRoaXMFA25pbAUBTgMJAQhjb250YWlucwIFAWICBWNvbmZfCQDMCAIJAQtTdHJpbmdFbnRyeQIFAWIFAmNyBQNuaWwJAAIBAiBFbnRyaWVzIHN0YXJ0aW5nIHdpdGggY29uZl8gb25seQkAAgECIllvdSBhcmUgbm90IGFsbG93ZWQgdG8gY2hhbmdlIHRoaXMCYVIBCmFkZEFydHdvcmsOAUYBRAJhTAJhTQJhTgJjcwJhdwJhQQJheAJhQgJheQJjdAJhTwJicwQCY3UJAQJicgIFAmFSBQJicwQBUAgFAmN1Al8xBAFOCAUCY3UCXzIEAmJDCAUCY3UCXzMEAmJ0CAUCY3UCXzQDCQEBIQEJAQFLAQUBRgkAAgECJEhhc2ggc2hvdWxkIGJlIDY0IGNoYXJhY3RlcnMgbWF4aW11bQQCY3YJAQJhSAIFAmF5BQJhQgQCYUoIBQJjdgJfMQQCYUsIBQJjdgJfMgQCY3cJAQJhSQoFAU4FAmF3BQJheAUCYUoFAmFBBQJhSwUCYUwFAmFNBQJhTgUCYU8DCQECIT0CBQJjdwIACQACAQIVU29tZXRoaW5nIHdlbnQgd3JvbmchBAJjeAkAZgIJAQFwAQkArAICBQFOAgtfZnJlZV9kcm9wcwAABAJjeQMFAmN4CQCUCgIAAAUBRAkBAmFVAQUCYVIEAmFUCAUCY3kCXzEEAmFXCAUCY3kCXzIDCQEBIQEJAQlpc0RlZmluZWQBBQJhVAkAAgECFFNvbWV0aGluZyB3ZW50IHdyb25nBAJjegkBAWEBCQECYXUCBQFGBQFOAwkBAiE9AgUCY3oCAAkAAgECFFlvdSBhbHJlYWR5IGFkZGVkIGl0BAJjQQkBAWEBCQECYXIBBQFGAwkBAiE9AgUCY0ECAAkAAgECF0hhc2ggYWxyZWFkeSByZWdpc3RlcmVkBAJjQgkBAUMDBQFEBQFOBQFGAwkBASEBBQJjQgkAAgECLFNpZ24gQ2VydGlmaWNhdGUgbm90IGZvdW5kIGZvciB0aGlzIGFkZHJlc3MuBAJjQwMFAmN4CQD8BwQFAWgCC3VzZUZyZWVEcm9wCQDMCAIFAU4FA25pbAUDbmlsBQR1bml0AwkAAAIFAmNDBQJjQwQCY2wDCQBmAgUCYnQAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUBTgAABQR1bml0BQNuaWwFA25pbAkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhcgEFAUYFAU4JAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmF1AgUBRgUBTgUBUAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAU8CBQFOBQFQBQJiQwkAzAgCCQELU3RyaW5nRW50cnkCCQEBUQIFAU4FAVAFAmFMCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFSAgUBTgUBUAUCYU0JAMwIAgkBC1N0cmluZ0VudHJ5AgkBAVMCBQFOBQFQBQJhdwkAzAgCCQELU3RyaW5nRW50cnkCCQEBVQIFAU4FAVAFAmF4CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFUAgUBTgUBUAUCYUEJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAVoCBQFOBQFQBQJhSwkAzAgCCQELU3RyaW5nRW50cnkCCQECYWECBQFOBQFQBQJhSgkAzAgCCQELU3RyaW5nRW50cnkCCQECYWMCBQFOBQFQBQJjcwkAzAgCCQELU3RyaW5nRW50cnkCCQECYWICBQFOBQFQBQJhTgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVYCBQFOBQFQAAAJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAVcCBQFOBQFQBQFECQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBWAIFAU4FAVAAAAkAzAgCCQEMQm9vbGVhbkVudHJ5AgkBAVkCBQFOBQFQBwkAzAgCCQELU3RyaW5nRW50cnkCCQECYXMCBQFOBQFEBQFQCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhcAIFAU4FAVAFAUYJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFlAgUBTgUBUAUCY3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhZgIFAU4FAVAFAmFPCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQFmBQJhVAUBaQUDbmlsBQJjbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJhUgENdXBkYXRlQXJ0d29yaw0CYXECYUwCYU0CYU4CY3MCYXcCYUECYXgCYUICYXkCY3QCYU8CYnMDCQEBIQEFAXYJAAIBBQF3BAJjRAkBAmJyAgUCYVIFAmJzBAJiQggFAmNEAl8xBAFOCAUCY0QCXzIEAmJDCAUCY0QCXzMEAmJ0CAUCY0QCXzQEAmNFCQECYUgCBQJheQUCYUIEAmFKCAUCY0UCXzEEAmFLCAUCY0UCXzIEAmN3CQECYUkKBQFOBQJhdwUCYXgFAmFKBQJhQQUCYUsFAmFMBQJhTQUCYU4FAmFPAwkBAiE9AgUCY3cCAAkAAgECFVNvbWV0aGluZyB3ZW50IHdyb25nIQQCY3oJAQFhAQkBAVECBQFOBQJhcQMJAAACBQJjegIACQACAQIPRW50cnkgbm90IGZvdW5kBAJjRgkBAWEBCQECYWoCBQFOBQJhcQMJAAACBQJjRgIHSUxMRUdBTAkAAgECHUNhbm5vdCB1cGRhdGUgSUxMRUdBTCBhcnR3b3JrAwkBASEBCQECYVgCBQFOBQJhcQQCY2wDCQBmAgUCYnQAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUBTgAABQR1bml0BQNuaWwFA25pbAkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFRAgUBTgUCYXEFAmFMCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFSAgUBTgUCYXEFAmFNCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFTAgUBTgUCYXEFAmF3CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFVAgUBTgUCYXEFAmF4CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFUAgUBTgUCYXEFAmFBCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhYQIFAU4FAmFxBQJhSgkAzAgCCQELU3RyaW5nRW50cnkCCQEBWgIFAU4FAmFxBQJhSwkAzAgCCQELU3RyaW5nRW50cnkCCQECYWICBQFOBQJhcQUCYU4JAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFjAgUBTgUCYXEFAmNzCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhZQIFAU4FAmFxBQJjdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmFmAgUBTgUCYXEFAmFPBQNuaWwFAmNsCQACAQIOQWxyZWFkeSBtaW50ZWQCYVIBC2ZsYWdBcnR3b3JrBAFQAmNHAmNGAmNIBAJjSQkBAmJ2AQUCYVIEAmJCCAUCY0kCXzEEAU4IBQJjSQJfMgMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFAW0JAMwIAgkApQgBBQR0aGlzBQNuaWwFAU4DCQEPY29udGFpbnNFbGVtZW50AgkAzAgCAgdDT05TRU5UCQDMCAICAAkAzAgCAg9DSEFOR0VfUkVRVUlSRUQJAMwIAgIHRkxBR0dFRAkAzAgCAgdJTExFR0FMBQNuaWwFAmNGCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhagIFAmNHBQFQBQJjRgkAzAgCCQELU3RyaW5nRW50cnkCCQECYWQCBQJjRwUBUAUCY0gFA25pbAkAAgEJAKwCAgIOVW5rbm93IHN0YXR1cyAFAmNGCQACAQITWW91IGFyZSBub3QgYWxsb3dlZAJhUgENZGVsZXRlQXJ0d29yawIBUAJjRwQCY0oJAQJidgEFAmFSBAJiQggFAmNKAl8xBAFOCAUCY0oCXzIEAmFZAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUBbQkAzAgCCQClCAEFBHRoaXMFA25pbAUBTgUCY0cFAU4EAmN6CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAQFhAQkBAVECBQJhWQUBUAIgTm8gYXJ0IG1hdGNoaW5nIGZvciB0aGlzIGFkZHJlc3MDCQAAAgUCY3oCAAkAAgECIE5vIGFydCBtYXRjaGluZyBmb3IgdGhpcyBhZGRyZXNzBAFGCQEBYQEJAQJhcAIFAmFZBQFQAwkAAAIFAUYCAAkAAgECJU5vIGFydCBoYXNoIG1hdGNoaW5nIGZvciB0aGlzIGFkZHJlc3MEAUQJAQFhAQkBAVcCBQJhWQUBUAMJAAACBQFEAgAJAAIBAhNObyBTSUdOIElEIG1hdGNoaW5nBAJjSwkAzAgCCQELRGVsZXRlRW50cnkBCQEBTwIFAmFZBQFQCQDMCAIJAQtEZWxldGVFbnRyeQEJAQFRAgUCYVkFAVAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAVICBQJhWQUBUAkAzAgCCQELRGVsZXRlRW50cnkBCQEBUwIFAmFZBQFQCQDMCAIJAQtEZWxldGVFbnRyeQEJAQFVAgUCYVkFAVAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAVQCBQJhWQUBUAkAzAgCCQELRGVsZXRlRW50cnkBCQEBWgIFAmFZBQFQCQDMCAIJAQtEZWxldGVFbnRyeQEJAQJhYQIFAmFZBQFQCQDMCAIJAQtEZWxldGVFbnRyeQEJAQJhYwIFAmFZBQFQCQDMCAIJAQtEZWxldGVFbnRyeQEJAQJhYgIFAmFZBQFQCQDMCAIJAQtEZWxldGVFbnRyeQEJAQFWAgUCYVkFAVAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAVcCBQJhWQUBUAkAzAgCCQELRGVsZXRlRW50cnkBCQEBWAIFAmFZBQFQCQDMCAIJAQtEZWxldGVFbnRyeQEJAQFZAgUCYVkFAVAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAmFqAgUCYVkFAVAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAmFnAgUCYVkFAVAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAmFpAgUCYVkFAVAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAmFyAQUBRgkAzAgCCQELRGVsZXRlRW50cnkBCQECYXMCBQJhWQUBRAkAzAgCCQELRGVsZXRlRW50cnkBCQECYXUCBQFGBQJhWQkAzAgCCQELRGVsZXRlRW50cnkBCQECYWgCBQJhWQUBUAkAzAgCCQELRGVsZXRlRW50cnkBCQECYWQCBQJhWQUBUAkAzAgCCQELRGVsZXRlRW50cnkBCQECYWUCBQJhWQUBUAkAzAgCCQELRGVsZXRlRW50cnkBCQECYWYCBQJhWQUBUAUDbmlsAwkBASEBCQECYVgCBQJhWQUBUAMJAQEhAQUBdgkAAgEFAXcFAmNLAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUBbQkAzAgCCQClCAEFBHRoaXMFA25pbAUBTgUCY0sJAAIBAihBcnQgYWxyZWFkeSBtaW50ZWQsIHlvdSBjYW5ub3QgZGVsZXRlIGl0AmFSAQtzZWxsQXJ0d29yawYBUAJiZwJjTAJhVwJiRgJicwQCY00JAQJicgIFAmFSBQJicwQCYkIIBQJjTQJfMQQBTggFAmNNAl8yBAJiQwgFAmNNAl8zBAJidAgFAmNNAl80BAJiSQkBAWEBCQEBUQIFAU4FAVADCQAAAgUCYkkCAAkAAgECI1RoaXMgYXJ0IGRvZXNuJ3QgbWF0Y2ggeW91ciBhY2NvdW50BAJjRgkBAWEBCQECYWoCBQFOBQFQAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgIPQ0hBTkdFX1JFUVVJUkVECQDMCAICB0ZMQUdHRUQJAMwIAgIHSUxMRUdBTAUDbmlsBQJjRgkAAgECD0ZsYWdnZWQgYXJ0d29yawQCY04JAQFvAQkArAICAhJjdXJyZW50X2JpZGFtb3VudF8FAVADCQBmAgAABQJiRgkAAgECDE5lZ2F0aXZlIGVuZAMDCQBmAgUCYkYAAAMJAQIhPQIFAmNMAAEGCQECIT0CBQJiZwAABwkAAgECOlRpbWVkIG9mZmVyIG9ubHkgYWxsb3dlZCBmb3IgdW5pcXVlIGVkaXRpb24gYW5kIG9mZmVyIG9ubHkEAmNPAwkAAAIFAmJGAAAAAAUGaGVpZ2h0AwkBASEBCQECYmUBBQJhVwkAAgECFVNvbWV0aGluZyB3ZW50IHdyb25nIQMJAQEhAQkBAmJmAgUCYVcFAmJnCQACAQIVU29tZXRoaW5nIHdlbnQgd3JvbmchBAJhUAkBAmFGAQUBTgMJAQIhPQIFAmFQAgAJAAIBBQJhUAQCYksJAQFvAQkBAVgCBQFOBQFQBAJiTAkBAW8BCQEBVgIFAU4FAVADCQBmAgUCY0wAZAkAAgECHDEwMCBlZGl0aW9ucyBtYXggcGVyIGFydHdvcmsDAwkBAiE9AgUCYksAAAkAAAIFAmJLBQJiTAcJAAIBAhRNYXggZWRpdGlvbiByZWFjaGVkLgMDCQBmAgUCYksAAAkBAiE9AgUCYkwFAmNMBwkAAgECJkNhbm5vdCBjaGFuZ2UgbWF4aW11bSBpc3N1YWJsZSBhbnltb3JlAwMJAGYCBQJjTgAACQECIT0CBQJiTAUCY0wHCQACAQIxQ2Fubm90IGNoYW5nZSBtYXhpbXVtIGlzc3VhYmxlIHdpdGggYWN0aXZlIG9yZGVycwQCY2IDAwkAZgIFAmJnAAAJAGYCBQJjTAAABwYHBAJjbAMJAGYCBQJidAAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQFOAAAFBHVuaXQFA25pbAUDbmlsCQDOCAIJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQFZAgUBTgUBUAUCY2IJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhZwIFAU4FAVAFAmJnCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBVgIFAU4FAVAFAmNMCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhaQIFAU4FAVAFAmFXCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYWgCBQFOBQFQCQBkAgUCY08FAmJGBQNuaWwFAmNsAmFSAQpidXlBcnR3b3JrAgFQAmJ4CQECYncGBQJhUgUBUAUCYngCAAIAAgACYVIBBnNldEJpZAIBUAJieAQCY1AJAQJidgEFAmFSBAJiQggFAmNQAl8xBAFOCAUCY1ACXzIEAmJDCAUCY1ACXzMEAmNRCQECYVEBBQJhUgQCYVMIBQJjUQJfMQQCYVQIBQJjUQJfMgQCYVcDCQEBIQEJAQlpc0RlZmluZWQBCAUCYVMHYXNzZXRJZAIFV0FWRVMJANgEAQkBBXZhbHVlAQgFAmFTB2Fzc2V0SWQEAmJGCQEBbwEJAQJhaAIFAmJ4BQFQAwMJAQIhPQIFAmJGAAAJAGcCBQZoZWlnaHQFAmJGBwkAAgECC1NhbGUgZW5kZWQuBAJjTgkBAW8BCQCsAgICEmN1cnJlbnRfYmlkYW1vdW50XwUBUAMJAQEhAQkBAmJlAQUCYVcJAAIBAhJhc3NldCBub3QgYWNjZXB0ZWQDCQEBIQEJAQJiZgIFAmFXBQJhVAkAAgECDldyb25nIG1pbiBzZWxsBAJiSwkBAW8BCQEBWAIFAmJ4BQFQBAJiTAkBAW8BCQEBVgIFAmJ4BQFQAwkAZwIAAAUCYkwJAAIBAiNObyBtYXggZWRpdGlvbiBzZXQgZm9yIHRoaXMgYXJ0d29yawMJAGcCBQJiSwUCYkwJAAIBAhhTb2xkIG91dCwgeW91IGNhbm5vdCBiaWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICBGJpZF8FAVACAV8FAmJ4AgFfBQFOAgFfBQJiQgIFX09QRU4JAKwCAgkArAICCQCsAgIJAKwCAgUCYVcCAV8JAKQDAQUCYVQCAV8JAKQDAQUCYkMJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgISY3VycmVudF9iaWRhbW91bnRfBQFQCQBkAgUCY04AAQUDbmlsAmFSAQlhY2NlcHRCaWQFAVACYngCYnkCYnoCYnMEAmNSCQECYnICBQJhUgUCYnMEAmJCCAUCY1ICXzEEAmNTCAUCY1ICXzIEAmJDCAUCY1ICXzMEAmJ0CAUCY1ICXzQDCQECIT0CBQJjUwUCYngJAAIBAhlZb3UgY2Fubm90IGRvIHRoaXMgYWN0aW9uCQECYncGBQJhUgUBUAUCYngFAmJ5BQJiegUCYnMCYVIBCWNhbmNlbEJpZAQBUAJieAJieQJiegQCY1QJAQJidgEFAmFSBAJiQggFAmNUAl8xBAFOCAUCY1QCXzIEAmJDCAUCY1QCXzMDAwkBAiE9AgUBTgUCYnoJAQIhPQIFAU4FAmJ4BwkAAgECGVlvdSBjYW5ub3QgZG8gdGhpcyBhY3Rpb24EAmNVAwkAAAIFAU4FAmJ4BQJiegUBTgQCY04JAQFvAQkArAICAhJjdXJyZW50X2JpZGFtb3VudF8FAVAEAmJtCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICBGJpZF8FAVACAV8FAmJ4AgFfBQJiegIBXwUCYnkEAmJuCQEBYQEJAKwCAgUCYm0CBV9PUEVOAwkAAAIFAmJuAgAJAAIBAg1CaWQgbm90IGZvdW5kBAJibwkAtQkCBQJibgIBXwQCYVcJAQJiawEJAJEDAgUCYm8AAAQCY1YCCENBTkNFTEVECQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgUCYm0CBV9PUEVOCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICBQJibQIBXwUCY1YJAKwCAgkArAICBQJibgIBXwkApAMBBQJiQwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAhJjdXJyZW50X2JpZGFtb3VudF8FAVAJAGUCBQJjTgABCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQJjVQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJvAAEFAmFXBQNuaWwBAmNXAQJjWAAEAUcFAmNXAwkAAQIFAUcCF0ludm9rZVNjcmlwdFRyYW5zYWN0aW9uBAJjWQUBRwMDAwMJAAACCAUCY1kIZnVuY3Rpb24CCmFkZEFydHdvcmsJAAACCAUCY1kEZEFwcAUEdGhpcwcJAAACCAUCY1kDZmVlAKDCHgcJAAACCAUCY1kKZmVlQXNzZXRJZAUEdW5pdAcJAPQDAwgFAmNXCWJvZHlCeXRlcwkAkQMCCAUCY1cGcHJvb2ZzAAAJANkEAQkBAmNuAQkAkQMCCAUCY1kEYXJncwANAwMDAwkAAAIIBQJjWQhmdW5jdGlvbgINdXBkYXRlQXJ0d29yawkAAAIIBQJjWQRkQXBwBQR0aGlzBwkAAAIIBQJjWQNmZWUAoMIeBwkAAAIIBQJjWQpmZWVBc3NldElkBQR1bml0BwkA9AMDCAUCY1cJYm9keUJ5dGVzCQCRAwIIBQJjVwZwcm9vZnMAAAkA2QQBCQECY24BCQCRAwIIBQJjWQRhcmdzAAwDAwMDCQAAAggFAmNZCGZ1bmN0aW9uAgtzZWxsQXJ0d29yawkAAAIIBQJjWQRkQXBwBQR0aGlzBwkAAAIIBQJjWQNmZWUAoMIeBwkAAAIIBQJjWQpmZWVBc3NldElkBQR1bml0BwkA9AMDCAUCY1cJYm9keUJ5dGVzCQCRAwIIBQJjVwZwcm9vZnMAAAkA2QQBCQECY24BCQCRAwIIBQJjWQRhcmdzAAUDAwMDCQAAAggFAmNZCGZ1bmN0aW9uAglhY2NlcHRCaWQJAAACCAUCY1kEZEFwcAUEdGhpcwcJAAACCAUCY1kDZmVlAKDCHgcJAAACCAUCY1kKZmVlQXNzZXRJZAUEdW5pdAcJAMgTAwgFAmNXCWJvZHlCeXRlcwkAkQMCCAUCY1cGcHJvb2ZzAAAJANkEAQkBAmNuAQkAkQMCCAUCY1kEYXJncwAECQD0AwMIBQJjVwlib2R5Qnl0ZXMJAJEDAggFAmNXBnByb29mcwAACAUCY1cPc2VuZGVyUHVibGljS2V5CQD0AwMIBQJjVwlib2R5Qnl0ZXMJAJEDAggFAmNXBnByb29mcwAACAUCY1cPc2VuZGVyUHVibGljS2V5v7nfsg==", "height": 2503578, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: A3MZ1wmGq3k3n2SJDLyrgY6fx3PXTrGW4Zsgwg4d2t2t Next: BUWmPvsmKTKiion78DmS9xZrAgfxnnbvdQAyyGR6M7SA Diff:
OldNewDifferences
386386 let bt = if ((bs != ""))
387387 then valueOrElse(p((toString(addressFromPublicKey(fromBase58String(bs))) + "_free_txs")), 0)
388388 else 0
389- if ((bt == bt))
390- then {
391- let N = if (if ((toBase58String(aR.caller.bytes) == toString(this)))
392- then (bt > 0)
393- else false)
394- then toString(addressFromPublicKey(fromBase58String(bs)))
395- else toBase58String(aR.caller.bytes)
396- let bu = if (if ((bs != ""))
397- then (bt > 0)
398- else false)
399- then invoke(h, "useFreeTx", [toString(addressFromPublicKey(fromBase58String(bs)))], nil)
400- else unit
401- if ((bu == bu))
402- then $Tuple4(toBase58String(aR.transactionId), N, lastBlock.timestamp, bt)
403- else throw("Strict value is not equal to itself.")
404- }
389+ let N = if (if ((toBase58String(aR.caller.bytes) == toString(this)))
390+ then (bt > 0)
391+ else false)
392+ then toString(addressFromPublicKey(fromBase58String(bs)))
393+ else toBase58String(aR.caller.bytes)
394+ let bu = if (if ((bs != ""))
395+ then (bt > 0)
396+ else false)
397+ then invoke(h, "useFreeTx", [toString(addressFromPublicKey(fromBase58String(bs)))], nil)
398+ else unit
399+ if ((bu == bu))
400+ then $Tuple4(toBase58String(aR.transactionId), N, lastBlock.timestamp, bt)
405401 else throw("Strict value is not equal to itself.")
406402 }
407403
413409
414410 func bw (aR,P,bx,by,bz,bs) = {
415411 let bA = br(aR, bs)
416- if ((bA == bA))
417- then {
418- let bt = bA._4
419- let bB = bA._3
420- let N = bA._2
421- let bC = bA._1
412+ let bB = bA._1
413+ let N = bA._2
414+ let bC = bA._3
415+ let bt = bA._4
416+ if (true)
417+ then throw(toString(bt))
418+ else {
419+ let bD = if (if ((toBase58String(aR.caller.bytes) == toString(this)))
420+ then (bt > 0)
421+ else false)
422+ then toString(addressFromPublicKey(fromBase58String(bs)))
423+ else toBase58String(aR.caller.bytes)
422424 if (true)
423- then throw(toString(bt))
425+ then throw(((((((bD + " / ") + bx) + " / ") + bz) + " / ") + bs))
424426 else {
425- let bD = if (if ((toBase58String(aR.caller.bytes) == toString(this)))
426- then (bt > 0)
427+ let bE = if (if (if ((N == bx))
428+ then (bz != "")
427429 else false)
428- then toString(addressFromPublicKey(fromBase58String(bs)))
429- else toBase58String(aR.caller.bytes)
430- if (true)
431- then throw(((((((bD + " / ") + bx) + " / ") + bz) + " / ") + bs))
430+ then (by != "")
431+ else false)
432+ then true
433+ else false
434+ let bF = o(ah(N, P))
435+ if (if (if ((bF != 0))
436+ then (height >= bF)
437+ else false)
438+ then !(bE)
439+ else false)
440+ then throw("Sale ended.")
432441 else {
433- let bE = if (if (if ((N == bx))
434- then (bz != "")
435- else false)
436- then (by != "")
437- else false)
438- then true
439- else false
440- let bF = o(ah(N, P))
441- if (if (if ((bF != 0))
442- then (height >= bF)
443- else false)
444- then !(bE)
445- else false)
446- then throw("Sale ended.")
442+ let bG = (N == bx)
443+ let bH = o("total_nft_issued")
444+ let D = a(W(bx, P))
445+ let bI = a(Q(bx, P))
446+ if ((bI == ""))
447+ then throw("Art doesn't exist")
447448 else {
448- let bG = (N == bx)
449- let bH = o("total_nft_issued")
450- let D = a(W(bx, P))
451- let bI = a(Q(bx, P))
452- if ((bI == ""))
453- then throw("Art doesn't exist")
454- else {
455- let bJ = q(Y(bx, P))
456- let bK = o(X(bx, P))
457- let bc = if (bG)
458- then (B * 2)
459- else o(ag(bx, P))
460- let bb = if (bG)
461- then toBase58String(i)
462- else a(ai(bx, P))
463- let bL = o(V(bx, P))
464- if (if (if (!(bE))
465- then !(bG)
466- else false)
467- then if (if ((0 >= bc))
468- then true
469- else !(bJ))
470- then true
471- else (0 >= bL)
472- else false)
473- then throw("Art not for sale")
474- else if (if (if (!(bE))
475- then bG
449+ let bJ = q(Y(bx, P))
450+ let bK = o(X(bx, P))
451+ let bc = if (bG)
452+ then (B * 2)
453+ else o(ag(bx, P))
454+ let bb = if (bG)
455+ then toBase58String(i)
456+ else a(ai(bx, P))
457+ let bL = o(V(bx, P))
458+ if (if (if (!(bE))
459+ then !(bG)
460+ else false)
461+ then if (if ((0 >= bc))
462+ then true
463+ else !(bJ))
464+ then true
465+ else (0 >= bL)
466+ else false)
467+ then throw("Art not for sale")
468+ else if (if (if (!(bE))
469+ then bG
470+ else false)
471+ then (0 >= bL)
472+ else false)
473+ then throw("Max issuable not set")
474+ else {
475+ let aP = aF(bx)
476+ if (if (bE)
477+ then (aP != "")
476478 else false)
477- then (0 >= bL)
478- else false)
479- then throw("Max issuable not set")
479+ then throw(aP)
480480 else {
481- let aP = aF(bx)
482- if (if (bE)
483- then (aP != "")
481+ let bm = ((((((("bid_" + P) + "_") + bx) + "_") + bz) + "_") + by)
482+ let bM = if (bE)
483+ then bl(bm)
484+ else ba(aR, bb, bc)
485+ let aT = bM._1
486+ let aW = bM._2
487+ let bN = valueOrElse(getString(g, ak(bx)), f)
488+ let bO = valueOrElse(getInteger(g, am(bx)), 0)
489+ let bP = valueOrElse(getString(g, an(bx)), f)
490+ let bQ = valueOrElse(getInteger(g, ao(bx)), 0)
491+ let bR = p(bx)
492+ let bS = if ((bR > height))
493+ then 0
494+ else if ((aW == i))
495+ then r
496+ else s
497+ let bT = fraction(aT, bS, 100)
498+ let bU = if (if (if ((bN != f))
499+ then (bO > 0)
484500 else false)
485- then throw(aP)
501+ then (height > bR)
502+ else false)
503+ then fraction(aT, bO, 10000)
504+ else 0
505+ let bV = if (if (if ((bP != f))
506+ then (bQ > 0)
507+ else false)
508+ then (height > bR)
509+ else false)
510+ then fraction(aT, bQ, 10000)
511+ else 0
512+ let bW = (aT - bT)
513+ if ((bK == bL))
514+ then throw("Art sold out")
486515 else {
487- let bm = ((((((("bid_" + P) + "_") + bx) + "_") + bz) + "_") + by)
488- let bM = if (bE)
489- then bl(bm)
490- else ba(aR, bb, bc)
491- let aT = bM._1
492- let aW = bM._2
493- let bN = valueOrElse(getString(g, ak(bx)), f)
494- let bO = valueOrElse(getInteger(g, am(bx)), 0)
495- let bP = valueOrElse(getString(g, an(bx)), f)
496- let bQ = valueOrElse(getInteger(g, ao(bx)), 0)
497- let bR = p(bx)
498- let bS = if ((bR > height))
499- then 0
500- else if ((aW == i))
501- then r
502- else s
503- let bT = fraction(aT, bS, 100)
504- let bU = if (if (if ((bN != f))
505- then (bO > 0)
506- else false)
507- then (height > bR)
508- else false)
509- then fraction(aT, bO, 10000)
510- else 0
511- let bV = if (if (if ((bP != f))
512- then (bQ > 0)
513- else false)
514- then (height > bR)
515- else false)
516- then fraction(aT, bQ, 10000)
517- else 0
518- let bW = (aT - bT)
519- if ((bK == bL))
520- then throw("Art sold out")
521- else {
522- let bX = (bK + 1)
523- let bY = ((((((((((("Creator: " + bx) + ",
516+ let bX = (bK + 1)
517+ let bY = ((((((((((("Creator: " + bx) + ",
524518 ArtID: ") + P) + ",
525519 SignID: ") + D) + ",
526520 Artwork name: ") + bI) + ",
527521 Issue: ") + toString(bX)) + "/") + toString(bL))
528- let bZ = Issue(("SA_" + toString((bH + 1))), bY, 1, 0, false)
529- let ca = calculateAssetId(bZ)
530- let cb = if (if ((bX == bL))
531- then true
532- else !(bJ))
533- then false
534- else true
535- let cc = if (if (if ((N == bx))
536- then (bz != "")
537- else false)
538- then (by != "")
539- else false)
540- then addressFromStringValue(bz)
541- else aR.caller
542- let cd = if (!(isDefined(aW)))
543- then "WAVES"
544- else toBase58String(value(aW))
545- let bn = a((bm + "_OPEN"))
546- let ce = DeleteEntry((bm + "_OPEN"))
547- let cf = StringEntry((bm + "_CLOSED"), ((bn + "_") + toString(bB)))
548- let cg = ((((((("art_sold_" + toString(bX)) + "_of_") + toString(bL)) + "_") + P) + "_") + bx)
549- let ch = if (!(bE))
550- then ((((((((((N + "_") + toString(bB)) + "_") + bC) + "_") + toString(bc)) + "_") + bb) + "_") + toBase58String(ca))
551- else ((((((((((toString(cc) + "_") + toString(bB)) + "_") + bC) + "_") + toString(aT)) + "_") + cd) + "_") + toBase58String(ca))
552- let ci = StringEntry(cg, ch)
553- let cj = if ((bU != 0))
554- then [ScriptTransfer(Address(fromBase58String(f)), (bT - bU), aW), ScriptTransfer(Address(fromBase58String(bN)), bU, aW)]
555- else [ScriptTransfer(Address(fromBase58String(f)), bT, aW)]
556- let ck = if ((bV != 0))
557- then [ScriptTransfer(Address(fromBase58String(bP)), bV, aW), ScriptTransfer(Address(fromBase58String(bx)), (bW - bV), aW)]
558- else [ScriptTransfer(Address(fromBase58String(bx)), bW, aW)]
559- let cl = if ((bt > 0))
560- then [ScriptTransfer(Address(fromBase58String(N)), 0, unit)]
561- else nil
562- let cm = ((([IntegerEntry(X(bx, P), bX), StringEntry(("nft_" + toBase58String(ca)), cg), IntegerEntry("total_nft_issued", (bH + 1)), IntegerEntry(ah(bx, P), 0), BooleanEntry(Y(bx, P), cb), bZ, ScriptTransfer(cc, 1, ca)] ++ cj) ++ ck) ++ cl)
563- if (bE)
564- then [ci, cf, ce] :: cm
565- else ci :: cm
566- }
522+ let bZ = Issue(("SA_" + toString((bH + 1))), bY, 1, 0, false)
523+ let ca = calculateAssetId(bZ)
524+ let cb = if (if ((bX == bL))
525+ then true
526+ else !(bJ))
527+ then false
528+ else true
529+ let cc = if (if (if ((N == bx))
530+ then (bz != "")
531+ else false)
532+ then (by != "")
533+ else false)
534+ then addressFromStringValue(bz)
535+ else aR.caller
536+ let cd = if (!(isDefined(aW)))
537+ then "WAVES"
538+ else toBase58String(value(aW))
539+ let bn = a((bm + "_OPEN"))
540+ let ce = DeleteEntry((bm + "_OPEN"))
541+ let cf = StringEntry((bm + "_CLOSED"), ((bn + "_") + toString(bC)))
542+ let cg = ((((((("art_sold_" + toString(bX)) + "_of_") + toString(bL)) + "_") + P) + "_") + bx)
543+ let ch = if (!(bE))
544+ then ((((((((((N + "_") + toString(bC)) + "_") + bB) + "_") + toString(bc)) + "_") + bb) + "_") + toBase58String(ca))
545+ else ((((((((((toString(cc) + "_") + toString(bC)) + "_") + bB) + "_") + toString(aT)) + "_") + cd) + "_") + toBase58String(ca))
546+ let ci = StringEntry(cg, ch)
547+ let cj = if ((bU != 0))
548+ then [ScriptTransfer(Address(fromBase58String(f)), (bT - bU), aW), ScriptTransfer(Address(fromBase58String(bN)), bU, aW)]
549+ else [ScriptTransfer(Address(fromBase58String(f)), bT, aW)]
550+ let ck = if ((bV != 0))
551+ then [ScriptTransfer(Address(fromBase58String(bP)), bV, aW), ScriptTransfer(Address(fromBase58String(bx)), (bW - bV), aW)]
552+ else [ScriptTransfer(Address(fromBase58String(bx)), bW, aW)]
553+ let cl = if ((bt > 0))
554+ then [ScriptTransfer(Address(fromBase58String(N)), 0, unit)]
555+ else nil
556+ let cm = ((([IntegerEntry(X(bx, P), bX), StringEntry(("nft_" + toBase58String(ca)), cg), IntegerEntry("total_nft_issued", (bH + 1)), IntegerEntry(ah(bx, P), 0), BooleanEntry(Y(bx, P), cb), bZ, ScriptTransfer(cc, 1, ca)] ++ cj) ++ ck) ++ cl)
557+ if (bE)
558+ then [ci, cf, ce] :: cm
559+ else ci :: cm
567560 }
568561 }
569- }
562+ }
570563 }
571564 }
572565 }
573566 }
574- else throw("Strict value is not equal to itself.")
575567 }
576568
577569
603595 let cu = br(aR, bs)
604596 let P = cu._1
605597 let N = cu._2
606- let bB = cu._3
598+ let bC = cu._3
607599 let bt = cu._4
608600 if (!(K(F)))
609601 then throw("Hash should be 64 characters maximum")
644636 let cl = if ((bt > 0))
645637 then [ScriptTransfer(Address(fromBase58String(N)), 0, unit)]
646638 else nil
647- ([StringEntry(ar(F), N), StringEntry(au(F, N), P), IntegerEntry(O(N, P), bB), StringEntry(Q(N, P), aL), StringEntry(R(N, P), aM), StringEntry(S(N, P), aw), StringEntry(U(N, P), ax), StringEntry(T(N, P), aA), StringEntry(Z(N, P), aK), StringEntry(aa(N, P), aJ), StringEntry(ac(N, P), cs), StringEntry(ab(N, P), aN), IntegerEntry(V(N, P), 0), StringEntry(W(N, P), D), IntegerEntry(X(N, P), 0), BooleanEntry(Y(N, P), false), StringEntry(as(N, D), P), StringEntry(ap(N, P), F), StringEntry(ae(N, P), ct), IntegerEntry(af(N, P), aO), ScriptTransfer(Address(fromBase58String(f)), aT, i)] ++ cl)
639+ ([StringEntry(ar(F), N), StringEntry(au(F, N), P), IntegerEntry(O(N, P), bC), StringEntry(Q(N, P), aL), StringEntry(R(N, P), aM), StringEntry(S(N, P), aw), StringEntry(U(N, P), ax), StringEntry(T(N, P), aA), StringEntry(Z(N, P), aK), StringEntry(aa(N, P), aJ), StringEntry(ac(N, P), cs), StringEntry(ab(N, P), aN), IntegerEntry(V(N, P), 0), StringEntry(W(N, P), D), IntegerEntry(X(N, P), 0), BooleanEntry(Y(N, P), false), StringEntry(as(N, D), P), StringEntry(ap(N, P), F), StringEntry(ae(N, P), ct), IntegerEntry(af(N, P), aO), ScriptTransfer(Address(fromBase58String(f)), aT, i)] ++ cl)
648640 }
649641 else throw("Strict value is not equal to itself.")
650642 }
662654 then throw(w)
663655 else {
664656 let cD = br(aR, bs)
665- let bC = cD._1
657+ let bB = cD._1
666658 let N = cD._2
667- let bB = cD._3
659+ let bC = cD._3
668660 let bt = cD._4
669661 let cE = aH(ay, aB)
670662 let aJ = cE._1
697689 @Callable(aR)
698690 func flagArtwork (P,cG,cF,cH) = {
699691 let cI = bv(aR)
700- let bC = cI._1
692+ let bB = cI._1
701693 let N = cI._2
702694 if (containsElement([m, toString(this)], N))
703695 then if (containsElement(["CONSENT", "", "CHANGE_REQUIRED", "FLAGGED", "ILLEGAL"], cF))
711703 @Callable(aR)
712704 func deleteArtwork (P,cG) = {
713705 let cJ = bv(aR)
714- let bC = cJ._1
706+ let bB = cJ._1
715707 let N = cJ._2
716708 let aY = if (containsElement([m, toString(this)], N))
717709 then cG
746738 @Callable(aR)
747739 func sellArtwork (P,bg,cL,aW,bF,bs) = {
748740 let cM = br(aR, bs)
749- let bC = cM._1
741+ let bB = cM._1
750742 let N = cM._2
751- let bB = cM._3
743+ let bC = cM._3
752744 let bt = cM._4
753745 let bI = a(Q(N, P))
754746 if ((bI == ""))
824816 @Callable(aR)
825817 func setBid (P,bx) = {
826818 let cP = bv(aR)
827- let bC = cP._1
819+ let bB = cP._1
828820 let N = cP._2
829- let bB = cP._3
821+ let bC = cP._3
830822 let cQ = aQ(aR)
831823 let aS = cQ._1
832824 let aT = cQ._2
851843 then throw("No max edition set for this artwork")
852844 else if ((bK >= bL))
853845 then throw("Sold out, you cannot bid")
854- else [StringEntry((((((((("bid_" + P) + "_") + bx) + "_") + N) + "_") + bC) + "_OPEN"), ((((aW + "_") + toString(aT)) + "_") + toString(bB))), IntegerEntry(("current_bidamount_" + P), (cN + 1))]
846+ else [StringEntry((((((((("bid_" + P) + "_") + bx) + "_") + N) + "_") + bB) + "_OPEN"), ((((aW + "_") + toString(aT)) + "_") + toString(bC))), IntegerEntry(("current_bidamount_" + P), (cN + 1))]
855847 }
856848 }
857849 }
861853 @Callable(aR)
862854 func acceptBid (P,bx,by,bz,bs) = {
863855 let cR = br(aR, bs)
864- let bC = cR._1
856+ let bB = cR._1
865857 let cS = cR._2
866- let bB = cR._3
858+ let bC = cR._3
867859 let bt = cR._4
868860 if ((cS != bx))
869861 then throw("You cannot do this action")
875867 @Callable(aR)
876868 func cancelBid (P,bx,by,bz) = {
877869 let cT = bv(aR)
878- let bC = cT._1
870+ let bB = cT._1
879871 let N = cT._2
880- let bB = cT._3
872+ let bC = cT._3
881873 if (if ((N != bz))
882874 then (N != bx)
883875 else false)
895887 let bo = split(bn, "_")
896888 let aW = bk(bo[0])
897889 let cV = "CANCELED"
898-[DeleteEntry((bm + "_OPEN")), StringEntry(((bm + "_") + cV), ((bn + "_") + toString(bB))), IntegerEntry(("current_bidamount_" + P), (cN - 1)), ScriptTransfer(Address(fromBase58String(cU)), parseIntValue(bo[1]), aW)]
890+[DeleteEntry((bm + "_OPEN")), StringEntry(((bm + "_") + cV), ((bn + "_") + toString(bC))), IntegerEntry(("current_bidamount_" + P), (cN - 1)), ScriptTransfer(Address(fromBase58String(cU)), parseIntValue(bo[1]), aW)]
899891 }
900892 }
901893 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func a (b) = valueOrElse(getString(this, b), "")
55
66
77 let c = false
88
99 let d = value(addressFromString(a("conf_oracle_fee")))
1010
1111 let e = value(addressFromString(a("conf_signweb_dapp")))
1212
1313 let f = a("conf_fee_receiver")
1414
1515 let g = if (c)
1616 then value(addressFromString("3Mt4RGMEyjSWYAocTPqd55wdHQQB3PU2UCm"))
1717 else value(addressFromString(a("conf_users_dapp")))
1818
1919 let h = value(addressFromString(a("conf_whitelist_dapp")))
2020
2121 let i = fromBase58String(a("conf_accepted_asset_SIGN"))
2222
2323 let j = fromBase58String(a("conf_accepted_asset_USDN"))
2424
2525 let k = fromBase58String(a("conf_accepted_asset_USDT"))
2626
2727 let l = base58''
2828
2929 let m = a("conf_admin_1")
3030
3131 func n (b) = valueOrErrorMessage(getInteger(d, b), "Integer undefine or 0 in oracle")
3232
3333
3434 func o (b) = valueOrElse(getInteger(this, b), 0)
3535
3636
3737 func p (b) = valueOrElse(getInteger(h, b), 0)
3838
3939
4040 func q (b) = valueOrElse(getBoolean(this, b), false)
4141
4242
4343 let r = 7
4444
4545 let s = 10
4646
4747 let t = a("conf_default_licence")
4848
4949 let u = a("conf_default_licence_hash")
5050
5151 let v = valueOrElse(getBoolean(g, "conf_dapp_is_running"), true)
5252
5353 let w = valueOrElse(getString(g, "conf_maintenance_msg"), "")
5454
5555 let x = "SUSPENDED"
5656
5757 let y = "REMOVED"
5858
5959 let z = "UNREGISTERED"
6060
6161 let A = "ALLOWED"
6262
6363 let B = n(("certification_fee_" + toBase58String(i)))
6464
6565 func C (D,E,F) = {
6666 let G = getString(e, ((("data_fc_" + D) + "_") + E))
6767 if ($isInstanceOf(G, "String"))
6868 then {
6969 let H = G
7070 if (contains(H, F))
7171 then true
7272 else false
7373 }
7474 else false
7575 }
7676
7777
7878 func I (J) = if (contains(J, "/"))
7979 then if (if ((76 > size(J)))
8080 then (size(split(J, "/")[0]) == 59)
8181 else false)
8282 then (16 > size(split(J, "/")[1]))
8383 else false
8484 else false
8585
8686
8787 func K (L) = (size(L) == 64)
8888
8989
9090 func M (N) = ("user_status_" + N)
9191
9292
9393 func O (N,P) = ((("art_date_" + P) + "_") + N)
9494
9595
9696 func Q (N,P) = ((("art_name_" + P) + "_") + N)
9797
9898
9999 func R (N,P) = ((("art_desc_" + P) + "_") + N)
100100
101101
102102 func S (N,P) = ((("art_display_cid_" + P) + "_") + N)
103103
104104
105105 func T (N,P) = ((("art_export_hash_" + P) + "_") + N)
106106
107107
108108 func U (N,P) = ((("art_export_cid_" + P) + "_") + N)
109109
110110
111111 func V (N,P) = ((("art_maxmint_" + P) + "_") + N)
112112
113113
114114 func W (N,P) = ((("art_signid_" + P) + "_") + N)
115115
116116
117117 func X (N,P) = ((("art_issued_" + P) + "_") + N)
118118
119119
120120 func Y (N,P) = ((("art_onsale_" + P) + "_") + N)
121121
122122
123123 func Z (N,P) = ((("art_licence_hash_" + P) + "_") + N)
124124
125125
126126 func aa (N,P) = ((("art_licence_cid_" + P) + "_") + N)
127127
128128
129129 func ab (N,P) = ((("art_tags_" + P) + "_") + N)
130130
131131
132132 func ac (N,P) = ((("art_type_" + P) + "_") + N)
133133
134134
135135 func ad (N,P) = ((("art_note_" + P) + "_") + N)
136136
137137
138138 func ae (N,P) = ((("art_crawler_cid_" + P) + "_") + N)
139139
140140
141141 func af (N,P) = ((("art_royalties_" + P) + "_") + N)
142142
143143
144144 func ag (N,P) = ((("art_price_" + P) + "_") + N)
145145
146146
147147 func ah (N,P) = ((("art_endsale_" + P) + "_") + N)
148148
149149
150150 func ai (N,P) = ((("art_assetAccepted_" + P) + "_") + N)
151151
152152
153153 func aj (N,P) = ((("art_flag_" + P) + "_") + N)
154154
155155
156156 func ak (al) = ("artist_agent_" + al)
157157
158158
159159 func am (al) = ("artist_agent_primary_" + al)
160160
161161
162162 func an (al) = ("artist_public_agent_" + al)
163163
164164
165165 func ao (al) = ("artist_public_agent_primary_" + al)
166166
167167
168168 func ap (N,aq) = ((("get_hashbytxidaddr_" + aq) + "_") + N)
169169
170170
171171 func ar (F) = ("get_owner_by_hash_" + F)
172172
173173
174174 func as (N,at) = ((("get_artidbysignid_" + at) + "_") + N)
175175
176176
177177 func au (F,N) = ("get_txid_by_hash_owner_" + toBase58String(sha256_16Kb(toBytes((F + N)))))
178178
179179
180180 func av (aw,ax,ay) = if (!(I(aw)))
181181 then throw("Wrong Display CID")
182182 else if (!(I(ax)))
183183 then throw("Wrong Export CID")
184184 else if (if ((ay != ""))
185185 then !(I(ay))
186186 else false)
187187 then throw("Wrong Licence CID")
188188 else true
189189
190190
191191 func az (aA,aB) = if (!(K(aA)))
192192 then throw("Export Hash 64 char. max")
193193 else if (!(K(aB)))
194194 then throw("Licence Hash 64 char. max")
195195 else true
196196
197197
198198 func aC (aD,aE) = if ((size(aD) == 0))
199199 then throw("Field cannot be is empty")
200200 else if ((size(aD) > aE))
201201 then throw((aD + " is too long"))
202202 else true
203203
204204
205205 func aF (N) = {
206206 let aG = valueOrElse(getString(g, M(N)), z)
207207 if (if ((aG == z))
208208 then true
209209 else (aG == A))
210210 then "Register this account first with \"Account\" tab"
211211 else if ((aG == x))
212212 then "Account suspended"
213213 else if ((aG == y))
214214 then "Account removed"
215215 else ""
216216 }
217217
218218
219219 func aH (ay,aB) = {
220220 let J = if ((size(ay) == 0))
221221 then t
222222 else ay
223223 let L = if ((size(aB) == 0))
224224 then u
225225 else aB
226226 $Tuple2(J, L)
227227 }
228228
229229
230230 func aI (N,aw,ax,aJ,aA,aK,aL,aM,aN,aO) = {
231231 let aP = aF(N)
232232 if ((aP != ""))
233233 then throw(aP)
234234 else if ((size(aw) == 0))
235235 then throw("Display CID cannot be empty")
236236 else if (!(av(aw, ax, aJ)))
237237 then throw("Problem with CID")
238238 else if (!(az(aA, aK)))
239239 then throw("Problem with Hashes")
240240 else if (!(aC(aL, 100)))
241241 then throw("100 Char. max name")
242242 else if (!(aC(aM, 1000)))
243243 then throw("1000 Char. max description")
244244 else if (if ((0 > aO))
245245 then true
246246 else (aO > 1000))
247247 then throw("Royalties cannot be less than 0% or higher than 10%")
248248 else if ((size(split(aN, ",")) > 5))
249249 then throw("5 tags max.")
250250 else ""
251251 }
252252
253253
254254 func aQ (aR) = if ((size(aR.payments) == 0))
255255 then throw("No payment attached")
256256 else {
257257 let aS = value(aR.payments[0])
258258 let aT = value(aS.amount)
259259 $Tuple2(aS, aT)
260260 }
261261
262262
263263 func aU (aR) = {
264264 let aV = aQ(aR)
265265 let aS = aV._1
266266 let aT = aV._2
267267 let aW = if (if (isDefined(aS.assetId))
268268 then (aS.assetId == i)
269269 else false)
270270 then aS.assetId
271271 else throw("Only SIGN token accepted as transaction fee")
272272 if ((aT != B))
273273 then throw(("Payment amount should be " + toString(B)))
274274 else $Tuple2(aT, aW)
275275 }
276276
277277
278278 func aX (aY,P) = {
279279 let G = getInteger(this, X(aY, P))
280280 if ($isInstanceOf(G, "Int"))
281281 then {
282282 let aZ = G
283283 if ((aZ != 0))
284284 then true
285285 else false
286286 }
287287 else false
288288 }
289289
290290
291291 func ba (aR,bb,bc) = {
292292 let bd = aQ(aR)
293293 let aS = bd._1
294294 let aT = bd._2
295295 let aW = if (!(isDefined(aS.assetId)))
296296 then unit
297297 else if (if ((size(bb) > 0))
298298 then (toBase58String(value(aS.assetId)) == bb)
299299 else false)
300300 then aS.assetId
301301 else throw("Wrong asset id")
302302 if (if ((aW == unit))
303303 then (bb != "")
304304 else false)
305305 then throw("Wrong asset id")
306306 else if ((bc != aT))
307307 then throw("Payment don't match")
308308 else $Tuple2(aT, aW)
309309 }
310310
311311
312312 func be (aW) = if (if (if (if (if ((aW != toBase58String(i)))
313313 then (aW != toBase58String(l))
314314 else false)
315315 then (aW != "WAVES")
316316 else false)
317317 then (aW != toBase58String(j))
318318 else false)
319319 then (aW != toBase58String(k))
320320 else false)
321321 then throw("Only SIGN, USDN,USDT or WAVES accepted")
322322 else true
323323
324324
325325 func bf (aW,bg) = {
326326 let bh = if (c)
327327 then 10
328328 else n("waves_min_sell")
329329 let bi = 1000000
330330 let bj = if (c)
331331 then 1
332332 else (B * 2)
333333 if (if (if (if (if (if ((aW == toBase58String(j)))
334334 then (bi > bg)
335335 else false)
336336 then (bg != 0)
337337 else false)
338338 then true
339339 else if (if ((aW == toBase58String(k)))
340340 then (bi > bg)
341341 else false)
342342 then (bg != 0)
343343 else false)
344344 then true
345345 else if (if ((aW == toBase58String(i)))
346346 then (bj > bg)
347347 else false)
348348 then (bg != 0)
349349 else false)
350350 then true
351351 else if (if (if ((aW == toBase58String(l)))
352352 then true
353353 else (aW == "WAVES"))
354354 then (bh > bg)
355355 else false)
356356 then (bg != 0)
357357 else false)
358358 then throw("Wrong minimum sell price")
359359 else true
360360 }
361361
362362
363363 func bk (aW) = if ((aW == "WAVES"))
364364 then unit
365365 else fromBase58String(aW)
366366
367367
368368 func bl (bm) = {
369369 let bn = a((bm + "_OPEN"))
370370 if ((bn == ""))
371371 then throw("Bid not found")
372372 else {
373373 let bo = split(bn, "_")
374374 let bp = parseIntValue(bo[1])
375375 let bq = bk(bo[0])
376376 if ((0 >= bp))
377377 then throw("Wrong amount")
378378 else $Tuple2(bp, bq)
379379 }
380380 }
381381
382382
383383 func br (aR,bs) = if (!(v))
384384 then throw(w)
385385 else {
386386 let bt = if ((bs != ""))
387387 then valueOrElse(p((toString(addressFromPublicKey(fromBase58String(bs))) + "_free_txs")), 0)
388388 else 0
389- if ((bt == bt))
390- then {
391- let N = if (if ((toBase58String(aR.caller.bytes) == toString(this)))
392- then (bt > 0)
393- else false)
394- then toString(addressFromPublicKey(fromBase58String(bs)))
395- else toBase58String(aR.caller.bytes)
396- let bu = if (if ((bs != ""))
397- then (bt > 0)
398- else false)
399- then invoke(h, "useFreeTx", [toString(addressFromPublicKey(fromBase58String(bs)))], nil)
400- else unit
401- if ((bu == bu))
402- then $Tuple4(toBase58String(aR.transactionId), N, lastBlock.timestamp, bt)
403- else throw("Strict value is not equal to itself.")
404- }
389+ let N = if (if ((toBase58String(aR.caller.bytes) == toString(this)))
390+ then (bt > 0)
391+ else false)
392+ then toString(addressFromPublicKey(fromBase58String(bs)))
393+ else toBase58String(aR.caller.bytes)
394+ let bu = if (if ((bs != ""))
395+ then (bt > 0)
396+ else false)
397+ then invoke(h, "useFreeTx", [toString(addressFromPublicKey(fromBase58String(bs)))], nil)
398+ else unit
399+ if ((bu == bu))
400+ then $Tuple4(toBase58String(aR.transactionId), N, lastBlock.timestamp, bt)
405401 else throw("Strict value is not equal to itself.")
406402 }
407403
408404
409405 func bv (aR) = if (!(v))
410406 then throw(w)
411407 else $Tuple3(toBase58String(aR.transactionId), toBase58String(aR.caller.bytes), lastBlock.timestamp)
412408
413409
414410 func bw (aR,P,bx,by,bz,bs) = {
415411 let bA = br(aR, bs)
416- if ((bA == bA))
417- then {
418- let bt = bA._4
419- let bB = bA._3
420- let N = bA._2
421- let bC = bA._1
412+ let bB = bA._1
413+ let N = bA._2
414+ let bC = bA._3
415+ let bt = bA._4
416+ if (true)
417+ then throw(toString(bt))
418+ else {
419+ let bD = if (if ((toBase58String(aR.caller.bytes) == toString(this)))
420+ then (bt > 0)
421+ else false)
422+ then toString(addressFromPublicKey(fromBase58String(bs)))
423+ else toBase58String(aR.caller.bytes)
422424 if (true)
423- then throw(toString(bt))
425+ then throw(((((((bD + " / ") + bx) + " / ") + bz) + " / ") + bs))
424426 else {
425- let bD = if (if ((toBase58String(aR.caller.bytes) == toString(this)))
426- then (bt > 0)
427+ let bE = if (if (if ((N == bx))
428+ then (bz != "")
427429 else false)
428- then toString(addressFromPublicKey(fromBase58String(bs)))
429- else toBase58String(aR.caller.bytes)
430- if (true)
431- then throw(((((((bD + " / ") + bx) + " / ") + bz) + " / ") + bs))
430+ then (by != "")
431+ else false)
432+ then true
433+ else false
434+ let bF = o(ah(N, P))
435+ if (if (if ((bF != 0))
436+ then (height >= bF)
437+ else false)
438+ then !(bE)
439+ else false)
440+ then throw("Sale ended.")
432441 else {
433- let bE = if (if (if ((N == bx))
434- then (bz != "")
435- else false)
436- then (by != "")
437- else false)
438- then true
439- else false
440- let bF = o(ah(N, P))
441- if (if (if ((bF != 0))
442- then (height >= bF)
443- else false)
444- then !(bE)
445- else false)
446- then throw("Sale ended.")
442+ let bG = (N == bx)
443+ let bH = o("total_nft_issued")
444+ let D = a(W(bx, P))
445+ let bI = a(Q(bx, P))
446+ if ((bI == ""))
447+ then throw("Art doesn't exist")
447448 else {
448- let bG = (N == bx)
449- let bH = o("total_nft_issued")
450- let D = a(W(bx, P))
451- let bI = a(Q(bx, P))
452- if ((bI == ""))
453- then throw("Art doesn't exist")
454- else {
455- let bJ = q(Y(bx, P))
456- let bK = o(X(bx, P))
457- let bc = if (bG)
458- then (B * 2)
459- else o(ag(bx, P))
460- let bb = if (bG)
461- then toBase58String(i)
462- else a(ai(bx, P))
463- let bL = o(V(bx, P))
464- if (if (if (!(bE))
465- then !(bG)
466- else false)
467- then if (if ((0 >= bc))
468- then true
469- else !(bJ))
470- then true
471- else (0 >= bL)
472- else false)
473- then throw("Art not for sale")
474- else if (if (if (!(bE))
475- then bG
449+ let bJ = q(Y(bx, P))
450+ let bK = o(X(bx, P))
451+ let bc = if (bG)
452+ then (B * 2)
453+ else o(ag(bx, P))
454+ let bb = if (bG)
455+ then toBase58String(i)
456+ else a(ai(bx, P))
457+ let bL = o(V(bx, P))
458+ if (if (if (!(bE))
459+ then !(bG)
460+ else false)
461+ then if (if ((0 >= bc))
462+ then true
463+ else !(bJ))
464+ then true
465+ else (0 >= bL)
466+ else false)
467+ then throw("Art not for sale")
468+ else if (if (if (!(bE))
469+ then bG
470+ else false)
471+ then (0 >= bL)
472+ else false)
473+ then throw("Max issuable not set")
474+ else {
475+ let aP = aF(bx)
476+ if (if (bE)
477+ then (aP != "")
476478 else false)
477- then (0 >= bL)
478- else false)
479- then throw("Max issuable not set")
479+ then throw(aP)
480480 else {
481- let aP = aF(bx)
482- if (if (bE)
483- then (aP != "")
481+ let bm = ((((((("bid_" + P) + "_") + bx) + "_") + bz) + "_") + by)
482+ let bM = if (bE)
483+ then bl(bm)
484+ else ba(aR, bb, bc)
485+ let aT = bM._1
486+ let aW = bM._2
487+ let bN = valueOrElse(getString(g, ak(bx)), f)
488+ let bO = valueOrElse(getInteger(g, am(bx)), 0)
489+ let bP = valueOrElse(getString(g, an(bx)), f)
490+ let bQ = valueOrElse(getInteger(g, ao(bx)), 0)
491+ let bR = p(bx)
492+ let bS = if ((bR > height))
493+ then 0
494+ else if ((aW == i))
495+ then r
496+ else s
497+ let bT = fraction(aT, bS, 100)
498+ let bU = if (if (if ((bN != f))
499+ then (bO > 0)
484500 else false)
485- then throw(aP)
501+ then (height > bR)
502+ else false)
503+ then fraction(aT, bO, 10000)
504+ else 0
505+ let bV = if (if (if ((bP != f))
506+ then (bQ > 0)
507+ else false)
508+ then (height > bR)
509+ else false)
510+ then fraction(aT, bQ, 10000)
511+ else 0
512+ let bW = (aT - bT)
513+ if ((bK == bL))
514+ then throw("Art sold out")
486515 else {
487- let bm = ((((((("bid_" + P) + "_") + bx) + "_") + bz) + "_") + by)
488- let bM = if (bE)
489- then bl(bm)
490- else ba(aR, bb, bc)
491- let aT = bM._1
492- let aW = bM._2
493- let bN = valueOrElse(getString(g, ak(bx)), f)
494- let bO = valueOrElse(getInteger(g, am(bx)), 0)
495- let bP = valueOrElse(getString(g, an(bx)), f)
496- let bQ = valueOrElse(getInteger(g, ao(bx)), 0)
497- let bR = p(bx)
498- let bS = if ((bR > height))
499- then 0
500- else if ((aW == i))
501- then r
502- else s
503- let bT = fraction(aT, bS, 100)
504- let bU = if (if (if ((bN != f))
505- then (bO > 0)
506- else false)
507- then (height > bR)
508- else false)
509- then fraction(aT, bO, 10000)
510- else 0
511- let bV = if (if (if ((bP != f))
512- then (bQ > 0)
513- else false)
514- then (height > bR)
515- else false)
516- then fraction(aT, bQ, 10000)
517- else 0
518- let bW = (aT - bT)
519- if ((bK == bL))
520- then throw("Art sold out")
521- else {
522- let bX = (bK + 1)
523- let bY = ((((((((((("Creator: " + bx) + ",
516+ let bX = (bK + 1)
517+ let bY = ((((((((((("Creator: " + bx) + ",
524518 ArtID: ") + P) + ",
525519 SignID: ") + D) + ",
526520 Artwork name: ") + bI) + ",
527521 Issue: ") + toString(bX)) + "/") + toString(bL))
528- let bZ = Issue(("SA_" + toString((bH + 1))), bY, 1, 0, false)
529- let ca = calculateAssetId(bZ)
530- let cb = if (if ((bX == bL))
531- then true
532- else !(bJ))
533- then false
534- else true
535- let cc = if (if (if ((N == bx))
536- then (bz != "")
537- else false)
538- then (by != "")
539- else false)
540- then addressFromStringValue(bz)
541- else aR.caller
542- let cd = if (!(isDefined(aW)))
543- then "WAVES"
544- else toBase58String(value(aW))
545- let bn = a((bm + "_OPEN"))
546- let ce = DeleteEntry((bm + "_OPEN"))
547- let cf = StringEntry((bm + "_CLOSED"), ((bn + "_") + toString(bB)))
548- let cg = ((((((("art_sold_" + toString(bX)) + "_of_") + toString(bL)) + "_") + P) + "_") + bx)
549- let ch = if (!(bE))
550- then ((((((((((N + "_") + toString(bB)) + "_") + bC) + "_") + toString(bc)) + "_") + bb) + "_") + toBase58String(ca))
551- else ((((((((((toString(cc) + "_") + toString(bB)) + "_") + bC) + "_") + toString(aT)) + "_") + cd) + "_") + toBase58String(ca))
552- let ci = StringEntry(cg, ch)
553- let cj = if ((bU != 0))
554- then [ScriptTransfer(Address(fromBase58String(f)), (bT - bU), aW), ScriptTransfer(Address(fromBase58String(bN)), bU, aW)]
555- else [ScriptTransfer(Address(fromBase58String(f)), bT, aW)]
556- let ck = if ((bV != 0))
557- then [ScriptTransfer(Address(fromBase58String(bP)), bV, aW), ScriptTransfer(Address(fromBase58String(bx)), (bW - bV), aW)]
558- else [ScriptTransfer(Address(fromBase58String(bx)), bW, aW)]
559- let cl = if ((bt > 0))
560- then [ScriptTransfer(Address(fromBase58String(N)), 0, unit)]
561- else nil
562- let cm = ((([IntegerEntry(X(bx, P), bX), StringEntry(("nft_" + toBase58String(ca)), cg), IntegerEntry("total_nft_issued", (bH + 1)), IntegerEntry(ah(bx, P), 0), BooleanEntry(Y(bx, P), cb), bZ, ScriptTransfer(cc, 1, ca)] ++ cj) ++ ck) ++ cl)
563- if (bE)
564- then [ci, cf, ce] :: cm
565- else ci :: cm
566- }
522+ let bZ = Issue(("SA_" + toString((bH + 1))), bY, 1, 0, false)
523+ let ca = calculateAssetId(bZ)
524+ let cb = if (if ((bX == bL))
525+ then true
526+ else !(bJ))
527+ then false
528+ else true
529+ let cc = if (if (if ((N == bx))
530+ then (bz != "")
531+ else false)
532+ then (by != "")
533+ else false)
534+ then addressFromStringValue(bz)
535+ else aR.caller
536+ let cd = if (!(isDefined(aW)))
537+ then "WAVES"
538+ else toBase58String(value(aW))
539+ let bn = a((bm + "_OPEN"))
540+ let ce = DeleteEntry((bm + "_OPEN"))
541+ let cf = StringEntry((bm + "_CLOSED"), ((bn + "_") + toString(bC)))
542+ let cg = ((((((("art_sold_" + toString(bX)) + "_of_") + toString(bL)) + "_") + P) + "_") + bx)
543+ let ch = if (!(bE))
544+ then ((((((((((N + "_") + toString(bC)) + "_") + bB) + "_") + toString(bc)) + "_") + bb) + "_") + toBase58String(ca))
545+ else ((((((((((toString(cc) + "_") + toString(bC)) + "_") + bB) + "_") + toString(aT)) + "_") + cd) + "_") + toBase58String(ca))
546+ let ci = StringEntry(cg, ch)
547+ let cj = if ((bU != 0))
548+ then [ScriptTransfer(Address(fromBase58String(f)), (bT - bU), aW), ScriptTransfer(Address(fromBase58String(bN)), bU, aW)]
549+ else [ScriptTransfer(Address(fromBase58String(f)), bT, aW)]
550+ let ck = if ((bV != 0))
551+ then [ScriptTransfer(Address(fromBase58String(bP)), bV, aW), ScriptTransfer(Address(fromBase58String(bx)), (bW - bV), aW)]
552+ else [ScriptTransfer(Address(fromBase58String(bx)), bW, aW)]
553+ let cl = if ((bt > 0))
554+ then [ScriptTransfer(Address(fromBase58String(N)), 0, unit)]
555+ else nil
556+ let cm = ((([IntegerEntry(X(bx, P), bX), StringEntry(("nft_" + toBase58String(ca)), cg), IntegerEntry("total_nft_issued", (bH + 1)), IntegerEntry(ah(bx, P), 0), BooleanEntry(Y(bx, P), cb), bZ, ScriptTransfer(cc, 1, ca)] ++ cj) ++ ck) ++ cl)
557+ if (bE)
558+ then [ci, cf, ce] :: cm
559+ else ci :: cm
567560 }
568561 }
569- }
562+ }
570563 }
571564 }
572565 }
573566 }
574- else throw("Strict value is not equal to itself.")
575567 }
576568
577569
578570 func cn (co) = {
579571 let G = co
580572 if ($isInstanceOf(G, "String"))
581573 then {
582574 let cp = G
583575 cp
584576 }
585577 else throw("Sponsored Public Key String expected")
586578 }
587579
588580
589581 @Callable(cq)
590582 func setConf (b,cr) = {
591583 let N = toString(cq.caller)
592584 if (containsElement([m, toString(this)], N))
593585 then if (contains(b, "conf_"))
594586 then [StringEntry(b, cr)]
595587 else throw("Entries starting with conf_ only")
596588 else throw("You are not allowed to change this")
597589 }
598590
599591
600592
601593 @Callable(aR)
602594 func addArtwork (F,D,aL,aM,aN,cs,aw,aA,ax,aB,ay,ct,aO,bs) = {
603595 let cu = br(aR, bs)
604596 let P = cu._1
605597 let N = cu._2
606- let bB = cu._3
598+ let bC = cu._3
607599 let bt = cu._4
608600 if (!(K(F)))
609601 then throw("Hash should be 64 characters maximum")
610602 else {
611603 let cv = aH(ay, aB)
612604 let aJ = cv._1
613605 let aK = cv._2
614606 let cw = aI(N, aw, ax, aJ, aA, aK, aL, aM, aN, aO)
615607 if ((cw != ""))
616608 then throw("Something went wrong!")
617609 else {
618610 let cx = (p((N + "_free_drops")) > 0)
619611 let cy = if (cx)
620612 then $Tuple2(0, D)
621613 else aU(aR)
622614 let aT = cy._1
623615 let aW = cy._2
624616 if (!(isDefined(aT)))
625617 then throw("Something went wrong")
626618 else {
627619 let cz = a(au(F, N))
628620 if ((cz != ""))
629621 then throw("You already added it")
630622 else {
631623 let cA = a(ar(F))
632624 if ((cA != ""))
633625 then throw("Hash already registered")
634626 else {
635627 let cB = C(D, N, F)
636628 if (!(cB))
637629 then throw("Sign Certificate not found for this address.")
638630 else {
639631 let cC = if (cx)
640632 then invoke(h, "useFreeDrop", [N], nil)
641633 else unit
642634 if ((cC == cC))
643635 then {
644636 let cl = if ((bt > 0))
645637 then [ScriptTransfer(Address(fromBase58String(N)), 0, unit)]
646638 else nil
647- ([StringEntry(ar(F), N), StringEntry(au(F, N), P), IntegerEntry(O(N, P), bB), StringEntry(Q(N, P), aL), StringEntry(R(N, P), aM), StringEntry(S(N, P), aw), StringEntry(U(N, P), ax), StringEntry(T(N, P), aA), StringEntry(Z(N, P), aK), StringEntry(aa(N, P), aJ), StringEntry(ac(N, P), cs), StringEntry(ab(N, P), aN), IntegerEntry(V(N, P), 0), StringEntry(W(N, P), D), IntegerEntry(X(N, P), 0), BooleanEntry(Y(N, P), false), StringEntry(as(N, D), P), StringEntry(ap(N, P), F), StringEntry(ae(N, P), ct), IntegerEntry(af(N, P), aO), ScriptTransfer(Address(fromBase58String(f)), aT, i)] ++ cl)
639+ ([StringEntry(ar(F), N), StringEntry(au(F, N), P), IntegerEntry(O(N, P), bC), StringEntry(Q(N, P), aL), StringEntry(R(N, P), aM), StringEntry(S(N, P), aw), StringEntry(U(N, P), ax), StringEntry(T(N, P), aA), StringEntry(Z(N, P), aK), StringEntry(aa(N, P), aJ), StringEntry(ac(N, P), cs), StringEntry(ab(N, P), aN), IntegerEntry(V(N, P), 0), StringEntry(W(N, P), D), IntegerEntry(X(N, P), 0), BooleanEntry(Y(N, P), false), StringEntry(as(N, D), P), StringEntry(ap(N, P), F), StringEntry(ae(N, P), ct), IntegerEntry(af(N, P), aO), ScriptTransfer(Address(fromBase58String(f)), aT, i)] ++ cl)
648640 }
649641 else throw("Strict value is not equal to itself.")
650642 }
651643 }
652644 }
653645 }
654646 }
655647 }
656648 }
657649
658650
659651
660652 @Callable(aR)
661653 func updateArtwork (aq,aL,aM,aN,cs,aw,aA,ax,aB,ay,ct,aO,bs) = if (!(v))
662654 then throw(w)
663655 else {
664656 let cD = br(aR, bs)
665- let bC = cD._1
657+ let bB = cD._1
666658 let N = cD._2
667- let bB = cD._3
659+ let bC = cD._3
668660 let bt = cD._4
669661 let cE = aH(ay, aB)
670662 let aJ = cE._1
671663 let aK = cE._2
672664 let cw = aI(N, aw, ax, aJ, aA, aK, aL, aM, aN, aO)
673665 if ((cw != ""))
674666 then throw("Something went wrong!")
675667 else {
676668 let cz = a(Q(N, aq))
677669 if ((cz == ""))
678670 then throw("Entry not found")
679671 else {
680672 let cF = a(aj(N, aq))
681673 if ((cF == "ILLEGAL"))
682674 then throw("Cannot update ILLEGAL artwork")
683675 else if (!(aX(N, aq)))
684676 then {
685677 let cl = if ((bt > 0))
686678 then [ScriptTransfer(Address(fromBase58String(N)), 0, unit)]
687679 else nil
688680 ([StringEntry(Q(N, aq), aL), StringEntry(R(N, aq), aM), StringEntry(S(N, aq), aw), StringEntry(U(N, aq), ax), StringEntry(T(N, aq), aA), StringEntry(aa(N, aq), aJ), StringEntry(Z(N, aq), aK), StringEntry(ab(N, aq), aN), StringEntry(ac(N, aq), cs), StringEntry(ae(N, aq), ct), IntegerEntry(af(N, aq), aO)] ++ cl)
689681 }
690682 else throw("Already minted")
691683 }
692684 }
693685 }
694686
695687
696688
697689 @Callable(aR)
698690 func flagArtwork (P,cG,cF,cH) = {
699691 let cI = bv(aR)
700- let bC = cI._1
692+ let bB = cI._1
701693 let N = cI._2
702694 if (containsElement([m, toString(this)], N))
703695 then if (containsElement(["CONSENT", "", "CHANGE_REQUIRED", "FLAGGED", "ILLEGAL"], cF))
704696 then [StringEntry(aj(cG, P), cF), StringEntry(ad(cG, P), cH)]
705697 else throw(("Unknow status " + cF))
706698 else throw("You are not allowed")
707699 }
708700
709701
710702
711703 @Callable(aR)
712704 func deleteArtwork (P,cG) = {
713705 let cJ = bv(aR)
714- let bC = cJ._1
706+ let bB = cJ._1
715707 let N = cJ._2
716708 let aY = if (containsElement([m, toString(this)], N))
717709 then cG
718710 else N
719711 let cz = valueOrErrorMessage(a(Q(aY, P)), "No art matching for this address")
720712 if ((cz == ""))
721713 then throw("No art matching for this address")
722714 else {
723715 let F = a(ap(aY, P))
724716 if ((F == ""))
725717 then throw("No art hash matching for this address")
726718 else {
727719 let D = a(W(aY, P))
728720 if ((D == ""))
729721 then throw("No SIGN ID matching")
730722 else {
731723 let cK = [DeleteEntry(O(aY, P)), DeleteEntry(Q(aY, P)), DeleteEntry(R(aY, P)), DeleteEntry(S(aY, P)), DeleteEntry(U(aY, P)), DeleteEntry(T(aY, P)), DeleteEntry(Z(aY, P)), DeleteEntry(aa(aY, P)), DeleteEntry(ac(aY, P)), DeleteEntry(ab(aY, P)), DeleteEntry(V(aY, P)), DeleteEntry(W(aY, P)), DeleteEntry(X(aY, P)), DeleteEntry(Y(aY, P)), DeleteEntry(aj(aY, P)), DeleteEntry(ag(aY, P)), DeleteEntry(ai(aY, P)), DeleteEntry(ar(F)), DeleteEntry(as(aY, D)), DeleteEntry(au(F, aY)), DeleteEntry(ah(aY, P)), DeleteEntry(ad(aY, P)), DeleteEntry(ae(aY, P)), DeleteEntry(af(aY, P))]
732724 if (!(aX(aY, P)))
733725 then if (!(v))
734726 then throw(w)
735727 else cK
736728 else if (containsElement([m, toString(this)], N))
737729 then cK
738730 else throw("Art already minted, you cannot delete it")
739731 }
740732 }
741733 }
742734 }
743735
744736
745737
746738 @Callable(aR)
747739 func sellArtwork (P,bg,cL,aW,bF,bs) = {
748740 let cM = br(aR, bs)
749- let bC = cM._1
741+ let bB = cM._1
750742 let N = cM._2
751- let bB = cM._3
743+ let bC = cM._3
752744 let bt = cM._4
753745 let bI = a(Q(N, P))
754746 if ((bI == ""))
755747 then throw("This art doesn't match your account")
756748 else {
757749 let cF = a(aj(N, P))
758750 if (containsElement(["CHANGE_REQUIRED", "FLAGGED", "ILLEGAL"], cF))
759751 then throw("Flagged artwork")
760752 else {
761753 let cN = o(("current_bidamount_" + P))
762754 if ((0 > bF))
763755 then throw("Negative end")
764756 else if (if ((bF > 0))
765757 then if ((cL != 1))
766758 then true
767759 else (bg != 0)
768760 else false)
769761 then throw("Timed offer only allowed for unique edition and offer only")
770762 else {
771763 let cO = if ((bF == 0))
772764 then 0
773765 else height
774766 if (!(be(aW)))
775767 then throw("Something went wrong!")
776768 else if (!(bf(aW, bg)))
777769 then throw("Something went wrong!")
778770 else {
779771 let aP = aF(N)
780772 if ((aP != ""))
781773 then throw(aP)
782774 else {
783775 let bK = o(X(N, P))
784776 let bL = o(V(N, P))
785777 if ((cL > 100))
786778 then throw("100 editions max per artwork")
787779 else if (if ((bK != 0))
788780 then (bK == bL)
789781 else false)
790782 then throw("Max edition reached.")
791783 else if (if ((bK > 0))
792784 then (bL != cL)
793785 else false)
794786 then throw("Cannot change maximum issuable anymore")
795787 else if (if ((cN > 0))
796788 then (bL != cL)
797789 else false)
798790 then throw("Cannot change maximum issuable with active orders")
799791 else {
800792 let cb = if (if ((bg > 0))
801793 then (cL > 0)
802794 else false)
803795 then true
804796 else false
805797 let cl = if ((bt > 0))
806798 then [ScriptTransfer(Address(fromBase58String(N)), 0, unit)]
807799 else nil
808800 ([BooleanEntry(Y(N, P), cb), IntegerEntry(ag(N, P), bg), IntegerEntry(V(N, P), cL), StringEntry(ai(N, P), aW), IntegerEntry(ah(N, P), (cO + bF))] ++ cl)
809801 }
810802 }
811803 }
812804 }
813805 }
814806 }
815807 }
816808
817809
818810
819811 @Callable(aR)
820812 func buyArtwork (P,bx) = bw(aR, P, bx, "", "", "")
821813
822814
823815
824816 @Callable(aR)
825817 func setBid (P,bx) = {
826818 let cP = bv(aR)
827- let bC = cP._1
819+ let bB = cP._1
828820 let N = cP._2
829- let bB = cP._3
821+ let bC = cP._3
830822 let cQ = aQ(aR)
831823 let aS = cQ._1
832824 let aT = cQ._2
833825 let aW = if (!(isDefined(aS.assetId)))
834826 then "WAVES"
835827 else toBase58String(value(aS.assetId))
836828 let bF = o(ah(bx, P))
837829 if (if ((bF != 0))
838830 then (height >= bF)
839831 else false)
840832 then throw("Sale ended.")
841833 else {
842834 let cN = o(("current_bidamount_" + P))
843835 if (!(be(aW)))
844836 then throw("asset not accepted")
845837 else if (!(bf(aW, aT)))
846838 then throw("Wrong min sell")
847839 else {
848840 let bK = o(X(bx, P))
849841 let bL = o(V(bx, P))
850842 if ((0 >= bL))
851843 then throw("No max edition set for this artwork")
852844 else if ((bK >= bL))
853845 then throw("Sold out, you cannot bid")
854- else [StringEntry((((((((("bid_" + P) + "_") + bx) + "_") + N) + "_") + bC) + "_OPEN"), ((((aW + "_") + toString(aT)) + "_") + toString(bB))), IntegerEntry(("current_bidamount_" + P), (cN + 1))]
846+ else [StringEntry((((((((("bid_" + P) + "_") + bx) + "_") + N) + "_") + bB) + "_OPEN"), ((((aW + "_") + toString(aT)) + "_") + toString(bC))), IntegerEntry(("current_bidamount_" + P), (cN + 1))]
855847 }
856848 }
857849 }
858850
859851
860852
861853 @Callable(aR)
862854 func acceptBid (P,bx,by,bz,bs) = {
863855 let cR = br(aR, bs)
864- let bC = cR._1
856+ let bB = cR._1
865857 let cS = cR._2
866- let bB = cR._3
858+ let bC = cR._3
867859 let bt = cR._4
868860 if ((cS != bx))
869861 then throw("You cannot do this action")
870862 else bw(aR, P, bx, by, bz, bs)
871863 }
872864
873865
874866
875867 @Callable(aR)
876868 func cancelBid (P,bx,by,bz) = {
877869 let cT = bv(aR)
878- let bC = cT._1
870+ let bB = cT._1
879871 let N = cT._2
880- let bB = cT._3
872+ let bC = cT._3
881873 if (if ((N != bz))
882874 then (N != bx)
883875 else false)
884876 then throw("You cannot do this action")
885877 else {
886878 let cU = if ((N == bx))
887879 then bz
888880 else N
889881 let cN = o(("current_bidamount_" + P))
890882 let bm = ((((((("bid_" + P) + "_") + bx) + "_") + bz) + "_") + by)
891883 let bn = a((bm + "_OPEN"))
892884 if ((bn == ""))
893885 then throw("Bid not found")
894886 else {
895887 let bo = split(bn, "_")
896888 let aW = bk(bo[0])
897889 let cV = "CANCELED"
898-[DeleteEntry((bm + "_OPEN")), StringEntry(((bm + "_") + cV), ((bn + "_") + toString(bB))), IntegerEntry(("current_bidamount_" + P), (cN - 1)), ScriptTransfer(Address(fromBase58String(cU)), parseIntValue(bo[1]), aW)]
890+[DeleteEntry((bm + "_OPEN")), StringEntry(((bm + "_") + cV), ((bn + "_") + toString(bC))), IntegerEntry(("current_bidamount_" + P), (cN - 1)), ScriptTransfer(Address(fromBase58String(cU)), parseIntValue(bo[1]), aW)]
899891 }
900892 }
901893 }
902894
903895
904896 @Verifier(cW)
905897 func cX () = {
906898 let G = cW
907899 if ($isInstanceOf(G, "InvokeScriptTransaction"))
908900 then {
909901 let cY = G
910902 if (if (if (if ((cY.function == "addArtwork"))
911903 then (cY.dApp == this)
912904 else false)
913905 then (cY.fee == 500000)
914906 else false)
915907 then (cY.feeAssetId == unit)
916908 else false)
917909 then sigVerify(cW.bodyBytes, cW.proofs[0], fromBase58String(cn(cY.args[13])))
918910 else if (if (if (if ((cY.function == "updateArtwork"))
919911 then (cY.dApp == this)
920912 else false)
921913 then (cY.fee == 500000)
922914 else false)
923915 then (cY.feeAssetId == unit)
924916 else false)
925917 then sigVerify(cW.bodyBytes, cW.proofs[0], fromBase58String(cn(cY.args[12])))
926918 else if (if (if (if ((cY.function == "sellArtwork"))
927919 then (cY.dApp == this)
928920 else false)
929921 then (cY.fee == 500000)
930922 else false)
931923 then (cY.feeAssetId == unit)
932924 else false)
933925 then sigVerify(cW.bodyBytes, cW.proofs[0], fromBase58String(cn(cY.args[5])))
934926 else if (if (if (if ((cY.function == "acceptBid"))
935927 then (cY.dApp == this)
936928 else false)
937929 then (cY.fee == 500000)
938930 else false)
939931 then (cY.feeAssetId == unit)
940932 else false)
941933 then sigVerify_128Kb(cW.bodyBytes, cW.proofs[0], fromBase58String(cn(cY.args[4])))
942934 else sigVerify(cW.bodyBytes, cW.proofs[0], cW.senderPublicKey)
943935 }
944936 else sigVerify(cW.bodyBytes, cW.proofs[0], cW.senderPublicKey)
945937 }
946938

github/deemru/w8io/3da68e3 
218.16 ms