tx · 64m1WdtgXbvdC6BYvWgg4S7ZW54ix944cay7r2ZeAjyy

3N8rwRVNrxgqwFiVCNyX2Zyy6Lzgd1fDctN:  -0.01400000 Waves

2021.12.30 13:36 [1856849] smart account 3N8rwRVNrxgqwFiVCNyX2Zyy6Lzgd1fDctN > SELF 0.00000000 Waves

{ "type": 13, "id": "64m1WdtgXbvdC6BYvWgg4S7ZW54ix944cay7r2ZeAjyy", "fee": 1400000, "feeAssetId": null, "timestamp": 1640860623006, "version": 2, "chainId": 84, "sender": "3N8rwRVNrxgqwFiVCNyX2Zyy6Lzgd1fDctN", "senderPublicKey": "2SGdJb3x9Ak59xjRyHMHFxLvh6dC5m37urdsBJy3f6TU", "proofs": [ "4FWb4APp9yYYyHYBUkCiuoVgT8bBLUKENMc7LQou2yt8ZwXBusxXJPjKuvsK6s27nUBDe2USotqryke5NvRPKiSg", "sFN5qpu2g2nwPpJB4my7jnRyzvAPRaVYFt2iFizkf1SKq8su3ufetVD3CDKT6zEJbAz91nUgZ1sRqKJaxB2Zb3z" ], "script": "base64:AAIFAAAAAAAAACkIAhIAEgMKAQESBAoCAQESABIECgIBARIAEgASAwoBARIFCgMEAQgSAAAAAFIAAAAAB3ZlcnNpb24CAAAABTIuMC4wAAAAAAhrVmVyc2lvbgIAAAAHdmVyc2lvbgAAAAAHa0FjdGl2ZQIAAAAGYWN0aXZlAAAAAAlrQXNzZXRJZEECAAAACkFfYXNzZXRfaWQAAAAACWtBc3NldElkQgIAAAAKQl9hc3NldF9pZAAAAAAJa0JhbGFuY2VBAgAAAA9BX2Fzc2V0X2JhbGFuY2UAAAAACWtCYWxhbmNlQgIAAAAPQl9hc3NldF9iYWxhbmNlAAAAAA1rU2hhcmVBc3NldElkAgAAAA5zaGFyZV9hc3NldF9pZAAAAAARa1NoYXJlQXNzZXRTdXBwbHkCAAAAEnNoYXJlX2Fzc2V0X3N1cHBseQAAAAAEa0ZlZQIAAAAKY29tbWlzc2lvbgAAAAASa0ZlZVNjYWxlRGVsaW1pdGVyAgAAABpjb21taXNzaW9uX3NjYWxlX2RlbGltaXRlcgAAAAAKa0ludmFyaWFudAIAAAAJaW52YXJpYW50AAAAAAZrQ2F1c2UCAAAADnNodXRkb3duX2NhdXNlAAAAABJrZXlVU0ROTlNCVEFkZHJlc3MCAAAAGHN0YWtpbmdfdXNkbm5zYnRfYWRkcmVzcwAAAAAOa2V5RVVSTkFkZHJlc3MCAAAAFHN0YWtpbmdfZXVybl9hZGRyZXNzAAAAAA9rZXlBZG1pblB1YktleTECAAAAC2FkbWluX3B1Yl8xAAAAAA9rZXlBZG1pblB1YktleTICAAAAC2FkbWluX3B1Yl8yAAAAAA9rZXlBZG1pblB1YktleTMCAAAAC2FkbWluX3B1Yl8zAAAAABRVU0ROVG9XYXZlc0V4Y2hhbmdlcgkBAAAAB0FkZHJlc3MAAAABAQAAABoBVMqWqf/XBTJ3J/JFLr/QiofqrY4qyL+FtAAAAAAGb3JhY2xlCQEAAAAHQWRkcmVzcwAAAAEBAAAAGgFU6UWqHpAvOq7xug7mLpqSXxqYhOHzYrMIAQAAAAtnZXRBZG1pblB1YgAAAAEAAAALa2V5QWRtaW5QdWIEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAGb3JhY2xlBQAAAAtrZXlBZG1pblB1YgMJAAABAAAAAgUA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dGVkAAAAFW1pblRva2VuUmVjZWl2ZUFtb3VudAAAABJ0b2tlblJlY2VpdmVBbW91bnQAAAAHdG9rZW5JZAQAAAANc2xpcHBhZ2VWYWx1ZQkAAGUAAAACBQAAAAZzY2FsZTgJAABpAAAAAgkAAGgAAAACBQAAAAZzY2FsZTgAAAAAAAAAAAEAAAAAAACYloAEAAAAHmRlbHRhQmV0d2Vlbk1heEFuZE1pblNlbmRWYWx1ZQkAAGUAAAACBQAAABVhbW91bnRUb1NlbmRFc3RpbWF0ZWQFAAAAFW1pblRva2VuUmVjZWl2ZUFtb3VudAQAAAABeAkAAGQAAAACBQAAAAhiYWxhbmNlQQUAAAASdG9rZW5SZWNlaXZlQW1vdW50BAAAAAF5CQAAZAAAAAIFAAAACGJhbGFuY2VCBQAAABJ0b2tlblJlY2VpdmVBbW91bnQEAAAADGludmFyaWFudE5ldwMJAAAAAAAAAgUAAAAHdG9rZW5JZAUAAAAIYXNzZXRJZEEJAQAAAA1pbnZhcmlhbnRDYWxjAAAAAgUAAAABeAkAAGUAAAACBQAAAAhiYWxhbmNlQgUAAAAVYW1vdW50VG9TZW5kRXN0aW1hdGVkAwkAAAAAAAACBQAAAAd0b2tlbklkBQAAAAhhc3NldElkQgkBAAAADWludmFyaWFudENhbGMAAAACCQAAZQAAAAIFAAAACGJhbGFuY2VBBQAAABVhbW91bnRUb1NlbmRFc3RpbWF0ZWQFAAAAAXkJAAACAAAAAQIAAAAWV3JvbmcgYXNzZXQgaW4gcGF5bWVudAQAAAAXaW52YXJpYW50RXN0aW1hdGVkUmF0aW8JAABrAAAAAwUAAAAGc2NhbGU4BQAAAAlpbnZhcmlhbnQFAAAADGludmFyaWFudE5ldwoBAAAADWdldFN0ZXBBbW91bnQAAAACAAAAA2FjYwAAAARzdGVwAwkAAAAAAAACBQAAAANhY2MA//////////8EAAAADGFtb3VudFRvU2VuZAkAAGUAAAACBQAAABVhbW91bnRUb1NlbmRFc3RpbWF0ZWQJAABpAAAAAgkAAGgAAAACBQAAAARzdGVwBQAAAB5kZWx0YUJldHdlZW5NYXhBbmRNaW5TZW5kVmFsdWUAAAAAAAAAAAUEAAAADXN0ZXBJbnZhcmlhbnQDCQAAAAAAAAIF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AAAHYXNzZXRJZAUAAAAEVVNETgkABRQAAAACAgAAAAxsb2NrTmV1dHJpbm8FAAAAFnN0YWtpbmdVU0ROTlNCVEFkZHJlc3MJAAUUAAAAAgIAAAAMc3RhcnRTdGFraW5nBQAAABJzdGFraW5nRVVSTkFkZHJlc3MDCQAAAAAAAAIFAAAAB2Fzc2V0SWQFAAAABFVTRE4JAAUUAAAAAgIAAAAOdW5sb2NrTmV1dHJpbm8FAAAAFnN0YWtpbmdVU0ROTlNCVEFkZHJlc3MJAAUUAAAAAgIAAAALc3RvcFN0YWtpbmcFAAAAEnN0YWtpbmdFVVJOQWRkcmVzcwEAAAARY2FsY1N0YWtpbmdQYXJhbXMAAAADAAAABXN0YWtlAAAABmFtb3VudAAAAAdhc3NldElkAwUAAAAFc3Rha2UEAAAACyR0MDg4MjY4ODkyCQEAAAAYY2FsY1N0YWtpbmdGdW5jQW5kQWRkcmVzAAAAAgUAAAAFc3Rha2UFAAAAB2Fzc2V0SWQEAAAABGNhbGwIBQAAAAskdDA4ODI2ODg5MgAAAAJfMQQAAAALc3Rha2luZ0FkZHIIBQAAAAskdDA4ODI2ODg5MgAAAAJfMgkABRYAAAAEBQAAAARjYWxsBQAAAAtzdGFraW5nQWRkcgUAAAADbmlsCQAETAAAAAIJAQAAAA9BdHRhY2hlZFBheW1lbnQAAAACBQAAAAdhc3NldElkBQAAAAZhbW91bnQFAAAAA25pbAQAAAALJHQwODk3ODkwNDQJAQAAABhjYWxjU3Rha2luZ0Z1bmNBbmRBZGRyZXMAAAACBQAAAAVzdGFrZQUAAAAHYXNzZXRJZAQAAAAEY2FsbAgFAAAACyR0MDg5Nzg5MDQ0AAAAAl8xBAAAAAtzdGFraW5nQWRkcggFAAAACyR0MDg5Nzg5MDQ0AAAAAl8yCQAFFgAAAAQFAAAABGNhbGwFAAAAC3N0YWtpbmdBZGRyCQAETAAAAAIFAAAABmFtb3VudAkABEwAAAACCQACWAAAAAEFAAAAB2Fzc2V0SWQFAAAAA25pbAUAAAADbmlsAAAACgAAAAFpAQAAAARpbml0AAAAAAQAAAALJHQwOTE0OTkyMjYJAAUUAAAAAggJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50CAkA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cnkAAAACBQAAAA1rU2hhcmVBc3NldElkCQACWAAAAAEFAAAADHNoYXJlSXNzdWVJZAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAARa1NoYXJlQXNzZXRTdXBwbHkFAAAAEnNoYXJlSW5pdGlhbFN1cHBseQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAAEnNoYXJlSW5pdGlhbFN1cHBseQUAAAAMc2hhcmVJc3N1ZUlkBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAABZyZXBsZW5pc2hXaXRoVHdvVG9rZW5zAAAAAQAAABFzbGlwcGFnZVRvbGVyYW5jZQQAAAALcG10QXNzZXRJZEEICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAAB2Fzc2V0SWQEAAAAC3BtdEFzc2V0SWRCCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAQAAAAdhc3NldElkBAAAAApwbXRBbW91bnRBCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQEAAAACnBtdEFtb3VudEIICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABAAAABmFtb3VudAQAAAANJHQwMTE5ODgxMjA2NQkBAAAADGdldEFzc2V0SW5mbwAAAAEFAAAAC3BtdEFzc2V0SWRBBAAAAA5wbXRTdHJBc3NldElkQQgFAAAADSR0MDExOTg4MTIwNjUAAAACXzEEAAAADXBtdEFzc2V0TmFtZUEIBQAAAA0kdDAxMTk4ODEyMDY1AAAAAl8yBAAAAAxwbXREZWNpbWFsc0EIBQAAAA0kdDAxMTk4ODEyMDY1AAAAAl8zBAAAAA0kdDAxMjA3MDEyMjY0CQEAAAAMZ2V0QXNzZXRJbmZvAAAAAQUAAAALcG10QXNzZXRJZEIEAAAADnBtdFN0ckFzc2V0SWRCCAUAAAANJHQwMTIwNzAxMjI2NAAAAAJfMQQAAAANcG10QXNzZXROYW1lQggFAAAADSR0MDEyMDcwMTIyNjQAAAACXzIEAAAADHBtdERlY2ltYWxzQggFAAAADSR0MDEyMDcwMTIyNjQAAAACXzMEAAAACnRva2VuUmF0aW8JAABrAAAAAwkAAGsAAAADBQAAAAZzY2FsZTgFAAAACGJhbGFuY2VBBQAAAApwbXRBbW91bnRBBQAAAAZzY2FsZTMJAABrAAAAAwUAAAAGc2NhbGU4BQAAAAhiYWxhbmNlQgUAAAAKcG10QW1vdW50QgQAAAATcmF0aW9TaGFyZVRva2Vuc0luQQkAAGsAAAADBQAAAAZzY2FsZTgFAAAACnBtdEFtb3VudEEFAAAACGJhbGFuY2VBBAAAABNyYXRpb1NoYXJlVG9rZW5zSW5CCQAAawAAAAMFAAAABnNjYWxlOAUAAAAKcG10QW1vdW50QgUAAAAIYmFsYW5jZUIEAAAAFXNoYXJlVG9rZW5Ub1BheUFtb3VudAkAAGsAAAADCQABlwAAAAEJAARMAAAAAgUAAAATcmF0aW9TaGFyZVRva2Vuc0luQQkABEwAAAACBQAAABNyYXRpb1NoYXJlVG9rZW5zSW5CBQAAAANuaWwFAAAAEHNoYXJlQXNzZXRTdXBwbHkFAAAABnNjYWxlOAQAAAATaW52YXJpYW50Q2FsY3VsYXRlZAkBAAAADWludmFyaWFudENhbGMAAAACCQAAZAAAAAIFAAAACGJhbGFuY2VBBQAAAApwbXRBbW91bnRBCQAAZAAAAAIFAAAACGJhbGFuY2VCBQAAAApwbXRBbW91bnRCAwkBAAAAASEAAAABBQAAAAhpc0FjdGl2ZQkBAAAAD3Rocm93SXNJbmFjdGl2ZQAAAAADAwkAAGYAAAACAAAAAAAAAAAABQAAABFzbGlwcGFnZVRvbGVyYW5jZQYJAABmAAAAAgUAAAARc2xpcHBhZ2VUb2xlcmFuY2UAAAAAAAAAAAoJAAACAAAAAQIAAAAgU2xpcHBhZ2UgdG9sZXJhbmNlIG11c3QgYmUgPD0gMSUDCQEAAAACIT0AAAACCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAACCQAAAgAAAAECAAAAHFR3byBhdHRhY2hlZCBhc3NldHMgZXhwZWN0ZWQDAwkBAAAAAiE9AAAAAgUAAAALcG10QXNzZXRJZEEFAAAACGFzc2V0SWRBBgkBAAAAAiE9AAAAAgUAAAALcG10QXNzZXRJZEIFAAAACGFzc2V0SWRCCQEAAAALdGhyb3dBc3NldHMAAAAAAwMJAABmAAAAAgkAAGkAAAACCQAAaAAAAAIFAAAABnNjYWxlMwkAAGUAAAACBQAAAA5zbGlwcGFnZVNjYWxlMwUAAAARc2xpcHBhZ2VUb2xlcmFuY2UFAAAADnNsaXBwYWdlU2NhbGUzBQAAAAp0b2tlblJhdGlvBgkAAGYAAAACBQAAAAp0b2tlblJhdGlvCQAAaQAAAAIJAABoAAAAAgUAAAAGc2NhbGUzCQAAZAAAAAIFAAAADnNsaXBwYWdlU2NhbGUzBQAAABFzbGlwcGFnZVRvbGVyYW5jZQUAAAAOc2xpcHBhZ2VTY2FsZTMJAAACAAAAAQIAAAA9SW5jb3JyZWN0IGFzc2V0cyBhbW91bnQ6IGFtb3VudHMgbXVzdCBoYXZlIHRoZSBjb250cmFjdCByYXRpbwMJAAAAAAAAAgUAAAAVc2hhcmVUb2tlblRvUGF5QW1vdW50AAAAAAAAAAAACQAAAgAAAAECAAAAHVRvbyBzbWFsbCBhbW91bnQgdG8gcmVwbGVuaXNoAwkBAAAAASEAAAABBQAAABBoYXNFbm91Z2hCYWxhbmNlCQAETgAAAAIJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAApwbXRBbW91bnRBBQAAAAtwbXRBc3NldElkQQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAACnBtdEFtb3VudEIFAAAAC3BtdEFzc2V0SWRCBQAAAANuaWwJAQAAABFzdXNwZW5kU3VzcGljaW91cwAAAAAEAAAABnN0YWtlMQMJAQAAAA9jb250YWluc0VsZW1lbnQAAAACBQAAAA1zdGFraW5nQXNzZXRzBQAAAA5wbXRTdHJBc3NldElkQQkAA/wAAAAEBQAAAAR0aGlzAgAAAAxzdGFrZVVuc3Rha2UJAARMAAAAAgYJAARMAAAAAgUAAAAKcG10QW1vdW50QQkABEwAAAACBQAAAA5wbXRTdHJBc3NldElkQQUAAAADbmlsBQAAAANuaWwAAAAAAAAAAAADCQAAAAAAAAIFAAAABnN0YWtlMQUAAAAGc3Rha2UxBAAAAAZzdGFrZTIDCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgUAAAANc3Rha2luZ0Fzc2V0cwUAAAAOcG10U3RyQXNzZXRJZEIJAAP8AAAABAUAAAAEdGhpcwIAAAAMc3Rha2VVbnN0YWtlCQAETAAAAAIGCQAETAAAAAIFAAAACnBtdEFtb3VudEIJAARMAAAAAgUAAAAOcG10U3RyQXNzZXRJZEIFAAAAA25pbAUAAAADbmlsAAAAAAAAAAAAAwkAAAAAAAACBQAAAAZzdGFrZTIFAAAABnN0YWtlMgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAJa0JhbGFuY2VBCQAAZAAAAAIFAAAACGJhbGFuY2VBBQAAAApwbXRBbW91bnRBCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAlrQmFsYW5jZUIJAABkAAAAAgUAAAAIYmFsYW5jZUIFAAAACnBtdEFtb3VudEIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAEWtTaGFyZUFzc2V0U3VwcGx5CQAAZAAAAAIFAAAAEHNoYXJlQXNzZXRTdXBwbHkFAAAAFXNoYXJlVG9rZW5Ub1BheUFtb3VudAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAKa0ludmFyaWFudAUAAAATaW52YXJpYW50Q2FsY3VsYXRlZAkABEwAAAACCQEAAAAHUmVpc3N1ZQAAAAMFAAAADHNoYXJlQXNzZXRJZAUAAAAVc2hhcmVUb2tlblRvUGF5QW1vdW50BgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAAFXNoYXJlVG9rZW5Ub1BheUFtb3VudAUAAAAMc2hhcmVBc3NldElkBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAABVyZXBsZW5pc2hXaXRoT25lVG9rZW4AAAACAAAAE3ZpcnR1YWxTd2FwVG9rZW5QYXkAAAATdmlydHVhbFN3YXBUb2tlbkdldAQAAAANJHQwMTQ1NjMxNDYzOAkABRQAAAACCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAAB2Fzc2V0SWQEAAAACXBtdEFtb3VudAgFAAAADSR0MDE0NTYzMTQ2MzgAAAACXzEEAAAACnBtdEFzc2V0SWQIBQAAAA0kdDAxNDU2MzE0NjM4AAAAAl8yBAAAAA0kdDAxNDY0MzE0NzE2CQEAAAAMZ2V0QXNzZXRJbmZvAAAAAQUAAAAKcG10QXNzZXRJZAQAAAANcG10U3RyQXNzZXRJZAgFAAAADSR0MDE0NjQzMTQ3MTYAAAACXzEEAAAADHBtdEFzc2V0TmFtZQgFAAAADSR0MDE0NjQzMTQ3MTYAAAACXzIEAAAAC3BtdERlY2ltYWxzCAUAAAANJHQwMTQ2NDMxNDcxNgAAAAJfMwQAAAAPcG10TWluVGhyZXNob2xkAAAAAAAATEtABAAAAB10aHJlc2hvbGRWYWx1ZUZvck1pblRvbGVyYW5jZQAAAAAAAvrwgAQAAAAJdG9sZXJhbmNlAwkAAGYAAAACBQAAAB10aHJlc2hvbGRWYWx1ZUZvck1pblRvbGVyYW5jZQUAAAAJcG10QW1vdW50AAAAAAAAAYagAAAAAAAAAAABBAAAABxzbGlwcGFnZVZhbHVlTWluRm9yUmVwbGVuaXNoCQAAZQAAAAIFAAAABnNjYWxlOAkAAGkAAAACCQAAaAAAAAIFAAAABnNjYWxlOAUAAAAJdG9sZXJhbmNlAAAAAAAAmJaABAAAABxzbGlwcGFnZVZhbHVlTWF4Rm9yUmVwbGVuaXNoCQAAZAAAAAIFAAAABnNjYWxlOAkAAGkAAAACCQAAaAAAAAIFAAAABnNjYWxlOAUAAAAJdG9sZXJhbmNlAAAAAAAAmJaABAAAABdzbGlwcGFnZVZhbHVlTWluRm9yU3dhcAkAAGUAAAACBQAAAAZzY2FsZTgJAABpAAAAAgkAAGgAAAACBQAAAAZzY2FsZTgAAAAAAAAAAAEAAAAAAACYloADCQEAAAABIQAAAAEFAAAACGlzQWN0aXZlCQEAAAAPdGhyb3dJc0luYWN0aXZlAAAAAAMJAABmAAAAAgUAAAAPcG10TWluVGhyZXNob2xkBQAAAAlwbXRBbW91bnQJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAA9QYXltZW50IGFtb3VudCAJAAGkAAAAAQUAAAAJcG10QW1vdW50AgAAACcgZG9lcyBub3QgZXhjZWVkIHRoZSBtaW5pbXVtIGFtb3VudCBvZiAJAAGkAAAAAQUAAAAPcG10TWluVGhyZXNob2xkAgAAAAcgdG9rZW5zAwkBAAAAAiE9AAAAAgkAAZAAAAABCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAQkAAAIAAAABAgAAAB1PbmUgYXR0YWNoZWQgcGF5bWVudCBleHBlY3RlZAMJAQAAAAEhAAAAAQUAAAAQaGFzRW5vdWdoQmFsYW5jZQkABE4AAAACCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAJcG10QW1vdW50BQAAAApwbXRBc3NldElkBQAAAANuaWwJAQAAABFzdXNwZW5kU3VzcGljaW91cwAAAAADAwkBAAAAAiE9AAAAAgUAAAAKcG10QXNzZXRJZAUAAAAIYXNzZXRJZEEJAQAAAAIhPQAAAAIFAAAACnBtdEFzc2V0SWQFAAAACGFzc2V0SWRCBwkBAAAAC3Rocm93QXNzZXRzAAAAAAQAAAANJHQwMTU3MjgxNjQ5MwMJAAAAAAAAAgUAAAAKcG10QXNzZXRJZAUAAAAIYXNzZXRJZEEJAAUZAAAABwkAAGUAAAACBQAAAAlwbXRBbW91bnQFAAAAE3ZpcnR1YWxTd2FwVG9rZW5QYXkFAAAAE3ZpcnR1YWxTd2FwVG9rZW5HZXQJAABkAAAAAgUAAAAIYmFsYW5jZUEFAAAAE3ZpcnR1YWxTd2FwVG9rZW5QYXkJAABlAAAAAgUAAAAIYmFsYW5jZUIFAAAAE3ZpcnR1YWxTd2FwVG9rZW5HZXQJAQAAAA1pbnZhcmlhbnRDYWxjAAAAAgkAAGQAAAACBQAAAAhiYWxhbmNlQQUAAAAJcG10QW1vdW50BQAAAAhiYWxhbmNlQgkAAGQAAAACBQAAAAhiYWxhbmNlQQUAAAAJcG10QW1vdW50BQAAAAhiYWxhbmNlQgkABRkAAAAHBQAAABN2aXJ0dWFsU3dhcFRva2VuR2V0CQAAZQAAAAIFAAAACXBtdEFtb3VudAUAAAATdmlydHVhbFN3YXBUb2tlblBheQkAAGUAAAACBQAAAAhiYWxhbmNlQQUAAAATdmlydHVhbFN3YXBUb2tlbkdldAkAAGQAAAACBQAAAAhiYWxhbmNlQgUAAAATdmlydHVhbFN3YXBUb2tlblBheQkBAAAADWludmFyaWFudENhbGMAAAACBQAAAAhiYWxhbmNlQQkAAGQAAAACBQAAAAhiYWxhbmNlQgUAAAAJcG10QW1vdW50BQAAAAhiYWxhbmNlQQkAAGQAAAACBQAAAAhiYWxhbmNlQgUAAAAJcG10QW1vdW50BAAAABF2aXJ0dWFsUmVwbGVuaXNoQQgFAAAADSR0MDE1NzI4MTY0OTMAAAACXzEEAAAAEXZpcnR1YWxSZXBsZW5pc2hCCAUAAAANJHQwMTU3MjgxNjQ5MwAAAAJfMgQAAAARYmFsYW5jZUFmdGVyU3dhcEEIBQAAAA0kdDAxNTcyODE2NDkzAAAAAl8zBAAAABFiYWxhbmNlQWZ0ZXJTd2FwQggFAAAADSR0MDE1NzI4MTY0OTMAAAACXzQEAAAAE2ludmFyaWFudENhbGN1bGF0ZWQIBQAAAA0kdDAxNTcyODE2NDkzAAAAAl81BAAAAAtuZXdCYWxhbmNlQQgFAAAADSR0MDE1NzI4MTY0OTMAAAACXzYEAAAAC25ld0JhbGFuY2VCCAUAAAANJHQwMTU3MjgxNjQ5MwAAAAJfNwQAAAAPbmV3QmFsYW5jZUVudHJ5AwkAAAAAAAACBQAAAApwbXRBc3NldElkBQAAAAhhc3NldElkQQkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAACWtCYWxhbmNlQQUAAAALbmV3QmFsYW5jZUEJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAlrQmFsYW5jZUIFAAAAC25ld0JhbGFuY2VCBAAAAAxpbnZhcmlhbnROZXcJAQAAAA1pbnZhcmlhbnRDYWxjAAAAAgUAAAARYmFsYW5jZUFmdGVyU3dhcEEFAAAAEWJhbGFuY2VBZnRlclN3YXBCBAAAABdpbnZhcmlhbnRFc3RpbWF0ZWRSYXRpbwkAAGsAAAADBQAAAAZzY2FsZTgFAAAACWludmFyaWFudAUAAAAMaW52YXJpYW50TmV3BAAAACVyYXRpb1ZpcnR1YWxCYWxhbmNlVG9WaXJ0dWFsUmVwbGVuaXNoCQAAaQAAAAIJAABrAAAAAwkAAGgAAAACBQAAAAZzY2FsZTgFAAAABnNjYWxlOAUAAAARYmFsYW5jZUFmdGVyU3dhcEEFAAAAEWJhbGFuY2VBZnRlclN3YXBCCQAAawAAAAMFAAAABnNjYWxlOAUAAAARdmlydHVhbFJlcGxlbmlzaEEFAAAAEXZpcnR1YWxSZXBsZW5pc2hCBAAAABNkQXBwVGhyZXNob2xkQW1vdW50CQAAawAAAAMJAABkAAAAAgUAAAALbmV3QmFsYW5jZUEFAAAAC25ld0JhbGFuY2VCBQAAAA1kQXBwVGhyZXNob2xkCQAAaAAAAAIAAAAAAAAAAAIFAAAAE2RBcHBUaHJlc2hvbGRTY2FsZTIDAwkAAGcAAAACBQAAABdzbGlwcGFnZVZhbHVlTWluRm9yU3dhcAUAAAAXaW52YXJpYW50RXN0aW1hdGVkUmF0aW8GCQAAZgAAAAIFAAAACWludmFyaWFudAUAAAAMaW52YXJpYW50TmV3CQAAAgAAAAECAAAAOkluY29ycmVjdCB2aXJ0dWFsU3dhcFRva2VuUGF5IG9yIHZpcnR1YWxTd2FwVG9rZW5HZXQgdmFsdWUDAwkAAGYAAAACBQAAABxzbGlwcGFnZVZhbHVlTWluRm9yUmVwbGVuaXNoBQAAACVyYXRpb1ZpcnR1YWxCYWxhbmNlVG9WaXJ0dWFsUmVwbGVuaXNoBgkAAGYAAAACBQAAACVyYXRpb1ZpcnR1YWxCYWxhbmNlVG9WaXJ0dWFsUmVwbGVuaXNoBQAAABxzbGlwcGFnZVZhbHVlTWF4Rm9yUmVwbGVuaXNoCQAAAgAAAAECAAAAbFN3YXAgd2l0aCB2aXJ0dWFsU3dhcFRva2VuUGF5IGFuZCB2aXJ0dWFsU3dhcFRva2VuR2V0IGlzIHBvc3NpYmxlLCBidXQgcmF0aW8gYWZ0ZXIgdmlydHVhbCBzd2FwIGlzIGluY29ycmVjdAMDCQAAZgAAAAIFAAAAE2RBcHBUaHJlc2hvbGRBbW91bnQFAAAAC25ld0JhbGFuY2VBBgkAAGYAAAACBQAAABNkQXBwVGhyZXNob2xkQW1vdW50BQAAAAtuZXdCYWxhbmNlQgkBAAAADnRocm93VGhyZXNob2xkAAAAAwUAAAATZEFwcFRocmVzaG9sZEFtb3VudAUAAAALbmV3QmFsYW5jZUEFAAAAC25ld0JhbGFuY2VCBAAAAAZzdGFrZTEDCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgUAAAANc3Rha2luZ0Fzc2V0cwUAAAANcG10U3RyQXNzZXRJZAkAA/wAAAAEBQAAAAR0aGlzAgAAAAxzdGFrZVVuc3Rha2UJAARMAAAAAgYJAARMAAAAAgUAAAAJcG10QW1vdW50CQAETAAAAAIFAAAADXBtdFN0ckFzc2V0SWQFAAAAA25pbAUAAAADbmlsAAAAAAAAAAAAAwkAAAAAAAACBQAAAAZzdGFrZTEFAAAABnN0YWtlMQQAAAATcmF0aW9TaGFyZVRva2Vuc0luQQkAAGsAAAADBQAAABF2aXJ0dWFsUmVwbGVuaXNoQQUAAAAGc2NhbGU4BQAAABFiYWxhbmNlQWZ0ZXJTd2FwQQQAAAATcmF0aW9TaGFyZVRva2Vuc0luQgkAAGsAAAADBQAAABF2aXJ0dWFsUmVwbGVuaXNoQgUAAAAGc2NhbGU4BQAAABFiYWxhbmNlQWZ0ZXJTd2FwQgQAAAAVc2hhcmVUb2tlblRvUGF5QW1vdW50CQAAawAAAAMJAAGXAAAAAQkABEwAAAACBQAAABNyYXRpb1NoYXJlVG9rZW5zSW5BCQAETAAAAAIFAAAAE3JhdGlvU2hhcmVUb2tlbnNJbkIFAAAAA25pbAUAAAAQc2hhcmVBc3NldFN1cHBseQUAAAAGc2NhbGU4CQAETAAAAAIJAQAAAAdSZWlzc3VlAAAAAwUAAAAMc2hhcmVBc3NldElkBQAAABVzaGFyZVRva2VuVG9QYXlBbW91bnQGCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAVc2hhcmVUb2tlblRvUGF5QW1vdW50BQAAAAxzaGFyZUFzc2V0SWQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAEWtTaGFyZUFzc2V0U3VwcGx5CQAAZAAAAAIFAAAAEHNoYXJlQXNzZXRTdXBwbHkFAAAAFXNoYXJlVG9rZW5Ub1BheUFtb3VudAkABEwAAAACBQAAAA9uZXdCYWxhbmNlRW50cnkJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAACmtJbnZhcmlhbnQFAAAAE2ludmFyaWFudENhbGN1bGF0ZWQFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAId2l0aGRyYXcAAAAABAAAAA0kdDAxODcxOTE4ODYyCQAFFAAAAAIICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAABmFtb3VudAgJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAHYXNzZXRJZAQAAAAJcG10QW1vdW50CAUAAAANJHQwMTg3MTkxODg2MgAAAAJfMQQAAAAKcG10QXNzZXRJZAgFAAAADSR0MDE4NzE5MTg4NjIAAAACXzIEAAAADGFtb3VudFRvUGF5QQkAAGsAAAADBQAAAAlwbXRBbW91bnQFAAAACGJhbGFuY2VBBQAAABBzaGFyZUFzc2V0U3VwcGx5BAAAAAxhbW91bnRUb1BheUIJAABrAAAAAwUAAAAJcG10QW1vdW50BQAAAAhiYWxhbmNlQgUAAAAQc2hhcmVBc3NldFN1cHBseQQAAAATaW52YXJpYW50Q2FsY3VsYXRlZAkBAAAADWludmFyaWFudENhbGMAAAACCQAAZQAAAAIFAAAACGJhbGFuY2VBBQAAAAxhbW91bnRUb1BheUEJAABlAAAAAgUAAAAIYmFsYW5jZUIFAAAADGFtb3VudFRvUGF5QgMJAQAAAAEhAAAAAQUAAAAIaXNBY3RpdmUJAQAAAA90aHJvd0lzSW5hY3RpdmUAAAAAAwkBAAAAAiE9AAAAAgkAAZAAAAABCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAQkAAAIAAAABAgAAAB1PbmUgYXR0YWNoZWQgcGF5bWVudCBleHBlY3RlZAMJAQAAAAIhPQAAAAIFAAAACnBtdEFzc2V0SWQFAAAADHNoYXJlQXNzZXRJZAkAAAIAAAABCQABLAAAAAICAAAAJEluY29ycmVjdCBhc3NldCBhdHRhY2hlZC4gRXhwZWN0ZWQ6IAkAAlgAAAABBQAAAAxzaGFyZUFzc2V0SWQDCQEAAAABIQAAAAEFAAAAEGhhc0Vub3VnaEJhbGFuY2UJAAROAAAAAgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAACXBtdEFtb3VudAUAAAAKcG10QXNzZXRJZAUAAAADbmlsCQEAAAARc3VzcGVuZFN1c3BpY2lvdXMAAAAABAAAAAZzdGFrZTEDCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgUAAAANc3Rha2luZ0Fzc2V0cwUAAAALc3RyQXNzZXRJZEEJAAP8AAAABAUAAAAEdGhpcwIAAAAMc3Rha2VVbnN0YWtlCQAETAAAAAIHCQAETAAAAAIFAAAADGFtb3VudFRvUGF5QQkABEwAAAACBQAAAAtzdHJBc3NldElkQQUAAAADbmlsBQAAAANuaWwAAAAAAAAAAAADCQAAAAAAAAIFAAAABnN0YWtlMQUAAAAGc3Rha2UxBAAAAAZzdGFrZTIDCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgUAAAANc3Rha2luZ0Fzc2V0cwUAAAALc3RyQXNzZXRJZEIJAAP8AAAABAUAAAAEdGhpcwIAAAAMc3Rha2VVbnN0YWtlCQAETAAAAAIHCQAETAAAAAIFAAAADGFtb3VudFRvUGF5QgkABEwAAAACBQAAAAtzdHJBc3NldElkQgUAAAADbmlsBQAAAANuaWwAAAAAAAAAAAADCQAAAAAAAAIFAAAABnN0YWtlMgUAAAAGc3Rha2UyCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAlrQmFsYW5jZUEJAABlAAAAAgUAAAAIYmFsYW5jZUEFAAAADGFtb3VudFRvUGF5QQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAJa0JhbGFuY2VCCQAAZQAAAAIFAAAACGJhbGFuY2VCBQAAAAxhbW91bnRUb1BheUIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAEWtTaGFyZUFzc2V0U3VwcGx5CQAAZQAAAAIFAAAAEHNoYXJlQXNzZXRTdXBwbHkFAAAACXBtdEFtb3VudAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAKa0ludmFyaWFudAUAAAATaW52YXJpYW50Q2FsY3VsYXRlZAkABEwAAAACCQEAAAAEQnVybgAAAAIFAAAADHNoYXJlQXNzZXRJZAUAAAAJcG10QW1vdW50CQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAMYW1vdW50VG9QYXlBBQAAAAhhc3NldElkQQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAADGFtb3VudFRvUGF5QgUAAAAIYXNzZXRJZEIFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAACGV4Y2hhbmdlAAAAAgAAABhlc3RpbWF0ZWRBbW91bnRUb1JlY2VpdmUAAAASbWluQW1vdW50VG9SZWNlaXZlBAAAAA0kdDAyMDM3NjIwNDUxCQAFFAAAAAIICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAABmFtb3VudAgJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAHYXNzZXRJZAQAAAAJcG10QW1vdW50CAUAAAANJHQwMjAzNzYyMDQ1MQAAAAJfMQQAAAAKcG10QXNzZXRJZAgFAAAADSR0MDIwMzc2MjA0NTEAAAACXzIDCQEAAAABIQAAAAEFAAAACGlzQWN0aXZlCQEAAAAPdGhyb3dJc0luYWN0aXZlAAAAAAMJAABnAAAAAgAAAAAAAAAAAAUAAAAYZXN0aW1hdGVkQW1vdW50VG9SZWNlaXZlCQAAAgAAAAEJAAEsAAAAAgIAAAArRXN0aW1hdGVkIGFtb3VudCBtdXN0IGJlIHBvc2l0aXZlLiBBY3R1YWw6IAkAAaQAAAABBQAAABhlc3RpbWF0ZWRBbW91bnRUb1JlY2VpdmUDCQAAZgAAAAIFAAAAEm1pbkFtb3VudFRvUmVjZWl2ZQUAAAAYZXN0aW1hdGVkQW1vdW50VG9SZWNlaXZlCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAO01pbmltYWwgYW1vdW50IGNhbid0IGJlIGdyZWF0ZXIgdGhhbiBlc3RpbWF0ZWQuIEVzdGltYXRlZDogCQABpAAAAAEFAAAAGGVzdGltYXRlZEFtb3VudFRvUmVjZWl2ZQIAAAALLiBNaW5pbWFsOiAJAAGkAAAAAQUAAAASbWluQW1vdW50VG9SZWNlaXZlAwkBAAAAAiE9AAAAAgkAAZAAAAABCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAQkAAAIAAAABAgAAAB1PbmUgYXR0YWNoZWQgcGF5bWVudCBleHBlY3RlZAMJAQAAAAEhAAAAAQUAAAAQaGFzRW5vdWdoQmFsYW5jZQkABE4AAAACCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAJcG10QW1vdW50BQAAAApwbXRBc3NldElkBQAAAANuaWwJAQAAABFzdXNwZW5kU3VzcGljaW91cwAAAAADAwkBAAAAAiE9AAAAAgUAAAAKcG10QXNzZXRJZAUAAAAIYXNzZXRJZEEJAQAAAAIhPQAAAAIFAAAACnBtdEFzc2V0SWQFAAAACGFzc2V0SWRCBwkBAAAAC3Rocm93QXNzZXRzAAAAAAMJAABmAAAAAgAAAAAAAJiWgAUAAAAJcG10QW1vdW50CQAAAgAAAAECAAAAME9ubHkgc3dhcCBvZiAxMC4wMDAwMDAgb3IgbW9yZSB0b2tlbnMgaXMgYWxsb3dlZAMDCQAAZgAAAAIFAAAAFWV4Y2hhbmdlUmF0aW9MaW1pdE1pbgkAAGsAAAADBQAAAAZzY2FsZTgFAAAAEm1pbkFtb3VudFRvUmVjZWl2ZQUAAAAJcG10QW1vdW50BgkAAGYAAAACCQAAawAAAAMFAAAABnNjYWxlOAUAAAAYZXN0aW1hdGVkQW1vdW50VG9SZWNlaXZlBQAAAAlwbXRBbW91bnQFAAAAFWV4Y2hhbmdlUmF0aW9MaW1pdE1heAkAAAIAAAABAgAAABxJbmNvcnJlY3QgYXJncyBhbmQgcG10IHJhdGlvBAAAAAtzZW5kQXNzZXRJZAMJAAAAAAAAAgUAAAAKcG10QXNzZXRJZAUAAAAIYXNzZXRJZEEFAAAACGFzc2V0SWRCBQAAAAhhc3NldElkQQQAAAAGYW1vdW50CQEAAAATY2FsY3VsYXRlU2VuZEFtb3VudAAAAAQFAAAAGGVzdGltYXRlZEFtb3VudFRvUmVjZWl2ZQUAAAASbWluQW1vdW50VG9SZWNlaXZlBQAAAAlwbXRBbW91bnQFAAAACnBtdEFzc2V0SWQEAAAAEGdvdmVybmFuY2VSZXdhcmQJAABrAAAAAwUAAAAGYW1vdW50BQAAAA1mZWVHb3Zlcm5hbmNlBQAAAAlmZWVTY2FsZTYEAAAADmFtb3VudE1pbnVzRmVlCQAAawAAAAMFAAAABmFtb3VudAkAAGUAAAACBQAAAAlmZWVTY2FsZTYFAAAAA2ZlZQUAAAAJZmVlU2NhbGU2BAAAAA0kdDAyMTg3MzIyMTM1AwkAAAAAAAACBQAAAApwbXRBc3NldElkBQAAAAhhc3NldElkQQkABRQAAAACCQAAZAAAAAIFAAAACGJhbGFuY2VBBQAAAAlwbXRBbW91bnQJAABlAAAAAgkAAGUAAAACBQAAAAhiYWxhbmNlQgUAAAAOYW1vdW50TWludXNGZWUFAAAAEGdvdmVybmFuY2VSZXdhcmQJAAUUAAAAAgkAAGUAAAACCQAAZQAAAAIFAAAACGJhbGFuY2VBBQAAAA5hbW91bnRNaW51c0ZlZQUAAAAQZ292ZXJuYW5jZVJld2FyZAkAAGQAAAACBQAAAAhiYWxhbmNlQgUAAAAJcG10QW1vdW50BAAAAAtuZXdCYWxhbmNlQQgFAAAADSR0MDIxODczMjIxMzUAAAACXzEEAAAAC25ld0JhbGFuY2VCCAUAAAANJHQwMjE4NzMyMjEzNQAAAAJfMgQAAAATZEFwcFRocmVzaG9sZEFtb3VudAkAAGsAAAADCQAAZAAAAAIFAAAAC25ld0JhbGFuY2VBBQAAAAtuZXdCYWxhbmNlQgUAAAANZEFwcFRocmVzaG9sZAkAAGgAAAACAAAAAAAAAAACBQAAABNkQXBwVGhyZXNob2xkU2NhbGUyAwMJAABmAAAAAgUAAAATZEFwcFRocmVzaG9sZEFtb3VudAUAAAALbmV3QmFsYW5jZUEGCQAAZgAAAAIFAAAAE2RBcHBUaHJlc2hvbGRBbW91bnQFAAAAC25ld0JhbGFuY2VCCQEAAAAOdGhyb3dUaHJlc2hvbGQAAAADBQAAABNkQXBwVGhyZXNob2xkQW1vdW50BQAAAAtuZXdCYWxhbmNlQQUAAAALbmV3QmFsYW5jZUIEAAAADSR0MDIyNDMzMjI1MDYJAQAAAAxnZXRBc3NldEluZm8AAAABBQAAAApwbXRBc3NldElkBAAAAA1wbXRTdHJBc3NldElkCAUAAAANJHQwMjI0MzMyMjUwNgAAAAJfMQQAAAAMcG10QXNzZXROYW1lCAUAAAANJHQwMjI0MzMyMjUwNgAAAAJfMgQAAAALcG10RGVjaW1hbHMIBQAAAA0kdDAyMjQzMzIyNTA2AAAAAl8zBAAAAA0kdDAyMjUxOTIyNTk2CQEAAAAMZ2V0QXNzZXRJbmZvAAAAAQUAAAALc2VuZEFzc2V0SWQEAAAADnNlbmRTdHJBc3NldElkCAUAAAANJHQwMjI1MTkyMjU5NgAAAAJfMQQAAAANc2VuZEFzc2V0TmFtZQgFAAAADSR0MDIyNTE5MjI1OTYAAAACXzIEAAAADHNlbmREZWNpbWFscwgFAAAADSR0MDIyNTE5MjI1OTYAAAACXzMEAAAABnN0YWtlMQMJAQAAAA9jb250YWluc0VsZW1lbnQAAAACBQAAAA1zdGFraW5nQXNzZXRzBQAAAA1wbXRTdHJBc3NldElkCQAD/AAAAAQFAAAABHRoaXMCAAAADHN0YWtlVW5zdGFrZQkABEwAAAACBgkABEwAAAACBQAAAAlwbXRBbW91bnQJAARMAAAAAgUAAAANcG10U3RyQXNzZXRJZAUAAAADbmlsBQAAAANuaWwAAAAAAAAAAAADCQAAAAAAAAIFAAAABnN0YWtlMQUAAAAGc3Rha2UxBAAAAAZzdGFrZTIDCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgUAAAANc3Rha2luZ0Fzc2V0cwUAAAAOc2VuZFN0ckFzc2V0SWQJAAP8AAAABAUAAAAEdGhpcwIAAAAMc3Rha2VVbnN0YWtlCQAETAAAAAIHCQAETAAAAAIJAABkAAAAAgUAAAAOYW1vdW50TWludXNGZWUFAAAAEGdvdmVybmFuY2VSZXdhcmQJAARMAAAAAgUAAAAOc2VuZFN0ckFzc2V0SWQFAAAAA25pbAUAAAADbmlsAAAAAAAAAAAAAwkAAAAAAAACBQAAAAZzdGFrZTIFAAAABnN0YWtlMgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAJa0JhbGFuY2VBBQAAAAtuZXdCYWxhbmNlQQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAJa0JhbGFuY2VCBQAAAAtuZXdCYWxhbmNlQgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAKa0ludmFyaWFudAkBAAAADWludmFyaWFudENhbGMAAAACBQAAAAtuZXdCYWxhbmNlQQUAAAALbmV3QmFsYW5jZUIJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAA5hbW91bnRNaW51c0ZlZQUAAAALc2VuZEFzc2V0SWQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAHZ292QWRkcgUAAAAQZ292ZXJuYW5jZVJld2FyZAUAAAALc2VuZEFzc2V0SWQFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAACHNodXRkb3duAAAAAAMJAQAAAAEhAAAAAQUAAAAIaXNBY3RpdmUJAAACAAAAAQkAASwAAAACAgAAACJEQXBwIGlzIGFscmVhZHkgc3VzcGVuZGVkLiBDYXVzZTogCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAABHRoaXMFAAAABmtDYXVzZQIAAAAadGhlIGNhdXNlIHdhc24ndCBzcGVjaWZpZWQDCQEAAAABIQAAAAEJAQAAAA9jb250YWluc0VsZW1lbnQAAAACCQAETAAAAAIFAAAADGFkbWluUHViS2V5MQkABEwAAAACBQAAAAxhZG1pblB1YktleTIJAARMAAAAAgUAAAAMYWRtaW5QdWJLZXkzCQAETAAAAAIFAAAADGFkbVN0YXJ0U3RvcAUAAAADbmlsCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkJAQAAAA50aHJvd09ubHlBZG1pbgAAAAAJAQAAAAdzdXNwZW5kAAAAAQIAAAAPUGF1c2VkIGJ5IGFkbWluAAAAAWkBAAAACGFjdGl2YXRlAAAAAAMFAAAACGlzQWN0aXZlCQEAAAANdGhyb3dJc0FjdGl2ZQAAAAADCQEAAAABIQAAAAEJAQAAAA9jb250YWluc0VsZW1lbnQAAAACCQAETAAAAAIFAAAADGFkbWluUHViS2V5MQkABEwAAAACBQAAAAxhZG1pblB1YktleTIJAARMAAAAAgUAAAAMYWRtaW5QdWJLZXkzCQAETAAAAAIFAAAADGFkbVN0YXJ0U3RvcAUAAAADbmlsCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkJAQAAAA50aHJvd09ubHlBZG1pbgAAAAAJAARMAAAAAgkBAAAADEJvb2xlYW5FbnRyeQAAAAIFAAAAB2tBY3RpdmUGCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEFAAAABmtDYXVzZQUAAAADbmlsAAAAAWkBAAAAGXRha2VJbnRvQWNjb3VudEV4dHJhRnVuZHMAAAABAAAAC2Ftb3VudExlYXZlBAAAAAx1bmNvdW50YWJsZUEJAABlAAAAAgUAAAAZYWNjb3VudEJhbGFuY2VXaXRoU3Rha2VkQQUAAAAIYmFsYW5jZUEEAAAADHVuY291bnRhYmxlQgkAAGUAAAACBQAAABlhY2NvdW50QmFsYW5jZVdpdGhTdGFrZWRCBQAAAAhiYWxhbmNlQgQAAAANYW1vdW50RW5yb2xsQQkAAGUAAAACBQAAAAx1bmNvdW50YWJsZUEDCQAAAAAAAAIFAAAACGFzc2V0SWRBBQAAAAR1bml0BQAAAAthbW91bnRMZWF2ZQAAAAAAAAAAAAQAAAANYW1vdW50RW5yb2xsQgkAAGUAAAACBQAAAAx1bmNvdW50YWJsZUIDCQAAAAAAAAIFAAAACGFzc2V0SWRCBQAAAAR1bml0BQAAAAthbW91bnRMZWF2ZQAAAAAAAAAAAAQAAAAMaW52YXJpYW50TmV3CQEAAAANaW52YXJpYW50Q2FsYwAAAAIJAABkAAAAAgUAAAAIYmFsYW5jZUEFAAAADWFtb3VudEVucm9sbEEJAABkAAAAAgUAAAAIYmFs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", "height": 1856849, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: FaRA8aykCEdvXnmPqE8V8YCGBS1bWsViXU9YMGAURbji Next: G1kREXanqubBDmg3Ro9XEmBqGkJz4zWeMqvdG1PwfSxw Diff:
OldNewDifferences
3737
3838 let r = "admin_pub_3"
3939
40-let s = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
40+let s = Address(base58'3N8PGkzXhbtTvEwEQTtE2xiTJmsDEQ9XfoZ')
4141
42-func t (u) = {
43- let v = getString(s, u)
44- if ($isInstanceOf(v, "String"))
42+let t = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
43+
44+func u (v) = {
45+ let w = getString(t, v)
46+ if ($isInstanceOf(w, "String"))
4547 then {
46- let w = v
47- fromBase58String(w)
48+ let x = w
49+ fromBase58String(x)
4850 }
4951 else {
50- let x = v
52+ let y = w
5153 throw("Admin public key is empty")
5254 }
5355 }
5456
5557
56-let y = t(p)
58+let z = u(p)
5759
58-let z = t(q)
60+let A = u(q)
5961
60-let A = t(r)
61-
62-let B = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
62+let B = u(r)
6363
6464 let C = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
6565
66-let D = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
66+let D = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
6767
68-let E = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
68+let E = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
6969
70-let F = base58'ECBCkHS68DckpBrzLeoRgYbFg7sCVqR176mPqbXsj9pA'
70+let F = Address(base58'3N6q7sCGSSLBUXDdjBdYGTJbZGZfhhh8cNg')
7171
72-let G = [toBase58String(E), toBase58String(F)]
72+let G = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
7373
74-let H = Address(fromBase58String(valueOrErrorMessage(getString(s, n), "no usdn staking address")))
74+let H = base58'ECBCkHS68DckpBrzLeoRgYbFg7sCVqR176mPqbXsj9pA'
7575
76-let I = Address(fromBase58String(valueOrErrorMessage(getString(s, o), "no usdn staking address")))
76+let I = [toBase58String(G), toBase58String(H)]
7777
78-let J = getBooleanValue(this, c)
78+let J = Address(fromBase58String(valueOrErrorMessage(getString(t, n), "no usdn staking address")))
7979
80-let K = getStringValue(this, d)
80+let K = Address(fromBase58String(valueOrErrorMessage(getString(t, o), "no usdn staking address")))
8181
82-let L = getStringValue(this, e)
82+let L = getBooleanValue(this, c)
8383
84-let M = if ((K == "WAVES"))
84+let M = getStringValue(this, d)
85+
86+let N = getStringValue(this, e)
87+
88+let O = if ((M == "WAVES"))
8589 then unit
86- else fromBase58String(K)
90+ else fromBase58String(M)
8791
88-let N = if ((L == "WAVES"))
92+let P = if ((N == "WAVES"))
8993 then unit
90- else fromBase58String(L)
94+ else fromBase58String(N)
9195
92-let O = {
93- let v = M
94- if ($isInstanceOf(v, "ByteVector"))
96+let Q = {
97+ let w = O
98+ if ($isInstanceOf(w, "ByteVector"))
9599 then {
96- let P = v
97- value(assetInfo(P)).name
100+ let R = w
101+ value(assetInfo(R)).name
98102 }
99- else if ($isInstanceOf(v, "Unit"))
103+ else if ($isInstanceOf(w, "Unit"))
100104 then {
101- let Q = v
105+ let S = w
102106 "WAVES"
103107 }
104108 else throw("Match error")
105109 }
106110
107-let R = {
108- let v = N
109- if ($isInstanceOf(v, "ByteVector"))
111+let T = {
112+ let w = P
113+ if ($isInstanceOf(w, "ByteVector"))
110114 then {
111- let P = v
112- value(assetInfo(P)).name
115+ let R = w
116+ value(assetInfo(R)).name
113117 }
114- else if ($isInstanceOf(v, "Unit"))
118+ else if ($isInstanceOf(w, "Unit"))
115119 then {
116- let Q = v
120+ let S = w
117121 "WAVES"
118122 }
119123 else throw("Match error")
120124 }
121125
122-let S = getIntegerValue(this, f)
126+let U = getIntegerValue(this, f)
123127
124-let T = getIntegerValue(this, g)
128+let V = getIntegerValue(this, g)
125129
126-let U = fromBase58String(getStringValue(this, h))
130+let W = fromBase58String(getStringValue(this, h))
127131
128-let V = getIntegerValue(this, i)
132+let X = getIntegerValue(this, i)
129133
130-let W = getIntegerValue(this, l)
134+let Y = getIntegerValue(this, l)
131135
132-let X = 500
136+let Z = 500
133137
134-let Y = 200
138+let aa = 200
135139
136-let Z = 1000000
140+let ab = 1000000
137141
138-let aa = 1000
142+let ac = 1000
139143
140-let ab = 100000000
144+let ad = 100000000
141145
142-let ac = 1000000000000
146+let ae = 1000000000000
143147
144-let ad = 1000
148+let af = 1000
145149
146-let ae = 8
150+let ag = 8
147151
148-let af = 50
152+let ah = 50
149153
150-let ag = 100
154+let ai = 100
151155
152-let ah = 90000000
156+let aj = 90000000
153157
154-let ai = 110000000
158+let ak = 110000000
155159
156-let aj = 50
160+let al = 50
157161
158-let ak = 2
162+let am = 2
159163
160-let al = 46000000
164+let an = 46000000
161165
162-func am (an) = {
163- let v = an
164- if ($isInstanceOf(v, "ByteVector"))
166+func ao (ap) = {
167+ let w = ap
168+ if ($isInstanceOf(w, "ByteVector"))
165169 then {
166- let P = v
167- assetBalance(this, P)
170+ let R = w
171+ assetBalance(this, R)
168172 }
169- else if ($isInstanceOf(v, "Unit"))
173+ else if ($isInstanceOf(w, "Unit"))
170174 then {
171- let Q = v
175+ let S = w
172176 wavesBalance(this).available
173177 }
174178 else throw("Match error")
175179 }
176180
177181
178-func ao (an) = {
179- let ap = {
180- let v = an
181- if ($isInstanceOf(v, "ByteVector"))
182+func aq (ap) = {
183+ let ar = {
184+ let w = ap
185+ if ($isInstanceOf(w, "ByteVector"))
182186 then {
183- let aq = v
184- if ((aq == E))
185- then getInteger(H, ((("rpd_balance_" + toBase58String(aq)) + "_") + toString(this)))
186- else if ((aq == F))
187- then getInteger(I, ((("%s%s%s__stakingBalance__" + toBase58String(aq)) + "__") + toString(this)))
187+ let as = w
188+ if ((as == G))
189+ then getInteger(J, ((("rpd_balance_" + toBase58String(as)) + "_") + toString(this)))
190+ else if ((as == H))
191+ then getInteger(K, ((("%s%s%s__stakingBalance__" + toBase58String(as)) + "__") + toString(this)))
188192 else 0
189193 }
190- else if ($isInstanceOf(v, "Unit"))
194+ else if ($isInstanceOf(w, "Unit"))
191195 then 0
192196 else throw("Match error")
193197 }
194- let v = ap
195- if ($isInstanceOf(v, "Int"))
198+ let w = ar
199+ if ($isInstanceOf(w, "Int"))
196200 then {
197- let ar = v
198- ar
201+ let at = w
202+ at
199203 }
200204 else 0
201205 }
202206
203207
204-let as = ao(M)
208+let au = aq(O)
205209
206-let at = ao(N)
210+let av = aq(P)
207211
208-let au = (am(M) + as)
212+let aw = (U - au)
209213
210-let av = (am(N) + at)
214+let ax = (V - av)
211215
212-let aw = if ((au >= S))
213- then (av >= T)
216+let ay = (ao(O) + au)
217+
218+let az = (ao(P) + av)
219+
220+let aA = if ((ay >= U))
221+ then (az >= V)
214222 else false
215223
216-func ax (ay,az) = (((fraction(ac, ay, az) + fraction(ac, az, ay)) / 2) / 10000)
224+func aB (aC,aD) = (((fraction(ae, aC, aD) + fraction(ae, aD, aC)) / 2) / 10000)
217225
218226
219-func aA (ay,az) = {
220- let aB = ax(ay, az)
221- (fraction((ay + az), ab, pow(aB, ae, aj, ak, ae, CEILING)) + (2 * fraction(pow(fraction(ay, az, ab), 0, 5, 1, (ae / 2), DOWN), pow((aB - al), ae, aj, ak, ae, DOWN), ab)))
227+func aE (aC,aD) = {
228+ let aF = aB(aC, aD)
229+ (fraction((aC + aD), ad, pow(aF, ag, al, am, ag, CEILING)) + (2 * fraction(pow(fraction(aC, aD, ad), 0, 5, 1, (ag / 2), DOWN), pow((aF - an), ag, al, am, ag, DOWN), ad)))
222230 }
223231
224232
225-func aC (aD,aE,aF,aG) = {
226- let aH = (ab - ((ab * 1) / 10000000))
227- let aI = (aD - aE)
228- let ay = (S + aF)
229- let az = (T + aF)
230- let aJ = if ((aG == M))
231- then aA(ay, (T - aD))
232- else if ((aG == N))
233- then aA((S - aD), az)
233+func aG (aH,aI,aJ,aK) = {
234+ let aL = (ad - ((ad * 1) / 10000000))
235+ let aM = (aH - aI)
236+ let aC = (U + aJ)
237+ let aD = (V + aJ)
238+ let aN = if ((aK == O))
239+ then aE(aC, (V - aH))
240+ else if ((aK == P))
241+ then aE((U - aH), aD)
234242 else throw("Wrong asset in payment")
235- let aK = fraction(ab, W, aJ)
236- func aL (aM,aN) = if ((aM == -1))
243+ let aO = fraction(ad, Y, aN)
244+ func aP (aQ,aR) = if ((aQ == -1))
237245 then {
238- let aO = (aD - ((aN * aI) / 5))
239- let aP = if ((aG == M))
240- then aA(ay, (T - aO))
241- else aA((S - aO), az)
242- if ((aP > W))
243- then aO
246+ let aS = (aH - ((aR * aM) / 5))
247+ let aT = if ((aK == O))
248+ then aE(aC, (V - aS))
249+ else aE((U - aS), aD)
250+ if ((aT > Y))
251+ then aS
244252 else -1
245253 }
246- else aM
254+ else aQ
247255
248- let aQ = {
249- let aR = [1, 2, 3, 4, 5]
250- let aS = size(aR)
251- let aT = -1
252- func aU (aV,aW) = if ((aW >= aS))
253- then aV
254- else aL(aV, aR[aW])
256+ let aU = {
257+ let aV = [1, 2, 3, 4, 5]
258+ let aW = size(aV)
259+ let aX = -1
260+ func aY (aZ,ba) = if ((ba >= aW))
261+ then aZ
262+ else aP(aZ, aV[ba])
255263
256- func aX (aV,aW) = if ((aW >= aS))
257- then aV
264+ func bb (aZ,ba) = if ((ba >= aW))
265+ then aZ
258266 else throw("List size exceeds 5")
259267
260- aX(aU(aU(aU(aU(aU(aT, 0), 1), 2), 3), 4), 5)
268+ bb(aY(aY(aY(aY(aY(aX, 0), 1), 2), 3), 4), 5)
261269 }
262- if ((0 > aQ))
270+ if ((0 > aU))
263271 then throw("something went wrong while working with amountToSend")
264- else if (if ((aK > aH))
265- then (aJ > W)
272+ else if (if ((aO > aL))
273+ then (aN > Y)
266274 else false)
267- then aD
268- else aQ
275+ then aH
276+ else aU
269277 }
270278
271279
272-func aY (an) = {
273- let v = an
274- if ($isInstanceOf(v, "ByteVector"))
280+func bc (ap) = {
281+ let w = ap
282+ if ($isInstanceOf(w, "ByteVector"))
275283 then {
276- let P = v
277- let aZ = toBase58String(P)
278- let ba = valueOrErrorMessage(assetInfo(P), (("Asset " + aZ) + " doesn't exist"))
279- $Tuple3(aZ, ba.name, ba.decimals)
284+ let R = w
285+ let bd = toBase58String(R)
286+ let be = valueOrErrorMessage(assetInfo(R), (("Asset " + bd) + " doesn't exist"))
287+ $Tuple3(bd, be.name, be.decimals)
280288 }
281- else if ($isInstanceOf(v, "Unit"))
289+ else if ($isInstanceOf(w, "Unit"))
282290 then {
283- let Q = v
291+ let S = w
284292 $Tuple3("WAVES", "WAVES", 8)
285293 }
286294 else throw("Match error")
287295 }
288296
289297
290-func bb (bc) = [BooleanEntry(c, false), StringEntry(m, bc)]
298+func bf (bg) = [BooleanEntry(c, false), StringEntry(m, bg)]
291299
292300
293-func bd () = throw("DApp is already active")
301+func bh () = throw("DApp is already active")
294302
295303
296-func be () = throw("DApp is inactive at this moment")
304+func bi () = throw("DApp is inactive at this moment")
297305
298306
299-func bf () = throw("Only admin can call this function")
307+func bj () = throw("Only admin can call this function")
300308
301309
302-func bg () = throw(((("Incorrect assets attached. Expected: " + K) + " and ") + L))
310+func bk () = throw(((("Incorrect assets attached. Expected: " + M) + " and ") + N))
303311
304312
305-func bh (bi,bj,bk) = throw(((((((((("New balance in assets of the DApp is less than threshold " + toString(bi)) + ": ") + toString(bj)) + " ") + O) + ", ") + toString(bk)) + " ") + R))
313+func bl (bm,bn,bo) = throw(((((((((("New balance in assets of the DApp is less than threshold " + toString(bm)) + ": ") + toString(bn)) + " ") + Q) + ", ") + toString(bo)) + " ") + T))
306314
307315
308-func bl () = bb(((((((((((((((("Suspicious state. Actual balances: " + toString(S)) + " ") + O) + ", ") + toString(T)) + " ") + R) + ". State: ") + toString(am(M))) + " ") + O) + ", ") + toString(am(N))) + " ") + R))
316+func bp () = bf(((((((((((((((("Suspicious state. Actual balances: " + toString(U)) + " ") + Q) + ", ") + toString(V)) + " ") + T) + ". State: ") + toString(ao(O))) + " ") + Q) + ", ") + toString(ao(P))) + " ") + T))
309317
310318
311-func bm (bn,an) = if (bn)
312- then if ((an == E))
313- then $Tuple2("lockNeutrino", H)
314- else $Tuple2("startStaking", I)
315- else if ((an == E))
316- then $Tuple2("unlockNeutrino", H)
317- else $Tuple2("stopStaking", I)
319+func bq (br,ap) = if (br)
320+ then if ((ap == G))
321+ then $Tuple2("lockNeutrino", J)
322+ else $Tuple2("startStaking", K)
323+ else if ((ap == G))
324+ then $Tuple2("unlockNeutrino", J)
325+ else $Tuple2("stopStaking", K)
318326
319327
320-func bo (bn,bp,an) = if (bn)
328+func bs (br,bt,ap) = if (br)
321329 then {
322- let bq = bm(bn, an)
323- let br = bq._1
324- let bs = bq._2
325- $Tuple4(br, bs, nil, [AttachedPayment(an, bp)])
330+ let bu = bq(br, ap)
331+ let bv = bu._1
332+ let bw = bu._2
333+ $Tuple4(bv, bw, nil, [AttachedPayment(ap, bt)])
326334 }
327335 else {
328- let bt = bm(bn, an)
329- let br = bt._1
330- let bs = bt._2
331- $Tuple4(br, bs, [bp, toBase58String(an)], nil)
336+ let bx = bq(br, ap)
337+ let bv = bx._1
338+ let bw = bx._2
339+ $Tuple4(bv, bw, [bt, toBase58String(ap)], nil)
332340 }
333341
334342
335-@Callable(ar)
343+@Callable(at)
336344 func init () = {
337- let bu = $Tuple2(ar.payments[0].amount, ar.payments[0].assetId)
338- let bv = bu._1
339- let bw = bu._2
340- let bx = $Tuple2(ar.payments[1].amount, ar.payments[1].assetId)
341- let by = bx._1
342- let bz = bx._2
343- let bA = aY(bw)
344- let bB = bA._1
345- let bC = bA._2
346- let bD = bA._3
347- let bE = aY(bz)
345+ let by = $Tuple2(at.payments[0].amount, at.payments[0].assetId)
346+ let bz = by._1
347+ let bA = by._2
348+ let bB = $Tuple2(at.payments[1].amount, at.payments[1].assetId)
349+ let bC = bB._1
350+ let bD = bB._2
351+ let bE = bc(bA)
348352 let bF = bE._1
349353 let bG = bE._2
350354 let bH = bE._3
355+ let bI = bc(bD)
356+ let bJ = bI._1
357+ let bK = bI._2
358+ let bL = bI._3
351359 if (isDefined(getBoolean(this, c)))
352- then bd()
353- else if ((bw == bz))
360+ then bh()
361+ else if ((bA == bD))
354362 then throw("Assets must be different")
355363 else {
356- let bI = ((("s" + take(bC, 7)) + "_") + take(bG, 7))
357- let bJ = ((((("ShareToken of SwopFi protocol for " + bC) + " and ") + bG) + " at address ") + toString(this))
358- let bK = ((bD + bH) / 2)
359- let bL = fraction(pow(bv, bD, 5, 1, bD, DOWN), pow(by, bH, 5, 1, bH, DOWN), pow(10, 0, bK, 0, 0, DOWN))
360- let bM = Issue(bI, bJ, bL, bK, true)
361- let bN = calculateAssetId(bM)
362- let bO = aA(bv, by)
363- let bP = if (containsElement(G, bB))
364- then invoke(this, "stakeUnstake", [true, bv, bB], nil)
364+ let bM = ((("s" + take(bG, 7)) + "_") + take(bK, 7))
365+ let bN = ((((("ShareToken of SwopFi protocol for " + bG) + " and ") + bK) + " at address ") + toString(this))
366+ let bO = ((bH + bL) / 2)
367+ let bP = fraction(pow(bz, bH, 5, 1, bH, DOWN), pow(bC, bL, 5, 1, bL, DOWN), pow(10, 0, bO, 0, 0, DOWN))
368+ let bQ = Issue(bM, bN, bP, bO, true)
369+ let bR = calculateAssetId(bQ)
370+ let bS = aE(bz, bC)
371+ let bT = if (containsElement(I, bF))
372+ then invoke(this, "stakeUnstake", [true, bz, bF], nil)
365373 else 0
366- if ((bP == bP))
374+ if ((bT == bT))
367375 then {
368- let bQ = if (containsElement(G, bF))
369- then invoke(this, "stakeUnstake", [true, by, bF], nil)
376+ let bU = if (containsElement(I, bJ))
377+ then invoke(this, "stakeUnstake", [true, bC, bJ], nil)
370378 else 0
371- if ((bQ == bQ))
372- then [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bB), StringEntry(e, bF), IntegerEntry(f, bv), IntegerEntry(g, by), IntegerEntry(l, bO), IntegerEntry(j, X), IntegerEntry(k, Z), bM, StringEntry(h, toBase58String(bN)), IntegerEntry(i, bL), ScriptTransfer(ar.caller, bL, bN)]
379+ if ((bU == bU))
380+ then [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bF), StringEntry(e, bJ), IntegerEntry(f, bz), IntegerEntry(g, bC), IntegerEntry(l, bS), IntegerEntry(j, Z), IntegerEntry(k, ab), bQ, StringEntry(h, toBase58String(bR)), IntegerEntry(i, bP), ScriptTransfer(at.caller, bP, bR)]
373381 else throw("Strict value is not equal to itself.")
374382 }
375383 else throw("Strict value is not equal to itself.")
378386
379387
380388
381-@Callable(ar)
382-func replenishWithTwoTokens (bR) = {
383- let bw = ar.payments[0].assetId
384- let bz = ar.payments[1].assetId
385- let bv = ar.payments[0].amount
386- let by = ar.payments[1].amount
387- let bS = aY(bw)
388- let bB = bS._1
389- let bC = bS._2
390- let bD = bS._3
391- let bT = aY(bz)
392- let bF = bT._1
393- let bG = bT._2
394- let bH = bT._3
395- let bU = fraction(fraction(ab, S, bv), aa, fraction(ab, T, by))
396- let bV = fraction(ab, bv, S)
397- let bW = fraction(ab, by, T)
398- let bX = fraction(min([bV, bW]), V, ab)
399- let bO = aA((S + bv), (T + by))
400- if (!(J))
401- then be()
402- else if (if ((0 > bR))
389+@Callable(at)
390+func replenishWithTwoTokens (bV) = {
391+ let bA = at.payments[0].assetId
392+ let bD = at.payments[1].assetId
393+ let bz = at.payments[0].amount
394+ let bC = at.payments[1].amount
395+ let bW = bc(bA)
396+ let bF = bW._1
397+ let bG = bW._2
398+ let bH = bW._3
399+ let bX = bc(bD)
400+ let bJ = bX._1
401+ let bK = bX._2
402+ let bL = bX._3
403+ let bY = fraction(fraction(ad, U, bz), ac, fraction(ad, V, bC))
404+ let bZ = fraction(ad, bz, U)
405+ let ca = fraction(ad, bC, V)
406+ let cb = fraction(min([bZ, ca]), X, ad)
407+ let bS = aE((U + bz), (V + bC))
408+ if (!(L))
409+ then bi()
410+ else if (if ((0 > bV))
403411 then true
404- else (bR > 10))
412+ else (bV > 10))
405413 then throw("Slippage tolerance must be <= 1%")
406- else if ((size(ar.payments) != 2))
414+ else if ((size(at.payments) != 2))
407415 then throw("Two attached assets expected")
408- else if (if ((bw != M))
416+ else if (if ((bA != O))
409417 then true
410- else (bz != N))
411- then bg()
412- else if (if ((((aa * (ad - bR)) / ad) > bU))
418+ else (bD != P))
419+ then bk()
420+ else if (if ((((ac * (af - bV)) / af) > bY))
413421 then true
414- else (bU > ((aa * (ad + bR)) / ad)))
422+ else (bY > ((ac * (af + bV)) / af)))
415423 then throw("Incorrect assets amount: amounts must have the contract ratio")
416- else if ((bX == 0))
424+ else if ((cb == 0))
417425 then throw("Too small amount to replenish")
418- else if (!(aw))
419- then ([ScriptTransfer(ar.caller, bv, bw), ScriptTransfer(ar.caller, by, bz)] ++ bl())
426+ else if (!(aA))
427+ then ([ScriptTransfer(at.caller, bz, bA), ScriptTransfer(at.caller, bC, bD)] ++ bp())
420428 else {
421- let bP = if (containsElement(G, bB))
422- then invoke(this, "stakeUnstake", [true, bv, bB], nil)
429+ let bT = if (containsElement(I, bF))
430+ then invoke(this, "stakeUnstake", [true, bz, bF], nil)
423431 else 0
424- if ((bP == bP))
432+ if ((bT == bT))
425433 then {
426- let bQ = if (containsElement(G, bF))
427- then invoke(this, "stakeUnstake", [true, by, bF], nil)
434+ let bU = if (containsElement(I, bJ))
435+ then invoke(this, "stakeUnstake", [true, bC, bJ], nil)
428436 else 0
429- if ((bQ == bQ))
430- then [IntegerEntry(f, (S + bv)), IntegerEntry(g, (T + by)), IntegerEntry(i, (V + bX)), IntegerEntry(l, bO), Reissue(U, bX, true), ScriptTransfer(ar.caller, bX, U)]
437+ if ((bU == bU))
438+ then [IntegerEntry(f, (U + bz)), IntegerEntry(g, (V + bC)), IntegerEntry(i, (X + cb)), IntegerEntry(l, bS), Reissue(W, cb, true), ScriptTransfer(at.caller, cb, W)]
431439 else throw("Strict value is not equal to itself.")
432440 }
433441 else throw("Strict value is not equal to itself.")
436444
437445
438446
439-@Callable(ar)
440-func replenishWithOneToken (bY,bZ) = {
441- let ca = $Tuple2(ar.payments[0].amount, ar.payments[0].assetId)
442- let cb = ca._1
443- let cc = ca._2
444- let cd = aY(cc)
445- let ce = cd._1
446- let cf = cd._2
447- let cg = cd._3
448- let ch = 5000000
449- let ci = 50000000
450- let cj = if ((ci > cb))
447+@Callable(at)
448+func replenishWithOneToken (cc,cd) = {
449+ let ce = $Tuple2(at.payments[0].amount, at.payments[0].assetId)
450+ let cf = ce._1
451+ let cg = ce._2
452+ let ch = bc(cg)
453+ let ci = ch._1
454+ let cj = ch._2
455+ let ck = ch._3
456+ let cl = 5000000
457+ let cm = 50000000
458+ let cn = if ((cm > cf))
451459 then 100000
452460 else 1
453- let ck = (ab - ((ab * cj) / 10000000))
454- let cl = (ab + ((ab * cj) / 10000000))
455- let cm = (ab - ((ab * 1) / 10000000))
456- if (!(J))
457- then be()
458- else if ((ch > cb))
459- then throw((((("Payment amount " + toString(cb)) + " does not exceed the minimum amount of ") + toString(ch)) + " tokens"))
460- else if ((size(ar.payments) != 1))
461+ let co = (ad - ((ad * cn) / 10000000))
462+ let cp = (ad + ((ad * cn) / 10000000))
463+ let cq = (ad - ((ad * 1) / 10000000))
464+ if (!(L))
465+ then bi()
466+ else if ((cl > cf))
467+ then throw((((("Payment amount " + toString(cf)) + " does not exceed the minimum amount of ") + toString(cl)) + " tokens"))
468+ else if ((size(at.payments) != 1))
461469 then throw("One attached payment expected")
462- else if (!(aw))
463- then ([ScriptTransfer(ar.caller, cb, cc)] ++ bl())
464- else if (if ((cc != M))
465- then (cc != N)
470+ else if (!(aA))
471+ then ([ScriptTransfer(at.caller, cf, cg)] ++ bp())
472+ else if (if ((cg != O))
473+ then (cg != P)
466474 else false)
467- then bg()
475+ then bk()
468476 else {
469- let cn = if ((cc == M))
470- then $Tuple7((cb - bY), bZ, (S + bY), (T - bZ), aA((S + cb), T), (S + cb), T)
471- else $Tuple7(bZ, (cb - bY), (S - bZ), (T + bY), aA(S, (T + cb)), S, (T + cb))
472- let co = cn._1
473- let cp = cn._2
474- let cq = cn._3
475- let cr = cn._4
476- let bO = cn._5
477- let cs = cn._6
478- let ct = cn._7
479- let cu = if ((cc == M))
480- then IntegerEntry(f, cs)
481- else IntegerEntry(g, ct)
482- let aJ = aA(cq, cr)
483- let aK = fraction(ab, W, aJ)
484- let cv = (fraction((ab * ab), cq, cr) / fraction(ab, co, cp))
485- let cw = fraction((cs + ct), af, (2 * ag))
486- if (if ((cm >= aK))
477+ let cr = if ((cg == O))
478+ then $Tuple7((cf - cc), cd, (U + cc), (V - cd), aE((U + cf), V), (U + cf), V)
479+ else $Tuple7(cd, (cf - cc), (U - cd), (V + cc), aE(U, (V + cf)), U, (V + cf))
480+ let cs = cr._1
481+ let ct = cr._2
482+ let cu = cr._3
483+ let cv = cr._4
484+ let bS = cr._5
485+ let cw = cr._6
486+ let cx = cr._7
487+ let cy = if ((cg == O))
488+ then IntegerEntry(f, cw)
489+ else IntegerEntry(g, cx)
490+ let aN = aE(cu, cv)
491+ let aO = fraction(ad, Y, aN)
492+ let cz = (fraction((ad * ad), cu, cv) / fraction(ad, cs, ct))
493+ let cA = fraction((cw + cx), ah, (2 * ai))
494+ if (if ((cq >= aO))
487495 then true
488- else (W > aJ))
496+ else (Y > aN))
489497 then throw("Incorrect virtualSwapTokenPay or virtualSwapTokenGet value")
490- else if (if ((ck > cv))
498+ else if (if ((co > cz))
491499 then true
492- else (cv > cl))
500+ else (cz > cp))
493501 then throw("Swap with virtualSwapTokenPay and virtualSwapTokenGet is possible, but ratio after virtual swap is incorrect")
494- else if (if ((cw > cs))
502+ else if (if ((cA > cw))
495503 then true
496- else (cw > ct))
497- then bh(cw, cs, ct)
504+ else (cA > cx))
505+ then bl(cA, cw, cx)
498506 else {
499- let bP = if (containsElement(G, ce))
500- then invoke(this, "stakeUnstake", [true, cb, ce], nil)
507+ let bT = if (containsElement(I, ci))
508+ then invoke(this, "stakeUnstake", [true, cf, ci], nil)
501509 else 0
502- if ((bP == bP))
510+ if ((bT == bT))
503511 then {
504- let bV = fraction(co, ab, cq)
505- let bW = fraction(cp, ab, cr)
506- let bX = fraction(min([bV, bW]), V, ab)
507-[Reissue(U, bX, true), ScriptTransfer(ar.caller, bX, U), IntegerEntry(i, (V + bX)), cu, IntegerEntry(l, bO)]
512+ let bZ = fraction(cs, ad, cu)
513+ let ca = fraction(ct, ad, cv)
514+ let cb = fraction(min([bZ, ca]), X, ad)
515+[Reissue(W, cb, true), ScriptTransfer(at.caller, cb, W), IntegerEntry(i, (X + cb)), cy, IntegerEntry(l, bS)]
508516 }
509517 else throw("Strict value is not equal to itself.")
510518 }
513521
514522
515523
516-@Callable(ar)
524+@Callable(at)
517525 func withdraw () = {
518- let cx = $Tuple2(ar.payments[0].amount, ar.payments[0].assetId)
519- let cb = cx._1
520- let cc = cx._2
521- let cy = fraction(cb, S, V)
522- let cz = fraction(cb, T, V)
523- let bO = aA((S - cy), (T - cz))
524- if (!(J))
525- then be()
526- else if ((size(ar.payments) != 1))
526+ let cB = $Tuple2(at.payments[0].amount, at.payments[0].assetId)
527+ let cf = cB._1
528+ let cg = cB._2
529+ let cC = fraction(cf, U, X)
530+ let cD = fraction(cf, V, X)
531+ let bS = aE((U - cC), (V - cD))
532+ if (!(L))
533+ then bi()
534+ else if ((size(at.payments) != 1))
527535 then throw("One attached payment expected")
528- else if ((cc != U))
529- then throw(("Incorrect asset attached. Expected: " + toBase58String(U)))
530- else if (!(aw))
531- then ([ScriptTransfer(ar.caller, cb, cc)] ++ bl())
536+ else if ((cg != W))
537+ then throw(("Incorrect asset attached. Expected: " + toBase58String(W)))
538+ else if (!(aA))
539+ then ([ScriptTransfer(at.caller, cf, cg)] ++ bp())
532540 else {
533- let bP = if (containsElement(G, K))
534- then invoke(this, "stakeUnstake", [false, cy, K], nil)
541+ let bT = if (containsElement(I, M))
542+ then invoke(this, "stakeUnstake", [false, cC, M], nil)
535543 else 0
536- if ((bP == bP))
544+ if ((bT == bT))
537545 then {
538- let bQ = if (containsElement(G, L))
539- then invoke(this, "stakeUnstake", [false, cz, L], nil)
546+ let bU = if (containsElement(I, N))
547+ then invoke(this, "stakeUnstake", [false, cD, N], nil)
540548 else 0
541- if ((bQ == bQ))
542- then [IntegerEntry(f, (S - cy)), IntegerEntry(g, (T - cz)), IntegerEntry(i, (V - cb)), IntegerEntry(l, bO), Burn(U, cb), ScriptTransfer(ar.caller, cy, M), ScriptTransfer(ar.caller, cz, N)]
549+ if ((bU == bU))
550+ then [IntegerEntry(f, (U - cC)), IntegerEntry(g, (V - cD)), IntegerEntry(i, (X - cf)), IntegerEntry(l, bS), Burn(W, cf), ScriptTransfer(at.caller, cC, O), ScriptTransfer(at.caller, cD, P)]
543551 else throw("Strict value is not equal to itself.")
544552 }
545553 else throw("Strict value is not equal to itself.")
548556
549557
550558
551-@Callable(ar)
552-func exchange (cA,cB) = {
553- let cC = $Tuple2(ar.payments[0].amount, ar.payments[0].assetId)
554- let cb = cC._1
555- let cc = cC._2
556- if (!(J))
557- then be()
558- else if ((0 >= cA))
559- then throw(("Estimated amount must be positive. Actual: " + toString(cA)))
560- else if ((cB > cA))
561- then throw(((("Minimal amount can't be greater than estimated. Estimated: " + toString(cA)) + ". Minimal: ") + toString(cB)))
562- else if ((size(ar.payments) != 1))
559+@Callable(at)
560+func exchange (cE,cF) = {
561+ let cG = $Tuple2(at.payments[0].amount, at.payments[0].assetId)
562+ let cf = cG._1
563+ let cg = cG._2
564+ if (!(L))
565+ then bi()
566+ else if ((0 >= cE))
567+ then throw(("Estimated amount must be positive. Actual: " + toString(cE)))
568+ else if ((cF > cE))
569+ then throw(((("Minimal amount can't be greater than estimated. Estimated: " + toString(cE)) + ". Minimal: ") + toString(cF)))
570+ else if ((size(at.payments) != 1))
563571 then throw("One attached payment expected")
564- else if (!(aw))
565- then ([ScriptTransfer(ar.caller, cb, cc)] ++ bl())
566- else if (if ((cc != M))
567- then (cc != N)
572+ else if (!(aA))
573+ then ([ScriptTransfer(at.caller, cf, cg)] ++ bp())
574+ else if (if ((cg != O))
575+ then (cg != P)
568576 else false)
569- then bg()
570- else if ((10000000 > cb))
577+ then bk()
578+ else if ((10000000 > cf))
571579 then throw("Only swap of 10.000000 or more tokens is allowed")
572- else if (if ((ah > fraction(ab, cB, cb)))
580+ else if (if ((aj > fraction(ad, cF, cf)))
573581 then true
574- else (fraction(ab, cA, cb) > ai))
582+ else (fraction(ad, cE, cf) > ak))
575583 then throw("Incorrect args and pmt ratio")
576584 else {
577- let cD = if ((cc == M))
578- then N
579- else M
580- let bp = aC(cA, cB, cb, cc)
581- let cE = fraction(bp, Y, Z)
582- let cF = fraction(bp, (Z - X), Z)
583- let cG = if ((cc == M))
584- then $Tuple2((S + cb), ((T - cF) - cE))
585- else $Tuple2(((S - cF) - cE), (T + cb))
586- let cs = cG._1
587- let ct = cG._2
588- let cw = fraction((cs + ct), af, (2 * ag))
589- if (if ((cw > cs))
585+ let cH = if ((cg == O))
586+ then P
587+ else O
588+ let bt = aG(cE, cF, cf, cg)
589+ let cI = fraction(bt, aa, ab)
590+ let cJ = fraction(bt, (ab - Z), ab)
591+ let cK = if ((cg == O))
592+ then $Tuple2((U + cf), ((V - cJ) - cI))
593+ else $Tuple2(((U - cJ) - cI), (V + cf))
594+ let cw = cK._1
595+ let cx = cK._2
596+ let cA = fraction((cw + cx), ah, (2 * ai))
597+ if (if ((cA > cw))
590598 then true
591- else (cw > ct))
592- then bh(cw, cs, ct)
599+ else (cA > cx))
600+ then bl(cA, cw, cx)
593601 else {
594- let cH = aY(cc)
595- let ce = cH._1
596- let cf = cH._2
597- let cg = cH._3
598- let cI = aY(cD)
599- let cJ = cI._1
600- let cK = cI._2
601- let cL = cI._3
602- let bP = if (containsElement(G, ce))
603- then invoke(this, "stakeUnstake", [true, cb, ce], nil)
602+ let cL = bc(cg)
603+ let ci = cL._1
604+ let cj = cL._2
605+ let ck = cL._3
606+ let cM = bc(cH)
607+ let cN = cM._1
608+ let cO = cM._2
609+ let cP = cM._3
610+ let bT = if (containsElement(I, ci))
611+ then invoke(this, "stakeUnstake", [true, cf, ci], nil)
604612 else 0
605- if ((bP == bP))
613+ if ((bT == bT))
606614 then {
607- let bQ = if (containsElement(G, cJ))
608- then invoke(this, "stakeUnstake", [false, (bp + cE), cJ], nil)
615+ let bU = if (containsElement(I, cN))
616+ then invoke(this, "stakeUnstake", [false, (cJ + cI), cN], nil)
609617 else 0
610- if ((bQ == bQ))
611- then [IntegerEntry(f, cs), IntegerEntry(g, ct), IntegerEntry(l, aA(cs, ct)), ScriptTransfer(ar.caller, cF, cD), ScriptTransfer(D, cE, cD)]
618+ if ((bU == bU))
619+ then [IntegerEntry(f, cw), IntegerEntry(g, cx), IntegerEntry(l, aE(cw, cx)), ScriptTransfer(at.caller, cJ, cH), ScriptTransfer(E, cI, cH)]
612620 else throw("Strict value is not equal to itself.")
613621 }
614622 else throw("Strict value is not equal to itself.")
618626
619627
620628
621-@Callable(ar)
622-func shutdown () = if (!(J))
629+@Callable(at)
630+func shutdown () = if (!(L))
623631 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, m), "the cause wasn't specified")))
624- else if (!(containsElement([y, z, A, B], ar.callerPublicKey)))
625- then bf()
626- else bb("Paused by admin")
632+ else if (!(containsElement([z, A, B, C], at.callerPublicKey)))
633+ then bj()
634+ else bf("Paused by admin")
627635
628636
629637
630-@Callable(ar)
631-func activate () = if (J)
632- then bd()
633- else if (!(containsElement([y, z, A, B], ar.callerPublicKey)))
634- then bf()
638+@Callable(at)
639+func activate () = if (L)
640+ then bh()
641+ else if (!(containsElement([z, A, B, C], at.callerPublicKey)))
642+ then bj()
635643 else [BooleanEntry(c, true), DeleteEntry(m)]
636644
637645
638646
639-@Callable(ar)
640-func takeIntoAccountExtraFunds (cM) = {
641- let cN = (au - S)
642- let cO = (av - T)
643- let cP = (cN - (if ((M == unit))
644- then cM
647+@Callable(at)
648+func takeIntoAccountExtraFunds (cQ) = {
649+ let cR = (ay - U)
650+ let cS = (az - V)
651+ let cT = (cR - (if ((O == unit))
652+ then cQ
645653 else 0))
646- let cQ = (cO - (if ((N == unit))
647- then cM
654+ let cU = (cS - (if ((P == unit))
655+ then cQ
648656 else 0))
649- let aJ = aA((S + cP), (T + cQ))
650- if (!(J))
651- then be()
652- else if ((ar.caller != this))
653- then bf()
654- else if ((0 > cM))
655- then throw(("Argument 'amountLeave' cannot be negative. Actual: " + toString(cM)))
656- else if (if ((0 > cN))
657+ let aN = aE((U + cT), (V + cU))
658+ if (!(L))
659+ then bi()
660+ else if ((at.caller != this))
661+ then bj()
662+ else if ((0 > cQ))
663+ then throw(("Argument 'amountLeave' cannot be negative. Actual: " + toString(cQ)))
664+ else if (if ((0 > cR))
657665 then true
658- else (0 > cO))
659- then bb("Enroll amount negative")
660- else if (if ((0 > cP))
666+ else (0 > cS))
667+ then bf("Enroll amount negative")
668+ else if (if ((0 > cT))
661669 then true
662- else (0 > cQ))
670+ else (0 > cU))
663671 then throw("Too large amountLeave")
664672 else {
665- let bP = if (if (containsElement(G, K))
666- then (cP > 0)
673+ let bT = if (if (containsElement(I, M))
674+ then (cT > 0)
667675 else false)
668- then invoke(this, "stakeUnstake", [true, cP, K], nil)
676+ then invoke(this, "stakeUnstake", [true, cT, M], nil)
669677 else 0
670- if ((bP == bP))
678+ if ((bT == bT))
671679 then {
672- let bQ = if (if (containsElement(G, L))
673- then (cQ > 0)
680+ let bU = if (if (containsElement(I, N))
681+ then (cU > 0)
674682 else false)
675- then invoke(this, "stakeUnstake", [true, cQ, L], nil)
683+ then invoke(this, "stakeUnstake", [true, cU, N], nil)
676684 else 0
677- if ((bQ == bQ))
678- then [IntegerEntry(l, aJ), IntegerEntry(f, (S + cP)), IntegerEntry(g, (T + cQ)), IntegerEntry(("last_income_" + K), cP), IntegerEntry(("last_income_" + L), cQ)]
685+ if ((bU == bU))
686+ then [IntegerEntry(l, aN), IntegerEntry(f, (U + cT)), IntegerEntry(g, (V + cU)), IntegerEntry(("last_income_" + M), cT), IntegerEntry(("last_income_" + N), cU)]
679687 else throw("Strict value is not equal to itself.")
680688 }
681689 else throw("Strict value is not equal to itself.")
684692
685693
686694
687-@Callable(ar)
688-func stakeUnstake (bn,bp,cR) = if ((ar.caller != this))
695+@Callable(at)
696+func stakeUnstake (br,bt,cV) = if ((at.caller != this))
689697 then throw("Only contract itself can invoke this function")
690698 else {
691- let cS = bo(bn, bp, fromBase58String(cR))
692- let br = cS._1
693- let cT = cS._2
694- let cU = cS._3
695- let cV = cS._4
696- let cW = invoke(cT, br, cU, cV)
697- if ((cW == cW))
699+ let cW = bs(br, bt, fromBase58String(cV))
700+ let bv = cW._1
701+ let cX = cW._2
702+ let cY = cW._3
703+ let cZ = cW._4
704+ let da = invoke(cX, bv, cY, cZ)
705+ if ((da == da))
698706 then nil
699707 else throw("Strict value is not equal to itself.")
700708 }
701709
702710
703711
704-@Callable(ar)
705-func stakeAll () = if (!(J))
712+@Callable(at)
713+func stakeAll () = if (!(L))
706714 then throw("DApp is inactive at this moment")
707- else if (!(containsElement([y, z, A, B], ar.callerPublicKey)))
715+ else if (!(containsElement([z, A, B, C], at.callerPublicKey)))
708716 then throw("Only admin can call this function")
709717 else {
710- let bP = if (containsElement(G, K))
718+ let bT = if (containsElement(I, M))
711719 then {
712- let bj = (S - as)
713- if ((bj > 0))
714- then invoke(this, "stakeUnstake", [true, bj, K], nil)
720+ let bn = (U - au)
721+ if ((bn > 0))
722+ then invoke(this, "stakeUnstake", [true, bn, M], nil)
715723 else 0
716724 }
717725 else 0
718- if ((bP == bP))
726+ if ((bT == bT))
719727 then {
720- let bQ = if (containsElement(G, L))
728+ let bU = if (containsElement(I, N))
721729 then {
722- let bk = (T - at)
723- if ((bk > 0))
724- then invoke(this, "stakeUnstake", [true, bk, L], nil)
730+ let bo = (V - av)
731+ if ((bo > 0))
732+ then invoke(this, "stakeUnstake", [true, bo, N], nil)
725733 else 0
726734 }
727735 else 0
728- if ((bQ == bQ))
736+ if ((bU == bU))
729737 then nil
730738 else throw("Strict value is not equal to itself.")
731739 }
733741 }
734742
735743
736-@Verifier(cX)
737-func cY () = {
738- let cZ = {
739- let da = if (sigVerify(cX.bodyBytes, cX.proofs[0], y))
744+@Verifier(db)
745+func dc () = {
746+ let dd = {
747+ let de = if (sigVerify(db.bodyBytes, db.proofs[0], z))
740748 then 1
741749 else 0
742- let db = if (sigVerify(cX.bodyBytes, cX.proofs[1], z))
750+ let df = if (sigVerify(db.bodyBytes, db.proofs[1], A))
743751 then 1
744752 else 0
745- let dc = if (sigVerify(cX.bodyBytes, cX.proofs[2], A))
753+ let dg = if (sigVerify(db.bodyBytes, db.proofs[2], B))
746754 then 1
747755 else 0
748- (((da + db) + dc) >= 2)
756+ (((de + df) + dg) >= 2)
749757 }
750- let v = cX
751- if ($isInstanceOf(v, "InvokeScriptTransaction"))
758+ let w = db
759+ if ($isInstanceOf(w, "InvokeScriptTransaction"))
752760 then {
753- let cW = v
754- let dd = if ((cW.dApp == this))
755- then (cW.function == "takeIntoAccountExtraFunds")
761+ let da = w
762+ let dh = if ((da.dApp == this))
763+ then (da.function == "takeIntoAccountExtraFunds")
756764 else false
757- let de = if (if (if (sigVerify(cX.bodyBytes, cX.proofs[0], y))
765+ let di = if (if (if (sigVerify(db.bodyBytes, db.proofs[0], z))
758766 then true
759- else sigVerify(cX.bodyBytes, cX.proofs[0], z))
767+ else sigVerify(db.bodyBytes, db.proofs[0], A))
760768 then true
761- else sigVerify(cX.bodyBytes, cX.proofs[0], A))
769+ else sigVerify(db.bodyBytes, db.proofs[0], B))
762770 then true
763- else sigVerify(cX.bodyBytes, cX.proofs[0], C)
764- if (if (dd)
765- then de
771+ else sigVerify(db.bodyBytes, db.proofs[0], D)
772+ if (if (dh)
773+ then di
766774 else false)
767775 then true
768- else cZ
776+ else dd
769777 }
770- else cZ
778+ else dd
771779 }
772780
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "2.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 = "share_asset_id"
1919
2020 let i = "share_asset_supply"
2121
2222 let j = "commission"
2323
2424 let k = "commission_scale_delimiter"
2525
2626 let l = "invariant"
2727
2828 let m = "shutdown_cause"
2929
3030 let n = "staking_usdnnsbt_address"
3131
3232 let o = "staking_eurn_address"
3333
3434 let p = "admin_pub_1"
3535
3636 let q = "admin_pub_2"
3737
3838 let r = "admin_pub_3"
3939
40-let s = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
40+let s = Address(base58'3N8PGkzXhbtTvEwEQTtE2xiTJmsDEQ9XfoZ')
4141
42-func t (u) = {
43- let v = getString(s, u)
44- if ($isInstanceOf(v, "String"))
42+let t = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
43+
44+func u (v) = {
45+ let w = getString(t, v)
46+ if ($isInstanceOf(w, "String"))
4547 then {
46- let w = v
47- fromBase58String(w)
48+ let x = w
49+ fromBase58String(x)
4850 }
4951 else {
50- let x = v
52+ let y = w
5153 throw("Admin public key is empty")
5254 }
5355 }
5456
5557
56-let y = t(p)
58+let z = u(p)
5759
58-let z = t(q)
60+let A = u(q)
5961
60-let A = t(r)
61-
62-let B = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
62+let B = u(r)
6363
6464 let C = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
6565
66-let D = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
66+let D = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
6767
68-let E = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
68+let E = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
6969
70-let F = base58'ECBCkHS68DckpBrzLeoRgYbFg7sCVqR176mPqbXsj9pA'
70+let F = Address(base58'3N6q7sCGSSLBUXDdjBdYGTJbZGZfhhh8cNg')
7171
72-let G = [toBase58String(E), toBase58String(F)]
72+let G = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
7373
74-let H = Address(fromBase58String(valueOrErrorMessage(getString(s, n), "no usdn staking address")))
74+let H = base58'ECBCkHS68DckpBrzLeoRgYbFg7sCVqR176mPqbXsj9pA'
7575
76-let I = Address(fromBase58String(valueOrErrorMessage(getString(s, o), "no usdn staking address")))
76+let I = [toBase58String(G), toBase58String(H)]
7777
78-let J = getBooleanValue(this, c)
78+let J = Address(fromBase58String(valueOrErrorMessage(getString(t, n), "no usdn staking address")))
7979
80-let K = getStringValue(this, d)
80+let K = Address(fromBase58String(valueOrErrorMessage(getString(t, o), "no usdn staking address")))
8181
82-let L = getStringValue(this, e)
82+let L = getBooleanValue(this, c)
8383
84-let M = if ((K == "WAVES"))
84+let M = getStringValue(this, d)
85+
86+let N = getStringValue(this, e)
87+
88+let O = if ((M == "WAVES"))
8589 then unit
86- else fromBase58String(K)
90+ else fromBase58String(M)
8791
88-let N = if ((L == "WAVES"))
92+let P = if ((N == "WAVES"))
8993 then unit
90- else fromBase58String(L)
94+ else fromBase58String(N)
9195
92-let O = {
93- let v = M
94- if ($isInstanceOf(v, "ByteVector"))
96+let Q = {
97+ let w = O
98+ if ($isInstanceOf(w, "ByteVector"))
9599 then {
96- let P = v
97- value(assetInfo(P)).name
100+ let R = w
101+ value(assetInfo(R)).name
98102 }
99- else if ($isInstanceOf(v, "Unit"))
103+ else if ($isInstanceOf(w, "Unit"))
100104 then {
101- let Q = v
105+ let S = w
102106 "WAVES"
103107 }
104108 else throw("Match error")
105109 }
106110
107-let R = {
108- let v = N
109- if ($isInstanceOf(v, "ByteVector"))
111+let T = {
112+ let w = P
113+ if ($isInstanceOf(w, "ByteVector"))
110114 then {
111- let P = v
112- value(assetInfo(P)).name
115+ let R = w
116+ value(assetInfo(R)).name
113117 }
114- else if ($isInstanceOf(v, "Unit"))
118+ else if ($isInstanceOf(w, "Unit"))
115119 then {
116- let Q = v
120+ let S = w
117121 "WAVES"
118122 }
119123 else throw("Match error")
120124 }
121125
122-let S = getIntegerValue(this, f)
126+let U = getIntegerValue(this, f)
123127
124-let T = getIntegerValue(this, g)
128+let V = getIntegerValue(this, g)
125129
126-let U = fromBase58String(getStringValue(this, h))
130+let W = fromBase58String(getStringValue(this, h))
127131
128-let V = getIntegerValue(this, i)
132+let X = getIntegerValue(this, i)
129133
130-let W = getIntegerValue(this, l)
134+let Y = getIntegerValue(this, l)
131135
132-let X = 500
136+let Z = 500
133137
134-let Y = 200
138+let aa = 200
135139
136-let Z = 1000000
140+let ab = 1000000
137141
138-let aa = 1000
142+let ac = 1000
139143
140-let ab = 100000000
144+let ad = 100000000
141145
142-let ac = 1000000000000
146+let ae = 1000000000000
143147
144-let ad = 1000
148+let af = 1000
145149
146-let ae = 8
150+let ag = 8
147151
148-let af = 50
152+let ah = 50
149153
150-let ag = 100
154+let ai = 100
151155
152-let ah = 90000000
156+let aj = 90000000
153157
154-let ai = 110000000
158+let ak = 110000000
155159
156-let aj = 50
160+let al = 50
157161
158-let ak = 2
162+let am = 2
159163
160-let al = 46000000
164+let an = 46000000
161165
162-func am (an) = {
163- let v = an
164- if ($isInstanceOf(v, "ByteVector"))
166+func ao (ap) = {
167+ let w = ap
168+ if ($isInstanceOf(w, "ByteVector"))
165169 then {
166- let P = v
167- assetBalance(this, P)
170+ let R = w
171+ assetBalance(this, R)
168172 }
169- else if ($isInstanceOf(v, "Unit"))
173+ else if ($isInstanceOf(w, "Unit"))
170174 then {
171- let Q = v
175+ let S = w
172176 wavesBalance(this).available
173177 }
174178 else throw("Match error")
175179 }
176180
177181
178-func ao (an) = {
179- let ap = {
180- let v = an
181- if ($isInstanceOf(v, "ByteVector"))
182+func aq (ap) = {
183+ let ar = {
184+ let w = ap
185+ if ($isInstanceOf(w, "ByteVector"))
182186 then {
183- let aq = v
184- if ((aq == E))
185- then getInteger(H, ((("rpd_balance_" + toBase58String(aq)) + "_") + toString(this)))
186- else if ((aq == F))
187- then getInteger(I, ((("%s%s%s__stakingBalance__" + toBase58String(aq)) + "__") + toString(this)))
187+ let as = w
188+ if ((as == G))
189+ then getInteger(J, ((("rpd_balance_" + toBase58String(as)) + "_") + toString(this)))
190+ else if ((as == H))
191+ then getInteger(K, ((("%s%s%s__stakingBalance__" + toBase58String(as)) + "__") + toString(this)))
188192 else 0
189193 }
190- else if ($isInstanceOf(v, "Unit"))
194+ else if ($isInstanceOf(w, "Unit"))
191195 then 0
192196 else throw("Match error")
193197 }
194- let v = ap
195- if ($isInstanceOf(v, "Int"))
198+ let w = ar
199+ if ($isInstanceOf(w, "Int"))
196200 then {
197- let ar = v
198- ar
201+ let at = w
202+ at
199203 }
200204 else 0
201205 }
202206
203207
204-let as = ao(M)
208+let au = aq(O)
205209
206-let at = ao(N)
210+let av = aq(P)
207211
208-let au = (am(M) + as)
212+let aw = (U - au)
209213
210-let av = (am(N) + at)
214+let ax = (V - av)
211215
212-let aw = if ((au >= S))
213- then (av >= T)
216+let ay = (ao(O) + au)
217+
218+let az = (ao(P) + av)
219+
220+let aA = if ((ay >= U))
221+ then (az >= V)
214222 else false
215223
216-func ax (ay,az) = (((fraction(ac, ay, az) + fraction(ac, az, ay)) / 2) / 10000)
224+func aB (aC,aD) = (((fraction(ae, aC, aD) + fraction(ae, aD, aC)) / 2) / 10000)
217225
218226
219-func aA (ay,az) = {
220- let aB = ax(ay, az)
221- (fraction((ay + az), ab, pow(aB, ae, aj, ak, ae, CEILING)) + (2 * fraction(pow(fraction(ay, az, ab), 0, 5, 1, (ae / 2), DOWN), pow((aB - al), ae, aj, ak, ae, DOWN), ab)))
227+func aE (aC,aD) = {
228+ let aF = aB(aC, aD)
229+ (fraction((aC + aD), ad, pow(aF, ag, al, am, ag, CEILING)) + (2 * fraction(pow(fraction(aC, aD, ad), 0, 5, 1, (ag / 2), DOWN), pow((aF - an), ag, al, am, ag, DOWN), ad)))
222230 }
223231
224232
225-func aC (aD,aE,aF,aG) = {
226- let aH = (ab - ((ab * 1) / 10000000))
227- let aI = (aD - aE)
228- let ay = (S + aF)
229- let az = (T + aF)
230- let aJ = if ((aG == M))
231- then aA(ay, (T - aD))
232- else if ((aG == N))
233- then aA((S - aD), az)
233+func aG (aH,aI,aJ,aK) = {
234+ let aL = (ad - ((ad * 1) / 10000000))
235+ let aM = (aH - aI)
236+ let aC = (U + aJ)
237+ let aD = (V + aJ)
238+ let aN = if ((aK == O))
239+ then aE(aC, (V - aH))
240+ else if ((aK == P))
241+ then aE((U - aH), aD)
234242 else throw("Wrong asset in payment")
235- let aK = fraction(ab, W, aJ)
236- func aL (aM,aN) = if ((aM == -1))
243+ let aO = fraction(ad, Y, aN)
244+ func aP (aQ,aR) = if ((aQ == -1))
237245 then {
238- let aO = (aD - ((aN * aI) / 5))
239- let aP = if ((aG == M))
240- then aA(ay, (T - aO))
241- else aA((S - aO), az)
242- if ((aP > W))
243- then aO
246+ let aS = (aH - ((aR * aM) / 5))
247+ let aT = if ((aK == O))
248+ then aE(aC, (V - aS))
249+ else aE((U - aS), aD)
250+ if ((aT > Y))
251+ then aS
244252 else -1
245253 }
246- else aM
254+ else aQ
247255
248- let aQ = {
249- let aR = [1, 2, 3, 4, 5]
250- let aS = size(aR)
251- let aT = -1
252- func aU (aV,aW) = if ((aW >= aS))
253- then aV
254- else aL(aV, aR[aW])
256+ let aU = {
257+ let aV = [1, 2, 3, 4, 5]
258+ let aW = size(aV)
259+ let aX = -1
260+ func aY (aZ,ba) = if ((ba >= aW))
261+ then aZ
262+ else aP(aZ, aV[ba])
255263
256- func aX (aV,aW) = if ((aW >= aS))
257- then aV
264+ func bb (aZ,ba) = if ((ba >= aW))
265+ then aZ
258266 else throw("List size exceeds 5")
259267
260- aX(aU(aU(aU(aU(aU(aT, 0), 1), 2), 3), 4), 5)
268+ bb(aY(aY(aY(aY(aY(aX, 0), 1), 2), 3), 4), 5)
261269 }
262- if ((0 > aQ))
270+ if ((0 > aU))
263271 then throw("something went wrong while working with amountToSend")
264- else if (if ((aK > aH))
265- then (aJ > W)
272+ else if (if ((aO > aL))
273+ then (aN > Y)
266274 else false)
267- then aD
268- else aQ
275+ then aH
276+ else aU
269277 }
270278
271279
272-func aY (an) = {
273- let v = an
274- if ($isInstanceOf(v, "ByteVector"))
280+func bc (ap) = {
281+ let w = ap
282+ if ($isInstanceOf(w, "ByteVector"))
275283 then {
276- let P = v
277- let aZ = toBase58String(P)
278- let ba = valueOrErrorMessage(assetInfo(P), (("Asset " + aZ) + " doesn't exist"))
279- $Tuple3(aZ, ba.name, ba.decimals)
284+ let R = w
285+ let bd = toBase58String(R)
286+ let be = valueOrErrorMessage(assetInfo(R), (("Asset " + bd) + " doesn't exist"))
287+ $Tuple3(bd, be.name, be.decimals)
280288 }
281- else if ($isInstanceOf(v, "Unit"))
289+ else if ($isInstanceOf(w, "Unit"))
282290 then {
283- let Q = v
291+ let S = w
284292 $Tuple3("WAVES", "WAVES", 8)
285293 }
286294 else throw("Match error")
287295 }
288296
289297
290-func bb (bc) = [BooleanEntry(c, false), StringEntry(m, bc)]
298+func bf (bg) = [BooleanEntry(c, false), StringEntry(m, bg)]
291299
292300
293-func bd () = throw("DApp is already active")
301+func bh () = throw("DApp is already active")
294302
295303
296-func be () = throw("DApp is inactive at this moment")
304+func bi () = throw("DApp is inactive at this moment")
297305
298306
299-func bf () = throw("Only admin can call this function")
307+func bj () = throw("Only admin can call this function")
300308
301309
302-func bg () = throw(((("Incorrect assets attached. Expected: " + K) + " and ") + L))
310+func bk () = throw(((("Incorrect assets attached. Expected: " + M) + " and ") + N))
303311
304312
305-func bh (bi,bj,bk) = throw(((((((((("New balance in assets of the DApp is less than threshold " + toString(bi)) + ": ") + toString(bj)) + " ") + O) + ", ") + toString(bk)) + " ") + R))
313+func bl (bm,bn,bo) = throw(((((((((("New balance in assets of the DApp is less than threshold " + toString(bm)) + ": ") + toString(bn)) + " ") + Q) + ", ") + toString(bo)) + " ") + T))
306314
307315
308-func bl () = bb(((((((((((((((("Suspicious state. Actual balances: " + toString(S)) + " ") + O) + ", ") + toString(T)) + " ") + R) + ". State: ") + toString(am(M))) + " ") + O) + ", ") + toString(am(N))) + " ") + R))
316+func bp () = bf(((((((((((((((("Suspicious state. Actual balances: " + toString(U)) + " ") + Q) + ", ") + toString(V)) + " ") + T) + ". State: ") + toString(ao(O))) + " ") + Q) + ", ") + toString(ao(P))) + " ") + T))
309317
310318
311-func bm (bn,an) = if (bn)
312- then if ((an == E))
313- then $Tuple2("lockNeutrino", H)
314- else $Tuple2("startStaking", I)
315- else if ((an == E))
316- then $Tuple2("unlockNeutrino", H)
317- else $Tuple2("stopStaking", I)
319+func bq (br,ap) = if (br)
320+ then if ((ap == G))
321+ then $Tuple2("lockNeutrino", J)
322+ else $Tuple2("startStaking", K)
323+ else if ((ap == G))
324+ then $Tuple2("unlockNeutrino", J)
325+ else $Tuple2("stopStaking", K)
318326
319327
320-func bo (bn,bp,an) = if (bn)
328+func bs (br,bt,ap) = if (br)
321329 then {
322- let bq = bm(bn, an)
323- let br = bq._1
324- let bs = bq._2
325- $Tuple4(br, bs, nil, [AttachedPayment(an, bp)])
330+ let bu = bq(br, ap)
331+ let bv = bu._1
332+ let bw = bu._2
333+ $Tuple4(bv, bw, nil, [AttachedPayment(ap, bt)])
326334 }
327335 else {
328- let bt = bm(bn, an)
329- let br = bt._1
330- let bs = bt._2
331- $Tuple4(br, bs, [bp, toBase58String(an)], nil)
336+ let bx = bq(br, ap)
337+ let bv = bx._1
338+ let bw = bx._2
339+ $Tuple4(bv, bw, [bt, toBase58String(ap)], nil)
332340 }
333341
334342
335-@Callable(ar)
343+@Callable(at)
336344 func init () = {
337- let bu = $Tuple2(ar.payments[0].amount, ar.payments[0].assetId)
338- let bv = bu._1
339- let bw = bu._2
340- let bx = $Tuple2(ar.payments[1].amount, ar.payments[1].assetId)
341- let by = bx._1
342- let bz = bx._2
343- let bA = aY(bw)
344- let bB = bA._1
345- let bC = bA._2
346- let bD = bA._3
347- let bE = aY(bz)
345+ let by = $Tuple2(at.payments[0].amount, at.payments[0].assetId)
346+ let bz = by._1
347+ let bA = by._2
348+ let bB = $Tuple2(at.payments[1].amount, at.payments[1].assetId)
349+ let bC = bB._1
350+ let bD = bB._2
351+ let bE = bc(bA)
348352 let bF = bE._1
349353 let bG = bE._2
350354 let bH = bE._3
355+ let bI = bc(bD)
356+ let bJ = bI._1
357+ let bK = bI._2
358+ let bL = bI._3
351359 if (isDefined(getBoolean(this, c)))
352- then bd()
353- else if ((bw == bz))
360+ then bh()
361+ else if ((bA == bD))
354362 then throw("Assets must be different")
355363 else {
356- let bI = ((("s" + take(bC, 7)) + "_") + take(bG, 7))
357- let bJ = ((((("ShareToken of SwopFi protocol for " + bC) + " and ") + bG) + " at address ") + toString(this))
358- let bK = ((bD + bH) / 2)
359- let bL = fraction(pow(bv, bD, 5, 1, bD, DOWN), pow(by, bH, 5, 1, bH, DOWN), pow(10, 0, bK, 0, 0, DOWN))
360- let bM = Issue(bI, bJ, bL, bK, true)
361- let bN = calculateAssetId(bM)
362- let bO = aA(bv, by)
363- let bP = if (containsElement(G, bB))
364- then invoke(this, "stakeUnstake", [true, bv, bB], nil)
364+ let bM = ((("s" + take(bG, 7)) + "_") + take(bK, 7))
365+ let bN = ((((("ShareToken of SwopFi protocol for " + bG) + " and ") + bK) + " at address ") + toString(this))
366+ let bO = ((bH + bL) / 2)
367+ let bP = fraction(pow(bz, bH, 5, 1, bH, DOWN), pow(bC, bL, 5, 1, bL, DOWN), pow(10, 0, bO, 0, 0, DOWN))
368+ let bQ = Issue(bM, bN, bP, bO, true)
369+ let bR = calculateAssetId(bQ)
370+ let bS = aE(bz, bC)
371+ let bT = if (containsElement(I, bF))
372+ then invoke(this, "stakeUnstake", [true, bz, bF], nil)
365373 else 0
366- if ((bP == bP))
374+ if ((bT == bT))
367375 then {
368- let bQ = if (containsElement(G, bF))
369- then invoke(this, "stakeUnstake", [true, by, bF], nil)
376+ let bU = if (containsElement(I, bJ))
377+ then invoke(this, "stakeUnstake", [true, bC, bJ], nil)
370378 else 0
371- if ((bQ == bQ))
372- then [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bB), StringEntry(e, bF), IntegerEntry(f, bv), IntegerEntry(g, by), IntegerEntry(l, bO), IntegerEntry(j, X), IntegerEntry(k, Z), bM, StringEntry(h, toBase58String(bN)), IntegerEntry(i, bL), ScriptTransfer(ar.caller, bL, bN)]
379+ if ((bU == bU))
380+ then [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bF), StringEntry(e, bJ), IntegerEntry(f, bz), IntegerEntry(g, bC), IntegerEntry(l, bS), IntegerEntry(j, Z), IntegerEntry(k, ab), bQ, StringEntry(h, toBase58String(bR)), IntegerEntry(i, bP), ScriptTransfer(at.caller, bP, bR)]
373381 else throw("Strict value is not equal to itself.")
374382 }
375383 else throw("Strict value is not equal to itself.")
376384 }
377385 }
378386
379387
380388
381-@Callable(ar)
382-func replenishWithTwoTokens (bR) = {
383- let bw = ar.payments[0].assetId
384- let bz = ar.payments[1].assetId
385- let bv = ar.payments[0].amount
386- let by = ar.payments[1].amount
387- let bS = aY(bw)
388- let bB = bS._1
389- let bC = bS._2
390- let bD = bS._3
391- let bT = aY(bz)
392- let bF = bT._1
393- let bG = bT._2
394- let bH = bT._3
395- let bU = fraction(fraction(ab, S, bv), aa, fraction(ab, T, by))
396- let bV = fraction(ab, bv, S)
397- let bW = fraction(ab, by, T)
398- let bX = fraction(min([bV, bW]), V, ab)
399- let bO = aA((S + bv), (T + by))
400- if (!(J))
401- then be()
402- else if (if ((0 > bR))
389+@Callable(at)
390+func replenishWithTwoTokens (bV) = {
391+ let bA = at.payments[0].assetId
392+ let bD = at.payments[1].assetId
393+ let bz = at.payments[0].amount
394+ let bC = at.payments[1].amount
395+ let bW = bc(bA)
396+ let bF = bW._1
397+ let bG = bW._2
398+ let bH = bW._3
399+ let bX = bc(bD)
400+ let bJ = bX._1
401+ let bK = bX._2
402+ let bL = bX._3
403+ let bY = fraction(fraction(ad, U, bz), ac, fraction(ad, V, bC))
404+ let bZ = fraction(ad, bz, U)
405+ let ca = fraction(ad, bC, V)
406+ let cb = fraction(min([bZ, ca]), X, ad)
407+ let bS = aE((U + bz), (V + bC))
408+ if (!(L))
409+ then bi()
410+ else if (if ((0 > bV))
403411 then true
404- else (bR > 10))
412+ else (bV > 10))
405413 then throw("Slippage tolerance must be <= 1%")
406- else if ((size(ar.payments) != 2))
414+ else if ((size(at.payments) != 2))
407415 then throw("Two attached assets expected")
408- else if (if ((bw != M))
416+ else if (if ((bA != O))
409417 then true
410- else (bz != N))
411- then bg()
412- else if (if ((((aa * (ad - bR)) / ad) > bU))
418+ else (bD != P))
419+ then bk()
420+ else if (if ((((ac * (af - bV)) / af) > bY))
413421 then true
414- else (bU > ((aa * (ad + bR)) / ad)))
422+ else (bY > ((ac * (af + bV)) / af)))
415423 then throw("Incorrect assets amount: amounts must have the contract ratio")
416- else if ((bX == 0))
424+ else if ((cb == 0))
417425 then throw("Too small amount to replenish")
418- else if (!(aw))
419- then ([ScriptTransfer(ar.caller, bv, bw), ScriptTransfer(ar.caller, by, bz)] ++ bl())
426+ else if (!(aA))
427+ then ([ScriptTransfer(at.caller, bz, bA), ScriptTransfer(at.caller, bC, bD)] ++ bp())
420428 else {
421- let bP = if (containsElement(G, bB))
422- then invoke(this, "stakeUnstake", [true, bv, bB], nil)
429+ let bT = if (containsElement(I, bF))
430+ then invoke(this, "stakeUnstake", [true, bz, bF], nil)
423431 else 0
424- if ((bP == bP))
432+ if ((bT == bT))
425433 then {
426- let bQ = if (containsElement(G, bF))
427- then invoke(this, "stakeUnstake", [true, by, bF], nil)
434+ let bU = if (containsElement(I, bJ))
435+ then invoke(this, "stakeUnstake", [true, bC, bJ], nil)
428436 else 0
429- if ((bQ == bQ))
430- then [IntegerEntry(f, (S + bv)), IntegerEntry(g, (T + by)), IntegerEntry(i, (V + bX)), IntegerEntry(l, bO), Reissue(U, bX, true), ScriptTransfer(ar.caller, bX, U)]
437+ if ((bU == bU))
438+ then [IntegerEntry(f, (U + bz)), IntegerEntry(g, (V + bC)), IntegerEntry(i, (X + cb)), IntegerEntry(l, bS), Reissue(W, cb, true), ScriptTransfer(at.caller, cb, W)]
431439 else throw("Strict value is not equal to itself.")
432440 }
433441 else throw("Strict value is not equal to itself.")
434442 }
435443 }
436444
437445
438446
439-@Callable(ar)
440-func replenishWithOneToken (bY,bZ) = {
441- let ca = $Tuple2(ar.payments[0].amount, ar.payments[0].assetId)
442- let cb = ca._1
443- let cc = ca._2
444- let cd = aY(cc)
445- let ce = cd._1
446- let cf = cd._2
447- let cg = cd._3
448- let ch = 5000000
449- let ci = 50000000
450- let cj = if ((ci > cb))
447+@Callable(at)
448+func replenishWithOneToken (cc,cd) = {
449+ let ce = $Tuple2(at.payments[0].amount, at.payments[0].assetId)
450+ let cf = ce._1
451+ let cg = ce._2
452+ let ch = bc(cg)
453+ let ci = ch._1
454+ let cj = ch._2
455+ let ck = ch._3
456+ let cl = 5000000
457+ let cm = 50000000
458+ let cn = if ((cm > cf))
451459 then 100000
452460 else 1
453- let ck = (ab - ((ab * cj) / 10000000))
454- let cl = (ab + ((ab * cj) / 10000000))
455- let cm = (ab - ((ab * 1) / 10000000))
456- if (!(J))
457- then be()
458- else if ((ch > cb))
459- then throw((((("Payment amount " + toString(cb)) + " does not exceed the minimum amount of ") + toString(ch)) + " tokens"))
460- else if ((size(ar.payments) != 1))
461+ let co = (ad - ((ad * cn) / 10000000))
462+ let cp = (ad + ((ad * cn) / 10000000))
463+ let cq = (ad - ((ad * 1) / 10000000))
464+ if (!(L))
465+ then bi()
466+ else if ((cl > cf))
467+ then throw((((("Payment amount " + toString(cf)) + " does not exceed the minimum amount of ") + toString(cl)) + " tokens"))
468+ else if ((size(at.payments) != 1))
461469 then throw("One attached payment expected")
462- else if (!(aw))
463- then ([ScriptTransfer(ar.caller, cb, cc)] ++ bl())
464- else if (if ((cc != M))
465- then (cc != N)
470+ else if (!(aA))
471+ then ([ScriptTransfer(at.caller, cf, cg)] ++ bp())
472+ else if (if ((cg != O))
473+ then (cg != P)
466474 else false)
467- then bg()
475+ then bk()
468476 else {
469- let cn = if ((cc == M))
470- then $Tuple7((cb - bY), bZ, (S + bY), (T - bZ), aA((S + cb), T), (S + cb), T)
471- else $Tuple7(bZ, (cb - bY), (S - bZ), (T + bY), aA(S, (T + cb)), S, (T + cb))
472- let co = cn._1
473- let cp = cn._2
474- let cq = cn._3
475- let cr = cn._4
476- let bO = cn._5
477- let cs = cn._6
478- let ct = cn._7
479- let cu = if ((cc == M))
480- then IntegerEntry(f, cs)
481- else IntegerEntry(g, ct)
482- let aJ = aA(cq, cr)
483- let aK = fraction(ab, W, aJ)
484- let cv = (fraction((ab * ab), cq, cr) / fraction(ab, co, cp))
485- let cw = fraction((cs + ct), af, (2 * ag))
486- if (if ((cm >= aK))
477+ let cr = if ((cg == O))
478+ then $Tuple7((cf - cc), cd, (U + cc), (V - cd), aE((U + cf), V), (U + cf), V)
479+ else $Tuple7(cd, (cf - cc), (U - cd), (V + cc), aE(U, (V + cf)), U, (V + cf))
480+ let cs = cr._1
481+ let ct = cr._2
482+ let cu = cr._3
483+ let cv = cr._4
484+ let bS = cr._5
485+ let cw = cr._6
486+ let cx = cr._7
487+ let cy = if ((cg == O))
488+ then IntegerEntry(f, cw)
489+ else IntegerEntry(g, cx)
490+ let aN = aE(cu, cv)
491+ let aO = fraction(ad, Y, aN)
492+ let cz = (fraction((ad * ad), cu, cv) / fraction(ad, cs, ct))
493+ let cA = fraction((cw + cx), ah, (2 * ai))
494+ if (if ((cq >= aO))
487495 then true
488- else (W > aJ))
496+ else (Y > aN))
489497 then throw("Incorrect virtualSwapTokenPay or virtualSwapTokenGet value")
490- else if (if ((ck > cv))
498+ else if (if ((co > cz))
491499 then true
492- else (cv > cl))
500+ else (cz > cp))
493501 then throw("Swap with virtualSwapTokenPay and virtualSwapTokenGet is possible, but ratio after virtual swap is incorrect")
494- else if (if ((cw > cs))
502+ else if (if ((cA > cw))
495503 then true
496- else (cw > ct))
497- then bh(cw, cs, ct)
504+ else (cA > cx))
505+ then bl(cA, cw, cx)
498506 else {
499- let bP = if (containsElement(G, ce))
500- then invoke(this, "stakeUnstake", [true, cb, ce], nil)
507+ let bT = if (containsElement(I, ci))
508+ then invoke(this, "stakeUnstake", [true, cf, ci], nil)
501509 else 0
502- if ((bP == bP))
510+ if ((bT == bT))
503511 then {
504- let bV = fraction(co, ab, cq)
505- let bW = fraction(cp, ab, cr)
506- let bX = fraction(min([bV, bW]), V, ab)
507-[Reissue(U, bX, true), ScriptTransfer(ar.caller, bX, U), IntegerEntry(i, (V + bX)), cu, IntegerEntry(l, bO)]
512+ let bZ = fraction(cs, ad, cu)
513+ let ca = fraction(ct, ad, cv)
514+ let cb = fraction(min([bZ, ca]), X, ad)
515+[Reissue(W, cb, true), ScriptTransfer(at.caller, cb, W), IntegerEntry(i, (X + cb)), cy, IntegerEntry(l, bS)]
508516 }
509517 else throw("Strict value is not equal to itself.")
510518 }
511519 }
512520 }
513521
514522
515523
516-@Callable(ar)
524+@Callable(at)
517525 func withdraw () = {
518- let cx = $Tuple2(ar.payments[0].amount, ar.payments[0].assetId)
519- let cb = cx._1
520- let cc = cx._2
521- let cy = fraction(cb, S, V)
522- let cz = fraction(cb, T, V)
523- let bO = aA((S - cy), (T - cz))
524- if (!(J))
525- then be()
526- else if ((size(ar.payments) != 1))
526+ let cB = $Tuple2(at.payments[0].amount, at.payments[0].assetId)
527+ let cf = cB._1
528+ let cg = cB._2
529+ let cC = fraction(cf, U, X)
530+ let cD = fraction(cf, V, X)
531+ let bS = aE((U - cC), (V - cD))
532+ if (!(L))
533+ then bi()
534+ else if ((size(at.payments) != 1))
527535 then throw("One attached payment expected")
528- else if ((cc != U))
529- then throw(("Incorrect asset attached. Expected: " + toBase58String(U)))
530- else if (!(aw))
531- then ([ScriptTransfer(ar.caller, cb, cc)] ++ bl())
536+ else if ((cg != W))
537+ then throw(("Incorrect asset attached. Expected: " + toBase58String(W)))
538+ else if (!(aA))
539+ then ([ScriptTransfer(at.caller, cf, cg)] ++ bp())
532540 else {
533- let bP = if (containsElement(G, K))
534- then invoke(this, "stakeUnstake", [false, cy, K], nil)
541+ let bT = if (containsElement(I, M))
542+ then invoke(this, "stakeUnstake", [false, cC, M], nil)
535543 else 0
536- if ((bP == bP))
544+ if ((bT == bT))
537545 then {
538- let bQ = if (containsElement(G, L))
539- then invoke(this, "stakeUnstake", [false, cz, L], nil)
546+ let bU = if (containsElement(I, N))
547+ then invoke(this, "stakeUnstake", [false, cD, N], nil)
540548 else 0
541- if ((bQ == bQ))
542- then [IntegerEntry(f, (S - cy)), IntegerEntry(g, (T - cz)), IntegerEntry(i, (V - cb)), IntegerEntry(l, bO), Burn(U, cb), ScriptTransfer(ar.caller, cy, M), ScriptTransfer(ar.caller, cz, N)]
549+ if ((bU == bU))
550+ then [IntegerEntry(f, (U - cC)), IntegerEntry(g, (V - cD)), IntegerEntry(i, (X - cf)), IntegerEntry(l, bS), Burn(W, cf), ScriptTransfer(at.caller, cC, O), ScriptTransfer(at.caller, cD, P)]
543551 else throw("Strict value is not equal to itself.")
544552 }
545553 else throw("Strict value is not equal to itself.")
546554 }
547555 }
548556
549557
550558
551-@Callable(ar)
552-func exchange (cA,cB) = {
553- let cC = $Tuple2(ar.payments[0].amount, ar.payments[0].assetId)
554- let cb = cC._1
555- let cc = cC._2
556- if (!(J))
557- then be()
558- else if ((0 >= cA))
559- then throw(("Estimated amount must be positive. Actual: " + toString(cA)))
560- else if ((cB > cA))
561- then throw(((("Minimal amount can't be greater than estimated. Estimated: " + toString(cA)) + ". Minimal: ") + toString(cB)))
562- else if ((size(ar.payments) != 1))
559+@Callable(at)
560+func exchange (cE,cF) = {
561+ let cG = $Tuple2(at.payments[0].amount, at.payments[0].assetId)
562+ let cf = cG._1
563+ let cg = cG._2
564+ if (!(L))
565+ then bi()
566+ else if ((0 >= cE))
567+ then throw(("Estimated amount must be positive. Actual: " + toString(cE)))
568+ else if ((cF > cE))
569+ then throw(((("Minimal amount can't be greater than estimated. Estimated: " + toString(cE)) + ". Minimal: ") + toString(cF)))
570+ else if ((size(at.payments) != 1))
563571 then throw("One attached payment expected")
564- else if (!(aw))
565- then ([ScriptTransfer(ar.caller, cb, cc)] ++ bl())
566- else if (if ((cc != M))
567- then (cc != N)
572+ else if (!(aA))
573+ then ([ScriptTransfer(at.caller, cf, cg)] ++ bp())
574+ else if (if ((cg != O))
575+ then (cg != P)
568576 else false)
569- then bg()
570- else if ((10000000 > cb))
577+ then bk()
578+ else if ((10000000 > cf))
571579 then throw("Only swap of 10.000000 or more tokens is allowed")
572- else if (if ((ah > fraction(ab, cB, cb)))
580+ else if (if ((aj > fraction(ad, cF, cf)))
573581 then true
574- else (fraction(ab, cA, cb) > ai))
582+ else (fraction(ad, cE, cf) > ak))
575583 then throw("Incorrect args and pmt ratio")
576584 else {
577- let cD = if ((cc == M))
578- then N
579- else M
580- let bp = aC(cA, cB, cb, cc)
581- let cE = fraction(bp, Y, Z)
582- let cF = fraction(bp, (Z - X), Z)
583- let cG = if ((cc == M))
584- then $Tuple2((S + cb), ((T - cF) - cE))
585- else $Tuple2(((S - cF) - cE), (T + cb))
586- let cs = cG._1
587- let ct = cG._2
588- let cw = fraction((cs + ct), af, (2 * ag))
589- if (if ((cw > cs))
585+ let cH = if ((cg == O))
586+ then P
587+ else O
588+ let bt = aG(cE, cF, cf, cg)
589+ let cI = fraction(bt, aa, ab)
590+ let cJ = fraction(bt, (ab - Z), ab)
591+ let cK = if ((cg == O))
592+ then $Tuple2((U + cf), ((V - cJ) - cI))
593+ else $Tuple2(((U - cJ) - cI), (V + cf))
594+ let cw = cK._1
595+ let cx = cK._2
596+ let cA = fraction((cw + cx), ah, (2 * ai))
597+ if (if ((cA > cw))
590598 then true
591- else (cw > ct))
592- then bh(cw, cs, ct)
599+ else (cA > cx))
600+ then bl(cA, cw, cx)
593601 else {
594- let cH = aY(cc)
595- let ce = cH._1
596- let cf = cH._2
597- let cg = cH._3
598- let cI = aY(cD)
599- let cJ = cI._1
600- let cK = cI._2
601- let cL = cI._3
602- let bP = if (containsElement(G, ce))
603- then invoke(this, "stakeUnstake", [true, cb, ce], nil)
602+ let cL = bc(cg)
603+ let ci = cL._1
604+ let cj = cL._2
605+ let ck = cL._3
606+ let cM = bc(cH)
607+ let cN = cM._1
608+ let cO = cM._2
609+ let cP = cM._3
610+ let bT = if (containsElement(I, ci))
611+ then invoke(this, "stakeUnstake", [true, cf, ci], nil)
604612 else 0
605- if ((bP == bP))
613+ if ((bT == bT))
606614 then {
607- let bQ = if (containsElement(G, cJ))
608- then invoke(this, "stakeUnstake", [false, (bp + cE), cJ], nil)
615+ let bU = if (containsElement(I, cN))
616+ then invoke(this, "stakeUnstake", [false, (cJ + cI), cN], nil)
609617 else 0
610- if ((bQ == bQ))
611- then [IntegerEntry(f, cs), IntegerEntry(g, ct), IntegerEntry(l, aA(cs, ct)), ScriptTransfer(ar.caller, cF, cD), ScriptTransfer(D, cE, cD)]
618+ if ((bU == bU))
619+ then [IntegerEntry(f, cw), IntegerEntry(g, cx), IntegerEntry(l, aE(cw, cx)), ScriptTransfer(at.caller, cJ, cH), ScriptTransfer(E, cI, cH)]
612620 else throw("Strict value is not equal to itself.")
613621 }
614622 else throw("Strict value is not equal to itself.")
615623 }
616624 }
617625 }
618626
619627
620628
621-@Callable(ar)
622-func shutdown () = if (!(J))
629+@Callable(at)
630+func shutdown () = if (!(L))
623631 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, m), "the cause wasn't specified")))
624- else if (!(containsElement([y, z, A, B], ar.callerPublicKey)))
625- then bf()
626- else bb("Paused by admin")
632+ else if (!(containsElement([z, A, B, C], at.callerPublicKey)))
633+ then bj()
634+ else bf("Paused by admin")
627635
628636
629637
630-@Callable(ar)
631-func activate () = if (J)
632- then bd()
633- else if (!(containsElement([y, z, A, B], ar.callerPublicKey)))
634- then bf()
638+@Callable(at)
639+func activate () = if (L)
640+ then bh()
641+ else if (!(containsElement([z, A, B, C], at.callerPublicKey)))
642+ then bj()
635643 else [BooleanEntry(c, true), DeleteEntry(m)]
636644
637645
638646
639-@Callable(ar)
640-func takeIntoAccountExtraFunds (cM) = {
641- let cN = (au - S)
642- let cO = (av - T)
643- let cP = (cN - (if ((M == unit))
644- then cM
647+@Callable(at)
648+func takeIntoAccountExtraFunds (cQ) = {
649+ let cR = (ay - U)
650+ let cS = (az - V)
651+ let cT = (cR - (if ((O == unit))
652+ then cQ
645653 else 0))
646- let cQ = (cO - (if ((N == unit))
647- then cM
654+ let cU = (cS - (if ((P == unit))
655+ then cQ
648656 else 0))
649- let aJ = aA((S + cP), (T + cQ))
650- if (!(J))
651- then be()
652- else if ((ar.caller != this))
653- then bf()
654- else if ((0 > cM))
655- then throw(("Argument 'amountLeave' cannot be negative. Actual: " + toString(cM)))
656- else if (if ((0 > cN))
657+ let aN = aE((U + cT), (V + cU))
658+ if (!(L))
659+ then bi()
660+ else if ((at.caller != this))
661+ then bj()
662+ else if ((0 > cQ))
663+ then throw(("Argument 'amountLeave' cannot be negative. Actual: " + toString(cQ)))
664+ else if (if ((0 > cR))
657665 then true
658- else (0 > cO))
659- then bb("Enroll amount negative")
660- else if (if ((0 > cP))
666+ else (0 > cS))
667+ then bf("Enroll amount negative")
668+ else if (if ((0 > cT))
661669 then true
662- else (0 > cQ))
670+ else (0 > cU))
663671 then throw("Too large amountLeave")
664672 else {
665- let bP = if (if (containsElement(G, K))
666- then (cP > 0)
673+ let bT = if (if (containsElement(I, M))
674+ then (cT > 0)
667675 else false)
668- then invoke(this, "stakeUnstake", [true, cP, K], nil)
676+ then invoke(this, "stakeUnstake", [true, cT, M], nil)
669677 else 0
670- if ((bP == bP))
678+ if ((bT == bT))
671679 then {
672- let bQ = if (if (containsElement(G, L))
673- then (cQ > 0)
680+ let bU = if (if (containsElement(I, N))
681+ then (cU > 0)
674682 else false)
675- then invoke(this, "stakeUnstake", [true, cQ, L], nil)
683+ then invoke(this, "stakeUnstake", [true, cU, N], nil)
676684 else 0
677- if ((bQ == bQ))
678- then [IntegerEntry(l, aJ), IntegerEntry(f, (S + cP)), IntegerEntry(g, (T + cQ)), IntegerEntry(("last_income_" + K), cP), IntegerEntry(("last_income_" + L), cQ)]
685+ if ((bU == bU))
686+ then [IntegerEntry(l, aN), IntegerEntry(f, (U + cT)), IntegerEntry(g, (V + cU)), IntegerEntry(("last_income_" + M), cT), IntegerEntry(("last_income_" + N), cU)]
679687 else throw("Strict value is not equal to itself.")
680688 }
681689 else throw("Strict value is not equal to itself.")
682690 }
683691 }
684692
685693
686694
687-@Callable(ar)
688-func stakeUnstake (bn,bp,cR) = if ((ar.caller != this))
695+@Callable(at)
696+func stakeUnstake (br,bt,cV) = if ((at.caller != this))
689697 then throw("Only contract itself can invoke this function")
690698 else {
691- let cS = bo(bn, bp, fromBase58String(cR))
692- let br = cS._1
693- let cT = cS._2
694- let cU = cS._3
695- let cV = cS._4
696- let cW = invoke(cT, br, cU, cV)
697- if ((cW == cW))
699+ let cW = bs(br, bt, fromBase58String(cV))
700+ let bv = cW._1
701+ let cX = cW._2
702+ let cY = cW._3
703+ let cZ = cW._4
704+ let da = invoke(cX, bv, cY, cZ)
705+ if ((da == da))
698706 then nil
699707 else throw("Strict value is not equal to itself.")
700708 }
701709
702710
703711
704-@Callable(ar)
705-func stakeAll () = if (!(J))
712+@Callable(at)
713+func stakeAll () = if (!(L))
706714 then throw("DApp is inactive at this moment")
707- else if (!(containsElement([y, z, A, B], ar.callerPublicKey)))
715+ else if (!(containsElement([z, A, B, C], at.callerPublicKey)))
708716 then throw("Only admin can call this function")
709717 else {
710- let bP = if (containsElement(G, K))
718+ let bT = if (containsElement(I, M))
711719 then {
712- let bj = (S - as)
713- if ((bj > 0))
714- then invoke(this, "stakeUnstake", [true, bj, K], nil)
720+ let bn = (U - au)
721+ if ((bn > 0))
722+ then invoke(this, "stakeUnstake", [true, bn, M], nil)
715723 else 0
716724 }
717725 else 0
718- if ((bP == bP))
726+ if ((bT == bT))
719727 then {
720- let bQ = if (containsElement(G, L))
728+ let bU = if (containsElement(I, N))
721729 then {
722- let bk = (T - at)
723- if ((bk > 0))
724- then invoke(this, "stakeUnstake", [true, bk, L], nil)
730+ let bo = (V - av)
731+ if ((bo > 0))
732+ then invoke(this, "stakeUnstake", [true, bo, N], nil)
725733 else 0
726734 }
727735 else 0
728- if ((bQ == bQ))
736+ if ((bU == bU))
729737 then nil
730738 else throw("Strict value is not equal to itself.")
731739 }
732740 else throw("Strict value is not equal to itself.")
733741 }
734742
735743
736-@Verifier(cX)
737-func cY () = {
738- let cZ = {
739- let da = if (sigVerify(cX.bodyBytes, cX.proofs[0], y))
744+@Verifier(db)
745+func dc () = {
746+ let dd = {
747+ let de = if (sigVerify(db.bodyBytes, db.proofs[0], z))
740748 then 1
741749 else 0
742- let db = if (sigVerify(cX.bodyBytes, cX.proofs[1], z))
750+ let df = if (sigVerify(db.bodyBytes, db.proofs[1], A))
743751 then 1
744752 else 0
745- let dc = if (sigVerify(cX.bodyBytes, cX.proofs[2], A))
753+ let dg = if (sigVerify(db.bodyBytes, db.proofs[2], B))
746754 then 1
747755 else 0
748- (((da + db) + dc) >= 2)
756+ (((de + df) + dg) >= 2)
749757 }
750- let v = cX
751- if ($isInstanceOf(v, "InvokeScriptTransaction"))
758+ let w = db
759+ if ($isInstanceOf(w, "InvokeScriptTransaction"))
752760 then {
753- let cW = v
754- let dd = if ((cW.dApp == this))
755- then (cW.function == "takeIntoAccountExtraFunds")
761+ let da = w
762+ let dh = if ((da.dApp == this))
763+ then (da.function == "takeIntoAccountExtraFunds")
756764 else false
757- let de = if (if (if (sigVerify(cX.bodyBytes, cX.proofs[0], y))
765+ let di = if (if (if (sigVerify(db.bodyBytes, db.proofs[0], z))
758766 then true
759- else sigVerify(cX.bodyBytes, cX.proofs[0], z))
767+ else sigVerify(db.bodyBytes, db.proofs[0], A))
760768 then true
761- else sigVerify(cX.bodyBytes, cX.proofs[0], A))
769+ else sigVerify(db.bodyBytes, db.proofs[0], B))
762770 then true
763- else sigVerify(cX.bodyBytes, cX.proofs[0], C)
764- if (if (dd)
765- then de
771+ else sigVerify(db.bodyBytes, db.proofs[0], D)
772+ if (if (dh)
773+ then di
766774 else false)
767775 then true
768- else cZ
776+ else dd
769777 }
770- else cZ
778+ else dd
771779 }
772780

github/deemru/w8io/169f3d6 
348.15 ms