tx · 5YdwjdmbsLb2JEDf8wDCL6akoENR8wpxrPuiSRFpuTWC

3N8rRK2qY9gks7UiTZbno3oU9ZxHsjf6Nxg:  -0.03500000 Waves

2022.09.01 20:59 [2210394] smart account 3N8rRK2qY9gks7UiTZbno3oU9ZxHsjf6Nxg > SELF 0.00000000 Waves

{ "type": 13, "id": "5YdwjdmbsLb2JEDf8wDCL6akoENR8wpxrPuiSRFpuTWC", "fee": 3500000, "feeAssetId": null, "timestamp": 1662055176316, "version": 2, "chainId": 84, "sender": "3N8rRK2qY9gks7UiTZbno3oU9ZxHsjf6Nxg", "senderPublicKey": "BGaHqWWh2PA55UDpG3EMuoSRrrPo348kqpXax829kygz", "proofs": [ "WLmrD3Uarf99ReQspHyNookrWfuAV89uTnhuJSDUFvEqrpU2RNtb9H4qqCPsxHE65adekF4TDJQ4iXQq3s5bjBL", "475Y4ec6HbZi8uN7BECwm78sx7GSaYE74Ya3Djama2wtm4DUVhiANbpDtAHjJWfJ9M5gYeJdXcTmXFcR4v9sgiFc" ], "script": "base64:BgJXCAISBAoCEQESBQoDCAEEEgQKAgEEEgMKAQESBgoECAgBCBIECgIIARIECgIRARIFCgMBCAgSBQoDCAEBEgASABIECgIRBBIECgIBARIAEgASABIDCgEBXAAHdmVyc2lvbgIFMy4wLjAACVBSRUNJU0lPTgDAhD0ABU1BWF9BAMCEPQAMTUFYX0FfQ0hBTkdFAAoACERFQ0lNQUxTAAYADU1JTl9SQU1QX1RJTUUJAGkCAICjBQA8AAdrQXNzZXRzAglhc3NldF9pZHMADWtBc3NldEJhbGFuY2UCCF9iYWxhbmNlAAdrQWN0aXZlAgZhY3RpdmUABmtDYXVzZQIOc2h1dGRvd25fY2F1c2UADWtTaGFyZUFzc2V0SWQCDnNoYXJlX2Fzc2V0X2lkABFrU2hhcmVBc3NldFN1cHBseQISc2hhcmVfYXNzZXRfc3VwcGx5AARrRmVlAgpjb21taXNzaW9uABJrREFwcFRocmVzaG9sZENvZWYCEWRBcHBUaHJlc2hvbGRDb2VmAAxrVVNETkFkZHJlc3MCGHN0YWtpbmdfdXNkbm5zYnRfYWRkcmVzcwAKa0Rpc2NvdW50cwIJZGlzY291bnRzAA9rRGlzY291bnRWYWx1ZXMCD2Rpc2NvdW50X3ZhbHVlcwAOa1VzZXJTd29wSW5Hb3YCDF9TV09QX2Ftb3VudAANa0ZpcnN0SGFydmVzdAINZmlyc3RfaGFydmVzdAATa0ZpcnN0SGFydmVzdEhlaWdodAIUZmlyc3RfaGFydmVzdF9oZWlnaHQAC2tTaGFyZUxpbWl0AhxzaGFyZV9saW1pdF9vbl9maXJzdF9oYXJ2ZXN0AAtrQmFzZVBlcmlvZAILYmFzZV9wZXJpb2QADWtQZXJpb2RMZW5ndGgCDXBlcmlvZF9sZW5ndGgADGtTdGFydEhlaWdodAIMc3RhcnRfaGVpZ2h0AA1rQWRtaW5QdWJLZXkxAgthZG1pbl9wdWJfMQANa0FkbWluUHViS2V5MgILYWRtaW5fcHViXzIADWtBZG1pblB1YktleTMCC2FkbWluX3B1Yl8zABJrQWRtaW5JbnZva2VQdWJLZXkCEGFkbWluX2ludm9rZV9wdWIAEGtNb25leUJveEFkZHJlc3MCEW1vbmV5X2JveF9hZGRyZXNzAAtrR292QWRkcmVzcwISZ292ZXJuYW5jZV9hZGRyZXNzAA5rVm90aW5nQWRkcmVzcwIOdm90aW5nX2FkZHJlc3MAD2tGYXJtaW5nQWRkcmVzcwIPZmFybWluZ19hZGRyZXNzAAZvcmFjbGUJAQdBZGRyZXNzAQEaAVTpRaoekC86rvG6DuYumpJfGpiE4fNiswgBE2dldEJhc2U1OEZyb21PcmFjbGUBA2tleQQHJG1hdGNoMAkAnQgCBQZvcmFjbGUFA2tleQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEBnN0cmluZwUHJG1hdGNoMAkA2QQBBQZzdHJpbmcEB25vdGhpbmcFByRtYXRjaDAJAAIBCQCsAgIFA2tleQIIaXMgZW1wdHkADGFkbWluUHViS2V5MQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQ1rQWRtaW5QdWJLZXkxAAxhZG1pblB1YktleTIJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUNa0FkbWluUHViS2V5MgAMYWRtaW5QdWJLZXkzCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDWtBZG1pblB1YktleTMAEWFkbWluUHViS2V5SW52b2tlCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFEmtBZG1pbkludm9rZVB1YktleQAPbW9uZXlCb3hBZGRyZXNzCQEHQWRkcmVzcwEJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUQa01vbmV5Qm94QWRkcmVzcwAKZ292QWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFC2tHb3ZBZGRyZXNzABJzdGFraW5nVVNETkFkZHJlc3MJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQxrVVNETkFkZHJlc3MADXZvdGluZ0FkZHJlc3MJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQ5rVm90aW5nQWRkcmVzcwAOZmFybWluZ0FkZHJlc3MJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQ9rRmFybWluZ0FkZHJlc3MAEmNhcE1vbmV5Qm94QWRkcmVzcwkBB0FkZHJlc3MBARoBVF5pahfpqiB9Po+vYLtEzvHovs7eZZxS8wAEVVNETgEgbySjyqsw3FIpmOgsYVruWn8jTcItdbvpnapU4NLQB8EADXN0YWtpbmdBc3NldHMJAMwIAgkA2AQBBQRVU0ROBQNuaWwACmJhc2VQZXJpb2QJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQ12b3RpbmdBZGRyZXNzBQtrQmFzZVBlcmlvZAIRRW1wdHkga0Jhc2VQZXJpb2QAC3N0YXJ0SGVpZ2h0CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUNdm90aW5nQWRkcmVzcwUMa1N0YXJ0SGVpZ2h0AhJFbXB0eSBrU3RhcnRIZWlnaHQADHBlcmlvZExlbmd0aAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFDXZvdGluZ0FkZHJlc3MFDWtQZXJpb2RMZW5ndGgCE0VtcHR5IGtQZXJpb2RMZW5ndGgAFWZpcnN0SGFydmVzdEVuZFBlcmlvZAkAZAIJAGQCBQpiYXNlUGVyaW9kCQBpAgkAZQIFBmhlaWdodAULc3RhcnRIZWlnaHQFDHBlcmlvZExlbmd0aAADAAZhY3RpdmUJARFAZXh0ck5hdGl2ZSgxMDUxKQIFBHRoaXMFB2tBY3RpdmUADHNoYXJlQXNzZXRJZAkA2QQBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBQ1rU2hhcmVBc3NldElkAAtzaGFyZVN1cHBseQkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwURa1NoYXJlQXNzZXRTdXBwbHkACWZlZVNjYWxlNgDAhD0AA2ZlZQkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwUEa0ZlZQANZmVlR292ZXJuYW5jZQkAawMAKAUJZmVlU2NhbGU2AGQACWluaXRpYWxfQQkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwIJaW5pdGlhbF9BAAhmdXR1cmVfQQkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwIIZnV0dXJlX0EADmluaXRpYWxfQV90aW1lCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMCDmluaXRpYWxfQV90aW1lAAAADWZ1dHVyZV9BX3RpbWUJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwINZnV0dXJlX0FfdGltZQAAAAhhc3NldElkcwkAtQkCCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBQdrQXNzZXRzAgEsAAZuQ29pbnMJAJADAQUIYXNzZXRJZHMBB3N1c3BlbmQBBWNhdXNlCQDMCAIJAQxCb29sZWFuRW50cnkCBQdrQWN0aXZlBwkAzAgCCQELU3RyaW5nRW50cnkCBQZrQ2F1c2UFBWNhdXNlBQNuaWwBDXRocm93SXNBY3RpdmUACQACAQIWREFwcCBpcyBhbHJlYWR5IGFjdGl2ZQEIaXNBY3RpdmUAAwUGYWN0aXZlBQR1bml0CQACAQIfREFwcCBpcyBpbmFjdGl2ZSBhdCB0aGlzIG1vbWVudAELaXNBZG1pbkNhbGwBAWkDCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQxhZG1pblB1YktleTEJAMwIAgUMYWRtaW5QdWJLZXkyCQDMCAIFDGFkbWluUHViS2V5MwUDbmlsCAUBaQ9jYWxsZXJQdWJsaWNLZXkFBHVuaXQJAAIBAiFPbmx5IGFkbWluIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24BCmlzU2VsZkNhbGwBAWkDCQAAAgUEdGhpcwgFAWkGY2FsbGVyBQR1bml0CQACAQIrT25seSBjb250cmFjdCBpdHNlbGYgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgAEYmlnMgkAtgIBAAIADmJsb2NrVGltZXN0YW1wBQZoZWlnaHQBBmFzc2VydAEBYQMFAWEHBgEUY2FsY3VsYXRlRmVlRGlzY291bnQBCHVzZXJBZGRyBApzd29wQW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFCmdvdkFkZHJlc3MJAKwCAgkApQgBBQh1c2VyQWRkcgUOa1VzZXJTd29wSW5Hb3YAAAQOZGlzY291bnRWYWx1ZXMJALUJAgkBEUBleHRyTmF0aXZlKDEwNTMpAgUGb3JhY2xlBQ9rRGlzY291bnRWYWx1ZXMCASwECWRpc2NvdW50cwkAtQkCCQERQGV4dHJOYXRpdmUoMTA1MykCBQZvcmFjbGUFCmtEaXNjb3VudHMCASwDAwkAZwIFCnN3b3BBbW91bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwAACQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmRpc2NvdW50VmFsdWVzAAEFCnN3b3BBbW91bnQHCQBlAgUJZmVlU2NhbGU2CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJZGlzY291bnRzAAADAwkAZwIFCnN3b3BBbW91bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwABCQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmRpc2NvdW50VmFsdWVzAAIFCnN3b3BBbW91bnQHCQBlAgUJZmVlU2NhbGU2CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJZGlzY291bnRzAAEDAwkAZwIFCnN3b3BBbW91bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwACCQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmRpc2NvdW50VmFsdWVzAAMFCnN3b3BBbW91bnQHCQBlAgUJZmVlU2NhbGU2CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJZGlzY291bnRzAAIDAwkAZwIFCnN3b3BBbW91bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwADCQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmRpc2NvdW50VmFsdWVzAAQFCnN3b3BBbW91bnQHCQBlAgUJZmVlU2NhbGU2CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJZGlzY291bnRzAAMDCQBnAgUKc3dvcEFtb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmRpc2NvdW50VmFsdWVzAAQJAGUCBQlmZWVTY2FsZTYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQlkaXNjb3VudHMABAUJZmVlU2NhbGU2AQJfQQAEAnQxBQ1mdXR1cmVfQV90aW1lBAJBMQUIZnV0dXJlX0EDCQBmAgUCdDEFDmJsb2NrVGltZXN0YW1wBAJBMAUJaW5pdGlhbF9BBAJ0MAUOaW5pdGlhbF9BX3RpbWUDCQBmAgUCQTEFAkEwCQBkAgUCQTAJAGkCCQBoAgkAZQIFAkExBQJBMAkAZQIFDmJsb2NrVGltZXN0YW1wBQJ0MAkAZQIFAnQxBQJ0MAkAZQIFAkEwCQBpAgkAaAIJAGUCBQJBMAUCQTEJAGUCBQ5ibG9ja1Rp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MDUwOTEwNTczAl8yBAx4cF9yZWR1Y2VkX2kJAJEDAgUKeHBfcmVkdWNlZAUBaQQCZHkJAGUCCQBlAgUMeHBfcmVkdWNlZF9pCQEHZ2V0X3lfRAQFA2FtcAUBaQUKeHBfcmVkdWNlZAUCRDEAAQkAlAoCBQJkeQkAZQIFBGR5XzAFAmR5AQ1nZXRTdHJBc3NldElkAQdhc3NldElkBAckbWF0Y2gwBQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAmlkBQckbWF0Y2gwCQDYBAEFAmlkAwkAAQIFByRtYXRjaDACBFVuaXQEBXdhdmVzBQckbWF0Y2gwAgVXQVZFUwkAAgECC01hdGNoIGVycm9yARhjYWxjU3Rha2luZ0Z1bmNBbmRBZGRyZXMCBXN0YWtlB2Fzc2V0SWQDBQVzdGFrZQkAlAoCAgxsb2NrTmV1dHJpbm8FEnN0YWtpbmdVU0ROQWRkcmVzcwkAlAoCAg51bmxvY2tOZXV0cmlubwUSc3Rha2luZ1VTRE5BZGRyZXNzARFjYWxjU3Rha2luZ1BhcmFtcwMFc3Rha2UGYW1vdW50B2Fzc2V0SWQDBQVzdGFrZQQNJHQwMTExMzcxMTIwMwkBGGNhbGNTdGFraW5nRnVuY0FuZEFkZHJlcwIFBXN0YWtlBQdhc3NldElkBARjYWxsCAUNJHQwMTExMzcxMTIwMwJfMQQLc3Rha2luZ0FkZHIIBQ0kdDAxMTEzNzExMjAzAl8yCQCWCgQFBGNhbGwFC3N0YWtpbmdBZGRyBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFB2Fzc2V0SWQFBmFtb3VudAUDbmlsBA0kdDAxMTI4OTExMzU1CQEYY2FsY1N0YWtpbmdGdW5jQW5kQWRkcmVzAgUFc3Rha2UFB2Fzc2V0SWQEBGNhbGwIBQ0kdDAxMTI4OTExMzU1Al8xBAtzdGFraW5nQWRkcggFDSR0MDExMjg5MTEzNTUCXzIJAJYKBAUEY2FsbAULc3Rha2luZ0FkZHIJAMwIAgUGYW1vdW50CQDMCAIJANgEAQUHYXNzZXRJZAUDbmlsBQNuaWwBBXN0YWtlAgZhbW91bnQNYXNzZXRJZFN0cmluZwMJAQ9jb250YWluc0VsZW1lbnQCBQ1zdGFraW5nQXNzZXRzBQ1hc3NldElkU3RyaW5nBA0kdDAxMTU0MjExNjQ0CQERY2FsY1N0YWtpbmdQYXJhbXMDBgUGYW1vdW50CQDZBAEFDWFzc2V0SWRTdHJpbmcEBGNhbGwIBQ0kdDAxMTU0MjExNjQ0Al8xBARhZGRyCAUNJHQwMTE1NDIxMTY0NAJfMgQGcGFyYW1zCAUNJHQwMTE1NDIxMTY0NAJfMwQIcGF5bWVudHMIBQ0kdDAxMTU0MjExNjQ0Al80CQD8BwQFBGFkZHIFBGNhbGwFBnBhcmFtcwUIcGF5bWVudHMAAAEHdW5zdGFrZQIGYW1vdW50DWFzc2V0SWRTdHJpbmcDCQEPY29udGFpbnNFbGVtZW50AgUNc3Rha2luZ0Fzc2V0cwUNYXNzZXRJZFN0cmluZwQNJHQwMTE4MjkxMTkzMgkBEWNhbGNTdGFraW5nUGFyYW1zAwcFBmFtb3VudAkA2QQBBQ1hc3NldElkU3RyaW5nBARjYWxsCAUNJHQwMTE4MjkxMTkzMgJfMQQEYWRkcggFDSR0MDExODI5MTE5MzICXzIEBnBhcmFtcwgFDSR0MDExODI5MTE5MzICXzMECHBheW1lbnRzCAUNJHQwMTE4MjkxMTkzMgJfNAkA/AcEBQRhZGRyBQRjYWxsBQZwYXJhbXMFCHBheW1lbnRzAAABDHN0YWtlZEFtb3VudAEHYXNzZXRJZAQWc3Rha2VkQW1vdW50Q2FsY3VsYXRlZAQHJG1hdGNoMAUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBANhSWQFByRtYXRjaDADCQAAAgUDYUlkBQRVU0ROCQCaCAIFEnN0YWtpbmdVU0ROQWRkcmVzcwkArAICCQCsAgIJAKwCAgIMcnBkX2JhbGFuY2VfCQDYBAEFA2FJZAIBXwkApQgBBQR0aGlzAAADCQABAgUHJG1hdGNoMAIEVW5pdAAACQACAQILTWF0Y2ggZXJyb3IEByRtYXRjaDAFFnN0YWtlZEFtb3VudENhbGN1bGF0ZWQDCQABAgUHJG1hdGNoMAIDSW50BAFpBQckbWF0Y2gwBQFpAAABD2NoZWNrU3VzcGljaW91cwAEEGNvbnRyYWN0QmFsYW5jZXMJAQNfeHAACgEMY2hlY2tCYWxhbmNlAgNhY2MHYXNzZXRJZAQNJHQwMTI1NDMxMjU2OAUDYWNjBApzdXNwaWNpb3VzCAUNJHQwMTI1NDMxMjU2OAJfMQQBaQgFDSR0MDEyNTQzMTI1NjgCXzIDBQpzdXNwaWNpb3VzCQCUCgIFCnN1c3BpY2lvdXMFAWkECGFCYWxhbmNlCQBkAgkA8AcCBQR0aGlzCQDZBAEFB2Fzc2V0SWQJAQxzdGFrZWRBbW91bnQBCQDZBAEFB2Fzc2V0SWQDCQBmAgkAkQMCBRBjb250cmFjdEJhbGFuY2VzBQFpBQhhQmFsYW5jZQkAlAoCBgUBaQkAlAoCBwkAZAIFAWkAAQoAAiRsBQhhc3NldElkcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgcAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEMY2hlY2tCYWxhbmNlAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwERc3VzcGVuZFN1c3BpY2lvdXMBAWkJAQdzdXNwZW5kAQkArAICAh1TdXNwaWNpb3VzIHN0YXRlIHdpdGggYXNzZXQ6IAkAkQMCBQhhc3NldElkcwUBaQEOcmV0dXJuUGF5bWVudHMCBmNhbGxlcghwYXltZW50cwoBDXBhcnNlUGF5bWVudHMCA2FjYwdwYXltZW50CQDNCAIFA2FjYwkBDlNjcmlwdFRyYW5zZmVyAwUGY2FsbGVyCAUHcGF5bWVudAZhbW91bnQIBQdwYXltZW50B2Fzc2V0SWQKAAIkbAUIcGF5bWVudHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDXBhcnNlUGF5bWVudHMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDE1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPARJjaGVja0RBcHBUaHJlc2hvbGQBC25ld0JhbGFuY2VzBBFkQXBwVGhyZXNob2xkQ29lZgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFBHRoaXMFEmtEQXBwVGhyZXNob2xkQ29lZgIYTm8gZEFwcFRocmVzaG9sZENvZWYga2V5BA50aHJlc2hvbGRTY2FsZQCQTgQKbWF4QmFsYW5jZQkAlgMBBQtuZXdCYWxhbmNlcwQKbWluQmFsYW5jZQkAlwMBBQtuZXdCYWxhbmNlcwQFcmF0aW8JAGsDBQptYXhCYWxhbmNlBQ50aHJlc2hvbGRTY2FsZQUKbWluQmFsYW5jZQMJAGYCBQVyYXRpbwkAaAIFEWRBcHBUaHJlc2hvbGRDb2VmBQ50aHJlc2hvbGRTY2FsZQkAAgECOE5ldyBiYWxhbmNlIGluIGFzc2V0cyBvZiB0aGUgREFwcCBpcyBsZXNzIHRoYW4gdGhyZXNob2xkBwEKY2hlY2tDb2lucwEIYXNzZXRJZHMEBWNvaW5zCQC1CQIFCGFzc2V0SWRzAgEsCgEJY2hlY2tDb2luAgVlcnJvcgdhc3NldElkBAVhc3NldAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDZBAEFB2Fzc2V0SWQJAKwCAgISZnJvbUJhc2U1OFN0cmluZzogBQdhc3NldElkBAhkZWNpbWFscwgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBBQVhc3NldAkArAICAgthc3NldEluZm86IAUHYXNzZXRJZAhkZWNpbWFscwMJAQIhPQIFCGRlY2ltYWxzBQhERUNJTUFMUwkAAgECDndyb25nIGRlY2ltYWxzBwoAAiRsBQVjb2lucwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAHCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQljaGVja0NvaW4CBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDE1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPEQNtc2cBAUQCAnhwA2FtcAQBRAkBDmdldF9EX2ludGVybmFsAgUCeHAFA2FtcAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCAgFEBQFEBQNuaWwFAUQDbXNnAQRpbml0Awhhc3NldElkcwJfQQxmaXJzdEhhcnZlc3QDCQEBIQEJAJ4IAQUEdGhpcwkAAgECE0FscmVhZHkgaW5pdGlhbGl6ZWQECXNoYXJlTmFtZQILc19NdWx0aV9VU0QEEHNoYXJlRGVzY3JpcHRpb24JAKwCAgJCU2hhcmVUb2tlbiBvZiBTd29wRmkgcHJvdG9jb2wgZm9yIE11bHRpU3RhYmxlIFVTRCBwb29sIGF0IGFkZHJlc3MgCQClCAEFBHRoaXMECmlzc3VlVG9rZW4JAMIIBQUJc2hhcmVOYW1lBRBzaGFyZURlc2NyaXB0aW9uAAAABgYEB3Rva2VuSWQJALgIAQUKaXNzdWVUb2tlbgMJAQpjaGVja0NvaW5zAQUIYXNzZXRJZHMJAQV0aHJvdwAECWJhc2VFbnRyeQkAzAgCCQELU3RyaW5nRW50cnkCBQdrQXNzZXRzBQhhc3NldElkcwkAzAgCCQEMSW50ZWdlckVudHJ5AgIJaW5pdGlhbF9BBQJfQQkAzAgCCQEMSW50ZWdlckVudHJ5AgIIZnV0dXJlX0EFAl9BCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQRrRmVlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQZvcmFjbGUCDWJhc2VfZmVlX2ZsYXQJAMwIAgkBC1N0cmluZ0VudHJ5AgUNa1NoYXJlQXNzZXRJZAkA2AQBBQd0b2tlbklkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrU2hhcmVBc3NldFN1cHBseQAACQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJrREFwcFRocmVzaG9sZENvZWYADwkAzAgCCQEMQm9vbGVhbkVudHJ5AgUHa0FjdGl2ZQYJAMwIAgUKaXNzdWVUb2tlbgUDbmlsAwUMZmlyc3RIYXJ2ZXN0CQDOCAIFCWJhc2VFbnRyeQkAzAgCCQEMQm9vbGVhbkVudHJ5AgUNa0ZpcnN0SGFydmVzdAUMZmlyc3RIYXJ2ZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRNrRmlyc3RIYXJ2ZXN0SGVpZ2h0CQBkAgULc3RhcnRIZWlnaHQJAGgCBRVmaXJzdEhhcnZlc3RFbmRQZXJpb2QFDHBlcmlvZExlbmd0aAUDbmlsBQliYXNlRW50cnkDbXNnAQxhZGRMaXF1aWRpdHkCDW1pbk1pbnRBbW91bnQMc3Rha2VGYXJtaW5nCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUABANhbXAJAQJfQQAEAnhwCQEDX3hwAAQCRDADCQAAAgULc2hhcmVTdXBwbHkAAAAACQEHZ2V0RE1lbQIFAnhwBQNhbXAECHBheW1lbnRzCAUDbXNnCHBheW1lbnRzBAFuCQCQAwEFCHBheW1lbnRzCgENdmFsaWRQYXltZW50cwEBbgMJAGYCBQFuBQZuQ29pbnMJAAIBCQCsAgICEHBheW1lbnRzIHNpemUgPiAJAKQDAQUGbkNvaW5zAwkAZgIAAQUBbgkAAgECEXBheW1lbnRzIHNpemUgPCAxAwMJAAACBQtzaGFyZVN1cHBseQAACQECIT0CBQZuQ29pbnMFAW4HCQACAQIiaW5pdGlhbCBkZXBvc2l0IHJlcXVpcmVzIGFsbCBjb2lucwoBDHBheW1hbnRWYWxpZAIDYWNjB3BheW1lbnQDCQEPY29udGFpbnNFbGVtZW50AgUIYXNzZXRJZHMJAQ1nZXRTdHJBc3NldElkAQgFB3BheW1lbnQHYXNzZXRJZAYJAAIBAhhJbnZhbGlk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NDY2MTc1MDcCXzEEDXNjcmlwdEFjdGlvbnMIBQ0kdDAxNzQ2NjE3NTA3Al8yBAFpCAUNJHQwMTc0NjYxNzUwNwJfMwMJAGYCBQtzaGFyZVN1cHBseQAABARfZmVlCQBpAgkAaAIJAG4EBQNmZWUFC2ZlZURpc2NvdW50BQlmZWVTY2FsZTYFB0NFSUxJTkcFBm5Db2lucwkAaAIABAkAZQIFBm5Db2lucwABBARmZWVzBAxpZGVhbEJhbGFuY2UJAGsDBQJEMQkAkQMCBQJ4cAUBaQUCRDAECmRpZmZlcmVuY2UDCQBmAgUMaWRlYWxCYWxhbmNlBQpuZXdCYWxhbmNlCQBlAgUMaWRlYWxCYWxhbmNlBQpuZXdCYWxhbmNlCQBlAgUKbmV3QmFsYW5jZQUMaWRlYWxCYWxhbmNlCQBrAwUEX2ZlZQUKZGlmZmVyZW5jZQUJZmVlU2NhbGU2BA5nb3Zlcm5hbmNlRmVlcwkAawMFBGZlZXMFDWZlZUdvdmVybmFuY2UFCWZlZVNjYWxlNgQMZmluYWxCYWxhbmNlCQBlAgUKbmV3QmFsYW5jZQUOZ292ZXJuYW5jZUZlZXMEEGludmFyaWFudEJhbGFuY2UJAGUCBQpuZXdCYWxhbmNlBQRmZWVzBAJ1cwkBB3Vuc3Rha2UCBQRmZWVzCQCRAwIFCGFzc2V0SWRzBQFpAwkAAAIFAnVzBQJ1cwkAlQoDCQDNCAIFC2ludkJhbGFuY2VzBRBpbnZhcmlhbnRCYWxhbmNlCQDOCAIFDXNjcmlwdEFjdGlvbnMJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUSY2FwTW9uZXlCb3hBZGRyZXNzCQBlAgUEZmVlcwUOZ292ZXJuYW5jZUZlZXMJANkEAQkAkQMCBQhhc3NldElkcwUBaQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQ9tb25leUJveEFkZHJlc3MFDmdvdmVybmFuY2VGZWVzCQDZBAEJAJEDAgUIYXNzZXRJZHMFAWkJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkAkQMCBQhhc3NldElkcwUBaQUNa0Fzc2V0QmFsYW5jZQUMZmluYWxCYWxhbmNlBQNuaWwJAGQCBQFpAAEJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAJUKAwkAzQgCBQtpbnZCYWxhbmNlcwUKbmV3QmFsYW5jZQkAzQgCBQ1zY3JpcHRBY3Rpb25zCQEMSW50ZWdlckVudHJ5AgkArAICCQCRAwIFCGFzc2V0SWRzBQFpBQ1rQXNzZXRCYWxhbmNlBQpuZXdCYWxhbmNlCQBkAgUBaQABBA0kdDAxODg0NDE4OTMyCgACJGwFC25ld0JhbGFuY2VzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlQoDBQNuaWwFA25pbAAACgEFJGYxXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJARFjYWxjU2NyaXB0QWN0aW9ucwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTUJAQUkZjFfMgIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8EC2ludkJhbGFuY2VzCAUNJHQwMTg4NDQxODkzMgJfMQQNc2NyaXB0QWN0aW9ucwgFDSR0MDE4ODQ0MTg5MzICXzIEAkQyCQEHZ2V0RE1lbQIFC2ludkJhbGFuY2VzBQNhbXAEC21pbnRfYW1vdW50AwkAAAIFC3NoYXJlU3VwcGx5AAAFAkQxCQBrAwULc2hhcmVTdXBwbHkJAGUCBQJEMgUCRDAFAkQwAwkBBmFzc2VydAEJAGcCBQttaW50X2Ftb3VudAUNbWluTWludEFtb3VudAkAAgECFFNsaXBwYWdlIHNjcmV3ZWQgeW91AwUMc3Rha2VGYXJtaW5nBAJyZQkA/AcEBQR0aGlzAgxyZWlzc3VlU2hhcmUJAMwIAgULbWludF9hbW91bnQFA25pbAUDbmlsAwkAAAIFAnJlBQJyZQQBcwkA/AcEBQ5mYXJtaW5nQWRkcmVzcwIPbG9ja1NoYXJlVG9rZW5zCQDMCAIJAKUIAQUEdGhpcwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQxzaGFyZUFzc2V0SWQFC21pbnRfYW1vdW50BQNuaWwDCQAAAgUBcwUBcwkAzQgCBQ1zY3JpcHRBY3Rpb25zCQEMSW50ZWdlckVudHJ5AgURa1NoYXJlQXNzZXRTdXBwbHkJAGQCBQtzaGFyZVN1cHBseQULbWludF9hbW91bnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAM4IAgUNc2NyaXB0QWN0aW9ucwkAzAgCCQEHUmVpc3N1ZQMFDHNoYXJlQXNzZXRJZAULbWludF9hbW91bnQGCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQNtc2cGY2FsbGVyBQttaW50X2Ftb3VudAUMc2hhcmVBc3NldElkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrU2hhcmVBc3NldFN1cHBseQkAZAIFC3NoYXJlU3VwcGx5BQttaW50X2Ftb3VudAUDbmlsA21zZwEMcmVpc3N1ZVNoYXJlAQZhbW91bnQJAQt2YWx1ZU9yRWxzZQIJAQppc1NlbGZDYWxsAQUDbXNnCQDMCAIJAQdSZWlzc3VlAwUMc2hhcmVBc3NldElkBQZhbW91bnQGBQNuaWwDbXNnAQVnZXREeQQJYXNzZXRGcm9tB2Fzc2V0VG8CZHgLdXNlckFkZHJlc3MEAnhwCQEDX3hwAAQJZnJvbUluZGV4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAM8IAgUIYXNzZXRJZHMFCWFzc2V0RnJvbQIQdW5rbm93biB0b2tlbiBpbgQHdG9JbmRleAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDPCAIFCGFzc2V0SWRzBQdhc3NldFRvAhF1bmtub3duIHRva2VuIG91dAQBeAkAZAIJAJEDAgUCeHAFCWZyb21JbmRleAUCZHgEAXkJAQRnZXRZBAUJZnJvbUluZGV4BQd0b0luZGV4BQF4BQJ4cAQCZHkJAGUCCQBlAgkAkQMCBQJ4cAUHdG9JbmRleAUBeQABBAtmZWVEaXNjb3VudAkBFGNhbGN1bGF0ZUZlZURpc2NvdW50AQkBB0FkZHJlc3MBCQDZBAEFC3VzZXJBZGRyZXNzBARfZmVlCQBrAwkAbgQFA2ZlZQULZmVlRGlzY291bnQFCWZlZVNjYWxlNgUHQ0VJTElORwUCZHkFCWZlZVNjYWxlNgkAlAoCBQNuaWwJAJQKAgkAZQIFAmR5BQRfZmVlBQRfZmVlA21zZwEIZXhjaGFuZ2UCCHRva2VuT3V0Bm1pbl9keQkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAMJAQIhPQIJAJADAQgFA21zZwhwYXltZW50cwABCQACAQITc2l6ZShwYXltZW50cykgIT0gMQQKc3VzcGljaW91cwkBD2NoZWNrU3VzcGljaW91cwADCAUKc3VzcGljaW91cwJfMQkAzggCCQERc3VzcGVuZFN1c3BpY2lvdXMBCAUKc3VzcGljaW91cwJfMgkBDnJldHVyblBheW1lbnRzAggFA21zZwZjYWxsZXIIBQNtc2cIcGF5bWVudHMEB3BheW1lbnQJAJEDAggFA21zZwhwYXltZW50cwAABAd0b2tlbkluCQENZ2V0U3RyQXNzZXRJZAEIBQdwYXltZW50B2Fzc2V0SWQEC3Rva2VuT3V0QjU4CQDZBAEFCHRva2VuT3V0BAJkeAgFB3BheW1lbnQGYW1vdW50BAlmcm9tSW5kZXgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAzwgCBQhhc3NldElkcwUHdG9rZW5JbgIQdW5rbm93biB0b2tlbiBpbgQHdG9JbmRleAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDPCAIFCGFzc2V0SWRzBQh0b2tlbk91dAIRdW5rbm93biB0b2tlbiBvdXQEAnhwCQEDX3hwAAQBeAkAZAIJAJEDAgUCeHAFCWZyb21JbmRleAUCZHgEAXkJAQRnZXRZBAUJZnJvbUluZGV4BQd0b0luZGV4BQF4BQJ4cAQDX2R5CQBlAgkAZQIJAJEDAgUCeHAFB3RvSW5kZXgFAXkAAQQLZmVlRGlzY291bnQJARRjYWxjdWxhdGVGZWVEaXNjb3VudAEIBQNtc2cGY2FsbGVyBARfZmVlCQBrAwUDX2R5CQBuBAUDZmVlBQtmZWVEaXNjb3VudAUJZmVlU2NhbGU2BQdDRUlMSU5HBQlmZWVTY2FsZTYEAmR5CQBlAgUDX2R5BQRfZmVlBA5nb3Zlcm5hbmNlRmVlcwkAawMFBF9mZWUFDWZlZUdvdmVybmFuY2UFCWZlZVNjYWxlNgMJAQZhc3NlcnQBCQBnAgUCZHkFBm1pbl9keQkAAgECLkV4Y2hhbmdlIHJlc3VsdGVkIGluIGZld2VyIGNvaW5zIHRoYW4gZXhwZWN0ZWQKAQ9tYWtlTmV3QmFsYW5jZXMCA2FjYwx0b2tlbkJhbGFuY2UEDSR0MDIxNjQ0MjE2NzAFA2FjYwQLbmV3QmFsYW5jZXMIBQ0kdDAyMTY0NDIxNjcwAl8xBAFpCAUNJHQwMjE2NDQyMTY3MAJfMgMJAAACBQFpBQlmcm9tSW5kZXgJAJQKAgkAzQgCBQtuZXdCYWxhbmNlcwkAZAIFDHRva2VuQmFsYW5jZQUCZHgJAGQCBQFpAAEDCQAAAgUBaQUHdG9JbmRleAkAlAoCCQDNCAIFC25ld0JhbGFuY2VzCQBlAgUMdG9rZW5CYWxhbmNlBQNfZHkJAGQCBQFpAAEJAJQKAgkAzQgCBQtuZXdCYWxhbmNlcwUMdG9rZW5CYWxhbmNlCQBkAgUBaQABBA0kdDAyMTkyMTIxOTgyCgACJGwFAnhwCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEPbWFrZU5ld0JhbGFuY2VzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwQLbmV3QmFsYW5jZXMIBQ0kdDAyMTkyMTIxOTgyAl8xBAFpCAUNJHQwMjE5MjEyMTk4MgJfMgMJARJjaGVja0RBcHBUaHJlc2hvbGQBBQtuZXdCYWxhbmNlcwkBBXRocm93AAQBcwkBBXN0YWtlAggFB3BheW1lbnQGYW1vdW50CQENZ2V0U3RyQXNzZXRJZAEIBQdwYXltZW50B2Fzc2V0SWQDCQAAAgUBcwUBcwQCdXMJAQd1bnN0YWtlAgUDX2R5BQh0b2tlbk91dAMJAAACBQJ1cwUCdXMJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQd0b2tlbkluBQ1rQXNzZXRCYWxhbmNlBQF4CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCHRva2VuT3V0BQ1rQXNzZXRCYWxhbmNlCQBlAgkAkQMCBQJ4cAUHdG9JbmRleAUDX2R5CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQNtc2cGY2FsbGVyBQJkeQULdG9rZW5PdXRCNTgJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUPbW9uZXlCb3hBZGRyZXNzBQ5nb3Zlcm5hbmNlRmVlcwULdG9rZW5PdXRCNTgJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUSY2FwTW9uZXlCb3hBZGRyZXNzCQBlAgUEX2ZlZQUOZ292ZXJuYW5jZUZlZXMFC3Rva2VuT3V0QjU4BQNuaWwJAJQKAgUCZHkFC3Rva2VuT3V0QjU4CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuA21zZwEId2l0aGRyYXcCCm1pbkFtb3VudHMMdW5sb2NrQW1vdW50CQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUAAwkBAiE9AgkAkAMBCAUDbXNnCHBheW1lbnRzAAEJAAIBAhNzaXplKHBheW1lbnRzKSAhPSAxBApzdXNwaWNpb3VzCQEPY2hlY2tTdXNwaWNpb3VzAAMIBQpzdXNwaWNpb3VzAl8xCQDOCAIJARFzdXNwZW5kU3VzcGljaW91cwEIBQpzdXNwaWNpb3VzAl8yCQEOcmV0dXJuUGF5bWVudHMCCAUDbXNnBmNhbGxlcggFA21zZwhwYXltZW50cwQHcGF5bWVudAkAkQMCCAUDbXNnCHBheW1lbnRzAAAEB3Rva2VuSW4IBQdwYXltZW50B2Fzc2V0SWQDCQECIT0CBQd0b2tlbkluBQxzaGFyZUFzc2V0SWQJAAIBAg11bmtub3duIHRva2VuBAdfYW1vdW50CAUHcGF5bWVudAZhbW91bnQEDHRvdGFsX3N1cHBseQULc2hhcmVTdXBwbHkEBnVubG9jawMJAGYCBQx1bmxvY2tBbW91bnQAAAkA/AcEBQ5mYXJtaW5nQWRkcmVzcwITd2l0aGRyYXdTaGFyZVRva2VucwkAzAgCCQClCAEFBHRoaXMJAMwIAgUMdW5sb2NrQW1vdW50BQNuaWwFA25pbAAAAwkAAAIFBnVubG9jawUGdW5sb2NrBA53aXRoZHJhd0Ftb3VudAkAZAIFB19hbW91bnQFDHVubG9ja0Ftb3VudAoBEWNhbGNTY3JpcHRBY3Rpb25zAgNhY2MHYmFsYW5jZQQNJHQwMjMzNjgyMzM5NgUDYWNjBA1zY3JpcHRBY3Rpb25zCAUNJHQwMjMzNjgyMzM5NgJfMQQBaQgFDSR0MDIzMzY4MjMzOTYCXzIEB3dBbW91bnQJAGsDBQdiYWxhbmNlBQ53aXRoZHJhd0Ftb3VudAUMdG90YWxfc3VwcGx5AwkBBmFzc2VydAEJAGcCBQd3QW1vdW50CQCRAwIFCm1pbkFtb3VudHMFAWkJAAIBAjBXaXRoZHJhd2FsIHJlc3VsdGVkIGluIGZld2VyIGNvaW5zIHRoYW4gZXhwZWN0ZWQEAnVzCQEHdW5zdGFrZQIFB3dBbW91bnQJAJEDAgUIYXNzZXRJZHMFAWkDCQAAAgUCdXMFAnVzCQCUCgIJAM4IAgUNc2NyaXB0QWN0aW9ucwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCRAwIFCGFzc2V0SWRzBQFpBQ1rQXNzZXRCYWxhbmNlCQBlAgUHYmFsYW5jZQUHd0Ftb3VudAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUDbXNnBmNhbGxlcgUHd0Ftb3VudAkA2QQBCQCRAwIFCGFzc2V0SWRzBQFpBQNuaWwJAGQCBQFpAAEJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4EDSR0MDIzODg2MjM5NTQKAAIkbAkBA194cAAKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIFA25pbAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJARFjYWxjU2NyaXB0QWN0aW9ucwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTUJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8EDXNjcmlwdEFjdGlvbnMIBQ0kdDAyMzg4NjIzOTU0Al8xBAFpCAUNJHQwMjM4ODYyMzk1NAJfMgkAzggCBQ1zY3JpcHRBY3Rpb25zCQDMCAIJAQRCdXJuAgUMc2hhcmVBc3NldElkBQ53aXRoZHJhd0Ftb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgURa1NoYXJlQXNzZXRTdXBwbHkJAGUCBQtzaGFyZVN1cHBseQUOd2l0aGRyYXdBbW91bnQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgNtc2cBE2NhbGNXaXRoZHJhd09uZUNvaW4DC3Rva2VuQW1vdW50CHRva2VuT3V0BHVzZXIEAWkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAzwgCBQhhc3NldElkcwUIdG9rZW5PdXQCEXVua25vd24gdG9rZW4gb3V0CQCUCgIFA25pbAgJARRfY2FsY1dpdGhkcmF3T25lQ29pbgQJAQNfeHAABQt0b2tlbkFtb3VudAUBaQkBB0FkZHJlc3MBCQDZBAEFBHVzZXICXzEDbXNnAQ93aXRoZHJhd09uZUNvaW4DCHRva2VuT3V0CW1pbkFtb3VudAx1bmxvY2tBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQADCQECIT0CCQCQAwEIBQNtc2cIcGF5bWVudHMAAQkAAgECE3NpemUocGF5bWVudHMpICE9IDEECnN1c3BpY2lvdXMJAQ9jaGVja1N1c3BpY2lvdXMAAwgFCnN1c3BpY2lvdXMCXzEJAM4IAgkBEXN1c3BlbmRTdXNwaWNpb3VzAQgFCnN1c3BpY2lvdXMCXzIJAQ5yZXR1cm5QYXltZW50cwIIBQNtc2cGY2FsbGVyCAUDbXNnCHBheW1lbnRzBAdwYXltZW50CQCRAwIIBQNtc2cIcGF5bWVudHMAAAQHdG9rZW5JbggFB3BheW1lbnQHYXNzZXRJZAMJAQIhPQIFB3Rva2VuSW4FDHNoYXJlQXNzZXRJZAkAAgECDXVua25vd24gdG9rZW4ECG91dEluZGV4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAM8IAgUIYXNzZXRJZHMFCHRva2VuT3V0AhF1bmtub3duIHRva2VuIG91dAQMX3Rva2VuQW1vdW50CAUHcGF5bWVudAZhbW91bnQEBnVubG9jawMJAGYCBQx1bmxvY2tBbW91bnQAAAkA/AcEBQ5mYXJtaW5nQWRkcmVzcwITd2l0aGRyYXdTaGFyZVRva2VucwkAzAgCCQClCAEFBHRoaXMJAMwIAgUMdW5sb2NrQW1vdW50BQNuaWwFA25pbAAAAwkAAAIFBnVubG9jawUGdW5sb2NrBA53aXRoZHJhd0Ftb3VudAkAZAIFDF90b2tlbkFtb3VudAUMdW5sb2NrQW1vdW50BAJ4cAkBA194cAAEDSR0MDI1MTg1MjUyNjYJARRfY2FsY1dpdGhkcmF3T25lQ29pbgQFAnhwBQ53aXRoZHJhd0Ftb3VudAUIb3V0SW5kZXgIBQNtc2cGY2FsbGVyBAJkeQgFDSR0MDI1MTg1MjUyNjYCXzEEBmR5X2ZlZQgFDSR0MDI1MTg1MjUyNjYCXzIDCQEGYXNzZXJ0AQkAZwIFAmR5BQltaW5BbW91bnQJAAIBAhhOb3QgZW5vdWdoIGNvaW5zIHJlbW92ZWQEDmdvdmVybmFuY2VGZWVzCQBrAwUGZHlfZmVlBQ1mZWVHb3Zlcm5hbmNlBQlmZWVTY2FsZTYECmR5X2FuZF9mZWUJAGQCBQJkeQUGZHlfZmVlCgEPbWFrZU5ld0JhbGFuY2VzAgNhY2MMdG9rZW5CYWxhbmNlBA0kdDAyNTUyNDI1NTUwBQNhY2MEC25ld0JhbGFuY2VzCAUNJHQwMjU1MjQyNTU1MAJfMQQBaQgFDSR0MDI1NTI0MjU1NTACXzIDCQAAAgUBaQUIb3V0SW5kZXgJAJQKAgkAzQgCBQtuZXdCYWxhbmNlcwkAZQIFDHRva2VuQmFsYW5jZQUKZHlfYW5kX2ZlZQkAZAIFAWkAAQkAlAoCCQDNCAIFC25ld0JhbGFuY2VzBQx0b2tlbkJhbGFuY2UJAGQCBQFpAAEEDSR0MDI1NzE3MjU3NzgKAAIkbAUCeHAKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIFA25pbAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQ9tYWtlTmV3QmFsYW5jZXMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDE1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPBAtuZXdCYWxhbmNlcwgFDSR0MDI1NzE3MjU3NzgCXzEEAWkIBQ0kdDAyNTcxNzI1Nzc4Al8yAwkBEmNoZWNrREFwcFRocmVzaG9sZAEFC25ld0JhbGFuY2VzCQEFdGhyb3cABAJ1cwkBB3Vuc3Rha2UCBQpkeV9hbmRfZmVlBQh0b2tlbk91dAMJAAACBQJ1cwUCdXMJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFA21zZwZjYWxsZXIFAmR5CQDZBAEFCHRva2VuT3V0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAJEDAgUIYXNzZXRJZHMFAWkFDWtBc3NldEJhbGFuY2UJAGUCCQCRAwIFAnhwBQFpBQpkeV9hbmRfZmVlCQDMCAIJAQRCdXJuAgUMc2hhcmVBc3NldElkBQ53aXRoZHJhd0Ftb3VudAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQ9tb25leUJveEFkZHJlc3MFDmdvdmVybmFuY2VGZWVzCQDZBAEFCHRva2VuT3V0CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFEmNhcE1vbmV5Qm94QWRkcmVzcwkAZQIFBmR5X2ZlZQUOZ292ZXJuYW5jZUZlZXMJANkEAQUIdG9rZW5PdXQJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtTaGFyZUFzc2V0U3VwcGx5CQBlAgULc2hhcmVTdXBwbHkFDndpdGhkcmF3QW1vdW50BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DbXNnAQFBAAkAlAoCBQNuaWwJAQJfQQADbXNnAQ9nZXRWaXJ0dWFsUHJpY2UABAFECQEFZ2V0X0QCCQEDX3hwAAkBAl9BAAkAlAoCBQNuaWwJAGsDBQFEBQlQUkVDSVNJT04FC3NoYXJlU3VwcGx5A21zZwEPY2FsY1Rva2VuQW1vdW50AgdhbW91bnRzB2RlcG9zaXQEA2FtcAkBAl9BAAQIYmFsYW5jZXMJAQNfeHAABAJEMAkBB2dldERNZW0CBQhiYWxhbmNlcwUDYW1wCgEPY2FsY05ld0JhbGFuY2VzAgNhY2MHYmFsYW5jZQQNJHQwMjY3MzkyNjc2NQUDYWNjBAtuZXdCYWxhbmNlcwgFDSR0MDI2NzM5MjY3NjUCXzEEAWkIBQ0kdDAyNjczOTI2NzY1Al8yBApuZXdCYWxhbmNlCQBkAgUHYmFsYW5jZQMFB2RlcG9zaXQJAJEDAgUHYW1vdW50cwUBaQkBAS0BCQCRAwIFB2Ftb3VudHMFAWkJAJQKAgkAzQgCBQtuZXdCYWxhbmNlcwUKbmV3QmFsYW5jZQkAZAIFAWkAAQQLbmV3QmFsYW5jZXMICgACJGwFCGJhbGFuY2VzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEPY2FsY05ld0JhbGFuY2VzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwJfMQQCRDEJAQdnZXRETWVtAgULbmV3QmFsYW5jZXMFA2FtcAQEZGlmZgMFB2RlcG9zaXQJAGUCBQJEMQUCRDAJAGUCBQJEMAUCRDEJAJQKAgUDbmlsCQBrAwUEZGlmZgULc2hhcmVTdXBwbHkFAkQwA21zZwEFcmFtcEECCF9mdXR1cmVBC19mdXR1cmVUaW1lCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUACQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQNtc2cDCQEGYXNzZXJ0AQkAZwIFDmJsb2NrVGltZXN0YW1wCQBkAgUOaW5pdGlhbF9BX3RpbWUFDU1JTl9SQU1QX1RJTUUJAAIBAgl0b28gb2Z0ZW4DCQEGYXNzZXJ0AQkAZwIFC19mdXR1cmVUaW1lCQBkAgUOYmxvY2tUaW1lc3RhbXAFDU1JTl9SQU1QX1RJTUUJAAIBAhFpbnN1ZmZpY2llbnQgdGltZQQKX2luaXRpYWxfQQkBAl9BAAMJAQZhc3NlcnQBAwkAZgIFCF9mdXR1cmVBAAAJAGYCBQVNQVhfQQUIX2Z1dHVyZUEHCQACAQIRb3V0IG9mIGJhc2UgcmFuZ2UDCQEGYXNzZXJ0AQMDCQBnAgUIX2Z1dHVyZUEFCl9pbml0aWFsX0EJAGcCCQBoAgUKX2luaXRpYWxfQQUMTUFYX0FfQ0hBTkdFBQhfZnV0dXJlQQcGAwkAZgIFCl9pbml0aWFsX0EFCF9mdXR1cmVBCQBnAgkAaAIFCF9mdXR1cmVBBQxNQVhfQV9DSEFOR0UFCl9pbml0aWFsX0EHCQACAQIMb3V0IG9mIHJhbmdlCQDMCAIJAQxJbnRlZ2VyRW50cnkCAglpbml0aWFsX0EFCl9pbml0aWFsX0EJAMwIAgkBDEludGVnZXJFbnRyeQICCGZ1dHVyZV9BBQhfZnV0dXJlQQkAzAgCCQEMSW50ZWdlckVudHJ5AgIOaW5pdGlhbF9BX3RpbWUFDmJsb2NrVGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCAg1mdXR1cmVfQV90aW1lBQtfZnV0dXJlVGltZQUDbmlsA21zZwEJc3RvcFJhbXBBAAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUDbXNnBAhjdXJyZW50QQkBAl9BAAkAzAgCCQEMSW50ZWdlckVudHJ5AgIJaW5pdGlhbF9BBQhjdXJyZW50QQkAzAgCCQEMSW50ZWdlckVudHJ5AgIIZnV0dXJlX0EFCGN1cnJlbnRBCQDMCAIJAQxJbnRlZ2VyRW50cnkCAg5pbml0aWFsX0FfdGltZQUOYmxvY2tUaW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQICDWZ1dHVyZV9BX3RpbWUFDmJsb2NrVGltZXN0YW1wBQNuaWwDbXNnAQhzaHV0ZG93bgAJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFA21zZwMJAQEhAQUGYWN0aXZlCQACAQkArAICAiJEQXBwIGlzIGFscmVhZHkgc3VzcGVuZGVkLiBDYXVzZTogCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFBmtDYXVzZQIadGhlIGNhdXNlIHdhc24ndCBzcGVjaWZpZWQJAQdzdXNwZW5kAQIPUGF1c2VkIGJ5IGFkbWluA21zZwEIYWN0aXZhdGUACQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQNtc2cDBQZhY3RpdmUJAQ10aHJvd0lzQWN0aXZlAAkAzAgCCQEMQm9vbGVhbkVudHJ5AgUHa0FjdGl2ZQYJAMwIAgkBC0RlbGV0ZUVudHJ5AQUGa0NhdXNlBQNuaWwDbXNnARhrZWVwTGltaXRGb3JGaXJzdEhhcnZlc3QBCnNoYXJlTGltaXQJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFA21zZwkAzAgCCQEMSW50ZWdlckVudHJ5AgULa1NoYXJlTGltaXQFCnNoYXJlTGltaXQFA25pbAECdHgBBnZlcmlmeQAEE211bHRpU2lnbmVkQnlBZG1pbnMEEmFkbWluUHViS2V5MVNpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFDGFkbWluUHViS2V5MQABAAAEEmFkbWluUHViS2V5MlNpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAEFDGFkbWluUHViS2V5MgABAAAEEmFkbWluUHViS2V5M1NpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAIFDGFkbWluUHViS2V5MwABAAAJAGcCCQBkAgkAZAIFEmFkbWluUHViS2V5MVNpZ25lZAUSYWRtaW5QdWJLZXkyU2lnbmVkBRJhZG1pblB1YktleTNTaWduZWQAAgQHJG1hdGNoMAUCdHgDCQABAgUHJG1hdGNoMAIXSW52b2tlU2NyaXB0VHJhbnNhY3Rpb24EA2ludgUHJG1hdGNoMAQTY2FsbFRha2VJbnRvQWNjb3VudAMJAAACCAUDaW52BGRBcHAFBHRoaXMJAAACCAUDaW52CGZ1bmN0aW9uAhl0YWtlSW50b0FjY291bnRFeHRyYUZ1bmRzBwQNc2lnbmVkQnlBZG1pbgMDAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUMYWRtaW5QdWJLZXkxBgkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUMYWRtaW5QdWJLZXkyBgkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUMYWRtaW5QdWJLZXkzBgkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAURYWRtaW5QdWJLZXlJbnZva2UDAwUTY2FsbFRha2VJbnRvQWNjb3VudAUNc2lnbmVkQnlBZG1pbgcGBRNtdWx0aVNpZ25lZEJ5QWRtaW5zBRNtdWx0aVNpZ25lZEJ5QWRtaW5zd95rKg==", "height": 2210394, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: BDWz5N7ntXe63Yugr3RJtRLBKW9UrBz3xR8TB8MQ3Seh Next: EGBLnMB1KVSq11AR38xr4j5WLjmgbqUdbv3iy4FYUxNb Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let a = 1000000
4+let a = "3.0.0"
55
66 let b = 1000000
77
8-let c = 10
8+let c = 1000000
99
10-let d = 6
10+let d = 10
1111
12-let e = (86400 / 60)
12+let e = 6
1313
14-let f = "asset_ids"
14+let f = (86400 / 60)
1515
16-let g = "_balance"
16+let g = "asset_ids"
1717
18-let h = "active"
18+let h = "_balance"
1919
20-let i = "shutdown_cause"
20+let i = "active"
2121
22-let j = "share_asset_id"
22+let j = "shutdown_cause"
2323
24-let k = "share_asset_supply"
24+let k = "share_asset_id"
2525
26-let l = "commission"
26+let l = "share_asset_supply"
2727
28-let m = "dAppThresholdCoef"
28+let m = "commission"
2929
30-let n = "staking_usdnnsbt_address"
30+let n = "dAppThresholdCoef"
3131
32-let o = "discounts"
32+let o = "staking_usdnnsbt_address"
3333
34-let p = "discount_values"
34+let p = "discounts"
3535
36-let q = "_SWOP_amount"
36+let q = "discount_values"
3737
38-let r = "first_harvest"
38+let r = "_SWOP_amount"
3939
40-let s = "first_harvest_height"
40+let s = "first_harvest"
4141
42-let t = "share_limit_on_first_harvest"
42+let t = "first_harvest_height"
4343
44-let u = "base_period"
44+let u = "share_limit_on_first_harvest"
4545
46-let v = "period_length"
46+let v = "base_period"
4747
48-let w = "start_height"
48+let w = "period_length"
4949
50-let x = "admin_pub_1"
50+let x = "start_height"
5151
52-let y = "admin_pub_2"
52+let y = "admin_pub_1"
5353
54-let z = "admin_pub_3"
54+let z = "admin_pub_2"
5555
56-let B = "admin_invoke_pub"
56+let B = "admin_pub_3"
5757
58-let C = "money_box_address"
58+let C = "admin_invoke_pub"
5959
60-let E = "governance_address"
60+let E = "money_box_address"
6161
62-let F = "voting_address"
62+let F = "governance_address"
6363
64-let G = "farming_address"
64+let G = "voting_address"
6565
66-let H = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
66+let H = "farming_address"
6767
68-func I (J) = {
69- let K = getString(H, J)
70- if ($isInstanceOf(K, "String"))
68+let I = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
69+
70+func J (K) = {
71+ let L = getString(I, K)
72+ if ($isInstanceOf(L, "String"))
7173 then {
72- let L = K
73- fromBase58String(L)
74+ let M = L
75+ fromBase58String(M)
7476 }
7577 else {
76- let M = K
77- throw((J + "is empty"))
78+ let N = L
79+ throw((K + "is empty"))
7880 }
7981 }
8082
8183
82-let N = I(x)
84+let O = J(y)
8385
84-let O = I(y)
86+let P = J(z)
8587
86-let P = I(z)
88+let Q = J(B)
8789
88-let Q = I(B)
90+let R = J(C)
8991
90-let R = Address(I(C))
92+let S = Address(J(E))
9193
92-let S = Address(I(E))
94+let T = Address(J(F))
9395
94-let T = Address(I(n))
96+let U = Address(J(o))
9597
96-let U = Address(I(F))
98+let V = Address(J(G))
9799
98-let V = Address(I(G))
100+let W = Address(J(H))
99101
100-let W = Address(base58'3MxXHaGvmKQHH3kNrPBunhve1sDXf7M5RZt')
102+let X = Address(base58'3MxXHaGvmKQHH3kNrPBunhve1sDXf7M5RZt')
101103
102-let X = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
104+let Y = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
103105
104-let Y = [toBase58String(X)]
106+let Z = [toBase58String(Y)]
105107
106-let Z = valueOrErrorMessage(getInteger(U, u), "Empty kBasePeriod")
108+let aa = valueOrErrorMessage(getInteger(V, v), "Empty kBasePeriod")
107109
108-let aa = valueOrErrorMessage(getInteger(U, w), "Empty kStartHeight")
110+let ab = valueOrErrorMessage(getInteger(V, x), "Empty kStartHeight")
109111
110-let ab = valueOrErrorMessage(getInteger(U, v), "Empty kPeriodLength")
112+let ac = valueOrErrorMessage(getInteger(V, w), "Empty kPeriodLength")
111113
112-let ac = ((Z + ((height - aa) / ab)) + 3)
114+let ad = ((aa + ((height - ab) / ac)) + 3)
113115
114-let ad = getBooleanValue(this, h)
116+let ae = getBooleanValue(this, i)
115117
116-let ae = fromBase58String(getStringValue(this, j))
118+let af = fromBase58String(getStringValue(this, k))
117119
118-let af = getIntegerValue(this, k)
120+let ag = getIntegerValue(this, l)
119121
120-let ag = 1000000
122+let ah = 1000000
121123
122-let ah = getIntegerValue(this, l)
124+let ai = getIntegerValue(this, m)
123125
124-let ai = fraction(40, ag, 100)
126+let aj = fraction(40, ah, 100)
125127
126-let aj = getIntegerValue(this, "initial_A")
128+let ak = getIntegerValue(this, "initial_A")
127129
128-let ak = getIntegerValue(this, "future_A")
130+let al = getIntegerValue(this, "future_A")
129131
130-let al = valueOrElse(getInteger(this, "initial_A_time"), 0)
132+let am = valueOrElse(getInteger(this, "initial_A_time"), 0)
131133
132-let am = valueOrElse(getInteger(this, "future_A_time"), 0)
134+let an = valueOrElse(getInteger(this, "future_A_time"), 0)
133135
134-let an = split(getStringValue(this, f), ",")
136+let ao = split(getStringValue(this, g), ",")
135137
136-let ao = size(an)
138+let ap = size(ao)
137139
138-func ap (aq) = [BooleanEntry(h, false), StringEntry(i, aq)]
140+func aq (ar) = [BooleanEntry(i, false), StringEntry(j, ar)]
139141
140142
141-func ar () = throw("DApp is already active")
143+func as () = throw("DApp is already active")
142144
143145
144-func as () = if (ad)
146+func at () = if (ae)
145147 then unit
146148 else throw("DApp is inactive at this moment")
147149
148150
149-func at (au) = if (containsElement([N, O, P], au.callerPublicKey))
151+func au (av) = if (containsElement([O, P, Q], av.callerPublicKey))
150152 then unit
151153 else throw("Only admin can call this function")
152154
153155
154-func av (au) = if ((this == au.caller))
156+func aw (av) = if ((this == av.caller))
155157 then unit
156158 else throw("Only contract itself can call this function")
157159
158160
159-let aw = toBigInt(2)
161+let ax = toBigInt(2)
160162
161-let ax = height
163+let ay = height
162164
163-func ay (az) = if (az)
165+func az (aA) = if (aA)
164166 then false
165167 else true
166168
167169
168-func aA (aB) = {
169- let aC = valueOrElse(getInteger(S, (toString(aB) + q)), 0)
170- let aD = split(getStringValue(H, p), ",")
171- let aE = split(getStringValue(H, o), ",")
172- if (if ((aC >= parseIntValue(aD[0])))
173- then (parseIntValue(aD[1]) > aC)
170+func aB (aC) = {
171+ let aD = valueOrElse(getInteger(T, (toString(aC) + r)), 0)
172+ let aE = split(getStringValue(I, q), ",")
173+ let aF = split(getStringValue(I, p), ",")
174+ if (if ((aD >= parseIntValue(aE[0])))
175+ then (parseIntValue(aE[1]) > aD)
174176 else false)
175- then (ag - parseIntValue(aE[0]))
176- else if (if ((aC >= parseIntValue(aD[1])))
177- then (parseIntValue(aD[2]) > aC)
177+ then (ah - parseIntValue(aF[0]))
178+ else if (if ((aD >= parseIntValue(aE[1])))
179+ then (parseIntValue(aE[2]) > aD)
178180 else false)
179- then (ag - parseIntValue(aE[1]))
180- else if (if ((aC >= parseIntValue(aD[2])))
181- then (parseIntValue(aD[3]) > aC)
181+ then (ah - parseIntValue(aF[1]))
182+ else if (if ((aD >= parseIntValue(aE[2])))
183+ then (parseIntValue(aE[3]) > aD)
182184 else false)
183- then (ag - parseIntValue(aE[2]))
184- else if (if ((aC >= parseIntValue(aD[3])))
185- then (parseIntValue(aD[4]) > aC)
185+ then (ah - parseIntValue(aF[2]))
186+ else if (if ((aD >= parseIntValue(aE[3])))
187+ then (parseIntValue(aE[4]) > aD)
186188 else false)
187- then (ag - parseIntValue(aE[3]))
188- else if ((aC >= parseIntValue(aD[4])))
189- then (ag - parseIntValue(aE[4]))
190- else ag
189+ then (ah - parseIntValue(aF[3]))
190+ else if ((aD >= parseIntValue(aE[4])))
191+ then (ah - parseIntValue(aF[4]))
192+ else ah
191193 }
192194
193195
194-func aF () = {
195- let aG = am
196- let aH = ak
197- if ((aG > ax))
196+func aG () = {
197+ let aH = an
198+ let aI = al
199+ if ((aH > ay))
198200 then {
199- let aI = aj
200- let aJ = al
201- if ((aH > aI))
202- then (aI + (((aH - aI) * (ax - aJ)) / (aG - aJ)))
203- else (aI - (((aI - aH) * (ax - aJ)) / (aG - aJ)))
201+ let aJ = ak
202+ let aK = am
203+ if ((aI > aJ))
204+ then (aJ + (((aI - aJ) * (ay - aK)) / (aH - aK)))
205+ else (aJ - (((aJ - aI) * (ay - aK)) / (aH - aK)))
204206 }
205- else aH
207+ else aI
206208 }
207209
208210
209-func aK () = {
210- func aL (aM,aN) = (aM :+ valueOrElse(getInteger(this, (aN + g)), 0))
211+func aL () = {
212+ func aM (aN,aO) = (aN :+ valueOrElse(getInteger(this, (aO + h)), 0))
211213
212- let aO = an
213- let aP = size(aO)
214- let aQ = nil
215- func aR (aS,aT) = if ((aT >= aP))
216- then aS
217- else aL(aS, aO[aT])
214+ let aP = ao
215+ let aQ = size(aP)
216+ let aR = nil
217+ func aS (aT,aU) = if ((aU >= aQ))
218+ then aT
219+ else aM(aT, aP[aU])
218220
219- func aU (aS,aT) = if ((aT >= aP))
220- then aS
221+ func aV (aT,aU) = if ((aU >= aQ))
222+ then aT
221223 else throw("List size exceeds 15")
222224
223- aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
225+ aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
224226 }
225227
226228
227-func aV (aW) = aW
229+func aW (aX) = aX
228230
229231
230-func aX (aM,aY) = (aM + aY)
232+func aY (aN,aZ) = (aN + aZ)
231233
232234
233-func aZ (aW,ba) = {
234- let bb = invoke(this, "D", [aW, ba], nil)
235- if ($isInstanceOf(bb, "Int"))
236- then bb
237- else throw(($getType(invoke(this, "D", [aW, ba], nil)) + " couldn't be cast to Int"))
235+func ba (aX,bb) = {
236+ let bc = invoke(this, "D", [aX, bb], nil)
237+ if ($isInstanceOf(bc, "Int"))
238+ then bc
239+ else throw(($getType(invoke(this, "D", [aX, bb], nil)) + " couldn't be cast to Int"))
238240 }
239241
240242
241-func bc (aW,ba) = {
242- let bd = {
243- let aO = aW
244- let aP = size(aO)
245- let aQ = 0
246- func aR (aS,aT) = if ((aT >= aP))
247- then aS
248- else aX(aS, aO[aT])
243+func bd (aX,bb) = {
244+ let be = {
245+ let aP = aX
246+ let aQ = size(aP)
247+ let aR = 0
248+ func aS (aT,aU) = if ((aU >= aQ))
249+ then aT
250+ else aY(aT, aP[aU])
249251
250- func aU (aS,aT) = if ((aT >= aP))
251- then aS
252+ func aV (aT,aU) = if ((aU >= aQ))
253+ then aT
252254 else throw("List size exceeds 15")
253255
254- aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
256+ aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
255257 }
256- if ((bd == 0))
258+ if ((be == 0))
257259 then 0
258260 else {
259- let be = (ba * ao)
260- let bf = (toBigInt(be) * toBigInt(bd))
261- let bg = toBigInt((be - 1))
262- func bh (aM,au) = if ((aM._2 == true))
263- then aM
261+ let bf = (bb * ap)
262+ let bg = (toBigInt(bf) * toBigInt(be))
263+ let bh = toBigInt((bf - 1))
264+ func bi (aN,av) = if ((aN._2 == true))
265+ then aN
264266 else {
265- let bi = aM._1
266- func bj (bk,au) = if ((ao > au))
267- then ((bk * bi) / (toBigInt(aW[au]) * toBigInt(ao)))
268- else bk
267+ let bj = aN._1
268+ func bk (bl,av) = if ((ap > av))
269+ then ((bl * bj) / (toBigInt(aX[av]) * toBigInt(ap)))
270+ else bl
269271
270- let bk = {
271- let aO = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
272- let aP = size(aO)
273- let aQ = bi
274- func bl (aS,aT) = if ((aT >= aP))
275- then aS
276- else bj(aS, aO[aT])
272+ let bl = {
273+ let aP = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
274+ let aQ = size(aP)
275+ let aR = bj
276+ func bm (aT,aU) = if ((aU >= aQ))
277+ then aT
278+ else bk(aT, aP[aU])
277279
278- func bm (aS,aT) = if ((aT >= aP))
279- then aS
280+ func bn (aT,aU) = if ((aU >= aQ))
281+ then aT
280282 else throw("List size exceeds 15")
281283
282- bm(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
284+ bn(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
283285 }
284- let bn = fraction((bf + (toBigInt(ao) * bk)), bi, ((bg * bi) + (toBigInt((ao + 1)) * bk)))
285- if ((bn > bi))
286- then if ((1 >= toInt((bn - bi))))
287- then $Tuple2(bn, true)
288- else $Tuple2(bn, false)
289- else if ((1 >= toInt((bi - bn))))
290- then $Tuple2(bn, true)
291- else $Tuple2(bn, false)
286+ let bo = fraction((bg + (toBigInt(ap) * bl)), bj, ((bh * bj) + (toBigInt((ap + 1)) * bl)))
287+ if ((bo > bj))
288+ then if ((1 >= toInt((bo - bj))))
289+ then $Tuple2(bo, true)
290+ else $Tuple2(bo, false)
291+ else if ((1 >= toInt((bj - bo))))
292+ then $Tuple2(bo, true)
293+ else $Tuple2(bo, false)
292294 }
293295
294- let bo = {
295- let aO = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
296- let aP = size(aO)
297- let aQ = $Tuple2(toBigInt(bd), false)
298- func bl (aS,aT) = if ((aT >= aP))
299- then aS
300- else bh(aS, aO[aT])
296+ let bp = {
297+ let aP = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
298+ let aQ = size(aP)
299+ let aR = $Tuple2(toBigInt(be), false)
300+ func bm (aT,aU) = if ((aU >= aQ))
301+ then aT
302+ else bi(aT, aP[aU])
301303
302- func bm (aS,aT) = if ((aT >= aP))
303- then aS
304+ func bn (aT,aU) = if ((aU >= aQ))
305+ then aT
304306 else throw("List size exceeds 15")
305307
306- bm(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
308+ bn(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
307309 }
308- let bn = bo._1
309- let bp = bo._2
310- if ((bp == false))
311- then throw(("get_D() not finished with " + toString(bn)))
312- else toInt(bn)
310+ let bo = bp._1
311+ let bq = bp._2
312+ if ((bq == false))
313+ then throw(("get_D() not finished with " + toString(bo)))
314+ else toInt(bo)
313315 }
314316 }
315317
316318
317-func bq (aW,ba) = aZ(aV(aW), ba)
319+func br (aX,bb) = ba(aW(aX), bb)
318320
319321
320-func br (bs,bt,bu,bv) = if (ay((bs != bt)))
322+func bs (bt,bu,bv,bw) = if (az((bt != bu)))
321323 then throw("same coin")
322- else if (ay(if ((bt >= 0))
323- then (bs >= 0)
324+ else if (az(if ((bu >= 0))
325+ then (bt >= 0)
324326 else false))
325327 then throw("below zero")
326- else if (ay(if ((ao > bt))
327- then (ao > bs)
328+ else if (az(if ((ap > bu))
329+ then (ap > bt)
328330 else false))
329331 then throw("above N_COINS")
330332 else {
331- let ba = aF()
332- let bn = aZ(bv, ba)
333- let be = (ba * ao)
334- func bw (aM,au) = {
335- let bx = aM
336- let by = bx._1
337- let bz = bx._2
338- let bA = if ((bs == au))
339- then bu
340- else bv[au]
341- if (if ((au != bt))
342- then (ao > au)
333+ let bb = aG()
334+ let bo = ba(bw, bb)
335+ let bf = (bb * ap)
336+ func bx (aN,av) = {
337+ let by = aN
338+ let bz = by._1
339+ let bA = by._2
340+ let bB = if ((bt == av))
341+ then bv
342+ else bw[av]
343+ if (if ((av != bu))
344+ then (ap > av)
343345 else false)
344- then $Tuple2((by + bA), fraction(bz, toBigInt(bn), toBigInt((bA * ao))))
345- else $Tuple2(by, bz)
346+ then $Tuple2((bz + bB), fraction(bA, toBigInt(bo), toBigInt((bB * ap))))
347+ else $Tuple2(bz, bA)
346348 }
347349
348- let bB = {
349- let aO = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
350- let aP = size(aO)
351- let aQ = $Tuple2(0, toBigInt(bn))
352- func aR (aS,aT) = if ((aT >= aP))
353- then aS
354- else bw(aS, aO[aT])
350+ let bC = {
351+ let aP = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
352+ let aQ = size(aP)
353+ let aR = $Tuple2(0, toBigInt(bo))
354+ func aS (aT,aU) = if ((aU >= aQ))
355+ then aT
356+ else bx(aT, aP[aU])
355357
356- func aU (aS,aT) = if ((aT >= aP))
357- then aS
358+ func aV (aT,aU) = if ((aU >= aQ))
359+ then aT
358360 else throw("List size exceeds 15")
359361
360- aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
362+ aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
361363 }
362- let by = bB._1
363- let bC = bB._2
364- let bz = fraction(bC, toBigInt(bn), toBigInt((be * ao)))
365- let bD = toBigInt(((by + (bn / be)) - bn))
366- func bE (aM,bF) = if ((aM._2 == true))
367- then aM
364+ let bz = bC._1
365+ let bD = bC._2
366+ let bA = fraction(bD, toBigInt(bo), toBigInt((bf * ap)))
367+ let bE = toBigInt(((bz + (bo / bf)) - bo))
368+ func bF (aN,bG) = if ((aN._2 == true))
369+ then aN
368370 else {
369- let bG = aM._1
370- let bH = (((bG * bG) + bz) / ((aw * bG) + bD))
371- if ((bH > bG))
372- then if ((1 >= toInt((bH - bG))))
373- then $Tuple2(bH, true)
374- else $Tuple2(bH, false)
375- else if ((1 >= toInt((bG - bH))))
376- then $Tuple2(bH, true)
377- else $Tuple2(bH, false)
371+ let bH = aN._1
372+ let bI = (((bH * bH) + bA) / ((ax * bH) + bE))
373+ if ((bI > bH))
374+ then if ((1 >= toInt((bI - bH))))
375+ then $Tuple2(bI, true)
376+ else $Tuple2(bI, false)
377+ else if ((1 >= toInt((bH - bI))))
378+ then $Tuple2(bI, true)
379+ else $Tuple2(bI, false)
378380 }
379381
380- let bI = {
381- let aO = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
382- let aP = size(aO)
383- let aQ = $Tuple2(toBigInt(bn), false)
384- func bl (aS,aT) = if ((aT >= aP))
385- then aS
386- else bE(aS, aO[aT])
382+ let bJ = {
383+ let aP = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
384+ let aQ = size(aP)
385+ let aR = $Tuple2(toBigInt(bo), false)
386+ func bm (aT,aU) = if ((aU >= aQ))
387+ then aT
388+ else bF(aT, aP[aU])
387389
388- func bm (aS,aT) = if ((aT >= aP))
389- then aS
390+ func bn (aT,aU) = if ((aU >= aQ))
391+ then aT
390392 else throw("List size exceeds 16")
391393
392- bm(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
394+ bn(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
393395 }
394- let bH = bI._1
395- let bp = bI._2
396- if ((bp == false))
397- then throw(("getY() not finished with " + toString(bH)))
398- else toInt(bH)
396+ let bI = bJ._1
397+ let bq = bJ._2
398+ if ((bq == false))
399+ then throw(("getY() not finished with " + toString(bI)))
400+ else toInt(bI)
399401 }
400402
401403
402-func bJ (bK,bs,aW,bn) = if (ay((bs >= 0)))
404+func bK (bL,bt,aX,bo) = if (az((bt >= 0)))
403405 then throw("i below zero")
404- else if (ay((ao > bs)))
406+ else if (az((ap > bt)))
405407 then throw("i above N_COINS")
406408 else {
407- let be = (bK * ao)
408- func bw (aM,au) = {
409- let bL = aM
410- let by = bL._1
411- let bz = bL._2
412- let bA = if (if ((bs != au))
413- then (ao > au)
409+ let bf = (bL * ap)
410+ func bx (aN,av) = {
411+ let bM = aN
412+ let bz = bM._1
413+ let bA = bM._2
414+ let bB = if (if ((bt != av))
415+ then (ap > av)
414416 else false)
415- then aW[au]
417+ then aX[av]
416418 else 0
417- if (if ((ao > au))
418- then (bs != au)
419+ if (if ((ap > av))
420+ then (bt != av)
419421 else false)
420- then $Tuple2((by + bA), fraction(bz, toBigInt(bn), toBigInt((bA * ao))))
421- else $Tuple2(by, bz)
422+ then $Tuple2((bz + bB), fraction(bA, toBigInt(bo), toBigInt((bB * ap))))
423+ else $Tuple2(bz, bA)
422424 }
423425
424- let bM = {
425- let aO = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
426- let aP = size(aO)
427- let aQ = $Tuple2(0, toBigInt(bn))
428- func aR (aS,aT) = if ((aT >= aP))
429- then aS
430- else bw(aS, aO[aT])
426+ let bN = {
427+ let aP = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
428+ let aQ = size(aP)
429+ let aR = $Tuple2(0, toBigInt(bo))
430+ func aS (aT,aU) = if ((aU >= aQ))
431+ then aT
432+ else bx(aT, aP[aU])
431433
432- func aU (aS,aT) = if ((aT >= aP))
433- then aS
434+ func aV (aT,aU) = if ((aU >= aQ))
435+ then aT
434436 else throw("List size exceeds 15")
435437
436- aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
438+ aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
437439 }
438- let by = bM._1
439- let bC = bM._2
440- let bz = fraction(bC, toBigInt(bn), toBigInt((be * ao)))
441- let bD = toBigInt(((by + (bn / be)) - bn))
442- func bN (aM,au) = if ((aM._2 == true))
443- then aM
440+ let bz = bN._1
441+ let bD = bN._2
442+ let bA = fraction(bD, toBigInt(bo), toBigInt((bf * ap)))
443+ let bE = toBigInt(((bz + (bo / bf)) - bo))
444+ func bO (aN,av) = if ((aN._2 == true))
445+ then aN
444446 else {
445- let bG = aM._1
446- let bH = (((bG * bG) + bz) / ((aw * bG) + bD))
447- if ((bH > bG))
448- then if ((1 >= toInt((bH - bG))))
449- then $Tuple2(bH, true)
450- else $Tuple2(bH, false)
451- else if ((1 >= toInt((bG - bH))))
452- then $Tuple2(bH, true)
453- else $Tuple2(bH, false)
447+ let bH = aN._1
448+ let bI = (((bH * bH) + bA) / ((ax * bH) + bE))
449+ if ((bI > bH))
450+ then if ((1 >= toInt((bI - bH))))
451+ then $Tuple2(bI, true)
452+ else $Tuple2(bI, false)
453+ else if ((1 >= toInt((bH - bI))))
454+ then $Tuple2(bI, true)
455+ else $Tuple2(bI, false)
454456 }
455457
456- let bO = {
457- let aO = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
458- let aP = size(aO)
459- let aQ = $Tuple2(toBigInt(bn), false)
460- func bl (aS,aT) = if ((aT >= aP))
461- then aS
462- else bN(aS, aO[aT])
458+ let bP = {
459+ let aP = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
460+ let aQ = size(aP)
461+ let aR = $Tuple2(toBigInt(bo), false)
462+ func bm (aT,aU) = if ((aU >= aQ))
463+ then aT
464+ else bO(aT, aP[aU])
463465
464- func bm (aS,aT) = if ((aT >= aP))
465- then aS
466+ func bn (aT,aU) = if ((aU >= aQ))
467+ then aT
466468 else throw("List size exceeds 16")
467469
468- bm(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
470+ bn(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
469471 }
470- let bH = bO._1
471- let bp = bO._2
472- if ((bp == false))
473- then throw(("get_y_D() not finished with " + toString(bH)))
474- else toInt(bH)
472+ let bI = bP._1
473+ let bq = bP._2
474+ if ((bq == false))
475+ then throw(("get_y_D() not finished with " + toString(bI)))
476+ else toInt(bI)
475477 }
476478
477479
478-func bP (aW,bQ,au,bR) = {
479- let bS = aA(bR)
480- let ba = aF()
481- let bT = ((fraction(ah, bS, ag, CEILING) * ao) / (4 * (ao - 1)))
482- let bU = af
483- let bV = aZ(aW, ba)
484- let bW = (bV - fraction(bQ, bV, bU))
485- let bX = bJ(ba, au, aW, bW)
486- let bY = (aW[au] - bX)
487- func bZ (aM,ca) = {
488- let cb = aM
489- let cc = cb._1
490- let cd = cb._2
491- let ce = if ((cd == au))
492- then (fraction(ca, bW, bV) - bX)
493- else (ca - fraction(ca, bW, bV))
494- $Tuple2((cc :+ (ca - fraction(bT, ce, ag))), (cd + 1))
480+func bQ (aX,bR,av,bS) = {
481+ let bT = aB(bS)
482+ let bb = aG()
483+ let bU = ((fraction(ai, bT, ah, CEILING) * ap) / (4 * (ap - 1)))
484+ let bV = ag
485+ let bW = ba(aX, bb)
486+ let bX = (bW - fraction(bR, bW, bV))
487+ let bY = bK(bb, av, aX, bX)
488+ let bZ = (aX[av] - bY)
489+ func ca (aN,cb) = {
490+ let cc = aN
491+ let cd = cc._1
492+ let ce = cc._2
493+ let cf = if ((ce == av))
494+ then (fraction(cb, bX, bW) - bY)
495+ else (cb - fraction(cb, bX, bW))
496+ $Tuple2((cd :+ (cb - fraction(bU, cf, ah))), (ce + 1))
495497 }
496498
497- let cf = {
498- let aO = aW
499- let aP = size(aO)
500- let aQ = $Tuple2(nil, 0)
501- func aR (aS,aT) = if ((aT >= aP))
502- then aS
503- else bZ(aS, aO[aT])
499+ let cg = {
500+ let aP = aX
501+ let aQ = size(aP)
502+ let aR = $Tuple2(nil, 0)
503+ func aS (aT,aU) = if ((aU >= aQ))
504+ then aT
505+ else ca(aT, aP[aU])
504506
505- func aU (aS,aT) = if ((aT >= aP))
506- then aS
507+ func aV (aT,aU) = if ((aU >= aQ))
508+ then aT
507509 else throw("List size exceeds 15")
508510
509- aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
511+ aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
510512 }
511- let cc = cf._1
512- let cd = cf._2
513- let cg = cc[au]
514- let ch = ((cg - bJ(ba, au, cc, bW)) - 1)
515- $Tuple2(ch, (bY - ch))
513+ let cd = cg._1
514+ let ce = cg._2
515+ let ch = cd[av]
516+ let ci = ((ch - bK(bb, av, cd, bX)) - 1)
517+ $Tuple2(ci, (bZ - ci))
516518 }
517519
518520
519-func ci (aN) = {
520- let K = aN
521- if ($isInstanceOf(K, "ByteVector"))
521+func cj (aO) = {
522+ let L = aO
523+ if ($isInstanceOf(L, "ByteVector"))
522524 then {
523- let cj = K
524- toBase58String(cj)
525+ let ck = L
526+ toBase58String(ck)
525527 }
526- else if ($isInstanceOf(K, "Unit"))
528+ else if ($isInstanceOf(L, "Unit"))
527529 then {
528- let ck = K
530+ let cl = L
529531 "WAVES"
530532 }
531533 else throw("Match error")
532534 }
533535
534536
535-func cl (cm,aN) = if (cm)
536- then $Tuple2("lockNeutrino", T)
537- else $Tuple2("unlockNeutrino", T)
537+func cm (cn,aO) = if (cn)
538+ then $Tuple2("lockNeutrino", U)
539+ else $Tuple2("unlockNeutrino", U)
538540
539541
540-func cn (cm,co,aN) = if (cm)
542+func co (cn,cp,aO) = if (cn)
541543 then {
542- let cp = cl(cm, aN)
543- let cq = cp._1
544- let cr = cp._2
545- $Tuple4(cq, cr, nil, [AttachedPayment(aN, co)])
544+ let cq = cm(cn, aO)
545+ let cr = cq._1
546+ let cs = cq._2
547+ $Tuple4(cr, cs, nil, [AttachedPayment(aO, cp)])
546548 }
547549 else {
548- let cs = cl(cm, aN)
549- let cq = cs._1
550- let cr = cs._2
551- $Tuple4(cq, cr, [co, toBase58String(aN)], nil)
550+ let ct = cm(cn, aO)
551+ let cr = ct._1
552+ let cs = ct._2
553+ $Tuple4(cr, cs, [cp, toBase58String(aO)], nil)
552554 }
553555
554556
555-func cm (co,ct) = if (containsElement(Y, ct))
557+func cn (cp,cu) = if (containsElement(Z, cu))
556558 then {
557- let cu = cn(true, co, fromBase58String(ct))
558- let cq = cu._1
559- let cv = cu._2
560- let cw = cu._3
561- let cx = cu._4
562- invoke(cv, cq, cw, cx)
559+ let cv = co(true, cp, fromBase58String(cu))
560+ let cr = cv._1
561+ let cw = cv._2
562+ let cx = cv._3
563+ let cy = cv._4
564+ invoke(cw, cr, cx, cy)
563565 }
564566 else 0
565567
566568
567-func cy (co,ct) = if (containsElement(Y, ct))
569+func cz (cp,cu) = if (containsElement(Z, cu))
568570 then {
569- let cz = cn(false, co, fromBase58String(ct))
570- let cq = cz._1
571- let cv = cz._2
572- let cw = cz._3
573- let cx = cz._4
574- invoke(cv, cq, cw, cx)
571+ let cA = co(false, cp, fromBase58String(cu))
572+ let cr = cA._1
573+ let cw = cA._2
574+ let cx = cA._3
575+ let cy = cA._4
576+ invoke(cw, cr, cx, cy)
575577 }
576578 else 0
577579
578580
579-func cA (aN) = {
580- let cB = {
581- let K = aN
582- if ($isInstanceOf(K, "ByteVector"))
581+func cB (aO) = {
582+ let cC = {
583+ let L = aO
584+ if ($isInstanceOf(L, "ByteVector"))
583585 then {
584- let cC = K
585- if ((cC == X))
586- then getInteger(T, ((("rpd_balance_" + toBase58String(cC)) + "_") + toString(this)))
586+ let cD = L
587+ if ((cD == Y))
588+ then getInteger(U, ((("rpd_balance_" + toBase58String(cD)) + "_") + toString(this)))
587589 else 0
588590 }
589- else if ($isInstanceOf(K, "Unit"))
591+ else if ($isInstanceOf(L, "Unit"))
590592 then 0
591593 else throw("Match error")
592594 }
593- let K = cB
594- if ($isInstanceOf(K, "Int"))
595+ let L = cC
596+ if ($isInstanceOf(L, "Int"))
595597 then {
596- let au = K
597- au
598+ let av = L
599+ av
598600 }
599601 else 0
600602 }
601603
602604
603-func cD () = {
604- let cE = aK()
605- func cF (aM,aN) = {
606- let cG = aM
607- let cH = cG._1
608- let au = cG._2
609- if (cH)
610- then $Tuple2(cH, au)
605+func cE () = {
606+ let cF = aL()
607+ func cG (aN,aO) = {
608+ let cH = aN
609+ let cI = cH._1
610+ let av = cH._2
611+ if (cI)
612+ then $Tuple2(cI, av)
611613 else {
612- let cI = (assetBalance(this, fromBase58String(aN)) + cA(fromBase58String(aN)))
613- if ((cE[au] > cI))
614- then $Tuple2(true, au)
615- else $Tuple2(false, (au + 1))
614+ let cJ = (assetBalance(this, fromBase58String(aO)) + cB(fromBase58String(aO)))
615+ if ((cF[av] > cJ))
616+ then $Tuple2(true, av)
617+ else $Tuple2(false, (av + 1))
616618 }
617619 }
618620
619- let aO = an
620- let aP = size(aO)
621- let aQ = $Tuple2(false, 0)
622- func aR (aS,aT) = if ((aT >= aP))
623- then aS
624- else cF(aS, aO[aT])
621+ let aP = ao
622+ let aQ = size(aP)
623+ let aR = $Tuple2(false, 0)
624+ func aS (aT,aU) = if ((aU >= aQ))
625+ then aT
626+ else cG(aT, aP[aU])
625627
626- func aU (aS,aT) = if ((aT >= aP))
627- then aS
628+ func aV (aT,aU) = if ((aU >= aQ))
629+ then aT
628630 else throw("List size exceeds 15")
629631
630- aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
632+ aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
631633 }
632634
633635
634-func cJ (au) = ap(("Suspicious state with asset: " + an[au]))
636+func cK (av) = aq(("Suspicious state with asset: " + ao[av]))
635637
636638
637-func cK (bR,cx) = {
638- func cL (aM,cM) = (aM :+ ScriptTransfer(bR, cM.amount, cM.assetId))
639+func cL (bS,cy) = {
640+ func cM (aN,cN) = (aN :+ ScriptTransfer(bS, cN.amount, cN.assetId))
639641
640- let aO = cx
641- let aP = size(aO)
642- let aQ = nil
643- func aR (aS,aT) = if ((aT >= aP))
644- then aS
645- else cL(aS, aO[aT])
642+ let aP = cy
643+ let aQ = size(aP)
644+ let aR = nil
645+ func aS (aT,aU) = if ((aU >= aQ))
646+ then aT
647+ else cM(aT, aP[aU])
646648
647- func aU (aS,aT) = if ((aT >= aP))
648- then aS
649+ func aV (aT,aU) = if ((aU >= aQ))
650+ then aT
649651 else throw("List size exceeds 15")
650652
651- aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
653+ aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
652654 }
653655
654656
655-func cN (cO) = {
656- let cP = valueOrErrorMessage(getInteger(this, m), "No dAppThresholdCoef key")
657- let cQ = 10000
658- let cR = max(cO)
659- let cS = min(cO)
660- let cT = fraction(cR, cQ, cS)
661- if ((cT > (cP * cQ)))
657+func cO (cP) = {
658+ let cQ = valueOrErrorMessage(getInteger(this, n), "No dAppThresholdCoef key")
659+ let cR = 10000
660+ let cS = max(cP)
661+ let cT = min(cP)
662+ let cU = fraction(cS, cR, cT)
663+ if ((cU > (cQ * cR)))
662664 then throw("New balance in assets of the DApp is less than threshold")
663665 else false
664666 }
665667
666668
667-func cU (an) = {
668- let cV = split(an, ",")
669- func cW (cX,aN) = {
670- let cY = valueOrErrorMessage(fromBase58String(aN), ("fromBase58String: " + aN))
671- let cZ = valueOrErrorMessage(assetInfo(cY), ("assetInfo: " + aN)).decimals
672- if ((cZ != d))
669+func cV (ao) = {
670+ let cW = split(ao, ",")
671+ func cX (cY,aO) = {
672+ let cZ = valueOrErrorMessage(fromBase58String(aO), ("fromBase58String: " + aO))
673+ let da = valueOrErrorMessage(assetInfo(cZ), ("assetInfo: " + aO)).decimals
674+ if ((da != e))
673675 then throw("wrong decimals")
674676 else false
675677 }
676678
677- let aO = cV
678- let aP = size(aO)
679- let aQ = false
680- func aR (aS,aT) = if ((aT >= aP))
681- then aS
682- else cW(aS, aO[aT])
679+ let aP = cW
680+ let aQ = size(aP)
681+ let aR = false
682+ func aS (aT,aU) = if ((aU >= aQ))
683+ then aT
684+ else cX(aT, aP[aU])
683685
684- func aU (aS,aT) = if ((aT >= aP))
685- then aS
686+ func aV (aT,aU) = if ((aU >= aQ))
687+ then aT
686688 else throw("List size exceeds 15")
687689
688- aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
690+ aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
689691 }
690692
691693
692-@Callable(da)
693-func D (aW,ba) = {
694- let bn = bc(aW, ba)
695- $Tuple2([IntegerEntry("D", bn)], bn)
694+@Callable(db)
695+func D (aX,bb) = {
696+ let bo = bd(aX, bb)
697+ $Tuple2([IntegerEntry("D", bo)], bo)
696698 }
697699
698700
699701
700-@Callable(da)
701-func init (an,aF,db) = if (!(isDataStorageUntouched(this)))
702+@Callable(db)
703+func init (ao,aG,dc) = if (!(isDataStorageUntouched(this)))
702704 then throw("Already initialized")
703705 else {
704- let dc = "s_Multi_USD"
705- let dd = ("ShareToken of SwopFi protocol for MultiStable USD pool at address " + toString(this))
706- let de = Issue(dc, dd, 0, 6, true)
707- let df = calculateAssetId(de)
708- if (cU(an))
706+ let dd = "s_Multi_USD"
707+ let de = ("ShareToken of SwopFi protocol for MultiStable USD pool at address " + toString(this))
708+ let df = Issue(dd, de, 0, 6, true)
709+ let dg = calculateAssetId(df)
710+ if (cV(ao))
709711 then throw()
710712 else {
711- let dg = [StringEntry(f, an), IntegerEntry("initial_A", aF), IntegerEntry("future_A", aF), IntegerEntry(l, getIntegerValue(H, "base_fee_flat")), StringEntry(j, toBase58String(df)), IntegerEntry(k, 0), IntegerEntry(m, 15), BooleanEntry(h, true), de]
712- if (db)
713- then (dg ++ [BooleanEntry(r, db), IntegerEntry(s, (aa + (ac * ab)))])
714- else dg
713+ let dh = [StringEntry(g, ao), IntegerEntry("initial_A", aG), IntegerEntry("future_A", aG), IntegerEntry(m, getIntegerValue(I, "base_fee_flat")), StringEntry(k, toBase58String(dg)), IntegerEntry(l, 0), IntegerEntry(n, 15), BooleanEntry(i, true), df]
714+ if (dc)
715+ then (dh ++ [BooleanEntry(s, dc), IntegerEntry(t, (ab + (ad * ac)))])
716+ else dh
715717 }
716718 }
717719
718720
719721
720-@Callable(da)
721-func addLiquidity (dh,di) = valueOrElse(as(), {
722- let ba = aF()
723- let aW = aK()
724- let bV = if ((af == 0))
722+@Callable(db)
723+func addLiquidity (di,dj) = valueOrElse(at(), {
724+ let bb = aG()
725+ let aX = aL()
726+ let bW = if ((ag == 0))
725727 then 0
726- else bq(aW, ba)
727- let cx = da.payments
728- let dj = size(cx)
729- func dk (dl) = if ((dj > ao))
730- then throw(("payments size > " + toString(ao)))
731- else if ((1 > dj))
728+ else br(aX, bb)
729+ let cy = db.payments
730+ let dk = size(cy)
731+ func dl (dk) = if ((dk > ap))
732+ then throw(("payments size > " + toString(ap)))
733+ else if ((1 > dk))
732734 then throw("payments size < 1")
733- else if (if ((af == 0))
734- then (ao != dj)
735+ else if (if ((ag == 0))
736+ then (ap != dk)
735737 else false)
736738 then throw("initial deposit requires all coins")
737739 else {
738- func dm (aM,cM) = if (containsElement(an, ci(cM.assetId)))
740+ func dm (aN,cN) = if (containsElement(ao, cj(cN.assetId)))
739741 then true
740742 else throw("Invalid asset in payment")
741743
742- let aO = cx
743- let aP = size(aO)
744- let aQ = false
745- func aR (aS,aT) = if ((aT >= aP))
746- then aS
747- else dm(aS, aO[aT])
744+ let aP = cy
745+ let aQ = size(aP)
746+ let aR = false
747+ func aS (aT,aU) = if ((aU >= aQ))
748+ then aT
749+ else dm(aT, aP[aU])
748750
749- func aU (aS,aT) = if ((aT >= aP))
750- then aS
751+ func aV (aT,aU) = if ((aU >= aQ))
752+ then aT
751753 else throw("List size exceeds 15")
752754
753- aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
755+ aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
754756 }
755757
756- if (!(dk(dj)))
758+ if (!(dl(dk)))
757759 then throw()
758760 else {
759- let cH = cD()
760- if (cH._1)
761- then (cJ(cH._2) ++ cK(da.caller, cx))
761+ let cI = cE()
762+ if (cI._1)
763+ then (cK(cI._2) ++ cL(db.caller, cy))
762764 else {
763- func cL (aM,aN) = {
764- let dn = aM
765- let cO = dn._1
766- let au = dn._2
767- let do = dn._3
768- if (if ((dj > do))
769- then (ci(cx[do].assetId) == aN)
765+ let dn = size(cy)
766+ func cM (aN,aO) = {
767+ let do = aN
768+ let cP = do._1
769+ let av = do._2
770+ let dp = do._3
771+ if (if ((dn > dp))
772+ then (cj(cy[dp].assetId) == aO)
770773 else false)
771- then $Tuple3((cO :+ (aW[au] + cx[do].amount)), (au + 1), (do + 1))
772- else $Tuple3((cO :+ aW[au]), (au + 1), do)
774+ then {
775+ let dq = cn(cy[dp].amount, cj(cy[dp].assetId))
776+ if ((dq == dq))
777+ then $Tuple3((cP :+ (aX[av] + cy[dp].amount)), (av + 1), (dp + 1))
778+ else throw("Strict value is not equal to itself.")
779+ }
780+ else $Tuple3((cP :+ aX[av]), (av + 1), dp)
773781 }
774782
775- let dp = {
776- let aO = an
777- let aP = size(aO)
778- let aQ = $Tuple3(nil, 0, 0)
779- func aR (aS,aT) = if ((aT >= aP))
780- then aS
781- else cL(aS, aO[aT])
783+ let dr = {
784+ let aP = ao
785+ let aQ = size(aP)
786+ let aR = $Tuple3(nil, 0, 0)
787+ func aS (aT,aU) = if ((aU >= aQ))
788+ then aT
789+ else cM(aT, aP[aU])
782790
783- func aU (aS,aT) = if ((aT >= aP))
784- then aS
791+ func aV (aT,aU) = if ((aU >= aQ))
792+ then aT
785793 else throw("List size exceeds 15")
786794
787- aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
795+ aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
788796 }
789- let cO = dp._1
790- let dq = dp._2
791- let dr = dp._3
792- if ((dj > dr))
797+ let cP = dr._1
798+ let ds = dr._2
799+ let dt = dr._3
800+ if (((dn - 1) > dt))
793801 then throw("Incorect payments order")
794- else if (cN(cO))
802+ else if (cO(cP))
795803 then throw()
796804 else {
797- let bW = bq(cO, ba)
798- if (ay((bW > bV)))
805+ let bX = br(cP, bb)
806+ if (az((bX > bW)))
799807 then throw("D1 > D0")
800808 else {
801- let bS = aA(da.caller)
802- func ds (aM,dt) = {
803- let du = aM
804- let dv = du._1
805- let dw = du._2
806- let au = du._3
807- if ((af > 0))
809+ let bT = aB(db.caller)
810+ func du (aN,dv) = {
811+ let dw = aN
812+ let dx = dw._1
813+ let dy = dw._2
814+ let av = dw._3
815+ if ((ag > 0))
808816 then {
809- let bT = ((fraction(ah, bS, ag, CEILING) * ao) / (4 * (ao - 1)))
810- let dx = {
811- let dy = fraction(bW, aW[au], bV)
812- let dz = if ((dy > dt))
813- then (dy - dt)
814- else (dt - dy)
815- fraction(bT, dz, ag)
817+ let bU = ((fraction(ai, bT, ah, CEILING) * ap) / (4 * (ap - 1)))
818+ let dz = {
819+ let dA = fraction(bX, aX[av], bW)
820+ let dB = if ((dA > dv))
821+ then (dA - dv)
822+ else (dv - dA)
823+ fraction(bU, dB, ah)
816824 }
817- let dA = fraction(dx, ai, ag)
818- let dB = (dt - dx)
819- let dC = (dt - dx)
820- let dD = (dt - aW[au])
821- let dE = if ((dD > 0))
822- then cm((dD - dx), an[au])
823- else cy(dx, an[au])
824- $Tuple3((dv :+ dC), (dw ++ [ScriptTransfer(W, (dx - dA), fromBase58String(an[au])), ScriptTransfer(R, dA, fromBase58String(an[au])), IntegerEntry((an[au] + g), dB)]), (au + 1))
825+ let dC = fraction(dz, aj, ah)
826+ let dD = (dv - dC)
827+ let dE = (dv - dz)
828+ let dF = cz(dz, ao[av])
829+ if ((dF == dF))
830+ then $Tuple3((dx :+ dE), (dy ++ [ScriptTransfer(X, (dz - dC), fromBase58String(ao[av])), ScriptTransfer(S, dC, fromBase58String(ao[av])), IntegerEntry((ao[av] + h), dD)]), (av + 1))
831+ else throw("Strict value is not equal to itself.")
825832 }
826- else $Tuple3((dv :+ dt), (dw :+ IntegerEntry((an[au] + g), dt)), (au + 1))
833+ else $Tuple3((dx :+ dv), (dy :+ IntegerEntry((ao[av] + h), dv)), (av + 1))
827834 }
828835
829- let dF = {
830- let aO = cO
831- let aP = size(aO)
832- let aQ = $Tuple3(nil, nil, 0)
833- func bl (aS,aT) = if ((aT >= aP))
834- then aS
835- else ds(aS, aO[aT])
836+ let dG = {
837+ let aP = cP
838+ let aQ = size(aP)
839+ let aR = $Tuple3(nil, nil, 0)
840+ func bm (aT,aU) = if ((aU >= aQ))
841+ then aT
842+ else du(aT, aP[aU])
836843
837- func bm (aS,aT) = if ((aT >= aP))
838- then aS
844+ func bn (aT,aU) = if ((aU >= aQ))
845+ then aT
839846 else throw("List size exceeds 15")
840847
841- bm(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
848+ bn(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
842849 }
843- let dv = dF._1
844- let dw = dF._2
845- let dG = bq(dv, ba)
846- let dH = if ((af == 0))
847- then bW
848- else fraction(af, (dG - bV), bV)
849- if (ay((dH >= dh)))
850+ let dx = dG._1
851+ let dy = dG._2
852+ let dH = br(dx, bb)
853+ let dI = if ((ag == 0))
854+ then bX
855+ else fraction(ag, (dH - bW), bW)
856+ if (az((dI >= di)))
850857 then throw("Slippage screwed you")
851- else if (di)
858+ else if (dj)
852859 then {
853- let dI = invoke(this, "reissueShare", [dH], nil)
854- if ((dI == dI))
860+ let dJ = invoke(this, "reissueShare", [dI], nil)
861+ if ((dJ == dJ))
855862 then {
856- let dJ = invoke(V, "lockShareTokens", [toString(this)], [AttachedPayment(ae, dH)])
857- if ((dJ == dJ))
858- then (dw :+ IntegerEntry(k, (af + dH)))
863+ let dq = invoke(W, "lockShareTokens", [toString(this)], [AttachedPayment(af, dI)])
864+ if ((dq == dq))
865+ then (dy :+ IntegerEntry(l, (ag + dI)))
859866 else throw("Strict value is not equal to itself.")
860867 }
861868 else throw("Strict value is not equal to itself.")
862869 }
863- else (dw ++ [Reissue(ae, dH, true), ScriptTransfer(da.caller, dH, ae), IntegerEntry(k, (af + dH))])
870+ else (dy ++ [Reissue(af, dI, true), ScriptTransfer(db.caller, dI, af), IntegerEntry(l, (ag + dI))])
864871 }
865872 }
866873 }
869876
870877
871878
872-@Callable(da)
873-func reissueShare (co) = valueOrElse(av(da), [Reissue(ae, co, true)])
879+@Callable(db)
880+func reissueShare (cp) = valueOrElse(aw(db), [Reissue(af, cp, true)])
874881
875882
876883
877-@Callable(da)
884+@Callable(db)
878885 func getDy (dK,dL,dM,dN) = {
879- let aW = aK()
880- let dO = valueOrErrorMessage(indexOf(an, dK), "unknown token in")
881- let dP = valueOrErrorMessage(indexOf(an, dL), "unknown token out")
882- let bu = (aW[dO] + dM)
883- let bH = br(dO, dP, bu, aW)
884- let ch = ((aW[dP] - bH) - 1)
885- let bS = aA(Address(fromBase58String(dN)))
886- let bT = fraction(fraction(ah, bS, ag, CEILING), ch, ag)
887- $Tuple2(nil, $Tuple2((ch - bT), bT))
886+ let aX = aL()
887+ let dO = valueOrErrorMessage(indexOf(ao, dK), "unknown token in")
888+ let dP = valueOrErrorMessage(indexOf(ao, dL), "unknown token out")
889+ let bv = (aX[dO] + dM)
890+ let bI = bs(dO, dP, bv, aX)
891+ let ci = ((aX[dP] - bI) - 1)
892+ let bT = aB(Address(fromBase58String(dN)))
893+ let bU = fraction(fraction(ai, bT, ah, CEILING), ci, ah)
894+ $Tuple2(nil, $Tuple2((ci - bU), bU))
888895 }
889896
890897
891898
892-@Callable(da)
893-func exchange (dQ,dR) = valueOrElse(as(), if ((size(da.payments) != 1))
899+@Callable(db)
900+func exchange (dQ,dR) = valueOrElse(at(), if ((size(db.payments) != 1))
894901 then throw("size(payments) != 1")
895902 else {
896- let cH = cD()
897- if (cH._1)
898- then (cJ(cH._2) ++ cK(da.caller, da.payments))
903+ let cI = cE()
904+ if (cI._1)
905+ then (cK(cI._2) ++ cL(db.caller, db.payments))
899906 else {
900- let cM = da.payments[0]
901- let dS = ci(cM.assetId)
907+ let cN = db.payments[0]
908+ let dS = cj(cN.assetId)
902909 let dT = fromBase58String(dQ)
903- let dM = cM.amount
904- let dO = valueOrErrorMessage(indexOf(an, dS), "unknown token in")
905- let dP = valueOrErrorMessage(indexOf(an, dQ), "unknown token out")
906- let aW = aK()
907- let bu = (aW[dO] + dM)
908- let bH = br(dO, dP, bu, aW)
909- let dU = ((aW[dP] - bH) - 1)
910- let bS = aA(da.caller)
911- let bT = fraction(dU, fraction(ah, bS, ag, CEILING), ag)
912- let ch = (dU - bT)
913- let dA = fraction(bT, ai, ag)
914- if (ay((ch >= dR)))
910+ let dM = cN.amount
911+ let dO = valueOrErrorMessage(indexOf(ao, dS), "unknown token in")
912+ let dP = valueOrErrorMessage(indexOf(ao, dQ), "unknown token out")
913+ let aX = aL()
914+ let bv = (aX[dO] + dM)
915+ let bI = bs(dO, dP, bv, aX)
916+ let dU = ((aX[dP] - bI) - 1)
917+ let bT = aB(db.caller)
918+ let bU = fraction(dU, fraction(ai, bT, ah, CEILING), ah)
919+ let ci = (dU - bU)
920+ let dC = fraction(bU, aj, ah)
921+ if (az((ci >= dR)))
915922 then throw("Exchange resulted in fewer coins than expected")
916923 else {
917- func dV (aM,dW) = {
918- let dX = aM
919- let cO = dX._1
920- let au = dX._2
921- if ((au == dO))
922- then $Tuple2((cO :+ (dW + dM)), (au + 1))
923- else if ((au == dP))
924- then $Tuple2((cO :+ (dW - dU)), (au + 1))
925- else $Tuple2((cO :+ dW), (au + 1))
924+ func dV (aN,dW) = {
925+ let dX = aN
926+ let cP = dX._1
927+ let av = dX._2
928+ if ((av == dO))
929+ then $Tuple2((cP :+ (dW + dM)), (av + 1))
930+ else if ((av == dP))
931+ then $Tuple2((cP :+ (dW - dU)), (av + 1))
932+ else $Tuple2((cP :+ dW), (av + 1))
926933 }
927934
928935 let dY = {
929- let aO = aW
930- let aP = size(aO)
931- let aQ = $Tuple2(nil, 0)
932- func aR (aS,aT) = if ((aT >= aP))
933- then aS
934- else dV(aS, aO[aT])
936+ let aP = aX
937+ let aQ = size(aP)
938+ let aR = $Tuple2(nil, 0)
939+ func aS (aT,aU) = if ((aU >= aQ))
940+ then aT
941+ else dV(aT, aP[aU])
935942
936- func aU (aS,aT) = if ((aT >= aP))
937- then aS
943+ func aV (aT,aU) = if ((aU >= aQ))
944+ then aT
938945 else throw("List size exceeds 15")
939946
940- aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
947+ aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
941948 }
942- let cO = dY._1
943- let au = dY._2
944- if (cN(cO))
949+ let cP = dY._1
950+ let av = dY._2
951+ if (cO(cP))
945952 then throw()
946953 else {
947- let dJ = cm(cM.amount, ci(cM.assetId))
948- if ((dJ == dJ))
954+ let dq = cn(cN.amount, cj(cN.assetId))
955+ if ((dq == dq))
949956 then {
950- let dZ = cy(dU, dQ)
951- if ((dZ == dZ))
952- then $Tuple2([IntegerEntry((dS + g), bu), IntegerEntry((dQ + g), (aW[dP] - dU)), ScriptTransfer(da.caller, ch, dT), ScriptTransfer(R, dA, dT), ScriptTransfer(W, (bT - dA), dT)], $Tuple2(ch, dT))
957+ let dF = cz(dU, dQ)
958+ if ((dF == dF))
959+ then $Tuple2([IntegerEntry((dS + h), bv), IntegerEntry((dQ + h), (aX[dP] - dU)), ScriptTransfer(db.caller, ci, dT), ScriptTransfer(S, dC, dT), ScriptTransfer(X, (bU - dC), dT)], $Tuple2(ci, dT))
953960 else throw("Strict value is not equal to itself.")
954961 }
955962 else throw("Strict value is not equal to itself.")
960967
961968
962969
963-@Callable(da)
964-func withdraw (ea) = valueOrElse(as(), if ((size(da.payments) != 1))
970+@Callable(db)
971+func withdraw (dZ,ea) = valueOrElse(at(), if ((size(db.payments) != 1))
965972 then throw("size(payments) != 1")
966973 else {
967- let eb = da.payments[0].amount
968- let ec = da.payments[0].assetId
969- if ((ae != ec))
970- then throw("unknown payment token")
974+ let cI = cE()
975+ if (cI._1)
976+ then (cK(cI._2) ++ cL(db.caller, db.payments))
971977 else {
972- let cH = cD()
973- if (cH._1)
974- then (cJ(cH._2) ++ cK(da.originCaller, da.payments))
978+ let cN = db.payments[0]
979+ let dS = cN.assetId
980+ if ((dS != af))
981+ then throw("unknown token")
975982 else {
976- func ds (aM,ed) = {
977- let ee = aM
978- let dw = ee._1
979- let au = ee._2
980- let ef = fraction(ed, eb, af)
981- if (ay((ef >= ea[au])))
982- then throw("Withdrawal resulted in fewer coins than expected")
983- else {
984- let dZ = cy(ef, an[au])
985- if ((dZ == dZ))
986- then $Tuple2((dw ++ [IntegerEntry((an[au] + g), (ed - ef)), ScriptTransfer(da.originCaller, ef, fromBase58String(an[au]))]), (au + 1))
987- else throw("Strict value is not equal to itself.")
983+ let eb = cN.amount
984+ let bV = ag
985+ let ec = if ((ea > 0))
986+ then invoke(W, "withdrawShareTokens", [toString(this), ea], nil)
987+ else 0
988+ if ((ec == ec))
989+ then {
990+ let ed = (eb + ea)
991+ func du (aN,ee) = {
992+ let ef = aN
993+ let dy = ef._1
994+ let av = ef._2
995+ let eg = fraction(ee, ed, bV)
996+ if (az((eg >= dZ[av])))
997+ then throw("Withdrawal resulted in fewer coins than expected")
998+ else {
999+ let dF = cz(eg, ao[av])
1000+ if ((dF == dF))
1001+ then $Tuple2((dy ++ [IntegerEntry((ao[av] + h), (ee - eg)), ScriptTransfer(db.caller, eg, fromBase58String(ao[av]))]), (av + 1))
1002+ else throw("Strict value is not equal to itself.")
1003+ }
9881004 }
989- }
9901005
991- let eg = {
992- let aO = aK()
993- let aP = size(aO)
994- let aQ = $Tuple2(nil, 0)
995- func aR (aS,aT) = if ((aT >= aP))
996- then aS
997- else ds(aS, aO[aT])
1006+ let eh = {
1007+ let aP = aL()
1008+ let aQ = size(aP)
1009+ let aR = $Tuple2(nil, 0)
1010+ func aS (aT,aU) = if ((aU >= aQ))
1011+ then aT
1012+ else du(aT, aP[aU])
9981013
999- func aU (aS,aT) = if ((aT >= aP))
1000- then aS
1001- else throw("List size exceeds 15")
1014+ func aV (aT,aU) = if ((aU >= aQ))
1015+ then aT
1016+ else throw("List size exceeds 15")
10021017
1003- aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
1004- }
1005- let dw = eg._1
1006- let au = eg._2
1007- (dw ++ [Burn(ae, eb), IntegerEntry(k, (af - eb))])
1018+ aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
1019+ }
1020+ let dy = eh._1
1021+ let av = eh._2
1022+ (dy ++ [Burn(af, ed), IntegerEntry(l, (ag - ed))])
1023+ }
1024+ else throw("Strict value is not equal to itself.")
10081025 }
10091026 }
10101027 })
10111028
10121029
10131030
1014-@Callable(da)
1015-func withdrawWithUnlock (ea,eh) = valueOrElse(as(), if ((0 >= eh))
1016- then throw("Unlock amount must be positive")
1017- else {
1018- let cH = cD()
1019- if (cH._1)
1020- then (cJ(cH._2) ++ cK(da.caller, da.payments))
1021- else {
1022- let eb = if ((size(da.payments) > 0))
1023- then if ((size(da.payments) != 1))
1024- then throw("size(payments) != 1")
1025- else {
1026- let ec = da.payments[0].assetId
1027- if ((ae != ec))
1028- then throw("unknown payment token")
1029- else da.payments[0].amount
1030- }
1031- else 0
1032- let ei = invoke(V, "withdrawShareTokens", [toString(this), eh], nil)
1033- if ((ei == ei))
1034- then {
1035- let ej = (eb + eh)
1036- let dE = invoke(this, "withdraw", [ea], [AttachedPayment(ae, ej)])
1037- if ((dE == dE))
1038- then nil
1039- else throw("Strict value is not equal to itself.")
1040- }
1041- else throw("Strict value is not equal to itself.")
1042- }
1043- })
1044-
1045-
1046-
1047-@Callable(da)
1048-func calcWithdrawOneCoin (ek,dQ,el) = {
1049- let au = valueOrErrorMessage(indexOf(an, dQ), "unknown token out")
1050- $Tuple2(nil, bP(aK(), ek, au, Address(fromBase58String(el)))._1)
1031+@Callable(db)
1032+func calcWithdrawOneCoin (ei,dQ,ej) = {
1033+ let av = valueOrErrorMessage(indexOf(ao, dQ), "unknown token out")
1034+ $Tuple2(nil, bQ(aL(), ei, av, Address(fromBase58String(ej)))._1)
10511035 }
10521036
10531037
10541038
1055-@Callable(da)
1056-func withdrawOneCoin (dQ,em) = valueOrElse(as(), if ((size(da.payments) != 1))
1039+@Callable(db)
1040+func withdrawOneCoin (dQ,ek,ea) = valueOrElse(at(), if ((size(db.payments) != 1))
10571041 then throw("size(payments) != 1")
10581042 else {
1059- let cH = cD()
1060- if (cH._1)
1061- then (cJ(cH._2) ++ cK(da.originCaller, da.payments))
1043+ let cI = cE()
1044+ if (cI._1)
1045+ then (cK(cI._2) ++ cL(db.caller, db.payments))
10621046 else {
1063- let eb = da.payments[0].amount
1064- let ec = da.payments[0].assetId
1065- if ((ec != ae))
1047+ let cN = db.payments[0]
1048+ let dS = cN.assetId
1049+ if ((dS != af))
10661050 then throw("unknown token")
10671051 else {
1068- let en = valueOrErrorMessage(indexOf(an, dQ), "unknown token out")
1069- let aW = aK()
1070- let eo = bP(aW, eb, en, da.originCaller)
1071- let ch = eo._1
1072- let ep = eo._2
1073- if (ay((ch >= em)))
1074- then throw("Not enough coins removed")
1075- else {
1076- let dA = fraction(ep, ai, ag)
1077- let eq = (ch + ep)
1078- func dV (aM,dW) = {
1079- let er = aM
1080- let cO = er._1
1081- let au = er._2
1082- if ((au == en))
1083- then $Tuple2((cO :+ (dW - eq)), (au + 1))
1084- else $Tuple2((cO :+ dW), (au + 1))
1085- }
1052+ let el = valueOrErrorMessage(indexOf(ao, dQ), "unknown token out")
1053+ let em = cN.amount
1054+ let ec = if ((ea > 0))
1055+ then invoke(W, "withdrawShareTokens", [toString(this), ea], nil)
1056+ else 0
1057+ if ((ec == ec))
1058+ then {
1059+ let ed = (em + ea)
1060+ let aX = aL()
1061+ let en = bQ(aX, ed, el, db.caller)
1062+ let ci = en._1
1063+ let eo = en._2
1064+ if (az((ci >= ek)))
1065+ then throw("Not enough coins removed")
1066+ else {
1067+ let dC = fraction(eo, aj, ah)
1068+ let ep = (ci + eo)
1069+ func dV (aN,dW) = {
1070+ let eq = aN
1071+ let cP = eq._1
1072+ let av = eq._2
1073+ if ((av == el))
1074+ then $Tuple2((cP :+ (dW - ep)), (av + 1))
1075+ else $Tuple2((cP :+ dW), (av + 1))
1076+ }
10861077
1087- let es = {
1088- let aO = aW
1089- let aP = size(aO)
1090- let aQ = $Tuple2(nil, 0)
1091- func aR (aS,aT) = if ((aT >= aP))
1092- then aS
1093- else dV(aS, aO[aT])
1078+ let er = {
1079+ let aP = aX
1080+ let aQ = size(aP)
1081+ let aR = $Tuple2(nil, 0)
1082+ func aS (aT,aU) = if ((aU >= aQ))
1083+ then aT
1084+ else dV(aT, aP[aU])
10941085
1095- func aU (aS,aT) = if ((aT >= aP))
1096- then aS
1097- else throw("List size exceeds 15")
1086+ func aV (aT,aU) = if ((aU >= aQ))
1087+ then aT
1088+ else throw("List size exceeds 15")
10981089
1099- aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
1100- }
1101- let cO = es._1
1102- let et = es._2
1103- if (cN(cO))
1104- then throw()
1105- else {
1106- let dZ = cy(eq, dQ)
1107- if ((dZ == dZ))
1108- then [ScriptTransfer(da.originCaller, ch, fromBase58String(dQ)), IntegerEntry((an[en] + g), (aW[en] - eq)), Burn(ae, eb), ScriptTransfer(R, dA, fromBase58String(dQ)), ScriptTransfer(W, (ep - dA), fromBase58String(dQ)), IntegerEntry(k, (af - eb))]
1109- else throw("Strict value is not equal to itself.")
1090+ aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
1091+ }
1092+ let cP = er._1
1093+ let av = er._2
1094+ if (cO(cP))
1095+ then throw()
1096+ else {
1097+ let dF = cz(ep, dQ)
1098+ if ((dF == dF))
1099+ then [ScriptTransfer(db.caller, ci, fromBase58String(dQ)), IntegerEntry((ao[av] + h), (aX[av] - ep)), Burn(af, ed), ScriptTransfer(S, dC, fromBase58String(dQ)), ScriptTransfer(X, (eo - dC), fromBase58String(dQ)), IntegerEntry(l, (ag - ed))]
1100+ else throw("Strict value is not equal to itself.")
1101+ }
11101102 }
11111103 }
1104+ else throw("Strict value is not equal to itself.")
11121105 }
11131106 }
11141107 })
11151108
11161109
11171110
1118-@Callable(da)
1119-func withdrawOneCoinWithUnlock (dQ,em,eh) = valueOrElse(as(), if ((0 >= eh))
1120- then throw("Unlock amount must be positive")
1121- else {
1122- let cH = cD()
1123- if (cH._1)
1124- then (cJ(cH._2) ++ cK(da.caller, da.payments))
1125- else {
1126- let eb = if ((size(da.payments) > 0))
1127- then if ((size(da.payments) != 1))
1128- then throw("size(payments) != 1")
1129- else {
1130- let ec = da.payments[0].assetId
1131- if ((ae != ec))
1132- then throw("unknown payment token")
1133- else da.payments[0].amount
1134- }
1135- else 0
1136- let ei = invoke(V, "withdrawShareTokens", [toString(this), eh], nil)
1137- if ((ei == ei))
1138- then {
1139- let ej = (eb + eh)
1140- let dE = invoke(this, "withdrawOneCoin", [dQ, em], [AttachedPayment(ae, ej)])
1141- if ((dE == dE))
1142- then nil
1143- else throw("Strict value is not equal to itself.")
1144- }
1145- else throw("Strict value is not equal to itself.")
1146- }
1147- })
1111+@Callable(db)
1112+func A () = $Tuple2(nil, aG())
11481113
11491114
11501115
1151-@Callable(da)
1152-func A () = $Tuple2(nil, aF())
1153-
1154-
1155-
1156-@Callable(da)
1116+@Callable(db)
11571117 func getVirtualPrice () = {
1158- let bn = aZ(aK(), aF())
1159- $Tuple2(nil, fraction(bn, a, af))
1118+ let bo = ba(aL(), aG())
1119+ $Tuple2(nil, fraction(bo, b, ag))
11601120 }
11611121
11621122
11631123
1164-@Callable(da)
1165-func calcTokenAmount (eu,ev) = {
1166- let ba = aF()
1167- let ew = aK()
1168- let bV = bq(ew, ba)
1169- func ex (aM,ed) = {
1170- let ey = aM
1171- let cO = ey._1
1172- let au = ey._2
1173- let dt = (ed + (if (ev)
1174- then eu[au]
1175- else -(eu[au])))
1176- $Tuple2((cO :+ dt), (au + 1))
1124+@Callable(db)
1125+func calcTokenAmount (es,et) = {
1126+ let bb = aG()
1127+ let eu = aL()
1128+ let bW = br(eu, bb)
1129+ func ev (aN,ee) = {
1130+ let ew = aN
1131+ let cP = ew._1
1132+ let av = ew._2
1133+ let dv = (ee + (if (et)
1134+ then es[av]
1135+ else -(es[av])))
1136+ $Tuple2((cP :+ dv), (av + 1))
11771137 }
11781138
1179- let cO = ( let aO = ew
1180- let aP = size(aO)
1181- let aQ = $Tuple2(nil, 0)
1182- func aR (aS,aT) = if ((aT >= aP))
1183- then aS
1184- else ex(aS, aO[aT])
1139+ let cP = ( let aP = eu
1140+ let aQ = size(aP)
1141+ let aR = $Tuple2(nil, 0)
1142+ func aS (aT,aU) = if ((aU >= aQ))
1143+ then aT
1144+ else ev(aT, aP[aU])
11851145
1186- func aU (aS,aT) = if ((aT >= aP))
1187- then aS
1146+ func aV (aT,aU) = if ((aU >= aQ))
1147+ then aT
11881148 else throw("List size exceeds 15")
11891149
1190- aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15))._1
1191- let bW = bq(cO, ba)
1192- let ez = if (ev)
1193- then (bW - bV)
1194- else (bV - bW)
1195- $Tuple2(nil, fraction(ez, af, bV))
1150+ aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15))._1
1151+ let bX = br(cP, bb)
1152+ let ex = if (et)
1153+ then (bX - bW)
1154+ else (bW - bX)
1155+ $Tuple2(nil, fraction(ex, ag, bW))
11961156 }
11971157
11981158
11991159
1200-@Callable(da)
1201-func rampA (eA,eB) = valueOrElse(as(), valueOrElse(at(da), if (ay((ax >= (al + e))))
1160+@Callable(db)
1161+func rampA (ey,ez) = valueOrElse(at(), valueOrElse(au(db), if (az((ay >= (am + f))))
12021162 then throw("too often")
1203- else if (ay((eB >= (ax + e))))
1163+ else if (az((ez >= (ay + f))))
12041164 then throw("insufficient time")
12051165 else {
1206- let eC = aF()
1207- if (ay(if ((eA > 0))
1208- then (b > eA)
1166+ let eA = aG()
1167+ if (az(if ((ey > 0))
1168+ then (c > ey)
12091169 else false))
12101170 then throw("out of base range")
1211- else if (ay(if (if ((eA >= eC))
1212- then ((eC * c) >= eA)
1171+ else if (az(if (if ((ey >= eA))
1172+ then ((eA * d) >= ey)
12131173 else false)
12141174 then true
1215- else if ((eC > eA))
1216- then ((eA * c) >= eC)
1175+ else if ((eA > ey))
1176+ then ((ey * d) >= eA)
12171177 else false))
12181178 then throw("out of range")
1219- else [IntegerEntry("initial_A", eC), IntegerEntry("future_A", eA), IntegerEntry("initial_A_time", ax), IntegerEntry("future_A_time", eB)]
1179+ else [IntegerEntry("initial_A", eA), IntegerEntry("future_A", ey), IntegerEntry("initial_A_time", ay), IntegerEntry("future_A_time", ez)]
12201180 }))
12211181
12221182
12231183
1224-@Callable(da)
1225-func stopRampA () = valueOrElse(as(), valueOrElse(at(da), {
1226- let eD = aF()
1227-[IntegerEntry("initial_A", eD), IntegerEntry("future_A", eD), IntegerEntry("initial_A_time", ax), IntegerEntry("future_A_time", ax)]
1184+@Callable(db)
1185+func stopRampA () = valueOrElse(at(), valueOrElse(au(db), {
1186+ let eB = aG()
1187+[IntegerEntry("initial_A", eB), IntegerEntry("future_A", eB), IntegerEntry("initial_A_time", ay), IntegerEntry("future_A_time", ay)]
12281188 }))
12291189
12301190
12311191
1232-@Callable(da)
1233-func shutdown () = valueOrElse(at(da), if (!(ad))
1234- then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, i), "the cause wasn't specified")))
1235- else ap("Paused by admin"))
1192+@Callable(db)
1193+func shutdown () = valueOrElse(au(db), if (!(ae))
1194+ then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, j), "the cause wasn't specified")))
1195+ else aq("Paused by admin"))
12361196
12371197
12381198
1239-@Callable(da)
1240-func activate () = valueOrElse(at(da), if (ad)
1241- then ar()
1242- else [BooleanEntry(h, true), DeleteEntry(i)])
1199+@Callable(db)
1200+func activate () = valueOrElse(au(db), if (ae)
1201+ then as()
1202+ else [BooleanEntry(i, true), DeleteEntry(j)])
12431203
12441204
12451205
1246-@Callable(da)
1247-func keepLimitForFirstHarvest (eE) = valueOrElse(as(), valueOrElse(at(da), [IntegerEntry(t, eE)]))
1206+@Callable(db)
1207+func keepLimitForFirstHarvest (eC) = valueOrElse(at(), valueOrElse(au(db), [IntegerEntry(u, eC)]))
12481208
12491209
1250-@Verifier(eF)
1251-func eG () = {
1252- let eH = {
1253- let eI = if (sigVerify(eF.bodyBytes, eF.proofs[0], N))
1210+@Verifier(eD)
1211+func eE () = {
1212+ let eF = {
1213+ let eG = if (sigVerify(eD.bodyBytes, eD.proofs[0], O))
12541214 then 1
12551215 else 0
1256- let eJ = if (sigVerify(eF.bodyBytes, eF.proofs[1], O))
1216+ let eH = if (sigVerify(eD.bodyBytes, eD.proofs[1], P))
12571217 then 1
12581218 else 0
1259- let eK = if (sigVerify(eF.bodyBytes, eF.proofs[2], P))
1219+ let eI = if (sigVerify(eD.bodyBytes, eD.proofs[2], Q))
12601220 then 1
12611221 else 0
1262- (((eI + eJ) + eK) >= 2)
1222+ (((eG + eH) + eI) >= 2)
12631223 }
1264- let K = eF
1265- if ($isInstanceOf(K, "InvokeScriptTransaction"))
1224+ let L = eD
1225+ if ($isInstanceOf(L, "InvokeScriptTransaction"))
12661226 then {
1267- let dE = K
1268- let eL = if ((dE.dApp == this))
1269- then (dE.function == "takeIntoAccountExtraFunds")
1227+ let eJ = L
1228+ let eK = if ((eJ.dApp == this))
1229+ then (eJ.function == "takeIntoAccountExtraFunds")
12701230 else false
1271- let eM = if (if (if (sigVerify(eF.bodyBytes, eF.proofs[0], N))
1231+ let eL = if (if (if (sigVerify(eD.bodyBytes, eD.proofs[0], O))
12721232 then true
1273- else sigVerify(eF.bodyBytes, eF.proofs[0], O))
1233+ else sigVerify(eD.bodyBytes, eD.proofs[0], P))
12741234 then true
1275- else sigVerify(eF.bodyBytes, eF.proofs[0], P))
1235+ else sigVerify(eD.bodyBytes, eD.proofs[0], Q))
12761236 then true
1277- else sigVerify(eF.bodyBytes, eF.proofs[0], Q)
1278- if (if (eL)
1279- then eM
1237+ else sigVerify(eD.bodyBytes, eD.proofs[0], R)
1238+ if (if (eK)
1239+ then eL
12801240 else false)
12811241 then true
1282- else eH
1242+ else eF
12831243 }
1284- else eH
1244+ else eF
12851245 }
12861246
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let a = 1000000
4+let a = "3.0.0"
55
66 let b = 1000000
77
8-let c = 10
8+let c = 1000000
99
10-let d = 6
10+let d = 10
1111
12-let e = (86400 / 60)
12+let e = 6
1313
14-let f = "asset_ids"
14+let f = (86400 / 60)
1515
16-let g = "_balance"
16+let g = "asset_ids"
1717
18-let h = "active"
18+let h = "_balance"
1919
20-let i = "shutdown_cause"
20+let i = "active"
2121
22-let j = "share_asset_id"
22+let j = "shutdown_cause"
2323
24-let k = "share_asset_supply"
24+let k = "share_asset_id"
2525
26-let l = "commission"
26+let l = "share_asset_supply"
2727
28-let m = "dAppThresholdCoef"
28+let m = "commission"
2929
30-let n = "staking_usdnnsbt_address"
30+let n = "dAppThresholdCoef"
3131
32-let o = "discounts"
32+let o = "staking_usdnnsbt_address"
3333
34-let p = "discount_values"
34+let p = "discounts"
3535
36-let q = "_SWOP_amount"
36+let q = "discount_values"
3737
38-let r = "first_harvest"
38+let r = "_SWOP_amount"
3939
40-let s = "first_harvest_height"
40+let s = "first_harvest"
4141
42-let t = "share_limit_on_first_harvest"
42+let t = "first_harvest_height"
4343
44-let u = "base_period"
44+let u = "share_limit_on_first_harvest"
4545
46-let v = "period_length"
46+let v = "base_period"
4747
48-let w = "start_height"
48+let w = "period_length"
4949
50-let x = "admin_pub_1"
50+let x = "start_height"
5151
52-let y = "admin_pub_2"
52+let y = "admin_pub_1"
5353
54-let z = "admin_pub_3"
54+let z = "admin_pub_2"
5555
56-let B = "admin_invoke_pub"
56+let B = "admin_pub_3"
5757
58-let C = "money_box_address"
58+let C = "admin_invoke_pub"
5959
60-let E = "governance_address"
60+let E = "money_box_address"
6161
62-let F = "voting_address"
62+let F = "governance_address"
6363
64-let G = "farming_address"
64+let G = "voting_address"
6565
66-let H = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
66+let H = "farming_address"
6767
68-func I (J) = {
69- let K = getString(H, J)
70- if ($isInstanceOf(K, "String"))
68+let I = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
69+
70+func J (K) = {
71+ let L = getString(I, K)
72+ if ($isInstanceOf(L, "String"))
7173 then {
72- let L = K
73- fromBase58String(L)
74+ let M = L
75+ fromBase58String(M)
7476 }
7577 else {
76- let M = K
77- throw((J + "is empty"))
78+ let N = L
79+ throw((K + "is empty"))
7880 }
7981 }
8082
8183
82-let N = I(x)
84+let O = J(y)
8385
84-let O = I(y)
86+let P = J(z)
8587
86-let P = I(z)
88+let Q = J(B)
8789
88-let Q = I(B)
90+let R = J(C)
8991
90-let R = Address(I(C))
92+let S = Address(J(E))
9193
92-let S = Address(I(E))
94+let T = Address(J(F))
9395
94-let T = Address(I(n))
96+let U = Address(J(o))
9597
96-let U = Address(I(F))
98+let V = Address(J(G))
9799
98-let V = Address(I(G))
100+let W = Address(J(H))
99101
100-let W = Address(base58'3MxXHaGvmKQHH3kNrPBunhve1sDXf7M5RZt')
102+let X = Address(base58'3MxXHaGvmKQHH3kNrPBunhve1sDXf7M5RZt')
101103
102-let X = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
104+let Y = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
103105
104-let Y = [toBase58String(X)]
106+let Z = [toBase58String(Y)]
105107
106-let Z = valueOrErrorMessage(getInteger(U, u), "Empty kBasePeriod")
108+let aa = valueOrErrorMessage(getInteger(V, v), "Empty kBasePeriod")
107109
108-let aa = valueOrErrorMessage(getInteger(U, w), "Empty kStartHeight")
110+let ab = valueOrErrorMessage(getInteger(V, x), "Empty kStartHeight")
109111
110-let ab = valueOrErrorMessage(getInteger(U, v), "Empty kPeriodLength")
112+let ac = valueOrErrorMessage(getInteger(V, w), "Empty kPeriodLength")
111113
112-let ac = ((Z + ((height - aa) / ab)) + 3)
114+let ad = ((aa + ((height - ab) / ac)) + 3)
113115
114-let ad = getBooleanValue(this, h)
116+let ae = getBooleanValue(this, i)
115117
116-let ae = fromBase58String(getStringValue(this, j))
118+let af = fromBase58String(getStringValue(this, k))
117119
118-let af = getIntegerValue(this, k)
120+let ag = getIntegerValue(this, l)
119121
120-let ag = 1000000
122+let ah = 1000000
121123
122-let ah = getIntegerValue(this, l)
124+let ai = getIntegerValue(this, m)
123125
124-let ai = fraction(40, ag, 100)
126+let aj = fraction(40, ah, 100)
125127
126-let aj = getIntegerValue(this, "initial_A")
128+let ak = getIntegerValue(this, "initial_A")
127129
128-let ak = getIntegerValue(this, "future_A")
130+let al = getIntegerValue(this, "future_A")
129131
130-let al = valueOrElse(getInteger(this, "initial_A_time"), 0)
132+let am = valueOrElse(getInteger(this, "initial_A_time"), 0)
131133
132-let am = valueOrElse(getInteger(this, "future_A_time"), 0)
134+let an = valueOrElse(getInteger(this, "future_A_time"), 0)
133135
134-let an = split(getStringValue(this, f), ",")
136+let ao = split(getStringValue(this, g), ",")
135137
136-let ao = size(an)
138+let ap = size(ao)
137139
138-func ap (aq) = [BooleanEntry(h, false), StringEntry(i, aq)]
140+func aq (ar) = [BooleanEntry(i, false), StringEntry(j, ar)]
139141
140142
141-func ar () = throw("DApp is already active")
143+func as () = throw("DApp is already active")
142144
143145
144-func as () = if (ad)
146+func at () = if (ae)
145147 then unit
146148 else throw("DApp is inactive at this moment")
147149
148150
149-func at (au) = if (containsElement([N, O, P], au.callerPublicKey))
151+func au (av) = if (containsElement([O, P, Q], av.callerPublicKey))
150152 then unit
151153 else throw("Only admin can call this function")
152154
153155
154-func av (au) = if ((this == au.caller))
156+func aw (av) = if ((this == av.caller))
155157 then unit
156158 else throw("Only contract itself can call this function")
157159
158160
159-let aw = toBigInt(2)
161+let ax = toBigInt(2)
160162
161-let ax = height
163+let ay = height
162164
163-func ay (az) = if (az)
165+func az (aA) = if (aA)
164166 then false
165167 else true
166168
167169
168-func aA (aB) = {
169- let aC = valueOrElse(getInteger(S, (toString(aB) + q)), 0)
170- let aD = split(getStringValue(H, p), ",")
171- let aE = split(getStringValue(H, o), ",")
172- if (if ((aC >= parseIntValue(aD[0])))
173- then (parseIntValue(aD[1]) > aC)
170+func aB (aC) = {
171+ let aD = valueOrElse(getInteger(T, (toString(aC) + r)), 0)
172+ let aE = split(getStringValue(I, q), ",")
173+ let aF = split(getStringValue(I, p), ",")
174+ if (if ((aD >= parseIntValue(aE[0])))
175+ then (parseIntValue(aE[1]) > aD)
174176 else false)
175- then (ag - parseIntValue(aE[0]))
176- else if (if ((aC >= parseIntValue(aD[1])))
177- then (parseIntValue(aD[2]) > aC)
177+ then (ah - parseIntValue(aF[0]))
178+ else if (if ((aD >= parseIntValue(aE[1])))
179+ then (parseIntValue(aE[2]) > aD)
178180 else false)
179- then (ag - parseIntValue(aE[1]))
180- else if (if ((aC >= parseIntValue(aD[2])))
181- then (parseIntValue(aD[3]) > aC)
181+ then (ah - parseIntValue(aF[1]))
182+ else if (if ((aD >= parseIntValue(aE[2])))
183+ then (parseIntValue(aE[3]) > aD)
182184 else false)
183- then (ag - parseIntValue(aE[2]))
184- else if (if ((aC >= parseIntValue(aD[3])))
185- then (parseIntValue(aD[4]) > aC)
185+ then (ah - parseIntValue(aF[2]))
186+ else if (if ((aD >= parseIntValue(aE[3])))
187+ then (parseIntValue(aE[4]) > aD)
186188 else false)
187- then (ag - parseIntValue(aE[3]))
188- else if ((aC >= parseIntValue(aD[4])))
189- then (ag - parseIntValue(aE[4]))
190- else ag
189+ then (ah - parseIntValue(aF[3]))
190+ else if ((aD >= parseIntValue(aE[4])))
191+ then (ah - parseIntValue(aF[4]))
192+ else ah
191193 }
192194
193195
194-func aF () = {
195- let aG = am
196- let aH = ak
197- if ((aG > ax))
196+func aG () = {
197+ let aH = an
198+ let aI = al
199+ if ((aH > ay))
198200 then {
199- let aI = aj
200- let aJ = al
201- if ((aH > aI))
202- then (aI + (((aH - aI) * (ax - aJ)) / (aG - aJ)))
203- else (aI - (((aI - aH) * (ax - aJ)) / (aG - aJ)))
201+ let aJ = ak
202+ let aK = am
203+ if ((aI > aJ))
204+ then (aJ + (((aI - aJ) * (ay - aK)) / (aH - aK)))
205+ else (aJ - (((aJ - aI) * (ay - aK)) / (aH - aK)))
204206 }
205- else aH
207+ else aI
206208 }
207209
208210
209-func aK () = {
210- func aL (aM,aN) = (aM :+ valueOrElse(getInteger(this, (aN + g)), 0))
211+func aL () = {
212+ func aM (aN,aO) = (aN :+ valueOrElse(getInteger(this, (aO + h)), 0))
211213
212- let aO = an
213- let aP = size(aO)
214- let aQ = nil
215- func aR (aS,aT) = if ((aT >= aP))
216- then aS
217- else aL(aS, aO[aT])
214+ let aP = ao
215+ let aQ = size(aP)
216+ let aR = nil
217+ func aS (aT,aU) = if ((aU >= aQ))
218+ then aT
219+ else aM(aT, aP[aU])
218220
219- func aU (aS,aT) = if ((aT >= aP))
220- then aS
221+ func aV (aT,aU) = if ((aU >= aQ))
222+ then aT
221223 else throw("List size exceeds 15")
222224
223- aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
225+ aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
224226 }
225227
226228
227-func aV (aW) = aW
229+func aW (aX) = aX
228230
229231
230-func aX (aM,aY) = (aM + aY)
232+func aY (aN,aZ) = (aN + aZ)
231233
232234
233-func aZ (aW,ba) = {
234- let bb = invoke(this, "D", [aW, ba], nil)
235- if ($isInstanceOf(bb, "Int"))
236- then bb
237- else throw(($getType(invoke(this, "D", [aW, ba], nil)) + " couldn't be cast to Int"))
235+func ba (aX,bb) = {
236+ let bc = invoke(this, "D", [aX, bb], nil)
237+ if ($isInstanceOf(bc, "Int"))
238+ then bc
239+ else throw(($getType(invoke(this, "D", [aX, bb], nil)) + " couldn't be cast to Int"))
238240 }
239241
240242
241-func bc (aW,ba) = {
242- let bd = {
243- let aO = aW
244- let aP = size(aO)
245- let aQ = 0
246- func aR (aS,aT) = if ((aT >= aP))
247- then aS
248- else aX(aS, aO[aT])
243+func bd (aX,bb) = {
244+ let be = {
245+ let aP = aX
246+ let aQ = size(aP)
247+ let aR = 0
248+ func aS (aT,aU) = if ((aU >= aQ))
249+ then aT
250+ else aY(aT, aP[aU])
249251
250- func aU (aS,aT) = if ((aT >= aP))
251- then aS
252+ func aV (aT,aU) = if ((aU >= aQ))
253+ then aT
252254 else throw("List size exceeds 15")
253255
254- aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
256+ aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
255257 }
256- if ((bd == 0))
258+ if ((be == 0))
257259 then 0
258260 else {
259- let be = (ba * ao)
260- let bf = (toBigInt(be) * toBigInt(bd))
261- let bg = toBigInt((be - 1))
262- func bh (aM,au) = if ((aM._2 == true))
263- then aM
261+ let bf = (bb * ap)
262+ let bg = (toBigInt(bf) * toBigInt(be))
263+ let bh = toBigInt((bf - 1))
264+ func bi (aN,av) = if ((aN._2 == true))
265+ then aN
264266 else {
265- let bi = aM._1
266- func bj (bk,au) = if ((ao > au))
267- then ((bk * bi) / (toBigInt(aW[au]) * toBigInt(ao)))
268- else bk
267+ let bj = aN._1
268+ func bk (bl,av) = if ((ap > av))
269+ then ((bl * bj) / (toBigInt(aX[av]) * toBigInt(ap)))
270+ else bl
269271
270- let bk = {
271- let aO = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
272- let aP = size(aO)
273- let aQ = bi
274- func bl (aS,aT) = if ((aT >= aP))
275- then aS
276- else bj(aS, aO[aT])
272+ let bl = {
273+ let aP = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
274+ let aQ = size(aP)
275+ let aR = bj
276+ func bm (aT,aU) = if ((aU >= aQ))
277+ then aT
278+ else bk(aT, aP[aU])
277279
278- func bm (aS,aT) = if ((aT >= aP))
279- then aS
280+ func bn (aT,aU) = if ((aU >= aQ))
281+ then aT
280282 else throw("List size exceeds 15")
281283
282- bm(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
284+ bn(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
283285 }
284- let bn = fraction((bf + (toBigInt(ao) * bk)), bi, ((bg * bi) + (toBigInt((ao + 1)) * bk)))
285- if ((bn > bi))
286- then if ((1 >= toInt((bn - bi))))
287- then $Tuple2(bn, true)
288- else $Tuple2(bn, false)
289- else if ((1 >= toInt((bi - bn))))
290- then $Tuple2(bn, true)
291- else $Tuple2(bn, false)
286+ let bo = fraction((bg + (toBigInt(ap) * bl)), bj, ((bh * bj) + (toBigInt((ap + 1)) * bl)))
287+ if ((bo > bj))
288+ then if ((1 >= toInt((bo - bj))))
289+ then $Tuple2(bo, true)
290+ else $Tuple2(bo, false)
291+ else if ((1 >= toInt((bj - bo))))
292+ then $Tuple2(bo, true)
293+ else $Tuple2(bo, false)
292294 }
293295
294- let bo = {
295- let aO = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
296- let aP = size(aO)
297- let aQ = $Tuple2(toBigInt(bd), false)
298- func bl (aS,aT) = if ((aT >= aP))
299- then aS
300- else bh(aS, aO[aT])
296+ let bp = {
297+ let aP = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
298+ let aQ = size(aP)
299+ let aR = $Tuple2(toBigInt(be), false)
300+ func bm (aT,aU) = if ((aU >= aQ))
301+ then aT
302+ else bi(aT, aP[aU])
301303
302- func bm (aS,aT) = if ((aT >= aP))
303- then aS
304+ func bn (aT,aU) = if ((aU >= aQ))
305+ then aT
304306 else throw("List size exceeds 15")
305307
306- bm(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
308+ bn(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
307309 }
308- let bn = bo._1
309- let bp = bo._2
310- if ((bp == false))
311- then throw(("get_D() not finished with " + toString(bn)))
312- else toInt(bn)
310+ let bo = bp._1
311+ let bq = bp._2
312+ if ((bq == false))
313+ then throw(("get_D() not finished with " + toString(bo)))
314+ else toInt(bo)
313315 }
314316 }
315317
316318
317-func bq (aW,ba) = aZ(aV(aW), ba)
319+func br (aX,bb) = ba(aW(aX), bb)
318320
319321
320-func br (bs,bt,bu,bv) = if (ay((bs != bt)))
322+func bs (bt,bu,bv,bw) = if (az((bt != bu)))
321323 then throw("same coin")
322- else if (ay(if ((bt >= 0))
323- then (bs >= 0)
324+ else if (az(if ((bu >= 0))
325+ then (bt >= 0)
324326 else false))
325327 then throw("below zero")
326- else if (ay(if ((ao > bt))
327- then (ao > bs)
328+ else if (az(if ((ap > bu))
329+ then (ap > bt)
328330 else false))
329331 then throw("above N_COINS")
330332 else {
331- let ba = aF()
332- let bn = aZ(bv, ba)
333- let be = (ba * ao)
334- func bw (aM,au) = {
335- let bx = aM
336- let by = bx._1
337- let bz = bx._2
338- let bA = if ((bs == au))
339- then bu
340- else bv[au]
341- if (if ((au != bt))
342- then (ao > au)
333+ let bb = aG()
334+ let bo = ba(bw, bb)
335+ let bf = (bb * ap)
336+ func bx (aN,av) = {
337+ let by = aN
338+ let bz = by._1
339+ let bA = by._2
340+ let bB = if ((bt == av))
341+ then bv
342+ else bw[av]
343+ if (if ((av != bu))
344+ then (ap > av)
343345 else false)
344- then $Tuple2((by + bA), fraction(bz, toBigInt(bn), toBigInt((bA * ao))))
345- else $Tuple2(by, bz)
346+ then $Tuple2((bz + bB), fraction(bA, toBigInt(bo), toBigInt((bB * ap))))
347+ else $Tuple2(bz, bA)
346348 }
347349
348- let bB = {
349- let aO = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
350- let aP = size(aO)
351- let aQ = $Tuple2(0, toBigInt(bn))
352- func aR (aS,aT) = if ((aT >= aP))
353- then aS
354- else bw(aS, aO[aT])
350+ let bC = {
351+ let aP = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
352+ let aQ = size(aP)
353+ let aR = $Tuple2(0, toBigInt(bo))
354+ func aS (aT,aU) = if ((aU >= aQ))
355+ then aT
356+ else bx(aT, aP[aU])
355357
356- func aU (aS,aT) = if ((aT >= aP))
357- then aS
358+ func aV (aT,aU) = if ((aU >= aQ))
359+ then aT
358360 else throw("List size exceeds 15")
359361
360- aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
362+ aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
361363 }
362- let by = bB._1
363- let bC = bB._2
364- let bz = fraction(bC, toBigInt(bn), toBigInt((be * ao)))
365- let bD = toBigInt(((by + (bn / be)) - bn))
366- func bE (aM,bF) = if ((aM._2 == true))
367- then aM
364+ let bz = bC._1
365+ let bD = bC._2
366+ let bA = fraction(bD, toBigInt(bo), toBigInt((bf * ap)))
367+ let bE = toBigInt(((bz + (bo / bf)) - bo))
368+ func bF (aN,bG) = if ((aN._2 == true))
369+ then aN
368370 else {
369- let bG = aM._1
370- let bH = (((bG * bG) + bz) / ((aw * bG) + bD))
371- if ((bH > bG))
372- then if ((1 >= toInt((bH - bG))))
373- then $Tuple2(bH, true)
374- else $Tuple2(bH, false)
375- else if ((1 >= toInt((bG - bH))))
376- then $Tuple2(bH, true)
377- else $Tuple2(bH, false)
371+ let bH = aN._1
372+ let bI = (((bH * bH) + bA) / ((ax * bH) + bE))
373+ if ((bI > bH))
374+ then if ((1 >= toInt((bI - bH))))
375+ then $Tuple2(bI, true)
376+ else $Tuple2(bI, false)
377+ else if ((1 >= toInt((bH - bI))))
378+ then $Tuple2(bI, true)
379+ else $Tuple2(bI, false)
378380 }
379381
380- let bI = {
381- let aO = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
382- let aP = size(aO)
383- let aQ = $Tuple2(toBigInt(bn), false)
384- func bl (aS,aT) = if ((aT >= aP))
385- then aS
386- else bE(aS, aO[aT])
382+ let bJ = {
383+ let aP = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
384+ let aQ = size(aP)
385+ let aR = $Tuple2(toBigInt(bo), false)
386+ func bm (aT,aU) = if ((aU >= aQ))
387+ then aT
388+ else bF(aT, aP[aU])
387389
388- func bm (aS,aT) = if ((aT >= aP))
389- then aS
390+ func bn (aT,aU) = if ((aU >= aQ))
391+ then aT
390392 else throw("List size exceeds 16")
391393
392- bm(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
394+ bn(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
393395 }
394- let bH = bI._1
395- let bp = bI._2
396- if ((bp == false))
397- then throw(("getY() not finished with " + toString(bH)))
398- else toInt(bH)
396+ let bI = bJ._1
397+ let bq = bJ._2
398+ if ((bq == false))
399+ then throw(("getY() not finished with " + toString(bI)))
400+ else toInt(bI)
399401 }
400402
401403
402-func bJ (bK,bs,aW,bn) = if (ay((bs >= 0)))
404+func bK (bL,bt,aX,bo) = if (az((bt >= 0)))
403405 then throw("i below zero")
404- else if (ay((ao > bs)))
406+ else if (az((ap > bt)))
405407 then throw("i above N_COINS")
406408 else {
407- let be = (bK * ao)
408- func bw (aM,au) = {
409- let bL = aM
410- let by = bL._1
411- let bz = bL._2
412- let bA = if (if ((bs != au))
413- then (ao > au)
409+ let bf = (bL * ap)
410+ func bx (aN,av) = {
411+ let bM = aN
412+ let bz = bM._1
413+ let bA = bM._2
414+ let bB = if (if ((bt != av))
415+ then (ap > av)
414416 else false)
415- then aW[au]
417+ then aX[av]
416418 else 0
417- if (if ((ao > au))
418- then (bs != au)
419+ if (if ((ap > av))
420+ then (bt != av)
419421 else false)
420- then $Tuple2((by + bA), fraction(bz, toBigInt(bn), toBigInt((bA * ao))))
421- else $Tuple2(by, bz)
422+ then $Tuple2((bz + bB), fraction(bA, toBigInt(bo), toBigInt((bB * ap))))
423+ else $Tuple2(bz, bA)
422424 }
423425
424- let bM = {
425- let aO = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
426- let aP = size(aO)
427- let aQ = $Tuple2(0, toBigInt(bn))
428- func aR (aS,aT) = if ((aT >= aP))
429- then aS
430- else bw(aS, aO[aT])
426+ let bN = {
427+ let aP = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
428+ let aQ = size(aP)
429+ let aR = $Tuple2(0, toBigInt(bo))
430+ func aS (aT,aU) = if ((aU >= aQ))
431+ then aT
432+ else bx(aT, aP[aU])
431433
432- func aU (aS,aT) = if ((aT >= aP))
433- then aS
434+ func aV (aT,aU) = if ((aU >= aQ))
435+ then aT
434436 else throw("List size exceeds 15")
435437
436- aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
438+ aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
437439 }
438- let by = bM._1
439- let bC = bM._2
440- let bz = fraction(bC, toBigInt(bn), toBigInt((be * ao)))
441- let bD = toBigInt(((by + (bn / be)) - bn))
442- func bN (aM,au) = if ((aM._2 == true))
443- then aM
440+ let bz = bN._1
441+ let bD = bN._2
442+ let bA = fraction(bD, toBigInt(bo), toBigInt((bf * ap)))
443+ let bE = toBigInt(((bz + (bo / bf)) - bo))
444+ func bO (aN,av) = if ((aN._2 == true))
445+ then aN
444446 else {
445- let bG = aM._1
446- let bH = (((bG * bG) + bz) / ((aw * bG) + bD))
447- if ((bH > bG))
448- then if ((1 >= toInt((bH - bG))))
449- then $Tuple2(bH, true)
450- else $Tuple2(bH, false)
451- else if ((1 >= toInt((bG - bH))))
452- then $Tuple2(bH, true)
453- else $Tuple2(bH, false)
447+ let bH = aN._1
448+ let bI = (((bH * bH) + bA) / ((ax * bH) + bE))
449+ if ((bI > bH))
450+ then if ((1 >= toInt((bI - bH))))
451+ then $Tuple2(bI, true)
452+ else $Tuple2(bI, false)
453+ else if ((1 >= toInt((bH - bI))))
454+ then $Tuple2(bI, true)
455+ else $Tuple2(bI, false)
454456 }
455457
456- let bO = {
457- let aO = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
458- let aP = size(aO)
459- let aQ = $Tuple2(toBigInt(bn), false)
460- func bl (aS,aT) = if ((aT >= aP))
461- then aS
462- else bN(aS, aO[aT])
458+ let bP = {
459+ let aP = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
460+ let aQ = size(aP)
461+ let aR = $Tuple2(toBigInt(bo), false)
462+ func bm (aT,aU) = if ((aU >= aQ))
463+ then aT
464+ else bO(aT, aP[aU])
463465
464- func bm (aS,aT) = if ((aT >= aP))
465- then aS
466+ func bn (aT,aU) = if ((aU >= aQ))
467+ then aT
466468 else throw("List size exceeds 16")
467469
468- bm(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
470+ bn(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
469471 }
470- let bH = bO._1
471- let bp = bO._2
472- if ((bp == false))
473- then throw(("get_y_D() not finished with " + toString(bH)))
474- else toInt(bH)
472+ let bI = bP._1
473+ let bq = bP._2
474+ if ((bq == false))
475+ then throw(("get_y_D() not finished with " + toString(bI)))
476+ else toInt(bI)
475477 }
476478
477479
478-func bP (aW,bQ,au,bR) = {
479- let bS = aA(bR)
480- let ba = aF()
481- let bT = ((fraction(ah, bS, ag, CEILING) * ao) / (4 * (ao - 1)))
482- let bU = af
483- let bV = aZ(aW, ba)
484- let bW = (bV - fraction(bQ, bV, bU))
485- let bX = bJ(ba, au, aW, bW)
486- let bY = (aW[au] - bX)
487- func bZ (aM,ca) = {
488- let cb = aM
489- let cc = cb._1
490- let cd = cb._2
491- let ce = if ((cd == au))
492- then (fraction(ca, bW, bV) - bX)
493- else (ca - fraction(ca, bW, bV))
494- $Tuple2((cc :+ (ca - fraction(bT, ce, ag))), (cd + 1))
480+func bQ (aX,bR,av,bS) = {
481+ let bT = aB(bS)
482+ let bb = aG()
483+ let bU = ((fraction(ai, bT, ah, CEILING) * ap) / (4 * (ap - 1)))
484+ let bV = ag
485+ let bW = ba(aX, bb)
486+ let bX = (bW - fraction(bR, bW, bV))
487+ let bY = bK(bb, av, aX, bX)
488+ let bZ = (aX[av] - bY)
489+ func ca (aN,cb) = {
490+ let cc = aN
491+ let cd = cc._1
492+ let ce = cc._2
493+ let cf = if ((ce == av))
494+ then (fraction(cb, bX, bW) - bY)
495+ else (cb - fraction(cb, bX, bW))
496+ $Tuple2((cd :+ (cb - fraction(bU, cf, ah))), (ce + 1))
495497 }
496498
497- let cf = {
498- let aO = aW
499- let aP = size(aO)
500- let aQ = $Tuple2(nil, 0)
501- func aR (aS,aT) = if ((aT >= aP))
502- then aS
503- else bZ(aS, aO[aT])
499+ let cg = {
500+ let aP = aX
501+ let aQ = size(aP)
502+ let aR = $Tuple2(nil, 0)
503+ func aS (aT,aU) = if ((aU >= aQ))
504+ then aT
505+ else ca(aT, aP[aU])
504506
505- func aU (aS,aT) = if ((aT >= aP))
506- then aS
507+ func aV (aT,aU) = if ((aU >= aQ))
508+ then aT
507509 else throw("List size exceeds 15")
508510
509- aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
511+ aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
510512 }
511- let cc = cf._1
512- let cd = cf._2
513- let cg = cc[au]
514- let ch = ((cg - bJ(ba, au, cc, bW)) - 1)
515- $Tuple2(ch, (bY - ch))
513+ let cd = cg._1
514+ let ce = cg._2
515+ let ch = cd[av]
516+ let ci = ((ch - bK(bb, av, cd, bX)) - 1)
517+ $Tuple2(ci, (bZ - ci))
516518 }
517519
518520
519-func ci (aN) = {
520- let K = aN
521- if ($isInstanceOf(K, "ByteVector"))
521+func cj (aO) = {
522+ let L = aO
523+ if ($isInstanceOf(L, "ByteVector"))
522524 then {
523- let cj = K
524- toBase58String(cj)
525+ let ck = L
526+ toBase58String(ck)
525527 }
526- else if ($isInstanceOf(K, "Unit"))
528+ else if ($isInstanceOf(L, "Unit"))
527529 then {
528- let ck = K
530+ let cl = L
529531 "WAVES"
530532 }
531533 else throw("Match error")
532534 }
533535
534536
535-func cl (cm,aN) = if (cm)
536- then $Tuple2("lockNeutrino", T)
537- else $Tuple2("unlockNeutrino", T)
537+func cm (cn,aO) = if (cn)
538+ then $Tuple2("lockNeutrino", U)
539+ else $Tuple2("unlockNeutrino", U)
538540
539541
540-func cn (cm,co,aN) = if (cm)
542+func co (cn,cp,aO) = if (cn)
541543 then {
542- let cp = cl(cm, aN)
543- let cq = cp._1
544- let cr = cp._2
545- $Tuple4(cq, cr, nil, [AttachedPayment(aN, co)])
544+ let cq = cm(cn, aO)
545+ let cr = cq._1
546+ let cs = cq._2
547+ $Tuple4(cr, cs, nil, [AttachedPayment(aO, cp)])
546548 }
547549 else {
548- let cs = cl(cm, aN)
549- let cq = cs._1
550- let cr = cs._2
551- $Tuple4(cq, cr, [co, toBase58String(aN)], nil)
550+ let ct = cm(cn, aO)
551+ let cr = ct._1
552+ let cs = ct._2
553+ $Tuple4(cr, cs, [cp, toBase58String(aO)], nil)
552554 }
553555
554556
555-func cm (co,ct) = if (containsElement(Y, ct))
557+func cn (cp,cu) = if (containsElement(Z, cu))
556558 then {
557- let cu = cn(true, co, fromBase58String(ct))
558- let cq = cu._1
559- let cv = cu._2
560- let cw = cu._3
561- let cx = cu._4
562- invoke(cv, cq, cw, cx)
559+ let cv = co(true, cp, fromBase58String(cu))
560+ let cr = cv._1
561+ let cw = cv._2
562+ let cx = cv._3
563+ let cy = cv._4
564+ invoke(cw, cr, cx, cy)
563565 }
564566 else 0
565567
566568
567-func cy (co,ct) = if (containsElement(Y, ct))
569+func cz (cp,cu) = if (containsElement(Z, cu))
568570 then {
569- let cz = cn(false, co, fromBase58String(ct))
570- let cq = cz._1
571- let cv = cz._2
572- let cw = cz._3
573- let cx = cz._4
574- invoke(cv, cq, cw, cx)
571+ let cA = co(false, cp, fromBase58String(cu))
572+ let cr = cA._1
573+ let cw = cA._2
574+ let cx = cA._3
575+ let cy = cA._4
576+ invoke(cw, cr, cx, cy)
575577 }
576578 else 0
577579
578580
579-func cA (aN) = {
580- let cB = {
581- let K = aN
582- if ($isInstanceOf(K, "ByteVector"))
581+func cB (aO) = {
582+ let cC = {
583+ let L = aO
584+ if ($isInstanceOf(L, "ByteVector"))
583585 then {
584- let cC = K
585- if ((cC == X))
586- then getInteger(T, ((("rpd_balance_" + toBase58String(cC)) + "_") + toString(this)))
586+ let cD = L
587+ if ((cD == Y))
588+ then getInteger(U, ((("rpd_balance_" + toBase58String(cD)) + "_") + toString(this)))
587589 else 0
588590 }
589- else if ($isInstanceOf(K, "Unit"))
591+ else if ($isInstanceOf(L, "Unit"))
590592 then 0
591593 else throw("Match error")
592594 }
593- let K = cB
594- if ($isInstanceOf(K, "Int"))
595+ let L = cC
596+ if ($isInstanceOf(L, "Int"))
595597 then {
596- let au = K
597- au
598+ let av = L
599+ av
598600 }
599601 else 0
600602 }
601603
602604
603-func cD () = {
604- let cE = aK()
605- func cF (aM,aN) = {
606- let cG = aM
607- let cH = cG._1
608- let au = cG._2
609- if (cH)
610- then $Tuple2(cH, au)
605+func cE () = {
606+ let cF = aL()
607+ func cG (aN,aO) = {
608+ let cH = aN
609+ let cI = cH._1
610+ let av = cH._2
611+ if (cI)
612+ then $Tuple2(cI, av)
611613 else {
612- let cI = (assetBalance(this, fromBase58String(aN)) + cA(fromBase58String(aN)))
613- if ((cE[au] > cI))
614- then $Tuple2(true, au)
615- else $Tuple2(false, (au + 1))
614+ let cJ = (assetBalance(this, fromBase58String(aO)) + cB(fromBase58String(aO)))
615+ if ((cF[av] > cJ))
616+ then $Tuple2(true, av)
617+ else $Tuple2(false, (av + 1))
616618 }
617619 }
618620
619- let aO = an
620- let aP = size(aO)
621- let aQ = $Tuple2(false, 0)
622- func aR (aS,aT) = if ((aT >= aP))
623- then aS
624- else cF(aS, aO[aT])
621+ let aP = ao
622+ let aQ = size(aP)
623+ let aR = $Tuple2(false, 0)
624+ func aS (aT,aU) = if ((aU >= aQ))
625+ then aT
626+ else cG(aT, aP[aU])
625627
626- func aU (aS,aT) = if ((aT >= aP))
627- then aS
628+ func aV (aT,aU) = if ((aU >= aQ))
629+ then aT
628630 else throw("List size exceeds 15")
629631
630- aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
632+ aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
631633 }
632634
633635
634-func cJ (au) = ap(("Suspicious state with asset: " + an[au]))
636+func cK (av) = aq(("Suspicious state with asset: " + ao[av]))
635637
636638
637-func cK (bR,cx) = {
638- func cL (aM,cM) = (aM :+ ScriptTransfer(bR, cM.amount, cM.assetId))
639+func cL (bS,cy) = {
640+ func cM (aN,cN) = (aN :+ ScriptTransfer(bS, cN.amount, cN.assetId))
639641
640- let aO = cx
641- let aP = size(aO)
642- let aQ = nil
643- func aR (aS,aT) = if ((aT >= aP))
644- then aS
645- else cL(aS, aO[aT])
642+ let aP = cy
643+ let aQ = size(aP)
644+ let aR = nil
645+ func aS (aT,aU) = if ((aU >= aQ))
646+ then aT
647+ else cM(aT, aP[aU])
646648
647- func aU (aS,aT) = if ((aT >= aP))
648- then aS
649+ func aV (aT,aU) = if ((aU >= aQ))
650+ then aT
649651 else throw("List size exceeds 15")
650652
651- aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
653+ aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
652654 }
653655
654656
655-func cN (cO) = {
656- let cP = valueOrErrorMessage(getInteger(this, m), "No dAppThresholdCoef key")
657- let cQ = 10000
658- let cR = max(cO)
659- let cS = min(cO)
660- let cT = fraction(cR, cQ, cS)
661- if ((cT > (cP * cQ)))
657+func cO (cP) = {
658+ let cQ = valueOrErrorMessage(getInteger(this, n), "No dAppThresholdCoef key")
659+ let cR = 10000
660+ let cS = max(cP)
661+ let cT = min(cP)
662+ let cU = fraction(cS, cR, cT)
663+ if ((cU > (cQ * cR)))
662664 then throw("New balance in assets of the DApp is less than threshold")
663665 else false
664666 }
665667
666668
667-func cU (an) = {
668- let cV = split(an, ",")
669- func cW (cX,aN) = {
670- let cY = valueOrErrorMessage(fromBase58String(aN), ("fromBase58String: " + aN))
671- let cZ = valueOrErrorMessage(assetInfo(cY), ("assetInfo: " + aN)).decimals
672- if ((cZ != d))
669+func cV (ao) = {
670+ let cW = split(ao, ",")
671+ func cX (cY,aO) = {
672+ let cZ = valueOrErrorMessage(fromBase58String(aO), ("fromBase58String: " + aO))
673+ let da = valueOrErrorMessage(assetInfo(cZ), ("assetInfo: " + aO)).decimals
674+ if ((da != e))
673675 then throw("wrong decimals")
674676 else false
675677 }
676678
677- let aO = cV
678- let aP = size(aO)
679- let aQ = false
680- func aR (aS,aT) = if ((aT >= aP))
681- then aS
682- else cW(aS, aO[aT])
679+ let aP = cW
680+ let aQ = size(aP)
681+ let aR = false
682+ func aS (aT,aU) = if ((aU >= aQ))
683+ then aT
684+ else cX(aT, aP[aU])
683685
684- func aU (aS,aT) = if ((aT >= aP))
685- then aS
686+ func aV (aT,aU) = if ((aU >= aQ))
687+ then aT
686688 else throw("List size exceeds 15")
687689
688- aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
690+ aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
689691 }
690692
691693
692-@Callable(da)
693-func D (aW,ba) = {
694- let bn = bc(aW, ba)
695- $Tuple2([IntegerEntry("D", bn)], bn)
694+@Callable(db)
695+func D (aX,bb) = {
696+ let bo = bd(aX, bb)
697+ $Tuple2([IntegerEntry("D", bo)], bo)
696698 }
697699
698700
699701
700-@Callable(da)
701-func init (an,aF,db) = if (!(isDataStorageUntouched(this)))
702+@Callable(db)
703+func init (ao,aG,dc) = if (!(isDataStorageUntouched(this)))
702704 then throw("Already initialized")
703705 else {
704- let dc = "s_Multi_USD"
705- let dd = ("ShareToken of SwopFi protocol for MultiStable USD pool at address " + toString(this))
706- let de = Issue(dc, dd, 0, 6, true)
707- let df = calculateAssetId(de)
708- if (cU(an))
706+ let dd = "s_Multi_USD"
707+ let de = ("ShareToken of SwopFi protocol for MultiStable USD pool at address " + toString(this))
708+ let df = Issue(dd, de, 0, 6, true)
709+ let dg = calculateAssetId(df)
710+ if (cV(ao))
709711 then throw()
710712 else {
711- let dg = [StringEntry(f, an), IntegerEntry("initial_A", aF), IntegerEntry("future_A", aF), IntegerEntry(l, getIntegerValue(H, "base_fee_flat")), StringEntry(j, toBase58String(df)), IntegerEntry(k, 0), IntegerEntry(m, 15), BooleanEntry(h, true), de]
712- if (db)
713- then (dg ++ [BooleanEntry(r, db), IntegerEntry(s, (aa + (ac * ab)))])
714- else dg
713+ let dh = [StringEntry(g, ao), IntegerEntry("initial_A", aG), IntegerEntry("future_A", aG), IntegerEntry(m, getIntegerValue(I, "base_fee_flat")), StringEntry(k, toBase58String(dg)), IntegerEntry(l, 0), IntegerEntry(n, 15), BooleanEntry(i, true), df]
714+ if (dc)
715+ then (dh ++ [BooleanEntry(s, dc), IntegerEntry(t, (ab + (ad * ac)))])
716+ else dh
715717 }
716718 }
717719
718720
719721
720-@Callable(da)
721-func addLiquidity (dh,di) = valueOrElse(as(), {
722- let ba = aF()
723- let aW = aK()
724- let bV = if ((af == 0))
722+@Callable(db)
723+func addLiquidity (di,dj) = valueOrElse(at(), {
724+ let bb = aG()
725+ let aX = aL()
726+ let bW = if ((ag == 0))
725727 then 0
726- else bq(aW, ba)
727- let cx = da.payments
728- let dj = size(cx)
729- func dk (dl) = if ((dj > ao))
730- then throw(("payments size > " + toString(ao)))
731- else if ((1 > dj))
728+ else br(aX, bb)
729+ let cy = db.payments
730+ let dk = size(cy)
731+ func dl (dk) = if ((dk > ap))
732+ then throw(("payments size > " + toString(ap)))
733+ else if ((1 > dk))
732734 then throw("payments size < 1")
733- else if (if ((af == 0))
734- then (ao != dj)
735+ else if (if ((ag == 0))
736+ then (ap != dk)
735737 else false)
736738 then throw("initial deposit requires all coins")
737739 else {
738- func dm (aM,cM) = if (containsElement(an, ci(cM.assetId)))
740+ func dm (aN,cN) = if (containsElement(ao, cj(cN.assetId)))
739741 then true
740742 else throw("Invalid asset in payment")
741743
742- let aO = cx
743- let aP = size(aO)
744- let aQ = false
745- func aR (aS,aT) = if ((aT >= aP))
746- then aS
747- else dm(aS, aO[aT])
744+ let aP = cy
745+ let aQ = size(aP)
746+ let aR = false
747+ func aS (aT,aU) = if ((aU >= aQ))
748+ then aT
749+ else dm(aT, aP[aU])
748750
749- func aU (aS,aT) = if ((aT >= aP))
750- then aS
751+ func aV (aT,aU) = if ((aU >= aQ))
752+ then aT
751753 else throw("List size exceeds 15")
752754
753- aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
755+ aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
754756 }
755757
756- if (!(dk(dj)))
758+ if (!(dl(dk)))
757759 then throw()
758760 else {
759- let cH = cD()
760- if (cH._1)
761- then (cJ(cH._2) ++ cK(da.caller, cx))
761+ let cI = cE()
762+ if (cI._1)
763+ then (cK(cI._2) ++ cL(db.caller, cy))
762764 else {
763- func cL (aM,aN) = {
764- let dn = aM
765- let cO = dn._1
766- let au = dn._2
767- let do = dn._3
768- if (if ((dj > do))
769- then (ci(cx[do].assetId) == aN)
765+ let dn = size(cy)
766+ func cM (aN,aO) = {
767+ let do = aN
768+ let cP = do._1
769+ let av = do._2
770+ let dp = do._3
771+ if (if ((dn > dp))
772+ then (cj(cy[dp].assetId) == aO)
770773 else false)
771- then $Tuple3((cO :+ (aW[au] + cx[do].amount)), (au + 1), (do + 1))
772- else $Tuple3((cO :+ aW[au]), (au + 1), do)
774+ then {
775+ let dq = cn(cy[dp].amount, cj(cy[dp].assetId))
776+ if ((dq == dq))
777+ then $Tuple3((cP :+ (aX[av] + cy[dp].amount)), (av + 1), (dp + 1))
778+ else throw("Strict value is not equal to itself.")
779+ }
780+ else $Tuple3((cP :+ aX[av]), (av + 1), dp)
773781 }
774782
775- let dp = {
776- let aO = an
777- let aP = size(aO)
778- let aQ = $Tuple3(nil, 0, 0)
779- func aR (aS,aT) = if ((aT >= aP))
780- then aS
781- else cL(aS, aO[aT])
783+ let dr = {
784+ let aP = ao
785+ let aQ = size(aP)
786+ let aR = $Tuple3(nil, 0, 0)
787+ func aS (aT,aU) = if ((aU >= aQ))
788+ then aT
789+ else cM(aT, aP[aU])
782790
783- func aU (aS,aT) = if ((aT >= aP))
784- then aS
791+ func aV (aT,aU) = if ((aU >= aQ))
792+ then aT
785793 else throw("List size exceeds 15")
786794
787- aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
795+ aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
788796 }
789- let cO = dp._1
790- let dq = dp._2
791- let dr = dp._3
792- if ((dj > dr))
797+ let cP = dr._1
798+ let ds = dr._2
799+ let dt = dr._3
800+ if (((dn - 1) > dt))
793801 then throw("Incorect payments order")
794- else if (cN(cO))
802+ else if (cO(cP))
795803 then throw()
796804 else {
797- let bW = bq(cO, ba)
798- if (ay((bW > bV)))
805+ let bX = br(cP, bb)
806+ if (az((bX > bW)))
799807 then throw("D1 > D0")
800808 else {
801- let bS = aA(da.caller)
802- func ds (aM,dt) = {
803- let du = aM
804- let dv = du._1
805- let dw = du._2
806- let au = du._3
807- if ((af > 0))
809+ let bT = aB(db.caller)
810+ func du (aN,dv) = {
811+ let dw = aN
812+ let dx = dw._1
813+ let dy = dw._2
814+ let av = dw._3
815+ if ((ag > 0))
808816 then {
809- let bT = ((fraction(ah, bS, ag, CEILING) * ao) / (4 * (ao - 1)))
810- let dx = {
811- let dy = fraction(bW, aW[au], bV)
812- let dz = if ((dy > dt))
813- then (dy - dt)
814- else (dt - dy)
815- fraction(bT, dz, ag)
817+ let bU = ((fraction(ai, bT, ah, CEILING) * ap) / (4 * (ap - 1)))
818+ let dz = {
819+ let dA = fraction(bX, aX[av], bW)
820+ let dB = if ((dA > dv))
821+ then (dA - dv)
822+ else (dv - dA)
823+ fraction(bU, dB, ah)
816824 }
817- let dA = fraction(dx, ai, ag)
818- let dB = (dt - dx)
819- let dC = (dt - dx)
820- let dD = (dt - aW[au])
821- let dE = if ((dD > 0))
822- then cm((dD - dx), an[au])
823- else cy(dx, an[au])
824- $Tuple3((dv :+ dC), (dw ++ [ScriptTransfer(W, (dx - dA), fromBase58String(an[au])), ScriptTransfer(R, dA, fromBase58String(an[au])), IntegerEntry((an[au] + g), dB)]), (au + 1))
825+ let dC = fraction(dz, aj, ah)
826+ let dD = (dv - dC)
827+ let dE = (dv - dz)
828+ let dF = cz(dz, ao[av])
829+ if ((dF == dF))
830+ then $Tuple3((dx :+ dE), (dy ++ [ScriptTransfer(X, (dz - dC), fromBase58String(ao[av])), ScriptTransfer(S, dC, fromBase58String(ao[av])), IntegerEntry((ao[av] + h), dD)]), (av + 1))
831+ else throw("Strict value is not equal to itself.")
825832 }
826- else $Tuple3((dv :+ dt), (dw :+ IntegerEntry((an[au] + g), dt)), (au + 1))
833+ else $Tuple3((dx :+ dv), (dy :+ IntegerEntry((ao[av] + h), dv)), (av + 1))
827834 }
828835
829- let dF = {
830- let aO = cO
831- let aP = size(aO)
832- let aQ = $Tuple3(nil, nil, 0)
833- func bl (aS,aT) = if ((aT >= aP))
834- then aS
835- else ds(aS, aO[aT])
836+ let dG = {
837+ let aP = cP
838+ let aQ = size(aP)
839+ let aR = $Tuple3(nil, nil, 0)
840+ func bm (aT,aU) = if ((aU >= aQ))
841+ then aT
842+ else du(aT, aP[aU])
836843
837- func bm (aS,aT) = if ((aT >= aP))
838- then aS
844+ func bn (aT,aU) = if ((aU >= aQ))
845+ then aT
839846 else throw("List size exceeds 15")
840847
841- bm(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
848+ bn(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(bm(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
842849 }
843- let dv = dF._1
844- let dw = dF._2
845- let dG = bq(dv, ba)
846- let dH = if ((af == 0))
847- then bW
848- else fraction(af, (dG - bV), bV)
849- if (ay((dH >= dh)))
850+ let dx = dG._1
851+ let dy = dG._2
852+ let dH = br(dx, bb)
853+ let dI = if ((ag == 0))
854+ then bX
855+ else fraction(ag, (dH - bW), bW)
856+ if (az((dI >= di)))
850857 then throw("Slippage screwed you")
851- else if (di)
858+ else if (dj)
852859 then {
853- let dI = invoke(this, "reissueShare", [dH], nil)
854- if ((dI == dI))
860+ let dJ = invoke(this, "reissueShare", [dI], nil)
861+ if ((dJ == dJ))
855862 then {
856- let dJ = invoke(V, "lockShareTokens", [toString(this)], [AttachedPayment(ae, dH)])
857- if ((dJ == dJ))
858- then (dw :+ IntegerEntry(k, (af + dH)))
863+ let dq = invoke(W, "lockShareTokens", [toString(this)], [AttachedPayment(af, dI)])
864+ if ((dq == dq))
865+ then (dy :+ IntegerEntry(l, (ag + dI)))
859866 else throw("Strict value is not equal to itself.")
860867 }
861868 else throw("Strict value is not equal to itself.")
862869 }
863- else (dw ++ [Reissue(ae, dH, true), ScriptTransfer(da.caller, dH, ae), IntegerEntry(k, (af + dH))])
870+ else (dy ++ [Reissue(af, dI, true), ScriptTransfer(db.caller, dI, af), IntegerEntry(l, (ag + dI))])
864871 }
865872 }
866873 }
867874 }
868875 })
869876
870877
871878
872-@Callable(da)
873-func reissueShare (co) = valueOrElse(av(da), [Reissue(ae, co, true)])
879+@Callable(db)
880+func reissueShare (cp) = valueOrElse(aw(db), [Reissue(af, cp, true)])
874881
875882
876883
877-@Callable(da)
884+@Callable(db)
878885 func getDy (dK,dL,dM,dN) = {
879- let aW = aK()
880- let dO = valueOrErrorMessage(indexOf(an, dK), "unknown token in")
881- let dP = valueOrErrorMessage(indexOf(an, dL), "unknown token out")
882- let bu = (aW[dO] + dM)
883- let bH = br(dO, dP, bu, aW)
884- let ch = ((aW[dP] - bH) - 1)
885- let bS = aA(Address(fromBase58String(dN)))
886- let bT = fraction(fraction(ah, bS, ag, CEILING), ch, ag)
887- $Tuple2(nil, $Tuple2((ch - bT), bT))
886+ let aX = aL()
887+ let dO = valueOrErrorMessage(indexOf(ao, dK), "unknown token in")
888+ let dP = valueOrErrorMessage(indexOf(ao, dL), "unknown token out")
889+ let bv = (aX[dO] + dM)
890+ let bI = bs(dO, dP, bv, aX)
891+ let ci = ((aX[dP] - bI) - 1)
892+ let bT = aB(Address(fromBase58String(dN)))
893+ let bU = fraction(fraction(ai, bT, ah, CEILING), ci, ah)
894+ $Tuple2(nil, $Tuple2((ci - bU), bU))
888895 }
889896
890897
891898
892-@Callable(da)
893-func exchange (dQ,dR) = valueOrElse(as(), if ((size(da.payments) != 1))
899+@Callable(db)
900+func exchange (dQ,dR) = valueOrElse(at(), if ((size(db.payments) != 1))
894901 then throw("size(payments) != 1")
895902 else {
896- let cH = cD()
897- if (cH._1)
898- then (cJ(cH._2) ++ cK(da.caller, da.payments))
903+ let cI = cE()
904+ if (cI._1)
905+ then (cK(cI._2) ++ cL(db.caller, db.payments))
899906 else {
900- let cM = da.payments[0]
901- let dS = ci(cM.assetId)
907+ let cN = db.payments[0]
908+ let dS = cj(cN.assetId)
902909 let dT = fromBase58String(dQ)
903- let dM = cM.amount
904- let dO = valueOrErrorMessage(indexOf(an, dS), "unknown token in")
905- let dP = valueOrErrorMessage(indexOf(an, dQ), "unknown token out")
906- let aW = aK()
907- let bu = (aW[dO] + dM)
908- let bH = br(dO, dP, bu, aW)
909- let dU = ((aW[dP] - bH) - 1)
910- let bS = aA(da.caller)
911- let bT = fraction(dU, fraction(ah, bS, ag, CEILING), ag)
912- let ch = (dU - bT)
913- let dA = fraction(bT, ai, ag)
914- if (ay((ch >= dR)))
910+ let dM = cN.amount
911+ let dO = valueOrErrorMessage(indexOf(ao, dS), "unknown token in")
912+ let dP = valueOrErrorMessage(indexOf(ao, dQ), "unknown token out")
913+ let aX = aL()
914+ let bv = (aX[dO] + dM)
915+ let bI = bs(dO, dP, bv, aX)
916+ let dU = ((aX[dP] - bI) - 1)
917+ let bT = aB(db.caller)
918+ let bU = fraction(dU, fraction(ai, bT, ah, CEILING), ah)
919+ let ci = (dU - bU)
920+ let dC = fraction(bU, aj, ah)
921+ if (az((ci >= dR)))
915922 then throw("Exchange resulted in fewer coins than expected")
916923 else {
917- func dV (aM,dW) = {
918- let dX = aM
919- let cO = dX._1
920- let au = dX._2
921- if ((au == dO))
922- then $Tuple2((cO :+ (dW + dM)), (au + 1))
923- else if ((au == dP))
924- then $Tuple2((cO :+ (dW - dU)), (au + 1))
925- else $Tuple2((cO :+ dW), (au + 1))
924+ func dV (aN,dW) = {
925+ let dX = aN
926+ let cP = dX._1
927+ let av = dX._2
928+ if ((av == dO))
929+ then $Tuple2((cP :+ (dW + dM)), (av + 1))
930+ else if ((av == dP))
931+ then $Tuple2((cP :+ (dW - dU)), (av + 1))
932+ else $Tuple2((cP :+ dW), (av + 1))
926933 }
927934
928935 let dY = {
929- let aO = aW
930- let aP = size(aO)
931- let aQ = $Tuple2(nil, 0)
932- func aR (aS,aT) = if ((aT >= aP))
933- then aS
934- else dV(aS, aO[aT])
936+ let aP = aX
937+ let aQ = size(aP)
938+ let aR = $Tuple2(nil, 0)
939+ func aS (aT,aU) = if ((aU >= aQ))
940+ then aT
941+ else dV(aT, aP[aU])
935942
936- func aU (aS,aT) = if ((aT >= aP))
937- then aS
943+ func aV (aT,aU) = if ((aU >= aQ))
944+ then aT
938945 else throw("List size exceeds 15")
939946
940- aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
947+ aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
941948 }
942- let cO = dY._1
943- let au = dY._2
944- if (cN(cO))
949+ let cP = dY._1
950+ let av = dY._2
951+ if (cO(cP))
945952 then throw()
946953 else {
947- let dJ = cm(cM.amount, ci(cM.assetId))
948- if ((dJ == dJ))
954+ let dq = cn(cN.amount, cj(cN.assetId))
955+ if ((dq == dq))
949956 then {
950- let dZ = cy(dU, dQ)
951- if ((dZ == dZ))
952- then $Tuple2([IntegerEntry((dS + g), bu), IntegerEntry((dQ + g), (aW[dP] - dU)), ScriptTransfer(da.caller, ch, dT), ScriptTransfer(R, dA, dT), ScriptTransfer(W, (bT - dA), dT)], $Tuple2(ch, dT))
957+ let dF = cz(dU, dQ)
958+ if ((dF == dF))
959+ then $Tuple2([IntegerEntry((dS + h), bv), IntegerEntry((dQ + h), (aX[dP] - dU)), ScriptTransfer(db.caller, ci, dT), ScriptTransfer(S, dC, dT), ScriptTransfer(X, (bU - dC), dT)], $Tuple2(ci, dT))
953960 else throw("Strict value is not equal to itself.")
954961 }
955962 else throw("Strict value is not equal to itself.")
956963 }
957964 }
958965 }
959966 })
960967
961968
962969
963-@Callable(da)
964-func withdraw (ea) = valueOrElse(as(), if ((size(da.payments) != 1))
970+@Callable(db)
971+func withdraw (dZ,ea) = valueOrElse(at(), if ((size(db.payments) != 1))
965972 then throw("size(payments) != 1")
966973 else {
967- let eb = da.payments[0].amount
968- let ec = da.payments[0].assetId
969- if ((ae != ec))
970- then throw("unknown payment token")
974+ let cI = cE()
975+ if (cI._1)
976+ then (cK(cI._2) ++ cL(db.caller, db.payments))
971977 else {
972- let cH = cD()
973- if (cH._1)
974- then (cJ(cH._2) ++ cK(da.originCaller, da.payments))
978+ let cN = db.payments[0]
979+ let dS = cN.assetId
980+ if ((dS != af))
981+ then throw("unknown token")
975982 else {
976- func ds (aM,ed) = {
977- let ee = aM
978- let dw = ee._1
979- let au = ee._2
980- let ef = fraction(ed, eb, af)
981- if (ay((ef >= ea[au])))
982- then throw("Withdrawal resulted in fewer coins than expected")
983- else {
984- let dZ = cy(ef, an[au])
985- if ((dZ == dZ))
986- then $Tuple2((dw ++ [IntegerEntry((an[au] + g), (ed - ef)), ScriptTransfer(da.originCaller, ef, fromBase58String(an[au]))]), (au + 1))
987- else throw("Strict value is not equal to itself.")
983+ let eb = cN.amount
984+ let bV = ag
985+ let ec = if ((ea > 0))
986+ then invoke(W, "withdrawShareTokens", [toString(this), ea], nil)
987+ else 0
988+ if ((ec == ec))
989+ then {
990+ let ed = (eb + ea)
991+ func du (aN,ee) = {
992+ let ef = aN
993+ let dy = ef._1
994+ let av = ef._2
995+ let eg = fraction(ee, ed, bV)
996+ if (az((eg >= dZ[av])))
997+ then throw("Withdrawal resulted in fewer coins than expected")
998+ else {
999+ let dF = cz(eg, ao[av])
1000+ if ((dF == dF))
1001+ then $Tuple2((dy ++ [IntegerEntry((ao[av] + h), (ee - eg)), ScriptTransfer(db.caller, eg, fromBase58String(ao[av]))]), (av + 1))
1002+ else throw("Strict value is not equal to itself.")
1003+ }
9881004 }
989- }
9901005
991- let eg = {
992- let aO = aK()
993- let aP = size(aO)
994- let aQ = $Tuple2(nil, 0)
995- func aR (aS,aT) = if ((aT >= aP))
996- then aS
997- else ds(aS, aO[aT])
1006+ let eh = {
1007+ let aP = aL()
1008+ let aQ = size(aP)
1009+ let aR = $Tuple2(nil, 0)
1010+ func aS (aT,aU) = if ((aU >= aQ))
1011+ then aT
1012+ else du(aT, aP[aU])
9981013
999- func aU (aS,aT) = if ((aT >= aP))
1000- then aS
1001- else throw("List size exceeds 15")
1014+ func aV (aT,aU) = if ((aU >= aQ))
1015+ then aT
1016+ else throw("List size exceeds 15")
10021017
1003- aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
1004- }
1005- let dw = eg._1
1006- let au = eg._2
1007- (dw ++ [Burn(ae, eb), IntegerEntry(k, (af - eb))])
1018+ aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
1019+ }
1020+ let dy = eh._1
1021+ let av = eh._2
1022+ (dy ++ [Burn(af, ed), IntegerEntry(l, (ag - ed))])
1023+ }
1024+ else throw("Strict value is not equal to itself.")
10081025 }
10091026 }
10101027 })
10111028
10121029
10131030
1014-@Callable(da)
1015-func withdrawWithUnlock (ea,eh) = valueOrElse(as(), if ((0 >= eh))
1016- then throw("Unlock amount must be positive")
1017- else {
1018- let cH = cD()
1019- if (cH._1)
1020- then (cJ(cH._2) ++ cK(da.caller, da.payments))
1021- else {
1022- let eb = if ((size(da.payments) > 0))
1023- then if ((size(da.payments) != 1))
1024- then throw("size(payments) != 1")
1025- else {
1026- let ec = da.payments[0].assetId
1027- if ((ae != ec))
1028- then throw("unknown payment token")
1029- else da.payments[0].amount
1030- }
1031- else 0
1032- let ei = invoke(V, "withdrawShareTokens", [toString(this), eh], nil)
1033- if ((ei == ei))
1034- then {
1035- let ej = (eb + eh)
1036- let dE = invoke(this, "withdraw", [ea], [AttachedPayment(ae, ej)])
1037- if ((dE == dE))
1038- then nil
1039- else throw("Strict value is not equal to itself.")
1040- }
1041- else throw("Strict value is not equal to itself.")
1042- }
1043- })
1044-
1045-
1046-
1047-@Callable(da)
1048-func calcWithdrawOneCoin (ek,dQ,el) = {
1049- let au = valueOrErrorMessage(indexOf(an, dQ), "unknown token out")
1050- $Tuple2(nil, bP(aK(), ek, au, Address(fromBase58String(el)))._1)
1031+@Callable(db)
1032+func calcWithdrawOneCoin (ei,dQ,ej) = {
1033+ let av = valueOrErrorMessage(indexOf(ao, dQ), "unknown token out")
1034+ $Tuple2(nil, bQ(aL(), ei, av, Address(fromBase58String(ej)))._1)
10511035 }
10521036
10531037
10541038
1055-@Callable(da)
1056-func withdrawOneCoin (dQ,em) = valueOrElse(as(), if ((size(da.payments) != 1))
1039+@Callable(db)
1040+func withdrawOneCoin (dQ,ek,ea) = valueOrElse(at(), if ((size(db.payments) != 1))
10571041 then throw("size(payments) != 1")
10581042 else {
1059- let cH = cD()
1060- if (cH._1)
1061- then (cJ(cH._2) ++ cK(da.originCaller, da.payments))
1043+ let cI = cE()
1044+ if (cI._1)
1045+ then (cK(cI._2) ++ cL(db.caller, db.payments))
10621046 else {
1063- let eb = da.payments[0].amount
1064- let ec = da.payments[0].assetId
1065- if ((ec != ae))
1047+ let cN = db.payments[0]
1048+ let dS = cN.assetId
1049+ if ((dS != af))
10661050 then throw("unknown token")
10671051 else {
1068- let en = valueOrErrorMessage(indexOf(an, dQ), "unknown token out")
1069- let aW = aK()
1070- let eo = bP(aW, eb, en, da.originCaller)
1071- let ch = eo._1
1072- let ep = eo._2
1073- if (ay((ch >= em)))
1074- then throw("Not enough coins removed")
1075- else {
1076- let dA = fraction(ep, ai, ag)
1077- let eq = (ch + ep)
1078- func dV (aM,dW) = {
1079- let er = aM
1080- let cO = er._1
1081- let au = er._2
1082- if ((au == en))
1083- then $Tuple2((cO :+ (dW - eq)), (au + 1))
1084- else $Tuple2((cO :+ dW), (au + 1))
1085- }
1052+ let el = valueOrErrorMessage(indexOf(ao, dQ), "unknown token out")
1053+ let em = cN.amount
1054+ let ec = if ((ea > 0))
1055+ then invoke(W, "withdrawShareTokens", [toString(this), ea], nil)
1056+ else 0
1057+ if ((ec == ec))
1058+ then {
1059+ let ed = (em + ea)
1060+ let aX = aL()
1061+ let en = bQ(aX, ed, el, db.caller)
1062+ let ci = en._1
1063+ let eo = en._2
1064+ if (az((ci >= ek)))
1065+ then throw("Not enough coins removed")
1066+ else {
1067+ let dC = fraction(eo, aj, ah)
1068+ let ep = (ci + eo)
1069+ func dV (aN,dW) = {
1070+ let eq = aN
1071+ let cP = eq._1
1072+ let av = eq._2
1073+ if ((av == el))
1074+ then $Tuple2((cP :+ (dW - ep)), (av + 1))
1075+ else $Tuple2((cP :+ dW), (av + 1))
1076+ }
10861077
1087- let es = {
1088- let aO = aW
1089- let aP = size(aO)
1090- let aQ = $Tuple2(nil, 0)
1091- func aR (aS,aT) = if ((aT >= aP))
1092- then aS
1093- else dV(aS, aO[aT])
1078+ let er = {
1079+ let aP = aX
1080+ let aQ = size(aP)
1081+ let aR = $Tuple2(nil, 0)
1082+ func aS (aT,aU) = if ((aU >= aQ))
1083+ then aT
1084+ else dV(aT, aP[aU])
10941085
1095- func aU (aS,aT) = if ((aT >= aP))
1096- then aS
1097- else throw("List size exceeds 15")
1086+ func aV (aT,aU) = if ((aU >= aQ))
1087+ then aT
1088+ else throw("List size exceeds 15")
10981089
1099- aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
1100- }
1101- let cO = es._1
1102- let et = es._2
1103- if (cN(cO))
1104- then throw()
1105- else {
1106- let dZ = cy(eq, dQ)
1107- if ((dZ == dZ))
1108- then [ScriptTransfer(da.originCaller, ch, fromBase58String(dQ)), IntegerEntry((an[en] + g), (aW[en] - eq)), Burn(ae, eb), ScriptTransfer(R, dA, fromBase58String(dQ)), ScriptTransfer(W, (ep - dA), fromBase58String(dQ)), IntegerEntry(k, (af - eb))]
1109- else throw("Strict value is not equal to itself.")
1090+ aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
1091+ }
1092+ let cP = er._1
1093+ let av = er._2
1094+ if (cO(cP))
1095+ then throw()
1096+ else {
1097+ let dF = cz(ep, dQ)
1098+ if ((dF == dF))
1099+ then [ScriptTransfer(db.caller, ci, fromBase58String(dQ)), IntegerEntry((ao[av] + h), (aX[av] - ep)), Burn(af, ed), ScriptTransfer(S, dC, fromBase58String(dQ)), ScriptTransfer(X, (eo - dC), fromBase58String(dQ)), IntegerEntry(l, (ag - ed))]
1100+ else throw("Strict value is not equal to itself.")
1101+ }
11101102 }
11111103 }
1104+ else throw("Strict value is not equal to itself.")
11121105 }
11131106 }
11141107 })
11151108
11161109
11171110
1118-@Callable(da)
1119-func withdrawOneCoinWithUnlock (dQ,em,eh) = valueOrElse(as(), if ((0 >= eh))
1120- then throw("Unlock amount must be positive")
1121- else {
1122- let cH = cD()
1123- if (cH._1)
1124- then (cJ(cH._2) ++ cK(da.caller, da.payments))
1125- else {
1126- let eb = if ((size(da.payments) > 0))
1127- then if ((size(da.payments) != 1))
1128- then throw("size(payments) != 1")
1129- else {
1130- let ec = da.payments[0].assetId
1131- if ((ae != ec))
1132- then throw("unknown payment token")
1133- else da.payments[0].amount
1134- }
1135- else 0
1136- let ei = invoke(V, "withdrawShareTokens", [toString(this), eh], nil)
1137- if ((ei == ei))
1138- then {
1139- let ej = (eb + eh)
1140- let dE = invoke(this, "withdrawOneCoin", [dQ, em], [AttachedPayment(ae, ej)])
1141- if ((dE == dE))
1142- then nil
1143- else throw("Strict value is not equal to itself.")
1144- }
1145- else throw("Strict value is not equal to itself.")
1146- }
1147- })
1111+@Callable(db)
1112+func A () = $Tuple2(nil, aG())
11481113
11491114
11501115
1151-@Callable(da)
1152-func A () = $Tuple2(nil, aF())
1153-
1154-
1155-
1156-@Callable(da)
1116+@Callable(db)
11571117 func getVirtualPrice () = {
1158- let bn = aZ(aK(), aF())
1159- $Tuple2(nil, fraction(bn, a, af))
1118+ let bo = ba(aL(), aG())
1119+ $Tuple2(nil, fraction(bo, b, ag))
11601120 }
11611121
11621122
11631123
1164-@Callable(da)
1165-func calcTokenAmount (eu,ev) = {
1166- let ba = aF()
1167- let ew = aK()
1168- let bV = bq(ew, ba)
1169- func ex (aM,ed) = {
1170- let ey = aM
1171- let cO = ey._1
1172- let au = ey._2
1173- let dt = (ed + (if (ev)
1174- then eu[au]
1175- else -(eu[au])))
1176- $Tuple2((cO :+ dt), (au + 1))
1124+@Callable(db)
1125+func calcTokenAmount (es,et) = {
1126+ let bb = aG()
1127+ let eu = aL()
1128+ let bW = br(eu, bb)
1129+ func ev (aN,ee) = {
1130+ let ew = aN
1131+ let cP = ew._1
1132+ let av = ew._2
1133+ let dv = (ee + (if (et)
1134+ then es[av]
1135+ else -(es[av])))
1136+ $Tuple2((cP :+ dv), (av + 1))
11771137 }
11781138
1179- let cO = ( let aO = ew
1180- let aP = size(aO)
1181- let aQ = $Tuple2(nil, 0)
1182- func aR (aS,aT) = if ((aT >= aP))
1183- then aS
1184- else ex(aS, aO[aT])
1139+ let cP = ( let aP = eu
1140+ let aQ = size(aP)
1141+ let aR = $Tuple2(nil, 0)
1142+ func aS (aT,aU) = if ((aU >= aQ))
1143+ then aT
1144+ else ev(aT, aP[aU])
11851145
1186- func aU (aS,aT) = if ((aT >= aP))
1187- then aS
1146+ func aV (aT,aU) = if ((aU >= aQ))
1147+ then aT
11881148 else throw("List size exceeds 15")
11891149
1190- aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15))._1
1191- let bW = bq(cO, ba)
1192- let ez = if (ev)
1193- then (bW - bV)
1194- else (bV - bW)
1195- $Tuple2(nil, fraction(ez, af, bV))
1150+ aV(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aS(aR, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15))._1
1151+ let bX = br(cP, bb)
1152+ let ex = if (et)
1153+ then (bX - bW)
1154+ else (bW - bX)
1155+ $Tuple2(nil, fraction(ex, ag, bW))
11961156 }
11971157
11981158
11991159
1200-@Callable(da)
1201-func rampA (eA,eB) = valueOrElse(as(), valueOrElse(at(da), if (ay((ax >= (al + e))))
1160+@Callable(db)
1161+func rampA (ey,ez) = valueOrElse(at(), valueOrElse(au(db), if (az((ay >= (am + f))))
12021162 then throw("too often")
1203- else if (ay((eB >= (ax + e))))
1163+ else if (az((ez >= (ay + f))))
12041164 then throw("insufficient time")
12051165 else {
1206- let eC = aF()
1207- if (ay(if ((eA > 0))
1208- then (b > eA)
1166+ let eA = aG()
1167+ if (az(if ((ey > 0))
1168+ then (c > ey)
12091169 else false))
12101170 then throw("out of base range")
1211- else if (ay(if (if ((eA >= eC))
1212- then ((eC * c) >= eA)
1171+ else if (az(if (if ((ey >= eA))
1172+ then ((eA * d) >= ey)
12131173 else false)
12141174 then true
1215- else if ((eC > eA))
1216- then ((eA * c) >= eC)
1175+ else if ((eA > ey))
1176+ then ((ey * d) >= eA)
12171177 else false))
12181178 then throw("out of range")
1219- else [IntegerEntry("initial_A", eC), IntegerEntry("future_A", eA), IntegerEntry("initial_A_time", ax), IntegerEntry("future_A_time", eB)]
1179+ else [IntegerEntry("initial_A", eA), IntegerEntry("future_A", ey), IntegerEntry("initial_A_time", ay), IntegerEntry("future_A_time", ez)]
12201180 }))
12211181
12221182
12231183
1224-@Callable(da)
1225-func stopRampA () = valueOrElse(as(), valueOrElse(at(da), {
1226- let eD = aF()
1227-[IntegerEntry("initial_A", eD), IntegerEntry("future_A", eD), IntegerEntry("initial_A_time", ax), IntegerEntry("future_A_time", ax)]
1184+@Callable(db)
1185+func stopRampA () = valueOrElse(at(), valueOrElse(au(db), {
1186+ let eB = aG()
1187+[IntegerEntry("initial_A", eB), IntegerEntry("future_A", eB), IntegerEntry("initial_A_time", ay), IntegerEntry("future_A_time", ay)]
12281188 }))
12291189
12301190
12311191
1232-@Callable(da)
1233-func shutdown () = valueOrElse(at(da), if (!(ad))
1234- then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, i), "the cause wasn't specified")))
1235- else ap("Paused by admin"))
1192+@Callable(db)
1193+func shutdown () = valueOrElse(au(db), if (!(ae))
1194+ then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, j), "the cause wasn't specified")))
1195+ else aq("Paused by admin"))
12361196
12371197
12381198
1239-@Callable(da)
1240-func activate () = valueOrElse(at(da), if (ad)
1241- then ar()
1242- else [BooleanEntry(h, true), DeleteEntry(i)])
1199+@Callable(db)
1200+func activate () = valueOrElse(au(db), if (ae)
1201+ then as()
1202+ else [BooleanEntry(i, true), DeleteEntry(j)])
12431203
12441204
12451205
1246-@Callable(da)
1247-func keepLimitForFirstHarvest (eE) = valueOrElse(as(), valueOrElse(at(da), [IntegerEntry(t, eE)]))
1206+@Callable(db)
1207+func keepLimitForFirstHarvest (eC) = valueOrElse(at(), valueOrElse(au(db), [IntegerEntry(u, eC)]))
12481208
12491209
1250-@Verifier(eF)
1251-func eG () = {
1252- let eH = {
1253- let eI = if (sigVerify(eF.bodyBytes, eF.proofs[0], N))
1210+@Verifier(eD)
1211+func eE () = {
1212+ let eF = {
1213+ let eG = if (sigVerify(eD.bodyBytes, eD.proofs[0], O))
12541214 then 1
12551215 else 0
1256- let eJ = if (sigVerify(eF.bodyBytes, eF.proofs[1], O))
1216+ let eH = if (sigVerify(eD.bodyBytes, eD.proofs[1], P))
12571217 then 1
12581218 else 0
1259- let eK = if (sigVerify(eF.bodyBytes, eF.proofs[2], P))
1219+ let eI = if (sigVerify(eD.bodyBytes, eD.proofs[2], Q))
12601220 then 1
12611221 else 0
1262- (((eI + eJ) + eK) >= 2)
1222+ (((eG + eH) + eI) >= 2)
12631223 }
1264- let K = eF
1265- if ($isInstanceOf(K, "InvokeScriptTransaction"))
1224+ let L = eD
1225+ if ($isInstanceOf(L, "InvokeScriptTransaction"))
12661226 then {
1267- let dE = K
1268- let eL = if ((dE.dApp == this))
1269- then (dE.function == "takeIntoAccountExtraFunds")
1227+ let eJ = L
1228+ let eK = if ((eJ.dApp == this))
1229+ then (eJ.function == "takeIntoAccountExtraFunds")
12701230 else false
1271- let eM = if (if (if (sigVerify(eF.bodyBytes, eF.proofs[0], N))
1231+ let eL = if (if (if (sigVerify(eD.bodyBytes, eD.proofs[0], O))
12721232 then true
1273- else sigVerify(eF.bodyBytes, eF.proofs[0], O))
1233+ else sigVerify(eD.bodyBytes, eD.proofs[0], P))
12741234 then true
1275- else sigVerify(eF.bodyBytes, eF.proofs[0], P))
1235+ else sigVerify(eD.bodyBytes, eD.proofs[0], Q))
12761236 then true
1277- else sigVerify(eF.bodyBytes, eF.proofs[0], Q)
1278- if (if (eL)
1279- then eM
1237+ else sigVerify(eD.bodyBytes, eD.proofs[0], R)
1238+ if (if (eK)
1239+ then eL
12801240 else false)
12811241 then true
1282- else eH
1242+ else eF
12831243 }
1284- else eH
1244+ else eF
12851245 }
12861246

github/deemru/w8io/169f3d6 
510.32 ms