tx · 8ZDxUfV6wzUP17Dj4hhoatCXJmR678Gbt1wbE2VvApUA

3N8VprziouggRRQaP2aFdem2ycS6GudUaft:  -0.01400000 Waves

2021.05.19 17:42 [1532692] smart account 3N8VprziouggRRQaP2aFdem2ycS6GudUaft > SELF 0.00000000 Waves

{ "type": 13, "id": "8ZDxUfV6wzUP17Dj4hhoatCXJmR678Gbt1wbE2VvApUA", "fee": 1400000, "feeAssetId": null, "timestamp": 1621435356220, "version": 2, "chainId": 84, "sender": "3N8VprziouggRRQaP2aFdem2ycS6GudUaft", "senderPublicKey": "2RHKgKhtb7zn9BWj8GWz6YUyfTFMaoicZKLhjge5B6z2", "proofs": [ "2ihvzkGC1NDAgHYUZz4wJjdfN8XwAJzmYyaCDtjLpkcD6Z5hL1hQPkcx3G9cKFyYZN8tmVWjeJ7qbVsvU9tt7fMe" ], "script": "base64:AAIEAAAAAAAAACoIAhIDCgEEEgcKBQEBCAgEEgMKAQESAwoBARIAEgMKAQESABIAEgMKAQEAAABIAAAAAAd2ZXJzaW9uAgAAAAUxLjAuMAAAAAAKa2V5VmVyc2lvbgIAAAAHdmVyc2lvbgAAAAAJa2V5QWN0aXZlAgAAAAZhY3RpdmUAAAAAC2tleUFzc2V0SWRBAgAAAApBX2Fzc2V0X2lkAAAAAAtrZXlBc3NldElkQgIAAAAKQl9hc3NldF9pZAAAAAALa2V5QmFsYW5jZUECAAAAD0FfYXNzZXRfYmFsYW5jZQAAAAALa2V5QmFsYW5jZUICAAAAD0JfYXNzZXRfYmFsYW5jZQAAAAAPa2V5QmFsYW5jZUluaXRBAgAAAAxBX2Fzc2V0X2luaXQAAAAAD2tleUJhbGFuY2VJbml0QgIAAAAMQl9hc3NldF9pbml0AAAAAA9rZXlTaGFyZUFzc2V0SWQCAAAADnNoYXJlX2Fzc2V0X2lkAAAAABNrZXlTaGFyZUFzc2V0U3VwcGx5AgAAABJzaGFyZV9hc3NldF9zdXBwbHkAAAAADWtleUNvbW1pc3Npb24CAAAACmNvbW1pc3Npb24AAAAAG2tleUNvbW1pc3Npb25TY2FsZURlbGltaXRlcgIAAAAaY29tbWlzc2lvbl9zY2FsZV9kZWxpbWl0ZXIAAAAACGtleUNhdXNlAgAAAA5zaHV0ZG93bl9jYXVzZQAAAAAPa2V5Rmlyc3RIYXJ2ZXN0AgAAAA1maXJzdF9oYXJ2ZXN0AAAAAA1rZXlCYXNlUGVyaW9kAgAAAAtiYXNlX3BlcmlvZAAAAAAPa2V5UGVyaW9kTGVuZ3RoAgAAAA1wZXJpb2RfbGVuZ3RoAAAAAA5rZXlTdGFydEhlaWdodAIAAAAMc3RhcnRfaGVpZ2h0AAAAABVrZXlGaXJzdEhhcnZlc3RIZWlnaHQCAAAAFGZpcnN0X2hhcnZlc3RfaGVpZ2h0AAAAABhrZXlEdXJhdGlvbkZ1bGxWb3RlUG93ZXICAAAAGGR1cmF0aW9uX2Z1bGxfdm90ZV9wb3dlcgAAAAALa1NoYXJlTGltaXQCAAAAHHNoYXJlX2xpbWl0X29uX2ZpcnN0X2hhcnZlc3QAAAAAD2tleU1pblZvdGVQb3dlcgIAAAAObWluX3ZvdGVfcG93ZXIAAAAADGFkbWluUHViS2V5MQEAAAAgBM915WTQwQ9OZ7kfE2TEGg3qhCRCMX0zkF1AWAqdk0oAAAAADGFkbWluUHViS2V5MgEAAAAgBM915WTQwQ9OZ7kfE2TEGg3qhCRCMX0zkF1AWAqdk0oAAAAADGFkbWluUHViS2V5MwEAAAAgBM915WTQwQ9OZ7kfE2TEGg3qhCRCMX0zkF1AWAqdk0oAAAAAFGFkbWluUHViS2V5U3RhcnRTdG9wAQAAACAEz3XlZNDBD05nuR8TZMQaDeqEJEIxfTOQXUBYCp2TSgAAAAASYWRtaW5QdWJLZXlTdGFraW5nAQAAACAEz3XlZNDBD05nuR8TZMQaDeqEJEIxfTOQXUBYCp2TSgAAAAASYWRtaW5QdWJLZXlCYWNrZW5kAQAAACAEz3XlZNDBD05nuR8TZMQaDeqEJEIxfTOQXUBYCp2TSgAAAAARZ292ZXJuYW5jZUFkZHJlc3MJAQAAAAdBZGRyZXNzAAAAAQEAAAAaAVTfPUuXiVhZ3hXg5FELVt09el+9tX+FIYkAAAAADXZvdGluZ0FkZHJlc3MJAQAAAAdBZGRyZXNzAAAAAQEAAAAaAVSynzmSWe4HFYy6ULwEhxUJJiMMr+HPVy8AAAAADnN0YWtpbmdBZGRyZXNzCQEAAAAHQWRkcmVzcwAAAAEBAAAAGgFUuYnNz0dxupdy7LhFDzOwqkmF0Q14MgJtAAAAAARVU0ROAQAAACBvJKPKqzDcUimY6CxhWu5afyNNwi11u+mdqlTg0tAHwQAAAAAQc3Rha2luZ0ZlZUluVVNETgkAAGgAAAACAAAAAAAAAAAJCQEAAAAFdmFsdWUAAAABCAkBAAAABXZhbHVlAAAAAQkAA+wAAAABBQAAAARVU0ROAAAAD21pblNwb25zb3JlZEZlZQAAAAAKYmFzZVBlcmlvZAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAADXZvdGluZ0FkZHJlc3MFAAAADWtleUJhc2VQZXJpb2QCAAAAEUVtcHR5IGtCYXNlUGVyaW9kAAAAAAtzdGFydEhlaWdodAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAADXZvdGluZ0FkZHJlc3MFAAAADmtleVN0YXJ0SGVpZ2h0AgAAABJFbXB0eSBrU3RhcnRIZWlnaHQAAAAADHBlcmlvZExlbmd0aAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAADXZvdGluZ0FkZHJlc3MFAAAAD2tleVBlcmlvZExlbmd0aAIAAAATRW1wdHkga1BlcmlvZExlbmd0aAAAAAAVZHVyYXRpb25GdWxsVm90ZVBvd2VyCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAANdm90aW5nQWRkcmVzcwUAAAAYa2V5RHVyYXRpb25GdWxsVm90ZVBvd2VyAgAAABxFbXB0eSBrRHVyYXRpb25GdWxsVm90ZVBvd2VyAAAAAAxtaW5Wb3RlUG93ZXIJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAA12b3RpbmdBZGRyZXNzBQAAAA9rZXlNaW5Wb3RlUG93ZXICAAAAE0VtcHR5IGtNaW5Wb3RlUG93ZXIAAAAACmN1cnJQZXJpb2QJAABkAAAAAgkAAGQAAAACBQAAAApiYXNlUGVyaW9kCQAAaQAAAAIJAABlAAAAAgUAAAAGaGVpZ2h0BQAAAAtzdGFydEhlaWdodAUAAAAMcGVyaW9kTGVuZ3RoAAAAAAAAAAACAAAAAAhpc0FjdGl2ZQkBAAAAEUBleHRyTmF0aXZlKDEwNTEpAAAAAgUAAAAEdGhpcwUAAAAJa2V5QWN0aXZlAAAAAAtzdHJBc3NldElkQQkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAEdGhpcwUAAAALa2V5QXNzZXRJZEEAAAAAC3N0ckFzc2V0SWRCCQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACBQAAAAR0aGlzBQAAAAtrZXlBc3NldElkQgAAAAAIYXNzZXRJZEEDCQAAAAAAAAIFAAAAC3N0ckFzc2V0SWRBAgAAAAVXQVZFUwUAAAAEdW5pdAkAAlkAAAABBQAAAAtzdHJBc3NldElkQQAAAAAIYXNzZXRJZEIDCQAAAAAAAAIFAAAAC3N0ckFzc2V0SWRCAgAAAAVXQVZFUwUAAAAEdW5pdAkAAlkAAAABBQAAAAtzdHJBc3NldElkQgAAAAAKYXNzZXROYW1lQQQAAAAHJG1hdGNoMAUAAAAI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AAAAAAAAGWFjY291bnRCYWxhbmNlV2l0aFN0YWtlZEEJAABkAAAAAgkBAAAADmFjY291bnRCYWxhbmNlAAAAAQUAAAAIYXNzZXRJZEEDCQAAAAAAAAIFAAAACGFzc2V0SWRBBQAAAARVU0ROBQAAABBzdGFrZWRBbW91bnRVU0ROAAAAAAAAAAAAAAAAABlhY2NvdW50QmFsYW5jZVdpdGhTdGFrZWRCCQAAZAAAAAIJAQAAAA5hY2NvdW50QmFsYW5jZQAAAAEFAAAACGFzc2V0SWRCAwkAAAAAAAACBQAAAAhhc3NldElkQgUAAAAEVVNETgUAAAAQc3Rha2VkQW1vdW50VVNETgAAAAAAAAAAAAAAAAAQaGFzRW5vdWdoQmFsYW5jZQMJAABnAAAAAgUAAAAZYWNjb3VudEJhbGFuY2VXaXRoU3Rha2VkQQUAAAAIYmFsYW5jZUEJAABnAAAAAgUAAAAZYWNjb3VudEJhbGFuY2VXaXRoU3Rha2VkQgUAAAAIYmFsYW5jZUIHAQAAAAxnZXRBc3NldEluZm8AAAABAAAAB2Fzc2V0SWQEAAAAByRtYXRjaDAFAAAAB2Fzc2V0SWQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAACkJ5dGVWZWN0b3IEAAAAAmlkBQAAAAckbWF0Y2gwBAAAAAhzdHJpbmdJZAkAAlgAAAABBQAAAAJpZAQAAAAEaW5mbwkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAD7AAAAAEFAAAAAmlkCQABLAAAAAIJAAEsAAAAAgIAAAAGQXNzZXQgBQAAAAhzdHJpbmdJZAIAAAAOIGRvZXNuJ3QgZXhpc3QJAAUVAAAAAwUAAAAIc3RyaW5nSWQIBQAAAARpbmZvAAAABG5hbWUIBQAAAARpbmZvAAAACGRlY2ltYWxzAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0BAAAAAV3YXZlcwUAAAAHJG1hdGNoMAkABRUAAAADAgAAAAVXQVZFUwIAAAAFV0FWRVMAAAAAAAAAAAgJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IBAAAAFmdldEFzc2V0SW5mb0Zyb21TdHJpbmcAAAABAAAACGFzc2V0U3RyAwkAAAAAAAACBQAAAAhhc3NldFN0cgIAAAAFV0FWRVMJ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ZXlBc3NldElkQgUAAAAOcG10U3RyQXNzZXRJZEIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VBBQAAAApwbXRBbW91bnRBCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAtrZXlCYWxhbmNlQgUAAAAKcG10QW1vdW50QgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAANa2V5Q29tbWlzc2lvbgUAAAAKY29tbWlzc2lvbgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAba2V5Q29tbWlzc2lvblNjYWxlRGVsaW1pdGVyBQAAABhjb21taXNzaW9uU2NhbGVEZWxpbWl0ZXIJAARMAAAAAgUAAAAKc2hhcmVJc3N1ZQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAA9rZXlTaGFyZUFzc2V0SWQJAAJYAAAAAQUAAAAMc2hhcmVJc3N1ZUlkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABNrZXlTaGFyZUFzc2V0U3VwcGx5BQAAABJzaGFyZUluaXRpYWxTdXBwbHkJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAABJzaGFyZUluaXRpYWxTdXBwbHkFAAAADHNoYXJlSXNzdWVJZAUAAAADbmlsAwUAAAAMZmlyc3RIYXJ2ZXN0CQAETgAAAAIFAAAACWJhc2VFbnRyeQkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgUAAAAPa2V5Rmlyc3RIYXJ2ZXN0BQAAAAxmaXJzdEhhcnZlc3QJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAFWtleUZpcnN0SGFydmVzdEhlaWdodAUAAAAKY3VyclBlcmlvZAUAAAADbmlsBQAAAAliYXNlRW50cnkAAAABaQEAAAARaW5pdFdpdGhJbml0UmF0aW8AAAAFAAAACWFtdEFzc2V0QQAAAAlhbXRBc3NldEIAAAALc3RyQXNzZXRJZEEAAAALc3RyQXNzZXRJZEIAAAAMZmlyc3RIYXJ2ZXN0BAAAAAskdDA4OTAxODk4OAkBAAAAFmdldEFzc2V0SW5mb0Zyb21TdHJpbmcAAAABBQAAAAtzdHJBc3NldElkQQQAAAAOcG10U3RyQXNzZXRJZEEIBQAAAAskdDA4OTAxODk4OAAAAAJfMQQAAAANcG10QXNzZXROYW1lQQgFAAAACyR0MDg5MDE4OTg4AAAAAl8yBAAAAAxwbXREZWNpbWFsc0EIBQAAAAskdDA4OTAxODk4OAAAAAJfMwQAAAALJHQwODk5MzkwODAJAQAAABZnZXRBc3NldEluZm9Gcm9tU3RyaW5nAAAAAQUAAAALc3RyQXNzZXRJZEIEAAAADnBtdFN0ckFzc2V0SWRCCAUAAAALJHQwODk5MzkwODAAAAACXzEEAAAADXBtdEFzc2V0TmFtZUIIBQAAAAskdDA4OTkzOTA4MAAAAAJfMgQAAAAMcG10RGVjaW1hbHNCCAUAAAALJHQwODk5MzkwODAAAAACXzMDCQEAAAAJaXNEZWZpbmVkAAAAAQkABBsAAAACBQAAAAR0aGlzBQAAAAlrZXlBY3RpdmUJAAACAAAAAQIAAAAWREFwcCBpcyBhbHJlYWR5IGFjdGl2ZQMJAAAAAAAAAgUAAAALc3RyQXNzZXRJZEEFAAAAC3N0ckFzc2V0SWRCCQAAAgAAAAECAAAAGEFzc2V0cyBtdXN0IGJlIGRpZmZlcmVudAQAAAAJc2hhcmVOYW1lCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAFzCQABLwAAAAIFAAAADXBtdEFzc2V0TmFtZUEAAAAAAAAAAAcCAAAAAV8JAAEvAAAAAgUAAAANcG10QXNzZXROYW1lQgAAAAAAAAAABwQAAAAQc2hhcmVEZXNjcmlwdGlvbgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAIlNoYXJlVG9rZW4gb2YgU3dvcEZpIHByb3RvY29sIGZvciAFAAAADXBtdEFzc2V0TmFtZUECAAAABSBhbmQgBQAAAA1wbXRBc3NldE5hbWVCAgAAAAwgYXQgYWRkcmVzcyAJAAQlAAAAAQUAAAAEdGhpcwQAAAANc2hhcmVEZWNpbWFscwkAAGkAAAACCQAAZAAAAAIFAAAADHBtdERlY2ltYWxzQQUAAAAMcG10RGVjaW1hbHNCAAAAAAAAAAACBAAAABJzaGFyZUluaXRpYWxTdXBwbHkAAAAAAAAAAAAEAAAACnNoYXJlSXNzdWUJAARCAAAABQUAAAAJc2hhcmVOYW1lBQAAABBzaGFyZURlc2NyaXB0aW9uBQAAABJzaGFyZUluaXRpYWxTdXBwbHkFAAAADXNoYXJlRGVjaW1hbHMGBAAAAAxzaGFyZUlzc3VlSWQJAAQ4AAAAAQUAAAAKc2hhcmVJc3N1ZQQAAAAJYmFzZUVudHJ5CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAACmtleVZlcnNpb24FAAAAB3ZlcnNpb24JAARMAAAAAgkBAAAADEJvb2xlYW5FbnRyeQAAAAIFAAAACWtleUFjdGl2ZQYJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAALa2V5QXNzZXRJZEEFAAAADnBtdFN0ckFzc2V0SWRBCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAC2tleUFzc2V0SWRCBQAAAA5wbXRTdHJBc3NldElkQgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAPa2V5QmFsYW5jZUluaXRBBQAAAAlhbXRBc3NldEEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAD2tleUJhbGFuY2VJbml0QgUAAAAJYW10QXNzZXRCCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAtrZXlCYWxhbmNlQQAAAAAAAAAAAAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAALa2V5QmFsYW5jZUIAAAAAAAAAAAAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAADWtleUNvbW1pc3Npb24FAAAACmNvbW1pc3Npb24JAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAG2tleUNvbW1pc3Npb25TY2FsZURlbGltaXRlcgUAAAAYY29tbWlzc2lvblNjYWxlRGVsaW1pdGVyCQAETAAAAAIFAAAACnNoYXJlSXNzdWUJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAPa2V5U2hhcmVBc3NldElkCQACWAAAAAEFAAAADHNoYXJlSXNzdWVJZAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAVa2V5Rmlyc3RIYXJ2ZXN0SGVpZ2h0BQAAAApjdXJyUGVyaW9kCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABNrZXlTaGFyZUFzc2V0U3VwcGx5BQAAABJzaGFyZUluaXRpYWxTdXBwbHkFAAAAA25pbAMFAAAADGZpcnN0SGFydmVzdAkABE4AAAACBQAAAAliYXNlRW50cnkJAARMAAAAAgkBAAAADEJvb2xlYW5FbnRyeQAAAAIFAAAAD2tleUZpcnN0SGFydmVzdAUAAAAMZmlyc3RIYXJ2ZXN0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABVrZXlGaXJzdEhhcnZlc3RIZWlnaHQFAAAACmN1cnJQZXJpb2QFAAAAA25pbAUAAAAJYmFzZUVudHJ5AAAAAWkBAAAAGGtlZXBMaW1pdEZvckZpcnN0SGFydmVzdAAAAAEAAAAKc2hhcmVMaW1pdAMJAQAAAAEhAAAAAQUAAAAIaXNBY3RpdmUJAAACAAAAAQIAAAAfREFwcCBpcyBpbmFjdGl2ZSBhdCB0aGlzIG1vbWVudAMJAQAAAAEhAAAAAQkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIJAARMAAAAAgUAAAAMYWRtaW5QdWJLZXkxCQAETAAAAAIFAAAADGFkbWluUHViS2V5MgkABEwAAAACBQAAAAxhZG1pblB1YktleTMJAARMAAAAAgUAAAASYWRtaW5QdWJLZXlCYWNrZW5kBQAAAANuaWwIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQkAAAIAAAABAgAAACFPbmx5IGFkbWluIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24JAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tTaGFyZUxpbWl0BQAAAApzaGFyZUxpbWl0BQAAAANuaWwAAAABaQEAAAAWcmVwbGVuaXNoV2l0aFR3b1Rva2VucwAAAAEAAAARc2xpcHBhZ2VUb2xlcmFuY2UEAAAAC3BtdEFzc2V0SWRBCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAdhc3NldElkBAAAAAtwbXRBc3NldElkQggJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAEAAAAHYXNzZXRJZAQAAAAKcG10QW1vdW50QQkBAAAAEGRlZHVjdFN0YWtpbmdGZWUAAAACCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQFAAAAC3BtdEFzc2V0SWRBBAAAAApwbXRBbW91bnRCCQEAAAAQZGVkdWN0U3Rha2luZ0ZlZQAAAAIICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABAAAABmFtb3VudAUAAAALcG10QXNzZXRJZEIDAwkAAAAAAAACBQAAAAhiYWxhbmNlQQAAAAAAAAAAAAkAAAAAAAACBQAAAAhiYWxhbmNlQgAAAAAAAAAAAAcEAAAADSR0MDExNjIyMTE2OTkJAQAAAAxnZXRBc3NldEluZm8AAAABBQAAAAtwbXRBc3NldElkQQQAAAAOcG10U3RyQXNzZXRJZEEIBQAAAA0kdDAxMTYyMjExNjk5AAAAAl8xBAAAAA1wbXRBc3NldE5hbWVBCAUAAAANJHQwMTE2MjIxMTY5OQAAAAJfMgQAAAAMcG10RGVjaW1hbHNBCAUAAAANJHQwMTE2MjIxMTY5OQAAAAJfMwQAAAANJHQwMTE3MDgxMTc4NQkBAAAADGdldEFzc2V0SW5mbwAAAAEFAAAAC3BtdEFzc2V0SWRCBAAAAA5wbXRTdHJBc3NldElkQggFAAAADSR0MDExNzA4MTE3ODUAAAACXzEEAAAADXBtdEFzc2V0TmFtZUIIBQAAAA0kdDAxMTcwODExNzg1AAAAAl8yBAAAAAxwbXREZWNpbWFsc0IIBQAAAA0kdDAxMTcwODExNzg1AAAAAl8zAwkAAAAAAAACBQAAAAtwbXRBc3NldElkQQUAAAALcG10QXNzZXRJZEIJAAACAAAAAQIAAAAYQXNzZXRzIG11c3QgYmUgZGlmZmVyZW50BAAAAA1zaGFyZURlY2ltYWxzCQAAaQAAAAIJAABkAAAAAgUAAAAMcG10RGVjaW1hbHNBBQAAAAxwbXREZWNpbWFsc0IAAAAAAAAAAAIEAAAAEnNoYXJlSW5pdGlhbFN1cHBseQkAAGsAAAADCQAAbAAAAAYFAAAACnBtdEFtb3Vu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AAhiYWxhbmNlQQUAAAALc2NhbGVWYWx1ZTgFAAAACnBtdEFtb3VudEEFAAAAC3NjYWxlVmFsdWUzCQAAawAAAAMFAAAACGJhbGFuY2VCBQAAAAtzY2FsZVZhbHVlOAUAAAAKcG10QW1vdW50QgQAAAATcmF0aW9TaGFyZVRva2Vuc0luQQkAAGsAAAADBQAAAApwbXRBbW91bnRBBQAAAAtzY2FsZVZhbHVlOAUAAAAIYmFsYW5jZUEEAAAAE3JhdGlvU2hhcmVUb2tlbnNJbkIJAABrAAAAAwUAAAAKcG10QW1vdW50QgUAAAALc2NhbGVWYWx1ZTgFAAAACGJhbGFuY2VCBAAAABVzaGFyZVRva2VuVG9QYXlBbW91bnQJAABrAAAAAwkAAZcAAAABCQAETAAAAAIFAAAAE3JhdGlvU2hhcmVUb2tlbnNJbkEJAARMAAAAAgUAAAATcmF0aW9TaGFyZVRva2Vuc0luQgUAAAADbmlsBQAAABBzaGFyZUFzc2V0U3VwcGx5BQAAAAtzY2FsZVZhbHVlOAMJAQAAAAEhAAAAAQUAAAAIaXNBY3RpdmUJAAACAAAAAQIAAAAfREFwcCBpcyBpbmFjdGl2ZSBhdCB0aGlzIG1vbWVudAMDCQAAZgAAAAIAAAAAAAAAAAAFAAAAEXNsaXBwYWdlVG9sZXJhbmNlBgkAAGYAAAACBQAAABFzbGlwcGFnZVRvbGVyYW5jZQUAAAAac2xpcHBhZ2VUb2xlcmFuY2VEZWxpbWl0ZXIJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAApU2xpcHBhZ2UgdG9sZXJhbmNlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAJAAGkAAAAAQUAAAAac2xpcHBhZ2VUb2xlcmFuY2VEZWxpbWl0ZXICAAAAFiBpbmNsdXNpdmVseS4gQWN0dWFsOiAJAAGkAAAAAQUAAAARc2xpcHBhZ2VUb2xlcmFuY2UDCQEAAAACIT0AAAACCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAACCQAAAgAAAAECAAAAHFR3byBhdHRhY2hlZCBhc3NldHMgZXhwZWN0ZWQDAwkBAAAAAiE9AAAAAgUAAAALcG10QXNzZXRJZEEFAAAACGFzc2V0SWRBBgkBAAAAAiE9AAAAAgUAAAALcG10QXNzZXRJZEIFAAAACGFzc2V0SWRCCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAJUluY29ycmVjdCBhc3NldHMgYXR0YWNoZWQuIEV4cGVjdGVkOiAFAAAAC3N0ckFzc2V0SWRBAgAAAAUgYW5kIAUAAAALc3RyQXNzZXRJZEIDAwkAAGYAAAACCQAAaQAAAAIJAABoAAAAAgUAAAALc2NhbGVWYWx1ZTMJAABlAAAAAgUAAAAac2xpcHBhZ2VUb2xlcmFuY2VEZWxpbWl0ZXIFAAAAEXNsaXBwYWdlVG9sZXJhbmNlBQAAABpzbGlwcGFnZVRvbGVyYW5jZURlbGltaXRlcgUAAAAKdG9rZW5SYXRpbwYJAABmAAAAAgUAAAAKdG9rZW5SYXRpbwkAAGkAAAACCQAAaAAAAAIFAAAAC3NjYWxlVmFsdWUzCQAAZAAAAAIFAAAAGnNsaXBwYWdlVG9sZXJhbmNlRGVsaW1pdGVyBQAAABFzbGlwcGFnZVRvbGVyYW5jZQUAAAAac2xpcHBhZ2VUb2xlcmFuY2VEZWxpbWl0ZXIJAAACAAAAAQIAAAA9SW5jb3JyZWN0IGFzc2V0cyBhbW91bnQ6IGFtb3VudHMgbXVzdCBoYXZlIHRoZSBjb250cmFjdCByYXRpbwMJAAAAAAAAAgUAAAAVc2hhcmVUb2tlblRvUGF5QW1vdW50AAAAAAAAAAAACQAAAgAAAAECAAAAHVRvbyBzbWFsbCBhbW91bnQgdG8gcmVwbGVuaXNoAwkBAAAAASEAAAABBQAAABBoYXNFbm91Z2hCYWxhbmNlCQEAAAAHc3VzcGVuZAAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAI1N1c3BpY2lvdXMgc3RhdGUuIEFjdHVhbCBiYWxhbmNlczogCQABpAAAAAEFAAAACGJhbGFuY2VBAgAAAAEgBQAAAAphc3NldE5hbWVBAgAAAAIsIAkAAaQAAAABBQAAAAhiYWxhbmNlQgIAAAABIAUAAAAKYXNzZXROYW1lQgIAAAAJLiBTdGF0ZTogCQABpAAAAAEJAQAAAA5hY2NvdW50QmFsYW5jZQAAAAEFAAAACGFzc2V0SWRBAgAAAAEgBQAAAAphc3NldE5hbWVBAgAAAAIsIAkAAaQAAAABCQEAAAAOYWNjb3VudEJhbGFuY2UAAAABBQAAAAhhc3NldElkQgIAAAABIAUAAAAKYXNzZXROYW1lQgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAALa2V5QmFsYW5jZUEJAABkAAAAAgUAAAAIYmFsYW5jZUEFAAAACnBtdEFtb3VudEEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VCCQAAZAAAAAIFAAAACGJhbGFuY2VCBQAAAApwbXRBbW91bnRCCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABNrZXlTaGFyZUFzc2V0U3VwcGx5CQAAZAAAAAIFAAAAEHNoYXJlQXNzZXRTdXBwbHkFAAAAFXNoYXJlVG9rZW5Ub1BheUFtb3VudAkABEwAAAACCQEAAAAHUmVpc3N1ZQAAAAMFAAAADHNoYXJlQXNzZXRJZAUAAAAVc2hhcmVUb2tlblRvUGF5QW1vdW50BgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAAFXNoYXJlVG9rZW5Ub1BheUFtb3VudAUAAAAMc2hhcmVBc3NldElkBQAAAANuaWwAAAABaQEAAAAId2l0aGRyYXcAAAAABAAAAA0kdDAxNTkyNjE2MDc2CQAFFAAAAAIICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAABmFtb3VudAgJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAHYXNzZXRJZAQAAAAJcG10QW1vdW50CAUAAAANJHQwMTU5MjYxNjA3NgAAAAJfMQQAAAAKcG10QXNzZXRJZAgFAAAADSR0MDE1OTI2MTYwNzYAAAACXzIEAAAADGFtb3VudFRvUGF5QQkBAAAAEGRlZHVjdFN0YWtpbmdGZWUAAAACCQAAawAAAAMFAAAACXBtdEFtb3VudAUAAAAIYmFsYW5jZUEFAAAAEHNoYXJlQXNzZXRTdXBwbHkFAAAACGFzc2V0SWRBBAAAAAxhbW91bnRUb1BheUIJAQAAABBkZWR1Y3RTdGFraW5nRmVlAAAAAgkAAGsAAAADBQAAAAlwbXRBbW91bnQFAAAACGJhbGFuY2VCBQAAABBzaGFyZUFzc2V0U3VwcGx5BQAAAAhhc3NldElkQgMJAQAAAAEhAAAAAQUAAAAIaXNBY3RpdmUJAAACAAAAAQIAAAAfREFwcCBpcyBpbmFjdGl2ZSBhdCB0aGlzIG1vbWVudAMJAQAAAAIhPQAAAAIJAAGQAAAAAQgFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAEJAAACAAAAAQIAAAAdT25lIGF0dGFjaGVkIHBheW1lbnQgZXhwZWN0ZWQDCQEAAAACIT0AAAACBQAAAApwbXRBc3NldElkBQAAAAxzaGFyZUFzc2V0SWQJAAACAAAAAQkAASwAAAACAgAAACRJbmNvcnJlY3QgYXNzZXQgYXR0YWNoZWQuIEV4cGVjdGVkOiAJAAJYAAAAAQUAAAAMc2hhcmVBc3NldElkAwkBAAAAASEAAAABBQAAABBoYXNFbm91Z2hCYWxhbmNlCQEAAAAHc3VzcGVuZAAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAI1N1c3BpY2lvdXMgc3RhdGUuIEFjdHVhbCBiYWxhbmNlczogCQABpAAAAAEFAAAACGJhbGFuY2VBAgAAAAEgBQAAAAphc3NldE5hbWVBAgAAAAIsIAkAAaQAAAABBQAAAAhiYWxhbmNlQgIAAAABIAUAAAAKYXNzZXROYW1lQgIAAAAJLiBTdGF0ZTogCQABpAAAAAEJAQAAAA5hY2NvdW50QmFsYW5jZQAAAAEFAAAACGFzc2V0SWRBAgAAAAEgBQAAAAphc3NldE5hbWVBAgAAAAIsIAkAAaQAAAABCQEAAAAOYWNjb3VudEJhbGFuY2UAAAABBQAAAAhhc3NldElkQgIAAAABIAUAAAAKYXNzZXROYW1lQgMDCQAAZgAAAAIFAAAADGFtb3VudFRvUGF5QQUAAAARYXZhaWxhYmxlQmFsYW5jZUEGCQAAZgAAAAIFAAAADGFtb3VudFRvUGF5QgUAAAARYXZhaWxhYmxlQmFsYW5jZUIJAQAAACJ0aHJvd0luc3VmZmljaWVudEF2YWlsYWJsZUJhbGFuY2VzAAAAAgUAAAAMYW1vdW50VG9QYXlBBQAAAAxhbW91bnRUb1BheUIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VBCQAAZQAAAAIFAAAACGJhbGFuY2VBBQAAAAxhbW91bnRUb1BheUEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VCCQAAZQAAAAIFAAAACGJhbGFuY2VCBQAAAAxhbW91bnRUb1BheUIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAE2tleVNoYXJlQXNzZXRTdXBwbHkJAABlAAAAAgUAAAAQc2hhcmVBc3NldFN1cHBseQUAAAAJcG10QW1vdW50CQAETAAAAAIJAQAAAARCdXJuAAAAAgUAAAAMc2hhcmVBc3NldElkBQAAAAlwbXRBbW91bnQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAAxhbW91bnRUb1BheUEFAAAACGFzc2V0SWRBCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAMYW1vdW50VG9QYXlCBQAAAAhhc3NldElkQgUAAAADbmlsAAAAAWkBAAAACGV4Y2hhbmdlAAAAAQAAABJtaW5BbW91bnRUb1JlY2VpdmUEAAAADSR0MDE3NDY2MTc1NDEJAAUUAAAAAggJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50CAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAdhc3NldElkBAAAAAlwbXRBbW91bnQIBQAAAA0kdDAxNzQ2NjE3NTQxAAAAAl8xBAAAAApwbXRBc3NldElkCAUAAAANJHQwMTc0NjYxNzU0MQAAAAJfMgoBAAAADWNhbGN1bGF0ZUZlZXMAAAACAAAACXRva2VuRnJvbQAAAAd0b2tlblRvBAAAABBhbW91bnRXaXRob3V0RmVlCQAAawAAAAMFAAAAB3Rva2VuVG8FAAAACXBtdEFtb3VudAkAAGQAAAACBQAAAAlwbXRBbW91bnQFAAAACXRva2VuRnJvbQQAAAANYW1vdW50V2l0aEZlZQkAAGsAAAADBQAAABBhbW91bnRXaXRob3V0RmVlCQAAZQAAAAIFAAAAGGNvbW1pc3Npb25TY2FsZURlbGltaXRlcgUAAAAKY29tbWlzc2lvbgUAAAAYY29tbWlzc2lvblNjYWxlRGVsaW1pdGVyBAAAABBnb3Zlcm5hbmNlUmV3YXJkCQAAawAAAAMFAAAAEGFtb3VudFdpdGhvdXRGZWUFAAAAFGNvbW1pc3Npb25Hb3Zlcm5hbmNlBQAAABhjb21taXNzaW9uU2NhbGVEZWxpbWl0ZXIDCQAAZgAAAAIFAAAAEm1pbkFtb3VudFRvUmVjZWl2ZQUAAAANYW1vdW50V2l0aEZlZQkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAB1DYWxjdWxhdGVkIGFtb3VudCB0byByZWNlaXZlIAkAAaQAAAABBQAAAA1hbW91bnRXaXRoRmVlAgAAACAgaXMgbGVzcyB0aGFuIHNwZWNpZmllZCBtaW5pbXVtIAkAAaQAAAABBQAAABJtaW5BbW91bnRUb1JlY2VpdmUJAAUVAAAAAwUAAAAQYW1vdW50V2l0aG91dEZlZQUAAAANYW1vdW50V2l0aEZlZQUAAAAQZ292ZXJuYW5jZVJld2FyZAMJAQAAAAEhAAAAAQUAAAAIaXNBY3RpdmUJAAACAAAAAQIAAAAfREFwcCBpcyBpbmFjdGl2ZSBhdCB0aGlzIG1vbWVudAMDCQAAAAAAAAIFAAAACGJhbGFuY2VBAAAAAAAAAAAACQAAAAAAAAIFAAAACGJhbGFuY2VCAAAAAAAAAAAABwkAAAIAAAABAgAAACBDYW4ndCBleGNoYW5nZSB3aXRoIHplcm8gYmFsYW5jZQMJAABnAAAAAgAAAAAAAAAAAAUAAAASbWluQW1vdW50VG9SZWNlaXZlCQAAAgAAAAEJAAEsAAAAAgIAAAA0TWluaW1hbCBhbW91bnQgdG8gcmVjZWl2ZSBtdXN0IGJlIHBvc2l0aXZlLiBBY3R1YWw6IAkAAaQAAAABBQAAABJtaW5BbW91bnRUb1JlY2VpdmUDCQEAAAACIT0AAAACCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABCQAAAgAAAAECAAAAHU9uZSBhdHRhY2hlZCBwYXltZW50IGV4cGVjdGVkAwkBAAAAASEAAAABBQAAABBoYXNFbm91Z2hCYWxhbmNlCQEAAAAHc3VzcGVuZAAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAI1N1c3BpY2lvdXMgc3RhdGUuIEFjdHVhbCBiYWxhbmNlczogCQABpAAAAAEFAAAACGJhbGFuY2VBAgAAAAEgBQAAAAphc3NldE5hbWVBAgAAAAIsIAkAAaQAAAABBQAAAAhiYWxhbmNlQgIAAAABIAUAAAAKYXNzZXROYW1lQgIAAAAJLiBTdGF0ZTogCQABpAAAAAEJAQAAAA5hY2NvdW50QmFsYW5jZQAAAAEFAAAACGFzc2V0SWRBAgAAAAEgBQAAAAphc3NldE5hbWVBAgAAAAIsIAkAAaQAAAABCQEAAAAOYWNjb3VudEJhbGFuY2UAAAABBQAAAAhhc3NldElkQgIAAAABIAUAAAAKYXNzZXROYW1lQgMJAAAAAAAAAgUAAAAKcG10QXNzZXRJZAUAAAAIYXNzZXRJZEEEAAAAC2Fzc2V0SWRTZW5kBQAAAAhhc3NldElkQgQAAAANJHQwMTkwMDAxOTA5MQkBAAAADWNhbGN1bGF0ZUZlZXMAAAACBQAAAAhiYWxhbmNlQQUAAAAIYmFsYW5jZUIEAAAAEGFtb3VudFdpdGhvdXRGZWUIBQAAAA0kdDAxOTAwMDE5MDkxAAAAAl8xBAAAAA1hbW91bnRXaXRoRmVlCAUAAAANJHQwMTkwMDAxOTA5MQAAAAJfMgQAAAAQZ292ZXJuYW5jZVJld2FyZAgFAAAADSR0MDE5MDAwMTkwOTEAAAACXzMEAAAAC25ld0JhbGFuY2VBCQAAZAAAAAIFAAAACGJhbGFuY2VBBQAAAAlwbXRBbW91bnQEAAAAC25ld0JhbGFuY2VCCQAAZQAAAAIJAABlAAAAAgUAAAAIYmFsYW5jZUIFAAAADWFtb3VudFdpdGhGZWUFAAAAEGdvdmVybmFuY2VSZXdhcmQDAwMJAAAAAAAAAgUAAAAIYXNzZXRJZEEFAAAABFVTRE4JAABnAAAAAgUAAAAQc3Rha2VkQW1vdW50VVNETgUAAAALbmV3QmFsYW5jZUEHBgMJAAAAAAAAAgUAAAAIYXNzZXRJZEIFAAAABFVTRE4JAABnAAAAAgUAAAAQc3Rha2VkQW1vdW50VVNETgUAAAALbmV3QmFsYW5jZUIHCQEAAAAhdGhyb3dJbnN1ZmZpY2llbnRBdmFpbGFibGVCYWxhbmNlAAAAAwUAAAANYW1vdW50V2l0aEZlZQUAAAARYXZhaWxhYmxlQmFsYW5jZUIFAAAACmFzc2V0TmFtZUIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VBBQAAAAtuZXdCYWxhbmNlQQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAALa2V5QmFsYW5jZUIFAAAAC25ld0JhbGFuY2VCCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAANYW1vdW50V2l0aEZlZQUAAAALYXNzZXRJZFNlbmQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAARZ292ZXJuYW5jZUFkZHJlc3MFAAAAEGdvdmVybmFuY2VSZXdhcmQFAAAAC2Fzc2V0SWRTZW5kBQAAAANuaWwDCQAAAAAAAAIFAAAACnBtdEFzc2V0SWQFAAAACGFzc2V0SWRCBAAAAAthc3NldElkU2VuZAUAAAAIYXNzZXRJZEEEAAAADSR0MDE5OTY0MjAwNTUJAQAAAA1jYWxjdWxhdGVGZWVzAAAAAgUAAAAIYmFsYW5jZUIFAAAACGJhbGFuY2VBBAAAABBhbW91bnRXaXRob3V0RmVlCAUAAAANJHQwMTk5NjQyMDA1NQAAAAJfMQQAAAANYW1vdW50V2l0aEZlZQgFAAAADSR0MDE5OTY0MjAwNTUAAAACXzIEAAAAEGdvdmVybmFuY2VSZXdhcmQIBQAAAA0kdDAxOTk2NDIwMDU1AAAAAl8zBAAAAAtuZXdCYWxhbmNlQQkAAGUAAAACCQAAZQAAAAIFAAAACGJhbGFuY2VBBQAAAA1hbW91bnRXaXRoRmVlBQAAABBnb3Zlcm5hbmNlUmV3YXJkBAAAAAtuZXdCYWxhbmNlQgkAAGQAAAACBQAAAAhiYWxhbmNlQgUAAAAJcG10QW1vdW50AwMDCQAAAAAAAAIFAAAACGFzc2V0SWRBBQAAAARVU0ROCQAAZwAAAAIFAAAAEHN0YWtlZEFtb3VudFVTRE4FAAAAC25ld0JhbGFuY2VBBwYDCQAAAAAAAAIFAAAACGFzc2V0SWRCBQAAAARVU0ROCQAAZwAAAAIFAAAAEHN0YWtlZEFtb3VudFVTRE4FAAAAC25ld0JhbGFuY2VCBwkBAAAAIXRocm93SW5zdWZmaWNpZW50QXZhaWxhYmxlQmFsYW5jZQAAAAMFAAAADWFtb3VudFdpdGhGZWUFAAAAEWF2YWlsYWJsZUJhbGFuY2VBBQAAAAphc3NldE5hbWVBCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAtrZXlCYWxhbmNlQQUAAAALbmV3QmFsYW5jZUEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VCBQAAAAtuZXdCYWxhbmNlQgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAADWFtb3VudFdpdGhGZWUFAAAAC2Fzc2V0SWRTZW5kCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAEWdvdmVybmFuY2VBZGRyZXNzBQAAABBnb3Zlcm5hbmNlUmV3YXJkBQAAAAthc3NldElkU2VuZAUAAAADbmlsCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAJEluY29ycmVjdCBhc3NldCBhdHRhY2hlZC4gRXhwZWN0ZWQ6IAUAAAALc3RyQXNzZXRJZEECAAAABCBvciAFAAAAC3N0ckFzc2V0SWRCAAAAAWkBAAAACHNodXRkb3duAAAAAAMJAQAAAAEhAAAAAQUAAAAIaXNBY3RpdmUJAAACAAAAAQkAASwAAAACAgAAACJEQXBwIGlzIGFscmVhZHkgc3VzcGVuZGVkLiBDYXVzZTogCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAABHRoaXMFAAAACGtleUNhdXNlAgAAABp0aGUgY2F1c2Ugd2Fzbid0IHNwZWNpZmllZAMJAQAAAAEhAAAAAQkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIJAARMAAAAAgUAAAAMYWRtaW5QdWJLZXkxCQAETAAAAAIFAAAADGFkbWluUHViS2V5MgkABEwAAAACBQAAAAxhZG1pblB1YktleTMJAARMAAAAAgUAAAAUYWRtaW5QdWJLZXlTdGFydFN0b3AFAAAAA25pbAgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5CQAAAgAAAAECAAAAIU9ubHkgYWRtaW4gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgkBAAAAB3N1c3BlbmQAAAABAgAAAA9QYXVzZWQgYnkgYWRtaW4AAAABaQEAAAAIYWN0aXZhdGUAAAAAAwUAAAAIaXNBY3RpdmUJAAACAAAAAQIAAAAWREFwcCBpcyBhbHJlYWR5IGFjdGl2ZQMJAQAAAAEhAAAAAQkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIJAARMAAAAAgUAAAAMYWRtaW5QdWJLZXkxCQAETAAAAAIFAAAADGFkbWluUHViS2V5MgkABEwAAAACBQAAAAxhZG1pblB1YktleTMJAARMAAAAAgUAAAAUYWRtaW5QdWJLZXlTdGFydFN0b3AFAAAAA25pbAgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5CQAAAgAAAAECAAAAIU9ubHkgYWRtaW4gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgUAAAAJa2V5QWN0aXZlBgkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABBQAAAAhrZXlDYXVzZQUAAAADbmlsAAAAAWkBAAAAGXRha2VJbnRvQWNjb3VudEV4dHJhRnVuZHMAAAABAAAAC2Ftb3VudExlYXZlBAAAAB11bmNvdW50YWJsZUFtb3VudEVucm9sbEFzc2V0QQkAAGUAAAACBQAAABlhY2NvdW50QmFsYW5jZVdpdGhTdGFrZWRBBQAAAAhiYWxhbmNlQQQAAAAddW5jb3VudGFibGVBbW91bnRFbnJvbGxBc3NldEIJAABlAAAAAgUAAAAZYWNjb3VudEJhbGFuY2VXaXRoU3Rha2VkQgUAAAAIYmFsYW5jZUIEAAAADWFtb3VudEVucm9sbEEJAABlAAAAAgUAAAAddW5jb3VudGFibGVBbW91bnRFbnJvbGxBc3NldEEDCQAAAAAAAAIFAAAACGFzc2V0SWRBBQAAAARVU0ROBQAAAAthbW91bnRMZWF2ZQAAAAAAAAAAAAQAAAANYW1vdW50RW5yb2xsQgkAAGUAAAACBQAAAB11bmNvdW50YWJsZUFtb3VudEVucm9sbEFzc2V0QgMJAAAAAAAAAgUAAAAIYXNzZXRJZEIFAAAABFVTRE4FAAAAC2Ftb3VudExlYXZlAAAAAAAAAAAAAwkBAAAAASEAAAABBQAAAAhpc0FjdGl2ZQkAAAIAAAABAgAAAB9EQXBwIGlzIGluYWN0aXZlIGF0IHRoaXMgbW9tZW50AwkBAAAAAiE9AAAAAggFAAAAAWkAAAAGY2FsbGVyBQAAAAR0aGlzCQAAAgAAAAECAAAAK09ubHkgdGhlIERBcHAgaXRzZWxmIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24DCQAAZgAAAAIAAAAAAAAAAAAFAAAAC2Ftb3VudExlYXZlCQAAAgAAAAEJAAEsAAAAAgIAAAAzQXJndW1lbnQgJ2Ftb3VudExlYXZlJyBjYW5ub3QgYmUgbmVnYXRpdmUuIEFjdHVhbDogCQABpAAAAAEFAAAAC2Ftb3VudExlYXZlAwMJAABmAAAAAgAAAAAAAAAAAAUAAAAddW5jb3VudGFibGVBbW91bnRFbnJvbGxBc3NldEEGCQAAZgAAAAIAAAAAAAAAAAAFAAAAHXVuY291bnRhYmxlQW1vdW50RW5yb2xsQXNzZXRCCQEAAAAHc3VzcGVuZAAAAAECAAAAFkVucm9sbCBhbW91bnQgbmVnYXRpdmUDAwkAAGYAAAACAAAAAAAAAAAABQAAAA1hbW91bnRFbnJvbGxBBgkAAGYAAAACAAAAAAAAAAAABQAAAA1hbW91bnRFbnJvbGxCCQAAAgAAAAECAAAAFVRvbyBsYXJnZSBhbW91bnRMZWF2ZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAALa2V5QmFsYW5jZUEJAABkAAAAAgUAAAAIYmFsYW5jZUEFAAAADWFtb3VudEVucm9sbEEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VCCQAAZAAAAAIFAAAACGJhbGFuY2VCBQAAAA1hbW91bnRFbnJvbGxCCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAICAAAADGxhc3RfaW5jb21lXwUAAAALc3RyQXNzZXRJZEEFAAAADWFtb3VudEVucm9sbEEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgIAAAAMbGFzdF9pbmNvbWVfBQAAAAtzdHJBc3NldElkQgUAAAANYW1vdW50RW5yb2xsQgUAAAADbmlsAAAAAQAAAAJ0eAEAAAAGdmVyaWZ5AAAAAAQAAAAHJG1hdGNoMAUAAAACdHgDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAF0ludm9rZVNjcmlwdFRyYW5zYWN0aW9uBAAAAAZpbnZva2UFAAAAByRtYXRjaDAEAAAAE2NhbGxUYWtlSW50b0FjY291bnQDCQAAAAAAAAIIBQAAAAZpbnZva2UAAAAEZEFwcAUAAAAEdGhpcwkAAAAAAAACCAUAAAAGaW52b2tlAAAACGZ1bmN0aW9uAgAAABl0YWtlSW50b0FjY291bnRFeHRyYUZ1bmRzBwQAAAALY2FsbFN0YWtpbmcDCQAAAAAAAAIIBQAAAAZpbnZva2UAAAAEZEFwcAUAAAAOc3Rha2luZ0FkZHJlc3MDAwMJAAAAAAAAAggFAAAABmludm9rZQAAAAhmdW5jdGlvbgIAAAAMbG9ja05ldXRyaW5vCQAAAAAAAAIJAAGQAAAAAQgFAAAABmludm9rZQAAAAhwYXltZW50cwAAAAAAAAAAAQcJAAAAAAAAAggJAAGRAAAAAggFAAAABmludm9rZQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAdhc3NldElkBQAAAARVU0ROBwYDCQAAAAAAAAIIBQAAAAZpbnZva2UAAAAIZnVuY3Rpb24CAAAADnVubG9ja05ldXRyaW5vCQAAAAAAAAIJAAGQAAAAAQgFAAAABmludm9rZQAAAAhwYXltZW50cwAAAAAAAAAAAAcHBAAAAA1zaWduZWRCeUFkbWluAwMDCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAUAAAAMYWRtaW5QdWJLZXkxBgkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAFAAAADGFkbWluUHViS2V5MgYJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAABQAAAAxhZG1pblB1YktleTMGCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAUAAAASYWRtaW5QdWJLZXlTdGFraW5nAwUAAAATY2FsbFRha2VJbnRvQWNjb3VudAYFAAAAC2NhbGxTdGFraW5nCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAgFAAAAAnR4AAAAD3NlbmRlclB1YmxpY0tleQBYARA=", "height": 1532692, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: ECyExyzc8KGgEMA6xkaJb7QDxddPHizitBrLkN8knYUi Next: none Diff:
OldNewDifferences
4141
4242 let t = "duration_full_vote_power"
4343
44-let u = "min_vote_power"
44+let u = "share_limit_on_first_harvest"
4545
46-let v = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
46+let v = "min_vote_power"
4747
4848 let w = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
4949
5353
5454 let z = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
5555
56-let A = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
56+let A = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
5757
58-let B = Address(base58'3N6CYoCsxrcXKe75pQvvV3JqJrwJjm1t4QN')
58+let B = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
5959
60-let C = Address(base58'3N6q7sCGSSLBUXDdjBdYGTJbZGZfhhh8cNg')
60+let C = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
6161
62-let D = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
62+let D = Address(base58'3N6CYoCsxrcXKe75pQvvV3JqJrwJjm1t4QN')
6363
64-let E = (9 * value(value(assetInfo(D)).minSponsoredFee))
64+let E = Address(base58'3N6q7sCGSSLBUXDdjBdYGTJbZGZfhhh8cNg')
6565
66-let F = valueOrErrorMessage(getInteger(B, p), "Empty kBasePeriod")
66+let F = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
6767
68-let G = valueOrErrorMessage(getInteger(B, r), "Empty kStartHeight")
68+let G = (9 * value(value(assetInfo(F)).minSponsoredFee))
6969
70-let H = valueOrErrorMessage(getInteger(B, q), "Empty kPeriodLength")
70+let H = valueOrErrorMessage(getInteger(D, p), "Empty kBasePeriod")
7171
72-let I = valueOrErrorMessage(getInteger(B, t), "Empty kDurationFullVotePower")
72+let I = valueOrErrorMessage(getInteger(D, r), "Empty kStartHeight")
7373
74-let J = valueOrErrorMessage(getInteger(B, u), "Empty kMinVotePower")
74+let J = valueOrErrorMessage(getInteger(D, q), "Empty kPeriodLength")
7575
76-let K = Address(base58'3MzJZEn6jzxCPaHEfkrXd7FhbjTyVjdRPLS')
76+let K = valueOrErrorMessage(getInteger(D, t), "Empty kDurationFullVotePower")
7777
78-let L = ((F + ((height - G) / H)) + 2)
78+let L = valueOrErrorMessage(getInteger(D, v), "Empty kMinVotePower")
7979
80-let M = getBooleanValue(this, c)
80+let M = ((H + ((height - I) / J)) + 2)
8181
82-let N = getStringValue(this, d)
82+let N = getBooleanValue(this, c)
8383
84-let O = getStringValue(this, e)
84+let O = getStringValue(this, d)
8585
86-let P = if ((N == "WAVES"))
87- then unit
88- else fromBase58String(N)
86+let P = getStringValue(this, e)
8987
9088 let Q = if ((O == "WAVES"))
9189 then unit
9290 else fromBase58String(O)
9391
94-let R = {
95- let S = P
96- if ($isInstanceOf(S, "ByteVector"))
92+let R = if ((P == "WAVES"))
93+ then unit
94+ else fromBase58String(P)
95+
96+let S = {
97+ let T = Q
98+ if ($isInstanceOf(T, "ByteVector"))
9799 then {
98- let T = S
99- value(assetInfo(T)).name
100+ let U = T
101+ value(assetInfo(U)).name
100102 }
101- else if ($isInstanceOf(S, "Unit"))
103+ else if ($isInstanceOf(T, "Unit"))
102104 then {
103- let U = S
105+ let V = T
104106 "WAVES"
105107 }
106108 else throw("Match error")
107109 }
108110
109-let V = {
110- let S = Q
111- if ($isInstanceOf(S, "ByteVector"))
111+let W = {
112+ let T = R
113+ if ($isInstanceOf(T, "ByteVector"))
112114 then {
113- let T = S
114- value(assetInfo(T)).name
115+ let U = T
116+ value(assetInfo(U)).name
115117 }
116- else if ($isInstanceOf(S, "Unit"))
118+ else if ($isInstanceOf(T, "Unit"))
117119 then {
118- let U = S
120+ let V = T
119121 "WAVES"
120122 }
121123 else throw("Match error")
122124 }
123125
124-let W = getIntegerValue(this, f)
126+let X = getIntegerValue(this, f)
125127
126-let X = getIntegerValue(this, g)
128+let Y = getIntegerValue(this, g)
127129
128-let Y = fromBase58String(getStringValue(this, j))
130+let Z = fromBase58String(getStringValue(this, j))
129131
130-let Z = getIntegerValue(this, k)
132+let aa = getIntegerValue(this, k)
131133
132-let aa = 3000
134+let ab = 3000
133135
134-let ab = 1200
136+let ac = 1200
135137
136-let ac = 1000000
138+let ad = 1000000
137139
138-let ad = 1000
140+let ae = 1000
139141
140-let ae = 100000000
142+let af = 100000000
141143
142-let af = 1000
144+let ag = 1000
143145
144-let ag = 8
146+let ah = 8
145147
146-func ah (ai) = {
147- let S = ai
148- if ($isInstanceOf(S, "ByteVector"))
148+func ai (aj) = {
149+ let T = aj
150+ if ($isInstanceOf(T, "ByteVector"))
149151 then {
150- let T = S
151- assetBalance(this, T)
152+ let U = T
153+ assetBalance(this, U)
152154 }
153- else if ($isInstanceOf(S, "Unit"))
155+ else if ($isInstanceOf(T, "Unit"))
154156 then {
155- let U = S
157+ let V = T
156158 wavesBalance(this).available
157159 }
158160 else throw("Match error")
159161 }
160162
161163
162-let aj = {
163- let S = getInteger(C, ((("rpd_balance_" + toBase58String(D)) + "_") + toString(this)))
164- if ($isInstanceOf(S, "Int"))
164+let ak = {
165+ let T = getInteger(E, ((("rpd_balance_" + toBase58String(F)) + "_") + toString(this)))
166+ if ($isInstanceOf(T, "Int"))
165167 then {
166- let ak = S
167- ak
168+ let al = T
169+ al
168170 }
169- else if ($isInstanceOf(S, "Unit"))
171+ else if ($isInstanceOf(T, "Unit"))
170172 then {
171- let al = S
173+ let am = T
172174 0
173175 }
174176 else throw("Match error")
175177 }
176178
177-let am = getIntegerValue(this, h)
179+let an = getIntegerValue(this, h)
178180
179-let an = getIntegerValue(this, i)
181+let ao = getIntegerValue(this, i)
180182
181-let ao = (W - (if ((P == D))
182- then aj
183+let ap = (X - (if ((Q == F))
184+ then ak
183185 else 0))
184186
185-let ap = (X - (if ((Q == D))
186- then aj
187+let aq = (Y - (if ((R == F))
188+ then ak
187189 else 0))
188190
189-let aq = (ah(P) + (if ((P == D))
190- then aj
191+let ar = (ai(Q) + (if ((Q == F))
192+ then ak
191193 else 0))
192194
193-let ar = (ah(Q) + (if ((Q == D))
194- then aj
195+let as = (ai(R) + (if ((R == F))
196+ then ak
195197 else 0))
196198
197-let as = if ((aq >= W))
198- then (ar >= X)
199+let at = if ((ar >= X))
200+ then (as >= Y)
199201 else false
200202
201-func at (ai) = {
202- let S = ai
203- if ($isInstanceOf(S, "ByteVector"))
203+func au (aj) = {
204+ let T = aj
205+ if ($isInstanceOf(T, "ByteVector"))
204206 then {
205- let T = S
206- let au = toBase58String(T)
207- let av = valueOrErrorMessage(assetInfo(T), (("Asset " + au) + " doesn't exist"))
208- $Tuple3(au, av.name, av.decimals)
207+ let U = T
208+ let av = toBase58String(U)
209+ let aw = valueOrErrorMessage(assetInfo(U), (("Asset " + av) + " doesn't exist"))
210+ $Tuple3(av, aw.name, aw.decimals)
209211 }
210- else if ($isInstanceOf(S, "Unit"))
212+ else if ($isInstanceOf(T, "Unit"))
211213 then {
212- let U = S
214+ let V = T
213215 $Tuple3("WAVES", "WAVES", 8)
214216 }
215217 else throw("Match error")
216218 }
217219
218220
219-func aw (ax) = if ((ax == "WAVES"))
221+func ax (ay) = if ((ay == "WAVES"))
220222 then $Tuple3("WAVES", "WAVES", 8)
221223 else {
222- let au = ax
223- let T = fromBase58String(ax)
224- let av = valueOrErrorMessage(assetInfo(T), (("Asset " + au) + " doesn't exist"))
225- $Tuple3(au, av.name, av.decimals)
224+ let av = ay
225+ let U = fromBase58String(ay)
226+ let aw = valueOrErrorMessage(assetInfo(U), (("Asset " + av) + " doesn't exist"))
227+ $Tuple3(av, aw.name, aw.decimals)
226228 }
227229
228230
229-func ay (az) = [BooleanEntry(c, false), StringEntry(n, az)]
231+func az (aA) = [BooleanEntry(c, false), StringEntry(n, aA)]
230232
231233
232-func aA (aB,ai) = if ((ai == D))
234+func aB (aC,aj) = if ((aj == F))
233235 then {
234- let aC = (aB - E)
235- if ((0 >= aC))
236- then throw((((("Insufficient amount " + toString(aB)) + " to deduct staking fee ") + toString(E)) + " USD-N"))
237- else aC
236+ let aD = (aC - G)
237+ if ((0 >= aD))
238+ then throw((((("Insufficient amount " + toString(aC)) + " to deduct staking fee ") + toString(G)) + " USD-N"))
239+ else aD
238240 }
239- else aB
241+ else aC
240242
241243
242-func aD (aB,aE,aF) = throw((((((((("Insufficient DApp balance to pay " + toString(aB)) + " ") + aF) + " due to staking. Available: ") + toString(aE)) + " ") + aF) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
244+func aE (aC,aF,aG) = throw((((((((("Insufficient DApp balance to pay " + toString(aC)) + " ") + aG) + " due to staking. Available: ") + toString(aF)) + " ") + aG) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
243245
244246
245-func aG (aH,aI) = throw((((((((((((((((("Insufficient DApp balance to pay " + toString(aH)) + " ") + R) + " and ") + toString(aI)) + " ") + V) + " due to staking. Available: ") + toString(ao)) + " ") + R) + " and ") + toString(ap)) + " ") + V) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
247+func aH (aI,aJ) = throw((((((((((((((((("Insufficient DApp balance to pay " + toString(aI)) + " ") + S) + " and ") + toString(aJ)) + " ") + W) + " due to staking. Available: ") + toString(ap)) + " ") + S) + " and ") + toString(aq)) + " ") + W) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
246248
247249
248-@Callable(aJ)
249-func init () = {
250- let aK = $Tuple2(aJ.payments[0].amount, aJ.payments[0].assetId)
251- let aL = aK._1
252- let aM = aK._2
253- let aN = $Tuple2(aJ.payments[1].amount, aJ.payments[1].assetId)
254- let aO = aN._1
255- let aP = aN._2
256- let aQ = at(aM)
257- let aR = aQ._1
258- let aS = aQ._2
259- let aT = aQ._3
260- let aU = at(aP)
261- let aV = aU._1
262- let aW = aU._2
263- let aX = aU._3
250+@Callable(aK)
251+func init (aL) = {
252+ let aM = $Tuple2(aK.payments[0].amount, aK.payments[0].assetId)
253+ let aN = aM._1
254+ let aO = aM._2
255+ let aP = $Tuple2(aK.payments[1].amount, aK.payments[1].assetId)
256+ let aQ = aP._1
257+ let aR = aP._2
258+ let aS = au(aO)
259+ let aT = aS._1
260+ let aU = aS._2
261+ let aV = aS._3
262+ let aW = au(aR)
263+ let aX = aW._1
264+ let aY = aW._2
265+ let aZ = aW._3
264266 if (isDefined(getBoolean(this, c)))
265267 then throw("DApp is already active")
266- else if ((aM == aP))
268+ else if ((aO == aR))
267269 then throw("Assets must be different")
268270 else {
269- let aY = ((("s" + take(aS, 7)) + "_") + take(aW, 7))
270- let aZ = ((((("ShareToken of SwopFi protocol for " + aS) + " and ") + aW) + " at address ") + toString(this))
271- let ba = ((aT + aX) / 2)
272- let bb = fraction(pow(aL, aT, 5, 1, aT, HALFDOWN), pow(aO, aX, 5, 1, aX, HALFDOWN), pow(10, 0, ba, 0, 0, HALFDOWN))
273- let bc = Issue(aY, aZ, bb, ba, true)
274- let bd = calculateAssetId(bc)
275-[StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, aR), StringEntry(e, aV), IntegerEntry(f, aL), IntegerEntry(g, aO), IntegerEntry(l, aa), IntegerEntry(m, ac), bc, StringEntry(j, toBase58String(bd)), IntegerEntry(k, bb), ScriptTransfer(aJ.caller, bb, bd)]
271+ let ba = ((("s" + take(aU, 7)) + "_") + take(aY, 7))
272+ let bb = ((((("ShareToken of SwopFi protocol for " + aU) + " and ") + aY) + " at address ") + toString(this))
273+ let bc = ((aV + aZ) / 2)
274+ let bd = fraction(pow(aN, aV, 5, 1, aV, HALFDOWN), pow(aQ, aZ, 5, 1, aZ, HALFDOWN), pow(10, 0, bc, 0, 0, HALFDOWN))
275+ let be = Issue(ba, bb, bd, bc, true)
276+ let bf = calculateAssetId(be)
277+ let bg = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, aT), StringEntry(e, aX), IntegerEntry(f, aN), IntegerEntry(g, aQ), IntegerEntry(l, ab), IntegerEntry(m, ad), be, StringEntry(j, toBase58String(bf)), IntegerEntry(k, bd), ScriptTransfer(aK.caller, bd, bf)]
278+ if (aL)
279+ then (bg ++ [BooleanEntry(o, aL), IntegerEntry(s, M)])
280+ else bg
276281 }
277282 }
278283
279284
280285
281-@Callable(aJ)
282-func initWithInitRatio (be,bf,N,O) = {
283- let bg = aw(N)
284- let aR = bg._1
285- let aS = bg._2
286- let aT = bg._3
287- let bh = aw(O)
288- let aV = bh._1
289- let aW = bh._2
290- let aX = bh._3
286+@Callable(aK)
287+func initWithInitRatio (bh,bi,O,P,aL) = {
288+ let bj = ax(O)
289+ let aT = bj._1
290+ let aU = bj._2
291+ let aV = bj._3
292+ let bk = ax(P)
293+ let aX = bk._1
294+ let aY = bk._2
295+ let aZ = bk._3
291296 if (isDefined(getBoolean(this, c)))
292297 then throw("DApp is already active")
293- else if ((N == O))
298+ else if ((O == P))
294299 then throw("Assets must be different")
295300 else {
296- let aY = ((("s" + take(aS, 7)) + "_") + take(aW, 7))
297- let aZ = ((((("ShareToken of SwopFi protocol for " + aS) + " and ") + aW) + " at address ") + toString(this))
298- let ba = ((aT + aX) / 2)
299- let bb = 0
300- let bc = Issue(aY, aZ, bb, ba, true)
301- let bd = calculateAssetId(bc)
302-[StringEntry(b, a), BooleanEntry(c, true), BooleanEntry(o, true), StringEntry(d, aR), StringEntry(e, aV), IntegerEntry(h, be), IntegerEntry(i, bf), IntegerEntry(l, aa), IntegerEntry(m, ac), bc, StringEntry(j, toBase58String(bd)), IntegerEntry(s, L), IntegerEntry(k, bb), IntegerEntry(f, 0), IntegerEntry(g, 0)]
301+ let ba = ((("s" + take(aU, 7)) + "_") + take(aY, 7))
302+ let bb = ((((("ShareToken of SwopFi protocol for " + aU) + " and ") + aY) + " at address ") + toString(this))
303+ let bc = ((aV + aZ) / 2)
304+ let bd = 0
305+ let be = Issue(ba, bb, bd, bc, true)
306+ let bf = calculateAssetId(be)
307+ let bg = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, aT), StringEntry(e, aX), IntegerEntry(h, bh), IntegerEntry(i, bi), IntegerEntry(f, 0), IntegerEntry(g, 0), IntegerEntry(l, ab), IntegerEntry(m, ad), be, StringEntry(j, toBase58String(bf)), IntegerEntry(s, M), IntegerEntry(k, bd)]
308+ if (aL)
309+ then (bg ++ [BooleanEntry(o, aL), IntegerEntry(s, M)])
310+ else bg
303311 }
304312 }
305313
306314
307315
308-@Callable(aJ)
309-func replenishWithTwoTokens (bi) = {
310- let aM = aJ.payments[0].assetId
311- let aP = aJ.payments[1].assetId
312- let aL = aA(aJ.payments[0].amount, aM)
313- let aO = aA(aJ.payments[1].amount, aP)
314- if (if ((W == 0))
315- then (X == 0)
316+@Callable(aK)
317+func keepLimitForFirstHarvest (bl) = if (!(N))
318+ then throw("DApp is inactive at this moment")
319+ else if (!(containsElement([w, x, y, B], aK.callerPublicKey)))
320+ then throw("Only admin can call this function")
321+ else [IntegerEntry(u, bl)]
322+
323+
324+
325+@Callable(aK)
326+func replenishWithTwoTokens (bm) = {
327+ let aO = aK.payments[0].assetId
328+ let aR = aK.payments[1].assetId
329+ let aN = aB(aK.payments[0].amount, aO)
330+ let aQ = aB(aK.payments[1].amount, aR)
331+ if (if ((X == 0))
332+ then (Y == 0)
316333 else false)
317334 then {
318- let bj = at(aM)
319- let aR = bj._1
320- let aS = bj._2
321- let aT = bj._3
322- let bk = at(aP)
323- let aV = bk._1
324- let aW = bk._2
325- let aX = bk._3
326- if (isDefined(getBoolean(this, c)))
327- then throw("DApp is already active")
328- else if ((aM == aP))
329- then throw("Assets must be different")
330- else {
331- let ba = ((aT + aX) / 2)
332- let bb = fraction(pow(aL, aT, 5, 1, aT, HALFDOWN), pow(aO, aX, 5, 1, aX, HALFDOWN), pow(10, 0, ba, 0, 0, HALFDOWN))
333- let bl = fraction(fraction(am, ae, aL), ad, fraction(an, ae, aO))
334- if (!(M))
335- then throw("DApp is inactive at this moment")
336- else if (if ((0 > bi))
337- then true
338- else (bi > af))
339- then throw(((("Slippage tolerance must be between 0 and " + toString(af)) + " inclusively. Actual: ") + toString(bi)))
340- else if ((size(aJ.payments) != 2))
341- then throw("Two attached assets expected")
342- else if (if ((aM != P))
343- then true
344- else (aP != Q))
345- then throw(((("Incorrect assets attached. Expected: " + N) + " and ") + O))
346- else if (if ((((ad * (af - bi)) / af) > bl))
347- then true
348- else (bl > ((ad * (af + bi)) / af)))
349- then throw("Incorrect assets amount: amounts must have the contract ratio")
350- else if ((bb == 0))
351- then throw("Too small amount to replenish")
352- else if (!(as))
353- then ay(((((((((((((((("Suspicious state. Actual balances: " + toString(W)) + " ") + R) + ", ") + toString(X)) + " ") + V) + ". State: ") + toString(ah(P))) + " ") + R) + ", ") + toString(ah(Q))) + " ") + V))
354- else [Reissue(Y, bb, true), IntegerEntry(f, aL), IntegerEntry(g, aO), IntegerEntry(k, bb), ScriptTransfer(aJ.caller, bb, Y)]
355- }
335+ let bn = au(aO)
336+ let aT = bn._1
337+ let aU = bn._2
338+ let aV = bn._3
339+ let bo = au(aR)
340+ let aX = bo._1
341+ let aY = bo._2
342+ let aZ = bo._3
343+ if ((aO == aR))
344+ then throw("Assets must be different")
345+ else {
346+ let bc = ((aV + aZ) / 2)
347+ let bd = fraction(pow(aN, aV, 5, 1, aV, HALFDOWN), pow(aQ, aZ, 5, 1, aZ, HALFDOWN), pow(10, 0, bc, 0, 0, HALFDOWN))
348+ if (!(N))
349+ then throw("DApp is inactive at this moment")
350+ else if (if ((0 > bm))
351+ then true
352+ else (bm > ag))
353+ then throw(((("Slippage tolerance must be between 0 and " + toString(ag)) + " inclusively. Actual: ") + toString(bm)))
354+ else if ((size(aK.payments) != 2))
355+ then throw("Two attached assets expected")
356+ else if (if ((aO != Q))
357+ then true
358+ else (aR != R))
359+ then throw(((("Incorrect assets attached. Expected: " + O) + " and ") + P))
360+ else if ((bd == 0))
361+ then throw("Too small amount to replenish")
362+ else if (!(at))
363+ then az(((((((((((((((("Suspicious state. Actual balances: " + toString(X)) + " ") + S) + ", ") + toString(Y)) + " ") + W) + ". State: ") + toString(ai(Q))) + " ") + S) + ", ") + toString(ai(R))) + " ") + W))
364+ else [Reissue(Z, bd, true), IntegerEntry(f, aN), IntegerEntry(g, aQ), IntegerEntry(k, bd), ScriptTransfer(aK.caller, bd, Z)]
365+ }
356366 }
357367 else {
358- let bl = fraction(fraction(W, ae, aL), ad, fraction(X, ae, aO))
359- let bm = fraction(aL, ae, W)
360- let bn = fraction(aO, ae, X)
361- let bo = fraction(min([bm, bn]), Z, ae)
362- if (!(M))
368+ let bp = fraction(fraction(X, af, aN), ae, fraction(Y, af, aQ))
369+ let bq = fraction(aN, af, X)
370+ let br = fraction(aQ, af, Y)
371+ let bs = fraction(min([bq, br]), aa, af)
372+ if (!(N))
363373 then throw("DApp is inactive at this moment")
364- else if (if ((0 > bi))
374+ else if (if ((0 > bm))
365375 then true
366- else (bi > af))
367- then throw(((("Slippage tolerance must be between 0 and " + toString(af)) + " inclusively. Actual: ") + toString(bi)))
368- else if ((size(aJ.payments) != 2))
376+ else (bm > ag))
377+ then throw(((("Slippage tolerance must be between 0 and " + toString(ag)) + " inclusively. Actual: ") + toString(bm)))
378+ else if ((size(aK.payments) != 2))
369379 then throw("Two attached assets expected")
370- else if (if ((aM != P))
380+ else if (if ((aO != Q))
371381 then true
372- else (aP != Q))
373- then throw(((("Incorrect assets attached. Expected: " + N) + " and ") + O))
374- else if (if ((((ad * (af - bi)) / af) > bl))
382+ else (aR != R))
383+ then throw(((("Incorrect assets attached. Expected: " + O) + " and ") + P))
384+ else if (if ((((ae * (ag - bm)) / ag) > bp))
375385 then true
376- else (bl > ((ad * (af + bi)) / af)))
386+ else (bp > ((ae * (ag + bm)) / ag)))
377387 then throw("Incorrect assets amount: amounts must have the contract ratio")
378- else if ((bo == 0))
388+ else if ((bs == 0))
379389 then throw("Too small amount to replenish")
380- else if (!(as))
381- then ay(((((((((((((((("Suspicious state. Actual balances: " + toString(W)) + " ") + R) + ", ") + toString(X)) + " ") + V) + ". State: ") + toString(ah(P))) + " ") + R) + ", ") + toString(ah(Q))) + " ") + V))
382- else [IntegerEntry(f, (W + aL)), IntegerEntry(g, (X + aO)), IntegerEntry(k, (Z + bo)), Reissue(Y, bo, true), ScriptTransfer(aJ.caller, bo, Y)]
390+ else if (!(at))
391+ then az(((((((((((((((("Suspicious state. Actual balances: " + toString(X)) + " ") + S) + ", ") + toString(Y)) + " ") + W) + ". State: ") + toString(ai(Q))) + " ") + S) + ", ") + toString(ai(R))) + " ") + W))
392+ else [IntegerEntry(f, (X + aN)), IntegerEntry(g, (Y + aQ)), IntegerEntry(k, (aa + bs)), Reissue(Z, bs, true), ScriptTransfer(aK.caller, bs, Z)]
383393 }
384394 }
385395
386396
387397
388-@Callable(aJ)
398+@Callable(aK)
389399 func withdraw () = {
390- let bp = $Tuple2(aJ.payments[0].amount, aJ.payments[0].assetId)
391- let bq = bp._1
392- let br = bp._2
393- let bs = aA(fraction(bq, W, Z), P)
394- let bt = aA(fraction(bq, X, Z), Q)
395- if (!(M))
400+ let bt = $Tuple2(aK.payments[0].amount, aK.payments[0].assetId)
401+ let bu = bt._1
402+ let bv = bt._2
403+ let bw = aB(fraction(bu, X, aa), Q)
404+ let bx = aB(fraction(bu, Y, aa), R)
405+ if (!(N))
396406 then throw("DApp is inactive at this moment")
397- else if ((size(aJ.payments) != 1))
407+ else if ((size(aK.payments) != 1))
398408 then throw("One attached payment expected")
399- else if ((br != Y))
400- then throw(("Incorrect asset attached. Expected: " + toBase58String(Y)))
401- else if (!(as))
402- then ay(((((((((((((((("Suspicious state. Actual balances: " + toString(W)) + " ") + R) + ", ") + toString(X)) + " ") + V) + ". State: ") + toString(ah(P))) + " ") + R) + ", ") + toString(ah(Q))) + " ") + V))
403- else if (if ((bs > ao))
409+ else if ((bv != Z))
410+ then throw(("Incorrect asset attached. Expected: " + toBase58String(Z)))
411+ else if (!(at))
412+ then az(((((((((((((((("Suspicious state. Actual balances: " + toString(X)) + " ") + S) + ", ") + toString(Y)) + " ") + W) + ". State: ") + toString(ai(Q))) + " ") + S) + ", ") + toString(ai(R))) + " ") + W))
413+ else if (if ((bw > ap))
404414 then true
405- else (bt > ap))
406- then aG(bs, bt)
407- else [IntegerEntry(f, (W - bs)), IntegerEntry(g, (X - bt)), IntegerEntry(k, (Z - bq)), Burn(Y, bq), ScriptTransfer(aJ.caller, bs, P), ScriptTransfer(aJ.caller, bt, Q)]
415+ else (bx > aq))
416+ then aH(bw, bx)
417+ else [IntegerEntry(f, (X - bw)), IntegerEntry(g, (Y - bx)), IntegerEntry(k, (aa - bu)), Burn(Z, bu), ScriptTransfer(aK.caller, bw, Q), ScriptTransfer(aK.caller, bx, R)]
408418 }
409419
410420
411421
412-@Callable(aJ)
413-func exchange (bu) = {
414- let bv = $Tuple2(aJ.payments[0].amount, aJ.payments[0].assetId)
415- let bq = bv._1
416- let br = bv._2
417- func bw (bx,by) = {
418- let bz = fraction(by, bq, (bq + bx))
419- let bA = fraction(bz, (ac - aa), ac)
420- let bB = fraction(bz, ab, ac)
421- if ((bu > bA))
422- then throw(((("Calculated amount to receive " + toString(bA)) + " is less than specified minimum ") + toString(bu)))
423- else $Tuple3(bz, bA, bB)
422+@Callable(aK)
423+func exchange (by) = {
424+ let bz = $Tuple2(aK.payments[0].amount, aK.payments[0].assetId)
425+ let bu = bz._1
426+ let bv = bz._2
427+ func bA (bB,bC) = {
428+ let bD = fraction(bC, bu, (bu + bB))
429+ let bE = fraction(bD, (ad - ab), ad)
430+ let bF = fraction(bD, ac, ad)
431+ if ((by > bE))
432+ then throw(((("Calculated amount to receive " + toString(bE)) + " is less than specified minimum ") + toString(by)))
433+ else $Tuple3(bD, bE, bF)
424434 }
425435
426- if (!(M))
436+ if (!(N))
427437 then throw("DApp is inactive at this moment")
428- else if (if ((W == 0))
429- then (X == 0)
438+ else if (if ((X == 0))
439+ then (Y == 0)
430440 else false)
431441 then throw("Can't exchange with zero balance")
432- else if ((0 >= bu))
433- then throw(("Minimal amount to receive must be positive. Actual: " + toString(bu)))
434- else if ((size(aJ.payments) != 1))
442+ else if ((0 >= by))
443+ then throw(("Minimal amount to receive must be positive. Actual: " + toString(by)))
444+ else if ((size(aK.payments) != 1))
435445 then throw("One attached payment expected")
436- else if (!(as))
437- then ay(((((((((((((((("Suspicious state. Actual balances: " + toString(W)) + " ") + R) + ", ") + toString(X)) + " ") + V) + ". State: ") + toString(ah(P))) + " ") + R) + ", ") + toString(ah(Q))) + " ") + V))
438- else if ((br == P))
446+ else if (!(at))
447+ then az(((((((((((((((("Suspicious state. Actual balances: " + toString(X)) + " ") + S) + ", ") + toString(Y)) + " ") + W) + ". State: ") + toString(ai(Q))) + " ") + S) + ", ") + toString(ai(R))) + " ") + W))
448+ else if ((bv == Q))
439449 then {
440- let bC = Q
441- let bD = bw(W, X)
442- let bz = bD._1
443- let bA = bD._2
444- let bB = bD._3
445- let bE = (W + bq)
446- let bF = ((X - bA) - bB)
447- if (if (if ((P == D))
448- then (aj >= bE)
450+ let bG = R
451+ let bH = bA(X, Y)
452+ let bD = bH._1
453+ let bE = bH._2
454+ let bF = bH._3
455+ let bI = (X + bu)
456+ let bJ = ((Y - bE) - bF)
457+ if (if (if ((Q == F))
458+ then (ak >= bI)
449459 else false)
450460 then true
451- else if ((Q == D))
452- then (aj >= bF)
461+ else if ((R == F))
462+ then (ak >= bJ)
453463 else false)
454- then aD(bA, ap, V)
455- else [IntegerEntry(f, bE), IntegerEntry(g, bF), ScriptTransfer(aJ.caller, bA, bC), ScriptTransfer(A, bB, bC)]
464+ then aE(bE, aq, W)
465+ else [IntegerEntry(f, bI), IntegerEntry(g, bJ), ScriptTransfer(aK.caller, bE, bG), ScriptTransfer(C, bF, bG)]
456466 }
457- else if ((br == Q))
467+ else if ((bv == R))
458468 then {
459- let bC = P
460- let bG = bw(X, W)
461- let bz = bG._1
462- let bA = bG._2
463- let bB = bG._3
464- let bE = ((W - bA) - bB)
465- let bF = (X + bq)
466- if (if (if ((P == D))
467- then (aj >= bE)
469+ let bG = Q
470+ let bK = bA(Y, X)
471+ let bD = bK._1
472+ let bE = bK._2
473+ let bF = bK._3
474+ let bI = ((X - bE) - bF)
475+ let bJ = (Y + bu)
476+ if (if (if ((Q == F))
477+ then (ak >= bI)
468478 else false)
469479 then true
470- else if ((Q == D))
471- then (aj >= bF)
480+ else if ((R == F))
481+ then (ak >= bJ)
472482 else false)
473- then aD(bA, ao, R)
474- else [IntegerEntry(f, bE), IntegerEntry(g, bF), ScriptTransfer(aJ.caller, bA, bC), ScriptTransfer(A, bB, bC)]
483+ then aE(bE, ap, S)
484+ else [IntegerEntry(f, bI), IntegerEntry(g, bJ), ScriptTransfer(aK.caller, bE, bG), ScriptTransfer(C, bF, bG)]
475485 }
476- else throw(((("Incorrect asset attached. Expected: " + N) + " or ") + O))
486+ else throw(((("Incorrect asset attached. Expected: " + O) + " or ") + P))
477487 }
478488
479489
480490
481-@Callable(aJ)
482-func shutdown () = if (!(M))
491+@Callable(aK)
492+func shutdown () = if (!(N))
483493 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, n), "the cause wasn't specified")))
484- else if (!(containsElement([v, w, x, y], aJ.callerPublicKey)))
494+ else if (!(containsElement([w, x, y, z], aK.callerPublicKey)))
485495 then throw("Only admin can call this function")
486- else ay("Paused by admin")
496+ else az("Paused by admin")
487497
488498
489499
490-@Callable(aJ)
491-func activate () = if (M)
500+@Callable(aK)
501+func activate () = if (N)
492502 then throw("DApp is already active")
493- else if (!(containsElement([v, w, x, y], aJ.callerPublicKey)))
503+ else if (!(containsElement([w, x, y, z], aK.callerPublicKey)))
494504 then throw("Only admin can call this function")
495505 else [BooleanEntry(c, true), DeleteEntry(n)]
496506
497507
498508
499-@Callable(aJ)
500-func takeIntoAccountExtraFunds (bH) = {
501- let bI = (aq - W)
502- let bJ = (ar - X)
503- let bK = (bI - (if ((P == D))
504- then bH
509+@Callable(aK)
510+func takeIntoAccountExtraFunds (bL) = {
511+ let bM = (ar - X)
512+ let bN = (as - Y)
513+ let bO = (bM - (if ((Q == F))
514+ then bL
505515 else 0))
506- let bL = (bJ - (if ((Q == D))
507- then bH
516+ let bP = (bN - (if ((R == F))
517+ then bL
508518 else 0))
509- if (!(M))
519+ if (!(N))
510520 then throw("DApp is inactive at this moment")
511- else if ((aJ.caller != this))
521+ else if ((aK.caller != this))
512522 then throw("Only the DApp itself can call this function")
513- else if ((0 > bH))
514- then throw(("Argument 'amountLeave' cannot be negative. Actual: " + toString(bH)))
515- else if (if ((0 > bI))
523+ else if ((0 > bL))
524+ then throw(("Argument 'amountLeave' cannot be negative. Actual: " + toString(bL)))
525+ else if (if ((0 > bM))
516526 then true
517- else (0 > bJ))
518- then ay("Enroll amount negative")
519- else if (if ((0 > bK))
527+ else (0 > bN))
528+ then az("Enroll amount negative")
529+ else if (if ((0 > bO))
520530 then true
521- else (0 > bL))
531+ else (0 > bP))
522532 then throw("Too large amountLeave")
523- else [IntegerEntry(f, (W + bK)), IntegerEntry(g, (X + bL)), IntegerEntry(("last_income_" + N), bK), IntegerEntry(("last_income_" + O), bL)]
533+ else [IntegerEntry(f, (X + bO)), IntegerEntry(g, (Y + bP)), IntegerEntry(("last_income_" + O), bO), IntegerEntry(("last_income_" + P), bP)]
524534 }
525535
526536
527-@Verifier(bM)
528-func bN () = {
529- let S = bM
530- if ($isInstanceOf(S, "InvokeScriptTransaction"))
537+@Verifier(bQ)
538+func bR () = {
539+ let T = bQ
540+ if ($isInstanceOf(T, "InvokeScriptTransaction"))
531541 then {
532- let bO = S
533- let bP = if ((bO.dApp == this))
534- then (bO.function == "takeIntoAccountExtraFunds")
542+ let bS = T
543+ let bT = if ((bS.dApp == this))
544+ then (bS.function == "takeIntoAccountExtraFunds")
535545 else false
536- let bQ = if ((bO.dApp == C))
537- then if (if (if ((bO.function == "lockNeutrino"))
538- then (size(bO.payments) == 1)
546+ let bU = if ((bS.dApp == E))
547+ then if (if (if ((bS.function == "lockNeutrino"))
548+ then (size(bS.payments) == 1)
539549 else false)
540- then (bO.payments[0].assetId == D)
550+ then (bS.payments[0].assetId == F)
541551 else false)
542552 then true
543- else if ((bO.function == "unlockNeutrino"))
544- then (size(bO.payments) == 0)
553+ else if ((bS.function == "unlockNeutrino"))
554+ then (size(bS.payments) == 0)
545555 else false
546556 else false
547- let bR = if (if (if (sigVerify(bM.bodyBytes, bM.proofs[0], v))
557+ let bV = if (if (if (sigVerify(bQ.bodyBytes, bQ.proofs[0], w))
548558 then true
549- else sigVerify(bM.bodyBytes, bM.proofs[0], w))
559+ else sigVerify(bQ.bodyBytes, bQ.proofs[0], x))
550560 then true
551- else sigVerify(bM.bodyBytes, bM.proofs[0], x))
561+ else sigVerify(bQ.bodyBytes, bQ.proofs[0], y))
552562 then true
553- else sigVerify(bM.bodyBytes, bM.proofs[0], z)
554- if (bP)
563+ else sigVerify(bQ.bodyBytes, bQ.proofs[0], A)
564+ if (bT)
555565 then true
556- else bQ
566+ else bU
557567 }
558- else sigVerify(bM.bodyBytes, bM.proofs[0], bM.senderPublicKey)
568+ else sigVerify(bQ.bodyBytes, bQ.proofs[0], bQ.senderPublicKey)
559569 }
560570
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "1.0.0"
55
66 let b = "version"
77
88 let c = "active"
99
1010 let d = "A_asset_id"
1111
1212 let e = "B_asset_id"
1313
1414 let f = "A_asset_balance"
1515
1616 let g = "B_asset_balance"
1717
1818 let h = "A_asset_init"
1919
2020 let i = "B_asset_init"
2121
2222 let j = "share_asset_id"
2323
2424 let k = "share_asset_supply"
2525
2626 let l = "commission"
2727
2828 let m = "commission_scale_delimiter"
2929
3030 let n = "shutdown_cause"
3131
3232 let o = "first_harvest"
3333
3434 let p = "base_period"
3535
3636 let q = "period_length"
3737
3838 let r = "start_height"
3939
4040 let s = "first_harvest_height"
4141
4242 let t = "duration_full_vote_power"
4343
44-let u = "min_vote_power"
44+let u = "share_limit_on_first_harvest"
4545
46-let v = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
46+let v = "min_vote_power"
4747
4848 let w = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
4949
5050 let x = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
5151
5252 let y = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
5353
5454 let z = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
5555
56-let A = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
56+let A = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
5757
58-let B = Address(base58'3N6CYoCsxrcXKe75pQvvV3JqJrwJjm1t4QN')
58+let B = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
5959
60-let C = Address(base58'3N6q7sCGSSLBUXDdjBdYGTJbZGZfhhh8cNg')
60+let C = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
6161
62-let D = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
62+let D = Address(base58'3N6CYoCsxrcXKe75pQvvV3JqJrwJjm1t4QN')
6363
64-let E = (9 * value(value(assetInfo(D)).minSponsoredFee))
64+let E = Address(base58'3N6q7sCGSSLBUXDdjBdYGTJbZGZfhhh8cNg')
6565
66-let F = valueOrErrorMessage(getInteger(B, p), "Empty kBasePeriod")
66+let F = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
6767
68-let G = valueOrErrorMessage(getInteger(B, r), "Empty kStartHeight")
68+let G = (9 * value(value(assetInfo(F)).minSponsoredFee))
6969
70-let H = valueOrErrorMessage(getInteger(B, q), "Empty kPeriodLength")
70+let H = valueOrErrorMessage(getInteger(D, p), "Empty kBasePeriod")
7171
72-let I = valueOrErrorMessage(getInteger(B, t), "Empty kDurationFullVotePower")
72+let I = valueOrErrorMessage(getInteger(D, r), "Empty kStartHeight")
7373
74-let J = valueOrErrorMessage(getInteger(B, u), "Empty kMinVotePower")
74+let J = valueOrErrorMessage(getInteger(D, q), "Empty kPeriodLength")
7575
76-let K = Address(base58'3MzJZEn6jzxCPaHEfkrXd7FhbjTyVjdRPLS')
76+let K = valueOrErrorMessage(getInteger(D, t), "Empty kDurationFullVotePower")
7777
78-let L = ((F + ((height - G) / H)) + 2)
78+let L = valueOrErrorMessage(getInteger(D, v), "Empty kMinVotePower")
7979
80-let M = getBooleanValue(this, c)
80+let M = ((H + ((height - I) / J)) + 2)
8181
82-let N = getStringValue(this, d)
82+let N = getBooleanValue(this, c)
8383
84-let O = getStringValue(this, e)
84+let O = getStringValue(this, d)
8585
86-let P = if ((N == "WAVES"))
87- then unit
88- else fromBase58String(N)
86+let P = getStringValue(this, e)
8987
9088 let Q = if ((O == "WAVES"))
9189 then unit
9290 else fromBase58String(O)
9391
94-let R = {
95- let S = P
96- if ($isInstanceOf(S, "ByteVector"))
92+let R = if ((P == "WAVES"))
93+ then unit
94+ else fromBase58String(P)
95+
96+let S = {
97+ let T = Q
98+ if ($isInstanceOf(T, "ByteVector"))
9799 then {
98- let T = S
99- value(assetInfo(T)).name
100+ let U = T
101+ value(assetInfo(U)).name
100102 }
101- else if ($isInstanceOf(S, "Unit"))
103+ else if ($isInstanceOf(T, "Unit"))
102104 then {
103- let U = S
105+ let V = T
104106 "WAVES"
105107 }
106108 else throw("Match error")
107109 }
108110
109-let V = {
110- let S = Q
111- if ($isInstanceOf(S, "ByteVector"))
111+let W = {
112+ let T = R
113+ if ($isInstanceOf(T, "ByteVector"))
112114 then {
113- let T = S
114- value(assetInfo(T)).name
115+ let U = T
116+ value(assetInfo(U)).name
115117 }
116- else if ($isInstanceOf(S, "Unit"))
118+ else if ($isInstanceOf(T, "Unit"))
117119 then {
118- let U = S
120+ let V = T
119121 "WAVES"
120122 }
121123 else throw("Match error")
122124 }
123125
124-let W = getIntegerValue(this, f)
126+let X = getIntegerValue(this, f)
125127
126-let X = getIntegerValue(this, g)
128+let Y = getIntegerValue(this, g)
127129
128-let Y = fromBase58String(getStringValue(this, j))
130+let Z = fromBase58String(getStringValue(this, j))
129131
130-let Z = getIntegerValue(this, k)
132+let aa = getIntegerValue(this, k)
131133
132-let aa = 3000
134+let ab = 3000
133135
134-let ab = 1200
136+let ac = 1200
135137
136-let ac = 1000000
138+let ad = 1000000
137139
138-let ad = 1000
140+let ae = 1000
139141
140-let ae = 100000000
142+let af = 100000000
141143
142-let af = 1000
144+let ag = 1000
143145
144-let ag = 8
146+let ah = 8
145147
146-func ah (ai) = {
147- let S = ai
148- if ($isInstanceOf(S, "ByteVector"))
148+func ai (aj) = {
149+ let T = aj
150+ if ($isInstanceOf(T, "ByteVector"))
149151 then {
150- let T = S
151- assetBalance(this, T)
152+ let U = T
153+ assetBalance(this, U)
152154 }
153- else if ($isInstanceOf(S, "Unit"))
155+ else if ($isInstanceOf(T, "Unit"))
154156 then {
155- let U = S
157+ let V = T
156158 wavesBalance(this).available
157159 }
158160 else throw("Match error")
159161 }
160162
161163
162-let aj = {
163- let S = getInteger(C, ((("rpd_balance_" + toBase58String(D)) + "_") + toString(this)))
164- if ($isInstanceOf(S, "Int"))
164+let ak = {
165+ let T = getInteger(E, ((("rpd_balance_" + toBase58String(F)) + "_") + toString(this)))
166+ if ($isInstanceOf(T, "Int"))
165167 then {
166- let ak = S
167- ak
168+ let al = T
169+ al
168170 }
169- else if ($isInstanceOf(S, "Unit"))
171+ else if ($isInstanceOf(T, "Unit"))
170172 then {
171- let al = S
173+ let am = T
172174 0
173175 }
174176 else throw("Match error")
175177 }
176178
177-let am = getIntegerValue(this, h)
179+let an = getIntegerValue(this, h)
178180
179-let an = getIntegerValue(this, i)
181+let ao = getIntegerValue(this, i)
180182
181-let ao = (W - (if ((P == D))
182- then aj
183+let ap = (X - (if ((Q == F))
184+ then ak
183185 else 0))
184186
185-let ap = (X - (if ((Q == D))
186- then aj
187+let aq = (Y - (if ((R == F))
188+ then ak
187189 else 0))
188190
189-let aq = (ah(P) + (if ((P == D))
190- then aj
191+let ar = (ai(Q) + (if ((Q == F))
192+ then ak
191193 else 0))
192194
193-let ar = (ah(Q) + (if ((Q == D))
194- then aj
195+let as = (ai(R) + (if ((R == F))
196+ then ak
195197 else 0))
196198
197-let as = if ((aq >= W))
198- then (ar >= X)
199+let at = if ((ar >= X))
200+ then (as >= Y)
199201 else false
200202
201-func at (ai) = {
202- let S = ai
203- if ($isInstanceOf(S, "ByteVector"))
203+func au (aj) = {
204+ let T = aj
205+ if ($isInstanceOf(T, "ByteVector"))
204206 then {
205- let T = S
206- let au = toBase58String(T)
207- let av = valueOrErrorMessage(assetInfo(T), (("Asset " + au) + " doesn't exist"))
208- $Tuple3(au, av.name, av.decimals)
207+ let U = T
208+ let av = toBase58String(U)
209+ let aw = valueOrErrorMessage(assetInfo(U), (("Asset " + av) + " doesn't exist"))
210+ $Tuple3(av, aw.name, aw.decimals)
209211 }
210- else if ($isInstanceOf(S, "Unit"))
212+ else if ($isInstanceOf(T, "Unit"))
211213 then {
212- let U = S
214+ let V = T
213215 $Tuple3("WAVES", "WAVES", 8)
214216 }
215217 else throw("Match error")
216218 }
217219
218220
219-func aw (ax) = if ((ax == "WAVES"))
221+func ax (ay) = if ((ay == "WAVES"))
220222 then $Tuple3("WAVES", "WAVES", 8)
221223 else {
222- let au = ax
223- let T = fromBase58String(ax)
224- let av = valueOrErrorMessage(assetInfo(T), (("Asset " + au) + " doesn't exist"))
225- $Tuple3(au, av.name, av.decimals)
224+ let av = ay
225+ let U = fromBase58String(ay)
226+ let aw = valueOrErrorMessage(assetInfo(U), (("Asset " + av) + " doesn't exist"))
227+ $Tuple3(av, aw.name, aw.decimals)
226228 }
227229
228230
229-func ay (az) = [BooleanEntry(c, false), StringEntry(n, az)]
231+func az (aA) = [BooleanEntry(c, false), StringEntry(n, aA)]
230232
231233
232-func aA (aB,ai) = if ((ai == D))
234+func aB (aC,aj) = if ((aj == F))
233235 then {
234- let aC = (aB - E)
235- if ((0 >= aC))
236- then throw((((("Insufficient amount " + toString(aB)) + " to deduct staking fee ") + toString(E)) + " USD-N"))
237- else aC
236+ let aD = (aC - G)
237+ if ((0 >= aD))
238+ then throw((((("Insufficient amount " + toString(aC)) + " to deduct staking fee ") + toString(G)) + " USD-N"))
239+ else aD
238240 }
239- else aB
241+ else aC
240242
241243
242-func aD (aB,aE,aF) = throw((((((((("Insufficient DApp balance to pay " + toString(aB)) + " ") + aF) + " due to staking. Available: ") + toString(aE)) + " ") + aF) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
244+func aE (aC,aF,aG) = throw((((((((("Insufficient DApp balance to pay " + toString(aC)) + " ") + aG) + " due to staking. Available: ") + toString(aF)) + " ") + aG) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
243245
244246
245-func aG (aH,aI) = throw((((((((((((((((("Insufficient DApp balance to pay " + toString(aH)) + " ") + R) + " and ") + toString(aI)) + " ") + V) + " due to staking. Available: ") + toString(ao)) + " ") + R) + " and ") + toString(ap)) + " ") + V) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
247+func aH (aI,aJ) = throw((((((((((((((((("Insufficient DApp balance to pay " + toString(aI)) + " ") + S) + " and ") + toString(aJ)) + " ") + W) + " due to staking. Available: ") + toString(ap)) + " ") + S) + " and ") + toString(aq)) + " ") + W) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
246248
247249
248-@Callable(aJ)
249-func init () = {
250- let aK = $Tuple2(aJ.payments[0].amount, aJ.payments[0].assetId)
251- let aL = aK._1
252- let aM = aK._2
253- let aN = $Tuple2(aJ.payments[1].amount, aJ.payments[1].assetId)
254- let aO = aN._1
255- let aP = aN._2
256- let aQ = at(aM)
257- let aR = aQ._1
258- let aS = aQ._2
259- let aT = aQ._3
260- let aU = at(aP)
261- let aV = aU._1
262- let aW = aU._2
263- let aX = aU._3
250+@Callable(aK)
251+func init (aL) = {
252+ let aM = $Tuple2(aK.payments[0].amount, aK.payments[0].assetId)
253+ let aN = aM._1
254+ let aO = aM._2
255+ let aP = $Tuple2(aK.payments[1].amount, aK.payments[1].assetId)
256+ let aQ = aP._1
257+ let aR = aP._2
258+ let aS = au(aO)
259+ let aT = aS._1
260+ let aU = aS._2
261+ let aV = aS._3
262+ let aW = au(aR)
263+ let aX = aW._1
264+ let aY = aW._2
265+ let aZ = aW._3
264266 if (isDefined(getBoolean(this, c)))
265267 then throw("DApp is already active")
266- else if ((aM == aP))
268+ else if ((aO == aR))
267269 then throw("Assets must be different")
268270 else {
269- let aY = ((("s" + take(aS, 7)) + "_") + take(aW, 7))
270- let aZ = ((((("ShareToken of SwopFi protocol for " + aS) + " and ") + aW) + " at address ") + toString(this))
271- let ba = ((aT + aX) / 2)
272- let bb = fraction(pow(aL, aT, 5, 1, aT, HALFDOWN), pow(aO, aX, 5, 1, aX, HALFDOWN), pow(10, 0, ba, 0, 0, HALFDOWN))
273- let bc = Issue(aY, aZ, bb, ba, true)
274- let bd = calculateAssetId(bc)
275-[StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, aR), StringEntry(e, aV), IntegerEntry(f, aL), IntegerEntry(g, aO), IntegerEntry(l, aa), IntegerEntry(m, ac), bc, StringEntry(j, toBase58String(bd)), IntegerEntry(k, bb), ScriptTransfer(aJ.caller, bb, bd)]
271+ let ba = ((("s" + take(aU, 7)) + "_") + take(aY, 7))
272+ let bb = ((((("ShareToken of SwopFi protocol for " + aU) + " and ") + aY) + " at address ") + toString(this))
273+ let bc = ((aV + aZ) / 2)
274+ let bd = fraction(pow(aN, aV, 5, 1, aV, HALFDOWN), pow(aQ, aZ, 5, 1, aZ, HALFDOWN), pow(10, 0, bc, 0, 0, HALFDOWN))
275+ let be = Issue(ba, bb, bd, bc, true)
276+ let bf = calculateAssetId(be)
277+ let bg = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, aT), StringEntry(e, aX), IntegerEntry(f, aN), IntegerEntry(g, aQ), IntegerEntry(l, ab), IntegerEntry(m, ad), be, StringEntry(j, toBase58String(bf)), IntegerEntry(k, bd), ScriptTransfer(aK.caller, bd, bf)]
278+ if (aL)
279+ then (bg ++ [BooleanEntry(o, aL), IntegerEntry(s, M)])
280+ else bg
276281 }
277282 }
278283
279284
280285
281-@Callable(aJ)
282-func initWithInitRatio (be,bf,N,O) = {
283- let bg = aw(N)
284- let aR = bg._1
285- let aS = bg._2
286- let aT = bg._3
287- let bh = aw(O)
288- let aV = bh._1
289- let aW = bh._2
290- let aX = bh._3
286+@Callable(aK)
287+func initWithInitRatio (bh,bi,O,P,aL) = {
288+ let bj = ax(O)
289+ let aT = bj._1
290+ let aU = bj._2
291+ let aV = bj._3
292+ let bk = ax(P)
293+ let aX = bk._1
294+ let aY = bk._2
295+ let aZ = bk._3
291296 if (isDefined(getBoolean(this, c)))
292297 then throw("DApp is already active")
293- else if ((N == O))
298+ else if ((O == P))
294299 then throw("Assets must be different")
295300 else {
296- let aY = ((("s" + take(aS, 7)) + "_") + take(aW, 7))
297- let aZ = ((((("ShareToken of SwopFi protocol for " + aS) + " and ") + aW) + " at address ") + toString(this))
298- let ba = ((aT + aX) / 2)
299- let bb = 0
300- let bc = Issue(aY, aZ, bb, ba, true)
301- let bd = calculateAssetId(bc)
302-[StringEntry(b, a), BooleanEntry(c, true), BooleanEntry(o, true), StringEntry(d, aR), StringEntry(e, aV), IntegerEntry(h, be), IntegerEntry(i, bf), IntegerEntry(l, aa), IntegerEntry(m, ac), bc, StringEntry(j, toBase58String(bd)), IntegerEntry(s, L), IntegerEntry(k, bb), IntegerEntry(f, 0), IntegerEntry(g, 0)]
301+ let ba = ((("s" + take(aU, 7)) + "_") + take(aY, 7))
302+ let bb = ((((("ShareToken of SwopFi protocol for " + aU) + " and ") + aY) + " at address ") + toString(this))
303+ let bc = ((aV + aZ) / 2)
304+ let bd = 0
305+ let be = Issue(ba, bb, bd, bc, true)
306+ let bf = calculateAssetId(be)
307+ let bg = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, aT), StringEntry(e, aX), IntegerEntry(h, bh), IntegerEntry(i, bi), IntegerEntry(f, 0), IntegerEntry(g, 0), IntegerEntry(l, ab), IntegerEntry(m, ad), be, StringEntry(j, toBase58String(bf)), IntegerEntry(s, M), IntegerEntry(k, bd)]
308+ if (aL)
309+ then (bg ++ [BooleanEntry(o, aL), IntegerEntry(s, M)])
310+ else bg
303311 }
304312 }
305313
306314
307315
308-@Callable(aJ)
309-func replenishWithTwoTokens (bi) = {
310- let aM = aJ.payments[0].assetId
311- let aP = aJ.payments[1].assetId
312- let aL = aA(aJ.payments[0].amount, aM)
313- let aO = aA(aJ.payments[1].amount, aP)
314- if (if ((W == 0))
315- then (X == 0)
316+@Callable(aK)
317+func keepLimitForFirstHarvest (bl) = if (!(N))
318+ then throw("DApp is inactive at this moment")
319+ else if (!(containsElement([w, x, y, B], aK.callerPublicKey)))
320+ then throw("Only admin can call this function")
321+ else [IntegerEntry(u, bl)]
322+
323+
324+
325+@Callable(aK)
326+func replenishWithTwoTokens (bm) = {
327+ let aO = aK.payments[0].assetId
328+ let aR = aK.payments[1].assetId
329+ let aN = aB(aK.payments[0].amount, aO)
330+ let aQ = aB(aK.payments[1].amount, aR)
331+ if (if ((X == 0))
332+ then (Y == 0)
316333 else false)
317334 then {
318- let bj = at(aM)
319- let aR = bj._1
320- let aS = bj._2
321- let aT = bj._3
322- let bk = at(aP)
323- let aV = bk._1
324- let aW = bk._2
325- let aX = bk._3
326- if (isDefined(getBoolean(this, c)))
327- then throw("DApp is already active")
328- else if ((aM == aP))
329- then throw("Assets must be different")
330- else {
331- let ba = ((aT + aX) / 2)
332- let bb = fraction(pow(aL, aT, 5, 1, aT, HALFDOWN), pow(aO, aX, 5, 1, aX, HALFDOWN), pow(10, 0, ba, 0, 0, HALFDOWN))
333- let bl = fraction(fraction(am, ae, aL), ad, fraction(an, ae, aO))
334- if (!(M))
335- then throw("DApp is inactive at this moment")
336- else if (if ((0 > bi))
337- then true
338- else (bi > af))
339- then throw(((("Slippage tolerance must be between 0 and " + toString(af)) + " inclusively. Actual: ") + toString(bi)))
340- else if ((size(aJ.payments) != 2))
341- then throw("Two attached assets expected")
342- else if (if ((aM != P))
343- then true
344- else (aP != Q))
345- then throw(((("Incorrect assets attached. Expected: " + N) + " and ") + O))
346- else if (if ((((ad * (af - bi)) / af) > bl))
347- then true
348- else (bl > ((ad * (af + bi)) / af)))
349- then throw("Incorrect assets amount: amounts must have the contract ratio")
350- else if ((bb == 0))
351- then throw("Too small amount to replenish")
352- else if (!(as))
353- then ay(((((((((((((((("Suspicious state. Actual balances: " + toString(W)) + " ") + R) + ", ") + toString(X)) + " ") + V) + ". State: ") + toString(ah(P))) + " ") + R) + ", ") + toString(ah(Q))) + " ") + V))
354- else [Reissue(Y, bb, true), IntegerEntry(f, aL), IntegerEntry(g, aO), IntegerEntry(k, bb), ScriptTransfer(aJ.caller, bb, Y)]
355- }
335+ let bn = au(aO)
336+ let aT = bn._1
337+ let aU = bn._2
338+ let aV = bn._3
339+ let bo = au(aR)
340+ let aX = bo._1
341+ let aY = bo._2
342+ let aZ = bo._3
343+ if ((aO == aR))
344+ then throw("Assets must be different")
345+ else {
346+ let bc = ((aV + aZ) / 2)
347+ let bd = fraction(pow(aN, aV, 5, 1, aV, HALFDOWN), pow(aQ, aZ, 5, 1, aZ, HALFDOWN), pow(10, 0, bc, 0, 0, HALFDOWN))
348+ if (!(N))
349+ then throw("DApp is inactive at this moment")
350+ else if (if ((0 > bm))
351+ then true
352+ else (bm > ag))
353+ then throw(((("Slippage tolerance must be between 0 and " + toString(ag)) + " inclusively. Actual: ") + toString(bm)))
354+ else if ((size(aK.payments) != 2))
355+ then throw("Two attached assets expected")
356+ else if (if ((aO != Q))
357+ then true
358+ else (aR != R))
359+ then throw(((("Incorrect assets attached. Expected: " + O) + " and ") + P))
360+ else if ((bd == 0))
361+ then throw("Too small amount to replenish")
362+ else if (!(at))
363+ then az(((((((((((((((("Suspicious state. Actual balances: " + toString(X)) + " ") + S) + ", ") + toString(Y)) + " ") + W) + ". State: ") + toString(ai(Q))) + " ") + S) + ", ") + toString(ai(R))) + " ") + W))
364+ else [Reissue(Z, bd, true), IntegerEntry(f, aN), IntegerEntry(g, aQ), IntegerEntry(k, bd), ScriptTransfer(aK.caller, bd, Z)]
365+ }
356366 }
357367 else {
358- let bl = fraction(fraction(W, ae, aL), ad, fraction(X, ae, aO))
359- let bm = fraction(aL, ae, W)
360- let bn = fraction(aO, ae, X)
361- let bo = fraction(min([bm, bn]), Z, ae)
362- if (!(M))
368+ let bp = fraction(fraction(X, af, aN), ae, fraction(Y, af, aQ))
369+ let bq = fraction(aN, af, X)
370+ let br = fraction(aQ, af, Y)
371+ let bs = fraction(min([bq, br]), aa, af)
372+ if (!(N))
363373 then throw("DApp is inactive at this moment")
364- else if (if ((0 > bi))
374+ else if (if ((0 > bm))
365375 then true
366- else (bi > af))
367- then throw(((("Slippage tolerance must be between 0 and " + toString(af)) + " inclusively. Actual: ") + toString(bi)))
368- else if ((size(aJ.payments) != 2))
376+ else (bm > ag))
377+ then throw(((("Slippage tolerance must be between 0 and " + toString(ag)) + " inclusively. Actual: ") + toString(bm)))
378+ else if ((size(aK.payments) != 2))
369379 then throw("Two attached assets expected")
370- else if (if ((aM != P))
380+ else if (if ((aO != Q))
371381 then true
372- else (aP != Q))
373- then throw(((("Incorrect assets attached. Expected: " + N) + " and ") + O))
374- else if (if ((((ad * (af - bi)) / af) > bl))
382+ else (aR != R))
383+ then throw(((("Incorrect assets attached. Expected: " + O) + " and ") + P))
384+ else if (if ((((ae * (ag - bm)) / ag) > bp))
375385 then true
376- else (bl > ((ad * (af + bi)) / af)))
386+ else (bp > ((ae * (ag + bm)) / ag)))
377387 then throw("Incorrect assets amount: amounts must have the contract ratio")
378- else if ((bo == 0))
388+ else if ((bs == 0))
379389 then throw("Too small amount to replenish")
380- else if (!(as))
381- then ay(((((((((((((((("Suspicious state. Actual balances: " + toString(W)) + " ") + R) + ", ") + toString(X)) + " ") + V) + ". State: ") + toString(ah(P))) + " ") + R) + ", ") + toString(ah(Q))) + " ") + V))
382- else [IntegerEntry(f, (W + aL)), IntegerEntry(g, (X + aO)), IntegerEntry(k, (Z + bo)), Reissue(Y, bo, true), ScriptTransfer(aJ.caller, bo, Y)]
390+ else if (!(at))
391+ then az(((((((((((((((("Suspicious state. Actual balances: " + toString(X)) + " ") + S) + ", ") + toString(Y)) + " ") + W) + ". State: ") + toString(ai(Q))) + " ") + S) + ", ") + toString(ai(R))) + " ") + W))
392+ else [IntegerEntry(f, (X + aN)), IntegerEntry(g, (Y + aQ)), IntegerEntry(k, (aa + bs)), Reissue(Z, bs, true), ScriptTransfer(aK.caller, bs, Z)]
383393 }
384394 }
385395
386396
387397
388-@Callable(aJ)
398+@Callable(aK)
389399 func withdraw () = {
390- let bp = $Tuple2(aJ.payments[0].amount, aJ.payments[0].assetId)
391- let bq = bp._1
392- let br = bp._2
393- let bs = aA(fraction(bq, W, Z), P)
394- let bt = aA(fraction(bq, X, Z), Q)
395- if (!(M))
400+ let bt = $Tuple2(aK.payments[0].amount, aK.payments[0].assetId)
401+ let bu = bt._1
402+ let bv = bt._2
403+ let bw = aB(fraction(bu, X, aa), Q)
404+ let bx = aB(fraction(bu, Y, aa), R)
405+ if (!(N))
396406 then throw("DApp is inactive at this moment")
397- else if ((size(aJ.payments) != 1))
407+ else if ((size(aK.payments) != 1))
398408 then throw("One attached payment expected")
399- else if ((br != Y))
400- then throw(("Incorrect asset attached. Expected: " + toBase58String(Y)))
401- else if (!(as))
402- then ay(((((((((((((((("Suspicious state. Actual balances: " + toString(W)) + " ") + R) + ", ") + toString(X)) + " ") + V) + ". State: ") + toString(ah(P))) + " ") + R) + ", ") + toString(ah(Q))) + " ") + V))
403- else if (if ((bs > ao))
409+ else if ((bv != Z))
410+ then throw(("Incorrect asset attached. Expected: " + toBase58String(Z)))
411+ else if (!(at))
412+ then az(((((((((((((((("Suspicious state. Actual balances: " + toString(X)) + " ") + S) + ", ") + toString(Y)) + " ") + W) + ". State: ") + toString(ai(Q))) + " ") + S) + ", ") + toString(ai(R))) + " ") + W))
413+ else if (if ((bw > ap))
404414 then true
405- else (bt > ap))
406- then aG(bs, bt)
407- else [IntegerEntry(f, (W - bs)), IntegerEntry(g, (X - bt)), IntegerEntry(k, (Z - bq)), Burn(Y, bq), ScriptTransfer(aJ.caller, bs, P), ScriptTransfer(aJ.caller, bt, Q)]
415+ else (bx > aq))
416+ then aH(bw, bx)
417+ else [IntegerEntry(f, (X - bw)), IntegerEntry(g, (Y - bx)), IntegerEntry(k, (aa - bu)), Burn(Z, bu), ScriptTransfer(aK.caller, bw, Q), ScriptTransfer(aK.caller, bx, R)]
408418 }
409419
410420
411421
412-@Callable(aJ)
413-func exchange (bu) = {
414- let bv = $Tuple2(aJ.payments[0].amount, aJ.payments[0].assetId)
415- let bq = bv._1
416- let br = bv._2
417- func bw (bx,by) = {
418- let bz = fraction(by, bq, (bq + bx))
419- let bA = fraction(bz, (ac - aa), ac)
420- let bB = fraction(bz, ab, ac)
421- if ((bu > bA))
422- then throw(((("Calculated amount to receive " + toString(bA)) + " is less than specified minimum ") + toString(bu)))
423- else $Tuple3(bz, bA, bB)
422+@Callable(aK)
423+func exchange (by) = {
424+ let bz = $Tuple2(aK.payments[0].amount, aK.payments[0].assetId)
425+ let bu = bz._1
426+ let bv = bz._2
427+ func bA (bB,bC) = {
428+ let bD = fraction(bC, bu, (bu + bB))
429+ let bE = fraction(bD, (ad - ab), ad)
430+ let bF = fraction(bD, ac, ad)
431+ if ((by > bE))
432+ then throw(((("Calculated amount to receive " + toString(bE)) + " is less than specified minimum ") + toString(by)))
433+ else $Tuple3(bD, bE, bF)
424434 }
425435
426- if (!(M))
436+ if (!(N))
427437 then throw("DApp is inactive at this moment")
428- else if (if ((W == 0))
429- then (X == 0)
438+ else if (if ((X == 0))
439+ then (Y == 0)
430440 else false)
431441 then throw("Can't exchange with zero balance")
432- else if ((0 >= bu))
433- then throw(("Minimal amount to receive must be positive. Actual: " + toString(bu)))
434- else if ((size(aJ.payments) != 1))
442+ else if ((0 >= by))
443+ then throw(("Minimal amount to receive must be positive. Actual: " + toString(by)))
444+ else if ((size(aK.payments) != 1))
435445 then throw("One attached payment expected")
436- else if (!(as))
437- then ay(((((((((((((((("Suspicious state. Actual balances: " + toString(W)) + " ") + R) + ", ") + toString(X)) + " ") + V) + ". State: ") + toString(ah(P))) + " ") + R) + ", ") + toString(ah(Q))) + " ") + V))
438- else if ((br == P))
446+ else if (!(at))
447+ then az(((((((((((((((("Suspicious state. Actual balances: " + toString(X)) + " ") + S) + ", ") + toString(Y)) + " ") + W) + ". State: ") + toString(ai(Q))) + " ") + S) + ", ") + toString(ai(R))) + " ") + W))
448+ else if ((bv == Q))
439449 then {
440- let bC = Q
441- let bD = bw(W, X)
442- let bz = bD._1
443- let bA = bD._2
444- let bB = bD._3
445- let bE = (W + bq)
446- let bF = ((X - bA) - bB)
447- if (if (if ((P == D))
448- then (aj >= bE)
450+ let bG = R
451+ let bH = bA(X, Y)
452+ let bD = bH._1
453+ let bE = bH._2
454+ let bF = bH._3
455+ let bI = (X + bu)
456+ let bJ = ((Y - bE) - bF)
457+ if (if (if ((Q == F))
458+ then (ak >= bI)
449459 else false)
450460 then true
451- else if ((Q == D))
452- then (aj >= bF)
461+ else if ((R == F))
462+ then (ak >= bJ)
453463 else false)
454- then aD(bA, ap, V)
455- else [IntegerEntry(f, bE), IntegerEntry(g, bF), ScriptTransfer(aJ.caller, bA, bC), ScriptTransfer(A, bB, bC)]
464+ then aE(bE, aq, W)
465+ else [IntegerEntry(f, bI), IntegerEntry(g, bJ), ScriptTransfer(aK.caller, bE, bG), ScriptTransfer(C, bF, bG)]
456466 }
457- else if ((br == Q))
467+ else if ((bv == R))
458468 then {
459- let bC = P
460- let bG = bw(X, W)
461- let bz = bG._1
462- let bA = bG._2
463- let bB = bG._3
464- let bE = ((W - bA) - bB)
465- let bF = (X + bq)
466- if (if (if ((P == D))
467- then (aj >= bE)
469+ let bG = Q
470+ let bK = bA(Y, X)
471+ let bD = bK._1
472+ let bE = bK._2
473+ let bF = bK._3
474+ let bI = ((X - bE) - bF)
475+ let bJ = (Y + bu)
476+ if (if (if ((Q == F))
477+ then (ak >= bI)
468478 else false)
469479 then true
470- else if ((Q == D))
471- then (aj >= bF)
480+ else if ((R == F))
481+ then (ak >= bJ)
472482 else false)
473- then aD(bA, ao, R)
474- else [IntegerEntry(f, bE), IntegerEntry(g, bF), ScriptTransfer(aJ.caller, bA, bC), ScriptTransfer(A, bB, bC)]
483+ then aE(bE, ap, S)
484+ else [IntegerEntry(f, bI), IntegerEntry(g, bJ), ScriptTransfer(aK.caller, bE, bG), ScriptTransfer(C, bF, bG)]
475485 }
476- else throw(((("Incorrect asset attached. Expected: " + N) + " or ") + O))
486+ else throw(((("Incorrect asset attached. Expected: " + O) + " or ") + P))
477487 }
478488
479489
480490
481-@Callable(aJ)
482-func shutdown () = if (!(M))
491+@Callable(aK)
492+func shutdown () = if (!(N))
483493 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, n), "the cause wasn't specified")))
484- else if (!(containsElement([v, w, x, y], aJ.callerPublicKey)))
494+ else if (!(containsElement([w, x, y, z], aK.callerPublicKey)))
485495 then throw("Only admin can call this function")
486- else ay("Paused by admin")
496+ else az("Paused by admin")
487497
488498
489499
490-@Callable(aJ)
491-func activate () = if (M)
500+@Callable(aK)
501+func activate () = if (N)
492502 then throw("DApp is already active")
493- else if (!(containsElement([v, w, x, y], aJ.callerPublicKey)))
503+ else if (!(containsElement([w, x, y, z], aK.callerPublicKey)))
494504 then throw("Only admin can call this function")
495505 else [BooleanEntry(c, true), DeleteEntry(n)]
496506
497507
498508
499-@Callable(aJ)
500-func takeIntoAccountExtraFunds (bH) = {
501- let bI = (aq - W)
502- let bJ = (ar - X)
503- let bK = (bI - (if ((P == D))
504- then bH
509+@Callable(aK)
510+func takeIntoAccountExtraFunds (bL) = {
511+ let bM = (ar - X)
512+ let bN = (as - Y)
513+ let bO = (bM - (if ((Q == F))
514+ then bL
505515 else 0))
506- let bL = (bJ - (if ((Q == D))
507- then bH
516+ let bP = (bN - (if ((R == F))
517+ then bL
508518 else 0))
509- if (!(M))
519+ if (!(N))
510520 then throw("DApp is inactive at this moment")
511- else if ((aJ.caller != this))
521+ else if ((aK.caller != this))
512522 then throw("Only the DApp itself can call this function")
513- else if ((0 > bH))
514- then throw(("Argument 'amountLeave' cannot be negative. Actual: " + toString(bH)))
515- else if (if ((0 > bI))
523+ else if ((0 > bL))
524+ then throw(("Argument 'amountLeave' cannot be negative. Actual: " + toString(bL)))
525+ else if (if ((0 > bM))
516526 then true
517- else (0 > bJ))
518- then ay("Enroll amount negative")
519- else if (if ((0 > bK))
527+ else (0 > bN))
528+ then az("Enroll amount negative")
529+ else if (if ((0 > bO))
520530 then true
521- else (0 > bL))
531+ else (0 > bP))
522532 then throw("Too large amountLeave")
523- else [IntegerEntry(f, (W + bK)), IntegerEntry(g, (X + bL)), IntegerEntry(("last_income_" + N), bK), IntegerEntry(("last_income_" + O), bL)]
533+ else [IntegerEntry(f, (X + bO)), IntegerEntry(g, (Y + bP)), IntegerEntry(("last_income_" + O), bO), IntegerEntry(("last_income_" + P), bP)]
524534 }
525535
526536
527-@Verifier(bM)
528-func bN () = {
529- let S = bM
530- if ($isInstanceOf(S, "InvokeScriptTransaction"))
537+@Verifier(bQ)
538+func bR () = {
539+ let T = bQ
540+ if ($isInstanceOf(T, "InvokeScriptTransaction"))
531541 then {
532- let bO = S
533- let bP = if ((bO.dApp == this))
534- then (bO.function == "takeIntoAccountExtraFunds")
542+ let bS = T
543+ let bT = if ((bS.dApp == this))
544+ then (bS.function == "takeIntoAccountExtraFunds")
535545 else false
536- let bQ = if ((bO.dApp == C))
537- then if (if (if ((bO.function == "lockNeutrino"))
538- then (size(bO.payments) == 1)
546+ let bU = if ((bS.dApp == E))
547+ then if (if (if ((bS.function == "lockNeutrino"))
548+ then (size(bS.payments) == 1)
539549 else false)
540- then (bO.payments[0].assetId == D)
550+ then (bS.payments[0].assetId == F)
541551 else false)
542552 then true
543- else if ((bO.function == "unlockNeutrino"))
544- then (size(bO.payments) == 0)
553+ else if ((bS.function == "unlockNeutrino"))
554+ then (size(bS.payments) == 0)
545555 else false
546556 else false
547- let bR = if (if (if (sigVerify(bM.bodyBytes, bM.proofs[0], v))
557+ let bV = if (if (if (sigVerify(bQ.bodyBytes, bQ.proofs[0], w))
548558 then true
549- else sigVerify(bM.bodyBytes, bM.proofs[0], w))
559+ else sigVerify(bQ.bodyBytes, bQ.proofs[0], x))
550560 then true
551- else sigVerify(bM.bodyBytes, bM.proofs[0], x))
561+ else sigVerify(bQ.bodyBytes, bQ.proofs[0], y))
552562 then true
553- else sigVerify(bM.bodyBytes, bM.proofs[0], z)
554- if (bP)
563+ else sigVerify(bQ.bodyBytes, bQ.proofs[0], A)
564+ if (bT)
555565 then true
556- else bQ
566+ else bU
557567 }
558- else sigVerify(bM.bodyBytes, bM.proofs[0], bM.senderPublicKey)
568+ else sigVerify(bQ.bodyBytes, bQ.proofs[0], bQ.senderPublicKey)
559569 }
560570

github/deemru/w8io/169f3d6 
289.39 ms