tx · FtXphzed8JweocpfrLBxpbRufu3xPV62a2X6xPLj9BB3

3N3DnVffnUyZtz2MRbk5U7giN112WempMNd:  -0.03300000 Waves

2023.06.19 10:28 [2629211] smart account 3N3DnVffnUyZtz2MRbk5U7giN112WempMNd > SELF 0.00000000 Waves

{ "type": 13, "id": "FtXphzed8JweocpfrLBxpbRufu3xPV62a2X6xPLj9BB3", "fee": 3300000, "feeAssetId": null, "timestamp": 1687159783136, "version": 2, "chainId": 84, "sender": "3N3DnVffnUyZtz2MRbk5U7giN112WempMNd", "senderPublicKey": "3c1wAgvTRCNXCGMidVnB1j4gTYUqtwHR9tNNu2v4ZUNk", "proofs": [ "28PuwHD9x3QHKDc2zjANKX3oDRH2UfRzhEGjcABNC5iSb1dgpoyBGhqscoddE5ddD4wwUx5wGJwxaMmNYeVLQLHx" ], "script": "base64:BgKhAQgCEgkKBwgICAEICAgSABIECgIIARIECgIIARIAEgMKAQgSAwoBCBIECgIIARIECgIIARIECgIIARIAEgYKBAgICAgSBgoECAgICBIECgIICBIECgIICBIDCgEEEgMKAQgSAwoBBBIICgYECAEICAgSBQoDBAgIEgYKBAQIBAgSBQoDBAgIEgMKAQQSBAoCCAQSBAoCCAQSAwoBBBIDCgEEIwAScmVzZXJ2ZUZ1bmRBZGRyZXNzCQEHQWRkcmVzcwEBGgFUeZG1LyVCo5RRTlF1JldW6VKUxeX5QOzZAAtyZXNlcnZlRnVuZAAUAAxmbGFzaExvYW5GZWUAwIQ9AAtheGx5QWRkcmVzcwkBB0FkZHJlc3MBARoBVEdh0UpNzn/72+6l9L3Wwi2aSOpC0rlhmwAHYXhseUxQcwkAzAgCAiw4RHRNdHBWd1ZxNjJzZGNWRlZ6aDZudXByZ3pHN0xTanBMZEhuUW5yQUZnWQkAzAgCAixGTGRDMTRuVVZSeWlTWWpWck1vM1g0ZzhyWFFqTGJOUmFHQXlRQW04VjY4VgUDbmlsABFhZ2dyZWdhdG9yQWRkcmVzcwkBB0FkZHJlc3MBARoBVHmRtS8lQqOUUU5RdSZXVulSlMXl+UDs2QAJb3JhY2xlU3RyAiMzTjRLYk1uSkg4RmFNOTRqcXhORmUyb3laOEdCN1o4eVZCUAARc2h1dGRvd25XaGl0ZWxpc3QJAMwIAgEaAVfX4SNRjnyriFrV1yiXddiIddOPriMFpuEJAMwIAgEaAVdjDQOBpn9bVNIcueQoKvOngDTw2LWN1WUJAMwIAgEaAVez1ZJUSQmaKhD7xvifEHar7z8PcqWJFYwJAMwIAgEaAVf4+voCJsBRi+xqO0YzSdIccbB1i/mkypoJAMwIAgEaAVer3aoi85i5H0XYLNSn6vkSYq+JNmpQO3IJAMwIAgEaAVcwORzRpGYYO35/49jeov24Z5j/V00RJp0FA25pbAEWdmVyaWZ5TGlxdWlkYXRvclJpZ2h0cwEHYWRkcmVzcwkBASEBCQECIT0CBQdhZGRyZXNzCQEHQWRkcmVzcwEBGgFUeZG1LyVCo5RRTlF1JldW6VKUxeX5QOzZAQxnZXRSYXRlQ3VydmUBCmFzc2V0SWRTdHIEByRtYXRjaDAFCmFzc2V0SWRTdHIDCQAAAgIsOER0TXRwVndWcTYyc2RjVkZWemg2bnVwcmd6RzdMU2pwTGRIblFuckFGZ1kFByRtYXRjaDAJAJYKBACAiXoAwPD1CwCA6JImAIDC1y8DCQAAAgIsRkxkQzE0blVWUnlpU1lqVnJNbzNYNGc4clhRakxiTlJhR0F5UUFtOFY2OFYFByRtYXRjaDAJAJYKBACAiXoAwPD1CwCA6JImAIDC1y8DCQAAAgIsMjVGRXFFalJrcUs2eUNraVQ3THo2U0FZejdnVUZDdHhmQ0NobnJWRkQ1QVQFByRtYXRjaDAJAJYKBACAiXoAwPD1CwCA6JImAIDC1y8DCQAAAgIFV0FWRVMFByRtYXRjaDAJAJYKBACAiXoAgIenDgCA6JImAIDh6xcJAJYKBAAAAIDaxAkAgOiSJgCA6JImAAZTY2FsZTgAgMLXLwAHU2NhbGUxMACAyK+gJQAHU2NhbGUxNgkAaAIFBlNjYWxlOAUGU2NhbGU4AAlkYXlCbG9ja3MAoAsBCmxpSW50VG9TdHIBAmxpCgEBZgIFYWNjdW0EbmV4dAkArAICCQCsAgIFBWFjY3VtCQCkAwEFBG5leHQCASwKAAIkbAUCbGkKAAIkcwkAkAMBBQIkbAoABSRhY2MwAgAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBAWYCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYBDXRyeUdldEludGVnZXIBA2tleQQHJG1hdGNoMAkAmggCBQR0aGlzBQNrZXkDCQABAgUHJG1hdGNoMAIDSW50BAFiBQckbWF0Y2gwBQFiAAABDXRyeUdldEJvb2xlYW4BA2tleQQHJG1hdGNoMAkAmwgCBQR0aGlzBQNrZXkDCQABAgUHJG1hdGNoMAIHQm9vbGVhbgQBYgUHJG1hdGNoMAUBYgcBDHRyeUdldFN0cmluZwEDa2V5BAckbWF0Y2gwCQCdCAIFBHRoaXMFA2tleQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWIFByRtYXRjaDAFAWICAAEMdHJ5R2V0QmluYXJ5AQNrZXkEByRtYXRjaDAJAJwIAgUEdGhpcwUDa2V5AwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAWIFByRtYXRjaDAFAWIBAAEOZ2V0QXNzZXRTdHJpbmcBB2Fzc2V0SWQEByRtYXRjaDAFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQBYgUHJG1hdGNoMAkA2AQBBQFiAgVXQVZFUwENZ2V0QXNzZXRCeXRlcwEKYXNzZXRJZFN0cgMJAAACBQphc3NldElkU3RyAgVXQVZFUwUEdW5pdAkA2QQBBQphc3NldElkU3RyAQpnZXRCYWxhbmNlAQphc3NldElkU3RyAwkAAAIFCmFzc2V0SWRTdHICBVdBVkVTCAkA7wcBBQR0aGlzCWF2YWlsYWJsZQkA8AcCBQR0aGlzCQDZBAEFCmFzc2V0SWRTdHIBD2dldE1hcmtldEFzc2V0cwAJALUJAgkBDHRyeUdldFN0cmluZwECDHNldHVwX3Rva2VucwIBLAESZ2V0QXNzZXRzTWF4U3VwcGx5AAQBcwkBDHRyeUdldFN0cmluZwECD3NldHVwX21heHN1cHBseQMJAAACBQFzAgAJAMwIAgD///////////8BCQDMCAIA////////////AQkAzAgCAP///////////wEJAMwIAgD///////////8BCQDMCAIA////////////AQkAzAgCAP///////////wEJAMwIAgD///////////8BBQNuaWwJALUJAgUBcwIBLAENZ2V0T3V0ZGF0ZWRVcgEKYXNzZXRJZFN0cgQEZG93bgkAawMJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9zdXBwbGllZF8FCmFzc2V0SWRTdHIJAQ10cnlHZXRJbnRlZ2VyAQkArAICBQphc3NldElkU3RyAgZfc1JhdGUFB1NjYWxlMTYDCQAAAgUEZG93bgAAAAAJAGsDBQZTY2FsZTgJAGsDCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfYm9ycm93ZWRfBQphc3NldElkU3RyCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgUKYXNzZXRJZFN0cgIGX2JSYXRlBQdTY2FsZTE2BQRkb3duAQtnZXRJbnRlcmVzdAEKYXNzZXRJZFN0cgQCdXIJAQ1nZXRPdXRkYXRlZFVyAQUKYXNzZXRJZFN0cgQFY3VydmUJAQxnZXRSYXRlQ3VydmUBBQphc3NldElkU3RyBARyYXRlCQBkAggFBWN1cnZlAl8xAwkAZwIIBQVjdXJ2ZQJfMwUCdXIJAGsDBQJ1cggFBWN1cnZlAl8yCAUFY3VydmUCXzMJAGQCCAUFY3VydmUCXzIJAGsDCQBlAgUCdXIIBQVjdXJ2ZQJfMwgFBWN1cnZlAl80CQBlAgCAwtcvCAUFY3VydmUCXzMJAJYDAQkAzAgCCQBrAwUEcmF0ZQUGU2NhbGU4CQBoAgUJZGF5QmxvY2tzAO0CCQDMCAIAAQUDbmlsARB0b2tlblJhdGVzUmVjYWxjAQphc3NldElkU3RyBAhpbnRlcmVzdAkBC2dldEludGVyZXN0AQUKYXNzZXRJZFN0cgQCdXIJAQ1nZXRPdXRkYXRlZFVyAQUKYXNzZXRJZFN0cgQQbGFzdFJlY2FsY0hlaWdodAkBDXRyeUdldEludGVnZXIBAg5sYXN0UmF0ZUhlaWdodAQJbGFzdEJSYXRlCQCWAwEJAMwIAgkBDXRyeUdldEludGVnZXIBCQCsAgIFCmFzc2V0SWRTdHICBl9iUmF0ZQkAzAgCBQdTY2FsZTE2BQNuaWwECG5ld0JSYXRlCQBkAgUJbGFzdEJSYXRlCQBoAgkAZQIFBmhlaWdodAUQbGFzdFJlY2FsY0hlaWdodAUIaW50ZXJlc3QECWxhc3RTUmF0ZQkAlgMBCQDMCAIJAQ10cnlHZXRJbnRlZ2VyAQkArAICBQphc3NldElkU3RyAgZfc1JhdGUJAMwIAgUHU2NhbGUxNgUDbmlsBAhuZXdTUmF0ZQkAZAIFCWxhc3RTUmF0ZQkAaQIJAGgCCQBoAgkAZQIFBmhlaWdodAUQbGFzdFJlY2FsY0hlaWdodAkAawMFCGludGVyZXN0BQJ1cgUGU2NhbGU4CQBlAgBkBQtyZXNlcnZlRnVuZABkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCmFzc2V0SWRTdHICBl9zUmF0ZQUIbmV3U1JhdGUJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUKYXNzZXRJZFN0cgIGX2JSYXRlBQhuZXdCUmF0ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgIObGFzdFJhdGVIZWlnaHQFBmhlaWdodAUDbmlsAQ1nZXRBY3R1YWxSYXRlAgphc3NldElkU3RyCHJhdGVUeXBlCgEBZgIFYWNjdW0FdG9rZW4EBnJlY2FsYwkBEHRva2VuUmF0ZXNSZWNhbGMBBQV0b2tlbgkAlAoCAwkBAiE9AgUFdG9rZW4FCmFzc2V0SWRTdHIIBQVhY2N1bQJfMQMJAAACBQhyYXRlVHlwZQIFc1JhdGUICQCRAwIFBnJlY2FsYwAABXZhbHVlCAkAkQMCBQZyZWNhbGMAAQV2YWx1ZQkAzggCCAUFYWNjdW0CXzIFBnJlY2FsYwoAAiRsCQEPZ2V0TWFya2V0QXNzZXRzAAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgAABQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBAWYCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYBBWdldFVyAQphc3NldElkU3RyBAVyYXRlcwkBEHRva2VuUmF0ZXNSZWNhbGMBBQphc3NldElkU3RyBARkb3duCQBrAwkBDXRyeUdldEludGVnZXIBCQCsAgICD3RvdGFsX3N1cHBsaWVkXwUKYXNzZXRJZFN0cggJAJEDAgUFcmF0ZXMAAAV2YWx1ZQUHU2NhbGUxNgkAawMFBlNjYWxlOAkAawMJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9ib3Jyb3dlZF8FCmFzc2V0SWRTdHIICQCRAwIFBXJhdGVzAAEFdmFsdWUFB1NjYWxlMTYFBGRvd24BC3JhdGVzUmVjYWxjAAoBAWYCBWFjY3VtBXRva2VuCQDOCAIFBWFjY3VtCQEQdG9rZW5SYXRlc1JlY2FsYwEFBXRva2VuCgACJGwJAQ9nZXRNYXJrZXRBc3NldHMACgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQFmAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAQ1nZXRUb2tlblByaWNlAQphc3NldElkU3RyBARpbnYzCQD8BwQJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCW9yYWNsZVN0cgIJZ2V0VFdBUDYwCQDMCAIFCmFzc2V0SWRTdHIJAMwIAgcFA25pbAUDbmlsAwkAAAIFBGludjMFBGludjMEBWRhdGEzBAckbWF0Y2gwBQRpbnYzAwkAAQIFByRtYXRjaDACCihJbnQsIEludCkEAXgFByRtYXRjaDAFAXgJAAIBAhVlcnJvciBvZiBwcmljZSBvcmFjbGUDCQAAAgUFZGF0YTMFBWRhdGEzBQVkYXRhMwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEOY2FsY0Fzc2V0U2NhbGUBCmFzc2V0SWRTdHIECGRlY2ltYWxzAwkAAAIFCmFzc2V0SWRTdHICBVdBVkVTAAgICQEFdmFsdWUBCQDsBwEJANkEAQUKYXNzZXRJZFN0cghkZWNpbWFscwkAbAYACgAABQhkZWNpbWFscwAAAAAFBERPV04BEmNhbGNVc2VyQ29sbGF0ZXJhbAEHYWRkcmVzcwQUdXNlckNvbGxhdGVyYWxJbnZva2UJAPwHBAUEdGhpcwIRZ2V0VXNlckNvbGxhdGVyYWwJAMwIAgcJAMwIAgUHYWRkcmVzcwkAzAgCBgkAzAgCAgAFA25pbAUDbmlsAwkAAAIFFHVzZXJDb2xsYXRlcmFsSW52b2tlBRR1c2VyQ29sbGF0ZXJhbEludm9rZQQTdXNlckNvbGxhdGVyYWxWYWx1ZQQHJG1hdGNoMAUUdXNlckNvbGxhdGVyYWxJbnZva2UDCQABAgUHJG1hdGNoMAIDSW50BAF4BQckbWF0Y2gwBQF4CQACAQIkaXNzdWUgd2hpbGUgZG9pbmcgaW4tZGFwcCBpbnZvY2F0aW9uAwkAAAIFE3VzZXJDb2xsYXRlcmFsVmFsdWUFE3VzZXJDb2xsYXRlcmFsVmFsdWUFE3VzZXJDb2xsYXRlcmFsVmFsdWUJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BDnN1cHBseUludGVybmFsAwphc3NldElkU3RyC2Fzc2V0QW1vdW50B2FkZHJlc3MDCQEBIQEJAQ10cnlHZXRCb29sZWFuAQIMc2V0dXBfYWN0aXZlCQACAQIRbWFya2V0IGlzIHN0b3BwZWQECyR0MDYxODc2MjU0CQENZ2V0QWN0dWFsUmF0ZQIFCmFzc2V0SWRTdHICBXNSYXRlBAVzUmF0ZQgFCyR0MDYxODc2MjU0Al8xBBFyYXRlc1JlY2FsY1Jlc3VsdAgFCyR0MDYxODc2MjU0Al8yBAZhbW91bnQJAG4EBQthc3NldEFtb3VudAUHU2NhbGUxNgUFc1JhdGUFBERPV04ECW1heFN1cHBseQQHJG1hdGNoMAkAoggBCQCsAgICEHNldHVwX21heFN1cHBseV8FCmFzc2V0SWRTdHIDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAF4BQckbWF0Y2gwCQENcGFyc2VJbnRWYWx1ZQEFAXgAAAQKYXNzZXRQcmljZQkBDWdldFRva2VuUHJpY2UBBQphc3NldElkU3RyBBBuZXdUb3RhbFN1cHBsaWVkCQBkAgkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgUHYWRkcmVzcwIKX3N1cHBsaWVkXwUKYXNzZXRJZFN0cgUGYW1vdW50BARyYXRlCAkBDWdldEFjdHVhbFJhdGUCBQphc3NldElkU3RyAgVzUmF0ZQJfMQQKYXNzZXRTY2FsZQkBDmNhbGNBc3NldFNjYWxlAQUKYXNzZXRJZFN0cgQTbmV3VG90YWxTdXBwbGllZFVzZAkAawMJAGsDBRBuZXdUb3RhbFN1cHBsaWVkBQRyYXRlBQdTY2FsZTE2CAUKYXNzZXRQcmljZQJfMQUKYXNzZXRTY2FsZQMJAAACCQCzCQIJAQx0cnlHZXRTdHJpbmcBAgxzZXR1cF90b2tlbnMFCmFzc2V0SWRTdHIFBHVuaXQJAAIBAil0aGlzIGFzc2V0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIG1hcmtldAMDCQECIT0CBQltYXhTdXBwbHkAAAkAZgIFE25ld1RvdGFsU3VwcGxpZWRVc2QFCW1heFN1cHBseQcJAAIBAjNtYXggdG90YWwgc3VwcGx5IGZvciB0aGlzIHRva2VuIHJlYWNoZWQgaW4gdGhlIHBvb2wJAJQKAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgUHYWRkcmVzcwIKX3N1cHBsaWVkXwUKYXNzZXRJZFN0cgUQbmV3VG90YWxTdXBwbGllZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAg90b3RhbF9zdXBwbGllZF8FCmFzc2V0SWRTdHIJAGQCCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfc3VwcGxpZWRfBQphc3NldElkU3RyBQZhbW91bnQFA25pbAURcmF0ZXNSZWNhbGNSZXN1bHQFC2Fzc2V0QW1vdW50AQ5ib3Jyb3dJbnRlcm5hbAMKYXNzZXRJZFN0cgthc3NldEFtb3VudAdhZGRyZXNzBAskdDA3NTMzNzYwMAkBDWdldEFjdHVhbFJhdGUCBQphc3NldElkU3RyAgViUmF0ZQQFYlJhdGUIBQskdDA3NTMzNzYwMAJfMQQRcmF0ZXNSZWNhbGNSZXN1bHQIBQskdDA3NTMzNzYwMAJfMgQGYW1vdW50CQBuBAULYXNzZXRBbW91bnQFB1NjYWxlMTYFBWJSYXRlBQdDRUlMSU5HBBJjb2xsYXRlcmFsVmFsdWVJbnYJAPwHBAUEdGhpcwIRZ2V0VXNlckNvbGxhdGVyYWwJAMwIAgcJAMwIAgUHYWRkcmVzcwkAzAgCBgkAzAgCCQCsAgIJAKwCAgUKYXNzZXRJZFN0cgIKLGJvcnJvd2VkLAkApAMBBQZhbW91bnQFA25pbAUDbmlsAwkAAAIFEmNvbGxhdGVyYWxWYWx1ZUludgUSY29sbGF0ZXJhbFZhbHVlSW52BA9jb2xsYXRlcmFsVmFsdWUEByRtYXRjaDAFEmNvbGxhdGVyYWxWYWx1ZUludgMJAAECBQckbWF0Y2gwAgNJbnQEAXgFByRtYXRjaDAFAXgJAAIBAh9jYW4ndCBnZXQgdXNlciBjb2xsYXRlcmFsIHZhbHVlAwkBASEBCQENdHJ5R2V0Qm9vbGVhbgECDHNldHVwX2FjdGl2ZQkAAgECEW1hcmtldCBpcyBzdG9wcGVkBA1hc3NldFN1cHBsaWVkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfc3VwcGxpZWRfBQphc3NldElkU3RyBA1hc3NldEJvcnJvd2VkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfYm9ycm93ZWRfBQphc3NldElkU3RyBBF1c2VyQXNzZXRCb3Jyb3dlZAkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgUHYWRkcmVzcwIKX2JvcnJvd2VkXwUKYXNzZXRJZFN0cgMJAGYCBQZhbW91bnQJAGUCBQ1hc3NldFN1cHBsaWVkBQ1hc3NldEJvcnJvd2VkCQACAQIcdGhpcyBhbW91bnQgaXMgbm90IGF2YWlsYWJsZQkAlAoCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICBQdhZGRyZXNzAgpfYm9ycm93ZWRfBQphc3NldElkU3RyCQBkAgURdXNlckFzc2V0Qm9ycm93ZWQFBmFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAg90b3RhbF9ib3Jyb3dlZF8FCmFzc2V0SWRTdHIJAGQCBQ1hc3NldEJvcnJvd2VkBQZhbW91bnQFA25pbAURcmF0ZXNSZWNhbGNSZXN1bHQFC2Fzc2V0QW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuGwFpAQ1mbGFzaFBvc2l0aW9uBwR1c2VyC3NBc3NldElkU3RyC2JBc3NldElkU3RyB2JBbW91bnQPY2FsbGJhY2tBZGRyZXNzEGNhbGxiYWNrRnVuY3Rpb24MY2FsbGJhY2tBcmdzBAlib3Jyb3dSZXMJAQ5ib3Jyb3dJbnRlcm5hbAMFC2JBc3NldElkU3RyBQdiQW1vdW50BQR1c2VyBAhiQXNzZXRJZAkBDWdldEFzc2V0Qnl0ZXMBBQtiQXNzZXRJZFN0cgQIY2FsbGJhY2sJAP0HBAkBEUBleHRyTmF0aXZlKDEwNjIpAQUPY2FsbGJhY2tBZGRyZXNzBRBjYWxsYmFja0Z1bmN0aW9uCQC1CQIFDGNhbGxiYWNrQXJncwIBLAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUIYkFzc2V0SWQFB2JBbW91bnQFA25pbAMJAAACBQhjYWxsYmFjawUIY2FsbGJhY2sEB3NBbW91bnQKAAFABQhjYWxsYmFjawMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQDCQAAAgUHc0Ftb3VudAUHc0Ftb3VudAQJc3VwcGx5UmVzCQEOc3VwcGx5SW50ZXJuYWwDBQtzQXNzZXRJZFN0cgUHc0Ftb3VudAUEdXNlcgQPY29sbGF0ZXJhbFZhbHVlCgABQAkA/AcEBQR0aGlzAhFnZXRVc2VyQ29sbGF0ZXJhbAkAzAgCBwkAzAgCBQR1c2VyCQDMCAIGCQDMCAIJAKwCAgkArAICBQtzQXNzZXRJZFN0cgIKLHN1cHBsaWVkLAkApAMBBQdzQW1vdW50BQNuaWwFA25pbAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQDCQAAAgUPY29sbGF0ZXJhbFZhbHVlBQ9jb2xsYXRlcmFsVmFsdWUEC2JvcnJvd1ZhbHVlCgABQAkA/AcEBQR0aGlzAhFnZXRVc2VyQ29sbGF0ZXJhbAkAzAgCBwkAzAgCBQR1c2VyCQDMCAIGCQDMCAIJAKwCAgkArAICBQtiQXNzZXRJZFN0cgIKLGJvcnJvd2VkLAkApAMBBQdiQW1vdW50BQNuaWwFA25pbAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQDCQAAAgULYm9ycm93VmFsdWUFC2JvcnJvd1ZhbHVlAwkAZgIFC2JvcnJvd1ZhbHVlBQ9jb2xsYXRlcmFsVmFsdWUJAAIBAh5ub3QgZW5vdWdoIGNvbGxhdGVyYWwgcHJvdmlkZWQJAM4IAggFCWJvcnJvd1JlcwJfMQgFCXN1cHBseVJlcwJfMQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQZzdXBwbHkAAwMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQYJAAACCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAAACQACAQIcMSBwYXltZW50IGhhcyB0byBiZSBhdHRhY2hlZAQKYXNzZXRJZFN0cgkBDmdldEFzc2V0U3RyaW5nAQgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAthc3NldEFtb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQJAQ5zdXBwbHlJbnRlcm5hbAMFCmFzc2V0SWRTdHIFC2Fzc2V0QW1vdW50CQClCAEIBQFpBmNhbGxlcgFpAQh3aXRoZHJhdwIKYXNzZXRJZFN0cgthc3NldEFtb3VudAQNJHQwMTExNDUxMTIxMgkBDWdldEFjdHVhbFJhdGUCBQphc3NldElkU3RyAgVzUmF0ZQQFc1JhdGUIBQ0kdDAxMTE0NTExMjEyAl8xBBFyYXRlc1JlY2FsY1Jlc3VsdAgFDSR0MDExMTQ1MTEyMTICXzIEBmFtb3VudAkAbgQFC2Fzc2V0QW1vdW50BQdTY2FsZTE2BQVzUmF0ZQUHQ0VJTElORwQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIEDWFzc2V0U3VwcGxpZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9zdXBwbGllZF8FCmFzc2V0SWRTdHIEDWFzc2V0Qm9ycm93ZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9ib3Jyb3dlZF8FCmFzc2V0SWRTdHIEEXVzZXJBc3NldFN1cHBsaWVkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICBQdhZGRyZXNzAgpfc3VwcGxpZWRfBQphc3NldElkU3RyBBF1c2VyQXNzZXRCb3Jyb3dlZAkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgUHYWRkcmVzcwIKX2JvcnJvd2VkXwUKYXNzZXRJZFN0cgQSY29sbGF0ZXJhbFZhbHVlSW52CQD8BwQFBHRoaXMCEWdldFVzZXJDb2xsYXRlcmFsCQDMCAIHCQDMCAIFB2FkZHJlc3MJAMwIAgYJAMwIAgkArAICCQCsAgIFCmFzc2V0SWRTdHICCixzdXBwbGllZCwJAKQDAQkBAS0BBQZhbW91bnQFA25pbAUDbmlsAwkAAAIFEmNvbGxhdGVyYWxWYWx1ZUludgUSY29sbGF0ZXJhbFZhbHVlSW52BA9jb2xsYXRlcmFsVmFsdWUEByRtYXRjaDAFEmNvbGxhdGVyYWxWYWx1ZUludgMJAAECBQckbWF0Y2gwAgNJbnQEAXgFByRtYXRjaDAFAXgJAAIBAh9jYW4ndCBnZXQgdXNlciBjb2xsYXRlcmFsIHZhbHVlAwkBASEBCQENdHJ5R2V0Qm9vbGVhbgECDHNldHVwX2FjdGl2ZQkAAgECEW1hcmtldCBpcyBzdG9wcGVkAwkAZgIAAAUPY29sbGF0ZXJhbFZhbHVlCQACAQIyeW91IGRvbnQgaGF2ZSBlbm91Z2ggY29sbGF0ZXJhbCBmb3IgdGhpcyBvcGVyYXRpb24DCQBmAgUGYW1vdW50CQBlAgUNYXNzZXRTdXBwbGllZAUNYXNzZXRCb3Jyb3dlZAkAAgECKnRoaXMgYW1vdW50IGlzIG5vdCBhdmFpbGFibGUgb24gdGhlIG1hcmtldAMJAGYCBQZhbW91bnQJAGUCBRF1c2VyQXNzZXRTdXBwbGllZAURdXNlckFzc2V0Qm9ycm93ZWQJAAIBAip0aGlzIGFtb3VudCBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHVzZXIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIFB2FkZHJlc3MCCl9zdXBwbGllZF8FCmFzc2V0SWRTdHIJAGUCCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICBQdhZGRyZXNzAgpfc3VwcGxpZWRfBQphc3NldElkU3RyBQZhbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIPdG90YWxfc3VwcGxpZWRfBQphc3NldElkU3RyCQBlAgkBDXRyeUdldEludGVnZXIBCQCsAgICD3RvdGFsX3N1cHBsaWVkXwUKYXNzZXRJZFN0cgUGYW1vdW50CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgULYXNzZXRBbW91bnQJAQ1nZXRBc3NldEJ5dGVzAQUKYXNzZXRJZFN0cgUDbmlsBRFyYXRlc1JlY2FsY1Jlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQZib3Jyb3cCCmFzc2V0SWRTdHILYXNzZXRBbW91bnQEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyBANyZXMJAQ5ib3Jyb3dJbnRlcm5hbAMFCmFzc2V0SWRTdHIFC2Fzc2V0QW1vdW50BQdhZGRyZXNzBAZhbW91bnQIBQNyZXMCXzIJAM4IAggFA3JlcwJfMQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFBmFtb3VudAkBDWdldEFzc2V0Qnl0ZXMBBQphc3NldElkU3RyBQNuaWwBaQEFcmVwYXkAAwkBASEBCQENdHJ5R2V0Qm9vbGVhbgECDHNldHVwX2FjdGl2ZQkAAgECEW1hcmtldCBpcyBzdG9wcGVkAwMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQYJAAACCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAAACQACAQIcMSBwYXltZW50IGhhcyB0byBiZSBhdHRhY2hlZAQKYXNzZXRJZFN0cgkBDmdldEFzc2V0U3RyaW5nAQgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAthc3NldEFtb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQEDSR0MDEzMjc5MTMzNDYJAQ1nZXRBY3R1YWxSYXRlAgUKYXNzZXRJZFN0cgIFYlJhdGUEBWJSYXRlCAUNJHQwMTMyNzkxMzM0NgJfMQQRcmF0ZXNSZWNhbGNSZXN1bHQIBQ0kdDAxMzI3OTEzMzQ2Al8yBAZhbW91bnQJAG4EBQthc3NldEFtb3VudAUHU2NhbGUxNgUFYlJhdGUFB0NFSUxJTkcEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyBA1hc3NldFN1cHBsaWVkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfc3VwcGxpZWRfBQphc3NldElkU3RyBA1hc3NldEJvcnJvd2VkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfYm9ycm93ZWRfBQphc3NldElkU3RyBBF1c2VyQXNzZXRCb3Jyb3dlZAkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgUHYWRkcmVzcwIKX2JvcnJvd2VkXwUKYXNzZXRJZFN0cgQKYW1vdW50TGVmdAkAZQIFEXVzZXJBc3NldEJvcnJvd2VkBQZhbW91bnQEC3JlcGF5QW1vdW50AwkAZwIFCmFtb3VudExlZnQAAAUGYW1vdW50BRF1c2VyQXNzZXRCb3Jyb3dlZAMJAAACCQCzCQIJAQx0cnlHZXRTdHJpbmcBAgxzZXR1cF90b2tlbnMFCmFzc2V0SWRTdHIFBHVuaXQJAAIBAil0aGlzIGFzc2V0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIG1hcmtldAkAzggCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICBQdhZGRyZXNzAgpfYm9ycm93ZWRfBQphc3NldElkU3RyCQBlAgURdXNlckFzc2V0Qm9ycm93ZWQFC3JlcGF5QW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICD3RvdGFsX2JvcnJvd2VkXwUKYXNzZXRJZFN0cgkAZQIFDWFzc2V0Qm9ycm93ZWQFC3JlcGF5QW1vdW50BQNuaWwFEXJhdGVzUmVjYWxjUmVzdWx0AwkAZwIFCmFtb3VudExlZnQAAAUDbmlsCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkBAS0BBQphbW91bnRMZWZ0CAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFA25pbAFpAQhyZXBheUZvcgEHYWRkcmVzcwMJAQEhAQkBDXRyeUdldEJvb2xlYW4BAgxzZXR1cF9hY3RpdmUJAAIBAhFtYXJrZXQgaXMgc3RvcHBlZAMDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEGCQAAAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQAAAkAAgECHDEgcGF5bWVudCBoYXMgdG8gYmUgYXR0YWNoZWQECmFzc2V0SWRTdHIJAQ5nZXRBc3NldFN0cmluZwEICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQLYXNzZXRBbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BA0kdDAxNDc2NDE0ODMxCQENZ2V0QWN0dWFsUmF0ZQIFCmFzc2V0SWRTdHICBWJSYXRlBAViUmF0ZQgFDSR0MDE0NzY0MTQ4MzECXzEEEXJhdGVzUmVjYWxjUmVzdWx0CAUNJHQwMTQ3NjQxNDgzMQJfMgQGYW1vdW50CQBuBAULYXNzZXRBbW91bnQFB1NjYWxlMTYFBWJSYXRlBQdDRUlMSU5HBA1hc3NldFN1cHBsaWVkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfc3VwcGxpZWRfBQphc3NldElkU3RyBA1hc3NldEJvcnJvd2VkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfYm9ycm93ZWRfBQphc3NldElkU3RyBBF1c2VyQXNzZXRCb3Jyb3dlZAkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgUHYWRkcmVzcwIKX2JvcnJvd2VkXwUKYXNzZXRJZFN0cgQKYW1vdW50TGVmdAkAZQIFEXVzZXJBc3NldEJvcnJvd2VkBQZhbW91bnQEC3JlcGF5QW1vdW50AwkAZwIFCmFtb3VudExlZnQAAAUGYW1vdW50BRF1c2VyQXNzZXRCb3Jyb3dlZAMJAAACCQCzCQIJAQx0cnlHZXRTdHJpbmcBAgxzZXR1cF90b2tlbnMFCmFzc2V0SWRTdHIFBHVuaXQJAAIBAil0aGlzIGFzc2V0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIG1hcmtldAkAzggCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICBQdhZGRyZXNzAgpfYm9ycm93ZWRfBQphc3NldElkU3RyCQBlAgURdXNlckFzc2V0Qm9ycm93ZWQFC3JlcGF5QW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICD3RvdGFsX2JvcnJvd2VkXwUKYXNzZXRJZFN0cgkAZQIFDWFzc2V0Qm9ycm93ZWQFC3JlcGF5QW1vdW50BQNuaWwFEXJhdGVzUmVjYWxjUmVzdWx0AwkAZwIFCmFtb3VudExlZnQAAAUDbmlsCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkBAS0BBQphbW91bnRMZWZ0CAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFA25pbAFpAQ1zdGFrZVRva2VuQWxsAQphc3NldElkU3RyAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIsb25seSBmb3IgaW50ZXJuYWwgc21hcnQgY29udHJhY3QgaW52b2NhdGlvbnMEBmFtb3VudAkBCmdldEJhbGFuY2UBBQphc3NldElkU3RyBANpbnYJAPwHBAUEdGhpcwIKc3Rha2VUb2tlbgkAzAgCBQphc3NldElkU3RyCQDMCAIFBmFtb3VudAUDbmlsBQNuaWwDCQAAAgUDaW52BQNpbnYFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQpzdGFrZVRva2VuAgphc3NldElkU3RyBmFtb3VudAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECLG9ubHkgZm9yIGludGVybmFsIHNtYXJ0IGNvbnRyYWN0IGludm9jYXRpb25zAwkAAAIFCmFzc2V0SWRTdHICLERHMnhGa1BkRHdLVW9Ca3pHQWhRdExwU0d6ZlhMaUNZUEV6ZUtIMkFkMjRwBAxhbW91bnRTdGFrZWQJAQ10cnlHZXRJbnRlZ2VyAQI9YXV0b3N0YWtlX2Ftb3VudF9ERzJ4RmtQZER3S1VvQmt6R0FoUXRMcFNHemZYTGlDWVBFemVLSDJBZDI0cAQDaW52CQD8BwQJAQdBZGRyZXNzAQEaAVfkDqc2T5IL15fPpB0/NRvPQ2rrqjzzcZ0CBXN0YWtlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIBILYmKcME9c5TkaQOS3UkL2SMUbH6369UKb1I0h0qsqrRBQZhbW91bnQFA25pbAMJAAACBQNpbnYFA2ludgkAzAgCCQEMSW50ZWdlckVudHJ5AgI9YXV0b3N0YWtlX2Ftb3VudF9ERzJ4RmtQZER3S1VvQmt6R0FoUXRMcFNHemZYTGlDWVBFemVLSDJBZDI0cAkAZAIFDGFtb3VudFN0YWtlZAUGYW1vdW50BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQAAAgUKYXNzZXRJZFN0cgIsOHQ0RFBXVHdQenBhdEhBOUFrVHhXQUI0N1RIbll6QnNEbm9ZN2ZRcWJHOTEEDGFtb3VudFN0YWtlZAkBDXRyeUdldEludGVnZXIBAj1hdXRvc3Rha2VfYW1vdW50Xzh0NERQV1R3UHpwYXRIQTlBa1R4V0FCNDdUSG5ZekJzRG5vWTdmUXFiRzkxBANpbnYJAPwHBAkBB0FkZHJlc3MBARoBV/cVNRHF7XKFU1QQ8N0bTeJqPNO0aHcpWgIFc3Rha2UFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgEgdRYQOIB2DVVlfknzrrHb5hmcahBoH8lVYfpKRlp3MBwFBmFtb3VudAUDbmlsAwkAAAIFA2ludgUDaW52CQDMCAIJAQxJbnRlZ2VyRW50cnkCAj1hdXRvc3Rha2VfYW1vdW50Xzh0NERQV1R3UHpwYXRIQTlBa1R4V0FCNDdUSG5ZekJzRG5vWTdmUXFiRzkxCQBkAgUMYW1vdW50U3Rha2VkBQZhbW91bnQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAACBQphc3NldElkU3RyAixBdDhENk5GRnBoZUNidktWbmpWb2VMTDg0RW84TlpuNm92TWFueGZMYUZXTAQMYW1vdW50U3Rha2VkCQENdHJ5R2V0SW50ZWdlcgECPWF1dG9zdGFrZV9hbW91bnRfQXQ4RDZORkZwaGVDYnZLVm5qVm9lTEw4NEVvOE5abjZvdk1hbnhmTGFGV0wEA2ludgkA/AcECQEHQWRkcmVzcwEBGgFXa2g44QPUmoyfEhvGLLwjBzkLze0S1wpfAgVzdGFrZQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCASCS0fRK4hEBK/R+6t4hjj3F+8nyfc6Hsu1SGfA6TiRY9QUGYW1vdW50BQNuaWwDCQAAAgUDaW52BQNpbnYJAMwIAgkBDEludGVnZXJFbnRyeQICPWF1dG9zdGFrZV9hbW91bnRfQXQ4RDZORkZwaGVDYnZLVm5qVm9lTEw4NEVvOE5abjZvdk1hbnhmTGFGV0wJAGQCBQxhbW91bnRTdGFrZWQFBmFtb3VudAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwBaQEMdW5zdGFrZVRva2VuAgphc3NldElkU3RyBmFtb3VudAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECLG9ubHkgZm9yIGludGVybmFsIHNtYXJ0IGNvbnRyYWN0IGludm9jYXRpb25zAwkAAAIFCmFzc2V0SWRTdHICLDh0NERQV1R3UHpwYXRIQTlBa1R4V0FCNDdUSG5ZekJzRG5vWTdmUXFiRzkxBAxhbW91bnRTdGFrZWQJAQ10cnlHZXRJbnRlZ2VyAQI9YXV0b3N0YWtlX2Ftb3VudF84dDREUFdUd1B6cGF0SEE5QWtUeFdBQjQ3VEhuWXpCc0Rub1k3ZlFxYkc5MQQDaW52CQD8BwQJAQdBZGRyZXNzAQEaAVf3FTURxe1yhVNUEPDdG03iajzTtGh3KVoCB3VuU3Rha2UJAMwIAgUGYW1vdW50BQNuaWwFA25pbAMJAAACBQNpbnYFA2ludgkAzAgCCQEMSW50ZWdlckVudHJ5AgI9YXV0b3N0YWtlX2Ftb3VudF84dDREUFdUd1B6cGF0SEE5QWtUeFdBQjQ3VEhuWXpCc0Rub1k3ZlFxYkc5MQkAZQIFDGFtb3VudFN0YWtlZAUGYW1vdW50BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQAAAgUKYXNzZXRJZFN0cgIsQXQ4RDZORkZwaGVDYnZLVm5qVm9lTEw4NEVvOE5abjZvdk1hbnhmTGFGV0wEDGFtb3VudFN0YWtlZAkBDXRyeUdldEludGVnZXIBAj1hdXRvc3Rha2VfYW1vdW50X0F0OEQ2TkZGcGhlQ2J2S1ZualZvZUxMODRFbzhOWm42b3ZNYW54ZkxhRldMBANpbnYJAPwHBAkBB0FkZHJlc3MBARoBV2toOOED1JqMnxIbxiy8Iwc5C83tEtcKXwIHdW5zdGFrZQkAzAgCBQZhbW91bnQFA25pbAUDbmlsAwkAAAIFA2ludgUDaW52BARiYWwwCQEKZ2V0QmFsYW5jZQECLEF0OEQ2TkZGcGhlQ2J2S1ZualZvZUxMODRFbzhOWm42b3ZNYW54ZkxhRldMAwkAAAIFBGJhbDAFBGJhbDAEBGludjIJAPwHBAkBB0FkZHJlc3MBARoBV/t16usT/RnAywjcj2CzfgO6EY6tj7fQ6wIXZ25zYnRSZXdhcmRzU1lTUkVBRE9OTFkJAMwIAgkApQgBBQR0aGlzBQNuaWwFA25pbAMJAAACBQRpbnYyBQRpbnYyBAx0b3B1cFJld2FyZHMEByRtYXRjaDAFBGludjIDCQABAgUHJG1hdGNoMAIJTGlzdFtBbnldBAF4BQckbWF0Y2gwBAhzZWNvbmRFbAkAkQMCBQF4AAEEByRtYXRjaDEFCHNlY29uZEVsAwkAAQIFByRtYXRjaDECBlN0cmluZwQIc2Vjb25kRWwFByRtYXRjaDEECXVzZG5WYWx1ZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgkAkQMCCQC1CQIFCHNlY29uZEVsAgFfAAECAToAAQQKd2F2ZXNWYWx1ZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgkAkQMCCQC1CQIFCHNlY29uZEVsAgFfAAACAToAAQMDCQECIT0CBQl1c2RuVmFsdWUAAAYJAQIhPQIFCndhdmVzVmFsdWUAAAQIdXNkbkJhbDAJAQpnZXRCYWxhbmNlAQIsREcyeEZrUGREd0tVb0JrekdBaFF0THBTR3pmWExpQ1lQRXplS0gyQWQyNHADCQAAAgUIdXNkbkJhbDAFCHVzZG5CYWwwBAl3YXZlc0JhbDAJAQpnZXRCYWxhbmNlAQIFV0FWRVMDCQAAAgUJd2F2ZXNCYWwwBQl3YXZlc0JhbDAEBGludjMJAPwHBAkBB0FkZHJlc3MBARoBV2toOOED1JqMnxIbxiy8Iwc5C83tEtcKXwIMY2xhaW1SZXdhcmRzBQNuaWwFA25pbAMJAAACBQRpbnYzBQRpbnYzBAl3YXZlc0JhbDEJAQpnZXRCYWxhbmNlAQIFV0FWRVMDCQAAAgUJd2F2ZXNCYWwxBQl3YXZlc0JhbDEEBGludjQJAPwHBAkBB0FkZHJlc3MBARoBV84UFJ0WWAPkQ0x69aXssp+tv82zg/kpogIEc3dhcAkAzAgCAixERzJ4RmtQZER3S1VvQmt6R0FoUXRMcFNHemZYTGlDWVBFemVLSDJBZDI0cAkAzAgCAAAFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUEdW5pdAkAZQIFCXdhdmVzQmFsMQUJd2F2ZXNCYWwwBQNuaWwDCQAAAgUEaW52NAUEaW52NAQIdXNkbkJhbDEJAQpnZXRCYWxhbmNlAQIsREcyeEZrUGREd0tVb0JrekdBaFF0THBTR3pmWExpQ1lQRXplS0gyQWQyNHADCQAAAgUIdXNkbkJhbDEFCHVzZG5CYWwxBARpbnY1CQD8BwQJAQdBZGRyZXNzAQEaAVdA6qFcZYEoPXSEW1dgnvvjeSu33Iq0kHcCBHN3YXAJAMwIAgIsQXQ4RDZORkZwaGVDYnZLVm5qVm9lTEw4NEVvOE5abjZvdk1hbnhmTGFGV0wJAMwIAgAABQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIBILYmKcME9c5TkaQOS3UkL2SMUbH6369UKb1I0h0qsqrRCQBlAgUIdXNkbkJhbDEFCHVzZG5CYWwwBQNuaWwDCQAAAgUEaW52NQUEaW52NQQEaW52NgkA/AcEBQR0aGlzAgthZGRJbnRlcmVzdAkAzAgCAixBdDhENk5GRnBoZUNidktWbmpWb2VMTDg0RW84TlpuNm92TWFueGZMYUZXTAkAzAgCCQBlAgkBCmdldEJhbGFuY2UBAixBdDhENk5GRnBoZUNidktWbmpWb2VMTDg0RW84TlpuNm92TWFueGZMYUZXTAUEYmFsMAUDbmlsBQNuaWwDCQAAAgUEaW52NgUEaW52NgACCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAEAAQAAAwkAAAIFDHRvcHVwUmV3YXJkcwUMdG9wdXBSZXdhcmRzCQDMCAIJAQxJbnRlZ2VyRW50cnkCAj1hdXRvc3Rha2VfYW1vdW50X0F0OEQ2TkZGcGhlQ2J2S1ZualZvZUxMODRFbzhOWm42b3ZNYW54ZkxhRldMCQBlAgUMYW1vdW50U3Rha2VkBQZhbW91bnQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAWkBC2FkZEludGVyZXN0Agphc3NldElkU3RyBmFtb3VudAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECGG9ubHkgZm9yIHNlbGYgaW52b2NhdGlvbgQGZWFybmVkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIVYXV0b3N0YWtlX2xhc3RFYXJuZWRfBQphc3NldElkU3RyBApsYXN0SGVpZ2h0CQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIUYXV0b3N0YWtlX2xhc3RCbG9ja18FCmFzc2V0SWRTdHIEC2NsZWFuQW1vdW50CQBrAwUGYW1vdW50AFAAZAQMc3RhdGVDaGFuZ2VzAwMJAAACBQpsYXN0SGVpZ2h0BQZoZWlnaHQGCQAAAgUGYW1vdW50AAAFA25pbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAhhhdXRvc3Rha2VfcHJlTGFzdEVhcm5lZF8FCmFzc2V0SWRTdHIFBmVhcm5lZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAhdhdXRvc3Rha2VfcHJlTGFzdEJsb2NrXwUKYXNzZXRJZFN0cgUKbGFzdEhlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAhVhdXRvc3Rha2VfbGFzdEVhcm5lZF8FCmFzc2V0SWRTdHIJAGQCBQZlYXJuZWQFC2NsZWFuQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICFGF1dG9zdGFrZV9sYXN0QmxvY2tfBQphc3NldElkU3RyBQZoZWlnaHQFA25pbAkAzggCBQxzdGF0ZUNoYW5nZXMJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUKYXNzZXRJZFN0cgIGX3NSYXRlCQBkAgkBDXRyeUdldEludGVnZXIBCQCsAgIFCmFzc2V0SWRTdHICBl9zUmF0ZQkAawMFB1NjYWxlMTYFC2NsZWFuQW1vdW50CQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfc3VwcGxpZWRfBQphc3NldElkU3RyBQNuaWwBaQETYWRkSW50ZXJlc3RFWFRFUk5BTAAEBmFtb3VudAkAawMICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50AFAAZAQHYXNzZXRJZAgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAphc3NldElkU3RyCQEOZ2V0QXNzZXRTdHJpbmcBBQdhc3NldElkBAZlYXJuZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAhVhdXRvc3Rha2VfbGFzdEVhcm5lZF8FCmFzc2V0SWRTdHIECmxhc3RIZWlnaHQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAhRhdXRvc3Rha2VfbGFzdEJsb2NrXwUKYXNzZXRJZFN0cgQMc3RhdGVDaGFuZ2VzAwMJAAACBQpsYXN0SGVpZ2h0BQZoZWlnaHQGCQAAAgUGYW1vdW50AAAFA25pbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAhhhdXRvc3Rha2VfcHJlTGFzdEVhcm5lZF8FCmFzc2V0SWRTdHIFBmVhcm5lZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAhdhdXRvc3Rha2VfcHJlTGFzdEJsb2NrXwUKYXNzZXRJZFN0cgUKbGFzdEhlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAhVhdXRvc3Rha2VfbGFzdEVhcm5lZF8FCmFzc2V0SWRTdHIJAGQCBQZlYXJuZWQFBmFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAhRhdXRvc3Rha2VfbGFzdEJsb2NrXwUKYXNzZXRJZFN0cgUGaGVpZ2h0BQNuaWwJAM4IAgUMc3RhdGVDaGFuZ2VzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCmFzc2V0SWRTdHICBl9zUmF0ZQkAZAIJAQ10cnlHZXRJbnRlZ2VyAQkArAICBQphc3NldElkU3RyAgZfc1JhdGUJAGsDBQdTY2FsZTE2BQZhbW91bnQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9zdXBwbGllZF8FCmFzc2V0SWRTdHIFA25pbAFpAQdwcmVJbml0BAZ0b2tlbnMEbHR2cwNsdHMJcGVuYWx0aWVzCgEBZgIFYWNjdW0FdG9rZW4JAM4IAgUFYWNjdW0JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUFdG9rZW4CBl9iUmF0ZQUHU2NhbGUxNgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQV0b2tlbgIGX3NSYXRlBQdTY2FsZTE2BQNuaWwDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAgphZG1pbiBvbmx5BAVyYXRlcwoAAiRsCQC1CQIFBnRva2VucwIBLAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEBZgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQICDHNldHVwX3Rva2VucwUGdG9rZW5zCQDMCAIJAQtTdHJpbmdFbnRyeQICCnNldHVwX2x0dnMFBGx0dnMJAMwIAgkBC1N0cmluZ0VudHJ5AgIJc2V0dXBfbHRzBQNsdHMJAMwIAgkBC1N0cmluZ0VudHJ5AgIPc2V0dXBfcGVuYWx0aWVzBQlwZW5hbHRpZXMJAMwIAgkBDEJvb2xlYW5FbnRyeQICDHNldHVwX2FjdGl2ZQYFA25pbAUFcmF0ZXMBaQEMaW5pdE5ld1Rva2VuBAV0b2tlbgNsdHYCbHQHcGVuYWx0eQMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECCmFkbWluIG9ubHkJAMwIAgkBC1N0cmluZ0VudHJ5AgIMc2V0dXBfdG9rZW5zCQCsAgIJAKwCAgkBDHRyeUdldFN0cmluZwECDHNldHVwX3Rva2VucwIBLAUFdG9rZW4JAMwIAgkBC1N0cmluZ0VudHJ5AgIKc2V0dXBfbHR2cwkArAICCQCsAgIJAQx0cnlHZXRTdHJpbmcBAgpzZXR1cF9sdHZzAgEsBQNsdHYJAMwIAgkBC1N0cmluZ0VudHJ5AgIJc2V0dXBfbHRzCQCsAgIJAKwCAgkBDHRyeUdldFN0cmluZwECCXNldHVwX2x0cwIBLAUCbHQJAMwIAgkBC1N0cmluZ0VudHJ5AgIPc2V0dXBfcGVuYWx0aWVzCQCsAgIJAKwCAgkBDHRyeUdldFN0cmluZwECD3NldHVwX3BlbmFsdGllcwIBLAUHcGVuYWx0eQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQV0b2tlbgIGX2JSYXRlBQdTY2FsZTE2CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBXRva2VuAgZfc1JhdGUFB1NjYWxlMTYFA25pbAFpAQ91cGRhdGVQYXJhbWV0ZXICA2tleQN2YWwDAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQECIT0CCAUBaQZjYWxsZXIJAQdBZGRyZXNzAQEaAVcUeViFwPoaZ+cUNI0M98TwbUXt9hz5PUEHCQACAQIKYWRtaW4gb25seQkAzAgCCQEMSW50ZWdlckVudHJ5AgUDa2V5CQENcGFyc2VJbnRWYWx1ZQEFA3ZhbAUDbmlsAWkBDHVwZGF0ZVN0cmluZwIDa2V5A3ZhbAMDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAQIhPQIIBQFpBmNhbGxlcgkBB0FkZHJlc3MBARoBVxR5WIXA+hpn5xQ0jQz3xPBtRe32HPk9QQcJAAIBAgphZG1pbiBvbmx5CQDMCAIJAQtTdHJpbmdFbnRyeQIFA2tleQUDdmFsBQNuaWwBaQESY2xhaW1Ub1Jlc2VydmVGdW5kAQVkZWJ1ZwQGYXNzZXRzCQEPZ2V0TWFya2V0QXNzZXRzAAQFcmF0ZXMICQENZ2V0QWN0dWFsUmF0ZQIJAJEDAgUGYXNzZXRzAAACBXNSYXRlAl8yBAJsaQkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQUDbmlsCgEBZgIFYWNjdW0BbgMJAGcCBQFuCQCQAwEFBmFzc2V0cwUFYWNjdW0ECmFzc2V0SWRTdHIJAJEDAgUGYXNzZXRzBQFuBA9hdXRvc3Rha2VBbW91bnQJAQx0cnlHZXRTdHJpbmcBCQCsAgICEWF1dG9zdGFrZV9hbW91bnRfBQphc3NldElkU3RyBAZhbW91bnQJAGUCCQBkAgkAZAIJAGQCCQEKZ2V0QmFsYW5jZQEFCmFzc2V0SWRTdHIJAQ10cnlHZXRJbnRlZ2VyAQkArAICAhFhdXRvc3Rha2VfYW1vdW50XwUKYXNzZXRJZFN0cgMJAQIhPQIFD2F1dG9zdGFrZUFtb3VudAIACQENcGFyc2VJbnRWYWx1ZQEFD2F1dG9zdGFrZUFtb3VudAAACQBrAwkBDXRyeUdldEludGVnZXIBCQCsAgICD3RvdGFsX2JvcnJvd2VkXwUKYXNzZXRJZFN0cggJAJEDAgUFcmF0ZXMJAGQCCQBoAgUBbgADAAEFdmFsdWUFB1NjYWxlMTYJAGsDCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfc3VwcGxpZWRfBQphc3NldElkU3RyCAkAkQMCBQVyYXRlcwkAaAIFAW4AAwV2YWx1ZQUHU2NhbGUxNgQDaW52AwkAZgIJAQ10cnlHZXRJbnRlZ2VyAQkArAICAhFhdXRvc3Rha2VfYW1vdW50XwUKYXNzZXRJZFN0cgAACQD8BwQFBHRoaXMCDHVuc3Rha2VUb2tlbgkAzAgCBQphc3NldElkU3RyCQDMCAIJAJYDAQkAzAgCBQZhbW91bnQJAMwIAgAABQNuaWwFA25pbAUDbmlsAAADCQAAAgUDaW52BQNpbnYJAM4IAgUFYWNjdW0JAMwIAgUGYW1vdW50BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4ECXBhcmFtZXRlcgoAAiRsBQJsaQoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEBZgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgoBAmYyAgVhY2N1bQFuAwkAZwIFAW4JAJADAQUGYXNzZXRzBQVhY2N1bQQKYXNzZXRJZFN0cgkAkQMCBQZhc3NldHMFAW4JAM4IAgUFYWNjdW0JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUScmVzZXJ2ZUZ1bmRBZGRyZXNzCQCWAwEJAMwIAgkAkQMCBQlwYXJhbWV0ZXIFAW4JAMwIAgAABQNuaWwJAQ1nZXRBc3NldEJ5dGVzAQUKYXNzZXRJZFN0cgUDbmlsAwUFZGVidWcJAAIBCQEKbGlJbnRUb1N0cgEFCXBhcmFtZXRlcgkAlAoCCgACJGwFAmxpCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYxXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQJmMgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMV8yAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgUJcGFyYW1ldGVyAWkBB3JlU2V0dXABCmFzc2V0SWRTdHIEC2xhc3RSZXNldHVwCQENdHJ5R2V0SW50ZWdlcgECEnJlc2V0dXBfbGFzdFVwZGF0ZQMJAGYCBQlkYXlCbG9ja3MJAGUCBQZoZWlnaHQFC2xhc3RSZXNldHVwCQACAQIgY2FuIGJlIHVwZGF0ZWQgb25seSBvbmNlIHBlciBkYXkEA2x0cwkAtQkCCQEMdHJ5R2V0U3RyaW5nAQIJc2V0dXBfbHRzAgEsBAZhc3NldHMJAQ9nZXRNYXJrZXRBc3NldHMABAJ1cgkBBWdldFVyAQUKYXNzZXRJZFN0cgQGdGVtcExUCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICAgZzZXR1cF8FCmFzc2V0SWRTdHICB190ZW1wTFQEAmx0CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGYXNzZXRzCQEFdmFsdWUBCQDPCAIFBmFzc2V0cwUKYXNzZXRJZFN0cgMJAGYCBQJ1cgCAlfUqCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgIGc2V0dXBfBQphc3NldElkU3RyAgdfdGVtcExUCQBrAwUGdGVtcExUAPdNAJBOBQNuaWwDAwkAZgIFAmx0BQZ0ZW1wTFQJAGYCAICV9SoFAnVyBwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgICBnNldHVwXwUKYXNzZXRJZFN0cgIHX3RlbXBMVAkAawMFBnRlbXBMVACpTgCQTgUDbmlsBQNuaWwBaQEIc2h1dGRvd24BCHNodXRkb3duAwkAAAIJAM8IAgURc2h1dGRvd25XaGl0ZWxpc3QICAUBaQZjYWxsZXIFYnl0ZXMFBHVuaXQJAAIBAhd1c2VyIG5vdCBpbiBhIHdoaXRlbGlzdAkAzAgCCQEMQm9vbGVhbkVudHJ5AgIMc2V0dXBfYWN0aXZlCQEBIQEFCHNodXRkb3duBQNuaWwBaQEJbGlxdWlkYXRlBgVkZWJ1ZwdhZGRyZXNzC2Fzc2V0QW1vdW50C3NBc3NldElkU3RyC2JBc3NldElkU3RyCHJvdXRlU3RyAwkBASEBCQEWdmVyaWZ5TGlxdWlkYXRvclJpZ2h0cwEIBQFpBmNhbGxlcgkAAgECKHRlbXBvcmFyaWx5IGF2YWlsYWJsZSBmb3Igd2hpdGVsaXN0IG9ubHkDCQEBIQEJAQ10cnlHZXRCb29sZWFuAQIMc2V0dXBfYWN0aXZlCQACAQIRbWFya2V0IGlzIHN0b3BwZWQEDnVzZXJDb2xsYXRlcmFsCQESY2FsY1VzZXJDb2xsYXRlcmFsAQUHYWRkcmVzcwMJAAACBQ51c2VyQ29sbGF0ZXJhbAUOdXNlckNvbGxhdGVyYWwEDSR0MDI4MjY3MjgzMjkJAQ1nZXRBY3R1YWxSYXRlAgULc0Fzc2V0SWRTdHICBXNSYXRlBAVzUmF0ZQgFDSR0MDI4MjY3MjgzMjkCXzEEC3JhdGVzUmVzdWx0CAUNJHQwMjgyNjcyODMyOQJfMgQNJHQwMjgzMzQyODQwMwkBDWdldEFjdHVhbFJhdGUCBQtiQXNzZXRJZFN0cgIFYlJhdGUEBWJSYXRlCAUNJHQwMjgzMzQyODQwMwJfMQQScmF0ZXNSZWNhbGNSZXN1bHQyCAUNJHQwMjgzMzQyODQwMwJfMgQMc0Fzc2V0QW1vdW50CQBrAwULYXNzZXRBbW91bnQFB1NjYWxlMTYFBXNSYXRlBBBjdXJyZW50U1Bvc2l0aW9uCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICBQdhZGRyZXNzAgpfc3VwcGxpZWRfBQtzQXNzZXRJZFN0cgQTY3VycmVudEJQb3NpdGlvblZhbAkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgUHYWRkcmVzcwIKX2JvcnJvd2VkXwULYkFzc2V0SWRTdHIEEGN1cnJlbnRCUG9zaXRpb24DCQBmAgUTY3VycmVudEJQb3NpdGlvblZhbAAABRNjdXJyZW50QlBvc2l0aW9uVmFsCQACAQIgdXNlciBoYXMgbm8gYm9ycm93IGluIHRoaXMgdG9rZW4DCQBmAgUOdXNlckNvbGxhdGVyYWwAAAkAAgECGHVzZXIgY2FuJ3QgYmUgbGlxdWlkYXRlZAMJAGYCBQxzQXNzZXRBbW91bnQFEGN1cnJlbnRTUG9zaXRpb24JAAIBAjJwb3NpdGlvbiB0byBsaXF1aWRhdGUgaXMgYmlnZ2VyIHRoYW4gdXNlcidzIHN1cHBseQQOYmFsYW5jZTBCZWZvcmUJAQpnZXRCYWxhbmNlAQULc0Fzc2V0SWRTdHIDCQAAAgUOYmFsYW5jZTBCZWZvcmUFDmJhbGFuY2UwQmVmb3JlBA5iYWxhbmNlMUJlZm9yZQkBCmdldEJhbGFuY2UBBQtiQXNzZXRJZFN0cgMJAAACBQ5iYWxhbmNlMUJlZm9yZQUOYmFsYW5jZTFCZWZvcmUEDmV4Y2hhbmdlSW52b2tlCQD8BwQFEWFnZ3JlZ2F0b3JBZGRyZXNzAgRzd2FwCQDMCAIFCHJvdXRlU3RyCQDMCAIAAAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQENZ2V0QXNzZXRCeXRlcwEFC3NBc3NldElkU3RyBQthc3NldEFtb3VudAUDbmlsAwkAAAIFDmV4Y2hhbmdlSW52b2tlBQ5leGNoYW5nZUludm9rZQQKYXNzZXQwU29sZAkAZQIFDmJhbGFuY2UwQmVmb3JlCQEKZ2V0QmFsYW5jZQEFC3NBc3NldElkU3RyAwkAAAIFCmFzc2V0MFNvbGQFCmFzc2V0MFNvbGQEDGFzc2V0MUJvdWdodAkAZQIJAQpnZXRCYWxhbmNlAQULYkFzc2V0SWRTdHIFDmJhbGFuY2UxQmVmb3JlAwkAAAIFDGFzc2V0MUJvdWdodAUMYXNzZXQxQm91Z2h0BAthc3NldDBQcmljZQgJAQ1nZXRUb2tlblByaWNlAQULc0Fzc2V0SWRTdHICXzEEC2Fzc2V0MFNjYWxlCQEOY2FsY0Fzc2V0U2NhbGUBBQtzQXNzZXRJZFN0cgQJYXNzZXQwVXNkCQBrAwUKYXNzZXQwU29sZAULYXNzZXQwUHJpY2UFC2Fzc2V0MFNjYWxlBAthc3NldDFQcmljZQgJAQ1nZXRUb2tlblByaWNlAQULYkFzc2V0SWRTdHICXzIEC2Fzc2V0MVNjYWxlCQEOY2FsY0Fzc2V0U2NhbGUBBQtiQXNzZXRJZFN0cgQJYXNzZXQxVXNkCQBrAwUMYXNzZXQxQm91Z2h0BQthc3NldDFQcmljZQULYXNzZXQxU2NhbGUEB3BlbmFsdHkJAQ1wYXJzZUludFZhbHVlAQkAkQMCCQC1CQIJAQx0cnlHZXRTdHJpbmcBAg9zZXR1cF9wZW5hbHRpZXMCASwJAQV2YWx1ZQEJAM8IAgkBD2dldE1hcmtldEFzc2V0cwAFC2JBc3NldElkU3RyBBFsaXF1aWRhdGlvblByb2ZpdAkAZQIFCWFzc2V0MVVzZAkAawMFCWFzc2V0MFVzZAkAZQIFBlNjYWxlOAUHcGVuYWx0eQUGU2NhbGU4BAxzQXNzZXRDaGFuZ2UJAGsDBQphc3NldDBTb2xkBQdTY2FsZTE2BQVzUmF0ZQQMYkFzc2V0Q2hhbmdlCQBrAwkAawMFDGFzc2V0MUJvdWdodAUHU2NhbGUxNgUFYlJhdGUJAGUCBQZTY2FsZTgJAGsDBRFsaXF1aWRhdGlvblByb2ZpdAUGU2NhbGU4BQlhc3NldDFVc2QFBlNjYWxlOAMJAGYCBQphc3NldDBTb2xkBQthc3NldEFtb3VudAkAAgECI21vcmUgYXNzZXRzIGV4Y2hhbmdlZCB0aGFuIGV4cGVjdGVkAwkAZgIAAAURbGlxdWlkYXRpb25Qcm9maXQJAAIBAi9wcmljZSBpbXBhY3QgaXMgYmlnZ2VyIHRoYW4gbGlxdWlkYXRpb24gcGVuYWx0eQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIFB2FkZHJlc3MCCl9zdXBwbGllZF8FC3NBc3NldElkU3RyCQBlAgUQY3VycmVudFNQb3NpdGlvbgUMc0Fzc2V0Q2hhbmdlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgUHYWRkcmVzcwIKX2JvcnJvd2VkXwULYkFzc2V0SWRTdHIJAGUCBRBjdXJyZW50QlBvc2l0aW9uBQxiQXNzZXRDaGFuZ2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIPdG90YWxfc3VwcGxpZWRfBQtzQXNzZXRJZFN0cgkAZQIJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9zdXBwbGllZF8FC3NBc3NldElkU3RyBQxzQXNzZXRDaGFuZ2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIPdG90YWxfYm9ycm93ZWRfBQtiQXNzZXRJZFN0cgkAZQIJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9ib3Jyb3dlZF8FC2JBc3NldElkU3RyBQxiQXNzZXRDaGFuZ2UFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQtsaXF1aWRhdGVWMgMFZGVidWcHYWRkcmVzcwtzQXNzZXRJZFN0cgMJAQEhAQkBFnZlcmlmeUxpcXVpZGF0b3JSaWdodHMBCAUBaQZjYWxsZXIJAAIBAih0ZW1wb3JhcmlseSBhdmFpbGFibGUgZm9yIHdoaXRlbGlzdCBvbmx5AwkBASEBCQENdHJ5R2V0Qm9vbGVhbgECDHNldHVwX2FjdGl2ZQkAAgECEW1hcmtldCBpcyBzdG9wcGVkBAhiQXNzZXRJZAgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAtiQXNzZXRJZFN0cgkBDmdldEFzc2V0U3RyaW5nAQUIYkFzc2V0SWQEDGJBc3NldEFtb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQEDnVzZXJDb2xsYXRlcmFsCQESY2FsY1VzZXJDb2xsYXRlcmFsAQUHYWRkcmVzcwMJAAACBQ51c2VyQ29sbGF0ZXJhbAUOdXNlckNvbGxhdGVyYWwDCQBmAgUOdXNlckNvbGxhdGVyYWwAAAkAAgECGHVzZXIgY2FuJ3QgYmUgbGlxdWlkYXRlZAQMbWFya2V0QXNzZXRzCQEPZ2V0TWFya2V0QXNzZXRzAAQJYXNzZXQxTnVtCQEFdmFsdWUBCQDPCAIFDG1hcmtldEFzc2V0cwULYkFzc2V0SWRTdHIECWFzc2V0ME51bQkBBXZhbHVlAQkAzwgCBQxtYXJrZXRBc3NldHMFC3NBc3NldElkU3RyBA0kdDAzMTU1ODMxNjIwCQENZ2V0QWN0dWFsUmF0ZQIFC2JBc3NldElkU3RyAgViUmF0ZQQFYlJhdGUIBQ0kdDAzMTU1ODMxNjIwAl8xBAtyYXRlc1Jlc3VsdAgFDSR0MDMxNTU4MzE2MjACXzIEC2Fzc2V0MVByaWNlCAkBDWdldFRva2VuUHJpY2UBBQtiQXNzZXRJZFN0cgJfMgQLYXNzZXQxU2NhbGUJAQ5jYWxjQXNzZXRTY2FsZQEFC2JBc3NldElkU3RyBApiQW1vdW50VXNkCQBrAwUMYkFzc2V0QW1vdW50BQthc3NldDFQcmljZQULYXNzZXQxU2NhbGUEB3BlbmFsdHkJAQ1wYXJzZUludFZhbHVlAQkBBXZhbHVlAQkAkQMCCQC1CQIJAQx0cnlHZXRTdHJpbmcBAg9zZXR1cF9wZW5hbHRpZXMCASwFCWFzc2V0MU51bQQLYXNzZXQwUHJpY2UICQENZ2V0VG9rZW5QcmljZQEFC3NBc3NldElkU3RyAl8xBAthc3NldDBTY2FsZQkBDmNhbGNBc3NldFNjYWxlAQULc0Fzc2V0SWRTdHIECnNBbW91bnRVc2QJAGsDBQpiQW1vdW50VXNkCQBkAgUGU2NhbGU4BQdwZW5hbHR5BQZTY2FsZTgEDHNBc3NldEFtb3VudAkAawMFCnNBbW91bnRVc2QFC2Fzc2V0MFNjYWxlBQthc3NldDBQcmljZQQHYkFtb3VudAkAawMFDGJBc3NldEFtb3VudAUHU2NhbGUxNgUFYlJhdGUEB3NBbW91bnQJAGsDBQxzQXNzZXRBbW91bnQFB1NjYWxlMTYICQCRAwIFC3JhdGVzUmVzdWx0CQBkAgkAaAIFCWFzc2V0ME51bQADAAEFdmFsdWUEA2ludgMJAQIhPQIJAM8IAgUHYXhseUxQcwULc0Fzc2V0SWRTdHIFBHVuaXQEBXBvc0lkCQCRAwIJALUJAgUHYWRkcmVzcwIBXwABBAlhZGRyZXNzSWQJAJEDAgkAtQkCBQdhZGRyZXNzAgFfAAAJAP0HBAULYXhseUFkZHJlc3MCCWxpcXVpZGF0ZQkAzAgCBQlhZGRyZXNzSWQJAMwIAgUFcG9zSWQJAMwIAgUHc0Ftb3VudAUDbmlsBQNuaWwFA25pbAMJAAACBQNpbnYFA2ludgQQY3VycmVudFNQb3NpdGlvbgkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgUHYWRkcmVzcwIKX3N1cHBsaWVkXwULc0Fzc2V0SWRTdHIEE2N1cnJlbnRCUG9zaXRpb25WYWwJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgIFB2FkZHJlc3MCCl9ib3Jyb3dlZF8FC2JBc3NldElkU3RyBBBjdXJyZW50QlBvc2l0aW9uAwkAZgIFE2N1cnJlbnRCUG9zaXRpb25WYWwAAAUTY3VycmVudEJQb3NpdGlvblZhbAkAAgECIHVzZXIgaGFzIG5vIGJvcnJvdyBpbiB0aGlzIHRva2VuAwkAZgIFB3NBbW91bnQFEGN1cnJlbnRTUG9zaXRpb24JAAIBAjJwb3NpdGlvbiB0byBsaXF1aWRhdGUgaXMgYmlnZ2VyIHRoYW4gdXNlcidzIHN1cHBseQMFBWRlYnVnCQACAQIVbGlxdWlkYXRpb24gd2lsbCBwYXNzCQDOCAIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQxzQXNzZXRBbW91bnQJAQ1nZXRBc3NldEJ5dGVzAQULc0Fzc2V0SWRTdHIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICBQdhZGRyZXNzAgpfc3VwcGxpZWRfBQtzQXNzZXRJZFN0cgkAZQIFEGN1cnJlbnRTUG9zaXRpb24FB3NBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICBQdhZGRyZXNzAgpfYm9ycm93ZWRfBQtiQXNzZXRJZFN0cgkAZQIFEGN1cnJlbnRCUG9zaXRpb24FB2JBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIPdG90YWxfc3VwcGxpZWRfBQtzQXNzZXRJZFN0cgkAZQIJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9zdXBwbGllZF8FC3NBc3NldElkU3RyBQdzQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICD3RvdGFsX2JvcnJvd2VkXwULYkFzc2V0SWRTdHIJAGUCCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfYm9ycm93ZWRfBQtiQXNzZXRJZFN0cgUHYkFtb3VudAUDbmlsBQtyYXRlc1Jlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARFnZXRVc2VyQ29sbGF0ZXJhbAQFZGVidWcHYWRkcmVzcw1taW51c0JvcnJvd2VkC2FmdGVyQ2hhbmdlBAZhc3NldHMJAQ9nZXRNYXJrZXRBc3NldHMABARsdHZzCQC1CQIJAQx0cnlHZXRTdHJpbmcBAgpzZXR1cF9sdHZzAgEsBANsdHMJALUJAgkBDHRyeUdldFN0cmluZwECCXNldHVwX2x0cwIBLAQFcmF0ZXMICQENZ2V0QWN0dWFsUmF0ZQIJAJEDAgUGYXNzZXRzAAACBXNSYXRlAl8yBA1jaGFuZ2VIYW5kbGVyCQC1CQIFC2FmdGVyQ2hhbmdlAgEsCgEBZgIFYWNjdW0EbmV4dAMJAGcCBQRuZXh0CQCQAwEFBmFzc2V0cwUFYWNjdW0EDHVzZXJTdXBwbGllZAkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgUHYWRkcmVzcwIKX3N1cHBsaWVkXwkAkQMCBQZhc3NldHMFBG5leHQEDHVzZXJCb3Jyb3dlZAkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgUHYWRkcmVzcwIKX2JvcnJvd2VkXwkAkQMCBQZhc3NldHMFBG5leHQEE25lZWRUb2tlbkFjY291bnRpbmcDCQAAAgULYWZ0ZXJDaGFuZ2UCAAMDCQECIT0CBQx1c2VyQm9ycm93ZWQAAAYJAQIhPQIFDHVzZXJTdXBwbGllZAAABgcGAwUTbmVlZFRva2VuQWNjb3VudGluZwQKYXNzZXRTY2FsZQkBDmNhbGNBc3NldFNjYWxlAQkAkQMCBQZhc3NldHMFBG5leHQECmFzc2V0UHJpY2UJAQ1nZXRUb2tlblByaWNlAQkAkQMCBQZhc3NldHMFBG5leHQJAGUCCQBkAgUFYWNjdW0JAGsDCQBrAwkAawMJAGQCBQx1c2VyU3VwcGxpZWQDAwMJAQIhPQIFC2FmdGVyQ2hhbmdlAgAJAAACCQCRAwIFDWNoYW5nZUhhbmRsZXIAAAkAkQMCBQZhc3NldHMFBG5leHQHCQAAAgkAkQMCBQ1jaGFuZ2VIYW5kbGVyAAECCHN1cHBsaWVkBwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDWNoYW5nZUhhbmRsZXIAAgAACAkAkQMCBQVyYXRlcwkAaAIFBG5leHQAAwV2YWx1ZQUHU2NhbGUxNgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGx0dnMFBG5leHQFBlNjYWxlOAgFCmFzc2V0UHJpY2UCXzEFCmFzc2V0U2NhbGUDBQ1taW51c0JvcnJvd2VkCQBrAwkAawMJAGsDCQBkAgUMdXNlckJvcnJvd2VkAwMDCQECIT0CBQthZnRlckNoYW5nZQIACQAAAgkAkQMCBQ1jaGFuZ2VIYW5kbGVyAAAJAJEDAgUGYXNzZXRzBQRuZXh0BwkAAAIJAJEDAgUNY2hhbmdlSGFuZGxlcgABAghib3Jyb3dlZAcJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ1jaGFuZ2VIYW5kbGVyAAIAAAgJAJEDAgUFcmF0ZXMJAGQCCQBoAgUEbmV4dAADAAEFdmFsdWUFB1NjYWxlMTYFBlNjYWxlOAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFA2x0cwUEbmV4dAgFCmFzc2V0UHJpY2UCXzIFCmFzc2V0U2NhbGUAAAUFYWNjdW0EBnJlc3VsdAoAAiRsCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFBQNuaWwKAAIkcwkAkAMBBQIkbAoABSRhY2MwAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBAWYCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYDBQVkZWJ1ZwkAAgEJAKQDAQUGcmVzdWx0CQCUCgIFA25pbAUGcmVzdWx0AWkBDGdldEFzc2V0RGVidAMFZGVidWcHYWRkcmVzcwphc3NldElkU3RyBAx1c2VyQm9ycm93ZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgIFB2FkZHJlc3MCCl9ib3Jyb3dlZF8FCmFzc2V0SWRTdHIECmFzc2V0U2NhbGUJAQ5jYWxjQXNzZXRTY2FsZQEFCmFzc2V0SWRTdHIEBHJhdGUICQENZ2V0QWN0dWFsUmF0ZQIFCmFzc2V0SWRTdHICBWJSYXRlAl8xBAZyZXN1bHQJAGsDBQx1c2VyQm9ycm93ZWQFBHJhdGUFB1NjYWxlMTYDBQVkZWJ1ZwkAAgEJAKQDAQUGcmVzdWx0CQCUCgIFA25pbAUGcmVzdWx0AWkBCWdldFByaWNlcwEFZGVidWcEBmFzc2V0cwkBD2dldE1hcmtldEFzc2V0cwAKAQFmAgVhY2N1bQRuZXh0AwkAZwIFBG5leHQJAJADAQUGYXNzZXRzBQVhY2N1bQQKYXNzZXRQcmljZQkBDWdldFRva2VuUHJpY2UBCQCRAwIFBmFzc2V0cwUEbmV4dAkArAICCQCsAgIJAKwCAgkArAICBQVhY2N1bQkApAMBCAUKYXNzZXRQcmljZQJfMQIBLAkApAMBCAUKYXNzZXRQcmljZQJfMgIBfAQGcmVzdWx0CgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzACAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEBZgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgMFBWRlYnVnCQACAQUGcmVzdWx0CQCUCgIFA25pbAUGcmVzdWx0AWkBGWNhbGN1bGF0ZVV0aWxpemF0aW9uUmF0aW8CCmFzc2V0SWRTdHIFZGVidWcDBQVkZWJ1ZwkAAgEJAKQDAQkBBWdldFVyAQUKYXNzZXRJZFN0cgkAlAoCBQNuaWwJAQVnZXRVcgEFCmFzc2V0SWRTdHIBaQETY2FsY3VsYXRlT3V0ZGF0ZWRVUgIKYXNzZXRJZFN0cgVkZWJ1ZwMFBWRlYnVnCQACAQkApAMBCQENZ2V0T3V0ZGF0ZWRVcgEFCmFzc2V0SWRTdHIJAJQKAgUDbmlsCQENZ2V0T3V0ZGF0ZWRVcgEFCmFzc2V0SWRTdHIBaQETY2FsY3VsYXRlVG9rZW5SYXRlcwEFZGVidWcKAQFmAgVhY2N1bQphc3NldElkU3RyBAVyYXRlcwkBEHRva2VuUmF0ZXNSZWNhbGMBBQphc3NldElkU3RyCQCUCgIJAKwCAgkArAICCQCsAgIJAKwCAggFBWFjY3VtAl8xCQCkAwEICQCRAwIFBXJhdGVzAAEFdmFsdWUCAXwJAKQDAQgJAJEDAgUFcmF0ZXMAAAV2YWx1ZQIBLAkAzggCCAUFYWNjdW0CXzIFBXJhdGVzBAlwYXJhbWV0ZXIKAAIkbAkBD2dldE1hcmtldEFzc2V0cwAKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgICAAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQFmAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAwUFZGVidWcJAAIBCAUJcGFyYW1ldGVyAl8xCQCUCgIIBQlwYXJhbWV0ZXICXzIIBQlwYXJhbWV0ZXICXzEBaQEXY2FsY3VsYXRlVG9rZW5zSW50ZXJlc3QBBWRlYnVnCgEBZgIFYWNjdW0KYXNzZXRJZFN0cgQEcmF0ZQkAawMJAQtnZXRJbnRlcmVzdAEFCmFzc2V0SWRTdHIFCWRheUJsb2NrcwUGU2NhbGU4CQCsAgIJAKwCAgUFYWNjdW0JAKQDAQUEcmF0ZQIBLAQJcGFyYW1ldGVyCgACJGwJAQ9nZXRNYXJrZXRBc3NldHMACgACJHMJAJADAQUCJGwKAAUkYWNjMAIACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQFmAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAwUFZGVidWcJAAIBBQlwYXJhbWV0ZXIJAJQKAgUDbmlsBQlwYXJhbWV0ZXIBAnR4AQZ2ZXJpZnkACQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5IraXqQ==", "height": 2629211, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: HuL3PdrDxgtddSUk5tzRx6rVgADLqfcrG5hVmegTVb7W Next: 7FEAxFuxT6ctEPpPt65SMM3T7Dr2cy2BDizMYAeiTtG2 Diff:
OldNewDifferences
77
88 let c = 1000000
99
10-let d = Address(base58'3Mzzt65puEs2W9M1m9iFBvMEdfM5bASE1hJ')
10+let d = Address(base58'3MvRWw2FPEimFCTGtK7qY9uAJbM7XJ4ZfJS')
1111
12-let e = "3N4KbMnJH8FaM94jqxNFe2oyZ8GB7Z8yVBP"
12+let e = ["8DtMtpVwVq62sdcVFVzh6nuprgzG7LSjpLdHnQnrAFgY", "FLdC14nUVRyiSYjVrMo3X4g8rXQjLbNRaGAyQAm8V68V"]
1313
14-let f = [base58'3PMcMiMEs6w56NRGacksXtFG5zS7doE9fpL', base58'3PAxdDSmN758L5SHSGRC5apEtQE2aApZotG', base58'3PJKmXoHJvVeQXjSJdhtkUcFDtdiQqMbUTD', base58'3PQdNxynJy5mche2kxMVc5shXWzK8Gstq3o', base58'3PHbdpaKzz8EiAngGHaFu2hVuNCdsC67qh3', base58'3P6Ksahs71SiKQgQ4qaZuFAVhqncdi2nvJQ']
14+let f = Address(base58'3Mzzt65puEs2W9M1m9iFBvMEdfM5bASE1hJ')
1515
16-func g (h) = !((h != Address(base58'3Mzzt65puEs2W9M1m9iFBvMEdfM5bASE1hJ')))
16+let g = "3N4KbMnJH8FaM94jqxNFe2oyZ8GB7Z8yVBP"
17+
18+let h = [base58'3PMcMiMEs6w56NRGacksXtFG5zS7doE9fpL', base58'3PAxdDSmN758L5SHSGRC5apEtQE2aApZotG', base58'3PJKmXoHJvVeQXjSJdhtkUcFDtdiQqMbUTD', base58'3PQdNxynJy5mche2kxMVc5shXWzK8Gstq3o', base58'3PHbdpaKzz8EiAngGHaFu2hVuNCdsC67qh3', base58'3P6Ksahs71SiKQgQ4qaZuFAVhqncdi2nvJQ']
19+
20+func i (j) = !((j != Address(base58'3Mzzt65puEs2W9M1m9iFBvMEdfM5bASE1hJ')))
1721
1822
19-func i (j) = {
20- let k = j
21- if (("8DtMtpVwVq62sdcVFVzh6nuprgzG7LSjpLdHnQnrAFgY" == k))
23+func k (l) = {
24+ let m = l
25+ if (("8DtMtpVwVq62sdcVFVzh6nuprgzG7LSjpLdHnQnrAFgY" == m))
2226 then $Tuple4(2000000, 25000000, 80000000, 100000000)
23- else if (("25FEqEjRkqK6yCkiT7Lz6SAYz7gUFCtxfCChnrVFD5AT" == k))
27+ else if (("FLdC14nUVRyiSYjVrMo3X4g8rXQjLbNRaGAyQAm8V68V" == m))
2428 then $Tuple4(2000000, 25000000, 80000000, 100000000)
25- else if (("WAVES" == k))
26- then $Tuple4(2000000, 30000000, 80000000, 50000000)
27- else $Tuple4(0, 20000000, 80000000, 80000000)
29+ else if (("25FEqEjRkqK6yCkiT7Lz6SAYz7gUFCtxfCChnrVFD5AT" == m))
30+ then $Tuple4(2000000, 25000000, 80000000, 100000000)
31+ else if (("WAVES" == m))
32+ then $Tuple4(2000000, 30000000, 80000000, 50000000)
33+ else $Tuple4(0, 20000000, 80000000, 80000000)
2834 }
2935
3036
31-let l = 100000000
37+let n = 100000000
3238
33-let m = 10000000000
39+let o = 10000000000
3440
35-let n = (l * l)
41+let p = (n * n)
3642
37-let o = 1440
43+let q = 1440
3844
39-func p (q) = {
40- func r (s,t) = ((s + toString(t)) + ",")
45+func r (s) = {
46+ func t (u,v) = ((u + toString(v)) + ",")
4147
42- let u = q
43- let v = size(u)
44- let w = ""
45- func x (y,z) = if ((z >= v))
46- then y
47- else r(y, u[z])
48+ let w = s
49+ let x = size(w)
50+ let y = ""
51+ func z (A,B) = if ((B >= x))
52+ then A
53+ else t(A, w[B])
4854
49- func A (y,z) = if ((z >= v))
50- then y
55+ func C (A,B) = if ((B >= x))
56+ then A
5157 else throw("List size exceeds 6")
5258
53- A(x(x(x(x(x(x(w, 0), 1), 2), 3), 4), 5), 6)
59+ C(z(z(z(z(z(z(y, 0), 1), 2), 3), 4), 5), 6)
5460 }
5561
5662
57-func B (C) = {
58- let k = getInteger(this, C)
59- if ($isInstanceOf(k, "Int"))
63+func D (E) = {
64+ let m = getInteger(this, E)
65+ if ($isInstanceOf(m, "Int"))
6066 then {
61- let D = k
62- D
67+ let F = m
68+ F
6369 }
6470 else 0
6571 }
6672
6773
68-func E (C) = {
69- let k = getBoolean(this, C)
70- if ($isInstanceOf(k, "Boolean"))
74+func G (E) = {
75+ let m = getBoolean(this, E)
76+ if ($isInstanceOf(m, "Boolean"))
7177 then {
72- let D = k
73- D
78+ let F = m
79+ F
7480 }
7581 else false
7682 }
7783
7884
79-func F (C) = {
80- let k = getString(this, C)
81- if ($isInstanceOf(k, "String"))
85+func H (E) = {
86+ let m = getString(this, E)
87+ if ($isInstanceOf(m, "String"))
8288 then {
83- let D = k
84- D
89+ let F = m
90+ F
8591 }
8692 else ""
8793 }
8894
8995
90-func G (C) = {
91- let k = getBinary(this, C)
92- if ($isInstanceOf(k, "ByteVector"))
96+func I (E) = {
97+ let m = getBinary(this, E)
98+ if ($isInstanceOf(m, "ByteVector"))
9399 then {
94- let D = k
95- D
100+ let F = m
101+ F
96102 }
97103 else base58''
98104 }
99105
100106
101-func H (I) = {
102- let k = I
103- if ($isInstanceOf(k, "ByteVector"))
107+func J (K) = {
108+ let m = K
109+ if ($isInstanceOf(m, "ByteVector"))
104110 then {
105- let D = k
106- toBase58String(D)
111+ let F = m
112+ toBase58String(F)
107113 }
108114 else "WAVES"
109115 }
110116
111117
112-func J (j) = if ((j == "WAVES"))
118+func L (l) = if ((l == "WAVES"))
113119 then unit
114- else fromBase58String(j)
120+ else fromBase58String(l)
115121
116122
117-func K (j) = if ((j == "WAVES"))
123+func M (l) = if ((l == "WAVES"))
118124 then wavesBalance(this).available
119- else assetBalance(this, fromBase58String(j))
125+ else assetBalance(this, fromBase58String(l))
120126
121127
122-func L () = split(F("setup_tokens"), ",")
128+func N () = split(H("setup_tokens"), ",")
123129
124130
125-func M () = {
126- let N = F("setup_maxsupply")
127- if ((N == ""))
131+func O () = {
132+ let P = H("setup_maxsupply")
133+ if ((P == ""))
128134 then [-1, -1, -1, -1, -1, -1, -1]
129- else split(N, ",")
135+ else split(P, ",")
130136 }
131137
132138
133-func O (j) = {
134- let P = fraction(B(("total_supplied_" + j)), B((j + "_sRate")), n)
135- if ((P == 0))
139+func Q (l) = {
140+ let R = fraction(D(("total_supplied_" + l)), D((l + "_sRate")), p)
141+ if ((R == 0))
136142 then 0
137- else fraction(l, fraction(B(("total_borrowed_" + j)), B((j + "_bRate")), n), P)
143+ else fraction(n, fraction(D(("total_borrowed_" + l)), D((l + "_bRate")), p), R)
138144 }
139145
140146
141-func Q (j) = {
142- let R = O(j)
143- let S = i(j)
144- let T = (S._1 + (if ((S._3 >= R))
145- then fraction(R, S._2, S._3)
146- else (S._2 + fraction((R - S._3), S._4, (100000000 - S._3)))))
147- max([fraction(T, l, (o * 365)), 1])
147+func S (l) = {
148+ let T = Q(l)
149+ let U = k(l)
150+ let V = (U._1 + (if ((U._3 >= T))
151+ then fraction(T, U._2, U._3)
152+ else (U._2 + fraction((T - U._3), U._4, (100000000 - U._3)))))
153+ max([fraction(V, n, (q * 365)), 1])
148154 }
149155
150156
151-func U (j) = {
152- let V = Q(j)
153- let R = O(j)
154- let W = B("lastRateHeight")
155- let X = max([B((j + "_bRate")), n])
156- let Y = (X + ((height - W) * V))
157- let Z = max([B((j + "_sRate")), n])
158- let aa = (Z + ((((height - W) * fraction(V, R, l)) * (100 - b)) / 100))
159-[IntegerEntry((j + "_sRate"), aa), IntegerEntry((j + "_bRate"), Y), IntegerEntry("lastRateHeight", height)]
157+func W (l) = {
158+ let X = S(l)
159+ let T = Q(l)
160+ let Y = D("lastRateHeight")
161+ let Z = max([D((l + "_bRate")), p])
162+ let aa = (Z + ((height - Y) * X))
163+ let ab = max([D((l + "_sRate")), p])
164+ let ac = (ab + ((((height - Y) * fraction(X, T, n)) * (100 - b)) / 100))
165+[IntegerEntry((l + "_sRate"), ac), IntegerEntry((l + "_bRate"), aa), IntegerEntry("lastRateHeight", height)]
160166 }
161167
162168
163-func ab (j,ac) = {
164- func r (s,ad) = {
165- let ae = U(ad)
166- $Tuple2(if ((ad != j))
167- then s._1
168- else if ((ac == "sRate"))
169- then ae[0].value
170- else ae[1].value, (s._2 ++ ae))
169+func ad (l,ae) = {
170+ func t (u,af) = {
171+ let ag = W(af)
172+ $Tuple2(if ((af != l))
173+ then u._1
174+ else if ((ae == "sRate"))
175+ then ag[0].value
176+ else ag[1].value, (u._2 ++ ag))
171177 }
172178
173- let u = L()
174- let v = size(u)
175- let w = $Tuple2(0, nil)
176- func x (y,z) = if ((z >= v))
177- then y
178- else r(y, u[z])
179+ let w = N()
180+ let x = size(w)
181+ let y = $Tuple2(0, nil)
182+ func z (A,B) = if ((B >= x))
183+ then A
184+ else t(A, w[B])
179185
180- func A (y,z) = if ((z >= v))
181- then y
186+ func C (A,B) = if ((B >= x))
187+ then A
182188 else throw("List size exceeds 6")
183189
184- A(x(x(x(x(x(x(w, 0), 1), 2), 3), 4), 5), 6)
190+ C(z(z(z(z(z(z(y, 0), 1), 2), 3), 4), 5), 6)
185191 }
186192
187193
188-func af (j) = {
189- let ag = U(j)
190- let P = fraction(B(("total_supplied_" + j)), ag[0].value, n)
191- fraction(l, fraction(B(("total_borrowed_" + j)), ag[1].value, n), P)
194+func ah (l) = {
195+ let ai = W(l)
196+ let R = fraction(D(("total_supplied_" + l)), ai[0].value, p)
197+ fraction(n, fraction(D(("total_borrowed_" + l)), ai[1].value, p), R)
192198 }
193199
194200
195-func ah () = {
196- func r (s,ad) = (s ++ U(ad))
201+func aj () = {
202+ func t (u,af) = (u ++ W(af))
197203
198- let u = L()
199- let v = size(u)
200- let w = nil
201- func x (y,z) = if ((z >= v))
202- then y
203- else r(y, u[z])
204+ let w = N()
205+ let x = size(w)
206+ let y = nil
207+ func z (A,B) = if ((B >= x))
208+ then A
209+ else t(A, w[B])
204210
205- func A (y,z) = if ((z >= v))
206- then y
211+ func C (A,B) = if ((B >= x))
212+ then A
207213 else throw("List size exceeds 6")
208214
209- A(x(x(x(x(x(x(w, 0), 1), 2), 3), 4), 5), 6)
215+ C(z(z(z(z(z(z(y, 0), 1), 2), 3), 4), 5), 6)
210216 }
211217
212218
213-func ai (j) = {
214- let aj = invoke(addressFromStringValue(e), "getTWAP60", [j, false], nil)
215- if ((aj == aj))
219+func ak (l) = {
220+ let al = invoke(addressFromStringValue(g), "getTWAP60", [l, false], nil)
221+ if ((al == al))
216222 then {
217- let ak = {
218- let k = aj
219- if ($isInstanceOf(k, "(Int, Int)"))
223+ let am = {
224+ let m = al
225+ if ($isInstanceOf(m, "(Int, Int)"))
220226 then {
221- let al = k
222- al
227+ let an = m
228+ an
223229 }
224230 else throw("error of price oracle")
225231 }
226- if ((ak == ak))
227- then ak
232+ if ((am == am))
233+ then am
228234 else throw("Strict value is not equal to itself.")
229235 }
230236 else throw("Strict value is not equal to itself.")
231237 }
232238
233239
234-func am (j) = {
235- let an = if ((j == "WAVES"))
240+func ao (l) = {
241+ let ap = if ((l == "WAVES"))
236242 then 8
237- else value(assetInfo(fromBase58String(j))).decimals
238- pow(10, 0, an, 0, 0, DOWN)
243+ else value(assetInfo(fromBase58String(l))).decimals
244+ pow(10, 0, ap, 0, 0, DOWN)
239245 }
240246
241247
242-func ao (h) = {
243- let ap = invoke(this, "getUserCollateral", [false, h, true, ""], nil)
244- if ((ap == ap))
248+func aq (j) = {
249+ let ar = invoke(this, "getUserCollateral", [false, j, true, ""], nil)
250+ if ((ar == ar))
245251 then {
246- let aq = {
247- let k = ap
248- if ($isInstanceOf(k, "Int"))
252+ let as = {
253+ let m = ar
254+ if ($isInstanceOf(m, "Int"))
249255 then {
250- let al = k
251- al
256+ let an = m
257+ an
252258 }
253259 else throw("issue while doing in-dapp invocation")
254260 }
255- if ((aq == aq))
256- then aq
261+ if ((as == as))
262+ then as
257263 else throw("Strict value is not equal to itself.")
258264 }
259265 else throw("Strict value is not equal to itself.")
260266 }
261267
262268
263-func ar (j,as,h) = if (!(E("setup_active")))
269+func at (l,au,j) = if (!(G("setup_active")))
264270 then throw("market is stopped")
265271 else {
266- let at = ab(j, "sRate")
267- let au = at._1
268- let av = at._2
269- let aw = fraction(as, n, au, DOWN)
270- let ax = {
271- let k = getString(("setup_maxSupply_" + j))
272- if ($isInstanceOf(k, "String"))
272+ let av = ad(l, "sRate")
273+ let aw = av._1
274+ let ax = av._2
275+ let ay = fraction(au, p, aw, DOWN)
276+ let az = {
277+ let m = getString(("setup_maxSupply_" + l))
278+ if ($isInstanceOf(m, "String"))
273279 then {
274- let al = k
275- parseIntValue(al)
280+ let an = m
281+ parseIntValue(an)
276282 }
277283 else 0
278284 }
279- let ay = ai(j)
280- let az = (B(((h + "_supplied_") + j)) + aw)
281- let T = ab(j, "sRate")._1
282- let aA = am(j)
283- let aB = fraction(fraction(az, T, n), ay._1, aA)
284- if ((indexOf(F("setup_tokens"), j) == unit))
285+ let aA = ak(l)
286+ let aB = (D(((j + "_supplied_") + l)) + ay)
287+ let V = ad(l, "sRate")._1
288+ let aC = ao(l)
289+ let aD = fraction(fraction(aB, V, p), aA._1, aC)
290+ if ((indexOf(H("setup_tokens"), l) == unit))
285291 then throw("this asset is not supported by the market")
286- else if (if ((ax != 0))
287- then (aB > ax)
292+ else if (if ((az != 0))
293+ then (aD > az)
288294 else false)
289295 then throw("max total supply for this token reached in the pool")
290- else $Tuple2(([IntegerEntry(((h + "_supplied_") + j), az), IntegerEntry(("total_supplied_" + j), (B(("total_supplied_" + j)) + aw))] ++ av), as)
296+ else $Tuple2(([IntegerEntry(((j + "_supplied_") + l), aB), IntegerEntry(("total_supplied_" + l), (D(("total_supplied_" + l)) + ay))] ++ ax), au)
291297 }
292298
293299
294-func aC (j,as,h) = {
295- let aD = ab(j, "bRate")
296- let aE = aD._1
297- let av = aD._2
298- let aw = fraction(as, n, aE, CEILING)
299- let aF = invoke(this, "getUserCollateral", [false, h, true, ((j + ",borrowed,") + toString(aw))], nil)
300- if ((aF == aF))
300+func aE (l,au,j) = {
301+ let aF = ad(l, "bRate")
302+ let aG = aF._1
303+ let ax = aF._2
304+ let ay = fraction(au, p, aG, CEILING)
305+ let aH = invoke(this, "getUserCollateral", [false, j, true, ((l + ",borrowed,") + toString(ay))], nil)
306+ if ((aH == aH))
301307 then {
302- let aG = {
303- let k = aF
304- if ($isInstanceOf(k, "Int"))
308+ let aI = {
309+ let m = aH
310+ if ($isInstanceOf(m, "Int"))
305311 then {
306- let al = k
307- al
312+ let an = m
313+ an
308314 }
309315 else throw("can't get user collateral value")
310316 }
311- if (!(E("setup_active")))
317+ if (!(G("setup_active")))
312318 then throw("market is stopped")
313319 else {
314- let aH = B(("total_supplied_" + j))
315- let aI = B(("total_borrowed_" + j))
316- let aJ = B(((h + "_borrowed_") + j))
317- if ((aw > (aH - aI)))
320+ let aJ = D(("total_supplied_" + l))
321+ let aK = D(("total_borrowed_" + l))
322+ let aL = D(((j + "_borrowed_") + l))
323+ if ((ay > (aJ - aK)))
318324 then throw("this amount is not available")
319- else $Tuple2(([IntegerEntry(((h + "_borrowed_") + j), (aJ + aw)), IntegerEntry(("total_borrowed_" + j), (aI + aw))] ++ av), as)
325+ else $Tuple2(([IntegerEntry(((j + "_borrowed_") + l), (aL + ay)), IntegerEntry(("total_borrowed_" + l), (aK + ay))] ++ ax), au)
320326 }
321327 }
322328 else throw("Strict value is not equal to itself.")
323329 }
324330
325331
326-@Callable(aK)
327-func flashPosition (aL,aM,aN,aO,aP,aQ,aR) = {
328- let aS = aC(aN, aO, aL)
329- let aT = J(aN)
330- let aU = reentrantInvoke(addressFromStringValue(aP), aQ, split(aR, ","), [AttachedPayment(aT, aO)])
331- if ((aU == aU))
332+@Callable(aM)
333+func flashPosition (aN,aO,aP,aQ,aR,aS,aT) = {
334+ let aU = aE(aP, aQ, aN)
335+ let aV = L(aP)
336+ let aW = reentrantInvoke(addressFromStringValue(aR), aS, split(aT, ","), [AttachedPayment(aV, aQ)])
337+ if ((aW == aW))
332338 then {
333- let aV = {
334- let aW = aU
335- if ($isInstanceOf(aW, "Int"))
336- then aW
337- else throw(($getType(aW) + " couldn't be cast to Int"))
339+ let aX = {
340+ let aY = aW
341+ if ($isInstanceOf(aY, "Int"))
342+ then aY
343+ else throw(($getType(aY) + " couldn't be cast to Int"))
338344 }
339- if ((aV == aV))
345+ if ((aX == aX))
340346 then {
341- let aX = ar(aM, aV, aL)
342- let aG = {
343- let aW = invoke(this, "getUserCollateral", [false, aL, true, ((aM + ",supplied,") + toString(aV))], nil)
344- if ($isInstanceOf(aW, "Int"))
345- then aW
346- else throw(($getType(aW) + " couldn't be cast to Int"))
347+ let aZ = at(aO, aX, aN)
348+ let aI = {
349+ let aY = invoke(this, "getUserCollateral", [false, aN, true, ((aO + ",supplied,") + toString(aX))], nil)
350+ if ($isInstanceOf(aY, "Int"))
351+ then aY
352+ else throw(($getType(aY) + " couldn't be cast to Int"))
347353 }
348- if ((aG == aG))
354+ if ((aI == aI))
349355 then {
350- let aY = {
351- let aW = invoke(this, "getUserCollateral", [false, aL, true, ((aN + ",borrowed,") + toString(aO))], nil)
352- if ($isInstanceOf(aW, "Int"))
353- then aW
354- else throw(($getType(aW) + " couldn't be cast to Int"))
356+ let ba = {
357+ let aY = invoke(this, "getUserCollateral", [false, aN, true, ((aP + ",borrowed,") + toString(aQ))], nil)
358+ if ($isInstanceOf(aY, "Int"))
359+ then aY
360+ else throw(($getType(aY) + " couldn't be cast to Int"))
355361 }
356- if ((aY == aY))
357- then if ((aY > aG))
362+ if ((ba == ba))
363+ then if ((ba > aI))
358364 then throw("not enough collateral provided")
359- else (aS._1 ++ aX._1)
365+ else (aU._1 ++ aZ._1)
360366 else throw("Strict value is not equal to itself.")
361367 }
362368 else throw("Strict value is not equal to itself.")
368374
369375
370376
371-@Callable(aK)
372-func supply () = if (if ((size(aK.payments) != 1))
377+@Callable(aM)
378+func supply () = if (if ((size(aM.payments) != 1))
373379 then true
374- else (aK.payments[0].amount == 0))
380+ else (aM.payments[0].amount == 0))
375381 then throw("1 payment has to be attached")
376382 else {
377- let j = H(aK.payments[0].assetId)
378- let as = aK.payments[0].amount
379- ar(j, as, toString(aK.caller))
383+ let l = J(aM.payments[0].assetId)
384+ let au = aM.payments[0].amount
385+ at(l, au, toString(aM.caller))
380386 }
381387
382388
383389
384-@Callable(aK)
385-func withdraw (j,as) = {
386- let aZ = ab(j, "sRate")
387- let au = aZ._1
388- let av = aZ._2
389- let aw = fraction(as, n, au, CEILING)
390- let h = toString(aK.caller)
391- let aH = B(("total_supplied_" + j))
392- let aI = B(("total_borrowed_" + j))
393- let ba = B(((h + "_supplied_") + j))
394- let aJ = B(((h + "_borrowed_") + j))
395- let aF = invoke(this, "getUserCollateral", [false, h, true, ((j + ",supplied,") + toString(-(aw)))], nil)
396- if ((aF == aF))
390+@Callable(aM)
391+func withdraw (l,au) = {
392+ let bb = ad(l, "sRate")
393+ let aw = bb._1
394+ let ax = bb._2
395+ let ay = fraction(au, p, aw, CEILING)
396+ let j = toString(aM.caller)
397+ let aJ = D(("total_supplied_" + l))
398+ let aK = D(("total_borrowed_" + l))
399+ let bc = D(((j + "_supplied_") + l))
400+ let aL = D(((j + "_borrowed_") + l))
401+ let aH = invoke(this, "getUserCollateral", [false, j, true, ((l + ",supplied,") + toString(-(ay)))], nil)
402+ if ((aH == aH))
397403 then {
398- let aG = {
399- let k = aF
400- if ($isInstanceOf(k, "Int"))
404+ let aI = {
405+ let m = aH
406+ if ($isInstanceOf(m, "Int"))
401407 then {
402- let al = k
403- al
408+ let an = m
409+ an
404410 }
405411 else throw("can't get user collateral value")
406412 }
407- if (!(E("setup_active")))
413+ if (!(G("setup_active")))
408414 then throw("market is stopped")
409- else if ((0 > aG))
415+ else if ((0 > aI))
410416 then throw("you dont have enough collateral for this operation")
411- else if ((aw > (aH - aI)))
417+ else if ((ay > (aJ - aK)))
412418 then throw("this amount is not available on the market")
413- else if ((aw > (ba - aJ)))
419+ else if ((ay > (bc - aL)))
414420 then throw("this amount is not available for this user")
415- else ([IntegerEntry(((h + "_supplied_") + j), (B(((h + "_supplied_") + j)) - aw)), IntegerEntry(("total_supplied_" + j), (B(("total_supplied_" + j)) - aw)), ScriptTransfer(aK.caller, as, J(j))] ++ av)
421+ else ([IntegerEntry(((j + "_supplied_") + l), (D(((j + "_supplied_") + l)) - ay)), IntegerEntry(("total_supplied_" + l), (D(("total_supplied_" + l)) - ay)), ScriptTransfer(aM.caller, au, L(l))] ++ ax)
416422 }
417423 else throw("Strict value is not equal to itself.")
418424 }
419425
420426
421427
422-@Callable(aK)
423-func borrow (j,as) = {
424- let h = toString(aK.caller)
425- let bb = aC(j, as, h)
426- let aw = bb._2
427- (bb._1 ++ [ScriptTransfer(aK.caller, aw, J(j))])
428+@Callable(aM)
429+func borrow (l,au) = {
430+ let j = toString(aM.caller)
431+ let bd = aE(l, au, j)
432+ let ay = bd._2
433+ (bd._1 ++ [ScriptTransfer(aM.caller, ay, L(l))])
428434 }
429435
430436
431437
432-@Callable(aK)
433-func repay () = if (!(E("setup_active")))
438+@Callable(aM)
439+func repay () = if (!(G("setup_active")))
434440 then throw("market is stopped")
435- else if (if ((size(aK.payments) != 1))
441+ else if (if ((size(aM.payments) != 1))
436442 then true
437- else (aK.payments[0].amount == 0))
443+ else (aM.payments[0].amount == 0))
438444 then throw("1 payment has to be attached")
439445 else {
440- let j = H(aK.payments[0].assetId)
441- let as = aK.payments[0].amount
442- let bc = ab(j, "bRate")
443- let aE = bc._1
444- let av = bc._2
445- let aw = fraction(as, n, aE, CEILING)
446- let h = toString(aK.caller)
447- let aH = B(("total_supplied_" + j))
448- let aI = B(("total_borrowed_" + j))
449- let aJ = B(((h + "_borrowed_") + j))
450- let bd = (aJ - aw)
451- let be = if ((bd >= 0))
452- then aw
453- else aJ
454- if ((indexOf(F("setup_tokens"), j) == unit))
446+ let l = J(aM.payments[0].assetId)
447+ let au = aM.payments[0].amount
448+ let be = ad(l, "bRate")
449+ let aG = be._1
450+ let ax = be._2
451+ let ay = fraction(au, p, aG, CEILING)
452+ let j = toString(aM.caller)
453+ let aJ = D(("total_supplied_" + l))
454+ let aK = D(("total_borrowed_" + l))
455+ let aL = D(((j + "_borrowed_") + l))
456+ let bf = (aL - ay)
457+ let bg = if ((bf >= 0))
458+ then ay
459+ else aL
460+ if ((indexOf(H("setup_tokens"), l) == unit))
455461 then throw("this asset is not supported by the market")
456- else (([IntegerEntry(((h + "_borrowed_") + j), (aJ - be)), IntegerEntry(("total_borrowed_" + j), (aI - be))] ++ av) ++ (if ((bd >= 0))
462+ else (([IntegerEntry(((j + "_borrowed_") + l), (aL - bg)), IntegerEntry(("total_borrowed_" + l), (aK - bg))] ++ ax) ++ (if ((bf >= 0))
457463 then nil
458- else [ScriptTransfer(aK.caller, -(bd), aK.payments[0].assetId)]))
464+ else [ScriptTransfer(aM.caller, -(bf), aM.payments[0].assetId)]))
459465 }
460466
461467
462468
463-@Callable(aK)
464-func repayFor (h) = if (!(E("setup_active")))
469+@Callable(aM)
470+func repayFor (j) = if (!(G("setup_active")))
465471 then throw("market is stopped")
466- else if (if ((size(aK.payments) != 1))
472+ else if (if ((size(aM.payments) != 1))
467473 then true
468- else (aK.payments[0].amount == 0))
474+ else (aM.payments[0].amount == 0))
469475 then throw("1 payment has to be attached")
470476 else {
471- let j = H(aK.payments[0].assetId)
472- let as = aK.payments[0].amount
473- let bf = ab(j, "bRate")
474- let aE = bf._1
475- let av = bf._2
476- let aw = fraction(as, n, aE, CEILING)
477- let aH = B(("total_supplied_" + j))
478- let aI = B(("total_borrowed_" + j))
479- let aJ = B(((h + "_borrowed_") + j))
480- let bd = (aJ - aw)
481- let be = if ((bd >= 0))
482- then aw
483- else aJ
484- if ((indexOf(F("setup_tokens"), j) == unit))
477+ let l = J(aM.payments[0].assetId)
478+ let au = aM.payments[0].amount
479+ let bh = ad(l, "bRate")
480+ let aG = bh._1
481+ let ax = bh._2
482+ let ay = fraction(au, p, aG, CEILING)
483+ let aJ = D(("total_supplied_" + l))
484+ let aK = D(("total_borrowed_" + l))
485+ let aL = D(((j + "_borrowed_") + l))
486+ let bf = (aL - ay)
487+ let bg = if ((bf >= 0))
488+ then ay
489+ else aL
490+ if ((indexOf(H("setup_tokens"), l) == unit))
485491 then throw("this asset is not supported by the market")
486- else (([IntegerEntry(((h + "_borrowed_") + j), (aJ - be)), IntegerEntry(("total_borrowed_" + j), (aI - be))] ++ av) ++ (if ((bd >= 0))
492+ else (([IntegerEntry(((j + "_borrowed_") + l), (aL - bg)), IntegerEntry(("total_borrowed_" + l), (aK - bg))] ++ ax) ++ (if ((bf >= 0))
487493 then nil
488- else [ScriptTransfer(aK.caller, -(bd), aK.payments[0].assetId)]))
494+ else [ScriptTransfer(aM.caller, -(bf), aM.payments[0].assetId)]))
489495 }
490496
491497
492498
493-@Callable(aK)
494-func stakeTokenAll (j) = if ((aK.caller != this))
499+@Callable(aM)
500+func stakeTokenAll (l) = if ((aM.caller != this))
495501 then throw("only for internal smart contract invocations")
496502 else {
497- let aw = K(j)
498- let bg = invoke(this, "stakeToken", [j, aw], nil)
499- if ((bg == bg))
503+ let ay = M(l)
504+ let bi = invoke(this, "stakeToken", [l, ay], nil)
505+ if ((bi == bi))
500506 then nil
501507 else throw("Strict value is not equal to itself.")
502508 }
503509
504510
505511
506-@Callable(aK)
507-func stakeToken (j,aw) = if ((aK.caller != this))
512+@Callable(aM)
513+func stakeToken (l,ay) = if ((aM.caller != this))
508514 then throw("only for internal smart contract invocations")
509- else if ((j == "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p"))
515+ else if ((l == "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p"))
510516 then {
511- let bh = B("autostake_amount_DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
512- let bg = invoke(Address(base58'3PNikM6yp4NqcSU8guxQtmR5onr2D4e8yTJ'), "stake", nil, [AttachedPayment(base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p', aw)])
513- if ((bg == bg))
514- then [IntegerEntry("autostake_amount_DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", (bh + aw))]
517+ let bj = D("autostake_amount_DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
518+ let bi = invoke(Address(base58'3PNikM6yp4NqcSU8guxQtmR5onr2D4e8yTJ'), "stake", nil, [AttachedPayment(base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p', ay)])
519+ if ((bi == bi))
520+ then [IntegerEntry("autostake_amount_DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", (bj + ay))]
515521 else throw("Strict value is not equal to itself.")
516522 }
517- else if ((j == "8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91"))
523+ else if ((l == "8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91"))
518524 then {
519- let bh = B("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91")
520- let bg = invoke(Address(base58'3PQTM38wDmAY9vWonK6ha7QL3PAycLz5oPP'), "stake", nil, [AttachedPayment(base58'8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91', aw)])
521- if ((bg == bg))
522- then [IntegerEntry("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91", (bh + aw))]
525+ let bj = D("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91")
526+ let bi = invoke(Address(base58'3PQTM38wDmAY9vWonK6ha7QL3PAycLz5oPP'), "stake", nil, [AttachedPayment(base58'8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91', ay)])
527+ if ((bi == bi))
528+ then [IntegerEntry("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91", (bj + ay))]
523529 else throw("Strict value is not equal to itself.")
524530 }
525- else if ((j == "At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL"))
531+ else if ((l == "At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL"))
526532 then {
527- let bh = B("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
528- let bg = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "stake", nil, [AttachedPayment(base58'At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL', aw)])
529- if ((bg == bg))
530- then [IntegerEntry("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (bh + aw))]
533+ let bj = D("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
534+ let bi = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "stake", nil, [AttachedPayment(base58'At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL', ay)])
535+ if ((bi == bi))
536+ then [IntegerEntry("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (bj + ay))]
531537 else throw("Strict value is not equal to itself.")
532538 }
533539 else nil
534540
535541
536542
537-@Callable(aK)
538-func unstakeToken (j,aw) = if ((aK.caller != this))
543+@Callable(aM)
544+func unstakeToken (l,ay) = if ((aM.caller != this))
539545 then throw("only for internal smart contract invocations")
540- else if ((j == "8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91"))
546+ else if ((l == "8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91"))
541547 then {
542- let bh = B("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91")
543- let bg = invoke(Address(base58'3PQTM38wDmAY9vWonK6ha7QL3PAycLz5oPP'), "unStake", [aw], nil)
544- if ((bg == bg))
545- then [IntegerEntry("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91", (bh - aw))]
548+ let bj = D("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91")
549+ let bi = invoke(Address(base58'3PQTM38wDmAY9vWonK6ha7QL3PAycLz5oPP'), "unStake", [ay], nil)
550+ if ((bi == bi))
551+ then [IntegerEntry("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91", (bj - ay))]
546552 else throw("Strict value is not equal to itself.")
547553 }
548- else if ((j == "At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL"))
554+ else if ((l == "At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL"))
549555 then {
550- let bh = B("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
551- let bg = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "unstake", [aw], nil)
552- if ((bg == bg))
556+ let bj = D("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
557+ let bi = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "unstake", [ay], nil)
558+ if ((bi == bi))
553559 then {
554- let bi = K("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
555- if ((bi == bi))
560+ let bk = M("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
561+ if ((bk == bk))
556562 then {
557- let bj = invoke(Address(base58'3PQrVbTVpqXHqpVKftkNdjy3zZAh4dsRzN6'), "gnsbtRewardsSYSREADONLY", [toString(this)], nil)
558- if ((bj == bj))
563+ let bl = invoke(Address(base58'3PQrVbTVpqXHqpVKftkNdjy3zZAh4dsRzN6'), "gnsbtRewardsSYSREADONLY", [toString(this)], nil)
564+ if ((bl == bl))
559565 then {
560- let bk = {
561- let k = bj
562- if ($isInstanceOf(k, "List[Any]"))
566+ let bm = {
567+ let m = bl
568+ if ($isInstanceOf(m, "List[Any]"))
563569 then {
564- let al = k
565- let bl = al[1]
566- let bm = bl
567- if ($isInstanceOf(bm, "String"))
570+ let an = m
571+ let bn = an[1]
572+ let bo = bn
573+ if ($isInstanceOf(bo, "String"))
568574 then {
569- let bl = bm
570- let bn = parseIntValue(split(split(bl, "_")[1], ":")[1])
571- let bo = parseIntValue(split(split(bl, "_")[0], ":")[1])
572- if (if ((bn != 0))
575+ let bn = bo
576+ let bp = parseIntValue(split(split(bn, "_")[1], ":")[1])
577+ let bq = parseIntValue(split(split(bn, "_")[0], ":")[1])
578+ if (if ((bp != 0))
573579 then true
574- else (bo != 0))
580+ else (bq != 0))
575581 then {
576- let bp = K("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
577- if ((bp == bp))
582+ let br = M("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
583+ if ((br == br))
578584 then {
579- let bq = K("WAVES")
580- if ((bq == bq))
585+ let bs = M("WAVES")
586+ if ((bs == bs))
581587 then {
582- let aj = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "claimRewards", nil, nil)
583- if ((aj == aj))
588+ let al = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "claimRewards", nil, nil)
589+ if ((al == al))
584590 then {
585- let br = K("WAVES")
586- if ((br == br))
591+ let bt = M("WAVES")
592+ if ((bt == bt))
587593 then {
588- let bs = invoke(Address(base58'3PLiXyywNThdvf3vVEUxwc7TJTucjZvuegh'), "swap", ["DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", 0], [AttachedPayment(unit, (br - bq))])
589- if ((bs == bs))
594+ let bu = invoke(Address(base58'3PLiXyywNThdvf3vVEUxwc7TJTucjZvuegh'), "swap", ["DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", 0], [AttachedPayment(unit, (bt - bs))])
595+ if ((bu == bu))
590596 then {
591- let bt = K("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
592- if ((bt == bt))
597+ let bv = M("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
598+ if ((bv == bv))
593599 then {
594- let bu = invoke(Address(base58'3P7r93vXHuusageNJVGwzqaz3WMotAu49Yz'), "swap", ["At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", 0], [AttachedPayment(base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p', (bt - bp))])
595- if ((bu == bu))
600+ let bw = invoke(Address(base58'3P7r93vXHuusageNJVGwzqaz3WMotAu49Yz'), "swap", ["At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", 0], [AttachedPayment(base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p', (bv - br))])
601+ if ((bw == bw))
596602 then {
597- let bv = invoke(this, "addInterest", ["At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (K("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL") - bi)], nil)
598- if ((bv == bv))
603+ let bx = invoke(this, "addInterest", ["At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (M("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL") - bk)], nil)
604+ if ((bx == bx))
599605 then 2
600606 else throw("Strict value is not equal to itself.")
601607 }
619625 }
620626 else 0
621627 }
622- if ((bk == bk))
623- then [IntegerEntry("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (bh - aw))]
628+ if ((bm == bm))
629+ then [IntegerEntry("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (bj - ay))]
624630 else throw("Strict value is not equal to itself.")
625631 }
626632 else throw("Strict value is not equal to itself.")
633639
634640
635641
636-@Callable(aK)
637-func addInterest (j,aw) = if ((aK.caller != this))
642+@Callable(aM)
643+func addInterest (l,ay) = if ((aM.caller != this))
638644 then throw("only for self invocation")
639645 else {
640- let bw = B(("autostake_lastEarned_" + j))
641- let bx = B(("autostake_lastBlock_" + j))
642- let by = fraction(aw, 80, 100)
643- let bz = if (if ((bx == height))
646+ let by = D(("autostake_lastEarned_" + l))
647+ let bz = D(("autostake_lastBlock_" + l))
648+ let bA = fraction(ay, 80, 100)
649+ let bB = if (if ((bz == height))
644650 then true
645- else (aw == 0))
651+ else (ay == 0))
646652 then nil
647- else [IntegerEntry(("autostake_preLastEarned_" + j), bw), IntegerEntry(("autostake_preLastBlock_" + j), bx), IntegerEntry(("autostake_lastEarned_" + j), (bw + by)), IntegerEntry(("autostake_lastBlock_" + j), height)]
648- (bz ++ [IntegerEntry((j + "_sRate"), (B((j + "_sRate")) + fraction(n, by, B(("total_supplied_" + j)))))])
653+ else [IntegerEntry(("autostake_preLastEarned_" + l), by), IntegerEntry(("autostake_preLastBlock_" + l), bz), IntegerEntry(("autostake_lastEarned_" + l), (by + bA)), IntegerEntry(("autostake_lastBlock_" + l), height)]
654+ (bB ++ [IntegerEntry((l + "_sRate"), (D((l + "_sRate")) + fraction(p, bA, D(("total_supplied_" + l)))))])
649655 }
650656
651657
652658
653-@Callable(aK)
659+@Callable(aM)
654660 func addInterestEXTERNAL () = {
655- let aw = fraction(aK.payments[0].amount, 80, 100)
656- let I = aK.payments[0].assetId
657- let j = H(I)
658- let bw = B(("autostake_lastEarned_" + j))
659- let bx = B(("autostake_lastBlock_" + j))
660- let bz = if (if ((bx == height))
661+ let ay = fraction(aM.payments[0].amount, 80, 100)
662+ let K = aM.payments[0].assetId
663+ let l = J(K)
664+ let by = D(("autostake_lastEarned_" + l))
665+ let bz = D(("autostake_lastBlock_" + l))
666+ let bB = if (if ((bz == height))
661667 then true
662- else (aw == 0))
668+ else (ay == 0))
663669 then nil
664- else [IntegerEntry(("autostake_preLastEarned_" + j), bw), IntegerEntry(("autostake_preLastBlock_" + j), bx), IntegerEntry(("autostake_lastEarned_" + j), (bw + aw)), IntegerEntry(("autostake_lastBlock_" + j), height)]
665- (bz ++ [IntegerEntry((j + "_sRate"), (B((j + "_sRate")) + fraction(n, aw, B(("total_supplied_" + j)))))])
670+ else [IntegerEntry(("autostake_preLastEarned_" + l), by), IntegerEntry(("autostake_preLastBlock_" + l), bz), IntegerEntry(("autostake_lastEarned_" + l), (by + ay)), IntegerEntry(("autostake_lastBlock_" + l), height)]
671+ (bB ++ [IntegerEntry((l + "_sRate"), (D((l + "_sRate")) + fraction(p, ay, D(("total_supplied_" + l)))))])
666672 }
667673
668674
669675
670-@Callable(aK)
671-func preInit (bA,bB,bC,bD) = {
672- func r (s,ad) = (s ++ [IntegerEntry((ad + "_bRate"), n), IntegerEntry((ad + "_sRate"), n)])
676+@Callable(aM)
677+func preInit (bC,bD,bE,bF) = {
678+ func t (u,af) = (u ++ [IntegerEntry((af + "_bRate"), p), IntegerEntry((af + "_sRate"), p)])
673679
674- if ((aK.caller != this))
680+ if ((aM.caller != this))
675681 then throw("admin only")
676682 else {
677- let ag = {
678- let u = split(bA, ",")
679- let v = size(u)
680- let w = nil
681- func x (y,z) = if ((z >= v))
682- then y
683- else r(y, u[z])
683+ let ai = {
684+ let w = split(bC, ",")
685+ let x = size(w)
686+ let y = nil
687+ func z (A,B) = if ((B >= x))
688+ then A
689+ else t(A, w[B])
684690
685- func A (y,z) = if ((z >= v))
686- then y
691+ func C (A,B) = if ((B >= x))
692+ then A
687693 else throw("List size exceeds 6")
688694
689- A(x(x(x(x(x(x(w, 0), 1), 2), 3), 4), 5), 6)
695+ C(z(z(z(z(z(z(y, 0), 1), 2), 3), 4), 5), 6)
690696 }
691- ([StringEntry("setup_tokens", bA), StringEntry("setup_ltvs", bB), StringEntry("setup_lts", bC), StringEntry("setup_penalties", bD), BooleanEntry("setup_active", true)] ++ ag)
697+ ([StringEntry("setup_tokens", bC), StringEntry("setup_ltvs", bD), StringEntry("setup_lts", bE), StringEntry("setup_penalties", bF), BooleanEntry("setup_active", true)] ++ ai)
692698 }
693699 }
694700
695701
696702
697-@Callable(aK)
698-func initNewToken (ad,bE,bF,bG) = if ((aK.caller != this))
703+@Callable(aM)
704+func initNewToken (af,bG,bH,bI) = if ((aM.caller != this))
699705 then throw("admin only")
700- else [StringEntry("setup_tokens", ((F("setup_tokens") + ",") + ad)), StringEntry("setup_ltvs", ((F("setup_ltvs") + ",") + bE)), StringEntry("setup_lts", ((F("setup_lts") + ",") + bF)), StringEntry("setup_penalties", ((F("setup_penalties") + ",") + bG)), IntegerEntry((ad + "_bRate"), n), IntegerEntry((ad + "_sRate"), n)]
706+ else [StringEntry("setup_tokens", ((H("setup_tokens") + ",") + af)), StringEntry("setup_ltvs", ((H("setup_ltvs") + ",") + bG)), StringEntry("setup_lts", ((H("setup_lts") + ",") + bH)), StringEntry("setup_penalties", ((H("setup_penalties") + ",") + bI)), IntegerEntry((af + "_bRate"), p), IntegerEntry((af + "_sRate"), p)]
701707
702708
703709
704-@Callable(aK)
705-func updateParameter (C,bH) = if (if ((aK.caller != this))
706- then (aK.caller != Address(base58'3P3o9cLTV2u9N4nYNKRYL6gy6cUEU9DwXW8'))
710+@Callable(aM)
711+func updateParameter (E,bJ) = if (if ((aM.caller != this))
712+ then (aM.caller != Address(base58'3P3o9cLTV2u9N4nYNKRYL6gy6cUEU9DwXW8'))
707713 else false)
708714 then throw("admin only")
709- else [IntegerEntry(C, parseIntValue(bH))]
715+ else [IntegerEntry(E, parseIntValue(bJ))]
710716
711717
712718
713-@Callable(aK)
714-func updateString (C,bH) = if (if ((aK.caller != this))
715- then (aK.caller != Address(base58'3P3o9cLTV2u9N4nYNKRYL6gy6cUEU9DwXW8'))
719+@Callable(aM)
720+func updateString (E,bJ) = if (if ((aM.caller != this))
721+ then (aM.caller != Address(base58'3P3o9cLTV2u9N4nYNKRYL6gy6cUEU9DwXW8'))
716722 else false)
717723 then throw("admin only")
718- else [StringEntry(C, bH)]
724+ else [StringEntry(E, bJ)]
719725
720726
721727
722-@Callable(aK)
723-func claimToReserveFund (bI) = {
724- let bJ = L()
725- let ag = ab(bJ[0], "sRate")._2
726- let q = [0, 1, 2, 3, 4, 5]
727- func r (s,bK) = if ((bK >= size(bJ)))
728- then s
728+@Callable(aM)
729+func claimToReserveFund (bK) = {
730+ let bL = N()
731+ let ai = ad(bL[0], "sRate")._2
732+ let s = [0, 1, 2, 3, 4, 5]
733+ func t (u,bM) = if ((bM >= size(bL)))
734+ then u
729735 else {
730- let j = bJ[bK]
731- let bL = F(("autostake_amount_" + j))
732- let aw = ((((K(j) + B(("autostake_amount_" + j))) + (if ((bL != ""))
733- then parseIntValue(bL)
734- else 0)) + fraction(B(("total_borrowed_" + j)), ag[((bK * 3) + 1)].value, n)) - fraction(B(("total_supplied_" + j)), ag[(bK * 3)].value, n))
735- let bg = if ((B(("autostake_amount_" + j)) > 0))
736- then invoke(this, "unstakeToken", [j, max([aw, 0])], nil)
736+ let l = bL[bM]
737+ let bN = H(("autostake_amount_" + l))
738+ let ay = ((((M(l) + D(("autostake_amount_" + l))) + (if ((bN != ""))
739+ then parseIntValue(bN)
740+ else 0)) + fraction(D(("total_borrowed_" + l)), ai[((bM * 3) + 1)].value, p)) - fraction(D(("total_supplied_" + l)), ai[(bM * 3)].value, p))
741+ let bi = if ((D(("autostake_amount_" + l)) > 0))
742+ then invoke(this, "unstakeToken", [l, max([ay, 0])], nil)
737743 else 0
738- if ((bg == bg))
739- then (s ++ [aw])
744+ if ((bi == bi))
745+ then (u ++ [ay])
740746 else throw("Strict value is not equal to itself.")
741747 }
742748
743- let bM = {
744- let u = q
745- let v = size(u)
746- let w = nil
747- func x (y,z) = if ((z >= v))
748- then y
749- else r(y, u[z])
749+ let bO = {
750+ let w = s
751+ let x = size(w)
752+ let y = nil
753+ func z (A,B) = if ((B >= x))
754+ then A
755+ else t(A, w[B])
750756
751- func A (y,z) = if ((z >= v))
752- then y
757+ func C (A,B) = if ((B >= x))
758+ then A
753759 else throw("List size exceeds 6")
754760
755- A(x(x(x(x(x(x(w, 0), 1), 2), 3), 4), 5), 6)
761+ C(z(z(z(z(z(z(y, 0), 1), 2), 3), 4), 5), 6)
756762 }
757- func bN (s,bK) = if ((bK >= size(bJ)))
758- then s
763+ func bP (u,bM) = if ((bM >= size(bL)))
764+ then u
759765 else {
760- let j = bJ[bK]
761- (s ++ [ScriptTransfer(a, max([bM[bK], 0]), J(j))])
766+ let l = bL[bM]
767+ (u ++ [ScriptTransfer(a, max([bO[bM], 0]), L(l))])
762768 }
763769
764- if (bI)
765- then throw(p(bM))
770+ if (bK)
771+ then throw(r(bO))
766772 else $Tuple2({
767- let u = q
768- let v = size(u)
769- let w = nil
770- func bO (y,z) = if ((z >= v))
771- then y
772- else bN(y, u[z])
773+ let w = s
774+ let x = size(w)
775+ let y = nil
776+ func bQ (A,B) = if ((B >= x))
777+ then A
778+ else bP(A, w[B])
773779
774- func bP (y,z) = if ((z >= v))
775- then y
780+ func bR (A,B) = if ((B >= x))
781+ then A
776782 else throw("List size exceeds 6")
777783
778- bP(bO(bO(bO(bO(bO(bO(w, 0), 1), 2), 3), 4), 5), 6)
779- }, bM)
784+ bR(bQ(bQ(bQ(bQ(bQ(bQ(y, 0), 1), 2), 3), 4), 5), 6)
785+ }, bO)
780786 }
781787
782788
783789
784-@Callable(aK)
785-func reSetup (j) = {
786- let bQ = B("resetup_lastUpdate")
787- if ((o > (height - bQ)))
790+@Callable(aM)
791+func reSetup (l) = {
792+ let bS = D("resetup_lastUpdate")
793+ if ((q > (height - bS)))
788794 then throw("can be updated only once per day")
789795 else {
790- let bC = split(F("setup_lts"), ",")
791- let bJ = L()
792- let R = af(j)
793- let bR = B((("setup_" + j) + "_tempLT"))
794- let bF = parseIntValue(bJ[value(indexOf(bJ, j))])
795- if ((R > 90000000))
796- then [IntegerEntry((("setup_" + j) + "_tempLT"), fraction(bR, 9975, 10000))]
797- else if (if ((bF > bR))
798- then (90000000 > R)
796+ let bE = split(H("setup_lts"), ",")
797+ let bL = N()
798+ let T = ah(l)
799+ let bT = D((("setup_" + l) + "_tempLT"))
800+ let bH = parseIntValue(bL[value(indexOf(bL, l))])
801+ if ((T > 90000000))
802+ then [IntegerEntry((("setup_" + l) + "_tempLT"), fraction(bT, 9975, 10000))]
803+ else if (if ((bH > bT))
804+ then (90000000 > T)
799805 else false)
800- then [IntegerEntry((("setup_" + j) + "_tempLT"), fraction(bR, 10025, 10000))]
806+ then [IntegerEntry((("setup_" + l) + "_tempLT"), fraction(bT, 10025, 10000))]
801807 else nil
802808 }
803809 }
804810
805811
806812
807-@Callable(aK)
808-func shutdown (bS) = if ((indexOf(f, aK.caller.bytes) == unit))
813+@Callable(aM)
814+func shutdown (bU) = if ((indexOf(h, aM.caller.bytes) == unit))
809815 then throw("user not in a whitelist")
810- else [BooleanEntry("setup_active", !(bS))]
816+ else [BooleanEntry("setup_active", !(bU))]
811817
812818
813819
814-@Callable(aK)
815-func liquidate (bI,h,as,aM,aN,bT) = if (!(g(aK.caller)))
820+@Callable(aM)
821+func liquidate (bK,j,au,aO,aP,bV) = if (!(i(aM.caller)))
816822 then throw("temporarily available for whitelist only")
817- else if (!(E("setup_active")))
823+ else if (!(G("setup_active")))
818824 then throw("market is stopped")
819825 else {
820- let bU = ao(h)
821- if ((bU == bU))
826+ let bW = aq(j)
827+ if ((bW == bW))
822828 then {
823- let bV = ab(aM, "sRate")
824- let au = bV._1
825- let bW = bV._2
826- let bX = ab(aN, "bRate")
827- let aE = bX._1
829+ let bX = ad(aO, "sRate")
830+ let aw = bX._1
828831 let bY = bX._2
829- let bZ = fraction(as, n, au)
830- let ca = B(((h + "_supplied_") + aM))
831- let cb = B(((h + "_borrowed_") + aN))
832- let cc = if ((cb > 0))
833- then cb
832+ let bZ = ad(aP, "bRate")
833+ let aG = bZ._1
834+ let ca = bZ._2
835+ let cb = fraction(au, p, aw)
836+ let cc = D(((j + "_supplied_") + aO))
837+ let cd = D(((j + "_borrowed_") + aP))
838+ let ce = if ((cd > 0))
839+ then cd
834840 else throw("user has no borrow in this token")
835- if ((bU > 0))
841+ if ((bW > 0))
836842 then throw("user can't be liquidated")
837- else if ((bZ > ca))
843+ else if ((cb > cc))
838844 then throw("position to liquidate is bigger than user's supply")
839845 else {
840- let cd = K(aM)
841- if ((cd == cd))
846+ let cf = M(aO)
847+ if ((cf == cf))
842848 then {
843- let ce = K(aN)
844- if ((ce == ce))
849+ let cg = M(aP)
850+ if ((cg == cg))
845851 then {
846- let cf = invoke(d, "swap", [bT, 0], [AttachedPayment(J(aM), as)])
847- if ((cf == cf))
852+ let ch = invoke(f, "swap", [bV, 0], [AttachedPayment(L(aO), au)])
853+ if ((ch == ch))
848854 then {
849- let cg = (cd - K(aM))
850- if ((cg == cg))
855+ let ci = (cf - M(aO))
856+ if ((ci == ci))
851857 then {
852- let ch = (K(aN) - ce)
853- if ((ch == ch))
858+ let cj = (M(aP) - cg)
859+ if ((cj == cj))
854860 then {
855- let ci = ai(aM)._1
856- let cj = am(aM)
857- let ck = fraction(cg, ci, cj)
858- let cl = ai(aN)._2
859- let cm = am(aN)
860- let cn = fraction(ch, cl, cm)
861- let bG = parseIntValue(split(F("setup_penalties"), ",")[value(indexOf(L(), aN))])
862- let co = (cn - fraction(ck, (l - bG), l))
863- let cp = fraction(cg, n, au)
864- let cq = fraction(fraction(ch, n, aE), (l - fraction(co, l, cn)), l)
865- if ((cg > as))
861+ let ck = ak(aO)._1
862+ let cl = ao(aO)
863+ let cm = fraction(ci, ck, cl)
864+ let cn = ak(aP)._2
865+ let co = ao(aP)
866+ let cp = fraction(cj, cn, co)
867+ let bI = parseIntValue(split(H("setup_penalties"), ",")[value(indexOf(N(), aP))])
868+ let cq = (cp - fraction(cm, (n - bI), n))
869+ let cr = fraction(ci, p, aw)
870+ let cs = fraction(fraction(cj, p, aG), (n - fraction(cq, n, cp)), n)
871+ if ((ci > au))
866872 then throw("more assets exchanged than expected")
867- else if ((0 > co))
873+ else if ((0 > cq))
868874 then throw("price impact is bigger than liquidation penalty")
869- else [IntegerEntry(((h + "_supplied_") + aM), (ca - cp)), IntegerEntry(((h + "_borrowed_") + aN), (cc - cq)), IntegerEntry(("total_supplied_" + aM), (B(("total_supplied_" + aM)) - cp)), IntegerEntry(("total_borrowed_" + aN), (B(("total_borrowed_" + aN)) - cq))]
875+ else [IntegerEntry(((j + "_supplied_") + aO), (cc - cr)), IntegerEntry(((j + "_borrowed_") + aP), (ce - cs)), IntegerEntry(("total_supplied_" + aO), (D(("total_supplied_" + aO)) - cr)), IntegerEntry(("total_borrowed_" + aP), (D(("total_borrowed_" + aP)) - cs))]
870876 }
871877 else throw("Strict value is not equal to itself.")
872878 }
884890
885891
886892
887-@Callable(aK)
888-func liquidateV2 (bI,h,aM) = if (!(g(aK.caller)))
893+@Callable(aM)
894+func liquidateV2 (bK,j,aO) = if (!(i(aM.caller)))
889895 then throw("temporarily available for whitelist only")
890- else if (!(E("setup_active")))
896+ else if (!(G("setup_active")))
891897 then throw("market is stopped")
892898 else {
893- let aT = aK.payments[0].assetId
894- let aN = H(aT)
895- let cr = aK.payments[0].amount
896- let bU = ao(h)
897- if ((bU == bU))
898- then if ((bU > 0))
899+ let aV = aM.payments[0].assetId
900+ let aP = J(aV)
901+ let ct = aM.payments[0].amount
902+ let bW = aq(j)
903+ if ((bW == bW))
904+ then if ((bW > 0))
899905 then throw("user can't be liquidated")
900906 else {
901- let cs = L()
902- let ct = value(indexOf(cs, aN))
903- let cu = value(indexOf(cs, aM))
904- let cv = ab(aN, "bRate")
905- let aE = cv._1
906- let bW = cv._2
907- let cl = ai(aN)._2
908- let cm = am(aN)
909- let cw = fraction(cr, cl, cm)
910- let bG = parseIntValue(value(split(F("setup_penalties"), ",")[ct]))
911- let ci = ai(aM)._1
912- let cj = am(aM)
913- let cx = fraction(cw, (l + bG), l)
914- let bZ = fraction(cx, cj, ci)
915- let aO = fraction(cr, n, aE)
916- let aV = fraction(bZ, n, bW[((cu * 3) + 1)].value)
917- let ca = B(((h + "_supplied_") + aM))
918- let cb = B(((h + "_borrowed_") + aN))
919- let cc = if ((cb > 0))
920- then cb
921- else throw("user has no borrow in this token")
922- if ((aV > ca))
923- then throw("position to liquidate is bigger than user's supply")
924- else if (bI)
925- then throw("liquidation will pass")
926- else ([ScriptTransfer(aK.caller, bZ, J(aM)), IntegerEntry(((h + "_supplied_") + aM), (ca - aV)), IntegerEntry(((h + "_borrowed_") + aN), (cc - aO)), IntegerEntry(("total_supplied_" + aM), (B(("total_supplied_" + aM)) - aV)), IntegerEntry(("total_borrowed_" + aN), (B(("total_borrowed_" + aN)) - aO))] ++ bW)
907+ let cu = N()
908+ let cv = value(indexOf(cu, aP))
909+ let cw = value(indexOf(cu, aO))
910+ let cx = ad(aP, "bRate")
911+ let aG = cx._1
912+ let bY = cx._2
913+ let cn = ak(aP)._2
914+ let co = ao(aP)
915+ let cy = fraction(ct, cn, co)
916+ let bI = parseIntValue(value(split(H("setup_penalties"), ",")[cv]))
917+ let ck = ak(aO)._1
918+ let cl = ao(aO)
919+ let cz = fraction(cy, (n + bI), n)
920+ let cb = fraction(cz, cl, ck)
921+ let aQ = fraction(ct, p, aG)
922+ let aX = fraction(cb, p, bY[((cw * 3) + 1)].value)
923+ let bi = if ((indexOf(e, aO) != unit))
924+ then {
925+ let cA = split(j, "_")[1]
926+ let cB = split(j, "_")[0]
927+ reentrantInvoke(d, "liquidate", [cB, cA, aX], nil)
928+ }
929+ else nil
930+ if ((bi == bi))
931+ then {
932+ let cc = D(((j + "_supplied_") + aO))
933+ let cd = D(((j + "_borrowed_") + aP))
934+ let ce = if ((cd > 0))
935+ then cd
936+ else throw("user has no borrow in this token")
937+ if ((aX > cc))
938+ then throw("position to liquidate is bigger than user's supply")
939+ else if (bK)
940+ then throw("liquidation will pass")
941+ else ([ScriptTransfer(aM.caller, cb, L(aO)), IntegerEntry(((j + "_supplied_") + aO), (cc - aX)), IntegerEntry(((j + "_borrowed_") + aP), (ce - aQ)), IntegerEntry(("total_supplied_" + aO), (D(("total_supplied_" + aO)) - aX)), IntegerEntry(("total_borrowed_" + aP), (D(("total_borrowed_" + aP)) - aQ))] ++ bY)
942+ }
943+ else throw("Strict value is not equal to itself.")
927944 }
928945 else throw("Strict value is not equal to itself.")
929946 }
930947
931948
932949
933-@Callable(aK)
934-func getUserCollateral (bI,h,cy,cz) = {
935- let bJ = L()
936- let bB = split(F("setup_ltvs"), ",")
937- let bC = split(F("setup_lts"), ",")
938- let ag = ab(bJ[0], "sRate")._2
939- let cA = split(cz, ",")
940- func r (s,t) = if ((t >= size(bJ)))
941- then s
950+@Callable(aM)
951+func getUserCollateral (bK,j,cC,cD) = {
952+ let bL = N()
953+ let bD = split(H("setup_ltvs"), ",")
954+ let bE = split(H("setup_lts"), ",")
955+ let ai = ad(bL[0], "sRate")._2
956+ let cE = split(cD, ",")
957+ func t (u,v) = if ((v >= size(bL)))
958+ then u
942959 else {
943- let cB = B(((h + "_supplied_") + bJ[t]))
944- let cC = B(((h + "_borrowed_") + bJ[t]))
945- let cD = if ((cz == ""))
946- then if (if ((cC != 0))
960+ let cF = D(((j + "_supplied_") + bL[v]))
961+ let cG = D(((j + "_borrowed_") + bL[v]))
962+ let cH = if ((cD == ""))
963+ then if (if ((cG != 0))
947964 then true
948- else (cB != 0))
965+ else (cF != 0))
949966 then true
950967 else false
951968 else true
952- if (cD)
969+ if (cH)
953970 then {
954- let aA = am(bJ[t])
955- let ay = ai(bJ[t])
956- ((s + fraction(fraction(fraction((cB + (if (if (if ((cz != ""))
957- then (cA[0] == bJ[t])
971+ let aC = ao(bL[v])
972+ let aA = ak(bL[v])
973+ ((u + fraction(fraction(fraction((cF + (if (if (if ((cD != ""))
974+ then (cE[0] == bL[v])
958975 else false)
959- then (cA[1] == "supplied")
976+ then (cE[1] == "supplied")
960977 else false)
961- then parseIntValue(cA[2])
962- else 0)), ag[(t * 3)].value, n), parseIntValue(bB[t]), l), ay._1, aA)) - (if (cy)
963- then fraction(fraction(fraction((cC + (if (if (if ((cz != ""))
964- then (cA[0] == bJ[t])
978+ then parseIntValue(cE[2])
979+ else 0)), ai[(v * 3)].value, p), parseIntValue(bD[v]), n), aA._1, aC)) - (if (cC)
980+ then fraction(fraction(fraction((cG + (if (if (if ((cD != ""))
981+ then (cE[0] == bL[v])
965982 else false)
966- then (cA[1] == "borrowed")
983+ then (cE[1] == "borrowed")
967984 else false)
968- then parseIntValue(cA[2])
969- else 0)), ag[((t * 3) + 1)].value, n), l, parseIntValue(bC[t])), ay._2, aA)
985+ then parseIntValue(cE[2])
986+ else 0)), ai[((v * 3) + 1)].value, p), n, parseIntValue(bE[v])), aA._2, aC)
970987 else 0))
971988 }
972- else s
989+ else u
973990 }
974991
975- let cE = {
976- let u = [0, 1, 2, 3, 4, 5]
977- let v = size(u)
978- let w = 0
979- func x (y,z) = if ((z >= v))
980- then y
981- else r(y, u[z])
992+ let cI = {
993+ let w = [0, 1, 2, 3, 4, 5]
994+ let x = size(w)
995+ let y = 0
996+ func z (A,B) = if ((B >= x))
997+ then A
998+ else t(A, w[B])
982999
983- func A (y,z) = if ((z >= v))
984- then y
1000+ func C (A,B) = if ((B >= x))
1001+ then A
9851002 else throw("List size exceeds 6")
9861003
987- A(x(x(x(x(x(x(w, 0), 1), 2), 3), 4), 5), 6)
1004+ C(z(z(z(z(z(z(y, 0), 1), 2), 3), 4), 5), 6)
9881005 }
989- if (bI)
990- then throw(toString(cE))
991- else $Tuple2(nil, cE)
1006+ if (bK)
1007+ then throw(toString(cI))
1008+ else $Tuple2(nil, cI)
9921009 }
9931010
9941011
9951012
996-@Callable(aK)
997-func getAssetDebt (bI,h,j) = {
998- let cC = B(((h + "_borrowed_") + j))
999- let aA = am(j)
1000- let T = ab(j, "bRate")._1
1001- let cE = fraction(cC, T, n)
1002- if (bI)
1003- then throw(toString(cE))
1004- else $Tuple2(nil, cE)
1013+@Callable(aM)
1014+func getAssetDebt (bK,j,l) = {
1015+ let cG = D(((j + "_borrowed_") + l))
1016+ let aC = ao(l)
1017+ let V = ad(l, "bRate")._1
1018+ let cI = fraction(cG, V, p)
1019+ if (bK)
1020+ then throw(toString(cI))
1021+ else $Tuple2(nil, cI)
10051022 }
10061023
10071024
10081025
1009-@Callable(aK)
1010-func getPrices (bI) = {
1011- let bJ = L()
1012- func r (s,t) = if ((t >= size(bJ)))
1013- then s
1026+@Callable(aM)
1027+func getPrices (bK) = {
1028+ let bL = N()
1029+ func t (u,v) = if ((v >= size(bL)))
1030+ then u
10141031 else {
1015- let ay = ai(bJ[t])
1016- ((((s + toString(ay._1)) + ",") + toString(ay._2)) + "|")
1032+ let aA = ak(bL[v])
1033+ ((((u + toString(aA._1)) + ",") + toString(aA._2)) + "|")
10171034 }
10181035
1019- let cE = {
1020- let u = [0, 1, 2, 3, 4, 5]
1021- let v = size(u)
1022- let w = ""
1023- func x (y,z) = if ((z >= v))
1024- then y
1025- else r(y, u[z])
1036+ let cI = {
1037+ let w = [0, 1, 2, 3, 4, 5]
1038+ let x = size(w)
1039+ let y = ""
1040+ func z (A,B) = if ((B >= x))
1041+ then A
1042+ else t(A, w[B])
10261043
1027- func A (y,z) = if ((z >= v))
1028- then y
1044+ func C (A,B) = if ((B >= x))
1045+ then A
10291046 else throw("List size exceeds 6")
10301047
1031- A(x(x(x(x(x(x(w, 0), 1), 2), 3), 4), 5), 6)
1048+ C(z(z(z(z(z(z(y, 0), 1), 2), 3), 4), 5), 6)
10321049 }
1033- if (bI)
1034- then throw(cE)
1035- else $Tuple2(nil, cE)
1050+ if (bK)
1051+ then throw(cI)
1052+ else $Tuple2(nil, cI)
10361053 }
10371054
10381055
10391056
1040-@Callable(aK)
1041-func calculateUtilizationRatio (j,bI) = if (bI)
1042- then throw(toString(af(j)))
1043- else $Tuple2(nil, af(j))
1057+@Callable(aM)
1058+func calculateUtilizationRatio (l,bK) = if (bK)
1059+ then throw(toString(ah(l)))
1060+ else $Tuple2(nil, ah(l))
10441061
10451062
10461063
1047-@Callable(aK)
1048-func calculateOutdatedUR (j,bI) = if (bI)
1049- then throw(toString(O(j)))
1050- else $Tuple2(nil, O(j))
1064+@Callable(aM)
1065+func calculateOutdatedUR (l,bK) = if (bK)
1066+ then throw(toString(Q(l)))
1067+ else $Tuple2(nil, Q(l))
10511068
10521069
10531070
1054-@Callable(aK)
1055-func calculateTokenRates (bI) = {
1056- func r (s,j) = {
1057- let ag = U(j)
1058- $Tuple2(((((s._1 + toString(ag[1].value)) + "|") + toString(ag[0].value)) + ","), (s._2 ++ ag))
1071+@Callable(aM)
1072+func calculateTokenRates (bK) = {
1073+ func t (u,l) = {
1074+ let ai = W(l)
1075+ $Tuple2(((((u._1 + toString(ai[1].value)) + "|") + toString(ai[0].value)) + ","), (u._2 ++ ai))
10591076 }
10601077
1061- let bM = {
1062- let u = L()
1063- let v = size(u)
1064- let w = $Tuple2("", nil)
1065- func x (y,z) = if ((z >= v))
1066- then y
1067- else r(y, u[z])
1078+ let bO = {
1079+ let w = N()
1080+ let x = size(w)
1081+ let y = $Tuple2("", nil)
1082+ func z (A,B) = if ((B >= x))
1083+ then A
1084+ else t(A, w[B])
10681085
1069- func A (y,z) = if ((z >= v))
1070- then y
1086+ func C (A,B) = if ((B >= x))
1087+ then A
10711088 else throw("List size exceeds 6")
10721089
1073- A(x(x(x(x(x(x(w, 0), 1), 2), 3), 4), 5), 6)
1090+ C(z(z(z(z(z(z(y, 0), 1), 2), 3), 4), 5), 6)
10741091 }
1075- if (bI)
1076- then throw(bM._1)
1077- else $Tuple2(bM._2, bM._1)
1092+ if (bK)
1093+ then throw(bO._1)
1094+ else $Tuple2(bO._2, bO._1)
10781095 }
10791096
10801097
10811098
1082-@Callable(aK)
1083-func calculateTokensInterest (bI) = {
1084- func r (s,j) = {
1085- let T = fraction(Q(j), o, l)
1086- ((s + toString(T)) + ",")
1099+@Callable(aM)
1100+func calculateTokensInterest (bK) = {
1101+ func t (u,l) = {
1102+ let V = fraction(S(l), q, n)
1103+ ((u + toString(V)) + ",")
10871104 }
10881105
1089- let bM = {
1090- let u = L()
1091- let v = size(u)
1092- let w = ""
1093- func x (y,z) = if ((z >= v))
1094- then y
1095- else r(y, u[z])
1106+ let bO = {
1107+ let w = N()
1108+ let x = size(w)
1109+ let y = ""
1110+ func z (A,B) = if ((B >= x))
1111+ then A
1112+ else t(A, w[B])
10961113
1097- func A (y,z) = if ((z >= v))
1098- then y
1114+ func C (A,B) = if ((B >= x))
1115+ then A
10991116 else throw("List size exceeds 6")
11001117
1101- A(x(x(x(x(x(x(w, 0), 1), 2), 3), 4), 5), 6)
1118+ C(z(z(z(z(z(z(y, 0), 1), 2), 3), 4), 5), 6)
11021119 }
1103- if (bI)
1104- then throw(bM)
1105- else $Tuple2(nil, bM)
1120+ if (bK)
1121+ then throw(bO)
1122+ else $Tuple2(nil, bO)
11061123 }
11071124
11081125
1109-@Verifier(cF)
1110-func cG () = sigVerify(cF.bodyBytes, cF.proofs[0], cF.senderPublicKey)
1126+@Verifier(cJ)
1127+func cK () = sigVerify(cJ.bodyBytes, cJ.proofs[0], cJ.senderPublicKey)
11111128
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = Address(base58'3Mzzt65puEs2W9M1m9iFBvMEdfM5bASE1hJ')
55
66 let b = 20
77
88 let c = 1000000
99
10-let d = Address(base58'3Mzzt65puEs2W9M1m9iFBvMEdfM5bASE1hJ')
10+let d = Address(base58'3MvRWw2FPEimFCTGtK7qY9uAJbM7XJ4ZfJS')
1111
12-let e = "3N4KbMnJH8FaM94jqxNFe2oyZ8GB7Z8yVBP"
12+let e = ["8DtMtpVwVq62sdcVFVzh6nuprgzG7LSjpLdHnQnrAFgY", "FLdC14nUVRyiSYjVrMo3X4g8rXQjLbNRaGAyQAm8V68V"]
1313
14-let f = [base58'3PMcMiMEs6w56NRGacksXtFG5zS7doE9fpL', base58'3PAxdDSmN758L5SHSGRC5apEtQE2aApZotG', base58'3PJKmXoHJvVeQXjSJdhtkUcFDtdiQqMbUTD', base58'3PQdNxynJy5mche2kxMVc5shXWzK8Gstq3o', base58'3PHbdpaKzz8EiAngGHaFu2hVuNCdsC67qh3', base58'3P6Ksahs71SiKQgQ4qaZuFAVhqncdi2nvJQ']
14+let f = Address(base58'3Mzzt65puEs2W9M1m9iFBvMEdfM5bASE1hJ')
1515
16-func g (h) = !((h != Address(base58'3Mzzt65puEs2W9M1m9iFBvMEdfM5bASE1hJ')))
16+let g = "3N4KbMnJH8FaM94jqxNFe2oyZ8GB7Z8yVBP"
17+
18+let h = [base58'3PMcMiMEs6w56NRGacksXtFG5zS7doE9fpL', base58'3PAxdDSmN758L5SHSGRC5apEtQE2aApZotG', base58'3PJKmXoHJvVeQXjSJdhtkUcFDtdiQqMbUTD', base58'3PQdNxynJy5mche2kxMVc5shXWzK8Gstq3o', base58'3PHbdpaKzz8EiAngGHaFu2hVuNCdsC67qh3', base58'3P6Ksahs71SiKQgQ4qaZuFAVhqncdi2nvJQ']
19+
20+func i (j) = !((j != Address(base58'3Mzzt65puEs2W9M1m9iFBvMEdfM5bASE1hJ')))
1721
1822
19-func i (j) = {
20- let k = j
21- if (("8DtMtpVwVq62sdcVFVzh6nuprgzG7LSjpLdHnQnrAFgY" == k))
23+func k (l) = {
24+ let m = l
25+ if (("8DtMtpVwVq62sdcVFVzh6nuprgzG7LSjpLdHnQnrAFgY" == m))
2226 then $Tuple4(2000000, 25000000, 80000000, 100000000)
23- else if (("25FEqEjRkqK6yCkiT7Lz6SAYz7gUFCtxfCChnrVFD5AT" == k))
27+ else if (("FLdC14nUVRyiSYjVrMo3X4g8rXQjLbNRaGAyQAm8V68V" == m))
2428 then $Tuple4(2000000, 25000000, 80000000, 100000000)
25- else if (("WAVES" == k))
26- then $Tuple4(2000000, 30000000, 80000000, 50000000)
27- else $Tuple4(0, 20000000, 80000000, 80000000)
29+ else if (("25FEqEjRkqK6yCkiT7Lz6SAYz7gUFCtxfCChnrVFD5AT" == m))
30+ then $Tuple4(2000000, 25000000, 80000000, 100000000)
31+ else if (("WAVES" == m))
32+ then $Tuple4(2000000, 30000000, 80000000, 50000000)
33+ else $Tuple4(0, 20000000, 80000000, 80000000)
2834 }
2935
3036
31-let l = 100000000
37+let n = 100000000
3238
33-let m = 10000000000
39+let o = 10000000000
3440
35-let n = (l * l)
41+let p = (n * n)
3642
37-let o = 1440
43+let q = 1440
3844
39-func p (q) = {
40- func r (s,t) = ((s + toString(t)) + ",")
45+func r (s) = {
46+ func t (u,v) = ((u + toString(v)) + ",")
4147
42- let u = q
43- let v = size(u)
44- let w = ""
45- func x (y,z) = if ((z >= v))
46- then y
47- else r(y, u[z])
48+ let w = s
49+ let x = size(w)
50+ let y = ""
51+ func z (A,B) = if ((B >= x))
52+ then A
53+ else t(A, w[B])
4854
49- func A (y,z) = if ((z >= v))
50- then y
55+ func C (A,B) = if ((B >= x))
56+ then A
5157 else throw("List size exceeds 6")
5258
53- A(x(x(x(x(x(x(w, 0), 1), 2), 3), 4), 5), 6)
59+ C(z(z(z(z(z(z(y, 0), 1), 2), 3), 4), 5), 6)
5460 }
5561
5662
57-func B (C) = {
58- let k = getInteger(this, C)
59- if ($isInstanceOf(k, "Int"))
63+func D (E) = {
64+ let m = getInteger(this, E)
65+ if ($isInstanceOf(m, "Int"))
6066 then {
61- let D = k
62- D
67+ let F = m
68+ F
6369 }
6470 else 0
6571 }
6672
6773
68-func E (C) = {
69- let k = getBoolean(this, C)
70- if ($isInstanceOf(k, "Boolean"))
74+func G (E) = {
75+ let m = getBoolean(this, E)
76+ if ($isInstanceOf(m, "Boolean"))
7177 then {
72- let D = k
73- D
78+ let F = m
79+ F
7480 }
7581 else false
7682 }
7783
7884
79-func F (C) = {
80- let k = getString(this, C)
81- if ($isInstanceOf(k, "String"))
85+func H (E) = {
86+ let m = getString(this, E)
87+ if ($isInstanceOf(m, "String"))
8288 then {
83- let D = k
84- D
89+ let F = m
90+ F
8591 }
8692 else ""
8793 }
8894
8995
90-func G (C) = {
91- let k = getBinary(this, C)
92- if ($isInstanceOf(k, "ByteVector"))
96+func I (E) = {
97+ let m = getBinary(this, E)
98+ if ($isInstanceOf(m, "ByteVector"))
9399 then {
94- let D = k
95- D
100+ let F = m
101+ F
96102 }
97103 else base58''
98104 }
99105
100106
101-func H (I) = {
102- let k = I
103- if ($isInstanceOf(k, "ByteVector"))
107+func J (K) = {
108+ let m = K
109+ if ($isInstanceOf(m, "ByteVector"))
104110 then {
105- let D = k
106- toBase58String(D)
111+ let F = m
112+ toBase58String(F)
107113 }
108114 else "WAVES"
109115 }
110116
111117
112-func J (j) = if ((j == "WAVES"))
118+func L (l) = if ((l == "WAVES"))
113119 then unit
114- else fromBase58String(j)
120+ else fromBase58String(l)
115121
116122
117-func K (j) = if ((j == "WAVES"))
123+func M (l) = if ((l == "WAVES"))
118124 then wavesBalance(this).available
119- else assetBalance(this, fromBase58String(j))
125+ else assetBalance(this, fromBase58String(l))
120126
121127
122-func L () = split(F("setup_tokens"), ",")
128+func N () = split(H("setup_tokens"), ",")
123129
124130
125-func M () = {
126- let N = F("setup_maxsupply")
127- if ((N == ""))
131+func O () = {
132+ let P = H("setup_maxsupply")
133+ if ((P == ""))
128134 then [-1, -1, -1, -1, -1, -1, -1]
129- else split(N, ",")
135+ else split(P, ",")
130136 }
131137
132138
133-func O (j) = {
134- let P = fraction(B(("total_supplied_" + j)), B((j + "_sRate")), n)
135- if ((P == 0))
139+func Q (l) = {
140+ let R = fraction(D(("total_supplied_" + l)), D((l + "_sRate")), p)
141+ if ((R == 0))
136142 then 0
137- else fraction(l, fraction(B(("total_borrowed_" + j)), B((j + "_bRate")), n), P)
143+ else fraction(n, fraction(D(("total_borrowed_" + l)), D((l + "_bRate")), p), R)
138144 }
139145
140146
141-func Q (j) = {
142- let R = O(j)
143- let S = i(j)
144- let T = (S._1 + (if ((S._3 >= R))
145- then fraction(R, S._2, S._3)
146- else (S._2 + fraction((R - S._3), S._4, (100000000 - S._3)))))
147- max([fraction(T, l, (o * 365)), 1])
147+func S (l) = {
148+ let T = Q(l)
149+ let U = k(l)
150+ let V = (U._1 + (if ((U._3 >= T))
151+ then fraction(T, U._2, U._3)
152+ else (U._2 + fraction((T - U._3), U._4, (100000000 - U._3)))))
153+ max([fraction(V, n, (q * 365)), 1])
148154 }
149155
150156
151-func U (j) = {
152- let V = Q(j)
153- let R = O(j)
154- let W = B("lastRateHeight")
155- let X = max([B((j + "_bRate")), n])
156- let Y = (X + ((height - W) * V))
157- let Z = max([B((j + "_sRate")), n])
158- let aa = (Z + ((((height - W) * fraction(V, R, l)) * (100 - b)) / 100))
159-[IntegerEntry((j + "_sRate"), aa), IntegerEntry((j + "_bRate"), Y), IntegerEntry("lastRateHeight", height)]
157+func W (l) = {
158+ let X = S(l)
159+ let T = Q(l)
160+ let Y = D("lastRateHeight")
161+ let Z = max([D((l + "_bRate")), p])
162+ let aa = (Z + ((height - Y) * X))
163+ let ab = max([D((l + "_sRate")), p])
164+ let ac = (ab + ((((height - Y) * fraction(X, T, n)) * (100 - b)) / 100))
165+[IntegerEntry((l + "_sRate"), ac), IntegerEntry((l + "_bRate"), aa), IntegerEntry("lastRateHeight", height)]
160166 }
161167
162168
163-func ab (j,ac) = {
164- func r (s,ad) = {
165- let ae = U(ad)
166- $Tuple2(if ((ad != j))
167- then s._1
168- else if ((ac == "sRate"))
169- then ae[0].value
170- else ae[1].value, (s._2 ++ ae))
169+func ad (l,ae) = {
170+ func t (u,af) = {
171+ let ag = W(af)
172+ $Tuple2(if ((af != l))
173+ then u._1
174+ else if ((ae == "sRate"))
175+ then ag[0].value
176+ else ag[1].value, (u._2 ++ ag))
171177 }
172178
173- let u = L()
174- let v = size(u)
175- let w = $Tuple2(0, nil)
176- func x (y,z) = if ((z >= v))
177- then y
178- else r(y, u[z])
179+ let w = N()
180+ let x = size(w)
181+ let y = $Tuple2(0, nil)
182+ func z (A,B) = if ((B >= x))
183+ then A
184+ else t(A, w[B])
179185
180- func A (y,z) = if ((z >= v))
181- then y
186+ func C (A,B) = if ((B >= x))
187+ then A
182188 else throw("List size exceeds 6")
183189
184- A(x(x(x(x(x(x(w, 0), 1), 2), 3), 4), 5), 6)
190+ C(z(z(z(z(z(z(y, 0), 1), 2), 3), 4), 5), 6)
185191 }
186192
187193
188-func af (j) = {
189- let ag = U(j)
190- let P = fraction(B(("total_supplied_" + j)), ag[0].value, n)
191- fraction(l, fraction(B(("total_borrowed_" + j)), ag[1].value, n), P)
194+func ah (l) = {
195+ let ai = W(l)
196+ let R = fraction(D(("total_supplied_" + l)), ai[0].value, p)
197+ fraction(n, fraction(D(("total_borrowed_" + l)), ai[1].value, p), R)
192198 }
193199
194200
195-func ah () = {
196- func r (s,ad) = (s ++ U(ad))
201+func aj () = {
202+ func t (u,af) = (u ++ W(af))
197203
198- let u = L()
199- let v = size(u)
200- let w = nil
201- func x (y,z) = if ((z >= v))
202- then y
203- else r(y, u[z])
204+ let w = N()
205+ let x = size(w)
206+ let y = nil
207+ func z (A,B) = if ((B >= x))
208+ then A
209+ else t(A, w[B])
204210
205- func A (y,z) = if ((z >= v))
206- then y
211+ func C (A,B) = if ((B >= x))
212+ then A
207213 else throw("List size exceeds 6")
208214
209- A(x(x(x(x(x(x(w, 0), 1), 2), 3), 4), 5), 6)
215+ C(z(z(z(z(z(z(y, 0), 1), 2), 3), 4), 5), 6)
210216 }
211217
212218
213-func ai (j) = {
214- let aj = invoke(addressFromStringValue(e), "getTWAP60", [j, false], nil)
215- if ((aj == aj))
219+func ak (l) = {
220+ let al = invoke(addressFromStringValue(g), "getTWAP60", [l, false], nil)
221+ if ((al == al))
216222 then {
217- let ak = {
218- let k = aj
219- if ($isInstanceOf(k, "(Int, Int)"))
223+ let am = {
224+ let m = al
225+ if ($isInstanceOf(m, "(Int, Int)"))
220226 then {
221- let al = k
222- al
227+ let an = m
228+ an
223229 }
224230 else throw("error of price oracle")
225231 }
226- if ((ak == ak))
227- then ak
232+ if ((am == am))
233+ then am
228234 else throw("Strict value is not equal to itself.")
229235 }
230236 else throw("Strict value is not equal to itself.")
231237 }
232238
233239
234-func am (j) = {
235- let an = if ((j == "WAVES"))
240+func ao (l) = {
241+ let ap = if ((l == "WAVES"))
236242 then 8
237- else value(assetInfo(fromBase58String(j))).decimals
238- pow(10, 0, an, 0, 0, DOWN)
243+ else value(assetInfo(fromBase58String(l))).decimals
244+ pow(10, 0, ap, 0, 0, DOWN)
239245 }
240246
241247
242-func ao (h) = {
243- let ap = invoke(this, "getUserCollateral", [false, h, true, ""], nil)
244- if ((ap == ap))
248+func aq (j) = {
249+ let ar = invoke(this, "getUserCollateral", [false, j, true, ""], nil)
250+ if ((ar == ar))
245251 then {
246- let aq = {
247- let k = ap
248- if ($isInstanceOf(k, "Int"))
252+ let as = {
253+ let m = ar
254+ if ($isInstanceOf(m, "Int"))
249255 then {
250- let al = k
251- al
256+ let an = m
257+ an
252258 }
253259 else throw("issue while doing in-dapp invocation")
254260 }
255- if ((aq == aq))
256- then aq
261+ if ((as == as))
262+ then as
257263 else throw("Strict value is not equal to itself.")
258264 }
259265 else throw("Strict value is not equal to itself.")
260266 }
261267
262268
263-func ar (j,as,h) = if (!(E("setup_active")))
269+func at (l,au,j) = if (!(G("setup_active")))
264270 then throw("market is stopped")
265271 else {
266- let at = ab(j, "sRate")
267- let au = at._1
268- let av = at._2
269- let aw = fraction(as, n, au, DOWN)
270- let ax = {
271- let k = getString(("setup_maxSupply_" + j))
272- if ($isInstanceOf(k, "String"))
272+ let av = ad(l, "sRate")
273+ let aw = av._1
274+ let ax = av._2
275+ let ay = fraction(au, p, aw, DOWN)
276+ let az = {
277+ let m = getString(("setup_maxSupply_" + l))
278+ if ($isInstanceOf(m, "String"))
273279 then {
274- let al = k
275- parseIntValue(al)
280+ let an = m
281+ parseIntValue(an)
276282 }
277283 else 0
278284 }
279- let ay = ai(j)
280- let az = (B(((h + "_supplied_") + j)) + aw)
281- let T = ab(j, "sRate")._1
282- let aA = am(j)
283- let aB = fraction(fraction(az, T, n), ay._1, aA)
284- if ((indexOf(F("setup_tokens"), j) == unit))
285+ let aA = ak(l)
286+ let aB = (D(((j + "_supplied_") + l)) + ay)
287+ let V = ad(l, "sRate")._1
288+ let aC = ao(l)
289+ let aD = fraction(fraction(aB, V, p), aA._1, aC)
290+ if ((indexOf(H("setup_tokens"), l) == unit))
285291 then throw("this asset is not supported by the market")
286- else if (if ((ax != 0))
287- then (aB > ax)
292+ else if (if ((az != 0))
293+ then (aD > az)
288294 else false)
289295 then throw("max total supply for this token reached in the pool")
290- else $Tuple2(([IntegerEntry(((h + "_supplied_") + j), az), IntegerEntry(("total_supplied_" + j), (B(("total_supplied_" + j)) + aw))] ++ av), as)
296+ else $Tuple2(([IntegerEntry(((j + "_supplied_") + l), aB), IntegerEntry(("total_supplied_" + l), (D(("total_supplied_" + l)) + ay))] ++ ax), au)
291297 }
292298
293299
294-func aC (j,as,h) = {
295- let aD = ab(j, "bRate")
296- let aE = aD._1
297- let av = aD._2
298- let aw = fraction(as, n, aE, CEILING)
299- let aF = invoke(this, "getUserCollateral", [false, h, true, ((j + ",borrowed,") + toString(aw))], nil)
300- if ((aF == aF))
300+func aE (l,au,j) = {
301+ let aF = ad(l, "bRate")
302+ let aG = aF._1
303+ let ax = aF._2
304+ let ay = fraction(au, p, aG, CEILING)
305+ let aH = invoke(this, "getUserCollateral", [false, j, true, ((l + ",borrowed,") + toString(ay))], nil)
306+ if ((aH == aH))
301307 then {
302- let aG = {
303- let k = aF
304- if ($isInstanceOf(k, "Int"))
308+ let aI = {
309+ let m = aH
310+ if ($isInstanceOf(m, "Int"))
305311 then {
306- let al = k
307- al
312+ let an = m
313+ an
308314 }
309315 else throw("can't get user collateral value")
310316 }
311- if (!(E("setup_active")))
317+ if (!(G("setup_active")))
312318 then throw("market is stopped")
313319 else {
314- let aH = B(("total_supplied_" + j))
315- let aI = B(("total_borrowed_" + j))
316- let aJ = B(((h + "_borrowed_") + j))
317- if ((aw > (aH - aI)))
320+ let aJ = D(("total_supplied_" + l))
321+ let aK = D(("total_borrowed_" + l))
322+ let aL = D(((j + "_borrowed_") + l))
323+ if ((ay > (aJ - aK)))
318324 then throw("this amount is not available")
319- else $Tuple2(([IntegerEntry(((h + "_borrowed_") + j), (aJ + aw)), IntegerEntry(("total_borrowed_" + j), (aI + aw))] ++ av), as)
325+ else $Tuple2(([IntegerEntry(((j + "_borrowed_") + l), (aL + ay)), IntegerEntry(("total_borrowed_" + l), (aK + ay))] ++ ax), au)
320326 }
321327 }
322328 else throw("Strict value is not equal to itself.")
323329 }
324330
325331
326-@Callable(aK)
327-func flashPosition (aL,aM,aN,aO,aP,aQ,aR) = {
328- let aS = aC(aN, aO, aL)
329- let aT = J(aN)
330- let aU = reentrantInvoke(addressFromStringValue(aP), aQ, split(aR, ","), [AttachedPayment(aT, aO)])
331- if ((aU == aU))
332+@Callable(aM)
333+func flashPosition (aN,aO,aP,aQ,aR,aS,aT) = {
334+ let aU = aE(aP, aQ, aN)
335+ let aV = L(aP)
336+ let aW = reentrantInvoke(addressFromStringValue(aR), aS, split(aT, ","), [AttachedPayment(aV, aQ)])
337+ if ((aW == aW))
332338 then {
333- let aV = {
334- let aW = aU
335- if ($isInstanceOf(aW, "Int"))
336- then aW
337- else throw(($getType(aW) + " couldn't be cast to Int"))
339+ let aX = {
340+ let aY = aW
341+ if ($isInstanceOf(aY, "Int"))
342+ then aY
343+ else throw(($getType(aY) + " couldn't be cast to Int"))
338344 }
339- if ((aV == aV))
345+ if ((aX == aX))
340346 then {
341- let aX = ar(aM, aV, aL)
342- let aG = {
343- let aW = invoke(this, "getUserCollateral", [false, aL, true, ((aM + ",supplied,") + toString(aV))], nil)
344- if ($isInstanceOf(aW, "Int"))
345- then aW
346- else throw(($getType(aW) + " couldn't be cast to Int"))
347+ let aZ = at(aO, aX, aN)
348+ let aI = {
349+ let aY = invoke(this, "getUserCollateral", [false, aN, true, ((aO + ",supplied,") + toString(aX))], nil)
350+ if ($isInstanceOf(aY, "Int"))
351+ then aY
352+ else throw(($getType(aY) + " couldn't be cast to Int"))
347353 }
348- if ((aG == aG))
354+ if ((aI == aI))
349355 then {
350- let aY = {
351- let aW = invoke(this, "getUserCollateral", [false, aL, true, ((aN + ",borrowed,") + toString(aO))], nil)
352- if ($isInstanceOf(aW, "Int"))
353- then aW
354- else throw(($getType(aW) + " couldn't be cast to Int"))
356+ let ba = {
357+ let aY = invoke(this, "getUserCollateral", [false, aN, true, ((aP + ",borrowed,") + toString(aQ))], nil)
358+ if ($isInstanceOf(aY, "Int"))
359+ then aY
360+ else throw(($getType(aY) + " couldn't be cast to Int"))
355361 }
356- if ((aY == aY))
357- then if ((aY > aG))
362+ if ((ba == ba))
363+ then if ((ba > aI))
358364 then throw("not enough collateral provided")
359- else (aS._1 ++ aX._1)
365+ else (aU._1 ++ aZ._1)
360366 else throw("Strict value is not equal to itself.")
361367 }
362368 else throw("Strict value is not equal to itself.")
363369 }
364370 else throw("Strict value is not equal to itself.")
365371 }
366372 else throw("Strict value is not equal to itself.")
367373 }
368374
369375
370376
371-@Callable(aK)
372-func supply () = if (if ((size(aK.payments) != 1))
377+@Callable(aM)
378+func supply () = if (if ((size(aM.payments) != 1))
373379 then true
374- else (aK.payments[0].amount == 0))
380+ else (aM.payments[0].amount == 0))
375381 then throw("1 payment has to be attached")
376382 else {
377- let j = H(aK.payments[0].assetId)
378- let as = aK.payments[0].amount
379- ar(j, as, toString(aK.caller))
383+ let l = J(aM.payments[0].assetId)
384+ let au = aM.payments[0].amount
385+ at(l, au, toString(aM.caller))
380386 }
381387
382388
383389
384-@Callable(aK)
385-func withdraw (j,as) = {
386- let aZ = ab(j, "sRate")
387- let au = aZ._1
388- let av = aZ._2
389- let aw = fraction(as, n, au, CEILING)
390- let h = toString(aK.caller)
391- let aH = B(("total_supplied_" + j))
392- let aI = B(("total_borrowed_" + j))
393- let ba = B(((h + "_supplied_") + j))
394- let aJ = B(((h + "_borrowed_") + j))
395- let aF = invoke(this, "getUserCollateral", [false, h, true, ((j + ",supplied,") + toString(-(aw)))], nil)
396- if ((aF == aF))
390+@Callable(aM)
391+func withdraw (l,au) = {
392+ let bb = ad(l, "sRate")
393+ let aw = bb._1
394+ let ax = bb._2
395+ let ay = fraction(au, p, aw, CEILING)
396+ let j = toString(aM.caller)
397+ let aJ = D(("total_supplied_" + l))
398+ let aK = D(("total_borrowed_" + l))
399+ let bc = D(((j + "_supplied_") + l))
400+ let aL = D(((j + "_borrowed_") + l))
401+ let aH = invoke(this, "getUserCollateral", [false, j, true, ((l + ",supplied,") + toString(-(ay)))], nil)
402+ if ((aH == aH))
397403 then {
398- let aG = {
399- let k = aF
400- if ($isInstanceOf(k, "Int"))
404+ let aI = {
405+ let m = aH
406+ if ($isInstanceOf(m, "Int"))
401407 then {
402- let al = k
403- al
408+ let an = m
409+ an
404410 }
405411 else throw("can't get user collateral value")
406412 }
407- if (!(E("setup_active")))
413+ if (!(G("setup_active")))
408414 then throw("market is stopped")
409- else if ((0 > aG))
415+ else if ((0 > aI))
410416 then throw("you dont have enough collateral for this operation")
411- else if ((aw > (aH - aI)))
417+ else if ((ay > (aJ - aK)))
412418 then throw("this amount is not available on the market")
413- else if ((aw > (ba - aJ)))
419+ else if ((ay > (bc - aL)))
414420 then throw("this amount is not available for this user")
415- else ([IntegerEntry(((h + "_supplied_") + j), (B(((h + "_supplied_") + j)) - aw)), IntegerEntry(("total_supplied_" + j), (B(("total_supplied_" + j)) - aw)), ScriptTransfer(aK.caller, as, J(j))] ++ av)
421+ else ([IntegerEntry(((j + "_supplied_") + l), (D(((j + "_supplied_") + l)) - ay)), IntegerEntry(("total_supplied_" + l), (D(("total_supplied_" + l)) - ay)), ScriptTransfer(aM.caller, au, L(l))] ++ ax)
416422 }
417423 else throw("Strict value is not equal to itself.")
418424 }
419425
420426
421427
422-@Callable(aK)
423-func borrow (j,as) = {
424- let h = toString(aK.caller)
425- let bb = aC(j, as, h)
426- let aw = bb._2
427- (bb._1 ++ [ScriptTransfer(aK.caller, aw, J(j))])
428+@Callable(aM)
429+func borrow (l,au) = {
430+ let j = toString(aM.caller)
431+ let bd = aE(l, au, j)
432+ let ay = bd._2
433+ (bd._1 ++ [ScriptTransfer(aM.caller, ay, L(l))])
428434 }
429435
430436
431437
432-@Callable(aK)
433-func repay () = if (!(E("setup_active")))
438+@Callable(aM)
439+func repay () = if (!(G("setup_active")))
434440 then throw("market is stopped")
435- else if (if ((size(aK.payments) != 1))
441+ else if (if ((size(aM.payments) != 1))
436442 then true
437- else (aK.payments[0].amount == 0))
443+ else (aM.payments[0].amount == 0))
438444 then throw("1 payment has to be attached")
439445 else {
440- let j = H(aK.payments[0].assetId)
441- let as = aK.payments[0].amount
442- let bc = ab(j, "bRate")
443- let aE = bc._1
444- let av = bc._2
445- let aw = fraction(as, n, aE, CEILING)
446- let h = toString(aK.caller)
447- let aH = B(("total_supplied_" + j))
448- let aI = B(("total_borrowed_" + j))
449- let aJ = B(((h + "_borrowed_") + j))
450- let bd = (aJ - aw)
451- let be = if ((bd >= 0))
452- then aw
453- else aJ
454- if ((indexOf(F("setup_tokens"), j) == unit))
446+ let l = J(aM.payments[0].assetId)
447+ let au = aM.payments[0].amount
448+ let be = ad(l, "bRate")
449+ let aG = be._1
450+ let ax = be._2
451+ let ay = fraction(au, p, aG, CEILING)
452+ let j = toString(aM.caller)
453+ let aJ = D(("total_supplied_" + l))
454+ let aK = D(("total_borrowed_" + l))
455+ let aL = D(((j + "_borrowed_") + l))
456+ let bf = (aL - ay)
457+ let bg = if ((bf >= 0))
458+ then ay
459+ else aL
460+ if ((indexOf(H("setup_tokens"), l) == unit))
455461 then throw("this asset is not supported by the market")
456- else (([IntegerEntry(((h + "_borrowed_") + j), (aJ - be)), IntegerEntry(("total_borrowed_" + j), (aI - be))] ++ av) ++ (if ((bd >= 0))
462+ else (([IntegerEntry(((j + "_borrowed_") + l), (aL - bg)), IntegerEntry(("total_borrowed_" + l), (aK - bg))] ++ ax) ++ (if ((bf >= 0))
457463 then nil
458- else [ScriptTransfer(aK.caller, -(bd), aK.payments[0].assetId)]))
464+ else [ScriptTransfer(aM.caller, -(bf), aM.payments[0].assetId)]))
459465 }
460466
461467
462468
463-@Callable(aK)
464-func repayFor (h) = if (!(E("setup_active")))
469+@Callable(aM)
470+func repayFor (j) = if (!(G("setup_active")))
465471 then throw("market is stopped")
466- else if (if ((size(aK.payments) != 1))
472+ else if (if ((size(aM.payments) != 1))
467473 then true
468- else (aK.payments[0].amount == 0))
474+ else (aM.payments[0].amount == 0))
469475 then throw("1 payment has to be attached")
470476 else {
471- let j = H(aK.payments[0].assetId)
472- let as = aK.payments[0].amount
473- let bf = ab(j, "bRate")
474- let aE = bf._1
475- let av = bf._2
476- let aw = fraction(as, n, aE, CEILING)
477- let aH = B(("total_supplied_" + j))
478- let aI = B(("total_borrowed_" + j))
479- let aJ = B(((h + "_borrowed_") + j))
480- let bd = (aJ - aw)
481- let be = if ((bd >= 0))
482- then aw
483- else aJ
484- if ((indexOf(F("setup_tokens"), j) == unit))
477+ let l = J(aM.payments[0].assetId)
478+ let au = aM.payments[0].amount
479+ let bh = ad(l, "bRate")
480+ let aG = bh._1
481+ let ax = bh._2
482+ let ay = fraction(au, p, aG, CEILING)
483+ let aJ = D(("total_supplied_" + l))
484+ let aK = D(("total_borrowed_" + l))
485+ let aL = D(((j + "_borrowed_") + l))
486+ let bf = (aL - ay)
487+ let bg = if ((bf >= 0))
488+ then ay
489+ else aL
490+ if ((indexOf(H("setup_tokens"), l) == unit))
485491 then throw("this asset is not supported by the market")
486- else (([IntegerEntry(((h + "_borrowed_") + j), (aJ - be)), IntegerEntry(("total_borrowed_" + j), (aI - be))] ++ av) ++ (if ((bd >= 0))
492+ else (([IntegerEntry(((j + "_borrowed_") + l), (aL - bg)), IntegerEntry(("total_borrowed_" + l), (aK - bg))] ++ ax) ++ (if ((bf >= 0))
487493 then nil
488- else [ScriptTransfer(aK.caller, -(bd), aK.payments[0].assetId)]))
494+ else [ScriptTransfer(aM.caller, -(bf), aM.payments[0].assetId)]))
489495 }
490496
491497
492498
493-@Callable(aK)
494-func stakeTokenAll (j) = if ((aK.caller != this))
499+@Callable(aM)
500+func stakeTokenAll (l) = if ((aM.caller != this))
495501 then throw("only for internal smart contract invocations")
496502 else {
497- let aw = K(j)
498- let bg = invoke(this, "stakeToken", [j, aw], nil)
499- if ((bg == bg))
503+ let ay = M(l)
504+ let bi = invoke(this, "stakeToken", [l, ay], nil)
505+ if ((bi == bi))
500506 then nil
501507 else throw("Strict value is not equal to itself.")
502508 }
503509
504510
505511
506-@Callable(aK)
507-func stakeToken (j,aw) = if ((aK.caller != this))
512+@Callable(aM)
513+func stakeToken (l,ay) = if ((aM.caller != this))
508514 then throw("only for internal smart contract invocations")
509- else if ((j == "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p"))
515+ else if ((l == "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p"))
510516 then {
511- let bh = B("autostake_amount_DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
512- let bg = invoke(Address(base58'3PNikM6yp4NqcSU8guxQtmR5onr2D4e8yTJ'), "stake", nil, [AttachedPayment(base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p', aw)])
513- if ((bg == bg))
514- then [IntegerEntry("autostake_amount_DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", (bh + aw))]
517+ let bj = D("autostake_amount_DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
518+ let bi = invoke(Address(base58'3PNikM6yp4NqcSU8guxQtmR5onr2D4e8yTJ'), "stake", nil, [AttachedPayment(base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p', ay)])
519+ if ((bi == bi))
520+ then [IntegerEntry("autostake_amount_DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", (bj + ay))]
515521 else throw("Strict value is not equal to itself.")
516522 }
517- else if ((j == "8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91"))
523+ else if ((l == "8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91"))
518524 then {
519- let bh = B("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91")
520- let bg = invoke(Address(base58'3PQTM38wDmAY9vWonK6ha7QL3PAycLz5oPP'), "stake", nil, [AttachedPayment(base58'8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91', aw)])
521- if ((bg == bg))
522- then [IntegerEntry("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91", (bh + aw))]
525+ let bj = D("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91")
526+ let bi = invoke(Address(base58'3PQTM38wDmAY9vWonK6ha7QL3PAycLz5oPP'), "stake", nil, [AttachedPayment(base58'8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91', ay)])
527+ if ((bi == bi))
528+ then [IntegerEntry("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91", (bj + ay))]
523529 else throw("Strict value is not equal to itself.")
524530 }
525- else if ((j == "At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL"))
531+ else if ((l == "At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL"))
526532 then {
527- let bh = B("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
528- let bg = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "stake", nil, [AttachedPayment(base58'At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL', aw)])
529- if ((bg == bg))
530- then [IntegerEntry("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (bh + aw))]
533+ let bj = D("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
534+ let bi = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "stake", nil, [AttachedPayment(base58'At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL', ay)])
535+ if ((bi == bi))
536+ then [IntegerEntry("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (bj + ay))]
531537 else throw("Strict value is not equal to itself.")
532538 }
533539 else nil
534540
535541
536542
537-@Callable(aK)
538-func unstakeToken (j,aw) = if ((aK.caller != this))
543+@Callable(aM)
544+func unstakeToken (l,ay) = if ((aM.caller != this))
539545 then throw("only for internal smart contract invocations")
540- else if ((j == "8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91"))
546+ else if ((l == "8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91"))
541547 then {
542- let bh = B("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91")
543- let bg = invoke(Address(base58'3PQTM38wDmAY9vWonK6ha7QL3PAycLz5oPP'), "unStake", [aw], nil)
544- if ((bg == bg))
545- then [IntegerEntry("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91", (bh - aw))]
548+ let bj = D("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91")
549+ let bi = invoke(Address(base58'3PQTM38wDmAY9vWonK6ha7QL3PAycLz5oPP'), "unStake", [ay], nil)
550+ if ((bi == bi))
551+ then [IntegerEntry("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91", (bj - ay))]
546552 else throw("Strict value is not equal to itself.")
547553 }
548- else if ((j == "At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL"))
554+ else if ((l == "At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL"))
549555 then {
550- let bh = B("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
551- let bg = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "unstake", [aw], nil)
552- if ((bg == bg))
556+ let bj = D("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
557+ let bi = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "unstake", [ay], nil)
558+ if ((bi == bi))
553559 then {
554- let bi = K("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
555- if ((bi == bi))
560+ let bk = M("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
561+ if ((bk == bk))
556562 then {
557- let bj = invoke(Address(base58'3PQrVbTVpqXHqpVKftkNdjy3zZAh4dsRzN6'), "gnsbtRewardsSYSREADONLY", [toString(this)], nil)
558- if ((bj == bj))
563+ let bl = invoke(Address(base58'3PQrVbTVpqXHqpVKftkNdjy3zZAh4dsRzN6'), "gnsbtRewardsSYSREADONLY", [toString(this)], nil)
564+ if ((bl == bl))
559565 then {
560- let bk = {
561- let k = bj
562- if ($isInstanceOf(k, "List[Any]"))
566+ let bm = {
567+ let m = bl
568+ if ($isInstanceOf(m, "List[Any]"))
563569 then {
564- let al = k
565- let bl = al[1]
566- let bm = bl
567- if ($isInstanceOf(bm, "String"))
570+ let an = m
571+ let bn = an[1]
572+ let bo = bn
573+ if ($isInstanceOf(bo, "String"))
568574 then {
569- let bl = bm
570- let bn = parseIntValue(split(split(bl, "_")[1], ":")[1])
571- let bo = parseIntValue(split(split(bl, "_")[0], ":")[1])
572- if (if ((bn != 0))
575+ let bn = bo
576+ let bp = parseIntValue(split(split(bn, "_")[1], ":")[1])
577+ let bq = parseIntValue(split(split(bn, "_")[0], ":")[1])
578+ if (if ((bp != 0))
573579 then true
574- else (bo != 0))
580+ else (bq != 0))
575581 then {
576- let bp = K("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
577- if ((bp == bp))
582+ let br = M("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
583+ if ((br == br))
578584 then {
579- let bq = K("WAVES")
580- if ((bq == bq))
585+ let bs = M("WAVES")
586+ if ((bs == bs))
581587 then {
582- let aj = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "claimRewards", nil, nil)
583- if ((aj == aj))
588+ let al = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "claimRewards", nil, nil)
589+ if ((al == al))
584590 then {
585- let br = K("WAVES")
586- if ((br == br))
591+ let bt = M("WAVES")
592+ if ((bt == bt))
587593 then {
588- let bs = invoke(Address(base58'3PLiXyywNThdvf3vVEUxwc7TJTucjZvuegh'), "swap", ["DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", 0], [AttachedPayment(unit, (br - bq))])
589- if ((bs == bs))
594+ let bu = invoke(Address(base58'3PLiXyywNThdvf3vVEUxwc7TJTucjZvuegh'), "swap", ["DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", 0], [AttachedPayment(unit, (bt - bs))])
595+ if ((bu == bu))
590596 then {
591- let bt = K("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
592- if ((bt == bt))
597+ let bv = M("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
598+ if ((bv == bv))
593599 then {
594- let bu = invoke(Address(base58'3P7r93vXHuusageNJVGwzqaz3WMotAu49Yz'), "swap", ["At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", 0], [AttachedPayment(base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p', (bt - bp))])
595- if ((bu == bu))
600+ let bw = invoke(Address(base58'3P7r93vXHuusageNJVGwzqaz3WMotAu49Yz'), "swap", ["At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", 0], [AttachedPayment(base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p', (bv - br))])
601+ if ((bw == bw))
596602 then {
597- let bv = invoke(this, "addInterest", ["At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (K("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL") - bi)], nil)
598- if ((bv == bv))
603+ let bx = invoke(this, "addInterest", ["At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (M("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL") - bk)], nil)
604+ if ((bx == bx))
599605 then 2
600606 else throw("Strict value is not equal to itself.")
601607 }
602608 else throw("Strict value is not equal to itself.")
603609 }
604610 else throw("Strict value is not equal to itself.")
605611 }
606612 else throw("Strict value is not equal to itself.")
607613 }
608614 else throw("Strict value is not equal to itself.")
609615 }
610616 else throw("Strict value is not equal to itself.")
611617 }
612618 else throw("Strict value is not equal to itself.")
613619 }
614620 else throw("Strict value is not equal to itself.")
615621 }
616622 else 1
617623 }
618624 else 1
619625 }
620626 else 0
621627 }
622- if ((bk == bk))
623- then [IntegerEntry("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (bh - aw))]
628+ if ((bm == bm))
629+ then [IntegerEntry("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (bj - ay))]
624630 else throw("Strict value is not equal to itself.")
625631 }
626632 else throw("Strict value is not equal to itself.")
627633 }
628634 else throw("Strict value is not equal to itself.")
629635 }
630636 else throw("Strict value is not equal to itself.")
631637 }
632638 else nil
633639
634640
635641
636-@Callable(aK)
637-func addInterest (j,aw) = if ((aK.caller != this))
642+@Callable(aM)
643+func addInterest (l,ay) = if ((aM.caller != this))
638644 then throw("only for self invocation")
639645 else {
640- let bw = B(("autostake_lastEarned_" + j))
641- let bx = B(("autostake_lastBlock_" + j))
642- let by = fraction(aw, 80, 100)
643- let bz = if (if ((bx == height))
646+ let by = D(("autostake_lastEarned_" + l))
647+ let bz = D(("autostake_lastBlock_" + l))
648+ let bA = fraction(ay, 80, 100)
649+ let bB = if (if ((bz == height))
644650 then true
645- else (aw == 0))
651+ else (ay == 0))
646652 then nil
647- else [IntegerEntry(("autostake_preLastEarned_" + j), bw), IntegerEntry(("autostake_preLastBlock_" + j), bx), IntegerEntry(("autostake_lastEarned_" + j), (bw + by)), IntegerEntry(("autostake_lastBlock_" + j), height)]
648- (bz ++ [IntegerEntry((j + "_sRate"), (B((j + "_sRate")) + fraction(n, by, B(("total_supplied_" + j)))))])
653+ else [IntegerEntry(("autostake_preLastEarned_" + l), by), IntegerEntry(("autostake_preLastBlock_" + l), bz), IntegerEntry(("autostake_lastEarned_" + l), (by + bA)), IntegerEntry(("autostake_lastBlock_" + l), height)]
654+ (bB ++ [IntegerEntry((l + "_sRate"), (D((l + "_sRate")) + fraction(p, bA, D(("total_supplied_" + l)))))])
649655 }
650656
651657
652658
653-@Callable(aK)
659+@Callable(aM)
654660 func addInterestEXTERNAL () = {
655- let aw = fraction(aK.payments[0].amount, 80, 100)
656- let I = aK.payments[0].assetId
657- let j = H(I)
658- let bw = B(("autostake_lastEarned_" + j))
659- let bx = B(("autostake_lastBlock_" + j))
660- let bz = if (if ((bx == height))
661+ let ay = fraction(aM.payments[0].amount, 80, 100)
662+ let K = aM.payments[0].assetId
663+ let l = J(K)
664+ let by = D(("autostake_lastEarned_" + l))
665+ let bz = D(("autostake_lastBlock_" + l))
666+ let bB = if (if ((bz == height))
661667 then true
662- else (aw == 0))
668+ else (ay == 0))
663669 then nil
664- else [IntegerEntry(("autostake_preLastEarned_" + j), bw), IntegerEntry(("autostake_preLastBlock_" + j), bx), IntegerEntry(("autostake_lastEarned_" + j), (bw + aw)), IntegerEntry(("autostake_lastBlock_" + j), height)]
665- (bz ++ [IntegerEntry((j + "_sRate"), (B((j + "_sRate")) + fraction(n, aw, B(("total_supplied_" + j)))))])
670+ else [IntegerEntry(("autostake_preLastEarned_" + l), by), IntegerEntry(("autostake_preLastBlock_" + l), bz), IntegerEntry(("autostake_lastEarned_" + l), (by + ay)), IntegerEntry(("autostake_lastBlock_" + l), height)]
671+ (bB ++ [IntegerEntry((l + "_sRate"), (D((l + "_sRate")) + fraction(p, ay, D(("total_supplied_" + l)))))])
666672 }
667673
668674
669675
670-@Callable(aK)
671-func preInit (bA,bB,bC,bD) = {
672- func r (s,ad) = (s ++ [IntegerEntry((ad + "_bRate"), n), IntegerEntry((ad + "_sRate"), n)])
676+@Callable(aM)
677+func preInit (bC,bD,bE,bF) = {
678+ func t (u,af) = (u ++ [IntegerEntry((af + "_bRate"), p), IntegerEntry((af + "_sRate"), p)])
673679
674- if ((aK.caller != this))
680+ if ((aM.caller != this))
675681 then throw("admin only")
676682 else {
677- let ag = {
678- let u = split(bA, ",")
679- let v = size(u)
680- let w = nil
681- func x (y,z) = if ((z >= v))
682- then y
683- else r(y, u[z])
683+ let ai = {
684+ let w = split(bC, ",")
685+ let x = size(w)
686+ let y = nil
687+ func z (A,B) = if ((B >= x))
688+ then A
689+ else t(A, w[B])
684690
685- func A (y,z) = if ((z >= v))
686- then y
691+ func C (A,B) = if ((B >= x))
692+ then A
687693 else throw("List size exceeds 6")
688694
689- A(x(x(x(x(x(x(w, 0), 1), 2), 3), 4), 5), 6)
695+ C(z(z(z(z(z(z(y, 0), 1), 2), 3), 4), 5), 6)
690696 }
691- ([StringEntry("setup_tokens", bA), StringEntry("setup_ltvs", bB), StringEntry("setup_lts", bC), StringEntry("setup_penalties", bD), BooleanEntry("setup_active", true)] ++ ag)
697+ ([StringEntry("setup_tokens", bC), StringEntry("setup_ltvs", bD), StringEntry("setup_lts", bE), StringEntry("setup_penalties", bF), BooleanEntry("setup_active", true)] ++ ai)
692698 }
693699 }
694700
695701
696702
697-@Callable(aK)
698-func initNewToken (ad,bE,bF,bG) = if ((aK.caller != this))
703+@Callable(aM)
704+func initNewToken (af,bG,bH,bI) = if ((aM.caller != this))
699705 then throw("admin only")
700- else [StringEntry("setup_tokens", ((F("setup_tokens") + ",") + ad)), StringEntry("setup_ltvs", ((F("setup_ltvs") + ",") + bE)), StringEntry("setup_lts", ((F("setup_lts") + ",") + bF)), StringEntry("setup_penalties", ((F("setup_penalties") + ",") + bG)), IntegerEntry((ad + "_bRate"), n), IntegerEntry((ad + "_sRate"), n)]
706+ else [StringEntry("setup_tokens", ((H("setup_tokens") + ",") + af)), StringEntry("setup_ltvs", ((H("setup_ltvs") + ",") + bG)), StringEntry("setup_lts", ((H("setup_lts") + ",") + bH)), StringEntry("setup_penalties", ((H("setup_penalties") + ",") + bI)), IntegerEntry((af + "_bRate"), p), IntegerEntry((af + "_sRate"), p)]
701707
702708
703709
704-@Callable(aK)
705-func updateParameter (C,bH) = if (if ((aK.caller != this))
706- then (aK.caller != Address(base58'3P3o9cLTV2u9N4nYNKRYL6gy6cUEU9DwXW8'))
710+@Callable(aM)
711+func updateParameter (E,bJ) = if (if ((aM.caller != this))
712+ then (aM.caller != Address(base58'3P3o9cLTV2u9N4nYNKRYL6gy6cUEU9DwXW8'))
707713 else false)
708714 then throw("admin only")
709- else [IntegerEntry(C, parseIntValue(bH))]
715+ else [IntegerEntry(E, parseIntValue(bJ))]
710716
711717
712718
713-@Callable(aK)
714-func updateString (C,bH) = if (if ((aK.caller != this))
715- then (aK.caller != Address(base58'3P3o9cLTV2u9N4nYNKRYL6gy6cUEU9DwXW8'))
719+@Callable(aM)
720+func updateString (E,bJ) = if (if ((aM.caller != this))
721+ then (aM.caller != Address(base58'3P3o9cLTV2u9N4nYNKRYL6gy6cUEU9DwXW8'))
716722 else false)
717723 then throw("admin only")
718- else [StringEntry(C, bH)]
724+ else [StringEntry(E, bJ)]
719725
720726
721727
722-@Callable(aK)
723-func claimToReserveFund (bI) = {
724- let bJ = L()
725- let ag = ab(bJ[0], "sRate")._2
726- let q = [0, 1, 2, 3, 4, 5]
727- func r (s,bK) = if ((bK >= size(bJ)))
728- then s
728+@Callable(aM)
729+func claimToReserveFund (bK) = {
730+ let bL = N()
731+ let ai = ad(bL[0], "sRate")._2
732+ let s = [0, 1, 2, 3, 4, 5]
733+ func t (u,bM) = if ((bM >= size(bL)))
734+ then u
729735 else {
730- let j = bJ[bK]
731- let bL = F(("autostake_amount_" + j))
732- let aw = ((((K(j) + B(("autostake_amount_" + j))) + (if ((bL != ""))
733- then parseIntValue(bL)
734- else 0)) + fraction(B(("total_borrowed_" + j)), ag[((bK * 3) + 1)].value, n)) - fraction(B(("total_supplied_" + j)), ag[(bK * 3)].value, n))
735- let bg = if ((B(("autostake_amount_" + j)) > 0))
736- then invoke(this, "unstakeToken", [j, max([aw, 0])], nil)
736+ let l = bL[bM]
737+ let bN = H(("autostake_amount_" + l))
738+ let ay = ((((M(l) + D(("autostake_amount_" + l))) + (if ((bN != ""))
739+ then parseIntValue(bN)
740+ else 0)) + fraction(D(("total_borrowed_" + l)), ai[((bM * 3) + 1)].value, p)) - fraction(D(("total_supplied_" + l)), ai[(bM * 3)].value, p))
741+ let bi = if ((D(("autostake_amount_" + l)) > 0))
742+ then invoke(this, "unstakeToken", [l, max([ay, 0])], nil)
737743 else 0
738- if ((bg == bg))
739- then (s ++ [aw])
744+ if ((bi == bi))
745+ then (u ++ [ay])
740746 else throw("Strict value is not equal to itself.")
741747 }
742748
743- let bM = {
744- let u = q
745- let v = size(u)
746- let w = nil
747- func x (y,z) = if ((z >= v))
748- then y
749- else r(y, u[z])
749+ let bO = {
750+ let w = s
751+ let x = size(w)
752+ let y = nil
753+ func z (A,B) = if ((B >= x))
754+ then A
755+ else t(A, w[B])
750756
751- func A (y,z) = if ((z >= v))
752- then y
757+ func C (A,B) = if ((B >= x))
758+ then A
753759 else throw("List size exceeds 6")
754760
755- A(x(x(x(x(x(x(w, 0), 1), 2), 3), 4), 5), 6)
761+ C(z(z(z(z(z(z(y, 0), 1), 2), 3), 4), 5), 6)
756762 }
757- func bN (s,bK) = if ((bK >= size(bJ)))
758- then s
763+ func bP (u,bM) = if ((bM >= size(bL)))
764+ then u
759765 else {
760- let j = bJ[bK]
761- (s ++ [ScriptTransfer(a, max([bM[bK], 0]), J(j))])
766+ let l = bL[bM]
767+ (u ++ [ScriptTransfer(a, max([bO[bM], 0]), L(l))])
762768 }
763769
764- if (bI)
765- then throw(p(bM))
770+ if (bK)
771+ then throw(r(bO))
766772 else $Tuple2({
767- let u = q
768- let v = size(u)
769- let w = nil
770- func bO (y,z) = if ((z >= v))
771- then y
772- else bN(y, u[z])
773+ let w = s
774+ let x = size(w)
775+ let y = nil
776+ func bQ (A,B) = if ((B >= x))
777+ then A
778+ else bP(A, w[B])
773779
774- func bP (y,z) = if ((z >= v))
775- then y
780+ func bR (A,B) = if ((B >= x))
781+ then A
776782 else throw("List size exceeds 6")
777783
778- bP(bO(bO(bO(bO(bO(bO(w, 0), 1), 2), 3), 4), 5), 6)
779- }, bM)
784+ bR(bQ(bQ(bQ(bQ(bQ(bQ(y, 0), 1), 2), 3), 4), 5), 6)
785+ }, bO)
780786 }
781787
782788
783789
784-@Callable(aK)
785-func reSetup (j) = {
786- let bQ = B("resetup_lastUpdate")
787- if ((o > (height - bQ)))
790+@Callable(aM)
791+func reSetup (l) = {
792+ let bS = D("resetup_lastUpdate")
793+ if ((q > (height - bS)))
788794 then throw("can be updated only once per day")
789795 else {
790- let bC = split(F("setup_lts"), ",")
791- let bJ = L()
792- let R = af(j)
793- let bR = B((("setup_" + j) + "_tempLT"))
794- let bF = parseIntValue(bJ[value(indexOf(bJ, j))])
795- if ((R > 90000000))
796- then [IntegerEntry((("setup_" + j) + "_tempLT"), fraction(bR, 9975, 10000))]
797- else if (if ((bF > bR))
798- then (90000000 > R)
796+ let bE = split(H("setup_lts"), ",")
797+ let bL = N()
798+ let T = ah(l)
799+ let bT = D((("setup_" + l) + "_tempLT"))
800+ let bH = parseIntValue(bL[value(indexOf(bL, l))])
801+ if ((T > 90000000))
802+ then [IntegerEntry((("setup_" + l) + "_tempLT"), fraction(bT, 9975, 10000))]
803+ else if (if ((bH > bT))
804+ then (90000000 > T)
799805 else false)
800- then [IntegerEntry((("setup_" + j) + "_tempLT"), fraction(bR, 10025, 10000))]
806+ then [IntegerEntry((("setup_" + l) + "_tempLT"), fraction(bT, 10025, 10000))]
801807 else nil
802808 }
803809 }
804810
805811
806812
807-@Callable(aK)
808-func shutdown (bS) = if ((indexOf(f, aK.caller.bytes) == unit))
813+@Callable(aM)
814+func shutdown (bU) = if ((indexOf(h, aM.caller.bytes) == unit))
809815 then throw("user not in a whitelist")
810- else [BooleanEntry("setup_active", !(bS))]
816+ else [BooleanEntry("setup_active", !(bU))]
811817
812818
813819
814-@Callable(aK)
815-func liquidate (bI,h,as,aM,aN,bT) = if (!(g(aK.caller)))
820+@Callable(aM)
821+func liquidate (bK,j,au,aO,aP,bV) = if (!(i(aM.caller)))
816822 then throw("temporarily available for whitelist only")
817- else if (!(E("setup_active")))
823+ else if (!(G("setup_active")))
818824 then throw("market is stopped")
819825 else {
820- let bU = ao(h)
821- if ((bU == bU))
826+ let bW = aq(j)
827+ if ((bW == bW))
822828 then {
823- let bV = ab(aM, "sRate")
824- let au = bV._1
825- let bW = bV._2
826- let bX = ab(aN, "bRate")
827- let aE = bX._1
829+ let bX = ad(aO, "sRate")
830+ let aw = bX._1
828831 let bY = bX._2
829- let bZ = fraction(as, n, au)
830- let ca = B(((h + "_supplied_") + aM))
831- let cb = B(((h + "_borrowed_") + aN))
832- let cc = if ((cb > 0))
833- then cb
832+ let bZ = ad(aP, "bRate")
833+ let aG = bZ._1
834+ let ca = bZ._2
835+ let cb = fraction(au, p, aw)
836+ let cc = D(((j + "_supplied_") + aO))
837+ let cd = D(((j + "_borrowed_") + aP))
838+ let ce = if ((cd > 0))
839+ then cd
834840 else throw("user has no borrow in this token")
835- if ((bU > 0))
841+ if ((bW > 0))
836842 then throw("user can't be liquidated")
837- else if ((bZ > ca))
843+ else if ((cb > cc))
838844 then throw("position to liquidate is bigger than user's supply")
839845 else {
840- let cd = K(aM)
841- if ((cd == cd))
846+ let cf = M(aO)
847+ if ((cf == cf))
842848 then {
843- let ce = K(aN)
844- if ((ce == ce))
849+ let cg = M(aP)
850+ if ((cg == cg))
845851 then {
846- let cf = invoke(d, "swap", [bT, 0], [AttachedPayment(J(aM), as)])
847- if ((cf == cf))
852+ let ch = invoke(f, "swap", [bV, 0], [AttachedPayment(L(aO), au)])
853+ if ((ch == ch))
848854 then {
849- let cg = (cd - K(aM))
850- if ((cg == cg))
855+ let ci = (cf - M(aO))
856+ if ((ci == ci))
851857 then {
852- let ch = (K(aN) - ce)
853- if ((ch == ch))
858+ let cj = (M(aP) - cg)
859+ if ((cj == cj))
854860 then {
855- let ci = ai(aM)._1
856- let cj = am(aM)
857- let ck = fraction(cg, ci, cj)
858- let cl = ai(aN)._2
859- let cm = am(aN)
860- let cn = fraction(ch, cl, cm)
861- let bG = parseIntValue(split(F("setup_penalties"), ",")[value(indexOf(L(), aN))])
862- let co = (cn - fraction(ck, (l - bG), l))
863- let cp = fraction(cg, n, au)
864- let cq = fraction(fraction(ch, n, aE), (l - fraction(co, l, cn)), l)
865- if ((cg > as))
861+ let ck = ak(aO)._1
862+ let cl = ao(aO)
863+ let cm = fraction(ci, ck, cl)
864+ let cn = ak(aP)._2
865+ let co = ao(aP)
866+ let cp = fraction(cj, cn, co)
867+ let bI = parseIntValue(split(H("setup_penalties"), ",")[value(indexOf(N(), aP))])
868+ let cq = (cp - fraction(cm, (n - bI), n))
869+ let cr = fraction(ci, p, aw)
870+ let cs = fraction(fraction(cj, p, aG), (n - fraction(cq, n, cp)), n)
871+ if ((ci > au))
866872 then throw("more assets exchanged than expected")
867- else if ((0 > co))
873+ else if ((0 > cq))
868874 then throw("price impact is bigger than liquidation penalty")
869- else [IntegerEntry(((h + "_supplied_") + aM), (ca - cp)), IntegerEntry(((h + "_borrowed_") + aN), (cc - cq)), IntegerEntry(("total_supplied_" + aM), (B(("total_supplied_" + aM)) - cp)), IntegerEntry(("total_borrowed_" + aN), (B(("total_borrowed_" + aN)) - cq))]
875+ else [IntegerEntry(((j + "_supplied_") + aO), (cc - cr)), IntegerEntry(((j + "_borrowed_") + aP), (ce - cs)), IntegerEntry(("total_supplied_" + aO), (D(("total_supplied_" + aO)) - cr)), IntegerEntry(("total_borrowed_" + aP), (D(("total_borrowed_" + aP)) - cs))]
870876 }
871877 else throw("Strict value is not equal to itself.")
872878 }
873879 else throw("Strict value is not equal to itself.")
874880 }
875881 else throw("Strict value is not equal to itself.")
876882 }
877883 else throw("Strict value is not equal to itself.")
878884 }
879885 else throw("Strict value is not equal to itself.")
880886 }
881887 }
882888 else throw("Strict value is not equal to itself.")
883889 }
884890
885891
886892
887-@Callable(aK)
888-func liquidateV2 (bI,h,aM) = if (!(g(aK.caller)))
893+@Callable(aM)
894+func liquidateV2 (bK,j,aO) = if (!(i(aM.caller)))
889895 then throw("temporarily available for whitelist only")
890- else if (!(E("setup_active")))
896+ else if (!(G("setup_active")))
891897 then throw("market is stopped")
892898 else {
893- let aT = aK.payments[0].assetId
894- let aN = H(aT)
895- let cr = aK.payments[0].amount
896- let bU = ao(h)
897- if ((bU == bU))
898- then if ((bU > 0))
899+ let aV = aM.payments[0].assetId
900+ let aP = J(aV)
901+ let ct = aM.payments[0].amount
902+ let bW = aq(j)
903+ if ((bW == bW))
904+ then if ((bW > 0))
899905 then throw("user can't be liquidated")
900906 else {
901- let cs = L()
902- let ct = value(indexOf(cs, aN))
903- let cu = value(indexOf(cs, aM))
904- let cv = ab(aN, "bRate")
905- let aE = cv._1
906- let bW = cv._2
907- let cl = ai(aN)._2
908- let cm = am(aN)
909- let cw = fraction(cr, cl, cm)
910- let bG = parseIntValue(value(split(F("setup_penalties"), ",")[ct]))
911- let ci = ai(aM)._1
912- let cj = am(aM)
913- let cx = fraction(cw, (l + bG), l)
914- let bZ = fraction(cx, cj, ci)
915- let aO = fraction(cr, n, aE)
916- let aV = fraction(bZ, n, bW[((cu * 3) + 1)].value)
917- let ca = B(((h + "_supplied_") + aM))
918- let cb = B(((h + "_borrowed_") + aN))
919- let cc = if ((cb > 0))
920- then cb
921- else throw("user has no borrow in this token")
922- if ((aV > ca))
923- then throw("position to liquidate is bigger than user's supply")
924- else if (bI)
925- then throw("liquidation will pass")
926- else ([ScriptTransfer(aK.caller, bZ, J(aM)), IntegerEntry(((h + "_supplied_") + aM), (ca - aV)), IntegerEntry(((h + "_borrowed_") + aN), (cc - aO)), IntegerEntry(("total_supplied_" + aM), (B(("total_supplied_" + aM)) - aV)), IntegerEntry(("total_borrowed_" + aN), (B(("total_borrowed_" + aN)) - aO))] ++ bW)
907+ let cu = N()
908+ let cv = value(indexOf(cu, aP))
909+ let cw = value(indexOf(cu, aO))
910+ let cx = ad(aP, "bRate")
911+ let aG = cx._1
912+ let bY = cx._2
913+ let cn = ak(aP)._2
914+ let co = ao(aP)
915+ let cy = fraction(ct, cn, co)
916+ let bI = parseIntValue(value(split(H("setup_penalties"), ",")[cv]))
917+ let ck = ak(aO)._1
918+ let cl = ao(aO)
919+ let cz = fraction(cy, (n + bI), n)
920+ let cb = fraction(cz, cl, ck)
921+ let aQ = fraction(ct, p, aG)
922+ let aX = fraction(cb, p, bY[((cw * 3) + 1)].value)
923+ let bi = if ((indexOf(e, aO) != unit))
924+ then {
925+ let cA = split(j, "_")[1]
926+ let cB = split(j, "_")[0]
927+ reentrantInvoke(d, "liquidate", [cB, cA, aX], nil)
928+ }
929+ else nil
930+ if ((bi == bi))
931+ then {
932+ let cc = D(((j + "_supplied_") + aO))
933+ let cd = D(((j + "_borrowed_") + aP))
934+ let ce = if ((cd > 0))
935+ then cd
936+ else throw("user has no borrow in this token")
937+ if ((aX > cc))
938+ then throw("position to liquidate is bigger than user's supply")
939+ else if (bK)
940+ then throw("liquidation will pass")
941+ else ([ScriptTransfer(aM.caller, cb, L(aO)), IntegerEntry(((j + "_supplied_") + aO), (cc - aX)), IntegerEntry(((j + "_borrowed_") + aP), (ce - aQ)), IntegerEntry(("total_supplied_" + aO), (D(("total_supplied_" + aO)) - aX)), IntegerEntry(("total_borrowed_" + aP), (D(("total_borrowed_" + aP)) - aQ))] ++ bY)
942+ }
943+ else throw("Strict value is not equal to itself.")
927944 }
928945 else throw("Strict value is not equal to itself.")
929946 }
930947
931948
932949
933-@Callable(aK)
934-func getUserCollateral (bI,h,cy,cz) = {
935- let bJ = L()
936- let bB = split(F("setup_ltvs"), ",")
937- let bC = split(F("setup_lts"), ",")
938- let ag = ab(bJ[0], "sRate")._2
939- let cA = split(cz, ",")
940- func r (s,t) = if ((t >= size(bJ)))
941- then s
950+@Callable(aM)
951+func getUserCollateral (bK,j,cC,cD) = {
952+ let bL = N()
953+ let bD = split(H("setup_ltvs"), ",")
954+ let bE = split(H("setup_lts"), ",")
955+ let ai = ad(bL[0], "sRate")._2
956+ let cE = split(cD, ",")
957+ func t (u,v) = if ((v >= size(bL)))
958+ then u
942959 else {
943- let cB = B(((h + "_supplied_") + bJ[t]))
944- let cC = B(((h + "_borrowed_") + bJ[t]))
945- let cD = if ((cz == ""))
946- then if (if ((cC != 0))
960+ let cF = D(((j + "_supplied_") + bL[v]))
961+ let cG = D(((j + "_borrowed_") + bL[v]))
962+ let cH = if ((cD == ""))
963+ then if (if ((cG != 0))
947964 then true
948- else (cB != 0))
965+ else (cF != 0))
949966 then true
950967 else false
951968 else true
952- if (cD)
969+ if (cH)
953970 then {
954- let aA = am(bJ[t])
955- let ay = ai(bJ[t])
956- ((s + fraction(fraction(fraction((cB + (if (if (if ((cz != ""))
957- then (cA[0] == bJ[t])
971+ let aC = ao(bL[v])
972+ let aA = ak(bL[v])
973+ ((u + fraction(fraction(fraction((cF + (if (if (if ((cD != ""))
974+ then (cE[0] == bL[v])
958975 else false)
959- then (cA[1] == "supplied")
976+ then (cE[1] == "supplied")
960977 else false)
961- then parseIntValue(cA[2])
962- else 0)), ag[(t * 3)].value, n), parseIntValue(bB[t]), l), ay._1, aA)) - (if (cy)
963- then fraction(fraction(fraction((cC + (if (if (if ((cz != ""))
964- then (cA[0] == bJ[t])
978+ then parseIntValue(cE[2])
979+ else 0)), ai[(v * 3)].value, p), parseIntValue(bD[v]), n), aA._1, aC)) - (if (cC)
980+ then fraction(fraction(fraction((cG + (if (if (if ((cD != ""))
981+ then (cE[0] == bL[v])
965982 else false)
966- then (cA[1] == "borrowed")
983+ then (cE[1] == "borrowed")
967984 else false)
968- then parseIntValue(cA[2])
969- else 0)), ag[((t * 3) + 1)].value, n), l, parseIntValue(bC[t])), ay._2, aA)
985+ then parseIntValue(cE[2])
986+ else 0)), ai[((v * 3) + 1)].value, p), n, parseIntValue(bE[v])), aA._2, aC)
970987 else 0))
971988 }
972- else s
989+ else u
973990 }
974991
975- let cE = {
976- let u = [0, 1, 2, 3, 4, 5]
977- let v = size(u)
978- let w = 0
979- func x (y,z) = if ((z >= v))
980- then y
981- else r(y, u[z])
992+ let cI = {
993+ let w = [0, 1, 2, 3, 4, 5]
994+ let x = size(w)
995+ let y = 0
996+ func z (A,B) = if ((B >= x))
997+ then A
998+ else t(A, w[B])
982999
983- func A (y,z) = if ((z >= v))
984- then y
1000+ func C (A,B) = if ((B >= x))
1001+ then A
9851002 else throw("List size exceeds 6")
9861003
987- A(x(x(x(x(x(x(w, 0), 1), 2), 3), 4), 5), 6)
1004+ C(z(z(z(z(z(z(y, 0), 1), 2), 3), 4), 5), 6)
9881005 }
989- if (bI)
990- then throw(toString(cE))
991- else $Tuple2(nil, cE)
1006+ if (bK)
1007+ then throw(toString(cI))
1008+ else $Tuple2(nil, cI)
9921009 }
9931010
9941011
9951012
996-@Callable(aK)
997-func getAssetDebt (bI,h,j) = {
998- let cC = B(((h + "_borrowed_") + j))
999- let aA = am(j)
1000- let T = ab(j, "bRate")._1
1001- let cE = fraction(cC, T, n)
1002- if (bI)
1003- then throw(toString(cE))
1004- else $Tuple2(nil, cE)
1013+@Callable(aM)
1014+func getAssetDebt (bK,j,l) = {
1015+ let cG = D(((j + "_borrowed_") + l))
1016+ let aC = ao(l)
1017+ let V = ad(l, "bRate")._1
1018+ let cI = fraction(cG, V, p)
1019+ if (bK)
1020+ then throw(toString(cI))
1021+ else $Tuple2(nil, cI)
10051022 }
10061023
10071024
10081025
1009-@Callable(aK)
1010-func getPrices (bI) = {
1011- let bJ = L()
1012- func r (s,t) = if ((t >= size(bJ)))
1013- then s
1026+@Callable(aM)
1027+func getPrices (bK) = {
1028+ let bL = N()
1029+ func t (u,v) = if ((v >= size(bL)))
1030+ then u
10141031 else {
1015- let ay = ai(bJ[t])
1016- ((((s + toString(ay._1)) + ",") + toString(ay._2)) + "|")
1032+ let aA = ak(bL[v])
1033+ ((((u + toString(aA._1)) + ",") + toString(aA._2)) + "|")
10171034 }
10181035
1019- let cE = {
1020- let u = [0, 1, 2, 3, 4, 5]
1021- let v = size(u)
1022- let w = ""
1023- func x (y,z) = if ((z >= v))
1024- then y
1025- else r(y, u[z])
1036+ let cI = {
1037+ let w = [0, 1, 2, 3, 4, 5]
1038+ let x = size(w)
1039+ let y = ""
1040+ func z (A,B) = if ((B >= x))
1041+ then A
1042+ else t(A, w[B])
10261043
1027- func A (y,z) = if ((z >= v))
1028- then y
1044+ func C (A,B) = if ((B >= x))
1045+ then A
10291046 else throw("List size exceeds 6")
10301047
1031- A(x(x(x(x(x(x(w, 0), 1), 2), 3), 4), 5), 6)
1048+ C(z(z(z(z(z(z(y, 0), 1), 2), 3), 4), 5), 6)
10321049 }
1033- if (bI)
1034- then throw(cE)
1035- else $Tuple2(nil, cE)
1050+ if (bK)
1051+ then throw(cI)
1052+ else $Tuple2(nil, cI)
10361053 }
10371054
10381055
10391056
1040-@Callable(aK)
1041-func calculateUtilizationRatio (j,bI) = if (bI)
1042- then throw(toString(af(j)))
1043- else $Tuple2(nil, af(j))
1057+@Callable(aM)
1058+func calculateUtilizationRatio (l,bK) = if (bK)
1059+ then throw(toString(ah(l)))
1060+ else $Tuple2(nil, ah(l))
10441061
10451062
10461063
1047-@Callable(aK)
1048-func calculateOutdatedUR (j,bI) = if (bI)
1049- then throw(toString(O(j)))
1050- else $Tuple2(nil, O(j))
1064+@Callable(aM)
1065+func calculateOutdatedUR (l,bK) = if (bK)
1066+ then throw(toString(Q(l)))
1067+ else $Tuple2(nil, Q(l))
10511068
10521069
10531070
1054-@Callable(aK)
1055-func calculateTokenRates (bI) = {
1056- func r (s,j) = {
1057- let ag = U(j)
1058- $Tuple2(((((s._1 + toString(ag[1].value)) + "|") + toString(ag[0].value)) + ","), (s._2 ++ ag))
1071+@Callable(aM)
1072+func calculateTokenRates (bK) = {
1073+ func t (u,l) = {
1074+ let ai = W(l)
1075+ $Tuple2(((((u._1 + toString(ai[1].value)) + "|") + toString(ai[0].value)) + ","), (u._2 ++ ai))
10591076 }
10601077
1061- let bM = {
1062- let u = L()
1063- let v = size(u)
1064- let w = $Tuple2("", nil)
1065- func x (y,z) = if ((z >= v))
1066- then y
1067- else r(y, u[z])
1078+ let bO = {
1079+ let w = N()
1080+ let x = size(w)
1081+ let y = $Tuple2("", nil)
1082+ func z (A,B) = if ((B >= x))
1083+ then A
1084+ else t(A, w[B])
10681085
1069- func A (y,z) = if ((z >= v))
1070- then y
1086+ func C (A,B) = if ((B >= x))
1087+ then A
10711088 else throw("List size exceeds 6")
10721089
1073- A(x(x(x(x(x(x(w, 0), 1), 2), 3), 4), 5), 6)
1090+ C(z(z(z(z(z(z(y, 0), 1), 2), 3), 4), 5), 6)
10741091 }
1075- if (bI)
1076- then throw(bM._1)
1077- else $Tuple2(bM._2, bM._1)
1092+ if (bK)
1093+ then throw(bO._1)
1094+ else $Tuple2(bO._2, bO._1)
10781095 }
10791096
10801097
10811098
1082-@Callable(aK)
1083-func calculateTokensInterest (bI) = {
1084- func r (s,j) = {
1085- let T = fraction(Q(j), o, l)
1086- ((s + toString(T)) + ",")
1099+@Callable(aM)
1100+func calculateTokensInterest (bK) = {
1101+ func t (u,l) = {
1102+ let V = fraction(S(l), q, n)
1103+ ((u + toString(V)) + ",")
10871104 }
10881105
1089- let bM = {
1090- let u = L()
1091- let v = size(u)
1092- let w = ""
1093- func x (y,z) = if ((z >= v))
1094- then y
1095- else r(y, u[z])
1106+ let bO = {
1107+ let w = N()
1108+ let x = size(w)
1109+ let y = ""
1110+ func z (A,B) = if ((B >= x))
1111+ then A
1112+ else t(A, w[B])
10961113
1097- func A (y,z) = if ((z >= v))
1098- then y
1114+ func C (A,B) = if ((B >= x))
1115+ then A
10991116 else throw("List size exceeds 6")
11001117
1101- A(x(x(x(x(x(x(w, 0), 1), 2), 3), 4), 5), 6)
1118+ C(z(z(z(z(z(z(y, 0), 1), 2), 3), 4), 5), 6)
11021119 }
1103- if (bI)
1104- then throw(bM)
1105- else $Tuple2(nil, bM)
1120+ if (bK)
1121+ then throw(bO)
1122+ else $Tuple2(nil, bO)
11061123 }
11071124
11081125
1109-@Verifier(cF)
1110-func cG () = sigVerify(cF.bodyBytes, cF.proofs[0], cF.senderPublicKey)
1126+@Verifier(cJ)
1127+func cK () = sigVerify(cJ.bodyBytes, cJ.proofs[0], cJ.senderPublicKey)
11111128

github/deemru/w8io/873ac7e 
1696.91 ms