tx · 9GDJqh7tMaqmqFFHYGC89reXt68bGsNyNuufFpxj1mEp

3MxWgDbE9EmjQj8b3LfFwa91FZizptyeQXS:  -0.14000000 Waves

2022.10.18 17:28 [2277958] smart account 3MxWgDbE9EmjQj8b3LfFwa91FZizptyeQXS > SELF 0.00000000 Waves

{ "type": 13, "id": "9GDJqh7tMaqmqFFHYGC89reXt68bGsNyNuufFpxj1mEp", "fee": 14000000, "feeAssetId": null, "timestamp": 1666103317671, "version": 2, "chainId": 84, "sender": "3MxWgDbE9EmjQj8b3LfFwa91FZizptyeQXS", "senderPublicKey": "C7xgcYqQ8qV8rmvzAjhQWq4cz82F6VJfXMNygvrTXsfW", "proofs": [ "5ok3inTw1mx5aWJDiaKiLpn8LENUaD54tsUqRnoki5hne2iazVeRu3zrh58QfwRB4hztFD8KBXutsz8DoDUJe4sD", "XR3GD7EE3qLqK52cHVcQkVwLfJ2iAidyMWEy51pZDJf3AVWQBKwyQTiCN2naUtAKaZANKp5FPGD5ZfxATsTqmsb" ], "script": "base64:BgJmCAISBAoCEQESBQoDCAEBEgUKAwEEARIECgIRCBIDCgEBEgYKBAgIAQgSBAoCCAESAwoBERIECgIRARIFCgMBCAgSBAoCCAESBQoDCAEBEgASABIECgIRBBIECgIBARIAEgASABIAWAAJUFJFQ0lTSU9OAMCEPQAFTUFYX0EAwIQ9AAxNQVhfQV9DSEFOR0UACgAIREVDSU1BTFMABgANTUlOX1JBTVBfVElNRQkAaQIAgKMFADwAB3ZlcnNpb24CBTMuMC4wAAhrVmVyc2lvbgIHdmVyc2lvbgAHa0Fzc2V0cwIJYXNzZXRfaWRzAA1rQXNzZXRCYWxhbmNlAghfYmFsYW5jZQAHa0FjdGl2ZQIGYWN0aXZlAAZrQ2F1c2UCDnNodXRkb3duX2NhdXNlAA1rU2hhcmVBc3NldElkAg5zaGFyZV9hc3NldF9pZAARa1NoYXJlQXNzZXRTdXBwbHkCEnNoYXJlX2Fzc2V0X3N1cHBseQAEa0ZlZQIKY29tbWlzc2lvbgASa0RBcHBUaHJlc2hvbGRDb2VmAhFkQXBwVGhyZXNob2xkQ29lZgAMa1VTRE5BZGRyZXNzAhhzdGFraW5nX3VzZG5uc2J0X2FkZHJlc3MACmtEaXNjb3VudHMCCWRpc2NvdW50cwAPa0Rpc2NvdW50VmFsdWVzAg9kaXNjb3VudF92YWx1ZXMADmtVc2VyU3dvcEluR292AgxfU1dPUF9hbW91bnQAD2tVc2VyR1N3b3BJbkdvdgINX0dTd29wX2Ftb3VudAANa0FkbWluUHViS2V5MQILYWRtaW5fcHViXzEADWtBZG1pblB1YktleTICC2FkbWluX3B1Yl8yAA1rQWRtaW5QdWJLZXkzAgthZG1pbl9wdWJfMwASa0FkbWluSW52b2tlUHViS2V5AhBhZG1pbl9pbnZva2VfcHViABBrTW9uZXlCb3hBZGRyZXNzAhFtb25leV9ib3hfYWRkcmVzcwALa0dvdkFkZHJlc3MCEmdvdmVybmFuY2VfYWRkcmVzcwAOa1ZvdGluZ0FkZHJlc3MCDnZvdGluZ19hZGRyZXNzAA9rRmFybWluZ0FkZHJlc3MCD2Zhcm1pbmdfYWRkcmVzcwARa0xQRmFybWluZ0FkZHJlc3MCCmxwX2Zhcm1pbmcABm9yYWNsZQkBB0FkZHJlc3MBARoBVEgTlwzA0zPMJTKAtin3p2RogKvjzHtLmQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEDa2V5BAckbWF0Y2gwCQCdCAIFBm9yYWNsZQUDa2V5AwkAAQIFByRtYXRjaDACBlN0cmluZwQGc3RyaW5nBQckbWF0Y2gwCQDZBAEFBnN0cmluZwQHbm90aGluZwUHJG1hdGNoMAkAAgEJAKwCAgUDa2V5AghpcyBlbXB0eQAMYWRtaW5QdWJLZXkxCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDWtBZG1pblB1YktleTEADGFkbWluUHViS2V5MgkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQ1rQWRtaW5QdWJLZXkyAAxhZG1pblB1YktleTMJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUNa0FkbWluUHViS2V5MwARYWRtaW5QdWJLZXlJbnZva2UJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUSa0FkbWluSW52b2tlUHViS2V5AA9tb25leUJveEFkZHJlc3MJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBRBrTW9uZXlCb3hBZGRyZXNzAApnb3ZBZGRyZXNzCQEHQWRkcmVzcwEJARNnZXRCYXNlNThGcm9tT3JhY2xlAQULa0dvdkFkZHJlc3MAEnN0YWtpbmdVU0ROQWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDGtVU0ROQWRkcmVzcwANdm90aW5nQWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDmtWb3RpbmdBZGRyZXNzAA5mYXJtaW5nQWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFD2tGYXJtaW5nQWRkcmVzcwAQbHBGYXJtaW5nQWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFEWtMUEZhcm1pbmdBZGRyZXNzAARVU0ROASC2JinDBPXOU5GkDkt1JC9kjFGx+t+vVCm9SNIdKrKq0QANc3Rha2luZ0Fzc2V0cwkAzAgCCQDYBAEFBFVTRE4FA25pbAAGYWN0aXZlCQERQGV4dHJOYXRpdmUoMTA1MSkCBQR0aGlzBQdrQWN0aXZlAAxzaGFyZUFzc2V0SWQJANkEAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUNa1NoYXJlQXNzZXRJZAALc2hhcmVTdXBwbHkJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFEWtTaGFyZUFzc2V0U3VwcGx5AAlmZWVTY2FsZTYAwIQ9AANmZWUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFBGtGZWUADWZlZUdvdmVybmFuY2UJAGsDACgFCWZlZVNjYWxlNgBkAAlpbml0aWFsX0EJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCCWluaXRpYWxfQQAIZnV0dXJlX0EJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCCGZ1dHVyZV9BAA5pbml0aWFsX0FfdGltZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzAg5pbml0aWFsX0FfdGltZQAAAA1mdXR1cmVfQV90aW1lCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMCDWZ1dHVyZV9BX3RpbWUAAAAIYXNzZXRJZHMJALUJAgkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUHa0Fzc2V0cwIBLAAGbkNvaW5zCQCQAwEFCGFzc2V0SWRzAQdzdXNwZW5kAQVjYXVzZQkAzAgCCQEMQm9vbGVhbkVudHJ5AgUHa0FjdGl2ZQcJAMwIAgkBC1N0cmluZ0VudHJ5AgUGa0NhdXNlBQVjYXVzZQUDbmlsAQ10aHJvd0lzQWN0aXZlAAkAAgECFkRBcHAgaXMgYWxyZWFkeSBhY3RpdmUBCGlzQWN0aXZlAAMFBmFjdGl2ZQUEdW5pdAkAAgECH0RBcHAgaXMgaW5hY3RpdmUgYXQgdGhpcyBtb21lbnQBC2lzQWRtaW5DYWxsAQFpAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUMYWRtaW5QdWJLZXkxCQDMCAIFDGFkbWluUHViS2V5MgkAzAgCBQxhZG1pblB1YktleTMFA25pbAgFAWkPY2FsbGVyUHVibGljS2V5BQR1bml0CQACAQIhT25seSBhZG1pbiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uAQppc1NlbGZDYWxsAQFpAwkAAAIFBHRoaXMIBQFpBmNhbGxlcgUEdW5pdAkAAgECK09ubHkgY29udHJhY3QgaXRzZWxmIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24ABGJpZzIJALYCAQACAAZpdGVyMTAJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUJAMwIAgAGCQDMCAIABwkAzAgCAAgJAMwIAgAJBQNuaWwABml0ZXIxNQkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQkAzAgCAAYJAMwIAgAHCQDMCAIACAkAzAgCAAkJAMwIAgAKCQDMCAIACwkAzAgCAAwJAMwIAgANCQDMCAIADgUDbmlsAAZpdGVyMTYJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUJAMwIAgAGCQDMCAIABwkAzAgCAAgJAMwIAgAJCQDMCAIACgkAzAgCAAsJAMwIAgAMCQDMCAIADQkAzAgCAA4JAMwIAgAPBQNuaWwADmJsb2NrVGltZXN0YW1wBQZoZWlnaHQBBmFzc2VydAEBYQMFAWEHBgEUY2FsY3VsYXRlRmVlRGlzY291bnQBCHVzZXJBZGRyBAR1c2VyBAckbWF0Y2gwBQh1c2VyQWRkcgMJAAECBQckbWF0Y2gwAgdBZGRyZXNzBAF1BQckbWF0Y2gwCQClCAEFAXUDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAF1BQckbWF0Y2gwBQF1CQACAQIYVW5rbm93IHR5cGUgb2YgdXNlciBBZGRyBApzd29wQW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFCmdvdkFkZHJlc3MJAKwCAgUEdXNlcgUPa1VzZXJHU3dvcEluR292AAAEC2dTd29wQW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFCmdvdkFkZHJlc3MJAKwCAgUEdXNlcgUPa1VzZXJHU3dvcEluR292BQpzd29wQW1vdW50BA5kaXNjb3VudFZhbHVlcwkAtQkCCQERQGV4dHJOYXRpdmUoMTA1MykCBQZvcmFjbGUFD2tEaXNjb3VudFZhbHVlcwIBLAQJZGlzY291bnRzCQC1CQIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBm9yYWNsZQUKa0Rpc2NvdW50cwIBLAMDCQBnAgULZ1N3b3BBbW91bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwAACQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmRpc2NvdW50VmFsdWVzAAEFC2dTd29wQW1vdW50BwkAZQIFCWZlZVNjYWxlNgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWRpc2NvdW50cwAAAwMJAGcCBQtnU3dvcEFtb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmRpc2NvdW50VmFsdWVzAAEJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMAAgULZ1N3b3BBbW91bnQHCQBlAgUJZmVlU2NhbGU2CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJZGlzY291bnRzAAEDAwkAZwIFC2dTd29wQW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMAAgkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwADBQtnU3dvcEFtb3VudAcJAGUCBQlmZWVTY2FsZTYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQlkaXNjb3VudHMAAgMDCQBnAgULZ1N3b3BBbW91bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwADCQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmRpc2NvdW50VmFsdWVzAAQFC2dTd29wQW1vdW50BwkAZQIFCWZlZVNjYWxlNgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWRpc2NvdW50cwADAwkAZwIFC2dTd29wQW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMABAkAZQIFCWZlZVNjYWxlNgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWRpc2NvdW50cwAEBQlmZWVTY2FsZTYBAl9BAAQCdDEFDWZ1dHVyZV9BX3RpbWUEAkExBQhmdXR1cmVfQQMJAGYCBQJ0MQUOYmxvY2tUaW1lc3RhbXAEAkEwBQlpbml0aWFsX0EEAnQwBQ5pbml0aWFsX0FfdGltZQMJAGYCBQJBMQUCQTAJAGQCBQJB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MTAxNDYCXzIEDHhwX3JlZHVjZWRfaQkAkQMCBQp4cF9yZWR1Y2VkBQFpBAJkeQkAZQIJAGUCBQx4cF9yZWR1Y2VkX2kJAQdnZXRfeV9EBAUDYW1wBQFpBQp4cF9yZWR1Y2VkBQJEMQABCQCUCgIFAmR5CQBlAgUEZHlfMAUCZHkBDWdldFN0ckFzc2V0SWQBB2Fzc2V0SWQEByRtYXRjaDAFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQCaWQFByRtYXRjaDAJANgEAQUCaWQDCQABAgUHJG1hdGNoMAIEVW5pdAQFd2F2ZXMFByRtYXRjaDACBVdBVkVTCQACAQILTWF0Y2ggZXJyb3IBGGNhbGNTdGFraW5nRnVuY0FuZEFkZHJlcwIFc3Rha2UHYXNzZXRJZAMFBXN0YWtlCQCUCgICDGxvY2tOZXV0cmlubwUSc3Rha2luZ1VTRE5BZGRyZXNzCQCUCgICDnVubG9ja05ldXRyaW5vBRJzdGFraW5nVVNETkFkZHJlc3MBEWNhbGNTdGFraW5nUGFyYW1zAwVzdGFrZQZhbW91bnQHYXNzZXRJZAMFBXN0YWtlBA0kdDAxMDcxMDEwNzc2CQEYY2FsY1N0YWtpbmdGdW5jQW5kQWRkcmVzAgUFc3Rha2UFB2Fzc2V0SWQEBGNhbGwIBQ0kdDAxMDcxMDEwNzc2Al8xBAtzdGFraW5nQWRkcggFDSR0MDEwNzEwMTA3NzYCXzIJAJYKBAUEY2FsbAULc3Rha2luZ0FkZHIFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUHYXNzZXRJZAUGYW1vdW50BQNuaWwEDSR0MDEwODYyMTA5MjgJARhjYWxjU3Rha2luZ0Z1bmNBbmRBZGRyZXMCBQVzdGFrZQUHYXNzZXRJZAQEY2FsbAgFDSR0MDEwODYyMTA5MjgCXzEEC3N0YWtpbmdBZGRyCAUNJHQwMTA4NjIxMDkyOAJfMgkAlgoEBQRjYWxsBQtzdGFraW5nQWRkcgkAzAgCBQZhbW91bnQJAMwIAgkA2AQBBQdhc3NldElkBQNuaWwFA25pbAEFc3Rha2UCBmFtb3VudA1hc3NldElkU3RyaW5nAwkBD2NvbnRhaW5zRWxlbWVudAIFDXN0YWtpbmdBc3NldHMFDWFzc2V0SWRTdHJpbmcEDSR0MDExMTE1MTEyMTcJARFjYWxjU3Rha2luZ1BhcmFtcwMGBQZhbW91bnQJANkEAQUNYXNzZXRJZFN0cmluZwQEY2FsbAgFDSR0MDExMTE1MTEyMTcCXzEEBGFkZHIIBQ0kdDAxMTExNTExMjE3Al8yBAZwYXJhbXMIBQ0kdDAxMTExNTExMjE3Al8zBAhwYXltZW50cwgFDSR0MDExMTE1MTEyMTcCXzQJAPwHBAUEYWRkcgUEY2FsbAUGcGFyYW1zBQhwYXltZW50cwAAAQd1bnN0YWtlAgZhbW91bnQNYXNzZXRJZFN0cmluZwMJAQ9jb250YWluc0VsZW1lbnQCBQ1zdGFraW5nQXNzZXRzBQ1hc3NldElkU3RyaW5nBA0kdDAxMTQwMjExNTA1CQERY2FsY1N0YWtpbmdQYXJhbXMDBwUGYW1vdW50CQDZBAEFDWFzc2V0SWRTdHJpbmcEBGNhbGwIBQ0kdDAxMTQwMjExNTA1Al8xBARhZGRyCAUNJHQwMTE0MDIxMTUwNQJfMgQGcGFyYW1zCAUNJHQwMTE0MDIxMTUwNQJfMwQIcGF5bWVudHMIBQ0kdDAxMTQwMjExNTA1Al80CQD8BwQFBGFkZHIFBGNhbGwFBnBhcmFtcwUIcGF5bWVudHMAAAEMc3Rha2VkQW1vdW50AQdhc3NldElkBBZzdGFrZWRBbW91bnRDYWxjdWxhdGVkBAckbWF0Y2gwBQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEA2FJZAUHJG1hdGNoMAMJAAACBQNhSWQFBFVTRE4JAJoIAgUSc3Rha2luZ1VTRE5BZGRyZXNzCQCsAgIJAKwCAgkArAICAgxycGRfYmFsYW5jZV8JANgEAQUDYUlkAgFfCQClCAEFBHRoaXMAAAMJAAECBQckbWF0Y2gwAgRVbml0AAAJAAIBAgtNYXRjaCBlcnJvcgQHJG1hdGNoMAUWc3Rha2VkQW1vdW50Q2FsY3VsYXRlZAMJAAECBQckbWF0Y2gwAgNJbnQEAWkFByRtYXRjaDAFAWkAAAEPY2hlY2tTdXNwaWNpb3VzAAQQY29udHJhY3RCYWxhbmNlcwkBA194cAAKAQxjaGVja0JhbGFuY2UCA2FjYwdhc3NldElkBA0kdDAxMjExNjEyMTQxBQNhY2MECnN1c3BpY2lvdXMIBQ0kdDAxMjExNjEyMTQxAl8xBAFpCAUNJHQwMTIxMTYxMjE0MQJfMgMFCnN1c3BpY2lvdXMJAJQKAgUKc3VzcGljaW91cwUBaQQIYUJhbGFuY2UJAGQCCQDwBwIFBHRoaXMJANkEAQUHYXNzZXRJZAkBDHN0YWtlZEFtb3VudAEJANkEAQUHYXNzZXRJZAMJAGYCCQCRAwIFEGNvbnRyYWN0QmFsYW5jZXMFAWkFCGFCYWxhbmNlCQCUCgIGBQFpCQCUCgIHCQBkAgUBaQABCgACJGwFCGFzc2V0SWRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBwAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQxjaGVja0JhbGFuY2UCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoBEXN1c3BlbmRTdXNwaWNpb3VzAQFpCQEHc3VzcGVuZAEJAKwCAgIdU3VzcGljaW91cyBzdGF0ZSB3aXRoIGFzc2V0OiAJAJEDAgUIYXNzZXRJZHMFAWkBDnJldHVyblBheW1lbnRzAgZjYWxsZXIIcGF5bWVudHMKAQ1wYXJzZVBheW1lbnRzAgNhY2MHcGF5bWVudAkAzQgCBQNhY2MJAQ5TY3JpcHRUcmFuc2ZlcgMFBmNhbGxlcggFB3BheW1lbnQGYW1vdW50CAUHcGF5bWVudAdhc3NldElkCgACJGwFCHBheW1lbnRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQ1wYXJzZVBheW1lbnRzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKARJjaGVja0RBcHBUaHJlc2hvbGQBC25ld0JhbGFuY2VzBBFkQXBwVGhyZXNob2xkQ29lZgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFBHRoaXMFEmtEQXBwVGhyZXNob2xkQ29lZgIYTm8gZEFwcFRocmVzaG9sZENvZWYga2V5BA50aHJlc2hvbGRTY2FsZQCQTgQKbWF4QmFsYW5jZQkAlgMBBQtuZXdCYWxhbmNlcwQKbWluQmFsYW5jZQkAlwMBBQtuZXdCYWxhbmNlcwQFcmF0aW8JAGsDBQptYXhCYWxhbmNlBQ50aHJlc2hvbGRTY2FsZQUKbWluQmFsYW5jZQMJAGYCBQVyYXRpbwkAaAIFEWRBcHBUaHJlc2hvbGRDb2VmBQ50aHJlc2hvbGRTY2FsZQkAAgECOE5ldyBiYWxhbmNlIGluIGFzc2V0cyBvZiB0aGUgREFwcCBpcyBsZXNzIHRoYW4gdGhyZXNob2xkBwEKY2hlY2tDb2lucwEIYXNzZXRJZHMEBWNvaW5zCQC1CQIFCGFzc2V0SWRzAgEsAwkAZgIJAJADAQUFY29pbnMACgkAAgECIFRvIG1hbnkgY29pbnMsIG1heCBjb2lucyBzaXplIDEwCgEJY2hlY2tDb2luAgVlcnJvcgdhc3NldElkBAVhc3NldAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDZBAEFB2Fzc2V0SWQJAKwCAgISZnJvbUJhc2U1OFN0cmluZzogBQdhc3NldElkBAhkZWNpbWFscwgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBBQVhc3NldAkArAICAgthc3NldEluZm86IAUHYXNzZXRJZAhkZWNpbWFscwMJAQIhPQIFCGRlY2ltYWxzBQhERUNJTUFMUwkAAgECDndyb25nIGRlY2ltYWxzBwoAAiRsBQVjb2lucwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAHCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQljaGVja0NvaW4CBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoUA21zZwEBRAICeHADYW1wBAFECQEOZ2V0X0RfaW50ZXJuYWwCBQJ4cAUDYW1wCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQICAUQFAUQFA25pbAUBRANtc2cBBGluaXQDCGFzc2V0SWRzAl9BEl9kQXBwVGhyZXNob2xkQ29lZgMJAQEhAQkAnggBBQR0aGlzCQACAQITQWxyZWFkeSBpbml0aWFsaXplZAMJAGcCAAAFAl9BCQACAQIUQW1wIG11c3QgYmUgbXVzdCA+IDADCQBnAgAABRJfZEFwcFRocmVzaG9sZENvZWYJAAIBAh9kQXBwIFRocmVzaG9sZCBDb2VmIG11c3QgYmUgPiAwBAlzaGFyZU5hbWUCC3NfTXVsdGlfVVNEBBBzaGFyZURlc2NyaXB0aW9uCQCsAgICQlNoYXJlVG9rZW4gb2YgU3dvcEZpIHByb3RvY29sIGZvciBNdWx0aVN0YWJsZSBVU0QgcG9vbCBhdCBhZGRyZXNzIAkApQgBBQR0aGlzBAppc3N1ZVRva2VuCQDCCAUFCXNoYXJlTmFtZQUQc2hhcmVEZXNjcmlwdGlvbgAAAAYGBAd0b2tlbklkCQC4CAEFCmlzc3VlVG9rZW4DCQEKY2hlY2tDb2lucwEFCGFzc2V0SWRzCQEFdGhyb3cACQDMCAIJAQtTdHJpbmdFbnRyeQIFCGtWZXJzaW9uBQd2ZXJzaW9uCQDMCAIJAQtTdHJpbmdFbnRyeQIFB2tBc3NldHMFCGFzc2V0SWRzCQDMCAIJAQxJbnRlZ2VyRW50cnkCAglpbml0aWFsX0EFAl9BCQDMCAIJAQxJbnRlZ2VyRW50cnkCAghmdXR1cmVfQQUCX0EJAMwIAgkBDEludGVnZXJFbnRyeQIFBGtGZWUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBm9yYWNsZQINYmFzZV9mZWVfZmxhdAkAzAgCCQELU3RyaW5nRW50cnkCBQ1rU2hhcmVBc3NldElkCQDYBAEFB3Rva2VuSWQJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtTaGFyZUFzc2V0U3VwcGx5AAAJAMwIAgkBDEludGVnZXJFbnRyeQIFEmtEQXBwVGhyZXNob2xkQ29lZgUSX2RBcHBUaHJlc2hvbGRDb2VmCQDMCAIJAQxCb29sZWFuRW50cnkCBQdrQWN0aXZlBgkAzAgCBQppc3N1ZVRva2VuBQNuaWwDbXNnAQxhZGRMaXF1aWRpdHkDDW1pbk1pbnRBbW91bnQMc3Rha2VGYXJtaW5nCGxvY2tUeXBlCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUABANhbXAJAQJfQQAEAnhwCQEDX3hwAAQCRDADCQAAAgULc2hhcmVTdXBwbHkAAAAACQEHZ2V0RE1lbQIFAnhwBQNhbXAECHBheW1lbnRzCAUDbXNnCHBheW1lbnRzBAxwYXltZW50c1NpemUJAJADAQUIcGF5bWVudHMKAQ12YWxpZFBheW1lbnRzAQFuAwkAZgIFDHBheW1lbnRzU2l6ZQUGbkNvaW5zCQACAQkArAICAhBwYXltZW50cyBzaXplID4gCQCkAwEFBm5Db2lucwMJAGYCAAEFDHBheW1lbnRzU2l6ZQkAAgECEXBheW1lbnRzIHNpemUgPCAxAwMJAAACBQtzaGFyZVN1cHBseQAACQECIT0CBQZuQ29pbnMFDHBheW1lbnRzU2l6ZQcJAAIBAiJpbml0aWFsIGRlcG9zaXQgcmVxdWlyZXMgYWxsIGNvaW5zCgEMcGF5bWFudFZhbGlkAgNhY2MHcGF5bWVudAMJAQ9jb250YWluc0VsZW1lbnQCBQhhc3NldElkcwkBDWdldFN0ckFzc2V0SWQBCAUHcGF5bWVudAdhc3NldElkBgkAAgECGEludmFsaWQgYXNzZXQgaW4gcGF5bWVudAoAAiRsBQhwYXltZW50cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAHCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQxwYXltYW50VmFsaWQC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ZW5jZQMJAGYCBQxpZGVhbEJhbGFuY2UFCm5ld0JhbGFuY2UJAGUCBQxpZGVhbEJhbGFuY2UFCm5ld0JhbGFuY2UJAGUCBQpuZXdCYWxhbmNlBQxpZGVhbEJhbGFuY2UJAGsDBQRfZmVlBQpkaWZmZXJlbmNlBQlmZWVTY2FsZTYEDmdvdmVybmFuY2VGZWVzCQBrAwUEZmVlcwUNZmVlR292ZXJuYW5jZQUJZmVlU2NhbGU2BAxmaW5hbEJhbGFuY2UJAGUCBQpuZXdCYWxhbmNlBQRmZWVzBBBpbnZhcmlhbnRCYWxhbmNlCQBlAgUKbmV3QmFsYW5jZQUEZmVlcwQDcG10CQBlAgUKbmV3QmFsYW5jZQkAkQMCBQJ4cAUBaQQGbHBGZWVzCQBlAgUEZmVlcwUOZ292ZXJuYW5jZUZlZXMEA2ludgMJAGYCBQNwbXQAAAkBBXN0YWtlAgkAZQIFA3BtdAUEZmVlcwkAkQMCBQhhc3NldElkcwUBaQkBB3Vuc3Rha2UCBQRmZWVzCQCRAwIFCGFzc2V0SWRzBQFpAwkAAAIFA2ludgUDaW52BAdhaXJkcm9wAwkAZgIFBmxwRmVlcwAACQD8BwQFEGxwRmFybWluZ0FkZHJlc3MCB2FpckRyb3AFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkA2QQBCQCRAwIFCGFzc2V0SWRzBQFpBQZscEZlZXMFA25pbAAAAwkAAAIFB2FpcmRyb3AFB2FpcmRyb3AJAJUKAwkAzQgCBQtpbnZCYWxhbmNlcwUQaW52YXJpYW50QmFsYW5jZQkAzggCBQ1zY3JpcHRBY3Rpb25zCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFD21vbmV5Qm94QWRkcmVzcwUOZ292ZXJuYW5jZUZlZXMJANkEAQkAkQMCBQhhc3NldElkcwUBaQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCRAwIFCGFzc2V0SWRzBQFpBQ1rQXNzZXRCYWxhbmNlBQxmaW5hbEJhbGFuY2UFA25pbAkAZAIFAWkAAQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQDaW52CQEFc3Rha2UCBQpuZXdCYWxhbmNlCQCRAwIFCGFzc2V0SWRzBQFpAwkAAAIFA2ludgUDaW52CQCVCgMJAM0IAgULaW52QmFsYW5jZXMFCm5ld0JhbGFuY2UJAM0IAgUNc2NyaXB0QWN0aW9ucwkBDEludGVnZXJFbnRyeQIJAKwCAgkAkQMCBQhhc3NldElkcwUBaQUNa0Fzc2V0QmFsYW5jZQUKbmV3QmFsYW5jZQkAZAIFAWkAAQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQNJHQwMTg3NTYxODg0NAoAAiRsBQtuZXdCYWxhbmNlcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJUKAwUDbmlsBQNuaWwAAAoBBSRmMV8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQERY2FsY1NjcmlwdEFjdGlvbnMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjFfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYxXzICCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoEC2ludkJhbGFuY2VzCAUNJHQwMTg3NTYxODg0NAJfMQQNc2NyaXB0QWN0aW9ucwgFDSR0MDE4NzU2MTg4NDQCXzIEAkQyCQEHZ2V0RE1lbQIFC2ludkJhbGFuY2VzBQNhbXAEC21pbnRfYW1vdW50AwkAAAIFC3NoYXJlU3VwcGx5AAAFAkQxCQBrAwULc2hhcmVTdXBwbHkJAGUCBQJEMgUCRDAFAkQwAwkBBmFzc2VydAEJAGcCBQttaW50X2Ftb3VudAUNbWluTWludEFtb3VudAkAAgECFFNsaXBwYWdlIHNjcmV3ZWQgeW91AwUMc3Rha2VGYXJtaW5nBAJyZQkA/AcEBQR0aGlzAgxyZWlzc3VlU2hhcmUJAMwIAgULbWludF9hbW91bnQFA25pbAUDbmlsAwkAAAIFAnJlBQJyZQQBcwkA/AcEBQ5mYXJtaW5nQWRkcmVzcwIPbG9ja1NoYXJlVG9rZW5zCQDMCAIJAKUIAQUEdGhpcwkAzAgCBQhsb2NrVHlwZQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQxzaGFyZUFzc2V0SWQFC21pbnRfYW1vdW50BQNuaWwDCQAAAgUBcwUBcwkAzQgCBQ1zY3JpcHRBY3Rpb25zCQEMSW50ZWdlckVudHJ5AgURa1NoYXJlQXNzZXRTdXBwbHkJAGQCBQtzaGFyZVN1cHBseQULbWludF9hbW91bnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAM4IAgUNc2NyaXB0QWN0aW9ucwkAzAgCCQEHUmVpc3N1ZQMFDHNoYXJlQXNzZXRJZAULbWludF9hbW91bnQGCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQNtc2cGY2FsbGVyBQttaW50X2Ftb3VudAUMc2hhcmVBc3NldElkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrU2hhcmVBc3NldFN1cHBseQkAZAIFC3NoYXJlU3VwcGx5BQttaW50X2Ftb3VudAUDbmlsA21zZwEOY2FsY01pbnRBbW91bnQCC25ld0JhbGFuY2VzBHVzZXIEA2FtcAkBAl9BAAQCeHAJAQNfeHAABAJEMQkBB2dldERNZW0CBQtuZXdCYWxhbmNlcwUDYW1wAwkAAAIFC3NoYXJlU3VwcGx5AAAJAJQKAgUDbmlsBQJEMQQCRDAJAQdnZXRETWVtAgUCeHAFA2FtcAQLZmVlRGlzY291bnQJARRjYWxjdWxhdGVGZWVEaXNjb3VudAEFBHVzZXIKAQ9jYWxjSW52QmFsYW5jZXMCA2FjYwpuZXdCYWxhbmNlBA0kdDAyMDA4MzIwMTA5BQNhY2MEC2ludkJhbGFuY2VzCAUNJHQwMjAwODMyMDEwOQJfMQQBaQgFDSR0MDIwMDgzMjAxMDkCXzIEBF9mZWUJAGkCCQBoAgkAbgQFA2ZlZQULZmVlRGlzY291bnQFCWZlZVNjYWxlNgUHQ0VJTElORwUGbkNvaW5zCQBoAgAECQBlAgUGbkNvaW5zAAEEBGZlZXMEDGlkZWFsQmFsYW5jZQkAawMFAkQxCQCRAwIFAnhwBQFpBQJEMAQKZGlmZmVyZW5jZQMJAGYCBQxpZGVhbEJhbGFuY2UFCm5ld0JhbGFuY2UJAGUCBQxpZGVhbEJhbGFuY2UFCm5ld0JhbGFuY2UJAGUCBQpuZXdCYWxhbmNlBQxpZGVhbEJhbGFuY2UJAGsDBQRfZmVlBQpkaWZmZXJlbmNlBQlmZWVTY2FsZTYEEGludmFyaWFudEJhbGFuY2UJAGUCBQpuZXdCYWxhbmNlBQRmZWVzCQCUCgIJAM0IAgULaW52QmFsYW5jZXMFEGludmFyaWFudEJhbGFuY2UJAGQCBQFpAAEEDSR0MDIwNzExMjA3ODEKAAIkbAULbmV3QmFsYW5jZXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIFA25pbAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQ9jYWxjSW52QmFsYW5jZXMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoEC2ludkJhbGFuY2VzCAUNJHQwMjA3MTEyMDc4MQJfMQQBawgFDSR0MDIwNzExMjA3ODECXzIEAkQyCQEHZ2V0RE1lbQIFC2ludkJhbGFuY2VzBQNhbXAECm1pbnRBbW91bnQJAGsDBQtzaGFyZVN1cHBseQkAZQIFAkQyBQJEMAUCRDAJAJQKAgUDbmlsBQptaW50QW1vdW50A21zZwEMcmVpc3N1ZVNoYXJlAQZhbW91bnQJAQt2YWx1ZU9yRWxzZQIJAQppc1NlbGZDYWxsAQUDbXNnCQDMCAIJAQdSZWlzc3VlAwUMc2hhcmVBc3NldElkBQZhbW91bnQGBQNuaWwDbXNnAQVnZXREeQQJYXNzZXRGcm9tB2Fzc2V0VG8CZHgLdXNlckFkZHJlc3MEAnhwCQEDX3hwAAQJZnJvbUluZGV4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAM8IAgUIYXNzZXRJZHMFCWFzc2V0RnJvbQIQdW5rbm93biB0b2tlbiBpbgQHdG9JbmRleAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDPCAIFCGFzc2V0SWRzBQdhc3NldFRvAhF1bmtub3duIHRva2VuIG91dAQBeAkAZAIJAJEDAgUCeHAFCWZyb21JbmRleAUCZHgEAXkJAQRnZXRZBAUJZnJvbUluZGV4BQd0b0luZGV4BQF4BQJ4cAQCZHkJAGUCCQBlAgkAkQMCBQJ4cAUHdG9JbmRleAUBeQABBAtmZWVEaXNjb3VudAkBFGNhbGN1bGF0ZUZlZURpc2NvdW50AQkBB0FkZHJlc3MBCQDZBAEFC3VzZXJBZGRyZXNzBARfZmVlCQBrAwkAbgQFA2ZlZQULZmVlRGlzY291bnQFCWZlZVNjYWxlNgUHQ0VJTElORwUCZHkFCWZlZVNjYWxlNgkAlAoCBQNuaWwJAJQKAgkAZQIFAmR5BQRfZmVlBQRfZmVlA21zZwEIZXhjaGFuZ2UCCHRva2VuT3V0Bm1pbl9keQkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAMJAQIhPQIJAJADAQgFA21zZwhwYXltZW50cwABCQACAQITc2l6ZShwYXltZW50cykgIT0gMQQKc3VzcGljaW91cwkBD2NoZWNrU3VzcGljaW91cwADCAUKc3VzcGljaW91cwJfMQkAzggCCQERc3VzcGVuZFN1c3BpY2lvdXMBCAUKc3VzcGljaW91cwJfMgkBDnJldHVyblBheW1lbnRzAggFA21zZwZjYWxsZXIIBQNtc2cIcGF5bWVudHMEB3BheW1lbnQJAJEDAggFA21zZwhwYXltZW50cwAABAd0b2tlbkluCQENZ2V0U3RyQXNzZXRJZAEIBQdwYXltZW50B2Fzc2V0SWQEC3Rva2VuT3V0QjU4CQDZBAEFCHRva2VuT3V0BAJkeAgFB3BheW1lbnQGYW1vdW50BAlmcm9tSW5kZXgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAzwgCBQhhc3NldElkcwUHdG9rZW5JbgIQdW5rbm93biB0b2tlbiBpbgQHdG9JbmRleAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDPCAIFCGFzc2V0SWRzBQh0b2tlbk91dAIRdW5rbm93biB0b2tlbiBvdXQEAnhwCQEDX3hwAAQBeAkAZAIJAJEDAgUCeHAFCWZyb21JbmRleAUCZHgEAXkJAQRnZXRZBAUJZnJvbUluZGV4BQd0b0luZGV4BQF4BQJ4cAQDX2R5CQBlAgkAZQIJAJEDAgUCeHAFB3RvSW5kZXgFAXkAAQQLZmVlRGlzY291bnQJARRjYWxjdWxhdGVGZWVEaXNjb3VudAEIBQNtc2cMb3JpZ2luQ2FsbGVyBARfZmVlCQBrAwUDX2R5CQBuBAUDZmVlBQtmZWVEaXNjb3VudAUJZmVlU2NhbGU2BQdDRUlMSU5HBQlmZWVTY2FsZTYEAmR5CQBlAgUDX2R5BQRfZmVlBA5nb3Zlcm5hbmNlRmVlcwkAawMFBF9mZWUFDWZlZUdvdmVybmFuY2UFCWZlZVNjYWxlNgMJAQZhc3NlcnQBCQBnAgUCZHkFBm1pbl9keQkAAgECLkV4Y2hhbmdlIHJlc3VsdGVkIGluIGZld2VyIGNvaW5zIHRoYW4gZXhwZWN0ZWQKAQ9tYWtlTmV3QmFsYW5jZXMCA2FjYwx0b2tlbkJhbGFuY2UEDSR0MDIyODIyMjI4NDgFA2FjYwQLbmV3QmFsYW5jZXMIBQ0kdDAyMjgyMjIyODQ4Al8xBAFpCAUNJHQwMjI4MjIyMjg0OAJfMgMJAAACBQFpBQlmcm9tSW5kZXgJAJQKAgkAzQgCBQtuZXdCYWxhbmNlcwkAZAIFDHRva2VuQmFsYW5jZQUCZHgJAGQCBQFpAAEDCQAAAgUBaQUHdG9JbmRleAkAlAoCCQDNCAIFC25ld0JhbGFuY2VzCQBlAgUMdG9rZW5CYWxhbmNlBQNfZHkJAGQCBQFpAAEJAJQKAgkAzQgCBQtuZXdCYWxhbmNlcwUMdG9rZW5CYWxhbmNlCQBkAgUBaQABBA0kdDAyMzA5OTIzMTYwCgACJGwFAnhwCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEPbWFrZU5ld0JhbGFuY2VzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKBAtuZXdCYWxhbmNlcwgFDSR0MDIzMDk5MjMxNjACXzEEAWkIBQ0kdDAyMzA5OTIzMTYwAl8yAwkBEmNoZWNrREFwcFRocmVzaG9sZAEFC25ld0JhbGFuY2VzCQEFdGhyb3cABAFzCQEFc3Rha2UCCAUHcGF5bWVudAZhbW91bnQJAQ1nZXRTdHJBc3NldElkAQgFB3BheW1lbnQHYXNzZXRJZAMJAAACBQFzBQFzBAJ1cwkBB3Vuc3Rha2UCBQNfZHkFCHRva2VuT3V0AwkAAAIFAnVzBQJ1cwQGbHBGZWVzCQBlAgUEX2ZlZQUOZ292ZXJuYW5jZUZlZXMEB2FpcmRyb3ADCQBmAgUGbHBGZWVzAAAJAPwHBAUQbHBGYXJtaW5nQWRkcmVzcwIHYWlyRHJvcAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQt0b2tlbk91dEI1OAUGbHBGZWVzBQNuaWwAAAMJAAACBQdhaXJkcm9wBQdhaXJkcm9wCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUHdG9rZW5JbgUNa0Fzc2V0QmFsYW5jZQUBeAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQh0b2tlbk91dAUNa0Fzc2V0QmFsYW5jZQkAZQIJAJEDAgUCeHAFB3RvSW5kZXgFA19keQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUDbXNnBmNhbGxlcgUCZHkFC3Rva2VuT3V0QjU4CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFD21vbmV5Qm94QWRkcmVzcwUOZ292ZXJuYW5jZUZlZXMFC3Rva2VuT3V0QjU4BQNuaWwJAMwIAgUCZHkJAMwIAgULdG9rZW5PdXRCNTgFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgNtc2cBCHdpdGhkcmF3AQptaW5BbW91bnRzCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUAAwkBAiE9AgkAkAMBCAUDbXNnCHBheW1lbnRzAAEJAAIBAhNzaXplKHBheW1lbnRzKSAhPSAxBAlwbXRBbW91bnQICQCRAwIIBQNtc2cIcGF5bWVudHMAAAZhbW91bnQECnBtdEFzc2V0SWQICQCRAwIIBQNtc2cIcGF5bWVudHMAAAdhc3NldElkAwkBAiE9AgUMc2hhcmVBc3NldElkBQpwbXRBc3NldElkCQACAQIVdW5rbm93biBwYXltZW50IHRva2VuBApzdXNwaWNpb3VzCQEPY2hlY2tTdXNwaWNpb3VzAAMIBQpzdXNwaWNpb3VzAl8xCQDOCAIJARFzdXNwZW5kU3VzcGljaW91cwEIBQpzdXNwaWNpb3VzAl8yCQEOcmV0dXJuUGF5bWVudHMCCAUDbXNnDG9yaWdpbkNhbGxlcggFA21zZwhwYXltZW50cwoBEWNhbGNTY3JpcHRBY3Rpb25zAgNhY2MHYmFsYW5jZQQNJHQwMjQ0NTEyNDQ3OQUDYWNjBA1zY3JpcHRBY3Rpb25zCAUNJHQwMjQ0NTEyNDQ3OQJfMQQBaQgFDSR0MDI0NDUxMjQ0NzkCXzIEB3dBbW91bnQJAGsDBQdiYWxhbmNlBQlwbXRBbW91bnQFC3NoYXJlU3VwcGx5AwkBBmFzc2VydAEJAGcCBQd3QW1vdW50CQCRAwIFCm1pbkFtb3VudHMFAWkJAAIBAjBXaXRoZHJhd2FsIHJlc3VsdGVkIGluIGZld2VyIGNvaW5zIHRoYW4gZXhwZWN0ZWQEAnVzCQEHdW5zdGFrZQIFB3dBbW91bnQJAJEDAgUIYXNzZXRJZHMFAWkDCQAAAgUCdXMFAnVzCQCUCgIJAM4IAgUNc2NyaXB0QWN0aW9ucwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCRAwIFCGFzc2V0SWRzBQFpBQ1rQXNzZXRCYWxhbmNlCQBlAgUHYmFsYW5jZQUHd0Ftb3VudAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUDbXNnDG9yaWdpbkNhbGxlcgUHd0Ftb3VudAkA2QQBCQCRAwIFCGFzc2V0SWRzBQFpBQNuaWwJAGQCBQFpAAEJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4EDSR0MDI0OTY5MjUwMzcKAAIkbAkBA194cAAKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIFA25pbAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJARFjYWxjU2NyaXB0QWN0aW9ucwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgQNc2NyaXB0QWN0aW9ucwgFDSR0MDI0OTY5MjUwMzcCXzEEAWkIBQ0kdDAyNDk2OTI1MDM3Al8yCQDOCAIFDXNjcmlwdEFjdGlvbnMJAMwIAgkBBEJ1cm4CBQxzaGFyZUFzc2V0SWQFCXBtdEFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgURa1NoYXJlQXNzZXRTdXBwbHkJAGUCBQtzaGFyZVN1cHBseQUJcG10QW1vdW50BQNuaWwDbXNnARJ3aXRoZHJhd1dpdGhVbmxvY2sCCm1pbkFtb3VudHMMdW5sb2NrQW1vdW50CQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUAAwkAZwIAAAUMdW5sb2NrQW1vdW50CQACAQIeVW5sb2NrIGFtb3VudCBtdXN0IGJlIHBvc2l0aXZlBApzdXNwaWNpb3VzCQEPY2hlY2tTdXNwaWNpb3VzAAMIBQpzdXNwaWNpb3VzAl8xCQDOCAIJARFzdXNwZW5kU3VzcGljaW91cwEIBQpzdXNwaWNpb3VzAl8yCQEOcmV0dXJuUGF5bWVudHMCCAUDbXNnBmNhbGxlcggFA21zZwhwYXltZW50cwQJcG10QW1vdW50AwkAZgIJAJADAQgFA21zZwhwYXltZW50cwAAAwkBAiE9AgkAkAMBCAUDbXNnCHBheW1lbnRzAAEJAAIBAhNzaXplKHBheW1lbnRzKSAhPSAxBApwbXRBc3NldElkCAkAkQMCCAUDbXNnCHBheW1lbnRzAAAHYXNzZXRJZAMJAQIhPQIFDHNoYXJlQXNzZXRJZAUKcG10QXNzZXRJZAkAAgECFXVua25vd24gcGF5bWVudCB0b2tlbggJAJEDAggFA21zZwhwYXltZW50cwAABmFtb3VudAAABAZ1bmxvY2sJAPwHBAUOZmFybWluZ0FkZHJlc3MCE3dpdGhkcmF3U2hhcmVUb2tlbnMJAMwIAgkApQgBBQR0aGlzCQDMCAIFDHVubG9ja0Ftb3VudAUDbmlsBQNuaWwDCQAAAgUGdW5sb2NrBQZ1bmxvY2sEDndpdGhkcmF3QW1vdW50CQBkAgUJcG10QW1vdW50BQx1bmxvY2tBbW91bnQEA2ludgkA/AcEBQR0aGlzAgh3aXRoZHJhdwkAzAgCBQptaW5BbW91bnRzBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFDHNoYXJlQXNzZXRJZAUOd2l0aGRyYXdBbW91bnQFA25pbAMJAAACBQNpbnYFA2ludgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuA21zZwETY2FsY1dpdGhkcmF3T25lQ29pbgMLdG9rZW5BbW91bnQIdG9rZW5PdXQEdXNlcgMJAGcCAAAFC3Rva2VuQW1vdW50CQACAQIXQW1vdW50IG11c3QgYmUgcG9zaXRpdmUEAWkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAzwgCBQhhc3NldElkcwUIdG9rZW5PdXQCEXVua25vd24gdG9rZW4gb3V0CQCUCgIFA25pbAgJARRfY2FsY1dpdGhkcmF3T25lQ29pbgQJAQNfeHAABQt0b2tlbkFtb3VudAUBaQkBB0FkZHJlc3MBCQDZBAEFBHVzZXICXzEDbXNnAQ93aXRoZHJhd09uZUNvaW4CCHRva2VuT3V0CW1pbkFtb3VudAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAMJAQIhPQIJAJADAQgFA21zZwhwYXltZW50cwABCQACAQITc2l6ZShwYXltZW50cykgIT0gMQQKc3VzcGljaW91cwkBD2NoZWNrU3VzcGljaW91cwADCAUKc3VzcGljaW91cwJfMQkAzggCCQERc3VzcGVuZFN1c3BpY2lvdXMBCAUKc3VzcGljaW91cwJfMgkBDnJldHVyblBheW1lbnRzAggFA21zZwxvcmlnaW5DYWxsZXIIBQNtc2cIcGF5bWVudHMECXBtdEFtb3VudAgJAJEDAggFA21zZwhwYXltZW50cwAABmFtb3VudAQKcG10QXNzZXRJZAgJAJEDAggFA21zZwhwYXltZW50cwAAB2Fzc2V0SWQDCQECIT0CBQpwbXRBc3NldElkBQxzaGFyZUFzc2V0SWQJAAIBAg11bmtub3duIHRva2VuBAhvdXRJbmRleAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDPCAIFCGFzc2V0SWRzBQh0b2tlbk91dAIRdW5rbm93biB0b2tlbiBvdXQEC3Rva2VuT3V0QjU4CQDZBAEFCHRva2VuT3V0BAJ4cAkBA194cAAEDSR0MDI3MDY5MjcxNTEJARRfY2FsY1dpdGhkcmF3T25lQ29pbgQFAnhwBQlwbXRBbW91bnQFCG91dEluZGV4CAUDbXNnDG9yaWdpbkNhbGxlcgQCZHkIBQ0kdDAyNzA2OTI3MTUxAl8xBAZkeV9mZWUIBQ0kdDAyNzA2OTI3MTUxAl8yAwkBBmFzc2VydAEJAGcCBQJkeQUJbWluQW1vdW50CQACAQIYTm90IGVub3VnaCBjb2lucyByZW1vdmVkBA5nb3Zlcm5hbmNlRmVlcwkAawMFBmR5X2ZlZQUNZmVlR292ZXJuYW5jZQUJZmVlU2NhbGU2BApkeV9hbmRfZmVlCQBkAgUCZHkFBmR5X2ZlZQoBD21ha2VOZXdCYWxhbmNlcwIDYWNjDHRva2VuQmFsYW5jZQQNJHQwMjc0MDkyNzQzNQUDYWNjBAtuZXdCYWxhbmNlcwgFDSR0MDI3NDA5Mjc0MzUCXzEEAWkIBQ0kdDAyNzQwOTI3NDM1Al8yAwkAAAIFAWkFCG91dEluZGV4CQCUCgIJAM0IAgULbmV3QmFsYW5jZXMJAGUCBQx0b2tlbkJhbGFuY2UFCmR5X2FuZF9mZWUJAGQCBQFpAAEJAJQKAgkAzQgCBQtuZXdCYWxhbmNlcwUMdG9rZW5CYWxhbmNlCQBkAgUBaQABBA0kdDAyNzYwMjI3NjYzCgACJGwFAnhwCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEPbWFrZU5ld0JhbGFuY2VzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKBAtuZXdCYWxhbmNlcwgFDSR0MDI3NjAyMjc2NjMCXzEEAXYIBQ0kdDAyNzYwMjI3NjYzAl8yAwkBEmNoZWNrREFwcFRocmVzaG9sZAEFC25ld0JhbGFuY2VzCQEFdGhyb3cABAJ1cwkBB3Vuc3Rha2UCBQpkeV9hbmRfZmVlBQh0b2tlbk91dAMJAAACBQJ1cwUCdXMEBmxwRmVlcwkAZQIFBmR5X2ZlZQUOZ292ZXJuYW5jZUZlZXMEB2FpcmRyb3ADCQBmAgUGbHBGZWVzAAAJAPwHBAUQbHBGYXJtaW5nQWRkcmVzcwIHYWlyRHJvcAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQt0b2tlbk91dEI1OAUGbHBGZWVzBQNuaWwAAAMJAAACBQdhaXJkcm9wBQdhaXJkcm9wCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQNtc2cMb3JpZ2luQ2FsbGVyBQJkeQULdG9rZW5PdXRCNTgJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkAkQMCBQhhc3NldElkcwUIb3V0SW5kZXgFDWtBc3NldEJhbGFuY2UJAGUCCQCRAwIFAnhwBQhvdXRJbmRleAUKZHlfYW5kX2ZlZQkAzAgCCQEEQnVybgIFDHNoYXJlQXNzZXRJZAUJcG10QW1vdW50CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFD21vbmV5Qm94QWRkcmVzcwUOZ292ZXJuYW5jZUZlZXMFC3Rva2VuT3V0QjU4CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrU2hhcmVBc3NldFN1cHBseQkAZQIFC3NoYXJlU3VwcGx5BQlwbXRBbW91bnQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgNtc2cBGXdpdGhkcmF3T25lQ29pbldpdGhVbmxvY2sDCHRva2VuT3V0CW1pbkFtb3VudAx1bmxvY2tBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQADCQBnAgAABQx1bmxvY2tBbW91bnQJAAIBAh5VbmxvY2sgYW1vdW50IG11c3QgYmUgcG9zaXRpdmUECnN1c3BpY2lvdXMJAQ9jaGVja1N1c3BpY2lvdXMAAwgFCnN1c3BpY2lvdXMCXzEJAM4IAgkBEXN1c3BlbmRTdXNwaWNpb3VzAQgFCnN1c3BpY2lvdXMCXzIJAQ5yZXR1cm5QYXltZW50cwIIBQNtc2cGY2FsbGVyCAUDbXNnCHBheW1lbnRzBAlwbXRBbW91bnQDCQBmAgkAkAMBCAUDbXNnCHBheW1lbnRzAAADCQECIT0CCQCQAwEIBQNtc2cIcGF5bWVudHMAAQkAAgECE3NpemUocGF5bWVudHMpICE9IDEECnBtdEFzc2V0SWQICQCRAwIIBQNtc2cIcGF5bWVudHMAAAdhc3NldElkAwkBAiE9AgUMc2hhcmVBc3NldElkBQpwbXRBc3NldElkCQACAQIVdW5rbm93biBwYXltZW50IHRva2VuCAkAkQMCCAUDbXNnCHBheW1lbnRzAAAGYW1vdW50AAAEBnVubG9jawkA/AcEBQ5mYXJtaW5nQWRkcmVzcwITd2l0aGRyYXdTaGFyZVRva2VucwkAzAgCCQClCAEFBHRoaXMJAMwIAgUMdW5sb2NrQW1vdW50BQNuaWwFA25pbAMJAAACBQZ1bmxvY2sFBnVubG9jawQOd2l0aGRyYXdBbW91bnQJAGQCBQlwbXRBbW91bnQFDHVubG9ja0Ftb3VudAQDaW52CQD8BwQFBHRoaXMCD3dpdGhkcmF3T25lQ29pbgkAzAgCBQh0b2tlbk91dAkAzAgCBQltaW5BbW91bnQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUMc2hhcmVBc3NldElkBQ53aXRoZHJhd0Ftb3VudAUDbmlsAwkAAAIFA2ludgUDaW52BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DbXNnAQFBAAkAlAoCBQNuaWwJAQJfQQADbXNnAQ9nZXRWaXJ0dWFsUHJpY2UABAFECQEFZ2V0X0QCCQEDX3hwAAkBAl9BAAkAlAoCBQNuaWwJAGsDBQFEBQlQUkVDSVNJT04FC3NoYXJlU3VwcGx5A21zZwEPY2FsY1Rva2VuQW1vdW50AgdhbW91bnRzB2RlcG9zaXQEA2FtcAkBAl9BAAQIYmFsYW5jZXMJAQNfeHAABAJEMAkBB2dldERNZW0CBQhiYWxhbmNlcwUDYW1wCgEPY2FsY05ld0JhbGFuY2VzAgNhY2MHYmFsYW5jZQQNJHQwMjk2ODAyOTcwNgUDYWNjBAtuZXdCYWxhbmNlcwgFDSR0MDI5NjgwMjk3MDYCXzEEAWkIBQ0kdDAyOTY4MDI5NzA2Al8yBApuZXdCYWxhbmNlCQBkAgUHYmFsYW5jZQMFB2RlcG9zaXQJAJEDAgUHYW1vdW50cwUBaQkBAS0BCQCRAwIFB2Ftb3VudHMFAWkJAJQKAgkAzQgCBQtuZXdCYWxhbmNlcwUKbmV3QmFsYW5jZQkAZAIFAWkAAQQLbmV3QmFsYW5jZXMICgACJGwFCGJhbGFuY2VzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEPY2FsY05ld0JhbGFuY2VzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAl8xBAJEMQkBB2dldERNZW0CBQtuZXdCYWxhbmNlcwUDYW1wBARkaWZmAwUHZGVwb3NpdAkAZQIFAkQxBQJEMAkAZQIFAkQwBQJEMQkAlAoCBQNuaWwJAGsDBQRkaWZmBQtzaGFyZVN1cHBseQUCRDADbXNnAQVyYW1wQQIIX2Z1dHVyZUELX2Z1dHVyZVRpbWUJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFA21zZwMJAQZhc3NlcnQBCQBnAgUOYmxvY2tUaW1lc3RhbXAJAGQCBQ5pbml0aWFsX0FfdGltZQUNTUlOX1JBTVBfVElNRQkAAgECCXRvbyBvZnRlbgMJAQZhc3NlcnQBCQBnAgULX2Z1dHVyZVRpbWUJAGQCBQ5ibG9ja1RpbWVzdGFtcAUNTUlOX1JBTVBfVElNRQkAAgECEWluc3VmZmljaWVudCB0aW1lBApfaW5pdGlhbF9BCQECX0EAAwkBBmFzc2VydAEDCQBmAgUIX2Z1dHVyZUEAAAkAZgIFBU1BWF9BBQhfZnV0dXJlQQcJAAIBAhFvdXQgb2YgYmFzZSByYW5nZQMJAQZhc3NlcnQBAwMJAGcCBQhfZnV0dXJlQQUKX2luaXRpYWxfQQkAZwIJAGgCBQpfaW5pdGlhbF9BBQxNQVhfQV9DSEFOR0UFCF9mdXR1cmVBBwYDCQBmAgUKX2luaXRpYWxfQQUIX2Z1dHVyZUEJAGcCCQBoAgUIX2Z1dHVyZUEFDE1BWF9BX0NIQU5HRQUKX2luaXRpYWxfQQcJAAIBAgxvdXQgb2YgcmFuZ2UJAMwIAgkBDEludGVnZXJFbnRyeQICCWluaXRpYWxfQQUKX2luaXRpYWxfQQkAzAgCCQEMSW50ZWdlckVudHJ5AgIIZnV0dXJlX0EFCF9mdXR1cmVBCQDMCAIJAQxJbnRlZ2VyRW50cnkCAg5pbml0aWFsX0FfdGltZQUOYmxvY2tUaW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQICDWZ1dHVyZV9BX3RpbWUFC19mdXR1cmVUaW1lBQNuaWwDbXNnAQlzdG9wUmFtcEEACQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUACQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQNtc2cECGN1cnJlbnRBCQECX0EACQDMCAIJAQxJbnRlZ2VyRW50cnkCAglpbml0aWFsX0EFCGN1cnJlbnRBCQDMCAIJAQxJbnRlZ2VyRW50cnkCAghmdXR1cmVfQQUIY3VycmVudEEJAMwIAgkBDEludGVnZXJFbnRyeQICDmluaXRpYWxfQV90aW1lBQ5ibG9ja1RpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgINZnV0dXJlX0FfdGltZQUOYmxvY2tUaW1lc3RhbXAFA25pbANtc2cBCHNodXRkb3duAAkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUDbXNnAwkBASEBBQZhY3RpdmUJAAIBCQCsAgICIkRBcHAgaXMgYWxyZWFkeSBzdXNwZW5kZWQuIENhdXNlOiAJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUGa0NhdXNlAhp0aGUgY2F1c2Ugd2Fzbid0IHNwZWNpZmllZAkBB3N1c3BlbmQBAg9QYXVzZWQgYnkgYWRtaW4DbXNnAQhhY3RpdmF0ZQAJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFA21zZwMFBmFjdGl2ZQkBDXRocm93SXNBY3RpdmUACQDMCAIJAQxCb29sZWFuRW50cnkCBQdrQWN0aXZlBgkAzAgCCQELRGVsZXRlRW50cnkBBQZrQ2F1c2UFA25pbANtc2cBGXRha2VJbnRvQWNjb3VudEV4dHJhRnVuZHMACQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUAAwkBAiE9AggFA21zZwZjYWxsZXIFD21vbmV5Qm94QWRkcmVzcwkAAgECJk9ubHkgdGhlIHdhbGxldCBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uBAhiYWxhbmNlcwkBA194cAAKAQ50YWtlRXh0cmFGdW5kcwIDYWNjB2Fzc2V0SWQEDSR0MDMyMDQ4MzIwNjYFA2FjYwQDc3VtCAUNJHQwMzIwNDgzMjA2NgJfMQQBaQgFDSR0MDMyMDQ4MzIwNjYCXzIECHRva2VuQjU4CQDZBAEFB2Fzc2V0SWQECHJCYWxhbmNlCQBkAgkA8AcCBQR0aGlzBQh0b2tlbkI1OAkBDHN0YWtlZEFtb3VudAEFCHRva2VuQjU4BAxlbnJvbGxBbW91bnQJAGUCBQhyQmFsYW5jZQkAkQMCBQhiYWxhbmNlcwUBaQMJAGYCAAAFDGVucm9sbEFtb3VudAkBB3N1c3BlbmQBCQCsAgICIEVucm9sbCBhbW91bnQgbmVnYXRpdmUgZm9yIGFzc2V0BQdhc3NldElkBAdhaXJkcm9wAwkAZgIFDGVucm9sbEFtb3VudAAACQD8BwQFEGxwRmFybWluZ0FkZHJlc3MCB2FpckRyb3AFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUIdG9rZW5CNTgFDGVucm9sbEFtb3VudAUDbmlsAAADCQAAAgUHYWlyZHJvcAUHYWlyZHJvcAkAlAoCCQBkAgUDc3VtBQxlbnJvbGxBbW91bnQJAGQCBQFpAAEJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4EAWsKAAIkbAUIYXNzZXRJZHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIAAAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQ50YWtlRXh0cmFGdW5kcwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgMJAAACCAUBawJfMQAACQACAQIQTm8gbW9uZXkgdG8gdGFrZQUDbmlsAQJ0eAEGdmVyaWZ5AAQTbXVsdGlTaWduZWRCeUFkbWlucwQSYWRtaW5QdWJLZXkxU2lnbmVkAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUMYWRtaW5QdWJLZXkxAAEAAAQSYWRtaW5QdWJLZXkyU2lnbmVkAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAQUMYWRtaW5QdWJLZXkyAAEAAAQSYWRtaW5QdWJLZXkzU2lnbmVkAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAgUMYWRtaW5QdWJLZXkzAAEAAAkAZwIJAGQCCQBkAgUSYWRtaW5QdWJLZXkxU2lnbmVkBRJhZG1pblB1YktleTJTaWduZWQFEmFkbWluUHViS2V5M1NpZ25lZAACBAckbWF0Y2gwBQJ0eAMJAAECBQckbWF0Y2gwAhdJbnZva2VTY3JpcHRUcmFuc2FjdGlvbgQDaW52BQckbWF0Y2gwBBNjYWxsVGFrZUludG9BY2NvdW50AwkAAAIIBQNpbnYEZEFwcAUEdGhpcwkAAAIIBQNpbnYIZnVuY3Rpb24CGXRha2VJbnRvQWNjb3VudEV4dHJhRnVuZHMHBA1zaWduZWRCeUFkbWluAwMDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABQxhZG1pblB1YktleTEGCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABQxhZG1pblB1YktleTIGCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABQxhZG1pblB1YktleTMGCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABRFhZG1pblB1YktleUludm9rZQMDBRNjYWxsVGFrZUludG9BY2NvdW50BQ1zaWduZWRCeUFkbWluBwYFE211bHRpU2lnbmVkQnlBZG1pbnMFE211bHRpU2lnbmVkQnlBZG1pbnNwbNoh", "height": 2277958, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: FMS6w7BGyn5VFdu3yVE6gM682UXaoiJv9wY2FB3oNUPp Next: Aykfwr5jGhNU1JhkCPYo8TqJ3CeJcoZe7MeXSiyMnhgb Diff:
OldNewDifferences
3939
4040 let s = "_SWOP_amount"
4141
42-let t = "admin_pub_1"
42+let t = "_GSwop_amount"
4343
44-let u = "admin_pub_2"
44+let u = "admin_pub_1"
4545
46-let v = "admin_pub_3"
46+let v = "admin_pub_2"
4747
48-let w = "admin_invoke_pub"
48+let w = "admin_pub_3"
4949
50-let x = "money_box_address"
50+let x = "admin_invoke_pub"
5151
52-let y = "governance_address"
52+let y = "money_box_address"
5353
54-let z = "voting_address"
54+let z = "governance_address"
5555
56-let B = "farming_address"
56+let B = "voting_address"
5757
58-let C = "lp_farming"
58+let C = "farming_address"
5959
60-let E = Address(base58'3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz')
60+let E = "lp_farming"
6161
62-func F (G) = {
63- let H = getString(E, G)
64- if ($isInstanceOf(H, "String"))
62+let F = Address(base58'3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz')
63+
64+func G (H) = {
65+ let I = getString(F, H)
66+ if ($isInstanceOf(I, "String"))
6567 then {
66- let I = H
67- fromBase58String(I)
68+ let J = I
69+ fromBase58String(J)
6870 }
6971 else {
70- let J = H
71- throw((G + "is empty"))
72+ let K = I
73+ throw((H + "is empty"))
7274 }
7375 }
7476
7577
76-let K = F(t)
78+let L = G(u)
7779
78-let L = F(u)
80+let M = G(v)
7981
80-let M = F(v)
82+let N = G(w)
8183
82-let N = F(w)
84+let O = G(x)
8385
84-let O = Address(F(x))
86+let P = Address(G(y))
8587
86-let P = Address(F(y))
88+let Q = Address(G(z))
8789
88-let Q = Address(F(p))
90+let R = Address(G(p))
8991
90-let R = Address(F(z))
92+let S = Address(G(B))
9193
92-let S = Address(F(B))
94+let T = Address(G(C))
9395
94-let T = Address(F(C))
96+let U = Address(G(E))
9597
96-let U = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
98+let V = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
9799
98-let V = [toBase58String(U)]
100+let W = [toBase58String(V)]
99101
100-let W = getBooleanValue(this, j)
102+let X = getBooleanValue(this, j)
101103
102-let X = fromBase58String(getStringValue(this, l))
104+let Y = fromBase58String(getStringValue(this, l))
103105
104-let Y = getIntegerValue(this, m)
106+let Z = getIntegerValue(this, m)
105107
106-let Z = 1000000
108+let aa = 1000000
107109
108-let aa = getIntegerValue(this, n)
110+let ab = getIntegerValue(this, n)
109111
110-let ab = fraction(40, Z, 100)
112+let ac = fraction(40, aa, 100)
111113
112-let ac = getIntegerValue(this, "initial_A")
114+let ad = getIntegerValue(this, "initial_A")
113115
114-let ad = getIntegerValue(this, "future_A")
116+let ae = getIntegerValue(this, "future_A")
115117
116-let ae = valueOrElse(getInteger(this, "initial_A_time"), 0)
118+let af = valueOrElse(getInteger(this, "initial_A_time"), 0)
117119
118-let af = valueOrElse(getInteger(this, "future_A_time"), 0)
120+let ag = valueOrElse(getInteger(this, "future_A_time"), 0)
119121
120-let ag = split(getStringValue(this, h), ",")
122+let ah = split(getStringValue(this, h), ",")
121123
122-let ah = size(ag)
124+let ai = size(ah)
123125
124-func ai (aj) = [BooleanEntry(j, false), StringEntry(k, aj)]
126+func aj (ak) = [BooleanEntry(j, false), StringEntry(k, ak)]
125127
126128
127-func ak () = throw("DApp is already active")
129+func al () = throw("DApp is already active")
128130
129131
130-func al () = if (W)
132+func am () = if (X)
131133 then unit
132134 else throw("DApp is inactive at this moment")
133135
134136
135-func am (an) = if (containsElement([K, L, M], an.callerPublicKey))
137+func an (ao) = if (containsElement([L, M, N], ao.callerPublicKey))
136138 then unit
137139 else throw("Only admin can call this function")
138140
139141
140-func ao (an) = if ((this == an.caller))
142+func ap (ao) = if ((this == ao.caller))
141143 then unit
142144 else throw("Only contract itself can call this function")
143145
144146
145-let ap = toBigInt(2)
147+let aq = toBigInt(2)
146148
147-let aq = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
149+let ar = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
148150
149-let ar = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
151+let as = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
150152
151-let as = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
153+let at = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
152154
153-let at = height
155+let au = height
154156
155-func au (av) = if (av)
157+func av (aw) = if (aw)
156158 then false
157159 else true
158160
159161
160-func aw (ax) = {
161- let ay = {
162- let H = ax
163- if ($isInstanceOf(H, "Address"))
162+func ax (ay) = {
163+ let az = {
164+ let I = ay
165+ if ($isInstanceOf(I, "Address"))
164166 then {
165- let az = H
166- toString(az)
167+ let aA = I
168+ toString(aA)
167169 }
168- else if ($isInstanceOf(H, "String"))
170+ else if ($isInstanceOf(I, "String"))
169171 then {
170- let az = H
171- az
172+ let aA = I
173+ aA
172174 }
173175 else throw("Unknow type of user Addr")
174176 }
175- let aA = valueOrElse(getInteger(P, (ay + s)), 0)
176- let aB = split(getStringValue(E, r), ",")
177- let aC = split(getStringValue(E, q), ",")
178- if (if ((aA >= parseIntValue(aB[0])))
179- then (parseIntValue(aB[1]) > aA)
177+ let aB = valueOrElse(getInteger(Q, (az + t)), 0)
178+ let aC = valueOrElse(getInteger(Q, (az + t)), aB)
179+ let aD = split(getStringValue(F, r), ",")
180+ let aE = split(getStringValue(F, q), ",")
181+ if (if ((aC >= parseIntValue(aD[0])))
182+ then (parseIntValue(aD[1]) > aC)
180183 else false)
181- then (Z - parseIntValue(aC[0]))
182- else if (if ((aA >= parseIntValue(aB[1])))
183- then (parseIntValue(aB[2]) > aA)
184+ then (aa - parseIntValue(aE[0]))
185+ else if (if ((aC >= parseIntValue(aD[1])))
186+ then (parseIntValue(aD[2]) > aC)
184187 else false)
185- then (Z - parseIntValue(aC[1]))
186- else if (if ((aA >= parseIntValue(aB[2])))
187- then (parseIntValue(aB[3]) > aA)
188+ then (aa - parseIntValue(aE[1]))
189+ else if (if ((aC >= parseIntValue(aD[2])))
190+ then (parseIntValue(aD[3]) > aC)
188191 else false)
189- then (Z - parseIntValue(aC[2]))
190- else if (if ((aA >= parseIntValue(aB[3])))
191- then (parseIntValue(aB[4]) > aA)
192+ then (aa - parseIntValue(aE[2]))
193+ else if (if ((aC >= parseIntValue(aD[3])))
194+ then (parseIntValue(aD[4]) > aC)
192195 else false)
193- then (Z - parseIntValue(aC[3]))
194- else if ((aA >= parseIntValue(aB[4])))
195- then (Z - parseIntValue(aC[4]))
196- else Z
196+ then (aa - parseIntValue(aE[3]))
197+ else if ((aC >= parseIntValue(aD[4])))
198+ then (aa - parseIntValue(aE[4]))
199+ else aa
197200 }
198201
199202
200-func aD () = {
201- let aE = af
202- let aF = ad
203- if ((aE > at))
203+func aF () = {
204+ let aG = ag
205+ let aH = ae
206+ if ((aG > au))
204207 then {
205- let aG = ac
206- let aH = ae
207- if ((aF > aG))
208- then (aG + (((aF - aG) * (at - aH)) / (aE - aH)))
209- else (aG - (((aG - aF) * (at - aH)) / (aE - aH)))
208+ let aI = ad
209+ let aJ = af
210+ if ((aH > aI))
211+ then (aI + (((aH - aI) * (au - aJ)) / (aG - aJ)))
212+ else (aI - (((aI - aH) * (au - aJ)) / (aG - aJ)))
210213 }
211- else aF
214+ else aH
212215 }
213216
214217
215-func aI () = {
216- func aJ (aK,aL) = (aK :+ valueOrElse(getInteger(this, (aL + i)), 0))
218+func aK () = {
219+ func aL (aM,aN) = (aM :+ valueOrElse(getInteger(this, (aN + i)), 0))
217220
218- let aM = ag
219- let aN = size(aM)
220- let aO = nil
221- func aP (aQ,aR) = if ((aR >= aN))
222- then aQ
223- else aJ(aQ, aM[aR])
221+ let aO = ah
222+ let aP = size(aO)
223+ let aQ = nil
224+ func aR (aS,aT) = if ((aT >= aP))
225+ then aS
226+ else aL(aS, aO[aT])
224227
225- func aS (aQ,aR) = if ((aR >= aN))
226- then aQ
228+ func aU (aS,aT) = if ((aT >= aP))
229+ then aS
227230 else throw("List size exceeds 10")
228231
229- aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
232+ aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
230233 }
231234
232235
233-func aT (aU) = aU
236+func aV (aW) = aW
234237
235238
236-func aV (aK,aW) = (aK + aW)
239+func aX (aM,aY) = (aM + aY)
237240
238241
239-func aX (aU,aY) = {
240- let aZ = invoke(this, "D", [aU, aY], nil)
241- if ($isInstanceOf(aZ, "Int"))
242- then aZ
243- else throw(($getType(aZ) + " couldn't be cast to Int"))
242+func aZ (aW,ba) = {
243+ let bb = invoke(this, "D", [aW, ba], nil)
244+ if ($isInstanceOf(bb, "Int"))
245+ then bb
246+ else throw(($getType(bb) + " couldn't be cast to Int"))
244247 }
245248
246249
247-func ba (aU,aY) = {
248- let bb = {
249- let aM = aU
250- let aN = size(aM)
251- let aO = 0
252- func aP (aQ,aR) = if ((aR >= aN))
253- then aQ
254- else aV(aQ, aM[aR])
250+func bc (aW,ba) = {
251+ let bd = {
252+ let aO = aW
253+ let aP = size(aO)
254+ let aQ = 0
255+ func aR (aS,aT) = if ((aT >= aP))
256+ then aS
257+ else aX(aS, aO[aT])
255258
256- func aS (aQ,aR) = if ((aR >= aN))
257- then aQ
259+ func aU (aS,aT) = if ((aT >= aP))
260+ then aS
258261 else throw("List size exceeds 10")
259262
260- aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
263+ aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
261264 }
262- if ((bb == 0))
265+ if ((bd == 0))
263266 then 0
264267 else {
265- let bc = (aY * ah)
266- let bd = (toBigInt(bc) * toBigInt(bb))
267- let be = toBigInt((bc - 1))
268- func bf (aK,an) = if ((aK._2 == true))
269- then aK
268+ let be = (ba * ai)
269+ let bf = (toBigInt(be) * toBigInt(bd))
270+ let bg = toBigInt((be - 1))
271+ func bh (aM,ao) = if ((aM._2 == true))
272+ then aM
270273 else {
271- let bg = aK._1
272- func bh (bi,an) = if ((ah > an))
273- then ((bi * bg) / (toBigInt(aU[an]) * toBigInt(ah)))
274- else bi
274+ let bi = aM._1
275+ func bj (bk,ao) = if ((ai > ao))
276+ then ((bk * bi) / (toBigInt(aW[ao]) * toBigInt(ai)))
277+ else bk
275278
276- let bi = {
277- let aM = aq
278- let aN = size(aM)
279- let aO = bg
280- func bj (aQ,aR) = if ((aR >= aN))
281- then aQ
282- else bh(aQ, aM[aR])
279+ let bk = {
280+ let aO = ar
281+ let aP = size(aO)
282+ let aQ = bi
283+ func bl (aS,aT) = if ((aT >= aP))
284+ then aS
285+ else bj(aS, aO[aT])
283286
284- func bk (aQ,aR) = if ((aR >= aN))
285- then aQ
287+ func bm (aS,aT) = if ((aT >= aP))
288+ then aS
286289 else throw("List size exceeds 10")
287290
288- bk(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
291+ bm(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
289292 }
290- let bl = fraction((bd + (toBigInt(ah) * bi)), bg, ((be * bg) + (toBigInt((ah + 1)) * bi)))
291- if ((bl > bg))
292- then if ((1 >= toInt((bl - bg))))
293- then $Tuple2(bl, true)
294- else $Tuple2(bl, false)
295- else if ((1 >= toInt((bg - bl))))
296- then $Tuple2(bl, true)
297- else $Tuple2(bl, false)
293+ let bn = fraction((bf + (toBigInt(ai) * bk)), bi, ((bg * bi) + (toBigInt((ai + 1)) * bk)))
294+ if ((bn > bi))
295+ then if ((1 >= toInt((bn - bi))))
296+ then $Tuple2(bn, true)
297+ else $Tuple2(bn, false)
298+ else if ((1 >= toInt((bi - bn))))
299+ then $Tuple2(bn, true)
300+ else $Tuple2(bn, false)
298301 }
299302
300- let bm = {
301- let aM = ar
302- let aN = size(aM)
303- let aO = $Tuple2(toBigInt(bb), false)
304- func bj (aQ,aR) = if ((aR >= aN))
305- then aQ
306- else bf(aQ, aM[aR])
303+ let bo = {
304+ let aO = as
305+ let aP = size(aO)
306+ let aQ = $Tuple2(toBigInt(bd), false)
307+ func bl (aS,aT) = if ((aT >= aP))
308+ then aS
309+ else bh(aS, aO[aT])
307310
308- func bk (aQ,aR) = if ((aR >= aN))
309- then aQ
311+ func bm (aS,aT) = if ((aT >= aP))
312+ then aS
310313 else throw("List size exceeds 15")
311314
312- bk(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
315+ 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)
313316 }
314- let bl = bm._1
315- let bn = bm._2
316- if ((bn == false))
317- then throw(("get_D() not finished with " + toString(bl)))
318- else toInt(bl)
317+ let bn = bo._1
318+ let bp = bo._2
319+ if ((bp == false))
320+ then throw(("get_D() not finished with " + toString(bn)))
321+ else toInt(bn)
319322 }
320323 }
321324
322325
323-func bo (aU,aY) = aX(aT(aU), aY)
326+func bq (aW,ba) = aZ(aV(aW), ba)
324327
325328
326-func bp (bq,br,bs,bt) = if (au((bq != br)))
329+func br (bs,bt,bu,bv) = if (av((bs != bt)))
327330 then throw("same coin")
328- else if (au(if ((br >= 0))
329- then (bq >= 0)
331+ else if (av(if ((bt >= 0))
332+ then (bs >= 0)
330333 else false))
331334 then throw("below zero")
332- else if (au(if ((ah > br))
333- then (ah > bq)
335+ else if (av(if ((ai > bt))
336+ then (ai > bs)
334337 else false))
335338 then throw("above N_COINS")
336339 else {
337- let aY = aD()
338- let bl = aX(bt, aY)
339- let bc = (aY * ah)
340- func bu (aK,an) = {
341- let bv = aK
342- let bw = bv._1
343- let bx = bv._2
344- let by = if ((bq == an))
345- then bs
346- else bt[an]
347- if (if ((an != br))
348- then (ah > an)
340+ let ba = aF()
341+ let bn = aZ(bv, ba)
342+ let be = (ba * ai)
343+ func bw (aM,ao) = {
344+ let bx = aM
345+ let by = bx._1
346+ let bz = bx._2
347+ let bA = if ((bs == ao))
348+ then bu
349+ else bv[ao]
350+ if (if ((ao != bt))
351+ then (ai > ao)
349352 else false)
350- then $Tuple2((bw + by), fraction(bx, toBigInt(bl), toBigInt((by * ah))))
351- else $Tuple2(bw, bx)
353+ then $Tuple2((by + bA), fraction(bz, toBigInt(bn), toBigInt((bA * ai))))
354+ else $Tuple2(by, bz)
352355 }
353356
354- let bz = {
355- let aM = aq
356- let aN = size(aM)
357- let aO = $Tuple2(0, toBigInt(bl))
358- func aP (aQ,aR) = if ((aR >= aN))
359- then aQ
360- else bu(aQ, aM[aR])
357+ let bB = {
358+ let aO = ar
359+ let aP = size(aO)
360+ let aQ = $Tuple2(0, toBigInt(bn))
361+ func aR (aS,aT) = if ((aT >= aP))
362+ then aS
363+ else bw(aS, aO[aT])
361364
362- func aS (aQ,aR) = if ((aR >= aN))
363- then aQ
365+ func aU (aS,aT) = if ((aT >= aP))
366+ then aS
364367 else throw("List size exceeds 10")
365368
366- aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
369+ aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
367370 }
368- let bw = bz._1
369- let bA = bz._2
370- let bx = fraction(bA, toBigInt(bl), toBigInt((bc * ah)))
371- let bB = toBigInt(((bw + (bl / bc)) - bl))
372- func bC (aK,bD) = if ((aK._2 == true))
373- then aK
371+ let by = bB._1
372+ let bC = bB._2
373+ let bz = fraction(bC, toBigInt(bn), toBigInt((be * ai)))
374+ let bD = toBigInt(((by + (bn / be)) - bn))
375+ func bE (aM,bF) = if ((aM._2 == true))
376+ then aM
374377 else {
375- let bE = aK._1
376- let bF = (((bE * bE) + bx) / ((ap * bE) + bB))
377- if ((bF > bE))
378- then if ((1 >= toInt((bF - bE))))
379- then $Tuple2(bF, true)
380- else $Tuple2(bF, false)
381- else if ((1 >= toInt((bE - bF))))
382- then $Tuple2(bF, true)
383- else $Tuple2(bF, false)
378+ let bG = aM._1
379+ let bH = (((bG * bG) + bz) / ((aq * bG) + bD))
380+ if ((bH > bG))
381+ then if ((1 >= toInt((bH - bG))))
382+ then $Tuple2(bH, true)
383+ else $Tuple2(bH, false)
384+ else if ((1 >= toInt((bG - bH))))
385+ then $Tuple2(bH, true)
386+ else $Tuple2(bH, false)
384387 }
385388
386- let bG = {
387- let aM = as
388- let aN = size(aM)
389- let aO = $Tuple2(toBigInt(bl), false)
390- func bj (aQ,aR) = if ((aR >= aN))
391- then aQ
392- else bC(aQ, aM[aR])
389+ let bI = {
390+ let aO = at
391+ let aP = size(aO)
392+ let aQ = $Tuple2(toBigInt(bn), false)
393+ func bl (aS,aT) = if ((aT >= aP))
394+ then aS
395+ else bE(aS, aO[aT])
393396
394- func bk (aQ,aR) = if ((aR >= aN))
395- then aQ
397+ func bm (aS,aT) = if ((aT >= aP))
398+ then aS
396399 else throw("List size exceeds 16")
397400
398- bk(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
401+ 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)
399402 }
400- let bF = bG._1
401- let bn = bG._2
402- if ((bn == false))
403- then throw(("getY() not finished with " + toString(bF)))
404- else toInt(bF)
403+ let bH = bI._1
404+ let bp = bI._2
405+ if ((bp == false))
406+ then throw(("getY() not finished with " + toString(bH)))
407+ else toInt(bH)
405408 }
406409
407410
408-func bH (bI,bq,aU,bl) = if (au((bq >= 0)))
411+func bJ (bK,bs,aW,bn) = if (av((bs >= 0)))
409412 then throw("i below zero")
410- else if (au((ah > bq)))
413+ else if (av((ai > bs)))
411414 then throw("i above N_COINS")
412415 else {
413- let bc = (bI * ah)
414- func bu (aK,an) = {
415- let bJ = aK
416- let bw = bJ._1
417- let bx = bJ._2
418- let by = if (if ((bq != an))
419- then (ah > an)
416+ let be = (bK * ai)
417+ func bw (aM,ao) = {
418+ let bL = aM
419+ let by = bL._1
420+ let bz = bL._2
421+ let bA = if (if ((bs != ao))
422+ then (ai > ao)
420423 else false)
421- then aU[an]
424+ then aW[ao]
422425 else 0
423- if (if ((ah > an))
424- then (bq != an)
426+ if (if ((ai > ao))
427+ then (bs != ao)
425428 else false)
426- then $Tuple2((bw + by), fraction(bx, toBigInt(bl), toBigInt((by * ah))))
427- else $Tuple2(bw, bx)
429+ then $Tuple2((by + bA), fraction(bz, toBigInt(bn), toBigInt((bA * ai))))
430+ else $Tuple2(by, bz)
428431 }
429432
430- let bK = {
431- let aM = aq
432- let aN = size(aM)
433- let aO = $Tuple2(0, toBigInt(bl))
434- func aP (aQ,aR) = if ((aR >= aN))
435- then aQ
436- else bu(aQ, aM[aR])
433+ let bM = {
434+ let aO = ar
435+ let aP = size(aO)
436+ let aQ = $Tuple2(0, toBigInt(bn))
437+ func aR (aS,aT) = if ((aT >= aP))
438+ then aS
439+ else bw(aS, aO[aT])
437440
438- func aS (aQ,aR) = if ((aR >= aN))
439- then aQ
441+ func aU (aS,aT) = if ((aT >= aP))
442+ then aS
440443 else throw("List size exceeds 10")
441444
442- aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
445+ aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
443446 }
444- let bw = bK._1
445- let bA = bK._2
446- let bx = fraction(bA, toBigInt(bl), toBigInt((bc * ah)))
447- let bB = toBigInt(((bw + (bl / bc)) - bl))
448- func bL (aK,an) = if ((aK._2 == true))
449- then aK
447+ let by = bM._1
448+ let bC = bM._2
449+ let bz = fraction(bC, toBigInt(bn), toBigInt((be * ai)))
450+ let bD = toBigInt(((by + (bn / be)) - bn))
451+ func bN (aM,ao) = if ((aM._2 == true))
452+ then aM
450453 else {
451- let bE = aK._1
452- let bF = (((bE * bE) + bx) / ((ap * bE) + bB))
453- if ((bF > bE))
454- then if ((1 >= toInt((bF - bE))))
455- then $Tuple2(bF, true)
456- else $Tuple2(bF, false)
457- else if ((1 >= toInt((bE - bF))))
458- then $Tuple2(bF, true)
459- else $Tuple2(bF, false)
454+ let bG = aM._1
455+ let bH = (((bG * bG) + bz) / ((aq * bG) + bD))
456+ if ((bH > bG))
457+ then if ((1 >= toInt((bH - bG))))
458+ then $Tuple2(bH, true)
459+ else $Tuple2(bH, false)
460+ else if ((1 >= toInt((bG - bH))))
461+ then $Tuple2(bH, true)
462+ else $Tuple2(bH, false)
460463 }
461464
462- let bM = {
463- let aM = as
464- let aN = size(aM)
465- let aO = $Tuple2(toBigInt(bl), false)
466- func bj (aQ,aR) = if ((aR >= aN))
467- then aQ
468- else bL(aQ, aM[aR])
465+ let bO = {
466+ let aO = at
467+ let aP = size(aO)
468+ let aQ = $Tuple2(toBigInt(bn), false)
469+ func bl (aS,aT) = if ((aT >= aP))
470+ then aS
471+ else bN(aS, aO[aT])
469472
470- func bk (aQ,aR) = if ((aR >= aN))
471- then aQ
473+ func bm (aS,aT) = if ((aT >= aP))
474+ then aS
472475 else throw("List size exceeds 16")
473476
474- bk(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
477+ 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)
475478 }
476- let bF = bM._1
477- let bn = bM._2
478- if ((bn == false))
479- then throw(("get_y_D() not finished with " + toString(bF)))
480- else toInt(bF)
479+ let bH = bO._1
480+ let bp = bO._2
481+ if ((bp == false))
482+ then throw(("get_y_D() not finished with " + toString(bH)))
483+ else toInt(bH)
481484 }
482485
483486
484-func bN (aU,bO,an,bP) = {
485- let bQ = aw(bP)
486- let aY = aD()
487- let bR = ((fraction(aa, bQ, Z, CEILING) * ah) / (4 * (ah - 1)))
488- let bS = Y
489- let bT = aX(aU, aY)
490- let bU = (bT - fraction(bO, bT, bS))
491- let bV = bH(aY, an, aU, bU)
492- let bW = (aU[an] - bV)
493- func bX (aK,bY) = {
494- let bZ = aK
495- let ca = bZ._1
496- let cb = bZ._2
497- let cc = if ((cb == an))
498- then (fraction(bY, bU, bT) - bV)
499- else (bY - fraction(bY, bU, bT))
500- $Tuple2((ca :+ (bY - fraction(bR, cc, Z))), (cb + 1))
487+func bP (aW,bQ,ao,bR) = {
488+ let bS = ax(bR)
489+ let ba = aF()
490+ let bT = ((fraction(ab, bS, aa, CEILING) * ai) / (4 * (ai - 1)))
491+ let bU = Z
492+ let bV = aZ(aW, ba)
493+ let bW = (bV - fraction(bQ, bV, bU))
494+ let bX = bJ(ba, ao, aW, bW)
495+ let bY = (aW[ao] - bX)
496+ func bZ (aM,ca) = {
497+ let cb = aM
498+ let cc = cb._1
499+ let cd = cb._2
500+ let ce = if ((cd == ao))
501+ then (fraction(ca, bW, bV) - bX)
502+ else (ca - fraction(ca, bW, bV))
503+ $Tuple2((cc :+ (ca - fraction(bT, ce, aa))), (cd + 1))
501504 }
502505
503- let cd = {
504- let aM = aU
505- let aN = size(aM)
506- let aO = $Tuple2(nil, 0)
507- func aP (aQ,aR) = if ((aR >= aN))
508- then aQ
509- else bX(aQ, aM[aR])
506+ let cf = {
507+ let aO = aW
508+ let aP = size(aO)
509+ let aQ = $Tuple2(nil, 0)
510+ func aR (aS,aT) = if ((aT >= aP))
511+ then aS
512+ else bZ(aS, aO[aT])
510513
511- func aS (aQ,aR) = if ((aR >= aN))
512- then aQ
514+ func aU (aS,aT) = if ((aT >= aP))
515+ then aS
513516 else throw("List size exceeds 10")
514517
515- aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
518+ aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
516519 }
517- let ca = cd._1
518- let cb = cd._2
519- let ce = ca[an]
520- let cf = ((ce - bH(aY, an, ca, bU)) - 1)
521- $Tuple2(cf, (bW - cf))
520+ let cc = cf._1
521+ let cd = cf._2
522+ let cg = cc[ao]
523+ let ch = ((cg - bJ(ba, ao, cc, bW)) - 1)
524+ $Tuple2(ch, (bY - ch))
522525 }
523526
524527
525-func cg (aL) = {
526- let H = aL
527- if ($isInstanceOf(H, "ByteVector"))
528+func ci (aN) = {
529+ let I = aN
530+ if ($isInstanceOf(I, "ByteVector"))
528531 then {
529- let ch = H
530- toBase58String(ch)
532+ let cj = I
533+ toBase58String(cj)
531534 }
532- else if ($isInstanceOf(H, "Unit"))
535+ else if ($isInstanceOf(I, "Unit"))
533536 then {
534- let ci = H
537+ let ck = I
535538 "WAVES"
536539 }
537540 else throw("Match error")
538541 }
539542
540543
541-func cj (ck,aL) = if (ck)
542- then $Tuple2("lockNeutrino", Q)
543- else $Tuple2("unlockNeutrino", Q)
544+func cl (cm,aN) = if (cm)
545+ then $Tuple2("lockNeutrino", R)
546+ else $Tuple2("unlockNeutrino", R)
544547
545548
546-func cl (ck,cm,aL) = if (ck)
549+func cn (cm,co,aN) = if (cm)
547550 then {
548- let cn = cj(ck, aL)
549- let co = cn._1
550- let cp = cn._2
551- $Tuple4(co, cp, nil, [AttachedPayment(aL, cm)])
551+ let cp = cl(cm, aN)
552+ let cq = cp._1
553+ let cr = cp._2
554+ $Tuple4(cq, cr, nil, [AttachedPayment(aN, co)])
552555 }
553556 else {
554- let cq = cj(ck, aL)
555- let co = cq._1
556- let cp = cq._2
557- $Tuple4(co, cp, [cm, toBase58String(aL)], nil)
557+ let cs = cl(cm, aN)
558+ let cq = cs._1
559+ let cr = cs._2
560+ $Tuple4(cq, cr, [co, toBase58String(aN)], nil)
558561 }
559562
560563
561-func ck (cm,cr) = if (containsElement(V, cr))
564+func cm (co,ct) = if (containsElement(W, ct))
562565 then {
563- let cs = cl(true, cm, fromBase58String(cr))
564- let co = cs._1
565- let ct = cs._2
566- let cu = cs._3
567- let cv = cs._4
568- invoke(ct, co, cu, cv)
566+ let cu = cn(true, co, fromBase58String(ct))
567+ let cq = cu._1
568+ let cv = cu._2
569+ let cw = cu._3
570+ let cx = cu._4
571+ invoke(cv, cq, cw, cx)
569572 }
570573 else 0
571574
572575
573-func cw (cm,cr) = if (containsElement(V, cr))
576+func cy (co,ct) = if (containsElement(W, ct))
574577 then {
575- let cx = cl(false, cm, fromBase58String(cr))
576- let co = cx._1
577- let ct = cx._2
578- let cu = cx._3
579- let cv = cx._4
580- invoke(ct, co, cu, cv)
578+ let cz = cn(false, co, fromBase58String(ct))
579+ let cq = cz._1
580+ let cv = cz._2
581+ let cw = cz._3
582+ let cx = cz._4
583+ invoke(cv, cq, cw, cx)
581584 }
582585 else 0
583586
584587
585-func cy (aL) = {
586- let cz = {
587- let H = aL
588- if ($isInstanceOf(H, "ByteVector"))
588+func cA (aN) = {
589+ let cB = {
590+ let I = aN
591+ if ($isInstanceOf(I, "ByteVector"))
589592 then {
590- let cA = H
591- if ((cA == U))
592- then getInteger(Q, ((("rpd_balance_" + toBase58String(cA)) + "_") + toString(this)))
593+ let cC = I
594+ if ((cC == V))
595+ then getInteger(R, ((("rpd_balance_" + toBase58String(cC)) + "_") + toString(this)))
593596 else 0
594597 }
595- else if ($isInstanceOf(H, "Unit"))
598+ else if ($isInstanceOf(I, "Unit"))
596599 then 0
597600 else throw("Match error")
598601 }
599- let H = cz
600- if ($isInstanceOf(H, "Int"))
602+ let I = cB
603+ if ($isInstanceOf(I, "Int"))
601604 then {
602- let an = H
603- an
605+ let ao = I
606+ ao
604607 }
605608 else 0
606609 }
607610
608611
609-func cB () = {
610- let cC = aI()
611- func cD (aK,aL) = {
612- let cE = aK
613- let cF = cE._1
614- let an = cE._2
615- if (cF)
616- then $Tuple2(cF, an)
612+func cD () = {
613+ let cE = aK()
614+ func cF (aM,aN) = {
615+ let cG = aM
616+ let cH = cG._1
617+ let ao = cG._2
618+ if (cH)
619+ then $Tuple2(cH, ao)
617620 else {
618- let cG = (assetBalance(this, fromBase58String(aL)) + cy(fromBase58String(aL)))
619- if ((cC[an] > cG))
620- then $Tuple2(true, an)
621- else $Tuple2(false, (an + 1))
621+ let cI = (assetBalance(this, fromBase58String(aN)) + cA(fromBase58String(aN)))
622+ if ((cE[ao] > cI))
623+ then $Tuple2(true, ao)
624+ else $Tuple2(false, (ao + 1))
622625 }
623626 }
624627
625- let aM = ag
626- let aN = size(aM)
627- let aO = $Tuple2(false, 0)
628- func aP (aQ,aR) = if ((aR >= aN))
629- then aQ
630- else cD(aQ, aM[aR])
628+ let aO = ah
629+ let aP = size(aO)
630+ let aQ = $Tuple2(false, 0)
631+ func aR (aS,aT) = if ((aT >= aP))
632+ then aS
633+ else cF(aS, aO[aT])
631634
632- func aS (aQ,aR) = if ((aR >= aN))
633- then aQ
635+ func aU (aS,aT) = if ((aT >= aP))
636+ then aS
634637 else throw("List size exceeds 10")
635638
636- aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
639+ aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
637640 }
638641
639642
640-func cH (an) = ai(("Suspicious state with asset: " + ag[an]))
643+func cJ (ao) = aj(("Suspicious state with asset: " + ah[ao]))
641644
642645
643-func cI (bP,cv) = {
644- func cJ (aK,cK) = (aK :+ ScriptTransfer(bP, cK.amount, cK.assetId))
646+func cK (bR,cx) = {
647+ func cL (aM,cM) = (aM :+ ScriptTransfer(bR, cM.amount, cM.assetId))
645648
646- let aM = cv
647- let aN = size(aM)
648- let aO = nil
649- func aP (aQ,aR) = if ((aR >= aN))
650- then aQ
651- else cJ(aQ, aM[aR])
649+ let aO = cx
650+ let aP = size(aO)
651+ let aQ = nil
652+ func aR (aS,aT) = if ((aT >= aP))
653+ then aS
654+ else cL(aS, aO[aT])
652655
653- func aS (aQ,aR) = if ((aR >= aN))
654- then aQ
656+ func aU (aS,aT) = if ((aT >= aP))
657+ then aS
655658 else throw("List size exceeds 10")
656659
657- aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
660+ aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
658661 }
659662
660663
661-func cL (cM) = {
662- let cN = valueOrErrorMessage(getInteger(this, o), "No dAppThresholdCoef key")
663- let cO = 10000
664- let cP = max(cM)
665- let cQ = min(cM)
666- let cR = fraction(cP, cO, cQ)
667- if ((cR > (cN * cO)))
664+func cN (cO) = {
665+ let cP = valueOrErrorMessage(getInteger(this, o), "No dAppThresholdCoef key")
666+ let cQ = 10000
667+ let cR = max(cO)
668+ let cS = min(cO)
669+ let cT = fraction(cR, cQ, cS)
670+ if ((cT > (cP * cQ)))
668671 then throw("New balance in assets of the DApp is less than threshold")
669672 else false
670673 }
671674
672675
673-func cS (ag) = {
674- let cT = split(ag, ",")
675- if ((size(cT) > 10))
676+func cU (ah) = {
677+ let cV = split(ah, ",")
678+ if ((size(cV) > 10))
676679 then throw("To many coins, max coins size 10")
677680 else {
678- func cU (cV,aL) = {
679- let cW = valueOrErrorMessage(fromBase58String(aL), ("fromBase58String: " + aL))
680- let cX = valueOrErrorMessage(assetInfo(cW), ("assetInfo: " + aL)).decimals
681- if ((cX != d))
681+ func cW (cX,aN) = {
682+ let cY = valueOrErrorMessage(fromBase58String(aN), ("fromBase58String: " + aN))
683+ let cZ = valueOrErrorMessage(assetInfo(cY), ("assetInfo: " + aN)).decimals
684+ if ((cZ != d))
682685 then throw("wrong decimals")
683686 else false
684687 }
685688
686- let aM = cT
687- let aN = size(aM)
688- let aO = false
689- func aP (aQ,aR) = if ((aR >= aN))
690- then aQ
691- else cU(aQ, aM[aR])
689+ let aO = cV
690+ let aP = size(aO)
691+ let aQ = false
692+ func aR (aS,aT) = if ((aT >= aP))
693+ then aS
694+ else cW(aS, aO[aT])
692695
693- func aS (aQ,aR) = if ((aR >= aN))
694- then aQ
696+ func aU (aS,aT) = if ((aT >= aP))
697+ then aS
695698 else throw("List size exceeds 10")
696699
697- aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
700+ aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
698701 }
699702 }
700703
701704
702-@Callable(cY)
703-func D (aU,aY) = {
704- let bl = ba(aU, aY)
705- $Tuple2([IntegerEntry("D", bl)], bl)
705+@Callable(da)
706+func D (aW,ba) = {
707+ let bn = bc(aW, ba)
708+ $Tuple2([IntegerEntry("D", bn)], bn)
706709 }
707710
708711
709712
710-@Callable(cY)
711-func init (ag,aD,cZ) = if (!(isDataStorageUntouched(this)))
713+@Callable(da)
714+func init (ah,aF,db) = if (!(isDataStorageUntouched(this)))
712715 then throw("Already initialized")
713- else if ((0 >= aD))
716+ else if ((0 >= aF))
714717 then throw("Amp must be must > 0")
715- else if ((0 >= cZ))
718+ else if ((0 >= db))
716719 then throw("dApp Threshold Coef must be > 0")
717720 else {
718- let da = "s_Multi_USD"
719- let db = ("ShareToken of SwopFi protocol for MultiStable USD pool at address " + toString(this))
720- let dc = Issue(da, db, 0, 6, true)
721- let dd = calculateAssetId(dc)
722- if (cS(ag))
721+ let dc = "s_Multi_USD"
722+ let dd = ("ShareToken of SwopFi protocol for MultiStable USD pool at address " + toString(this))
723+ let de = Issue(dc, dd, 0, 6, true)
724+ let df = calculateAssetId(de)
725+ if (cU(ah))
723726 then throw()
724- else [StringEntry(g, f), StringEntry(h, ag), IntegerEntry("initial_A", aD), IntegerEntry("future_A", aD), IntegerEntry(n, getIntegerValue(E, "base_fee_flat")), StringEntry(l, toBase58String(dd)), IntegerEntry(m, 0), IntegerEntry(o, cZ), BooleanEntry(j, true), dc]
727+ else [StringEntry(g, f), StringEntry(h, ah), IntegerEntry("initial_A", aF), IntegerEntry("future_A", aF), IntegerEntry(n, getIntegerValue(F, "base_fee_flat")), StringEntry(l, toBase58String(df)), IntegerEntry(m, 0), IntegerEntry(o, db), BooleanEntry(j, true), de]
725728 }
726729
727730
728731
729-@Callable(cY)
730-func addLiquidity (de,df) = valueOrElse(al(), {
731- let aY = aD()
732- let aU = aI()
733- let bT = if ((Y == 0))
732+@Callable(da)
733+func addLiquidity (dg,dh,di) = valueOrElse(am(), {
734+ let ba = aF()
735+ let aW = aK()
736+ let bV = if ((Z == 0))
734737 then 0
735- else bo(aU, aY)
736- let cv = cY.payments
737- let dg = size(cv)
738- func dh (di) = if ((dg > ah))
739- then throw(("payments size > " + toString(ah)))
740- else if ((1 > dg))
738+ else bq(aW, ba)
739+ let cx = da.payments
740+ let dj = size(cx)
741+ func dk (dl) = if ((dj > ai))
742+ then throw(("payments size > " + toString(ai)))
743+ else if ((1 > dj))
741744 then throw("payments size < 1")
742- else if (if ((Y == 0))
743- then (ah != dg)
745+ else if (if ((Z == 0))
746+ then (ai != dj)
744747 else false)
745748 then throw("initial deposit requires all coins")
746749 else {
747- func dj (aK,cK) = if (containsElement(ag, cg(cK.assetId)))
750+ func dm (aM,cM) = if (containsElement(ah, ci(cM.assetId)))
748751 then true
749752 else throw("Invalid asset in payment")
750753
751- let aM = cv
752- let aN = size(aM)
753- let aO = false
754- func aP (aQ,aR) = if ((aR >= aN))
755- then aQ
756- else dj(aQ, aM[aR])
754+ let aO = cx
755+ let aP = size(aO)
756+ let aQ = false
757+ func aR (aS,aT) = if ((aT >= aP))
758+ then aS
759+ else dm(aS, aO[aT])
757760
758- func aS (aQ,aR) = if ((aR >= aN))
759- then aQ
761+ func aU (aS,aT) = if ((aT >= aP))
762+ then aS
760763 else throw("List size exceeds 10")
761764
762- aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
765+ aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
763766 }
764767
765- if (!(dh(dg)))
768+ if (!(dk(dj)))
766769 then throw()
767770 else {
768- let cF = cB()
769- if (cF._1)
770- then (cH(cF._2) ++ cI(cY.caller, cv))
771+ let cH = cD()
772+ if (cH._1)
773+ then (cJ(cH._2) ++ cK(da.caller, cx))
771774 else {
772- func cJ (aK,aL) = {
773- let dk = aK
774- let cM = dk._1
775- let an = dk._2
776- func dl (dm,cK) = if ((cg(cK.assetId) == aL))
777- then (dm + cK.amount)
778- else dm
775+ func cL (aM,aN) = {
776+ let dn = aM
777+ let cO = dn._1
778+ let ao = dn._2
779+ func do (dp,cM) = if ((ci(cM.assetId) == aN))
780+ then (dp + cM.amount)
781+ else dp
779782
780- let dn = {
781- let aM = cv
782- let aN = size(aM)
783- let aO = aU[an]
784- func aP (aQ,aR) = if ((aR >= aN))
785- then aQ
786- else dl(aQ, aM[aR])
783+ let dq = {
784+ let aO = cx
785+ let aP = size(aO)
786+ let aQ = aW[ao]
787+ func aR (aS,aT) = if ((aT >= aP))
788+ then aS
789+ else do(aS, aO[aT])
787790
788- func aS (aQ,aR) = if ((aR >= aN))
789- then aQ
791+ func aU (aS,aT) = if ((aT >= aP))
792+ then aS
790793 else throw("List size exceeds 10")
791794
792- aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
795+ aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
793796 }
794- $Tuple2((cM :+ dn), (an + 1))
797+ $Tuple2((cO :+ dq), (ao + 1))
795798 }
796799
797- let do = {
798- let aM = ag
799- let aN = size(aM)
800- let aO = $Tuple2(nil, 0)
801- func aP (aQ,aR) = if ((aR >= aN))
802- then aQ
803- else cJ(aQ, aM[aR])
800+ let dr = {
801+ let aO = ah
802+ let aP = size(aO)
803+ let aQ = $Tuple2(nil, 0)
804+ func aR (aS,aT) = if ((aT >= aP))
805+ then aS
806+ else cL(aS, aO[aT])
804807
805- func aS (aQ,aR) = if ((aR >= aN))
806- then aQ
808+ func aU (aS,aT) = if ((aT >= aP))
809+ then aS
807810 else throw("List size exceeds 10")
808811
809- aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
812+ aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
810813 }
811- let cM = do._1
812- let dp = do._2
813- if (cL(cM))
814+ let cO = dr._1
815+ let ds = dr._2
816+ if (cN(cO))
814817 then throw()
815818 else {
816- let bU = bo(cM, aY)
817- if (au((bU > bT)))
819+ let bW = bq(cO, ba)
820+ if (av((bW > bV)))
818821 then throw("D1 > D0")
819822 else {
820- let bQ = aw(cY.caller)
821- func dq (aK,dm) = {
822- let dr = aK
823- let ds = dr._1
824- let dt = dr._2
825- let an = dr._3
826- if ((Y > 0))
823+ let bS = ax(da.caller)
824+ func dt (aM,dp) = {
825+ let du = aM
826+ let dv = du._1
827+ let dw = du._2
828+ let ao = du._3
829+ if ((Z > 0))
827830 then {
828- let bR = ((fraction(aa, bQ, Z, CEILING) * ah) / (4 * (ah - 1)))
829- let du = {
830- let dv = fraction(bU, aU[an], bT)
831- let dw = if ((dv > dm))
832- then (dv - dm)
833- else (dm - dv)
834- fraction(bR, dw, Z)
831+ let bT = ((fraction(ab, bS, aa, CEILING) * ai) / (4 * (ai - 1)))
832+ let dx = {
833+ let dy = fraction(bW, aW[ao], bV)
834+ let dz = if ((dy > dp))
835+ then (dy - dp)
836+ else (dp - dy)
837+ fraction(bT, dz, aa)
835838 }
836- let dx = fraction(du, ab, Z)
837- let dy = (dm - du)
838- let dz = (dm - du)
839- let dA = (dm - aU[an])
840- let dB = (du - dx)
841- let dC = if ((dA > 0))
842- then ck((dA - du), ag[an])
843- else cw(du, ag[an])
844- if ((dC == dC))
839+ let dA = fraction(dx, ac, aa)
840+ let dB = (dp - dx)
841+ let dC = (dp - dx)
842+ let dD = (dp - aW[ao])
843+ let dE = (dx - dA)
844+ let dF = if ((dD > 0))
845+ then cm((dD - dx), ah[ao])
846+ else cy(dx, ah[ao])
847+ if ((dF == dF))
845848 then {
846- let dD = if ((dB > 0))
847- then invoke(T, "airDrop", nil, [AttachedPayment(fromBase58String(ag[an]), dB)])
849+ let dG = if ((dE > 0))
850+ then invoke(U, "airDrop", nil, [AttachedPayment(fromBase58String(ah[ao]), dE)])
848851 else 0
849- if ((dD == dD))
850- then $Tuple3((ds :+ dz), (dt ++ [ScriptTransfer(O, dx, fromBase58String(ag[an])), IntegerEntry((ag[an] + i), dy)]), (an + 1))
852+ if ((dG == dG))
853+ then $Tuple3((dv :+ dC), (dw ++ [ScriptTransfer(P, dA, fromBase58String(ah[ao])), IntegerEntry((ah[ao] + i), dB)]), (ao + 1))
851854 else throw("Strict value is not equal to itself.")
852855 }
853856 else throw("Strict value is not equal to itself.")
854857 }
855858 else {
856- let dC = ck(dm, ag[an])
857- if ((dC == dC))
858- then $Tuple3((ds :+ dm), (dt :+ IntegerEntry((ag[an] + i), dm)), (an + 1))
859+ let dF = cm(dp, ah[ao])
860+ if ((dF == dF))
861+ then $Tuple3((dv :+ dp), (dw :+ IntegerEntry((ah[ao] + i), dp)), (ao + 1))
859862 else throw("Strict value is not equal to itself.")
860863 }
861864 }
862865
863- let dE = {
864- let aM = cM
865- let aN = size(aM)
866- let aO = $Tuple3(nil, nil, 0)
867- func bj (aQ,aR) = if ((aR >= aN))
868- then aQ
869- else dq(aQ, aM[aR])
866+ let dH = {
867+ let aO = cO
868+ let aP = size(aO)
869+ let aQ = $Tuple3(nil, nil, 0)
870+ func bl (aS,aT) = if ((aT >= aP))
871+ then aS
872+ else dt(aS, aO[aT])
870873
871- func bk (aQ,aR) = if ((aR >= aN))
872- then aQ
874+ func bm (aS,aT) = if ((aT >= aP))
875+ then aS
873876 else throw("List size exceeds 10")
874877
875- bk(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
878+ bm(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
876879 }
877- let ds = dE._1
878- let dt = dE._2
879- let dF = bo(ds, aY)
880- let dG = if ((Y == 0))
881- then bU
882- else fraction(Y, (dF - bT), bT)
883- if (au((dG >= de)))
880+ let dv = dH._1
881+ let dw = dH._2
882+ let dI = bq(dv, ba)
883+ let dJ = if ((Z == 0))
884+ then bW
885+ else fraction(Z, (dI - bV), bV)
886+ if (av((dJ >= dg)))
884887 then throw("Slippage screwed you")
885- else if (df)
888+ else if (dh)
886889 then {
887- let dH = invoke(this, "reissueShare", [dG], nil)
888- if ((dH == dH))
890+ let dK = invoke(this, "reissueShare", [dJ], nil)
891+ if ((dK == dK))
889892 then {
890- let dI = invoke(S, "lockShareTokens", [toString(this)], [AttachedPayment(X, dG)])
891- if ((dI == dI))
892- then (dt :+ IntegerEntry(m, (Y + dG)))
893+ let dL = invoke(T, "lockShareTokens", [toString(this), di], [AttachedPayment(Y, dJ)])
894+ if ((dL == dL))
895+ then (dw :+ IntegerEntry(m, (Z + dJ)))
893896 else throw("Strict value is not equal to itself.")
894897 }
895898 else throw("Strict value is not equal to itself.")
896899 }
897- else (dt ++ [Reissue(X, dG, true), ScriptTransfer(cY.caller, dG, X), IntegerEntry(m, (Y + dG))])
900+ else (dw ++ [Reissue(Y, dJ, true), ScriptTransfer(da.caller, dJ, Y), IntegerEntry(m, (Z + dJ))])
898901 }
899902 }
900903 }
903906
904907
905908
906-@Callable(cY)
907-func calcMintAmount (cM,ay) = {
908- let aY = aD()
909- let aU = aI()
910- let bU = bo(cM, aY)
911- if ((Y == 0))
912- then $Tuple2(nil, bU)
909+@Callable(da)
910+func calcMintAmount (cO,az) = {
911+ let ba = aF()
912+ let aW = aK()
913+ let bW = bq(cO, ba)
914+ if ((Z == 0))
915+ then $Tuple2(nil, bW)
913916 else {
914- let bT = bo(aU, aY)
915- let bQ = aw(ay)
916- func dJ (aK,dm) = {
917- let dK = aK
918- let ds = dK._1
919- let an = dK._2
920- let bR = ((fraction(aa, bQ, Z, CEILING) * ah) / (4 * (ah - 1)))
921- let du = {
922- let dv = fraction(bU, aU[an], bT)
923- let dw = if ((dv > dm))
924- then (dv - dm)
925- else (dm - dv)
926- fraction(bR, dw, Z)
917+ let bV = bq(aW, ba)
918+ let bS = ax(az)
919+ func dM (aM,dp) = {
920+ let dN = aM
921+ let dv = dN._1
922+ let ao = dN._2
923+ let bT = ((fraction(ab, bS, aa, CEILING) * ai) / (4 * (ai - 1)))
924+ let dx = {
925+ let dy = fraction(bW, aW[ao], bV)
926+ let dz = if ((dy > dp))
927+ then (dy - dp)
928+ else (dp - dy)
929+ fraction(bT, dz, aa)
927930 }
928- let dz = (dm - du)
929- $Tuple2((ds :+ dz), (an + 1))
931+ let dC = (dp - dx)
932+ $Tuple2((dv :+ dC), (ao + 1))
930933 }
931934
932- let dL = {
933- let aM = cM
934- let aN = size(aM)
935- let aO = $Tuple2(nil, 0)
936- func aP (aQ,aR) = if ((aR >= aN))
937- then aQ
938- else dJ(aQ, aM[aR])
935+ let dO = {
936+ let aO = cO
937+ let aP = size(aO)
938+ let aQ = $Tuple2(nil, 0)
939+ func aR (aS,aT) = if ((aT >= aP))
940+ then aS
941+ else dM(aS, aO[aT])
939942
940- func aS (aQ,aR) = if ((aR >= aN))
941- then aQ
943+ func aU (aS,aT) = if ((aT >= aP))
944+ then aS
942945 else throw("List size exceeds 10")
943946
944- aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
947+ aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
945948 }
946- let ds = dL._1
947- let dp = dL._2
948- let dF = bo(ds, aY)
949- let dM = fraction(Y, (dF - bT), bT)
950- $Tuple2(nil, dM)
949+ let dv = dO._1
950+ let ds = dO._2
951+ let dI = bq(dv, ba)
952+ let dP = fraction(Z, (dI - bV), bV)
953+ $Tuple2(nil, dP)
951954 }
952955 }
953956
954957
955958
956-@Callable(cY)
957-func reissueShare (cm) = valueOrElse(ao(cY), [Reissue(X, cm, true)])
959+@Callable(da)
960+func reissueShare (co) = valueOrElse(ap(da), [Reissue(Y, co, true)])
958961
959962
960963
961-@Callable(cY)
962-func getDy (dN,dO,dP,dQ) = {
963- let aU = aI()
964- let dR = valueOrErrorMessage(indexOf(ag, dN), "unknown token in")
965- let dS = valueOrErrorMessage(indexOf(ag, dO), "unknown token out")
966- let bs = (aU[dR] + dP)
967- let bF = bp(dR, dS, bs, aU)
968- let cf = ((aU[dS] - bF) - 1)
969- let bQ = aw(Address(fromBase58String(dQ)))
970- let bR = fraction(fraction(aa, bQ, Z, CEILING), cf, Z)
971- $Tuple2(nil, $Tuple2((cf - bR), bR))
964+@Callable(da)
965+func getDy (dQ,dR,dS,dT) = {
966+ let aW = aK()
967+ let dU = valueOrErrorMessage(indexOf(ah, dQ), "unknown token in")
968+ let dV = valueOrErrorMessage(indexOf(ah, dR), "unknown token out")
969+ let bu = (aW[dU] + dS)
970+ let bH = br(dU, dV, bu, aW)
971+ let ch = ((aW[dV] - bH) - 1)
972+ let bS = ax(Address(fromBase58String(dT)))
973+ let bT = fraction(fraction(ab, bS, aa, CEILING), ch, aa)
974+ $Tuple2(nil, $Tuple2((ch - bT), bT))
972975 }
973976
974977
975978
976-@Callable(cY)
977-func exchange (dT,dU) = valueOrElse(al(), if ((size(cY.payments) != 1))
979+@Callable(da)
980+func exchange (dW,dX) = valueOrElse(am(), if ((size(da.payments) != 1))
978981 then throw("size(payments) != 1")
979982 else {
980- let cF = cB()
981- if (cF._1)
982- then (cH(cF._2) ++ cI(cY.caller, cY.payments))
983+ let cH = cD()
984+ if (cH._1)
985+ then (cJ(cH._2) ++ cK(da.caller, da.payments))
983986 else {
984- let cK = cY.payments[0]
985- let dV = cg(cK.assetId)
986- let dW = fromBase58String(dT)
987- let dP = cK.amount
988- let dR = valueOrErrorMessage(indexOf(ag, dV), "unknown token in")
989- let dS = valueOrErrorMessage(indexOf(ag, dT), "unknown token out")
990- let aU = aI()
991- let bs = (aU[dR] + dP)
992- let bF = bp(dR, dS, bs, aU)
993- let dX = ((aU[dS] - bF) - 1)
994- let bQ = aw(cY.originCaller)
995- let bR = fraction(dX, fraction(aa, bQ, Z, CEILING), Z)
996- let cf = (dX - bR)
997- let dx = fraction(bR, ab, Z)
998- if (au((cf >= dU)))
987+ let cM = da.payments[0]
988+ let dY = ci(cM.assetId)
989+ let dZ = fromBase58String(dW)
990+ let dS = cM.amount
991+ let dU = valueOrErrorMessage(indexOf(ah, dY), "unknown token in")
992+ let dV = valueOrErrorMessage(indexOf(ah, dW), "unknown token out")
993+ let aW = aK()
994+ let bu = (aW[dU] + dS)
995+ let bH = br(dU, dV, bu, aW)
996+ let ea = ((aW[dV] - bH) - 1)
997+ let bS = ax(da.originCaller)
998+ let bT = fraction(ea, fraction(ab, bS, aa, CEILING), aa)
999+ let ch = (ea - bT)
1000+ let dA = fraction(bT, ac, aa)
1001+ if (av((ch >= dX)))
9991002 then throw("Exchange resulted in fewer coins than expected")
10001003 else {
1001- func dY (aK,dZ) = {
1002- let ea = aK
1003- let cM = ea._1
1004- let an = ea._2
1005- if ((an == dR))
1006- then $Tuple2((cM :+ (dZ + dP)), (an + 1))
1007- else if ((an == dS))
1008- then $Tuple2((cM :+ (dZ - dX)), (an + 1))
1009- else $Tuple2((cM :+ dZ), (an + 1))
1004+ func eb (aM,ec) = {
1005+ let ed = aM
1006+ let cO = ed._1
1007+ let ao = ed._2
1008+ if ((ao == dU))
1009+ then $Tuple2((cO :+ (ec + dS)), (ao + 1))
1010+ else if ((ao == dV))
1011+ then $Tuple2((cO :+ (ec - ea)), (ao + 1))
1012+ else $Tuple2((cO :+ ec), (ao + 1))
10101013 }
10111014
1012- let eb = {
1013- let aM = aU
1014- let aN = size(aM)
1015- let aO = $Tuple2(nil, 0)
1016- func aP (aQ,aR) = if ((aR >= aN))
1017- then aQ
1018- else dY(aQ, aM[aR])
1015+ let ee = {
1016+ let aO = aW
1017+ let aP = size(aO)
1018+ let aQ = $Tuple2(nil, 0)
1019+ func aR (aS,aT) = if ((aT >= aP))
1020+ then aS
1021+ else eb(aS, aO[aT])
10191022
1020- func aS (aQ,aR) = if ((aR >= aN))
1021- then aQ
1023+ func aU (aS,aT) = if ((aT >= aP))
1024+ then aS
10221025 else throw("List size exceeds 10")
10231026
1024- aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
1027+ aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
10251028 }
1026- let cM = eb._1
1027- let an = eb._2
1028- if (cL(cM))
1029+ let cO = ee._1
1030+ let ao = ee._2
1031+ if (cN(cO))
10291032 then throw()
10301033 else {
1031- let dI = ck(cK.amount, cg(cK.assetId))
1032- if ((dI == dI))
1034+ let dL = cm(cM.amount, ci(cM.assetId))
1035+ if ((dL == dL))
10331036 then {
1034- let ec = cw(dX, dT)
1035- if ((ec == ec))
1037+ let ef = cy(ea, dW)
1038+ if ((ef == ef))
10361039 then {
1037- let dB = (bR - dx)
1038- let dD = if ((dB > 0))
1039- then invoke(T, "airDrop", nil, [AttachedPayment(dW, dB)])
1040+ let dE = (bT - dA)
1041+ let dG = if ((dE > 0))
1042+ then invoke(U, "airDrop", nil, [AttachedPayment(dZ, dE)])
10401043 else 0
1041- if ((dD == dD))
1042- then $Tuple2([IntegerEntry((dV + i), bs), IntegerEntry((dT + i), (aU[dS] - dX)), ScriptTransfer(cY.caller, cf, dW), ScriptTransfer(O, dx, dW)], [cf, dW])
1044+ if ((dG == dG))
1045+ then $Tuple2([IntegerEntry((dY + i), bu), IntegerEntry((dW + i), (aW[dV] - ea)), ScriptTransfer(da.caller, ch, dZ), ScriptTransfer(P, dA, dZ)], [ch, dZ])
10431046 else throw("Strict value is not equal to itself.")
10441047 }
10451048 else throw("Strict value is not equal to itself.")
10521055
10531056
10541057
1055-@Callable(cY)
1056-func withdraw (ed) = valueOrElse(al(), if ((size(cY.payments) != 1))
1058+@Callable(da)
1059+func withdraw (eg) = valueOrElse(am(), if ((size(da.payments) != 1))
10571060 then throw("size(payments) != 1")
10581061 else {
1059- let ee = cY.payments[0].amount
1060- let ef = cY.payments[0].assetId
1061- if ((X != ef))
1062+ let eh = da.payments[0].amount
1063+ let ei = da.payments[0].assetId
1064+ if ((Y != ei))
10621065 then throw("unknown payment token")
10631066 else {
1064- let cF = cB()
1065- if (cF._1)
1066- then (cH(cF._2) ++ cI(cY.originCaller, cY.payments))
1067+ let cH = cD()
1068+ if (cH._1)
1069+ then (cJ(cH._2) ++ cK(da.originCaller, da.payments))
10671070 else {
1068- func dq (aK,eg) = {
1069- let eh = aK
1070- let dt = eh._1
1071- let an = eh._2
1072- let ei = fraction(eg, ee, Y)
1073- if (au((ei >= ed[an])))
1071+ func dt (aM,ej) = {
1072+ let ek = aM
1073+ let dw = ek._1
1074+ let ao = ek._2
1075+ let el = fraction(ej, eh, Z)
1076+ if (av((el >= eg[ao])))
10741077 then throw("Withdrawal resulted in fewer coins than expected")
10751078 else {
1076- let ec = cw(ei, ag[an])
1077- if ((ec == ec))
1078- then $Tuple2((dt ++ [IntegerEntry((ag[an] + i), (eg - ei)), ScriptTransfer(cY.originCaller, ei, fromBase58String(ag[an]))]), (an + 1))
1079+ let ef = cy(el, ah[ao])
1080+ if ((ef == ef))
1081+ then $Tuple2((dw ++ [IntegerEntry((ah[ao] + i), (ej - el)), ScriptTransfer(da.originCaller, el, fromBase58String(ah[ao]))]), (ao + 1))
10791082 else throw("Strict value is not equal to itself.")
10801083 }
10811084 }
10821085
1083- let ej = {
1084- let aM = aI()
1085- let aN = size(aM)
1086- let aO = $Tuple2(nil, 0)
1087- func aP (aQ,aR) = if ((aR >= aN))
1088- then aQ
1089- else dq(aQ, aM[aR])
1086+ let em = {
1087+ let aO = aK()
1088+ let aP = size(aO)
1089+ let aQ = $Tuple2(nil, 0)
1090+ func aR (aS,aT) = if ((aT >= aP))
1091+ then aS
1092+ else dt(aS, aO[aT])
10901093
1091- func aS (aQ,aR) = if ((aR >= aN))
1092- then aQ
1094+ func aU (aS,aT) = if ((aT >= aP))
1095+ then aS
10931096 else throw("List size exceeds 10")
10941097
1095- aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
1098+ aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
10961099 }
1097- let dt = ej._1
1098- let an = ej._2
1099- (dt ++ [Burn(X, ee), IntegerEntry(m, (Y - ee))])
1100+ let dw = em._1
1101+ let ao = em._2
1102+ (dw ++ [Burn(Y, eh), IntegerEntry(m, (Z - eh))])
11001103 }
11011104 }
11021105 })
11031106
11041107
11051108
1106-@Callable(cY)
1107-func withdrawWithUnlock (ed,ek) = valueOrElse(al(), if ((0 >= ek))
1109+@Callable(da)
1110+func withdrawWithUnlock (eg,en) = valueOrElse(am(), if ((0 >= en))
11081111 then throw("Unlock amount must be positive")
11091112 else {
1110- let cF = cB()
1111- if (cF._1)
1112- then (cH(cF._2) ++ cI(cY.caller, cY.payments))
1113+ let cH = cD()
1114+ if (cH._1)
1115+ then (cJ(cH._2) ++ cK(da.caller, da.payments))
11131116 else {
1114- let ee = if ((size(cY.payments) > 0))
1115- then if ((size(cY.payments) != 1))
1117+ let eh = if ((size(da.payments) > 0))
1118+ then if ((size(da.payments) != 1))
11161119 then throw("size(payments) != 1")
11171120 else {
1118- let ef = cY.payments[0].assetId
1119- if ((X != ef))
1121+ let ei = da.payments[0].assetId
1122+ if ((Y != ei))
11201123 then throw("unknown payment token")
1121- else cY.payments[0].amount
1124+ else da.payments[0].amount
11221125 }
11231126 else 0
1124- let el = invoke(S, "withdrawShareTokens", [toString(this), ek], nil)
1125- if ((el == el))
1127+ let eo = invoke(T, "withdrawShareTokens", [toString(this), en], nil)
1128+ if ((eo == eo))
11261129 then {
1127- let em = (ee + ek)
1128- let dC = invoke(this, "withdraw", [ed], [AttachedPayment(X, em)])
1129- if ((dC == dC))
1130+ let ep = (eh + en)
1131+ let dF = invoke(this, "withdraw", [eg], [AttachedPayment(Y, ep)])
1132+ if ((dF == dF))
11301133 then nil
11311134 else throw("Strict value is not equal to itself.")
11321135 }
11361139
11371140
11381141
1139-@Callable(cY)
1140-func calcWithdrawOneCoin (en,dT,ay) = if ((0 >= en))
1142+@Callable(da)
1143+func calcWithdrawOneCoin (eq,dW,az) = if ((0 >= eq))
11411144 then throw("Amount must be positive")
11421145 else {
1143- let an = valueOrErrorMessage(indexOf(ag, dT), "unknown token out")
1144- $Tuple2(nil, bN(aI(), en, an, Address(fromBase58String(ay)))._1)
1146+ let ao = valueOrErrorMessage(indexOf(ah, dW), "unknown token out")
1147+ $Tuple2(nil, bP(aK(), eq, ao, Address(fromBase58String(az)))._1)
11451148 }
11461149
11471150
11481151
1149-@Callable(cY)
1150-func withdrawOneCoin (dT,eo) = valueOrElse(al(), if ((size(cY.payments) != 1))
1152+@Callable(da)
1153+func withdrawOneCoin (dW,er) = valueOrElse(am(), if ((size(da.payments) != 1))
11511154 then throw("size(payments) != 1")
11521155 else {
1153- let cF = cB()
1154- if (cF._1)
1155- then (cH(cF._2) ++ cI(cY.originCaller, cY.payments))
1156+ let cH = cD()
1157+ if (cH._1)
1158+ then (cJ(cH._2) ++ cK(da.originCaller, da.payments))
11561159 else {
1157- let ee = cY.payments[0].amount
1158- let ef = cY.payments[0].assetId
1159- if ((ef != X))
1160+ let eh = da.payments[0].amount
1161+ let ei = da.payments[0].assetId
1162+ if ((ei != Y))
11601163 then throw("unknown token")
11611164 else {
1162- let ep = valueOrErrorMessage(indexOf(ag, dT), "unknown token out")
1163- let dW = fromBase58String(dT)
1164- let aU = aI()
1165- let eq = bN(aU, ee, ep, cY.originCaller)
1166- let cf = eq._1
1167- let er = eq._2
1168- if (au((cf >= eo)))
1165+ let es = valueOrErrorMessage(indexOf(ah, dW), "unknown token out")
1166+ let dZ = fromBase58String(dW)
1167+ let aW = aK()
1168+ let et = bP(aW, eh, es, da.originCaller)
1169+ let ch = et._1
1170+ let eu = et._2
1171+ if (av((ch >= er)))
11691172 then throw("Not enough coins removed")
11701173 else {
1171- let dx = fraction(er, ab, Z)
1172- let es = (cf + er)
1173- func dY (aK,dZ) = {
1174- let et = aK
1175- let cM = et._1
1176- let an = et._2
1177- if ((an == ep))
1178- then $Tuple2((cM :+ (dZ - es)), (an + 1))
1179- else $Tuple2((cM :+ dZ), (an + 1))
1174+ let dA = fraction(eu, ac, aa)
1175+ let ev = (ch + eu)
1176+ func eb (aM,ec) = {
1177+ let ew = aM
1178+ let cO = ew._1
1179+ let ao = ew._2
1180+ if ((ao == es))
1181+ then $Tuple2((cO :+ (ec - ev)), (ao + 1))
1182+ else $Tuple2((cO :+ ec), (ao + 1))
11801183 }
11811184
1182- let eu = {
1183- let aM = aU
1184- let aN = size(aM)
1185- let aO = $Tuple2(nil, 0)
1186- func aP (aQ,aR) = if ((aR >= aN))
1187- then aQ
1188- else dY(aQ, aM[aR])
1185+ let ex = {
1186+ let aO = aW
1187+ let aP = size(aO)
1188+ let aQ = $Tuple2(nil, 0)
1189+ func aR (aS,aT) = if ((aT >= aP))
1190+ then aS
1191+ else eb(aS, aO[aT])
11891192
1190- func aS (aQ,aR) = if ((aR >= aN))
1191- then aQ
1193+ func aU (aS,aT) = if ((aT >= aP))
1194+ then aS
11921195 else throw("List size exceeds 10")
11931196
1194- aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
1197+ aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
11951198 }
1196- let cM = eu._1
1197- let ev = eu._2
1198- if (cL(cM))
1199+ let cO = ex._1
1200+ let ey = ex._2
1201+ if (cN(cO))
11991202 then throw()
12001203 else {
1201- let ec = cw(es, dT)
1202- if ((ec == ec))
1204+ let ef = cy(ev, dW)
1205+ if ((ef == ef))
12031206 then {
1204- let dB = (er - dx)
1205- let dD = if ((dB > 0))
1206- then invoke(T, "airDrop", nil, [AttachedPayment(dW, dB)])
1207+ let dE = (eu - dA)
1208+ let dG = if ((dE > 0))
1209+ then invoke(U, "airDrop", nil, [AttachedPayment(dZ, dE)])
12071210 else 0
1208- if ((dD == dD))
1209- then [ScriptTransfer(cY.originCaller, cf, dW), IntegerEntry((ag[ep] + i), (aU[ep] - es)), Burn(X, ee), ScriptTransfer(O, dx, dW), IntegerEntry(m, (Y - ee))]
1211+ if ((dG == dG))
1212+ then [ScriptTransfer(da.originCaller, ch, dZ), IntegerEntry((ah[es] + i), (aW[es] - ev)), Burn(Y, eh), ScriptTransfer(P, dA, dZ), IntegerEntry(m, (Z - eh))]
12101213 else throw("Strict value is not equal to itself.")
12111214 }
12121215 else throw("Strict value is not equal to itself.")
12181221
12191222
12201223
1221-@Callable(cY)
1222-func withdrawOneCoinWithUnlock (dT,eo,ek) = valueOrElse(al(), if ((0 >= ek))
1224+@Callable(da)
1225+func withdrawOneCoinWithUnlock (dW,er,en) = valueOrElse(am(), if ((0 >= en))
12231226 then throw("Unlock amount must be positive")
12241227 else {
1225- let cF = cB()
1226- if (cF._1)
1227- then (cH(cF._2) ++ cI(cY.caller, cY.payments))
1228+ let cH = cD()
1229+ if (cH._1)
1230+ then (cJ(cH._2) ++ cK(da.caller, da.payments))
12281231 else {
1229- let ee = if ((size(cY.payments) > 0))
1230- then if ((size(cY.payments) != 1))
1232+ let eh = if ((size(da.payments) > 0))
1233+ then if ((size(da.payments) != 1))
12311234 then throw("size(payments) != 1")
12321235 else {
1233- let ef = cY.payments[0].assetId
1234- if ((X != ef))
1236+ let ei = da.payments[0].assetId
1237+ if ((Y != ei))
12351238 then throw("unknown payment token")
1236- else cY.payments[0].amount
1239+ else da.payments[0].amount
12371240 }
12381241 else 0
1239- let el = invoke(S, "withdrawShareTokens", [toString(this), ek], nil)
1240- if ((el == el))
1242+ let eo = invoke(T, "withdrawShareTokens", [toString(this), en], nil)
1243+ if ((eo == eo))
12411244 then {
1242- let em = (ee + ek)
1243- let dC = invoke(this, "withdrawOneCoin", [dT, eo], [AttachedPayment(X, em)])
1244- if ((dC == dC))
1245+ let ep = (eh + en)
1246+ let dF = invoke(this, "withdrawOneCoin", [dW, er], [AttachedPayment(Y, ep)])
1247+ if ((dF == dF))
12451248 then nil
12461249 else throw("Strict value is not equal to itself.")
12471250 }
12511254
12521255
12531256
1254-@Callable(cY)
1255-func A () = $Tuple2(nil, aD())
1257+@Callable(da)
1258+func A () = $Tuple2(nil, aF())
12561259
12571260
12581261
1259-@Callable(cY)
1262+@Callable(da)
12601263 func getVirtualPrice () = {
1261- let bl = aX(aI(), aD())
1262- $Tuple2(nil, fraction(bl, a, Y))
1264+ let bn = aZ(aK(), aF())
1265+ $Tuple2(nil, fraction(bn, a, Z))
12631266 }
12641267
12651268
12661269
1267-@Callable(cY)
1268-func calcTokenAmount (ew,ex) = {
1269- let aY = aD()
1270- let ey = aI()
1271- let bT = bo(ey, aY)
1272- func ez (aK,eg) = {
1273- let eA = aK
1274- let cM = eA._1
1275- let an = eA._2
1276- let dm = (eg + (if (ex)
1277- then ew[an]
1278- else -(ew[an])))
1279- $Tuple2((cM :+ dm), (an + 1))
1270+@Callable(da)
1271+func calcTokenAmount (ez,eA) = {
1272+ let ba = aF()
1273+ let eB = aK()
1274+ let bV = bq(eB, ba)
1275+ func eC (aM,ej) = {
1276+ let eD = aM
1277+ let cO = eD._1
1278+ let ao = eD._2
1279+ let dp = (ej + (if (eA)
1280+ then ez[ao]
1281+ else -(ez[ao])))
1282+ $Tuple2((cO :+ dp), (ao + 1))
12801283 }
12811284
1282- let cM = ( let aM = ey
1283- let aN = size(aM)
1284- let aO = $Tuple2(nil, 0)
1285- func aP (aQ,aR) = if ((aR >= aN))
1286- then aQ
1287- else ez(aQ, aM[aR])
1285+ let cO = ( let aO = eB
1286+ let aP = size(aO)
1287+ let aQ = $Tuple2(nil, 0)
1288+ func aR (aS,aT) = if ((aT >= aP))
1289+ then aS
1290+ else eC(aS, aO[aT])
12881291
1289- func aS (aQ,aR) = if ((aR >= aN))
1290- then aQ
1292+ func aU (aS,aT) = if ((aT >= aP))
1293+ then aS
12911294 else throw("List size exceeds 10")
12921295
1293- aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10))._1
1294- let bU = bo(cM, aY)
1295- let eB = if (ex)
1296- then (bU - bT)
1297- else (bT - bU)
1298- $Tuple2(nil, fraction(eB, Y, bT))
1296+ aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10))._1
1297+ let bW = bq(cO, ba)
1298+ let eE = if (eA)
1299+ then (bW - bV)
1300+ else (bV - bW)
1301+ $Tuple2(nil, fraction(eE, Z, bV))
12991302 }
13001303
13011304
13021305
1303-@Callable(cY)
1304-func rampA (eC,eD) = valueOrElse(al(), valueOrElse(am(cY), if (au((at >= (ae + e))))
1306+@Callable(da)
1307+func rampA (eF,eG) = valueOrElse(am(), valueOrElse(an(da), if (av((au >= (af + e))))
13051308 then throw("too often")
1306- else if (au((eD >= (at + e))))
1309+ else if (av((eG >= (au + e))))
13071310 then throw("insufficient time")
13081311 else {
1309- let eE = aD()
1310- if (au(if ((eC > 0))
1311- then (b > eC)
1312+ let eH = aF()
1313+ if (av(if ((eF > 0))
1314+ then (b > eF)
13121315 else false))
13131316 then throw("out of base range")
1314- else if (au(if (if ((eC >= eE))
1315- then ((eE * c) >= eC)
1317+ else if (av(if (if ((eF >= eH))
1318+ then ((eH * c) >= eF)
13161319 else false)
13171320 then true
1318- else if ((eE > eC))
1319- then ((eC * c) >= eE)
1321+ else if ((eH > eF))
1322+ then ((eF * c) >= eH)
13201323 else false))
13211324 then throw("out of range")
1322- else [IntegerEntry("initial_A", eE), IntegerEntry("future_A", eC), IntegerEntry("initial_A_time", at), IntegerEntry("future_A_time", eD)]
1325+ else [IntegerEntry("initial_A", eH), IntegerEntry("future_A", eF), IntegerEntry("initial_A_time", au), IntegerEntry("future_A_time", eG)]
13231326 }))
13241327
13251328
13261329
1327-@Callable(cY)
1328-func stopRampA () = valueOrElse(al(), valueOrElse(am(cY), {
1329- let eF = aD()
1330-[IntegerEntry("initial_A", eF), IntegerEntry("future_A", eF), IntegerEntry("initial_A_time", at), IntegerEntry("future_A_time", at)]
1330+@Callable(da)
1331+func stopRampA () = valueOrElse(am(), valueOrElse(an(da), {
1332+ let eI = aF()
1333+[IntegerEntry("initial_A", eI), IntegerEntry("future_A", eI), IntegerEntry("initial_A_time", au), IntegerEntry("future_A_time", au)]
13311334 }))
13321335
13331336
13341337
1335-@Callable(cY)
1336-func shutdown () = valueOrElse(am(cY), if (!(W))
1338+@Callable(da)
1339+func shutdown () = valueOrElse(an(da), if (!(X))
13371340 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, k), "the cause wasn't specified")))
1338- else ai("Paused by admin"))
1341+ else aj("Paused by admin"))
13391342
13401343
13411344
1342-@Callable(cY)
1343-func activate () = valueOrElse(am(cY), if (W)
1344- then ak()
1345+@Callable(da)
1346+func activate () = valueOrElse(an(da), if (X)
1347+ then al()
13451348 else [BooleanEntry(j, true), DeleteEntry(k)])
13461349
13471350
13481351
1349-@Callable(cY)
1350-func takeIntoAccountExtraFunds () = valueOrElse(al(), if ((cY.caller != O))
1352+@Callable(da)
1353+func takeIntoAccountExtraFunds () = valueOrElse(am(), if ((da.caller != P))
13511354 then throw("Only the wallet can call this function")
13521355 else {
1353- let ey = aI()
1354- func eG (aK,aL) = {
1355- let eH = aK
1356- let eI = eH._1
1357- let an = eH._2
1358- let eJ = fromBase58String(aL)
1359- let eK = (assetBalance(this, eJ) + cy(eJ))
1360- let eL = (eK - ey[an])
1361- if ((0 > eL))
1362- then ai(("Enroll amount negative for asset" + aL))
1356+ let eB = aK()
1357+ func eJ (aM,aN) = {
1358+ let eK = aM
1359+ let eL = eK._1
1360+ let ao = eK._2
1361+ let eM = fromBase58String(aN)
1362+ let eN = (assetBalance(this, eM) + cA(eM))
1363+ let eO = (eN - eB[ao])
1364+ if ((0 > eO))
1365+ then aj(("Enroll amount negative for asset" + aN))
13631366 else {
1364- let dD = if ((eL > 0))
1365- then invoke(T, "airDrop", nil, [AttachedPayment(eJ, eL)])
1367+ let dG = if ((eO > 0))
1368+ then invoke(U, "airDrop", nil, [AttachedPayment(eM, eO)])
13661369 else 0
1367- if ((dD == dD))
1368- then $Tuple2((eI + eL), (an + 1))
1370+ if ((dG == dG))
1371+ then $Tuple2((eL + eO), (ao + 1))
13691372 else throw("Strict value is not equal to itself.")
13701373 }
13711374 }
13721375
1373- let dp = {
1374- let aM = ag
1375- let aN = size(aM)
1376- let aO = $Tuple2(0, 0)
1377- func aP (aQ,aR) = if ((aR >= aN))
1378- then aQ
1379- else eG(aQ, aM[aR])
1376+ let ds = {
1377+ let aO = ah
1378+ let aP = size(aO)
1379+ let aQ = $Tuple2(0, 0)
1380+ func aR (aS,aT) = if ((aT >= aP))
1381+ then aS
1382+ else eJ(aS, aO[aT])
13801383
1381- func aS (aQ,aR) = if ((aR >= aN))
1382- then aQ
1384+ func aU (aS,aT) = if ((aT >= aP))
1385+ then aS
13831386 else throw("List size exceeds 10")
13841387
1385- aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
1388+ aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
13861389 }
1387- if ((dp._1 == 0))
1390+ if ((ds._1 == 0))
13881391 then throw("No money to take")
13891392 else nil
13901393 })
13911394
13921395
1393-@Verifier(eM)
1394-func eN () = {
1395- let eO = {
1396- let eP = if (sigVerify(eM.bodyBytes, eM.proofs[0], K))
1396+@Verifier(eP)
1397+func eQ () = {
1398+ let eR = {
1399+ let eS = if (sigVerify(eP.bodyBytes, eP.proofs[0], L))
13971400 then 1
13981401 else 0
1399- let eQ = if (sigVerify(eM.bodyBytes, eM.proofs[1], L))
1402+ let eT = if (sigVerify(eP.bodyBytes, eP.proofs[1], M))
14001403 then 1
14011404 else 0
1402- let eR = if (sigVerify(eM.bodyBytes, eM.proofs[2], M))
1405+ let eU = if (sigVerify(eP.bodyBytes, eP.proofs[2], N))
14031406 then 1
14041407 else 0
1405- (((eP + eQ) + eR) >= 2)
1408+ (((eS + eT) + eU) >= 2)
14061409 }
1407- let H = eM
1408- if ($isInstanceOf(H, "InvokeScriptTransaction"))
1410+ let I = eP
1411+ if ($isInstanceOf(I, "InvokeScriptTransaction"))
14091412 then {
1410- let dC = H
1411- let eS = if ((dC.dApp == this))
1412- then (dC.function == "takeIntoAccountExtraFunds")
1413+ let dF = I
1414+ let eV = if ((dF.dApp == this))
1415+ then (dF.function == "takeIntoAccountExtraFunds")
14131416 else false
1414- let eT = if (if (if (sigVerify(eM.bodyBytes, eM.proofs[0], K))
1417+ let eW = if (if (if (sigVerify(eP.bodyBytes, eP.proofs[0], L))
14151418 then true
1416- else sigVerify(eM.bodyBytes, eM.proofs[0], L))
1419+ else sigVerify(eP.bodyBytes, eP.proofs[0], M))
14171420 then true
1418- else sigVerify(eM.bodyBytes, eM.proofs[0], M))
1421+ else sigVerify(eP.bodyBytes, eP.proofs[0], N))
14191422 then true
1420- else sigVerify(eM.bodyBytes, eM.proofs[0], N)
1421- if (if (eS)
1422- then eT
1423+ else sigVerify(eP.bodyBytes, eP.proofs[0], O)
1424+ if (if (eV)
1425+ then eW
14231426 else false)
14241427 then true
1425- else eO
1428+ else eR
14261429 }
1427- else eO
1430+ else eR
14281431 }
14291432
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = 1000000
55
66 let b = 1000000
77
88 let c = 10
99
1010 let d = 6
1111
1212 let e = (86400 / 60)
1313
1414 let f = "3.0.0"
1515
1616 let g = "version"
1717
1818 let h = "asset_ids"
1919
2020 let i = "_balance"
2121
2222 let j = "active"
2323
2424 let k = "shutdown_cause"
2525
2626 let l = "share_asset_id"
2727
2828 let m = "share_asset_supply"
2929
3030 let n = "commission"
3131
3232 let o = "dAppThresholdCoef"
3333
3434 let p = "staking_usdnnsbt_address"
3535
3636 let q = "discounts"
3737
3838 let r = "discount_values"
3939
4040 let s = "_SWOP_amount"
4141
42-let t = "admin_pub_1"
42+let t = "_GSwop_amount"
4343
44-let u = "admin_pub_2"
44+let u = "admin_pub_1"
4545
46-let v = "admin_pub_3"
46+let v = "admin_pub_2"
4747
48-let w = "admin_invoke_pub"
48+let w = "admin_pub_3"
4949
50-let x = "money_box_address"
50+let x = "admin_invoke_pub"
5151
52-let y = "governance_address"
52+let y = "money_box_address"
5353
54-let z = "voting_address"
54+let z = "governance_address"
5555
56-let B = "farming_address"
56+let B = "voting_address"
5757
58-let C = "lp_farming"
58+let C = "farming_address"
5959
60-let E = Address(base58'3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz')
60+let E = "lp_farming"
6161
62-func F (G) = {
63- let H = getString(E, G)
64- if ($isInstanceOf(H, "String"))
62+let F = Address(base58'3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz')
63+
64+func G (H) = {
65+ let I = getString(F, H)
66+ if ($isInstanceOf(I, "String"))
6567 then {
66- let I = H
67- fromBase58String(I)
68+ let J = I
69+ fromBase58String(J)
6870 }
6971 else {
70- let J = H
71- throw((G + "is empty"))
72+ let K = I
73+ throw((H + "is empty"))
7274 }
7375 }
7476
7577
76-let K = F(t)
78+let L = G(u)
7779
78-let L = F(u)
80+let M = G(v)
7981
80-let M = F(v)
82+let N = G(w)
8183
82-let N = F(w)
84+let O = G(x)
8385
84-let O = Address(F(x))
86+let P = Address(G(y))
8587
86-let P = Address(F(y))
88+let Q = Address(G(z))
8789
88-let Q = Address(F(p))
90+let R = Address(G(p))
8991
90-let R = Address(F(z))
92+let S = Address(G(B))
9193
92-let S = Address(F(B))
94+let T = Address(G(C))
9395
94-let T = Address(F(C))
96+let U = Address(G(E))
9597
96-let U = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
98+let V = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
9799
98-let V = [toBase58String(U)]
100+let W = [toBase58String(V)]
99101
100-let W = getBooleanValue(this, j)
102+let X = getBooleanValue(this, j)
101103
102-let X = fromBase58String(getStringValue(this, l))
104+let Y = fromBase58String(getStringValue(this, l))
103105
104-let Y = getIntegerValue(this, m)
106+let Z = getIntegerValue(this, m)
105107
106-let Z = 1000000
108+let aa = 1000000
107109
108-let aa = getIntegerValue(this, n)
110+let ab = getIntegerValue(this, n)
109111
110-let ab = fraction(40, Z, 100)
112+let ac = fraction(40, aa, 100)
111113
112-let ac = getIntegerValue(this, "initial_A")
114+let ad = getIntegerValue(this, "initial_A")
113115
114-let ad = getIntegerValue(this, "future_A")
116+let ae = getIntegerValue(this, "future_A")
115117
116-let ae = valueOrElse(getInteger(this, "initial_A_time"), 0)
118+let af = valueOrElse(getInteger(this, "initial_A_time"), 0)
117119
118-let af = valueOrElse(getInteger(this, "future_A_time"), 0)
120+let ag = valueOrElse(getInteger(this, "future_A_time"), 0)
119121
120-let ag = split(getStringValue(this, h), ",")
122+let ah = split(getStringValue(this, h), ",")
121123
122-let ah = size(ag)
124+let ai = size(ah)
123125
124-func ai (aj) = [BooleanEntry(j, false), StringEntry(k, aj)]
126+func aj (ak) = [BooleanEntry(j, false), StringEntry(k, ak)]
125127
126128
127-func ak () = throw("DApp is already active")
129+func al () = throw("DApp is already active")
128130
129131
130-func al () = if (W)
132+func am () = if (X)
131133 then unit
132134 else throw("DApp is inactive at this moment")
133135
134136
135-func am (an) = if (containsElement([K, L, M], an.callerPublicKey))
137+func an (ao) = if (containsElement([L, M, N], ao.callerPublicKey))
136138 then unit
137139 else throw("Only admin can call this function")
138140
139141
140-func ao (an) = if ((this == an.caller))
142+func ap (ao) = if ((this == ao.caller))
141143 then unit
142144 else throw("Only contract itself can call this function")
143145
144146
145-let ap = toBigInt(2)
147+let aq = toBigInt(2)
146148
147-let aq = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
149+let ar = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
148150
149-let ar = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
151+let as = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
150152
151-let as = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
153+let at = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
152154
153-let at = height
155+let au = height
154156
155-func au (av) = if (av)
157+func av (aw) = if (aw)
156158 then false
157159 else true
158160
159161
160-func aw (ax) = {
161- let ay = {
162- let H = ax
163- if ($isInstanceOf(H, "Address"))
162+func ax (ay) = {
163+ let az = {
164+ let I = ay
165+ if ($isInstanceOf(I, "Address"))
164166 then {
165- let az = H
166- toString(az)
167+ let aA = I
168+ toString(aA)
167169 }
168- else if ($isInstanceOf(H, "String"))
170+ else if ($isInstanceOf(I, "String"))
169171 then {
170- let az = H
171- az
172+ let aA = I
173+ aA
172174 }
173175 else throw("Unknow type of user Addr")
174176 }
175- let aA = valueOrElse(getInteger(P, (ay + s)), 0)
176- let aB = split(getStringValue(E, r), ",")
177- let aC = split(getStringValue(E, q), ",")
178- if (if ((aA >= parseIntValue(aB[0])))
179- then (parseIntValue(aB[1]) > aA)
177+ let aB = valueOrElse(getInteger(Q, (az + t)), 0)
178+ let aC = valueOrElse(getInteger(Q, (az + t)), aB)
179+ let aD = split(getStringValue(F, r), ",")
180+ let aE = split(getStringValue(F, q), ",")
181+ if (if ((aC >= parseIntValue(aD[0])))
182+ then (parseIntValue(aD[1]) > aC)
180183 else false)
181- then (Z - parseIntValue(aC[0]))
182- else if (if ((aA >= parseIntValue(aB[1])))
183- then (parseIntValue(aB[2]) > aA)
184+ then (aa - parseIntValue(aE[0]))
185+ else if (if ((aC >= parseIntValue(aD[1])))
186+ then (parseIntValue(aD[2]) > aC)
184187 else false)
185- then (Z - parseIntValue(aC[1]))
186- else if (if ((aA >= parseIntValue(aB[2])))
187- then (parseIntValue(aB[3]) > aA)
188+ then (aa - parseIntValue(aE[1]))
189+ else if (if ((aC >= parseIntValue(aD[2])))
190+ then (parseIntValue(aD[3]) > aC)
188191 else false)
189- then (Z - parseIntValue(aC[2]))
190- else if (if ((aA >= parseIntValue(aB[3])))
191- then (parseIntValue(aB[4]) > aA)
192+ then (aa - parseIntValue(aE[2]))
193+ else if (if ((aC >= parseIntValue(aD[3])))
194+ then (parseIntValue(aD[4]) > aC)
192195 else false)
193- then (Z - parseIntValue(aC[3]))
194- else if ((aA >= parseIntValue(aB[4])))
195- then (Z - parseIntValue(aC[4]))
196- else Z
196+ then (aa - parseIntValue(aE[3]))
197+ else if ((aC >= parseIntValue(aD[4])))
198+ then (aa - parseIntValue(aE[4]))
199+ else aa
197200 }
198201
199202
200-func aD () = {
201- let aE = af
202- let aF = ad
203- if ((aE > at))
203+func aF () = {
204+ let aG = ag
205+ let aH = ae
206+ if ((aG > au))
204207 then {
205- let aG = ac
206- let aH = ae
207- if ((aF > aG))
208- then (aG + (((aF - aG) * (at - aH)) / (aE - aH)))
209- else (aG - (((aG - aF) * (at - aH)) / (aE - aH)))
208+ let aI = ad
209+ let aJ = af
210+ if ((aH > aI))
211+ then (aI + (((aH - aI) * (au - aJ)) / (aG - aJ)))
212+ else (aI - (((aI - aH) * (au - aJ)) / (aG - aJ)))
210213 }
211- else aF
214+ else aH
212215 }
213216
214217
215-func aI () = {
216- func aJ (aK,aL) = (aK :+ valueOrElse(getInteger(this, (aL + i)), 0))
218+func aK () = {
219+ func aL (aM,aN) = (aM :+ valueOrElse(getInteger(this, (aN + i)), 0))
217220
218- let aM = ag
219- let aN = size(aM)
220- let aO = nil
221- func aP (aQ,aR) = if ((aR >= aN))
222- then aQ
223- else aJ(aQ, aM[aR])
221+ let aO = ah
222+ let aP = size(aO)
223+ let aQ = nil
224+ func aR (aS,aT) = if ((aT >= aP))
225+ then aS
226+ else aL(aS, aO[aT])
224227
225- func aS (aQ,aR) = if ((aR >= aN))
226- then aQ
228+ func aU (aS,aT) = if ((aT >= aP))
229+ then aS
227230 else throw("List size exceeds 10")
228231
229- aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
232+ aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
230233 }
231234
232235
233-func aT (aU) = aU
236+func aV (aW) = aW
234237
235238
236-func aV (aK,aW) = (aK + aW)
239+func aX (aM,aY) = (aM + aY)
237240
238241
239-func aX (aU,aY) = {
240- let aZ = invoke(this, "D", [aU, aY], nil)
241- if ($isInstanceOf(aZ, "Int"))
242- then aZ
243- else throw(($getType(aZ) + " couldn't be cast to Int"))
242+func aZ (aW,ba) = {
243+ let bb = invoke(this, "D", [aW, ba], nil)
244+ if ($isInstanceOf(bb, "Int"))
245+ then bb
246+ else throw(($getType(bb) + " couldn't be cast to Int"))
244247 }
245248
246249
247-func ba (aU,aY) = {
248- let bb = {
249- let aM = aU
250- let aN = size(aM)
251- let aO = 0
252- func aP (aQ,aR) = if ((aR >= aN))
253- then aQ
254- else aV(aQ, aM[aR])
250+func bc (aW,ba) = {
251+ let bd = {
252+ let aO = aW
253+ let aP = size(aO)
254+ let aQ = 0
255+ func aR (aS,aT) = if ((aT >= aP))
256+ then aS
257+ else aX(aS, aO[aT])
255258
256- func aS (aQ,aR) = if ((aR >= aN))
257- then aQ
259+ func aU (aS,aT) = if ((aT >= aP))
260+ then aS
258261 else throw("List size exceeds 10")
259262
260- aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
263+ aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
261264 }
262- if ((bb == 0))
265+ if ((bd == 0))
263266 then 0
264267 else {
265- let bc = (aY * ah)
266- let bd = (toBigInt(bc) * toBigInt(bb))
267- let be = toBigInt((bc - 1))
268- func bf (aK,an) = if ((aK._2 == true))
269- then aK
268+ let be = (ba * ai)
269+ let bf = (toBigInt(be) * toBigInt(bd))
270+ let bg = toBigInt((be - 1))
271+ func bh (aM,ao) = if ((aM._2 == true))
272+ then aM
270273 else {
271- let bg = aK._1
272- func bh (bi,an) = if ((ah > an))
273- then ((bi * bg) / (toBigInt(aU[an]) * toBigInt(ah)))
274- else bi
274+ let bi = aM._1
275+ func bj (bk,ao) = if ((ai > ao))
276+ then ((bk * bi) / (toBigInt(aW[ao]) * toBigInt(ai)))
277+ else bk
275278
276- let bi = {
277- let aM = aq
278- let aN = size(aM)
279- let aO = bg
280- func bj (aQ,aR) = if ((aR >= aN))
281- then aQ
282- else bh(aQ, aM[aR])
279+ let bk = {
280+ let aO = ar
281+ let aP = size(aO)
282+ let aQ = bi
283+ func bl (aS,aT) = if ((aT >= aP))
284+ then aS
285+ else bj(aS, aO[aT])
283286
284- func bk (aQ,aR) = if ((aR >= aN))
285- then aQ
287+ func bm (aS,aT) = if ((aT >= aP))
288+ then aS
286289 else throw("List size exceeds 10")
287290
288- bk(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
291+ bm(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
289292 }
290- let bl = fraction((bd + (toBigInt(ah) * bi)), bg, ((be * bg) + (toBigInt((ah + 1)) * bi)))
291- if ((bl > bg))
292- then if ((1 >= toInt((bl - bg))))
293- then $Tuple2(bl, true)
294- else $Tuple2(bl, false)
295- else if ((1 >= toInt((bg - bl))))
296- then $Tuple2(bl, true)
297- else $Tuple2(bl, false)
293+ let bn = fraction((bf + (toBigInt(ai) * bk)), bi, ((bg * bi) + (toBigInt((ai + 1)) * bk)))
294+ if ((bn > bi))
295+ then if ((1 >= toInt((bn - bi))))
296+ then $Tuple2(bn, true)
297+ else $Tuple2(bn, false)
298+ else if ((1 >= toInt((bi - bn))))
299+ then $Tuple2(bn, true)
300+ else $Tuple2(bn, false)
298301 }
299302
300- let bm = {
301- let aM = ar
302- let aN = size(aM)
303- let aO = $Tuple2(toBigInt(bb), false)
304- func bj (aQ,aR) = if ((aR >= aN))
305- then aQ
306- else bf(aQ, aM[aR])
303+ let bo = {
304+ let aO = as
305+ let aP = size(aO)
306+ let aQ = $Tuple2(toBigInt(bd), false)
307+ func bl (aS,aT) = if ((aT >= aP))
308+ then aS
309+ else bh(aS, aO[aT])
307310
308- func bk (aQ,aR) = if ((aR >= aN))
309- then aQ
311+ func bm (aS,aT) = if ((aT >= aP))
312+ then aS
310313 else throw("List size exceeds 15")
311314
312- bk(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
315+ 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)
313316 }
314- let bl = bm._1
315- let bn = bm._2
316- if ((bn == false))
317- then throw(("get_D() not finished with " + toString(bl)))
318- else toInt(bl)
317+ let bn = bo._1
318+ let bp = bo._2
319+ if ((bp == false))
320+ then throw(("get_D() not finished with " + toString(bn)))
321+ else toInt(bn)
319322 }
320323 }
321324
322325
323-func bo (aU,aY) = aX(aT(aU), aY)
326+func bq (aW,ba) = aZ(aV(aW), ba)
324327
325328
326-func bp (bq,br,bs,bt) = if (au((bq != br)))
329+func br (bs,bt,bu,bv) = if (av((bs != bt)))
327330 then throw("same coin")
328- else if (au(if ((br >= 0))
329- then (bq >= 0)
331+ else if (av(if ((bt >= 0))
332+ then (bs >= 0)
330333 else false))
331334 then throw("below zero")
332- else if (au(if ((ah > br))
333- then (ah > bq)
335+ else if (av(if ((ai > bt))
336+ then (ai > bs)
334337 else false))
335338 then throw("above N_COINS")
336339 else {
337- let aY = aD()
338- let bl = aX(bt, aY)
339- let bc = (aY * ah)
340- func bu (aK,an) = {
341- let bv = aK
342- let bw = bv._1
343- let bx = bv._2
344- let by = if ((bq == an))
345- then bs
346- else bt[an]
347- if (if ((an != br))
348- then (ah > an)
340+ let ba = aF()
341+ let bn = aZ(bv, ba)
342+ let be = (ba * ai)
343+ func bw (aM,ao) = {
344+ let bx = aM
345+ let by = bx._1
346+ let bz = bx._2
347+ let bA = if ((bs == ao))
348+ then bu
349+ else bv[ao]
350+ if (if ((ao != bt))
351+ then (ai > ao)
349352 else false)
350- then $Tuple2((bw + by), fraction(bx, toBigInt(bl), toBigInt((by * ah))))
351- else $Tuple2(bw, bx)
353+ then $Tuple2((by + bA), fraction(bz, toBigInt(bn), toBigInt((bA * ai))))
354+ else $Tuple2(by, bz)
352355 }
353356
354- let bz = {
355- let aM = aq
356- let aN = size(aM)
357- let aO = $Tuple2(0, toBigInt(bl))
358- func aP (aQ,aR) = if ((aR >= aN))
359- then aQ
360- else bu(aQ, aM[aR])
357+ let bB = {
358+ let aO = ar
359+ let aP = size(aO)
360+ let aQ = $Tuple2(0, toBigInt(bn))
361+ func aR (aS,aT) = if ((aT >= aP))
362+ then aS
363+ else bw(aS, aO[aT])
361364
362- func aS (aQ,aR) = if ((aR >= aN))
363- then aQ
365+ func aU (aS,aT) = if ((aT >= aP))
366+ then aS
364367 else throw("List size exceeds 10")
365368
366- aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
369+ aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
367370 }
368- let bw = bz._1
369- let bA = bz._2
370- let bx = fraction(bA, toBigInt(bl), toBigInt((bc * ah)))
371- let bB = toBigInt(((bw + (bl / bc)) - bl))
372- func bC (aK,bD) = if ((aK._2 == true))
373- then aK
371+ let by = bB._1
372+ let bC = bB._2
373+ let bz = fraction(bC, toBigInt(bn), toBigInt((be * ai)))
374+ let bD = toBigInt(((by + (bn / be)) - bn))
375+ func bE (aM,bF) = if ((aM._2 == true))
376+ then aM
374377 else {
375- let bE = aK._1
376- let bF = (((bE * bE) + bx) / ((ap * bE) + bB))
377- if ((bF > bE))
378- then if ((1 >= toInt((bF - bE))))
379- then $Tuple2(bF, true)
380- else $Tuple2(bF, false)
381- else if ((1 >= toInt((bE - bF))))
382- then $Tuple2(bF, true)
383- else $Tuple2(bF, false)
378+ let bG = aM._1
379+ let bH = (((bG * bG) + bz) / ((aq * bG) + bD))
380+ if ((bH > bG))
381+ then if ((1 >= toInt((bH - bG))))
382+ then $Tuple2(bH, true)
383+ else $Tuple2(bH, false)
384+ else if ((1 >= toInt((bG - bH))))
385+ then $Tuple2(bH, true)
386+ else $Tuple2(bH, false)
384387 }
385388
386- let bG = {
387- let aM = as
388- let aN = size(aM)
389- let aO = $Tuple2(toBigInt(bl), false)
390- func bj (aQ,aR) = if ((aR >= aN))
391- then aQ
392- else bC(aQ, aM[aR])
389+ let bI = {
390+ let aO = at
391+ let aP = size(aO)
392+ let aQ = $Tuple2(toBigInt(bn), false)
393+ func bl (aS,aT) = if ((aT >= aP))
394+ then aS
395+ else bE(aS, aO[aT])
393396
394- func bk (aQ,aR) = if ((aR >= aN))
395- then aQ
397+ func bm (aS,aT) = if ((aT >= aP))
398+ then aS
396399 else throw("List size exceeds 16")
397400
398- bk(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
401+ 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)
399402 }
400- let bF = bG._1
401- let bn = bG._2
402- if ((bn == false))
403- then throw(("getY() not finished with " + toString(bF)))
404- else toInt(bF)
403+ let bH = bI._1
404+ let bp = bI._2
405+ if ((bp == false))
406+ then throw(("getY() not finished with " + toString(bH)))
407+ else toInt(bH)
405408 }
406409
407410
408-func bH (bI,bq,aU,bl) = if (au((bq >= 0)))
411+func bJ (bK,bs,aW,bn) = if (av((bs >= 0)))
409412 then throw("i below zero")
410- else if (au((ah > bq)))
413+ else if (av((ai > bs)))
411414 then throw("i above N_COINS")
412415 else {
413- let bc = (bI * ah)
414- func bu (aK,an) = {
415- let bJ = aK
416- let bw = bJ._1
417- let bx = bJ._2
418- let by = if (if ((bq != an))
419- then (ah > an)
416+ let be = (bK * ai)
417+ func bw (aM,ao) = {
418+ let bL = aM
419+ let by = bL._1
420+ let bz = bL._2
421+ let bA = if (if ((bs != ao))
422+ then (ai > ao)
420423 else false)
421- then aU[an]
424+ then aW[ao]
422425 else 0
423- if (if ((ah > an))
424- then (bq != an)
426+ if (if ((ai > ao))
427+ then (bs != ao)
425428 else false)
426- then $Tuple2((bw + by), fraction(bx, toBigInt(bl), toBigInt((by * ah))))
427- else $Tuple2(bw, bx)
429+ then $Tuple2((by + bA), fraction(bz, toBigInt(bn), toBigInt((bA * ai))))
430+ else $Tuple2(by, bz)
428431 }
429432
430- let bK = {
431- let aM = aq
432- let aN = size(aM)
433- let aO = $Tuple2(0, toBigInt(bl))
434- func aP (aQ,aR) = if ((aR >= aN))
435- then aQ
436- else bu(aQ, aM[aR])
433+ let bM = {
434+ let aO = ar
435+ let aP = size(aO)
436+ let aQ = $Tuple2(0, toBigInt(bn))
437+ func aR (aS,aT) = if ((aT >= aP))
438+ then aS
439+ else bw(aS, aO[aT])
437440
438- func aS (aQ,aR) = if ((aR >= aN))
439- then aQ
441+ func aU (aS,aT) = if ((aT >= aP))
442+ then aS
440443 else throw("List size exceeds 10")
441444
442- aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
445+ aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
443446 }
444- let bw = bK._1
445- let bA = bK._2
446- let bx = fraction(bA, toBigInt(bl), toBigInt((bc * ah)))
447- let bB = toBigInt(((bw + (bl / bc)) - bl))
448- func bL (aK,an) = if ((aK._2 == true))
449- then aK
447+ let by = bM._1
448+ let bC = bM._2
449+ let bz = fraction(bC, toBigInt(bn), toBigInt((be * ai)))
450+ let bD = toBigInt(((by + (bn / be)) - bn))
451+ func bN (aM,ao) = if ((aM._2 == true))
452+ then aM
450453 else {
451- let bE = aK._1
452- let bF = (((bE * bE) + bx) / ((ap * bE) + bB))
453- if ((bF > bE))
454- then if ((1 >= toInt((bF - bE))))
455- then $Tuple2(bF, true)
456- else $Tuple2(bF, false)
457- else if ((1 >= toInt((bE - bF))))
458- then $Tuple2(bF, true)
459- else $Tuple2(bF, false)
454+ let bG = aM._1
455+ let bH = (((bG * bG) + bz) / ((aq * bG) + bD))
456+ if ((bH > bG))
457+ then if ((1 >= toInt((bH - bG))))
458+ then $Tuple2(bH, true)
459+ else $Tuple2(bH, false)
460+ else if ((1 >= toInt((bG - bH))))
461+ then $Tuple2(bH, true)
462+ else $Tuple2(bH, false)
460463 }
461464
462- let bM = {
463- let aM = as
464- let aN = size(aM)
465- let aO = $Tuple2(toBigInt(bl), false)
466- func bj (aQ,aR) = if ((aR >= aN))
467- then aQ
468- else bL(aQ, aM[aR])
465+ let bO = {
466+ let aO = at
467+ let aP = size(aO)
468+ let aQ = $Tuple2(toBigInt(bn), false)
469+ func bl (aS,aT) = if ((aT >= aP))
470+ then aS
471+ else bN(aS, aO[aT])
469472
470- func bk (aQ,aR) = if ((aR >= aN))
471- then aQ
473+ func bm (aS,aT) = if ((aT >= aP))
474+ then aS
472475 else throw("List size exceeds 16")
473476
474- bk(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
477+ 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)
475478 }
476- let bF = bM._1
477- let bn = bM._2
478- if ((bn == false))
479- then throw(("get_y_D() not finished with " + toString(bF)))
480- else toInt(bF)
479+ let bH = bO._1
480+ let bp = bO._2
481+ if ((bp == false))
482+ then throw(("get_y_D() not finished with " + toString(bH)))
483+ else toInt(bH)
481484 }
482485
483486
484-func bN (aU,bO,an,bP) = {
485- let bQ = aw(bP)
486- let aY = aD()
487- let bR = ((fraction(aa, bQ, Z, CEILING) * ah) / (4 * (ah - 1)))
488- let bS = Y
489- let bT = aX(aU, aY)
490- let bU = (bT - fraction(bO, bT, bS))
491- let bV = bH(aY, an, aU, bU)
492- let bW = (aU[an] - bV)
493- func bX (aK,bY) = {
494- let bZ = aK
495- let ca = bZ._1
496- let cb = bZ._2
497- let cc = if ((cb == an))
498- then (fraction(bY, bU, bT) - bV)
499- else (bY - fraction(bY, bU, bT))
500- $Tuple2((ca :+ (bY - fraction(bR, cc, Z))), (cb + 1))
487+func bP (aW,bQ,ao,bR) = {
488+ let bS = ax(bR)
489+ let ba = aF()
490+ let bT = ((fraction(ab, bS, aa, CEILING) * ai) / (4 * (ai - 1)))
491+ let bU = Z
492+ let bV = aZ(aW, ba)
493+ let bW = (bV - fraction(bQ, bV, bU))
494+ let bX = bJ(ba, ao, aW, bW)
495+ let bY = (aW[ao] - bX)
496+ func bZ (aM,ca) = {
497+ let cb = aM
498+ let cc = cb._1
499+ let cd = cb._2
500+ let ce = if ((cd == ao))
501+ then (fraction(ca, bW, bV) - bX)
502+ else (ca - fraction(ca, bW, bV))
503+ $Tuple2((cc :+ (ca - fraction(bT, ce, aa))), (cd + 1))
501504 }
502505
503- let cd = {
504- let aM = aU
505- let aN = size(aM)
506- let aO = $Tuple2(nil, 0)
507- func aP (aQ,aR) = if ((aR >= aN))
508- then aQ
509- else bX(aQ, aM[aR])
506+ let cf = {
507+ let aO = aW
508+ let aP = size(aO)
509+ let aQ = $Tuple2(nil, 0)
510+ func aR (aS,aT) = if ((aT >= aP))
511+ then aS
512+ else bZ(aS, aO[aT])
510513
511- func aS (aQ,aR) = if ((aR >= aN))
512- then aQ
514+ func aU (aS,aT) = if ((aT >= aP))
515+ then aS
513516 else throw("List size exceeds 10")
514517
515- aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
518+ aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
516519 }
517- let ca = cd._1
518- let cb = cd._2
519- let ce = ca[an]
520- let cf = ((ce - bH(aY, an, ca, bU)) - 1)
521- $Tuple2(cf, (bW - cf))
520+ let cc = cf._1
521+ let cd = cf._2
522+ let cg = cc[ao]
523+ let ch = ((cg - bJ(ba, ao, cc, bW)) - 1)
524+ $Tuple2(ch, (bY - ch))
522525 }
523526
524527
525-func cg (aL) = {
526- let H = aL
527- if ($isInstanceOf(H, "ByteVector"))
528+func ci (aN) = {
529+ let I = aN
530+ if ($isInstanceOf(I, "ByteVector"))
528531 then {
529- let ch = H
530- toBase58String(ch)
532+ let cj = I
533+ toBase58String(cj)
531534 }
532- else if ($isInstanceOf(H, "Unit"))
535+ else if ($isInstanceOf(I, "Unit"))
533536 then {
534- let ci = H
537+ let ck = I
535538 "WAVES"
536539 }
537540 else throw("Match error")
538541 }
539542
540543
541-func cj (ck,aL) = if (ck)
542- then $Tuple2("lockNeutrino", Q)
543- else $Tuple2("unlockNeutrino", Q)
544+func cl (cm,aN) = if (cm)
545+ then $Tuple2("lockNeutrino", R)
546+ else $Tuple2("unlockNeutrino", R)
544547
545548
546-func cl (ck,cm,aL) = if (ck)
549+func cn (cm,co,aN) = if (cm)
547550 then {
548- let cn = cj(ck, aL)
549- let co = cn._1
550- let cp = cn._2
551- $Tuple4(co, cp, nil, [AttachedPayment(aL, cm)])
551+ let cp = cl(cm, aN)
552+ let cq = cp._1
553+ let cr = cp._2
554+ $Tuple4(cq, cr, nil, [AttachedPayment(aN, co)])
552555 }
553556 else {
554- let cq = cj(ck, aL)
555- let co = cq._1
556- let cp = cq._2
557- $Tuple4(co, cp, [cm, toBase58String(aL)], nil)
557+ let cs = cl(cm, aN)
558+ let cq = cs._1
559+ let cr = cs._2
560+ $Tuple4(cq, cr, [co, toBase58String(aN)], nil)
558561 }
559562
560563
561-func ck (cm,cr) = if (containsElement(V, cr))
564+func cm (co,ct) = if (containsElement(W, ct))
562565 then {
563- let cs = cl(true, cm, fromBase58String(cr))
564- let co = cs._1
565- let ct = cs._2
566- let cu = cs._3
567- let cv = cs._4
568- invoke(ct, co, cu, cv)
566+ let cu = cn(true, co, fromBase58String(ct))
567+ let cq = cu._1
568+ let cv = cu._2
569+ let cw = cu._3
570+ let cx = cu._4
571+ invoke(cv, cq, cw, cx)
569572 }
570573 else 0
571574
572575
573-func cw (cm,cr) = if (containsElement(V, cr))
576+func cy (co,ct) = if (containsElement(W, ct))
574577 then {
575- let cx = cl(false, cm, fromBase58String(cr))
576- let co = cx._1
577- let ct = cx._2
578- let cu = cx._3
579- let cv = cx._4
580- invoke(ct, co, cu, cv)
578+ let cz = cn(false, co, fromBase58String(ct))
579+ let cq = cz._1
580+ let cv = cz._2
581+ let cw = cz._3
582+ let cx = cz._4
583+ invoke(cv, cq, cw, cx)
581584 }
582585 else 0
583586
584587
585-func cy (aL) = {
586- let cz = {
587- let H = aL
588- if ($isInstanceOf(H, "ByteVector"))
588+func cA (aN) = {
589+ let cB = {
590+ let I = aN
591+ if ($isInstanceOf(I, "ByteVector"))
589592 then {
590- let cA = H
591- if ((cA == U))
592- then getInteger(Q, ((("rpd_balance_" + toBase58String(cA)) + "_") + toString(this)))
593+ let cC = I
594+ if ((cC == V))
595+ then getInteger(R, ((("rpd_balance_" + toBase58String(cC)) + "_") + toString(this)))
593596 else 0
594597 }
595- else if ($isInstanceOf(H, "Unit"))
598+ else if ($isInstanceOf(I, "Unit"))
596599 then 0
597600 else throw("Match error")
598601 }
599- let H = cz
600- if ($isInstanceOf(H, "Int"))
602+ let I = cB
603+ if ($isInstanceOf(I, "Int"))
601604 then {
602- let an = H
603- an
605+ let ao = I
606+ ao
604607 }
605608 else 0
606609 }
607610
608611
609-func cB () = {
610- let cC = aI()
611- func cD (aK,aL) = {
612- let cE = aK
613- let cF = cE._1
614- let an = cE._2
615- if (cF)
616- then $Tuple2(cF, an)
612+func cD () = {
613+ let cE = aK()
614+ func cF (aM,aN) = {
615+ let cG = aM
616+ let cH = cG._1
617+ let ao = cG._2
618+ if (cH)
619+ then $Tuple2(cH, ao)
617620 else {
618- let cG = (assetBalance(this, fromBase58String(aL)) + cy(fromBase58String(aL)))
619- if ((cC[an] > cG))
620- then $Tuple2(true, an)
621- else $Tuple2(false, (an + 1))
621+ let cI = (assetBalance(this, fromBase58String(aN)) + cA(fromBase58String(aN)))
622+ if ((cE[ao] > cI))
623+ then $Tuple2(true, ao)
624+ else $Tuple2(false, (ao + 1))
622625 }
623626 }
624627
625- let aM = ag
626- let aN = size(aM)
627- let aO = $Tuple2(false, 0)
628- func aP (aQ,aR) = if ((aR >= aN))
629- then aQ
630- else cD(aQ, aM[aR])
628+ let aO = ah
629+ let aP = size(aO)
630+ let aQ = $Tuple2(false, 0)
631+ func aR (aS,aT) = if ((aT >= aP))
632+ then aS
633+ else cF(aS, aO[aT])
631634
632- func aS (aQ,aR) = if ((aR >= aN))
633- then aQ
635+ func aU (aS,aT) = if ((aT >= aP))
636+ then aS
634637 else throw("List size exceeds 10")
635638
636- aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
639+ aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
637640 }
638641
639642
640-func cH (an) = ai(("Suspicious state with asset: " + ag[an]))
643+func cJ (ao) = aj(("Suspicious state with asset: " + ah[ao]))
641644
642645
643-func cI (bP,cv) = {
644- func cJ (aK,cK) = (aK :+ ScriptTransfer(bP, cK.amount, cK.assetId))
646+func cK (bR,cx) = {
647+ func cL (aM,cM) = (aM :+ ScriptTransfer(bR, cM.amount, cM.assetId))
645648
646- let aM = cv
647- let aN = size(aM)
648- let aO = nil
649- func aP (aQ,aR) = if ((aR >= aN))
650- then aQ
651- else cJ(aQ, aM[aR])
649+ let aO = cx
650+ let aP = size(aO)
651+ let aQ = nil
652+ func aR (aS,aT) = if ((aT >= aP))
653+ then aS
654+ else cL(aS, aO[aT])
652655
653- func aS (aQ,aR) = if ((aR >= aN))
654- then aQ
656+ func aU (aS,aT) = if ((aT >= aP))
657+ then aS
655658 else throw("List size exceeds 10")
656659
657- aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
660+ aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
658661 }
659662
660663
661-func cL (cM) = {
662- let cN = valueOrErrorMessage(getInteger(this, o), "No dAppThresholdCoef key")
663- let cO = 10000
664- let cP = max(cM)
665- let cQ = min(cM)
666- let cR = fraction(cP, cO, cQ)
667- if ((cR > (cN * cO)))
664+func cN (cO) = {
665+ let cP = valueOrErrorMessage(getInteger(this, o), "No dAppThresholdCoef key")
666+ let cQ = 10000
667+ let cR = max(cO)
668+ let cS = min(cO)
669+ let cT = fraction(cR, cQ, cS)
670+ if ((cT > (cP * cQ)))
668671 then throw("New balance in assets of the DApp is less than threshold")
669672 else false
670673 }
671674
672675
673-func cS (ag) = {
674- let cT = split(ag, ",")
675- if ((size(cT) > 10))
676+func cU (ah) = {
677+ let cV = split(ah, ",")
678+ if ((size(cV) > 10))
676679 then throw("To many coins, max coins size 10")
677680 else {
678- func cU (cV,aL) = {
679- let cW = valueOrErrorMessage(fromBase58String(aL), ("fromBase58String: " + aL))
680- let cX = valueOrErrorMessage(assetInfo(cW), ("assetInfo: " + aL)).decimals
681- if ((cX != d))
681+ func cW (cX,aN) = {
682+ let cY = valueOrErrorMessage(fromBase58String(aN), ("fromBase58String: " + aN))
683+ let cZ = valueOrErrorMessage(assetInfo(cY), ("assetInfo: " + aN)).decimals
684+ if ((cZ != d))
682685 then throw("wrong decimals")
683686 else false
684687 }
685688
686- let aM = cT
687- let aN = size(aM)
688- let aO = false
689- func aP (aQ,aR) = if ((aR >= aN))
690- then aQ
691- else cU(aQ, aM[aR])
689+ let aO = cV
690+ let aP = size(aO)
691+ let aQ = false
692+ func aR (aS,aT) = if ((aT >= aP))
693+ then aS
694+ else cW(aS, aO[aT])
692695
693- func aS (aQ,aR) = if ((aR >= aN))
694- then aQ
696+ func aU (aS,aT) = if ((aT >= aP))
697+ then aS
695698 else throw("List size exceeds 10")
696699
697- aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
700+ aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
698701 }
699702 }
700703
701704
702-@Callable(cY)
703-func D (aU,aY) = {
704- let bl = ba(aU, aY)
705- $Tuple2([IntegerEntry("D", bl)], bl)
705+@Callable(da)
706+func D (aW,ba) = {
707+ let bn = bc(aW, ba)
708+ $Tuple2([IntegerEntry("D", bn)], bn)
706709 }
707710
708711
709712
710-@Callable(cY)
711-func init (ag,aD,cZ) = if (!(isDataStorageUntouched(this)))
713+@Callable(da)
714+func init (ah,aF,db) = if (!(isDataStorageUntouched(this)))
712715 then throw("Already initialized")
713- else if ((0 >= aD))
716+ else if ((0 >= aF))
714717 then throw("Amp must be must > 0")
715- else if ((0 >= cZ))
718+ else if ((0 >= db))
716719 then throw("dApp Threshold Coef must be > 0")
717720 else {
718- let da = "s_Multi_USD"
719- let db = ("ShareToken of SwopFi protocol for MultiStable USD pool at address " + toString(this))
720- let dc = Issue(da, db, 0, 6, true)
721- let dd = calculateAssetId(dc)
722- if (cS(ag))
721+ let dc = "s_Multi_USD"
722+ let dd = ("ShareToken of SwopFi protocol for MultiStable USD pool at address " + toString(this))
723+ let de = Issue(dc, dd, 0, 6, true)
724+ let df = calculateAssetId(de)
725+ if (cU(ah))
723726 then throw()
724- else [StringEntry(g, f), StringEntry(h, ag), IntegerEntry("initial_A", aD), IntegerEntry("future_A", aD), IntegerEntry(n, getIntegerValue(E, "base_fee_flat")), StringEntry(l, toBase58String(dd)), IntegerEntry(m, 0), IntegerEntry(o, cZ), BooleanEntry(j, true), dc]
727+ else [StringEntry(g, f), StringEntry(h, ah), IntegerEntry("initial_A", aF), IntegerEntry("future_A", aF), IntegerEntry(n, getIntegerValue(F, "base_fee_flat")), StringEntry(l, toBase58String(df)), IntegerEntry(m, 0), IntegerEntry(o, db), BooleanEntry(j, true), de]
725728 }
726729
727730
728731
729-@Callable(cY)
730-func addLiquidity (de,df) = valueOrElse(al(), {
731- let aY = aD()
732- let aU = aI()
733- let bT = if ((Y == 0))
732+@Callable(da)
733+func addLiquidity (dg,dh,di) = valueOrElse(am(), {
734+ let ba = aF()
735+ let aW = aK()
736+ let bV = if ((Z == 0))
734737 then 0
735- else bo(aU, aY)
736- let cv = cY.payments
737- let dg = size(cv)
738- func dh (di) = if ((dg > ah))
739- then throw(("payments size > " + toString(ah)))
740- else if ((1 > dg))
738+ else bq(aW, ba)
739+ let cx = da.payments
740+ let dj = size(cx)
741+ func dk (dl) = if ((dj > ai))
742+ then throw(("payments size > " + toString(ai)))
743+ else if ((1 > dj))
741744 then throw("payments size < 1")
742- else if (if ((Y == 0))
743- then (ah != dg)
745+ else if (if ((Z == 0))
746+ then (ai != dj)
744747 else false)
745748 then throw("initial deposit requires all coins")
746749 else {
747- func dj (aK,cK) = if (containsElement(ag, cg(cK.assetId)))
750+ func dm (aM,cM) = if (containsElement(ah, ci(cM.assetId)))
748751 then true
749752 else throw("Invalid asset in payment")
750753
751- let aM = cv
752- let aN = size(aM)
753- let aO = false
754- func aP (aQ,aR) = if ((aR >= aN))
755- then aQ
756- else dj(aQ, aM[aR])
754+ let aO = cx
755+ let aP = size(aO)
756+ let aQ = false
757+ func aR (aS,aT) = if ((aT >= aP))
758+ then aS
759+ else dm(aS, aO[aT])
757760
758- func aS (aQ,aR) = if ((aR >= aN))
759- then aQ
761+ func aU (aS,aT) = if ((aT >= aP))
762+ then aS
760763 else throw("List size exceeds 10")
761764
762- aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
765+ aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
763766 }
764767
765- if (!(dh(dg)))
768+ if (!(dk(dj)))
766769 then throw()
767770 else {
768- let cF = cB()
769- if (cF._1)
770- then (cH(cF._2) ++ cI(cY.caller, cv))
771+ let cH = cD()
772+ if (cH._1)
773+ then (cJ(cH._2) ++ cK(da.caller, cx))
771774 else {
772- func cJ (aK,aL) = {
773- let dk = aK
774- let cM = dk._1
775- let an = dk._2
776- func dl (dm,cK) = if ((cg(cK.assetId) == aL))
777- then (dm + cK.amount)
778- else dm
775+ func cL (aM,aN) = {
776+ let dn = aM
777+ let cO = dn._1
778+ let ao = dn._2
779+ func do (dp,cM) = if ((ci(cM.assetId) == aN))
780+ then (dp + cM.amount)
781+ else dp
779782
780- let dn = {
781- let aM = cv
782- let aN = size(aM)
783- let aO = aU[an]
784- func aP (aQ,aR) = if ((aR >= aN))
785- then aQ
786- else dl(aQ, aM[aR])
783+ let dq = {
784+ let aO = cx
785+ let aP = size(aO)
786+ let aQ = aW[ao]
787+ func aR (aS,aT) = if ((aT >= aP))
788+ then aS
789+ else do(aS, aO[aT])
787790
788- func aS (aQ,aR) = if ((aR >= aN))
789- then aQ
791+ func aU (aS,aT) = if ((aT >= aP))
792+ then aS
790793 else throw("List size exceeds 10")
791794
792- aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
795+ aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
793796 }
794- $Tuple2((cM :+ dn), (an + 1))
797+ $Tuple2((cO :+ dq), (ao + 1))
795798 }
796799
797- let do = {
798- let aM = ag
799- let aN = size(aM)
800- let aO = $Tuple2(nil, 0)
801- func aP (aQ,aR) = if ((aR >= aN))
802- then aQ
803- else cJ(aQ, aM[aR])
800+ let dr = {
801+ let aO = ah
802+ let aP = size(aO)
803+ let aQ = $Tuple2(nil, 0)
804+ func aR (aS,aT) = if ((aT >= aP))
805+ then aS
806+ else cL(aS, aO[aT])
804807
805- func aS (aQ,aR) = if ((aR >= aN))
806- then aQ
808+ func aU (aS,aT) = if ((aT >= aP))
809+ then aS
807810 else throw("List size exceeds 10")
808811
809- aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
812+ aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
810813 }
811- let cM = do._1
812- let dp = do._2
813- if (cL(cM))
814+ let cO = dr._1
815+ let ds = dr._2
816+ if (cN(cO))
814817 then throw()
815818 else {
816- let bU = bo(cM, aY)
817- if (au((bU > bT)))
819+ let bW = bq(cO, ba)
820+ if (av((bW > bV)))
818821 then throw("D1 > D0")
819822 else {
820- let bQ = aw(cY.caller)
821- func dq (aK,dm) = {
822- let dr = aK
823- let ds = dr._1
824- let dt = dr._2
825- let an = dr._3
826- if ((Y > 0))
823+ let bS = ax(da.caller)
824+ func dt (aM,dp) = {
825+ let du = aM
826+ let dv = du._1
827+ let dw = du._2
828+ let ao = du._3
829+ if ((Z > 0))
827830 then {
828- let bR = ((fraction(aa, bQ, Z, CEILING) * ah) / (4 * (ah - 1)))
829- let du = {
830- let dv = fraction(bU, aU[an], bT)
831- let dw = if ((dv > dm))
832- then (dv - dm)
833- else (dm - dv)
834- fraction(bR, dw, Z)
831+ let bT = ((fraction(ab, bS, aa, CEILING) * ai) / (4 * (ai - 1)))
832+ let dx = {
833+ let dy = fraction(bW, aW[ao], bV)
834+ let dz = if ((dy > dp))
835+ then (dy - dp)
836+ else (dp - dy)
837+ fraction(bT, dz, aa)
835838 }
836- let dx = fraction(du, ab, Z)
837- let dy = (dm - du)
838- let dz = (dm - du)
839- let dA = (dm - aU[an])
840- let dB = (du - dx)
841- let dC = if ((dA > 0))
842- then ck((dA - du), ag[an])
843- else cw(du, ag[an])
844- if ((dC == dC))
839+ let dA = fraction(dx, ac, aa)
840+ let dB = (dp - dx)
841+ let dC = (dp - dx)
842+ let dD = (dp - aW[ao])
843+ let dE = (dx - dA)
844+ let dF = if ((dD > 0))
845+ then cm((dD - dx), ah[ao])
846+ else cy(dx, ah[ao])
847+ if ((dF == dF))
845848 then {
846- let dD = if ((dB > 0))
847- then invoke(T, "airDrop", nil, [AttachedPayment(fromBase58String(ag[an]), dB)])
849+ let dG = if ((dE > 0))
850+ then invoke(U, "airDrop", nil, [AttachedPayment(fromBase58String(ah[ao]), dE)])
848851 else 0
849- if ((dD == dD))
850- then $Tuple3((ds :+ dz), (dt ++ [ScriptTransfer(O, dx, fromBase58String(ag[an])), IntegerEntry((ag[an] + i), dy)]), (an + 1))
852+ if ((dG == dG))
853+ then $Tuple3((dv :+ dC), (dw ++ [ScriptTransfer(P, dA, fromBase58String(ah[ao])), IntegerEntry((ah[ao] + i), dB)]), (ao + 1))
851854 else throw("Strict value is not equal to itself.")
852855 }
853856 else throw("Strict value is not equal to itself.")
854857 }
855858 else {
856- let dC = ck(dm, ag[an])
857- if ((dC == dC))
858- then $Tuple3((ds :+ dm), (dt :+ IntegerEntry((ag[an] + i), dm)), (an + 1))
859+ let dF = cm(dp, ah[ao])
860+ if ((dF == dF))
861+ then $Tuple3((dv :+ dp), (dw :+ IntegerEntry((ah[ao] + i), dp)), (ao + 1))
859862 else throw("Strict value is not equal to itself.")
860863 }
861864 }
862865
863- let dE = {
864- let aM = cM
865- let aN = size(aM)
866- let aO = $Tuple3(nil, nil, 0)
867- func bj (aQ,aR) = if ((aR >= aN))
868- then aQ
869- else dq(aQ, aM[aR])
866+ let dH = {
867+ let aO = cO
868+ let aP = size(aO)
869+ let aQ = $Tuple3(nil, nil, 0)
870+ func bl (aS,aT) = if ((aT >= aP))
871+ then aS
872+ else dt(aS, aO[aT])
870873
871- func bk (aQ,aR) = if ((aR >= aN))
872- then aQ
874+ func bm (aS,aT) = if ((aT >= aP))
875+ then aS
873876 else throw("List size exceeds 10")
874877
875- bk(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
878+ bm(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
876879 }
877- let ds = dE._1
878- let dt = dE._2
879- let dF = bo(ds, aY)
880- let dG = if ((Y == 0))
881- then bU
882- else fraction(Y, (dF - bT), bT)
883- if (au((dG >= de)))
880+ let dv = dH._1
881+ let dw = dH._2
882+ let dI = bq(dv, ba)
883+ let dJ = if ((Z == 0))
884+ then bW
885+ else fraction(Z, (dI - bV), bV)
886+ if (av((dJ >= dg)))
884887 then throw("Slippage screwed you")
885- else if (df)
888+ else if (dh)
886889 then {
887- let dH = invoke(this, "reissueShare", [dG], nil)
888- if ((dH == dH))
890+ let dK = invoke(this, "reissueShare", [dJ], nil)
891+ if ((dK == dK))
889892 then {
890- let dI = invoke(S, "lockShareTokens", [toString(this)], [AttachedPayment(X, dG)])
891- if ((dI == dI))
892- then (dt :+ IntegerEntry(m, (Y + dG)))
893+ let dL = invoke(T, "lockShareTokens", [toString(this), di], [AttachedPayment(Y, dJ)])
894+ if ((dL == dL))
895+ then (dw :+ IntegerEntry(m, (Z + dJ)))
893896 else throw("Strict value is not equal to itself.")
894897 }
895898 else throw("Strict value is not equal to itself.")
896899 }
897- else (dt ++ [Reissue(X, dG, true), ScriptTransfer(cY.caller, dG, X), IntegerEntry(m, (Y + dG))])
900+ else (dw ++ [Reissue(Y, dJ, true), ScriptTransfer(da.caller, dJ, Y), IntegerEntry(m, (Z + dJ))])
898901 }
899902 }
900903 }
901904 }
902905 })
903906
904907
905908
906-@Callable(cY)
907-func calcMintAmount (cM,ay) = {
908- let aY = aD()
909- let aU = aI()
910- let bU = bo(cM, aY)
911- if ((Y == 0))
912- then $Tuple2(nil, bU)
909+@Callable(da)
910+func calcMintAmount (cO,az) = {
911+ let ba = aF()
912+ let aW = aK()
913+ let bW = bq(cO, ba)
914+ if ((Z == 0))
915+ then $Tuple2(nil, bW)
913916 else {
914- let bT = bo(aU, aY)
915- let bQ = aw(ay)
916- func dJ (aK,dm) = {
917- let dK = aK
918- let ds = dK._1
919- let an = dK._2
920- let bR = ((fraction(aa, bQ, Z, CEILING) * ah) / (4 * (ah - 1)))
921- let du = {
922- let dv = fraction(bU, aU[an], bT)
923- let dw = if ((dv > dm))
924- then (dv - dm)
925- else (dm - dv)
926- fraction(bR, dw, Z)
917+ let bV = bq(aW, ba)
918+ let bS = ax(az)
919+ func dM (aM,dp) = {
920+ let dN = aM
921+ let dv = dN._1
922+ let ao = dN._2
923+ let bT = ((fraction(ab, bS, aa, CEILING) * ai) / (4 * (ai - 1)))
924+ let dx = {
925+ let dy = fraction(bW, aW[ao], bV)
926+ let dz = if ((dy > dp))
927+ then (dy - dp)
928+ else (dp - dy)
929+ fraction(bT, dz, aa)
927930 }
928- let dz = (dm - du)
929- $Tuple2((ds :+ dz), (an + 1))
931+ let dC = (dp - dx)
932+ $Tuple2((dv :+ dC), (ao + 1))
930933 }
931934
932- let dL = {
933- let aM = cM
934- let aN = size(aM)
935- let aO = $Tuple2(nil, 0)
936- func aP (aQ,aR) = if ((aR >= aN))
937- then aQ
938- else dJ(aQ, aM[aR])
935+ let dO = {
936+ let aO = cO
937+ let aP = size(aO)
938+ let aQ = $Tuple2(nil, 0)
939+ func aR (aS,aT) = if ((aT >= aP))
940+ then aS
941+ else dM(aS, aO[aT])
939942
940- func aS (aQ,aR) = if ((aR >= aN))
941- then aQ
943+ func aU (aS,aT) = if ((aT >= aP))
944+ then aS
942945 else throw("List size exceeds 10")
943946
944- aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
947+ aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
945948 }
946- let ds = dL._1
947- let dp = dL._2
948- let dF = bo(ds, aY)
949- let dM = fraction(Y, (dF - bT), bT)
950- $Tuple2(nil, dM)
949+ let dv = dO._1
950+ let ds = dO._2
951+ let dI = bq(dv, ba)
952+ let dP = fraction(Z, (dI - bV), bV)
953+ $Tuple2(nil, dP)
951954 }
952955 }
953956
954957
955958
956-@Callable(cY)
957-func reissueShare (cm) = valueOrElse(ao(cY), [Reissue(X, cm, true)])
959+@Callable(da)
960+func reissueShare (co) = valueOrElse(ap(da), [Reissue(Y, co, true)])
958961
959962
960963
961-@Callable(cY)
962-func getDy (dN,dO,dP,dQ) = {
963- let aU = aI()
964- let dR = valueOrErrorMessage(indexOf(ag, dN), "unknown token in")
965- let dS = valueOrErrorMessage(indexOf(ag, dO), "unknown token out")
966- let bs = (aU[dR] + dP)
967- let bF = bp(dR, dS, bs, aU)
968- let cf = ((aU[dS] - bF) - 1)
969- let bQ = aw(Address(fromBase58String(dQ)))
970- let bR = fraction(fraction(aa, bQ, Z, CEILING), cf, Z)
971- $Tuple2(nil, $Tuple2((cf - bR), bR))
964+@Callable(da)
965+func getDy (dQ,dR,dS,dT) = {
966+ let aW = aK()
967+ let dU = valueOrErrorMessage(indexOf(ah, dQ), "unknown token in")
968+ let dV = valueOrErrorMessage(indexOf(ah, dR), "unknown token out")
969+ let bu = (aW[dU] + dS)
970+ let bH = br(dU, dV, bu, aW)
971+ let ch = ((aW[dV] - bH) - 1)
972+ let bS = ax(Address(fromBase58String(dT)))
973+ let bT = fraction(fraction(ab, bS, aa, CEILING), ch, aa)
974+ $Tuple2(nil, $Tuple2((ch - bT), bT))
972975 }
973976
974977
975978
976-@Callable(cY)
977-func exchange (dT,dU) = valueOrElse(al(), if ((size(cY.payments) != 1))
979+@Callable(da)
980+func exchange (dW,dX) = valueOrElse(am(), if ((size(da.payments) != 1))
978981 then throw("size(payments) != 1")
979982 else {
980- let cF = cB()
981- if (cF._1)
982- then (cH(cF._2) ++ cI(cY.caller, cY.payments))
983+ let cH = cD()
984+ if (cH._1)
985+ then (cJ(cH._2) ++ cK(da.caller, da.payments))
983986 else {
984- let cK = cY.payments[0]
985- let dV = cg(cK.assetId)
986- let dW = fromBase58String(dT)
987- let dP = cK.amount
988- let dR = valueOrErrorMessage(indexOf(ag, dV), "unknown token in")
989- let dS = valueOrErrorMessage(indexOf(ag, dT), "unknown token out")
990- let aU = aI()
991- let bs = (aU[dR] + dP)
992- let bF = bp(dR, dS, bs, aU)
993- let dX = ((aU[dS] - bF) - 1)
994- let bQ = aw(cY.originCaller)
995- let bR = fraction(dX, fraction(aa, bQ, Z, CEILING), Z)
996- let cf = (dX - bR)
997- let dx = fraction(bR, ab, Z)
998- if (au((cf >= dU)))
987+ let cM = da.payments[0]
988+ let dY = ci(cM.assetId)
989+ let dZ = fromBase58String(dW)
990+ let dS = cM.amount
991+ let dU = valueOrErrorMessage(indexOf(ah, dY), "unknown token in")
992+ let dV = valueOrErrorMessage(indexOf(ah, dW), "unknown token out")
993+ let aW = aK()
994+ let bu = (aW[dU] + dS)
995+ let bH = br(dU, dV, bu, aW)
996+ let ea = ((aW[dV] - bH) - 1)
997+ let bS = ax(da.originCaller)
998+ let bT = fraction(ea, fraction(ab, bS, aa, CEILING), aa)
999+ let ch = (ea - bT)
1000+ let dA = fraction(bT, ac, aa)
1001+ if (av((ch >= dX)))
9991002 then throw("Exchange resulted in fewer coins than expected")
10001003 else {
1001- func dY (aK,dZ) = {
1002- let ea = aK
1003- let cM = ea._1
1004- let an = ea._2
1005- if ((an == dR))
1006- then $Tuple2((cM :+ (dZ + dP)), (an + 1))
1007- else if ((an == dS))
1008- then $Tuple2((cM :+ (dZ - dX)), (an + 1))
1009- else $Tuple2((cM :+ dZ), (an + 1))
1004+ func eb (aM,ec) = {
1005+ let ed = aM
1006+ let cO = ed._1
1007+ let ao = ed._2
1008+ if ((ao == dU))
1009+ then $Tuple2((cO :+ (ec + dS)), (ao + 1))
1010+ else if ((ao == dV))
1011+ then $Tuple2((cO :+ (ec - ea)), (ao + 1))
1012+ else $Tuple2((cO :+ ec), (ao + 1))
10101013 }
10111014
1012- let eb = {
1013- let aM = aU
1014- let aN = size(aM)
1015- let aO = $Tuple2(nil, 0)
1016- func aP (aQ,aR) = if ((aR >= aN))
1017- then aQ
1018- else dY(aQ, aM[aR])
1015+ let ee = {
1016+ let aO = aW
1017+ let aP = size(aO)
1018+ let aQ = $Tuple2(nil, 0)
1019+ func aR (aS,aT) = if ((aT >= aP))
1020+ then aS
1021+ else eb(aS, aO[aT])
10191022
1020- func aS (aQ,aR) = if ((aR >= aN))
1021- then aQ
1023+ func aU (aS,aT) = if ((aT >= aP))
1024+ then aS
10221025 else throw("List size exceeds 10")
10231026
1024- aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
1027+ aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
10251028 }
1026- let cM = eb._1
1027- let an = eb._2
1028- if (cL(cM))
1029+ let cO = ee._1
1030+ let ao = ee._2
1031+ if (cN(cO))
10291032 then throw()
10301033 else {
1031- let dI = ck(cK.amount, cg(cK.assetId))
1032- if ((dI == dI))
1034+ let dL = cm(cM.amount, ci(cM.assetId))
1035+ if ((dL == dL))
10331036 then {
1034- let ec = cw(dX, dT)
1035- if ((ec == ec))
1037+ let ef = cy(ea, dW)
1038+ if ((ef == ef))
10361039 then {
1037- let dB = (bR - dx)
1038- let dD = if ((dB > 0))
1039- then invoke(T, "airDrop", nil, [AttachedPayment(dW, dB)])
1040+ let dE = (bT - dA)
1041+ let dG = if ((dE > 0))
1042+ then invoke(U, "airDrop", nil, [AttachedPayment(dZ, dE)])
10401043 else 0
1041- if ((dD == dD))
1042- then $Tuple2([IntegerEntry((dV + i), bs), IntegerEntry((dT + i), (aU[dS] - dX)), ScriptTransfer(cY.caller, cf, dW), ScriptTransfer(O, dx, dW)], [cf, dW])
1044+ if ((dG == dG))
1045+ then $Tuple2([IntegerEntry((dY + i), bu), IntegerEntry((dW + i), (aW[dV] - ea)), ScriptTransfer(da.caller, ch, dZ), ScriptTransfer(P, dA, dZ)], [ch, dZ])
10431046 else throw("Strict value is not equal to itself.")
10441047 }
10451048 else throw("Strict value is not equal to itself.")
10461049 }
10471050 else throw("Strict value is not equal to itself.")
10481051 }
10491052 }
10501053 }
10511054 })
10521055
10531056
10541057
1055-@Callable(cY)
1056-func withdraw (ed) = valueOrElse(al(), if ((size(cY.payments) != 1))
1058+@Callable(da)
1059+func withdraw (eg) = valueOrElse(am(), if ((size(da.payments) != 1))
10571060 then throw("size(payments) != 1")
10581061 else {
1059- let ee = cY.payments[0].amount
1060- let ef = cY.payments[0].assetId
1061- if ((X != ef))
1062+ let eh = da.payments[0].amount
1063+ let ei = da.payments[0].assetId
1064+ if ((Y != ei))
10621065 then throw("unknown payment token")
10631066 else {
1064- let cF = cB()
1065- if (cF._1)
1066- then (cH(cF._2) ++ cI(cY.originCaller, cY.payments))
1067+ let cH = cD()
1068+ if (cH._1)
1069+ then (cJ(cH._2) ++ cK(da.originCaller, da.payments))
10671070 else {
1068- func dq (aK,eg) = {
1069- let eh = aK
1070- let dt = eh._1
1071- let an = eh._2
1072- let ei = fraction(eg, ee, Y)
1073- if (au((ei >= ed[an])))
1071+ func dt (aM,ej) = {
1072+ let ek = aM
1073+ let dw = ek._1
1074+ let ao = ek._2
1075+ let el = fraction(ej, eh, Z)
1076+ if (av((el >= eg[ao])))
10741077 then throw("Withdrawal resulted in fewer coins than expected")
10751078 else {
1076- let ec = cw(ei, ag[an])
1077- if ((ec == ec))
1078- then $Tuple2((dt ++ [IntegerEntry((ag[an] + i), (eg - ei)), ScriptTransfer(cY.originCaller, ei, fromBase58String(ag[an]))]), (an + 1))
1079+ let ef = cy(el, ah[ao])
1080+ if ((ef == ef))
1081+ then $Tuple2((dw ++ [IntegerEntry((ah[ao] + i), (ej - el)), ScriptTransfer(da.originCaller, el, fromBase58String(ah[ao]))]), (ao + 1))
10791082 else throw("Strict value is not equal to itself.")
10801083 }
10811084 }
10821085
1083- let ej = {
1084- let aM = aI()
1085- let aN = size(aM)
1086- let aO = $Tuple2(nil, 0)
1087- func aP (aQ,aR) = if ((aR >= aN))
1088- then aQ
1089- else dq(aQ, aM[aR])
1086+ let em = {
1087+ let aO = aK()
1088+ let aP = size(aO)
1089+ let aQ = $Tuple2(nil, 0)
1090+ func aR (aS,aT) = if ((aT >= aP))
1091+ then aS
1092+ else dt(aS, aO[aT])
10901093
1091- func aS (aQ,aR) = if ((aR >= aN))
1092- then aQ
1094+ func aU (aS,aT) = if ((aT >= aP))
1095+ then aS
10931096 else throw("List size exceeds 10")
10941097
1095- aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
1098+ aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
10961099 }
1097- let dt = ej._1
1098- let an = ej._2
1099- (dt ++ [Burn(X, ee), IntegerEntry(m, (Y - ee))])
1100+ let dw = em._1
1101+ let ao = em._2
1102+ (dw ++ [Burn(Y, eh), IntegerEntry(m, (Z - eh))])
11001103 }
11011104 }
11021105 })
11031106
11041107
11051108
1106-@Callable(cY)
1107-func withdrawWithUnlock (ed,ek) = valueOrElse(al(), if ((0 >= ek))
1109+@Callable(da)
1110+func withdrawWithUnlock (eg,en) = valueOrElse(am(), if ((0 >= en))
11081111 then throw("Unlock amount must be positive")
11091112 else {
1110- let cF = cB()
1111- if (cF._1)
1112- then (cH(cF._2) ++ cI(cY.caller, cY.payments))
1113+ let cH = cD()
1114+ if (cH._1)
1115+ then (cJ(cH._2) ++ cK(da.caller, da.payments))
11131116 else {
1114- let ee = if ((size(cY.payments) > 0))
1115- then if ((size(cY.payments) != 1))
1117+ let eh = if ((size(da.payments) > 0))
1118+ then if ((size(da.payments) != 1))
11161119 then throw("size(payments) != 1")
11171120 else {
1118- let ef = cY.payments[0].assetId
1119- if ((X != ef))
1121+ let ei = da.payments[0].assetId
1122+ if ((Y != ei))
11201123 then throw("unknown payment token")
1121- else cY.payments[0].amount
1124+ else da.payments[0].amount
11221125 }
11231126 else 0
1124- let el = invoke(S, "withdrawShareTokens", [toString(this), ek], nil)
1125- if ((el == el))
1127+ let eo = invoke(T, "withdrawShareTokens", [toString(this), en], nil)
1128+ if ((eo == eo))
11261129 then {
1127- let em = (ee + ek)
1128- let dC = invoke(this, "withdraw", [ed], [AttachedPayment(X, em)])
1129- if ((dC == dC))
1130+ let ep = (eh + en)
1131+ let dF = invoke(this, "withdraw", [eg], [AttachedPayment(Y, ep)])
1132+ if ((dF == dF))
11301133 then nil
11311134 else throw("Strict value is not equal to itself.")
11321135 }
11331136 else throw("Strict value is not equal to itself.")
11341137 }
11351138 })
11361139
11371140
11381141
1139-@Callable(cY)
1140-func calcWithdrawOneCoin (en,dT,ay) = if ((0 >= en))
1142+@Callable(da)
1143+func calcWithdrawOneCoin (eq,dW,az) = if ((0 >= eq))
11411144 then throw("Amount must be positive")
11421145 else {
1143- let an = valueOrErrorMessage(indexOf(ag, dT), "unknown token out")
1144- $Tuple2(nil, bN(aI(), en, an, Address(fromBase58String(ay)))._1)
1146+ let ao = valueOrErrorMessage(indexOf(ah, dW), "unknown token out")
1147+ $Tuple2(nil, bP(aK(), eq, ao, Address(fromBase58String(az)))._1)
11451148 }
11461149
11471150
11481151
1149-@Callable(cY)
1150-func withdrawOneCoin (dT,eo) = valueOrElse(al(), if ((size(cY.payments) != 1))
1152+@Callable(da)
1153+func withdrawOneCoin (dW,er) = valueOrElse(am(), if ((size(da.payments) != 1))
11511154 then throw("size(payments) != 1")
11521155 else {
1153- let cF = cB()
1154- if (cF._1)
1155- then (cH(cF._2) ++ cI(cY.originCaller, cY.payments))
1156+ let cH = cD()
1157+ if (cH._1)
1158+ then (cJ(cH._2) ++ cK(da.originCaller, da.payments))
11561159 else {
1157- let ee = cY.payments[0].amount
1158- let ef = cY.payments[0].assetId
1159- if ((ef != X))
1160+ let eh = da.payments[0].amount
1161+ let ei = da.payments[0].assetId
1162+ if ((ei != Y))
11601163 then throw("unknown token")
11611164 else {
1162- let ep = valueOrErrorMessage(indexOf(ag, dT), "unknown token out")
1163- let dW = fromBase58String(dT)
1164- let aU = aI()
1165- let eq = bN(aU, ee, ep, cY.originCaller)
1166- let cf = eq._1
1167- let er = eq._2
1168- if (au((cf >= eo)))
1165+ let es = valueOrErrorMessage(indexOf(ah, dW), "unknown token out")
1166+ let dZ = fromBase58String(dW)
1167+ let aW = aK()
1168+ let et = bP(aW, eh, es, da.originCaller)
1169+ let ch = et._1
1170+ let eu = et._2
1171+ if (av((ch >= er)))
11691172 then throw("Not enough coins removed")
11701173 else {
1171- let dx = fraction(er, ab, Z)
1172- let es = (cf + er)
1173- func dY (aK,dZ) = {
1174- let et = aK
1175- let cM = et._1
1176- let an = et._2
1177- if ((an == ep))
1178- then $Tuple2((cM :+ (dZ - es)), (an + 1))
1179- else $Tuple2((cM :+ dZ), (an + 1))
1174+ let dA = fraction(eu, ac, aa)
1175+ let ev = (ch + eu)
1176+ func eb (aM,ec) = {
1177+ let ew = aM
1178+ let cO = ew._1
1179+ let ao = ew._2
1180+ if ((ao == es))
1181+ then $Tuple2((cO :+ (ec - ev)), (ao + 1))
1182+ else $Tuple2((cO :+ ec), (ao + 1))
11801183 }
11811184
1182- let eu = {
1183- let aM = aU
1184- let aN = size(aM)
1185- let aO = $Tuple2(nil, 0)
1186- func aP (aQ,aR) = if ((aR >= aN))
1187- then aQ
1188- else dY(aQ, aM[aR])
1185+ let ex = {
1186+ let aO = aW
1187+ let aP = size(aO)
1188+ let aQ = $Tuple2(nil, 0)
1189+ func aR (aS,aT) = if ((aT >= aP))
1190+ then aS
1191+ else eb(aS, aO[aT])
11891192
1190- func aS (aQ,aR) = if ((aR >= aN))
1191- then aQ
1193+ func aU (aS,aT) = if ((aT >= aP))
1194+ then aS
11921195 else throw("List size exceeds 10")
11931196
1194- aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
1197+ aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
11951198 }
1196- let cM = eu._1
1197- let ev = eu._2
1198- if (cL(cM))
1199+ let cO = ex._1
1200+ let ey = ex._2
1201+ if (cN(cO))
11991202 then throw()
12001203 else {
1201- let ec = cw(es, dT)
1202- if ((ec == ec))
1204+ let ef = cy(ev, dW)
1205+ if ((ef == ef))
12031206 then {
1204- let dB = (er - dx)
1205- let dD = if ((dB > 0))
1206- then invoke(T, "airDrop", nil, [AttachedPayment(dW, dB)])
1207+ let dE = (eu - dA)
1208+ let dG = if ((dE > 0))
1209+ then invoke(U, "airDrop", nil, [AttachedPayment(dZ, dE)])
12071210 else 0
1208- if ((dD == dD))
1209- then [ScriptTransfer(cY.originCaller, cf, dW), IntegerEntry((ag[ep] + i), (aU[ep] - es)), Burn(X, ee), ScriptTransfer(O, dx, dW), IntegerEntry(m, (Y - ee))]
1211+ if ((dG == dG))
1212+ then [ScriptTransfer(da.originCaller, ch, dZ), IntegerEntry((ah[es] + i), (aW[es] - ev)), Burn(Y, eh), ScriptTransfer(P, dA, dZ), IntegerEntry(m, (Z - eh))]
12101213 else throw("Strict value is not equal to itself.")
12111214 }
12121215 else throw("Strict value is not equal to itself.")
12131216 }
12141217 }
12151218 }
12161219 }
12171220 })
12181221
12191222
12201223
1221-@Callable(cY)
1222-func withdrawOneCoinWithUnlock (dT,eo,ek) = valueOrElse(al(), if ((0 >= ek))
1224+@Callable(da)
1225+func withdrawOneCoinWithUnlock (dW,er,en) = valueOrElse(am(), if ((0 >= en))
12231226 then throw("Unlock amount must be positive")
12241227 else {
1225- let cF = cB()
1226- if (cF._1)
1227- then (cH(cF._2) ++ cI(cY.caller, cY.payments))
1228+ let cH = cD()
1229+ if (cH._1)
1230+ then (cJ(cH._2) ++ cK(da.caller, da.payments))
12281231 else {
1229- let ee = if ((size(cY.payments) > 0))
1230- then if ((size(cY.payments) != 1))
1232+ let eh = if ((size(da.payments) > 0))
1233+ then if ((size(da.payments) != 1))
12311234 then throw("size(payments) != 1")
12321235 else {
1233- let ef = cY.payments[0].assetId
1234- if ((X != ef))
1236+ let ei = da.payments[0].assetId
1237+ if ((Y != ei))
12351238 then throw("unknown payment token")
1236- else cY.payments[0].amount
1239+ else da.payments[0].amount
12371240 }
12381241 else 0
1239- let el = invoke(S, "withdrawShareTokens", [toString(this), ek], nil)
1240- if ((el == el))
1242+ let eo = invoke(T, "withdrawShareTokens", [toString(this), en], nil)
1243+ if ((eo == eo))
12411244 then {
1242- let em = (ee + ek)
1243- let dC = invoke(this, "withdrawOneCoin", [dT, eo], [AttachedPayment(X, em)])
1244- if ((dC == dC))
1245+ let ep = (eh + en)
1246+ let dF = invoke(this, "withdrawOneCoin", [dW, er], [AttachedPayment(Y, ep)])
1247+ if ((dF == dF))
12451248 then nil
12461249 else throw("Strict value is not equal to itself.")
12471250 }
12481251 else throw("Strict value is not equal to itself.")
12491252 }
12501253 })
12511254
12521255
12531256
1254-@Callable(cY)
1255-func A () = $Tuple2(nil, aD())
1257+@Callable(da)
1258+func A () = $Tuple2(nil, aF())
12561259
12571260
12581261
1259-@Callable(cY)
1262+@Callable(da)
12601263 func getVirtualPrice () = {
1261- let bl = aX(aI(), aD())
1262- $Tuple2(nil, fraction(bl, a, Y))
1264+ let bn = aZ(aK(), aF())
1265+ $Tuple2(nil, fraction(bn, a, Z))
12631266 }
12641267
12651268
12661269
1267-@Callable(cY)
1268-func calcTokenAmount (ew,ex) = {
1269- let aY = aD()
1270- let ey = aI()
1271- let bT = bo(ey, aY)
1272- func ez (aK,eg) = {
1273- let eA = aK
1274- let cM = eA._1
1275- let an = eA._2
1276- let dm = (eg + (if (ex)
1277- then ew[an]
1278- else -(ew[an])))
1279- $Tuple2((cM :+ dm), (an + 1))
1270+@Callable(da)
1271+func calcTokenAmount (ez,eA) = {
1272+ let ba = aF()
1273+ let eB = aK()
1274+ let bV = bq(eB, ba)
1275+ func eC (aM,ej) = {
1276+ let eD = aM
1277+ let cO = eD._1
1278+ let ao = eD._2
1279+ let dp = (ej + (if (eA)
1280+ then ez[ao]
1281+ else -(ez[ao])))
1282+ $Tuple2((cO :+ dp), (ao + 1))
12801283 }
12811284
1282- let cM = ( let aM = ey
1283- let aN = size(aM)
1284- let aO = $Tuple2(nil, 0)
1285- func aP (aQ,aR) = if ((aR >= aN))
1286- then aQ
1287- else ez(aQ, aM[aR])
1285+ let cO = ( let aO = eB
1286+ let aP = size(aO)
1287+ let aQ = $Tuple2(nil, 0)
1288+ func aR (aS,aT) = if ((aT >= aP))
1289+ then aS
1290+ else eC(aS, aO[aT])
12881291
1289- func aS (aQ,aR) = if ((aR >= aN))
1290- then aQ
1292+ func aU (aS,aT) = if ((aT >= aP))
1293+ then aS
12911294 else throw("List size exceeds 10")
12921295
1293- aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10))._1
1294- let bU = bo(cM, aY)
1295- let eB = if (ex)
1296- then (bU - bT)
1297- else (bT - bU)
1298- $Tuple2(nil, fraction(eB, Y, bT))
1296+ aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10))._1
1297+ let bW = bq(cO, ba)
1298+ let eE = if (eA)
1299+ then (bW - bV)
1300+ else (bV - bW)
1301+ $Tuple2(nil, fraction(eE, Z, bV))
12991302 }
13001303
13011304
13021305
1303-@Callable(cY)
1304-func rampA (eC,eD) = valueOrElse(al(), valueOrElse(am(cY), if (au((at >= (ae + e))))
1306+@Callable(da)
1307+func rampA (eF,eG) = valueOrElse(am(), valueOrElse(an(da), if (av((au >= (af + e))))
13051308 then throw("too often")
1306- else if (au((eD >= (at + e))))
1309+ else if (av((eG >= (au + e))))
13071310 then throw("insufficient time")
13081311 else {
1309- let eE = aD()
1310- if (au(if ((eC > 0))
1311- then (b > eC)
1312+ let eH = aF()
1313+ if (av(if ((eF > 0))
1314+ then (b > eF)
13121315 else false))
13131316 then throw("out of base range")
1314- else if (au(if (if ((eC >= eE))
1315- then ((eE * c) >= eC)
1317+ else if (av(if (if ((eF >= eH))
1318+ then ((eH * c) >= eF)
13161319 else false)
13171320 then true
1318- else if ((eE > eC))
1319- then ((eC * c) >= eE)
1321+ else if ((eH > eF))
1322+ then ((eF * c) >= eH)
13201323 else false))
13211324 then throw("out of range")
1322- else [IntegerEntry("initial_A", eE), IntegerEntry("future_A", eC), IntegerEntry("initial_A_time", at), IntegerEntry("future_A_time", eD)]
1325+ else [IntegerEntry("initial_A", eH), IntegerEntry("future_A", eF), IntegerEntry("initial_A_time", au), IntegerEntry("future_A_time", eG)]
13231326 }))
13241327
13251328
13261329
1327-@Callable(cY)
1328-func stopRampA () = valueOrElse(al(), valueOrElse(am(cY), {
1329- let eF = aD()
1330-[IntegerEntry("initial_A", eF), IntegerEntry("future_A", eF), IntegerEntry("initial_A_time", at), IntegerEntry("future_A_time", at)]
1330+@Callable(da)
1331+func stopRampA () = valueOrElse(am(), valueOrElse(an(da), {
1332+ let eI = aF()
1333+[IntegerEntry("initial_A", eI), IntegerEntry("future_A", eI), IntegerEntry("initial_A_time", au), IntegerEntry("future_A_time", au)]
13311334 }))
13321335
13331336
13341337
1335-@Callable(cY)
1336-func shutdown () = valueOrElse(am(cY), if (!(W))
1338+@Callable(da)
1339+func shutdown () = valueOrElse(an(da), if (!(X))
13371340 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, k), "the cause wasn't specified")))
1338- else ai("Paused by admin"))
1341+ else aj("Paused by admin"))
13391342
13401343
13411344
1342-@Callable(cY)
1343-func activate () = valueOrElse(am(cY), if (W)
1344- then ak()
1345+@Callable(da)
1346+func activate () = valueOrElse(an(da), if (X)
1347+ then al()
13451348 else [BooleanEntry(j, true), DeleteEntry(k)])
13461349
13471350
13481351
1349-@Callable(cY)
1350-func takeIntoAccountExtraFunds () = valueOrElse(al(), if ((cY.caller != O))
1352+@Callable(da)
1353+func takeIntoAccountExtraFunds () = valueOrElse(am(), if ((da.caller != P))
13511354 then throw("Only the wallet can call this function")
13521355 else {
1353- let ey = aI()
1354- func eG (aK,aL) = {
1355- let eH = aK
1356- let eI = eH._1
1357- let an = eH._2
1358- let eJ = fromBase58String(aL)
1359- let eK = (assetBalance(this, eJ) + cy(eJ))
1360- let eL = (eK - ey[an])
1361- if ((0 > eL))
1362- then ai(("Enroll amount negative for asset" + aL))
1356+ let eB = aK()
1357+ func eJ (aM,aN) = {
1358+ let eK = aM
1359+ let eL = eK._1
1360+ let ao = eK._2
1361+ let eM = fromBase58String(aN)
1362+ let eN = (assetBalance(this, eM) + cA(eM))
1363+ let eO = (eN - eB[ao])
1364+ if ((0 > eO))
1365+ then aj(("Enroll amount negative for asset" + aN))
13631366 else {
1364- let dD = if ((eL > 0))
1365- then invoke(T, "airDrop", nil, [AttachedPayment(eJ, eL)])
1367+ let dG = if ((eO > 0))
1368+ then invoke(U, "airDrop", nil, [AttachedPayment(eM, eO)])
13661369 else 0
1367- if ((dD == dD))
1368- then $Tuple2((eI + eL), (an + 1))
1370+ if ((dG == dG))
1371+ then $Tuple2((eL + eO), (ao + 1))
13691372 else throw("Strict value is not equal to itself.")
13701373 }
13711374 }
13721375
1373- let dp = {
1374- let aM = ag
1375- let aN = size(aM)
1376- let aO = $Tuple2(0, 0)
1377- func aP (aQ,aR) = if ((aR >= aN))
1378- then aQ
1379- else eG(aQ, aM[aR])
1376+ let ds = {
1377+ let aO = ah
1378+ let aP = size(aO)
1379+ let aQ = $Tuple2(0, 0)
1380+ func aR (aS,aT) = if ((aT >= aP))
1381+ then aS
1382+ else eJ(aS, aO[aT])
13801383
1381- func aS (aQ,aR) = if ((aR >= aN))
1382- then aQ
1384+ func aU (aS,aT) = if ((aT >= aP))
1385+ then aS
13831386 else throw("List size exceeds 10")
13841387
1385- aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
1388+ aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
13861389 }
1387- if ((dp._1 == 0))
1390+ if ((ds._1 == 0))
13881391 then throw("No money to take")
13891392 else nil
13901393 })
13911394
13921395
1393-@Verifier(eM)
1394-func eN () = {
1395- let eO = {
1396- let eP = if (sigVerify(eM.bodyBytes, eM.proofs[0], K))
1396+@Verifier(eP)
1397+func eQ () = {
1398+ let eR = {
1399+ let eS = if (sigVerify(eP.bodyBytes, eP.proofs[0], L))
13971400 then 1
13981401 else 0
1399- let eQ = if (sigVerify(eM.bodyBytes, eM.proofs[1], L))
1402+ let eT = if (sigVerify(eP.bodyBytes, eP.proofs[1], M))
14001403 then 1
14011404 else 0
1402- let eR = if (sigVerify(eM.bodyBytes, eM.proofs[2], M))
1405+ let eU = if (sigVerify(eP.bodyBytes, eP.proofs[2], N))
14031406 then 1
14041407 else 0
1405- (((eP + eQ) + eR) >= 2)
1408+ (((eS + eT) + eU) >= 2)
14061409 }
1407- let H = eM
1408- if ($isInstanceOf(H, "InvokeScriptTransaction"))
1410+ let I = eP
1411+ if ($isInstanceOf(I, "InvokeScriptTransaction"))
14091412 then {
1410- let dC = H
1411- let eS = if ((dC.dApp == this))
1412- then (dC.function == "takeIntoAccountExtraFunds")
1413+ let dF = I
1414+ let eV = if ((dF.dApp == this))
1415+ then (dF.function == "takeIntoAccountExtraFunds")
14131416 else false
1414- let eT = if (if (if (sigVerify(eM.bodyBytes, eM.proofs[0], K))
1417+ let eW = if (if (if (sigVerify(eP.bodyBytes, eP.proofs[0], L))
14151418 then true
1416- else sigVerify(eM.bodyBytes, eM.proofs[0], L))
1419+ else sigVerify(eP.bodyBytes, eP.proofs[0], M))
14171420 then true
1418- else sigVerify(eM.bodyBytes, eM.proofs[0], M))
1421+ else sigVerify(eP.bodyBytes, eP.proofs[0], N))
14191422 then true
1420- else sigVerify(eM.bodyBytes, eM.proofs[0], N)
1421- if (if (eS)
1422- then eT
1423+ else sigVerify(eP.bodyBytes, eP.proofs[0], O)
1424+ if (if (eV)
1425+ then eW
14231426 else false)
14241427 then true
1425- else eO
1428+ else eR
14261429 }
1427- else eO
1430+ else eR
14281431 }
14291432

github/deemru/w8io/169f3d6 
596.23 ms