tx · HGZ2CAgzanPgqCjsWFqeBrkAaDF3cEErpndPzLAFjDr4

3Mqo3c7G5qkBfvMMLhriequKQFofhJSP9ip:  -0.04300000 Waves

2024.04.17 09:31 [3066417] smart account 3Mqo3c7G5qkBfvMMLhriequKQFofhJSP9ip > SELF 0.00000000 Waves

{ "type": 13, "id": "HGZ2CAgzanPgqCjsWFqeBrkAaDF3cEErpndPzLAFjDr4", "fee": 4300000, "feeAssetId": null, "timestamp": 1713335520654, "version": 2, "chainId": 84, "sender": "3Mqo3c7G5qkBfvMMLhriequKQFofhJSP9ip", "senderPublicKey": "5A4c5wG6NUWakcEewdfBkkZSvSdZRqo9onS5bqQrv3x1", "proofs": [ "3BZrjtuV5hMggvoFeHgfERknumt5mBykiX111wSyecbeC849hic7oVnkpBxDGMUA8y8f7TfxijQswaoJHBYSX1JE" ], "script": "base64:BgLjOAgCEgASBQoDAQQBEgcKBQEEAQgBEgQKAgEEEgMKAQESBAoCAQQSBAoCCAESBAoCCAESBAoCCAESBQoDAQgBEgASBAoCAQESAwoBARIFCgMBAQESBAoCCAgSABIAEgMKAQgSBQoDAQEBEgQKAgEBEgQKAggBEgQKAggIEgsKCQgBAQIBAggEBBIGCgQICAEIEgASAwoBARIDCgEBEgQKAggBIgpsUGRlY2ltYWxzIgZzY2FsZTgiDHNjYWxlOEJpZ0ludCIHc2NhbGUxOCIKemVyb0JpZ0ludCIEYmlnMCIEYmlnMSIEYmlnMiILd2F2ZXNTdHJpbmciA1NFUCIKUG9vbEFjdGl2ZSIPUG9vbFB1dERpc2FibGVkIhNQb29sTWF0Y2hlckRpc2FibGVkIgxQb29sU2h1dGRvd24iDmlkeFBvb2xBZGRyZXNzIg1pZHhQb29sU3RhdHVzIhBpZHhQb29sTFBBc3NldElkIg1pZHhBbXRBc3NldElkIg9pZHhQcmljZUFzc2V0SWQiDmlkeEFtdEFzc2V0RGNtIhBpZHhQcmljZUFzc2V0RGNtIg5pZHhJQW10QXNzZXRJZCIQaWR4SVByaWNlQXNzZXRJZCINaWR4TFBBc3NldERjbSISaWR4UG9vbEFtdEFzc2V0QW10IhRpZHhQb29sUHJpY2VBc3NldEFtdCIRaWR4UG9vbExQQXNzZXRBbXQiGWlkeEZhY3RvcnlTdGFraW5nQ29udHJhY3QiGmlkeEZhY3RvcnlTbGlwcGFnZUNvbnRyYWN0IgV0b1gxOCIHb3JpZ1ZhbCINb3JpZ1NjYWxlTXVsdCILdG9YMThCaWdJbnQiB2Zyb21YMTgiA3ZhbCIPcmVzdWx0U2NhbGVNdWx0Igxmcm9tWDE4Um91bmQiBXJvdW5kIgd0b1NjYWxlIgNhbXQiCHJlc1NjYWxlIghjdXJTY2FsZSIDYWJzIglhYnNCaWdJbnQiDHN3YXBDb250cmFjdCICZmMiE2tleU1hbmFnZXJQdWJsaWNLZXkiFmtleU1hbmFnZXJWYXVsdEFkZHJlc3MiAnBsIgJwaCIBaCIJdGltZXN0YW1wIgNwYXUiC3VzZXJBZGRyZXNzIgR0eElkIgNnYXUiAmFhIgJwYSIGa2V5RmVlIgpmZWVEZWZhdWx0IgNmZWUiBmtleUtMcCIVa2V5S0xwUmVmcmVzaGVkSGVpZ2h0IhJrZXlLTHBSZWZyZXNoRGVsYXkiFmtMcFJlZnJlc2hEZWxheURlZmF1bHQiD2tMcFJlZnJlc2hEZWxheSIUa2V5QWRkaXRpb25hbEJhbGFuY2UiB2Fzc2V0SWQiFmtleVN0YWtpbmdBc3NldEJhbGFuY2UiGmdldEFkZGl0aW9uYWxCYWxhbmNlT3JaZXJvIhxnZXRTdGFraW5nQXNzZXRCYWxhbmNlT3JaZXJvIhBrZXlGYWN0b3J5Q29uZmlnIg1rZXlNYXRjaGVyUHViIilrZXlNYXBwaW5nUG9vbENvbnRyYWN0QWRkcmVzc1RvUG9vbEFzc2V0cyITcG9vbENvbnRyYWN0QWRkcmVzcyINa2V5UG9vbENvbmZpZyIJaUFtdEFzc2V0IgtpUHJpY2VBc3NldCIfa2V5TWFwcGluZ3NCYXNlQXNzZXQyaW50ZXJuYWxJZCIMYmFzZUFzc2V0U3RyIhNrZXlBbGxQb29sc1NodXRkb3duIg1rZXlQb29sV2VpZ2h0Ig9jb250cmFjdEFkZHJlc3MiFmtleUFsbG93ZWRMcFNjcmlwdEhhc2giFmtleUZlZUNvbGxlY3RvckFkZHJlc3MiFmtleVNraXBPcmRlclZhbGlkYXRpb24iC3Bvb2xBZGRyZXNzIg90aHJvd09yZGVyRXJyb3IiCm9yZGVyVmFsaWQiDm9yZGVyVmFsaWRJbmZvIgtzZW5kZXJWYWxpZCIMbWF0Y2hlclZhbGlkIhdhZGRyZXNzRnJvbVN0cmluZ09yVGhpcyINYWRkcmVzc1N0cmluZyIHJG1hdGNoMCIBYSIcZ2V0TWFuYWdlclZhdWx0QWRkcmVzc09yVGhpcyIOZmFjdG9yeUFkZHJlc3MiA2ZjYSIBcyIPZ2V0U3RyaW5nT3JGYWlsIgdhZGRyZXNzIgNrZXkiDGdldEludE9yRmFpbCIIdGhyb3dFcnIiA21zZyIGZm10RXJyIg9mYWN0b3J5Q29udHJhY3QiE2ZlZUNvbGxlY3RvckFkZHJlc3MiBWluRmVlIgFAIgZvdXRGZWUiFWtleUFkZHJlc3NXaGl0ZWxpc3RlZCIUaXNBZGRyZXNzV2hpdGVsaXN0ZWQiEGlzR2xvYmFsU2h1dGRvd24iE2dldE1hdGNoZXJQdWJPckZhaWwiDWdldFBvb2xDb25maWciCGFtdEFzc2V0IgpwcmljZUFzc2V0IgxwYXJzZUFzc2V0SWQiBWlucHV0Ig9hc3NldElkVG9TdHJpbmciD3BhcnNlUG9vbENvbmZpZyIKcG9vbENvbmZpZyIQcG9vbENvbmZpZ1BhcnNlZCILJHQwOTc2OTk5MzUiDmNmZ1Bvb2xBZGRyZXNzIg1jZmdQb29sU3RhdHVzIgxjZmdMcEFzc2V0SWQiEGNmZ0Ftb3VudEFzc2V0SWQiD2NmZ1ByaWNlQXNzZXRJZCIWY2ZnQW1vdW50QXNzZXREZWNpbWFscyIVY2ZnUHJpY2VBc3NldERlY2ltYWxzIhBnZXRGYWN0b3J5Q29uZmlnIg9zdGFraW5nQ29udHJhY3QiEHNsaXBwYWdlQ29udHJhY3QiEWRhdGFQdXRBY3Rpb25JbmZvIg1pbkFtdEFzc2V0QW10Ig9pblByaWNlQXNzZXRBbXQiCG91dExwQW10IgVwcmljZSIdc2xpcHBhZ2VUb2xlcmFuY2VQYXNzZWRCeVVzZXIiFXNsaXBwYWdlVG9sZXJhbmNlUmVhbCIIdHhIZWlnaHQiC3R4VGltZXN0YW1wIhJzbGlwYWdlQW10QXNzZXRBbXQiFHNsaXBhZ2VQcmljZUFzc2V0QW10IhFkYXRhR2V0QWN0aW9uSW5mbyIOb3V0QW10QXNzZXRBbXQiEG91dFByaWNlQXNzZXRBbXQiB2luTHBBbXQiDWdldEFjY0JhbGFuY2UiDWJhbGFuY2VPblBvb2wiDHRvdGFsQmFsYW5jZSIPY2FsY1ByaWNlQmlnSW50IghwckFtdFgxOCIIYW1BbXRYMTgiFGNhbGNQcmljZUJpZ0ludFJvdW5kIgdnZXRSYXRlIgVwcm94eSIDaW52IgFyIgdkZXBvc2l0IgZhbW91bnQiDnN0YWtpbmdBc3NldElkIhhjdXJyZW50QWRkaXRpb25hbEJhbGFuY2UiGmN1cnJlbnRTdGFraW5nQXNzZXRCYWxhbmNlIgVhc3NldCINZGVwb3NpdEludm9rZSIUcmVjZWl2ZWRTdGFraW5nQXNzZXQiFG5ld0FkZGl0aW9uYWxCYWxhbmNlIhZuZXdTdGFraW5nQXNzZXRCYWxhbmNlIgh3aXRoZHJhdyIMcHJveHlSYXRlTXVsIg1wcm9maXRBZGRyZXNzIhBjdXJyZW50UHJveHlSYXRlIgdvbGRSYXRlIgxzdGFraW5nQXNzZXQiFG9sZFNlbmRTdGFraW5nQW1vdW50IhZzZW5kU3Rha2luZ0Fzc2V0QW1vdW50Igxwcm9maXRBbW91bnQiDndpdGhkcmF3SW52b2tlIg5yZWNlaXZlZEFzc2V0cyITZ2V0TGVhc2VQcm94eUNvbmZpZyIRcmViYWxhbmNlSW50ZXJuYWwiC3RhcmdldFJhdGlvIgptaW5CYWxhbmNlIhRsZWFzYWJsZVRvdGFsQmFsYW5jZSIXdGFyZ2V0QWRkaXRpb25hbEJhbGFuY2UiBGRpZmYiD3NlbmRBc3NldEFtb3VudCIOZ2V0QXNzZXRBbW91bnQiDnJlYmFsYW5jZUFzc2V0Ig0kdDAxNjIyMDE2MzU2Igppc0xlYXNhYmxlIgtsZWFzZWRSYXRpbyIMcHJveHlBZGRyZXNzIgxwcm94eUFzc2V0SWQiFHN0YWtpbmdQcm9maXRBZGRyZXNzIhl3aXRoZHJhd0FuZFJlYmFsYW5jZUFzc2V0IglnZXRBbW91bnQiDSR0MDE2NzU1MTY4OTEiF25ld1RvdGFsTGVhc2FibGVCYWxhbmNlIg53aXRoZHJhd0Ftb3VudCIXd2l0aGRyYXdBbmRSZWJhbGFuY2VBbGwiFGFtb3VudEFzc2V0T3V0QW1vdW50IhNwcmljZUFzc2V0T3V0QW1vdW50IhJBbUFtdFdpdGhkcmF3U3RhdGUiElByQW10V2l0aGRyYXdTdGF0ZSIQcHJpdmF0ZUNhbGNQcmljZSIKYW1Bc3NldERjbSIKcHJBc3NldERjbSIFYW1BbXQiBXByQW10Ig5hbXRBc3NldEFtdFgxOCIQcHJpY2VBc3NldEFtdFgxOCIKY2FsY1ByaWNlcyIFbHBBbXQiA2NmZyILYW10QXNzZXREY20iDXByaWNlQXNzZXREY20iCHByaWNlWDE4IghscEFtdFgxOCITbHBQcmljZUluQW1Bc3NldFgxOCITbHBQcmljZUluUHJBc3NldFgxOCIPY2FsY3VsYXRlUHJpY2VzIgZwcmljZXMiFGVzdGltYXRlR2V0T3BlcmF0aW9uIgZ0eElkNTgiCnBtdEFzc2V0SWQiCHBtdExwQW10IglscEFzc2V0SWQiCWFtQXNzZXRJZCIJcHJBc3NldElkIgpwb29sU3RhdHVzIgpscEVtaXNzaW9uIglhbUJhbGFuY2UiDGFtQmFsYW5jZVgxOCIJcHJCYWxhbmNlIgxwckJhbGFuY2VYMTgiC2N1clByaWNlWDE4IghjdXJQcmljZSILcG10THBBbXRYMTgiDWxwRW1pc3Npb25YMTgiC291dEFtQW10WDE4IgtvdXRQckFtdFgxOCIIb3V0QW1BbXQiCG91dFByQW10IgVzdGF0ZSIUZXN0aW1hdGVQdXRPcGVyYXRpb24iEXNsaXBwYWdlVG9sZXJhbmNlIgxpbkFtQXNzZXRBbXQiC2luQW1Bc3NldElkIgxpblByQXNzZXRBbXQiC2luUHJBc3NldElkIgppc0V2YWx1YXRlIgZlbWl0THAiDGFtQXNzZXRJZFN0ciIMcHJBc3NldElkU3RyIgtpQW10QXNzZXRJZCINaVByaWNlQXNzZXRJZCIOaW5BbUFzc2V0SWRTdHIiDmluUHJBc3NldElkU3RyIg9pbkFtQXNzZXRBbXRYMTgiD2luUHJBc3NldEFtdFgxOCIMdXNlclByaWNlWDE4IgNyZXMiC3NsaXBwYWdlWDE4IhRzbGlwcGFnZVRvbGVyYW5jZVgxOCIKcHJWaWFBbVgxOCIKYW1WaWFQclgxOCIMZXhwZWN0ZWRBbXRzIhFleHBBbXRBc3NldEFtdFgxOCITZXhwUHJpY2VBc3NldEFtdFgxOCIJY2FsY0xwQW10Ig5jYWxjQW1Bc3NldFBtdCIOY2FsY1ByQXNzZXRQbXQiDHNsaXBwYWdlQ2FsYyIJZW1pdExwQW10IgZhbURpZmYiBnByRGlmZiILY29tbW9uU3RhdGUiB2NhbGNLTHAiDWFtb3VudEJhbGFuY2UiDHByaWNlQmFsYW5jZSIQYW1vdW50QmFsYW5jZVgxOCIPcHJpY2VCYWxhbmNlWDE4Igp1cGRhdGVkS0xwIg5jYWxjQ3VycmVudEtMcCIQYW1vdW50QXNzZXREZWx0YSIPcHJpY2VBc3NldERlbHRhIhRscEFzc2V0RW1pc3Npb25EZWx0YSISYW1vdW50QXNzZXRCYWxhbmNlIhFwcmljZUFzc2V0QmFsYW5jZSIPbHBBc3NldEVtaXNzaW9uIgpjdXJyZW50S0xwIhJyZWZyZXNoS0xwSW50ZXJuYWwiF2Ftb3VudEFzc2V0QmFsYW5jZURlbHRhIhZwcmljZUFzc2V0QmFsYW5jZURlbHRhIgdhY3Rpb25zIhNza2lwT3JkZXJWYWxpZGF0aW9uIhJ2YWxpZGF0ZVVwZGF0ZWRLTHAiBm9sZEtMcCIbdmFsaWRhdGVNYXRjaGVyT3JkZXJBbGxvd2VkIgVvcmRlciIRYW1vdW50QXNzZXRBbW91bnQiEHByaWNlQXNzZXRBbW91bnQiDSR0MDI5NTE3Mjk3MjkiA2tMcCINJHQwMzAxNjkzMDI2OSINdW51c2VkQWN0aW9ucyIGa0xwTmV3Igxpc09yZGVyVmFsaWQiBGluZm8iCWNvbW1vbkdldCIBaSIDcG10IgZwbXRBbXQiDWlzR2V0RGlzYWJsZWQiCWNvbW1vblB1dCIKYW1Bc3NldFBtdCIKcHJBc3NldFBtdCIGZXN0UHV0Ig1pc1B1dERpc2FibGVkIgRlbWl0IgdlbWl0SW52Ig1lbWl0SW52TGVnYWN5IhVsZWdhY3lGYWN0b3J5Q29udHJhY3QiB3Rha2VGZWUiCWZlZUFtb3VudCIPY2FsY1B1dE9uZVRva2VuIhBwYXltZW50QW1vdW50UmF3Ig5wYXltZW50QXNzZXRJZCIGaXNFdmFsIhBhbW91bnRCYWxhbmNlUmF3Ig9wcmljZUJhbGFuY2VSYXciFHBheW1lbnRJbkFtb3VudEFzc2V0Ig0kdDAzMzQ1NTMzNzQ4IhBhbW91bnRCYWxhbmNlT2xkIg9wcmljZUJhbGFuY2VPbGQiDSR0MDMzNzUyMzM5MDEiFGFtb3VudEFzc2V0QW1vdW50UmF3IhNwcmljZUFzc2V0QW1vdW50UmF3Ig0kdDAzNDAzMzM0MDk3Ig1wYXltZW50QW1vdW50IhBhbW91bnRCYWxhbmNlTmV3Ig9wcmljZUJhbGFuY2VOZXciC3ByaWNlTmV3WDE4IghwcmljZU5ldyIOcGF5bWVudEJhbGFuY2UiFHBheW1lbnRCYWxhbmNlQmlnSW50IgxzdXBwbHlCaWdJbnQiC2NoZWNoU3VwcGx5Ig1kZXBvc2l0QmlnSW50Igtpc3N1ZUFtb3VudCILcHJpY2VPbGRYMTgiCHByaWNlT2xkIgRsb3NzIg0kdDAzNTc3ODM1OTQ1IgdiYWxhbmNlIg9pc3N1ZUFtb3VudEJvdGgiD2NhbGNHZXRPbmVUb2tlbiIKb3V0QXNzZXRJZCIGY2hlY2tzIhBvdXRJbkFtb3VudEFzc2V0Ig1iYWxhbmNlQmlnSW50IhhvdXRJbkFtb3VudEFzc2V0RGVjaW1hbHMiDGFtQmFsYW5jZU9sZCIMcHJCYWxhbmNlT2xkIgpvdXRCYWxhbmNlIhBvdXRCYWxhbmNlQmlnSW50Ig5yZWRlZW1lZEJpZ0ludCIJYW1vdW50UmF3Ig0kdDAzODAyMzM4MDc5Igt0b3RhbEFtb3VudCINJHQwMzgwODMzODMwOSILb3V0QW1BbW91bnQiC291dFByQW1vdW50IgxhbUJhbGFuY2VOZXciDHByQmFsYW5jZU5ldyIYYW1vdW50Qm90aEluUGF5bWVudEFzc2V0IhZtYW5hZ2VyUHVibGljS2V5T3JVbml0IhNtYW5hZ2VyVmF1bHRBZGRyZXNzIglpc01hbmFnZXIiAnBrIgttdXN0TWFuYWdlciICcGQiDWNsZWFuQW1vdW50SW4iCWlzUmV2ZXJzZSINZmVlUG9vbEFtb3VudCINJHQwNDAxNjc0MDQ3MiIIYXNzZXRPdXQiB2Fzc2V0SW4iEnBvb2xBc3NldEluQmFsYW5jZSITcG9vbEFzc2V0T3V0QmFsYW5jZSIJYW1vdW50T3V0IgRvbGRLIgRuZXdLIgZjaGVja0siDGFtb3VudE91dE1pbiIJYWRkcmVzc1RvIgtzd2FwQ29udGFjdCISaXNQb29sU3dhcERpc2FibGVkIg5pc1N3YXBEaXNhYmxlZCIIY2hlY2tNaW4iEXJlZnJlc2hLTHBBY3Rpb25zIg5yZWJhbGFuY2VTdGF0ZSINd2l0aGRyYXdTdGF0ZSIPc2hvdWxkQXV0b1N0YWtlIgRhbUlkIgRwcklkIgxzbGlwcGFnZUFJbnYiDHNsaXBwYWdlUEludiIKbHBUcmFuc2ZlciILc2xwU3Rha2VJbnYiDSR0MDQ1NjQ4NDYxMTAiEWlzVXBkYXRlZEtMcFZhbGlkIgNyZWIiC21heFNsaXBwYWdlIg0kdDA0NjcyMjQ2Nzg3IgxtaW5PdXRBbW91bnQiCWF1dG9TdGFrZSIgaXNQb29sT25lVG9rZW5PcGVyYXRpb25zRGlzYWJsZWQiB3BheW1lbnQiDSR0MDQ4MDE2NDgxNjgiBWJvbnVzIhNlbWl0QW1vdW50RXN0aW1hdGVkIgplbWl0QW1vdW50IghzdGFrZUludiIHc2VuZEZlZSINJHQwNDg3NTQ0ODk1MSINJHQwNDg5NTQ0OTA2MiINJHQwNDk0MTc0OTU3NCINb3V0QXNzZXRJZFN0ciINJHQwNTA0OTY1MDY0OSIPYW1vdW50RXN0aW1hdGVkIgdidXJuSW52Ig1hc3NldFRyYW5zZmVyIg0kdDA1MTMxMzUxNTYwIhBmZWVBbW91bnRGb3JDYWxjIg0kdDA1MTU2MzUxNjcxIg0kdDA1MTk0OTUyMTA1Ig11bnN0YWtlQW1vdW50Igp1bnN0YWtlSW52Ig0kdDA1MzA0NzUzMTk4Ig0kdDA1Mzg1NzU0MTA0Ig0kdDA1NDEwNzU0MjE1IhRidXJuTFBBc3NldE9uRmFjdG9yeSINJHQwNTUzMTA1NTM5MSISbm9MZXNzVGhlbkFtdEFzc2V0IhRub0xlc3NUaGVuUHJpY2VBc3NldCINJHQwNTY0ODY1NjU2NyINY2hlY2tQYXltZW50cyIPY2hlY2tQb29sU3RhdHVzIg0kdDA1NzkxNTU3OTk2IhVub0xlc3NUaGVuQW1vdW50QXNzZXQiDGNoZWNrQW1vdW50cyINJHQwNTk0NzQ1OTU1NSILYW10QXNzZXRTdHIiDXByaWNlQXNzZXRTdHIiGGxhc3RSZWZyZXNoZWRCbG9ja0hlaWdodCIdY2hlY2tMYXN0UmVmcmVzaGVkQmxvY2tIZWlnaHQiDSR0MDYwNzU5NjA4MjMiEGtMcFVwZGF0ZUFjdGlvbnMiCmFtdEFzc2V0SWQiDHByaWNlQXNzZXRJZCINcG9vbExQQmFsYW5jZSISYWNjQW10QXNzZXRCYWxhbmNlIhRhY2NQcmljZUFzc2V0QmFsYW5jZSIKcHJpY2VzTGlzdCIPbHBBbXRBc3NldFNoYXJlIhFscFByaWNlQXNzZXRTaGFyZSIKcG9vbFdlaWdodCIMY3VyUHJpY2VDYWxjIgxhbUJhbGFuY2VSYXciDHByQmFsYW5jZVJhdyIPYW1CYWxhbmNlUmF3WDE4Ig9wckJhbGFuY2VSYXdYMTgiEHBheW1lbnRMcEFzc2V0SWQiDHBheW1lbnRMcEFtdCICdHgiBnZlcmlmeSIPdGFyZ2V0UHVibGljS2V5IgptYXRjaGVyUHViIg0kdDA2OTQ4NTY5NjAyIgduZXdIYXNoIgthbGxvd2VkSGFzaCILY3VycmVudEhhc2iEAQABYQAIAAFiAIDC1y8AAWMJALYCAQCAwtcvAAFkCQC2AgEAgICQu7rWrfANAAFlCQC2AgEAAAABZgkAtgIBAAAAAWcJALYCAQABAAFoCQC2AgEAAgABaQIFV0FWRVMAAWoCAl9fAAFrAAEAAWwAAgABbQADAAFuAAQAAW8AAQABcAACAAFxAAMAAXIABAABcwAFAAF0AAYAAXUABwABdgAIAAF3AAkAAXgACgABeQABAAF6AAIAAUEAAwABQgABAAFDAAcBAUQCAUUBRgkAvAIDCQC2AgEFAUUFAWQJALYCAQUBRgEBRwIBRQFGCQC8AgMFAUUFAWQFAUYBAUgCAUkBSgkAoAMBCQC8AgMFAUkJALYCAQUBSgUBZAEBSwMBSQFKAUwJAKADAQkAvQIEBQFJCQC2AgEFAUoFAWQFAUwBAU0DAU4BTwFQCQBrAwUBTgUBTwUBUAEBUQEBSQMJAGYCAAAFAUkJAQEtAQUBSQUBSQEBUgEBSQMJAL8CAgUBZQUBSQkAvgIBBQFJBQFJAQFTAAIQJXNfX3N3YXBDb250cmFjdAEBVAACEyVzX19mYWN0b3J5Q29udHJhY3QBAVUAAhQlc19fbWFuYWdlclB1YmxpY0tleQEBVgACFyVzX19tYW5hZ2VyVmF1bHRBZGRyZXNzAQFXAAIRJXMlc19fcHJpY2VfX2xhc3QBAVgCAVkBWgkAuQkCCQDMCAICGCVzJXMlZCVkX19wcmljZV9faGlzdG9yeQkAzAgCCQCkAwEFAVkJAMwIAgkApAMBBQFaBQNuaWwFAWoBAmFhAgJhYgJhYwkArAICCQCsAgIJAKwCAgILJXMlcyVzX19QX18FAmFiAgJfXwUCYWMBAmFkAgJhYgJhYwkArAICCQCsAgIJAKwCAgILJXMlcyVzX19HX18FAmFiAgJfXwUCYWMBAmFlAAIPJXNfX2Ftb3VudEFzc2V0AQJhZgACDiVzX19wcmljZUFzc2V0AAJhZwIHJXNfX2ZlZQACYWgJAGsDAAoFAWIAkE4AAmFpCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFAmFnBQJhaAACYWoJALkJAgkAzAgCAgIlcwkAzAgCAgNrTHAFA25pbAUBagACYWsJALkJAgkAzAgCAgIlcwkAzAgCAhJrTHBSZWZyZXNoZWRIZWlnaHQFA25pbAUBagACYWwJALkJAgkAzAgCAgIlcwkAzAgCAg9yZWZyZXNoS0xwRGVsYXkFA25pbAUBagACYW0AHgACYW4JAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUCYWwFAmFtAQJhbwECYXAJALkJAgkAzAgCAgQlcyVzCQDMCAICDXN0YWtlZEJhbGFuY2UJAMwIAgUCYXAFA25pbAUBagECYXEBAmFwCQC5CQIJAMwIAgIEJXMlcwkAzAgCAhFzaGFyZUFzc2V0QmFsYW5jZQkAzAgCBQJhcAUDbmlsBQFqAQJhcgECYXAJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBAmFvAQUCYXAAAAECYXMBAmFwCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQJhcQEFAmFwAAABAmF0AAIRJXNfX2ZhY3RvcnlDb25maWcBAmF1AAIYJXMlc19fbWF0Y2hlcl9fcHVibGljS2V5AQJhdgECYXcJAKwCAgkArAICAgglcyVzJXNfXwUCYXcCIF9fbWFwcGluZ3NfX3Bvb2xDb250cmFjdDJMcEFzc2V0AQJheAICYXkCYXoJAKwCAgkArAICCQCsAgIJAKwCAgIIJWQlZCVzX18FAmF5AgJfXwUCYXoCCF9fY29uZmlnAQJhQQECYUIJAKwCAgIoJXMlcyVzX19tYXBwaW5nc19fYmFzZUFzc2V0MmludGVybmFsSWRfXwUCYUIBAmFDAAIMJXNfX3NodXRkb3duAQJhRAECYUUJAKwCAgISJXMlc19fcG9vbFdlaWdodF9fBQJhRQECYUYAAhclc19fYWxsb3dlZExwU2NyaXB0SGFzaAACYUcCFyVzX19mZWVDb2xsZWN0b3JBZGRyZXNzAQJhSAECYUkJAKwCAgIbJXMlc19fc2tpcE9yZGVyVmFsaWRhdGlvbl9fBQJhSQECYUoEAmFLAmFMAmFNAmFOCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICJG9yZGVyIHZhbGlkYXRpb24gZmFpbGVkOiBvcmRlclZhbGlkPQkApQMBBQJhSwICICgFAmFMAgEpAg0gc2VuZGVyVmFsaWQ9CQClAwEFAmFNAg4gbWF0Y2hlclZhbGlkPQkApQMBBQJhTgECYU8BAmFQBAJhUQkApggBBQJhUAMJAAECBQJhUQIHQWRkcmVzcwQCYVIFAmFRBQJhUgUEdGhpcwECYVMABAJhVAQCYVEJAKIIAQkBAVQAAwkAAQIFAmFRAgZTdHJpbmcEAmFVBQJhUQkBAmFPAQUCYVUFBHRoaXMEAmFRCQCdCAIFAmFUCQEBVgADCQABAgUCYVECBlN0cmluZwQCYVYFAmFRCQECYU8BBQJhVgUEdGhpcwECYVcCAmFYAmFZCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUCYVgFAmFZCQC5CQIJAMwIAgIKbWFuZGF0b3J5IAkAzAgCCQClCAEFAmFYCQDMCAICAS4JAMwIAgUCYVkJAMwIAgIPIGlzIG5vdCBkZWZpbmVkBQNuaWwCAAECYVoCAmFYAmFZCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUCYVgFAmFZCQC5CQIJAMwIAgIKbWFuZGF0b3J5IAkAzAgCCQClCAEFAmFYCQDMCAICAS4JAMwIAgUCYVkJAMwIAgIPIGlzIG5vdCBkZWZpbmVkBQNuaWwCAAECYmEBAmJiCQACAQkAuQkCCQDMCAICCGxwLnJpZGU6CQDMCAIFAmJiBQNuaWwCASABAmJjAQJiYgkAuQkCCQDMCAICCGxwLnJpZGU6CQDMCAIFAmJiBQNuaWwCASAAAmJkCQERQGV4dHJOYXRpdmUoMTA2MikBCQECYVcCBQR0aGlzCQEBVAAAAmJlCQERQGV4dHJOYXRpdmUoMTA2MikBCQECYVcCBQJiZAUCYUcAAmJmCgACYmcJAPwHBAUCYmQCEGdldEluRmVlUkVBRE9OTFkJAMwIAgkApQgBBQR0aGlzBQNuaWwFA25pbAMJAAECBQJiZwIDSW50BQJiZwkAAgEJAKwCAgkAAwEFAmJnAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQAAmJoCgACYmcJAPwHBAUCYmQCEWdldE91dEZlZVJFQURPTkxZCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQNuaWwDCQABAgUCYmcCA0ludAUCYmcJAAIBCQCsAgIJAAMBBQJiZwIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50AQJiaQECYVgJALkJAgkAzAgCAgQlcyVzCQDMCAICC3doaXRlbGlzdGVkCQDMCAIJAKUIAQUCYVgFA25pbAUBagECYmoBAmFYCQELdmFsdWVPckVsc2UCCQCbCAIFAmJkCQECYmkBBQJhWAcBAmJrAAkBC3ZhbHVlT3JFbHNlAgkAmwgCBQJiZAkBAmFDAAcBAmJsAAkA2QQBCQECYVcCBQJiZAkBAmF1AAECYm0ABAJibgkBAmFXAgUEdGhpcwkBAmFlAAQCYm8JAQJhVwIFBHRoaXMJAQJhZgAEAmF6CQECYVoCBQJiZAkBAmFBAQUCYm8EAmF5CQECYVoCBQJiZAkBAmFBAQUCYm4JALUJAgkBAmFXAgUCYmQJAQJheAIJAKQDAQUCYXkJAKQDAQUCYXoFAWoBAmJwAQJicQMJAAACBQJicQUBaQUEdW5pdAkA2QQBBQJicQECYnIBAmJxAwkAAAIFAmJxBQR1bml0BQFpCQDYBAEJAQV2YWx1ZQEFAmJxAQJicwECYnQJAJkKBwkBEUBleHRyTmF0aXZlKDEwNjIpAQkAkQMCBQJidAUBbwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJ0BQFwCQDZBAEJAJEDAgUCYnQFAXEJAQJicAEJAJEDAgUCYnQFAXIJAQJicAEJAJEDAgUCYnQFAXMJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJidAUBdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJ0BQF1AAJidQkBAmJzAQkBAmJtAAACYnYFAmJ1AAJidwgFAmJ2Al8xAAJieAgFAmJ2Al8yAAJieQgFAmJ2Al8zAAJieggFAmJ2Al80AAJiQQgFAmJ2Al81AAJiQggFAmJ2Al82AAJiQwgFAmJ2Al83AQJiRAAJALUJAgkBAmFXAgUCYmQJAQJhdAAFAWoAAmJFCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCCQECYkQABQFCAhlpbmNvcnJlY3Qgc3Rha2luZyBhZGRyZXNzAAJiRgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgkBAmJEAAUBQwIZaW5jb3JyZWN0IHN0YWtpbmcgYWRkcmVzcwECYkcKAmJIAmJJAmJKAmJLAmJMAmJNAmJOAmJPAmJQAmJRCQC5CQIJAMwIAgIUJWQlZCVkJWQlZCVkJWQlZCVkJWQJAMwIAgkApAMBBQJiSAkAzAgCCQCkAwEFAmJJCQDMCAIJAKQDAQUCYkoJAMwIAgkApAMBBQJiSwkAzAgCCQCkAwEFAmJMCQDMCAIJAKQDAQUCYk0JAMwIAgkApAMBBQJiTgkAzAgCCQCkAwEFAmJPCQDMCAIJAKQDAQUCYlAJAMwIAgkApAMBBQJiUQUDbmlsBQFqAQJiUgYCYlMCYlQCYlUCYksCYk4CYk8JALkJAgkAzAgCAgwlZCVkJWQlZCVkJWQJAMwIAgkApAMBBQJiUwkAzAgCCQCkAwEFAmJUCQDMCAIJAKQDAQUCYlUJAMwIAgkApAMBBQJiSwkAzAgCCQCkAwEFAmJOCQDMCAIJAKQDAQUCYk8FA25pbAUBagECYlYBAmFwBAJiVwMJAAACBQJhcAIFV0FWRVMICQDvBwEFBHRoaXMJYXZhaWxhYmxlCQDwBwIFBHRoaXMJANkEAQUCYXAEAmJYCQBlAgkAZAIFAmJXCQECYXIBBQJhcAkBAmFzAQUCYXAJAJYDAQkAzAgCAAAJAMwIAgUCYlgFA25pbAECYlkCAmJaAmNhCQC8AgMFAmJaBQFkBQJjYQECY2IDAmJaAmNhAUwJAL0CBAUCYloFAWQFAmNhBQFMAQJjYwECY2QEAmNlCQD8BwQFAmNkAgdnZXRSYXRlBQNuaWwFA25pbAMJAAACBQJjZQUCY2UEAmFRBQJjZQMJAAECBQJhUQIDSW50BAJjZgUCYVEFAmNmCQECYmEBAiBwcm94eS5nZXRSYXRlKCkgdW5leHBlY3RlZCB2YWx1ZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECY2cEAmFwAmNoAmNpAmNkBAJjagkBAmFyAQUCYXADCQAAAgUCY2oFAmNqBAJjawkBAmFzAQUCY2kDCQAAAgUCY2sFAmNrBAJjbAkBAmJwAQUCYXADCQBmAgUCY2gAAAQCY20JAPwHBAUCY2QCB2RlcG9zaXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCY2wFAmNoBQNuaWwDCQAAAgUCY20FAmNtBAJhUQUCY20DCQABAgUCYVECA0ludAQCY24FAmFRBAJjbwkAZAIFAmNqBQJjaAQCY3AJAGQCBQJjawUCY24JAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhbwEFAmFwBQJjbwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmFxAQUCY2kFAmNwBQNuaWwFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJjcQYCYXACY2gCY2kCY2QCY3ICY3MEAmNqCQECYXIBBQJhcAMJAAACBQJjagUCY2oEAmNrCQECYXMBBQJjaQMJAAACBQJjawUCY2sEAmN0CQECY2MBBQJjZAMJAAACBQJjdAUCY3QEAmN1CQBrAwUCY3IFAmNqBQJjawQCY3YJAQJicAEFAmNpBAJjdwkAawMFAmNyBQJjaAUCY3UEAmN4CQBrAwUCY3IFAmNoBQJjdAQCY3kJAJYDAQkAzAgCAAAJAMwIAgkAZQIFAmN3BQJjeAUDbmlsAwkAZgIFAmN4AAAEAmN6CQD8BwQFAmNkAgh3aXRoZHJhdwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJjdgUCY3gFA25pbAMJAAACBQJjegUCY3oEAmFRBQJjegMJAAECBQJhUQIDSW50BAJjQQUCYVEEAmNvCQBlAgUCY2oFAmNBBAJjcAkAZQIJAGUCBQJjawUCY3gFAmN5CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYW8BBQJhcAUCY28JAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhcQEFAmNpBQJjcAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQJjcwUCY3kJAQJicAEFAmNpBQNuaWwFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJjQgECYXAEAmFRCQD8BwQFAmJkAhpnZXRQb29sTGVhc2VDb25maWdSRUFET05MWQkAzAgCCQClCAEFBHRoaXMJAMwIAgUCYXAFA25pbAUDbmlsAwkAAQIFAmFRAjAoQm9vbGVhbiwgSW50LCBJbnQsIFN0cmluZywgU3RyaW5nLCBJbnQsIFN0cmluZykEAmFSBQJhUQUCYVIJAQJiYQEJAKwCAgkArAICAgFbBQJhcAIdXSBnZXRMZWFzZVByb3h5Q29uZmlnKCkgZXJyb3IBAmNDBwJjRAJhcAJjaQJjRQJjZAJjcgJjcwQCY2sJAQJhcwEFAmNpAwkAAAIFAmNrBQJjawQCY2oDCQECIT0CBQJjawAACQECYXIBBQJhcAAAAwkAAAIFAmNqBQJjagQCY0YJAJYDAQkAzAgCAAAJAMwIAgkAZQIJAQJiVgEFAmFwBQJjRQUDbmlsBAJjRwkAawMFAmNEBQJjRgBkBAJjSAkAZQIFAmNqBQJjRwMJAAACBQJjSAAABQNuaWwDCQBmAgAABQJjSAQCY0kJAQEtAQUCY0gJAQJjZwQFAmFwBQJjSQUCY2kFAmNkBAJjSgUCY0gJAQJjcQYFAmFwBQJjSgUCY2kFAmNkBQJjcgUCY3MJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAmNLAQJhcAQCY0wJAQJjQgEFAmFwBAJjTQgFAmNMAl8xBAJjTggFAmNMAl8yBAJjRQgFAmNMAl8zBAJjTwgFAmNMAl80BAJjUAgFAmNMAl81BAJjcggFAmNMAl82BAJjUQgFAmNMAl83AwUCY00JAQJjQwcFAmNOBQJhcAUCY1AFAmNFCQERQGV4dHJOYXRpdmUoMTA2MikBBQJjTwUCY3IJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAmNRBQNuaWwBAmNSAgJhcAJjUwQCY1QJAQJjQgEFAmFwBAJjTQgFAmNUAl8xBAJjTggFAmNUAl8yBAJjRQgFAmNUAl8zBAJjTwgFAmNUAl80BAJjUAgFAmNUAl81BAJjcggFAmNUAl82BAJjUQgFAmNUAl83AwUCY00EAmNrCQECYXMBBQJjUAMJAAACBQJjawUCY2sEAmNqAwkBAiE9AgUCY2sAAAkBAmFyAQUCYXAAAAMJAAACBQJjagUCY2oEAmNVCQCWAwEJAMwIAgAACQDMCAIJAGUCCQBlAgkBAmJWAQUCYXAFAmNTBQJjRQUDbmlsAwkAAAIFAmNVBQJjVQQCY28JAGsDBQJjTgUCY1UAZAMJAAACBQJjbwUCY28EAmNWCQBlAgUCY2oFAmNvAwkAAAIFAmNWBQJjVgMJAAACBQJjVgAABQNuaWwDCQBmAgAABQJjVgkBAmNnBAUCYXAJAQEtAQUCY1YFAmNQCQERQGV4dHJOYXRpdmUoMTA2MikBBQJjTwkBAmNxBgUCYXAFAmNWBQJjUAkBEUBleHRyTmF0aXZlKDEwNjIpAQUCY08FAmNyCQERQGV4dHJOYXRpdmUoMTA2MikBBQJjUQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAQJjVwICY1gCY1kEAmNaCQECY1ICCQECYVcCBQR0aGlzCQECYWUABQJjWAQCZGEJAQJjUgIJAQJhVwIFBHRoaXMJAQJhZgAFAmNZCQDOCAIFAmNaBQJkYQECZGIEAmRjAmRkAmRlAmRmBAJkZwkBAUQCBQJkZQUCZGMEAmRoCQEBRAIFAmRmBQJkZAkBAmJZAgUCZGgFAmRnAQJkaQMCZGUCZGYCZGoEAmRrCQECYm0ABAJkbAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmRrBQF0BAJkbQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmRrBQF1BAJkbgkBAmRiBAUCZGwFAmRtBQJkZQUCZGYEAmNhCQEBRAIFAmRlBQJkbAQCYloJAQFEAgUCZGYFAmRtBAJkbwkBAUQCBQJkagUBYgQCZHAJAQJiWQIFAmNhBQJkbwQCZHEJAQJiWQIFAmJaBQJkbwkAzAgCBQJkbgkAzAgCBQJkcAkAzAgCBQJkcQUDbmlsAQJkcgMCZGUCZGYCZGoEAmRzCQECZGkDBQJkZQUCZGYFAmRqCQDMCAIJAQFIAgkAkQMCBQJkcwAABQFiCQDMCAIJAQFIAgkAkQMCBQJkcwABBQFiCQDMCAIJAQFIAgkAkQMCBQJkcwACBQFiBQNuaWwBAmR0BAJkdQJkdgJkdwJhYgQCZGsJAQJibQAEAmR4CQCRAwIFAmRrBQFxBAJkeQkAkQMCBQJkawUBcgQCZHoJAJEDAgUCZGsFAXMEAmRjCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCZGsFAXQEAmRkCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCZGsFAXUEAmRBCQCRAwIFAmRrBQFwBAJkQggJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBCQDZBAEFAmR4CQCsAgIJAKwCAgIGQXNzZXQgBQJkeAIOIGRvZXNuJ3QgZXhpc3QIcXVhbnRpdHkDCQECIT0CBQJkeAUCZHYJAAIBAhVJbnZhbGlkIGFzc2V0IHBhc3NlZC4EAmRDCQECYlYBBQJkeQQCZEQJAQFEAgUCZEMFAmRjBAJkRQkBAmJWAQUCZHoEAmRGCQEBRAIFAmRFBQJkZAQCZEcJAQJiWQIFAmRGBQJkRAQCZEgJAQFIAgUCZEcFAWIEAmRJCQEBRAIFAmR3BQFiBAJkSgkBAUQCBQJkQgUBYgQCZEsJALwCAwUCZEQFAmRJBQJkSgQCZEwJALwCAwUCZEYFAmRJBQJkSgQCZE0JAQFLAwUCZEsFAmRjBQVGTE9PUgQCZE4JAQFLAwUCZEwFAmRkBQVGTE9PUgQCZE8DCQAAAgUCZHUCAAUDbmlsCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAmFiBQJkTQMJAAACBQJkeQIFV0FWRVMFBHVuaXQJANkEAQUCZHkJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCYWIFAmROAwkAAAIFAmR6AgVXQVZFUwUEdW5pdAkA2QQBBQJkegkAzAgCCQELU3RyaW5nRW50cnkCCQECYWQCCQClCAEFAmFiBQJkdQkBAmJSBgUCZE0FAmROBQJkdwUCZEgFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFXAAUCZEgJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFYAgUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCZEgFA25pbAkAnAoKBQJkTQUCZE4FAmR5BQJkegUCZEMFAmRFBQJkQgUCZEcFAmRBBQJkTwECZFAJAmR1AmRRAmRSAmRTAmRUAmRVAmFiAmRWAmRXBAJkawkBAmJtAAQCZHgJANkEAQkAkQMCBQJkawUBcQQCZFgJAJEDAgUCZGsFAXIEAmRZCQCRAwIFAmRrBQFzBAJkWgkAkQMCBQJkawUBdgQCZWEJAJEDAgUCZGsFAXcEAmRsCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCZGsFAXQEAmRtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCZGsFAXUEAmRBCQCRAwIFAmRrBQFwBAJkQggJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBBQJkeAkArAICCQCsAgICBkFzc2V0IAkA2AQBBQJkeAIOIGRvZXNuJ3QgZXhpc3QIcXVhbnRpdHkEAmViCQDYBAEJAQt2YWx1ZU9yRWxzZQIFAmRTCQDZBAECBVdBVkVTBAJlYwkA2AQBCQELdmFsdWVPckVsc2UCBQJkVQkA2QQBAgVXQVZFUwMDCQECIT0CBQJkWAUCZWIGCQECIT0CBQJkWQUCZWMJAAIBAiJJbnZhbGlkIGFtdCBvciBwcmljZSBhc3NldCBwYXNzZWQuBAJkQwMFAmRWCQECYlYBBQJkWAkAZQIJAQJiVgEFAmRYBQJkUgQCZEUDBQJkVgkBAmJWAQUCZFkJAGUCCQECYlYBBQJkWQUCZFQEAmVkCQEBRAIFAmRSBQJkbAQCZWUJAQFEAgUCZFQFAmRtBAJlZgkBAmJZAgUCZWUFAmVkBAJkRAkBAUQCBQJkQwUCZGwEAmRGCQEBRAIFAmRFBQJkbQQCZWcDCQAAAgUCZEIAAAQCZEcFAWUEAmVoBQFlBAJkbwkAdgYJALkCAgUCZWQFAmVlAAAJALYCAQAFAAEAAAUERE9XTgkAlwoFCQEBSAIFAmRvBQFiCQEBSAIFAmVkBQJkbAkBAUgCBQJlZQUCZG0JAQJiWQIJALcCAgUCZEYFAmVlCQC3AgIFAmREBQJlZAUCZWgEAmRHCQECYlkCBQJkRgUCZEQEAmVoCQC8AgMJAQFSAQkAuAICBQJkRwUCZWYFAWQFAmRHBAJlaQkBAUQCBQJkUQUBYgMDCQECIT0CBQJkRwUBZQkAvwICBQJlaAUCZWkHCQACAQkArAICCQCsAgIJAKwCAgIPUHJpY2Ugc2xpcHBhZ2UgCQCmAwEFAmVoAh4gZXhjZWVkZWQgdGhlIHBhc3NlZCBsaW1pdCBvZiAJAKYDAQUCZWkEAmRKCQEBRAIFAmRCBQFiBAJlagkAvQIEBQJlZAkBAmNiAwUCZEYFAmREBQdDRUlMSU5HBQFkBQdDRUlMSU5HBAJlawkAvQIEBQJlZQUBZAkBAmNiAwUCZEYFAmREBQVGTE9PUgUHQ0VJTElORwQCZWwDCQC/AgIFAmVqBQJlZQkAlAoCBQJlawUCZWUJAJQKAgUCZWQFAmVqBAJlbQgFAmVsAl8xBAJlbggFAmVsAl8yBAJkbwkAvQIEBQJkSgUCZW4FAmRGBQVGTE9PUgkAlwoFCQEBSwMFAmRvBQFiBQVGTE9PUgkBAUsDBQJlbQUCZGwFB0NFSUxJTkcJAQFLAwUCZW4FAmRtBQdDRUlMSU5HBQJkRwUCZWgEAmVvCAUCZWcCXzEEAmVwCAUCZWcCXzIEAmVxCAUCZWcCXzMEAmRICQEBSAIIBQJlZwJfNAUBYgQCZXIJAQFIAggFAmVnAl81BQFiAwkAZwIAAAUCZW8JAAIBAjZJbnZhbGlkIGNhbGN1bGF0aW9ucy4gTFAgY2FsY3VsYXRlZCBpcyBsZXNzIHRoYW4gemVyby4EAmVzAwkBASEBBQJkVwAABQJlbwQCZXQJAGUCBQJkUgUCZXAEAmV1CQBlAgUCZFQFAmVxBAJldgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVcABQJkSAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVgCBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQJkSAkAzAgCCQELU3RyaW5nRW50cnkCCQECYWECBQJhYgUCZHUJAQJiRwoFAmVwBQJlcQUCZXMFAmRIBQJkUQUCZXIFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAFAmV0BQJldQUDbmlsCQCfCg0FAmVvBQJlcwUCZEgFAmRDBQJkRQUCZEIFAmR4BQJkQQUCZXYFAmV0BQJldQUCZFMFAmRVAQJldwMCZXgCZXkCZEIEAmV6CQEBRwIFAmV4CQC2AgEFAmJCBAJlQQkBAUcCBQJleQkAtgIBBQJiQwQCZUIJALwCAwkAdgYJALkCAgUCZXoFAmVBAAAJALYCAQAFAAEAEgUERE9XTgUBZwUCZEIDCQAAAgUCZEIFAWYFAWYFAmVCAQJlQwMCZUQCZUUCZUYEAmVHCQC4AgIJALYCAQkBAmJWAQkBAmJyAQUCYnoFAmVEBAJlSAkAuAICCQC2AgEJAQJiVgEJAQJicgEFAmJBBQJlRQQCZUkJALgCAgkAtgIBCAkBBXZhbHVlAQkA7AcBBQJieQhxdWFudGl0eQUCZUYEAmVKCQECZXcDBQJlRwUCZUgFAmVJBQJlSgECZUsDAmVMAmVNAmVGBAJlRwkAZAIJAQJiVgEJAQJicgEFAmJ6BQJlTAQCZUgJAGQCCQECYlYBCQECYnIBBQJiQQUCZU0EAmVJCQBkAggJAQV2YWx1ZQEJAOwHAQUCYnkIcXVhbnRpdHkFAmVGBAJlQgkBAmV3AwkAtgIBBQJlRwkAtgIBBQJlSAkAtgIBBQJlSQQCZU4JAMwIAgkBDEludGVnZXJFbnRyeQIFAmFrBQZoZWlnaHQJAMwIAgkBC1N0cmluZ0VudHJ5AgUCYWoJAKYDAQUCZUIFA25pbAkAlAoCBQJlTgUCZUIBAmVPAAkBC3ZhbHVlT3JFbHNlAgkAmwgCBQJiZAkBAmFIAQkApQgBBQR0aGlzBwECZVACAmVRAmVCAwkAwAICBQJlQgUCZVEGCQECYmEBCQC5CQIJAMwIAgIidXBkYXRlZCBLTHAgbG93ZXIgdGhhbiBjdXJyZW50IEtMcAkAzAgCCQCmAwEFAmVRCQDMCAIJAKYDAQUCZUIFA25pbAIBIAECZVIBAmVTBAJlRwkBAmJWAQkBAmJyAQUCYnoEAmVICQECYlYBCQECYnIBBQJiQQQCZVQIBQJlUwZhbW91bnQEAmVVCQBuBAgFAmVTBmFtb3VudAgFAmVTBXByaWNlBQFiBQVGTE9PUgQCZVYDCQAAAggFAmVTCW9yZGVyVHlwZQUDQnV5CQCUCgIFAmVUCQEBLQEFAmVVCQCUCgIJAQEtAQUCZVQFAmVVBAJlTAgFAmVWAl8xBAJlTQgFAmVWAl8yAwMDCQECYmsABgkAAAIFAmJ4BQFtBgkAAAIFAmJ4BQFuCQACAQIcRXhjaGFuZ2Ugb3BlcmF0aW9ucyBkaXNhYmxlZAMDCQECIT0CCAgFAmVTCWFzc2V0UGFpcgthbW91bnRBc3NldAUCYnoGCQECIT0CCAgFAmVTCWFzc2V0UGFpcgpwcmljZUFzc2V0BQJiQQkAAgECE1dyb25nIG9yZGVyIGFzc2V0cy4EAmVXCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKgDAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQJhagIBMAkBAmJjAQILaW52YWxpZCBrTHAEAmVYCQECZUsDBQJlTAUCZU0AAAQCZVkIBQJlWAJfMQQCZVoIBQJlWAJfMgQCZmEJAMACAgUCZVoFAmVXBAJmYgkAuQkCCQDMCAICBGtMcD0JAMwIAgkApgMBBQJlVwkAzAgCAggga0xwTmV3PQkAzAgCCQCmAwEFAmVaCQDMCAICFCBhbW91bnRBc3NldEJhbGFuY2U9CQDMCAIJAKQDAQUCZUcJAMwIAgITIHByaWNlQXNzZXRCYWxhbmNlPQkAzAgCCQCkAwEFAmVICQDMCAICGSBhbW91bnRBc3NldEJhbGFuY2VEZWx0YT0JAMwIAgkApAMBBQJlTAkAzAgCAhggcHJpY2VBc3NldEJhbGFuY2VEZWx0YT0JAMwIAgkApAMBBQJlTQkAzAgCAgggaGVpZ2h0PQkAzAgCCQCkAwEFBmhlaWdodAUDbmlsAgAJAJQKAgUCZmEFAmZiAQJmYwECZmQDCQECIT0CCQCQAwEIBQJmZAhwYXltZW50cwABCQACAQIdZXhhY3RseSAxIHBheW1lbnQgaXMgZXhwZWN0ZWQEAmZlCQEFdmFsdWUBCQCRAwIIBQJmZAhwYXltZW50cwAABAJkdgkBBXZhbHVlAQgFAmZlB2Fzc2V0SWQEAmZmCAUCZmUGYW1vdW50BAJlZwkBAmR0BAkA2AQBCAUCZmQNdHJhbnNhY3Rpb25JZAkA2AQBBQJkdgUCZmYIBQJmZAZjYWxsZXIEAmRNCAUCZWcCXzEEAmROCAUCZWcCXzIEAmRPCAUCZWcDXzEwBAJmZwMJAQEhAQkBAmJqAQgFAmZkBmNhbGxlcgMJAQJiawAGCQAAAgUCYngFAW4HAwUCZmcJAAIBCQCsAgICLEdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbi4gU3RhdHVzID0gCQCkAwEFAmJ4CQCXCgUFAmRNBQJkTgUCZmYFAmR2BQJkTwECZmgDAmZkAmRRAmRXAwkBAiE9AgkAkAMBCAUCZmQIcGF5bWVudHMAAgkAAgECH2V4YWN0bHkgMiBwYXltZW50cyBhcmUgZXhwZWN0ZWQEAmZpCQEFdmFsdWUBCQCRAwIIBQJmZAhwYXltZW50cwAABAJmagkBBXZhbHVlAQkAkQMCCAUCZmQIcGF5bWVudHMAAQQCZmsJAQJkUAkJANgEAQgFAmZkDXRyYW5zYWN0aW9uSWQFAmRRCAUCZmkGYW1vdW50CAUCZmkHYXNzZXRJZAgFAmZqBmFtb3VudAgFAmZqB2Fzc2V0SWQJAKUIAQgFAmZkBmNhbGxlcgcFAmRXBAJmbAMJAQEhAQkBAmJqAQgFAmZkBmNhbGxlcgMDCQECYmsABgkAAAIFAmJ4BQFsBgkAAAIFAmJ4BQFuBwMFAmZsCQACAQkArAICAixQdXQgb3BlcmF0aW9uIGlzIGJsb2NrZWQgYnkgYWRtaW4uIFN0YXR1cyA9IAkApAMBBQJieAUCZmsBAmZtAQJjaAQCZm4JAPwHBAUCYmQCBGVtaXQJAMwIAgUCY2gFA25pbAUDbmlsAwkAAAIFAmZuBQJmbgQCZm8EAmFRBQJmbgMJAAECBQJhUQIHQWRkcmVzcwQCZnAFAmFRCQD8BwQFAmZwAgRlbWl0CQDMCAIFAmNoBQNuaWwFA25pbAUEdW5pdAMJAAACBQJmbwUCZm8FAmNoCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJmcQICY2gCYWkEAmZyAwkAAAIFAmFpAAAAAAkAawMFAmNoBQJhaQUBYgkAlAoCCQBlAgUCY2gFAmZyBQJmcgECZnMEAmZ0AmZ1AmFiAmFjBAJmdgkAAAIFAmFjBQR1bml0BAJmdwkBAmJWAQkBAmJyAQUCYnoEAmZ4CQECYlYBCQECYnIBBQJiQQQCZnkDCQAAAgUCZnUFAmJ6BgMJAAACBQJmdQUCYkEHCQECYmEBAg1pbnZhbGlkIGFzc2V0BAJmegMFAmZ2CQCUCgIFAmZ3BQJmeAMFAmZ5CQCUCgIJAGUCBQJmdwUCZnQFAmZ4CQCUCgIFAmZ3CQBlAgUCZngFAmZ0BAJmQQgFAmZ6Al8xBAJmQggFAmZ6Al8yBAJmQwMFAmZ5CQCUCgIFAmZ0AAAJAJQKAgAABQJmdAQCZkQIBQJmQwJfMQQCZkUIBQJmQwJfMgQCZVQICQECZnECBQJmRAUCYmYCXzEEAmVVCAkBAmZxAgUCZkUFAmJmAl8xBAJmRgkBAmZxAgUCZnQFAmJmBAJmRwgFAmZGAl8xBAJmcggFAmZGAl8yBAJmSAkAZAIFAmZBBQJlVAQCZkkJAGQCBQJmQgUCZVUEAmZKCQECYlkCCQEBRAIFAmZJBQJiQwkBAUQCBQJmSAUCYkIEAmZLCQEBSAIFAmZKBQFiBAJmTAMFAmZ5BQJmQQUCZkIEAmZNCQC2AgEFAmZMBAJmTgkAtgIBCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmJ5CQCsAgIJAKwCAgIGYXNzZXQgCQDYBAEFAmJ5Ag4gZG9lc24ndCBleGlzdAhxdWFudGl0eQQCZk8DCQC/AgIFAmZOBQFmBgkBAmJhAQIiaW5pdGlhbCBkZXBvc2l0IHJlcXVpcmVzIGFsbCBjb2lucwMJAAACBQJmTwUCZk8EAmZQCQC2AgEFAmZHBAJmUQkAlgMBCQDMCAIAAAkAzAgCCQCgAwEJALoCAgkAuQICBQJmTgkAuAICCQEKc3FydEJpZ0ludAQJALcCAgUBZAkAugICCQC5AgIFAmZQBQFkBQJmTQASABIFBERPV04FAWQFAWQFA25pbAQCZXYDBQJmdgUDbmlsCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBVwAFAmZLCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBWAIFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAFAmZLCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhYQIJAKUIAQkBBXZhbHVlAQUCYWIJANgEAQkBBXZhbHVlAQUCYWMJAQJiRwoFAmZEBQJmRQUCZlEFAmZLAAAAAAUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAAAAAAFA25pbAQCZlIJAQJiWQIJAQFEAgUCZkIFAmJDCQEBRAIFAmZBBQJiQgQCZlMJAQFIAgUCZlIFAWIEAmZUBAJmVQMFAmZ5CQCUCgIFAmZEBQJmQQkAlAoCBQJmRQUCZkIEAmNoCAUCZlUCXzEEAmZWCAUCZlUCXzIEAmZXCQCgAwEJALwCAwUCZk4JALYCAQkAaQIFAmNoAAIJALYCAQUCZlYJAGsDCQBlAgUCZlEFAmZXBQFiBQJmVwkAlwoFBQJmUQUCZXYFAmZyBQJmVAUCZnkJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAmZYBQJmWQJmRwJmdQJhYgJhYwQCZnYJAAACBQJhYwUEdW5pdAQCZGsJAQJibQAEAmRsCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCZGsFAXQEAmRtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCZGsFAXUEAmZaCQDMCAIDCQAAAgUCZnUFAmJ5BgkBAmJhAQIQaW52YWxpZCBscCBhc3NldAUDbmlsAwkAAAIFAmZaBQJmWgQCZ2EDCQAAAgUCZlkFAmJ6BgMJAAACBQJmWQUCYkEHCQECYmEBAg1pbnZhbGlkIGFzc2V0BAJnYgMFAmdhCQC2AgEJAQJiVgEJAQJicgEFAmJ6CQC2AgEJAQJiVgEJAQJicgEFAmJBBAJnYwMFAmdhBQJkbAUCZG0EAmdkCQECYlYBCQECYnIBBQJiegQCZ2UJAQJiVgEJAQJicgEFAmJBBAJnZgMFAmdhBQJnZAUCZ2UEAmdnCQC2AgEFAmdmBAJmTgkAtgIBCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmJ5CQCsAgIJAKwCAgIGYXNzZXQgCQDYBAEFAmJ5Ag4gZG9lc24ndCBleGlzdAhxdWFudGl0eQQCZ2gJALYCAQUCZkcEAmdpCQCWAwEJAMwIAgAACQDMCAIJAKADAQkAugICCQC5AgIFAmdiCQC4AgIFAWQJAHYGCQC4AgIFAWQJALoCAgkAuQICBQJnaAUBZAUCZk4AEgUBaAAAABIFBERPV04FAWQFA25pbAQCZ2oJAQJmcQIFAmdpBQJiaAQCZ2sIBQJnagJfMQQCZnIIBQJnagJfMgQCZ2wDBQJnYQkAlgoEBQJnawAACQBlAgUCZ2QFAmdpBQJnZQkAlgoEAAAFAmdrBQJnZAkAZQIFAmdlBQJnaQQCZ20IBQJnbAJfMQQCZ24IBQJnbAJfMgQCZ28IBQJnbAJfMwQCZ3AIBQJnbAJfNAQCZkoJAQJiWQIJAQFEAgUCZ3AFAmJDCQEBRAIFAmdvBQJiQgQCZksJAQFIAgUCZkoFAWIEAmV2AwUCZnYFA25pbAkAzAgCCQELU3RyaW5nRW50cnkCCQECYWQCCQClCAEJAQV2YWx1ZQEFAmFiCQDYBAEJAQV2YWx1ZQEFAmFjCQECYlIGBQJnbQUCZ24FAmZHBQJmSwUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVcABQJmSwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVgCBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQJmSwUDbmlsBAJmUgkBAmJZAgkBAUQCBQJnZQUCYkMJAQFEAgUCZ2QFAmJCBAJmUwkBAUgCBQJmUgUBYgQCZlQEAmdxCQBoAgkAoAMBCQC8AgMFAmdiBQJnaAUCZk4AAgkAawMJAGUCBQJnawUCZ3EFAWIFAmdxCQCXCgUFAmdrBQJldgUCZnIFAmZUBQJnYQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECZ3IABAJncwkBAmFTAAQCYVEJAJ0IAgUCZ3MJAQFVAAMJAAECBQJhUQIGU3RyaW5nBAJhVgUCYVEJANkEAQUCYVYDCQABAgUCYVECBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgECZ3QBAmZkBAJhUQkBAmdyAAMJAAECBQJhUQIKQnl0ZVZlY3RvcgQCZ3UFAmFRCQAAAggFAmZkD2NhbGxlclB1YmxpY0tleQUCZ3UDCQABAgUCYVECBFVuaXQJAAACCAUCZmQGY2FsbGVyBQR0aGlzCQACAQILTWF0Y2ggZXJyb3IBAmd2AQJmZAQCZ3cJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAQCYVEJAQJncgADCQABAgUCYVECCkJ5dGVWZWN0b3IEAmd1BQJhUQMJAAACCAUCZmQPY2FsbGVyUHVibGljS2V5BQJndQYFAmd3AwkAAQIFAmFRAgRVbml0AwkAAAIIBQJmZAZjYWxsZXIFBHRoaXMGBQJndwkAAgECC01hdGNoIGVycm9yHAJmZAEJcmViYWxhbmNlAAkAzggCCQECY0sBCQECYVcCBQR0aGlzCQECYWUACQECY0sBCQECYVcCBQR0aGlzCQECYWYAAmZkASFjYWxjdWxhdGVBbW91bnRPdXRGb3JTd2FwUkVBRE9OTFkDAmd4Amd5Amd6BAJnQQMJAAACBQJneQcEAmdCCQECYVcCBQR0aGlzCQECYWYABAJnQwkBAmFXAgUEdGhpcwkBAmFlAAkAlAoCBQJnQgUCZ0MEAmdCCQECYVcCBQR0aGlzCQECYWUABAJnQwkBAmFXAgUEdGhpcwkBAmFmAAkAlAoCBQJnQgUCZ0MEAmdCCAUCZ0ECXzEEAmdDCAUCZ0ECXzIEAmdECQECYlYBBQJnQwQCZ0UJAQJiVgEFAmdCBAJnRgkAawMFAmdFBQJneAkAZAIFAmdEBQJneAQCZ0cJALkCAgkAtgIBBQJnRAkAtgIBBQJnRQQCZ0gJALkCAgkAtwICCQC3AgIJALYCAQkBAmJWAQUCZ0MJALYCAQUCZ3gJALYCAQUCZ3oJALgCAgkAtgIBCQECYlYBBQJnQgkAtgIBBQJnRgQCZ0kDCQDAAgIFAmdIBQJnRwYJAAIBAhRuZXcgSyBpcyBmZXdlciBlcnJvcgMJAAACBQJnSQUCZ0kJAJQKAgUDbmlsBQJnRgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJmZAEmY2FsY3VsYXRlQW1vdW50T3V0Rm9yU3dhcEFuZFNlbmRUb2tlbnMFAmd4Amd5AmdKAmdLAmd6BAJnTAoAAmJnCQD8BwQFAmJkAhdnZXRTd2FwQ29udHJhY3RSRUFET05MWQUDbmlsBQNuaWwDCQABAgUCYmcCBlN0cmluZwUCYmcJAAIBCQCsAgIJAAMBBQJiZwIbIGNvdWxkbid0IGJlIGNhc3QgdG8gU3RyaW5nBAJnTQoAAmJnCQD8BwQFAmJkAhppc1Bvb2xTd2FwRGlzYWJsZWRSRUFET05MWQkAzAgCCQClCAEFBHRoaXMFA25pbAUDbmlsAwkAAQIFAmJnAgdCb29sZWFuBQJiZwkAAgEJAKwCAgkAAwEFAmJnAhwgY291bGRuJ3QgYmUgY2FzdCB0byBCb29sZWFuBAJnTgMJAQEhAQkBAmJqAQgFAmZkBmNhbGxlcgMDCQECYmsABgkAAAIFAmJ4BQFuBgUCZ00HBAJmWgkAzAgCAwMJAQEhAQUCZ04GCQECZ3QBBQJmZAYJAQJiYQECInN3YXAgb3BlcmF0aW9uIGlzIGJsb2NrZWQgYnkgYWRtaW4JAMwIAgMJAGcCCAkBBXZhbHVlAQkAkQMCCAUCZmQIcGF5bWVudHMAAAZhbW91bnQFAmd4BgkBAmJhAQIMV3JvbmcgYW1vdW50CQDMCAIDCQAAAggFAmZkBmNhbGxlcgkBEUBleHRyTmF0aXZlKDEwNjIpAQUCZ0wGCQECYmEBAhFQZXJtaXNzaW9uIGRlbmllZAUDbmlsAwkAAAIFAmZaBQJmWgQCZmUJAQV2YWx1ZQEJAJEDAggFAmZkCHBheW1lbnRzAAAEAmdDCQECYnIBCAUCZmUHYXNzZXRJZAQCZ0IDCQAAAgUCZ3kHCQECYVcCBQR0aGlzCQECYWYACQECYVcCBQR0aGlzCQECYWUABAJnRAkAZQIJAGUCCQECYlYBBQJnQwgJAQV2YWx1ZQEJAJEDAggFAmZkCHBheW1lbnRzAAAGYW1vdW50BQJnegQCZ0UJAQJiVgEFAmdCBAJnRgkAawMFAmdFBQJneAkAZAIFAmdEBQJneAQCZ0cJALkCAgkAtgIBBQJnRAkAtgIBBQJnRQQCZ0gJALkCAgkAtwICCQC2AgEJAQJiVgEFAmdDCQC2AgEFAmd6CQC4AgIJALYCAQkBAmJWAQUCZ0IJALYCAQUCZ0YEAmdJAwkAwAICBQJnSAUCZ0cGCQACAQIUbmV3IEsgaXMgZmV3ZXIgZXJyb3IDCQAAAgUCZ0kFAmdJBAJnTwMJAGcCBQJnRgUCZ0oGCQACAQIsRXhjaGFuZ2UgcmVzdWx0IGlzIGZld2VyIGNvaW5zIHRoYW4gZXhwZWN0ZWQDCQAAAgUCZ08FAmdPBAJlTAMFAmd5CQEBLQEFAmdGBQJnegQCZU0DBQJneQUCZ3oJAQEtAQUCZ0YEAmdQCAkBAmVLAwUCZUwFAmVNAAACXzEDCQAAAgUCZ1AFAmdQBAJnUQkBAmNLAQUCZ0MDCQAAAgUCZ1EFAmdRBAJnUgkBAmNSAgUCZ0IFAmdGAwkAAAIFAmdSBQJnUgkAlAoCCQDOCAIJAM4IAgUCZ1IFAmdRCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAmdLBQJnRgkBAmJwAQUCZ0IFA25pbAUCZ0YJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZmQBA3B1dAICZFECZ1MDCQBmAgAABQJkUQkAAgECIEludmFsaWQgc2xpcHBhZ2VUb2xlcmFuY2UgcGFzc2VkBAJmawkBAmZoAwUCZmQFAmRRBgQCZXMIBQJmawJfMgQCZHgIBQJmawJfNwQCZE8IBQJmawJfOQQCZXQIBQJmawNfMTAEAmV1CAUCZmsDXzExBAJnVAgFAmZrA18xMgQCZ1UIBQJmawNfMTMEAmZpCQC2AgEICQEFdmFsdWUBCQCRAwIIBQJmZAhwYXltZW50cwAABmFtb3VudAQCZmoJALYCAQgJAQV2YWx1ZQEJAJEDAggFAmZkCHBheW1lbnRzAAEGYW1vdW50BAJlSgkBAmVDAwUCZmkFAmZqCQC2AgEAAAMJAAACBQJlSgUCZUoEAmZuCQD8BwQFAmJkAgRlbWl0CQDMCAIFAmVzBQNuaWwFA25pbAMJAAACBQJmbgUCZm4EAmZvBAJhUQUCZm4DCQABAgUCYVECB0FkZHJlc3MEAmZwBQJhUQkA/AcEBQJmcAIEZW1pdAkAzAgCBQJlcwUDbmlsBQNuaWwFBHVuaXQDCQAAAgUCZm8FAmZvBAJnVgMJAGYCBQJldAAACQD8BwQFAmJGAgNwdXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCZ1QFAmV0BQNuaWwFA25pbAMJAAACBQJnVgUCZ1YEAmdXAwkAZgIFAmV1AAAJAPwHBAUCYkYCA3B1dAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJnVQUCZXUFA25pbAUDbmlsAwkAAAIFAmdXBQJnVwQCZ1gDBQJnUwQCZ1kJAPwHBAUCYkUCBXN0YWtlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmR4BQJlcwUDbmlsAwkAAAIFAmdZBQJnWQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQJmZAZjYWxsZXIFAmVzBQJkeAUDbmlsBAJnWgkBAmVLAwAAAAAAAAMJAAACBQJnWgUCZ1oEAmVCCAUCZ1oCXzIEAmdQCAUCZ1oCXzEEAmhhCQECZVACBQJlSgUCZUIDCQAAAgUCaGEFAmhhBAJoYgkA/AcEBQR0aGlzAglyZWJhbGFuY2UFA25pbAUDbmlsAwkAAAIFAmhiBQJoYgkAzggCCQDOCAIFAmRPBQJnWAUCZ1AJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZmQBCnB1dEZvckZyZWUBAmhjAwkAZgIAAAUCaGMJAAIBAhRJbnZhbGlkIHZhbHVlIHBhc3NlZAQCZmsJAQJmaAMFAmZkBQJoYwcEAmRPCAUCZmsCXzkEAmZpCQC2AgEICQEFdmFsdWUBCQCRAwIIBQJmZAhwYXltZW50cwAABmFtb3VudAQCZmoJALYCAQgJAQV2YWx1ZQEJAJEDAggFAmZkCHBheW1lbnRzAAEGYW1vdW50BAJlSgkBAmVDAwUCZmkFAmZqCQC2AgEAAAMJAAACBQJlSgUCZUoEAmhkCQECZUsDAAAAAAAABAJnUAgFAmhkAl8xBAJlQggFAmhkAl8yBAJoYQkBAmVQAgUCZUoFAmVCAwkAAAIFAmhhBQJoYQkAzggCBQJkTwUCZ1AJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZmQBCXB1dE9uZVRrbgICaGUCaGYEAmhnCgACYmcJAPwHBAUCYmQCKGlzUG9vbE9uZVRva2VuT3BlcmF0aW9uc0Rpc2FibGVkUkVBRE9OTFkJAMwIAgkApQgBBQR0aGlzBQNuaWwFA25pbAMJAAECBQJiZwIHQm9vbGVhbgUCYmcJAAIBCQCsAgIJAAMBBQJiZwIcIGNvdWxkbid0IGJlIGNhc3QgdG8gQm9vbGVhbgQCZmwDCQEBIQEJAQJiagEIBQJmZAZjYWxsZXIDAwMJAQJiawAGCQAAAgUCYngFAWwGCQAAAgUCYngFAW4GBQJoZwcEAmZaCQDMCAIDAwkBASEBBQJmbAYJAQJndAEFAmZkBgkBAmJhAQIhcHV0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluCQDMCAIDCQAAAgkAkAMBCAUCZmQIcGF5bWVudHMAAQYJAQJiYQECHmV4YWN0bHkgMSBwYXltZW50IGFyZSBleHBlY3RlZAUDbmlsAwkAAAIFAmZaBQJmWgQCaGgJAJEDAggFAmZkCHBheW1lbnRzAAAEAmZ1CAUCaGgHYXNzZXRJZAQCZnQIBQJoaAZhbW91bnQEAmVKAwkAAAIFAmZ1BQJiegkBAmVDAwkAtgIBBQJmdAkAtgIBAAAJALYCAQAAAwkAAAIFAmZ1BQJiQQkBAmVDAwkAtgIBAAAJALYCAQUCZnQJALYCAQAACQECYmEBAh5wYXltZW50IGFzc2V0IGlzIG5vdCBzdXBwb3J0ZWQDCQAAAgUCZUoFAmVKBAJhYggFAmZkBmNhbGxlcgQCYWMIBQJmZA10cmFuc2FjdGlvbklkBAJoaQkBAmZzBAUCZnQFAmZ1BQJhYgUCYWMDCQAAAgUCaGkFAmhpBAJmeQgFAmhpAl81BAJoaggFAmhpAl80BAJmcggFAmhpAl8zBAJldggFAmhpAl8yBAJoawgFAmhpAl8xBAJobAMDCQBmAgUCaGUAAAkAZgIFAmhlBQJoawcJAQJiYQEJALkJAgkAzAgCAh9hbW91bnQgdG8gcmVjZWl2ZSBpcyBsZXNzIHRoYW4gCQDMCAIJAKQDAQUCaGUFA25pbAIABQJoawQCZm4JAQJmbQEFAmhsAwkAAAIFAmZuBQJmbgQCZ1gDBQJoZgQCaG0JAPwHBAUCYkUCBXN0YWtlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmJ5BQJobAUDbmlsAwkAAAIFAmhtBQJobQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQJmZAZjYWxsZXIFAmhsBQJieQUDbmlsBAJobgMJAGYCBQJmcgAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAmJlBQJmcgUCZnUFA25pbAUDbmlsBAJobwMJAAACBQR0aGlzBQJiZQkAlAoCAAAAAAMFAmZ5CQCUCgIJAQEtAQUCZnIAAAkAlAoCAAAJAQEtAQUCZnIEAmVMCAUCaG8CXzEEAmVNCAUCaG8CXzIEAmhwCQECZUsDBQJlTAUCZU0AAAQCZ1AIBQJocAJfMQQCZUIIBQJocAJfMgQCZVcJAQV2YWx1ZQEJAKIIAQUCYWoEAmhhCQECZVACBQJlSgUCZUIDCQAAAgUCaGEFAmhhBAJoYgkA/AcEBQR0aGlzAglyZWJhbGFuY2UFA25pbAUDbmlsAwkAAAIFAmhiBQJoYgkAlAoCCQDOCAIJAM4IAgkAzggCBQJldgUCZ1gFAmhuBQJnUAUCaGwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZmQBEXB1dE9uZVRrblJFQURPTkxZAgJmdQJmdAQCaHEJAQJmcwQFAmZ0CQECYnABBQJmdQUEdW5pdAUEdW5pdAQCaGsIBQJocQJfMQQCZXYIBQJocQJfMgQCZnIIBQJocQJfMwQCaGoIBQJocQJfNAQCZnkIBQJocQJfNQkAlAoCBQNuaWwJAJUKAwUCaGsFAmZyBQJoagJmZAEJZ2V0T25lVGtuAgJocgJoZQQCaGcKAAJiZwkA/AcEBQJiZAIoaXNQb29sT25lVG9rZW5PcGVyYXRpb25zRGlzYWJsZWRSRUFET05MWQkAzAgCCQClCAEFBHRoaXMFA25pbAUDbmlsAwkAAQIFAmJnAgdCb29sZWFuBQJiZwkAAgEJAKwCAgkAAwEFAmJnAhwgY291bGRuJ3QgYmUgY2FzdCB0byBCb29sZWFuBAJmZwMJAQEhAQkBAmJqAQgFAmZkBmNhbGxlcgMDCQECYmsABgkAAAIFAmJ4BQFuBgUCaGcHBAJmWgkAzAgCAwMJAQEhAQUCZmcGCQECZ3QBBQJmZAYJAQJiYQECIWdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbgkAzAgCAwkAAAIJAJADAQgFAmZkCHBheW1lbnRzAAEGCQECYmEBAh5leGFjdGx5IDEgcGF5bWVudCBhcmUgZXhwZWN0ZWQFA25pbAMJAAACBQJmWgUCZloEAmZZCQECYnABBQJocgQCaGgJAJEDAggFAmZkCHBheW1lbnRzAAAEAmZ1CAUCaGgHYXNzZXRJZAQCZkcIBQJoaAZhbW91bnQEAmVKCQECZUMDCQC2AgEAAAkAtgIBAAAJALYCAQAAAwkAAAIFAmVKBQJlSgQCYWIIBQJmZAZjYWxsZXIEAmFjCAUCZmQNdHJhbnNhY3Rpb25JZAQCaHMJAQJmWAUFAmZZBQJmRwUCZnUFAmFiBQJhYwMJAAACBQJocwUCaHMEAmdhCAUCaHMCXzUEAmhqCAUCaHMCXzQEAmZyCAUCaHMCXzMEAmV2CAUCaHMCXzIEAmh0CAUCaHMCXzEEAmNoAwMJAGYCBQJoZQAACQBmAgUCaGUFAmh0BwkBAmJhAQkAuQkCCQDMCAICH2Ftb3VudCB0byByZWNlaXZlIGlzIGxlc3MgdGhhbiAJAMwIAgkApAMBBQJoZQUDbmlsAgAFAmh0BAJodQkA/AcEBQJiZAIEYnVybgkAzAgCBQJmRwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJmdQUCZkcFA25pbAMJAAACBQJodQUCaHUEAmdSCQECY1ICBQJocgkAZAIFAmNoCQCWAwEJAMwIAgAACQDMCAIFAmZyBQNuaWwEAmh2CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAmFiBQJjaAUCZlkFA25pbAQCaG4DCQBmAgUCZnIAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQJiZQUCZnIFAmZZBQNuaWwFA25pbAQCaHcEAmh4AwkAAAIFBHRoaXMFAmJlAAAFAmZyAwUCZ2EJAJQKAgkBAS0BCQBkAgUCY2gFAmh4AAAJAJQKAgAACQEBLQEJAGQCBQJjaAUCaHgEAmVMCAUCaHcCXzEEAmVNCAUCaHcCXzIEAmh5CQECZUsDBQJlTAUCZU0AAAQCZ1AIBQJoeQJfMQQCZUIIBQJoeQJfMgQCaGEJAQJlUAIFAmVKBQJlQgMJAAACBQJoYQUCaGEJAJQKAgkAzggCCQDOCAIJAM4IAgkAzggCBQJldgUCZ1IFAmh2BQJobgUCZ1AFAmNoCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmZkARFnZXRPbmVUa25SRUFET05MWQICZlkCZkcEAmh6CQECZlgFCQECYnABBQJmWQUCZkcFAmJ5BQR1bml0BQR1bml0BAJodAgFAmh6Al8xBAJldggFAmh6Al8yBAJmcggFAmh6Al8zBAJoaggFAmh6Al80BAJnYQgFAmh6Al81CQCUCgIFA25pbAkAlQoDBQJodAUCZnIFAmhqAmZkARN1bnN0YWtlQW5kR2V0T25lVGtuAwJoQQJocgJoZQQCaGcKAAJiZwkA/AcEBQJiZAIoaXNQb29sT25lVG9rZW5PcGVyYXRpb25zRGlzYWJsZWRSRUFET05MWQkAzAgCCQClCAEFBHRoaXMFA25pbAUDbmlsAwkAAQIFAmJnAgdCb29sZWFuBQJiZwkAAgEJAKwCAgkAAwEFAmJnAhwgY291bGRuJ3QgYmUgY2FzdCB0byBCb29sZWFuBAJmZwMJAQEhAQkBAmJqAQgFAmZkBmNhbGxlcgMDCQECYmsABgkAAAIFAmJ4BQFuBgUCaGcHBAJmWgkAzAgCAwMJAQEhAQUCZmcGCQECZ3QBBQJmZAYJAQJiYQECIWdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbgkAzAgCAwkAAAIJAJADAQgFAmZkCHBheW1lbnRzAAAGCQECYmEBAhhubyBwYXltZW50cyBhcmUgZXhwZWN0ZWQFA25pbAMJAAACBQJmWgUCZloEAmZZCQECYnABBQJocgQCYWIIBQJmZAZjYWxsZXIEAmFjCAUCZmQNdHJhbnNhY3Rpb25JZAQCZUoJAQJlQwMJALYCAQAACQC2AgEAAAkAtgIBAAADCQAAAgUCZUoFAmVKBAJoQgkA/AcEBQJiRQIHdW5zdGFrZQkAzAgCCQDYBAEFAmJ5CQDMCAIFAmhBBQNuaWwFA25pbAMJAAACBQJoQgUCaEIEAmhDCQECZlgFBQJmWQUCaEEFAmJ5BQJhYgUCYWMDCQAAAgUCaEMFAmhDBAJnYQgFAmhDAl81BAJoaggFAmhDAl80BAJmcggFAmhDAl8zBAJldggFAmhDAl8yBAJodAgFAmhDAl8xBAJjaAMDCQBmAgUCaGUAAAkAZgIFAmhlBQJodAcJAQJiYQEJALkJAgkAzAgCAh9hbW91bnQgdG8gcmVjZWl2ZSBpcyBsZXNzIHRoYW4gCQDMCAIJAKQDAQUCaGUFA25pbAIABQJodAQCaHUJAPwHBAUCYmQCBGJ1cm4JAMwIAgUCaEEFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCYnkFAmhBBQNuaWwDCQAAAgUCaHUFAmh1BAJnUgkBAmNSAgUCaHIJAGQCBQJjaAkAlgMBCQDMCAIAAAkAzAgCBQJmcgUDbmlsBAJodgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUCZmQGY2FsbGVyBQJjaAUCZlkFA25pbAQCaG4DCQBmAgUCZnIAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQJiZQUCZnIFAmZZBQNuaWwFA25pbAQCaEQEAmh4AwkAAAIFBHRoaXMFAmJlAAAFAmZyAwUCZ2EJAJQKAgkBAS0BCQBkAgUCY2gFAmh4AAAJAJQKAgAACQEBLQEJAGQCBQJjaAUCaHgEAmVMCAUCaEQCXzEEAmVNCAUCaEQCXzIEAmhFCQECZUsDBQJlTAUCZU0AAAQCZ1AIBQJoRQJfMQQCZUIIBQJoRQJfMgQCaGEJAQJlUAIFAmVKBQJlQgMJAAACBQJoYQUCaGEJAJQKAgkAzggCCQDOCAIJAM4IAgkAzggCBQJldgUCZ1IFAmh2BQJobgUCZ1AFAmNoCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmZkAQNnZXQABAJlZwkBAmZjAQUCZmQEAmRNCAUCZWcCXzEEAmROCAUCZWcCXzIEAmZmCAUCZWcCXzMEAmR2CAUCZWcCXzQEAmRPCAUCZWcCXzUEAmdSCQECY1cCBQJkTQUCZE4EAmVKCQECZUMDCQC2AgEAAAkAtgIBAAAJALYCAQAAAwkAAAIFAmVKBQJlSgQCaEYJAPwHBAUCYmQCBGJ1cm4JAMwIAgUCZmYFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCZHYFAmZmBQNuaWwDCQAAAgUCaEYFAmhGBAJoRwkBAmVLAwkBAS0BBQJkTQkBAS0BBQJkTgAABAJnUAgFAmhHAl8xBAJlQggFAmhHAl8yBAJoYQkBAmVQAgUCZUoFAmVCAwkAAAIFAmhhBQJoYQkAzggCCQDOCAIFAmdSBQJkTwUCZ1AJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZmQBCWdldE5vTGVzcwICaEgCaEkEAmVnCQECZmMBBQJmZAQCZE0IBQJlZwJfMQQCZE4IBQJlZwJfMgQCZmYIBQJlZwJfMwQCZHYIBQJlZwJfNAQCZE8IBQJlZwJfNQMJAGYCBQJoSAUCZE0JAAIBCQCsAgIJAKwCAgkArAICAhxub0xlc3NUaGVuQW10QXNzZXQgZmFpbGVkOiAgCQCkAwEFAmRNAgMgPCAJAKQDAQUCaEgDCQBmAgUCaEkFAmROCQACAQkArAICCQCsAgIJAKwCAgIdbm9MZXNzVGhlblByaWNlQXNzZXQgZmFpbGVkOiAJAKQDAQUCZE4CAyA8IAkApAMBBQJoSQQCZ1IJAQJjVwIFAmRNBQJkTgQCZUoJAQJlQwMJALYCAQAACQC2AgEAAAkAtgIBAAADCQAAAgUCZUoFAmVKBAJoRgkA/AcEBQJiZAIEYnVybgkAzAgCBQJmZgUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJkdgUCZmYFA25pbAMJAAACBQJoRgUCaEYEAmhKCQECZUsDCQEBLQEFAmRNCQEBLQEFAmROAAAEAmdQCAUCaEoCXzEEAmVCCAUCaEoCXzIEAmhhCQECZVACBQJlSgUCZUIDCQAAAgUCaGEFAmhhCQDOCAIJAM4IAgUCZ1IFAmRPBQJnUAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJmZAENdW5zdGFrZUFuZEdldAECY2gEAmhLAwkBAiE9AgkAkAMBCAUCZmQIcGF5bWVudHMAAAkAAgECGE5vIHBheW1lbnRzIGFyZSBleHBlY3RlZAYDCQAAAgUCaEsFAmhLBAJkawkBAmJtAAQCZHgJANkEAQkAkQMCBQJkawUBcQQCZUoJAQJlQwMJALYCAQAACQC2AgEAAAkAtgIBAAADCQAAAgUCZUoFAmVKBAJoQgkA/AcEBQJiRQIHdW5zdGFrZQkAzAgCCQDYBAEFAmR4CQDMCAIFAmNoBQNuaWwFA25pbAMJAAACBQJoQgUCaEIEAmVnCQECZHQECQDYBAEIBQJmZA10cmFuc2FjdGlvbklkCQDYBAEFAmR4BQJjaAgFAmZkBmNhbGxlcgQCZE0IBQJlZwJfMQQCZE4IBQJlZwJfMgQCZEEJAQ1wYXJzZUludFZhbHVlAQgFAmVnAl85BAJkTwgFAmVnA18xMAQCZ1IJAQJjVwIFAmRNBQJkTgQCZmcDCQEBIQEJAQJiagEIBQJmZAZjYWxsZXIDCQECYmsABgkAAAIFAmJ4BQFuBwQCaEwDBQJmZwkAAgEJAKwCAgIsR2V0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluLiBTdGF0dXMgPSAJAKQDAQUCZEEGAwkAAAIFAmhMBQJoTAQCaEYJAPwHBAUCYmQCBGJ1cm4JAMwIAgUCY2gFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCZHgFAmNoBQNuaWwDCQAAAgUCaEYFAmhGBAJoTQkBAmVLAwkBAS0BBQJkTQkBAS0BBQJkTgAABAJnUAgFAmhNAl8xBAJlQggFAmhNAl8yBAJoYQkBAmVQAgUCZUoFAmVCAwkAAAIFAmhhBQJoYQkAzggCCQDOCAIFAmdSBQJkTwUCZ1AJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZmQBE3Vuc3Rha2VBbmRHZXROb0xlc3MDAmhBAmhOAmhJBAJmZwMJAQEhAQkBAmJqAQgFAmZkBmNhbGxlcgMJAQJiawAGCQAAAgUCYngFAW4HBAJmWgkAzAgCAwkBASEBBQJmZwYJAAIBAiFnZXQgb3BlcmF0aW9uIGlzIGJsb2NrZWQgYnkgYWRtaW4JAMwIAgMJAAACCQCQAwEIBQJmZAhwYXltZW50cwAABgkAAgECGG5vIHBheW1lbnRzIGFyZSBleHBlY3RlZAUDbmlsAwkAAAIFAmZaBQJmWgQCZUoJAQJlQwMJALYCAQAACQC2AgEAAAkAtgIBAAADCQAAAgUCZUoFAmVKBAJoQgkA/AcEBQJiRQIHdW5zdGFrZQkAzAgCCQDYBAEFAmJ5CQDMCAIFAmhBBQNuaWwFA25pbAMJAAACBQJoQgUCaEIEAmVnCQECZHQECQDYBAEIBQJmZA10cmFuc2FjdGlvbklkCQDYBAEFAmJ5BQJoQQgFAmZkBmNhbGxlcgQCZE0IBQJlZwJfMQQCZE4IBQJlZwJfMgQCZE8IBQJlZwNfMTAEAmdSCQECY1cCBQJkTQUCZE4EAmhPCQDMCAIDCQBnAgUCZE0FAmhOBgkAAgEJALkJAgkAzAgCAixhbW91bnQgYXNzZXQgYW1vdW50IHRvIHJlY2VpdmUgaXMgbGVzcyB0aGFuIAkAzAgCCQCkAwEFAmhOBQNuaWwCAAkAzAgCAwkAZwIFAmROBQJoSQYJAAIBCQC5CQIJAMwIAgIrcHJpY2UgYXNzZXQgYW1vdW50IHRvIHJlY2VpdmUgaXMgbGVzcyB0aGFuIAkAzAgCCQCkAwEFAmhJBQNuaWwCAAUDbmlsAwkAAAIFAmhPBQJoTwQCaEYJAPwHBAUCYmQCBGJ1cm4JAMwIAgUCaEEFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCYnkFAmhBBQNuaWwDCQAAAgUCaEYFAmhGBAJoUAkBAmVLAwkBAS0BBQJkTQkBAS0BBQJkTgAABAJnUAgFAmhQAl8xBAJlQggFAmhQAl8yBAJoYQkBAmVQAgUCZUoFAmVCAwkAAAIFAmhhBQJoYQkAzggCCQDOCAIFAmdSBQJkTwUCZ1AJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZmQBCGFjdGl2YXRlAgJoUQJoUgMJAQIhPQIJAKUIAQgFAmZkBmNhbGxlcgkApQgBBQJiZAkAAgECEnBlcm1pc3Npb25zIGRlbmllZAkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhZQAFAmhRCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhZgAFAmhSBQNuaWwCB3N1Y2Nlc3MCZmQBCnJlZnJlc2hLTHAABAJoUwkBC3ZhbHVlT3JFbHNlAgkAnwgBBQJhawAABAJoVAMJAGcCCQBlAgUGaGVpZ2h0BQJoUwUCYW4FBHVuaXQJAQJiYQEJALkJAgkAzAgCCQCkAwEFAmFuCQDMCAICLyBibG9ja3MgaGF2ZSBub3QgcGFzc2VkIHNpbmNlIHRoZSBwcmV2aW91cyBjYWxsBQNuaWwCAAMJAAACBQJoVAUCaFQEAmVXCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKgDAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQJhagIBMAkBAmJjAQILaW52YWxpZCBrTHAEAmhVCQECZUsDAAAAAAAABAJoVggFAmhVAl8xBAJlQggFAmhVAl8yBAJlTgMJAQIhPQIFAmVXBQJlQgUCaFYJAQJiYQECEm5vdGhpbmcgdG8gcmVmcmVzaAkAlAoCBQJlTgkApgMBBQJlQgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJmZAEcZ2V0UG9vbENvbmZpZ1dyYXBwZXJSRUFET05MWQAJAJQKAgUDbmlsCQECYm0AAmZkARxnZXRBY2NCYWxhbmNlV3JhcHBlclJFQURPTkxZAQJhcAkAlAoCBQNuaWwJAQJiVgEFAmFwAmZkARljYWxjUHJpY2VzV3JhcHBlclJFQURPTkxZAwJkZQJkZgJkagQCZHMJAQJkaQMFAmRlBQJkZgUCZGoJAJQKAgUDbmlsCQDMCAIJAKYDAQkAkQMCBQJkcwAACQDMCAIJAKYDAQkAkQMCBQJkcwABCQDMCAIJAKYDAQkAkQMCBQJkcwACBQNuaWwCZmQBFHRvWDE4V3JhcHBlclJFQURPTkxZAgFFAUYJAJQKAgUDbmlsCQCmAwEJAQFEAgUBRQUBRgJmZAEWZnJvbVgxOFdyYXBwZXJSRUFET05MWQIBSQFKCQCUCgIFA25pbAkBAUgCCQCnAwEFAUkFAUoCZmQBHmNhbGNQcmljZUJpZ0ludFdyYXBwZXJSRUFET05MWQICYloCY2EJAJQKAgUDbmlsCQCmAwEJAQJiWQIJAKcDAQUCYloJAKcDAQUCY2ECZmQBI2VzdGltYXRlUHV0T3BlcmF0aW9uV3JhcHBlclJFQURPTkxZCQJkdQJkUQJkUgJkUwJkVAJkVQJhYgJkVgJkVwkAlAoCBQNuaWwJAQJkUAkFAmR1BQJkUQUCZFIFAmRTBQJkVAUCZFUFAmFiBQJkVgUCZFcCZmQBI2VzdGltYXRlR2V0T3BlcmF0aW9uV3JhcHBlclJFQURPTkxZBAJkdQJkdgJkdwJhYgQCZWcJAQJkdAQFAmR1BQJkdgUCZHcJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAmFiCQCUCgIFA25pbAkAnAoKCAUCZWcCXzEIBQJlZwJfMggFAmVnAl8zCAUCZWcCXzQIBQJlZwJfNQgFAmVnAl82CAUCZWcCXzcJAKYDAQgFAmVnAl84CAUCZWcCXzkIBQJlZwNfMTACZmQBDXN0YXRzUkVBRE9OTFkABAJkawkBAmJtAAQCZHgJANkEAQkAkQMCBQJkawUBcQQCaFcJAJEDAgUCZGsFAXIEAmhYCQCRAwIFAmRrBQFzBAJkWgkAkQMCBQJkawUBdgQCZWEJAJEDAgUCZGsFAXcEAmRsCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCZGsFAXQEAmRtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCZGsFAXUEAmhZCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmR4CQCsAgIJAKwCAgIGQXNzZXQgCQDYBAEFAmR4Ag4gZG9lc24ndCBleGlzdAhxdWFudGl0eQQCaFoJAQJiVgEFAmhXBAJpYQkBAmJWAQUCaFgEAmliAwkAAAIFAmhZAAAJAMwIAgUBZQkAzAgCBQFlCQDMCAIFAWUFA25pbAkBAmRpAwUCaFoFAmlhBQJoWQQCZEgAAAQCaWMJAQFIAgkAkQMCBQJpYgABBQFiBAJpZAkBAUgCCQCRAwIFAmliAAIFAWIEAmllCQEFdmFsdWUBCQCaCAIFAmJkCQECYUQBCQClCAEFBHRoaXMJAJQKAgUDbmlsCQC5CQIJAMwIAgIOJWQlZCVkJWQlZCVkJWQJAMwIAgkApAMBBQJoWgkAzAgCCQCkAwEFAmlhCQDMCAIJAKQDAQUCaFkJAMwIAgkApAMBBQJkSAkAzAgCCQCkAwEFAmljCQDMCAIJAKQDAQUCaWQJAMwIAgkApAMBBQJpZQUDbmlsBQFqAmZkASBldmFsdWF0ZVB1dEJ5QW1vdW50QXNzZXRSRUFET05MWQECZFIEAmRrCQECYm0ABAJkeAkA2QQBCQCRAwIFAmRrBQFxBAJkWAkAkQMCBQJkawUBcgQCZHkJANkEAQUCZFgEAmRZCQCRAwIFAmRrBQFzBAJkegkA2QQBBQJkWQQCZGwJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJkawUBdAQCZG0JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJkawUBdQQCZEEJAJEDAgUCZGsFAXAEAmhZCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmR4CQCsAgIJAKwCAgIGQXNzZXQgCQDYBAEFAmR4Ag4gZG9lc24ndCBleGlzdAhxdWFudGl0eQQCaFoJAQJiVgEFAmRYBAJpYQkBAmJWAQUCZFkEAmRnCQEBRAIFAmhaBQJkbAQCZGgJAQFEAgUCaWEFAmRtBAJkRwMJAAACBQJoWQAABQFlCQECYlkCBQJkaAUCZGcEAmVkCQEBRAIFAmRSBQJkbAQCZWUJALwCAwUCZWQFAmRHBQFkBAJkVAkBAUgCBQJlZQUCZG0EAmZrCQECZFAJAgAAoMIeBQJkUgUCZHkFAmRUBQJkegIABgcEAmVvCAUCZmsCXzEEAmlmCAUCZmsCXzMEAmRDCAUCZmsCXzQEAmRFCAUCZmsCXzUEAmRCCAUCZmsCXzYJAJQKAgUDbmlsCQC5CQIJAMwIAgIQJWQlZCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFAmVvCQDMCAIJAKQDAQkBAUgCBQJkRwUBYgkAzAgCCQCkAwEFAmRDCQDMCAIJAKQDAQUCZEUJAMwIAgkApAMBBQJkQgkAzAgCBQJkQQkAzAgCCQCkAwEFAmRSCQDMCAIJAKQDAQUCZFQFA25pbAUBagJmZAEfZXZhbHVhdGVQdXRCeVByaWNlQXNzZXRSRUFET05MWQECZFQEAmRrCQECYm0ABAJkeAkA2QQBCQCRAwIFAmRrBQFxBAJkWAkAkQMCBQJkawUBcgQCZHkJANkEAQUCZFgEAmRZCQCRAwIFAmRrBQFzBAJkegkA2QQBBQJkWQQCZGwJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJkawUBdAQCZG0JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJkawUBdQQCZEEJAJEDAgUCZGsFAXAEAmhZCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmR4CQCsAgIJAKwCAgIGQXNzZXQgCQDYBAEFAmR4Ag4gZG9lc24ndCBleGlzdAhxdWFudGl0eQQCaWcJAQJiVgEFAmRYBAJpaAkBAmJWAQUCZFkEAmlpCQEBRAIFAmlnBQJkbAQCaWoJAQFEAgUCaWgFAmRtBAJkRwMJAAACBQJoWQAABQFlCQECYlkCBQJpagUCaWkEAmVlCQEBRAIFAmRUBQJkbQQCZWQJALwCAwUCZWUFAWQFAmRHBAJkUgkBAUgCBQJlZAUCZGwEAmZrCQECZFAJAgAAoMIeBQJkUgUCZHkFAmRUBQJkegIABgcEAmVvCAUCZmsCXzEEAmlmCAUCZmsCXzMEAmRDCAUCZmsCXzQEAmRFCAUCZmsCXzUEAmRCCAUCZmsCXzYJAJQKAgUDbmlsCQC5CQIJAMwIAgIQJWQlZCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFAmVvCQDMCAIJAKQDAQkBAUgCBQJkRwUBYgkAzAgCCQCkAwEFAmRDCQDMCAIJAKQDAQUCZEUJAMwIAgkApAMBBQJkQgkAzAgCBQJkQQkAzAgCCQCkAwEFAmRSCQDMCAIJAKQDAQUCZFQFA25pbAUBagJmZAETZXZhbHVhdGVHZXRSRUFET05MWQICaWsCaWwEAmVnCQECZHQEAgAFAmlrBQJpbAUEdGhpcwQCZE0IBQJlZwJfMQQCZE4IBQJlZwJfMgQCZEMIBQJlZwJfNQQCZEUIBQJlZwJfNgQCZEIIBQJlZwJfNwQCZEgIBQJlZwJfOAQCZEEJAQ1wYXJzZUludFZhbHVlAQgFAmVnAl85CQCUCgIFA25pbAkAuQkCCQDMCAICDiVkJWQlZCVkJWQlZCVkCQDMCAIJAKQDAQUCZE0JAMwIAgkApAMBBQJkTgkAzAgCCQCkAwEFAmRDCQDMCAIJAKQDAQUCZEUJAMwIAgkApAMBBQJkQgkAzAgCCQCmAwEFAmRICQDMCAIJAKQDAQUCZEEFA25pbAUBagECaW0BAmluAAQCaW8EAmFRCQECZ3IAAwkAAQIFAmFRAgpCeXRlVmVjdG9yBAJndQUCYVEFAmd1AwkAAQIFAmFRAgRVbml0CAUCaW0Pc2VuZGVyUHVibGljS2V5CQACAQILTWF0Y2ggZXJyb3IEAmFRBQJpbQMJAAECBQJhUQIFT3JkZXIEAmVTBQJhUQQCaXAJAQJibAAEAmlxAwkBAmVPAAkAlAoCBgIACQECZVIBBQJlUwQCYUsIBQJpcQJfMQQCYUwIBQJpcQJfMgQCYU0JAPQDAwgFAmVTCWJvZHlCeXRlcwkAkQMCCAUCZVMGcHJvb2ZzAAAIBQJlUw9zZW5kZXJQdWJsaWNLZXkEAmFOCQD0AwMIBQJlUwlib2R5Qnl0ZXMJAJEDAggFAmVTBnByb29mcwABBQJpcAMDAwUCYUsFAmFNBwUCYU4HBgkBAmFKBAUCYUsFAmFMBQJhTQUCYU4DCQABAgUCYVECFFNldFNjcmlwdFRyYW5zYWN0aW9uBAJhVgUCYVEDCQD0AwMIBQJpbQlib2R5Qnl0ZXMJAJEDAggFAmltBnByb29mcwAABQJpbwYEAmlyCQD2AwEJAQV2YWx1ZQEIBQJhVgZzY3JpcHQEAmlzCQDbBAEJAQV2YWx1ZQEJAJ0IAgUCYmQJAQJhRgAEAml0CQDxBwEFBHRoaXMDCQAAAgUCaXMFAmlyCQECIT0CBQJpdAUCaXIHCQD0AwMIBQJpbQlib2R5Qnl0ZXMJAJEDAggFAmltBnByb29mcwAABQJpb6uQlhc=", "height": 3066417, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 838d9aNBMi4kstg36zxLE49tezzDLvMamci9kRLAU3Eb Next: none Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = 8
55
66 let b = 100000000
77
88 let c = toBigInt(100000000)
99
1010 let d = toBigInt(1000000000000000000)
1111
1212 let e = toBigInt(0)
1313
1414 let f = toBigInt(0)
1515
1616 let g = toBigInt(1)
1717
1818 let h = toBigInt(2)
1919
2020 let i = "WAVES"
2121
2222 let j = "__"
2323
2424 let k = 1
2525
2626 let l = 2
2727
2828 let m = 3
2929
3030 let n = 4
3131
3232 let o = 1
3333
3434 let p = 2
3535
3636 let q = 3
3737
3838 let r = 4
3939
4040 let s = 5
4141
4242 let t = 6
4343
4444 let u = 7
4545
4646 let v = 8
4747
4848 let w = 9
4949
5050 let x = 10
5151
5252 let y = 1
5353
5454 let z = 2
5555
5656 let A = 3
5757
5858 let B = 1
5959
6060 let C = 7
6161
6262 func D (E,F) = fraction(toBigInt(E), d, toBigInt(F))
6363
6464
6565 func G (E,F) = fraction(E, d, F)
6666
6767
6868 func H (I,J) = toInt(fraction(I, toBigInt(J), d))
6969
7070
7171 func K (I,J,L) = toInt(fraction(I, toBigInt(J), d, L))
7272
7373
7474 func M (N,O,P) = fraction(N, O, P)
7575
7676
7777 func Q (I) = if ((0 > I))
7878 then -(I)
7979 else I
8080
8181
8282 func R (I) = if ((e > I))
8383 then -(I)
8484 else I
8585
8686
8787 func S () = "%s__swapContract"
8888
8989
9090 func T () = "%s__factoryContract"
9191
9292
9393 func U () = "%s__managerPublicKey"
9494
9595
9696 func V () = "%s__managerVaultAddress"
9797
9898
9999 func W () = "%s%s__price__last"
100100
101101
102102 func X (Y,Z) = makeString(["%s%s%d%d__price__history", toString(Y), toString(Z)], j)
103103
104104
105105 func aa (ab,ac) = ((("%s%s%s__P__" + ab) + "__") + ac)
106106
107107
108108 func ad (ab,ac) = ((("%s%s%s__G__" + ab) + "__") + ac)
109109
110110
111111 func ae () = "%s__amountAsset"
112112
113113
114114 func af () = "%s__priceAsset"
115115
116116
117117 let ag = "%s__fee"
118118
119119 let ah = fraction(10, b, 10000)
120120
121121 let ai = valueOrElse(getInteger(this, ag), ah)
122122
123123 let aj = makeString(["%s", "kLp"], j)
124124
125125 let ak = makeString(["%s", "kLpRefreshedHeight"], j)
126126
127127 let al = makeString(["%s", "refreshKLpDelay"], j)
128128
129129 let am = 30
130130
131131 let an = valueOrElse(getInteger(this, al), am)
132132
133133 func ao (ap) = makeString(["%s%s", "stakedBalance", ap], j)
134134
135135
136136 func aq (ap) = makeString(["%s%s", "shareAssetBalance", ap], j)
137137
138138
139139 func ar (ap) = valueOrElse(getInteger(this, ao(ap)), 0)
140140
141141
142142 func as (ap) = valueOrElse(getInteger(this, aq(ap)), 0)
143143
144144
145145 func at () = "%s__factoryConfig"
146146
147147
148148 func au () = "%s%s__matcher__publicKey"
149149
150150
151151 func av (aw) = (("%s%s%s__" + aw) + "__mappings__poolContract2LpAsset")
152152
153153
154154 func ax (ay,az) = (((("%d%d%s__" + ay) + "__") + az) + "__config")
155155
156156
157157 func aA (aB) = ("%s%s%s__mappings__baseAsset2internalId__" + aB)
158158
159159
160160 func aC () = "%s__shutdown"
161161
162162
163163 func aD (aE) = ("%s%s__poolWeight__" + aE)
164164
165165
166166 func aF () = "%s__allowedLpScriptHash"
167167
168168
169169 let aG = "%s__feeCollectorAddress"
170170
171171 func aH (aI) = ("%s%s__skipOrderValidation__" + aI)
172172
173173
174174 func aJ (aK,aL,aM,aN) = throw((((((((("order validation failed: orderValid=" + toString(aK)) + " (") + aL) + ")") + " senderValid=") + toString(aM)) + " matcherValid=") + toString(aN)))
175175
176176
177177 func aO (aP) = {
178178 let aQ = addressFromString(aP)
179179 if ($isInstanceOf(aQ, "Address"))
180180 then {
181181 let aR = aQ
182182 aR
183183 }
184184 else this
185185 }
186186
187187
188188 func aS () = {
189189 let aT = {
190190 let aQ = getString(T())
191191 if ($isInstanceOf(aQ, "String"))
192192 then {
193193 let aU = aQ
194194 aO(aU)
195195 }
196196 else this
197197 }
198198 let aQ = getString(aT, V())
199199 if ($isInstanceOf(aQ, "String"))
200200 then {
201201 let aV = aQ
202202 aO(aV)
203203 }
204204 else this
205205 }
206206
207207
208208 func aW (aX,aY) = valueOrErrorMessage(getString(aX, aY), makeString(["mandatory ", toString(aX), ".", aY, " is not defined"], ""))
209209
210210
211211 func aZ (aX,aY) = valueOrErrorMessage(getInteger(aX, aY), makeString(["mandatory ", toString(aX), ".", aY, " is not defined"], ""))
212212
213213
214214 func ba (bb) = throw(makeString(["lp.ride:", bb], " "))
215215
216216
217217 func bc (bb) = makeString(["lp.ride:", bb], " ")
218218
219219
220220 let bd = addressFromStringValue(aW(this, T()))
221221
222222 let be = addressFromStringValue(aW(bd, aG))
223223
224224 let bf = {
225225 let bg = invoke(bd, "getInFeeREADONLY", [toString(this)], nil)
226226 if ($isInstanceOf(bg, "Int"))
227227 then bg
228228 else throw(($getType(bg) + " couldn't be cast to Int"))
229229 }
230230
231231 let bh = {
232232 let bg = invoke(bd, "getOutFeeREADONLY", [toString(this)], nil)
233233 if ($isInstanceOf(bg, "Int"))
234234 then bg
235235 else throw(($getType(bg) + " couldn't be cast to Int"))
236236 }
237237
238238 func bi (aX) = makeString(["%s%s", "whitelisted", toString(aX)], j)
239239
240240
241241 func bj (aX) = valueOrElse(getBoolean(bd, bi(aX)), false)
242242
243243
244244 func bk () = valueOrElse(getBoolean(bd, aC()), false)
245245
246246
247247 func bl () = fromBase58String(aW(bd, au()))
248248
249249
250250 func bm () = {
251251 let bn = aW(this, ae())
252252 let bo = aW(this, af())
253253 let az = aZ(bd, aA(bo))
254254 let ay = aZ(bd, aA(bn))
255255 split(aW(bd, ax(toString(ay), toString(az))), j)
256256 }
257257
258258
259259 func bp (bq) = if ((bq == i))
260260 then unit
261261 else fromBase58String(bq)
262262
263263
264264 func br (bq) = if ((bq == unit))
265265 then i
266266 else toBase58String(value(bq))
267267
268268
269269 func bs (bt) = $Tuple7(addressFromStringValue(bt[o]), parseIntValue(bt[p]), fromBase58String(bt[q]), bp(bt[r]), bp(bt[s]), parseIntValue(bt[t]), parseIntValue(bt[u]))
270270
271271
272272 let bu = bs(bm())
273273
274274 let bv = bu
275275
276276 let bw = bv._1
277277
278278 let bx = bv._2
279279
280280 let by = bv._3
281281
282282 let bz = bv._4
283283
284284 let bA = bv._5
285285
286286 let bB = bv._6
287287
288288 let bC = bv._7
289289
290290 func bD () = split(aW(bd, at()), j)
291291
292292
293293 let bE = valueOrErrorMessage(addressFromString(bD()[B]), "incorrect staking address")
294294
295295 let bF = valueOrErrorMessage(addressFromString(bD()[C]), "incorrect staking address")
296296
297297 func bG (bH,bI,bJ,bK,bL,bM,bN,bO,bP,bQ) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(bH), toString(bI), toString(bJ), toString(bK), toString(bL), toString(bM), toString(bN), toString(bO), toString(bP), toString(bQ)], j)
298298
299299
300300 func bR (bS,bT,bU,bK,bN,bO) = makeString(["%d%d%d%d%d%d", toString(bS), toString(bT), toString(bU), toString(bK), toString(bN), toString(bO)], j)
301301
302302
303303 func bV (ap) = {
304304 let bW = if ((ap == "WAVES"))
305305 then wavesBalance(this).available
306306 else assetBalance(this, fromBase58String(ap))
307307 let bX = ((bW + ar(ap)) - as(ap))
308308 max([0, bX])
309309 }
310310
311311
312312 func bY (bZ,ca) = fraction(bZ, d, ca)
313313
314314
315315 func cb (bZ,ca,L) = fraction(bZ, d, ca, L)
316316
317317
318318 func cc (cd) = {
319319 let ce = invoke(cd, "getRate", nil, nil)
320320 if ((ce == ce))
321321 then {
322322 let aQ = ce
323323 if ($isInstanceOf(aQ, "Int"))
324324 then {
325325 let cf = aQ
326326 cf
327327 }
328328 else ba("proxy.getRate() unexpected value")
329329 }
330330 else throw("Strict value is not equal to itself.")
331331 }
332332
333333
334334 func cg (ap,ch,ci,cd) = {
335335 let cj = ar(ap)
336336 if ((cj == cj))
337337 then {
338338 let ck = as(ci)
339339 if ((ck == ck))
340340 then {
341341 let cl = bp(ap)
342342 if ((ch > 0))
343343 then {
344344 let cm = invoke(cd, "deposit", nil, [AttachedPayment(cl, ch)])
345345 if ((cm == cm))
346346 then {
347347 let aQ = cm
348348 if ($isInstanceOf(aQ, "Int"))
349349 then {
350350 let cn = aQ
351351 let co = (cj + ch)
352352 let cp = (ck + cn)
353353 [IntegerEntry(ao(ap), co), IntegerEntry(aq(ci), cp)]
354354 }
355355 else nil
356356 }
357357 else throw("Strict value is not equal to itself.")
358358 }
359359 else nil
360360 }
361361 else throw("Strict value is not equal to itself.")
362362 }
363363 else throw("Strict value is not equal to itself.")
364364 }
365365
366366
367367 func cq (ap,ch,ci,cd,cr,cs) = {
368368 let cj = ar(ap)
369369 if ((cj == cj))
370370 then {
371371 let ck = as(ci)
372372 if ((ck == ck))
373373 then {
374374 let ct = cc(cd)
375375 if ((ct == ct))
376376 then {
377377 let cu = fraction(cr, cj, ck)
378378 let cv = bp(ci)
379379 let cw = fraction(cr, ch, cu)
380380 let cx = fraction(cr, ch, ct)
381381 let cy = max([0, (cw - cx)])
382382 if ((cx > 0))
383383 then {
384384 let cz = invoke(cd, "withdraw", nil, [AttachedPayment(cv, cx)])
385385 if ((cz == cz))
386386 then {
387387 let aQ = cz
388388 if ($isInstanceOf(aQ, "Int"))
389389 then {
390390 let cA = aQ
391391 let co = (cj - cA)
392392 let cp = ((ck - cx) - cy)
393393 [IntegerEntry(ao(ap), co), IntegerEntry(aq(ci), cp), ScriptTransfer(cs, cy, bp(ci))]
394394 }
395395 else nil
396396 }
397397 else throw("Strict value is not equal to itself.")
398398 }
399399 else nil
400400 }
401401 else throw("Strict value is not equal to itself.")
402402 }
403403 else throw("Strict value is not equal to itself.")
404404 }
405405 else throw("Strict value is not equal to itself.")
406406 }
407407
408408
409409 func cB (ap) = {
410410 let aQ = invoke(bd, "getPoolLeaseConfigREADONLY", [toString(this), ap], nil)
411411 if ($isInstanceOf(aQ, "(Boolean, Int, Int, String, String, Int, String)"))
412412 then {
413413 let aR = aQ
414414 aR
415415 }
416416 else ba((("[" + ap) + "] getLeaseProxyConfig() error"))
417417 }
418418
419419
420420 func cC (cD,ap,ci,cE,cd,cr,cs) = {
421421 let ck = as(ci)
422422 if ((ck == ck))
423423 then {
424424 let cj = if ((ck != 0))
425425 then ar(ap)
426426 else 0
427427 if ((cj == cj))
428428 then {
429429 let cF = max([0, (bV(ap) - cE)])
430430 let cG = fraction(cD, cF, 100)
431431 let cH = (cj - cG)
432432 if ((cH == 0))
433433 then nil
434434 else if ((0 > cH))
435435 then {
436436 let cI = -(cH)
437437 cg(ap, cI, ci, cd)
438438 }
439439 else {
440440 let cJ = cH
441441 cq(ap, cJ, ci, cd, cr, cs)
442442 }
443443 }
444444 else throw("Strict value is not equal to itself.")
445445 }
446446 else throw("Strict value is not equal to itself.")
447447 }
448448
449449
450450 func cK (ap) = {
451451 let cL = cB(ap)
452452 let cM = cL._1
453453 let cN = cL._2
454454 let cE = cL._3
455455 let cO = cL._4
456456 let cP = cL._5
457457 let cr = cL._6
458458 let cQ = cL._7
459459 if (cM)
460460 then cC(cN, ap, cP, cE, addressFromStringValue(cO), cr, addressFromStringValue(cQ))
461461 else nil
462462 }
463463
464464
465465 func cR (ap,cS) = {
466466 let cT = cB(ap)
467467 let cM = cT._1
468468 let cN = cT._2
469469 let cE = cT._3
470470 let cO = cT._4
471471 let cP = cT._5
472472 let cr = cT._6
473473 let cQ = cT._7
474474 if (cM)
475475 then {
476476 let ck = as(cP)
477477 if ((ck == ck))
478478 then {
479479 let cj = if ((ck != 0))
480480 then ar(ap)
481481 else 0
482482 if ((cj == cj))
483483 then {
484484 let cU = max([0, ((bV(ap) - cS) - cE)])
485485 if ((cU == cU))
486486 then {
487487 let co = fraction(cN, cU, 100)
488488 if ((co == co))
489489 then {
490490 let cV = (cj - co)
491491 if ((cV == cV))
492492 then if ((cV == 0))
493493 then nil
494494 else if ((0 > cV))
495495 then cg(ap, -(cV), cP, addressFromStringValue(cO))
496496 else cq(ap, cV, cP, addressFromStringValue(cO), cr, addressFromStringValue(cQ))
497497 else throw("Strict value is not equal to itself.")
498498 }
499499 else throw("Strict value is not equal to itself.")
500500 }
501501 else throw("Strict value is not equal to itself.")
502502 }
503503 else throw("Strict value is not equal to itself.")
504504 }
505505 else throw("Strict value is not equal to itself.")
506506 }
507507 else nil
508508 }
509509
510510
511511 func cW (cX,cY) = {
512512 let cZ = cR(aW(this, ae()), cX)
513513 let da = cR(aW(this, af()), cY)
514514 (cZ ++ da)
515515 }
516516
517517
518518 func db (dc,dd,de,df) = {
519519 let dg = D(de, dc)
520520 let dh = D(df, dd)
521521 bY(dh, dg)
522522 }
523523
524524
525525 func di (de,df,dj) = {
526526 let dk = bm()
527527 let dl = parseIntValue(dk[t])
528528 let dm = parseIntValue(dk[u])
529529 let dn = db(dl, dm, de, df)
530530 let ca = D(de, dl)
531531 let bZ = D(df, dm)
532532 let do = D(dj, b)
533533 let dp = bY(ca, do)
534534 let dq = bY(bZ, do)
535535 [dn, dp, dq]
536536 }
537537
538538
539539 func dr (de,df,dj) = {
540540 let ds = di(de, df, dj)
541541 [H(ds[0], b), H(ds[1], b), H(ds[2], b)]
542542 }
543543
544544
545545 func dt (du,dv,dw,ab) = {
546546 let dk = bm()
547547 let dx = dk[q]
548548 let dy = dk[r]
549549 let dz = dk[s]
550550 let dc = parseIntValue(dk[t])
551551 let dd = parseIntValue(dk[u])
552552 let dA = dk[p]
553553 let dB = valueOrErrorMessage(assetInfo(fromBase58String(dx)), (("Asset " + dx) + " doesn't exist")).quantity
554554 if ((dx != dv))
555555 then throw("Invalid asset passed.")
556556 else {
557557 let dC = bV(dy)
558558 let dD = D(dC, dc)
559559 let dE = bV(dz)
560560 let dF = D(dE, dd)
561561 let dG = bY(dF, dD)
562562 let dH = H(dG, b)
563563 let dI = D(dw, b)
564564 let dJ = D(dB, b)
565565 let dK = fraction(dD, dI, dJ)
566566 let dL = fraction(dF, dI, dJ)
567567 let dM = K(dK, dc, FLOOR)
568568 let dN = K(dL, dd, FLOOR)
569569 let dO = if ((du == ""))
570570 then nil
571571 else [ScriptTransfer(ab, dM, if ((dy == "WAVES"))
572572 then unit
573573 else fromBase58String(dy)), ScriptTransfer(ab, dN, if ((dz == "WAVES"))
574574 then unit
575575 else fromBase58String(dz)), StringEntry(ad(toString(ab), du), bR(dM, dN, dw, dH, height, lastBlock.timestamp)), IntegerEntry(W(), dH), IntegerEntry(X(height, lastBlock.timestamp), dH)]
576576 $Tuple10(dM, dN, dy, dz, dC, dE, dB, dG, dA, dO)
577577 }
578578 }
579579
580580
581581 func dP (du,dQ,dR,dS,dT,dU,ab,dV,dW) = {
582582 let dk = bm()
583583 let dx = fromBase58String(dk[q])
584584 let dX = dk[r]
585585 let dY = dk[s]
586586 let dZ = dk[v]
587587 let ea = dk[w]
588588 let dl = parseIntValue(dk[t])
589589 let dm = parseIntValue(dk[u])
590590 let dA = dk[p]
591591 let dB = valueOrErrorMessage(assetInfo(dx), (("Asset " + toBase58String(dx)) + " doesn't exist")).quantity
592592 let eb = toBase58String(valueOrElse(dS, fromBase58String("WAVES")))
593593 let ec = toBase58String(valueOrElse(dU, fromBase58String("WAVES")))
594594 if (if ((dX != eb))
595595 then true
596596 else (dY != ec))
597597 then throw("Invalid amt or price asset passed.")
598598 else {
599599 let dC = if (dV)
600600 then bV(dX)
601601 else (bV(dX) - dR)
602602 let dE = if (dV)
603603 then bV(dY)
604604 else (bV(dY) - dT)
605605 let ed = D(dR, dl)
606606 let ee = D(dT, dm)
607607 let ef = bY(ee, ed)
608608 let dD = D(dC, dl)
609609 let dF = D(dE, dm)
610610 let eg = if ((dB == 0))
611611 then {
612612 let dG = e
613613 let eh = e
614614 let do = pow((ed * ee), 0, toBigInt(5), 1, 0, DOWN)
615615 $Tuple5(H(do, b), H(ed, dl), H(ee, dm), bY((dF + ee), (dD + ed)), eh)
616616 }
617617 else {
618618 let dG = bY(dF, dD)
619619 let eh = fraction(R((dG - ef)), d, dG)
620620 let ei = D(dQ, b)
621621 if (if ((dG != e))
622622 then (eh > ei)
623623 else false)
624624 then throw(((("Price slippage " + toString(eh)) + " exceeded the passed limit of ") + toString(ei)))
625625 else {
626626 let dJ = D(dB, b)
627627 let ej = fraction(ed, cb(dF, dD, CEILING), d, CEILING)
628628 let ek = fraction(ee, d, cb(dF, dD, FLOOR), CEILING)
629629 let el = if ((ej > ee))
630630 then $Tuple2(ek, ee)
631631 else $Tuple2(ed, ej)
632632 let em = el._1
633633 let en = el._2
634634 let do = fraction(dJ, en, dF, FLOOR)
635635 $Tuple5(K(do, b, FLOOR), K(em, dl, CEILING), K(en, dm, CEILING), dG, eh)
636636 }
637637 }
638638 let eo = eg._1
639639 let ep = eg._2
640640 let eq = eg._3
641641 let dH = H(eg._4, b)
642642 let er = H(eg._5, b)
643643 if ((0 >= eo))
644644 then throw("Invalid calculations. LP calculated is less than zero.")
645645 else {
646646 let es = if (!(dW))
647647 then 0
648648 else eo
649649 let et = (dR - ep)
650650 let eu = (dT - eq)
651651 let ev = [IntegerEntry(W(), dH), IntegerEntry(X(height, lastBlock.timestamp), dH), StringEntry(aa(ab, du), bG(ep, eq, es, dH, dQ, er, height, lastBlock.timestamp, et, eu))]
652652 $Tuple13(eo, es, dH, dC, dE, dB, dx, dA, ev, et, eu, dS, dU)
653653 }
654654 }
655655 }
656656
657657
658658 func ew (ex,ey,dB) = {
659659 let ez = G(ex, toBigInt(bB))
660660 let eA = G(ey, toBigInt(bC))
661661 let eB = fraction(pow((ez * eA), 0, toBigInt(5), 1, 18, DOWN), g, dB)
662662 if ((dB == f))
663663 then f
664664 else eB
665665 }
666666
667667
668668 func eC (eD,eE,eF) = {
669669 let eG = (toBigInt(bV(br(bz))) - eD)
670670 let eH = (toBigInt(bV(br(bA))) - eE)
671671 let eI = (toBigInt(value(assetInfo(by)).quantity) - eF)
672672 let eJ = ew(eG, eH, eI)
673673 eJ
674674 }
675675
676676
677677 func eK (eL,eM,eF) = {
678678 let eG = (bV(br(bz)) + eL)
679679 let eH = (bV(br(bA)) + eM)
680680 let eI = (value(assetInfo(by)).quantity + eF)
681681 let eB = ew(toBigInt(eG), toBigInt(eH), toBigInt(eI))
682682 let eN = [IntegerEntry(ak, height), StringEntry(aj, toString(eB))]
683683 $Tuple2(eN, eB)
684684 }
685685
686686
687687 func eO () = valueOrElse(getBoolean(bd, aH(toString(this))), false)
688688
689689
690690 func eP (eQ,eB) = if ((eB >= eQ))
691691 then true
692692 else ba(makeString(["updated KLp lower than current KLp", toString(eQ), toString(eB)], " "))
693693
694694
695695 func eR (eS) = {
696696 let eG = bV(br(bz))
697697 let eH = bV(br(bA))
698698 let eT = eS.amount
699699 let eU = fraction(eS.amount, eS.price, b, FLOOR)
700700 let eV = if ((eS.orderType == Buy))
701701 then $Tuple2(eT, -(eU))
702702 else $Tuple2(-(eT), eU)
703703 let eL = eV._1
704704 let eM = eV._2
705705 if (if (if (bk())
706706 then true
707707 else (bx == m))
708708 then true
709709 else (bx == n))
710710 then throw("Exchange operations disabled")
711711 else if (if ((eS.assetPair.amountAsset != bz))
712712 then true
713713 else (eS.assetPair.priceAsset != bA))
714714 then throw("Wrong order assets.")
715715 else {
716716 let eW = valueOrErrorMessage(parseBigInt(valueOrElse(getString(this, aj), "0")), bc("invalid kLp"))
717717 let eX = eK(eL, eM, 0)
718718 let eY = eX._1
719719 let eZ = eX._2
720720 let fa = (eZ >= eW)
721721 let fb = makeString(["kLp=", toString(eW), " kLpNew=", toString(eZ), " amountAssetBalance=", toString(eG), " priceAssetBalance=", toString(eH), " amountAssetBalanceDelta=", toString(eL), " priceAssetBalanceDelta=", toString(eM), " height=", toString(height)], "")
722722 $Tuple2(fa, fb)
723723 }
724724 }
725725
726726
727727 func fc (fd) = if ((size(fd.payments) != 1))
728728 then throw("exactly 1 payment is expected")
729729 else {
730730 let fe = value(fd.payments[0])
731731 let dv = value(fe.assetId)
732732 let ff = fe.amount
733733 let eg = dt(toBase58String(fd.transactionId), toBase58String(dv), ff, fd.caller)
734734 let dM = eg._1
735735 let dN = eg._2
736736 let dO = eg._10
737737 let fg = if (!(bj(fd.caller)))
738738 then if (bk())
739739 then true
740740 else (bx == n)
741741 else false
742742 if (fg)
743743 then throw(("Get operation is blocked by admin. Status = " + toString(bx)))
744744 else $Tuple5(dM, dN, ff, dv, dO)
745745 }
746746
747747
748748 func fh (fd,dQ,dW) = if ((size(fd.payments) != 2))
749749 then throw("exactly 2 payments are expected")
750750 else {
751751 let fi = value(fd.payments[0])
752752 let fj = value(fd.payments[1])
753753 let fk = dP(toBase58String(fd.transactionId), dQ, fi.amount, fi.assetId, fj.amount, fj.assetId, toString(fd.caller), false, dW)
754754 let fl = if (!(bj(fd.caller)))
755755 then if (if (bk())
756756 then true
757757 else (bx == l))
758758 then true
759759 else (bx == n)
760760 else false
761761 if (fl)
762762 then throw(("Put operation is blocked by admin. Status = " + toString(bx)))
763763 else fk
764764 }
765765
766766
767767 func fm (ch) = {
768768 let fn = invoke(bd, "emit", [ch], nil)
769769 if ((fn == fn))
770770 then {
771771 let fo = {
772772 let aQ = fn
773773 if ($isInstanceOf(aQ, "Address"))
774774 then {
775775 let fp = aQ
776776 invoke(fp, "emit", [ch], nil)
777777 }
778778 else unit
779779 }
780780 if ((fo == fo))
781781 then ch
782782 else throw("Strict value is not equal to itself.")
783783 }
784784 else throw("Strict value is not equal to itself.")
785785 }
786786
787787
788788 func fq (ch,ai) = {
789789 let fr = if ((ai == 0))
790790 then 0
791791 else fraction(ch, ai, b)
792792 $Tuple2((ch - fr), fr)
793793 }
794794
795795
796796 func fs (ft,fu,ab,ac) = {
797797 let fv = (ac == unit)
798798 let fw = bV(br(bz))
799799 let fx = bV(br(bA))
800800 let fy = if ((fu == bz))
801801 then true
802802 else if ((fu == bA))
803803 then false
804804 else ba("invalid asset")
805805 let fz = if (fv)
806806 then $Tuple2(fw, fx)
807807 else if (fy)
808808 then $Tuple2((fw - ft), fx)
809809 else $Tuple2(fw, (fx - ft))
810810 let fA = fz._1
811811 let fB = fz._2
812812 let fC = if (fy)
813813 then $Tuple2(ft, 0)
814814 else $Tuple2(0, ft)
815815 let fD = fC._1
816816 let fE = fC._2
817817 let eT = fq(fD, bf)._1
818818 let eU = fq(fE, bf)._1
819819 let fF = fq(ft, bf)
820820 let fG = fF._1
821821 let fr = fF._2
822822 let fH = (fA + eT)
823823 let fI = (fB + eU)
824824 let fJ = bY(D(fI, bC), D(fH, bB))
825825 let fK = H(fJ, b)
826826 let fL = if (fy)
827827 then fA
828828 else fB
829829 let fM = toBigInt(fL)
830830 let fN = toBigInt(valueOrErrorMessage(assetInfo(by), (("asset " + toBase58String(by)) + " doesn't exist")).quantity)
831831 let fO = if ((fN > f))
832832 then true
833833 else ba("initial deposit requires all coins")
834834 if ((fO == fO))
835835 then {
836836 let fP = toBigInt(fG)
837837 let fQ = max([0, toInt(((fN * (sqrtBigInt((d + ((fP * d) / fM)), 18, 18, DOWN) - d)) / d))])
838838 let ev = if (fv)
839839 then nil
840840 else [IntegerEntry(W(), fK), IntegerEntry(X(height, lastBlock.timestamp), fK), StringEntry(aa(toString(value(ab)), toBase58String(value(ac))), bG(fD, fE, fQ, fK, 0, 0, height, lastBlock.timestamp, 0, 0))]
841841 let fR = bY(D(fB, bC), D(fA, bB))
842842 let fS = H(fR, b)
843843 let fT = {
844844 let fU = if (fy)
845845 then $Tuple2(fD, fA)
846846 else $Tuple2(fE, fB)
847847 let ch = fU._1
848848 let fV = fU._2
849849 let fW = toInt(fraction(fN, toBigInt((ch / 2)), toBigInt(fV)))
850850 fraction((fQ - fW), b, fW)
851851 }
852852 $Tuple5(fQ, ev, fr, fT, fy)
853853 }
854854 else throw("Strict value is not equal to itself.")
855855 }
856856
857857
858858 func fX (fY,fG,fu,ab,ac) = {
859859 let fv = (ac == unit)
860860 let dk = bm()
861861 let dl = parseIntValue(dk[t])
862862 let dm = parseIntValue(dk[u])
863863 let fZ = [if ((fu == by))
864864 then true
865865 else ba("invalid lp asset")]
866866 if ((fZ == fZ))
867867 then {
868868 let ga = if ((fY == bz))
869869 then true
870870 else if ((fY == bA))
871871 then false
872872 else ba("invalid asset")
873873 let gb = if (ga)
874874 then toBigInt(bV(br(bz)))
875875 else toBigInt(bV(br(bA)))
876876 let gc = if (ga)
877877 then dl
878878 else dm
879879 let gd = bV(br(bz))
880880 let ge = bV(br(bA))
881881 let gf = if (ga)
882882 then gd
883883 else ge
884884 let gg = toBigInt(gf)
885885 let fN = toBigInt(valueOrErrorMessage(assetInfo(by), (("asset " + toBase58String(by)) + " doesn't exist")).quantity)
886886 let gh = toBigInt(fG)
887887 let gi = max([0, toInt(((gb * (d - pow((d - ((gh * d) / fN)), 18, h, 0, 18, DOWN))) / d))])
888888 let gj = fq(gi, bh)
889889 let gk = gj._1
890890 let fr = gj._2
891891 let gl = if (ga)
892892 then $Tuple4(gk, 0, (gd - gi), ge)
893893 else $Tuple4(0, gk, gd, (ge - gi))
894894 let gm = gl._1
895895 let gn = gl._2
896896 let go = gl._3
897897 let gp = gl._4
898898 let fJ = bY(D(gp, bC), D(go, bB))
899899 let fK = H(fJ, b)
900900 let ev = if (fv)
901901 then nil
902902 else [StringEntry(ad(toString(value(ab)), toBase58String(value(ac))), bR(gm, gn, fG, fK, height, lastBlock.timestamp)), IntegerEntry(W(), fK), IntegerEntry(X(height, lastBlock.timestamp), fK)]
903903 let fR = bY(D(ge, bC), D(gd, bB))
904904 let fS = H(fR, b)
905905 let fT = {
906906 let gq = (toInt(fraction(gb, gh, fN)) * 2)
907907 fraction((gk - gq), b, gq)
908908 }
909909 $Tuple5(gk, ev, fr, fT, ga)
910910 }
911911 else throw("Strict value is not equal to itself.")
912912 }
913913
914914
915915 func gr () = {
916916 let gs = aS()
917917 let aQ = getString(gs, U())
918918 if ($isInstanceOf(aQ, "String"))
919919 then {
920920 let aV = aQ
921921 fromBase58String(aV)
922922 }
923923 else if ($isInstanceOf(aQ, "Unit"))
924924 then unit
925925 else throw("Match error")
926926 }
927927
928928
929929 func gt (fd) = {
930930 let aQ = gr()
931931 if ($isInstanceOf(aQ, "ByteVector"))
932932 then {
933933 let gu = aQ
934934 (fd.callerPublicKey == gu)
935935 }
936936 else if ($isInstanceOf(aQ, "Unit"))
937937 then (fd.caller == this)
938938 else throw("Match error")
939939 }
940940
941941
942942 func gv (fd) = {
943943 let gw = throw("Permission denied")
944944 let aQ = gr()
945945 if ($isInstanceOf(aQ, "ByteVector"))
946946 then {
947947 let gu = aQ
948948 if ((fd.callerPublicKey == gu))
949949 then true
950950 else gw
951951 }
952952 else if ($isInstanceOf(aQ, "Unit"))
953953 then if ((fd.caller == this))
954954 then true
955955 else gw
956956 else throw("Match error")
957957 }
958958
959959
960960 @Callable(fd)
961961 func rebalance () = (cK(aW(this, ae())) ++ cK(aW(this, af())))
962962
963963
964964
965965 @Callable(fd)
966966 func calculateAmountOutForSwapREADONLY (gx,gy,gz) = {
967967 let gA = if ((gy == false))
968968 then {
969969 let gB = aW(this, af())
970970 let gC = aW(this, ae())
971971 $Tuple2(gB, gC)
972972 }
973973 else {
974974 let gB = aW(this, ae())
975975 let gC = aW(this, af())
976976 $Tuple2(gB, gC)
977977 }
978978 let gB = gA._1
979979 let gC = gA._2
980980 let gD = bV(gC)
981981 let gE = bV(gB)
982982 let gF = fraction(gE, gx, (gD + gx))
983983 let gG = (toBigInt(gD) * toBigInt(gE))
984984 let gH = (((toBigInt(bV(gC)) + toBigInt(gx)) + toBigInt(gz)) * (toBigInt(bV(gB)) - toBigInt(gF)))
985985 let gI = if ((gH >= gG))
986986 then true
987987 else throw("new K is fewer error")
988988 if ((gI == gI))
989989 then $Tuple2(nil, gF)
990990 else throw("Strict value is not equal to itself.")
991991 }
992992
993993
994994
995995 @Callable(fd)
996996 func calculateAmountOutForSwapAndSendTokens (gx,gy,gJ,gK,gz) = {
997997 let gL = {
998998 let bg = invoke(bd, "getSwapContractREADONLY", nil, nil)
999999 if ($isInstanceOf(bg, "String"))
10001000 then bg
10011001 else throw(($getType(bg) + " couldn't be cast to String"))
10021002 }
10031003 let gM = {
10041004 let bg = invoke(bd, "isPoolSwapDisabledREADONLY", [toString(this)], nil)
10051005 if ($isInstanceOf(bg, "Boolean"))
10061006 then bg
10071007 else throw(($getType(bg) + " couldn't be cast to Boolean"))
10081008 }
10091009 let gN = if (!(bj(fd.caller)))
10101010 then if (if (bk())
10111011 then true
10121012 else (bx == n))
10131013 then true
10141014 else gM
10151015 else false
10161016 let fZ = [if (if (!(gN))
10171017 then true
10181018 else gt(fd))
10191019 then true
10201020 else ba("swap operation is blocked by admin"), if ((value(fd.payments[0]).amount >= gx))
10211021 then true
10221022 else ba("Wrong amount"), if ((fd.caller == addressFromStringValue(gL)))
10231023 then true
10241024 else ba("Permission denied")]
10251025 if ((fZ == fZ))
10261026 then {
10271027 let fe = value(fd.payments[0])
10281028 let gC = br(fe.assetId)
10291029 let gB = if ((gy == false))
10301030 then aW(this, af())
10311031 else aW(this, ae())
10321032 let gD = ((bV(gC) - value(fd.payments[0]).amount) - gz)
10331033 let gE = bV(gB)
10341034 let gF = fraction(gE, gx, (gD + gx))
10351035 let gG = (toBigInt(gD) * toBigInt(gE))
10361036 let gH = ((toBigInt(bV(gC)) + toBigInt(gz)) * (toBigInt(bV(gB)) - toBigInt(gF)))
10371037 let gI = if ((gH >= gG))
10381038 then true
10391039 else throw("new K is fewer error")
10401040 if ((gI == gI))
10411041 then {
10421042 let gO = if ((gF >= gJ))
10431043 then true
10441044 else throw("Exchange result is fewer coins than expected")
10451045 if ((gO == gO))
10461046 then {
10471047 let eL = if (gy)
10481048 then -(gF)
10491049 else gz
10501050 let eM = if (gy)
10511051 then gz
10521052 else -(gF)
10531053 let gP = eK(eL, eM, 0)._1
10541054 if ((gP == gP))
10551055 then {
10561056 let gQ = cK(gC)
10571057 if ((gQ == gQ))
10581058 then {
10591059 let gR = cR(gB, gF)
10601060 if ((gR == gR))
10611061 then $Tuple2(((gR ++ gQ) ++ [ScriptTransfer(addressFromStringValue(gK), gF, bp(gB))]), gF)
10621062 else throw("Strict value is not equal to itself.")
10631063 }
10641064 else throw("Strict value is not equal to itself.")
10651065 }
10661066 else throw("Strict value is not equal to itself.")
10671067 }
10681068 else throw("Strict value is not equal to itself.")
10691069 }
10701070 else throw("Strict value is not equal to itself.")
10711071 }
10721072 else throw("Strict value is not equal to itself.")
10731073 }
10741074
10751075
10761076
10771077 @Callable(fd)
10781078 func put (dQ,gS) = if ((0 > dQ))
10791079 then throw("Invalid slippageTolerance passed")
10801080 else {
10811081 let fk = fh(fd, dQ, true)
10821082 let es = fk._2
10831083 let dx = fk._7
10841084 let dO = fk._9
10851085 let et = fk._10
10861086 let eu = fk._11
10871087 let gT = fk._12
10881088 let gU = fk._13
10891089 let fi = toBigInt(value(fd.payments[0]).amount)
10901090 let fj = toBigInt(value(fd.payments[1]).amount)
10911091 let eJ = eC(fi, fj, toBigInt(0))
10921092 if ((eJ == eJ))
10931093 then {
10941094 let fn = invoke(bd, "emit", [es], nil)
10951095 if ((fn == fn))
10961096 then {
10971097 let fo = {
10981098 let aQ = fn
10991099 if ($isInstanceOf(aQ, "Address"))
11001100 then {
11011101 let fp = aQ
11021102 invoke(fp, "emit", [es], nil)
11031103 }
11041104 else unit
11051105 }
11061106 if ((fo == fo))
11071107 then {
11081108 let gV = if ((et > 0))
11091109 then invoke(bF, "put", nil, [AttachedPayment(gT, et)])
11101110 else nil
11111111 if ((gV == gV))
11121112 then {
11131113 let gW = if ((eu > 0))
11141114 then invoke(bF, "put", nil, [AttachedPayment(gU, eu)])
11151115 else nil
11161116 if ((gW == gW))
11171117 then {
11181118 let gX = if (gS)
11191119 then {
11201120 let gY = invoke(bE, "stake", nil, [AttachedPayment(dx, es)])
11211121 if ((gY == gY))
11221122 then nil
11231123 else throw("Strict value is not equal to itself.")
11241124 }
11251125 else [ScriptTransfer(fd.caller, es, dx)]
11261126 let gZ = eK(0, 0, 0)
11271127 if ((gZ == gZ))
11281128 then {
11291129 let eB = gZ._2
11301130 let gP = gZ._1
11311131 let ha = eP(eJ, eB)
11321132 if ((ha == ha))
11331133 then {
11341134 let hb = invoke(this, "rebalance", nil, nil)
11351135 if ((hb == hb))
11361136 then ((dO ++ gX) ++ gP)
11371137 else throw("Strict value is not equal to itself.")
11381138 }
11391139 else throw("Strict value is not equal to itself.")
11401140 }
11411141 else throw("Strict value is not equal to itself.")
11421142 }
11431143 else throw("Strict value is not equal to itself.")
11441144 }
11451145 else throw("Strict value is not equal to itself.")
11461146 }
11471147 else throw("Strict value is not equal to itself.")
11481148 }
11491149 else throw("Strict value is not equal to itself.")
11501150 }
11511151 else throw("Strict value is not equal to itself.")
11521152 }
11531153
11541154
11551155
11561156 @Callable(fd)
11571157 func putForFree (hc) = if ((0 > hc))
11581158 then throw("Invalid value passed")
11591159 else {
11601160 let fk = fh(fd, hc, false)
11611161 let dO = fk._9
11621162 let fi = toBigInt(value(fd.payments[0]).amount)
11631163 let fj = toBigInt(value(fd.payments[1]).amount)
11641164 let eJ = eC(fi, fj, toBigInt(0))
11651165 if ((eJ == eJ))
11661166 then {
11671167 let hd = eK(0, 0, 0)
11681168 let gP = hd._1
11691169 let eB = hd._2
11701170 let ha = eP(eJ, eB)
11711171 if ((ha == ha))
11721172 then (dO ++ gP)
11731173 else throw("Strict value is not equal to itself.")
11741174 }
11751175 else throw("Strict value is not equal to itself.")
11761176 }
11771177
11781178
11791179
11801180 @Callable(fd)
11811181 func putOneTkn (he,hf) = {
11821182 let hg = {
11831183 let bg = invoke(bd, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
11841184 if ($isInstanceOf(bg, "Boolean"))
11851185 then bg
11861186 else throw(($getType(bg) + " couldn't be cast to Boolean"))
11871187 }
11881188 let fl = if (!(bj(fd.caller)))
11891189 then if (if (if (bk())
11901190 then true
11911191 else (bx == l))
11921192 then true
11931193 else (bx == n))
11941194 then true
11951195 else hg
11961196 else false
11971197 let fZ = [if (if (!(fl))
11981198 then true
11991199 else gt(fd))
12001200 then true
12011201 else ba("put operation is blocked by admin"), if ((size(fd.payments) == 1))
12021202 then true
12031203 else ba("exactly 1 payment are expected")]
12041204 if ((fZ == fZ))
12051205 then {
12061206 let hh = fd.payments[0]
12071207 let fu = hh.assetId
12081208 let ft = hh.amount
12091209 let eJ = if ((fu == bz))
12101210 then eC(toBigInt(ft), toBigInt(0), toBigInt(0))
12111211 else if ((fu == bA))
12121212 then eC(toBigInt(0), toBigInt(ft), toBigInt(0))
12131213 else ba("payment asset is not supported")
12141214 if ((eJ == eJ))
12151215 then {
12161216 let ab = fd.caller
12171217 let ac = fd.transactionId
12181218 let hi = fs(ft, fu, ab, ac)
12191219 if ((hi == hi))
12201220 then {
12211221 let fy = hi._5
12221222 let hj = hi._4
12231223 let fr = hi._3
12241224 let ev = hi._2
12251225 let hk = hi._1
12261226 let hl = if (if ((he > 0))
12271227 then (he > hk)
12281228 else false)
12291229 then ba(makeString(["amount to receive is less than ", toString(he)], ""))
12301230 else hk
12311231 let fn = fm(hl)
12321232 if ((fn == fn))
12331233 then {
12341234 let gX = if (hf)
12351235 then {
12361236 let hm = invoke(bE, "stake", nil, [AttachedPayment(by, hl)])
12371237 if ((hm == hm))
12381238 then nil
12391239 else throw("Strict value is not equal to itself.")
12401240 }
12411241 else [ScriptTransfer(fd.caller, hl, by)]
12421242 let hn = if ((fr > 0))
12431243 then [ScriptTransfer(be, fr, fu)]
12441244 else nil
12451245 let ho = if ((this == be))
12461246 then $Tuple2(0, 0)
12471247 else if (fy)
12481248 then $Tuple2(-(fr), 0)
12491249 else $Tuple2(0, -(fr))
12501250 let eL = ho._1
12511251 let eM = ho._2
12521252 let hp = eK(eL, eM, 0)
12531253 let gP = hp._1
12541254 let eB = hp._2
12551255 let eW = value(getString(aj))
12561256 let ha = eP(eJ, eB)
12571257 if ((ha == ha))
12581258 then {
12591259 let hb = invoke(this, "rebalance", nil, nil)
12601260 if ((hb == hb))
12611261 then $Tuple2((((ev ++ gX) ++ hn) ++ gP), hl)
12621262 else throw("Strict value is not equal to itself.")
12631263 }
12641264 else throw("Strict value is not equal to itself.")
12651265 }
12661266 else throw("Strict value is not equal to itself.")
12671267 }
12681268 else throw("Strict value is not equal to itself.")
12691269 }
12701270 else throw("Strict value is not equal to itself.")
12711271 }
12721272 else throw("Strict value is not equal to itself.")
12731273 }
12741274
12751275
12761276
12771277 @Callable(fd)
12781278 func putOneTknREADONLY (fu,ft) = {
12791279 let hq = fs(ft, bp(fu), unit, unit)
12801280 let hk = hq._1
12811281 let ev = hq._2
12821282 let fr = hq._3
12831283 let hj = hq._4
12841284 let fy = hq._5
12851285 $Tuple2(nil, $Tuple3(hk, fr, hj))
12861286 }
12871287
12881288
12891289
12901290 @Callable(fd)
12911291 func getOneTkn (hr,he) = {
12921292 let hg = {
12931293 let bg = invoke(bd, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
12941294 if ($isInstanceOf(bg, "Boolean"))
12951295 then bg
12961296 else throw(($getType(bg) + " couldn't be cast to Boolean"))
12971297 }
12981298 let fg = if (!(bj(fd.caller)))
12991299 then if (if (bk())
13001300 then true
13011301 else (bx == n))
13021302 then true
13031303 else hg
13041304 else false
13051305 let fZ = [if (if (!(fg))
13061306 then true
13071307 else gt(fd))
13081308 then true
13091309 else ba("get operation is blocked by admin"), if ((size(fd.payments) == 1))
13101310 then true
13111311 else ba("exactly 1 payment are expected")]
13121312 if ((fZ == fZ))
13131313 then {
13141314 let fY = bp(hr)
13151315 let hh = fd.payments[0]
13161316 let fu = hh.assetId
13171317 let fG = hh.amount
13181318 let eJ = eC(toBigInt(0), toBigInt(0), toBigInt(0))
13191319 if ((eJ == eJ))
13201320 then {
13211321 let ab = fd.caller
13221322 let ac = fd.transactionId
13231323 let hs = fX(fY, fG, fu, ab, ac)
13241324 if ((hs == hs))
13251325 then {
13261326 let ga = hs._5
13271327 let hj = hs._4
13281328 let fr = hs._3
13291329 let ev = hs._2
13301330 let ht = hs._1
13311331 let ch = if (if ((he > 0))
13321332 then (he > ht)
13331333 else false)
13341334 then ba(makeString(["amount to receive is less than ", toString(he)], ""))
13351335 else ht
13361336 let hu = invoke(bd, "burn", [fG], [AttachedPayment(fu, fG)])
13371337 if ((hu == hu))
13381338 then {
13391339 let gR = cR(hr, (ch + max([0, fr])))
13401340 let hv = [ScriptTransfer(ab, ch, fY)]
13411341 let hn = if ((fr > 0))
13421342 then [ScriptTransfer(be, fr, fY)]
13431343 else nil
13441344 let hw = {
13451345 let hx = if ((this == be))
13461346 then 0
13471347 else fr
13481348 if (ga)
13491349 then $Tuple2(-((ch + hx)), 0)
13501350 else $Tuple2(0, -((ch + hx)))
13511351 }
13521352 let eL = hw._1
13531353 let eM = hw._2
13541354 let hy = eK(eL, eM, 0)
13551355 let gP = hy._1
13561356 let eB = hy._2
13571357 let ha = eP(eJ, eB)
13581358 if ((ha == ha))
13591359 then $Tuple2(((((ev ++ gR) ++ hv) ++ hn) ++ gP), ch)
13601360 else throw("Strict value is not equal to itself.")
13611361 }
13621362 else throw("Strict value is not equal to itself.")
13631363 }
13641364 else throw("Strict value is not equal to itself.")
13651365 }
13661366 else throw("Strict value is not equal to itself.")
13671367 }
13681368 else throw("Strict value is not equal to itself.")
13691369 }
13701370
13711371
13721372
13731373 @Callable(fd)
13741374 func getOneTknREADONLY (fY,fG) = {
13751375 let hz = fX(bp(fY), fG, by, unit, unit)
13761376 let ht = hz._1
13771377 let ev = hz._2
13781378 let fr = hz._3
13791379 let hj = hz._4
13801380 let ga = hz._5
13811381 $Tuple2(nil, $Tuple3(ht, fr, hj))
13821382 }
13831383
13841384
13851385
13861386 @Callable(fd)
13871387 func unstakeAndGetOneTkn (hA,hr,he) = {
13881388 let hg = {
13891389 let bg = invoke(bd, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
13901390 if ($isInstanceOf(bg, "Boolean"))
13911391 then bg
13921392 else throw(($getType(bg) + " couldn't be cast to Boolean"))
13931393 }
13941394 let fg = if (!(bj(fd.caller)))
13951395 then if (if (bk())
13961396 then true
13971397 else (bx == n))
13981398 then true
13991399 else hg
14001400 else false
14011401 let fZ = [if (if (!(fg))
14021402 then true
14031403 else gt(fd))
14041404 then true
14051405 else ba("get operation is blocked by admin"), if ((size(fd.payments) == 0))
14061406 then true
14071407 else ba("no payments are expected")]
14081408 if ((fZ == fZ))
14091409 then {
14101410 let fY = bp(hr)
14111411 let ab = fd.caller
14121412 let ac = fd.transactionId
14131413 let eJ = eC(toBigInt(0), toBigInt(0), toBigInt(0))
14141414 if ((eJ == eJ))
14151415 then {
14161416 let hB = invoke(bE, "unstake", [toBase58String(by), hA], nil)
14171417 if ((hB == hB))
14181418 then {
14191419 let hC = fX(fY, hA, by, ab, ac)
14201420 if ((hC == hC))
14211421 then {
14221422 let ga = hC._5
14231423 let hj = hC._4
14241424 let fr = hC._3
14251425 let ev = hC._2
14261426 let ht = hC._1
14271427 let ch = if (if ((he > 0))
14281428 then (he > ht)
14291429 else false)
14301430 then ba(makeString(["amount to receive is less than ", toString(he)], ""))
14311431 else ht
14321432 let hu = invoke(bd, "burn", [hA], [AttachedPayment(by, hA)])
14331433 if ((hu == hu))
14341434 then {
14351435 let gR = cR(hr, (ch + max([0, fr])))
14361436 let hv = [ScriptTransfer(fd.caller, ch, fY)]
14371437 let hn = if ((fr > 0))
14381438 then [ScriptTransfer(be, fr, fY)]
14391439 else nil
14401440 let hD = {
14411441 let hx = if ((this == be))
14421442 then 0
14431443 else fr
14441444 if (ga)
14451445 then $Tuple2(-((ch + hx)), 0)
14461446 else $Tuple2(0, -((ch + hx)))
14471447 }
14481448 let eL = hD._1
14491449 let eM = hD._2
14501450 let hE = eK(eL, eM, 0)
14511451 let gP = hE._1
14521452 let eB = hE._2
14531453 let ha = eP(eJ, eB)
14541454 if ((ha == ha))
14551455 then $Tuple2(((((ev ++ gR) ++ hv) ++ hn) ++ gP), ch)
14561456 else throw("Strict value is not equal to itself.")
14571457 }
14581458 else throw("Strict value is not equal to itself.")
14591459 }
14601460 else throw("Strict value is not equal to itself.")
14611461 }
14621462 else throw("Strict value is not equal to itself.")
14631463 }
14641464 else throw("Strict value is not equal to itself.")
14651465 }
14661466 else throw("Strict value is not equal to itself.")
14671467 }
14681468
14691469
14701470
14711471 @Callable(fd)
14721472 func get () = {
14731473 let eg = fc(fd)
14741474 let dM = eg._1
14751475 let dN = eg._2
14761476 let ff = eg._3
14771477 let dv = eg._4
14781478 let dO = eg._5
14791479 let gR = cW(dM, dN)
14801480 let eJ = eC(toBigInt(0), toBigInt(0), toBigInt(0))
14811481 if ((eJ == eJ))
14821482 then {
14831483 let hF = invoke(bd, "burn", [ff], [AttachedPayment(dv, ff)])
14841484 if ((hF == hF))
14851485 then {
14861486 let hG = eK(-(dM), -(dN), 0)
14871487 let gP = hG._1
14881488 let eB = hG._2
14891489 let ha = eP(eJ, eB)
14901490 if ((ha == ha))
14911491 then ((gR ++ dO) ++ gP)
14921492 else throw("Strict value is not equal to itself.")
14931493 }
14941494 else throw("Strict value is not equal to itself.")
14951495 }
14961496 else throw("Strict value is not equal to itself.")
14971497 }
14981498
14991499
15001500
15011501 @Callable(fd)
15021502 func getNoLess (hH,hI) = {
15031503 let eg = fc(fd)
15041504 let dM = eg._1
15051505 let dN = eg._2
15061506 let ff = eg._3
15071507 let dv = eg._4
15081508 let dO = eg._5
15091509 if ((hH > dM))
15101510 then throw(((("noLessThenAmtAsset failed: " + toString(dM)) + " < ") + toString(hH)))
15111511 else if ((hI > dN))
15121512 then throw(((("noLessThenPriceAsset failed: " + toString(dN)) + " < ") + toString(hI)))
15131513 else {
15141514 let gR = cW(dM, dN)
15151515 let eJ = eC(toBigInt(0), toBigInt(0), toBigInt(0))
15161516 if ((eJ == eJ))
15171517 then {
15181518 let hF = invoke(bd, "burn", [ff], [AttachedPayment(dv, ff)])
15191519 if ((hF == hF))
15201520 then {
15211521 let hJ = eK(-(dM), -(dN), 0)
15221522 let gP = hJ._1
15231523 let eB = hJ._2
15241524 let ha = eP(eJ, eB)
15251525 if ((ha == ha))
15261526 then ((gR ++ dO) ++ gP)
15271527 else throw("Strict value is not equal to itself.")
15281528 }
15291529 else throw("Strict value is not equal to itself.")
15301530 }
15311531 else throw("Strict value is not equal to itself.")
15321532 }
15331533 }
15341534
15351535
15361536
15371537 @Callable(fd)
15381538 func unstakeAndGet (ch) = {
15391539 let hK = if ((size(fd.payments) != 0))
15401540 then throw("No payments are expected")
15411541 else true
15421542 if ((hK == hK))
15431543 then {
15441544 let dk = bm()
15451545 let dx = fromBase58String(dk[q])
15461546 let eJ = eC(toBigInt(0), toBigInt(0), toBigInt(0))
15471547 if ((eJ == eJ))
15481548 then {
15491549 let hB = invoke(bE, "unstake", [toBase58String(dx), ch], nil)
15501550 if ((hB == hB))
15511551 then {
15521552 let eg = dt(toBase58String(fd.transactionId), toBase58String(dx), ch, fd.caller)
15531553 let dM = eg._1
15541554 let dN = eg._2
15551555 let dA = parseIntValue(eg._9)
15561556 let dO = eg._10
15571557 let gR = cW(dM, dN)
15581558 let fg = if (!(bj(fd.caller)))
15591559 then if (bk())
15601560 then true
15611561 else (bx == n)
15621562 else false
15631563 let hL = if (fg)
15641564 then throw(("Get operation is blocked by admin. Status = " + toString(dA)))
15651565 else true
15661566 if ((hL == hL))
15671567 then {
15681568 let hF = invoke(bd, "burn", [ch], [AttachedPayment(dx, ch)])
15691569 if ((hF == hF))
15701570 then {
15711571 let hM = eK(-(dM), -(dN), 0)
15721572 let gP = hM._1
15731573 let eB = hM._2
15741574 let ha = eP(eJ, eB)
15751575 if ((ha == ha))
15761576 then ((gR ++ dO) ++ gP)
15771577 else throw("Strict value is not equal to itself.")
15781578 }
15791579 else throw("Strict value is not equal to itself.")
15801580 }
15811581 else throw("Strict value is not equal to itself.")
15821582 }
15831583 else throw("Strict value is not equal to itself.")
15841584 }
15851585 else throw("Strict value is not equal to itself.")
15861586 }
15871587 else throw("Strict value is not equal to itself.")
15881588 }
15891589
15901590
15911591
15921592 @Callable(fd)
15931593 func unstakeAndGetNoLess (hA,hN,hI) = {
15941594 let fg = if (!(bj(fd.caller)))
15951595 then if (bk())
15961596 then true
15971597 else (bx == n)
15981598 else false
15991599 let fZ = [if (!(fg))
16001600 then true
16011601 else throw("get operation is blocked by admin"), if ((size(fd.payments) == 0))
16021602 then true
16031603 else throw("no payments are expected")]
16041604 if ((fZ == fZ))
16051605 then {
16061606 let eJ = eC(toBigInt(0), toBigInt(0), toBigInt(0))
16071607 if ((eJ == eJ))
16081608 then {
16091609 let hB = invoke(bE, "unstake", [toBase58String(by), hA], nil)
16101610 if ((hB == hB))
16111611 then {
16121612 let eg = dt(toBase58String(fd.transactionId), toBase58String(by), hA, fd.caller)
16131613 let dM = eg._1
16141614 let dN = eg._2
16151615 let dO = eg._10
16161616 let gR = cW(dM, dN)
16171617 let hO = [if ((dM >= hN))
16181618 then true
16191619 else throw(makeString(["amount asset amount to receive is less than ", toString(hN)], "")), if ((dN >= hI))
16201620 then true
16211621 else throw(makeString(["price asset amount to receive is less than ", toString(hI)], ""))]
16221622 if ((hO == hO))
16231623 then {
16241624 let hF = invoke(bd, "burn", [hA], [AttachedPayment(by, hA)])
16251625 if ((hF == hF))
16261626 then {
16271627 let hP = eK(-(dM), -(dN), 0)
16281628 let gP = hP._1
16291629 let eB = hP._2
16301630 let ha = eP(eJ, eB)
16311631 if ((ha == ha))
16321632 then ((gR ++ dO) ++ gP)
16331633 else throw("Strict value is not equal to itself.")
16341634 }
16351635 else throw("Strict value is not equal to itself.")
16361636 }
16371637 else throw("Strict value is not equal to itself.")
16381638 }
16391639 else throw("Strict value is not equal to itself.")
16401640 }
16411641 else throw("Strict value is not equal to itself.")
16421642 }
16431643 else throw("Strict value is not equal to itself.")
16441644 }
16451645
16461646
16471647
16481648 @Callable(fd)
16491649 func activate (hQ,hR) = if ((toString(fd.caller) != toString(bd)))
16501650 then throw("permissions denied")
16511651 else $Tuple2([StringEntry(ae(), hQ), StringEntry(af(), hR)], "success")
16521652
16531653
16541654
16551655 @Callable(fd)
16561656 func refreshKLp () = {
16571657 let hS = valueOrElse(getInteger(ak), 0)
16581658 let hT = if (((height - hS) >= an))
16591659 then unit
16601660 else ba(makeString([toString(an), " blocks have not passed since the previous call"], ""))
16611661 if ((hT == hT))
16621662 then {
16631663 let eW = valueOrErrorMessage(parseBigInt(valueOrElse(getString(this, aj), "0")), bc("invalid kLp"))
16641664 let hU = eK(0, 0, 0)
16651665 let hV = hU._1
16661666 let eB = hU._2
16671667 let eN = if ((eW != eB))
16681668 then hV
16691669 else ba("nothing to refresh")
16701670 $Tuple2(eN, toString(eB))
16711671 }
16721672 else throw("Strict value is not equal to itself.")
16731673 }
16741674
16751675
16761676
16771677 @Callable(fd)
16781678 func getPoolConfigWrapperREADONLY () = $Tuple2(nil, bm())
16791679
16801680
16811681
16821682 @Callable(fd)
16831683 func getAccBalanceWrapperREADONLY (ap) = $Tuple2(nil, bV(ap))
16841684
16851685
16861686
16871687 @Callable(fd)
16881688 func calcPricesWrapperREADONLY (de,df,dj) = {
16891689 let ds = di(de, df, dj)
16901690 $Tuple2(nil, [toString(ds[0]), toString(ds[1]), toString(ds[2])])
16911691 }
16921692
16931693
16941694
16951695 @Callable(fd)
16961696 func toX18WrapperREADONLY (E,F) = $Tuple2(nil, toString(D(E, F)))
16971697
16981698
16991699
17001700 @Callable(fd)
17011701 func fromX18WrapperREADONLY (I,J) = $Tuple2(nil, H(parseBigIntValue(I), J))
17021702
17031703
17041704
17051705 @Callable(fd)
17061706 func calcPriceBigIntWrapperREADONLY (bZ,ca) = $Tuple2(nil, toString(bY(parseBigIntValue(bZ), parseBigIntValue(ca))))
17071707
17081708
17091709
17101710 @Callable(fd)
17111711 func estimatePutOperationWrapperREADONLY (du,dQ,dR,dS,dT,dU,ab,dV,dW) = $Tuple2(nil, dP(du, dQ, dR, dS, dT, dU, ab, dV, dW))
17121712
17131713
17141714
17151715 @Callable(fd)
17161716 func estimateGetOperationWrapperREADONLY (du,dv,dw,ab) = {
17171717 let eg = dt(du, dv, dw, addressFromStringValue(ab))
17181718 $Tuple2(nil, $Tuple10(eg._1, eg._2, eg._3, eg._4, eg._5, eg._6, eg._7, toString(eg._8), eg._9, eg._10))
17191719 }
17201720
17211721
17221722
17231723 @Callable(fd)
17241724 func statsREADONLY () = {
17251725 let dk = bm()
17261726 let dx = fromBase58String(dk[q])
17271727 let hW = dk[r]
17281728 let hX = dk[s]
17291729 let dZ = dk[v]
17301730 let ea = dk[w]
17311731 let dl = parseIntValue(dk[t])
17321732 let dm = parseIntValue(dk[u])
17331733 let hY = valueOrErrorMessage(assetInfo(dx), (("Asset " + toBase58String(dx)) + " doesn't exist")).quantity
17341734 let hZ = bV(hW)
17351735 let ia = bV(hX)
17361736 let ib = if ((hY == 0))
17371737 then [e, e, e]
17381738 else di(hZ, ia, hY)
17391739 let dH = 0
17401740 let ic = H(ib[1], b)
17411741 let id = H(ib[2], b)
17421742 let ie = value(getInteger(bd, aD(toString(this))))
17431743 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(hZ), toString(ia), toString(hY), toString(dH), toString(ic), toString(id), toString(ie)], j))
17441744 }
17451745
17461746
17471747
17481748 @Callable(fd)
17491749 func evaluatePutByAmountAssetREADONLY (dR) = {
17501750 let dk = bm()
17511751 let dx = fromBase58String(dk[q])
17521752 let dX = dk[r]
17531753 let dy = fromBase58String(dX)
17541754 let dY = dk[s]
17551755 let dz = fromBase58String(dY)
17561756 let dl = parseIntValue(dk[t])
17571757 let dm = parseIntValue(dk[u])
17581758 let dA = dk[p]
17591759 let hY = valueOrErrorMessage(assetInfo(dx), (("Asset " + toBase58String(dx)) + " doesn't exist")).quantity
17601760 let hZ = bV(dX)
17611761 let ia = bV(dY)
17621762 let dg = D(hZ, dl)
17631763 let dh = D(ia, dm)
17641764 let dG = if ((hY == 0))
17651765 then e
17661766 else bY(dh, dg)
17671767 let ed = D(dR, dl)
17681768 let ee = fraction(ed, dG, d)
17691769 let dT = H(ee, dm)
17701770 let fk = dP("", 500000, dR, dy, dT, dz, "", true, false)
17711771 let eo = fk._1
17721772 let if = fk._3
17731773 let dC = fk._4
17741774 let dE = fk._5
17751775 let dB = fk._6
17761776 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(eo), toString(H(dG, b)), toString(dC), toString(dE), toString(dB), dA, toString(dR), toString(dT)], j))
17771777 }
17781778
17791779
17801780
17811781 @Callable(fd)
17821782 func evaluatePutByPriceAssetREADONLY (dT) = {
17831783 let dk = bm()
17841784 let dx = fromBase58String(dk[q])
17851785 let dX = dk[r]
17861786 let dy = fromBase58String(dX)
17871787 let dY = dk[s]
17881788 let dz = fromBase58String(dY)
17891789 let dl = parseIntValue(dk[t])
17901790 let dm = parseIntValue(dk[u])
17911791 let dA = dk[p]
17921792 let hY = valueOrErrorMessage(assetInfo(dx), (("Asset " + toBase58String(dx)) + " doesn't exist")).quantity
17931793 let ig = bV(dX)
17941794 let ih = bV(dY)
17951795 let ii = D(ig, dl)
17961796 let ij = D(ih, dm)
17971797 let dG = if ((hY == 0))
17981798 then e
17991799 else bY(ij, ii)
18001800 let ee = D(dT, dm)
18011801 let ed = fraction(ee, d, dG)
18021802 let dR = H(ed, dl)
18031803 let fk = dP("", 500000, dR, dy, dT, dz, "", true, false)
18041804 let eo = fk._1
18051805 let if = fk._3
18061806 let dC = fk._4
18071807 let dE = fk._5
18081808 let dB = fk._6
18091809 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(eo), toString(H(dG, b)), toString(dC), toString(dE), toString(dB), dA, toString(dR), toString(dT)], j))
18101810 }
18111811
18121812
18131813
18141814 @Callable(fd)
18151815 func evaluateGetREADONLY (ik,il) = {
18161816 let eg = dt("", ik, il, this)
18171817 let dM = eg._1
18181818 let dN = eg._2
18191819 let dC = eg._5
18201820 let dE = eg._6
18211821 let dB = eg._7
18221822 let dH = eg._8
18231823 let dA = parseIntValue(eg._9)
18241824 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(dM), toString(dN), toString(dC), toString(dE), toString(dB), toString(dH), toString(dA)], j))
18251825 }
18261826
18271827
18281828 @Verifier(im)
18291829 func in () = {
18301830 let io = {
18311831 let aQ = gr()
18321832 if ($isInstanceOf(aQ, "ByteVector"))
18331833 then {
18341834 let gu = aQ
18351835 gu
18361836 }
18371837 else if ($isInstanceOf(aQ, "Unit"))
18381838 then im.senderPublicKey
18391839 else throw("Match error")
18401840 }
18411841 let aQ = im
18421842 if ($isInstanceOf(aQ, "Order"))
18431843 then {
18441844 let eS = aQ
18451845 let ip = bl()
18461846 let iq = if (eO())
18471847 then $Tuple2(true, "")
18481848 else eR(eS)
18491849 let aK = iq._1
18501850 let aL = iq._2
18511851 let aM = sigVerify(eS.bodyBytes, eS.proofs[0], eS.senderPublicKey)
18521852 let aN = sigVerify(eS.bodyBytes, eS.proofs[1], ip)
18531853 if (if (if (aK)
18541854 then aM
18551855 else false)
18561856 then aN
18571857 else false)
18581858 then true
18591859 else aJ(aK, aL, aM, aN)
18601860 }
18611861 else if ($isInstanceOf(aQ, "SetScriptTransaction"))
18621862 then {
18631863 let aV = aQ
18641864 if (sigVerify(im.bodyBytes, im.proofs[0], io))
18651865 then true
18661866 else {
18671867 let ir = blake2b256(value(aV.script))
18681868 let is = fromBase64String(value(getString(bd, aF())))
18691869 let it = scriptHash(this)
18701870 if ((is == ir))
18711871 then (it != ir)
18721872 else false
18731873 }
18741874 }
18751875 else sigVerify(im.bodyBytes, im.proofs[0], io)
18761876 }
18771877

github/deemru/w8io/6500d08 
189.46 ms