tx · FPMLZ8iV3ZL6aewP5GiNV1egWBvmBWWrno9SS3WDru46

3NAefciWv6f9fWvEXdGgpHfanJFG8HqfjuT:  -0.03100000 Waves

2022.11.24 17:14 [2331285] smart account 3NAefciWv6f9fWvEXdGgpHfanJFG8HqfjuT > SELF 0.00000000 Waves

{ "type": 13, "id": "FPMLZ8iV3ZL6aewP5GiNV1egWBvmBWWrno9SS3WDru46", "fee": 3100000, "feeAssetId": null, "timestamp": 1669299338994, "version": 1, "sender": "3NAefciWv6f9fWvEXdGgpHfanJFG8HqfjuT", "senderPublicKey": "D1BL65meykxFZTCuq7jq9HSGLLnWvQamQPUNrguW5w39", "proofs": [ "5PdrmAz3RAeEBSiaHvqH2ADXPbCAtmUfcJNCGhAtWhHxsFK5QdetJ2C2YSDTqrQWzUxVqF8Aj4x6mf5KooWYBwdm" ], "script": "base64:BgKjIggCEgMKAQgSAwoBCBIAEgQKAgEEEgQKAgEEEgMKAQESABIECgIIARIAEgQKAggBEgQKAggBEgQKAgEBEgMKAQESBQoDAQEBEgUKAwEIARIECgIBCBIECgIBCBIECgIICBIECgIICBIECgIIARIAEgMKAQgSBQoDAQEBEgQKAggBEgQKAgEBEgQKAggIEgsKCQgBAQIBAggEBBIGCgQICAEIEgAiBnNjYWxlOCIMc2NhbGU4QmlnSW50IgdzY2FsZTE4Igp6ZXJvQmlnSW50IgRiaWcwIgRiaWcxIgRiaWcyIgpzbGlwcGFnZTREIgt3YXZlc1N0cmluZyIFQW11bHQiBURjb252IgNTRVAiBUVNUFRZIgpQb29sQWN0aXZlIgpQb29sUHV0RGlzIg5Qb29sTWF0Y2hlckRpcyIMUG9vbFNodXRkb3duIg5pZHhQb29sQWRkcmVzcyIJaWR4UG9vbFN0IglpZHhMUEFzSWQiCWlkeEFtQXNJZCIJaWR4UHJBc0lkIgtpZHhBbXRBc0RjbSINaWR4UHJpY2VBc0RjbSILaWR4SUFtdEFzSWQiDWlkeElQcmljZUFzSWQiD2lkeEZhY3RTdGFrQ250ciISaWR4RmFjdG9yeVJlc3RDbnRyIhBpZHhGYWN0U2xpcHBDbnRyIhFpZHhGYWN0R3d4UmV3Q250ciIKZmVlRGVmYXVsdCICdDEiB29yaWdWYWwiDW9yaWdTY2FsZU11bHQiAmYxIgN2YWwiD3Jlc3VsdFNjYWxlTXVsdCICdHMiA2FtdCIIcmVzU2NhbGUiCGN1clNjYWxlIgNhYnMiCWFic0JpZ0ludCICZmMiA21wayIEcG1wayICcGwiAnBoIgFoIgF0IgNwYXUiAnVhIgR0eElkIgNnYXUiAmFhIgJwYSIDYW1wIgNhZGEiBmtleUZlZSIDZmVlIgRmY2ZnIgRtdHBrIgJwYyIGaUFtdEFzIgVpUHJBcyIDbWJhIgViQVN0ciIDYXBzIhxrZXlBbGxvd2VkTHBTdGFibGVTY3JpcHRIYXNoIhZrZXlGZWVDb2xsZWN0b3JBZGRyZXNzIgN0b2UiA29yViIGc2VuZHJWIgZtYXRjaFYiA3N0ciIHJG1hdGNoMCIGdmFsU3RyIgRzdHJmIgRhZGRyIgNrZXkiBGludGYiCHRocm93RXJyIgNtc2ciA2ZjYSIBQSIDaWdzIgJtcCITZmVlQ29sbGVjdG9yQWRkcmVzcyIDZ3BjIgVhbXRBcyIHcHJpY2VBcyIIaVByaWNlQXMiDHBhcnNlQXNzZXRJZCIFaW5wdXQiD2Fzc2V0SWRUb1N0cmluZyIPcGFyc2VQb29sQ29uZmlnIgpwb29sQ29uZmlnIhBwb29sQ29uZmlnUGFyc2VkIgskdDA2ODMwNzAxNiIOY2ZnUG9vbEFkZHJlc3MiDWNmZ1Bvb2xTdGF0dXMiDGNmZ0xwQXNzZXRJZCIQY2ZnQW1vdW50QXNzZXRJZCIPY2ZnUHJpY2VBc3NldElkIhZjZmdBbW91bnRBc3NldERlY2ltYWxzIhVjZmdQcmljZUFzc2V0RGVjaW1hbHMiA2dmYyINZmFjdG9yeUNvbmZpZyIPc3Rha2luZ0NvbnRyYWN0Ig9zbGlwYWdlQ29udHJhY3QiC2d3eENvbnRyYWN0IgxyZXN0Q29udHJhY3QiEWRhdGFQdXRBY3Rpb25JbmZvIg1pbkFtdEFzc2V0QW10Ig9pblByaWNlQXNzZXRBbXQiCG91dExwQW10IgVwcmljZSIKc2xpcEJ5VXNlciIMc2xpcHBhZ2VSZWFsIgh0eEhlaWdodCILdHhUaW1lc3RhbXAiDHNsaXBhZ2VBbUFtdCIMc2xpcGFnZVByQW10IhFkYXRhR2V0QWN0aW9uSW5mbyIOb3V0QW10QXNzZXRBbXQiEG91dFByaWNlQXNzZXRBbXQiB2luTHBBbXQiDWdldEFjY0JhbGFuY2UiB2Fzc2V0SWQiBGNwYmkiCHByQW10WDE4IghhbUFtdFgxOCIDdmFkIgJBMSICQTIiCHNsaXBwYWdlIgRkaWZmIgRwYXNzIgJ2ZCICRDEiAkQwIgRzbHBnIgRmYWlsIgNwY3AiCmFtQXNzZXREY20iCnByQXNzZXREY20iBWFtQW10IgVwckFtdCILYW10QXNBbXRYMTgiCnByQXNBbXRYMTgiCmNhbGNQcmljZXMiBWxwQW10IgNjZmciCGFtdEFzRGNtIgdwckFzRGNtIghwcmljZVgxOCIIbHBBbXRYMTgiDWxwUHJJbkFtQXNYMTgiDWxwUHJJblByQXNYMTgiD2NhbGN1bGF0ZVByaWNlcyIBcCIHdGFrZUZlZSIGYW1vdW50IglmZWVBbW91bnQiA2VnbyIGdHhJZDU4IgpwbXRBc3NldElkIghwbXRMcEFtdCILdXNlckFkZHJlc3MiBGxwSWQiBGFtSWQiBHBySWQiBWFtRGNtIgVwckRjbSIDc3RzIgdscEVtaXNzIglhbUJhbGFuY2UiDGFtQmFsYW5jZVgxOCIJcHJCYWxhbmNlIgxwckJhbGFuY2VYMTgiC2N1clByaWNlWDE4IghjdXJQcmljZSILcG10THBBbXRYMTgiCmxwRW1pc3NYMTgiC291dEFtQW10WDE4IgtvdXRQckFtdFgxOCIIb3V0QW1BbXQiCG91dFByQW10IgVzdGF0ZSIDZXBvIgdpbkFtQW10IgZpbkFtSWQiB2luUHJBbXQiBmluUHJJZCIGaXNFdmFsIgZlbWl0THAiCmlzT25lQXNzZXQiEHZhbGlkYXRlU2xpcHBhZ2UiBnBtdEFtdCIFcG10SWQiB2FtSWRTdHIiB3BySWRTdHIiCWluQW1JZFN0ciIJaW5QcklkU3RyIgZhbXREY20iCHByaWNlRGNtIgRscEVtIg9pbkFtQXNzZXRBbXRYMTgiD2luUHJBc3NldEFtdFgxOCIMdXNlclByaWNlWDE4IgFyIgtzbGlwcGFnZVgxOCIPc2xpcHBhZ2VSZWFsWDE4Ig1scEVtaXNzaW9uWDE4IgpwclZpYUFtWDE4IgphbVZpYVByWDE4IgxleHBlY3RlZEFtdHMiEWV4cEFtdEFzc2V0QW10WDE4IhNleHBQcmljZUFzc2V0QW10WDE4IgljYWxjTHBBbXQiDmNhbGNBbUFzc2V0UG10Ig5jYWxjUHJBc3NldFBtdCIMc2xpcHBhZ2VDYWxjIgllbWl0THBBbXQiBmFtRGlmZiIGcHJEaWZmIg0kdDAxNzQ0NzE3NzkyIgp3cml0ZUFtQW10Igp3cml0ZVByQW10Igtjb21tb25TdGF0ZSIDbW9hIgVvcmRlciIHYW10QXNJZCIGcHJBc0lkIg9hY2NBbXRBc0JhbGFuY2UiDmFjY1ByQXNCYWxhbmNlIgpvckFtdEFzc2V0IgpvckFtdEFzU3RyIglvclByQXNzZXQiCW9yUHJBc1N0ciIKb3JkZXJQcmljZSIOY2FzdE9yZGVyUHJpY2UiEWlzT3JkZXJQcmljZVZhbGlkIgJjZyIBaSIDcG10IgJjcCIGY2FsbGVyIgdhbUFzUG10IgdwckFzUG10IgRnZXREIgJ4cCIBbiIDeHAwIgN4cDEiCmFQcmVjaXNpb24iAWEiAXMiA2FubiILeHAwX3hwMV9uX24iEGFubl9zX2FQcmVjaXNpb24iDmFubl9hUHJlY2lzaW9uIgJuMSIEY2FsYyIDYWNjIgNjdXIiDSR0MDIyMzQ0MjIzNjQiAWQiBWZvdW5kIgJkcCIFZE5leHQiBWREaWZmIgNhcnIiDSR0MDIyNzg1MjI4MzIiAiRsIgIkcyIFJGFjYzAiBSRmMF8xIgIkYSICJGkiBSRmMF8yIgVnZXRZRCIBRCIBeCIBYyIBYiINJHQwMjMzMzIyMzM1MiIBeSIFeU5leHQiBXlEaWZmIg0kdDAyMzY1OTIzNzA2Ig1jYWxjUHV0T25lVGtuIglwbXRBbXRSYXciC3dpdGhUYWtlRmVlIg9scEFzc2V0RW1pc3Npb24iDWNoZWNoRW1pc3Npb24iDSR0MDI0NDg5MjQ5NTEiDGFtQmFsYW5jZU9sZCIMcHJCYWxhbmNlT2xkIg0kdDAyNDk1NzI1MTMzIgthbUFtb3VudFJhdyILcHJBbW91bnRSYXciDSR0MDI1MTM3MjUzNzYiCGFtQW1vdW50IghwckFtb3VudCIMYW1CYWxhbmNlTmV3IgxwckJhbGFuY2VOZXciBmNoZWNrRCIIbHBBbW91bnQiDnBvb2xQcm9wb3J0aW9uIg9hbW91bnRBc3NldFBhcnQiDnByaWNlQXNzZXRQYXJ0IglscEFtdEJvdGgiBWJvbnVzIhNnZXRPbmVUa25WMkludGVybmFsIgpvdXRBc3NldElkIgxtaW5PdXRBbW91bnQiCHBheW1lbnRzIgxvcmlnaW5DYWxsZXIiDXRyYW5zYWN0aW9uSWQiCmFtRGVjaW1hbHMiCnByRGVjaW1hbHMiCnBvb2xTdGF0dXMiDSR0MDI3Mzc4Mjc0ODYiAUAiCHRvdGFsR2V0Igt0b3RhbEFtb3VudCINJHQwMjc2NzYyNzk4MyIFb3V0QW0iBW91dFByIghjdXJQclgxOCIFY3VyUHIiEW91dEFzc2V0SWRPcldhdmVzIhBzZW5kRmVlVG9NYXRjaGVyIgRidXJuIgFtIgJwbSICcGQiCWlzTWFuYWdlciICcGsiAm1tIhdwZW5kaW5nTWFuYWdlclB1YmxpY0tleSICY20iA2hwbSIDY3BtIgRzbGlwIglhdXRvU3Rha2UiB2ZhY3RDZmciC3N0YWtpbmdDbnRyIghzbGlwQ250ciIBZSIJbHBBc3NldElkIgJlbCIGbGVnYWN5IgJzYSICc3AiCGxwVHJuc2ZyIgJzcyIgaXNQb29sT25lVG9rZW5PcGVyYXRpb25zRGlzYWJsZWQiDWlzUHV0RGlzYWJsZWQiBmNoZWNrcyINJHQwMzMzNDUzMzUwMCIHZXN0aW1MUCIHbWF4U2xwZyIGZXN0UHV0IglvdXRBbXRBbXQiDWlzR2V0RGlzYWJsZWQiDSR0MDM2MTIyMzYyNzciDWxwQXNzZXRBbW91bnQiCmxwRW1pc3Npb24iBWluZGV4IgRuZXdZIgJkeSILdG90YWxHZXRSYXciDSR0MDM3MTE4MzcxNjciDSR0MDM3NTEyMzc2MjciDnN1bU9mR2V0QXNzZXRzIhJub0xlc3NUaGVuQW10QXNzZXQiFG5vTGVzc1RoZW5QcmljZUFzc2V0IhRidXJuTFBBc3NldE9uRmFjdG9yeSINY2hlY2tQYXltZW50cyIKZmFjdG9yeUNmZyIHc3Rha2luZyIKdW5zdGFrZUludiIBdiIFYnVybkEiDXVuc3Rha2VBbW91bnQiFW5vTGVzc1RoZW5BbW91bnRBc3NldCIDcmVzIgxjaGVja0Ftb3VudHMiDSR0MDQxNDY1NDE2NTMiEHBheW1lbnRBbW91bnRSYXciDnBheW1lbnRBc3NldElkIg0kdDA0MTkxMjQyMDE1Ig0kdDA0MjI5NDQyMzk4IghhbXRBc1N0ciIHcHJBc1N0ciIBayICcHIiDHJlc1NjYWxlTXVsdCIHdXNyQWRkciIHcG10QXNJZCICdHgiBnZlcmlmeSIPdGFyZ2V0UHVibGljS2V5IgptYXRjaGVyUHViIgpvcmRlclZhbGlkIgtzZW5kZXJWYWxpZCIMbWF0Y2hlclZhbGlkIgduZXdIYXNoIgthbGxvd2VkSGFzaCILY3VycmVudEhhc2htAAFhAIDC1y8AAWIJALYCAQCAwtcvAAFjCQC2AgEAgICQu7rWrfANAAFkCQC2AgEAAAABZQkAtgIBAAAAAWYJALYCAQABAAFnCQC2AgEAAgABaAkAtgIBCQBlAgUBYQkAaQIJAGgCBQFhAAEF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BQJhUAUEdW5pdAUBaQkA2AQBCQEFdmFsdWUBBQJhUAECYVIBAmFTCQCZCgcJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAJEDAgUCYVMFAXIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJhUwUBcwkA2QQBCQCRAwIFAmFTBQF0CQECYU8BCQCRAwIFAmFTBQF1CQECYU8BCQCRAwIFAmFTBQF2CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYVMFAXcJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJhUwUBeAACYVQJAQJhUgEJAQJhSwAAAmFVBQJhVAACYVYIBQJhVQJfMQACYVcIBQJhVQJfMgACYVgIBQJhVQJfMwACYVkIBQJhVQJfNAACYVoIBQJhVQJfNQACYmEIBQJhVQJfNgACYmIIBQJhVQJfNwECYmMACQC1CQIJAQJhegIFAmFGCQECYWkABQFsAAJiZAkBAmJjAAACYmUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFAmJkBQFBAiBJbnZhbGlkIHN0YWtpbmcgY29udHJhY3QgYWRkcmVzcwACYmYJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFAmJkBQFDAiBJbnZhbGlkIHNsaXBhZ2UgY29udHJhY3QgYWRkcmVzcwACYmcJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFAmJkBQFEAhxJbnZhbGlkIGd3eCBjb250cmFjdCBhZGRyZXNzAAJiaAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUCYmQFAUICHEludmFsaWQgZ3d4IGNvbnRyYWN0IGFkZHJlc3MBAmJpCgJiagJiawJibAJibQJibgJibwJicAJicQJicgJicwkAuQkCCQDMCAICFCVkJWQlZCVkJWQlZCVkJWQlZCVkCQDMCAIJAKQDAQUCYmoJAMwIAgkApAMBBQJiawkAzAgCCQCkAwEFAmJsCQDMCAIJAKQDAQUCYm0JAMwIAgkApAMBBQJibgkAzAgCCQCkAwEFAmJvCQDMCAIJAKQDAQUCYnAJAMwIAgkApAMBBQJicQkAzAgCCQCkAwEFAmJyCQDMCAIJAKQDAQUCYnMFA25pbAUBbAECYnQGAmJ1AmJ2AmJ3AmJtAmJwAmJxCQC5CQIJAMwIAgIMJWQlZCVkJWQlZCVkCQDMCAIJAKQDAQUCYnUJAMwIAgkApAMBBQJidgkAzAgCCQCkAwEFAmJ3CQDMCAIJAKQDAQUCYm0JAMwIAgkApAMBBQJicAkAzAgCCQCkAwEFAmJxBQNuaWwFAWwBAmJ4AQJieQMJAAACBQJieQIFV0FWRVMICQDvBwEFBHRoaXMJYXZhaWxhYmxlCQDwBwIFBHRoaXMJANkEAQUCYnkBAmJ6AgJiQQJiQgkAvAIDBQJiQQUBYwUCYkIBAmJDAwJiRAJiRQJiRgQCYkcJALwCAwkAuAICBQJiRAUCYkUFAWIFAmJFBAJiSAkAvwICCQC4AgIFAmJGCQEBUAEFAmJHBQFkAwkBASEBBQJiSAkAAgEJAKwCAgIKQmlnIHNscGc6IAkApgMBBQJiRwkAlAoCBQJiSAkAmQMBCQDMCAIFAmJECQDMCAIFAmJFBQNuaWwBAmJJAwJiSgJiSwJiTAQCYkcJALwCAwUCYksFAWIFAmJKBAJiTQkAvwICBQJiTAUCYkcDAwUCYk0GCQC/AgIFAmJLBQJiSgkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKYDAQUCYksCASAJAKYDAQUCYkoCASAJAKYDAQUCYkcCASAJAKYDAQUCYkwFAmJNAQJiTgQCYk8CYlACYlECYlIEAmJTCQEBRgIFAmJRBQJiTwQCYlQJAQFGAgUCYlIFAmJQCQECYnoCBQJiVAUCYlMBAmJVAwJiUQJiUgJiVgQCYlcJAQJhSwAEAmJYCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYlcFAXcEAmJZCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYlcFAXgEAmJaCQECYk4EBQJiWAUCYlkFAmJRBQJiUgQCYkIJAQFGAgUCYlEFAmJYBAJiQQkBAUYCBQJiUgUCYlkEAmNhCQEBRgIFAmJWBQFhBAJjYgkBAmJ6AgUCYkIFAmNhBAJjYwkBAmJ6AgUCYkEFAmNhCQDMCAIFAmJaCQDMCAIFAmNiCQDMCAIFAmNjBQNuaWwBAmNkAwJiUQJiUgJiVgQCY2UJAQJiVQMFAmJRBQJiUgUCYlYJAMwIAgkBAUkCCQCRAwIFAmNlAAAFAWEJAMwIAgkBAUkCCQCRAwIFAmNlAAEFAWEJAMwIAgkBAUkCCQCRAwIFAmNlAAIFAWEFA25pbAECY2YBAmNnBAJjaAkAawMFAmNnBQJhaAUBYQkAlAoCCQBlAgUCY2cFAmNoBQJjaAECY2kEAmNqAmNrAmNsAmNtBAJiVwkBAmFLAAQCY24JAJEDAgUCYlcFAXQEAmNvCQCRAwIFAmJXBQF1BAJjcAkAkQMCBQJiVwUBdgQCY3EJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiVwUBdwQCY3IJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiVwUBeAQCY3MJAJEDAgUCYlcFAXMEAmN0CAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEJANkEAQUCY24CC1dyb25nIExQIGlkCHF1YW50aXR5AwkBAiE9AgUCY24FAmNrCQACAQIPV3JvbmcgcG10IGFzc2V0BAJjdQkBAmJ4AQUCY28EAmN2CQEBRgIFAmN1BQJjcQQCY3cJAQJieAEFAmNwBAJjeAkBAUYCBQJjdwUCY3IEAmN5CQECYnoCBQJjeAUCY3YEAmN6CQEBSQIFAmN5BQFhBAJjQQkBAUYCBQJjbAUBYQQCY0IJAQFGAgUCY3QFAWEEAmNDCQC8AgMFAmN2BQJjQQUCY0IEAmNECQC8AgMFAmN4BQJjQQUCY0IEAmNFCQEBSQIFAmNDBQJjcQQCY0YJAQFJAgUCY0QFAmNyBAJjRwMJAAACBQJjagIABQNuaWwJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCY20FAmNFAwkAAAIFAmNvAgVXQVZFUwUEdW5pdAkA2QQBBQJjbwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQJjbQUCY0YDCQAAAgUCY3ACBVdBVkVTBQR1bml0CQDZBAEFAmNwCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhYgIJAKUIAQUCY20FAmNqCQECYnQGBQJjRQUCY0YFAmNsBQJjegUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVUABQJjegkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVYCBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQJjegUDbmlsCQCcCgoFAmNFBQJjRgUCY28FAmNwBQJjdQUCY3cFAmN0BQJjeQUCY3MFAmNHAQJjSA0CY2oCYkYCY0kCY0oCY0sCY0wCY20CY00CY04CY08CY1ACY1ECY1IEAmJXCQECYUsABAJjbgkA2QQBCQCRAwIFAmJXBQF0BAJjUwkAkQMCBQJiVwUBdQQCY1QJAJEDAgUCYlcFAXYEAmNVCQCRAwIFAmJXBQF5BAJjVgkAkQMCBQJiVwUBegQCY1cJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiVwUBdwQCY1gJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiVwUBeAQCY3MJAJEDAgUCYlcFAXMEAmNZCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmNuAghXciBscCBhcwhxdWFudGl0eQQCY3UDBQJjTQkBAmJ4AQUCY1MDAwUCY08JAAACBQJjUgUCY1MHCQBlAgkBAmJ4AQUCY1MFAmNRAwUCY08JAQJieAEFAmNTCQBlAgkBAmJ4AQUCY1MFAmNJBAJjdwMFAmNNCQECYngBBQJjVAMDBQJjTwkAAAIFAmNSBQJjVAcJAGUCCQECYngBBQJjVAUCY1EDBQJjTwkBAmJ4AQUCY1QJAGUCCQECYngBBQJjVAUCY0sEAmNaCQEBRgIFAmNJBQJjVwQCZGEJAQFGAgUCY0sFAmNYBAJkYgkBAmJ6AgUCZGEFAmNaBAJjdgkBAUYCBQJjdQUCY1cEAmN4CQEBRgIFAmN3BQJjWAQCZGMDCQAAAgUCY1kAAAQCY3kFAWQEAmRkBQFkBAJjYQkAdgYJALkCAgUCY1oFAmRhAAAJALYCAQAFAAEAAAUERE9XTgkAlwoFCQEBSQIFAmNhBQFhCQEBSQIFAmNaBQJjVwkBAUkCBQJkYQUCY1gJAQJiegIJALcCAgUCY3gFAmRhCQC3AgIFAmN2BQJjWgUCZGQEAmN5CQECYnoCBQJjeAUCY3YEAmRlCQC8AgMJAQFQAQkAuAICBQJjeQUCZGIFAWMFAmN5BAJkZAkBAUYCBQJiRgUBYQMDAwUCY1AJAQIhPQIFAmN5BQFkBwkAvwICBQJkZQUCZGQHCQACAQkArAICCQCsAgIJAKwCAgIPUHJpY2Ugc2xpcHBhZ2UgCQCmAwEFAmRlAgMgPiAJAKYDAQUCZGQEAmRmCQEBRgIFAmNZBQFhBAJkZwkAvAIDBQJjWgUCY3kFAWMEAmRoCQC8AgMFAmRhBQFjBQJjeQQCZGkDCQC/AgIFAmRnBQJkYQkAlAoCBQJkaAUCZGEJAJQKAgUCY1oFAmRnBAJkaggFAmRpAl8xBAJkawgFAmRpAl8yBAJjYQkAvAIDBQJkZgUCZGsFAmN4CQCXCgUJAQFJAgUCY2EFAWEJAQFJAgUCZGoFAmNXCQEBSQIFAmRrBQJjWAUCY3kFAmRkBAJkbAgFAmRjAl8xBAJkbQgFAmRjAl8yBAJkbggFAmRjAl8zBAJjegkBAUkCCAUCZGMCXzQFAWEEAmRvCQEBSQIIBQJkYwJfNQUBYQMJAGcCAAAFAmRsCQACAQIHTFAgPD0gMAQCZHADCQEBIQEFAmNOAAAFAmRsBAJkcQkAZQIFAmNJBQJkbQQCZHIJAGUCBQJjSwUCZG4EAmRzAwMFAmNPCQAAAgUCY1IFAmNTBwkAlAoCBQJjUQAAAwMFAmNPCQAAAgUCY1IFAmNUBwkAlAoCAAAFAmNRCQCUCgIFAmRtBQJkbgQCZHQIBQJkcwJfMQQCZHUIBQJkcwJfMgQCZHYJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFVAAUCY3oJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFWAgUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCY3oJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAVkCBQJjbQUCY2oJAQJiaQoFAmR0BQJkdQUCZHAFAmN6BQJiRgUCZG8FBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAFAmRxBQJkcgUDbmlsCQCfCg0FAmRsBQJkcAUCY3oFAmN1BQJjdwUCY1kFAmNuBQJjcwUCZHYFAmRxBQJkcgUCY0oFAmNMAQJkdwECZHgEAmJXCQECYUsABAJkeQkAkQMCBQJiVwUBdQQCZHoJAJEDAgUCYlcFAXYEAmNzCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYlcFAXMEAmJYCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYlcFAXcEAmJZCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYlcFAXgEAmRBCQECYngBBQJkeQQCZEIJAQJieAEFAmR6BAJjeQMJAAACCAUCZHgJb3JkZXJUeXBlBQNCdXkJAQJiTgQFAmJYBQJiWQkAZAIFAmRBCAUCZHgGYW1vdW50BQJkQgkBAmJOBAUCYlgFAmJZCQBlAgUCZEEIBQJkeAZhbW91bnQFAmRCBAJjegkBAUkCBQJjeQUBYQMDAwkBAmFIAAYJAAACBQJjcwUBcAYJAAACBQJjcwUBcQkAAgECDUFkbWluIGJsb2NrZWQEAmRDCAgFAmR4CWFzc2V0UGFpcgthbW91bnRBc3NldAQCZEQDCQAAAgUCZEMFBHVuaXQCBVdBVkVTCQDYBAEJAQV2YWx1ZQEFAmRDBAJkRQgIBQJkeAlhc3NldFBhaXIKcHJpY2VBc3NldAQCZEYDCQAAAgUCZEUFBHVuaXQCBVdBVkVTCQDYBAEJAQV2YWx1ZQEFAmRFAwMJAQIhPQIFAmREBQJkeQYJAQIhPQIFAmRGBQJkegkAAgECCVdyIGFzc2V0cwQCZEcIBQJkeAVwcmljZQQCY1gJAGsDBQFhBQJiWQUCYlgEAmRICQEBTAMFAmRHBQFhBQJjWAQCZEkDCQAAAggFAmR4CW9yZGVyVHlwZQUDQnV5CQBnAgUCY3oFAmRICQBnAgUCZEgFAmN6BgECZEoBAmRLAwkBAiE9AgkAkAMBCAUCZEsIcGF5bWVudHMAAQkAAgECCjEgcG1udCBleHAEAmRMCQEFdmFsdWUBCQCRAwIIBQJkSwhwYXltZW50cwAABAJjawkBBXZhbHVlAQgFAmRMB2Fzc2V0SWQEAmNRCAUCZEwGYW1vdW50BAJkYwkBAmNpBAkA2AQBCAUCZEsNdHJhbnNhY3Rpb25JZAkA2AQBBQJjawUCY1EIBQJkSwZjYWxsZXIEAmNFCAUCZGMCXzEEAmNGCAUCZGMCXzIEAmNzCQENcGFyc2VJbnRWYWx1ZQEIBQJkYwJfOQQCY0cIBQJkYwNfMTADAwkBAmFIAAYJAAACBQJjcwUBcQkAAgEJAKwCAgIPQWRtaW4gYmxvY2tlZDogCQCkAwEFAmNzCQCXCgUFAmNFBQJjRgUCY1EFAmNrBQJjRwECZE0KAmROAmFhAmRPAmRQAmJGAmNOAmNPAmNQAmNRAmNSBAJkYwkBAmNIDQUCYWEFAmJGCAkBBXZhbHVlAQUCZE8GYW1vdW50CAkBBXZhbHVlAQUCZE8HYXNzZXRJZAgJAQV2YWx1ZQEFAmRQBmFtb3VudAgJAQV2YWx1ZQEFAmRQB2Fzc2V0SWQFAmROCQAAAgUCYWECAAUCY04FAmNPBQJjUAUCY1EFAmNSBAJjcwkBDXBhcnNlSW50VmFsdWUBCAUCZGMCXzgDAwMJAQJhSAAGCQAAAgUCY3MFAW8GCQAAAgUCY3MFAXEJAAIBCQCsAgICCEJsb2NrZWQ6CQCkAwEFAmNzBQJkYwECZFEBAmRSBAJkUwUBZwQCZFQJAJEDAgUCZFIAAAQCZFUJAJEDAgUCZFIAAQQCZFYJAKcDAQUBagQCZFcJALkCAgkApwMBBQJhRwUCZFYEAmRYCQC3AgIFAmRUBQJkVQMJAAACBQJkWAUBZQUBZQQCZFkJALkCAgUCZFcFAmRTBAJkWgkAuQICCQC5AgIJALkCAgUCZFQFAmRVBQJkUwUCZFMEAmVhCQC6AgIJALkCAgUCZFkFAmRYBQJkVgQCZWIJALgCAgUCZFkFAmRWBAJlYwkAtwICBQJkUwUBZgoBAmVkAgJlZQJlZgQCZWcFAmVlBAJlaAgFAmVnAl8xBAJlaQgFAmVnAl8yAwkBAiE9AgUCZWkFBHVuaXQFAmVlBAJlagkAugICCQC5AgIJALkCAgUCZWgFAmVoBQJlaAUCZFoEAmVrCQC6AgIJALkCAgkAtwICBQJlYQkAuQICBQJlagUCZFMFAmVoCQC3AgIJALoCAgkAuQICBQJlYgUCZWgFAmRWCQC5AgIFAmVjBQJlagQCZWwJAQFRAQkAuAICBQJlawkBBXZhbHVlAQUCZWgDCQDAAgIFAWYFAmVsCQCUCgIFAmVrBQJlZgkAlAoCBQJlawUEdW5pdAQCZW0JAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUJAMwIAgAGCQDMCAIABwkAzAgCAAgJAMwIAgAJCQDMCAIACgkAzAgCAAsJAMwIAgAMCQDMCAIADQkAzAgCAA4FA25pbAQCZW4KAAJlbwUCZW0KAAJlcAkAkAMBBQJlbwoAAmVxCQCUCgIFAmRYBQR1bml0CgECZXICAmVzAmV0AwkAZwIFAmV0BQJlcAUCZXMJAQJlZAIFAmVzCQCRAwIFAmVvBQJldAoBAmV1AgJlcwJldAMJAGcCBQJldAUCZXAFAmVzCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTUJAQJldQIJAQJlcgIJAQJlcgIJAQJlcgIJAQJlcgIJAQJlcgIJAQJlcgIJAQJlcgIJAQJlcgIJAQJlcgIJAQJlcgIJAQJlcgIJAQJlcgIJAQJlcgIJAQJlcgIJAQJlcgIFAmVxAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8EAmVoCAUCZW4CXzEEAmVpCAUCZW4CXzIDCQECIT0CBQJlaQUEdW5pdAUCZWgJAAIBCQCsAgICGUQgY2FsY3VsYXRpb24gZXJyb3IsIEQgPSAJAKYDAQUCZWgBAmV2AwJkUgJkSwJldwQCZFMFAWcEAmV4CQCRAwIFAmRSAwkAAAIFAmRLAAAAAQAABAJkVgkApwMBBQFqBAJkVwkAuQICCQCnAwEFAmFHBQJkVgQCZFgFAmV4BAJkWQkAuQICBQJkVwUCZFMEAmV5CQC6AgIJALkCAgkAuQICCQC6AgIJALkCAgUCZXcFAmV3CQC5AgIFAmV4BQJkUwUCZXcFAmRWCQC5AgIFAmRZBQJkUwQCZXoJALgCAgkAtwICBQJkWAkAugICCQC5AgIFAmV3BQJkVgUCZFkFAmV3CgECZWQCAmVlAmVmBAJlQQUCZWUEAmVCCAUCZUECXzEEAmVpCAUCZUECXzIDCQECIT0CBQJlaQUEdW5pdAUCZWUEAmVDCQC6AgIJALcCAgkAuQICBQJlQgUCZUIFAmV5CQC3AgIJALkCAgUBZwUCZUIFAmV6BAJlRAkBAVEBCQC4AgIFAmVDCQEFdmFsdWUBBQJlQgMJAMACAgUBZgUCZUQJAJQKAgUCZUMFAmVmCQCUCgIFAmVDBQR1bml0BAJlbQkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQkAzAgCAAYJAMwIAgAHCQDMCAIACAkAzAgCAAkJAMwIAgAKCQDMCAIACwkAzAgCAAwJAMwIAgANCQDMCAIADgUDbmlsBAJlRQoAAmVvBQJlbQoAAmVwCQCQAwEFAmVvCgACZXEJAJQKAgUCZXcFBHVuaXQKAQJlcgICZXMCZXQDCQBnAgUCZXQFAmVwBQJlcwkBAmVkAgUCZXMJAJEDAgUCZW8FAmV0CgECZXUCAmVzAmV0AwkAZwIFAmV0BQJlcAUCZXMJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxNQkBAmV1AgkBAmVyAgkBAmVyAgkBAmVyAgkBAmVyAgkBAmVyAgkBAmVyAgkBAmVyAgkBAmVyAgkBAmVyAgkBAmVyAgkBAmVyAgkBAmVyAgkBAmVyAgkBAmVyAgkBAmVyAgUCZXEAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwQCZUIIBQJlRQJfMQQCZWkIBQJlRQJfMgMJAQIhPQIFAmVpBQR1bml0BQJlQgkAAgEJAKwCAgIZWSBjYWxjdWxhdGlvbiBlcnJvciwgWSA9IAkApgMBBQJlQgECZUYFAmVHAmNrAmNtAmFhAmVIBAJhUwkBAmFLAAQCY28JAJEDAgUCYVMFAXUEAmNwCQCRAwIFAmFTBQF2BAJjbgkAkQMCBQJhUwUBdAQCY1cJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJhUwUBdwQCY1gJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJhUwUBeAQCZUkJALYCAQgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBCQDZBAEFAmNuAhBpbnZhbGlkIGxwIGFzc2V0CHF1YW50aXR5BAJlSgMJAL8CAgUCZUkFAWUGCQACAQIiaW5pdGlhbCBkZXBvc2l0IHJlcXVpcmVzIGFsbCBjb2lucwMJAAACBQJlSgUCZUoEAmN1CQECYngBBQJjbwQCY3cJAQJieAEFAmNwBAJlSwMJAAACBQJhYQIACQCUCgIFAmN1BQJjdwMJAAACBQJjawUCY28DCQBmAgUCZUcFAmN1CQACAQIWaW52YWxpZCBwYXltZW50IGFtb3VudAkAlAoCCQBlAgUCY3UFAmVHBQJjdwMJAAACBQJjawUCY3ADCQBmAgUCZUcFAmN3CQACAQIWaW52YWxpZCBwYXltZW50IGFtb3VudAkAlAoCBQJjdQkAZQIFAmN3BQJlRwkAAgECEHdyb25nIHBtdEFzc2V0SWQEAmVMCAUCZUsCXzEEAmVNCAUCZUsCXzIEAmVOAwkAAAIFAmNrBQJjbwkAlAoCBQJlRwAAAwkAAAIFAmNrBQJjcAkAlAoCAAAFAmVHCQACAQIPaW52YWxpZCBwYXltZW50BAJlTwgFAmVOAl8xBAJlUAgFAmVOAl8yBAJlUQMFAmVICQCVCgMICQECY2YBBQJlTwJfMQgJAQJjZgEFAmVQAl8xCAkBAmNmAQUCZUcCXzIJAJUKAwUCZU8FAmVQAAAEAmVSCAUCZVECXzEEAmVTCAUCZVECXzIEAmNoCAUCZVECXzMEAmVUCQBkAgUCZUwFAmVSBAJlVQkAZAIFAmVNBQJlUwQCYksJAQJkUQEJAMwIAgkAtgIBBQJlTAkAzAgCCQC2AgEFAmVNBQNuaWwEAmJKCQECZFEBCQDMCAIJALYCAQUCZVQJAMwIAgkAtgIBBQJlVQUDbmlsBAJlVgMJAL8CAgUCYkoFAmJLBgkBBXRocm93AAMJAAACBQJlVgUCZVYEAmVXCQC8AgMFAmVJCQC4AgIFAmJKBQJiSwUCYksEAmN6CQEBSQIJAQJiegIJAQFGAgUCZVUFAmNYCQEBRgIFAmVUBQJjVwUBYQQCZHYJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFVAAUCY3oJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFWAgUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCY3oJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAVkCBQJjbQUCYWEJAQJiaQoFAmVPBQJlUAkAoAMBBQJlVwUCY3oAAAAABQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wAAAAAAUDbmlsBAJlWAkAawMFAmVNBQFhBQJlTAQCZVkJAGsDBQJlRwUBYQkAZAIFAmVYBQFhBAJlWgkAZQIFAmVHBQJlWQQCZmEJALwCAwUCZUkJALYCAQUCZVoJALYCAQUCZU0EAmZiCQCgAwEJALwCAwkAuAICBQJlVwUCZmEFAWIFAmZhCQCWCgQJAKADAQUCZVcFAmR2BQJjaAUCZmIJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAmZjBgJmZAJmZQJmZgJkTgJmZwJmaAQCYVMJAQJhSwAEAmNuCQCRAwIFAmFTBQF0BAJjbwkAkQMCBQJhUwUBdQQCY3AJAJEDAgUCYVMFAXYEAmZpCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYVMFAXcEAmZqCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYVMFAXgEAmZrCQCRAwIFAmFTBQFzBAJjbQMJAAACBQJkTgUCYmgFAmZnBQJkTgQCZEwJAQV2YWx1ZQEJAJEDAgUCZmYAAAQCY2sJAQV2YWx1ZQEIBQJkTAdhc3NldElkBAJjUQgFAmRMBmFtb3VudAQCY2oJANgEAQUCZmgDCQECIT0CBQJjbgkA2AQBBQJjawkAAgECCFdyb25nIExQBAJjdQkBAmJ4AQUCY28EAmN3CQECYngBBQJjcAQCZmwKAAJmbQkA/AcEBQR0aGlzAhNnZXRPbmVUa25WMlJFQURPTkxZCQDMCAIFAmZkCQDMCAIFAmNRBQNuaWwFA25pbAMJAAECBQJmbQIKKEludCwgSW50KQUCZm0JAAIBCQCsAgIJAAMBBQJmbQIfIGNvdWxkbid0IGJlIGNhc3QgdG8gKEludCwgSW50KQQCZm4IBQJmbAJfMQQCY2gIBQJmbAJfMgQCZm8DAwkAZgIFAmZlAAAJAGYCBQJmZQUCZm4HCQECYUQBCQC5CQIJAMwIAgIfYW1vdW50IHRvIHJlY2VpdmUgaXMgbGVzcyB0aGFuIAkAzAgCCQCkAwEFAmZlBQNuaWwCAAUCZm4EAmZwAwkAAAIFAmZkBQJjbwkAlgoEBQJmbwAACQBlAgkAZQIFAmN1BQJmbwUCY2gFAmN3AwkAAAIFAmZkBQJjcAkAlgoEAAAFAmZvBQJjdQkAZQIJAGUCBQJjdwUCZm8FAmNoCQACAQIUaW52YWxpZCBvdXQgYXNzZXQgaWQEAmZxCAUCZnACXzEEAmZyCAUCZnACXzIEAmVUCAUCZnACXzMEAmVVCAUCZnACXzQEAmZzCQECYnoCCQEBRgIFAmVVBQJmagkBAUYCBQJlVAUCZmkEAmZ0CQEBSQIFAmZzBQFhBAJmdQMJAAACBQJmZAIFV0FWRVMFBHVuaXQJANkEAQUCZmQEAmZ2AwkAZgIFAmNoAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCYUoFAmNoBQJmdQUDbmlsBQNuaWwEAmNHCQDOCAIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCY20FAmZvBQJmdQkAzAgCCQELU3RyaW5nRW50cnkCCQECYWICCQClCAEFAmNtBQJjagkBAmJ0BgUCZnEFAmZyBQJjUQUCZnQFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFVAAUCZnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFWAgUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCZnQFA25pbAUCZnYDCQAAAgUCY0cFAmNHBAJmdwkA/AcEBQJhRgIEYnVybgkAzAgCBQJjUQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJjawUCY1EFA25pbAMJAAACBQJmdwUCZncJAJQKAgUCY0cFAmZvCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJmeAAEAmF4CQCiCAEJAQFTAAMJAAECBQJheAIGU3RyaW5nBAJkWAUCYXgJANkEAQUCZFgDCQABAgUCYXgCBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgECZnkABAJheAkAoggBCQEBVAADCQABAgUCYXgCBlN0cmluZwQCZFgFAmF4CQDZBAEFAmRYAwkAAQIFAmF4AgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IAAmZ6CQACAQIRUGVybWlzc2lvbiBkZW5pZWQBAmZBAQJkSwQCYXgJAQJmeAADCQABAgUCYXgCCkJ5dGVWZWN0b3IEAmZCBQJheAkAAAIIBQJkSw9jYWxsZXJQdWJsaWNLZXkFAmZCAwkAAQIFAmF4AgRVbml0CQAAAggFAmRLBmNhbGxlcgUEdGhpcwkAAgECC01hdGNoIGVycm9yAQJmQwECZEsEAmF4CQECZngAAwkAAQIFAmF4AgpCeXRlVmVjdG9yBAJmQgUCYXgDCQAAAggFAmRLD2NhbGxlclB1YmxpY0tleQUCZkIGBQJmegMJAAECBQJheAIEVW5pdAMJAAACCAUCZEsGY2FsbGVyBQR0aGlzBgUCZnoJAAIBAgtNYXRjaCBlcnJvch0CZEsBC2NvbnN0cnVjdG9yAQFSBAJleQkBAmZDAQUCZEsDCQAAAgUCZXkFAmV5CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFSAAUBUgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRLAQpzZXRNYW5hZ2VyAQJmRAQCZXkJAQJmQwEFAmRLAwkAAAIFAmV5BQJleQQCZkUJANkEAQUCZkQDCQAAAgUCZkUFAmZFCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFUAAUCZkQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkSwEOY29uZmlybU1hbmFnZXIABAJjZQkBAmZ5AAQCZkYDCQEJaXNEZWZpbmVkAQUCY2UGCQACAQISTm8gcGVuZGluZyBtYW5hZ2VyAwkAAAIFAmZGBQJmRgQCZkcDCQAAAggFAmRLD2NhbGxlclB1YmxpY0tleQkBBXZhbHVlAQUCY2UGCQACAQIbWW91IGFyZSBub3QgcGVuZGluZyBtYW5hZ2VyAwkAAAIFAmZHBQJmRwkAzAgCCQELU3RyaW5nRW50cnkCCQEBUwAJANgEAQkBBXZhbHVlAQUCY2UJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAVQABQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZEsBA3B1dAICZkgCZkkEAmZKCQECYmMABAJmSwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUCZkoFAUECCldyIHN0IGFkZHIEAmZMCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQJmSgUBQwIKV3Igc2wgYWRkcgMJAGYCAAAFAmZICQACAQIOV3Jvbmcgc2xpcHBhZ2UDCQECIT0CCQCQAwEIBQJkSwhwYXltZW50cwACCQACAQIMMiBwbW50cyBleHBkBAJmTQkBAmRNCgkApQgBCAUCZEsGY2FsbGVyCQDYBAEIBQJkSw10cmFuc2FjdGlvbklkCQEPQXR0YWNoZWRQYXltZW50AggJAQV2YWx1ZQEJAJEDAggFAmRLCHBheW1lbnRzAAAHYXNzZXRJZAgJAQV2YWx1ZQEJAJEDAggFAmRLCHBheW1lbnRzAAAGYW1vdW50CQCRAwIIBQJkSwhwYXltZW50cwABBQJmSAYHBgAAAgAEAmRwCAUCZk0CXzIEAmZOCAUCZk0CXzcEAmNHCAUCZk0CXzkEAmRxCAUCZk0DXzEwBAJkcggFAmZNA18xMQQCY28IBQJmTQNfMTIEAmNwCAUCZk0DXzEzBAJkYwkA/AcEBQJhRgIEZW1pdAkAzAgCBQJkcAUDbmlsBQNuaWwDCQAAAgUCZGMFAmRjBAJmTwQCYXgFAmRjAwkAAQIFAmF4AgdBZGRyZXNzBAJmUAUCYXgJAPwHBAUCZlACBGVtaXQJAMwIAgUCZHAFA25pbAUDbmlsBQR1bml0AwkAAAIFAmZPBQJmTwQCZlEDCQBmAgUCZHEAAAkA/AcEBQJmTAIDcHV0BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmNvBQJkcQUDbmlsBQNuaWwDCQAAAgUCZlEFAmZRBAJmUgMJAGYCBQJkcgAACQD8BwQFAmZMAgNwdXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCY3AFAmRyBQNuaWwFA25pbAMJAAACBQJmUgUCZlIEAmZTAwUCZkkEAmZUCQD8BwQFAmZLAgVzdGFrZQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJmTgUCZHAFA25pbAMJAAACBQJmVAUCZlQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUCZEsGY2FsbGVyBQJkcAUCZk4FA25pbAkAzggCBQJjRwUCZlMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZEsBC3B1dE9uZVRrblYyAgJmZQJmSQQCZlUKAAJmbQkA/AcEBQJhRgIoaXNQb29sT25lVG9rZW5PcGVyYXRpb25zRGlzYWJsZWRSRUFET05MWQkAzAgCCQClCAEFBHRoaXMFA25pbAUDbmlsAwkAAQIFAmZtAgdCb29sZWFuBQJmbQkAAgEJAKwCAgkAAwEFAmZtAhwgY291bGRuJ3QgYmUgY2FzdCB0byBCb29sZWFuBAJmVgMDAwkBAmFIAAYJAAACBQJhVwUBbwYJAAACBQJhVwUBcQYFAmZVBAJmVwkAzAgCAwMJAQEhAQUCZlYGCQECZkEBBQJkSwYJAQJhRAECIXB1dCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbgkAzAgCAwkAAAIJAJADAQgFAmRLCHBheW1lbnRzAAEGCQECYUQBAh5leGFjdGx5IDEgcGF5bWVudCBhcmUgZXhwZWN0ZWQFA25pbAMJAAACBQJmVwUCZlcEAmFTCQECYUsABAJjbwkAkQMCBQJhUwUBdQQCY3AJAJEDAgUCYVMFAXYEAmNuCQDZBAEJAJEDAgUCYVMFAXQEAmZpCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYVMFAXcEAmZqCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYVMFAXgEAmNtAwkAAAIIBQJkSwZjYWxsZXIFBHRoaXMIBQJkSwxvcmlnaW5DYWxsZXIIBQJkSwZjYWxsZXIEAmRMCQEFdmFsdWUBCQCRAwIIBQJkSwhwYXltZW50cwAABAJjawkA2AQBCQEFdmFsdWUBCAUCZEwHYXNzZXRJZAQCY1EIBQJkTAZhbW91bnQEAmZYCQECZUYFBQJjUQUCY2sJAKUIAQUCY20JANgEAQgFAmRLDXRyYW5zYWN0aW9uSWQGBAJmWQgFAmZYAl8xBAJjRwgFAmZYAl8yBAJjaAgFAmZYAl8zBAJkcAMDCQBmAgUCZmUAAAkAZgIFAmZlBQJmWQcJAQJhRAEJALkJAgkAzAgCAh9hbW91bnQgdG8gcmVjZWl2ZSBpcyBsZXNzIHRoYW4gCQDMCAIJAKQDAQUCZmUFA25pbAIABQJmWQQCZk0JAPwHBAUCYUYCBGVtaXQJAMwIAgUCZHAFA25pbAUDbmlsAwkAAAIFAmZNBQJmTQQCZk8EAmF4BQJmTQMJAAECBQJheAIHQWRkcmVzcwQCZlAFAmF4CQD8BwQFAmZQAgRlbWl0CQDMCAIFAmRwBQNuaWwFA25pbAUEdW5pdAMJAAACBQJmTwUCZk8EAmZTAwUCZkkEAmZUCQD8BwQFAmJlAgVzdGFrZQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJjbgUCZHAFA25pbAMJAAACBQJmVAUCZlQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUCZEsGY2FsbGVyBQJkcAUCY24FA25pbAQCZnYDCQBmAgUCY2gAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQJhSgUCY2gJANkEAQUCY2sFA25pbAUDbmlsCQCUCgIJAM4IAgkAzggCBQJjRwUCZlMFAmZ2BQJkcAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkSwEKcHV0Rm9yRnJlZQECZloDCQBmAgAABQJmWgkAAgECCldyb25nIHNscGcDCQECIT0CCQCQAwEIBQJkSwhwYXltZW50cwACCQACAQIMMiBwbW50cyBleHBkBAJnYQkBAmRNCgkApQgBCAUCZEsGY2FsbGVyCQDYBAEIBQJkSw10cmFuc2FjdGlvbklkCQEPQXR0YWNoZWRQYXltZW50AggJAQV2YWx1ZQEJAJEDAggFAmRLCHBheW1lbnRzAAAHYXNzZXRJZAgJAQV2YWx1ZQEJAJEDAggFAmRLCHBheW1lbnRzAAAGYW1vdW50CQCRAwIIBQJkSwhwYXltZW50cwABBQJmWgcHBgAAAgAIBQJnYQJfOQJkSwEDZ2V0AAQCZGMJAQJkSgEFAmRLBAJnYggFAmRjAl8xBAJjRggFAmRjAl8yBAJjUQgFAmRjAl8zBAJjawgFAmRjAl80BAJjRwgFAmRjAl81BAJlegkA/AcEBQJhRgIEYnVybgkAzAgCBQJjUQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJjawUCY1EFA25pbAMJAAACBQJlegUCZXoFAmNHCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRLAQtnZXRPbmVUa25WMgICZmQCZmUEAmZVCgACZm0JAPwHBAUCYUYCKGlzUG9vbE9uZVRva2VuT3BlcmF0aW9uc0Rpc2FibGVkUkVBRE9OTFkJAMwIAgkApQgBBQR0aGlzBQNuaWwFA25pbAMJAAECBQJmbQIHQm9vbGVhbgUCZm0JAAIBCQCsAgIJAAMBBQJmbQIcIGNvdWxkbid0IGJlIGNhc3QgdG8gQm9vbGVhbgQCZ2MDAwkBAmFIAAYJAAACBQJhVwUBcQYFAmZVBAJmVwkAzAgCAwMJAQEhAQUCZ2MGCQECZkEBBQJkSwYJAQJhRAECIWdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbgkAzAgCAwkAAAIJAJADAQgFAmRLCHBheW1lbnRzAAEGCQECYUQBAh5leGFjdGx5IDEgcGF5bWVudCBhcmUgZXhwZWN0ZWQFA25pbAMJAAACBQJmVwUCZlcEAmdkCQECZmMGBQJmZAUCZmUIBQJkSwhwYXltZW50cwgFAmRLBmNhbGxlcggFAmRLDG9yaWdpbkNhbGxlcggFAmRLDXRyYW5zYWN0aW9uSWQEAmNHCAUCZ2QCXzEEAmZvCAUCZ2QCXzIJAJQKAgUCY0cFAmZvCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRLAQpyZWZyZXNoRGxwAAUDbmlsAmRLARNnZXRPbmVUa25WMlJFQURPTkxZAgJmZAJnZQQCYVMJAQJhSwAEAmNvCQCRAwIFAmFTBQF1BAJjcAkAkQMCBQJhUwUBdgQCY24JAJEDAgUCYVMFAXQEAmRSCQDMCAIJALYCAQkBAmJ4AQUCY28JAMwIAgkAtgIBCQECYngBBQJjcAUDbmlsBAJnZgkAtgIBCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEJANkEAQUCY24CEGludmFsaWQgbHAgYXNzZXQIcXVhbnRpdHkEAmJLCQECZFEBBQJkUgQCYkoJALgCAgUCYksJALwCAwkAtgIBBQJnZQUCYksFAmdmBAJnZwMJAAACBQJmZAUCY28AAAMJAAACBQJmZAUCY3AAAQkAAgECFGludmFsaWQgb3V0IGFzc2V0IGlkBAJnaAkBAmV2AwUCZFIFAmdnBQJiSgQCZ2kJALgCAgkAkQMCBQJkUgUCZ2cFAmdoBAJnagkAlgMBCQDMCAIAAAkAzAgCCQCgAwEJALgCAgUCZ2kFAWYFA25pbAQCZ2sJAQJjZgEFAmdqBAJmbggFAmdrAl8xBAJjaAgFAmdrAl8yCQCUCgIFA25pbAkAlAoCBQJmbgUCY2gCZEsBHGdldE9uZVRrblYyV2l0aEJvbnVzUkVBRE9OTFkCAmZkAmdlBAJhUwkBAmFLAAQCY28JAJEDAgUCYVMFAXUEAmNwCQCRAwIFAmFTBQF2BAJjbgkAkQMCBQJhUwUBdAQCY3UJAQJieAEFAmNvBAJjdwkBAmJ4AQUCY3AEAmdsCgACZm0JAPwHBAUEdGhpcwITZ2V0T25lVGtuVjJSRUFET05MWQkAzAgCBQJmZAkAzAgCBQJnZQUDbmlsBQNuaWwDCQABAgUCZm0CCihJbnQsIEludCkFAmZtCQACAQkArAICCQADAQUCZm0CHyBjb3VsZG4ndCBiZSBjYXN0IHRvIChJbnQsIEludCkEAmZuCAUCZ2wCXzEEAmNoCAUCZ2wCXzIEAmRjCQECY2kEAgAFAmNuBQJnZQUEdGhpcwQCY0UIBQJkYwJfMQQCY0YIBQJkYwJfMgQCZ20JAGQCBQJjRQUCY0YEAmZiAwkAAAIFAmdtAAADCQAAAgUCZm4AAAAACQACAQIXYm9udXMgY2FsY3VsYXRpb24gZXJyb3IJAGsDCQBlAgUCZm4FAmdtBQFhBQJnbQkAlAoCBQNuaWwJAJUKAwUCZm4FAmNoBQJmYgJkSwEJZ2V0Tm9MZXNzAgJnbgJnbwQCZGMJAQJkSgEFAmRLBAJjRQgFAmRjAl8xBAJjRggFAmRjAl8yBAJjUQgFAmRjAl8zBAJjawgFAmRjAl80BAJjRwgFAmRjAl81AwkAZgIFAmduBQJjRQkAAgEJAKwCAgkArAICCQCsAgICCUZhaWxlZDogIAkApAMBBQJjRQIDIDwgCQCkAwEFAmduAwkAZgIFAmdvBQJjRgkAAgEJAKwCAgkArAICCQCsAgICCEZhaWxlZDogCQCkAwEFAmNGAgMgPCAJAKQDAQUCZ28EAmdwCQD8BwQFAmFGAgRidXJuCQDMCAIFAmNRBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmNrBQJjUQUDbmlsAwkAAAIFAmdwBQJncAUCY0cJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZEsBDXVuc3Rha2VBbmRHZXQBAmNnBAJncQMJAQIhPQIJAJADAQgFAmRLCHBheW1lbnRzAAAJAAIBAg1ObyBwbW50cyBleHBkBgMJAAACBQJncQUCZ3EEAmJXCQECYUsABAJncgkBAmJjAAQCZk4JANkEAQkAkQMCBQJiVwUBdAQCZ3MJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFAmdyBQFBAgpXciBzdCBhZGRyBAJndAkA/AcEBQJncwIHdW5zdGFrZQkAzAgCCQDYBAEFAmZOCQDMCAIFAmNnBQNuaWwFA25pbAMJAAACBQJndAUCZ3QEAmRjCQECY2kECQDYBAEIBQJkSw10cmFuc2FjdGlvbklkCQDYBAEFAmZOBQJjZwgFAmRLBmNhbGxlcgQCY3MJAQ1wYXJzZUludFZhbHVlAQgFAmRjAl85BAJjRwgFAmRjA18xMAQCZ3UDAwkBAmFIAAYJAAACBQJjcwUBcQkAAgEJAKwCAgIJQmxvY2tlZDogCQCkAwEFAmNzBgMJAAACBQJndQUCZ3UEAmd2CQD8BwQFAmFGAgRidXJuCQDMCAIFAmNnBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmZOBQJjZwUDbmlsAwkAAAIFAmd2BQJndgUCY0cJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZEsBE3Vuc3Rha2VBbmRHZXROb0xlc3MDAmd3Amd4AmdvBAJnYwMJAQJhSAAGCQAAAgUCYVcFAXEEAmZXCQDMCAIDCQEBIQEFAmdjBgkAAgECIWdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbgkAzAgCAwkAAAIJAJADAQgFAmRLCHBheW1lbnRzAAAGCQACAQIYbm8gcGF5bWVudHMgYXJlIGV4cGVjdGVkBQNuaWwDCQAAAgUCZlcFAmZXBAJndAkA/AcEBQJiZQIHdW5zdGFrZQkAzAgCCQDYBAEFAmFYCQDMCAIFAmd3BQNuaWwFA25pbAMJAAACBQJndAUCZ3QEAmd5CQECY2kECQDYBAEIBQJkSw10cmFuc2FjdGlvbklkCQDYBAEFAmFYBQJndwgFAmRLBmNhbGxlcgQCY0UIBQJneQJfMQQCY0YIBQJneQJfMgQCY0cIBQJneQNfMTAEAmd6CQDMCAIDCQBnAgUCY0UFAmd4BgkAAgEJALkJAgkAzAgCAixhbW91bnQgYXNzZXQgYW1vdW50IHRvIHJlY2VpdmUgaXMgbGVzcyB0aGFuIAkAzAgCCQCkAwEFAmd4BQNuaWwCAAkAzAgCAwkAZwIFAmNGBQJnbwYJAAIBCQC5CQIJAMwIAgIrcHJpY2UgYXNzZXQgYW1vdW50IHRvIHJlY2VpdmUgaXMgbGVzcyB0aGFuIAkAzAgCCQCkAwEFAmdvBQNuaWwCAAUDbmlsAwkAAAIFAmd6BQJnegQCZ3AJAPwHBAUCYUYCBGJ1cm4JAMwIAgUCZ3cFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCYVgFAmd3BQNuaWwDCQAAAgUCZ3AFAmdwBQJjRwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkSwEVdW5zdGFrZUFuZEdldE9uZVRrblYyAwJndwJmZAJmZQQCZlUKAAJmbQkA/AcEBQJhRgIoaXNQb29sT25lVG9rZW5PcGVyYXRpb25zRGlzYWJsZWRSRUFET05MWQkAzAgCCQClCAEFBHRoaXMFA25pbAUDbmlsAwkAAQIFAmZtAgdCb29sZWFuBQJmbQkAAgEJAKwCAgkAAwEFAmZtAhwgY291bGRuJ3QgYmUgY2FzdCB0byBCb29sZWFuBAJnYwMDCQECYUgABgkAAAIFAmFXBQFxBgUCZlUEAmZXCQDMCAIDAwkBASEBBQJnYwYJAQJmQQEFAmRLBgkBAmFEAQIhZ2V0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluCQDMCAIDCQAAAgkAkAMBCAUCZEsIcGF5bWVudHMAAAYJAQJh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BAUCY2oFAmdMBQJjbAkBEUBleHRyTmF0aXZlKDEwNjIpAQUCZ0sJAJQKAgUDbmlsCQCcCgoIBQJkYwJfMQgFAmRjAl8yCAUCZGMCXzMIBQJkYwJfNAgFAmRjAl81CAUCZGMCXzYIBQJkYwJfNwkApgMBCAUCZGMCXzgIBQJkYwJfOQgFAmRjA18xMAJkSwEOZ2V0RmVlUkVBRE9OTFkACQCUCgIFA25pbAUCYWgBAmdNAQJnTgAEAmdPBAJheAkBAmZ4AAMJAAECBQJheAIKQnl0ZVZlY3RvcgQCZkIFAmF4BQJmQgMJAAECBQJheAIEVW5pdAgFAmdND3NlbmRlclB1YmxpY0tleQkAAgECC01hdGNoIGVycm9yBAJheAUCZ00DCQABAgUCYXgCBU9yZGVyBAJkeAUCYXgEAmdQCQECYUkABAJnUQkBAmR3AQUCZHgEAmdSCQD0AwMIBQJkeAlib2R5Qnl0ZXMJAJEDAggFAmR4BnByb29mcwAACAUCZHgPc2VuZGVyUHVibGljS2V5BAJnUwkA9AMDCAUCZHgJYm9keUJ5dGVzCQCRAwIIBQJkeAZwcm9vZnMAAQUCZ1ADAwMFAmdRBQJnUgcFAmdTBwYJAQJhcwMFAmdRBQJnUgUCZ1MDCQABAgUCYXgCFFNldFNjcmlwdFRyYW5zYWN0aW9uBAJkWAUCYXgEAmdUCQD2AwEJAQV2YWx1ZQEIBQJkWAZzY3JpcHQEAmdVCQDbBAEJAQV2YWx1ZQEJAJ0IAgUCYUYJAQJhcQAEAmdWCQDxBwEFBHRoaXMDAwkAAAIFAmdVBQJnVAkBAiE9AgUCZ1YFAmdUBwYJAPQDAwgFAmdNCWJvZHlCeXRlcwkAkQMCCAUCZ00GcHJvb2ZzAAAFAmdPCQD0AwMIBQJnTQlib2R5Qnl0ZXMJAJEDAggFAmdNBnByb29mcwAABQJnT9hvbnA=", "chainId": 84, "height": 2331285, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: GnXf7Xq1wuaQJuxM1WptzxZUW3JbT19Z1qu6iWqkT5i2 Next: 7qeTDJZn4LaYsgJzFkLvUDfohq4PyThmF9agu58eqZ9N Diff:
OldNewDifferences
698698 then fm
699699 else throw(($getType(fm) + " couldn't be cast to (Int, Int)"))
700700 }
701- if ((fl == fl))
701+ let fn = fl._1
702+ let ch = fl._2
703+ let fo = if (if ((fe > 0))
704+ then (fe > fn)
705+ else false)
706+ then aD(makeString(["amount to receive is less than ", toString(fe)], ""))
707+ else fn
708+ let fp = if ((fd == co))
709+ then $Tuple4(fo, 0, ((cu - fo) - ch), cw)
710+ else if ((fd == cp))
711+ then $Tuple4(0, fo, cu, ((cw - fo) - ch))
712+ else throw("invalid out asset id")
713+ let fq = fp._1
714+ let fr = fp._2
715+ let eT = fp._3
716+ let eU = fp._4
717+ let fs = bz(F(eU, fj), F(eT, fi))
718+ let ft = I(fs, a)
719+ let fu = if ((fd == "WAVES"))
720+ then unit
721+ else fromBase58String(fd)
722+ let fv = if ((ch > 0))
723+ then [ScriptTransfer(aJ, ch, fu)]
724+ else nil
725+ let cG = ([ScriptTransfer(cm, fo, fu), StringEntry(ab(toString(cm), cj), bt(fq, fr, cQ, ft, height, lastBlock.timestamp)), IntegerEntry(U(), ft), IntegerEntry(V(height, lastBlock.timestamp), ft)] ++ fv)
726+ if ((cG == cG))
702727 then {
703- let ch = fl._2
704- let fn = fl._1
705- let fo = if (if ((fe > 0))
706- then (fe > fn)
707- else false)
708- then aD(makeString(["amount to receive is less than ", toString(fe)], ""))
709- else fn
710- let fp = if ((fd == co))
711- then $Tuple4(fo, 0, ((cu - fo) - ch), cw)
712- else if ((fd == cp))
713- then $Tuple4(0, fo, cu, ((cw - fo) - ch))
714- else throw("invalid out asset id")
715- let fq = fp._1
716- let fr = fp._2
717- let eT = fp._3
718- let eU = fp._4
719- let fs = bz(F(eU, fj), F(eT, fi))
720- let ft = I(fs, a)
721- let fu = if ((fd == "WAVES"))
722- then unit
723- else fromBase58String(fd)
724- let fv = if ((ch > 0))
725- then [ScriptTransfer(aJ, ch, fu)]
726- else nil
727- let cG = ([ScriptTransfer(cm, fo, fu), StringEntry(ab(toString(cm), cj), bt(fq, fr, cQ, ft, height, lastBlock.timestamp)), IntegerEntry(U(), ft), IntegerEntry(V(height, lastBlock.timestamp), ft)] ++ fv)
728- if ((cG == cG))
729- then {
730- let fw = invoke(aF, "burn", [cQ], [AttachedPayment(ck, cQ)])
731- if ((fw == fw))
732- then $Tuple2(cG, fo)
733- else throw("Strict value is not equal to itself.")
734- }
728+ let fw = invoke(aF, "burn", [cQ], [AttachedPayment(ck, cQ)])
729+ if ((fw == fw))
730+ then $Tuple2(cG, fo)
735731 else throw("Strict value is not equal to itself.")
736732 }
737733 else throw("Strict value is not equal to itself.")
943939 let ck = toBase58String(value(dL.assetId))
944940 let cQ = dL.amount
945941 let fX = eF(cQ, ck, toString(cm), toBase58String(dK.transactionId), true)
946- if ((fX == fX))
942+ let fY = fX._1
943+ let cG = fX._2
944+ let ch = fX._3
945+ let dp = if (if ((fe > 0))
946+ then (fe > fY)
947+ else false)
948+ then aD(makeString(["amount to receive is less than ", toString(fe)], ""))
949+ else fY
950+ let fM = invoke(aF, "emit", [dp], nil)
951+ if ((fM == fM))
947952 then {
948- let ch = fX._3
949- let cG = fX._2
950- let fY = fX._1
951- let dp = if (if ((fe > 0))
952- then (fe > fY)
953- else false)
954- then aD(makeString(["amount to receive is less than ", toString(fe)], ""))
955- else fY
956- let fM = invoke(aF, "emit", [dp], nil)
957- if ((fM == fM))
953+ let fO = {
954+ let ax = fM
955+ if ($isInstanceOf(ax, "Address"))
956+ then {
957+ let fP = ax
958+ invoke(fP, "emit", [dp], nil)
959+ }
960+ else unit
961+ }
962+ if ((fO == fO))
958963 then {
959- let fO = {
960- let ax = fM
961- if ($isInstanceOf(ax, "Address"))
962- then {
963- let fP = ax
964- invoke(fP, "emit", [dp], nil)
965- }
966- else unit
967- }
968- if ((fO == fO))
964+ let fS = if (fI)
969965 then {
970- let fS = if (fI)
971- then {
972- let fT = invoke(be, "stake", nil, [AttachedPayment(cn, dp)])
973- if ((fT == fT))
974- then nil
975- else throw("Strict value is not equal to itself.")
976- }
977- else [ScriptTransfer(dK.caller, dp, cn)]
978- let fv = if ((ch > 0))
979- then [ScriptTransfer(aJ, ch, fromBase58String(ck))]
980- else nil
981- $Tuple2(((cG ++ fS) ++ fv), dp)
966+ let fT = invoke(be, "stake", nil, [AttachedPayment(cn, dp)])
967+ if ((fT == fT))
968+ then nil
969+ else throw("Strict value is not equal to itself.")
982970 }
983- else throw("Strict value is not equal to itself.")
971+ else [ScriptTransfer(dK.caller, dp, cn)]
972+ let fv = if ((ch > 0))
973+ then [ScriptTransfer(aJ, ch, fromBase58String(ck))]
974+ else nil
975+ $Tuple2(((cG ++ fS) ++ fv), dp)
984976 }
985977 else throw("Strict value is not equal to itself.")
986978 }
10481040 }
10491041 else throw("Strict value is not equal to itself.")
10501042 }
1043+
1044+
1045+
1046+@Callable(dK)
1047+func refreshDlp () = nil
10511048
10521049
10531050
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = 100000000
55
66 let b = toBigInt(100000000)
77
88 let c = toBigInt(1000000000000000000)
99
1010 let d = toBigInt(0)
1111
1212 let e = toBigInt(0)
1313
1414 let f = toBigInt(1)
1515
1616 let g = toBigInt(2)
1717
1818 let h = toBigInt((a - ((a * 1) / a)))
1919
2020 let i = "WAVES"
2121
2222 let j = "100"
2323
2424 let k = "1"
2525
2626 let l = "__"
2727
2828 let m = ""
2929
3030 let n = 1
3131
3232 let o = 2
3333
3434 let p = 3
3535
3636 let q = 4
3737
3838 let r = 1
3939
4040 let s = 2
4141
4242 let t = 3
4343
4444 let u = 4
4545
4646 let v = 5
4747
4848 let w = 6
4949
5050 let x = 7
5151
5252 let y = 8
5353
5454 let z = 9
5555
5656 let A = 1
5757
5858 let B = 6
5959
6060 let C = 7
6161
6262 let D = 10
6363
6464 let E = fraction(10, a, 10000)
6565
6666 func F (G,H) = fraction(toBigInt(G), c, toBigInt(H))
6767
6868
6969 func I (J,K) = toInt(fraction(J, toBigInt(K), c))
7070
7171
7272 func L (M,N,O) = fraction(M, N, O)
7373
7474
7575 func P (J) = if ((d > J))
7676 then -(J)
7777 else J
7878
7979
8080 func Q (J) = if ((d > J))
8181 then -(J)
8282 else J
8383
8484
8585 func R () = "%s__factoryContract"
8686
8787
8888 func S () = "%s__managerPublicKey"
8989
9090
9191 func T () = "%s__pendingManagerPublicKey"
9292
9393
9494 func U () = "%s%s__price__last"
9595
9696
9797 func V (W,X) = makeString(["%s%s%d%d__price__history", toString(W), toString(X)], l)
9898
9999
100100 func Y (Z,aa) = ((("%s%s%s__P__" + Z) + "__") + aa)
101101
102102
103103 func ab (Z,aa) = ((("%s%s%s__G__" + Z) + "__") + aa)
104104
105105
106106 func ac () = "%s__amountAsset"
107107
108108
109109 func ad () = "%s__priceAsset"
110110
111111
112112 func ae () = "%s__amp"
113113
114114
115115 func af () = "%s__addonAddr"
116116
117117
118118 let ag = "%s__fee"
119119
120120 let ah = valueOrElse(getInteger(this, ag), E)
121121
122122 func ai () = "%s__factoryConfig"
123123
124124
125125 func aj () = "%s%s__matcher__publicKey"
126126
127127
128128 func ak (al,am) = (((("%d%d%s__" + al) + "__") + am) + "__config")
129129
130130
131131 func an (ao) = ("%s%s%s__mappings__baseAsset2internalId__" + ao)
132132
133133
134134 func ap () = "%s__shutdown"
135135
136136
137137 func aq () = "%s__allowedLpStableScriptHash"
138138
139139
140140 func ar () = "%s__feeCollectorAddress"
141141
142142
143143 func as (at,au,av) = throw(((((("Failed: ordValid=" + toString(at)) + " sndrValid=") + toString(au)) + " mtchrValid=") + toString(av)))
144144
145145
146146 func aw (J) = {
147147 let ax = J
148148 if ($isInstanceOf(ax, "String"))
149149 then {
150150 let ay = ax
151151 ay
152152 }
153153 else throw("fail cast to String")
154154 }
155155
156156
157157 func az (aA,aB) = valueOrErrorMessage(getString(aA, aB), makeString(["mandatory ", toString(aA), ".", aB, " not defined"], ""))
158158
159159
160160 func aC (aA,aB) = valueOrErrorMessage(getInteger(aA, aB), makeString(["mandatory ", toString(aA), ".", aB, " not defined"], ""))
161161
162162
163163 func aD (aE) = throw(makeString(["lp_stable.ride:", aE], " "))
164164
165165
166166 let aF = addressFromStringValue(az(this, R()))
167167
168168 let aG = az(this, ae())
169169
170170 func aH () = valueOrElse(getBoolean(aF, ap()), false)
171171
172172
173173 func aI () = fromBase58String(az(aF, aj()))
174174
175175
176176 let aJ = addressFromStringValue(az(aF, ar()))
177177
178178 func aK () = {
179179 let aL = az(this, ac())
180180 let aM = az(this, ad())
181181 let aN = aC(aF, an(aM))
182182 let al = aC(aF, an(aL))
183183 split(az(aF, ak(toString(al), toString(aN))), l)
184184 }
185185
186186
187187 func aO (aP) = if ((aP == i))
188188 then unit
189189 else fromBase58String(aP)
190190
191191
192192 func aQ (aP) = if ((aP == unit))
193193 then i
194194 else toBase58String(value(aP))
195195
196196
197197 func aR (aS) = $Tuple7(addressFromStringValue(aS[r]), parseIntValue(aS[s]), fromBase58String(aS[t]), aO(aS[u]), aO(aS[v]), parseIntValue(aS[w]), parseIntValue(aS[x]))
198198
199199
200200 let aT = aR(aK())
201201
202202 let aU = aT
203203
204204 let aV = aU._1
205205
206206 let aW = aU._2
207207
208208 let aX = aU._3
209209
210210 let aY = aU._4
211211
212212 let aZ = aU._5
213213
214214 let ba = aU._6
215215
216216 let bb = aU._7
217217
218218 func bc () = split(az(aF, ai()), l)
219219
220220
221221 let bd = bc()
222222
223223 let be = valueOrErrorMessage(addressFromString(bd[A]), "Invalid staking contract address")
224224
225225 let bf = valueOrErrorMessage(addressFromString(bd[C]), "Invalid slipage contract address")
226226
227227 let bg = valueOrErrorMessage(addressFromString(bd[D]), "Invalid gwx contract address")
228228
229229 let bh = valueOrErrorMessage(addressFromString(bd[B]), "Invalid gwx contract address")
230230
231231 func bi (bj,bk,bl,bm,bn,bo,bp,bq,br,bs) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(bj), toString(bk), toString(bl), toString(bm), toString(bn), toString(bo), toString(bp), toString(bq), toString(br), toString(bs)], l)
232232
233233
234234 func bt (bu,bv,bw,bm,bp,bq) = makeString(["%d%d%d%d%d%d", toString(bu), toString(bv), toString(bw), toString(bm), toString(bp), toString(bq)], l)
235235
236236
237237 func bx (by) = if ((by == "WAVES"))
238238 then wavesBalance(this).available
239239 else assetBalance(this, fromBase58String(by))
240240
241241
242242 func bz (bA,bB) = fraction(bA, c, bB)
243243
244244
245245 func bC (bD,bE,bF) = {
246246 let bG = fraction((bD - bE), b, bE)
247247 let bH = ((bF - P(bG)) > d)
248248 if (!(bH))
249249 then throw(("Big slpg: " + toString(bG)))
250250 else $Tuple2(bH, min([bD, bE]))
251251 }
252252
253253
254254 func bI (bJ,bK,bL) = {
255255 let bG = fraction(bK, b, bJ)
256256 let bM = (bL > bG)
257257 if (if (bM)
258258 then true
259259 else (bK > bJ))
260260 then throw(((((((toString(bK) + " ") + toString(bJ)) + " ") + toString(bG)) + " ") + toString(bL)))
261261 else bM
262262 }
263263
264264
265265 func bN (bO,bP,bQ,bR) = {
266266 let bS = F(bQ, bO)
267267 let bT = F(bR, bP)
268268 bz(bT, bS)
269269 }
270270
271271
272272 func bU (bQ,bR,bV) = {
273273 let bW = aK()
274274 let bX = parseIntValue(bW[w])
275275 let bY = parseIntValue(bW[x])
276276 let bZ = bN(bX, bY, bQ, bR)
277277 let bB = F(bQ, bX)
278278 let bA = F(bR, bY)
279279 let ca = F(bV, a)
280280 let cb = bz(bB, ca)
281281 let cc = bz(bA, ca)
282282 [bZ, cb, cc]
283283 }
284284
285285
286286 func cd (bQ,bR,bV) = {
287287 let ce = bU(bQ, bR, bV)
288288 [I(ce[0], a), I(ce[1], a), I(ce[2], a)]
289289 }
290290
291291
292292 func cf (cg) = {
293293 let ch = fraction(cg, ah, a)
294294 $Tuple2((cg - ch), ch)
295295 }
296296
297297
298298 func ci (cj,ck,cl,cm) = {
299299 let bW = aK()
300300 let cn = bW[t]
301301 let co = bW[u]
302302 let cp = bW[v]
303303 let cq = parseIntValue(bW[w])
304304 let cr = parseIntValue(bW[x])
305305 let cs = bW[s]
306306 let ct = valueOrErrorMessage(assetInfo(fromBase58String(cn)), "Wrong LP id").quantity
307307 if ((cn != ck))
308308 then throw("Wrong pmt asset")
309309 else {
310310 let cu = bx(co)
311311 let cv = F(cu, cq)
312312 let cw = bx(cp)
313313 let cx = F(cw, cr)
314314 let cy = bz(cx, cv)
315315 let cz = I(cy, a)
316316 let cA = F(cl, a)
317317 let cB = F(ct, a)
318318 let cC = fraction(cv, cA, cB)
319319 let cD = fraction(cx, cA, cB)
320320 let cE = I(cC, cq)
321321 let cF = I(cD, cr)
322322 let cG = if ((cj == ""))
323323 then nil
324324 else [ScriptTransfer(cm, cE, if ((co == "WAVES"))
325325 then unit
326326 else fromBase58String(co)), ScriptTransfer(cm, cF, if ((cp == "WAVES"))
327327 then unit
328328 else fromBase58String(cp)), StringEntry(ab(toString(cm), cj), bt(cE, cF, cl, cz, height, lastBlock.timestamp)), IntegerEntry(U(), cz), IntegerEntry(V(height, lastBlock.timestamp), cz)]
329329 $Tuple10(cE, cF, co, cp, cu, cw, ct, cy, cs, cG)
330330 }
331331 }
332332
333333
334334 func cH (cj,bF,cI,cJ,cK,cL,cm,cM,cN,cO,cP,cQ,cR) = {
335335 let bW = aK()
336336 let cn = fromBase58String(bW[t])
337337 let cS = bW[u]
338338 let cT = bW[v]
339339 let cU = bW[y]
340340 let cV = bW[z]
341341 let cW = parseIntValue(bW[w])
342342 let cX = parseIntValue(bW[x])
343343 let cs = bW[s]
344344 let cY = valueOrErrorMessage(assetInfo(cn), "Wr lp as").quantity
345345 let cu = if (cM)
346346 then bx(cS)
347347 else if (if (cO)
348348 then (cR == cS)
349349 else false)
350350 then (bx(cS) - cQ)
351351 else if (cO)
352352 then bx(cS)
353353 else (bx(cS) - cI)
354354 let cw = if (cM)
355355 then bx(cT)
356356 else if (if (cO)
357357 then (cR == cT)
358358 else false)
359359 then (bx(cT) - cQ)
360360 else if (cO)
361361 then bx(cT)
362362 else (bx(cT) - cK)
363363 let cZ = F(cI, cW)
364364 let da = F(cK, cX)
365365 let db = bz(da, cZ)
366366 let cv = F(cu, cW)
367367 let cx = F(cw, cX)
368368 let dc = if ((cY == 0))
369369 then {
370370 let cy = d
371371 let dd = d
372372 let ca = pow((cZ * da), 0, toBigInt(5), 1, 0, DOWN)
373373 $Tuple5(I(ca, a), I(cZ, cW), I(da, cX), bz((cx + da), (cv + cZ)), dd)
374374 }
375375 else {
376376 let cy = bz(cx, cv)
377377 let de = fraction(P((cy - db)), c, cy)
378378 let dd = F(bF, a)
379379 if (if (if (cP)
380380 then (cy != d)
381381 else false)
382382 then (de > dd)
383383 else false)
384384 then throw(((("Price slippage " + toString(de)) + " > ") + toString(dd)))
385385 else {
386386 let df = F(cY, a)
387387 let dg = fraction(cZ, cy, c)
388388 let dh = fraction(da, c, cy)
389389 let di = if ((dg > da))
390390 then $Tuple2(dh, da)
391391 else $Tuple2(cZ, dg)
392392 let dj = di._1
393393 let dk = di._2
394394 let ca = fraction(df, dk, cx)
395395 $Tuple5(I(ca, a), I(dj, cW), I(dk, cX), cy, dd)
396396 }
397397 }
398398 let dl = dc._1
399399 let dm = dc._2
400400 let dn = dc._3
401401 let cz = I(dc._4, a)
402402 let do = I(dc._5, a)
403403 if ((0 >= dl))
404404 then throw("LP <= 0")
405405 else {
406406 let dp = if (!(cN))
407407 then 0
408408 else dl
409409 let dq = (cI - dm)
410410 let dr = (cK - dn)
411411 let ds = if (if (cO)
412412 then (cR == cS)
413413 else false)
414414 then $Tuple2(cQ, 0)
415415 else if (if (cO)
416416 then (cR == cT)
417417 else false)
418418 then $Tuple2(0, cQ)
419419 else $Tuple2(dm, dn)
420420 let dt = ds._1
421421 let du = ds._2
422422 let dv = [IntegerEntry(U(), cz), IntegerEntry(V(height, lastBlock.timestamp), cz), StringEntry(Y(cm, cj), bi(dt, du, dp, cz, bF, do, height, lastBlock.timestamp, dq, dr))]
423423 $Tuple13(dl, dp, cz, cu, cw, cY, cn, cs, dv, dq, dr, cJ, cL)
424424 }
425425 }
426426
427427
428428 func dw (dx) = {
429429 let bW = aK()
430430 let dy = bW[u]
431431 let dz = bW[v]
432432 let cs = parseIntValue(bW[s])
433433 let bX = parseIntValue(bW[w])
434434 let bY = parseIntValue(bW[x])
435435 let dA = bx(dy)
436436 let dB = bx(dz)
437437 let cy = if ((dx.orderType == Buy))
438438 then bN(bX, bY, (dA + dx.amount), dB)
439439 else bN(bX, bY, (dA - dx.amount), dB)
440440 let cz = I(cy, a)
441441 if (if (if (aH())
442442 then true
443443 else (cs == p))
444444 then true
445445 else (cs == q))
446446 then throw("Admin blocked")
447447 else {
448448 let dC = dx.assetPair.amountAsset
449449 let dD = if ((dC == unit))
450450 then "WAVES"
451451 else toBase58String(value(dC))
452452 let dE = dx.assetPair.priceAsset
453453 let dF = if ((dE == unit))
454454 then "WAVES"
455455 else toBase58String(value(dE))
456456 if (if ((dD != dy))
457457 then true
458458 else (dF != dz))
459459 then throw("Wr assets")
460460 else {
461461 let dG = dx.price
462462 let cX = fraction(a, bY, bX)
463463 let dH = L(dG, a, cX)
464464 let dI = if ((dx.orderType == Buy))
465465 then (cz >= dH)
466466 else (dH >= cz)
467467 true
468468 }
469469 }
470470 }
471471
472472
473473 func dJ (dK) = if ((size(dK.payments) != 1))
474474 then throw("1 pmnt exp")
475475 else {
476476 let dL = value(dK.payments[0])
477477 let ck = value(dL.assetId)
478478 let cQ = dL.amount
479479 let dc = ci(toBase58String(dK.transactionId), toBase58String(ck), cQ, dK.caller)
480480 let cE = dc._1
481481 let cF = dc._2
482482 let cs = parseIntValue(dc._9)
483483 let cG = dc._10
484484 if (if (aH())
485485 then true
486486 else (cs == q))
487487 then throw(("Admin blocked: " + toString(cs)))
488488 else $Tuple5(cE, cF, cQ, ck, cG)
489489 }
490490
491491
492492 func dM (dN,aa,dO,dP,bF,cN,cO,cP,cQ,cR) = {
493493 let dc = cH(aa, bF, value(dO).amount, value(dO).assetId, value(dP).amount, value(dP).assetId, dN, (aa == ""), cN, cO, cP, cQ, cR)
494494 let cs = parseIntValue(dc._8)
495495 if (if (if (aH())
496496 then true
497497 else (cs == o))
498498 then true
499499 else (cs == q))
500500 then throw(("Blocked:" + toString(cs)))
501501 else dc
502502 }
503503
504504
505505 func dQ (dR) = {
506506 let dS = g
507507 let dT = dR[0]
508508 let dU = dR[1]
509509 let dV = parseBigIntValue(j)
510510 let dW = (parseBigIntValue(aG) * dV)
511511 let dX = (dT + dU)
512512 if ((dX == e))
513513 then e
514514 else {
515515 let dY = (dW * dS)
516516 let dZ = (((dT * dU) * dS) * dS)
517517 let ea = ((dY * dX) / dV)
518518 let eb = (dY - dV)
519519 let ec = (dS + f)
520520 func ed (ee,ef) = {
521521 let eg = ee
522522 let eh = eg._1
523523 let ei = eg._2
524524 if ((ei != unit))
525525 then ee
526526 else {
527527 let ej = (((eh * eh) * eh) / dZ)
528528 let ek = (((ea + (ej * dS)) * eh) / (((eb * eh) / dV) + (ec * ej)))
529529 let el = Q((ek - value(eh)))
530530 if ((f >= el))
531531 then $Tuple2(ek, ef)
532532 else $Tuple2(ek, unit)
533533 }
534534 }
535535
536536 let em = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
537537 let en = {
538538 let eo = em
539539 let ep = size(eo)
540540 let eq = $Tuple2(dX, unit)
541541 func er (es,et) = if ((et >= ep))
542542 then es
543543 else ed(es, eo[et])
544544
545545 func eu (es,et) = if ((et >= ep))
546546 then es
547547 else throw("List size exceeds 15")
548548
549549 eu(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(eq, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
550550 }
551551 let eh = en._1
552552 let ei = en._2
553553 if ((ei != unit))
554554 then eh
555555 else throw(("D calculation error, D = " + toString(eh)))
556556 }
557557 }
558558
559559
560560 func ev (dR,dK,ew) = {
561561 let dS = g
562562 let ex = dR[if ((dK == 0))
563563 then 1
564564 else 0]
565565 let dV = parseBigIntValue(j)
566566 let dW = (parseBigIntValue(aG) * dV)
567567 let dX = ex
568568 let dY = (dW * dS)
569569 let ey = (((((ew * ew) / (ex * dS)) * ew) * dV) / (dY * dS))
570570 let ez = ((dX + ((ew * dV) / dY)) - ew)
571571 func ed (ee,ef) = {
572572 let eA = ee
573573 let eB = eA._1
574574 let ei = eA._2
575575 if ((ei != unit))
576576 then ee
577577 else {
578578 let eC = (((eB * eB) + ey) / ((g * eB) + ez))
579579 let eD = Q((eC - value(eB)))
580580 if ((f >= eD))
581581 then $Tuple2(eC, ef)
582582 else $Tuple2(eC, unit)
583583 }
584584 }
585585
586586 let em = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
587587 let eE = {
588588 let eo = em
589589 let ep = size(eo)
590590 let eq = $Tuple2(ew, unit)
591591 func er (es,et) = if ((et >= ep))
592592 then es
593593 else ed(es, eo[et])
594594
595595 func eu (es,et) = if ((et >= ep))
596596 then es
597597 else throw("List size exceeds 15")
598598
599599 eu(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(eq, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
600600 }
601601 let eB = eE._1
602602 let ei = eE._2
603603 if ((ei != unit))
604604 then eB
605605 else throw(("Y calculation error, Y = " + toString(eB)))
606606 }
607607
608608
609609 func eF (eG,ck,cm,aa,eH) = {
610610 let aS = aK()
611611 let co = aS[u]
612612 let cp = aS[v]
613613 let cn = aS[t]
614614 let cW = parseIntValue(aS[w])
615615 let cX = parseIntValue(aS[x])
616616 let eI = toBigInt(valueOrErrorMessage(assetInfo(fromBase58String(cn)), "invalid lp asset").quantity)
617617 let eJ = if ((eI > e))
618618 then true
619619 else throw("initial deposit requires all coins")
620620 if ((eJ == eJ))
621621 then {
622622 let cu = bx(co)
623623 let cw = bx(cp)
624624 let eK = if ((aa == ""))
625625 then $Tuple2(cu, cw)
626626 else if ((ck == co))
627627 then if ((eG > cu))
628628 then throw("invalid payment amount")
629629 else $Tuple2((cu - eG), cw)
630630 else if ((ck == cp))
631631 then if ((eG > cw))
632632 then throw("invalid payment amount")
633633 else $Tuple2(cu, (cw - eG))
634634 else throw("wrong pmtAssetId")
635635 let eL = eK._1
636636 let eM = eK._2
637637 let eN = if ((ck == co))
638638 then $Tuple2(eG, 0)
639639 else if ((ck == cp))
640640 then $Tuple2(0, eG)
641641 else throw("invalid payment")
642642 let eO = eN._1
643643 let eP = eN._2
644644 let eQ = if (eH)
645645 then $Tuple3(cf(eO)._1, cf(eP)._1, cf(eG)._2)
646646 else $Tuple3(eO, eP, 0)
647647 let eR = eQ._1
648648 let eS = eQ._2
649649 let ch = eQ._3
650650 let eT = (eL + eR)
651651 let eU = (eM + eS)
652652 let bK = dQ([toBigInt(eL), toBigInt(eM)])
653653 let bJ = dQ([toBigInt(eT), toBigInt(eU)])
654654 let eV = if ((bJ > bK))
655655 then true
656656 else throw()
657657 if ((eV == eV))
658658 then {
659659 let eW = fraction(eI, (bJ - bK), bK)
660660 let cz = I(bz(F(eU, cX), F(eT, cW)), a)
661661 let dv = [IntegerEntry(U(), cz), IntegerEntry(V(height, lastBlock.timestamp), cz), StringEntry(Y(cm, aa), bi(eO, eP, toInt(eW), cz, 0, 0, height, lastBlock.timestamp, 0, 0))]
662662 let eX = fraction(eM, a, eL)
663663 let eY = fraction(eG, a, (eX + a))
664664 let eZ = (eG - eY)
665665 let fa = fraction(eI, toBigInt(eZ), toBigInt(eM))
666666 let fb = toInt(fraction((eW - fa), b, fa))
667667 $Tuple4(toInt(eW), dv, ch, fb)
668668 }
669669 else throw("Strict value is not equal to itself.")
670670 }
671671 else throw("Strict value is not equal to itself.")
672672 }
673673
674674
675675 func fc (fd,fe,ff,dN,fg,fh) = {
676676 let aS = aK()
677677 let cn = aS[t]
678678 let co = aS[u]
679679 let cp = aS[v]
680680 let fi = parseIntValue(aS[w])
681681 let fj = parseIntValue(aS[x])
682682 let fk = aS[s]
683683 let cm = if ((dN == bh))
684684 then fg
685685 else dN
686686 let dL = value(ff[0])
687687 let ck = value(dL.assetId)
688688 let cQ = dL.amount
689689 let cj = toBase58String(fh)
690690 if ((cn != toBase58String(ck)))
691691 then throw("Wrong LP")
692692 else {
693693 let cu = bx(co)
694694 let cw = bx(cp)
695695 let fl = {
696696 let fm = invoke(this, "getOneTknV2READONLY", [fd, cQ], nil)
697697 if ($isInstanceOf(fm, "(Int, Int)"))
698698 then fm
699699 else throw(($getType(fm) + " couldn't be cast to (Int, Int)"))
700700 }
701- if ((fl == fl))
701+ let fn = fl._1
702+ let ch = fl._2
703+ let fo = if (if ((fe > 0))
704+ then (fe > fn)
705+ else false)
706+ then aD(makeString(["amount to receive is less than ", toString(fe)], ""))
707+ else fn
708+ let fp = if ((fd == co))
709+ then $Tuple4(fo, 0, ((cu - fo) - ch), cw)
710+ else if ((fd == cp))
711+ then $Tuple4(0, fo, cu, ((cw - fo) - ch))
712+ else throw("invalid out asset id")
713+ let fq = fp._1
714+ let fr = fp._2
715+ let eT = fp._3
716+ let eU = fp._4
717+ let fs = bz(F(eU, fj), F(eT, fi))
718+ let ft = I(fs, a)
719+ let fu = if ((fd == "WAVES"))
720+ then unit
721+ else fromBase58String(fd)
722+ let fv = if ((ch > 0))
723+ then [ScriptTransfer(aJ, ch, fu)]
724+ else nil
725+ let cG = ([ScriptTransfer(cm, fo, fu), StringEntry(ab(toString(cm), cj), bt(fq, fr, cQ, ft, height, lastBlock.timestamp)), IntegerEntry(U(), ft), IntegerEntry(V(height, lastBlock.timestamp), ft)] ++ fv)
726+ if ((cG == cG))
702727 then {
703- let ch = fl._2
704- let fn = fl._1
705- let fo = if (if ((fe > 0))
706- then (fe > fn)
707- else false)
708- then aD(makeString(["amount to receive is less than ", toString(fe)], ""))
709- else fn
710- let fp = if ((fd == co))
711- then $Tuple4(fo, 0, ((cu - fo) - ch), cw)
712- else if ((fd == cp))
713- then $Tuple4(0, fo, cu, ((cw - fo) - ch))
714- else throw("invalid out asset id")
715- let fq = fp._1
716- let fr = fp._2
717- let eT = fp._3
718- let eU = fp._4
719- let fs = bz(F(eU, fj), F(eT, fi))
720- let ft = I(fs, a)
721- let fu = if ((fd == "WAVES"))
722- then unit
723- else fromBase58String(fd)
724- let fv = if ((ch > 0))
725- then [ScriptTransfer(aJ, ch, fu)]
726- else nil
727- let cG = ([ScriptTransfer(cm, fo, fu), StringEntry(ab(toString(cm), cj), bt(fq, fr, cQ, ft, height, lastBlock.timestamp)), IntegerEntry(U(), ft), IntegerEntry(V(height, lastBlock.timestamp), ft)] ++ fv)
728- if ((cG == cG))
729- then {
730- let fw = invoke(aF, "burn", [cQ], [AttachedPayment(ck, cQ)])
731- if ((fw == fw))
732- then $Tuple2(cG, fo)
733- else throw("Strict value is not equal to itself.")
734- }
728+ let fw = invoke(aF, "burn", [cQ], [AttachedPayment(ck, cQ)])
729+ if ((fw == fw))
730+ then $Tuple2(cG, fo)
735731 else throw("Strict value is not equal to itself.")
736732 }
737733 else throw("Strict value is not equal to itself.")
738734 }
739735 }
740736
741737
742738 func fx () = {
743739 let ax = getString(S())
744740 if ($isInstanceOf(ax, "String"))
745741 then {
746742 let dX = ax
747743 fromBase58String(dX)
748744 }
749745 else if ($isInstanceOf(ax, "Unit"))
750746 then unit
751747 else throw("Match error")
752748 }
753749
754750
755751 func fy () = {
756752 let ax = getString(T())
757753 if ($isInstanceOf(ax, "String"))
758754 then {
759755 let dX = ax
760756 fromBase58String(dX)
761757 }
762758 else if ($isInstanceOf(ax, "Unit"))
763759 then unit
764760 else throw("Match error")
765761 }
766762
767763
768764 let fz = throw("Permission denied")
769765
770766 func fA (dK) = {
771767 let ax = fx()
772768 if ($isInstanceOf(ax, "ByteVector"))
773769 then {
774770 let fB = ax
775771 (dK.callerPublicKey == fB)
776772 }
777773 else if ($isInstanceOf(ax, "Unit"))
778774 then (dK.caller == this)
779775 else throw("Match error")
780776 }
781777
782778
783779 func fC (dK) = {
784780 let ax = fx()
785781 if ($isInstanceOf(ax, "ByteVector"))
786782 then {
787783 let fB = ax
788784 if ((dK.callerPublicKey == fB))
789785 then true
790786 else fz
791787 }
792788 else if ($isInstanceOf(ax, "Unit"))
793789 then if ((dK.caller == this))
794790 then true
795791 else fz
796792 else throw("Match error")
797793 }
798794
799795
800796 @Callable(dK)
801797 func constructor (R) = {
802798 let ey = fC(dK)
803799 if ((ey == ey))
804800 then [StringEntry(R(), R)]
805801 else throw("Strict value is not equal to itself.")
806802 }
807803
808804
809805
810806 @Callable(dK)
811807 func setManager (fD) = {
812808 let ey = fC(dK)
813809 if ((ey == ey))
814810 then {
815811 let fE = fromBase58String(fD)
816812 if ((fE == fE))
817813 then [StringEntry(T(), fD)]
818814 else throw("Strict value is not equal to itself.")
819815 }
820816 else throw("Strict value is not equal to itself.")
821817 }
822818
823819
824820
825821 @Callable(dK)
826822 func confirmManager () = {
827823 let ce = fy()
828824 let fF = if (isDefined(ce))
829825 then true
830826 else throw("No pending manager")
831827 if ((fF == fF))
832828 then {
833829 let fG = if ((dK.callerPublicKey == value(ce)))
834830 then true
835831 else throw("You are not pending manager")
836832 if ((fG == fG))
837833 then [StringEntry(S(), toBase58String(value(ce))), DeleteEntry(T())]
838834 else throw("Strict value is not equal to itself.")
839835 }
840836 else throw("Strict value is not equal to itself.")
841837 }
842838
843839
844840
845841 @Callable(dK)
846842 func put (fH,fI) = {
847843 let fJ = bc()
848844 let fK = valueOrErrorMessage(addressFromString(fJ[A]), "Wr st addr")
849845 let fL = valueOrErrorMessage(addressFromString(fJ[C]), "Wr sl addr")
850846 if ((0 > fH))
851847 then throw("Wrong slippage")
852848 else if ((size(dK.payments) != 2))
853849 then throw("2 pmnts expd")
854850 else {
855851 let fM = dM(toString(dK.caller), toBase58String(dK.transactionId), AttachedPayment(value(dK.payments[0]).assetId, value(dK.payments[0]).amount), dK.payments[1], fH, true, false, true, 0, "")
856852 let dp = fM._2
857853 let fN = fM._7
858854 let cG = fM._9
859855 let dq = fM._10
860856 let dr = fM._11
861857 let co = fM._12
862858 let cp = fM._13
863859 let dc = invoke(aF, "emit", [dp], nil)
864860 if ((dc == dc))
865861 then {
866862 let fO = {
867863 let ax = dc
868864 if ($isInstanceOf(ax, "Address"))
869865 then {
870866 let fP = ax
871867 invoke(fP, "emit", [dp], nil)
872868 }
873869 else unit
874870 }
875871 if ((fO == fO))
876872 then {
877873 let fQ = if ((dq > 0))
878874 then invoke(fL, "put", nil, [AttachedPayment(co, dq)])
879875 else nil
880876 if ((fQ == fQ))
881877 then {
882878 let fR = if ((dr > 0))
883879 then invoke(fL, "put", nil, [AttachedPayment(cp, dr)])
884880 else nil
885881 if ((fR == fR))
886882 then {
887883 let fS = if (fI)
888884 then {
889885 let fT = invoke(fK, "stake", nil, [AttachedPayment(fN, dp)])
890886 if ((fT == fT))
891887 then nil
892888 else throw("Strict value is not equal to itself.")
893889 }
894890 else [ScriptTransfer(dK.caller, dp, fN)]
895891 (cG ++ fS)
896892 }
897893 else throw("Strict value is not equal to itself.")
898894 }
899895 else throw("Strict value is not equal to itself.")
900896 }
901897 else throw("Strict value is not equal to itself.")
902898 }
903899 else throw("Strict value is not equal to itself.")
904900 }
905901 }
906902
907903
908904
909905 @Callable(dK)
910906 func putOneTknV2 (fe,fI) = {
911907 let fU = {
912908 let fm = invoke(aF, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
913909 if ($isInstanceOf(fm, "Boolean"))
914910 then fm
915911 else throw(($getType(fm) + " couldn't be cast to Boolean"))
916912 }
917913 let fV = if (if (if (aH())
918914 then true
919915 else (aW == o))
920916 then true
921917 else (aW == q))
922918 then true
923919 else fU
924920 let fW = [if (if (!(fV))
925921 then true
926922 else fA(dK))
927923 then true
928924 else aD("put operation is blocked by admin"), if ((size(dK.payments) == 1))
929925 then true
930926 else aD("exactly 1 payment are expected")]
931927 if ((fW == fW))
932928 then {
933929 let aS = aK()
934930 let co = aS[u]
935931 let cp = aS[v]
936932 let cn = fromBase58String(aS[t])
937933 let fi = parseIntValue(aS[w])
938934 let fj = parseIntValue(aS[x])
939935 let cm = if ((dK.caller == this))
940936 then dK.originCaller
941937 else dK.caller
942938 let dL = value(dK.payments[0])
943939 let ck = toBase58String(value(dL.assetId))
944940 let cQ = dL.amount
945941 let fX = eF(cQ, ck, toString(cm), toBase58String(dK.transactionId), true)
946- if ((fX == fX))
942+ let fY = fX._1
943+ let cG = fX._2
944+ let ch = fX._3
945+ let dp = if (if ((fe > 0))
946+ then (fe > fY)
947+ else false)
948+ then aD(makeString(["amount to receive is less than ", toString(fe)], ""))
949+ else fY
950+ let fM = invoke(aF, "emit", [dp], nil)
951+ if ((fM == fM))
947952 then {
948- let ch = fX._3
949- let cG = fX._2
950- let fY = fX._1
951- let dp = if (if ((fe > 0))
952- then (fe > fY)
953- else false)
954- then aD(makeString(["amount to receive is less than ", toString(fe)], ""))
955- else fY
956- let fM = invoke(aF, "emit", [dp], nil)
957- if ((fM == fM))
953+ let fO = {
954+ let ax = fM
955+ if ($isInstanceOf(ax, "Address"))
956+ then {
957+ let fP = ax
958+ invoke(fP, "emit", [dp], nil)
959+ }
960+ else unit
961+ }
962+ if ((fO == fO))
958963 then {
959- let fO = {
960- let ax = fM
961- if ($isInstanceOf(ax, "Address"))
962- then {
963- let fP = ax
964- invoke(fP, "emit", [dp], nil)
965- }
966- else unit
967- }
968- if ((fO == fO))
964+ let fS = if (fI)
969965 then {
970- let fS = if (fI)
971- then {
972- let fT = invoke(be, "stake", nil, [AttachedPayment(cn, dp)])
973- if ((fT == fT))
974- then nil
975- else throw("Strict value is not equal to itself.")
976- }
977- else [ScriptTransfer(dK.caller, dp, cn)]
978- let fv = if ((ch > 0))
979- then [ScriptTransfer(aJ, ch, fromBase58String(ck))]
980- else nil
981- $Tuple2(((cG ++ fS) ++ fv), dp)
966+ let fT = invoke(be, "stake", nil, [AttachedPayment(cn, dp)])
967+ if ((fT == fT))
968+ then nil
969+ else throw("Strict value is not equal to itself.")
982970 }
983- else throw("Strict value is not equal to itself.")
971+ else [ScriptTransfer(dK.caller, dp, cn)]
972+ let fv = if ((ch > 0))
973+ then [ScriptTransfer(aJ, ch, fromBase58String(ck))]
974+ else nil
975+ $Tuple2(((cG ++ fS) ++ fv), dp)
984976 }
985977 else throw("Strict value is not equal to itself.")
986978 }
987979 else throw("Strict value is not equal to itself.")
988980 }
989981 else throw("Strict value is not equal to itself.")
990982 }
991983
992984
993985
994986 @Callable(dK)
995987 func putForFree (fZ) = if ((0 > fZ))
996988 then throw("Wrong slpg")
997989 else if ((size(dK.payments) != 2))
998990 then throw("2 pmnts expd")
999991 else {
1000992 let ga = dM(toString(dK.caller), toBase58String(dK.transactionId), AttachedPayment(value(dK.payments[0]).assetId, value(dK.payments[0]).amount), dK.payments[1], fZ, false, false, true, 0, "")
1001993 ga._9
1002994 }
1003995
1004996
1005997
1006998 @Callable(dK)
1007999 func get () = {
10081000 let dc = dJ(dK)
10091001 let gb = dc._1
10101002 let cF = dc._2
10111003 let cQ = dc._3
10121004 let ck = dc._4
10131005 let cG = dc._5
10141006 let ez = invoke(aF, "burn", [cQ], [AttachedPayment(ck, cQ)])
10151007 if ((ez == ez))
10161008 then cG
10171009 else throw("Strict value is not equal to itself.")
10181010 }
10191011
10201012
10211013
10221014 @Callable(dK)
10231015 func getOneTknV2 (fd,fe) = {
10241016 let fU = {
10251017 let fm = invoke(aF, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
10261018 if ($isInstanceOf(fm, "Boolean"))
10271019 then fm
10281020 else throw(($getType(fm) + " couldn't be cast to Boolean"))
10291021 }
10301022 let gc = if (if (aH())
10311023 then true
10321024 else (aW == q))
10331025 then true
10341026 else fU
10351027 let fW = [if (if (!(gc))
10361028 then true
10371029 else fA(dK))
10381030 then true
10391031 else aD("get operation is blocked by admin"), if ((size(dK.payments) == 1))
10401032 then true
10411033 else aD("exactly 1 payment are expected")]
10421034 if ((fW == fW))
10431035 then {
10441036 let gd = fc(fd, fe, dK.payments, dK.caller, dK.originCaller, dK.transactionId)
10451037 let cG = gd._1
10461038 let fo = gd._2
10471039 $Tuple2(cG, fo)
10481040 }
10491041 else throw("Strict value is not equal to itself.")
10501042 }
1043+
1044+
1045+
1046+@Callable(dK)
1047+func refreshDlp () = nil
10511048
10521049
10531050
10541051 @Callable(dK)
10551052 func getOneTknV2READONLY (fd,ge) = {
10561053 let aS = aK()
10571054 let co = aS[u]
10581055 let cp = aS[v]
10591056 let cn = aS[t]
10601057 let dR = [toBigInt(bx(co)), toBigInt(bx(cp))]
10611058 let gf = toBigInt(valueOrErrorMessage(assetInfo(fromBase58String(cn)), "invalid lp asset").quantity)
10621059 let bK = dQ(dR)
10631060 let bJ = (bK - fraction(toBigInt(ge), bK, gf))
10641061 let gg = if ((fd == co))
10651062 then 0
10661063 else if ((fd == cp))
10671064 then 1
10681065 else throw("invalid out asset id")
10691066 let gh = ev(dR, gg, bJ)
10701067 let gi = (dR[gg] - gh)
10711068 let gj = max([0, toInt((gi - f))])
10721069 let gk = cf(gj)
10731070 let fn = gk._1
10741071 let ch = gk._2
10751072 $Tuple2(nil, $Tuple2(fn, ch))
10761073 }
10771074
10781075
10791076
10801077 @Callable(dK)
10811078 func getOneTknV2WithBonusREADONLY (fd,ge) = {
10821079 let aS = aK()
10831080 let co = aS[u]
10841081 let cp = aS[v]
10851082 let cn = aS[t]
10861083 let cu = bx(co)
10871084 let cw = bx(cp)
10881085 let gl = {
10891086 let fm = invoke(this, "getOneTknV2READONLY", [fd, ge], nil)
10901087 if ($isInstanceOf(fm, "(Int, Int)"))
10911088 then fm
10921089 else throw(($getType(fm) + " couldn't be cast to (Int, Int)"))
10931090 }
10941091 let fn = gl._1
10951092 let ch = gl._2
10961093 let dc = ci("", cn, ge, this)
10971094 let cE = dc._1
10981095 let cF = dc._2
10991096 let gm = (cE + cF)
11001097 let fb = if ((gm == 0))
11011098 then if ((fn == 0))
11021099 then 0
11031100 else throw("bonus calculation error")
11041101 else fraction((fn - gm), a, gm)
11051102 $Tuple2(nil, $Tuple3(fn, ch, fb))
11061103 }
11071104
11081105
11091106
11101107 @Callable(dK)
11111108 func getNoLess (gn,go) = {
11121109 let dc = dJ(dK)
11131110 let cE = dc._1
11141111 let cF = dc._2
11151112 let cQ = dc._3
11161113 let ck = dc._4
11171114 let cG = dc._5
11181115 if ((gn > cE))
11191116 then throw(((("Failed: " + toString(cE)) + " < ") + toString(gn)))
11201117 else if ((go > cF))
11211118 then throw(((("Failed: " + toString(cF)) + " < ") + toString(go)))
11221119 else {
11231120 let gp = invoke(aF, "burn", [cQ], [AttachedPayment(ck, cQ)])
11241121 if ((gp == gp))
11251122 then cG
11261123 else throw("Strict value is not equal to itself.")
11271124 }
11281125 }
11291126
11301127
11311128
11321129 @Callable(dK)
11331130 func unstakeAndGet (cg) = {
11341131 let gq = if ((size(dK.payments) != 0))
11351132 then throw("No pmnts expd")
11361133 else true
11371134 if ((gq == gq))
11381135 then {
11391136 let bW = aK()
11401137 let gr = bc()
11411138 let fN = fromBase58String(bW[t])
11421139 let gs = valueOrErrorMessage(addressFromString(gr[A]), "Wr st addr")
11431140 let gt = invoke(gs, "unstake", [toBase58String(fN), cg], nil)
11441141 if ((gt == gt))
11451142 then {
11461143 let dc = ci(toBase58String(dK.transactionId), toBase58String(fN), cg, dK.caller)
11471144 let cs = parseIntValue(dc._9)
11481145 let cG = dc._10
11491146 let gu = if (if (aH())
11501147 then true
11511148 else (cs == q))
11521149 then throw(("Blocked: " + toString(cs)))
11531150 else true
11541151 if ((gu == gu))
11551152 then {
11561153 let gv = invoke(aF, "burn", [cg], [AttachedPayment(fN, cg)])
11571154 if ((gv == gv))
11581155 then cG
11591156 else throw("Strict value is not equal to itself.")
11601157 }
11611158 else throw("Strict value is not equal to itself.")
11621159 }
11631160 else throw("Strict value is not equal to itself.")
11641161 }
11651162 else throw("Strict value is not equal to itself.")
11661163 }
11671164
11681165
11691166
11701167 @Callable(dK)
11711168 func unstakeAndGetNoLess (gw,gx,go) = {
11721169 let gc = if (aH())
11731170 then true
11741171 else (aW == q)
11751172 let fW = [if (!(gc))
11761173 then true
11771174 else throw("get operation is blocked by admin"), if ((size(dK.payments) == 0))
11781175 then true
11791176 else throw("no payments are expected")]
11801177 if ((fW == fW))
11811178 then {
11821179 let gt = invoke(be, "unstake", [toBase58String(aX), gw], nil)
11831180 if ((gt == gt))
11841181 then {
11851182 let gy = ci(toBase58String(dK.transactionId), toBase58String(aX), gw, dK.caller)
11861183 let cE = gy._1
11871184 let cF = gy._2
11881185 let cG = gy._10
11891186 let gz = [if ((cE >= gx))
11901187 then true
11911188 else throw(makeString(["amount asset amount to receive is less than ", toString(gx)], "")), if ((cF >= go))
11921189 then true
11931190 else throw(makeString(["price asset amount to receive is less than ", toString(go)], ""))]
11941191 if ((gz == gz))
11951192 then {
11961193 let gp = invoke(aF, "burn", [gw], [AttachedPayment(aX, gw)])
11971194 if ((gp == gp))
11981195 then cG
11991196 else throw("Strict value is not equal to itself.")
12001197 }
12011198 else throw("Strict value is not equal to itself.")
12021199 }
12031200 else throw("Strict value is not equal to itself.")
12041201 }
12051202 else throw("Strict value is not equal to itself.")
12061203 }
12071204
12081205
12091206
12101207 @Callable(dK)
12111208 func unstakeAndGetOneTknV2 (gw,fd,fe) = {
12121209 let fU = {
12131210 let fm = invoke(aF, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
12141211 if ($isInstanceOf(fm, "Boolean"))
12151212 then fm
12161213 else throw(($getType(fm) + " couldn't be cast to Boolean"))
12171214 }
12181215 let gc = if (if (aH())
12191216 then true
12201217 else (aW == q))
12211218 then true
12221219 else fU
12231220 let fW = [if (if (!(gc))
12241221 then true
12251222 else fA(dK))
12261223 then true
12271224 else aD("get operation is blocked by admin"), if ((size(dK.payments) == 0))
12281225 then true
12291226 else aD("no payments are expected")]
12301227 if ((fW == fW))
12311228 then {
12321229 let bW = aK()
12331230 let gr = bc()
12341231 let fN = fromBase58String(bW[t])
12351232 let gs = valueOrErrorMessage(addressFromString(gr[A]), "Wr st addr")
12361233 let gt = invoke(gs, "unstake", [toBase58String(fN), gw], nil)
12371234 if ((gt == gt))
12381235 then {
12391236 let gA = fc(fd, fe, [AttachedPayment(fN, gw)], dK.caller, dK.originCaller, dK.transactionId)
12401237 let cG = gA._1
12411238 let fo = gA._2
12421239 $Tuple2(cG, fo)
12431240 }
12441241 else throw("Strict value is not equal to itself.")
12451242 }
12461243 else throw("Strict value is not equal to itself.")
12471244 }
12481245
12491246
12501247
12511248 @Callable(dK)
12521249 func putOneTknV2WithBonusREADONLY (gB,gC) = {
12531250 let aS = aK()
12541251 let co = aS[u]
12551252 let cp = aS[v]
12561253 let cn = aS[t]
12571254 let gD = eF(gB, gC, "", "", true)
12581255 let eW = gD._1
12591256 let cG = gD._2
12601257 let ch = gD._3
12611258 let fb = gD._4
12621259 $Tuple2(nil, $Tuple3(eW, ch, fb))
12631260 }
12641261
12651262
12661263
12671264 @Callable(dK)
12681265 func putOneTknV2WithoutTakeFeeREADONLY (gB,gC) = {
12691266 let aS = aK()
12701267 let co = aS[u]
12711268 let cp = aS[v]
12721269 let cn = aS[t]
12731270 let gE = eF(gB, gC, "", "", false)
12741271 let eW = gE._1
12751272 let cG = gE._2
12761273 let ch = gE._3
12771274 let fb = gE._4
12781275 $Tuple2(nil, $Tuple3(eW, ch, fb))
12791276 }
12801277
12811278
12821279
12831280 @Callable(dK)
12841281 func activate (gF,gG) = if ((toString(dK.caller) != toString(aF)))
12851282 then throw("denied")
12861283 else $Tuple2([StringEntry(ac(), gF), StringEntry(ad(), gG)], "success")
12871284
12881285
12891286
12901287 @Callable(dK)
12911288 func setS (gH,gu) = if ((toString(dK.caller) != az(this, af())))
12921289 then fz
12931290 else [StringEntry(gH, gu)]
12941291
12951292
12961293
12971294 @Callable(dK)
12981295 func setI (gH,gu) = if ((toString(dK.caller) != az(this, af())))
12991296 then fz
13001297 else [IntegerEntry(gH, gu)]
13011298
13021299
13031300
13041301 @Callable(dK)
13051302 func getPoolConfigWrapperREADONLY () = $Tuple2(nil, aK())
13061303
13071304
13081305
13091306 @Callable(dK)
13101307 func getAccBalanceWrapperREADONLY (by) = $Tuple2(nil, bx(by))
13111308
13121309
13131310
13141311 @Callable(dK)
13151312 func calcPricesWrapperREADONLY (bQ,bR,bV) = {
13161313 let gI = bU(bQ, bR, bV)
13171314 $Tuple2(nil, [toString(gI[0]), toString(gI[1]), toString(gI[2])])
13181315 }
13191316
13201317
13211318
13221319 @Callable(dK)
13231320 func fromX18WrapperREADONLY (J,gJ) = $Tuple2(nil, I(parseBigIntValue(J), gJ))
13241321
13251322
13261323
13271324 @Callable(dK)
13281325 func toX18WrapperREADONLY (G,H) = $Tuple2(nil, toString(F(G, H)))
13291326
13301327
13311328
13321329 @Callable(dK)
13331330 func calcPriceBigIntWrapperREADONLY (bA,bB) = $Tuple2(nil, toString(bz(parseBigIntValue(bA), parseBigIntValue(bB))))
13341331
13351332
13361333
13371334 @Callable(dK)
13381335 func estimatePutOperationWrapperREADONLY (cj,bF,cI,cJ,cK,cL,gK,cM,cN) = $Tuple2(nil, cH(cj, bF, cI, cJ, cK, cL, gK, cM, cN, true, false, 0, ""))
13391336
13401337
13411338
13421339 @Callable(dK)
13431340 func estimateGetOperationWrapperREADONLY (cj,gL,cl,gK) = {
13441341 let dc = ci(cj, gL, cl, addressFromStringValue(gK))
13451342 $Tuple2(nil, $Tuple10(dc._1, dc._2, dc._3, dc._4, dc._5, dc._6, dc._7, toString(dc._8), dc._9, dc._10))
13461343 }
13471344
13481345
13491346
13501347 @Callable(dK)
13511348 func getFeeREADONLY () = $Tuple2(nil, ah)
13521349
13531350
13541351 @Verifier(gM)
13551352 func gN () = {
13561353 let gO = {
13571354 let ax = fx()
13581355 if ($isInstanceOf(ax, "ByteVector"))
13591356 then {
13601357 let fB = ax
13611358 fB
13621359 }
13631360 else if ($isInstanceOf(ax, "Unit"))
13641361 then gM.senderPublicKey
13651362 else throw("Match error")
13661363 }
13671364 let ax = gM
13681365 if ($isInstanceOf(ax, "Order"))
13691366 then {
13701367 let dx = ax
13711368 let gP = aI()
13721369 let gQ = dw(dx)
13731370 let gR = sigVerify(dx.bodyBytes, dx.proofs[0], dx.senderPublicKey)
13741371 let gS = sigVerify(dx.bodyBytes, dx.proofs[1], gP)
13751372 if (if (if (gQ)
13761373 then gR
13771374 else false)
13781375 then gS
13791376 else false)
13801377 then true
13811378 else as(gQ, gR, gS)
13821379 }
13831380 else if ($isInstanceOf(ax, "SetScriptTransaction"))
13841381 then {
13851382 let dX = ax
13861383 let gT = blake2b256(value(dX.script))
13871384 let gU = fromBase64String(value(getString(aF, aq())))
13881385 let gV = scriptHash(this)
13891386 if (if ((gU == gT))
13901387 then (gV != gT)
13911388 else false)
13921389 then true
13931390 else sigVerify(gM.bodyBytes, gM.proofs[0], gO)
13941391 }
13951392 else sigVerify(gM.bodyBytes, gM.proofs[0], gO)
13961393 }
13971394

github/deemru/w8io/169f3d6 
144.76 ms