tx · 9Vj57iaXogm2YaS7bA1ubq4gshnarRjgUi943n5k2y7H 3MrbnZkriTBZhRqS45L1VfCrden6Erpa7To: -0.01400000 Waves 2021.12.15 15:08 [1835357] smart account 3MrbnZkriTBZhRqS45L1VfCrden6Erpa7To > SELF 0.00000000 Waves
{ "type": 13, "id": "9Vj57iaXogm2YaS7bA1ubq4gshnarRjgUi943n5k2y7H", "fee": 1400000, "feeAssetId": null, "timestamp": 1639570177665, "version": 1, "sender": "3MrbnZkriTBZhRqS45L1VfCrden6Erpa7To", "senderPublicKey": "63obiHRgG6hmZ9wxY6Lve4XmWN3XBCrDahV6tZwhsJEY", "proofs": [ "5b9dhM4nW14JadUnAFdXvs7gEjkvQDkE2vpy87UGq1djHRpNrGGjZKWtmV6pNxs1CFDvX6uMoeyCtqdS9FiCFBK8" ], "script": "base64:AAIFAAAAAAAAADwIAhIKCggICAgICAgIARIDCgEIEgYKBAgICAgSCQoHCAgICAgBCBIECgIIARIDCgEBEgMKAQESBAoCCAgAAABFAAAAAAZTQ0FMRTgAAAAAAAAAAAgAAAAABU1VTFQ4AAAAAAAF9eEAAAAAAAdTQ0FMRTE4AAAAAAAAAAASAAAAAAZNVUxUMTgJAAE2AAAAAQAN4Lazp2QAAAAAAAAOUE9PTFdFSUdIVE1VTFQFAAAABU1VTFQ4AAAAAA5HV1h2aXJ0dWFsUE9PTAIAAAAOR1dYdmlydHVhbFBPT0wAAAAAEWRlY2ltYWxzTXVsdFByaWNlCQAAaAAAAAIJAABoAAAAAgAAAAAAAAAAZAAAAAAAAAAD6AAAAAAAAAAD6AAAAAADU0VQAgAAAAJfXwAAAAAKUG9vbEFjdGl2ZQAAAAAAAAAAAQAAAAAPUG9vbFB1dERpc2FibGVkAAAAAAAAAAACAAAAABNQb29sTWF0Y2hlckRpc2FibGVkAAAAAAAAAAADAAAAAAxQb29sU2h1dGRvd24AAAAAAAAAAAQAAAAAEmlkeEludGVybmFsQXNzZXRJZAAAAAAAAAAAAQAAAAAPaWR4UmVzdXRBY3Rpb25zAAAAAAAAAAACAAAAACBpZHhJZkFzc2V0SWRDYWxjdWxhdGlvblBlcmZvcm1lZAAAAAAAAAAAAwAAAAAOaWR4UG9vbEFkZHJlc3MAAAAAAAAAAAEAAAAADWlkeFBvb2xTdGF0dXMAAAAAAAAAAAIAAAAAEGlkeFBvb2xMUEFzc2V0SWQAAAAAAAAAAAMAAAAADWlkeEFtdEFzc2V0SWQAAAAAAAAAAAQAAAAAD2lkeFByaWNlQXNzZXRJZAAAAAAAAAAABQAAAAAOaWR4QW10QXNzZXREY20AAAAAAAAAAAYAAAAAEGlkeFByaWNlQXNzZXREY20AAAAAAAAAAAcAAAAADmlkeElBbXRBc3NldElkAAAAAAAAAAAIAAAAABBpZHhJUHJpY2VBc3NldElkAAAAAAAAAAAJAAAAAA1pZHhMUEFzc2V0RGNtAAAAAAAAAAAKAAAAAAtpZHhQb29sVHlwZQAAAAAAAAAACwEAAAAQa2V5RmFjdG9yeUNvbmZpZwAAAAACAAAAESVzX19mYWN0b3J5Q29uZmlnAQAAAA9rZXlMcFRva2Vuc0xpc3QAAAAAAgAAABAlc19fbHBUb2tlbnNMaXN0AQAAABFrZXlQb29sU2NyaXB0SGFzaAAAAAACAAAAFiVzJXNfX3Bvb2xfX3NjcmlwdEhhc2gBAAAADWtleU1hdGNoZXJQdWIAAAAAAgAAABglcyVzX19tYXRjaGVyX19wdWJsaWNLZXkBAAAAEGtleVByaWNlRGVjaW1hbHMAAAAAAgAAABElc19fcHJpY2VEZWNpbWFscwEAAAATa2V5QWxsUG9vbHNTaHV0ZG93bgAAAAACAAAADCVzX19zaHV0ZG93bgEAAAAWa2V5TmV4dEludGVybmFsQXNzZXRJZAAAAAACAAAAFyVzX19uZXh0SW50ZXJuYWxBc3NldElkAQAAAA9rZXlQb29sVG9XZWlnaHQAAAABAAAAC3Bvb2xBZGRyZXNzCQABLAAAAAICAAAAEiVzJXNfX3Bvb2xXZWlnaHRfXwUAAAALcG9vbEFkZHJlc3MBAAAAFmtleVBvb2xUb1dlaWdodEhpc3RvcnkAAAACAAAAC3Bvb2xBZGRyZXNzAAAAA251bQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAASJXMlc19fcG9vbFdlaWdodF9fBQAAAAtwb29sQWRkcmVzcwIAAAACX18JAAGkAAAAAQUAAAADbnVtAQAAAB9rZXlNYXBwaW5nc0ludGVybmFsMmJhc2VBc3NldElkAAAAAQAAABFpbnRlcm5hbEJhc2VBc3NldAkAASwAAAACAgAAACglcyVzJWRfX21hcHBpbmdzX19pbnRlcm5hbDJiYXNlQXNzZXRJZF9fCQABpAAAAAEFAAAAEWludGVybmFsQmFzZUFzc2V0AQAAAB9rZXlNYXBwaW5nc0Jhc2VBc3NldDJpbnRlcm5hbElkAAAAAQAAAAxiYXNlQXNzZXRTdHIJAAEsAAAAAgIAAAAoJXMlcyVzX19tYXBwaW5nc19fYmFzZUFzc2V0MmludGVybmFsSWRfXwUAAAAMYmFzZUFzc2V0U3RyAQAAAA1rZXlQb29sQ29uZmlnAAAAAgAAABNhbW91bnRBc3NldEludGVybmFsAAAAEnByaWNlQXNzZXRJbnRlcm5hbAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAglZCVkJXNfXwUAAAATYW1vdW50QXNzZXRJbnRlcm5hbAIAAAACX18FAAAAEnByaWNlQXNzZXRJbnRlcm5hbAIAAAAIX19jb25maWcBAAAAHWtleU1hcHBpbmdMcEFzc2V0VG9Qb29sQXNzZXRzAAAAAQAAAApscEFzc2V0U3RyCQABLAAAAAIJAAEsAAAAAgIAAAAIJXMlcyVzX18FAAAACmxwQXNzZXRTdHICAAAAGF9fbWFwcGluZ3NfX2xwQXNzZXQyUG9vbAEAAAAda2V5TWFwcGluZ1Bvb2xBc3NldHNUb0xwYXNzZXQAAAACAAAAGGludGVybmFsQW1vdW50QXNzZXRJZFN0cgAAABdpbnRlcm5hbFByaWNlQXNzZXRJZFN0cgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAolZCVkJXMlc19fBQAAABhpbnRlcm5hbEFtb3VudEFzc2V0SWRTdHICAAAAAl9fBQAAABdpbnRlcm5hbFByaWNlQXNzZXRJZFN0cgIAAAAeX19tYXBwaW5nc19fUG9vbEFzc2V0czJMcEFzc2V0AQAAAClrZXlNYXBwaW5nUG9vbENvbnRyYWN0QWRkcmVzc1RvUG9vbEFzc2V0cwAAAAEAAAATcG9vbENvbnRyYWN0QWRkcmVzcwkAASwAAAACCQABLAAAAAICAAAACCVzJXMlc19fBQAAABNwb29sQ29udHJhY3RBZGRyZXNzAgAAACNfX21hcHBpbmdzX19wb29sQ29udHJhY3QyUG9vbEFzc2V0cwEAAAApa2V5TWFwcGluZ1Bvb2xBc3NldHNUb1Bvb2xDb250cmFjdEFkZHJlc3MAAAACAAAAGGludGVybmFsQW1vdW50QXNzZXRJZFN0cgAAABdpbnRlcm5hbFByaWNlQXNzZXRJZFN0cgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAolZCVkJXMlc19fCQABpAAAAAEFAAAAGGludGVybmFsQW1vdW50QXNzZXRJZFN0cgIAAAACX18JAAGkAAAAAQUAAAAXaW50ZXJuYWxQcmljZUFzc2V0SWRTdHICAAAAI19fbWFwcGluZ3NfX3Bvb2xBc3NldHMyUG9vbENvbnRyYWN0AQAAAB5rZXlNYXBwaW5nUG9vbENvbnRyYWNUb0xQQXNzZXQAAAABAAAAE3Bvb2xDb250cmFjdEFkZHJlc3MJAAEsAAAAAgkAASwAAAACAgAAAAglcyVzJXNfXwUAAAATcG9vbENvbnRyYWN0QWRkcmVzcwIAAAAgX19tYXBwaW5nc19fcG9vbENvbnRyYWN0MkxwQXNzZXQBAAAAKmtleU1hcHBpbmdQb29sTFBBc3NldFRvUG9vbENvbnRyYWN0QWRkcmVzcwAAAAEAAAAKbHBBc3NldFN0cgkAASwAAAACCQABLAAAAAICAAAACCVzJXMlc19fBQAAAApscEFzc2V0U3RyAgAAACBfX21hcHBpbmdzX19scEFzc2V0MlBvb2xDb250cmFjdAEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQAAAANrZXkJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAAR0aGlzBQAAAANrZXkJAAEsAAAAAgIAAAAVTm8gZGF0YSBmb3IgdGhpcy5rZXk9BQAAAANrZXkBAAAAEGdldEJvb2xlYW5PckZhaWwAAAABAAAAA2tleQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGwAAAAIFAAAABHRoaXMFAAAAA2tleQkAASwAAAACAgAAABVObyBkYXRhIGZvciB0aGlzLmtleT0FAAAAA2tleQEAAAAMZ2V0SW50T3JGYWlsAAAAAQAAAANrZXkJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAAANrZXkJAAEsAAAAAgIAAAAVTm8gZGF0YSBmb3IgdGhpcy5rZXk9BQAAAANrZXkAAAAAGElkeEZhY3RvcnlDZmdTdGFraW5nRGFwcAAAAAAAAAAAAQAAAAAZSWR4RmFjdG9yeUNmZ0Jvb3N0aW5nRGFwcAAAAAAAAAAAAgAAAAAUSWR4RmFjdG9yeUNmZ0lkb0RhcHAAAAAAAAAAAAMAAAAAFUlkeEZhY3RvcnlDZmdUZWFtRGFwcAAAAAAAAAAABAAAAAAZSWR4RmFjdG9yeUNmZ0VtaXNzaW9uRGFwcAAAAAAAAAAABQAAAAAVSWR4RmFjdG9yeUNmZ1Jlc3REYXBwAAAAAAAAAAAGAAAAABlJZHhGYWN0b3J5Q2ZnU2xpcHBhZ2VEYXBwAAAAAAAAAAAHAAAAABRJZHhGYWN0b3J5Q2ZnRGFvRGFwcAAAAAAAAAAACAAAAAAaSWR4RmFjdG9yeUNmZ01hcmtldGluZ0RhcHAAAAAAAAAAAAkAAAAAGklkeEZhY3RvcnlDZmdHd3hSZXdhcmREYXBwAAAAAAAAAAAKAAAAABZJZHhGYWN0b3J5Q2ZnQmlyZHNEYXBwAAAAAAAAAAALAQAAABhnZXRCb29zdGluZ0FkZHJlc3NPckZhaWwAAAABAAAACmZhY3RvcnlDZmcJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAAGRAAAAAgUAAAAKZmFjdG9yeUNmZwUAAAAZSWR4RmFjdG9yeUNmZ0Jvb3N0aW5nRGFwcAEAAAAYZ2V0RW1pc3Npb25BZGRyZXNzT3JGYWlsAAAAAQAAAApmYWN0b3J5Q2ZnCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQABkQAAAAIFAAAACmZhY3RvcnlDZmcFAAAAGUlkeEZhY3RvcnlDZmdFbWlzc2lvbkRhcHABAAAAF2dldFN0YWtpbmdBZGRyZXNzT3JGYWlsAAAAAQAAAApmYWN0b3J5Q2ZnCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQABkQAAAAIFAAAACmZhY3RvcnlDZmcFAAAAGElkeEZhY3RvcnlDZmdTdGFraW5nRGFwcAEAAAAZZ2V0R3d4UmV3YXJkQWRkcmVzc09yRmFpbAAAAAEAAAAKZmFjdG9yeUNmZwkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkAAZEAAAACBQAAAApmYWN0b3J5Q2ZnBQAAABpJZHhGYWN0b3J5Q2ZnR3d4UmV3YXJkRGFwcAEAAAAQZGF0YUZhY3RvcnlDZmdWMwAAAAsAAAAOc3Rha2luZ0FkZHJlc3MAAAAPYm9vc3RpbmdBZGRyZXNzAAAAC2lkb0NvbnRyYWN0AAAADHRlYW1Db250cmFjdAAAABBlbWlzc2lvbkNvbnRyYWN0AAAADHJlc3RDb250cmFjdAAAABBzbGlwcGFnZUNvbnRyYWN0AAAAC2Rhb0NvbnRyYWN0AAAAEW1hcmtldGluZ0NvbnRyYWN0AAAAEmd3eFJld2FyZHNDb250cmFjdAAAAA1iaXJkc0NvbnRyYWN0CQAEuQAAAAIJAARMAAAAAgIAAAAWJXMlcyVzJXMlcyVzJXMlcyVzJXMlcwkABEwAAAACBQAAAA5zdGFraW5nQWRkcmVzcwkABEwAAAACBQAAAA9ib29zdGluZ0FkZHJlc3MJAARMAAAAAgUAAAALaWRvQ29udHJhY3QJAARMAAAAAgUAAAAMdGVhbUNvbnRyYWN0CQAETAAAAAIFAAAAEGVtaXNzaW9uQ29udHJhY3QJAARMAAAAAgUAAAAMcmVzdENvbnRyYWN0CQAETAAAAAIFAAAAEHNsaXBwYWdlQ29udHJhY3QJAARMAAAAAgUAAAALZGFvQ29udHJhY3QJAARMAAAAAgUAAAARbWFya2V0aW5nQ29udHJhY3QJAARMAAAAAgUAAAASZ3d4UmV3YXJkc0NvbnRyYWN0CQAETAAAAAIFAAAADWJpcmRzQ29udHJhY3QFAAAAA25pbAUAAAADU0VQAQAAAA5kYXRhRmFjdG9yeUNmZwAAAAcAAAAOc3Rha2luZ0FkZHJlc3MAAAAPYm9vc3RpbmdBZGRyZXNzAAAAC2lkb0NvbnRyYWN0AAAADHRlYW1Db250cmFjdAAAABBlbWlzc2lvbkNvbnRyYWN0AAAADHJlc3RDb250cmFjdAAAABBzbGlwcGFnZUNvbnRyYWN0CQAEuQAAAAIJAARMAAAAAgIAAAAMJXMlcyVzJXMlcyVzCQAETAAAAAIFAAAADnN0YWtpbmdBZGRyZXNzCQAETAAAAAIFAAAAD2Jvb3N0aW5nQWRkcmVzcwkABEwAAAACBQAAAAtpZG9Db250cmFjdAkABEwAAAACBQAAAAx0ZWFtQ29udHJhY3QJAARMAAAAAgUAAAAQZW1pc3Npb25Db250cmFjdAkABEwAAAACBQAAAAxyZXN0Q29udHJhY3QJAARMAAAAAgUAAAAQc2xpcHBhZ2VDb250cmFjdAUAAAADbmlsBQAAAANTRVABAAAAC2RhdGFQb29sQ2ZnAAAACwAAAAtwb29sQWRkcmVzcwAAAApwb29sU3RhdHVzAAAACWxwQXNzZXRJZAAAAA5hbW91bnRBc3NldFN0cgAAAA1wcmljZUFzc2V0U3RyAAAAE2Ftb3VudEFzc2V0RGVjaW1hbHMAAAAScHJpY2VBc3NldERlY2ltYWxzAAAAFWFtb3VudEFzc2V0SW50ZXJuYWxJZAAAABRwcmljZUFzc2V0SW50ZXJuYWxJZAAAAA9scEFzc2V0RGVjaW1hbHMAAAAIcG9vbFR5cGUJAAS5AAAAAgkABEwAAAACAgAAABYlcyVkJXMlcyVzJWQlZCVkJWQlZCVzCQAETAAAAAIFAAAAC3Bvb2xBZGRyZXNzCQAETAAAAAIFAAAACnBvb2xTdGF0dXMJAARMAAAAAgUAAAAJbHBBc3NldElkCQAETAAAAAIFAAAADmFtb3VudEFzc2V0U3RyCQAETAAAAAIFAAAADXByaWNlQXNzZXRTdHIJAARMAAAAAgkAAaQAAAABBQAAABNhbW91bnRBc3NldERlY2ltYWxzCQAETAAAAAIJAAGkAAAAAQUAAAAScHJpY2VBc3NldERlY2ltYWxzCQAETAAAAAIJAAGkAAAAAQUAAAAVYW1vdW50QXNzZXRJbnRlcm5hbElkCQAETAAAAAIJAAGkAAAAAQUAAAAUcHJpY2VBc3NldEludGVybmFsSWQJAARMAAAAAgkAAaQAAAABBQAAAA9scEFzc2V0RGVjaW1hbHMJAARMAAAAAgUAAAAIcG9vbFR5cGUFAAAAA25pbAUAAAADU0VQAQAAABVkYXRhTWFwcGluZ1Bvb2xBc3NldHMAAAACAAAAFmludGVybmFsQW1vdW50QXNzZXRTdHIAAAAVaW50ZXJuYWxQcmljZUFzc2V0U3RyCQAEuQAAAAIJAARMAAAAAgIAAAAEJWQlZAkABEwAAAACCQABpAAAAAEFAAAAFmludGVybmFsQW1vdW50QXNzZXRTdHIJAARMAAAAAgkAAaQAAAABBQAAABVpbnRlcm5hbFByaWNlQXNzZXRTdHIFAAAAA25pbAUAAAADU0VQAQAAAA1nZXRQb29sQ29uZmlnAAAAAQAAAAtwb29sQWRkcmVzcwQAAAAKcG9vbEFzc2V0cwkABLUAAAACCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQkBAAAAKWtleU1hcHBpbmdQb29sQ29udHJhY3RBZGRyZXNzVG9Qb29sQXNzZXRzAAAAAQUAAAALcG9vbEFkZHJlc3MFAAAAA1NFUAQAAAATYW1vdW50QXNzZXRJbnRlcm5hbAkAAZEAAAACBQAAAApwb29sQXNzZXRzAAAAAAAAAAABBAAAABJwcmljZUFzc2V0SW50ZXJuYWwJAAGRAAAAAgUAAAAKcG9vbEFzc2V0cwAAAAAAAAAAAgkABLUAAAACCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQkBAAAADWtleVBvb2xDb25maWcAAAACBQAAABNhbW91bnRBc3NldEludGVybmFsBQAAABJwcmljZUFzc2V0SW50ZXJuYWwFAAAAA1NFUAEAAAAaZ2V0SW50ZXJuYWxBc3NldElkT3JDcmVhdGUAAAACAAAACmFzc2V0SWRTdHIAAAALaW5jcmVtZW50b3IEAAAAD2ludGVybmFsQXNzZXRJZAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQEAAAAfa2V5TWFwcGluZ3NCYXNlQXNzZXQyaW50ZXJuYWxJZAAAAAEFAAAACmFzc2V0SWRTdHIAAAAAAAAAAAAEAAAAGGN1cnJlbnRJbmRleE9mSW50ZXJuYWxJZAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQEAAAAWa2V5TmV4dEludGVybmFsQXNzZXRJZAAAAAAAAAAAAAAAAAAEAAAABnJlc3VsdAMJAAAAAAAAAgUAAAAPaW50ZXJuYWxBc3NldElkAAAAAAAAAAAABAAAABJuZXdJbnRlcm5hbEFzc2V0SWQJAABkAAAAAgUAAAAYY3VycmVudEluZGV4T2ZJbnRlcm5hbElkBQAAAAtpbmNyZW1lbnRvcgkABRUAAAADBQAAABJuZXdJbnRlcm5hbEFzc2V0SWQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABZrZXlOZXh0SW50ZXJuYWxBc3NldElkAAAAAAUAAAASbmV3SW50ZXJuYWxBc3NldElkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAfa2V5TWFwcGluZ3NCYXNlQXNzZXQyaW50ZXJuYWxJZAAAAAEFAAAACmFzc2V0SWRTdHIFAAAAEm5ld0ludGVybmFsQXNzZXRJZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAfa2V5TWFwcGluZ3NJbnRlcm5hbDJiYXNlQXNzZXRJZAAAAAEFAAAAEm5ld0ludGVybmFsQXNzZXRJZAUAAAAKYXNzZXRJZFN0cgUAAAADbmlsBgkABRUAAAADBQAAAA9pbnRlcm5hbEFzc2V0SWQFAAAAA25pbAcFAAAABnJlc3VsdAEAAAAXY3JlYXRlTHBUb2tlbnNMaXN0RW50cnkAAAABAAAACm5ld0xwVG9rZW4EAAAACGxwVG9rZW5zCQAEHQAAAAIFAAAABHRoaXMJAQAAAA9rZXlMcFRva2Vuc0xpc3QAAAAAAwkBAAAACWlzRGVmaW5lZAAAAAEFAAAACGxwVG9rZW5zCQABLAAAAAIJAAEsAAAAAgkBAAAABXZhbHVlAAAAAQUAAAAIbHBUb2tlbnMFAAAAA1NFUAUAAAAKbmV3THBUb2tlbgUAAAAKbmV3THBUb2tlbgAAAAgAAAABaQEAAAALY29uc3RydWN0b3IAAAAIAAAAD3N0YWtpbmdDb250cmFjdAAAABBib29zdGluZ0NvbnRyYWN0AAAAC2lkb0NvbnRyYWN0AAAADHRlYW1Db250cmFjdAAAABBlbWlzc2lvbkNvbnRyYWN0AAAADHJlc3RDb250cmFjdAAAABBzbHBpcGFnZUNvbnRyYWN0AAAADXByaWNlRGVjaW1hbHMDCQEAAAACIT0AAAACCAUAAAABaQAAAAZjYWxsZXIFAAAABHRoaXMJAAACAAAAAQIAAAAScGVybWlzc2lvbnMgZGVuaWVkCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABBrZXlGYWN0b3J5Q29uZmlnAAAAAAkBAAAADmRhdGFGYWN0b3J5Q2ZnAAAABwUAAAAPc3Rha2luZ0NvbnRyYWN0BQAAABBib29zdGluZ0NvbnRyYWN0BQAAAAtpZG9Db250cmFjdAUAAAAMdGVhbUNvbnRyYWN0BQAAABBlbWlzc2lvbkNvbnRyYWN0BQAAAAxyZXN0Q29udHJhY3QFAAAAEHNscGlwYWdlQ29udHJhY3QJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABBrZXlQcmljZURlY2ltYWxzAAAAAAUAAAANcHJpY2VEZWNpbWFscwUAAAADbmlsAAAAAWkBAAAADWNvbnN0cnVjdG9yVjIAAAABAAAAEG1hdGhjaGVyUHViNThTdHIDCQEAAAACIT0AAAACCAUAAAABaQAAAAZjYWxsZXIFAAAABHRoaXMJAAACAAAAAQIAAAAScGVybWlzc2lvbnMgZGVuaWVkBAAAAAptYXRoY2VyUHViCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABCQACWQAAAAEFAAAAEG1hdGhjaGVyUHViNThTdHIDCQAAAAAAAAIFAAAACm1hdGhjZXJQdWIFAAAACm1hdGhjZXJQdWIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAADWtleU1hdGNoZXJQdWIAAAAABQAAABBtYXRoY2hlclB1YjU4U3RyBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAADWNvbnN0cnVjdG9yVjMAAAAEAAAAC2Rhb0NvbnRyYWN0AAAAEW1hcmtldGluZ0NvbnRyYWN0AAAAEmd3eFJld2FyZHNDb250cmFjdAAAAA1iaXJkc0NvbnRyYWN0AwkBAAAAAiE9AAAAAggFAAAAAWkAAAAGY2FsbGVyBQAAAAR0aGlzCQAAAgAAAAECAAAAEnBlcm1pc3Npb25zIGRlbmllZAQAAAAKZmFjdG9yeUNmZwkABLUAAAACCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQkBAAAAEGtleUZhY3RvcnlDb25maWcAAAAABQAAAANTRVAJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEGtleUZhY3RvcnlDb25maWcAAAAACQEAAAAQZGF0YUZhY3RvcnlDZmdWMwAAAAsJAAGRAAAAAgUAAAAKZmFjdG9yeUNmZwAAAAAAAAAAAQkAAZEAAAACBQAAAApmYWN0b3J5Q2ZnAAAAAAAAAAACCQABkQAAAAIFAAAACmZhY3RvcnlDZmcAAAAAAAAAAAMJAAGRAAAAAgUAAAAKZmFjdG9yeUNmZwAAAAAAAAAABAkAAZEAAAACBQAAAApmYWN0b3J5Q2ZnAAAAAAAAAAAFCQABkQAAAAIFAAAACmZhY3RvcnlDZmcAAAAAAAAAAAYJAAGRAAAAAgUAAAAKZmFjdG9yeUNmZwAAAAAAAAAABwUAAAALZGFvQ29udHJhY3QFAAAAEW1hcmtldGluZ0NvbnRyYWN0BQAAABJnd3hSZXdhcmRzQ29udHJhY3QFAAAADWJpcmRzQ29udHJhY3QFAAAAA25pbAAAAAFpAQAAAA9hY3RpdmF0ZU5ld1Bvb2wAAAAHAAAAC3Bvb2xBZGRyZXNzAAAADmFtb3VudEFzc2V0U3RyAAAADXByaWNlQXNzZXRTdHIAAAALbHBBc3NldE5hbWUAAAAMbHBBc3NldERlc2NyAAAACnBvb2xXZWlnaHQAAAAIcG9vbFR5cGUDCQEAAAACIT0AAAACCAUAAAABaQAAAAZjYWxsZXIFAAAABHRoaXMJAAACAAAAAQIAAAAScGVybWlzc2lvbnMgZGVuaWVkAwkBAAAACWlzRGVmaW5lZAAAAAEJAAQiAAAAAQkBAAAAKWtleU1hcHBpbmdQb29sQ29udHJhY3RBZGRyZXNzVG9Qb29sQXNzZXRzAAAAAQUAAAALcG9vbEFkZHJlc3MJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAADVBvb2wgYWRkcmVzcyAFAAAAC3Bvb2xBZGRyZXNzAgAAABQgYWxyZWFkeSByZWdpc3RlcmVkLgQAAAAXaW50ZXJuYWxBbW91bnRBc3NldERhdGEJAQAAABpnZXRJbnRlcm5hbEFzc2V0SWRPckNyZWF0ZQAAAAIFAAAADmFtb3VudEFzc2V0U3RyAAAAAAAAAAABBAAAABVpbnRlcm5hbEFtb3VudEFzc2V0SWQIBQAAABdpbnRlcm5hbEFtb3VudEFzc2V0RGF0YQAAAAJfMQQAAAAWaW50ZXJuYWxQcmljZUFzc2V0RGF0YQkBAAAAGmdldEludGVybmFsQXNzZXRJZE9yQ3JlYXRlAAAAAgUAAAANcHJpY2VBc3NldFN0cgMIBQAAABdpbnRlcm5hbEFtb3VudEFzc2V0RGF0YQAAAAJfMwAAAAAAAAAAAgAAAAAAAAAAAQQAAAAUaW50ZXJuYWxQcmljZUFzc2V0SWQIBQAAABZpbnRlcm5hbFByaWNlQXNzZXREYXRhAAAAAl8xBAAAABVwb29sQWNjb3VudFNjcmlwdEhhc2gJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkAA/EAAAABCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABBQAAAAtwb29sQWRkcmVzcwkAASwAAAACAgAAAClObyBzY3JpcHQgaGFzIGJlZW4gZm91bmQgb24gcG9vbCBhY2NvdW50IAUAAAALcG9vbEFkZHJlc3MEAAAAHGV0aGFsb25Qb29sQWNjb3VudFNjcmlwdEhhc2gJAQAAABFAZXh0ck5hdGl2ZSgxMDU3KQAAAAEJAQAAABFrZXlQb29sU2NyaXB0SGFzaAAAAAAEAAAACnBvb2xDb25maWcJAAQdAAAAAgUAAAAEdGhpcwkBAAAADWtleVBvb2xDb25maWcAAAACCQABpAAAAAEFAAAAFWludGVybmFsQW1vdW50QXNzZXRJZAkAAaQAAAABBQAAABRpbnRlcm5hbFByaWNlQXNzZXRJZAMJAQAAAAlpc0RlZmluZWQAAAABBQAAAApwb29sQ29uZmlnCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAFUG9vbCAFAAAADmFtb3VudEFzc2V0U3RyAgAAAAEvBQAAAA1wcmljZUFzc2V0U3RyAgAAABwgaGFzIGFscmVhZHkgYmVlbiBhY3RpdmF0ZWQuBAAAAA9wb29sQ29uZmlnVmFsdWUJAQAAAAV2YWx1ZQAAAAEJAAQdAAAAAgUAAAAEdGhpcwkBAAAADWtleVBvb2xDb25maWcAAAACCQABpAAAAAEFAAAAFWludGVybmFsQW1vdW50QXNzZXRJZAkAAaQAAAABBQAAABRpbnRlcm5hbFByaWNlQXNzZXRJZAQAAAAUYW1vdW50QXNzZXRzRGVjaW1hbHMDCQAAAAAAAAIFAAAADmFtb3VudEFzc2V0U3RyAgAAAAVXQVZFUwUAAAARZGVjaW1hbHNNdWx0UHJpY2UJAABsAAAABgAAAAAAAAAACgAAAAAAAAAAAAgJAQAAAAV2YWx1ZQAAAAEJAAPsAAAAAQkAAlkAAAABBQAAAA5hbW91bnRBc3NldFN0cgAAAAhkZWNpbWFscwAAAAAAAAAAAAAAAAAAAAAAAAUAAAAERE9XTgQAAAATcHJpY2VBc3NldHNEZWNpbWFscwMJAAAAAAAAAgUAAAANcHJpY2VBc3NldFN0cgIAAAAFV0FWRVMFAAAAEWRlY2ltYWxzTXVsdFByaWNlCQAAbAAAAAYAAAAAAAAAAAoAAAAAAAAAAAAICQEAAAAFdmFsdWUAAAABCQAD7AAAAAEJAAJZAAAAAQUAAAANcHJpY2VBc3NldFN0cgAAAAhkZWNpbWFscwAAAAAAAAAAAAAAAAAAAAAAAAUAAAAERE9XTgQAAAASbHBBc3NldElzc3VlQWN0aW9uCQAEQgAAAAUFAAAAC2xwQXNzZXROYW1lBQAAAAxscEFzc2V0RGVzY3IAAAAAAAAAAAEAAAAAAAAAAAgGBAAAAAlscEFzc2V0SWQJAAQ4AAAAAQUAAAASbHBBc3NldElzc3VlQWN0aW9uBAAAAAxscEFzc2V0SWRTdHIJAAJYAAAAAQUAAAAJbHBBc3NldElkBAAAABhwb29sQWN0aXZhdGVJbnZva2VSZXN1bHQJAAP8AAAABAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQUAAAALcG9vbEFkZHJlc3MCAAAACGFjdGl2YXRlCQAETAAAAAIFAAAADmFtb3VudEFzc2V0U3RyCQAETAAAAAIFAAAADXByaWNlQXNzZXRTdHIFAAAAA25pbAUAAAADbmlsAwkAAAAAAAACBQAAABhwb29sQWN0aXZhdGVJbnZva2VSZXN1bHQFAAAAGHBvb2xBY3RpdmF0ZUludm9rZVJlc3VsdAMJAQAAAAIhPQAAAAIFAAAAGHBvb2xBY3RpdmF0ZUludm9rZVJlc3VsdAIAAAAHc3VjY2VzcwkAAAIAAAABAgAAACNQb29sIGluaXRpYWxpc2F0aW9uIGVycm9yIGhhcHBlbmVkLgkABRQAAAACCQAETgAAAAIJAAROAAAAAggFAAAAF2ludGVybmFsQW1vdW50QXNzZXREYXRhAAAAAl8yCAUAAAAWaW50ZXJuYWxQcmljZUFzc2V0RGF0YQAAAAJfMgkABEwAAAACBQAAABJscEFzc2V0SXNzdWVBY3Rpb24JAARMAAAAAgkBAAAABEJ1cm4AAAACBQAAAAlscEFzc2V0SWQAAAAAAAAAAAEJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAADWtleVBvb2xDb25maWcAAAACCQABpAAAAAEFAAAAFWludGVybmFsQW1vdW50QXNzZXRJZAkAAaQAAAABBQAAABRpbnRlcm5hbFByaWNlQXNzZXRJZAkBAAAAC2RhdGFQb29sQ2ZnAAAACwUAAAALcG9vbEFkZHJlc3MJAAGkAAAAAQUAAAAKUG9vbEFjdGl2ZQUAAAAMbHBBc3NldElkU3RyBQAAAA5hbW91bnRBc3NldFN0cgUAAAANcHJpY2VBc3NldFN0cgUAAAAUYW1vdW50QXNzZXRzRGVjaW1hbHMFAAAAE3ByaWNlQXNzZXRzRGVjaW1hbHMFAAAAFWludGVybmFsQW1vdW50QXNzZXRJZAUAAAAUaW50ZXJuYWxQcmljZUFzc2V0SWQFAAAAEWRlY2ltYWxzTXVsdFByaWNlBQAAAAhwb29sVHlwZQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAda2V5TWFwcGluZ0xwQXNzZXRUb1Bvb2xBc3NldHMAAAABBQAAAAxscEFzc2V0SWRTdHIJAQAAABVkYXRhTWFwcGluZ1Bvb2xBc3NldHMAAAACBQAAABVpbnRlcm5hbEFtb3VudEFzc2V0SWQFAAAAFGludGVybmFsUHJpY2VBc3NldElkCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAB1rZXlNYXBwaW5nUG9vbEFzc2V0c1RvTHBhc3NldAAAAAIJAAGkAAAAAQUAAAAVaW50ZXJuYWxBbW91bnRBc3NldElkCQABpAAAAAEFAAAAFGludGVybmFsUHJpY2VBc3NldElkCQABLAAAAAICAAAABCVzX18FAAAADGxwQXNzZXRJZFN0cgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAApa2V5TWFwcGluZ1Bvb2xDb250cmFjdEFkZHJlc3NUb1Bvb2xBc3NldHMAAAABBQAAAAtwb29sQWRkcmVzcwkBAAAAFWRhdGFNYXBwaW5nUG9vbEFzc2V0cwAAAAIFAAAAFWludGVybmFsQW1vdW50QXNzZXRJZAUAAAAUaW50ZXJuYWxQcmljZUFzc2V0SWQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAKWtleU1hcHBpbmdQb29sQXNzZXRzVG9Qb29sQ29udHJhY3RBZGRyZXNzAAAAAgUAAAAVaW50ZXJuYWxBbW91bnRBc3NldElkBQAAABRpbnRlcm5hbFByaWNlQXNzZXRJZAUAAAALcG9vbEFkZHJlc3MJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAKmtleU1hcHBpbmdQb29sTFBBc3NldFRvUG9vbENvbnRyYWN0QWRkcmVzcwAAAAEFAAAADGxwQXNzZXRJZFN0cgUAAAALcG9vbEFkZHJlc3MJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAHmtleU1hcHBpbmdQb29sQ29udHJhY1RvTFBBc3NldAAAAAEFAAAAC3Bvb2xBZGRyZXNzBQAAAAxscEFzc2V0SWRTdHIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAA9rZXlQb29sVG9XZWlnaHQAAAABBQAAAAtwb29sQWRkcmVzcwUAAAAKcG9vbFdlaWdodAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAPa2V5THBUb2tlbnNMaXN0AAAAAAkBAAAAF2NyZWF0ZUxwVG9rZW5zTGlzdEVudHJ5AAAAAQUAAAAMbHBBc3NldElkU3RyBQAAAANuaWwCAAAAB3N1Y2Nlc3MJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAACm1hbmFnZVBvb2wAAAACAAAAC3Bvb2xBZGRyZXNzAAAACW5ld1N0YXR1cwMJAQAAAAIhPQAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAAEdGhpcwkAAAIAAAABAgAAABJwZXJtaXNzaW9ucyBkZW5pZWQEAAAACnBvb2xDb25maWcJAQAAAA1nZXRQb29sQ29uZmlnAAAAAQUAAAALcG9vbEFkZHJlc3MEAAAACnBvb2xTdGF0dXMJAAGRAAAAAgUAAAAKcG9vbENvbmZpZwUAAAANaWR4UG9vbFN0YXR1cwQAAAAMbHBBc3NldElkU3RyCQABkQAAAAIFAAAACnBvb2xDb25maWcFAAAAEGlkeFBvb2xMUEFzc2V0SWQEAAAADmFtb3VudEFzc2V0U3RyCQABkQAAAAIFAAAACnBvb2xDb25maWcFAAAADWlkeEFtdEFzc2V0SWQEAAAADXByaWNlQXNzZXRTdHIJAAGRAAAAAgUAAAAKcG9vbENvbmZpZwUAAAAPaWR4UHJpY2VBc3NldElkBAAAABRhbW91bnRBc3NldHNEZWNpbWFscwkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACnBvb2xDb25maWcFAAAADmlkeEFtdEFzc2V0RGNtBAAAABNwcmljZUFzc2V0c0RlY2ltYWxzCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAKcG9vbENvbmZpZwUAAAAQaWR4UHJpY2VBc3NldERjbQQAAAAVaW50ZXJuYWxBbW91bnRBc3NldElkCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAKcG9vbENvbmZpZwUAAAAOaWR4SUFtdEFzc2V0SWQEAAAAFGludGVybmFsUHJpY2VBc3NldElkCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAKcG9vbENvbmZpZwUAAAAQaWR4SVByaWNlQXNzZXRJZAQAAAAKbHBBc3NldERjbQkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACnBvb2xDb25maWcFAAAADWlkeExQQXNzZXREY20EAAAACHBvb2xUeXBlCQABkQAAAAIFAAAACnBvb2xDb25maWcFAAAAC2lkeFBvb2xUeXBlCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAA1rZXlQb29sQ29uZmlnAAAAAgkAAaQAAAABBQAAABVpbnRlcm5hbEFtb3VudEFzc2V0SWQJAAGkAAAAAQUAAAAUaW50ZXJuYWxQcmljZUFzc2V0SWQJAQAAAAtkYXRhUG9vbENmZwAAAAsFAAAAC3Bvb2xBZGRyZXNzCQABpAAAAAEFAAAACW5ld1N0YXR1cwUAAAAMbHBBc3NldElkU3RyBQAAAA5hbW91bnRBc3NldFN0cgUAAAANcHJpY2VBc3NldFN0cgUAAAAUYW1vdW50QXNzZXRzRGVjaW1hbHMFAAAAE3ByaWNlQXNzZXRzRGVjaW1hbHMFAAAAFWludGVybmFsQW1vdW50QXNzZXRJZAUAAAAUaW50ZXJuYWxQcmljZUFzc2V0SWQFAAAACmxwQXNzZXREY20FAAAACHBvb2xUeXBlBQAAAANuaWwAAAABaQEAAAAEZW1pdAAAAAEAAAAMYW1vdW50VG9FbWl0BAAAAAZjYWxsZXIIBQAAAAFpAAAABmNhbGxlcgQAAAAMb3JpZ2luQ2FsbGVyCAUAAAABaQAAAAxvcmlnaW5DYWxsZXIEAAAAEGxwQXNzZXRSZXF1ZXN0ZWQJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCIAAAABCQEAAAAea2V5TWFwcGluZ1Bvb2xDb250cmFjVG9MUEFzc2V0AAAAAQkABCUAAAABBQAAAAZjYWxsZXICAAAAHUludmFsaWQgTFAgYWRkcmVzcyBjYWxsZWQgbWUuBAAAAAdscEFzc2V0CQACWQAAAAEFAAAAEGxwQXNzZXRSZXF1ZXN0ZWQDCQAAZgAAAAIFAAAADGFtb3VudFRvRW1pdAAAAAAAAAAAAAkABRQAAAACCQAETAAAAAIJAQAAAAdSZWlzc3VlAAAAAwUAAAAHbHBBc3NldAUAAAAMYW1vdW50VG9FbWl0BgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAADGFtb3VudFRvRW1pdAUAAAAHbHBBc3NldAUAAAADbmlsAgAAAAdzdWNjZXNzBQAAAANuaWwAAAABaQEAAAAEYnVybgAAAAEAAAAMYW1vdW50VG9CdXJuBAAAAAZjYWxsZXIIBQAAAAFpAAAABmNhbGxlcgQAAAAMb3JpZ2luQ2FsbGVyCAUAAAABaQAAAAxvcmlnaW5DYWxsZXIEAAAAB3BheW1lbnQJAQAAAAV2YWx1ZQAAAAEJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAEAAAADXBheW1lbnRBbW91bnQJAQAAAAV2YWx1ZQAAAAEIBQAAAAdwYXltZW50AAAABmFtb3VudAQAAAAPaW5BbW91bnRBc3NldElkCQACWAAAAAEJAQAAAAV2YWx1ZQAAAAEIBQAAAAdwYXltZW50AAAAB2Fzc2V0SWQEAAAAGmxwQXNzZXRSZXF1ZXN0ZWRGb3JCdXJuaW5nCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQiAAAAAQkBAAAAHmtleU1hcHBpbmdQb29sQ29udHJhY1RvTFBBc3NldAAAAAEJAAQlAAAAAQUAAAAGY2FsbGVyAgAAAB1JbnZhbGlkIExQIGFkZHJlc3MgY2FsbGVkIG1lLgMJAQAAAAIhPQAAAAIFAAAAD2luQW1vdW50QXNzZXRJZAUAAAAabHBBc3NldFJlcXVlc3RlZEZvckJ1cm5pbmcJAAACAAAAAQIAAAAVSW52YWxpZCBhc3NldCBwYXNzZWQuAwkBAAAAAiE9AAAAAgUAAAAMYW1vdW50VG9CdXJuBQAAAA1wYXltZW50QW1vdW50CQAAAgAAAAECAAAAFkludmFsaWQgYW1vdW50IHBhc3NlZC4EAAAAB2xwQXNzZXQJAAJZAAAAAQUAAAAabHBBc3NldFJlcXVlc3RlZEZvckJ1cm5pbmcJAAUUAAAAAgkABEwAAAACCQEAAAAEQnVybgAAAAIFAAAAB2xwQXNzZXQFAAAADGFtb3VudFRvQnVybgUAAAADbmlsAgAAAAdzdWNjZXNzAAAAAWkBAAAADW1vZGlmeVdlaWdodHMAAAACAAAADmJ0Y1Bvb2xBZGRyZXNzAAAADmV0aFBvb2xBZGRyZXNzBAAAAAxnd3hXZWlnaHROZXcJAABpAAAAAgkAAGgAAAACAAAAAAAAAAAFBQAAAA5QT09MV0VJR0hUTVVMVAAAAAAAAAAAZAQAAAAPd2VpZ2h0RGVjcmVtZW50CQAAaQAAAAIJAABoAAAAAgAAAAAAAAAAGQUAAAAOUE9PTFdFSUdIVE1VTFQAAAAAAAAAA+gEAAAABmNhbGxlcggFAAAAAWkAAAAGY2FsbGVyAwkBAAAAAiE9AAAAAgUAAAAGY2FsbGVyBQAAAAR0aGlzCQAAAgAAAAECAAAAEnBlcm1pc3Npb25zIGRlbmllZAQAAAAKZmFjdG9yeUNmZwkABLUAAAACCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQkBAAAAEGtleUZhY3RvcnlDb25maWcAAAAABQAAAANTRVAEAAAAC3N0YWtpbmdEYXBwCQEAAAAXZ2V0U3Rha2luZ0FkZHJlc3NPckZhaWwAAAABBQAAAApmYWN0b3J5Q2ZnBAAAAA1nd3hSZXdhcmREYXBwCQEAAAAZZ2V0R3d4UmV3YXJkQWRkcmVzc09yRmFpbAAAAAEFAAAACmZhY3RvcnlDZmcEAAAADGJ0Y1dlaWdodEtFWQkBAAAAD2tleVBvb2xUb1dlaWdodAAAAAEFAAAADmJ0Y1Bvb2xBZGRyZXNzBAAAAAxldGhXZWlnaHRLRVkJAQAAAA9rZXlQb29sVG9XZWlnaHQAAAABBQAAAA5ldGhQb29sQWRkcmVzcwQAAAAMZ3d4V2VpZ2h0S0VZCQEAAAAPa2V5UG9vbFRvV2VpZ2h0AAAAAQUAAAAOR1dYdmlydHVhbFBPT0wEAAAACWJ0Y1dlaWdodAkBAAAADGdldEludE9yRmFpbAAAAAEFAAAADGJ0Y1dlaWdodEtFWQQAAAAJZXRoV2VpZ2h0CQEAAAAMZ2V0SW50T3JGYWlsAAAAAQUAAAAMZXRoV2VpZ2h0S0VZBAAAAAxidGNXZWlnaHROZXcJAABlAAAAAgUAAAAJYnRjV2VpZ2h0BQAAAA93ZWlnaHREZWNyZW1lbnQEAAAADGV0aFdlaWdodE5ldwkAAGUAAAACBQAAAAlldGhXZWlnaHQFAAAAD3dlaWdodERlY3JlbWVudAMJAABnAAAAAgAAAAAAAAAAAAUAAAAMYnRjV2VpZ2h0TmV3CQAAAgAAAAEJAAEsAAAAAgIAAAAWaW52YWxpZCBidGNXZWlnaHROZXc6IAkAAaQAAAABBQAAAAxidGNXZWlnaHROZXcDCQAAZwAAAAIAAAAAAAAAAAAFAAAADGV0aFdlaWdodE5ldwkAAAIAAAABCQABLAAAAAICAAAAFmludmFsaWQgZXRoV2VpZ2h0TmV3OiAJAAGkAAAAAQUAAAAMZXRoV2VpZ2h0TmV3BAAAAA9idGNMcEFzc2V0SWRTdHIJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAABCQEAAAAea2V5TWFwcGluZ1Bvb2xDb250cmFjVG9MUEFzc2V0AAAAAQUAAAAOYnRjUG9vbEFkZHJlc3MEAAAAD2V0aExwQXNzZXRJZFN0cgkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAEJAQAAAB5rZXlNYXBwaW5nUG9vbENvbnRyYWNUb0xQQXNzZXQAAAABBQAAAA5ldGhQb29sQWRkcmVzcwQAAAARb25Nb2RpZnlXZWlnaHRCdGMJAAP8AAAABAUAAAALc3Rha2luZ0RhcHACAAAADm9uTW9kaWZ5V2VpZ2h0CQAETAAAAAIFAAAAD2J0Y0xwQXNzZXRJZFN0cgkABEwAAAACBQAAAA5idGNQb29sQWRkcmVzcwUAAAADbmlsBQAAAANuaWwDCQAAAAAAAAIFAAAAEW9uTW9kaWZ5V2VpZ2h0QnRjBQAAABFvbk1vZGlmeVdlaWdodEJ0YwQAAAARb25Nb2RpZnlXZWlnaHRFdGgJAAP8AAAABAUAAAALc3Rha2luZ0RhcHACAAAADm9uTW9kaWZ5V2VpZ2h0CQAETAAAAAIFAAAAD2V0aExwQXNzZXRJZFN0cgkABEwAAAACBQAAAA5ldGhQb29sQWRkcmVzcwUAAAADbmlsBQAAAANuaWwDCQAAAAAAAAIFAAAAEW9uTW9kaWZ5V2VpZ2h0RXRoBQAAABFvbk1vZGlmeVdlaWdodEV0aAQAAAAVb25FbWlzc2lvbkZvckd3eFN0YXJ0CQAD/AAAAAQFAAAADWd3eFJld2FyZERhcHACAAAAFW9uRW1pc3Npb25Gb3JHd3hTdGFydAUAAAADbmlsBQAAAANuaWwDCQAAAAAAAAIFAAAAFW9uRW1pc3Npb25Gb3JHd3hTdGFydAUAAAAVb25FbWlzc2lvbkZvckd3eFN0YXJ0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAxidGNXZWlnaHRLRVkFAAAADGJ0Y1dlaWdodE5ldwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAMZXRoV2VpZ2h0S0VZBQAAAAxldGhXZWlnaHROZXcJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAADGd3eFdlaWdodEtFWQUAAAAMZ3d4V2VpZ2h0TmV3CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAWa2V5UG9vbFRvV2VpZ2h0SGlzdG9yeQAAAAIFAAAADmJ0Y1Bvb2xBZGRyZXNzAAAAAAAAAAAABQAAAAlidGNXZWlnaHQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABZrZXlQb29sVG9XZWlnaHRIaXN0b3J5AAAAAgUAAAAOZXRoUG9vbEFkZHJlc3MAAAAAAAAAAAAFAAAACWV0aFdlaWdodAUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAQAAAAJ0eAEAAAAGdmVyaWZ5AAAAAAkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAIBQAAAAJ0eAAAAA9zZW5kZXJQdWJsaWNLZXmW2Rr7", "chainId": 84, "height": 1835357, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 8WFBieHcRr21kB1ioqqwE2obgnVzABf49rxtQuu1rAz3 Next: H9Cf4CHaWjbN78PHYb1od6pdEbE5bMMhVHxaxWF5HvLU Diff:
Old | New | Differences | |
---|---|---|---|
77 | 77 | func H (I) = ("%s%s__poolWeight__" + I) | |
78 | 78 | ||
79 | 79 | ||
80 | - | func J (K) = ("%s%s | |
80 | + | func J (I,K) = ((("%s%s__poolWeight__" + I) + "__") + toString(K)) | |
81 | 81 | ||
82 | 82 | ||
83 | - | func L (M) = ("%s%s% | |
83 | + | func L (M) = ("%s%s%d__mappings__internal2baseAssetId__" + toString(M)) | |
84 | 84 | ||
85 | 85 | ||
86 | - | func N (O | |
86 | + | func N (O) = ("%s%s%s__mappings__baseAsset2internalId__" + O) | |
87 | 87 | ||
88 | 88 | ||
89 | - | func | |
89 | + | func P (Q,R) = (((("%d%d%s__" + Q) + "__") + R) + "__config") | |
90 | 90 | ||
91 | 91 | ||
92 | - | func S (T | |
92 | + | func S (T) = (("%s%s%s__" + T) + "__mappings__lpAsset2Pool") | |
93 | 93 | ||
94 | 94 | ||
95 | - | func | |
95 | + | func U (V,W) = (((("%d%d%s%s__" + V) + "__") + W) + "__mappings__PoolAssets2LpAsset") | |
96 | 96 | ||
97 | 97 | ||
98 | - | func X ( | |
98 | + | func X (Y) = (("%s%s%s__" + Y) + "__mappings__poolContract2PoolAssets") | |
99 | 99 | ||
100 | 100 | ||
101 | - | func | |
101 | + | func Z (V,W) = (((("%d%d%s%s__" + toString(V)) + "__") + toString(W)) + "__mappings__poolAssets2PoolContract") | |
102 | 102 | ||
103 | 103 | ||
104 | - | func | |
104 | + | func aa (Y) = (("%s%s%s__" + Y) + "__mappings__poolContract2LpAsset") | |
105 | 105 | ||
106 | 106 | ||
107 | - | func | |
107 | + | func ab (T) = (("%s%s%s__" + T) + "__mappings__lpAsset2PoolContract") | |
108 | 108 | ||
109 | 109 | ||
110 | - | func ac ( | |
110 | + | func ac (ad) = valueOrErrorMessage(getString(this, ad), ("No data for this.key=" + ad)) | |
111 | 111 | ||
112 | 112 | ||
113 | - | func | |
113 | + | func ae (ad) = valueOrErrorMessage(getBoolean(this, ad), ("No data for this.key=" + ad)) | |
114 | 114 | ||
115 | 115 | ||
116 | - | let ae = 1 | |
117 | - | ||
118 | - | let af = 2 | |
119 | - | ||
120 | - | let ag = 3 | |
121 | - | ||
122 | - | let ah = 4 | |
123 | - | ||
124 | - | let ai = 5 | |
125 | - | ||
126 | - | let aj = 6 | |
127 | - | ||
128 | - | let ak = 7 | |
129 | - | ||
130 | - | let al = 8 | |
131 | - | ||
132 | - | let am = 9 | |
133 | - | ||
134 | - | let an = 10 | |
135 | - | ||
136 | - | let ao = 11 | |
137 | - | ||
138 | - | func ap (aq) = addressFromStringValue(aq[af]) | |
116 | + | func af (ad) = valueOrErrorMessage(getInteger(this, ad), ("No data for this.key=" + ad)) | |
139 | 117 | ||
140 | 118 | ||
141 | - | func ar (aq) = addressFromStringValue(aq[ai]) | |
119 | + | let ag = 1 | |
120 | + | ||
121 | + | let ah = 2 | |
122 | + | ||
123 | + | let ai = 3 | |
124 | + | ||
125 | + | let aj = 4 | |
126 | + | ||
127 | + | let ak = 5 | |
128 | + | ||
129 | + | let al = 6 | |
130 | + | ||
131 | + | let am = 7 | |
132 | + | ||
133 | + | let an = 8 | |
134 | + | ||
135 | + | let ao = 9 | |
136 | + | ||
137 | + | let ap = 10 | |
138 | + | ||
139 | + | let aq = 11 | |
140 | + | ||
141 | + | func ar (as) = addressFromStringValue(as[ah]) | |
142 | 142 | ||
143 | 143 | ||
144 | - | func | |
144 | + | func at (as) = addressFromStringValue(as[ak]) | |
145 | 145 | ||
146 | 146 | ||
147 | - | func | |
147 | + | func au (as) = addressFromStringValue(as[ag]) | |
148 | 148 | ||
149 | 149 | ||
150 | - | func | |
150 | + | func av (as) = addressFromStringValue(as[ap]) | |
151 | 151 | ||
152 | 152 | ||
153 | - | func | |
153 | + | func aw (ax,ay,az,aA,aB,aC,aD,aE,aF,aG,aH) = makeString(["%s%s%s%s%s%s%s%s%s%s%s", ax, ay, az, aA, aB, aC, aD, aE, aF, aG, aH], h) | |
154 | 154 | ||
155 | 155 | ||
156 | - | func | |
156 | + | func aI (ax,ay,az,aA,aB,aC,aD) = makeString(["%s%s%s%s%s%s", ax, ay, az, aA, aB, aC, aD], h) | |
157 | 157 | ||
158 | 158 | ||
159 | - | func | |
159 | + | func aJ (I,aK,aL,aM,aN,aO,aP,aQ,aR,aS,aT) = makeString(["%s%d%s%s%s%d%d%d%d%d%s", I, aK, aL, aM, aN, toString(aO), toString(aP), toString(aQ), toString(aR), toString(aS), aT], h) | |
160 | 160 | ||
161 | 161 | ||
162 | - | func aV (I) = { | |
163 | - | let aW = split(aa(V(I)), h) | |
164 | - | let O = aW[1] | |
165 | - | let P = aW[2] | |
166 | - | split(aa(N(O, P)), h) | |
162 | + | func aU (aV,aW) = makeString(["%d%d", toString(aV), toString(aW)], h) | |
163 | + | ||
164 | + | ||
165 | + | func aX (I) = { | |
166 | + | let aY = split(ac(X(I)), h) | |
167 | + | let Q = aY[1] | |
168 | + | let R = aY[2] | |
169 | + | split(ac(P(Q, R)), h) | |
167 | 170 | } | |
168 | 171 | ||
169 | 172 | ||
170 | - | func | |
171 | - | let | |
172 | - | let | |
173 | - | let | |
173 | + | func aZ (ba,bb) = { | |
174 | + | let bc = valueOrElse(getInteger(this, N(ba)), 0) | |
175 | + | let bd = valueOrElse(getInteger(this, G()), 0) | |
176 | + | let be = if ((bc == 0)) | |
174 | 177 | then { | |
175 | - | let | |
176 | - | $Tuple3( | |
178 | + | let bf = (bd + bb) | |
179 | + | $Tuple3(bf, [IntegerEntry(G(), bf), IntegerEntry(N(ba), bf), StringEntry(L(bf), ba)], true) | |
177 | 180 | } | |
178 | - | else $Tuple3( | |
179 | - | | |
181 | + | else $Tuple3(bc, nil, false) | |
182 | + | be | |
180 | 183 | } | |
181 | 184 | ||
182 | 185 | ||
183 | - | func | |
184 | - | let | |
185 | - | if (isDefined( | |
186 | - | then ((value( | |
187 | - | else | |
186 | + | func bg (bh) = { | |
187 | + | let bi = getString(this, B()) | |
188 | + | if (isDefined(bi)) | |
189 | + | then ((value(bi) + h) + bh) | |
190 | + | else bh | |
188 | 191 | } | |
189 | 192 | ||
190 | 193 | ||
191 | - | @Callable( | |
192 | - | func constructor ( | |
194 | + | @Callable(bj) | |
195 | + | func constructor (bk,bl,az,aA,aB,aC,bm,bn) = if ((bj.caller != this)) | |
193 | 196 | then throw("permissions denied") | |
194 | - | else [StringEntry(A(), | |
197 | + | else [StringEntry(A(), aI(bk, bl, az, aA, aB, aC, bm)), IntegerEntry(E(), bn)] | |
195 | 198 | ||
196 | 199 | ||
197 | 200 | ||
198 | - | @Callable( | |
199 | - | func constructorV2 ( | |
201 | + | @Callable(bj) | |
202 | + | func constructorV2 (bo) = if ((bj.caller != this)) | |
200 | 203 | then throw("permissions denied") | |
201 | 204 | else { | |
202 | - | let | |
203 | - | if (( | |
204 | - | then [StringEntry(D(), | |
205 | + | let bp = addressFromPublicKey(fromBase58String(bo)) | |
206 | + | if ((bp == bp)) | |
207 | + | then [StringEntry(D(), bo)] | |
205 | 208 | else throw("Strict value is not equal to itself.") | |
206 | 209 | } | |
207 | 210 | ||
208 | 211 | ||
209 | 212 | ||
210 | - | @Callable( | |
211 | - | func constructorV3 ( | |
213 | + | @Callable(bj) | |
214 | + | func constructorV3 (aE,aF,aG,aH) = if ((bj.caller != this)) | |
212 | 215 | then throw("permissions denied") | |
213 | 216 | else { | |
214 | - | let | |
215 | - | [StringEntry(A(), | |
217 | + | let as = split(ac(A()), h) | |
218 | + | [StringEntry(A(), aw(as[1], as[2], as[3], as[4], as[5], as[6], as[7], aE, aF, aG, aH))] | |
216 | 219 | } | |
217 | 220 | ||
218 | 221 | ||
219 | 222 | ||
220 | - | @Callable( | |
221 | - | func activateNewPool (I, | |
223 | + | @Callable(bj) | |
224 | + | func activateNewPool (I,aM,aN,bq,br,bs,aT) = if ((bj.caller != this)) | |
222 | 225 | then throw("permissions denied") | |
223 | - | else if (isDefined(getString( | |
226 | + | else if (isDefined(getString(X(I)))) | |
224 | 227 | then throw((("Pool address " + I) + " already registered.")) | |
225 | 228 | else { | |
226 | - | let | |
227 | - | let | |
228 | - | let | |
229 | + | let bt = aZ(aM, 1) | |
230 | + | let bu = bt._1 | |
231 | + | let bv = aZ(aN, if (bt._3) | |
229 | 232 | then 2 | |
230 | 233 | else 1) | |
231 | - | let | |
232 | - | let | |
233 | - | let | |
234 | - | let | |
235 | - | if (isDefined( | |
236 | - | then throw((((("Pool " + | |
234 | + | let bw = bv._1 | |
235 | + | let bx = valueOrErrorMessage(scriptHash(addressFromStringValue(I)), ("No script has been found on pool account " + I)) | |
236 | + | let by = getBinaryValue(C()) | |
237 | + | let bz = getString(this, P(toString(bu), toString(bw))) | |
238 | + | if (isDefined(bz)) | |
239 | + | then throw((((("Pool " + aM) + "/") + aN) + " has already been activated.")) | |
237 | 240 | else { | |
238 | - | let | |
239 | - | let | |
241 | + | let bA = value(getString(this, P(toString(bu), toString(bw)))) | |
242 | + | let bB = if ((aM == "WAVES")) | |
240 | 243 | then g | |
241 | - | else pow(10, 0, value(assetInfo(fromBase58String( | |
242 | - | let | |
244 | + | else pow(10, 0, value(assetInfo(fromBase58String(aM))).decimals, 0, 0, DOWN) | |
245 | + | let bC = if ((aN == "WAVES")) | |
243 | 246 | then g | |
244 | - | else pow(10, 0, value(assetInfo(fromBase58String( | |
245 | - | let | |
246 | - | let | |
247 | - | let | |
248 | - | let | |
249 | - | if (( | |
250 | - | then if (( | |
247 | + | else pow(10, 0, value(assetInfo(fromBase58String(aN))).decimals, 0, 0, DOWN) | |
248 | + | let bD = Issue(bq, br, 1, 8, true) | |
249 | + | let aL = calculateAssetId(bD) | |
250 | + | let bE = toBase58String(aL) | |
251 | + | let bF = invoke(addressFromStringValue(I), "activate", [aM, aN], nil) | |
252 | + | if ((bF == bF)) | |
253 | + | then if ((bF != "success")) | |
251 | 254 | then throw("Pool initialisation error happened.") | |
252 | - | else $Tuple2((( | |
255 | + | else $Tuple2(((bt._2 ++ bv._2) ++ [bD, Burn(aL, 1), StringEntry(P(toString(bu), toString(bw)), aJ(I, toString(i), bE, aM, aN, bB, bC, bu, bw, g, aT)), StringEntry(S(bE), aU(bu, bw)), StringEntry(U(toString(bu), toString(bw)), ("%s__" + bE)), StringEntry(X(I), aU(bu, bw)), StringEntry(Z(bu, bw), I), StringEntry(ab(bE), I), StringEntry(aa(I), bE), IntegerEntry(H(I), bs), StringEntry(B(), bg(bE))]), "success") | |
253 | 256 | else throw("Strict value is not equal to itself.") | |
254 | 257 | } | |
255 | 258 | } | |
256 | 259 | ||
257 | 260 | ||
258 | 261 | ||
259 | - | @Callable( | |
260 | - | func managePool (I, | |
262 | + | @Callable(bj) | |
263 | + | func managePool (I,bG) = if ((bj.caller != this)) | |
261 | 264 | then throw("permissions denied") | |
262 | 265 | else { | |
263 | - | let | |
264 | - | let | |
265 | - | let | |
266 | - | let | |
267 | - | let | |
268 | - | let | |
269 | - | let | |
270 | - | let | |
271 | - | let | |
272 | - | let | |
273 | - | let | |
274 | - | [StringEntry( | |
266 | + | let bz = aX(I) | |
267 | + | let aK = bz[q] | |
268 | + | let bE = bz[r] | |
269 | + | let aM = bz[s] | |
270 | + | let aN = bz[t] | |
271 | + | let bB = parseIntValue(bz[u]) | |
272 | + | let bC = parseIntValue(bz[v]) | |
273 | + | let bu = parseIntValue(bz[w]) | |
274 | + | let bw = parseIntValue(bz[x]) | |
275 | + | let bH = parseIntValue(bz[y]) | |
276 | + | let aT = bz[z] | |
277 | + | [StringEntry(P(toString(bu), toString(bw)), aJ(I, toString(bG), bE, aM, aN, bB, bC, bu, bw, bH, aT))] | |
275 | 278 | } | |
276 | 279 | ||
277 | 280 | ||
278 | 281 | ||
279 | - | @Callable( | |
280 | - | func emit ( | |
281 | - | let | |
282 | - | let | |
283 | - | let | |
284 | - | let | |
285 | - | if (( | |
286 | - | then $Tuple2([Reissue( | |
282 | + | @Callable(bj) | |
283 | + | func emit (bI) = { | |
284 | + | let bJ = bj.caller | |
285 | + | let bK = bj.originCaller | |
286 | + | let bL = valueOrErrorMessage(getString(aa(toString(bJ))), "Invalid LP address called me.") | |
287 | + | let bM = fromBase58String(bL) | |
288 | + | if ((bI > 0)) | |
289 | + | then $Tuple2([Reissue(bM, bI, true), ScriptTransfer(bj.caller, bI, bM)], "success") | |
287 | 290 | else nil | |
288 | 291 | } | |
289 | 292 | ||
290 | 293 | ||
291 | 294 | ||
292 | - | @Callable( | |
293 | - | func burn ( | |
294 | - | let | |
295 | - | let | |
296 | - | let | |
297 | - | let | |
298 | - | let | |
299 | - | let | |
300 | - | if (( | |
295 | + | @Callable(bj) | |
296 | + | func burn (bN) = { | |
297 | + | let bJ = bj.caller | |
298 | + | let bK = bj.originCaller | |
299 | + | let bO = value(bj.payments[0]) | |
300 | + | let bP = value(bO.amount) | |
301 | + | let bQ = toBase58String(value(bO.assetId)) | |
302 | + | let bR = valueOrErrorMessage(getString(aa(toString(bJ))), "Invalid LP address called me.") | |
303 | + | if ((bQ != bR)) | |
301 | 304 | then throw("Invalid asset passed.") | |
302 | - | else if (( | |
305 | + | else if ((bN != bP)) | |
303 | 306 | then throw("Invalid amount passed.") | |
304 | 307 | else { | |
305 | - | let | |
306 | - | $Tuple2([Burn( | |
308 | + | let bM = fromBase58String(bR) | |
309 | + | $Tuple2([Burn(bM, bN)], "success") | |
307 | 310 | } | |
308 | 311 | } | |
309 | 312 | ||
310 | 313 | ||
311 | 314 | ||
312 | - | @Callable( | |
313 | - | func modifyWeights ( | |
314 | - | let | |
315 | - | let | |
316 | - | let | |
317 | - | if (( | |
315 | + | @Callable(bj) | |
316 | + | func modifyWeights (bS,bT) = { | |
317 | + | let bU = ((5 * e) / 100) | |
318 | + | let bV = ((25 * e) / 1000) | |
319 | + | let bJ = bj.caller | |
320 | + | if ((bJ != this)) | |
318 | 321 | then throw("permissions denied") | |
319 | 322 | else { | |
320 | - | let aq = split(aa(A()), h) | |
321 | - | let bU = as(aq) | |
322 | - | let bV = at(aq) | |
323 | - | let bW = H(bQ) | |
324 | - | let bX = H(bR) | |
325 | - | let bY = H(f) | |
326 | - | let bZ = (ad(bW) - bT) | |
327 | - | let ca = (ad(bX) - bT) | |
328 | - | if ((0 >= bZ)) | |
329 | - | then throw(("invalid btcWeightNew: " + toString(bZ))) | |
330 | - | else if ((0 >= ca)) | |
331 | - | then throw(("invalid ethWeightNew: " + toString(ca))) | |
323 | + | let as = split(ac(A()), h) | |
324 | + | let bW = au(as) | |
325 | + | let bX = av(as) | |
326 | + | let bY = H(bS) | |
327 | + | let bZ = H(bT) | |
328 | + | let ca = H(f) | |
329 | + | let cb = af(bY) | |
330 | + | let cc = af(bZ) | |
331 | + | let cd = (cb - bV) | |
332 | + | let ce = (cc - bV) | |
333 | + | if ((0 >= cd)) | |
334 | + | then throw(("invalid btcWeightNew: " + toString(cd))) | |
335 | + | else if ((0 >= ce)) | |
336 | + | then throw(("invalid ethWeightNew: " + toString(ce))) | |
332 | 337 | else { | |
333 | - | let | |
334 | - | let | |
335 | - | let | |
336 | - | if (( | |
338 | + | let cf = ac(aa(bS)) | |
339 | + | let cg = ac(aa(bT)) | |
340 | + | let ch = invoke(bW, "onModifyWeight", [cf, bS], nil) | |
341 | + | if ((ch == ch)) | |
337 | 342 | then { | |
338 | - | let | |
339 | - | if (( | |
343 | + | let ci = invoke(bW, "onModifyWeight", [cg, bT], nil) | |
344 | + | if ((ci == ci)) | |
340 | 345 | then { | |
341 | - | let | |
342 | - | if (( | |
343 | - | then [IntegerEntry( | |
346 | + | let cj = invoke(bX, "onEmissionForGwxStart", nil, nil) | |
347 | + | if ((cj == cj)) | |
348 | + | then [IntegerEntry(bY, cd), IntegerEntry(bZ, ce), IntegerEntry(ca, bU), IntegerEntry(J(bS, 0), cb), IntegerEntry(J(bT, 0), cc)] | |
344 | 349 | else throw("Strict value is not equal to itself.") | |
345 | 350 | } | |
346 | 351 | else throw("Strict value is not equal to itself.") | |
351 | 356 | } | |
352 | 357 | ||
353 | 358 | ||
354 | - | @Verifier( | |
355 | - | func | |
359 | + | @Verifier(ck) | |
360 | + | func cl () = sigVerify(ck.bodyBytes, ck.proofs[0], ck.senderPublicKey) | |
356 | 361 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
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 = 18 | |
9 | 9 | ||
10 | 10 | let d = toBigInt(1000000000000000000) | |
11 | 11 | ||
12 | 12 | let e = b | |
13 | 13 | ||
14 | 14 | let f = "GWXvirtualPOOL" | |
15 | 15 | ||
16 | 16 | let g = ((100 * 1000) * 1000) | |
17 | 17 | ||
18 | 18 | let h = "__" | |
19 | 19 | ||
20 | 20 | let i = 1 | |
21 | 21 | ||
22 | 22 | let j = 2 | |
23 | 23 | ||
24 | 24 | let k = 3 | |
25 | 25 | ||
26 | 26 | let l = 4 | |
27 | 27 | ||
28 | 28 | let m = 1 | |
29 | 29 | ||
30 | 30 | let n = 2 | |
31 | 31 | ||
32 | 32 | let o = 3 | |
33 | 33 | ||
34 | 34 | let p = 1 | |
35 | 35 | ||
36 | 36 | let q = 2 | |
37 | 37 | ||
38 | 38 | let r = 3 | |
39 | 39 | ||
40 | 40 | let s = 4 | |
41 | 41 | ||
42 | 42 | let t = 5 | |
43 | 43 | ||
44 | 44 | let u = 6 | |
45 | 45 | ||
46 | 46 | let v = 7 | |
47 | 47 | ||
48 | 48 | let w = 8 | |
49 | 49 | ||
50 | 50 | let x = 9 | |
51 | 51 | ||
52 | 52 | let y = 10 | |
53 | 53 | ||
54 | 54 | let z = 11 | |
55 | 55 | ||
56 | 56 | func A () = "%s__factoryConfig" | |
57 | 57 | ||
58 | 58 | ||
59 | 59 | func B () = "%s__lpTokensList" | |
60 | 60 | ||
61 | 61 | ||
62 | 62 | func C () = "%s%s__pool__scriptHash" | |
63 | 63 | ||
64 | 64 | ||
65 | 65 | func D () = "%s%s__matcher__publicKey" | |
66 | 66 | ||
67 | 67 | ||
68 | 68 | func E () = "%s__priceDecimals" | |
69 | 69 | ||
70 | 70 | ||
71 | 71 | func F () = "%s__shutdown" | |
72 | 72 | ||
73 | 73 | ||
74 | 74 | func G () = "%s__nextInternalAssetId" | |
75 | 75 | ||
76 | 76 | ||
77 | 77 | func H (I) = ("%s%s__poolWeight__" + I) | |
78 | 78 | ||
79 | 79 | ||
80 | - | func J (K) = ("%s%s | |
80 | + | func J (I,K) = ((("%s%s__poolWeight__" + I) + "__") + toString(K)) | |
81 | 81 | ||
82 | 82 | ||
83 | - | func L (M) = ("%s%s% | |
83 | + | func L (M) = ("%s%s%d__mappings__internal2baseAssetId__" + toString(M)) | |
84 | 84 | ||
85 | 85 | ||
86 | - | func N (O | |
86 | + | func N (O) = ("%s%s%s__mappings__baseAsset2internalId__" + O) | |
87 | 87 | ||
88 | 88 | ||
89 | - | func | |
89 | + | func P (Q,R) = (((("%d%d%s__" + Q) + "__") + R) + "__config") | |
90 | 90 | ||
91 | 91 | ||
92 | - | func S (T | |
92 | + | func S (T) = (("%s%s%s__" + T) + "__mappings__lpAsset2Pool") | |
93 | 93 | ||
94 | 94 | ||
95 | - | func | |
95 | + | func U (V,W) = (((("%d%d%s%s__" + V) + "__") + W) + "__mappings__PoolAssets2LpAsset") | |
96 | 96 | ||
97 | 97 | ||
98 | - | func X ( | |
98 | + | func X (Y) = (("%s%s%s__" + Y) + "__mappings__poolContract2PoolAssets") | |
99 | 99 | ||
100 | 100 | ||
101 | - | func | |
101 | + | func Z (V,W) = (((("%d%d%s%s__" + toString(V)) + "__") + toString(W)) + "__mappings__poolAssets2PoolContract") | |
102 | 102 | ||
103 | 103 | ||
104 | - | func | |
104 | + | func aa (Y) = (("%s%s%s__" + Y) + "__mappings__poolContract2LpAsset") | |
105 | 105 | ||
106 | 106 | ||
107 | - | func | |
107 | + | func ab (T) = (("%s%s%s__" + T) + "__mappings__lpAsset2PoolContract") | |
108 | 108 | ||
109 | 109 | ||
110 | - | func ac ( | |
110 | + | func ac (ad) = valueOrErrorMessage(getString(this, ad), ("No data for this.key=" + ad)) | |
111 | 111 | ||
112 | 112 | ||
113 | - | func | |
113 | + | func ae (ad) = valueOrErrorMessage(getBoolean(this, ad), ("No data for this.key=" + ad)) | |
114 | 114 | ||
115 | 115 | ||
116 | - | let ae = 1 | |
117 | - | ||
118 | - | let af = 2 | |
119 | - | ||
120 | - | let ag = 3 | |
121 | - | ||
122 | - | let ah = 4 | |
123 | - | ||
124 | - | let ai = 5 | |
125 | - | ||
126 | - | let aj = 6 | |
127 | - | ||
128 | - | let ak = 7 | |
129 | - | ||
130 | - | let al = 8 | |
131 | - | ||
132 | - | let am = 9 | |
133 | - | ||
134 | - | let an = 10 | |
135 | - | ||
136 | - | let ao = 11 | |
137 | - | ||
138 | - | func ap (aq) = addressFromStringValue(aq[af]) | |
116 | + | func af (ad) = valueOrErrorMessage(getInteger(this, ad), ("No data for this.key=" + ad)) | |
139 | 117 | ||
140 | 118 | ||
141 | - | func ar (aq) = addressFromStringValue(aq[ai]) | |
119 | + | let ag = 1 | |
120 | + | ||
121 | + | let ah = 2 | |
122 | + | ||
123 | + | let ai = 3 | |
124 | + | ||
125 | + | let aj = 4 | |
126 | + | ||
127 | + | let ak = 5 | |
128 | + | ||
129 | + | let al = 6 | |
130 | + | ||
131 | + | let am = 7 | |
132 | + | ||
133 | + | let an = 8 | |
134 | + | ||
135 | + | let ao = 9 | |
136 | + | ||
137 | + | let ap = 10 | |
138 | + | ||
139 | + | let aq = 11 | |
140 | + | ||
141 | + | func ar (as) = addressFromStringValue(as[ah]) | |
142 | 142 | ||
143 | 143 | ||
144 | - | func | |
144 | + | func at (as) = addressFromStringValue(as[ak]) | |
145 | 145 | ||
146 | 146 | ||
147 | - | func | |
147 | + | func au (as) = addressFromStringValue(as[ag]) | |
148 | 148 | ||
149 | 149 | ||
150 | - | func | |
150 | + | func av (as) = addressFromStringValue(as[ap]) | |
151 | 151 | ||
152 | 152 | ||
153 | - | func | |
153 | + | func aw (ax,ay,az,aA,aB,aC,aD,aE,aF,aG,aH) = makeString(["%s%s%s%s%s%s%s%s%s%s%s", ax, ay, az, aA, aB, aC, aD, aE, aF, aG, aH], h) | |
154 | 154 | ||
155 | 155 | ||
156 | - | func | |
156 | + | func aI (ax,ay,az,aA,aB,aC,aD) = makeString(["%s%s%s%s%s%s", ax, ay, az, aA, aB, aC, aD], h) | |
157 | 157 | ||
158 | 158 | ||
159 | - | func | |
159 | + | func aJ (I,aK,aL,aM,aN,aO,aP,aQ,aR,aS,aT) = makeString(["%s%d%s%s%s%d%d%d%d%d%s", I, aK, aL, aM, aN, toString(aO), toString(aP), toString(aQ), toString(aR), toString(aS), aT], h) | |
160 | 160 | ||
161 | 161 | ||
162 | - | func aV (I) = { | |
163 | - | let aW = split(aa(V(I)), h) | |
164 | - | let O = aW[1] | |
165 | - | let P = aW[2] | |
166 | - | split(aa(N(O, P)), h) | |
162 | + | func aU (aV,aW) = makeString(["%d%d", toString(aV), toString(aW)], h) | |
163 | + | ||
164 | + | ||
165 | + | func aX (I) = { | |
166 | + | let aY = split(ac(X(I)), h) | |
167 | + | let Q = aY[1] | |
168 | + | let R = aY[2] | |
169 | + | split(ac(P(Q, R)), h) | |
167 | 170 | } | |
168 | 171 | ||
169 | 172 | ||
170 | - | func | |
171 | - | let | |
172 | - | let | |
173 | - | let | |
173 | + | func aZ (ba,bb) = { | |
174 | + | let bc = valueOrElse(getInteger(this, N(ba)), 0) | |
175 | + | let bd = valueOrElse(getInteger(this, G()), 0) | |
176 | + | let be = if ((bc == 0)) | |
174 | 177 | then { | |
175 | - | let | |
176 | - | $Tuple3( | |
178 | + | let bf = (bd + bb) | |
179 | + | $Tuple3(bf, [IntegerEntry(G(), bf), IntegerEntry(N(ba), bf), StringEntry(L(bf), ba)], true) | |
177 | 180 | } | |
178 | - | else $Tuple3( | |
179 | - | | |
181 | + | else $Tuple3(bc, nil, false) | |
182 | + | be | |
180 | 183 | } | |
181 | 184 | ||
182 | 185 | ||
183 | - | func | |
184 | - | let | |
185 | - | if (isDefined( | |
186 | - | then ((value( | |
187 | - | else | |
186 | + | func bg (bh) = { | |
187 | + | let bi = getString(this, B()) | |
188 | + | if (isDefined(bi)) | |
189 | + | then ((value(bi) + h) + bh) | |
190 | + | else bh | |
188 | 191 | } | |
189 | 192 | ||
190 | 193 | ||
191 | - | @Callable( | |
192 | - | func constructor ( | |
194 | + | @Callable(bj) | |
195 | + | func constructor (bk,bl,az,aA,aB,aC,bm,bn) = if ((bj.caller != this)) | |
193 | 196 | then throw("permissions denied") | |
194 | - | else [StringEntry(A(), | |
197 | + | else [StringEntry(A(), aI(bk, bl, az, aA, aB, aC, bm)), IntegerEntry(E(), bn)] | |
195 | 198 | ||
196 | 199 | ||
197 | 200 | ||
198 | - | @Callable( | |
199 | - | func constructorV2 ( | |
201 | + | @Callable(bj) | |
202 | + | func constructorV2 (bo) = if ((bj.caller != this)) | |
200 | 203 | then throw("permissions denied") | |
201 | 204 | else { | |
202 | - | let | |
203 | - | if (( | |
204 | - | then [StringEntry(D(), | |
205 | + | let bp = addressFromPublicKey(fromBase58String(bo)) | |
206 | + | if ((bp == bp)) | |
207 | + | then [StringEntry(D(), bo)] | |
205 | 208 | else throw("Strict value is not equal to itself.") | |
206 | 209 | } | |
207 | 210 | ||
208 | 211 | ||
209 | 212 | ||
210 | - | @Callable( | |
211 | - | func constructorV3 ( | |
213 | + | @Callable(bj) | |
214 | + | func constructorV3 (aE,aF,aG,aH) = if ((bj.caller != this)) | |
212 | 215 | then throw("permissions denied") | |
213 | 216 | else { | |
214 | - | let | |
215 | - | [StringEntry(A(), | |
217 | + | let as = split(ac(A()), h) | |
218 | + | [StringEntry(A(), aw(as[1], as[2], as[3], as[4], as[5], as[6], as[7], aE, aF, aG, aH))] | |
216 | 219 | } | |
217 | 220 | ||
218 | 221 | ||
219 | 222 | ||
220 | - | @Callable( | |
221 | - | func activateNewPool (I, | |
223 | + | @Callable(bj) | |
224 | + | func activateNewPool (I,aM,aN,bq,br,bs,aT) = if ((bj.caller != this)) | |
222 | 225 | then throw("permissions denied") | |
223 | - | else if (isDefined(getString( | |
226 | + | else if (isDefined(getString(X(I)))) | |
224 | 227 | then throw((("Pool address " + I) + " already registered.")) | |
225 | 228 | else { | |
226 | - | let | |
227 | - | let | |
228 | - | let | |
229 | + | let bt = aZ(aM, 1) | |
230 | + | let bu = bt._1 | |
231 | + | let bv = aZ(aN, if (bt._3) | |
229 | 232 | then 2 | |
230 | 233 | else 1) | |
231 | - | let | |
232 | - | let | |
233 | - | let | |
234 | - | let | |
235 | - | if (isDefined( | |
236 | - | then throw((((("Pool " + | |
234 | + | let bw = bv._1 | |
235 | + | let bx = valueOrErrorMessage(scriptHash(addressFromStringValue(I)), ("No script has been found on pool account " + I)) | |
236 | + | let by = getBinaryValue(C()) | |
237 | + | let bz = getString(this, P(toString(bu), toString(bw))) | |
238 | + | if (isDefined(bz)) | |
239 | + | then throw((((("Pool " + aM) + "/") + aN) + " has already been activated.")) | |
237 | 240 | else { | |
238 | - | let | |
239 | - | let | |
241 | + | let bA = value(getString(this, P(toString(bu), toString(bw)))) | |
242 | + | let bB = if ((aM == "WAVES")) | |
240 | 243 | then g | |
241 | - | else pow(10, 0, value(assetInfo(fromBase58String( | |
242 | - | let | |
244 | + | else pow(10, 0, value(assetInfo(fromBase58String(aM))).decimals, 0, 0, DOWN) | |
245 | + | let bC = if ((aN == "WAVES")) | |
243 | 246 | then g | |
244 | - | else pow(10, 0, value(assetInfo(fromBase58String( | |
245 | - | let | |
246 | - | let | |
247 | - | let | |
248 | - | let | |
249 | - | if (( | |
250 | - | then if (( | |
247 | + | else pow(10, 0, value(assetInfo(fromBase58String(aN))).decimals, 0, 0, DOWN) | |
248 | + | let bD = Issue(bq, br, 1, 8, true) | |
249 | + | let aL = calculateAssetId(bD) | |
250 | + | let bE = toBase58String(aL) | |
251 | + | let bF = invoke(addressFromStringValue(I), "activate", [aM, aN], nil) | |
252 | + | if ((bF == bF)) | |
253 | + | then if ((bF != "success")) | |
251 | 254 | then throw("Pool initialisation error happened.") | |
252 | - | else $Tuple2((( | |
255 | + | else $Tuple2(((bt._2 ++ bv._2) ++ [bD, Burn(aL, 1), StringEntry(P(toString(bu), toString(bw)), aJ(I, toString(i), bE, aM, aN, bB, bC, bu, bw, g, aT)), StringEntry(S(bE), aU(bu, bw)), StringEntry(U(toString(bu), toString(bw)), ("%s__" + bE)), StringEntry(X(I), aU(bu, bw)), StringEntry(Z(bu, bw), I), StringEntry(ab(bE), I), StringEntry(aa(I), bE), IntegerEntry(H(I), bs), StringEntry(B(), bg(bE))]), "success") | |
253 | 256 | else throw("Strict value is not equal to itself.") | |
254 | 257 | } | |
255 | 258 | } | |
256 | 259 | ||
257 | 260 | ||
258 | 261 | ||
259 | - | @Callable( | |
260 | - | func managePool (I, | |
262 | + | @Callable(bj) | |
263 | + | func managePool (I,bG) = if ((bj.caller != this)) | |
261 | 264 | then throw("permissions denied") | |
262 | 265 | else { | |
263 | - | let | |
264 | - | let | |
265 | - | let | |
266 | - | let | |
267 | - | let | |
268 | - | let | |
269 | - | let | |
270 | - | let | |
271 | - | let | |
272 | - | let | |
273 | - | let | |
274 | - | [StringEntry( | |
266 | + | let bz = aX(I) | |
267 | + | let aK = bz[q] | |
268 | + | let bE = bz[r] | |
269 | + | let aM = bz[s] | |
270 | + | let aN = bz[t] | |
271 | + | let bB = parseIntValue(bz[u]) | |
272 | + | let bC = parseIntValue(bz[v]) | |
273 | + | let bu = parseIntValue(bz[w]) | |
274 | + | let bw = parseIntValue(bz[x]) | |
275 | + | let bH = parseIntValue(bz[y]) | |
276 | + | let aT = bz[z] | |
277 | + | [StringEntry(P(toString(bu), toString(bw)), aJ(I, toString(bG), bE, aM, aN, bB, bC, bu, bw, bH, aT))] | |
275 | 278 | } | |
276 | 279 | ||
277 | 280 | ||
278 | 281 | ||
279 | - | @Callable( | |
280 | - | func emit ( | |
281 | - | let | |
282 | - | let | |
283 | - | let | |
284 | - | let | |
285 | - | if (( | |
286 | - | then $Tuple2([Reissue( | |
282 | + | @Callable(bj) | |
283 | + | func emit (bI) = { | |
284 | + | let bJ = bj.caller | |
285 | + | let bK = bj.originCaller | |
286 | + | let bL = valueOrErrorMessage(getString(aa(toString(bJ))), "Invalid LP address called me.") | |
287 | + | let bM = fromBase58String(bL) | |
288 | + | if ((bI > 0)) | |
289 | + | then $Tuple2([Reissue(bM, bI, true), ScriptTransfer(bj.caller, bI, bM)], "success") | |
287 | 290 | else nil | |
288 | 291 | } | |
289 | 292 | ||
290 | 293 | ||
291 | 294 | ||
292 | - | @Callable( | |
293 | - | func burn ( | |
294 | - | let | |
295 | - | let | |
296 | - | let | |
297 | - | let | |
298 | - | let | |
299 | - | let | |
300 | - | if (( | |
295 | + | @Callable(bj) | |
296 | + | func burn (bN) = { | |
297 | + | let bJ = bj.caller | |
298 | + | let bK = bj.originCaller | |
299 | + | let bO = value(bj.payments[0]) | |
300 | + | let bP = value(bO.amount) | |
301 | + | let bQ = toBase58String(value(bO.assetId)) | |
302 | + | let bR = valueOrErrorMessage(getString(aa(toString(bJ))), "Invalid LP address called me.") | |
303 | + | if ((bQ != bR)) | |
301 | 304 | then throw("Invalid asset passed.") | |
302 | - | else if (( | |
305 | + | else if ((bN != bP)) | |
303 | 306 | then throw("Invalid amount passed.") | |
304 | 307 | else { | |
305 | - | let | |
306 | - | $Tuple2([Burn( | |
308 | + | let bM = fromBase58String(bR) | |
309 | + | $Tuple2([Burn(bM, bN)], "success") | |
307 | 310 | } | |
308 | 311 | } | |
309 | 312 | ||
310 | 313 | ||
311 | 314 | ||
312 | - | @Callable( | |
313 | - | func modifyWeights ( | |
314 | - | let | |
315 | - | let | |
316 | - | let | |
317 | - | if (( | |
315 | + | @Callable(bj) | |
316 | + | func modifyWeights (bS,bT) = { | |
317 | + | let bU = ((5 * e) / 100) | |
318 | + | let bV = ((25 * e) / 1000) | |
319 | + | let bJ = bj.caller | |
320 | + | if ((bJ != this)) | |
318 | 321 | then throw("permissions denied") | |
319 | 322 | else { | |
320 | - | let aq = split(aa(A()), h) | |
321 | - | let bU = as(aq) | |
322 | - | let bV = at(aq) | |
323 | - | let bW = H(bQ) | |
324 | - | let bX = H(bR) | |
325 | - | let bY = H(f) | |
326 | - | let bZ = (ad(bW) - bT) | |
327 | - | let ca = (ad(bX) - bT) | |
328 | - | if ((0 >= bZ)) | |
329 | - | then throw(("invalid btcWeightNew: " + toString(bZ))) | |
330 | - | else if ((0 >= ca)) | |
331 | - | then throw(("invalid ethWeightNew: " + toString(ca))) | |
323 | + | let as = split(ac(A()), h) | |
324 | + | let bW = au(as) | |
325 | + | let bX = av(as) | |
326 | + | let bY = H(bS) | |
327 | + | let bZ = H(bT) | |
328 | + | let ca = H(f) | |
329 | + | let cb = af(bY) | |
330 | + | let cc = af(bZ) | |
331 | + | let cd = (cb - bV) | |
332 | + | let ce = (cc - bV) | |
333 | + | if ((0 >= cd)) | |
334 | + | then throw(("invalid btcWeightNew: " + toString(cd))) | |
335 | + | else if ((0 >= ce)) | |
336 | + | then throw(("invalid ethWeightNew: " + toString(ce))) | |
332 | 337 | else { | |
333 | - | let | |
334 | - | let | |
335 | - | let | |
336 | - | if (( | |
338 | + | let cf = ac(aa(bS)) | |
339 | + | let cg = ac(aa(bT)) | |
340 | + | let ch = invoke(bW, "onModifyWeight", [cf, bS], nil) | |
341 | + | if ((ch == ch)) | |
337 | 342 | then { | |
338 | - | let | |
339 | - | if (( | |
343 | + | let ci = invoke(bW, "onModifyWeight", [cg, bT], nil) | |
344 | + | if ((ci == ci)) | |
340 | 345 | then { | |
341 | - | let | |
342 | - | if (( | |
343 | - | then [IntegerEntry( | |
346 | + | let cj = invoke(bX, "onEmissionForGwxStart", nil, nil) | |
347 | + | if ((cj == cj)) | |
348 | + | then [IntegerEntry(bY, cd), IntegerEntry(bZ, ce), IntegerEntry(ca, bU), IntegerEntry(J(bS, 0), cb), IntegerEntry(J(bT, 0), cc)] | |
344 | 349 | else throw("Strict value is not equal to itself.") | |
345 | 350 | } | |
346 | 351 | else throw("Strict value is not equal to itself.") | |
347 | 352 | } | |
348 | 353 | else throw("Strict value is not equal to itself.") | |
349 | 354 | } | |
350 | 355 | } | |
351 | 356 | } | |
352 | 357 | ||
353 | 358 | ||
354 | - | @Verifier( | |
355 | - | func | |
359 | + | @Verifier(ck) | |
360 | + | func cl () = sigVerify(ck.bodyBytes, ck.proofs[0], ck.senderPublicKey) | |
356 | 361 |
github/deemru/w8io/026f985 131.55 ms ◑