tx · E62xW1pw9jgsZWimhpYQf5o6ytu658QTQt6nywD19fmV

3NBynfbXC2KastUxhukcMUaE58K9cBdB9UY:  -0.01900000 Waves

2023.03.24 06:53 [2503572] smart account 3NBynfbXC2KastUxhukcMUaE58K9cBdB9UY > SELF 0.00000000 Waves

{ "type": 13, "id": "E62xW1pw9jgsZWimhpYQf5o6ytu658QTQt6nywD19fmV", "fee": 1900000, "feeAssetId": null, "timestamp": 1679630032767, "version": 2, "chainId": 84, "sender": "3NBynfbXC2KastUxhukcMUaE58K9cBdB9UY", "senderPublicKey": "J9DCtJJxJBWZdtDR12BA1U94Q3cZzMi4R6k5hYkAzmzC", "proofs": [ "62bG8SDr5Hw5PWdQQtF723omuGPo3ViGHGiqj2UDJGxbJMg7au68s82hHURv6W19L5BWWXMtPjcmgMaKtd65b5B6" ], "script": "base64:BgKKFQgCEgQKAggIEhAKDggICAgICAgICAgICAEIEg8KDQgICAgICAgICAgIAQgSBgoECAgICBIECgIICBIICgYIAQEIAQgSBAoCCAgSBAoCCAgSBwoFCAgICAgSBgoECAgICCIOZ2V0U3RyaW5nQnlLZXkiA2tleSIIdW5pdFRlc3QiCW9yYWNsZUZlZSIIc2lnbkRhcHAiC2ZlZVJlY2VpdmVyIgh1c2VyRGFwcCINd2hpdGVsaXN0RGFwcCILc2lnbkFzc2V0SWQiC3VzZG5Bc3NldElkIgt1c2R0QXNzZXRJZCIMd2F2ZXNBc3NldElkIgVjaHJpcyIZZ2V0SW50ZWdlckJ5S2V5RnJvbU9yYWNsZSIPZ2V0SW50ZWdlckJ5S2V5Ig5jaGVja1doaXRlbGlzdCIPZ2V0Qm9vbGVhbkJ5S2V5IgdzaWduQ3V0Igt1c2RuV2F2ZUN1dCIOZGVmYXVsdExpY2VuY2UiEmRlZmF1bHRIYXNoTGljZW5jZSILZGFwcFJ1bm5pbmciDm1haW50ZW5hbmNlTVNHIg11c2VyU3VzcGVuZGVkIgt1c2VyUmVtb3ZlZCIQdXNlclVucmVnaXN0ZXJlZCILdXNlckFsbG93ZWQiGWN1cnJlbnRDZXJ0aWZpY2F0aW9uUHJpY2UiFGNoZWNrU2lnbkNlcnRpZmljYXRlIgZzaWduSUQiBU93bmVyIgpzaGEyNTZIYXNoIgckbWF0Y2gwIgFhIgt2YWxpZGF0ZUNJRCIDY2lkIgx2YWxpZGF0ZUhhc2giBGhhc2giDWtleVVzZXJTdGF0dXMiBmNhbGxlciIHa2V5RGF0ZSIFYXJ0SWQiB2tleU5hbWUiB2tleURlc2MiDWtleURpc3BsYXlDaWQiDWtleUV4cG9ydEhhc2giDGtleUV4cG9ydENpZCIKa2V5TWF4TWludCIJa2V5U2lnbklEIglrZXlJc3N1ZWQiCWtleU9uU2FsZSIOa2V5TGljZW5jZUhhc2giDWtleUxpY2VuY2VDaWQiB2tleVRhZ3MiB2tleVR5cGUiB2tleU5vdGUiCmtleUNyYXdsZXIiDGtleVJveWFsdGllcyIIa2V5UHJpY2UiCmtleUVuZFNhbGUiEmtleUFzc2V0SWRBY2NlcHRlZCIHa2V5RmxhZyISa2V5QXJ0aXN0QWdlbnRBZGRyIgphcnRpc3RBZGRyIhRrZXlQcmltYXJ5U2hhcmVBZ2VudCIYa2V5QXJ0aXN0UHVibGljQWdlbnRBZGRyIhprZXlQcmltYXJ5U2hhcmVQdWJsaWNBZ2VudCIRa2V5SGFzaEJ5VHhpZEFkZHIiBHR4aWQiDmtleU93bmVyQnlIYXNoIg1rZXlpZEJ5U2lnbmlkIgZzaWduSWQiEmtleVR4aWRCeUhhc2hPd25lciIOdmFsaWRhdGVBbGxDSUQiCmNpZERpc3BsYXkiCWNpZEV4cG9ydCIKY2lkTGljZW5jZSIPdmFsaWRhdGVBbGxIYXNoIgxzaGEyNTZFeHBvcnQiDXNoYTI1NkxpY2VuY2UiDnZhbGlkYXRlU3RyaW5nIgNzdHIiA21heCIMdmFsaWRhdGVVc2VyIgp1c2VyU3RhdHVzIgpzZXRMSWNlbmNlIhN2YWxpZGF0ZUFydHdvcmtEYXRhIgpsaWNlbmNlQ0lEIgtsaWNlbmNlSGFzaCIEbmFtZSILZGVzY3JpcHRpb24iBHRhZ3MiCXJveWFsdGllcyIJY2hlY2tVc2VyIglpc1BheW1lbnQiAWkiB3BheW1lbnQiBmFtb3VudCIPdmFsaWRhdGVQYXltZW50IgskdDA5MTgwOTIxNiIHYXNzZXRJZCILaXNBcnRNaW50ZWQiCWFkZHJUb1VzZSIBYiIUdmFsaWRhdGVQcmljZUFzc2V0SWQiDHByaWNlQXNzZXRJZCIMYXJ0d29ya1ByaWNlIgskdDA5ODA0OTg0MCIQYWNjZXB0ZWRBc3NldElkcyIPdmFsaWRhdGVNaW5TZWxsIgVwcmljZSIMbWluU2VsbFdhdmVzIgttaW5TZWxsVXNkbiILbWluU2VsbFNpZ24iDWdldEJpZEFzc2V0SWQiFmdldFByaWNlQXNzZXRJZEZyb21CaWQiCmJpZERhdGFLZXkiB2JpZERhdGEiCmJpZERhdGFBcnIiCWJpZEFtb3VudCIKYmlkQXNzZXRJZCIVaWRDYWxsZXJEYXRlU3BvbnNvcmVkIgZwdWJLZXkiC2lzU3BvbnNvcmVkIhNnZXRfc3BvbnNvcmVkX3dhdmVzIgxpZENhbGxlckRhdGUiB2J1eU1pbnQiBmlzc3VlciIFYmlkSWQiCGJpZE93bmVyIg0kdDAxMzEwMDEzMTcwIgJpZCIEZGF0ZSIKbmV3X2NhbGxlciIFaXNCaWQiCGJsb2NrRW5kIg5jYWxsZXJJc0lzc3VlciIIdG90YWxORlQiC2FydHdvcmtOYW1lIghpc09uU2FsZSIKYW1vdW50U29sZCIKbWF4Q2FuU2VsbCINJHQwMTUxMTIxNTMwNCIFYWdlbnQiCmFnZW50U2hhcmUiC3B1YmxpY0FnZW50IhBwdWJsaWNBZ2VudFNoYXJlIg1pc1doaXRlbGlzdGVkIgNjdXQiDWFtb3VudEZvclNpZ24iDmFtb3VudEZvckFnZW50IhRhbW91bnRGb3JQdWJsaWNBZ2VudCIQYW1vdW50Rm9yQ3JlYXRvciINbmV3QW1vdW50U29sZCIJaXNzdWVNZXRhIghpc3N1ZU5GVCIFaWRORlQiCnNlbGxTdGF0dXMiCnJlY2VpdmVORlQiCmFzc2V0SWRCaWQiCWJpZERlbE9sZCIJYmlkVXBkYXRlIgdzb2xkS2V5Iglzb2xkVmFsdWUiCHNvbGREYXRhIhRjb21taXNzaW9uc1dpdGhBZ2VudCIaY29tbWlzc2lvbnNXaXRoUHVibGljQWdlbnQiCnR4VG9DYWxsZXIiBmJ1eVJlcyIIYXNTdHJpbmciAmJ2IgNidjAiBmludm9rZSIDdmFsIgR0eXBlIgdjcmF3bGVyIg0kdDAyMDQ4MDIwNTUzIg0kdDAyMDY1NDIwNzIzIg92YWxpZGF0ZUFydHdvcmsiEHdoaXRlbGlzdGVkX2Ryb3AiDSR0MDIxMDIyMjExMDYiCmVudHJ5RXhpc3QiCWhhc2hFeGlzdCIPaXNTaWduQ2VydGlmaWVkIhdkZWNyZWFzZV93aGl0ZWxpc3RfZHJvcCINJHQwMjQxNDAyNDIxMCINJHQwMjQyMjAyNDI4OSIEZmxhZyIEYWRkciIEbm90ZSINJHQwMjU5MTYyNTk1MCINJHQwMjYzODYyNjQyMCIMZGF0YVRvRGVsZXRlIgdtYXhNaW50Ig0kdDAyOTI1NjI5MzI2IgZiaWROYnIiCmJhc2VIZWlnaHQiDSR0MDMxNzA4MzE3NDgiDSR0MDMxNzUzMzE3ODkiDSR0MDMzMDA5MzMwODAiB2NhbGxlcjEiDSR0MDMzMzE1MzMzNzYiDXJldHVybk1vbmV5VG8iCWJpZFN0YXR1cyICdHgiCHZlcmlmaWVyIgNpbnZOAQFhAQFiCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFAWICAAABYwcAAWQJAQV2YWx1ZQEJAKYIAQkBAWEBAg9jb25mX29yYWNsZV9mZWUAAWUJAQV2YWx1ZQEJAKYIAQkBAWEBAhFjb25mX3NpZ253ZWJfZGFwcAABZgkBAWEBAhFjb25mX2ZlZV9yZWNlaXZlcgABZwMFAWMJAQV2YWx1ZQEJAKYIAQIjM010NFJHTUV5alNXWUFvY1RQcWQ1NXdkSFFRQjNQVTJVQ20JAQV2YWx1ZQEJAKYIAQkBAWEBAg9jb25mX3VzZXJzX2RhcHAAAWgJAQV2YWx1ZQEJAKYIAQkBAWEBAhNjb25mX3doaXRlbGlzdF9kYXBwAAFpCQDZBAEJAQFhAQIYY29uZl9hY2NlcHRlZF9hc3NldF9TSUdOAAFqCQDZBAEJAQFhAQIYY29uZl9hY2NlcHRlZF9hc3NldF9VU0ROAAFrCQDZBAEJAQFhAQIYY29uZl9hY2NlcHRlZF9hc3NldF9VU0RUAAFsAQAAAW0JAQFhAQIMY29uZl9hZG1pbl8xAQFuAQFiCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUBZAUBYgIfSW50ZWdlciB1bmRlZmluZSBvciAwIGluIG9yYWNsZQEBbwEBYgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQFiAAABAXABAWIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUBaAUBYgAAAQFxAQFiCQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFAWIHAAFyAAcAAXMACgABdAkBAWEBAhRjb25mX2RlZmF1bHRfbGljZW5jZQABdQkBAWEBAhljb25mX2RlZmF1bHRfbGljZW5jZV9oYXNoAAF2CQELdmFsdWVPckVsc2UCCQCbCAIFAWcCFGNvbmZfZGFwcF9pc19ydW5uaW5nBgABdwkBC3ZhbHVlT3JFbHNlAgkAnQgCBQFnAhRjb25mX21haW50ZW5hbmNlX21zZwIAAAF4AglTVVNQRU5ERUQAAXkCB1JFTU9WRUQAAXoCDFVOUkVHSVNURVJFRAABQQIHQUxMT1dFRAABQgkBAW4BCQCsAgICEmNlcnRpZmljYXRpb25fZmVlXwkA2AQBBQFpAQFDAwFEAUUBRgQBRwkAnQgCBQFlCQCsAgIJAKwCAgkArAICAghkYXRhX2ZjXwUBRAIBXwUBRQMJAAECBQFHAgZTdHJpbmcEAUgFAUcDCQEIY29udGFpbnMCBQFIBQFGBgcHAQFJAQFKAwkBCGNvbnRhaW5zAgUBSgIBLwMDCQBmAgBMCQCxAgEFAUoJAAACCQCxAgEJAJEDAgkAtQkCBQFKAgEvAAAAOwcJAGYCABAJALECAQkAkQMCCQC1CQIFAUoCAS8AAQcHAQFLAQFMCQAAAgkAsQIBBQFMAEABAU0BAU4JAKwCAgIMdXNlcl9zdGF0dXNfBQFOAQFPAgFOAVAJAKwCAgkArAICCQCsAgICCWFydF9kYXRlXwUBUAIBXwUBTgEBUQIBTgFQCQCsAgIJAKwCAgkArAICAglhcnRfbmFtZV8FAVACAV8FAU4BAVICAU4BUAkArAICCQCsAgIJAKwCAgIJYXJ0X2Rlc2NfBQFQAgFfBQFOAQFTAgFOAVAJAKwCAgkArAICCQCsAgICEGFydF9kaXNwbGF5X2NpZF8FAVACAV8FAU4BAVQCAU4BUAkArAICCQCsAgIJAKwCAgIQYXJ0X2V4cG9ydF9oYXNoXwUBUAIBXwUBTgEBVQIBTgFQCQCsAgIJAKwCAgkArAICAg9hcnRfZXhwb3J0X2NpZF8FAVACAV8FAU4BAVYCAU4BUAkArAICCQCsAgIJAKwCAgIMYXJ0X21heG1pbnRfBQFQAgFfBQFOAQFXAgFOAVAJAKwCAgkArAICCQCsAgICC2FydF9zaWduaWRfBQFQAgFfBQFOAQFYAgFOAVAJAKwCAgkArAICCQCsAgICC2FydF9pc3N1ZWRfBQFQAgFfBQFOAQFZAgFOAVAJAKwCAgkArAICCQCsAgICC2FydF9vbnNhbGVfBQFQAgFfBQFOAQFaAgFOAVAJAKwCAgkArAICCQCsAgICEWFydF9saWNlbmNlX2hhc2hfBQFQAgFfBQFOAQJhYQIBTgFQCQCsAgIJAKwCAgkArAICAhBhcnRfbGljZW5jZV9jaWRfBQFQAgFfBQFOAQJhYgIBTgFQCQCsAgIJAKwCAgkArAICAglhcnRfdGFnc18FAVACAV8FAU4BAmFjAgFOAVAJAKwCAgkArAICCQCsAgICCWFydF90eXBlXwUBUAIBXwUBTgECYWQCAU4BUAkArAICCQCsAgIJAKwCAgIJYXJ0X25vdGVfBQFQAgFfBQFOAQJhZQIBTgFQCQCsAgIJAKwCAgkArAICAhBhcnRfY3Jhd2xlcl9jaWRfBQFQAgFfBQFOAQJhZgIBTgFQCQCsAgIJAKwCAgkArAICAg5hcnRfcm95YWx0aWVzXwUBUAIBXwUBTgECYWcCAU4BUAkArAICCQCsAgIJAKwCAgIKYXJ0X3ByaWNlXwUBUAIBXwUBTgECYWgCAU4BUAkArAICCQCsAgIJAKwCAgIMYXJ0X2VuZHNhbGVfBQFQAgFfBQFOAQJhaQIBTgFQCQCsAgIJAKwCAgkArAICAhJhcnRfYXNzZXRBY2NlcHRlZF8FAVACAV8FAU4BAmFqAgFOAVAJAKwCAgkArAICCQCsAgICCWFydF9mbGFnXwUBUAIBXwUBTgECYWsBAmFsCQCsAgICDWFydGlzdF9hZ2VudF8FAmFsAQJhbQECYWwJAKwCAgIVYXJ0aXN0X2FnZW50X3ByaW1hcnlfBQJhbAECYW4BAmFsCQCsAgICFGFydGlzdF9wdWJsaWNfYWdlbnRfBQJhbAECYW8BAmFsCQCsAgICHGFydGlzdF9wdWJsaWNfYWdlbnRfcHJpbWFyeV8FAmFsAQJhcAIBTgJhcQkArAICCQCsAgIJAKwCAgITZ2V0X2hhc2hieXR4aWRhZGRyXwUCYXECAV8FAU4BAmFyAQFGCQCsAgICEmdldF9vd25lcl9ieV9oYXNoXwUBRgECYXMCAU4CYXQJAKwCAgkArAICCQCsAgICEmdldF9hcnRpZGJ5c2lnbmlkXwUCYXQCAV8FAU4BAmF1AgFGAU4JAKwCAgIXZ2V0X3R4aWRfYnlfaGFzaF9vd25lcl8JANgEAQkA1BYBCQCbAwEJAKwCAgUBRgUBTgECYXYDAmF3AmF4AmF5AwkBASEBCQEBSQEFAmF3CQACAQIRV3JvbmcgRGlzcGxheSBDSUQDCQEBIQEJAQFJAQUCYXgJAAIBAhBXcm9uZyBFeHBvcnQgQ0lEAwMJAQIhPQIFAmF5AgAJAQEhAQkBAUkBBQJheQcJAAIBAhFXcm9uZyBMaWNlbmNlIENJRAYBAmF6AgJhQQJhQgMJAQEhAQkBAUsBBQJhQQkAAgECGEV4cG9ydCBIYXNoIDY0IGNoYXIuIG1heAMJAQEhAQkBAUsBBQJhQgkAAgECGUxpY2VuY2UgSGFzaCA2NCBjaGFyLiBtYXgGAQJhQwICYUQCYUUDCQAAAgkAsQIBBQJhRAAACQACAQIYRmllbGQgY2Fubm90IGJlIGlzIGVtcHR5AwkAZgIJALECAQUCYUQFAmFFCQACAQkArAICBQJhRAIMIGlzIHRvbyBsb25nBgECYUYBAU4EAmFHCQELdmFsdWVPckVsc2UCCQCdCAIFAWcJAQFNAQUBTgUBegMDCQAAAgUCYUcFAXoGCQAAAgUCYUcFAUECLlJlZ2lzdGVyIHRoaXMgYWNjb3VudCBmaXJzdCB3aXRoICJBY2NvdW50IiB0YWIDCQAAAgUCYUcFAXgCEUFjY291bnQgc3VzcGVuZGVkAwkAAAIFAmFHBQF5Ag9BY2NvdW50IHJlbW92ZWQCAAECYUgCAmF5AmFCBAFKAwkAAAIJALECAQUCYXkAAAUBdAUCYXkEAUwDCQAAAgkAsQIBBQJhQgAABQF1BQJhQgkAlAoCBQFKBQFMAQJhSQoBTgJhdwJheAJhSgJhQQJhSwJhTAJhTQJhTgJhTwQCYVAJAQJhRgEFAU4DCQECIT0CBQJhUAIACQACAQUCYVADCQAAAgkAsQIBBQJhdwAACQACAQIbRGlzcGxheSBDSUQgY2Fubm90IGJlIGVtcHR5AwkBASEBCQECYXYDBQJhdwUCYXgFAmFKCQACAQIQUHJvYmxlbSB3aXRoIENJRAMJAQEhAQkBAmF6AgUCYUEFAmFLCQACAQITUHJvYmxlbSB3aXRoIEhhc2hlcwMJAQEhAQkBAmFDAgUCYUwAZAkAAgECEjEwMCBDaGFyLiBtYXggbmFtZQMJAQEhAQkBAmFDAgUCYU0A6AcJAAIBAhoxMDAwIENoYXIuIG1heCBkZXNjcmlwdGlvbgMDCQBmAgAABQJhTwYJAGYCBQJhTwDoBwkAAgECM1JveWFsdGllcyBjYW5ub3QgYmUgbGVzcyB0aGFuIDAlIG9yIGhpZ2hlciB0aGFuIDEwJQMJAGYCCQCQAwEJALUJAgUCYU4CASwABQkAAgECCzUgdGFncyBtYXguAgABAmFRAQJhUgMJAAACCQCQAwEIBQJhUghwYXltZW50cwAACQACAQITTm8gcGF5bWVudCBhdHRhY2hlZAQCYVMJAQV2YWx1ZQEJAJEDAggFAmFSCHBheW1lbnRzAAAEAmFUCQEFdmFsdWUBCAUCYVMGYW1vdW50CQCUCgIFAmFTBQJhVAECYVUBAmFSBAJhVgkBAmFRAQUCYVIEAmFTCAUCYVYCXzEEAmFUCAUCYVYCXzIEAmFXAwMJAQlpc0RlZmluZWQBCAUCYVMHYXNzZXRJZAkAAAIIBQJhUwdhc3NldElkBQFpBwgFAmFTB2Fzc2V0SWQJAAIBAitPbmx5IFNJR04gdG9rZW4gYWNjZXB0ZWQgYXMgdHJhbnNhY3Rpb24gZmVlAwkBAiE9AgUCYVQFAUIJAAIBCQCsAgICGVBheW1lbnQgYW1vdW50IHNob3VsZCBiZSAJAKQDAQUBQgkAlAoCBQJhVAUCYVcBAmFYAgJhWQFQBAFHCQCaCAIFBHRoaXMJAQFYAgUCYVkFAVADCQABAgUBRwIDSW50BAJhWgUBRwMJAQIhPQIFAmFaAAAGBwcBAmJhAwJhUgJiYgJiYwQCYmQJAQJhUQEFAmFSBAJhUwgFAmJkAl8xBAJhVAgFAmJkAl8yBAJhVwMJAQEhAQkBCWlzRGVmaW5lZAEIBQJhUwdhc3NldElkBQR1bml0AwMJAGYCCQCxAgEFAmJiAAAJAAACCQDYBAEJAQV2YWx1ZQEIBQJhUwdhc3NldElkBQJiYgcIBQJhUwdhc3NldElkCQACAQIOV3JvbmcgYXNzZXQgaWQDAwkAAAIFAmFXBQR1bml0CQECIT0CBQJiYgIABwkAAgECDldyb25nIGFzc2V0IGlkAwkBAiE9AgUCYmMFAmFUCQACAQITUGF5bWVudCBkb24ndCBtYXRjaAkAlAoCBQJhVAUCYVcBAmJlAQJhVwMDAwMDCQECIT0CBQJhVwkA2AQBBQFpCQECIT0CBQJhVwkA2AQBBQFsBwkBAiE9AgUCYVcCBVdBVkVTBwkBAiE9AgUCYVcJANgEAQUBagcJAQIhPQIFAmFXCQDYBAEFAWsHCQACAQImT25seSBTSUdOLCBVU0ROLFVTRFQgb3IgV0FWRVMgYWNjZXB0ZWQGAQJiZgICYVcCYmcEAmJoAwUBYwAKCQEBbgECDndhdmVzX21pbl9zZWxsBAJiaQDAhD0EAmJqAwUBYwABCQBoAgUBQgACAwMDAwMDCQAAAgUCYVcJANgEAQUBagkAZgIFAmJpBQJiZwcJAQIhPQIFAmJnAAAHBgMDCQAAAgUCYVcJANgEAQUBawkAZgIFAmJpBQJiZwcJAQIhPQIFAmJnAAAHBgMDCQAAAgUCYVcJANgEAQUBaQkAZgIFAmJqBQJiZwcJAQIhPQIFAmJnAAAHBgMDAwkAAAIFAmFXCQDYBAEFAWwGCQAAAgUCYVcCBVdBVkVTCQBmAgUCYmgFAmJnBwkBAiE9AgUCYmcAAAcJAAIBAhhXcm9uZyBtaW5pbXVtIHNlbGwgcHJpY2UGAQJiawECYVcDCQAAAgUCYVcCBVdBVkVTBQR1bml0CQDZBAEFAmFXAQJibAECYm0EAmJuCQEBYQEJAKwCAgUCYm0CBV9PUEVOAwkAAAIFAmJuAgAJAAIBAg1CaWQgbm90IGZvdW5kBAJibwkAtQkCBQJibgIBXwQCYnAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJibwABBAJicQkBAmJrAQkAkQMCBQJibwAAAwkAZwIAAAUCYnAJAAIBAgxXcm9uZyBhbW91bnQJAJQKAgUCYnAFAmJxAQJicgICYVICYnMDCQEBIQEFAXYJAAIBBQF3BAJidAMJAQIhPQIFAmJzAgAJAQt2YWx1ZU9yRWxzZQIJAQFwAQkArAICCQClCAEJAKcIAQkA2QQBBQJicwIJX2ZyZWVfdHhzAAAAAAMJAAACBQJidAUCYnQEAU4DAwkAAAIJANgEAQgIBQJhUgZjYWxsZXIFYnl0ZXMJAKUIAQUEdGhpcwkAZgIFAmJ0AAAHCQClCAEJAKcIAQkA2QQBBQJicwkA2AQBCAgFAmFSBmNhbGxlcgVieXRlcwQCYnUDAwkBAiE9AgUCYnMCAAkAZgIFAmJ0AAAHCQD8BwQFAWgCCXVzZUZyZWVUeAkAzAgCCQClCAEJAKcIAQkA2QQBBQJicwUDbmlsBQNuaWwFBHVuaXQDCQAAAgUCYnUFAmJ1AwYJAAIBCQClAwEJAGYCBQJidAAACQCWCgQJANgEAQgFAmFSDXRyYW5zYWN0aW9uSWQFAU4IBQlsYXN0QmxvY2sJdGltZXN0YW1wCQBmAgUCYnQAAAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECYnYBAmFSAwkBASEBBQF2CQACAQUBdwkAlQoDCQDYBAEIBQJhUg10cmFuc2FjdGlvbklkCQDYBAEICAUCYVIGY2FsbGVyBWJ5dGVzCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAECYncGAmFSAVACYngCYnkCYnoCYnMEAmJBCQECYnICBQJhUgUCYnMEAmJCCAUCYkECXzEEAU4IBQJiQQJfMgQCYkMIBQJiQQJfMwQCYnQIBQJiQQJfNAMGCQACAQkArAICCQCsAgIJAKUDAQkAAAIJANgEAQgIBQJhUgZjYWxsZXIFYnl0ZXMJAKUIAQUEdGhpcwIDIC8gCQClAwEFAmJ0BAJiRAMDCQAAAgkA2AQBCAgFAmFSBmNhbGxlcgVieXRlcwkApQgBBQR0aGlzBQJidAcJAKUIAQkApwgBCQDZBAEFAmJzCQDYBAEICAUCYVIGY2FsbGVyBWJ5dGVzAwYJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQJiRAIDIC8gBQJieAIDIC8gBQJiegIDIC8gBQJicwQCYkUDAwMJAAACBQFOBQJieAkBAiE9AgUCYnoCAAcJAQIhPQIFAmJ5AgAHBgcEAmJGCQEBbwEJAQJhaAIFAU4FAVADAwMJAQIhPQIFAmJGAAAJAGcCBQZoZWlnaHQFAmJGBwkBASEBBQJiRQcJAAIBAgtTYWxlIGVuZGVkLgQCYkcJAAACBQFOBQJieAQCYkgJAQFvAQIQdG90YWxfbmZ0X2lzc3VlZAQBRAkBAWEBCQEBVwIFAmJ4BQFQBAJiSQkBAWEBCQEBUQIFAmJ4BQFQAwkAAAIFAmJJAgAJAAIBAhFBcnQgZG9lc24ndCBleGlzdAQCYkoJAQFxAQkBAVkCBQJieAUBUAQCYksJAQFvAQkBAVgCBQJieAUBUAQCYmMDBQJiRwkAaAIFAUIAAgkBAW8BCQECYWcCBQJieAUBUAQCYmIDBQJiRwkA2AQBBQFpCQEBYQEJAQJhaQIFAmJ4BQFQBAJiTAkBAW8BCQEBVgIFAmJ4BQFQAwMDCQEBIQEFAmJFCQEBIQEFAmJHBwMDCQBnAgAABQJiYwYJAQEhAQUCYkoGCQBnAgAABQJiTAcJAAIBAhBBcnQgbm90IGZvciBzYWxlAwMDCQEBIQEFAmJFBQJiRwcJAGcCAAAFAmJMBwkAAgECFE1heCBpc3N1YWJsZSBub3Qgc2V0BAJhUAkBAmFGAQUCYngDAwUCYkUJAQIhPQIFAmFQAgAHCQACAQUCYVAEAmJtCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICBGJpZF8FAVACAV8FAmJ4AgFfBQJiegIBXwUCYnkEAmJNAwUCYkUJAQJibAEFAmJtCQECYmEDBQJhUgUCYmIFAmJjBAJhVAgFAmJNAl8xBAJhVwgFAmJNAl8yBAJiTgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQFnCQECYWsBBQJieAUBZgQCYk8JAQt2YWx1ZU9yRWxzZQIJAJoIAgUBZwkBAmFtAQUCYngAAAQCYlAJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUBZwkBAmFuAQUCYngFAWYEAmJRCQELdmFsdWVPckVsc2UCCQCaCAIFAWcJAQJhbwEFAmJ4AAAEAmJSCQEBcAEFAmJ4BAJiUwMJAGYCBQJiUgUGaGVpZ2h0AAADCQAAAgUCYVcFAWkFAXIFAXMEAmJUCQBrAwUCYVQFAmJTAGQEAmJVAwMDCQECIT0CBQJiTgUBZgkAZgIFAmJPAAAHCQBmAgUGaGVpZ2h0BQJiUgcJAGsDBQJhVAUCYk8AkE4AAAQCYlYDAwMJAQIhPQIFAmJQBQFmCQBmAgUCYlEAAAcJAGYCBQZoZWlnaHQFAmJSBwkAawMFAmFUBQJiUQCQTgAABAJiVwkAZQIFAmFUBQJiVAMJAAACBQJiSwUCYkwJAAIBAgxBcnQgc29sZCBvdXQEAmJYCQBkAgUCYksAAQQCYlkJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAglDcmVhdG9yOiAFAmJ4AgosCiBBcnRJRDogBQFQAgssCiBTaWduSUQ6IAUBRAIRLAogQXJ0d29yayBuYW1lOiAFAmJJAgosCiBJc3N1ZTogCQCkAwEFAmJYAgEvCQCkAwEFAmJMBAJiWgkAwggFCQCsAgICA1NBXwkApAMBCQBkAgUCYkgAAQUCYlkAAQAABwQCY2EJALgIAQUCYloEAmNiAwMJAAACBQJiWAUCYkwGCQEBIQEFAmJKBwYEAmNjAwMDCQAAAgUBTgUCYngJAQIhPQIFAmJ6AgAHCQECIT0CBQJieQIABwkBEUBleHRyTmF0aXZlKDEwNjIpAQUCYnoIBQJhUgZjYWxsZXIEAmNkAwkBASEBCQEJaXNEZWZpbmVkAQUCYVcCBVdBVkVTCQDYBAEJAQV2YWx1ZQEFAmFXBAJibgkBAWEBCQCsAgIFAmJtAgVfT1BFTgQCY2UJAQtEZWxldGVFbnRyeQEJAKwCAgUCYm0CBV9PUEVOBAJjZgkBC1N0cmluZ0VudHJ5AgkArAICBQJibQIHX0NMT1NFRAkArAICCQCsAgIFAmJuAgFfCQCkAwEFAmJDBAJjZwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAglhcnRfc29sZF8JAKQDAQUCYlgCBF9vZl8JAKQDAQUCYkwCAV8FAVACAV8FAmJ4BAJjaAMJAQEhAQUCYkUJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUBTgIBXwkApAMBBQJiQwIBXwUCYkICAV8JAKQDAQUCYmMCAV8FAmJiAgFfCQDYBAEFAmNhCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKUIAQUCY2MCAV8JAKQDAQUCYkMCAV8FAmJCAgFfCQCkAwEFAmFUAgFfBQJjZAIBXwkA2AQBBQJjYQQCY2kJAQtTdHJpbmdFbnRyeQIFAmNnBQJjaAQCY2oDCQECIT0CBQJiVQAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQFmCQBlAgUCYlQFAmJVBQJhVwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUCYk4FAmJVBQJhVwUDbmlsCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQFmBQJiVAUCYVcFA25pbAQCY2sDCQECIT0CBQJiVgAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQJiUAUCYlYFAmFXCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQJieAkAZQIFAmJXBQJiVgUCYVcFA25pbAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUCYngFAmJXBQJhVwUDbmlsBAJjbAMFAmJ0CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQFOAAAFBHVuaXQFA25pbAUDbmlsBAJjbQkAzggCCQDOCAIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVgCBQJieAUBUAUCYlgJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICAgRuZnRfCQDYBAEFAmNhBQJjZwkAzAgCCQEMSW50ZWdlckVudHJ5AgIQdG90YWxfbmZ0X2lzc3VlZAkAZAIFAmJIAAEJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhaAIFAmJ4BQFQAAAJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQFZAgUCYngFAVAFAmNiCQDMCAIFAmJaCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAmNjAAEFAmNhBQNuaWwFAmNqBQJjawUCY2wDBQJiRQkAzAgCBQJjaQkAzAgCBQJjZgkAzAgCBQJjZQUCY20JAMwIAgUCY2kFAmNtAQJjbgECY28EAUcFAmNvAwkAAQIFAUcCBlN0cmluZwQCY3AFAUcFAmNwCQACAQIkU3BvbnNvcmVkIFB1YmxpYyBLZXkgU3RyaW5nIGV4cGVjdGVkCgJjcQEHc2V0Q29uZgIBYgJjcgQBTgkApQgBCAUCY3EGY2FsbGVyAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUBbQkAzAgCCQClCAEFBHRoaXMFA25pbAUBTgMJAQhjb250YWlucwIFAWICBWNvbmZfCQDMCAIJAQtTdHJpbmdFbnRyeQIFAWIFAmNyBQNuaWwJAAIBAiBFbnRyaWVzIHN0YXJ0aW5nIHdpdGggY29uZl8gb25seQkAAgECIllvdSBhcmUgbm90IGFsbG93ZWQgdG8gY2hhbmdlIHRoaXMCYVIBCmFkZEFydHdvcmsOAUYBRAJhTAJhTQJhTgJjcwJhdwJhQQJheAJhQgJheQJjdAJhTwJicwQCY3UJAQJicgIFAmFSBQJicwQBUAgFAmN1Al8xBAFOCAUCY3UCXzIEAmJDCAUCY3UCXzMEAmJ0CAUCY3UCXzQDCQEBIQEJAQFLAQUBRgkAAgECJEhhc2ggc2hvdWxkIGJlIDY0IGNoYXJhY3RlcnMgbWF4aW11bQQCY3YJAQJhSAIFAmF5BQJhQgQCYUoIBQJjdgJfMQQCYUsIBQJjdgJfMgQCY3cJAQJhSQoFAU4FAmF3BQJheAUCYUoFAmFBBQJhSwUCYUwFAmFNBQJhTgUCYU8DCQECIT0CBQJjdwIACQACAQIVU29tZXRoaW5nIHdlbnQgd3JvbmchBAJjeAkAZgIJAQFwAQkArAICBQFOAgtfZnJlZV9kcm9wcwAABAJjeQMFAmN4CQCUCgIAAAUBRAkBAmFVAQUCYVIEAmFUCAUCY3kCXzEEAmFXCAUCY3kCXzIDCQEBIQEJAQlpc0RlZmluZWQBBQJhVAkAAgECFFNvbWV0aGluZyB3ZW50IHdyb25nBAJjegkBAWEBCQECYXUCBQFGBQFOAwkBAiE9AgUCY3oCAAkAAgECFFlvdSBhbHJlYWR5IGFkZGVkIGl0BAJjQQkBAWEBCQECYXIBBQFGAwkBAiE9AgUCY0ECAAkAAgECF0hhc2ggYWxyZWFkeSByZWdpc3RlcmVkBAJjQgkBAUMDBQFEBQFOBQFGAwkBASEBBQJjQgkAAgECLFNpZ24gQ2VydGlmaWNhdGUgbm90IGZvdW5kIGZvciB0aGlzIGFkZHJlc3MuBAJjQwMFAmN4CQD8BwQFAWgCC3VzZUZyZWVEcm9wCQDMCAIFAU4FA25pbAUDbmlsBQR1bml0AwkAAAIFAmNDBQJjQwQCY2wDBQJidAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUBTgAABQR1bml0BQNuaWwFA25pbAkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhcgEFAUYFAU4JAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmF1AgUBRgUBTgUBUAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAU8CBQFOBQFQBQJiQwkAzAgCCQELU3RyaW5nRW50cnkCCQEBUQIFAU4FAVAFAmFMCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFSAgUBTgUBUAUCYU0JAMwIAgkBC1N0cmluZ0VudHJ5AgkBAVMCBQFOBQFQBQJhdwkAzAgCCQELU3RyaW5nRW50cnkCCQEBVQIFAU4FAVAFAmF4CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFUAgUBTgUBUAUCYUEJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAVoCBQFOBQFQBQJhSwkAzAgCCQELU3RyaW5nRW50cnkCCQECYWECBQFOBQFQBQJhSgkAzAgCCQELU3RyaW5nRW50cnkCCQECYWMCBQFOBQFQBQJjcwkAzAgCCQELU3RyaW5nRW50cnkCCQECYWICBQFOBQFQBQJhTgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVYCBQFOBQFQAAAJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAVcCBQFOBQFQBQFECQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBWAIFAU4FAVAAAAkAzAgCCQEMQm9vbGVhbkVudHJ5AgkBAVkCBQFOBQFQBwkAzAgCCQELU3RyaW5nRW50cnkCCQECYXMCBQFOBQFEBQFQCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhcAIFAU4FAVAFAUYJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFlAgUBTgUBUAUCY3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhZgIFAU4FAVAFAmFPCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQFmBQJhVAUBaQUDbmlsBQJjbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJhUgENdXBkYXRlQXJ0d29yaw0CYXECYUwCYU0CYU4CY3MCYXcCYUECYXgCYUICYXkCY3QCYU8CYnMDCQEBIQEFAXYJAAIBBQF3BAJjRAkBAmJyAgUCYVIFAmJzBAJiQggFAmNEAl8xBAFOCAUCY0QCXzIEAmJDCAUCY0QCXzMEAmJ0CAUCY0QCXzQEAmNFCQECYUgCBQJheQUCYUIEAmFKCAUCY0UCXzEEAmFLCAUCY0UCXzIEAmN3CQECYUkKBQFOBQJhdwUCYXgFAmFKBQJhQQUCYUsFAmFMBQJhTQUCYU4FAmFPAwkBAiE9AgUCY3cCAAkAAgECFVNvbWV0aGluZyB3ZW50IHdyb25nIQQCY3oJAQFhAQkBAVECBQFOBQJhcQMJAAACBQJjegIACQACAQIPRW50cnkgbm90IGZvdW5kBAJjRgkBAWEBCQECYWoCBQFOBQJhcQMJAAACBQJjRgIHSUxMRUdBTAkAAgECHUNhbm5vdCB1cGRhdGUgSUxMRUdBTCBhcnR3b3JrAwkBASEBCQECYVgCBQFOBQJhcQQCY2wDBQJidAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUBTgAABQR1bml0BQNuaWwFA25pbAkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFRAgUBTgUCYXEFAmFMCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFSAgUBTgUCYXEFAmFNCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFTAgUBTgUCYXEFAmF3CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFVAgUBTgUCYXEFAmF4CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFUAgUBTgUCYXEFAmFBCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhYQIFAU4FAmFxBQJhSgkAzAgCCQELU3RyaW5nRW50cnkCCQEBWgIFAU4FAmFxBQJhSwkAzAgCCQELU3RyaW5nRW50cnkCCQECYWICBQFOBQJhcQUCYU4JAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFjAgUBTgUCYXEFAmNzCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhZQIFAU4FAmFxBQJjdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmFmAgUBTgUCYXEFAmFPBQNuaWwFAmNsCQACAQIOQWxyZWFkeSBtaW50ZWQCYVIBC2ZsYWdBcnR3b3JrBAFQAmNHAmNGAmNIBAJjSQkBAmJ2AQUCYVIEAmJCCAUCY0kCXzEEAU4IBQJjSQJfMgMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFAW0JAMwIAgkApQgBBQR0aGlzBQNuaWwFAU4DCQEPY29udGFpbnNFbGVtZW50AgkAzAgCAgdDT05TRU5UCQDMCAICAAkAzAgCAg9DSEFOR0VfUkVRVUlSRUQJAMwIAgIHRkxBR0dFRAkAzAgCAgdJTExFR0FMBQNuaWwFAmNGCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhagIFAmNHBQFQBQJjRgkAzAgCCQELU3RyaW5nRW50cnkCCQECYWQCBQJjRwUBUAUCY0gFA25pbAkAAgEJAKwCAgIOVW5rbm93IHN0YXR1cyAFAmNGCQACAQITWW91IGFyZSBub3QgYWxsb3dlZAJhUgENZGVsZXRlQXJ0d29yawIBUAJjRwQCY0oJAQJidgEFAmFSBAJiQggFAmNKAl8xBAFOCAUCY0oCXzIEAmFZAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUBbQkAzAgCCQClCAEFBHRoaXMFA25pbAUBTgUCY0cFAU4EAmN6CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAQFhAQkBAVECBQJhWQUBUAIgTm8gYXJ0IG1hdGNoaW5nIGZvciB0aGlzIGFkZHJlc3MDCQAAAgUCY3oCAAkAAgECIE5vIGFydCBtYXRjaGluZyBmb3IgdGhpcyBhZGRyZXNzBAFGCQEBYQEJAQJhcAIFAmFZBQFQAwkAAAIFAUYCAAkAAgECJU5vIGFydCBoYXNoIG1hdGNoaW5nIGZvciB0aGlzIGFkZHJlc3MEAUQJAQFhAQkBAVcCBQJhWQUBUAMJAAACBQFEAgAJAAIBAhNObyBTSUdOIElEIG1hdGNoaW5nBAJjSwkAzAgCCQELRGVsZXRlRW50cnkBCQEBTwIFAmFZBQFQCQDMCAIJAQtEZWxldGVFbnRyeQEJAQFRAgUCYVkFAVAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAVICBQJhWQUBUAkAzAgCCQELRGVsZXRlRW50cnkBCQEBUwIFAmFZBQFQCQDMCAIJAQtEZWxldGVFbnRyeQEJAQFVAgUCYVkFAVAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAVQCBQJhWQUBUAkAzAgCCQELRGVsZXRlRW50cnkBCQEBWgIFAmFZBQFQCQDMCAIJAQtEZWxldGVFbnRyeQEJAQJhYQIFAmFZBQFQCQDMCAIJAQtEZWxldGVFbnRyeQEJAQJhYwIFAmFZBQFQCQDMCAIJAQtEZWxldGVFbnRyeQEJAQJhYgIFAmFZBQFQCQDMCAIJAQtEZWxldGVFbnRyeQEJAQFWAgUCYVkFAVAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAVcCBQJhWQUBUAkAzAgCCQELRGVsZXRlRW50cnkBCQEBWAIFAmFZBQFQCQDMCAIJAQtEZWxldGVFbnRyeQEJAQFZAgUCYVkFAVAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAmFqAgUCYVkFAVAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAmFnAgUCYVkFAVAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAmFpAgUCYVkFAVAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAmFyAQUBRgkAzAgCCQELRGVsZXRlRW50cnkBCQECYXMCBQJhWQUBRAkAzAgCCQELRGVsZXRlRW50cnkBCQECYXUCBQFGBQJhWQkAzAgCCQELRGVsZXRlRW50cnkBCQECYWgCBQJhWQUBUAkAzAgCCQELRGVsZXRlRW50cnkBCQECYWQCBQJhWQUBUAkAzAgCCQELRGVsZXRlRW50cnkBCQECYWUCBQJhWQUBUAkAzAgCCQELRGVsZXRlRW50cnkBCQECYWYCBQJhWQUBUAUDbmlsAwkBASEBCQECYVgCBQJhWQUBUAMJAQEhAQUBdgkAAgEFAXcFAmNLAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUBbQkAzAgCCQClCAEFBHRoaXMFA25pbAUBTgUCY0sJAAIBAihBcnQgYWxyZWFkeSBtaW50ZWQsIHlvdSBjYW5ub3QgZGVsZXRlIGl0AmFSAQtzZWxsQXJ0d29yawYBUAJiZwJjTAJhVwJiRgJicwQCY00JAQJicgIFAmFSBQJicwQCYkIIBQJjTQJfMQQBTggFAmNNAl8yBAJiQwgFAmNNAl8zBAJidAgFAmNNAl80BAJiSQkBAWEBCQEBUQIFAU4FAVADCQAAAgUCYkkCAAkAAgECI1RoaXMgYXJ0IGRvZXNuJ3QgbWF0Y2ggeW91ciBhY2NvdW50BAJjRgkBAWEBCQECYWoCBQFOBQFQAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgIPQ0hBTkdFX1JFUVVJUkVECQDMCAICB0ZMQUdHRUQJAMwIAgIHSUxMRUdBTAUDbmlsBQJjRgkAAgECD0ZsYWdnZWQgYXJ0d29yawQCY04JAQFvAQkArAICAhJjdXJyZW50X2JpZGFtb3VudF8FAVADCQBmAgAABQJiRgkAAgECDE5lZ2F0aXZlIGVuZAMDCQBmAgUCYkYAAAMJAQIhPQIFAmNMAAEGCQECIT0CBQJiZwAABwkAAgECOlRpbWVkIG9mZmVyIG9ubHkgYWxsb3dlZCBmb3IgdW5pcXVlIGVkaXRpb24gYW5kIG9mZmVyIG9ubHkEAmNPAwkAAAIFAmJGAAAAAAUGaGVpZ2h0AwkBASEBCQECYmUBBQJhVwkAAgECFVNvbWV0aGluZyB3ZW50IHdyb25nIQMJAQEhAQkBAmJmAgUCYVcFAmJnCQACAQIVU29tZXRoaW5nIHdlbnQgd3JvbmchBAJhUAkBAmFGAQUBTgMJAQIhPQIFAmFQAgAJAAIBBQJhUAQCYksJAQFvAQkBAVgCBQFOBQFQBAJiTAkBAW8BCQEBVgIFAU4FAVADCQBmAgUCY0wAZAkAAgECHDEwMCBlZGl0aW9ucyBtYXggcGVyIGFydHdvcmsDAwkBAiE9AgUCYksAAAkAAAIFAmJLBQJiTAcJAAIBAhRNYXggZWRpdGlvbiByZWFjaGVkLgMDCQBmAgUCYksAAAkBAiE9AgUCYkwFAmNMBwkAAgECJkNhbm5vdCBjaGFuZ2UgbWF4aW11bSBpc3N1YWJsZSBhbnltb3JlAwMJAGYCBQJjTgAACQECIT0CBQJiTAUCY0wHCQACAQIxQ2Fubm90IGNoYW5nZSBtYXhpbXVtIGlzc3VhYmxlIHdpdGggYWN0aXZlIG9yZGVycwQCY2IDAwkAZgIFAmJnAAAJAGYCBQJjTAAABwYHBAJjbAMFAmJ0CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQFOAAAFBHVuaXQFA25pbAUDbmlsCQDOCAIJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQFZAgUBTgUBUAUCY2IJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhZwIFAU4FAVAFAmJnCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBVgIFAU4FAVAFAmNMCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhaQIFAU4FAVAFAmFXCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYWgCBQFOBQFQCQBkAgUCY08FAmJGBQNuaWwFAmNsAmFSAQpidXlBcnR3b3JrAgFQAmJ4CQECYncGBQJhUgUBUAUCYngCAAIAAgACYVIBBnNldEJpZAIBUAJieAQCY1AJAQJidgEFAmFSBAJiQggFAmNQAl8xBAFOCAUCY1ACXzIEAmJDCAUCY1ACXzMEAmNRCQECYVEBBQJhUgQCYVMIBQJjUQJfMQQCYVQIBQJjUQJfMgQCYVcDCQEBIQEJAQlpc0RlZmluZWQBCAUCYVMHYXNzZXRJZAIFV0FWRVMJANgEAQkBBXZhbHVlAQgFAmFTB2Fzc2V0SWQEAmJGCQEBbwEJAQJhaAIFAmJ4BQFQAwMJAQIhPQIFAmJGAAAJAGcCBQZoZWlnaHQFAmJGBwkAAgECC1NhbGUgZW5kZWQuBAJjTgkBAW8BCQCsAgICEmN1cnJlbnRfYmlkYW1vdW50XwUBUAMJAQEhAQkBAmJlAQUCYVcJAAIBAhJhc3NldCBub3QgYWNjZXB0ZWQDCQEBIQEJAQJiZgIFAmFXBQJhVAkAAgECDldyb25nIG1pbiBzZWxsBAJiSwkBAW8BCQEBWAIFAmJ4BQFQBAJiTAkBAW8BCQEBVgIFAmJ4BQFQAwkAZwIAAAUCYkwJAAIBAiNObyBtYXggZWRpdGlvbiBzZXQgZm9yIHRoaXMgYXJ0d29yawMJAGcCBQJiSwUCYkwJAAIBAhhTb2xkIG91dCwgeW91IGNhbm5vdCBiaWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICBGJpZF8FAVACAV8FAmJ4AgFfBQFOAgFfBQJiQgIFX09QRU4JAKwCAgkArAICCQCsAgIJAKwCAgUCYVcCAV8JAKQDAQUCYVQCAV8JAKQDAQUCYkMJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgISY3VycmVudF9iaWRhbW91bnRfBQFQCQBkAgUCY04AAQUDbmlsAmFSAQlhY2NlcHRCaWQFAVACYngCYnkCYnoCYnMEAmNSCQECYnICBQJhUgUCYnMEAmJCCAUCY1ICXzEEAmNTCAUCY1ICXzIEAmJDCAUCY1ICXzMEAmJ0CAUCY1ICXzQDCQECIT0CBQJjUwUCYngJAAIBAhlZb3UgY2Fubm90IGRvIHRoaXMgYWN0aW9uCQECYncGBQJhUgUBUAUCYngFAmJ5BQJiegUCYnMCYVIBCWNhbmNlbEJpZAQBUAJieAJieQJiegQCY1QJAQJidgEFAmFSBAJiQggFAmNUAl8xBAFOCAUCY1QCXzIEAmJDCAUCY1QCXzMDAwkBAiE9AgUBTgUCYnoJAQIhPQIFAU4FAmJ4BwkAAgECGVlvdSBjYW5ub3QgZG8gdGhpcyBhY3Rpb24EAmNVAwkAAAIFAU4FAmJ4BQJiegUBTgQCY04JAQFvAQkArAICAhJjdXJyZW50X2JpZGFtb3VudF8FAVAEAmJtCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICBGJpZF8FAVACAV8FAmJ4AgFfBQJiegIBXwUCYnkEAmJuCQEBYQEJAKwCAgUCYm0CBV9PUEVOAwkAAAIFAmJuAgAJAAIBAg1CaWQgbm90IGZvdW5kBAJibwkAtQkCBQJibgIBXwQCYVcJAQJiawEJAJEDAgUCYm8AAAQCY1YCCENBTkNFTEVECQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgUCYm0CBV9PUEVOCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICBQJibQIBXwUCY1YJAKwCAgkArAICBQJibgIBXwkApAMBBQJiQwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAhJjdXJyZW50X2JpZGFtb3VudF8FAVAJAGUCBQJjTgABCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQJjVQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJvAAEFAmFXBQNuaWwBAmNXAQJjWAAEAUcFAmNXAwkAAQIFAUcCF0ludm9rZVNjcmlwdFRyYW5zYWN0aW9uBAJjWQUBRwMDAwMJAAACCAUCY1kIZnVuY3Rpb24CCmFkZEFydHdvcmsJAAACCAUCY1kEZEFwcAUEdGhpcwcJAAACCAUCY1kDZmVlAKDCHgcJAAACCAUCY1kKZmVlQXNzZXRJZAUEdW5pdAcJAPQDAwgFAmNXCWJvZHlCeXRlcwkAkQMCCAUCY1cGcHJvb2ZzAAAJANkEAQkBAmNuAQkAkQMCCAUCY1kEYXJncwANAwMDAwkAAAIIBQJjWQhmdW5jdGlvbgINdXBkYXRlQXJ0d29yawkAAAIIBQJjWQRkQXBwBQR0aGlzBwkAAAIIBQJjWQNmZWUAoMIeBwkAAAIIBQJjWQpmZWVBc3NldElkBQR1bml0BwkA9AMDCAUCY1cJYm9keUJ5dGVzCQCRAwIIBQJjVwZwcm9vZnMAAAkA2QQBCQECY24BCQCRAwIIBQJjWQRhcmdzAAwDAwMDCQAAAggFAmNZCGZ1bmN0aW9uAgtzZWxsQXJ0d29yawkAAAIIBQJjWQRkQXBwBQR0aGlzBwkAAAIIBQJjWQNmZWUAoMIeBwkAAAIIBQJjWQpmZWVBc3NldElkBQR1bml0BwkA9AMDCAUCY1cJYm9keUJ5dGVzCQCRAwIIBQJjVwZwcm9vZnMAAAkA2QQBCQECY24BCQCRAwIIBQJjWQRhcmdzAAUDAwMDCQAAAggFAmNZCGZ1bmN0aW9uAglhY2NlcHRCaWQJAAACCAUCY1kEZEFwcAUEdGhpcwcJAAACCAUCY1kDZmVlAKDCHgcJAAACCAUCY1kKZmVlQXNzZXRJZAUEdW5pdAcJAMgTAwgFAmNXCWJvZHlCeXRlcwkAkQMCCAUCY1cGcHJvb2ZzAAAJANkEAQkBAmNuAQkAkQMCCAUCY1kEYXJncwAECQD0AwMIBQJjVwlib2R5Qnl0ZXMJAJEDAggFAmNXBnByb29mcwAACAUCY1cPc2VuZGVyUHVibGljS2V5CQD0AwMIBQJjVwlib2R5Qnl0ZXMJAJEDAggFAmNXBnByb29mcwAACAUCY1cPc2VuZGVyUHVibGljS2V5H6i4AA==", "height": 2503572, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: H6SZ9uWouiSCzv5Z9W6tuL1NQUoYqXGifXkyqDUVcLnB Next: 5n6ZqEQpyvCW2hXGULkWmzXznHexDojRkCKkMqAzLkhk Diff:
OldNewDifferences
394394 else unit
395395 if ((get_sponsored_waves == get_sponsored_waves))
396396 then if (true)
397- then throw(toString(isSponsored))
397+ then throw(toString((isSponsored > 0)))
398398 else $Tuple4(toBase58String(i.transactionId), caller, lastBlock.timestamp, (isSponsored > 0))
399399 else throw("Strict value is not equal to itself.")
400400 }
408408
409409
410410 func buyMint (i,artId,issuer,bidId,bidOwner,pubKey) = {
411- let $t01309613166 = idCallerDateSponsored(i, pubKey)
412- let id = $t01309613166._1
413- let caller = $t01309613166._2
414- let date = $t01309613166._3
415- let isSponsored = $t01309613166._4
411+ let $t01310013170 = idCallerDateSponsored(i, pubKey)
412+ let id = $t01310013170._1
413+ let caller = $t01310013170._2
414+ let date = $t01310013170._3
415+ let isSponsored = $t01310013170._4
416416 if (true)
417417 then throw(((toString((toBase58String(i.caller.bytes) == toString(this))) + " / ") + toString(isSponsored)))
418418 else {
479479 then throw(checkUser)
480480 else {
481481 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + bidOwner) + "_") + bidId)
482- let $t01510815300 = if (isBid)
482+ let $t01511215304 = if (isBid)
483483 then getPriceAssetIdFromBid(bidDataKey)
484484 else validatePriceAssetId(i, priceAssetId, artworkPrice)
485- let amount = $t01510815300._1
486- let assetId = $t01510815300._2
485+ let amount = $t01511215304._1
486+ let assetId = $t01511215304._2
487487 let agent = valueOrElse(getString(userDapp, keyArtistAgentAddr(issuer)), feeReceiver)
488488 let agentShare = valueOrElse(getInteger(userDapp, keyPrimaryShareAgent(issuer)), 0)
489489 let publicAgent = valueOrElse(getString(userDapp, keyArtistPublicAgentAddr(issuer)), feeReceiver)
589589
590590 @Callable(i)
591591 func addArtwork (sha256Hash,signID,name,description,tags,type,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence,crawler,royalties,pubKey) = {
592- let $t02047620549 = idCallerDateSponsored(i, pubKey)
593- let artId = $t02047620549._1
594- let caller = $t02047620549._2
595- let date = $t02047620549._3
596- let isSponsored = $t02047620549._4
592+ let $t02048020553 = idCallerDateSponsored(i, pubKey)
593+ let artId = $t02048020553._1
594+ let caller = $t02048020553._2
595+ let date = $t02048020553._3
596+ let isSponsored = $t02048020553._4
597597 if (!(validateHash(sha256Hash)))
598598 then throw("Hash should be 64 characters maximum")
599599 else {
600- let $t02065020719 = setLIcence(cidLicence, sha256Licence)
601- let licenceCID = $t02065020719._1
602- let licenceHash = $t02065020719._2
600+ let $t02065420723 = setLIcence(cidLicence, sha256Licence)
601+ let licenceCID = $t02065420723._1
602+ let licenceHash = $t02065420723._2
603603 let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags, royalties)
604604 if ((validateArtwork != ""))
605605 then throw("Something went wrong!")
606606 else {
607607 let whitelisted_drop = (checkWhitelist((caller + "_free_drops")) > 0)
608- let $t02101821102 = if (whitelisted_drop)
608+ let $t02102221106 = if (whitelisted_drop)
609609 then $Tuple2(0, signID)
610610 else validatePayment(i)
611- let amount = $t02101821102._1
612- let assetId = $t02101821102._2
611+ let amount = $t02102221106._1
612+ let assetId = $t02102221106._2
613613 if (!(isDefined(amount)))
614614 then throw("Something went wrong")
615615 else {
650650 func updateArtwork (txid,name,description,tags,type,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence,crawler,royalties,pubKey) = if (!(dappRunning))
651651 then throw(maintenanceMSG)
652652 else {
653- let $t02413624206 = idCallerDateSponsored(i, pubKey)
654- let id = $t02413624206._1
655- let caller = $t02413624206._2
656- let date = $t02413624206._3
657- let isSponsored = $t02413624206._4
658- let $t02421624285 = setLIcence(cidLicence, sha256Licence)
659- let licenceCID = $t02421624285._1
660- let licenceHash = $t02421624285._2
653+ let $t02414024210 = idCallerDateSponsored(i, pubKey)
654+ let id = $t02414024210._1
655+ let caller = $t02414024210._2
656+ let date = $t02414024210._3
657+ let isSponsored = $t02414024210._4
658+ let $t02422024289 = setLIcence(cidLicence, sha256Licence)
659+ let licenceCID = $t02422024289._1
660+ let licenceHash = $t02422024289._2
661661 let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags, royalties)
662662 if ((validateArtwork != ""))
663663 then throw("Something went wrong!")
685685
686686 @Callable(i)
687687 func flagArtwork (artId,addr,flag,note) = {
688- let $t02591225946 = idCallerDate(i)
689- let id = $t02591225946._1
690- let caller = $t02591225946._2
688+ let $t02591625950 = idCallerDate(i)
689+ let id = $t02591625950._1
690+ let caller = $t02591625950._2
691691 if (containsElement([chris, toString(this)], caller))
692692 then if (containsElement(["CONSENT", "", "CHANGE_REQUIRED", "FLAGGED", "ILLEGAL"], flag))
693693 then [StringEntry(keyFlag(addr, artId), flag), StringEntry(keyNote(addr, artId), note)]
699699
700700 @Callable(i)
701701 func deleteArtwork (artId,addr) = {
702- let $t02638226416 = idCallerDate(i)
703- let id = $t02638226416._1
704- let caller = $t02638226416._2
702+ let $t02638626420 = idCallerDate(i)
703+ let id = $t02638626420._1
704+ let caller = $t02638626420._2
705705 let addrToUse = if (containsElement([chris, toString(this)], caller))
706706 then addr
707707 else caller
734734
735735 @Callable(i)
736736 func sellArtwork (artId,price,maxMint,assetId,blockEnd,pubKey) = {
737- let $t02925229322 = idCallerDateSponsored(i, pubKey)
738- let id = $t02925229322._1
739- let caller = $t02925229322._2
740- let date = $t02925229322._3
741- let isSponsored = $t02925229322._4
737+ let $t02925629326 = idCallerDateSponsored(i, pubKey)
738+ let id = $t02925629326._1
739+ let caller = $t02925629326._2
740+ let date = $t02925629326._3
741+ let isSponsored = $t02925629326._4
742742 let artworkName = getStringByKey(keyName(caller, artId))
743743 if ((artworkName == ""))
744744 then throw("This art doesn't match your account")
812812
813813 @Callable(i)
814814 func setBid (artId,issuer) = {
815- let $t03170431744 = idCallerDate(i)
816- let id = $t03170431744._1
817- let caller = $t03170431744._2
818- let date = $t03170431744._3
819- let $t03174931785 = isPayment(i)
820- let payment = $t03174931785._1
821- let amount = $t03174931785._2
815+ let $t03170831748 = idCallerDate(i)
816+ let id = $t03170831748._1
817+ let caller = $t03170831748._2
818+ let date = $t03170831748._3
819+ let $t03175331789 = isPayment(i)
820+ let payment = $t03175331789._1
821+ let amount = $t03175331789._2
822822 let assetId = if (!(isDefined(payment.assetId)))
823823 then "WAVES"
824824 else toBase58String(value(payment.assetId))
849849
850850 @Callable(i)
851851 func acceptBid (artId,issuer,bidId,bidOwner,pubKey) = {
852- let $t03300533076 = idCallerDateSponsored(i, pubKey)
853- let id = $t03300533076._1
854- let caller1 = $t03300533076._2
855- let date = $t03300533076._3
856- let isSponsored = $t03300533076._4
852+ let $t03300933080 = idCallerDateSponsored(i, pubKey)
853+ let id = $t03300933080._1
854+ let caller1 = $t03300933080._2
855+ let date = $t03300933080._3
856+ let isSponsored = $t03300933080._4
857857 if ((caller1 != issuer))
858858 then throw("You cannot do this action")
859859 else buyMint(i, artId, issuer, bidId, bidOwner, pubKey)
863863
864864 @Callable(i)
865865 func cancelBid (artId,issuer,bidId,bidOwner) = {
866- let $t03331133372 = idCallerDate(i)
867- let id = $t03331133372._1
868- let caller = $t03331133372._2
869- let date = $t03331133372._3
866+ let $t03331533376 = idCallerDate(i)
867+ let id = $t03331533376._1
868+ let caller = $t03331533376._2
869+ let date = $t03331533376._3
870870 if (if ((caller != bidOwner))
871871 then (caller != issuer)
872872 else false)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func getStringByKey (key) = valueOrElse(getString(this, key), "")
55
66
77 let unitTest = false
88
99 let oracleFee = value(addressFromString(getStringByKey("conf_oracle_fee")))
1010
1111 let signDapp = value(addressFromString(getStringByKey("conf_signweb_dapp")))
1212
1313 let feeReceiver = getStringByKey("conf_fee_receiver")
1414
1515 let userDapp = if (unitTest)
1616 then value(addressFromString("3Mt4RGMEyjSWYAocTPqd55wdHQQB3PU2UCm"))
1717 else value(addressFromString(getStringByKey("conf_users_dapp")))
1818
1919 let whitelistDapp = value(addressFromString(getStringByKey("conf_whitelist_dapp")))
2020
2121 let signAssetId = fromBase58String(getStringByKey("conf_accepted_asset_SIGN"))
2222
2323 let usdnAssetId = fromBase58String(getStringByKey("conf_accepted_asset_USDN"))
2424
2525 let usdtAssetId = fromBase58String(getStringByKey("conf_accepted_asset_USDT"))
2626
2727 let wavesAssetId = base58''
2828
2929 let chris = getStringByKey("conf_admin_1")
3030
3131 func getIntegerByKeyFromOracle (key) = valueOrErrorMessage(getInteger(oracleFee, key), "Integer undefine or 0 in oracle")
3232
3333
3434 func getIntegerByKey (key) = valueOrElse(getInteger(this, key), 0)
3535
3636
3737 func checkWhitelist (key) = valueOrElse(getInteger(whitelistDapp, key), 0)
3838
3939
4040 func getBooleanByKey (key) = valueOrElse(getBoolean(this, key), false)
4141
4242
4343 let signCut = 7
4444
4545 let usdnWaveCut = 10
4646
4747 let defaultLicence = getStringByKey("conf_default_licence")
4848
4949 let defaultHashLicence = getStringByKey("conf_default_licence_hash")
5050
5151 let dappRunning = valueOrElse(getBoolean(userDapp, "conf_dapp_is_running"), true)
5252
5353 let maintenanceMSG = valueOrElse(getString(userDapp, "conf_maintenance_msg"), "")
5454
5555 let userSuspended = "SUSPENDED"
5656
5757 let userRemoved = "REMOVED"
5858
5959 let userUnregistered = "UNREGISTERED"
6060
6161 let userAllowed = "ALLOWED"
6262
6363 let currentCertificationPrice = getIntegerByKeyFromOracle(("certification_fee_" + toBase58String(signAssetId)))
6464
6565 func checkSignCertificate (signID,Owner,sha256Hash) = match getString(signDapp, ((("data_fc_" + signID) + "_") + Owner)) {
6666 case a: String =>
6767 if (contains(a, sha256Hash))
6868 then true
6969 else false
7070 case _ =>
7171 false
7272 }
7373
7474
7575 func validateCID (cid) = if (contains(cid, "/"))
7676 then if (if ((76 > size(cid)))
7777 then (size(split(cid, "/")[0]) == 59)
7878 else false)
7979 then (16 > size(split(cid, "/")[1]))
8080 else false
8181 else false
8282
8383
8484 func validateHash (hash) = (size(hash) == 64)
8585
8686
8787 func keyUserStatus (caller) = ("user_status_" + caller)
8888
8989
9090 func keyDate (caller,artId) = ((("art_date_" + artId) + "_") + caller)
9191
9292
9393 func keyName (caller,artId) = ((("art_name_" + artId) + "_") + caller)
9494
9595
9696 func keyDesc (caller,artId) = ((("art_desc_" + artId) + "_") + caller)
9797
9898
9999 func keyDisplayCid (caller,artId) = ((("art_display_cid_" + artId) + "_") + caller)
100100
101101
102102 func keyExportHash (caller,artId) = ((("art_export_hash_" + artId) + "_") + caller)
103103
104104
105105 func keyExportCid (caller,artId) = ((("art_export_cid_" + artId) + "_") + caller)
106106
107107
108108 func keyMaxMint (caller,artId) = ((("art_maxmint_" + artId) + "_") + caller)
109109
110110
111111 func keySignID (caller,artId) = ((("art_signid_" + artId) + "_") + caller)
112112
113113
114114 func keyIssued (caller,artId) = ((("art_issued_" + artId) + "_") + caller)
115115
116116
117117 func keyOnSale (caller,artId) = ((("art_onsale_" + artId) + "_") + caller)
118118
119119
120120 func keyLicenceHash (caller,artId) = ((("art_licence_hash_" + artId) + "_") + caller)
121121
122122
123123 func keyLicenceCid (caller,artId) = ((("art_licence_cid_" + artId) + "_") + caller)
124124
125125
126126 func keyTags (caller,artId) = ((("art_tags_" + artId) + "_") + caller)
127127
128128
129129 func keyType (caller,artId) = ((("art_type_" + artId) + "_") + caller)
130130
131131
132132 func keyNote (caller,artId) = ((("art_note_" + artId) + "_") + caller)
133133
134134
135135 func keyCrawler (caller,artId) = ((("art_crawler_cid_" + artId) + "_") + caller)
136136
137137
138138 func keyRoyalties (caller,artId) = ((("art_royalties_" + artId) + "_") + caller)
139139
140140
141141 func keyPrice (caller,artId) = ((("art_price_" + artId) + "_") + caller)
142142
143143
144144 func keyEndSale (caller,artId) = ((("art_endsale_" + artId) + "_") + caller)
145145
146146
147147 func keyAssetIdAccepted (caller,artId) = ((("art_assetAccepted_" + artId) + "_") + caller)
148148
149149
150150 func keyFlag (caller,artId) = ((("art_flag_" + artId) + "_") + caller)
151151
152152
153153 func keyArtistAgentAddr (artistAddr) = ("artist_agent_" + artistAddr)
154154
155155
156156 func keyPrimaryShareAgent (artistAddr) = ("artist_agent_primary_" + artistAddr)
157157
158158
159159 func keyArtistPublicAgentAddr (artistAddr) = ("artist_public_agent_" + artistAddr)
160160
161161
162162 func keyPrimarySharePublicAgent (artistAddr) = ("artist_public_agent_primary_" + artistAddr)
163163
164164
165165 func keyHashByTxidAddr (caller,txid) = ((("get_hashbytxidaddr_" + txid) + "_") + caller)
166166
167167
168168 func keyOwnerByHash (sha256Hash) = ("get_owner_by_hash_" + sha256Hash)
169169
170170
171171 func keyidBySignid (caller,signId) = ((("get_artidbysignid_" + signId) + "_") + caller)
172172
173173
174174 func keyTxidByHashOwner (sha256Hash,caller) = ("get_txid_by_hash_owner_" + toBase58String(sha256_16Kb(toBytes((sha256Hash + caller)))))
175175
176176
177177 func validateAllCID (cidDisplay,cidExport,cidLicence) = if (!(validateCID(cidDisplay)))
178178 then throw("Wrong Display CID")
179179 else if (!(validateCID(cidExport)))
180180 then throw("Wrong Export CID")
181181 else if (if ((cidLicence != ""))
182182 then !(validateCID(cidLicence))
183183 else false)
184184 then throw("Wrong Licence CID")
185185 else true
186186
187187
188188 func validateAllHash (sha256Export,sha256Licence) = if (!(validateHash(sha256Export)))
189189 then throw("Export Hash 64 char. max")
190190 else if (!(validateHash(sha256Licence)))
191191 then throw("Licence Hash 64 char. max")
192192 else true
193193
194194
195195 func validateString (str,max) = if ((size(str) == 0))
196196 then throw("Field cannot be is empty")
197197 else if ((size(str) > max))
198198 then throw((str + " is too long"))
199199 else true
200200
201201
202202 func validateUser (caller) = {
203203 let userStatus = valueOrElse(getString(userDapp, keyUserStatus(caller)), userUnregistered)
204204 if (if ((userStatus == userUnregistered))
205205 then true
206206 else (userStatus == userAllowed))
207207 then "Register this account first with \"Account\" tab"
208208 else if ((userStatus == userSuspended))
209209 then "Account suspended"
210210 else if ((userStatus == userRemoved))
211211 then "Account removed"
212212 else ""
213213 }
214214
215215
216216 func setLIcence (cidLicence,sha256Licence) = {
217217 let cid = if ((size(cidLicence) == 0))
218218 then defaultLicence
219219 else cidLicence
220220 let hash = if ((size(sha256Licence) == 0))
221221 then defaultHashLicence
222222 else sha256Licence
223223 $Tuple2(cid, hash)
224224 }
225225
226226
227227 func validateArtworkData (caller,cidDisplay,cidExport,licenceCID,sha256Export,licenceHash,name,description,tags,royalties) = {
228228 let checkUser = validateUser(caller)
229229 if ((checkUser != ""))
230230 then throw(checkUser)
231231 else if ((size(cidDisplay) == 0))
232232 then throw("Display CID cannot be empty")
233233 else if (!(validateAllCID(cidDisplay, cidExport, licenceCID)))
234234 then throw("Problem with CID")
235235 else if (!(validateAllHash(sha256Export, licenceHash)))
236236 then throw("Problem with Hashes")
237237 else if (!(validateString(name, 100)))
238238 then throw("100 Char. max name")
239239 else if (!(validateString(description, 1000)))
240240 then throw("1000 Char. max description")
241241 else if (if ((0 > royalties))
242242 then true
243243 else (royalties > 1000))
244244 then throw("Royalties cannot be less than 0% or higher than 10%")
245245 else if ((size(split(tags, ",")) > 5))
246246 then throw("5 tags max.")
247247 else ""
248248 }
249249
250250
251251 func isPayment (i) = if ((size(i.payments) == 0))
252252 then throw("No payment attached")
253253 else {
254254 let payment = value(i.payments[0])
255255 let amount = value(payment.amount)
256256 $Tuple2(payment, amount)
257257 }
258258
259259
260260 func validatePayment (i) = {
261261 let $t091809216 = isPayment(i)
262262 let payment = $t091809216._1
263263 let amount = $t091809216._2
264264 let assetId = if (if (isDefined(payment.assetId))
265265 then (payment.assetId == signAssetId)
266266 else false)
267267 then payment.assetId
268268 else throw("Only SIGN token accepted as transaction fee")
269269 if ((amount != currentCertificationPrice))
270270 then throw(("Payment amount should be " + toString(currentCertificationPrice)))
271271 else $Tuple2(amount, assetId)
272272 }
273273
274274
275275 func isArtMinted (addrToUse,artId) = match getInteger(this, keyIssued(addrToUse, artId)) {
276276 case b: Int =>
277277 if ((b != 0))
278278 then true
279279 else false
280280 case _ =>
281281 false
282282 }
283283
284284
285285 func validatePriceAssetId (i,priceAssetId,artworkPrice) = {
286286 let $t098049840 = isPayment(i)
287287 let payment = $t098049840._1
288288 let amount = $t098049840._2
289289 let assetId = if (!(isDefined(payment.assetId)))
290290 then unit
291291 else if (if ((size(priceAssetId) > 0))
292292 then (toBase58String(value(payment.assetId)) == priceAssetId)
293293 else false)
294294 then payment.assetId
295295 else throw("Wrong asset id")
296296 if (if ((assetId == unit))
297297 then (priceAssetId != "")
298298 else false)
299299 then throw("Wrong asset id")
300300 else if ((artworkPrice != amount))
301301 then throw("Payment don't match")
302302 else $Tuple2(amount, assetId)
303303 }
304304
305305
306306 func acceptedAssetIds (assetId) = if (if (if (if (if ((assetId != toBase58String(signAssetId)))
307307 then (assetId != toBase58String(wavesAssetId))
308308 else false)
309309 then (assetId != "WAVES")
310310 else false)
311311 then (assetId != toBase58String(usdnAssetId))
312312 else false)
313313 then (assetId != toBase58String(usdtAssetId))
314314 else false)
315315 then throw("Only SIGN, USDN,USDT or WAVES accepted")
316316 else true
317317
318318
319319 func validateMinSell (assetId,price) = {
320320 let minSellWaves = if (unitTest)
321321 then 10
322322 else getIntegerByKeyFromOracle("waves_min_sell")
323323 let minSellUsdn = 1000000
324324 let minSellSign = if (unitTest)
325325 then 1
326326 else (currentCertificationPrice * 2)
327327 if (if (if (if (if (if ((assetId == toBase58String(usdnAssetId)))
328328 then (minSellUsdn > price)
329329 else false)
330330 then (price != 0)
331331 else false)
332332 then true
333333 else if (if ((assetId == toBase58String(usdtAssetId)))
334334 then (minSellUsdn > price)
335335 else false)
336336 then (price != 0)
337337 else false)
338338 then true
339339 else if (if ((assetId == toBase58String(signAssetId)))
340340 then (minSellSign > price)
341341 else false)
342342 then (price != 0)
343343 else false)
344344 then true
345345 else if (if (if ((assetId == toBase58String(wavesAssetId)))
346346 then true
347347 else (assetId == "WAVES"))
348348 then (minSellWaves > price)
349349 else false)
350350 then (price != 0)
351351 else false)
352352 then throw("Wrong minimum sell price")
353353 else true
354354 }
355355
356356
357357 func getBidAssetId (assetId) = if ((assetId == "WAVES"))
358358 then unit
359359 else fromBase58String(assetId)
360360
361361
362362 func getPriceAssetIdFromBid (bidDataKey) = {
363363 let bidData = getStringByKey((bidDataKey + "_OPEN"))
364364 if ((bidData == ""))
365365 then throw("Bid not found")
366366 else {
367367 let bidDataArr = split(bidData, "_")
368368 let bidAmount = parseIntValue(bidDataArr[1])
369369 let bidAssetId = getBidAssetId(bidDataArr[0])
370370 if ((0 >= bidAmount))
371371 then throw("Wrong amount")
372372 else $Tuple2(bidAmount, bidAssetId)
373373 }
374374 }
375375
376376
377377 func idCallerDateSponsored (i,pubKey) = if (!(dappRunning))
378378 then throw(maintenanceMSG)
379379 else {
380380 let isSponsored = if ((pubKey != ""))
381381 then valueOrElse(checkWhitelist((toString(addressFromPublicKey(fromBase58String(pubKey))) + "_free_txs")), 0)
382382 else 0
383383 if ((isSponsored == isSponsored))
384384 then {
385385 let caller = if (if ((toBase58String(i.caller.bytes) == toString(this)))
386386 then (isSponsored > 0)
387387 else false)
388388 then toString(addressFromPublicKey(fromBase58String(pubKey)))
389389 else toBase58String(i.caller.bytes)
390390 let get_sponsored_waves = if (if ((pubKey != ""))
391391 then (isSponsored > 0)
392392 else false)
393393 then invoke(whitelistDapp, "useFreeTx", [toString(addressFromPublicKey(fromBase58String(pubKey)))], nil)
394394 else unit
395395 if ((get_sponsored_waves == get_sponsored_waves))
396396 then if (true)
397- then throw(toString(isSponsored))
397+ then throw(toString((isSponsored > 0)))
398398 else $Tuple4(toBase58String(i.transactionId), caller, lastBlock.timestamp, (isSponsored > 0))
399399 else throw("Strict value is not equal to itself.")
400400 }
401401 else throw("Strict value is not equal to itself.")
402402 }
403403
404404
405405 func idCallerDate (i) = if (!(dappRunning))
406406 then throw(maintenanceMSG)
407407 else $Tuple3(toBase58String(i.transactionId), toBase58String(i.caller.bytes), lastBlock.timestamp)
408408
409409
410410 func buyMint (i,artId,issuer,bidId,bidOwner,pubKey) = {
411- let $t01309613166 = idCallerDateSponsored(i, pubKey)
412- let id = $t01309613166._1
413- let caller = $t01309613166._2
414- let date = $t01309613166._3
415- let isSponsored = $t01309613166._4
411+ let $t01310013170 = idCallerDateSponsored(i, pubKey)
412+ let id = $t01310013170._1
413+ let caller = $t01310013170._2
414+ let date = $t01310013170._3
415+ let isSponsored = $t01310013170._4
416416 if (true)
417417 then throw(((toString((toBase58String(i.caller.bytes) == toString(this))) + " / ") + toString(isSponsored)))
418418 else {
419419 let new_caller = if (if ((toBase58String(i.caller.bytes) == toString(this)))
420420 then isSponsored
421421 else false)
422422 then toString(addressFromPublicKey(fromBase58String(pubKey)))
423423 else toBase58String(i.caller.bytes)
424424 if (true)
425425 then throw(((((((new_caller + " / ") + issuer) + " / ") + bidOwner) + " / ") + pubKey))
426426 else {
427427 let isBid = if (if (if ((caller == issuer))
428428 then (bidOwner != "")
429429 else false)
430430 then (bidId != "")
431431 else false)
432432 then true
433433 else false
434434 let blockEnd = getIntegerByKey(keyEndSale(caller, artId))
435435 if (if (if ((blockEnd != 0))
436436 then (height >= blockEnd)
437437 else false)
438438 then !(isBid)
439439 else false)
440440 then throw("Sale ended.")
441441 else {
442442 let callerIsIssuer = (caller == issuer)
443443 let totalNFT = getIntegerByKey("total_nft_issued")
444444 let signID = getStringByKey(keySignID(issuer, artId))
445445 let artworkName = getStringByKey(keyName(issuer, artId))
446446 if ((artworkName == ""))
447447 then throw("Art doesn't exist")
448448 else {
449449 let isOnSale = getBooleanByKey(keyOnSale(issuer, artId))
450450 let amountSold = getIntegerByKey(keyIssued(issuer, artId))
451451 let artworkPrice = if (callerIsIssuer)
452452 then (currentCertificationPrice * 2)
453453 else getIntegerByKey(keyPrice(issuer, artId))
454454 let priceAssetId = if (callerIsIssuer)
455455 then toBase58String(signAssetId)
456456 else getStringByKey(keyAssetIdAccepted(issuer, artId))
457457 let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
458458 if (if (if (!(isBid))
459459 then !(callerIsIssuer)
460460 else false)
461461 then if (if ((0 >= artworkPrice))
462462 then true
463463 else !(isOnSale))
464464 then true
465465 else (0 >= maxCanSell)
466466 else false)
467467 then throw("Art not for sale")
468468 else if (if (if (!(isBid))
469469 then callerIsIssuer
470470 else false)
471471 then (0 >= maxCanSell)
472472 else false)
473473 then throw("Max issuable not set")
474474 else {
475475 let checkUser = validateUser(issuer)
476476 if (if (isBid)
477477 then (checkUser != "")
478478 else false)
479479 then throw(checkUser)
480480 else {
481481 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + bidOwner) + "_") + bidId)
482- let $t01510815300 = if (isBid)
482+ let $t01511215304 = if (isBid)
483483 then getPriceAssetIdFromBid(bidDataKey)
484484 else validatePriceAssetId(i, priceAssetId, artworkPrice)
485- let amount = $t01510815300._1
486- let assetId = $t01510815300._2
485+ let amount = $t01511215304._1
486+ let assetId = $t01511215304._2
487487 let agent = valueOrElse(getString(userDapp, keyArtistAgentAddr(issuer)), feeReceiver)
488488 let agentShare = valueOrElse(getInteger(userDapp, keyPrimaryShareAgent(issuer)), 0)
489489 let publicAgent = valueOrElse(getString(userDapp, keyArtistPublicAgentAddr(issuer)), feeReceiver)
490490 let publicAgentShare = valueOrElse(getInteger(userDapp, keyPrimarySharePublicAgent(issuer)), 0)
491491 let isWhitelisted = checkWhitelist(issuer)
492492 let cut = if ((isWhitelisted > height))
493493 then 0
494494 else if ((assetId == signAssetId))
495495 then signCut
496496 else usdnWaveCut
497497 let amountForSign = fraction(amount, cut, 100)
498498 let amountForAgent = if (if (if ((agent != feeReceiver))
499499 then (agentShare > 0)
500500 else false)
501501 then (height > isWhitelisted)
502502 else false)
503503 then fraction(amount, agentShare, 10000)
504504 else 0
505505 let amountForPublicAgent = if (if (if ((publicAgent != feeReceiver))
506506 then (publicAgentShare > 0)
507507 else false)
508508 then (height > isWhitelisted)
509509 else false)
510510 then fraction(amount, publicAgentShare, 10000)
511511 else 0
512512 let amountForCreator = (amount - amountForSign)
513513 if ((amountSold == maxCanSell))
514514 then throw("Art sold out")
515515 else {
516516 let newAmountSold = (amountSold + 1)
517517 let issueMeta = ((((((((((("Creator: " + issuer) + ",
518518 ArtID: ") + artId) + ",
519519 SignID: ") + signID) + ",
520520 Artwork name: ") + artworkName) + ",
521521 Issue: ") + toString(newAmountSold)) + "/") + toString(maxCanSell))
522522 let issueNFT = Issue(("SA_" + toString((totalNFT + 1))), issueMeta, 1, 0, false)
523523 let idNFT = calculateAssetId(issueNFT)
524524 let sellStatus = if (if ((newAmountSold == maxCanSell))
525525 then true
526526 else !(isOnSale))
527527 then false
528528 else true
529529 let receiveNFT = if (if (if ((caller == issuer))
530530 then (bidOwner != "")
531531 else false)
532532 then (bidId != "")
533533 else false)
534534 then addressFromStringValue(bidOwner)
535535 else i.caller
536536 let assetIdBid = if (!(isDefined(assetId)))
537537 then "WAVES"
538538 else toBase58String(value(assetId))
539539 let bidData = getStringByKey((bidDataKey + "_OPEN"))
540540 let bidDelOld = DeleteEntry((bidDataKey + "_OPEN"))
541541 let bidUpdate = StringEntry((bidDataKey + "_CLOSED"), ((bidData + "_") + toString(date)))
542542 let soldKey = ((((((("art_sold_" + toString(newAmountSold)) + "_of_") + toString(maxCanSell)) + "_") + artId) + "_") + issuer)
543543 let soldValue = if (!(isBid))
544544 then ((((((((((caller + "_") + toString(date)) + "_") + id) + "_") + toString(artworkPrice)) + "_") + priceAssetId) + "_") + toBase58String(idNFT))
545545 else ((((((((((toString(receiveNFT) + "_") + toString(date)) + "_") + id) + "_") + toString(amount)) + "_") + assetIdBid) + "_") + toBase58String(idNFT))
546546 let soldData = StringEntry(soldKey, soldValue)
547547 let commissionsWithAgent = if ((amountForAgent != 0))
548548 then [ScriptTransfer(Address(fromBase58String(feeReceiver)), (amountForSign - amountForAgent), assetId), ScriptTransfer(Address(fromBase58String(agent)), amountForAgent, assetId)]
549549 else [ScriptTransfer(Address(fromBase58String(feeReceiver)), amountForSign, assetId)]
550550 let commissionsWithPublicAgent = if ((amountForPublicAgent != 0))
551551 then [ScriptTransfer(Address(fromBase58String(publicAgent)), amountForPublicAgent, assetId), ScriptTransfer(Address(fromBase58String(issuer)), (amountForCreator - amountForPublicAgent), assetId)]
552552 else [ScriptTransfer(Address(fromBase58String(issuer)), amountForCreator, assetId)]
553553 let txToCaller = if (isSponsored)
554554 then [ScriptTransfer(Address(fromBase58String(caller)), 0, unit)]
555555 else nil
556556 let buyRes = ((([IntegerEntry(keyIssued(issuer, artId), newAmountSold), StringEntry(("nft_" + toBase58String(idNFT)), soldKey), IntegerEntry("total_nft_issued", (totalNFT + 1)), IntegerEntry(keyEndSale(issuer, artId), 0), BooleanEntry(keyOnSale(issuer, artId), sellStatus), issueNFT, ScriptTransfer(receiveNFT, 1, idNFT)] ++ commissionsWithAgent) ++ commissionsWithPublicAgent) ++ txToCaller)
557557 if (isBid)
558558 then [soldData, bidUpdate, bidDelOld] :: buyRes
559559 else soldData :: buyRes
560560 }
561561 }
562562 }
563563 }
564564 }
565565 }
566566 }
567567 }
568568
569569
570570 func asString (bv) = match bv {
571571 case bv0: String =>
572572 bv0
573573 case _ =>
574574 throw("Sponsored Public Key String expected")
575575 }
576576
577577
578578 @Callable(invoke)
579579 func setConf (key,val) = {
580580 let caller = toString(invoke.caller)
581581 if (containsElement([chris, toString(this)], caller))
582582 then if (contains(key, "conf_"))
583583 then [StringEntry(key, val)]
584584 else throw("Entries starting with conf_ only")
585585 else throw("You are not allowed to change this")
586586 }
587587
588588
589589
590590 @Callable(i)
591591 func addArtwork (sha256Hash,signID,name,description,tags,type,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence,crawler,royalties,pubKey) = {
592- let $t02047620549 = idCallerDateSponsored(i, pubKey)
593- let artId = $t02047620549._1
594- let caller = $t02047620549._2
595- let date = $t02047620549._3
596- let isSponsored = $t02047620549._4
592+ let $t02048020553 = idCallerDateSponsored(i, pubKey)
593+ let artId = $t02048020553._1
594+ let caller = $t02048020553._2
595+ let date = $t02048020553._3
596+ let isSponsored = $t02048020553._4
597597 if (!(validateHash(sha256Hash)))
598598 then throw("Hash should be 64 characters maximum")
599599 else {
600- let $t02065020719 = setLIcence(cidLicence, sha256Licence)
601- let licenceCID = $t02065020719._1
602- let licenceHash = $t02065020719._2
600+ let $t02065420723 = setLIcence(cidLicence, sha256Licence)
601+ let licenceCID = $t02065420723._1
602+ let licenceHash = $t02065420723._2
603603 let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags, royalties)
604604 if ((validateArtwork != ""))
605605 then throw("Something went wrong!")
606606 else {
607607 let whitelisted_drop = (checkWhitelist((caller + "_free_drops")) > 0)
608- let $t02101821102 = if (whitelisted_drop)
608+ let $t02102221106 = if (whitelisted_drop)
609609 then $Tuple2(0, signID)
610610 else validatePayment(i)
611- let amount = $t02101821102._1
612- let assetId = $t02101821102._2
611+ let amount = $t02102221106._1
612+ let assetId = $t02102221106._2
613613 if (!(isDefined(amount)))
614614 then throw("Something went wrong")
615615 else {
616616 let entryExist = getStringByKey(keyTxidByHashOwner(sha256Hash, caller))
617617 if ((entryExist != ""))
618618 then throw("You already added it")
619619 else {
620620 let hashExist = getStringByKey(keyOwnerByHash(sha256Hash))
621621 if ((hashExist != ""))
622622 then throw("Hash already registered")
623623 else {
624624 let isSignCertified = checkSignCertificate(signID, caller, sha256Hash)
625625 if (!(isSignCertified))
626626 then throw("Sign Certificate not found for this address.")
627627 else {
628628 let decrease_whitelist_drop = if (whitelisted_drop)
629629 then invoke(whitelistDapp, "useFreeDrop", [caller], nil)
630630 else unit
631631 if ((decrease_whitelist_drop == decrease_whitelist_drop))
632632 then {
633633 let txToCaller = if (isSponsored)
634634 then [ScriptTransfer(Address(fromBase58String(caller)), 0, unit)]
635635 else nil
636636 ([StringEntry(keyOwnerByHash(sha256Hash), caller), StringEntry(keyTxidByHashOwner(sha256Hash, caller), artId), IntegerEntry(keyDate(caller, artId), date), StringEntry(keyName(caller, artId), name), StringEntry(keyDesc(caller, artId), description), StringEntry(keyDisplayCid(caller, artId), cidDisplay), StringEntry(keyExportCid(caller, artId), cidExport), StringEntry(keyExportHash(caller, artId), sha256Export), StringEntry(keyLicenceHash(caller, artId), licenceHash), StringEntry(keyLicenceCid(caller, artId), licenceCID), StringEntry(keyType(caller, artId), type), StringEntry(keyTags(caller, artId), tags), IntegerEntry(keyMaxMint(caller, artId), 0), StringEntry(keySignID(caller, artId), signID), IntegerEntry(keyIssued(caller, artId), 0), BooleanEntry(keyOnSale(caller, artId), false), StringEntry(keyidBySignid(caller, signID), artId), StringEntry(keyHashByTxidAddr(caller, artId), sha256Hash), StringEntry(keyCrawler(caller, artId), crawler), IntegerEntry(keyRoyalties(caller, artId), royalties), ScriptTransfer(Address(fromBase58String(feeReceiver)), amount, signAssetId)] ++ txToCaller)
637637 }
638638 else throw("Strict value is not equal to itself.")
639639 }
640640 }
641641 }
642642 }
643643 }
644644 }
645645 }
646646
647647
648648
649649 @Callable(i)
650650 func updateArtwork (txid,name,description,tags,type,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence,crawler,royalties,pubKey) = if (!(dappRunning))
651651 then throw(maintenanceMSG)
652652 else {
653- let $t02413624206 = idCallerDateSponsored(i, pubKey)
654- let id = $t02413624206._1
655- let caller = $t02413624206._2
656- let date = $t02413624206._3
657- let isSponsored = $t02413624206._4
658- let $t02421624285 = setLIcence(cidLicence, sha256Licence)
659- let licenceCID = $t02421624285._1
660- let licenceHash = $t02421624285._2
653+ let $t02414024210 = idCallerDateSponsored(i, pubKey)
654+ let id = $t02414024210._1
655+ let caller = $t02414024210._2
656+ let date = $t02414024210._3
657+ let isSponsored = $t02414024210._4
658+ let $t02422024289 = setLIcence(cidLicence, sha256Licence)
659+ let licenceCID = $t02422024289._1
660+ let licenceHash = $t02422024289._2
661661 let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags, royalties)
662662 if ((validateArtwork != ""))
663663 then throw("Something went wrong!")
664664 else {
665665 let entryExist = getStringByKey(keyName(caller, txid))
666666 if ((entryExist == ""))
667667 then throw("Entry not found")
668668 else {
669669 let flag = getStringByKey(keyFlag(caller, txid))
670670 if ((flag == "ILLEGAL"))
671671 then throw("Cannot update ILLEGAL artwork")
672672 else if (!(isArtMinted(caller, txid)))
673673 then {
674674 let txToCaller = if (isSponsored)
675675 then [ScriptTransfer(Address(fromBase58String(caller)), 0, unit)]
676676 else nil
677677 ([StringEntry(keyName(caller, txid), name), StringEntry(keyDesc(caller, txid), description), StringEntry(keyDisplayCid(caller, txid), cidDisplay), StringEntry(keyExportCid(caller, txid), cidExport), StringEntry(keyExportHash(caller, txid), sha256Export), StringEntry(keyLicenceCid(caller, txid), licenceCID), StringEntry(keyLicenceHash(caller, txid), licenceHash), StringEntry(keyTags(caller, txid), tags), StringEntry(keyType(caller, txid), type), StringEntry(keyCrawler(caller, txid), crawler), IntegerEntry(keyRoyalties(caller, txid), royalties)] ++ txToCaller)
678678 }
679679 else throw("Already minted")
680680 }
681681 }
682682 }
683683
684684
685685
686686 @Callable(i)
687687 func flagArtwork (artId,addr,flag,note) = {
688- let $t02591225946 = idCallerDate(i)
689- let id = $t02591225946._1
690- let caller = $t02591225946._2
688+ let $t02591625950 = idCallerDate(i)
689+ let id = $t02591625950._1
690+ let caller = $t02591625950._2
691691 if (containsElement([chris, toString(this)], caller))
692692 then if (containsElement(["CONSENT", "", "CHANGE_REQUIRED", "FLAGGED", "ILLEGAL"], flag))
693693 then [StringEntry(keyFlag(addr, artId), flag), StringEntry(keyNote(addr, artId), note)]
694694 else throw(("Unknow status " + flag))
695695 else throw("You are not allowed")
696696 }
697697
698698
699699
700700 @Callable(i)
701701 func deleteArtwork (artId,addr) = {
702- let $t02638226416 = idCallerDate(i)
703- let id = $t02638226416._1
704- let caller = $t02638226416._2
702+ let $t02638626420 = idCallerDate(i)
703+ let id = $t02638626420._1
704+ let caller = $t02638626420._2
705705 let addrToUse = if (containsElement([chris, toString(this)], caller))
706706 then addr
707707 else caller
708708 let entryExist = valueOrErrorMessage(getStringByKey(keyName(addrToUse, artId)), "No art matching for this address")
709709 if ((entryExist == ""))
710710 then throw("No art matching for this address")
711711 else {
712712 let sha256Hash = getStringByKey(keyHashByTxidAddr(addrToUse, artId))
713713 if ((sha256Hash == ""))
714714 then throw("No art hash matching for this address")
715715 else {
716716 let signID = getStringByKey(keySignID(addrToUse, artId))
717717 if ((signID == ""))
718718 then throw("No SIGN ID matching")
719719 else {
720720 let dataToDelete = [DeleteEntry(keyDate(addrToUse, artId)), DeleteEntry(keyName(addrToUse, artId)), DeleteEntry(keyDesc(addrToUse, artId)), DeleteEntry(keyDisplayCid(addrToUse, artId)), DeleteEntry(keyExportCid(addrToUse, artId)), DeleteEntry(keyExportHash(addrToUse, artId)), DeleteEntry(keyLicenceHash(addrToUse, artId)), DeleteEntry(keyLicenceCid(addrToUse, artId)), DeleteEntry(keyType(addrToUse, artId)), DeleteEntry(keyTags(addrToUse, artId)), DeleteEntry(keyMaxMint(addrToUse, artId)), DeleteEntry(keySignID(addrToUse, artId)), DeleteEntry(keyIssued(addrToUse, artId)), DeleteEntry(keyOnSale(addrToUse, artId)), DeleteEntry(keyFlag(addrToUse, artId)), DeleteEntry(keyPrice(addrToUse, artId)), DeleteEntry(keyAssetIdAccepted(addrToUse, artId)), DeleteEntry(keyOwnerByHash(sha256Hash)), DeleteEntry(keyidBySignid(addrToUse, signID)), DeleteEntry(keyTxidByHashOwner(sha256Hash, addrToUse)), DeleteEntry(keyEndSale(addrToUse, artId)), DeleteEntry(keyNote(addrToUse, artId)), DeleteEntry(keyCrawler(addrToUse, artId)), DeleteEntry(keyRoyalties(addrToUse, artId))]
721721 if (!(isArtMinted(addrToUse, artId)))
722722 then if (!(dappRunning))
723723 then throw(maintenanceMSG)
724724 else dataToDelete
725725 else if (containsElement([chris, toString(this)], caller))
726726 then dataToDelete
727727 else throw("Art already minted, you cannot delete it")
728728 }
729729 }
730730 }
731731 }
732732
733733
734734
735735 @Callable(i)
736736 func sellArtwork (artId,price,maxMint,assetId,blockEnd,pubKey) = {
737- let $t02925229322 = idCallerDateSponsored(i, pubKey)
738- let id = $t02925229322._1
739- let caller = $t02925229322._2
740- let date = $t02925229322._3
741- let isSponsored = $t02925229322._4
737+ let $t02925629326 = idCallerDateSponsored(i, pubKey)
738+ let id = $t02925629326._1
739+ let caller = $t02925629326._2
740+ let date = $t02925629326._3
741+ let isSponsored = $t02925629326._4
742742 let artworkName = getStringByKey(keyName(caller, artId))
743743 if ((artworkName == ""))
744744 then throw("This art doesn't match your account")
745745 else {
746746 let flag = getStringByKey(keyFlag(caller, artId))
747747 if (containsElement(["CHANGE_REQUIRED", "FLAGGED", "ILLEGAL"], flag))
748748 then throw("Flagged artwork")
749749 else {
750750 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
751751 if ((0 > blockEnd))
752752 then throw("Negative end")
753753 else if (if ((blockEnd > 0))
754754 then if ((maxMint != 1))
755755 then true
756756 else (price != 0)
757757 else false)
758758 then throw("Timed offer only allowed for unique edition and offer only")
759759 else {
760760 let baseHeight = if ((blockEnd == 0))
761761 then 0
762762 else height
763763 if (!(acceptedAssetIds(assetId)))
764764 then throw("Something went wrong!")
765765 else if (!(validateMinSell(assetId, price)))
766766 then throw("Something went wrong!")
767767 else {
768768 let checkUser = validateUser(caller)
769769 if ((checkUser != ""))
770770 then throw(checkUser)
771771 else {
772772 let amountSold = getIntegerByKey(keyIssued(caller, artId))
773773 let maxCanSell = getIntegerByKey(keyMaxMint(caller, artId))
774774 if ((maxMint > 100))
775775 then throw("100 editions max per artwork")
776776 else if (if ((amountSold != 0))
777777 then (amountSold == maxCanSell)
778778 else false)
779779 then throw("Max edition reached.")
780780 else if (if ((amountSold > 0))
781781 then (maxCanSell != maxMint)
782782 else false)
783783 then throw("Cannot change maximum issuable anymore")
784784 else if (if ((bidNbr > 0))
785785 then (maxCanSell != maxMint)
786786 else false)
787787 then throw("Cannot change maximum issuable with active orders")
788788 else {
789789 let sellStatus = if (if ((price > 0))
790790 then (maxMint > 0)
791791 else false)
792792 then true
793793 else false
794794 let txToCaller = if (isSponsored)
795795 then [ScriptTransfer(Address(fromBase58String(caller)), 0, unit)]
796796 else nil
797797 ([BooleanEntry(keyOnSale(caller, artId), sellStatus), IntegerEntry(keyPrice(caller, artId), price), IntegerEntry(keyMaxMint(caller, artId), maxMint), StringEntry(keyAssetIdAccepted(caller, artId), assetId), IntegerEntry(keyEndSale(caller, artId), (baseHeight + blockEnd))] ++ txToCaller)
798798 }
799799 }
800800 }
801801 }
802802 }
803803 }
804804 }
805805
806806
807807
808808 @Callable(i)
809809 func buyArtwork (artId,issuer) = buyMint(i, artId, issuer, "", "", "")
810810
811811
812812
813813 @Callable(i)
814814 func setBid (artId,issuer) = {
815- let $t03170431744 = idCallerDate(i)
816- let id = $t03170431744._1
817- let caller = $t03170431744._2
818- let date = $t03170431744._3
819- let $t03174931785 = isPayment(i)
820- let payment = $t03174931785._1
821- let amount = $t03174931785._2
815+ let $t03170831748 = idCallerDate(i)
816+ let id = $t03170831748._1
817+ let caller = $t03170831748._2
818+ let date = $t03170831748._3
819+ let $t03175331789 = isPayment(i)
820+ let payment = $t03175331789._1
821+ let amount = $t03175331789._2
822822 let assetId = if (!(isDefined(payment.assetId)))
823823 then "WAVES"
824824 else toBase58String(value(payment.assetId))
825825 let blockEnd = getIntegerByKey(keyEndSale(issuer, artId))
826826 if (if ((blockEnd != 0))
827827 then (height >= blockEnd)
828828 else false)
829829 then throw("Sale ended.")
830830 else {
831831 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
832832 if (!(acceptedAssetIds(assetId)))
833833 then throw("asset not accepted")
834834 else if (!(validateMinSell(assetId, amount)))
835835 then throw("Wrong min sell")
836836 else {
837837 let amountSold = getIntegerByKey(keyIssued(issuer, artId))
838838 let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
839839 if ((0 >= maxCanSell))
840840 then throw("No max edition set for this artwork")
841841 else if ((amountSold >= maxCanSell))
842842 then throw("Sold out, you cannot bid")
843843 else [StringEntry((((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + id) + "_OPEN"), ((((assetId + "_") + toString(amount)) + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr + 1))]
844844 }
845845 }
846846 }
847847
848848
849849
850850 @Callable(i)
851851 func acceptBid (artId,issuer,bidId,bidOwner,pubKey) = {
852- let $t03300533076 = idCallerDateSponsored(i, pubKey)
853- let id = $t03300533076._1
854- let caller1 = $t03300533076._2
855- let date = $t03300533076._3
856- let isSponsored = $t03300533076._4
852+ let $t03300933080 = idCallerDateSponsored(i, pubKey)
853+ let id = $t03300933080._1
854+ let caller1 = $t03300933080._2
855+ let date = $t03300933080._3
856+ let isSponsored = $t03300933080._4
857857 if ((caller1 != issuer))
858858 then throw("You cannot do this action")
859859 else buyMint(i, artId, issuer, bidId, bidOwner, pubKey)
860860 }
861861
862862
863863
864864 @Callable(i)
865865 func cancelBid (artId,issuer,bidId,bidOwner) = {
866- let $t03331133372 = idCallerDate(i)
867- let id = $t03331133372._1
868- let caller = $t03331133372._2
869- let date = $t03331133372._3
866+ let $t03331533376 = idCallerDate(i)
867+ let id = $t03331533376._1
868+ let caller = $t03331533376._2
869+ let date = $t03331533376._3
870870 if (if ((caller != bidOwner))
871871 then (caller != issuer)
872872 else false)
873873 then throw("You cannot do this action")
874874 else {
875875 let returnMoneyTo = if ((caller == issuer))
876876 then bidOwner
877877 else caller
878878 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
879879 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + bidOwner) + "_") + bidId)
880880 let bidData = getStringByKey((bidDataKey + "_OPEN"))
881881 if ((bidData == ""))
882882 then throw("Bid not found")
883883 else {
884884 let bidDataArr = split(bidData, "_")
885885 let assetId = getBidAssetId(bidDataArr[0])
886886 let bidStatus = "CANCELED"
887887 [DeleteEntry((bidDataKey + "_OPEN")), StringEntry(((bidDataKey + "_") + bidStatus), ((bidData + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr - 1)), ScriptTransfer(Address(fromBase58String(returnMoneyTo)), parseIntValue(bidDataArr[1]), assetId)]
888888 }
889889 }
890890 }
891891
892892
893893 @Verifier(tx)
894894 func verifier () = match tx {
895895 case inv: InvokeScriptTransaction =>
896896 if (if (if (if ((inv.function == "addArtwork"))
897897 then (inv.dApp == this)
898898 else false)
899899 then (inv.fee == 500000)
900900 else false)
901901 then (inv.feeAssetId == unit)
902902 else false)
903903 then sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(asString(inv.args[13])))
904904 else if (if (if (if ((inv.function == "updateArtwork"))
905905 then (inv.dApp == this)
906906 else false)
907907 then (inv.fee == 500000)
908908 else false)
909909 then (inv.feeAssetId == unit)
910910 else false)
911911 then sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(asString(inv.args[12])))
912912 else if (if (if (if ((inv.function == "sellArtwork"))
913913 then (inv.dApp == this)
914914 else false)
915915 then (inv.fee == 500000)
916916 else false)
917917 then (inv.feeAssetId == unit)
918918 else false)
919919 then sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(asString(inv.args[5])))
920920 else if (if (if (if ((inv.function == "acceptBid"))
921921 then (inv.dApp == this)
922922 else false)
923923 then (inv.fee == 500000)
924924 else false)
925925 then (inv.feeAssetId == unit)
926926 else false)
927927 then sigVerify_128Kb(tx.bodyBytes, tx.proofs[0], fromBase58String(asString(inv.args[4])))
928928 else sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
929929 case _ =>
930930 sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
931931 }
932932

github/deemru/w8io/873ac7e 
123.50 ms