tx · 59znc8Q6qitYn6tZMLiUWSVvyq88ou6vhy3hhSvVvV6Y

3PGCkrHBxFMi7tz1xqnxgBpeNvn5E4M4g8S:  -0.01000000 Waves

2022.04.11 13:20 [3069102] smart account 3PGCkrHBxFMi7tz1xqnxgBpeNvn5E4M4g8S > SELF 0.00000000 Waves

{ "type": 13, "id": "59znc8Q6qitYn6tZMLiUWSVvyq88ou6vhy3hhSvVvV6Y", "fee": 1000000, "feeAssetId": null, "timestamp": 1649672333224, "version": 1, "sender": "3PGCkrHBxFMi7tz1xqnxgBpeNvn5E4M4g8S", "senderPublicKey": "CRRN9T4LWdYfw63q5x9XxR8P93XshdCac31Z65PbE6zv", "proofs": [ "32hFQVfqco2Nsck3mA51XqpRm1NhLVjFZvStjzctrRXsBpChGG3nwXjxo4dFg6nWMmV5ojQUMERjPuL9UkKXvCQR" ], "script": "base64:AAIFAAAAAAAAAJcIAhIAEgMKAQgSBAoCCAgSABIDCgEIEgASABIDCgEBEgASBwoFCAgICAESABIDCgEIEgMKAQgSAwoBCBIDCgEIEgMKAQESAwoBCBIECgIIBBIECgIIARIECgIIARIDCgEIEgMKAQgSBAoCCAESBAoCCAESAwoBCBIFCgMICAESBQoDCAgBEgMKAQgSABIDCgEIEgQKAggBAAAAXAEAAAAEZ2V0SQAAAAEAAAADa2V5CQAEGgAAAAIFAAAABHRoaXMFAAAAA2tleQEAAAAEZ2V0UwAAAAEAAAADa2V5CQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQEAAAAFZ2V0U1YAAAABAAAAA2tleQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAYbm8gc3RyaW5nIHZhbHVlIGZvciBrZXkgBQAAAANrZXkCAAAADCBhdCBhZGRyZXNzIAkABCUAAAABBQAAAAR0aGlzAQAAAAd0aHJvd0lmAAAAAgAAAAljb25kaXRpb24AAAAFZXJyb3IDBQAAAAljb25kaXRpb24JAAACAAAAAQUAAAAFZXJyb3IGAQAAAAh3cml0ZUludAAAAAIAAAADa2V5AAAABXZhbHVlAwkAAGYAAAACAAAAAAAAAAAABQAAAAV2YWx1ZQkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABd3cml0aW5nIG5lZ2F0aXZlIHZhbHVlIAkAAaQAAAABBQAAAAV2YWx1ZQIAAAAJIGZvciBrZXkgBQAAAANrZXkJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAANrZXkFAAAABXZhbHVlAQAAAAhjaGFuZ2VCeQAAAAIAAAADa2V5AAAABXZhbHVlCQEAAAAId3JpdGVJbnQAAAACBQAAAANrZXkJAABkAAAAAgkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkBAAAABGdldEkAAAABBQAAAANrZXkAAAAAAAAAAAAFAAAABXZhbHVlAQAAAAt3cml0ZVN0cmluZwAAAAIAAAADa2V5AAAABXZhbHVlCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAANrZXkFAAAABXZhbHVlAQAAAAxmcmFjdGlvbkNlaWwAAAADAAAABXZhbHVlAAAACW51bWVyYXRvcgAAAAtkZW5vbWluYXRvcgQAAAAEY2FuZAkAAGsAAAADBQAAAAV2YWx1ZQUAAAAJbnVtZXJhdG9yBQAAAAtkZW5vbWluYXRvcgQAAAABRAAAAAAAtQTzMwQAAAAFZXhhY3QJAAAAAAAAAgkAAGoAAAACCQAAaAAAAAIJAABqAAAAAgUAAAAEY2FuZAUAAAABRAkAAGoAAAACBQAAAAtkZW5vbWluYXRvcgUAAAABRAUAAAABRAkAAGoAAAACCQAAaAAAAAIJAABqAAAAAgUAAAAFdmFsdWUFAAAAAUQJAABqAAAAAgUAAAAJbnVtZXJhdG9yBQAAAAFEBQAAAAFEAwUAAAAFZXhhY3QFAAAABGNhbmQJAABkAAAAAgUAAAAEY2FuZAAAAAAAAAAAAQAAAAANQmxvY2tzUGVyWWVhcgAAAAAAAAgFIAAAAAAFUkJhc2UAACOG8m/BAAAAAAAAC2ZhY3RvcnNCYXNlAAAAAAAAAAPoAAAAAAxhc3NldElkU3RvcmUCAAAAB2Fzc2V0SWQAAAAACmFzc2V0SWRTdHIJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkBAAAABGdldFMAAAABBQAAAAxhc3NldElkU3RvcmUCAAAACm5vIGFzc2V0SWQAAAAAB2Fzc2V0SWQDCQAAAAAAAAIFAAAACmFzc2V0SWRTdHICAAAABVdBVkVTBQAAAAR1bml0CQACWQAAAAEFAAAACmFzc2V0SWRTdHIAAAAAEnJlc2VydmVGYWN0b3JTdG9yZQkAASwAAAACBQAAAAphc3NldElkU3RyAgAAAA5fUmVzZXJ2ZUZhY3RvcgAAAAAVY29sbGF0ZXJhbEZhY3RvclN0b3JlCQABLAAAAAIFAAAACmFzc2V0SWRTdHICAAAAEV9Db2xsYXRlcmFsRmFjdG9yAAAAABlsaXF1aWRhdGlvblRocmVzaG9sZFN0b3JlCQABLAAAAAIFAAAACmFzc2V0SWRTdHICAAAAFV9MaXF1aWRhdGlvblRocmVzaG9sZAAAAAASb3ZlcmxhcENoYXJnZVN0b3JlAgAAABZhY2NvdW50X2hlYWx0aF9vdmVybGFwAAAAABdsaXF1aWRhdGlvblBlbmFsdHlTdG9yZQkAASwAAAACBQAAAAphc3NldElkU3RyAgAAABNfTGlxdWlkYXRpb25QZW5hbHR5AAAAABJjb25maWdBZGRyZXNzU3RvcmUCAAAADWNvbmZpZ0FkZHJlc3MAAAAADWFUb2tlbklkU3RvcmUCAAAACGFUb2tlbklkAAAAAA9hVG9rZW5OYW1lU3RvcmUCAAAACmFUb2tlbk5hbWUAAAAAFmFUb2tlbkNpcmN1bGF0aW9uU3RvcmUCAAAAEWFUb2tlbkNpcmN1bGF0aW9uAAAAABVsYXN0VXBkYXRlSGVpZ2h0U3RvcmUCAAAAEGxhc3RVcGRhdGVIZWlnaHQAAAAADnRvdGFsRGVidFN0b3JlAgAAAAt0b3RhbEJvcnJvdwAAAAARdG90YWxEZXBvc2l0U3RvcmUCAAAADHRvdGFsRGVwb3NpdAAAAAARdG90YWxSZXNlcnZlU3RvcmUCAAAADHRvdGFsUmVzZXJ2ZQAAAAAKaW5kZXhTdG9yZQIAAAALc3RvcmVkSW5kZXgAAAAAE2FUb2tlbkRlY2ltYWxzU3RvcmUCAAAADmFUb2tlbkRlY2ltYWxzAQAAABJhVG9rZW5CYWxhbmNlU3RvcmUAAAABAAAAC3VzZXJBZGRyZXNzCQABLAAAAAIFAAAAC3VzZXJBZGRyZXNzAgAAAA5fYVRva2VuQmFsYW5jZQEAAAAJZGVidFN0b3JlAAAAAQAAAAt1c2VyQWRkcmVzcwkAASwAAAACBQAAAAt1c2VyQWRkcmVzcwIAAAAFX2RlYnQBAAAADmRlYnRJbmRleFN0b3JlAAAAAQAAAAt1c2VyQWRkcmVzcwkAASwAAAACBQAAAAt1c2VyQWRkcmVzcwIAAAAGX2luZGV4AQAAABR1c2VBc0NvbGxhdGVyYWxTdG9yZQAAAAEAAAALdXNlckFkZHJlc3MJAAEsAAAAAgUAAAALdXNlckFkZHJlc3MCAAAAEF91c2VBc0NvbGxhdGVyYWwBAAAACmdldEJhbGFuY2UAAAACAAAADmFkZHJlc3NPckFsaWFzAAAAB2Fzc2V0SWQEAAAAByRtYXRjaDAFAAAAB2Fzc2V0SWQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAACkJ5dGVWZWN0b3IEAAAAAmJ2BQAAAAckbWF0Y2gwCQAD8AAAAAIFAAAADmFkZHJlc3NPckFsaWFzBQAAAAJidgMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAQAAAABdQUAAAAHJG1hdGNoMAgJAAPvAAAAAQUAAAAOYWRkcmVzc09yQWxpYXMAAAAJYXZhaWxhYmxlCQAAAgAAAAECAAAAC01hdGNoIGVycm9yAAAAAA1hc3NldERlY2ltYWxzCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAQAAAARnZXRJAAAAAQUAAAATYVRva2VuRGVjaW1hbHNTdG9yZQIAAAAQbm8gYXNzZXREZWNpbWFscwAAAAANY29uZmlnQWRkcmVzcwkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEJgAAAAEJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAAR0aGlzBQAAABJjb25maWdBZGRyZXNzU3RvcmUCAAAAGXJlc2VydmU6IG5vIGNvbmZpZ0FkZHJlc3MCAAAAFmludmFsaWQgY29uZmlnIGFkZHJlc3MBAAAACW9wQWxsb3dlZAAAAAEAAAACb3AEAAAAByRtYXRjaDAJAAP8AAAABAUAAAANY29uZmlnQWRkcmVzcwIAAAAJb3BBbGxvd2VkCQAETAAAAAIFAAAACmFzc2V0SWRTdHIJAARMAAAAAgUAAAACb3AFAAAAA25pbAUAAAADbmlsAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAdCb29sZWFuBAAAAAFiBQAAAAckbWF0Y2gwAwUAAAABYgYJAAACAAAAAQIAAAALbm90IGFsbG93ZWQJAAACAAAAAQIAAAAhb3BBbGxvd2VkOiB1bmV4cGVjdGVkIHJlc3VsdCB0eXBlAAAAAAxtYWluQ29udHJhY3QJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCYAAAABCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAANY29uZmlnQWRkcmVzcwIAAAAEbWFpbgIAAAARbm8gbWFpbiBpbiBjb25maWcCAAAAFGludmFsaWQgbWFpbiBhZGRyZXNzAQAAAAhtYWluT25seQAAAAEAAAABaQMJAQAAAAIhPQAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAAMbWFpbkNvbnRyYWN0CQAAAgAAAAECAAAAEG9ubHkgbWFpbiBjYW4gZG8GAQAAAAxkaXZBZG1pbk9ubHkAAAABAAAAAWkEAAAACWRpdkFkbWlucwkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAADWNvbmZpZ0FkZHJlc3MCAAAACWRpdkFkbWlucwIAAAANbm8gZGl2IGFkbWlucwMJAQAAAAEhAAAAAQkBAAAACGNvbnRhaW5zAAAAAgUAAAAJZGl2QWRtaW5zCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgkAAAIAAAABAgAAABVvbmx5IGRpdiBhZG1pbiBjYW4gZG8GAQAAABBpc0Fzc2V0SWRPcldhdmVzAAAAAQAAAAV2YWx1ZQMDCQEAAAACIT0AAAACBQAAAAV2YWx1ZQIAAAAFV0FWRVMJAAAAAAAAAgkAAlkAAAABBQAAAAV2YWx1ZQkAAlkAAAABAgAAAAAHCQAAAgAAAAECAAAAD2ludmFsaWQgYXNzZXRJZAYAAAAADm5vdEluaXRpYWxpemVkCQEAAAAHdGhyb3dJZgAAAAIJAQAAAAlpc0RlZmluZWQAAAABCQEAAAAEZ2V0UwAAAAEFAAAADGFzc2V0SWRTdG9yZQIAAAATYWxyZWFkeSBpbml0aWFsaXplZAAAAAASbWF5YmVPcmFjbGVBZGRyZXNzBAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAADWNvbmZpZ0FkZHJlc3MCAAAADm9yYWNsZV9hZGRyZXNzAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAXMFAAAAByRtYXRjaDAJAAQmAAAAAQUAAAABcwUAAAAEdW5pdAAAAAALb3JhY2xlUHJpY2UEAAAAByRtYXRjaDAJAAP8AAAABAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACBQAAABJtYXliZU9yYWNsZUFkZHJlc3MCAAAACW5vIG9yYWNsZQIAAAAFcHJpY2UJAARMAAAAAgUAAAAKYXNzZXRJZFN0cgUAAAADbmlsBQAAAANuaWwDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABaQUAAAAHJG1hdGNoMAUAAAABaQkAAAIAAAABAgAAAA9iYWQgb3JhY2xlIGRhdGEAAAAABkhFSUdIVAUAAAAGaGVpZ2h0AAAAABBsYXN0VXBkYXRlSGVpZ2h0CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAQAAAARnZXRJAAAAAQUAAAAVbGFzdFVwZGF0ZUhlaWdodFN0b3JlAgAAABNubyBsYXN0VXBkYXRlSGVpZ2h0AAAAAAhhVG9rZW5JZAkAAlkAAAABCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAQAAAARnZXRTAAAAAQUAAAANYVRva2VuSWRTdG9yZQIAAAALbm8gYVRva2VuSWQAAAAAEWFUb2tlbkNpcmN1bGF0aW9uCQEAAAALdmFsdWVPckVsc2UAAAACCQEAAAAEZ2V0SQAAAAEFAAAAFmFUb2tlbkNpcmN1bGF0aW9uU3RvcmUAAAAAAAAAAAAAAAAADXJlc2VydmVGYWN0b3IJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAA1jb25maWdBZGRyZXNzBQAAABJyZXNlcnZlRmFjdG9yU3RvcmUCAAAAEG5vIHJlc2VydmVGYWN0b3IAAAAAEGNvbGxhdGVyYWxGYWN0b3IJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAA1jb25maWdBZGRyZXNzBQAAABVjb2xsYXRlcmFsRmFjdG9yU3RvcmUCAAAAE25vIGNvbGxhdGVyYWxGYWN0b3IAAAAAFGxpcXVpZGF0aW9uVGhyZXNob2xkCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAANY29uZmlnQWRkcmVzcwUAAAAZbGlxdWlkYXRpb25UaHJlc2hvbGRTdG9yZQIAAAAXbm8gbGlxdWlkYXRpb25UaHJlc2hvbGQAAAAAFGFjY291bnRIZWFsdGhPdmVybGFwCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAANY29uZmlnQWRkcmVzcwUAAAASb3ZlcmxhcENoYXJnZVN0b3JlAgAAABBubyBvdmVybGFwQ2hhcmdlAAAAABJsaXF1aWRhdGlvblBlbmFsdHkJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAA1jb25maWdBZGRyZXNzBQAAABdsaXF1aWRhdGlvblBlbmFsdHlTdG9yZQIAAAAVbm8gbGlxdWlkYXRpb25QZW5hbHR5AAAAABJzdG9yZWRUb3RhbERlcG9zaXQJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAQAAAARnZXRJAAAAAQUAAAARdG90YWxEZXBvc2l0U3RvcmUAAAAAAAAAAAAAAAAAEnN0b3JlZFRvdGFsUmVzZXJ2ZQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkBAAAABGdldEkAAAABBQAAABF0b3RhbFJlc2VydmVTdG9yZQAAAAAAAAAAAAAAAAAPc3RvcmVkVG90YWxEZWJ0CQEAAAALdmFsdWVPckVsc2UAAAACCQEAAAAEZ2V0SQAAAAEFAAAADnRvdGFsRGVidFN0b3JlAAAAAAAAAAAAAAAAAAtzdG9yZWRJbmRleAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkBAAAABGdldEkAAAABBQAAAAppbmRleFN0b3JlBQAAAAVSQmFzZQAAAAALdXRpbGl6YXRpb24DCQAAZgAAAAIFAAAAEnN0b3JlZFRvdGFsRGVwb3NpdAAAAAAAAAAAAAkAAGsAAAADBQAAAA9zdG9yZWRUb3RhbERlYnQFAAAAC2ZhY3RvcnNCYXNlBQAAABJzdG9yZWRUb3RhbERlcG9zaXQAAAAAAAAAAAAAAAAAA2FwcgQAAAABYQkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAANY29uZmlnQWRkcmVzcwkAASwAAAACBQAAAAphc3NldElkU3RyAgAAAAdfQVBvaW50BAAAAAFiCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAA1jb25maWdBZGRyZXNzCQABLAAAAAIFAAAACmFzc2V0SWRTdHICAAAAB19CUG9pbnQEAAAAAWMJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAADWNvbmZpZ0FkZHJlc3MJAAEsAAAAAgUAAAAKYXNzZXRJZFN0cgIAAAAHX0NQb2ludAQAAAABZAkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAANY29uZmlnQWRkcmVzcwkAASwAAAACBQAAAAphc3NldElkU3RyAgAAAAdfRFBvaW50BAAAAAZsaW5lQUMJAABkAAAAAgkAAGsAAAADCQAAZQAAAAIFAAAAAWEFAAAAAWMFAAAAC3V0aWxpemF0aW9uCQEAAAABLQAAAAEFAAAAAWIFAAAAAWEEAAAABmxpbmVDRAkAAGQAAAACCQAAawAAAAMJAABlAAAAAgUAAAABYwUAAAABZAkAAGUAAAACBQAAAAt1dGlsaXphdGlvbgUAAAABYgkAAGUAAAACBQAAAAFiBQAAAAtmYWN0b3JzQmFzZQUAAAABYwMJAAAAAAAAAgUAAAALdXRpbGl6YXRpb24AAAAAAAAAAAAFAAAAAWEDCQAAAAAAAAIFAAAAC3V0aWxpemF0aW9uBQAAAAFiBQAAAAFjAwMJAABmAAAAAgUAAAABYgUAAAALdXRpbGl6YXRpb24GCQAAAAAAAAIFAAAAAWIFAAAAC2ZhY3RvcnNCYXNlBQAAAAZsaW5lQUMFAAAABmxpbmVDRAAAAAADYXB5AwkAAAAAAAACBQAAABJzdG9yZWRUb3RhbERlcG9zaXQAAAAAAAAAAAAAAAAAAAAAAAAJAABrAAAAAwkAAGsAAAADBQAAAA9zdG9yZWRUb3RhbERlYnQFAAAAA2FwcgUAAAASc3RvcmVkVG90YWxEZXBvc2l0CQAAZQAAAAIFAAAAC2ZhY3RvcnNCYXNlBQAAAA1yZXNlcnZlRmFjdG9yBQAAAAtmYWN0b3JzQmFzZQAAAAAMY3VycmVudEluZGV4AwkAAAAAAAACBQAAAAZIRUlHSFQFAAAAEGxhc3RVcGRhdGVIZWlnaHQFAAAAC3N0b3JlZEluZGV4BAAAAANicHIJAQAAAAxmcmFjdGlvbkNlaWwAAAADBQAAAANhcHIFAAAABVJCYXNlCQAAaAAAAAIFAAAADUJsb2Nrc1BlclllYXIFAAAAC2ZhY3RvcnNCYXNlCQEAAAAMZnJhY3Rpb25DZWlsAAAAAwUAAAALc3RvcmVkSW5kZXgJAABkAAAAAgUAAAAFUkJhc2UJAABoAAAAAgUAAAADYnByCQAAZQAAAAIFAAAABkhFSUdIVAUAAAAQbGFzdFVwZGF0ZUhlaWdodAUAAAAFUkJhc2UAAAAADnN0YWtpbmdFbmFibGVkCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGwAAAAIFAAAADWNvbmZpZ0FkZHJlc3MJAAEsAAAAAgIAAAAQc3Rha2luZ19lbmFibGVkXwUAAAAKYXNzZXRJZFN0cgcAAAAADWFjdHVhbEJhbGFuY2UEAAAAByRtYXRjaDAFAAAAB2Fzc2V0SWQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAACkJ5dGVWZWN0b3IEAAAAA2FpZAUAAAAHJG1hdGNoMAkAA/AAAAACBQAAAAR0aGlzBQAAAANhaWQICQAD7wAAAAEFAAAABHRoaXMAAAAJYXZhaWxhYmxlAQAAAA5saXF1aWRpdHlDaGVjawAAAAMAAAAGYW1vdW50AAAAA21heAAAAANlcnIDCQAAZgAAAAIFAAAABmFtb3VudAUAAAADbWF4CQAAAgAAAAEJAAEsAAAAAgIAAAAWbm90IGVub3VnaCBsaXF1aWRpdHk6IAUAAAADZXJyBgEAAAAOc3RvcmVkVXNlckRlYnQAAAABAAAAC3VzZXJBZGRyZXNzCQEAAAALdmFsdWVPckVsc2UAAAACCQEAAAAEZ2V0SQAAAAEJAQAAAAlkZWJ0U3RvcmUAAAABBQAAAAt1c2VyQWRkcmVzcwAAAAAAAAAAAAEAAAAPY3VycmVudFVzZXJEZWJ0AAAAAQAAAAt1c2VyQWRkcmVzcwQAAAABdgkBAAAADnN0b3JlZFVzZXJEZWJ0AAAAAQUAAAALdXNlckFkZHJlc3MDCQAAAAAAAAIFAAAAAXYAAAAAAAAAAAAAAAAAAAAAAAAEAAAAD3N0b3JlZFVzZXJJbmRleAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQEAAAAEZ2V0SQAAAAEJAQAAAA5kZWJ0SW5kZXhTdG9yZQAAAAEFAAAAC3VzZXJBZGRyZXNzAgAAACBoYXMgZGVidCBidXQgZG9lcyBub3QgaGF2ZSBpbmRleAkAAGsAAAADBQAAAAF2BQAAAAxjdXJyZW50SW5kZXgFAAAAD3N0b3JlZFVzZXJJbmRleAAAAAAQY3VycmVudFRvdGFsRGVidAkAAGsAAAADBQAAAA9zdG9yZWRUb3RhbERlYnQFAAAADGN1cnJlbnRJbmRleAUAAAALc3RvcmVkSW5kZXgAAAAACWFkZGVkRGVidAkAAGUAAAACBQAAABBjdXJyZW50VG90YWxEZWJ0BQAAAA9zdG9yZWRUb3RhbERlYnQAAAAADGFkZGVkRGVwb3NpdAkAAGsAAAADBQAAAAlhZGRlZERlYnQJAABlAAAAAgUAAAALZmFjdG9yc0Jhc2UFAAAADXJlc2VydmVGYWN0b3IFAAAAC2ZhY3RvcnNCYXNlAAAAABNjdXJyZW50VG90YWxEZXBvc2l0CQAAZAAAAAIFAAAAEnN0b3JlZFRvdGFsRGVwb3NpdAUAAAAMYWRkZWREZXBvc2l0AAAAABNjdXJyZW50VG90YWxSZXNlcnZlCQAAZQAAAAIJAABkAAAAAgUAAAASc3RvcmVkVG90YWxSZXNlcnZlBQAAAAlhZGRlZERlYnQFAAAADGFkZGVkRGVwb3NpdAAAAAASY2xhaW1hYmxlRGl2aWRlbmRzAwUAAAAOc3Rha2luZ0VuYWJsZWQFAAAAE2N1cnJlbnRUb3RhbFJlc2VydmUJAAGXAAAAAQkABEwAAAACBQAAAA1hY3R1YWxCYWxhbmNlCQAETAAAAAIFAAAAE2N1cnJlbnRUb3RhbFJlc2VydmUFAAAAA25pbAEAAAANcGF5bWVudEFtb3VudAAAAAIAAAABaQAAAAdhc3NldElkBAAAAAFwCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQDCQAAZwAAAAIAAAAAAAAAAAAFAAAAAXAJAAACAAAAAQkAASwAAAACAgAAAClQYXltZW50IGlzIGxlc3MgdGhhbiBtaW4gYWxsb3dlZCBhbW91bnQ6IAkAAaQAAAABBQAAAAFwAwkBAAAAAiE9AAAAAggJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAHYXNzZXRJZAUAAAAHYXNzZXRJZAkAAAIAAAABCQABLAAAAAICAAAAHiBiYWQgYXNzZXQgYXR0YWNoZWQ6IHJlcXVpcmVkIAUAAAAKYXNzZXRJZFN0cgUAAAABcAEAAAAKc3luY1RvdGFscwAAAAQAAAARYWRkaXRpb25hbERlcG9zaXQAAAAOYWRkaXRpb25hbERlYnQAAAARYWRkaXRpb25hbFJlc2VydmUAAAANa2VlcEF0QmFsYW5jZQQAAAANc3Rha2luZ0FjdGlvbgMJAAAAAAAAAgUAAAANYWN0dWFsQmFsYW5jZQUAAAANa2VlcEF0QmFsYW5jZQUAAAAEdW5pdAMJAQAAAAEhAAAAAQUAAAAOc3Rha2luZ0VuYWJsZWQFAAAABHVuaXQEAAAADnN0YWtpbmdBZGRyZXNzCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQmAAAAAQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAADWNvbmZpZ0FkZHJlc3MJAAEsAAAAAgIAAAAPc3Rha2luZ19jb25maWdfBQAAAAphc3NldElkU3RyCQABLAAAAAICAAAAF25vIHN0YWtpbmcgYWRkcmVzcyBmb3IgBQAAAAphc3NldElkU3RyCQABLAAAAAICAAAAGGJhZCBzdGFraW5nIGFkZHJlc3MgZm9yIAUAAAAKYXNzZXRJZFN0cgMJAABmAAAAAgUAAAANYWN0dWFsQmFsYW5jZQUAAAANa2VlcEF0QmFsYW5jZQkAA/wAAAAEBQAAAA5zdGFraW5nQWRkcmVzcwIAAAADcHV0BQAAAANuaWwJAARMAAAAAgkBAAAAD0F0dGFjaGVkUGF5bWVudAAAAAIFAAAAB2Fzc2V0SWQJAABlAAAAAgUAAAANYWN0dWFsQmFsYW5jZQUAAAANa2VlcEF0QmFsYW5jZQUAAAADbmlsCQAD/AAAAAQFAAAADnN0YWtpbmdBZGRyZXNzAgAAAANnZXQJAARMAAAAAgkAAGUAAAACBQAAAA1rZWVwQXRCYWxhbmNlBQAAAA1hY3R1YWxCYWxhbmNlBQAAAANuaWwFAAAAA25pbAMJAAAAAAAAAgUAAAANc3Rha2luZ0FjdGlvbgUAAAANc3Rha2luZ0FjdGlvbgkABEwAAAACCQEAAAAId3JpdGVJbnQAAAACBQAAAAppbmRleFN0b3JlBQAAAAxjdXJyZW50SW5kZXgJAARMAAAAAgkBAAAACHdyaXRlSW50AAAAAgUAAAAVbGFzdFVwZGF0ZUhlaWdodFN0b3JlBQAAAAZIRUlHSFQJAARMAAAAAgkBAAAACHdyaXRlSW50AAAAAgUAAAARdG90YWxEZXBvc2l0U3RvcmUJAABkAAAAAgUAAAATY3VycmVudFRvdGFsRGVwb3NpdAUAAAARYWRkaXRpb25hbERlcG9zaXQJAARMAAAAAgkBAAAACHdyaXRlSW50AAAAAgUAAAAOdG90YWxEZWJ0U3RvcmUJAABkAAAAAgUAAAAQY3VycmVudFRvdGFsRGVidAUAAAAOYWRkaXRpb25hbERlYnQJAARMAAAAAgkBAAAACHdyaXRlSW50AAAAAgUAAAARdG90YWxSZXNlcnZlU3RvcmUJAABkAAAAAgUAAAATY3VycmVudFRvdGFsUmVzZXJ2ZQUAAAARYWRkaXRpb25hbFJlc2VydmUFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAAAABXBvdzEwAAAAAQAAAAFuAwkAAAAAAAACBQAAAAFuAAAAAAAAAAAGAAAAAAAAD0JAAwkAAAAAAAACBQAAAAFuAAAAAAAAAAAIAAAAAAAF9eEACQAAAgAAAAEJAAEsAAAAAgIAAAAOYmFkIGRlY2ltYWxzOiAJAAGkAAAAAQUAAAABbgEAAAAKYXNzZXRUb1VzZAAAAAEAAAAGYW1vdW50CQAAawAAAAMFAAAABmFtb3VudAUAAAALb3JhY2xlUHJpY2UJAQAAAAVwb3cxMAAAAAEFAAAADWFzc2V0RGVjaW1hbHMBAAAACnVzZFRvQXNzZXQAAAABAAAABmFtb3VudAkAAGsAAAADBQAAAAZhbW91bnQJAQAAAAVwb3cxMAAAAAEFAAAADWFzc2V0RGVjaW1hbHMFAAAAC29yYWNsZVByaWNlAQAAAA1hVG9rZW5Ub0Fzc2V0AAAAAQAAAAxhVG9rZW5BbW91bnQDCQAAAAAAAAIFAAAADGFUb2tlbkFtb3VudAAAAAAAAAAAAAAAAAAAAAAAAAMJAABmAAAAAgUAAAARYVRva2VuQ2lyY3VsYXRpb24AAAAAAAAAAAAJAABrAAAAAwUAAAAMYVRva2VuQW1vdW50BQAAABNjdXJyZW50VG90YWxEZXBvc2l0BQAAABFhVG9rZW5DaXJjdWxhdGlvbgUAAAAMYVRva2VuQW1vdW50AQAAAA1hc3NldFRvQVRva2VuAAAAAQAAAAthc3NldEFtb3VudAMJAAAAAAAAAgUAAAALYXNzZXRBbW91bnQAAAAAAAAAAAAAAAAAAAAAAAADCQAAZgAAAAIFAAAAEWFUb2tlbkNpcmN1bGF0aW9uAAAAAAAAAAAACQAAawAAAAMFAAAAC2Fzc2V0QW1vdW50BQAAABFhVG9rZW5DaXJjdWxhdGlvbgUAAAATY3VycmVudFRvdGFsRGVwb3NpdAUAAAALYXNzZXRBbW91bnQBAAAAEWFzc2V0VG9BVG9rZW5DZWlsAAAAAQAAAAthc3NldEFtb3VudAMJAAAAAAAAAgUAAAALYXNzZXRBbW91bnQAAAAAAAAAAAAAAAAAAAAAAAADCQAAZgAAAAIFAAAAEWFUb2tlbkNpcmN1bGF0aW9uAAAAAAAAAAAACQEAAAAMZnJhY3Rpb25DZWlsAAAAAwUAAAALYXNzZXRBbW91bnQFAAAAEWFUb2tlbkNpcmN1bGF0aW9uBQAAABNjdXJyZW50VG90YWxEZXBvc2l0BQAAAAthc3NldEFtb3VudAEAAAANYVRva2VuQmFsYW5jZQAAAAEAAAAHYWRkcmVzcwkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkBAAAABGdldEkAAAABCQEAAAASYVRva2VuQmFsYW5jZVN0b3JlAAAAAQUAAAAHYWRkcmVzcwAAAAAAAAAAAAEAAAAJZW5hYmxlQ29sAAAAAQAAAAR1c2VyCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgkBAAAAFHVzZUFzQ29sbGF0ZXJhbFN0b3JlAAAAAQUAAAAEdXNlcgYBAAAAEWVuYWJsZUNvbElmTmVlZGVkAAAAAQAAAAR1c2VyAwkAAGYAAAACCQEAAAAPY3VycmVudFVzZXJEZWJ0AAAAAQUAAAAEdXNlcgAAAAAAAAAAAAkABEwAAAACCQEAAAAJZW5hYmxlQ29sAAAAAQUAAAAEdXNlcgUAAAADbmlsBQAAAANuaWwBAAAADGNvbGxhcHNlVXNlcgAAAAIAAAAHYWRkcmVzcwAAAAZhbW91bnQEAAAABGRlYnQJAQAAAA9jdXJyZW50VXNlckRlYnQAAAABBQAAAAdhZGRyZXNzBAAAAAdkZXBvc2l0CQEAAAANYVRva2VuVG9Bc3NldAAAAAEJAQAAAA1hVG9rZW5CYWxhbmNlAAAAAQUAAAAHYWRkcmVzcwQAAAALbWF4UG9zc2libGUJAAGXAAAAAQkABEwAAAACBQAAAARkZWJ0CQAETAAAAAIFAAAAB2RlcG9zaXQFAAAAA25pbAQAAAADYW10AwkAAGYAAAACAP//////////BQAAAAZhbW91bnQJAAACAAAAAQIAAAAXaW52YWxpZCBjb2xsYXBz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YVRva2VuQ2lyY3VsYXRpb24CAAAADywgYVRva2VuUHJpY2U6IAkAAaQAAAABCQEAAAANYVRva2VuVG9Bc3NldAAAAAEJAABsAAAABgAAAAAAAAAACgAAAAAAAAAAAAUAAAANYXNzZXREZWNpbWFscwAAAAAAAAAAAAAAAAAAAAAAAAUAAAAFRkxPT1IBAAAACnVzZXJUb3RhbHMAAAABAAAABHVzZXIEAAAAB2F0b2tlbnMJAQAAAA1hVG9rZW5CYWxhbmNlAAAAAQUAAAAEdXNlcgQAAAAFYXNzZXQJAQAAAA1hVG9rZW5Ub0Fzc2V0AAAAAQUAAAAHYXRva2VucwQAAAAEZGVidAkBAAAAD2N1cnJlbnRVc2VyRGVidAAAAAEFAAAABHVzZXIDCQAAAAAAAAIFAAAABkhFSUdIVAUAAAAQbGFzdFVwZGF0ZUhlaWdodAkABRYAAAAEBQAAABJzdG9yZWRUb3RhbERlcG9zaXQFAAAAD3N0b3JlZFRvdGFsRGVidAUAAAAFYXNzZXQFAAAABGRlYnQJAAUWAAAABAUAAAATY3VycmVudFRvdGFsRGVwb3NpdAUAAAAQY3VycmVudFRvdGFsRGVidAUAAAAFYXNzZXQFAAAABGRlYnQBAAAAEHdpdGhkcmF3SW50ZXJuYWwAAAAEAAAAAWkAAAAEdXNlcgAAAAZhbW91bnQAAAAGdG9NYWluBAAAAAttYXhXaXRoZHJhdwkAAGUAAAACCQAAZAAAAAIFAAAAEnN0b3JlZFRvdGFsRGVwb3NpdAUAAAASc3RvcmVkVG90YWxSZXNlcnZlBQAAAA9zdG9yZWRUb3RhbERlYnQEAAAABmNoZWNrcwMDAwkBAAAACG1haW5Pbmx5AAAAAQUAAAABaQkBAAAADmxpcXVpZGl0eUNoZWNrAAAAAwUAAAAGYW1vdW50BQAAAAttYXhXaXRoZHJhdwIAAAAMZnVuZHMgaW4gdXNlBwkBAAAAB3Rocm93SWYAAAACCQAAZgAAAAIA//////////8FAAAABmFtb3VudAIAAAAOaW52YWxpZCBhbW91bnQHCQEAAAAJb3BBbGxvd2VkAAAAAQIAAAAId2l0aGRyYXcHAwkAAAAAAAACBQAAAAZjaGVja3MFAAAABmNoZWNrcwQAAAANJHQwMTUyNjQxNTQ1NQMJAAAAAAAAAgUAAAAGYW1vdW50AP//////////BAAAAAdhdG9rZW5zCQEAAAANYVRva2VuQmFsYW5jZQAAAAEFAAAABHVzZXIJAAUUAAAAAgUAAAAHYXRva2VucwkBAAAADWFUb2tlblRvQXNzZXQAAAABBQAAAAdhdG9rZW5zCQAFFAAAAAIJAQAAABFhc3NldFRvQVRva2VuQ2VpbAAAAAEFAAAABmFtb3VudAUAAAAGYW1vdW50BAAAAA5yZW1vdmVkQXRva2VucwgFAAAADSR0MDE1MjY0MTU0NTUAAAACXzEEAAAADndpdGhkcmF3QW1vdW50CAUAAAANJHQwMTUyNjQxNTQ1NQAAAAJfMgkABRQAAAACCQAETgAAAAIJAQAAAApzeW5jVG90YWxzAAAABAkBAAAAAS0AAAABBQAAAA53aXRoZHJhd0Ftb3VudAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAOd2l0aGRyYXdBbW91bnQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwMFAAAABnRvTWFpbgUAAAAMbWFpbkNvbnRyYWN0CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABBQAAAAR1c2VyBQAAAA53aXRoZHJhd0Ftb3VudAUAAAAHYXNzZXRJZAkABEwAAAACCQEAAAAIY2hhbmdlQnkAAAACCQEAAAASYVRva2VuQmFsYW5jZVN0b3JlAAAAAQUAAAAEdXNlcgkBAAAAAS0AAAABBQAAAA5yZW1vdmVkQXRva2VucwkABEwAAAACCQEAAAAIY2hhbmdlQnkAAAACBQAAABZhVG9rZW5DaXJjdWxhdGlvblN0b3JlCQEAAAABLQAAAAEFAAAADnJlbW92ZWRBdG9rZW5zBQAAAANuaWwFAAAADndpdGhkcmF3QW1vdW50CQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEAAAARcmVwbGVuaXNoSW50ZXJuYWwAAAADAAAAAm9wAAAABHVzZXIAAAABaQQAAAAGY2hlY2tzAwkBAAAACG1haW5Pbmx5AAAAAQUAAAABaQkBAAAACW9wQWxsb3dlZAAAAAEFAAAAAm9wBwMJAAAAAAAAAgUAAAAGY2hlY2tzBQAAAAZjaGVja3MEAAAADGFUb2tlbkFtb3VudAkBAAAADXBheW1lbnRBbW91bnQAAAACBQAAAAFpBQAAAAhhVG9rZW5JZAkABRQAAAACCQAETgAAAAIJAAROAAAAAgkBAAAACnN5bmNUb3RhbHMAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAETAAAAAIJAQAAAAhjaGFuZ2VCeQAAAAIJAQAAABJhVG9rZW5CYWxhbmNlU3RvcmUAAAABBQAAAAR1c2VyBQAAAAxhVG9rZW5BbW91bnQJAARMAAAAAgkBAAAABEJ1cm4AAAACBQAAAAhhVG9rZW5JZAUAAAAMYVRva2VuQW1vdW50BQAAAANuaWwJAQAAABFlbmFibGVDb2xJZk5lZWRlZAAAAAEFAAAABHVzZXIJAQAAAA1hVG9rZW5Ub0Fzc2V0AAAAAQUAAAAMYVRva2VuQW1vdW50CQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAB8AAAABaQEAAAASZ2V0UmVzZXJ2ZURpdnNJbmZvAAAAAAkABRQAAAACBQAAAANuaWwJAAUVAAAAAwUAAAASY2xhaW1hYmxlRGl2aWRlbmRzBQAAAAphc3NldElkU3RyCQAAZQAAAAIFAAAAE2N1cnJlbnRUb3RhbFJlc2VydmUFAAAAEmNsYWltYWJsZURpdmlkZW5kcwAAAAFpAQAAABBnZXRDdXJyZW50VG90YWxzAAAAAQAAAAR1c2VyCQAFFAAAAAIFAAAAA25pbAkBAAAACnVzZXJUb3RhbHMAAAABBQAAAAR1c2VyAAAAAWkBAAAAEWdldEN1cnJlbnRUb3RhbHMyAAAAAgAAAAV1c2VyMQAAAAV1c2VyMgQAAAANJHQwMTYzODQxNjQyMQkBAAAACnVzZXJUb3RhbHMAAAABBQAAAAV1c2VyMQQAAAACZDEIBQAAAA0kdDAxNjM4NDE2NDIxAAAAAl8xBAAAAAJkMggFAAAADSR0MDE2Mzg0MTY0MjEAAAACXzIEAAAAAmQzCAUAAAANJHQwMTYzODQxNjQyMQAAAAJfMwQAAAACZDQIBQAAAA0kdDAxNjM4NDE2NDIxAAAAAl80BAAAAA0kdDAxNjQyNjE2NDYzCQEAAAAKdXNlclRvdGFscwAAAAEFAAAABXVzZXIyBAAAAAJlMQgFAAAADSR0MDE2NDI2MTY0NjMAAAACXzEEAAAAAmUyCAUAAAANJHQwMTY0MjYxNjQ2MwAAAAJfMgQAAAACZTMIBQAAAA0kdDAxNjQyNjE2NDYzAAAAAl8zBAAAAAJlNAgFAAAADSR0MDE2NDI2MTY0NjMAAAACXzQJAAUUAAAAAgUAAAADbmlsCQAFGAAAAAYFAAAAAmQxBQAAAAJkMgUAAAACZDMFAAAAAmQ0BQAAAAJlMwUAAAACZTQAAAABaQEAAAAGYWR2aXNlAAAAAAkABRQAAAACBQAAAANuaWwJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABByZXNlcnZlQWRkcmVzczogCQAEJQAAAAEFAAAABHRoaXMCAAAAAiwgCQEAAAAJZ2V0Q29uZmlnAAAAAAIAAAACLCAJAQAAAAhnZXRTdGF0ZQAAAAAAAAABaQEAAAAKYWR2aXNlVXNlcgAAAAEAAAAEdXNlcgQAAAAOY3VycmVudERlYnRVc2QJAQAAAAphc3NldFRvVXNkAAAAAQUAAAAQY3VycmVudFRvdGFsRGVidAQAAAARY3VycmVudERlcG9zaXRVc2QJAQAAAAphc3NldFRvVXNkAAAAAQUAAAATY3VycmVudFRvdGFsRGVwb3NpdAQAAAAMYXNDb2xsYXRlcmFsCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGwAAAAIFAAAABHRoaXMJAQAAABR1c2VBc0NvbGxhdGVyYWxTdG9yZQAAAAEFAAAABHVzZXIGBAAAABNlZmZlY3RpdmVEZXBvc2l0VXNkAwUAAAAMYXNDb2xsYXRlcmFsBQAAABFjdXJyZW50RGVwb3NpdFVzZAAAAAAAAAAAAAQAAAAKb3ZlcmxhcFVzZAkAAZcAAAABCQAETAAAAAIFAAAADmN1cnJlbnREZWJ0VXNkCQAETAAAAAIFAAAAE2VmZmVjdGl2ZURlcG9zaXRVc2QFAAAAA25pbAQAAAANb3ZlcmxhcENoYXJnZQkBAAAADGZyYWN0aW9uQ2VpbAAAAAMFAAAACm92ZXJsYXBVc2QFAAAAFGFjY291bnRIZWFsdGhPdmVybGFwBQAAAAtmYWN0b3JzQmFzZQQAAAACYnADCQAAZgAAAAIFAAAADmN1cnJlbnREZWJ0VXNkBQAAABNlZmZlY3RpdmVEZXBvc2l0VXNkAAAAAAAAAAAACQAAawAAAAMJAABlAAAAAgUAAAATZWZmZWN0aXZlRGVwb3NpdFVzZAUAAAAOY3VycmVudERlYnRVc2QFAAAAEGNvbGxhdGVyYWxGYWN0b3IFAAAAC2ZhY3RvcnNCYXNlBAAAAANicHUDCQAAZgAAAAIFAAAADmN1cnJlbnREZWJ0VXNkBQAAABNlZmZlY3RpdmVEZXBvc2l0VXNkCQAAZAAAAAIJAABrAAAAAwkAAGUAAAACBQAAAA5jdXJyZW50RGVidFVzZAUAAAATZWZmZWN0aXZlRGVwb3NpdFVzZAUAAAALZmFjdG9yc0Jhc2UFAAAAFGxpcXVpZGF0aW9uVGhyZXNob2xkBQAAAA1vdmVybGFwQ2hhcmdlBQAAAA1vdmVybGFwQ2hhcmdlBAAAAAhlbnJpY2hlZAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAQcmVzZXJ2ZUFkZHJlc3M6IAkABCUAAAABBQAAAAR0aGlzAgAAABIsIGN1cnJlbnREZWJ0VXNkOiAJAAGkAAAAAQUAAAAOY3VycmVudERlYnRVc2QCAAAAFSwgY3VycmVudERlcG9zaXRVc2Q6IAkAAaQAAAABBQAAABFjdXJyZW50RGVwb3NpdFVzZAIAAAAGLCBicDogCQABpAAAAAEFAAAAAmJwAgAAAAcsIGJwdTogCQABpAAAAAEFAAAAA2JwdQkABRQAAAACBQAAAANuaWwJAAEsAAAAAgkAASwAAAACBQAAAAhlbnJpY2hlZAIAAAACLCAJAQAAAAxnZXRVc2VyU3RhdGUAAAABBQAAAAR1c2VyAAAAAWkBAAAAC2FkZEludGVyZXN0AAAAAAMJAQAAAAIhPQAAAAIICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAAB2Fzc2V0SWQFAAAAB2Fzc2V0SWQJAAACAAAAAQIAAAAnY2FuJ3QgYWRkIGludGVyZXN0IHdpdGggdW5yZWxhdGVkIHRva2VuCQEAAAAKc3luY1RvdGFscwAAAAQICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAABmFtb3VudAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFpAQAAAAxhZGRUb1Jlc2VydmUAAAAAAwkBAAAAAiE9AAAAAggJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAHYXNzZXRJZAUAAAAHYXNzZXRJZAkAAAIAAAABAgAAACdjYW4ndCBhZGQgaW50ZXJlc3Qgd2l0aCB1bnJlbGF0ZWQgdG9rZW4JAQAAAApzeW5jVG90YWxzAAAABAAAAAAAAAAAAAAAAAAAAAAAAAgJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50AAAAAAAAAAAAAAAAAWkBAAAAE3dpdGhkcmF3RnJvbVJlc2VydmUAAAABAAAAA2FtdAQAAAAGY2hlY2tzCQEAAAAMZGl2QWRtaW5Pbmx5AAAAAQUAAAABaQMJAAAAAAAAAgUAAAAGY2hlY2tzBQAAAAZjaGVja3MEAAAABGRpZmYDCQAAAAAAAAIFAAAAA2FtdAD//////////wUAAAASY2xhaW1hYmxlRGl2aWRlbmRzBQAAAANhbXQJAAUUAAAAAgkABE4AAAACCQEAAAAKc3luY1RvdGFscwAAAAQAAAAAAAAAAAAAAAAAAAAAAAAJAQAAAAEtAAAAAQUAAAAEZGlmZgUAAAAEZGlmZgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAABGRpZmYFAAAAB2Fzc2V0SWQFAAAAA25pbAUAAAAEZGlmZgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAALZm9yY2VVcGRhdGUAAAAABAAAAAVhZG1pbgkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAADWNvbmZpZ0FkZHJlc3MCAAAABWFkbWluAgAAABpyZXNlcnZlOm5vIGFkbWluIGluIGNvbmZpZwMJAQAAAAIhPQAAAAIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBQAAAAVhZG1pbgkAAAIAAAABAgAAABFvbmx5IGFkbWluIGNhbiBkbwkBAAAACnN5bmNUb3RhbHMAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWkBAAAACmluaXRpYWxpemUAAAAFAAAACmNmZ0FkZHJlc3MAAAAOYXNzZXRJZE9yV2F2ZXMAAAAKYVRva2VuTmFtZQAAABFhVG9rZW5EZXNjcmlwdGlvbgAAAA5hVG9rZW5EZWNpbWFscwQAAAAGY2hlY2tzAwUAAAAObm90SW5pdGlhbGl6ZWQJAQAAABBpc0Fzc2V0SWRPcldhdmVzAAAAAQUAAAAOYXNzZXRJZE9yV2F2ZXMHAwkAAAAAAAACBQAAAAZjaGVja3MFAAAABmNoZWNrcwQAAAAGYVRva2VuCQAEQgAAAAUFAAAACmFUb2tlbk5hbWUFAAAAEWFUb2tlbkRlc2NyaXB0aW9uAAAAAAAAAAAABQAAAA5hVG9rZW5EZWNpbWFscwYJAARMAAAAAgUAAAAGYVRva2VuCQAETAAAAAIJAQAAAAh3cml0ZUludAAAAAIFAAAAE2FUb2tlbkRlY2ltYWxzU3RvcmUFAAAADmFUb2tlbkRlY2ltYWxzCQAETAAAAAIJAQAAAAt3cml0ZVN0cmluZwAAAAIFAAAAD2FUb2tlbk5hbWVTdG9yZQUAAAAKYVRva2VuTmFtZQkABEwAAAACCQEAAAALd3JpdGVTdHJpbmcAAAACBQAAAAxhc3NldElkU3RvcmUFAAAADmFzc2V0SWRPcldhdmVzCQAETAAAAAIJAQAAAAt3cml0ZVN0cmluZwAAAAIFAAAAEmNvbmZpZ0FkZHJlc3NTdG9yZQUAAAAKY2ZnQWRkcmVzcwkABEwAAAACCQEAAAALd3JpdGVTdHJpbmcAAAACBQAAAA1hVG9rZW5JZFN0b3JlCQACWAAAAAEJAAQ4AAAAAQUAAAAGYVRva2VuBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAAC2luaXRpYWxpemUyAAAAAAMJAQAAAAIhPQAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAAEdGhpcwkAAAIAAAABAgAAABZvbmx5IHNlbGYgY2FuIGNvbnRpbnVlCQAETAAAAAIJAQAAAAh3cml0ZUludAAAAAIFAAAA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dHJ5AAAAAgkBAAAAFHVzZUFzQ29sbGF0ZXJhbFN0b3JlAAAAAQUAAAAJZGVwb3NpdG9yBQAAAA91c2VBc0NvbGxhdGVyYWwFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAALd2l0aGRyYXdGb3IAAAACAAAAB2FkZHJlc3MAAAAGYW1vdW50CQEAAAAQd2l0aGRyYXdJbnRlcm5hbAAAAAQFAAAAAWkFAAAAB2FkZHJlc3MFAAAABmFtb3VudAcAAAABaQEAAAAOd2l0aGRyYXdUb01haW4AAAACAAAABHVzZXIAAAAGYW1vdW50AwkBAAAAAiE9AAAAAgUAAAAGYW1vdW50AP//////////CQAAAgAAAAECAAAAJnJlc2VydmU6IHdpdGhkcmF3VG9NYWluIGFtb3VudCAtMSBvbmx5CQEAAAAQd2l0aGRyYXdJbnRlcm5hbAAAAAQFAAAAAWkFAAAABHVzZXIFAAAABmFtb3VudAYAAAABaQEAAAAWcmVwbGVuaXNoV2l0aEF0b2tlbkZvcgAAAAEAAAAEdXNlcgkBAAAAEXJlcGxlbmlzaEludGVybmFsAAAAAwIAAAARcmVwbGVuaXNoX2F0b2tlbnMFAAAABHVzZXIFAAAAAWkAAAABaQEAAAAecmVwbGVuaXNoRm9yUmVwYXlXaXRoQXRva2VuRm9yAAAAAQAAAAR1c2VyCQEAAAARcmVwbGVuaXNoSW50ZXJuYWwAAAADAgAAAA1yZXBheV9hdG9rZW5zBQAAAAR1c2VyBQAAAAFpAAAAAWkBAAAACWJvcnJvd0ZvcgAAAAIAAAAHYWRkcmVzcwAAAA5hbW91bnRUb0JvcnJvdwQAAAAGY2hlY2tzAwMJAQAAAAhtYWluT25seQAAAAEFAAAAAWkJAQAAAA5saXF1aWRpdHlDaGVjawAAAAMFAAAADmFtb3VudFRvQm9ycm93CQAAZQAAAAIFAAAAEnN0b3JlZFRvdGFsRGVwb3NpdAUAAAAPc3RvcmVkVG90YWxEZWJ0AgAAABl0b28gbXVjaCBib3Jyb3cgcmVxdWVzdGVkBwkBAAAACW9wQWxsb3dlZAAAAAECAAAABmJvcnJvdwcDCQAAAAAAAAIFAAAABmNoZWNrcwUAAAAGY2hlY2tzBAAAAAtjdXJyZW50RGVidAkBAAAAD2N1cnJlbnRVc2VyRGVidAAAAAEFAAAAB2FkZHJlc3MEAAAAB25ld0RlYnQJAABkAAAAAgUAAAALY3VycmVudERlYnQFAAAADmFtb3VudFRvQm9ycm93CQAETgAAAAIJAQAAAApzeW5jVG90YWxzAAAABAAAAAAAAAAAAAUAAAAOYW1vdW50VG9Cb3Jyb3cAAAAAAAAAAAAFAAAADmFtb3VudFRvQm9ycm93CQAETAAAAAIJAQAAAAh3cml0ZUludAAAAAIJAQAAAAlkZWJ0U3RvcmUAAAABBQAAAAdhZGRyZXNzBQAAAAduZXdEZWJ0CQAETAAAAAIJAQAAAAllbmFibGVDb2wAAAABBQAAAAdhZGRyZXNzCQAETAAAAAIJAQAAAAh3cml0ZUludAAAAAIJAQAAAA5kZWJ0SW5kZXhTdG9yZQAAAAEFAAAAB2FkZHJlc3MFAAAADGN1cnJlbnRJbmRleAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABBQAAAAdhZGRyZXNzBQAAAA5hbW91bnRUb0JvcnJvdwUAAAAHYXNzZXRJZAUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAA1taW50QXRva2VuRm9yAAAAAgAAAAdhZGRyZXNzAAAADGFtb3VudFRvTWludAQAAAARdXNlckFUb2tlbkJhbGFuY2UJAQAAAA1hVG9rZW5CYWxhbmNlAAAAAQUAAAAHYWRkcmVzcwQAAAAGYW1vdW50AwkAAAAAAAACBQAAAAxhbW91bnRUb01pbnQA//////////8FAAAAEXVzZXJBVG9rZW5CYWxhbmNlBQAAAAxhbW91bnRUb01pbnQEAAAABmNoZWNrcwMDAwkBAAAACG1haW5Pbmx5AAAAAQUAAAABaQkBAAAACW9wQWxsb3dlZAAAAAECAAAADG1pbnRfYXRva2VucwcJAQAAAAd0aHJvd0lmAAAAAgkAAGYAAAACAP//////////BQAAAAxhbW91bnRUb01pbnQCAAAAFGludmFsaWQgYW1vdW50VG9NaW50BwkBAAAA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", "chainId": 87, "height": 3069102, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 3QV4spV3MZcyEdHnGg3k6CkfgndDjT1A64mrsN6qzTWT Next: EQSP3d5PgM2i8uzwDc2QgETQ4Vj7sJygL2cTYfYjLDGn Diff:
OldNewDifferences
447447 }
448448
449449
450+func bZ (Z,bu,ad) = {
451+ let bD = if (ac(ad))
452+ then Y(Z)
453+ else false
454+ if ((bD == bD))
455+ then {
456+ let bn = aZ(ad, an)
457+ $Tuple2(((bb(0, 0, 0, 0) ++ [j(M(bu), bn), Burn(an, bn)]) ++ bv(bu)), bm(bn))
458+ }
459+ else throw("Strict value is not equal to itself.")
460+ }
461+
462+
450463 @Callable(ad)
451464 func getReserveDivsInfo () = $Tuple2(nil, $Tuple3(aY, v, (aX - aY)))
452465
458471
459472
460473 @Callable(ad)
461-func getCurrentTotals2 (bZ,ca) = {
462- let cb = bR(bZ)
463- let cc = cb._1
464- let cd = cb._2
465- let ce = cb._3
466- let cf = cb._4
467- let cg = bR(ca)
468- let ch = cg._1
469- let ci = cg._2
470- let cj = cg._3
471- let ck = cg._4
472- $Tuple2(nil, $Tuple6(cc, cd, ce, cf, cj, ck))
474+func getCurrentTotals2 (ca,cb) = {
475+ let cc = bR(ca)
476+ let cd = cc._1
477+ let ce = cc._2
478+ let cf = cc._3
479+ let cg = cc._4
480+ let ch = bR(cb)
481+ let ci = ch._1
482+ let cj = ch._2
483+ let ck = ch._3
484+ let cl = ch._4
485+ $Tuple2(nil, $Tuple6(cd, ce, cf, cg, ck, cl))
473486 }
474487
475488
481494
482495 @Callable(ad)
483496 func adviseUser (bu) = {
484- let cl = bk(aT)
485- let cm = bk(aW)
486- let cn = valueOrElse(getBoolean(this, Q(bu)), true)
487- let co = if (cn)
488- then cm
497+ let cm = bk(aT)
498+ let cn = bk(aW)
499+ let co = valueOrElse(getBoolean(this, Q(bu)), true)
500+ let cp = if (co)
501+ then cn
489502 else 0
490- let cp = min([cl, co])
491- let cq = l(cp, as, t)
492- let cr = if ((cl > co))
503+ let cq = min([cm, cp])
504+ let cr = l(cq, as, t)
505+ let cs = if ((cm > cp))
493506 then 0
494- else fraction((co - cl), aq, t)
495- let cs = if ((cl > co))
496- then (fraction((cl - co), t, ar) + cq)
497- else cq
498- let ct = ((((((((("reserveAddress: " + toString(this)) + ", currentDebtUsd: ") + toString(cl)) + ", currentDepositUsd: ") + toString(cm)) + ", bp: ") + toString(cr)) + ", bpu: ") + toString(cs))
499- $Tuple2(nil, ((ct + ", ") + bN(bu)))
507+ else fraction((cp - cm), aq, t)
508+ let ct = if ((cm > cp))
509+ then (fraction((cm - cp), t, ar) + cr)
510+ else cr
511+ let cu = ((((((((("reserveAddress: " + toString(this)) + ", currentDebtUsd: ") + toString(cm)) + ", currentDepositUsd: ") + toString(cn)) + ", bp: ") + toString(cs)) + ", bpu: ") + toString(ct))
512+ $Tuple2(nil, ((cu + ", ") + bN(bu)))
500513 }
501514
502515
520533 let bD = ae(ad)
521534 if ((bD == bD))
522535 then {
523- let cu = if ((bA == -1))
536+ let cv = if ((bA == -1))
524537 then aY
525538 else bA
526- $Tuple2((bb(0, 0, -(cu), cu) ++ [ScriptTransfer(ad.caller, cu, w)]), cu)
539+ $Tuple2((bb(0, 0, -(cv), cv) ++ [ScriptTransfer(ad.caller, cv, w)]), cv)
527540 }
528541 else throw("Strict value is not equal to itself.")
529542 }
532545
533546 @Callable(ad)
534547 func forceUpdate () = {
535- let cv = valueOrErrorMessage(getString(X, "admin"), "reserve:no admin in config")
536- if ((toString(ad.caller) != cv))
548+ let cw = valueOrErrorMessage(getString(X, "admin"), "reserve:no admin in config")
549+ if ((toString(ad.caller) != cw))
537550 then throw("only admin can do")
538551 else bb(0, 0, 0, 0)
539552 }
541554
542555
543556 @Callable(ad)
544-func initialize (cw,cx,cy,cz,cA) = {
557+func initialize (cx,cy,cz,cA,cB) = {
545558 let bD = if (ah)
546- then ag(cx)
559+ then ag(cy)
547560 else false
548561 if ((bD == bD))
549562 then {
550- let cB = Issue(cy, cz, 0, cA, true)
551-[cB, h(L, cA), k(E, cy), k(u, cx), k(C, cw), k(D, toBase58String(calculateAssetId(cB)))]
563+ let cC = Issue(cz, cA, 0, cB, true)
564+[cC, h(L, cB), k(E, cz), k(u, cy), k(C, cx), k(D, toBase58String(calculateAssetId(cC)))]
552565 }
553566 else throw("Strict value is not equal to itself.")
554567 }
585598 @Callable(ad)
586599 func userDebt (bs) = {
587600 let bx = aQ(bs)
588- let cC = bk(bx)
589- $Tuple2(nil, $Tuple2(bx, cC))
601+ let cD = bk(bx)
602+ $Tuple2(nil, $Tuple2(bx, cD))
590603 }
591604
592605
607620
608621
609622 @Callable(ad)
610-func depositFor (cD,cE) = {
623+func depositFor (cE,cF) = {
611624 let bD = if (ac(ad))
612625 then Y("deposit")
613626 else false
614627 if ((bD == bD))
615- then if (if ((aQ(cD) > 0))
616- then !(cE)
628+ then if (if ((aQ(cE) > 0))
629+ then !(cF)
617630 else false)
618631 then throw("can't disable use as collateral for asset with open debt")
619632 else {
620633 let aM = aZ(ad, w)
621634 let bn = bo(aM)
622- (bb(aM, 0, 0, 0) ++ [j(F, bn), j(M(cD), bn), BooleanEntry(Q(cD), cE)])
635+ (bb(aM, 0, 0, 0) ++ [j(F, bn), j(M(cE), bn), BooleanEntry(Q(cE), cF)])
623636 }
624637 else throw("Strict value is not equal to itself.")
625638 }
639652
640653
641654 @Callable(ad)
642-func replenishWithAtokenFor (bu) = {
643- let bD = if (ac(ad))
644- then Y("atokens")
655+func replenishWithAtokenFor (bu) = bZ("replenish_atokens", bu, ad)
656+
657+
658+
659+@Callable(ad)
660+func replenishForRepayWithAtokenFor (bu) = bZ("repay_atokens", bu, ad)
661+
662+
663+
664+@Callable(ad)
665+func borrowFor (bs,cG) = {
666+ let bD = if (if (ac(ad))
667+ then aL(cG, (au - aw), "too much borrow requested")
668+ else false)
669+ then Y("borrow")
645670 else false
646671 if ((bD == bD))
647672 then {
648- let bn = aZ(ad, an)
649- $Tuple2(((bb(0, 0, 0, 0) ++ [j(M(bu), bn), Burn(an, bn)]) ++ bv(bu)), bm(bn))
673+ let bE = aQ(bs)
674+ let bG = (bE + cG)
675+ (bb(0, cG, 0, cG) ++ [h(O(bs), bG), bt(bs), h(P(bs), aG), ScriptTransfer(addressFromStringValue(bs), cG, w)])
650676 }
651677 else throw("Strict value is not equal to itself.")
652678 }
654680
655681
656682 @Callable(ad)
657-func borrowFor (bs,cF) = {
658- let bD = if (if (ac(ad))
659- then aL(cF, (au - aw), "too much borrow requested")
683+func mintAtokenFor (bs,cH) = {
684+ let cI = br(bs)
685+ let aM = if ((cH == -1))
686+ then cI
687+ else cH
688+ let bD = if (if (if (ac(ad))
689+ then Y("mint_atokens")
660690 else false)
661- then Y("borrow")
662- else false
663- if ((bD == bD))
664- then {
665- let bE = aQ(bs)
666- let bG = (bE + cF)
667- (bb(0, cF, 0, cF) ++ [h(O(bs), bG), bt(bs), h(P(bs), aG), ScriptTransfer(addressFromStringValue(bs), cF, w)])
668- }
669- else throw("Strict value is not equal to itself.")
670- }
671-
672-
673-
674-@Callable(ad)
675-func mintAtokenFor (bs,cG) = {
676- let cH = br(bs)
677- let aM = if ((cG == -1))
678- then cH
679- else cG
680- let bD = if (if (if (ac(ad))
681- then Y("atokens")
691+ then e((-1 > cH), "invalid amountToMint")
682692 else false)
683- then e((-1 > cG), "invalid amountToMint")
684- else false)
685- then e((aM > cH), ("Trying to mint more than available, max: " + toString(cH)))
693+ then e((aM > cI), ("Trying to mint more than available, max: " + toString(cI)))
686694 else false
687695 if ((bD == bD))
688696 then $Tuple2((bb(0, 0, 0, 0) ++ [j(M(bs), -(aM)), Reissue(an, aM, true), ScriptTransfer(addressFromStringValue(bs), aM, an)]), bm(aM))
694702 @Callable(ad)
695703 func redeemAtokensFor (bu) = {
696704 let bD = if (ac(ad))
697- then Y("atokens")
705+ then Y("redeem_atokens")
698706 else false
699707 if ((bD == bD))
700708 then {
701709 let bn = aZ(ad, an)
702- let cI = bm(bn)
703- $Tuple2((bb(-(cI), 0, 0, cI) ++ [ScriptTransfer(addressFromStringValue(bu), cI, w), j(F, -(bn)), Burn(an, bn)]), cI)
710+ let cJ = bm(bn)
711+ $Tuple2((bb(-(cJ), 0, 0, cJ) ++ [ScriptTransfer(addressFromStringValue(bu), cJ, w), j(F, -(bn)), Burn(an, bn)]), cJ)
704712 }
705713 else throw("Strict value is not equal to itself.")
706714 }
708716
709717
710718 @Callable(ad)
711-func transferATokensFor (cJ,cK,cL) = {
719+func transferATokensFor (cK,cL,cM) = {
712720 let bD = if (ac(ad))
713721 then Y("transfer_debt")
714722 else false
715723 if ((bD == bD))
716724 then {
717- let cM = bl(cL)
718- let bS = bo(cM)
719- let cN = br(cJ)
720- if ((bS > cN))
721- then throw((((((((((("transferAtokensFor error:" + " transfer.valueUsd: ") + toString(cL)) + " transfer.assets: ") + toString(cM)) + " transfer.atokens: ") + toString(bS)) + " from.atokens: ") + toString(cN)) + " at ") + toString(this)))
722- else $Tuple2(((bb(0, 0, 0, 0) ++ [j(M(cJ), -(bS)), j(M(cK), bS)]) ++ bv(cK)), bm(bS))
725+ let cN = bl(cM)
726+ let bS = bo(cN)
727+ let cO = br(cK)
728+ if ((bS > cO))
729+ then throw((((((((((("transferAtokensFor error:" + " transfer.valueUsd: ") + toString(cM)) + " transfer.assets: ") + toString(cN)) + " transfer.atokens: ") + toString(bS)) + " from.atokens: ") + toString(cO)) + " at ") + toString(this)))
730+ else $Tuple2(((bb(0, 0, 0, 0) ++ [j(M(cK), -(bS)), j(M(cL), bS)]) ++ bv(cL)), bm(bS))
723731 }
724732 else throw("Strict value is not equal to itself.")
725733 }
727735
728736
729737 @Callable(ad)
730-func transferDebtFor (cJ,cK,aM) = {
738+func transferDebtFor (cK,cL,aM) = {
731739 let bD = if (ac(ad))
732740 then Y("transfer_debt")
733741 else false
734742 if ((bD == bD))
735- then $Tuple2((bb(0, 0, 0, 0) ++ [h(O(cJ), (aQ(cJ) - aM)), h(O(cK), (aQ(cK) + aM)), h(P(cJ), aG), h(P(cK), aG), bt(cK)]), aM)
743+ then $Tuple2((bb(0, 0, 0, 0) ++ [h(O(cK), (aQ(cK) - aM)), h(O(cL), (aQ(cL) + aM)), h(P(cK), aG), h(P(cL), aG), bt(cL)]), aM)
736744 else throw("Strict value is not equal to itself.")
737745 }
738746
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
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
2323 func j (b,i) = h(b, (valueOrElse(a(b), 0) + i))
2424
2525
2626 func k (b,i) = StringEntry(b, i)
2727
2828
2929 func l (i,m,n) = {
3030 let o = fraction(i, m, n)
3131 let p = 3037000499
3232 let q = ((((o % p) * (n % p)) % p) == (((i % p) * (m % p)) % p))
3333 if (q)
3434 then o
3535 else (o + 1)
3636 }
3737
3838
3939 let r = 525600
4040
4141 let s = 10000000000000000
4242
4343 let t = 1000
4444
4545 let u = "assetId"
4646
4747 let v = valueOrErrorMessage(c(u), "no assetId")
4848
4949 let w = if ((v == "WAVES"))
5050 then unit
5151 else fromBase58String(v)
5252
5353 let x = (v + "_ReserveFactor")
5454
5555 let y = (v + "_CollateralFactor")
5656
5757 let z = (v + "_LiquidationThreshold")
5858
5959 let A = "account_health_overlap"
6060
6161 let B = (v + "_LiquidationPenalty")
6262
6363 let C = "configAddress"
6464
6565 let D = "aTokenId"
6666
6767 let E = "aTokenName"
6868
6969 let F = "aTokenCirculation"
7070
7171 let G = "lastUpdateHeight"
7272
7373 let H = "totalBorrow"
7474
7575 let I = "totalDeposit"
7676
7777 let J = "totalReserve"
7878
7979 let K = "storedIndex"
8080
8181 let L = "aTokenDecimals"
8282
8383 func M (N) = (N + "_aTokenBalance")
8484
8585
8686 func O (N) = (N + "_debt")
8787
8888
8989 func P (N) = (N + "_index")
9090
9191
9292 func Q (N) = (N + "_useAsCollateral")
9393
9494
9595 func R (S,w) = {
9696 let T = w
9797 if ($isInstanceOf(T, "ByteVector"))
9898 then {
9999 let U = T
100100 assetBalance(S, U)
101101 }
102102 else if ($isInstanceOf(T, "Unit"))
103103 then {
104104 let V = T
105105 wavesBalance(S).available
106106 }
107107 else throw("Match error")
108108 }
109109
110110
111111 let W = valueOrErrorMessage(a(L), "no assetDecimals")
112112
113113 let X = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, C), "reserve: no configAddress")), "invalid config address")
114114
115115 func Y (Z) = {
116116 let T = invoke(X, "opAllowed", [v, Z], nil)
117117 if ($isInstanceOf(T, "Boolean"))
118118 then {
119119 let aa = T
120120 if (aa)
121121 then true
122122 else throw("not allowed")
123123 }
124124 else throw("opAllowed: unexpected result type")
125125 }
126126
127127
128128 let ab = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(X, "main"), "no main in config")), "invalid main address")
129129
130130 func ac (ad) = if ((ad.caller != ab))
131131 then throw("only main can do")
132132 else true
133133
134134
135135 func ae (ad) = {
136136 let af = valueOrErrorMessage(getString(X, "divAdmins"), "no div admins")
137137 if (!(contains(af, toString(ad.caller))))
138138 then throw("only div admin can do")
139139 else true
140140 }
141141
142142
143143 func ag (i) = if (if ((i != "WAVES"))
144144 then (fromBase58String(i) == fromBase58String(""))
145145 else false)
146146 then throw("invalid assetId")
147147 else true
148148
149149
150150 let ah = e(isDefined(c(u)), "already initialized")
151151
152152 let ai = {
153153 let T = getString(X, "oracle_address")
154154 if ($isInstanceOf(T, "String"))
155155 then {
156156 let aj = T
157157 addressFromString(aj)
158158 }
159159 else unit
160160 }
161161
162162 let ak = {
163163 let T = invoke(valueOrErrorMessage(ai, "no oracle"), "price", [v], nil)
164164 if ($isInstanceOf(T, "Int"))
165165 then {
166166 let ad = T
167167 ad
168168 }
169169 else throw("bad oracle data")
170170 }
171171
172172 let al = height
173173
174174 let am = valueOrErrorMessage(a(G), "no lastUpdateHeight")
175175
176176 let an = fromBase58String(valueOrErrorMessage(c(D), "no aTokenId"))
177177
178178 let ao = valueOrElse(a(F), 0)
179179
180180 let ap = valueOrErrorMessage(getInteger(X, x), "no reserveFactor")
181181
182182 let aq = valueOrErrorMessage(getInteger(X, y), "no collateralFactor")
183183
184184 let ar = valueOrErrorMessage(getInteger(X, z), "no liquidationThreshold")
185185
186186 let as = valueOrErrorMessage(getInteger(X, A), "no overlapCharge")
187187
188188 let at = valueOrErrorMessage(getInteger(X, B), "no liquidationPenalty")
189189
190190 let au = valueOrElse(a(I), 0)
191191
192192 let av = valueOrElse(a(J), 0)
193193
194194 let aw = valueOrElse(a(H), 0)
195195
196196 let ax = valueOrElse(a(K), s)
197197
198198 let ay = if ((au > 0))
199199 then fraction(aw, t, au)
200200 else 0
201201
202202 let az = {
203203 let aA = getIntegerValue(X, (v + "_APoint"))
204204 let aa = getIntegerValue(X, (v + "_BPoint"))
205205 let aB = getIntegerValue(X, (v + "_CPoint"))
206206 let aC = getIntegerValue(X, (v + "_DPoint"))
207207 let aD = (fraction((aA - aB), ay, -(aa)) + aA)
208208 let aE = (fraction((aB - aC), (ay - aa), (aa - t)) + aB)
209209 if ((ay == 0))
210210 then aA
211211 else if ((ay == aa))
212212 then aB
213213 else if (if ((aa > ay))
214214 then true
215215 else (aa == t))
216216 then aD
217217 else aE
218218 }
219219
220220 let aF = if ((au == 0))
221221 then 0
222222 else fraction(fraction(aw, az, au), (t - ap), t)
223223
224224 let aG = if ((al == am))
225225 then ax
226226 else {
227227 let aH = l(az, s, (r * t))
228228 l(ax, (s + (aH * (al - am))), s)
229229 }
230230
231231 let aI = valueOrElse(getBoolean(X, ("staking_enabled_" + v)), false)
232232
233233 let aJ = {
234234 let T = w
235235 if ($isInstanceOf(T, "ByteVector"))
236236 then {
237237 let aK = T
238238 assetBalance(this, aK)
239239 }
240240 else wavesBalance(this).available
241241 }
242242
243243 func aL (aM,aN,aO) = if ((aM > aN))
244244 then throw(("not enough liquidity: " + aO))
245245 else true
246246
247247
248248 func aP (N) = valueOrElse(a(O(N)), 0)
249249
250250
251251 func aQ (N) = {
252252 let aR = aP(N)
253253 if ((aR == 0))
254254 then 0
255255 else {
256256 let aS = valueOrErrorMessage(a(P(N)), "has debt but does not have index")
257257 fraction(aR, aG, aS)
258258 }
259259 }
260260
261261
262262 let aT = fraction(aw, aG, ax)
263263
264264 let aU = (aT - aw)
265265
266266 let aV = fraction(aU, (t - ap), t)
267267
268268 let aW = (au + aV)
269269
270270 let aX = ((av + aU) - aV)
271271
272272 let aY = if (aI)
273273 then aX
274274 else min([aJ, aX])
275275
276276 func aZ (ad,w) = {
277277 let ba = ad.payments[0].amount
278278 if ((0 >= ba))
279279 then throw(("Payment is less than min allowed amount: " + toString(ba)))
280280 else if ((ad.payments[0].assetId != w))
281281 then throw((" bad asset attached: required " + v))
282282 else ba
283283 }
284284
285285
286286 func bb (bc,bd,be,bf) = {
287287 let bg = if ((aJ == bf))
288288 then unit
289289 else if (!(aI))
290290 then unit
291291 else {
292292 let bh = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(X, ("staking_config_" + v)), ("no staking address for " + v))), ("bad staking address for " + v))
293293 if ((aJ > bf))
294294 then invoke(bh, "put", nil, [AttachedPayment(w, (aJ - bf))])
295295 else invoke(bh, "get", [(bf - aJ)], nil)
296296 }
297297 if ((bg == bg))
298298 then [h(K, aG), h(G, al), h(I, (aW + bc)), h(H, (aT + bd)), h(J, (aX + be))]
299299 else throw("Strict value is not equal to itself.")
300300 }
301301
302302
303303 func bi (bj) = if ((bj == 6))
304304 then 1000000
305305 else if ((bj == 8))
306306 then 100000000
307307 else throw(("bad decimals: " + toString(bj)))
308308
309309
310310 func bk (aM) = fraction(aM, ak, bi(W))
311311
312312
313313 func bl (aM) = fraction(aM, bi(W), ak)
314314
315315
316316 func bm (bn) = if ((bn == 0))
317317 then 0
318318 else if ((ao > 0))
319319 then fraction(bn, aW, ao)
320320 else bn
321321
322322
323323 func bo (bp) = if ((bp == 0))
324324 then 0
325325 else if ((ao > 0))
326326 then fraction(bp, ao, aW)
327327 else bp
328328
329329
330330 func bq (bp) = if ((bp == 0))
331331 then 0
332332 else if ((ao > 0))
333333 then l(bp, ao, aW)
334334 else bp
335335
336336
337337 func br (bs) = valueOrElse(a(M(bs)), 0)
338338
339339
340340 func bt (bu) = BooleanEntry(Q(bu), true)
341341
342342
343343 func bv (bu) = if ((aQ(bu) > 0))
344344 then [bt(bu)]
345345 else nil
346346
347347
348348 func bw (bs,aM) = {
349349 let bx = aQ(bs)
350350 let by = bm(br(bs))
351351 let bz = min([bx, by])
352352 let bA = if ((-1 > aM))
353353 then throw("invalid collapse amount")
354354 else if (if ((bz == 0))
355355 then true
356356 else (aM == 0))
357357 then throw("nothing to collapse")
358358 else if (if ((aM == -1))
359359 then true
360360 else (aM > bz))
361361 then bz
362362 else aM
363363 let bB = bq(bA)
364364 $Tuple2((bb(-(bA), -(bA), 0, 0) ++ [j(M(bs), -(bB)), j(F, -(bB)), h(O(bs), (bx - bA)), h(P(bs), aG)]), bA)
365365 }
366366
367367
368368 func bC (N,aM) = {
369369 let bD = Y("repay")
370370 if ((bD == bD))
371371 then {
372372 let bE = aQ(N)
373373 if ((bE == bE))
374374 then {
375375 let bF = if ((aM > bE))
376376 then $Tuple4(0, -(bE), (aM - bE), [ScriptTransfer(addressFromStringValue(N), (aM - bE), w)])
377377 else $Tuple4((bE - aM), -(aM), 0, nil)
378378 let bG = bF._1
379379 let bH = bF._2
380380 let bI = bF._3
381381 let bJ = bF._4
382382 let bK = (aM - bI)
383383 $Tuple2(((bb(0, bH, 0, bI) ++ bJ) ++ [h(O(N), bG), h(P(N), aG)]), bK)
384384 }
385385 else throw("Strict value is not equal to itself.")
386386 }
387387 else throw("Strict value is not equal to itself.")
388388 }
389389
390390
391391 func bL () = {
392392 let aA = getIntegerValue(X, (v + "_APoint"))
393393 let aa = getIntegerValue(X, (v + "_BPoint"))
394394 let aB = getIntegerValue(X, (v + "_CPoint"))
395395 let aC = getIntegerValue(X, (v + "_DPoint"))
396396 ((((((((((((((("ABCD: " + toString(aA)) + ";") + toString(aa)) + ";") + toString(aB)) + ";") + toString(aC)) + ", reserveFactor: ") + toString(ap)) + ", collateralFactor: ") + toString(aq)) + ", liquidationThreshold: ") + toString(ar)) + ", liquidationPenalty: ") + toString(at))
397397 }
398398
399399
400400 func bM () = ((((((((((((((((((((((((((("currentTotalDeposit: " + toString(aW)) + ", storedTotalDeposit: ") + toString(au)) + ", currentTotalDebt: ") + toString(aT)) + ", storedTotalDebt: ") + toString(aw)) + ", currentTotalReserve: ") + toString(aX)) + ", storedTotalReserve: ") + toString(av)) + ", currentIndex:") + toString(aG)) + ", storedIndex: ") + toString(ax)) + ", lastUpdateHeight: ") + toString(am)) + ", utilization: ") + toString(ay)) + ", aTokenCirculation: ") + toString(ao)) + ", aTokenPrice: ") + toString(bm(pow(10, 0, W, 0, 0, FLOOR)))) + ", APR: ") + toString(az)) + ", APY: ") + toString(aF))
401401
402402
403403 func bN (bu) = {
404404 let bO = br(bu)
405405 let bP = R(addressFromStringValue(bu), an)
406406 ((((((((((((((((("currentDebt: " + toString(aQ(bu))) + ", storedDebt: ") + toString(valueOrElse(a(O(bu)), 0))) + ", currentDeposit: ") + toString(bm(bO))) + ", aTokenContractBalance: ") + toString(bO)) + ", aTokenWalletBalance: ") + toString(bP)) + ", walletStake: ") + toString(bm(bP))) + ", assetWalletBalance: ") + toString(R(addressFromStringValue(bu), w))) + ", useAsCollateral: ") + toString(valueOrElse(getBoolean(this, Q(bu)), true))) + ", storedIndex: ") + toString(valueOrElse(a(P(bu)), 0)))
407407 }
408408
409409
410410 func bQ () = ((((((((((((((((((((((("storedTotalDeposit: " + toString(au)) + ", storedTotalDebt: ") + toString(aw)) + ", storedTotalReserve: ") + toString(av)) + ", storedIndex: ") + toString(ax)) + ", lastUpdateHeight: ") + toString(am)) + ", currentTotalDeposit: ") + toString(aW)) + ", currentTotalDebt: ") + toString(aT)) + ", currentTotalReserve: ") + toString(aX)) + ", currentIndex: ") + toString(aG)) + ", currentHeight: ") + toString(al)) + ", aTokenCirculation: ") + toString(ao)) + ", aTokenPrice: ") + toString(bm(pow(10, 0, W, 0, 0, FLOOR))))
411411
412412
413413 func bR (bu) = {
414414 let bS = br(bu)
415415 let bT = bm(bS)
416416 let bx = aQ(bu)
417417 if ((al == am))
418418 then $Tuple4(au, aw, bT, bx)
419419 else $Tuple4(aW, aT, bT, bx)
420420 }
421421
422422
423423 func bU (ad,bu,aM,bV) = {
424424 let bW = ((au + av) - aw)
425425 let bD = if (if (if (ac(ad))
426426 then aL(aM, bW, "funds in use")
427427 else false)
428428 then e((-1 > aM), "invalid amount")
429429 else false)
430430 then Y("withdraw")
431431 else false
432432 if ((bD == bD))
433433 then {
434434 let bX = if ((aM == -1))
435435 then {
436436 let bS = br(bu)
437437 $Tuple2(bS, bm(bS))
438438 }
439439 else $Tuple2(bq(aM), aM)
440440 let bB = bX._1
441441 let bY = bX._2
442442 $Tuple2((bb(-(bY), 0, 0, bY) ++ [ScriptTransfer(if (bV)
443443 then ab
444444 else addressFromStringValue(bu), bY, w), j(M(bu), -(bB)), j(F, -(bB))]), bY)
445445 }
446446 else throw("Strict value is not equal to itself.")
447447 }
448448
449449
450+func bZ (Z,bu,ad) = {
451+ let bD = if (ac(ad))
452+ then Y(Z)
453+ else false
454+ if ((bD == bD))
455+ then {
456+ let bn = aZ(ad, an)
457+ $Tuple2(((bb(0, 0, 0, 0) ++ [j(M(bu), bn), Burn(an, bn)]) ++ bv(bu)), bm(bn))
458+ }
459+ else throw("Strict value is not equal to itself.")
460+ }
461+
462+
450463 @Callable(ad)
451464 func getReserveDivsInfo () = $Tuple2(nil, $Tuple3(aY, v, (aX - aY)))
452465
453466
454467
455468 @Callable(ad)
456469 func getCurrentTotals (bu) = $Tuple2(nil, bR(bu))
457470
458471
459472
460473 @Callable(ad)
461-func getCurrentTotals2 (bZ,ca) = {
462- let cb = bR(bZ)
463- let cc = cb._1
464- let cd = cb._2
465- let ce = cb._3
466- let cf = cb._4
467- let cg = bR(ca)
468- let ch = cg._1
469- let ci = cg._2
470- let cj = cg._3
471- let ck = cg._4
472- $Tuple2(nil, $Tuple6(cc, cd, ce, cf, cj, ck))
474+func getCurrentTotals2 (ca,cb) = {
475+ let cc = bR(ca)
476+ let cd = cc._1
477+ let ce = cc._2
478+ let cf = cc._3
479+ let cg = cc._4
480+ let ch = bR(cb)
481+ let ci = ch._1
482+ let cj = ch._2
483+ let ck = ch._3
484+ let cl = ch._4
485+ $Tuple2(nil, $Tuple6(cd, ce, cf, cg, ck, cl))
473486 }
474487
475488
476489
477490 @Callable(ad)
478491 func advise () = $Tuple2(nil, ((((("reserveAddress: " + toString(this)) + ", ") + bL()) + ", ") + bM()))
479492
480493
481494
482495 @Callable(ad)
483496 func adviseUser (bu) = {
484- let cl = bk(aT)
485- let cm = bk(aW)
486- let cn = valueOrElse(getBoolean(this, Q(bu)), true)
487- let co = if (cn)
488- then cm
497+ let cm = bk(aT)
498+ let cn = bk(aW)
499+ let co = valueOrElse(getBoolean(this, Q(bu)), true)
500+ let cp = if (co)
501+ then cn
489502 else 0
490- let cp = min([cl, co])
491- let cq = l(cp, as, t)
492- let cr = if ((cl > co))
503+ let cq = min([cm, cp])
504+ let cr = l(cq, as, t)
505+ let cs = if ((cm > cp))
493506 then 0
494- else fraction((co - cl), aq, t)
495- let cs = if ((cl > co))
496- then (fraction((cl - co), t, ar) + cq)
497- else cq
498- let ct = ((((((((("reserveAddress: " + toString(this)) + ", currentDebtUsd: ") + toString(cl)) + ", currentDepositUsd: ") + toString(cm)) + ", bp: ") + toString(cr)) + ", bpu: ") + toString(cs))
499- $Tuple2(nil, ((ct + ", ") + bN(bu)))
507+ else fraction((cp - cm), aq, t)
508+ let ct = if ((cm > cp))
509+ then (fraction((cm - cp), t, ar) + cr)
510+ else cr
511+ let cu = ((((((((("reserveAddress: " + toString(this)) + ", currentDebtUsd: ") + toString(cm)) + ", currentDepositUsd: ") + toString(cn)) + ", bp: ") + toString(cs)) + ", bpu: ") + toString(ct))
512+ $Tuple2(nil, ((cu + ", ") + bN(bu)))
500513 }
501514
502515
503516
504517 @Callable(ad)
505518 func addInterest () = if ((ad.payments[0].assetId != w))
506519 then throw("can't add interest with unrelated token")
507520 else bb(ad.payments[0].amount, 0, 0, 0)
508521
509522
510523
511524 @Callable(ad)
512525 func addToReserve () = if ((ad.payments[0].assetId != w))
513526 then throw("can't add interest with unrelated token")
514527 else bb(0, 0, ad.payments[0].amount, 0)
515528
516529
517530
518531 @Callable(ad)
519532 func withdrawFromReserve (bA) = {
520533 let bD = ae(ad)
521534 if ((bD == bD))
522535 then {
523- let cu = if ((bA == -1))
536+ let cv = if ((bA == -1))
524537 then aY
525538 else bA
526- $Tuple2((bb(0, 0, -(cu), cu) ++ [ScriptTransfer(ad.caller, cu, w)]), cu)
539+ $Tuple2((bb(0, 0, -(cv), cv) ++ [ScriptTransfer(ad.caller, cv, w)]), cv)
527540 }
528541 else throw("Strict value is not equal to itself.")
529542 }
530543
531544
532545
533546 @Callable(ad)
534547 func forceUpdate () = {
535- let cv = valueOrErrorMessage(getString(X, "admin"), "reserve:no admin in config")
536- if ((toString(ad.caller) != cv))
548+ let cw = valueOrErrorMessage(getString(X, "admin"), "reserve:no admin in config")
549+ if ((toString(ad.caller) != cw))
537550 then throw("only admin can do")
538551 else bb(0, 0, 0, 0)
539552 }
540553
541554
542555
543556 @Callable(ad)
544-func initialize (cw,cx,cy,cz,cA) = {
557+func initialize (cx,cy,cz,cA,cB) = {
545558 let bD = if (ah)
546- then ag(cx)
559+ then ag(cy)
547560 else false
548561 if ((bD == bD))
549562 then {
550- let cB = Issue(cy, cz, 0, cA, true)
551-[cB, h(L, cA), k(E, cy), k(u, cx), k(C, cw), k(D, toBase58String(calculateAssetId(cB)))]
563+ let cC = Issue(cz, cA, 0, cB, true)
564+[cC, h(L, cB), k(E, cz), k(u, cy), k(C, cx), k(D, toBase58String(calculateAssetId(cC)))]
552565 }
553566 else throw("Strict value is not equal to itself.")
554567 }
555568
556569
557570
558571 @Callable(ad)
559572 func initialize2 () = if ((ad.caller != this))
560573 then throw("only self can continue")
561574 else [h(G, al)]
562575
563576
564577
565578 @Callable(ad)
566579 func userDepositUSD (bs) = $Tuple2(nil, bk(bm(br(bs))))
567580
568581
569582
570583 @Callable(ad)
571584 func userDebtUSD (bs) = $Tuple2(nil, bk(aQ(bs)))
572585
573586
574587
575588 @Callable(ad)
576589 func userBalance (bs) = {
577590 let bS = br(bs)
578591 let bT = bm(bS)
579592 let bx = aQ(bs)
580593 $Tuple2(nil, $Tuple6(bS, bT, bk(bT), bx, bk(bx), valueOrElse(getBoolean(this, Q(bs)), true)))
581594 }
582595
583596
584597
585598 @Callable(ad)
586599 func userDebt (bs) = {
587600 let bx = aQ(bs)
588- let cC = bk(bx)
589- $Tuple2(nil, $Tuple2(bx, cC))
601+ let cD = bk(bx)
602+ $Tuple2(nil, $Tuple2(bx, cD))
590603 }
591604
592605
593606
594607 @Callable(ad)
595608 func assetUsdValue (bp) = $Tuple2(nil, bk(bp))
596609
597610
598611
599612 @Callable(ad)
600613 func repayFor (N) = {
601614 let bD = ac(ad)
602615 if ((bD == bD))
603616 then bC(N, aZ(ad, w))
604617 else throw("Strict value is not equal to itself.")
605618 }
606619
607620
608621
609622 @Callable(ad)
610-func depositFor (cD,cE) = {
623+func depositFor (cE,cF) = {
611624 let bD = if (ac(ad))
612625 then Y("deposit")
613626 else false
614627 if ((bD == bD))
615- then if (if ((aQ(cD) > 0))
616- then !(cE)
628+ then if (if ((aQ(cE) > 0))
629+ then !(cF)
617630 else false)
618631 then throw("can't disable use as collateral for asset with open debt")
619632 else {
620633 let aM = aZ(ad, w)
621634 let bn = bo(aM)
622- (bb(aM, 0, 0, 0) ++ [j(F, bn), j(M(cD), bn), BooleanEntry(Q(cD), cE)])
635+ (bb(aM, 0, 0, 0) ++ [j(F, bn), j(M(cE), bn), BooleanEntry(Q(cE), cF)])
623636 }
624637 else throw("Strict value is not equal to itself.")
625638 }
626639
627640
628641
629642 @Callable(ad)
630643 func withdrawFor (bs,aM) = bU(ad, bs, aM, false)
631644
632645
633646
634647 @Callable(ad)
635648 func withdrawToMain (bu,aM) = if ((aM != -1))
636649 then throw("reserve: withdrawToMain amount -1 only")
637650 else bU(ad, bu, aM, true)
638651
639652
640653
641654 @Callable(ad)
642-func replenishWithAtokenFor (bu) = {
643- let bD = if (ac(ad))
644- then Y("atokens")
655+func replenishWithAtokenFor (bu) = bZ("replenish_atokens", bu, ad)
656+
657+
658+
659+@Callable(ad)
660+func replenishForRepayWithAtokenFor (bu) = bZ("repay_atokens", bu, ad)
661+
662+
663+
664+@Callable(ad)
665+func borrowFor (bs,cG) = {
666+ let bD = if (if (ac(ad))
667+ then aL(cG, (au - aw), "too much borrow requested")
668+ else false)
669+ then Y("borrow")
645670 else false
646671 if ((bD == bD))
647672 then {
648- let bn = aZ(ad, an)
649- $Tuple2(((bb(0, 0, 0, 0) ++ [j(M(bu), bn), Burn(an, bn)]) ++ bv(bu)), bm(bn))
673+ let bE = aQ(bs)
674+ let bG = (bE + cG)
675+ (bb(0, cG, 0, cG) ++ [h(O(bs), bG), bt(bs), h(P(bs), aG), ScriptTransfer(addressFromStringValue(bs), cG, w)])
650676 }
651677 else throw("Strict value is not equal to itself.")
652678 }
653679
654680
655681
656682 @Callable(ad)
657-func borrowFor (bs,cF) = {
658- let bD = if (if (ac(ad))
659- then aL(cF, (au - aw), "too much borrow requested")
683+func mintAtokenFor (bs,cH) = {
684+ let cI = br(bs)
685+ let aM = if ((cH == -1))
686+ then cI
687+ else cH
688+ let bD = if (if (if (ac(ad))
689+ then Y("mint_atokens")
660690 else false)
661- then Y("borrow")
662- else false
663- if ((bD == bD))
664- then {
665- let bE = aQ(bs)
666- let bG = (bE + cF)
667- (bb(0, cF, 0, cF) ++ [h(O(bs), bG), bt(bs), h(P(bs), aG), ScriptTransfer(addressFromStringValue(bs), cF, w)])
668- }
669- else throw("Strict value is not equal to itself.")
670- }
671-
672-
673-
674-@Callable(ad)
675-func mintAtokenFor (bs,cG) = {
676- let cH = br(bs)
677- let aM = if ((cG == -1))
678- then cH
679- else cG
680- let bD = if (if (if (ac(ad))
681- then Y("atokens")
691+ then e((-1 > cH), "invalid amountToMint")
682692 else false)
683- then e((-1 > cG), "invalid amountToMint")
684- else false)
685- then e((aM > cH), ("Trying to mint more than available, max: " + toString(cH)))
693+ then e((aM > cI), ("Trying to mint more than available, max: " + toString(cI)))
686694 else false
687695 if ((bD == bD))
688696 then $Tuple2((bb(0, 0, 0, 0) ++ [j(M(bs), -(aM)), Reissue(an, aM, true), ScriptTransfer(addressFromStringValue(bs), aM, an)]), bm(aM))
689697 else throw("Strict value is not equal to itself.")
690698 }
691699
692700
693701
694702 @Callable(ad)
695703 func redeemAtokensFor (bu) = {
696704 let bD = if (ac(ad))
697- then Y("atokens")
705+ then Y("redeem_atokens")
698706 else false
699707 if ((bD == bD))
700708 then {
701709 let bn = aZ(ad, an)
702- let cI = bm(bn)
703- $Tuple2((bb(-(cI), 0, 0, cI) ++ [ScriptTransfer(addressFromStringValue(bu), cI, w), j(F, -(bn)), Burn(an, bn)]), cI)
710+ let cJ = bm(bn)
711+ $Tuple2((bb(-(cJ), 0, 0, cJ) ++ [ScriptTransfer(addressFromStringValue(bu), cJ, w), j(F, -(bn)), Burn(an, bn)]), cJ)
704712 }
705713 else throw("Strict value is not equal to itself.")
706714 }
707715
708716
709717
710718 @Callable(ad)
711-func transferATokensFor (cJ,cK,cL) = {
719+func transferATokensFor (cK,cL,cM) = {
712720 let bD = if (ac(ad))
713721 then Y("transfer_debt")
714722 else false
715723 if ((bD == bD))
716724 then {
717- let cM = bl(cL)
718- let bS = bo(cM)
719- let cN = br(cJ)
720- if ((bS > cN))
721- then throw((((((((((("transferAtokensFor error:" + " transfer.valueUsd: ") + toString(cL)) + " transfer.assets: ") + toString(cM)) + " transfer.atokens: ") + toString(bS)) + " from.atokens: ") + toString(cN)) + " at ") + toString(this)))
722- else $Tuple2(((bb(0, 0, 0, 0) ++ [j(M(cJ), -(bS)), j(M(cK), bS)]) ++ bv(cK)), bm(bS))
725+ let cN = bl(cM)
726+ let bS = bo(cN)
727+ let cO = br(cK)
728+ if ((bS > cO))
729+ then throw((((((((((("transferAtokensFor error:" + " transfer.valueUsd: ") + toString(cM)) + " transfer.assets: ") + toString(cN)) + " transfer.atokens: ") + toString(bS)) + " from.atokens: ") + toString(cO)) + " at ") + toString(this)))
730+ else $Tuple2(((bb(0, 0, 0, 0) ++ [j(M(cK), -(bS)), j(M(cL), bS)]) ++ bv(cL)), bm(bS))
723731 }
724732 else throw("Strict value is not equal to itself.")
725733 }
726734
727735
728736
729737 @Callable(ad)
730-func transferDebtFor (cJ,cK,aM) = {
738+func transferDebtFor (cK,cL,aM) = {
731739 let bD = if (ac(ad))
732740 then Y("transfer_debt")
733741 else false
734742 if ((bD == bD))
735- then $Tuple2((bb(0, 0, 0, 0) ++ [h(O(cJ), (aQ(cJ) - aM)), h(O(cK), (aQ(cK) + aM)), h(P(cJ), aG), h(P(cK), aG), bt(cK)]), aM)
743+ then $Tuple2((bb(0, 0, 0, 0) ++ [h(O(cK), (aQ(cK) - aM)), h(O(cL), (aQ(cL) + aM)), h(P(cK), aG), h(P(cL), aG), bt(cL)]), aM)
736744 else throw("Strict value is not equal to itself.")
737745 }
738746
739747
740748
741749 @Callable(ad)
742750 func disableUseAsCollateralFor (bs) = {
743751 let bD = if (ac(ad))
744752 then Y("use_as_col")
745753 else false
746754 if ((bD == bD))
747755 then if ((aQ(bs) > 0))
748756 then throw("can't disable collateral for asset with open debt")
749757 else (bb(0, 0, 0, 0) ++ [BooleanEntry(Q(bs), false)])
750758 else throw("Strict value is not equal to itself.")
751759 }
752760
753761
754762
755763 @Callable(ad)
756764 func enableUseAsCollateral () = {
757765 let bD = Y("use_as_col")
758766 if ((bD == bD))
759767 then (bb(0, 0, 0, 0) ++ [bt(toString(ad.caller))])
760768 else throw("Strict value is not equal to itself.")
761769 }
762770
763771
764772
765773 @Callable(ad)
766774 func collapseFor (bu) = {
767775 let bD = if (ac(ad))
768776 then Y("force_collapse")
769777 else false
770778 if ((bD == bD))
771779 then bw(bu, -1)
772780 else throw("Strict value is not equal to itself.")
773781 }
774782
775783
776784
777785 @Callable(ad)
778786 func collapseForAmount (bu,aM) = {
779787 let bD = if (ac(ad))
780788 then Y("collapse")
781789 else false
782790 if ((bD == bD))
783791 then bw(bu, aM)
784792 else throw("Strict value is not equal to itself.")
785793 }
786794
787795

github/deemru/w8io/6500d08 
118.98 ms