tx · 4FzvezCYuo6RJZyzVpca5geyJtLbDjCoz7SpGm6Ka1N6

3MqQg3GcBjjk5727HxPKgQfqGQwWm6QA2yL:  -0.03900000 Waves

2022.09.22 17:44 [2240475] smart account 3MqQg3GcBjjk5727HxPKgQfqGQwWm6QA2yL > SELF 0.00000000 Waves

{ "type": 13, "id": "4FzvezCYuo6RJZyzVpca5geyJtLbDjCoz7SpGm6Ka1N6", "fee": 3900000, "feeAssetId": null, "timestamp": 1663857888621, "version": 2, "chainId": 84, "sender": "3MqQg3GcBjjk5727HxPKgQfqGQwWm6QA2yL", "senderPublicKey": "4AhS4PdxdW6j71mgHB4Xq7Eewk1rPdm57kDHAwQTTweK", "proofs": [ "3xWxsCiKgyaPZwKdJx18n7tgk6g1yg9x7kALmY5Lcex1TrVVawHD2fGzhdqYaVoJR2oZHsANCSq45etUhRbsMRje", "5MqWxaBanJQuRzTMKtKLVa1mrw1wCjXY9TZpsQUHrRJWPWxb3FB6b4fh3Rqrmfk2nvuiQ7CW2yopYfJUsN7BBNNe" ], "script": "base64:BgJlCAISBAoCEQESBQoDCAEBEgQKAgEEEgQKAhEIEgMKAQESBgoECAgBCBIECgIIARIDCgEREgQKAhEBEgUKAwEICBIECgIIARIFCgMIAQESABIAEgQKAhEEEgQKAgEBEgASABIAEgBUAAlQUkVDSVNJT04AwIQ9AAVNQVhfQQDAhD0ADE1BWF9BX0NIQU5HRQAKAAhERUNJTUFMUwAGAA1NSU5fUkFNUF9USU1FCQBpAgCAowUAPAAHdmVyc2lvbgIFMy4wLjAACGtWZXJzaW9uAgd2ZXJzaW9uAAdrQXNzZXRzAglhc3NldF9pZHMADWtBc3NldEJhbGFuY2UCCF9iYWxhbmNlAAdrQWN0aXZlAgZhY3RpdmUABmtDYXVzZQIOc2h1dGRvd25fY2F1c2UADWtTaGFyZUFzc2V0SWQCDnNoYXJlX2Fzc2V0X2lkABFrU2hhcmVBc3NldFN1cHBseQISc2hhcmVfYXNzZXRfc3VwcGx5AARrRmVlAgpjb21taXNzaW9uABJrREFwcFRocmVzaG9sZENvZWYCEWRBcHBUaHJlc2hvbGRDb2VmAAxrVVNETkFkZHJlc3MCGHN0YWtpbmdfdXNkbm5zYnRfYWRkcmVzcwAKa0Rpc2NvdW50cwIJZGlzY291bnRzAA9rRGlzY291bnRWYWx1ZXMCD2Rpc2NvdW50X3ZhbHVlcwAOa1VzZXJTd29wSW5Hb3YCDF9TV09QX2Ftb3VudAANa0FkbWluUHViS2V5MQILYWRtaW5fcHViXzEADWtBZG1pblB1YktleTICC2FkbWluX3B1Yl8yAA1rQWRtaW5QdWJLZXkzAgthZG1pbl9wdWJfMwASa0FkbWluSW52b2tlUHViS2V5AhBhZG1pbl9pbnZva2VfcHViABBrTW9uZXlCb3hBZGRyZXNzAhFtb25leV9ib3hfYWRkcmVzcwALa0dvdkFkZHJlc3MCEmdvdmVybmFuY2VfYWRkcmVzcwAOa1ZvdGluZ0FkZHJlc3MCDnZvdGluZ19hZGRyZXNzAA9rRmFybWluZ0FkZHJlc3MCD2Zhcm1pbmdfYWRkcmVzcwARa0xQRmFybWluZ0FkZHJlc3MCCmxwX2Zhcm1pbmcABm9yYWNsZQkBB0FkZHJlc3MBARoBVOlFqh6QLzqu8boO5i6akl8amITh82KzCAETZ2V0QmFzZTU4RnJvbU9yYWNsZQEDa2V5BAckbWF0Y2gwCQCdCAIFBm9yYWNsZQUDa2V5AwkAAQIFByRtYXRjaDACBlN0cmluZwQGc3RyaW5nBQckbWF0Y2gwCQDZBAEFBnN0cmluZwQHbm90aGluZwUHJG1hdGNoMAkAAgEJAKwCAgUDa2V5AghpcyBlbXB0eQAMYWRtaW5QdWJLZXkxCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDWtBZG1pblB1YktleTEADGFkbWluUHViS2V5MgkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQ1rQWRtaW5QdWJLZXkyAAxhZG1pblB1YktleTMJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUNa0FkbWluUHViS2V5MwARYWRtaW5QdWJLZXlJbnZva2UJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUSa0FkbWluSW52b2tlUHViS2V5AA9tb25leUJveEFkZHJlc3MJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBRBrTW9uZXlCb3hBZGRyZXNzAApnb3ZBZGRyZXNzCQEHQWRkcmVzcwEJARNnZXRCYXNlNThGcm9tT3JhY2xlAQULa0dvdkFkZHJlc3MAEnN0YWtpbmdVU0ROQWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDGtVU0ROQWRkcmVzcwANdm90aW5nQWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDmtWb3RpbmdBZGRyZXNzAA5mYXJtaW5nQWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFD2tGYXJtaW5nQWRkcmVzcwAQbHBGYXJtaW5nQWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFEWtMUEZhcm1pbmdBZGRyZXNzAARVU0ROASBvJKPKqzDcUimY6CxhWu5afyNNwi11u+mdqlTg0tAHwQANc3Rha2luZ0Fzc2V0cwkAzAgCCQDYBAEFBFVTRE4FA25pbAAGYWN0aXZlCQERQGV4dHJOYXRpdmUoMTA1MSkCBQR0aGlzBQdrQWN0aXZlAAxzaGFyZUFzc2V0SWQJANkEAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUNa1NoYXJlQXNzZXRJZAALc2hhcmVTdXBwbHkJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFEWtTaGFyZUFzc2V0U3VwcGx5AAlmZWVTY2FsZTYAwIQ9AANmZWUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFBGtGZWUADWZlZUdvdmVybmFuY2UJAGsDACgFCWZlZVNjYWxlNgBkAAlpbml0aWFsX0EJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCCWluaXRpYWxfQQAIZnV0dXJlX0EJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCCGZ1dHVyZV9BAA5pbml0aWFsX0FfdGltZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzAg5pbml0aWFsX0FfdGltZQAAAA1mdXR1cmVfQV90aW1lCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMCDWZ1dHVyZV9BX3RpbWUAAAAIYXNzZXRJZHMJALUJAgkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUHa0Fzc2V0cwIBLAAGbkNvaW5zCQCQAwEFCGFzc2V0SWRzAQdzdXNwZW5kAQVjYXVzZQkAzAgCCQEMQm9vbGVhbkVudHJ5AgUHa0FjdGl2ZQcJAMwIAgkBC1N0cmluZ0VudHJ5AgUGa0NhdXNlBQVjYXVzZQUDbmlsAQ10aHJvd0lzQWN0aXZlAAkAAgECFkRBcHAgaXMgYWxyZWFkeSBhY3RpdmUBCGlzQWN0aXZlAAMFBmFjdGl2ZQUEdW5pdAkAAgECH0RBcHAgaXMgaW5hY3RpdmUgYXQgdGhpcyBtb21lbnQBC2lzQWRtaW5DYWxsAQFpAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUMYWRtaW5QdWJLZXkxCQDMCAIFDGFkbWluUHViS2V5MgkAzAgCBQxhZG1pblB1YktleTMFA25pbAgFAWkPY2FsbGVyUHVibGljS2V5BQR1bml0CQACAQIhT25seSBhZG1pbiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uAQppc1NlbGZDYWxsAQFpAwkAAAIFBHRoaXMIBQFpBmNhbGxlcgUEdW5pdAkAAgECK09ubHkgY29udHJhY3QgaXRzZWxmIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24ABGJpZzIJALYCAQACAA5ibG9ja1RpbWVzdGFtcAUGaGVpZ2h0AQZhc3NlcnQBAWEDBQFhBwYBFGNhbGN1bGF0ZUZlZURpc2NvdW50AQh1c2VyQWRkcgQEdXNlcgQHJG1hdGNoMAUIdXNlckFkZHIDCQABAgUHJG1hdGNoMAIHQWRkcmVzcwQBdQUHJG1hdGNoMAkApQgBBQF1AwkAAQIFByRtYXRjaDACBlN0cmluZwQBdQUHJG1hdGNoMAUBdQkAAgECGFVua25vdyB0eXBlIG9mIHVzZXIgQWRkcgQKc3dvcEFtb3VudAkBC3ZhbHVlT3JFbHNlAgkAmggCBQpnb3ZBZGRyZXNzCQCsAgIFBHVzZXIFDmtVc2VyU3dvcEluR292AAAEDmRpc2NvdW50VmFsdWVzCQC1CQIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBm9yYWNsZQUPa0Rpc2NvdW50VmFsdWVzAgEsBAlkaXNjb3VudHMJALUJAgkBEUBleHRyTmF0aXZlKDEwNTMpAgUGb3JhY2xlBQprRGlzY291bnRzAgEsAwMJAGcCBQpzd29wQW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMAAAkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwABBQpzd29wQW1vdW50BwkAZQIFCWZlZVNjYWxlNgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWRpc2NvdW50cwAAAwMJAGcCBQpzd29wQW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMAAQkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwACBQpzd29wQW1vdW50BwkAZQIFCWZlZVNjYWxlNgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWRpc2NvdW50cwABAwMJAGcCBQpzd29wQW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMAAgkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwADBQpzd29wQW1vdW50BwkAZQIFCWZlZVNjYWxlNgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWRpc2NvdW50cwACAwMJAGcCBQpzd29wQW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMAAwkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwAEBQpzd29wQW1vdW50BwkAZQIFCWZlZVNjYWxlNgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWRpc2NvdW50cwADAwkAZwIFCnN3b3BBbW91bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwAECQBlAgUJZmVlU2NhbGU2CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJZGlzY291bnRzAAQFCWZlZVNjYWxlNgECX0EABAJ0MQUNZnV0dXJlX0FfdGltZQQCQTEFCGZ1dHVyZV9BAwkAZgIFAnQxBQ5ibG9ja1RpbWVzdGFtcAQCQTAFCWluaXRpYWxfQQQCdDAFDmluaXRpYWxfQV90aW1lAwkAZgIFAkExBQJBMAkAZAIFAkEwCQBpAgkAaAIJAGUCBQJBMQUCQTAJAGUCBQ5ibG9ja1RpbWVzdGFtcAUCdDAJAGUCBQJ0MQUCdDAJAGUCBQJBMAkAaQIJAGgCCQBlAgUCQTAFAkExCQBlAgUOYmxvY2tUaW1lc3RhbXAFAnQwCQBlAgUCdDEFAnQwBQJBMQEDX3hwAAoBDWFzc2V0QmFsYW5jZXMCA2FjYwdhc3NldElkCQDNCAIFA2FjYwkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFB2Fzc2V0SWQFDWtBc3NldEJhbGFuY2UAAAoAAiRsBQhhc3NldElkcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQENYXNzZXRCYWxhbmNlcwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTUJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8BB194cF9tZW0BAnhwBQJ4cAEHc3VtTGlzdAIDYWNjB2VsZW1lbnQJAGQCBQNhY2MFB2VsZW1lbnQBBWdldF9EAgJ4cANhbXAKAAFACQD8BwQFBHRoaXMCAUQJAMwIAgUCeHAJAMwIAgUDYW1wBQNuaWwFA25pbAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBCQD8BwQFBHRoaXMCAUQJAMwIAgUCeHAJAMwIAgUDYW1wBQNuaWwFA25pbAIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50AQ5nZXRfRF9pbnRlcm5hbAICeHADYW1wBAFTCgACJGwFAnhwCgACJHMJAJADAQUCJGwKAAUkYWNjMAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQdzdW1MaXN0AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwMJAAACBQFTAAAAAAQDQW5uCQBoAgUDYW1wBQZuQ29pbnMEBEFublMJALkCAgkAtgIBBQNBbm4JALYCAQUBUwQEQW5uMQkAtgIBCQBlAgUDQW5uAAEKAQVEcHJvYwIDYWNjAWkDCQAAAggFA2FjYwJfMgYFA2FjYwQFRHByZXYIBQNhY2MCXzEKAQdEX1BQcm9jAgNEX1ABaQMJAGYCBQZuQ29pbnMFAWkJALoCAgkAuQICBQNEX1AFBURwcmV2CQC5AgIJALYCAQkAkQMCBQJ4cAUBaQkAtgIBBQZuQ29pbnMFA0RfUAQDRF9QCgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUJAMwIAgAGCQDMCAIABwkAzAgCAAgJAMwIAgAJCQDMCAIACgkAzAgCAAsJAMwIAgAMCQDMCAIADQkAzAgCAA4FA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFBURwcmV2CgEFJGYxXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQdEX1BQcm9jAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYxXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxNQkBBSRmMV8yAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwQBRAkAvAIDCQC3AgIFBEFublMJALkCAgkAtgIBBQZuQ29pbnMFA0RfUAUFRHByZXYJALcCAgkAuQICBQRBbm4xBQVEcHJldgkAuQICCQC2AgEJAGQCBQZuQ29pbnMAAQUDRF9QAwkAvwICBQFEBQVEcHJldgMJAGcCAAEJAKADAQkAuAICBQFEBQVEcHJldgkAlAoCBQFEBgkAlAoCBQFEBwMJAGcCAAEJAKADAQkAuAICBQVEcHJldgUBRAkAlAoCBQFEBgkAlAoCBQFEBwQLJHQwNjE5MTYzMDMKAAIkbAkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQkAzAgCAAYJAMwIAgAHCQDMCAIACAkAzAgCAAkJAMwIAgAKCQDMCAIACwkAzAgCAAwJAMwIAgANCQDMCAIADgUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCCQC2AgEFAVMHCgEFJGYxXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQVEcHJvYwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTUJAQUkZjFfMgIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8EAUQIBQskdDA2MTkxNjMwMwJfMQQIZmluaXNoZWQIBQskdDA2MTkxNjMwMwJfMgMJAAACBQhmaW5pc2hlZAcJAAIBCQCsAgICGmdldF9EKCkgbm90IGZpbmlzaGVkIHdpdGggCQCmAwEFAUQJAKADAQUBRAEHZ2V0RE1lbQICeHADYW1wCQEFZ2V0X0QCCQEHX3hwX21lbQEFAnhwBQNhbXABBGdldFkEAmluA291dAF4A3hwXwMJAQZhc3NlcnQBCQECIT0CBQJpbgUDb3V0CQACAQIJc2FtZSBjb2luAwkBBmFzc2VydAEDCQBnAgUDb3V0AAAJAGcCBQJpbgAABwkAAgECCmJlbG93IHplcm8DCQEGYXNzZXJ0AQMJAGYCBQZuQ29pbnMFA291dAkAZgIFBm5Db2lucwUCaW4HCQACAQINYWJvdmUgTl9DT0lOUwQDYW1wCQECX0EABAFECQEFZ2V0X0QCBQN4cF8FA2FtcAQDQW5uCQBoAgUDYW1wBQZuQ29pbnMKAQNTX2MCA2FjYwFpBAskdDA2ODc0Njg5MQUDYWNjBAJTXwgFCyR0MDY4NzQ2ODkxAl8xBAFjCAULJHQwNjg3NDY4OTECXzIEAnhfAwkAAAIFAmluBQFpBQF4CQCRAwIFA3hwXwUBaQMDCQECIT0CBQFpBQNvdXQJAGYCBQZuQ29pbnMFAWkHCQCUCgIJAGQCBQJTXwUCeF8JALwCAwUBYwkAtgIBBQFECQC2AgEJAGgCBQJ4XwUGbkNvaW5zCQCUCgIFAlNfBQFjBAskdDA3MDk5NzIwMAoAAiRsCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFCQDMCAIABgkAzAgCAAcJAMwIAgAICQDMCAIACQkAzAgCAAoJAMwIAgALCQDMCAIADAkAzAgCAA0JAMwIAgAOBQNuaWwKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIAAAkAtgIBBQFECgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQNTX2MCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDE1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPBAJTXwgFCyR0MDcwOTk3MjAwAl8xBAJjXwgFCyR0MDcwOTk3MjAwAl8yBAFjCQC8AgMFAmNfCQC2AgEFAUQJALYCAQkAaAIFA0FubgUGbkNvaW5zBAJiRAkAtgIBCQBlAgkAZAIFAlNfCQBpAgUBRAUDQW5uBQFECgEGeV9wcm9jAgNhY2MCX2kDCQAAAggFA2FjYwJfMgYFA2FjYwQGeV9wcmV2CAUDYWNjAl8xBAF5CQC6AgIJALcCAgkAuQICBQZ5X3ByZXYFBnlfcHJldgUBYwkAtwICCQC5AgIFBGJpZzIFBnlfcHJldgUCYkQDCQC/AgIFAXkFBnlfcHJldgMJAGcCAAEJAKADAQkAuAICBQF5BQZ5X3ByZXYJAJQKAgUBeQYJAJQKAgUBeQcDCQBnAgABCQCgAwEJALgCAgUGeV9wcmV2BQF5CQCUCgIFAXkGCQCUCgIFAXkHBAskdDA3NjgyNzc5OQoAAiRsCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFCQDMCAIABgkAzAgCAAcJAMwIAgAICQDMCAIACQkAzAgCAAoJAMwIAgALCQDMCAIADAkAzAgCAA0JAMwIAgAOCQDMCAIADwUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCCQC2AgEFAUQHCgEFJGYxXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQZ5X3Byb2MCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjFfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDE2CQEFJGYxXzICCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAEAXkIBQskdDA3NjgyNzc5OQJfMQQIZmluaXNoZWQIBQskdDA3NjgyNzc5OQJfMgMJAAACBQhmaW5pc2hlZAcJAAIBCQCsAgICGWdldFkoKSBub3QgZmluaXNoZWQgd2l0aCAJAKYDAQUBeQkAoAMBBQF5AQdnZXRfeV9EBAJBXwJpbgJ4cAFEAwkBBmFzc2VydAEJAGcCBQJpbgAACQACAQIMaSBiZWxvdyB6ZXJvAwkBBmFzc2VydAEJAGYCBQZuQ29pbnMFAmluCQACAQIPaSBhYm92ZSBOX0NPSU5TBANBbm4JAGgCBQJBXwUGbkNvaW5zCgEDU19jAgNhY2MBaQQLJHQwODE3ODgxOTUFA2FjYwQCU18IBQskdDA4MTc4ODE5NQJfMQQBYwgFCyR0MDgxNzg4MTk1Al8yBAJ4XwMDCQECIT0CBQJpbgUBaQkAZgIFBm5Db2lucwUBaQcJAJEDAgUCeHAFAWkAAAMDCQBmAgUGbkNvaW5zBQFpCQECIT0CBQJpbgUBaQcJAJQKAgkAZAIFAlNfBQJ4XwkAvAIDBQFjCQC2AgEFAUQJALYCAQkAaAIFAnhfBQZuQ29pbnMJAJQKAgUCU18FAWMECyR0MDg0MTU4NTE2CgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUJAMwIAgAGCQDMCAIABwkAzAgCAAgJAMwIAgAJCQDMCAIACgkAzAgCAAsJAMwIAgAMCQDMCAIADQkAzAgCAA4FA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgAACQC2AgEFAUQKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBA1NfYwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTUJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8EAlNfCAULJHQwODQxNTg1MTYCXzEEAmNfCAULJHQwODQxNTg1MTYCXzIEAWMJALwCAwUCY18JALYCAQUBRAkAtgIBCQBoAgUDQW5uBQZuQ29pbnMEAmJECQC2AgEJAGUCCQBkAgUCU18JAGkCBQFEBQNBbm4FAUQKAQh5X0RfcHJvYwIDYWNjAWkDCQAAAggFA2FjYwJfMgYFA2FjYwQGeV9wcmV2CAUDYWNjAl8xBAF5CQC6AgIJALcCAgkAuQICBQZ5X3ByZXYFBnlfcHJldgUBYwkAtwICCQC5AgIFBGJpZzIFBnlfcHJldgUCYkQDCQC/AgIFAXkFBnlfcHJldgMJAGcCAAEJAKADAQkAuAICBQF5BQZ5X3ByZXYJAJQKAgUBeQYJAJQKAgUBeQcDCQBnAgABCQCgAwEJALgCAgUGeV9wcmV2BQF5CQCUCgIFAXkGCQCUCgIFAXkHBAskdDA4OTk5OTExOAoAAiRsCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFCQDMCAIABgkAzAgCAAcJAMwIAgAICQDMCAIACQkAzAgCAAoJAMwIAgALCQDMCAIADAkAzAgCAA0JAMwIAgAOCQDMCAIADwUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCCQC2AgEFAUQHCgEFJGYxXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQh5X0RfcHJvYwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTYJAQUkZjFfMgIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAQBeQgFCyR0MDg5OTk5MTE4Al8xBAhmaW5pc2hlZAgFCyR0MDg5OTk5MTE4Al8yAwkAAAIFCGZpbmlzaGVkBwkAAgEJAKwCAgIcZ2V0X3lfRCgpIG5vdCBmaW5pc2hlZCB3aXRoIAkApgMBBQF5CQCgAwEFAXkBFF9jYWxjV2l0aGRyYXdPbmVDb2luBAJ4cA1fdG9rZW5fYW1vdW50AWkGY2FsbGVyBAtmZWVEaXNjb3VudAkBFGNhbGN1bGF0ZUZlZURpc2NvdW50AQUGY2FsbGVyBANhbXAJAQJfQQAEBF9mZWUJAGkCCQBoAgkAbgQFA2ZlZQULZmVlRGlzY291bnQFCWZlZVNjYWxlNgUHQ0VJTElORwUGbkNvaW5zCQBoAgAECQBlAgUGbkNvaW5zAAEEDHRvdGFsX3N1cHBseQULc2hhcmVTdXBwbHkEAkQwCQEFZ2V0X0QCBQJ4cAUDYW1wBAJEMQkAZQIFAkQwCQBrAwUNX3Rva2VuX2Ftb3VudAUCRDAFDHRvdGFsX3N1cHBseQQFbmV3X3kJAQdnZXRfeV9EBAUDYW1wBQFpBQJ4cAUCRDEEBGR5XzAJAGUCCQCRAwIFAnhwBQFpBQVuZXdfeQoBD3hwX3JlZHVjZWRfcHJvYwIDYWNjBHhwX2oECyR0MDk3NTk5Nzg4BQNhY2MECnhwX3JlZHVjZWQIBQskdDA5NzU5OTc4OAJfMQQFaW5kZXgIBQskdDA5NzU5OTc4OAJfMgQLZHhfZXhwZWN0ZWQDCQAAAgUFaW5kZXgFAWkJAGUCCQBrAwUEeHBfagUCRDEFAkQwBQVuZXdfeQkAZQIFBHhwX2oJAGsDBQR4cF9qBQJEMQUCRDAJAJQKAgkAzQgCBQp4cF9yZWR1Y2VkCQBlAgUEeHBfagkAawMFBF9mZWUFC2R4X2V4cGVjdGVkBQlmZWVTY2FsZTYJAGQCBQVpbmRleAABBA0kdDAxMDA1MDEwMTE0CgACJGwFAnhwCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEPeHBfcmVkdWNlZF9wcm9jAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwQKeHBfcmVkdWNlZAgFDSR0MDEwMDUwMTAxMTQCXzEEBWluZGV4CAUNJHQwMTAwNTAxMDExNAJfMgQMeHBfcmVkdWNlZF9pCQCRAwIFCnhwX3JlZHVjZWQFAWkEAmR5CQBlAgkAZQIFDHhwX3JlZHVjZWRfaQkBB2dldF95X0QEBQNhbXAFAWkFCnhwX3JlZHVjZWQFAkQxAAEJAJQKAgUCZHkJAGUCBQRkeV8wBQJkeQENZ2V0U3RyQXNzZXRJZAEHYXNzZXRJZAQHJG1hdGNoMAUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAJpZAUHJG1hdGNoMAkA2AQBBQJpZAMJAAECBQckbWF0Y2gwAgRVbml0BAV3YXZlcwUHJG1hdGNoMAIFV0FWRVMJAAIBAgtNYXRjaCBlcnJvcgEYY2FsY1N0YWtpbmdGdW5jQW5kQWRkcmVzAgVzdGFrZQdhc3NldElkAwUFc3Rha2UJAJQKAgIMbG9ja05ldXRyaW5vBRJzdGFraW5nVVNETkFkZHJlc3MJAJQKAgIOdW5sb2NrTmV1dHJpbm8FEnN0YWtpbmdVU0ROQWRkcmVzcwERY2FsY1N0YWtpbmdQYXJhbXMDBXN0YWtlBmFtb3VudAdhc3NldElkAwUFc3Rha2UEDSR0MDEwNjc4MTA3NDQJARhjYWxjU3Rha2luZ0Z1bmNBbmRBZGRyZXMCBQVzdGFrZQUHYXNzZXRJZAQEY2FsbAgFDSR0MDEwNjc4MTA3NDQCXzEEC3N0YWtpbmdBZGRyCAUNJHQwMTA2NzgxMDc0NAJfMgkAlgoEBQRjYWxsBQtzdGFraW5nQWRkcgUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQdhc3NldElkBQZhbW91bnQFA25pbAQNJHQwMTA4MzAxMDg5NgkBGGNhbGNTdGFraW5nRnVuY0FuZEFkZHJlcwIFBXN0YWtlBQdhc3NldElkBARjYWxsCAUNJHQwMTA4MzAxMDg5NgJfMQQLc3Rha2luZ0FkZHIIBQ0kdDAxMDgzMDEwODk2Al8yCQCWCgQFBGNhbGwFC3N0YWtpbmdBZGRyCQDMCAIFBmFtb3VudAkAzAgCCQDYBAEFB2Fzc2V0SWQFA25pbAUDbmlsAQVzdGFrZQIGYW1vdW50DWFzc2V0SWRTdHJpbmcDCQEPY29udGFpbnNFbGVtZW50AgUNc3Rha2luZ0Fzc2V0cwUNYXNzZXRJZFN0cmluZwQNJHQwMTEwODMxMTE4NQkBEWNhbGNTdGFraW5nUGFyYW1zAwYFBmFtb3VudAkA2QQBBQ1hc3NldElkU3RyaW5nBARjYWxsCAUNJHQwMTEwODMxMTE4NQJfMQQEYWRkcggFDSR0MDExMDgzMTExODUCXzIEBnBhcmFtcwgFDSR0MDExMDgzMTExODUCXzMECHBheW1lbnRzCAUNJHQwMTEwODMxMTE4NQJfNAkA/AcEBQRhZGRyBQRjYWxsBQZwYXJhbXMFCHBheW1lbnRzAAABB3Vuc3Rha2UCBmFtb3VudA1hc3NldElkU3RyaW5nAwkBD2NvbnRhaW5zRWxlbWVudAIFDXN0YWtpbmdBc3NldHMFDWFzc2V0SWRTdHJpbmcEDSR0MDExMzcwMTE0NzMJARFjYWxjU3Rha2luZ1BhcmFtcwMHBQZhbW91bnQJANkEAQUNYXNzZXRJZFN0cmluZwQEY2FsbAgFDSR0MDExMzcwMTE0NzMCXzEEBGFkZHIIBQ0kdDAxMTM3MDExNDczAl8yBAZwYXJhbXMIBQ0kdDAxMTM3MDExNDczAl8zBAhwYXltZW50cwgFDSR0MDExMzcwMTE0NzMCXzQJAPwHBAUEYWRkcgUEY2FsbAUGcGFyYW1zBQhwYXltZW50cwAAAQxzdGFrZWRBbW91bnQBB2Fzc2V0SWQEFnN0YWtlZEFtb3VudENhbGN1bGF0ZWQEByRtYXRjaDAFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQDYUlkBQckbWF0Y2gwAwkAAAIFA2FJZAUEVVNETgkAmggCBRJzdGFraW5nVVNETkFkZHJlc3MJAKwCAgkArAICCQCsAgICDHJwZF9iYWxhbmNlXwkA2AQBBQNhSWQCAV8JAKUIAQUEdGhpcwAAAwkAAQIFByRtYXRjaDACBFVuaXQAAAkAAgECC01hdGNoIGVycm9yBAckbWF0Y2gwBRZzdGFrZWRBbW91bnRDYWxjdWxhdGVkAwkAAQIFByRtYXRjaDACA0ludAQBaQUHJG1hdGNoMAUBaQAAAQ9jaGVja1N1c3BpY2lvdXMABBBjb250cmFjdEJhbGFuY2VzCQEDX3hwAAoBDGNoZWNrQmFsYW5jZQIDYWNjB2Fzc2V0SWQEDSR0MDEyMDg0MTIxMDkFA2FjYwQKc3VzcGljaW91cwgFDSR0MDEyMDg0MTIxMDkCXzEEAWkIBQ0kdDAxMjA4NDEyMTA5Al8yAwUKc3VzcGljaW91cwkAlAoCBQpzdXNwaWNpb3VzBQFpBAhhQmFsYW5jZQkAZAIJAPAHAgUEdGhpcwkA2QQBBQdhc3NldElkCQEMc3Rha2VkQW1vdW50AQkA2QQBBQdhc3NldElkAwkAZgIJAJEDAgUQY29udHJhY3RCYWxhbmNlcwUBaQUIYUJhbGFuY2UJAJQKAgYFAWkJAJQKAgcJAGQCBQFpAAEKAAIkbAUIYXNzZXRJZHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIHAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDGNoZWNrQmFsYW5jZQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTUJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8BEXN1c3BlbmRTdXNwaWNpb3VzAQFpCQEHc3VzcGVuZAEJAKwCAgIdU3VzcGljaW91cyBzdGF0ZSB3aXRoIGFzc2V0OiAJAJEDAgUIYXNzZXRJZHMFAWkBDnJldHVyblBheW1lbnRzAgZjYWxsZXIIcGF5bWVudHMKAQ1wYXJzZVBheW1lbnRzAgNhY2MHcGF5bWVudAkAzQgCBQNhY2MJAQ5TY3JpcHRUcmFuc2ZlcgMFBmNhbGxlcggFB3BheW1lbnQGYW1vdW50CAUHcGF5bWVudAdhc3NldElkCgACJGwFCHBheW1lbnRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQ1wYXJzZVBheW1lbnRzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwESY2hlY2tEQXBwVGhyZXNob2xkAQtuZXdCYWxhbmNlcwQRZEFwcFRocmVzaG9sZENvZWYJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQR0aGlzBRJrREFwcFRocmVzaG9sZENvZWYCGE5vIGRBcHBUaHJlc2hvbGRDb2VmIGtleQQOdGhyZXNob2xkU2NhbGUAkE4ECm1heEJhbGFuY2UJAJYDAQULbmV3QmFsYW5jZXMECm1pbkJhbGFuY2UJAJcDAQULbmV3QmFsYW5jZXMEBXJhdGlvCQBrAwUKbWF4QmFsYW5jZQUOdGhyZXNob2xkU2NhbGUFCm1pbkJhbGFuY2UDCQBmAgUFcmF0aW8JAGgCBRFkQXBwVGhyZXNob2xkQ29lZgUOdGhyZXNob2xkU2NhbGUJAAIBAjhOZXcgYmFsYW5jZSBpbiBhc3NldHMgb2YgdGhlIERBcHAgaXMgbGVzcyB0aGFuIHRocmVzaG9sZAcBCmNoZWNrQ29pbnMBCGFzc2V0SWRzBAVjb2lucwkAtQkCBQhhc3NldElkcwIBLAoBCWNoZWNrQ29pbgIFZXJyb3IHYXNzZXRJZAQFYXNzZXQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA2QQBBQdhc3NldElkCQCsAgICEmZyb21CYXNlNThTdHJpbmc6IAUHYXNzZXRJZAQIZGVjaW1hbHMICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUFYXNzZXQJAKwCAgILYXNzZXRJbmZvOiAFB2Fzc2V0SWQIZGVjaW1hbHMDCQECIT0CBQhkZWNpbWFscwUIREVDSU1BTFMJAAIBAg53cm9uZyBkZWNpbWFscwcKAAIkbAUFY29pbnMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBwoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEJY2hlY2tDb2luAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADxQDbXNnAQFEAgJ4cANhbXAEAUQJAQ5nZXRfRF9pbnRlcm5hbAIFAnhwBQNhbXAJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgIBRAUBRAUDbmlsBQFEA21zZwEEaW5pdAMIYXNzZXRJZHMCX0ESX2RBcHBUaHJlc2hvbGRDb2VmAwkBASEBCQCeCAEFBHRoaXMJAAIBAhNBbHJlYWR5IGluaXRpYWxpemVkAwkAZwIAAAUCX0EJAAIBAhRBbXAgbXVzdCBiZSBtdXN0ID4gMAMJAGcCAAAFEl9kQXBwVGhyZXNob2xkQ29lZgkAAgECH2RBcHAgVGhyZXNob2xkIENvZWYgbXVzdCBiZSA+IDAECXNoYXJlTmFtZQILc19NdWx0aV9VU0QEEHNoYXJlRGVzY3JpcHRpb24JAKwCAgJCU2hhcmVUb2tlbiBvZiBTd29wRmkgcHJvdG9jb2wgZm9yIE11bHRpU3RhYmxlIFVTRCBwb29sIGF0IGFkZHJlc3MgCQClCAEFBHRoaXMECmlzc3VlVG9rZW4JAMIIBQUJc2hhcmVOYW1lBRBzaGFyZURlc2NyaXB0aW9uAAAABgYEB3Rva2VuSWQJALgIAQUKaXNzdWVUb2tlbgMJAQpjaGVja0NvaW5zAQUIYXNzZXRJZHMJAQV0aHJvdwAJAMwIAgkBC1N0cmluZ0VudHJ5AgUIa1ZlcnNpb24FB3ZlcnNpb24JAMwIAgkBC1N0cmluZ0VudHJ5AgUHa0Fzc2V0cwUIYXNzZXRJZHMJAMwIAgkBDEludGVnZXJFbnRyeQICCWluaXRpYWxfQQUCX0EJAMwIAgkBDEludGVnZXJFbnRyeQICCGZ1dHVyZV9BBQJfQQkAzAgCCQEMSW50ZWdlckVudHJ5AgUEa0ZlZQkBEUBleHRyTmF0aXZlKDEwNTApAgUGb3JhY2xlAg1iYXNlX2ZlZV9mbGF0CQDMCAIJAQtTdHJpbmdFbnRyeQIFDWtTaGFyZUFzc2V0SWQJANgEAQUHdG9rZW5JZAkAzAgCCQEMSW50ZWdlckVudHJ5AgURa1NoYXJlQXNzZXRTdXBwbHkAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgUSa0RBcHBUaHJlc2hvbGRDb2VmBRJfZEFwcFRocmVzaG9sZENvZWYJAMwIAgkBDEJvb2xlYW5FbnRyeQIFB2tBY3RpdmUGCQDMCAIFCmlzc3VlVG9rZW4FA25pbANtc2cBDGFkZExpcXVpZGl0eQINbWluTWludEFtb3VudAxzdGFrZUZhcm1pbmcJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAEA2FtcAkBAl9BAAQCeHAJAQNfeHAABAJEMAMJAAACBQtzaGFyZVN1cHBseQAAAAAJAQdnZXRETWVtAgUCeHAFA2FtcAQIcGF5bWVudHMIBQNtc2cIcGF5bWVudHMEDHBheW1lbnRzU2l6ZQkAkAMBBQhwYXltZW50cwoBDXZhbGlkUGF5bWVudHMBAW4DCQBmAgUMcGF5bWVudHNTaXplBQZuQ29pbnMJAAIBCQCsAgICEHBheW1lbnRzIHNpemUgPiAJAKQDAQUGbkNvaW5zAwkAZgIAAQUMcGF5bWVudHNTaXplCQACAQIRcGF5bWVudHMgc2l6ZSA8IDEDAwkAAAIFC3NoYXJlU3VwcGx5AAAJAQIhPQIFBm5Db2lucwUMcGF5bWVudHNTaXplBwkAAgECImluaXRpYWwgZGVwb3NpdCByZXF1aXJlcyBhbGwgY29pbnMKAQxwYXltYW50VmFsaWQCA2FjYwdwYXltZW50AwkBD2NvbnRhaW5zRWxlbWVudAIFCGFzc2V0SWRzCQENZ2V0U3RyQXNzZXRJZAEIBQdwYXltZW50B2Fzc2V0SWQGCQACAQIYSW52YWxpZCBhc3NldCBpbiBwYXltZW50CgACJGwFCHBheW1lbnRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAcKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDHBheW1hbnRWYWxpZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTUJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8DCQEBIQEJAQ12YWxpZFBheW1lbnRzAQUMcGF5bWVudHNTaXplCQEFdGhyb3cABApzdXNwaWNpb3VzCQEPY2hlY2tTdXNwaWNpb3VzAAMIBQpzdXNwaWNpb3VzAl8xCQDOCAIJARFzdXNwZW5kU3VzcGljaW91cwEIBQpzdXNwaWNpb3VzAl8yCQEOcmV0dXJuUGF5bWVudHMCCAUDbXNnBmNhbGxlcgUIcGF5bWVudHMKAQ1wYXJzZVBheW1lbnRzAgNhY2MHYXNzZXRJZAQNJHQwMTYxMjUxNjE1NAUDYWNjBAtuZXdCYWxhbmNlcwgFDSR0MDE2MTI1MTYxNTQCXzEEAWkIBQ0kdDAxNjEyNTE2MTU0Al8yBAFqCAUNJHQwMTYxMjUxNjE1NAJfMwMDCQBmAgUMcGF5bWVudHNTaXplBQFqCQAAAgkBDWdldFN0ckFzc2V0SWQBCAkAkQMCBQhwYXltZW50cwUBagdhc3NldElkBQdhc3NldElkBwkAlQoDCQDNCAIFC25ld0JhbGFuY2VzCQBkAgkAkQMCBQJ4cAUBaQgJAJEDAgUIcGF5bWVudHMFAWoGYW1vdW50CQBkAgUBaQABCQBkAgUBagABCQCVCgMJAM0IAgULbmV3QmFsYW5jZXMJAJEDAgUCeHAFAWkJAGQCBQFpAAEFAWoEDSR0MDE2Mzc0MTY0NjAKAAIkbAUIYXNzZXRJZHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCVCgMFA25pbAAAAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDXBhcnNlUGF5bWVudHMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDE1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPBAtuZXdCYWxhbmNlcwgFDSR0MDE2Mzc0MTY0NjACXzEEAWsIBQ0kdDAxNjM3NDE2NDYwAl8yBA5wYXJzZWRQYXltZW50cwgFDSR0MDE2Mzc0MTY0NjACXzMDCQBmAgUMcGF5bWVudHNTaXplBQ5wYXJzZWRQYXltZW50cwkAAgECF0luY29yZWN0IHBheW1lbnRzIG9yZGVyAwkBEmNoZWNrREFwcFRocmVzaG9sZAEFC25ld0JhbGFuY2VzCQEFdGhyb3cABAJEMQkBB2dldERNZW0CBQtuZXdCYWxhbmNlcwUDYW1wAwkBBmFzc2VydAEJAGYCBQJEMQUCRDAJAAIBAgdEMSA+IEQwBAtmZWVEaXNjb3VudAkBFGNhbGN1bGF0ZUZlZURpc2NvdW50AQgFA21zZwZjYWxsZXIKARFjYWxjU2NyaXB0QWN0aW9ucwIDYWNjCm5ld0JhbGFuY2UEDSR0MDE2ODYxMTY5MDIFA2FjYwQLaW52QmFsYW5jZXMIBQ0kdDAxNjg2MTE2OTAyAl8xBA1zY3JpcHRBY3Rpb25zCAUNJHQwMTY4NjExNjkwMgJfMgQBaQgFDSR0MDE2ODYxMTY5MDICXzMDCQBmAgULc2hhcmVTdXBwbHkAAAQEX2ZlZQkAaQIJAGgCCQBuBAUDZmVlBQtmZWVEaXNjb3VudAUJZmVlU2NhbGU2BQdDRUlMSU5HBQZuQ29pbnMJAGgCAAQJAGUCBQZuQ29pbnMAAQQEZmVlcwQMaWRlYWxCYWxhbmNlCQBrAwUCRDEJAJEDAgUCeHAFAWkFAkQwBApkaWZmZXJlbmNlAwkAZgIFDGlkZWFsQmFsYW5jZQUKbmV3QmFsYW5jZQkAZQIFDGlkZWFsQmFsYW5jZQUKbmV3QmFsYW5jZQkAZQIFCm5ld0JhbGFuY2UFDGlkZWFsQmFsYW5jZQkAawMFBF9mZWUFCmRpZmZlcmVuY2UFCWZlZVNjYWxlNgQOZ292ZXJuYW5jZUZlZXMJAGsDBQRmZWVzBQ1mZWVHb3Zlcm5hbmNlBQlmZWVTY2FsZTYEDGZpbmFsQmFsYW5jZQkAZQIFCm5ld0JhbGFuY2UFBGZlZXMEEGludmFyaWFudEJhbGFuY2UJAGUCBQpuZXdCYWxhbmNlBQRmZWVzBANwbXQJAGUCBQpuZXdCYWxhbmNlCQCRAwIFAnhwBQFpBAZscEZlZXMJAGUCBQRmZWVzBQ5nb3Zlcm5hbmNlRmVlcwQDaW52AwkAZgIFA3BtdAAACQEFc3Rha2UCCQBlAgUDcG10BQRmZWVzCQCRAwIFCGFzc2V0SWRzBQFpCQEHdW5zdGFrZQIFBGZlZXMJAJEDAgUIYXNzZXRJZHMFAWkDCQAAAgUDaW52BQNpbnYEB2FpcmRyb3ADCQBmAgUGbHBGZWVzAAAJAPwHBAUQbHBGYXJtaW5nQWRkcmVzcwIHYWlyRHJvcAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQDZBAEJAJEDAgUIYXNzZXRJZHMFAWkFBmxwRmVlcwUDbmlsAAADCQAAAgUHYWlyZHJvcAUHYWlyZHJvcAkAlQoDCQDNCAIFC2ludkJhbGFuY2VzBRBpbnZhcmlhbnRCYWxhbmNlCQDOCAIFDXNjcmlwdEFjdGlvbnMJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUPbW9uZXlCb3hBZGRyZXNzBQ5nb3Zlcm5hbmNlRmVlcwkA2QQBCQCRAwIFCGFzc2V0SWRzBQFpCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAJEDAgUIYXNzZXRJZHMFAWkFDWtBc3NldEJhbGFuY2UFDGZpbmFsQmFsYW5jZQUDbmlsCQBkAgUBaQABCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBANpbnYJAQVzdGFrZQIFCm5ld0JhbGFuY2UJAJEDAgUIYXNzZXRJZHMFAWkDCQAAAgUDaW52BQNpbnYJAJUKAwkAzQgCBQtpbnZCYWxhbmNlcwUKbmV3QmFsYW5jZQkAzQgCBQ1zY3JpcHRBY3Rpb25zCQEMSW50ZWdlckVudHJ5AgkArAICCQCRAwIFCGFzc2V0SWRzBQFpBQ1rQXNzZXRCYWxhbmNlBQpuZXdCYWxhbmNlCQBkAgUBaQABCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBA0kdDAxODYwNzE4Njk1CgACJGwFC25ld0JhbGFuY2VzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlQoDBQNuaWwFA25pbAAACgEFJGYxXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJARFjYWxjU2NyaXB0QWN0aW9ucwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTUJAQUkZjFfMgIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8EC2ludkJhbGFuY2VzCAUNJHQwMTg2MDcxODY5NQJfMQQNc2NyaXB0QWN0aW9ucwgFDSR0MDE4NjA3MTg2OTUCXzIEAkQyCQEHZ2V0RE1lbQIFC2ludkJhbGFuY2VzBQNhbXAEC21pbnRfYW1vdW50AwkAAAIFC3NoYXJlU3VwcGx5AAAFAkQxCQBrAwULc2hhcmVTdXBwbHkJAGUCBQJEMgUCRDAFAkQwAwkBBmFzc2VydAEJAGcCBQttaW50X2Ftb3VudAUNbWluTWludEFtb3VudAkAAgECFFNsaXBwYWdlIHNjcmV3ZWQgeW91AwUMc3Rha2VGYXJtaW5nBAJyZQkA/AcEBQR0aGlzAgxyZWlzc3VlU2hhcmUJAMwIAgULbWludF9hbW91bnQFA25pbAUDbmlsAwkAAAIFAnJlBQJyZQQBcwkA/AcEBQ5mYXJtaW5nQWRkcmVzcwIPbG9ja1NoYXJlVG9rZW5zCQDMCAIJAKUIAQUEdGhpcwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQxzaGFyZUFzc2V0SWQFC21pbnRfYW1vdW50BQNuaWwDCQAAAgUBcwUBcwkAzQgCBQ1zY3JpcHRBY3Rpb25zCQEMSW50ZWdlckVudHJ5AgURa1NoYXJlQXNzZXRTdXBwbHkJAGQCBQtzaGFyZVN1cHBseQULbWludF9hbW91bnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAM4IAgUNc2NyaXB0QWN0aW9ucwkAzAgCCQEHUmVpc3N1ZQMFDHNoYXJlQXNzZXRJZAULbWludF9hbW91bnQGCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQNtc2cGY2FsbGVyBQttaW50X2Ftb3VudAUMc2hhcmVBc3NldElkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrU2hhcmVBc3NldFN1cHBseQkAZAIFC3NoYXJlU3VwcGx5BQttaW50X2Ftb3VudAUDbmlsA21zZwEOY2FsY01pbnRBbW91bnQCC25ld0JhbGFuY2VzBHVzZXIEA2FtcAkBAl9BAAQCeHAJAQNfeHAABAJEMQkBB2dldERNZW0CBQtuZXdCYWxhbmNlcwUDYW1wAwkAAAIFC3NoYXJlU3VwcGx5AAAJAJQKAgUDbmlsBQJEMQQCRDAJAQdnZXRETWVtAgUCeHAFA2FtcAQLZmVlRGlzY291bnQJARRjYWxjdWxhdGVGZWVEaXNjb3VudAEFBHVzZXIKAQ9jYWxjSW52QmFsYW5jZXMCA2FjYwpuZXdCYWxhbmNlBA0kdDAxOTg4NDE5OTEwBQNhY2MEC2ludkJhbGFuY2VzCAUNJHQwMTk4ODQxOTkxMAJfMQQBaQgFDSR0MDE5ODg0MTk5MTACXzIEBF9mZWUJAGkCCQBoAgkAbgQFA2ZlZQULZmVlRGlzY291bnQFCWZlZVNjYWxlNgUHQ0VJTElORwUGbkNvaW5zCQBoAgAECQBlAgUGbkNvaW5zAAEEBGZlZXMEDGlkZWFsQmFsYW5jZQkAawMFAkQxCQCRAwIFAnhwBQFpBQJEMAQKZGlmZmVyZW5jZQMJAGYCBQxpZGVhbEJhbGFuY2UFCm5ld0JhbGFuY2UJAGUCBQxpZGVhbEJhbGFuY2UFCm5ld0JhbGFuY2UJAGUCBQpuZXdCYWxhbmNlBQxpZGVhbEJhbGFuY2UJAGsDBQRfZmVlBQpkaWZmZXJlbmNlBQlmZWVTY2FsZTYEEGludmFyaWFudEJhbGFuY2UJAGUCBQpuZXdCYWxhbmNlBQRmZWVzCQCUCgIJAM0IAgULaW52QmFsYW5jZXMFEGludmFyaWFudEJhbGFuY2UJAGQCBQFpAAEEDSR0MDIwNTEyMjA1ODIKAAIkbAULbmV3QmFsYW5jZXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIFA25pbAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQ9jYWxjSW52QmFsYW5jZXMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDE1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPBAtpbnZCYWxhbmNlcwgFDSR0MDIwNTEyMjA1ODICXzEEAWsIBQ0kdDAyMDUxMjIwNTgyAl8yBAJEMgkBB2dldERNZW0CBQtpbnZCYWxhbmNlcwUDYW1wBAptaW50QW1vdW50CQBrAwULc2hhcmVTdXBwbHkJAGUCBQJEMgUCRDAFAkQwCQCUCgIFA25pbAUKbWludEFtb3VudANtc2cBDHJlaXNzdWVTaGFyZQEGYW1vdW50CQELdmFsdWVPckVsc2UCCQEKaXNTZWxmQ2FsbAEFA21zZwkAzAgCCQEHUmVpc3N1ZQMFDHNoYXJlQXNzZXRJZAUGYW1vdW50BgUDbmlsA21zZwEFZ2V0RHkECWFzc2V0RnJvbQdhc3NldFRvAmR4C3VzZXJBZGRyZXNzBAJ4cAkBA194cAAECWZyb21JbmRleAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDPCAIFCGFzc2V0SWRzBQlhc3NldEZyb20CEHVua25vd24gdG9rZW4gaW4EB3RvSW5kZXgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAzwgCBQhhc3NldElkcwUHYXNzZXRUbwIRdW5rbm93biB0b2tlbiBvdXQEAXgJAGQCCQCRAwIFAnhwBQlmcm9tSW5kZXgFAmR4BAF5CQEEZ2V0WQQFCWZyb21JbmRleAUHdG9JbmRleAUBeAUCeHAEAmR5CQBlAgkAZQIJAJEDAgUCeHAFB3RvSW5kZXgFAXkAAQQLZmVlRGlzY291bnQJARRjYWxjdWxhdGVGZWVEaXNjb3VudAEJAQdBZGRyZXNzAQkA2QQBBQt1c2VyQWRkcmVzcwQEX2ZlZQkAawMJAG4EBQNmZWUFC2ZlZURpc2NvdW50BQlmZWVTY2FsZTYFB0NFSUxJTkcFAmR5BQlmZWVTY2FsZTYJAJQKAgUDbmlsCQCUCgIJAGUCBQJkeQUEX2ZlZQUEX2ZlZQNtc2cBCGV4Y2hhbmdlAgh0b2tlbk91dAZtaW5fZHkJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQADCQECIT0CCQCQAwEIBQNtc2cIcGF5bWVudHMAAQkAAgECE3NpemUocGF5bWVudHMpICE9IDEECnN1c3BpY2lvdXMJAQ9jaGVja1N1c3BpY2lvdXMAAwgFCnN1c3BpY2lvdXMCXzEJAM4IAgkBEXN1c3BlbmRTdXNwaWNpb3VzAQgFCnN1c3BpY2lvdXMCXzIJAQ5yZXR1cm5QYXltZW50cwIIBQNtc2cGY2FsbGVyCAUDbXNnCHBheW1lbnRzBAdwYXltZW50CQCRAwIIBQNtc2cIcGF5bWVudHMAAAQHdG9rZW5JbgkBDWdldFN0ckFzc2V0SWQBCAUHcGF5bWVudAdhc3NldElkBAt0b2tlbk91dEI1OAkA2QQBBQh0b2tlbk91dAQCZHgIBQdwYXltZW50BmFtb3VudAQJZnJvbUluZGV4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAM8IAgUIYXNzZXRJZHMFB3Rva2VuSW4CEHVua25vd24gdG9rZW4gaW4EB3RvSW5kZXgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAzwgCBQhhc3NldElkcwUIdG9rZW5PdXQCEXVua25vd24gdG9rZW4gb3V0BAJ4cAkBA194cAAEAXgJAGQCCQCRAwIFAnhwBQlmcm9tSW5kZXgFAmR4BAF5CQEEZ2V0WQQFCWZyb21JbmRleAUHdG9JbmRleAUBeAUCeHAEA19keQkAZQIJAGUCCQCRAwIFAnhwBQd0b0luZGV4BQF5AAEEC2ZlZURpc2NvdW50CQEUY2FsY3VsYXRlRmVlRGlzY291bnQBCAUDbXNnDG9yaWdpbkNhbGxlcgQEX2ZlZQkAawMFA19keQkAbgQFA2ZlZQULZmVlRGlzY291bnQFCWZlZVNjYWxlNgUHQ0VJTElORwUJZmVlU2NhbGU2BAJkeQkAZQIFA19keQUEX2ZlZQQOZ292ZXJuYW5jZUZlZXMJAGsDBQRfZmVlBQ1mZWVHb3Zlcm5hbmNlBQlmZWVTY2FsZTYDCQEGYXNzZXJ0AQkAZwIFAmR5BQZtaW5fZHkJAAIBAi5FeGNoYW5nZSByZXN1bHRlZCBpbiBmZXdlciBjb2lucyB0aGFuIGV4cGVjdGVkCgEPbWFrZU5ld0JhbGFuY2VzAgNhY2MMdG9rZW5CYWxhbmNlBA0kdDAyMjYyMzIyNjQ5BQNhY2MEC25ld0JhbGFuY2VzCAUNJHQwMjI2MjMyMjY0OQJfMQQBaQgFDSR0MDIyNjIzMjI2NDkCXzIDCQAAAgUBaQUJZnJvbUluZGV4CQCUCgIJAM0IAgULbmV3QmFsYW5jZXMJAGQCBQx0b2tlbkJhbGFuY2UFAmR4CQBkAgUBaQABAwkAAAIFAWkFB3RvSW5kZXgJAJQKAgkAzQgCBQtuZXdCYWxhbmNlcwkAZQIFDHRva2VuQmFsYW5jZQUDX2R5CQBkAgUBaQABCQCUCgIJAM0IAgULbmV3QmFsYW5jZXMFDHRva2VuQmFsYW5jZQkAZAIFAWkAAQQNJHQwMjI5MDAyMjk2MQoAAiRsBQJ4cAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBD21ha2VOZXdCYWxhbmNlcwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTUJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8EC25ld0JhbGFuY2VzCAUNJHQwMjI5MDAyMjk2MQJfMQQBaQgFDSR0MDIyOTAwMjI5NjECXzIDCQESY2hlY2tEQXBwVGhyZXNob2xkAQULbmV3QmFsYW5jZXMJAQV0aHJvdwAEAXMJAQVzdGFrZQIIBQdwYXltZW50BmFtb3VudAkBDWdldFN0ckFzc2V0SWQBCAUHcGF5bWVudAdhc3NldElkAwkAAAIFAXMFAXMEAnVzCQEHdW5zdGFrZQIFA19keQUIdG9rZW5PdXQDCQAAAgUCdXMFAnVzBAZscEZlZXMJAGUCBQRfZmVlBQ5nb3Zlcm5hbmNlRmVlcwQHYWlyZHJvcAMJAGYCBQZscEZlZXMAAAkA/AcEBRBscEZhcm1pbmdBZGRyZXNzAgdhaXJEcm9wBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFC3Rva2VuT3V0QjU4BQZscEZlZXMFA25pbAAAAwkAAAIFB2FpcmRyb3AFB2FpcmRyb3AJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQd0b2tlbkluBQ1rQXNzZXRCYWxhbmNlBQF4CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCHRva2VuT3V0BQ1rQXNzZXRCYWxhbmNlCQBlAgkAkQMCBQJ4cAUHdG9JbmRleAUDX2R5CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQNtc2cGY2FsbGVyBQJkeQULdG9rZW5PdXRCNTgJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUPbW9uZXlCb3hBZGRyZXNzBQ5nb3Zlcm5hbmNlRmVlcwULdG9rZW5PdXRCNTgFA25pbAkAzAgCBQJkeQkAzAgCBQt0b2tlbk91dEI1OAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuA21zZwEId2l0aGRyYXcBCm1pbkFtb3VudHMJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQADCQECIT0CCQCQAwEIBQNtc2cIcGF5bWVudHMAAQkAAgECE3NpemUocGF5bWVudHMpICE9IDEECXBtdEFtb3VudAgJAJEDAggFA21zZwhwYXltZW50cwAABmFtb3VudAQKcG10QXNzZXRJZAgJAJEDAggFA21zZwhwYXltZW50cwAAB2Fzc2V0SWQDCQECIT0CBQxzaGFyZUFzc2V0SWQFCnBtdEFzc2V0SWQJAAIBAhV1bmtub3duIHBheW1lbnQgdG9rZW4ECnN1c3BpY2lvdXMJAQ9jaGVja1N1c3BpY2lvdXMAAwgFCnN1c3BpY2lvdXMCXzEJAM4IAgkBEXN1c3BlbmRTdXNwaWNpb3VzAQgFCnN1c3BpY2lvdXMCXzIJAQ5yZXR1cm5QYXltZW50cwIIBQNtc2cMb3JpZ2luQ2FsbGVyCAUDbXNnCHBheW1lbnRzCgERY2FsY1NjcmlwdEFjdGlvbnMCA2FjYwdiYWxhbmNlBA0kdDAyNDI1MjI0MjgwBQNhY2MEDXNjcmlwdEFjdGlvbnMIBQ0kdDAyNDI1MjI0MjgwAl8xBAFpCAUNJHQwMjQyNTIyNDI4MAJfMgQHd0Ftb3VudAkAawMFB2JhbGFuY2UFCXBtdEFtb3VudAULc2hhcmVTdXBwbHkDCQEGYXNzZXJ0AQkAZwIFB3dBbW91bnQJAJEDAgUKbWluQW1vdW50cwUBaQkAAgECMFdpdGhkcmF3YWwgcmVzdWx0ZWQgaW4gZmV3ZXIgY29pbnMgdGhhbiBleHBlY3RlZAQCdXMJAQd1bnN0YWtlAgUHd0Ftb3VudAkAkQMCBQhhc3NldElkcwUBaQMJAAACBQJ1cwUCdXMJAJQKAgkAzggCBQ1zY3JpcHRBY3Rpb25zCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAJEDAgUIYXNzZXRJZHMFAWkFDWtBc3NldEJhbGFuY2UJAGUCBQdiYWxhbmNlBQd3QW1vdW50CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQNtc2cMb3JpZ2luQ2FsbGVyBQd3QW1vdW50CQDZBAEJAJEDAgUIYXNzZXRJZHMFAWkFA25pbAkAZAIFAWkAAQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQNJHQwMjQ3NzAyNDgzOAoAAiRsCQEDX3hwAAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBEWNhbGNTY3JpcHRBY3Rpb25zAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwQNc2NyaXB0QWN0aW9ucwgFDSR0MDI0NzcwMjQ4MzgCXzEEAWkIBQ0kdDAyNDc3MDI0ODM4Al8yCQDOCAIFDXNjcmlwdEFjdGlvbnMJAMwIAgkBBEJ1cm4CBQxzaGFyZUFzc2V0SWQFCXBtdEFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgURa1NoYXJlQXNzZXRTdXBwbHkJAGUCBQtzaGFyZVN1cHBseQUJcG10QW1vdW50BQNuaWwDbXNnARJ3aXRoZHJhd1dpdGhVbmxvY2sCCm1pbkFtb3VudHMMdW5sb2NrQW1vdW50CQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUAAwkAZwIAAAUMdW5sb2NrQW1vdW50CQACAQIeVW5sb2NrIGFtb3VudCBtdXN0IGJlIHBvc2l0aXZlBApzdXNwaWNpb3VzCQEPY2hlY2tTdXNwaWNpb3VzAAMIBQpzdXNwaWNpb3VzAl8xCQDOCAIJARFzdXNwZW5kU3VzcGljaW91cwEIBQpzdXNwaWNpb3VzAl8yCQEOcmV0dXJuUGF5bWVudHMCCAUDbXNnBmNhbGxlcggFA21zZwhwYXltZW50cwQJcG10QW1vdW50AwkAZgIJAJADAQgFA21zZwhwYXltZW50cwAAAwkBAiE9AgkAkAMBCAUDbXNnCHBheW1lbnRzAAEJAAIBAhNzaXplKHBheW1lbnRzKSAhPSAxBApwbXRBc3NldElkCAkAkQMCCAUDbXNnCHBheW1lbnRzAAAHYXNzZXRJZAMJAQIhPQIFDHNoYXJlQXNzZXRJZAUKcG10QXNzZXRJZAkAAgECFXVua25vd24gcGF5bWVudCB0b2tlbggJAJEDAggFA21zZwhwYXltZW50cwAABmFtb3VudAAABAZ1bmxvY2sJAPwHBAUOZmFybWluZ0FkZHJlc3MCE3dpdGhkcmF3U2hhcmVUb2tlbnMJAMwIAgkApQgBBQR0aGlzCQDMCAIFDHVubG9ja0Ftb3VudAUDbmlsBQNuaWwDCQAAAgUGdW5sb2NrBQZ1bmxvY2sEDndpdGhkcmF3QW1vdW50CQBkAgUJcG10QW1vdW50BQx1bmxvY2tBbW91bnQEA2ludgkA/AcEBQR0aGlzAgh3aXRoZHJhdwkAzAgCBQptaW5BbW91bnRzBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFDHNoYXJlQXNzZXRJZAUOd2l0aGRyYXdBbW91bnQFA25pbAMJAAACBQNpbnYFA2ludgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuA21zZwETY2FsY1dpdGhkcmF3T25lQ29pbgMLdG9rZW5BbW91bnQIdG9rZW5PdXQEdXNlcgQBaQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDPCAIFCGFzc2V0SWRzBQh0b2tlbk91dAIRdW5rbm93biB0b2tlbiBvdXQJAJQKAgUDbmlsCAkBFF9jYWxjV2l0aGRyYXdPbmVDb2luBAkBA194cAAFC3Rva2VuQW1vdW50BQFpCQEHQWRkcmVzcwEJANkEAQUEdXNlcgJfMQNtc2cBD3dpdGhkcmF3T25lQ29pbgIIdG9rZW5PdXQJbWluQW1vdW50CQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUAAwkBAiE9AgkAkAMBCAUDbXNnCHBheW1lbnRzAAEJAAIBAhNzaXplKHBheW1lbnRzKSAhPSAxBApzdXNwaWNpb3VzCQEPY2hlY2tTdXNwaWNpb3VzAAMIBQpzdXNwaWNpb3VzAl8xCQDOCAIJARFzdXNwZW5kU3VzcGljaW91cwEIBQpzdXNwaWNpb3VzAl8yCQEOcmV0dXJuUGF5bWVudHMCCAUDbXNnDG9yaWdpbkNhbGxlcggFA21zZwhwYXltZW50cwQJcG10QW1vdW50CAkAkQMCCAUDbXNnCHBheW1lbnRzAAAGYW1vdW50BApwbXRBc3NldElkCAkAkQMCCAUDbXNnCHBheW1lbnRzAAAHYXNzZXRJZAMJAQIhPQIFCnBtdEFzc2V0SWQFDHNoYXJlQXNzZXRJZAkAAgECDXVua25vd24gdG9rZW4ECG91dEluZGV4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAM8IAgUIYXNzZXRJZHMFCHRva2VuT3V0AhF1bmtub3duIHRva2VuIG91dAQLdG9rZW5PdXRCNTgJANkEAQUIdG9rZW5PdXQEAnhwCQEDX3hwAAQNJHQwMjY4MDIyNjg4NAkBFF9jYWxjV2l0aGRyYXdPbmVDb2luBAUCeHAFCXBtdEFtb3VudAUIb3V0SW5kZXgIBQNtc2cMb3JpZ2luQ2FsbGVyBAJkeQgFDSR0MDI2ODAyMjY4ODQCXzEEBmR5X2ZlZQgFDSR0MDI2ODAyMjY4ODQCXzIDCQEGYXNzZXJ0AQkAZwIFAmR5BQltaW5BbW91bnQJAAIBAhhOb3QgZW5vdWdoIGNvaW5zIHJlbW92ZWQEDmdvdmVybmFuY2VGZWVzCQBrAwUGZHlfZmVlBQ1mZWVHb3Zlcm5hbmNlBQlmZWVTY2FsZTYECmR5X2FuZF9mZWUJAGQCBQJkeQUGZHlfZmVlCgEPbWFrZU5ld0JhbGFuY2VzAgNhY2MMdG9rZW5CYWxhbmNlBA0kdDAyNzE0MjI3MTY4BQNhY2MEC25ld0JhbGFuY2VzCAUNJHQwMjcxNDIyNzE2OAJfMQQBaQgFDSR0MDI3MTQyMjcxNjgCXzIDCQAAAgUBaQUIb3V0SW5kZXgJAJQKAgkAzQgCBQtuZXdCYWxhbmNlcwkAZQIFDHRva2VuQmFsYW5jZQUKZHlfYW5kX2ZlZQkAZAIFAWkAAQkAlAoCCQDNCAIFC25ld0JhbGFuY2VzBQx0b2tlbkJhbGFuY2UJAGQCBQFpAAEEDSR0MDI3MzM1MjczOTYKAAIkbAUCeHAKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIFA25pbAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQ9tYWtlTmV3QmFsYW5jZXMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDE1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPBAtuZXdCYWxhbmNlcwgFDSR0MDI3MzM1MjczOTYCXzEEAXYIBQ0kdDAyNzMzNTI3Mzk2Al8yAwkBEmNoZWNrREFwcFRocmVzaG9sZAEFC25ld0JhbGFuY2VzCQEFdGhyb3cABAJ1cwkBB3Vuc3Rha2UCBQpkeV9hbmRfZmVlBQh0b2tlbk91dAMJAAACBQJ1cwUCdXMEBmxwRmVlcwkAZQIFBmR5X2ZlZQUOZ292ZXJuYW5jZUZlZXMEB2FpcmRyb3ADCQBmAgUGbHBGZWVzAAAJAPwHBAUQbHBGYXJtaW5nQWRkcmVzcwIHYWlyRHJvcAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQt0b2tlbk91dEI1OAUGbHBGZWVzBQNuaWwAAAMJAAACBQdhaXJkcm9wBQdhaXJkcm9wCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQNtc2cMb3JpZ2luQ2FsbGVyBQJkeQULdG9rZW5PdXRCNTgJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkAkQMCBQhhc3NldElkcwUIb3V0SW5kZXgFDWtBc3NldEJhbGFuY2UJAGUCCQCRAwIFAnhwBQhvdXRJbmRleAUKZHlfYW5kX2ZlZQkAzAgCCQEEQnVybgIFDHNoYXJlQXNzZXRJZAUJcG10QW1vdW50CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFD21vbmV5Qm94QWRkcmVzcwUOZ292ZXJuYW5jZUZlZXMFC3Rva2VuT3V0QjU4CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrU2hhcmVBc3NldFN1cHBseQkAZQIFC3NoYXJlU3VwcGx5BQlwbXRBbW91bnQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgNtc2cBGXdpdGhkcmF3T25lQ29pbldpdGhVbmxvY2sDCHRva2VuT3V0CW1pbkFtb3VudAx1bmxvY2tBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQADCQBnAgAABQx1bmxvY2tBbW91bnQJAAIBAh5VbmxvY2sgYW1vdW50IG11c3QgYmUgcG9zaXRpdmUECnN1c3BpY2lvdXMJAQ9jaGVja1N1c3BpY2lvdXMAAwgFCnN1c3BpY2lvdXMCXzEJAM4IAgkBEXN1c3BlbmRTdXNwaWNpb3VzAQgFCnN1c3BpY2lvdXMCXzIJAQ5yZXR1cm5QYXltZW50cwIIBQNtc2cGY2FsbGVyCAUDbXNnCHBheW1lbnRzBAlwbXRBbW91bnQDCQBmAgkAkAMBCAUDbXNnCHBheW1lbnRzAAADCQECIT0CCQCQAwEIBQNtc2cIcGF5bWVudHMAAQkAAgECE3NpemUocGF5bWVudHMpICE9IDEECnBtdEFzc2V0SWQICQCRAwIIBQNtc2cIcGF5bWVudHMAAAdhc3NldElkAwkBAiE9AgUMc2hhcmVBc3NldElkBQpwbXRBc3NldElkCQACAQIVdW5rbm93biBwYXltZW50IHRva2VuCAkAkQMCCAUDbXNnCHBheW1lbnRzAAAGYW1vdW50AAAEBnVubG9jawkA/AcEBQ5mYXJtaW5nQWRkcmVzcwITd2l0aGRyYXdTaGFyZVRva2VucwkAzAgCCQClCAEFBHRoaXMJAMwIAgUMdW5sb2NrQW1vdW50BQNuaWwFA25pbAMJAAACBQZ1bmxvY2sFBnVubG9jawQOd2l0aGRyYXdBbW91bnQJAGQCBQlwbXRBbW91bnQFDHVubG9ja0Ftb3VudAQDaW52CQD8BwQFBHRoaXMCD3dpdGhkcmF3T25lQ29pbgkAzAgCBQh0b2tlbk91dAkAzAgCBQltaW5BbW91bnQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUMc2hhcmVBc3NldElkBQ53aXRoZHJhd0Ftb3VudAUDbmlsAwkAAAIFA2ludgUDaW52BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DbXNnAQFBAAkAlAoCBQNuaWwJAQJfQQADbXNnAQ9nZXRWaXJ0dWFsUHJpY2UABAFECQEFZ2V0X0QCCQEDX3hwAAkBAl9BAAkAlAoCBQNuaWwJAGsDBQFEBQlQUkVDSVNJT04FC3NoYXJlU3VwcGx5A21zZwEPY2FsY1Rva2VuQW1vdW50AgdhbW91bnRzB2RlcG9zaXQEA2FtcAkBAl9BAAQIYmFsYW5jZXMJAQNfeHAABAJEMAkBB2dldERNZW0CBQhiYWxhbmNlcwUDYW1wCgEPY2FsY05ld0JhbGFuY2VzAgNhY2MHYmFsYW5jZQQNJHQwMjk0MTMyOTQzOQUDYWNjBAtuZXdCYWxhbmNlcwgFDSR0MDI5NDEzMjk0MzkCXzEEAWkIBQ0kdDAyOTQxMzI5NDM5Al8yBApuZXdCYWxhbmNlCQBkAgUHYmFsYW5jZQMFB2RlcG9zaXQJAJEDAgUHYW1vdW50cwUBaQkBAS0BCQCRAwIFB2Ftb3VudHMFAWkJAJQKAgkAzQgCBQtuZXdCYWxhbmNlcwUKbmV3QmFsYW5jZQkAZAIFAWkAAQQLbmV3QmFsYW5jZXMICgACJGwFCGJhbGFuY2VzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEPY2FsY05ld0JhbGFuY2VzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwJfMQQCRDEJAQdnZXRETWVtAgULbmV3QmFsYW5jZXMFA2FtcAQEZGlmZgMFB2RlcG9zaXQJAGUCBQJEMQUCRDAJAGUCBQJEMAUCRDEJAJQKAgUDbmlsCQBrAwUEZGlmZgULc2hhcmVTdXBwbHkFAkQwA21zZwEFcmFtcEECCF9mdXR1cmVBC19mdXR1cmVUaW1lCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUACQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQNtc2cDCQEGYXNzZXJ0AQkAZwIFDmJsb2NrVGltZXN0YW1wCQBkAgUOaW5pdGlhbF9BX3RpbWUFDU1JTl9SQU1QX1RJTUUJAAIBAgl0b28gb2Z0ZW4DCQEGYXNzZXJ0AQkAZwIFC19mdXR1cmVUaW1lCQBkAgUOYmxvY2tUaW1lc3RhbXAFDU1JTl9SQU1QX1RJTUUJAAIBAhFpbnN1ZmZpY2llbnQgdGltZQQKX2luaXRpYWxfQQkBAl9BAAMJAQZhc3NlcnQBAwkAZgIFCF9mdXR1cmVBAAAJAGYCBQVNQVhfQQUIX2Z1dHVyZUEHCQACAQIRb3V0IG9mIGJhc2UgcmFuZ2UDCQEGYXNzZXJ0AQMDCQBnAgUIX2Z1dHVyZUEFCl9pbml0aWFsX0EJAGcCCQBoAgUKX2luaXRpYWxfQQUMTUFYX0FfQ0hBTkdFBQhfZnV0dXJlQQcGAwkAZgIFCl9pbml0aWFsX0EFCF9mdXR1cmVBCQBnAgkAaAIFCF9mdXR1cmVBBQxNQVhfQV9DSEFOR0UFCl9pbml0aWFsX0EHCQACAQIMb3V0IG9mIHJhbmdlCQDMCAIJAQxJbnRlZ2VyRW50cnkCAglpbml0aWFsX0EFCl9pbml0aWFsX0EJAMwIAgkBDEludGVnZXJFbnRyeQICCGZ1dHVyZV9BBQhfZnV0dXJlQQkAzAgCCQEMSW50ZWdlckVudHJ5AgIOaW5pdGlhbF9BX3RpbWUFDmJsb2NrVGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCAg1mdXR1cmVfQV90aW1lBQtfZnV0dXJlVGltZQUDbmlsA21zZwEJc3RvcFJhbXBBAAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUDbXNnBAhjdXJyZW50QQkBAl9BAAkAzAgCCQEMSW50ZWdlckVudHJ5AgIJaW5pdGlhbF9BBQhjdXJyZW50QQkAzAgCCQEMSW50ZWdlckVudHJ5AgIIZnV0dXJlX0EFCGN1cnJlbnRBCQDMCAIJAQxJbnRlZ2VyRW50cnkCAg5pbml0aWFsX0FfdGltZQUOYmxvY2tUaW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQICDWZ1dHVyZV9BX3RpbWUFDmJsb2NrVGltZXN0YW1wBQNuaWwDbXNnAQhzaHV0ZG93bgAJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFA21zZwMJAQEhAQUGYWN0aXZlCQACAQkArAICAiJEQXBwIGlzIGFscmVhZHkgc3VzcGVuZGVkLiBDYXVzZTogCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFBmtDYXVzZQIadGhlIGNhdXNlIHdhc24ndCBzcGVjaWZpZWQJAQdzdXNwZW5kAQIPUGF1c2VkIGJ5IGFkbWluA21zZwEIYWN0aXZhdGUACQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQNtc2cDBQZhY3RpdmUJAQ10aHJvd0lzQWN0aXZlAAkAzAgCCQEMQm9vbGVhbkVudHJ5AgUHa0FjdGl2ZQYJAMwIAgkBC0RlbGV0ZUVudHJ5AQUGa0NhdXNlBQNuaWwDbXNnARl0YWtlSW50b0FjY291bnRFeHRyYUZ1bmRzAAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAMJAQIhPQIIBQNtc2cGY2FsbGVyBQ9tb25leUJveEFkZHJlc3MJAAIBAiZPbmx5IHRoZSB3YWxsZXQgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgQIYmFsYW5jZXMJAQNfeHAACgEOdGFrZUV4dHJhRnVuZHMCA2FjYwdhc3NldElkBA0kdDAzMTc4MTMxNzk5BQNhY2MEA3N1bQgFDSR0MDMxNzgxMzE3OTkCXzEEAWkIBQ0kdDAzMTc4MTMxNzk5Al8yBAh0b2tlbkI1OAkA2QQBBQdhc3NldElkBAhyQmFsYW5jZQkAZAIJAPAHAgUEdGhpcwUIdG9rZW5CNTgJAQxzdGFrZWRBbW91bnQBBQh0b2tlbkI1OAQMZW5yb2xsQW1vdW50CQBlAgUIckJhbGFuY2UJAJEDAgUIYmFsYW5jZXMFAWkDCQBmAgAABQxlbnJvbGxBbW91bnQJAQdzdXNwZW5kAQkArAICAiBFbnJvbGwgYW1vdW50IG5lZ2F0aXZlIGZvciBhc3NldAUHYXNzZXRJZAQHYWlyZHJvcAMJAGYCBQxlbnJvbGxBbW91bnQAAAkA/AcEBRBscEZhcm1pbmdBZGRyZXNzAgdhaXJEcm9wBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFCHRva2VuQjU4BQxlbnJvbGxBbW91bnQFA25pbAAAAwkAAAIFB2FpcmRyb3AFB2FpcmRyb3AJAJQKAgkAZAIFA3N1bQUMZW5yb2xsQW1vdW50CQBkAgUBaQABCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBAFrCgACJGwFCGFzc2V0SWRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCAAAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEOdGFrZUV4dHJhRnVuZHMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDE1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPAwkAAAIIBQFrAl8xAAAJAAIBAhBObyBtb25leSB0byB0YWtlBQNuaWwBAnR4AQZ2ZXJpZnkABBNtdWx0aVNpZ25lZEJ5QWRtaW5zBBJhZG1pblB1YktleTFTaWduZWQDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABQxhZG1pblB1YktleTEAAQAABBJhZG1pblB1YktleTJTaWduZWQDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwABBQxhZG1pblB1YktleTIAAQAABBJhZG1pblB1YktleTNTaWduZWQDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwACBQxhZG1pblB1YktleTMAAQAACQBnAgkAZAIJAGQCBRJhZG1pblB1YktleTFTaWduZWQFEmFkbWluUHViS2V5MlNpZ25lZAUSYWRtaW5QdWJLZXkzU2lnbmVkAAIEByRtYXRjaDAFAnR4AwkAAQIFByRtYXRjaDACF0ludm9rZVNjcmlwdFRyYW5zYWN0aW9uBANpbnYFByRtYXRjaDAEE2NhbGxUYWtlSW50b0FjY291bnQDCQAAAggFA2ludgRkQXBwBQR0aGlzCQAAAggFA2ludghmdW5jdGlvbgIZdGFrZUludG9BY2NvdW50RXh0cmFGdW5kcwcEDXNpZ25lZEJ5QWRtaW4DAwMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFDGFkbWluUHViS2V5MQYJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFDGFkbWluUHViS2V5MgYJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFDGFkbWluUHViS2V5MwYJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFEWFkbWluUHViS2V5SW52b2tlAwMFE2NhbGxUYWtlSW50b0FjY291bnQFDXNpZ25lZEJ5QWRtaW4HBgUTbXVsdGlTaWduZWRCeUFkbWlucwUTbXVsdGlTaWduZWRCeUFkbWluczYulaQ=", "height": 2240475, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 6jWLsSCEiqv863AGbEtUcMNChrGXDasyZyWVvYS9mYbp Next: none Diff:
OldNewDifferences
3939
4040 let s = "_SWOP_amount"
4141
42-let t = "first_harvest"
42+let t = "admin_pub_1"
4343
44-let u = "first_harvest_height"
44+let u = "admin_pub_2"
4545
46-let v = "share_limit_on_first_harvest"
46+let v = "admin_pub_3"
4747
48-let w = "base_period"
48+let w = "admin_invoke_pub"
4949
50-let x = "period_length"
50+let x = "money_box_address"
5151
52-let y = "start_height"
52+let y = "governance_address"
5353
54-let z = "admin_pub_1"
54+let z = "voting_address"
5555
56-let B = "admin_pub_2"
56+let B = "farming_address"
5757
58-let C = "admin_pub_3"
58+let C = "lp_farming"
5959
60-let E = "admin_invoke_pub"
60+let E = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
6161
62-let F = "money_box_address"
63-
64-let G = "governance_address"
65-
66-let H = "voting_address"
67-
68-let I = "farming_address"
69-
70-let J = "lp_farming"
71-
72-let K = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
73-
74-func L (M) = {
75- let N = getString(K, M)
76- if ($isInstanceOf(N, "String"))
62+func F (G) = {
63+ let H = getString(E, G)
64+ if ($isInstanceOf(H, "String"))
7765 then {
78- let O = N
79- fromBase58String(O)
66+ let I = H
67+ fromBase58String(I)
8068 }
8169 else {
82- let P = N
83- throw((M + "is empty"))
70+ let J = H
71+ throw((G + "is empty"))
8472 }
8573 }
8674
8775
88-let Q = L(z)
76+let K = F(t)
8977
90-let R = L(B)
78+let L = F(u)
9179
92-let S = L(C)
80+let M = F(v)
9381
94-let T = L(E)
82+let N = F(w)
9583
96-let U = Address(L(F))
84+let O = Address(F(x))
9785
98-let V = Address(L(G))
86+let P = Address(F(y))
9987
100-let W = Address(L(p))
88+let Q = Address(F(p))
10189
102-let X = Address(L(H))
90+let R = Address(F(z))
10391
104-let Y = Address(L(I))
92+let S = Address(F(B))
10593
106-let Z = Address(L(J))
94+let T = Address(F(C))
10795
108-let aa = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
96+let U = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
10997
110-let ab = [toBase58String(aa)]
98+let V = [toBase58String(U)]
11199
112-let ac = valueOrErrorMessage(getInteger(X, w), "Empty kBasePeriod")
100+let W = getBooleanValue(this, j)
113101
114-let ad = valueOrErrorMessage(getInteger(X, y), "Empty kStartHeight")
102+let X = fromBase58String(getStringValue(this, l))
115103
116-let ae = valueOrErrorMessage(getInteger(X, x), "Empty kPeriodLength")
104+let Y = getIntegerValue(this, m)
117105
118-let af = ((ac + ((height - ad) / ae)) + 3)
106+let Z = 1000000
119107
120-let ag = getBooleanValue(this, j)
108+let aa = getIntegerValue(this, n)
121109
122-let ah = fromBase58String(getStringValue(this, l))
110+let ab = fraction(40, Z, 100)
123111
124-let ai = getIntegerValue(this, m)
112+let ac = getIntegerValue(this, "initial_A")
125113
126-let aj = 1000000
114+let ad = getIntegerValue(this, "future_A")
127115
128-let ak = getIntegerValue(this, n)
116+let ae = valueOrElse(getInteger(this, "initial_A_time"), 0)
129117
130-let al = fraction(40, aj, 100)
118+let af = valueOrElse(getInteger(this, "future_A_time"), 0)
131119
132-let am = getIntegerValue(this, "initial_A")
120+let ag = split(getStringValue(this, h), ",")
133121
134-let an = getIntegerValue(this, "future_A")
122+let ah = size(ag)
135123
136-let ao = valueOrElse(getInteger(this, "initial_A_time"), 0)
137-
138-let ap = valueOrElse(getInteger(this, "future_A_time"), 0)
139-
140-let aq = split(getStringValue(this, h), ",")
141-
142-let ar = size(aq)
143-
144-func as (at) = [BooleanEntry(j, false), StringEntry(k, at)]
124+func ai (aj) = [BooleanEntry(j, false), StringEntry(k, aj)]
145125
146126
147-func au () = throw("DApp is already active")
127+func ak () = throw("DApp is already active")
148128
149129
150-func av () = if (ag)
130+func al () = if (W)
151131 then unit
152132 else throw("DApp is inactive at this moment")
153133
154134
155-func aw (ax) = if (containsElement([Q, R, S], ax.callerPublicKey))
135+func am (an) = if (containsElement([K, L, M], an.callerPublicKey))
156136 then unit
157137 else throw("Only admin can call this function")
158138
159139
160-func ay (ax) = if ((this == ax.caller))
140+func ao (an) = if ((this == an.caller))
161141 then unit
162142 else throw("Only contract itself can call this function")
163143
164144
165-let az = toBigInt(2)
145+let ap = toBigInt(2)
166146
167-let aA = height
147+let aq = height
168148
169-func aB (aC) = if (aC)
149+func ar (as) = if (as)
170150 then false
171151 else true
172152
173153
174-func aD (aE) = {
175- let aF = {
176- let N = aE
177- if ($isInstanceOf(N, "Address"))
154+func at (au) = {
155+ let av = {
156+ let H = au
157+ if ($isInstanceOf(H, "Address"))
178158 then {
179- let aG = N
180- toString(aG)
159+ let aw = H
160+ toString(aw)
181161 }
182- else if ($isInstanceOf(N, "String"))
162+ else if ($isInstanceOf(H, "String"))
183163 then {
184- let aG = N
185- aG
164+ let aw = H
165+ aw
186166 }
187167 else throw("Unknow type of user Addr")
188168 }
189- let aH = valueOrElse(getInteger(V, (aF + s)), 0)
190- let aI = split(getStringValue(K, r), ",")
191- let aJ = split(getStringValue(K, q), ",")
192- if (if ((aH >= parseIntValue(aI[0])))
193- then (parseIntValue(aI[1]) > aH)
169+ let ax = valueOrElse(getInteger(P, (av + s)), 0)
170+ let ay = split(getStringValue(E, r), ",")
171+ let az = split(getStringValue(E, q), ",")
172+ if (if ((ax >= parseIntValue(ay[0])))
173+ then (parseIntValue(ay[1]) > ax)
194174 else false)
195- then (aj - parseIntValue(aJ[0]))
196- else if (if ((aH >= parseIntValue(aI[1])))
197- then (parseIntValue(aI[2]) > aH)
175+ then (Z - parseIntValue(az[0]))
176+ else if (if ((ax >= parseIntValue(ay[1])))
177+ then (parseIntValue(ay[2]) > ax)
198178 else false)
199- then (aj - parseIntValue(aJ[1]))
200- else if (if ((aH >= parseIntValue(aI[2])))
201- then (parseIntValue(aI[3]) > aH)
179+ then (Z - parseIntValue(az[1]))
180+ else if (if ((ax >= parseIntValue(ay[2])))
181+ then (parseIntValue(ay[3]) > ax)
202182 else false)
203- then (aj - parseIntValue(aJ[2]))
204- else if (if ((aH >= parseIntValue(aI[3])))
205- then (parseIntValue(aI[4]) > aH)
183+ then (Z - parseIntValue(az[2]))
184+ else if (if ((ax >= parseIntValue(ay[3])))
185+ then (parseIntValue(ay[4]) > ax)
206186 else false)
207- then (aj - parseIntValue(aJ[3]))
208- else if ((aH >= parseIntValue(aI[4])))
209- then (aj - parseIntValue(aJ[4]))
210- else aj
187+ then (Z - parseIntValue(az[3]))
188+ else if ((ax >= parseIntValue(ay[4])))
189+ then (Z - parseIntValue(az[4]))
190+ else Z
211191 }
212192
213193
214-func aK () = {
215- let aL = ap
216- let aM = an
217- if ((aL > aA))
194+func aA () = {
195+ let aB = af
196+ let aC = ad
197+ if ((aB > aq))
218198 then {
219- let aN = am
220- let aO = ao
221- if ((aM > aN))
222- then (aN + (((aM - aN) * (aA - aO)) / (aL - aO)))
223- else (aN - (((aN - aM) * (aA - aO)) / (aL - aO)))
199+ let aD = ac
200+ let aE = ae
201+ if ((aC > aD))
202+ then (aD + (((aC - aD) * (aq - aE)) / (aB - aE)))
203+ else (aD - (((aD - aC) * (aq - aE)) / (aB - aE)))
224204 }
225- else aM
205+ else aC
226206 }
227207
228208
229-func aP () = {
230- func aQ (aR,aS) = (aR :+ valueOrElse(getInteger(this, (aS + i)), 0))
209+func aF () = {
210+ func aG (aH,aI) = (aH :+ valueOrElse(getInteger(this, (aI + i)), 0))
231211
232- let aT = aq
233- let aU = size(aT)
234- let aV = nil
235- func aW (aX,aY) = if ((aY >= aU))
236- then aX
237- else aQ(aX, aT[aY])
212+ let aJ = ag
213+ let aK = size(aJ)
214+ let aL = nil
215+ func aM (aN,aO) = if ((aO >= aK))
216+ then aN
217+ else aG(aN, aJ[aO])
238218
239- func aZ (aX,aY) = if ((aY >= aU))
240- then aX
219+ func aP (aN,aO) = if ((aO >= aK))
220+ then aN
241221 else throw("List size exceeds 15")
242222
243- aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
223+ aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
244224 }
245225
246226
247-func ba (bb) = bb
227+func aQ (aR) = aR
248228
249229
250-func bc (aR,bd) = (aR + bd)
230+func aS (aH,aT) = (aH + aT)
251231
252232
253-func be (bb,bf) = {
254- let bg = invoke(this, "D", [bb, bf], nil)
255- if ($isInstanceOf(bg, "Int"))
256- then bg
257- else throw(($getType(invoke(this, "D", [bb, bf], nil)) + " couldn't be cast to Int"))
233+func aU (aR,aV) = {
234+ let aW = invoke(this, "D", [aR, aV], nil)
235+ if ($isInstanceOf(aW, "Int"))
236+ then aW
237+ else throw(($getType(invoke(this, "D", [aR, aV], nil)) + " couldn't be cast to Int"))
258238 }
259239
260240
261-func bh (bb,bf) = {
262- let bi = {
263- let aT = bb
264- let aU = size(aT)
265- let aV = 0
266- func aW (aX,aY) = if ((aY >= aU))
267- then aX
268- else bc(aX, aT[aY])
241+func aX (aR,aV) = {
242+ let aY = {
243+ let aJ = aR
244+ let aK = size(aJ)
245+ let aL = 0
246+ func aM (aN,aO) = if ((aO >= aK))
247+ then aN
248+ else aS(aN, aJ[aO])
269249
270- func aZ (aX,aY) = if ((aY >= aU))
271- then aX
250+ func aP (aN,aO) = if ((aO >= aK))
251+ then aN
272252 else throw("List size exceeds 15")
273253
274- aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
254+ aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
275255 }
276- if ((bi == 0))
256+ if ((aY == 0))
277257 then 0
278258 else {
279- let bj = (bf * ar)
280- let bk = (toBigInt(bj) * toBigInt(bi))
281- let bl = toBigInt((bj - 1))
282- func bm (aR,ax) = if ((aR._2 == true))
283- then aR
259+ let aZ = (aV * ah)
260+ let ba = (toBigInt(aZ) * toBigInt(aY))
261+ let bb = toBigInt((aZ - 1))
262+ func bc (aH,an) = if ((aH._2 == true))
263+ then aH
284264 else {
285- let bn = aR._1
286- func bo (bp,ax) = if ((ar > ax))
287- then ((bp * bn) / (toBigInt(bb[ax]) * toBigInt(ar)))
288- else bp
265+ let bd = aH._1
266+ func be (bf,an) = if ((ah > an))
267+ then ((bf * bd) / (toBigInt(aR[an]) * toBigInt(ah)))
268+ else bf
289269
290- let bp = {
291- let aT = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
292- let aU = size(aT)
293- let aV = bn
294- func bq (aX,aY) = if ((aY >= aU))
295- then aX
296- else bo(aX, aT[aY])
270+ let bf = {
271+ let aJ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
272+ let aK = size(aJ)
273+ let aL = bd
274+ func bg (aN,aO) = if ((aO >= aK))
275+ then aN
276+ else be(aN, aJ[aO])
297277
298- func br (aX,aY) = if ((aY >= aU))
299- then aX
278+ func bh (aN,aO) = if ((aO >= aK))
279+ then aN
300280 else throw("List size exceeds 15")
301281
302- br(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
282+ bh(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
303283 }
304- let bs = fraction((bk + (toBigInt(ar) * bp)), bn, ((bl * bn) + (toBigInt((ar + 1)) * bp)))
305- if ((bs > bn))
306- then if ((1 >= toInt((bs - bn))))
307- then $Tuple2(bs, true)
308- else $Tuple2(bs, false)
309- else if ((1 >= toInt((bn - bs))))
310- then $Tuple2(bs, true)
311- else $Tuple2(bs, false)
284+ let bi = fraction((ba + (toBigInt(ah) * bf)), bd, ((bb * bd) + (toBigInt((ah + 1)) * bf)))
285+ if ((bi > bd))
286+ then if ((1 >= toInt((bi - bd))))
287+ then $Tuple2(bi, true)
288+ else $Tuple2(bi, false)
289+ else if ((1 >= toInt((bd - bi))))
290+ then $Tuple2(bi, true)
291+ else $Tuple2(bi, false)
312292 }
313293
314- let bt = {
315- let aT = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
316- let aU = size(aT)
317- let aV = $Tuple2(toBigInt(bi), false)
318- func bq (aX,aY) = if ((aY >= aU))
319- then aX
320- else bm(aX, aT[aY])
294+ let bj = {
295+ let aJ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
296+ let aK = size(aJ)
297+ let aL = $Tuple2(toBigInt(aY), false)
298+ func bg (aN,aO) = if ((aO >= aK))
299+ then aN
300+ else bc(aN, aJ[aO])
321301
322- func br (aX,aY) = if ((aY >= aU))
323- then aX
302+ func bh (aN,aO) = if ((aO >= aK))
303+ then aN
324304 else throw("List size exceeds 15")
325305
326- br(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
306+ bh(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
327307 }
328- let bs = bt._1
329- let bu = bt._2
330- if ((bu == false))
331- then throw(("get_D() not finished with " + toString(bs)))
332- else toInt(bs)
308+ let bi = bj._1
309+ let bk = bj._2
310+ if ((bk == false))
311+ then throw(("get_D() not finished with " + toString(bi)))
312+ else toInt(bi)
333313 }
334314 }
335315
336316
337-func bv (bb,bf) = be(ba(bb), bf)
317+func bl (aR,aV) = aU(aQ(aR), aV)
338318
339319
340-func bw (bx,by,bz,bA) = if (aB((bx != by)))
320+func bm (bn,bo,bp,bq) = if (ar((bn != bo)))
341321 then throw("same coin")
342- else if (aB(if ((by >= 0))
343- then (bx >= 0)
322+ else if (ar(if ((bo >= 0))
323+ then (bn >= 0)
344324 else false))
345325 then throw("below zero")
346- else if (aB(if ((ar > by))
347- then (ar > bx)
326+ else if (ar(if ((ah > bo))
327+ then (ah > bn)
348328 else false))
349329 then throw("above N_COINS")
350330 else {
351- let bf = aK()
352- let bs = be(bA, bf)
353- let bj = (bf * ar)
354- func bB (aR,ax) = {
355- let bC = aR
356- let bD = bC._1
357- let bE = bC._2
358- let bF = if ((bx == ax))
359- then bz
360- else bA[ax]
361- if (if ((ax != by))
362- then (ar > ax)
331+ let aV = aA()
332+ let bi = aU(bq, aV)
333+ let aZ = (aV * ah)
334+ func br (aH,an) = {
335+ let bs = aH
336+ let bt = bs._1
337+ let bu = bs._2
338+ let bv = if ((bn == an))
339+ then bp
340+ else bq[an]
341+ if (if ((an != bo))
342+ then (ah > an)
363343 else false)
364- then $Tuple2((bD + bF), fraction(bE, toBigInt(bs), toBigInt((bF * ar))))
365- else $Tuple2(bD, bE)
344+ then $Tuple2((bt + bv), fraction(bu, toBigInt(bi), toBigInt((bv * ah))))
345+ else $Tuple2(bt, bu)
366346 }
367347
368- let bG = {
369- let aT = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
370- let aU = size(aT)
371- let aV = $Tuple2(0, toBigInt(bs))
372- func aW (aX,aY) = if ((aY >= aU))
373- then aX
374- else bB(aX, aT[aY])
348+ let bw = {
349+ let aJ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
350+ let aK = size(aJ)
351+ let aL = $Tuple2(0, toBigInt(bi))
352+ func aM (aN,aO) = if ((aO >= aK))
353+ then aN
354+ else br(aN, aJ[aO])
375355
376- func aZ (aX,aY) = if ((aY >= aU))
377- then aX
356+ func aP (aN,aO) = if ((aO >= aK))
357+ then aN
378358 else throw("List size exceeds 15")
379359
380- aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
360+ aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
381361 }
382- let bD = bG._1
383- let bH = bG._2
384- let bE = fraction(bH, toBigInt(bs), toBigInt((bj * ar)))
385- let bI = toBigInt(((bD + (bs / bj)) - bs))
386- func bJ (aR,bK) = if ((aR._2 == true))
387- then aR
362+ let bt = bw._1
363+ let bx = bw._2
364+ let bu = fraction(bx, toBigInt(bi), toBigInt((aZ * ah)))
365+ let by = toBigInt(((bt + (bi / aZ)) - bi))
366+ func bz (aH,bA) = if ((aH._2 == true))
367+ then aH
388368 else {
389- let bL = aR._1
390- let bM = (((bL * bL) + bE) / ((az * bL) + bI))
391- if ((bM > bL))
392- then if ((1 >= toInt((bM - bL))))
393- then $Tuple2(bM, true)
394- else $Tuple2(bM, false)
395- else if ((1 >= toInt((bL - bM))))
396- then $Tuple2(bM, true)
397- else $Tuple2(bM, false)
369+ let bB = aH._1
370+ let bC = (((bB * bB) + bu) / ((ap * bB) + by))
371+ if ((bC > bB))
372+ then if ((1 >= toInt((bC - bB))))
373+ then $Tuple2(bC, true)
374+ else $Tuple2(bC, false)
375+ else if ((1 >= toInt((bB - bC))))
376+ then $Tuple2(bC, true)
377+ else $Tuple2(bC, false)
398378 }
399379
400- let bN = {
401- let aT = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
402- let aU = size(aT)
403- let aV = $Tuple2(toBigInt(bs), false)
404- func bq (aX,aY) = if ((aY >= aU))
405- then aX
406- else bJ(aX, aT[aY])
380+ let bD = {
381+ let aJ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
382+ let aK = size(aJ)
383+ let aL = $Tuple2(toBigInt(bi), false)
384+ func bg (aN,aO) = if ((aO >= aK))
385+ then aN
386+ else bz(aN, aJ[aO])
407387
408- func br (aX,aY) = if ((aY >= aU))
409- then aX
388+ func bh (aN,aO) = if ((aO >= aK))
389+ then aN
410390 else throw("List size exceeds 16")
411391
412- br(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
392+ bh(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
413393 }
414- let bM = bN._1
415- let bu = bN._2
416- if ((bu == false))
417- then throw(("getY() not finished with " + toString(bM)))
418- else toInt(bM)
394+ let bC = bD._1
395+ let bk = bD._2
396+ if ((bk == false))
397+ then throw(("getY() not finished with " + toString(bC)))
398+ else toInt(bC)
419399 }
420400
421401
422-func bO (bP,bx,bb,bs) = if (aB((bx >= 0)))
402+func bE (bF,bn,aR,bi) = if (ar((bn >= 0)))
423403 then throw("i below zero")
424- else if (aB((ar > bx)))
404+ else if (ar((ah > bn)))
425405 then throw("i above N_COINS")
426406 else {
427- let bj = (bP * ar)
428- func bB (aR,ax) = {
429- let bQ = aR
430- let bD = bQ._1
431- let bE = bQ._2
432- let bF = if (if ((bx != ax))
433- then (ar > ax)
407+ let aZ = (bF * ah)
408+ func br (aH,an) = {
409+ let bG = aH
410+ let bt = bG._1
411+ let bu = bG._2
412+ let bv = if (if ((bn != an))
413+ then (ah > an)
434414 else false)
435- then bb[ax]
415+ then aR[an]
436416 else 0
437- if (if ((ar > ax))
438- then (bx != ax)
417+ if (if ((ah > an))
418+ then (bn != an)
439419 else false)
440- then $Tuple2((bD + bF), fraction(bE, toBigInt(bs), toBigInt((bF * ar))))
441- else $Tuple2(bD, bE)
420+ then $Tuple2((bt + bv), fraction(bu, toBigInt(bi), toBigInt((bv * ah))))
421+ else $Tuple2(bt, bu)
442422 }
443423
444- let bR = {
445- let aT = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
446- let aU = size(aT)
447- let aV = $Tuple2(0, toBigInt(bs))
448- func aW (aX,aY) = if ((aY >= aU))
449- then aX
450- else bB(aX, aT[aY])
424+ let bH = {
425+ let aJ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
426+ let aK = size(aJ)
427+ let aL = $Tuple2(0, toBigInt(bi))
428+ func aM (aN,aO) = if ((aO >= aK))
429+ then aN
430+ else br(aN, aJ[aO])
451431
452- func aZ (aX,aY) = if ((aY >= aU))
453- then aX
432+ func aP (aN,aO) = if ((aO >= aK))
433+ then aN
454434 else throw("List size exceeds 15")
455435
456- aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
436+ aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
457437 }
458- let bD = bR._1
459- let bH = bR._2
460- let bE = fraction(bH, toBigInt(bs), toBigInt((bj * ar)))
461- let bI = toBigInt(((bD + (bs / bj)) - bs))
462- func bS (aR,ax) = if ((aR._2 == true))
463- then aR
438+ let bt = bH._1
439+ let bx = bH._2
440+ let bu = fraction(bx, toBigInt(bi), toBigInt((aZ * ah)))
441+ let by = toBigInt(((bt + (bi / aZ)) - bi))
442+ func bI (aH,an) = if ((aH._2 == true))
443+ then aH
464444 else {
465- let bL = aR._1
466- let bM = (((bL * bL) + bE) / ((az * bL) + bI))
467- if ((bM > bL))
468- then if ((1 >= toInt((bM - bL))))
469- then $Tuple2(bM, true)
470- else $Tuple2(bM, false)
471- else if ((1 >= toInt((bL - bM))))
472- then $Tuple2(bM, true)
473- else $Tuple2(bM, false)
445+ let bB = aH._1
446+ let bC = (((bB * bB) + bu) / ((ap * bB) + by))
447+ if ((bC > bB))
448+ then if ((1 >= toInt((bC - bB))))
449+ then $Tuple2(bC, true)
450+ else $Tuple2(bC, false)
451+ else if ((1 >= toInt((bB - bC))))
452+ then $Tuple2(bC, true)
453+ else $Tuple2(bC, false)
474454 }
475455
476- let bT = {
477- let aT = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
478- let aU = size(aT)
479- let aV = $Tuple2(toBigInt(bs), false)
480- func bq (aX,aY) = if ((aY >= aU))
481- then aX
482- else bS(aX, aT[aY])
456+ let bJ = {
457+ let aJ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
458+ let aK = size(aJ)
459+ let aL = $Tuple2(toBigInt(bi), false)
460+ func bg (aN,aO) = if ((aO >= aK))
461+ then aN
462+ else bI(aN, aJ[aO])
483463
484- func br (aX,aY) = if ((aY >= aU))
485- then aX
464+ func bh (aN,aO) = if ((aO >= aK))
465+ then aN
486466 else throw("List size exceeds 16")
487467
488- br(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
468+ bh(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
489469 }
490- let bM = bT._1
491- let bu = bT._2
492- if ((bu == false))
493- then throw(("get_y_D() not finished with " + toString(bM)))
494- else toInt(bM)
470+ let bC = bJ._1
471+ let bk = bJ._2
472+ if ((bk == false))
473+ then throw(("get_y_D() not finished with " + toString(bC)))
474+ else toInt(bC)
495475 }
496476
497477
498-func bU (bb,bV,ax,bW) = {
499- let bX = aD(bW)
500- let bf = aK()
501- let bY = ((fraction(ak, bX, aj, CEILING) * ar) / (4 * (ar - 1)))
502- let bZ = ai
503- let ca = be(bb, bf)
504- let cb = (ca - fraction(bV, ca, bZ))
505- let cc = bO(bf, ax, bb, cb)
506- let cd = (bb[ax] - cc)
507- func ce (aR,cf) = {
508- let cg = aR
509- let ch = cg._1
510- let ci = cg._2
511- let cj = if ((ci == ax))
512- then (fraction(cf, cb, ca) - cc)
513- else (cf - fraction(cf, cb, ca))
514- $Tuple2((ch :+ (cf - fraction(bY, cj, aj))), (ci + 1))
478+func bK (aR,bL,an,bM) = {
479+ let bN = at(bM)
480+ let aV = aA()
481+ let bO = ((fraction(aa, bN, Z, CEILING) * ah) / (4 * (ah - 1)))
482+ let bP = Y
483+ let bQ = aU(aR, aV)
484+ let bR = (bQ - fraction(bL, bQ, bP))
485+ let bS = bE(aV, an, aR, bR)
486+ let bT = (aR[an] - bS)
487+ func bU (aH,bV) = {
488+ let bW = aH
489+ let bX = bW._1
490+ let bY = bW._2
491+ let bZ = if ((bY == an))
492+ then (fraction(bV, bR, bQ) - bS)
493+ else (bV - fraction(bV, bR, bQ))
494+ $Tuple2((bX :+ (bV - fraction(bO, bZ, Z))), (bY + 1))
515495 }
516496
517- let ck = {
518- let aT = bb
519- let aU = size(aT)
520- let aV = $Tuple2(nil, 0)
521- func aW (aX,aY) = if ((aY >= aU))
522- then aX
523- else ce(aX, aT[aY])
497+ let ca = {
498+ let aJ = aR
499+ let aK = size(aJ)
500+ let aL = $Tuple2(nil, 0)
501+ func aM (aN,aO) = if ((aO >= aK))
502+ then aN
503+ else bU(aN, aJ[aO])
524504
525- func aZ (aX,aY) = if ((aY >= aU))
526- then aX
505+ func aP (aN,aO) = if ((aO >= aK))
506+ then aN
527507 else throw("List size exceeds 15")
528508
529- aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
509+ aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
530510 }
531- let ch = ck._1
532- let ci = ck._2
533- let cl = ch[ax]
534- let cm = ((cl - bO(bf, ax, ch, cb)) - 1)
535- $Tuple2(cm, (cd - cm))
511+ let bX = ca._1
512+ let bY = ca._2
513+ let cb = bX[an]
514+ let cc = ((cb - bE(aV, an, bX, bR)) - 1)
515+ $Tuple2(cc, (bT - cc))
536516 }
537517
538518
539-func cn (aS) = {
540- let N = aS
541- if ($isInstanceOf(N, "ByteVector"))
519+func cd (aI) = {
520+ let H = aI
521+ if ($isInstanceOf(H, "ByteVector"))
542522 then {
543- let co = N
544- toBase58String(co)
523+ let ce = H
524+ toBase58String(ce)
545525 }
546- else if ($isInstanceOf(N, "Unit"))
526+ else if ($isInstanceOf(H, "Unit"))
547527 then {
548- let cp = N
528+ let cf = H
549529 "WAVES"
550530 }
551531 else throw("Match error")
552532 }
553533
554534
555-func cq (cr,aS) = if (cr)
556- then $Tuple2("lockNeutrino", W)
557- else $Tuple2("unlockNeutrino", W)
535+func cg (ch,aI) = if (ch)
536+ then $Tuple2("lockNeutrino", Q)
537+ else $Tuple2("unlockNeutrino", Q)
558538
559539
560-func cs (cr,ct,aS) = if (cr)
540+func ci (ch,cj,aI) = if (ch)
561541 then {
562- let cu = cq(cr, aS)
563- let cv = cu._1
564- let cw = cu._2
565- $Tuple4(cv, cw, nil, [AttachedPayment(aS, ct)])
542+ let ck = cg(ch, aI)
543+ let cl = ck._1
544+ let cm = ck._2
545+ $Tuple4(cl, cm, nil, [AttachedPayment(aI, cj)])
566546 }
567547 else {
568- let cx = cq(cr, aS)
569- let cv = cx._1
570- let cw = cx._2
571- $Tuple4(cv, cw, [ct, toBase58String(aS)], nil)
548+ let cn = cg(ch, aI)
549+ let cl = cn._1
550+ let cm = cn._2
551+ $Tuple4(cl, cm, [cj, toBase58String(aI)], nil)
572552 }
573553
574554
575-func cr (ct,cy) = if (containsElement(ab, cy))
555+func ch (cj,co) = if (containsElement(V, co))
576556 then {
577- let cz = cs(true, ct, fromBase58String(cy))
578- let cv = cz._1
579- let cA = cz._2
580- let cB = cz._3
581- let cC = cz._4
582- invoke(cA, cv, cB, cC)
557+ let cp = ci(true, cj, fromBase58String(co))
558+ let cl = cp._1
559+ let cq = cp._2
560+ let cr = cp._3
561+ let cs = cp._4
562+ invoke(cq, cl, cr, cs)
583563 }
584564 else 0
585565
586566
587-func cD (ct,cy) = if (containsElement(ab, cy))
567+func ct (cj,co) = if (containsElement(V, co))
588568 then {
589- let cE = cs(false, ct, fromBase58String(cy))
590- let cv = cE._1
591- let cA = cE._2
592- let cB = cE._3
593- let cC = cE._4
594- invoke(cA, cv, cB, cC)
569+ let cu = ci(false, cj, fromBase58String(co))
570+ let cl = cu._1
571+ let cq = cu._2
572+ let cr = cu._3
573+ let cs = cu._4
574+ invoke(cq, cl, cr, cs)
595575 }
596576 else 0
597577
598578
599-func cF (aS) = {
600- let cG = {
601- let N = aS
602- if ($isInstanceOf(N, "ByteVector"))
579+func cv (aI) = {
580+ let cw = {
581+ let H = aI
582+ if ($isInstanceOf(H, "ByteVector"))
603583 then {
604- let cH = N
605- if ((cH == aa))
606- then getInteger(W, ((("rpd_balance_" + toBase58String(cH)) + "_") + toString(this)))
584+ let cx = H
585+ if ((cx == U))
586+ then getInteger(Q, ((("rpd_balance_" + toBase58String(cx)) + "_") + toString(this)))
607587 else 0
608588 }
609- else if ($isInstanceOf(N, "Unit"))
589+ else if ($isInstanceOf(H, "Unit"))
610590 then 0
611591 else throw("Match error")
612592 }
613- let N = cG
614- if ($isInstanceOf(N, "Int"))
593+ let H = cw
594+ if ($isInstanceOf(H, "Int"))
615595 then {
616- let ax = N
617- ax
596+ let an = H
597+ an
618598 }
619599 else 0
620600 }
621601
622602
623-func cI () = {
624- let cJ = aP()
625- func cK (aR,aS) = {
626- let cL = aR
627- let cM = cL._1
628- let ax = cL._2
629- if (cM)
630- then $Tuple2(cM, ax)
603+func cy () = {
604+ let cz = aF()
605+ func cA (aH,aI) = {
606+ let cB = aH
607+ let cC = cB._1
608+ let an = cB._2
609+ if (cC)
610+ then $Tuple2(cC, an)
631611 else {
632- let cN = (assetBalance(this, fromBase58String(aS)) + cF(fromBase58String(aS)))
633- if ((cJ[ax] > cN))
634- then $Tuple2(true, ax)
635- else $Tuple2(false, (ax + 1))
612+ let cD = (assetBalance(this, fromBase58String(aI)) + cv(fromBase58String(aI)))
613+ if ((cz[an] > cD))
614+ then $Tuple2(true, an)
615+ else $Tuple2(false, (an + 1))
636616 }
637617 }
638618
639- let aT = aq
640- let aU = size(aT)
641- let aV = $Tuple2(false, 0)
642- func aW (aX,aY) = if ((aY >= aU))
643- then aX
644- else cK(aX, aT[aY])
619+ let aJ = ag
620+ let aK = size(aJ)
621+ let aL = $Tuple2(false, 0)
622+ func aM (aN,aO) = if ((aO >= aK))
623+ then aN
624+ else cA(aN, aJ[aO])
645625
646- func aZ (aX,aY) = if ((aY >= aU))
647- then aX
626+ func aP (aN,aO) = if ((aO >= aK))
627+ then aN
648628 else throw("List size exceeds 15")
649629
650- aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
630+ aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
651631 }
652632
653633
654-func cO (ax) = as(("Suspicious state with asset: " + aq[ax]))
634+func cE (an) = ai(("Suspicious state with asset: " + ag[an]))
655635
656636
657-func cP (bW,cC) = {
658- func cQ (aR,cR) = (aR :+ ScriptTransfer(bW, cR.amount, cR.assetId))
637+func cF (bM,cs) = {
638+ func cG (aH,cH) = (aH :+ ScriptTransfer(bM, cH.amount, cH.assetId))
659639
660- let aT = cC
661- let aU = size(aT)
662- let aV = nil
663- func aW (aX,aY) = if ((aY >= aU))
664- then aX
665- else cQ(aX, aT[aY])
640+ let aJ = cs
641+ let aK = size(aJ)
642+ let aL = nil
643+ func aM (aN,aO) = if ((aO >= aK))
644+ then aN
645+ else cG(aN, aJ[aO])
666646
667- func aZ (aX,aY) = if ((aY >= aU))
668- then aX
647+ func aP (aN,aO) = if ((aO >= aK))
648+ then aN
669649 else throw("List size exceeds 15")
670650
671- aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
651+ aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
672652 }
673653
674654
675-func cS (cT) = {
676- let cU = valueOrErrorMessage(getInteger(this, o), "No dAppThresholdCoef key")
677- let cV = 10000
678- let cW = max(cT)
679- let cX = min(cT)
680- let cY = fraction(cW, cV, cX)
681- if ((cY > (cU * cV)))
655+func cI (cJ) = {
656+ let cK = valueOrErrorMessage(getInteger(this, o), "No dAppThresholdCoef key")
657+ let cL = 10000
658+ let cM = max(cJ)
659+ let cN = min(cJ)
660+ let cO = fraction(cM, cL, cN)
661+ if ((cO > (cK * cL)))
682662 then throw("New balance in assets of the DApp is less than threshold")
683663 else false
684664 }
685665
686666
687-func cZ (aq) = {
688- let da = split(aq, ",")
689- func db (dc,aS) = {
690- let dd = valueOrErrorMessage(fromBase58String(aS), ("fromBase58String: " + aS))
691- let de = valueOrErrorMessage(assetInfo(dd), ("assetInfo: " + aS)).decimals
692- if ((de != d))
667+func cP (ag) = {
668+ let cQ = split(ag, ",")
669+ func cR (cS,aI) = {
670+ let cT = valueOrErrorMessage(fromBase58String(aI), ("fromBase58String: " + aI))
671+ let cU = valueOrErrorMessage(assetInfo(cT), ("assetInfo: " + aI)).decimals
672+ if ((cU != d))
693673 then throw("wrong decimals")
694674 else false
695675 }
696676
697- let aT = da
698- let aU = size(aT)
699- let aV = false
700- func aW (aX,aY) = if ((aY >= aU))
701- then aX
702- else db(aX, aT[aY])
677+ let aJ = cQ
678+ let aK = size(aJ)
679+ let aL = false
680+ func aM (aN,aO) = if ((aO >= aK))
681+ then aN
682+ else cR(aN, aJ[aO])
703683
704- func aZ (aX,aY) = if ((aY >= aU))
705- then aX
684+ func aP (aN,aO) = if ((aO >= aK))
685+ then aN
706686 else throw("List size exceeds 15")
707687
708- aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
688+ aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
709689 }
710690
711691
712-@Callable(df)
713-func D (bb,bf) = {
714- let bs = bh(bb, bf)
715- $Tuple2([IntegerEntry("D", bs)], bs)
692+@Callable(cV)
693+func D (aR,aV) = {
694+ let bi = aX(aR, aV)
695+ $Tuple2([IntegerEntry("D", bi)], bi)
716696 }
717697
718698
719699
720-@Callable(df)
721-func init (aq,aK,dg,dh) = if (!(isDataStorageUntouched(this)))
700+@Callable(cV)
701+func init (ag,aA,cW) = if (!(isDataStorageUntouched(this)))
722702 then throw("Already initialized")
723- else if ((0 >= aK))
703+ else if ((0 >= aA))
724704 then throw("Amp must be must > 0")
725- else if ((0 >= dg))
705+ else if ((0 >= cW))
726706 then throw("dApp Threshold Coef must be > 0")
727707 else {
728- let di = "s_Multi_USD"
729- let dj = ("ShareToken of SwopFi protocol for MultiStable USD pool at address " + toString(this))
730- let dk = Issue(di, dj, 0, 6, true)
731- let dl = calculateAssetId(dk)
732- if (cZ(aq))
708+ let cX = "s_Multi_USD"
709+ let cY = ("ShareToken of SwopFi protocol for MultiStable USD pool at address " + toString(this))
710+ let cZ = Issue(cX, cY, 0, 6, true)
711+ let da = calculateAssetId(cZ)
712+ if (cP(ag))
733713 then throw()
734- else {
735- let dm = [StringEntry(g, f), StringEntry(h, aq), IntegerEntry("initial_A", aK), IntegerEntry("future_A", aK), IntegerEntry(n, getIntegerValue(K, "base_fee_flat")), StringEntry(l, toBase58String(dl)), IntegerEntry(m, 0), IntegerEntry(o, dg), BooleanEntry(j, true), dk]
736- if (dh)
737- then (dm ++ [BooleanEntry(t, dh), IntegerEntry(u, (ad + (af * ae)))])
738- else dm
739- }
714+ else [StringEntry(g, f), StringEntry(h, ag), IntegerEntry("initial_A", aA), IntegerEntry("future_A", aA), IntegerEntry(n, getIntegerValue(E, "base_fee_flat")), StringEntry(l, toBase58String(da)), IntegerEntry(m, 0), IntegerEntry(o, cW), BooleanEntry(j, true), cZ]
740715 }
741716
742717
743718
744-@Callable(df)
745-func addLiquidity (dn,do) = valueOrElse(av(), {
746- let bf = aK()
747- let bb = aP()
748- let ca = if ((ai == 0))
719+@Callable(cV)
720+func addLiquidity (db,dc) = valueOrElse(al(), {
721+ let aV = aA()
722+ let aR = aF()
723+ let bQ = if ((Y == 0))
749724 then 0
750- else bv(bb, bf)
751- let cC = df.payments
752- let dp = size(cC)
753- func dq (dr) = if ((dp > ar))
754- then throw(("payments size > " + toString(ar)))
755- else if ((1 > dp))
725+ else bl(aR, aV)
726+ let cs = cV.payments
727+ let dd = size(cs)
728+ func de (df) = if ((dd > ah))
729+ then throw(("payments size > " + toString(ah)))
730+ else if ((1 > dd))
756731 then throw("payments size < 1")
757- else if (if ((ai == 0))
758- then (ar != dp)
732+ else if (if ((Y == 0))
733+ then (ah != dd)
759734 else false)
760735 then throw("initial deposit requires all coins")
761736 else {
762- func ds (aR,cR) = if (containsElement(aq, cn(cR.assetId)))
737+ func dg (aH,cH) = if (containsElement(ag, cd(cH.assetId)))
763738 then true
764739 else throw("Invalid asset in payment")
765740
766- let aT = cC
767- let aU = size(aT)
768- let aV = false
769- func aW (aX,aY) = if ((aY >= aU))
770- then aX
771- else ds(aX, aT[aY])
741+ let aJ = cs
742+ let aK = size(aJ)
743+ let aL = false
744+ func aM (aN,aO) = if ((aO >= aK))
745+ then aN
746+ else dg(aN, aJ[aO])
772747
773- func aZ (aX,aY) = if ((aY >= aU))
774- then aX
748+ func aP (aN,aO) = if ((aO >= aK))
749+ then aN
775750 else throw("List size exceeds 15")
776751
777- aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
752+ aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
778753 }
779754
780- if (!(dq(dp)))
755+ if (!(de(dd)))
781756 then throw()
782757 else {
783- let cM = cI()
784- if (cM._1)
785- then (cO(cM._2) ++ cP(df.caller, cC))
758+ let cC = cy()
759+ if (cC._1)
760+ then (cE(cC._2) ++ cF(cV.caller, cs))
786761 else {
787- func cQ (aR,aS) = {
788- let dt = aR
789- let cT = dt._1
790- let ax = dt._2
791- let du = dt._3
792- if (if ((dp > du))
793- then (cn(cC[du].assetId) == aS)
762+ func cG (aH,aI) = {
763+ let dh = aH
764+ let cJ = dh._1
765+ let an = dh._2
766+ let di = dh._3
767+ if (if ((dd > di))
768+ then (cd(cs[di].assetId) == aI)
794769 else false)
795- then $Tuple3((cT :+ (bb[ax] + cC[du].amount)), (ax + 1), (du + 1))
796- else $Tuple3((cT :+ bb[ax]), (ax + 1), du)
770+ then $Tuple3((cJ :+ (aR[an] + cs[di].amount)), (an + 1), (di + 1))
771+ else $Tuple3((cJ :+ aR[an]), (an + 1), di)
797772 }
798773
799- let dv = {
800- let aT = aq
801- let aU = size(aT)
802- let aV = $Tuple3(nil, 0, 0)
803- func aW (aX,aY) = if ((aY >= aU))
804- then aX
805- else cQ(aX, aT[aY])
774+ let dj = {
775+ let aJ = ag
776+ let aK = size(aJ)
777+ let aL = $Tuple3(nil, 0, 0)
778+ func aM (aN,aO) = if ((aO >= aK))
779+ then aN
780+ else cG(aN, aJ[aO])
806781
807- func aZ (aX,aY) = if ((aY >= aU))
808- then aX
782+ func aP (aN,aO) = if ((aO >= aK))
783+ then aN
809784 else throw("List size exceeds 15")
810785
811- aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
786+ aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
812787 }
813- let cT = dv._1
814- let dw = dv._2
815- let dx = dv._3
816- if ((dp > dx))
788+ let cJ = dj._1
789+ let dk = dj._2
790+ let dl = dj._3
791+ if ((dd > dl))
817792 then throw("Incorect payments order")
818- else if (cS(cT))
793+ else if (cI(cJ))
819794 then throw()
820795 else {
821- let cb = bv(cT, bf)
822- if (aB((cb > ca)))
796+ let bR = bl(cJ, aV)
797+ if (ar((bR > bQ)))
823798 then throw("D1 > D0")
824799 else {
825- let bX = aD(df.caller)
826- func dy (aR,dz) = {
827- let dA = aR
828- let dB = dA._1
829- let dC = dA._2
830- let ax = dA._3
831- if ((ai > 0))
800+ let bN = at(cV.caller)
801+ func dm (aH,dn) = {
802+ let do = aH
803+ let dp = do._1
804+ let dq = do._2
805+ let an = do._3
806+ if ((Y > 0))
832807 then {
833- let bY = ((fraction(ak, bX, aj, CEILING) * ar) / (4 * (ar - 1)))
834- let dD = {
835- let dE = fraction(cb, bb[ax], ca)
836- let dF = if ((dE > dz))
837- then (dE - dz)
838- else (dz - dE)
839- fraction(bY, dF, aj)
808+ let bO = ((fraction(aa, bN, Z, CEILING) * ah) / (4 * (ah - 1)))
809+ let dr = {
810+ let ds = fraction(bR, aR[an], bQ)
811+ let dt = if ((ds > dn))
812+ then (ds - dn)
813+ else (dn - ds)
814+ fraction(bO, dt, Z)
840815 }
841- let dG = fraction(dD, al, aj)
842- let dH = (dz - dD)
843- let dI = (dz - dD)
844- let dJ = (dz - bb[ax])
845- let dK = (dD - dG)
846- let dL = if ((dJ > 0))
847- then cr((dJ - dD), aq[ax])
848- else cD(dD, aq[ax])
849- if ((dL == dL))
816+ let du = fraction(dr, ab, Z)
817+ let dv = (dn - dr)
818+ let dw = (dn - dr)
819+ let dx = (dn - aR[an])
820+ let dy = (dr - du)
821+ let dz = if ((dx > 0))
822+ then ch((dx - dr), ag[an])
823+ else ct(dr, ag[an])
824+ if ((dz == dz))
850825 then {
851- let dM = if ((dK > 0))
852- then invoke(Z, "airDrop", nil, [AttachedPayment(fromBase58String(aq[ax]), dK)])
826+ let dA = if ((dy > 0))
827+ then invoke(T, "airDrop", nil, [AttachedPayment(fromBase58String(ag[an]), dy)])
853828 else 0
854- if ((dM == dM))
855- then $Tuple3((dB :+ dI), (dC ++ [ScriptTransfer(U, dG, fromBase58String(aq[ax])), IntegerEntry((aq[ax] + i), dH)]), (ax + 1))
829+ if ((dA == dA))
830+ then $Tuple3((dp :+ dw), (dq ++ [ScriptTransfer(O, du, fromBase58String(ag[an])), IntegerEntry((ag[an] + i), dv)]), (an + 1))
856831 else throw("Strict value is not equal to itself.")
857832 }
858833 else throw("Strict value is not equal to itself.")
859834 }
860835 else {
861- let dL = cr(dz, aq[ax])
862- if ((dL == dL))
863- then $Tuple3((dB :+ dz), (dC :+ IntegerEntry((aq[ax] + i), dz)), (ax + 1))
836+ let dz = ch(dn, ag[an])
837+ if ((dz == dz))
838+ then $Tuple3((dp :+ dn), (dq :+ IntegerEntry((ag[an] + i), dn)), (an + 1))
864839 else throw("Strict value is not equal to itself.")
865840 }
866841 }
867842
868- let dN = {
869- let aT = cT
870- let aU = size(aT)
871- let aV = $Tuple3(nil, nil, 0)
872- func bq (aX,aY) = if ((aY >= aU))
873- then aX
874- else dy(aX, aT[aY])
843+ let dB = {
844+ let aJ = cJ
845+ let aK = size(aJ)
846+ let aL = $Tuple3(nil, nil, 0)
847+ func bg (aN,aO) = if ((aO >= aK))
848+ then aN
849+ else dm(aN, aJ[aO])
875850
876- func br (aX,aY) = if ((aY >= aU))
877- then aX
851+ func bh (aN,aO) = if ((aO >= aK))
852+ then aN
878853 else throw("List size exceeds 15")
879854
880- br(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
855+ bh(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
881856 }
882- let dB = dN._1
883- let dC = dN._2
884- let dO = bv(dB, bf)
885- let dP = if ((ai == 0))
886- then cb
887- else fraction(ai, (dO - ca), ca)
888- if (aB((dP >= dn)))
857+ let dp = dB._1
858+ let dq = dB._2
859+ let dC = bl(dp, aV)
860+ let dD = if ((Y == 0))
861+ then bR
862+ else fraction(Y, (dC - bQ), bQ)
863+ if (ar((dD >= db)))
889864 then throw("Slippage screwed you")
890- else if (do)
865+ else if (dc)
891866 then {
892- let dQ = invoke(this, "reissueShare", [dP], nil)
893- if ((dQ == dQ))
867+ let dE = invoke(this, "reissueShare", [dD], nil)
868+ if ((dE == dE))
894869 then {
895- let dR = invoke(Y, "lockShareTokens", [toString(this)], [AttachedPayment(ah, dP)])
896- if ((dR == dR))
897- then (dC :+ IntegerEntry(m, (ai + dP)))
870+ let dF = invoke(S, "lockShareTokens", [toString(this)], [AttachedPayment(X, dD)])
871+ if ((dF == dF))
872+ then (dq :+ IntegerEntry(m, (Y + dD)))
898873 else throw("Strict value is not equal to itself.")
899874 }
900875 else throw("Strict value is not equal to itself.")
901876 }
902- else (dC ++ [Reissue(ah, dP, true), ScriptTransfer(df.caller, dP, ah), IntegerEntry(m, (ai + dP))])
877+ else (dq ++ [Reissue(X, dD, true), ScriptTransfer(cV.caller, dD, X), IntegerEntry(m, (Y + dD))])
903878 }
904879 }
905880 }
908883
909884
910885
911-@Callable(df)
912-func calcMintAmount (cT,aF) = {
913- let bf = aK()
914- let bb = aP()
915- let cb = bv(cT, bf)
916- if ((ai == 0))
917- then $Tuple2(nil, cb)
886+@Callable(cV)
887+func calcMintAmount (cJ,av) = {
888+ let aV = aA()
889+ let aR = aF()
890+ let bR = bl(cJ, aV)
891+ if ((Y == 0))
892+ then $Tuple2(nil, bR)
918893 else {
919- let ca = bv(bb, bf)
920- let bX = aD(aF)
921- func dS (aR,dz) = {
922- let dT = aR
923- let dB = dT._1
924- let ax = dT._2
925- let bY = ((fraction(ak, bX, aj, CEILING) * ar) / (4 * (ar - 1)))
926- let dD = {
927- let dE = fraction(cb, bb[ax], ca)
928- let dF = if ((dE > dz))
929- then (dE - dz)
930- else (dz - dE)
931- fraction(bY, dF, aj)
894+ let bQ = bl(aR, aV)
895+ let bN = at(av)
896+ func dG (aH,dn) = {
897+ let dH = aH
898+ let dp = dH._1
899+ let an = dH._2
900+ let bO = ((fraction(aa, bN, Z, CEILING) * ah) / (4 * (ah - 1)))
901+ let dr = {
902+ let ds = fraction(bR, aR[an], bQ)
903+ let dt = if ((ds > dn))
904+ then (ds - dn)
905+ else (dn - ds)
906+ fraction(bO, dt, Z)
932907 }
933- let dI = (dz - dD)
934- $Tuple2((dB :+ dI), (ax + 1))
908+ let dw = (dn - dr)
909+ $Tuple2((dp :+ dw), (an + 1))
935910 }
936911
937- let dU = {
938- let aT = cT
939- let aU = size(aT)
940- let aV = $Tuple2(nil, 0)
941- func aW (aX,aY) = if ((aY >= aU))
942- then aX
943- else dS(aX, aT[aY])
912+ let dI = {
913+ let aJ = cJ
914+ let aK = size(aJ)
915+ let aL = $Tuple2(nil, 0)
916+ func aM (aN,aO) = if ((aO >= aK))
917+ then aN
918+ else dG(aN, aJ[aO])
944919
945- func aZ (aX,aY) = if ((aY >= aU))
946- then aX
920+ func aP (aN,aO) = if ((aO >= aK))
921+ then aN
947922 else throw("List size exceeds 15")
948923
949- aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
924+ aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
950925 }
951- let dB = dU._1
952- let dw = dU._2
953- let dO = bv(dB, bf)
954- let dV = fraction(ai, (dO - ca), ca)
955- $Tuple2(nil, dV)
926+ let dp = dI._1
927+ let dk = dI._2
928+ let dC = bl(dp, aV)
929+ let dJ = fraction(Y, (dC - bQ), bQ)
930+ $Tuple2(nil, dJ)
956931 }
957932 }
958933
959934
960935
961-@Callable(df)
962-func reissueShare (ct) = valueOrElse(ay(df), [Reissue(ah, ct, true)])
936+@Callable(cV)
937+func reissueShare (cj) = valueOrElse(ao(cV), [Reissue(X, cj, true)])
963938
964939
965940
966-@Callable(df)
967-func getDy (dW,dX,dY,dZ) = {
968- let bb = aP()
969- let ea = valueOrErrorMessage(indexOf(aq, dW), "unknown token in")
970- let eb = valueOrErrorMessage(indexOf(aq, dX), "unknown token out")
971- let bz = (bb[ea] + dY)
972- let bM = bw(ea, eb, bz, bb)
973- let cm = ((bb[eb] - bM) - 1)
974- let bX = aD(Address(fromBase58String(dZ)))
975- let bY = fraction(fraction(ak, bX, aj, CEILING), cm, aj)
976- $Tuple2(nil, $Tuple2((cm - bY), bY))
941+@Callable(cV)
942+func getDy (dK,dL,dM,dN) = {
943+ let aR = aF()
944+ let dO = valueOrErrorMessage(indexOf(ag, dK), "unknown token in")
945+ let dP = valueOrErrorMessage(indexOf(ag, dL), "unknown token out")
946+ let bp = (aR[dO] + dM)
947+ let bC = bm(dO, dP, bp, aR)
948+ let cc = ((aR[dP] - bC) - 1)
949+ let bN = at(Address(fromBase58String(dN)))
950+ let bO = fraction(fraction(aa, bN, Z, CEILING), cc, Z)
951+ $Tuple2(nil, $Tuple2((cc - bO), bO))
977952 }
978953
979954
980955
981-@Callable(df)
982-func exchange (ec,ed) = valueOrElse(av(), if ((size(df.payments) != 1))
956+@Callable(cV)
957+func exchange (dQ,dR) = valueOrElse(al(), if ((size(cV.payments) != 1))
983958 then throw("size(payments) != 1")
984959 else {
985- let cM = cI()
986- if (cM._1)
987- then (cO(cM._2) ++ cP(df.caller, df.payments))
960+ let cC = cy()
961+ if (cC._1)
962+ then (cE(cC._2) ++ cF(cV.caller, cV.payments))
988963 else {
989- let cR = df.payments[0]
990- let ee = cn(cR.assetId)
991- let ef = fromBase58String(ec)
992- let dY = cR.amount
993- let ea = valueOrErrorMessage(indexOf(aq, ee), "unknown token in")
994- let eb = valueOrErrorMessage(indexOf(aq, ec), "unknown token out")
995- let bb = aP()
996- let bz = (bb[ea] + dY)
997- let bM = bw(ea, eb, bz, bb)
998- let eg = ((bb[eb] - bM) - 1)
999- let bX = aD(df.caller)
1000- let bY = fraction(eg, fraction(ak, bX, aj, CEILING), aj)
1001- let cm = (eg - bY)
1002- let dG = fraction(bY, al, aj)
1003- if (aB((cm >= ed)))
964+ let cH = cV.payments[0]
965+ let dS = cd(cH.assetId)
966+ let dT = fromBase58String(dQ)
967+ let dM = cH.amount
968+ let dO = valueOrErrorMessage(indexOf(ag, dS), "unknown token in")
969+ let dP = valueOrErrorMessage(indexOf(ag, dQ), "unknown token out")
970+ let aR = aF()
971+ let bp = (aR[dO] + dM)
972+ let bC = bm(dO, dP, bp, aR)
973+ let dU = ((aR[dP] - bC) - 1)
974+ let bN = at(cV.originCaller)
975+ let bO = fraction(dU, fraction(aa, bN, Z, CEILING), Z)
976+ let cc = (dU - bO)
977+ let du = fraction(bO, ab, Z)
978+ if (ar((cc >= dR)))
1004979 then throw("Exchange resulted in fewer coins than expected")
1005980 else {
1006- func eh (aR,ei) = {
1007- let ej = aR
1008- let cT = ej._1
1009- let ax = ej._2
1010- if ((ax == ea))
1011- then $Tuple2((cT :+ (ei + dY)), (ax + 1))
1012- else if ((ax == eb))
1013- then $Tuple2((cT :+ (ei - eg)), (ax + 1))
1014- else $Tuple2((cT :+ ei), (ax + 1))
981+ func dV (aH,dW) = {
982+ let dX = aH
983+ let cJ = dX._1
984+ let an = dX._2
985+ if ((an == dO))
986+ then $Tuple2((cJ :+ (dW + dM)), (an + 1))
987+ else if ((an == dP))
988+ then $Tuple2((cJ :+ (dW - dU)), (an + 1))
989+ else $Tuple2((cJ :+ dW), (an + 1))
1015990 }
1016991
1017- let ek = {
1018- let aT = bb
1019- let aU = size(aT)
1020- let aV = $Tuple2(nil, 0)
1021- func aW (aX,aY) = if ((aY >= aU))
1022- then aX
1023- else eh(aX, aT[aY])
992+ let dY = {
993+ let aJ = aR
994+ let aK = size(aJ)
995+ let aL = $Tuple2(nil, 0)
996+ func aM (aN,aO) = if ((aO >= aK))
997+ then aN
998+ else dV(aN, aJ[aO])
1024999
1025- func aZ (aX,aY) = if ((aY >= aU))
1026- then aX
1000+ func aP (aN,aO) = if ((aO >= aK))
1001+ then aN
10271002 else throw("List size exceeds 15")
10281003
1029- aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
1004+ aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
10301005 }
1031- let cT = ek._1
1032- let ax = ek._2
1033- if (cS(cT))
1006+ let cJ = dY._1
1007+ let an = dY._2
1008+ if (cI(cJ))
10341009 then throw()
10351010 else {
1036- let dR = cr(cR.amount, cn(cR.assetId))
1037- if ((dR == dR))
1011+ let dF = ch(cH.amount, cd(cH.assetId))
1012+ if ((dF == dF))
10381013 then {
1039- let el = cD(eg, ec)
1040- if ((el == el))
1014+ let dZ = ct(dU, dQ)
1015+ if ((dZ == dZ))
10411016 then {
1042- let dK = (bY - dG)
1043- let dM = if ((dK > 0))
1044- then invoke(Z, "airDrop", nil, [AttachedPayment(ef, dK)])
1017+ let dy = (bO - du)
1018+ let dA = if ((dy > 0))
1019+ then invoke(T, "airDrop", nil, [AttachedPayment(dT, dy)])
10451020 else 0
1046- if ((dM == dM))
1047- then $Tuple2([IntegerEntry((ee + i), bz), IntegerEntry((ec + i), (bb[eb] - eg)), ScriptTransfer(df.caller, cm, ef), ScriptTransfer(U, dG, ef)], [cm, ef])
1021+ if ((dA == dA))
1022+ then $Tuple2([IntegerEntry((dS + i), bp), IntegerEntry((dQ + i), (aR[dP] - dU)), ScriptTransfer(cV.caller, cc, dT), ScriptTransfer(O, du, dT)], [cc, dT])
10481023 else throw("Strict value is not equal to itself.")
10491024 }
10501025 else throw("Strict value is not equal to itself.")
10571032
10581033
10591034
1060-@Callable(df)
1061-func withdraw (em) = valueOrElse(av(), if ((size(df.payments) != 1))
1035+@Callable(cV)
1036+func withdraw (ea) = valueOrElse(al(), if ((size(cV.payments) != 1))
10621037 then throw("size(payments) != 1")
10631038 else {
1064- let en = df.payments[0].amount
1065- let eo = df.payments[0].assetId
1066- if ((ah != eo))
1039+ let eb = cV.payments[0].amount
1040+ let ec = cV.payments[0].assetId
1041+ if ((X != ec))
10671042 then throw("unknown payment token")
10681043 else {
1069- let cM = cI()
1070- if (cM._1)
1071- then (cO(cM._2) ++ cP(df.originCaller, df.payments))
1044+ let cC = cy()
1045+ if (cC._1)
1046+ then (cE(cC._2) ++ cF(cV.originCaller, cV.payments))
10721047 else {
1073- func dy (aR,ep) = {
1074- let eq = aR
1075- let dC = eq._1
1076- let ax = eq._2
1077- let er = fraction(ep, en, ai)
1078- if (aB((er >= em[ax])))
1048+ func dm (aH,ed) = {
1049+ let ee = aH
1050+ let dq = ee._1
1051+ let an = ee._2
1052+ let ef = fraction(ed, eb, Y)
1053+ if (ar((ef >= ea[an])))
10791054 then throw("Withdrawal resulted in fewer coins than expected")
10801055 else {
1081- let el = cD(er, aq[ax])
1082- if ((el == el))
1083- then $Tuple2((dC ++ [IntegerEntry((aq[ax] + i), (ep - er)), ScriptTransfer(df.originCaller, er, fromBase58String(aq[ax]))]), (ax + 1))
1056+ let dZ = ct(ef, ag[an])
1057+ if ((dZ == dZ))
1058+ then $Tuple2((dq ++ [IntegerEntry((ag[an] + i), (ed - ef)), ScriptTransfer(cV.originCaller, ef, fromBase58String(ag[an]))]), (an + 1))
10841059 else throw("Strict value is not equal to itself.")
10851060 }
10861061 }
10871062
1088- let es = {
1089- let aT = aP()
1090- let aU = size(aT)
1091- let aV = $Tuple2(nil, 0)
1092- func aW (aX,aY) = if ((aY >= aU))
1093- then aX
1094- else dy(aX, aT[aY])
1063+ let eg = {
1064+ let aJ = aF()
1065+ let aK = size(aJ)
1066+ let aL = $Tuple2(nil, 0)
1067+ func aM (aN,aO) = if ((aO >= aK))
1068+ then aN
1069+ else dm(aN, aJ[aO])
10951070
1096- func aZ (aX,aY) = if ((aY >= aU))
1097- then aX
1071+ func aP (aN,aO) = if ((aO >= aK))
1072+ then aN
10981073 else throw("List size exceeds 15")
10991074
1100- aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
1075+ aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
11011076 }
1102- let dC = es._1
1103- let ax = es._2
1104- (dC ++ [Burn(ah, en), IntegerEntry(m, (ai - en))])
1077+ let dq = eg._1
1078+ let an = eg._2
1079+ (dq ++ [Burn(X, eb), IntegerEntry(m, (Y - eb))])
11051080 }
11061081 }
11071082 })
11081083
11091084
11101085
1111-@Callable(df)
1112-func withdrawWithUnlock (em,et) = valueOrElse(av(), if ((0 >= et))
1086+@Callable(cV)
1087+func withdrawWithUnlock (ea,eh) = valueOrElse(al(), if ((0 >= eh))
11131088 then throw("Unlock amount must be positive")
11141089 else {
1115- let cM = cI()
1116- if (cM._1)
1117- then (cO(cM._2) ++ cP(df.caller, df.payments))
1090+ let cC = cy()
1091+ if (cC._1)
1092+ then (cE(cC._2) ++ cF(cV.caller, cV.payments))
11181093 else {
1119- let en = if ((size(df.payments) > 0))
1120- then if ((size(df.payments) != 1))
1094+ let eb = if ((size(cV.payments) > 0))
1095+ then if ((size(cV.payments) != 1))
11211096 then throw("size(payments) != 1")
11221097 else {
1123- let eo = df.payments[0].assetId
1124- if ((ah != eo))
1098+ let ec = cV.payments[0].assetId
1099+ if ((X != ec))
11251100 then throw("unknown payment token")
1126- else df.payments[0].amount
1101+ else cV.payments[0].amount
11271102 }
11281103 else 0
1129- let eu = invoke(Y, "withdrawShareTokens", [toString(this), et], nil)
1130- if ((eu == eu))
1104+ let ei = invoke(S, "withdrawShareTokens", [toString(this), eh], nil)
1105+ if ((ei == ei))
11311106 then {
1132- let ev = (en + et)
1133- let dL = invoke(this, "withdraw", [em], [AttachedPayment(ah, ev)])
1134- if ((dL == dL))
1107+ let ej = (eb + eh)
1108+ let dz = invoke(this, "withdraw", [ea], [AttachedPayment(X, ej)])
1109+ if ((dz == dz))
11351110 then nil
11361111 else throw("Strict value is not equal to itself.")
11371112 }
11411116
11421117
11431118
1144-@Callable(df)
1145-func calcWithdrawOneCoin (ew,ec,aF) = {
1146- let ax = valueOrErrorMessage(indexOf(aq, ec), "unknown token out")
1147- $Tuple2(nil, bU(aP(), ew, ax, Address(fromBase58String(aF)))._1)
1119+@Callable(cV)
1120+func calcWithdrawOneCoin (ek,dQ,av) = {
1121+ let an = valueOrErrorMessage(indexOf(ag, dQ), "unknown token out")
1122+ $Tuple2(nil, bK(aF(), ek, an, Address(fromBase58String(av)))._1)
11481123 }
11491124
11501125
11511126
1152-@Callable(df)
1153-func withdrawOneCoin (ec,ex) = valueOrElse(av(), if ((size(df.payments) != 1))
1127+@Callable(cV)
1128+func withdrawOneCoin (dQ,el) = valueOrElse(al(), if ((size(cV.payments) != 1))
11541129 then throw("size(payments) != 1")
11551130 else {
1156- let cM = cI()
1157- if (cM._1)
1158- then (cO(cM._2) ++ cP(df.originCaller, df.payments))
1131+ let cC = cy()
1132+ if (cC._1)
1133+ then (cE(cC._2) ++ cF(cV.originCaller, cV.payments))
11591134 else {
1160- let en = df.payments[0].amount
1161- let eo = df.payments[0].assetId
1162- if ((eo != ah))
1135+ let eb = cV.payments[0].amount
1136+ let ec = cV.payments[0].assetId
1137+ if ((ec != X))
11631138 then throw("unknown token")
11641139 else {
1165- let ey = valueOrErrorMessage(indexOf(aq, ec), "unknown token out")
1166- let ef = fromBase58String(ec)
1167- let bb = aP()
1168- let ez = bU(bb, en, ey, df.originCaller)
1169- let cm = ez._1
1170- let eA = ez._2
1171- if (aB((cm >= ex)))
1140+ let em = valueOrErrorMessage(indexOf(ag, dQ), "unknown token out")
1141+ let dT = fromBase58String(dQ)
1142+ let aR = aF()
1143+ let en = bK(aR, eb, em, cV.originCaller)
1144+ let cc = en._1
1145+ let eo = en._2
1146+ if (ar((cc >= el)))
11721147 then throw("Not enough coins removed")
11731148 else {
1174- let dG = fraction(eA, al, aj)
1175- let eB = (cm + eA)
1176- func eh (aR,ei) = {
1177- let eC = aR
1178- let cT = eC._1
1179- let ax = eC._2
1180- if ((ax == ey))
1181- then $Tuple2((cT :+ (ei - eB)), (ax + 1))
1182- else $Tuple2((cT :+ ei), (ax + 1))
1149+ let du = fraction(eo, ab, Z)
1150+ let ep = (cc + eo)
1151+ func dV (aH,dW) = {
1152+ let eq = aH
1153+ let cJ = eq._1
1154+ let an = eq._2
1155+ if ((an == em))
1156+ then $Tuple2((cJ :+ (dW - ep)), (an + 1))
1157+ else $Tuple2((cJ :+ dW), (an + 1))
11831158 }
11841159
1185- let eD = {
1186- let aT = bb
1187- let aU = size(aT)
1188- let aV = $Tuple2(nil, 0)
1189- func aW (aX,aY) = if ((aY >= aU))
1190- then aX
1191- else eh(aX, aT[aY])
1160+ let er = {
1161+ let aJ = aR
1162+ let aK = size(aJ)
1163+ let aL = $Tuple2(nil, 0)
1164+ func aM (aN,aO) = if ((aO >= aK))
1165+ then aN
1166+ else dV(aN, aJ[aO])
11921167
1193- func aZ (aX,aY) = if ((aY >= aU))
1194- then aX
1168+ func aP (aN,aO) = if ((aO >= aK))
1169+ then aN
11951170 else throw("List size exceeds 15")
11961171
1197- aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
1172+ aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
11981173 }
1199- let cT = eD._1
1200- let eE = eD._2
1201- if (cS(cT))
1174+ let cJ = er._1
1175+ let es = er._2
1176+ if (cI(cJ))
12021177 then throw()
12031178 else {
1204- let el = cD(eB, ec)
1205- if ((el == el))
1179+ let dZ = ct(ep, dQ)
1180+ if ((dZ == dZ))
12061181 then {
1207- let dK = (eA - dG)
1208- let dM = if ((dK > 0))
1209- then invoke(Z, "airDrop", nil, [AttachedPayment(ef, dK)])
1182+ let dy = (eo - du)
1183+ let dA = if ((dy > 0))
1184+ then invoke(T, "airDrop", nil, [AttachedPayment(dT, dy)])
12101185 else 0
1211- if ((dM == dM))
1212- then [ScriptTransfer(df.originCaller, cm, ef), IntegerEntry((aq[ey] + i), (bb[ey] - eB)), Burn(ah, en), ScriptTransfer(U, dG, ef), IntegerEntry(m, (ai - en))]
1186+ if ((dA == dA))
1187+ then [ScriptTransfer(cV.originCaller, cc, dT), IntegerEntry((ag[em] + i), (aR[em] - ep)), Burn(X, eb), ScriptTransfer(O, du, dT), IntegerEntry(m, (Y - eb))]
12131188 else throw("Strict value is not equal to itself.")
12141189 }
12151190 else throw("Strict value is not equal to itself.")
12211196
12221197
12231198
1224-@Callable(df)
1225-func withdrawOneCoinWithUnlock (ec,ex,et) = valueOrElse(av(), if ((0 >= et))
1199+@Callable(cV)
1200+func withdrawOneCoinWithUnlock (dQ,el,eh) = valueOrElse(al(), if ((0 >= eh))
12261201 then throw("Unlock amount must be positive")
12271202 else {
1228- let cM = cI()
1229- if (cM._1)
1230- then (cO(cM._2) ++ cP(df.caller, df.payments))
1203+ let cC = cy()
1204+ if (cC._1)
1205+ then (cE(cC._2) ++ cF(cV.caller, cV.payments))
12311206 else {
1232- let en = if ((size(df.payments) > 0))
1233- then if ((size(df.payments) != 1))
1207+ let eb = if ((size(cV.payments) > 0))
1208+ then if ((size(cV.payments) != 1))
12341209 then throw("size(payments) != 1")
12351210 else {
1236- let eo = df.payments[0].assetId
1237- if ((ah != eo))
1211+ let ec = cV.payments[0].assetId
1212+ if ((X != ec))
12381213 then throw("unknown payment token")
1239- else df.payments[0].amount
1214+ else cV.payments[0].amount
12401215 }
12411216 else 0
1242- let eu = invoke(Y, "withdrawShareTokens", [toString(this), et], nil)
1243- if ((eu == eu))
1217+ let ei = invoke(S, "withdrawShareTokens", [toString(this), eh], nil)
1218+ if ((ei == ei))
12441219 then {
1245- let ev = (en + et)
1246- let dL = invoke(this, "withdrawOneCoin", [ec, ex], [AttachedPayment(ah, ev)])
1247- if ((dL == dL))
1220+ let ej = (eb + eh)
1221+ let dz = invoke(this, "withdrawOneCoin", [dQ, el], [AttachedPayment(X, ej)])
1222+ if ((dz == dz))
12481223 then nil
12491224 else throw("Strict value is not equal to itself.")
12501225 }
12541229
12551230
12561231
1257-@Callable(df)
1258-func A () = $Tuple2(nil, aK())
1232+@Callable(cV)
1233+func A () = $Tuple2(nil, aA())
12591234
12601235
12611236
1262-@Callable(df)
1237+@Callable(cV)
12631238 func getVirtualPrice () = {
1264- let bs = be(aP(), aK())
1265- $Tuple2(nil, fraction(bs, a, ai))
1239+ let bi = aU(aF(), aA())
1240+ $Tuple2(nil, fraction(bi, a, Y))
12661241 }
12671242
12681243
12691244
1270-@Callable(df)
1271-func calcTokenAmount (eF,eG) = {
1272- let bf = aK()
1273- let eH = aP()
1274- let ca = bv(eH, bf)
1275- func eI (aR,ep) = {
1276- let eJ = aR
1277- let cT = eJ._1
1278- let ax = eJ._2
1279- let dz = (ep + (if (eG)
1280- then eF[ax]
1281- else -(eF[ax])))
1282- $Tuple2((cT :+ dz), (ax + 1))
1245+@Callable(cV)
1246+func calcTokenAmount (et,eu) = {
1247+ let aV = aA()
1248+ let ev = aF()
1249+ let bQ = bl(ev, aV)
1250+ func ew (aH,ed) = {
1251+ let ex = aH
1252+ let cJ = ex._1
1253+ let an = ex._2
1254+ let dn = (ed + (if (eu)
1255+ then et[an]
1256+ else -(et[an])))
1257+ $Tuple2((cJ :+ dn), (an + 1))
12831258 }
12841259
1285- let cT = ( let aT = eH
1286- let aU = size(aT)
1287- let aV = $Tuple2(nil, 0)
1288- func aW (aX,aY) = if ((aY >= aU))
1289- then aX
1290- else eI(aX, aT[aY])
1260+ let cJ = ( let aJ = ev
1261+ let aK = size(aJ)
1262+ let aL = $Tuple2(nil, 0)
1263+ func aM (aN,aO) = if ((aO >= aK))
1264+ then aN
1265+ else ew(aN, aJ[aO])
12911266
1292- func aZ (aX,aY) = if ((aY >= aU))
1293- then aX
1267+ func aP (aN,aO) = if ((aO >= aK))
1268+ then aN
12941269 else throw("List size exceeds 15")
12951270
1296- aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15))._1
1297- let cb = bv(cT, bf)
1298- let eK = if (eG)
1299- then (cb - ca)
1300- else (ca - cb)
1301- $Tuple2(nil, fraction(eK, ai, ca))
1271+ aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15))._1
1272+ let bR = bl(cJ, aV)
1273+ let ey = if (eu)
1274+ then (bR - bQ)
1275+ else (bQ - bR)
1276+ $Tuple2(nil, fraction(ey, Y, bQ))
13021277 }
13031278
13041279
13051280
1306-@Callable(df)
1307-func rampA (eL,eM) = valueOrElse(av(), valueOrElse(aw(df), if (aB((aA >= (ao + e))))
1281+@Callable(cV)
1282+func rampA (ez,eA) = valueOrElse(al(), valueOrElse(am(cV), if (ar((aq >= (ae + e))))
13081283 then throw("too often")
1309- else if (aB((eM >= (aA + e))))
1284+ else if (ar((eA >= (aq + e))))
13101285 then throw("insufficient time")
13111286 else {
1312- let eN = aK()
1313- if (aB(if ((eL > 0))
1314- then (b > eL)
1287+ let eB = aA()
1288+ if (ar(if ((ez > 0))
1289+ then (b > ez)
13151290 else false))
13161291 then throw("out of base range")
1317- else if (aB(if (if ((eL >= eN))
1318- then ((eN * c) >= eL)
1292+ else if (ar(if (if ((ez >= eB))
1293+ then ((eB * c) >= ez)
13191294 else false)
13201295 then true
1321- else if ((eN > eL))
1322- then ((eL * c) >= eN)
1296+ else if ((eB > ez))
1297+ then ((ez * c) >= eB)
13231298 else false))
13241299 then throw("out of range")
1325- else [IntegerEntry("initial_A", eN), IntegerEntry("future_A", eL), IntegerEntry("initial_A_time", aA), IntegerEntry("future_A_time", eM)]
1300+ else [IntegerEntry("initial_A", eB), IntegerEntry("future_A", ez), IntegerEntry("initial_A_time", aq), IntegerEntry("future_A_time", eA)]
13261301 }))
13271302
13281303
13291304
1330-@Callable(df)
1331-func stopRampA () = valueOrElse(av(), valueOrElse(aw(df), {
1332- let eO = aK()
1333-[IntegerEntry("initial_A", eO), IntegerEntry("future_A", eO), IntegerEntry("initial_A_time", aA), IntegerEntry("future_A_time", aA)]
1305+@Callable(cV)
1306+func stopRampA () = valueOrElse(al(), valueOrElse(am(cV), {
1307+ let eC = aA()
1308+[IntegerEntry("initial_A", eC), IntegerEntry("future_A", eC), IntegerEntry("initial_A_time", aq), IntegerEntry("future_A_time", aq)]
13341309 }))
13351310
13361311
13371312
1338-@Callable(df)
1339-func shutdown () = valueOrElse(aw(df), if (!(ag))
1313+@Callable(cV)
1314+func shutdown () = valueOrElse(am(cV), if (!(W))
13401315 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, k), "the cause wasn't specified")))
1341- else as("Paused by admin"))
1316+ else ai("Paused by admin"))
13421317
13431318
13441319
1345-@Callable(df)
1346-func activate () = valueOrElse(aw(df), if (ag)
1347- then au()
1320+@Callable(cV)
1321+func activate () = valueOrElse(am(cV), if (W)
1322+ then ak()
13481323 else [BooleanEntry(j, true), DeleteEntry(k)])
13491324
13501325
13511326
1352-@Callable(df)
1353-func keepLimitForFirstHarvest (eP) = valueOrElse(av(), valueOrElse(aw(df), [IntegerEntry(v, eP)]))
1327+@Callable(cV)
1328+func takeIntoAccountExtraFunds () = valueOrElse(al(), if ((cV.caller != O))
1329+ then throw("Only the wallet can call this function")
1330+ else {
1331+ let ev = aF()
1332+ func eD (aH,aI) = {
1333+ let eE = aH
1334+ let eF = eE._1
1335+ let an = eE._2
1336+ let eG = fromBase58String(aI)
1337+ let eH = (assetBalance(this, eG) + cv(eG))
1338+ let eI = (eH - ev[an])
1339+ if ((0 > eI))
1340+ then ai(("Enroll amount negative for asset" + aI))
1341+ else {
1342+ let dA = if ((eI > 0))
1343+ then invoke(T, "airDrop", nil, [AttachedPayment(eG, eI)])
1344+ else 0
1345+ if ((dA == dA))
1346+ then $Tuple2((eF + eI), (an + 1))
1347+ else throw("Strict value is not equal to itself.")
1348+ }
1349+ }
1350+
1351+ let dk = {
1352+ let aJ = ag
1353+ let aK = size(aJ)
1354+ let aL = $Tuple2(0, 0)
1355+ func aM (aN,aO) = if ((aO >= aK))
1356+ then aN
1357+ else eD(aN, aJ[aO])
1358+
1359+ func aP (aN,aO) = if ((aO >= aK))
1360+ then aN
1361+ else throw("List size exceeds 15")
1362+
1363+ aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
1364+ }
1365+ if ((dk._1 == 0))
1366+ then throw("No money to take")
1367+ else nil
1368+ })
13541369
13551370
1356-@Verifier(eQ)
1357-func eR () = {
1358- let eS = {
1359- let eT = if (sigVerify(eQ.bodyBytes, eQ.proofs[0], Q))
1371+@Verifier(eJ)
1372+func eK () = {
1373+ let eL = {
1374+ let eM = if (sigVerify(eJ.bodyBytes, eJ.proofs[0], K))
13601375 then 1
13611376 else 0
1362- let eU = if (sigVerify(eQ.bodyBytes, eQ.proofs[1], R))
1377+ let eN = if (sigVerify(eJ.bodyBytes, eJ.proofs[1], L))
13631378 then 1
13641379 else 0
1365- let eV = if (sigVerify(eQ.bodyBytes, eQ.proofs[2], S))
1380+ let eO = if (sigVerify(eJ.bodyBytes, eJ.proofs[2], M))
13661381 then 1
13671382 else 0
1368- (((eT + eU) + eV) >= 2)
1383+ (((eM + eN) + eO) >= 2)
13691384 }
1370- let N = eQ
1371- if ($isInstanceOf(N, "InvokeScriptTransaction"))
1385+ let H = eJ
1386+ if ($isInstanceOf(H, "InvokeScriptTransaction"))
13721387 then {
1373- let dL = N
1374- let eW = if ((dL.dApp == this))
1375- then (dL.function == "takeIntoAccountExtraFunds")
1388+ let dz = H
1389+ let eP = if ((dz.dApp == this))
1390+ then (dz.function == "takeIntoAccountExtraFunds")
13761391 else false
1377- let eX = if (if (if (sigVerify(eQ.bodyBytes, eQ.proofs[0], Q))
1392+ let eQ = if (if (if (sigVerify(eJ.bodyBytes, eJ.proofs[0], K))
13781393 then true
1379- else sigVerify(eQ.bodyBytes, eQ.proofs[0], R))
1394+ else sigVerify(eJ.bodyBytes, eJ.proofs[0], L))
13801395 then true
1381- else sigVerify(eQ.bodyBytes, eQ.proofs[0], S))
1396+ else sigVerify(eJ.bodyBytes, eJ.proofs[0], M))
13821397 then true
1383- else sigVerify(eQ.bodyBytes, eQ.proofs[0], T)
1384- if (if (eW)
1385- then eX
1398+ else sigVerify(eJ.bodyBytes, eJ.proofs[0], N)
1399+ if (if (eP)
1400+ then eQ
13861401 else false)
13871402 then true
1388- else eS
1403+ else eL
13891404 }
1390- else eS
1405+ else eL
13911406 }
13921407
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 = "first_harvest"
42+let t = "admin_pub_1"
4343
44-let u = "first_harvest_height"
44+let u = "admin_pub_2"
4545
46-let v = "share_limit_on_first_harvest"
46+let v = "admin_pub_3"
4747
48-let w = "base_period"
48+let w = "admin_invoke_pub"
4949
50-let x = "period_length"
50+let x = "money_box_address"
5151
52-let y = "start_height"
52+let y = "governance_address"
5353
54-let z = "admin_pub_1"
54+let z = "voting_address"
5555
56-let B = "admin_pub_2"
56+let B = "farming_address"
5757
58-let C = "admin_pub_3"
58+let C = "lp_farming"
5959
60-let E = "admin_invoke_pub"
60+let E = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
6161
62-let F = "money_box_address"
63-
64-let G = "governance_address"
65-
66-let H = "voting_address"
67-
68-let I = "farming_address"
69-
70-let J = "lp_farming"
71-
72-let K = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
73-
74-func L (M) = {
75- let N = getString(K, M)
76- if ($isInstanceOf(N, "String"))
62+func F (G) = {
63+ let H = getString(E, G)
64+ if ($isInstanceOf(H, "String"))
7765 then {
78- let O = N
79- fromBase58String(O)
66+ let I = H
67+ fromBase58String(I)
8068 }
8169 else {
82- let P = N
83- throw((M + "is empty"))
70+ let J = H
71+ throw((G + "is empty"))
8472 }
8573 }
8674
8775
88-let Q = L(z)
76+let K = F(t)
8977
90-let R = L(B)
78+let L = F(u)
9179
92-let S = L(C)
80+let M = F(v)
9381
94-let T = L(E)
82+let N = F(w)
9583
96-let U = Address(L(F))
84+let O = Address(F(x))
9785
98-let V = Address(L(G))
86+let P = Address(F(y))
9987
100-let W = Address(L(p))
88+let Q = Address(F(p))
10189
102-let X = Address(L(H))
90+let R = Address(F(z))
10391
104-let Y = Address(L(I))
92+let S = Address(F(B))
10593
106-let Z = Address(L(J))
94+let T = Address(F(C))
10795
108-let aa = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
96+let U = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
10997
110-let ab = [toBase58String(aa)]
98+let V = [toBase58String(U)]
11199
112-let ac = valueOrErrorMessage(getInteger(X, w), "Empty kBasePeriod")
100+let W = getBooleanValue(this, j)
113101
114-let ad = valueOrErrorMessage(getInteger(X, y), "Empty kStartHeight")
102+let X = fromBase58String(getStringValue(this, l))
115103
116-let ae = valueOrErrorMessage(getInteger(X, x), "Empty kPeriodLength")
104+let Y = getIntegerValue(this, m)
117105
118-let af = ((ac + ((height - ad) / ae)) + 3)
106+let Z = 1000000
119107
120-let ag = getBooleanValue(this, j)
108+let aa = getIntegerValue(this, n)
121109
122-let ah = fromBase58String(getStringValue(this, l))
110+let ab = fraction(40, Z, 100)
123111
124-let ai = getIntegerValue(this, m)
112+let ac = getIntegerValue(this, "initial_A")
125113
126-let aj = 1000000
114+let ad = getIntegerValue(this, "future_A")
127115
128-let ak = getIntegerValue(this, n)
116+let ae = valueOrElse(getInteger(this, "initial_A_time"), 0)
129117
130-let al = fraction(40, aj, 100)
118+let af = valueOrElse(getInteger(this, "future_A_time"), 0)
131119
132-let am = getIntegerValue(this, "initial_A")
120+let ag = split(getStringValue(this, h), ",")
133121
134-let an = getIntegerValue(this, "future_A")
122+let ah = size(ag)
135123
136-let ao = valueOrElse(getInteger(this, "initial_A_time"), 0)
137-
138-let ap = valueOrElse(getInteger(this, "future_A_time"), 0)
139-
140-let aq = split(getStringValue(this, h), ",")
141-
142-let ar = size(aq)
143-
144-func as (at) = [BooleanEntry(j, false), StringEntry(k, at)]
124+func ai (aj) = [BooleanEntry(j, false), StringEntry(k, aj)]
145125
146126
147-func au () = throw("DApp is already active")
127+func ak () = throw("DApp is already active")
148128
149129
150-func av () = if (ag)
130+func al () = if (W)
151131 then unit
152132 else throw("DApp is inactive at this moment")
153133
154134
155-func aw (ax) = if (containsElement([Q, R, S], ax.callerPublicKey))
135+func am (an) = if (containsElement([K, L, M], an.callerPublicKey))
156136 then unit
157137 else throw("Only admin can call this function")
158138
159139
160-func ay (ax) = if ((this == ax.caller))
140+func ao (an) = if ((this == an.caller))
161141 then unit
162142 else throw("Only contract itself can call this function")
163143
164144
165-let az = toBigInt(2)
145+let ap = toBigInt(2)
166146
167-let aA = height
147+let aq = height
168148
169-func aB (aC) = if (aC)
149+func ar (as) = if (as)
170150 then false
171151 else true
172152
173153
174-func aD (aE) = {
175- let aF = {
176- let N = aE
177- if ($isInstanceOf(N, "Address"))
154+func at (au) = {
155+ let av = {
156+ let H = au
157+ if ($isInstanceOf(H, "Address"))
178158 then {
179- let aG = N
180- toString(aG)
159+ let aw = H
160+ toString(aw)
181161 }
182- else if ($isInstanceOf(N, "String"))
162+ else if ($isInstanceOf(H, "String"))
183163 then {
184- let aG = N
185- aG
164+ let aw = H
165+ aw
186166 }
187167 else throw("Unknow type of user Addr")
188168 }
189- let aH = valueOrElse(getInteger(V, (aF + s)), 0)
190- let aI = split(getStringValue(K, r), ",")
191- let aJ = split(getStringValue(K, q), ",")
192- if (if ((aH >= parseIntValue(aI[0])))
193- then (parseIntValue(aI[1]) > aH)
169+ let ax = valueOrElse(getInteger(P, (av + s)), 0)
170+ let ay = split(getStringValue(E, r), ",")
171+ let az = split(getStringValue(E, q), ",")
172+ if (if ((ax >= parseIntValue(ay[0])))
173+ then (parseIntValue(ay[1]) > ax)
194174 else false)
195- then (aj - parseIntValue(aJ[0]))
196- else if (if ((aH >= parseIntValue(aI[1])))
197- then (parseIntValue(aI[2]) > aH)
175+ then (Z - parseIntValue(az[0]))
176+ else if (if ((ax >= parseIntValue(ay[1])))
177+ then (parseIntValue(ay[2]) > ax)
198178 else false)
199- then (aj - parseIntValue(aJ[1]))
200- else if (if ((aH >= parseIntValue(aI[2])))
201- then (parseIntValue(aI[3]) > aH)
179+ then (Z - parseIntValue(az[1]))
180+ else if (if ((ax >= parseIntValue(ay[2])))
181+ then (parseIntValue(ay[3]) > ax)
202182 else false)
203- then (aj - parseIntValue(aJ[2]))
204- else if (if ((aH >= parseIntValue(aI[3])))
205- then (parseIntValue(aI[4]) > aH)
183+ then (Z - parseIntValue(az[2]))
184+ else if (if ((ax >= parseIntValue(ay[3])))
185+ then (parseIntValue(ay[4]) > ax)
206186 else false)
207- then (aj - parseIntValue(aJ[3]))
208- else if ((aH >= parseIntValue(aI[4])))
209- then (aj - parseIntValue(aJ[4]))
210- else aj
187+ then (Z - parseIntValue(az[3]))
188+ else if ((ax >= parseIntValue(ay[4])))
189+ then (Z - parseIntValue(az[4]))
190+ else Z
211191 }
212192
213193
214-func aK () = {
215- let aL = ap
216- let aM = an
217- if ((aL > aA))
194+func aA () = {
195+ let aB = af
196+ let aC = ad
197+ if ((aB > aq))
218198 then {
219- let aN = am
220- let aO = ao
221- if ((aM > aN))
222- then (aN + (((aM - aN) * (aA - aO)) / (aL - aO)))
223- else (aN - (((aN - aM) * (aA - aO)) / (aL - aO)))
199+ let aD = ac
200+ let aE = ae
201+ if ((aC > aD))
202+ then (aD + (((aC - aD) * (aq - aE)) / (aB - aE)))
203+ else (aD - (((aD - aC) * (aq - aE)) / (aB - aE)))
224204 }
225- else aM
205+ else aC
226206 }
227207
228208
229-func aP () = {
230- func aQ (aR,aS) = (aR :+ valueOrElse(getInteger(this, (aS + i)), 0))
209+func aF () = {
210+ func aG (aH,aI) = (aH :+ valueOrElse(getInteger(this, (aI + i)), 0))
231211
232- let aT = aq
233- let aU = size(aT)
234- let aV = nil
235- func aW (aX,aY) = if ((aY >= aU))
236- then aX
237- else aQ(aX, aT[aY])
212+ let aJ = ag
213+ let aK = size(aJ)
214+ let aL = nil
215+ func aM (aN,aO) = if ((aO >= aK))
216+ then aN
217+ else aG(aN, aJ[aO])
238218
239- func aZ (aX,aY) = if ((aY >= aU))
240- then aX
219+ func aP (aN,aO) = if ((aO >= aK))
220+ then aN
241221 else throw("List size exceeds 15")
242222
243- aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
223+ aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
244224 }
245225
246226
247-func ba (bb) = bb
227+func aQ (aR) = aR
248228
249229
250-func bc (aR,bd) = (aR + bd)
230+func aS (aH,aT) = (aH + aT)
251231
252232
253-func be (bb,bf) = {
254- let bg = invoke(this, "D", [bb, bf], nil)
255- if ($isInstanceOf(bg, "Int"))
256- then bg
257- else throw(($getType(invoke(this, "D", [bb, bf], nil)) + " couldn't be cast to Int"))
233+func aU (aR,aV) = {
234+ let aW = invoke(this, "D", [aR, aV], nil)
235+ if ($isInstanceOf(aW, "Int"))
236+ then aW
237+ else throw(($getType(invoke(this, "D", [aR, aV], nil)) + " couldn't be cast to Int"))
258238 }
259239
260240
261-func bh (bb,bf) = {
262- let bi = {
263- let aT = bb
264- let aU = size(aT)
265- let aV = 0
266- func aW (aX,aY) = if ((aY >= aU))
267- then aX
268- else bc(aX, aT[aY])
241+func aX (aR,aV) = {
242+ let aY = {
243+ let aJ = aR
244+ let aK = size(aJ)
245+ let aL = 0
246+ func aM (aN,aO) = if ((aO >= aK))
247+ then aN
248+ else aS(aN, aJ[aO])
269249
270- func aZ (aX,aY) = if ((aY >= aU))
271- then aX
250+ func aP (aN,aO) = if ((aO >= aK))
251+ then aN
272252 else throw("List size exceeds 15")
273253
274- aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
254+ aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
275255 }
276- if ((bi == 0))
256+ if ((aY == 0))
277257 then 0
278258 else {
279- let bj = (bf * ar)
280- let bk = (toBigInt(bj) * toBigInt(bi))
281- let bl = toBigInt((bj - 1))
282- func bm (aR,ax) = if ((aR._2 == true))
283- then aR
259+ let aZ = (aV * ah)
260+ let ba = (toBigInt(aZ) * toBigInt(aY))
261+ let bb = toBigInt((aZ - 1))
262+ func bc (aH,an) = if ((aH._2 == true))
263+ then aH
284264 else {
285- let bn = aR._1
286- func bo (bp,ax) = if ((ar > ax))
287- then ((bp * bn) / (toBigInt(bb[ax]) * toBigInt(ar)))
288- else bp
265+ let bd = aH._1
266+ func be (bf,an) = if ((ah > an))
267+ then ((bf * bd) / (toBigInt(aR[an]) * toBigInt(ah)))
268+ else bf
289269
290- let bp = {
291- let aT = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
292- let aU = size(aT)
293- let aV = bn
294- func bq (aX,aY) = if ((aY >= aU))
295- then aX
296- else bo(aX, aT[aY])
270+ let bf = {
271+ let aJ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
272+ let aK = size(aJ)
273+ let aL = bd
274+ func bg (aN,aO) = if ((aO >= aK))
275+ then aN
276+ else be(aN, aJ[aO])
297277
298- func br (aX,aY) = if ((aY >= aU))
299- then aX
278+ func bh (aN,aO) = if ((aO >= aK))
279+ then aN
300280 else throw("List size exceeds 15")
301281
302- br(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
282+ bh(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
303283 }
304- let bs = fraction((bk + (toBigInt(ar) * bp)), bn, ((bl * bn) + (toBigInt((ar + 1)) * bp)))
305- if ((bs > bn))
306- then if ((1 >= toInt((bs - bn))))
307- then $Tuple2(bs, true)
308- else $Tuple2(bs, false)
309- else if ((1 >= toInt((bn - bs))))
310- then $Tuple2(bs, true)
311- else $Tuple2(bs, false)
284+ let bi = fraction((ba + (toBigInt(ah) * bf)), bd, ((bb * bd) + (toBigInt((ah + 1)) * bf)))
285+ if ((bi > bd))
286+ then if ((1 >= toInt((bi - bd))))
287+ then $Tuple2(bi, true)
288+ else $Tuple2(bi, false)
289+ else if ((1 >= toInt((bd - bi))))
290+ then $Tuple2(bi, true)
291+ else $Tuple2(bi, false)
312292 }
313293
314- let bt = {
315- let aT = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
316- let aU = size(aT)
317- let aV = $Tuple2(toBigInt(bi), false)
318- func bq (aX,aY) = if ((aY >= aU))
319- then aX
320- else bm(aX, aT[aY])
294+ let bj = {
295+ let aJ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
296+ let aK = size(aJ)
297+ let aL = $Tuple2(toBigInt(aY), false)
298+ func bg (aN,aO) = if ((aO >= aK))
299+ then aN
300+ else bc(aN, aJ[aO])
321301
322- func br (aX,aY) = if ((aY >= aU))
323- then aX
302+ func bh (aN,aO) = if ((aO >= aK))
303+ then aN
324304 else throw("List size exceeds 15")
325305
326- br(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
306+ bh(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
327307 }
328- let bs = bt._1
329- let bu = bt._2
330- if ((bu == false))
331- then throw(("get_D() not finished with " + toString(bs)))
332- else toInt(bs)
308+ let bi = bj._1
309+ let bk = bj._2
310+ if ((bk == false))
311+ then throw(("get_D() not finished with " + toString(bi)))
312+ else toInt(bi)
333313 }
334314 }
335315
336316
337-func bv (bb,bf) = be(ba(bb), bf)
317+func bl (aR,aV) = aU(aQ(aR), aV)
338318
339319
340-func bw (bx,by,bz,bA) = if (aB((bx != by)))
320+func bm (bn,bo,bp,bq) = if (ar((bn != bo)))
341321 then throw("same coin")
342- else if (aB(if ((by >= 0))
343- then (bx >= 0)
322+ else if (ar(if ((bo >= 0))
323+ then (bn >= 0)
344324 else false))
345325 then throw("below zero")
346- else if (aB(if ((ar > by))
347- then (ar > bx)
326+ else if (ar(if ((ah > bo))
327+ then (ah > bn)
348328 else false))
349329 then throw("above N_COINS")
350330 else {
351- let bf = aK()
352- let bs = be(bA, bf)
353- let bj = (bf * ar)
354- func bB (aR,ax) = {
355- let bC = aR
356- let bD = bC._1
357- let bE = bC._2
358- let bF = if ((bx == ax))
359- then bz
360- else bA[ax]
361- if (if ((ax != by))
362- then (ar > ax)
331+ let aV = aA()
332+ let bi = aU(bq, aV)
333+ let aZ = (aV * ah)
334+ func br (aH,an) = {
335+ let bs = aH
336+ let bt = bs._1
337+ let bu = bs._2
338+ let bv = if ((bn == an))
339+ then bp
340+ else bq[an]
341+ if (if ((an != bo))
342+ then (ah > an)
363343 else false)
364- then $Tuple2((bD + bF), fraction(bE, toBigInt(bs), toBigInt((bF * ar))))
365- else $Tuple2(bD, bE)
344+ then $Tuple2((bt + bv), fraction(bu, toBigInt(bi), toBigInt((bv * ah))))
345+ else $Tuple2(bt, bu)
366346 }
367347
368- let bG = {
369- let aT = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
370- let aU = size(aT)
371- let aV = $Tuple2(0, toBigInt(bs))
372- func aW (aX,aY) = if ((aY >= aU))
373- then aX
374- else bB(aX, aT[aY])
348+ let bw = {
349+ let aJ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
350+ let aK = size(aJ)
351+ let aL = $Tuple2(0, toBigInt(bi))
352+ func aM (aN,aO) = if ((aO >= aK))
353+ then aN
354+ else br(aN, aJ[aO])
375355
376- func aZ (aX,aY) = if ((aY >= aU))
377- then aX
356+ func aP (aN,aO) = if ((aO >= aK))
357+ then aN
378358 else throw("List size exceeds 15")
379359
380- aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
360+ aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
381361 }
382- let bD = bG._1
383- let bH = bG._2
384- let bE = fraction(bH, toBigInt(bs), toBigInt((bj * ar)))
385- let bI = toBigInt(((bD + (bs / bj)) - bs))
386- func bJ (aR,bK) = if ((aR._2 == true))
387- then aR
362+ let bt = bw._1
363+ let bx = bw._2
364+ let bu = fraction(bx, toBigInt(bi), toBigInt((aZ * ah)))
365+ let by = toBigInt(((bt + (bi / aZ)) - bi))
366+ func bz (aH,bA) = if ((aH._2 == true))
367+ then aH
388368 else {
389- let bL = aR._1
390- let bM = (((bL * bL) + bE) / ((az * bL) + bI))
391- if ((bM > bL))
392- then if ((1 >= toInt((bM - bL))))
393- then $Tuple2(bM, true)
394- else $Tuple2(bM, false)
395- else if ((1 >= toInt((bL - bM))))
396- then $Tuple2(bM, true)
397- else $Tuple2(bM, false)
369+ let bB = aH._1
370+ let bC = (((bB * bB) + bu) / ((ap * bB) + by))
371+ if ((bC > bB))
372+ then if ((1 >= toInt((bC - bB))))
373+ then $Tuple2(bC, true)
374+ else $Tuple2(bC, false)
375+ else if ((1 >= toInt((bB - bC))))
376+ then $Tuple2(bC, true)
377+ else $Tuple2(bC, false)
398378 }
399379
400- let bN = {
401- let aT = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
402- let aU = size(aT)
403- let aV = $Tuple2(toBigInt(bs), false)
404- func bq (aX,aY) = if ((aY >= aU))
405- then aX
406- else bJ(aX, aT[aY])
380+ let bD = {
381+ let aJ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
382+ let aK = size(aJ)
383+ let aL = $Tuple2(toBigInt(bi), false)
384+ func bg (aN,aO) = if ((aO >= aK))
385+ then aN
386+ else bz(aN, aJ[aO])
407387
408- func br (aX,aY) = if ((aY >= aU))
409- then aX
388+ func bh (aN,aO) = if ((aO >= aK))
389+ then aN
410390 else throw("List size exceeds 16")
411391
412- br(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
392+ bh(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
413393 }
414- let bM = bN._1
415- let bu = bN._2
416- if ((bu == false))
417- then throw(("getY() not finished with " + toString(bM)))
418- else toInt(bM)
394+ let bC = bD._1
395+ let bk = bD._2
396+ if ((bk == false))
397+ then throw(("getY() not finished with " + toString(bC)))
398+ else toInt(bC)
419399 }
420400
421401
422-func bO (bP,bx,bb,bs) = if (aB((bx >= 0)))
402+func bE (bF,bn,aR,bi) = if (ar((bn >= 0)))
423403 then throw("i below zero")
424- else if (aB((ar > bx)))
404+ else if (ar((ah > bn)))
425405 then throw("i above N_COINS")
426406 else {
427- let bj = (bP * ar)
428- func bB (aR,ax) = {
429- let bQ = aR
430- let bD = bQ._1
431- let bE = bQ._2
432- let bF = if (if ((bx != ax))
433- then (ar > ax)
407+ let aZ = (bF * ah)
408+ func br (aH,an) = {
409+ let bG = aH
410+ let bt = bG._1
411+ let bu = bG._2
412+ let bv = if (if ((bn != an))
413+ then (ah > an)
434414 else false)
435- then bb[ax]
415+ then aR[an]
436416 else 0
437- if (if ((ar > ax))
438- then (bx != ax)
417+ if (if ((ah > an))
418+ then (bn != an)
439419 else false)
440- then $Tuple2((bD + bF), fraction(bE, toBigInt(bs), toBigInt((bF * ar))))
441- else $Tuple2(bD, bE)
420+ then $Tuple2((bt + bv), fraction(bu, toBigInt(bi), toBigInt((bv * ah))))
421+ else $Tuple2(bt, bu)
442422 }
443423
444- let bR = {
445- let aT = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
446- let aU = size(aT)
447- let aV = $Tuple2(0, toBigInt(bs))
448- func aW (aX,aY) = if ((aY >= aU))
449- then aX
450- else bB(aX, aT[aY])
424+ let bH = {
425+ let aJ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
426+ let aK = size(aJ)
427+ let aL = $Tuple2(0, toBigInt(bi))
428+ func aM (aN,aO) = if ((aO >= aK))
429+ then aN
430+ else br(aN, aJ[aO])
451431
452- func aZ (aX,aY) = if ((aY >= aU))
453- then aX
432+ func aP (aN,aO) = if ((aO >= aK))
433+ then aN
454434 else throw("List size exceeds 15")
455435
456- aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
436+ aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
457437 }
458- let bD = bR._1
459- let bH = bR._2
460- let bE = fraction(bH, toBigInt(bs), toBigInt((bj * ar)))
461- let bI = toBigInt(((bD + (bs / bj)) - bs))
462- func bS (aR,ax) = if ((aR._2 == true))
463- then aR
438+ let bt = bH._1
439+ let bx = bH._2
440+ let bu = fraction(bx, toBigInt(bi), toBigInt((aZ * ah)))
441+ let by = toBigInt(((bt + (bi / aZ)) - bi))
442+ func bI (aH,an) = if ((aH._2 == true))
443+ then aH
464444 else {
465- let bL = aR._1
466- let bM = (((bL * bL) + bE) / ((az * bL) + bI))
467- if ((bM > bL))
468- then if ((1 >= toInt((bM - bL))))
469- then $Tuple2(bM, true)
470- else $Tuple2(bM, false)
471- else if ((1 >= toInt((bL - bM))))
472- then $Tuple2(bM, true)
473- else $Tuple2(bM, false)
445+ let bB = aH._1
446+ let bC = (((bB * bB) + bu) / ((ap * bB) + by))
447+ if ((bC > bB))
448+ then if ((1 >= toInt((bC - bB))))
449+ then $Tuple2(bC, true)
450+ else $Tuple2(bC, false)
451+ else if ((1 >= toInt((bB - bC))))
452+ then $Tuple2(bC, true)
453+ else $Tuple2(bC, false)
474454 }
475455
476- let bT = {
477- let aT = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
478- let aU = size(aT)
479- let aV = $Tuple2(toBigInt(bs), false)
480- func bq (aX,aY) = if ((aY >= aU))
481- then aX
482- else bS(aX, aT[aY])
456+ let bJ = {
457+ let aJ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
458+ let aK = size(aJ)
459+ let aL = $Tuple2(toBigInt(bi), false)
460+ func bg (aN,aO) = if ((aO >= aK))
461+ then aN
462+ else bI(aN, aJ[aO])
483463
484- func br (aX,aY) = if ((aY >= aU))
485- then aX
464+ func bh (aN,aO) = if ((aO >= aK))
465+ then aN
486466 else throw("List size exceeds 16")
487467
488- br(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
468+ bh(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
489469 }
490- let bM = bT._1
491- let bu = bT._2
492- if ((bu == false))
493- then throw(("get_y_D() not finished with " + toString(bM)))
494- else toInt(bM)
470+ let bC = bJ._1
471+ let bk = bJ._2
472+ if ((bk == false))
473+ then throw(("get_y_D() not finished with " + toString(bC)))
474+ else toInt(bC)
495475 }
496476
497477
498-func bU (bb,bV,ax,bW) = {
499- let bX = aD(bW)
500- let bf = aK()
501- let bY = ((fraction(ak, bX, aj, CEILING) * ar) / (4 * (ar - 1)))
502- let bZ = ai
503- let ca = be(bb, bf)
504- let cb = (ca - fraction(bV, ca, bZ))
505- let cc = bO(bf, ax, bb, cb)
506- let cd = (bb[ax] - cc)
507- func ce (aR,cf) = {
508- let cg = aR
509- let ch = cg._1
510- let ci = cg._2
511- let cj = if ((ci == ax))
512- then (fraction(cf, cb, ca) - cc)
513- else (cf - fraction(cf, cb, ca))
514- $Tuple2((ch :+ (cf - fraction(bY, cj, aj))), (ci + 1))
478+func bK (aR,bL,an,bM) = {
479+ let bN = at(bM)
480+ let aV = aA()
481+ let bO = ((fraction(aa, bN, Z, CEILING) * ah) / (4 * (ah - 1)))
482+ let bP = Y
483+ let bQ = aU(aR, aV)
484+ let bR = (bQ - fraction(bL, bQ, bP))
485+ let bS = bE(aV, an, aR, bR)
486+ let bT = (aR[an] - bS)
487+ func bU (aH,bV) = {
488+ let bW = aH
489+ let bX = bW._1
490+ let bY = bW._2
491+ let bZ = if ((bY == an))
492+ then (fraction(bV, bR, bQ) - bS)
493+ else (bV - fraction(bV, bR, bQ))
494+ $Tuple2((bX :+ (bV - fraction(bO, bZ, Z))), (bY + 1))
515495 }
516496
517- let ck = {
518- let aT = bb
519- let aU = size(aT)
520- let aV = $Tuple2(nil, 0)
521- func aW (aX,aY) = if ((aY >= aU))
522- then aX
523- else ce(aX, aT[aY])
497+ let ca = {
498+ let aJ = aR
499+ let aK = size(aJ)
500+ let aL = $Tuple2(nil, 0)
501+ func aM (aN,aO) = if ((aO >= aK))
502+ then aN
503+ else bU(aN, aJ[aO])
524504
525- func aZ (aX,aY) = if ((aY >= aU))
526- then aX
505+ func aP (aN,aO) = if ((aO >= aK))
506+ then aN
527507 else throw("List size exceeds 15")
528508
529- aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
509+ aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
530510 }
531- let ch = ck._1
532- let ci = ck._2
533- let cl = ch[ax]
534- let cm = ((cl - bO(bf, ax, ch, cb)) - 1)
535- $Tuple2(cm, (cd - cm))
511+ let bX = ca._1
512+ let bY = ca._2
513+ let cb = bX[an]
514+ let cc = ((cb - bE(aV, an, bX, bR)) - 1)
515+ $Tuple2(cc, (bT - cc))
536516 }
537517
538518
539-func cn (aS) = {
540- let N = aS
541- if ($isInstanceOf(N, "ByteVector"))
519+func cd (aI) = {
520+ let H = aI
521+ if ($isInstanceOf(H, "ByteVector"))
542522 then {
543- let co = N
544- toBase58String(co)
523+ let ce = H
524+ toBase58String(ce)
545525 }
546- else if ($isInstanceOf(N, "Unit"))
526+ else if ($isInstanceOf(H, "Unit"))
547527 then {
548- let cp = N
528+ let cf = H
549529 "WAVES"
550530 }
551531 else throw("Match error")
552532 }
553533
554534
555-func cq (cr,aS) = if (cr)
556- then $Tuple2("lockNeutrino", W)
557- else $Tuple2("unlockNeutrino", W)
535+func cg (ch,aI) = if (ch)
536+ then $Tuple2("lockNeutrino", Q)
537+ else $Tuple2("unlockNeutrino", Q)
558538
559539
560-func cs (cr,ct,aS) = if (cr)
540+func ci (ch,cj,aI) = if (ch)
561541 then {
562- let cu = cq(cr, aS)
563- let cv = cu._1
564- let cw = cu._2
565- $Tuple4(cv, cw, nil, [AttachedPayment(aS, ct)])
542+ let ck = cg(ch, aI)
543+ let cl = ck._1
544+ let cm = ck._2
545+ $Tuple4(cl, cm, nil, [AttachedPayment(aI, cj)])
566546 }
567547 else {
568- let cx = cq(cr, aS)
569- let cv = cx._1
570- let cw = cx._2
571- $Tuple4(cv, cw, [ct, toBase58String(aS)], nil)
548+ let cn = cg(ch, aI)
549+ let cl = cn._1
550+ let cm = cn._2
551+ $Tuple4(cl, cm, [cj, toBase58String(aI)], nil)
572552 }
573553
574554
575-func cr (ct,cy) = if (containsElement(ab, cy))
555+func ch (cj,co) = if (containsElement(V, co))
576556 then {
577- let cz = cs(true, ct, fromBase58String(cy))
578- let cv = cz._1
579- let cA = cz._2
580- let cB = cz._3
581- let cC = cz._4
582- invoke(cA, cv, cB, cC)
557+ let cp = ci(true, cj, fromBase58String(co))
558+ let cl = cp._1
559+ let cq = cp._2
560+ let cr = cp._3
561+ let cs = cp._4
562+ invoke(cq, cl, cr, cs)
583563 }
584564 else 0
585565
586566
587-func cD (ct,cy) = if (containsElement(ab, cy))
567+func ct (cj,co) = if (containsElement(V, co))
588568 then {
589- let cE = cs(false, ct, fromBase58String(cy))
590- let cv = cE._1
591- let cA = cE._2
592- let cB = cE._3
593- let cC = cE._4
594- invoke(cA, cv, cB, cC)
569+ let cu = ci(false, cj, fromBase58String(co))
570+ let cl = cu._1
571+ let cq = cu._2
572+ let cr = cu._3
573+ let cs = cu._4
574+ invoke(cq, cl, cr, cs)
595575 }
596576 else 0
597577
598578
599-func cF (aS) = {
600- let cG = {
601- let N = aS
602- if ($isInstanceOf(N, "ByteVector"))
579+func cv (aI) = {
580+ let cw = {
581+ let H = aI
582+ if ($isInstanceOf(H, "ByteVector"))
603583 then {
604- let cH = N
605- if ((cH == aa))
606- then getInteger(W, ((("rpd_balance_" + toBase58String(cH)) + "_") + toString(this)))
584+ let cx = H
585+ if ((cx == U))
586+ then getInteger(Q, ((("rpd_balance_" + toBase58String(cx)) + "_") + toString(this)))
607587 else 0
608588 }
609- else if ($isInstanceOf(N, "Unit"))
589+ else if ($isInstanceOf(H, "Unit"))
610590 then 0
611591 else throw("Match error")
612592 }
613- let N = cG
614- if ($isInstanceOf(N, "Int"))
593+ let H = cw
594+ if ($isInstanceOf(H, "Int"))
615595 then {
616- let ax = N
617- ax
596+ let an = H
597+ an
618598 }
619599 else 0
620600 }
621601
622602
623-func cI () = {
624- let cJ = aP()
625- func cK (aR,aS) = {
626- let cL = aR
627- let cM = cL._1
628- let ax = cL._2
629- if (cM)
630- then $Tuple2(cM, ax)
603+func cy () = {
604+ let cz = aF()
605+ func cA (aH,aI) = {
606+ let cB = aH
607+ let cC = cB._1
608+ let an = cB._2
609+ if (cC)
610+ then $Tuple2(cC, an)
631611 else {
632- let cN = (assetBalance(this, fromBase58String(aS)) + cF(fromBase58String(aS)))
633- if ((cJ[ax] > cN))
634- then $Tuple2(true, ax)
635- else $Tuple2(false, (ax + 1))
612+ let cD = (assetBalance(this, fromBase58String(aI)) + cv(fromBase58String(aI)))
613+ if ((cz[an] > cD))
614+ then $Tuple2(true, an)
615+ else $Tuple2(false, (an + 1))
636616 }
637617 }
638618
639- let aT = aq
640- let aU = size(aT)
641- let aV = $Tuple2(false, 0)
642- func aW (aX,aY) = if ((aY >= aU))
643- then aX
644- else cK(aX, aT[aY])
619+ let aJ = ag
620+ let aK = size(aJ)
621+ let aL = $Tuple2(false, 0)
622+ func aM (aN,aO) = if ((aO >= aK))
623+ then aN
624+ else cA(aN, aJ[aO])
645625
646- func aZ (aX,aY) = if ((aY >= aU))
647- then aX
626+ func aP (aN,aO) = if ((aO >= aK))
627+ then aN
648628 else throw("List size exceeds 15")
649629
650- aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
630+ aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
651631 }
652632
653633
654-func cO (ax) = as(("Suspicious state with asset: " + aq[ax]))
634+func cE (an) = ai(("Suspicious state with asset: " + ag[an]))
655635
656636
657-func cP (bW,cC) = {
658- func cQ (aR,cR) = (aR :+ ScriptTransfer(bW, cR.amount, cR.assetId))
637+func cF (bM,cs) = {
638+ func cG (aH,cH) = (aH :+ ScriptTransfer(bM, cH.amount, cH.assetId))
659639
660- let aT = cC
661- let aU = size(aT)
662- let aV = nil
663- func aW (aX,aY) = if ((aY >= aU))
664- then aX
665- else cQ(aX, aT[aY])
640+ let aJ = cs
641+ let aK = size(aJ)
642+ let aL = nil
643+ func aM (aN,aO) = if ((aO >= aK))
644+ then aN
645+ else cG(aN, aJ[aO])
666646
667- func aZ (aX,aY) = if ((aY >= aU))
668- then aX
647+ func aP (aN,aO) = if ((aO >= aK))
648+ then aN
669649 else throw("List size exceeds 15")
670650
671- aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
651+ aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
672652 }
673653
674654
675-func cS (cT) = {
676- let cU = valueOrErrorMessage(getInteger(this, o), "No dAppThresholdCoef key")
677- let cV = 10000
678- let cW = max(cT)
679- let cX = min(cT)
680- let cY = fraction(cW, cV, cX)
681- if ((cY > (cU * cV)))
655+func cI (cJ) = {
656+ let cK = valueOrErrorMessage(getInteger(this, o), "No dAppThresholdCoef key")
657+ let cL = 10000
658+ let cM = max(cJ)
659+ let cN = min(cJ)
660+ let cO = fraction(cM, cL, cN)
661+ if ((cO > (cK * cL)))
682662 then throw("New balance in assets of the DApp is less than threshold")
683663 else false
684664 }
685665
686666
687-func cZ (aq) = {
688- let da = split(aq, ",")
689- func db (dc,aS) = {
690- let dd = valueOrErrorMessage(fromBase58String(aS), ("fromBase58String: " + aS))
691- let de = valueOrErrorMessage(assetInfo(dd), ("assetInfo: " + aS)).decimals
692- if ((de != d))
667+func cP (ag) = {
668+ let cQ = split(ag, ",")
669+ func cR (cS,aI) = {
670+ let cT = valueOrErrorMessage(fromBase58String(aI), ("fromBase58String: " + aI))
671+ let cU = valueOrErrorMessage(assetInfo(cT), ("assetInfo: " + aI)).decimals
672+ if ((cU != d))
693673 then throw("wrong decimals")
694674 else false
695675 }
696676
697- let aT = da
698- let aU = size(aT)
699- let aV = false
700- func aW (aX,aY) = if ((aY >= aU))
701- then aX
702- else db(aX, aT[aY])
677+ let aJ = cQ
678+ let aK = size(aJ)
679+ let aL = false
680+ func aM (aN,aO) = if ((aO >= aK))
681+ then aN
682+ else cR(aN, aJ[aO])
703683
704- func aZ (aX,aY) = if ((aY >= aU))
705- then aX
684+ func aP (aN,aO) = if ((aO >= aK))
685+ then aN
706686 else throw("List size exceeds 15")
707687
708- aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
688+ aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
709689 }
710690
711691
712-@Callable(df)
713-func D (bb,bf) = {
714- let bs = bh(bb, bf)
715- $Tuple2([IntegerEntry("D", bs)], bs)
692+@Callable(cV)
693+func D (aR,aV) = {
694+ let bi = aX(aR, aV)
695+ $Tuple2([IntegerEntry("D", bi)], bi)
716696 }
717697
718698
719699
720-@Callable(df)
721-func init (aq,aK,dg,dh) = if (!(isDataStorageUntouched(this)))
700+@Callable(cV)
701+func init (ag,aA,cW) = if (!(isDataStorageUntouched(this)))
722702 then throw("Already initialized")
723- else if ((0 >= aK))
703+ else if ((0 >= aA))
724704 then throw("Amp must be must > 0")
725- else if ((0 >= dg))
705+ else if ((0 >= cW))
726706 then throw("dApp Threshold Coef must be > 0")
727707 else {
728- let di = "s_Multi_USD"
729- let dj = ("ShareToken of SwopFi protocol for MultiStable USD pool at address " + toString(this))
730- let dk = Issue(di, dj, 0, 6, true)
731- let dl = calculateAssetId(dk)
732- if (cZ(aq))
708+ let cX = "s_Multi_USD"
709+ let cY = ("ShareToken of SwopFi protocol for MultiStable USD pool at address " + toString(this))
710+ let cZ = Issue(cX, cY, 0, 6, true)
711+ let da = calculateAssetId(cZ)
712+ if (cP(ag))
733713 then throw()
734- else {
735- let dm = [StringEntry(g, f), StringEntry(h, aq), IntegerEntry("initial_A", aK), IntegerEntry("future_A", aK), IntegerEntry(n, getIntegerValue(K, "base_fee_flat")), StringEntry(l, toBase58String(dl)), IntegerEntry(m, 0), IntegerEntry(o, dg), BooleanEntry(j, true), dk]
736- if (dh)
737- then (dm ++ [BooleanEntry(t, dh), IntegerEntry(u, (ad + (af * ae)))])
738- else dm
739- }
714+ else [StringEntry(g, f), StringEntry(h, ag), IntegerEntry("initial_A", aA), IntegerEntry("future_A", aA), IntegerEntry(n, getIntegerValue(E, "base_fee_flat")), StringEntry(l, toBase58String(da)), IntegerEntry(m, 0), IntegerEntry(o, cW), BooleanEntry(j, true), cZ]
740715 }
741716
742717
743718
744-@Callable(df)
745-func addLiquidity (dn,do) = valueOrElse(av(), {
746- let bf = aK()
747- let bb = aP()
748- let ca = if ((ai == 0))
719+@Callable(cV)
720+func addLiquidity (db,dc) = valueOrElse(al(), {
721+ let aV = aA()
722+ let aR = aF()
723+ let bQ = if ((Y == 0))
749724 then 0
750- else bv(bb, bf)
751- let cC = df.payments
752- let dp = size(cC)
753- func dq (dr) = if ((dp > ar))
754- then throw(("payments size > " + toString(ar)))
755- else if ((1 > dp))
725+ else bl(aR, aV)
726+ let cs = cV.payments
727+ let dd = size(cs)
728+ func de (df) = if ((dd > ah))
729+ then throw(("payments size > " + toString(ah)))
730+ else if ((1 > dd))
756731 then throw("payments size < 1")
757- else if (if ((ai == 0))
758- then (ar != dp)
732+ else if (if ((Y == 0))
733+ then (ah != dd)
759734 else false)
760735 then throw("initial deposit requires all coins")
761736 else {
762- func ds (aR,cR) = if (containsElement(aq, cn(cR.assetId)))
737+ func dg (aH,cH) = if (containsElement(ag, cd(cH.assetId)))
763738 then true
764739 else throw("Invalid asset in payment")
765740
766- let aT = cC
767- let aU = size(aT)
768- let aV = false
769- func aW (aX,aY) = if ((aY >= aU))
770- then aX
771- else ds(aX, aT[aY])
741+ let aJ = cs
742+ let aK = size(aJ)
743+ let aL = false
744+ func aM (aN,aO) = if ((aO >= aK))
745+ then aN
746+ else dg(aN, aJ[aO])
772747
773- func aZ (aX,aY) = if ((aY >= aU))
774- then aX
748+ func aP (aN,aO) = if ((aO >= aK))
749+ then aN
775750 else throw("List size exceeds 15")
776751
777- aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
752+ aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
778753 }
779754
780- if (!(dq(dp)))
755+ if (!(de(dd)))
781756 then throw()
782757 else {
783- let cM = cI()
784- if (cM._1)
785- then (cO(cM._2) ++ cP(df.caller, cC))
758+ let cC = cy()
759+ if (cC._1)
760+ then (cE(cC._2) ++ cF(cV.caller, cs))
786761 else {
787- func cQ (aR,aS) = {
788- let dt = aR
789- let cT = dt._1
790- let ax = dt._2
791- let du = dt._3
792- if (if ((dp > du))
793- then (cn(cC[du].assetId) == aS)
762+ func cG (aH,aI) = {
763+ let dh = aH
764+ let cJ = dh._1
765+ let an = dh._2
766+ let di = dh._3
767+ if (if ((dd > di))
768+ then (cd(cs[di].assetId) == aI)
794769 else false)
795- then $Tuple3((cT :+ (bb[ax] + cC[du].amount)), (ax + 1), (du + 1))
796- else $Tuple3((cT :+ bb[ax]), (ax + 1), du)
770+ then $Tuple3((cJ :+ (aR[an] + cs[di].amount)), (an + 1), (di + 1))
771+ else $Tuple3((cJ :+ aR[an]), (an + 1), di)
797772 }
798773
799- let dv = {
800- let aT = aq
801- let aU = size(aT)
802- let aV = $Tuple3(nil, 0, 0)
803- func aW (aX,aY) = if ((aY >= aU))
804- then aX
805- else cQ(aX, aT[aY])
774+ let dj = {
775+ let aJ = ag
776+ let aK = size(aJ)
777+ let aL = $Tuple3(nil, 0, 0)
778+ func aM (aN,aO) = if ((aO >= aK))
779+ then aN
780+ else cG(aN, aJ[aO])
806781
807- func aZ (aX,aY) = if ((aY >= aU))
808- then aX
782+ func aP (aN,aO) = if ((aO >= aK))
783+ then aN
809784 else throw("List size exceeds 15")
810785
811- aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
786+ aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
812787 }
813- let cT = dv._1
814- let dw = dv._2
815- let dx = dv._3
816- if ((dp > dx))
788+ let cJ = dj._1
789+ let dk = dj._2
790+ let dl = dj._3
791+ if ((dd > dl))
817792 then throw("Incorect payments order")
818- else if (cS(cT))
793+ else if (cI(cJ))
819794 then throw()
820795 else {
821- let cb = bv(cT, bf)
822- if (aB((cb > ca)))
796+ let bR = bl(cJ, aV)
797+ if (ar((bR > bQ)))
823798 then throw("D1 > D0")
824799 else {
825- let bX = aD(df.caller)
826- func dy (aR,dz) = {
827- let dA = aR
828- let dB = dA._1
829- let dC = dA._2
830- let ax = dA._3
831- if ((ai > 0))
800+ let bN = at(cV.caller)
801+ func dm (aH,dn) = {
802+ let do = aH
803+ let dp = do._1
804+ let dq = do._2
805+ let an = do._3
806+ if ((Y > 0))
832807 then {
833- let bY = ((fraction(ak, bX, aj, CEILING) * ar) / (4 * (ar - 1)))
834- let dD = {
835- let dE = fraction(cb, bb[ax], ca)
836- let dF = if ((dE > dz))
837- then (dE - dz)
838- else (dz - dE)
839- fraction(bY, dF, aj)
808+ let bO = ((fraction(aa, bN, Z, CEILING) * ah) / (4 * (ah - 1)))
809+ let dr = {
810+ let ds = fraction(bR, aR[an], bQ)
811+ let dt = if ((ds > dn))
812+ then (ds - dn)
813+ else (dn - ds)
814+ fraction(bO, dt, Z)
840815 }
841- let dG = fraction(dD, al, aj)
842- let dH = (dz - dD)
843- let dI = (dz - dD)
844- let dJ = (dz - bb[ax])
845- let dK = (dD - dG)
846- let dL = if ((dJ > 0))
847- then cr((dJ - dD), aq[ax])
848- else cD(dD, aq[ax])
849- if ((dL == dL))
816+ let du = fraction(dr, ab, Z)
817+ let dv = (dn - dr)
818+ let dw = (dn - dr)
819+ let dx = (dn - aR[an])
820+ let dy = (dr - du)
821+ let dz = if ((dx > 0))
822+ then ch((dx - dr), ag[an])
823+ else ct(dr, ag[an])
824+ if ((dz == dz))
850825 then {
851- let dM = if ((dK > 0))
852- then invoke(Z, "airDrop", nil, [AttachedPayment(fromBase58String(aq[ax]), dK)])
826+ let dA = if ((dy > 0))
827+ then invoke(T, "airDrop", nil, [AttachedPayment(fromBase58String(ag[an]), dy)])
853828 else 0
854- if ((dM == dM))
855- then $Tuple3((dB :+ dI), (dC ++ [ScriptTransfer(U, dG, fromBase58String(aq[ax])), IntegerEntry((aq[ax] + i), dH)]), (ax + 1))
829+ if ((dA == dA))
830+ then $Tuple3((dp :+ dw), (dq ++ [ScriptTransfer(O, du, fromBase58String(ag[an])), IntegerEntry((ag[an] + i), dv)]), (an + 1))
856831 else throw("Strict value is not equal to itself.")
857832 }
858833 else throw("Strict value is not equal to itself.")
859834 }
860835 else {
861- let dL = cr(dz, aq[ax])
862- if ((dL == dL))
863- then $Tuple3((dB :+ dz), (dC :+ IntegerEntry((aq[ax] + i), dz)), (ax + 1))
836+ let dz = ch(dn, ag[an])
837+ if ((dz == dz))
838+ then $Tuple3((dp :+ dn), (dq :+ IntegerEntry((ag[an] + i), dn)), (an + 1))
864839 else throw("Strict value is not equal to itself.")
865840 }
866841 }
867842
868- let dN = {
869- let aT = cT
870- let aU = size(aT)
871- let aV = $Tuple3(nil, nil, 0)
872- func bq (aX,aY) = if ((aY >= aU))
873- then aX
874- else dy(aX, aT[aY])
843+ let dB = {
844+ let aJ = cJ
845+ let aK = size(aJ)
846+ let aL = $Tuple3(nil, nil, 0)
847+ func bg (aN,aO) = if ((aO >= aK))
848+ then aN
849+ else dm(aN, aJ[aO])
875850
876- func br (aX,aY) = if ((aY >= aU))
877- then aX
851+ func bh (aN,aO) = if ((aO >= aK))
852+ then aN
878853 else throw("List size exceeds 15")
879854
880- br(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
855+ bh(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
881856 }
882- let dB = dN._1
883- let dC = dN._2
884- let dO = bv(dB, bf)
885- let dP = if ((ai == 0))
886- then cb
887- else fraction(ai, (dO - ca), ca)
888- if (aB((dP >= dn)))
857+ let dp = dB._1
858+ let dq = dB._2
859+ let dC = bl(dp, aV)
860+ let dD = if ((Y == 0))
861+ then bR
862+ else fraction(Y, (dC - bQ), bQ)
863+ if (ar((dD >= db)))
889864 then throw("Slippage screwed you")
890- else if (do)
865+ else if (dc)
891866 then {
892- let dQ = invoke(this, "reissueShare", [dP], nil)
893- if ((dQ == dQ))
867+ let dE = invoke(this, "reissueShare", [dD], nil)
868+ if ((dE == dE))
894869 then {
895- let dR = invoke(Y, "lockShareTokens", [toString(this)], [AttachedPayment(ah, dP)])
896- if ((dR == dR))
897- then (dC :+ IntegerEntry(m, (ai + dP)))
870+ let dF = invoke(S, "lockShareTokens", [toString(this)], [AttachedPayment(X, dD)])
871+ if ((dF == dF))
872+ then (dq :+ IntegerEntry(m, (Y + dD)))
898873 else throw("Strict value is not equal to itself.")
899874 }
900875 else throw("Strict value is not equal to itself.")
901876 }
902- else (dC ++ [Reissue(ah, dP, true), ScriptTransfer(df.caller, dP, ah), IntegerEntry(m, (ai + dP))])
877+ else (dq ++ [Reissue(X, dD, true), ScriptTransfer(cV.caller, dD, X), IntegerEntry(m, (Y + dD))])
903878 }
904879 }
905880 }
906881 }
907882 })
908883
909884
910885
911-@Callable(df)
912-func calcMintAmount (cT,aF) = {
913- let bf = aK()
914- let bb = aP()
915- let cb = bv(cT, bf)
916- if ((ai == 0))
917- then $Tuple2(nil, cb)
886+@Callable(cV)
887+func calcMintAmount (cJ,av) = {
888+ let aV = aA()
889+ let aR = aF()
890+ let bR = bl(cJ, aV)
891+ if ((Y == 0))
892+ then $Tuple2(nil, bR)
918893 else {
919- let ca = bv(bb, bf)
920- let bX = aD(aF)
921- func dS (aR,dz) = {
922- let dT = aR
923- let dB = dT._1
924- let ax = dT._2
925- let bY = ((fraction(ak, bX, aj, CEILING) * ar) / (4 * (ar - 1)))
926- let dD = {
927- let dE = fraction(cb, bb[ax], ca)
928- let dF = if ((dE > dz))
929- then (dE - dz)
930- else (dz - dE)
931- fraction(bY, dF, aj)
894+ let bQ = bl(aR, aV)
895+ let bN = at(av)
896+ func dG (aH,dn) = {
897+ let dH = aH
898+ let dp = dH._1
899+ let an = dH._2
900+ let bO = ((fraction(aa, bN, Z, CEILING) * ah) / (4 * (ah - 1)))
901+ let dr = {
902+ let ds = fraction(bR, aR[an], bQ)
903+ let dt = if ((ds > dn))
904+ then (ds - dn)
905+ else (dn - ds)
906+ fraction(bO, dt, Z)
932907 }
933- let dI = (dz - dD)
934- $Tuple2((dB :+ dI), (ax + 1))
908+ let dw = (dn - dr)
909+ $Tuple2((dp :+ dw), (an + 1))
935910 }
936911
937- let dU = {
938- let aT = cT
939- let aU = size(aT)
940- let aV = $Tuple2(nil, 0)
941- func aW (aX,aY) = if ((aY >= aU))
942- then aX
943- else dS(aX, aT[aY])
912+ let dI = {
913+ let aJ = cJ
914+ let aK = size(aJ)
915+ let aL = $Tuple2(nil, 0)
916+ func aM (aN,aO) = if ((aO >= aK))
917+ then aN
918+ else dG(aN, aJ[aO])
944919
945- func aZ (aX,aY) = if ((aY >= aU))
946- then aX
920+ func aP (aN,aO) = if ((aO >= aK))
921+ then aN
947922 else throw("List size exceeds 15")
948923
949- aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
924+ aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
950925 }
951- let dB = dU._1
952- let dw = dU._2
953- let dO = bv(dB, bf)
954- let dV = fraction(ai, (dO - ca), ca)
955- $Tuple2(nil, dV)
926+ let dp = dI._1
927+ let dk = dI._2
928+ let dC = bl(dp, aV)
929+ let dJ = fraction(Y, (dC - bQ), bQ)
930+ $Tuple2(nil, dJ)
956931 }
957932 }
958933
959934
960935
961-@Callable(df)
962-func reissueShare (ct) = valueOrElse(ay(df), [Reissue(ah, ct, true)])
936+@Callable(cV)
937+func reissueShare (cj) = valueOrElse(ao(cV), [Reissue(X, cj, true)])
963938
964939
965940
966-@Callable(df)
967-func getDy (dW,dX,dY,dZ) = {
968- let bb = aP()
969- let ea = valueOrErrorMessage(indexOf(aq, dW), "unknown token in")
970- let eb = valueOrErrorMessage(indexOf(aq, dX), "unknown token out")
971- let bz = (bb[ea] + dY)
972- let bM = bw(ea, eb, bz, bb)
973- let cm = ((bb[eb] - bM) - 1)
974- let bX = aD(Address(fromBase58String(dZ)))
975- let bY = fraction(fraction(ak, bX, aj, CEILING), cm, aj)
976- $Tuple2(nil, $Tuple2((cm - bY), bY))
941+@Callable(cV)
942+func getDy (dK,dL,dM,dN) = {
943+ let aR = aF()
944+ let dO = valueOrErrorMessage(indexOf(ag, dK), "unknown token in")
945+ let dP = valueOrErrorMessage(indexOf(ag, dL), "unknown token out")
946+ let bp = (aR[dO] + dM)
947+ let bC = bm(dO, dP, bp, aR)
948+ let cc = ((aR[dP] - bC) - 1)
949+ let bN = at(Address(fromBase58String(dN)))
950+ let bO = fraction(fraction(aa, bN, Z, CEILING), cc, Z)
951+ $Tuple2(nil, $Tuple2((cc - bO), bO))
977952 }
978953
979954
980955
981-@Callable(df)
982-func exchange (ec,ed) = valueOrElse(av(), if ((size(df.payments) != 1))
956+@Callable(cV)
957+func exchange (dQ,dR) = valueOrElse(al(), if ((size(cV.payments) != 1))
983958 then throw("size(payments) != 1")
984959 else {
985- let cM = cI()
986- if (cM._1)
987- then (cO(cM._2) ++ cP(df.caller, df.payments))
960+ let cC = cy()
961+ if (cC._1)
962+ then (cE(cC._2) ++ cF(cV.caller, cV.payments))
988963 else {
989- let cR = df.payments[0]
990- let ee = cn(cR.assetId)
991- let ef = fromBase58String(ec)
992- let dY = cR.amount
993- let ea = valueOrErrorMessage(indexOf(aq, ee), "unknown token in")
994- let eb = valueOrErrorMessage(indexOf(aq, ec), "unknown token out")
995- let bb = aP()
996- let bz = (bb[ea] + dY)
997- let bM = bw(ea, eb, bz, bb)
998- let eg = ((bb[eb] - bM) - 1)
999- let bX = aD(df.caller)
1000- let bY = fraction(eg, fraction(ak, bX, aj, CEILING), aj)
1001- let cm = (eg - bY)
1002- let dG = fraction(bY, al, aj)
1003- if (aB((cm >= ed)))
964+ let cH = cV.payments[0]
965+ let dS = cd(cH.assetId)
966+ let dT = fromBase58String(dQ)
967+ let dM = cH.amount
968+ let dO = valueOrErrorMessage(indexOf(ag, dS), "unknown token in")
969+ let dP = valueOrErrorMessage(indexOf(ag, dQ), "unknown token out")
970+ let aR = aF()
971+ let bp = (aR[dO] + dM)
972+ let bC = bm(dO, dP, bp, aR)
973+ let dU = ((aR[dP] - bC) - 1)
974+ let bN = at(cV.originCaller)
975+ let bO = fraction(dU, fraction(aa, bN, Z, CEILING), Z)
976+ let cc = (dU - bO)
977+ let du = fraction(bO, ab, Z)
978+ if (ar((cc >= dR)))
1004979 then throw("Exchange resulted in fewer coins than expected")
1005980 else {
1006- func eh (aR,ei) = {
1007- let ej = aR
1008- let cT = ej._1
1009- let ax = ej._2
1010- if ((ax == ea))
1011- then $Tuple2((cT :+ (ei + dY)), (ax + 1))
1012- else if ((ax == eb))
1013- then $Tuple2((cT :+ (ei - eg)), (ax + 1))
1014- else $Tuple2((cT :+ ei), (ax + 1))
981+ func dV (aH,dW) = {
982+ let dX = aH
983+ let cJ = dX._1
984+ let an = dX._2
985+ if ((an == dO))
986+ then $Tuple2((cJ :+ (dW + dM)), (an + 1))
987+ else if ((an == dP))
988+ then $Tuple2((cJ :+ (dW - dU)), (an + 1))
989+ else $Tuple2((cJ :+ dW), (an + 1))
1015990 }
1016991
1017- let ek = {
1018- let aT = bb
1019- let aU = size(aT)
1020- let aV = $Tuple2(nil, 0)
1021- func aW (aX,aY) = if ((aY >= aU))
1022- then aX
1023- else eh(aX, aT[aY])
992+ let dY = {
993+ let aJ = aR
994+ let aK = size(aJ)
995+ let aL = $Tuple2(nil, 0)
996+ func aM (aN,aO) = if ((aO >= aK))
997+ then aN
998+ else dV(aN, aJ[aO])
1024999
1025- func aZ (aX,aY) = if ((aY >= aU))
1026- then aX
1000+ func aP (aN,aO) = if ((aO >= aK))
1001+ then aN
10271002 else throw("List size exceeds 15")
10281003
1029- aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
1004+ aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
10301005 }
1031- let cT = ek._1
1032- let ax = ek._2
1033- if (cS(cT))
1006+ let cJ = dY._1
1007+ let an = dY._2
1008+ if (cI(cJ))
10341009 then throw()
10351010 else {
1036- let dR = cr(cR.amount, cn(cR.assetId))
1037- if ((dR == dR))
1011+ let dF = ch(cH.amount, cd(cH.assetId))
1012+ if ((dF == dF))
10381013 then {
1039- let el = cD(eg, ec)
1040- if ((el == el))
1014+ let dZ = ct(dU, dQ)
1015+ if ((dZ == dZ))
10411016 then {
1042- let dK = (bY - dG)
1043- let dM = if ((dK > 0))
1044- then invoke(Z, "airDrop", nil, [AttachedPayment(ef, dK)])
1017+ let dy = (bO - du)
1018+ let dA = if ((dy > 0))
1019+ then invoke(T, "airDrop", nil, [AttachedPayment(dT, dy)])
10451020 else 0
1046- if ((dM == dM))
1047- then $Tuple2([IntegerEntry((ee + i), bz), IntegerEntry((ec + i), (bb[eb] - eg)), ScriptTransfer(df.caller, cm, ef), ScriptTransfer(U, dG, ef)], [cm, ef])
1021+ if ((dA == dA))
1022+ then $Tuple2([IntegerEntry((dS + i), bp), IntegerEntry((dQ + i), (aR[dP] - dU)), ScriptTransfer(cV.caller, cc, dT), ScriptTransfer(O, du, dT)], [cc, dT])
10481023 else throw("Strict value is not equal to itself.")
10491024 }
10501025 else throw("Strict value is not equal to itself.")
10511026 }
10521027 else throw("Strict value is not equal to itself.")
10531028 }
10541029 }
10551030 }
10561031 })
10571032
10581033
10591034
1060-@Callable(df)
1061-func withdraw (em) = valueOrElse(av(), if ((size(df.payments) != 1))
1035+@Callable(cV)
1036+func withdraw (ea) = valueOrElse(al(), if ((size(cV.payments) != 1))
10621037 then throw("size(payments) != 1")
10631038 else {
1064- let en = df.payments[0].amount
1065- let eo = df.payments[0].assetId
1066- if ((ah != eo))
1039+ let eb = cV.payments[0].amount
1040+ let ec = cV.payments[0].assetId
1041+ if ((X != ec))
10671042 then throw("unknown payment token")
10681043 else {
1069- let cM = cI()
1070- if (cM._1)
1071- then (cO(cM._2) ++ cP(df.originCaller, df.payments))
1044+ let cC = cy()
1045+ if (cC._1)
1046+ then (cE(cC._2) ++ cF(cV.originCaller, cV.payments))
10721047 else {
1073- func dy (aR,ep) = {
1074- let eq = aR
1075- let dC = eq._1
1076- let ax = eq._2
1077- let er = fraction(ep, en, ai)
1078- if (aB((er >= em[ax])))
1048+ func dm (aH,ed) = {
1049+ let ee = aH
1050+ let dq = ee._1
1051+ let an = ee._2
1052+ let ef = fraction(ed, eb, Y)
1053+ if (ar((ef >= ea[an])))
10791054 then throw("Withdrawal resulted in fewer coins than expected")
10801055 else {
1081- let el = cD(er, aq[ax])
1082- if ((el == el))
1083- then $Tuple2((dC ++ [IntegerEntry((aq[ax] + i), (ep - er)), ScriptTransfer(df.originCaller, er, fromBase58String(aq[ax]))]), (ax + 1))
1056+ let dZ = ct(ef, ag[an])
1057+ if ((dZ == dZ))
1058+ then $Tuple2((dq ++ [IntegerEntry((ag[an] + i), (ed - ef)), ScriptTransfer(cV.originCaller, ef, fromBase58String(ag[an]))]), (an + 1))
10841059 else throw("Strict value is not equal to itself.")
10851060 }
10861061 }
10871062
1088- let es = {
1089- let aT = aP()
1090- let aU = size(aT)
1091- let aV = $Tuple2(nil, 0)
1092- func aW (aX,aY) = if ((aY >= aU))
1093- then aX
1094- else dy(aX, aT[aY])
1063+ let eg = {
1064+ let aJ = aF()
1065+ let aK = size(aJ)
1066+ let aL = $Tuple2(nil, 0)
1067+ func aM (aN,aO) = if ((aO >= aK))
1068+ then aN
1069+ else dm(aN, aJ[aO])
10951070
1096- func aZ (aX,aY) = if ((aY >= aU))
1097- then aX
1071+ func aP (aN,aO) = if ((aO >= aK))
1072+ then aN
10981073 else throw("List size exceeds 15")
10991074
1100- aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
1075+ aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
11011076 }
1102- let dC = es._1
1103- let ax = es._2
1104- (dC ++ [Burn(ah, en), IntegerEntry(m, (ai - en))])
1077+ let dq = eg._1
1078+ let an = eg._2
1079+ (dq ++ [Burn(X, eb), IntegerEntry(m, (Y - eb))])
11051080 }
11061081 }
11071082 })
11081083
11091084
11101085
1111-@Callable(df)
1112-func withdrawWithUnlock (em,et) = valueOrElse(av(), if ((0 >= et))
1086+@Callable(cV)
1087+func withdrawWithUnlock (ea,eh) = valueOrElse(al(), if ((0 >= eh))
11131088 then throw("Unlock amount must be positive")
11141089 else {
1115- let cM = cI()
1116- if (cM._1)
1117- then (cO(cM._2) ++ cP(df.caller, df.payments))
1090+ let cC = cy()
1091+ if (cC._1)
1092+ then (cE(cC._2) ++ cF(cV.caller, cV.payments))
11181093 else {
1119- let en = if ((size(df.payments) > 0))
1120- then if ((size(df.payments) != 1))
1094+ let eb = if ((size(cV.payments) > 0))
1095+ then if ((size(cV.payments) != 1))
11211096 then throw("size(payments) != 1")
11221097 else {
1123- let eo = df.payments[0].assetId
1124- if ((ah != eo))
1098+ let ec = cV.payments[0].assetId
1099+ if ((X != ec))
11251100 then throw("unknown payment token")
1126- else df.payments[0].amount
1101+ else cV.payments[0].amount
11271102 }
11281103 else 0
1129- let eu = invoke(Y, "withdrawShareTokens", [toString(this), et], nil)
1130- if ((eu == eu))
1104+ let ei = invoke(S, "withdrawShareTokens", [toString(this), eh], nil)
1105+ if ((ei == ei))
11311106 then {
1132- let ev = (en + et)
1133- let dL = invoke(this, "withdraw", [em], [AttachedPayment(ah, ev)])
1134- if ((dL == dL))
1107+ let ej = (eb + eh)
1108+ let dz = invoke(this, "withdraw", [ea], [AttachedPayment(X, ej)])
1109+ if ((dz == dz))
11351110 then nil
11361111 else throw("Strict value is not equal to itself.")
11371112 }
11381113 else throw("Strict value is not equal to itself.")
11391114 }
11401115 })
11411116
11421117
11431118
1144-@Callable(df)
1145-func calcWithdrawOneCoin (ew,ec,aF) = {
1146- let ax = valueOrErrorMessage(indexOf(aq, ec), "unknown token out")
1147- $Tuple2(nil, bU(aP(), ew, ax, Address(fromBase58String(aF)))._1)
1119+@Callable(cV)
1120+func calcWithdrawOneCoin (ek,dQ,av) = {
1121+ let an = valueOrErrorMessage(indexOf(ag, dQ), "unknown token out")
1122+ $Tuple2(nil, bK(aF(), ek, an, Address(fromBase58String(av)))._1)
11481123 }
11491124
11501125
11511126
1152-@Callable(df)
1153-func withdrawOneCoin (ec,ex) = valueOrElse(av(), if ((size(df.payments) != 1))
1127+@Callable(cV)
1128+func withdrawOneCoin (dQ,el) = valueOrElse(al(), if ((size(cV.payments) != 1))
11541129 then throw("size(payments) != 1")
11551130 else {
1156- let cM = cI()
1157- if (cM._1)
1158- then (cO(cM._2) ++ cP(df.originCaller, df.payments))
1131+ let cC = cy()
1132+ if (cC._1)
1133+ then (cE(cC._2) ++ cF(cV.originCaller, cV.payments))
11591134 else {
1160- let en = df.payments[0].amount
1161- let eo = df.payments[0].assetId
1162- if ((eo != ah))
1135+ let eb = cV.payments[0].amount
1136+ let ec = cV.payments[0].assetId
1137+ if ((ec != X))
11631138 then throw("unknown token")
11641139 else {
1165- let ey = valueOrErrorMessage(indexOf(aq, ec), "unknown token out")
1166- let ef = fromBase58String(ec)
1167- let bb = aP()
1168- let ez = bU(bb, en, ey, df.originCaller)
1169- let cm = ez._1
1170- let eA = ez._2
1171- if (aB((cm >= ex)))
1140+ let em = valueOrErrorMessage(indexOf(ag, dQ), "unknown token out")
1141+ let dT = fromBase58String(dQ)
1142+ let aR = aF()
1143+ let en = bK(aR, eb, em, cV.originCaller)
1144+ let cc = en._1
1145+ let eo = en._2
1146+ if (ar((cc >= el)))
11721147 then throw("Not enough coins removed")
11731148 else {
1174- let dG = fraction(eA, al, aj)
1175- let eB = (cm + eA)
1176- func eh (aR,ei) = {
1177- let eC = aR
1178- let cT = eC._1
1179- let ax = eC._2
1180- if ((ax == ey))
1181- then $Tuple2((cT :+ (ei - eB)), (ax + 1))
1182- else $Tuple2((cT :+ ei), (ax + 1))
1149+ let du = fraction(eo, ab, Z)
1150+ let ep = (cc + eo)
1151+ func dV (aH,dW) = {
1152+ let eq = aH
1153+ let cJ = eq._1
1154+ let an = eq._2
1155+ if ((an == em))
1156+ then $Tuple2((cJ :+ (dW - ep)), (an + 1))
1157+ else $Tuple2((cJ :+ dW), (an + 1))
11831158 }
11841159
1185- let eD = {
1186- let aT = bb
1187- let aU = size(aT)
1188- let aV = $Tuple2(nil, 0)
1189- func aW (aX,aY) = if ((aY >= aU))
1190- then aX
1191- else eh(aX, aT[aY])
1160+ let er = {
1161+ let aJ = aR
1162+ let aK = size(aJ)
1163+ let aL = $Tuple2(nil, 0)
1164+ func aM (aN,aO) = if ((aO >= aK))
1165+ then aN
1166+ else dV(aN, aJ[aO])
11921167
1193- func aZ (aX,aY) = if ((aY >= aU))
1194- then aX
1168+ func aP (aN,aO) = if ((aO >= aK))
1169+ then aN
11951170 else throw("List size exceeds 15")
11961171
1197- aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
1172+ aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
11981173 }
1199- let cT = eD._1
1200- let eE = eD._2
1201- if (cS(cT))
1174+ let cJ = er._1
1175+ let es = er._2
1176+ if (cI(cJ))
12021177 then throw()
12031178 else {
1204- let el = cD(eB, ec)
1205- if ((el == el))
1179+ let dZ = ct(ep, dQ)
1180+ if ((dZ == dZ))
12061181 then {
1207- let dK = (eA - dG)
1208- let dM = if ((dK > 0))
1209- then invoke(Z, "airDrop", nil, [AttachedPayment(ef, dK)])
1182+ let dy = (eo - du)
1183+ let dA = if ((dy > 0))
1184+ then invoke(T, "airDrop", nil, [AttachedPayment(dT, dy)])
12101185 else 0
1211- if ((dM == dM))
1212- then [ScriptTransfer(df.originCaller, cm, ef), IntegerEntry((aq[ey] + i), (bb[ey] - eB)), Burn(ah, en), ScriptTransfer(U, dG, ef), IntegerEntry(m, (ai - en))]
1186+ if ((dA == dA))
1187+ then [ScriptTransfer(cV.originCaller, cc, dT), IntegerEntry((ag[em] + i), (aR[em] - ep)), Burn(X, eb), ScriptTransfer(O, du, dT), IntegerEntry(m, (Y - eb))]
12131188 else throw("Strict value is not equal to itself.")
12141189 }
12151190 else throw("Strict value is not equal to itself.")
12161191 }
12171192 }
12181193 }
12191194 }
12201195 })
12211196
12221197
12231198
1224-@Callable(df)
1225-func withdrawOneCoinWithUnlock (ec,ex,et) = valueOrElse(av(), if ((0 >= et))
1199+@Callable(cV)
1200+func withdrawOneCoinWithUnlock (dQ,el,eh) = valueOrElse(al(), if ((0 >= eh))
12261201 then throw("Unlock amount must be positive")
12271202 else {
1228- let cM = cI()
1229- if (cM._1)
1230- then (cO(cM._2) ++ cP(df.caller, df.payments))
1203+ let cC = cy()
1204+ if (cC._1)
1205+ then (cE(cC._2) ++ cF(cV.caller, cV.payments))
12311206 else {
1232- let en = if ((size(df.payments) > 0))
1233- then if ((size(df.payments) != 1))
1207+ let eb = if ((size(cV.payments) > 0))
1208+ then if ((size(cV.payments) != 1))
12341209 then throw("size(payments) != 1")
12351210 else {
1236- let eo = df.payments[0].assetId
1237- if ((ah != eo))
1211+ let ec = cV.payments[0].assetId
1212+ if ((X != ec))
12381213 then throw("unknown payment token")
1239- else df.payments[0].amount
1214+ else cV.payments[0].amount
12401215 }
12411216 else 0
1242- let eu = invoke(Y, "withdrawShareTokens", [toString(this), et], nil)
1243- if ((eu == eu))
1217+ let ei = invoke(S, "withdrawShareTokens", [toString(this), eh], nil)
1218+ if ((ei == ei))
12441219 then {
1245- let ev = (en + et)
1246- let dL = invoke(this, "withdrawOneCoin", [ec, ex], [AttachedPayment(ah, ev)])
1247- if ((dL == dL))
1220+ let ej = (eb + eh)
1221+ let dz = invoke(this, "withdrawOneCoin", [dQ, el], [AttachedPayment(X, ej)])
1222+ if ((dz == dz))
12481223 then nil
12491224 else throw("Strict value is not equal to itself.")
12501225 }
12511226 else throw("Strict value is not equal to itself.")
12521227 }
12531228 })
12541229
12551230
12561231
1257-@Callable(df)
1258-func A () = $Tuple2(nil, aK())
1232+@Callable(cV)
1233+func A () = $Tuple2(nil, aA())
12591234
12601235
12611236
1262-@Callable(df)
1237+@Callable(cV)
12631238 func getVirtualPrice () = {
1264- let bs = be(aP(), aK())
1265- $Tuple2(nil, fraction(bs, a, ai))
1239+ let bi = aU(aF(), aA())
1240+ $Tuple2(nil, fraction(bi, a, Y))
12661241 }
12671242
12681243
12691244
1270-@Callable(df)
1271-func calcTokenAmount (eF,eG) = {
1272- let bf = aK()
1273- let eH = aP()
1274- let ca = bv(eH, bf)
1275- func eI (aR,ep) = {
1276- let eJ = aR
1277- let cT = eJ._1
1278- let ax = eJ._2
1279- let dz = (ep + (if (eG)
1280- then eF[ax]
1281- else -(eF[ax])))
1282- $Tuple2((cT :+ dz), (ax + 1))
1245+@Callable(cV)
1246+func calcTokenAmount (et,eu) = {
1247+ let aV = aA()
1248+ let ev = aF()
1249+ let bQ = bl(ev, aV)
1250+ func ew (aH,ed) = {
1251+ let ex = aH
1252+ let cJ = ex._1
1253+ let an = ex._2
1254+ let dn = (ed + (if (eu)
1255+ then et[an]
1256+ else -(et[an])))
1257+ $Tuple2((cJ :+ dn), (an + 1))
12831258 }
12841259
1285- let cT = ( let aT = eH
1286- let aU = size(aT)
1287- let aV = $Tuple2(nil, 0)
1288- func aW (aX,aY) = if ((aY >= aU))
1289- then aX
1290- else eI(aX, aT[aY])
1260+ let cJ = ( let aJ = ev
1261+ let aK = size(aJ)
1262+ let aL = $Tuple2(nil, 0)
1263+ func aM (aN,aO) = if ((aO >= aK))
1264+ then aN
1265+ else ew(aN, aJ[aO])
12911266
1292- func aZ (aX,aY) = if ((aY >= aU))
1293- then aX
1267+ func aP (aN,aO) = if ((aO >= aK))
1268+ then aN
12941269 else throw("List size exceeds 15")
12951270
1296- aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15))._1
1297- let cb = bv(cT, bf)
1298- let eK = if (eG)
1299- then (cb - ca)
1300- else (ca - cb)
1301- $Tuple2(nil, fraction(eK, ai, ca))
1271+ aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15))._1
1272+ let bR = bl(cJ, aV)
1273+ let ey = if (eu)
1274+ then (bR - bQ)
1275+ else (bQ - bR)
1276+ $Tuple2(nil, fraction(ey, Y, bQ))
13021277 }
13031278
13041279
13051280
1306-@Callable(df)
1307-func rampA (eL,eM) = valueOrElse(av(), valueOrElse(aw(df), if (aB((aA >= (ao + e))))
1281+@Callable(cV)
1282+func rampA (ez,eA) = valueOrElse(al(), valueOrElse(am(cV), if (ar((aq >= (ae + e))))
13081283 then throw("too often")
1309- else if (aB((eM >= (aA + e))))
1284+ else if (ar((eA >= (aq + e))))
13101285 then throw("insufficient time")
13111286 else {
1312- let eN = aK()
1313- if (aB(if ((eL > 0))
1314- then (b > eL)
1287+ let eB = aA()
1288+ if (ar(if ((ez > 0))
1289+ then (b > ez)
13151290 else false))
13161291 then throw("out of base range")
1317- else if (aB(if (if ((eL >= eN))
1318- then ((eN * c) >= eL)
1292+ else if (ar(if (if ((ez >= eB))
1293+ then ((eB * c) >= ez)
13191294 else false)
13201295 then true
1321- else if ((eN > eL))
1322- then ((eL * c) >= eN)
1296+ else if ((eB > ez))
1297+ then ((ez * c) >= eB)
13231298 else false))
13241299 then throw("out of range")
1325- else [IntegerEntry("initial_A", eN), IntegerEntry("future_A", eL), IntegerEntry("initial_A_time", aA), IntegerEntry("future_A_time", eM)]
1300+ else [IntegerEntry("initial_A", eB), IntegerEntry("future_A", ez), IntegerEntry("initial_A_time", aq), IntegerEntry("future_A_time", eA)]
13261301 }))
13271302
13281303
13291304
1330-@Callable(df)
1331-func stopRampA () = valueOrElse(av(), valueOrElse(aw(df), {
1332- let eO = aK()
1333-[IntegerEntry("initial_A", eO), IntegerEntry("future_A", eO), IntegerEntry("initial_A_time", aA), IntegerEntry("future_A_time", aA)]
1305+@Callable(cV)
1306+func stopRampA () = valueOrElse(al(), valueOrElse(am(cV), {
1307+ let eC = aA()
1308+[IntegerEntry("initial_A", eC), IntegerEntry("future_A", eC), IntegerEntry("initial_A_time", aq), IntegerEntry("future_A_time", aq)]
13341309 }))
13351310
13361311
13371312
1338-@Callable(df)
1339-func shutdown () = valueOrElse(aw(df), if (!(ag))
1313+@Callable(cV)
1314+func shutdown () = valueOrElse(am(cV), if (!(W))
13401315 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, k), "the cause wasn't specified")))
1341- else as("Paused by admin"))
1316+ else ai("Paused by admin"))
13421317
13431318
13441319
1345-@Callable(df)
1346-func activate () = valueOrElse(aw(df), if (ag)
1347- then au()
1320+@Callable(cV)
1321+func activate () = valueOrElse(am(cV), if (W)
1322+ then ak()
13481323 else [BooleanEntry(j, true), DeleteEntry(k)])
13491324
13501325
13511326
1352-@Callable(df)
1353-func keepLimitForFirstHarvest (eP) = valueOrElse(av(), valueOrElse(aw(df), [IntegerEntry(v, eP)]))
1327+@Callable(cV)
1328+func takeIntoAccountExtraFunds () = valueOrElse(al(), if ((cV.caller != O))
1329+ then throw("Only the wallet can call this function")
1330+ else {
1331+ let ev = aF()
1332+ func eD (aH,aI) = {
1333+ let eE = aH
1334+ let eF = eE._1
1335+ let an = eE._2
1336+ let eG = fromBase58String(aI)
1337+ let eH = (assetBalance(this, eG) + cv(eG))
1338+ let eI = (eH - ev[an])
1339+ if ((0 > eI))
1340+ then ai(("Enroll amount negative for asset" + aI))
1341+ else {
1342+ let dA = if ((eI > 0))
1343+ then invoke(T, "airDrop", nil, [AttachedPayment(eG, eI)])
1344+ else 0
1345+ if ((dA == dA))
1346+ then $Tuple2((eF + eI), (an + 1))
1347+ else throw("Strict value is not equal to itself.")
1348+ }
1349+ }
1350+
1351+ let dk = {
1352+ let aJ = ag
1353+ let aK = size(aJ)
1354+ let aL = $Tuple2(0, 0)
1355+ func aM (aN,aO) = if ((aO >= aK))
1356+ then aN
1357+ else eD(aN, aJ[aO])
1358+
1359+ func aP (aN,aO) = if ((aO >= aK))
1360+ then aN
1361+ else throw("List size exceeds 15")
1362+
1363+ aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
1364+ }
1365+ if ((dk._1 == 0))
1366+ then throw("No money to take")
1367+ else nil
1368+ })
13541369
13551370
1356-@Verifier(eQ)
1357-func eR () = {
1358- let eS = {
1359- let eT = if (sigVerify(eQ.bodyBytes, eQ.proofs[0], Q))
1371+@Verifier(eJ)
1372+func eK () = {
1373+ let eL = {
1374+ let eM = if (sigVerify(eJ.bodyBytes, eJ.proofs[0], K))
13601375 then 1
13611376 else 0
1362- let eU = if (sigVerify(eQ.bodyBytes, eQ.proofs[1], R))
1377+ let eN = if (sigVerify(eJ.bodyBytes, eJ.proofs[1], L))
13631378 then 1
13641379 else 0
1365- let eV = if (sigVerify(eQ.bodyBytes, eQ.proofs[2], S))
1380+ let eO = if (sigVerify(eJ.bodyBytes, eJ.proofs[2], M))
13661381 then 1
13671382 else 0
1368- (((eT + eU) + eV) >= 2)
1383+ (((eM + eN) + eO) >= 2)
13691384 }
1370- let N = eQ
1371- if ($isInstanceOf(N, "InvokeScriptTransaction"))
1385+ let H = eJ
1386+ if ($isInstanceOf(H, "InvokeScriptTransaction"))
13721387 then {
1373- let dL = N
1374- let eW = if ((dL.dApp == this))
1375- then (dL.function == "takeIntoAccountExtraFunds")
1388+ let dz = H
1389+ let eP = if ((dz.dApp == this))
1390+ then (dz.function == "takeIntoAccountExtraFunds")
13761391 else false
1377- let eX = if (if (if (sigVerify(eQ.bodyBytes, eQ.proofs[0], Q))
1392+ let eQ = if (if (if (sigVerify(eJ.bodyBytes, eJ.proofs[0], K))
13781393 then true
1379- else sigVerify(eQ.bodyBytes, eQ.proofs[0], R))
1394+ else sigVerify(eJ.bodyBytes, eJ.proofs[0], L))
13801395 then true
1381- else sigVerify(eQ.bodyBytes, eQ.proofs[0], S))
1396+ else sigVerify(eJ.bodyBytes, eJ.proofs[0], M))
13821397 then true
1383- else sigVerify(eQ.bodyBytes, eQ.proofs[0], T)
1384- if (if (eW)
1385- then eX
1398+ else sigVerify(eJ.bodyBytes, eJ.proofs[0], N)
1399+ if (if (eP)
1400+ then eQ
13861401 else false)
13871402 then true
1388- else eS
1403+ else eL
13891404 }
1390- else eS
1405+ else eL
13911406 }
13921407

github/deemru/w8io/169f3d6 
668.27 ms