tx · 9St1E3jNK57fghZT9cW1HjuSCmGpXLgrB3YMxWo6praB 3N55kCyUFy8M2ooKRwierKnP7L6viqzScNn: -0.03500000 Waves 2022.10.12 17:09 [2269237] smart account 3N55kCyUFy8M2ooKRwierKnP7L6viqzScNn > SELF 0.00000000 Waves
{ "type": 13, "id": "9St1E3jNK57fghZT9cW1HjuSCmGpXLgrB3YMxWo6praB", "fee": 3500000, "feeAssetId": null, "timestamp": 1665583718910, "version": 1, "sender": "3N55kCyUFy8M2ooKRwierKnP7L6viqzScNn", "senderPublicKey": "HpuFV1RhaXZ5gaJNgeLjyAKy3D5q7fMKdNFYYbPDafnb", "proofs": [ "5SjNhrKnmPBbiamfhvxz84fhjBgAF4Rjm6DL2rSYbMgB31riAX5NZDqpVXacwFrAq2MCQ3CAyRrpBD2gxSms3tKV" ], "script": "base64:BgJ7CAISAwoBCBIAEgQKAgEEEgMKAQESBAoCAQQSBQoDCAEBEgASBAoCAQESAwoBARIECgIICBIAEgMKAQgSBQoDAQEBEgQKAgEBEgQKAggBEgQKAggIEgsKCQgBAQIBAggEBBIGCgQICAEIEgASAwoBARIDCgEBEgQKAggBUgAKbFBkZWNpbWFscwAIAAZzY2FsZTgAgMLXLwAMc2NhbGU4QmlnSW50CQC2AgEAgMLXLwAHc2NhbGUxOAkAtgIBAICAkLu61q3wDQAKemVyb0JpZ0ludAkAtgIBAAAABGJpZzAJALYCAQAAAARiaWcxCQC2AgEAAQAEYmlnMgkAtgIBAAEAC3dhdmVzU3RyaW5nAgVXQVZFUwADU0VQAgJfXwAKUG9vbEFjdGl2ZQABAA9Qb29sUHV0RGlzYWJsZWQAAgATUG9vbE1hdGNoZXJEaXNhYmxlZAADAAxQb29sU2h1dGRvd24ABAAOaWR4UG9vbEFkZHJlc3MAAQANaWR4UG9vbFN0YXR1cwACABBpZHhQb29sTFBBc3NldElkAAMADWlkeEFtdEFzc2V0SWQABAAPaWR4UHJpY2VBc3NldElkAAUADmlkeEFtdEFzc2V0RGNtAAYAEGlkeFByaWNlQXNzZXREY20ABwAOaWR4SUFtdEFzc2V0SWQACAAQaWR4SVByaWNlQXNzZXRJZAAJAA1pZHhMUEFzc2V0RGNtAAoAEmlkeFBvb2xBbXRBc3NldEFtdAABABRpZHhQb29sUHJpY2VBc3NldEFtdAACABFpZHhQb29sTFBBc3NldEFtdAADABlpZHhGYWN0b3J5U3Rha2luZ0NvbnRyYWN0AAEAGmlkeEZhY3RvcnlTbGlwcGFnZUNvbnRyYWN0AAcBBXRvWDE4AgdvcmlnVmFsDW9yaWdTY2FsZU11bHQJALwCAwkAtgIBBQdvcmlnVmFsBQdzY2FsZTE4CQC2AgEFDW9yaWdTY2FsZU11bHQBB2Zyb21YMTgCA3ZhbA9yZXN1bHRTY2FsZU11bHQJAKADAQkAvAIDBQN2YWwJALYCAQUPcmVzdWx0U2NhbGVNdWx0BQdzY2FsZTE4AQd0b1NjYWxlAwNhbXQIcmVzU2NhbGUIY3VyU2NhbGUJAGsDBQNhbXQFCHJlc1NjYWxlBQhjdXJTY2FsZQEDYWJzAQN2YWwDCQC/AgIFCnplcm9CaWdJbnQFA3ZhbAkAvgIBBQN2YWwFA3ZhbAECZmMAAhMlc19fZmFjdG9yeUNvbnRyYWN0AQNtcGsAAhQlc19fbWFuYWdlclB1YmxpY0tleQEEcG1wawACGyVzX19wZW5kaW5nTWFuYWdlclB1YmxpY0tleQECcGwAAhElcyVzX19wcmljZV9fbGFzdAECcGgCAWgJdGltZXN0YW1wCQC5CQIJAMwIAgIYJXMlcyVkJWRfX3ByaWNlX19oaXN0b3J5CQDMCAIJAKQDAQUBaAkAzAgCCQCkAwEFCXRpbWVzdGFtcAUDbmlsBQNTRVABA3BhdQILdXNlckFkZHJlc3MEdHhJZAkArAICCQCsAgIJAKwCAgILJXMlcyVzX19QX18FC3VzZXJBZGRyZXNzAgJfXwUEdHhJZAEDZ2F1Agt1c2VyQWRkcmVzcwR0eElkCQCsAgIJAKwCAgkArAICAgslcyVzJXNfX0dfXwULdXNlckFkZHJlc3MCAl9fBQR0eElkAQJhYQACDyVzX19hbW91bnRBc3NldAECcGEAAg4lc19fcHJpY2VBc3NldAEQa2V5RmFjdG9yeUNvbmZpZwACESVzX19mYWN0b3J5Q29uZmlnAQ1rZXlNYXRjaGVyUHViAAIYJXMlc19fbWF0Y2hlcl9fcHVibGljS2V5ASlrZXlNYXBwaW5nUG9vbENvbnRyYWN0QWRkcmVzc1RvUG9vbEFzc2V0cwETcG9vbENvbnRyYWN0QWRkcmVzcwkArAICCQCsAgICCCVzJXMlc19fBRNwb29sQ29udHJhY3RBZGRyZXNzAiBfX21hcHBpbmdzX19wb29sQ29udHJhY3QyTHBBc3NldAENa2V5UG9vbENvbmZpZwIJaUFtdEFzc2V0C2lQcmljZUFzc2V0CQCsAgIJAKwCAgkArAICCQCsAgICCCVkJWQlc19fBQlpQW10QXNzZXQCAl9fBQtpUHJpY2VBc3NldAIIX19jb25maWcBH2tleU1hcHBpbmdzQmFzZUFzc2V0MmludGVybmFsSWQBDGJhc2VBc3NldFN0cgkArAICAiglcyVzJXNfX21hcHBpbmdzX19iYXNlQXNzZXQyaW50ZXJuYWxJZF9fBQxiYXNlQXNzZXRTdHIBE2tleUFsbFBvb2xzU2h1dGRvd24AAgwlc19fc2h1dGRvd24BDWtleVBvb2xXZWlnaHQBD2NvbnRyYWN0QWRkcmVzcwkArAICAhIlcyVzX19wb29sV2VpZ2h0X18FD2NvbnRyYWN0QWRkcmVzcwEWa2V5QWxsb3dlZExwU2NyaXB0SGFzaAACFyVzX19hbGxvd2VkTHBTY3JpcHRIYXNoAQ90aHJvd09yZGVyRXJyb3IDCm9yZGVyVmFsaWQLc2VuZGVyVmFsaWQMbWF0Y2hlclZhbGlkCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICJG9yZGVyIHZhbGlkYXRpb24gZmFpbGVkOiBvcmRlclZhbGlkPQkApQMBBQpvcmRlclZhbGlkAg0gc2VuZGVyVmFsaWQ9CQClAwEFC3NlbmRlclZhbGlkAg4gbWF0Y2hlclZhbGlkPQkApQMBBQxtYXRjaGVyVmFsaWQBD2dldFN0cmluZ09yRmFpbAIHYWRkcmVzcwNrZXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQdhZGRyZXNzBQNrZXkJALkJAgkAzAgCAgptYW5kYXRvcnkgCQDMCAIJAKUIAQUHYWRkcmVzcwkAzAgCAgEuCQDMCAIFA2tleQkAzAgCAg8gaXMgbm90IGRlZmluZWQFA25pbAIAAQxnZXRJbnRPckZhaWwCB2FkZHJlc3MDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUHYWRkcmVzcwUDa2V5CQC5CQIJAMwIAgIKbWFuZGF0b3J5IAkAzAgCCQClCAEFB2FkZHJlc3MJAMwIAgIBLgkAzAgCBQNrZXkJAMwIAgIPIGlzIG5vdCBkZWZpbmVkBQNuaWwCAAEIdGhyb3dFcnIBA21zZwkAAgEJALkJAgkAzAgCAghscC5yaWRlOgkAzAgCBQNtc2cFA25pbAIBIAAPZmFjdG9yeUNvbnRyYWN0CQERQGV4dHJOYXRpdmUoMTA2MikBCQEPZ2V0U3RyaW5nT3JGYWlsAgUEdGhpcwkBAmZjAAEQaXNHbG9iYWxTaHV0ZG93bgAJAQt2YWx1ZU9yRWxzZQIJAJsIAgUPZmFjdG9yeUNvbnRyYWN0CQETa2V5QWxsUG9vbHNTaHV0ZG93bgAHARNnZXRNYXRjaGVyUHViT3JGYWlsAAkA2QQBCQEPZ2V0U3RyaW5nT3JGYWlsAgUPZmFjdG9yeUNvbnRyYWN0CQENa2V5TWF0Y2hlclB1YgABDWdldFBvb2xDb25maWcABAhhbXRBc3NldAkBD2dldFN0cmluZ09yRmFpbAIFBHRoaXMJAQJhYQAECnByaWNlQXNzZXQJAQ9nZXRTdHJpbmdPckZhaWwCBQR0aGlzCQECcGEABAtpUHJpY2VBc3NldAkBDGdldEludE9yRmFpbAIFD2ZhY3RvcnlDb250cmFjdAkBH2tleU1hcHBpbmdzQmFzZUFzc2V0MmludGVybmFsSWQBBQpwcmljZUFzc2V0BAlpQW10QXNzZXQJAQxnZXRJbnRPckZhaWwCBQ9mYWN0b3J5Q29udHJhY3QJAR9rZXlNYXBwaW5nc0Jhc2VBc3NldDJpbnRlcm5hbElkAQUIYW10QXNzZXQJALUJAgkBD2dldFN0cmluZ09yRmFpbAIFD2ZhY3RvcnlDb250cmFjdAkBDWtleVBvb2xDb25maWcCCQCkAwEFCWlBbXRBc3NldAkApAMBBQtpUHJpY2VBc3NldAUDU0VQAQxwYXJzZUFzc2V0SWQBBWlucHV0AwkAAAIFBWlucHV0BQt3YXZlc1N0cmluZwUEdW5pdAkA2QQBBQVpbnB1dAEPYXNzZXRJZFRvU3RyaW5nAQVpbnB1dAMJAAACBQVpbnB1dAUEdW5pdAULd2F2ZXNTdHJpbmcJANgEAQkBBXZhbHVlAQUFaW5wdXQBD3BhcnNlUG9vbENvbmZpZwEKcG9vbENvbmZpZwkAmQoHCQERQGV4dHJOYXRpdmUoMTA2MikBCQCRAwIFCnBvb2xDb25maWcFDmlkeFBvb2xBZGRyZXNzCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKcG9vbENvbmZpZwUNaWR4UG9vbFN0YXR1cwkA2QQBCQCRAwIFCnBvb2xDb25maWcFEGlkeFBvb2xMUEFzc2V0SWQJAQxwYXJzZUFzc2V0SWQBCQCRAwIFCnBvb2xDb25maWcFDWlkeEFtdEFzc2V0SWQJAQxwYXJzZUFzc2V0SWQBCQCRAwIFCnBvb2xDb25maWcFD2lkeFByaWNlQXNzZXRJZAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCnBvb2xDb25maWcFDmlkeEFtdEFzc2V0RGNtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKcG9vbENvbmZpZwUQaWR4UHJpY2VBc3NldERjbQEQZ2V0RmFjdG9yeUNvbmZpZwAJALUJAgkBD2dldFN0cmluZ09yRmFpbAIFD2ZhY3RvcnlDb250cmFjdAkBEGtleUZhY3RvcnlDb25maWcABQNTRVAAD3N0YWtpbmdDb250cmFjdAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgkBEGdldEZhY3RvcnlDb25maWcABRlpZHhGYWN0b3J5U3Rha2luZ0NvbnRyYWN0AhlpbmNvcnJlY3Qgc3Rha2luZyBhZGRyZXNzABBzbGlwcGFnZUNvbnRyYWN0CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCCQEQZ2V0RmFjdG9yeUNvbmZpZwAFGmlkeEZhY3RvcnlTbGlwcGFnZUNvbnRyYWN0AhlpbmNvcnJlY3Qgc3Rha2luZyBhZGRyZXNzARFkYXRhUHV0QWN0aW9uSW5mbwoNaW5BbXRBc3NldEFtdA9pblByaWNlQXNzZXRBbXQIb3V0THBBbXQFcHJpY2Udc2xpcHBhZ2VUb2xlcmFuY2VQYXNzZWRCeVVzZXIVc2xpcHBhZ2VUb2xlcmFuY2VSZWFsCHR4SGVpZ2h0C3R4VGltZXN0YW1wEnNsaXBhZ2VBbXRBc3NldEFtdBRzbGlwYWdlUHJpY2VBc3NldEFtdAkAuQkCCQDMCAICFCVkJWQlZCVkJWQlZCVkJWQlZCVkCQDMCAIJAKQDAQUNaW5BbXRBc3NldEFtdAkAzAgCCQCkAwEFD2luUHJpY2VBc3NldEFtdAkAzAgCCQCkAwEFCG91dExwQW10CQDMCAIJAKQDAQUFcHJpY2UJAMwIAgkApAMBBR1zbGlwcGFnZVRvbGVyYW5jZVBhc3NlZEJ5VXNlcgkAzAgCCQCkAwEFFXNsaXBwYWdlVG9sZXJhbmNlUmVhbAkAzAgCCQCkAwEFCHR4SGVpZ2h0CQDMCAIJAKQDAQULdHhUaW1lc3RhbXAJAMwIAgkApAMBBRJzbGlwYWdlQW10QXNzZXRBbXQJAMwIAgkApAMBBRRzbGlwYWdlUHJpY2VBc3NldEFtdAUDbmlsBQNTRVABEWRhdGFHZXRBY3Rpb25JbmZvBg5vdXRBbXRBc3NldEFtdBBvdXRQcmljZUFzc2V0QW10B2luTHBBbXQFcHJpY2UIdHhIZWlnaHQLdHhUaW1lc3RhbXAJALkJAgkAzAgCAgwlZCVkJWQlZCVkJWQJAMwIAgkApAMBBQ5vdXRBbXRBc3NldEFtdAkAzAgCCQCkAwEFEG91dFByaWNlQXNzZXRBbXQJAMwIAgkApAMBBQdpbkxwQW10CQDMCAIJAKQDAQUFcHJpY2UJAMwIAgkApAMBBQh0eEhlaWdodAkAzAgCCQCkAwEFC3R4VGltZXN0YW1wBQNuaWwFA1NFUAENZ2V0QWNjQmFsYW5jZQEHYXNzZXRJZAMJAAACBQdhc3NldElkAgVXQVZFUwgJAO8HAQUEdGhpcwlhdmFpbGFibGUJAPAHAgUEdGhpcwkA2QQBBQdhc3NldElkAQ9jYWxjUHJpY2VCaWdJbnQCCHByQW10WDE4CGFtQW10WDE4CQC8AgMFCHByQW10WDE4BQdzY2FsZTE4BQhhbUFtdFgxOAEQcHJpdmF0ZUNhbGNQcmljZQQKYW1Bc3NldERjbQpwckFzc2V0RGNtBWFtQW10BXByQW10BA5hbXRBc3NldEFtdFgxOAkBBXRvWDE4AgUFYW1BbXQFCmFtQXNzZXREY20EEHByaWNlQXNzZXRBbXRYMTgJAQV0b1gxOAIFBXByQW10BQpwckFzc2V0RGNtCQEPY2FsY1ByaWNlQmlnSW50AgUQcHJpY2VBc3NldEFtdFgxOAUOYW10QXNzZXRBbXRYMTgBCmNhbGNQcmljZXMDBWFtQW10BXByQW10BWxwQW10BANjZmcJAQ1nZXRQb29sQ29uZmlnAAQLYW10QXNzZXREY20JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQNjZmcFDmlkeEFtdEFzc2V0RGNtBA1wcmljZUFzc2V0RGNtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDY2ZnBRBpZHhQcmljZUFzc2V0RGNtBAhwcmljZVgxOAkBEHByaXZhdGVDYWxjUHJpY2UEBQthbXRBc3NldERjbQUNcHJpY2VBc3NldERjbQUFYW1BbXQFBXByQW10BAhhbUFtdFgxOAkBBXRvWDE4AgUFYW1BbXQFC2FtdEFzc2V0RGNtBAhwckFtdFgxOAkBBXRvWDE4AgUFcHJBbXQFDXByaWNlQXNzZXREY20ECGxwQW10WDE4CQEFdG9YMTgCBQVscEFtdAUGc2NhbGU4BBNscFByaWNlSW5BbUFzc2V0WDE4CQEPY2FsY1ByaWNlQmlnSW50AgUIYW1BbXRYMTgFCGxwQW10WDE4BBNscFByaWNlSW5QckFzc2V0WDE4CQEPY2FsY1ByaWNlQmlnSW50AgUIcHJBbXRYMTgFCGxwQW10WDE4CQDMCAIFCHByaWNlWDE4CQDMCAIFE2xwUHJpY2VJbkFtQXNzZXRYMTgJAMwIAgUTbHBQcmljZUluUHJBc3NldFgxOAUDbmlsAQ9jYWxjdWxhdGVQcmljZXMDBWFtQW10BXByQW10BWxwQW10BAZwcmljZXMJAQpjYWxjUHJpY2VzAwUFYW1BbXQFBXByQW10BQVscEFtdAkAzAgCCQEHZnJvbVgxOAIJAJEDAgUGcHJpY2VzAAAFBnNjYWxlOAkAzAgCCQEHZnJvbVgxOAIJAJEDAgUGcHJpY2VzAAEFBnNjYWxlOAkAzAgCCQEHZnJvbVgxOAIJAJEDAgUGcHJpY2VzAAIFBnNjYWxlOAUDbmlsARRlc3RpbWF0ZUdldE9wZXJhdGlvbgQGdHhJZDU4CnBtdEFzc2V0SWQIcG10THBBbXQLdXNlckFkZHJlc3MEA2NmZwkBDWdldFBvb2xDb25maWcABAlscEFzc2V0SWQJAJEDAgUDY2ZnBRBpZHhQb29sTFBBc3NldElkBAlhbUFzc2V0SWQJAJEDAgUDY2ZnBQ1pZHhBbXRBc3NldElkBAlwckFzc2V0SWQJAJEDAgUDY2ZnBQ9pZHhQcmljZUFzc2V0SWQECmFtQXNzZXREY20JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQNjZmcFDmlkeEFtdEFzc2V0RGNtBApwckFzc2V0RGNtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDY2ZnBRBpZHhQcmljZUFzc2V0RGNtBApwb29sU3RhdHVzCQCRAwIFA2NmZwUNaWR4UG9vbFN0YXR1cwQKbHBFbWlzc2lvbggJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBCQDZBAEFCWxwQXNzZXRJZAkArAICCQCsAgICBkFzc2V0IAUJbHBBc3NldElkAg4gZG9lc24ndCBleGlzdAhxdWFudGl0eQMJAQIhPQIFCWxwQXNzZXRJZAUKcG10QXNzZXRJZAkAAgECFUludmFsaWQgYXNzZXQgcGFzc2VkLgQJYW1CYWxhbmNlCQENZ2V0QWNjQmFsYW5jZQEFCWFtQXNzZXRJZAQMYW1CYWxhbmNlWDE4CQEFdG9YMTgCBQlhbUJhbGFuY2UFCmFtQXNzZXREY20ECXByQmFsYW5jZQkBDWdldEFjY0JhbGFuY2UBBQlwckFzc2V0SWQEDHByQmFsYW5jZVgxOAkBBXRvWDE4AgUJcHJCYWxhbmNlBQpwckFzc2V0RGNtBAtjdXJQcmljZVgxOAkBD2NhbGNQcmljZUJpZ0ludAIFDHByQmFsYW5jZVgxOAUMYW1CYWxhbmNlWDE4BAhjdXJQcmljZQkBB2Zyb21YMTgCBQtjdXJQcmljZVgxOAUGc2NhbGU4BAtwbXRMcEFtdFgxOAkBBXRvWDE4AgUIcG10THBBbXQFBnNjYWxlOAQNbHBFbWlzc2lvblgxOAkBBXRvWDE4AgUKbHBFbWlzc2lvbgUGc2NhbGU4BAtvdXRBbUFtdFgxOAkAvAIDBQxhbUJhbGFuY2VYMTgFC3BtdExwQW10WDE4BQ1scEVtaXNzaW9uWDE4BAtvdXRQckFtdFgxOAkAvAIDBQxwckJhbGFuY2VYMTgFC3BtdExwQW10WDE4BQ1scEVtaXNzaW9uWDE4BAhvdXRBbUFtdAkBB2Zyb21YMTgCBQtvdXRBbUFtdFgxOAUKYW1Bc3NldERjbQQIb3V0UHJBbXQJAQdmcm9tWDE4AgULb3V0UHJBbXRYMTgFCnByQXNzZXREY20EBXN0YXRlAwkAAAIFBnR4SWQ1OAIABQNuaWwJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwULdXNlckFkZHJlc3MFCG91dEFtQW10AwkAAAIFCWFtQXNzZXRJZAIFV0FWRVMFBHVuaXQJANkEAQUJYW1Bc3NldElkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFC3VzZXJBZGRyZXNzBQhvdXRQckFtdAMJAAACBQlwckFzc2V0SWQCBVdBVkVTBQR1bml0CQDZBAEFCXByQXNzZXRJZAkAzAgCCQELU3RyaW5nRW50cnkCCQEDZ2F1AgkApQgBBQt1c2VyQWRkcmVzcwUGdHhJZDU4CQERZGF0YUdldEFjdGlvbkluZm8GBQhvdXRBbUFtdAUIb3V0UHJBbXQFCHBtdExwQW10BQhjdXJQcmljZQUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAnBsAAUIY3VyUHJpY2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJwaAIFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAFCGN1clByaWNlBQNuaWwJAJwKCgUIb3V0QW1BbXQFCG91dFByQW10BQlhbUFzc2V0SWQFCXByQXNzZXRJZAUJYW1CYWxhbmNlBQlwckJhbGFuY2UFCmxwRW1pc3Npb24FC2N1clByaWNlWDE4BQpwb29sU3RhdHVzBQVzdGF0ZQEUZXN0aW1hdGVQdXRPcGVyYXRpb24JBnR4SWQ1OBFzbGlwcGFnZVRvbGVyYW5jZQxpbkFtQXNzZXRBbXQLaW5BbUFzc2V0SWQMaW5QckFzc2V0QW10C2luUHJBc3NldElkC3VzZXJBZGRyZXNzCmlzRXZhbHVhdGUGZW1pdExwBANjZmcJAQ1nZXRQb29sQ29uZmlnAAQJbHBBc3NldElkCQDZBAEJAJEDAgUDY2ZnBRBpZHhQb29sTFBBc3NldElkBAxhbUFzc2V0SWRTdHIJAJEDAgUDY2ZnBQ1pZHhBbXRBc3NldElkBAxwckFzc2V0SWRTdHIJAJEDAgUDY2ZnBQ9pZHhQcmljZUFzc2V0SWQEC2lBbXRBc3NldElkCQCRAwIFA2NmZwUOaWR4SUFtdEFzc2V0SWQEDWlQcmljZUFzc2V0SWQJAJEDAgUDY2ZnBRBpZHhJUHJpY2VBc3NldElkBAthbXRBc3NldERjbQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFA2NmZwUOaWR4QW10QXNzZXREY20EDXByaWNlQXNzZXREY20JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQNjZmcFEGlkeFByaWNlQXNzZXREY20ECnBvb2xTdGF0dXMJAJEDAgUDY2ZnBQ1pZHhQb29sU3RhdHVzBApscEVtaXNzaW9uCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFCWxwQXNzZXRJZAkArAICCQCsAgICBkFzc2V0IAkA2AQBBQlscEFzc2V0SWQCDiBkb2Vzbid0IGV4aXN0CHF1YW50aXR5BA5pbkFtQXNzZXRJZFN0cgkA2AQBCQELdmFsdWVPckVsc2UCBQtpbkFtQXNzZXRJZAkA2QQBAgVXQVZFUwQOaW5QckFzc2V0SWRTdHIJANgEAQkBC3ZhbHVlT3JFbHNlAgULaW5QckFzc2V0SWQJANkEAQIFV0FWRVMDAwkBAiE9AgUMYW1Bc3NldElkU3RyBQ5pbkFtQXNzZXRJZFN0cgYJAQIhPQIFDHByQXNzZXRJZFN0cgUOaW5QckFzc2V0SWRTdHIJAAIBAiJJbnZhbGlkIGFtdCBvciBwcmljZSBhc3NldCBwYXNzZWQuBAlhbUJhbGFuY2UDBQppc0V2YWx1YXRlCQENZ2V0QWNjQmFsYW5jZQEFDGFtQXNzZXRJZFN0cgkAZQIJAQ1nZXRBY2NCYWxhbmNlAQUMYW1Bc3NldElkU3RyBQxpbkFtQXNzZXRBbXQECXByQmFsYW5jZQMFCmlzRXZhbHVhdGUJAQ1nZXRBY2NCYWxhbmNlAQUMcHJBc3NldElkU3RyCQBlAgkBDWdldEFjY0JhbGFuY2UBBQxwckFzc2V0SWRTdHIFDGluUHJBc3NldEFtdAQPaW5BbUFzc2V0QW10WDE4CQEFdG9YMTgCBQxpbkFtQXNzZXRBbXQFC2FtdEFzc2V0RGNtBA9pblByQXNzZXRBbXRYMTgJAQV0b1gxOAIFDGluUHJBc3NldEFtdAUNcHJpY2VBc3NldERjbQQMdXNlclByaWNlWDE4CQEPY2FsY1ByaWNlQmlnSW50AgUPaW5QckFzc2V0QW10WDE4BQ9pbkFtQXNzZXRBbXRYMTgEDGFtQmFsYW5jZVgxOAkBBXRvWDE4AgUJYW1CYWxhbmNlBQthbXRBc3NldERjbQQMcHJCYWxhbmNlWDE4CQEFdG9YMTgCBQlwckJhbGFuY2UFDXByaWNlQXNzZXREY20EA3JlcwMJAAACBQpscEVtaXNzaW9uAAAEC2N1clByaWNlWDE4BQp6ZXJvQmlnSW50BAtzbGlwcGFnZVgxOAUKemVyb0JpZ0ludAQIbHBBbXRYMTgJAHYGCQC5AgIFD2luQW1Bc3NldEFtdFgxOAUPaW5QckFzc2V0QW10WDE4AAAJALYCAQAFAAEAAAUERE9XTgkAlwoFCQEHZnJvbVgxOAIFCGxwQW10WDE4BQZzY2FsZTgJAQdmcm9tWDE4AgUPaW5BbUFzc2V0QW10WDE4BQthbXRBc3NldERjbQkBB2Zyb21YMTgCBQ9pblByQXNzZXRBbXRYMTgFDXByaWNlQXNzZXREY20JAQ9jYWxjUHJpY2VCaWdJbnQCCQC3AgIFDHByQmFsYW5jZVgxOAUPaW5QckFzc2V0QW10WDE4CQC3AgIFDGFtQmFsYW5jZVgxOAUPaW5BbUFzc2V0QW10WDE4BQtzbGlwcGFnZVgxOAQLY3VyUHJpY2VYMTgJAQ9jYWxjUHJpY2VCaWdJbnQCBQxwckJhbGFuY2VYMTgFDGFtQmFsYW5jZVgxOAQLc2xpcHBhZ2VYMTgJALwCAwkBA2FicwEJALgCAgULY3VyUHJpY2VYMTgFDHVzZXJQcmljZVgxOAUHc2NhbGUxOAULY3VyUHJpY2VYMTgEFHNsaXBwYWdlVG9sZXJhbmNlWDE4CQEFdG9YMTgCBRFzbGlwcGFnZVRvbGVyYW5jZQUGc2NhbGU4AwMJAQIhPQIFC2N1clByaWNlWDE4BQp6ZXJvQmlnSW50CQC/AgIFC3NsaXBwYWdlWDE4BRRzbGlwcGFnZVRvbGVyYW5jZVgxOAcJAAIBCQCsAgIJAKwCAgkArAICAg9QcmljZSBzbGlwcGFnZSAJAKYDAQULc2xpcHBhZ2VYMTgCHiBleGNlZWRlZCB0aGUgcGFzc2VkIGxpbWl0IG9mIAkApgMBBRRzbGlwcGFnZVRvbGVyYW5jZVgxOAQNbHBFbWlzc2lvblgxOAkBBXRvWDE4AgUKbHBFbWlzc2lvbgUGc2NhbGU4BApwclZpYUFtWDE4CQC8AgMFD2luQW1Bc3NldEFtdFgxOAULY3VyUHJpY2VYMTgFB3NjYWxlMTgECmFtVmlhUHJYMTgJALwCAwUPaW5QckFzc2V0QW10WDE4BQdzY2FsZTE4BQtjdXJQcmljZVgxOAQMZXhwZWN0ZWRBbXRzAwkAvwICBQpwclZpYUFtWDE4BQ9pblByQXNzZXRBbXRYMTgJAJQKAgUKYW1WaWFQclgxOAUPaW5QckFzc2V0QW10WDE4CQCUCgIFD2luQW1Bc3NldEFtdFgxOAUKcHJWaWFBbVgxOAQRZXhwQW10QXNzZXRBbXRYMTgIBQxleHBlY3RlZEFtdHMCXzEEE2V4cFByaWNlQXNzZXRBbXRYMTgIBQxleHBlY3RlZEFtdHMCXzIECGxwQW10WDE4CQC8AgMFDWxwRW1pc3Npb25YMTgFE2V4cFByaWNlQXNzZXRBbXRYMTgFDHByQmFsYW5jZVgxOAkAlwoFCQEHZnJvbVgxOAIFCGxwQW10WDE4BQZzY2FsZTgJAQdmcm9tWDE4AgURZXhwQW10QXNzZXRBbXRYMTgFC2FtdEFzc2V0RGNtCQEHZnJvbVgxOAIFE2V4cFByaWNlQXNzZXRBbXRYMTgFDXByaWNlQXNzZXREY20FC2N1clByaWNlWDE4BQtzbGlwcGFnZVgxOAQJY2FsY0xwQW10CAUDcmVzAl8xBA5jYWxjQW1Bc3NldFBtdAgFA3JlcwJfMgQOY2FsY1ByQXNzZXRQbXQIBQNyZXMCXzMECGN1clByaWNlCQEHZnJvbVgxOAIIBQNyZXMCXzQFBnNjYWxlOAQMc2xpcHBhZ2VDYWxjCQEHZnJvbVgxOAIIBQNyZXMCXzUFBnNjYWxlOAMJAGcCAAAFCWNhbGNMcEFtdAkAAgECNkludmFsaWQgY2FsY3VsYXRpb25zLiBMUCBjYWxjdWxhdGVkIGlzIGxlc3MgdGhhbiB6ZXJvLgQJZW1pdExwQW10AwkBASEBBQZlbWl0THAAAAUJY2FsY0xwQW10BAZhbURpZmYJAGUCBQxpbkFtQXNzZXRBbXQFDmNhbGNBbUFzc2V0UG10BAZwckRpZmYJAGUCBQxpblByQXNzZXRBbXQFDmNhbGNQckFzc2V0UG10BAtjb21tb25TdGF0ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAnBsAAUIY3VyUHJpY2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJwaAIFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAFCGN1clByaWNlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQNwYXUCBQt1c2VyQWRkcmVzcwUGdHhJZDU4CQERZGF0YVB1dEFjdGlvbkluZm8KBQ5jYWxjQW1Bc3NldFBtdAUOY2FsY1ByQXNzZXRQbXQFCWVtaXRMcEFtdAUIY3VyUHJpY2UFEXNsaXBwYWdlVG9sZXJhbmNlBQxzbGlwcGFnZUNhbGMFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAFBmFtRGlmZgUGcHJEaWZmBQNuaWwJAJ8KDQUJY2FsY0xwQW10BQllbWl0THBBbXQFCGN1clByaWNlBQlhbUJhbGFuY2UFCXByQmFsYW5jZQUKbHBFbWlzc2lvbgUJbHBBc3NldElkBQpwb29sU3RhdHVzBQtjb21tb25TdGF0ZQUGYW1EaWZmBQZwckRpZmYFC2luQW1Bc3NldElkBQtpblByQXNzZXRJZAEbdmFsaWRhdGVNYXRjaGVyT3JkZXJBbGxvd2VkAQVvcmRlcgQDY2ZnCQENZ2V0UG9vbENvbmZpZwAECmFtdEFzc2V0SWQJAJEDAgUDY2ZnBQ1pZHhBbXRBc3NldElkBAxwcmljZUFzc2V0SWQJAJEDAgUDY2ZnBQ9pZHhQcmljZUFzc2V0SWQECnBvb2xTdGF0dXMJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQNjZmcFDWlkeFBvb2xTdGF0dXMEC2FtdEFzc2V0RGNtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDY2ZnBQ5pZHhBbXRBc3NldERjbQQNcHJpY2VBc3NldERjbQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFA2NmZwUQaWR4UHJpY2VBc3NldERjbQQSYWNjQW10QXNzZXRCYWxhbmNlCQENZ2V0QWNjQmFsYW5jZQEFCmFtdEFzc2V0SWQEFGFjY1ByaWNlQXNzZXRCYWxhbmNlCQENZ2V0QWNjQmFsYW5jZQEFDHByaWNlQXNzZXRJZAQLY3VyUHJpY2VYMTgDCQAAAggFBW9yZGVyCW9yZGVyVHlwZQUDQnV5CQEQcHJpdmF0ZUNhbGNQcmljZQQFC2FtdEFzc2V0RGNtBQ1wcmljZUFzc2V0RGNtCQBkAgUSYWNjQW10QXNzZXRCYWxhbmNlCAUFb3JkZXIGYW1vdW50BRRhY2NQcmljZUFzc2V0QmFsYW5jZQkBEHByaXZhdGVDYWxjUHJpY2UEBQthbXRBc3NldERjbQUNcHJpY2VBc3NldERjbQkAZQIFEmFjY0FtdEFzc2V0QmFsYW5jZQgFBW9yZGVyBmFtb3VudAUUYWNjUHJpY2VBc3NldEJhbGFuY2UECGN1clByaWNlCQEHZnJvbVgxOAIFC2N1clByaWNlWDE4BQZzY2FsZTgDAwMJARBpc0dsb2JhbFNodXRkb3duAAYJAAACBQpwb29sU3RhdHVzBRNQb29sTWF0Y2hlckRpc2FibGVkBgkAAAIFCnBvb2xTdGF0dXMFDFBvb2xTaHV0ZG93bgkAAgECHEV4Y2hhbmdlIG9wZXJhdGlvbnMgZGlzYWJsZWQEDW9yZGVyQW10QXNzZXQICAUFb3JkZXIJYXNzZXRQYWlyC2Ftb3VudEFzc2V0BBBvcmRlckFtdEFzc2V0U3RyAwkAAAIFDW9yZGVyQW10QXNzZXQFBHVuaXQCBVdBVkVTCQDYBAEJAQV2YWx1ZQEFDW9yZGVyQW10QXNzZXQED29yZGVyUHJpY2VBc3NldAgIBQVvcmRlcglhc3NldFBhaXIKcHJpY2VBc3NldAQSb3JkZXJQcmljZUFzc2V0U3RyAwkAAAIFD29yZGVyUHJpY2VBc3NldAUEdW5pdAIFV0FWRVMJANgEAQkBBXZhbHVlAQUPb3JkZXJQcmljZUFzc2V0AwMJAQIhPQIFEG9yZGVyQW10QXNzZXRTdHIFCmFtdEFzc2V0SWQGCQECIT0CBRJvcmRlclByaWNlQXNzZXRTdHIFDHByaWNlQXNzZXRJZAkAAgECE1dyb25nIG9yZGVyIGFzc2V0cy4ECm9yZGVyUHJpY2UIBQVvcmRlcgVwcmljZQQIcHJpY2VEY20JAGsDBQZzY2FsZTgFDXByaWNlQXNzZXREY20FC2FtdEFzc2V0RGNtBBBjYXN0ZWRPcmRlclByaWNlCQEHdG9TY2FsZQMFCm9yZGVyUHJpY2UFBnNjYWxlOAUIcHJpY2VEY20EEWlzT3JkZXJQcmljZVZhbGlkAwkAAAIIBQVvcmRlcglvcmRlclR5cGUFA0J1eQkAZwIFCGN1clByaWNlBRBjYXN0ZWRPcmRlclByaWNlCQBnAgUQY2FzdGVkT3JkZXJQcmljZQUIY3VyUHJpY2UGAQljb21tb25HZXQBAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAh1leGFjdGx5IDEgcGF5bWVudCBpcyBleHBlY3RlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAECnBtdEFzc2V0SWQJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAQGcG10QW10CAUDcG10BmFtb3VudAQDcmVzCQEUZXN0aW1hdGVHZXRPcGVyYXRpb24ECQDYBAEIBQFpDXRyYW5zYWN0aW9uSWQJANgEAQUKcG10QXNzZXRJZAUGcG10QW10CAUBaQZjYWxsZXIECG91dEFtQW10CAUDcmVzAl8xBAhvdXRQckFtdAgFA3JlcwJfMgQKcG9vbFN0YXR1cwkBDXBhcnNlSW50VmFsdWUBCAUDcmVzAl85BAVzdGF0ZQgFA3JlcwNfMTADAwkBEGlzR2xvYmFsU2h1dGRvd24ABgkAAAIFCnBvb2xTdGF0dXMFDFBvb2xTaHV0ZG93bgkAAgEJAKwCAgIsR2V0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluLiBTdGF0dXMgPSAJAKQDAQUKcG9vbFN0YXR1cwkAlwoFBQhvdXRBbUFtdAUIb3V0UHJBbXQFBnBtdEFtdAUKcG10QXNzZXRJZAUFc3RhdGUBCWNvbW1vblB1dAMBaRFzbGlwcGFnZVRvbGVyYW5jZQZlbWl0THADCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAIJAAIBAh9leGFjdGx5IDIgcGF5bWVudHMgYXJlIGV4cGVjdGVkBAphbUFzc2V0UG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAECnByQXNzZXRQbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAQQGZXN0UHV0CQEUZXN0aW1hdGVQdXRPcGVyYXRpb24JCQDYBAEIBQFpDXRyYW5zYWN0aW9uSWQFEXNsaXBwYWdlVG9sZXJhbmNlCAUKYW1Bc3NldFBtdAZhbW91bnQIBQphbUFzc2V0UG10B2Fzc2V0SWQIBQpwckFzc2V0UG10BmFtb3VudAgFCnByQXNzZXRQbXQHYXNzZXRJZAkApQgBCAUBaQZjYWxsZXIHBQZlbWl0THAECnBvb2xTdGF0dXMJAQ1wYXJzZUludFZhbHVlAQgFBmVzdFB1dAJfOAMDAwkBEGlzR2xvYmFsU2h1dGRvd24ABgkAAAIFCnBvb2xTdGF0dXMFD1Bvb2xQdXREaXNhYmxlZAYJAAACBQpwb29sU3RhdHVzBQxQb29sU2h1dGRvd24JAAIBCQCsAgICLFB1dCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbi4gU3RhdHVzID0gCQCkAwEFCnBvb2xTdGF0dXMFBmVzdFB1dAEEZW1pdAEGYW1vdW50BAdlbWl0SW52CQD8BwQFD2ZhY3RvcnlDb250cmFjdAIEZW1pdAkAzAgCBQZhbW91bnQFA25pbAUDbmlsAwkAAAIFB2VtaXRJbnYFB2VtaXRJbnYEDWVtaXRJbnZMZWdhY3kEByRtYXRjaDAFB2VtaXRJbnYDCQABAgUHJG1hdGNoMAIHQWRkcmVzcwQVbGVnYWN5RmFjdG9yeUNvbnRyYWN0BQckbWF0Y2gwCQD8BwQFFWxlZ2FjeUZhY3RvcnlDb250cmFjdAIEZW1pdAkAzAgCBQZhbW91bnQFA25pbAUDbmlsBQR1bml0AwkAAAIFDWVtaXRJbnZMZWdhY3kFDWVtaXRJbnZMZWdhY3kFBmFtb3VudAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEPY2FsY1B1dE9uZVRva2VuBBBwYXltZW50QW1vdW50UmF3DnBheW1lbnRBc3NldElkC3VzZXJBZGRyZXNzBHR4SWQEBmlzRXZhbAkAAAIFBHR4SWQFBHVuaXQEDSR0MDIxNDg1MjE2NjMJAQ9wYXJzZVBvb2xDb25maWcBCQENZ2V0UG9vbENvbmZpZwAEC3Bvb2xBZGRyZXNzCAUNJHQwMjE0ODUyMTY2MwJfMQQKcG9vbFN0YXR1cwgFDSR0MDIxNDg1MjE2NjMCXzIECWxwQXNzZXRJZAgFDSR0MDIxNDg1MjE2NjMCXzMEDWFtb3VudEFzc2V0SWQIBQ0kdDAyMTQ4NTIxNjYzAl80BAxwcmljZUFzc2V0SWQIBQ0kdDAyMTQ4NTIxNjYzAl81BBNhbW91bnRBc3NldERlY2ltYWxzCAUNJHQwMjE0ODUyMTY2MwJfNgQScHJpY2VBc3NldERlY2ltYWxzCAUNJHQwMjE0ODUyMTY2MwJfNwQNcGF5bWVudEFtb3VudAUQcGF5bWVudEFtb3VudFJhdwQKYmFsYW5jZVJhdwMJAAACBQ5wYXltZW50QXNzZXRJZAUNYW1vdW50QXNzZXRJZAkBDWdldEFjY0JhbGFuY2UBCQEPYXNzZXRJZFRvU3RyaW5nAQUNYW1vdW50QXNzZXRJZAMJAAACBQ5wYXltZW50QXNzZXRJZAUMcHJpY2VBc3NldElkCQENZ2V0QWNjQmFsYW5jZQEJAQ9hc3NldElkVG9TdHJpbmcBBQxwcmljZUFzc2V0SWQJAQh0aHJvd0VycgECDWludmFsaWQgYXNzZXQEEGFtb3VudFRvU3VidHJhY3QDBQZpc0V2YWwAAAUNcGF5bWVudEFtb3VudAQHYmFsYW5jZQkAZQIFCmJhbGFuY2VSYXcFEGFtb3VudFRvU3VidHJhY3QEDWJhbGFuY2VCaWdJbnQJALYCAQUHYmFsYW5jZQQMc3VwcGx5QmlnSW50CQC2AgEICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUJbHBBc3NldElkCQCsAgIJAKwCAgIGYXNzZXQgCQDYBAEFCWxwQXNzZXRJZAIOIGRvZXNuJ3QgZXhpc3QIcXVhbnRpdHkEDWRlcG9zaXRCaWdJbnQJALYCAQUNcGF5bWVudEFtb3VudAQLaXNzdWVBbW91bnQJALoCAgkAuQICBQxzdXBwbHlCaWdJbnQJALgCAgkBCnNxcnRCaWdJbnQECQC3AgIFDHNjYWxlOEJpZ0ludAkAugICCQC5AgIFDWRlcG9zaXRCaWdJbnQFDHNjYWxlOEJpZ0ludAUNYmFsYW5jZUJpZ0ludAAIAAgFBERPV04FDHNjYWxlOEJpZ0ludAUMc2NhbGU4QmlnSW50CQCgAwEFC2lzc3VlQW1vdW50AQ9jYWxjR2V0T25lVG9rZW4FCm91dEFzc2V0SWQNcGF5bWVudEFtb3VudA5wYXltZW50QXNzZXRJZAt1c2VyQWRkcmVzcwR0eElkBAZpc0V2YWwJAAACBQR0eElkBQR1bml0BA0kdDAyMjY3MTIyODQ5CQEPcGFyc2VQb29sQ29uZmlnAQkBDWdldFBvb2xDb25maWcABAtwb29sQWRkcmVzcwgFDSR0MDIyNjcxMjI4NDkCXzEECnBvb2xTdGF0dXMIBQ0kdDAyMjY3MTIyODQ5Al8yBAlscEFzc2V0SWQIBQ0kdDAyMjY3MTIyODQ5Al8zBA1hbW91bnRBc3NldElkCAUNJHQwMjI2NzEyMjg0OQJfNAQMcHJpY2VBc3NldElkCAUNJHQwMjI2NzEyMjg0OQJfNQQTYW1vdW50QXNzZXREZWNpbWFscwgFDSR0MDIyNjcxMjI4NDkCXzYEEnByaWNlQXNzZXREZWNpbWFscwgFDSR0MDIyNjcxMjI4NDkCXzcEBmNoZWNrcwkAzAgCAwkAAAIFDnBheW1lbnRBc3NldElkBQlscEFzc2V0SWQGCQACAQIQaW52YWxpZCBscCBhc3NldAUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBA1iYWxhbmNlQmlnSW50AwkAAAIFCm91dEFzc2V0SWQFDWFtb3VudEFzc2V0SWQJALYCAQkBDWdldEFjY0JhbGFuY2UBCQEPYXNzZXRJZFRvU3RyaW5nAQUNYW1vdW50QXNzZXRJZAMJAAACBQpvdXRBc3NldElkBQxwcmljZUFzc2V0SWQJALYCAQkBDWdldEFjY0JhbGFuY2UBCQEPYXNzZXRJZFRvU3RyaW5nAQUMcHJpY2VBc3NldElkCQEIdGhyb3dFcnIBAg1pbnZhbGlkIGFzc2V0BAxzdXBwbHlCaWdJbnQJALYCAQgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBBQlscEFzc2V0SWQJAKwCAgkArAICAgZhc3NldCAJANgEAQUJbHBBc3NldElkAg4gZG9lc24ndCBleGlzdAhxdWFudGl0eQQOcmVkZWVtZWRCaWdJbnQJALYCAQUNcGF5bWVudEFtb3VudAQGYW1vdW50CQC6AgIJALkCAgUNYmFsYW5jZUJpZ0ludAkAuAICBQxzY2FsZThCaWdJbnQJAHYGCQC4AgIFDHNjYWxlOEJpZ0ludAkAugICCQC5AgIFDnJlZGVlbWVkQmlnSW50BQxzY2FsZThCaWdJbnQFDHN1cHBseUJpZ0ludAAIBQRiaWcyAAAACAUERE9XTgUMc2NhbGU4QmlnSW50CQCgAwEFBmFtb3VudAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEWbWFuYWdlclB1YmxpY0tleU9yVW5pdAAEByRtYXRjaDAJAKIIAQkBA21wawADCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwCQDZBAEFAXMDCQABAgUHJG1hdGNoMAIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yAR1wZW5kaW5nTWFuYWdlclB1YmxpY0tleU9yVW5pdAAEByRtYXRjaDAJAKIIAQkBBHBtcGsAAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkA2QQBBQFzAwkAAQIFByRtYXRjaDACBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgELbXVzdE1hbmFnZXIBAWkEAnBkCQACAQIRUGVybWlzc2lvbiBkZW5pZWQEByRtYXRjaDAJARZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAJwawUHJG1hdGNoMAMJAAACCAUBaQ9jYWxsZXJQdWJsaWNLZXkFAnBrBgUCcGQDCQABAgUHJG1hdGNoMAIEVW5pdAMJAAACCAUBaQZjYWxsZXIFBHRoaXMGBQJwZAkAAgECC01hdGNoIGVycm9yFgFpAQpzZXRNYW5hZ2VyARdwZW5kaW5nTWFuYWdlclB1YmxpY0tleQQLY2hlY2tDYWxsZXIJAQttdXN0TWFuYWdlcgEFAWkDCQAAAgULY2hlY2tDYWxsZXIFC2NoZWNrQ2FsbGVyBBVjaGVja01hbmFnZXJQdWJsaWNLZXkJANkEAQUXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkDCQAAAgUVY2hlY2tNYW5hZ2VyUHVibGljS2V5BRVjaGVja01hbmFnZXJQdWJsaWNLZXkJAMwIAgkBC1N0cmluZ0VudHJ5AgkBBHBtcGsABRdwZW5kaW5nTWFuYWdlclB1YmxpY0tleQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDmNvbmZpcm1NYW5hZ2VyAAQCcG0JAR1wZW5kaW5nTWFuYWdlclB1YmxpY0tleU9yVW5pdAAEBWhhc1BNAwkBCWlzRGVmaW5lZAEFAnBtBgkAAgECEk5vIHBlbmRpbmcgbWFuYWdlcgMJAAACBQVoYXNQTQUFaGFzUE0EB2NoZWNrUE0DCQAAAggFAWkPY2FsbGVyUHVibGljS2V5CQEFdmFsdWUBBQJwbQYJAAIBAhtZb3UgYXJlIG5vdCBwZW5kaW5nIG1hbmFnZXIDCQAAAgUHY2hlY2tQTQUHY2hlY2tQTQkAzAgCCQELU3RyaW5nRW50cnkCCQEDbXBrAAkA2AQBCQEFdmFsdWUBBQJwbQkAzAgCCQELRGVsZXRlRW50cnkBCQEEcG1wawAFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQNwdXQCEXNsaXBwYWdlVG9sZXJhbmNlD3Nob3VsZEF1dG9TdGFrZQMJAGYCAAAFEXNsaXBwYWdlVG9sZXJhbmNlCQACAQIgSW52YWxpZCBzbGlwcGFnZVRvbGVyYW5jZSBwYXNzZWQEBmVzdFB1dAkBCWNvbW1vblB1dAMFAWkFEXNsaXBwYWdlVG9sZXJhbmNlBgQJZW1pdExwQW10CAUGZXN0UHV0Al8yBAlscEFzc2V0SWQIBQZlc3RQdXQCXzcEBXN0YXRlCAUGZXN0UHV0Al85BAZhbURpZmYIBQZlc3RQdXQDXzEwBAZwckRpZmYIBQZlc3RQdXQDXzExBARhbUlkCAUGZXN0UHV0A18xMgQEcHJJZAgFBmVzdFB1dANfMTMEB2VtaXRJbnYJAPwHBAUPZmFjdG9yeUNvbnRyYWN0AgRlbWl0CQDMCAIFCWVtaXRMcEFtdAUDbmlsBQNuaWwDCQAAAgUHZW1pdEludgUHZW1pdEludgQNZW1pdEludkxlZ2FjeQQHJG1hdGNoMAUHZW1pdEludgMJAAECBQckbWF0Y2gwAgdBZGRyZXNzBBVsZWdhY3lGYWN0b3J5Q29udHJhY3QFByRtYXRjaDAJAPwHBAUVbGVnYWN5RmFjdG9yeUNvbnRyYWN0AgRlbWl0CQDMCAIFCWVtaXRMcEFtdAUDbmlsBQNuaWwFBHVuaXQDCQAAAgUNZW1pdEludkxlZ2FjeQUNZW1pdEludkxlZ2FjeQQMc2xpcHBhZ2VBSW52AwkAZgIFBmFtRGlmZgAACQD8BwQFEHNsaXBwYWdlQ29udHJhY3QCA3B1dAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQRhbUlkBQZhbURpZmYFA25pbAUDbmlsAwkAAAIFDHNsaXBwYWdlQUludgUMc2xpcHBhZ2VBSW52BAxzbGlwcGFnZVBJbnYDCQBmAgUGcHJEaWZmAAAJAPwHBAUQc2xpcHBhZ2VDb250cmFjdAIDcHV0BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFBHBySWQFBnByRGlmZgUDbmlsBQNuaWwDCQAAAgUMc2xpcHBhZ2VQSW52BQxzbGlwcGFnZVBJbnYECmxwVHJhbnNmZXIDBQ9zaG91bGRBdXRvU3Rha2UEC3NscFN0YWtlSW52CQD8BwQFD3N0YWtpbmdDb250cmFjdAIFc3Rha2UFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUJbHBBc3NldElkBQllbWl0THBBbXQFA25pbAMJAAACBQtzbHBTdGFrZUludgULc2xwU3Rha2VJbnYFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFCWVtaXRMcEFtdAUJbHBBc3NldElkBQNuaWwJAM4IAgUFc3RhdGUFCmxwVHJhbnNmZXIJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEKcHV0Rm9yRnJlZQELbWF4U2xpcHBhZ2UDCQBmAgAABQttYXhTbGlwcGFnZQkAAgECFEludmFsaWQgdmFsdWUgcGFzc2VkBAZlc3RQdXQJAQljb21tb25QdXQDBQFpBQttYXhTbGlwcGFnZQcIBQZlc3RQdXQCXzkBaQEJcHV0T25lVGtuAgxtaW5PdXRBbW91bnQJYXV0b1N0YWtlBA0kdDAyNjc1NjI2OTM0CQEPcGFyc2VQb29sQ29uZmlnAQkBDWdldFBvb2xDb25maWcABAtwb29sQWRkcmVzcwgFDSR0MDI2NzU2MjY5MzQCXzEECnBvb2xTdGF0dXMIBQ0kdDAyNjc1NjI2OTM0Al8yBAlscEFzc2V0SWQIBQ0kdDAyNjc1NjI2OTM0Al8zBA1hbW91bnRBc3NldElkCAUNJHQwMjY3NTYyNjkzNAJfNAQMcHJpY2VBc3NldElkCAUNJHQwMjY3NTYyNjkzNAJfNQQTYW1vdW50QXNzZXREZWNpbWFscwgFDSR0MDI2NzU2MjY5MzQCXzYEEnByaWNlQXNzZXREZWNpbWFscwgFDSR0MDI2NzU2MjY5MzQCXzcEDWlzUHV0RGlzYWJsZWQDAwkBEGlzR2xvYmFsU2h1dGRvd24ABgkAAAIFCnBvb2xTdGF0dXMFD1Bvb2xQdXREaXNhYmxlZAYJAAACBQpwb29sU3RhdHVzBQxQb29sU2h1dGRvd24EBmNoZWNrcwkAzAgCAwkBASEBBQ1pc1B1dERpc2FibGVkBgkBCHRocm93RXJyAQIhcHV0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluCQDMCAIDCQAAAgkAkAMBCAUBaQhwYXltZW50cwABBgkBCHRocm93RXJyAQIeZXhhY3RseSAxIHBheW1lbnQgYXJlIGV4cGVjdGVkBQNuaWwDCQAAAgUGY2hlY2tzBQZjaGVja3MEB3BheW1lbnQJAJEDAggFAWkIcGF5bWVudHMAAAQOcGF5bWVudEFzc2V0SWQIBQdwYXltZW50B2Fzc2V0SWQEEHBheW1lbnRBbW91bnRSYXcIBQdwYXltZW50BmFtb3VudAQNcGF5bWVudEFtb3VudAUQcGF5bWVudEFtb3VudFJhdwQLdXNlckFkZHJlc3MIBQFpBmNhbGxlcgQEdHhJZAgFAWkNdHJhbnNhY3Rpb25JZAQKZW1pdEFtb3VudAQTZW1pdEFtb3VudEVzdGltYXRlZAkBD2NhbGNQdXRPbmVUb2tlbgQFEHBheW1lbnRBbW91bnRSYXcFDnBheW1lbnRBc3NldElkBQt1c2VyQWRkcmVzcwUEdHhJZAMDCQBmAgUMbWluT3V0QW1vdW50AAAJAGYCBQxtaW5PdXRBbW91bnQFE2VtaXRBbW91bnRFc3RpbWF0ZWQHCQACAQkAuQkCCQDMCAICH2Ftb3VudCB0byByZWNlaXZlIGlzIGxlc3MgdGhhbiAJAMwIAgkApAMBBQxtaW5PdXRBbW91bnQFA25pbAIABRNlbWl0QW1vdW50RXN0aW1hdGVkBAdlbWl0SW52CQEEZW1pdAEFCmVtaXRBbW91bnQDCQAAAgUHZW1pdEludgUHZW1pdEludgQKbHBUcmFuc2ZlcgMFCWF1dG9TdGFrZQQIc3Rha2VJbnYJAPwHBAUPc3Rha2luZ0NvbnRyYWN0AgVzdGFrZQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQlscEFzc2V0SWQFCmVtaXRBbW91bnQFA25pbAMJAAACBQhzdGFrZUludgUIc3Rha2VJbnYFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFCmVtaXRBbW91bnQFCWxwQXNzZXRJZAUDbmlsCQCUCgIFCmxwVHJhbnNmZXIFCmVtaXRBbW91bnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEJZ2V0T25lVGtuAwpvdXRBc3NldElkDG1pbk91dEFtb3VudA11bnN0YWtlQW1vdW50BA0kdDAyODE2NzI4MzQ1CQEPcGFyc2VQb29sQ29uZmlnAQkBDWdldFBvb2xDb25maWcABAtwb29sQWRkcmVzcwgFDSR0MDI4MTY3MjgzNDUCXzEECnBvb2xTdGF0dXMIBQ0kdDAyODE2NzI4MzQ1Al8yBAlscEFzc2V0SWQIBQ0kdDAyODE2NzI4MzQ1Al8zBA1hbW91bnRBc3NldElkCAUNJHQwMjgxNjcyODM0NQJfNAQMcHJpY2VBc3NldElkCAUNJHQwMjgxNjcyODM0NQJfNQQTYW1vdW50QXNzZXREZWNpbWFscwgFDSR0MDI4MTY3MjgzNDUCXzYEEnByaWNlQXNzZXREZWNpbWFscwgFDSR0MDI4MTY3MjgzNDUCXzcEDWlzR2V0RGlzYWJsZWQDCQEQaXNHbG9iYWxTaHV0ZG93bgAGCQAAAgUKcG9vbFN0YXR1cwUMUG9vbFNodXRkb3duBAZjaGVja3MJAMwIAgMJAQEhAQUNaXNHZXREaXNhYmxlZAYJAQh0aHJvd0VycgECIWdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbgkAzAgCAwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAQYJAQh0aHJvd0VycgECHmV4YWN0bHkgMSBwYXltZW50IGFyZSBleHBlY3RlZAUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBAdwYXltZW50CQCRAwIIBQFpCHBheW1lbnRzAAAEDnBheW1lbnRBc3NldElkCAUHcGF5bWVudAdhc3NldElkBA1wYXltZW50QW1vdW50CAUHcGF5bWVudAZhbW91bnQEC3VzZXJBZGRyZXNzCAUBaQZjYWxsZXIEBHR4SWQIBQFpDXRyYW5zYWN0aW9uSWQEBmFtb3VudAQPYW1vdW50RXN0aW1hdGVkCQEPY2FsY0dldE9uZVRva2VuBQkBDHBhcnNlQXNzZXRJZAEFCm91dEFzc2V0SWQFDXBheW1lbnRBbW91bnQFDnBheW1lbnRBc3NldElkBQt1c2VyQWRkcmVzcwUEdHhJZAMDCQBmAgUMbWluT3V0QW1vdW50AAAJAGYCBQxtaW5PdXRBbW91bnQFD2Ftb3VudEVzdGltYXRlZAcJAAIBCQC5CQIJAMwIAgIfYW1vdW50IHRvIHJlY2VpdmUgaXMgbGVzcyB0aGFuIAkAzAgCCQCkAwEFDG1pbk91dEFtb3VudAUDbmlsAgAFD2Ftb3VudEVzdGltYXRlZAQHYnVybkludgkA/AcEBQ9mYWN0b3J5Q29udHJhY3QCBGJ1cm4JAMwIAgUNcGF5bWVudEFtb3VudAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQ5wYXltZW50QXNzZXRJZAUNcGF5bWVudEFtb3VudAUDbmlsAwkAAAIFB2J1cm5JbnYFB2J1cm5JbnYEDWFzc2V0VHJhbnNmZXIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwULdXNlckFkZHJlc3MFBmFtb3VudAkBDHBhcnNlQXNzZXRJZAEFCm91dEFzc2V0SWQFA25pbAkAlAoCBQ1hc3NldFRyYW5zZmVyBQZhbW91bnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEDZ2V0AAQDcmVzCQEJY29tbW9uR2V0AQUBaQQJb3V0QW10QW10CAUDcmVzAl8xBAhvdXRQckFtdAgFA3JlcwJfMgQGcG10QW10CAUDcmVzAl8zBApwbXRBc3NldElkCAUDcmVzAl80BAVzdGF0ZQgFA3JlcwJfNQQUYnVybkxQQXNzZXRPbkZhY3RvcnkJAPwHBAUPZmFjdG9yeUNvbnRyYWN0AgRidXJuCQDMCAIFBnBtdEFtdAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQpwbXRBc3NldElkBQZwbXRBbXQFA25pbAMJAAACBRRidXJuTFBBc3NldE9uRmFjdG9yeQUUYnVybkxQQXNzZXRPbkZhY3RvcnkFBXN0YXRlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCWdldE5vTGVzcwISbm9MZXNzVGhlbkFtdEFzc2V0FG5vTGVzc1RoZW5QcmljZUFzc2V0BANyZXMJAQljb21tb25HZXQBBQFpBAhvdXRBbUFtdAgFA3JlcwJfMQQIb3V0UHJBbXQIBQNyZXMCXzIEBnBtdEFtdAgFA3JlcwJfMwQKcG10QXNzZXRJZAgFA3JlcwJfNAQFc3RhdGUIBQNyZXMCXzUDCQBmAgUSbm9MZXNzVGhlbkFtdEFzc2V0BQhvdXRBbUFtdAkAAgEJAKwCAgkArAICCQCsAgICHG5vTGVzc1RoZW5BbXRBc3NldCBmYWlsZWQ6ICAJAKQDAQUIb3V0QW1BbXQCAyA8IAkApAMBBRJub0xlc3NUaGVuQW10QXNzZXQDCQBmAgUUbm9MZXNzVGhlblByaWNlQXNzZXQFCG91dFByQW10CQACAQkArAICCQCsAgIJAKwCAgIdbm9MZXNzVGhlblByaWNlQXNzZXQgZmFpbGVkOiAJAKQDAQUIb3V0UHJBbXQCAyA8IAkApAMBBRRub0xlc3NUaGVuUHJpY2VBc3NldAQUYnVybkxQQXNzZXRPbkZhY3RvcnkJAPwHBAUPZmFjdG9yeUNvbnRyYWN0AgRidXJuCQDMCAIFBnBtdEFtdAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQpwbXRBc3NldElkBQZwbXRBbXQFA25pbAMJAAACBRRidXJuTFBBc3NldE9uRmFjdG9yeQUUYnVybkxQQXNzZXRPbkZhY3RvcnkFBXN0YXRlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDXVuc3Rha2VBbmRHZXQBBmFtb3VudAQNY2hlY2tQYXltZW50cwMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECGE5vIHBheW1lbnRzIGFyZSBleHBlY3RlZAYDCQAAAgUNY2hlY2tQYXltZW50cwUNY2hlY2tQYXltZW50cwQDY2ZnCQENZ2V0UG9vbENvbmZpZwAECWxwQXNzZXRJZAkA2QQBCQCRAwIFA2NmZwUQaWR4UG9vbExQQXNzZXRJZAQKdW5zdGFrZUludgkA/AcEBQ9zdGFraW5nQ29udHJhY3QCB3Vuc3Rha2UJAMwIAgkA2AQBBQlscEFzc2V0SWQJAMwIAgUGYW1vdW50BQNuaWwFA25pbAMJAAACBQp1bnN0YWtlSW52BQp1bnN0YWtlSW52BANyZXMJARRlc3RpbWF0ZUdldE9wZXJhdGlvbgQJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAkA2AQBBQlscEFzc2V0SWQFBmFtb3VudAgFAWkGY2FsbGVyBApwb29sU3RhdHVzCQENcGFyc2VJbnRWYWx1ZQEIBQNyZXMCXzkEBXN0YXRlCAUDcmVzA18xMAQPY2hlY2tQb29sU3RhdHVzAwMJARBpc0dsb2JhbFNodXRkb3duAAYJAAACBQpwb29sU3RhdHVzBQxQb29sU2h1dGRvd24JAAIBCQCsAgICLEdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbi4gU3RhdHVzID0gCQCkAwEFCnBvb2xTdGF0dXMGAwkAAAIFD2NoZWNrUG9vbFN0YXR1cwUPY2hlY2tQb29sU3RhdHVzBBRidXJuTFBBc3NldE9uRmFjdG9yeQkA/AcEBQ9mYWN0b3J5Q29udHJhY3QCBGJ1cm4JAMwIAgUGYW1vdW50BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFCWxwQXNzZXRJZAUGYW1vdW50BQNuaWwDCQAAAgUUYnVybkxQQXNzZXRPbkZhY3RvcnkFFGJ1cm5MUEFzc2V0T25GYWN0b3J5BQVzdGF0ZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQhhY3RpdmF0ZQILYW10QXNzZXRTdHINcHJpY2VBc3NldFN0cgMJAQIhPQIJAKUIAQgFAWkGY2FsbGVyCQClCAEFD2ZhY3RvcnlDb250cmFjdAkAAgECEnBlcm1pc3Npb25zIGRlbmllZAkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhYQAFC2FtdEFzc2V0U3RyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJwYQAFDXByaWNlQXNzZXRTdHIFA25pbAIHc3VjY2VzcwFpARxnZXRQb29sQ29uZmlnV3JhcHBlclJFQURPTkxZAAkAlAoCBQNuaWwJAQ1nZXRQb29sQ29uZmlnAAFpARxnZXRBY2NCYWxhbmNlV3JhcHBlclJFQURPTkxZAQdhc3NldElkCQCUCgIFA25pbAkBDWdldEFjY0JhbGFuY2UBBQdhc3NldElkAWkBGWNhbGNQcmljZXNXcmFwcGVyUkVBRE9OTFkDBWFtQW10BXByQW10BWxwQW10BAZwcmljZXMJAQpjYWxjUHJpY2VzAwUFYW1BbXQFBXByQW10BQVscEFtdAkAlAoCBQNuaWwJAMwIAgkApgMBCQCRAwIFBnByaWNlcwAACQDMCAIJAKYDAQkAkQMCBQZwcmljZXMAAQkAzAgCCQCmAwEJAJEDAgUGcHJpY2VzAAIFA25pbAFpARR0b1gxOFdyYXBwZXJSRUFET05MWQIHb3JpZ1ZhbA1vcmlnU2NhbGVNdWx0CQCUCgIFA25pbAkApgMBCQEFdG9YMTgCBQdvcmlnVmFsBQ1vcmlnU2NhbGVNdWx0AWkBFmZyb21YMThXcmFwcGVyUkVBRE9OTFkCA3ZhbA9yZXN1bHRTY2FsZU11bHQJAJQKAgUDbmlsCQEHZnJvbVgxOAIJAKcDAQUDdmFsBQ9yZXN1bHRTY2FsZU11bHQBaQEeY2FsY1ByaWNlQmlnSW50V3JhcHBlclJFQURPTkxZAghwckFtdFgxOAhhbUFtdFgxOAkAlAoCBQNuaWwJAKYDAQkBD2NhbGNQcmljZUJpZ0ludAIJAKcDAQUIcHJBbXRYMTgJAKcDAQUIYW1BbXRYMTgBaQEjZXN0aW1hdGVQdXRPcGVyYXRpb25XcmFwcGVyUkVBRE9OTFkJBnR4SWQ1OBFzbGlwcGFnZVRvbGVyYW5jZQxpbkFtQXNzZXRBbXQLaW5BbUFzc2V0SWQMaW5QckFzc2V0QW10C2luUHJBc3NldElkC3VzZXJBZGRyZXNzCmlzRXZhbHVhdGUGZW1pdExwCQCUCgIFA25pbAkBFGVzdGltYXRlUHV0T3BlcmF0aW9uCQUGdHhJZDU4BRFzbGlwcGFnZVRvbGVyYW5jZQUMaW5BbUFzc2V0QW10BQtpbkFtQXNzZXRJZAUMaW5QckFzc2V0QW10BQtpblByQXNzZXRJZAULdXNlckFkZHJlc3MFCmlzRXZhbHVhdGUFBmVtaXRMcAFpASNlc3RpbWF0ZUdldE9wZXJhdGlvbldyYXBwZXJSRUFET05MWQQGdHhJZDU4CnBtdEFzc2V0SWQIcG10THBBbXQLdXNlckFkZHJlc3MEA3JlcwkBFGVzdGltYXRlR2V0T3BlcmF0aW9uBAUGdHhJZDU4BQpwbXRBc3NldElkBQhwbXRMcEFtdAkBEUBleHRyTmF0aXZlKDEwNjIpAQULdXNlckFkZHJlc3MJAJQKAgUDbmlsCQCcCgoIBQNyZXMCXzEIBQNyZXMCXzIIBQNyZXMCXzMIBQNyZXMCXzQIBQNyZXMCXzUIBQNyZXMCXzYIBQNyZXMCXzcJAKYDAQgFA3JlcwJfOAgFA3JlcwJfOQgFA3JlcwNfMTABaQENc3RhdHNSRUFET05MWQAEA2NmZwkBDWdldFBvb2xDb25maWcABAlscEFzc2V0SWQJANkEAQkAkQMCBQNjZmcFEGlkeFBvb2xMUEFzc2V0SWQECmFtdEFzc2V0SWQJAJEDAgUDY2ZnBQ1pZHhBbXRBc3NldElkBAxwcmljZUFzc2V0SWQJAJEDAgUDY2ZnBQ9pZHhQcmljZUFzc2V0SWQEC2lBbXRBc3NldElkCQCRAwIFA2NmZwUOaWR4SUFtdEFzc2V0SWQEDWlQcmljZUFzc2V0SWQJAJEDAgUDY2ZnBRBpZHhJUHJpY2VBc3NldElkBAthbXRBc3NldERjbQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFA2NmZwUOaWR4QW10QXNzZXREY20EDXByaWNlQXNzZXREY20JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQNjZmcFEGlkeFByaWNlQXNzZXREY20EDXBvb2xMUEJhbGFuY2UICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUJbHBBc3NldElkCQCsAgIJAKwCAgIGQXNzZXQgCQDYBAEFCWxwQXNzZXRJZAIOIGRvZXNuJ3QgZXhpc3QIcXVhbnRpdHkEEmFjY0FtdEFzc2V0QmFsYW5jZQkBDWdldEFjY0JhbGFuY2UBBQphbXRBc3NldElkBBRhY2NQcmljZUFzc2V0QmFsYW5jZQkBDWdldEFjY0JhbGFuY2UBBQxwcmljZUFzc2V0SWQECnByaWNlc0xpc3QDCQAAAgUNcG9vbExQQmFsYW5jZQAACQDMCAIFCnplcm9CaWdJbnQJAMwIAgUKemVyb0JpZ0ludAkAzAgCBQp6ZXJvQmlnSW50BQNuaWwJAQpjYWxjUHJpY2VzAwUSYWNjQW10QXNzZXRCYWxhbmNlBRRhY2NQcmljZUFzc2V0QmFsYW5jZQUNcG9vbExQQmFsYW5jZQQIY3VyUHJpY2UAAAQPbHBBbXRBc3NldFNoYXJlCQEHZnJvbVgxOAIJAJEDAgUKcHJpY2VzTGlzdAABBQZzY2FsZTgEEWxwUHJpY2VBc3NldFNoYXJlCQEHZnJvbVgxOAIJAJEDAgUKcHJpY2VzTGlzdAACBQZzY2FsZTgECnBvb2xXZWlnaHQJAQV2YWx1ZQEJAJoIAgUPZmFjdG9yeUNvbnRyYWN0CQENa2V5UG9vbFdlaWdodAEJAKUIAQUEdGhpcwkAlAoCBQNuaWwJALkJAgkAzAgCAg4lZCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFEmFjY0FtdEFzc2V0QmFsYW5jZQkAzAgCCQCkAwEFFGFjY1ByaWNlQXNzZXRCYWxhbmNlCQDMCAIJAKQDAQUNcG9vbExQQmFsYW5jZQkAzAgCCQCkAwEFCGN1clByaWNlCQDMCAIJAKQDAQUPbHBBbXRBc3NldFNoYXJlCQDMCAIJAKQDAQURbHBQcmljZUFzc2V0U2hhcmUJAMwIAgkApAMBBQpwb29sV2VpZ2h0BQNuaWwFA1NFUAFpASBldmFsdWF0ZVB1dEJ5QW1vdW50QXNzZXRSRUFET05MWQEMaW5BbUFzc2V0QW10BANjZmcJAQ1nZXRQb29sQ29uZmlnAAQJbHBBc3NldElkCQDZBAEJAJEDAgUDY2ZnBRBpZHhQb29sTFBBc3NldElkBAxhbUFzc2V0SWRTdHIJAJEDAgUDY2ZnBQ1pZHhBbXRBc3NldElkBAlhbUFzc2V0SWQJANkEAQUMYW1Bc3NldElkU3RyBAxwckFzc2V0SWRTdHIJAJEDAgUDY2ZnBQ9pZHhQcmljZUFzc2V0SWQECXByQXNzZXRJZAkA2QQBBQxwckFzc2V0SWRTdHIEC2FtdEFzc2V0RGNtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDY2ZnBQ5pZHhBbXRBc3NldERjbQQNcHJpY2VBc3NldERjbQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFA2NmZwUQaWR4UHJpY2VBc3NldERjbQQKcG9vbFN0YXR1cwkAkQMCBQNjZmcFDWlkeFBvb2xTdGF0dXMEDXBvb2xMUEJhbGFuY2UICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUJbHBBc3NldElkCQCsAgIJAKwCAgIGQXNzZXQgCQDYBAEFCWxwQXNzZXRJZAIOIGRvZXNuJ3QgZXhpc3QIcXVhbnRpdHkEEmFjY0FtdEFzc2V0QmFsYW5jZQkBDWdldEFjY0JhbGFuY2UBBQxhbUFzc2V0SWRTdHIEFGFjY1ByaWNlQXNzZXRCYWxhbmNlCQENZ2V0QWNjQmFsYW5jZQEFDHByQXNzZXRJZFN0cgQOYW10QXNzZXRBbXRYMTgJAQV0b1gxOAIFEmFjY0FtdEFzc2V0QmFsYW5jZQULYW10QXNzZXREY20EEHByaWNlQXNzZXRBbXRYMTgJAQV0b1gxOAIFFGFjY1ByaWNlQXNzZXRCYWxhbmNlBQ1wcmljZUFzc2V0RGNtBAtjdXJQcmljZVgxOAMJAAACBQ1wb29sTFBCYWxhbmNlAAAFCnplcm9CaWdJbnQJAQ9jYWxjUHJpY2VCaWdJbnQCBRBwcmljZUFzc2V0QW10WDE4BQ5hbXRBc3NldEFtdFgxOAQPaW5BbUFzc2V0QW10WDE4CQEFdG9YMTgCBQxpbkFtQXNzZXRBbXQFC2FtdEFzc2V0RGNtBA9pblByQXNzZXRBbXRYMTgJALwCAwUPaW5BbUFzc2V0QW10WDE4BQtjdXJQcmljZVgxOAUHc2NhbGUxOAQMaW5QckFzc2V0QW10CQEHZnJvbVgxOAIFD2luUHJBc3NldEFtdFgxOAUNcHJpY2VBc3NldERjbQQGZXN0UHV0CQEUZXN0aW1hdGVQdXRPcGVyYXRpb24JAgAAoMIeBQxpbkFtQXNzZXRBbXQFCWFtQXNzZXRJZAUMaW5QckFzc2V0QW10BQlwckFzc2V0SWQCAAYHBAljYWxjTHBBbXQIBQZlc3RQdXQCXzEEDGN1clByaWNlQ2FsYwgFBmVzdFB1dAJfMwQJYW1CYWxhbmNlCAUGZXN0UHV0Al80BAlwckJhbGFuY2UIBQZlc3RQdXQCXzUECmxwRW1pc3Npb24IBQZlc3RQdXQCXzYJAJQKAgUDbmlsCQC5CQIJAMwIAgIQJWQlZCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFCWNhbGNMcEFtdAkAzAgCCQCkAwEJAQdmcm9tWDE4AgULY3VyUHJpY2VYMTgFBnNjYWxlOAkAzAgCCQCkAwEFCWFtQmFsYW5jZQkAzAgCCQCkAwEFCXByQmFsYW5jZQkAzAgCCQCkAwEFCmxwRW1pc3Npb24JAMwIAgUKcG9vbFN0YXR1cwkAzAgCCQCkAwEFDGluQW1Bc3NldEFtdAkAzAgCCQCkAwEFDGluUHJBc3NldEFtdAUDbmlsBQNTRVABaQEfZXZhbHVhdGVQdXRCeVByaWNlQXNzZXRSRUFET05MWQEMaW5QckFzc2V0QW10BANjZmcJAQ1nZXRQb29sQ29uZmlnAAQJbHBBc3NldElkCQDZBAEJAJEDAgUDY2ZnBRBpZHhQb29sTFBBc3NldElkBAxhbUFzc2V0SWRTdHIJAJEDAgUDY2ZnBQ1pZHhBbXRBc3NldElkBAlhbUFzc2V0SWQJANkEAQUMYW1Bc3NldElkU3RyBAxwckFzc2V0SWRTdHIJAJEDAgUDY2ZnBQ9pZHhQcmljZUFzc2V0SWQECXByQXNzZXRJZAkA2QQBBQxwckFzc2V0SWRTdHIEC2FtdEFzc2V0RGNtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDY2ZnBQ5pZHhBbXRBc3NldERjbQQNcHJpY2VBc3NldERjbQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFA2NmZwUQaWR4UHJpY2VBc3NldERjbQQKcG9vbFN0YXR1cwkAkQMCBQNjZmcFDWlkeFBvb2xTdGF0dXMEDXBvb2xMUEJhbGFuY2UICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUJbHBBc3NldElkCQCsAgIJAKwCAgIGQXNzZXQgCQDYBAEFCWxwQXNzZXRJZAIOIGRvZXNuJ3QgZXhpc3QIcXVhbnRpdHkEDGFtQmFsYW5jZVJhdwkBDWdldEFjY0JhbGFuY2UBBQxhbUFzc2V0SWRTdHIEDHByQmFsYW5jZVJhdwkBDWdldEFjY0JhbGFuY2UBBQxwckFzc2V0SWRTdHIED2FtQmFsYW5jZVJhd1gxOAkBBXRvWDE4AgUMYW1CYWxhbmNlUmF3BQthbXRBc3NldERjbQQPcHJCYWxhbmNlUmF3WDE4CQEFdG9YMTgCBQxwckJhbGFuY2VSYXcFDXByaWNlQXNzZXREY20EC2N1clByaWNlWDE4AwkAAAIFDXBvb2xMUEJhbGFuY2UAAAUKemVyb0JpZ0ludAkBD2NhbGNQcmljZUJpZ0ludAIFD3ByQmFsYW5jZVJhd1gxOAUPYW1CYWxhbmNlUmF3WDE4BA9pblByQXNzZXRBbXRYMTgJAQV0b1gxOAIFDGluUHJBc3NldEFtdAUNcHJpY2VBc3NldERjbQQPaW5BbUFzc2V0QW10WDE4CQC8AgMFD2luUHJBc3NldEFtdFgxOAUHc2NhbGUxOAULY3VyUHJpY2VYMTgEDGluQW1Bc3NldEFtdAkBB2Zyb21YMTgCBQ9pbkFtQXNzZXRBbXRYMTgFC2FtdEFzc2V0RGNtBAZlc3RQdXQJARRlc3RpbWF0ZVB1dE9wZXJhdGlvbgkCAACgwh4FDGluQW1Bc3NldEFtdAUJYW1Bc3NldElkBQxpblByQXNzZXRBbXQFCXByQXNzZXRJZAIABgcECWNhbGNMcEFtdAgFBmVzdFB1dAJfMQQMY3VyUHJpY2VDYWxjCAUGZXN0UHV0Al8zBAlhbUJhbGFuY2UIBQZlc3RQdXQCXzQECXByQmFsYW5jZQgFBmVzdFB1dAJfNQQKbHBFbWlzc2lvbggFBmVzdFB1dAJfNgkAlAoCBQNuaWwJALkJAgkAzAgCAhAlZCVkJWQlZCVkJWQlZCVkCQDMCAIJAKQDAQUJY2FsY0xwQW10CQDMCAIJAKQDAQkBB2Zyb21YMTgCBQtjdXJQcmljZVgxOAUGc2NhbGU4CQDMCAIJAKQDAQUJYW1CYWxhbmNlCQDMCAIJAKQDAQUJcHJCYWxhbmNlCQDMCAIJAKQDAQUKbHBFbWlzc2lvbgkAzAgCBQpwb29sU3RhdHVzCQDMCAIJAKQDAQUMaW5BbUFzc2V0QW10CQDMCAIJAKQDAQUMaW5QckFzc2V0QW10BQNuaWwFA1NFUAFpARNldmFsdWF0ZUdldFJFQURPTkxZAhBwYXltZW50THBBc3NldElkDHBheW1lbnRMcEFtdAQDcmVzCQEUZXN0aW1hdGVHZXRPcGVyYXRpb24EAgAFEHBheW1lbnRMcEFzc2V0SWQFDHBheW1lbnRMcEFtdAUEdGhpcwQIb3V0QW1BbXQIBQNyZXMCXzEECG91dFByQW10CAUDcmVzAl8yBAlhbUJhbGFuY2UIBQNyZXMCXzUECXByQmFsYW5jZQgFA3JlcwJfNgQKbHBFbWlzc2lvbggFA3JlcwJfNwQIY3VyUHJpY2UIBQNyZXMCXzgECnBvb2xTdGF0dXMJAQ1wYXJzZUludFZhbHVlAQgFA3JlcwJfOQkAlAoCBQNuaWwJALkJAgkAzAgCAg4lZCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFCG91dEFtQW10CQDMCAIJAKQDAQUIb3V0UHJBbXQJAMwIAgkApAMBBQlhbUJhbGFuY2UJAMwIAgkApAMBBQlwckJhbGFuY2UJAMwIAgkApAMBBQpscEVtaXNzaW9uCQDMCAIJAKYDAQUIY3VyUHJpY2UJAMwIAgkApAMBBQpwb29sU3RhdHVzBQNuaWwFA1NFUAECdHgBBnZlcmlmeQAED3RhcmdldFB1YmxpY0tleQQHJG1hdGNoMAkBFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAnBrBQckbWF0Y2gwBQJwawMJAAECBQckbWF0Y2gwAgRVbml0CAUCdHgPc2VuZGVyUHVibGljS2V5CQACAQILTWF0Y2ggZXJyb3IEByRtYXRjaDAFAnR4AwkAAQIFByRtYXRjaDACBU9yZGVyBAVvcmRlcgUHJG1hdGNoMAQKbWF0Y2hlclB1YgkBE2dldE1hdGNoZXJQdWJPckZhaWwABApvcmRlclZhbGlkCQEbdmFsaWRhdGVNYXRjaGVyT3JkZXJBbGxvd2VkAQUFb3JkZXIEC3NlbmRlclZhbGlkCQD0AwMIBQVvcmRlcglib2R5Qnl0ZXMJAJEDAggFBW9yZGVyBnByb29mcwAACAUFb3JkZXIPc2VuZGVyUHVibGljS2V5BAxtYXRjaGVyVmFsaWQJAPQDAwgFBW9yZGVyCWJvZHlCeXRlcwkAkQMCCAUFb3JkZXIGcHJvb2ZzAAEFCm1hdGNoZXJQdWIDAwMFCm9yZGVyVmFsaWQFC3NlbmRlclZhbGlkBwUMbWF0Y2hlclZhbGlkBwYJAQ90aHJvd09yZGVyRXJyb3IDBQpvcmRlclZhbGlkBQtzZW5kZXJWYWxpZAUMbWF0Y2hlclZhbGlkAwkAAQIFByRtYXRjaDACFFNldFNjcmlwdFRyYW5zYWN0aW9uBAFzBQckbWF0Y2gwBAduZXdIYXNoCQD2AwEJAQV2YWx1ZQEIBQFzBnNjcmlwdAQLYWxsb3dlZEhhc2gJANsEAQkBBXZhbHVlAQkAnQgCBQ9mYWN0b3J5Q29udHJhY3QJARZrZXlBbGxvd2VkTHBTY3JpcHRIYXNoAAQLY3VycmVudEhhc2gJAPEHAQUEdGhpcwMDCQAAAgULYWxsb3dlZEhhc2gFB25ld0hhc2gJAQIhPQIFC2N1cnJlbnRIYXNoBQduZXdIYXNoBwYJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFD3RhcmdldFB1YmxpY0tleQkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUPdGFyZ2V0UHVibGljS2V5KU/DiA==", "chainId": 84, "height": 2269237, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 7A36noPRHhBa32kVCS1GvtYcEm3kEuGL4kpuW4YyJwFe Next: u1iELZx7g1GqhLLRoZgZ3kTbYf3rJDcaz8j3qpLkKQ2 Diff:
Old | New | Differences | |
---|---|---|---|
11 | 11 | ||
12 | 12 | let e = toBigInt(0) | |
13 | 13 | ||
14 | - | let f = | |
14 | + | let f = toBigInt(0) | |
15 | 15 | ||
16 | - | let g = 1 | |
16 | + | let g = toBigInt(1) | |
17 | 17 | ||
18 | - | let h = | |
18 | + | let h = toBigInt(1) | |
19 | 19 | ||
20 | - | let i = | |
20 | + | let i = "WAVES" | |
21 | 21 | ||
22 | - | let j = | |
22 | + | let j = "__" | |
23 | 23 | ||
24 | 24 | let k = 1 | |
25 | 25 | ||
29 | 29 | ||
30 | 30 | let n = 4 | |
31 | 31 | ||
32 | - | let o = | |
32 | + | let o = 1 | |
33 | 33 | ||
34 | - | let p = | |
34 | + | let p = 2 | |
35 | 35 | ||
36 | - | let q = | |
36 | + | let q = 3 | |
37 | 37 | ||
38 | - | let r = | |
38 | + | let r = 4 | |
39 | 39 | ||
40 | - | let s = | |
40 | + | let s = 5 | |
41 | 41 | ||
42 | - | let t = | |
42 | + | let t = 6 | |
43 | 43 | ||
44 | - | let u = | |
44 | + | let u = 7 | |
45 | 45 | ||
46 | - | let v = | |
46 | + | let v = 8 | |
47 | 47 | ||
48 | - | let w = | |
48 | + | let w = 9 | |
49 | 49 | ||
50 | - | let x = | |
50 | + | let x = 10 | |
51 | 51 | ||
52 | - | let y = | |
52 | + | let y = 1 | |
53 | 53 | ||
54 | - | func z (A,B) = fraction(toBigInt(A), d, toBigInt(B)) | |
54 | + | let z = 2 | |
55 | + | ||
56 | + | let A = 3 | |
57 | + | ||
58 | + | let B = 1 | |
59 | + | ||
60 | + | let C = 7 | |
61 | + | ||
62 | + | func D (E,F) = fraction(toBigInt(E), d, toBigInt(F)) | |
55 | 63 | ||
56 | 64 | ||
57 | - | func | |
65 | + | func G (H,I) = toInt(fraction(H, toBigInt(I), d)) | |
58 | 66 | ||
59 | 67 | ||
60 | - | func | |
68 | + | func J (K,L,M) = fraction(K, L, M) | |
61 | 69 | ||
62 | 70 | ||
63 | - | func | |
64 | - | then -( | |
65 | - | else | |
71 | + | func N (H) = if ((e > H)) | |
72 | + | then -(H) | |
73 | + | else H | |
66 | 74 | ||
67 | 75 | ||
68 | - | func | |
76 | + | func O () = "%s__factoryContract" | |
69 | 77 | ||
70 | 78 | ||
71 | - | func | |
79 | + | func P () = "%s__managerPublicKey" | |
72 | 80 | ||
73 | 81 | ||
74 | - | func | |
82 | + | func Q () = "%s__pendingManagerPublicKey" | |
75 | 83 | ||
76 | 84 | ||
77 | - | func | |
85 | + | func R () = "%s%s__price__last" | |
78 | 86 | ||
79 | 87 | ||
80 | - | func | |
88 | + | func S (T,U) = makeString(["%s%s%d%d__price__history", toString(T), toString(U)], j) | |
81 | 89 | ||
82 | 90 | ||
83 | - | func | |
91 | + | func V (W,X) = ((("%s%s%s__P__" + W) + "__") + X) | |
84 | 92 | ||
85 | 93 | ||
86 | - | func | |
94 | + | func Y (W,X) = ((("%s%s%s__G__" + W) + "__") + X) | |
87 | 95 | ||
88 | 96 | ||
89 | - | func | |
97 | + | func Z () = "%s__amountAsset" | |
90 | 98 | ||
91 | 99 | ||
92 | - | func | |
100 | + | func aa () = "%s__priceAsset" | |
93 | 101 | ||
94 | 102 | ||
95 | - | func | |
103 | + | func ab () = "%s__factoryConfig" | |
96 | 104 | ||
97 | 105 | ||
98 | - | func | |
106 | + | func ac () = "%s%s__matcher__publicKey" | |
99 | 107 | ||
100 | 108 | ||
101 | - | func | |
109 | + | func ad (ae) = (("%s%s%s__" + ae) + "__mappings__poolContract2LpAsset") | |
102 | 110 | ||
103 | 111 | ||
104 | - | func | |
112 | + | func af (ag,ah) = (((("%d%d%s__" + ag) + "__") + ah) + "__config") | |
105 | 113 | ||
106 | 114 | ||
107 | - | func | |
115 | + | func ai (aj) = ("%s%s%s__mappings__baseAsset2internalId__" + aj) | |
108 | 116 | ||
109 | 117 | ||
110 | - | func | |
118 | + | func ak () = "%s__shutdown" | |
111 | 119 | ||
112 | 120 | ||
113 | - | func | |
121 | + | func al (am) = ("%s%s__poolWeight__" + am) | |
114 | 122 | ||
115 | 123 | ||
116 | - | func | |
124 | + | func an () = "%s__allowedLpScriptHash" | |
117 | 125 | ||
118 | 126 | ||
119 | - | func | |
127 | + | func ao (ap,aq,ar) = throw(((((("order validation failed: orderValid=" + toString(ap)) + " senderValid=") + toString(aq)) + " matcherValid=") + toString(ar))) | |
120 | 128 | ||
121 | 129 | ||
122 | - | func | |
130 | + | func as (at,au) = valueOrErrorMessage(getString(at, au), makeString(["mandatory ", toString(at), ".", au, " is not defined"], "")) | |
123 | 131 | ||
124 | 132 | ||
125 | - | func | |
133 | + | func av (at,au) = valueOrErrorMessage(getInteger(at, au), makeString(["mandatory ", toString(at), ".", au, " is not defined"], "")) | |
126 | 134 | ||
127 | 135 | ||
128 | - | let as = addressFromStringValue(ao(this, K())) | |
129 | - | ||
130 | - | func at () = valueOrElse(getBoolean(as, ag()), false) | |
136 | + | func aw (ax) = throw(makeString(["lp.ride:", ax], " ")) | |
131 | 137 | ||
132 | 138 | ||
133 | - | func au () = fromBase58String(ao(as, Y())) | |
139 | + | let ay = addressFromStringValue(as(this, O())) | |
140 | + | ||
141 | + | func az () = valueOrElse(getBoolean(ay, ak()), false) | |
134 | 142 | ||
135 | 143 | ||
136 | - | func av () = { | |
137 | - | let aw = ao(this, V()) | |
138 | - | let ax = ao(this, W()) | |
139 | - | let ad = ar(as, ae(ax)) | |
140 | - | let ac = ar(as, ae(aw)) | |
141 | - | split(ao(as, ab(toString(ac), toString(ad))), f) | |
144 | + | func aA () = fromBase58String(as(ay, ac())) | |
145 | + | ||
146 | + | ||
147 | + | func aB () = { | |
148 | + | let aC = as(this, Z()) | |
149 | + | let aD = as(this, aa()) | |
150 | + | let ah = av(ay, ai(aD)) | |
151 | + | let ag = av(ay, ai(aC)) | |
152 | + | split(as(ay, af(toString(ag), toString(ah))), j) | |
142 | 153 | } | |
143 | 154 | ||
144 | 155 | ||
145 | - | func ay () = split(ao(as, X()), f) | |
156 | + | func aE (aF) = if ((aF == i)) | |
157 | + | then unit | |
158 | + | else fromBase58String(aF) | |
146 | 159 | ||
147 | 160 | ||
148 | - | func az (aA,aB,aC,aD,aE,aF,aG,aH,aI,aJ) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(aA), toString(aB), toString(aC), toString(aD), toString(aE), toString(aF), toString(aG), toString(aH), toString(aI), toString(aJ)], f) | |
161 | + | func aG (aF) = if ((aF == unit)) | |
162 | + | then i | |
163 | + | else toBase58String(value(aF)) | |
149 | 164 | ||
150 | 165 | ||
151 | - | func | |
166 | + | func aH (aI) = $Tuple7(addressFromStringValue(aI[o]), parseIntValue(aI[p]), fromBase58String(aI[q]), aE(aI[r]), aE(aI[s]), parseIntValue(aI[t]), parseIntValue(aI[u])) | |
152 | 167 | ||
153 | 168 | ||
154 | - | func aO (aP) = if ((aP == "WAVES")) | |
155 | - | then wavesBalance(this).available | |
156 | - | else assetBalance(this, fromBase58String(aP)) | |
169 | + | func aJ () = split(as(ay, ab()), j) | |
157 | 170 | ||
158 | 171 | ||
159 | - | func aQ (aR,aS) = fraction(aR, d, aS) | |
172 | + | let aK = valueOrErrorMessage(addressFromString(aJ()[B]), "incorrect staking address") | |
173 | + | ||
174 | + | let aL = valueOrErrorMessage(addressFromString(aJ()[C]), "incorrect staking address") | |
175 | + | ||
176 | + | func aM (aN,aO,aP,aQ,aR,aS,aT,aU,aV,aW) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(aN), toString(aO), toString(aP), toString(aQ), toString(aR), toString(aS), toString(aT), toString(aU), toString(aV), toString(aW)], j) | |
160 | 177 | ||
161 | 178 | ||
162 | - | func aT (aU,aV,aW,aX) = { | |
163 | - | let aY = z(aW, aU) | |
164 | - | let aZ = z(aX, aV) | |
165 | - | aQ(aZ, aY) | |
179 | + | func aX (aY,aZ,ba,aQ,aT,aU) = makeString(["%d%d%d%d%d%d", toString(aY), toString(aZ), toString(ba), toString(aQ), toString(aT), toString(aU)], j) | |
180 | + | ||
181 | + | ||
182 | + | func bb (bc) = if ((bc == "WAVES")) | |
183 | + | then wavesBalance(this).available | |
184 | + | else assetBalance(this, fromBase58String(bc)) | |
185 | + | ||
186 | + | ||
187 | + | func bd (be,bf) = fraction(be, d, bf) | |
188 | + | ||
189 | + | ||
190 | + | func bg (bh,bi,bj,bk) = { | |
191 | + | let bl = D(bj, bh) | |
192 | + | let bm = D(bk, bi) | |
193 | + | bd(bm, bl) | |
166 | 194 | } | |
167 | 195 | ||
168 | 196 | ||
169 | - | func | |
170 | - | let | |
171 | - | let | |
172 | - | let | |
173 | - | let | |
174 | - | let | |
175 | - | let | |
176 | - | let | |
177 | - | let | |
178 | - | let | |
179 | - | [ | |
197 | + | func bn (bj,bk,bo) = { | |
198 | + | let bp = aB() | |
199 | + | let bq = parseIntValue(bp[t]) | |
200 | + | let br = parseIntValue(bp[u]) | |
201 | + | let bs = bg(bq, br, bj, bk) | |
202 | + | let bf = D(bj, bq) | |
203 | + | let be = D(bk, br) | |
204 | + | let bt = D(bo, b) | |
205 | + | let bu = bd(bf, bt) | |
206 | + | let bv = bd(be, bt) | |
207 | + | [bs, bu, bv] | |
180 | 208 | } | |
181 | 209 | ||
182 | 210 | ||
183 | - | func | |
184 | - | let | |
185 | - | [ | |
211 | + | func bw (bj,bk,bo) = { | |
212 | + | let bx = bn(bj, bk, bo) | |
213 | + | [G(bx[0], b), G(bx[1], b), G(bx[2], b)] | |
186 | 214 | } | |
187 | 215 | ||
188 | 216 | ||
189 | - | func | |
190 | - | let | |
191 | - | let | |
192 | - | let | |
193 | - | let | |
194 | - | let | |
195 | - | let | |
196 | - | let | |
197 | - | let | |
198 | - | if (( | |
217 | + | func by (bz,bA,bB,W) = { | |
218 | + | let bp = aB() | |
219 | + | let bC = bp[q] | |
220 | + | let bD = bp[r] | |
221 | + | let bE = bp[s] | |
222 | + | let bh = parseIntValue(bp[t]) | |
223 | + | let bi = parseIntValue(bp[u]) | |
224 | + | let bF = bp[p] | |
225 | + | let bG = valueOrErrorMessage(assetInfo(fromBase58String(bC)), (("Asset " + bC) + " doesn't exist")).quantity | |
226 | + | if ((bC != bA)) | |
199 | 227 | then throw("Invalid asset passed.") | |
200 | 228 | else { | |
201 | - | let | |
202 | - | let | |
203 | - | let | |
204 | - | let | |
205 | - | let | |
206 | - | let | |
207 | - | let | |
208 | - | let | |
209 | - | let | |
210 | - | let | |
211 | - | let | |
212 | - | let | |
213 | - | let | |
229 | + | let bH = bb(bD) | |
230 | + | let bI = D(bH, bh) | |
231 | + | let bJ = bb(bE) | |
232 | + | let bK = D(bJ, bi) | |
233 | + | let bL = bd(bK, bI) | |
234 | + | let bM = G(bL, b) | |
235 | + | let bN = D(bB, b) | |
236 | + | let bO = D(bG, b) | |
237 | + | let bP = fraction(bI, bN, bO) | |
238 | + | let bQ = fraction(bK, bN, bO) | |
239 | + | let bR = G(bP, bh) | |
240 | + | let bS = G(bQ, bi) | |
241 | + | let bT = if ((bz == "")) | |
214 | 242 | then nil | |
215 | - | else [ScriptTransfer( | |
243 | + | else [ScriptTransfer(W, bR, if ((bD == "WAVES")) | |
216 | 244 | then unit | |
217 | - | else fromBase58String( | |
245 | + | else fromBase58String(bD)), ScriptTransfer(W, bS, if ((bE == "WAVES")) | |
218 | 246 | then unit | |
219 | - | else fromBase58String( | |
220 | - | $Tuple10(bE, bF, | |
247 | + | else fromBase58String(bE)), StringEntry(Y(toString(W), bz), aX(bR, bS, bB, bM, height, lastBlock.timestamp)), IntegerEntry(R(), bM), IntegerEntry(S(height, lastBlock.timestamp), bM)] | |
248 | + | $Tuple10(bR, bS, bD, bE, bH, bJ, bG, bL, bF, bT) | |
221 | 249 | } | |
222 | 250 | } | |
223 | 251 | ||
224 | 252 | ||
225 | - | func | |
226 | - | let | |
227 | - | let | |
228 | - | let | |
229 | - | let | |
230 | - | let | |
231 | - | let | |
232 | - | let | |
233 | - | let | |
234 | - | let | |
235 | - | let | |
236 | - | let | |
237 | - | let | |
238 | - | if (if (( | |
253 | + | func bU (bz,bV,bW,bX,bY,bZ,W,ca,cb) = { | |
254 | + | let bp = aB() | |
255 | + | let bC = fromBase58String(bp[q]) | |
256 | + | let cc = bp[r] | |
257 | + | let cd = bp[s] | |
258 | + | let ce = bp[v] | |
259 | + | let cf = bp[w] | |
260 | + | let bq = parseIntValue(bp[t]) | |
261 | + | let br = parseIntValue(bp[u]) | |
262 | + | let bF = bp[p] | |
263 | + | let bG = valueOrErrorMessage(assetInfo(bC), (("Asset " + toBase58String(bC)) + " doesn't exist")).quantity | |
264 | + | let cg = toBase58String(valueOrElse(bX, fromBase58String("WAVES"))) | |
265 | + | let ch = toBase58String(valueOrElse(bZ, fromBase58String("WAVES"))) | |
266 | + | if (if ((cc != cg)) | |
239 | 267 | then true | |
240 | - | else ( | |
268 | + | else (cd != ch)) | |
241 | 269 | then throw("Invalid amt or price asset passed.") | |
242 | 270 | else { | |
243 | - | let | |
244 | - | then | |
245 | - | else ( | |
246 | - | let | |
247 | - | then | |
248 | - | else ( | |
249 | - | let | |
250 | - | let | |
251 | - | let | |
252 | - | let | |
253 | - | let | |
254 | - | let | |
271 | + | let bH = if (ca) | |
272 | + | then bb(cc) | |
273 | + | else (bb(cc) - bW) | |
274 | + | let bJ = if (ca) | |
275 | + | then bb(cd) | |
276 | + | else (bb(cd) - bY) | |
277 | + | let ci = D(bW, bq) | |
278 | + | let cj = D(bY, br) | |
279 | + | let ck = bd(cj, ci) | |
280 | + | let bI = D(bH, bq) | |
281 | + | let bK = D(bJ, br) | |
282 | + | let cl = if ((bG == 0)) | |
255 | 283 | then { | |
256 | - | let | |
257 | - | let | |
258 | - | let | |
259 | - | $Tuple5( | |
284 | + | let bL = e | |
285 | + | let cm = e | |
286 | + | let bt = pow((ci * cj), 0, toBigInt(5), 1, 0, DOWN) | |
287 | + | $Tuple5(G(bt, b), G(ci, bq), G(cj, br), bd((bK + cj), (bI + ci)), cm) | |
260 | 288 | } | |
261 | 289 | else { | |
262 | - | let | |
263 | - | let | |
264 | - | let | |
265 | - | if (if (( | |
266 | - | then ( | |
290 | + | let bL = bd(bK, bI) | |
291 | + | let cm = fraction(N((bL - ck)), d, bL) | |
292 | + | let cn = D(bV, b) | |
293 | + | if (if ((bL != e)) | |
294 | + | then (cm > cn) | |
267 | 295 | else false) | |
268 | - | then throw(((("Price slippage " + toString( | |
296 | + | then throw(((("Price slippage " + toString(cm)) + " exceeded the passed limit of ") + toString(cn))) | |
269 | 297 | else { | |
270 | - | let | |
271 | - | let | |
272 | - | let | |
273 | - | let | |
274 | - | then $Tuple2( | |
275 | - | else $Tuple2( | |
276 | - | let | |
277 | - | let | |
278 | - | let | |
279 | - | $Tuple5( | |
298 | + | let bO = D(bG, b) | |
299 | + | let co = fraction(ci, bL, d) | |
300 | + | let cp = fraction(cj, d, bL) | |
301 | + | let cq = if ((co > cj)) | |
302 | + | then $Tuple2(cp, cj) | |
303 | + | else $Tuple2(ci, co) | |
304 | + | let cr = cq._1 | |
305 | + | let cs = cq._2 | |
306 | + | let bt = fraction(bO, cs, bK) | |
307 | + | $Tuple5(G(bt, b), G(cr, bq), G(cs, br), bL, cm) | |
280 | 308 | } | |
281 | 309 | } | |
282 | - | let | |
283 | - | let | |
284 | - | let | |
285 | - | let | |
286 | - | let | |
287 | - | if ((0 >= | |
310 | + | let ct = cl._1 | |
311 | + | let cu = cl._2 | |
312 | + | let cv = cl._3 | |
313 | + | let bM = G(cl._4, b) | |
314 | + | let cw = G(cl._5, b) | |
315 | + | if ((0 >= ct)) | |
288 | 316 | then throw("Invalid calculations. LP calculated is less than zero.") | |
289 | 317 | else { | |
290 | - | let | |
318 | + | let cx = if (!(cb)) | |
291 | 319 | then 0 | |
292 | - | else | |
293 | - | let | |
294 | - | let | |
295 | - | let | |
296 | - | $Tuple13( | |
320 | + | else ct | |
321 | + | let cy = (bW - cu) | |
322 | + | let cz = (bY - cv) | |
323 | + | let cA = [IntegerEntry(R(), bM), IntegerEntry(S(height, lastBlock.timestamp), bM), StringEntry(V(W, bz), aM(cu, cv, cx, bM, bV, cw, height, lastBlock.timestamp, cy, cz))] | |
324 | + | $Tuple13(ct, cx, bM, bH, bJ, bG, bC, bF, cA, cy, cz, bX, bZ) | |
297 | 325 | } | |
298 | 326 | } | |
299 | 327 | } | |
300 | 328 | ||
301 | 329 | ||
302 | - | func | |
303 | - | let | |
304 | - | let | |
305 | - | let | |
306 | - | let | |
307 | - | let | |
308 | - | let | |
309 | - | let | |
310 | - | let | |
311 | - | let | |
312 | - | then | |
313 | - | else | |
314 | - | let | |
315 | - | if (if (if ( | |
330 | + | func cB (cC) = { | |
331 | + | let bp = aB() | |
332 | + | let cD = bp[r] | |
333 | + | let cE = bp[s] | |
334 | + | let bF = parseIntValue(bp[p]) | |
335 | + | let bq = parseIntValue(bp[t]) | |
336 | + | let br = parseIntValue(bp[u]) | |
337 | + | let cF = bb(cD) | |
338 | + | let cG = bb(cE) | |
339 | + | let bL = if ((cC.orderType == Buy)) | |
340 | + | then bg(bq, br, (cF + cC.amount), cG) | |
341 | + | else bg(bq, br, (cF - cC.amount), cG) | |
342 | + | let bM = G(bL, b) | |
343 | + | if (if (if (az()) | |
316 | 344 | then true | |
317 | - | else ( | |
345 | + | else (bF == m)) | |
318 | 346 | then true | |
319 | - | else ( | |
347 | + | else (bF == n)) | |
320 | 348 | then throw("Exchange operations disabled") | |
321 | 349 | else { | |
322 | - | let | |
323 | - | let | |
350 | + | let cH = cC.assetPair.amountAsset | |
351 | + | let cI = if ((cH == unit)) | |
324 | 352 | then "WAVES" | |
325 | - | else toBase58String(value( | |
326 | - | let | |
327 | - | let | |
353 | + | else toBase58String(value(cH)) | |
354 | + | let cJ = cC.assetPair.priceAsset | |
355 | + | let cK = if ((cJ == unit)) | |
328 | 356 | then "WAVES" | |
329 | - | else toBase58String(value( | |
330 | - | if (if (( | |
357 | + | else toBase58String(value(cJ)) | |
358 | + | if (if ((cI != cD)) | |
331 | 359 | then true | |
332 | - | else ( | |
360 | + | else (cK != cE)) | |
333 | 361 | then throw("Wrong order assets.") | |
334 | 362 | else { | |
335 | - | let | |
336 | - | let | |
337 | - | let | |
338 | - | let | |
339 | - | then ( | |
340 | - | else ( | |
363 | + | let cL = cC.price | |
364 | + | let cM = fraction(b, br, bq) | |
365 | + | let cN = J(cL, b, cM) | |
366 | + | let cO = if ((cC.orderType == Buy)) | |
367 | + | then (bM >= cN) | |
368 | + | else (cN >= bM) | |
341 | 369 | true | |
342 | 370 | } | |
343 | 371 | } | |
344 | 372 | } | |
345 | 373 | ||
346 | 374 | ||
347 | - | func | |
375 | + | func cP (cQ) = if ((size(cQ.payments) != 1)) | |
348 | 376 | then throw("exactly 1 payment is expected") | |
349 | 377 | else { | |
350 | - | let | |
351 | - | let | |
352 | - | let | |
353 | - | let | |
354 | - | let | |
355 | - | let | |
356 | - | let | |
357 | - | let | |
358 | - | if (if ( | |
378 | + | let cR = value(cQ.payments[0]) | |
379 | + | let bA = value(cR.assetId) | |
380 | + | let cS = cR.amount | |
381 | + | let cl = by(toBase58String(cQ.transactionId), toBase58String(bA), cS, cQ.caller) | |
382 | + | let bR = cl._1 | |
383 | + | let bS = cl._2 | |
384 | + | let bF = parseIntValue(cl._9) | |
385 | + | let bT = cl._10 | |
386 | + | if (if (az()) | |
359 | 387 | then true | |
360 | - | else ( | |
361 | - | then throw(("Get operation is blocked by admin. Status = " + toString( | |
362 | - | else $Tuple5( | |
388 | + | else (bF == n)) | |
389 | + | then throw(("Get operation is blocked by admin. Status = " + toString(bF))) | |
390 | + | else $Tuple5(bR, bS, cS, bA, bT) | |
363 | 391 | } | |
364 | 392 | ||
365 | 393 | ||
366 | - | func | |
394 | + | func cT (cQ,bV,cb) = if ((size(cQ.payments) != 2)) | |
367 | 395 | then throw("exactly 2 payments are expected") | |
368 | 396 | else { | |
369 | - | let | |
370 | - | let | |
371 | - | let | |
372 | - | let | |
373 | - | if (if (if ( | |
397 | + | let cU = value(cQ.payments[0]) | |
398 | + | let cV = value(cQ.payments[1]) | |
399 | + | let cW = bU(toBase58String(cQ.transactionId), bV, cU.amount, cU.assetId, cV.amount, cV.assetId, toString(cQ.caller), false, cb) | |
400 | + | let bF = parseIntValue(cW._8) | |
401 | + | if (if (if (az()) | |
374 | 402 | then true | |
375 | - | else ( | |
403 | + | else (bF == l)) | |
376 | 404 | then true | |
377 | - | else ( | |
378 | - | then throw(("Put operation is blocked by admin. Status = " + toString( | |
379 | - | else | |
405 | + | else (bF == n)) | |
406 | + | then throw(("Put operation is blocked by admin. Status = " + toString(bF))) | |
407 | + | else cW | |
380 | 408 | } | |
381 | 409 | ||
382 | 410 | ||
383 | - | func | |
384 | - | let | |
385 | - | if ( | |
411 | + | func cX (cY) = { | |
412 | + | let cZ = invoke(ay, "emit", [cY], nil) | |
413 | + | if ((cZ == cZ)) | |
386 | 414 | then { | |
387 | - | let cM = cL | |
388 | - | fromBase58String(cM) | |
415 | + | let da = { | |
416 | + | let db = cZ | |
417 | + | if ($isInstanceOf(db, "Address")) | |
418 | + | then { | |
419 | + | let dc = db | |
420 | + | invoke(dc, "emit", [cY], nil) | |
421 | + | } | |
422 | + | else unit | |
423 | + | } | |
424 | + | if ((da == da)) | |
425 | + | then cY | |
426 | + | else throw("Strict value is not equal to itself.") | |
389 | 427 | } | |
390 | - | else if ($isInstanceOf(cL, "Unit")) | |
428 | + | else throw("Strict value is not equal to itself.") | |
429 | + | } | |
430 | + | ||
431 | + | ||
432 | + | func dd (de,df,W,X) = { | |
433 | + | let dg = (X == unit) | |
434 | + | let dh = aH(aB()) | |
435 | + | let di = dh._1 | |
436 | + | let bF = dh._2 | |
437 | + | let bC = dh._3 | |
438 | + | let dj = dh._4 | |
439 | + | let cE = dh._5 | |
440 | + | let dk = dh._6 | |
441 | + | let dl = dh._7 | |
442 | + | let dm = de | |
443 | + | let dn = if ((df == dj)) | |
444 | + | then bb(aG(dj)) | |
445 | + | else if ((df == cE)) | |
446 | + | then bb(aG(cE)) | |
447 | + | else aw("invalid asset") | |
448 | + | let do = if (dg) | |
449 | + | then 0 | |
450 | + | else dm | |
451 | + | let dp = (dn - do) | |
452 | + | let dq = toBigInt(dp) | |
453 | + | let dr = toBigInt(valueOrErrorMessage(assetInfo(bC), (("asset " + toBase58String(bC)) + " doesn't exist")).quantity) | |
454 | + | let ds = toBigInt(dm) | |
455 | + | let dt = ((dr * (sqrtBigInt((c + ((ds * c) / dq)), 8, 8, DOWN) - c)) / c) | |
456 | + | toInt(dt) | |
457 | + | } | |
458 | + | ||
459 | + | ||
460 | + | func du (dv,dm,df,W,X) = { | |
461 | + | let dg = (X == unit) | |
462 | + | let dw = aH(aB()) | |
463 | + | let di = dw._1 | |
464 | + | let bF = dw._2 | |
465 | + | let bC = dw._3 | |
466 | + | let dj = dw._4 | |
467 | + | let cE = dw._5 | |
468 | + | let dk = dw._6 | |
469 | + | let dl = dw._7 | |
470 | + | let dx = [if ((df == bC)) | |
471 | + | then true | |
472 | + | else throw("invalid lp asset")] | |
473 | + | if ((dx == dx)) | |
474 | + | then { | |
475 | + | let dq = if ((dv == dj)) | |
476 | + | then toBigInt(bb(aG(dj))) | |
477 | + | else if ((dv == cE)) | |
478 | + | then toBigInt(bb(aG(cE))) | |
479 | + | else aw("invalid asset") | |
480 | + | let dr = toBigInt(valueOrErrorMessage(assetInfo(bC), (("asset " + toBase58String(bC)) + " doesn't exist")).quantity) | |
481 | + | let dy = toBigInt(dm) | |
482 | + | let cY = ((dq * (c - pow((c - ((dy * c) / dr)), 8, h, 0, 8, DOWN))) / c) | |
483 | + | toInt(cY) | |
484 | + | } | |
485 | + | else throw("Strict value is not equal to itself.") | |
486 | + | } | |
487 | + | ||
488 | + | ||
489 | + | func dz () = { | |
490 | + | let db = getString(P()) | |
491 | + | if ($isInstanceOf(db, "String")) | |
492 | + | then { | |
493 | + | let dA = db | |
494 | + | fromBase58String(dA) | |
495 | + | } | |
496 | + | else if ($isInstanceOf(db, "Unit")) | |
391 | 497 | then unit | |
392 | 498 | else throw("Match error") | |
393 | 499 | } | |
394 | 500 | ||
395 | 501 | ||
396 | - | func | |
397 | - | let | |
398 | - | if ($isInstanceOf( | |
502 | + | func dB () = { | |
503 | + | let db = getString(Q()) | |
504 | + | if ($isInstanceOf(db, "String")) | |
399 | 505 | then { | |
400 | - | let | |
401 | - | fromBase58String( | |
506 | + | let dA = db | |
507 | + | fromBase58String(dA) | |
402 | 508 | } | |
403 | - | else if ($isInstanceOf( | |
509 | + | else if ($isInstanceOf(db, "Unit")) | |
404 | 510 | then unit | |
405 | 511 | else throw("Match error") | |
406 | 512 | } | |
407 | 513 | ||
408 | 514 | ||
409 | - | func | |
410 | - | let | |
411 | - | let | |
412 | - | if ($isInstanceOf( | |
515 | + | func dC (cQ) = { | |
516 | + | let dD = throw("Permission denied") | |
517 | + | let db = dz() | |
518 | + | if ($isInstanceOf(db, "ByteVector")) | |
413 | 519 | then { | |
414 | - | let | |
415 | - | if (( | |
520 | + | let dE = db | |
521 | + | if ((cQ.callerPublicKey == dE)) | |
416 | 522 | then true | |
417 | - | else | |
523 | + | else dD | |
418 | 524 | } | |
419 | - | else if ($isInstanceOf( | |
420 | - | then if (( | |
525 | + | else if ($isInstanceOf(db, "Unit")) | |
526 | + | then if ((cQ.caller == this)) | |
421 | 527 | then true | |
422 | - | else | |
528 | + | else dD | |
423 | 529 | else throw("Match error") | |
424 | 530 | } | |
425 | 531 | ||
426 | 532 | ||
427 | - | @Callable(cD) | |
428 | - | func constructor (as) = { | |
429 | - | let cR = cO(cD) | |
430 | - | if ((cR == cR)) | |
431 | - | then [StringEntry(K(), as)] | |
432 | - | else throw("Strict value is not equal to itself.") | |
433 | - | } | |
434 | - | ||
435 | - | ||
436 | - | ||
437 | - | @Callable(cD) | |
438 | - | func setManager (cS) = { | |
439 | - | let cR = cO(cD) | |
440 | - | if ((cR == cR)) | |
533 | + | @Callable(cQ) | |
534 | + | func setManager (dF) = { | |
535 | + | let dG = dC(cQ) | |
536 | + | if ((dG == dG)) | |
441 | 537 | then { | |
442 | - | let | |
443 | - | if (( | |
444 | - | then [StringEntry( | |
538 | + | let dH = fromBase58String(dF) | |
539 | + | if ((dH == dH)) | |
540 | + | then [StringEntry(Q(), dF)] | |
445 | 541 | else throw("Strict value is not equal to itself.") | |
446 | 542 | } | |
447 | 543 | else throw("Strict value is not equal to itself.") | |
449 | 545 | ||
450 | 546 | ||
451 | 547 | ||
452 | - | @Callable( | |
548 | + | @Callable(cQ) | |
453 | 549 | func confirmManager () = { | |
454 | - | let | |
455 | - | let | |
550 | + | let dI = dB() | |
551 | + | let dJ = if (isDefined(dI)) | |
456 | 552 | then true | |
457 | 553 | else throw("No pending manager") | |
458 | - | if (( | |
554 | + | if ((dJ == dJ)) | |
459 | 555 | then { | |
460 | - | let | |
556 | + | let dK = if ((cQ.callerPublicKey == value(dI))) | |
461 | 557 | then true | |
462 | 558 | else throw("You are not pending manager") | |
463 | - | if (( | |
464 | - | then [StringEntry( | |
559 | + | if ((dK == dK)) | |
560 | + | then [StringEntry(P(), toBase58String(value(dI))), DeleteEntry(Q())] | |
465 | 561 | else throw("Strict value is not equal to itself.") | |
466 | 562 | } | |
467 | 563 | else throw("Strict value is not equal to itself.") | |
469 | 565 | ||
470 | 566 | ||
471 | 567 | ||
472 | - | @Callable(cD) | |
473 | - | func put (bI,cX) = { | |
474 | - | let cY = ay() | |
475 | - | let cZ = valueOrErrorMessage(addressFromString(cY[x]), "Error. Incorrect staking address.") | |
476 | - | let da = valueOrErrorMessage(addressFromString(cY[y]), "Error. Incorrect slippage contract address.") | |
477 | - | if ((0 > bI)) | |
478 | - | then throw("Invalid slippageTolerance passed") | |
479 | - | else { | |
480 | - | let cJ = cG(cD, bI, true) | |
481 | - | let ck = cJ._2 | |
482 | - | let bp = cJ._7 | |
483 | - | let bG = cJ._9 | |
484 | - | let cl = cJ._10 | |
485 | - | let cm = cJ._11 | |
486 | - | let db = cJ._12 | |
487 | - | let dc = cJ._13 | |
488 | - | let dd = invoke(as, "emit", [ck], nil) | |
489 | - | if ((dd == dd)) | |
490 | - | then { | |
491 | - | let de = { | |
492 | - | let cL = dd | |
493 | - | if ($isInstanceOf(cL, "Address")) | |
568 | + | @Callable(cQ) | |
569 | + | func put (bV,dL) = if ((0 > bV)) | |
570 | + | then throw("Invalid slippageTolerance passed") | |
571 | + | else { | |
572 | + | let cW = cT(cQ, bV, true) | |
573 | + | let cx = cW._2 | |
574 | + | let bC = cW._7 | |
575 | + | let bT = cW._9 | |
576 | + | let cy = cW._10 | |
577 | + | let cz = cW._11 | |
578 | + | let dM = cW._12 | |
579 | + | let dN = cW._13 | |
580 | + | let cZ = invoke(ay, "emit", [cx], nil) | |
581 | + | if ((cZ == cZ)) | |
582 | + | then { | |
583 | + | let da = { | |
584 | + | let db = cZ | |
585 | + | if ($isInstanceOf(db, "Address")) | |
586 | + | then { | |
587 | + | let dc = db | |
588 | + | invoke(dc, "emit", [cx], nil) | |
589 | + | } | |
590 | + | else unit | |
591 | + | } | |
592 | + | if ((da == da)) | |
593 | + | then { | |
594 | + | let dO = if ((cy > 0)) | |
595 | + | then invoke(aL, "put", nil, [AttachedPayment(dM, cy)]) | |
596 | + | else nil | |
597 | + | if ((dO == dO)) | |
494 | 598 | then { | |
495 | - | let df = cL | |
496 | - | invoke(df, "emit", [ck], nil) | |
599 | + | let dP = if ((cz > 0)) | |
600 | + | then invoke(aL, "put", nil, [AttachedPayment(dN, cz)]) | |
601 | + | else nil | |
602 | + | if ((dP == dP)) | |
603 | + | then { | |
604 | + | let dQ = if (dL) | |
605 | + | then { | |
606 | + | let dR = invoke(aK, "stake", nil, [AttachedPayment(bC, cx)]) | |
607 | + | if ((dR == dR)) | |
608 | + | then nil | |
609 | + | else throw("Strict value is not equal to itself.") | |
610 | + | } | |
611 | + | else [ScriptTransfer(cQ.caller, cx, bC)] | |
612 | + | (bT ++ dQ) | |
613 | + | } | |
614 | + | else throw("Strict value is not equal to itself.") | |
497 | 615 | } | |
498 | - | else | |
616 | + | else throw("Strict value is not equal to itself.") | |
499 | 617 | } | |
500 | - | if ((de == de)) | |
501 | - | then { | |
502 | - | let dg = if ((cl > 0)) | |
503 | - | then invoke(da, "put", nil, [AttachedPayment(db, cl)]) | |
504 | - | else nil | |
505 | - | if ((dg == dg)) | |
506 | - | then { | |
507 | - | let dh = if ((cm > 0)) | |
508 | - | then invoke(da, "put", nil, [AttachedPayment(dc, cm)]) | |
509 | - | else nil | |
510 | - | if ((dh == dh)) | |
511 | - | then { | |
512 | - | let di = if (cX) | |
513 | - | then { | |
514 | - | let dj = invoke(cZ, "stake", nil, [AttachedPayment(bp, ck)]) | |
515 | - | if ((dj == dj)) | |
516 | - | then nil | |
517 | - | else throw("Strict value is not equal to itself.") | |
518 | - | } | |
519 | - | else [ScriptTransfer(cD.caller, ck, bp)] | |
520 | - | (bG ++ di) | |
521 | - | } | |
522 | - | else throw("Strict value is not equal to itself.") | |
523 | - | } | |
524 | - | else throw("Strict value is not equal to itself.") | |
525 | - | } | |
526 | - | else throw("Strict value is not equal to itself.") | |
527 | - | } | |
528 | - | else throw("Strict value is not equal to itself.") | |
529 | - | } | |
530 | - | } | |
531 | - | ||
532 | - | ||
533 | - | ||
534 | - | @Callable(cD) | |
535 | - | func putForFree (dk) = if ((0 > dk)) | |
536 | - | then throw("Invalid value passed") | |
537 | - | else { | |
538 | - | let cJ = cG(cD, dk, false) | |
539 | - | cJ._9 | |
618 | + | else throw("Strict value is not equal to itself.") | |
619 | + | } | |
620 | + | else throw("Strict value is not equal to itself.") | |
540 | 621 | } | |
541 | 622 | ||
542 | 623 | ||
543 | 624 | ||
544 | - | @Callable(cD) | |
545 | - | func get () = { | |
546 | - | let bY = cC(cD) | |
547 | - | let dl = bY._1 | |
548 | - | let bF = bY._2 | |
549 | - | let cF = bY._3 | |
550 | - | let bn = bY._4 | |
551 | - | let bG = bY._5 | |
552 | - | let dm = invoke(as, "burn", [cF], [AttachedPayment(bn, cF)]) | |
553 | - | if ((dm == dm)) | |
554 | - | then bG | |
625 | + | @Callable(cQ) | |
626 | + | func putForFree (dS) = if ((0 > dS)) | |
627 | + | then throw("Invalid value passed") | |
628 | + | else { | |
629 | + | let cW = cT(cQ, dS, false) | |
630 | + | cW._9 | |
631 | + | } | |
632 | + | ||
633 | + | ||
634 | + | ||
635 | + | @Callable(cQ) | |
636 | + | func putOneTkn (dT,dU) = { | |
637 | + | let dV = aH(aB()) | |
638 | + | let di = dV._1 | |
639 | + | let bF = dV._2 | |
640 | + | let bC = dV._3 | |
641 | + | let dj = dV._4 | |
642 | + | let cE = dV._5 | |
643 | + | let dk = dV._6 | |
644 | + | let dl = dV._7 | |
645 | + | let dW = if (if (az()) | |
646 | + | then true | |
647 | + | else (bF == l)) | |
648 | + | then true | |
649 | + | else (bF == n) | |
650 | + | let dx = [if (!(dW)) | |
651 | + | then true | |
652 | + | else aw("put operation is blocked by admin"), if ((size(cQ.payments) == 1)) | |
653 | + | then true | |
654 | + | else aw("exactly 1 payment are expected")] | |
655 | + | if ((dx == dx)) | |
656 | + | then { | |
657 | + | let dX = cQ.payments[0] | |
658 | + | let df = dX.assetId | |
659 | + | let de = dX.amount | |
660 | + | let dm = de | |
661 | + | let W = cQ.caller | |
662 | + | let X = cQ.transactionId | |
663 | + | let dY = { | |
664 | + | let dZ = dd(de, df, W, X) | |
665 | + | if (if ((dT > 0)) | |
666 | + | then (dT > dZ) | |
667 | + | else false) | |
668 | + | then throw(makeString(["amount to receive is less than ", toString(dT)], "")) | |
669 | + | else dZ | |
670 | + | } | |
671 | + | let cZ = cX(dY) | |
672 | + | if ((cZ == cZ)) | |
673 | + | then { | |
674 | + | let dQ = if (dU) | |
675 | + | then { | |
676 | + | let ea = invoke(aK, "stake", nil, [AttachedPayment(bC, dY)]) | |
677 | + | if ((ea == ea)) | |
678 | + | then nil | |
679 | + | else throw("Strict value is not equal to itself.") | |
680 | + | } | |
681 | + | else [ScriptTransfer(cQ.caller, dY, bC)] | |
682 | + | $Tuple2(dQ, dY) | |
683 | + | } | |
684 | + | else throw("Strict value is not equal to itself.") | |
685 | + | } | |
555 | 686 | else throw("Strict value is not equal to itself.") | |
556 | 687 | } | |
557 | 688 | ||
558 | 689 | ||
559 | 690 | ||
560 | - | @Callable(cD) | |
561 | - | func getNoLess (dn,do) = { | |
562 | - | let bY = cC(cD) | |
563 | - | let bE = bY._1 | |
564 | - | let bF = bY._2 | |
565 | - | let cF = bY._3 | |
566 | - | let bn = bY._4 | |
567 | - | let bG = bY._5 | |
568 | - | if ((dn > bE)) | |
569 | - | then throw(((("noLessThenAmtAsset failed: " + toString(bE)) + " < ") + toString(dn))) | |
570 | - | else if ((do > bF)) | |
571 | - | then throw(((("noLessThenPriceAsset failed: " + toString(bF)) + " < ") + toString(do))) | |
691 | + | @Callable(cQ) | |
692 | + | func getOneTkn (dv,dT,eb) = { | |
693 | + | let ec = aH(aB()) | |
694 | + | let di = ec._1 | |
695 | + | let bF = ec._2 | |
696 | + | let bC = ec._3 | |
697 | + | let dj = ec._4 | |
698 | + | let cE = ec._5 | |
699 | + | let dk = ec._6 | |
700 | + | let dl = ec._7 | |
701 | + | let ed = if (az()) | |
702 | + | then true | |
703 | + | else (bF == n) | |
704 | + | let dx = [if (!(ed)) | |
705 | + | then true | |
706 | + | else aw("get operation is blocked by admin"), if ((size(cQ.payments) == 1)) | |
707 | + | then true | |
708 | + | else aw("exactly 1 payment are expected")] | |
709 | + | if ((dx == dx)) | |
710 | + | then { | |
711 | + | let dX = cQ.payments[0] | |
712 | + | let df = dX.assetId | |
713 | + | let dm = dX.amount | |
714 | + | let W = cQ.caller | |
715 | + | let X = cQ.transactionId | |
716 | + | let cY = { | |
717 | + | let ee = du(aE(dv), dm, df, W, X) | |
718 | + | if (if ((dT > 0)) | |
719 | + | then (dT > ee) | |
720 | + | else false) | |
721 | + | then throw(makeString(["amount to receive is less than ", toString(dT)], "")) | |
722 | + | else ee | |
723 | + | } | |
724 | + | let ef = invoke(ay, "burn", [dm], [AttachedPayment(df, dm)]) | |
725 | + | if ((ef == ef)) | |
726 | + | then { | |
727 | + | let eg = [ScriptTransfer(W, cY, aE(dv))] | |
728 | + | $Tuple2(eg, cY) | |
729 | + | } | |
730 | + | else throw("Strict value is not equal to itself.") | |
731 | + | } | |
732 | + | else throw("Strict value is not equal to itself.") | |
733 | + | } | |
734 | + | ||
735 | + | ||
736 | + | ||
737 | + | @Callable(cQ) | |
738 | + | func get () = { | |
739 | + | let cl = cP(cQ) | |
740 | + | let eh = cl._1 | |
741 | + | let bS = cl._2 | |
742 | + | let cS = cl._3 | |
743 | + | let bA = cl._4 | |
744 | + | let bT = cl._5 | |
745 | + | let ei = invoke(ay, "burn", [cS], [AttachedPayment(bA, cS)]) | |
746 | + | if ((ei == ei)) | |
747 | + | then bT | |
748 | + | else throw("Strict value is not equal to itself.") | |
749 | + | } | |
750 | + | ||
751 | + | ||
752 | + | ||
753 | + | @Callable(cQ) | |
754 | + | func getNoLess (ej,ek) = { | |
755 | + | let cl = cP(cQ) | |
756 | + | let bR = cl._1 | |
757 | + | let bS = cl._2 | |
758 | + | let cS = cl._3 | |
759 | + | let bA = cl._4 | |
760 | + | let bT = cl._5 | |
761 | + | if ((ej > bR)) | |
762 | + | then throw(((("noLessThenAmtAsset failed: " + toString(bR)) + " < ") + toString(ej))) | |
763 | + | else if ((ek > bS)) | |
764 | + | then throw(((("noLessThenPriceAsset failed: " + toString(bS)) + " < ") + toString(ek))) | |
572 | 765 | else { | |
573 | - | let | |
574 | - | if (( | |
575 | - | then | |
766 | + | let ei = invoke(ay, "burn", [cS], [AttachedPayment(bA, cS)]) | |
767 | + | if ((ei == ei)) | |
768 | + | then bT | |
576 | 769 | else throw("Strict value is not equal to itself.") | |
577 | 770 | } | |
578 | 771 | } | |
579 | 772 | ||
580 | 773 | ||
581 | 774 | ||
582 | - | @Callable( | |
583 | - | func unstakeAndGet ( | |
584 | - | let | |
775 | + | @Callable(cQ) | |
776 | + | func unstakeAndGet (cY) = { | |
777 | + | let el = if ((size(cQ.payments) != 0)) | |
585 | 778 | then throw("No payments are expected") | |
586 | 779 | else true | |
587 | - | if (( | |
780 | + | if ((el == el)) | |
588 | 781 | then { | |
589 | - | let bc = av() | |
590 | - | let cY = ay() | |
591 | - | let bp = fromBase58String(bc[m]) | |
592 | - | let cZ = valueOrErrorMessage(addressFromString(cY[x]), "Error. Incorrect staking address.") | |
593 | - | let dr = invoke(cZ, "unstake", [toBase58String(bp), dp], nil) | |
594 | - | if ((dr == dr)) | |
782 | + | let bp = aB() | |
783 | + | let bC = fromBase58String(bp[q]) | |
784 | + | let em = invoke(aK, "unstake", [toBase58String(bC), cY], nil) | |
785 | + | if ((em == em)) | |
595 | 786 | then { | |
596 | - | let | |
597 | - | let | |
598 | - | let | |
599 | - | let | |
787 | + | let cl = by(toBase58String(cQ.transactionId), toBase58String(bC), cY, cQ.caller) | |
788 | + | let bF = parseIntValue(cl._9) | |
789 | + | let bT = cl._10 | |
790 | + | let en = if (if (az()) | |
600 | 791 | then true | |
601 | - | else ( | |
602 | - | then throw(("Get operation is blocked by admin. Status = " + toString( | |
792 | + | else (bF == n)) | |
793 | + | then throw(("Get operation is blocked by admin. Status = " + toString(bF))) | |
603 | 794 | else true | |
604 | - | if (( | |
795 | + | if ((en == en)) | |
605 | 796 | then { | |
606 | - | let | |
607 | - | if (( | |
608 | - | then | |
797 | + | let ei = invoke(ay, "burn", [cY], [AttachedPayment(bC, cY)]) | |
798 | + | if ((ei == ei)) | |
799 | + | then bT | |
609 | 800 | else throw("Strict value is not equal to itself.") | |
610 | 801 | } | |
611 | 802 | else throw("Strict value is not equal to itself.") | |
617 | 808 | ||
618 | 809 | ||
619 | 810 | ||
620 | - | @Callable( | |
621 | - | func activate ( | |
811 | + | @Callable(cQ) | |
812 | + | func activate (eo,ep) = if ((toString(cQ.caller) != toString(ay))) | |
622 | 813 | then throw("permissions denied") | |
623 | - | else $Tuple2([StringEntry( | |
814 | + | else $Tuple2([StringEntry(Z(), eo), StringEntry(aa(), ep)], "success") | |
624 | 815 | ||
625 | 816 | ||
626 | 817 | ||
627 | - | @Callable( | |
628 | - | func getPoolConfigWrapperREADONLY () = $Tuple2(nil, | |
818 | + | @Callable(cQ) | |
819 | + | func getPoolConfigWrapperREADONLY () = $Tuple2(nil, aB()) | |
629 | 820 | ||
630 | 821 | ||
631 | 822 | ||
632 | - | @Callable( | |
633 | - | func getAccBalanceWrapperREADONLY ( | |
823 | + | @Callable(cQ) | |
824 | + | func getAccBalanceWrapperREADONLY (bc) = $Tuple2(nil, bb(bc)) | |
634 | 825 | ||
635 | 826 | ||
636 | 827 | ||
637 | - | @Callable( | |
638 | - | func calcPricesWrapperREADONLY ( | |
639 | - | let | |
640 | - | $Tuple2(nil, [toString( | |
828 | + | @Callable(cQ) | |
829 | + | func calcPricesWrapperREADONLY (bj,bk,bo) = { | |
830 | + | let bx = bn(bj, bk, bo) | |
831 | + | $Tuple2(nil, [toString(bx[0]), toString(bx[1]), toString(bx[2])]) | |
641 | 832 | } | |
642 | 833 | ||
643 | 834 | ||
644 | 835 | ||
645 | - | @Callable( | |
646 | - | func toX18WrapperREADONLY ( | |
836 | + | @Callable(cQ) | |
837 | + | func toX18WrapperREADONLY (E,F) = $Tuple2(nil, toString(D(E, F))) | |
647 | 838 | ||
648 | 839 | ||
649 | 840 | ||
650 | - | @Callable( | |
651 | - | func fromX18WrapperREADONLY ( | |
841 | + | @Callable(cQ) | |
842 | + | func fromX18WrapperREADONLY (H,I) = $Tuple2(nil, G(parseBigIntValue(H), I)) | |
652 | 843 | ||
653 | 844 | ||
654 | 845 | ||
655 | - | @Callable( | |
656 | - | func calcPriceBigIntWrapperREADONLY ( | |
846 | + | @Callable(cQ) | |
847 | + | func calcPriceBigIntWrapperREADONLY (be,bf) = $Tuple2(nil, toString(bd(parseBigIntValue(be), parseBigIntValue(bf)))) | |
657 | 848 | ||
658 | 849 | ||
659 | 850 | ||
660 | - | @Callable( | |
661 | - | func estimatePutOperationWrapperREADONLY ( | |
851 | + | @Callable(cQ) | |
852 | + | func estimatePutOperationWrapperREADONLY (bz,bV,bW,bX,bY,bZ,W,ca,cb) = $Tuple2(nil, bU(bz, bV, bW, bX, bY, bZ, W, ca, cb)) | |
662 | 853 | ||
663 | 854 | ||
664 | 855 | ||
665 | - | @Callable( | |
666 | - | func estimateGetOperationWrapperREADONLY ( | |
667 | - | let | |
668 | - | $Tuple2(nil, $Tuple10( | |
856 | + | @Callable(cQ) | |
857 | + | func estimateGetOperationWrapperREADONLY (bz,bA,bB,W) = { | |
858 | + | let cl = by(bz, bA, bB, addressFromStringValue(W)) | |
859 | + | $Tuple2(nil, $Tuple10(cl._1, cl._2, cl._3, cl._4, cl._5, cl._6, cl._7, toString(cl._8), cl._9, cl._10)) | |
669 | 860 | } | |
670 | 861 | ||
671 | 862 | ||
672 | 863 | ||
673 | - | @Callable( | |
864 | + | @Callable(cQ) | |
674 | 865 | func statsREADONLY () = { | |
675 | - | let | |
676 | - | let | |
677 | - | let | |
678 | - | let | |
679 | - | let | |
680 | - | let | |
681 | - | let | |
682 | - | let | |
683 | - | let | |
684 | - | let | |
685 | - | let | |
686 | - | let | |
866 | + | let bp = aB() | |
867 | + | let bC = fromBase58String(bp[q]) | |
868 | + | let cD = bp[r] | |
869 | + | let cE = bp[s] | |
870 | + | let ce = bp[v] | |
871 | + | let cf = bp[w] | |
872 | + | let bq = parseIntValue(bp[t]) | |
873 | + | let br = parseIntValue(bp[u]) | |
874 | + | let eq = valueOrErrorMessage(assetInfo(bC), (("Asset " + toBase58String(bC)) + " doesn't exist")).quantity | |
875 | + | let cF = bb(cD) | |
876 | + | let cG = bb(cE) | |
877 | + | let er = if ((eq == 0)) | |
687 | 878 | then [e, e, e] | |
688 | - | else | |
689 | - | let | |
690 | - | let | |
691 | - | let | |
692 | - | let | |
693 | - | $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString( | |
879 | + | else bn(cF, cG, eq) | |
880 | + | let bM = 0 | |
881 | + | let es = G(er[1], b) | |
882 | + | let et = G(er[2], b) | |
883 | + | let eu = value(getInteger(ay, al(toString(this)))) | |
884 | + | $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(cF), toString(cG), toString(eq), toString(bM), toString(es), toString(et), toString(eu)], j)) | |
694 | 885 | } | |
695 | 886 | ||
696 | 887 | ||
697 | 888 | ||
698 | - | @Callable( | |
699 | - | func evaluatePutByAmountAssetREADONLY ( | |
700 | - | let | |
701 | - | let | |
702 | - | let | |
703 | - | let | |
704 | - | let | |
705 | - | let | |
706 | - | let | |
707 | - | let | |
708 | - | let | |
709 | - | let | |
710 | - | let | |
711 | - | let | |
712 | - | let | |
713 | - | let | |
714 | - | let | |
889 | + | @Callable(cQ) | |
890 | + | func evaluatePutByAmountAssetREADONLY (bW) = { | |
891 | + | let bp = aB() | |
892 | + | let bC = fromBase58String(bp[q]) | |
893 | + | let cc = bp[r] | |
894 | + | let bD = fromBase58String(cc) | |
895 | + | let cd = bp[s] | |
896 | + | let bE = fromBase58String(cd) | |
897 | + | let bq = parseIntValue(bp[t]) | |
898 | + | let br = parseIntValue(bp[u]) | |
899 | + | let bF = bp[p] | |
900 | + | let eq = valueOrErrorMessage(assetInfo(bC), (("Asset " + toBase58String(bC)) + " doesn't exist")).quantity | |
901 | + | let cF = bb(cc) | |
902 | + | let cG = bb(cd) | |
903 | + | let bl = D(cF, bq) | |
904 | + | let bm = D(cG, br) | |
905 | + | let bL = if ((eq == 0)) | |
715 | 906 | then e | |
716 | - | else | |
717 | - | let | |
718 | - | let | |
719 | - | let | |
720 | - | let | |
721 | - | let | |
722 | - | let | |
723 | - | let | |
724 | - | let | |
725 | - | let | |
726 | - | $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString( | |
907 | + | else bd(bm, bl) | |
908 | + | let ci = D(bW, bq) | |
909 | + | let cj = fraction(ci, bL, d) | |
910 | + | let bY = G(cj, br) | |
911 | + | let cW = bU("", 500000, bW, bD, bY, bE, "", true, false) | |
912 | + | let ct = cW._1 | |
913 | + | let ev = cW._3 | |
914 | + | let bH = cW._4 | |
915 | + | let bJ = cW._5 | |
916 | + | let bG = cW._6 | |
917 | + | $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(ct), toString(G(bL, b)), toString(bH), toString(bJ), toString(bG), bF, toString(bW), toString(bY)], j)) | |
727 | 918 | } | |
728 | 919 | ||
729 | 920 | ||
730 | 921 | ||
731 | - | @Callable( | |
732 | - | func evaluatePutByPriceAssetREADONLY ( | |
733 | - | let | |
734 | - | let | |
735 | - | let | |
736 | - | let | |
737 | - | let | |
738 | - | let | |
739 | - | let | |
740 | - | let | |
741 | - | let | |
742 | - | let | |
743 | - | let | |
744 | - | let | |
745 | - | let | |
746 | - | let | |
747 | - | let | |
922 | + | @Callable(cQ) | |
923 | + | func evaluatePutByPriceAssetREADONLY (bY) = { | |
924 | + | let bp = aB() | |
925 | + | let bC = fromBase58String(bp[q]) | |
926 | + | let cc = bp[r] | |
927 | + | let bD = fromBase58String(cc) | |
928 | + | let cd = bp[s] | |
929 | + | let bE = fromBase58String(cd) | |
930 | + | let bq = parseIntValue(bp[t]) | |
931 | + | let br = parseIntValue(bp[u]) | |
932 | + | let bF = bp[p] | |
933 | + | let eq = valueOrErrorMessage(assetInfo(bC), (("Asset " + toBase58String(bC)) + " doesn't exist")).quantity | |
934 | + | let ew = bb(cc) | |
935 | + | let ex = bb(cd) | |
936 | + | let ey = D(ew, bq) | |
937 | + | let ez = D(ex, br) | |
938 | + | let bL = if ((eq == 0)) | |
748 | 939 | then e | |
749 | - | else | |
750 | - | let | |
751 | - | let | |
752 | - | let | |
753 | - | let | |
754 | - | let | |
755 | - | let | |
756 | - | let | |
757 | - | let | |
758 | - | let | |
759 | - | $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString( | |
940 | + | else bd(ez, ey) | |
941 | + | let cj = D(bY, br) | |
942 | + | let ci = fraction(cj, d, bL) | |
943 | + | let bW = G(ci, bq) | |
944 | + | let cW = bU("", 500000, bW, bD, bY, bE, "", true, false) | |
945 | + | let ct = cW._1 | |
946 | + | let ev = cW._3 | |
947 | + | let bH = cW._4 | |
948 | + | let bJ = cW._5 | |
949 | + | let bG = cW._6 | |
950 | + | $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(ct), toString(G(bL, b)), toString(bH), toString(bJ), toString(bG), bF, toString(bW), toString(bY)], j)) | |
760 | 951 | } | |
761 | 952 | ||
762 | 953 | ||
763 | 954 | ||
764 | - | @Callable( | |
765 | - | func evaluateGetREADONLY ( | |
766 | - | let | |
767 | - | let | |
768 | - | let | |
769 | - | let | |
770 | - | let | |
771 | - | let | |
772 | - | let | |
773 | - | let | |
774 | - | $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString( | |
955 | + | @Callable(cQ) | |
956 | + | func evaluateGetREADONLY (eA,eB) = { | |
957 | + | let cl = by("", eA, eB, this) | |
958 | + | let bR = cl._1 | |
959 | + | let bS = cl._2 | |
960 | + | let bH = cl._5 | |
961 | + | let bJ = cl._6 | |
962 | + | let bG = cl._7 | |
963 | + | let bM = cl._8 | |
964 | + | let bF = parseIntValue(cl._9) | |
965 | + | $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(bR), toString(bS), toString(bH), toString(bJ), toString(bG), toString(bM), toString(bF)], j)) | |
775 | 966 | } | |
776 | 967 | ||
777 | 968 | ||
778 | - | @Verifier( | |
779 | - | func | |
780 | - | let | |
781 | - | let | |
782 | - | if ($isInstanceOf( | |
969 | + | @Verifier(eC) | |
970 | + | func eD () = { | |
971 | + | let eE = { | |
972 | + | let db = dz() | |
973 | + | if ($isInstanceOf(db, "ByteVector")) | |
783 | 974 | then { | |
784 | - | let | |
785 | - | | |
975 | + | let dE = db | |
976 | + | dE | |
786 | 977 | } | |
787 | - | else if ($isInstanceOf( | |
788 | - | then | |
978 | + | else if ($isInstanceOf(db, "Unit")) | |
979 | + | then eC.senderPublicKey | |
789 | 980 | else throw("Match error") | |
790 | 981 | } | |
791 | - | let | |
792 | - | if ($isInstanceOf( | |
982 | + | let db = eC | |
983 | + | if ($isInstanceOf(db, "Order")) | |
793 | 984 | then { | |
794 | - | let | |
795 | - | let | |
796 | - | let | |
797 | - | let | |
798 | - | let | |
799 | - | if (if (if ( | |
800 | - | then | |
985 | + | let cC = db | |
986 | + | let eF = aA() | |
987 | + | let ap = cB(cC) | |
988 | + | let aq = sigVerify(cC.bodyBytes, cC.proofs[0], cC.senderPublicKey) | |
989 | + | let ar = sigVerify(cC.bodyBytes, cC.proofs[1], eF) | |
990 | + | if (if (if (ap) | |
991 | + | then aq | |
801 | 992 | else false) | |
802 | - | then | |
993 | + | then ar | |
803 | 994 | else false) | |
804 | 995 | then true | |
805 | - | else | |
996 | + | else ao(ap, aq, ar) | |
806 | 997 | } | |
807 | - | else if ($isInstanceOf( | |
998 | + | else if ($isInstanceOf(db, "SetScriptTransaction")) | |
808 | 999 | then { | |
809 | - | let | |
810 | - | let | |
811 | - | let | |
812 | - | let | |
813 | - | if (if (( | |
814 | - | then ( | |
1000 | + | let dA = db | |
1001 | + | let eG = blake2b256(value(dA.script)) | |
1002 | + | let eH = fromBase64String(value(getString(ay, an()))) | |
1003 | + | let eI = scriptHash(this) | |
1004 | + | if (if ((eH == eG)) | |
1005 | + | then (eI != eG) | |
815 | 1006 | else false) | |
816 | 1007 | then true | |
817 | - | else sigVerify( | |
1008 | + | else sigVerify(eC.bodyBytes, eC.proofs[0], eE) | |
818 | 1009 | } | |
819 | - | else sigVerify( | |
1010 | + | else sigVerify(eC.bodyBytes, eC.proofs[0], eE) | |
820 | 1011 | } | |
821 | 1012 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = 8 | |
5 | 5 | ||
6 | 6 | let b = 100000000 | |
7 | 7 | ||
8 | 8 | let c = toBigInt(100000000) | |
9 | 9 | ||
10 | 10 | let d = toBigInt(1000000000000000000) | |
11 | 11 | ||
12 | 12 | let e = toBigInt(0) | |
13 | 13 | ||
14 | - | let f = | |
14 | + | let f = toBigInt(0) | |
15 | 15 | ||
16 | - | let g = 1 | |
16 | + | let g = toBigInt(1) | |
17 | 17 | ||
18 | - | let h = | |
18 | + | let h = toBigInt(1) | |
19 | 19 | ||
20 | - | let i = | |
20 | + | let i = "WAVES" | |
21 | 21 | ||
22 | - | let j = | |
22 | + | let j = "__" | |
23 | 23 | ||
24 | 24 | let k = 1 | |
25 | 25 | ||
26 | 26 | let l = 2 | |
27 | 27 | ||
28 | 28 | let m = 3 | |
29 | 29 | ||
30 | 30 | let n = 4 | |
31 | 31 | ||
32 | - | let o = | |
32 | + | let o = 1 | |
33 | 33 | ||
34 | - | let p = | |
34 | + | let p = 2 | |
35 | 35 | ||
36 | - | let q = | |
36 | + | let q = 3 | |
37 | 37 | ||
38 | - | let r = | |
38 | + | let r = 4 | |
39 | 39 | ||
40 | - | let s = | |
40 | + | let s = 5 | |
41 | 41 | ||
42 | - | let t = | |
42 | + | let t = 6 | |
43 | 43 | ||
44 | - | let u = | |
44 | + | let u = 7 | |
45 | 45 | ||
46 | - | let v = | |
46 | + | let v = 8 | |
47 | 47 | ||
48 | - | let w = | |
48 | + | let w = 9 | |
49 | 49 | ||
50 | - | let x = | |
50 | + | let x = 10 | |
51 | 51 | ||
52 | - | let y = | |
52 | + | let y = 1 | |
53 | 53 | ||
54 | - | func z (A,B) = fraction(toBigInt(A), d, toBigInt(B)) | |
54 | + | let z = 2 | |
55 | + | ||
56 | + | let A = 3 | |
57 | + | ||
58 | + | let B = 1 | |
59 | + | ||
60 | + | let C = 7 | |
61 | + | ||
62 | + | func D (E,F) = fraction(toBigInt(E), d, toBigInt(F)) | |
55 | 63 | ||
56 | 64 | ||
57 | - | func | |
65 | + | func G (H,I) = toInt(fraction(H, toBigInt(I), d)) | |
58 | 66 | ||
59 | 67 | ||
60 | - | func | |
68 | + | func J (K,L,M) = fraction(K, L, M) | |
61 | 69 | ||
62 | 70 | ||
63 | - | func | |
64 | - | then -( | |
65 | - | else | |
71 | + | func N (H) = if ((e > H)) | |
72 | + | then -(H) | |
73 | + | else H | |
66 | 74 | ||
67 | 75 | ||
68 | - | func | |
76 | + | func O () = "%s__factoryContract" | |
69 | 77 | ||
70 | 78 | ||
71 | - | func | |
79 | + | func P () = "%s__managerPublicKey" | |
72 | 80 | ||
73 | 81 | ||
74 | - | func | |
82 | + | func Q () = "%s__pendingManagerPublicKey" | |
75 | 83 | ||
76 | 84 | ||
77 | - | func | |
85 | + | func R () = "%s%s__price__last" | |
78 | 86 | ||
79 | 87 | ||
80 | - | func | |
88 | + | func S (T,U) = makeString(["%s%s%d%d__price__history", toString(T), toString(U)], j) | |
81 | 89 | ||
82 | 90 | ||
83 | - | func | |
91 | + | func V (W,X) = ((("%s%s%s__P__" + W) + "__") + X) | |
84 | 92 | ||
85 | 93 | ||
86 | - | func | |
94 | + | func Y (W,X) = ((("%s%s%s__G__" + W) + "__") + X) | |
87 | 95 | ||
88 | 96 | ||
89 | - | func | |
97 | + | func Z () = "%s__amountAsset" | |
90 | 98 | ||
91 | 99 | ||
92 | - | func | |
100 | + | func aa () = "%s__priceAsset" | |
93 | 101 | ||
94 | 102 | ||
95 | - | func | |
103 | + | func ab () = "%s__factoryConfig" | |
96 | 104 | ||
97 | 105 | ||
98 | - | func | |
106 | + | func ac () = "%s%s__matcher__publicKey" | |
99 | 107 | ||
100 | 108 | ||
101 | - | func | |
109 | + | func ad (ae) = (("%s%s%s__" + ae) + "__mappings__poolContract2LpAsset") | |
102 | 110 | ||
103 | 111 | ||
104 | - | func | |
112 | + | func af (ag,ah) = (((("%d%d%s__" + ag) + "__") + ah) + "__config") | |
105 | 113 | ||
106 | 114 | ||
107 | - | func | |
115 | + | func ai (aj) = ("%s%s%s__mappings__baseAsset2internalId__" + aj) | |
108 | 116 | ||
109 | 117 | ||
110 | - | func | |
118 | + | func ak () = "%s__shutdown" | |
111 | 119 | ||
112 | 120 | ||
113 | - | func | |
121 | + | func al (am) = ("%s%s__poolWeight__" + am) | |
114 | 122 | ||
115 | 123 | ||
116 | - | func | |
124 | + | func an () = "%s__allowedLpScriptHash" | |
117 | 125 | ||
118 | 126 | ||
119 | - | func | |
127 | + | func ao (ap,aq,ar) = throw(((((("order validation failed: orderValid=" + toString(ap)) + " senderValid=") + toString(aq)) + " matcherValid=") + toString(ar))) | |
120 | 128 | ||
121 | 129 | ||
122 | - | func | |
130 | + | func as (at,au) = valueOrErrorMessage(getString(at, au), makeString(["mandatory ", toString(at), ".", au, " is not defined"], "")) | |
123 | 131 | ||
124 | 132 | ||
125 | - | func | |
133 | + | func av (at,au) = valueOrErrorMessage(getInteger(at, au), makeString(["mandatory ", toString(at), ".", au, " is not defined"], "")) | |
126 | 134 | ||
127 | 135 | ||
128 | - | let as = addressFromStringValue(ao(this, K())) | |
129 | - | ||
130 | - | func at () = valueOrElse(getBoolean(as, ag()), false) | |
136 | + | func aw (ax) = throw(makeString(["lp.ride:", ax], " ")) | |
131 | 137 | ||
132 | 138 | ||
133 | - | func au () = fromBase58String(ao(as, Y())) | |
139 | + | let ay = addressFromStringValue(as(this, O())) | |
140 | + | ||
141 | + | func az () = valueOrElse(getBoolean(ay, ak()), false) | |
134 | 142 | ||
135 | 143 | ||
136 | - | func av () = { | |
137 | - | let aw = ao(this, V()) | |
138 | - | let ax = ao(this, W()) | |
139 | - | let ad = ar(as, ae(ax)) | |
140 | - | let ac = ar(as, ae(aw)) | |
141 | - | split(ao(as, ab(toString(ac), toString(ad))), f) | |
144 | + | func aA () = fromBase58String(as(ay, ac())) | |
145 | + | ||
146 | + | ||
147 | + | func aB () = { | |
148 | + | let aC = as(this, Z()) | |
149 | + | let aD = as(this, aa()) | |
150 | + | let ah = av(ay, ai(aD)) | |
151 | + | let ag = av(ay, ai(aC)) | |
152 | + | split(as(ay, af(toString(ag), toString(ah))), j) | |
142 | 153 | } | |
143 | 154 | ||
144 | 155 | ||
145 | - | func ay () = split(ao(as, X()), f) | |
156 | + | func aE (aF) = if ((aF == i)) | |
157 | + | then unit | |
158 | + | else fromBase58String(aF) | |
146 | 159 | ||
147 | 160 | ||
148 | - | func az (aA,aB,aC,aD,aE,aF,aG,aH,aI,aJ) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(aA), toString(aB), toString(aC), toString(aD), toString(aE), toString(aF), toString(aG), toString(aH), toString(aI), toString(aJ)], f) | |
161 | + | func aG (aF) = if ((aF == unit)) | |
162 | + | then i | |
163 | + | else toBase58String(value(aF)) | |
149 | 164 | ||
150 | 165 | ||
151 | - | func | |
166 | + | func aH (aI) = $Tuple7(addressFromStringValue(aI[o]), parseIntValue(aI[p]), fromBase58String(aI[q]), aE(aI[r]), aE(aI[s]), parseIntValue(aI[t]), parseIntValue(aI[u])) | |
152 | 167 | ||
153 | 168 | ||
154 | - | func aO (aP) = if ((aP == "WAVES")) | |
155 | - | then wavesBalance(this).available | |
156 | - | else assetBalance(this, fromBase58String(aP)) | |
169 | + | func aJ () = split(as(ay, ab()), j) | |
157 | 170 | ||
158 | 171 | ||
159 | - | func aQ (aR,aS) = fraction(aR, d, aS) | |
172 | + | let aK = valueOrErrorMessage(addressFromString(aJ()[B]), "incorrect staking address") | |
173 | + | ||
174 | + | let aL = valueOrErrorMessage(addressFromString(aJ()[C]), "incorrect staking address") | |
175 | + | ||
176 | + | func aM (aN,aO,aP,aQ,aR,aS,aT,aU,aV,aW) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(aN), toString(aO), toString(aP), toString(aQ), toString(aR), toString(aS), toString(aT), toString(aU), toString(aV), toString(aW)], j) | |
160 | 177 | ||
161 | 178 | ||
162 | - | func aT (aU,aV,aW,aX) = { | |
163 | - | let aY = z(aW, aU) | |
164 | - | let aZ = z(aX, aV) | |
165 | - | aQ(aZ, aY) | |
179 | + | func aX (aY,aZ,ba,aQ,aT,aU) = makeString(["%d%d%d%d%d%d", toString(aY), toString(aZ), toString(ba), toString(aQ), toString(aT), toString(aU)], j) | |
180 | + | ||
181 | + | ||
182 | + | func bb (bc) = if ((bc == "WAVES")) | |
183 | + | then wavesBalance(this).available | |
184 | + | else assetBalance(this, fromBase58String(bc)) | |
185 | + | ||
186 | + | ||
187 | + | func bd (be,bf) = fraction(be, d, bf) | |
188 | + | ||
189 | + | ||
190 | + | func bg (bh,bi,bj,bk) = { | |
191 | + | let bl = D(bj, bh) | |
192 | + | let bm = D(bk, bi) | |
193 | + | bd(bm, bl) | |
166 | 194 | } | |
167 | 195 | ||
168 | 196 | ||
169 | - | func | |
170 | - | let | |
171 | - | let | |
172 | - | let | |
173 | - | let | |
174 | - | let | |
175 | - | let | |
176 | - | let | |
177 | - | let | |
178 | - | let | |
179 | - | [ | |
197 | + | func bn (bj,bk,bo) = { | |
198 | + | let bp = aB() | |
199 | + | let bq = parseIntValue(bp[t]) | |
200 | + | let br = parseIntValue(bp[u]) | |
201 | + | let bs = bg(bq, br, bj, bk) | |
202 | + | let bf = D(bj, bq) | |
203 | + | let be = D(bk, br) | |
204 | + | let bt = D(bo, b) | |
205 | + | let bu = bd(bf, bt) | |
206 | + | let bv = bd(be, bt) | |
207 | + | [bs, bu, bv] | |
180 | 208 | } | |
181 | 209 | ||
182 | 210 | ||
183 | - | func | |
184 | - | let | |
185 | - | [ | |
211 | + | func bw (bj,bk,bo) = { | |
212 | + | let bx = bn(bj, bk, bo) | |
213 | + | [G(bx[0], b), G(bx[1], b), G(bx[2], b)] | |
186 | 214 | } | |
187 | 215 | ||
188 | 216 | ||
189 | - | func | |
190 | - | let | |
191 | - | let | |
192 | - | let | |
193 | - | let | |
194 | - | let | |
195 | - | let | |
196 | - | let | |
197 | - | let | |
198 | - | if (( | |
217 | + | func by (bz,bA,bB,W) = { | |
218 | + | let bp = aB() | |
219 | + | let bC = bp[q] | |
220 | + | let bD = bp[r] | |
221 | + | let bE = bp[s] | |
222 | + | let bh = parseIntValue(bp[t]) | |
223 | + | let bi = parseIntValue(bp[u]) | |
224 | + | let bF = bp[p] | |
225 | + | let bG = valueOrErrorMessage(assetInfo(fromBase58String(bC)), (("Asset " + bC) + " doesn't exist")).quantity | |
226 | + | if ((bC != bA)) | |
199 | 227 | then throw("Invalid asset passed.") | |
200 | 228 | else { | |
201 | - | let | |
202 | - | let | |
203 | - | let | |
204 | - | let | |
205 | - | let | |
206 | - | let | |
207 | - | let | |
208 | - | let | |
209 | - | let | |
210 | - | let | |
211 | - | let | |
212 | - | let | |
213 | - | let | |
229 | + | let bH = bb(bD) | |
230 | + | let bI = D(bH, bh) | |
231 | + | let bJ = bb(bE) | |
232 | + | let bK = D(bJ, bi) | |
233 | + | let bL = bd(bK, bI) | |
234 | + | let bM = G(bL, b) | |
235 | + | let bN = D(bB, b) | |
236 | + | let bO = D(bG, b) | |
237 | + | let bP = fraction(bI, bN, bO) | |
238 | + | let bQ = fraction(bK, bN, bO) | |
239 | + | let bR = G(bP, bh) | |
240 | + | let bS = G(bQ, bi) | |
241 | + | let bT = if ((bz == "")) | |
214 | 242 | then nil | |
215 | - | else [ScriptTransfer( | |
243 | + | else [ScriptTransfer(W, bR, if ((bD == "WAVES")) | |
216 | 244 | then unit | |
217 | - | else fromBase58String( | |
245 | + | else fromBase58String(bD)), ScriptTransfer(W, bS, if ((bE == "WAVES")) | |
218 | 246 | then unit | |
219 | - | else fromBase58String( | |
220 | - | $Tuple10(bE, bF, | |
247 | + | else fromBase58String(bE)), StringEntry(Y(toString(W), bz), aX(bR, bS, bB, bM, height, lastBlock.timestamp)), IntegerEntry(R(), bM), IntegerEntry(S(height, lastBlock.timestamp), bM)] | |
248 | + | $Tuple10(bR, bS, bD, bE, bH, bJ, bG, bL, bF, bT) | |
221 | 249 | } | |
222 | 250 | } | |
223 | 251 | ||
224 | 252 | ||
225 | - | func | |
226 | - | let | |
227 | - | let | |
228 | - | let | |
229 | - | let | |
230 | - | let | |
231 | - | let | |
232 | - | let | |
233 | - | let | |
234 | - | let | |
235 | - | let | |
236 | - | let | |
237 | - | let | |
238 | - | if (if (( | |
253 | + | func bU (bz,bV,bW,bX,bY,bZ,W,ca,cb) = { | |
254 | + | let bp = aB() | |
255 | + | let bC = fromBase58String(bp[q]) | |
256 | + | let cc = bp[r] | |
257 | + | let cd = bp[s] | |
258 | + | let ce = bp[v] | |
259 | + | let cf = bp[w] | |
260 | + | let bq = parseIntValue(bp[t]) | |
261 | + | let br = parseIntValue(bp[u]) | |
262 | + | let bF = bp[p] | |
263 | + | let bG = valueOrErrorMessage(assetInfo(bC), (("Asset " + toBase58String(bC)) + " doesn't exist")).quantity | |
264 | + | let cg = toBase58String(valueOrElse(bX, fromBase58String("WAVES"))) | |
265 | + | let ch = toBase58String(valueOrElse(bZ, fromBase58String("WAVES"))) | |
266 | + | if (if ((cc != cg)) | |
239 | 267 | then true | |
240 | - | else ( | |
268 | + | else (cd != ch)) | |
241 | 269 | then throw("Invalid amt or price asset passed.") | |
242 | 270 | else { | |
243 | - | let | |
244 | - | then | |
245 | - | else ( | |
246 | - | let | |
247 | - | then | |
248 | - | else ( | |
249 | - | let | |
250 | - | let | |
251 | - | let | |
252 | - | let | |
253 | - | let | |
254 | - | let | |
271 | + | let bH = if (ca) | |
272 | + | then bb(cc) | |
273 | + | else (bb(cc) - bW) | |
274 | + | let bJ = if (ca) | |
275 | + | then bb(cd) | |
276 | + | else (bb(cd) - bY) | |
277 | + | let ci = D(bW, bq) | |
278 | + | let cj = D(bY, br) | |
279 | + | let ck = bd(cj, ci) | |
280 | + | let bI = D(bH, bq) | |
281 | + | let bK = D(bJ, br) | |
282 | + | let cl = if ((bG == 0)) | |
255 | 283 | then { | |
256 | - | let | |
257 | - | let | |
258 | - | let | |
259 | - | $Tuple5( | |
284 | + | let bL = e | |
285 | + | let cm = e | |
286 | + | let bt = pow((ci * cj), 0, toBigInt(5), 1, 0, DOWN) | |
287 | + | $Tuple5(G(bt, b), G(ci, bq), G(cj, br), bd((bK + cj), (bI + ci)), cm) | |
260 | 288 | } | |
261 | 289 | else { | |
262 | - | let | |
263 | - | let | |
264 | - | let | |
265 | - | if (if (( | |
266 | - | then ( | |
290 | + | let bL = bd(bK, bI) | |
291 | + | let cm = fraction(N((bL - ck)), d, bL) | |
292 | + | let cn = D(bV, b) | |
293 | + | if (if ((bL != e)) | |
294 | + | then (cm > cn) | |
267 | 295 | else false) | |
268 | - | then throw(((("Price slippage " + toString( | |
296 | + | then throw(((("Price slippage " + toString(cm)) + " exceeded the passed limit of ") + toString(cn))) | |
269 | 297 | else { | |
270 | - | let | |
271 | - | let | |
272 | - | let | |
273 | - | let | |
274 | - | then $Tuple2( | |
275 | - | else $Tuple2( | |
276 | - | let | |
277 | - | let | |
278 | - | let | |
279 | - | $Tuple5( | |
298 | + | let bO = D(bG, b) | |
299 | + | let co = fraction(ci, bL, d) | |
300 | + | let cp = fraction(cj, d, bL) | |
301 | + | let cq = if ((co > cj)) | |
302 | + | then $Tuple2(cp, cj) | |
303 | + | else $Tuple2(ci, co) | |
304 | + | let cr = cq._1 | |
305 | + | let cs = cq._2 | |
306 | + | let bt = fraction(bO, cs, bK) | |
307 | + | $Tuple5(G(bt, b), G(cr, bq), G(cs, br), bL, cm) | |
280 | 308 | } | |
281 | 309 | } | |
282 | - | let | |
283 | - | let | |
284 | - | let | |
285 | - | let | |
286 | - | let | |
287 | - | if ((0 >= | |
310 | + | let ct = cl._1 | |
311 | + | let cu = cl._2 | |
312 | + | let cv = cl._3 | |
313 | + | let bM = G(cl._4, b) | |
314 | + | let cw = G(cl._5, b) | |
315 | + | if ((0 >= ct)) | |
288 | 316 | then throw("Invalid calculations. LP calculated is less than zero.") | |
289 | 317 | else { | |
290 | - | let | |
318 | + | let cx = if (!(cb)) | |
291 | 319 | then 0 | |
292 | - | else | |
293 | - | let | |
294 | - | let | |
295 | - | let | |
296 | - | $Tuple13( | |
320 | + | else ct | |
321 | + | let cy = (bW - cu) | |
322 | + | let cz = (bY - cv) | |
323 | + | let cA = [IntegerEntry(R(), bM), IntegerEntry(S(height, lastBlock.timestamp), bM), StringEntry(V(W, bz), aM(cu, cv, cx, bM, bV, cw, height, lastBlock.timestamp, cy, cz))] | |
324 | + | $Tuple13(ct, cx, bM, bH, bJ, bG, bC, bF, cA, cy, cz, bX, bZ) | |
297 | 325 | } | |
298 | 326 | } | |
299 | 327 | } | |
300 | 328 | ||
301 | 329 | ||
302 | - | func | |
303 | - | let | |
304 | - | let | |
305 | - | let | |
306 | - | let | |
307 | - | let | |
308 | - | let | |
309 | - | let | |
310 | - | let | |
311 | - | let | |
312 | - | then | |
313 | - | else | |
314 | - | let | |
315 | - | if (if (if ( | |
330 | + | func cB (cC) = { | |
331 | + | let bp = aB() | |
332 | + | let cD = bp[r] | |
333 | + | let cE = bp[s] | |
334 | + | let bF = parseIntValue(bp[p]) | |
335 | + | let bq = parseIntValue(bp[t]) | |
336 | + | let br = parseIntValue(bp[u]) | |
337 | + | let cF = bb(cD) | |
338 | + | let cG = bb(cE) | |
339 | + | let bL = if ((cC.orderType == Buy)) | |
340 | + | then bg(bq, br, (cF + cC.amount), cG) | |
341 | + | else bg(bq, br, (cF - cC.amount), cG) | |
342 | + | let bM = G(bL, b) | |
343 | + | if (if (if (az()) | |
316 | 344 | then true | |
317 | - | else ( | |
345 | + | else (bF == m)) | |
318 | 346 | then true | |
319 | - | else ( | |
347 | + | else (bF == n)) | |
320 | 348 | then throw("Exchange operations disabled") | |
321 | 349 | else { | |
322 | - | let | |
323 | - | let | |
350 | + | let cH = cC.assetPair.amountAsset | |
351 | + | let cI = if ((cH == unit)) | |
324 | 352 | then "WAVES" | |
325 | - | else toBase58String(value( | |
326 | - | let | |
327 | - | let | |
353 | + | else toBase58String(value(cH)) | |
354 | + | let cJ = cC.assetPair.priceAsset | |
355 | + | let cK = if ((cJ == unit)) | |
328 | 356 | then "WAVES" | |
329 | - | else toBase58String(value( | |
330 | - | if (if (( | |
357 | + | else toBase58String(value(cJ)) | |
358 | + | if (if ((cI != cD)) | |
331 | 359 | then true | |
332 | - | else ( | |
360 | + | else (cK != cE)) | |
333 | 361 | then throw("Wrong order assets.") | |
334 | 362 | else { | |
335 | - | let | |
336 | - | let | |
337 | - | let | |
338 | - | let | |
339 | - | then ( | |
340 | - | else ( | |
363 | + | let cL = cC.price | |
364 | + | let cM = fraction(b, br, bq) | |
365 | + | let cN = J(cL, b, cM) | |
366 | + | let cO = if ((cC.orderType == Buy)) | |
367 | + | then (bM >= cN) | |
368 | + | else (cN >= bM) | |
341 | 369 | true | |
342 | 370 | } | |
343 | 371 | } | |
344 | 372 | } | |
345 | 373 | ||
346 | 374 | ||
347 | - | func | |
375 | + | func cP (cQ) = if ((size(cQ.payments) != 1)) | |
348 | 376 | then throw("exactly 1 payment is expected") | |
349 | 377 | else { | |
350 | - | let | |
351 | - | let | |
352 | - | let | |
353 | - | let | |
354 | - | let | |
355 | - | let | |
356 | - | let | |
357 | - | let | |
358 | - | if (if ( | |
378 | + | let cR = value(cQ.payments[0]) | |
379 | + | let bA = value(cR.assetId) | |
380 | + | let cS = cR.amount | |
381 | + | let cl = by(toBase58String(cQ.transactionId), toBase58String(bA), cS, cQ.caller) | |
382 | + | let bR = cl._1 | |
383 | + | let bS = cl._2 | |
384 | + | let bF = parseIntValue(cl._9) | |
385 | + | let bT = cl._10 | |
386 | + | if (if (az()) | |
359 | 387 | then true | |
360 | - | else ( | |
361 | - | then throw(("Get operation is blocked by admin. Status = " + toString( | |
362 | - | else $Tuple5( | |
388 | + | else (bF == n)) | |
389 | + | then throw(("Get operation is blocked by admin. Status = " + toString(bF))) | |
390 | + | else $Tuple5(bR, bS, cS, bA, bT) | |
363 | 391 | } | |
364 | 392 | ||
365 | 393 | ||
366 | - | func | |
394 | + | func cT (cQ,bV,cb) = if ((size(cQ.payments) != 2)) | |
367 | 395 | then throw("exactly 2 payments are expected") | |
368 | 396 | else { | |
369 | - | let | |
370 | - | let | |
371 | - | let | |
372 | - | let | |
373 | - | if (if (if ( | |
397 | + | let cU = value(cQ.payments[0]) | |
398 | + | let cV = value(cQ.payments[1]) | |
399 | + | let cW = bU(toBase58String(cQ.transactionId), bV, cU.amount, cU.assetId, cV.amount, cV.assetId, toString(cQ.caller), false, cb) | |
400 | + | let bF = parseIntValue(cW._8) | |
401 | + | if (if (if (az()) | |
374 | 402 | then true | |
375 | - | else ( | |
403 | + | else (bF == l)) | |
376 | 404 | then true | |
377 | - | else ( | |
378 | - | then throw(("Put operation is blocked by admin. Status = " + toString( | |
379 | - | else | |
405 | + | else (bF == n)) | |
406 | + | then throw(("Put operation is blocked by admin. Status = " + toString(bF))) | |
407 | + | else cW | |
380 | 408 | } | |
381 | 409 | ||
382 | 410 | ||
383 | - | func | |
384 | - | let | |
385 | - | if ( | |
411 | + | func cX (cY) = { | |
412 | + | let cZ = invoke(ay, "emit", [cY], nil) | |
413 | + | if ((cZ == cZ)) | |
386 | 414 | then { | |
387 | - | let cM = cL | |
388 | - | fromBase58String(cM) | |
415 | + | let da = { | |
416 | + | let db = cZ | |
417 | + | if ($isInstanceOf(db, "Address")) | |
418 | + | then { | |
419 | + | let dc = db | |
420 | + | invoke(dc, "emit", [cY], nil) | |
421 | + | } | |
422 | + | else unit | |
423 | + | } | |
424 | + | if ((da == da)) | |
425 | + | then cY | |
426 | + | else throw("Strict value is not equal to itself.") | |
389 | 427 | } | |
390 | - | else if ($isInstanceOf(cL, "Unit")) | |
428 | + | else throw("Strict value is not equal to itself.") | |
429 | + | } | |
430 | + | ||
431 | + | ||
432 | + | func dd (de,df,W,X) = { | |
433 | + | let dg = (X == unit) | |
434 | + | let dh = aH(aB()) | |
435 | + | let di = dh._1 | |
436 | + | let bF = dh._2 | |
437 | + | let bC = dh._3 | |
438 | + | let dj = dh._4 | |
439 | + | let cE = dh._5 | |
440 | + | let dk = dh._6 | |
441 | + | let dl = dh._7 | |
442 | + | let dm = de | |
443 | + | let dn = if ((df == dj)) | |
444 | + | then bb(aG(dj)) | |
445 | + | else if ((df == cE)) | |
446 | + | then bb(aG(cE)) | |
447 | + | else aw("invalid asset") | |
448 | + | let do = if (dg) | |
449 | + | then 0 | |
450 | + | else dm | |
451 | + | let dp = (dn - do) | |
452 | + | let dq = toBigInt(dp) | |
453 | + | let dr = toBigInt(valueOrErrorMessage(assetInfo(bC), (("asset " + toBase58String(bC)) + " doesn't exist")).quantity) | |
454 | + | let ds = toBigInt(dm) | |
455 | + | let dt = ((dr * (sqrtBigInt((c + ((ds * c) / dq)), 8, 8, DOWN) - c)) / c) | |
456 | + | toInt(dt) | |
457 | + | } | |
458 | + | ||
459 | + | ||
460 | + | func du (dv,dm,df,W,X) = { | |
461 | + | let dg = (X == unit) | |
462 | + | let dw = aH(aB()) | |
463 | + | let di = dw._1 | |
464 | + | let bF = dw._2 | |
465 | + | let bC = dw._3 | |
466 | + | let dj = dw._4 | |
467 | + | let cE = dw._5 | |
468 | + | let dk = dw._6 | |
469 | + | let dl = dw._7 | |
470 | + | let dx = [if ((df == bC)) | |
471 | + | then true | |
472 | + | else throw("invalid lp asset")] | |
473 | + | if ((dx == dx)) | |
474 | + | then { | |
475 | + | let dq = if ((dv == dj)) | |
476 | + | then toBigInt(bb(aG(dj))) | |
477 | + | else if ((dv == cE)) | |
478 | + | then toBigInt(bb(aG(cE))) | |
479 | + | else aw("invalid asset") | |
480 | + | let dr = toBigInt(valueOrErrorMessage(assetInfo(bC), (("asset " + toBase58String(bC)) + " doesn't exist")).quantity) | |
481 | + | let dy = toBigInt(dm) | |
482 | + | let cY = ((dq * (c - pow((c - ((dy * c) / dr)), 8, h, 0, 8, DOWN))) / c) | |
483 | + | toInt(cY) | |
484 | + | } | |
485 | + | else throw("Strict value is not equal to itself.") | |
486 | + | } | |
487 | + | ||
488 | + | ||
489 | + | func dz () = { | |
490 | + | let db = getString(P()) | |
491 | + | if ($isInstanceOf(db, "String")) | |
492 | + | then { | |
493 | + | let dA = db | |
494 | + | fromBase58String(dA) | |
495 | + | } | |
496 | + | else if ($isInstanceOf(db, "Unit")) | |
391 | 497 | then unit | |
392 | 498 | else throw("Match error") | |
393 | 499 | } | |
394 | 500 | ||
395 | 501 | ||
396 | - | func | |
397 | - | let | |
398 | - | if ($isInstanceOf( | |
502 | + | func dB () = { | |
503 | + | let db = getString(Q()) | |
504 | + | if ($isInstanceOf(db, "String")) | |
399 | 505 | then { | |
400 | - | let | |
401 | - | fromBase58String( | |
506 | + | let dA = db | |
507 | + | fromBase58String(dA) | |
402 | 508 | } | |
403 | - | else if ($isInstanceOf( | |
509 | + | else if ($isInstanceOf(db, "Unit")) | |
404 | 510 | then unit | |
405 | 511 | else throw("Match error") | |
406 | 512 | } | |
407 | 513 | ||
408 | 514 | ||
409 | - | func | |
410 | - | let | |
411 | - | let | |
412 | - | if ($isInstanceOf( | |
515 | + | func dC (cQ) = { | |
516 | + | let dD = throw("Permission denied") | |
517 | + | let db = dz() | |
518 | + | if ($isInstanceOf(db, "ByteVector")) | |
413 | 519 | then { | |
414 | - | let | |
415 | - | if (( | |
520 | + | let dE = db | |
521 | + | if ((cQ.callerPublicKey == dE)) | |
416 | 522 | then true | |
417 | - | else | |
523 | + | else dD | |
418 | 524 | } | |
419 | - | else if ($isInstanceOf( | |
420 | - | then if (( | |
525 | + | else if ($isInstanceOf(db, "Unit")) | |
526 | + | then if ((cQ.caller == this)) | |
421 | 527 | then true | |
422 | - | else | |
528 | + | else dD | |
423 | 529 | else throw("Match error") | |
424 | 530 | } | |
425 | 531 | ||
426 | 532 | ||
427 | - | @Callable(cD) | |
428 | - | func constructor (as) = { | |
429 | - | let cR = cO(cD) | |
430 | - | if ((cR == cR)) | |
431 | - | then [StringEntry(K(), as)] | |
432 | - | else throw("Strict value is not equal to itself.") | |
433 | - | } | |
434 | - | ||
435 | - | ||
436 | - | ||
437 | - | @Callable(cD) | |
438 | - | func setManager (cS) = { | |
439 | - | let cR = cO(cD) | |
440 | - | if ((cR == cR)) | |
533 | + | @Callable(cQ) | |
534 | + | func setManager (dF) = { | |
535 | + | let dG = dC(cQ) | |
536 | + | if ((dG == dG)) | |
441 | 537 | then { | |
442 | - | let | |
443 | - | if (( | |
444 | - | then [StringEntry( | |
538 | + | let dH = fromBase58String(dF) | |
539 | + | if ((dH == dH)) | |
540 | + | then [StringEntry(Q(), dF)] | |
445 | 541 | else throw("Strict value is not equal to itself.") | |
446 | 542 | } | |
447 | 543 | else throw("Strict value is not equal to itself.") | |
448 | 544 | } | |
449 | 545 | ||
450 | 546 | ||
451 | 547 | ||
452 | - | @Callable( | |
548 | + | @Callable(cQ) | |
453 | 549 | func confirmManager () = { | |
454 | - | let | |
455 | - | let | |
550 | + | let dI = dB() | |
551 | + | let dJ = if (isDefined(dI)) | |
456 | 552 | then true | |
457 | 553 | else throw("No pending manager") | |
458 | - | if (( | |
554 | + | if ((dJ == dJ)) | |
459 | 555 | then { | |
460 | - | let | |
556 | + | let dK = if ((cQ.callerPublicKey == value(dI))) | |
461 | 557 | then true | |
462 | 558 | else throw("You are not pending manager") | |
463 | - | if (( | |
464 | - | then [StringEntry( | |
559 | + | if ((dK == dK)) | |
560 | + | then [StringEntry(P(), toBase58String(value(dI))), DeleteEntry(Q())] | |
465 | 561 | else throw("Strict value is not equal to itself.") | |
466 | 562 | } | |
467 | 563 | else throw("Strict value is not equal to itself.") | |
468 | 564 | } | |
469 | 565 | ||
470 | 566 | ||
471 | 567 | ||
472 | - | @Callable(cD) | |
473 | - | func put (bI,cX) = { | |
474 | - | let cY = ay() | |
475 | - | let cZ = valueOrErrorMessage(addressFromString(cY[x]), "Error. Incorrect staking address.") | |
476 | - | let da = valueOrErrorMessage(addressFromString(cY[y]), "Error. Incorrect slippage contract address.") | |
477 | - | if ((0 > bI)) | |
478 | - | then throw("Invalid slippageTolerance passed") | |
479 | - | else { | |
480 | - | let cJ = cG(cD, bI, true) | |
481 | - | let ck = cJ._2 | |
482 | - | let bp = cJ._7 | |
483 | - | let bG = cJ._9 | |
484 | - | let cl = cJ._10 | |
485 | - | let cm = cJ._11 | |
486 | - | let db = cJ._12 | |
487 | - | let dc = cJ._13 | |
488 | - | let dd = invoke(as, "emit", [ck], nil) | |
489 | - | if ((dd == dd)) | |
490 | - | then { | |
491 | - | let de = { | |
492 | - | let cL = dd | |
493 | - | if ($isInstanceOf(cL, "Address")) | |
568 | + | @Callable(cQ) | |
569 | + | func put (bV,dL) = if ((0 > bV)) | |
570 | + | then throw("Invalid slippageTolerance passed") | |
571 | + | else { | |
572 | + | let cW = cT(cQ, bV, true) | |
573 | + | let cx = cW._2 | |
574 | + | let bC = cW._7 | |
575 | + | let bT = cW._9 | |
576 | + | let cy = cW._10 | |
577 | + | let cz = cW._11 | |
578 | + | let dM = cW._12 | |
579 | + | let dN = cW._13 | |
580 | + | let cZ = invoke(ay, "emit", [cx], nil) | |
581 | + | if ((cZ == cZ)) | |
582 | + | then { | |
583 | + | let da = { | |
584 | + | let db = cZ | |
585 | + | if ($isInstanceOf(db, "Address")) | |
586 | + | then { | |
587 | + | let dc = db | |
588 | + | invoke(dc, "emit", [cx], nil) | |
589 | + | } | |
590 | + | else unit | |
591 | + | } | |
592 | + | if ((da == da)) | |
593 | + | then { | |
594 | + | let dO = if ((cy > 0)) | |
595 | + | then invoke(aL, "put", nil, [AttachedPayment(dM, cy)]) | |
596 | + | else nil | |
597 | + | if ((dO == dO)) | |
494 | 598 | then { | |
495 | - | let df = cL | |
496 | - | invoke(df, "emit", [ck], nil) | |
599 | + | let dP = if ((cz > 0)) | |
600 | + | then invoke(aL, "put", nil, [AttachedPayment(dN, cz)]) | |
601 | + | else nil | |
602 | + | if ((dP == dP)) | |
603 | + | then { | |
604 | + | let dQ = if (dL) | |
605 | + | then { | |
606 | + | let dR = invoke(aK, "stake", nil, [AttachedPayment(bC, cx)]) | |
607 | + | if ((dR == dR)) | |
608 | + | then nil | |
609 | + | else throw("Strict value is not equal to itself.") | |
610 | + | } | |
611 | + | else [ScriptTransfer(cQ.caller, cx, bC)] | |
612 | + | (bT ++ dQ) | |
613 | + | } | |
614 | + | else throw("Strict value is not equal to itself.") | |
497 | 615 | } | |
498 | - | else | |
616 | + | else throw("Strict value is not equal to itself.") | |
499 | 617 | } | |
500 | - | if ((de == de)) | |
501 | - | then { | |
502 | - | let dg = if ((cl > 0)) | |
503 | - | then invoke(da, "put", nil, [AttachedPayment(db, cl)]) | |
504 | - | else nil | |
505 | - | if ((dg == dg)) | |
506 | - | then { | |
507 | - | let dh = if ((cm > 0)) | |
508 | - | then invoke(da, "put", nil, [AttachedPayment(dc, cm)]) | |
509 | - | else nil | |
510 | - | if ((dh == dh)) | |
511 | - | then { | |
512 | - | let di = if (cX) | |
513 | - | then { | |
514 | - | let dj = invoke(cZ, "stake", nil, [AttachedPayment(bp, ck)]) | |
515 | - | if ((dj == dj)) | |
516 | - | then nil | |
517 | - | else throw("Strict value is not equal to itself.") | |
518 | - | } | |
519 | - | else [ScriptTransfer(cD.caller, ck, bp)] | |
520 | - | (bG ++ di) | |
521 | - | } | |
522 | - | else throw("Strict value is not equal to itself.") | |
523 | - | } | |
524 | - | else throw("Strict value is not equal to itself.") | |
525 | - | } | |
526 | - | else throw("Strict value is not equal to itself.") | |
527 | - | } | |
528 | - | else throw("Strict value is not equal to itself.") | |
529 | - | } | |
530 | - | } | |
531 | - | ||
532 | - | ||
533 | - | ||
534 | - | @Callable(cD) | |
535 | - | func putForFree (dk) = if ((0 > dk)) | |
536 | - | then throw("Invalid value passed") | |
537 | - | else { | |
538 | - | let cJ = cG(cD, dk, false) | |
539 | - | cJ._9 | |
618 | + | else throw("Strict value is not equal to itself.") | |
619 | + | } | |
620 | + | else throw("Strict value is not equal to itself.") | |
540 | 621 | } | |
541 | 622 | ||
542 | 623 | ||
543 | 624 | ||
544 | - | @Callable(cD) | |
545 | - | func get () = { | |
546 | - | let bY = cC(cD) | |
547 | - | let dl = bY._1 | |
548 | - | let bF = bY._2 | |
549 | - | let cF = bY._3 | |
550 | - | let bn = bY._4 | |
551 | - | let bG = bY._5 | |
552 | - | let dm = invoke(as, "burn", [cF], [AttachedPayment(bn, cF)]) | |
553 | - | if ((dm == dm)) | |
554 | - | then bG | |
625 | + | @Callable(cQ) | |
626 | + | func putForFree (dS) = if ((0 > dS)) | |
627 | + | then throw("Invalid value passed") | |
628 | + | else { | |
629 | + | let cW = cT(cQ, dS, false) | |
630 | + | cW._9 | |
631 | + | } | |
632 | + | ||
633 | + | ||
634 | + | ||
635 | + | @Callable(cQ) | |
636 | + | func putOneTkn (dT,dU) = { | |
637 | + | let dV = aH(aB()) | |
638 | + | let di = dV._1 | |
639 | + | let bF = dV._2 | |
640 | + | let bC = dV._3 | |
641 | + | let dj = dV._4 | |
642 | + | let cE = dV._5 | |
643 | + | let dk = dV._6 | |
644 | + | let dl = dV._7 | |
645 | + | let dW = if (if (az()) | |
646 | + | then true | |
647 | + | else (bF == l)) | |
648 | + | then true | |
649 | + | else (bF == n) | |
650 | + | let dx = [if (!(dW)) | |
651 | + | then true | |
652 | + | else aw("put operation is blocked by admin"), if ((size(cQ.payments) == 1)) | |
653 | + | then true | |
654 | + | else aw("exactly 1 payment are expected")] | |
655 | + | if ((dx == dx)) | |
656 | + | then { | |
657 | + | let dX = cQ.payments[0] | |
658 | + | let df = dX.assetId | |
659 | + | let de = dX.amount | |
660 | + | let dm = de | |
661 | + | let W = cQ.caller | |
662 | + | let X = cQ.transactionId | |
663 | + | let dY = { | |
664 | + | let dZ = dd(de, df, W, X) | |
665 | + | if (if ((dT > 0)) | |
666 | + | then (dT > dZ) | |
667 | + | else false) | |
668 | + | then throw(makeString(["amount to receive is less than ", toString(dT)], "")) | |
669 | + | else dZ | |
670 | + | } | |
671 | + | let cZ = cX(dY) | |
672 | + | if ((cZ == cZ)) | |
673 | + | then { | |
674 | + | let dQ = if (dU) | |
675 | + | then { | |
676 | + | let ea = invoke(aK, "stake", nil, [AttachedPayment(bC, dY)]) | |
677 | + | if ((ea == ea)) | |
678 | + | then nil | |
679 | + | else throw("Strict value is not equal to itself.") | |
680 | + | } | |
681 | + | else [ScriptTransfer(cQ.caller, dY, bC)] | |
682 | + | $Tuple2(dQ, dY) | |
683 | + | } | |
684 | + | else throw("Strict value is not equal to itself.") | |
685 | + | } | |
555 | 686 | else throw("Strict value is not equal to itself.") | |
556 | 687 | } | |
557 | 688 | ||
558 | 689 | ||
559 | 690 | ||
560 | - | @Callable(cD) | |
561 | - | func getNoLess (dn,do) = { | |
562 | - | let bY = cC(cD) | |
563 | - | let bE = bY._1 | |
564 | - | let bF = bY._2 | |
565 | - | let cF = bY._3 | |
566 | - | let bn = bY._4 | |
567 | - | let bG = bY._5 | |
568 | - | if ((dn > bE)) | |
569 | - | then throw(((("noLessThenAmtAsset failed: " + toString(bE)) + " < ") + toString(dn))) | |
570 | - | else if ((do > bF)) | |
571 | - | then throw(((("noLessThenPriceAsset failed: " + toString(bF)) + " < ") + toString(do))) | |
691 | + | @Callable(cQ) | |
692 | + | func getOneTkn (dv,dT,eb) = { | |
693 | + | let ec = aH(aB()) | |
694 | + | let di = ec._1 | |
695 | + | let bF = ec._2 | |
696 | + | let bC = ec._3 | |
697 | + | let dj = ec._4 | |
698 | + | let cE = ec._5 | |
699 | + | let dk = ec._6 | |
700 | + | let dl = ec._7 | |
701 | + | let ed = if (az()) | |
702 | + | then true | |
703 | + | else (bF == n) | |
704 | + | let dx = [if (!(ed)) | |
705 | + | then true | |
706 | + | else aw("get operation is blocked by admin"), if ((size(cQ.payments) == 1)) | |
707 | + | then true | |
708 | + | else aw("exactly 1 payment are expected")] | |
709 | + | if ((dx == dx)) | |
710 | + | then { | |
711 | + | let dX = cQ.payments[0] | |
712 | + | let df = dX.assetId | |
713 | + | let dm = dX.amount | |
714 | + | let W = cQ.caller | |
715 | + | let X = cQ.transactionId | |
716 | + | let cY = { | |
717 | + | let ee = du(aE(dv), dm, df, W, X) | |
718 | + | if (if ((dT > 0)) | |
719 | + | then (dT > ee) | |
720 | + | else false) | |
721 | + | then throw(makeString(["amount to receive is less than ", toString(dT)], "")) | |
722 | + | else ee | |
723 | + | } | |
724 | + | let ef = invoke(ay, "burn", [dm], [AttachedPayment(df, dm)]) | |
725 | + | if ((ef == ef)) | |
726 | + | then { | |
727 | + | let eg = [ScriptTransfer(W, cY, aE(dv))] | |
728 | + | $Tuple2(eg, cY) | |
729 | + | } | |
730 | + | else throw("Strict value is not equal to itself.") | |
731 | + | } | |
732 | + | else throw("Strict value is not equal to itself.") | |
733 | + | } | |
734 | + | ||
735 | + | ||
736 | + | ||
737 | + | @Callable(cQ) | |
738 | + | func get () = { | |
739 | + | let cl = cP(cQ) | |
740 | + | let eh = cl._1 | |
741 | + | let bS = cl._2 | |
742 | + | let cS = cl._3 | |
743 | + | let bA = cl._4 | |
744 | + | let bT = cl._5 | |
745 | + | let ei = invoke(ay, "burn", [cS], [AttachedPayment(bA, cS)]) | |
746 | + | if ((ei == ei)) | |
747 | + | then bT | |
748 | + | else throw("Strict value is not equal to itself.") | |
749 | + | } | |
750 | + | ||
751 | + | ||
752 | + | ||
753 | + | @Callable(cQ) | |
754 | + | func getNoLess (ej,ek) = { | |
755 | + | let cl = cP(cQ) | |
756 | + | let bR = cl._1 | |
757 | + | let bS = cl._2 | |
758 | + | let cS = cl._3 | |
759 | + | let bA = cl._4 | |
760 | + | let bT = cl._5 | |
761 | + | if ((ej > bR)) | |
762 | + | then throw(((("noLessThenAmtAsset failed: " + toString(bR)) + " < ") + toString(ej))) | |
763 | + | else if ((ek > bS)) | |
764 | + | then throw(((("noLessThenPriceAsset failed: " + toString(bS)) + " < ") + toString(ek))) | |
572 | 765 | else { | |
573 | - | let | |
574 | - | if (( | |
575 | - | then | |
766 | + | let ei = invoke(ay, "burn", [cS], [AttachedPayment(bA, cS)]) | |
767 | + | if ((ei == ei)) | |
768 | + | then bT | |
576 | 769 | else throw("Strict value is not equal to itself.") | |
577 | 770 | } | |
578 | 771 | } | |
579 | 772 | ||
580 | 773 | ||
581 | 774 | ||
582 | - | @Callable( | |
583 | - | func unstakeAndGet ( | |
584 | - | let | |
775 | + | @Callable(cQ) | |
776 | + | func unstakeAndGet (cY) = { | |
777 | + | let el = if ((size(cQ.payments) != 0)) | |
585 | 778 | then throw("No payments are expected") | |
586 | 779 | else true | |
587 | - | if (( | |
780 | + | if ((el == el)) | |
588 | 781 | then { | |
589 | - | let bc = av() | |
590 | - | let cY = ay() | |
591 | - | let bp = fromBase58String(bc[m]) | |
592 | - | let cZ = valueOrErrorMessage(addressFromString(cY[x]), "Error. Incorrect staking address.") | |
593 | - | let dr = invoke(cZ, "unstake", [toBase58String(bp), dp], nil) | |
594 | - | if ((dr == dr)) | |
782 | + | let bp = aB() | |
783 | + | let bC = fromBase58String(bp[q]) | |
784 | + | let em = invoke(aK, "unstake", [toBase58String(bC), cY], nil) | |
785 | + | if ((em == em)) | |
595 | 786 | then { | |
596 | - | let | |
597 | - | let | |
598 | - | let | |
599 | - | let | |
787 | + | let cl = by(toBase58String(cQ.transactionId), toBase58String(bC), cY, cQ.caller) | |
788 | + | let bF = parseIntValue(cl._9) | |
789 | + | let bT = cl._10 | |
790 | + | let en = if (if (az()) | |
600 | 791 | then true | |
601 | - | else ( | |
602 | - | then throw(("Get operation is blocked by admin. Status = " + toString( | |
792 | + | else (bF == n)) | |
793 | + | then throw(("Get operation is blocked by admin. Status = " + toString(bF))) | |
603 | 794 | else true | |
604 | - | if (( | |
795 | + | if ((en == en)) | |
605 | 796 | then { | |
606 | - | let | |
607 | - | if (( | |
608 | - | then | |
797 | + | let ei = invoke(ay, "burn", [cY], [AttachedPayment(bC, cY)]) | |
798 | + | if ((ei == ei)) | |
799 | + | then bT | |
609 | 800 | else throw("Strict value is not equal to itself.") | |
610 | 801 | } | |
611 | 802 | else throw("Strict value is not equal to itself.") | |
612 | 803 | } | |
613 | 804 | else throw("Strict value is not equal to itself.") | |
614 | 805 | } | |
615 | 806 | else throw("Strict value is not equal to itself.") | |
616 | 807 | } | |
617 | 808 | ||
618 | 809 | ||
619 | 810 | ||
620 | - | @Callable( | |
621 | - | func activate ( | |
811 | + | @Callable(cQ) | |
812 | + | func activate (eo,ep) = if ((toString(cQ.caller) != toString(ay))) | |
622 | 813 | then throw("permissions denied") | |
623 | - | else $Tuple2([StringEntry( | |
814 | + | else $Tuple2([StringEntry(Z(), eo), StringEntry(aa(), ep)], "success") | |
624 | 815 | ||
625 | 816 | ||
626 | 817 | ||
627 | - | @Callable( | |
628 | - | func getPoolConfigWrapperREADONLY () = $Tuple2(nil, | |
818 | + | @Callable(cQ) | |
819 | + | func getPoolConfigWrapperREADONLY () = $Tuple2(nil, aB()) | |
629 | 820 | ||
630 | 821 | ||
631 | 822 | ||
632 | - | @Callable( | |
633 | - | func getAccBalanceWrapperREADONLY ( | |
823 | + | @Callable(cQ) | |
824 | + | func getAccBalanceWrapperREADONLY (bc) = $Tuple2(nil, bb(bc)) | |
634 | 825 | ||
635 | 826 | ||
636 | 827 | ||
637 | - | @Callable( | |
638 | - | func calcPricesWrapperREADONLY ( | |
639 | - | let | |
640 | - | $Tuple2(nil, [toString( | |
828 | + | @Callable(cQ) | |
829 | + | func calcPricesWrapperREADONLY (bj,bk,bo) = { | |
830 | + | let bx = bn(bj, bk, bo) | |
831 | + | $Tuple2(nil, [toString(bx[0]), toString(bx[1]), toString(bx[2])]) | |
641 | 832 | } | |
642 | 833 | ||
643 | 834 | ||
644 | 835 | ||
645 | - | @Callable( | |
646 | - | func toX18WrapperREADONLY ( | |
836 | + | @Callable(cQ) | |
837 | + | func toX18WrapperREADONLY (E,F) = $Tuple2(nil, toString(D(E, F))) | |
647 | 838 | ||
648 | 839 | ||
649 | 840 | ||
650 | - | @Callable( | |
651 | - | func fromX18WrapperREADONLY ( | |
841 | + | @Callable(cQ) | |
842 | + | func fromX18WrapperREADONLY (H,I) = $Tuple2(nil, G(parseBigIntValue(H), I)) | |
652 | 843 | ||
653 | 844 | ||
654 | 845 | ||
655 | - | @Callable( | |
656 | - | func calcPriceBigIntWrapperREADONLY ( | |
846 | + | @Callable(cQ) | |
847 | + | func calcPriceBigIntWrapperREADONLY (be,bf) = $Tuple2(nil, toString(bd(parseBigIntValue(be), parseBigIntValue(bf)))) | |
657 | 848 | ||
658 | 849 | ||
659 | 850 | ||
660 | - | @Callable( | |
661 | - | func estimatePutOperationWrapperREADONLY ( | |
851 | + | @Callable(cQ) | |
852 | + | func estimatePutOperationWrapperREADONLY (bz,bV,bW,bX,bY,bZ,W,ca,cb) = $Tuple2(nil, bU(bz, bV, bW, bX, bY, bZ, W, ca, cb)) | |
662 | 853 | ||
663 | 854 | ||
664 | 855 | ||
665 | - | @Callable( | |
666 | - | func estimateGetOperationWrapperREADONLY ( | |
667 | - | let | |
668 | - | $Tuple2(nil, $Tuple10( | |
856 | + | @Callable(cQ) | |
857 | + | func estimateGetOperationWrapperREADONLY (bz,bA,bB,W) = { | |
858 | + | let cl = by(bz, bA, bB, addressFromStringValue(W)) | |
859 | + | $Tuple2(nil, $Tuple10(cl._1, cl._2, cl._3, cl._4, cl._5, cl._6, cl._7, toString(cl._8), cl._9, cl._10)) | |
669 | 860 | } | |
670 | 861 | ||
671 | 862 | ||
672 | 863 | ||
673 | - | @Callable( | |
864 | + | @Callable(cQ) | |
674 | 865 | func statsREADONLY () = { | |
675 | - | let | |
676 | - | let | |
677 | - | let | |
678 | - | let | |
679 | - | let | |
680 | - | let | |
681 | - | let | |
682 | - | let | |
683 | - | let | |
684 | - | let | |
685 | - | let | |
686 | - | let | |
866 | + | let bp = aB() | |
867 | + | let bC = fromBase58String(bp[q]) | |
868 | + | let cD = bp[r] | |
869 | + | let cE = bp[s] | |
870 | + | let ce = bp[v] | |
871 | + | let cf = bp[w] | |
872 | + | let bq = parseIntValue(bp[t]) | |
873 | + | let br = parseIntValue(bp[u]) | |
874 | + | let eq = valueOrErrorMessage(assetInfo(bC), (("Asset " + toBase58String(bC)) + " doesn't exist")).quantity | |
875 | + | let cF = bb(cD) | |
876 | + | let cG = bb(cE) | |
877 | + | let er = if ((eq == 0)) | |
687 | 878 | then [e, e, e] | |
688 | - | else | |
689 | - | let | |
690 | - | let | |
691 | - | let | |
692 | - | let | |
693 | - | $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString( | |
879 | + | else bn(cF, cG, eq) | |
880 | + | let bM = 0 | |
881 | + | let es = G(er[1], b) | |
882 | + | let et = G(er[2], b) | |
883 | + | let eu = value(getInteger(ay, al(toString(this)))) | |
884 | + | $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(cF), toString(cG), toString(eq), toString(bM), toString(es), toString(et), toString(eu)], j)) | |
694 | 885 | } | |
695 | 886 | ||
696 | 887 | ||
697 | 888 | ||
698 | - | @Callable( | |
699 | - | func evaluatePutByAmountAssetREADONLY ( | |
700 | - | let | |
701 | - | let | |
702 | - | let | |
703 | - | let | |
704 | - | let | |
705 | - | let | |
706 | - | let | |
707 | - | let | |
708 | - | let | |
709 | - | let | |
710 | - | let | |
711 | - | let | |
712 | - | let | |
713 | - | let | |
714 | - | let | |
889 | + | @Callable(cQ) | |
890 | + | func evaluatePutByAmountAssetREADONLY (bW) = { | |
891 | + | let bp = aB() | |
892 | + | let bC = fromBase58String(bp[q]) | |
893 | + | let cc = bp[r] | |
894 | + | let bD = fromBase58String(cc) | |
895 | + | let cd = bp[s] | |
896 | + | let bE = fromBase58String(cd) | |
897 | + | let bq = parseIntValue(bp[t]) | |
898 | + | let br = parseIntValue(bp[u]) | |
899 | + | let bF = bp[p] | |
900 | + | let eq = valueOrErrorMessage(assetInfo(bC), (("Asset " + toBase58String(bC)) + " doesn't exist")).quantity | |
901 | + | let cF = bb(cc) | |
902 | + | let cG = bb(cd) | |
903 | + | let bl = D(cF, bq) | |
904 | + | let bm = D(cG, br) | |
905 | + | let bL = if ((eq == 0)) | |
715 | 906 | then e | |
716 | - | else | |
717 | - | let | |
718 | - | let | |
719 | - | let | |
720 | - | let | |
721 | - | let | |
722 | - | let | |
723 | - | let | |
724 | - | let | |
725 | - | let | |
726 | - | $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString( | |
907 | + | else bd(bm, bl) | |
908 | + | let ci = D(bW, bq) | |
909 | + | let cj = fraction(ci, bL, d) | |
910 | + | let bY = G(cj, br) | |
911 | + | let cW = bU("", 500000, bW, bD, bY, bE, "", true, false) | |
912 | + | let ct = cW._1 | |
913 | + | let ev = cW._3 | |
914 | + | let bH = cW._4 | |
915 | + | let bJ = cW._5 | |
916 | + | let bG = cW._6 | |
917 | + | $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(ct), toString(G(bL, b)), toString(bH), toString(bJ), toString(bG), bF, toString(bW), toString(bY)], j)) | |
727 | 918 | } | |
728 | 919 | ||
729 | 920 | ||
730 | 921 | ||
731 | - | @Callable( | |
732 | - | func evaluatePutByPriceAssetREADONLY ( | |
733 | - | let | |
734 | - | let | |
735 | - | let | |
736 | - | let | |
737 | - | let | |
738 | - | let | |
739 | - | let | |
740 | - | let | |
741 | - | let | |
742 | - | let | |
743 | - | let | |
744 | - | let | |
745 | - | let | |
746 | - | let | |
747 | - | let | |
922 | + | @Callable(cQ) | |
923 | + | func evaluatePutByPriceAssetREADONLY (bY) = { | |
924 | + | let bp = aB() | |
925 | + | let bC = fromBase58String(bp[q]) | |
926 | + | let cc = bp[r] | |
927 | + | let bD = fromBase58String(cc) | |
928 | + | let cd = bp[s] | |
929 | + | let bE = fromBase58String(cd) | |
930 | + | let bq = parseIntValue(bp[t]) | |
931 | + | let br = parseIntValue(bp[u]) | |
932 | + | let bF = bp[p] | |
933 | + | let eq = valueOrErrorMessage(assetInfo(bC), (("Asset " + toBase58String(bC)) + " doesn't exist")).quantity | |
934 | + | let ew = bb(cc) | |
935 | + | let ex = bb(cd) | |
936 | + | let ey = D(ew, bq) | |
937 | + | let ez = D(ex, br) | |
938 | + | let bL = if ((eq == 0)) | |
748 | 939 | then e | |
749 | - | else | |
750 | - | let | |
751 | - | let | |
752 | - | let | |
753 | - | let | |
754 | - | let | |
755 | - | let | |
756 | - | let | |
757 | - | let | |
758 | - | let | |
759 | - | $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString( | |
940 | + | else bd(ez, ey) | |
941 | + | let cj = D(bY, br) | |
942 | + | let ci = fraction(cj, d, bL) | |
943 | + | let bW = G(ci, bq) | |
944 | + | let cW = bU("", 500000, bW, bD, bY, bE, "", true, false) | |
945 | + | let ct = cW._1 | |
946 | + | let ev = cW._3 | |
947 | + | let bH = cW._4 | |
948 | + | let bJ = cW._5 | |
949 | + | let bG = cW._6 | |
950 | + | $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(ct), toString(G(bL, b)), toString(bH), toString(bJ), toString(bG), bF, toString(bW), toString(bY)], j)) | |
760 | 951 | } | |
761 | 952 | ||
762 | 953 | ||
763 | 954 | ||
764 | - | @Callable( | |
765 | - | func evaluateGetREADONLY ( | |
766 | - | let | |
767 | - | let | |
768 | - | let | |
769 | - | let | |
770 | - | let | |
771 | - | let | |
772 | - | let | |
773 | - | let | |
774 | - | $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString( | |
955 | + | @Callable(cQ) | |
956 | + | func evaluateGetREADONLY (eA,eB) = { | |
957 | + | let cl = by("", eA, eB, this) | |
958 | + | let bR = cl._1 | |
959 | + | let bS = cl._2 | |
960 | + | let bH = cl._5 | |
961 | + | let bJ = cl._6 | |
962 | + | let bG = cl._7 | |
963 | + | let bM = cl._8 | |
964 | + | let bF = parseIntValue(cl._9) | |
965 | + | $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(bR), toString(bS), toString(bH), toString(bJ), toString(bG), toString(bM), toString(bF)], j)) | |
775 | 966 | } | |
776 | 967 | ||
777 | 968 | ||
778 | - | @Verifier( | |
779 | - | func | |
780 | - | let | |
781 | - | let | |
782 | - | if ($isInstanceOf( | |
969 | + | @Verifier(eC) | |
970 | + | func eD () = { | |
971 | + | let eE = { | |
972 | + | let db = dz() | |
973 | + | if ($isInstanceOf(db, "ByteVector")) | |
783 | 974 | then { | |
784 | - | let | |
785 | - | | |
975 | + | let dE = db | |
976 | + | dE | |
786 | 977 | } | |
787 | - | else if ($isInstanceOf( | |
788 | - | then | |
978 | + | else if ($isInstanceOf(db, "Unit")) | |
979 | + | then eC.senderPublicKey | |
789 | 980 | else throw("Match error") | |
790 | 981 | } | |
791 | - | let | |
792 | - | if ($isInstanceOf( | |
982 | + | let db = eC | |
983 | + | if ($isInstanceOf(db, "Order")) | |
793 | 984 | then { | |
794 | - | let | |
795 | - | let | |
796 | - | let | |
797 | - | let | |
798 | - | let | |
799 | - | if (if (if ( | |
800 | - | then | |
985 | + | let cC = db | |
986 | + | let eF = aA() | |
987 | + | let ap = cB(cC) | |
988 | + | let aq = sigVerify(cC.bodyBytes, cC.proofs[0], cC.senderPublicKey) | |
989 | + | let ar = sigVerify(cC.bodyBytes, cC.proofs[1], eF) | |
990 | + | if (if (if (ap) | |
991 | + | then aq | |
801 | 992 | else false) | |
802 | - | then | |
993 | + | then ar | |
803 | 994 | else false) | |
804 | 995 | then true | |
805 | - | else | |
996 | + | else ao(ap, aq, ar) | |
806 | 997 | } | |
807 | - | else if ($isInstanceOf( | |
998 | + | else if ($isInstanceOf(db, "SetScriptTransaction")) | |
808 | 999 | then { | |
809 | - | let | |
810 | - | let | |
811 | - | let | |
812 | - | let | |
813 | - | if (if (( | |
814 | - | then ( | |
1000 | + | let dA = db | |
1001 | + | let eG = blake2b256(value(dA.script)) | |
1002 | + | let eH = fromBase64String(value(getString(ay, an()))) | |
1003 | + | let eI = scriptHash(this) | |
1004 | + | if (if ((eH == eG)) | |
1005 | + | then (eI != eG) | |
815 | 1006 | else false) | |
816 | 1007 | then true | |
817 | - | else sigVerify( | |
1008 | + | else sigVerify(eC.bodyBytes, eC.proofs[0], eE) | |
818 | 1009 | } | |
819 | - | else sigVerify( | |
1010 | + | else sigVerify(eC.bodyBytes, eC.proofs[0], eE) | |
820 | 1011 | } | |
821 | 1012 |
github/deemru/w8io/026f985 261.09 ms ◑