tx · 3irL3BVg5nudAZhzRZ69UzmuhZaY2KSf5EKESMF9JkUy

3NBynfbXC2KastUxhukcMUaE58K9cBdB9UY:  -0.02500000 Waves

2023.09.14 07:23 [2754576] smart account 3NBynfbXC2KastUxhukcMUaE58K9cBdB9UY > SELF 0.00000000 Waves

{ "type": 13, "id": "3irL3BVg5nudAZhzRZ69UzmuhZaY2KSf5EKESMF9JkUy", "fee": 2500000, "feeAssetId": null, "timestamp": 1694665382639, "version": 2, "chainId": 84, "sender": "3NBynfbXC2KastUxhukcMUaE58K9cBdB9UY", "senderPublicKey": "J9DCtJJxJBWZdtDR12BA1U94Q3cZzMi4R6k5hYkAzmzC", "proofs": [ "2GArpdjkc1pzWEgyE1mcq8VrnK9nZNLaLZBVNWHbL4Xx2n5ED8ReWdY7MaRVStX8NzpyPH6cxoDwgiHEFBd9hgWx" ], "script": "base64:BgJeCAISBAoCCAgSDgoMCAgICAgICAgICAEIEg8KDQgICAgICAgICAgIAQgSBgoECAgICBIECgIICBIICgYIAQEIAQgSBAoCCAgSBAoCCAgSBwoFCAgICAgSBgoECAgICFoAB1ZFUlNJT04CBTIuMC4wAQ5nZXRTdHJpbmdCeUtleQEDa2V5CQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFA2tleQIAAAh1bml0VGVzdAcACW9yYWNsZUZlZQkBBXZhbHVlAQkApggBCQEOZ2V0U3RyaW5nQnlLZXkBAg9jb25mX29yYWNsZV9mZWUACHNpZ25EYXBwCQEFdmFsdWUBCQCmCAEJAQ5nZXRTdHJpbmdCeUtleQECEWNvbmZfc2lnbndlYl9kYXBwAAtmZWVSZWNlaXZlcgkBDmdldFN0cmluZ0J5S2V5AQIRY29uZl9mZWVfcmVjZWl2ZXIACHVzZXJEYXBwAwUIdW5pdFRlc3QJAQV2YWx1ZQEJAKYIAQIjM010NFJHTUV5alNXWUFvY1RQcWQ1NXdkSFFRQjNQVTJVQ20JAQV2YWx1ZQEJAKYIAQkBDmdldFN0cmluZ0J5S2V5AQIPY29uZl91c2Vyc19kYXBwAA13aGl0ZWxpc3REYXBwCQEFdmFsdWUBCQCmCAEJAQ5nZXRTdHJpbmdCeUtleQECE2NvbmZfd2hpdGVsaXN0X2RhcHAAEXVzZHRQUEFzc2V0SWRfc3RyCQEOZ2V0U3RyaW5nQnlLZXkBAhtjb25mX2FjY2VwdGVkX2Fzc2V0X1VTRFRfUFAADmFydEFzc2V0SWRfc3RyCQEOZ2V0U3RyaW5nQnlLZXkBAhdjb25mX2FjY2VwdGVkX2Fzc2V0X0FSVAARdXNkY1BQQXNzZXRJZF9zdHIJAQ5nZXRTdHJpbmdCeUtleQECG2NvbmZfYWNjZXB0ZWRfYXNzZXRfVVNEQ19QUAAPZWFzdEFzc2V0SWRfc3RyCQEOZ2V0U3RyaW5nQnlLZXkBAhhjb25mX2FjY2VwdGVkX2Fzc2V0X0VBU1QAEXB1enpsZUFzc2V0SWRfc3RyCQEOZ2V0U3RyaW5nQnlLZXkBAhpjb25mX2FjY2VwdGVkX2Fzc2V0X1BVWlpMRQAQZXRoUFBBc3NldElkX3N0cgkBDmdldFN0cmluZ0J5S2V5AQIaY29uZl9hY2NlcHRlZF9hc3NldF9FVEhfUFAAEHdhdmVzQXNzZXRJZF9zdHICBVdBVkVTAA11c2R0UFBBc3NldElkCQDZBAEFEXVzZHRQUEFzc2V0SWRfc3RyAAphcnRBc3NldElkCQDZBAEFDmFydEFzc2V0SWRfc3RyAA11c2RjUFBBc3NldElkCQDZBAEFEXVzZGNQUEFzc2V0SWRfc3RyAAtlYXN0QXNzZXRJZAkA2QQBBQ9lYXN0QXNzZXRJZF9zdHIADXB1enpsZUFzc2V0SWQJANkEAQURcHV6emxlQXNzZXRJZF9zdHIADGV0aFBQQXNzZXRJZAkA2QQBBRBldGhQUEFzc2V0SWRfc3RyAAx3YXZlc0Fzc2V0SWQBAAATYWxsX2FjY2VwdGVkX2Fzc2V0cwkAzAgCBRF1c2R0UFBBc3NldElkX3N0cgkAzAgCBQ5hcnRBc3NldElkX3N0cgkAzAgCBRF1c2RjUFBBc3NldElkX3N0cgkAzAgCBQ9lYXN0QXNzZXRJZF9zdHIJAMwIAgURcHV6emxlQXNzZXRJZF9zdHIJAMwIAgUQd2F2ZXNBc3NldElkX3N0cgkAzAgCBRBldGhQUEFzc2V0SWRfc3RyBQNuaWwABWNocmlzCQEOZ2V0U3RyaW5nQnlLZXkBAgxjb25mX2FkbWluXzEBGWdldEludGVnZXJCeUtleUZyb21PcmFjbGUBA2tleQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFCW9yYWNsZUZlZQUDa2V5Ah9JbnRlZ2VyIHVuZGVmaW5lIG9yIDAgaW4gb3JhY2xlAQ9nZXRJbnRlZ2VyQnlLZXkBA2tleQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQNrZXkAAAEOY2hlY2tXaGl0ZWxpc3QBA2tleQkBC3ZhbHVlT3JFbHNlAgkAmggCBQ13aGl0ZWxpc3REYXBwBQNrZXkAAAEPZ2V0Qm9vbGVhbkJ5S2V5AQNrZXkJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwUDa2V5BwAOY29tbWlzc2lvbl9mZWUACAAOZGVmYXVsdExpY2VuY2UJAQ5nZXRTdHJpbmdCeUtleQECFGNvbmZfZGVmYXVsdF9saWNlbmNlABJkZWZhdWx0SGFzaExpY2VuY2UJAQ5nZXRTdHJpbmdCeUtleQECGWNvbmZfZGVmYXVsdF9saWNlbmNlX2hhc2gAC2RhcHBSdW5uaW5nCQELdmFsdWVPckVsc2UCCQCbCAIFCHVzZXJEYXBwAhRjb25mX2RhcHBfaXNfcnVubmluZwYADm1haW50ZW5hbmNlTVNHCQELdmFsdWVPckVsc2UCCQCdCAIFCHVzZXJEYXBwAhRjb25mX21haW50ZW5hbmNlX21zZwIAAA11c2VyU3VzcGVuZGVkAglTVVNQRU5ERUQAC3VzZXJSZW1vdmVkAgdSRU1PVkVEABB1c2VyVW5yZWdpc3RlcmVkAgxVTlJFR0lTVEVSRUQAC3VzZXJBbGxvd2VkAgdBTExPV0VEABljdXJyZW50Q2VydGlmaWNhdGlvblByaWNlCQEZZ2V0SW50ZWdlckJ5S2V5RnJvbU9yYWNsZQEJAKwCAgISY2VydGlmaWNhdGlvbl9mZWVfCQDYBAEFCmFydEFzc2V0SWQACG1pbnRfZmVlCQEZZ2V0SW50ZWdlckJ5S2V5RnJvbU9yYWNsZQEJAKwCAgIJbWludF9mZWVfCQDYBAEFCmFydEFzc2V0SWQBE2dldEFydHdvcmtSb3lhbHRpZXMBA2tleQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQNrZXkA6AcBC3ZhbGlkYXRlQ0lEAQNjaWQDCQEIY29udGFpbnMCBQNjaWQCAS8DAwkAZgIATAkAsQIBBQNjaWQJAAACCQCxAgEJAJEDAgkAtQkCBQNjaWQCAS8AAAA7BwkAZgIAEAkAsQIBCQCRAwIJALUJAgUDY2lkAgEvAAEHBwEMdmFsaWRhdGVIYXNoAQRoYXNoCQAAAgkAsQIBBQRoYXNoAEABDWtleVVzZXJTdGF0dXMBBmNhbGxlcgkArAICAgx1c2VyX3N0YXR1c18FBmNhbGxlcgEHa2V5RGF0ZQIGY2FsbGVyBWFydElkCQCsAgIJAKwCAgkArAICAglhcnRfZGF0ZV8FBWFydElkAgFfBQZjYWxsZXIBB2tleU5hbWUCBmNhbGxlcgVhcnRJZAkArAICCQCsAgIJAKwCAgIJYXJ0X25hbWVfBQVhcnRJZAIBXwUGY2FsbGVyAQdrZXlEZXNjAgZjYWxsZXIFYXJ0SWQJAKwCAgkArAICCQCsAgICCWFydF9kZXNjXwUFYXJ0SWQCAV8FBmNhbGxlcgENa2V5RGlzcGxheUNpZAIGY2FsbGVyBWFydElkCQCsAgIJAKwCAgkArAICAhBhcnRfZGlzcGxheV9jaWRfBQVhcnRJZAIBXwUGY2FsbGVyAQ1rZXlFeHBvcnRIYXNoAgZjYWxsZXIFYXJ0SWQJAKwCAgkArAICCQCsAgICEGFydF9leHBvcnRfaGFzaF8FBWFydElkAgFfBQZjYWxsZXIBDGtleUV4cG9ydENpZAIGY2FsbGVyBWFydElkCQCsAgIJAKwCAgkArAICAg9hcnRfZXhwb3J0X2NpZF8FBWFydElkAgFfBQZjYWxsZXIBCmtleU1heE1pbnQCBmNhbGxlcgVhcnRJZAkArAICCQCsAgIJAKwCAgIMYXJ0X21heG1pbnRfBQVhcnRJZAIBXwUGY2FsbGVyAQlrZXlTaWduSUQCBmNhbGxlcgVhcnRJZAkArAICCQCsAgIJAKwCAgILYXJ0X3NpZ25pZF8FBWFydElkAgFfBQZjYWxsZXIBCWtleUlzc3VlZAIGY2FsbGVyBWFydElkCQCsAgIJAKwCAgkArAICAgthcnRfaXNzdWVkXwUFYXJ0SWQCAV8FBmNhbGxlcgEJa2V5T25TYWxlAgZjYWxsZXIFYXJ0SWQJAKwCAgkArAICCQCsAgICC2FydF9vbnNhbGVfBQVhcnRJZAIBXwUGY2FsbGVyAQ5rZXlMaWNlbmNlSGFzaAIGY2FsbGVyBWFydElkCQCsAgIJAKwCAgkArAICAhFhcnRfbGljZW5jZV9oYXNoXwUFYXJ0SWQCAV8FBmNhbGxlcgENa2V5TGljZW5jZUNpZAIGY2FsbGVyBWFydElkCQCsAgIJAKwCAgkArAICAhBhcnRfbGljZW5jZV9jaWRfBQVhcnRJZAIBXwUGY2FsbGVyAQdrZXlUYWdzAgZjYWxsZXIFYXJ0SWQJAKwCAgkArAICCQCsAgICCWFydF90YWdzXwUFYXJ0SWQCAV8FBmNhbGxlcgEHa2V5VHlwZQIGY2FsbGVyBWFydElkCQCsAgIJAKwCAgkArAICAglhcnRfdHlwZV8FBWFydElkAgFfBQZjYWxsZXIBB2tleU5vdGUCBmNhbGxlcgVhcnRJZAkArAICCQCsAgIJAKwCAgIJYXJ0X25vdGVfBQVhcnRJZAIBXwUGY2FsbGVyAQprZXlDcmF3bGVyAgZjYWxsZXIFYXJ0SWQJAKwCAgkArAICCQCsAgICEGFydF9jcmF3bGVyX2NpZF8FBWFydElkAgFfBQZjYWxsZXIBDGtleVJveWFsdGllcwIGY2FsbGVyBWFydElkCQCsAgIJAKwCAgkArAICAg5hcnRfcm95YWx0aWVzXwUFYXJ0SWQCAV8FBmNhbGxlcgEIa2V5UHJpY2UCBmNhbGxlcgVhcnRJZAkArAICCQCsAgIJAKwCAgIKYXJ0X3ByaWNlXwUFYXJ0SWQCAV8FBmNhbGxlcgEKa2V5RW5kU2FsZQIGY2FsbGVyBWFydElkCQCsAgIJAKwCAgkArAICAgxhcnRfZW5kc2FsZV8FBWFydElkAgFfBQZjYWxsZXIBEmtleUFzc2V0SWRBY2NlcHRlZAIGY2FsbGVyBWFydElkCQCsAgIJAKwCAgkArAICAhJhcnRfYXNzZXRBY2NlcHRlZF8FBWFydElkAgFfBQZjYWxsZXIBB2tleUZsYWcCBmNhbGxlcgVhcnRJZAkArAICCQCsAgIJAKwCAgIJYXJ0X2ZsYWdfBQVhcnRJZAIBXwUGY2FsbGVyARJrZXlBcnRpc3RBZ2VudEFkZHIBCmFydGlzdEFkZHIJAKwCAgINYXJ0aXN0X2FnZW50XwUKYXJ0aXN0QWRkcgEUa2V5UHJpbWFyeVNoYXJlQWdlbnQBCmFydGlzdEFkZHIJAKwCAgIVYXJ0aXN0X2FnZW50X3ByaW1hcnlfBQphcnRpc3RBZGRyARhrZXlBcnRpc3RQdWJsaWNBZ2VudEFkZHIBCmFydGlzdEFkZHIJAKwCAgIUYXJ0aXN0X3B1YmxpY19hZ2VudF8FCmFydGlzdEFkZHIBGmtleVByaW1hcnlTaGFyZVB1YmxpY0FnZW50AQphcnRpc3RBZGRyCQCsAgICHGFydGlzdF9wdWJsaWNfYWdlbnRfcHJpbWFyeV8FCmFydGlzdEFkZHIBEWtleUhhc2hCeVR4aWRBZGRyAgZjYWxsZXIEdHhpZAkArAICCQCsAgIJAKwCAgITZ2V0X2hhc2hieXR4aWRhZGRyXwUEdHhpZAIBXwUGY2FsbGVyAQ5rZXlPd25lckJ5SGFzaAEKc2hhMjU2SGFzaAkArAICAhJnZXRfb3duZXJfYnlfaGFzaF8FCnNoYTI1Nkhhc2gBDWtleWlkQnlTaWduaWQCBmNhbGxlcgZzaWduSWQJAKwCAgkArAICCQCsAgICEmdldF9hcnRpZGJ5c2lnbmlkXwUGc2lnbklkAgFfBQZjYWxsZXIBDnZhbGlkYXRlQWxsQ0lEAwpjaWREaXNwbGF5CWNpZEV4cG9ydApjaWRMaWNlbmNlAwkBASEBCQELdmFsaWRhdGVDSUQBBQpjaWREaXNwbGF5CQACAQIRV3JvbmcgRGlzcGxheSBDSUQDCQEBIQEJAQt2YWxpZGF0ZUNJRAEFCWNpZEV4cG9ydAkAAgECEFdyb25nIEV4cG9ydCBDSUQDAwkBAiE9AgUKY2lkTGljZW5jZQIACQEBIQEJAQt2YWxpZGF0ZUNJRAEFCmNpZExpY2VuY2UHCQACAQIRV3JvbmcgTGljZW5jZSBDSUQGAQ92YWxpZGF0ZUFsbEhhc2gCDHNoYTI1NkV4cG9ydA1zaGEyNTZMaWNlbmNlAwkBASEBCQEMdmFsaWRhdGVIYXNoAQUMc2hhMjU2RXhwb3J0CQACAQIYRXhwb3J0IEhhc2ggNjQgY2hhci4gbWF4AwkBASEBCQEMdmFsaWRhdGVIYXNoAQUNc2hhMjU2TGljZW5jZQkAAgECGUxpY2VuY2UgSGFzaCA2NCBjaGFyLiBtYXgGAQ52YWxpZGF0ZVN0cmluZwIDc3RyA21heAMJAAACCQCxAgEFA3N0cgAACQACAQIYRmllbGQgY2Fubm90IGJlIGlzIGVtcHR5AwkAZgIJALECAQUDc3RyBQNtYXgJAAIBCQCsAgIFA3N0cgIMIGlzIHRvbyBsb25nBgEMdmFsaWRhdGVVc2VyAQZjYWxsZXIECnVzZXJTdGF0dXMJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUIdXNlckRhcHAJAQ1rZXlVc2VyU3RhdHVzAQUGY2FsbGVyBRB1c2VyVW5yZWdpc3RlcmVkAwMJAAACBQp1c2VyU3RhdHVzBRB1c2VyVW5yZWdpc3RlcmVkBgkAAAIFCnVzZXJTdGF0dXMFC3VzZXJBbGxvd2VkAi5SZWdpc3RlciB0aGlzIGFjY291bnQgZmlyc3Qgd2l0aCAiQWNjb3VudCIgdGFiAwkAAAIFCnVzZXJTdGF0dXMFDXVzZXJTdXNwZW5kZWQCEUFjY291bnQgc3VzcGVuZGVkAwkAAAIFCnVzZXJTdGF0dXMFC3VzZXJSZW1vdmVkAg9BY2NvdW50IHJlbW92ZWQCAAEKc2V0TEljZW5jZQIKY2lkTGljZW5jZQ1zaGEyNTZMaWNlbmNlBANjaWQDCQAAAgkAsQIBBQpjaWRMaWNlbmNlAAAFDmRlZmF1bHRMaWNlbmNlBQpjaWRMaWNlbmNlBARoYXNoAwkAAAIJALECAQUNc2hhMjU2TGljZW5jZQAABRJkZWZhdWx0SGFzaExpY2VuY2UFDXNoYTI1NkxpY2VuY2UJAJQKAgUDY2lkBQRoYXNoARN2YWxpZGF0ZUFydHdvcmtEYXRhCgZjYWxsZXIKY2lkRGlzcGxheQljaWRFeHBvcnQKbGljZW5jZUNJRAxzaGEyNTZFeHBvcnQLbGljZW5jZUhhc2gEbmFtZQtkZXNjcmlwdGlvbgR0YWdzCXJveWFsdGllcwQJY2hlY2tVc2VyCQEMdmFsaWRhdGVVc2VyAQUGY2FsbGVyAwkBAiE9AgUJY2hlY2tVc2VyAgAJAAIBBQljaGVja1VzZXIDCQAAAgkAsQIBBQpjaWREaXNwbGF5AAAJAAIBAhtEaXNwbGF5IENJRCBjYW5ub3QgYmUgZW1wdHkDCQEBIQEJAQ52YWxpZGF0ZUFsbENJRAMFCmNpZERpc3BsYXkFCWNpZEV4cG9ydAUKbGljZW5jZUNJRAkAAgECEFByb2JsZW0gd2l0aCBDSUQDCQEBIQEJAQ92YWxpZGF0ZUFsbEhhc2gCBQxzaGEyNTZFeHBvcnQFC2xpY2VuY2VIYXNoCQACAQITUHJvYmxlbSB3aXRoIEhhc2hlcwMJAQEhAQkBDnZhbGlkYXRlU3RyaW5nAgUEbmFtZQBkCQACAQISMTAwIENoYXIuIG1heCBuYW1lAwkBASEBCQEOdmFsaWRhdGVTdHJpbmcCBQtkZXNjcmlwdGlvbgDoBwkAAgECGjEwMDAgQ2hhci4gbWF4IGRlc2NyaXB0aW9uAwMJAGYCAAAFCXJveWFsdGllcwYJAGYCBQlyb3lhbHRpZXMA6AcJAAIBAjNSb3lhbHRpZXMgY2Fubm90IGJlIGxlc3MgdGhhbiAwJSBvciBoaWdoZXIgdGhhbiAxMCUDCQBmAgkAkAMBCQC1CQIFBHRhZ3MCASwABQkAAgECCzUgdGFncyBtYXguAgABCWlzUGF5bWVudAEBaQMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhNObyBwYXltZW50IGF0dGFjaGVkBAdwYXltZW50CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAEBmFtb3VudAkBBXZhbHVlAQgFB3BheW1lbnQGYW1vdW50CQCUCgIFB3BheW1lbnQFBmFtb3VudAEPdmFsaWRhdGVQYXltZW50AQFpBA0kdDAxMDA5NTEwMTMxCQEJaXNQYXltZW50AQUBaQQHcGF5bWVudAgFDSR0MDEwMDk1MTAxMzECXzEEBmFtb3VudAgFDSR0MDEwMDk1MTAxMzECXzIEB2Fzc2V0SWQDAwkBCWlzRGVmaW5lZAEIBQdwYXltZW50B2Fzc2V0SWQJAAACCAUHcGF5bWVudAdhc3NldElkBQphcnRBc3NldElkBwgFB3BheW1lbnQHYXNzZXRJZAkAAgECK09ubHkgU0lHTiB0b2tlbiBhY2NlcHRlZCBhcyB0cmFuc2FjdGlvbiBmZWUDCQECIT0CBQZhbW91bnQFGWN1cnJlbnRDZXJ0aWZpY2F0aW9uUHJpY2UJAAIBCQCsAgICGVBheW1lbnQgYW1vdW50IHNob3VsZCBiZSAJAKQDAQUZY3VycmVudENlcnRpZmljYXRpb25QcmljZQkAlAoCBQZhbW91bnQFB2Fzc2V0SWQBC2lzQXJ0TWludGVkAglhZGRyVG9Vc2UFYXJ0SWQEByRtYXRjaDAJAJoIAgUEdGhpcwkBCWtleUlzc3VlZAIFCWFkZHJUb1VzZQUFYXJ0SWQDCQABAgUHJG1hdGNoMAIDSW50BAFiBQckbWF0Y2gwAwkBAiE9AgUBYgAABgcHARR2YWxpZGF0ZVByaWNlQXNzZXRJZAMBaQxwcmljZUFzc2V0SWQMYXJ0d29ya1ByaWNlBA0kdDAxMDcxODEwNzU0CQEJaXNQYXltZW50AQUBaQQHcGF5bWVudAgFDSR0MDEwNzE4MTA3NTQCXzEEBmFtb3VudAgFDSR0MDEwNzE4MTA3NTQCXzIEB2Fzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCAUHcGF5bWVudAdhc3NldElkBQR1bml0AwMJAGYCCQCxAgEFDHByaWNlQXNzZXRJZAAACQAAAgkA2AQBCQEFdmFsdWUBCAUHcGF5bWVudAdhc3NldElkBQxwcmljZUFzc2V0SWQHCAUHcGF5bWVudAdhc3NldElkCQACAQIOV3JvbmcgYXNzZXQgaWQDAwkAAAIFB2Fzc2V0SWQFBHVuaXQJAQIhPQIFDHByaWNlQXNzZXRJZAIABwkAAgECDldyb25nIGFzc2V0IGlkAwkBAiE9AgUMYXJ0d29ya1ByaWNlBQZhbW91bnQJAAIBAhNQYXltZW50IGRvbid0IG1hdGNoCQCUCgIFBmFtb3VudAUHYXNzZXRJZAEQYWNjZXB0ZWRBc3NldElkcwEHYXNzZXRJZAMJAQEhAQkBD2NvbnRhaW5zRWxlbWVudAIFE2FsbF9hY2NlcHRlZF9hc3NldHMFB2Fzc2V0SWQJAAIBAkBPbmx5ICRBUlQsIFVTRFQtUFAsIFVTREMtUFAsIEVBU1QsIFBVWlpMRSwgRVRIIG9yIFdBVkVTIGFjY2VwdGVkBgEPdmFsaWRhdGVNaW5TZWxsAQVwcmljZQMJAGcCAAAFBXByaWNlCQACAQIYV3JvbmcgbWluaW11bSBzZWxsIHByaWNlBgENZ2V0QmlkQXNzZXRJZAEHYXNzZXRJZAMJAAACBQdhc3NldElkAgVXQVZFUwUEdW5pdAkA2QQBBQdhc3NldElkARZnZXRQcmljZUFzc2V0SWRGcm9tQmlkAQpiaWREYXRhS2V5BAdiaWREYXRhCQEOZ2V0U3RyaW5nQnlLZXkBCQCsAgIFCmJpZERhdGFLZXkCBV9PUEVOAwkAAAIFB2JpZERhdGECAAkAAgECDUJpZCBub3QgZm91bmQECmJpZERhdGFBcnIJALUJAgUHYmlkRGF0YQIBXwQJYmlkQW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKYmlkRGF0YUFycgABBApiaWRBc3NldElkCQENZ2V0QmlkQXNzZXRJZAEJAJEDAgUKYmlkRGF0YUFycgAAAwkAZwIAAAUJYmlkQW1vdW50CQACAQIMV3JvbmcgYW1vdW50CQCUCgIFCWJpZEFtb3VudAUKYmlkQXNzZXRJZAEVaWRDYWxsZXJEYXRlU3BvbnNvcmVkAgFpBnB1YktleQMJAQEhAQULZGFwcFJ1bm5pbmcJAAIBBQ5tYWludGVuYW5jZU1TRwQLaXNTcG9uc29yZWQDCQECIT0CBQZwdWJLZXkCAAkBC3ZhbHVlT3JFbHNlAgkBDmNoZWNrV2hpdGVsaXN0AQkArAICCQClCAEJAKcIAQkA2QQBBQZwdWJLZXkCCV9mcmVlX3R4cwAAAAAEBmNhbGxlcgMDCQAAAgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzCQClCAEFBHRoaXMJAGYCBQtpc1Nwb25zb3JlZAAABwkApQgBCQCnCAEJANkEAQUGcHViS2V5CQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMEE2dldF9zcG9uc29yZWRfd2F2ZXMDAwkBAiE9AgUGcHViS2V5AgAJAGYCBQtpc1Nwb25zb3JlZAAABwkA/AcEBQ13aGl0ZWxpc3REYXBwAgl1c2VGcmVlVHgJAMwIAgkApQgBCQCnCAEJANkEAQUGcHViS2V5BQNuaWwFA25pbAUEdW5pdAMJAAACBRNnZXRfc3BvbnNvcmVkX3dhdmVzBRNnZXRfc3BvbnNvcmVkX3dhdmVzCQCWCgQJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAUGY2FsbGVyCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAZgIFC2lzU3BvbnNvcmVkAAAJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BDGlkQ2FsbGVyRGF0ZQEBaQMJAQEhAQULZGFwcFJ1bm5pbmcJAAIBBQ5tYWludGVuYW5jZU1TRwkAlQoDCQDYBAEIBQFpDXRyYW5zYWN0aW9uSWQJANgEAQgIBQFpBmNhbGxlcgVieXRlcwgFCWxhc3RCbG9jawl0aW1lc3RhbXABCmdldEJhbGFuY2UBB2Fzc2V0SWQEByRtYXRjaDAFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQBYgUHJG1hdGNoMAkA8AcCBQR0aGlzBQFiCAkA7wcBBQR0aGlzCWF2YWlsYWJsZQEHYnV5TWludAYBaQVhcnRJZAZpc3N1ZXIFYmlkSWQIYmlkT3duZXIGcHViS2V5BA0kdDAxMzM1OTEzNDQ4CQEVaWRDYWxsZXJEYXRlU3BvbnNvcmVkAgUBaQUGcHViS2V5BAJpZAgFDSR0MDEzMzU5MTM0NDgCXzEEBmNhbGxlcggFDSR0MDEzMzU5MTM0NDgCXzIEBGRhdGUIBQ0kdDAxMzM1OTEzNDQ4Al8zBAtpc1Nwb25zb3JlZAgFDSR0MDEzMzU5MTM0NDgCXzQEBWlzQmlkAwMDCQAAAgUGY2FsbGVyBQZpc3N1ZXIJAQIhPQIFCGJpZE93bmVyAgAHCQECIT0CBQViaWRJZAIABwYHAwMFBWlzQmlkCQECIT0CBQZjYWxsZXIFBmlzc3VlcgcJAAIBAhlZb3UgY2Fubm90IGRvIHRoaXMgYWN0aW9uBAhibG9ja0VuZAkBD2dldEludGVnZXJCeUtleQEJAQprZXlFbmRTYWxlAgUGY2FsbGVyBQVhcnRJZAMDAwkBAiE9AgUIYmxvY2tFbmQAAAkAZwIFBmhlaWdodAUIYmxvY2tFbmQHCQEBIQEFBWlzQmlkBwkAAgECC1NhbGUgZW5kZWQuBA5jYWxsZXJJc0lzc3VlcgkAAAIFBmNhbGxlcgUGaXNzdWVyBAh0b3RhbE5GVAkBD2dldEludGVnZXJCeUtleQECEHRvdGFsX25mdF9pc3N1ZWQEC2FydHdvcmtOYW1lCQEOZ2V0U3RyaW5nQnlLZXkBCQEHa2V5TmFtZQIFBmlzc3VlcgUFYXJ0SWQDCQAAAgULYXJ0d29ya05hbWUCAAkAAgECEUFydCBkb2Vzbid0IGV4aXN0BAhpc09uU2FsZQkBD2dldEJvb2xlYW5CeUtleQEJAQlrZXlPblNhbGUCBQZpc3N1ZXIFBWFydElkBAphbW91bnRTb2xkCQEPZ2V0SW50ZWdlckJ5S2V5AQkBCWtleUlzc3VlZAIFBmlzc3VlcgUFYXJ0SWQEDGFydHdvcmtQcmljZQMFDmNhbGxlcklzSXNzdWVyBQhtaW50X2ZlZQkBD2dldEludGVnZXJCeUtleQEJAQhrZXlQcmljZQIFBmlzc3VlcgUFYXJ0SWQEDHByaWNlQXNzZXRJZAMFDmNhbGxlcklzSXNzdWVyCQDYBAEFCmFydEFzc2V0SWQJAQ5nZXRTdHJpbmdCeUtleQEJARJrZXlBc3NldElkQWNjZXB0ZWQCBQZpc3N1ZXIFBWFydElkBAptYXhDYW5TZWxsCQEPZ2V0SW50ZWdlckJ5S2V5AQkBCmtleU1heE1pbnQCBQZpc3N1ZXIFBWFydElkAwMDCQEBIQEFBWlzQmlkCQEBIQEFDmNhbGxlcklzSXNzdWVyBwMDCQBnAgAABQxhcnR3b3JrUHJpY2UGCQEBIQEFCGlzT25TYWxlBgkAZwIAAAUKbWF4Q2FuU2VsbAcJAAIBAhBBcnQgbm90IGZvciBzYWxlAwMDCQEBIQEFBWlzQmlkBQ5jYWxsZXJJc0lzc3VlcgcJAGcCAAAFCm1heENhblNlbGwHCQACAQIUTWF4IGlzc3VhYmxlIG5vdCBzZXQECWNoZWNrVXNlcgkBDHZhbGlkYXRlVXNlcgEFBmlzc3VlcgMDBQVpc0JpZAkBAiE9AgUJY2hlY2tVc2VyAgAHCQACAQUJY2hlY2tVc2VyBApiaWREYXRhS2V5CQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICBGJpZF8FBWFydElkAgFfBQZpc3N1ZXICAV8FCGJpZE93bmVyAgFfBQViaWRJZAQNJHQwMTUwMjUxNTIxNwMFBWlzQmlkCQEWZ2V0UHJpY2VBc3NldElkRnJvbUJpZAEFCmJpZERhdGFLZXkJARR2YWxpZGF0ZVByaWNlQXNzZXRJZAMFAWkFDHByaWNlQXNzZXRJZAUMYXJ0d29ya1ByaWNlBAZhbW91bnQIBQ0kdDAxNTAyNTE1MjE3Al8xBAdhc3NldElkCAUNJHQwMTUwMjUxNTIxNwJfMgQFYWdlbnQJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUIdXNlckRhcHAJARJrZXlBcnRpc3RBZ2VudEFkZHIBBQZpc3N1ZXIFC2ZlZVJlY2VpdmVyBAphZ2VudFNoYXJlCQELdmFsdWVPckVsc2UCCQCaCAIFCHVzZXJEYXBwCQEUa2V5UHJpbWFyeVNoYXJlQWdlbnQBBQZpc3N1ZXIAAAQLcHVibGljQWdlbnQJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUIdXNlckRhcHAJARhrZXlBcnRpc3RQdWJsaWNBZ2VudEFkZHIBBQZpc3N1ZXIFC2ZlZVJlY2VpdmVyBBBwdWJsaWNBZ2VudFNoYXJlCQELdmFsdWVPckVsc2UCCQCaCAIFCHVzZXJEYXBwCQEaa2V5UHJpbWFyeVNoYXJlUHVibGljQWdlbnQBBQZpc3N1ZXIAAAQNaXNXaGl0ZWxpc3RlZAkBDmNoZWNrV2hpdGVsaXN0AQUGaXNzdWVyBA1hbW91bnRGb3JTaWduCQBrAwUGYW1vdW50BQ5jb21taXNzaW9uX2ZlZQBkBA5hbW91bnRGb3JBZ2VudAMDAwkBAiE9AgUFYWdlbnQFC2ZlZVJlY2VpdmVyCQBmAgUKYWdlbnRTaGFyZQAABwkAZgIFBmhlaWdodAUNaXNXaGl0ZWxpc3RlZAcJAGsDBQZhbW91bnQFCmFnZW50U2hhcmUAkE4AAAQUYW1vdW50Rm9yUHVibGljQWdlbnQDAwMJAQIhPQIFC3B1YmxpY0FnZW50BQtmZWVSZWNlaXZlcgkAZgIFEHB1YmxpY0FnZW50U2hhcmUAAAcJAGYCBQZoZWlnaHQFDWlzV2hpdGVsaXN0ZWQHCQBrAwUGYW1vdW50BRBwdWJsaWNBZ2VudFNoYXJlAJBOAAAEEGFtb3VudEZvckNyZWF0b3IJAGUCBQZhbW91bnQFDWFtb3VudEZvclNpZ24DCQAAAgUKYW1vdW50U29sZAUKbWF4Q2FuU2VsbAkAAgECDEFydCBzb2xkIG91dAQNbmV3QW1vdW50U29sZAkAZAIFCmFtb3VudFNvbGQAAQQJaXNzdWVNZXRhCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAglDcmVhdG9yOiAFBmlzc3VlcgIKLAogQXJ0SUQ6IAUFYXJ0SWQCESwKIEFydHdvcmsgbmFtZTogBQthcnR3b3JrTmFtZQIKLAogSXNzdWU6IAkApAMBBQ1uZXdBbW91bnRTb2xkAgEvCQCkAwEFCm1heENhblNlbGwECGlzc3VlTkZUCQDCCAUJAKwCAgIDU0FfCQCkAwEJAGQCBQh0b3RhbE5GVAABBQlpc3N1ZU1ldGEAAQAABwQFaWRORlQJALgIAQUIaXNzdWVORlQECnNlbGxTdGF0dXMDAwkAAAIFDW5ld0Ftb3VudFNvbGQFCm1heENhblNlbGwGCQEBIQEFCGlzT25TYWxlBwYECnJlY2VpdmVORlQDAwMJAAACBQZjYWxsZXIFBmlzc3VlcgkBAiE9AgUIYmlkT3duZXICAAcJAQIhPQIFBWJpZElkAgAHCQERQGV4dHJOYXRpdmUoMTA2MikBBQhiaWRPd25lcggFAWkGY2FsbGVyBAphc3NldElkQmlkAwkBASEBCQEJaXNEZWZpbmVkAQUHYXNzZXRJZAIFV0FWRVMJANgEAQkBBXZhbHVlAQUHYXNzZXRJZAQHYmlkRGF0YQkBDmdldFN0cmluZ0J5S2V5AQkArAICBQpiaWREYXRhS2V5AgVfT1BFTgQJYmlkRGVsT2xkCQELRGVsZXRlRW50cnkBCQCsAgIFCmJpZERhdGFLZXkCBV9PUEVOBAliaWRVcGRhdGUJAQtTdHJpbmdFbnRyeQIJAKwCAgUKYmlkRGF0YUtleQIHX0NMT1NFRAkArAICCQCsAgIFB2JpZERhdGECAV8JAKQDAQUEZGF0ZQQHc29sZEtleQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAglhcnRfc29sZF8JAKQDAQUNbmV3QW1vdW50U29sZAIEX29mXwkApAMBBQptYXhDYW5TZWxsAgFfBQVhcnRJZAIBXwUGaXNzdWVyBAlzb2xkVmFsdWUDCQEBIQEFBWlzQmlkCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBmNhbGxlcgIBXwkApAMBBQRkYXRlAgFfBQJpZAIBXwkApAMBBQxhcnR3b3JrUHJpY2UCAV8FDHByaWNlQXNzZXRJZAIBXwkA2AQBBQVpZE5GVAkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQClCAEFCnJlY2VpdmVORlQCAV8JAKQDAQUEZGF0ZQIBXwUCaWQCAV8JAKQDAQUGYW1vdW50AgFfBQphc3NldElkQmlkAgFfCQDYBAEFBWlkTkZUBAhzb2xkRGF0YQkBC1N0cmluZ0VudHJ5AgUHc29sZEtleQUJc29sZFZhbHVlBBRjb21taXNzaW9uc1dpdGhBZ2VudAMJAQIhPQIFDmFtb3VudEZvckFnZW50AAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFC2ZlZVJlY2VpdmVyCQBlAgUNYW1vdW50Rm9yU2lnbgUOYW1vdW50Rm9yQWdlbnQFB2Fzc2V0SWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFBWFnZW50BQ5hbW91bnRGb3JBZ2VudAUHYXNzZXRJZAUDbmlsCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQtmZWVSZWNlaXZlcgUNYW1vdW50Rm9yU2lnbgUHYXNzZXRJZAUDbmlsBBpjb21taXNzaW9uc1dpdGhQdWJsaWNBZ2VudAMJAQIhPQIFFGFtb3VudEZvclB1YmxpY0FnZW50AAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFC3B1YmxpY0FnZW50BRRhbW91bnRGb3JQdWJsaWNBZ2VudAUHYXNzZXRJZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUGaXNzdWVyCQBlAgUQYW1vdW50Rm9yQ3JlYXRvcgUUYW1vdW50Rm9yUHVibGljQWdlbnQFB2Fzc2V0SWQFA25pbAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUGaXNzdWVyBRBhbW91bnRGb3JDcmVhdG9yBQdhc3NldElkBQNuaWwECnR4VG9DYWxsZXIDBQtpc1Nwb25zb3JlZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUGY2FsbGVyAAAFBHVuaXQFA25pbAUDbmlsBAZidXlSZXMJAM4IAgkAzggCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJAQlrZXlJc3N1ZWQCBQZpc3N1ZXIFBWFydElkBQ1uZXdBbW91bnRTb2xkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgIEbmZ0XwkA2AQBBQVpZE5GVAUHc29sZEtleQkAzAgCCQEMSW50ZWdlckVudHJ5AgIQdG90YWxfbmZ0X2lzc3VlZAkAZAIFCHRvdGFsTkZUAAEJAMwIAgkBDEludGVnZXJFbnRyeQIJAQprZXlFbmRTYWxlAgUGaXNzdWVyBQVhcnRJZAAACQDMCAIJAQxCb29sZWFuRW50cnkCCQEJa2V5T25TYWxlAgUGaXNzdWVyBQVhcnRJZAUKc2VsbFN0YXR1cwkAzAgCBQhpc3N1ZU5GVAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQpyZWNlaXZlTkZUAAEFBWlkTkZUBQNuaWwFFGNvbW1pc3Npb25zV2l0aEFnZW50BRpjb21taXNzaW9uc1dpdGhQdWJsaWNBZ2VudAUKdHhUb0NhbGxlcgMFBWlzQmlkCQDMCAIFCHNvbGREYXRhCQDMCAIFCWJpZFVwZGF0ZQkAzAgCBQliaWREZWxPbGQFBmJ1eVJlcwkAzAgCBQhzb2xkRGF0YQUGYnV5UmVzAQhhc1N0cmluZwECYnYEByRtYXRjaDAFAmJ2AwkAAQIFByRtYXRjaDACBlN0cmluZwQDYnYwBQckbWF0Y2gwBQNidjAJAAIBAiRTcG9uc29yZWQgUHVibGljIEtleSBTdHJpbmcgZXhwZWN0ZWQKBmludm9rZQEHc2V0Q29uZgIDa2V5A3ZhbAQGY2FsbGVyCQClCAEIBQZpbnZva2UGY2FsbGVyAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUFY2hyaXMJAMwIAgkApQgBBQR0aGlzBQNuaWwFBmNhbGxlcgMJAQhjb250YWlucwIFA2tleQIFY29uZl8JAMwIAgkBC1N0cmluZ0VudHJ5AgUDa2V5BQN2YWwFA25pbAkAAgECIEVudHJpZXMgc3RhcnRpbmcgd2l0aCBjb25mXyBvbmx5CQACAQIiWW91IGFyZSBub3QgYWxsb3dlZCB0byBjaGFuZ2UgdGhpcwFpAQphZGRBcnR3b3JrDARuYW1lC2Rlc2NyaXB0aW9uBHRhZ3MEdHlwZQpjaWREaXNwbGF5DHNoYTI1NkV4cG9ydAljaWRFeHBvcnQNc2hhMjU2TGljZW5jZQpjaWRMaWNlbmNlB2NyYXdsZXIJcm95YWx0aWVzBnB1YktleQQNJHQwMjA4MDgyMDg4MQkBFWlkQ2FsbGVyRGF0ZVNwb25zb3JlZAIFAWkFBnB1YktleQQFYXJ0SWQIBQ0kdDAyMDgwODIwODgxAl8xBAZjYWxsZXIIBQ0kdDAyMDgwODIwODgxAl8yBARkYXRlCAUNJHQwMjA4MDgyMDg4MQJfMwQLaXNTcG9uc29yZWQIBQ0kdDAyMDgwODIwODgxAl80BA0kdDAyMDg5MTIwOTYwCQEKc2V0TEljZW5jZQIFCmNpZExpY2VuY2UFDXNoYTI1NkxpY2VuY2UECmxpY2VuY2VDSUQIBQ0kdDAyMDg5MTIwOTYwAl8xBAtsaWNlbmNlSGFzaAgFDSR0MDIwODkxMjA5NjACXzIED3ZhbGlkYXRlQXJ0d29yawkBE3ZhbGlkYXRlQXJ0d29ya0RhdGEKBQZjYWxsZXIFCmNpZERpc3BsYXkFCWNpZEV4cG9ydAUKbGljZW5jZUNJRAUMc2hhMjU2RXhwb3J0BQtsaWNlbmNlSGFzaAUEbmFtZQULZGVzY3JpcHRpb24FBHRhZ3MFCXJveWFsdGllcwMJAQIhPQIFD3ZhbGlkYXRlQXJ0d29yawIACQACAQIVU29tZXRoaW5nIHdlbnQgd3JvbmchBBB3aGl0ZWxpc3RlZF9kcm9wCQBmAgkBDmNoZWNrV2hpdGVsaXN0AQkArAICBQZjYWxsZXICC19mcmVlX2Ryb3BzAAAEDSR0MDIxMjU5MjEzNDcDBRB3aGl0ZWxpc3RlZF9kcm9wCQCUCgIAAAUKYXJ0QXNzZXRJZAkBD3ZhbGlkYXRlUGF5bWVudAEFAWkEBmFtb3VudAgFDSR0MDIxMjU5MjEzNDcCXzEEB2Fzc2V0SWQIBQ0kdDAyMTI1OTIxMzQ3Al8yAwkBASEBCQEJaXNEZWZpbmVkAQUGYW1vdW50CQACAQIUU29tZXRoaW5nIHdlbnQgd3JvbmcEF2RlY3JlYXNlX3doaXRlbGlzdF9kcm9wAwUQd2hpdGVsaXN0ZWRfZHJvcAkA/AcEBQ13aGl0ZWxpc3REYXBwAgt1c2VGcmVlRHJvcAkAzAgCBQZjYWxsZXIFA25pbAUDbmlsBQR1bml0AwkAAAIFF2RlY3JlYXNlX3doaXRlbGlzdF9kcm9wBRdkZWNyZWFzZV93aGl0ZWxpc3RfZHJvcAQKdHhUb0NhbGxlcgMFC2lzU3BvbnNvcmVkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQZjYWxsZXIAAAUEdW5pdAUDbmlsBQNuaWwJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBB2tleURhdGUCBQZjYWxsZXIFBWFydElkBQRkYXRlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQdrZXlOYW1lAgUGY2FsbGVyBQVhcnRJZAUEbmFtZQkAzAgCCQELU3RyaW5nRW50cnkCCQEHa2V5RGVzYwIFBmNhbGxlcgUFYXJ0SWQFC2Rlc2NyaXB0aW9uCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ1rZXlEaXNwbGF5Q2lkAgUGY2FsbGVyBQVhcnRJZAUKY2lkRGlzcGxheQkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5RXhwb3J0Q2lkAgUGY2FsbGVyBQVhcnRJZAUJY2lkRXhwb3J0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ1rZXlFeHBvcnRIYXNoAgUGY2FsbGVyBQVhcnRJZAUMc2hhMjU2RXhwb3J0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ5rZXlMaWNlbmNlSGFzaAIFBmNhbGxlcgUFYXJ0SWQFC2xpY2VuY2VIYXNoCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ1rZXlMaWNlbmNlQ2lkAgUGY2FsbGVyBQVhcnRJZAUKbGljZW5jZUNJRAkAzAgCCQELU3RyaW5nRW50cnkCCQEHa2V5VHlwZQIFBmNhbGxlcgUFYXJ0SWQFBHR5cGUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBB2tleVRhZ3MCBQZjYWxsZXIFBWFydElkBQR0YWdzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEKa2V5TWF4TWludAIFBmNhbGxlcgUFYXJ0SWQAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBCWtleUlzc3VlZAIFBmNhbGxlcgUFYXJ0SWQAAAkAzAgCCQEMQm9vbGVhbkVudHJ5AgkBCWtleU9uU2FsZQIFBmNhbGxlcgUFYXJ0SWQHCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQprZXlDcmF3bGVyAgUGY2FsbGVyBQVhcnRJZAUHY3Jhd2xlcgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDGtleVJveWFsdGllcwIFBmNhbGxlcgUFYXJ0SWQFCXJveWFsdGllcwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQULZmVlUmVjZWl2ZXIFBmFtb3VudAUKYXJ0QXNzZXRJZAUDbmlsBQp0eFRvQ2FsbGVyCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDXVwZGF0ZUFydHdvcmsNBHR4aWQEbmFtZQtkZXNjcmlwdGlvbgR0YWdzBHR5cGUKY2lkRGlzcGxheQxzaGEyNTZFeHBvcnQJY2lkRXhwb3J0DXNoYTI1NkxpY2VuY2UKY2lkTGljZW5jZQdjcmF3bGVyCXJveWFsdGllcwZwdWJLZXkDCQEBIQEFC2RhcHBSdW5uaW5nCQACAQUObWFpbnRlbmFuY2VNU0cEDSR0MDIzMjYyMjMzMzIJARVpZENhbGxlckRhdGVTcG9uc29yZWQCBQFpBQZwdWJLZXkEAmlkCAUNJHQwMjMyNjIyMzMzMgJfMQQGY2FsbGVyCAUNJHQwMjMyNjIyMzMzMgJfMgQEZGF0ZQgFDSR0MDIzMjYyMjMzMzICXzMEC2lzU3BvbnNvcmVkCAUNJHQwMjMyNjIyMzMzMgJfNAQNJHQwMjMzNDIyMzQxMQkBCnNldExJY2VuY2UCBQpjaWRMaWNlbmNlBQ1zaGEyNTZMaWNlbmNlBApsaWNlbmNlQ0lECAUNJHQwMjMzNDIyMzQxMQJfMQQLbGljZW5jZUhhc2gIBQ0kdDAyMzM0MjIzNDExAl8yBA92YWxpZGF0ZUFydHdvcmsJARN2YWxpZGF0ZUFydHdvcmtEYXRhCgUGY2FsbGVyBQpjaWREaXNwbGF5BQljaWRFeHBvcnQFCmxpY2VuY2VDSUQFDHNoYTI1NkV4cG9ydAULbGljZW5jZUhhc2gFBG5hbWUFC2Rlc2NyaXB0aW9uBQR0YWdzBQlyb3lhbHRpZXMDCQECIT0CBQ92YWxpZGF0ZUFydHdvcmsCAAkAAgECFVNvbWV0aGluZyB3ZW50IHdyb25nIQQKZW50cnlFeGlzdAkBDmdldFN0cmluZ0J5S2V5AQkBB2tleU5hbWUCBQZjYWxsZXIFBHR4aWQDCQAAAgUKZW50cnlFeGlzdAIACQACAQIPRW50cnkgbm90IGZvdW5kBARmbGFnCQEOZ2V0U3RyaW5nQnlLZXkBCQEHa2V5RmxhZwIFBmNhbGxlcgUEdHhpZAMJAAACBQRmbGFnAgdJTExFR0FMCQACAQIdQ2Fubm90IHVwZGF0ZSBJTExFR0FMIGFydHdvcmsDCQEBIQEJAQtpc0FydE1pbnRlZAIFBmNhbGxlcgUEdHhpZAQKdHhUb0NhbGxlcgMFC2lzU3BvbnNvcmVkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQZjYWxsZXIAAAUEdW5pdAUDbmlsBQNuaWwJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCCQEHa2V5TmFtZQIFBmNhbGxlcgUEdHhpZAUEbmFtZQkAzAgCCQELU3RyaW5nRW50cnkCCQEHa2V5RGVzYwIFBmNhbGxlcgUEdHhpZAULZGVzY3JpcHRpb24JAMwIAgkBC1N0cmluZ0VudHJ5AgkBDWtleURpc3BsYXlDaWQCBQZjYWxsZXIFBHR4aWQFCmNpZERpc3BsYXkJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleUV4cG9ydENpZAIFBmNhbGxlcgUEdHhpZAUJY2lkRXhwb3J0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ1rZXlFeHBvcnRIYXNoAgUGY2FsbGVyBQR0eGlkBQxzaGEyNTZFeHBvcnQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDWtleUxpY2VuY2VDaWQCBQZjYWxsZXIFBHR4aWQFCmxpY2VuY2VDSUQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDmtleUxpY2VuY2VIYXNoAgUGY2FsbGVyBQR0eGlkBQtsaWNlbmNlSGFzaAkAzAgCCQELU3RyaW5nRW50cnkCCQEHa2V5VGFncwIFBmNhbGxlcgUEdHhpZAUEdGFncwkAzAgCCQELU3RyaW5nRW50cnkCCQEHa2V5VHlwZQIFBmNhbGxlcgUEdHhpZAUEdHlwZQkAzAgCCQELU3RyaW5nRW50cnkCCQEKa2V5Q3Jhd2xlcgIFBmNhbGxlcgUEdHhpZAUHY3Jhd2xlcgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDGtleVJveWFsdGllcwIFBmNhbGxlcgUEdHhpZAUJcm95YWx0aWVzBQNuaWwFCnR4VG9DYWxsZXIJAAIBAg5BbHJlYWR5IG1pbnRlZAFpAQtmbGFnQXJ0d29yawQFYXJ0SWQEYWRkcgRmbGFnBG5vdGUEDSR0MDI1MDM4MjUwNzIJAQxpZENhbGxlckRhdGUBBQFpBAJpZAgFDSR0MDI1MDM4MjUwNzICXzEEBmNhbGxlcggFDSR0MDI1MDM4MjUwNzICXzIDCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQVjaHJpcwkAzAgCCQClCAEFBHRoaXMFA25pbAUGY2FsbGVyAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgIHQ09OU0VOVAkAzAgCAgAJAMwIAgIPQ0hBTkdFX1JFUVVJUkVECQDMCAICB0ZMQUdHRUQJAMwIAgIHSUxMRUdBTAUDbmlsBQRmbGFnCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQdrZXlGbGFnAgUEYWRkcgUFYXJ0SWQFBGZsYWcJAMwIAgkBC1N0cmluZ0VudHJ5AgkBB2tleU5vdGUCBQRhZGRyBQVhcnRJZAUEbm90ZQUDbmlsCQACAQkArAICAg5Vbmtub3cgc3RhdHVzIAUEZmxhZwkAAgECE1lvdSBhcmUgbm90IGFsbG93ZWQBaQENZGVsZXRlQXJ0d29yawIFYXJ0SWQEYWRkcgQNJHQwMjU1MDgyNTU0MgkBDGlkQ2FsbGVyRGF0ZQEFAWkEAmlkCAUNJHQwMjU1MDgyNTU0MgJfMQQGY2FsbGVyCAUNJHQwMjU1MDgyNTU0MgJfMgQJYWRkclRvVXNlAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUFY2hyaXMJAMwIAgkApQgBBQR0aGlzBQNuaWwFBmNhbGxlcgUEYWRkcgUGY2FsbGVyBAplbnRyeUV4aXN0CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAQ5nZXRTdHJpbmdCeUtleQEJAQdrZXlOYW1lAgUJYWRkclRvVXNlBQVhcnRJZAIgTm8gYXJ0IG1hdGNoaW5nIGZvciB0aGlzIGFkZHJlc3MDCQAAAgUKZW50cnlFeGlzdAIACQACAQIgTm8gYXJ0IG1hdGNoaW5nIGZvciB0aGlzIGFkZHJlc3MECnNoYTI1Nkhhc2gJAQ5nZXRTdHJpbmdCeUtleQEJARFrZXlIYXNoQnlUeGlkQWRkcgIFCWFkZHJUb1VzZQUFYXJ0SWQEBnNpZ25JRAMJAAACBQpzaGEyNTZIYXNoAgAJAQ5nZXRTdHJpbmdCeUtleQEJAQlrZXlTaWduSUQCBQlhZGRyVG9Vc2UFBWFydElkAgAEDXNpZ25JRF9sZWdhY3kDCQAAAgUGc2lnbklEAgAFA25pbAkAzAgCCQELRGVsZXRlRW50cnkBCQENa2V5aWRCeVNpZ25pZAIFCWFkZHJUb1VzZQUGc2lnbklEBQNuaWwEDGRhdGFUb0RlbGV0ZQkAzggCCQDMCAIJAQtEZWxldGVFbnRyeQEJAQdrZXlEYXRlAgUJYWRkclRvVXNlBQVhcnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEHa2V5TmFtZQIFCWFkZHJUb1VzZQUFYXJ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBB2tleURlc2MCBQlhZGRyVG9Vc2UFBWFydElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ1rZXlEaXNwbGF5Q2lkAgUJYWRkclRvVXNlBQVhcnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEMa2V5RXhwb3J0Q2lkAgUJYWRkclRvVXNlBQVhcnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQENa2V5RXhwb3J0SGFzaAIFCWFkZHJUb1VzZQUFYXJ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDmtleUxpY2VuY2VIYXNoAgUJYWRkclRvVXNlBQVhcnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQENa2V5TGljZW5jZUNpZAIFCWFkZHJUb1VzZQUFYXJ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBB2tleVR5cGUCBQlhZGRyVG9Vc2UFBWFydElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQdrZXlUYWdzAgUJYWRkclRvVXNlBQVhcnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEKa2V5TWF4TWludAIFCWFkZHJUb1VzZQUFYXJ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBCWtleVNpZ25JRAIFCWFkZHJUb1VzZQUFYXJ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBCWtleUlzc3VlZAIFCWFkZHJUb1VzZQUFYXJ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBCWtleU9uU2FsZQIFCWFkZHJUb1VzZQUFYXJ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBB2tleUZsYWcCBQlhZGRyVG9Vc2UFBWFydElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQhrZXlQcmljZQIFCWFkZHJUb1VzZQUFYXJ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBEmtleUFzc2V0SWRBY2NlcHRlZAIFCWFkZHJUb1VzZQUFYXJ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDmtleU93bmVyQnlIYXNoAQUKc2hhMjU2SGFzaAkAzAgCCQELRGVsZXRlRW50cnkBCQEKa2V5RW5kU2FsZQIFCWFkZHJUb1VzZQUFYXJ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBB2tleU5vdGUCBQlhZGRyVG9Vc2UFBWFydElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQprZXlDcmF3bGVyAgUJYWRkclRvVXNlBQVhcnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEMa2V5Um95YWx0aWVzAgUJYWRkclRvVXNlBQVhcnRJZAUDbmlsBQ1zaWduSURfbGVnYWN5AwkBASEBCQELaXNBcnRNaW50ZWQCBQlhZGRyVG9Vc2UFBWFydElkAwkBASEBBQtkYXBwUnVubmluZwkAAgEFDm1haW50ZW5hbmNlTVNHBQxkYXRhVG9EZWxldGUDCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQVjaHJpcwkAzAgCCQClCAEFBHRoaXMFA25pbAUGY2FsbGVyBQxkYXRhVG9EZWxldGUJAAIBAihBcnQgYWxyZWFkeSBtaW50ZWQsIHlvdSBjYW5ub3QgZGVsZXRlIGl0AWkBC3NlbGxBcnR3b3JrBgVhcnRJZAVwcmljZQdtYXhNaW50B2Fzc2V0SWQIYmxvY2tFbmQGcHViS2V5BA0kdDAyODMyMTI4MzkxCQEVaWRDYWxsZXJEYXRlU3BvbnNvcmVkAgUBaQUGcHViS2V5BAJpZAgFDSR0MDI4MzIxMjgzOTECXzEEBmNhbGxlcggFDSR0MDI4MzIxMjgzOTECXzIEBGRhdGUIBQ0kdDAyODMyMTI4MzkxAl8zBAtpc1Nwb25zb3JlZAgFDSR0MDI4MzIxMjgzOTECXzQEC2FydHdvcmtOYW1lCQEOZ2V0U3RyaW5nQnlLZXkBCQEHa2V5TmFtZQIFBmNhbGxlcgUFYXJ0SWQDCQAAAgULYXJ0d29ya05hbWUCAAkAAgECI1RoaXMgYXJ0IGRvZXNuJ3QgbWF0Y2ggeW91ciBhY2NvdW50BARmbGFnCQEOZ2V0U3RyaW5nQnlLZXkBCQEHa2V5RmxhZwIFBmNhbGxlcgUFYXJ0SWQDCQEPY29udGFpbnNFbGVtZW50AgkAzAgCAg9DSEFOR0VfUkVRVUlSRUQJAMwIAgIHRkxBR0dFRAkAzAgCAgdJTExFR0FMBQNuaWwFBGZsYWcJAAIBAg9GbGFnZ2VkIGFydHdvcmsEBmJpZE5icgkBD2dldEludGVnZXJCeUtleQEJAKwCAgISY3VycmVudF9iaWRhbW91bnRfBQVhcnRJZAMJAGYCAAAFCGJsb2NrRW5kCQACAQIMTmVnYXRpdmUgZW5kAwMJAGYCBQhibG9ja0VuZAAAAwkBAiE9AgUHbWF4TWludAABBgkBAiE9AgUFcHJpY2UAAAcJAAIBAjpUaW1lZCBvZmZlciBvbmx5IGFsbG93ZWQgZm9yIHVuaXF1ZSBlZGl0aW9uIGFuZCBvZmZlciBvbmx5BApiYXNlSGVpZ2h0AwkAAAIFCGJsb2NrRW5kAAAAAAUGaGVpZ2h0AwkBASEBCQEQYWNjZXB0ZWRBc3NldElkcwEFB2Fzc2V0SWQJAAIBAhVTb21ldGhpbmcgd2VudCB3cm9uZyEDCQEBIQEJAQ92YWxpZGF0ZU1pblNlbGwBBQVwcmljZQkAAgECFVNvbWV0aGluZyB3ZW50IHdyb25nIQQJY2hlY2tVc2VyCQEMdmFsaWRhdGVVc2VyAQUGY2FsbGVyAwkBAiE9AgUJY2hlY2tVc2VyAgAJAAIBBQljaGVja1VzZXIECmFtb3VudFNvbGQJAQ9nZXRJbnRlZ2VyQnlLZXkBCQEJa2V5SXNzdWVkAgUGY2FsbGVyBQVhcnRJZAQKbWF4Q2FuU2VsbAkBD2dldEludGVnZXJCeUtleQEJAQprZXlNYXhNaW50AgUGY2FsbGVyBQVhcnRJZAMJAGYCBQdtYXhNaW50AGQJAAIBAhwxMDAgZWRpdGlvbnMgbWF4IHBlciBhcnR3b3JrAwMJAQIhPQIFCmFtb3VudFNvbGQAAAkAAAIFCmFtb3VudFNvbGQFCm1heENhblNlbGwHCQACAQIUTWF4IGVkaXRpb24gcmVhY2hlZC4DAwkAZgIFCmFtb3VudFNvbGQAAAkBAiE9AgUKbWF4Q2FuU2VsbAUHbWF4TWludAcJAAIBAiZDYW5ub3QgY2hhbmdlIG1heGltdW0gaXNzdWFibGUgYW55bW9yZQMDCQBmAgUGYmlkTmJyAAAJAQIhPQIFCm1heENhblNlbGwFB21heE1pbnQHCQACAQIxQ2Fubm90IGNoYW5nZSBtYXhpbXVtIGlzc3VhYmxlIHdpdGggYWN0aXZlIG9yZGVycwQKc2VsbFN0YXR1cwMDCQBmAgUFcHJpY2UAAAkAZgIFB21heE1pbnQAAAcGBwQKdHhUb0NhbGxlcgMFC2lzU3BvbnNvcmVkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQZjYWxsZXIAAAUEdW5pdAUDbmlsBQNuaWwJAM4IAgkAzAgCCQEMQm9vbGVhbkVudHJ5AgkBCWtleU9uU2FsZQIFBmNhbGxlcgUFYXJ0SWQFCnNlbGxTdGF0dXMJAMwIAgkBDEludGVnZXJFbnRyeQIJAQhrZXlQcmljZQIFBmNhbGxlcgUFYXJ0SWQFBXByaWNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEKa2V5TWF4TWludAIFBmNhbGxlcgUFYXJ0SWQFB21heE1pbnQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEmtleUFzc2V0SWRBY2NlcHRlZAIFBmNhbGxlcgUFYXJ0SWQFB2Fzc2V0SWQJAMwIAgkBDEludGVnZXJFbnRyeQIJAQprZXlFbmRTYWxlAgUGY2FsbGVyBQVhcnRJZAkAZAIFCmJhc2VIZWlnaHQFCGJsb2NrRW5kBQNuaWwFCnR4VG9DYWxsZXIBaQEKYnV5QXJ0d29yawIFYXJ0SWQGaXNzdWVyCQEHYnV5TWludAYFAWkFBWFydElkBQZpc3N1ZXICAAIAAgABaQEGc2V0QmlkAgVhcnRJZAZpc3N1ZXIEDSR0MDMwNzY0MzA4MDQJAQxpZENhbGxlckRhdGUBBQFpBAJpZAgFDSR0MDMwNzY0MzA4MDQCXzEEBmNhbGxlcggFDSR0MDMwNzY0MzA4MDQCXzIEBGRhdGUIBQ0kdDAzMDc2NDMwODA0Al8zBA0kdDAzMDgwOTMwODQ1CQEJaXNQYXltZW50AQUBaQQHcGF5bWVudAgFDSR0MDMwODA5MzA4NDUCXzEEBmFtb3VudAgFDSR0MDMwODA5MzA4NDUCXzIEB2Fzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCAUHcGF5bWVudAdhc3NldElkAgVXQVZFUwkA2AQBCQEFdmFsdWUBCAUHcGF5bWVudAdhc3NldElkBAhibG9ja0VuZAkBD2dldEludGVnZXJCeUtleQEJAQprZXlFbmRTYWxlAgUGaXNzdWVyBQVhcnRJZAMDCQECIT0CBQhibG9ja0VuZAAACQBnAgUGaGVpZ2h0BQhibG9ja0VuZAcJAAIBAgtTYWxlIGVuZGVkLgQGYmlkTmJyCQEPZ2V0SW50ZWdlckJ5S2V5AQkArAICAhJjdXJyZW50X2JpZGFtb3VudF8FBWFydElkAwkBASEBCQEQYWNjZXB0ZWRBc3NldElkcwEFB2Fzc2V0SWQJAAIBAhJhc3NldCBub3QgYWNjZXB0ZWQDCQEBIQEJAQ92YWxpZGF0ZU1pblNlbGwBBQZhbW91bnQJAAIBAg5Xcm9uZyBtaW4gc2VsbAQKYW1vdW50U29sZAkBD2dldEludGVnZXJCeUtleQEJAQlrZXlJc3N1ZWQCBQZpc3N1ZXIFBWFydElkBAptYXhDYW5TZWxsCQEPZ2V0SW50ZWdlckJ5S2V5AQkBCmtleU1heE1pbnQCBQZpc3N1ZXIFBWFydElkAwkAZwIAAAUKbWF4Q2FuU2VsbAkAAgECI05vIG1heCBlZGl0aW9uIHNldCBmb3IgdGhpcyBhcnR3b3JrAwkAZwIFCmFtb3VudFNvbGQFCm1heENhblNlbGwJAAIBAhhTb2xkIG91dCwgeW91IGNhbm5vdCBiaWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICBGJpZF8FBWFydElkAgFfBQZpc3N1ZXICAV8FBmNhbGxlcgIBXwUCaWQCBV9PUEVOCQCsAgIJAKwCAgkArAICCQCsAgIFB2Fzc2V0SWQCAV8JAKQDAQUGYW1vdW50AgFfCQCkAwEFBGRhdGUJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgISY3VycmVudF9iaWRhbW91bnRfBQVhcnRJZAkAZAIFBmJpZE5icgABBQNuaWwBaQEJYWNjZXB0QmlkBQVhcnRJZAZpc3N1ZXIFYmlkSWQIYmlkT3duZXIGcHViS2V5CQEHYnV5TWludAYFAWkFBWFydElkBQZpc3N1ZXIFBWJpZElkBQhiaWRPd25lcgUGcHViS2V5AWkBCWNhbmNlbEJpZAQFYXJ0SWQGaXNzdWVyBWJpZElkCGJpZE93bmVyBA0kdDAzMjE2OTMyMjMwCQEMaWRDYWxsZXJEYXRlAQUBaQQCaWQIBQ0kdDAzMjE2OTMyMjMwAl8xBAZjYWxsZXIIBQ0kdDAzMjE2OTMyMjMwAl8yBARkYXRlCAUNJHQwMzIxNjkzMjIzMAJfMwMDCQECIT0CBQZjYWxsZXIFCGJpZE93bmVyCQECIT0CBQZjYWxsZXIFBmlzc3VlcgcJAAIBAhlZb3UgY2Fubm90IGRvIHRoaXMgYWN0aW9uBA1yZXR1cm5Nb25leVRvAwkAAAIFBmNhbGxlcgUGaXNzdWVyBQhiaWRPd25lcgUGY2FsbGVyBAZiaWROYnIJAQ9nZXRJbnRlZ2VyQnlLZXkBCQCsAgICEmN1cnJlbnRfYmlkYW1vdW50XwUFYXJ0SWQECmJpZERhdGFLZXkJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIEYmlkXwUFYXJ0SWQCAV8FBmlzc3VlcgIBXwUIYmlkT3duZXICAV8FBWJpZElkBAdiaWREYXRhCQEOZ2V0U3RyaW5nQnlLZXkBCQCsAgIFCmJpZERhdGFLZXkCBV9PUEVOAwkAAAIFB2JpZERhdGECAAkAAgECDUJpZCBub3QgZm91bmQECmJpZERhdGFBcnIJALUJAgUHYmlkRGF0YQIBXwQHYXNzZXRJZAkBDWdldEJpZEFzc2V0SWQBCQCRAwIFCmJpZERhdGFBcnIAAAQJYmlkU3RhdHVzAghDQU5DRUxFRAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIFCmJpZERhdGFLZXkCBV9PUEVOCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICBQpiaWREYXRhS2V5AgFfBQliaWRTdGF0dXMJAKwCAgkArAICBQdiaWREYXRhAgFfCQCkAwEFBGRhdGUJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgISY3VycmVudF9iaWRhbW91bnRfBQVhcnRJZAkAZQIFBmJpZE5icgABCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQ1yZXR1cm5Nb25leVRvCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKYmlkRGF0YUFycgABBQdhc3NldElkBQNuaWwBAnR4AQh2ZXJpZmllcgAEByRtYXRjaDAFAnR4AwkAAQIFByRtYXRjaDACF0ludm9rZVNjcmlwdFRyYW5zYWN0aW9uBANpbnYFByRtYXRjaDADAwMDCQAAAggFA2ludghmdW5jdGlvbgIKYWRkQXJ0d29yawkAAAIIBQNpbnYEZEFwcAUEdGhpcwcJAAACCAUDaW52A2ZlZQCgwh4HCQAAAggFA2ludgpmZWVBc3NldElkBQR1bml0BwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAkA2QQBCQEIYXNTdHJpbmcBCQCRAwIIBQNpbnYEYXJncwALAwMDAwkAAAIIBQNpbnYIZnVuY3Rpb24CDXVwZGF0ZUFydHdvcmsJAAACCAUDaW52BGRBcHAFBHRoaXMHCQAAAggFA2ludgNmZWUAoMIeBwkAAAIIBQNpbnYKZmVlQXNzZXRJZAUEdW5pdAcJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAJANkEAQkBCGFzU3RyaW5nAQkAkQMCCAUDaW52BGFyZ3MADAMDAwMJAAACCAUDaW52CGZ1bmN0aW9uAgtzZWxsQXJ0d29yawkAAAIIBQNpbnYEZEFwcAUEdGhpcwcJAAACCAUDaW52A2ZlZQCgwh4HCQAAAggFA2ludgpmZWVBc3NldElkBQR1bml0BwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAkA2QQBCQEIYXNTdHJpbmcBCQCRAwIIBQNpbnYEYXJncwAFAwMDAwkAAAIIBQNpbnYIZnVuY3Rpb24CCWFjY2VwdEJpZAkAAAIIBQNpbnYEZEFwcAUEdGhpcwcJAAACCAUDaW52A2ZlZQCgwh4HCQAAAggFA2ludgpmZWVBc3NldElkBQR1bml0BwkAyBMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAkA2QQBCQEIYXNTdHJpbmcBCQCRAwIIBQNpbnYEYXJncwAECQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5CQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5QxCpOA==", "height": 2754576, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 2bHT2EgMhM4ZWxo5j5EkM7hcuGRrp1HZAqHHZavPMkaV Next: 7SGjFt8UdWjsNxDVKeXW3XxCYuNq4veNSDrpu7agKEoY Diff:
OldNewDifferences
8383 let userAllowed = "ALLOWED"
8484
8585 let currentCertificationPrice = getIntegerByKeyFromOracle(("certification_fee_" + toBase58String(artAssetId)))
86+
87+let mint_fee = getIntegerByKeyFromOracle(("mint_fee_" + toBase58String(artAssetId)))
8688
8789 func getArtworkRoyalties (key) = valueOrElse(getInteger(this, key), 1000)
8890
270272
271273
272274 func validatePayment (i) = {
273- let $t01001410050 = isPayment(i)
274- let payment = $t01001410050._1
275- let amount = $t01001410050._2
275+ let $t01009510131 = isPayment(i)
276+ let payment = $t01009510131._1
277+ let amount = $t01009510131._2
276278 let assetId = if (if (isDefined(payment.assetId))
277279 then (payment.assetId == artAssetId)
278280 else false)
295297
296298
297299 func validatePriceAssetId (i,priceAssetId,artworkPrice) = {
298- let $t01063710673 = isPayment(i)
299- let payment = $t01063710673._1
300- let amount = $t01063710673._2
300+ let $t01071810754 = isPayment(i)
301+ let payment = $t01071810754._1
302+ let amount = $t01071810754._2
301303 let assetId = if (!(isDefined(payment.assetId)))
302304 then unit
303305 else if (if ((size(priceAssetId) > 0))
381383
382384
383385 func buyMint (i,artId,issuer,bidId,bidOwner,pubKey) = {
384- let $t01327813367 = idCallerDateSponsored(i, pubKey)
385- let id = $t01327813367._1
386- let caller = $t01327813367._2
387- let date = $t01327813367._3
388- let isSponsored = $t01327813367._4
386+ let $t01335913448 = idCallerDateSponsored(i, pubKey)
387+ let id = $t01335913448._1
388+ let caller = $t01335913448._2
389+ let date = $t01335913448._3
390+ let isSponsored = $t01335913448._4
389391 let isBid = if (if (if ((caller == issuer))
390392 then (bidOwner != "")
391393 else false)
415417 let isOnSale = getBooleanByKey(keyOnSale(issuer, artId))
416418 let amountSold = getIntegerByKey(keyIssued(issuer, artId))
417419 let artworkPrice = if (callerIsIssuer)
418- then (currentCertificationPrice / 5)
420+ then mint_fee
419421 else getIntegerByKey(keyPrice(issuer, artId))
420422 let priceAssetId = if (callerIsIssuer)
421423 then toBase58String(artAssetId)
445447 then throw(checkUser)
446448 else {
447449 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + bidOwner) + "_") + bidId)
448- let $t01496515157 = if (isBid)
450+ let $t01502515217 = if (isBid)
449451 then getPriceAssetIdFromBid(bidDataKey)
450452 else validatePriceAssetId(i, priceAssetId, artworkPrice)
451- let amount = $t01496515157._1
452- let assetId = $t01496515157._2
453+ let amount = $t01502515217._1
454+ let assetId = $t01502515217._2
453455 let agent = valueOrElse(getString(userDapp, keyArtistAgentAddr(issuer)), feeReceiver)
454456 let agentShare = valueOrElse(getInteger(userDapp, keyPrimaryShareAgent(issuer)), 0)
455457 let publicAgent = valueOrElse(getString(userDapp, keyArtistPublicAgentAddr(issuer)), feeReceiver)
548550
549551 @Callable(i)
550552 func addArtwork (name,description,tags,type,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence,crawler,royalties,pubKey) = {
551- let $t02074820821 = idCallerDateSponsored(i, pubKey)
552- let artId = $t02074820821._1
553- let caller = $t02074820821._2
554- let date = $t02074820821._3
555- let isSponsored = $t02074820821._4
556- let $t02083120900 = setLIcence(cidLicence, sha256Licence)
557- let licenceCID = $t02083120900._1
558- let licenceHash = $t02083120900._2
553+ let $t02080820881 = idCallerDateSponsored(i, pubKey)
554+ let artId = $t02080820881._1
555+ let caller = $t02080820881._2
556+ let date = $t02080820881._3
557+ let isSponsored = $t02080820881._4
558+ let $t02089120960 = setLIcence(cidLicence, sha256Licence)
559+ let licenceCID = $t02089120960._1
560+ let licenceHash = $t02089120960._2
559561 let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags, royalties)
560562 if ((validateArtwork != ""))
561563 then throw("Something went wrong!")
562564 else {
563565 let whitelisted_drop = (checkWhitelist((caller + "_free_drops")) > 0)
564- let $t02119921287 = if (whitelisted_drop)
566+ let $t02125921347 = if (whitelisted_drop)
565567 then $Tuple2(0, artAssetId)
566568 else validatePayment(i)
567- let amount = $t02119921287._1
568- let assetId = $t02119921287._2
569+ let amount = $t02125921347._1
570+ let assetId = $t02125921347._2
569571 if (!(isDefined(amount)))
570572 then throw("Something went wrong")
571573 else {
590592 func updateArtwork (txid,name,description,tags,type,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence,crawler,royalties,pubKey) = if (!(dappRunning))
591593 then throw(maintenanceMSG)
592594 else {
593- let $t02320223272 = idCallerDateSponsored(i, pubKey)
594- let id = $t02320223272._1
595- let caller = $t02320223272._2
596- let date = $t02320223272._3
597- let isSponsored = $t02320223272._4
598- let $t02328223351 = setLIcence(cidLicence, sha256Licence)
599- let licenceCID = $t02328223351._1
600- let licenceHash = $t02328223351._2
595+ let $t02326223332 = idCallerDateSponsored(i, pubKey)
596+ let id = $t02326223332._1
597+ let caller = $t02326223332._2
598+ let date = $t02326223332._3
599+ let isSponsored = $t02326223332._4
600+ let $t02334223411 = setLIcence(cidLicence, sha256Licence)
601+ let licenceCID = $t02334223411._1
602+ let licenceHash = $t02334223411._2
601603 let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags, royalties)
602604 if ((validateArtwork != ""))
603605 then throw("Something went wrong!")
625627
626628 @Callable(i)
627629 func flagArtwork (artId,addr,flag,note) = {
628- let $t02497825012 = idCallerDate(i)
629- let id = $t02497825012._1
630- let caller = $t02497825012._2
630+ let $t02503825072 = idCallerDate(i)
631+ let id = $t02503825072._1
632+ let caller = $t02503825072._2
631633 if (containsElement([chris, toString(this)], caller))
632634 then if (containsElement(["CONSENT", "", "CHANGE_REQUIRED", "FLAGGED", "ILLEGAL"], flag))
633635 then [StringEntry(keyFlag(addr, artId), flag), StringEntry(keyNote(addr, artId), note)]
639641
640642 @Callable(i)
641643 func deleteArtwork (artId,addr) = {
642- let $t02544825482 = idCallerDate(i)
643- let id = $t02544825482._1
644- let caller = $t02544825482._2
644+ let $t02550825542 = idCallerDate(i)
645+ let id = $t02550825542._1
646+ let caller = $t02550825542._2
645647 let addrToUse = if (containsElement([chris, toString(this)], caller))
646648 then addr
647649 else caller
671673
672674 @Callable(i)
673675 func sellArtwork (artId,price,maxMint,assetId,blockEnd,pubKey) = {
674- let $t02826128331 = idCallerDateSponsored(i, pubKey)
675- let id = $t02826128331._1
676- let caller = $t02826128331._2
677- let date = $t02826128331._3
678- let isSponsored = $t02826128331._4
676+ let $t02832128391 = idCallerDateSponsored(i, pubKey)
677+ let id = $t02832128391._1
678+ let caller = $t02832128391._2
679+ let date = $t02832128391._3
680+ let isSponsored = $t02832128391._4
679681 let artworkName = getStringByKey(keyName(caller, artId))
680682 if ((artworkName == ""))
681683 then throw("This art doesn't match your account")
749751
750752 @Callable(i)
751753 func setBid (artId,issuer) = {
752- let $t03070430744 = idCallerDate(i)
753- let id = $t03070430744._1
754- let caller = $t03070430744._2
755- let date = $t03070430744._3
756- let $t03074930785 = isPayment(i)
757- let payment = $t03074930785._1
758- let amount = $t03074930785._2
754+ let $t03076430804 = idCallerDate(i)
755+ let id = $t03076430804._1
756+ let caller = $t03076430804._2
757+ let date = $t03076430804._3
758+ let $t03080930845 = isPayment(i)
759+ let payment = $t03080930845._1
760+ let amount = $t03080930845._2
759761 let assetId = if (!(isDefined(payment.assetId)))
760762 then "WAVES"
761763 else toBase58String(value(payment.assetId))
791793
792794 @Callable(i)
793795 func cancelBid (artId,issuer,bidId,bidOwner) = {
794- let $t03210932170 = idCallerDate(i)
795- let id = $t03210932170._1
796- let caller = $t03210932170._2
797- let date = $t03210932170._3
796+ let $t03216932230 = idCallerDate(i)
797+ let id = $t03216932230._1
798+ let caller = $t03216932230._2
799+ let date = $t03216932230._3
798800 if (if ((caller != bidOwner))
799801 then (caller != issuer)
800802 else false)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let VERSION = "2.0.0"
55
66 func getStringByKey (key) = valueOrElse(getString(this, key), "")
77
88
99 let unitTest = false
1010
1111 let oracleFee = value(addressFromString(getStringByKey("conf_oracle_fee")))
1212
1313 let signDapp = value(addressFromString(getStringByKey("conf_signweb_dapp")))
1414
1515 let feeReceiver = getStringByKey("conf_fee_receiver")
1616
1717 let userDapp = if (unitTest)
1818 then value(addressFromString("3Mt4RGMEyjSWYAocTPqd55wdHQQB3PU2UCm"))
1919 else value(addressFromString(getStringByKey("conf_users_dapp")))
2020
2121 let whitelistDapp = value(addressFromString(getStringByKey("conf_whitelist_dapp")))
2222
2323 let usdtPPAssetId_str = getStringByKey("conf_accepted_asset_USDT_PP")
2424
2525 let artAssetId_str = getStringByKey("conf_accepted_asset_ART")
2626
2727 let usdcPPAssetId_str = getStringByKey("conf_accepted_asset_USDC_PP")
2828
2929 let eastAssetId_str = getStringByKey("conf_accepted_asset_EAST")
3030
3131 let puzzleAssetId_str = getStringByKey("conf_accepted_asset_PUZZLE")
3232
3333 let ethPPAssetId_str = getStringByKey("conf_accepted_asset_ETH_PP")
3434
3535 let wavesAssetId_str = "WAVES"
3636
3737 let usdtPPAssetId = fromBase58String(usdtPPAssetId_str)
3838
3939 let artAssetId = fromBase58String(artAssetId_str)
4040
4141 let usdcPPAssetId = fromBase58String(usdcPPAssetId_str)
4242
4343 let eastAssetId = fromBase58String(eastAssetId_str)
4444
4545 let puzzleAssetId = fromBase58String(puzzleAssetId_str)
4646
4747 let ethPPAssetId = fromBase58String(ethPPAssetId_str)
4848
4949 let wavesAssetId = base58''
5050
5151 let all_accepted_assets = [usdtPPAssetId_str, artAssetId_str, usdcPPAssetId_str, eastAssetId_str, puzzleAssetId_str, wavesAssetId_str, ethPPAssetId_str]
5252
5353 let chris = getStringByKey("conf_admin_1")
5454
5555 func getIntegerByKeyFromOracle (key) = valueOrErrorMessage(getInteger(oracleFee, key), "Integer undefine or 0 in oracle")
5656
5757
5858 func getIntegerByKey (key) = valueOrElse(getInteger(this, key), 0)
5959
6060
6161 func checkWhitelist (key) = valueOrElse(getInteger(whitelistDapp, key), 0)
6262
6363
6464 func getBooleanByKey (key) = valueOrElse(getBoolean(this, key), false)
6565
6666
6767 let commission_fee = 8
6868
6969 let defaultLicence = getStringByKey("conf_default_licence")
7070
7171 let defaultHashLicence = getStringByKey("conf_default_licence_hash")
7272
7373 let dappRunning = valueOrElse(getBoolean(userDapp, "conf_dapp_is_running"), true)
7474
7575 let maintenanceMSG = valueOrElse(getString(userDapp, "conf_maintenance_msg"), "")
7676
7777 let userSuspended = "SUSPENDED"
7878
7979 let userRemoved = "REMOVED"
8080
8181 let userUnregistered = "UNREGISTERED"
8282
8383 let userAllowed = "ALLOWED"
8484
8585 let currentCertificationPrice = getIntegerByKeyFromOracle(("certification_fee_" + toBase58String(artAssetId)))
86+
87+let mint_fee = getIntegerByKeyFromOracle(("mint_fee_" + toBase58String(artAssetId)))
8688
8789 func getArtworkRoyalties (key) = valueOrElse(getInteger(this, key), 1000)
8890
8991
9092 func validateCID (cid) = if (contains(cid, "/"))
9193 then if (if ((76 > size(cid)))
9294 then (size(split(cid, "/")[0]) == 59)
9395 else false)
9496 then (16 > size(split(cid, "/")[1]))
9597 else false
9698 else false
9799
98100
99101 func validateHash (hash) = (size(hash) == 64)
100102
101103
102104 func keyUserStatus (caller) = ("user_status_" + caller)
103105
104106
105107 func keyDate (caller,artId) = ((("art_date_" + artId) + "_") + caller)
106108
107109
108110 func keyName (caller,artId) = ((("art_name_" + artId) + "_") + caller)
109111
110112
111113 func keyDesc (caller,artId) = ((("art_desc_" + artId) + "_") + caller)
112114
113115
114116 func keyDisplayCid (caller,artId) = ((("art_display_cid_" + artId) + "_") + caller)
115117
116118
117119 func keyExportHash (caller,artId) = ((("art_export_hash_" + artId) + "_") + caller)
118120
119121
120122 func keyExportCid (caller,artId) = ((("art_export_cid_" + artId) + "_") + caller)
121123
122124
123125 func keyMaxMint (caller,artId) = ((("art_maxmint_" + artId) + "_") + caller)
124126
125127
126128 func keySignID (caller,artId) = ((("art_signid_" + artId) + "_") + caller)
127129
128130
129131 func keyIssued (caller,artId) = ((("art_issued_" + artId) + "_") + caller)
130132
131133
132134 func keyOnSale (caller,artId) = ((("art_onsale_" + artId) + "_") + caller)
133135
134136
135137 func keyLicenceHash (caller,artId) = ((("art_licence_hash_" + artId) + "_") + caller)
136138
137139
138140 func keyLicenceCid (caller,artId) = ((("art_licence_cid_" + artId) + "_") + caller)
139141
140142
141143 func keyTags (caller,artId) = ((("art_tags_" + artId) + "_") + caller)
142144
143145
144146 func keyType (caller,artId) = ((("art_type_" + artId) + "_") + caller)
145147
146148
147149 func keyNote (caller,artId) = ((("art_note_" + artId) + "_") + caller)
148150
149151
150152 func keyCrawler (caller,artId) = ((("art_crawler_cid_" + artId) + "_") + caller)
151153
152154
153155 func keyRoyalties (caller,artId) = ((("art_royalties_" + artId) + "_") + caller)
154156
155157
156158 func keyPrice (caller,artId) = ((("art_price_" + artId) + "_") + caller)
157159
158160
159161 func keyEndSale (caller,artId) = ((("art_endsale_" + artId) + "_") + caller)
160162
161163
162164 func keyAssetIdAccepted (caller,artId) = ((("art_assetAccepted_" + artId) + "_") + caller)
163165
164166
165167 func keyFlag (caller,artId) = ((("art_flag_" + artId) + "_") + caller)
166168
167169
168170 func keyArtistAgentAddr (artistAddr) = ("artist_agent_" + artistAddr)
169171
170172
171173 func keyPrimaryShareAgent (artistAddr) = ("artist_agent_primary_" + artistAddr)
172174
173175
174176 func keyArtistPublicAgentAddr (artistAddr) = ("artist_public_agent_" + artistAddr)
175177
176178
177179 func keyPrimarySharePublicAgent (artistAddr) = ("artist_public_agent_primary_" + artistAddr)
178180
179181
180182 func keyHashByTxidAddr (caller,txid) = ((("get_hashbytxidaddr_" + txid) + "_") + caller)
181183
182184
183185 func keyOwnerByHash (sha256Hash) = ("get_owner_by_hash_" + sha256Hash)
184186
185187
186188 func keyidBySignid (caller,signId) = ((("get_artidbysignid_" + signId) + "_") + caller)
187189
188190
189191 func validateAllCID (cidDisplay,cidExport,cidLicence) = if (!(validateCID(cidDisplay)))
190192 then throw("Wrong Display CID")
191193 else if (!(validateCID(cidExport)))
192194 then throw("Wrong Export CID")
193195 else if (if ((cidLicence != ""))
194196 then !(validateCID(cidLicence))
195197 else false)
196198 then throw("Wrong Licence CID")
197199 else true
198200
199201
200202 func validateAllHash (sha256Export,sha256Licence) = if (!(validateHash(sha256Export)))
201203 then throw("Export Hash 64 char. max")
202204 else if (!(validateHash(sha256Licence)))
203205 then throw("Licence Hash 64 char. max")
204206 else true
205207
206208
207209 func validateString (str,max) = if ((size(str) == 0))
208210 then throw("Field cannot be is empty")
209211 else if ((size(str) > max))
210212 then throw((str + " is too long"))
211213 else true
212214
213215
214216 func validateUser (caller) = {
215217 let userStatus = valueOrElse(getString(userDapp, keyUserStatus(caller)), userUnregistered)
216218 if (if ((userStatus == userUnregistered))
217219 then true
218220 else (userStatus == userAllowed))
219221 then "Register this account first with \"Account\" tab"
220222 else if ((userStatus == userSuspended))
221223 then "Account suspended"
222224 else if ((userStatus == userRemoved))
223225 then "Account removed"
224226 else ""
225227 }
226228
227229
228230 func setLIcence (cidLicence,sha256Licence) = {
229231 let cid = if ((size(cidLicence) == 0))
230232 then defaultLicence
231233 else cidLicence
232234 let hash = if ((size(sha256Licence) == 0))
233235 then defaultHashLicence
234236 else sha256Licence
235237 $Tuple2(cid, hash)
236238 }
237239
238240
239241 func validateArtworkData (caller,cidDisplay,cidExport,licenceCID,sha256Export,licenceHash,name,description,tags,royalties) = {
240242 let checkUser = validateUser(caller)
241243 if ((checkUser != ""))
242244 then throw(checkUser)
243245 else if ((size(cidDisplay) == 0))
244246 then throw("Display CID cannot be empty")
245247 else if (!(validateAllCID(cidDisplay, cidExport, licenceCID)))
246248 then throw("Problem with CID")
247249 else if (!(validateAllHash(sha256Export, licenceHash)))
248250 then throw("Problem with Hashes")
249251 else if (!(validateString(name, 100)))
250252 then throw("100 Char. max name")
251253 else if (!(validateString(description, 1000)))
252254 then throw("1000 Char. max description")
253255 else if (if ((0 > royalties))
254256 then true
255257 else (royalties > 1000))
256258 then throw("Royalties cannot be less than 0% or higher than 10%")
257259 else if ((size(split(tags, ",")) > 5))
258260 then throw("5 tags max.")
259261 else ""
260262 }
261263
262264
263265 func isPayment (i) = if ((size(i.payments) == 0))
264266 then throw("No payment attached")
265267 else {
266268 let payment = value(i.payments[0])
267269 let amount = value(payment.amount)
268270 $Tuple2(payment, amount)
269271 }
270272
271273
272274 func validatePayment (i) = {
273- let $t01001410050 = isPayment(i)
274- let payment = $t01001410050._1
275- let amount = $t01001410050._2
275+ let $t01009510131 = isPayment(i)
276+ let payment = $t01009510131._1
277+ let amount = $t01009510131._2
276278 let assetId = if (if (isDefined(payment.assetId))
277279 then (payment.assetId == artAssetId)
278280 else false)
279281 then payment.assetId
280282 else throw("Only SIGN token accepted as transaction fee")
281283 if ((amount != currentCertificationPrice))
282284 then throw(("Payment amount should be " + toString(currentCertificationPrice)))
283285 else $Tuple2(amount, assetId)
284286 }
285287
286288
287289 func isArtMinted (addrToUse,artId) = match getInteger(this, keyIssued(addrToUse, artId)) {
288290 case b: Int =>
289291 if ((b != 0))
290292 then true
291293 else false
292294 case _ =>
293295 false
294296 }
295297
296298
297299 func validatePriceAssetId (i,priceAssetId,artworkPrice) = {
298- let $t01063710673 = isPayment(i)
299- let payment = $t01063710673._1
300- let amount = $t01063710673._2
300+ let $t01071810754 = isPayment(i)
301+ let payment = $t01071810754._1
302+ let amount = $t01071810754._2
301303 let assetId = if (!(isDefined(payment.assetId)))
302304 then unit
303305 else if (if ((size(priceAssetId) > 0))
304306 then (toBase58String(value(payment.assetId)) == priceAssetId)
305307 else false)
306308 then payment.assetId
307309 else throw("Wrong asset id")
308310 if (if ((assetId == unit))
309311 then (priceAssetId != "")
310312 else false)
311313 then throw("Wrong asset id")
312314 else if ((artworkPrice != amount))
313315 then throw("Payment don't match")
314316 else $Tuple2(amount, assetId)
315317 }
316318
317319
318320 func acceptedAssetIds (assetId) = if (!(containsElement(all_accepted_assets, assetId)))
319321 then throw("Only $ART, USDT-PP, USDC-PP, EAST, PUZZLE, ETH or WAVES accepted")
320322 else true
321323
322324
323325 func validateMinSell (price) = if ((0 >= price))
324326 then throw("Wrong minimum sell price")
325327 else true
326328
327329
328330 func getBidAssetId (assetId) = if ((assetId == "WAVES"))
329331 then unit
330332 else fromBase58String(assetId)
331333
332334
333335 func getPriceAssetIdFromBid (bidDataKey) = {
334336 let bidData = getStringByKey((bidDataKey + "_OPEN"))
335337 if ((bidData == ""))
336338 then throw("Bid not found")
337339 else {
338340 let bidDataArr = split(bidData, "_")
339341 let bidAmount = parseIntValue(bidDataArr[1])
340342 let bidAssetId = getBidAssetId(bidDataArr[0])
341343 if ((0 >= bidAmount))
342344 then throw("Wrong amount")
343345 else $Tuple2(bidAmount, bidAssetId)
344346 }
345347 }
346348
347349
348350 func idCallerDateSponsored (i,pubKey) = if (!(dappRunning))
349351 then throw(maintenanceMSG)
350352 else {
351353 let isSponsored = if ((pubKey != ""))
352354 then valueOrElse(checkWhitelist((toString(addressFromPublicKey(fromBase58String(pubKey))) + "_free_txs")), 0)
353355 else 0
354356 let caller = if (if ((toBase58String(i.caller.bytes) == toString(this)))
355357 then (isSponsored > 0)
356358 else false)
357359 then toString(addressFromPublicKey(fromBase58String(pubKey)))
358360 else toBase58String(i.caller.bytes)
359361 let get_sponsored_waves = if (if ((pubKey != ""))
360362 then (isSponsored > 0)
361363 else false)
362364 then invoke(whitelistDapp, "useFreeTx", [toString(addressFromPublicKey(fromBase58String(pubKey)))], nil)
363365 else unit
364366 if ((get_sponsored_waves == get_sponsored_waves))
365367 then $Tuple4(toBase58String(i.transactionId), caller, lastBlock.timestamp, (isSponsored > 0))
366368 else throw("Strict value is not equal to itself.")
367369 }
368370
369371
370372 func idCallerDate (i) = if (!(dappRunning))
371373 then throw(maintenanceMSG)
372374 else $Tuple3(toBase58String(i.transactionId), toBase58String(i.caller.bytes), lastBlock.timestamp)
373375
374376
375377 func getBalance (assetId) = match assetId {
376378 case b: ByteVector =>
377379 assetBalance(this, b)
378380 case _ =>
379381 wavesBalance(this).available
380382 }
381383
382384
383385 func buyMint (i,artId,issuer,bidId,bidOwner,pubKey) = {
384- let $t01327813367 = idCallerDateSponsored(i, pubKey)
385- let id = $t01327813367._1
386- let caller = $t01327813367._2
387- let date = $t01327813367._3
388- let isSponsored = $t01327813367._4
386+ let $t01335913448 = idCallerDateSponsored(i, pubKey)
387+ let id = $t01335913448._1
388+ let caller = $t01335913448._2
389+ let date = $t01335913448._3
390+ let isSponsored = $t01335913448._4
389391 let isBid = if (if (if ((caller == issuer))
390392 then (bidOwner != "")
391393 else false)
392394 then (bidId != "")
393395 else false)
394396 then true
395397 else false
396398 if (if (isBid)
397399 then (caller != issuer)
398400 else false)
399401 then throw("You cannot do this action")
400402 else {
401403 let blockEnd = getIntegerByKey(keyEndSale(caller, artId))
402404 if (if (if ((blockEnd != 0))
403405 then (height >= blockEnd)
404406 else false)
405407 then !(isBid)
406408 else false)
407409 then throw("Sale ended.")
408410 else {
409411 let callerIsIssuer = (caller == issuer)
410412 let totalNFT = getIntegerByKey("total_nft_issued")
411413 let artworkName = getStringByKey(keyName(issuer, artId))
412414 if ((artworkName == ""))
413415 then throw("Art doesn't exist")
414416 else {
415417 let isOnSale = getBooleanByKey(keyOnSale(issuer, artId))
416418 let amountSold = getIntegerByKey(keyIssued(issuer, artId))
417419 let artworkPrice = if (callerIsIssuer)
418- then (currentCertificationPrice / 5)
420+ then mint_fee
419421 else getIntegerByKey(keyPrice(issuer, artId))
420422 let priceAssetId = if (callerIsIssuer)
421423 then toBase58String(artAssetId)
422424 else getStringByKey(keyAssetIdAccepted(issuer, artId))
423425 let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
424426 if (if (if (!(isBid))
425427 then !(callerIsIssuer)
426428 else false)
427429 then if (if ((0 >= artworkPrice))
428430 then true
429431 else !(isOnSale))
430432 then true
431433 else (0 >= maxCanSell)
432434 else false)
433435 then throw("Art not for sale")
434436 else if (if (if (!(isBid))
435437 then callerIsIssuer
436438 else false)
437439 then (0 >= maxCanSell)
438440 else false)
439441 then throw("Max issuable not set")
440442 else {
441443 let checkUser = validateUser(issuer)
442444 if (if (isBid)
443445 then (checkUser != "")
444446 else false)
445447 then throw(checkUser)
446448 else {
447449 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + bidOwner) + "_") + bidId)
448- let $t01496515157 = if (isBid)
450+ let $t01502515217 = if (isBid)
449451 then getPriceAssetIdFromBid(bidDataKey)
450452 else validatePriceAssetId(i, priceAssetId, artworkPrice)
451- let amount = $t01496515157._1
452- let assetId = $t01496515157._2
453+ let amount = $t01502515217._1
454+ let assetId = $t01502515217._2
453455 let agent = valueOrElse(getString(userDapp, keyArtistAgentAddr(issuer)), feeReceiver)
454456 let agentShare = valueOrElse(getInteger(userDapp, keyPrimaryShareAgent(issuer)), 0)
455457 let publicAgent = valueOrElse(getString(userDapp, keyArtistPublicAgentAddr(issuer)), feeReceiver)
456458 let publicAgentShare = valueOrElse(getInteger(userDapp, keyPrimarySharePublicAgent(issuer)), 0)
457459 let isWhitelisted = checkWhitelist(issuer)
458460 let amountForSign = fraction(amount, commission_fee, 100)
459461 let amountForAgent = if (if (if ((agent != feeReceiver))
460462 then (agentShare > 0)
461463 else false)
462464 then (height > isWhitelisted)
463465 else false)
464466 then fraction(amount, agentShare, 10000)
465467 else 0
466468 let amountForPublicAgent = if (if (if ((publicAgent != feeReceiver))
467469 then (publicAgentShare > 0)
468470 else false)
469471 then (height > isWhitelisted)
470472 else false)
471473 then fraction(amount, publicAgentShare, 10000)
472474 else 0
473475 let amountForCreator = (amount - amountForSign)
474476 if ((amountSold == maxCanSell))
475477 then throw("Art sold out")
476478 else {
477479 let newAmountSold = (amountSold + 1)
478480 let issueMeta = ((((((((("Creator: " + issuer) + ",
479481 ArtID: ") + artId) + ",
480482 Artwork name: ") + artworkName) + ",
481483 Issue: ") + toString(newAmountSold)) + "/") + toString(maxCanSell))
482484 let issueNFT = Issue(("SA_" + toString((totalNFT + 1))), issueMeta, 1, 0, false)
483485 let idNFT = calculateAssetId(issueNFT)
484486 let sellStatus = if (if ((newAmountSold == maxCanSell))
485487 then true
486488 else !(isOnSale))
487489 then false
488490 else true
489491 let receiveNFT = if (if (if ((caller == issuer))
490492 then (bidOwner != "")
491493 else false)
492494 then (bidId != "")
493495 else false)
494496 then addressFromStringValue(bidOwner)
495497 else i.caller
496498 let assetIdBid = if (!(isDefined(assetId)))
497499 then "WAVES"
498500 else toBase58String(value(assetId))
499501 let bidData = getStringByKey((bidDataKey + "_OPEN"))
500502 let bidDelOld = DeleteEntry((bidDataKey + "_OPEN"))
501503 let bidUpdate = StringEntry((bidDataKey + "_CLOSED"), ((bidData + "_") + toString(date)))
502504 let soldKey = ((((((("art_sold_" + toString(newAmountSold)) + "_of_") + toString(maxCanSell)) + "_") + artId) + "_") + issuer)
503505 let soldValue = if (!(isBid))
504506 then ((((((((((caller + "_") + toString(date)) + "_") + id) + "_") + toString(artworkPrice)) + "_") + priceAssetId) + "_") + toBase58String(idNFT))
505507 else ((((((((((toString(receiveNFT) + "_") + toString(date)) + "_") + id) + "_") + toString(amount)) + "_") + assetIdBid) + "_") + toBase58String(idNFT))
506508 let soldData = StringEntry(soldKey, soldValue)
507509 let commissionsWithAgent = if ((amountForAgent != 0))
508510 then [ScriptTransfer(Address(fromBase58String(feeReceiver)), (amountForSign - amountForAgent), assetId), ScriptTransfer(Address(fromBase58String(agent)), amountForAgent, assetId)]
509511 else [ScriptTransfer(Address(fromBase58String(feeReceiver)), amountForSign, assetId)]
510512 let commissionsWithPublicAgent = if ((amountForPublicAgent != 0))
511513 then [ScriptTransfer(Address(fromBase58String(publicAgent)), amountForPublicAgent, assetId), ScriptTransfer(Address(fromBase58String(issuer)), (amountForCreator - amountForPublicAgent), assetId)]
512514 else [ScriptTransfer(Address(fromBase58String(issuer)), amountForCreator, assetId)]
513515 let txToCaller = if (isSponsored)
514516 then [ScriptTransfer(Address(fromBase58String(caller)), 0, unit)]
515517 else nil
516518 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)
517519 if (isBid)
518520 then [soldData, bidUpdate, bidDelOld] :: buyRes
519521 else soldData :: buyRes
520522 }
521523 }
522524 }
523525 }
524526 }
525527 }
526528 }
527529
528530
529531 func asString (bv) = match bv {
530532 case bv0: String =>
531533 bv0
532534 case _ =>
533535 throw("Sponsored Public Key String expected")
534536 }
535537
536538
537539 @Callable(invoke)
538540 func setConf (key,val) = {
539541 let caller = toString(invoke.caller)
540542 if (containsElement([chris, toString(this)], caller))
541543 then if (contains(key, "conf_"))
542544 then [StringEntry(key, val)]
543545 else throw("Entries starting with conf_ only")
544546 else throw("You are not allowed to change this")
545547 }
546548
547549
548550
549551 @Callable(i)
550552 func addArtwork (name,description,tags,type,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence,crawler,royalties,pubKey) = {
551- let $t02074820821 = idCallerDateSponsored(i, pubKey)
552- let artId = $t02074820821._1
553- let caller = $t02074820821._2
554- let date = $t02074820821._3
555- let isSponsored = $t02074820821._4
556- let $t02083120900 = setLIcence(cidLicence, sha256Licence)
557- let licenceCID = $t02083120900._1
558- let licenceHash = $t02083120900._2
553+ let $t02080820881 = idCallerDateSponsored(i, pubKey)
554+ let artId = $t02080820881._1
555+ let caller = $t02080820881._2
556+ let date = $t02080820881._3
557+ let isSponsored = $t02080820881._4
558+ let $t02089120960 = setLIcence(cidLicence, sha256Licence)
559+ let licenceCID = $t02089120960._1
560+ let licenceHash = $t02089120960._2
559561 let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags, royalties)
560562 if ((validateArtwork != ""))
561563 then throw("Something went wrong!")
562564 else {
563565 let whitelisted_drop = (checkWhitelist((caller + "_free_drops")) > 0)
564- let $t02119921287 = if (whitelisted_drop)
566+ let $t02125921347 = if (whitelisted_drop)
565567 then $Tuple2(0, artAssetId)
566568 else validatePayment(i)
567- let amount = $t02119921287._1
568- let assetId = $t02119921287._2
569+ let amount = $t02125921347._1
570+ let assetId = $t02125921347._2
569571 if (!(isDefined(amount)))
570572 then throw("Something went wrong")
571573 else {
572574 let decrease_whitelist_drop = if (whitelisted_drop)
573575 then invoke(whitelistDapp, "useFreeDrop", [caller], nil)
574576 else unit
575577 if ((decrease_whitelist_drop == decrease_whitelist_drop))
576578 then {
577579 let txToCaller = if (isSponsored)
578580 then [ScriptTransfer(Address(fromBase58String(caller)), 0, unit)]
579581 else nil
580582 ([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), IntegerEntry(keyIssued(caller, artId), 0), BooleanEntry(keyOnSale(caller, artId), false), StringEntry(keyCrawler(caller, artId), crawler), IntegerEntry(keyRoyalties(caller, artId), royalties), ScriptTransfer(Address(fromBase58String(feeReceiver)), amount, artAssetId)] ++ txToCaller)
581583 }
582584 else throw("Strict value is not equal to itself.")
583585 }
584586 }
585587 }
586588
587589
588590
589591 @Callable(i)
590592 func updateArtwork (txid,name,description,tags,type,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence,crawler,royalties,pubKey) = if (!(dappRunning))
591593 then throw(maintenanceMSG)
592594 else {
593- let $t02320223272 = idCallerDateSponsored(i, pubKey)
594- let id = $t02320223272._1
595- let caller = $t02320223272._2
596- let date = $t02320223272._3
597- let isSponsored = $t02320223272._4
598- let $t02328223351 = setLIcence(cidLicence, sha256Licence)
599- let licenceCID = $t02328223351._1
600- let licenceHash = $t02328223351._2
595+ let $t02326223332 = idCallerDateSponsored(i, pubKey)
596+ let id = $t02326223332._1
597+ let caller = $t02326223332._2
598+ let date = $t02326223332._3
599+ let isSponsored = $t02326223332._4
600+ let $t02334223411 = setLIcence(cidLicence, sha256Licence)
601+ let licenceCID = $t02334223411._1
602+ let licenceHash = $t02334223411._2
601603 let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags, royalties)
602604 if ((validateArtwork != ""))
603605 then throw("Something went wrong!")
604606 else {
605607 let entryExist = getStringByKey(keyName(caller, txid))
606608 if ((entryExist == ""))
607609 then throw("Entry not found")
608610 else {
609611 let flag = getStringByKey(keyFlag(caller, txid))
610612 if ((flag == "ILLEGAL"))
611613 then throw("Cannot update ILLEGAL artwork")
612614 else if (!(isArtMinted(caller, txid)))
613615 then {
614616 let txToCaller = if (isSponsored)
615617 then [ScriptTransfer(Address(fromBase58String(caller)), 0, unit)]
616618 else nil
617619 ([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)
618620 }
619621 else throw("Already minted")
620622 }
621623 }
622624 }
623625
624626
625627
626628 @Callable(i)
627629 func flagArtwork (artId,addr,flag,note) = {
628- let $t02497825012 = idCallerDate(i)
629- let id = $t02497825012._1
630- let caller = $t02497825012._2
630+ let $t02503825072 = idCallerDate(i)
631+ let id = $t02503825072._1
632+ let caller = $t02503825072._2
631633 if (containsElement([chris, toString(this)], caller))
632634 then if (containsElement(["CONSENT", "", "CHANGE_REQUIRED", "FLAGGED", "ILLEGAL"], flag))
633635 then [StringEntry(keyFlag(addr, artId), flag), StringEntry(keyNote(addr, artId), note)]
634636 else throw(("Unknow status " + flag))
635637 else throw("You are not allowed")
636638 }
637639
638640
639641
640642 @Callable(i)
641643 func deleteArtwork (artId,addr) = {
642- let $t02544825482 = idCallerDate(i)
643- let id = $t02544825482._1
644- let caller = $t02544825482._2
644+ let $t02550825542 = idCallerDate(i)
645+ let id = $t02550825542._1
646+ let caller = $t02550825542._2
645647 let addrToUse = if (containsElement([chris, toString(this)], caller))
646648 then addr
647649 else caller
648650 let entryExist = valueOrErrorMessage(getStringByKey(keyName(addrToUse, artId)), "No art matching for this address")
649651 if ((entryExist == ""))
650652 then throw("No art matching for this address")
651653 else {
652654 let sha256Hash = getStringByKey(keyHashByTxidAddr(addrToUse, artId))
653655 let signID = if ((sha256Hash == ""))
654656 then getStringByKey(keySignID(addrToUse, artId))
655657 else ""
656658 let signID_legacy = if ((signID == ""))
657659 then nil
658660 else [DeleteEntry(keyidBySignid(addrToUse, signID))]
659661 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(keyEndSale(addrToUse, artId)), DeleteEntry(keyNote(addrToUse, artId)), DeleteEntry(keyCrawler(addrToUse, artId)), DeleteEntry(keyRoyalties(addrToUse, artId))] ++ signID_legacy)
660662 if (!(isArtMinted(addrToUse, artId)))
661663 then if (!(dappRunning))
662664 then throw(maintenanceMSG)
663665 else dataToDelete
664666 else if (containsElement([chris, toString(this)], caller))
665667 then dataToDelete
666668 else throw("Art already minted, you cannot delete it")
667669 }
668670 }
669671
670672
671673
672674 @Callable(i)
673675 func sellArtwork (artId,price,maxMint,assetId,blockEnd,pubKey) = {
674- let $t02826128331 = idCallerDateSponsored(i, pubKey)
675- let id = $t02826128331._1
676- let caller = $t02826128331._2
677- let date = $t02826128331._3
678- let isSponsored = $t02826128331._4
676+ let $t02832128391 = idCallerDateSponsored(i, pubKey)
677+ let id = $t02832128391._1
678+ let caller = $t02832128391._2
679+ let date = $t02832128391._3
680+ let isSponsored = $t02832128391._4
679681 let artworkName = getStringByKey(keyName(caller, artId))
680682 if ((artworkName == ""))
681683 then throw("This art doesn't match your account")
682684 else {
683685 let flag = getStringByKey(keyFlag(caller, artId))
684686 if (containsElement(["CHANGE_REQUIRED", "FLAGGED", "ILLEGAL"], flag))
685687 then throw("Flagged artwork")
686688 else {
687689 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
688690 if ((0 > blockEnd))
689691 then throw("Negative end")
690692 else if (if ((blockEnd > 0))
691693 then if ((maxMint != 1))
692694 then true
693695 else (price != 0)
694696 else false)
695697 then throw("Timed offer only allowed for unique edition and offer only")
696698 else {
697699 let baseHeight = if ((blockEnd == 0))
698700 then 0
699701 else height
700702 if (!(acceptedAssetIds(assetId)))
701703 then throw("Something went wrong!")
702704 else if (!(validateMinSell(price)))
703705 then throw("Something went wrong!")
704706 else {
705707 let checkUser = validateUser(caller)
706708 if ((checkUser != ""))
707709 then throw(checkUser)
708710 else {
709711 let amountSold = getIntegerByKey(keyIssued(caller, artId))
710712 let maxCanSell = getIntegerByKey(keyMaxMint(caller, artId))
711713 if ((maxMint > 100))
712714 then throw("100 editions max per artwork")
713715 else if (if ((amountSold != 0))
714716 then (amountSold == maxCanSell)
715717 else false)
716718 then throw("Max edition reached.")
717719 else if (if ((amountSold > 0))
718720 then (maxCanSell != maxMint)
719721 else false)
720722 then throw("Cannot change maximum issuable anymore")
721723 else if (if ((bidNbr > 0))
722724 then (maxCanSell != maxMint)
723725 else false)
724726 then throw("Cannot change maximum issuable with active orders")
725727 else {
726728 let sellStatus = if (if ((price > 0))
727729 then (maxMint > 0)
728730 else false)
729731 then true
730732 else false
731733 let txToCaller = if (isSponsored)
732734 then [ScriptTransfer(Address(fromBase58String(caller)), 0, unit)]
733735 else nil
734736 ([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)
735737 }
736738 }
737739 }
738740 }
739741 }
740742 }
741743 }
742744
743745
744746
745747 @Callable(i)
746748 func buyArtwork (artId,issuer) = buyMint(i, artId, issuer, "", "", "")
747749
748750
749751
750752 @Callable(i)
751753 func setBid (artId,issuer) = {
752- let $t03070430744 = idCallerDate(i)
753- let id = $t03070430744._1
754- let caller = $t03070430744._2
755- let date = $t03070430744._3
756- let $t03074930785 = isPayment(i)
757- let payment = $t03074930785._1
758- let amount = $t03074930785._2
754+ let $t03076430804 = idCallerDate(i)
755+ let id = $t03076430804._1
756+ let caller = $t03076430804._2
757+ let date = $t03076430804._3
758+ let $t03080930845 = isPayment(i)
759+ let payment = $t03080930845._1
760+ let amount = $t03080930845._2
759761 let assetId = if (!(isDefined(payment.assetId)))
760762 then "WAVES"
761763 else toBase58String(value(payment.assetId))
762764 let blockEnd = getIntegerByKey(keyEndSale(issuer, artId))
763765 if (if ((blockEnd != 0))
764766 then (height >= blockEnd)
765767 else false)
766768 then throw("Sale ended.")
767769 else {
768770 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
769771 if (!(acceptedAssetIds(assetId)))
770772 then throw("asset not accepted")
771773 else if (!(validateMinSell(amount)))
772774 then throw("Wrong min sell")
773775 else {
774776 let amountSold = getIntegerByKey(keyIssued(issuer, artId))
775777 let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
776778 if ((0 >= maxCanSell))
777779 then throw("No max edition set for this artwork")
778780 else if ((amountSold >= maxCanSell))
779781 then throw("Sold out, you cannot bid")
780782 else [StringEntry((((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + id) + "_OPEN"), ((((assetId + "_") + toString(amount)) + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr + 1))]
781783 }
782784 }
783785 }
784786
785787
786788
787789 @Callable(i)
788790 func acceptBid (artId,issuer,bidId,bidOwner,pubKey) = buyMint(i, artId, issuer, bidId, bidOwner, pubKey)
789791
790792
791793
792794 @Callable(i)
793795 func cancelBid (artId,issuer,bidId,bidOwner) = {
794- let $t03210932170 = idCallerDate(i)
795- let id = $t03210932170._1
796- let caller = $t03210932170._2
797- let date = $t03210932170._3
796+ let $t03216932230 = idCallerDate(i)
797+ let id = $t03216932230._1
798+ let caller = $t03216932230._2
799+ let date = $t03216932230._3
798800 if (if ((caller != bidOwner))
799801 then (caller != issuer)
800802 else false)
801803 then throw("You cannot do this action")
802804 else {
803805 let returnMoneyTo = if ((caller == issuer))
804806 then bidOwner
805807 else caller
806808 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
807809 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + bidOwner) + "_") + bidId)
808810 let bidData = getStringByKey((bidDataKey + "_OPEN"))
809811 if ((bidData == ""))
810812 then throw("Bid not found")
811813 else {
812814 let bidDataArr = split(bidData, "_")
813815 let assetId = getBidAssetId(bidDataArr[0])
814816 let bidStatus = "CANCELED"
815817 [DeleteEntry((bidDataKey + "_OPEN")), StringEntry(((bidDataKey + "_") + bidStatus), ((bidData + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr - 1)), ScriptTransfer(Address(fromBase58String(returnMoneyTo)), parseIntValue(bidDataArr[1]), assetId)]
816818 }
817819 }
818820 }
819821
820822
821823 @Verifier(tx)
822824 func verifier () = match tx {
823825 case inv: InvokeScriptTransaction =>
824826 if (if (if (if ((inv.function == "addArtwork"))
825827 then (inv.dApp == this)
826828 else false)
827829 then (inv.fee == 500000)
828830 else false)
829831 then (inv.feeAssetId == unit)
830832 else false)
831833 then sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(asString(inv.args[11])))
832834 else if (if (if (if ((inv.function == "updateArtwork"))
833835 then (inv.dApp == this)
834836 else false)
835837 then (inv.fee == 500000)
836838 else false)
837839 then (inv.feeAssetId == unit)
838840 else false)
839841 then sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(asString(inv.args[12])))
840842 else if (if (if (if ((inv.function == "sellArtwork"))
841843 then (inv.dApp == this)
842844 else false)
843845 then (inv.fee == 500000)
844846 else false)
845847 then (inv.feeAssetId == unit)
846848 else false)
847849 then sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(asString(inv.args[5])))
848850 else if (if (if (if ((inv.function == "acceptBid"))
849851 then (inv.dApp == this)
850852 else false)
851853 then (inv.fee == 500000)
852854 else false)
853855 then (inv.feeAssetId == unit)
854856 else false)
855857 then sigVerify_128Kb(tx.bodyBytes, tx.proofs[0], fromBase58String(asString(inv.args[4])))
856858 else sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
857859 case _ =>
858860 sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
859861 }
860862

github/deemru/w8io/3ef1775 
601.48 ms