tx · E5en9Jiu9sPcE3xk4TwncWRVMeV3pxUMKJ9Riw6TbMSr

3P7VznyyJc91e2SXpWTgc9Zp2d9XWHdwLJ1:  -0.02600000 Waves

2024.03.04 21:13 [4069445] smart account 3P7VznyyJc91e2SXpWTgc9Zp2d9XWHdwLJ1 > SELF 0.00000000 Waves

{ "type": 13, "id": "E5en9Jiu9sPcE3xk4TwncWRVMeV3pxUMKJ9Riw6TbMSr", "fee": 2600000, "feeAssetId": null, "timestamp": 1709576022954, "version": 2, "chainId": 87, "sender": "3P7VznyyJc91e2SXpWTgc9Zp2d9XWHdwLJ1", "senderPublicKey": "DiCe6VGgddpG7YfGhT4XXsPuQtiyzaV68EZUB8GNT3hs", "proofs": [ "2J6qM3qGP8TdfezhMggk4ieryopYNWQnVFNWq2VC4kTweVz13bKCQGiwzaLjLHivpwdgvH6DPoY7vsZCR4LCurHU" ], "script": "base64:BgIHCAISAwoBCHgAA3JleAIjM1BHRkh6VkdUNE5UaWd3Q0tQMU5jd29Ya29kVlp3dkJ1dVUADXN3b3BmaV9vcmFjbGUCIzNQRWJxVmlFUkNvS25tY1NVTGg2bjJhaU12VWRTUWRDc29tAAhwbF9wcm94eQIjM1BKRVNWRFRIUnY4aTgzWGJtSHJSR1FoRGM1cmdSM2F6UXMABG9yY2wCIzNQOGQxRTFCTEtvRDUyeTNiUUoxYkRUZDJURDFncGFMbjl0AA53eF9mYWN0b3J5X3N0cgIjM1BDdUhzVFU1OFdLaENxb3RiY1N3QUJ2ZFB6cXFWQWJiVHYAC3d4X3N3YXBfc3RyAiMzUDY4ek5pdWZzdTF2aVpwdTFhWTNjZGFoUlJLY3ZWNU45MwAOZWFzdF9wcm94eV9zdHICIzNQTXRHbmYzTFhpRUc2aXNEUUxxMXhNREtVcWpRR3FOSExiABBlYXN0X2Nvb3JkaW5hdG9yAiMzUEo1Q1ZScVcxNW5ua0tOSEpNelQzcFBUdERKZjcxckd4SwAKd3hfZmFjdG9yeQkBB0FkZHJlc3MBCQDZBAEFDnd4X2ZhY3Rvcnlfc3RyAAd3eF9zd2FwCQEHQWRkcmVzcwEJANkEAQULd3hfc3dhcF9zdHIACmVhc3RfcHJveHkJAQdBZGRyZXNzAQkA2QQBBQ5lYXN0X3Byb3h5X3N0cgAKS19hbV9hc19pZAIPJXNfX2Ftb3VudEFzc2V0AApLX3ByX2FzX2lkAg4lc19fcHJpY2VBc3NldAAFS19hbXACByVzX19hbXAAB0tfc2hhcmUCRCVzJXNfX3NoYXJlQXNzZXRCYWxhbmNlX19ZaU5ib2ZGekMxN2pFSEhDTXdyUmNweTlNcnJqYWJNTUxaeGc4ZzV4bWY3AAhLX3N0YWtlZAIaJXMlc19fc3Rha2VkQmFsYW5jZV9fV0FWRVMACUtfYV9hc19pZAIKQV9hc3NldF9pZAAJS19iX2FzX2lkAgpCX2Fzc2V0X2lkAApLX2FfYXNfYmFsAg9BX2Fzc2V0X2JhbGFuY2UACktfYl9hc19iYWwCD0JfYXNzZXRfYmFsYW5jZQAFS19mZWUCCmNvbW1pc3Npb24AC0tfYXNzZXRfaWRzAg9zdGF0aWNfdG9rZW5JZHMACUtfZmVlX3B1egIKc3RhdGljX2ZlZQAKS19mZWVUb2tlbgIPc3RhdGljX2ZlZVRva2VuABVLX2dsb2JhbF9wb29sVG9rZW5faWQCFnN0YXRpY19wb29sVG9rZW5faWRTdHIAHEtfZ2xvYmFsX3Bvb2xUb2tlbl9pZF9iaW5hcnkCE2dsb2JhbF9wb29sVG9rZW5faWQAGUtfZ2xvYmFsX3Bvb2xUb2tlbl9hbW91bnQCF2dsb2JhbF9wb29sVG9rZW5fYW1vdW50AA5LX3N0YXRpY19LTXVsdAIMc3RhdGljX0tNdWx0ABZLX3RtcF9yZWJsYW5jZUFzc2V0SWRzAhV0bXBfcmViYWxhbmNlQXNzZXRJZHMAFktfcmViYWxhbmNlX2luUHJvZ3Jlc3MCFHJlYmFsYW5jZV9pblByb2dyZXNzABVLX3JlYmFsYW5jZV9zdGVwc0RvbmUCE3JlYmFsYW5jZV9zdGVwc0RvbmUAF0tfcmViYWxhbmNlX3N0ZXBzQW1vdW50AhVyZWJhbGFuY2Vfc3RlcHNBbW91bnQAF0tfcmViYWxhbmNlX2Fzc2V0RGVsdGFzAhVyZWJhbGFuY2VfYXNzZXREZWx0YXMAG0tfcmViYWxhbmNlX2F0dGFjaGVkUGF5bWVudAIacmViYWxhbmNlX2F0dGFjaGVkUGF5bWVudF8AC3Rzbl9zd2FwcGVyAiMzUEt6NWpuSkxvaEYyR2pTaFE3Ykc1SDRCZWJkb0E5OHpaMgAQdHNuX3N3YXBwZXJfYWRkcgkBB0FkZHJlc3MBCQDZBAEFC3Rzbl9zd2FwcGVyAAVrX2ZlZQIFa19mZWUACGtfcmViYXRlAghrX3JlYmF0ZQAVa19mZWVUb1N0YWtlcnNQZXJjZW50AhVrX2ZlZVRvU3Rha2Vyc1BlcmNlbnQAD2tfZXhjZXNzQmFsYW5jZQIPa19leGNlc3NCYWxhbmNlAA1rX2ZyZWVCYWxhbmNlAg1rX2ZyZWVCYWxhbmNlABRrX21heFNwb3RVdGlsaXphdGlvbgIUa19tYXhTcG90VXRpbGl6YXRpb24ADWtfdG90YWxTdXBwbHkCDWtfdG90YWxTdXBwbHkABmtfcmF0ZQIGa19yYXRlAAhrX2JzQXN0UgIIa19ic0FzdFIACGtfYnNBc3RXAghrX2JzQXN0VwAIa19xdEFzdFICCGtfcXRBc3RSAAhrX3F0QXN0VwIIa19xdEFzdFcAEGtfbWF4UHJpY2VJbXBhY3QCEGtfbWF4UHJpY2VJbXBhY3QAEGtfbWF4UHJpY2VTcHJlYWQCEGtfbWF4UHJpY2VTcHJlYWQAE2tfdG90YWxQb3NpdGlvblNpemUCE2tfdG90YWxQb3NpdGlvblNpemUADGtfYmFzZU9yYWNsZQIMa19iYXNlT3JhY2xlABBrX21heE9yYWNsZURlbGF5AhBrX21heE9yYWNsZURlbGF5AAlrX3N0b3JhZ2UCB1NUT1JBR0UACGtfYXNzZXRzAgZBU1NFVFMACGtfc3RhdHVzAgZTVEFUVVMACGtfcGF1c2VkAgZQQVVTRUQAEGtfYXNzZXRfYmFsYW5jZXMCDkFTU0VUX0JBTEFOQ0VTAA9rX2Fzc2V0X3dlaWdodHMCDUFTU0VUX1dFSUdIVFMACGtfbHBfZmVlAgZMUF9GRUUADmtfcHJvdG9jb2xfZmVlAgxQUk9UT0NPTF9GRUUAC2tfcHJlY2lzaW9uAglQUkVDSVNJT04AEmtfc2lnbWFfZmVlX3Blcl9scAIQU0lHTUFfRkVFX1BFUl9MUAAXa191c2VyX3NpZ21hX2ZlZV9wZXJfbHACFVVTRVJfU0lHTUFfRkVFX1BFUl9MUAAJa191c2VyX2xwAgdVU0VSX0xQAAprX3RvdGFsX2xwAghUT1RBTF9MUAAOa191c2VyX3Byb2ZpdHMCDFVTRVJfUFJPRklUUwARa19yZXdhcmRfYmFsYW5jZXMCD1JFV0FSRF9CQUxBTkNFUwEKZ2V0X2RvbWFpbgELcG9vbEFkZHJlc3MEByRtYXRjaDAFC3Bvb2xBZGRyZXNzAwkAAAICIzNQNHVBNWV0blppNEFtQmFiS2lucTJiTWlXVThLY25IWmRIBQckbWF0Y2gwAgExAgEwAQlrX3BsVG9rZW4CCGFzc2V0X2lkBmRvbWFpbgkArAICCQCsAgIJAKwCAgIJc2V0dXBfcGxfBQhhc3NldF9pZAIBXwUGZG9tYWluARBrX3RvdGFsX3N1cHBsaWVkAQhhc3NldF9pZAkArAICAg90b3RhbF9zdXBwbGllZF8FCGFzc2V0X2lkAQdrX3NSYXRlAQhhc3NldF9pZAkArAICBQhhc3NldF9pZAIGX3NSYXRlARBrX3RvdGFsX2JvcnJvd2VkAQhhc3NldF9pZAkArAICAg90b3RhbF9ib3Jyb3dlZF8FCGFzc2V0X2lkAQdrX2JSYXRlAQhhc3NldF9pZAkArAICBQhhc3NldF9pZAIGX2JSYXRlAQtrX21heFN1cHBseQEIYXNzZXRfaWQJAKwCAgIQc2V0dXBfbWF4U3VwcGx5XwUIYXNzZXRfaWQAEGtfbGFzdFJhdGVIZWlnaHQCDmxhc3RSYXRlSGVpZ2h0ARBnZXRQdXpCYWxhbmNlS2V5AQdhc3NldElkCQCsAgIJAKwCAgIHZ2xvYmFsXwUHYXNzZXRJZAIIX2JhbGFuY2UBD2dldFB1eldlaWdodEtleQEHYXNzZXRJZAkArAICCQCsAgICB3N0YXRpY18FB2Fzc2V0SWQCB193ZWlnaHQBB2dldEJQQUsBB2FkZHJlc3MJAKwCAgUHYWRkcmVzcwIQX3N0YXRpY0Fzc2V0c0lkcwEMdHJ5R2V0U3RyaW5nAgNrZXkHYWRkcmVzcwQHJG1hdGNoMAkAnQgCBQdhZGRyZXNzBQNrZXkDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFiBQckbWF0Y2gwBQFiAgABCnRyeUdldEJvb2wCA2tleQdhZGRyZXNzBAckbWF0Y2gwCQCbCAIFB2FkZHJlc3MFA2tleQMJAAECBQckbWF0Y2gwAgdCb29sZWFuBAFiBQckbWF0Y2gwBQFiBwENdHJ5R2V0SW50ZWdlcgIDa2V5B2FkZHJlc3MEByRtYXRjaDAJAJoIAgUHYWRkcmVzcwUDa2V5AwkAAQIFByRtYXRjaDACA0ludAQBYgUHJG1hdGNoMAUBYgAAARR0cnlHZXRJbnRlZ2VyV2l0aERlZgMDa2V5B2FkZHJlc3MDZGVmBAckbWF0Y2gwCQCaCAIFB2FkZHJlc3MFA2tleQMJAAECBQckbWF0Y2gwAgNJbnQEAWIFByRtYXRjaDAFAWIFA2RlZgEOZ2V0QXNzZXRTdHJpbmcBB2Fzc2V0SWQEByRtYXRjaDAFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQBYgUHJG1hdGNoMAkA2AQBBQFiAgVXQVZFUwEQZ2V0V3hEZWZhdWx0RmVlcwAEB3Bvb2xGZWUJARR0cnlHZXRJbnRlZ2VyV2l0aERlZgMCCyVzX19wb29sRmVlBQd3eF9zd2FwAMCaDAQLcHJvdG9jb2xGZWUJARR0cnlHZXRJbnRlZ2VyV2l0aERlZgMCDyVzX19wcm90b2NvbEZlZQUHd3hfc3dhcADAmgwJAJQKAgkApAMBBQdwb29sRmVlCQCkAwEFC3Byb3RvY29sRmVlAQ1nZXRXeFBvb2xGZWVzAQdhZGRyZXNzBAdmZWVzS2V5CQCsAgICDyVzJXNfX3N3YXBGZWVfXwUHYWRkcmVzcwQEZmVlcwkBDHRyeUdldFN0cmluZwIFB2ZlZXNLZXkFCnd4X2ZhY3RvcnkDCQAAAgUEZmVlcwIACQEQZ2V0V3hEZWZhdWx0RmVlcwAEDHNwbGl0dGVkRmVlcwkAtQkCBQRmZWVzAgJfXwkAlAoCCQCRAwIFDHNwbGl0dGVkRmVlcwABCQCRAwIFDHNwbGl0dGVkRmVlcwACAQ9nZXRBc3NldEJhbGFuY2UCB2FkZHJlc3MHYXNzZXRJZAQBYQkA8AcCBQdhZGRyZXNzBQdhc3NldElkBQFhAQ9nZXRXYXZlc0JhbGFuY2UBB2FkZHJlc3MEAXcICQDvBwEFB2FkZHJlc3MJYXZhaWxhYmxlBQF3AQpnZXRCYWxhbmNlAgZyZXN1bHQHYXNzZXRJZAQHYWRkcmVzcwkArwICBQZyZXN1bHQAIwQEYWRkcgkBB0FkZHJlc3MBCQDZBAEFB2FkZHJlc3MEB2JhbGFuY2UDCQAAAgUHYXNzZXRJZAIFV0FWRVMJAQ9nZXRXYXZlc0JhbGFuY2UBBQRhZGRyBANhSWQJANkEAQUHYXNzZXRJZAkBD2dldEFzc2V0QmFsYW5jZQIFBGFkZHIFA2FJZAQDbGVuCQCxAgEFBnJlc3VsdAkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFB2FkZHJlc3MJALACAgUGcmVzdWx0ACMFB2Fzc2V0SWQCAToJAKQDAQUHYmFsYW5jZQIBLAERZ2V0QWRkcmVzc0JhbGFuY2UCBGFkZHIHYXNzZXRJZAQHYmFsYW5jZQMJAAACBQdhc3NldElkAgVXQVZFUwkBD2dldFdhdmVzQmFsYW5jZQEFBGFkZHIEA2FJZAkA2QQBBQdhc3NldElkCQEPZ2V0QXNzZXRCYWxhbmNlAgUEYWRkcgUDYUlkBQdiYWxhbmNlARBnZXRBc3NldERlY2ltYWxzAQphc3NldElkU3RyBAhkZWNpbWFscwMJAAACBQphc3NldElkU3RyAgVXQVZFUwAICAkBBXZhbHVlAQkA7AcBCQDZBAEFCmFzc2V0SWRTdHIIZGVjaW1hbHMFCGRlY2ltYWxzAQlnZXRXeERhdGEBB2FkZHJlc3MEBGFkZHIJAQdBZGRyZXNzAQkA2QQBBQdhZGRyZXNzBAhhbW91bnRJZAkBDHRyeUdldFN0cmluZwIFCktfYW1fYXNfaWQFBGFkZHIEB3ByaWNlSWQJAQx0cnlHZXRTdHJpbmcCBQpLX3ByX2FzX2lkBQRhZGRyBANhbXAJAQx0cnlHZXRTdHJpbmcCBQVLX2FtcAUEYWRkcgQFc2hhcmUJAQ10cnlHZXRJbnRlZ2VyAgUHS19zaGFyZQUEYWRkcgQFc3Rha2UJAQ10cnlHZXRJbnRlZ2VyAgUIS19zdGFrZWQFBGFkZHIECyR0MDY5MjU2OTc2CQENZ2V0V3hQb29sRmVlcwEFB2FkZHJlc3MEB3Bvb2xGZWUIBQskdDA2OTI1Njk3NgJfMQQLcHJvdG9jb2xGZWUIBQskdDA2OTI1Njk3NgJfMgkAlAoCCQCsAgIJAKwCAgUIYW1vdW50SWQCASwFB3ByaWNlSWQJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQNhbXACASwJAKQDAQUFc2hhcmUCASwJAKQDAQUFc3Rha2UCASwFB3Bvb2xGZWUCASwFC3Byb3RvY29sRmVlAQlnZXRTd0RhdGEBB2FkZHJlc3MEBGFkZHIJAQdBZGRyZXNzAQkA2QQBBQdhZGRyZXNzBARBX2lkCQEMdHJ5R2V0U3RyaW5nAgUJS19hX2FzX2lkBQRhZGRyBARCX2lkCQEMdHJ5R2V0U3RyaW5nAgUJS19iX2FzX2lkBQRhZGRyBAlBX2JhbGFuY2UJAQ10cnlHZXRJbnRlZ2VyAgUKS19hX2FzX2JhbAUEYWRkcgQJQl9iYWxhbmNlCQENdHJ5R2V0SW50ZWdlcgIFCktfYl9hc19iYWwFBGFkZHIEA2ZlZQkBFHRyeUdldEludGVnZXJXaXRoRGVmAwUFS19mZWUFBGFkZHIA8C4ECmRlcHJlY2F0ZWQJAQp0cnlHZXRCb29sAgkArAICAgtkZXByZWNhdGVkXwUHYWRkcmVzcwkBB0FkZHJlc3MBCQDZBAEFDXN3b3BmaV9vcmFjbGUJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEQV9pZAIBOgkApAMBBQlBX2JhbGFuY2UCASwFBEJfaWQCAToJAKQDAQUJQl9iYWxhbmNlAgEsCQCkAwEFA2ZlZQIBLAkApQMBBQpkZXByZWNhdGVkARJnZXRQelJlYmFsYW5jZURhdGEBB2FkZHJlc3MEBGFkZHIJAQdBZGRyZXNzAQkA2QQBBQdhZGRyZXNzBAx0bXBBc3NldHNTdHIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEYWRkcgUWS190bXBfcmVibGFuY2VBc3NldElkcwIABAppblByb2dyZXNzCQELdmFsdWVPckVsc2UCCQCbCAIFBGFkZHIFFktfcmViYWxhbmNlX2luUHJvZ3Jlc3MHBAlzdGVwc0RvbmUJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEYWRkcgUVS19yZWJhbGFuY2Vfc3RlcHNEb25lAAAEC3N0ZXBzQW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFBGFkZHIFF0tfcmViYWxhbmNlX3N0ZXBzQW1vdW50AAAEC2Fzc2V0RGVsdGFzCQELdmFsdWVPckVsc2UCCQCdCAIFBGFkZHIFF0tfcmViYWxhbmNlX2Fzc2V0RGVsdGFzAgAECXRtcEFzc2V0cwkAtQkCBQx0bXBBc3NldHNTdHICASwKAQ9jb2xsZWN0UGF5bWVudHMCBWFjY3VtB2Fzc2V0SWQEA2tleQkArAICBRtLX3JlYmFsYW5jZV9hdHRhY2hlZFBheW1lbnQFB2Fzc2V0SWQEA3ZhbAkBDXRyeUdldEludGVnZXICBQNrZXkFBGFkZHIDCQECIT0CBQN2YWwAAAkAzggCBQVhY2N1bQkAzAgCCQCsAgIJAKwCAgUDa2V5AgEqCQCkAwEFA3ZhbAUDbmlsBQVhY2N1bQQRcmViYWxhbmNlUGF5bWVudHMKAAIkbAUJdG1wQXNzZXRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQ9jb2xsZWN0UGF5bWVudHMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoEFHJlYmFsYW5jZVBheW1lbnRzU3RyCQC5CQIFEXJlYmFsYW5jZVBheW1lbnRzAgEsCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFDHRtcEFzc2V0c1N0cgIBOwkApQMBBQppblByb2dyZXNzAgE7CQCkAwEFCXN0ZXBzRG9uZQIBOwkApAMBBQtzdGVwc0Ftb3VudAIBOwULYXNzZXREZWx0YXMCATsFFHJlYmFsYW5jZVBheW1lbnRzU3RyARRjb2xsZWN0UHV6QXNzZXRzRGF0YQIGcmVzdWx0B2Fzc2V0SWQEA2xlbgkAkAMBBQZyZXN1bHQEB2FkZHJlc3MJAJEDAgUGcmVzdWx0CQBlAgUDbGVuAAEEBGFkZHIJAQdBZGRyZXNzAQkA2QQBBQdhZGRyZXNzBApiYWxhbmNlS2V5CQEQZ2V0UHV6QmFsYW5jZUtleQEFB2Fzc2V0SWQECXdlaWdodEtleQkBD2dldFB1eldlaWdodEtleQEFB2Fzc2V0SWQEB2JhbGFuY2UJAQ10cnlHZXRJbnRlZ2VyAgUKYmFsYW5jZUtleQUEYWRkcgQGd2VpZ2h0CQENdHJ5R2V0SW50ZWdlcgIFCXdlaWdodEtleQUEYWRkcgQLcmVhbEJhbGFuY2UJARFnZXRBZGRyZXNzQmFsYW5jZQIFBGFkZHIFB2Fzc2V0SWQEA3JlcwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUHYXNzZXRJZAIBLAkApAMBBQdiYWxhbmNlAgEsCQCkAwEFBndlaWdodAIBLAkApAMBBQtyZWFsQmFsYW5jZQkAzAgCBQNyZXMFBnJlc3VsdAEJZ2V0UHpEYXRhAQdhZGRyZXNzBARhZGRyCQEHQWRkcmVzcwEJANkEAQUHYWRkcmVzcwQEZmVlMQkBDXRyeUdldEludGVnZXICBQlLX2ZlZV9wdXoFBGFkZHIECGZlZVRva2VuCQEMdHJ5R2V0U3RyaW5nAgUKS19mZWVUb2tlbgUEYWRkcgQKYXNzZXRzU3RyMQkBDHRyeUdldFN0cmluZwIFC0tfYXNzZXRfaWRzBQRhZGRyBAskdDA5NjEyOTc2NQMJAAACBQphc3NldHNTdHIxAgAJAJQKAgkBDHRyeUdldFN0cmluZwIJAQdnZXRCUEFLAQUHYWRkcmVzcwUEdGhpcwDIAQkAlAoCBQphc3NldHNTdHIxBQRmZWUxBAlhc3NldHNTdHIIBQskdDA5NjEyOTc2NQJfMQQDZmVlCAULJHQwOTYxMjk3NjUCXzIEBmFzc2V0cwkAtQkCBQlhc3NldHNTdHICASwECmFzc2V0c0RhdGEKAAIkbAUGYXNzZXRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAzAgCBQdhZGRyZXNzBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBFGNvbGxlY3RQdXpBc3NldHNEYXRhAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKBANsZW4JAJADAQUKYXNzZXRzRGF0YQQJYXNzZXRzQXJyCQDRCAIFCmFzc2V0c0RhdGEJAGUCBQNsZW4AAQQNYXNzZXRzRGF0YVN0cgkAugkCBQlhc3NldHNBcnICATsEDnBvb2xUb2tlbklkU3RyCQEMdHJ5R2V0U3RyaW5nAgUVS19nbG9iYWxfcG9vbFRva2VuX2lkBQRhZGRyBAtwb29sVG9rZW5JZAMJAQIhPQIFDnBvb2xUb2tlbklkU3RyAgAFDnBvb2xUb2tlbklkU3RyBBFwb29sVG9rZW5JZEJpbmFyeQkBC3ZhbHVlT3JFbHNlAgkAnAgCBQRhZGRyBRxLX2dsb2JhbF9wb29sVG9rZW5faWRfYmluYXJ5CQDZBAECBGJ1YmkJAQ5nZXRBc3NldFN0cmluZwEFEXBvb2xUb2tlbklkQmluYXJ5BA9wb29sVG9rZW5BbW91bnQJAQ10cnlHZXRJbnRlZ2VyAgUZS19nbG9iYWxfcG9vbFRva2VuX2Ftb3VudAUEYWRkcgQFa011bHQJARR0cnlHZXRJbnRlZ2VyV2l0aERlZgMFDktfc3RhdGljX0tNdWx0BQRhZGRyAAEJAJgKBgUDZmVlBQhmZWVUb2tlbgULcG9vbFRva2VuSWQFD3Bvb2xUb2tlbkFtb3VudAUFa011bHQFDWFzc2V0c0RhdGFTdHIBCmdldFRzbkRhdGECB2FkZHJlc3MIYXNzZXRfaWQEBGFkZHIJAQdBZGRyZXNzAQkA2QQBBQdhZGRyZXNzBAZic0FzdFIJAQ10cnlHZXRJbnRlZ2VyAgUIa19ic0FzdFIFBGFkZHIEBmJzQXN0VwkBDXRyeUdldEludGVnZXICBQhrX2JzQXN0VwUEYWRkcgQGcXRBc3RSCQENdHJ5R2V0SW50ZWdlcgIFCGtfcXRBc3RSBQRhZGRyBAZxdEFzdFcJAQ10cnlHZXRJbnRlZ2VyAgUIa19xdEFzdFcFBGFkZHIEDm1heFByaWNlSW1wYWN0CQENdHJ5R2V0SW50ZWdlcgIFEGtfbWF4UHJpY2VJbXBhY3QFBGFkZHIEDm1heFByaWNlU3ByZWFkCQENdHJ5R2V0SW50ZWdlcgIFEGtfbWF4UHJpY2VTcHJlYWQFBGFkZHIEEXRvdGFsUG9zaXRpb25TaXplCQENdHJ5R2V0SW50ZWdlcgIFE2tfdG90YWxQb3NpdGlvblNpemUFBGFkZHIEDm1heE9yYWNsZURlbGF5CQENdHJ5R2V0SW50ZWdlcgIFEGtfbWF4T3JhY2xlRGVsYXkFBGFkZHIEDG9yYWNsZVN0cmluZwkBDHRyeUdldFN0cmluZwIFDGtfYmFzZU9yYWNsZQUEYWRkcgQDYXJyCQC1CQIFDG9yYWNsZVN0cmluZwIBLAQNJHQwMTEyMTQxMTI4MAkAlQoDCQCRAwIFA2FycgAACQCRAwIFA2FycgABCQCRAwIFA2FycgACBA1vcmFjbGVBZGRyZXNzCAUNJHQwMTEyMTQxMTI4MAJfMQQIcHJpY2VLZXkIBQ0kdDAxMTIxNDExMjgwAl8yBAhibG9ja0tleQgFDSR0MDExMjE0MTEyODACXzMECm9yYWNsZUFkZHIJAQdBZGRyZXNzAQkA2QQBBQ1vcmFjbGVBZGRyZXNzBAtvcmFjbGVQcmljZQkBDXRyeUdldEludGVnZXICBQhwcmljZUtleQUKb3JhY2xlQWRkcgQJY3VySGVpZ2h0BQZoZWlnaHQECmxhc3RIZWlnaHQDCQECIT0CBQhibG9ja0tleQIACQENdHJ5R2V0SW50ZWdlcgIFCGJsb2NrS2V5BQpvcmFjbGVBZGRyBQljdXJIZWlnaHQEBXZhdWx0CQEMdHJ5R2V0U3RyaW5nAgkArAICAg5rX2Fzc2V0X3ZhdWx0XwUIYXNzZXRfaWQFEHRzbl9zd2FwcGVyX2FkZHIECnZhdWx0X2FkZHIJAQdBZGRyZXNzAQkA2QQBBQV2YXVsdAQNZXhjZXNzQmFsYW5jZQkBDXRyeUdldEludGVnZXICBQ9rX2V4Y2Vzc0JhbGFuY2UFCnZhdWx0X2FkZHIEC2ZyZWVCYWxhbmNlCQENdHJ5R2V0SW50ZWdlcgIFDWtfZnJlZUJhbGFuY2UFCnZhdWx0X2FkZHIEEm1heFNwb3RVdGlsaXphdGlvbgkBDXRyeUdldEludGVnZXICBRRrX21heFNwb3RVdGlsaXphdGlvbgUKdmF1bHRfYWRkcgQLdG90YWxTdXBwbHkJAQ10cnlHZXRJbnRlZ2VyAgUNa190b3RhbFN1cHBseQUKdmF1bHRfYWRkcgQEcmF0ZQkBDXRyeUdldEludGVnZXICBQZrX3JhdGUFCnZhdWx0X2FkZHIJAKIKEAUGYnNBc3RSBQZic0FzdFcFBnF0QXN0UgUGcXRBc3RXBRF0b3RhbFBvc2l0aW9uU2l6ZQUObWF4UHJpY2VJbXBhY3QFDm1heFByaWNlU3ByZWFkBQtvcmFjbGVQcmljZQUNZXhjZXNzQmFsYW5jZQULZnJlZUJhbGFuY2UFEm1heFNwb3RVdGlsaXphdGlvbgULdG90YWxTdXBwbHkFBHJhdGUFCWN1ckhlaWdodAUKbGFzdEhlaWdodAUObWF4T3JhY2xlRGVsYXkBCGdldFByaWNlAQdhc3NldElkBAVwcmljZQkBDXRyeUdldEludGVnZXICCQCsAgIFB2Fzc2V0SWQCB190d2FwNUIJAQdBZGRyZXNzAQkA2QQBBQRvcmNsBQVwcmljZQEJZ2V0UExEYXRhAgxwb29sX2FkZHJlc3MIYXNzZXRfaWQEBmRvbWFpbgkBCmdldF9kb21haW4BBQxwb29sX2FkZHJlc3MEB3Bvb2xBZHIJAQdBZGRyZXNzAQkA2QQBBQxwb29sX2FkZHJlc3MECXBsVG9rZW5JZAkBDHRyeUdldFN0cmluZwIJAQlrX3BsVG9rZW4CBQhhc3NldF9pZAUGZG9tYWluCQEHQWRkcmVzcwEJANkEAQUIcGxfcHJveHkEBXNSYXRlCQENdHJ5R2V0SW50ZWdlcgIJAQdrX3NSYXRlAQUIYXNzZXRfaWQFB3Bvb2xBZHIEBWJSYXRlCQENdHJ5R2V0SW50ZWdlcgIJAQdrX2JSYXRlAQUIYXNzZXRfaWQFB3Bvb2xBZHIEDXRvdGFsU3VwcGxpZWQJAQ10cnlHZXRJbnRlZ2VyAgkBEGtfdG90YWxfc3VwcGxpZWQBBQhhc3NldF9pZAUHcG9vbEFkcgQNdG90YWxCb3Jyb3dlZAkBDXRyeUdldEludGVnZXICCQEQa190b3RhbF9ib3Jyb3dlZAEFCGFzc2V0X2lkBQdwb29sQWRyBAltYXhTdXBwbHkJAQx0cnlHZXRTdHJpbmcCCQELa19tYXhTdXBwbHkBBQhhc3NldF9pZAUHcG9vbEFkcgQKbGFzdEhlaWdodAkBDXRyeUdldEludGVnZXICBRBrX2xhc3RSYXRlSGVpZ2h0BQdwb29sQWRyBAljdXJIZWlnaHQFBmhlaWdodAQFcHJpY2UJAQhnZXRQcmljZQEFCGFzc2V0X2lkBAhkZWNpbWFscwkBEGdldEFzc2V0RGVjaW1hbHMBBQhhc3NldF9pZAkAnQoLBQhhc3NldF9pZAUJcGxUb2tlbklkBQVzUmF0ZQUFYlJhdGUFDXRvdGFsU3VwcGxpZWQFDXRvdGFsQm9ycm93ZWQFCW1heFN1cHBseQUKbGFzdEhlaWdodAUJY3VySGVpZ2h0BQVwcmljZQUIZGVjaW1hbHMBCXRlc3RfbG9vcAIGcmVzdWx0A2VsZQkAzAgCBQNlbGUFBnJlc3VsdAEOZ2V0QmFsYW5jZXNTdHICCWFzc2V0c1N0cgdhZGRyZXNzBAZhc3NldHMJALwJAgUJYXNzZXRzU3RyAgEsBANyZXMKAAIkbAUGYXNzZXRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUHYWRkcmVzcwoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKZ2V0QmFsYW5jZQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgMgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIECGJhbGFuY2VzCQCwAgIFA3JlcwAjBARiYWxzCQCzAgIFCGJhbGFuY2VzAAEFBGJhbHMBCXByb2Nlc3NXWAIGcmVzdWx0B2FkZHJlc3MEDSR0MDEzNjU2MTM2OTkJAQlnZXRXeERhdGEBBQdhZGRyZXNzBAlhc3NldHNTdHIIBQ0kdDAxMzY1NjEzNjk5Al8xBAVkYXRhcwgFDSR0MDEzNjU2MTM2OTkCXzIEDGFzc2V0c1N0cmluZwkBDmdldEJhbGFuY2VzU3RyAgUJYXNzZXRzU3RyBQdhZGRyZXNzBAdyZXNJdGVtCQCsAgIJAKwCAgkArAICCQCsAgIFB2FkZHJlc3MCAS8FDGFzc2V0c1N0cmluZwIBLwUFZGF0YXMJAMwIAgUHcmVzSXRlbQUGcmVzdWx0AQlwcm9jZXNzU1cCBnJlc3VsdAdhZGRyZXNzBAxhc3NldHNTdHJpbmcJAQlnZXRTd0RhdGEBBQdhZGRyZXNzBAdyZXNJdGVtCQCsAgIJAKwCAgUHYWRkcmVzcwIBLwUMYXNzZXRzU3RyaW5nCQDMCAIFB3Jlc0l0ZW0FBnJlc3VsdAEJcHJvY2Vzc1BaAgZyZXN1bHQHYWRkcmVzcwQNJHQwMTQwOTkxNDE5MAkBCWdldFB6RGF0YQEFB2FkZHJlc3MEA2ZlZQgFDSR0MDE0MDk5MTQxOTACXzEECGZlZVRva2VuCAUNJHQwMTQwOTkxNDE5MAJfMgQLcG9vbFRva2VuSWQIBQ0kdDAxNDA5OTE0MTkwAl8zBA9wb29sVG9rZW5BbW91bnQIBQ0kdDAxNDA5OTE0MTkwAl80BAVrTXVsdAgFDSR0MDE0MDk5MTQxOTACXzUEDGFzc2V0c1N0cmluZwgFDSR0MDE0MDk5MTQxOTACXzYECHJlYmFEYXRhCQESZ2V0UHpSZWJhbGFuY2VEYXRhAQUHYWRkcmVzcwQHcmVzSXRlbQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFB2FkZHJlc3MCAS8JAKQDAQUDZmVlAgEvBQhmZWVUb2tlbgIBLwUMYXNzZXRzU3RyaW5nAgEvBQhyZWJhRGF0YQIBLwULcG9vbFRva2VuSWQCAS8JAKQDAQUPcG9vbFRva2VuQW1vdW50AgEvCQCkAwEFBWtNdWx0CQDMCAIFB3Jlc0l0ZW0FBnJlc3VsdAEKcHJvY2Vzc1RTTgIGcmVzdWx0BWxhYmVsBANhcnIJALUJAgUFbGFiZWwCAV8EDSR0MDE0NTUyMTQ1OTQJAJQKAgkAkQMCBQNhcnIAAAkAkQMCBQNhcnIAAQQHYWRkcmVzcwgFDSR0MDE0NTUyMTQ1OTQCXzEECGFzc2V0X2lkCAUNJHQwMTQ1NTIxNDU5NAJfMgQNJHQwMTQ2MDAxNDgzOAkBCmdldFRzbkRhdGECBQdhZGRyZXNzBQhhc3NldF9pZAQGYnNBc3RSCAUNJHQwMTQ2MDAxNDgzOAJfMQQGYnNBc3RXCAUNJHQwMTQ2MDAxNDgzOAJfMgQGcXRBc3RSCAUNJHQwMTQ2MDAxNDgzOAJfMwQGcXRBc3RXCAUNJHQwMTQ2MDAxNDgzOAJfNAQRdG90YWxQb3NpdGlvblNpemUIBQ0kdDAxNDYwMDE0ODM4Al81BA5tYXhQcmljZUltcGFjdAgFDSR0MDE0NjAwMTQ4MzgCXzYEDm1heFByaWNlU3ByZWFkCAUNJHQwMTQ2MDAxNDgzOAJfNwQLb3JhY2xlUHJpY2UIBQ0kdDAxNDYwMDE0ODM4Al84BA1leGNlc3NCYWxhbmNlCAUNJHQwMTQ2MDAxNDgzOAJfOQQLZnJlZUJhbGFuY2UIBQ0kdDAxNDYwMDE0ODM4A18xMAQSbWF4U3BvdFV0aWxpemF0aW9uCAUNJHQwMTQ2MDAxNDgzOANfMTEEC3RvdGFsU3VwcGx5CAUNJHQwMTQ2MDAxNDgzOANfMTIEBHJhdGUIBQ0kdDAxNDYwMDE0ODM4A18xMwQJY3VySGVpZ2h0CAUNJHQwMTQ2MDAxNDgzOANfMTQECmxhc3RIZWlnaHQIBQ0kdDAxNDYwMDE0ODM4A18xNQQObWF4T3JhY2xlRGVsYXkIBQ0kdDAxNDYwMDE0ODM4A18xNgQOYXNzZXRfZGVjaW1hbHMDCQAAAgUIYXNzZXRfaWQCBVdBVkVTAAgICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQkA2QQBBQhhc3NldF9pZAkArAICAg1JdmFsaWQgYXNzZXQgBQhhc3NldF9pZAhkZWNpbWFscwQHcmVzSXRlbQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUHYWRkcmVzcwIBLAUIYXNzZXRfaWQCASwJAKQDAQUOYXNzZXRfZGVjaW1hbHMCASwJAKQDAQUGYnNBc3RSAgEsCQCkAwEFBmJzQXN0VwIBLAkApAMBBQZxdEFzdFICASwJAKQDAQUGcXRBc3RXAgEsCQCkAwEFEXRvdGFsUG9zaXRpb25TaXplAgEsCQCkAwEFDm1heFByaWNlSW1wYWN0AgEsCQCkAwEFDm1heFByaWNlU3ByZWFkAgEsCQCkAwEFC29yYWNsZVByaWNlAgEsCQCkAwEFDWV4Y2Vzc0JhbGFuY2UCASwJAKQDAQULZnJlZUJhbGFuY2UCASwJAKQDAQUSbWF4U3BvdFV0aWxpemF0aW9uAgEsCQCkAwEFC3RvdGFsU3VwcGx5AgEsCQCkAwEFBHJhdGUCASwJAKQDAQUJY3VySGVpZ2h0AgEsCQCkAwEFCmxhc3RIZWlnaHQCASwJAKQDAQUObWF4T3JhY2xlRGVsYXkJAMwIAgUHcmVzSXRlbQUGcmVzdWx0AQlwcm9jZXNzUEwCBnJlc3VsdAVsYWJlbAQDYXJyCQC1CQIFBWxhYmVsAgEtBA0kdDAxNTcyODE1Nzc1CQCUCgIJAJEDAgUDYXJyAAAJAJEDAgUDYXJyAAEEDHBvb2xfYWRkcmVzcwgFDSR0MDE1NzI4MTU3NzUCXzEECGFzc2V0X2lkCAUNJHQwMTU3MjgxNTc3NQJfMgQNJHQwMTU3ODExNTkzOAkBCWdldFBMRGF0YQIFDHBvb2xfYWRkcmVzcwUIYXNzZXRfaWQECWFzc2V0X2lkZAgFDSR0MDE1NzgxMTU5MzgCXzEECXBsVG9rZW5JZAgFDSR0MDE1NzgxMTU5MzgCXzIEBXNSYXRlCAUNJHQwMTU3ODExNTkzOAJfMwQFYlJhdGUIBQ0kdDAxNTc4MTE1OTM4Al80BA10b3RhbFN1cHBsaWVkCAUNJHQwMTU3ODExNTkzOAJfNQQNdG90YWxCb3Jyb3dlZAgFDSR0MDE1NzgxMTU5MzgCXzYECW1heFN1cHBseQgFDSR0MDE1NzgxMTU5MzgCXzcECmxhc3RIZWlnaHQIBQ0kdDAxNTc4MTE1OTM4Al84BAljdXJIZWlnaHQIBQ0kdDAxNTc4MTE1OTM4Al85BAVwcmljZQgFDSR0MDE1NzgxMTU5MzgDXzEwBAhkZWNpbWFscwgFDSR0MDE1NzgxMTU5MzgDXzExBAdyZXNJdGVtCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBWxhYmVsAgEsBQlhc3NldF9pZGQCASwFCXBsVG9rZW5JZAIBLAkApAMBBQVzUmF0ZQIBLAkApAMBBQViUmF0ZQIBLAkApAMBBQ10b3RhbFN1cHBsaWVkAgEsCQCkAwEFDXRvdGFsQm9ycm93ZWQCASwFCW1heFN1cHBseQIBLAkApAMBBQpsYXN0SGVpZ2h0AgEsCQCkAwEFCWN1ckhlaWdodAIBLAkApAMBBQVwcmljZQIBLAkApAMBBQhkZWNpbWFscwkAzAgCBQdyZXNJdGVtBQZyZXN1bHQBBWdldFdYAQZwYXJhbXMEBXBvb2xzCQC9CQIFBnBhcmFtcwIBLAQGcmVzQXJyCgACJGwFBXBvb2xzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQlwcm9jZXNzV1gCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFUxpc3Qgc2l6ZSBleGNlZWRzIDEyMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8x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AgUGcmVzQXJyAgF8BANmZWUJAQ10cnlHZXRJbnRlZ2VyAgUFa19mZWUFEHRzbl9zd2FwcGVyX2FkZHIEBnJlYmF0ZQkBDXRyeUdldEludGVnZXICBQhrX3JlYmF0ZQUQdHNuX3N3YXBwZXJfYWRkcgQTZmVlVG9TdGFrZXJzUGVyY2VudAkBDXRyeUdldEludGVnZXICBRVrX2ZlZVRvU3Rha2Vyc1BlcmNlbnQFEHRzbl9zd2FwcGVyX2FkZHIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKQDAQUDZmVlAgEsCQCkAwEFBnJlYmF0ZQIBLAkApAMBBRNmZWVUb1N0YWtlcnNQZXJjZW50AgEvBQZyZXN1bHQBBWdldFBMAQZwYXJhbXMEBXBvb2xzCQC1CQIFBnBhcmFtcwIBLAQGcmVzQXJyCgACJGwFBXBvb2xzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQlwcm9jZXNzUEwCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoEBnJlc3VsdAkAugkCBQZyZXNBcnICAXwFBnJlc3VsdAEObG9hZFBlcGVBc3NldHMBC3BlcGVfbWFya2V0BAZhc3NldHMJAQx0cnlHZXRTdHJpbmcCBQhrX2Fzc2V0cwULcGVwZV9tYXJrZXQJALwJAgUGYXNzZXRzAgJfXwEVbG9hZFBlcGVBc3NldEJhbGFuY2VzAQtwZXBlX21hcmtldAoBCGZvbGRGdW5jAgNhY2MEZWxlbQQHYmFsYW5jZQkBDXBhcnNlSW50VmFsdWUBBQRlbGVtCQCUCgIJAM0IAggFA2FjYwJfMQUEZWxlbQkAZAIIBQNhY2MCXzIFB2JhbGFuY2UEDWFzc2V0QmFsYW5jZXMJAQx0cnlHZXRTdHJpbmcCBRBrX2Fzc2V0X2JhbGFuY2VzBQtwZXBlX21hcmtldAoAAiRsCQC9CQIFDWFzc2V0QmFsYW5jZXMCAl9fCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEIZm9sZEZ1bmMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoBFGxvYWRQZXBlQXNzZXRXZWlnaHRzAQtwZXBlX21hcmtldAoBCGZvbGRGdW5jAgNhY2MEZWxlbQQGd2VpZ2h0CQENcGFyc2VJbnRWYWx1ZQEFBGVsZW0JAJQKAgkAzQgCCAUDYWNjAl8xBQRlbGVtCQBkAggFA2FjYwJfMgUGd2VpZ2h0BAxhc3NldFdlaWdodHMJAQx0cnlHZXRTdHJpbmcCBQ9rX2Fzc2V0X3dlaWdodHMFC3BlcGVfbWFya2V0CgACJGwJALwJAgUMYXNzZXRXZWlnaHRzAgJfXwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCGZvbGRGdW5jAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKARBsb2FkUGVwZURlY2ltYWxzAQZhc3NldHMKAQdnZXREZWNzAgNhY2MEaXRlbQQIZGVjaW1hbHMJARBnZXRBc3NldERlY2ltYWxzAQUEaXRlbQkAzQgCBQNhY2MJAKQDAQUIZGVjaW1hbHMKAAIkbAUGYXNzZXRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQdnZXREZWNzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsBC3Byb2Nlc3NQZXBlAgZyZXN1bHQPcGVwZV9tYXJrZXRfc3RyBAtwZXBlX21hcmtldAkBB0FkZHJlc3MBCQDZBAEFD3BlcGVfbWFya2V0X3N0cgQHc3RvcmFnZQkBDHRyeUdldFN0cmluZwIFCWtfc3RvcmFnZQULcGVwZV9tYXJrZXQEBHNhcnIJALwJAgUHc3RvcmFnZQICX18EDSR0MDIwMzMwMjA1NTEJAJsKCQkAkQMCBQRzYXJyAAAJAAACCQCRAwIFBHNhcnIAAQIBMQkAkQMCBQRzYXJyAAIJAJEDAgUEc2FycgADCQCRAwIFBHNhcnIABAkAkQMCBQRzYXJyAAUJAJEDAgUEc2FycgAGCQCRAwIFBHNhcnIABwkAkQMCBQRzYXJyAAgECWxwQXNzZXRJZAgFDSR0MDIwMzMwMjA1NTECXzEECHVubG9ja2VkCAUNJHQwMjAzMzAyMDU1MQJfMgQNbHBUb3RhbFN1cHBseQgFDSR0MDIwMzMwMjA1NTECXzMECWxwRmVlUmF0ZQgFDSR0MDIwMzMwMjA1NTECXzQED3Byb3RvY29sRmVlUmF0ZQgFDSR0MDIwMzMwMjA1NTECXzUEEW1heEFsbG9jQW1wbGlmaWVyCAUNJHQwMjAzMzAyMDU1MQJfNgQPd2VpZ2h0QW1wbGlmaWVyCAUNJHQwMjAzMzAyMDU1MQJfNwQMc2xpcHBhZ2VSYXRlCAUNJHQwMjAzMzAyMDU1MQJfOAQKZmVlTWF4UmF0ZQgFDSR0MDIwMzMwMjA1NTECXzkECXByZWNpc2lvbgkBDXRyeUdldEludGVnZXICBQtrX3ByZWNpc2lvbgULcGVwZV9tYXJrZXQEDXNpZ21hRmVlUGVyTHAJAQx0cnlHZXRTdHJpbmcCBRJrX3NpZ21hX2ZlZV9wZXJfbHAFC3BlcGVfbWFya2V0BAZwYXVzZWQJAQp0cnlHZXRCb29sAgUIa19wYXVzZWQFC3BlcGVfbWFya2V0BAd0b3RhbExwCQENdHJ5R2V0SW50ZWdlcgIFCmtfdG90YWxfbHAFC3BlcGVfbWFya2V0BA5yZXdhcmRCYWxhbmNlcwkBDHRyeUdldFN0cmluZwIFEWtfcmV3YXJkX2JhbGFuY2VzBQtwZXBlX21hcmtldAQKbHBEZWNpbWFscwkBEGdldEFzc2V0RGVjaW1hbHMBBQlscEFzc2V0SWQEBmFzc2V0cwkBDmxvYWRQZXBlQXNzZXRzAQULcGVwZV9tYXJrZXQEDGRlY2ltYWxzX2FycgkBEGxvYWRQZXBlRGVjaW1hbHMBBQZhc3NldHMEDSR0MDIxMDE1MjEwODIJARRsb2FkUGVwZUFzc2V0V2VpZ2h0cwEFC3BlcGVfbWFya2V0BAxhc3NldFdlaWdodHMIBQ0kdDAyMTAxNTIxMDgyAl8xBAtzaWdtYVdlaWdodAgFDSR0MDIxMDE1MjEwODICXzIEDSR0MDIxMDg4MjExNzEJARVsb2FkUGVwZUFzc2V0QmFsYW5jZXMBBQtwZXBlX21hcmtldAQRcHJldkFzc2V0QmFsYW5jZXMIBQ0kdDAyMTA4ODIxMTcxAl8xBBRwcmV2QXNzZXRUb3RhbFN1cHBseQgFDSR0MDIxMDg4MjExNzECXzIECG1haW5fc3RyCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUJbHBBc3NldElkAgEsCQClAwEFCHVubG9ja2VkAgEsBQ1scFRvdGFsU3VwcGx5AgEsBQlscEZlZVJhdGUCASwFD3Byb3RvY29sRmVlUmF0ZQIBLAURbWF4QWxsb2NBbXBsaWZpZXICASwFD3dlaWdodEFtcGxpZmllcgIBLAUMc2xpcHBhZ2VSYXRlAgEsBQpmZWVNYXhSYXRlAgEsCQCkAwEFC3NpZ21hV2VpZ2h0AgEsCQCkAwEFFHByZXZBc3NldFRvdGFsU3VwcGx5AgEsCQCkAwEFCXByZWNpc2lvbgIBLAUNc2lnbWFGZWVQZXJMcAIBLAkApAMBBQd0b3RhbExwAgEsCQClAwEFBnBhdXNlZAIBLAkApAMBBQpscERlY2ltYWxzAgEsBQ9wZXBlX21hcmtldF9zdHIECmFzc2V0c19pZHMJALsJAgUGYXNzZXRzAgEsBA5hc3NldHNfd2VpZ2h0cwkAuwkCBQxhc3NldFdlaWdodHMCASwED2Fzc2V0c19iYWxhbmNlcwkAuwkCBRFwcmV2QXNzZXRCYWxhbmNlcwIBLAQPYXNzZXRzX2RlY2ltYWxzCQC7CQIFDGRlY2ltYWxzX2FycgIBLAQDcmVzCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFCG1haW5fc3RyAgF8BQphc3NldHNfaWRzAgF8BQ5hc3NldHNfd2VpZ2h0cwIBfAUPYXNzZXRzX2JhbGFuY2VzAgF8BQ9hc3NldHNfZGVjaW1hbHMCAXwFDnJld2FyZEJhbGFuY2VzCQDNCAIFBnJlc3VsdAUDcmVzAQdnZXRQZXBlAQZwYXJhbXMECWFkZHJlc3NlcwkAtQkCBQZwYXJhbXMCASwEBnJlc0FycgoAAiRsBQlhZGRyZXNzZXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBC3Byb2Nlc3NQZXBlAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKBAZyZXN1bHQJALsJAgUGcmVzQXJyAgE7BQZyZXN1bHQBCmdldENvbWJpbmUBBnBhcmFtcwQJcGFyYW1zQXJyCQC1CQIFBnBhcmFtcwICKioEDSR0MDIyNjg0MjI3NjYJAJUKAwkAkQMCBQlwYXJhbXNBcnIAAAkAkQMCBQlwYXJhbXNBcnIAAQkAkQMCBQlwYXJhbXNBcnIAAgQJdHNuUGFyYW1zCAUNJHQwMjI2ODQyMjc2NgJfMQQIcGxQYXJhbXMIBQ0kdDAyMjY4NDIyNzY2Al8yBApwZXBlUGFyYW1zCAUNJHQwMjI2ODQyMjc2NgJfMwQHdHNuRGF0YQkBBmdldFRTTgEFCXRzblBhcmFtcwQGcGxEYXRhCQEFZ2V0UEwBBQhwbFBhcmFtcwQIcGVwZURhdGEJAQdnZXRQZXBlAQUKcGVwZVBhcmFtcwkAuwkCCQDMCAIFB3RzbkRhdGEJAMwIAgUGcGxEYXRhCQDMCAIFCHBlcGVEYXRhBQNuaWwCAioqARBnZXRFYXN0QXNzZXREYXRhAQdhc3NldElkBAZwYXJhbXMJAQx0cnlHZXRTdHJpbmcCCQCsAgICDSVzJXNfX2Fzc2V0X18FB2Fzc2V0SWQFCmVhc3RfcHJveHkECXBhcmFtc0FycgkAtQkCBQZwYXJhbXMCAl9fBA0kdDAyMzA5NzIzMTU3CQCUCgIJAJEDAgUJcGFyYW1zQXJyAAEJAJEDAgUJcGFyYW1zQXJyAAIEBWVuU3RyCAUNJHQwMjMwOTcyMzE1NwJfMQQQYXNzZXRDb250cmFjdFN0cggFDSR0MDIzMDk3MjMxNTcCXzIEDWFzc2V0Q29udHJhY3QJAQdBZGRyZXNzAQkA2QQBBRBhc3NldENvbnRyYWN0U3RyBAdlbmFibGVkAwkAAAIFBWVuU3RyAgdFTkFCTEVEBgcEDGJhY2tpbmdSYXRpbwkBDXRyeUdldEludGVnZXICAhAlc19fYmFja2luZ1JhdGlvBQ1hc3NldENvbnRyYWN0BBBsaXF1aWRhdGlvblJhdGlvCQENdHJ5R2V0SW50ZWdlcgICFCVzX19saXF1aWRhdGlvblJhdGlvBQ1hc3NldENvbnRyYWN0BBBvcmFjbGVBZGRyZXNzU3RyCQEMdHJ5R2V0U3RyaW5nAgIRJXNfX29yYWNsZUFkZHJlc3MFDWFzc2V0Q29udHJhY3QEDW9yYWNsZUFkZHJlc3MJAQdBZGRyZXNzAQkA2QQBBRBvcmFjbGVBZGRyZXNzU3RyBAZ0aWNrZXIJAQx0cnlHZXRTdHJpbmcCAgolc19fdGlja2VyBQ1hc3NldENvbnRyYWN0BA9lYXN0TWludGVkTGltaXQJAQ10cnlHZXRJbnRlZ2VyAgITJXNfX2Vhc3RNaW50ZWRMaW1pdAUNYXNzZXRDb250cmFjdAQFcHJpY2UJAQ10cnlHZXRJbnRlZ2VyAgkArAICAg0lcyVzX19wcmljZV9fBQZ0aWNrZXIFDW9yYWNsZUFkZHJlc3MJALoJAgkAzAgCCQClAwEFB2VuYWJsZWQJAMwIAgkApAMBBQxiYWNraW5nUmF0aW8JAMwIAgkApAMBBRBsaXF1aWRhdGlvblJhdGlvCQDMCAIJAKQDAQUPZWFzdE1pbnRlZExpbWl0CQDMCAIJAKQDAQUFcHJpY2UFA25pbAIBLAESZ2V0RWFzdExpcXVpZGF0aW9uAQZwYXJhbXMECXBhcmFtc0FycgkAtQkCBQZwYXJhbXMCASwKAQFmAgVhY2N1bQRuZXh0CQDNCAIFBWFjY3VtCQCsAgIJAKwCAgUEbmV4dAIBLAkBEGdldEVhc3RBc3NldERhdGEBBQRuZXh0BANyZXMKAAIkbAUJcGFyYW1zQXJyCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQFmAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKBAphc3NldHNEYXRhCQC7CQIFA3JlcwIBOwQVY3VtdWxhdGl2ZUZlZUZyYWN0aW9uCQENdHJ5R2V0SW50ZWdlcgICGSVzX19jdW11bGF0aXZlRmVlRnJhY3Rpb24FCmVhc3RfcHJveHkEBmN1cnJUcwkAaQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wAOgHBBNmcmFjdGlvbkxhc3RVcGRhdGVkCQEUdHJ5R2V0SW50ZWdlcldpdGhEZWYDAhclc19fZnJhY3Rpb25MYXN0VXBkYXRlZAUKZWFzdF9wcm94eQUGY3VyclRzBA5jb29yZGluYXRvclN0cgkBDHRyeUdldFN0cmluZwICFiVzX19jb29yZGluYXRvckFkZHJlc3MFCmVhc3RfcHJveHkEC2Nvb3JkaW5hdG9yCQEHQWRkcmVzcwEJANkEAQUOY29vcmRpbmF0b3JTdHIEB3N0YWJGZWUJARR0cnlHZXRJbnRlZ2VyV2l0aERlZgMCECVzX19zdGFiaWxpdHlGZWUFC2Nvb3JkaW5hdG9yAIDIr6AlBAhsaXFCb251cwkBDXRyeUdldEludGVnZXICAhQlc19fbGlxdWlkYXRpb25Cb251cwULY29vcmRpbmF0b3IECmNvbW1vbkRhdGEJALkJAgkAzAgCCQCkAwEFFWN1bXVsYXRpdmVGZWVGcmFjdGlvbgkAzAgCCQCkAwEFBmN1cnJUcwkAzAgCCQCkAwEFE2ZyYWN0aW9uTGFzdFVwZGF0ZWQJAMwIAgkApAMBBQdzdGFiRmVlCQDMCAIJAKQDAQUIbGlxQm9udXMFA25pbAIBLAkArAICCQCsAgIFCmNvbW1vbkRhdGECAXwFCmFzc2V0c0RhdGEBAWkBBHRlc3QBAXMEAXIJAQp0cnlHZXRCb29sAgIuZGVwcmVjYXRlZF8zUDI4NlRrVEhBUnRySnp4VWhQb0hYYXJkdnV0QzM3YTlyTQkBB0FkZHJlc3MBCQDZBAEFDXN3b3BmaV9vcmFjbGUJAAIBCQClAwEFAXIAYwrpXA==", "height": 4069445, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 3KEMXjcq4QrWhPX9QLNfcYHcMo3TGpFxAeXf93BYX2dd Next: 2mAvsfm6S64zRQamk7oYB1ANbSrVhm4EfCpKBzutkC5U Diff:
OldNewDifferences
1313
1414 let wx_swap_str = "3P68zNiufsu1viZpu1aY3cdahRRKcvV5N93"
1515
16+let east_proxy_str = "3PMtGnf3LXiEG6isDQLq1xMDKUqjQGqNHLb"
17+
18+let east_coordinator = "3PJ5CVRqW15nnkKNHJMzT3pPTtDJf71rGxK"
19+
1620 let wx_factory = Address(fromBase58String(wx_factory_str))
1721
1822 let wx_swap = Address(fromBase58String(wx_swap_str))
23+
24+let east_proxy = Address(fromBase58String(east_proxy_str))
1925
2026 let K_am_as_id = "%s__amountAsset"
2127
4248 let K_fee_puz = "static_fee"
4349
4450 let K_feeToken = "static_feeToken"
51+
52+let K_global_poolToken_id = "static_poolToken_idStr"
53+
54+let K_global_poolToken_id_binary = "global_poolToken_id"
55+
56+let K_global_poolToken_amount = "global_poolToken_amount"
57+
58+let K_static_KMult = "static_KMult"
4559
4660 let K_tmp_reblanceAssetIds = "tmp_rebalanceAssetIds"
4761
121135
122136 let k_user_profits = "USER_PROFITS"
123137
138+let k_reward_balances = "REWARD_BALANCES"
139+
124140 func get_domain (poolAddress) = match poolAddress {
125141 case _ =>
126142 if (("3P4uA5etnZi4AmBabKinq2bMiWU8KcnHZdH" == $match0))
187203 b
188204 case _ =>
189205 def
206+}
207+
208+
209+func getAssetString (assetId) = match assetId {
210+ case b: ByteVector =>
211+ toBase58String(b)
212+ case _ =>
213+ "WAVES"
190214 }
191215
192216
261285 let amp = tryGetString(K_amp, addr)
262286 let share = tryGetInteger(K_share, addr)
263287 let stake = tryGetInteger(K_staked, addr)
264- let $t063446395 = getWxPoolFees(address)
265- let poolFee = $t063446395._1
266- let protocolFee = $t063446395._2
288+ let $t069256976 = getWxPoolFees(address)
289+ let poolFee = $t069256976._1
290+ let protocolFee = $t069256976._2
267291 $Tuple2(((amountId + ",") + priceId), ((((((((amp + ",") + toString(share)) + ",") + toString(stake)) + ",") + poolFee) + ",") + protocolFee))
268292 }
269293
334358 let fee1 = tryGetInteger(K_fee_puz, addr)
335359 let feeToken = tryGetString(K_feeToken, addr)
336360 let assetsStr1 = tryGetString(K_asset_ids, addr)
337- let $t090319184 = if ((assetsStr1 == ""))
361+ let $t096129765 = if ((assetsStr1 == ""))
338362 then $Tuple2(tryGetString(getBPAK(address), this), 200)
339363 else $Tuple2(assetsStr1, fee1)
340- let assetsStr = $t090319184._1
341- let fee = $t090319184._2
364+ let assetsStr = $t096129765._1
365+ let fee = $t096129765._2
342366 let assets = split(assetsStr, ",")
343367 let assetsData = {
344368 let $l = assets
357381 let len = size(assetsData)
358382 let assetsArr = removeByIndex(assetsData, (len - 1))
359383 let assetsDataStr = makeString_2C(assetsArr, ";")
360- $Tuple3(fee, feeToken, assetsDataStr)
384+ let poolTokenIdStr = tryGetString(K_global_poolToken_id, addr)
385+ let poolTokenId = if ((poolTokenIdStr != ""))
386+ then poolTokenIdStr
387+ else {
388+ let poolTokenIdBinary = valueOrElse(getBinary(addr, K_global_poolToken_id_binary), fromBase58String("bubi"))
389+ getAssetString(poolTokenIdBinary)
390+ }
391+ let poolTokenAmount = tryGetInteger(K_global_poolToken_amount, addr)
392+ let kMult = tryGetIntegerWithDef(K_static_KMult, addr, 1)
393+ $Tuple6(fee, feeToken, poolTokenId, poolTokenAmount, kMult, assetsDataStr)
361394 }
362395
363396
373406 let maxOracleDelay = tryGetInteger(k_maxOracleDelay, addr)
374407 let oracleString = tryGetString(k_baseOracle, addr)
375408 let arr = split(oracleString, ",")
376- let $t01014510211 = $Tuple3(arr[0], arr[1], arr[2])
377- let oracleAddress = $t01014510211._1
378- let priceKey = $t01014510211._2
379- let blockKey = $t01014510211._3
409+ let $t01121411280 = $Tuple3(arr[0], arr[1], arr[2])
410+ let oracleAddress = $t01121411280._1
411+ let priceKey = $t01121411280._2
412+ let blockKey = $t01121411280._3
380413 let oracleAddr = Address(fromBase58String(oracleAddress))
381414 let oraclePrice = tryGetInteger(priceKey, oracleAddr)
382415 let curHeight = height
443476
444477
445478 func processWX (result,address) = {
446- let $t01258712630 = getWxData(address)
447- let assetsStr = $t01258712630._1
448- let datas = $t01258712630._2
479+ let $t01365613699 = getWxData(address)
480+ let assetsStr = $t01365613699._1
481+ let datas = $t01365613699._2
449482 let assetsString = getBalancesStr(assetsStr, address)
450483 let resItem = ((((address + "/") + assetsString) + "/") + datas)
451484 resItem :: result
460493
461494
462495 func processPZ (result,address) = {
463- let $t01303013084 = getPzData(address)
464- let fee = $t01303013084._1
465- let feeToken = $t01303013084._2
466- let assetsString = $t01303013084._3
496+ let $t01409914190 = getPzData(address)
497+ let fee = $t01409914190._1
498+ let feeToken = $t01409914190._2
499+ let poolTokenId = $t01409914190._3
500+ let poolTokenAmount = $t01409914190._4
501+ let kMult = $t01409914190._5
502+ let assetsString = $t01409914190._6
467503 let rebaData = getPzRebalanceData(address)
468- let resItem = ((((((((address + "/") + toString(fee)) + "/") + feeToken) + "/") + assetsString) + "/") + rebaData)
504+ let resItem = ((((((((((((((address + "/") + toString(fee)) + "/") + feeToken) + "/") + assetsString) + "/") + rebaData) + "/") + poolTokenId) + "/") + toString(poolTokenAmount)) + "/") + toString(kMult))
469505 resItem :: result
470506 }
471507
472508
473509 func processTSN (result,label) = {
474510 let arr = split(label, "_")
475- let $t01336613408 = $Tuple2(arr[0], arr[1])
476- let address = $t01336613408._1
477- let asset_id = $t01336613408._2
478- let $t01341413652 = getTsnData(address, asset_id)
479- let bsAstR = $t01341413652._1
480- let bsAstW = $t01341413652._2
481- let qtAstR = $t01341413652._3
482- let qtAstW = $t01341413652._4
483- let totalPositionSize = $t01341413652._5
484- let maxPriceImpact = $t01341413652._6
485- let maxPriceSpread = $t01341413652._7
486- let oraclePrice = $t01341413652._8
487- let excessBalance = $t01341413652._9
488- let freeBalance = $t01341413652._10
489- let maxSpotUtilization = $t01341413652._11
490- let totalSupply = $t01341413652._12
491- let rate = $t01341413652._13
492- let curHeight = $t01341413652._14
493- let lastHeight = $t01341413652._15
494- let maxOracleDelay = $t01341413652._16
511+ let $t01455214594 = $Tuple2(arr[0], arr[1])
512+ let address = $t01455214594._1
513+ let asset_id = $t01455214594._2
514+ let $t01460014838 = getTsnData(address, asset_id)
515+ let bsAstR = $t01460014838._1
516+ let bsAstW = $t01460014838._2
517+ let qtAstR = $t01460014838._3
518+ let qtAstW = $t01460014838._4
519+ let totalPositionSize = $t01460014838._5
520+ let maxPriceImpact = $t01460014838._6
521+ let maxPriceSpread = $t01460014838._7
522+ let oraclePrice = $t01460014838._8
523+ let excessBalance = $t01460014838._9
524+ let freeBalance = $t01460014838._10
525+ let maxSpotUtilization = $t01460014838._11
526+ let totalSupply = $t01460014838._12
527+ let rate = $t01460014838._13
528+ let curHeight = $t01460014838._14
529+ let lastHeight = $t01460014838._15
530+ let maxOracleDelay = $t01460014838._16
495531 let asset_decimals = if ((asset_id == "WAVES"))
496532 then 8
497533 else valueOrErrorMessage(assetInfo(fromBase58String(asset_id)), ("Ivalid asset " + asset_id)).decimals
502538
503539 func processPL (result,label) = {
504540 let arr = split(label, "-")
505- let $t01454214589 = $Tuple2(arr[0], arr[1])
506- let pool_address = $t01454214589._1
507- let asset_id = $t01454214589._2
508- let $t01459514752 = getPLData(pool_address, asset_id)
509- let asset_idd = $t01459514752._1
510- let plTokenId = $t01459514752._2
511- let sRate = $t01459514752._3
512- let bRate = $t01459514752._4
513- let totalSupplied = $t01459514752._5
514- let totalBorrowed = $t01459514752._6
515- let maxSupply = $t01459514752._7
516- let lastHeight = $t01459514752._8
517- let curHeight = $t01459514752._9
518- let price = $t01459514752._10
519- let decimals = $t01459514752._11
541+ let $t01572815775 = $Tuple2(arr[0], arr[1])
542+ let pool_address = $t01572815775._1
543+ let asset_id = $t01572815775._2
544+ let $t01578115938 = getPLData(pool_address, asset_id)
545+ let asset_idd = $t01578115938._1
546+ let plTokenId = $t01578115938._2
547+ let sRate = $t01578115938._3
548+ let bRate = $t01578115938._4
549+ let totalSupplied = $t01578115938._5
550+ let totalBorrowed = $t01578115938._6
551+ let maxSupply = $t01578115938._7
552+ let lastHeight = $t01578115938._8
553+ let curHeight = $t01578115938._9
554+ let price = $t01578115938._10
555+ let decimals = $t01578115938._11
520556 let resItem = ((((((((((((((((((((((label + ",") + asset_idd) + ",") + plTokenId) + ",") + toString(sRate)) + ",") + toString(bRate)) + ",") + toString(totalSupplied)) + ",") + toString(totalBorrowed)) + ",") + maxSupply) + ",") + toString(lastHeight)) + ",") + toString(curHeight)) + ",") + toString(price)) + ",") + toString(decimals))
521557 resItem :: result
522558 }
705741 let pepe_market = Address(fromBase58String(pepe_market_str))
706742 let storage = tryGetString(k_storage, pepe_market)
707743 let sarr = split_4C(storage, "__")
708- let $t01911019331 = $Tuple9(sarr[0], (sarr[1] == "1"), sarr[2], sarr[3], sarr[4], sarr[5], sarr[6], sarr[7], sarr[8])
709- let lpAssetId = $t01911019331._1
710- let unlocked = $t01911019331._2
711- let lpTotalSupply = $t01911019331._3
712- let lpFeeRate = $t01911019331._4
713- let protocolFeeRate = $t01911019331._5
714- let maxAllocAmplifier = $t01911019331._6
715- let weightAmplifier = $t01911019331._7
716- let slippageRate = $t01911019331._8
717- let feeMaxRate = $t01911019331._9
744+ let $t02033020551 = $Tuple9(sarr[0], (sarr[1] == "1"), sarr[2], sarr[3], sarr[4], sarr[5], sarr[6], sarr[7], sarr[8])
745+ let lpAssetId = $t02033020551._1
746+ let unlocked = $t02033020551._2
747+ let lpTotalSupply = $t02033020551._3
748+ let lpFeeRate = $t02033020551._4
749+ let protocolFeeRate = $t02033020551._5
750+ let maxAllocAmplifier = $t02033020551._6
751+ let weightAmplifier = $t02033020551._7
752+ let slippageRate = $t02033020551._8
753+ let feeMaxRate = $t02033020551._9
718754 let precision = tryGetInteger(k_precision, pepe_market)
719755 let sigmaFeePerLp = tryGetString(k_sigma_fee_per_lp, pepe_market)
720756 let paused = tryGetBool(k_paused, pepe_market)
721757 let totalLp = tryGetInteger(k_total_lp, pepe_market)
758+ let rewardBalances = tryGetString(k_reward_balances, pepe_market)
722759 let lpDecimals = getAssetDecimals(lpAssetId)
723760 let assets = loadPepeAssets(pepe_market)
724761 let decimals_arr = loadPepeDecimals(assets)
725- let $t01972419791 = loadPepeAssetWeights(pepe_market)
726- let assetWeights = $t01972419791._1
727- let sigmaWeight = $t01972419791._2
728- let $t01979719880 = loadPepeAssetBalances(pepe_market)
729- let prevAssetBalances = $t01979719880._1
730- let prevAssetTotalSupply = $t01979719880._2
762+ let $t02101521082 = loadPepeAssetWeights(pepe_market)
763+ let assetWeights = $t02101521082._1
764+ let sigmaWeight = $t02101521082._2
765+ let $t02108821171 = loadPepeAssetBalances(pepe_market)
766+ let prevAssetBalances = $t02108821171._1
767+ let prevAssetTotalSupply = $t02108821171._2
731768 let main_str = ((((((((((((((((((((((((((((((((lpAssetId + ",") + toString(unlocked)) + ",") + lpTotalSupply) + ",") + lpFeeRate) + ",") + protocolFeeRate) + ",") + maxAllocAmplifier) + ",") + weightAmplifier) + ",") + slippageRate) + ",") + feeMaxRate) + ",") + toString(sigmaWeight)) + ",") + toString(prevAssetTotalSupply)) + ",") + toString(precision)) + ",") + sigmaFeePerLp) + ",") + toString(totalLp)) + ",") + toString(paused)) + ",") + toString(lpDecimals)) + ",") + pepe_market_str)
732769 let assets_ids = makeString_11C(assets, ",")
733770 let assets_weights = makeString_11C(assetWeights, ",")
734771 let assets_balances = makeString_11C(prevAssetBalances, ",")
735772 let assets_decimals = makeString_11C(decimals_arr, ",")
736- let res = ((((((((main_str + "|") + assets_ids) + "|") + assets_weights) + "|") + assets_balances) + "|") + assets_decimals)
773+ let res = ((((((((((main_str + "|") + assets_ids) + "|") + assets_weights) + "|") + assets_balances) + "|") + assets_decimals) + "|") + rewardBalances)
737774 (result :+ res)
738775 }
739776
761798
762799 func getCombine (params) = {
763800 let paramsArr = split(params, "**")
764- let $t02134221424 = $Tuple3(paramsArr[0], paramsArr[1], paramsArr[2])
765- let tsnParams = $t02134221424._1
766- let plParams = $t02134221424._2
767- let pepeParams = $t02134221424._3
801+ let $t02268422766 = $Tuple3(paramsArr[0], paramsArr[1], paramsArr[2])
802+ let tsnParams = $t02268422766._1
803+ let plParams = $t02268422766._2
804+ let pepeParams = $t02268422766._3
768805 let tsnData = getTSN(tsnParams)
769806 let plData = getPL(plParams)
770807 let pepeData = getPepe(pepeParams)
771808 makeString_11C([tsnData, plData, pepeData], "**")
809+ }
810+
811+
812+func getEastAssetData (assetId) = {
813+ let params = tryGetString(("%s%s__asset__" + assetId), east_proxy)
814+ let paramsArr = split(params, "__")
815+ let $t02309723157 = $Tuple2(paramsArr[1], paramsArr[2])
816+ let enStr = $t02309723157._1
817+ let assetContractStr = $t02309723157._2
818+ let assetContract = Address(fromBase58String(assetContractStr))
819+ let enabled = if ((enStr == "ENABLED"))
820+ then true
821+ else false
822+ let backingRatio = tryGetInteger("%s__backingRatio", assetContract)
823+ let liquidationRatio = tryGetInteger("%s__liquidationRatio", assetContract)
824+ let oracleAddressStr = tryGetString("%s__oracleAddress", assetContract)
825+ let oracleAddress = Address(fromBase58String(oracleAddressStr))
826+ let ticker = tryGetString("%s__ticker", assetContract)
827+ let eastMintedLimit = tryGetInteger("%s__eastMintedLimit", assetContract)
828+ let price = tryGetInteger(("%s%s__price__" + ticker), oracleAddress)
829+ makeString_2C([toString(enabled), toString(backingRatio), toString(liquidationRatio), toString(eastMintedLimit), toString(price)], ",")
830+ }
831+
832+
833+func getEastLiquidation (params) = {
834+ let paramsArr = split(params, ",")
835+ func f (accum,next) = (accum :+ ((next + ",") + getEastAssetData(next)))
836+
837+ let res = {
838+ let $l = paramsArr
839+ let $s = size($l)
840+ let $acc0 = nil
841+ func $f0_1 ($a,$i) = if (($i >= $s))
842+ then $a
843+ else f($a, $l[$i])
844+
845+ func $f0_2 ($a,$i) = if (($i >= $s))
846+ then $a
847+ else throw("List size exceeds 10")
848+
849+ $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
850+ }
851+ let assetsData = makeString_11C(res, ";")
852+ let cumulativeFeeFraction = tryGetInteger("%s__cumulativeFeeFraction", east_proxy)
853+ let currTs = (lastBlock.timestamp / 1000)
854+ let fractionLastUpdated = tryGetIntegerWithDef("%s__fractionLastUpdated", east_proxy, currTs)
855+ let coordinatorStr = tryGetString("%s__coordinatorAddress", east_proxy)
856+ let coordinator = Address(fromBase58String(coordinatorStr))
857+ let stabFee = tryGetIntegerWithDef("%s__stabilityFee", coordinator, 10000000000)
858+ let liqBonus = tryGetInteger("%s__liquidationBonus", coordinator)
859+ let commonData = makeString([toString(cumulativeFeeFraction), toString(currTs), toString(fractionLastUpdated), toString(stabFee), toString(liqBonus)], ",")
860+ ((commonData + "|") + assetsData)
772861 }
773862
774863
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let rex = "3PGFHzVGT4NTigwCKP1NcwoXkodVZwvBuuU"
55
66 let swopfi_oracle = "3PEbqViERCoKnmcSULh6n2aiMvUdSQdCsom"
77
88 let pl_proxy = "3PJESVDTHRv8i83XbmHrRGQhDc5rgR3azQs"
99
1010 let orcl = "3P8d1E1BLKoD52y3bQJ1bDTd2TD1gpaLn9t"
1111
1212 let wx_factory_str = "3PCuHsTU58WKhCqotbcSwABvdPzqqVAbbTv"
1313
1414 let wx_swap_str = "3P68zNiufsu1viZpu1aY3cdahRRKcvV5N93"
1515
16+let east_proxy_str = "3PMtGnf3LXiEG6isDQLq1xMDKUqjQGqNHLb"
17+
18+let east_coordinator = "3PJ5CVRqW15nnkKNHJMzT3pPTtDJf71rGxK"
19+
1620 let wx_factory = Address(fromBase58String(wx_factory_str))
1721
1822 let wx_swap = Address(fromBase58String(wx_swap_str))
23+
24+let east_proxy = Address(fromBase58String(east_proxy_str))
1925
2026 let K_am_as_id = "%s__amountAsset"
2127
2228 let K_pr_as_id = "%s__priceAsset"
2329
2430 let K_amp = "%s__amp"
2531
2632 let K_share = "%s%s__shareAssetBalance__YiNbofFzC17jEHHCMwrRcpy9MrrjabMMLZxg8g5xmf7"
2733
2834 let K_staked = "%s%s__stakedBalance__WAVES"
2935
3036 let K_a_as_id = "A_asset_id"
3137
3238 let K_b_as_id = "B_asset_id"
3339
3440 let K_a_as_bal = "A_asset_balance"
3541
3642 let K_b_as_bal = "B_asset_balance"
3743
3844 let K_fee = "commission"
3945
4046 let K_asset_ids = "static_tokenIds"
4147
4248 let K_fee_puz = "static_fee"
4349
4450 let K_feeToken = "static_feeToken"
51+
52+let K_global_poolToken_id = "static_poolToken_idStr"
53+
54+let K_global_poolToken_id_binary = "global_poolToken_id"
55+
56+let K_global_poolToken_amount = "global_poolToken_amount"
57+
58+let K_static_KMult = "static_KMult"
4559
4660 let K_tmp_reblanceAssetIds = "tmp_rebalanceAssetIds"
4761
4862 let K_rebalance_inProgress = "rebalance_inProgress"
4963
5064 let K_rebalance_stepsDone = "rebalance_stepsDone"
5165
5266 let K_rebalance_stepsAmount = "rebalance_stepsAmount"
5367
5468 let K_rebalance_assetDeltas = "rebalance_assetDeltas"
5569
5670 let K_rebalance_attachedPayment = "rebalance_attachedPayment_"
5771
5872 let tsn_swapper = "3PKz5jnJLohF2GjShQ7bG5H4BebdoA98zZ2"
5973
6074 let tsn_swapper_addr = Address(fromBase58String(tsn_swapper))
6175
6276 let k_fee = "k_fee"
6377
6478 let k_rebate = "k_rebate"
6579
6680 let k_feeToStakersPercent = "k_feeToStakersPercent"
6781
6882 let k_excessBalance = "k_excessBalance"
6983
7084 let k_freeBalance = "k_freeBalance"
7185
7286 let k_maxSpotUtilization = "k_maxSpotUtilization"
7387
7488 let k_totalSupply = "k_totalSupply"
7589
7690 let k_rate = "k_rate"
7791
7892 let k_bsAstR = "k_bsAstR"
7993
8094 let k_bsAstW = "k_bsAstW"
8195
8296 let k_qtAstR = "k_qtAstR"
8397
8498 let k_qtAstW = "k_qtAstW"
8599
86100 let k_maxPriceImpact = "k_maxPriceImpact"
87101
88102 let k_maxPriceSpread = "k_maxPriceSpread"
89103
90104 let k_totalPositionSize = "k_totalPositionSize"
91105
92106 let k_baseOracle = "k_baseOracle"
93107
94108 let k_maxOracleDelay = "k_maxOracleDelay"
95109
96110 let k_storage = "STORAGE"
97111
98112 let k_assets = "ASSETS"
99113
100114 let k_status = "STATUS"
101115
102116 let k_paused = "PAUSED"
103117
104118 let k_asset_balances = "ASSET_BALANCES"
105119
106120 let k_asset_weights = "ASSET_WEIGHTS"
107121
108122 let k_lp_fee = "LP_FEE"
109123
110124 let k_protocol_fee = "PROTOCOL_FEE"
111125
112126 let k_precision = "PRECISION"
113127
114128 let k_sigma_fee_per_lp = "SIGMA_FEE_PER_LP"
115129
116130 let k_user_sigma_fee_per_lp = "USER_SIGMA_FEE_PER_LP"
117131
118132 let k_user_lp = "USER_LP"
119133
120134 let k_total_lp = "TOTAL_LP"
121135
122136 let k_user_profits = "USER_PROFITS"
123137
138+let k_reward_balances = "REWARD_BALANCES"
139+
124140 func get_domain (poolAddress) = match poolAddress {
125141 case _ =>
126142 if (("3P4uA5etnZi4AmBabKinq2bMiWU8KcnHZdH" == $match0))
127143 then "1"
128144 else "0"
129145 }
130146
131147
132148 func k_plToken (asset_id,domain) = ((("setup_pl_" + asset_id) + "_") + domain)
133149
134150
135151 func k_total_supplied (asset_id) = ("total_supplied_" + asset_id)
136152
137153
138154 func k_sRate (asset_id) = (asset_id + "_sRate")
139155
140156
141157 func k_total_borrowed (asset_id) = ("total_borrowed_" + asset_id)
142158
143159
144160 func k_bRate (asset_id) = (asset_id + "_bRate")
145161
146162
147163 func k_maxSupply (asset_id) = ("setup_maxSupply_" + asset_id)
148164
149165
150166 let k_lastRateHeight = "lastRateHeight"
151167
152168 func getPuzBalanceKey (assetId) = (("global_" + assetId) + "_balance")
153169
154170
155171 func getPuzWeightKey (assetId) = (("static_" + assetId) + "_weight")
156172
157173
158174 func getBPAK (address) = (address + "_staticAssetsIds")
159175
160176
161177 func tryGetString (key,address) = match getString(address, key) {
162178 case b: String =>
163179 b
164180 case _ =>
165181 ""
166182 }
167183
168184
169185 func tryGetBool (key,address) = match getBoolean(address, key) {
170186 case b: Boolean =>
171187 b
172188 case _ =>
173189 false
174190 }
175191
176192
177193 func tryGetInteger (key,address) = match getInteger(address, key) {
178194 case b: Int =>
179195 b
180196 case _ =>
181197 0
182198 }
183199
184200
185201 func tryGetIntegerWithDef (key,address,def) = match getInteger(address, key) {
186202 case b: Int =>
187203 b
188204 case _ =>
189205 def
206+}
207+
208+
209+func getAssetString (assetId) = match assetId {
210+ case b: ByteVector =>
211+ toBase58String(b)
212+ case _ =>
213+ "WAVES"
190214 }
191215
192216
193217 func getWxDefaultFees () = {
194218 let poolFee = tryGetIntegerWithDef("%s__poolFee", wx_swap, 200000)
195219 let protocolFee = tryGetIntegerWithDef("%s__protocolFee", wx_swap, 200000)
196220 $Tuple2(toString(poolFee), toString(protocolFee))
197221 }
198222
199223
200224 func getWxPoolFees (address) = {
201225 let feesKey = ("%s%s__swapFee__" + address)
202226 let fees = tryGetString(feesKey, wx_factory)
203227 if ((fees == ""))
204228 then getWxDefaultFees()
205229 else {
206230 let splittedFees = split(fees, "__")
207231 $Tuple2(splittedFees[1], splittedFees[2])
208232 }
209233 }
210234
211235
212236 func getAssetBalance (address,assetId) = {
213237 let a = assetBalance(address, assetId)
214238 a
215239 }
216240
217241
218242 func getWavesBalance (address) = {
219243 let w = wavesBalance(address).available
220244 w
221245 }
222246
223247
224248 func getBalance (result,assetId) = {
225249 let address = take(result, 35)
226250 let addr = Address(fromBase58String(address))
227251 let balance = if ((assetId == "WAVES"))
228252 then getWavesBalance(addr)
229253 else {
230254 let aId = fromBase58String(assetId)
231255 getAssetBalance(addr, aId)
232256 }
233257 let len = size(result)
234258 (((((address + drop(result, 35)) + assetId) + ":") + toString(balance)) + ",")
235259 }
236260
237261
238262 func getAddressBalance (addr,assetId) = {
239263 let balance = if ((assetId == "WAVES"))
240264 then getWavesBalance(addr)
241265 else {
242266 let aId = fromBase58String(assetId)
243267 getAssetBalance(addr, aId)
244268 }
245269 balance
246270 }
247271
248272
249273 func getAssetDecimals (assetIdStr) = {
250274 let decimals = if ((assetIdStr == "WAVES"))
251275 then 8
252276 else value(assetInfo(fromBase58String(assetIdStr))).decimals
253277 decimals
254278 }
255279
256280
257281 func getWxData (address) = {
258282 let addr = Address(fromBase58String(address))
259283 let amountId = tryGetString(K_am_as_id, addr)
260284 let priceId = tryGetString(K_pr_as_id, addr)
261285 let amp = tryGetString(K_amp, addr)
262286 let share = tryGetInteger(K_share, addr)
263287 let stake = tryGetInteger(K_staked, addr)
264- let $t063446395 = getWxPoolFees(address)
265- let poolFee = $t063446395._1
266- let protocolFee = $t063446395._2
288+ let $t069256976 = getWxPoolFees(address)
289+ let poolFee = $t069256976._1
290+ let protocolFee = $t069256976._2
267291 $Tuple2(((amountId + ",") + priceId), ((((((((amp + ",") + toString(share)) + ",") + toString(stake)) + ",") + poolFee) + ",") + protocolFee))
268292 }
269293
270294
271295 func getSwData (address) = {
272296 let addr = Address(fromBase58String(address))
273297 let A_id = tryGetString(K_a_as_id, addr)
274298 let B_id = tryGetString(K_b_as_id, addr)
275299 let A_balance = tryGetInteger(K_a_as_bal, addr)
276300 let B_balance = tryGetInteger(K_b_as_bal, addr)
277301 let fee = tryGetIntegerWithDef(K_fee, addr, 6000)
278302 let deprecated = tryGetBool(("deprecated_" + address), Address(fromBase58String(swopfi_oracle)))
279303 ((((((((((A_id + ":") + toString(A_balance)) + ",") + B_id) + ":") + toString(B_balance)) + ",") + toString(fee)) + ",") + toString(deprecated))
280304 }
281305
282306
283307 func getPzRebalanceData (address) = {
284308 let addr = Address(fromBase58String(address))
285309 let tmpAssetsStr = valueOrElse(getString(addr, K_tmp_reblanceAssetIds), "")
286310 let inProgress = valueOrElse(getBoolean(addr, K_rebalance_inProgress), false)
287311 let stepsDone = valueOrElse(getInteger(addr, K_rebalance_stepsDone), 0)
288312 let stepsAmount = valueOrElse(getInteger(addr, K_rebalance_stepsAmount), 0)
289313 let assetDeltas = valueOrElse(getString(addr, K_rebalance_assetDeltas), "")
290314 let tmpAssets = split(tmpAssetsStr, ",")
291315 func collectPayments (accum,assetId) = {
292316 let key = (K_rebalance_attachedPayment + assetId)
293317 let val = tryGetInteger(key, addr)
294318 if ((val != 0))
295319 then (accum ++ [((key + "*") + toString(val))])
296320 else accum
297321 }
298322
299323 let rebalancePayments = {
300324 let $l = tmpAssets
301325 let $s = size($l)
302326 let $acc0 = nil
303327 func $f0_1 ($a,$i) = if (($i >= $s))
304328 then $a
305329 else collectPayments($a, $l[$i])
306330
307331 func $f0_2 ($a,$i) = if (($i >= $s))
308332 then $a
309333 else throw("List size exceeds 10")
310334
311335 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
312336 }
313337 let rebalancePaymentsStr = makeString(rebalancePayments, ",")
314338 ((((((((((tmpAssetsStr + ";") + toString(inProgress)) + ";") + toString(stepsDone)) + ";") + toString(stepsAmount)) + ";") + assetDeltas) + ";") + rebalancePaymentsStr)
315339 }
316340
317341
318342 func collectPuzAssetsData (result,assetId) = {
319343 let len = size(result)
320344 let address = result[(len - 1)]
321345 let addr = Address(fromBase58String(address))
322346 let balanceKey = getPuzBalanceKey(assetId)
323347 let weightKey = getPuzWeightKey(assetId)
324348 let balance = tryGetInteger(balanceKey, addr)
325349 let weight = tryGetInteger(weightKey, addr)
326350 let realBalance = getAddressBalance(addr, assetId)
327351 let res = ((((((assetId + ",") + toString(balance)) + ",") + toString(weight)) + ",") + toString(realBalance))
328352 res :: result
329353 }
330354
331355
332356 func getPzData (address) = {
333357 let addr = Address(fromBase58String(address))
334358 let fee1 = tryGetInteger(K_fee_puz, addr)
335359 let feeToken = tryGetString(K_feeToken, addr)
336360 let assetsStr1 = tryGetString(K_asset_ids, addr)
337- let $t090319184 = if ((assetsStr1 == ""))
361+ let $t096129765 = if ((assetsStr1 == ""))
338362 then $Tuple2(tryGetString(getBPAK(address), this), 200)
339363 else $Tuple2(assetsStr1, fee1)
340- let assetsStr = $t090319184._1
341- let fee = $t090319184._2
364+ let assetsStr = $t096129765._1
365+ let fee = $t096129765._2
342366 let assets = split(assetsStr, ",")
343367 let assetsData = {
344368 let $l = assets
345369 let $s = size($l)
346370 let $acc0 = [address]
347371 func $f0_1 ($a,$i) = if (($i >= $s))
348372 then $a
349373 else collectPuzAssetsData($a, $l[$i])
350374
351375 func $f0_2 ($a,$i) = if (($i >= $s))
352376 then $a
353377 else throw("List size exceeds 10")
354378
355379 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
356380 }
357381 let len = size(assetsData)
358382 let assetsArr = removeByIndex(assetsData, (len - 1))
359383 let assetsDataStr = makeString_2C(assetsArr, ";")
360- $Tuple3(fee, feeToken, assetsDataStr)
384+ let poolTokenIdStr = tryGetString(K_global_poolToken_id, addr)
385+ let poolTokenId = if ((poolTokenIdStr != ""))
386+ then poolTokenIdStr
387+ else {
388+ let poolTokenIdBinary = valueOrElse(getBinary(addr, K_global_poolToken_id_binary), fromBase58String("bubi"))
389+ getAssetString(poolTokenIdBinary)
390+ }
391+ let poolTokenAmount = tryGetInteger(K_global_poolToken_amount, addr)
392+ let kMult = tryGetIntegerWithDef(K_static_KMult, addr, 1)
393+ $Tuple6(fee, feeToken, poolTokenId, poolTokenAmount, kMult, assetsDataStr)
361394 }
362395
363396
364397 func getTsnData (address,asset_id) = {
365398 let addr = Address(fromBase58String(address))
366399 let bsAstR = tryGetInteger(k_bsAstR, addr)
367400 let bsAstW = tryGetInteger(k_bsAstW, addr)
368401 let qtAstR = tryGetInteger(k_qtAstR, addr)
369402 let qtAstW = tryGetInteger(k_qtAstW, addr)
370403 let maxPriceImpact = tryGetInteger(k_maxPriceImpact, addr)
371404 let maxPriceSpread = tryGetInteger(k_maxPriceSpread, addr)
372405 let totalPositionSize = tryGetInteger(k_totalPositionSize, addr)
373406 let maxOracleDelay = tryGetInteger(k_maxOracleDelay, addr)
374407 let oracleString = tryGetString(k_baseOracle, addr)
375408 let arr = split(oracleString, ",")
376- let $t01014510211 = $Tuple3(arr[0], arr[1], arr[2])
377- let oracleAddress = $t01014510211._1
378- let priceKey = $t01014510211._2
379- let blockKey = $t01014510211._3
409+ let $t01121411280 = $Tuple3(arr[0], arr[1], arr[2])
410+ let oracleAddress = $t01121411280._1
411+ let priceKey = $t01121411280._2
412+ let blockKey = $t01121411280._3
380413 let oracleAddr = Address(fromBase58String(oracleAddress))
381414 let oraclePrice = tryGetInteger(priceKey, oracleAddr)
382415 let curHeight = height
383416 let lastHeight = if ((blockKey != ""))
384417 then tryGetInteger(blockKey, oracleAddr)
385418 else curHeight
386419 let vault = tryGetString(("k_asset_vault_" + asset_id), tsn_swapper_addr)
387420 let vault_addr = Address(fromBase58String(vault))
388421 let excessBalance = tryGetInteger(k_excessBalance, vault_addr)
389422 let freeBalance = tryGetInteger(k_freeBalance, vault_addr)
390423 let maxSpotUtilization = tryGetInteger(k_maxSpotUtilization, vault_addr)
391424 let totalSupply = tryGetInteger(k_totalSupply, vault_addr)
392425 let rate = tryGetInteger(k_rate, vault_addr)
393426 $Tuple16(bsAstR, bsAstW, qtAstR, qtAstW, totalPositionSize, maxPriceImpact, maxPriceSpread, oraclePrice, excessBalance, freeBalance, maxSpotUtilization, totalSupply, rate, curHeight, lastHeight, maxOracleDelay)
394427 }
395428
396429
397430 func getPrice (assetId) = {
398431 let price = tryGetInteger((assetId + "_twap5B"), Address(fromBase58String(orcl)))
399432 price
400433 }
401434
402435
403436 func getPLData (pool_address,asset_id) = {
404437 let domain = get_domain(pool_address)
405438 let poolAdr = Address(fromBase58String(pool_address))
406439 let plTokenId = tryGetString(k_plToken(asset_id, domain), Address(fromBase58String(pl_proxy)))
407440 let sRate = tryGetInteger(k_sRate(asset_id), poolAdr)
408441 let bRate = tryGetInteger(k_bRate(asset_id), poolAdr)
409442 let totalSupplied = tryGetInteger(k_total_supplied(asset_id), poolAdr)
410443 let totalBorrowed = tryGetInteger(k_total_borrowed(asset_id), poolAdr)
411444 let maxSupply = tryGetString(k_maxSupply(asset_id), poolAdr)
412445 let lastHeight = tryGetInteger(k_lastRateHeight, poolAdr)
413446 let curHeight = height
414447 let price = getPrice(asset_id)
415448 let decimals = getAssetDecimals(asset_id)
416449 $Tuple11(asset_id, plTokenId, sRate, bRate, totalSupplied, totalBorrowed, maxSupply, lastHeight, curHeight, price, decimals)
417450 }
418451
419452
420453 func test_loop (result,ele) = ele :: result
421454
422455
423456 func getBalancesStr (assetsStr,address) = {
424457 let assets = split_4C(assetsStr, ",")
425458 let res = {
426459 let $l = assets
427460 let $s = size($l)
428461 let $acc0 = address
429462 func $f0_1 ($a,$i) = if (($i >= $s))
430463 then $a
431464 else getBalance($a, $l[$i])
432465
433466 func $f0_2 ($a,$i) = if (($i >= $s))
434467 then $a
435468 else throw("List size exceeds 2")
436469
437470 $f0_2($f0_1($f0_1($acc0, 0), 1), 2)
438471 }
439472 let balances = drop(res, 35)
440473 let bals = dropRight(balances, 1)
441474 bals
442475 }
443476
444477
445478 func processWX (result,address) = {
446- let $t01258712630 = getWxData(address)
447- let assetsStr = $t01258712630._1
448- let datas = $t01258712630._2
479+ let $t01365613699 = getWxData(address)
480+ let assetsStr = $t01365613699._1
481+ let datas = $t01365613699._2
449482 let assetsString = getBalancesStr(assetsStr, address)
450483 let resItem = ((((address + "/") + assetsString) + "/") + datas)
451484 resItem :: result
452485 }
453486
454487
455488 func processSW (result,address) = {
456489 let assetsString = getSwData(address)
457490 let resItem = ((address + "/") + assetsString)
458491 resItem :: result
459492 }
460493
461494
462495 func processPZ (result,address) = {
463- let $t01303013084 = getPzData(address)
464- let fee = $t01303013084._1
465- let feeToken = $t01303013084._2
466- let assetsString = $t01303013084._3
496+ let $t01409914190 = getPzData(address)
497+ let fee = $t01409914190._1
498+ let feeToken = $t01409914190._2
499+ let poolTokenId = $t01409914190._3
500+ let poolTokenAmount = $t01409914190._4
501+ let kMult = $t01409914190._5
502+ let assetsString = $t01409914190._6
467503 let rebaData = getPzRebalanceData(address)
468- let resItem = ((((((((address + "/") + toString(fee)) + "/") + feeToken) + "/") + assetsString) + "/") + rebaData)
504+ let resItem = ((((((((((((((address + "/") + toString(fee)) + "/") + feeToken) + "/") + assetsString) + "/") + rebaData) + "/") + poolTokenId) + "/") + toString(poolTokenAmount)) + "/") + toString(kMult))
469505 resItem :: result
470506 }
471507
472508
473509 func processTSN (result,label) = {
474510 let arr = split(label, "_")
475- let $t01336613408 = $Tuple2(arr[0], arr[1])
476- let address = $t01336613408._1
477- let asset_id = $t01336613408._2
478- let $t01341413652 = getTsnData(address, asset_id)
479- let bsAstR = $t01341413652._1
480- let bsAstW = $t01341413652._2
481- let qtAstR = $t01341413652._3
482- let qtAstW = $t01341413652._4
483- let totalPositionSize = $t01341413652._5
484- let maxPriceImpact = $t01341413652._6
485- let maxPriceSpread = $t01341413652._7
486- let oraclePrice = $t01341413652._8
487- let excessBalance = $t01341413652._9
488- let freeBalance = $t01341413652._10
489- let maxSpotUtilization = $t01341413652._11
490- let totalSupply = $t01341413652._12
491- let rate = $t01341413652._13
492- let curHeight = $t01341413652._14
493- let lastHeight = $t01341413652._15
494- let maxOracleDelay = $t01341413652._16
511+ let $t01455214594 = $Tuple2(arr[0], arr[1])
512+ let address = $t01455214594._1
513+ let asset_id = $t01455214594._2
514+ let $t01460014838 = getTsnData(address, asset_id)
515+ let bsAstR = $t01460014838._1
516+ let bsAstW = $t01460014838._2
517+ let qtAstR = $t01460014838._3
518+ let qtAstW = $t01460014838._4
519+ let totalPositionSize = $t01460014838._5
520+ let maxPriceImpact = $t01460014838._6
521+ let maxPriceSpread = $t01460014838._7
522+ let oraclePrice = $t01460014838._8
523+ let excessBalance = $t01460014838._9
524+ let freeBalance = $t01460014838._10
525+ let maxSpotUtilization = $t01460014838._11
526+ let totalSupply = $t01460014838._12
527+ let rate = $t01460014838._13
528+ let curHeight = $t01460014838._14
529+ let lastHeight = $t01460014838._15
530+ let maxOracleDelay = $t01460014838._16
495531 let asset_decimals = if ((asset_id == "WAVES"))
496532 then 8
497533 else valueOrErrorMessage(assetInfo(fromBase58String(asset_id)), ("Ivalid asset " + asset_id)).decimals
498534 let resItem = ((((((((((((((((((((((((((((((((((((address + ",") + asset_id) + ",") + toString(asset_decimals)) + ",") + toString(bsAstR)) + ",") + toString(bsAstW)) + ",") + toString(qtAstR)) + ",") + toString(qtAstW)) + ",") + toString(totalPositionSize)) + ",") + toString(maxPriceImpact)) + ",") + toString(maxPriceSpread)) + ",") + toString(oraclePrice)) + ",") + toString(excessBalance)) + ",") + toString(freeBalance)) + ",") + toString(maxSpotUtilization)) + ",") + toString(totalSupply)) + ",") + toString(rate)) + ",") + toString(curHeight)) + ",") + toString(lastHeight)) + ",") + toString(maxOracleDelay))
499535 resItem :: result
500536 }
501537
502538
503539 func processPL (result,label) = {
504540 let arr = split(label, "-")
505- let $t01454214589 = $Tuple2(arr[0], arr[1])
506- let pool_address = $t01454214589._1
507- let asset_id = $t01454214589._2
508- let $t01459514752 = getPLData(pool_address, asset_id)
509- let asset_idd = $t01459514752._1
510- let plTokenId = $t01459514752._2
511- let sRate = $t01459514752._3
512- let bRate = $t01459514752._4
513- let totalSupplied = $t01459514752._5
514- let totalBorrowed = $t01459514752._6
515- let maxSupply = $t01459514752._7
516- let lastHeight = $t01459514752._8
517- let curHeight = $t01459514752._9
518- let price = $t01459514752._10
519- let decimals = $t01459514752._11
541+ let $t01572815775 = $Tuple2(arr[0], arr[1])
542+ let pool_address = $t01572815775._1
543+ let asset_id = $t01572815775._2
544+ let $t01578115938 = getPLData(pool_address, asset_id)
545+ let asset_idd = $t01578115938._1
546+ let plTokenId = $t01578115938._2
547+ let sRate = $t01578115938._3
548+ let bRate = $t01578115938._4
549+ let totalSupplied = $t01578115938._5
550+ let totalBorrowed = $t01578115938._6
551+ let maxSupply = $t01578115938._7
552+ let lastHeight = $t01578115938._8
553+ let curHeight = $t01578115938._9
554+ let price = $t01578115938._10
555+ let decimals = $t01578115938._11
520556 let resItem = ((((((((((((((((((((((label + ",") + asset_idd) + ",") + plTokenId) + ",") + toString(sRate)) + ",") + toString(bRate)) + ",") + toString(totalSupplied)) + ",") + toString(totalBorrowed)) + ",") + maxSupply) + ",") + toString(lastHeight)) + ",") + toString(curHeight)) + ",") + toString(price)) + ",") + toString(decimals))
521557 resItem :: result
522558 }
523559
524560
525561 func getWX (params) = {
526562 let pools = split_51C(params, ",")
527563 let resArr = {
528564 let $l = pools
529565 let $s = size($l)
530566 let $acc0 = nil
531567 func $f0_1 ($a,$i) = if (($i >= $s))
532568 then $a
533569 else processWX($a, $l[$i])
534570
535571 func $f0_2 ($a,$i) = if (($i >= $s))
536572 then $a
537573 else throw("List size exceeds 120")
538574
539575 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100), 101), 102), 103), 104), 105), 106), 107), 108), 109), 110), 111), 112), 113), 114), 115), 116), 117), 118), 119), 120)
540576 }
541577 let result = makeString_11C(resArr, "|")
542578 result
543579 }
544580
545581
546582 func getSW (params) = {
547583 let pools = split_4C(params, ",")
548584 let resArr = {
549585 let $l = pools
550586 let $s = size($l)
551587 let $acc0 = nil
552588 func $f0_1 ($a,$i) = if (($i >= $s))
553589 then $a
554590 else processSW($a, $l[$i])
555591
556592 func $f0_2 ($a,$i) = if (($i >= $s))
557593 then $a
558594 else throw("List size exceeds 100")
559595
560596 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
561597 }
562598 let result = makeString_11C(resArr, "|")
563599 result
564600 }
565601
566602
567603 func getPZ (params) = {
568604 let pools = split_4C(params, ",")
569605 let resArr = {
570606 let $l = pools
571607 let $s = size($l)
572608 let $acc0 = nil
573609 func $f0_1 ($a,$i) = if (($i >= $s))
574610 then $a
575611 else processPZ($a, $l[$i])
576612
577613 func $f0_2 ($a,$i) = if (($i >= $s))
578614 then $a
579615 else throw("List size exceeds 100")
580616
581617 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
582618 }
583619 let result = makeString_11C(resArr, "|")
584620 result
585621 }
586622
587623
588624 func getTSN (params) = {
589625 let vaults_labels = split(params, ",")
590626 let resArr = {
591627 let $l = vaults_labels
592628 let $s = size($l)
593629 let $acc0 = nil
594630 func $f0_1 ($a,$i) = if (($i >= $s))
595631 then $a
596632 else processTSN($a, $l[$i])
597633
598634 func $f0_2 ($a,$i) = if (($i >= $s))
599635 then $a
600636 else throw("List size exceeds 10")
601637
602638 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
603639 }
604640 let result = makeString_2C(resArr, "|")
605641 let fee = tryGetInteger(k_fee, tsn_swapper_addr)
606642 let rebate = tryGetInteger(k_rebate, tsn_swapper_addr)
607643 let feeToStakersPercent = tryGetInteger(k_feeToStakersPercent, tsn_swapper_addr)
608644 ((((((toString(fee) + ",") + toString(rebate)) + ",") + toString(feeToStakersPercent)) + "/") + result)
609645 }
610646
611647
612648 func getPL (params) = {
613649 let pools = split(params, ",")
614650 let resArr = {
615651 let $l = pools
616652 let $s = size($l)
617653 let $acc0 = nil
618654 func $f0_1 ($a,$i) = if (($i >= $s))
619655 then $a
620656 else processPL($a, $l[$i])
621657
622658 func $f0_2 ($a,$i) = if (($i >= $s))
623659 then $a
624660 else throw("List size exceeds 10")
625661
626662 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
627663 }
628664 let result = makeString_2C(resArr, "|")
629665 result
630666 }
631667
632668
633669 func loadPepeAssets (pepe_market) = {
634670 let assets = tryGetString(k_assets, pepe_market)
635671 split_4C(assets, "__")
636672 }
637673
638674
639675 func loadPepeAssetBalances (pepe_market) = {
640676 func foldFunc (acc,elem) = {
641677 let balance = parseIntValue(elem)
642678 $Tuple2((acc._1 :+ elem), (acc._2 + balance))
643679 }
644680
645681 let assetBalances = tryGetString(k_asset_balances, pepe_market)
646682 let $l = split_51C(assetBalances, "__")
647683 let $s = size($l)
648684 let $acc0 = $Tuple2(nil, 0)
649685 func $f0_1 ($a,$i) = if (($i >= $s))
650686 then $a
651687 else foldFunc($a, $l[$i])
652688
653689 func $f0_2 ($a,$i) = if (($i >= $s))
654690 then $a
655691 else throw("List size exceeds 10")
656692
657693 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
658694 }
659695
660696
661697 func loadPepeAssetWeights (pepe_market) = {
662698 func foldFunc (acc,elem) = {
663699 let weight = parseIntValue(elem)
664700 $Tuple2((acc._1 :+ elem), (acc._2 + weight))
665701 }
666702
667703 let assetWeights = tryGetString(k_asset_weights, pepe_market)
668704 let $l = split_4C(assetWeights, "__")
669705 let $s = size($l)
670706 let $acc0 = $Tuple2(nil, 0)
671707 func $f0_1 ($a,$i) = if (($i >= $s))
672708 then $a
673709 else foldFunc($a, $l[$i])
674710
675711 func $f0_2 ($a,$i) = if (($i >= $s))
676712 then $a
677713 else throw("List size exceeds 10")
678714
679715 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
680716 }
681717
682718
683719 func loadPepeDecimals (assets) = {
684720 func getDecs (acc,item) = {
685721 let decimals = getAssetDecimals(item)
686722 (acc :+ toString(decimals))
687723 }
688724
689725 let $l = assets
690726 let $s = size($l)
691727 let $acc0 = nil
692728 func $f0_1 ($a,$i) = if (($i >= $s))
693729 then $a
694730 else getDecs($a, $l[$i])
695731
696732 func $f0_2 ($a,$i) = if (($i >= $s))
697733 then $a
698734 else throw("List size exceeds 11")
699735
700736 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11)
701737 }
702738
703739
704740 func processPepe (result,pepe_market_str) = {
705741 let pepe_market = Address(fromBase58String(pepe_market_str))
706742 let storage = tryGetString(k_storage, pepe_market)
707743 let sarr = split_4C(storage, "__")
708- let $t01911019331 = $Tuple9(sarr[0], (sarr[1] == "1"), sarr[2], sarr[3], sarr[4], sarr[5], sarr[6], sarr[7], sarr[8])
709- let lpAssetId = $t01911019331._1
710- let unlocked = $t01911019331._2
711- let lpTotalSupply = $t01911019331._3
712- let lpFeeRate = $t01911019331._4
713- let protocolFeeRate = $t01911019331._5
714- let maxAllocAmplifier = $t01911019331._6
715- let weightAmplifier = $t01911019331._7
716- let slippageRate = $t01911019331._8
717- let feeMaxRate = $t01911019331._9
744+ let $t02033020551 = $Tuple9(sarr[0], (sarr[1] == "1"), sarr[2], sarr[3], sarr[4], sarr[5], sarr[6], sarr[7], sarr[8])
745+ let lpAssetId = $t02033020551._1
746+ let unlocked = $t02033020551._2
747+ let lpTotalSupply = $t02033020551._3
748+ let lpFeeRate = $t02033020551._4
749+ let protocolFeeRate = $t02033020551._5
750+ let maxAllocAmplifier = $t02033020551._6
751+ let weightAmplifier = $t02033020551._7
752+ let slippageRate = $t02033020551._8
753+ let feeMaxRate = $t02033020551._9
718754 let precision = tryGetInteger(k_precision, pepe_market)
719755 let sigmaFeePerLp = tryGetString(k_sigma_fee_per_lp, pepe_market)
720756 let paused = tryGetBool(k_paused, pepe_market)
721757 let totalLp = tryGetInteger(k_total_lp, pepe_market)
758+ let rewardBalances = tryGetString(k_reward_balances, pepe_market)
722759 let lpDecimals = getAssetDecimals(lpAssetId)
723760 let assets = loadPepeAssets(pepe_market)
724761 let decimals_arr = loadPepeDecimals(assets)
725- let $t01972419791 = loadPepeAssetWeights(pepe_market)
726- let assetWeights = $t01972419791._1
727- let sigmaWeight = $t01972419791._2
728- let $t01979719880 = loadPepeAssetBalances(pepe_market)
729- let prevAssetBalances = $t01979719880._1
730- let prevAssetTotalSupply = $t01979719880._2
762+ let $t02101521082 = loadPepeAssetWeights(pepe_market)
763+ let assetWeights = $t02101521082._1
764+ let sigmaWeight = $t02101521082._2
765+ let $t02108821171 = loadPepeAssetBalances(pepe_market)
766+ let prevAssetBalances = $t02108821171._1
767+ let prevAssetTotalSupply = $t02108821171._2
731768 let main_str = ((((((((((((((((((((((((((((((((lpAssetId + ",") + toString(unlocked)) + ",") + lpTotalSupply) + ",") + lpFeeRate) + ",") + protocolFeeRate) + ",") + maxAllocAmplifier) + ",") + weightAmplifier) + ",") + slippageRate) + ",") + feeMaxRate) + ",") + toString(sigmaWeight)) + ",") + toString(prevAssetTotalSupply)) + ",") + toString(precision)) + ",") + sigmaFeePerLp) + ",") + toString(totalLp)) + ",") + toString(paused)) + ",") + toString(lpDecimals)) + ",") + pepe_market_str)
732769 let assets_ids = makeString_11C(assets, ",")
733770 let assets_weights = makeString_11C(assetWeights, ",")
734771 let assets_balances = makeString_11C(prevAssetBalances, ",")
735772 let assets_decimals = makeString_11C(decimals_arr, ",")
736- let res = ((((((((main_str + "|") + assets_ids) + "|") + assets_weights) + "|") + assets_balances) + "|") + assets_decimals)
773+ let res = ((((((((((main_str + "|") + assets_ids) + "|") + assets_weights) + "|") + assets_balances) + "|") + assets_decimals) + "|") + rewardBalances)
737774 (result :+ res)
738775 }
739776
740777
741778 func getPepe (params) = {
742779 let addresses = split(params, ",")
743780 let resArr = {
744781 let $l = addresses
745782 let $s = size($l)
746783 let $acc0 = nil
747784 func $f0_1 ($a,$i) = if (($i >= $s))
748785 then $a
749786 else processPepe($a, $l[$i])
750787
751788 func $f0_2 ($a,$i) = if (($i >= $s))
752789 then $a
753790 else throw("List size exceeds 10")
754791
755792 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
756793 }
757794 let result = makeString_11C(resArr, ";")
758795 result
759796 }
760797
761798
762799 func getCombine (params) = {
763800 let paramsArr = split(params, "**")
764- let $t02134221424 = $Tuple3(paramsArr[0], paramsArr[1], paramsArr[2])
765- let tsnParams = $t02134221424._1
766- let plParams = $t02134221424._2
767- let pepeParams = $t02134221424._3
801+ let $t02268422766 = $Tuple3(paramsArr[0], paramsArr[1], paramsArr[2])
802+ let tsnParams = $t02268422766._1
803+ let plParams = $t02268422766._2
804+ let pepeParams = $t02268422766._3
768805 let tsnData = getTSN(tsnParams)
769806 let plData = getPL(plParams)
770807 let pepeData = getPepe(pepeParams)
771808 makeString_11C([tsnData, plData, pepeData], "**")
809+ }
810+
811+
812+func getEastAssetData (assetId) = {
813+ let params = tryGetString(("%s%s__asset__" + assetId), east_proxy)
814+ let paramsArr = split(params, "__")
815+ let $t02309723157 = $Tuple2(paramsArr[1], paramsArr[2])
816+ let enStr = $t02309723157._1
817+ let assetContractStr = $t02309723157._2
818+ let assetContract = Address(fromBase58String(assetContractStr))
819+ let enabled = if ((enStr == "ENABLED"))
820+ then true
821+ else false
822+ let backingRatio = tryGetInteger("%s__backingRatio", assetContract)
823+ let liquidationRatio = tryGetInteger("%s__liquidationRatio", assetContract)
824+ let oracleAddressStr = tryGetString("%s__oracleAddress", assetContract)
825+ let oracleAddress = Address(fromBase58String(oracleAddressStr))
826+ let ticker = tryGetString("%s__ticker", assetContract)
827+ let eastMintedLimit = tryGetInteger("%s__eastMintedLimit", assetContract)
828+ let price = tryGetInteger(("%s%s__price__" + ticker), oracleAddress)
829+ makeString_2C([toString(enabled), toString(backingRatio), toString(liquidationRatio), toString(eastMintedLimit), toString(price)], ",")
830+ }
831+
832+
833+func getEastLiquidation (params) = {
834+ let paramsArr = split(params, ",")
835+ func f (accum,next) = (accum :+ ((next + ",") + getEastAssetData(next)))
836+
837+ let res = {
838+ let $l = paramsArr
839+ let $s = size($l)
840+ let $acc0 = nil
841+ func $f0_1 ($a,$i) = if (($i >= $s))
842+ then $a
843+ else f($a, $l[$i])
844+
845+ func $f0_2 ($a,$i) = if (($i >= $s))
846+ then $a
847+ else throw("List size exceeds 10")
848+
849+ $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
850+ }
851+ let assetsData = makeString_11C(res, ";")
852+ let cumulativeFeeFraction = tryGetInteger("%s__cumulativeFeeFraction", east_proxy)
853+ let currTs = (lastBlock.timestamp / 1000)
854+ let fractionLastUpdated = tryGetIntegerWithDef("%s__fractionLastUpdated", east_proxy, currTs)
855+ let coordinatorStr = tryGetString("%s__coordinatorAddress", east_proxy)
856+ let coordinator = Address(fromBase58String(coordinatorStr))
857+ let stabFee = tryGetIntegerWithDef("%s__stabilityFee", coordinator, 10000000000)
858+ let liqBonus = tryGetInteger("%s__liquidationBonus", coordinator)
859+ let commonData = makeString([toString(cumulativeFeeFraction), toString(currTs), toString(fractionLastUpdated), toString(stabFee), toString(liqBonus)], ",")
860+ ((commonData + "|") + assetsData)
772861 }
773862
774863
775864 @Callable(i)
776865 func test (s) = {
777866 let r = tryGetBool("deprecated_3P286TkTHARtrJzxUhPoHXardvutC37a9rM", Address(fromBase58String(swopfi_oracle)))
778867 throw(toString(r))
779868 }
780869
781870

github/deemru/w8io/3ef1775 
125.55 ms