tx · ENtVBLfsfhSLj38Dm13ZZwCaohRLwsKQm5KxBr77swvt

3N8iNNRC4UfDK4aJctSvHajiZ81fzSumCeP:  -0.04200000 Waves

2023.04.13 15:39 [2532780] smart account 3N8iNNRC4UfDK4aJctSvHajiZ81fzSumCeP > SELF 0.00000000 Waves

{ "type": 13, "id": "ENtVBLfsfhSLj38Dm13ZZwCaohRLwsKQm5KxBr77swvt", "fee": 4200000, "feeAssetId": null, "timestamp": 1681389577270, "version": 2, "chainId": 84, "sender": "3N8iNNRC4UfDK4aJctSvHajiZ81fzSumCeP", "senderPublicKey": "F7NZd812aXMUyDcj1XaB3wgMJXJfUsq3RhPhrEZ9b6ND", "proofs": [ "5iJPMhSKXDcfu7zqeYHz9dVEy7fyajrSqYLxQncSps8RSMPAY5ci1h9pEBSgXWgj7xaDuZapCKgcAqDGgpPrkDeo" ], "script": "base64:BgK9NwgCEgASBQoDAQQBEgcKBQEEAQgBEgMKAQgSABIECgIBBBIDCgEBEgQKAgEEEgQKAggBEgQKAggBEgQKAggBEgUKAwEIARIAEgQKAgEBEgMKAQESBQoDAQEBEgQKAggIEgASABIDCgEIEgUKAwEBARIECgIBARIECgIIARIECgIICBILCgkIAQECAQIIBAQSBgoECAgBCBIAEgMKAQESAwoBARIECgIIASIKbFBkZWNpbWFscyIGc2NhbGU4IgxzY2FsZThCaWdJbnQiB3NjYWxlMTgiCnplcm9CaWdJbnQiBGJpZzAiBGJpZzEiBGJpZzIiC3dhdmVzU3RyaW5nIgNTRVAiClBvb2xBY3RpdmUiD1Bvb2xQdXREaXNhYmxlZCITUG9vbE1hdGNoZXJEaXNhYmxlZCIMUG9vbFNodXRkb3duIg5pZHhQb29sQWRkcmVzcyINaWR4UG9vbFN0YXR1cyIQaWR4UG9vbExQQXNzZXRJZCINaWR4QW10QXNzZXRJZCIPaWR4UHJpY2VBc3NldElkIg5pZHhBbXRBc3NldERjbSIQaWR4UHJpY2VBc3NldERjbSIOaWR4SUFtdEFzc2V0SWQiEGlkeElQcmljZUFzc2V0SWQiDWlkeExQQXNzZXREY20iEmlkeFBvb2xBbXRBc3NldEFtdCIUaWR4UG9vbFByaWNlQXNzZXRBbXQiEWlkeFBvb2xMUEFzc2V0QW10IhlpZHhGYWN0b3J5U3Rha2luZ0NvbnRyYWN0IhppZHhGYWN0b3J5U2xpcHBhZ2VDb250cmFjdCIFdG9YMTgiB29yaWdWYWwiDW9yaWdTY2FsZU11bHQiC3RvWDE4QmlnSW50Igdmcm9tWDE4IgN2YWwiD3Jlc3VsdFNjYWxlTXVsdCIMZnJvbVgxOFJvdW5kIgVyb3VuZCIHdG9TY2FsZSIDYW10IghyZXNTY2FsZSIIY3VyU2NhbGUiA2FicyIJYWJzQmlnSW50Igxzd2FwQ29udHJhY3QiAmZjIgNtcGsiBHBtcGsiAnBsIgJwaCIBaCIJdGltZXN0YW1wIgNwYXUiC3VzZXJBZGRyZXNzIgR0eElkIgNnYXUiAmFhIgJwYSIGa2V5RmVlIgpmZWVEZWZhdWx0IgNmZWUiBmtleUtMcCIVa2V5S0xwUmVmcmVzaGVkSGVpZ2h0IhJrZXlLTHBSZWZyZXNoRGVsYXkiFmtMcFJlZnJlc2hEZWxheURlZmF1bHQiD2tMcFJlZnJlc2hEZWxheSIUa2V5QWRkaXRpb25hbEJhbGFuY2UiB2Fzc2V0SWQiFmtleVN0YWtpbmdBc3NldEJhbGFuY2UiGmdldEFkZGl0aW9uYWxCYWxhbmNlT3JaZXJvIhxnZXRTdGFraW5nQXNzZXRCYWxhbmNlT3JaZXJvIhBrZXlGYWN0b3J5Q29uZmlnIg1rZXlNYXRjaGVyUHViIilrZXlNYXBwaW5nUG9vbENvbnRyYWN0QWRkcmVzc1RvUG9vbEFzc2V0cyITcG9vbENvbnRyYWN0QWRkcmVzcyINa2V5UG9vbENvbmZpZyIJaUFtdEFzc2V0IgtpUHJpY2VBc3NldCIfa2V5TWFwcGluZ3NCYXNlQXNzZXQyaW50ZXJuYWxJZCIMYmFzZUFzc2V0U3RyIhNrZXlBbGxQb29sc1NodXRkb3duIg1rZXlQb29sV2VpZ2h0Ig9jb250cmFjdEFkZHJlc3MiFmtleUFsbG93ZWRMcFNjcmlwdEhhc2giFmtleUZlZUNvbGxlY3RvckFkZHJlc3MiD3Rocm93T3JkZXJFcnJvciIKb3JkZXJWYWxpZCIOb3JkZXJWYWxpZEluZm8iC3NlbmRlclZhbGlkIgxtYXRjaGVyVmFsaWQiD2dldFN0cmluZ09yRmFpbCIHYWRkcmVzcyIDa2V5IgxnZXRJbnRPckZhaWwiCHRocm93RXJyIgNtc2ciBmZtdEVyciIPZmFjdG9yeUNvbnRyYWN0IhNmZWVDb2xsZWN0b3JBZGRyZXNzIgVpbkZlZSIBQCIGb3V0RmVlIhBpc0dsb2JhbFNodXRkb3duIhNnZXRNYXRjaGVyUHViT3JGYWlsIg1nZXRQb29sQ29uZmlnIghhbXRBc3NldCIKcHJpY2VBc3NldCIMcGFyc2VBc3NldElkIgVpbnB1dCIPYXNzZXRJZFRvU3RyaW5nIg9wYXJzZVBvb2xDb25maWciCnBvb2xDb25maWciEHBvb2xDb25maWdQYXJzZWQiCyR0MDg5NjI5MTI4Ig5jZmdQb29sQWRkcmVzcyINY2ZnUG9vbFN0YXR1cyIMY2ZnTHBBc3NldElkIhBjZmdBbW91bnRBc3NldElkIg9jZmdQcmljZUFzc2V0SWQiFmNmZ0Ftb3VudEFzc2V0RGVjaW1hbHMiFWNmZ1ByaWNlQXNzZXREZWNpbWFscyIQZ2V0RmFjdG9yeUNvbmZpZyIPc3Rha2luZ0NvbnRyYWN0IhBzbGlwcGFnZUNvbnRyYWN0IhFkYXRhUHV0QWN0aW9uSW5mbyINaW5BbXRBc3NldEFtdCIPaW5QcmljZUFzc2V0QW10IghvdXRMcEFtdCIFcHJpY2UiHXNsaXBwYWdlVG9sZXJhbmNlUGFzc2VkQnlVc2VyIhVzbGlwcGFnZVRvbGVyYW5jZVJlYWwiCHR4SGVpZ2h0Igt0eFRpbWVzdGFtcCISc2xpcGFnZUFtdEFzc2V0QW10IhRzbGlwYWdlUHJpY2VBc3NldEFtdCIRZGF0YUdldEFjdGlvbkluZm8iDm91dEFtdEFzc2V0QW10IhBvdXRQcmljZUFzc2V0QW10IgdpbkxwQW10Ig1nZXRBY2NCYWxhbmNlIg1iYWxhbmNlT25Qb29sIgx0b3RhbEJhbGFuY2UiD2NhbGNQcmljZUJpZ0ludCIIcHJBbXRYMTgiCGFtQW10WDE4IhRjYWxjUHJpY2VCaWdJbnRSb3VuZCIHZ2V0UmF0ZSIFcHJveHkiA2ludiIHJG1hdGNoMCIBciIHZGVwb3NpdCIGYW1vdW50Ig5zdGFraW5nQXNzZXRJZCIYY3VycmVudEFkZGl0aW9uYWxCYWxhbmNlIhpjdXJyZW50U3Rha2luZ0Fzc2V0QmFsYW5jZSIFYXNzZXQiDWRlcG9zaXRJbnZva2UiFHJlY2VpdmVkU3Rha2luZ0Fzc2V0IhRuZXdBZGRpdGlvbmFsQmFsYW5jZSIWbmV3U3Rha2luZ0Fzc2V0QmFsYW5jZSIId2l0aGRyYXciDHByb3h5UmF0ZU11bCINcHJvZml0QWRkcmVzcyIQY3VycmVudFByb3h5UmF0ZSIHb2xkUmF0ZSIMc3Rha2luZ0Fzc2V0IhRvbGRTZW5kU3Rha2luZ0Ftb3VudCIWc2VuZFN0YWtpbmdBc3NldEFtb3VudCIMcHJvZml0QW1vdW50Ig53aXRoZHJhd0ludm9rZSIOcmVjZWl2ZWRBc3NldHMiE2dldExlYXNlUHJveHlDb25maWciAWEiEXJlYmFsYW5jZUludGVybmFsIgt0YXJnZXRSYXRpbyIKbWluQmFsYW5jZSIUbGVhc2FibGVUb3RhbEJhbGFuY2UiF3RhcmdldEFkZGl0aW9uYWxCYWxhbmNlIgRkaWZmIg9zZW5kQXNzZXRBbW91bnQiDmdldEFzc2V0QW1vdW50Ig5yZWJhbGFuY2VBc3NldCINJHQwMTUzNjQxNTUwMCIKaXNMZWFzYWJsZSILbGVhc2VkUmF0aW8iDHByb3h5QWRkcmVzcyIMcHJveHlBc3NldElkIhRzdGFraW5nUHJvZml0QWRkcmVzcyIZd2l0aGRyYXdBbmRSZWJhbGFuY2VBc3NldCIJZ2V0QW1vdW50Ig0kdDAxNTg5OTE2MDM1IhduZXdUb3RhbExlYXNhYmxlQmFsYW5jZSIOd2l0aGRyYXdBbW91bnQiF3dpdGhkcmF3QW5kUmViYWxhbmNlQWxsIhRhbW91bnRBc3NldE91dEFtb3VudCITcHJpY2VBc3NldE91dEFtb3VudCISQW1BbXRXaXRoZHJhd1N0YXRlIhJQckFtdFdpdGhkcmF3U3RhdGUiEHByaXZhdGVDYWxjUHJpY2UiCmFtQXNzZXREY20iCnByQXNzZXREY20iBWFtQW10IgVwckFtdCIOYW10QXNzZXRBbXRYMTgiEHByaWNlQXNzZXRBbXRYMTgiCmNhbGNQcmljZXMiBWxwQW10IgNjZmciC2FtdEFzc2V0RGNtIg1wcmljZUFzc2V0RGNtIghwcmljZVgxOCIIbHBBbXRYMTgiE2xwUHJpY2VJbkFtQXNzZXRYMTgiE2xwUHJpY2VJblByQXNzZXRYMTgiD2NhbGN1bGF0ZVByaWNlcyIGcHJpY2VzIhRlc3RpbWF0ZUdldE9wZXJhdGlvbiIGdHhJZDU4IgpwbXRBc3NldElkIghwbXRMcEFtdCIJbHBBc3NldElkIglhbUFzc2V0SWQiCXByQXNzZXRJZCIKcG9vbFN0YXR1cyIKbHBFbWlzc2lvbiIJYW1CYWxhbmNlIgxhbUJhbGFuY2VYMTgiCXByQmFsYW5jZSIMcHJCYWxhbmNlWDE4IgtjdXJQcmljZVgxOCIIY3VyUHJpY2UiC3BtdExwQW10WDE4Ig1scEVtaXNzaW9uWDE4IgtvdXRBbUFtdFgxOCILb3V0UHJBbXRYMTgiCG91dEFtQW10IghvdXRQckFtdCIFc3RhdGUiFGVzdGltYXRlUHV0T3BlcmF0aW9uIhFzbGlwcGFnZVRvbGVyYW5jZSIMaW5BbUFzc2V0QW10IgtpbkFtQXNzZXRJZCIMaW5QckFzc2V0QW10IgtpblByQXNzZXRJZCIKaXNFdmFsdWF0ZSIGZW1pdExwIgxhbUFzc2V0SWRTdHIiDHByQXNzZXRJZFN0ciILaUFtdEFzc2V0SWQiDWlQcmljZUFzc2V0SWQiDmluQW1Bc3NldElkU3RyIg5pblByQXNzZXRJZFN0ciIPaW5BbUFzc2V0QW10WDE4Ig9pblByQXNzZXRBbXRYMTgiDHVzZXJQcmljZVgxOCIDcmVzIgtzbGlwcGFnZVgxOCIUc2xpcHBhZ2VUb2xlcmFuY2VYMTgiCnByVmlhQW1YMTgiCmFtVmlhUHJYMTgiDGV4cGVjdGVkQW10cyIRZXhwQW10QXNzZXRBbXRYMTgiE2V4cFByaWNlQXNzZXRBbXRYMTgiCWNhbGNMcEFtdCIOY2FsY0FtQXNzZXRQbXQiDmNhbGNQckFzc2V0UG10IgxzbGlwcGFnZUNhbGMiCWVtaXRMcEFtdCIGYW1EaWZmIgZwckRpZmYiC2NvbW1vblN0YXRlIgdjYWxjS0xwIg1hbW91bnRCYWxhbmNlIgxwcmljZUJhbGFuY2UiEGFtb3VudEJhbGFuY2VYMTgiD3ByaWNlQmFsYW5jZVgxOCIKdXBkYXRlZEtMcCIOY2FsY0N1cnJlbnRLTHAiEGFtb3VudEFzc2V0RGVsdGEiD3ByaWNlQXNzZXREZWx0YSIUbHBBc3NldEVtaXNzaW9uRGVsdGEiEmFtb3VudEFzc2V0QmFsYW5jZSIRcHJpY2VBc3NldEJhbGFuY2UiD2xwQXNzZXRFbWlzc2lvbiIKY3VycmVudEtMcCIScmVmcmVzaEtMcEludGVybmFsIhdhbW91bnRBc3NldEJhbGFuY2VEZWx0YSIWcHJpY2VBc3NldEJhbGFuY2VEZWx0YSIHYWN0aW9ucyISdmFsaWRhdGVVcGRhdGVkS0xwIgZvbGRLTHAiG3ZhbGlkYXRlTWF0Y2hlck9yZGVyQWxsb3dlZCIFb3JkZXIiEWFtb3VudEFzc2V0QW1vdW50IhBwcmljZUFzc2V0QW1vdW50Ig0kdDAyODMwMTI4NTEzIgNrTHAiDSR0MDI4OTUzMjkwNTMiDXVudXNlZEFjdGlvbnMiBmtMcE5ldyIMaXNPcmRlclZhbGlkIgRpbmZvIgljb21tb25HZXQiAWkiA3BtdCIGcG10QW10Igljb21tb25QdXQiCmFtQXNzZXRQbXQiCnByQXNzZXRQbXQiBmVzdFB1dCIEZW1pdCIHZW1pdEludiINZW1pdEludkxlZ2FjeSIVbGVnYWN5RmFjdG9yeUNvbnRyYWN0Igd0YWtlRmVlIglmZWVBbW91bnQiD2NhbGNQdXRPbmVUb2tlbiIQcGF5bWVudEFtb3VudFJhdyIOcGF5bWVudEFzc2V0SWQiBmlzRXZhbCIQYW1vdW50QmFsYW5jZVJhdyIPcHJpY2VCYWxhbmNlUmF3IhRwYXltZW50SW5BbW91bnRBc3NldCINJHQwMzIxNjYzMjQ1OSIQYW1vdW50QmFsYW5jZU9sZCIPcHJpY2VCYWxhbmNlT2xkIg0kdDAzMjQ2MzMyNjEyIhRhbW91bnRBc3NldEFtb3VudFJhdyITcHJpY2VBc3NldEFtb3VudFJhdyINJHQwMzI3NDQzMjgwOCINcGF5bWVudEFtb3VudCIQYW1vdW50QmFsYW5jZU5ldyIPcHJpY2VCYWxhbmNlTmV3IgtwcmljZU5ld1gxOCIIcHJpY2VOZXciDnBheW1lbnRCYWxhbmNlIhRwYXltZW50QmFsYW5jZUJpZ0ludCIMc3VwcGx5QmlnSW50IgtjaGVjaFN1cHBseSINZGVwb3NpdEJpZ0ludCILaXNzdWVBbW91bnQiC3ByaWNlT2xkWDE4IghwcmljZU9sZCIEbG9zcyINJHQwMzQ0ODkzNDY1NiIHYmFsYW5jZSIPaXNzdWVBbW91bnRCb3RoIg9jYWxjR2V0T25lVG9rZW4iCm91dEFzc2V0SWQiBmNoZWNrcyIQb3V0SW5BbW91bnRBc3NldCINYmFsYW5jZUJpZ0ludCIYb3V0SW5BbW91bnRBc3NldERlY2ltYWxzIgxhbUJhbGFuY2VPbGQiDHByQmFsYW5jZU9sZCIKb3V0QmFsYW5jZSIQb3V0QmFsYW5jZUJpZ0ludCIOcmVkZWVtZWRCaWdJbnQiCWFtb3VudFJhdyINJHQwMzY3MzQzNjc5MCILdG90YWxBbW91bnQiDSR0MDM2Nzk0MzcwMjAiC291dEFtQW1vdW50IgtvdXRQckFtb3VudCIMYW1CYWxhbmNlTmV3IgxwckJhbGFuY2VOZXciGGFtb3VudEJvdGhJblBheW1lbnRBc3NldCIWbWFuYWdlclB1YmxpY0tleU9yVW5pdCIBcyIdcGVuZGluZ01hbmFnZXJQdWJsaWNLZXlPclVuaXQiCWlzTWFuYWdlciICcGsiC211c3RNYW5hZ2VyIgJwZCINY2xlYW5BbW91bnRJbiIJaXNSZXZlcnNlIg1mZWVQb29sQW1vdW50Ig0kdDAzODkwNjM5MjExIghhc3NldE91dCIHYXNzZXRJbiIScG9vbEFzc2V0SW5CYWxhbmNlIhNwb29sQXNzZXRPdXRCYWxhbmNlIglhbW91bnRPdXQiBG9sZEsiBG5ld0siBmNoZWNrSyIMYW1vdW50T3V0TWluIglhZGRyZXNzVG8iC3N3YXBDb250YWN0IghjaGVja01pbiIOcmViYWxhbmNlU3RhdGUiDXdpdGhkcmF3U3RhdGUiF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5IgtjaGVja0NhbGxlciIVY2hlY2tNYW5hZ2VyUHVibGljS2V5IgJwbSIFaGFzUE0iB2NoZWNrUE0iD3Nob3VsZEF1dG9TdGFrZSIEYW1JZCIEcHJJZCIMc2xpcHBhZ2VBSW52IgxzbGlwcGFnZVBJbnYiCmxwVHJhbnNmZXIiC3NscFN0YWtlSW52Ig0kdDA0NDI1NzQ0NzE5IhFyZWZyZXNoS0xwQWN0aW9ucyIRaXNVcGRhdGVkS0xwVmFsaWQiA3JlYiILbWF4U2xpcHBhZ2UiDSR0MDQ1MzMxNDUzOTYiDG1pbk91dEFtb3VudCIJYXV0b1N0YWtlIiBpc1Bvb2xPbmVUb2tlbk9wZXJhdGlvbnNEaXNhYmxlZCINaXNQdXREaXNhYmxlZCIHcGF5bWVudCINJHQwNDY1ODQ0NjczNiIFYm9udXMiE2VtaXRBbW91bnRFc3RpbWF0ZWQiCmVtaXRBbW91bnQiCHN0YWtlSW52IgdzZW5kRmVlIg0kdDA0NzMyMjQ3NTE5Ig0kdDA0NzUyMjQ3NjMwIg0kdDA0Nzk4NTQ4MTQyIg1vdXRBc3NldElkU3RyIg1pc0dldERpc2FibGVkIg0kdDA0OTAyNzQ5MTgwIg9hbW91bnRFc3RpbWF0ZWQiB2J1cm5JbnYiDWFzc2V0VHJhbnNmZXIiDSR0MDQ5ODQ0NTAwOTEiEGZlZUFtb3VudEZvckNhbGMiDSR0MDUwMDk0NTAyMDIiDSR0MDUwNDgwNTA2MzYiDXVuc3Rha2VBbW91bnQiCnVuc3Rha2VJbnYiDSR0MDUxNTQxNTE2OTIiDSR0MDUyMzUxNTI1OTgiDSR0MDUyNjAxNTI3MDkiFGJ1cm5MUEFzc2V0T25GYWN0b3J5Ig0kdDA1MzgwNDUzODg1IhJub0xlc3NUaGVuQW10QXNzZXQiFG5vTGVzc1RoZW5QcmljZUFzc2V0Ig0kdDA1NDk4MDU1MDYxIg1jaGVja1BheW1lbnRzIg9jaGVja1Bvb2xTdGF0dXMiDSR0MDU2MzMzNTY0MTQiFW5vTGVzc1RoZW5BbW91bnRBc3NldCIMY2hlY2tBbW91bnRzIg0kdDA1Nzg1NTU3OTM2IgthbXRBc3NldFN0ciINcHJpY2VBc3NldFN0ciIYbGFzdFJlZnJlc2hlZEJsb2NrSGVpZ2h0Ih1jaGVja0xhc3RSZWZyZXNoZWRCbG9ja0hlaWdodCINJHQwNTkxNDA1OTIwNCIQa0xwVXBkYXRlQWN0aW9ucyIKYW10QXNzZXRJZCIMcHJpY2VBc3NldElkIg1wb29sTFBCYWxhbmNlIhJhY2NBbXRBc3NldEJhbGFuY2UiFGFjY1ByaWNlQXNzZXRCYWxhbmNlIgpwcmljZXNMaXN0Ig9scEFtdEFzc2V0U2hhcmUiEWxwUHJpY2VBc3NldFNoYXJlIgpwb29sV2VpZ2h0IgxjdXJQcmljZUNhbGMiDGFtQmFsYW5jZVJhdyIMcHJCYWxhbmNlUmF3Ig9hbUJhbGFuY2VSYXdYMTgiD3ByQmFsYW5jZVJhd1gxOCIQcGF5bWVudExwQXNzZXRJZCIMcGF5bWVudExwQW10IgJ0eCIGdmVyaWZ5Ig90YXJnZXRQdWJsaWNLZXkiCm1hdGNoZXJQdWIiDSR0MDY3ODY2Njc5MzUiB25ld0hhc2giC2FsbG93ZWRIYXNoIgtjdXJyZW50SGFzaH8AAWEACAABYgCAwtcvAAFjCQC2AgEAgMLXLwABZAkAtgIBAICAkLu61q3wDQABZQkAtgIBAAAAAWYJALYCAQAAAAFnCQC2AgEAAQABaAkAtgIBAAIAAWkCBVdBVkVTAAFqAgJfXwABawABAAFsAAIAAW0AAwABbgAEAAFvAAEAAXAAAgABcQADAAFyAAQAAXMABQABdAAGAAF1AAcAAXYACAABdwAJAAF4AAoAAXkAAQABegACAAFBAAMAAUIAAQABQwAHAQFEAgFFAUYJALwCAwkAtgIBBQFFBQFkCQC2AgEFAUYBAUcCAUUBRgkAvAIDBQFFBQFkBQFGAQFIAgFJAUoJAKADAQkAvAIDBQFJCQC2AgEFAUoFAWQBAUsDAUkBSgFMCQCgAwEJAL0CBAUBSQkAtgIBBQFKBQFkBQFMAQFNAwFOAU8BUAkAawMFAU4FAU8FAVABAVEBAUkDCQBmAgAABQFJCQEBLQEFAUkFAUkBAVIBAUkDCQC/AgIFAWUFAUkJAL4CAQUBSQUBSQEBUwACECVzX19zd2FwQ29udHJhY3QBAVQAAhMlc19fZmFjdG9yeUNvbnRyYWN0AQFVAAIUJXNfX21hbmFnZXJQdWJsaWNLZXkBAVYAAhslc19fcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkBAVcAAhElcyVzX19wcmljZV9fbGFzdAEBWAIBWQFaCQC5CQIJAMwIAgIYJXMlcyVkJWRfX3ByaWNlX19oaXN0b3J5CQDMCAIJAKQDAQUBWQkAzAgCCQCkAwEFAVoFA25pbAUBagECYWECAmFiAmFjCQCsAgIJAKwCAgkArAICAgslcyVzJXNfX1BfXwUCYWICAl9fBQJhYwECYWQCAmFiAmFjCQCsAgIJAKwCAgkArAICAgslcyVzJXNfX0dfXwUCYWICAl9fBQJhYwECYWUAAg8lc19fYW1vdW50QXNzZXQBAmFmAAIOJXNfX3ByaWNlQXNzZXQAAmFnAgclc19fZmVlAAJhaAkAawMACgUBYgCQTgACYWkJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUCYWcFAmFoAAJhagkAuQkCCQDMCAICAiVzCQDMCAICA2tMcAUDbmlsBQFqAAJhawkAuQkCCQDMCAICAiVzCQDMCAICEmtMcFJlZnJlc2hlZEhlaWdodAUDbmlsBQFqAAJhbAkAuQkCCQDMCAICAiVzCQDMCAICD3JlZnJlc2hLTHBEZWxheQUDbmlsBQFqAAJhbQAeAAJhbgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQJhbAUCYW0BAmFvAQJhcAkAuQkCCQDMCAICBCVzJXMJAMwIAgINc3Rha2VkQmFsYW5jZQkAzAgCBQJhcAUDbmlsBQFqAQJhcQECYXAJALkJAgkAzAgCAgQlcyVzCQDMCAICEXNoYXJlQXNzZXRCYWxhbmNlCQDMCAIFAmFwBQNuaWwFAWoBAmFyAQJhcAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQECYW8BBQJhcAAAAQJhcwECYXAJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBAmFxAQUCYXAAAAECYXQAAhElc19fZmFjdG9yeUNvbmZpZwECYXUAAhglcyVzX19tYXRjaGVyX19wdWJsaWNLZXkBAmF2AQJhdwkArAICCQCsAgICCCVzJXMlc19fBQJhdwIgX19tYXBwaW5nc19fcG9vbENvbnRyYWN0MkxwQXNzZXQBAmF4AgJheQJhegkArAICCQCsAgIJAKwCAgkArAICAgglZCVkJXNfXwUCYXkCAl9fBQJhegIIX19jb25maWcBAmFBAQJhQgkArAICAiglcyVzJXNfX21hcHBpbmdzX19iYXNlQXNzZXQyaW50ZXJuYWxJZF9fBQJhQgECYUMAAgwlc19fc2h1dGRvd24BAmFEAQJhRQkArAICAhIlcyVzX19wb29sV2VpZ2h0X18FAmFFAQJhRgACFyVzX19hbGxvd2VkTHBTY3JpcHRIYXNoAAJhRwIXJXNfX2ZlZUNvbGxlY3RvckFkZHJlc3MBAmFIBAJhSQJhSgJhSwJhTAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAiRvcmRlciB2YWxpZGF0aW9uIGZhaWxlZDogb3JkZXJWYWxpZD0JAKUDAQUCYUkCAiAoBQJhSgIBKQINIHNlbmRlclZhbGlkPQkApQMBBQJhSwIOIG1hdGNoZXJWYWxpZD0JAKUDAQUCYUwBAmFNAgJhTgJhTwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFAmFOBQJhTwkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQJhTgkAzAgCAgEuCQDMCAIFAmFPCQDMCAICDyBpcyBub3QgZGVmaW5lZAUDbmlsAgABAmFQAgJhTgJhTwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFAmFOBQJhTwkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQJhTgkAzAgCAgEuCQDMCAIFAmFPCQDMCAICDyBpcyBub3QgZGVmaW5lZAUDbmlsAgABAmFRAQJhUgkAAgEJALkJAgkAzAgCAghscC5yaWRlOgkAzAgCBQJhUgUDbmlsAgEgAQJhUwECYVIJALkJAgkAzAgCAghscC5yaWRlOgkAzAgCBQJhUgUDbmlsAgEgAAJhVAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBAmFNAgUEdGhpcwkBAVQAAAJhVQkBEUBleHRyTmF0aXZlKDEwNjIpAQkBAmFNAgUCYVQFAmFHAAJhVgoAAmFXCQD8BwQFAmFUAhBnZXRJbkZlZVJFQURPTkxZCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQNuaWwDCQABAgUCYVcCA0ludAUCYVcJAAIBCQCsAgIJAAMBBQJhVwIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50AAJhWAoAAmFXCQD8BwQFAmFUAhFnZXRPdXRGZWVSRUFET05MWQkAzAgCCQClCAEFBHRoaXMFA25pbAUDbmlsAwkAAQIFAmFXAgNJbnQFAmFXCQACAQkArAICCQADAQUCYVcCGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAECYVkACQELdmFsdWVPckVsc2UCCQCbCAIFAmFUCQECYUMABwECYVoACQDZBAEJAQJhTQIFAmFUCQECYXUAAQJiYQAEAmJiCQECYU0CBQR0aGlzCQECYWUABAJiYwkBAmFNAgUEdGhpcwkBAmFmAAQCYXoJAQJhUAIFAmFUCQECYUEBBQJiYwQCYXkJAQJhUAIFAmFUCQECYUEBBQJiYgkAtQkCCQECYU0CBQJhVAkBAmF4AgkApAMBBQJheQkApAMBBQJhegUBagECYmQBAmJlAwkAAAIFAmJlBQFpBQR1bml0CQDZBAEFAmJlAQJiZgECYmUDCQAAAgUCYmUFBHVuaXQFAWkJANgEAQkBBXZhbHVlAQUCYmUBAmJnAQJiaAkAmQoHCQERQGV4dHJOYXRpdmUoMTA2MikBCQCRAwIFAmJoBQFvCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYmgFAXAJANkEAQkAkQMCBQJiaAUBcQkBAmJkAQkAkQMCBQJiaAUBcgkBAmJkAQkAkQMCBQJiaAUBcwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJoBQF0CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYmgFAXUAAmJpCQECYmcBCQECYmEAAAJiagUCYmkAAmJrCAUCYmoCXzEAAmJsCAUCYmoCXzIAAmJtCAUCYmoCXzMAAmJuCAUCYmoCXzQAAmJvCAUCYmoCXzUAAmJwCAUCYmoCXzYAAmJxCAUCYmoCXzcBAmJyAAkAtQkCCQECYU0CBQJhVAkBAmF0AAUBagACYnMJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIJAQJicgAFAUICGWluY29ycmVjdCBzdGFraW5nIGFkZHJlc3MAAmJ0CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCCQECYnIABQFDAhlpbmNvcnJlY3Qgc3Rha2luZyBhZGRyZXNzAQJidQoCYnYCYncCYngCYnkCYnoCYkECYkICYkMCYkQCYkUJALkJAgkAzAgCAhQlZCVkJWQlZCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFAmJ2CQDMCAIJAKQDAQUCYncJAMwIAgkApAMBBQJieAkAzAgCCQCkAwEFAmJ5CQDMCAIJAKQDAQUCYnoJAMwIAgkApAMBBQJiQQkAzAgCCQCkAwEFAmJCCQDMCAIJAKQDAQUCYkMJAMwIAgkApAMBBQJiRAkAzAgCCQCkAwEFAmJFBQNuaWwFAWoBAmJGBgJiRwJiSAJiSQJieQJiQgJiQwkAuQkCCQDMCAICDCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFAmJHCQDMCAIJAKQDAQUCYkgJAMwIAgkApAMBBQJiSQkAzAgCCQCkAwEFAmJ5CQDMCAIJAKQDAQUCYkIJAMwIAgkApAMBBQJiQwUDbmlsBQFqAQJiSgECYXAEAmJLAwkAAAIFAmFwAgVXQVZFUwgJAO8HAQUEdGhpcwlhdmFpbGFibGUJAPAHAgUEdGhpcwkA2QQBBQJhcAQCYkwJAGUCCQBkAgUCYksJAQJhcgEFAmFwCQECYXMBBQJhcAkAlgMBCQDMCAIAAAkAzAgCBQJiTAUDbmlsAQJiTQICYk4CYk8JALwCAwUCYk4FAWQFAmJPAQJiUAMCYk4CYk8BTAkAvQIEBQJiTgUBZAUCYk8FAUwBAmJRAQJiUgQCYlMJAPwHBAUCYlICB2dldFJhdGUFA25pbAUDbmlsAwkAAAIFAmJTBQJiUwQCYlQFAmJTAwkAAQIFAmJUAgNJbnQEAmJVBQJiVAUCYlUJAQJhUQECIHByb3h5LmdldFJhdGUoKSB1bmV4cGVjdGVkIHZhbHVlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJiVgQCYXACYlcCYlgCYlIEAmJZCQECYXIBBQJhcAMJAAACBQJiWQUCYlkEAmJaCQECYXMBBQJiWAMJAAACBQJiWgUCYloEAmNhCQECYmQBBQJhcAMJAGYCBQJiVwAABAJjYgkA/AcEBQJiUgIHZGVwb3NpdAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJjYQUCYlcFA25pbAMJAAACBQJjYgUCY2IEAmJUBQJjYgMJAAECBQJiVAIDSW50BAJjYwUCYlQEAmNkCQBkAgUCYlkFAmJXBAJjZQkAZAIFAmJaBQJjYwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmFvAQUCYXAFAmNkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYXEBBQJiWAUCY2UFA25pbAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAmNmBgJhcAJiVwJiWAJiUgJjZwJjaAQCYlkJAQJhcgEFAmFwAwkAAAIFAmJZBQJiWQQCYloJAQJhcwEFAmJYAwkAAAIFAmJaBQJiWgQCY2kJAQJiUQEFAmJSAwkAAAIFAmNpBQJjaQQCY2oJAGsDBQJjZwUCYlkFAmJaBAJjawkBAmJkAQUCYlgEAmNsCQBrAwUCY2cFAmJXBQJjagQCY20JAGsDBQJjZwUCYlcFAmNpBAJjbgkAlgMBCQDMCAIAAAkAzAgCCQBlAgUCY2wFAmNtBQNuaWwDCQBmAgUCY20AAAQCY28JAPwHBAUCYlICCHdpdGhkcmF3BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmNrBQJjbQUDbmlsAwkAAAIFAmNvBQJjbwQCYlQFAmNvAwkAAQIFAmJUAgNJbnQEAmNwBQJiVAQCY2QJAGUCBQJiWQUCY3AEAmNlCQBlAgkAZQIFAmJaBQJjbQUCY24JAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhbwEFAmFwBQJjZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmFxAQUCYlgFAmNlCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAmNoBQJjbgkBAmJkAQUCYlgFA25pbAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAmNxAQJhcAQCYlQJAPwHBAUCYVQCGmdldFBvb2xMZWFzZUNvbmZpZ1JFQURPTkxZCQDMCAIJAKUIAQUEdGhpcwkAzAgCBQJhcAUDbmlsBQNuaWwDCQABAgUCYlQCMChCb29sZWFuLCBJbnQsIEludCwgU3RyaW5nLCBTdHJpbmcsIEludCwgU3RyaW5nKQQCY3IFAmJUBQJjcgkBAmFRAQkArAICCQCsAgICAVsFAmFwAh1dIGdldExlYXNlUHJveHlDb25maWcoKSBlcnJvcgECY3MHAmN0AmFwAmJYAmN1AmJSAmNnAmNoBAJiWQkBAmFyAQUCYXADCQAAAgUCYlkFAmJZBAJiWgkBAmFzAQUCYlgDCQAAAgUCYloFAmJaBAJjdgkAlgMBCQDMCAIAAAkAzAgCCQBlAgkBAmJKAQUCYXAFAmN1BQNuaWwEAmN3CQBrAwUCY3QFAmN2AGQEAmN4CQBlAgUCYlkFAmN3AwkAAAIFAmN4AAAFA25pbAMJAGYCAAAFAmN4BAJjeQkBAS0BBQJjeAkBAmJWBAUCYXAFAmN5BQJiWAUCYlIEAmN6BQJjeAkBAmNmBgUCYXAFAmN6BQJiWAUCYlIFAmNnBQJjaAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECY0EBAmFwBAJjQgkBAmNxAQUCYXAEAmNDCAUCY0ICXzEEAmNECAUCY0ICXzIEAmN1CAUCY0ICXzMEAmNFCAUCY0ICXzQEAmNGCAUCY0ICXzUEAmNnCAUCY0ICXzYEAmNHCAUCY0ICXzcDBQJjQwkBAmNzBwUCY0QFAmFwBQJjRgUCY3UJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAmNFBQJjZwkBEUBleHRyTmF0aXZlKDEwNjIpAQUCY0cFA25pbAECY0gCAmFwAmNJBAJjSgkBAmNxAQUCYXAEAmNDCAUCY0oCXzEEAmNECAUCY0oCXzIEAmN1CAUCY0oCXzMEAmNFCAUCY0oCXzQEAmNGCAUCY0oCXzUEAmNnCAUCY0oCXzYEAmNHCAUCY0oCXzcDBQJjQwQCY0sJAJYDAQkAzAgCAAAJAMwIAgkAZQIJAGUCCQECYkoBBQJhcAUCY0kFAmN1BQNuaWwDCQAAAgUCY0sFAmNLBAJjZAkAawMFAmNEBQJjSwBkAwkAAAIFAmNkBQJjZAQCY0wJAGUCCQECYXIBBQJhcAUCY2QDCQAAAgUCY0wFAmNMAwkAZgIAAAUCY0wJAQJiVgQFAmFwCQEBLQEFAmNMBQJjRgkBEUBleHRyTmF0aXZlKDEwNjIpAQUCY0UJAQJjZgYFAmFwBQJjTAUCY0YJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAmNFBQJjZwkBEUBleHRyTmF0aXZlKDEwNjIpAQUCY0cJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAECY00CAmNOAmNPBAJjUAkBAmNIAgkBAmFNAgUEdGhpcwkBAmFlAAUCY04EAmNRCQECY0gCCQECYU0CBQR0aGlzCQECYWYABQJjTwkAzggCBQJjUAUCY1EBAmNSBAJjUwJjVAJjVQJjVgQCY1cJAQFEAgUCY1UFAmNTBAJjWAkBAUQCBQJjVgUCY1QJAQJiTQIFAmNYBQJjVwECY1kDAmNVAmNWAmNaBAJkYQkBAmJhAAQCZGIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJkYQUBdAQCZGMJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJkYQUBdQQCZGQJAQJjUgQFAmRiBQJkYwUCY1UFAmNWBAJiTwkBAUQCBQJjVQUCZGIEAmJOCQEBRAIFAmNWBQJkYwQCZGUJAQFEAgUCY1oFAWIEAmRmCQECYk0CBQJiTwUCZGUEAmRnCQECYk0CBQJiTgUCZGUJAMwIAgUCZGQJAMwIAgUCZGYJAMwIAgUCZGcFA25pbAECZGgDAmNVAmNWAmNaBAJkaQkBAmNZAwUCY1UFAmNWBQJjWgkAzAgCCQEBSAIJAJEDAgUCZGkAAAUBYgkAzAgCCQEBSAIJAJEDAgUCZGkAAQUBYgkAzAgCCQEBSAIJAJEDAgUCZGkAAgUBYgUDbmlsAQJkagQCZGsCZGwCZG0CYWIEAmRhCQECYmEABAJkbgkAkQMCBQJkYQUBcQQCZG8JAJEDAgUCZGEFAXIEAmRwCQCRAwIFAmRhBQFzBAJjUwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmRhBQF0BAJjVAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmRhBQF1BAJkcQkAkQMCBQJkYQUBcAQCZHIICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQkA2QQBBQJkbgkArAICCQCsAgICBkFzc2V0IAUCZG4CDiBkb2Vzbid0IGV4aXN0CHF1YW50aXR5AwkBAiE9AgUCZG4FAmRsCQACAQIVSW52YWxpZCBhc3NldCBwYXNzZWQuBAJkcwkBAmJKAQUCZG8EAmR0CQEBRAIFAmRzBQJjUwQCZHUJAQJiSgEFAmRwBAJkdgkBAUQCBQJkdQUCY1QEAmR3CQECYk0CBQJkdgUCZHQEAmR4CQEBSAIFAmR3BQFiBAJkeQkBAUQCBQJkbQUBYgQCZHoJAQFEAgUCZHIFAWIEAmRBCQC8AgMFAmR0BQJkeQUCZHoEAmRCCQC8AgMFAmR2BQJkeQUCZHoEAmRDCQEBSwMFAmRBBQJjUwUFRkxPT1IEAmRECQEBSwMFAmRCBQJjVAUFRkxPT1IEAmRFAwkAAAIFAmRrAgAFA25pbAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQJhYgUCZEMDCQAAAgUCZG8CBVdBVkVTBQR1bml0CQDZBAEFAmRvCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAmFiBQJkRAMJAAACBQJkcAIFV0FWRVMFBHVuaXQJANkEAQUCZHAJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFkAgkApQgBBQJhYgUCZGsJAQJiRgYFAmRDBQJkRAUCZG0FAmR4BQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBVwAFAmR4CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBWAIFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAFAmR4BQNuaWwJAJwKCgUCZEMFAmREBQJkbwUCZHAFAmRzBQJkdQUCZHIFAmR3BQJkcQUCZEUBAmRGCQJkawJkRwJkSAJkSQJkSgJkSwJhYgJkTAJkTQQCZGEJAQJiYQAEAmRuCQDZBAEJAJEDAgUCZGEFAXEEAmROCQCRAwIFAmRhBQFyBAJkTwkAkQMCBQJkYQUBcwQCZFAJAJEDAgUCZGEFAXYEAmRRCQCRAwIFAmRhBQF3BAJkYgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmRhBQF0BAJkYwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmRhBQF1BAJkcQkAkQMCBQJkYQUBcAQCZHIICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCZG4JAKwCAgkArAICAgZBc3NldCAJANgEAQUCZG4CDiBkb2Vzbid0IGV4aXN0CHF1YW50aXR5BAJkUgkA2AQBCQELdmFsdWVPckVsc2UCBQJkSQkA2QQBAgVXQVZFUwQCZFMJANgEAQkBC3ZhbHVlT3JFbHNlAgUCZEsJANkEAQIFV0FWRVMDAwkBAiE9AgUCZE4FAmRSBgkBAiE9AgUCZE8FAmRTCQACAQIiSW52YWxpZCBhbXQgb3IgcHJpY2UgYXNzZXQgcGFzc2VkLgQCZHMDBQJkTAkBAmJKAQUCZE4JAGUCCQECYkoBBQJkTgUCZEgEAmR1AwUCZEwJAQJiSgEFAmRPCQBlAgkBAmJKAQUCZE8FAmRKBAJkVAkBAUQCBQJkSAUCZGIEAmRVCQEBRAIFAmRKBQJkYwQCZFYJAQJiTQIFAmRVBQJkVAQCZHQJAQFEAgUCZHMFAmRiBAJkdgkBAUQCBQJkdQUCZGMEAmRXAwkAAAIFAmRyAAAEAmR3BQFlBAJkWAUBZQQCZGUJAHYGCQC5AgIFAmRUBQJkVQAACQC2AgEABQABAAAFBERPV04JAJcKBQkBAUgCBQJkZQUBYgkBAUgCBQJkVAUCZGIJAQFIAgUCZFUFAmRjCQECYk0CCQC3AgIFAmR2BQJkVQkAtwICBQJkdAUCZFQFAmRYBAJkdwkBAmJNAgUCZHYFAmR0BAJkWAkAvAIDCQEBUgEJALgCAgUCZHcFAmRWBQFkBQJkdwQCZFkJAQFEAgUCZEcFAWIDAwkBAiE9AgUCZHcFAWUJAL8CAgUCZFgFAmRZBwkAAgEJAKwCAgkArAICCQCsAgICD1ByaWNlIHNsaXBwYWdlIAkApgMBBQJkWAIeIGV4Y2VlZGVkIHRoZSBwYXNzZWQgbGltaXQgb2YgCQCmAwEFAmRZBAJkegkBAUQCBQJkcgUBYgQCZFoJAL0CBAUCZFQJAQJiUAMFAmR2BQJkdAUHQ0VJTElORwUBZAUHQ0VJTElORwQCZWEJAL0CBAUCZFUFAWQJAQJiUAMFAmR2BQJkdAUFRkxPT1IFB0NFSUxJTkcEAmViAwkAvwICBQJkWgUCZFUJAJQKAgUCZWEFAmRVCQCUCgIFAmRUBQJkWgQCZWMIBQJlYgJfMQQCZWQIBQJlYgJfMgQCZGUJAL0CBAUCZHoFAmVkBQJkdgUFRkxPT1IJAJcKBQkBAUsDBQJkZQUBYgUFRkxPT1IJAQFLAwUCZWMFAmRiBQdDRUlMSU5HCQEBSwMFAmVkBQJkYwUHQ0VJTElORwUCZHcFAmRYBAJlZQgFAmRXAl8xBAJlZggFAmRXAl8yBAJlZwgFAmRXAl8zBAJkeAkBAUgCCAUCZFcCXzQFAWIEAmVoCQEBSAIIBQJkVwJfNQUBYgMJAGcCAAAFAmVlCQACAQI2SW52YWxpZCBjYWxjdWxhdGlvbnMuIExQIGNhbGN1bGF0ZWQgaXMgbGVzcyB0aGFuIHplcm8uBAJlaQMJAQEhAQUCZE0AAAUCZWUEAmVqCQBlAgUCZEgFAmVmBAJlawkAZQIFAmRKBQJlZwQCZWwJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFXAAUCZHgJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFYAgUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCZHgJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFhAgUCYWIFAmRrCQECYnUKBQJlZgUCZWcFAmVpBQJkeAUCZEcFAmVoBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQJlagUCZWsFA25pbAkAnwoNBQJlZQUCZWkFAmR4BQJkcwUCZHUFAmRyBQJkbgUCZHEFAmVsBQJlagUCZWsFAmRJBQJkSwECZW0DAmVuAmVvAmRyBAJlcAkBAUcCBQJlbgkAtgIBBQJicAQCZXEJAQFHAgUCZW8JALYCAQUCYnEEAmVyCQC8AgMJAHYGCQC5AgIFAmVwBQJlcQAACQC2AgEABQABABIFBERPV04FAWcFAmRyAwkAAAIFAmRyBQFmBQFmBQJlcgECZXMDAmV0AmV1AmV2BAJldwkAuAICCQC2AgEJAQJiSgEJAQJiZgEFAmJuBQJldAQCZXgJALgCAgkAtgIBCQECYkoBCQECYmYBBQJibwUCZXUEAmV5CQC4AgIJALYCAQgJAQV2YWx1ZQEJAOwHAQUCYm0IcXVhbnRpdHkFAmV2BAJlegkBAmVtAwUCZXcFAmV4BQJleQUCZXoBAmVBAwJlQgJlQwJldgQCZXcJAGQCCQECYkoBCQECYmYBBQJibgUCZUIEAmV4CQBkAgkBAmJKAQkBAmJmAQUCYm8FAmVDBAJleQkAZAIICQEFdmFsdWUBCQDsBwEFAmJtCHF1YW50aXR5BQJldgQCZXIJAQJlbQMJALYCAQUCZXcJALYCAQUCZXgJALYCAQUCZXkEAmVECQDMCAIJAQxJbnRlZ2VyRW50cnkCBQJhawUGaGVpZ2h0CQDMCAIJAQtTdHJpbmdFbnRyeQIFAmFqCQCmAwEFAmVyBQNuaWwJAJQKAgUCZUQFAmVyAQJlRQICZUYCZXIDCQDAAgIFAmVyBQJlRgYJAQJhUQEJALkJAgkAzAgCAiJ1cGRhdGVkIEtMcCBsb3dlciB0aGFuIGN1cnJlbnQgS0xwCQDMCAIJAKYDAQUCZUYJAMwIAgkApgMBBQJlcgUDbmlsAgEgAQJlRwECZUgEAmV3CQECYkoBCQECYmYBBQJibgQCZXgJAQJiSgEJAQJiZgEFAmJvBAJlSQgFAmVIBmFtb3VudAQCZUoJAG4ECAUCZUgGYW1vdW50CAUCZUgFcHJpY2UFAWIFBUZMT09SBAJlSwMJAAACCAUCZUgJb3JkZXJUeXBlBQNCdXkJAJQKAgUCZUkJAQEtAQUCZUoJAJQKAgkBAS0BBQJlSQUCZUoEAmVCCAUCZUsCXzEEAmVDCAUCZUsCXzIDAwMJAQJhWQAGCQAAAgUCYmwFAW0GCQAAAgUCYmwFAW4JAAIBAhxFeGNoYW5nZSBvcGVyYXRpb25zIGRpc2FibGVkAwMJAQIhPQIICAUCZUgJYXNzZXRQYWlyC2Ftb3VudEFzc2V0BQJibgYJAQIhPQIICAUCZUgJYXNzZXRQYWlyCnByaWNlQXNzZXQFAmJvCQACAQITV3Jvbmcgb3JkZXIgYXNzZXRzLgQCZUwJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAqAMBCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFAmFqAgEwCQECYVMBAgtpbnZhbGlkIGtMcAQCZU0JAQJlQQMFAmVCBQJlQwAABAJlTggFAmVNAl8xBAJlTwgFAmVNAl8yBAJlUAkAwAICBQJlTwUCZUwEAmVRCQC5CQIJAMwIAgIEa0xwPQkAzAgCCQCmAwEFAmVMCQDMCAICCCBrTHBOZXc9CQDMCAIJAKYDAQUCZU8JAMwIAgIUIGFtb3VudEFzc2V0QmFsYW5jZT0JAMwIAgkApAMBBQJldwkAzAgCAhMgcHJpY2VBc3NldEJhbGFuY2U9CQDMCAIJAKQDAQUCZXgJAMwIAgIZIGFtb3VudEFzc2V0QmFsYW5jZURlbHRhPQkAzAgCCQCkAwEFAmVCCQDMCAICGCBwcmljZUFzc2V0QmFsYW5jZURlbHRhPQkAzAgCCQCkAwEFAmVDCQDMCAICCCBoZWlnaHQ9CQDMCAIJAKQDAQUGaGVpZ2h0BQNuaWwCAAkAlAoCBQJlUAUCZVEBAmVSAQJlUwMJAQIhPQIJAJADAQgFAmVTCHBheW1lbnRzAAEJAAIBAh1leGFjdGx5IDEgcGF5bWVudCBpcyBleHBlY3RlZAQCZVQJAQV2YWx1ZQEJAJEDAggFAmVTCHBheW1lbnRzAAAEAmRsCQEFdmFsdWUBCAUCZVQHYXNzZXRJZAQCZVUIBQJlVAZhbW91bnQEAmRXCQECZGoECQDYBAEIBQJlUw10cmFuc2FjdGlvbklkCQDYBAEFAmRsBQJlVQgFAmVTBmNhbGxlcgQCZEMIBQJkVwJfMQQCZEQIBQJkVwJfMgQCZHEJAQ1wYXJzZUludFZhbHVlAQgFAmRXAl85BAJkRQgFAmRXA18xMAMDCQECYVkABgkAAAIFAmRxBQFuCQACAQkArAICAixHZXQgb3BlcmF0aW9uIGlzIGJsb2NrZWQgYnkgYWRtaW4uIFN0YXR1cyA9IAkApAMBBQJkcQkAlwoFBQJkQwUCZEQFAmVVBQJkbAUCZEUBAmVWAwJlUwJkRwJkTQMJAQIhPQIJAJADAQgFAmVTCHBheW1lbnRzAAIJAAIBAh9leGFjdGx5IDIgcGF5bWVudHMgYXJlIGV4cGVjdGVkBAJlVwkBBXZhbHVlAQkAkQMCCAUCZVMIcGF5bWVudHMAAAQCZVgJAQV2YWx1ZQEJAJEDAggFAmVTCHBheW1lbnRzAAEEAmVZCQECZEYJCQDYBAEIBQJlUw10cmFuc2FjdGlvbklkBQJkRwgFAmVXBmFtb3VudAgFAmVXB2Fzc2V0SWQIBQJlWAZhbW91bnQIBQJlWAdhc3NldElkCQClCAEIBQJlUwZjYWxsZXIHBQJkTQQCZHEJAQ1wYXJzZUludFZhbHVlAQgFAmVZAl84AwMDCQECYVkABgkAAAIFAmRxBQFsBgkAAAIFAmRxBQFuCQACAQkArAICAixQdXQgb3BlcmF0aW9uIGlzIGJsb2NrZWQgYnkgYWRtaW4uIFN0YXR1cyA9IAkApAMBBQJkcQUCZVkBAmVaAQJiVwQCZmEJAPwHBAUCYVQCBGVtaXQJAMwIAgUCYlcFA25pbAUDbmlsAwkAAAIFAmZhBQJmYQQCZmIEAmJUBQJmYQMJAAECBQJiVAIHQWRkcmVzcwQCZmMFAmJUCQD8BwQFAmZjAgRlbWl0CQDMCAIFAmJXBQNuaWwFA25pbAUEdW5pdAMJAAACBQJmYgUCZmIFAmJXCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJmZAICYlcCYWkEAmZlAwkAAAIFAmFpAAAAAAkAawMFAmJXBQJhaQUBYgkAlAoCCQBlAgUCYlcFAmZlBQJmZQECZmYEAmZnAmZoAmFiAmFjBAJmaQkAAAIFAmFjBQR1bml0BAJmagkBAmJKAQkBAmJmAQUCYm4EAmZrCQECYkoBCQECYmYBBQJibwQCZmwDCQAAAgUCZmgFAmJuBgMJAAACBQJmaAUCYm8HCQECYVEBAg1pbnZhbGlkIGFzc2V0BAJmbQMFAmZpCQCUCgIFAmZqBQJmawMFAmZsCQCUCgIJAGUCBQJmagUCZmcFAmZrCQCUCgIFAmZqCQBlAgUCZmsFAmZnBAJmbggFAmZtAl8xBAJmbwgFAmZtAl8yBAJmcAMFAmZsCQCUCgIFAmZnAAAJAJQKAgAABQJmZwQCZnEIBQJmcAJfMQQCZnIIBQJmcAJfMgQCZUkICQECZmQCBQJmcQUCYVYCXzEEAmVKCAkBAmZkAgUCZnIFAmFWAl8xBAJmcwkBAmZkAgUCZmcFAmFWBAJmdAgFAmZzAl8xBAJmZQgFAmZzAl8yBAJmdQkAZAIFAmZuBQJlSQQCZnYJAGQCBQJmbwUCZUoEAmZ3CQECYk0CCQEBRAIFAmZ2BQJicQkBAUQCBQJmdQUCYnAEAmZ4CQEBSAIFAmZ3BQFiBAJmeQMFAmZsBQJmbgUCZm8EAmZ6CQC2AgEFAmZ5BAJmQQkAtgIBCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmJtCQCsAgIJAKwCAgIGYXNzZXQgCQDYBAEFAmJtAg4gZG9lc24ndCBleGlzdAhxdWFudGl0eQQCZkIDCQC/AgIFAmZBBQFmBgkBAmFRAQIiaW5pdGlhbCBkZXBvc2l0IHJlcXVpcmVzIGFsbCBjb2lucwMJAAACBQJmQgUCZkIEAmZDCQC2AgEFAmZ0BAJmRAkAlgMBCQDMCAIAAAkAzAgCCQCgAwEJALoCAgkAuQICBQJmQQkAuAICCQEKc3FydEJpZ0ludAQJALcCAgUBZAkAugICCQC5AgIFAmZDBQFkBQJmegASABIFBERPV04FAWQFAWQFA25pbAQCZWwDBQJmaQUDbmlsCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBVwAFAmZ4CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBWAIFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAFAmZ4CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhYQIJAKUIAQkBBXZhbHVlAQUCYWIJANgEAQkBBXZhbHVlAQUCYWMJAQJidQoFAmZxBQJmcgUCZkQFAmZ4AAAAAAUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAAAAAAFA25pbAQCZkUJAQJiTQIJAQFEAgUCZm8FAmJxCQEBRAIFAmZuBQJicAQCZkYJAQFIAgUCZkUFAWIEAmZHBAJmSAMFAmZsCQCUCgIFAmZxBQJmbgkAlAoCBQJmcgUCZm8EAmJXCAUCZkgCXzEEAmZJCAUCZkgCXzIEAmZKCQCgAwEJALwCAwUCZkEJALYCAQkAaQIFAmJXAAIJALYCAQUCZkkJAGsDCQBlAgUCZkQFAmZKBQFiBQJmSgkAlwoFBQJmRAUCZWwFAmZlBQJmRwUCZmwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAmZLBQJmTAJmdAJmaAJhYgJhYwQCZmkJAAACBQJhYwUEdW5pdAQCZGEJAQJiYQAEAmRiCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCZGEFAXQEAmRjCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCZGEFAXUEAmZNCQDMCAIDCQAAAgUCZmgFAmJtBgkBAmFRAQIQaW52YWxpZCBscCBhc3NldAUDbmlsAwkAAAIFAmZNBQJmTQQCZk4DCQAAAgUCZkwFAmJuBgMJAAACBQJmTAUCYm8HCQECYVEBAg1pbnZhbGlkIGFzc2V0BAJmTwMFAmZOCQC2AgEJAQJiSgEJAQJiZgEFAmJuCQC2AgEJAQJiSgEJAQJiZgEFAmJvBAJmUAMFAmZOBQJkYgUCZGMEAmZRCQECYkoBCQECYmYBBQJibgQCZlIJAQJiSgEJAQJiZgEFAmJvBAJmUwMFAmZOBQJmUQUCZlIEAmZUCQC2AgEFAmZTBAJmQQkAtgIBCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmJtCQCsAgIJAKwCAgIGYXNzZXQgCQDYBAEFAmJtAg4gZG9lc24ndCBleGlzdAhxdWFudGl0eQQCZlUJALYCAQUCZnQEAmZWCQCWAwEJAMwIAgAACQDMCAIJAKADAQkAugICCQC5AgIFAmZPCQC4AgIFAWQJAHYGCQC4AgIFAWQJALoCAgkAuQICBQJmVQUBZAUCZkEAEgUBaAAAABIFBERPV04FAWQFA25pbAQCZlcJAQJmZAIFAmZWBQJhWAQCZlgIBQJmVwJfMQQCZmUIBQJmVwJfMgQCZlkDBQJmTgkAlgoEBQJmWAAACQBlAgUCZlEFAmZWBQJmUgkAlgoEAAAFAmZYBQJmUQkAZQIFAmZSBQJmVgQCZloIBQJmWQJfMQQCZ2EIBQJmWQJfMgQCZ2IIBQJmWQJfMwQCZ2MIBQJmWQJfNAQCZncJAQJiTQIJAQFEAgUCZ2MFAmJxCQEBRAIFAmdiBQJicAQCZngJAQFIAgUCZncFAWIEAmVsAwUCZmkFA25pbAkAzAgCCQELU3RyaW5nRW50cnkCCQECYWQCCQClCAEJAQV2YWx1ZQEFAmFiCQDYBAEJAQV2YWx1ZQEFAmFjCQECYkYGBQJmWgUCZ2EFAmZ0BQJmeAUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVcABQJmeAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVgCBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQJmeAUDbmlsBAJmRQkBAmJNAgkBAUQCBQJmUgUCYnEJAQFEAgUCZlEFAmJwBAJmRgkBAUgCBQJmRQUBYgQCZkcEAmdkCQBoAgkAoAMBCQC8AgMFAmZPBQJmVQUCZkEAAgkAawMJAGUCBQJmWAUCZ2QFAWIFAmdkCQCXCgUFAmZYBQJlbAUCZmUFAmZHBQJmTgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECZ2UABAJiVAkAoggBCQEBVQADCQABAgUCYlQCBlN0cmluZwQCZ2YFAmJUCQDZBAEFAmdmAwkAAQIFAmJUAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IBAmdnAAQCYlQJAKIIAQkBAVYAAwkAAQIFAmJUAgZTdHJpbmcEAmdmBQJiVAkA2QQBBQJnZgMJAAECBQJiVAIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yAQJnaAECZVMEAmJUCQECZ2UAAwkAAQIFAmJUAgpCeXRlVmVjdG9yBAJnaQUCYlQJAAACCAUCZVMPY2FsbGVyUHVibGljS2V5BQJnaQMJAAECBQJiVAIEVW5pdAkAAAIIBQJlUwZjYWxsZXIFBHRoaXMJAAIBAgtNYXRjaCBlcnJvcgECZ2oBAmVTBAJnawkAAgECEVBlcm1pc3Npb24gZGVuaWVkBAJiVAkBAmdlAAMJAAECBQJiVAIKQnl0ZVZlY3RvcgQCZ2kFAmJUAwkAAAIIBQJlUw9jYWxsZXJQdWJsaWNLZXkFAmdpBgUCZ2sDCQABAgUCYlQCBFVuaXQDCQAAAggFAmVTBmNhbGxlcgUEdGhpcwYFAmdrCQACAQILTWF0Y2ggZXJyb3IeAmVTAQlyZWJhbGFuY2UACQDOCAIJAQJjQQEJAQJhTQIFBHRoaXMJAQJhZQAJAQJjQQEJAQJhTQIFBHRoaXMJAQJhZgACZVMBIWNhbGN1bGF0ZUFtb3VudE91dEZvclN3YXBSRUFET05MWQMCZ2wCZ20CZ24EAmdvAwkAAAIFAmdtBwQCZ3AJAQJhTQIFBHRoaXMJAQJhZgAEAmdxCQECYU0CBQR0aGlzCQECYWUACQCUCgIFAmdwBQJncQQCZ3AJAQJhTQIFBHRoaXMJAQJhZQAEAmdxCQECYU0CBQR0aGlzCQECYWYACQCUCgIFAmdwBQJncQQCZ3AIBQJnbwJfMQQCZ3EIBQJnbwJfMgQCZ3IJAQJiSgEFAmdxBAJncwkBAmJKAQUCZ3AEAmd0CQBrAwUCZ3MFAmdsCQBkAgUCZ3IFAmdsBAJndQkAuQICCQC2AgEFAmdyCQC2AgEFAmdzBAJndgkAuQICCQC3AgIJALcCAgkAtgIBCQECYkoBBQJncQkAtgIBBQJnbAkAtgIBBQJnbgkAuAICCQC2AgEJAQJiSgEFAmdwCQC2AgEFAmd0BAJndwMJAMACAgUCZ3YFAmd1BgkAAgECFG5ldyBLIGlzIGZld2VyIGVycm9yAwkAAAIFAmd3BQJndwkAlAoCBQNuaWwFAmd0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmVTASZjYWxjdWxhdGVBbW91bnRPdXRGb3JTd2FwQW5kU2VuZFRva2VucwUCZ2wCZ20CZ3gCZ3kCZ24EAmd6CgACYVcJAPwHBAUCYVQCF2dldFN3YXBDb250cmFjdFJFQURPTkxZBQNuaWwFA25pbAMJAAECBQJhVwIGU3RyaW5nBQJhVwkAAgEJAKwCAgkAAwEFAmFXAhsgY291bGRuJ3QgYmUgY2FzdCB0byBTdHJpbmcEAmZNCQDMCAIDCQBnAggJAQV2YWx1ZQEJAJEDAggFAmVTCHBheW1lbnRzAAAGYW1vdW50BQJnbAYJAQJhUQECDFdyb25nIGFtb3VudAkAzAgCAwkAAAIIBQJlUwZjYWxsZXIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAmd6BgkBAmFRAQIRUGVybWlzc2lvbiBkZW5pZWQFA25pbAMJAAACBQJmTQUCZk0EAmVUCQEFdmFsdWUBCQCRAwIIBQJlUwhwYXltZW50cwAABAJncQkBAmJmAQgFAmVUB2Fzc2V0SWQEAmdwAwkAAAIFAmdtBwkBAmFNAgUEdGhpcwkBAmFmAAkBAmFNAgUEdGhpcwkBAmFlAAQCZ3IJAGUCCQECYkoBBQJncQgJAQV2YWx1ZQEJAJEDAggFAmVTCHBheW1lbnRzAAAGYW1vdW50BAJncwkBAmJKAQUCZ3AEAmd0CQBrAwUCZ3MFAmdsCQBkAgUCZ3IFAmdsBAJndQkAuQICCQC2AgEFAmdyCQC2AgEFAmdzBAJndgkAuQICCQC3AgIJALYCAQkBAmJKAQUCZ3EJALYCAQUCZ24JALgCAgkAtgIBCQECYkoBBQJncAkAtgIBBQJndAQCZ3cDCQDAAgIFAmd2BQJndQYJAAIBAhRuZXcgSyBpcyBmZXdlciBlcnJvcgMJAAACBQJndwUCZ3cEAmdBAwkAZwIFAmd0BQJneAYJAAIBAixFeGNoYW5nZSByZXN1bHQgaXMgZmV3ZXIgY29pbnMgdGhhbiBleHBlY3RlZAMJAAACBQJnQQUCZ0EEAmdCCQECY0EBBQJncQMJAAACBQJnQgUCZ0IEAmdDCQECY0gCBQJncAUCZ3QDCQAAAgUCZ0MFAmdDCQCUCgIJAM4IAgkAzggCBQJnQwUCZ0IJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUCZ3kFAmd0CQECYmQBBQJncAUDbmlsBQJndAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJlUwEKc2V0TWFuYWdlcgECZ0QEAmdFCQECZ2oBBQJlUwMJAAACBQJnRQUCZ0UEAmdGCQDZBAEFAmdEAwkAAAIFAmdGBQJnRgkAzAgCCQELU3RyaW5nRW50cnkCCQEBVgAFAmdEBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZVMBDmNvbmZpcm1NYW5hZ2VyAAQCZ0cJAQJnZwAEAmdIAwkBCWlzRGVmaW5lZAEFAmdHBgkAAgECEk5vIHBlbmRpbmcgbWFuYWdlcgMJAAACBQJnSAUCZ0gEAmdJAwkAAAIIBQJlUw9jYWxsZXJQdWJsaWNLZXkJAQV2YWx1ZQEFAmdHBgkAAgECG1lvdSBhcmUgbm90IHBlbmRpbmcgbWFuYWdlcgMJAAACBQJnSQUCZ0kJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAVUACQDYBAEJAQV2YWx1ZQEFAmdHCQDMCAIJAQtEZWxldGVFbnRyeQEJAQFWAAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmVTAQNwdXQCAmRHAmdKAwkAZgIAAAUCZEcJAAIBAiBJbnZhbGlkIHNsaXBwYWdlVG9sZXJhbmNlIHBhc3NlZAQCZVkJAQJlVgMFAmVTBQJkRwYEAmVpCAUCZVkCXzIEAmRuCAUCZVkCXzcEAmRFCAUCZVkCXzkEAmVqCAUCZVkDXzEwBAJlawgFAmVZA18xMQQCZ0sIBQJlWQNfMTIEAmdMCAUCZVkDXzEzBAJlVwkAtgIBCAkBBXZhbHVlAQkAkQMCCAUCZVMIcGF5bWVudHMAAAZhbW91bnQEAmVYCQC2AgEICQEFdmFsdWUBCQCRAwIIBQJlUwhwYXltZW50cwABBmFtb3VudAQCZXoJAQJlcwMFAmVXBQJlWAkAtgIBAAADCQAAAgUCZXoFAmV6BAJmYQkA/AcEBQJhVAIEZW1pdAkAzAgCBQJlaQUDbmlsBQNuaWwDCQAAAgUCZmEFAmZhBAJmYgQCYlQFAmZhAwkAAQIFAmJUAgdBZGRyZXNzBAJmYwUCYlQJAPwHBAUCZmMCBGVtaXQJAMwIAgUCZWkFA25pbAUDbmlsBQR1bml0AwkAAAIFAmZiBQJmYgQCZ00DCQBmAgUCZWoAAAkA/AcEBQJidAIDcHV0BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmdLBQJlagUDbmlsBQNuaWwDCQAAAgUCZ00FAmdNBAJnTgMJAGYCBQJlawAACQD8BwQFAmJ0AgNwdXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCZ0wFAmVrBQNuaWwFA25pbAMJAAACBQJnTgUCZ04EAmdPAwUCZ0oEAmdQCQD8BwQFAmJzAgVzdGFrZQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJkbgUCZWkFA25pbAMJAAACBQJnUAUCZ1AFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUCZVMGY2FsbGVyBQJlaQUCZG4FA25pbAQCZ1EJAQJlQQMAAAAAAAADCQAAAgUCZ1EFAmdRBAJlcggFAmdRAl8yBAJnUggFAmdRAl8xBAJnUwkBAmVFAgUCZXoFAmVyAwkAAAIFAmdTBQJnUwQCZ1QJAPwHBAUEdGhpcwIJcmViYWxhbmNlBQNuaWwFA25pbAMJAAACBQJnVAUCZ1QJAM4IAgkAzggCBQJkRQUCZ08FAmdSCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmVTAQpwdXRGb3JGcmVlAQJnVQMJAGYCAAAFAmdVCQACAQIUSW52YWxpZCB2YWx1ZSBwYXNzZWQEAmVZCQECZVYDBQJlUwUCZ1UHBAJkRQgFAmVZAl85BAJlVwkAtgIBCAkBBXZhbHVlAQkAkQMCCAUCZVMIcGF5bWVudHMAAAZhbW91bnQEAmVYCQC2AgEICQEFdmFsdWUBCQCRAwIIBQJlUwhwYXltZW50cwABBmFtb3VudAQCZXoJAQJlcwMFAmVXBQJlWAkAtgIBAAADCQAAAgUCZXoFAmV6BAJnVgkBAmVBAwAAAAAAAAQCZ1IIBQJnVgJfMQQCZXIIBQJnVgJfMgQCZ1MJAQJlRQIFAmV6BQJlcgMJAAACBQJnUwUCZ1MJAM4IAgUCZEUFAmdSCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmVTAQlwdXRPbmVUa24CAmdXAmdYBAJnWQoAAmFXCQD8BwQFAmFUAihpc1Bvb2xPbmVUb2tlbk9wZXJhdGlvbnNEaXNhYmxlZFJFQURPTkxZCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQNuaWwDCQABAgUCYVcCB0Jvb2xlYW4FAmFXCQACAQkArAICCQADAQUCYVcCHCBjb3VsZG4ndCBiZSBjYXN0IHRvIEJvb2xlYW4EAmdaAwMDCQECYVkABgkAAAIFAmJsBQFsBgkAAAIFAmJsBQFuBgUCZ1kEAmZNCQDMCAIDAwkBASEBBQJnWgYJAQJnaAEFAmVTBgkBAmFRAQIhcHV0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluCQDMCAIDCQAAAgkAkAMBCAUCZVMIcGF5bWVudHMAAQYJAQJhUQECHmV4YWN0bHkgMSBwYXltZW50IGFyZSBleHBlY3RlZAUDbmlsAwkAAAIFAmZNBQJmTQQCaGEJAJEDAggFAmVTCHBheW1lbnRzAAAEAmZoCAUCaGEHYXNzZXRJZAQCZmcIBQJoYQZhbW91bnQEAmV6AwkAAAIFAmZoBQJibgkBAmVzAwkAtgIBBQJmZwkAtgIBAAAJALYCAQAAAwkAAAIFAmZoBQJibwkBAmVzAwkAtgIBAAAJALYCAQUCZmcJALYCAQAACQECYVEBAh5wYXltZW50IGFzc2V0IGlzIG5vdCBzdXBwb3J0ZWQDCQAAAgUCZXoFAmV6BAJhYggFAmVTBmNhbGxlcgQCYWMIBQJlUw10cmFuc2FjdGlvbklkBAJoYgkBAmZmBAUCZmcFAmZoBQJhYgUCYWMDCQAAAgUCaGIFAmhiBAJmbAgFAmhiAl81BAJoYwgFAmhiAl80BAJmZQgFAmhiAl8zBAJlbAgFAmhiAl8yBAJoZAgFAmhiAl8xBAJoZQMDCQBmAgUCZ1cAAAkAZgIFAmdXBQJoZAcJAQJhUQEJALkJAgkAzAgCAh9hbW91bnQgdG8gcmVjZWl2ZSBpcyBsZXNzIHRoYW4gCQDMCAIJAKQDAQUCZ1cFA25pbAIABQJoZAQCZmEJAQJlWgEFAmhlAwkAAAIFAmZhBQJmYQQCZ08DBQJnWAQCaGYJAPwHBAUCYnMCBXN0YWtlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmJtBQJoZQUDbmlsAwkAAAIFAmhmBQJoZgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQJlUwZjYWxsZXIFAmhlBQJibQUDbmlsBAJoZwMJAGYCBQJmZQAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAmFVBQJmZQUCZmgFA25pbAUDbmlsBAJoaAMJAAACBQR0aGlzBQJhVQkAlAoCAAAAAAMFAmZsCQCUCgIJAQEtAQUCZmUAAAkAlAoCAAAJAQEtAQUCZmUEAmVCCAUCaGgCXzEEAmVDCAUCaGgCXzIEAmhpCQECZUEDBQJlQgUCZUMAAAQCZ1IIBQJoaQJfMQQCZXIIBQJoaQJfMgQCZUwJAQV2YWx1ZQEJAKIIAQUCYWoEAmdTCQECZUUCBQJlegUCZXIDCQAAAgUCZ1MFAmdTBAJnVAkA/AcEBQR0aGlzAglyZWJhbGFuY2UFA25pbAUDbmlsAwkAAAIFAmdUBQJnVAkAlAoCCQDOCAIJAM4IAgkAzggCBQJlbAUCZ08FAmhnBQJnUgUCaGUJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZVMBEXB1dE9uZVRrblJFQURPTkxZAgJmaAJmZwQCaGoJAQJmZgQFAmZnCQECYmQBBQJmaAUEdW5pdAUEdW5pdAQCaGQIBQJoagJfMQQCZWwIBQJoagJfMgQCZmUIBQJoagJfMwQCaGMIBQJoagJfNAQCZmwIBQJoagJfNQkAlAoCBQNuaWwJAJUKAwUCaGQFAmZlBQJoYwJlUwEJZ2V0T25lVGtuAgJoawJnVwQCZ1kKAAJhVwkA/AcEBQJhVAIoaXNQb29sT25lVG9rZW5PcGVyYXRpb25zRGlzYWJsZWRSRUFET05MWQkAzAgCCQClCAEFBHRoaXMFA25pbAUDbmlsAwkAAQIFAmFXAgdCb29sZWFuBQJhVwkAAgEJAKwCAgkAAwEFAmFXAhwgY291bGRuJ3QgYmUgY2FzdCB0byBCb29sZWFuBAJobAMDCQECYVkABgkAAAIFAmJsBQFuBgUCZ1kEAmZNCQDMCAIDAwkBASEBBQJobAYJAQJnaAEFAmVTBgkBAmFRAQIhZ2V0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluCQDMCAIDCQAAAgkAkAMBCAUCZVMIcGF5bWVudHMAAQYJAQJhUQECHmV4YWN0bHkgMSBwYXltZW50IGFyZSBleHBlY3RlZAUDbmlsAwkAAAIFAmZNBQJmTQQCZkwJAQJiZAEFAmhrBAJoYQkAkQMCCAUCZVMIcGF5bWVudHMAAAQCZmgIBQJoYQdhc3NldElkBAJmdAgFAmhhBmFtb3VudAQCZXoJAQJlcwMJALYCAQAACQC2AgEAAAkAtgIBAAADCQAAAgUCZXoFAmV6BAJhYggFAmVTBmNhbGxlcgQCYWMIBQJlUw10cmFuc2FjdGlvbklkBAJobQkBAmZLBQUCZkwFAmZ0BQJmaAUCYWIFAmFjAwkAAAIFAmhtBQJobQQCZk4IBQJobQJfNQQCaGMIBQJobQJfNAQCZmUIBQJobQJfMwQCZWwIBQJobQJfMgQCaG4IBQJobQJfMQQCYlcDAwkAZgIFAmdXAAAJAGYCBQJnVwUCaG4HCQECYVEBCQC5CQIJAMwIAgIfYW1vdW50IHRvIHJlY2VpdmUgaXMgbGVzcyB0aGFuIAkAzAgCCQCkAwEFAmdXBQNuaWwCAAUCaG4EAmhvCQD8BwQFAmFUAgRidXJuCQDMCAIFAmZ0BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmZoBQJmdAUDbmlsAwkAAAIFAmhvBQJobwQCZ0MJAQJjSAIFAmhrCQBkAgUCYlcJAJYDAQkAzAgCAAAJAMwIAgUCZmUFA25pbAQCaHAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCYWIFAmJXBQJmTAUDbmlsBAJoZwMJAGYCBQJmZQAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAmFVBQJmZQUCZkwFA25pbAUDbmlsBAJocQQCaHIDCQAAAgUEdGhpcwUCYVUAAAUCZmUDBQJmTgkAlAoCCQEBLQEJAGQCBQJiVwUCaHIAAAkAlAoCAAAJAQEtAQkAZAIFAmJXBQJocgQCZUIIBQJocQJfMQQCZUMIBQJocQJfMgQCaHMJAQJlQQMFAmVCBQJlQwAABAJnUggFAmhzAl8xBAJlcggFAmhzAl8yBAJnUwkBAmVFAgUCZXoFAmVyAwkAAAIFAmdTBQJnUwkAlAoCCQDOCAIJAM4IAgkAzggCCQDOCAIFAmVsBQJnQwUCaHAFAmhnBQJnUgUCYlcJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZVMBEWdldE9uZVRrblJFQURPTkxZAgJmTAJmdAQCaHQJAQJmSwUJAQJiZAEFAmZMBQJmdAUCYm0FBHVuaXQFBHVuaXQEAmhuCAUCaHQCXzEEAmVsCAUCaHQCXzIEAmZlCAUCaHQCXzMEAmhjCAUCaHQCXzQEAmZOCAUCaHQCXzUJAJQKAgUDbmlsCQCVCgMFAmhuBQJmZQUCaGMCZVMBE3Vuc3Rha2VBbmRHZXRPbmVUa24DAmh1AmhrAmdXBAJnWQoAAmFXCQD8BwQFAmFUAihpc1Bvb2xPbmVUb2tlbk9wZXJhdGlvbnNEaXNhYmxlZFJFQURPTkxZCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQNuaWwDCQABAgUCYVcCB0Jvb2xlYW4FAmFXCQACAQkArAICCQADAQUCYVcCHCBjb3VsZG4ndCBiZSBjYXN0IHRvIEJvb2xlYW4EAmhsAwMJAQJhWQAGCQAAAgUCYmwFAW4GBQJnWQQCZk0JAMwIAgMDCQEBIQEFAmhsBgkBAmdoAQUCZVMGCQECYVEBAiFnZXQgb3BlcmF0aW9uIGlzIGJsb2NrZWQgYnkgYWRtaW4JAMwIAgMJAAACCQCQAwEIBQJlUwhwYXltZW50cwAABgkBAmFRAQIYbm8gcGF5bWVudHMgYXJlIGV4cGVjdGVkBQNuaWwDCQAAAgUCZk0FAmZNBAJmTAkBAmJkAQUCaGsEAmFiCAUCZVMGY2FsbGVyBAJhYwgFAmVTDXRyYW5zYWN0aW9uSWQEAmV6CQECZXMDCQC2AgEAAAkAtgIBAAAJALYCAQAAAwkAAAIFAmV6BQJlegQCaHYJAPwHBAUCYnMCB3Vuc3Rha2UJAMwIAgkA2AQBBQJibQkAzAgCBQJodQUDbmlsBQNuaWwDCQAAAgUCaHYFAmh2BAJodwkBAmZLBQUCZkwFAmh1BQJibQUCYWIFAmFjAwkAAAIFAmh3BQJodwQCZk4IBQJodwJfNQQCaGMIBQJodwJfNAQCZmUIBQJodwJfMwQCZWwIBQJodwJfMgQCaG4IBQJodwJfMQQCYlcDAwkAZgIFAmdXAAAJAGYCBQJnVwUCaG4HCQECYVEBCQC5CQIJAMwIAgIfYW1vdW50IHRvIHJlY2VpdmUgaXMgbGVzcyB0aGFuIAkAzAgCCQCkAwEFAmdXBQNuaWwCAAUCaG4EAmhvCQD8BwQFAmFUAgRidXJuCQDMCAIFAmh1BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmJtBQJodQUDbmlsAwkAAAIFAmhvBQJobwQCZ0MJAQJjSAIFAmhrCQBkAgUCYlcJAJYDAQkAzAgCAAAJAMwIAgUCZmUFA25pbAQCaHAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAmVTBmNhbGxlcgUCYlcFAmZMBQNuaWwEAmhnAwkAZgIFAmZlAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCYVUFAmZlBQJmTAUDbmlsBQNuaWwEAmh4BAJocgMJAAACBQR0aGlzBQJhVQAABQJmZQMFAmZOCQCUCgIJAQEtAQkAZAIFAmJXBQJocgAACQCUCgIAAAkBAS0BCQBkAgUCYlcFAmhyBAJlQggFAmh4Al8xBAJlQwgFAmh4Al8yBAJoeQkBAmVBAwUCZUIFAmVDAAAEAmdSCAUCaHkCXzEEAmVyCAUCaHkCXzIEAmdTCQECZUUCBQJlegUCZXIDCQAAAgUCZ1MFAmdTCQCUCgIJAM4IAgkAzggCCQDOCAIJAM4IAgUCZWwFAmdDBQJocAUCaGcFAmdSBQJiVwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJlUwEDZ2V0AAQCZFcJAQJlUgEFAmVTBAJkQwgFAmRXAl8xBAJkRAgFAmRXAl8yBAJlVQgFAmRXAl8zBAJkbAgFAmRXAl80BAJkRQgFAmRXAl81BAJnQwkBAmNNAgUCZEMFAmREBAJlegkBAmVzAwkAtgIBAAAJALYCAQAACQC2AgEAAAMJAAACBQJlegUCZXoEAmh6CQD8BwQFAmFUAgRidXJuCQDMCAIFAmVVBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmRsBQJlVQUDbmlsAwkAAAIFAmh6BQJoegQCaEEJAQJlQQMJAQEtAQUCZEMJAQEtAQUCZEQAAAQCZ1IIBQJoQQJfMQQCZXIIBQJoQQJfMgQCZ1MJAQJlRQIFAmV6BQJlcgMJAAACBQJnUwUCZ1MJAM4IAgkAzggCBQJnQwUCZEUFAmdSCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmVTAQlnZXROb0xlc3MCAmhCAmhDBAJkVwkBAmVSAQUCZVMEAmRDCAUCZFcCXzEEAmRECAUCZFcCXzIEAmVVCAUCZFcCXzMEAmRsCAUCZFcCXzQEAmRFCAUCZFcCXzUDCQBmAgUCaEIFAmRDCQACAQkArAICCQCsAgIJAKwCAgIcbm9MZXNzVGhlbkFtdEFzc2V0IGZhaWxlZDogIAkApAMBBQJkQwIDIDwgCQCkAwEFAmhCAwkAZgIFAmhDBQJkRAkAAgEJAKwCAgkArAICCQCsAgICHW5vTGVzc1RoZW5QcmljZUFzc2V0IGZhaWxlZDogCQCkAwEFAmREAgMgPCAJAKQDAQUCaEMEAmdDCQECY00CBQJkQwUCZEQEAmV6CQECZXMDCQC2AgEAAAkAtgIBAAAJALYCAQAAAwkAAAIFAmV6BQJlegQCaHoJAPwHBAUCYVQCBGJ1cm4JAMwIAgUCZVUFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCZGwFAmVVBQNuaWwDCQAAAgUCaHoFAmh6BAJoRAkBAmVBAwkBAS0BBQJkQwkBAS0BBQJkRAAABAJnUggFAmhEAl8xBAJlcggFAmhEAl8yBAJnUwkBAmVFAgUCZXoFAmVyAwkAAAIFAmdTBQJnUwkAzggCCQDOCAIFAmdDBQJkRQUCZ1IJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZVMBDXVuc3Rha2VBbmRHZXQBAmJXBAJoRQMJAQIhPQIJAJADAQgFAmVTCHBheW1lbnRzAAAJAAIBAhhObyBwYXltZW50cyBhcmUgZXhwZWN0ZWQGAwkAAAIFAmhFBQJoRQQCZGEJAQJiYQAEAmRuCQDZBAEJAJEDAgUCZGEFAXEEAmV6CQECZXMDCQC2AgEAAAkAtgIBAAAJALYCAQAAAwkAAAIFAmV6BQJlegQCaHYJAPwHBAUCYnMCB3Vuc3Rha2UJAMwIAgkA2AQBBQJkbgkAzAgCBQJiVwUDbmlsBQNuaWwDCQAAAgUCaHYFAmh2BAJkVwkBAmRqBAkA2AQBCAUCZVMNdHJhbnNhY3Rpb25JZAkA2AQBBQJkbgUCYlcIBQJlUwZjYWxsZXIEAmRDCAUCZFcCXzEEAmRECAUCZFcCXzIEAmRxCQENcGFyc2VJbnRWYWx1ZQEIBQJkVwJfOQQCZEUIBQJkVwNfMTAEAmdDCQECY00CBQJkQwUCZEQEAmhGAwMJAQJhWQAGCQAAAgUCZHEFAW4JAAIBCQCsAgICLEdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbi4gU3RhdHVzID0gCQCkAwEFAmRxBgMJAAACBQJoRgUCaEYEAmh6CQD8BwQFAmFUAgRidXJuCQDMCAIFAmJXBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmRuBQJiVwUDbmlsAwkAAAIFAmh6BQJoegQCaEcJAQJlQQMJAQEtAQUCZEMJAQEtAQUCZEQAAAQCZ1IIBQJoRwJfMQQCZXIIBQJoRwJfMgQCZ1MJAQJlRQIFAmV6BQJlcgMJAAACBQJnUwUCZ1MJAM4IAgkAzggCBQJnQwUCZEUFAmdSCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmVTARN1bnN0YWtlQW5kR2V0Tm9MZXNzAwJodQJoSAJoQwQCaGwDCQECYVkABgkAAAIFAmJsBQFuBAJmTQkAzAgCAwkBASEBBQJobAYJAAIBAiFnZXQgb3BlcmF0aW9uIGlzIGJsb2NrZWQgYnkgYWRtaW4JAMwIAgMJAAACCQCQAwEIBQJlUwhwYXltZW50cwAABgkAAgECGG5vIHBheW1lbnRzIGFyZSBleHBlY3RlZAUDbmlsAwkAAAIFAmZNBQJmTQQCZXoJAQJlcwMJALYCAQAACQC2AgEAAAkAtgIBAAADCQAAAgUCZXoFAmV6BAJodgkA/AcEBQJicwIHdW5zdGFrZQkAzAgCCQDYBAEFAmJtCQDMCAIFAmh1BQNuaWwFA25pbAMJAAACBQJodgUCaHYEAmRXCQECZGoECQDYBAEIBQJlUw10cmFuc2FjdGlvbklkCQDYBAEFAmJtBQJodQgFAmVTBmNhbGxlcgQCZEMIBQJkVwJfMQQCZEQIBQJkVwJfMgQCZEUIBQJkVwNfMTAEAmdDCQECY00CBQJkQwUCZEQEAmhJCQDMCAIDCQBnAgUCZEMFAmhIBgkAAgEJALkJAgkAzAgCAixhbW91bnQgYXNzZXQgYW1vdW50IHRvIHJlY2VpdmUgaXMgbGVzcyB0aGFuIAkAzAgCCQCkAwEFAmhIBQNuaWwCAAkAzAgCAwkAZwIFAmREBQJoQwYJAAIBCQC5CQIJAMwIAgIrcHJpY2UgYXNzZXQgYW1vdW50IHRvIHJlY2VpdmUgaXMgbGVzcyB0aGFuIAkAzAgCCQCkAwEFAmhDBQNuaWwCAAUDbmlsAwkAAAIFAmhJBQJoSQQCaHoJAPwHBAUCYVQCBGJ1cm4JAMwIAgUCaHUFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCYm0FAmh1BQNuaWwDCQAAAgUCaHoFAmh6BAJoSgkBAmVBAwkBAS0BBQJkQwkBAS0BBQJkRAAABAJnUggFAmhKAl8xBAJlcggFAmhKAl8yBAJnUwkBAmVFAgUCZXoFAmVyAwkAAAIFAmdTBQJnUwkAzggCCQDOCAIFAmdDBQJkRQUCZ1IJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZVMBCGFjdGl2YXRlAgJoSwJoTAMJAQIhPQIJAKUIAQgFAmVTBmNhbGxlcgkApQgBBQJhVAkAAgECEnBlcm1pc3Npb25zIGRlbmllZAkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhZQAFAmhLCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhZgAFAmhMBQNuaWwCB3N1Y2Nlc3MCZVMBCnJlZnJlc2hLTHAABAJoTQkBC3ZhbHVlT3JFbHNlAgkAnwgBBQJhawAABAJoTgMJAGcCCQBlAgUGaGVpZ2h0BQJoTQUCYW4FBHVuaXQJAQJhUQEJALkJAgkAzAgCCQCkAwEFAmFuCQDMCAICLyBibG9ja3MgaGF2ZSBub3QgcGFzc2VkIHNpbmNlIHRoZSBwcmV2aW91cyBjYWxsBQNuaWwCAAMJAAACBQJoTgUCaE4EAmVMCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKgDAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQJhagIBMAkBAmFTAQILaW52YWxpZCBrTHAEAmhPCQECZUEDAAAAAAAABAJoUAgFAmhPAl8xBAJlcggFAmhPAl8yBAJlRAMJAQIhPQIFAmVMBQJlcgUCaFAJAQJhUQECEm5vdGhpbmcgdG8gcmVmcmVzaAkAlAoCBQJlRAkApgMBBQJlcgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJlUwEcZ2V0UG9vbENvbmZpZ1dyYXBwZXJSRUFET05MWQAJAJQKAgUDbmlsCQECYmEAAmVTARxnZXRBY2NCYWxhbmNlV3JhcHBlclJFQURPTkxZAQJhcAkAlAoCBQNuaWwJAQJiSgEFAmFwAmVTARljYWxjUHJpY2VzV3JhcHBlclJFQURPTkxZAwJjVQJjVgJjWgQCZGkJAQJjWQMFAmNVBQJjVgUCY1oJAJQKAgUDbmlsCQDMCAIJAKYDAQkAkQMCBQJkaQAACQDMCAIJAKYDAQkAkQMCBQJkaQABCQDMCAIJAKYDAQkAkQMCBQJkaQACBQNuaWwCZVMBFHRvWDE4V3JhcHBlclJFQURPTkxZAgFFAUYJAJQKAgUDbmlsCQCmAwEJAQFEAgUBRQUBRgJlUwEWZnJvbVgxOFdyYXBwZXJSRUFET05MWQIBSQFKCQCUCgIFA25pbAkBAUgCCQCnAwEFAUkFAUoCZVMBHmNhbGNQcmljZUJpZ0ludFdyYXBwZXJSRUFET05MWQICYk4CYk8JAJQKAgUDbmlsCQCmAwEJAQJiTQIJAKcDAQUCYk4JAKcDAQUCYk8CZVMBI2VzdGltYXRlUHV0T3BlcmF0aW9uV3JhcHBlclJFQURPTkxZCQJkawJkRwJkSAJkSQJkSgJkSwJhYgJkTAJkTQkAlAoCBQNuaWwJAQJkRgkFAmRrBQJkRwUCZEgFAmRJBQJkSgUCZEsFAmFiBQJkTAUCZE0CZVMBI2VzdGltYXRlR2V0T3BlcmF0aW9uV3JhcHBlclJFQURPTkxZBAJkawJkbAJkbQJhYgQCZFcJAQJkagQFAmRrBQJkbAUCZG0JARFAZXh0ck5hdGl2ZSgxMDYyKQEFAmFiCQCUCgIFA25pbAkAnAoKCAUCZFcCXzEIBQJkVwJfMggFAmRXAl8zCAUCZFcCXzQIBQJkVwJfNQgFAmRXAl82CAUCZFcCXzcJAKYDAQgFAmRXAl84CAUCZFcCXzkIBQJkVwNfMTACZVMBDXN0YXRzUkVBRE9OTFkABAJkYQkBAmJhAAQCZG4JANkEAQkAkQMCBQJkYQUBcQQCaFEJAJEDAgUCZGEFAXIEAmhSCQCRAwIFAmRhBQFzBAJkUAkAkQMCBQJkYQUBdgQCZFEJAJEDAgUCZGEFAXcEAmRiCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCZGEFAXQEAmRjCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCZGEFAXUEAmhTCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmRuCQCsAgIJAKwCAgIGQXNzZXQgCQDYBAEFAmRuAg4gZG9lc24ndCBleGlzdAhxdWFudGl0eQQCaFQJAQJiSgEFAmhRBAJoVQkBAmJKAQUCaFIEAmhWAwkAAAIFAmhTAAAJAMwIAgUBZQkAzAgCBQFlCQDMCAIFAWUFA25pbAkBAmNZAwUCaFQFAmhVBQJoUwQCZHgAAAQCaFcJAQFIAgkAkQMCBQJoVgABBQFiBAJoWAkBAUgCCQCRAwIFAmhWAAIFAWIEAmhZCQEFdmFsdWUBCQCaCAIFAmFUCQECYUQBCQClCAEFBHRoaXMJAJQKAgUDbmlsCQC5CQIJAMwIAgIOJWQlZCVkJWQlZCVkJWQJAMwIAgkApAMBBQJoVAkAzAgCCQCkAwEFAmhVCQDMCAIJAKQDAQUCaFMJAMwIAgkApAMBBQJkeAkAzAgCCQCkAwEFAmhXCQDMCAIJAKQDAQUCaFgJAMwIAgkApAMBBQJoWQUDbmlsBQFqAmVTASBldmFsdWF0ZVB1dEJ5QW1vdW50QXNzZXRSRUFET05MWQECZEgEAmRhCQECYmEABAJkbgkA2QQBCQCRAwIFAmRhBQFxBAJkTgkAkQMCBQJkYQUBcgQCZG8JANkEAQUCZE4EAmRPCQCRAwIFAmRhBQFzBAJkcAkA2QQBBQJkTwQCZGIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJkYQUBdAQCZGMJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJkYQUBdQQCZHEJAJEDAgUCZGEFAXAEAmhTCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmRuCQCsAgIJAKwCAgIGQXNzZXQgCQDYBAEFAmRuAg4gZG9lc24ndCBleGlzdAhxdWFudGl0eQQCaFQJAQJiSgEFAmROBAJoVQkBAmJKAQUCZE8EAmNXCQEBRAIFAmhUBQJkYgQCY1gJAQFEAgUCaFUFAmRjBAJkdwMJAAACBQJoUwAABQFlCQECYk0CBQJjWAUCY1cEAmRUCQEBRAIFAmRIBQJkYgQCZFUJALwCAwUCZFQFAmR3BQFkBAJkSgkBAUgCBQJkVQUCZGMEAmVZCQECZEYJAgAAoMIeBQJkSAUCZG8FAmRKBQJkcAIABgcEAmVlCAUCZVkCXzEEAmhaCAUCZVkCXzMEAmRzCAUCZVkCXzQEAmR1CAUCZVkCXzUEAmRyCAUCZVkCXzYJAJQKAgUDbmlsCQC5CQIJAMwIAgIQJWQlZCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFAmVlCQDMCAIJAKQDAQkBAUgCBQJkdwUBYgkAzAgCCQCkAwEFAmRzCQDMCAIJAKQDAQUCZHUJAMwIAgkApAMBBQJkcgkAzAgCBQJkcQkAzAgCCQCkAwEFAmRICQDMCAIJAKQDAQUCZEoFA25pbAUBagJlUwEfZXZhbHVhdGVQdXRCeVByaWNlQXNzZXRSRUFET05MWQECZEoEAmRhCQECYmEABAJkbgkA2QQBCQCRAwIFAmRhBQFxBAJkTgkAkQMCBQJkYQUBcgQCZG8JANkEAQUCZE4EAmRPCQCRAwIFAmRhBQFzBAJkcAkA2QQBBQJkTwQCZGIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJkYQUBdAQCZGMJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJkYQUBdQQCZHEJAJEDAgUCZGEFAXAEAmhTCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmRuCQCsAgIJAKwCAgIGQXNzZXQgCQDYBAEFAmRuAg4gZG9lc24ndCBleGlzdAhxdWFudGl0eQQCaWEJAQJiSgEFAmROBAJpYgkBAmJKAQUCZE8EAmljCQEBRAIFAmlhBQJkYgQCaWQJAQFEAgUCaWIFAmRjBAJkdwMJAAACBQJoUwAABQFlCQECYk0CBQJpZAUCaWMEAmRVCQEBRAIFAmRKBQJkYwQCZFQJALwCAwUCZFUFAWQFAmR3BAJkSAkBAUgCBQJkVAUCZGIEAmVZCQECZEYJAgAAoMIeBQJkSAUCZG8FAmRKBQJkcAIABgcEAmVlCAUCZVkCXzEEAmhaCAUCZVkCXzMEAmRzCAUCZVkCXzQEAmR1CAUCZVkCXzUEAmRyCAUCZVkCXzYJAJQKAgUDbmlsCQC5CQIJAMwIAgIQJWQlZCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFAmVlCQDMCAIJAKQDAQkBAUgCBQJkdwUBYgkAzAgCCQCkAwEFAmRzCQDMCAIJAKQDAQUCZHUJAMwIAgkApAMBBQJkcgkAzAgCBQJkcQkAzAgCCQCkAwEFAmRICQDMCAIJAKQDAQUCZEoFA25pbAUBagJlUwETZXZhbHVhdGVHZXRSRUFET05MWQICaWUCaWYEAmRXCQECZGoEAgAFAmllBQJpZgUEdGhpcwQCZEMIBQJkVwJfMQQCZEQIBQJkVwJfMgQCZHMIBQJkVwJfNQQCZHUIBQJkVwJfNgQCZHIIBQJkVwJfNwQCZHgIBQJkVwJfOAQCZHEJAQ1wYXJzZUludFZhbHVlAQgFAmRXAl85CQCUCgIFA25pbAkAuQkCCQDMCAICDiVkJWQlZCVkJWQlZCVkCQDMCAIJAKQDAQUCZEMJAMwIAgkApAMBBQJkRAkAzAgCCQCkAwEFAmRzCQDMCAIJAKQDAQUCZHUJAMwIAgkApAMBBQJkcgkAzAgCCQCmAwEFAmR4CQDMCAIJAKQDAQUCZHEFA25pbAUBagECaWcBAmloAAQCaWkEAmJUCQECZ2UAAwkAAQIFAmJUAgpCeXRlVmVjdG9yBAJnaQUCYlQFAmdpAwkAAQIFAmJUAgRVbml0CAUCaWcPc2VuZGVyUHVibGljS2V5CQACAQILTWF0Y2ggZXJyb3IEAmJUBQJpZwMJAAECBQJiVAIFT3JkZXIEAmVIBQJiVAQCaWoJAQJhWgAEAmlrCQECZUcBBQJlSAQCYUkIBQJpawJfMQQCYUoIBQJpawJfMgQCYUsJAPQDAwgFAmVICWJvZHlCeXRlcwkAkQMCCAUCZUgGcHJvb2ZzAAAIBQJlSA9zZW5kZXJQdWJsaWNLZXkEAmFMCQD0AwMIBQJlSAlib2R5Qnl0ZXMJAJEDAggFAmVIBnByb29mcwABBQJpagMDAwUCYUkFAmFLBwUCYUwHBgkBAmFIBAUCYUkFAmFKBQJhSwUCYUwDCQABAgUCYlQCFFNldFNjcmlwdFRyYW5zYWN0aW9uBAJnZgUCYlQDCQD0AwMIBQJpZwlib2R5Qnl0ZXMJAJEDAggFAmlnBnByb29mcwAABQJpaQYEAmlsCQD2AwEJAQV2YWx1ZQEIBQJnZgZzY3JpcHQEAmltCQDbBAEJAQV2YWx1ZQEJAJ0IAgUCYVQJAQJhRgAEAmluCQDxBwEFBHRoaXMDCQAAAgUCaW0FAmlsCQECIT0CBQJpbgUCaWwHCQD0AwMIBQJpZwlib2R5Qnl0ZXMJAJEDAggFAmlnBnByb29mcwAABQJpaQh2GPI=", "height": 2532780, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: CYT8zDDFnnQk9seZac4F5bdRQaVXrDkohJcamg6sDaaM Next: FhGMw8shRkR4idZMVhJocXEhPo5TBr2GxM25aUBQwJVW Diff:
OldNewDifferences
437437 let cd = fraction(cD, cK, 100)
438438 if ((cd == cd))
439439 then {
440- let cL = max([0, (ar(ap) - cd)])
440+ let cL = (ar(ap) - cd)
441441 if ((cL == cL))
442- then cf(ap, cL, cF, addressFromStringValue(cE), cg, addressFromStringValue(cG))
442+ then if ((0 > cL))
443+ then bV(ap, -(cL), cF, addressFromStringValue(cE))
444+ else cf(ap, cL, cF, addressFromStringValue(cE), cg, addressFromStringValue(cG))
443445 else throw("Strict value is not equal to itself.")
444446 }
445447 else throw("Strict value is not equal to itself.")
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__pendingManagerPublicKey"
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,aJ,aK,aL) = throw((((((((("order validation failed: orderValid=" + toString(aI)) + " (") + aJ) + ")") + " senderValid=") + toString(aK)) + " matcherValid=") + toString(aL)))
172172
173173
174174 func aM (aN,aO) = valueOrErrorMessage(getString(aN, aO), makeString(["mandatory ", toString(aN), ".", aO, " is not defined"], ""))
175175
176176
177177 func aP (aN,aO) = valueOrErrorMessage(getInteger(aN, aO), makeString(["mandatory ", toString(aN), ".", aO, " is not defined"], ""))
178178
179179
180180 func aQ (aR) = throw(makeString(["lp.ride:", aR], " "))
181181
182182
183183 func aS (aR) = makeString(["lp.ride:", aR], " ")
184184
185185
186186 let aT = addressFromStringValue(aM(this, T()))
187187
188188 let aU = addressFromStringValue(aM(aT, aG))
189189
190190 let aV = {
191191 let aW = invoke(aT, "getInFeeREADONLY", [toString(this)], nil)
192192 if ($isInstanceOf(aW, "Int"))
193193 then aW
194194 else throw(($getType(aW) + " couldn't be cast to Int"))
195195 }
196196
197197 let aX = {
198198 let aW = invoke(aT, "getOutFeeREADONLY", [toString(this)], nil)
199199 if ($isInstanceOf(aW, "Int"))
200200 then aW
201201 else throw(($getType(aW) + " couldn't be cast to Int"))
202202 }
203203
204204 func aY () = valueOrElse(getBoolean(aT, aC()), false)
205205
206206
207207 func aZ () = fromBase58String(aM(aT, au()))
208208
209209
210210 func ba () = {
211211 let bb = aM(this, ae())
212212 let bc = aM(this, af())
213213 let az = aP(aT, aA(bc))
214214 let ay = aP(aT, aA(bb))
215215 split(aM(aT, ax(toString(ay), toString(az))), j)
216216 }
217217
218218
219219 func bd (be) = if ((be == i))
220220 then unit
221221 else fromBase58String(be)
222222
223223
224224 func bf (be) = if ((be == unit))
225225 then i
226226 else toBase58String(value(be))
227227
228228
229229 func bg (bh) = $Tuple7(addressFromStringValue(bh[o]), parseIntValue(bh[p]), fromBase58String(bh[q]), bd(bh[r]), bd(bh[s]), parseIntValue(bh[t]), parseIntValue(bh[u]))
230230
231231
232232 let bi = bg(ba())
233233
234234 let bj = bi
235235
236236 let bk = bj._1
237237
238238 let bl = bj._2
239239
240240 let bm = bj._3
241241
242242 let bn = bj._4
243243
244244 let bo = bj._5
245245
246246 let bp = bj._6
247247
248248 let bq = bj._7
249249
250250 func br () = split(aM(aT, at()), j)
251251
252252
253253 let bs = valueOrErrorMessage(addressFromString(br()[B]), "incorrect staking address")
254254
255255 let bt = valueOrErrorMessage(addressFromString(br()[C]), "incorrect staking address")
256256
257257 func bu (bv,bw,bx,by,bz,bA,bB,bC,bD,bE) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(bv), toString(bw), toString(bx), toString(by), toString(bz), toString(bA), toString(bB), toString(bC), toString(bD), toString(bE)], j)
258258
259259
260260 func bF (bG,bH,bI,by,bB,bC) = makeString(["%d%d%d%d%d%d", toString(bG), toString(bH), toString(bI), toString(by), toString(bB), toString(bC)], j)
261261
262262
263263 func bJ (ap) = {
264264 let bK = if ((ap == "WAVES"))
265265 then wavesBalance(this).available
266266 else assetBalance(this, fromBase58String(ap))
267267 let bL = ((bK + ar(ap)) - as(ap))
268268 max([0, bL])
269269 }
270270
271271
272272 func bM (bN,bO) = fraction(bN, d, bO)
273273
274274
275275 func bP (bN,bO,L) = fraction(bN, d, bO, L)
276276
277277
278278 func bQ (bR) = {
279279 let bS = invoke(bR, "getRate", nil, nil)
280280 if ((bS == bS))
281281 then {
282282 let bT = bS
283283 if ($isInstanceOf(bT, "Int"))
284284 then {
285285 let bU = bT
286286 bU
287287 }
288288 else aQ("proxy.getRate() unexpected value")
289289 }
290290 else throw("Strict value is not equal to itself.")
291291 }
292292
293293
294294 func bV (ap,bW,bX,bR) = {
295295 let bY = ar(ap)
296296 if ((bY == bY))
297297 then {
298298 let bZ = as(bX)
299299 if ((bZ == bZ))
300300 then {
301301 let ca = bd(ap)
302302 if ((bW > 0))
303303 then {
304304 let cb = invoke(bR, "deposit", nil, [AttachedPayment(ca, bW)])
305305 if ((cb == cb))
306306 then {
307307 let bT = cb
308308 if ($isInstanceOf(bT, "Int"))
309309 then {
310310 let cc = bT
311311 let cd = (bY + bW)
312312 let ce = (bZ + cc)
313313 [IntegerEntry(ao(ap), cd), IntegerEntry(aq(bX), ce)]
314314 }
315315 else nil
316316 }
317317 else throw("Strict value is not equal to itself.")
318318 }
319319 else nil
320320 }
321321 else throw("Strict value is not equal to itself.")
322322 }
323323 else throw("Strict value is not equal to itself.")
324324 }
325325
326326
327327 func cf (ap,bW,bX,bR,cg,ch) = {
328328 let bY = ar(ap)
329329 if ((bY == bY))
330330 then {
331331 let bZ = as(bX)
332332 if ((bZ == bZ))
333333 then {
334334 let ci = bQ(bR)
335335 if ((ci == ci))
336336 then {
337337 let cj = fraction(cg, bY, bZ)
338338 let ck = bd(bX)
339339 let cl = fraction(cg, bW, cj)
340340 let cm = fraction(cg, bW, ci)
341341 let cn = max([0, (cl - cm)])
342342 if ((cm > 0))
343343 then {
344344 let co = invoke(bR, "withdraw", nil, [AttachedPayment(ck, cm)])
345345 if ((co == co))
346346 then {
347347 let bT = co
348348 if ($isInstanceOf(bT, "Int"))
349349 then {
350350 let cp = bT
351351 let cd = (bY - cp)
352352 let ce = ((bZ - cm) - cn)
353353 [IntegerEntry(ao(ap), cd), IntegerEntry(aq(bX), ce), ScriptTransfer(ch, cn, bd(bX))]
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 else throw("Strict value is not equal to itself.")
366366 }
367367
368368
369369 func cq (ap) = {
370370 let bT = invoke(aT, "getPoolLeaseConfigREADONLY", [toString(this), ap], nil)
371371 if ($isInstanceOf(bT, "(Boolean, Int, Int, String, String, Int, String)"))
372372 then {
373373 let cr = bT
374374 cr
375375 }
376376 else aQ((("[" + ap) + "] getLeaseProxyConfig() error"))
377377 }
378378
379379
380380 func cs (ct,ap,bX,cu,bR,cg,ch) = {
381381 let bY = ar(ap)
382382 if ((bY == bY))
383383 then {
384384 let bZ = as(bX)
385385 if ((bZ == bZ))
386386 then {
387387 let cv = max([0, (bJ(ap) - cu)])
388388 let cw = fraction(ct, cv, 100)
389389 let cx = (bY - cw)
390390 if ((cx == 0))
391391 then nil
392392 else if ((0 > cx))
393393 then {
394394 let cy = -(cx)
395395 bV(ap, cy, bX, bR)
396396 }
397397 else {
398398 let cz = cx
399399 cf(ap, cz, bX, bR, cg, ch)
400400 }
401401 }
402402 else throw("Strict value is not equal to itself.")
403403 }
404404 else throw("Strict value is not equal to itself.")
405405 }
406406
407407
408408 func cA (ap) = {
409409 let cB = cq(ap)
410410 let cC = cB._1
411411 let cD = cB._2
412412 let cu = cB._3
413413 let cE = cB._4
414414 let cF = cB._5
415415 let cg = cB._6
416416 let cG = cB._7
417417 if (cC)
418418 then cs(cD, ap, cF, cu, addressFromStringValue(cE), cg, addressFromStringValue(cG))
419419 else nil
420420 }
421421
422422
423423 func cH (ap,cI) = {
424424 let cJ = cq(ap)
425425 let cC = cJ._1
426426 let cD = cJ._2
427427 let cu = cJ._3
428428 let cE = cJ._4
429429 let cF = cJ._5
430430 let cg = cJ._6
431431 let cG = cJ._7
432432 if (cC)
433433 then {
434434 let cK = max([0, ((bJ(ap) - cI) - cu)])
435435 if ((cK == cK))
436436 then {
437437 let cd = fraction(cD, cK, 100)
438438 if ((cd == cd))
439439 then {
440- let cL = max([0, (ar(ap) - cd)])
440+ let cL = (ar(ap) - cd)
441441 if ((cL == cL))
442- then cf(ap, cL, cF, addressFromStringValue(cE), cg, addressFromStringValue(cG))
442+ then if ((0 > cL))
443+ then bV(ap, -(cL), cF, addressFromStringValue(cE))
444+ else cf(ap, cL, cF, addressFromStringValue(cE), cg, addressFromStringValue(cG))
443445 else throw("Strict value is not equal to itself.")
444446 }
445447 else throw("Strict value is not equal to itself.")
446448 }
447449 else throw("Strict value is not equal to itself.")
448450 }
449451 else nil
450452 }
451453
452454
453455 func cM (cN,cO) = {
454456 let cP = cH(aM(this, ae()), cN)
455457 let cQ = cH(aM(this, af()), cO)
456458 (cP ++ cQ)
457459 }
458460
459461
460462 func cR (cS,cT,cU,cV) = {
461463 let cW = D(cU, cS)
462464 let cX = D(cV, cT)
463465 bM(cX, cW)
464466 }
465467
466468
467469 func cY (cU,cV,cZ) = {
468470 let da = ba()
469471 let db = parseIntValue(da[t])
470472 let dc = parseIntValue(da[u])
471473 let dd = cR(db, dc, cU, cV)
472474 let bO = D(cU, db)
473475 let bN = D(cV, dc)
474476 let de = D(cZ, b)
475477 let df = bM(bO, de)
476478 let dg = bM(bN, de)
477479 [dd, df, dg]
478480 }
479481
480482
481483 func dh (cU,cV,cZ) = {
482484 let di = cY(cU, cV, cZ)
483485 [H(di[0], b), H(di[1], b), H(di[2], b)]
484486 }
485487
486488
487489 func dj (dk,dl,dm,ab) = {
488490 let da = ba()
489491 let dn = da[q]
490492 let do = da[r]
491493 let dp = da[s]
492494 let cS = parseIntValue(da[t])
493495 let cT = parseIntValue(da[u])
494496 let dq = da[p]
495497 let dr = valueOrErrorMessage(assetInfo(fromBase58String(dn)), (("Asset " + dn) + " doesn't exist")).quantity
496498 if ((dn != dl))
497499 then throw("Invalid asset passed.")
498500 else {
499501 let ds = bJ(do)
500502 let dt = D(ds, cS)
501503 let du = bJ(dp)
502504 let dv = D(du, cT)
503505 let dw = bM(dv, dt)
504506 let dx = H(dw, b)
505507 let dy = D(dm, b)
506508 let dz = D(dr, b)
507509 let dA = fraction(dt, dy, dz)
508510 let dB = fraction(dv, dy, dz)
509511 let dC = K(dA, cS, FLOOR)
510512 let dD = K(dB, cT, FLOOR)
511513 let dE = if ((dk == ""))
512514 then nil
513515 else [ScriptTransfer(ab, dC, if ((do == "WAVES"))
514516 then unit
515517 else fromBase58String(do)), ScriptTransfer(ab, dD, if ((dp == "WAVES"))
516518 then unit
517519 else fromBase58String(dp)), StringEntry(ad(toString(ab), dk), bF(dC, dD, dm, dx, height, lastBlock.timestamp)), IntegerEntry(W(), dx), IntegerEntry(X(height, lastBlock.timestamp), dx)]
518520 $Tuple10(dC, dD, do, dp, ds, du, dr, dw, dq, dE)
519521 }
520522 }
521523
522524
523525 func dF (dk,dG,dH,dI,dJ,dK,ab,dL,dM) = {
524526 let da = ba()
525527 let dn = fromBase58String(da[q])
526528 let dN = da[r]
527529 let dO = da[s]
528530 let dP = da[v]
529531 let dQ = da[w]
530532 let db = parseIntValue(da[t])
531533 let dc = parseIntValue(da[u])
532534 let dq = da[p]
533535 let dr = valueOrErrorMessage(assetInfo(dn), (("Asset " + toBase58String(dn)) + " doesn't exist")).quantity
534536 let dR = toBase58String(valueOrElse(dI, fromBase58String("WAVES")))
535537 let dS = toBase58String(valueOrElse(dK, fromBase58String("WAVES")))
536538 if (if ((dN != dR))
537539 then true
538540 else (dO != dS))
539541 then throw("Invalid amt or price asset passed.")
540542 else {
541543 let ds = if (dL)
542544 then bJ(dN)
543545 else (bJ(dN) - dH)
544546 let du = if (dL)
545547 then bJ(dO)
546548 else (bJ(dO) - dJ)
547549 let dT = D(dH, db)
548550 let dU = D(dJ, dc)
549551 let dV = bM(dU, dT)
550552 let dt = D(ds, db)
551553 let dv = D(du, dc)
552554 let dW = if ((dr == 0))
553555 then {
554556 let dw = e
555557 let dX = e
556558 let de = pow((dT * dU), 0, toBigInt(5), 1, 0, DOWN)
557559 $Tuple5(H(de, b), H(dT, db), H(dU, dc), bM((dv + dU), (dt + dT)), dX)
558560 }
559561 else {
560562 let dw = bM(dv, dt)
561563 let dX = fraction(R((dw - dV)), d, dw)
562564 let dY = D(dG, b)
563565 if (if ((dw != e))
564566 then (dX > dY)
565567 else false)
566568 then throw(((("Price slippage " + toString(dX)) + " exceeded the passed limit of ") + toString(dY)))
567569 else {
568570 let dz = D(dr, b)
569571 let dZ = fraction(dT, bP(dv, dt, CEILING), d, CEILING)
570572 let ea = fraction(dU, d, bP(dv, dt, FLOOR), CEILING)
571573 let eb = if ((dZ > dU))
572574 then $Tuple2(ea, dU)
573575 else $Tuple2(dT, dZ)
574576 let ec = eb._1
575577 let ed = eb._2
576578 let de = fraction(dz, ed, dv, FLOOR)
577579 $Tuple5(K(de, b, FLOOR), K(ec, db, CEILING), K(ed, dc, CEILING), dw, dX)
578580 }
579581 }
580582 let ee = dW._1
581583 let ef = dW._2
582584 let eg = dW._3
583585 let dx = H(dW._4, b)
584586 let eh = H(dW._5, b)
585587 if ((0 >= ee))
586588 then throw("Invalid calculations. LP calculated is less than zero.")
587589 else {
588590 let ei = if (!(dM))
589591 then 0
590592 else ee
591593 let ej = (dH - ef)
592594 let ek = (dJ - eg)
593595 let el = [IntegerEntry(W(), dx), IntegerEntry(X(height, lastBlock.timestamp), dx), StringEntry(aa(ab, dk), bu(ef, eg, ei, dx, dG, eh, height, lastBlock.timestamp, ej, ek))]
594596 $Tuple13(ee, ei, dx, ds, du, dr, dn, dq, el, ej, ek, dI, dK)
595597 }
596598 }
597599 }
598600
599601
600602 func em (en,eo,dr) = {
601603 let ep = G(en, toBigInt(bp))
602604 let eq = G(eo, toBigInt(bq))
603605 let er = fraction(pow((ep * eq), 0, toBigInt(5), 1, 18, DOWN), g, dr)
604606 if ((dr == f))
605607 then f
606608 else er
607609 }
608610
609611
610612 func es (et,eu,ev) = {
611613 let ew = (toBigInt(bJ(bf(bn))) - et)
612614 let ex = (toBigInt(bJ(bf(bo))) - eu)
613615 let ey = (toBigInt(value(assetInfo(bm)).quantity) - ev)
614616 let ez = em(ew, ex, ey)
615617 ez
616618 }
617619
618620
619621 func eA (eB,eC,ev) = {
620622 let ew = (bJ(bf(bn)) + eB)
621623 let ex = (bJ(bf(bo)) + eC)
622624 let ey = (value(assetInfo(bm)).quantity + ev)
623625 let er = em(toBigInt(ew), toBigInt(ex), toBigInt(ey))
624626 let eD = [IntegerEntry(ak, height), StringEntry(aj, toString(er))]
625627 $Tuple2(eD, er)
626628 }
627629
628630
629631 func eE (eF,er) = if ((er >= eF))
630632 then true
631633 else aQ(makeString(["updated KLp lower than current KLp", toString(eF), toString(er)], " "))
632634
633635
634636 func eG (eH) = {
635637 let ew = bJ(bf(bn))
636638 let ex = bJ(bf(bo))
637639 let eI = eH.amount
638640 let eJ = fraction(eH.amount, eH.price, b, FLOOR)
639641 let eK = if ((eH.orderType == Buy))
640642 then $Tuple2(eI, -(eJ))
641643 else $Tuple2(-(eI), eJ)
642644 let eB = eK._1
643645 let eC = eK._2
644646 if (if (if (aY())
645647 then true
646648 else (bl == m))
647649 then true
648650 else (bl == n))
649651 then throw("Exchange operations disabled")
650652 else if (if ((eH.assetPair.amountAsset != bn))
651653 then true
652654 else (eH.assetPair.priceAsset != bo))
653655 then throw("Wrong order assets.")
654656 else {
655657 let eL = valueOrErrorMessage(parseBigInt(valueOrElse(getString(this, aj), "0")), aS("invalid kLp"))
656658 let eM = eA(eB, eC, 0)
657659 let eN = eM._1
658660 let eO = eM._2
659661 let eP = (eO >= eL)
660662 let eQ = makeString(["kLp=", toString(eL), " kLpNew=", toString(eO), " amountAssetBalance=", toString(ew), " priceAssetBalance=", toString(ex), " amountAssetBalanceDelta=", toString(eB), " priceAssetBalanceDelta=", toString(eC), " height=", toString(height)], "")
661663 $Tuple2(eP, eQ)
662664 }
663665 }
664666
665667
666668 func eR (eS) = if ((size(eS.payments) != 1))
667669 then throw("exactly 1 payment is expected")
668670 else {
669671 let eT = value(eS.payments[0])
670672 let dl = value(eT.assetId)
671673 let eU = eT.amount
672674 let dW = dj(toBase58String(eS.transactionId), toBase58String(dl), eU, eS.caller)
673675 let dC = dW._1
674676 let dD = dW._2
675677 let dq = parseIntValue(dW._9)
676678 let dE = dW._10
677679 if (if (aY())
678680 then true
679681 else (dq == n))
680682 then throw(("Get operation is blocked by admin. Status = " + toString(dq)))
681683 else $Tuple5(dC, dD, eU, dl, dE)
682684 }
683685
684686
685687 func eV (eS,dG,dM) = if ((size(eS.payments) != 2))
686688 then throw("exactly 2 payments are expected")
687689 else {
688690 let eW = value(eS.payments[0])
689691 let eX = value(eS.payments[1])
690692 let eY = dF(toBase58String(eS.transactionId), dG, eW.amount, eW.assetId, eX.amount, eX.assetId, toString(eS.caller), false, dM)
691693 let dq = parseIntValue(eY._8)
692694 if (if (if (aY())
693695 then true
694696 else (dq == l))
695697 then true
696698 else (dq == n))
697699 then throw(("Put operation is blocked by admin. Status = " + toString(dq)))
698700 else eY
699701 }
700702
701703
702704 func eZ (bW) = {
703705 let fa = invoke(aT, "emit", [bW], nil)
704706 if ((fa == fa))
705707 then {
706708 let fb = {
707709 let bT = fa
708710 if ($isInstanceOf(bT, "Address"))
709711 then {
710712 let fc = bT
711713 invoke(fc, "emit", [bW], nil)
712714 }
713715 else unit
714716 }
715717 if ((fb == fb))
716718 then bW
717719 else throw("Strict value is not equal to itself.")
718720 }
719721 else throw("Strict value is not equal to itself.")
720722 }
721723
722724
723725 func fd (bW,ai) = {
724726 let fe = if ((ai == 0))
725727 then 0
726728 else fraction(bW, ai, b)
727729 $Tuple2((bW - fe), fe)
728730 }
729731
730732
731733 func ff (fg,fh,ab,ac) = {
732734 let fi = (ac == unit)
733735 let fj = bJ(bf(bn))
734736 let fk = bJ(bf(bo))
735737 let fl = if ((fh == bn))
736738 then true
737739 else if ((fh == bo))
738740 then false
739741 else aQ("invalid asset")
740742 let fm = if (fi)
741743 then $Tuple2(fj, fk)
742744 else if (fl)
743745 then $Tuple2((fj - fg), fk)
744746 else $Tuple2(fj, (fk - fg))
745747 let fn = fm._1
746748 let fo = fm._2
747749 let fp = if (fl)
748750 then $Tuple2(fg, 0)
749751 else $Tuple2(0, fg)
750752 let fq = fp._1
751753 let fr = fp._2
752754 let eI = fd(fq, aV)._1
753755 let eJ = fd(fr, aV)._1
754756 let fs = fd(fg, aV)
755757 let ft = fs._1
756758 let fe = fs._2
757759 let fu = (fn + eI)
758760 let fv = (fo + eJ)
759761 let fw = bM(D(fv, bq), D(fu, bp))
760762 let fx = H(fw, b)
761763 let fy = if (fl)
762764 then fn
763765 else fo
764766 let fz = toBigInt(fy)
765767 let fA = toBigInt(valueOrErrorMessage(assetInfo(bm), (("asset " + toBase58String(bm)) + " doesn't exist")).quantity)
766768 let fB = if ((fA > f))
767769 then true
768770 else aQ("initial deposit requires all coins")
769771 if ((fB == fB))
770772 then {
771773 let fC = toBigInt(ft)
772774 let fD = max([0, toInt(((fA * (sqrtBigInt((d + ((fC * d) / fz)), 18, 18, DOWN) - d)) / d))])
773775 let el = if (fi)
774776 then nil
775777 else [IntegerEntry(W(), fx), IntegerEntry(X(height, lastBlock.timestamp), fx), StringEntry(aa(toString(value(ab)), toBase58String(value(ac))), bu(fq, fr, fD, fx, 0, 0, height, lastBlock.timestamp, 0, 0))]
776778 let fE = bM(D(fo, bq), D(fn, bp))
777779 let fF = H(fE, b)
778780 let fG = {
779781 let fH = if (fl)
780782 then $Tuple2(fq, fn)
781783 else $Tuple2(fr, fo)
782784 let bW = fH._1
783785 let fI = fH._2
784786 let fJ = toInt(fraction(fA, toBigInt((bW / 2)), toBigInt(fI)))
785787 fraction((fD - fJ), b, fJ)
786788 }
787789 $Tuple5(fD, el, fe, fG, fl)
788790 }
789791 else throw("Strict value is not equal to itself.")
790792 }
791793
792794
793795 func fK (fL,ft,fh,ab,ac) = {
794796 let fi = (ac == unit)
795797 let da = ba()
796798 let db = parseIntValue(da[t])
797799 let dc = parseIntValue(da[u])
798800 let fM = [if ((fh == bm))
799801 then true
800802 else aQ("invalid lp asset")]
801803 if ((fM == fM))
802804 then {
803805 let fN = if ((fL == bn))
804806 then true
805807 else if ((fL == bo))
806808 then false
807809 else aQ("invalid asset")
808810 let fO = if (fN)
809811 then toBigInt(bJ(bf(bn)))
810812 else toBigInt(bJ(bf(bo)))
811813 let fP = if (fN)
812814 then db
813815 else dc
814816 let fQ = bJ(bf(bn))
815817 let fR = bJ(bf(bo))
816818 let fS = if (fN)
817819 then fQ
818820 else fR
819821 let fT = toBigInt(fS)
820822 let fA = toBigInt(valueOrErrorMessage(assetInfo(bm), (("asset " + toBase58String(bm)) + " doesn't exist")).quantity)
821823 let fU = toBigInt(ft)
822824 let fV = max([0, toInt(((fO * (d - pow((d - ((fU * d) / fA)), 18, h, 0, 18, DOWN))) / d))])
823825 let fW = fd(fV, aX)
824826 let fX = fW._1
825827 let fe = fW._2
826828 let fY = if (fN)
827829 then $Tuple4(fX, 0, (fQ - fV), fR)
828830 else $Tuple4(0, fX, fQ, (fR - fV))
829831 let fZ = fY._1
830832 let ga = fY._2
831833 let gb = fY._3
832834 let gc = fY._4
833835 let fw = bM(D(gc, bq), D(gb, bp))
834836 let fx = H(fw, b)
835837 let el = if (fi)
836838 then nil
837839 else [StringEntry(ad(toString(value(ab)), toBase58String(value(ac))), bF(fZ, ga, ft, fx, height, lastBlock.timestamp)), IntegerEntry(W(), fx), IntegerEntry(X(height, lastBlock.timestamp), fx)]
838840 let fE = bM(D(fR, bq), D(fQ, bp))
839841 let fF = H(fE, b)
840842 let fG = {
841843 let gd = (toInt(fraction(fO, fU, fA)) * 2)
842844 fraction((fX - gd), b, gd)
843845 }
844846 $Tuple5(fX, el, fe, fG, fN)
845847 }
846848 else throw("Strict value is not equal to itself.")
847849 }
848850
849851
850852 func ge () = {
851853 let bT = getString(U())
852854 if ($isInstanceOf(bT, "String"))
853855 then {
854856 let gf = bT
855857 fromBase58String(gf)
856858 }
857859 else if ($isInstanceOf(bT, "Unit"))
858860 then unit
859861 else throw("Match error")
860862 }
861863
862864
863865 func gg () = {
864866 let bT = getString(V())
865867 if ($isInstanceOf(bT, "String"))
866868 then {
867869 let gf = bT
868870 fromBase58String(gf)
869871 }
870872 else if ($isInstanceOf(bT, "Unit"))
871873 then unit
872874 else throw("Match error")
873875 }
874876
875877
876878 func gh (eS) = {
877879 let bT = ge()
878880 if ($isInstanceOf(bT, "ByteVector"))
879881 then {
880882 let gi = bT
881883 (eS.callerPublicKey == gi)
882884 }
883885 else if ($isInstanceOf(bT, "Unit"))
884886 then (eS.caller == this)
885887 else throw("Match error")
886888 }
887889
888890
889891 func gj (eS) = {
890892 let gk = throw("Permission denied")
891893 let bT = ge()
892894 if ($isInstanceOf(bT, "ByteVector"))
893895 then {
894896 let gi = bT
895897 if ((eS.callerPublicKey == gi))
896898 then true
897899 else gk
898900 }
899901 else if ($isInstanceOf(bT, "Unit"))
900902 then if ((eS.caller == this))
901903 then true
902904 else gk
903905 else throw("Match error")
904906 }
905907
906908
907909 @Callable(eS)
908910 func rebalance () = (cA(aM(this, ae())) ++ cA(aM(this, af())))
909911
910912
911913
912914 @Callable(eS)
913915 func calculateAmountOutForSwapREADONLY (gl,gm,gn) = {
914916 let go = if ((gm == false))
915917 then {
916918 let gp = aM(this, af())
917919 let gq = aM(this, ae())
918920 $Tuple2(gp, gq)
919921 }
920922 else {
921923 let gp = aM(this, ae())
922924 let gq = aM(this, af())
923925 $Tuple2(gp, gq)
924926 }
925927 let gp = go._1
926928 let gq = go._2
927929 let gr = bJ(gq)
928930 let gs = bJ(gp)
929931 let gt = fraction(gs, gl, (gr + gl))
930932 let gu = (toBigInt(gr) * toBigInt(gs))
931933 let gv = (((toBigInt(bJ(gq)) + toBigInt(gl)) + toBigInt(gn)) * (toBigInt(bJ(gp)) - toBigInt(gt)))
932934 let gw = if ((gv >= gu))
933935 then true
934936 else throw("new K is fewer error")
935937 if ((gw == gw))
936938 then $Tuple2(nil, gt)
937939 else throw("Strict value is not equal to itself.")
938940 }
939941
940942
941943
942944 @Callable(eS)
943945 func calculateAmountOutForSwapAndSendTokens (gl,gm,gx,gy,gn) = {
944946 let gz = {
945947 let aW = invoke(aT, "getSwapContractREADONLY", nil, nil)
946948 if ($isInstanceOf(aW, "String"))
947949 then aW
948950 else throw(($getType(aW) + " couldn't be cast to String"))
949951 }
950952 let fM = [if ((value(eS.payments[0]).amount >= gl))
951953 then true
952954 else aQ("Wrong amount"), if ((eS.caller == addressFromStringValue(gz)))
953955 then true
954956 else aQ("Permission denied")]
955957 if ((fM == fM))
956958 then {
957959 let eT = value(eS.payments[0])
958960 let gq = bf(eT.assetId)
959961 let gp = if ((gm == false))
960962 then aM(this, af())
961963 else aM(this, ae())
962964 let gr = (bJ(gq) - value(eS.payments[0]).amount)
963965 let gs = bJ(gp)
964966 let gt = fraction(gs, gl, (gr + gl))
965967 let gu = (toBigInt(gr) * toBigInt(gs))
966968 let gv = ((toBigInt(bJ(gq)) + toBigInt(gn)) * (toBigInt(bJ(gp)) - toBigInt(gt)))
967969 let gw = if ((gv >= gu))
968970 then true
969971 else throw("new K is fewer error")
970972 if ((gw == gw))
971973 then {
972974 let gA = if ((gt >= gx))
973975 then true
974976 else throw("Exchange result is fewer coins than expected")
975977 if ((gA == gA))
976978 then {
977979 let gB = cA(gq)
978980 if ((gB == gB))
979981 then {
980982 let gC = cH(gp, gt)
981983 if ((gC == gC))
982984 then $Tuple2(((gC ++ gB) ++ [ScriptTransfer(addressFromStringValue(gy), gt, bd(gp))]), gt)
983985 else throw("Strict value is not equal to itself.")
984986 }
985987 else throw("Strict value is not equal to itself.")
986988 }
987989 else throw("Strict value is not equal to itself.")
988990 }
989991 else throw("Strict value is not equal to itself.")
990992 }
991993 else throw("Strict value is not equal to itself.")
992994 }
993995
994996
995997
996998 @Callable(eS)
997999 func setManager (gD) = {
9981000 let gE = gj(eS)
9991001 if ((gE == gE))
10001002 then {
10011003 let gF = fromBase58String(gD)
10021004 if ((gF == gF))
10031005 then [StringEntry(V(), gD)]
10041006 else throw("Strict value is not equal to itself.")
10051007 }
10061008 else throw("Strict value is not equal to itself.")
10071009 }
10081010
10091011
10101012
10111013 @Callable(eS)
10121014 func confirmManager () = {
10131015 let gG = gg()
10141016 let gH = if (isDefined(gG))
10151017 then true
10161018 else throw("No pending manager")
10171019 if ((gH == gH))
10181020 then {
10191021 let gI = if ((eS.callerPublicKey == value(gG)))
10201022 then true
10211023 else throw("You are not pending manager")
10221024 if ((gI == gI))
10231025 then [StringEntry(U(), toBase58String(value(gG))), DeleteEntry(V())]
10241026 else throw("Strict value is not equal to itself.")
10251027 }
10261028 else throw("Strict value is not equal to itself.")
10271029 }
10281030
10291031
10301032
10311033 @Callable(eS)
10321034 func put (dG,gJ) = if ((0 > dG))
10331035 then throw("Invalid slippageTolerance passed")
10341036 else {
10351037 let eY = eV(eS, dG, true)
10361038 let ei = eY._2
10371039 let dn = eY._7
10381040 let dE = eY._9
10391041 let ej = eY._10
10401042 let ek = eY._11
10411043 let gK = eY._12
10421044 let gL = eY._13
10431045 let eW = toBigInt(value(eS.payments[0]).amount)
10441046 let eX = toBigInt(value(eS.payments[1]).amount)
10451047 let ez = es(eW, eX, toBigInt(0))
10461048 if ((ez == ez))
10471049 then {
10481050 let fa = invoke(aT, "emit", [ei], nil)
10491051 if ((fa == fa))
10501052 then {
10511053 let fb = {
10521054 let bT = fa
10531055 if ($isInstanceOf(bT, "Address"))
10541056 then {
10551057 let fc = bT
10561058 invoke(fc, "emit", [ei], nil)
10571059 }
10581060 else unit
10591061 }
10601062 if ((fb == fb))
10611063 then {
10621064 let gM = if ((ej > 0))
10631065 then invoke(bt, "put", nil, [AttachedPayment(gK, ej)])
10641066 else nil
10651067 if ((gM == gM))
10661068 then {
10671069 let gN = if ((ek > 0))
10681070 then invoke(bt, "put", nil, [AttachedPayment(gL, ek)])
10691071 else nil
10701072 if ((gN == gN))
10711073 then {
10721074 let gO = if (gJ)
10731075 then {
10741076 let gP = invoke(bs, "stake", nil, [AttachedPayment(dn, ei)])
10751077 if ((gP == gP))
10761078 then nil
10771079 else throw("Strict value is not equal to itself.")
10781080 }
10791081 else [ScriptTransfer(eS.caller, ei, dn)]
10801082 let gQ = eA(0, 0, 0)
10811083 if ((gQ == gQ))
10821084 then {
10831085 let er = gQ._2
10841086 let gR = gQ._1
10851087 let gS = eE(ez, er)
10861088 if ((gS == gS))
10871089 then {
10881090 let gT = invoke(this, "rebalance", nil, nil)
10891091 if ((gT == gT))
10901092 then ((dE ++ gO) ++ gR)
10911093 else throw("Strict value is not equal to itself.")
10921094 }
10931095 else throw("Strict value is not equal to itself.")
10941096 }
10951097 else throw("Strict value is not equal to itself.")
10961098 }
10971099 else throw("Strict value is not equal to itself.")
10981100 }
10991101 else throw("Strict value is not equal to itself.")
11001102 }
11011103 else throw("Strict value is not equal to itself.")
11021104 }
11031105 else throw("Strict value is not equal to itself.")
11041106 }
11051107 else throw("Strict value is not equal to itself.")
11061108 }
11071109
11081110
11091111
11101112 @Callable(eS)
11111113 func putForFree (gU) = if ((0 > gU))
11121114 then throw("Invalid value passed")
11131115 else {
11141116 let eY = eV(eS, gU, false)
11151117 let dE = eY._9
11161118 let eW = toBigInt(value(eS.payments[0]).amount)
11171119 let eX = toBigInt(value(eS.payments[1]).amount)
11181120 let ez = es(eW, eX, toBigInt(0))
11191121 if ((ez == ez))
11201122 then {
11211123 let gV = eA(0, 0, 0)
11221124 let gR = gV._1
11231125 let er = gV._2
11241126 let gS = eE(ez, er)
11251127 if ((gS == gS))
11261128 then (dE ++ gR)
11271129 else throw("Strict value is not equal to itself.")
11281130 }
11291131 else throw("Strict value is not equal to itself.")
11301132 }
11311133
11321134
11331135
11341136 @Callable(eS)
11351137 func putOneTkn (gW,gX) = {
11361138 let gY = {
11371139 let aW = invoke(aT, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
11381140 if ($isInstanceOf(aW, "Boolean"))
11391141 then aW
11401142 else throw(($getType(aW) + " couldn't be cast to Boolean"))
11411143 }
11421144 let gZ = if (if (if (aY())
11431145 then true
11441146 else (bl == l))
11451147 then true
11461148 else (bl == n))
11471149 then true
11481150 else gY
11491151 let fM = [if (if (!(gZ))
11501152 then true
11511153 else gh(eS))
11521154 then true
11531155 else aQ("put operation is blocked by admin"), if ((size(eS.payments) == 1))
11541156 then true
11551157 else aQ("exactly 1 payment are expected")]
11561158 if ((fM == fM))
11571159 then {
11581160 let ha = eS.payments[0]
11591161 let fh = ha.assetId
11601162 let fg = ha.amount
11611163 let ez = if ((fh == bn))
11621164 then es(toBigInt(fg), toBigInt(0), toBigInt(0))
11631165 else if ((fh == bo))
11641166 then es(toBigInt(0), toBigInt(fg), toBigInt(0))
11651167 else aQ("payment asset is not supported")
11661168 if ((ez == ez))
11671169 then {
11681170 let ab = eS.caller
11691171 let ac = eS.transactionId
11701172 let hb = ff(fg, fh, ab, ac)
11711173 if ((hb == hb))
11721174 then {
11731175 let fl = hb._5
11741176 let hc = hb._4
11751177 let fe = hb._3
11761178 let el = hb._2
11771179 let hd = hb._1
11781180 let he = if (if ((gW > 0))
11791181 then (gW > hd)
11801182 else false)
11811183 then aQ(makeString(["amount to receive is less than ", toString(gW)], ""))
11821184 else hd
11831185 let fa = eZ(he)
11841186 if ((fa == fa))
11851187 then {
11861188 let gO = if (gX)
11871189 then {
11881190 let hf = invoke(bs, "stake", nil, [AttachedPayment(bm, he)])
11891191 if ((hf == hf))
11901192 then nil
11911193 else throw("Strict value is not equal to itself.")
11921194 }
11931195 else [ScriptTransfer(eS.caller, he, bm)]
11941196 let hg = if ((fe > 0))
11951197 then [ScriptTransfer(aU, fe, fh)]
11961198 else nil
11971199 let hh = if ((this == aU))
11981200 then $Tuple2(0, 0)
11991201 else if (fl)
12001202 then $Tuple2(-(fe), 0)
12011203 else $Tuple2(0, -(fe))
12021204 let eB = hh._1
12031205 let eC = hh._2
12041206 let hi = eA(eB, eC, 0)
12051207 let gR = hi._1
12061208 let er = hi._2
12071209 let eL = value(getString(aj))
12081210 let gS = eE(ez, er)
12091211 if ((gS == gS))
12101212 then {
12111213 let gT = invoke(this, "rebalance", nil, nil)
12121214 if ((gT == gT))
12131215 then $Tuple2((((el ++ gO) ++ hg) ++ gR), he)
12141216 else throw("Strict value is not equal to itself.")
12151217 }
12161218 else throw("Strict value is not equal to itself.")
12171219 }
12181220 else throw("Strict value is not equal to itself.")
12191221 }
12201222 else throw("Strict value is not equal to itself.")
12211223 }
12221224 else throw("Strict value is not equal to itself.")
12231225 }
12241226 else throw("Strict value is not equal to itself.")
12251227 }
12261228
12271229
12281230
12291231 @Callable(eS)
12301232 func putOneTknREADONLY (fh,fg) = {
12311233 let hj = ff(fg, bd(fh), unit, unit)
12321234 let hd = hj._1
12331235 let el = hj._2
12341236 let fe = hj._3
12351237 let hc = hj._4
12361238 let fl = hj._5
12371239 $Tuple2(nil, $Tuple3(hd, fe, hc))
12381240 }
12391241
12401242
12411243
12421244 @Callable(eS)
12431245 func getOneTkn (hk,gW) = {
12441246 let gY = {
12451247 let aW = invoke(aT, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
12461248 if ($isInstanceOf(aW, "Boolean"))
12471249 then aW
12481250 else throw(($getType(aW) + " couldn't be cast to Boolean"))
12491251 }
12501252 let hl = if (if (aY())
12511253 then true
12521254 else (bl == n))
12531255 then true
12541256 else gY
12551257 let fM = [if (if (!(hl))
12561258 then true
12571259 else gh(eS))
12581260 then true
12591261 else aQ("get operation is blocked by admin"), if ((size(eS.payments) == 1))
12601262 then true
12611263 else aQ("exactly 1 payment are expected")]
12621264 if ((fM == fM))
12631265 then {
12641266 let fL = bd(hk)
12651267 let ha = eS.payments[0]
12661268 let fh = ha.assetId
12671269 let ft = ha.amount
12681270 let ez = es(toBigInt(0), toBigInt(0), toBigInt(0))
12691271 if ((ez == ez))
12701272 then {
12711273 let ab = eS.caller
12721274 let ac = eS.transactionId
12731275 let hm = fK(fL, ft, fh, ab, ac)
12741276 if ((hm == hm))
12751277 then {
12761278 let fN = hm._5
12771279 let hc = hm._4
12781280 let fe = hm._3
12791281 let el = hm._2
12801282 let hn = hm._1
12811283 let bW = if (if ((gW > 0))
12821284 then (gW > hn)
12831285 else false)
12841286 then aQ(makeString(["amount to receive is less than ", toString(gW)], ""))
12851287 else hn
12861288 let ho = invoke(aT, "burn", [ft], [AttachedPayment(fh, ft)])
12871289 if ((ho == ho))
12881290 then {
12891291 let gC = cH(hk, (bW + max([0, fe])))
12901292 let hp = [ScriptTransfer(ab, bW, fL)]
12911293 let hg = if ((fe > 0))
12921294 then [ScriptTransfer(aU, fe, fL)]
12931295 else nil
12941296 let hq = {
12951297 let hr = if ((this == aU))
12961298 then 0
12971299 else fe
12981300 if (fN)
12991301 then $Tuple2(-((bW + hr)), 0)
13001302 else $Tuple2(0, -((bW + hr)))
13011303 }
13021304 let eB = hq._1
13031305 let eC = hq._2
13041306 let hs = eA(eB, eC, 0)
13051307 let gR = hs._1
13061308 let er = hs._2
13071309 let gS = eE(ez, er)
13081310 if ((gS == gS))
13091311 then $Tuple2(((((el ++ gC) ++ hp) ++ hg) ++ gR), bW)
13101312 else throw("Strict value is not equal to itself.")
13111313 }
13121314 else throw("Strict value is not equal to itself.")
13131315 }
13141316 else throw("Strict value is not equal to itself.")
13151317 }
13161318 else throw("Strict value is not equal to itself.")
13171319 }
13181320 else throw("Strict value is not equal to itself.")
13191321 }
13201322
13211323
13221324
13231325 @Callable(eS)
13241326 func getOneTknREADONLY (fL,ft) = {
13251327 let ht = fK(bd(fL), ft, bm, unit, unit)
13261328 let hn = ht._1
13271329 let el = ht._2
13281330 let fe = ht._3
13291331 let hc = ht._4
13301332 let fN = ht._5
13311333 $Tuple2(nil, $Tuple3(hn, fe, hc))
13321334 }
13331335
13341336
13351337
13361338 @Callable(eS)
13371339 func unstakeAndGetOneTkn (hu,hk,gW) = {
13381340 let gY = {
13391341 let aW = invoke(aT, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
13401342 if ($isInstanceOf(aW, "Boolean"))
13411343 then aW
13421344 else throw(($getType(aW) + " couldn't be cast to Boolean"))
13431345 }
13441346 let hl = if (if (aY())
13451347 then true
13461348 else (bl == n))
13471349 then true
13481350 else gY
13491351 let fM = [if (if (!(hl))
13501352 then true
13511353 else gh(eS))
13521354 then true
13531355 else aQ("get operation is blocked by admin"), if ((size(eS.payments) == 0))
13541356 then true
13551357 else aQ("no payments are expected")]
13561358 if ((fM == fM))
13571359 then {
13581360 let fL = bd(hk)
13591361 let ab = eS.caller
13601362 let ac = eS.transactionId
13611363 let ez = es(toBigInt(0), toBigInt(0), toBigInt(0))
13621364 if ((ez == ez))
13631365 then {
13641366 let hv = invoke(bs, "unstake", [toBase58String(bm), hu], nil)
13651367 if ((hv == hv))
13661368 then {
13671369 let hw = fK(fL, hu, bm, ab, ac)
13681370 if ((hw == hw))
13691371 then {
13701372 let fN = hw._5
13711373 let hc = hw._4
13721374 let fe = hw._3
13731375 let el = hw._2
13741376 let hn = hw._1
13751377 let bW = if (if ((gW > 0))
13761378 then (gW > hn)
13771379 else false)
13781380 then aQ(makeString(["amount to receive is less than ", toString(gW)], ""))
13791381 else hn
13801382 let ho = invoke(aT, "burn", [hu], [AttachedPayment(bm, hu)])
13811383 if ((ho == ho))
13821384 then {
13831385 let gC = cH(hk, (bW + max([0, fe])))
13841386 let hp = [ScriptTransfer(eS.caller, bW, fL)]
13851387 let hg = if ((fe > 0))
13861388 then [ScriptTransfer(aU, fe, fL)]
13871389 else nil
13881390 let hx = {
13891391 let hr = if ((this == aU))
13901392 then 0
13911393 else fe
13921394 if (fN)
13931395 then $Tuple2(-((bW + hr)), 0)
13941396 else $Tuple2(0, -((bW + hr)))
13951397 }
13961398 let eB = hx._1
13971399 let eC = hx._2
13981400 let hy = eA(eB, eC, 0)
13991401 let gR = hy._1
14001402 let er = hy._2
14011403 let gS = eE(ez, er)
14021404 if ((gS == gS))
14031405 then $Tuple2(((((el ++ gC) ++ hp) ++ hg) ++ gR), bW)
14041406 else throw("Strict value is not equal to itself.")
14051407 }
14061408 else throw("Strict value is not equal to itself.")
14071409 }
14081410 else throw("Strict value is not equal to itself.")
14091411 }
14101412 else throw("Strict value is not equal to itself.")
14111413 }
14121414 else throw("Strict value is not equal to itself.")
14131415 }
14141416 else throw("Strict value is not equal to itself.")
14151417 }
14161418
14171419
14181420
14191421 @Callable(eS)
14201422 func get () = {
14211423 let dW = eR(eS)
14221424 let dC = dW._1
14231425 let dD = dW._2
14241426 let eU = dW._3
14251427 let dl = dW._4
14261428 let dE = dW._5
14271429 let gC = cM(dC, dD)
14281430 let ez = es(toBigInt(0), toBigInt(0), toBigInt(0))
14291431 if ((ez == ez))
14301432 then {
14311433 let hz = invoke(aT, "burn", [eU], [AttachedPayment(dl, eU)])
14321434 if ((hz == hz))
14331435 then {
14341436 let hA = eA(-(dC), -(dD), 0)
14351437 let gR = hA._1
14361438 let er = hA._2
14371439 let gS = eE(ez, er)
14381440 if ((gS == gS))
14391441 then ((gC ++ dE) ++ gR)
14401442 else throw("Strict value is not equal to itself.")
14411443 }
14421444 else throw("Strict value is not equal to itself.")
14431445 }
14441446 else throw("Strict value is not equal to itself.")
14451447 }
14461448
14471449
14481450
14491451 @Callable(eS)
14501452 func getNoLess (hB,hC) = {
14511453 let dW = eR(eS)
14521454 let dC = dW._1
14531455 let dD = dW._2
14541456 let eU = dW._3
14551457 let dl = dW._4
14561458 let dE = dW._5
14571459 if ((hB > dC))
14581460 then throw(((("noLessThenAmtAsset failed: " + toString(dC)) + " < ") + toString(hB)))
14591461 else if ((hC > dD))
14601462 then throw(((("noLessThenPriceAsset failed: " + toString(dD)) + " < ") + toString(hC)))
14611463 else {
14621464 let gC = cM(dC, dD)
14631465 let ez = es(toBigInt(0), toBigInt(0), toBigInt(0))
14641466 if ((ez == ez))
14651467 then {
14661468 let hz = invoke(aT, "burn", [eU], [AttachedPayment(dl, eU)])
14671469 if ((hz == hz))
14681470 then {
14691471 let hD = eA(-(dC), -(dD), 0)
14701472 let gR = hD._1
14711473 let er = hD._2
14721474 let gS = eE(ez, er)
14731475 if ((gS == gS))
14741476 then ((gC ++ dE) ++ gR)
14751477 else throw("Strict value is not equal to itself.")
14761478 }
14771479 else throw("Strict value is not equal to itself.")
14781480 }
14791481 else throw("Strict value is not equal to itself.")
14801482 }
14811483 }
14821484
14831485
14841486
14851487 @Callable(eS)
14861488 func unstakeAndGet (bW) = {
14871489 let hE = if ((size(eS.payments) != 0))
14881490 then throw("No payments are expected")
14891491 else true
14901492 if ((hE == hE))
14911493 then {
14921494 let da = ba()
14931495 let dn = fromBase58String(da[q])
14941496 let ez = es(toBigInt(0), toBigInt(0), toBigInt(0))
14951497 if ((ez == ez))
14961498 then {
14971499 let hv = invoke(bs, "unstake", [toBase58String(dn), bW], nil)
14981500 if ((hv == hv))
14991501 then {
15001502 let dW = dj(toBase58String(eS.transactionId), toBase58String(dn), bW, eS.caller)
15011503 let dC = dW._1
15021504 let dD = dW._2
15031505 let dq = parseIntValue(dW._9)
15041506 let dE = dW._10
15051507 let gC = cM(dC, dD)
15061508 let hF = if (if (aY())
15071509 then true
15081510 else (dq == n))
15091511 then throw(("Get operation is blocked by admin. Status = " + toString(dq)))
15101512 else true
15111513 if ((hF == hF))
15121514 then {
15131515 let hz = invoke(aT, "burn", [bW], [AttachedPayment(dn, bW)])
15141516 if ((hz == hz))
15151517 then {
15161518 let hG = eA(-(dC), -(dD), 0)
15171519 let gR = hG._1
15181520 let er = hG._2
15191521 let gS = eE(ez, er)
15201522 if ((gS == gS))
15211523 then ((gC ++ dE) ++ gR)
15221524 else throw("Strict value is not equal to itself.")
15231525 }
15241526 else throw("Strict value is not equal to itself.")
15251527 }
15261528 else throw("Strict value is not equal to itself.")
15271529 }
15281530 else throw("Strict value is not equal to itself.")
15291531 }
15301532 else throw("Strict value is not equal to itself.")
15311533 }
15321534 else throw("Strict value is not equal to itself.")
15331535 }
15341536
15351537
15361538
15371539 @Callable(eS)
15381540 func unstakeAndGetNoLess (hu,hH,hC) = {
15391541 let hl = if (aY())
15401542 then true
15411543 else (bl == n)
15421544 let fM = [if (!(hl))
15431545 then true
15441546 else throw("get operation is blocked by admin"), if ((size(eS.payments) == 0))
15451547 then true
15461548 else throw("no payments are expected")]
15471549 if ((fM == fM))
15481550 then {
15491551 let ez = es(toBigInt(0), toBigInt(0), toBigInt(0))
15501552 if ((ez == ez))
15511553 then {
15521554 let hv = invoke(bs, "unstake", [toBase58String(bm), hu], nil)
15531555 if ((hv == hv))
15541556 then {
15551557 let dW = dj(toBase58String(eS.transactionId), toBase58String(bm), hu, eS.caller)
15561558 let dC = dW._1
15571559 let dD = dW._2
15581560 let dE = dW._10
15591561 let gC = cM(dC, dD)
15601562 let hI = [if ((dC >= hH))
15611563 then true
15621564 else throw(makeString(["amount asset amount to receive is less than ", toString(hH)], "")), if ((dD >= hC))
15631565 then true
15641566 else throw(makeString(["price asset amount to receive is less than ", toString(hC)], ""))]
15651567 if ((hI == hI))
15661568 then {
15671569 let hz = invoke(aT, "burn", [hu], [AttachedPayment(bm, hu)])
15681570 if ((hz == hz))
15691571 then {
15701572 let hJ = eA(-(dC), -(dD), 0)
15711573 let gR = hJ._1
15721574 let er = hJ._2
15731575 let gS = eE(ez, er)
15741576 if ((gS == gS))
15751577 then ((gC ++ dE) ++ gR)
15761578 else throw("Strict value is not equal to itself.")
15771579 }
15781580 else throw("Strict value is not equal to itself.")
15791581 }
15801582 else throw("Strict value is not equal to itself.")
15811583 }
15821584 else throw("Strict value is not equal to itself.")
15831585 }
15841586 else throw("Strict value is not equal to itself.")
15851587 }
15861588 else throw("Strict value is not equal to itself.")
15871589 }
15881590
15891591
15901592
15911593 @Callable(eS)
15921594 func activate (hK,hL) = if ((toString(eS.caller) != toString(aT)))
15931595 then throw("permissions denied")
15941596 else $Tuple2([StringEntry(ae(), hK), StringEntry(af(), hL)], "success")
15951597
15961598
15971599
15981600 @Callable(eS)
15991601 func refreshKLp () = {
16001602 let hM = valueOrElse(getInteger(ak), 0)
16011603 let hN = if (((height - hM) >= an))
16021604 then unit
16031605 else aQ(makeString([toString(an), " blocks have not passed since the previous call"], ""))
16041606 if ((hN == hN))
16051607 then {
16061608 let eL = valueOrErrorMessage(parseBigInt(valueOrElse(getString(this, aj), "0")), aS("invalid kLp"))
16071609 let hO = eA(0, 0, 0)
16081610 let hP = hO._1
16091611 let er = hO._2
16101612 let eD = if ((eL != er))
16111613 then hP
16121614 else aQ("nothing to refresh")
16131615 $Tuple2(eD, toString(er))
16141616 }
16151617 else throw("Strict value is not equal to itself.")
16161618 }
16171619
16181620
16191621
16201622 @Callable(eS)
16211623 func getPoolConfigWrapperREADONLY () = $Tuple2(nil, ba())
16221624
16231625
16241626
16251627 @Callable(eS)
16261628 func getAccBalanceWrapperREADONLY (ap) = $Tuple2(nil, bJ(ap))
16271629
16281630
16291631
16301632 @Callable(eS)
16311633 func calcPricesWrapperREADONLY (cU,cV,cZ) = {
16321634 let di = cY(cU, cV, cZ)
16331635 $Tuple2(nil, [toString(di[0]), toString(di[1]), toString(di[2])])
16341636 }
16351637
16361638
16371639
16381640 @Callable(eS)
16391641 func toX18WrapperREADONLY (E,F) = $Tuple2(nil, toString(D(E, F)))
16401642
16411643
16421644
16431645 @Callable(eS)
16441646 func fromX18WrapperREADONLY (I,J) = $Tuple2(nil, H(parseBigIntValue(I), J))
16451647
16461648
16471649
16481650 @Callable(eS)
16491651 func calcPriceBigIntWrapperREADONLY (bN,bO) = $Tuple2(nil, toString(bM(parseBigIntValue(bN), parseBigIntValue(bO))))
16501652
16511653
16521654
16531655 @Callable(eS)
16541656 func estimatePutOperationWrapperREADONLY (dk,dG,dH,dI,dJ,dK,ab,dL,dM) = $Tuple2(nil, dF(dk, dG, dH, dI, dJ, dK, ab, dL, dM))
16551657
16561658
16571659
16581660 @Callable(eS)
16591661 func estimateGetOperationWrapperREADONLY (dk,dl,dm,ab) = {
16601662 let dW = dj(dk, dl, dm, addressFromStringValue(ab))
16611663 $Tuple2(nil, $Tuple10(dW._1, dW._2, dW._3, dW._4, dW._5, dW._6, dW._7, toString(dW._8), dW._9, dW._10))
16621664 }
16631665
16641666
16651667
16661668 @Callable(eS)
16671669 func statsREADONLY () = {
16681670 let da = ba()
16691671 let dn = fromBase58String(da[q])
16701672 let hQ = da[r]
16711673 let hR = da[s]
16721674 let dP = da[v]
16731675 let dQ = da[w]
16741676 let db = parseIntValue(da[t])
16751677 let dc = parseIntValue(da[u])
16761678 let hS = valueOrErrorMessage(assetInfo(dn), (("Asset " + toBase58String(dn)) + " doesn't exist")).quantity
16771679 let hT = bJ(hQ)
16781680 let hU = bJ(hR)
16791681 let hV = if ((hS == 0))
16801682 then [e, e, e]
16811683 else cY(hT, hU, hS)
16821684 let dx = 0
16831685 let hW = H(hV[1], b)
16841686 let hX = H(hV[2], b)
16851687 let hY = value(getInteger(aT, aD(toString(this))))
16861688 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(hT), toString(hU), toString(hS), toString(dx), toString(hW), toString(hX), toString(hY)], j))
16871689 }
16881690
16891691
16901692
16911693 @Callable(eS)
16921694 func evaluatePutByAmountAssetREADONLY (dH) = {
16931695 let da = ba()
16941696 let dn = fromBase58String(da[q])
16951697 let dN = da[r]
16961698 let do = fromBase58String(dN)
16971699 let dO = da[s]
16981700 let dp = fromBase58String(dO)
16991701 let db = parseIntValue(da[t])
17001702 let dc = parseIntValue(da[u])
17011703 let dq = da[p]
17021704 let hS = valueOrErrorMessage(assetInfo(dn), (("Asset " + toBase58String(dn)) + " doesn't exist")).quantity
17031705 let hT = bJ(dN)
17041706 let hU = bJ(dO)
17051707 let cW = D(hT, db)
17061708 let cX = D(hU, dc)
17071709 let dw = if ((hS == 0))
17081710 then e
17091711 else bM(cX, cW)
17101712 let dT = D(dH, db)
17111713 let dU = fraction(dT, dw, d)
17121714 let dJ = H(dU, dc)
17131715 let eY = dF("", 500000, dH, do, dJ, dp, "", true, false)
17141716 let ee = eY._1
17151717 let hZ = eY._3
17161718 let ds = eY._4
17171719 let du = eY._5
17181720 let dr = eY._6
17191721 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(ee), toString(H(dw, b)), toString(ds), toString(du), toString(dr), dq, toString(dH), toString(dJ)], j))
17201722 }
17211723
17221724
17231725
17241726 @Callable(eS)
17251727 func evaluatePutByPriceAssetREADONLY (dJ) = {
17261728 let da = ba()
17271729 let dn = fromBase58String(da[q])
17281730 let dN = da[r]
17291731 let do = fromBase58String(dN)
17301732 let dO = da[s]
17311733 let dp = fromBase58String(dO)
17321734 let db = parseIntValue(da[t])
17331735 let dc = parseIntValue(da[u])
17341736 let dq = da[p]
17351737 let hS = valueOrErrorMessage(assetInfo(dn), (("Asset " + toBase58String(dn)) + " doesn't exist")).quantity
17361738 let ia = bJ(dN)
17371739 let ib = bJ(dO)
17381740 let ic = D(ia, db)
17391741 let id = D(ib, dc)
17401742 let dw = if ((hS == 0))
17411743 then e
17421744 else bM(id, ic)
17431745 let dU = D(dJ, dc)
17441746 let dT = fraction(dU, d, dw)
17451747 let dH = H(dT, db)
17461748 let eY = dF("", 500000, dH, do, dJ, dp, "", true, false)
17471749 let ee = eY._1
17481750 let hZ = eY._3
17491751 let ds = eY._4
17501752 let du = eY._5
17511753 let dr = eY._6
17521754 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(ee), toString(H(dw, b)), toString(ds), toString(du), toString(dr), dq, toString(dH), toString(dJ)], j))
17531755 }
17541756
17551757
17561758
17571759 @Callable(eS)
17581760 func evaluateGetREADONLY (ie,if) = {
17591761 let dW = dj("", ie, if, this)
17601762 let dC = dW._1
17611763 let dD = dW._2
17621764 let ds = dW._5
17631765 let du = dW._6
17641766 let dr = dW._7
17651767 let dx = dW._8
17661768 let dq = parseIntValue(dW._9)
17671769 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(dC), toString(dD), toString(ds), toString(du), toString(dr), toString(dx), toString(dq)], j))
17681770 }
17691771
17701772
17711773 @Verifier(ig)
17721774 func ih () = {
17731775 let ii = {
17741776 let bT = ge()
17751777 if ($isInstanceOf(bT, "ByteVector"))
17761778 then {
17771779 let gi = bT
17781780 gi
17791781 }
17801782 else if ($isInstanceOf(bT, "Unit"))
17811783 then ig.senderPublicKey
17821784 else throw("Match error")
17831785 }
17841786 let bT = ig
17851787 if ($isInstanceOf(bT, "Order"))
17861788 then {
17871789 let eH = bT
17881790 let ij = aZ()
17891791 let ik = eG(eH)
17901792 let aI = ik._1
17911793 let aJ = ik._2
17921794 let aK = sigVerify(eH.bodyBytes, eH.proofs[0], eH.senderPublicKey)
17931795 let aL = sigVerify(eH.bodyBytes, eH.proofs[1], ij)
17941796 if (if (if (aI)
17951797 then aK
17961798 else false)
17971799 then aL
17981800 else false)
17991801 then true
18001802 else aH(aI, aJ, aK, aL)
18011803 }
18021804 else if ($isInstanceOf(bT, "SetScriptTransaction"))
18031805 then {
18041806 let gf = bT
18051807 if (sigVerify(ig.bodyBytes, ig.proofs[0], ii))
18061808 then true
18071809 else {
18081810 let il = blake2b256(value(gf.script))
18091811 let im = fromBase64String(value(getString(aT, aF())))
18101812 let in = scriptHash(this)
18111813 if ((im == il))
18121814 then (in != il)
18131815 else false
18141816 }
18151817 }
18161818 else sigVerify(ig.bodyBytes, ig.proofs[0], ii)
18171819 }
18181820

github/deemru/w8io/3ef1775 
383.11 ms