tx · EPvAJyYEXTj4EffmiSfT7qWQ6StGtdzQyb4tzTQ3W17f

3NBynfbXC2KastUxhukcMUaE58K9cBdB9UY:  -0.02200000 Waves

2022.11.23 12:36 [2329569] smart account 3NBynfbXC2KastUxhukcMUaE58K9cBdB9UY > SELF 0.00000000 Waves

{ "type": 13, "id": "EPvAJyYEXTj4EffmiSfT7qWQ6StGtdzQyb4tzTQ3W17f", "fee": 2200000, "feeAssetId": null, "timestamp": 1669196198526, "version": 2, "chainId": 84, "sender": "3NBynfbXC2KastUxhukcMUaE58K9cBdB9UY", "senderPublicKey": "J9DCtJJxJBWZdtDR12BA1U94Q3cZzMi4R6k5hYkAzmzC", "proofs": [ "2iX1yAqv7uusSU1gyLuYVnCjy4UjWwTcQ3W2AkAP576XEUeQSADJU8AZpdGHymJVkFsu2nmqX6RgYRTiKzw7kcza" ], "script": "base64:BgJaCAISBAoCCAgSDgoMCAgICAgICAgICAgIEg0KCwgICAgICAgICAgIEgYKBAgICAgSBAoCCAgSBwoFCAEBCAESBAoCCAgSBAoCCAgSBgoECAgICBIGCgQICAgISQEOZ2V0U3RyaW5nQnlLZXkBA2tleQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQNrZXkCAAAIdW5pdFRlc3QHAAlvcmFjbGVGZWUJAQV2YWx1ZQEJAKYIAQkBDmdldFN0cmluZ0J5S2V5AQIPY29uZl9vcmFjbGVfZmVlAAhzaWduRGFwcAkBBXZhbHVlAQkApggBCQEOZ2V0U3RyaW5nQnlLZXkBAhFjb25mX3NpZ253ZWJfZGFwcAALZmVlUmVjZWl2ZXIJAQ5nZXRTdHJpbmdCeUtleQECEWNvbmZfZmVlX3JlY2VpdmVyAAh1c2VyRGFwcAMFCHVuaXRUZXN0CQEFdmFsdWUBCQCmCAECIzNNdDRSR01FeWpTV1lBb2NUUHFkNTV3ZEhRUUIzUFUyVUNtCQEFdmFsdWUBCQCmCAEJAQ5nZXRTdHJpbmdCeUtleQECD2NvbmZfdXNlcnNfZGFwcAANd2hpdGVsaXN0RGFwcAkBBXZhbHVlAQkApggBCQEOZ2V0U3RyaW5nQnlLZXkBAhNjb25mX3doaXRlbGlzdF9kYXBwAAtzaWduQXNzZXRJZAkA2QQBCQEOZ2V0U3RyaW5nQnlLZXkBAhhjb25mX2FjY2VwdGVkX2Fzc2V0X1NJR04AC3VzZG5Bc3NldElkCQDZBAEJAQ5nZXRTdHJpbmdCeUtleQECGGNvbmZfYWNjZXB0ZWRfYXNzZXRfVVNETgALdXNkdEFzc2V0SWQJANkEAQkBDmdldFN0cmluZ0J5S2V5AQIYY29uZl9hY2NlcHRlZF9hc3NldF9VU0RUAAx3YXZlc0Fzc2V0SWQBAAAFY2hyaXMJAQ5nZXRTdHJpbmdCeUtleQECDGNvbmZfYWRtaW5fMQEZZ2V0SW50ZWdlckJ5S2V5RnJvbU9yYWNsZQEDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUJb3JhY2xlRmVlBQNrZXkCH0ludGVnZXIgdW5kZWZpbmUgb3IgMCBpbiBvcmFjbGUBD2dldEludGVnZXJCeUtleQEDa2V5CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFA2tleQAAAQ5jaGVja1doaXRlbGlzdAEDa2V5CQELdmFsdWVPckVsc2UCCQCaCAIFDXdoaXRlbGlzdERhcHAFA2tleQAAAQ9nZXRCb29sZWFuQnlLZXkBA2tleQkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzBQNrZXkHAAdzaWduQ3V0AAcAC3VzZG5XYXZlQ3V0AAoADmRlZmF1bHRMaWNlbmNlCQEOZ2V0U3RyaW5nQnlLZXkBAhRjb25mX2RlZmF1bHRfbGljZW5jZQASZGVmYXVsdEhhc2hMaWNlbmNlCQEOZ2V0U3RyaW5nQnlLZXkBAhljb25mX2RlZmF1bHRfbGljZW5jZV9oYXNoAAtkYXBwUnVubmluZwkBC3ZhbHVlT3JFbHNlAgkAmwgCBQh1c2VyRGFwcAIUY29uZl9kYXBwX2lzX3J1bm5pbmcGAA5tYWludGVuYW5jZU1TRwkBC3ZhbHVlT3JFbHNlAgkAnQgCBQh1c2VyRGFwcAIUY29uZl9tYWludGVuYW5jZV9tc2cCAAANdXNlclN1c3BlbmRlZAIJU1VTUEVOREVEAAt1c2VyUmVtb3ZlZAIHUkVNT1ZFRAAQdXNlclVucmVnaXN0ZXJlZAIMVU5SRUdJU1RFUkVEAAt1c2VyQWxsb3dlZAIHQUxMT1dFRAAZY3VycmVudENlcnRpZmljYXRpb25QcmljZQkBGWdldEludGVnZXJCeUtleUZyb21PcmFjbGUBCQCsAgICEmNlcnRpZmljYXRpb25fZmVlXwkA2AQBBQtzaWduQXNzZXRJZAEUY2hlY2tTaWduQ2VydGlmaWNhdGUDBnNpZ25JRAVPd25lcgpzaGEyNTZIYXNoBAckbWF0Y2gwCQCdCAIFCHNpZ25EYXBwCQCsAgIJAKwCAgkArAICAghkYXRhX2ZjXwUGc2lnbklEAgFfBQVPd25lcgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWEFByRtYXRjaDADCQEIY29udGFpbnMCBQFhBQpzaGEyNTZIYXNoBgcHAQt2YWxpZGF0ZUNJRAEDY2lkAwkBCGNvbnRhaW5zAgUDY2lkAgEvAwMJAGYCAEwJALECAQUDY2lkCQAAAgkAsQIBCQCRAwIJALUJAgUDY2lkAgEvAAAAOwcJAGYCABAJALECAQkAkQMCCQC1CQIFA2NpZAIBLwABBwcBDHZhbGlkYXRlSGFzaAEEaGFzaAkAAAIJALECAQUEaGFzaABAAQ1rZXlVc2VyU3RhdHVzAQZjYWxsZXIJAKwCAgIMdXNlcl9zdGF0dXNfBQZjYWxsZXIBB2tleURhdGUCBmNhbGxlcgVhcnRJZAkArAICCQCsAgIJAKwCAgIJYXJ0X2RhdGVfBQVhcnRJZAIBXwUGY2FsbGVyAQdrZXlOYW1lAgZjYWxsZXIFYXJ0SWQJAKwCAgkArAICCQCsAgICCWFydF9uYW1lXwUFYXJ0SWQCAV8FBmNhbGxlcgEHa2V5RGVzYwIGY2FsbGVyBWFydElkCQCsAgIJAKwCAgkArAICAglhcnRfZGVzY18FBWFydElkAgFfBQZjYWxsZXIBDWtleURpc3BsYXlDaWQCBmNhbGxlcgVhcnRJZAkArAICCQCsAgIJAKwCAgIQYXJ0X2Rpc3BsYXlfY2lkXwUFYXJ0SWQCAV8FBmNhbGxlcgENa2V5RXhwb3J0SGFzaAIGY2FsbGVyBWFydElkCQCsAgIJAKwCAgkArAICAhBhcnRfZXhwb3J0X2hhc2hfBQVhcnRJZAIBXwUGY2FsbGVyAQxrZXlFeHBvcnRDaWQCBmNhbGxlcgVhcnRJZAkArAICCQCsAgIJAKwCAgIPYXJ0X2V4cG9ydF9jaWRfBQVhcnRJZAIBXwUGY2FsbGVyAQprZXlNYXhNaW50AgZjYWxsZXIFYXJ0SWQJAKwCAgkArAICCQCsAgICDGFydF9tYXhtaW50XwUFYXJ0SWQCAV8FBmNhbGxlcgEJa2V5U2lnbklEAgZjYWxsZXIFYXJ0SWQJAKwCAgkArAICCQCsAgICC2FydF9zaWduaWRfBQVhcnRJZAIBXwUGY2FsbGVyAQlrZXlJc3N1ZWQCBmNhbGxlcgVhcnRJZAkArAICCQCsAgIJAKwCAgILYXJ0X2lzc3VlZF8FBWFydElkAgFfBQZjYWxsZXIBCWtleU9uU2FsZQIGY2FsbGVyBWFydElkCQCsAgIJAKwCAgkArAICAgthcnRfb25zYWxlXwUFYXJ0SWQCAV8FBmNhbGxlcgEOa2V5TGljZW5jZUhhc2gCBmNhbGxlcgVhcnRJZAkArAICCQCsAgIJAKwCAgIRYXJ0X2xpY2VuY2VfaGFzaF8FBWFydElkAgFfBQZjYWxsZXIBDWtleUxpY2VuY2VDaWQCBmNhbGxlcgVhcnRJZAkArAICCQCsAgIJAKwCAgIQYXJ0X2xpY2VuY2VfY2lkXwUFYXJ0SWQCAV8FBmNhbGxlcgEHa2V5VGFncwIGY2FsbGVyBWFydElkCQCsAgIJAKwCAgkArAICAglhcnRfdGFnc18FBWFydElkAgFfBQZjYWxsZXIBB2tleVR5cGUCBmNhbGxlcgVhcnRJZAkArAICCQCsAgIJAKwCAgIJYXJ0X3R5cGVfBQVhcnRJZAIBXwUGY2FsbGVyAQdrZXlOb3RlAgZjYWxsZXIFYXJ0SWQJAKwCAgkArAICCQCsAgICCWFydF9ub3RlXwUFYXJ0SWQCAV8FBmNhbGxlcgEKa2V5Q3Jhd2xlcgIGY2FsbGVyBWFydElkCQCsAgIJAKwCAgkArAICAhBhcnRfY3Jhd2xlcl9jaWRfBQVhcnRJZAIBXwUGY2FsbGVyAQhrZXlQcmljZQIGY2FsbGVyBWFydElkCQCsAgIJAKwCAgkArAICAgphcnRfcHJpY2VfBQVhcnRJZAIBXwUGY2FsbGVyAQprZXlFbmRTYWxlAgZjYWxsZXIFYXJ0SWQJAKwCAgkArAICCQCsAgICDGFydF9lbmRzYWxlXwUFYXJ0SWQCAV8FBmNhbGxlcgESa2V5QXNzZXRJZEFjY2VwdGVkAgZjYWxsZXIFYXJ0SWQJAKwCAgkArAICCQCsAgICEmFydF9hc3NldEFjY2VwdGVkXwUFYXJ0SWQCAV8FBmNhbGxlcgEHa2V5RmxhZwIGY2FsbGVyBWFydElkCQCsAgIJAKwCAgkArAICAglhcnRfZmxhZ18FBWFydElkAgFfBQZjYWxsZXIBEmtleUFydGlzdEFnZW50QWRkcgEKYXJ0aXN0QWRkcgkArAICAg1hcnRpc3RfYWdlbnRfBQphcnRpc3RBZGRyAQ9rZXlQcmltYXJ5U2hhcmUBCmFydGlzdEFkZHIJAKwCAgIVYXJ0aXN0X2FnZW50X3ByaW1hcnlfBQphcnRpc3RBZGRyARFrZXlIYXNoQnlUeGlkQWRkcgIGY2FsbGVyBHR4aWQJAKwCAgkArAICCQCsAgICE2dldF9oYXNoYnl0eGlkYWRkcl8FBHR4aWQCAV8FBmNhbGxlcgEOa2V5T3duZXJCeUhhc2gBCnNoYTI1Nkhhc2gJAKwCAgISZ2V0X293bmVyX2J5X2hhc2hfBQpzaGEyNTZIYXNoAQ1rZXlpZEJ5U2lnbmlkAgZjYWxsZXIGc2lnbklkCQCsAgIJAKwCAgkArAICAhJnZXRfYXJ0aWRieXNpZ25pZF8FBnNpZ25JZAIBXwUGY2FsbGVyARJrZXlUeGlkQnlIYXNoT3duZXICCnNoYTI1Nkhhc2gGY2FsbGVyCQCsAgICF2dldF90eGlkX2J5X2hhc2hfb3duZXJfCQDYBAEJANQWAQkAmwMBCQCsAgIFCnNoYTI1Nkhhc2gFBmNhbGxlcgEOdmFsaWRhdGVBbGxDSUQDCmNpZERpc3BsYXkJY2lkRXhwb3J0CmNpZExpY2VuY2UDCQEBIQEJAQt2YWxpZGF0ZUNJRAEFCmNpZERpc3BsYXkJAAIBAhFXcm9uZyBEaXNwbGF5IENJRAMJAQEhAQkBC3ZhbGlkYXRlQ0lEAQUJY2lkRXhwb3J0CQACAQIQV3JvbmcgRXhwb3J0IENJRAMDCQECIT0CBQpjaWRMaWNlbmNlAgAJAQEhAQkBC3ZhbGlkYXRlQ0lEAQUKY2lkTGljZW5jZQcJAAIBAhFXcm9uZyBMaWNlbmNlIENJRAYBD3ZhbGlkYXRlQWxsSGFzaAIMc2hhMjU2RXhwb3J0DXNoYTI1NkxpY2VuY2UDCQEBIQEJAQx2YWxpZGF0ZUhhc2gBBQxzaGEyNTZFeHBvcnQJAAIBAhhFeHBvcnQgSGFzaCA2NCBjaGFyLiBtYXgDCQEBIQEJAQx2YWxpZGF0ZUhhc2gBBQ1zaGEyNTZMaWNlbmNlCQACAQIZTGljZW5jZSBIYXNoIDY0IGNoYXIuIG1heAYBDnZhbGlkYXRlU3RyaW5nAgNzdHIDbWF4AwkAAAIJALECAQUDc3RyAAAJAAIBAhhGaWVsZCBjYW5ub3QgYmUgaXMgZW1wdHkDCQBmAgkAsQIBBQNzdHIFA21heAkAAgEJAKwCAgUDc3RyAgwgaXMgdG9vIGxvbmcGAQx2YWxpZGF0ZVVzZXIBBmNhbGxlcgQKdXNlclN0YXR1cwkBC3ZhbHVlT3JFbHNlAgkAnQgCBQh1c2VyRGFwcAkBDWtleVVzZXJTdGF0dXMBBQZjYWxsZXIFEHVzZXJVbnJlZ2lzdGVyZWQDAwkAAAIFCnVzZXJTdGF0dXMFEHVzZXJVbnJlZ2lzdGVyZWQGCQAAAgUKdXNlclN0YXR1cwULdXNlckFsbG93ZWQCLlJlZ2lzdGVyIHRoaXMgYWNjb3VudCBmaXJzdCB3aXRoICJBY2NvdW50IiB0YWIDCQAAAgUKdXNlclN0YXR1cwUNdXNlclN1c3BlbmRlZAIRQWNjb3VudCBzdXNwZW5kZWQDCQAAAgUKdXNlclN0YXR1cwULdXNlclJlbW92ZWQCD0FjY291bnQgcmVtb3ZlZAIAAQpzZXRMSWNlbmNlAgpjaWRMaWNlbmNlDXNoYTI1NkxpY2VuY2UEA2NpZAMJAAACCQCxAgEFCmNpZExpY2VuY2UAAAUOZGVmYXVsdExpY2VuY2UFCmNpZExpY2VuY2UEBGhhc2gDCQAAAgkAsQIBBQ1zaGEyNTZMaWNlbmNlAAAFEmRlZmF1bHRIYXNoTGljZW5jZQUNc2hhMjU2TGljZW5jZQkAlAoCBQNjaWQFBGhhc2gBE3ZhbGlkYXRlQXJ0d29ya0RhdGEJBmNhbGxlcgpjaWREaXNwbGF5CWNpZEV4cG9ydApsaWNlbmNlQ0lEDHNoYTI1NkV4cG9ydAtsaWNlbmNlSGFzaARuYW1lC2Rlc2NyaXB0aW9uBHRhZ3MECWNoZWNrVXNlcgkBDHZhbGlkYXRlVXNlcgEFBmNhbGxlcgMJAQIhPQIFCWNoZWNrVXNlcgIACQACAQUJY2hlY2tVc2VyAwkAAAIJALECAQUKY2lkRGlzcGxheQAACQACAQIbRGlzcGxheSBDSUQgY2Fubm90IGJlIGVtcHR5AwkBASEBCQEOdmFsaWRhdGVBbGxDSUQDBQpjaWREaXNwbGF5BQljaWRFeHBvcnQFCmxpY2VuY2VDSUQJAAIBAhBQcm9ibGVtIHdpdGggQ0lEAwkBASEBCQEPdmFsaWRhdGVBbGxIYXNoAgUMc2hhMjU2RXhwb3J0BQtsaWNlbmNlSGFzaAkAAgECE1Byb2JsZW0gd2l0aCBIYXNoZXMDCQEBIQEJAQ52YWxpZGF0ZVN0cmluZwIFBG5hbWUAZAkAAgECEjEwMCBDaGFyLiBtYXggbmFtZQMJAQEhAQkBDnZhbGlkYXRlU3RyaW5nAgULZGVzY3JpcHRpb24A6AcJAAIBAhoxMDAwIENoYXIuIG1heCBkZXNjcmlwdGlvbgMJAGYCCQCQAwEJALUJAgUEdGFncwIBLAAFCQACAQILNSB0YWdzIG1heC4CAAEJaXNQYXltZW50AQFpAwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECE05vIHBheW1lbnQgYXR0YWNoZWQEB3BheW1lbnQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQGYW1vdW50CQEFdmFsdWUBCAUHcGF5bWVudAZhbW91bnQJAJQKAgUHcGF5bWVudAUGYW1vdW50AQ92YWxpZGF0ZVBheW1lbnQBAWkECyR0MDg2NzU4NzExCQEJaXNQYXltZW50AQUBaQQHcGF5bWVudAgFCyR0MDg2NzU4NzExAl8xBAZhbW91bnQIBQskdDA4Njc1ODcxMQJfMgQHYXNzZXRJZAMDCQEJaXNEZWZpbmVkAQgFB3BheW1lbnQHYXNzZXRJZAkAAAIIBQdwYXltZW50B2Fzc2V0SWQFC3NpZ25Bc3NldElkBwgFB3BheW1lbnQHYXNzZXRJZAkAAgECK09ubHkgU0lHTiB0b2tlbiBhY2NlcHRlZCBhcyB0cmFuc2FjdGlvbiBmZWUDCQECIT0CBQZhbW91bnQFGWN1cnJlbnRDZXJ0aWZpY2F0aW9uUHJpY2UJAAIBCQCsAgICGVBheW1lbnQgYW1vdW50IHNob3VsZCBiZSAJAKQDAQUZY3VycmVudENlcnRpZmljYXRpb25QcmljZQkAlAoCBQZhbW91bnQFB2Fzc2V0SWQBC2lzQXJ0TWludGVkAglhZGRyVG9Vc2UFYXJ0SWQEByRtYXRjaDAJAJoIAgUEdGhpcwkBCWtleUlzc3VlZAIFCWFkZHJUb1VzZQUFYXJ0SWQDCQABAgUHJG1hdGNoMAIDSW50BAFiBQckbWF0Y2gwAwkBAiE9AgUBYgAABgcHARR2YWxpZGF0ZVByaWNlQXNzZXRJZAMBaQxwcmljZUFzc2V0SWQMYXJ0d29ya1ByaWNlBAskdDA5MzE4OTM1NAkBCWlzUGF5bWVudAEFAWkEB3BheW1lbnQIBQskdDA5MzE4OTM1NAJfMQQGYW1vdW50CAULJHQwOTMxODkzNTQCXzIEB2Fzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCAUHcGF5bWVudAdhc3NldElkBQR1bml0AwMJAGYCCQCxAgEFDHByaWNlQXNzZXRJZAAACQAAAgkA2AQBCQEFdmFsdWUBCAUHcGF5bWVudAdhc3NldElkBQxwcmljZUFzc2V0SWQHCAUHcGF5bWVudAdhc3NldElkCQACAQIOV3JvbmcgYXNzZXQgaWQDAwkAAAIFB2Fzc2V0SWQFBHVuaXQJAQIhPQIFDHByaWNlQXNzZXRJZAIABwkAAgECDldyb25nIGFzc2V0IGlkAwkBAiE9AgUMYXJ0d29ya1ByaWNlBQZhbW91bnQJAAIBAhNQYXltZW50IGRvbid0IG1hdGNoCQCUCgIFBmFtb3VudAUHYXNzZXRJZAEQYWNjZXB0ZWRBc3NldElkcwEHYXNzZXRJZAMDAwMDCQECIT0CBQdhc3NldElkCQDYBAEFC3NpZ25Bc3NldElkCQECIT0CBQdhc3NldElkCQDYBAEFDHdhdmVzQXNzZXRJZAcJAQIhPQIFB2Fzc2V0SWQCBVdBVkVTBwkBAiE9AgUHYXNzZXRJZAkA2AQBBQt1c2RuQXNzZXRJZAcJAQIhPQIFB2Fzc2V0SWQJANgEAQULdXNkdEFzc2V0SWQHCQACAQImT25seSBTSUdOLCBVU0ROLFVTRFQgb3IgV0FWRVMgYWNjZXB0ZWQGAQ92YWxpZGF0ZU1pblNlbGwCB2Fzc2V0SWQFcHJpY2UEDG1pblNlbGxXYXZlcwMFCHVuaXRUZXN0AAoJARlnZXRJbnRlZ2VyQnlLZXlGcm9tT3JhY2xlAQIOd2F2ZXNfbWluX3NlbGwEC21pblNlbGxVc2RuAMCEPQQLbWluU2VsbFNpZ24DBQh1bml0VGVzdAABCQBoAgUZY3VycmVudENlcnRpZmljYXRpb25QcmljZQACAwMDAwMDCQAAAgUHYXNzZXRJZAkA2AQBBQt1c2RuQXNzZXRJZAkAZgIFC21pblNlbGxVc2RuBQVwcmljZQcJAQIhPQIFBXByaWNlAAAHBgMDCQAAAgUHYXNzZXRJZAkA2AQBBQt1c2R0QXNzZXRJZAkAZgIFC21pblNlbGxVc2RuBQVwcmljZQcJAQIhPQIFBXByaWNlAAAHBgMDCQAAAgUHYXNzZXRJZAkA2AQBBQtzaWduQXNzZXRJZAkAZgIFC21pblNlbGxTaWduBQVwcmljZQcJAQIhPQIFBXByaWNlAAAHBgMDAwkAAAIFB2Fzc2V0SWQJANgEAQUMd2F2ZXNBc3NldElkBgkAAAIFB2Fzc2V0SWQCBVdBVkVTCQBmAgUMbWluU2VsbFdhdmVzBQVwcmljZQcJAQIhPQIFBXByaWNlAAAHCQACAQIYV3JvbmcgbWluaW11bSBzZWxsIHByaWNlBgENZ2V0QmlkQXNzZXRJZAEHYXNzZXRJZAMJAAACBQdhc3NldElkAgVXQVZFUwUEdW5pdAkA2QQBBQdhc3NldElkARZnZXRQcmljZUFzc2V0SWRGcm9tQmlkAQpiaWREYXRhS2V5BAdiaWREYXRhCQEOZ2V0U3RyaW5nQnlLZXkBCQCsAgIFCmJpZERhdGFLZXkCBV9PUEVOAwkAAAIFB2JpZERhdGECAAkAAgECDUJpZCBub3QgZm91bmQECmJpZERhdGFBcnIJALUJAgUHYmlkRGF0YQIBXwQJYmlkQW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKYmlkRGF0YUFycgABBApiaWRBc3NldElkCQENZ2V0QmlkQXNzZXRJZAEJAJEDAgUKYmlkRGF0YUFycgAAAwkAZwIAAAUJYmlkQW1vdW50CQACAQIMV3JvbmcgYW1vdW50CQCUCgIFCWJpZEFtb3VudAUKYmlkQXNzZXRJZAEMaWRDYWxsZXJEYXRlAQFpAwkBASEBBQtkYXBwUnVubmluZwkAAgEFDm1haW50ZW5hbmNlTVNHCQCVCgMJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAEHYnV5TWludAUBaQVhcnRJZAZpc3N1ZXIFYmlkSWQIYmlkT3duZXIEDSR0MDExODE2MTE4NzgJAQxpZENhbGxlckRhdGUBBQFpBAJpZAgFDSR0MDExODE2MTE4NzgCXzEEBmNhbGxlcggFDSR0MDExODE2MTE4NzgCXzIEBGRhdGUIBQ0kdDAxMTgxNjExODc4Al8zBAVpc0JpZAMDAwkAAAIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwUGaXNzdWVyCQECIT0CBQhiaWRPd25lcgIABwkBAiE9AgUFYmlkSWQCAAcGBwQIYmxvY2tFbmQJAQ9nZXRJbnRlZ2VyQnlLZXkBCQEKa2V5RW5kU2FsZQIFBmNhbGxlcgUFYXJ0SWQDAwMJAQIhPQIFCGJsb2NrRW5kAAAJAGcCBQZoZWlnaHQFCGJsb2NrRW5kBwkBASEBBQVpc0JpZAcJAAIBAgtTYWxlIGVuZGVkLgQOY2FsbGVySXNJc3N1ZXIJAAACCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMFBmlzc3VlcgQIdG90YWxORlQJAQ9nZXRJbnRlZ2VyQnlLZXkBAhB0b3RhbF9uZnRfaXNzdWVkBAZzaWduSUQJAQ5nZXRTdHJpbmdCeUtleQEJAQlrZXlTaWduSUQCBQZpc3N1ZXIFBWFydElkBAthcnR3b3JrTmFtZQkBDmdldFN0cmluZ0J5S2V5AQkBB2tleU5hbWUCBQZpc3N1ZXIFBWFydElkAwkAAAIFC2FydHdvcmtOYW1lAgAJAAIBAhFBcnQgZG9lc24ndCBleGlzdAQIaXNPblNhbGUJAQ9nZXRCb29sZWFuQnlLZXkBCQEJa2V5T25TYWxlAgUGaXNzdWVyBQVhcnRJZAQKYW1vdW50U29sZAkBD2dldEludGVnZXJCeUtleQEJAQlrZXlJc3N1ZWQCBQZpc3N1ZXIFBWFydElkBAxhcnR3b3JrUHJpY2UDBQ5jYWxsZXJJc0lzc3VlcgkAaAIFGWN1cnJlbnRDZXJ0aWZpY2F0aW9uUHJpY2UAAgkBD2dldEludGVnZXJCeUtleQEJAQhrZXlQcmljZQIFBmlzc3VlcgUFYXJ0SWQEDHByaWNlQXNzZXRJZAMFDmNhbGxlcklzSXNzdWVyCQDYBAEFC3NpZ25Bc3NldElkCQEOZ2V0U3RyaW5nQnlLZXkBCQESa2V5QXNzZXRJZEFjY2VwdGVkAgUGaXNzdWVyBQVhcnRJZAQKbWF4Q2FuU2VsbAkBD2dldEludGVnZXJCeUtleQEJAQprZXlNYXhNaW50AgUGaXNzdWVyBQVhcnRJZAMDAwkBASEBBQVpc0JpZAkBASEBBQ5jYWxsZXJJc0lzc3VlcgcDAwkAZwIAAAUMYXJ0d29ya1ByaWNlBgkBASEBBQhpc09uU2FsZQYJAGcCAAAFCm1heENhblNlbGwHCQACAQIQQXJ0IG5vdCBmb3Igc2FsZQMDAwkBASEBBQVpc0JpZAUOY2FsbGVySXNJc3N1ZXIHCQBnAgAABQptYXhDYW5TZWxsBwkAAgECFE1heCBpc3N1YWJsZSBub3Qgc2V0BAljaGVja1VzZXIJAQx2YWxpZGF0ZVVzZXIBBQZpc3N1ZXIDAwUFaXNCaWQJAQIhPQIFCWNoZWNrVXNlcgIABwkAAgEFCWNoZWNrVXNlcgQKYmlkRGF0YUtleQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgRiaWRfBQVhcnRJZAIBXwUGaXNzdWVyAgFfBQhiaWRPd25lcgIBXwUFYmlkSWQEDSR0MDEzNjU3MTM4MjgDBQVpc0JpZAkBFmdldFByaWNlQXNzZXRJZEZyb21CaWQBBQpiaWREYXRhS2V5CQEUdmFsaWRhdGVQcmljZUFzc2V0SWQDBQFpBQxwcmljZUFzc2V0SWQFDGFydHdvcmtQcmljZQQGYW1vdW50CAUNJHQwMTM2NTcxMzgyOAJfMQQHYXNzZXRJZAgFDSR0MDEzNjU3MTM4MjgCXzIEBWFnZW50CQELdmFsdWVPckVsc2UCCQCdCAIFCHVzZXJEYXBwCQESa2V5QXJ0aXN0QWdlbnRBZGRyAQUGaXNzdWVyBQtmZWVSZWNlaXZlcgQKYWdlbnRTaGFyZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQh1c2VyRGFwcAkBD2tleVByaW1hcnlTaGFyZQEFBmlzc3VlcgAABA1pc1doaXRlbGlzdGVkCQEOY2hlY2tXaGl0ZWxpc3QBBQZpc3N1ZXIEA2N1dAMJAGYCBQ1pc1doaXRlbGlzdGVkBQZoZWlnaHQAAAMJAAACBQdhc3NldElkBQtzaWduQXNzZXRJZAUHc2lnbkN1dAULdXNkbldhdmVDdXQEDWFtb3VudEZvclNpZ24JAGsDBQZhbW91bnQFA2N1dABkBA5hbW91bnRGb3JBZ2VudAMDAwkBAiE9AgUFYWdlbnQFC2ZlZVJlY2VpdmVyCQBmAgUKYWdlbnRTaGFyZQAABwkAZgIFBmhlaWdodAUNaXNXaGl0ZWxpc3RlZAcJAGsDBQZhbW91bnQFCmFnZW50U2hhcmUAZAAABBBhbW91bnRGb3JDcmVhdG9yCQBlAgUGYW1vdW50BQ1hbW91bnRGb3JTaWduAwkAAAIFCmFtb3VudFNvbGQFCm1heENhblNlbGwJAAIBAgxBcnQgc29sZCBvdXQEDW5ld0Ftb3VudFNvbGQJAGQCBQphbW91bnRTb2xkAAEECWlzc3VlTWV0YQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICCUNyZWF0b3I6IAUGaXNzdWVyAgosCiBBcnRJRDogBQVhcnRJZAILLAogU2lnbklEOiAFBnNpZ25JRAIRLAogQXJ0d29yayBuYW1lOiAFC2FydHdvcmtOYW1lAgosCiBJc3N1ZTogCQCkAwEFDW5ld0Ftb3VudFNvbGQCAS8JAKQDAQUKbWF4Q2FuU2VsbAQIaXNzdWVORlQJAMIIBQkArAICAgNTQV8JAKQDAQkAZAIFCHRvdGFsTkZUAAEFCWlzc3VlTWV0YQABAAAHBAVpZE5GVAkAuAgBBQhpc3N1ZU5GVAQKc2VsbFN0YXR1cwMDCQAAAgUNbmV3QW1vdW50U29sZAUKbWF4Q2FuU2VsbAYJAQEhAQUIaXNPblNhbGUHBgQKcmVjZWl2ZU5GVAMDAwkAAAIFBmNhbGxlcgUGaXNzdWVyCQECIT0CBQhiaWRPd25lcgIABwkBAiE9AgUFYmlkSWQCAAcJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCGJpZE93bmVyCAUBaQZjYWxsZXIECmFzc2V0SWRCaWQDCQEBIQEJAQlpc0RlZmluZWQBBQdhc3NldElkAgVXQVZFUwkA2AQBCQEFdmFsdWUBBQdhc3NldElkBAdiaWREYXRhCQEOZ2V0U3RyaW5nQnlLZXkBCQCsAgIFCmJpZERhdGFLZXkCBV9PUEVOBAliaWREZWxPbGQJAQtEZWxldGVFbnRyeQEJAKwCAgUKYmlkRGF0YUtleQIFX09QRU4ECWJpZFVwZGF0ZQkBC1N0cmluZ0VudHJ5AgkArAICBQpiaWREYXRhS2V5AgdfQ0xPU0VECQCsAgIJAKwCAgUHYmlkRGF0YQIBXwkApAMBBQRkYXRlBAdzb2xkS2V5CQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICCWFydF9zb2xkXwkApAMBBQ1uZXdBbW91bnRTb2xkAgRfb2ZfCQCkAwEFCm1heENhblNlbGwCAV8FBWFydElkAgFfBQZpc3N1ZXIECXNvbGRWYWx1ZQMJAQEhAQUFaXNCaWQJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUGY2FsbGVyAgFfCQCkAwEFBGRhdGUCAV8FAmlkAgFfCQCkAwEFDGFydHdvcmtQcmljZQIBXwUMcHJpY2VBc3NldElkAgFfCQDYBAEFBWlkTkZUCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKUIAQUKcmVjZWl2ZU5GVAIBXwkApAMBBQRkYXRlAgFfBQJpZAIBXwkApAMBBQZhbW91bnQCAV8FCmFzc2V0SWRCaWQCAV8JANgEAQUFaWRORlQECHNvbGREYXRhCQELU3RyaW5nRW50cnkCBQdzb2xkS2V5BQlzb2xkVmFsdWUEC2NvbW1pc3Npb25zAwkBAiE9AgUOYW1vdW50Rm9yQWdlbnQAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQULZmVlUmVjZWl2ZXIJAGUCBQ1hbW91bnRGb3JTaWduBQ5hbW91bnRGb3JBZ2VudAUHYXNzZXRJZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUFYWdlbnQFDmFtb3VudEZvckFnZW50BQdhc3NldElkBQNuaWwJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFC2ZlZVJlY2VpdmVyBQ1hbW91bnRGb3JTaWduBQdhc3NldElkBQNuaWwEBmJ1eVJlcwkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEJa2V5SXNzdWVkAgUGaXNzdWVyBQVhcnRJZAUNbmV3QW1vdW50U29sZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgICBG5mdF8JANgEAQUFaWRORlQFB3NvbGRLZXkJAMwIAgkBDEludGVnZXJFbnRyeQICEHRvdGFsX25mdF9pc3N1ZWQJAGQCBQh0b3RhbE5GVAABCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEKa2V5RW5kU2FsZQIFBmlzc3VlcgUFYXJ0SWQAAAkAzAgCCQEMQm9vbGVhbkVudHJ5AgkBCWtleU9uU2FsZQIFBmlzc3VlcgUFYXJ0SWQFCnNlbGxTdGF0dXMJAMwIAgUIaXNzdWVORlQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFBmlzc3VlcgUQYW1vdW50Rm9yQ3JlYXRvcgUHYXNzZXRJZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQpyZWNlaXZlTkZUAAEFBWlkTkZUBQNuaWwFC2NvbW1pc3Npb25zAwUFaXNCaWQJAMwIAgUIc29sZERhdGEJAMwIAgUJYmlkVXBkYXRlCQDMCAIFCWJpZERlbE9sZAUGYnV5UmVzCQDMCAIFCHNvbGREYXRhBQZidXlSZXMKBmludm9rZQEHc2V0Q29uZgIDa2V5A3ZhbAQGY2FsbGVyCQClCAEIBQZpbnZva2UGY2FsbGVyAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUFY2hyaXMJAMwIAgkApQgBBQR0aGlzBQNuaWwFBmNhbGxlcgMJAQhjb250YWlucwIFA2tleQIFY29uZl8JAMwIAgkBC1N0cmluZ0VudHJ5AgUDa2V5BQN2YWwFA25pbAkAAgECIEVudHJpZXMgc3RhcnRpbmcgd2l0aCBjb25mXyBvbmx5CQACAQIiWW91IGFyZSBub3QgYWxsb3dlZCB0byBjaGFuZ2UgdGhpcwFpAQphZGRBcnR3b3JrDApzaGEyNTZIYXNoBnNpZ25JRARuYW1lC2Rlc2NyaXB0aW9uBHRhZ3MEdHlwZQpjaWREaXNwbGF5DHNoYTI1NkV4cG9ydAljaWRFeHBvcnQNc2hhMjU2TGljZW5jZQpjaWRMaWNlbmNlB2NyYXdsZXIEDSR0MDE3NjkwMTc3MzMJAQxpZENhbGxlckRhdGUBBQFpBAVhcnRJZAgFDSR0MDE3NjkwMTc3MzMCXzEEBmNhbGxlcggFDSR0MDE3NjkwMTc3MzMCXzIEBGRhdGUIBQ0kdDAxNzY5MDE3NzMzAl8zAwkBASEBCQEMdmFsaWRhdGVIYXNoAQUKc2hhMjU2SGFzaAkAAgECJEhhc2ggc2hvdWxkIGJlIDY0IGNoYXJhY3RlcnMgbWF4aW11bQQNJHQwMTc4MzgxNzkwNwkBCnNldExJY2VuY2UCBQpjaWRMaWNlbmNlBQ1zaGEyNTZMaWNlbmNlBApsaWNlbmNlQ0lECAUNJHQwMTc4MzgxNzkwNwJfMQQLbGljZW5jZUhhc2gIBQ0kdDAxNzgzODE3OTA3Al8yBA92YWxpZGF0ZUFydHdvcmsJARN2YWxpZGF0ZUFydHdvcmtEYXRhCQUGY2FsbGVyBQpjaWREaXNwbGF5BQljaWRFeHBvcnQFCmxpY2VuY2VDSUQFDHNoYTI1NkV4cG9ydAULbGljZW5jZUhhc2gFBG5hbWUFC2Rlc2NyaXB0aW9uBQR0YWdzAwkBAiE9AgUPdmFsaWRhdGVBcnR3b3JrAgAJAAIBAhVTb21ldGhpbmcgd2VudCB3cm9uZyEEDSR0MDE4MTMxMTgxNzMJAQ92YWxpZGF0ZVBheW1lbnQBBQFpBAZhbW91bnQIBQ0kdDAxODEzMTE4MTczAl8xBAdhc3NldElkCAUNJHQwMTgxMzExODE3MwJfMgMJAQEhAQkBCWlzRGVmaW5lZAEFBmFtb3VudAkAAgECFFNvbWV0aGluZyB3ZW50IHdyb25nBAplbnRyeUV4aXN0CQEOZ2V0U3RyaW5nQnlLZXkBCQESa2V5VHhpZEJ5SGFzaE93bmVyAgUKc2hhMjU2SGFzaAUGY2FsbGVyAwkBAiE9AgUKZW50cnlFeGlzdAIACQACAQIUWW91IGFscmVhZHkgYWRkZWQgaXQECWhhc2hFeGlzdAkBDmdldFN0cmluZ0J5S2V5AQkBDmtleU93bmVyQnlIYXNoAQUKc2hhMjU2SGFzaAMJAQIhPQIFCWhhc2hFeGlzdAIACQACAQIXSGFzaCBhbHJlYWR5IHJlZ2lzdGVyZWQED2lzU2lnbkNlcnRpZmllZAkBFGNoZWNrU2lnbkNlcnRpZmljYXRlAwUGc2lnbklEBQZjYWxsZXIFCnNoYTI1Nkhhc2gDCQEBIQEFD2lzU2lnbkNlcnRpZmllZAkAAgECLFNpZ24gQ2VydGlmaWNhdGUgbm90IGZvdW5kIGZvciB0aGlzIGFkZHJlc3MuCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ5rZXlPd25lckJ5SGFzaAEFCnNoYTI1Nkhhc2gFBmNhbGxlcgkAzAgCCQELU3RyaW5nRW50cnkCCQESa2V5VHhpZEJ5SGFzaE93bmVyAgUKc2hhMjU2SGFzaAUGY2FsbGVyBQVhcnRJZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBB2tleURhdGUCBQZjYWxsZXIFBWFydElkBQRkYXRlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQdrZXlOYW1lAgUGY2FsbGVyBQVhcnRJZAUEbmFtZQkAzAgCCQELU3RyaW5nRW50cnkCCQEHa2V5RGVzYwIFBmNhbGxlcgUFYXJ0SWQFC2Rlc2NyaXB0aW9uCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ1rZXlEaXNwbGF5Q2lkAgUGY2FsbGVyBQVhcnRJZAUKY2lkRGlzcGxheQkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5RXhwb3J0Q2lkAgUGY2FsbGVyBQVhcnRJZAUJY2lkRXhwb3J0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ1rZXlFeHBvcnRIYXNoAgUGY2FsbGVyBQVhcnRJZAUMc2hhMjU2RXhwb3J0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ5rZXlMaWNlbmNlSGFzaAIFBmNhbGxlcgUFYXJ0SWQFC2xpY2VuY2VIYXNoCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ1rZXlMaWNlbmNlQ2lkAgUGY2FsbGVyBQVhcnRJZAUKbGljZW5jZUNJRAkAzAgCCQELU3RyaW5nRW50cnkCCQEHa2V5VHlwZQIFBmNhbGxlcgUFYXJ0SWQFBHR5cGUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBB2tleVRhZ3MCBQZjYWxsZXIFBWFydElkBQR0YWdzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEKa2V5TWF4TWludAIFBmNhbGxlcgUFYXJ0SWQAAAkAzAgCCQELU3RyaW5nRW50cnkCCQEJa2V5U2lnbklEAgUGY2FsbGVyBQVhcnRJZAUGc2lnbklECQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEJa2V5SXNzdWVkAgUGY2FsbGVyBQVhcnRJZAAACQDMCAIJAQxCb29sZWFuRW50cnkCCQEJa2V5T25TYWxlAgUGY2FsbGVyBQVhcnRJZAcJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDWtleWlkQnlTaWduaWQCBQZjYWxsZXIFBnNpZ25JRAUFYXJ0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleUhhc2hCeVR4aWRBZGRyAgUGY2FsbGVyBQVhcnRJZAUKc2hhMjU2SGFzaAkAzAgCCQELU3RyaW5nRW50cnkCCQEKa2V5Q3Jhd2xlcgIFBmNhbGxlcgUFYXJ0SWQFB2NyYXdsZXIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFC2ZlZVJlY2VpdmVyBQZhbW91bnQFB2Fzc2V0SWQFA25pbAFpAQ11cGRhdGVBcnR3b3JrCwR0eGlkBG5hbWULZGVzY3JpcHRpb24EdGFncwR0eXBlCmNpZERpc3BsYXkMc2hhMjU2RXhwb3J0CWNpZEV4cG9ydA1zaGEyNTZMaWNlbmNlCmNpZExpY2VuY2UHY3Jhd2xlcgMJAQEhAQULZGFwcFJ1bm5pbmcJAAIBBQ5tYWludGVuYW5jZU1TRwQGY2FsbGVyCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMEDSR0MDIwOTUzMjEwMjIJAQpzZXRMSWNlbmNlAgUKY2lkTGljZW5jZQUNc2hhMjU2TGljZW5jZQQKbGljZW5jZUNJRAgFDSR0MDIwOTUzMjEwMjICXzEEC2xpY2VuY2VIYXNoCAUNJHQwMjA5NTMyMTAyMgJfMgQPdmFsaWRhdGVBcnR3b3JrCQETdmFsaWRhdGVBcnR3b3JrRGF0YQkFBmNhbGxlcgUKY2lkRGlzcGxheQUJY2lkRXhwb3J0BQpsaWNlbmNlQ0lEBQxzaGEyNTZFeHBvcnQFC2xpY2VuY2VIYXNoBQRuYW1lBQtkZXNjcmlwdGlvbgUEdGFncwMJAQIhPQIFD3ZhbGlkYXRlQXJ0d29yawIACQACAQIVU29tZXRoaW5nIHdlbnQgd3JvbmchBAplbnRyeUV4aXN0CQEOZ2V0U3RyaW5nQnlLZXkBCQEHa2V5TmFtZQIFBmNhbGxlcgUEdHhpZAMJAAACBQplbnRyeUV4aXN0AgAJAAIBAg9FbnRyeSBub3QgZm91bmQEBGZsYWcJAQ5nZXRTdHJpbmdCeUtleQEJAQdrZXlGbGFnAgUGY2FsbGVyBQR0eGlkAwkAAAIFBGZsYWcCB0lMTEVHQUwJAAIBAh1DYW5ub3QgdXBkYXRlIElMTEVHQUwgYXJ0d29yawMJAQEhAQkBC2lzQXJ0TWludGVkAgUGY2FsbGVyBQR0eGlkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQdrZXlOYW1lAgUGY2FsbGVyBQR0eGlkBQRuYW1lCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQdrZXlEZXNjAgUGY2FsbGVyBQR0eGlkBQtkZXNjcmlwdGlvbgkAzAgCCQELU3RyaW5nRW50cnkCCQENa2V5RGlzcGxheUNpZAIFBmNhbGxlcgUEdHhpZAUKY2lkRGlzcGxheQkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5RXhwb3J0Q2lkAgUGY2FsbGVyBQR0eGlkBQljaWRFeHBvcnQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDWtleUV4cG9ydEhhc2gCBQZjYWxsZXIFBHR4aWQFDHNoYTI1NkV4cG9ydAkAzAgCCQELU3RyaW5nRW50cnkCCQENa2V5TGljZW5jZUNpZAIFBmNhbGxlcgUEdHhpZAUKbGljZW5jZUNJRAkAzAgCCQELU3RyaW5nRW50cnkCCQEOa2V5TGljZW5jZUhhc2gCBQZjYWxsZXIFBHR4aWQFC2xpY2VuY2VIYXNoCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQdrZXlUYWdzAgUGY2FsbGVyBQR0eGlkBQR0YWdzCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQdrZXlUeXBlAgUGY2FsbGVyBQR0eGlkBQR0eXBlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQprZXlDcmF3bGVyAgUGY2FsbGVyBQR0eGlkBQdjcmF3bGVyBQNuaWwJAAIBAg5BbHJlYWR5IG1pbnRlZAFpAQtmbGFnQXJ0d29yawQFYXJ0SWQEYWRkcgRmbGFnBG5vdGUEDSR0MDIyNDc4MjI1MTIJAQxpZENhbGxlckRhdGUBBQFpBAJpZAgFDSR0MDIyNDc4MjI1MTICXzEEBmNhbGxlcggFDSR0MDIyNDc4MjI1MTICXzIDCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQVjaHJpcwkAzAgCCQClCAEFBHRoaXMFA25pbAUGY2FsbGVyAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgIHQ09OU0VOVAkAzAgCAgAJAMwIAgIPQ0hBTkdFX1JFUVVJUkVECQDMCAICB0ZMQUdHRUQJAMwIAgIHSUxMRUdBTAUDbmlsBQRmbGFnCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQdrZXlGbGFnAgUEYWRkcgUFYXJ0SWQFBGZsYWcJAMwIAgkBC1N0cmluZ0VudHJ5AgkBB2tleU5vdGUCBQRhZGRyBQVhcnRJZAUEbm90ZQUDbmlsCQACAQkArAICAg5Vbmtub3cgc3RhdHVzIAUEZmxhZwkAAgECE1lvdSBhcmUgbm90IGFsbG93ZWQBaQENZGVsZXRlQXJ0d29yawIFYXJ0SWQEYWRkcgQNJHQwMjI5NjIyMjk5NgkBDGlkQ2FsbGVyRGF0ZQEFAWkEAmlkCAUNJHQwMjI5NjIyMjk5NgJfMQQGY2FsbGVyCAUNJHQwMjI5NjIyMjk5NgJfMgQJYWRkclRvVXNlAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUFY2hyaXMJAMwIAgkApQgBBQR0aGlzBQNuaWwFBmNhbGxlcgUEYWRkcgUGY2FsbGVyBAplbnRyeUV4aXN0CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAQ5nZXRTdHJpbmdCeUtleQEJAQdrZXlOYW1lAgUJYWRkclRvVXNlBQVhcnRJZAIgTm8gYXJ0IG1hdGNoaW5nIGZvciB0aGlzIGFkZHJlc3MDCQAAAgUKZW50cnlFeGlzdAIACQACAQIgTm8gYXJ0IG1hdGNoaW5nIGZvciB0aGlzIGFkZHJlc3MECnNoYTI1Nkhhc2gJAQ5nZXRTdHJpbmdCeUtleQEJARFrZXlIYXNoQnlUeGlkQWRkcgIFCWFkZHJUb1VzZQUFYXJ0SWQDCQAAAgUKc2hhMjU2SGFzaAIACQACAQIlTm8gYXJ0IGhhc2ggbWF0Y2hpbmcgZm9yIHRoaXMgYWRkcmVzcwQGc2lnbklECQEOZ2V0U3RyaW5nQnlLZXkBCQEJa2V5U2lnbklEAgUJYWRkclRvVXNlBQVhcnRJZAMJAAACBQZzaWduSUQCAAkAAgECE05vIFNJR04gSUQgbWF0Y2hpbmcEDGRhdGFUb0RlbGV0ZQkAzAgCCQELRGVsZXRlRW50cnkBCQEHa2V5RGF0ZQIFCWFkZHJUb1VzZQUFYXJ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBB2tleU5hbWUCBQlhZGRyVG9Vc2UFBWFydElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQdrZXlEZXNjAgUJYWRkclRvVXNlBQVhcnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQENa2V5RGlzcGxheUNpZAIFCWFkZHJUb1VzZQUFYXJ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDGtleUV4cG9ydENpZAIFCWFkZHJUb1VzZQUFYXJ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDWtleUV4cG9ydEhhc2gCBQlhZGRyVG9Vc2UFBWFydElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ5rZXlMaWNlbmNlSGFzaAIFCWFkZHJUb1VzZQUFYXJ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDWtleUxpY2VuY2VDaWQCBQlhZGRyVG9Vc2UFBWFydElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQdrZXlUeXBlAgUJYWRkclRvVXNlBQVhcnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEHa2V5VGFncwIFCWFkZHJUb1VzZQUFYXJ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBCmtleU1heE1pbnQCBQlhZGRyVG9Vc2UFBWFydElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQlrZXlTaWduSUQCBQlhZGRyVG9Vc2UFBWFydElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQlrZXlJc3N1ZWQCBQlhZGRyVG9Vc2UFBWFydElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQlrZXlPblNhbGUCBQlhZGRyVG9Vc2UFBWFydElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQdrZXlGbGFnAgUJYWRkclRvVXNlBQVhcnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEIa2V5UHJpY2UCBQlhZGRyVG9Vc2UFBWFydElkCQDMCAIJAQtEZWxldGVFbnRyeQEJARJrZXlBc3NldElkQWNjZXB0ZWQCBQlhZGRyVG9Vc2UFBWFydElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ5rZXlPd25lckJ5SGFzaAEFCnNoYTI1Nkhhc2gJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDWtleWlkQnlTaWduaWQCBQlhZGRyVG9Vc2UFBnNpZ25JRAkAzAgCCQELRGVsZXRlRW50cnkBCQESa2V5VHhpZEJ5SGFzaE93bmVyAgUKc2hhMjU2SGFzaAUJYWRkclRvVXNlCQDMCAIJAQtEZWxldGVFbnRyeQEJAQprZXlFbmRTYWxlAgUJYWRkclRvVXNlBQVhcnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEHa2V5Tm90ZQIFCWFkZHJUb1VzZQUFYXJ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBCmtleUNyYXdsZXICBQlhZGRyVG9Vc2UFBWFydElkBQNuaWwDCQEBIQEJAQtpc0FydE1pbnRlZAIFCWFkZHJUb1VzZQUFYXJ0SWQDCQEBIQEFC2RhcHBSdW5uaW5nCQACAQUObWFpbnRlbmFuY2VNU0cFDGRhdGFUb0RlbGV0ZQMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFBWNocmlzCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQZjYWxsZXIFDGRhdGFUb0RlbGV0ZQkAAgECKEFydCBhbHJlYWR5IG1pbnRlZCwgeW91IGNhbm5vdCBkZWxldGUgaXQBaQELc2VsbEFydHdvcmsFBWFydElkBXByaWNlB21heE1pbnQHYXNzZXRJZAhibG9ja0VuZAQNJHQwMjU4MTcyNTg1MQkBDGlkQ2FsbGVyRGF0ZQEFAWkEAmlkCAUNJHQwMjU4MTcyNTg1MQJfMQQGY2FsbGVyCAUNJHQwMjU4MTcyNTg1MQJfMgQLYXJ0d29ya05hbWUJAQ5nZXRTdHJpbmdCeUtleQEJAQdrZXlOYW1lAgUGY2FsbGVyBQVhcnRJZAMJAAACBQthcnR3b3JrTmFtZQIACQACAQIjVGhpcyBhcnQgZG9lc24ndCBtYXRjaCB5b3VyIGFjY291bnQEBGZsYWcJAQ5nZXRTdHJpbmdCeUtleQEJAQdrZXlGbGFnAgUGY2FsbGVyBQVhcnRJZAMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAICD0NIQU5HRV9SRVFVSVJFRAkAzAgCAgdGTEFHR0VECQDMCAICB0lMTEVHQUwFA25pbAUEZmxhZwkAAgECD0ZsYWdnZWQgYXJ0d29yawQGYmlkTmJyCQEPZ2V0SW50ZWdlckJ5S2V5AQkArAICAhJjdXJyZW50X2JpZGFtb3VudF8FBWFydElkAwkAZgIAAAUIYmxvY2tFbmQJAAIBAgxOZWdhdGl2ZSBlbmQDAwkAZgIFCGJsb2NrRW5kAAADCQECIT0CBQdtYXhNaW50AAEGCQECIT0CBQVwcmljZQAABwkAAgECOlRpbWVkIG9mZmVyIG9ubHkgYWxsb3dlZCBmb3IgdW5pcXVlIGVkaXRpb24gYW5kIG9mZmVyIG9ubHkECmJhc2VIZWlnaHQDCQAAAgUIYmxvY2tFbmQAAAAABQZoZWlnaHQDCQEBIQEJARBhY2NlcHRlZEFzc2V0SWRzAQUHYXNzZXRJZAkAAgECFVNvbWV0aGluZyB3ZW50IHdyb25nIQMJAQEhAQkBD3ZhbGlkYXRlTWluU2VsbAIFB2Fzc2V0SWQFBXByaWNlCQACAQIVU29tZXRoaW5nIHdlbnQgd3JvbmchBAljaGVja1VzZXIJAQx2YWxpZGF0ZVVzZXIBBQZjYWxsZXIDCQECIT0CBQljaGVja1VzZXICAAkAAgEFCWNoZWNrVXNlcgQKYW1vdW50U29sZAkBD2dldEludGVnZXJCeUtleQEJAQlrZXlJc3N1ZWQCBQZjYWxsZXIFBWFydElkBAptYXhDYW5TZWxsCQEPZ2V0SW50ZWdlckJ5S2V5AQkBCmtleU1heE1pbnQCBQZjYWxsZXIFBWFydElkAwkAZgIFB21heE1pbnQAZAkAAgECHDEwMCBlZGl0aW9ucyBtYXggcGVyIGFydHdvcmsDAwkBAiE9AgUKYW1vdW50U29sZAAACQAAAgUKYW1vdW50U29sZAUKbWF4Q2FuU2VsbAcJAAIBAhRNYXggZWRpdGlvbiByZWFjaGVkLgMDCQBmAgUKYW1vdW50U29sZAAACQECIT0CBQptYXhDYW5TZWxsBQdtYXhNaW50BwkAAgECJkNhbm5vdCBjaGFuZ2UgbWF4aW11bSBpc3N1YWJsZSBhbnltb3JlAwMJAGYCBQZiaWROYnIAAAkBAiE9AgUKbWF4Q2FuU2VsbAUHbWF4TWludAcJAAIBAjFDYW5ub3QgY2hhbmdlIG1heGltdW0gaXNzdWFibGUgd2l0aCBhY3RpdmUgb3JkZXJzBApzZWxsU3RhdHVzAwMJAGYCBQVwcmljZQAACQBmAgUHbWF4TWludAAABwYHCQDMCAIJAQxCb29sZWFuRW50cnkCCQEJa2V5T25TYWxlAgUGY2FsbGVyBQVhcnRJZAUKc2VsbFN0YXR1cwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBCGtleVByaWNlAgUGY2FsbGVyBQVhcnRJZAUFcHJpY2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAQprZXlNYXhNaW50AgUGY2FsbGVyBQVhcnRJZAUHbWF4TWludAkAzAgCCQELU3RyaW5nRW50cnkCCQESa2V5QXNzZXRJZEFjY2VwdGVkAgUGY2FsbGVyBQVhcnRJZAUHYXNzZXRJZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBCmtleUVuZFNhbGUCBQZjYWxsZXIFBWFydElkCQBkAgUKYmFzZUhlaWdodAUIYmxvY2tFbmQFA25pbAFpAQpidXlBcnR3b3JrAgVhcnRJZAZpc3N1ZXIJAQdidXlNaW50BQUBaQUFYXJ0SWQFBmlzc3VlcgIAAgABaQEGc2V0QmlkAgVhcnRJZAZpc3N1ZXIEDSR0MDI4MTYxMjgyMDEJAQxpZENhbGxlckRhdGUBBQFpBAJpZAgFDSR0MDI4MTYxMjgyMDECXzEEBmNhbGxlcggFDSR0MDI4MTYxMjgyMDECXzIEBGRhdGUIBQ0kdDAyODE2MTI4MjAxAl8zBA0kdDAyODIwNzI4MjQzCQEJaXNQYXltZW50AQUBaQQHcGF5bWVudAgFDSR0MDI4MjA3MjgyNDMCXzEEBmFtb3VudAgFDSR0MDI4MjA3MjgyNDMCXzIEB2Fzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCAUHcGF5bWVudAdhc3NldElkAgVXQVZFUwkA2AQBCQEFdmFsdWUBCAUHcGF5bWVudAdhc3NldElkBAhibG9ja0VuZAkBD2dldEludGVnZXJCeUtleQEJAQprZXlFbmRTYWxlAgUGaXNzdWVyBQVhcnRJZAMDCQECIT0CBQhibG9ja0VuZAAACQBnAgUGaGVpZ2h0BQhibG9ja0VuZAcJAAIBAgtTYWxlIGVuZGVkLgQGYmlkTmJyCQEPZ2V0SW50ZWdlckJ5S2V5AQkArAICAhJjdXJyZW50X2JpZGFtb3VudF8FBWFydElkAwkBASEBCQEQYWNjZXB0ZWRBc3NldElkcwEFB2Fzc2V0SWQJAAIBAhJhc3NldCBub3QgYWNjZXB0ZWQDCQEBIQEJAQ92YWxpZGF0ZU1pblNlbGwCBQdhc3NldElkBQZhbW91bnQJAAIBAg5Xcm9uZyBtaW4gc2VsbAQKYW1vdW50U29sZAkBD2dldEludGVnZXJCeUtleQEJAQlrZXlJc3N1ZWQCBQZpc3N1ZXIFBWFydElkBAptYXhDYW5TZWxsCQEPZ2V0SW50ZWdlckJ5S2V5AQkBCmtleU1heE1pbnQCBQZpc3N1ZXIFBWFydElkAwkAZwIAAAUKbWF4Q2FuU2VsbAkAAgECI05vIG1heCBlZGl0aW9uIHNldCBmb3IgdGhpcyBhcnR3b3JrAwkAZwIFCmFtb3VudFNvbGQFCm1heENhblNlbGwJAAIBAhhTb2xkIG91dCwgeW91IGNhbm5vdCBiaWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICBGJpZF8FBWFydElkAgFfBQZpc3N1ZXICAV8FBmNhbGxlcgIBXwUCaWQCBV9PUEVOCQCsAgIJAKwCAgkArAICCQCsAgIFB2Fzc2V0SWQCAV8JAKQDAQUGYW1vdW50AgFfCQCkAwEFBGRhdGUJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgISY3VycmVudF9iaWRhbW91bnRfBQVhcnRJZAkAZAIFBmJpZE5icgABBQNuaWwBaQEJYWNjZXB0QmlkBAVhcnRJZAZpc3N1ZXIFYmlkSWQIYmlkT3duZXIEBmNhbGxlcgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzAwkBAiE9AgUGY2FsbGVyBQZpc3N1ZXIJAAIBAhlZb3UgY2Fubm90IGRvIHRoaXMgYWN0aW9uCQEHYnV5TWludAUFAWkFBWFydElkBQZpc3N1ZXIFBWJpZElkBQhiaWRPd25lcgFpAQljYW5jZWxCaWQEBWFydElkBmlzc3VlcgViaWRJZAhiaWRPd25lcgQNJHQwMjk3MDMyOTc2NQkBDGlkQ2FsbGVyRGF0ZQEFAWkEAmlkCAUNJHQwMjk3MDMyOTc2NQJfMQQGY2FsbGVyCAUNJHQwMjk3MDMyOTc2NQJfMgQEZGF0ZQgFDSR0MDI5NzAzMjk3NjUCXzMDAwkBAiE9AgUGY2FsbGVyBQhiaWRPd25lcgkBAiE9AgUGY2FsbGVyBQZpc3N1ZXIHCQACAQIZWW91IGNhbm5vdCBkbyB0aGlzIGFjdGlvbgQNcmV0dXJuTW9uZXlUbwMJAAACBQZjYWxsZXIFBmlzc3VlcgUIYmlkT3duZXIFBmNhbGxlcgQGYmlkTmJyCQEPZ2V0SW50ZWdlckJ5S2V5AQkArAICAhJjdXJyZW50X2JpZGFtb3VudF8FBWFydElkBApiaWREYXRhS2V5CQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICBGJpZF8FBWFydElkAgFfBQZpc3N1ZXICAV8FCGJpZE93bmVyAgFfBQViaWRJZAQHYmlkRGF0YQkBDmdldFN0cmluZ0J5S2V5AQkArAICBQpiaWREYXRhS2V5AgVfT1BFTgMJAAACBQdiaWREYXRhAgAJAAIBAg1CaWQgbm90IGZvdW5kBApiaWREYXRhQXJyCQC1CQIFB2JpZERhdGECAV8EB2Fzc2V0SWQJAQ1nZXRCaWRBc3NldElkAQkAkQMCBQpiaWREYXRhQXJyAAAECWJpZFN0YXR1cwIIQ0FOQ0VMRUQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICBQpiaWREYXRhS2V5AgVfT1BFTgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgUKYmlkRGF0YUtleQIBXwUJYmlkU3RhdHVzCQCsAgIJAKwCAgUHYmlkRGF0YQIBXwkApAMBBQRkYXRlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICEmN1cnJlbnRfYmlkYW1vdW50XwUFYXJ0SWQJAGUCBQZiaWROYnIAAQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUNcmV0dXJuTW9uZXlUbwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCmJpZERhdGFBcnIAAQUHYXNzZXRJZAUDbmlsAGZog1E=", "height": 2329569, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: FjnN55bz5doW48zioqNkrWYxoKU4bo1HVK38xbMzv7vH Next: 2CnVvZrkbVbr86DSSr2K8F3yP6xAgfCRGjX5B76qCw6L Diff:
OldNewDifferences
88
99 let d = value(addressFromString(a("conf_oracle_fee")))
1010
11-let e = a("conf_fee_receiver")
11+let e = value(addressFromString(a("conf_signweb_dapp")))
1212
13-let f = value(addressFromString(a("conf_artworks_dapp")))
13+let f = a("conf_fee_receiver")
1414
1515 let g = if (c)
1616 then value(addressFromString("3Mt4RGMEyjSWYAocTPqd55wdHQQB3PU2UCm"))
1717 else value(addressFromString(a("conf_users_dapp")))
1818
19-let h = fromBase58String(a("conf_accepted_asset_SIGN"))
19+let h = value(addressFromString(a("conf_whitelist_dapp")))
2020
21-let i = fromBase58String(a("conf_accepted_asset_USDN"))
21+let i = fromBase58String(a("conf_accepted_asset_SIGN"))
2222
23-let j = fromBase58String(a("conf_accepted_asset_USDT"))
23+let j = fromBase58String(a("conf_accepted_asset_USDN"))
2424
25-let k = base58''
25+let k = fromBase58String(a("conf_accepted_asset_USDT"))
2626
27-let l = a("conf_admin_1")
27+let l = base58''
2828
29-let m = 3
29+let m = a("conf_admin_1")
3030
31-let n = 10
32-
33-let o = "SUSPENDED"
34-
35-let p = "REMOVED"
36-
37-let q = "ILLEGAL"
38-
39-let r = "SUSPENDED"
40-
41-let s = "conf_dapp_is_running"
42-
43-let t = "conf_maintenance_msg"
44-
45-let u = valueOrElse(getBoolean(this, s), true)
46-
47-let v = valueOrElse(getString(this, t), "")
48-
49-let w = "num_sales"
50-
51-func x (b) = valueOrElse(getString(g, b), "Error")
31+func n (b) = valueOrErrorMessage(getInteger(d, b), "Integer undefine or 0 in oracle")
5232
5333
54-func y (b) = valueOrElse(getString(f, b), "")
34+func o (b) = valueOrElse(getInteger(this, b), 0)
5535
5636
57-func z (b) = valueOrElse(getInteger(this, b), 0)
37+func p (b) = valueOrElse(getInteger(h, b), 0)
5838
5939
60-func A (B) = ("user_status_" + B)
40+func q (b) = valueOrElse(getBoolean(this, b), false)
6141
6242
63-func C (D,E) = ((("art_signid_" + E) + "_") + D)
43+let r = 7
44+
45+let s = 10
46+
47+let t = a("conf_default_licence")
48+
49+let u = a("conf_default_licence_hash")
50+
51+let v = valueOrElse(getBoolean(g, "conf_dapp_is_running"), true)
52+
53+let w = valueOrElse(getString(g, "conf_maintenance_msg"), "")
54+
55+let x = "SUSPENDED"
56+
57+let y = "REMOVED"
58+
59+let z = "UNREGISTERED"
60+
61+let A = "ALLOWED"
62+
63+let B = n(("certification_fee_" + toBase58String(i)))
64+
65+func C (D,E,F) = {
66+ let G = getString(e, ((("data_fc_" + D) + "_") + E))
67+ if ($isInstanceOf(G, "String"))
68+ then {
69+ let H = G
70+ if (contains(H, F))
71+ then true
72+ else false
73+ }
74+ else false
75+ }
6476
6577
66-func F (D,E) = ((("art_flag_" + E) + "_") + D)
78+func I (J) = if (contains(J, "/"))
79+ then if (if ((76 > size(J)))
80+ then (size(split(J, "/")[0]) == 59)
81+ else false)
82+ then (16 > size(split(J, "/")[1]))
83+ else false
84+ else false
6785
6886
69-func G (H) = ("nft_" + H)
87+func K (L) = (size(L) == 64)
7088
7189
72-func I (J,K,E,L) = ((((((("sale2nd_info_" + J) + "_") + K) + "_") + E) + "_") + L)
90+func M (N) = ("user_status_" + N)
7391
7492
75-func M (N,K,O,P) = ((((((("offer2nd_" + N) + "_") + K) + "_") + O) + "_") + P)
93+func O (N,P) = ((("art_date_" + P) + "_") + N)
7694
7795
78-func Q (b) = valueOrErrorMessage(getInteger(d, b), "Integer undefine or 0 in oracle")
96+func Q (N,P) = ((("art_name_" + P) + "_") + N)
7997
8098
81-let R = Q(("certification_fee_" + toBase58String(h)))
82-
83-func S (D) = ("artist_agent_" + D)
99+func R (N,P) = ((("art_desc_" + P) + "_") + N)
84100
85101
86-func T (D) = ("artist_agent_secondary_" + D)
102+func S (N,P) = ((("art_display_cid_" + P) + "_") + N)
87103
88104
89-func U (V) = if (!(u))
90- then throw(v)
91- else $Tuple3(toBase58String(V.transactionId), toBase58String(V.caller.bytes), lastBlock.timestamp)
105+func T (N,P) = ((("art_export_hash_" + P) + "_") + N)
92106
93107
94-func W (V) = if ((size(V.payments) == 0))
108+func U (N,P) = ((("art_export_cid_" + P) + "_") + N)
109+
110+
111+func V (N,P) = ((("art_maxmint_" + P) + "_") + N)
112+
113+
114+func W (N,P) = ((("art_signid_" + P) + "_") + N)
115+
116+
117+func X (N,P) = ((("art_issued_" + P) + "_") + N)
118+
119+
120+func Y (N,P) = ((("art_onsale_" + P) + "_") + N)
121+
122+
123+func Z (N,P) = ((("art_licence_hash_" + P) + "_") + N)
124+
125+
126+func aa (N,P) = ((("art_licence_cid_" + P) + "_") + N)
127+
128+
129+func ab (N,P) = ((("art_tags_" + P) + "_") + N)
130+
131+
132+func ac (N,P) = ((("art_type_" + P) + "_") + N)
133+
134+
135+func ad (N,P) = ((("art_note_" + P) + "_") + N)
136+
137+
138+func ae (N,P) = ((("art_crawler_cid_" + P) + "_") + N)
139+
140+
141+func af (N,P) = ((("art_price_" + P) + "_") + N)
142+
143+
144+func ag (N,P) = ((("art_endsale_" + P) + "_") + N)
145+
146+
147+func ah (N,P) = ((("art_assetAccepted_" + P) + "_") + N)
148+
149+
150+func ai (N,P) = ((("art_flag_" + P) + "_") + N)
151+
152+
153+func aj (ak) = ("artist_agent_" + ak)
154+
155+
156+func al (ak) = ("artist_agent_primary_" + ak)
157+
158+
159+func am (N,an) = ((("get_hashbytxidaddr_" + an) + "_") + N)
160+
161+
162+func ao (F) = ("get_owner_by_hash_" + F)
163+
164+
165+func ap (N,aq) = ((("get_artidbysignid_" + aq) + "_") + N)
166+
167+
168+func ar (F,N) = ("get_txid_by_hash_owner_" + toBase58String(sha256_16Kb(toBytes((F + N)))))
169+
170+
171+func as (at,au,av) = if (!(I(at)))
172+ then throw("Wrong Display CID")
173+ else if (!(I(au)))
174+ then throw("Wrong Export CID")
175+ else if (if ((av != ""))
176+ then !(I(av))
177+ else false)
178+ then throw("Wrong Licence CID")
179+ else true
180+
181+
182+func aw (ax,ay) = if (!(K(ax)))
183+ then throw("Export Hash 64 char. max")
184+ else if (!(K(ay)))
185+ then throw("Licence Hash 64 char. max")
186+ else true
187+
188+
189+func az (aA,aB) = if ((size(aA) == 0))
190+ then throw("Field cannot be is empty")
191+ else if ((size(aA) > aB))
192+ then throw((aA + " is too long"))
193+ else true
194+
195+
196+func aC (N) = {
197+ let aD = valueOrElse(getString(g, M(N)), z)
198+ if (if ((aD == z))
199+ then true
200+ else (aD == A))
201+ then "Register this account first with \"Account\" tab"
202+ else if ((aD == x))
203+ then "Account suspended"
204+ else if ((aD == y))
205+ then "Account removed"
206+ else ""
207+ }
208+
209+
210+func aE (av,ay) = {
211+ let J = if ((size(av) == 0))
212+ then t
213+ else av
214+ let L = if ((size(ay) == 0))
215+ then u
216+ else ay
217+ $Tuple2(J, L)
218+ }
219+
220+
221+func aF (N,at,au,aG,ax,aH,aI,aJ,aK) = {
222+ let aL = aC(N)
223+ if ((aL != ""))
224+ then throw(aL)
225+ else if ((size(at) == 0))
226+ then throw("Display CID cannot be empty")
227+ else if (!(as(at, au, aG)))
228+ then throw("Problem with CID")
229+ else if (!(aw(ax, aH)))
230+ then throw("Problem with Hashes")
231+ else if (!(az(aI, 100)))
232+ then throw("100 Char. max name")
233+ else if (!(az(aJ, 1000)))
234+ then throw("1000 Char. max description")
235+ else if ((size(split(aK, ",")) > 5))
236+ then throw("5 tags max.")
237+ else ""
238+ }
239+
240+
241+func aM (aN) = if ((size(aN.payments) == 0))
95242 then throw("No payment attached")
96243 else {
97- let X = value(V.payments[0])
98- let Y = value(X.amount)
99- $Tuple2(X, Y)
244+ let aO = value(aN.payments[0])
245+ let aP = value(aO.amount)
246+ $Tuple2(aO, aP)
100247 }
101248
102249
103-func Z (aa) = if (if (if ((aa.quantity == 1))
104- then (aa.decimals == 0)
105- else false)
106- then (aa.reissuable == false)
107- else false)
108- then (aa.issuer == f)
109- else false
110-
111-
112-func ab (H) = {
113- let aa = value(assetInfo(H))
114- Z(aa)
250+func aQ (aN) = {
251+ let aR = aM(aN)
252+ let aO = aR._1
253+ let aP = aR._2
254+ let aS = if (if (isDefined(aO.assetId))
255+ then (aO.assetId == i)
256+ else false)
257+ then aO.assetId
258+ else throw("Only SIGN token accepted as transaction fee")
259+ if ((aP != B))
260+ then throw(("Payment amount should be " + toString(B)))
261+ else $Tuple2(aP, aS)
115262 }
116263
117264
118-func ac (ad) = if (if (if (if (if ((ad != toBase58String(h)))
119- then (ad != toBase58String(k))
265+func aT (aU,P) = {
266+ let G = getInteger(this, X(aU, P))
267+ if ($isInstanceOf(G, "Int"))
268+ then {
269+ let aV = G
270+ if ((aV != 0))
271+ then true
272+ else false
273+ }
274+ else false
275+ }
276+
277+
278+func aW (aN,aX,aY) = {
279+ let aZ = aM(aN)
280+ let aO = aZ._1
281+ let aP = aZ._2
282+ let aS = if (!(isDefined(aO.assetId)))
283+ then unit
284+ else if (if ((size(aX) > 0))
285+ then (toBase58String(value(aO.assetId)) == aX)
286+ else false)
287+ then aO.assetId
288+ else throw("Wrong asset id")
289+ if (if ((aS == unit))
290+ then (aX != "")
291+ else false)
292+ then throw("Wrong asset id")
293+ else if ((aY != aP))
294+ then throw("Payment don't match")
295+ else $Tuple2(aP, aS)
296+ }
297+
298+
299+func ba (aS) = if (if (if (if (if ((aS != toBase58String(i)))
300+ then (aS != toBase58String(l))
120301 else false)
121- then (ad != "WAVES")
302+ then (aS != "WAVES")
122303 else false)
123- then (ad != toBase58String(i))
304+ then (aS != toBase58String(j))
124305 else false)
125- then (ad != toBase58String(j))
306+ then (aS != toBase58String(k))
126307 else false)
127- then false
308+ then throw("Only SIGN, USDN,USDT or WAVES accepted")
128309 else true
129310
130311
131-func ae (ad) = if ((ad == "WAVES"))
132- then unit
133- else fromBase58String(ad)
312+func bb (aS,bc) = {
313+ let bd = if (c)
314+ then 10
315+ else n("waves_min_sell")
316+ let be = 1000000
317+ let bf = if (c)
318+ then 1
319+ else (B * 2)
320+ if (if (if (if (if (if ((aS == toBase58String(j)))
321+ then (be > bc)
322+ else false)
323+ then (bc != 0)
324+ else false)
325+ then true
326+ else if (if ((aS == toBase58String(k)))
327+ then (be > bc)
328+ else false)
329+ then (bc != 0)
330+ else false)
331+ then true
332+ else if (if ((aS == toBase58String(i)))
333+ then (bf > bc)
334+ else false)
335+ then (bc != 0)
336+ else false)
337+ then true
338+ else if (if (if ((aS == toBase58String(l)))
339+ then true
340+ else (aS == "WAVES"))
341+ then (bd > bc)
342+ else false)
343+ then (bc != 0)
344+ else false)
345+ then throw("Wrong minimum sell price")
346+ else true
347+ }
134348
135349
136-func af (ag) = {
137- let O = a(("current_owner_on_dapp_" + ag))
138- if ((size(O) == 0))
139- then throw("NFT not found")
350+func bg (aS) = if ((aS == "WAVES"))
351+ then unit
352+ else fromBase58String(aS)
353+
354+
355+func bh (bi) = {
356+ let bj = a((bi + "_OPEN"))
357+ if ((bj == ""))
358+ then throw("Bid not found")
140359 else {
141- let ah = a(((("sale2nd_status_" + O) + "_") + ag))
142- if ((ah != "OPEN"))
143- then throw("NFT not for sale")
144- else O
360+ let bk = split(bj, "_")
361+ let bl = parseIntValue(bk[1])
362+ let bm = bg(bk[0])
363+ if ((0 >= bl))
364+ then throw("Wrong amount")
365+ else $Tuple2(bl, bm)
145366 }
146367 }
147368
148369
149-func ai (b) = {
150- let aj = a((b + "_OPEN"))
151- if ((aj == ""))
152- then throw("Offer not found")
370+func bn (aN) = if (!(v))
371+ then throw(w)
372+ else $Tuple3(toBase58String(aN.transactionId), toBase58String(aN.caller.bytes), lastBlock.timestamp)
373+
374+
375+func bo (aN,P,bp,bq,br) = {
376+ let bs = bn(aN)
377+ let bt = bs._1
378+ let N = bs._2
379+ let bu = bs._3
380+ let bv = if (if (if ((toBase58String(aN.caller.bytes) == bp))
381+ then (br != "")
382+ else false)
383+ then (bq != "")
384+ else false)
385+ then true
386+ else false
387+ let bw = o(ag(N, P))
388+ if (if (if ((bw != 0))
389+ then (height >= bw)
390+ else false)
391+ then !(bv)
392+ else false)
393+ then throw("Sale ended.")
153394 else {
154- let ak = split(aj, "_")
155- let ad = ae(ak[2])
156- $Tuple3(ak, ad, aj)
395+ let bx = (toBase58String(aN.caller.bytes) == bp)
396+ let by = o("total_nft_issued")
397+ let D = a(W(bp, P))
398+ let bz = a(Q(bp, P))
399+ if ((bz == ""))
400+ then throw("Art doesn't exist")
401+ else {
402+ let bA = q(Y(bp, P))
403+ let bB = o(X(bp, P))
404+ let aY = if (bx)
405+ then (B * 2)
406+ else o(af(bp, P))
407+ let aX = if (bx)
408+ then toBase58String(i)
409+ else a(ah(bp, P))
410+ let bC = o(V(bp, P))
411+ if (if (if (!(bv))
412+ then !(bx)
413+ else false)
414+ then if (if ((0 >= aY))
415+ then true
416+ else !(bA))
417+ then true
418+ else (0 >= bC)
419+ else false)
420+ then throw("Art not for sale")
421+ else if (if (if (!(bv))
422+ then bx
423+ else false)
424+ then (0 >= bC)
425+ else false)
426+ then throw("Max issuable not set")
427+ else {
428+ let aL = aC(bp)
429+ if (if (bv)
430+ then (aL != "")
431+ else false)
432+ then throw(aL)
433+ else {
434+ let bi = ((((((("bid_" + P) + "_") + bp) + "_") + br) + "_") + bq)
435+ let bD = if (bv)
436+ then bh(bi)
437+ else aW(aN, aX, aY)
438+ let aP = bD._1
439+ let aS = bD._2
440+ let bE = valueOrElse(getString(g, aj(bp)), f)
441+ let bF = valueOrElse(getInteger(g, al(bp)), 0)
442+ let bG = p(bp)
443+ let bH = if ((bG > height))
444+ then 0
445+ else if ((aS == i))
446+ then r
447+ else s
448+ let bI = fraction(aP, bH, 100)
449+ let bJ = if (if (if ((bE != f))
450+ then (bF > 0)
451+ else false)
452+ then (height > bG)
453+ else false)
454+ then fraction(aP, bF, 100)
455+ else 0
456+ let bK = (aP - bI)
457+ if ((bB == bC))
458+ then throw("Art sold out")
459+ else {
460+ let bL = (bB + 1)
461+ let bM = ((((((((((("Creator: " + bp) + ",
462+ ArtID: ") + P) + ",
463+ SignID: ") + D) + ",
464+ Artwork name: ") + bz) + ",
465+ Issue: ") + toString(bL)) + "/") + toString(bC))
466+ let bN = Issue(("SA_" + toString((by + 1))), bM, 1, 0, false)
467+ let bO = calculateAssetId(bN)
468+ let bP = if (if ((bL == bC))
469+ then true
470+ else !(bA))
471+ then false
472+ else true
473+ let bQ = if (if (if ((N == bp))
474+ then (br != "")
475+ else false)
476+ then (bq != "")
477+ else false)
478+ then addressFromStringValue(br)
479+ else aN.caller
480+ let bR = if (!(isDefined(aS)))
481+ then "WAVES"
482+ else toBase58String(value(aS))
483+ let bj = a((bi + "_OPEN"))
484+ let bS = DeleteEntry((bi + "_OPEN"))
485+ let bT = StringEntry((bi + "_CLOSED"), ((bj + "_") + toString(bu)))
486+ let bU = ((((((("art_sold_" + toString(bL)) + "_of_") + toString(bC)) + "_") + P) + "_") + bp)
487+ let bV = if (!(bv))
488+ then ((((((((((N + "_") + toString(bu)) + "_") + bt) + "_") + toString(aY)) + "_") + aX) + "_") + toBase58String(bO))
489+ else ((((((((((toString(bQ) + "_") + toString(bu)) + "_") + bt) + "_") + toString(aP)) + "_") + bR) + "_") + toBase58String(bO))
490+ let bW = StringEntry(bU, bV)
491+ let bX = if ((bJ != 0))
492+ then [ScriptTransfer(Address(fromBase58String(f)), (bI - bJ), aS), ScriptTransfer(Address(fromBase58String(bE)), bJ, aS)]
493+ else [ScriptTransfer(Address(fromBase58String(f)), bI, aS)]
494+ let bY = ([IntegerEntry(X(bp, P), bL), StringEntry(("nft_" + toBase58String(bO)), bU), IntegerEntry("total_nft_issued", (by + 1)), IntegerEntry(ag(bp, P), 0), BooleanEntry(Y(bp, P), bP), bN, ScriptTransfer(Address(fromBase58String(bp)), bK, aS), ScriptTransfer(bQ, 1, bO)] ++ bX)
495+ if (bv)
496+ then [bW, bT, bS] :: bY
497+ else bW :: bY
498+ }
499+ }
500+ }
501+ }
157502 }
158503 }
159504
160505
161-func al (am) = if ((am != q))
162- then (am != r)
163- else false
164-
165-
166-func an (B,H) = {
167- let am = y(F(B, H))
168- if (al(am))
169- then true
170- else throw(("Original Artwork flagged as " + am))
171- }
172-
173-
174-func ao (B) = {
175- let ap = x(A(B))
176- if (containsElement([o, p], ap))
177- then throw(("Original Artist " + ap))
178- else true
179- }
180-
181-
182-func aq (ad) = {
183- let ar = split(y(G(ad)), "_")
184- let as = y(C(ar[6], ar[5]))
185- if (if (!(an(ar[6], ar[5])))
186- then !(ao(ar[6]))
187- else false)
188- then $Tuple4(false, ar[5], ar[6], as)
189- else $Tuple4(true, ar[5], ar[6], as)
190- }
191-
192-
193-func at (Y,ad,ag,L,O,J) = {
194- let au = valueOrElse(getString(g, S(L)), e)
195- let av = valueOrElse(getInteger(g, T(L)), 0)
196- let aw = fraction(Y, m, 100)
197- let ax = fraction(Y, n, 100)
198- let ay = (Y - (aw + ax))
199- let az = if (if ((au != e))
200- then (av > 0)
201- else false)
202- then fraction(Y, av, 100)
203- else 0
204- let aA = if ((az != 0))
205- then [ScriptTransfer(Address(fromBase58String(e)), (aw - az), ad), ScriptTransfer(Address(fromBase58String(au)), az, ad)]
206- else [ScriptTransfer(Address(fromBase58String(e)), aw, ad)]
207- let aB = ScriptTransfer(Address(fromBase58String(L)), ax, ad)
208- let aC = ScriptTransfer(Address(fromBase58String(O)), ay, ad)
209- let aD = ScriptTransfer(Address(fromBase58String(J)), 1, fromBase58String(ag))
210- $Tuple4(aA, aB, aC, aD)
211- }
212-
213-
214-func aE (ad,aF) = {
215- let aG = if (c)
216- then 10
217- else Q("waves_min_sell")
218- let aH = 1000000
219- let aI = if (c)
220- then 1
221- else (R * 2)
222- if (if (if (if (if (if ((ad == toBase58String(i)))
223- then (aH > aF)
224- else false)
225- then (aF != 0)
226- else false)
227- then true
228- else if (if ((ad == toBase58String(j)))
229- then (aH > aF)
230- else false)
231- then (aF != 0)
232- else false)
233- then true
234- else if (if ((ad == toBase58String(h)))
235- then (aI > aF)
236- else false)
237- then (aF != 0)
238- else false)
239- then true
240- else if (if (if ((ad == toBase58String(k)))
241- then true
242- else (ad == "WAVES"))
243- then (aG > aF)
244- else false)
245- then (aF != 0)
246- else false)
247- then false
248- else true
249- }
250-
251-
252-func aJ (V,K) = {
253- let aK = U(V)
254- let H = aK._1
255- let J = aK._2
256- let aL = aK._3
257- let aM = aq(K)
258- let aN = aM._1
259- let E = aM._2
260- let L = aM._3
261- let as = aM._4
262- $Tuple7(H, J, aL, aN, E, L, as)
263- }
264-
265-
266-func aO () = {
267- let aP = z(w)
268- IntegerEntry(w, (aP + 1))
269- }
270-
271-
272-@Callable(aQ)
273-func setConf (b,aR) = {
274- let J = toString(aQ.caller)
275- if (containsElement([l, toString(this)], J))
506+@Callable(bZ)
507+func setConf (b,ca) = {
508+ let N = toString(bZ.caller)
509+ if (containsElement([m, toString(this)], N))
276510 then if (contains(b, "conf_"))
277- then [StringEntry(b, aR)]
511+ then [StringEntry(b, ca)]
278512 else throw("Entries starting with conf_ only")
279513 else throw("You are not allowed to change this")
280514 }
281515
282516
283517
284-@Callable(aQ)
285-func appRunning (aS,aT) = {
286- let J = toString(aQ.caller)
287- let H = toBase58String(aQ.transactionId)
288- if (containsElement([l, toString(this)], J))
289- then [BooleanEntry(s, aS), StringEntry(t, aT)]
290- else throw("You are not allowed to change this")
291- }
292-
293-
294-
295-@Callable(V)
296-func sellNFT (aF,aU) = {
297- let aV = W(V)
298- let X = aV._1
299- let Y = aV._2
300- if ((Y != 1))
301- then throw("No NFT attached")
518+@Callable(aN)
519+func addArtwork (F,D,aI,aJ,aK,cb,at,ax,au,ay,av,cc) = {
520+ let cd = bn(aN)
521+ let P = cd._1
522+ let N = cd._2
523+ let bu = cd._3
524+ if (!(K(F)))
525+ then throw("Hash should be 64 characters maximum")
302526 else {
303- let K = if (if (isDefined(X.assetId))
304- then ab(value(X.assetId))
305- else false)
306- then toBase58String(value(X.assetId))
307- else throw("Only SIGN Art NFT accepted.")
308- let aW = aJ(V, K)
309- let H = aW._1
310- let J = aW._2
311- let aL = aW._3
312- let aN = aW._4
313- let E = aW._5
314- let L = aW._6
315- let as = aW._7
316- if ((size(as) == 0))
317- then throw("Artwork not found on SIGN Art")
318- else if (!(aN))
319- then throw("Not a valid nft")
320- else if (!(ac(aU)))
321- then throw("Only SIGN, USDN, USDT or WAVES accepted")
322- else if (!(aE(aU, aF)))
323- then throw("Wrong minimum sell price")
324- else [StringEntry((I(J, K, E, L) + "_OPEN"), ((((((((((((toString(aL) + "_") + toString(aF)) + "_") + aU) + "_") + K) + "_") + E) + "_") + L) + "_") + H)), StringEntry(((("sale2nd_status_" + J) + "_") + K), "OPEN"), StringEntry(("current_owner_on_dapp_" + K), J)]
325- }
326- }
327-
328-
329-
330-@Callable(V)
331-func updateSalePrice (K,aF,aU) = {
332- let aX = aJ(V, K)
333- let H = aX._1
334- let J = aX._2
335- let aL = aX._3
336- let aN = aX._4
337- let E = aX._5
338- let L = aX._6
339- let as = aX._7
340- if ((size(as) == 0))
341- then throw("Artwork not found on SIGN Art, cancel your sale.")
342- else if (!(aN))
343- then throw("Not a valid nft")
344- else {
345- let O = a(("current_owner_on_dapp_" + K))
346- if ((O != J))
347- then throw("You don't own this NFT")
348- else {
349- let ah = a(((("sale2nd_status_" + J) + "_") + K))
350- if ((ah != "OPEN"))
351- then throw("Sale not active")
352- else if (!(ac(aU)))
353- then throw("Only SIGN, USDN, USDT or WAVES accepted")
354- else if (!(aE(aU, aF)))
355- then throw("Wrong minimum sell price")
356- else {
357- let aY = I(J, K, E, L)
358- let aZ = split(a((aY + "_OPEN")), "_")
359-[StringEntry((aY + "_OPEN"), ((((((((((((aZ[0] + "_") + toString(aF)) + "_") + aU) + "_") + aZ[3]) + "_") + aZ[4]) + "_") + aZ[5]) + "_") + aZ[6]))]
360- }
361- }
362- }
363- }
364-
365-
366-
367-@Callable(V)
368-func cancelSale (K) = {
369- let ba = aJ(V, K)
370- let H = ba._1
371- let J = ba._2
372- let aL = ba._3
373- let aN = ba._4
374- let E = ba._5
375- let L = ba._6
376- let as = ba._7
377- let O = a(("current_owner_on_dapp_" + K))
378- if ((O != J))
379- then throw("You don't own this NFT")
380- else {
381- let ah = a(((("sale2nd_status_" + J) + "_") + K))
382- if ((ah != "OPEN"))
383- then throw("Sale not active")
527+ let ce = aE(av, ay)
528+ let aG = ce._1
529+ let aH = ce._2
530+ let cf = aF(N, at, au, aG, ax, aH, aI, aJ, aK)
531+ if ((cf != ""))
532+ then throw("Something went wrong!")
384533 else {
385- let aY = I(J, K, E, L)
386- let aZ = a((aY + "_OPEN"))
387-[DeleteEntry((aY + "_OPEN")), DeleteEntry(((("sale2nd_status_" + J) + "_") + K)), DeleteEntry(("current_owner_on_dapp_" + K)), StringEntry((((aY + "_") + H) + "_CANCELLED"), ((((aZ + "_CANCELLED_") + toString(aL)) + "_") + H)), ScriptTransfer(Address(fromBase58String(J)), 1, fromBase58String(K))]
388- }
389- }
390- }
391-
392-
393-
394-@Callable(V)
395-func buyNFT (K) = {
396- let bb = aJ(V, K)
397- let H = bb._1
398- let J = bb._2
399- let aL = bb._3
400- let aN = bb._4
401- let E = bb._5
402- let L = bb._6
403- let as = bb._7
404- if ((size(as) == 0))
405- then throw("Artwork not found on SIGN Art, cancel your sale.")
406- else if (!(aN))
407- then throw("Not a valid nft")
408- else {
409- let O = af(K)
410- let aY = I(O, K, E, L)
411- let aZ = a((aY + "_OPEN"))
412- if ((size(aZ) == 0))
413- then throw("Sale Not found!")
414- else {
415- let bc = split(aZ, "_")
416- if ((parseInt(bc[1]) == 0))
417- then throw("Offer only")
418- else {
419- let bd = W(V)
420- let X = bd._1
421- let Y = bd._2
422- let be = if (isDefined(X.assetId))
423- then toBase58String(value(X.assetId))
424- else ""
425- if (if ((bc[1] != toString(Y)))
426- then true
427- else (bc[2] != be))
428- then throw("Payment infos don't match.")
429- else {
430- let bf = at(Y, X.assetId, K, L, O, J)
431- let aA = bf._1
432- let aB = bf._2
433- let aC = bf._3
434- let aD = bf._4
435- ([DeleteEntry((aY + "_OPEN")), DeleteEntry(((("sale2nd_status_" + O) + "_") + K)), DeleteEntry(("current_owner_on_dapp_" + K)), StringEntry((((aY + "_") + H) + "_CLOSED"), ((((((aZ + "_CLOSED_") + toString(aL)) + "_") + H) + "_") + J)), aO(), aB, aC, aD] ++ aA)
436- }
437- }
438- }
439- }
440- }
441-
442-
443-
444-@Callable(V)
445-func setOffer (K) = {
446- let bg = aJ(V, K)
447- let H = bg._1
448- let N = bg._2
449- let aL = bg._3
450- let aN = bg._4
451- let E = bg._5
452- let L = bg._6
453- let as = bg._7
454- if (!(aN))
455- then throw("Not a valid nft")
456- else {
457- let bh = W(V)
458- let X = bh._1
459- let Y = bh._2
460- let ad = if (!(isDefined(X.assetId)))
461- then "WAVES"
462- else toBase58String(value(X.assetId))
463- if (!(ac(ad)))
464- then throw("asset not accepted")
465- else if ((Y == 0))
466- then throw("Offer of 0 not allowed")
467- else if (!(aE(ad, Y)))
468- then throw("Wrong minimum sell price")
534+ let cg = aQ(aN)
535+ let aP = cg._1
536+ let aS = cg._2
537+ if (!(isDefined(aP)))
538+ then throw("Something went wrong")
469539 else {
470- let O = af(K)
471-[StringEntry((M(N, K, O, H) + "_OPEN"), ((((((((((((((toString(aL) + "_") + toString(Y)) + "_") + ad) + "_") + K) + "_") + E) + "_") + L) + "_") + N) + "_") + H))]
472- }
473- }
474- }
475-
476-
477-
478-@Callable(V)
479-func acceptOffer (K,P,N) = {
480- let bi = aJ(V, K)
481- let H = bi._1
482- let J = bi._2
483- let aL = bi._3
484- let aN = bi._4
485- let E = bi._5
486- let L = bi._6
487- let as = bi._7
488- if (!(aN))
489- then throw("Not a valid nft")
490- else {
491- let O = af(K)
492- if ((J != O))
493- then throw("Only sale owner can accept offer")
494- else {
495- let bj = M(N, K, O, P)
496- let bk = ai(bj)
497- let ak = bk._1
498- let ad = bk._2
499- let aj = bk._3
500- let aY = I(O, K, E, L)
501- let aZ = a((aY + "_OPEN"))
502- if ((size(aZ) == 0))
503- then throw("Sale Not found!")
504- else {
505- let Y = value(parseInt(ak[1]))
506- let bl = at(Y, ad, K, L, O, ak[6])
507- let aA = bl._1
508- let aB = bl._2
509- let aC = bl._3
510- let aD = bl._4
511- let bm = if (isDefined(ad))
512- then toBase58String(value(ad))
513- else "WAVES"
514- ([DeleteEntry((aY + "_OPEN")), DeleteEntry((bj + "_OPEN")), DeleteEntry(((("sale2nd_status_" + O) + "_") + K)), DeleteEntry(("current_owner_on_dapp_" + K)), StringEntry((bj + "_CLOSED"), ((((aj + "_CLOSED_") + toString(aL)) + "_") + H)), StringEntry((((aY + "_") + H) + "_CLOSED"), ((((((((((aZ + "_CLOSED-OFFER_") + toString(aL)) + "_") + H) + "_") + N) + "_") + toString(Y)) + "_") + bm)), aO(), aB, aC, aD] ++ aA)
540+ let ch = a(ar(F, N))
541+ if ((ch != ""))
542+ then throw("You already added it")
543+ else {
544+ let ci = a(ao(F))
545+ if ((ci != ""))
546+ then throw("Hash already registered")
547+ else {
548+ let cj = C(D, N, F)
549+ if (!(cj))
550+ then throw("Sign Certificate not found for this address.")
551+ else [StringEntry(ao(F), N), StringEntry(ar(F, N), P), IntegerEntry(O(N, P), bu), StringEntry(Q(N, P), aI), StringEntry(R(N, P), aJ), StringEntry(S(N, P), at), StringEntry(U(N, P), au), StringEntry(T(N, P), ax), StringEntry(Z(N, P), aH), StringEntry(aa(N, P), aG), StringEntry(ac(N, P), cb), StringEntry(ab(N, P), aK), IntegerEntry(V(N, P), 0), StringEntry(W(N, P), D), IntegerEntry(X(N, P), 0), BooleanEntry(Y(N, P), false), StringEntry(ap(N, D), P), StringEntry(am(N, P), F), StringEntry(ae(N, P), cc), ScriptTransfer(Address(fromBase58String(f)), aP, aS)]
552+ }
553+ }
515554 }
516555 }
517556 }
519558
520559
521560
522-@Callable(V)
523-func cancelOffer (K,P,N,O) = {
524- let bn = U(V)
525- let H = bn._1
526- let J = bn._2
527- let aL = bn._3
528- if (if ((J != N))
529- then (J != O)
561+@Callable(aN)
562+func updateArtwork (an,aI,aJ,aK,cb,at,ax,au,ay,av,cc) = if (!(v))
563+ then throw(w)
564+ else {
565+ let N = toBase58String(aN.caller.bytes)
566+ let ck = aE(av, ay)
567+ let aG = ck._1
568+ let aH = ck._2
569+ let cf = aF(N, at, au, aG, ax, aH, aI, aJ, aK)
570+ if ((cf != ""))
571+ then throw("Something went wrong!")
572+ else {
573+ let ch = a(Q(N, an))
574+ if ((ch == ""))
575+ then throw("Entry not found")
576+ else {
577+ let cl = a(ai(N, an))
578+ if ((cl == "ILLEGAL"))
579+ then throw("Cannot update ILLEGAL artwork")
580+ else if (!(aT(N, an)))
581+ then [StringEntry(Q(N, an), aI), StringEntry(R(N, an), aJ), StringEntry(S(N, an), at), StringEntry(U(N, an), au), StringEntry(T(N, an), ax), StringEntry(aa(N, an), aG), StringEntry(Z(N, an), aH), StringEntry(ab(N, an), aK), StringEntry(ac(N, an), cb), StringEntry(ae(N, an), cc)]
582+ else throw("Already minted")
583+ }
584+ }
585+ }
586+
587+
588+
589+@Callable(aN)
590+func flagArtwork (P,cm,cl,cn) = {
591+ let co = bn(aN)
592+ let bt = co._1
593+ let N = co._2
594+ if (containsElement([m, toString(this)], N))
595+ then if (containsElement(["CONSENT", "", "CHANGE_REQUIRED", "FLAGGED", "ILLEGAL"], cl))
596+ then [StringEntry(ai(cm, P), cl), StringEntry(ad(cm, P), cn)]
597+ else throw(("Unknow status " + cl))
598+ else throw("You are not allowed")
599+ }
600+
601+
602+
603+@Callable(aN)
604+func deleteArtwork (P,cm) = {
605+ let cp = bn(aN)
606+ let bt = cp._1
607+ let N = cp._2
608+ let aU = if (containsElement([m, toString(this)], N))
609+ then cm
610+ else N
611+ let ch = valueOrErrorMessage(a(Q(aU, P)), "No art matching for this address")
612+ if ((ch == ""))
613+ then throw("No art matching for this address")
614+ else {
615+ let F = a(am(aU, P))
616+ if ((F == ""))
617+ then throw("No art hash matching for this address")
618+ else {
619+ let D = a(W(aU, P))
620+ if ((D == ""))
621+ then throw("No SIGN ID matching")
622+ else {
623+ let cq = [DeleteEntry(O(aU, P)), DeleteEntry(Q(aU, P)), DeleteEntry(R(aU, P)), DeleteEntry(S(aU, P)), DeleteEntry(U(aU, P)), DeleteEntry(T(aU, P)), DeleteEntry(Z(aU, P)), DeleteEntry(aa(aU, P)), DeleteEntry(ac(aU, P)), DeleteEntry(ab(aU, P)), DeleteEntry(V(aU, P)), DeleteEntry(W(aU, P)), DeleteEntry(X(aU, P)), DeleteEntry(Y(aU, P)), DeleteEntry(ai(aU, P)), DeleteEntry(af(aU, P)), DeleteEntry(ah(aU, P)), DeleteEntry(ao(F)), DeleteEntry(ap(aU, D)), DeleteEntry(ar(F, aU)), DeleteEntry(ag(aU, P)), DeleteEntry(ad(aU, P)), DeleteEntry(ae(aU, P))]
624+ if (!(aT(aU, P)))
625+ then if (!(v))
626+ then throw(w)
627+ else cq
628+ else if (containsElement([m, toString(this)], N))
629+ then cq
630+ else throw("Art already minted, you cannot delete it")
631+ }
632+ }
633+ }
634+ }
635+
636+
637+
638+@Callable(aN)
639+func sellArtwork (P,bc,cr,aS,bw) = {
640+ let cs = bn(aN)
641+ let bt = cs._1
642+ let N = cs._2
643+ let bz = a(Q(N, P))
644+ if ((bz == ""))
645+ then throw("This art doesn't match your account")
646+ else {
647+ let cl = a(ai(N, P))
648+ if (containsElement(["CHANGE_REQUIRED", "FLAGGED", "ILLEGAL"], cl))
649+ then throw("Flagged artwork")
650+ else {
651+ let ct = o(("current_bidamount_" + P))
652+ if ((0 > bw))
653+ then throw("Negative end")
654+ else if (if ((bw > 0))
655+ then if ((cr != 1))
656+ then true
657+ else (bc != 0)
658+ else false)
659+ then throw("Timed offer only allowed for unique edition and offer only")
660+ else {
661+ let cu = if ((bw == 0))
662+ then 0
663+ else height
664+ if (!(ba(aS)))
665+ then throw("Something went wrong!")
666+ else if (!(bb(aS, bc)))
667+ then throw("Something went wrong!")
668+ else {
669+ let aL = aC(N)
670+ if ((aL != ""))
671+ then throw(aL)
672+ else {
673+ let bB = o(X(N, P))
674+ let bC = o(V(N, P))
675+ if ((cr > 100))
676+ then throw("100 editions max per artwork")
677+ else if (if ((bB != 0))
678+ then (bB == bC)
679+ else false)
680+ then throw("Max edition reached.")
681+ else if (if ((bB > 0))
682+ then (bC != cr)
683+ else false)
684+ then throw("Cannot change maximum issuable anymore")
685+ else if (if ((ct > 0))
686+ then (bC != cr)
687+ else false)
688+ then throw("Cannot change maximum issuable with active orders")
689+ else {
690+ let bP = if (if ((bc > 0))
691+ then (cr > 0)
692+ else false)
693+ then true
694+ else false
695+[BooleanEntry(Y(N, P), bP), IntegerEntry(af(N, P), bc), IntegerEntry(V(N, P), cr), StringEntry(ah(N, P), aS), IntegerEntry(ag(N, P), (cu + bw))]
696+ }
697+ }
698+ }
699+ }
700+ }
701+ }
702+ }
703+
704+
705+
706+@Callable(aN)
707+func buyArtwork (P,bp) = bo(aN, P, bp, "", "")
708+
709+
710+
711+@Callable(aN)
712+func setBid (P,bp) = {
713+ let cv = bn(aN)
714+ let bt = cv._1
715+ let N = cv._2
716+ let bu = cv._3
717+ let cw = aM(aN)
718+ let aO = cw._1
719+ let aP = cw._2
720+ let aS = if (!(isDefined(aO.assetId)))
721+ then "WAVES"
722+ else toBase58String(value(aO.assetId))
723+ let bw = o(ag(bp, P))
724+ if (if ((bw != 0))
725+ then (height >= bw)
530726 else false)
531- then throw("You cannot cancel this offer.")
727+ then throw("Sale ended.")
532728 else {
533- let bj = M(N, K, O, P)
534- let bo = ai(bj)
535- let ak = bo._1
536- let ad = bo._2
537- let aj = bo._3
538-[DeleteEntry((bj + "_OPEN")), StringEntry((bj + "_CANCELLED"), ((((aj + "_CANCELLED_") + toString(aL)) + "_") + H)), ScriptTransfer(Address(fromBase58String(J)), parseIntValue(ak[1]), ad)]
729+ let ct = o(("current_bidamount_" + P))
730+ if (!(ba(aS)))
731+ then throw("asset not accepted")
732+ else if (!(bb(aS, aP)))
733+ then throw("Wrong min sell")
734+ else {
735+ let bB = o(X(bp, P))
736+ let bC = o(V(bp, P))
737+ if ((0 >= bC))
738+ then throw("No max edition set for this artwork")
739+ else if ((bB >= bC))
740+ then throw("Sold out, you cannot bid")
741+ else [StringEntry((((((((("bid_" + P) + "_") + bp) + "_") + N) + "_") + bt) + "_OPEN"), ((((aS + "_") + toString(aP)) + "_") + toString(bu))), IntegerEntry(("current_bidamount_" + P), (ct + 1))]
742+ }
743+ }
744+ }
745+
746+
747+
748+@Callable(aN)
749+func acceptBid (P,bp,bq,br) = {
750+ let N = toBase58String(aN.caller.bytes)
751+ if ((N != bp))
752+ then throw("You cannot do this action")
753+ else bo(aN, P, bp, bq, br)
754+ }
755+
756+
757+
758+@Callable(aN)
759+func cancelBid (P,bp,bq,br) = {
760+ let cx = bn(aN)
761+ let bt = cx._1
762+ let N = cx._2
763+ let bu = cx._3
764+ if (if ((N != br))
765+ then (N != bp)
766+ else false)
767+ then throw("You cannot do this action")
768+ else {
769+ let cy = if ((N == bp))
770+ then br
771+ else N
772+ let ct = o(("current_bidamount_" + P))
773+ let bi = ((((((("bid_" + P) + "_") + bp) + "_") + br) + "_") + bq)
774+ let bj = a((bi + "_OPEN"))
775+ if ((bj == ""))
776+ then throw("Bid not found")
777+ else {
778+ let bk = split(bj, "_")
779+ let aS = bg(bk[0])
780+ let cz = "CANCELED"
781+[DeleteEntry((bi + "_OPEN")), StringEntry(((bi + "_") + cz), ((bj + "_") + toString(bu))), IntegerEntry(("current_bidamount_" + P), (ct - 1)), ScriptTransfer(Address(fromBase58String(cy)), parseIntValue(bk[1]), aS)]
782+ }
539783 }
540784 }
541785
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func a (b) = valueOrElse(getString(this, b), "")
55
66
77 let c = false
88
99 let d = value(addressFromString(a("conf_oracle_fee")))
1010
11-let e = a("conf_fee_receiver")
11+let e = value(addressFromString(a("conf_signweb_dapp")))
1212
13-let f = value(addressFromString(a("conf_artworks_dapp")))
13+let f = a("conf_fee_receiver")
1414
1515 let g = if (c)
1616 then value(addressFromString("3Mt4RGMEyjSWYAocTPqd55wdHQQB3PU2UCm"))
1717 else value(addressFromString(a("conf_users_dapp")))
1818
19-let h = fromBase58String(a("conf_accepted_asset_SIGN"))
19+let h = value(addressFromString(a("conf_whitelist_dapp")))
2020
21-let i = fromBase58String(a("conf_accepted_asset_USDN"))
21+let i = fromBase58String(a("conf_accepted_asset_SIGN"))
2222
23-let j = fromBase58String(a("conf_accepted_asset_USDT"))
23+let j = fromBase58String(a("conf_accepted_asset_USDN"))
2424
25-let k = base58''
25+let k = fromBase58String(a("conf_accepted_asset_USDT"))
2626
27-let l = a("conf_admin_1")
27+let l = base58''
2828
29-let m = 3
29+let m = a("conf_admin_1")
3030
31-let n = 10
32-
33-let o = "SUSPENDED"
34-
35-let p = "REMOVED"
36-
37-let q = "ILLEGAL"
38-
39-let r = "SUSPENDED"
40-
41-let s = "conf_dapp_is_running"
42-
43-let t = "conf_maintenance_msg"
44-
45-let u = valueOrElse(getBoolean(this, s), true)
46-
47-let v = valueOrElse(getString(this, t), "")
48-
49-let w = "num_sales"
50-
51-func x (b) = valueOrElse(getString(g, b), "Error")
31+func n (b) = valueOrErrorMessage(getInteger(d, b), "Integer undefine or 0 in oracle")
5232
5333
54-func y (b) = valueOrElse(getString(f, b), "")
34+func o (b) = valueOrElse(getInteger(this, b), 0)
5535
5636
57-func z (b) = valueOrElse(getInteger(this, b), 0)
37+func p (b) = valueOrElse(getInteger(h, b), 0)
5838
5939
60-func A (B) = ("user_status_" + B)
40+func q (b) = valueOrElse(getBoolean(this, b), false)
6141
6242
63-func C (D,E) = ((("art_signid_" + E) + "_") + D)
43+let r = 7
44+
45+let s = 10
46+
47+let t = a("conf_default_licence")
48+
49+let u = a("conf_default_licence_hash")
50+
51+let v = valueOrElse(getBoolean(g, "conf_dapp_is_running"), true)
52+
53+let w = valueOrElse(getString(g, "conf_maintenance_msg"), "")
54+
55+let x = "SUSPENDED"
56+
57+let y = "REMOVED"
58+
59+let z = "UNREGISTERED"
60+
61+let A = "ALLOWED"
62+
63+let B = n(("certification_fee_" + toBase58String(i)))
64+
65+func C (D,E,F) = {
66+ let G = getString(e, ((("data_fc_" + D) + "_") + E))
67+ if ($isInstanceOf(G, "String"))
68+ then {
69+ let H = G
70+ if (contains(H, F))
71+ then true
72+ else false
73+ }
74+ else false
75+ }
6476
6577
66-func F (D,E) = ((("art_flag_" + E) + "_") + D)
78+func I (J) = if (contains(J, "/"))
79+ then if (if ((76 > size(J)))
80+ then (size(split(J, "/")[0]) == 59)
81+ else false)
82+ then (16 > size(split(J, "/")[1]))
83+ else false
84+ else false
6785
6886
69-func G (H) = ("nft_" + H)
87+func K (L) = (size(L) == 64)
7088
7189
72-func I (J,K,E,L) = ((((((("sale2nd_info_" + J) + "_") + K) + "_") + E) + "_") + L)
90+func M (N) = ("user_status_" + N)
7391
7492
75-func M (N,K,O,P) = ((((((("offer2nd_" + N) + "_") + K) + "_") + O) + "_") + P)
93+func O (N,P) = ((("art_date_" + P) + "_") + N)
7694
7795
78-func Q (b) = valueOrErrorMessage(getInteger(d, b), "Integer undefine or 0 in oracle")
96+func Q (N,P) = ((("art_name_" + P) + "_") + N)
7997
8098
81-let R = Q(("certification_fee_" + toBase58String(h)))
82-
83-func S (D) = ("artist_agent_" + D)
99+func R (N,P) = ((("art_desc_" + P) + "_") + N)
84100
85101
86-func T (D) = ("artist_agent_secondary_" + D)
102+func S (N,P) = ((("art_display_cid_" + P) + "_") + N)
87103
88104
89-func U (V) = if (!(u))
90- then throw(v)
91- else $Tuple3(toBase58String(V.transactionId), toBase58String(V.caller.bytes), lastBlock.timestamp)
105+func T (N,P) = ((("art_export_hash_" + P) + "_") + N)
92106
93107
94-func W (V) = if ((size(V.payments) == 0))
108+func U (N,P) = ((("art_export_cid_" + P) + "_") + N)
109+
110+
111+func V (N,P) = ((("art_maxmint_" + P) + "_") + N)
112+
113+
114+func W (N,P) = ((("art_signid_" + P) + "_") + N)
115+
116+
117+func X (N,P) = ((("art_issued_" + P) + "_") + N)
118+
119+
120+func Y (N,P) = ((("art_onsale_" + P) + "_") + N)
121+
122+
123+func Z (N,P) = ((("art_licence_hash_" + P) + "_") + N)
124+
125+
126+func aa (N,P) = ((("art_licence_cid_" + P) + "_") + N)
127+
128+
129+func ab (N,P) = ((("art_tags_" + P) + "_") + N)
130+
131+
132+func ac (N,P) = ((("art_type_" + P) + "_") + N)
133+
134+
135+func ad (N,P) = ((("art_note_" + P) + "_") + N)
136+
137+
138+func ae (N,P) = ((("art_crawler_cid_" + P) + "_") + N)
139+
140+
141+func af (N,P) = ((("art_price_" + P) + "_") + N)
142+
143+
144+func ag (N,P) = ((("art_endsale_" + P) + "_") + N)
145+
146+
147+func ah (N,P) = ((("art_assetAccepted_" + P) + "_") + N)
148+
149+
150+func ai (N,P) = ((("art_flag_" + P) + "_") + N)
151+
152+
153+func aj (ak) = ("artist_agent_" + ak)
154+
155+
156+func al (ak) = ("artist_agent_primary_" + ak)
157+
158+
159+func am (N,an) = ((("get_hashbytxidaddr_" + an) + "_") + N)
160+
161+
162+func ao (F) = ("get_owner_by_hash_" + F)
163+
164+
165+func ap (N,aq) = ((("get_artidbysignid_" + aq) + "_") + N)
166+
167+
168+func ar (F,N) = ("get_txid_by_hash_owner_" + toBase58String(sha256_16Kb(toBytes((F + N)))))
169+
170+
171+func as (at,au,av) = if (!(I(at)))
172+ then throw("Wrong Display CID")
173+ else if (!(I(au)))
174+ then throw("Wrong Export CID")
175+ else if (if ((av != ""))
176+ then !(I(av))
177+ else false)
178+ then throw("Wrong Licence CID")
179+ else true
180+
181+
182+func aw (ax,ay) = if (!(K(ax)))
183+ then throw("Export Hash 64 char. max")
184+ else if (!(K(ay)))
185+ then throw("Licence Hash 64 char. max")
186+ else true
187+
188+
189+func az (aA,aB) = if ((size(aA) == 0))
190+ then throw("Field cannot be is empty")
191+ else if ((size(aA) > aB))
192+ then throw((aA + " is too long"))
193+ else true
194+
195+
196+func aC (N) = {
197+ let aD = valueOrElse(getString(g, M(N)), z)
198+ if (if ((aD == z))
199+ then true
200+ else (aD == A))
201+ then "Register this account first with \"Account\" tab"
202+ else if ((aD == x))
203+ then "Account suspended"
204+ else if ((aD == y))
205+ then "Account removed"
206+ else ""
207+ }
208+
209+
210+func aE (av,ay) = {
211+ let J = if ((size(av) == 0))
212+ then t
213+ else av
214+ let L = if ((size(ay) == 0))
215+ then u
216+ else ay
217+ $Tuple2(J, L)
218+ }
219+
220+
221+func aF (N,at,au,aG,ax,aH,aI,aJ,aK) = {
222+ let aL = aC(N)
223+ if ((aL != ""))
224+ then throw(aL)
225+ else if ((size(at) == 0))
226+ then throw("Display CID cannot be empty")
227+ else if (!(as(at, au, aG)))
228+ then throw("Problem with CID")
229+ else if (!(aw(ax, aH)))
230+ then throw("Problem with Hashes")
231+ else if (!(az(aI, 100)))
232+ then throw("100 Char. max name")
233+ else if (!(az(aJ, 1000)))
234+ then throw("1000 Char. max description")
235+ else if ((size(split(aK, ",")) > 5))
236+ then throw("5 tags max.")
237+ else ""
238+ }
239+
240+
241+func aM (aN) = if ((size(aN.payments) == 0))
95242 then throw("No payment attached")
96243 else {
97- let X = value(V.payments[0])
98- let Y = value(X.amount)
99- $Tuple2(X, Y)
244+ let aO = value(aN.payments[0])
245+ let aP = value(aO.amount)
246+ $Tuple2(aO, aP)
100247 }
101248
102249
103-func Z (aa) = if (if (if ((aa.quantity == 1))
104- then (aa.decimals == 0)
105- else false)
106- then (aa.reissuable == false)
107- else false)
108- then (aa.issuer == f)
109- else false
110-
111-
112-func ab (H) = {
113- let aa = value(assetInfo(H))
114- Z(aa)
250+func aQ (aN) = {
251+ let aR = aM(aN)
252+ let aO = aR._1
253+ let aP = aR._2
254+ let aS = if (if (isDefined(aO.assetId))
255+ then (aO.assetId == i)
256+ else false)
257+ then aO.assetId
258+ else throw("Only SIGN token accepted as transaction fee")
259+ if ((aP != B))
260+ then throw(("Payment amount should be " + toString(B)))
261+ else $Tuple2(aP, aS)
115262 }
116263
117264
118-func ac (ad) = if (if (if (if (if ((ad != toBase58String(h)))
119- then (ad != toBase58String(k))
265+func aT (aU,P) = {
266+ let G = getInteger(this, X(aU, P))
267+ if ($isInstanceOf(G, "Int"))
268+ then {
269+ let aV = G
270+ if ((aV != 0))
271+ then true
272+ else false
273+ }
274+ else false
275+ }
276+
277+
278+func aW (aN,aX,aY) = {
279+ let aZ = aM(aN)
280+ let aO = aZ._1
281+ let aP = aZ._2
282+ let aS = if (!(isDefined(aO.assetId)))
283+ then unit
284+ else if (if ((size(aX) > 0))
285+ then (toBase58String(value(aO.assetId)) == aX)
286+ else false)
287+ then aO.assetId
288+ else throw("Wrong asset id")
289+ if (if ((aS == unit))
290+ then (aX != "")
291+ else false)
292+ then throw("Wrong asset id")
293+ else if ((aY != aP))
294+ then throw("Payment don't match")
295+ else $Tuple2(aP, aS)
296+ }
297+
298+
299+func ba (aS) = if (if (if (if (if ((aS != toBase58String(i)))
300+ then (aS != toBase58String(l))
120301 else false)
121- then (ad != "WAVES")
302+ then (aS != "WAVES")
122303 else false)
123- then (ad != toBase58String(i))
304+ then (aS != toBase58String(j))
124305 else false)
125- then (ad != toBase58String(j))
306+ then (aS != toBase58String(k))
126307 else false)
127- then false
308+ then throw("Only SIGN, USDN,USDT or WAVES accepted")
128309 else true
129310
130311
131-func ae (ad) = if ((ad == "WAVES"))
132- then unit
133- else fromBase58String(ad)
312+func bb (aS,bc) = {
313+ let bd = if (c)
314+ then 10
315+ else n("waves_min_sell")
316+ let be = 1000000
317+ let bf = if (c)
318+ then 1
319+ else (B * 2)
320+ if (if (if (if (if (if ((aS == toBase58String(j)))
321+ then (be > bc)
322+ else false)
323+ then (bc != 0)
324+ else false)
325+ then true
326+ else if (if ((aS == toBase58String(k)))
327+ then (be > bc)
328+ else false)
329+ then (bc != 0)
330+ else false)
331+ then true
332+ else if (if ((aS == toBase58String(i)))
333+ then (bf > bc)
334+ else false)
335+ then (bc != 0)
336+ else false)
337+ then true
338+ else if (if (if ((aS == toBase58String(l)))
339+ then true
340+ else (aS == "WAVES"))
341+ then (bd > bc)
342+ else false)
343+ then (bc != 0)
344+ else false)
345+ then throw("Wrong minimum sell price")
346+ else true
347+ }
134348
135349
136-func af (ag) = {
137- let O = a(("current_owner_on_dapp_" + ag))
138- if ((size(O) == 0))
139- then throw("NFT not found")
350+func bg (aS) = if ((aS == "WAVES"))
351+ then unit
352+ else fromBase58String(aS)
353+
354+
355+func bh (bi) = {
356+ let bj = a((bi + "_OPEN"))
357+ if ((bj == ""))
358+ then throw("Bid not found")
140359 else {
141- let ah = a(((("sale2nd_status_" + O) + "_") + ag))
142- if ((ah != "OPEN"))
143- then throw("NFT not for sale")
144- else O
360+ let bk = split(bj, "_")
361+ let bl = parseIntValue(bk[1])
362+ let bm = bg(bk[0])
363+ if ((0 >= bl))
364+ then throw("Wrong amount")
365+ else $Tuple2(bl, bm)
145366 }
146367 }
147368
148369
149-func ai (b) = {
150- let aj = a((b + "_OPEN"))
151- if ((aj == ""))
152- then throw("Offer not found")
370+func bn (aN) = if (!(v))
371+ then throw(w)
372+ else $Tuple3(toBase58String(aN.transactionId), toBase58String(aN.caller.bytes), lastBlock.timestamp)
373+
374+
375+func bo (aN,P,bp,bq,br) = {
376+ let bs = bn(aN)
377+ let bt = bs._1
378+ let N = bs._2
379+ let bu = bs._3
380+ let bv = if (if (if ((toBase58String(aN.caller.bytes) == bp))
381+ then (br != "")
382+ else false)
383+ then (bq != "")
384+ else false)
385+ then true
386+ else false
387+ let bw = o(ag(N, P))
388+ if (if (if ((bw != 0))
389+ then (height >= bw)
390+ else false)
391+ then !(bv)
392+ else false)
393+ then throw("Sale ended.")
153394 else {
154- let ak = split(aj, "_")
155- let ad = ae(ak[2])
156- $Tuple3(ak, ad, aj)
395+ let bx = (toBase58String(aN.caller.bytes) == bp)
396+ let by = o("total_nft_issued")
397+ let D = a(W(bp, P))
398+ let bz = a(Q(bp, P))
399+ if ((bz == ""))
400+ then throw("Art doesn't exist")
401+ else {
402+ let bA = q(Y(bp, P))
403+ let bB = o(X(bp, P))
404+ let aY = if (bx)
405+ then (B * 2)
406+ else o(af(bp, P))
407+ let aX = if (bx)
408+ then toBase58String(i)
409+ else a(ah(bp, P))
410+ let bC = o(V(bp, P))
411+ if (if (if (!(bv))
412+ then !(bx)
413+ else false)
414+ then if (if ((0 >= aY))
415+ then true
416+ else !(bA))
417+ then true
418+ else (0 >= bC)
419+ else false)
420+ then throw("Art not for sale")
421+ else if (if (if (!(bv))
422+ then bx
423+ else false)
424+ then (0 >= bC)
425+ else false)
426+ then throw("Max issuable not set")
427+ else {
428+ let aL = aC(bp)
429+ if (if (bv)
430+ then (aL != "")
431+ else false)
432+ then throw(aL)
433+ else {
434+ let bi = ((((((("bid_" + P) + "_") + bp) + "_") + br) + "_") + bq)
435+ let bD = if (bv)
436+ then bh(bi)
437+ else aW(aN, aX, aY)
438+ let aP = bD._1
439+ let aS = bD._2
440+ let bE = valueOrElse(getString(g, aj(bp)), f)
441+ let bF = valueOrElse(getInteger(g, al(bp)), 0)
442+ let bG = p(bp)
443+ let bH = if ((bG > height))
444+ then 0
445+ else if ((aS == i))
446+ then r
447+ else s
448+ let bI = fraction(aP, bH, 100)
449+ let bJ = if (if (if ((bE != f))
450+ then (bF > 0)
451+ else false)
452+ then (height > bG)
453+ else false)
454+ then fraction(aP, bF, 100)
455+ else 0
456+ let bK = (aP - bI)
457+ if ((bB == bC))
458+ then throw("Art sold out")
459+ else {
460+ let bL = (bB + 1)
461+ let bM = ((((((((((("Creator: " + bp) + ",
462+ ArtID: ") + P) + ",
463+ SignID: ") + D) + ",
464+ Artwork name: ") + bz) + ",
465+ Issue: ") + toString(bL)) + "/") + toString(bC))
466+ let bN = Issue(("SA_" + toString((by + 1))), bM, 1, 0, false)
467+ let bO = calculateAssetId(bN)
468+ let bP = if (if ((bL == bC))
469+ then true
470+ else !(bA))
471+ then false
472+ else true
473+ let bQ = if (if (if ((N == bp))
474+ then (br != "")
475+ else false)
476+ then (bq != "")
477+ else false)
478+ then addressFromStringValue(br)
479+ else aN.caller
480+ let bR = if (!(isDefined(aS)))
481+ then "WAVES"
482+ else toBase58String(value(aS))
483+ let bj = a((bi + "_OPEN"))
484+ let bS = DeleteEntry((bi + "_OPEN"))
485+ let bT = StringEntry((bi + "_CLOSED"), ((bj + "_") + toString(bu)))
486+ let bU = ((((((("art_sold_" + toString(bL)) + "_of_") + toString(bC)) + "_") + P) + "_") + bp)
487+ let bV = if (!(bv))
488+ then ((((((((((N + "_") + toString(bu)) + "_") + bt) + "_") + toString(aY)) + "_") + aX) + "_") + toBase58String(bO))
489+ else ((((((((((toString(bQ) + "_") + toString(bu)) + "_") + bt) + "_") + toString(aP)) + "_") + bR) + "_") + toBase58String(bO))
490+ let bW = StringEntry(bU, bV)
491+ let bX = if ((bJ != 0))
492+ then [ScriptTransfer(Address(fromBase58String(f)), (bI - bJ), aS), ScriptTransfer(Address(fromBase58String(bE)), bJ, aS)]
493+ else [ScriptTransfer(Address(fromBase58String(f)), bI, aS)]
494+ let bY = ([IntegerEntry(X(bp, P), bL), StringEntry(("nft_" + toBase58String(bO)), bU), IntegerEntry("total_nft_issued", (by + 1)), IntegerEntry(ag(bp, P), 0), BooleanEntry(Y(bp, P), bP), bN, ScriptTransfer(Address(fromBase58String(bp)), bK, aS), ScriptTransfer(bQ, 1, bO)] ++ bX)
495+ if (bv)
496+ then [bW, bT, bS] :: bY
497+ else bW :: bY
498+ }
499+ }
500+ }
501+ }
157502 }
158503 }
159504
160505
161-func al (am) = if ((am != q))
162- then (am != r)
163- else false
164-
165-
166-func an (B,H) = {
167- let am = y(F(B, H))
168- if (al(am))
169- then true
170- else throw(("Original Artwork flagged as " + am))
171- }
172-
173-
174-func ao (B) = {
175- let ap = x(A(B))
176- if (containsElement([o, p], ap))
177- then throw(("Original Artist " + ap))
178- else true
179- }
180-
181-
182-func aq (ad) = {
183- let ar = split(y(G(ad)), "_")
184- let as = y(C(ar[6], ar[5]))
185- if (if (!(an(ar[6], ar[5])))
186- then !(ao(ar[6]))
187- else false)
188- then $Tuple4(false, ar[5], ar[6], as)
189- else $Tuple4(true, ar[5], ar[6], as)
190- }
191-
192-
193-func at (Y,ad,ag,L,O,J) = {
194- let au = valueOrElse(getString(g, S(L)), e)
195- let av = valueOrElse(getInteger(g, T(L)), 0)
196- let aw = fraction(Y, m, 100)
197- let ax = fraction(Y, n, 100)
198- let ay = (Y - (aw + ax))
199- let az = if (if ((au != e))
200- then (av > 0)
201- else false)
202- then fraction(Y, av, 100)
203- else 0
204- let aA = if ((az != 0))
205- then [ScriptTransfer(Address(fromBase58String(e)), (aw - az), ad), ScriptTransfer(Address(fromBase58String(au)), az, ad)]
206- else [ScriptTransfer(Address(fromBase58String(e)), aw, ad)]
207- let aB = ScriptTransfer(Address(fromBase58String(L)), ax, ad)
208- let aC = ScriptTransfer(Address(fromBase58String(O)), ay, ad)
209- let aD = ScriptTransfer(Address(fromBase58String(J)), 1, fromBase58String(ag))
210- $Tuple4(aA, aB, aC, aD)
211- }
212-
213-
214-func aE (ad,aF) = {
215- let aG = if (c)
216- then 10
217- else Q("waves_min_sell")
218- let aH = 1000000
219- let aI = if (c)
220- then 1
221- else (R * 2)
222- if (if (if (if (if (if ((ad == toBase58String(i)))
223- then (aH > aF)
224- else false)
225- then (aF != 0)
226- else false)
227- then true
228- else if (if ((ad == toBase58String(j)))
229- then (aH > aF)
230- else false)
231- then (aF != 0)
232- else false)
233- then true
234- else if (if ((ad == toBase58String(h)))
235- then (aI > aF)
236- else false)
237- then (aF != 0)
238- else false)
239- then true
240- else if (if (if ((ad == toBase58String(k)))
241- then true
242- else (ad == "WAVES"))
243- then (aG > aF)
244- else false)
245- then (aF != 0)
246- else false)
247- then false
248- else true
249- }
250-
251-
252-func aJ (V,K) = {
253- let aK = U(V)
254- let H = aK._1
255- let J = aK._2
256- let aL = aK._3
257- let aM = aq(K)
258- let aN = aM._1
259- let E = aM._2
260- let L = aM._3
261- let as = aM._4
262- $Tuple7(H, J, aL, aN, E, L, as)
263- }
264-
265-
266-func aO () = {
267- let aP = z(w)
268- IntegerEntry(w, (aP + 1))
269- }
270-
271-
272-@Callable(aQ)
273-func setConf (b,aR) = {
274- let J = toString(aQ.caller)
275- if (containsElement([l, toString(this)], J))
506+@Callable(bZ)
507+func setConf (b,ca) = {
508+ let N = toString(bZ.caller)
509+ if (containsElement([m, toString(this)], N))
276510 then if (contains(b, "conf_"))
277- then [StringEntry(b, aR)]
511+ then [StringEntry(b, ca)]
278512 else throw("Entries starting with conf_ only")
279513 else throw("You are not allowed to change this")
280514 }
281515
282516
283517
284-@Callable(aQ)
285-func appRunning (aS,aT) = {
286- let J = toString(aQ.caller)
287- let H = toBase58String(aQ.transactionId)
288- if (containsElement([l, toString(this)], J))
289- then [BooleanEntry(s, aS), StringEntry(t, aT)]
290- else throw("You are not allowed to change this")
291- }
292-
293-
294-
295-@Callable(V)
296-func sellNFT (aF,aU) = {
297- let aV = W(V)
298- let X = aV._1
299- let Y = aV._2
300- if ((Y != 1))
301- then throw("No NFT attached")
518+@Callable(aN)
519+func addArtwork (F,D,aI,aJ,aK,cb,at,ax,au,ay,av,cc) = {
520+ let cd = bn(aN)
521+ let P = cd._1
522+ let N = cd._2
523+ let bu = cd._3
524+ if (!(K(F)))
525+ then throw("Hash should be 64 characters maximum")
302526 else {
303- let K = if (if (isDefined(X.assetId))
304- then ab(value(X.assetId))
305- else false)
306- then toBase58String(value(X.assetId))
307- else throw("Only SIGN Art NFT accepted.")
308- let aW = aJ(V, K)
309- let H = aW._1
310- let J = aW._2
311- let aL = aW._3
312- let aN = aW._4
313- let E = aW._5
314- let L = aW._6
315- let as = aW._7
316- if ((size(as) == 0))
317- then throw("Artwork not found on SIGN Art")
318- else if (!(aN))
319- then throw("Not a valid nft")
320- else if (!(ac(aU)))
321- then throw("Only SIGN, USDN, USDT or WAVES accepted")
322- else if (!(aE(aU, aF)))
323- then throw("Wrong minimum sell price")
324- else [StringEntry((I(J, K, E, L) + "_OPEN"), ((((((((((((toString(aL) + "_") + toString(aF)) + "_") + aU) + "_") + K) + "_") + E) + "_") + L) + "_") + H)), StringEntry(((("sale2nd_status_" + J) + "_") + K), "OPEN"), StringEntry(("current_owner_on_dapp_" + K), J)]
325- }
326- }
327-
328-
329-
330-@Callable(V)
331-func updateSalePrice (K,aF,aU) = {
332- let aX = aJ(V, K)
333- let H = aX._1
334- let J = aX._2
335- let aL = aX._3
336- let aN = aX._4
337- let E = aX._5
338- let L = aX._6
339- let as = aX._7
340- if ((size(as) == 0))
341- then throw("Artwork not found on SIGN Art, cancel your sale.")
342- else if (!(aN))
343- then throw("Not a valid nft")
344- else {
345- let O = a(("current_owner_on_dapp_" + K))
346- if ((O != J))
347- then throw("You don't own this NFT")
348- else {
349- let ah = a(((("sale2nd_status_" + J) + "_") + K))
350- if ((ah != "OPEN"))
351- then throw("Sale not active")
352- else if (!(ac(aU)))
353- then throw("Only SIGN, USDN, USDT or WAVES accepted")
354- else if (!(aE(aU, aF)))
355- then throw("Wrong minimum sell price")
356- else {
357- let aY = I(J, K, E, L)
358- let aZ = split(a((aY + "_OPEN")), "_")
359-[StringEntry((aY + "_OPEN"), ((((((((((((aZ[0] + "_") + toString(aF)) + "_") + aU) + "_") + aZ[3]) + "_") + aZ[4]) + "_") + aZ[5]) + "_") + aZ[6]))]
360- }
361- }
362- }
363- }
364-
365-
366-
367-@Callable(V)
368-func cancelSale (K) = {
369- let ba = aJ(V, K)
370- let H = ba._1
371- let J = ba._2
372- let aL = ba._3
373- let aN = ba._4
374- let E = ba._5
375- let L = ba._6
376- let as = ba._7
377- let O = a(("current_owner_on_dapp_" + K))
378- if ((O != J))
379- then throw("You don't own this NFT")
380- else {
381- let ah = a(((("sale2nd_status_" + J) + "_") + K))
382- if ((ah != "OPEN"))
383- then throw("Sale not active")
527+ let ce = aE(av, ay)
528+ let aG = ce._1
529+ let aH = ce._2
530+ let cf = aF(N, at, au, aG, ax, aH, aI, aJ, aK)
531+ if ((cf != ""))
532+ then throw("Something went wrong!")
384533 else {
385- let aY = I(J, K, E, L)
386- let aZ = a((aY + "_OPEN"))
387-[DeleteEntry((aY + "_OPEN")), DeleteEntry(((("sale2nd_status_" + J) + "_") + K)), DeleteEntry(("current_owner_on_dapp_" + K)), StringEntry((((aY + "_") + H) + "_CANCELLED"), ((((aZ + "_CANCELLED_") + toString(aL)) + "_") + H)), ScriptTransfer(Address(fromBase58String(J)), 1, fromBase58String(K))]
388- }
389- }
390- }
391-
392-
393-
394-@Callable(V)
395-func buyNFT (K) = {
396- let bb = aJ(V, K)
397- let H = bb._1
398- let J = bb._2
399- let aL = bb._3
400- let aN = bb._4
401- let E = bb._5
402- let L = bb._6
403- let as = bb._7
404- if ((size(as) == 0))
405- then throw("Artwork not found on SIGN Art, cancel your sale.")
406- else if (!(aN))
407- then throw("Not a valid nft")
408- else {
409- let O = af(K)
410- let aY = I(O, K, E, L)
411- let aZ = a((aY + "_OPEN"))
412- if ((size(aZ) == 0))
413- then throw("Sale Not found!")
414- else {
415- let bc = split(aZ, "_")
416- if ((parseInt(bc[1]) == 0))
417- then throw("Offer only")
418- else {
419- let bd = W(V)
420- let X = bd._1
421- let Y = bd._2
422- let be = if (isDefined(X.assetId))
423- then toBase58String(value(X.assetId))
424- else ""
425- if (if ((bc[1] != toString(Y)))
426- then true
427- else (bc[2] != be))
428- then throw("Payment infos don't match.")
429- else {
430- let bf = at(Y, X.assetId, K, L, O, J)
431- let aA = bf._1
432- let aB = bf._2
433- let aC = bf._3
434- let aD = bf._4
435- ([DeleteEntry((aY + "_OPEN")), DeleteEntry(((("sale2nd_status_" + O) + "_") + K)), DeleteEntry(("current_owner_on_dapp_" + K)), StringEntry((((aY + "_") + H) + "_CLOSED"), ((((((aZ + "_CLOSED_") + toString(aL)) + "_") + H) + "_") + J)), aO(), aB, aC, aD] ++ aA)
436- }
437- }
438- }
439- }
440- }
441-
442-
443-
444-@Callable(V)
445-func setOffer (K) = {
446- let bg = aJ(V, K)
447- let H = bg._1
448- let N = bg._2
449- let aL = bg._3
450- let aN = bg._4
451- let E = bg._5
452- let L = bg._6
453- let as = bg._7
454- if (!(aN))
455- then throw("Not a valid nft")
456- else {
457- let bh = W(V)
458- let X = bh._1
459- let Y = bh._2
460- let ad = if (!(isDefined(X.assetId)))
461- then "WAVES"
462- else toBase58String(value(X.assetId))
463- if (!(ac(ad)))
464- then throw("asset not accepted")
465- else if ((Y == 0))
466- then throw("Offer of 0 not allowed")
467- else if (!(aE(ad, Y)))
468- then throw("Wrong minimum sell price")
534+ let cg = aQ(aN)
535+ let aP = cg._1
536+ let aS = cg._2
537+ if (!(isDefined(aP)))
538+ then throw("Something went wrong")
469539 else {
470- let O = af(K)
471-[StringEntry((M(N, K, O, H) + "_OPEN"), ((((((((((((((toString(aL) + "_") + toString(Y)) + "_") + ad) + "_") + K) + "_") + E) + "_") + L) + "_") + N) + "_") + H))]
472- }
473- }
474- }
475-
476-
477-
478-@Callable(V)
479-func acceptOffer (K,P,N) = {
480- let bi = aJ(V, K)
481- let H = bi._1
482- let J = bi._2
483- let aL = bi._3
484- let aN = bi._4
485- let E = bi._5
486- let L = bi._6
487- let as = bi._7
488- if (!(aN))
489- then throw("Not a valid nft")
490- else {
491- let O = af(K)
492- if ((J != O))
493- then throw("Only sale owner can accept offer")
494- else {
495- let bj = M(N, K, O, P)
496- let bk = ai(bj)
497- let ak = bk._1
498- let ad = bk._2
499- let aj = bk._3
500- let aY = I(O, K, E, L)
501- let aZ = a((aY + "_OPEN"))
502- if ((size(aZ) == 0))
503- then throw("Sale Not found!")
504- else {
505- let Y = value(parseInt(ak[1]))
506- let bl = at(Y, ad, K, L, O, ak[6])
507- let aA = bl._1
508- let aB = bl._2
509- let aC = bl._3
510- let aD = bl._4
511- let bm = if (isDefined(ad))
512- then toBase58String(value(ad))
513- else "WAVES"
514- ([DeleteEntry((aY + "_OPEN")), DeleteEntry((bj + "_OPEN")), DeleteEntry(((("sale2nd_status_" + O) + "_") + K)), DeleteEntry(("current_owner_on_dapp_" + K)), StringEntry((bj + "_CLOSED"), ((((aj + "_CLOSED_") + toString(aL)) + "_") + H)), StringEntry((((aY + "_") + H) + "_CLOSED"), ((((((((((aZ + "_CLOSED-OFFER_") + toString(aL)) + "_") + H) + "_") + N) + "_") + toString(Y)) + "_") + bm)), aO(), aB, aC, aD] ++ aA)
540+ let ch = a(ar(F, N))
541+ if ((ch != ""))
542+ then throw("You already added it")
543+ else {
544+ let ci = a(ao(F))
545+ if ((ci != ""))
546+ then throw("Hash already registered")
547+ else {
548+ let cj = C(D, N, F)
549+ if (!(cj))
550+ then throw("Sign Certificate not found for this address.")
551+ else [StringEntry(ao(F), N), StringEntry(ar(F, N), P), IntegerEntry(O(N, P), bu), StringEntry(Q(N, P), aI), StringEntry(R(N, P), aJ), StringEntry(S(N, P), at), StringEntry(U(N, P), au), StringEntry(T(N, P), ax), StringEntry(Z(N, P), aH), StringEntry(aa(N, P), aG), StringEntry(ac(N, P), cb), StringEntry(ab(N, P), aK), IntegerEntry(V(N, P), 0), StringEntry(W(N, P), D), IntegerEntry(X(N, P), 0), BooleanEntry(Y(N, P), false), StringEntry(ap(N, D), P), StringEntry(am(N, P), F), StringEntry(ae(N, P), cc), ScriptTransfer(Address(fromBase58String(f)), aP, aS)]
552+ }
553+ }
515554 }
516555 }
517556 }
518557 }
519558
520559
521560
522-@Callable(V)
523-func cancelOffer (K,P,N,O) = {
524- let bn = U(V)
525- let H = bn._1
526- let J = bn._2
527- let aL = bn._3
528- if (if ((J != N))
529- then (J != O)
561+@Callable(aN)
562+func updateArtwork (an,aI,aJ,aK,cb,at,ax,au,ay,av,cc) = if (!(v))
563+ then throw(w)
564+ else {
565+ let N = toBase58String(aN.caller.bytes)
566+ let ck = aE(av, ay)
567+ let aG = ck._1
568+ let aH = ck._2
569+ let cf = aF(N, at, au, aG, ax, aH, aI, aJ, aK)
570+ if ((cf != ""))
571+ then throw("Something went wrong!")
572+ else {
573+ let ch = a(Q(N, an))
574+ if ((ch == ""))
575+ then throw("Entry not found")
576+ else {
577+ let cl = a(ai(N, an))
578+ if ((cl == "ILLEGAL"))
579+ then throw("Cannot update ILLEGAL artwork")
580+ else if (!(aT(N, an)))
581+ then [StringEntry(Q(N, an), aI), StringEntry(R(N, an), aJ), StringEntry(S(N, an), at), StringEntry(U(N, an), au), StringEntry(T(N, an), ax), StringEntry(aa(N, an), aG), StringEntry(Z(N, an), aH), StringEntry(ab(N, an), aK), StringEntry(ac(N, an), cb), StringEntry(ae(N, an), cc)]
582+ else throw("Already minted")
583+ }
584+ }
585+ }
586+
587+
588+
589+@Callable(aN)
590+func flagArtwork (P,cm,cl,cn) = {
591+ let co = bn(aN)
592+ let bt = co._1
593+ let N = co._2
594+ if (containsElement([m, toString(this)], N))
595+ then if (containsElement(["CONSENT", "", "CHANGE_REQUIRED", "FLAGGED", "ILLEGAL"], cl))
596+ then [StringEntry(ai(cm, P), cl), StringEntry(ad(cm, P), cn)]
597+ else throw(("Unknow status " + cl))
598+ else throw("You are not allowed")
599+ }
600+
601+
602+
603+@Callable(aN)
604+func deleteArtwork (P,cm) = {
605+ let cp = bn(aN)
606+ let bt = cp._1
607+ let N = cp._2
608+ let aU = if (containsElement([m, toString(this)], N))
609+ then cm
610+ else N
611+ let ch = valueOrErrorMessage(a(Q(aU, P)), "No art matching for this address")
612+ if ((ch == ""))
613+ then throw("No art matching for this address")
614+ else {
615+ let F = a(am(aU, P))
616+ if ((F == ""))
617+ then throw("No art hash matching for this address")
618+ else {
619+ let D = a(W(aU, P))
620+ if ((D == ""))
621+ then throw("No SIGN ID matching")
622+ else {
623+ let cq = [DeleteEntry(O(aU, P)), DeleteEntry(Q(aU, P)), DeleteEntry(R(aU, P)), DeleteEntry(S(aU, P)), DeleteEntry(U(aU, P)), DeleteEntry(T(aU, P)), DeleteEntry(Z(aU, P)), DeleteEntry(aa(aU, P)), DeleteEntry(ac(aU, P)), DeleteEntry(ab(aU, P)), DeleteEntry(V(aU, P)), DeleteEntry(W(aU, P)), DeleteEntry(X(aU, P)), DeleteEntry(Y(aU, P)), DeleteEntry(ai(aU, P)), DeleteEntry(af(aU, P)), DeleteEntry(ah(aU, P)), DeleteEntry(ao(F)), DeleteEntry(ap(aU, D)), DeleteEntry(ar(F, aU)), DeleteEntry(ag(aU, P)), DeleteEntry(ad(aU, P)), DeleteEntry(ae(aU, P))]
624+ if (!(aT(aU, P)))
625+ then if (!(v))
626+ then throw(w)
627+ else cq
628+ else if (containsElement([m, toString(this)], N))
629+ then cq
630+ else throw("Art already minted, you cannot delete it")
631+ }
632+ }
633+ }
634+ }
635+
636+
637+
638+@Callable(aN)
639+func sellArtwork (P,bc,cr,aS,bw) = {
640+ let cs = bn(aN)
641+ let bt = cs._1
642+ let N = cs._2
643+ let bz = a(Q(N, P))
644+ if ((bz == ""))
645+ then throw("This art doesn't match your account")
646+ else {
647+ let cl = a(ai(N, P))
648+ if (containsElement(["CHANGE_REQUIRED", "FLAGGED", "ILLEGAL"], cl))
649+ then throw("Flagged artwork")
650+ else {
651+ let ct = o(("current_bidamount_" + P))
652+ if ((0 > bw))
653+ then throw("Negative end")
654+ else if (if ((bw > 0))
655+ then if ((cr != 1))
656+ then true
657+ else (bc != 0)
658+ else false)
659+ then throw("Timed offer only allowed for unique edition and offer only")
660+ else {
661+ let cu = if ((bw == 0))
662+ then 0
663+ else height
664+ if (!(ba(aS)))
665+ then throw("Something went wrong!")
666+ else if (!(bb(aS, bc)))
667+ then throw("Something went wrong!")
668+ else {
669+ let aL = aC(N)
670+ if ((aL != ""))
671+ then throw(aL)
672+ else {
673+ let bB = o(X(N, P))
674+ let bC = o(V(N, P))
675+ if ((cr > 100))
676+ then throw("100 editions max per artwork")
677+ else if (if ((bB != 0))
678+ then (bB == bC)
679+ else false)
680+ then throw("Max edition reached.")
681+ else if (if ((bB > 0))
682+ then (bC != cr)
683+ else false)
684+ then throw("Cannot change maximum issuable anymore")
685+ else if (if ((ct > 0))
686+ then (bC != cr)
687+ else false)
688+ then throw("Cannot change maximum issuable with active orders")
689+ else {
690+ let bP = if (if ((bc > 0))
691+ then (cr > 0)
692+ else false)
693+ then true
694+ else false
695+[BooleanEntry(Y(N, P), bP), IntegerEntry(af(N, P), bc), IntegerEntry(V(N, P), cr), StringEntry(ah(N, P), aS), IntegerEntry(ag(N, P), (cu + bw))]
696+ }
697+ }
698+ }
699+ }
700+ }
701+ }
702+ }
703+
704+
705+
706+@Callable(aN)
707+func buyArtwork (P,bp) = bo(aN, P, bp, "", "")
708+
709+
710+
711+@Callable(aN)
712+func setBid (P,bp) = {
713+ let cv = bn(aN)
714+ let bt = cv._1
715+ let N = cv._2
716+ let bu = cv._3
717+ let cw = aM(aN)
718+ let aO = cw._1
719+ let aP = cw._2
720+ let aS = if (!(isDefined(aO.assetId)))
721+ then "WAVES"
722+ else toBase58String(value(aO.assetId))
723+ let bw = o(ag(bp, P))
724+ if (if ((bw != 0))
725+ then (height >= bw)
530726 else false)
531- then throw("You cannot cancel this offer.")
727+ then throw("Sale ended.")
532728 else {
533- let bj = M(N, K, O, P)
534- let bo = ai(bj)
535- let ak = bo._1
536- let ad = bo._2
537- let aj = bo._3
538-[DeleteEntry((bj + "_OPEN")), StringEntry((bj + "_CANCELLED"), ((((aj + "_CANCELLED_") + toString(aL)) + "_") + H)), ScriptTransfer(Address(fromBase58String(J)), parseIntValue(ak[1]), ad)]
729+ let ct = o(("current_bidamount_" + P))
730+ if (!(ba(aS)))
731+ then throw("asset not accepted")
732+ else if (!(bb(aS, aP)))
733+ then throw("Wrong min sell")
734+ else {
735+ let bB = o(X(bp, P))
736+ let bC = o(V(bp, P))
737+ if ((0 >= bC))
738+ then throw("No max edition set for this artwork")
739+ else if ((bB >= bC))
740+ then throw("Sold out, you cannot bid")
741+ else [StringEntry((((((((("bid_" + P) + "_") + bp) + "_") + N) + "_") + bt) + "_OPEN"), ((((aS + "_") + toString(aP)) + "_") + toString(bu))), IntegerEntry(("current_bidamount_" + P), (ct + 1))]
742+ }
743+ }
744+ }
745+
746+
747+
748+@Callable(aN)
749+func acceptBid (P,bp,bq,br) = {
750+ let N = toBase58String(aN.caller.bytes)
751+ if ((N != bp))
752+ then throw("You cannot do this action")
753+ else bo(aN, P, bp, bq, br)
754+ }
755+
756+
757+
758+@Callable(aN)
759+func cancelBid (P,bp,bq,br) = {
760+ let cx = bn(aN)
761+ let bt = cx._1
762+ let N = cx._2
763+ let bu = cx._3
764+ if (if ((N != br))
765+ then (N != bp)
766+ else false)
767+ then throw("You cannot do this action")
768+ else {
769+ let cy = if ((N == bp))
770+ then br
771+ else N
772+ let ct = o(("current_bidamount_" + P))
773+ let bi = ((((((("bid_" + P) + "_") + bp) + "_") + br) + "_") + bq)
774+ let bj = a((bi + "_OPEN"))
775+ if ((bj == ""))
776+ then throw("Bid not found")
777+ else {
778+ let bk = split(bj, "_")
779+ let aS = bg(bk[0])
780+ let cz = "CANCELED"
781+[DeleteEntry((bi + "_OPEN")), StringEntry(((bi + "_") + cz), ((bj + "_") + toString(bu))), IntegerEntry(("current_bidamount_" + P), (ct - 1)), ScriptTransfer(Address(fromBase58String(cy)), parseIntValue(bk[1]), aS)]
782+ }
539783 }
540784 }
541785
542786

github/deemru/w8io/169f3d6 
99.36 ms