tx · 5HtetvPxVF4qncRXZvhm9D3z1uCBUy7ehSNoELQHYnro

3N5yarEiTQccnnuerogYT3BxM5Zc5bRgDZy:  -0.04000000 Waves

2022.08.05 06:28 [2170645] smart account 3N5yarEiTQccnnuerogYT3BxM5Zc5bRgDZy > SELF 0.00000000 Waves

{ "type": 13, "id": "5HtetvPxVF4qncRXZvhm9D3z1uCBUy7ehSNoELQHYnro", "fee": 4000000, "feeAssetId": null, "timestamp": 1659670026130, "version": 1, "sender": "3N5yarEiTQccnnuerogYT3BxM5Zc5bRgDZy", "senderPublicKey": "FK9j3YFWVChXKESTn33fMZz1JseCNMMqHhfB7smxJo4e", "proofs": [ "51M6nNDFsdbbDWTTQxSD71RSC6QsQDRSyivLJSuQZwHKHwnsKZKhwwv8vqTCVfEXeXeUgUnAUjd6B9FxKXFWVMi3" ], "script": "base64:BgIlCAISBQoDAQgIEgASABIDCgEBEgASABIAEgMKAQgSBAoCCAESAE0ACXNlcGFyYXRvcgICX18AA1NFUAICX18ABU1VTFQ2AMCEPQAFTVVMVDgAgMLXLwAGTVVMVFg2CQC2AgEFBU1VTFQ2AAZNVUxUWDgJALYCAQUFTVVMVDgAB01VTFRYMTgJALYCAQCAgJC7utat8A0ACldBVkVTSURTVFICBVdBVkVTAAdXQVZFU0lECQDZBAEFCldBVkVTSURTVFIAGUlkeENvbnRyb2xDZmdOZXV0cmlub0RhcHAAAQAYSWR4Q29udHJvbENmZ0F1Y3Rpb25EYXBwAAIAFElkeENvbnRyb2xDZmdScGREYXBwAAMAFUlkeENvbnRyb2xDZmdNYXRoRGFwcAAEABxJZHhDb250cm9sQ2ZnTGlxdWlkYXRpb25EYXBwAAUAFUlkeENvbnRyb2xDZmdSZXN0RGFwcAAGAB1JZHhDb250cm9sQ2ZnTm9kZVJlZ2lzdHJ5RGFwcAAHABxJZHhDb250cm9sQ2ZnTnNidFN0YWtpbmdEYXBwAAgAGUlkeENvbnRyb2xDZmdNZWRpYXRvckRhcHAACQAcSWR4Q29udHJvbENmZ1N1cmZTdGFraW5nRGFwcAAKACBJZHhDb250cm9sQ2ZnR25zYnRDb250cm9sbGVyRGFwcAALAQ9nZXRTdHJpbmdPckZhaWwCB2FkZHJlc3MDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUHYWRkcmVzcwUDa2V5CQCsAgIJAKwCAgkArAICCQCsAgICCm1hbmRhdG9yeSAJAKUIAQUHYWRkcmVzcwIBLgUDa2V5Ag8gaXMgbm90IGRlZmluZWQBEWtleUNvbnRyb2xBZGRyZXNzAAIcJXMlc19fY29uZmlnX19jb250cm9sQWRkcmVzcwENa2V5Q29udHJvbENmZwACESVzX19jb250cm9sQ29uZmlnARRyZWFkQ29udHJvbENmZ09yRmFpbAEHY29udHJvbAkAtQkCCQEPZ2V0U3RyaW5nT3JGYWlsAgUHY29udHJvbAkBDWtleUNvbnRyb2xDZmcABQNTRVABGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIKY29udHJvbENmZwNpZHgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFCmNvbnRyb2xDZmcFA2lkeAkArAICAi1Db250cm9sIGNmZyBkb2Vzbid0IGNvbnRhaW4gYWRkcmVzcyBhdCBpbmRleCAJAKQDAQUDaWR4AA9jb250cm9sQ29udHJhY3QJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkBEWtleUNvbnRyb2xBZGRyZXNzAAIjM040TlM3ZDRKbzlhNkYxNExpRlVLS1lWZFVra2YyZVA0WngACmNvbnRyb2xDZmcJARRyZWFkQ29udHJvbENmZ09yRmFpbAEFD2NvbnRyb2xDb250cmFjdAAMbWF0aENvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUKY29udHJvbENmZwUVSWR4Q29udHJvbENmZ01hdGhEYXBwABBuZXV0cmlub0NvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUKY29udHJvbENmZwUZSWR4Q29udHJvbENmZ05ldXRyaW5vRGFwcAAPYXVjdGlvbkNvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUKY29udHJvbENmZwUYSWR4Q29udHJvbENmZ0F1Y3Rpb25EYXBwAQxrZXlCb25kQXNzZXQAAg1ib25kX2Fzc2V0X2lkARlrZXlBdWN0aW9uQ29udHJhY3RBZGRyZXNzAAIQYXVjdGlvbl9jb250cmFjdAEQa2V5TWluTG9ja0Ftb3VudAACESVzX19taW5Mb2NrQW1vdW50ARBrZXlTdGFrZWRBc3NldElkAAIRJXNfX3N0YWtlZEFzc2V0SWQBFmtleUxvY2tQYXJhbVVzZXJBbW91bnQBC3VzZXJBZGRyZXNzCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAICC3BhcmFtQnlVc2VyCQDMCAIJAKUIAQULdXNlckFkZHJlc3MJAMwIAgIGYW1vdW50BQNuaWwFCXNlcGFyYXRvcgEWa2V5TG9ja1BhcmFtU3RhcnRCbG9jawELdXNlckFkZHJlc3MJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgILcGFyYW1CeVVzZXIJAMwIAgkApQgBBQt1c2VyQWRkcmVzcwkAzAgCAgVzdGFydAUDbmlsBQlzZXBhcmF0b3IBJmtleUxvY2tQYXJhbVZvdGluZ1Bvd2VyRWZmZWN0aXZlSGVpZ2h0AQt1c2VyQWRkcmVzcwkAuQkCCQDMCAICBiVzJXMlcwkAzAgCAgtwYXJhbUJ5VXNlcgkAzAgCCQClCAEFC3VzZXJBZGRyZXNzCQDMCAICEXZwRWZmZWN0aXZlSGVpZ2h0BQNuaWwFCXNlcGFyYXRvcgEQa2V5SGlzdG9yeVJlY29yZAMEdHlwZQt1c2VyQWRkcmVzcwR0eElkCQC5CQIJAMwIAgIIJXMlcyVzJXMJAMwIAgIHaGlzdG9yeQkAzAgCBQR0eXBlCQDMCAIJAKUIAQULdXNlckFkZHJlc3MJAMwIAgkA2AQBBQR0eElkBQNuaWwFCXNlcGFyYXRvcgEXa2V5TG9ja1BhcmFtVG90YWxBbW91bnQACQC5CQIJAMwIAgIEJXMlcwkAzAgCAgVzdGF0cwkAzAgCAhFhY3RpdmVUb3RhbExvY2tlZAUDbmlsBQlzZXBhcmF0b3IBEmtleVN0YXRzTG9ja3NDb3VudAAJALkJAgkAzAgCAgQlcyVzCQDMCAICBXN0YXRzCQDMCAICCmxvY2tzQ291bnQFA25pbAUJc2VwYXJhdG9yARJrZXlTdGF0c1VzZXJzQ291bnQACQC5CQIJAMwIAgIEJXMlcwkAzAgCAgVzdGF0cwkAzAgCAhBhY3RpdmVVc2Vyc0NvdW50BQNuaWwFCXNlcGFyYXRvcgENa2V5TmV4dFBlcmlvZAACDiVzX19uZXh0UGVyaW9kARhrZXlTdXBwb3J0ZWRSZXdhcmRBc3NldHMAAhVzdXBwb3J0ZWRSZXdhcmRBc3NldHMBEWtleURlcG9zaXROdW1MYXN0AAkAuQkCCQDMCAICBiVzJXMlcwkAzAgCAgNkZXAJAMwIAgIHbGFzdE51bQUDbmlsBQlzZXBhcmF0b3IBG2tleVVzZXJSZXdhcmRGcm9tRGVwb3NpdE51bQELdXNlckFkZHJlc3MJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgIRdXNlclJ3ZEZyb21EZXBOdW0JAMwIAgULdXNlckFkZHJlc3MFA25pbAUJc2VwYXJhdG9yARVrZXlSZXdhcmRQZXJOc2J0U3VtQXQCCmRlcG9zaXROdW0DdGtuCQC5CQIJAMwIAgIEJXMlZAkAzAgCAhVyd2RQZXJOc2J0U3VtQnlEZXBOdW0JAMwIAgkApAMBBQpkZXBvc2l0TnVtCQDMCAIFA3RrbgUDbmlsBQlzZXBhcmF0b3IBCWtleVJld2FyZAILdXNlckFkZHJlc3MDdGtuCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAICA3J3ZAkAzAgCBQt1c2VyQWRkcmVzcwkAzAgCBQN0a24FA25pbAUJc2VwYXJhdG9yAQprZXlDbGFpbWVkAgt1c2VyQWRkcmVzcwN0a24JALkJAgkAzAgCAgYlcyVzJXMJAMwIAgIDY2xtCQDMCAIFC3VzZXJBZGRyZXNzCQDMCAIFA3RrbgUDbmlsBQlzZXBhcmF0b3IBF2tleU5vdERpc3RyaWJ1dGVkUmV3YXJkAQN0a24JALkJAgkAzAgCAgQlcyVzCQDMCAICDm5vdERpc3RyaWJ1dGVkCQDMCAIFA3RrbgUDbmlsBQlzZXBhcmF0b3IBBXRvWDE4AgdvcmlnVmFsCG9yaWdNdWx0CQC8AgMJALYCAQUHb3JpZ1ZhbAUHTVVMVFgxOAUIb3JpZ011bHQBDGdldEludE9yWmVybwEDa2V5CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFA2tleQAAAQxnZXRJbnRPckVsc2UCA2tleQpkZWZhdWx0VmFsCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFA2tleQUKZGVmYXVsdFZhbAEMZ2V0SW50T3JGYWlsAQNrZXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQR0aGlzBQNrZXkJAKwCAgkArAICAg9NYW5kYXRvcnkgdGhpcy4FA2tleQIPIGlzIG5vdCBkZWZpbmVkAQxnZXRTdHJPckVsc2UCA2tleQpkZWZhdWx0VmFsCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFA2tleQUKZGVmYXVsdFZhbAEPdG9BZGRyZXNzT3JGYWlsAQphZGRyZXNzU3RyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQUKYWRkcmVzc1N0cgkArAICAiFjb3VsZG4ndCBwYXJzZSBwYXNzZWQgYWRkcmVzc1N0cj0FCmFkZHJlc3NTdHIBC3RvQXNzZXRWZWN0AQhhc3NldFN0cgMJAAACBQhhc3NldFN0cgUKV0FWRVNJRFNUUgUEdW5pdAkA2QQBBQhhc3NldFN0cgEFYXNJbnQBA3ZhbAQHJG1hdGNoMAUDdmFsAwkAAQIFByRtYXRjaDACA0ludAQGdmFsSW50BQckbWF0Y2gwBQZ2YWxJbnQJAAIBAhVmYWlsIHRvIGNhc3QgaW50byBJbnQBE2Zvcm1hdEhpc3RvcnlSZWNvcmQECW9sZEFtb3VudAhvbGRTdGFydAluZXdBbW91bnQIbmV3U3RhcnQJALkJAgkAzAgCAgwlZCVkJWQlZCVkJWQJAMwIAgkApAMBCAUJbGFzdEJsb2NrBmhlaWdodAkAzAgCCQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAKQDAQUJb2xkQW1vdW50CQDMCAIJAKQDAQUIb2xkU3RhcnQJAMwIAgkApAMBBQluZXdBbW91bnQJAMwIAgkApAMBBQhuZXdTdGFydAUDbmlsBQlzZXBhcmF0b3IBGGZvcm1hdENsYWltSGlzdG9yeVJlY29yZAIEdXNlcg5jbGFpbWVkUmV3YXJkcwkAuQkCCQDMCAICCCVzJWQlZCVzCQDMCAIFBHVzZXIJAMwIAgkApAMBCAUJbGFzdEJsb2NrBmhlaWdodAkAzAgCCQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIFDmNsYWltZWRSZXdhcmRzBQNuaWwFCXNlcGFyYXRvcgESSGlzdG9yeVJlY29yZEVudHJ5BwR0eXBlC3VzZXJBZGRyZXNzBHR4SWQJb2xkQW1vdW50CG9sZFN0YXJ0CW5ld0Ftb3VudAhuZXdTdGFydAkBC1N0cmluZ0VudHJ5AgkBEGtleUhpc3RvcnlSZWNvcmQDBQR0eXBlBQt1c2VyQWRkcmVzcwUEdHhJZAkBE2Zvcm1hdEhpc3RvcnlSZWNvcmQEBQlvbGRBbW91bnQFCG9sZFN0YXJ0BQluZXdBbW91bnQFCG5ld1N0YXJ0ARFDbGFpbUhpc3RvcnlFbnRyeQMLdXNlckFkZHJlc3MEdHhJZA5jbGFpbWVkUmV3YXJkcwkBC1N0cmluZ0VudHJ5AgkBEGtleUhpc3RvcnlSZWNvcmQDAgVjbGFpbQULdXNlckFkZHJlc3MFBHR4SWQJARhmb3JtYXRDbGFpbUhpc3RvcnlSZWNvcmQCCQClCAEFC3VzZXJBZGRyZXNzBQ5jbGFpbWVkUmV3YXJkcwELU3RhdHNSZXN1bHQDDnRvdGFsTG9ja2VkSW5jDGxvY2tDb3VudEluYw11c2Vyc0NvdW50SW5jBApsb2Nrc0NvdW50CQEMZ2V0SW50T3JaZXJvAQkBEmtleVN0YXRzTG9ja3NDb3VudAAECnVzZXJzQ291bnQJAQxnZXRJbnRPclplcm8BCQESa2V5U3RhdHNVc2Vyc0NvdW50AAQLdG90YWxBbW91bnQJAQxnZXRJbnRPclplcm8BCQEXa2V5TG9ja1BhcmFtVG90YWxBbW91bnQABA50b3RhbEFtb3VudE5ldwkAZAIFC3RvdGFsQW1vdW50BQ50b3RhbExvY2tlZEluYwkAlQoDCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQESa2V5U3RhdHNMb2Nrc0NvdW50AAkAZAIFCmxvY2tzQ291bnQFDGxvY2tDb3VudEluYwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEmtleVN0YXRzVXNlcnNDb3VudAAJAGQCBQp1c2Vyc0NvdW50BQ11c2Vyc0NvdW50SW5jCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEXa2V5TG9ja1BhcmFtVG90YWxBbW91bnQABQ50b3RhbEFtb3VudE5ldwUDbmlsBQt0b3RhbEFtb3VudAUOdG90YWxBbW91bnROZXcBD0xvY2tQYXJhbXNFbnRyeQMLdXNlckFkZHJlc3MGYW1vdW50GnZvdGluZ1Bvd2VyRWZmZWN0aXZlSGVpZ2h0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5TG9ja1BhcmFtVXNlckFtb3VudAEFC3VzZXJBZGRyZXNzBQZhbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJARZrZXlMb2NrUGFyYW1TdGFydEJsb2NrAQULdXNlckFkZHJlc3MFGnZvdGluZ1Bvd2VyRWZmZWN0aXZlSGVpZ2h0BQNuaWwBD2dldFBhcmFtc09yRmFpbAAJAJQKAgkA2QQBCQEPZ2V0U3RyaW5nT3JGYWlsAgUEdGhpcwkBEGtleVN0YWtlZEFzc2V0SWQACQEMZ2V0SW50T3JGYWlsAQkBEGtleU1pbkxvY2tBbW91bnQAAQxpc0FjdGl2ZVVzZXIBC3VzZXJBZGRyZXNzCQBmAgkBDGdldEludE9yRWxzZQIJARZrZXlMb2NrUGFyYW1Vc2VyQW1vdW50AQULdXNlckFkZHJlc3MAAAAAARNnZXRVc2VyUGFyYW1zT3JVbml0AQt1c2VyQWRkcmVzcwMJAQxpc0FjdGl2ZVVzZXIBBQt1c2VyQWRkcmVzcwkAlQoDBwkBDGdldEludE9yRmFpbAEJARZrZXlMb2NrUGFyYW1Vc2VyQW1vdW50AQULdXNlckFkZHJlc3MJAQxnZXRJbnRPckZhaWwBCQEWa2V5TG9ja1BhcmFtU3RhcnRCbG9jawEFC3VzZXJBZGRyZXNzBQR1bml0ARNnZXRVc2VyUGFyYW1zT3JGYWlsAQt1c2VyQWRkcmVzcwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQETZ2V0VXNlclBhcmFtc09yVW5pdAEFC3VzZXJBZGRyZXNzCQCsAgIJAKwCAgIFVXNlciAJAKUIAQULdXNlckFkZHJlc3MCDyBpcyBub3QgZGVmaW5lZAASc3VwcG9ydGVkQXNzZXRzU3RyCQEMZ2V0U3RyT3JFbHNlAgkBGGtleVN1cHBvcnRlZFJld2FyZEFzc2V0cwACAAATc3VwcG9ydGVkQXNzZXRzTGlzdAkAtQkCBRJzdXBwb3J0ZWRBc3NldHNTdHICAV8BCmNhbGNSZXdhcmQFC3VzZXJBZGRyZXNzB2Fzc2V0SWQNc3Rha2VkQW1vdW50WA5kZXBvc2l0TnVtVXNlcg5kZXBvc2l0TnVtTGFzdAQXcmV3YXJkUGVyTnNidFN1bUxhc3RLRVkJARVrZXlSZXdhcmRQZXJOc2J0U3VtQXQCBQ5kZXBvc2l0TnVtTGFzdAUHYXNzZXRJZAQKc3VtTGFzdFgxOAkApwMBCQEMZ2V0U3RyT3JFbHNlAgkBFWtleVJld2FyZFBlck5zYnRTdW1BdAIFDmRlcG9zaXROdW1MYXN0BQdhc3NldElkAgEwBApzdW1Vc2VyWDE4CQCnAwEJAQxnZXRTdHJPckVsc2UCCQEVa2V5UmV3YXJkUGVyTnNidFN1bUF0AgUOZGVwb3NpdE51bVVzZXIFB2Fzc2V0SWQCATAEEXJld2FyZER5bmFtaWNQYXJ0CQCgAwEJALwCAwkAuAICBQpzdW1MYXN0WDE4BQpzdW1Vc2VyWDE4BQ1zdGFrZWRBbW91bnRYBQdNVUxUWDE4BBNyZXdhcmRDYWNoZWRQYXJ0S0VZCQEJa2V5UmV3YXJkAgULdXNlckFkZHJlc3MFB2Fzc2V0SWQEEHJld2FyZENhY2hlZFBhcnQJAQxnZXRJbnRPckVsc2UCBRNyZXdhcmRDYWNoZWRQYXJ0S0VZAAAJAJYKBAkAZAIFEHJld2FyZENhY2hlZFBhcnQFEXJld2FyZER5bmFtaWNQYXJ0BRByZXdhcmRDYWNoZWRQYXJ0BRFyZXdhcmREeW5hbWljUGFydAUTcmV3YXJkQ2FjaGVkUGFydEtFWQENUmV3YXJkRW50cmllcwMJaXNOZXdVc2VyC3VzZXJBZGRyZXNzDHN0YWtlZEFtb3VudAQNc3Rha2VkQW1vdW50WAkAtgIBBQxzdGFrZWRBbW91bnQEG3VzZXJSZXdhcmRGcm9tRGVwb3NpdE51bUtFWQkBG2tleVVzZXJSZXdhcmRGcm9tRGVwb3NpdE51bQEFC3VzZXJBZGRyZXNzBA5kZXBvc2l0TnVtVXNlcgkBDGdldEludE9yRWxzZQIFG3VzZXJSZXdhcmRGcm9tRGVwb3NpdE51bUtFWQD///////////8BBA5kZXBvc2l0TnVtTGFzdAkBDGdldEludE9yRWxzZQIJARFrZXlEZXBvc2l0TnVtTGFzdAAA////////////AQoBG2ZvckVhY2hBc3NldENhY2hlVXNlclJld2FyZAIFYWNjdW0FYXNzZXQECyR0MDg2Mzk4Nzc0CQEKY2FsY1Jld2FyZAUFC3VzZXJBZGRyZXNzBQVhc3NldAUNc3Rha2VkQW1vdW50WAUOZGVwb3NpdE51bVVzZXIFDmRlcG9zaXROdW1MYXN0BAtyZXdhcmRUb3RhbAgFCyR0MDg2Mzk4Nzc0Al8xBAZjYWNoZWQIBQskdDA4NjM5ODc3NAJfMgQHZHluYW1pYwgFCyR0MDg2Mzk4Nzc0Al8zBBNyZXdhcmRDYWNoZWRQYXJ0S0VZCAULJHQwODYzOTg3NzQCXzQJAM0IAgUFYWNjdW0JAQxJbnRlZ2VyRW50cnkCBRNyZXdhcmRDYWNoZWRQYXJ0S0VZBQtyZXdhcmRUb3RhbAMDCQAAAgUOZGVwb3NpdE51bUxhc3QA////////////AQkAAAIFDmRlcG9zaXROdW1Vc2VyAP///////////wEHBQNuaWwDAwkAAAIFDmRlcG9zaXROdW1MYXN0AP///////////wEJAGYCBQ5kZXBvc2l0TnVtVXNlcgD///////////8BBwkAAgECL2ludmFsaWQgZGVwb3NpdE51bUxhc3QgYW5kIGRlcG9zaXROdW1Vc2VyIHN0YXRlAwMJAGYCBQ5kZXBvc2l0TnVtTGFzdAD///////////8BCQBnAgUOZGVwb3NpdE51bVVzZXIA////////////AQcDBQlpc05ld1VzZXIJAMwIAgkBDEludGVnZXJFbnRyeQIFG3VzZXJSZXdhcmRGcm9tRGVwb3NpdE51bUtFWQUOZGVwb3NpdE51bUxhc3QFA25pbAkAzQgCCgACJGwFE3N1cHBvcnRlZEFzc2V0c0xpc3QKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBG2ZvckVhY2hBc3NldENhY2hlVXNlclJld2FyZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgkBDEludGVnZXJFbnRyeQIFG3VzZXJSZXdhcmRGcm9tRGVwb3NpdE51bUtFWQUOZGVwb3NpdE51bUxhc3QJAAIBCQCsAgIJAKwCAgkArAICAiR1bmNvdmVyZWQgY29uZGl0aW9uOiBkZXBvc2l0TnVtTGFzdD0JAKQDAQUOZGVwb3NpdE51bUxhc3QCECBkZXBvc2l0TnVtVXNlcj0JAKQDAQUOZGVwb3NpdE51bVVzZXIBIkluY3JlbWVudE5vdERpc3RyaWJ1dGVkUmV3YXJkRW50cnkCA3RrbglhbW91bnRJbmMEF25vdERpc3RyaWJ1dGVkUmV3YXJkS0VZCQEXa2V5Tm90RGlzdHJpYnV0ZWRSZXdhcmQBBQN0a24EFG5vdERpc3RyaWJ1dGVkUmV3YXJkCQEMZ2V0SW50T3JFbHNlAgUXbm90RGlzdHJpYnV0ZWRSZXdhcmRLRVkAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgUXbm90RGlzdHJpYnV0ZWRSZXdhcmRLRVkJAGQCBRRub3REaXN0cmlidXRlZFJld2FyZAUJYW1vdW50SW5jBQNuaWwBC3N1cmZUb0duc2J0AQdzdXJmQW10CQBpAgUHc3VyZkFtdAA8AR9tZXJnZVZvdGluZ1Bvd2VyRWZmZWN0aXZlSGVpZ2h0BBBxdWFyYW50aW5lUGVyaW9kEXZwRWZmZWN0aXZlSGVpZ2h0CXN0YWtlZEFtdAxzdGFrZWRBbXRORVcED3JlbWFpbmluZ1RvV2FpdAkAZQIFEXZwRWZmZWN0aXZlSGVpZ2h0BQZoZWlnaHQDCQBnAgAABQ9yZW1haW5pbmdUb1dhaXQJAGQCBQZoZWlnaHQFEHF1YXJhbnRpbmVQZXJpb2QEDWFscmVhZHlXYWl0ZWQJAGUCBRBxdWFyYW50aW5lUGVyaW9kBQ9yZW1haW5pbmdUb1dhaXQEA2tYOAkAawMFCXN0YWtlZEFtdAUFTVVMVDgFDHN0YWtlZEFtdE5FVwkAZQIJAGQCBRBxdWFyYW50aW5lUGVyaW9kBQZoZWlnaHQJAGsDBQ1hbHJlYWR5V2FpdGVkBQNrWDgFBU1VTFQ4AQptZXJnZVN0YWtlAgt1c2VyQWRkcmVzcwthbW91bnRUb0FkZAQNJHQwMTIzNjcxMjQ3NwkBC3ZhbHVlT3JFbHNlAgkBE2dldFVzZXJQYXJhbXNPclVuaXQBBQt1c2VyQWRkcmVzcwkAlQoDBgAAAAAECWlzTmV3VXNlcggFDSR0MDEyMzY3MTI0NzcCXzEEDHN0YWtlZEFtb3VudAgFDSR0MDEyMzY3MTI0NzcCXzIEEXZwRWZmZWN0aXZlSGVpZ2h0CAUNJHQwMTIzNjcxMjQ3NwJfMwQPc3Rha2VkQW1vdW50TkVXAwUJaXNOZXdVc2VyBQthbW91bnRUb0FkZAkAZAIFC2Ftb3VudFRvQWRkBQxzdGFrZWRBbW91bnQEEHF1YXJhbnRpbmVQZXJpb2QJAGgCAKALAA4EFHZwRWZmZWN0aXZlSGVpZ2h0TkVXAwUJaXNOZXdVc2VyCQBkAgUQcXVhcmFudGluZVBlcmlvZAUGaGVpZ2h0CQEfbWVyZ2VWb3RpbmdQb3dlckVmZmVjdGl2ZUhlaWdodAQFEHF1YXJhbnRpbmVQZXJpb2QFEXZwRWZmZWN0aXZlSGVpZ2h0BQxzdGFrZWRBbW91bnQFD3N0YWtlZEFtb3VudE5FVwkAlwoFBQlpc05ld1VzZXIFDHN0YWtlZEFtb3VudAURdnBFZmZlY3RpdmVIZWlnaHQFD3N0YWtlZEFtb3VudE5FVwUUdnBFZmZlY3RpdmVIZWlnaHRORVcBC2NvbW1vblN0YWtlAgt1c2VyQWRkcmVzcwFpBA0kdDAxMjk2MzEzMDE3CQEPZ2V0UGFyYW1zT3JGYWlsAAQNc3Rha2VkQXNzZXRJZAgFDSR0MDEyOTYzMTMwMTcCXzEEDW1pbkxvY2tBbW91bnQIBQ0kdDAxMjk2MzEzMDE3Al8yAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIVSW52YWxpZCBwYXltZW50cyBzaXplBAdwYXltZW50CQCRAwIIBQFpCHBheW1lbnRzAAAEBmFtb3VudAgFB3BheW1lbnQGYW1vdW50BBNpbnZhbGlkQXNzZXRNZXNzYWdlCQCsAgIJAKwCAgIPSW52YWxpZCBhc3NldC4gCQDYBAEFDXN0YWtlZEFzc2V0SWQCDCBpcyBleHBlY3RlZAQHYXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCAUHcGF5bWVudAdhc3NldElkBRNpbnZhbGlkQXNzZXRNZXNzYWdlAwkBAiE9AgUHYXNzZXRJZAUNc3Rha2VkQXNzZXRJZAkAAgEFE2ludmFsaWRBc3NldE1lc3NhZ2UEDnVzZXJBZGRyZXNzU3RyCQClCAEFC3VzZXJBZGRyZXNzBAptZXJnZWREYXRhCQEKbWVyZ2VTdGFrZQIFC3VzZXJBZGRyZXNzBQZhbW91bnQECWlzTmV3VXNlcggFCm1lcmdlZERhdGECXzEEDHN0YWtlZEFtb3VudAgFCm1lcmdlZERhdGECXzIEEXZwRWZmZWN0aXZlSGVpZ2h0CAUKbWVyZ2VkRGF0YQJfMwQPc3Rha2VkQW1vdW50TkVXCAUKbWVyZ2VkRGF0YQJfNAQUdnBFZmZlY3RpdmVIZWlnaHRORVcIBQptZXJnZWREYXRhAl81AwkAZgIFDW1pbkxvY2tBbW91bnQFD3N0YWtlZEFtb3VudE5FVwkAAgEJAKwCAgITTWluIGxvY2sgYW1vdW50IGlzIAkApAMBBQ1taW5Mb2NrQW1vdW50BA0kdDAxMzgxNjEzOTE4CQELU3RhdHNSZXN1bHQDBQZhbW91bnQAAQMFCWlzTmV3VXNlcgABAAAEDHN0YXRzRW50cmllcwgFDSR0MDEzODE2MTM5MTgCXzEEC3RvdGFsU3Rha2VkCAUNJHQwMTM4MTYxMzkxOAJfMgQOdG90YWxTdGFrZWROZXcIBQ0kdDAxMzgxNjEzOTE4Al8zCQDOCAIJAM4IAgkAzggCCQDMCAIJARJIaXN0b3J5UmVjb3JkRW50cnkHAgVzdGFrZQULdXNlckFkZHJlc3MIBQFpDXRyYW5zYWN0aW9uSWQFDHN0YWtlZEFtb3VudAURdnBFZmZlY3RpdmVIZWlnaHQFD3N0YWtlZEFtb3VudE5FVwUUdnBFZmZlY3RpdmVIZWlnaHRORVcFA25pbAkBDVJld2FyZEVudHJpZXMDBQlpc05ld1VzZXIFDnVzZXJBZGRyZXNzU3RyBQxzdGFrZWRBbW91bnQJAQ9Mb2NrUGFyYW1zRW50cnkDBQt1c2VyQWRkcmVzcwUPc3Rha2VkQW1vdW50TkVXBRR2cEVmZmVjdGl2ZUhlaWdodE5FVwUMc3RhdHNFbnRyaWVzAQtjb21tb25DbGFpbQILdXNlckFkZHJlc3MBaQQOdXNlckFkZHJlc3NTdHIJAKUIAQULdXNlckFkZHJlc3MDCQBmAgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIZcGF5bWVudHMgYXJlIG5vdCBhY2NlcHRlZAQNJHQwMTQzOTcxNDUwMgkBC3ZhbHVlT3JFbHNlAgkBE2dldFVzZXJQYXJhbXNPclVuaXQBBQt1c2VyQWRkcmVzcwkAlQoDBgAAAAAECWlzTmV3VXNlcggFDSR0MDE0Mzk3MTQ1MDICXzEEDHN0YWtlZEFtb3VudAgFDSR0MDE0Mzk3MTQ1MDICXzIEDHN0YWtpbmdTdGFydAgFDSR0MDE0Mzk3MTQ1MDICXzMEDXN0YWtlZEFtb3VudFgJALYCAQUMc3Rha2VkQW1vdW50BBt1c2VyUmV3YXJkRnJvbURlcG9zaXROdW1LRVkJARtrZXlVc2VyUmV3YXJkRnJvbURlcG9zaXROdW0BBQ51c2VyQWRkcmVzc1N0cgQOZGVwb3NpdE51bVVzZXIJAQxnZXRJbnRPckVsc2UCBRt1c2VyUmV3YXJkRnJvbURlcG9zaXROdW1LRVkA////////////AQQOZGVwb3NpdE51bUxhc3QJAQxnZXRJbnRPckVsc2UCCQERa2V5RGVwb3NpdE51bUxhc3QAAP///////////wEKAR9mb3JFYWNoQXNzZXRDYWxjVW5jbGFpbWVkUmV3YXJkAgVhY2N1bQVhc3NldAQNJHQwMTQ4NzMxNTAxMQkBCmNhbGNSZXdhcmQFBQ51c2VyQWRkcmVzc1N0cgUFYXNzZXQFDXN0YWtlZEFtb3VudFgFDmRlcG9zaXROdW1Vc2VyBQ5kZXBvc2l0TnVtTGFzdAQLcmV3YXJkVG90YWwIBQ0kdDAxNDg3MzE1MDExAl8xBAZjYWNoZWQIBQ0kdDAxNDg3MzE1MDExAl8yBAdkeW5hbWljCAUNJHQwMTQ4NzMxNTAxMQJfMwQTcmV3YXJkQ2FjaGVkUGFydEtFWQgFDSR0MDE0ODczMTUwMTECXzQECmNsYWltZWRLRVkJAQprZXlDbGFpbWVkAgUOdXNlckFkZHJlc3NTdHIFBWFzc2V0BA0kdDAxNTA3MTE1MTA4BQVhY2N1bQQEZGF0YQgFDSR0MDE1MDcxMTUxMDgCXzEEEWNsYWltZWRBbXRCeUFzc2V0CAUNJHQwMTUwNzExNTEwOAJfMgQHbmV3UGFydAkAuQkCCQDMCAIFBWFzc2V0CQDMCAIJAKQDAQULcmV3YXJkVG90YWwFA25pbAIBOgQUY2xhaW1lZEFtdEJ5QXNzZXROZXcJALkJAgkAzAgCBRFjbGFpbWVkQW10QnlBc3NldAkAzAgCBQduZXdQYXJ0BQNuaWwCAV8DCQBnAgAABQtyZXdhcmRUb3RhbAkAlAoCBQRkYXRhBRRjbGFpbWVkQW10QnlBc3NldE5ldwkAlAoCCQDNCAIJAM0IAgkAzQgCBQRkYXRhCQEOU2NyaXB0VHJhbnNmZXIDBQt1c2VyQWRkcmVzcwULcmV3YXJkVG90YWwJAQt0b0Fzc2V0VmVjdAEFBWFzc2V0CQEMSW50ZWdlckVudHJ5AgUKY2xhaW1lZEtFWQkAZAIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUKY2xhaW1lZEtFWQAABQtyZXdhcmRUb3RhbAkBDEludGVnZXJFbnRyeQIFE3Jld2FyZENhY2hlZFBhcnRLRVkAAAUUY2xhaW1lZEFtdEJ5QXNzZXROZXcEDSR0MDE1NTY4MTU2ODIKAAIkbAUTc3VwcG9ydGVkQXNzZXRzTGlzdAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsAgAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBH2ZvckVhY2hBc3NldENhbGNVbmNsYWltZWRSZXdhcmQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoECXRyYW5zZmVycwgFDSR0MDE1NTY4MTU2ODICXzEEF2NsYWltZWRBbXRCeUFzc2V0UmVzdWx0CAUNJHQwMTU1NjgxNTY4MgJfMgMJAGcCAAAJAJADAQUJdHJhbnNmZXJzBQNuaWwJAM0IAgkAzQgCBQl0cmFuc2ZlcnMJAQxJbnRlZ2VyRW50cnkCBRt1c2VyUmV3YXJkRnJvbURlcG9zaXROdW1LRVkFDmRlcG9zaXROdW1MYXN0CQERQ2xhaW1IaXN0b3J5RW50cnkDBQt1c2VyQWRkcmVzcwgFAWkNdHJhbnNhY3Rpb25JZAkAsAICBRdjbGFpbWVkQW10QnlBc3NldFJlc3VsdAABCgFpAQtjb25zdHJ1Y3RvcgMNbWluTG9ja0Ftb3VudBVzdXBwb3J0ZWRSZXdhcmRBc3NldHMNc3Rha2VkQXNzZXRJZAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEVBlcm1pc3Npb24gZGVuaWVkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEQa2V5TWluTG9ja0Ftb3VudAAFDW1pbkxvY2tBbW91bnQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBGGtleVN1cHBvcnRlZFJld2FyZEFzc2V0cwAFFXN1cHBvcnRlZFJld2FyZEFzc2V0cwkAzAgCCQELU3RyaW5nRW50cnkCCQEQa2V5U3Rha2VkQXNzZXRJZAAFDXN0YWtlZEFzc2V0SWQFA25pbAFpAQVzdGFrZQAJAQtjb21tb25TdGFrZQIIBQFpBmNhbGxlcgUBaQFpARNzdGFrZUJ5T3JpZ2luQ2FsbGVyAAkBC2NvbW1vblN0YWtlAggFAWkMb3JpZ2luQ2FsbGVyBQFpAWkBB3Vuc3Rha2UBBmFtb3VudAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECI3Vuc3Rha2UgZG9lc24ndCByZXF1aXJlIGFueSBwYXltZW50BAt1c2VyQWRkcmVzcwgFAWkGY2FsbGVyBA51c2VyQWRkcmVzc1N0cgkApQgBBQt1c2VyQWRkcmVzcwQNJHQwMTY1OTExNjY0NQkBD2dldFBhcmFtc09yRmFpbAAEDXN0YWtlZEFzc2V0SWQIBQ0kdDAxNjU5MTE2NjQ1Al8xBA1taW5Mb2NrQW1vdW50CAUNJHQwMTY1OTExNjY0NQJfMgQNJHQwMTY2NDgxNjcyMgkBE2dldFVzZXJQYXJhbXNPckZhaWwBBQt1c2VyQWRkcmVzcwQJaXNOZXdVc2VyCAUNJHQwMTY2NDgxNjcyMgJfMQQKbG9ja0Ftb3VudAgFDSR0MDE2NjQ4MTY3MjICXzIECWxvY2tTdGFydAgFDSR0MDE2NjQ4MTY3MjICXzMDCQBnAgAABQpsb2NrQW1vdW50CQACAQISTm90aGluZyB0byB1bnN0YWtlAwkAZgIFBmFtb3VudAUKbG9ja0Ftb3VudAkAAgEJAKwCAgkArAICCQCsAgICClJlcXVlc3RlZCAJAKQDAQUGYW1vdW50AhIsIGJ1dCBzdGFrZWQgb25seSAJAKQDAQUKbG9ja0Ftb3VudAQNJHQwMTY5MTIxNzA2NgkBC1N0YXRzUmVzdWx0AwkBAS0BBQZhbW91bnQDCQAAAgUGYW1vdW50BQpsb2NrQW1vdW50AP///////////wEAAAMJAAACBQZhbW91bnQFCmxvY2tBbW91bnQA////////////AQAABAxzdGF0c0VudHJpZXMIBQ0kdDAxNjkxMjE3MDY2Al8xBAt0b3RhbFN0YWtlZAgFDSR0MDE2OTEyMTcwNjYCXzIEDnRvdGFsU3Rha2VkTmV3CAUNJHQwMTY5MTIxNzA2NgJfMwkAzggCCQDOCAIJAM4IAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQt1c2VyQWRkcmVzcwUGYW1vdW50BQ1zdGFrZWRBc3NldElkCQDMCAIJARJIaXN0b3J5UmVjb3JkRW50cnkHAgd1bnN0YWtlBQt1c2VyQWRkcmVzcwgFAWkNdHJhbnNhY3Rpb25JZAUKbG9ja0Ftb3VudAUJbG9ja1N0YXJ0CQBlAgUKbG9ja0Ftb3VudAUGYW1vdW50BQlsb2NrU3RhcnQFA25pbAkBDVJld2FyZEVudHJpZXMDBwUOdXNlckFkZHJlc3NTdHIFCmxvY2tBbW91bnQJAQ9Mb2NrUGFyYW1zRW50cnkDBQt1c2VyQWRkcmVzcwkAZQIFCmxvY2tBbW91bnQFBmFtb3VudAUJbG9ja1N0YXJ0BQxzdGF0c0VudHJpZXMBaQEHZGVwb3NpdAADCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAh9leGFjdCAxIHBheW1lbnQgaXMgYWxsb3dlZCBvbmx5BANwbXQJAJEDAggFAWkIcGF5bWVudHMAAAQGYW1vdW50CAUDcG10BmFtb3VudAQKcG10QXNzZXRJZAkBC3ZhbHVlT3JFbHNlAggFA3BtdAdhc3NldElkBQdXQVZFU0lEBA1wbXRBc3NldElkU3RyCQDYBAEFCnBtdEFzc2V0SWQECHBtdE11bHRYAwkAAAIFCnBtdEFzc2V0SWQFB1dBVkVTSUQFBk1VTFRYOAUGTVVMVFg2BAdhbW91bnRYCQC2AgEFBmFtb3VudAQLdG90YWxTdGFrZWQJAQxnZXRJbnRPckVsc2UCCQEXa2V5TG9ja1BhcmFtVG90YWxBbW91bnQAAAAEDHRvdGFsU3Rha2VkWAkAtgIBBQt0b3RhbFN0YWtlZAMJAGYCAAAFC3RvdGFsU3Rha2VkCQACAQIbVE9ETzogY2FzZSBpcyBub3Qgc3VwcG9ydGVkAwkAAAIFC3RvdGFsU3Rha2VkAAAJASJJbmNyZW1lbnROb3REaXN0cmlidXRlZFJld2FyZEVudHJ5AgUNcG10QXNzZXRJZFN0cgUGYW1vdW50BBByZXdhcmRQZXJOc2J0WDE4CQC8AgMFB2Ftb3VudFgFB01VTFRYMTgFDHRvdGFsU3Rha2VkWAQRZGVwb3NpdE51bUxhc3RLRVkJARFrZXlEZXBvc2l0TnVtTGFzdAAEDmRlcG9zaXROdW1MYXN0CQEMZ2V0SW50T3JFbHNlAgURZGVwb3NpdE51bUxhc3RLRVkA////////////AQQNZGVwb3NpdE51bU5ldwkAZAIFDmRlcG9zaXROdW1MYXN0AAEDCQEBIQEJAQhjb250YWlucwIFEnN1cHBvcnRlZEFzc2V0c1N0cgUNcG10QXNzZXRJZFN0cgkAAgEJAKwCAgkArAICBRJzdXBwb3J0ZWRBc3NldHNTdHICESBkb2Vzbid0IGNvbnRhaW4gBQ1wbXRBc3NldElkU3RyCgEXcmVmcmVzaFJld2FyZFBlck5zYnRTVU0CBWFjY3VtCW5leHRBc3NldAQWcmV3YXJkUGVyTnNidFN1bU5ld0tFWQkBFWtleVJld2FyZFBlck5zYnRTdW1BdAIFDWRlcG9zaXROdW1OZXcFCW5leHRBc3NldAQKc3VtTGFzdFN0cgkBDGdldFN0ck9yRWxzZQIJARVrZXlSZXdhcmRQZXJOc2J0U3VtQXQCBQ5kZXBvc2l0TnVtTGFzdAUJbmV4dEFzc2V0AgEwCQDNCAIFBWFjY3VtAwkAAAIFCW5leHRBc3NldAUNcG10QXNzZXRJZFN0cgkBC1N0cmluZ0VudHJ5AgUWcmV3YXJkUGVyTnNidFN1bU5ld0tFWQkApgMBCQC3AgIJAKcDAQUKc3VtTGFzdFN0cgUQcmV3YXJkUGVyTnNidFgxOAkBC1N0cmluZ0VudHJ5AgUWcmV3YXJkUGVyTnNidFN1bU5ld0tFWQUKc3VtTGFzdFN0cgkAzQgCCgACJGwFE3N1cHBvcnRlZEFzc2V0c0xpc3QKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBF3JlZnJlc2hSZXdhcmRQZXJOc2J0U1VNAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKCQEMSW50ZWdlckVudHJ5AgURZGVwb3NpdE51bUxhc3RLRVkFDWRlcG9zaXROdW1OZXcBaQEMY2xhaW1SZXdhcmRzAAkBC2NvbW1vbkNsYWltAggFAWkGY2FsbGVyBQFpAWkBGmNsYWltUmV3YXJkc0J5T3JpZ2luQ2FsbGVyAAkBC2NvbW1vbkNsYWltAggFAWkMb3JpZ2luQ2FsbGVyBQFpAWkBGHVuY2xhaW1lZFJld2FyZHNSRUFET05MWQEOdXNlckFkZHJlc3NTdHIKARZmb3JFYWNoQXNzZXRaZXJvUmV3YXJkAgVhY2N1bQVhc3NldAkArAICCQCsAgIFBWFjY3VtCQC5CQIJAMwIAgUFYXNzZXQJAMwIAgIBMAkAzAgCAgEwBQNuaWwCAToCAV8EEnVuY2xhaW1lZFJld2FyZFN0cgMJAAACBQ51c2VyQWRkcmVzc1N0cgIACgACJGwFE3N1cHBvcnRlZEFzc2V0c0xpc3QKAAIkcwkAkAMBBQIkbAoABSRhY2MwAgAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBFmZvckVhY2hBc3NldFplcm9SZXdhcmQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoEC3VzZXJBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBBQ51c2VyQWRkcmVzc1N0cgQNJHQwMTk2MjAxOTcyNQkBC3ZhbHVlT3JFbHNlAgkBE2dldFVzZXJQYXJhbXNPclVuaXQBBQt1c2VyQWRkcmVzcwkAlQoDBgAAAAAECWlzTmV3VXNlcggFDSR0MDE5NjIwMTk3MjUCXzEEDHN0YWtlZEFtb3VudAgFDSR0MDE5NjIwMTk3MjUCXzIEDHN0YWtpbmdTdGFydAgFDSR0MDE5NjIwMTk3MjUCXzMEDXN0YWtlZEFtb3VudFgJALYCAQUMc3Rha2VkQW1vdW50BBt1c2VyUmV3YXJkRnJvbURlcG9zaXROdW1LRVkJARtrZXlVc2VyUmV3YXJkRnJvbURlcG9zaXROdW0BBQ51c2VyQWRkcmVzc1N0cgQOZGVwb3NpdE51bVVzZXIJAQxnZXRJbnRPckVsc2UCBRt1c2VyUmV3YXJkRnJvbURlcG9zaXROdW1LRVkA////////////AQQOZGVwb3NpdE51bUxhc3QJAQxnZXRJbnRPckVsc2UCCQERa2V5RGVwb3NpdE51bUxhc3QAAP///////////wEKAR9mb3JFYWNoQXNzZXRDYWxjVW5jbGFpbWVkUmV3YXJkAgVhY2N1bQVhc3NldAQNJHQwMjAwNzEyMDIwOQkBCmNhbGNSZXdhcmQFBQ51c2VyQWRkcmVzc1N0cgUFYXNzZXQFDXN0YWtlZEFtb3VudFgFDmRlcG9zaXROdW1Vc2VyBQ5kZXBvc2l0TnVtTGFzdAQLcmV3YXJkVG90YWwIBQ0kdDAyMDA3MTIwMjA5Al8xBAZjYWNoZWQIBQ0kdDAyMDA3MTIwMjA5Al8yBAdkeW5hbWljCAUNJHQwMjAwNzEyMDIwOQJfMwQTcmV3YXJkQ2FjaGVkUGFydEtFWQgFDSR0MDIwMDcxMjAyMDkCXzQEB2NsYWltZWQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBCmtleUNsYWltZWQCBQ51c2VyQWRkcmVzc1N0cgUFYXNzZXQAAAkArAICCQCsAgIFBWFjY3VtCQC5CQIJAMwIAgUFYXNzZXQJAMwIAgkApAMBBQtyZXdhcmRUb3RhbAkAzAgCCQCkAwEFB2NsYWltZWQFA25pbAIBOgIBXwoAAiRsBRNzdXBwb3J0ZWRBc3NldHNMaXN0CgACJHMJAJADAQUCJGwKAAUkYWNjMAIACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAR9mb3JFYWNoQXNzZXRDYWxjVW5jbGFpbWVkUmV3YXJkAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKCQCUCgIFA25pbAkAswICBRJ1bmNsYWltZWRSZXdhcmRTdHIAAQFpARZzdXJmU3Rha2luZ1NZU1JFQURPTkxZAhV1c2VyQWRkcmVzc1N0ck9yRW1wdHkIc3VyZkRpZmYECXN1cmZUb3RhbAkBDGdldEludE9yRWxzZQIJARdrZXlMb2NrUGFyYW1Ub3RhbEFtb3VudAAAAAQSZ25zYnRGcm9tU3VyZlRvdGFsCQELc3VyZlRvR25zYnQBBQlzdXJmVG90YWwDCQAAAgUVdXNlckFkZHJlc3NTdHJPckVtcHR5AgAJAJQKAgUDbmlsCQDMCAIAAAkAzAgCBQlzdXJmVG90YWwJAMwIAgAACQDMCAIFEmduc2J0RnJvbVN1cmZUb3RhbAkAzAgCAAAJAMwIAgUGaGVpZ2h0CQDMCAIFBmhlaWdodAUDbmlsBAt1c2VyQWRkcmVzcwkBD3RvQWRkcmVzc09yRmFpbAEFFXVzZXJBZGRyZXNzU3RyT3JFbXB0eQQKbWVyZ2VkRGF0YQkBCm1lcmdlU3Rha2UCBQt1c2VyQWRkcmVzcwUIc3VyZkRpZmYECWlzTmV3VXNlcggFCm1lcmdlZERhdGECXzEEDHN0YWtlZEFtb3VudAgFCm1lcmdlZERhdGECXzIEEXZwRWZmZWN0aXZlSGVpZ2h0CAUKbWVyZ2VkRGF0YQJfMwQPc3Rha2VkQW1vdW50TkVXCAUKbWVyZ2VkRGF0YQJfNAQUdnBFZmZlY3RpdmVIZWlnaHRORVcIBQptZXJnZWREYXRhAl81BAhzdXJmVXNlcgUMc3Rha2VkQW1vdW50BBFnbnNidEZyb21TdXJmVXNlcgkBC3N1cmZUb0duc2J0AQUIc3VyZlVzZXIJAJQKAgUDbmlsCQDMCAIFCHN1cmZVc2VyCQDMCAIFCXN1cmZUb3RhbAkAzAgCBRFnbnNidEZyb21TdXJmVXNlcgkAzAgCBRJnbnNidEZyb21TdXJmVG90YWwJAMwIAgURdnBFZmZlY3RpdmVIZWlnaHQJAMwIAgUUdnBFZmZlY3RpdmVIZWlnaHRORVcFA25pbAFpARFjb25maWdTWVNSRUFET05MWQAECm1pbkxvY2tBbXQJARFAZXh0ck5hdGl2ZSgxMDU1KQEJARBrZXlNaW5Mb2NrQW1vdW50AAQSZ25zYnRGcm9tU3VyZkNvZWZmCQBoAgA8BQVNVUxUNgQgc3VyZlZvdGluZ1Bvd2VyUmVzdHJpY3RpdmVQZXJpb2QJAGgCAKALAA4EG2JyVG9TdGFydFN1cmZUcmFuc2Zvcm1hdGlvbgCwmEYJAJQKAgUDbmlsCQDMCAIFCm1pbkxvY2tBbXQJAMwIAgUSZ25zYnRGcm9tU3VyZkNvZWZmCQDMCAIFIHN1cmZWb3RpbmdQb3dlclJlc3RyaWN0aXZlUGVyaW9kCQDMCAIFG2JyVG9TdGFydFN1cmZUcmFuc2Zvcm1hdGlvbgUDbmlsAKfFJNE=", "chainId": 84, "height": 2170645, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: FFYCwJFGmeUJNTzFug8KKXGm2fuXWAmtVZZd3Bzvx6fs Next: ATGScZ2BnkhhsgpdgkAYoeFEXYbXSJHxdc4eZnYCaAtS Diff:
OldNewDifferences
8484 func O (N) = makeString(["%s%s%s", "paramByUser", toString(N), "start"], a)
8585
8686
87-func P (Q,N,R) = makeString(["%s%s%s%s", "history", Q, toString(N), toBase58String(R)], a)
87+func P (N) = makeString(["%s%s%s", "paramByUser", toString(N), "vpEffectiveHeight"], a)
8888
8989
90-func S () = makeString(["%s%s", "stats", "activeTotalLocked"], a)
90+func Q (R,N,S) = makeString(["%s%s%s%s", "history", R, toString(N), toBase58String(S)], a)
9191
9292
93-func T () = makeString(["%s%s", "stats", "locksCount"], a)
93+func T () = makeString(["%s%s", "stats", "activeTotalLocked"], a)
9494
9595
96-func U () = makeString(["%s%s", "stats", "activeUsersCount"], a)
96+func U () = makeString(["%s%s", "stats", "locksCount"], a)
9797
9898
99-func V () = "%s__nextPeriod"
99+func V () = makeString(["%s%s", "stats", "activeUsersCount"], a)
100100
101101
102-func W () = "supportedRewardAssets"
102+func W () = "%s__nextPeriod"
103103
104104
105-func X () = makeString(["%s%s%s", "dep", "lastNum"], a)
105+func X () = "supportedRewardAssets"
106106
107107
108-func Y (N) = makeString(["%s%s%s", "userRwdFromDepNum", N], a)
108+func Y () = makeString(["%s%s%s", "dep", "lastNum"], a)
109109
110110
111-func Z (aa,ab) = makeString(["%s%d", "rwdPerNsbtSumByDepNum", toString(aa), ab], a)
111+func Z (N) = makeString(["%s%s%s", "userRwdFromDepNum", N], a)
112112
113113
114-func ac (N,ab) = makeString(["%s%s%s", "rwd", N, ab], a)
114+func aa (ab,ac) = makeString(["%s%d", "rwdPerNsbtSumByDepNum", toString(ab), ac], a)
115115
116116
117-func ad (N,ab) = makeString(["%s%s%s", "clm", N, ab], a)
117+func ad (N,ac) = makeString(["%s%s%s", "rwd", N, ac], a)
118118
119119
120-func ae (ab) = makeString(["%s%s", "notDistributed", ab], a)
120+func ae (N,ac) = makeString(["%s%s%s", "clm", N, ac], a)
121121
122122
123-func af (ag,ah) = fraction(toBigInt(ag), g, ah)
123+func af (ac) = makeString(["%s%s", "notDistributed", ac], a)
124124
125125
126-func ai (w) = valueOrElse(getInteger(this, w), 0)
126+func ag (ah,ai) = fraction(toBigInt(ah), g, ai)
127127
128128
129-func aj (w,ak) = valueOrElse(getInteger(this, w), ak)
129+func aj (w) = valueOrElse(getInteger(this, w), 0)
130130
131131
132-func al (w) = valueOrErrorMessage(getInteger(this, w), (("Mandatory this." + w) + " is not defined"))
132+func ak (w,al) = valueOrElse(getInteger(this, w), al)
133133
134134
135-func am (w,ak) = valueOrElse(getString(this, w), ak)
135+func am (w) = valueOrErrorMessage(getInteger(this, w), (("Mandatory this." + w) + " is not defined"))
136136
137137
138-func an (ao) = valueOrErrorMessage(addressFromString(ao), ("couldn't parse passed addressStr=" + ao))
138+func an (w,al) = valueOrElse(getString(this, w), al)
139139
140140
141-func ap (aq) = if ((aq == h))
142- then unit
143- else fromBase58String(aq)
141+func ao (ap) = valueOrErrorMessage(addressFromString(ap), ("couldn't parse passed addressStr=" + ap))
144142
145143
146-func ar (as) = {
147- let at = as
148- if ($isInstanceOf(at, "Int"))
144+func aq (ar) = if ((ar == h))
145+ then unit
146+ else fromBase58String(ar)
147+
148+
149+func as (at) = {
150+ let au = at
151+ if ($isInstanceOf(au, "Int"))
149152 then {
150- let au = at
151- au
153+ let av = au
154+ av
152155 }
153156 else throw("fail to cast into Int")
154157 }
155158
156159
157-func av (aw,ax,ay,az) = makeString(["%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(aw), toString(ax), toString(ay), toString(az)], a)
160+func aw (ax,ay,az,aA) = makeString(["%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(ax), toString(ay), toString(az), toString(aA)], a)
158161
159162
160-func aA (aB,aC) = makeString(["%s%d%d%s", aB, toString(lastBlock.height), toString(lastBlock.timestamp), aC], a)
163+func aB (aC,aD) = makeString(["%s%d%d%s", aC, toString(lastBlock.height), toString(lastBlock.timestamp), aD], a)
161164
162165
163-func aD (Q,N,R,aw,ax,ay,az) = StringEntry(P(Q, N, R), av(aw, ax, ay, az))
166+func aE (R,N,S,ax,ay,az,aA) = StringEntry(Q(R, N, S), aw(ax, ay, az, aA))
164167
165168
166-func aE (N,R,aC) = StringEntry(P("claim", N, R), aA(toString(N), aC))
169+func aF (N,S,aD) = StringEntry(Q("claim", N, S), aB(toString(N), aD))
167170
168171
169-func aF (aG,aH,aI) = {
170- let aJ = ai(T())
171- let aK = ai(U())
172- let aL = ai(S())
173- let aM = (aL + aG)
174- $Tuple3([IntegerEntry(T(), (aJ + aH)), IntegerEntry(U(), (aK + aI)), IntegerEntry(S(), aM)], aL, aM)
172+func aG (aH,aI,aJ) = {
173+ let aK = aj(U())
174+ let aL = aj(V())
175+ let aM = aj(T())
176+ let aN = (aM + aH)
177+ $Tuple3([IntegerEntry(U(), (aK + aI)), IntegerEntry(V(), (aL + aJ)), IntegerEntry(T(), aN)], aM, aN)
175178 }
176179
177180
178-func aN (N,aO,aP) = [IntegerEntry(M(N), aO), IntegerEntry(O(N), aP)]
181+func aO (N,aP,aQ) = [IntegerEntry(M(N), aP), IntegerEntry(O(N), aQ)]
179182
180183
181-func aQ () = $Tuple2(fromBase58String(u(this, L())), al(K()))
184+func aR () = $Tuple2(fromBase58String(u(this, L())), am(K()))
182185
183186
184-func aR (N) = (aj(M(N), 0) > 0)
187+func aS (N) = (ak(M(N), 0) > 0)
185188
186189
187-func aS (N) = if (aR(N))
188- then $Tuple3(false, al(M(N)), al(O(N)))
190+func aT (N) = if (aS(N))
191+ then $Tuple3(false, am(M(N)), am(O(N)))
189192 else unit
190193
191194
192-func aT (N) = valueOrErrorMessage(aS(N), (("User " + toString(N)) + " is not defined"))
195+func aU (N) = valueOrErrorMessage(aT(N), (("User " + toString(N)) + " is not defined"))
193196
194197
195-let aU = am(W(), "")
198+let aV = an(X(), "")
196199
197-let aV = split(aU, "_")
200+let aW = split(aV, "_")
198201
199-func aW (N,aX,aY,aZ,ba) = {
200- let bb = Z(ba, aX)
201- let bc = parseBigIntValue(am(Z(ba, aX), "0"))
202- let bd = parseBigIntValue(am(Z(aZ, aX), "0"))
203- let be = toInt(fraction((bc - bd), aY, g))
204- let bf = ac(N, aX)
205- let bg = aj(bf, 0)
206- $Tuple4((bg + be), bg, be, bf)
202+func aX (N,aY,aZ,ba,bb) = {
203+ let bc = aa(bb, aY)
204+ let bd = parseBigIntValue(an(aa(bb, aY), "0"))
205+ let be = parseBigIntValue(an(aa(ba, aY), "0"))
206+ let bf = toInt(fraction((bd - be), aZ, g))
207+ let bg = ad(N, aY)
208+ let bh = ak(bg, 0)
209+ $Tuple4((bh + bf), bh, bf, bg)
207210 }
208211
209212
210-func bh (bi,N,bj) = {
211- let aY = toBigInt(bj)
212- let bk = Y(N)
213- let aZ = aj(bk, -1)
214- let ba = aj(X(), -1)
215- func bl (bm,bn) = {
216- let bo = aW(N, bn, aY, aZ, ba)
217- let bp = bo._1
218- let bq = bo._2
219- let br = bo._3
220- let bf = bo._4
221- (bm :+ IntegerEntry(bf, bp))
213+func bi (bj,N,bk) = {
214+ let aZ = toBigInt(bk)
215+ let bl = Z(N)
216+ let ba = ak(bl, -1)
217+ let bb = ak(Y(), -1)
218+ func bm (bn,bo) = {
219+ let bp = aX(N, bo, aZ, ba, bb)
220+ let bq = bp._1
221+ let br = bp._2
222+ let bs = bp._3
223+ let bg = bp._4
224+ (bn :+ IntegerEntry(bg, bq))
222225 }
223226
224- if (if ((ba == -1))
225- then (aZ == -1)
227+ if (if ((bb == -1))
228+ then (ba == -1)
226229 else false)
227230 then nil
228- else if (if ((ba == -1))
229- then (aZ > -1)
231+ else if (if ((bb == -1))
232+ then (ba > -1)
230233 else false)
231234 then throw("invalid depositNumLast and depositNumUser state")
232- else if (if ((ba > -1))
233- then (aZ >= -1)
235+ else if (if ((bb > -1))
236+ then (ba >= -1)
234237 else false)
235- then if (bi)
236- then [IntegerEntry(bk, ba)]
238+ then if (bj)
239+ then [IntegerEntry(bl, bb)]
237240 else ({
238- let bs = aV
239- let bt = size(bs)
240- let bu = nil
241- func bv (bw,bx) = if ((bx >= bt))
242- then bw
243- else bl(bw, bs[bx])
241+ let bt = aW
242+ let bu = size(bt)
243+ let bv = nil
244+ func bw (bx,by) = if ((by >= bu))
245+ then bx
246+ else bm(bx, bt[by])
244247
245- func by (bw,bx) = if ((bx >= bt))
246- then bw
248+ func bz (bx,by) = if ((by >= bu))
249+ then bx
247250 else throw("List size exceeds 10")
248251
249- by(bv(bv(bv(bv(bv(bv(bv(bv(bv(bv(bu, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
250- } :+ IntegerEntry(bk, ba))
251- else throw(((("uncovered condition: depositNumLast=" + toString(ba)) + " depositNumUser=") + toString(aZ)))
252+ bz(bw(bw(bw(bw(bw(bw(bw(bw(bw(bw(bv, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
253+ } :+ IntegerEntry(bl, bb))
254+ else throw(((("uncovered condition: depositNumLast=" + toString(bb)) + " depositNumUser=") + toString(ba)))
252255 }
253256
254257
255-func bz (ab,bA) = {
256- let bB = ae(ab)
257- let bC = aj(bB, 0)
258-[IntegerEntry(bB, (bC + bA))]
258+func bA (ac,bB) = {
259+ let bC = af(ac)
260+ let bD = ak(bC, 0)
261+[IntegerEntry(bC, (bD + bB))]
259262 }
260263
261264
262-func bD (bE) = (bE / 60)
265+func bE (bF) = (bF / 60)
263266
264267
265-func bF (N,bG) = {
266- let bH = aQ()
267- let bI = bH._1
268- let bJ = bH._2
269- if ((size(bG.payments) != 1))
268+func bG (bH,bI,bJ,bK) = {
269+ let bL = (bI - height)
270+ if ((0 >= bL))
271+ then (height + bH)
272+ else {
273+ let bM = (bH - bL)
274+ let bN = fraction(bJ, d, bK)
275+ ((bH + height) - fraction(bM, bN, d))
276+ }
277+ }
278+
279+
280+func bO (N,bP) = {
281+ let bQ = valueOrElse(aT(N), $Tuple3(true, 0, 0))
282+ let bj = bQ._1
283+ let bk = bQ._2
284+ let bI = bQ._3
285+ let bR = if (bj)
286+ then bP
287+ else (bP + bk)
288+ let bH = (1440 * 14)
289+ let bS = if (bj)
290+ then (bH + height)
291+ else bG(bH, bI, bk, bR)
292+ $Tuple5(bj, bk, bI, bR, bS)
293+ }
294+
295+
296+func bT (N,bU) = {
297+ let bV = aR()
298+ let bW = bV._1
299+ let bX = bV._2
300+ if ((size(bU.payments) != 1))
270301 then throw("Invalid payments size")
271302 else {
272- let bK = bG.payments[0]
273- let aO = bK.amount
274- let bL = (("Invalid asset. " + toBase58String(bI)) + " is expected")
275- let aX = valueOrErrorMessage(bK.assetId, bL)
276- if ((aX != bI))
277- then throw(bL)
303+ let bY = bU.payments[0]
304+ let aP = bY.amount
305+ let bZ = (("Invalid asset. " + toBase58String(bW)) + " is expected")
306+ let aY = valueOrErrorMessage(bY.assetId, bZ)
307+ if ((aY != bW))
308+ then throw(bZ)
278309 else {
279- let bM = toString(N)
280- let bN = 0
281- let bO = 0
282- let bP = valueOrElse(aS(N), $Tuple3(true, 0, -1))
283- let bi = bP._1
284- let bj = bP._2
285- let bQ = bP._3
286- let bR = if (bi)
287- then aO
288- else (aO + bj)
289- let bS = if (bi)
290- then height
291- else (height + (1440 * 14))
292- if ((bJ > bR))
293- then throw(("Min lock amount is " + toString(bJ)))
310+ let ca = toString(N)
311+ let cb = bO(N, aP)
312+ let bj = cb._1
313+ let bk = cb._2
314+ let bI = cb._3
315+ let bR = cb._4
316+ let bS = cb._5
317+ if ((bX > bR))
318+ then throw(("Min lock amount is " + toString(bX)))
294319 else {
295- let bT = aF(aO, 1, if (bi)
320+ let cc = aG(aP, 1, if (bj)
296321 then 1
297322 else 0)
298- let bU = bT._1
299- let bV = bT._2
300- let bW = bT._3
301- ((([aD("stake", N, bG.transactionId, bj, bQ, bR, bS)] ++ bh(bi, bM, bj)) ++ aN(N, bR, bS)) ++ bU)
323+ let cd = cc._1
324+ let ce = cc._2
325+ let cf = cc._3
326+ ((([aE("stake", N, bU.transactionId, bk, bI, bR, bS)] ++ bi(bj, ca, bk)) ++ aO(N, bR, bS)) ++ cd)
302327 }
303328 }
304329 }
305330 }
306331
307332
308-func bX (N,bG) = {
309- let bM = toString(N)
310- if ((size(bG.payments) > 0))
333+func cg (N,bU) = {
334+ let ca = toString(N)
335+ if ((size(bU.payments) > 0))
311336 then throw("payments are not accepted")
312337 else {
313- let bY = valueOrElse(aS(N), $Tuple3(true, 0, 0))
314- let bi = bY._1
315- let bj = bY._2
316- let bZ = bY._3
317- let aY = toBigInt(bj)
318- let bk = Y(bM)
319- let aZ = aj(bk, -1)
320- let ba = aj(X(), -1)
321- func ca (bm,bn) = {
322- let cb = aW(bM, bn, aY, aZ, ba)
323- let bp = cb._1
324- let bq = cb._2
325- let br = cb._3
326- let bf = cb._4
327- let cc = ad(bM, bn)
328- let cd = bm
329- let ce = cd._1
330- let cf = cd._2
331- let cg = makeString([bn, toString(bp)], ":")
332- let ch = makeString([cf, cg], "_")
333- if ((0 >= bp))
334- then $Tuple2(ce, ch)
335- else $Tuple2((((ce :+ ScriptTransfer(N, bp, ap(bn))) :+ IntegerEntry(cc, (valueOrElse(getInteger(cc), 0) + bp))) :+ IntegerEntry(bf, 0)), ch)
338+ let ch = valueOrElse(aT(N), $Tuple3(true, 0, 0))
339+ let bj = ch._1
340+ let bk = ch._2
341+ let ci = ch._3
342+ let aZ = toBigInt(bk)
343+ let bl = Z(ca)
344+ let ba = ak(bl, -1)
345+ let bb = ak(Y(), -1)
346+ func cj (bn,bo) = {
347+ let ck = aX(ca, bo, aZ, ba, bb)
348+ let bq = ck._1
349+ let br = ck._2
350+ let bs = ck._3
351+ let bg = ck._4
352+ let cl = ae(ca, bo)
353+ let cm = bn
354+ let cn = cm._1
355+ let co = cm._2
356+ let cp = makeString([bo, toString(bq)], ":")
357+ let cq = makeString([co, cp], "_")
358+ if ((0 >= bq))
359+ then $Tuple2(cn, cq)
360+ else $Tuple2((((cn :+ ScriptTransfer(N, bq, aq(bo))) :+ IntegerEntry(cl, (valueOrElse(getInteger(cl), 0) + bq))) :+ IntegerEntry(bg, 0)), cq)
336361 }
337362
338- let ci = {
339- let bs = aV
340- let bt = size(bs)
341- let bu = $Tuple2(nil, "")
342- func bv (bw,bx) = if ((bx >= bt))
343- then bw
344- else ca(bw, bs[bx])
363+ let cr = {
364+ let bt = aW
365+ let bu = size(bt)
366+ let bv = $Tuple2(nil, "")
367+ func bw (bx,by) = if ((by >= bu))
368+ then bx
369+ else cj(bx, bt[by])
345370
346- func by (bw,bx) = if ((bx >= bt))
347- then bw
371+ func bz (bx,by) = if ((by >= bu))
372+ then bx
348373 else throw("List size exceeds 10")
349374
350- by(bv(bv(bv(bv(bv(bv(bv(bv(bv(bv(bu, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
375+ bz(bw(bw(bw(bw(bw(bw(bw(bw(bw(bw(bv, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
351376 }
352- let cj = ci._1
353- let ck = ci._2
354- if ((0 >= size(cj)))
377+ let cs = cr._1
378+ let ct = cr._2
379+ if ((0 >= size(cs)))
355380 then nil
356- else ((cj :+ IntegerEntry(bk, ba)) :+ aE(N, bG.transactionId, drop(ck, 1)))
381+ else ((cs :+ IntegerEntry(bl, bb)) :+ aF(N, bU.transactionId, drop(ct, 1)))
357382 }
358383 }
359384
360385
361-@Callable(bG)
362-func constructor (bJ,cl,bI) = if ((bG.caller != this))
386+@Callable(bU)
387+func constructor (bX,cu,bW) = if ((bU.caller != this))
363388 then throw("Permission denied")
364- else [IntegerEntry(K(), bJ), StringEntry(W(), cl), StringEntry(L(), bI)]
389+ else [IntegerEntry(K(), bX), StringEntry(X(), cu), StringEntry(L(), bW)]
365390
366391
367392
368-@Callable(bG)
369-func stake () = bF(bG.caller, bG)
393+@Callable(bU)
394+func stake () = bT(bU.caller, bU)
370395
371396
372397
373-@Callable(bG)
374-func stakeByOriginCaller () = bF(bG.originCaller, bG)
398+@Callable(bU)
399+func stakeByOriginCaller () = bT(bU.originCaller, bU)
375400
376401
377402
378-@Callable(bG)
379-func unstake (aO) = if ((size(bG.payments) != 0))
403+@Callable(bU)
404+func unstake (aP) = if ((size(bU.payments) != 0))
380405 then throw("unstake doesn't require any payment")
381406 else {
382- let N = bG.caller
383- let bM = toString(N)
384- let cm = aQ()
385- let bI = cm._1
386- let bJ = cm._2
387- let cn = aT(N)
388- let bi = cn._1
389- let co = cn._2
390- let cp = cn._3
391- if ((0 >= co))
407+ let N = bU.caller
408+ let ca = toString(N)
409+ let cv = aR()
410+ let bW = cv._1
411+ let bX = cv._2
412+ let cw = aU(N)
413+ let bj = cw._1
414+ let cx = cw._2
415+ let cy = cw._3
416+ if ((0 >= cx))
392417 then throw("Nothing to unstake")
393- else if ((aO > co))
394- then throw(((("Requested " + toString(aO)) + ", but staked only ") + toString(co)))
418+ else if ((aP > cx))
419+ then throw(((("Requested " + toString(aP)) + ", but staked only ") + toString(cx)))
395420 else {
396- let cq = aF(-(aO), if ((aO == co))
421+ let cz = aG(-(aP), if ((aP == cx))
397422 then -1
398- else 0, if ((aO == co))
423+ else 0, if ((aP == cx))
399424 then -1
400425 else 0)
401- let bU = cq._1
402- let bV = cq._2
403- let bW = cq._3
404- ((([ScriptTransfer(N, aO, bI), aD("unstake", N, bG.transactionId, co, cp, (co - aO), cp)] ++ bh(false, bM, co)) ++ aN(N, (co - aO), cp)) ++ bU)
426+ let cd = cz._1
427+ let ce = cz._2
428+ let cf = cz._3
429+ ((([ScriptTransfer(N, aP, bW), aE("unstake", N, bU.transactionId, cx, cy, (cx - aP), cy)] ++ bi(false, ca, cx)) ++ aO(N, (cx - aP), cy)) ++ cd)
405430 }
406431 }
407432
408433
409434
410-@Callable(bG)
411-func deposit () = if ((size(bG.payments) != 1))
435+@Callable(bU)
436+func deposit () = if ((size(bU.payments) != 1))
412437 then throw("exact 1 payment is allowed only")
413438 else {
414- let cr = bG.payments[0]
415- let aO = cr.amount
416- let cs = valueOrElse(cr.assetId, i)
417- let ct = toBase58String(cs)
418- let cu = if ((cs == i))
439+ let cA = bU.payments[0]
440+ let aP = cA.amount
441+ let cB = valueOrElse(cA.assetId, i)
442+ let cC = toBase58String(cB)
443+ let cD = if ((cB == i))
419444 then f
420445 else e
421- let cv = toBigInt(aO)
422- let bV = aj(S(), 0)
423- let cw = toBigInt(bV)
424- if ((0 > bV))
446+ let cE = toBigInt(aP)
447+ let ce = ak(T(), 0)
448+ let cF = toBigInt(ce)
449+ if ((0 > ce))
425450 then throw("TODO: case is not supported")
426- else if ((bV == 0))
427- then bz(ct, aO)
451+ else if ((ce == 0))
452+ then bA(cC, aP)
428453 else {
429- let cx = fraction(cv, g, cw)
430- let cy = X()
431- let ba = aj(cy, -1)
432- let cz = (ba + 1)
433- if (!(contains(aU, ct)))
434- then throw(((aU + " doesn't contain ") + ct))
454+ let cG = fraction(cE, g, cF)
455+ let cH = Y()
456+ let bb = ak(cH, -1)
457+ let cI = (bb + 1)
458+ if (!(contains(aV, cC)))
459+ then throw(((aV + " doesn't contain ") + cC))
435460 else {
436- func cA (bm,cB) = {
437- let cC = Z(cz, cB)
438- let cD = am(Z(ba, cB), "0")
439- (bm :+ (if ((cB == ct))
440- then StringEntry(cC, toString((parseBigIntValue(cD) + cx)))
441- else StringEntry(cC, cD)))
461+ func cJ (bn,cK) = {
462+ let cL = aa(cI, cK)
463+ let cM = an(aa(bb, cK), "0")
464+ (bn :+ (if ((cK == cC))
465+ then StringEntry(cL, toString((parseBigIntValue(cM) + cG)))
466+ else StringEntry(cL, cM)))
442467 }
443468
444469 ({
445- let bs = aV
446- let bt = size(bs)
447- let bu = nil
448- func bv (bw,bx) = if ((bx >= bt))
449- then bw
450- else cA(bw, bs[bx])
470+ let bt = aW
471+ let bu = size(bt)
472+ let bv = nil
473+ func bw (bx,by) = if ((by >= bu))
474+ then bx
475+ else cJ(bx, bt[by])
451476
452- func by (bw,bx) = if ((bx >= bt))
453- then bw
477+ func bz (bx,by) = if ((by >= bu))
478+ then bx
454479 else throw("List size exceeds 10")
455480
456- by(bv(bv(bv(bv(bv(bv(bv(bv(bv(bv(bu, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
457- } :+ IntegerEntry(cy, cz))
481+ bz(bw(bw(bw(bw(bw(bw(bw(bw(bw(bw(bv, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
482+ } :+ IntegerEntry(cH, cI))
458483 }
459484 }
460485 }
461486
462487
463488
464-@Callable(bG)
465-func claimRewards () = bX(bG.caller, bG)
489+@Callable(bU)
490+func claimRewards () = cg(bU.caller, bU)
466491
467492
468493
469-@Callable(bG)
470-func claimRewardsByOriginCaller () = bX(bG.originCaller, bG)
494+@Callable(bU)
495+func claimRewardsByOriginCaller () = cg(bU.originCaller, bU)
471496
472497
473498
474-@Callable(bG)
475-func unclaimedRewardsREADONLY (bM) = {
476- func cE (bm,bn) = ((bm + makeString([bn, "0", "0"], ":")) + "_")
499+@Callable(bU)
500+func unclaimedRewardsREADONLY (ca) = {
501+ func cN (bn,bo) = ((bn + makeString([bo, "0", "0"], ":")) + "_")
477502
478- let cF = if ((bM == ""))
503+ let cO = if ((ca == ""))
479504 then {
480- let bs = aV
481- let bt = size(bs)
482- let bu = ""
483- func bv (bw,bx) = if ((bx >= bt))
484- then bw
485- else cE(bw, bs[bx])
505+ let bt = aW
506+ let bu = size(bt)
507+ let bv = ""
508+ func bw (bx,by) = if ((by >= bu))
509+ then bx
510+ else cN(bx, bt[by])
486511
487- func by (bw,bx) = if ((bx >= bt))
488- then bw
512+ func bz (bx,by) = if ((by >= bu))
513+ then bx
489514 else throw("List size exceeds 10")
490515
491- by(bv(bv(bv(bv(bv(bv(bv(bv(bv(bv(bu, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
516+ bz(bw(bw(bw(bw(bw(bw(bw(bw(bw(bw(bv, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
492517 }
493518 else {
494- let N = addressFromStringValue(bM)
495- let cG = valueOrElse(aS(N), $Tuple3(true, 0, 0))
496- let bi = cG._1
497- let bj = cG._2
498- let bZ = cG._3
499- let aY = toBigInt(bj)
500- let bk = Y(bM)
501- let aZ = aj(bk, -1)
502- let ba = aj(X(), -1)
503- func ca (bm,bn) = {
504- let cH = aW(bM, bn, aY, aZ, ba)
505- let bp = cH._1
506- let bq = cH._2
507- let br = cH._3
508- let bf = cH._4
509- let cI = valueOrElse(getInteger(ad(bM, bn)), 0)
510- ((bm + makeString([bn, toString(bp), toString(cI)], ":")) + "_")
519+ let N = addressFromStringValue(ca)
520+ let cP = valueOrElse(aT(N), $Tuple3(true, 0, 0))
521+ let bj = cP._1
522+ let bk = cP._2
523+ let ci = cP._3
524+ let aZ = toBigInt(bk)
525+ let bl = Z(ca)
526+ let ba = ak(bl, -1)
527+ let bb = ak(Y(), -1)
528+ func cj (bn,bo) = {
529+ let cQ = aX(ca, bo, aZ, ba, bb)
530+ let bq = cQ._1
531+ let br = cQ._2
532+ let bs = cQ._3
533+ let bg = cQ._4
534+ let cR = valueOrElse(getInteger(ae(ca, bo)), 0)
535+ ((bn + makeString([bo, toString(bq), toString(cR)], ":")) + "_")
511536 }
512537
513- let bs = aV
514- let bt = size(bs)
515- let bu = ""
516- func bv (bw,bx) = if ((bx >= bt))
517- then bw
518- else ca(bw, bs[bx])
538+ let bt = aW
539+ let bu = size(bt)
540+ let bv = ""
541+ func bw (bx,by) = if ((by >= bu))
542+ then bx
543+ else cj(bx, bt[by])
519544
520- func by (bw,bx) = if ((bx >= bt))
521- then bw
545+ func bz (bx,by) = if ((by >= bu))
546+ then bx
522547 else throw("List size exceeds 10")
523548
524- by(bv(bv(bv(bv(bv(bv(bv(bv(bv(bv(bu, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
549+ bz(bw(bw(bw(bw(bw(bw(bw(bw(bw(bw(bv, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
525550 }
526- $Tuple2(nil, dropRight(cF, 1))
551+ $Tuple2(nil, dropRight(cO, 1))
527552 }
528553
529554
530555
531-@Callable(bG)
532-func surfStakingSYSREADONLY (cJ) = {
533- let cK = aj(S(), 0)
534- let cL = bD(cK)
535- if ((cJ == ""))
536- then $Tuple2(nil, [0, cK, 0, cL, 0])
556+@Callable(bU)
557+func surfStakingSYSREADONLY (cS,cT) = {
558+ let cU = ak(T(), 0)
559+ let cV = bE(cU)
560+ if ((cS == ""))
561+ then $Tuple2(nil, [0, cU, 0, cV, 0, height, height])
537562 else {
538- let N = an(cJ)
539- let cM = valueOrElse(aS(N), $Tuple3(true, 0, 0))
540- let bi = cM._1
541- let cN = cM._2
542- let bZ = cM._3
543- let cO = bD(cN)
544- $Tuple2(nil, [cN, cK, cO, cL, bZ])
563+ let N = ao(cS)
564+ let cb = bO(N, cT)
565+ let bj = cb._1
566+ let bk = cb._2
567+ let bI = cb._3
568+ let bR = cb._4
569+ let bS = cb._5
570+ let cW = bk
571+ let cX = bE(cW)
572+ $Tuple2(nil, [cW, cU, cX, cV, bI, bS])
545573 }
546574 }
547575
548576
549577
550-@Callable(bG)
578+@Callable(bU)
551579 func configSYSREADONLY () = {
552- let cP = getIntegerValue(K())
553- let cQ = (60 * c)
554- let cR = (1440 * 14)
555- let cS = 1200000
556- $Tuple2(nil, [cP, cQ, cR, cS])
580+ let cY = getIntegerValue(K())
581+ let cZ = (60 * c)
582+ let da = (1440 * 14)
583+ let db = 1150000
584+ $Tuple2(nil, [cY, cZ, da, db])
557585 }
558586
559587
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "__"
55
66 let b = "__"
77
88 let c = 1000000
99
1010 let d = 100000000
1111
1212 let e = toBigInt(c)
1313
1414 let f = toBigInt(d)
1515
1616 let g = toBigInt(1000000000000000000)
1717
1818 let h = "WAVES"
1919
2020 let i = fromBase58String(h)
2121
2222 let j = 1
2323
2424 let k = 2
2525
2626 let l = 3
2727
2828 let m = 4
2929
3030 let n = 5
3131
3232 let o = 6
3333
3434 let p = 7
3535
3636 let q = 8
3737
3838 let r = 9
3939
4040 let s = 10
4141
4242 let t = 11
4343
4444 func u (v,w) = valueOrErrorMessage(getString(v, w), (((("mandatory " + toString(v)) + ".") + w) + " is not defined"))
4545
4646
4747 func x () = "%s%s__config__controlAddress"
4848
4949
5050 func y () = "%s__controlConfig"
5151
5252
5353 func z (A) = split(u(A, y()), b)
5454
5555
5656 func B (C,D) = valueOrErrorMessage(addressFromString(C[D]), ("Control cfg doesn't contain address at index " + toString(D)))
5757
5858
5959 let E = addressFromStringValue(valueOrElse(getString(this, x()), "3N4NS7d4Jo9a6F14LiFUKKYVdUkkf2eP4Zx"))
6060
6161 let C = z(E)
6262
6363 let F = B(C, m)
6464
6565 let G = B(C, j)
6666
6767 let H = B(C, k)
6868
6969 func I () = "bond_asset_id"
7070
7171
7272 func J () = "auction_contract"
7373
7474
7575 func K () = "%s__minLockAmount"
7676
7777
7878 func L () = "%s__stakedAssetId"
7979
8080
8181 func M (N) = makeString(["%s%s%s", "paramByUser", toString(N), "amount"], a)
8282
8383
8484 func O (N) = makeString(["%s%s%s", "paramByUser", toString(N), "start"], a)
8585
8686
87-func P (Q,N,R) = makeString(["%s%s%s%s", "history", Q, toString(N), toBase58String(R)], a)
87+func P (N) = makeString(["%s%s%s", "paramByUser", toString(N), "vpEffectiveHeight"], a)
8888
8989
90-func S () = makeString(["%s%s", "stats", "activeTotalLocked"], a)
90+func Q (R,N,S) = makeString(["%s%s%s%s", "history", R, toString(N), toBase58String(S)], a)
9191
9292
93-func T () = makeString(["%s%s", "stats", "locksCount"], a)
93+func T () = makeString(["%s%s", "stats", "activeTotalLocked"], a)
9494
9595
96-func U () = makeString(["%s%s", "stats", "activeUsersCount"], a)
96+func U () = makeString(["%s%s", "stats", "locksCount"], a)
9797
9898
99-func V () = "%s__nextPeriod"
99+func V () = makeString(["%s%s", "stats", "activeUsersCount"], a)
100100
101101
102-func W () = "supportedRewardAssets"
102+func W () = "%s__nextPeriod"
103103
104104
105-func X () = makeString(["%s%s%s", "dep", "lastNum"], a)
105+func X () = "supportedRewardAssets"
106106
107107
108-func Y (N) = makeString(["%s%s%s", "userRwdFromDepNum", N], a)
108+func Y () = makeString(["%s%s%s", "dep", "lastNum"], a)
109109
110110
111-func Z (aa,ab) = makeString(["%s%d", "rwdPerNsbtSumByDepNum", toString(aa), ab], a)
111+func Z (N) = makeString(["%s%s%s", "userRwdFromDepNum", N], a)
112112
113113
114-func ac (N,ab) = makeString(["%s%s%s", "rwd", N, ab], a)
114+func aa (ab,ac) = makeString(["%s%d", "rwdPerNsbtSumByDepNum", toString(ab), ac], a)
115115
116116
117-func ad (N,ab) = makeString(["%s%s%s", "clm", N, ab], a)
117+func ad (N,ac) = makeString(["%s%s%s", "rwd", N, ac], a)
118118
119119
120-func ae (ab) = makeString(["%s%s", "notDistributed", ab], a)
120+func ae (N,ac) = makeString(["%s%s%s", "clm", N, ac], a)
121121
122122
123-func af (ag,ah) = fraction(toBigInt(ag), g, ah)
123+func af (ac) = makeString(["%s%s", "notDistributed", ac], a)
124124
125125
126-func ai (w) = valueOrElse(getInteger(this, w), 0)
126+func ag (ah,ai) = fraction(toBigInt(ah), g, ai)
127127
128128
129-func aj (w,ak) = valueOrElse(getInteger(this, w), ak)
129+func aj (w) = valueOrElse(getInteger(this, w), 0)
130130
131131
132-func al (w) = valueOrErrorMessage(getInteger(this, w), (("Mandatory this." + w) + " is not defined"))
132+func ak (w,al) = valueOrElse(getInteger(this, w), al)
133133
134134
135-func am (w,ak) = valueOrElse(getString(this, w), ak)
135+func am (w) = valueOrErrorMessage(getInteger(this, w), (("Mandatory this." + w) + " is not defined"))
136136
137137
138-func an (ao) = valueOrErrorMessage(addressFromString(ao), ("couldn't parse passed addressStr=" + ao))
138+func an (w,al) = valueOrElse(getString(this, w), al)
139139
140140
141-func ap (aq) = if ((aq == h))
142- then unit
143- else fromBase58String(aq)
141+func ao (ap) = valueOrErrorMessage(addressFromString(ap), ("couldn't parse passed addressStr=" + ap))
144142
145143
146-func ar (as) = {
147- let at = as
148- if ($isInstanceOf(at, "Int"))
144+func aq (ar) = if ((ar == h))
145+ then unit
146+ else fromBase58String(ar)
147+
148+
149+func as (at) = {
150+ let au = at
151+ if ($isInstanceOf(au, "Int"))
149152 then {
150- let au = at
151- au
153+ let av = au
154+ av
152155 }
153156 else throw("fail to cast into Int")
154157 }
155158
156159
157-func av (aw,ax,ay,az) = makeString(["%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(aw), toString(ax), toString(ay), toString(az)], a)
160+func aw (ax,ay,az,aA) = makeString(["%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(ax), toString(ay), toString(az), toString(aA)], a)
158161
159162
160-func aA (aB,aC) = makeString(["%s%d%d%s", aB, toString(lastBlock.height), toString(lastBlock.timestamp), aC], a)
163+func aB (aC,aD) = makeString(["%s%d%d%s", aC, toString(lastBlock.height), toString(lastBlock.timestamp), aD], a)
161164
162165
163-func aD (Q,N,R,aw,ax,ay,az) = StringEntry(P(Q, N, R), av(aw, ax, ay, az))
166+func aE (R,N,S,ax,ay,az,aA) = StringEntry(Q(R, N, S), aw(ax, ay, az, aA))
164167
165168
166-func aE (N,R,aC) = StringEntry(P("claim", N, R), aA(toString(N), aC))
169+func aF (N,S,aD) = StringEntry(Q("claim", N, S), aB(toString(N), aD))
167170
168171
169-func aF (aG,aH,aI) = {
170- let aJ = ai(T())
171- let aK = ai(U())
172- let aL = ai(S())
173- let aM = (aL + aG)
174- $Tuple3([IntegerEntry(T(), (aJ + aH)), IntegerEntry(U(), (aK + aI)), IntegerEntry(S(), aM)], aL, aM)
172+func aG (aH,aI,aJ) = {
173+ let aK = aj(U())
174+ let aL = aj(V())
175+ let aM = aj(T())
176+ let aN = (aM + aH)
177+ $Tuple3([IntegerEntry(U(), (aK + aI)), IntegerEntry(V(), (aL + aJ)), IntegerEntry(T(), aN)], aM, aN)
175178 }
176179
177180
178-func aN (N,aO,aP) = [IntegerEntry(M(N), aO), IntegerEntry(O(N), aP)]
181+func aO (N,aP,aQ) = [IntegerEntry(M(N), aP), IntegerEntry(O(N), aQ)]
179182
180183
181-func aQ () = $Tuple2(fromBase58String(u(this, L())), al(K()))
184+func aR () = $Tuple2(fromBase58String(u(this, L())), am(K()))
182185
183186
184-func aR (N) = (aj(M(N), 0) > 0)
187+func aS (N) = (ak(M(N), 0) > 0)
185188
186189
187-func aS (N) = if (aR(N))
188- then $Tuple3(false, al(M(N)), al(O(N)))
190+func aT (N) = if (aS(N))
191+ then $Tuple3(false, am(M(N)), am(O(N)))
189192 else unit
190193
191194
192-func aT (N) = valueOrErrorMessage(aS(N), (("User " + toString(N)) + " is not defined"))
195+func aU (N) = valueOrErrorMessage(aT(N), (("User " + toString(N)) + " is not defined"))
193196
194197
195-let aU = am(W(), "")
198+let aV = an(X(), "")
196199
197-let aV = split(aU, "_")
200+let aW = split(aV, "_")
198201
199-func aW (N,aX,aY,aZ,ba) = {
200- let bb = Z(ba, aX)
201- let bc = parseBigIntValue(am(Z(ba, aX), "0"))
202- let bd = parseBigIntValue(am(Z(aZ, aX), "0"))
203- let be = toInt(fraction((bc - bd), aY, g))
204- let bf = ac(N, aX)
205- let bg = aj(bf, 0)
206- $Tuple4((bg + be), bg, be, bf)
202+func aX (N,aY,aZ,ba,bb) = {
203+ let bc = aa(bb, aY)
204+ let bd = parseBigIntValue(an(aa(bb, aY), "0"))
205+ let be = parseBigIntValue(an(aa(ba, aY), "0"))
206+ let bf = toInt(fraction((bd - be), aZ, g))
207+ let bg = ad(N, aY)
208+ let bh = ak(bg, 0)
209+ $Tuple4((bh + bf), bh, bf, bg)
207210 }
208211
209212
210-func bh (bi,N,bj) = {
211- let aY = toBigInt(bj)
212- let bk = Y(N)
213- let aZ = aj(bk, -1)
214- let ba = aj(X(), -1)
215- func bl (bm,bn) = {
216- let bo = aW(N, bn, aY, aZ, ba)
217- let bp = bo._1
218- let bq = bo._2
219- let br = bo._3
220- let bf = bo._4
221- (bm :+ IntegerEntry(bf, bp))
213+func bi (bj,N,bk) = {
214+ let aZ = toBigInt(bk)
215+ let bl = Z(N)
216+ let ba = ak(bl, -1)
217+ let bb = ak(Y(), -1)
218+ func bm (bn,bo) = {
219+ let bp = aX(N, bo, aZ, ba, bb)
220+ let bq = bp._1
221+ let br = bp._2
222+ let bs = bp._3
223+ let bg = bp._4
224+ (bn :+ IntegerEntry(bg, bq))
222225 }
223226
224- if (if ((ba == -1))
225- then (aZ == -1)
227+ if (if ((bb == -1))
228+ then (ba == -1)
226229 else false)
227230 then nil
228- else if (if ((ba == -1))
229- then (aZ > -1)
231+ else if (if ((bb == -1))
232+ then (ba > -1)
230233 else false)
231234 then throw("invalid depositNumLast and depositNumUser state")
232- else if (if ((ba > -1))
233- then (aZ >= -1)
235+ else if (if ((bb > -1))
236+ then (ba >= -1)
234237 else false)
235- then if (bi)
236- then [IntegerEntry(bk, ba)]
238+ then if (bj)
239+ then [IntegerEntry(bl, bb)]
237240 else ({
238- let bs = aV
239- let bt = size(bs)
240- let bu = nil
241- func bv (bw,bx) = if ((bx >= bt))
242- then bw
243- else bl(bw, bs[bx])
241+ let bt = aW
242+ let bu = size(bt)
243+ let bv = nil
244+ func bw (bx,by) = if ((by >= bu))
245+ then bx
246+ else bm(bx, bt[by])
244247
245- func by (bw,bx) = if ((bx >= bt))
246- then bw
248+ func bz (bx,by) = if ((by >= bu))
249+ then bx
247250 else throw("List size exceeds 10")
248251
249- by(bv(bv(bv(bv(bv(bv(bv(bv(bv(bv(bu, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
250- } :+ IntegerEntry(bk, ba))
251- else throw(((("uncovered condition: depositNumLast=" + toString(ba)) + " depositNumUser=") + toString(aZ)))
252+ bz(bw(bw(bw(bw(bw(bw(bw(bw(bw(bw(bv, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
253+ } :+ IntegerEntry(bl, bb))
254+ else throw(((("uncovered condition: depositNumLast=" + toString(bb)) + " depositNumUser=") + toString(ba)))
252255 }
253256
254257
255-func bz (ab,bA) = {
256- let bB = ae(ab)
257- let bC = aj(bB, 0)
258-[IntegerEntry(bB, (bC + bA))]
258+func bA (ac,bB) = {
259+ let bC = af(ac)
260+ let bD = ak(bC, 0)
261+[IntegerEntry(bC, (bD + bB))]
259262 }
260263
261264
262-func bD (bE) = (bE / 60)
265+func bE (bF) = (bF / 60)
263266
264267
265-func bF (N,bG) = {
266- let bH = aQ()
267- let bI = bH._1
268- let bJ = bH._2
269- if ((size(bG.payments) != 1))
268+func bG (bH,bI,bJ,bK) = {
269+ let bL = (bI - height)
270+ if ((0 >= bL))
271+ then (height + bH)
272+ else {
273+ let bM = (bH - bL)
274+ let bN = fraction(bJ, d, bK)
275+ ((bH + height) - fraction(bM, bN, d))
276+ }
277+ }
278+
279+
280+func bO (N,bP) = {
281+ let bQ = valueOrElse(aT(N), $Tuple3(true, 0, 0))
282+ let bj = bQ._1
283+ let bk = bQ._2
284+ let bI = bQ._3
285+ let bR = if (bj)
286+ then bP
287+ else (bP + bk)
288+ let bH = (1440 * 14)
289+ let bS = if (bj)
290+ then (bH + height)
291+ else bG(bH, bI, bk, bR)
292+ $Tuple5(bj, bk, bI, bR, bS)
293+ }
294+
295+
296+func bT (N,bU) = {
297+ let bV = aR()
298+ let bW = bV._1
299+ let bX = bV._2
300+ if ((size(bU.payments) != 1))
270301 then throw("Invalid payments size")
271302 else {
272- let bK = bG.payments[0]
273- let aO = bK.amount
274- let bL = (("Invalid asset. " + toBase58String(bI)) + " is expected")
275- let aX = valueOrErrorMessage(bK.assetId, bL)
276- if ((aX != bI))
277- then throw(bL)
303+ let bY = bU.payments[0]
304+ let aP = bY.amount
305+ let bZ = (("Invalid asset. " + toBase58String(bW)) + " is expected")
306+ let aY = valueOrErrorMessage(bY.assetId, bZ)
307+ if ((aY != bW))
308+ then throw(bZ)
278309 else {
279- let bM = toString(N)
280- let bN = 0
281- let bO = 0
282- let bP = valueOrElse(aS(N), $Tuple3(true, 0, -1))
283- let bi = bP._1
284- let bj = bP._2
285- let bQ = bP._3
286- let bR = if (bi)
287- then aO
288- else (aO + bj)
289- let bS = if (bi)
290- then height
291- else (height + (1440 * 14))
292- if ((bJ > bR))
293- then throw(("Min lock amount is " + toString(bJ)))
310+ let ca = toString(N)
311+ let cb = bO(N, aP)
312+ let bj = cb._1
313+ let bk = cb._2
314+ let bI = cb._3
315+ let bR = cb._4
316+ let bS = cb._5
317+ if ((bX > bR))
318+ then throw(("Min lock amount is " + toString(bX)))
294319 else {
295- let bT = aF(aO, 1, if (bi)
320+ let cc = aG(aP, 1, if (bj)
296321 then 1
297322 else 0)
298- let bU = bT._1
299- let bV = bT._2
300- let bW = bT._3
301- ((([aD("stake", N, bG.transactionId, bj, bQ, bR, bS)] ++ bh(bi, bM, bj)) ++ aN(N, bR, bS)) ++ bU)
323+ let cd = cc._1
324+ let ce = cc._2
325+ let cf = cc._3
326+ ((([aE("stake", N, bU.transactionId, bk, bI, bR, bS)] ++ bi(bj, ca, bk)) ++ aO(N, bR, bS)) ++ cd)
302327 }
303328 }
304329 }
305330 }
306331
307332
308-func bX (N,bG) = {
309- let bM = toString(N)
310- if ((size(bG.payments) > 0))
333+func cg (N,bU) = {
334+ let ca = toString(N)
335+ if ((size(bU.payments) > 0))
311336 then throw("payments are not accepted")
312337 else {
313- let bY = valueOrElse(aS(N), $Tuple3(true, 0, 0))
314- let bi = bY._1
315- let bj = bY._2
316- let bZ = bY._3
317- let aY = toBigInt(bj)
318- let bk = Y(bM)
319- let aZ = aj(bk, -1)
320- let ba = aj(X(), -1)
321- func ca (bm,bn) = {
322- let cb = aW(bM, bn, aY, aZ, ba)
323- let bp = cb._1
324- let bq = cb._2
325- let br = cb._3
326- let bf = cb._4
327- let cc = ad(bM, bn)
328- let cd = bm
329- let ce = cd._1
330- let cf = cd._2
331- let cg = makeString([bn, toString(bp)], ":")
332- let ch = makeString([cf, cg], "_")
333- if ((0 >= bp))
334- then $Tuple2(ce, ch)
335- else $Tuple2((((ce :+ ScriptTransfer(N, bp, ap(bn))) :+ IntegerEntry(cc, (valueOrElse(getInteger(cc), 0) + bp))) :+ IntegerEntry(bf, 0)), ch)
338+ let ch = valueOrElse(aT(N), $Tuple3(true, 0, 0))
339+ let bj = ch._1
340+ let bk = ch._2
341+ let ci = ch._3
342+ let aZ = toBigInt(bk)
343+ let bl = Z(ca)
344+ let ba = ak(bl, -1)
345+ let bb = ak(Y(), -1)
346+ func cj (bn,bo) = {
347+ let ck = aX(ca, bo, aZ, ba, bb)
348+ let bq = ck._1
349+ let br = ck._2
350+ let bs = ck._3
351+ let bg = ck._4
352+ let cl = ae(ca, bo)
353+ let cm = bn
354+ let cn = cm._1
355+ let co = cm._2
356+ let cp = makeString([bo, toString(bq)], ":")
357+ let cq = makeString([co, cp], "_")
358+ if ((0 >= bq))
359+ then $Tuple2(cn, cq)
360+ else $Tuple2((((cn :+ ScriptTransfer(N, bq, aq(bo))) :+ IntegerEntry(cl, (valueOrElse(getInteger(cl), 0) + bq))) :+ IntegerEntry(bg, 0)), cq)
336361 }
337362
338- let ci = {
339- let bs = aV
340- let bt = size(bs)
341- let bu = $Tuple2(nil, "")
342- func bv (bw,bx) = if ((bx >= bt))
343- then bw
344- else ca(bw, bs[bx])
363+ let cr = {
364+ let bt = aW
365+ let bu = size(bt)
366+ let bv = $Tuple2(nil, "")
367+ func bw (bx,by) = if ((by >= bu))
368+ then bx
369+ else cj(bx, bt[by])
345370
346- func by (bw,bx) = if ((bx >= bt))
347- then bw
371+ func bz (bx,by) = if ((by >= bu))
372+ then bx
348373 else throw("List size exceeds 10")
349374
350- by(bv(bv(bv(bv(bv(bv(bv(bv(bv(bv(bu, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
375+ bz(bw(bw(bw(bw(bw(bw(bw(bw(bw(bw(bv, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
351376 }
352- let cj = ci._1
353- let ck = ci._2
354- if ((0 >= size(cj)))
377+ let cs = cr._1
378+ let ct = cr._2
379+ if ((0 >= size(cs)))
355380 then nil
356- else ((cj :+ IntegerEntry(bk, ba)) :+ aE(N, bG.transactionId, drop(ck, 1)))
381+ else ((cs :+ IntegerEntry(bl, bb)) :+ aF(N, bU.transactionId, drop(ct, 1)))
357382 }
358383 }
359384
360385
361-@Callable(bG)
362-func constructor (bJ,cl,bI) = if ((bG.caller != this))
386+@Callable(bU)
387+func constructor (bX,cu,bW) = if ((bU.caller != this))
363388 then throw("Permission denied")
364- else [IntegerEntry(K(), bJ), StringEntry(W(), cl), StringEntry(L(), bI)]
389+ else [IntegerEntry(K(), bX), StringEntry(X(), cu), StringEntry(L(), bW)]
365390
366391
367392
368-@Callable(bG)
369-func stake () = bF(bG.caller, bG)
393+@Callable(bU)
394+func stake () = bT(bU.caller, bU)
370395
371396
372397
373-@Callable(bG)
374-func stakeByOriginCaller () = bF(bG.originCaller, bG)
398+@Callable(bU)
399+func stakeByOriginCaller () = bT(bU.originCaller, bU)
375400
376401
377402
378-@Callable(bG)
379-func unstake (aO) = if ((size(bG.payments) != 0))
403+@Callable(bU)
404+func unstake (aP) = if ((size(bU.payments) != 0))
380405 then throw("unstake doesn't require any payment")
381406 else {
382- let N = bG.caller
383- let bM = toString(N)
384- let cm = aQ()
385- let bI = cm._1
386- let bJ = cm._2
387- let cn = aT(N)
388- let bi = cn._1
389- let co = cn._2
390- let cp = cn._3
391- if ((0 >= co))
407+ let N = bU.caller
408+ let ca = toString(N)
409+ let cv = aR()
410+ let bW = cv._1
411+ let bX = cv._2
412+ let cw = aU(N)
413+ let bj = cw._1
414+ let cx = cw._2
415+ let cy = cw._3
416+ if ((0 >= cx))
392417 then throw("Nothing to unstake")
393- else if ((aO > co))
394- then throw(((("Requested " + toString(aO)) + ", but staked only ") + toString(co)))
418+ else if ((aP > cx))
419+ then throw(((("Requested " + toString(aP)) + ", but staked only ") + toString(cx)))
395420 else {
396- let cq = aF(-(aO), if ((aO == co))
421+ let cz = aG(-(aP), if ((aP == cx))
397422 then -1
398- else 0, if ((aO == co))
423+ else 0, if ((aP == cx))
399424 then -1
400425 else 0)
401- let bU = cq._1
402- let bV = cq._2
403- let bW = cq._3
404- ((([ScriptTransfer(N, aO, bI), aD("unstake", N, bG.transactionId, co, cp, (co - aO), cp)] ++ bh(false, bM, co)) ++ aN(N, (co - aO), cp)) ++ bU)
426+ let cd = cz._1
427+ let ce = cz._2
428+ let cf = cz._3
429+ ((([ScriptTransfer(N, aP, bW), aE("unstake", N, bU.transactionId, cx, cy, (cx - aP), cy)] ++ bi(false, ca, cx)) ++ aO(N, (cx - aP), cy)) ++ cd)
405430 }
406431 }
407432
408433
409434
410-@Callable(bG)
411-func deposit () = if ((size(bG.payments) != 1))
435+@Callable(bU)
436+func deposit () = if ((size(bU.payments) != 1))
412437 then throw("exact 1 payment is allowed only")
413438 else {
414- let cr = bG.payments[0]
415- let aO = cr.amount
416- let cs = valueOrElse(cr.assetId, i)
417- let ct = toBase58String(cs)
418- let cu = if ((cs == i))
439+ let cA = bU.payments[0]
440+ let aP = cA.amount
441+ let cB = valueOrElse(cA.assetId, i)
442+ let cC = toBase58String(cB)
443+ let cD = if ((cB == i))
419444 then f
420445 else e
421- let cv = toBigInt(aO)
422- let bV = aj(S(), 0)
423- let cw = toBigInt(bV)
424- if ((0 > bV))
446+ let cE = toBigInt(aP)
447+ let ce = ak(T(), 0)
448+ let cF = toBigInt(ce)
449+ if ((0 > ce))
425450 then throw("TODO: case is not supported")
426- else if ((bV == 0))
427- then bz(ct, aO)
451+ else if ((ce == 0))
452+ then bA(cC, aP)
428453 else {
429- let cx = fraction(cv, g, cw)
430- let cy = X()
431- let ba = aj(cy, -1)
432- let cz = (ba + 1)
433- if (!(contains(aU, ct)))
434- then throw(((aU + " doesn't contain ") + ct))
454+ let cG = fraction(cE, g, cF)
455+ let cH = Y()
456+ let bb = ak(cH, -1)
457+ let cI = (bb + 1)
458+ if (!(contains(aV, cC)))
459+ then throw(((aV + " doesn't contain ") + cC))
435460 else {
436- func cA (bm,cB) = {
437- let cC = Z(cz, cB)
438- let cD = am(Z(ba, cB), "0")
439- (bm :+ (if ((cB == ct))
440- then StringEntry(cC, toString((parseBigIntValue(cD) + cx)))
441- else StringEntry(cC, cD)))
461+ func cJ (bn,cK) = {
462+ let cL = aa(cI, cK)
463+ let cM = an(aa(bb, cK), "0")
464+ (bn :+ (if ((cK == cC))
465+ then StringEntry(cL, toString((parseBigIntValue(cM) + cG)))
466+ else StringEntry(cL, cM)))
442467 }
443468
444469 ({
445- let bs = aV
446- let bt = size(bs)
447- let bu = nil
448- func bv (bw,bx) = if ((bx >= bt))
449- then bw
450- else cA(bw, bs[bx])
470+ let bt = aW
471+ let bu = size(bt)
472+ let bv = nil
473+ func bw (bx,by) = if ((by >= bu))
474+ then bx
475+ else cJ(bx, bt[by])
451476
452- func by (bw,bx) = if ((bx >= bt))
453- then bw
477+ func bz (bx,by) = if ((by >= bu))
478+ then bx
454479 else throw("List size exceeds 10")
455480
456- by(bv(bv(bv(bv(bv(bv(bv(bv(bv(bv(bu, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
457- } :+ IntegerEntry(cy, cz))
481+ bz(bw(bw(bw(bw(bw(bw(bw(bw(bw(bw(bv, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
482+ } :+ IntegerEntry(cH, cI))
458483 }
459484 }
460485 }
461486
462487
463488
464-@Callable(bG)
465-func claimRewards () = bX(bG.caller, bG)
489+@Callable(bU)
490+func claimRewards () = cg(bU.caller, bU)
466491
467492
468493
469-@Callable(bG)
470-func claimRewardsByOriginCaller () = bX(bG.originCaller, bG)
494+@Callable(bU)
495+func claimRewardsByOriginCaller () = cg(bU.originCaller, bU)
471496
472497
473498
474-@Callable(bG)
475-func unclaimedRewardsREADONLY (bM) = {
476- func cE (bm,bn) = ((bm + makeString([bn, "0", "0"], ":")) + "_")
499+@Callable(bU)
500+func unclaimedRewardsREADONLY (ca) = {
501+ func cN (bn,bo) = ((bn + makeString([bo, "0", "0"], ":")) + "_")
477502
478- let cF = if ((bM == ""))
503+ let cO = if ((ca == ""))
479504 then {
480- let bs = aV
481- let bt = size(bs)
482- let bu = ""
483- func bv (bw,bx) = if ((bx >= bt))
484- then bw
485- else cE(bw, bs[bx])
505+ let bt = aW
506+ let bu = size(bt)
507+ let bv = ""
508+ func bw (bx,by) = if ((by >= bu))
509+ then bx
510+ else cN(bx, bt[by])
486511
487- func by (bw,bx) = if ((bx >= bt))
488- then bw
512+ func bz (bx,by) = if ((by >= bu))
513+ then bx
489514 else throw("List size exceeds 10")
490515
491- by(bv(bv(bv(bv(bv(bv(bv(bv(bv(bv(bu, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
516+ bz(bw(bw(bw(bw(bw(bw(bw(bw(bw(bw(bv, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
492517 }
493518 else {
494- let N = addressFromStringValue(bM)
495- let cG = valueOrElse(aS(N), $Tuple3(true, 0, 0))
496- let bi = cG._1
497- let bj = cG._2
498- let bZ = cG._3
499- let aY = toBigInt(bj)
500- let bk = Y(bM)
501- let aZ = aj(bk, -1)
502- let ba = aj(X(), -1)
503- func ca (bm,bn) = {
504- let cH = aW(bM, bn, aY, aZ, ba)
505- let bp = cH._1
506- let bq = cH._2
507- let br = cH._3
508- let bf = cH._4
509- let cI = valueOrElse(getInteger(ad(bM, bn)), 0)
510- ((bm + makeString([bn, toString(bp), toString(cI)], ":")) + "_")
519+ let N = addressFromStringValue(ca)
520+ let cP = valueOrElse(aT(N), $Tuple3(true, 0, 0))
521+ let bj = cP._1
522+ let bk = cP._2
523+ let ci = cP._3
524+ let aZ = toBigInt(bk)
525+ let bl = Z(ca)
526+ let ba = ak(bl, -1)
527+ let bb = ak(Y(), -1)
528+ func cj (bn,bo) = {
529+ let cQ = aX(ca, bo, aZ, ba, bb)
530+ let bq = cQ._1
531+ let br = cQ._2
532+ let bs = cQ._3
533+ let bg = cQ._4
534+ let cR = valueOrElse(getInteger(ae(ca, bo)), 0)
535+ ((bn + makeString([bo, toString(bq), toString(cR)], ":")) + "_")
511536 }
512537
513- let bs = aV
514- let bt = size(bs)
515- let bu = ""
516- func bv (bw,bx) = if ((bx >= bt))
517- then bw
518- else ca(bw, bs[bx])
538+ let bt = aW
539+ let bu = size(bt)
540+ let bv = ""
541+ func bw (bx,by) = if ((by >= bu))
542+ then bx
543+ else cj(bx, bt[by])
519544
520- func by (bw,bx) = if ((bx >= bt))
521- then bw
545+ func bz (bx,by) = if ((by >= bu))
546+ then bx
522547 else throw("List size exceeds 10")
523548
524- by(bv(bv(bv(bv(bv(bv(bv(bv(bv(bv(bu, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
549+ bz(bw(bw(bw(bw(bw(bw(bw(bw(bw(bw(bv, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
525550 }
526- $Tuple2(nil, dropRight(cF, 1))
551+ $Tuple2(nil, dropRight(cO, 1))
527552 }
528553
529554
530555
531-@Callable(bG)
532-func surfStakingSYSREADONLY (cJ) = {
533- let cK = aj(S(), 0)
534- let cL = bD(cK)
535- if ((cJ == ""))
536- then $Tuple2(nil, [0, cK, 0, cL, 0])
556+@Callable(bU)
557+func surfStakingSYSREADONLY (cS,cT) = {
558+ let cU = ak(T(), 0)
559+ let cV = bE(cU)
560+ if ((cS == ""))
561+ then $Tuple2(nil, [0, cU, 0, cV, 0, height, height])
537562 else {
538- let N = an(cJ)
539- let cM = valueOrElse(aS(N), $Tuple3(true, 0, 0))
540- let bi = cM._1
541- let cN = cM._2
542- let bZ = cM._3
543- let cO = bD(cN)
544- $Tuple2(nil, [cN, cK, cO, cL, bZ])
563+ let N = ao(cS)
564+ let cb = bO(N, cT)
565+ let bj = cb._1
566+ let bk = cb._2
567+ let bI = cb._3
568+ let bR = cb._4
569+ let bS = cb._5
570+ let cW = bk
571+ let cX = bE(cW)
572+ $Tuple2(nil, [cW, cU, cX, cV, bI, bS])
545573 }
546574 }
547575
548576
549577
550-@Callable(bG)
578+@Callable(bU)
551579 func configSYSREADONLY () = {
552- let cP = getIntegerValue(K())
553- let cQ = (60 * c)
554- let cR = (1440 * 14)
555- let cS = 1200000
556- $Tuple2(nil, [cP, cQ, cR, cS])
580+ let cY = getIntegerValue(K())
581+ let cZ = (60 * c)
582+ let da = (1440 * 14)
583+ let db = 1150000
584+ $Tuple2(nil, [cY, cZ, da, db])
557585 }
558586
559587

github/deemru/w8io/026f985 
187.13 ms