tx · CwXCnZktP1z872FPSLhvN2YNM3eQnf9W7KkW8UFtY67r

3PGCkrHBxFMi7tz1xqnxgBpeNvn5E4M4g8S:  -0.02400000 Waves

2022.08.26 13:52 [3266819] smart account 3PGCkrHBxFMi7tz1xqnxgBpeNvn5E4M4g8S > SELF 0.00000000 Waves

{ "type": 13, "id": "CwXCnZktP1z872FPSLhvN2YNM3eQnf9W7KkW8UFtY67r", "fee": 2400000, "feeAssetId": null, "timestamp": 1661511102574, "version": 1, "sender": "3PGCkrHBxFMi7tz1xqnxgBpeNvn5E4M4g8S", "senderPublicKey": "CRRN9T4LWdYfw63q5x9XxR8P93XshdCac31Z65PbE6zv", "proofs": [ "5gFuXgYYbjY3fNCekiGgd9TF1yxmEVzfBW1XDqv3cURihUHSn8AbBHJHAAi86ZETS9WktjTbM4UfDcijRPuYznwV" ], "script": "base64:BgKqAQgCEgASABIDCgEIEgQKAggIEgASAwoBCBIAEgASAwoBARIAEgcKBQgICAgBEgASAwoBCBIDCgEIEgMKAQgSAwoBCBIDCgEBEgMKAQgSBAoCCAQSBAoCCAESBAoCCAESAwoBCBIDCgEIEgMKAQgSBAoCCAESBAoCCAESBQoDCAEIEgMKAQgSBQoDCAgBEgUKAwgIARIDCgEIEgASAwoBCBIECgIIARIDCgEBXgEEZ2V0SQEDa2V5CQCaCAIFBHRoaXMFA2tleQEEZ2V0UwEDa2V5CQCdCAIFBHRoaXMFA2tleQEFZ2V0U1YBA2tleQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMFA2tleQkArAICCQCsAgIJAKwCAgIYbm8gc3RyaW5nIHZhbHVlIGZvciBrZXkgBQNrZXkCDCBhdCBhZGRyZXNzIAkApQgBBQR0aGlzAQd0aHJvd0lmAgljb25kaXRpb24FZXJyb3IDBQljb25kaXRpb24JAAIBBQVlcnJvcgYBCHdyaXRlSW50AgNrZXkFdmFsdWUDCQBmAgAABQV2YWx1ZQkAAgEJAKwCAgkArAICCQCsAgICF3dyaXRpbmcgbmVnYXRpdmUgdmFsdWUgCQCkAwEFBXZhbHVlAgkgZm9yIGtleSAFA2tleQkBDEludGVnZXJFbnRyeQIFA2tleQUFdmFsdWUBCWVuc3VyZUdFMAEFdmFsdWUDCQBmAgAABQV2YWx1ZQkAAgECFndyaXRpbmcgbmVnYXRpdmUgdmFsdWUFBXZhbHVlAQVhc0ludAEFdmFsdWUEByRtYXRjaDAFBXZhbHVlAwkAAQIFByRtYXRjaDACA0ludAQDaW50BQckbWF0Y2gwBQNpbnQJAAIBAgNyOjEBCGNoYW5nZUJ5AgNrZXkFdmFsdWUJAQh3cml0ZUludAIFA2tleQkAZAIJAQt2YWx1ZU9yRWxzZQIJAQRnZXRJAQUDa2V5AAAFBXZhbHVlAQt3cml0ZVN0cmluZwIDa2V5BXZhbHVlCQELU3RyaW5nRW50cnkCBQNrZXkFBXZhbHVlAQxmcmFjdGlvbkNlaWwDBXZhbHVlCW51bWVyYXRvcgtkZW5vbWluYXRvcgQEY2FuZAkAawMFBXZhbHVlBQludW1lcmF0b3IFC2Rlbm9taW5hdG9yBAFEALPmk6gLBAVleGFjdAkAAAIJAGoCCQBoAgkAagIFBGNhbmQFAUQJAGoCBQtkZW5vbWluYXRvcgUBRAUBRAkAagIJAGgCCQBqAgUFdmFsdWUFAUQJAGoCBQludW1lcmF0b3IFAUQFAUQDBQVleGFjdAUEY2FuZAkAZAIFBGNhbmQAAQANQmxvY2tzUGVyWWVhcgCgiiAABVJCYXNlAICAhP6m3uERAAtmYWN0b3JzQmFzZQDoBwAMYXNzZXRJZFN0b3JlAgdhc3NldElkAAphc3NldElkU3RyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAQRnZXRTAQUMYXNzZXRJZFN0b3JlAgpubyBhc3NldElkAAdhc3NldElkAwkAAAIFCmFzc2V0SWRTdHICBVdBVkVTBQR1bml0CQDZBAEFCmFzc2V0SWRTdHIAEnJlc2VydmVGYWN0b3JTdG9yZQkArAICBQphc3NldElkU3RyAg5fUmVzZXJ2ZUZhY3RvcgAVY29sbGF0ZXJhbEZhY3RvclN0b3JlCQCsAgIFCmFzc2V0SWRTdHICEV9Db2xsYXRlcmFsRmFjdG9yABlsaXF1aWRhdGlvblRocmVzaG9sZFN0b3JlCQCsAgIFCmFzc2V0SWRTdHICFV9MaXF1aWRhdGlvblRocmVzaG9sZAASb3ZlcmxhcENoYXJnZVN0b3JlAhZhY2NvdW50X2hlYWx0aF9vdmVybGFwABdsaXF1aWRhdGlvblBlbmFsdHlTdG9yZQkArAICBQphc3NldElkU3RyAhNfTGlxdWlkYXRpb25QZW5hbHR5ABJjb25maWdBZGRyZXNzU3RvcmUCDWNvbmZpZ0FkZHJlc3MADWFUb2tlbklkU3RvcmUCCGFUb2tlbklkAA9hVG9rZW5OYW1lU3RvcmUCCmFUb2tlbk5hbWUAFmFUb2tlbkNpcmN1bGF0aW9uU3RvcmUCEWFUb2tlbkNpcmN1bGF0aW9uABNhVG9rZW5EZWNpbWFsc1N0b3JlAg5hVG9rZW5EZWNpbWFscwAScmVzZXJ2ZUdsb2JhbFN0b3JlAhFyZXNlcnZlR2xvYmFsRGF0YQANcmVzZXJ2ZUdsb2JhbAkBC3ZhbHVlT3JFbHNlAgkAoggBBRJyZXNlcnZlR2xvYmFsU3RvcmUCBHx8fHwAEXJlc2VydmVHbG9iYWxEYXRhCQC1CQIFDXJlc2VydmVHbG9iYWwCAXwAEGxhc3RVcGRhdGVIZWlnaHQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkBC3ZhbHVlT3JFbHNlAgkAtgkBCQCRAwIFEXJlc2VydmVHbG9iYWxEYXRhAAAJAQRnZXRJAQIQbGFzdFVwZGF0ZUhlaWdodAITbm8gbGFzdFVwZGF0ZUhlaWdodAASc3RvcmVkVG90YWxEZXBvc2l0CQELdmFsdWVPckVsc2UCCQC2CQEJAJEDAgURcmVzZXJ2ZUdsb2JhbERhdGEAAQkBC3ZhbHVlT3JFbHNlAgkBBGdldEkBAgx0b3RhbERlcG9zaXQAAAAPc3RvcmVkVG90YWxEZWJ0CQELdmFsdWVPckVsc2UCCQC2CQEJAJEDAgURcmVzZXJ2ZUdsb2JhbERhdGEAAgkBC3ZhbHVlT3JFbHNlAgkBBGdldEkBAgt0b3RhbEJvcnJvdwAAABJzdG9yZWRUb3RhbFJlc2VydmUJAQt2YWx1ZU9yRWxzZQIJALYJAQkAkQMCBRFyZXNlcnZlR2xvYmFsRGF0YQADCQELdmFsdWVPckVsc2UCCQEEZ2V0SQECDHRvdGFsUmVzZXJ2ZQAAAAtzdG9yZWRJbmRleAkBC3ZhbHVlT3JFbHNlAgkAtgkBCQCRAwIFEXJlc2VydmVHbG9iYWxEYXRhAAQJAQt2YWx1ZU9yRWxzZQIJAQRnZXRJAQILc3RvcmVkSW5kZXgFBVJCYXNlARJhVG9rZW5CYWxhbmNlU3RvcmUBC3VzZXJBZGRyZXNzCQCsAgIFC3VzZXJBZGRyZXNzAg5fYVRva2VuQmFsYW5jZQEJZGVidFN0b3JlAQt1c2VyQWRkcmVzcwkArAICBQt1c2VyQWRkcmVzcwIFX2RlYnQBDmRlYnRJbmRleFN0b3JlAQt1c2VyQWRkcmVzcwkArAICBQt1c2VyQWRkcmVzcwIGX2luZGV4ARR1c2VBc0NvbGxhdGVyYWxTdG9yZQELdXNlckFkZHJlc3MJAKwCAgULdXNlckFkZHJlc3MCEF91c2VBc0NvbGxhdGVyYWwBCmdldEJhbGFuY2UCDmFkZHJlc3NPckFsaWFzB2Fzc2V0SWQEByRtYXRjaDAFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQCYnYFByRtYXRjaDAJAPAHAgUOYWRkcmVzc09yQWxpYXMFAmJ2AwkAAQIFByRtYXRjaDACBFVuaXQEAXUFByRtYXRjaDAICQDvBwEFDmFkZHJlc3NPckFsaWFzCWF2YWlsYWJsZQkAAgECC01hdGNoIGVycm9yAA1hc3NldERlY2ltYWxzCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAQRnZXRJAQUTYVRva2VuRGVjaW1hbHNTdG9yZQIQbm8gYXNzZXREZWNpbWFscwANY29uZmlnQWRkcmVzcwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBRJjb25maWdBZGRyZXNzU3RvcmUCGXJlc2VydmU6IG5vIGNvbmZpZ0FkZHJlc3MCFmludmFsaWQgY29uZmlnIGFkZHJlc3MBCW9wQWxsb3dlZAECb3AEByRtYXRjaDAJAPwHBAUNY29uZmlnQWRkcmVzcwIJb3BBbGxvd2VkCQDMCAIFCmFzc2V0SWRTdHIJAMwIAgUCb3AFA25pbAUDbmlsAwkAAQIFByRtYXRjaDACB0Jvb2xlYW4EAWIFByRtYXRjaDADBQFiBgkAAgECC25vdCBhbGxvd2VkCQACAQIhb3BBbGxvd2VkOiB1bmV4cGVjdGVkIHJlc3VsdCB0eXBlAAxtYWluQ29udHJhY3QJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIJALUJAgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFDWNvbmZpZ0FkZHJlc3MCBG1haW4CEW5vIG1haW4gaW4gY29uZmlnAgF8AAACFGludmFsaWQgbWFpbiBhZGRyZXNzAQhtYWluT25seQEBaQMJAQhjb250YWlucwIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFDWNvbmZpZ0FkZHJlc3MCBG1haW4JAKUIAQgFAWkGY2FsbGVyBgkAAgECEG9ubHkgbWFpbiBjYW4gZG8BDGRpdkFkbWluT25seQEBaQQJZGl2QWRtaW5zCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUNY29uZmlnQWRkcmVzcwIJZGl2QWRtaW5zAg1ubyBkaXYgYWRtaW5zAwkBASEBCQEIY29udGFpbnMCBQlkaXZBZG1pbnMJAKUIAQgFAWkGY2FsbGVyCQACAQIVb25seSBkaXYgYWRtaW4gY2FuIGRvBgEQaXNBc3NldElkT3JXYXZlcwEFdmFsdWUDAwkBAiE9AgUFdmFsdWUCBVdBVkVTCQAAAgkA2QQBBQV2YWx1ZQkA2QQBAgAHCQACAQIPaW52YWxpZCBhc3NldElkBgAObm90SW5pdGlhbGl6ZWQJAQd0aHJvd0lmAgkBCWlzRGVmaW5lZAEJAQRnZXRTAQUMYXNzZXRJZFN0b3JlAhNhbHJlYWR5IGluaXRpYWxpemVkABJtYXliZU9yYWNsZUFkZHJlc3MEByRtYXRjaDAJAJ0IAgUNY29uZmlnQWRkcmVzcwIOb3JhY2xlX2FkZHJlc3MDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwCQCmCAEFAXMFBHVuaXQAC29yYWNsZVByaWNlBAckbWF0Y2gwCQD8BwQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgUSbWF5YmVPcmFjbGVBZGRyZXNzAglubyBvcmFjbGUCBXByaWNlCQDMCAIFCmFzc2V0SWRTdHIFA25pbAUDbmlsAwkAAQIFByRtYXRjaDACA0ludAQBaQUHJG1hdGNoMAUBaQkAAgECD2JhZCBvcmFjbGUgZGF0YQAGSEVJR0hUBQZoZWlnaHQACGFUb2tlbklkCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkBBGdldFMBBQ1hVG9rZW5JZFN0b3JlAgtubyBhVG9rZW5JZAARYVRva2VuQ2lyY3VsYXRpb24JAQt2YWx1ZU9yRWxzZQIJAQRnZXRJAQUWYVRva2VuQ2lyY3VsYXRpb25TdG9yZQAAAA1yZXNlcnZlRmFjdG9yCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUNY29uZmlnQWRkcmVzcwUScmVzZXJ2ZUZhY3RvclN0b3JlAhBubyByZXNlcnZlRmFjdG9yABBjb2xsYXRlcmFsRmFjdG9yCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUNY29uZmlnQWRkcmVzcwUVY29sbGF0ZXJhbEZhY3RvclN0b3JlAhNubyBjb2xsYXRlcmFsRmFjdG9yABRsaXF1aWRhdGlvblRocmVzaG9sZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFDWNvbmZpZ0FkZHJlc3MFGWxpcXVpZGF0aW9uVGhyZXNob2xkU3RvcmUCF25vIGxpcXVpZGF0aW9uVGhyZXNob2xkABRhY2NvdW50SGVhbHRoT3ZlcmxhcAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFDWNvbmZpZ0FkZHJlc3MFEm92ZXJsYXBDaGFyZ2VTdG9yZQIQbm8gb3ZlcmxhcENoYXJnZQASbGlxdWlkYXRpb25QZW5hbHR5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUNY29uZmlnQWRkcmVzcwUXbGlxdWlkYXRpb25QZW5hbHR5U3RvcmUCFW5vIGxpcXVpZGF0aW9uUGVuYWx0eQALdXRpbGl6YXRpb24DCQBmAgUSc3RvcmVkVG90YWxEZXBvc2l0AAAJAJcDAQkAzAgCBQtmYWN0b3JzQmFzZQkAzAgCCQBrAwUPc3RvcmVkVG90YWxEZWJ0BQtmYWN0b3JzQmFzZQUSc3RvcmVkVG90YWxEZXBvc2l0BQNuaWwAAAADYXByBAFhCQERQGV4dHJOYXRpdmUoMTA1MCkCBQ1jb25maWdBZGRyZXNzCQCsAgIFCmFzc2V0SWRTdHICB19BUG9pbnQEAWIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFDWNvbmZpZ0FkZHJlc3MJAKwCAgUKYXNzZXRJZFN0cgIHX0JQb2ludAQBYwkBEUBleHRyTmF0aXZlKDEwNTApAgUNY29uZmlnQWRkcmVzcwkArAICBQphc3NldElkU3RyAgdfQ1BvaW50BAFkCQERQGV4dHJOYXRpdmUoMTA1MCkCBQ1jb25maWdBZGRyZXNzCQCsAgIFCmFzc2V0SWRTdHICB19EUG9pbnQEBmxpbmVBQwkAZAIJAGsDCQBlAgUBYQUBYwULdXRpbGl6YXRpb24JAQEtAQUBYgUBYQQGbGluZUNECQBkAgkAawMJAGUCBQFjBQFkCQBlAgULdXRpbGl6YXRpb24FAWIJAGUCBQFiBQtmYWN0b3JzQmFzZQUBYwMJAAACBQt1dGlsaXphdGlvbgAABQFhAwkAAAIFC3V0aWxpemF0aW9uBQFiBQFjAwMJAGYCBQFiBQt1dGlsaXphdGlvbgYJAAACBQFiBQtmYWN0b3JzQmFzZQUGbGluZUFDBQZsaW5lQ0QAA2FweQMJAAACBRJzdG9yZWRUb3RhbERlcG9zaXQAAAAACQBrAwkAawMFD3N0b3JlZFRvdGFsRGVidAUDYXByBRJzdG9yZWRUb3RhbERlcG9zaXQJAGUCBQtmYWN0b3JzQmFzZQUNcmVzZXJ2ZUZhY3RvcgULZmFjdG9yc0Jhc2UADGN1cnJlbnRJbmRleAMJAAACBQZIRUlHSFQFEGxhc3RVcGRhdGVIZWlnaHQFC3N0b3JlZEluZGV4BANicHIJAQxmcmFjdGlvbkNlaWwDBQNhcHIFBVJCYXNlCQBoAgUNQmxvY2tzUGVyWWVhcgULZmFjdG9yc0Jhc2UJAQxmcmFjdGlvbkNlaWwDBQtzdG9yZWRJbmRleAkAZAIFBVJCYXNlCQBoAgUDYnByCQBlAgUGSEVJR0hUBRBsYXN0VXBkYXRlSGVpZ2h0BQVSQmFzZQAOc3Rha2luZ0VuYWJsZWQJAQt2YWx1ZU9yRWxzZQIJAJsIAgUNY29uZmlnQWRkcmVzcwkArAICAhBzdGFraW5nX2VuYWJsZWRfBQphc3NldElkU3RyBwANYWN0dWFsQmFsYW5jZQQHJG1hdGNoMAUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBANhaWQFByRtYXRjaDAJAPAHAgUEdGhpcwUDYWlkCAkA7wcBBQR0aGlzCWF2YWlsYWJsZQEObGlxdWlkaXR5Q2hlY2sDBmFtb3VudANtYXgDZXJyAwkAZgIFBmFtb3VudAUDbWF4CQACAQkArAICAhZub3QgZW5vdWdoIGxpcXVpZGl0eTogBQNlcnIGAQ5zdG9yZWRVc2VyRGVidAELdXNlckFkZHJlc3MJAQt2YWx1ZU9yRWxzZQIJAQRnZXRJAQkBCWRlYnRTdG9yZQEFC3VzZXJBZGRyZXNzAAABD2N1cnJlbnRVc2VyRGVidAELdXNlckFkZHJlc3MEAXYJAQ5zdG9yZWRVc2VyRGVidAEFC3VzZXJBZGRyZXNzAwkAAAIFAXYAAAAABA9zdG9yZWRVc2VySW5kZXgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkBBGdldEkBCQEOZGVidEluZGV4U3RvcmUBBQt1c2VyQWRkcmVzcwIgaGFzIGRlYnQgYnV0IGRvZXMgbm90IGhhdmUgaW5kZXgJAGsDBQF2BQxjdXJyZW50SW5kZXgFD3N0b3JlZFVzZXJJbmRleAAQY3VycmVudFRvdGFsRGVidAkAawMFD3N0b3JlZFRvdGFsRGVidAUMY3VycmVudEluZGV4BQtzdG9yZWRJbmRleAAJYWRkZWREZWJ0CQBlAgUQY3VycmVudFRvdGFsRGVidAUPc3RvcmVkVG90YWxEZWJ0AAxhZGRlZERlcG9zaXQJAGsDBQlhZGRlZERlYnQJAGUCBQtmYWN0b3JzQmFzZQUNcmVzZXJ2ZUZhY3RvcgULZmFjdG9yc0Jhc2UAE2N1cnJlbnRUb3RhbERlcG9zaXQJAGQCBRJzdG9yZWRUb3RhbERlcG9zaXQFDGFkZGVkRGVwb3NpdAATY3VycmVudFRvdGFsUmVzZXJ2ZQkAZQIJAGQCBRJzdG9yZWRUb3RhbFJlc2VydmUFCWFkZGVkRGVidAUMYWRkZWREZXBvc2l0AA5zdGFraW5nQWRkcmVzcwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ1jb25maWdBZGRyZXNzCQCsAgICD3N0YWtpbmdfY29uZmlnXwUKYXNzZXRJZFN0cgkArAICAhdubyBzdGFraW5nIGFkZHJlc3MgZm9yIAUKYXNzZXRJZFN0cgkArAICAhhiYWQgc3Rha2luZyBhZGRyZXNzIGZvciAFCmFzc2V0SWRTdHIAEmNsYWltYWJsZURpdmlkZW5kcwkAlwMBCQDMCAIFE2N1cnJlbnRUb3RhbFJlc2VydmUJAMwIAgMFDnN0YWtpbmdFbmFibGVkCQEFYXNJbnQBCQD8BwQFDnN0YWtpbmdBZGRyZXNzAgRpbmZvBQNuaWwFA25pbAUNYWN0dWFsQmFsYW5jZQUDbmlsAQ1wYXltZW50QW1vdW50AgFpB2Fzc2V0SWQEAXAICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50AwkAZwIAAAUBcAkAAgEJAKwCAgIpUGF5bWVudCBpcyBsZXNzIHRoYW4gbWluIGFsbG93ZWQgYW1vdW50OiAJAKQDAQUBcAMJAQIhPQIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUHYXNzZXRJZAkAAgEJAKwCAgIeIGJhZCBhc3NldCBhdHRhY2hlZDogcmVxdWlyZWQgBQphc3NldElkU3RyBQFwAQpzeW5jVG90YWxzBBFhZGRpdGlvbmFsRGVwb3NpdA5hZGRpdGlvbmFsRGVidBFhZGRpdGlvbmFsUmVzZXJ2ZQ1rZWVwQXRCYWxhbmNlBA1zdGFraW5nQWN0aW9uAwkAAAIFDWFjdHVhbEJhbGFuY2UFDWtlZXBBdEJhbGFuY2UFBHVuaXQDCQEBIQEFDnN0YWtpbmdFbmFibGVkBQR1bml0AwkAZgIFDWFjdHVhbEJhbGFuY2UFDWtlZXBBdEJhbGFuY2UJAPwHBAUOc3Rha2luZ0FkZHJlc3MCA3B1dAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQdhc3NldElkCQBlAgUNYWN0dWFsQmFsYW5jZQUNa2VlcEF0QmFsYW5jZQUDbmlsCQD8BwQFDnN0YWtpbmdBZGRyZXNzAgNnZXQJAMwIAgkAZQIFDWtlZXBBdEJhbGFuY2UFDWFjdHVhbEJhbGFuY2UFA25pbAUDbmlsAwkAAAIFDXN0YWtpbmdBY3Rpb24FDXN0YWtpbmdBY3Rpb24EB2RlcG9zaXQJAQllbnN1cmVHRTABCQBkAgUTY3VycmVudFRvdGFsRGVwb3NpdAURYWRkaXRpb25hbERlcG9zaXQEBGRlYnQJAQllbnN1cmVHRTABCQBkAgUQY3VycmVudFRvdGFsRGVidAUOYWRkaXRpb25hbERlYnQEB3Jlc2VydmUJAQllbnN1cmVHRTABCQBkAgUTY3VycmVudFRvdGFsUmVzZXJ2ZQURYWRkaXRpb25hbFJlc2VydmUJAMwIAgkBC3dyaXRlU3RyaW5nAgUScmVzZXJ2ZUdsb2JhbFN0b3JlCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkApAMBBQZIRUlHSFQCAXwJAKQDAQUHZGVwb3NpdAIBfAkApAMBBQRkZWJ0AgF8CQCkAwEFB3Jlc2VydmUCAXwJAKQDAQUMY3VycmVudEluZGV4BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BBXBvdzEwAQFuAwkAAAIFAW4ABgDAhD0DCQAAAgUBbgAIAIDC1y8JAAIBCQCsAgICDmJhZCBkZWNpbWFsczogCQCkAwEFAW4BCmFzc2V0VG9Vc2QBBmFtb3VudAkAawMFBmFtb3VudAULb3JhY2xlUHJpY2UJAQVwb3cxMAEFDWFzc2V0RGVjaW1hbHMBCnVzZFRvQXNzZXQBBmFtb3VudAkAawMFBmFtb3VudAkBBXBvdzEwAQUNYXNzZXREZWNpbWFscwULb3JhY2xlUHJpY2UBDWFUb2tlblRvQXNzZXQBDGFUb2tlbkFtb3VudAMJAAACBQxhVG9rZW5BbW91bnQAAAAAAwkAZgIFEWFUb2tlbkNpcmN1bGF0aW9uAAAJAGsDBQxhVG9rZW5BbW91bnQFE2N1cnJlbnRUb3RhbERlcG9zaXQFEWFUb2tlbkNpcmN1bGF0aW9uBQxhVG9rZW5BbW91bnQBDWFzc2V0VG9BVG9rZW4BC2Fzc2V0QW1vdW50AwkAAAIFC2Fzc2V0QW1vdW50AAAAAAMJAGYCBRFhVG9rZW5DaXJjdWxhdGlvbgAACQBrAwULYXNzZXRBbW91bnQFEWFUb2tlbkNpcmN1bGF0aW9uBRNjdXJyZW50VG90YWxEZXBvc2l0BQthc3NldEFtb3VudAERYXNzZXRUb0FUb2tlbkNlaWwBC2Fzc2V0QW1vdW50AwkAAAIFC2Fzc2V0QW1vdW50AAAAAAMJAGYCBRFhVG9rZW5DaXJjdWxhdGlvbgAACQEMZnJhY3Rpb25DZWlsAwULYXNzZXRBbW91bnQFEWFUb2tlbkNpcmN1bGF0aW9uBRNjdXJyZW50VG90YWxEZXBvc2l0BQthc3NldEFtb3VudAENYVRva2VuQmFsYW5jZQEHYWRkcmVzcwkBC3ZhbHVlT3JFbHNlAgkBBGdldEkBCQESYVRva2VuQmFsYW5jZVN0b3JlAQUHYWRkcmVzcwAAAQllbmFibGVDb2wBBHVzZXIJAQxCb29sZWFuRW50cnkCCQEUdXNlQXNDb2xsYXRlcmFsU3RvcmUBBQR1c2VyBgERZW5hYmxlQ29sSWZOZWVkZWQBBHVzZXIDCQBmAgkBD2N1cnJlbnRVc2VyRGVidAEFBHVzZXIAAAkAzAgCCQEJZW5hYmxlQ29sAQUEdXNlcgUDbmlsBQNuaWwBDGNvbGxhcHNlVXNlcgIHYWRkcmVzcwZhbW91bnQEBGRlYnQJAQ9jdXJyZW50VXNlckRlYnQBBQdhZGRyZXNzBAdkZXBvc2l0CQENYVRva2VuVG9Bc3NldAEJAQ1hVG9rZW5CYWxhbmNlAQUHYWRkcmVzcwQLbWF4UG9zc2libGUJAJcDAQkAzAgCBQRkZWJ0CQDMCAIFB2RlcG9zaXQFA25pbAQDYW10AwkAZgIA////////////AQUGYW1vdW50CQACAQIXaW52YWxpZCBjb2xsYXBzZSBhbW91bnQDAwkAAAIFC21heFBvc3NpYmxlAAAGCQAAAgUGYW1vdW50AAAJAAIBAhNub3RoaW5nIHRvIGNvbGxhcHNlAwMJAAACBQZhbW91bnQA////////////AQYJAGYCBQZhbW91bnQFC21heFBvc3NpYmxlBQttYXhQb3NzaWJsZQUGYW1vdW50BA5yZW1vdmVkQXRva2VucwkBEWFzc2V0VG9BVG9rZW5DZWlsAQUDYW10CQCUCgIJAM4IAgkBCnN5bmNUb3RhbHMECQEBLQEFA2FtdAkBAS0BBQNhbXQAAAAACQDMCAIJAQhjaGFuZ2VCeQIJARJhVG9rZW5CYWxhbmNlU3RvcmUBBQdhZGRyZXNzCQEBLQEFDnJlbW92ZWRBdG9rZW5zCQDMCAIJAQhjaGFuZ2VCeQIFFmFUb2tlbkNpcmN1bGF0aW9uU3RvcmUJAQEtAQUOcmVtb3ZlZEF0b2tlbnMJAMwIAgkBCHdyaXRlSW50AgkBCWRlYnRTdG9yZQEFB2FkZHJlc3MJAGUCBQRkZWJ0BQNhbXQJAMwIAgkBCHdyaXRlSW50AgkBDmRlYnRJbmRleFN0b3JlAQUHYWRkcmVzcwUMY3VycmVudEluZGV4BQNuaWwFA2FtdAEJcmVwYXlVc2VyAgt1c2VyQWRkcmVzcwZhbW91bnQEBmNoZWNrcwkBCW9wQWxsb3dlZAECBXJlcGF5AwkAAAIFBmNoZWNrcwUGY2hlY2tzBAtjdXJyZW50RGVidAkBD2N1cnJlbnRVc2VyRGVidAEFC3VzZXJBZGRyZXNzAwkAAAIFC2N1cnJlbnREZWJ0BQtjdXJyZW50RGVidAQNJHQwMTE3ODMxMjA4NgMJAGYCBQZhbW91bnQFC2N1cnJlbnREZWJ0CQCWCgQAAAkBAS0BBQtjdXJyZW50RGVidAkAZQIFBmFtb3VudAULY3VycmVudERlYnQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQULdXNlckFkZHJlc3MJAGUCBQZhbW91bnQFC2N1cnJlbnREZWJ0BQdhc3NldElkBQNuaWwJAJYKBAkAZQIFC2N1cnJlbnREZWJ0BQZhbW91bnQJAQEtAQUGYW1vdW50AAAFA25pbAQHbmV3RGVidAgFDSR0MDExNzgzMTIwODYCXzEED3RvdGFsRGVidFVwZGF0ZQgFDSR0MDExNzgzMTIwODYCXzIEBnBheW91dAgFDSR0MDExNzgzMTIwODYCXzMEB2FjdGlvbnMIBQ0kdDAxMTc4MzEyMDg2Al80BAZyZXBhaWQJAGUCBQZhbW91bnQFBnBheW91dAkAlAoCCQDOCAIJAM4IAgkBCnN5bmNUb3RhbHMEAAAFD3RvdGFsRGVidFVwZGF0ZQAABQZwYXlvdXQFB2FjdGlvbnMJAMwIAgkBCHdyaXRlSW50AgkBCWRlYnRTdG9yZQEFC3VzZXJBZGRyZXNzBQduZXdEZWJ0CQDMCAIJAQh3cml0ZUludAIJAQ5kZWJ0SW5kZXhTdG9yZQEFC3VzZXJBZGRyZXNzBQxjdXJyZW50SW5kZXgFA25pbAUGcmVwYWlkCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQlnZXRDb25maWcABAFhCQERQGV4dHJOYXRpdmUoMTA1MCkCBQ1jb25maWdBZGRyZXNzCQCsAgIFCmFzc2V0SWRTdHICB19BUG9pbnQEAWIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFDWNvbmZpZ0FkZHJlc3MJAKwCAgUKYXNzZXRJZFN0cgIHX0JQb2ludAQBYwkBEUBleHRyTmF0aXZlKDEwNTApAgUNY29uZmlnQWRkcmVzcwkArAICBQphc3NldElkU3RyAgdfQ1BvaW50BAFkCQERQGV4dHJOYXRpdmUoMTA1MCkCBQ1jb25maWdBZGRyZXNzCQCsAgIFCmFzc2V0SWRTdHICB19EUG9pbnQJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICBkFCQ0Q6IAkApAMBBQFhAgE7CQCkAwEFAWICATsJAKQDAQUBYwIBOwkApAMBBQFkAhEsIHJlc2VydmVGYWN0b3I6IAkApAMBBQ1yZXNlcnZlRmFjdG9yAhQsIGNvbGxhdGVyYWxGYWN0b3I6IAkApAMBBRBjb2xsYXRlcmFsRmFjdG9yAhgsIGxpcXVpZGF0aW9uVGhyZXNob2xkOiAJAKQDAQUUbGlxdWlkYXRpb25UaHJlc2hvbGQCFiwgbGlxdWlkYXRpb25QZW5hbHR5OiAJAKQDAQUSbGlxdWlkYXRpb25QZW5hbHR5AQhnZXRTdGF0ZQAJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICFWN1cnJlbnRUb3RhbERlcG9zaXQ6IAkApAMBBRNjdXJyZW50VG90YWxEZXBvc2l0AhYsIHN0b3JlZFRvdGFsRGVwb3NpdDogCQCkAwEFEnN0b3JlZFRvdGFsRGVwb3NpdAIULCBjdXJyZW50VG90YWxEZWJ0OiAJAKQDAQUQY3VycmVudFRvdGFsRGVidAITLCBzdG9yZWRUb3RhbERlYnQ6IAkApAMBBQ9zdG9yZWRUb3RhbERlYnQCFywgY3VycmVudFRvdGFsUmVzZXJ2ZTogCQCkAwEFE2N1cnJlbnRUb3RhbFJlc2VydmUCFiwgc3RvcmVkVG90YWxSZXNlcnZlOiAJAKQDAQUSc3RvcmVkVG90YWxSZXNlcnZlAg8sIGN1cnJlbnRJbmRleDoJAKQDAQUMY3VycmVudEluZGV4Ag8sIHN0b3JlZEluZGV4OiAJAKQDAQULc3RvcmVkSW5kZXgCFCwgbGFzdFVwZGF0ZUhlaWdodDogCQCkAwEFEGxhc3RVcGRhdGVIZWlnaHQCDywgdXRpbGl6YXRpb246IAkApAMBBQt1dGlsaXphdGlvbgIVLCBhVG9rZW5DaXJjdWxhdGlvbjogCQCkAwEFEWFUb2tlbkNpcmN1bGF0aW9uAg8sIGFUb2tlblByaWNlOiAJAKQDAQkBDWFUb2tlblRvQXNzZXQBCQBsBgAKAAAFDWFzc2V0RGVjaW1hbHMAAAAABQVGTE9PUgIHLCBBUFI6IAkApAMBBQNhcHICBywgQVBZOiAJAKQDAQUDYXB5AQxnZXRVc2VyU3RhdGUBBHVzZXIECGFCYWxhbmNlCQENYVRva2VuQmFsYW5jZQEFBHVzZXIEDmFCYWxhbmNlV2FsbGV0CQEKZ2V0QmFsYW5jZQIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBHVzZXIFCGFUb2tlbklkCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgINY3VycmVudERlYnQ6IAkApAMBCQEPY3VycmVudFVzZXJEZWJ0AQUEdXNlcgIOLCBzdG9yZWREZWJ0OiAJAKQDAQkBC3ZhbHVlT3JFbHNlAgkBBGdldEkBCQEJZGVidFN0b3JlAQUEdXNlcgAAAhIsIGN1cnJlbnREZXBvc2l0OiAJAKQDAQkBDWFUb2tlblRvQXNzZXQBBQhhQmFsYW5jZQIZLCBhVG9rZW5Db250cmFjdEJhbGFuY2U6IAkApAMBBQhhQmFsYW5jZQIXLCBhVG9rZW5XYWxsZXRCYWxhbmNlOiAJAKQDAQUOYUJhbGFuY2VXYWxsZXQCDywgd2FsbGV0U3Rha2U6IAkApAMBCQENYVRva2VuVG9Bc3NldAEFDmFCYWxhbmNlV2FsbGV0AhYsIGFzc2V0V2FsbGV0QmFsYW5jZTogCQCkAwEJAQpnZXRCYWxhbmNlAgkBEUBleHRyTmF0aXZlKDEwNjIpAQUEdXNlcgUHYXNzZXRJZAITLCB1c2VBc0NvbGxhdGVyYWw6IAkApQMBCQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMJARR1c2VBc0NvbGxhdGVyYWxTdG9yZQEFBHVzZXIGAg8sIHN0b3JlZEluZGV4OiAJAKQDAQkBC3ZhbHVlT3JFbHNlAgkBBGdldEkBCQEOZGVidEluZGV4U3RvcmUBBQR1c2VyAAABC2RlYnVnVG90YWxzAAkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICFHN0b3JlZFRvdGFsRGVwb3NpdDogCQCkAwEFEnN0b3JlZFRvdGFsRGVwb3NpdAITLCBzdG9yZWRUb3RhbERlYnQ6IAkApAMBBQ9zdG9yZWRUb3RhbERlYnQCFiwgc3RvcmVkVG90YWxSZXNlcnZlOiAJAKQDAQUSc3RvcmVkVG90YWxSZXNlcnZlAg8sIHN0b3JlZEluZGV4OiAJAKQDAQULc3RvcmVkSW5kZXgCFCwgbGFzdFVwZGF0ZUhlaWdodDogCQCkAwEFEGxhc3RVcGRhdGVIZWlnaHQCFywgY3VycmVudFRvdGFsRGVwb3NpdDogCQCkAwEFE2N1cnJlbnRUb3RhbERlcG9zaXQCFCwgY3VycmVudFRvdGFsRGVidDogCQCkAwEFEGN1cnJlbnRUb3RhbERlYnQCFywgY3VycmVudFRvdGFsUmVzZXJ2ZTogCQCkAwEFE2N1cnJlbnRUb3RhbFJlc2VydmUCECwgY3VycmVudEluZGV4OiAJAKQDAQUMY3VycmVudEluZGV4AhEsIGN1cnJlbnRIZWlnaHQ6IAkApAMBBQZIRUlHSFQCFSwgYVRva2VuQ2lyY3VsYXRpb246IAkApAMBBRFhVG9rZW5DaXJjdWxhdGlvbgIPLCBhVG9rZW5QcmljZTogCQCkAwEJAQ1hVG9rZW5Ub0Fzc2V0AQkAbAYACgAABQ1hc3NldERlY2ltYWxzAAAAAAUFRkxPT1IBCnVzZXJUb3RhbHMBBHVzZXIEB2F0b2tlbnMJAQ1hVG9rZW5CYWxhbmNlAQUEdXNlcgQFYXNzZXQJAQ1hVG9rZW5Ub0Fzc2V0AQUHYXRva2VucwQEZGVidAkBD2N1cnJlbnRVc2VyRGVidAEFBHVzZXIDCQAAAgUGSEVJR0hUBRBsYXN0VXBkYXRlSGVpZ2h0CQCWCgQFEnN0b3JlZFRvdGFsRGVwb3NpdAUPc3RvcmVkVG90YWxEZWJ0BQVhc3NldAUEZGVidAkAlgoEBRNjdXJyZW50VG90YWxEZXBvc2l0BRBjdXJyZW50VG90YWxEZWJ0BQVhc3NldAUEZGVidAEQd2l0aGRyYXdJbnRlcm5hbAQBaQR1c2VyBmFtb3VudAZ0b01haW4EC21heFdpdGhkcmF3CQBlAgkAZAIFEnN0b3JlZFRvdGFsRGVwb3NpdAUSc3RvcmVkVG90YWxSZXNlcnZlBQ9zdG9yZWRUb3RhbERlYnQEBmNoZWNrcwMDAwkBCG1haW5Pbmx5AQUBaQkBDmxpcXVpZGl0eUNoZWNrAwUGYW1vdW50BQttYXhXaXRoZHJhdwkArAICAhJmdW5kcyBpbiB1c2U6IG1heD0JAKQDAQULbWF4V2l0aGRyYXcHCQEHdGhyb3dJZgIJAGYCAP///////////wEFBmFtb3VudAIOaW52YWxpZCBhbW91bnQHCQEJb3BBbGxvd2VkAQIId2l0aGRyYXcHAwkAAAIFBmNoZWNrcwUGY2hlY2tzBA0kdDAxNTk2ODE2MTU5AwkAAAIFBmFtb3VudAD///////////8BBAdhdG9rZW5zCQENYVRva2VuQmFsYW5jZQEFBHVzZXIJAJQKAgUHYXRva2VucwkBDWFUb2tlblRvQXNzZXQBBQdhdG9rZW5zCQCUCgIJARFhc3NldFRvQVRva2VuQ2VpbAEFBmFtb3VudAUGYW1vdW50BA5yZW1vdmVkQXRva2VucwgFDSR0MDE1OTY4MTYxNTkCXzEEDndpdGhkcmF3QW1vdW50CAUNJHQwMTU5NjgxNjE1OQJfMgkAlAoCCQDOCAIJAQpzeW5jVG90YWxzBAkBAS0BBQ53aXRoZHJhd0Ftb3VudAAAAAAFDndpdGhkcmF3QW1vdW50CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMDBQZ0b01haW4FDG1haW5Db250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQUEdXNlcgUOd2l0aGRyYXdBbW91bnQFB2Fzc2V0SWQJAMwIAgkBCGNoYW5nZUJ5AgkBEmFUb2tlbkJhbGFuY2VTdG9yZQEFBHVzZXIJAQEtAQUOcmVtb3ZlZEF0b2tlbnMJAMwIAgkBCGNoYW5nZUJ5AgUWYVRva2VuQ2lyY3VsYXRpb25TdG9yZQkBAS0BBQ5yZW1vdmVkQXRva2VucwUDbmlsBQ53aXRoZHJhd0Ftb3VudAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgERcmVwbGVuaXNoSW50ZXJuYWwDAm9wBHVzZXIBaQQGY2hlY2tzAwkBCG1haW5Pbmx5AQUBaQkBCW9wQWxsb3dlZAEFAm9wBwMJAAACBQZjaGVja3MFBmNoZWNrcwQMYVRva2VuQW1vdW50CQENcGF5bWVudEFtb3VudAIFAWkFCGFUb2tlbklkCQCUCgIJAM4IAgkAzggCCQEKc3luY1RvdGFscwQAAAAAAAAAAAkAzAgCCQEIY2hhbmdlQnkCCQESYVRva2VuQmFsYW5jZVN0b3JlAQUEdXNlcgUMYVRva2VuQW1vdW50CQDMCAIJAQRCdXJuAgUIYVRva2VuSWQFDGFUb2tlbkFtb3VudAUDbmlsCQERZW5hYmxlQ29sSWZOZWVkZWQBBQR1c2VyCQENYVRva2VuVG9Bc3NldAEFDGFUb2tlbkFtb3VudAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEMbWludEludGVybmFsBQFpB2FkZHJlc3MMYW1vdW50VG9NaW50AnRvBmFjdGlvbgQRdXNlckFUb2tlbkJhbGFuY2UJAQ1hVG9rZW5CYWxhbmNlAQUHYWRkcmVzcwQGYW1vdW50AwkAAAIFDGFtb3VudFRvTWludAD///////////8BBRF1c2VyQVRva2VuQmFsYW5jZQUMYW1vdW50VG9NaW50BAZjaGVja3MDAwMJAQhtYWluT25seQEFAWkJAQlvcEFsbG93ZWQBBQZhY3Rpb24HCQEHdGhyb3dJZgIJAGYCAP///////////wEFDGFtb3VudFRvTWludAIUaW52YWxpZCBhbW91bnRUb01pbnQHCQEHdGhyb3dJZgIJAGYCBQZhbW91bnQFEXVzZXJBVG9rZW5CYWxhbmNlCQCsAgICKVRyeWluZyB0byBtaW50IG1vcmUgdGhhbiBhdmFpbGFibGUsIG1heDogCQCkAwEFEXVzZXJBVG9rZW5CYWxhbmNlBwMJAAACBQZjaGVja3MFBmNoZWNrcwkAlAoCCQDOCAIJAQpzeW5jVG90YWxzBAAAAAAAAAAACQDMCAIJAQhjaGFuZ2VCeQIJARJhVG9rZW5CYWxhbmNlU3RvcmUBBQdhZGRyZXNzCQEBLQEFBmFtb3VudAkAzAgCCQEHUmVpc3N1ZQMFCGFUb2tlbklkBQZhbW91bnQGCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAnRvBQZhbW91bnQFCGFUb2tlbklkBQNuaWwJAQ1hVG9rZW5Ub0Fzc2V0AQUGYW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuIwFpARJnZXRSZXNlcnZlRGl2c0luZm8ACQCUCgIFA25pbAkAlQoDBRJjbGFpbWFibGVEaXZpZGVuZHMFCmFzc2V0SWRTdHIJAGUCBRNjdXJyZW50VG90YWxSZXNlcnZlBRJjbGFpbWFibGVEaXZpZGVuZHMBaQETc3RvcmVkRGVwb3NpdEJvcnJvdwAJAJQKAgUDbmlsCQCUCgIFEnN0b3JlZFRvdGFsRGVwb3NpdAUPc3RvcmVkVG90YWxEZWJ0AWkBEGdldEN1cnJlbnRUb3RhbHMBBHVzZXIJAJQKAgUDbmlsCQEKdXNlclRvdGFscwEFBHVzZXIBaQERZ2V0Q3VycmVudFRvdGFsczICBXVzZXIxBXVzZXIyBA0kdDAxNzg0MDE3ODc3CQEKdXNlclRvdGFscwEFBXVzZXIxBAJkMQgFDSR0MDE3ODQwMTc4NzcCXzEEAmQyCAUNJHQwMTc4NDAxNzg3NwJfMgQCZDMIBQ0kdDAxNzg0MDE3ODc3Al8zBAJkNAgFDSR0MDE3ODQwMTc4NzcCXzQEDSR0MDE3ODgyMTc5MTkJAQp1c2VyVG90YWxzAQUFdXNlcjIEAmUxCAUNJHQwMTc4ODIxNzkxOQJfMQQCZTIIBQ0kdDAxNzg4MjE3OTE5Al8yBAJlMwgFDSR0MDE3ODgyMTc5MTkCXzMEAmU0CAUNJHQwMTc4ODIxNzkxOQJfNAkAlAoCBQNuaWwJAJgKBgUCZDEFAmQyBQJkMwUCZDQFAmUzBQJlNAFpAQZhZHZpc2UACQCUCgIFA25pbAkArAICCQCsAgIJAKwCAgkArAICCQCsAgICEHJlc2VydmVBZGRyZXNzOiAJAKUIAQUEdGhpcwICLCAJAQlnZXRDb25maWcAAgIsIAkBCGdldFN0YXRlAAFpAQphZHZpc2VVc2VyAQR1c2VyBA5jdXJyZW50RGVidFVzZAkBCmFzc2V0VG9Vc2QBBRBjdXJyZW50VG90YWxEZWJ0BBFjdXJyZW50RGVwb3NpdFVzZAkBCmFzc2V0VG9Vc2QBBRNjdXJyZW50VG90YWxEZXBvc2l0BAxhc0NvbGxhdGVyYWwJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwkBFHVzZUFzQ29sbGF0ZXJhbFN0b3JlAQUEdXNlcgYEE2VmZmVjdGl2ZURlcG9zaXRVc2QDBQxhc0NvbGxhdGVyYWwFEWN1cnJlbnREZXBvc2l0VXNkAAAECm92ZXJsYXBVc2QJAJcDAQkAzAgCBQ5jdXJyZW50RGVidFVzZAkAzAgCBRNlZmZlY3RpdmVEZXBvc2l0VXNkBQNuaWwEDW92ZXJsYXBDaGFyZ2UJAQxmcmFjdGlvbkNlaWwDBQpvdmVybGFwVXNkBRRhY2NvdW50SGVhbHRoT3ZlcmxhcAULZmFjdG9yc0Jhc2UEAmJwAwkAZgIFDmN1cnJlbnREZWJ0VXNkBRNlZmZlY3RpdmVEZXBvc2l0VXNkAAAJAGsDCQBlAgUTZWZmZWN0aXZlRGVwb3NpdFVzZAUOY3VycmVudERlYnRVc2QFEGNvbGxhdGVyYWxGYWN0b3IFC2ZhY3RvcnNCYXNlBANicHUDCQBmAgUOY3VycmVudERlYnRVc2QFE2VmZmVjdGl2ZURlcG9zaXRVc2QJAGQCCQBrAwkAZQIFDmN1cnJlbnREZWJ0VXNkBRNlZmZlY3RpdmVEZXBvc2l0VXNkBQtmYWN0b3JzQmFzZQUUbGlxdWlkYXRpb25UaHJlc2hvbGQFDW92ZXJsYXBDaGFyZ2UFDW92ZXJsYXBDaGFyZ2UECGVucmljaGVkCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhByZXNlcnZlQWRkcmVzczogCQClCAEFBHRoaXMCEiwgY3VycmVudERlYnRVc2Q6IAkApAMBBQ5jdXJyZW50RGVidFVzZAIVLCBjdXJyZW50RGVwb3NpdFVzZDogCQCkAwEFEWN1cnJlbnREZXBvc2l0VXNkAgYsIGJwOiAJAKQDAQUCYnACBywgYnB1OiAJAKQDAQUDYnB1CQCUCgIFA25pbAkArAICCQCsAgIFCGVucmljaGVkAgIsIAkBDGdldFVzZXJTdGF0ZQEFBHVzZXIBaQELYWRkSW50ZXJlc3QAAwkBAiE9AggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQdhc3NldElkCQACAQInY2FuJ3QgYWRkIGludGVyZXN0IHdpdGggdW5yZWxhdGVkIHRva2VuCQEKc3luY1RvdGFscwQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50AAAAAAAAAWkBDGFkZFRvUmVzZXJ2ZQADCQECIT0CCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFB2Fzc2V0SWQJAAIBAidjYW4ndCBhZGQgaW50ZXJlc3Qgd2l0aCB1bnJlbGF0ZWQgdG9rZW4JAQpzeW5jVG90YWxzBAAAAAAICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50AAABaQETd2l0aGRyYXdGcm9tUmVzZXJ2ZQEDYW10BAZjaGVja3MJAQxkaXZBZG1pbk9ubHkBBQFpAwkAAAIFBmNoZWNrcwUGY2hlY2tzBARkaWZmAwkAAAIFA2FtdAD///////////8BBRJjbGFpbWFibGVEaXZpZGVuZHMFA2FtdAkAlAoCCQDOCAIJAQpzeW5jVG90YWxzBAAAAAAJAQEtAQUEZGlmZgUEZGlmZgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFBGRpZmYFB2Fzc2V0SWQFA25pbAUEZGlmZgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQtmb3JjZVVwZGF0ZQAEBWFkbWluCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUNY29uZmlnQWRkcmVzcwIFYWRtaW4CGnJlc2VydmU6bm8gYWRtaW4gaW4gY29uZmlnAwkBAiE9AgkApQgBCAUBaQZjYWxsZXIFBWFkbWluCQACAQIRb25seSBhZG1pbiBjYW4gZG8JAQpzeW5jVG90YWxzBAAAAAAAAAAAAWkBCmluaXRpYWxpemUFCmNmZ0FkZHJlc3MOYXNzZXRJZE9yV2F2ZXMKYVRva2VuTmFtZRFhVG9rZW5EZXNjcmlwdGlvbg5hVG9rZW5EZWNpbWFscwQGY2hlY2tzAwUObm90SW5pdGlhbGl6ZWQJARBpc0Fzc2V0SWRPcldhdmVzAQUOYXNzZXRJZE9yV2F2ZXMHAwkAAAIFBmNoZWNrcwUGY2hlY2tzBAZhVG9rZW4JAMIIBQUKYVRva2VuTmFtZQURYVRva2VuRGVzY3JpcHRpb24AAAUOYVRva2VuRGVjaW1hbHMGCQDMCAIFBmFUb2tlbgkAzAgCCQEId3JpdGVJbnQCBRNhVG9rZW5EZWNpbWFsc1N0b3JlBQ5hVG9rZW5EZWNpbWFscwkAzAgCCQELd3JpdGVTdHJpbmcCBQ9hVG9rZW5OYW1lU3RvcmUFCmFUb2tlbk5hbWUJAMwIAgkBC3dyaXRlU3RyaW5nAgUMYXNzZXRJZFN0b3JlBQ5hc3NldElkT3JXYXZlcwkAzAgCCQELd3JpdGVTdHJpbmcCBRJjb25maWdBZGRyZXNzU3RvcmUFCmNmZ0FkZHJlc3MJAMwIAgkBC3dyaXRlU3RyaW5nAgUNYVRva2VuSWRTdG9yZQkA2AQBCQC4CAEFBmFUb2tlbgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBC2luaXRpYWxpemUyAAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECFm9ubHkgc2VsZiBjYW4gY29udGludWUJAMwIAgkBC1N0cmluZ0VudHJ5AgUScmVzZXJ2ZUdsb2JhbFN0b3JlCQCsAgIJAKQDAQUGSEVJR0hUAgR8fHx8BQNuaWwBaQEOdXNlckRlcG9zaXRVU0QBB2FkZHJlc3MJAJQKAgUDbmlsCQEKYXNzZXRUb1VzZAEJAQ1hVG9rZW5Ub0Fzc2V0AQkBDWFUb2tlbkJhbGFuY2UBBQdhZGRyZXNzAWkBC3VzZXJEZWJ0VVNEAQdhZGRyZXNzCQCUCgIFA25pbAkBCmFzc2V0VG9Vc2QBCQEPY3VycmVudFVzZXJEZWJ0AQUHYWRkcmVzcwFpAQt1c2VyQmFsYW5jZQEHYWRkcmVzcwQHYXRva2VucwkBDWFUb2tlbkJhbGFuY2UBBQdhZGRyZXNzBAVhc3NldAkBDWFUb2tlblRvQXNzZXQBBQdhdG9rZW5zBARkZWJ0CQEPY3VycmVudFVzZXJEZWJ0AQUHYWRkcmVzcwkAlAoCBQNuaWwJAJgKBgUHYXRva2VucwUFYXNzZXQJAQphc3NldFRvVXNkAQUFYXNzZXQFBGRlYnQJAQphc3NldFRvVXNkAQUEZGVidAkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzCQEUdXNlQXNDb2xsYXRlcmFsU3RvcmUBBQdhZGRyZXNzBgFpAQh1c2VyRGVidAEHYWRkcmVzcwQEZGVidAkBD2N1cnJlbnRVc2VyRGVidAEFB2FkZHJlc3MEB2RlYnRVc2QJAQphc3NldFRvVXNkAQUEZGVidAkAlAoCBQNuaWwJAJQKAgUEZGVidAUHZGVidFVzZAFpAQ1hc3NldFVzZFZhbHVlAQthc3NldEFtb3VudAkAlAoCBQNuaWwJAQphc3NldFRvVXNkAQULYXNzZXRBbW91bnQBaQEIcmVwYXlGb3IBC3VzZXJBZGRyZXNzBAZjaGVja3MJAQhtYWluT25seQEFAWkDCQAAAgUGY2hlY2tzBQZjaGVja3MJAQlyZXBheVVzZXICBQt1c2VyQWRkcmVzcwkBDXBheW1lbnRBbW91bnQCBQFpBQdhc3NldElkCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCmRlcG9zaXRGb3ICCWRlcG9zaXRvcg91c2VBc0NvbGxhdGVyYWwEBmNoZWNrcwMJAQhtYWluT25seQEFAWkJAQlvcEFsbG93ZWQBAgdkZXBvc2l0BwMJAAACBQZjaGVja3MFBmNoZWNrcwMDCQBmAgkBD2N1cnJlbnRVc2VyRGVidAEFCWRlcG9zaXRvcgAACQEBIQEFD3VzZUFzQ29sbGF0ZXJhbAcJAAIBAjhjYW4ndCBkaXNhYmxlIHVzZSBhcyBjb2xsYXRlcmFsIGZvciBhc3NldCB3aXRoIG9wZW4gZGVidAQGYW1vdW50CQENcGF5bWVudEFtb3VudAIFAWkFB2Fzc2V0SWQEDGFUb2tlbkFtb3VudAkBDWFzc2V0VG9BVG9rZW4BBQZhbW91bnQJAM4IAgkBCnN5bmNUb3RhbHMEBQZhbW91bnQAAAAAAAAJAMwIAgkBCGNoYW5nZUJ5AgUWYVRva2VuQ2lyY3VsYXRpb25TdG9yZQUMYVRva2VuQW1vdW50CQDMCAIJAQhjaGFuZ2VCeQIJARJhVG9rZW5CYWxhbmNlU3RvcmUBBQlkZXBvc2l0b3IFDGFUb2tlbkFtb3VudAkAzAgCCQEMQm9vbGVhbkVudHJ5AgkBFHVzZUFzQ29sbGF0ZXJhbFN0b3JlAQUJZGVwb3NpdG9yBQ91c2VBc0NvbGxhdGVyYWwFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQt3aXRoZHJhd0ZvcgIHYWRkcmVzcwZhbW91bnQJARB3aXRoZHJhd0ludGVybmFsBAUBaQUHYWRkcmVzcwUGYW1vdW50BwFpAQ53aXRoZHJhd1RvTWFpbgIEdXNlcgZhbW91bnQDCQECIT0CBQZhbW91bnQA////////////AQkAAgECJnJlc2VydmU6IHdpdGhkcmF3VG9NYWluIGFtb3VudCAtMSBvbmx5CQEQd2l0aGRyYXdJbnRlcm5hbAQFAWkFBHVzZXIFBmFtb3VudAYBaQEWcmVwbGVuaXNoV2l0aEF0b2tlbkZvcgEEdXNlcgkBEXJlcGxlbmlzaEludGVybmFsAwIRcmVwbGVuaXNoX2F0b2tlbnMFBHVzZXIFAWkBaQEecmVwbGVuaXNGb3JVbmxvY2tXaXRoQXRva2VuRm9yAQR1c2VyCQERcmVwbGVuaXNoSW50ZXJuYWwDAhhyZXBsZW5pc2hfYXRva2Vuc191bmxvY2sFBHVzZXIFAWkBaQEecmVwbGVuaXNoRm9yUmVwYXlXaXRoQXRva2VuRm9yAQR1c2VyCQERcmVwbGVuaXNoSW50ZXJuYWwDAg1yZXBheV9hdG9rZW5zBQR1c2VyBQFpAWkBCWJvcnJvd0ZvcgIHYWRkcmVzcw5hbW91bnRUb0JvcnJvdwQGY2hlY2tzAwMJAQhtYWluT25seQEFAWkJAQ5saXF1aWRpdHlDaGVjawMFDmFtb3VudFRvQm9ycm93CQBlAgUSc3RvcmVkVG90YWxEZXBvc2l0BQ9zdG9yZWRUb3RhbERlYnQCGXRvbyBtdWNoIGJvcnJvdyByZXF1ZXN0ZWQHCQEJb3BBbGxvd2VkAQIGYm9ycm93BwMJAAACBQZjaGVja3MFBmNoZWNrcwQLY3VycmVudERlYnQJAQ9jdXJyZW50VXNlckRlYnQBBQdhZGRyZXNzBAduZXdEZWJ0CQBkAgULY3VycmVudERlYnQFDmFtb3VudFRvQm9ycm93CQDOCAIJAQpzeW5jVG90YWxzBAAABQ5hbW91bnRUb0JvcnJvdwAABQ5hbW91bnRUb0JvcnJvdwkAzAgCCQEId3JpdGVJbnQCCQEJZGVidFN0b3JlAQUHYWRkcmVzcwUHbmV3RGVidAkAzAgCCQEJZW5hYmxlQ29sAQUHYWRkcmVzcwkAzAgCCQEId3JpdGVJbnQCCQEOZGVidEluZGV4U3RvcmUBBQdhZGRyZXNzBQxjdXJyZW50SW5kZXgJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUHYWRkcmVzcwUOYW1vdW50VG9Cb3Jyb3cFB2Fzc2V0SWQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ1taW50QXRva2VuRm9yAgdhZGRyZXNzDGFtb3VudFRvTWludAkBDG1pbnRJbnRlcm5hbAUFAWkFB2FkZHJlc3MFDGFtb3VudFRvTWludAUHYWRkcmVzcwIMbWludF9hdG9rZW5zAWkBD21pbnRBdG9rZW5Gb3JUbwMEZnJvbQxhbW91bnRUb01pbnQCdG8JAQxtaW50SW50ZXJuYWwFBQFpBQRmcm9tBQxhbW91bnRUb01pbnQFAnRvAhFsb2NrX21pbnRfYXRva2VucwFpARByZWRlZW1BdG9rZW5zRm9yAQR1c2VyBAZjaGVja3MDCQEIbWFpbk9ubHkBBQFpCQEJb3BBbGxvd2VkAQIOcmVkZWVtX2F0b2tlbnMHAwkAAAIFBmNoZWNrcwUGY2hlY2tzBAxhVG9rZW5BbW91bnQJAQ1wYXltZW50QW1vdW50AgUBaQUIYVRva2VuSWQECW91dEFtb3VudAkBDWFUb2tlblRvQXNzZXQBBQxhVG9rZW5BbW91bnQJAJQKAgkAzggCCQEKc3luY1RvdGFscwQJAQEtAQUJb3V0QW1vdW50AAAAAAUJb3V0QW1vdW50CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBHVzZXIFCW91dEFtb3VudAUHYXNzZXRJZAkAzAgCCQEIY2hhbmdlQnkCBRZhVG9rZW5DaXJjdWxhdGlvblN0b3JlCQEBLQEFDGFUb2tlbkFtb3VudAkAzAgCCQEEQnVybgIFCGFUb2tlbklkBQxhVG9rZW5BbW91bnQFA25pbAUJb3V0QW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEnRyYW5zZmVyQVRva2Vuc0ZvcgMEZnJvbQJ0bwh2YWx1ZVVzZAQGY2hlY2tzAwkBCG1haW5Pbmx5AQUBaQkBCW9wQWxsb3dlZAECDXRyYW5zZmVyX2RlYnQHAwkAAAIFBmNoZWNrcwUGY2hlY2tzBAZhc3NldHMJAQp1c2RUb0Fzc2V0AQUIdmFsdWVVc2QEB2F0b2tlbnMJAQ1hc3NldFRvQVRva2VuAQUGYXNzZXRzBAthVG9rZW5zRnJvbQkBDWFUb2tlbkJhbGFuY2UBBQRmcm9tAwkAZgIFB2F0b2tlbnMFC2FUb2tlbnNGcm9tCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhl0cmFuc2ZlckF0b2tlbnNGb3IgZXJyb3I6AhQgdHJhbnNmZXIudmFsdWVVc2Q6IAkApAMBBQh2YWx1ZVVzZAISIHRyYW5zZmVyLmFzc2V0czogCQCkAwEFBmFzc2V0cwITIHRyYW5zZmVyLmF0b2tlbnM6IAkApAMBBQdhdG9rZW5zAg8gZnJvbS5hdG9rZW5zOiAJAKQDAQULYVRva2Vuc0Zyb20CBCBhdCAJAKUIAQUEdGhpcwkAlAoCCQDOCAIJAM4IAgkBCnN5bmNUb3RhbHMEAAAAAAAAAAAJAMwIAgkBCGNoYW5nZUJ5AgkBEmFUb2tlbkJhbGFuY2VTdG9yZQEFBGZyb20JAQEtAQUHYXRva2VucwkAzAgCCQEIY2hhbmdlQnkCCQESYVRva2VuQmFsYW5jZVN0b3JlAQUCdG8FB2F0b2tlbnMFA25pbAkBEWVuYWJsZUNvbElmTmVlZGVkAQUCdG8JAQ1hVG9rZW5Ub0Fzc2V0AQUHYXRva2VucwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ90cmFuc2ZlckRlYnRGb3IDBGZyb20CdG8GYW1vdW50BAZjaGVja3MDCQEIbWFpbk9ubHkBBQFpCQEJb3BBbGxvd2VkAQINdHJhbnNmZXJfZGVidAcDCQAAAgUGY2hlY2tzBQZjaGVja3MJAJQKAgkAzggCCQEKc3luY1RvdGFscwQAAAAAAAAAAAkAzAgCCQEId3JpdGVJbnQCCQEJZGVidFN0b3JlAQUEZnJvbQkAZQIJAQ9jdXJyZW50VXNlckRlYnQBBQRmcm9tBQZhbW91bnQJAMwIAgkBCHdyaXRlSW50AgkBCWRlYnRTdG9yZQEFAnRvCQBkAgkBD2N1cnJlbnRVc2VyRGVidAEFAnRvBQZhbW91bnQJAMwIAgkBCHdyaXRlSW50AgkBDmRlYnRJbmRleFN0b3JlAQUEZnJvbQUMY3VycmVudEluZGV4CQDMCAIJAQh3cml0ZUludAIJAQ5kZWJ0SW5kZXhTdG9yZQEFAnRvBQxjdXJyZW50SW5kZXgJAMwIAgkBCWVuYWJsZUNvbAEFAnRvBQNuaWwFBmFtb3VudAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARlkaXNhYmxlVXNlQXNDb2xsYXRlcmFsRm9yAQdhZGRyZXNzBAZjaGVja3MDCQEIbWFpbk9ubHkBBQFpCQEJb3BBbGxvd2VkAQIKdXNlX2FzX2NvbAcDCQAAAgUGY2hlY2tzBQZjaGVja3MDCQBmAgkBD2N1cnJlbnRVc2VyRGVidAEFB2FkZHJlc3MAAAkAAgECMWNhbid0IGRpc2FibGUgY29sbGF0ZXJhbCBmb3IgYXNzZXQgd2l0aCBvcGVuIGRlYnQJAM4IAgkBCnN5bmNUb3RhbHMEAAAAAAAAAAAJAMwIAgkBDEJvb2xlYW5FbnRyeQIJARR1c2VBc0NvbGxhdGVyYWxTdG9yZQEFB2FkZHJlc3MHBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEVZW5hYmxlVXNlQXNDb2xsYXRlcmFsAAQGY2hlY2tzCQEJb3BBbGxvd2VkAQIKdXNlX2FzX2NvbAMJAAACBQZjaGVja3MFBmNoZWNrcwkAzggCCQEKc3luY1RvdGFscwQAAAAAAAAAAAkAzAgCCQEJZW5hYmxlQ29sAQkApQgBCAUBaQZjYWxsZXIFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQtjb2xsYXBzZUZvcgEEdXNlcgQGY2hlY2tzAwkBCG1haW5Pbmx5AQUBaQkBCW9wQWxsb3dlZAECDmZvcmNlX2NvbGxhcHNlBwMJAAACBQZjaGVja3MFBmNoZWNrcwkBDGNvbGxhcHNlVXNlcgIFBHVzZXIA////////////AQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARFjb2xsYXBzZUZvckFtb3VudAIEdXNlcgZhbW91bnQEBmNoZWNrcwMJAQhtYWluT25seQEFAWkJAQlvcEFsbG93ZWQBAghjb2xsYXBzZQcDCQAAAgUGY2hlY2tzBQZjaGVja3MJAQxjb2xsYXBzZVVzZXICBQR1c2VyBQZhbW91bnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEHbHBWYWx1ZQEMYVRva2VuQW1vdW50CQCUCgIFA25pbAkBDWFUb2tlblRvQXNzZXQBBQxhVG9rZW5BbW91bnQAJrp8hg==", "chainId": 87, "height": 3266819, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: FweaDLJ5BJoaRrU3UmHndBmK2gU6KcXBP4w9XJ5iqKxg Next: 3oDLAUbtsprgUDnexLwFqwGDtPctfbzJLLP1jLznHudG Diff:
OldNewDifferences
2020 else IntegerEntry(b, i)
2121
2222
23-func j (i) = {
24- let k = i
25- if ($isInstanceOf(k, "Int"))
23+func j (i) = if ((0 > i))
24+ then throw("writing negative value")
25+ else i
26+
27+
28+func k (i) = {
29+ let l = i
30+ if ($isInstanceOf(l, "Int"))
2631 then {
27- let l = k
28- l
32+ let m = l
33+ m
2934 }
3035 else throw("r:1")
3136 }
3237
3338
34-func m (b,i) = h(b, (valueOrElse(a(b), 0) + i))
39+func n (b,i) = h(b, (valueOrElse(a(b), 0) + i))
3540
3641
37-func n (b,i) = StringEntry(b, i)
42+func o (b,i) = StringEntry(b, i)
3843
3944
40-func o (i,p,q) = {
41- let r = fraction(i, p, q)
42- let s = 3037000499
43- let t = ((((r % s) * (q % s)) % s) == (((i % s) * (p % s)) % s))
44- if (t)
45- then r
46- else (r + 1)
45+func p (i,q,r) = {
46+ let s = fraction(i, q, r)
47+ let t = 3037000499
48+ let u = ((((s % t) * (r % t)) % t) == (((i % t) * (q % t)) % t))
49+ if (u)
50+ then s
51+ else (s + 1)
4752 }
4853
4954
50-let u = 525600
55+let v = 525600
5156
52-let v = 10000000000000000
57+let w = 10000000000000000
5358
54-let w = 1000
59+let x = 1000
5560
56-let x = "assetId"
61+let y = "assetId"
5762
58-let y = valueOrErrorMessage(c(x), "no assetId")
63+let z = valueOrErrorMessage(c(y), "no assetId")
5964
60-let z = if ((y == "WAVES"))
65+let A = if ((z == "WAVES"))
6166 then unit
62- else fromBase58String(y)
67+ else fromBase58String(z)
6368
64-let A = (y + "_ReserveFactor")
69+let B = (z + "_ReserveFactor")
6570
66-let B = (y + "_CollateralFactor")
71+let C = (z + "_CollateralFactor")
6772
68-let C = (y + "_LiquidationThreshold")
73+let D = (z + "_LiquidationThreshold")
6974
70-let D = "account_health_overlap"
75+let E = "account_health_overlap"
7176
72-let E = (y + "_LiquidationPenalty")
77+let F = (z + "_LiquidationPenalty")
7378
74-let F = "configAddress"
79+let G = "configAddress"
7580
76-let G = "aTokenId"
81+let H = "aTokenId"
7782
78-let H = "aTokenName"
83+let I = "aTokenName"
7984
80-let I = "aTokenCirculation"
85+let J = "aTokenCirculation"
8186
82-let J = "lastUpdateHeight"
87+let K = "aTokenDecimals"
8388
84-let K = "totalBorrow"
89+let L = "reserveGlobalData"
8590
86-let L = "totalDeposit"
91+let M = valueOrElse(getString(L), "||||")
8792
88-let M = "totalReserve"
93+let N = split(M, "|")
8994
90-let N = "storedIndex"
95+let O = valueOrErrorMessage(valueOrElse(parseInt(N[0]), a("lastUpdateHeight")), "no lastUpdateHeight")
9196
92-let O = "aTokenDecimals"
97+let P = valueOrElse(parseInt(N[1]), valueOrElse(a("totalDeposit"), 0))
9398
94-func P (Q) = (Q + "_aTokenBalance")
99+let Q = valueOrElse(parseInt(N[2]), valueOrElse(a("totalBorrow"), 0))
100+
101+let R = valueOrElse(parseInt(N[3]), valueOrElse(a("totalReserve"), 0))
102+
103+let S = valueOrElse(parseInt(N[4]), valueOrElse(a("storedIndex"), w))
104+
105+func T (U) = (U + "_aTokenBalance")
95106
96107
97-func R (Q) = (Q + "_debt")
108+func V (U) = (U + "_debt")
98109
99110
100-func S (Q) = (Q + "_index")
111+func W (U) = (U + "_index")
101112
102113
103-func T (Q) = (Q + "_useAsCollateral")
114+func X (U) = (U + "_useAsCollateral")
104115
105116
106-func U (V,z) = {
107- let k = z
108- if ($isInstanceOf(k, "ByteVector"))
117+func Y (Z,A) = {
118+ let l = A
119+ if ($isInstanceOf(l, "ByteVector"))
109120 then {
110- let W = k
111- assetBalance(V, W)
121+ let aa = l
122+ assetBalance(Z, aa)
112123 }
113- else if ($isInstanceOf(k, "Unit"))
124+ else if ($isInstanceOf(l, "Unit"))
114125 then {
115- let X = k
116- wavesBalance(V).available
126+ let ab = l
127+ wavesBalance(Z).available
117128 }
118129 else throw("Match error")
119130 }
120131
121132
122-let Y = valueOrErrorMessage(a(O), "no assetDecimals")
133+let ac = valueOrErrorMessage(a(K), "no assetDecimals")
123134
124-let Z = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, F), "reserve: no configAddress")), "invalid config address")
135+let ad = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, G), "reserve: no configAddress")), "invalid config address")
125136
126-func aa (ab) = {
127- let k = invoke(Z, "opAllowed", [y, ab], nil)
128- if ($isInstanceOf(k, "Boolean"))
137+func ae (af) = {
138+ let l = invoke(ad, "opAllowed", [z, af], nil)
139+ if ($isInstanceOf(l, "Boolean"))
129140 then {
130- let ac = k
131- if (ac)
141+ let ag = l
142+ if (ag)
132143 then true
133144 else throw("not allowed")
134145 }
136147 }
137148
138149
139-let ad = valueOrErrorMessage(addressFromString(split(valueOrErrorMessage(getString(Z, "main"), "no main in config"), "|")[0]), "invalid main address")
150+let ah = valueOrErrorMessage(addressFromString(split(valueOrErrorMessage(getString(ad, "main"), "no main in config"), "|")[0]), "invalid main address")
140151
141-func ae (af) = if (contains(getStringValue(Z, "main"), toString(af.caller)))
152+func ai (aj) = if (contains(getStringValue(ad, "main"), toString(aj.caller)))
142153 then true
143154 else throw("only main can do")
144155
145156
146-func ag (af) = {
147- let ah = valueOrErrorMessage(getString(Z, "divAdmins"), "no div admins")
148- if (!(contains(ah, toString(af.caller))))
157+func ak (aj) = {
158+ let al = valueOrErrorMessage(getString(ad, "divAdmins"), "no div admins")
159+ if (!(contains(al, toString(aj.caller))))
149160 then throw("only div admin can do")
150161 else true
151162 }
152163
153164
154-func ai (i) = if (if ((i != "WAVES"))
165+func am (i) = if (if ((i != "WAVES"))
155166 then (fromBase58String(i) == fromBase58String(""))
156167 else false)
157168 then throw("invalid assetId")
158169 else true
159170
160171
161-let aj = e(isDefined(c(x)), "already initialized")
172+let an = e(isDefined(c(y)), "already initialized")
162173
163-let ak = {
164- let k = getString(Z, "oracle_address")
165- if ($isInstanceOf(k, "String"))
174+let ao = {
175+ let l = getString(ad, "oracle_address")
176+ if ($isInstanceOf(l, "String"))
166177 then {
167- let al = k
168- addressFromString(al)
178+ let ap = l
179+ addressFromString(ap)
169180 }
170181 else unit
171182 }
172183
173-let am = {
174- let k = invoke(valueOrErrorMessage(ak, "no oracle"), "price", [y], nil)
175- if ($isInstanceOf(k, "Int"))
184+let aq = {
185+ let l = invoke(valueOrErrorMessage(ao, "no oracle"), "price", [z], nil)
186+ if ($isInstanceOf(l, "Int"))
176187 then {
177- let af = k
178- af
188+ let aj = l
189+ aj
179190 }
180191 else throw("bad oracle data")
181192 }
182193
183-let an = height
194+let ar = height
184195
185-let ao = valueOrErrorMessage(a(J), "no lastUpdateHeight")
196+let as = fromBase58String(valueOrErrorMessage(c(H), "no aTokenId"))
186197
187-let ap = fromBase58String(valueOrErrorMessage(c(G), "no aTokenId"))
198+let at = valueOrElse(a(J), 0)
188199
189-let aq = valueOrElse(a(I), 0)
200+let au = valueOrErrorMessage(getInteger(ad, B), "no reserveFactor")
190201
191-let ar = valueOrErrorMessage(getInteger(Z, A), "no reserveFactor")
202+let av = valueOrErrorMessage(getInteger(ad, C), "no collateralFactor")
192203
193-let as = valueOrErrorMessage(getInteger(Z, B), "no collateralFactor")
204+let aw = valueOrErrorMessage(getInteger(ad, D), "no liquidationThreshold")
194205
195-let at = valueOrErrorMessage(getInteger(Z, C), "no liquidationThreshold")
206+let ax = valueOrErrorMessage(getInteger(ad, E), "no overlapCharge")
196207
197-let au = valueOrErrorMessage(getInteger(Z, D), "no overlapCharge")
208+let ay = valueOrErrorMessage(getInteger(ad, F), "no liquidationPenalty")
198209
199-let av = valueOrErrorMessage(getInteger(Z, E), "no liquidationPenalty")
200-
201-let aw = valueOrElse(a(L), 0)
202-
203-let ax = valueOrElse(a(M), 0)
204-
205-let ay = valueOrElse(a(K), 0)
206-
207-let az = valueOrElse(a(N), v)
208-
209-let aA = if ((aw > 0))
210- then min([w, fraction(ay, w, aw)])
210+let az = if ((P > 0))
211+ then min([x, fraction(Q, x, P)])
211212 else 0
212213
213-let aB = {
214- let aC = getIntegerValue(Z, (y + "_APoint"))
215- let ac = getIntegerValue(Z, (y + "_BPoint"))
216- let aD = getIntegerValue(Z, (y + "_CPoint"))
217- let aE = getIntegerValue(Z, (y + "_DPoint"))
218- let aF = (fraction((aC - aD), aA, -(ac)) + aC)
219- let aG = (fraction((aD - aE), (aA - ac), (ac - w)) + aD)
220- if ((aA == 0))
221- then aC
222- else if ((aA == ac))
223- then aD
224- else if (if ((ac > aA))
214+let aA = {
215+ let aB = getIntegerValue(ad, (z + "_APoint"))
216+ let ag = getIntegerValue(ad, (z + "_BPoint"))
217+ let aC = getIntegerValue(ad, (z + "_CPoint"))
218+ let aD = getIntegerValue(ad, (z + "_DPoint"))
219+ let aE = (fraction((aB - aC), az, -(ag)) + aB)
220+ let aF = (fraction((aC - aD), (az - ag), (ag - x)) + aC)
221+ if ((az == 0))
222+ then aB
223+ else if ((az == ag))
224+ then aC
225+ else if (if ((ag > az))
225226 then true
226- else (ac == w))
227- then aF
228- else aG
227+ else (ag == x))
228+ then aE
229+ else aF
229230 }
230231
231-let aH = if ((aw == 0))
232+let aG = if ((P == 0))
232233 then 0
233- else fraction(fraction(ay, aB, aw), (w - ar), w)
234+ else fraction(fraction(Q, aA, P), (x - au), x)
234235
235-let aI = if ((an == ao))
236- then az
236+let aH = if ((ar == O))
237+ then S
237238 else {
238- let aJ = o(aB, v, (u * w))
239- o(az, (v + (aJ * (an - ao))), v)
239+ let aI = p(aA, w, (v * x))
240+ p(S, (w + (aI * (ar - O))), w)
240241 }
241242
242-let aK = valueOrElse(getBoolean(Z, ("staking_enabled_" + y)), false)
243+let aJ = valueOrElse(getBoolean(ad, ("staking_enabled_" + z)), false)
243244
244-let aL = {
245- let k = z
246- if ($isInstanceOf(k, "ByteVector"))
245+let aK = {
246+ let l = A
247+ if ($isInstanceOf(l, "ByteVector"))
247248 then {
248- let aM = k
249- assetBalance(this, aM)
249+ let aL = l
250+ assetBalance(this, aL)
250251 }
251252 else wavesBalance(this).available
252253 }
253254
254-func aN (aO,aP,aQ) = if ((aO > aP))
255- then throw(("not enough liquidity: " + aQ))
255+func aM (aN,aO,aP) = if ((aN > aO))
256+ then throw(("not enough liquidity: " + aP))
256257 else true
257258
258259
259-func aR (Q) = valueOrElse(a(R(Q)), 0)
260+func aQ (U) = valueOrElse(a(V(U)), 0)
260261
261262
262-func aS (Q) = {
263- let aT = aR(Q)
264- if ((aT == 0))
263+func aR (U) = {
264+ let aS = aQ(U)
265+ if ((aS == 0))
265266 then 0
266267 else {
267- let aU = valueOrErrorMessage(a(S(Q)), "has debt but does not have index")
268- fraction(aT, aI, aU)
268+ let aT = valueOrErrorMessage(a(W(U)), "has debt but does not have index")
269+ fraction(aS, aH, aT)
269270 }
270271 }
271272
272273
273-let aV = fraction(ay, aI, az)
274+let aU = fraction(Q, aH, S)
274275
275-let aW = (aV - ay)
276+let aV = (aU - Q)
276277
277-let aX = fraction(aW, (w - ar), w)
278+let aW = fraction(aV, (x - au), x)
278279
279-let aY = (aw + aX)
280+let aX = (P + aW)
280281
281-let aZ = ((ax + aW) - aX)
282+let aY = ((R + aV) - aW)
282283
283-let ba = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(Z, ("staking_config_" + y)), ("no staking address for " + y))), ("bad staking address for " + y))
284+let aZ = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(ad, ("staking_config_" + z)), ("no staking address for " + z))), ("bad staking address for " + z))
284285
285-let bb = min([aZ, if (aK)
286- then j(invoke(ba, "info", nil, nil))
287- else aL])
286+let ba = min([aY, if (aJ)
287+ then k(invoke(aZ, "info", nil, nil))
288+ else aK])
288289
289-func bc (af,z) = {
290- let bd = af.payments[0].amount
291- if ((0 >= bd))
292- then throw(("Payment is less than min allowed amount: " + toString(bd)))
293- else if ((af.payments[0].assetId != z))
294- then throw((" bad asset attached: required " + y))
295- else bd
290+func bb (aj,A) = {
291+ let bc = aj.payments[0].amount
292+ if ((0 >= bc))
293+ then throw(("Payment is less than min allowed amount: " + toString(bc)))
294+ else if ((aj.payments[0].assetId != A))
295+ then throw((" bad asset attached: required " + z))
296+ else bc
296297 }
297298
298299
299-func be (bf,bg,bh,bi) = {
300- let bj = if ((aL == bi))
300+func bd (be,bf,bg,bh) = {
301+ let bi = if ((aK == bh))
301302 then unit
302- else if (!(aK))
303+ else if (!(aJ))
303304 then unit
304- else if ((aL > bi))
305- then invoke(ba, "put", nil, [AttachedPayment(z, (aL - bi))])
306- else invoke(ba, "get", [(bi - aL)], nil)
307- if ((bj == bj))
308- then [h(N, aI), h(J, an), h(L, (aY + bf)), h(K, (aV + bg)), h(M, (aZ + bh))]
305+ else if ((aK > bh))
306+ then invoke(aZ, "put", nil, [AttachedPayment(A, (aK - bh))])
307+ else invoke(aZ, "get", [(bh - aK)], nil)
308+ if ((bi == bi))
309+ then {
310+ let bj = j((aX + be))
311+ let bk = j((aU + bf))
312+ let bl = j((aY + bg))
313+[o(L, ((((((((toString(ar) + "|") + toString(bj)) + "|") + toString(bk)) + "|") + toString(bl)) + "|") + toString(aH)))]
314+ }
309315 else throw("Strict value is not equal to itself.")
310316 }
311317
312318
313-func bk (bl) = if ((bl == 6))
319+func bm (bn) = if ((bn == 6))
314320 then 1000000
315- else if ((bl == 8))
321+ else if ((bn == 8))
316322 then 100000000
317- else throw(("bad decimals: " + toString(bl)))
323+ else throw(("bad decimals: " + toString(bn)))
318324
319325
320-func bm (aO) = fraction(aO, am, bk(Y))
326+func bo (aN) = fraction(aN, aq, bm(ac))
321327
322328
323-func bn (aO) = fraction(aO, bk(Y), am)
324-
325-
326-func bo (bp) = if ((bp == 0))
327- then 0
328- else if ((aq > 0))
329- then fraction(bp, aY, aq)
330- else bp
329+func bp (aN) = fraction(aN, bm(ac), aq)
331330
332331
333332 func bq (br) = if ((br == 0))
334333 then 0
335- else if ((aq > 0))
336- then fraction(br, aq, aY)
334+ else if ((at > 0))
335+ then fraction(br, aX, at)
337336 else br
338337
339338
340-func bs (br) = if ((br == 0))
339+func bs (bt) = if ((bt == 0))
341340 then 0
342- else if ((aq > 0))
343- then o(br, aq, aY)
344- else br
341+ else if ((at > 0))
342+ then fraction(bt, at, aX)
343+ else bt
345344
346345
347-func bt (bu) = valueOrElse(a(P(bu)), 0)
346+func bu (bt) = if ((bt == 0))
347+ then 0
348+ else if ((at > 0))
349+ then p(bt, at, aX)
350+ else bt
348351
349352
350-func bv (bw) = BooleanEntry(T(bw), true)
353+func bv (bw) = valueOrElse(a(T(bw)), 0)
351354
352355
353-func bx (bw) = if ((aS(bw) > 0))
354- then [bv(bw)]
356+func bx (by) = BooleanEntry(X(by), true)
357+
358+
359+func bz (by) = if ((aR(by) > 0))
360+ then [bx(by)]
355361 else nil
356362
357363
358-func by (bu,aO) = {
359- let bz = aS(bu)
360- let bA = bo(bt(bu))
361- let bB = min([bz, bA])
362- let bC = if ((-1 > aO))
364+func bA (bw,aN) = {
365+ let bk = aR(bw)
366+ let bj = bq(bv(bw))
367+ let bB = min([bk, bj])
368+ let bC = if ((-1 > aN))
363369 then throw("invalid collapse amount")
364370 else if (if ((bB == 0))
365371 then true
366- else (aO == 0))
372+ else (aN == 0))
367373 then throw("nothing to collapse")
368- else if (if ((aO == -1))
374+ else if (if ((aN == -1))
369375 then true
370- else (aO > bB))
376+ else (aN > bB))
371377 then bB
372- else aO
373- let bD = bs(bC)
374- $Tuple2((be(-(bC), -(bC), 0, 0) ++ [m(P(bu), -(bD)), m(I, -(bD)), h(R(bu), (bz - bC)), h(S(bu), aI)]), bC)
378+ else aN
379+ let bD = bu(bC)
380+ $Tuple2((bd(-(bC), -(bC), 0, 0) ++ [n(T(bw), -(bD)), n(J, -(bD)), h(V(bw), (bk - bC)), h(W(bw), aH)]), bC)
375381 }
376382
377383
378-func bE (Q,aO) = {
379- let bF = aa("repay")
384+func bE (U,aN) = {
385+ let bF = ae("repay")
380386 if ((bF == bF))
381387 then {
382- let bG = aS(Q)
388+ let bG = aR(U)
383389 if ((bG == bG))
384390 then {
385- let bH = if ((aO > bG))
386- then $Tuple4(0, -(bG), (aO - bG), [ScriptTransfer(addressFromStringValue(Q), (aO - bG), z)])
387- else $Tuple4((bG - aO), -(aO), 0, nil)
391+ let bH = if ((aN > bG))
392+ then $Tuple4(0, -(bG), (aN - bG), [ScriptTransfer(addressFromStringValue(U), (aN - bG), A)])
393+ else $Tuple4((bG - aN), -(aN), 0, nil)
388394 let bI = bH._1
389395 let bJ = bH._2
390396 let bK = bH._3
391397 let bL = bH._4
392- let bM = (aO - bK)
393- $Tuple2(((be(0, bJ, 0, bK) ++ bL) ++ [h(R(Q), bI), h(S(Q), aI)]), bM)
398+ let bM = (aN - bK)
399+ $Tuple2(((bd(0, bJ, 0, bK) ++ bL) ++ [h(V(U), bI), h(W(U), aH)]), bM)
394400 }
395401 else throw("Strict value is not equal to itself.")
396402 }
399405
400406
401407 func bN () = {
402- let aC = getIntegerValue(Z, (y + "_APoint"))
403- let ac = getIntegerValue(Z, (y + "_BPoint"))
404- let aD = getIntegerValue(Z, (y + "_CPoint"))
405- let aE = getIntegerValue(Z, (y + "_DPoint"))
406- ((((((((((((((("ABCD: " + toString(aC)) + ";") + toString(ac)) + ";") + toString(aD)) + ";") + toString(aE)) + ", reserveFactor: ") + toString(ar)) + ", collateralFactor: ") + toString(as)) + ", liquidationThreshold: ") + toString(at)) + ", liquidationPenalty: ") + toString(av))
408+ let aB = getIntegerValue(ad, (z + "_APoint"))
409+ let ag = getIntegerValue(ad, (z + "_BPoint"))
410+ let aC = getIntegerValue(ad, (z + "_CPoint"))
411+ let aD = getIntegerValue(ad, (z + "_DPoint"))
412+ ((((((((((((((("ABCD: " + toString(aB)) + ";") + toString(ag)) + ";") + toString(aC)) + ";") + toString(aD)) + ", reserveFactor: ") + toString(au)) + ", collateralFactor: ") + toString(av)) + ", liquidationThreshold: ") + toString(aw)) + ", liquidationPenalty: ") + toString(ay))
407413 }
408414
409415
410-func bO () = ((((((((((((((((((((((((((("currentTotalDeposit: " + toString(aY)) + ", storedTotalDeposit: ") + toString(aw)) + ", currentTotalDebt: ") + toString(aV)) + ", storedTotalDebt: ") + toString(ay)) + ", currentTotalReserve: ") + toString(aZ)) + ", storedTotalReserve: ") + toString(ax)) + ", currentIndex:") + toString(aI)) + ", storedIndex: ") + toString(az)) + ", lastUpdateHeight: ") + toString(ao)) + ", utilization: ") + toString(aA)) + ", aTokenCirculation: ") + toString(aq)) + ", aTokenPrice: ") + toString(bo(pow(10, 0, Y, 0, 0, FLOOR)))) + ", APR: ") + toString(aB)) + ", APY: ") + toString(aH))
416+func bO () = ((((((((((((((((((((((((((("currentTotalDeposit: " + toString(aX)) + ", storedTotalDeposit: ") + toString(P)) + ", currentTotalDebt: ") + toString(aU)) + ", storedTotalDebt: ") + toString(Q)) + ", currentTotalReserve: ") + toString(aY)) + ", storedTotalReserve: ") + toString(R)) + ", currentIndex:") + toString(aH)) + ", storedIndex: ") + toString(S)) + ", lastUpdateHeight: ") + toString(O)) + ", utilization: ") + toString(az)) + ", aTokenCirculation: ") + toString(at)) + ", aTokenPrice: ") + toString(bq(pow(10, 0, ac, 0, 0, FLOOR)))) + ", APR: ") + toString(aA)) + ", APY: ") + toString(aG))
411417
412418
413-func bP (bw) = {
414- let bQ = bt(bw)
415- let bR = U(addressFromStringValue(bw), ap)
416- ((((((((((((((((("currentDebt: " + toString(aS(bw))) + ", storedDebt: ") + toString(valueOrElse(a(R(bw)), 0))) + ", currentDeposit: ") + toString(bo(bQ))) + ", aTokenContractBalance: ") + toString(bQ)) + ", aTokenWalletBalance: ") + toString(bR)) + ", walletStake: ") + toString(bo(bR))) + ", assetWalletBalance: ") + toString(U(addressFromStringValue(bw), z))) + ", useAsCollateral: ") + toString(valueOrElse(getBoolean(this, T(bw)), true))) + ", storedIndex: ") + toString(valueOrElse(a(S(bw)), 0)))
419+func bP (by) = {
420+ let bQ = bv(by)
421+ let bR = Y(addressFromStringValue(by), as)
422+ ((((((((((((((((("currentDebt: " + toString(aR(by))) + ", storedDebt: ") + toString(valueOrElse(a(V(by)), 0))) + ", currentDeposit: ") + toString(bq(bQ))) + ", aTokenContractBalance: ") + toString(bQ)) + ", aTokenWalletBalance: ") + toString(bR)) + ", walletStake: ") + toString(bq(bR))) + ", assetWalletBalance: ") + toString(Y(addressFromStringValue(by), A))) + ", useAsCollateral: ") + toString(valueOrElse(getBoolean(this, X(by)), true))) + ", storedIndex: ") + toString(valueOrElse(a(W(by)), 0)))
417423 }
418424
419425
420-func bS () = ((((((((((((((((((((((("storedTotalDeposit: " + toString(aw)) + ", storedTotalDebt: ") + toString(ay)) + ", storedTotalReserve: ") + toString(ax)) + ", storedIndex: ") + toString(az)) + ", lastUpdateHeight: ") + toString(ao)) + ", currentTotalDeposit: ") + toString(aY)) + ", currentTotalDebt: ") + toString(aV)) + ", currentTotalReserve: ") + toString(aZ)) + ", currentIndex: ") + toString(aI)) + ", currentHeight: ") + toString(an)) + ", aTokenCirculation: ") + toString(aq)) + ", aTokenPrice: ") + toString(bo(pow(10, 0, Y, 0, 0, FLOOR))))
426+func bS () = ((((((((((((((((((((((("storedTotalDeposit: " + toString(P)) + ", storedTotalDebt: ") + toString(Q)) + ", storedTotalReserve: ") + toString(R)) + ", storedIndex: ") + toString(S)) + ", lastUpdateHeight: ") + toString(O)) + ", currentTotalDeposit: ") + toString(aX)) + ", currentTotalDebt: ") + toString(aU)) + ", currentTotalReserve: ") + toString(aY)) + ", currentIndex: ") + toString(aH)) + ", currentHeight: ") + toString(ar)) + ", aTokenCirculation: ") + toString(at)) + ", aTokenPrice: ") + toString(bq(pow(10, 0, ac, 0, 0, FLOOR))))
421427
422428
423-func bT (bw) = {
424- let bU = bt(bw)
425- let bV = bo(bU)
426- let bz = aS(bw)
427- if ((an == ao))
428- then $Tuple4(aw, ay, bV, bz)
429- else $Tuple4(aY, aV, bV, bz)
429+func bT (by) = {
430+ let bU = bv(by)
431+ let bV = bq(bU)
432+ let bk = aR(by)
433+ if ((ar == O))
434+ then $Tuple4(P, Q, bV, bk)
435+ else $Tuple4(aX, aU, bV, bk)
430436 }
431437
432438
433-func bW (af,bw,aO,bX) = {
434- let bY = ((aw + ax) - ay)
435- let bF = if (if (if (ae(af))
436- then aN(aO, bY, ("funds in use: max=" + toString(bY)))
439+func bW (aj,by,aN,bX) = {
440+ let bY = ((P + R) - Q)
441+ let bF = if (if (if (ai(aj))
442+ then aM(aN, bY, ("funds in use: max=" + toString(bY)))
437443 else false)
438- then e((-1 > aO), "invalid amount")
444+ then e((-1 > aN), "invalid amount")
439445 else false)
440- then aa("withdraw")
446+ then ae("withdraw")
441447 else false
442448 if ((bF == bF))
443449 then {
444- let bZ = if ((aO == -1))
450+ let bZ = if ((aN == -1))
445451 then {
446- let bU = bt(bw)
447- $Tuple2(bU, bo(bU))
452+ let bU = bv(by)
453+ $Tuple2(bU, bq(bU))
448454 }
449- else $Tuple2(bs(aO), aO)
455+ else $Tuple2(bu(aN), aN)
450456 let bD = bZ._1
451457 let ca = bZ._2
452- $Tuple2((be(-(ca), 0, 0, ca) ++ [ScriptTransfer(if (bX)
453- then ad
454- else addressFromStringValue(bw), ca, z), m(P(bw), -(bD)), m(I, -(bD))]), ca)
458+ $Tuple2((bd(-(ca), 0, 0, ca) ++ [ScriptTransfer(if (bX)
459+ then ah
460+ else addressFromStringValue(by), ca, A), n(T(by), -(bD)), n(J, -(bD))]), ca)
455461 }
456462 else throw("Strict value is not equal to itself.")
457463 }
458464
459465
460-func cb (ab,bw,af) = {
461- let bF = if (ae(af))
462- then aa(ab)
466+func cb (af,by,aj) = {
467+ let bF = if (ai(aj))
468+ then ae(af)
463469 else false
464470 if ((bF == bF))
465471 then {
466- let bp = bc(af, ap)
467- $Tuple2(((be(0, 0, 0, 0) ++ [m(P(bw), bp), Burn(ap, bp)]) ++ bx(bw)), bo(bp))
472+ let br = bb(aj, as)
473+ $Tuple2(((bd(0, 0, 0, 0) ++ [n(T(by), br), Burn(as, br)]) ++ bz(by)), bq(br))
468474 }
469475 else throw("Strict value is not equal to itself.")
470476 }
471477
472478
473-func cc (af,bu,cd,ce,cf) = {
474- let cg = bt(bu)
475- let aO = if ((cd == -1))
479+func cc (aj,bw,cd,ce,cf) = {
480+ let cg = bv(bw)
481+ let aN = if ((cd == -1))
476482 then cg
477483 else cd
478- let bF = if (if (if (ae(af))
479- then aa(cf)
484+ let bF = if (if (if (ai(aj))
485+ then ae(cf)
480486 else false)
481487 then e((-1 > cd), "invalid amountToMint")
482488 else false)
483- then e((aO > cg), ("Trying to mint more than available, max: " + toString(cg)))
489+ then e((aN > cg), ("Trying to mint more than available, max: " + toString(cg)))
484490 else false
485491 if ((bF == bF))
486- then $Tuple2((be(0, 0, 0, 0) ++ [m(P(bu), -(aO)), Reissue(ap, aO, true), ScriptTransfer(addressFromStringValue(ce), aO, ap)]), bo(aO))
492+ then $Tuple2((bd(0, 0, 0, 0) ++ [n(T(bw), -(aN)), Reissue(as, aN, true), ScriptTransfer(addressFromStringValue(ce), aN, as)]), bq(aN))
487493 else throw("Strict value is not equal to itself.")
488494 }
489495
490496
491-@Callable(af)
492-func getReserveDivsInfo () = $Tuple2(nil, $Tuple3(bb, y, (aZ - bb)))
497+@Callable(aj)
498+func getReserveDivsInfo () = $Tuple2(nil, $Tuple3(ba, z, (aY - ba)))
493499
494500
495501
496-@Callable(af)
497-func getCurrentTotals (bw) = $Tuple2(nil, bT(bw))
502+@Callable(aj)
503+func storedDepositBorrow () = $Tuple2(nil, $Tuple2(P, Q))
498504
499505
500506
501-@Callable(af)
507+@Callable(aj)
508+func getCurrentTotals (by) = $Tuple2(nil, bT(by))
509+
510+
511+
512+@Callable(aj)
502513 func getCurrentTotals2 (ch,ci) = {
503514 let cj = bT(ch)
504515 let ck = cj._1
515526
516527
517528
518-@Callable(af)
529+@Callable(aj)
519530 func advise () = $Tuple2(nil, ((((("reserveAddress: " + toString(this)) + ", ") + bN()) + ", ") + bO()))
520531
521532
522533
523-@Callable(af)
524-func adviseUser (bw) = {
525- let ct = bm(aV)
526- let cu = bm(aY)
527- let cv = valueOrElse(getBoolean(this, T(bw)), true)
534+@Callable(aj)
535+func adviseUser (by) = {
536+ let ct = bo(aU)
537+ let cu = bo(aX)
538+ let cv = valueOrElse(getBoolean(this, X(by)), true)
528539 let cw = if (cv)
529540 then cu
530541 else 0
531542 let cx = min([ct, cw])
532- let cy = o(cx, au, w)
543+ let cy = p(cx, ax, x)
533544 let cz = if ((ct > cw))
534545 then 0
535- else fraction((cw - ct), as, w)
546+ else fraction((cw - ct), av, x)
536547 let cA = if ((ct > cw))
537- then (fraction((ct - cw), w, at) + cy)
548+ then (fraction((ct - cw), x, aw) + cy)
538549 else cy
539550 let cB = ((((((((("reserveAddress: " + toString(this)) + ", currentDebtUsd: ") + toString(ct)) + ", currentDepositUsd: ") + toString(cu)) + ", bp: ") + toString(cz)) + ", bpu: ") + toString(cA))
540- $Tuple2(nil, ((cB + ", ") + bP(bw)))
551+ $Tuple2(nil, ((cB + ", ") + bP(by)))
541552 }
542553
543554
544555
545-@Callable(af)
546-func addInterest () = if ((af.payments[0].assetId != z))
556+@Callable(aj)
557+func addInterest () = if ((aj.payments[0].assetId != A))
547558 then throw("can't add interest with unrelated token")
548- else be(af.payments[0].amount, 0, 0, 0)
559+ else bd(aj.payments[0].amount, 0, 0, 0)
549560
550561
551562
552-@Callable(af)
553-func addToReserve () = if ((af.payments[0].assetId != z))
563+@Callable(aj)
564+func addToReserve () = if ((aj.payments[0].assetId != A))
554565 then throw("can't add interest with unrelated token")
555- else be(0, 0, af.payments[0].amount, 0)
566+ else bd(0, 0, aj.payments[0].amount, 0)
556567
557568
558569
559-@Callable(af)
570+@Callable(aj)
560571 func withdrawFromReserve (bC) = {
561- let bF = ag(af)
572+ let bF = ak(aj)
562573 if ((bF == bF))
563574 then {
564575 let cC = if ((bC == -1))
565- then bb
576+ then ba
566577 else bC
567- $Tuple2((be(0, 0, -(cC), cC) ++ [ScriptTransfer(af.caller, cC, z)]), cC)
578+ $Tuple2((bd(0, 0, -(cC), cC) ++ [ScriptTransfer(aj.caller, cC, A)]), cC)
568579 }
569580 else throw("Strict value is not equal to itself.")
570581 }
571582
572583
573584
574-@Callable(af)
585+@Callable(aj)
575586 func forceUpdate () = {
576- let cD = valueOrErrorMessage(getString(Z, "admin"), "reserve:no admin in config")
577- if ((toString(af.caller) != cD))
587+ let cD = valueOrErrorMessage(getString(ad, "admin"), "reserve:no admin in config")
588+ if ((toString(aj.caller) != cD))
578589 then throw("only admin can do")
579- else be(0, 0, 0, 0)
590+ else bd(0, 0, 0, 0)
580591 }
581592
582593
583594
584-@Callable(af)
595+@Callable(aj)
585596 func initialize (cE,cF,cG,cH,cI) = {
586- let bF = if (aj)
587- then ai(cF)
597+ let bF = if (an)
598+ then am(cF)
588599 else false
589600 if ((bF == bF))
590601 then {
591602 let cJ = Issue(cG, cH, 0, cI, true)
592-[cJ, h(O, cI), n(H, cG), n(x, cF), n(F, cE), n(G, toBase58String(calculateAssetId(cJ)))]
603+[cJ, h(K, cI), o(I, cG), o(y, cF), o(G, cE), o(H, toBase58String(calculateAssetId(cJ)))]
593604 }
594605 else throw("Strict value is not equal to itself.")
595606 }
596607
597608
598609
599-@Callable(af)
600-func initialize2 () = if ((af.caller != this))
610+@Callable(aj)
611+func initialize2 () = if ((aj.caller != this))
601612 then throw("only self can continue")
602- else [h(J, an)]
613+ else [StringEntry(L, (toString(ar) + "||||"))]
603614
604615
605616
606-@Callable(af)
607-func userDepositUSD (bu) = $Tuple2(nil, bm(bo(bt(bu))))
617+@Callable(aj)
618+func userDepositUSD (bw) = $Tuple2(nil, bo(bq(bv(bw))))
608619
609620
610621
611-@Callable(af)
612-func userDebtUSD (bu) = $Tuple2(nil, bm(aS(bu)))
622+@Callable(aj)
623+func userDebtUSD (bw) = $Tuple2(nil, bo(aR(bw)))
613624
614625
615626
616-@Callable(af)
617-func userBalance (bu) = {
618- let bU = bt(bu)
619- let bV = bo(bU)
620- let bz = aS(bu)
621- $Tuple2(nil, $Tuple6(bU, bV, bm(bV), bz, bm(bz), valueOrElse(getBoolean(this, T(bu)), true)))
627+@Callable(aj)
628+func userBalance (bw) = {
629+ let bU = bv(bw)
630+ let bV = bq(bU)
631+ let bk = aR(bw)
632+ $Tuple2(nil, $Tuple6(bU, bV, bo(bV), bk, bo(bk), valueOrElse(getBoolean(this, X(bw)), true)))
622633 }
623634
624635
625636
626-@Callable(af)
627-func userDebt (bu) = {
628- let bz = aS(bu)
629- let cK = bm(bz)
630- $Tuple2(nil, $Tuple2(bz, cK))
637+@Callable(aj)
638+func userDebt (bw) = {
639+ let bk = aR(bw)
640+ let cK = bo(bk)
641+ $Tuple2(nil, $Tuple2(bk, cK))
631642 }
632643
633644
634645
635-@Callable(af)
636-func assetUsdValue (br) = $Tuple2(nil, bm(br))
646+@Callable(aj)
647+func assetUsdValue (bt) = $Tuple2(nil, bo(bt))
637648
638649
639650
640-@Callable(af)
641-func repayFor (Q) = {
642- let bF = ae(af)
651+@Callable(aj)
652+func repayFor (U) = {
653+ let bF = ai(aj)
643654 if ((bF == bF))
644- then bE(Q, bc(af, z))
655+ then bE(U, bb(aj, A))
645656 else throw("Strict value is not equal to itself.")
646657 }
647658
648659
649660
650-@Callable(af)
661+@Callable(aj)
651662 func depositFor (cL,cM) = {
652- let bF = if (ae(af))
653- then aa("deposit")
663+ let bF = if (ai(aj))
664+ then ae("deposit")
654665 else false
655666 if ((bF == bF))
656- then if (if ((aS(cL) > 0))
667+ then if (if ((aR(cL) > 0))
657668 then !(cM)
658669 else false)
659670 then throw("can't disable use as collateral for asset with open debt")
660671 else {
661- let aO = bc(af, z)
662- let bp = bq(aO)
663- (be(aO, 0, 0, 0) ++ [m(I, bp), m(P(cL), bp), BooleanEntry(T(cL), cM)])
672+ let aN = bb(aj, A)
673+ let br = bs(aN)
674+ (bd(aN, 0, 0, 0) ++ [n(J, br), n(T(cL), br), BooleanEntry(X(cL), cM)])
664675 }
665676 else throw("Strict value is not equal to itself.")
666677 }
667678
668679
669680
670-@Callable(af)
671-func withdrawFor (bu,aO) = bW(af, bu, aO, false)
681+@Callable(aj)
682+func withdrawFor (bw,aN) = bW(aj, bw, aN, false)
672683
673684
674685
675-@Callable(af)
676-func withdrawToMain (bw,aO) = if ((aO != -1))
686+@Callable(aj)
687+func withdrawToMain (by,aN) = if ((aN != -1))
677688 then throw("reserve: withdrawToMain amount -1 only")
678- else bW(af, bw, aO, true)
689+ else bW(aj, by, aN, true)
679690
680691
681692
682-@Callable(af)
683-func replenishWithAtokenFor (bw) = cb("replenish_atokens", bw, af)
693+@Callable(aj)
694+func replenishWithAtokenFor (by) = cb("replenish_atokens", by, aj)
684695
685696
686697
687-@Callable(af)
688-func replenishForRepayWithAtokenFor (bw) = cb("repay_atokens", bw, af)
698+@Callable(aj)
699+func replenisForUnlockWithAtokenFor (by) = cb("replenish_atokens_unlock", by, aj)
689700
690701
691702
692-@Callable(af)
693-func borrowFor (bu,cN) = {
694- let bF = if (if (ae(af))
695- then aN(cN, (aw - ay), "too much borrow requested")
703+@Callable(aj)
704+func replenishForRepayWithAtokenFor (by) = cb("repay_atokens", by, aj)
705+
706+
707+
708+@Callable(aj)
709+func borrowFor (bw,cN) = {
710+ let bF = if (if (ai(aj))
711+ then aM(cN, (P - Q), "too much borrow requested")
696712 else false)
697- then aa("borrow")
713+ then ae("borrow")
698714 else false
699715 if ((bF == bF))
700716 then {
701- let bG = aS(bu)
717+ let bG = aR(bw)
702718 let bI = (bG + cN)
703- (be(0, cN, 0, cN) ++ [h(R(bu), bI), bv(bu), h(S(bu), aI), ScriptTransfer(addressFromStringValue(bu), cN, z)])
719+ (bd(0, cN, 0, cN) ++ [h(V(bw), bI), bx(bw), h(W(bw), aH), ScriptTransfer(addressFromStringValue(bw), cN, A)])
704720 }
705721 else throw("Strict value is not equal to itself.")
706722 }
707723
708724
709725
710-@Callable(af)
711-func mintAtokenFor (bu,cd) = cc(af, bu, cd, bu, "mint_atokens")
726+@Callable(aj)
727+func mintAtokenFor (bw,cd) = cc(aj, bw, cd, bw, "mint_atokens")
712728
713729
714730
715-@Callable(af)
716-func mintAtokenForTo (cO,cd,ce) = cc(af, cO, cd, ce, "lock_mint_atokens")
731+@Callable(aj)
732+func mintAtokenForTo (cO,cd,ce) = cc(aj, cO, cd, ce, "lock_mint_atokens")
717733
718734
719735
720-@Callable(af)
721-func redeemAtokensFor (bw) = {
722- let bF = if (ae(af))
723- then aa("redeem_atokens")
736+@Callable(aj)
737+func redeemAtokensFor (by) = {
738+ let bF = if (ai(aj))
739+ then ae("redeem_atokens")
724740 else false
725741 if ((bF == bF))
726742 then {
727- let bp = bc(af, ap)
728- let cP = bo(bp)
729- $Tuple2((be(-(cP), 0, 0, cP) ++ [ScriptTransfer(addressFromStringValue(bw), cP, z), m(I, -(bp)), Burn(ap, bp)]), cP)
743+ let br = bb(aj, as)
744+ let cP = bq(br)
745+ $Tuple2((bd(-(cP), 0, 0, cP) ++ [ScriptTransfer(addressFromStringValue(by), cP, A), n(J, -(br)), Burn(as, br)]), cP)
730746 }
731747 else throw("Strict value is not equal to itself.")
732748 }
733749
734750
735751
736-@Callable(af)
752+@Callable(aj)
737753 func transferATokensFor (cO,ce,cQ) = {
738- let bF = if (ae(af))
739- then aa("transfer_debt")
754+ let bF = if (ai(aj))
755+ then ae("transfer_debt")
740756 else false
741757 if ((bF == bF))
742758 then {
743- let cR = bn(cQ)
744- let bU = bq(cR)
745- let cS = bt(cO)
759+ let cR = bp(cQ)
760+ let bU = bs(cR)
761+ let cS = bv(cO)
746762 if ((bU > cS))
747763 then throw((((((((((("transferAtokensFor error:" + " transfer.valueUsd: ") + toString(cQ)) + " transfer.assets: ") + toString(cR)) + " transfer.atokens: ") + toString(bU)) + " from.atokens: ") + toString(cS)) + " at ") + toString(this)))
748- else $Tuple2(((be(0, 0, 0, 0) ++ [m(P(cO), -(bU)), m(P(ce), bU)]) ++ bx(ce)), bo(bU))
764+ else $Tuple2(((bd(0, 0, 0, 0) ++ [n(T(cO), -(bU)), n(T(ce), bU)]) ++ bz(ce)), bq(bU))
749765 }
750766 else throw("Strict value is not equal to itself.")
751767 }
752768
753769
754770
755-@Callable(af)
756-func transferDebtFor (cO,ce,aO) = {
757- let bF = if (ae(af))
758- then aa("transfer_debt")
771+@Callable(aj)
772+func transferDebtFor (cO,ce,aN) = {
773+ let bF = if (ai(aj))
774+ then ae("transfer_debt")
759775 else false
760776 if ((bF == bF))
761- then $Tuple2((be(0, 0, 0, 0) ++ [h(R(cO), (aS(cO) - aO)), h(R(ce), (aS(ce) + aO)), h(S(cO), aI), h(S(ce), aI), bv(ce)]), aO)
777+ then $Tuple2((bd(0, 0, 0, 0) ++ [h(V(cO), (aR(cO) - aN)), h(V(ce), (aR(ce) + aN)), h(W(cO), aH), h(W(ce), aH), bx(ce)]), aN)
762778 else throw("Strict value is not equal to itself.")
763779 }
764780
765781
766782
767-@Callable(af)
768-func disableUseAsCollateralFor (bu) = {
769- let bF = if (ae(af))
770- then aa("use_as_col")
783+@Callable(aj)
784+func disableUseAsCollateralFor (bw) = {
785+ let bF = if (ai(aj))
786+ then ae("use_as_col")
771787 else false
772788 if ((bF == bF))
773- then if ((aS(bu) > 0))
789+ then if ((aR(bw) > 0))
774790 then throw("can't disable collateral for asset with open debt")
775- else (be(0, 0, 0, 0) ++ [BooleanEntry(T(bu), false)])
791+ else (bd(0, 0, 0, 0) ++ [BooleanEntry(X(bw), false)])
776792 else throw("Strict value is not equal to itself.")
777793 }
778794
779795
780796
781-@Callable(af)
797+@Callable(aj)
782798 func enableUseAsCollateral () = {
783- let bF = aa("use_as_col")
799+ let bF = ae("use_as_col")
784800 if ((bF == bF))
785- then (be(0, 0, 0, 0) ++ [bv(toString(af.caller))])
801+ then (bd(0, 0, 0, 0) ++ [bx(toString(aj.caller))])
786802 else throw("Strict value is not equal to itself.")
787803 }
788804
789805
790806
791-@Callable(af)
792-func collapseFor (bw) = {
793- let bF = if (ae(af))
794- then aa("force_collapse")
807+@Callable(aj)
808+func collapseFor (by) = {
809+ let bF = if (ai(aj))
810+ then ae("force_collapse")
795811 else false
796812 if ((bF == bF))
797- then by(bw, -1)
813+ then bA(by, -1)
798814 else throw("Strict value is not equal to itself.")
799815 }
800816
801817
802818
803-@Callable(af)
804-func collapseForAmount (bw,aO) = {
805- let bF = if (ae(af))
806- then aa("collapse")
819+@Callable(aj)
820+func collapseForAmount (by,aN) = {
821+ let bF = if (ai(aj))
822+ then ae("collapse")
807823 else false
808824 if ((bF == bF))
809- then by(bw, aO)
825+ then bA(by, aN)
810826 else throw("Strict value is not equal to itself.")
811827 }
812828
813829
814830
815-@Callable(af)
816-func lpValue (bp) = $Tuple2(nil, bo(bp))
831+@Callable(aj)
832+func lpValue (br) = $Tuple2(nil, bq(br))
817833
818834
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func a (b) = getInteger(this, b)
55
66
77 func c (b) = getString(this, b)
88
99
1010 func d (b) = valueOrErrorMessage(getString(this, b), ((("no string value for key " + b) + " at address ") + toString(this)))
1111
1212
1313 func e (f,g) = if (f)
1414 then throw(g)
1515 else true
1616
1717
1818 func h (b,i) = if ((0 > i))
1919 then throw(((("writing negative value " + toString(i)) + " for key ") + b))
2020 else IntegerEntry(b, i)
2121
2222
23-func j (i) = {
24- let k = i
25- if ($isInstanceOf(k, "Int"))
23+func j (i) = if ((0 > i))
24+ then throw("writing negative value")
25+ else i
26+
27+
28+func k (i) = {
29+ let l = i
30+ if ($isInstanceOf(l, "Int"))
2631 then {
27- let l = k
28- l
32+ let m = l
33+ m
2934 }
3035 else throw("r:1")
3136 }
3237
3338
34-func m (b,i) = h(b, (valueOrElse(a(b), 0) + i))
39+func n (b,i) = h(b, (valueOrElse(a(b), 0) + i))
3540
3641
37-func n (b,i) = StringEntry(b, i)
42+func o (b,i) = StringEntry(b, i)
3843
3944
40-func o (i,p,q) = {
41- let r = fraction(i, p, q)
42- let s = 3037000499
43- let t = ((((r % s) * (q % s)) % s) == (((i % s) * (p % s)) % s))
44- if (t)
45- then r
46- else (r + 1)
45+func p (i,q,r) = {
46+ let s = fraction(i, q, r)
47+ let t = 3037000499
48+ let u = ((((s % t) * (r % t)) % t) == (((i % t) * (q % t)) % t))
49+ if (u)
50+ then s
51+ else (s + 1)
4752 }
4853
4954
50-let u = 525600
55+let v = 525600
5156
52-let v = 10000000000000000
57+let w = 10000000000000000
5358
54-let w = 1000
59+let x = 1000
5560
56-let x = "assetId"
61+let y = "assetId"
5762
58-let y = valueOrErrorMessage(c(x), "no assetId")
63+let z = valueOrErrorMessage(c(y), "no assetId")
5964
60-let z = if ((y == "WAVES"))
65+let A = if ((z == "WAVES"))
6166 then unit
62- else fromBase58String(y)
67+ else fromBase58String(z)
6368
64-let A = (y + "_ReserveFactor")
69+let B = (z + "_ReserveFactor")
6570
66-let B = (y + "_CollateralFactor")
71+let C = (z + "_CollateralFactor")
6772
68-let C = (y + "_LiquidationThreshold")
73+let D = (z + "_LiquidationThreshold")
6974
70-let D = "account_health_overlap"
75+let E = "account_health_overlap"
7176
72-let E = (y + "_LiquidationPenalty")
77+let F = (z + "_LiquidationPenalty")
7378
74-let F = "configAddress"
79+let G = "configAddress"
7580
76-let G = "aTokenId"
81+let H = "aTokenId"
7782
78-let H = "aTokenName"
83+let I = "aTokenName"
7984
80-let I = "aTokenCirculation"
85+let J = "aTokenCirculation"
8186
82-let J = "lastUpdateHeight"
87+let K = "aTokenDecimals"
8388
84-let K = "totalBorrow"
89+let L = "reserveGlobalData"
8590
86-let L = "totalDeposit"
91+let M = valueOrElse(getString(L), "||||")
8792
88-let M = "totalReserve"
93+let N = split(M, "|")
8994
90-let N = "storedIndex"
95+let O = valueOrErrorMessage(valueOrElse(parseInt(N[0]), a("lastUpdateHeight")), "no lastUpdateHeight")
9196
92-let O = "aTokenDecimals"
97+let P = valueOrElse(parseInt(N[1]), valueOrElse(a("totalDeposit"), 0))
9398
94-func P (Q) = (Q + "_aTokenBalance")
99+let Q = valueOrElse(parseInt(N[2]), valueOrElse(a("totalBorrow"), 0))
100+
101+let R = valueOrElse(parseInt(N[3]), valueOrElse(a("totalReserve"), 0))
102+
103+let S = valueOrElse(parseInt(N[4]), valueOrElse(a("storedIndex"), w))
104+
105+func T (U) = (U + "_aTokenBalance")
95106
96107
97-func R (Q) = (Q + "_debt")
108+func V (U) = (U + "_debt")
98109
99110
100-func S (Q) = (Q + "_index")
111+func W (U) = (U + "_index")
101112
102113
103-func T (Q) = (Q + "_useAsCollateral")
114+func X (U) = (U + "_useAsCollateral")
104115
105116
106-func U (V,z) = {
107- let k = z
108- if ($isInstanceOf(k, "ByteVector"))
117+func Y (Z,A) = {
118+ let l = A
119+ if ($isInstanceOf(l, "ByteVector"))
109120 then {
110- let W = k
111- assetBalance(V, W)
121+ let aa = l
122+ assetBalance(Z, aa)
112123 }
113- else if ($isInstanceOf(k, "Unit"))
124+ else if ($isInstanceOf(l, "Unit"))
114125 then {
115- let X = k
116- wavesBalance(V).available
126+ let ab = l
127+ wavesBalance(Z).available
117128 }
118129 else throw("Match error")
119130 }
120131
121132
122-let Y = valueOrErrorMessage(a(O), "no assetDecimals")
133+let ac = valueOrErrorMessage(a(K), "no assetDecimals")
123134
124-let Z = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, F), "reserve: no configAddress")), "invalid config address")
135+let ad = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, G), "reserve: no configAddress")), "invalid config address")
125136
126-func aa (ab) = {
127- let k = invoke(Z, "opAllowed", [y, ab], nil)
128- if ($isInstanceOf(k, "Boolean"))
137+func ae (af) = {
138+ let l = invoke(ad, "opAllowed", [z, af], nil)
139+ if ($isInstanceOf(l, "Boolean"))
129140 then {
130- let ac = k
131- if (ac)
141+ let ag = l
142+ if (ag)
132143 then true
133144 else throw("not allowed")
134145 }
135146 else throw("opAllowed: unexpected result type")
136147 }
137148
138149
139-let ad = valueOrErrorMessage(addressFromString(split(valueOrErrorMessage(getString(Z, "main"), "no main in config"), "|")[0]), "invalid main address")
150+let ah = valueOrErrorMessage(addressFromString(split(valueOrErrorMessage(getString(ad, "main"), "no main in config"), "|")[0]), "invalid main address")
140151
141-func ae (af) = if (contains(getStringValue(Z, "main"), toString(af.caller)))
152+func ai (aj) = if (contains(getStringValue(ad, "main"), toString(aj.caller)))
142153 then true
143154 else throw("only main can do")
144155
145156
146-func ag (af) = {
147- let ah = valueOrErrorMessage(getString(Z, "divAdmins"), "no div admins")
148- if (!(contains(ah, toString(af.caller))))
157+func ak (aj) = {
158+ let al = valueOrErrorMessage(getString(ad, "divAdmins"), "no div admins")
159+ if (!(contains(al, toString(aj.caller))))
149160 then throw("only div admin can do")
150161 else true
151162 }
152163
153164
154-func ai (i) = if (if ((i != "WAVES"))
165+func am (i) = if (if ((i != "WAVES"))
155166 then (fromBase58String(i) == fromBase58String(""))
156167 else false)
157168 then throw("invalid assetId")
158169 else true
159170
160171
161-let aj = e(isDefined(c(x)), "already initialized")
172+let an = e(isDefined(c(y)), "already initialized")
162173
163-let ak = {
164- let k = getString(Z, "oracle_address")
165- if ($isInstanceOf(k, "String"))
174+let ao = {
175+ let l = getString(ad, "oracle_address")
176+ if ($isInstanceOf(l, "String"))
166177 then {
167- let al = k
168- addressFromString(al)
178+ let ap = l
179+ addressFromString(ap)
169180 }
170181 else unit
171182 }
172183
173-let am = {
174- let k = invoke(valueOrErrorMessage(ak, "no oracle"), "price", [y], nil)
175- if ($isInstanceOf(k, "Int"))
184+let aq = {
185+ let l = invoke(valueOrErrorMessage(ao, "no oracle"), "price", [z], nil)
186+ if ($isInstanceOf(l, "Int"))
176187 then {
177- let af = k
178- af
188+ let aj = l
189+ aj
179190 }
180191 else throw("bad oracle data")
181192 }
182193
183-let an = height
194+let ar = height
184195
185-let ao = valueOrErrorMessage(a(J), "no lastUpdateHeight")
196+let as = fromBase58String(valueOrErrorMessage(c(H), "no aTokenId"))
186197
187-let ap = fromBase58String(valueOrErrorMessage(c(G), "no aTokenId"))
198+let at = valueOrElse(a(J), 0)
188199
189-let aq = valueOrElse(a(I), 0)
200+let au = valueOrErrorMessage(getInteger(ad, B), "no reserveFactor")
190201
191-let ar = valueOrErrorMessage(getInteger(Z, A), "no reserveFactor")
202+let av = valueOrErrorMessage(getInteger(ad, C), "no collateralFactor")
192203
193-let as = valueOrErrorMessage(getInteger(Z, B), "no collateralFactor")
204+let aw = valueOrErrorMessage(getInteger(ad, D), "no liquidationThreshold")
194205
195-let at = valueOrErrorMessage(getInteger(Z, C), "no liquidationThreshold")
206+let ax = valueOrErrorMessage(getInteger(ad, E), "no overlapCharge")
196207
197-let au = valueOrErrorMessage(getInteger(Z, D), "no overlapCharge")
208+let ay = valueOrErrorMessage(getInteger(ad, F), "no liquidationPenalty")
198209
199-let av = valueOrErrorMessage(getInteger(Z, E), "no liquidationPenalty")
200-
201-let aw = valueOrElse(a(L), 0)
202-
203-let ax = valueOrElse(a(M), 0)
204-
205-let ay = valueOrElse(a(K), 0)
206-
207-let az = valueOrElse(a(N), v)
208-
209-let aA = if ((aw > 0))
210- then min([w, fraction(ay, w, aw)])
210+let az = if ((P > 0))
211+ then min([x, fraction(Q, x, P)])
211212 else 0
212213
213-let aB = {
214- let aC = getIntegerValue(Z, (y + "_APoint"))
215- let ac = getIntegerValue(Z, (y + "_BPoint"))
216- let aD = getIntegerValue(Z, (y + "_CPoint"))
217- let aE = getIntegerValue(Z, (y + "_DPoint"))
218- let aF = (fraction((aC - aD), aA, -(ac)) + aC)
219- let aG = (fraction((aD - aE), (aA - ac), (ac - w)) + aD)
220- if ((aA == 0))
221- then aC
222- else if ((aA == ac))
223- then aD
224- else if (if ((ac > aA))
214+let aA = {
215+ let aB = getIntegerValue(ad, (z + "_APoint"))
216+ let ag = getIntegerValue(ad, (z + "_BPoint"))
217+ let aC = getIntegerValue(ad, (z + "_CPoint"))
218+ let aD = getIntegerValue(ad, (z + "_DPoint"))
219+ let aE = (fraction((aB - aC), az, -(ag)) + aB)
220+ let aF = (fraction((aC - aD), (az - ag), (ag - x)) + aC)
221+ if ((az == 0))
222+ then aB
223+ else if ((az == ag))
224+ then aC
225+ else if (if ((ag > az))
225226 then true
226- else (ac == w))
227- then aF
228- else aG
227+ else (ag == x))
228+ then aE
229+ else aF
229230 }
230231
231-let aH = if ((aw == 0))
232+let aG = if ((P == 0))
232233 then 0
233- else fraction(fraction(ay, aB, aw), (w - ar), w)
234+ else fraction(fraction(Q, aA, P), (x - au), x)
234235
235-let aI = if ((an == ao))
236- then az
236+let aH = if ((ar == O))
237+ then S
237238 else {
238- let aJ = o(aB, v, (u * w))
239- o(az, (v + (aJ * (an - ao))), v)
239+ let aI = p(aA, w, (v * x))
240+ p(S, (w + (aI * (ar - O))), w)
240241 }
241242
242-let aK = valueOrElse(getBoolean(Z, ("staking_enabled_" + y)), false)
243+let aJ = valueOrElse(getBoolean(ad, ("staking_enabled_" + z)), false)
243244
244-let aL = {
245- let k = z
246- if ($isInstanceOf(k, "ByteVector"))
245+let aK = {
246+ let l = A
247+ if ($isInstanceOf(l, "ByteVector"))
247248 then {
248- let aM = k
249- assetBalance(this, aM)
249+ let aL = l
250+ assetBalance(this, aL)
250251 }
251252 else wavesBalance(this).available
252253 }
253254
254-func aN (aO,aP,aQ) = if ((aO > aP))
255- then throw(("not enough liquidity: " + aQ))
255+func aM (aN,aO,aP) = if ((aN > aO))
256+ then throw(("not enough liquidity: " + aP))
256257 else true
257258
258259
259-func aR (Q) = valueOrElse(a(R(Q)), 0)
260+func aQ (U) = valueOrElse(a(V(U)), 0)
260261
261262
262-func aS (Q) = {
263- let aT = aR(Q)
264- if ((aT == 0))
263+func aR (U) = {
264+ let aS = aQ(U)
265+ if ((aS == 0))
265266 then 0
266267 else {
267- let aU = valueOrErrorMessage(a(S(Q)), "has debt but does not have index")
268- fraction(aT, aI, aU)
268+ let aT = valueOrErrorMessage(a(W(U)), "has debt but does not have index")
269+ fraction(aS, aH, aT)
269270 }
270271 }
271272
272273
273-let aV = fraction(ay, aI, az)
274+let aU = fraction(Q, aH, S)
274275
275-let aW = (aV - ay)
276+let aV = (aU - Q)
276277
277-let aX = fraction(aW, (w - ar), w)
278+let aW = fraction(aV, (x - au), x)
278279
279-let aY = (aw + aX)
280+let aX = (P + aW)
280281
281-let aZ = ((ax + aW) - aX)
282+let aY = ((R + aV) - aW)
282283
283-let ba = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(Z, ("staking_config_" + y)), ("no staking address for " + y))), ("bad staking address for " + y))
284+let aZ = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(ad, ("staking_config_" + z)), ("no staking address for " + z))), ("bad staking address for " + z))
284285
285-let bb = min([aZ, if (aK)
286- then j(invoke(ba, "info", nil, nil))
287- else aL])
286+let ba = min([aY, if (aJ)
287+ then k(invoke(aZ, "info", nil, nil))
288+ else aK])
288289
289-func bc (af,z) = {
290- let bd = af.payments[0].amount
291- if ((0 >= bd))
292- then throw(("Payment is less than min allowed amount: " + toString(bd)))
293- else if ((af.payments[0].assetId != z))
294- then throw((" bad asset attached: required " + y))
295- else bd
290+func bb (aj,A) = {
291+ let bc = aj.payments[0].amount
292+ if ((0 >= bc))
293+ then throw(("Payment is less than min allowed amount: " + toString(bc)))
294+ else if ((aj.payments[0].assetId != A))
295+ then throw((" bad asset attached: required " + z))
296+ else bc
296297 }
297298
298299
299-func be (bf,bg,bh,bi) = {
300- let bj = if ((aL == bi))
300+func bd (be,bf,bg,bh) = {
301+ let bi = if ((aK == bh))
301302 then unit
302- else if (!(aK))
303+ else if (!(aJ))
303304 then unit
304- else if ((aL > bi))
305- then invoke(ba, "put", nil, [AttachedPayment(z, (aL - bi))])
306- else invoke(ba, "get", [(bi - aL)], nil)
307- if ((bj == bj))
308- then [h(N, aI), h(J, an), h(L, (aY + bf)), h(K, (aV + bg)), h(M, (aZ + bh))]
305+ else if ((aK > bh))
306+ then invoke(aZ, "put", nil, [AttachedPayment(A, (aK - bh))])
307+ else invoke(aZ, "get", [(bh - aK)], nil)
308+ if ((bi == bi))
309+ then {
310+ let bj = j((aX + be))
311+ let bk = j((aU + bf))
312+ let bl = j((aY + bg))
313+[o(L, ((((((((toString(ar) + "|") + toString(bj)) + "|") + toString(bk)) + "|") + toString(bl)) + "|") + toString(aH)))]
314+ }
309315 else throw("Strict value is not equal to itself.")
310316 }
311317
312318
313-func bk (bl) = if ((bl == 6))
319+func bm (bn) = if ((bn == 6))
314320 then 1000000
315- else if ((bl == 8))
321+ else if ((bn == 8))
316322 then 100000000
317- else throw(("bad decimals: " + toString(bl)))
323+ else throw(("bad decimals: " + toString(bn)))
318324
319325
320-func bm (aO) = fraction(aO, am, bk(Y))
326+func bo (aN) = fraction(aN, aq, bm(ac))
321327
322328
323-func bn (aO) = fraction(aO, bk(Y), am)
324-
325-
326-func bo (bp) = if ((bp == 0))
327- then 0
328- else if ((aq > 0))
329- then fraction(bp, aY, aq)
330- else bp
329+func bp (aN) = fraction(aN, bm(ac), aq)
331330
332331
333332 func bq (br) = if ((br == 0))
334333 then 0
335- else if ((aq > 0))
336- then fraction(br, aq, aY)
334+ else if ((at > 0))
335+ then fraction(br, aX, at)
337336 else br
338337
339338
340-func bs (br) = if ((br == 0))
339+func bs (bt) = if ((bt == 0))
341340 then 0
342- else if ((aq > 0))
343- then o(br, aq, aY)
344- else br
341+ else if ((at > 0))
342+ then fraction(bt, at, aX)
343+ else bt
345344
346345
347-func bt (bu) = valueOrElse(a(P(bu)), 0)
346+func bu (bt) = if ((bt == 0))
347+ then 0
348+ else if ((at > 0))
349+ then p(bt, at, aX)
350+ else bt
348351
349352
350-func bv (bw) = BooleanEntry(T(bw), true)
353+func bv (bw) = valueOrElse(a(T(bw)), 0)
351354
352355
353-func bx (bw) = if ((aS(bw) > 0))
354- then [bv(bw)]
356+func bx (by) = BooleanEntry(X(by), true)
357+
358+
359+func bz (by) = if ((aR(by) > 0))
360+ then [bx(by)]
355361 else nil
356362
357363
358-func by (bu,aO) = {
359- let bz = aS(bu)
360- let bA = bo(bt(bu))
361- let bB = min([bz, bA])
362- let bC = if ((-1 > aO))
364+func bA (bw,aN) = {
365+ let bk = aR(bw)
366+ let bj = bq(bv(bw))
367+ let bB = min([bk, bj])
368+ let bC = if ((-1 > aN))
363369 then throw("invalid collapse amount")
364370 else if (if ((bB == 0))
365371 then true
366- else (aO == 0))
372+ else (aN == 0))
367373 then throw("nothing to collapse")
368- else if (if ((aO == -1))
374+ else if (if ((aN == -1))
369375 then true
370- else (aO > bB))
376+ else (aN > bB))
371377 then bB
372- else aO
373- let bD = bs(bC)
374- $Tuple2((be(-(bC), -(bC), 0, 0) ++ [m(P(bu), -(bD)), m(I, -(bD)), h(R(bu), (bz - bC)), h(S(bu), aI)]), bC)
378+ else aN
379+ let bD = bu(bC)
380+ $Tuple2((bd(-(bC), -(bC), 0, 0) ++ [n(T(bw), -(bD)), n(J, -(bD)), h(V(bw), (bk - bC)), h(W(bw), aH)]), bC)
375381 }
376382
377383
378-func bE (Q,aO) = {
379- let bF = aa("repay")
384+func bE (U,aN) = {
385+ let bF = ae("repay")
380386 if ((bF == bF))
381387 then {
382- let bG = aS(Q)
388+ let bG = aR(U)
383389 if ((bG == bG))
384390 then {
385- let bH = if ((aO > bG))
386- then $Tuple4(0, -(bG), (aO - bG), [ScriptTransfer(addressFromStringValue(Q), (aO - bG), z)])
387- else $Tuple4((bG - aO), -(aO), 0, nil)
391+ let bH = if ((aN > bG))
392+ then $Tuple4(0, -(bG), (aN - bG), [ScriptTransfer(addressFromStringValue(U), (aN - bG), A)])
393+ else $Tuple4((bG - aN), -(aN), 0, nil)
388394 let bI = bH._1
389395 let bJ = bH._2
390396 let bK = bH._3
391397 let bL = bH._4
392- let bM = (aO - bK)
393- $Tuple2(((be(0, bJ, 0, bK) ++ bL) ++ [h(R(Q), bI), h(S(Q), aI)]), bM)
398+ let bM = (aN - bK)
399+ $Tuple2(((bd(0, bJ, 0, bK) ++ bL) ++ [h(V(U), bI), h(W(U), aH)]), bM)
394400 }
395401 else throw("Strict value is not equal to itself.")
396402 }
397403 else throw("Strict value is not equal to itself.")
398404 }
399405
400406
401407 func bN () = {
402- let aC = getIntegerValue(Z, (y + "_APoint"))
403- let ac = getIntegerValue(Z, (y + "_BPoint"))
404- let aD = getIntegerValue(Z, (y + "_CPoint"))
405- let aE = getIntegerValue(Z, (y + "_DPoint"))
406- ((((((((((((((("ABCD: " + toString(aC)) + ";") + toString(ac)) + ";") + toString(aD)) + ";") + toString(aE)) + ", reserveFactor: ") + toString(ar)) + ", collateralFactor: ") + toString(as)) + ", liquidationThreshold: ") + toString(at)) + ", liquidationPenalty: ") + toString(av))
408+ let aB = getIntegerValue(ad, (z + "_APoint"))
409+ let ag = getIntegerValue(ad, (z + "_BPoint"))
410+ let aC = getIntegerValue(ad, (z + "_CPoint"))
411+ let aD = getIntegerValue(ad, (z + "_DPoint"))
412+ ((((((((((((((("ABCD: " + toString(aB)) + ";") + toString(ag)) + ";") + toString(aC)) + ";") + toString(aD)) + ", reserveFactor: ") + toString(au)) + ", collateralFactor: ") + toString(av)) + ", liquidationThreshold: ") + toString(aw)) + ", liquidationPenalty: ") + toString(ay))
407413 }
408414
409415
410-func bO () = ((((((((((((((((((((((((((("currentTotalDeposit: " + toString(aY)) + ", storedTotalDeposit: ") + toString(aw)) + ", currentTotalDebt: ") + toString(aV)) + ", storedTotalDebt: ") + toString(ay)) + ", currentTotalReserve: ") + toString(aZ)) + ", storedTotalReserve: ") + toString(ax)) + ", currentIndex:") + toString(aI)) + ", storedIndex: ") + toString(az)) + ", lastUpdateHeight: ") + toString(ao)) + ", utilization: ") + toString(aA)) + ", aTokenCirculation: ") + toString(aq)) + ", aTokenPrice: ") + toString(bo(pow(10, 0, Y, 0, 0, FLOOR)))) + ", APR: ") + toString(aB)) + ", APY: ") + toString(aH))
416+func bO () = ((((((((((((((((((((((((((("currentTotalDeposit: " + toString(aX)) + ", storedTotalDeposit: ") + toString(P)) + ", currentTotalDebt: ") + toString(aU)) + ", storedTotalDebt: ") + toString(Q)) + ", currentTotalReserve: ") + toString(aY)) + ", storedTotalReserve: ") + toString(R)) + ", currentIndex:") + toString(aH)) + ", storedIndex: ") + toString(S)) + ", lastUpdateHeight: ") + toString(O)) + ", utilization: ") + toString(az)) + ", aTokenCirculation: ") + toString(at)) + ", aTokenPrice: ") + toString(bq(pow(10, 0, ac, 0, 0, FLOOR)))) + ", APR: ") + toString(aA)) + ", APY: ") + toString(aG))
411417
412418
413-func bP (bw) = {
414- let bQ = bt(bw)
415- let bR = U(addressFromStringValue(bw), ap)
416- ((((((((((((((((("currentDebt: " + toString(aS(bw))) + ", storedDebt: ") + toString(valueOrElse(a(R(bw)), 0))) + ", currentDeposit: ") + toString(bo(bQ))) + ", aTokenContractBalance: ") + toString(bQ)) + ", aTokenWalletBalance: ") + toString(bR)) + ", walletStake: ") + toString(bo(bR))) + ", assetWalletBalance: ") + toString(U(addressFromStringValue(bw), z))) + ", useAsCollateral: ") + toString(valueOrElse(getBoolean(this, T(bw)), true))) + ", storedIndex: ") + toString(valueOrElse(a(S(bw)), 0)))
419+func bP (by) = {
420+ let bQ = bv(by)
421+ let bR = Y(addressFromStringValue(by), as)
422+ ((((((((((((((((("currentDebt: " + toString(aR(by))) + ", storedDebt: ") + toString(valueOrElse(a(V(by)), 0))) + ", currentDeposit: ") + toString(bq(bQ))) + ", aTokenContractBalance: ") + toString(bQ)) + ", aTokenWalletBalance: ") + toString(bR)) + ", walletStake: ") + toString(bq(bR))) + ", assetWalletBalance: ") + toString(Y(addressFromStringValue(by), A))) + ", useAsCollateral: ") + toString(valueOrElse(getBoolean(this, X(by)), true))) + ", storedIndex: ") + toString(valueOrElse(a(W(by)), 0)))
417423 }
418424
419425
420-func bS () = ((((((((((((((((((((((("storedTotalDeposit: " + toString(aw)) + ", storedTotalDebt: ") + toString(ay)) + ", storedTotalReserve: ") + toString(ax)) + ", storedIndex: ") + toString(az)) + ", lastUpdateHeight: ") + toString(ao)) + ", currentTotalDeposit: ") + toString(aY)) + ", currentTotalDebt: ") + toString(aV)) + ", currentTotalReserve: ") + toString(aZ)) + ", currentIndex: ") + toString(aI)) + ", currentHeight: ") + toString(an)) + ", aTokenCirculation: ") + toString(aq)) + ", aTokenPrice: ") + toString(bo(pow(10, 0, Y, 0, 0, FLOOR))))
426+func bS () = ((((((((((((((((((((((("storedTotalDeposit: " + toString(P)) + ", storedTotalDebt: ") + toString(Q)) + ", storedTotalReserve: ") + toString(R)) + ", storedIndex: ") + toString(S)) + ", lastUpdateHeight: ") + toString(O)) + ", currentTotalDeposit: ") + toString(aX)) + ", currentTotalDebt: ") + toString(aU)) + ", currentTotalReserve: ") + toString(aY)) + ", currentIndex: ") + toString(aH)) + ", currentHeight: ") + toString(ar)) + ", aTokenCirculation: ") + toString(at)) + ", aTokenPrice: ") + toString(bq(pow(10, 0, ac, 0, 0, FLOOR))))
421427
422428
423-func bT (bw) = {
424- let bU = bt(bw)
425- let bV = bo(bU)
426- let bz = aS(bw)
427- if ((an == ao))
428- then $Tuple4(aw, ay, bV, bz)
429- else $Tuple4(aY, aV, bV, bz)
429+func bT (by) = {
430+ let bU = bv(by)
431+ let bV = bq(bU)
432+ let bk = aR(by)
433+ if ((ar == O))
434+ then $Tuple4(P, Q, bV, bk)
435+ else $Tuple4(aX, aU, bV, bk)
430436 }
431437
432438
433-func bW (af,bw,aO,bX) = {
434- let bY = ((aw + ax) - ay)
435- let bF = if (if (if (ae(af))
436- then aN(aO, bY, ("funds in use: max=" + toString(bY)))
439+func bW (aj,by,aN,bX) = {
440+ let bY = ((P + R) - Q)
441+ let bF = if (if (if (ai(aj))
442+ then aM(aN, bY, ("funds in use: max=" + toString(bY)))
437443 else false)
438- then e((-1 > aO), "invalid amount")
444+ then e((-1 > aN), "invalid amount")
439445 else false)
440- then aa("withdraw")
446+ then ae("withdraw")
441447 else false
442448 if ((bF == bF))
443449 then {
444- let bZ = if ((aO == -1))
450+ let bZ = if ((aN == -1))
445451 then {
446- let bU = bt(bw)
447- $Tuple2(bU, bo(bU))
452+ let bU = bv(by)
453+ $Tuple2(bU, bq(bU))
448454 }
449- else $Tuple2(bs(aO), aO)
455+ else $Tuple2(bu(aN), aN)
450456 let bD = bZ._1
451457 let ca = bZ._2
452- $Tuple2((be(-(ca), 0, 0, ca) ++ [ScriptTransfer(if (bX)
453- then ad
454- else addressFromStringValue(bw), ca, z), m(P(bw), -(bD)), m(I, -(bD))]), ca)
458+ $Tuple2((bd(-(ca), 0, 0, ca) ++ [ScriptTransfer(if (bX)
459+ then ah
460+ else addressFromStringValue(by), ca, A), n(T(by), -(bD)), n(J, -(bD))]), ca)
455461 }
456462 else throw("Strict value is not equal to itself.")
457463 }
458464
459465
460-func cb (ab,bw,af) = {
461- let bF = if (ae(af))
462- then aa(ab)
466+func cb (af,by,aj) = {
467+ let bF = if (ai(aj))
468+ then ae(af)
463469 else false
464470 if ((bF == bF))
465471 then {
466- let bp = bc(af, ap)
467- $Tuple2(((be(0, 0, 0, 0) ++ [m(P(bw), bp), Burn(ap, bp)]) ++ bx(bw)), bo(bp))
472+ let br = bb(aj, as)
473+ $Tuple2(((bd(0, 0, 0, 0) ++ [n(T(by), br), Burn(as, br)]) ++ bz(by)), bq(br))
468474 }
469475 else throw("Strict value is not equal to itself.")
470476 }
471477
472478
473-func cc (af,bu,cd,ce,cf) = {
474- let cg = bt(bu)
475- let aO = if ((cd == -1))
479+func cc (aj,bw,cd,ce,cf) = {
480+ let cg = bv(bw)
481+ let aN = if ((cd == -1))
476482 then cg
477483 else cd
478- let bF = if (if (if (ae(af))
479- then aa(cf)
484+ let bF = if (if (if (ai(aj))
485+ then ae(cf)
480486 else false)
481487 then e((-1 > cd), "invalid amountToMint")
482488 else false)
483- then e((aO > cg), ("Trying to mint more than available, max: " + toString(cg)))
489+ then e((aN > cg), ("Trying to mint more than available, max: " + toString(cg)))
484490 else false
485491 if ((bF == bF))
486- then $Tuple2((be(0, 0, 0, 0) ++ [m(P(bu), -(aO)), Reissue(ap, aO, true), ScriptTransfer(addressFromStringValue(ce), aO, ap)]), bo(aO))
492+ then $Tuple2((bd(0, 0, 0, 0) ++ [n(T(bw), -(aN)), Reissue(as, aN, true), ScriptTransfer(addressFromStringValue(ce), aN, as)]), bq(aN))
487493 else throw("Strict value is not equal to itself.")
488494 }
489495
490496
491-@Callable(af)
492-func getReserveDivsInfo () = $Tuple2(nil, $Tuple3(bb, y, (aZ - bb)))
497+@Callable(aj)
498+func getReserveDivsInfo () = $Tuple2(nil, $Tuple3(ba, z, (aY - ba)))
493499
494500
495501
496-@Callable(af)
497-func getCurrentTotals (bw) = $Tuple2(nil, bT(bw))
502+@Callable(aj)
503+func storedDepositBorrow () = $Tuple2(nil, $Tuple2(P, Q))
498504
499505
500506
501-@Callable(af)
507+@Callable(aj)
508+func getCurrentTotals (by) = $Tuple2(nil, bT(by))
509+
510+
511+
512+@Callable(aj)
502513 func getCurrentTotals2 (ch,ci) = {
503514 let cj = bT(ch)
504515 let ck = cj._1
505516 let cl = cj._2
506517 let cm = cj._3
507518 let cn = cj._4
508519 let co = bT(ci)
509520 let cp = co._1
510521 let cq = co._2
511522 let cr = co._3
512523 let cs = co._4
513524 $Tuple2(nil, $Tuple6(ck, cl, cm, cn, cr, cs))
514525 }
515526
516527
517528
518-@Callable(af)
529+@Callable(aj)
519530 func advise () = $Tuple2(nil, ((((("reserveAddress: " + toString(this)) + ", ") + bN()) + ", ") + bO()))
520531
521532
522533
523-@Callable(af)
524-func adviseUser (bw) = {
525- let ct = bm(aV)
526- let cu = bm(aY)
527- let cv = valueOrElse(getBoolean(this, T(bw)), true)
534+@Callable(aj)
535+func adviseUser (by) = {
536+ let ct = bo(aU)
537+ let cu = bo(aX)
538+ let cv = valueOrElse(getBoolean(this, X(by)), true)
528539 let cw = if (cv)
529540 then cu
530541 else 0
531542 let cx = min([ct, cw])
532- let cy = o(cx, au, w)
543+ let cy = p(cx, ax, x)
533544 let cz = if ((ct > cw))
534545 then 0
535- else fraction((cw - ct), as, w)
546+ else fraction((cw - ct), av, x)
536547 let cA = if ((ct > cw))
537- then (fraction((ct - cw), w, at) + cy)
548+ then (fraction((ct - cw), x, aw) + cy)
538549 else cy
539550 let cB = ((((((((("reserveAddress: " + toString(this)) + ", currentDebtUsd: ") + toString(ct)) + ", currentDepositUsd: ") + toString(cu)) + ", bp: ") + toString(cz)) + ", bpu: ") + toString(cA))
540- $Tuple2(nil, ((cB + ", ") + bP(bw)))
551+ $Tuple2(nil, ((cB + ", ") + bP(by)))
541552 }
542553
543554
544555
545-@Callable(af)
546-func addInterest () = if ((af.payments[0].assetId != z))
556+@Callable(aj)
557+func addInterest () = if ((aj.payments[0].assetId != A))
547558 then throw("can't add interest with unrelated token")
548- else be(af.payments[0].amount, 0, 0, 0)
559+ else bd(aj.payments[0].amount, 0, 0, 0)
549560
550561
551562
552-@Callable(af)
553-func addToReserve () = if ((af.payments[0].assetId != z))
563+@Callable(aj)
564+func addToReserve () = if ((aj.payments[0].assetId != A))
554565 then throw("can't add interest with unrelated token")
555- else be(0, 0, af.payments[0].amount, 0)
566+ else bd(0, 0, aj.payments[0].amount, 0)
556567
557568
558569
559-@Callable(af)
570+@Callable(aj)
560571 func withdrawFromReserve (bC) = {
561- let bF = ag(af)
572+ let bF = ak(aj)
562573 if ((bF == bF))
563574 then {
564575 let cC = if ((bC == -1))
565- then bb
576+ then ba
566577 else bC
567- $Tuple2((be(0, 0, -(cC), cC) ++ [ScriptTransfer(af.caller, cC, z)]), cC)
578+ $Tuple2((bd(0, 0, -(cC), cC) ++ [ScriptTransfer(aj.caller, cC, A)]), cC)
568579 }
569580 else throw("Strict value is not equal to itself.")
570581 }
571582
572583
573584
574-@Callable(af)
585+@Callable(aj)
575586 func forceUpdate () = {
576- let cD = valueOrErrorMessage(getString(Z, "admin"), "reserve:no admin in config")
577- if ((toString(af.caller) != cD))
587+ let cD = valueOrErrorMessage(getString(ad, "admin"), "reserve:no admin in config")
588+ if ((toString(aj.caller) != cD))
578589 then throw("only admin can do")
579- else be(0, 0, 0, 0)
590+ else bd(0, 0, 0, 0)
580591 }
581592
582593
583594
584-@Callable(af)
595+@Callable(aj)
585596 func initialize (cE,cF,cG,cH,cI) = {
586- let bF = if (aj)
587- then ai(cF)
597+ let bF = if (an)
598+ then am(cF)
588599 else false
589600 if ((bF == bF))
590601 then {
591602 let cJ = Issue(cG, cH, 0, cI, true)
592-[cJ, h(O, cI), n(H, cG), n(x, cF), n(F, cE), n(G, toBase58String(calculateAssetId(cJ)))]
603+[cJ, h(K, cI), o(I, cG), o(y, cF), o(G, cE), o(H, toBase58String(calculateAssetId(cJ)))]
593604 }
594605 else throw("Strict value is not equal to itself.")
595606 }
596607
597608
598609
599-@Callable(af)
600-func initialize2 () = if ((af.caller != this))
610+@Callable(aj)
611+func initialize2 () = if ((aj.caller != this))
601612 then throw("only self can continue")
602- else [h(J, an)]
613+ else [StringEntry(L, (toString(ar) + "||||"))]
603614
604615
605616
606-@Callable(af)
607-func userDepositUSD (bu) = $Tuple2(nil, bm(bo(bt(bu))))
617+@Callable(aj)
618+func userDepositUSD (bw) = $Tuple2(nil, bo(bq(bv(bw))))
608619
609620
610621
611-@Callable(af)
612-func userDebtUSD (bu) = $Tuple2(nil, bm(aS(bu)))
622+@Callable(aj)
623+func userDebtUSD (bw) = $Tuple2(nil, bo(aR(bw)))
613624
614625
615626
616-@Callable(af)
617-func userBalance (bu) = {
618- let bU = bt(bu)
619- let bV = bo(bU)
620- let bz = aS(bu)
621- $Tuple2(nil, $Tuple6(bU, bV, bm(bV), bz, bm(bz), valueOrElse(getBoolean(this, T(bu)), true)))
627+@Callable(aj)
628+func userBalance (bw) = {
629+ let bU = bv(bw)
630+ let bV = bq(bU)
631+ let bk = aR(bw)
632+ $Tuple2(nil, $Tuple6(bU, bV, bo(bV), bk, bo(bk), valueOrElse(getBoolean(this, X(bw)), true)))
622633 }
623634
624635
625636
626-@Callable(af)
627-func userDebt (bu) = {
628- let bz = aS(bu)
629- let cK = bm(bz)
630- $Tuple2(nil, $Tuple2(bz, cK))
637+@Callable(aj)
638+func userDebt (bw) = {
639+ let bk = aR(bw)
640+ let cK = bo(bk)
641+ $Tuple2(nil, $Tuple2(bk, cK))
631642 }
632643
633644
634645
635-@Callable(af)
636-func assetUsdValue (br) = $Tuple2(nil, bm(br))
646+@Callable(aj)
647+func assetUsdValue (bt) = $Tuple2(nil, bo(bt))
637648
638649
639650
640-@Callable(af)
641-func repayFor (Q) = {
642- let bF = ae(af)
651+@Callable(aj)
652+func repayFor (U) = {
653+ let bF = ai(aj)
643654 if ((bF == bF))
644- then bE(Q, bc(af, z))
655+ then bE(U, bb(aj, A))
645656 else throw("Strict value is not equal to itself.")
646657 }
647658
648659
649660
650-@Callable(af)
661+@Callable(aj)
651662 func depositFor (cL,cM) = {
652- let bF = if (ae(af))
653- then aa("deposit")
663+ let bF = if (ai(aj))
664+ then ae("deposit")
654665 else false
655666 if ((bF == bF))
656- then if (if ((aS(cL) > 0))
667+ then if (if ((aR(cL) > 0))
657668 then !(cM)
658669 else false)
659670 then throw("can't disable use as collateral for asset with open debt")
660671 else {
661- let aO = bc(af, z)
662- let bp = bq(aO)
663- (be(aO, 0, 0, 0) ++ [m(I, bp), m(P(cL), bp), BooleanEntry(T(cL), cM)])
672+ let aN = bb(aj, A)
673+ let br = bs(aN)
674+ (bd(aN, 0, 0, 0) ++ [n(J, br), n(T(cL), br), BooleanEntry(X(cL), cM)])
664675 }
665676 else throw("Strict value is not equal to itself.")
666677 }
667678
668679
669680
670-@Callable(af)
671-func withdrawFor (bu,aO) = bW(af, bu, aO, false)
681+@Callable(aj)
682+func withdrawFor (bw,aN) = bW(aj, bw, aN, false)
672683
673684
674685
675-@Callable(af)
676-func withdrawToMain (bw,aO) = if ((aO != -1))
686+@Callable(aj)
687+func withdrawToMain (by,aN) = if ((aN != -1))
677688 then throw("reserve: withdrawToMain amount -1 only")
678- else bW(af, bw, aO, true)
689+ else bW(aj, by, aN, true)
679690
680691
681692
682-@Callable(af)
683-func replenishWithAtokenFor (bw) = cb("replenish_atokens", bw, af)
693+@Callable(aj)
694+func replenishWithAtokenFor (by) = cb("replenish_atokens", by, aj)
684695
685696
686697
687-@Callable(af)
688-func replenishForRepayWithAtokenFor (bw) = cb("repay_atokens", bw, af)
698+@Callable(aj)
699+func replenisForUnlockWithAtokenFor (by) = cb("replenish_atokens_unlock", by, aj)
689700
690701
691702
692-@Callable(af)
693-func borrowFor (bu,cN) = {
694- let bF = if (if (ae(af))
695- then aN(cN, (aw - ay), "too much borrow requested")
703+@Callable(aj)
704+func replenishForRepayWithAtokenFor (by) = cb("repay_atokens", by, aj)
705+
706+
707+
708+@Callable(aj)
709+func borrowFor (bw,cN) = {
710+ let bF = if (if (ai(aj))
711+ then aM(cN, (P - Q), "too much borrow requested")
696712 else false)
697- then aa("borrow")
713+ then ae("borrow")
698714 else false
699715 if ((bF == bF))
700716 then {
701- let bG = aS(bu)
717+ let bG = aR(bw)
702718 let bI = (bG + cN)
703- (be(0, cN, 0, cN) ++ [h(R(bu), bI), bv(bu), h(S(bu), aI), ScriptTransfer(addressFromStringValue(bu), cN, z)])
719+ (bd(0, cN, 0, cN) ++ [h(V(bw), bI), bx(bw), h(W(bw), aH), ScriptTransfer(addressFromStringValue(bw), cN, A)])
704720 }
705721 else throw("Strict value is not equal to itself.")
706722 }
707723
708724
709725
710-@Callable(af)
711-func mintAtokenFor (bu,cd) = cc(af, bu, cd, bu, "mint_atokens")
726+@Callable(aj)
727+func mintAtokenFor (bw,cd) = cc(aj, bw, cd, bw, "mint_atokens")
712728
713729
714730
715-@Callable(af)
716-func mintAtokenForTo (cO,cd,ce) = cc(af, cO, cd, ce, "lock_mint_atokens")
731+@Callable(aj)
732+func mintAtokenForTo (cO,cd,ce) = cc(aj, cO, cd, ce, "lock_mint_atokens")
717733
718734
719735
720-@Callable(af)
721-func redeemAtokensFor (bw) = {
722- let bF = if (ae(af))
723- then aa("redeem_atokens")
736+@Callable(aj)
737+func redeemAtokensFor (by) = {
738+ let bF = if (ai(aj))
739+ then ae("redeem_atokens")
724740 else false
725741 if ((bF == bF))
726742 then {
727- let bp = bc(af, ap)
728- let cP = bo(bp)
729- $Tuple2((be(-(cP), 0, 0, cP) ++ [ScriptTransfer(addressFromStringValue(bw), cP, z), m(I, -(bp)), Burn(ap, bp)]), cP)
743+ let br = bb(aj, as)
744+ let cP = bq(br)
745+ $Tuple2((bd(-(cP), 0, 0, cP) ++ [ScriptTransfer(addressFromStringValue(by), cP, A), n(J, -(br)), Burn(as, br)]), cP)
730746 }
731747 else throw("Strict value is not equal to itself.")
732748 }
733749
734750
735751
736-@Callable(af)
752+@Callable(aj)
737753 func transferATokensFor (cO,ce,cQ) = {
738- let bF = if (ae(af))
739- then aa("transfer_debt")
754+ let bF = if (ai(aj))
755+ then ae("transfer_debt")
740756 else false
741757 if ((bF == bF))
742758 then {
743- let cR = bn(cQ)
744- let bU = bq(cR)
745- let cS = bt(cO)
759+ let cR = bp(cQ)
760+ let bU = bs(cR)
761+ let cS = bv(cO)
746762 if ((bU > cS))
747763 then throw((((((((((("transferAtokensFor error:" + " transfer.valueUsd: ") + toString(cQ)) + " transfer.assets: ") + toString(cR)) + " transfer.atokens: ") + toString(bU)) + " from.atokens: ") + toString(cS)) + " at ") + toString(this)))
748- else $Tuple2(((be(0, 0, 0, 0) ++ [m(P(cO), -(bU)), m(P(ce), bU)]) ++ bx(ce)), bo(bU))
764+ else $Tuple2(((bd(0, 0, 0, 0) ++ [n(T(cO), -(bU)), n(T(ce), bU)]) ++ bz(ce)), bq(bU))
749765 }
750766 else throw("Strict value is not equal to itself.")
751767 }
752768
753769
754770
755-@Callable(af)
756-func transferDebtFor (cO,ce,aO) = {
757- let bF = if (ae(af))
758- then aa("transfer_debt")
771+@Callable(aj)
772+func transferDebtFor (cO,ce,aN) = {
773+ let bF = if (ai(aj))
774+ then ae("transfer_debt")
759775 else false
760776 if ((bF == bF))
761- then $Tuple2((be(0, 0, 0, 0) ++ [h(R(cO), (aS(cO) - aO)), h(R(ce), (aS(ce) + aO)), h(S(cO), aI), h(S(ce), aI), bv(ce)]), aO)
777+ then $Tuple2((bd(0, 0, 0, 0) ++ [h(V(cO), (aR(cO) - aN)), h(V(ce), (aR(ce) + aN)), h(W(cO), aH), h(W(ce), aH), bx(ce)]), aN)
762778 else throw("Strict value is not equal to itself.")
763779 }
764780
765781
766782
767-@Callable(af)
768-func disableUseAsCollateralFor (bu) = {
769- let bF = if (ae(af))
770- then aa("use_as_col")
783+@Callable(aj)
784+func disableUseAsCollateralFor (bw) = {
785+ let bF = if (ai(aj))
786+ then ae("use_as_col")
771787 else false
772788 if ((bF == bF))
773- then if ((aS(bu) > 0))
789+ then if ((aR(bw) > 0))
774790 then throw("can't disable collateral for asset with open debt")
775- else (be(0, 0, 0, 0) ++ [BooleanEntry(T(bu), false)])
791+ else (bd(0, 0, 0, 0) ++ [BooleanEntry(X(bw), false)])
776792 else throw("Strict value is not equal to itself.")
777793 }
778794
779795
780796
781-@Callable(af)
797+@Callable(aj)
782798 func enableUseAsCollateral () = {
783- let bF = aa("use_as_col")
799+ let bF = ae("use_as_col")
784800 if ((bF == bF))
785- then (be(0, 0, 0, 0) ++ [bv(toString(af.caller))])
801+ then (bd(0, 0, 0, 0) ++ [bx(toString(aj.caller))])
786802 else throw("Strict value is not equal to itself.")
787803 }
788804
789805
790806
791-@Callable(af)
792-func collapseFor (bw) = {
793- let bF = if (ae(af))
794- then aa("force_collapse")
807+@Callable(aj)
808+func collapseFor (by) = {
809+ let bF = if (ai(aj))
810+ then ae("force_collapse")
795811 else false
796812 if ((bF == bF))
797- then by(bw, -1)
813+ then bA(by, -1)
798814 else throw("Strict value is not equal to itself.")
799815 }
800816
801817
802818
803-@Callable(af)
804-func collapseForAmount (bw,aO) = {
805- let bF = if (ae(af))
806- then aa("collapse")
819+@Callable(aj)
820+func collapseForAmount (by,aN) = {
821+ let bF = if (ai(aj))
822+ then ae("collapse")
807823 else false
808824 if ((bF == bF))
809- then by(bw, aO)
825+ then bA(by, aN)
810826 else throw("Strict value is not equal to itself.")
811827 }
812828
813829
814830
815-@Callable(af)
816-func lpValue (bp) = $Tuple2(nil, bo(bp))
831+@Callable(aj)
832+func lpValue (br) = $Tuple2(nil, bq(br))
817833
818834

github/deemru/w8io/6500d08 
279.38 ms