tx · A9BMfNVeen6FQ1hc4kXqQcFYncW9Krs2CgHyuEqwtB6Z

3PKYPKJPHZENAAwH9e7TF5edDgukNxxBt3M:  -0.01400000 Waves

2021.10.27 18:19 [2829882] smart account 3PKYPKJPHZENAAwH9e7TF5edDgukNxxBt3M > SELF 0.00000000 Waves

{ "type": 13, "id": "A9BMfNVeen6FQ1hc4kXqQcFYncW9Krs2CgHyuEqwtB6Z", "fee": 1400000, "feeAssetId": null, "timestamp": 1635347945918, "version": 2, "chainId": 87, "sender": "3PKYPKJPHZENAAwH9e7TF5edDgukNxxBt3M", "senderPublicKey": "7crELxSr7YfSCkudWhajLWJpmfKyDFg9LY66hZ6h6kTE", "proofs": [ "2eK3JCFGKpCkRK822KkSMfJsYMk8kiFM6Gzzs2kncaQXQ1wCYVP7x9pXCF68RzxekG1p8VHdmBHGQtzKUr4ETj3d" ], "script": "base64:AAIFAAAAAAAAABIIAhIAEgASABIAEgASBAoCCAEAAAAUAAAAAAFUAAAAAAAAAAAJAAAAAAhhc3NldElkcwkABEwAAAACAQAAACA/mXAGoYY5iv69krY33AShgUgw6P6oxCGGyggxgk8o9wkABEwAAAACAQAAACAOZtXyDs+nq8XjyQPdkdqTWBL3jbbh1YLz0eZmVRhgnAkABEwAAAACAQAAACAVBkgHeR3Bzwe6dxdn4Glkg7D51FZ48RqdpCr9g66qXwkABEwAAAACAQAAACCmylSYc9xZU/oU+edNDLKfhjLyn0ocBZAyldpOUkyk1AkABEwAAAACAQAAACBGudFwXZ5CnT50xu8SJpzb1TTyrFOpDxe+Yi+g0973iAkABEwAAAACAQAAACAt9IxMQIZykdWzGYrwMSWB16lyJ1RWlmLy4cynUycJlQkABEwAAAACAQAAACDHtP9w/Iwo3bHs5TLFr2fv30b4AOYV/slbkTJtsDCCxgkABEwAAAACAQAAACCjn39PI3JR0SziIZJiiE0MC/PqIm6B1a/8C5MXzm2xyQkABEwAAAACAQAAACC2JinDBPXOU5GkDkt1JC9kjFGx+t+vVCm9SNIdKrKq0QUAAAADbmlsAAAAAA1Bc3NldHNXZWlnaHRzCQAETAAAAAIAAAAAAAAAAAoJAARMAAAAAgAAAAAAAAAACgkABEwAAAACAAAAAAAAAAAKCQAETAAAAAIAAAAAAAAAAAoJAARMAAAAAgAAAAAAAAAACgkABEwAAAACAAAAAAAAAAAKCQAETAAAAAIAAAAAAAAAAAoJAARMAAAAAgAAAAAAAAAAFAkABEwAAAACAAAAAAAAAAAKBQAAAANuaWwAAAAAFUFzc2V0c1dlaWdodHNEZWNpbWFscwAAAAAAAAAAAgAAAAARUG9vbFRva2VuRGVjaW1hbHMAAAAAAAAAAAAAAAAACERlY2ltYWxzCQAETAAAAAIAAAAAAAAAAAgJAARMAAAAAgAAAAAAAAAACAkABEwAAAACAAAAAAAAAAAICQAETAAAAAIAAAAAAAAAAAgJAARMAAAAAgAAAAAAAAAACAkABEwAAAACAAAAAAAAAAAICQAETAAAAAIAAAAAAAAAAAgJAARMAAAAAgAAAAAAAAAACAkABEwAAAACAAAAAAAAAAAGBQAAAANuaWwAAAAABlNjYWxlcwkABEwAAAACAAAAAAAF9eEACQAETAAAAAIAAAAAAAX14QAJAARMAAAAAgAAAAAABfXhAAkABEwAAAACAAAAAAAF9eEACQAETAAAAAIAAAAAAAX14QAJAARMAAAAAgAAAAAABfXhAAkABEwAAAACAAAAAAAF9eEACQAETAAAAAIAAAAAAAX14QAJAARMAAAAAgAAAAAAAA9CQAUAAAADbmlsAAAAAANGZWUAAAAAAAAAAMgAAAAABVNjYWxlAAAAAAAAACcQAAAAAAhGZWVTY2FsZQAAAAAAAAAnEAAAAAANZmVlQWdncmVnYXRvcgkBAAAAB0FkZHJlc3MAAAABAQAAABoBV2vaolaGL+08rabj6LRe8UPUugO3UTdOuAEAAAANdHJ5R2V0SW50ZWdlcgAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFiBQAAAAckbWF0Y2gwBQAAAAFiAAAAAAAAAAAAAQAAAAx0cnlHZXRCaW5hcnkAAAABAAAAA2tleQQAAAAHJG1hdGNoMAkABBwAAAACBQAAAAR0aGlzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAACkJ5dGVWZWN0b3IEAAAAAWIFAAAAByRtYXRjaDAFAAAAAWIBAAAAAAEAAAAWZ2V0Q3VycmVudFRva2VuQmFsYW5jZQAAAAEAAAAJdG9rZW5UeXBlBAAAAAd0b2tlbklkCQACWAAAAAEJAAGRAAAAAgUAAAAIYXNzZXRJZHMFAAAACXRva2VuVHlwZQkBAAAADXRyeUdldEludGVnZXIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAHZ2xvYmFsXwUAAAAHdG9rZW5JZAIAAAAIX2JhbGFuY2UBAAAAEGNhbGN1bGF0ZVBJc3N1ZWQAAAACAAAABmFtb3VudAAAAAd0b2tlbklkBAAAAAdQc3VwcGx5CQEAAAANdHJ5R2V0SW50ZWdlcgAAAAECAAAAF2dsb2JhbF9wb29sVG9rZW5fYW1vdW50BAAAAAdCYWxhbmNlCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAdnbG9iYWxfCQACWAAAAAEFAAAAB3Rva2VuSWQCAAAACF9iYWxhbmNlCQEAAAAIZnJhY3Rpb24AAAAEBQAAAAZhbW91bnQFAAAAB1BzdXBwbHkFAAAAB0JhbGFuY2UFAAAABERPV04BAAAADWdldE1pblBJc3N1ZWQAAAABAAAACHBheW1lbnRzCgEAAAAHaGFuZGxlcgAAAAIAAAAFYWNjdW0AAAAHY3VycmVudAQAAAAHUElzc3VlZAkBAAAAEGNhbGN1bGF0ZVBJc3N1ZWQAAAACCAUAAAAHY3VycmVudAAAAAZhbW91bnQJAQAAAAV2YWx1ZQAAAAEIBQAAAAdjdXJyZW50AAAAB2Fzc2V0SWQDAwkAAAAAAAACBQAAAAVhY2N1bQAAAAAAAAAAAAYJAABmAAAAAgUAAAAFYWNjdW0FAAAAB1BJc3N1ZWQFAAAAB1BJc3N1ZWQFAAAABWFjY3VtBAAAAAltaW5QSXNzZWQKAAAAAAIkbAUAAAAIcGF5bWVudHMKAAAAAAIkcwkAAZAAAAABBQAAAAIkbAoAAAAABSRhY2MwAAAAAAAAAAAACgEAAAABMQAAAAIAAAACJGEAAAACJGkDCQAAZwAAAAIFAAAAAiRpBQAAAAIkcwUAAAACJGEJAQAAAAdoYW5kbGVyAAAAAgUAAAACJGEJAAGRAAAAAgUAAAACJGwFAAAAAiRpCgEAAAABMgAAAAIAAAACJGEAAAACJGkDCQAAZwAAAAIFAAAAAiRpBQAAAAIkcwUAAAACJGEJAAACAAAAAQIAAAAUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQAAAAEyAAAAAgkBAAAAATEAAAACCQEAAAABMQAAAAIJAQAAAAExAAAAAgkBAAAAATEAAAACCQEAAAABMQAAAAIJAQAAAAExAAAAAgkBAAAAATEAAAACCQEAAAABMQAAAAIJAQAAAAExAAAAAgkBAAAAATEAAAACBQAAAAUkYWNjMAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAgAAAAAAAAAAAwAAAAAAAAAABAAAAAAAAAAABQAAAAAAAAAABgAAAAAAAAAABwAAAAAAAAAACAAAAAAAAAAACQAAAAAAAAAACgUAAAAJbWluUElzc2VkAQAAABNjaGVja1Rva2Vuc1ZhbGlkaXR5AAAAAQAAAAhwYXltZW50cwoBAAAACGhhbmRsZXIxAAAAAgAAAAVhY2N1bQAAAAdwYXltZW50CQAETgAAAAIFAAAABWFjY3VtCQAETAAAAAIJAQAAAAV2YWx1ZQAAAAEIBQAAAAdwYXltZW50AAAAB2Fzc2V0SWQFAAAAA25pbAQAAAADaWRzCgAAAAACJGwFAAAACHBheW1lbnRzCgAAAAACJHMJAAGQAAAAAQUAAAACJGwKAAAAAAUkYWNjMAUAAAADbmlsCgEAAAABMQAAAAIAAAACJGEAAAACJGkDCQAAZwAAAAIFAAAAAiRpBQAAAAIkcwUAAAACJGEJAQAAAAhoYW5kbGVyMQAAAAIFAAAAAiRhCQABkQAAAAIFAAAAAiRsBQAAAAIkaQoBAAAAATIAAAACAAAAAiRhAAAAAiRpAwkAAGcAAAACBQAAAAIkaQUAAAACJHMFAAAAAiRhCQAAAgAAAAECAAAAFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEAAAABMgAAAAIJAQAAAAExAAAAAgkBAAAAATEAAAACCQEAAAABMQAAAAIJAQAAAAExAAAAAgkBAAAAATEAAAACCQEAAAABMQAAAAIJAQAAAAExAAAAAgkBAAAAATEAAAACCQEAAAABMQAAAAIJAQAAAAExAAAAAgUAAAAFJGFjYzAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAIAAAAAAAAAAAMAAAAAAAAAAAQAAAAAAAAAAAUAAAAAAAAAAAYAAAAAAAAAAAcAAAAAAAAAAAgAAAAAAAAAAAkAAAAAAAAAAAoDCQAAAAAAAAIFAAAAA2lkcwUAAAADaWRzCgEAAAAIaGFuZGxlcjIAAAACAAAABWFjY3VtAAAAB2Fzc2V0SWQDCQEAAAACIT0AAAACCQAETwAAAAIFAAAAA2lkcwUAAAAHYXNzZXRJZAUAAAAEdW5pdAkAAGQAAAACBQAAAAVhY2N1bQAAAAAAAAAAAQkAAAIAAAABCQABLAAAAAICAAAAFGFzc2V0IG5vdCBhdHRhY2hlZDogCQACWAAAAAEFAAAAB2Fzc2V0SWQEAAAABmNoZWNrcwoAAAAAAiRsBQAAAAhhc3NldElkcwoAAAAAAiRzCQABkAAAAAEFAAAAAiRsCgAAAAAFJGFjYzAAAAAAAAAAAAAKAQAAAAExAAAAAgAAAAIkYQAAAAIkaQMJAABnAAAAAgUAAAACJGkFAAAAAiRzBQAAAAIkYQkBAAAACGhhbmRsZXIyAAAAAgUAAAACJGEJAAGRAAAAAgUAAAACJGwFAAAAAiRpCgEAAAABMgAAAAIAAAACJGEAAAACJGkDCQAAZwAAAAIFAAAAAiRpBQAAAAIkcwUAAAACJGEJAAACAAAAAQIAAAAUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQAAAAEyAAAAAgkBAAAAATEAAAACCQEAAAABMQAAAAIJAQAAAAExAAAAAgkBAAAAATEAAAACCQEAAAABMQAAAAIJAQAAAAExAAAAAgkBAAAAATEAAAACCQEAAAABMQAAAAIJAQAAAAExAAAAAgkBAAAAATEAAAACBQAAAAUkYWNjMAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAgAAAAAAAAAAAwAAAAAAAAAABAAAAAAAAAAABQAAAAAAAAAABgAAAAAAAAAABwAAAAAAAAAACAAAAAAAAAAACQAAAAAAAAAACgMJAAAAAAAAAgUAAAAGY2hlY2tzBQAAAAZjaGVja3MGCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAAAAE2hhbmRsZVBvb2xUb2tlbnNBZGQAAAADAAAAB1BJc3N1ZWQAAAAIcGF5bWVudHMAAAALdXNlckFkZHJlc3MKAQAAABVnZXRUb2tlblBheW1lbnRBbW91bnQAAAABAAAAB3Rva2VuSWQKAQAAAAdoYW5kbGVyAAAAAgAAAAVhY2N1bQAAAAdwYXltZW50AwkAAAAAAAACCAUAAAAHcGF5bWVudAAAAAdhc3NldElkBQAAAAd0b2tlbklkCAUAAAAHcGF5bWVudAAAAAZhbW91bnQFAAAABWFjY3VtCgAAAAACJGwFAAAACHBheW1lbnRzCgAAAAACJHMJAAGQAAAAAQUAAAACJGwKAAAAAAUkYWNjMAAAAAAAAAAAAAoBAAAAATEAAAACAAAAAiRhAAAAAiRpAwkAAGcAAAACBQAAAAIkaQUAAAACJHMFAAAAAiRhCQEAAAAHaGFuZGxlcgAAAAIFAAAAAiRhCQABkQAAAAIFAAAAAiRsBQAAAAIkaQoBAAAAATIAAAACAAAAAiRhAAAAAiRpAwkAAGcAAAACBQAAAAIkaQUAAAACJHMFAAAAAiRhCQAAAgAAAAECAAAAFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEAAAABMgAAAAIJAQAAAAExAAAAAgkBAAAAATEAAAACCQEAAAABMQAAAAIJAQAAAAExAAAAAgkBAAAAATEAAAACCQEAAAABMQAAAAIJAQAAAAExAAAAAgkBAAAAATEAAAACCQEAAAABMQAAAAIJAQAAAAExAAAAAgUAAAAFJGFjYzAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAIAAAAAAAAAAAMAAAAAAAAAAAQAAAAAAAAAAAUAAAAAAAAAAAYAAAAAAAAAAAcAAAAAAAAAAAgAAAAAAAAAAAkAAAAAAAAAAAoKAQAAABFoYW5kbGVUb2tlbkNoYW5nZQAAAAIAAAAFYWNjdW0AAAAHdG9rZW5JZAQAAAACQmsJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkAASwAAAACCQABLAAAAAICAAAAB2dsb2JhbF8JAAJYAAAAAQUAAAAHdG9rZW5JZAIAAAAIX2JhbGFuY2UEAAAAB1BTdXBwbHkJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQIAAAAXZ2xvYmFsX3Bvb2xUb2tlbl9hbW91bnQEAAAADXRva2VuRGVjaW1hbHMJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkAASwAAAACCQABLAAAAAICAAAAB3N0YXRpY18JAAJYAAAAAQUAAAAHdG9rZW5JZAIAAAAGX3NjYWxlBAAAAAJEawkBAAAACGZyYWN0aW9uAAAABAkAAGUAAAACCQEAAAAIZnJhY3Rpb24AAAAECQAAZAAAAAIFAAAAB1BTdXBwbHkFAAAAB1BJc3N1ZWQFAAAADXRva2VuRGVjaW1hbHMFAAAAB1BTdXBwbHkFAAAABERPV04FAAAADXRva2VuRGVjaW1hbHMFAAAAAkJrBQAAAA10b2tlbkRlY2ltYWxzBQAAAARET1dOCQAETgAAAAIFAAAABWFjY3VtCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAHZ2xvYmFsXwkAAlgAAAABBQAAAAd0b2tlbklkAgAAAAhfYmFsYW5jZQkAAGQAAAACBQAAAAJCawUAAAACRGsFAAAAA25pbAoBAAAAEmhhbmRsZVRva2VuQ2hhbmdlMgAAAAIAAAAFYWNjdW0AAAAHdG9rZW5JZAQAAAACQmsJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkAASwAAAACCQABLAAAAAICAAAAB2dsb2JhbF8JAAJYAAAAAQUAAAAHdG9rZW5JZAIAAAAIX2JhbGFuY2UEAAAAB1BTdXBwbHkJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQIAAAAXZ2xvYmFsX3Bvb2xUb2tlbl9hbW91bnQEAAAADXRva2VuRGVjaW1hbHMJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkAASwAAAACCQABLAAAAAICAAAAB3N0YXRpY18JAAJYAAAAAQUAAAAHdG9rZW5JZAIAAAAGX3NjYWxlBAAAAAJEawkBAAAACGZyYWN0aW9uAAAABAkAAGUAAAACCQEAAAAIZnJhY3Rpb24AAAAECQAAZAAAAAIFAAAAB1BTdXBwbHkFAAAAB1BJc3N1ZWQFAAAADXRva2VuRGVjaW1hbHMFAAAAB1BTdXBwbHkFAAAABERPV04FAAAADXRva2VuRGVjaW1hbHMFAAAAAkJrBQAAAA10b2tlbkRlY2ltYWxzBQAAAARET1dOBAAAAA1wYXltZW50QW1vdW50CQEAAAAVZ2V0VG9rZW5QYXltZW50QW1vdW50AAAAAQUAAAAHdG9rZW5JZAQAAAAIdG9SZXR1cm4JAABlAAAAAgMJAQAAAAIhPQAAAAIFAAAADXBheW1lbnRBbW91bnQAAAAAAAAAAAAFAAAADXBheW1lbnRBbW91bnQAAAAAAAAAAAAFAAAAAkRrCQAETgAAAAIFAAAABWFjY3VtCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAC3VzZXJBZGRyZXNzBQAAAAh0b1JldHVybgUAAAAHdG9rZW5JZAUAAAADbmlsCQAETgAAAAIKAAAAAAIkbAUAAAAIYXNzZXRJZHMKAAAAAAIkcwkAAZAAAAABBQAAAAIkbAoAAAAABSRhY2MwBQAAAANuaWwKAQAAAAExAAAAAgAAAAIkYQAAAAIkaQMJAABnAAAAAgUAAAACJGkFAAAAAiRzBQAAAAIkYQkBAAAAEWhhbmRsZVRva2VuQ2hhbmdlAAAAAgUAAAACJGEJAAGRAAAAAgUAAAACJGwFAAAAAiRpCgEAAAABMgAAAAIAAAACJGEAAAACJGkDCQAAZwAAAAIFAAAAAiRpBQAAAAIkcwUAAAACJGEJAAACAAAAAQIAAAAUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQAAAAEyAAAAAgkBAAAAATEAAAACCQEAAAABMQAAAAIJAQAAAAExAAAAAgkBAAAAATEAAAACCQEAAAABMQAAAAIJAQAAAAExAAAAAgkBAAAAATEAAAACCQEAAAABMQAAAAIJAQAAAAExAAAAAgkBAAAAATEAAAACBQAAAAUkYWNjMAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAgAAAAAAAAAAAwAAAAAAAAAABAAAAAAAAAAABQAAAAAAAAAABgAAAAAAAAAABwAAAAAAAAAACAAAAAAAAAAACQAAAAAAAAAACgoAAAAAAiRsBQAAAAhhc3NldElkcwoAAAAAAiRzCQABkAAAAAEFAAAAAiRsCgAAAAAFJGFjYzAFAAAAA25pbAoBAAAAATEAAAACAAAAAiRhAAAAAiRpAwkAAGcAAAACBQAAAAIkaQUAAAACJHMFAAAAAiRhCQEAAAASaGFuZGxlVG9rZW5DaGFuZ2UyAAAAAgUAAAACJGEJAAGRAAAAAgUAAAACJGwFAAAAAiRpCgEAAAABMgAAAAIAAAACJGEAAAACJGkDCQAAZwAAAAIFAAAAAiRpBQAAAAIkcwUAAAACJGEJAAACAAAAAQIAAAAUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQAAAAEyAAAAAgkBAAAAATEAAAACCQEAAAABMQAAAAIJAQAAAAExAAAAAgkBAAAAATEAAAACCQEAAAABMQAAAAIJAQAAAAExAAAAAgkBAAAAATEAAAACCQEAAAABMQAAAAIJAQAAAAExAAAAAgkBAAAAATEAAAACBQAAAAUkYWNjMAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAgAAAAAAAAAAAwAAAAAAAAAABAAAAAAAAAAABQAAAAAAAAAABgAAAAAAAAAABwAAAAAAAAAACAAAAAAAAAAACQAAAAAAAAAACgEAAAAWaGFuZGxlUG9vbFRva2Vuc1JlZGVlbQAAAAIAAAAJUFJlZGVlbWVkAAAAC3VzZXJBZGRyZXNzCgEAAAARaGFuZGxlVG9rZW5SZWRlZW0AAAACAAAABWFjY3VtAAAAB3Rva2VuSWQEAAAAAkJrCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAdnbG9iYWxfCQACWAAAAAEFAAAAB3Rva2VuSWQCAAAACF9iYWxhbmNlBAAAAAdQU3VwcGx5CQEAAAANdHJ5R2V0SW50ZWdlcgAAAAECAAAAF2dsb2JhbF9wb29sVG9rZW5fYW1vdW50BAAAAA10b2tlbkRlY2ltYWxzCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAdzdGF0aWNfCQACWAAAAAEFAAAAB3Rva2VuSWQCAAAABl9zY2FsZQQAAAAGYW1vdW50CQEAAAAIZnJhY3Rpb24AAAAECQAAZQAAAAIFAAAADXRva2VuRGVjaW1hbHMJAQAAAAhmcmFjdGlvbgAAAAQJAABlAAAAAgUAAAAHUFN1cHBseQUAAAAJUFJlZGVlbWVkBQAAAA10b2tlbkRlY2ltYWxzBQAAAAdQU3VwcGx5BQAAAARET1dOBQAAAAJCawUAAAANdG9rZW5EZWNpbWFscwUAAAAERE9XTgkABE4AAAACBQAAAAVhY2N1bQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAICAAAAB2dsb2JhbF8JAAJYAAAAAQUAAAAHdG9rZW5JZAIAAAAIX2JhbGFuY2UJAABlAAAAAgUAAAACQmsFAAAABmFtb3VudAUAAAADbmlsCgEAAAASaGFuZGxlVG9rZW5SZWRlZW0yAAAAAgAAAAVhY2N1bQAAAAd0b2tlbklkBAAAAAJCawkBAAAADXRyeUdldEludGVnZXIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAHZ2xvYmFsXwkAAlgAAAABBQAAAAd0b2tlbklkAgAAAAhfYmFsYW5jZQQAAAAHUFN1cHBseQkBAAAADXRyeUdldEludGVnZXIAAAABAgAAABdnbG9iYWxfcG9vbFRva2VuX2Ftb3VudAQAAAANdG9rZW5EZWNpbWFscwkBAAAADXRyeUdldEludGVnZXIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAHc3RhdGljXwkAAlgAAAABBQAAAAd0b2tlbklkAgAAAAZfc2NhbGUEAAAABmFtb3VudAkBAAAACGZyYWN0aW9uAAAABAkAAGUAAAACBQAAAA10b2tlbkRlY2ltYWxzCQEAAAAIZnJhY3Rpb24AAAAECQAAZQAAAAIFAAAAB1BTdXBwbHkFAAAACVBSZWRlZW1lZAUAAAANdG9rZW5EZWNpbWFscwUAAAAHUFN1cHBseQUAAAAERE9XTgUAAAACQmsFAAAADXRva2VuRGVjaW1hbHMFAAAABERPV04JAAROAAAAAgUAAAAFYWNjdW0JAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAALdXNlckFkZHJlc3MFAAAABmFtb3VudAUAAAAHdG9rZW5JZAUAAAADbmlsCQAETgAAAAIKAAAAAAIkbAUAAAAIYXNzZXRJZHMKAAAAAAIkcwkAAZAAAAABBQAAAAIkbAoAAAAABSRhY2MwBQAAAANuaWwKAQAAAAExAAAAAgAAAAIkYQAAAAIkaQMJAABnAAAAAgUAAAACJGkFAAAAAiRzBQAAAAIkYQkBAAAAEWhhbmRsZVRva2VuUmVkZWVtAAAAAgUAAAACJGEJAAGRAAAAAgUAAAACJGwFAAAAAiRpCgEAAAABMgAAAAIAAAACJGEAAAACJGkDCQAAZwAAAAIFAAAAAiRpBQAAAAIkcwUAAAACJGEJAAACAAAAAQIAAAAUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQAAAAEyAAAAAgkBAAAAATEAAAACCQEAAAABMQAAAAIJAQAAAAExAAAAAgkBAAAAATEAAAACCQEAAAABMQAAAAIJAQAAAAExAAAAAgkBAAAAATEAAAACCQEAAAABMQAAAAIJAQAAAAExAAAAAgkBAAAAATEAAAACBQAAAAUkYWNjMAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAgAAAAAAAAAAAwAAAAAAAAAABAAAAAAAAAAABQAAAAAAAAAABgAAAAAAAAAABwAAAAAAAAAACAAAAAAAAAAACQAAAAAAAAAACgoAAAAAAiRsBQAAAAhhc3NldElkcwoAAAAAAiRzCQABkAAAAAEFAAAAAiRsCgAAAAAFJGFjYzAFAAAAA25pbAoBAAAAATEAAAACAAAAAiRhAAAAAiRpAwkAAGcAAAACBQAAAAIkaQUAAAACJHMFAAAAAiRhCQEAAAASaGFuZGxlVG9rZW5SZWRlZW0yAAAAAgUAAAACJGEJAAGRAAAAAgUAAAACJGwFAAAAAiRpCgEAAAABMgAAAAIAAAACJGEAAAACJGkDCQAAZwAAAAIFAAAAAiRpBQAAAAIkcwUAAAACJGEJAAACAAAAAQIAAAAUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQAAAAEyAAAAAgkBAAAAATEAAAACCQEAAAABMQAAAAIJAQAAAAExAAAAAgkBAAAAATEAAAACCQEAAAABMQAAAAIJAQAAAAExAAAAAgkBAAAAATEAAAACCQEAAAABMQAAAAIJAQAAAAExAAAAAgkBAAAAATEAAAACBQAAAAUkYWNjMAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAgAAAAAAAAAAAwAAAAAAAAAABAAAAAAAAAAABQAAAAAAAAAABgAAAAAAAAAABwAAAAAAAAAACAAAAAAAAAAACQAAAAAAAAAACgEAAAASY2FsY3VsYXRlT3V0QW1vdW50AAAAAwAAAAhBbW91bnRJbgAAAAdhc3NldEluAAAACGFzc2V0T3V0BAAAAAdJbmRleEluCQEAAAAFdmFsdWUAAAABCQAETwAAAAIFAAAACGFzc2V0SWRzBQAAAAdhc3NldEluBAAAAAhJbmRleE91dAkBAAAABXZhbHVlAAAAAQkABE8AAAACBQAAAAhhc3NldElkcwUAAAAIYXNzZXRPdXQDCQAAAAAAAAIFAAAAB0luZGV4SW4FAAAACEluZGV4T3V0CQAAAgAAAAECAAAAEmluYWxpZCB0b2tlbnMgcGFpcgQAAAAJQmFsYW5jZUluCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAdnbG9iYWxfCQACWAAAAAEFAAAAB2Fzc2V0SW4CAAAACF9iYWxhbmNlBAAAAApCYWxhbmNlT3V0CQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAdnbG9iYWxfCQACWAAAAAEFAAAACGFzc2V0T3V0AgAAAAhfYmFsYW5jZQkBAAAACGZyYWN0aW9uAAAABAUAAAAKQmFsYW5jZU91dAkAAGUAAAACCQABkQAAAAIFAAAABlNjYWxlcwUAAAAISW5kZXhPdXQJAABsAAAABgkAAGkAAAACCQAAaAAAAAIFAAAACUJhbGFuY2VJbgkAAZEAAAACBQAAAAZTY2FsZXMFAAAAB0luZGV4SW4JAABkAAAAAgUAAAAJQmFsYW5jZUluBQAAAAhBbW91bnRJbgkAAZEAAAACBQAAAAhEZWNpbWFscwUAAAAHSW5kZXhJbgkAAGsAAAADCQABkQAAAAIFAAAADUFzc2V0c1dlaWdodHMFAAAAB0luZGV4SW4AAAAAAAAAJxAJAAGRAAAAAgUAAAANQXNzZXRzV2VpZ2h0cwUAAAAISW5kZXhPdXQAAAAAAAAAAAQJAAGRAAAAAgUAAAAIRGVjaW1hbHMFAAAACEluZGV4T3V0BQAAAAVGTE9PUgkAAZEAAAACBQAAAAZTY2FsZXMFAAAACEluZGV4T3V0BQAAAARET1dOAAAABgAAAAFpAQAAAAdwcmVJbml0AAAAAAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAICAAAAB3N0YXRpY18JAAJYAAAAAQkAAZEAAAACBQAAAAhhc3NldElkcwAAAAAAAAAAAAIAAAAGX3NjYWxlCQABkQAAAAIFAAAABlNjYWxlcwAAAAAAAAAAAAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAICAAAAB3N0YXRpY18JAAJYAAAAAQkAAZEAAAACBQAAAAhhc3NldElkcwAAAAAAAAAAAQIAAAAGX3NjYWxlCQABkQAAAAIFAAAABlNjYWxlcwAAAAAAAAAAAQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAICAAAAB3N0YXRpY18JAAJYAAAAAQkAAZEAAAACBQAAAAhhc3NldElkcwAAAAAAAAAAAgIAAAAGX3NjYWxlCQABkQAAAAIFAAAABlNjYWxlcwAAAAAAAAAAAgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAICAAAAB3N0YXRpY18JAAJYAAAAAQkAAZEAAAACBQAAAAhhc3NldElkcwAAAAAAAAAAAwIAAAAGX3NjYWxlCQABkQAAAAIFAAAABlNjYWxlcwAAAAAAAAAAAwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAICAAAAB3N0YXRpY18JAAJYAAAAAQkAAZEAAAACBQAAAAhhc3NldElkcwAAAAAAAAAABAIAAAAGX3NjYWxlCQABkQAAAAIFAAAABlNjYWxlcwAAAAAAAAAABAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAICAAAAB3N0YXRpY18JAAJYAAAAAQkAAZEAAAACBQAAAAhhc3NldElkcwAAAAAAAAAABQIAAAAGX3NjYWxlCQABkQAAAAIFAAAABlNjYWxlcwAAAAAAAAAABQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAICAAAAB3N0YXRpY18JAAJYAAAAAQkAAZEAAAACBQAAAAhhc3NldElkcwAAAAAAAAAABgIAAAAGX3NjYWxlCQABkQAAAAIFAAAABlNjYWxlcwAAAAAAAAAABgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAICAAAAB3N0YXRpY18JAAJYAAAAAQkAAZEAAAACBQAAAAhhc3NldElkcwAAAAAAAAAAAAIAAAAHX3dlaWdodAkAAZEAAAACBQAAAA1Bc3NldHNXZWlnaHRzAAAAAAAAAAAACQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAHc3RhdGljXwkAAlgAAAABCQABkQAAAAIFAAAACGFzc2V0SWRzAAAAAAAAAAABAgAAAAdfd2VpZ2h0CQABkQAAAAIFAAAADUFzc2V0c1dlaWdodHMAAAAAAAAAAAEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAdzdGF0aWNfCQACWAAAAAEJAAGRAAAAAgUAAAAIYXNzZXRJZHMAAAAAAAAAAAICAAAAB193ZWlnaHQJAAGRAAAAAgUAAAANQXNzZXRzV2VpZ2h0cwAAAAAAAAAAAgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAICAAAAB3N0YXRpY18JAAJYAAAAAQkAAZEAAAACBQAAAAhhc3NldElkcwAAAAAAAAAAAwIAAAAHX3dlaWdodAkAAZEAAAACBQAAAA1Bc3NldHNXZWlnaHRzAAAAAAAAAAADCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAHc3RhdGljXwkAAlgAAAABCQABkQAAAAIFAAAACGFzc2V0SWRzAAAAAAAAAAAEAgAAAAdfd2VpZ2h0CQABkQAAAAIFAAAADUFzc2V0c1dlaWdodHMAAAAAAAAAAAQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAdzdGF0aWNfCQACWAAAAAEJAAGRAAAAAgUAAAAIYXNzZXRJZHMAAAAAAAAAAAUCAAAAB193ZWlnaHQJAAGRAAAAAgUAAAANQXNzZXRzV2VpZ2h0cwAAAAAAAAAABQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAICAAAAB3N0YXRpY18JAAJYAAAAAQkAAZEAAAACBQAAAAhhc3NldElkcwAAAAAAAAAABgIAAAAHX3dlaWdodAkAAZEAAAACBQAAAA1Bc3NldHNXZWlnaHRzAAAAAAAAAAAGBQAAAANuaWwAAAABaQEAAAAGZGVpbml0AAAAAAMJAQAAAAIhPQAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAAEdGhpcwkAAAIAAAABAgAAAAphZG1pbiBvbmx5CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAABBnbG9iYWxfd2FzSW5pdGVkAAAAAAAAAAAABQAAAANuaWwAAAABaQEAAAAEaW5pdAAAAAAKAQAAAAtwcmVwYXJlTGlzdAAAAAAKAQAAAAdoYW5kbGVyAAAAAgAAAAVhY2N1bQAAAAFuCQAETgAAAAIFAAAABWFjY3VtCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAHZ2xvYmFsXwkAAlgAAAABCQEAAAAFdmFsdWUAAAABCAUAAAABbgAAAAdhc3NldElkAgAAAAhfYmFsYW5jZQgFAAAAAW4AAAAGYW1vdW50BQAAAANuaWwKAAAAAAIkbAgFAAAAAWkAAAAIcGF5bWVudHMKAAAAAAIkcwkAAZAAAAABBQAAAAIkbAoAAAAABSRhY2MwBQAAAANuaWwKAQAAAAExAAAAAgAAAAIkYQAAAAIkaQMJAABnAAAAAgUAAAACJGkFAAAAAiRzBQAAAAIkYQkBAAAAB2hhbmRsZXIAAAACBQAAAAIkYQkAAZEAAAACBQAAAAIkbAUAAAACJGkKAQAAAAEyAAAAAgAAAAIkYQAAAAIkaQMJAABnAAAAAgUAAAACJGkFAAAAAiRzBQAAAAIkYQkAAAIAAAABAgAAABRMaXN0IHNpemUgZXhjZWVkcyAxMAkBAAAAATIAAAACCQEAAAABMQAAAAIJAQAAAAExAAAAAgkBAAAAATEAAAACCQEAAAABMQAAAAIJAQAAAAExAAAAAgkBAAAAATEAAAACCQEAAAABMQAAAAIJAQAAAAExAAAAAgkBAAAAATEAAAACCQEAAAABMQAAAAIFAAAABSRhY2MwAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAACAAAAAAAAAAADAAAAAAAAAAAEAAAAAAAAAAAFAAAAAAAAAAAGAAAAAAAAAAAHAAAAAAAAAAAIAAAAAAAAAAAJAAAAAAAAAAAKCgEAAAAZY2FsY3VsYXRlUG9vbFRva2Vuc0Ftb3VudAAAAAEAAAAIcGF5bWVudHMKAQAAAAdoYW5kbGVyAAAAAgAAAAVhY2N1bQAAAANwbXQEAAAAB2Fzc2V0SWQJAQAAAAV2YWx1ZQAAAAEIBQAAAANwbXQAAAAHYXNzZXRJZAoBAAAACGhhbmRsZXIyAAAAAgAAAAVhY2N1bQAAAAFuAwkAAAAAAAACBQAAAAFuBQAAAAdhc3NldElkCQEAAAAFdmFsdWUAAAABCQAETwAAAAIFAAAACGFzc2V0SWRzBQAAAAFuBQAAAAVhY2N1bQQAAAAFVG9rZW4KAAAAAAIkbAUAAAAIYXNzZXRJZHMKAAAAAAIkcwkAAZAAAAABBQAAAAIkbAoAAAAABSRhY2MwAAAAAAAAAAABCgEAAAABMQAAAAIAAAACJGEAAAACJGkDCQAAZwAAAAIFAAAAAiRpBQAAAAIkcwUAAAACJGEJAQAAAAhoYW5kbGVyMgAAAAIFAAAAAiRhCQABkQAAAAIFAAAAAiRsBQAAAAIkaQoBAAAAATIAAAACAAAAAiRhAAAAAiRpAwkAAGcAAAACBQAAAAIkaQUAAAACJHMFAAAAAiRhCQAAAgAAAAECAAAAFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEAAAABMgAAAAIJAQAAAAExAAAAAgkBAAAAATEAAAACCQEAAAABMQAAAAIJAQAAAAExAAAAAgkBAAAAATEAAAACCQEAAAABMQAAAAIJAQAAAAExAAAAAgkBAAAAATEAAAACCQEAAAABMQAAAAIJAQAAAAExAAAAAgUAAAAFJGFjYzAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAIAAAAAAAAAAAMAAAAAAAAAAAQAAAAAAAAAAAUAAAAAAAAAAAYAAAAAAAAAAAcAAAAAAAAAAAgAAAAAAAAAAAkAAAAAAAAAAAoJAABoAAAAAgUAAAAFYWNjdW0JAABsAAAABggFAAAAA3BtdAAAAAZhbW91bnQJAAGRAAAAAgUAAAAIRGVjaW1hbHMFAAAABVRva2VuCQABkQAAAAIFAAAADUFzc2V0c1dlaWdodHMFAAAABVRva2VuBQAAABVBc3NldHNXZWlnaHRzRGVjaW1hbHMAAAAAAAAAAAEFAAAABUZMT09SCgAAAAACJGwFAAAACHBheW1lbnRzCgAAAAACJHMJAAGQAAAAAQUAAAACJGwKAAAAAAUkYWNjMAAAAAAAAAAAAQoBAAAAATEAAAACAAAAAiRhAAAAAiRpAwkAAGcAAAACBQAAAAIkaQUAAAACJHMFAAAAAiRhCQEAAAAHaGFuZGxlcgAAAAIFAAAAAiRhCQABkQAAAAIFAAAAAiRsBQAAAAIkaQoBAAAAATIAAAACAAAAAiRhAAAAAiRpAwkAAGcAAAACBQAAAAIkaQUAAAACJHMFAAAAAiRhCQAAAgAAAAECAAAAFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEAAAABMgAAAAIJAQAAAAExAAAAAgkBAAAAATEAAAACCQEAAAABMQAAAAIJAQAAAAExAAAAAgkBAAAAATEAAAACCQEAAAABMQAAAAIJAQAAAAExAAAAAgkBAAAAATEAAAACCQEAAAABMQAAAAIJAQAAAAExAAAAAgUAAAAFJGFjYzAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAIAAAAAAAAAAAMAAAAAAAAAAAQAAAAAAAAAAAUAAAAAAAAAAAYAAAAAAAAAAAcAAAAAAAAAAAgAAAAAAAAAAAkAAAAAAAAAAAoDCQAAZgAAAAIJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQIAAAAQZ2xvYmFsX3dhc0luaXRlZAAAAAAAAAAAAAkAAAIAAAABAgAAABNwb29sIGFscmVhZHkgaW5pdGVkBAAAABFpbml0aWFsUG9vbFRva2VucwkBAAAAGWNhbGN1bGF0ZVBvb2xUb2tlbnNBbW91bnQAAAABCAUAAAABaQAAAAhwYXltZW50cwQAAAAOcG9vbFRva2VuSXNzdWUJAARDAAAABwIAAAAHUHV6emxlNQIAAAAWUHV6emxlIFN3YXAgUG9vbCBUb2tlbgUAAAARaW5pdGlhbFBvb2xUb2tlbnMFAAAAEVBvb2xUb2tlbkRlY2ltYWxzBgUAAAAEdW5pdAAAAAAAAAAAAAQAAAALcG9vbFRva2VuSWQJAAQ4AAAAAQUAAAAOcG9vbFRva2VuSXNzdWUJAAROAAAAAgkBAAAAC3ByZXBhcmVMaXN0AAAAAAkABEwAAAACBQAAAA5wb29sVG9rZW5Jc3N1ZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAAXZ2xvYmFsX3Bvb2xUb2tlbl9hbW91bnQFAAAAEWluaXRpYWxQb29sVG9rZW5zCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAABBnbG9iYWxfd2FzSW5pdGVkAAAAAAAAAAABCQAETAAAAAIJAQAAAAtCaW5hcnlFbnRyeQAAAAICAAAAE2dsb2JhbF9wb29sVG9rZW5faWQFAAAAC3Bvb2xUb2tlbklkCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAARaW5pdGlhbFBvb2xUb2tlbnMFAAAAC3Bvb2xUb2tlbklkBQAAAANuaWwAAAABaQEAAAAMYWRkTGlxdWlkaXR5AAAAAAMJAQAAAAIhPQAAAAIJAAGQAAAAAQgFAAAAAWkAAAAIcGF5bWVudHMFAAAAAVQJAAACAAAAAQkAASwAAAACAgAAADt5b3UgbmVlZCB0byBhdHRhY2ggYWxsIHBvb2wgdG9rZW5zLiBhbW91bnQgb2YgcG9vbCB0b2tlbnM6IAkAAaQAAAABBQAAAAFUAwkBAAAAASEAAAABCQEAAAATY2hlY2tUb2tlbnNWYWxpZGl0eQAAAAEIBQAAAAFpAAAACHBheW1lbnRzCQAAAgAAAAECAAAAFXdyb25nIGFzc2V0cyBhdHRhY2hlZAQAAAAHUElzc3VlZAkBAAAADWdldE1pblBJc3N1ZWQAAAABCAUAAAABaQAAAAhwYXltZW50cwQAAAAGcmVzdWx0CQEAAAATaGFuZGxlUG9vbFRva2Vuc0FkZAAAAAMFAAAAB1BJc3N1ZWQIBQAAAAFpAAAACHBheW1lbnRzCAUAAAABaQAAAAZjYWxsZXIEAAAAB3JlaXNzdWUJAQAAAAdSZWlzc3VlAAAAAwkBAAAADHRyeUdldEJpbmFyeQAAAAECAAAAE2dsb2JhbF9wb29sVG9rZW5faWQFAAAAB1BJc3N1ZWQGCQAETgAAAAIFAAAABnJlc3VsdAkABEwAAAACBQAAAAdyZWlzc3VlCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAHUElzc3VlZAkBAAAADHRyeUdldEJpbmFyeQAAAAECAAAAE2dsb2JhbF9wb29sVG9rZW5faWQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAF2dsb2JhbF9wb29sVG9rZW5fYW1vdW50CQAAZAAAAAIJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQIAAAAXZ2xvYmFsX3Bvb2xUb2tlbl9hbW91bnQFAAAAB1BJc3N1ZWQFAAAAA25pbAAAAAFpAQAAAA9yZW1vdmVMaXF1aWRpdHkAAAAABAAAAANwbXQJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAADCQEAAAACIT0AAAACCAUAAAADcG10AAAAB2Fzc2V0SWQJAQAAAAx0cnlHZXRCaW5hcnkAAAABAgAAABNnbG9iYWxfcG9vbFRva2VuX2lkCQAAAgAAAAECAAAAHnBsZWFzZSBhdHRhY2ggcG9vbCBzaGFyZSB0b2tlbgQAAAAJUFJlZGVlbWVkCAUAAAADcG10AAAABmFtb3VudAQAAAAGcmVzdWx0CQEAAAAWaGFuZGxlUG9vbFRva2Vuc1JlZGVlbQAAAAIFAAAACVBSZWRlZW1lZAgFAAAAAWkAAAAGY2FsbGVyCQAETgAAAAIFAAAABnJlc3VsdAkABEwAAAACCQEAAAAEQnVybgAAAAIJAQAAAAx0cnlHZXRCaW5hcnkAAAABAgAAABNnbG9iYWxfcG9vbFRva2VuX2lkBQAAAAlQUmVkZWVtZWQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAF2dsb2JhbF9wb29sVG9rZW5fYW1vdW50CQAAZQAAAAIJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQIAAAAXZ2xvYmFsX3Bvb2xUb2tlbl9hbW91bnQFAAAACVBSZWRlZW1lZAUAAAADbmlsAAAAAWkBAAAABHN3YXAAAAACAAAACGFzc2V0T3V0AAAAB21pbmltdW0EAAAAA3BtdAkBAAAABXZhbHVlAAAAAQkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAQAAAAIQW1vdW50SW4JAQAAAAV2YWx1ZQAAAAEICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAABmFtb3VudAQAAAAHQXNzZXRJbgkBAAAABXZhbHVlAAAAAQgFAAAAA3BtdAAAAAdhc3NldElkBAAAAAhBc3NldE91dAkAAlkAAAABBQAAAAhhc3NldE91dAQAAAAJQW1vdW50T3V0CQEAAAASY2FsY3VsYXRlT3V0QW1vdW50AAAAAwUAAAAIQW1vdW50SW4FAAAAB0Fzc2V0SW4FAAAACEFzc2V0T3V0AwkAAGYAAAACBQAAAAdtaW5pbXVtBQAAAAlBbW91bnRPdXQJAAACAAAAAQkAASwAAAACAgAAACthbW91bnQgdG8gcmVjaWV2ZSBpdCBsb3dlciB0aGFuIGdpdmVuIG9uZTogCQABpAAAAAEFAAAACUFtb3VudE91dAMJAABmAAAAAgkAAGkAAAACCQABkQAAAAIFAAAABlNjYWxlcwkBAAAABXZhbHVlAAAAAQkABE8AAAACBQAAAAhhc3NldElkcwUAAAAHQXNzZXRJbgAAAAAAAAAnEAUAAAAIQW1vdW50SW4JAAACAAAAAQIAAAAcc3VtIHRvIGV4Y2hhbmdlIGlzIHRvbyBzbWFsbAMJAABmAAAAAgAAAAAAAAAAAAkAAGUAAAACCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAdnbG9iYWxfCQACWAAAAAEFAAAACEFzc2V0T3V0AgAAAAhfYmFsYW5jZQUAAAAJQW1vdW50T3V0CQAAAgAAAAECAAAAG2NvbnRyYWN0IGlzIG91dCBvZiByZXNlcnZlcwQAAAAJZmVlQW1vdW50CQAAawAAAAMFAAAACUFtb3VudE91dAUAAAADRmVlBQAAAAhGZWVTY2FsZQQAAAAOY2xlYW5BbW91bnRPdXQJAABlAAAAAgUAAAAJQW1vdW50T3V0BQAAAAlmZWVBbW91bnQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAANZmVlQWdncmVnYXRvcgUAAAAJZmVlQW1vdW50BQAAAAhBc3NldE91dAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAICAAAAB2dsb2JhbF8JAAJYAAAAAQUAAAAIQXNzZXRPdXQCAAAACF9iYWxhbmNlCQAAZQAAAAIJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkAASwAAAACCQABLAAAAAICAAAAB2dsb2JhbF8JAAJYAAAAAQUAAAAIQXNzZXRPdXQCAAAACF9iYWxhbmNlBQAAAAlBbW91bnRPdXQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAdnbG9iYWxfCQACWAAAAAEFAAAAB0Fzc2V0SW4CAAAACF9iYWxhbmNlCQAAZAAAAAIJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkAASwAAAACCQABLAAAAAICAAAAB2dsb2JhbF8JAAJYAAAAAQUAAAAHQXNzZXRJbgIAAAAIX2JhbGFuY2UFAAAACEFtb3VudEluCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAOY2xlYW5BbW91bnRPdXQFAAAACEFzc2V0T3V0BQAAAANuaWwAAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAACQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAgFAAAAAnR4AAAAD3NlbmRlclB1YmxpY0tleZTsuXU=", "height": 2829882, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 8XKDMAUDmQAD63Mo3x5n1hTLQh4VLUkdaLuG7hU9XWVV Next: BstwgKGDZPoGmFSD8djGETyk2hxQWpCqHEjZHywFM5pb Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let T = 7
4+let T = 9
55
6-let assetIds = [base58'5HGPPLj58XUx3ryMgkASJoqYq33zwBbTMf1CGxfKw6jp', base58'yDf4UTg4DS75sCNP7oC1HraTN4KHtqmd6WueTid4PF1', base58'2R57nL7ftpuwbgdprcmAeA9i7ykLH6A4wzLkZHWPiHKc', base58'CE5cxMvz7865CyFZPFUmDiL4KRkYXP6b6oYgN3vmWdV5', base58'5m5stLsMZSPomwxTTjJGMMEnjMafRMfap5vZyaLwgMKD', base58'CE5cxMvz7865CyFZPFUmDiL4KRkYXP6b6oYgN3vmWdV5', base58'5m5stLsMZSPomwxTTjJGMMEnjMafRMfap5vZyaLwgMKD', base58'C1iWsKGqLwjHUndiQ7iXpdmPum9PeCDFfyXBdJJosDRS', base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p']
6+let assetIds = [base58'5HGPPLj58XUx3ryMgkASJoqYq33zwBbTMf1CGxfKw6jp', base58'yDf4UTg4DS75sCNP7oC1HraTN4KHtqmd6WueTid4PF1', base58'2R57nL7ftpuwbgdprcmAeA9i7ykLH6A4wzLkZHWPiHKc', base58'CE5cxMvz7865CyFZPFUmDiL4KRkYXP6b6oYgN3vmWdV5', base58'5m5stLsMZSPomwxTTjJGMMEnjMafRMfap5vZyaLwgMKD', base58'46PdJcKzDuYfzLuLNjffM3F8jR8hL357V9AdGK2xN3kx', base58'ESaD2AREvgk7o4C9eQkZ8Nmau9BSHqgTK5ymHV36xocy', base58'C1iWsKGqLwjHUndiQ7iXpdmPum9PeCDFfyXBdJJosDRS', base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p']
77
88 let AssetsWeights = [10, 10, 10, 10, 10, 10, 10, 20, 10]
99
328328 then throw("pool already inited")
329329 else {
330330 let initialPoolTokens = calculatePoolTokensAmount(i.payments)
331- let poolTokenIssue = Issue("Puzzle4", "Puzzle Swap Pool Token", initialPoolTokens, PoolTokenDecimals, true, unit, 0)
331+ let poolTokenIssue = Issue("Puzzle5", "Puzzle Swap Pool Token", initialPoolTokens, PoolTokenDecimals, true, unit, 0)
332332 let poolTokenId = calculateAssetId(poolTokenIssue)
333333 (prepareList() ++ [poolTokenIssue, IntegerEntry("global_poolToken_amount", initialPoolTokens), IntegerEntry("global_wasInited", 1), BinaryEntry("global_poolToken_id", poolTokenId), ScriptTransfer(i.caller, initialPoolTokens, poolTokenId)])
334334 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let T = 7
4+let T = 9
55
6-let assetIds = [base58'5HGPPLj58XUx3ryMgkASJoqYq33zwBbTMf1CGxfKw6jp', base58'yDf4UTg4DS75sCNP7oC1HraTN4KHtqmd6WueTid4PF1', base58'2R57nL7ftpuwbgdprcmAeA9i7ykLH6A4wzLkZHWPiHKc', base58'CE5cxMvz7865CyFZPFUmDiL4KRkYXP6b6oYgN3vmWdV5', base58'5m5stLsMZSPomwxTTjJGMMEnjMafRMfap5vZyaLwgMKD', base58'CE5cxMvz7865CyFZPFUmDiL4KRkYXP6b6oYgN3vmWdV5', base58'5m5stLsMZSPomwxTTjJGMMEnjMafRMfap5vZyaLwgMKD', base58'C1iWsKGqLwjHUndiQ7iXpdmPum9PeCDFfyXBdJJosDRS', base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p']
6+let assetIds = [base58'5HGPPLj58XUx3ryMgkASJoqYq33zwBbTMf1CGxfKw6jp', base58'yDf4UTg4DS75sCNP7oC1HraTN4KHtqmd6WueTid4PF1', base58'2R57nL7ftpuwbgdprcmAeA9i7ykLH6A4wzLkZHWPiHKc', base58'CE5cxMvz7865CyFZPFUmDiL4KRkYXP6b6oYgN3vmWdV5', base58'5m5stLsMZSPomwxTTjJGMMEnjMafRMfap5vZyaLwgMKD', base58'46PdJcKzDuYfzLuLNjffM3F8jR8hL357V9AdGK2xN3kx', base58'ESaD2AREvgk7o4C9eQkZ8Nmau9BSHqgTK5ymHV36xocy', base58'C1iWsKGqLwjHUndiQ7iXpdmPum9PeCDFfyXBdJJosDRS', base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p']
77
88 let AssetsWeights = [10, 10, 10, 10, 10, 10, 10, 20, 10]
99
1010 let AssetsWeightsDecimals = 2
1111
1212 let PoolTokenDecimals = 0
1313
1414 let Decimals = [8, 8, 8, 8, 8, 8, 8, 8, 6]
1515
1616 let Scales = [100000000, 100000000, 100000000, 100000000, 100000000, 100000000, 100000000, 100000000, 1000000]
1717
1818 let Fee = 200
1919
2020 let Scale = 10000
2121
2222 let FeeScale = 10000
2323
2424 let feeAggregator = Address(base58'3PBmAwjkwsM83KQhjSMNZvgdFeYeLz9tdBD')
2525
2626 func tryGetInteger (key) = match getInteger(this, key) {
2727 case b: Int =>
2828 b
2929 case _ =>
3030 0
3131 }
3232
3333
3434 func tryGetBinary (key) = match getBinary(this, key) {
3535 case b: ByteVector =>
3636 b
3737 case _ =>
3838 base58''
3939 }
4040
4141
4242 func getCurrentTokenBalance (tokenType) = {
4343 let tokenId = toBase58String(assetIds[tokenType])
4444 tryGetInteger((("global_" + tokenId) + "_balance"))
4545 }
4646
4747
4848 func calculatePIssued (amount,tokenId) = {
4949 let Psupply = tryGetInteger("global_poolToken_amount")
5050 let Balance = tryGetInteger((("global_" + toBase58String(tokenId)) + "_balance"))
5151 fraction(amount, Psupply, Balance, DOWN)
5252 }
5353
5454
5555 func getMinPIssued (payments) = {
5656 func handler (accum,current) = {
5757 let PIssued = calculatePIssued(current.amount, value(current.assetId))
5858 if (if ((accum == 0))
5959 then true
6060 else (accum > PIssued))
6161 then PIssued
6262 else accum
6363 }
6464
6565 let minPIssed = {
6666 let $l = payments
6767 let $s = size($l)
6868 let $acc0 = 0
6969 func 1 ($a,$i) = if (($i >= $s))
7070 then $a
7171 else handler($a, $l[$i])
7272
7373 func 2 ($a,$i) = if (($i >= $s))
7474 then $a
7575 else throw("List size exceeds 10")
7676
7777 2(1(1(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
7878 }
7979 minPIssed
8080 }
8181
8282
8383 func checkTokensValidity (payments) = {
8484 func handler1 (accum,payment) = (accum ++ [value(payment.assetId)])
8585
8686 let ids = {
8787 let $l = payments
8888 let $s = size($l)
8989 let $acc0 = nil
9090 func 1 ($a,$i) = if (($i >= $s))
9191 then $a
9292 else handler1($a, $l[$i])
9393
9494 func 2 ($a,$i) = if (($i >= $s))
9595 then $a
9696 else throw("List size exceeds 10")
9797
9898 2(1(1(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
9999 }
100100 if ((ids == ids))
101101 then {
102102 func handler2 (accum,assetId) = if ((indexOf(ids, assetId) != unit))
103103 then (accum + 1)
104104 else throw(("asset not attached: " + toBase58String(assetId)))
105105
106106 let checks = {
107107 let $l = assetIds
108108 let $s = size($l)
109109 let $acc0 = 0
110110 func 1 ($a,$i) = if (($i >= $s))
111111 then $a
112112 else handler2($a, $l[$i])
113113
114114 func 2 ($a,$i) = if (($i >= $s))
115115 then $a
116116 else throw("List size exceeds 10")
117117
118118 2(1(1(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
119119 }
120120 if ((checks == checks))
121121 then true
122122 else throw("Strict value is not equal to itself.")
123123 }
124124 else throw("Strict value is not equal to itself.")
125125 }
126126
127127
128128 func handlePoolTokensAdd (PIssued,payments,userAddress) = {
129129 func getTokenPaymentAmount (tokenId) = {
130130 func handler (accum,payment) = if ((payment.assetId == tokenId))
131131 then payment.amount
132132 else accum
133133
134134 let $l = payments
135135 let $s = size($l)
136136 let $acc0 = 0
137137 func 1 ($a,$i) = if (($i >= $s))
138138 then $a
139139 else handler($a, $l[$i])
140140
141141 func 2 ($a,$i) = if (($i >= $s))
142142 then $a
143143 else throw("List size exceeds 10")
144144
145145 2(1(1(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
146146 }
147147
148148 func handleTokenChange (accum,tokenId) = {
149149 let Bk = tryGetInteger((("global_" + toBase58String(tokenId)) + "_balance"))
150150 let PSupply = tryGetInteger("global_poolToken_amount")
151151 let tokenDecimals = tryGetInteger((("static_" + toBase58String(tokenId)) + "_scale"))
152152 let Dk = fraction((fraction((PSupply + PIssued), tokenDecimals, PSupply, DOWN) - tokenDecimals), Bk, tokenDecimals, DOWN)
153153 (accum ++ [IntegerEntry((("global_" + toBase58String(tokenId)) + "_balance"), (Bk + Dk))])
154154 }
155155
156156 func handleTokenChange2 (accum,tokenId) = {
157157 let Bk = tryGetInteger((("global_" + toBase58String(tokenId)) + "_balance"))
158158 let PSupply = tryGetInteger("global_poolToken_amount")
159159 let tokenDecimals = tryGetInteger((("static_" + toBase58String(tokenId)) + "_scale"))
160160 let Dk = fraction((fraction((PSupply + PIssued), tokenDecimals, PSupply, DOWN) - tokenDecimals), Bk, tokenDecimals, DOWN)
161161 let paymentAmount = getTokenPaymentAmount(tokenId)
162162 let toReturn = ((if ((paymentAmount != 0))
163163 then paymentAmount
164164 else 0) - Dk)
165165 (accum ++ [ScriptTransfer(userAddress, toReturn, tokenId)])
166166 }
167167
168168 ({
169169 let $l = assetIds
170170 let $s = size($l)
171171 let $acc0 = nil
172172 func 1 ($a,$i) = if (($i >= $s))
173173 then $a
174174 else handleTokenChange($a, $l[$i])
175175
176176 func 2 ($a,$i) = if (($i >= $s))
177177 then $a
178178 else throw("List size exceeds 10")
179179
180180 2(1(1(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
181181 } ++ {
182182 let $l = assetIds
183183 let $s = size($l)
184184 let $acc0 = nil
185185 func 1 ($a,$i) = if (($i >= $s))
186186 then $a
187187 else handleTokenChange2($a, $l[$i])
188188
189189 func 2 ($a,$i) = if (($i >= $s))
190190 then $a
191191 else throw("List size exceeds 10")
192192
193193 2(1(1(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
194194 })
195195 }
196196
197197
198198 func handlePoolTokensRedeem (PRedeemed,userAddress) = {
199199 func handleTokenRedeem (accum,tokenId) = {
200200 let Bk = tryGetInteger((("global_" + toBase58String(tokenId)) + "_balance"))
201201 let PSupply = tryGetInteger("global_poolToken_amount")
202202 let tokenDecimals = tryGetInteger((("static_" + toBase58String(tokenId)) + "_scale"))
203203 let amount = fraction((tokenDecimals - fraction((PSupply - PRedeemed), tokenDecimals, PSupply, DOWN)), Bk, tokenDecimals, DOWN)
204204 (accum ++ [IntegerEntry((("global_" + toBase58String(tokenId)) + "_balance"), (Bk - amount))])
205205 }
206206
207207 func handleTokenRedeem2 (accum,tokenId) = {
208208 let Bk = tryGetInteger((("global_" + toBase58String(tokenId)) + "_balance"))
209209 let PSupply = tryGetInteger("global_poolToken_amount")
210210 let tokenDecimals = tryGetInteger((("static_" + toBase58String(tokenId)) + "_scale"))
211211 let amount = fraction((tokenDecimals - fraction((PSupply - PRedeemed), tokenDecimals, PSupply, DOWN)), Bk, tokenDecimals, DOWN)
212212 (accum ++ [ScriptTransfer(userAddress, amount, tokenId)])
213213 }
214214
215215 ({
216216 let $l = assetIds
217217 let $s = size($l)
218218 let $acc0 = nil
219219 func 1 ($a,$i) = if (($i >= $s))
220220 then $a
221221 else handleTokenRedeem($a, $l[$i])
222222
223223 func 2 ($a,$i) = if (($i >= $s))
224224 then $a
225225 else throw("List size exceeds 10")
226226
227227 2(1(1(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
228228 } ++ {
229229 let $l = assetIds
230230 let $s = size($l)
231231 let $acc0 = nil
232232 func 1 ($a,$i) = if (($i >= $s))
233233 then $a
234234 else handleTokenRedeem2($a, $l[$i])
235235
236236 func 2 ($a,$i) = if (($i >= $s))
237237 then $a
238238 else throw("List size exceeds 10")
239239
240240 2(1(1(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
241241 })
242242 }
243243
244244
245245 func calculateOutAmount (AmountIn,assetIn,assetOut) = {
246246 let IndexIn = value(indexOf(assetIds, assetIn))
247247 let IndexOut = value(indexOf(assetIds, assetOut))
248248 if ((IndexIn == IndexOut))
249249 then throw("inalid tokens pair")
250250 else {
251251 let BalanceIn = tryGetInteger((("global_" + toBase58String(assetIn)) + "_balance"))
252252 let BalanceOut = tryGetInteger((("global_" + toBase58String(assetOut)) + "_balance"))
253253 fraction(BalanceOut, (Scales[IndexOut] - pow(((BalanceIn * Scales[IndexIn]) / (BalanceIn + AmountIn)), Decimals[IndexIn], fraction(AssetsWeights[IndexIn], 10000, AssetsWeights[IndexOut]), 4, Decimals[IndexOut], FLOOR)), Scales[IndexOut], DOWN)
254254 }
255255 }
256256
257257
258258 @Callable(i)
259259 func preInit () = [IntegerEntry((("static_" + toBase58String(assetIds[0])) + "_scale"), Scales[0]), IntegerEntry((("static_" + toBase58String(assetIds[1])) + "_scale"), Scales[1]), IntegerEntry((("static_" + toBase58String(assetIds[2])) + "_scale"), Scales[2]), IntegerEntry((("static_" + toBase58String(assetIds[3])) + "_scale"), Scales[3]), IntegerEntry((("static_" + toBase58String(assetIds[4])) + "_scale"), Scales[4]), IntegerEntry((("static_" + toBase58String(assetIds[5])) + "_scale"), Scales[5]), IntegerEntry((("static_" + toBase58String(assetIds[6])) + "_scale"), Scales[6]), IntegerEntry((("static_" + toBase58String(assetIds[0])) + "_weight"), AssetsWeights[0]), IntegerEntry((("static_" + toBase58String(assetIds[1])) + "_weight"), AssetsWeights[1]), IntegerEntry((("static_" + toBase58String(assetIds[2])) + "_weight"), AssetsWeights[2]), IntegerEntry((("static_" + toBase58String(assetIds[3])) + "_weight"), AssetsWeights[3]), IntegerEntry((("static_" + toBase58String(assetIds[4])) + "_weight"), AssetsWeights[4]), IntegerEntry((("static_" + toBase58String(assetIds[5])) + "_weight"), AssetsWeights[5]), IntegerEntry((("static_" + toBase58String(assetIds[6])) + "_weight"), AssetsWeights[6])]
260260
261261
262262
263263 @Callable(i)
264264 func deinit () = if ((i.caller != this))
265265 then throw("admin only")
266266 else [IntegerEntry("global_wasInited", 0)]
267267
268268
269269
270270 @Callable(i)
271271 func init () = {
272272 func prepareList () = {
273273 func handler (accum,n) = (accum ++ [IntegerEntry((("global_" + toBase58String(value(n.assetId))) + "_balance"), n.amount)])
274274
275275 let $l = i.payments
276276 let $s = size($l)
277277 let $acc0 = nil
278278 func 1 ($a,$i) = if (($i >= $s))
279279 then $a
280280 else handler($a, $l[$i])
281281
282282 func 2 ($a,$i) = if (($i >= $s))
283283 then $a
284284 else throw("List size exceeds 10")
285285
286286 2(1(1(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
287287 }
288288
289289 func calculatePoolTokensAmount (payments) = {
290290 func handler (accum,pmt) = {
291291 let assetId = value(pmt.assetId)
292292 func handler2 (accum,n) = if ((n == assetId))
293293 then value(indexOf(assetIds, n))
294294 else accum
295295
296296 let Token = {
297297 let $l = assetIds
298298 let $s = size($l)
299299 let $acc0 = 1
300300 func 1 ($a,$i) = if (($i >= $s))
301301 then $a
302302 else handler2($a, $l[$i])
303303
304304 func 2 ($a,$i) = if (($i >= $s))
305305 then $a
306306 else throw("List size exceeds 10")
307307
308308 2(1(1(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
309309 }
310310 (accum * pow(pmt.amount, Decimals[Token], AssetsWeights[Token], AssetsWeightsDecimals, 1, FLOOR))
311311 }
312312
313313 let $l = payments
314314 let $s = size($l)
315315 let $acc0 = 1
316316 func 1 ($a,$i) = if (($i >= $s))
317317 then $a
318318 else handler($a, $l[$i])
319319
320320 func 2 ($a,$i) = if (($i >= $s))
321321 then $a
322322 else throw("List size exceeds 10")
323323
324324 2(1(1(1(1(1(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
325325 }
326326
327327 if ((tryGetInteger("global_wasInited") > 0))
328328 then throw("pool already inited")
329329 else {
330330 let initialPoolTokens = calculatePoolTokensAmount(i.payments)
331- let poolTokenIssue = Issue("Puzzle4", "Puzzle Swap Pool Token", initialPoolTokens, PoolTokenDecimals, true, unit, 0)
331+ let poolTokenIssue = Issue("Puzzle5", "Puzzle Swap Pool Token", initialPoolTokens, PoolTokenDecimals, true, unit, 0)
332332 let poolTokenId = calculateAssetId(poolTokenIssue)
333333 (prepareList() ++ [poolTokenIssue, IntegerEntry("global_poolToken_amount", initialPoolTokens), IntegerEntry("global_wasInited", 1), BinaryEntry("global_poolToken_id", poolTokenId), ScriptTransfer(i.caller, initialPoolTokens, poolTokenId)])
334334 }
335335 }
336336
337337
338338
339339 @Callable(i)
340340 func addLiquidity () = if ((size(i.payments) != T))
341341 then throw(("you need to attach all pool tokens. amount of pool tokens: " + toString(T)))
342342 else if (!(checkTokensValidity(i.payments)))
343343 then throw("wrong assets attached")
344344 else {
345345 let PIssued = getMinPIssued(i.payments)
346346 let result = handlePoolTokensAdd(PIssued, i.payments, i.caller)
347347 let reissue = Reissue(tryGetBinary("global_poolToken_id"), PIssued, true)
348348 (result ++ [reissue, ScriptTransfer(i.caller, PIssued, tryGetBinary("global_poolToken_id")), IntegerEntry("global_poolToken_amount", (tryGetInteger("global_poolToken_amount") + PIssued))])
349349 }
350350
351351
352352
353353 @Callable(i)
354354 func removeLiquidity () = {
355355 let pmt = i.payments[0]
356356 if ((pmt.assetId != tryGetBinary("global_poolToken_id")))
357357 then throw("please attach pool share token")
358358 else {
359359 let PRedeemed = pmt.amount
360360 let result = handlePoolTokensRedeem(PRedeemed, i.caller)
361361 (result ++ [Burn(tryGetBinary("global_poolToken_id"), PRedeemed), IntegerEntry("global_poolToken_amount", (tryGetInteger("global_poolToken_amount") - PRedeemed))])
362362 }
363363 }
364364
365365
366366
367367 @Callable(i)
368368 func swap (assetOut,minimum) = {
369369 let pmt = value(i.payments[0])
370370 let AmountIn = value(i.payments[0].amount)
371371 let AssetIn = value(pmt.assetId)
372372 let AssetOut = fromBase58String(assetOut)
373373 let AmountOut = calculateOutAmount(AmountIn, AssetIn, AssetOut)
374374 if ((minimum > AmountOut))
375375 then throw(("amount to recieve it lower than given one: " + toString(AmountOut)))
376376 else if (((Scales[value(indexOf(assetIds, AssetIn))] / 10000) > AmountIn))
377377 then throw("sum to exchange is too small")
378378 else if ((0 > (tryGetInteger((("global_" + toBase58String(AssetOut)) + "_balance")) - AmountOut)))
379379 then throw("contract is out of reserves")
380380 else {
381381 let feeAmount = fraction(AmountOut, Fee, FeeScale)
382382 let cleanAmountOut = (AmountOut - feeAmount)
383383 [ScriptTransfer(feeAggregator, feeAmount, AssetOut), IntegerEntry((("global_" + toBase58String(AssetOut)) + "_balance"), (tryGetInteger((("global_" + toBase58String(AssetOut)) + "_balance")) - AmountOut)), IntegerEntry((("global_" + toBase58String(AssetIn)) + "_balance"), (tryGetInteger((("global_" + toBase58String(AssetIn)) + "_balance")) + AmountIn)), ScriptTransfer(i.caller, cleanAmountOut, AssetOut)]
384384 }
385385 }
386386
387387
388388 @Verifier(tx)
389389 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
390390

github/deemru/w8io/6500d08 
54.68 ms