tx · 6KC4SoaVhtXtoMyjezydzWkdQQh6T6fsVYY6GCfteiPB

3MzNgrEUhroThbrRs5DXGbo7x8nu84NqPfU:  -0.03000000 Waves

2022.09.14 17:33 [2228898] smart account 3MzNgrEUhroThbrRs5DXGbo7x8nu84NqPfU > SELF 0.00000000 Waves

{ "type": 13, "id": "6KC4SoaVhtXtoMyjezydzWkdQQh6T6fsVYY6GCfteiPB", "fee": 3000000, "feeAssetId": null, "timestamp": 1663166035599, "version": 2, "chainId": 84, "sender": "3MzNgrEUhroThbrRs5DXGbo7x8nu84NqPfU", "senderPublicKey": "9rfquow4nYxXdYLnj2FRCVCi9ZUa2BSBci3YMueg53DF", "proofs": [ "5tgqBwu6pBBRL7sUuFDr9wyPddvkPE7N6g7n8cBcd8EjcTM9E2S9NmgAVnWimBpbbks1sEpxgo5KMca5QFoCF6UR", "4utCt9fQYfofkBh6kCznS6keWSShGbJF8hGv7eHbm92xjB2etAZhdEHdtUhD8qqV1mvfL3ocpapPb7pacJxdVFUt" ], "script": "base64:BgIpCAISAwoBBBIAEgQKAgEBEgASBAoCAQESABIAEgASAwoBARIFCgMEAQhhAAd2ZXJzaW9uAgUyLjAuMAAIa1ZlcnNpb24CB3ZlcnNpb24AB2tBY3RpdmUCBmFjdGl2ZQAJa0Fzc2V0SWRBAgpBX2Fzc2V0X2lkAAlrQXNzZXRJZEICCkJfYXNzZXRfaWQACWtCYWxhbmNlQQIPQV9hc3NldF9iYWxhbmNlAAlrQmFsYW5jZUICD0JfYXNzZXRfYmFsYW5jZQANa1NoYXJlQXNzZXRJZAIOc2hhcmVfYXNzZXRfaWQAEWtTaGFyZUFzc2V0U3VwcGx5AhJzaGFyZV9hc3NldF9zdXBwbHkABGtGZWUCCmNvbW1pc3Npb24ACmtJbnZhcmlhbnQCCWludmFyaWFudAAGa0NhdXNlAg5zaHV0ZG93bl9jYXVzZQAMa1VTRE5BZGRyZXNzAhhzdGFraW5nX3VzZG5uc2J0X2FkZHJlc3MADGtFVVJOQWRkcmVzcwIUc3Rha2luZ19ldXJuX2FkZHJlc3MACmtEaXNjb3VudHMCCWRpc2NvdW50cwAPa0Rpc2NvdW50VmFsdWVzAg9kaXNjb3VudF92YWx1ZXMADmtVc2VyU3dvcEluR292AgxfU1dPUF9hbW91bnQADWtGaXJzdEhhcnZlc3QCDWZpcnN0X2hhcnZlc3QAE2tGaXJzdEhhcnZlc3RIZWlnaHQCFGZpcnN0X2hhcnZlc3RfaGVpZ2h0AAtrU2hhcmVMaW1pdAIcc2hhcmVfbGltaXRfb25fZmlyc3RfaGFydmVzdAALa0Jhc2VQZXJpb2QCC2Jhc2VfcGVyaW9kAA1rUGVyaW9kTGVuZ3RoAg1wZXJpb2RfbGVuZ3RoAAxrU3RhcnRIZWlnaHQCDHN0YXJ0X2hlaWdodAANa0FkbWluUHViS2V5MQILYWRtaW5fcHViXzEADWtBZG1pblB1YktleTICC2FkbWluX3B1Yl8yAA1rQWRtaW5QdWJLZXkzAgthZG1pbl9wdWJfMwASa0FkbWluSW52b2tlUHViS2V5AhBhZG1pbl9pbnZva2VfcHViABBrTW9uZXlCb3hBZGRyZXNzAhFtb25leV9ib3hfYWRkcmVzcwALa0dvdkFkZHJlc3MCEmdvdmVybmFuY2VfYWRkcmVzcwAOa1ZvdGluZ0FkZHJlc3MCDnZvdGluZ19hZGRyZXNzAAZvcmFjbGUJAQdBZGRyZXNzAQEaAVTpRaoekC86rvG6DuYumpJfGpiE4fNiswgBE2dldEJhc2U1OEZyb21PcmFjbGUBA2tleQQHJG1hdGNoMAkAnQgCBQZvcmFjbGUFA2tleQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEBnN0cmluZwUHJG1hdGNoMAkA2QQBBQZzdHJpbmcEB25vdGhpbmcFByRtYXRjaDAJAAIBCQCsAgIFA2tleQIIaXMgZW1wdHkADGFkbWluUHViS2V5MQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQ1rQWRtaW5QdWJLZXkxAAxhZG1pblB1YktleTIJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUNa0FkbWluUHViS2V5MgAMYWRtaW5QdWJLZXkzCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDWtBZG1pblB1YktleTMAEWFkbWluUHViS2V5SW52b2tlCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFEmtBZG1pbkludm9rZVB1YktleQAPbW9uZXlCb3hBZGRyZXNzCQEHQWRkcmVzcwEJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUQa01vbmV5Qm94QWRkcmVzcwAKZ292QWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFC2tHb3ZBZGRyZXNzABJzdGFraW5nVVNETkFkZHJlc3MJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQxrVVNETkFkZHJlc3MADXZvdGluZ0FkZHJlc3MJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQ5rVm90aW5nQWRkcmVzcwAEVVNETgEgbySjyqsw3FIpmOgsYVruWn8jTcItdbvpnapU4NLQB8EADXN0YWtpbmdBc3NldHMJAMwIAgkA2AQBBQRVU0ROBQNuaWwACmJhc2VQZXJpb2QJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQ12b3RpbmdBZGRyZXNzBQtrQmFzZVBlcmlvZAIRRW1wdHkga0Jhc2VQZXJpb2QAC3N0YXJ0SGVpZ2h0CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUNdm90aW5nQWRkcmVzcwUMa1N0YXJ0SGVpZ2h0AhJFbXB0eSBrU3RhcnRIZWlnaHQADHBlcmlvZExlbmd0aAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFDXZvdGluZ0FkZHJlc3MFDWtQZXJpb2RMZW5ndGgCE0VtcHR5IGtQZXJpb2RMZW5ndGgAFWZpcnN0SGFydmVzdEVuZFBlcmlvZAkAZAIJAGQCBQpiYXNlUGVyaW9kCQBpAgkAZQIFBmhlaWdodAULc3RhcnRIZWlnaHQFDHBlcmlvZExlbmd0aAADAAZhY3RpdmUJARFAZXh0ck5hdGl2ZSgxMDUxKQIFBHRoaXMFB2tBY3RpdmUAC3N0ckFzc2V0SWRBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBQlrQXNzZXRJZEEAC3N0ckFzc2V0SWRCCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBQlrQXNzZXRJZEIACGFzc2V0SWRBAwkAAAIFC3N0ckFzc2V0SWRBAgVXQVZFUwUEdW5pdAkA2QQBBQtzdHJBc3NldElkQQAIYXNzZXRJZEIDCQAAAgULc3RyQXNzZXRJZEICBVdBVkVTBQR1bml0CQDZBAEFC3N0ckFzc2V0SWRCAAphc3NldE5hbWVBBAckbWF0Y2gwBQhhc3NldElkQQMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAJpZAUHJG1hdGNoMAgJAQV2YWx1ZQEJAOwHAQUCaWQEbmFtZQMJAAECBQckbWF0Y2gwAgRVbml0BAV3YXZlcwUHJG1hdGNoMAIFV0FWRVMJAAIBAgtNYXRjaCBlcnJvcgAKYXNzZXROYW1lQgQHJG1hdGNoMAUIYXNzZXRJZEIDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQCaWQFByRtYXRjaDAICQEFdmFsdWUBCQDsBwEFAmlkBG5hbWUDCQABAgUHJG1hdGNoMAIEVW5pdAQFd2F2ZXMFByRtYXRjaDACBVdBVkVTCQACAQILTWF0Y2ggZXJyb3IACGJhbGFuY2VBCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBQlrQmFsYW5jZUEACGJhbGFuY2VCCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBQlrQmFsYW5jZUIADHNoYXJlQXNzZXRJZAkA2QQBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBQ1rU2hhcmVBc3NldElkABBzaGFyZUFzc2V0U3VwcGx5CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBRFrU2hhcmVBc3NldFN1cHBseQAJaW52YXJpYW50CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBQprSW52YXJpYW50AANmZWUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFBGtGZWUADWZlZUdvdmVybmFuY2UJAGsDBQNmZWUAKABkAAlmZWVTY2FsZTYAwIQ9AAZzY2FsZTMA6AcABnNjYWxlOACAwtcvAAdzY2FsZTE2AICAhP6m3uERAA5zbGlwcGFnZVNjYWxlMwDoBwAHZGlnaXRzOAAIAA1kQXBwVGhyZXNob2xkADIAE2RBcHBUaHJlc2hvbGRTY2FsZTIAZAAVZXhjaGFuZ2VSYXRpb0xpbWl0TWluAICV9SoAFWV4Y2hhbmdlUmF0aW9MaW1pdE1heACA77k0AAVhbHBoYQAyAAthbHBoYURpZ2l0cwACAARiZXRhAICA3q/P9ZUIAQ5hY2NvdW50QmFsYW5jZQEHYXNzZXRJZAQHJG1hdGNoMAUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAJpZAUHJG1hdGNoMAkA8AcCBQR0aGlzBQJpZAMJAAECBQckbWF0Y2gwAgRVbml0BAV3YXZlcwUHJG1hdGNoMAgJAO8HAQUEdGhpcwlhdmFpbGFibGUJAAIBAgtNYXRjaCBlcnJvcgEMc3Rha2VkQW1vdW50AQdhc3NldElkBBZzdGFrZWRBbW91bnRDYWxjdWxhdGVkBAckbWF0Y2gwBQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEA2FJZAUHJG1hdGNoMAMJAAACBQNhSWQFBFVTRE4JAJoIAgUSc3Rha2luZ1VTRE5BZGRyZXNzCQCsAgIJAKwCAgkArAICAgxycGRfYmFsYW5jZV8JANgEAQUDYUlkAgFfCQClCAEFBHRoaXMAAAMJAAECBQckbWF0Y2gwAgRVbml0AAAJAAIBAgtNYXRjaCBlcnJvcgQHJG1hdGNoMAUWc3Rha2VkQW1vdW50Q2FsY3VsYXRlZAMJAAECBQckbWF0Y2gwAgNJbnQEAWkFByRtYXRjaDAFAWkAAAANc3Rha2VkQW1vdW50QQkBDHN0YWtlZEFtb3VudAEFCGFzc2V0SWRBAA1zdGFrZWRBbW91bnRCCQEMc3Rha2VkQW1vdW50AQUIYXNzZXRJZEIAEWF2YWlsYWJsZUJhbGFuY2VBCQBlAgUIYmFsYW5jZUEFDXN0YWtlZEFtb3VudEEAEWF2YWlsYWJsZUJhbGFuY2VCCQBlAgUIYmFsYW5jZUIFDXN0YWtlZEFtb3VudEIAGWFjY291bnRCYWxhbmNlV2l0aFN0YWtlZEEJAGQCCQEOYWNjb3VudEJhbGFuY2UBBQhhc3NldElkQQUNc3Rha2VkQW1vdW50QQAZYWNjb3VudEJhbGFuY2VXaXRoU3Rha2VkQgkAZAIJAQ5hY2NvdW50QmFsYW5jZQEFCGFzc2V0SWRCBQ1zdGFrZWRBbW91bnRCABBoYXNFbm91Z2hCYWxhbmNlAwkAZwIFGWFjY291bnRCYWxhbmNlV2l0aFN0YWtlZEEFCGJhbGFuY2VBCQBnAgUZYWNjb3VudEJhbGFuY2VXaXRoU3Rha2VkQgUIYmFsYW5jZUIHAQhza2V3bmVzcwIBeAF5CQBpAgkAZAIJAGsDBQdzY2FsZTE2BQF4BQF5CQBrAwUHc2NhbGUxNgUBeQUBeAACAQ1pbnZhcmlhbnRDYWxjAgF4AXkEAnNrCQEIc2tld25lc3MCBQF4BQF5CQBkAgkAawMJAGQCBQF4BQF5BQdzY2FsZTE2CQBsBgUCc2sFB2RpZ2l0czgFBWFscGhhBQthbHBoYURpZ2l0cwUHZGlnaXRzOAUHQ0VJTElORwkAaAIAAgkAawMJAKADAQkAdgYJALwCAwkAtgIBBQF4CQC2AgEFAXkJALYCAQUGc2NhbGU4AAAJALYCAQAFAAEJAGkCBQdkaWdpdHM4AAIFBERPV04JAGwGCQBlAgUCc2sFBGJldGEFB2RpZ2l0czgFBWFscGhhBQthbHBoYURpZ2l0cwUHZGlnaXRzOAUERE9XTgUGc2NhbGU4ARNjYWxjdWxhdGVTZW5kQW1vdW50BBVhbW91bnRUb1NlbmRFc3RpbWF0ZWQVbWluVG9rZW5SZWNlaXZlQW1vdW50EnRva2VuUmVjZWl2ZUFtb3VudAd0b2tlbklkBB13b3JzdEFsbG93ZWROZXdJbnZhcmlhbnRSYXRpbwkAZQIFB3NjYWxlMTYJAGkCCQBoAgUHc2NhbGUxNgABAICt4gQEHmRlbHRhQmV0d2Vlbk1heEFuZE1pblNlbmRWYWx1ZQkAZQIFFWFtb3VudFRvU2VuZEVzdGltYXRlZAUVbWluVG9rZW5SZWNlaXZlQW1vdW50BAF4CQBkAgUIYmFsYW5jZUEFEnRva2VuUmVjZWl2ZUFtb3VudAQBeQkAZAIFCGJhbGFuY2VCBRJ0b2tlblJlY2VpdmVBbW91bnQKAQ1nZXRTdGVwQW1vdW50AgNhY2MEc3RlcAMJAAACCAUDYWNjAl8xAP///////////wEEDGFtb3VudFRvU2VuZAkAZQIFFWFtb3VudFRvU2VuZEVzdGltYXRlZAkAaQIJAGkCCQBoAgUEc3RlcAUeZGVsdGFCZXR3ZWVuTWF4QW5kTWluU2VuZFZhbHVlAAMFBnNjYWxlMwQNc3RlcEludmFyaWFudAMJAAACBQd0b2tlbklkBQhhc3NldElkQQkBDWludmFyaWFudENhbGMCBQF4CQBlAgUIYmFsYW5jZUIFDGFtb3VudFRvU2VuZAkBDWludmFyaWFudENhbGMCCQBlAgUIYmFsYW5jZUEFDGFtb3VudFRvU2VuZAUBeQMJAGYCBQ1zdGVwSW52YXJpYW50BQlpbnZhcmlhbnQJAJQKAgUMYW1vdW50VG9TZW5kBQ1zdGVwSW52YXJpYW50CQCUCgIA////////////AQAABQNhY2MED2Ftb3VudFRvU2VuZE1pbgkBDWdldFN0ZXBBbW91bnQCCQCUCgIA////////////AQAAALgXAwkAZgIAAAgFD2Ftb3VudFRvU2VuZE1pbgJfMQkAAgECH1ByaWNlIGlzIHdvcnNlIHRoYW4gbWluUmVjZWl2ZWQEDGludkVzdGltYXRlZAMJAAACBQd0b2tlbklkBQhhc3NldElkQQkBDWludmFyaWFudENhbGMCBQF4CQBlAgUIYmFsYW5jZUIFFWFtb3VudFRvU2VuZEVzdGltYXRlZAMJAAACBQd0b2tlbklkBQhhc3NldElkQgkBDWludmFyaWFudENhbGMCCQBlAgUIYmFsYW5jZUEFFWFtb3VudFRvU2VuZEVzdGltYXRlZAUBeQkAAgECFldyb25nIGFzc2V0IGluIHBheW1lbnQDCQBmAgUJaW52YXJpYW50BQxpbnZFc3RpbWF0ZWQDCQBnAgUdd29yc3RBbGxvd2VkTmV3SW52YXJpYW50UmF0aW8JAGsDBQdzY2FsZTE2BQlpbnZhcmlhbnQFDGludkVzdGltYXRlZAkAAgECMlRoZSByZXF1ZXN0ZWQgcHJpY2UgaXMgdG9vIG5vdCBwcm9maXRhYmxlIGZvciB1c2VyBAFhCgACJGwJAMwIAgAZCQDMCAIAyAEJAMwIAgD0AwUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCAP///////////wEAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQENZ2V0U3RlcEFtb3VudAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgMwkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwMJAGYCAAAIBQFhAl8xCAUPYW1vdW50VG9TZW5kTWluAl8xCAUBYQJfMQQBYQoAAiRsCQDMCAIAjPz/////////AQkAzAgCALj+/////////wEJAMwIAgDn//////////8BBQNuaWwKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIA////////////AQAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQ1nZXRTdGVwQW1vdW50AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyAzCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADBA90dXBsZVNlbmRCZXR0ZXIDCQBmAgAACAUBYQJfMQkAlAoCBRVhbW91bnRUb1NlbmRFc3RpbWF0ZWQFDGludkVzdGltYXRlZAUBYQMJAGcCBR13b3JzdEFsbG93ZWROZXdJbnZhcmlhbnRSYXRpbwkAawMFB3NjYWxlMTYFCWludmFyaWFudAgFD3R1cGxlU2VuZEJldHRlcgJfMgkAAgECMlRoZSByZXF1ZXN0ZWQgcHJpY2UgaXMgdG9vIG5vdCBwcm9maXRhYmxlIGZvciB1c2VyCAUPdHVwbGVTZW5kQmV0dGVyAl8xAQxnZXRBc3NldEluZm8BB2Fzc2V0SWQEByRtYXRjaDAFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQCaWQFByRtYXRjaDAECHN0cmluZ0lkCQDYBAEFAmlkBARpbmZvCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCaWQJAKwCAgkArAICAgZBc3NldCAFCHN0cmluZ0lkAg4gZG9lc24ndCBleGlzdAkAlQoDBQhzdHJpbmdJZAgFBGluZm8EbmFtZQgFBGluZm8IZGVjaW1hbHMDCQABAgUHJG1hdGNoMAIEVW5pdAQFd2F2ZXMFByRtYXRjaDAJAJUKAwIFV0FWRVMCBVdBVkVTAAgJAAIBAgtNYXRjaCBlcnJvcgEHc3VzcGVuZAEFY2F1c2UJAMwIAgkBDEJvb2xlYW5FbnRyeQIFB2tBY3RpdmUHCQDMCAIJAQtTdHJpbmdFbnRyeQIFBmtDYXVzZQUFY2F1c2UFA25pbAENdGhyb3dJc0FjdGl2ZQAJAAIBAhZEQXBwIGlzIGFscmVhZHkgYWN0aXZlAQhpc0FjdGl2ZQADBQZhY3RpdmUFBHVuaXQJAAIBAh9EQXBwIGlzIGluYWN0aXZlIGF0IHRoaXMgbW9tZW50AQtpc0FkbWluQ2FsbAEBaQMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFDGFkbWluUHViS2V5MQkAzAgCBQxhZG1pblB1YktleTIJAMwIAgUMYWRtaW5QdWJLZXkzBQNuaWwIBQFpD2NhbGxlclB1YmxpY0tleQUEdW5pdAkAAgECIU9ubHkgYWRtaW4gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgELdGhyb3dBc3NldHMACQACAQkArAICCQCsAgIJAKwCAgIlSW5jb3JyZWN0IGFzc2V0cyBhdHRhY2hlZC4gRXhwZWN0ZWQ6IAULc3RyQXNzZXRJZEECBSBhbmQgBQtzdHJBc3NldElkQgEPdGhyb3dPbmVQYXltZW50AAkAAgECHU9uZSBhdHRhY2hlZCBwYXltZW50IGV4cGVjdGVkAQ50aHJvd1RocmVzaG9sZAMJdGhyZXNob2xkB2Ftb3VudEEHYW1vdW50QgkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICOU5ldyBiYWxhbmNlIGluIGFzc2V0cyBvZiB0aGUgREFwcCBpcyBsZXNzIHRoYW4gdGhyZXNob2xkIAkApAMBBQl0aHJlc2hvbGQCAjogCQCkAwEFB2Ftb3VudEECASAFCmFzc2V0TmFtZUECAiwgCQCkAwEFB2Ftb3VudEICASAFCmFzc2V0TmFtZUIBEXN1c3BlbmRTdXNwaWNpb3VzAAkBB3N1c3BlbmQBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAiNTdXNwaWNpb3VzIHN0YXRlLiBBY3R1YWwgYmFsYW5jZXM6IAkApAMBBQhiYWxhbmNlQQIBIAUKYXNzZXROYW1lQQICLCAJAKQDAQUIYmFsYW5jZUICASAFCmFzc2V0TmFtZUICCS4gU3RhdGU6IAkApAMBCQEOYWNjb3VudEJhbGFuY2UBBQhhc3NldElkQQIBIAUKYXNzZXROYW1lQQICLCAJAKQDAQkBDmFjY291bnRCYWxhbmNlAQUIYXNzZXRJZEICASAFCmFzc2V0TmFtZUIBGGNhbGNTdGFraW5nRnVuY0FuZEFkZHJlcwIFc3Rha2UHYXNzZXRJZAMFBXN0YWtlCQCUCgICDGxvY2tOZXV0cmlubwUSc3Rha2luZ1VTRE5BZGRyZXNzCQCUCgICDnVubG9ja05ldXRyaW5vBRJzdGFraW5nVVNETkFkZHJlc3MBEWNhbGNTdGFraW5nUGFyYW1zAwVzdGFrZQZhbW91bnQHYXNzZXRJZAMFBXN0YWtlBA0kdDAxMDA2NDEwMTMwCQEYY2FsY1N0YWtpbmdGdW5jQW5kQWRkcmVzAgUFc3Rha2UFB2Fzc2V0SWQEBGNhbGwIBQ0kdDAxMDA2NDEwMTMwAl8xBAtzdGFraW5nQWRkcggFDSR0MDEwMDY0MTAxMzACXzIJAJYKBAUEY2FsbAULc3Rha2luZ0FkZHIFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUHYXNzZXRJZAUGYW1vdW50BQNuaWwEDSR0MDEwMjE2MTAyODIJARhjYWxjU3Rha2luZ0Z1bmNBbmRBZGRyZXMCBQVzdGFrZQUHYXNzZXRJZAQEY2FsbAgFDSR0MDEwMjE2MTAyODICXzEEC3N0YWtpbmdBZGRyCAUNJHQwMTAyMTYxMDI4MgJfMgkAlgoEBQRjYWxsBQtzdGFraW5nQWRkcgkAzAgCBQZhbW91bnQJAMwIAgkA2AQBBQdhc3NldElkBQNuaWwFA25pbAEUY2FsY3VsYXRlRmVlRGlzY291bnQBCHVzZXJBZGRyBApzd29wQW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFCmdvdkFkZHJlc3MJAKwCAgkApQgBBQh1c2VyQWRkcgUOa1VzZXJTd29wSW5Hb3YAAAQOZGlzY291bnRWYWx1ZXMJALUJAgkBEUBleHRyTmF0aXZlKDEwNTMpAgUGb3JhY2xlBQ9rRGlzY291bnRWYWx1ZXMCASwECWRpc2NvdW50cwkAtQkCCQERQGV4dHJOYXRpdmUoMTA1MykCBQZvcmFjbGUFCmtEaXNjb3VudHMCASwDAwkAZwIFCnN3b3BBbW91bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwAACQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmRpc2NvdW50VmFsdWVzAAEFCnN3b3BBbW91bnQHCQBlAgUJZmVlU2NhbGU2CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJZGlzY291bnRzAAADAwkAZwIFCnN3b3BBbW91bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwABCQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmRpc2NvdW50VmFsdWVzAAIFCnN3b3BBbW91bnQHCQBlAgUJZmVlU2NhbGU2CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJZGlzY291bnRzAAEDAwkAZwIFCnN3b3BBbW91bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwACCQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmRpc2NvdW50VmFsdWVzAAMFCnN3b3BBbW91bnQHCQBlAgUJZmVlU2NhbGU2CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJZGlzY291bnRzAAIDAwkAZwIFCnN3b3BBbW91bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwADCQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmRpc2NvdW50VmFsdWVzAAQFCnN3b3BBbW91bnQHCQBlAgUJZmVlU2NhbGU2CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJZGlzY291bnRzAAMDCQBnAgUKc3dvcEFtb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmRpc2NvdW50VmFsdWVzAAQJAGUCBQlmZWVTY2FsZTYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQlkaXNjb3VudHMABAUJZmVlU2NhbGU2CgFpAQRpbml0AQxmaXJzdEhhcnZlc3QEDSR0MDExNDc1MTE1NTIJAJQKAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQKcG10QW1vdW50QQgFDSR0MDExNDc1MTE1NTICXzEEC3BtdEFzc2V0SWRBCAUNJHQwMTE0NzUxMTU1MgJfMgQNJHQwMTE1NTcxMTYzNAkAlAoCCAkAkQMCCAUBaQhwYXltZW50cwABBmFtb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAQdhc3NldElkBApwbXRBbW91bnRCCAUNJHQwMTE1NTcxMTYzNAJfMQQLcG10QXNzZXRJZEIIBQ0kdDAxMTU1NzExNjM0Al8yBA0kdDAxMTYzOTExNzE2CQEMZ2V0QXNzZXRJbmZvAQULcG10QXNzZXRJZEEEDnBtdFN0ckFzc2V0SWRBCAUNJHQwMTE2MzkxMTcxNgJfMQQNcG10QXNzZXROYW1lQQgFDSR0MDExNjM5MTE3MTYCXzIEDHBtdERlY2ltYWxzQQgFDSR0MDExNjM5MTE3MTYCXzMEDSR0MDExNzIxMTE3OTgJAQxnZXRBc3NldEluZm8BBQtwbXRBc3NldElkQgQOcG10U3RyQXNzZXRJZEIIBQ0kdDAxMTcyMTExNzk4Al8xBA1wbXRBc3NldE5hbWVCCAUNJHQwMTE3MjExMTc5OAJfMgQMcG10RGVjaW1hbHNCCAUNJHQwMTE3MjExMTc5OAJfMwMJAQlpc0RlZmluZWQBCQCbCAIFBHRoaXMFB2tBY3RpdmUJAQ10aHJvd0lzQWN0aXZlAAMJAAACBQtwbXRBc3NldElkQQULcG10QXNzZXRJZEIJAAIBAhhBc3NldHMgbXVzdCBiZSBkaWZmZXJlbnQECXNoYXJlTmFtZQkArAICCQCsAgIJAKwCAgIBcwkArwICBQ1wbXRBc3NldE5hbWVBAAcCAV8JAK8CAgUNcG10QXNzZXROYW1lQgAHBBBzaGFyZURlc2NyaXB0aW9uCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIiU2hhcmVUb2tlbiBvZiBTd29wRmkgcHJvdG9jb2wgZm9yIAUNcG10QXNzZXROYW1lQQIFIGFuZCAFDXBtdEFzc2V0TmFtZUICDCBhdCBhZGRyZXNzIAkApQgBBQR0aGlzBA1zaGFyZURlY2ltYWxzCQBpAgkAZAIFDHBtdERlY2ltYWxzQQUMcG10RGVjaW1hbHNCAAIEEnNoYXJlSW5pdGlhbFN1cHBseQkAawMJAGwGBQpwbXRBbW91bnRBBQxwbXREZWNpbWFsc0EABQABBQxwbXREZWNpbWFsc0EFBERPV04JAGwGBQpwbXRBbW91bnRCBQxwbXREZWNpbWFsc0IABQABBQxwbXREZWNpbWFsc0IFBERPV04JAGwGAAoAAAUNc2hhcmVEZWNpbWFscwAAAAAFBERPV04ECnNoYXJlSXNzdWUJAMIIBQUJc2hhcmVOYW1lBRBzaGFyZURlc2NyaXB0aW9uBRJzaGFyZUluaXRpYWxTdXBwbHkFDXNoYXJlRGVjaW1hbHMGBAxzaGFyZUlzc3VlSWQJALgIAQUKc2hhcmVJc3N1ZQQTaW52YXJpYW50Q2FsY3VsYXRlZAkBDWludmFyaWFudENhbGMCBQpwbXRBbW91bnRBBQpwbXRBbW91bnRCBAZzdGFrZTEDCQEPY29udGFpbnNFbGVtZW50AgUNc3Rha2luZ0Fzc2V0cwUOcG10U3RyQXNzZXRJZEEJAPwHBAUEdGhpcwIMc3Rha2VVbnN0YWtlCQDMCAIGCQDMCAIFCnBtdEFtb3VudEEJAMwIAgUOcG10U3RyQXNzZXRJZEEFA25pbAUDbmlsAAADCQAAAgUGc3Rha2UxBQZzdGFrZTEEBnN0YWtlMgMJAQ9jb250YWluc0VsZW1lbnQCBQ1zdGFraW5nQXNzZXRzBQ5wbXRTdHJBc3NldElkQgkA/AcEBQR0aGlzAgxzdGFrZVVuc3Rha2UJAMwIAgYJAMwIAgUKcG10QW1vdW50QgkAzAgCBQ5wbXRTdHJBc3NldElkQgUDbmlsBQNuaWwAAAMJAAACBQZzdGFrZTIFBnN0YWtlMgQJYmFzZUVudHJ5CQDMCAIJAQtTdHJpbmdFbnRyeQIFCGtWZXJzaW9uBQd2ZXJzaW9uCQDMCAIJAQxCb29sZWFuRW50cnkCBQdrQWN0aXZlBgkAzAgCCQELU3RyaW5nRW50cnkCBQlrQXNzZXRJZEEFDnBtdFN0ckFzc2V0SWRBCQDMCAIJAQtTdHJpbmdFbnRyeQIFCWtBc3NldElkQgUOcG10U3RyQXNzZXRJZEIJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtCYWxhbmNlQQUKcG10QW1vdW50QQkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa0JhbGFuY2VCBQpwbXRBbW91bnRCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQprSW52YXJpYW50BRNpbnZhcmlhbnRDYWxjdWxhdGVkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQRrRmVlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQZvcmFjbGUCDWJhc2VfZmVlX2ZsYXQJAMwIAgUKc2hhcmVJc3N1ZQkAzAgCCQELU3RyaW5nRW50cnkCBQ1rU2hhcmVBc3NldElkCQDYBAEFDHNoYXJlSXNzdWVJZAkAzAgCCQEMSW50ZWdlckVudHJ5AgURa1NoYXJlQXNzZXRTdXBwbHkFEnNoYXJlSW5pdGlhbFN1cHBseQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFEnNoYXJlSW5pdGlhbFN1cHBseQUMc2hhcmVJc3N1ZUlkBQNuaWwDBQxmaXJzdEhhcnZlc3QJAM4IAgUJYmFzZUVudHJ5CQDMCAIJAQxCb29sZWFuRW50cnkCBQ1rRmlyc3RIYXJ2ZXN0BQxmaXJzdEhhcnZlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIFE2tGaXJzdEhhcnZlc3RIZWlnaHQJAGQCBQtzdGFydEhlaWdodAkAaAIFFWZpcnN0SGFydmVzdEVuZFBlcmlvZAUMcGVyaW9kTGVuZ3RoBQNuaWwFCWJhc2VFbnRyeQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARZyZXBsZW5pc2hXaXRoVHdvVG9rZW5zAAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAQLcG10QXNzZXRJZEEICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQLcG10QXNzZXRJZEIICQCRAwIIBQFpCHBheW1lbnRzAAEHYXNzZXRJZAQTcmF0aW9TaGFyZVRva2Vuc0luQQkAawMFBnNjYWxlOAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFCGJhbGFuY2VBBBNyYXRpb1NoYXJlVG9rZW5zSW5CCQBrAwUGc2NhbGU4CAkAkQMCCAUBaQhwYXltZW50cwABBmFtb3VudAUIYmFsYW5jZUIEDSR0MDE0NzQ2MTQ4MjMJAQxnZXRBc3NldEluZm8BBQtwbXRBc3NldElkQQQOcG10U3RyQXNzZXRJZEEIBQ0kdDAxNDc0NjE0ODIzAl8xBA1wbXRBc3NldE5hbWVBCAUNJHQwMTQ3NDYxNDgyMwJfMgQMcG10RGVjaW1hbHNBCAUNJHQwMTQ3NDYxNDgyMwJfMwQNJHQwMTQ4MjgxNDk0NQkBDGdldEFzc2V0SW5mbwEFC3BtdEFzc2V0SWRCBA5wbXRTdHJBc3NldElkQggFDSR0MDE0ODI4MTQ5NDUCXzEEDXBtdEFzc2V0TmFtZUIIBQ0kdDAxNDgyODE0OTQ1Al8yBAxwbXREZWNpbWFsc0IIBQ0kdDAxNDgyODE0OTQ1Al8zBA0kdDAxNDk1MDE1NDU0AwkAZgIFE3JhdGlvU2hhcmVUb2tlbnNJbkIFE3JhdGlvU2hhcmVUb2tlbnNJbkEEA3BtdAkAbgQFCGJhbGFuY2VCBRNyYXRpb1NoYXJlVG9rZW5zSW5BBQZzY2FsZTgFB0NFSUxJTkcJAJcKBQgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFA3BtdAkAZQIICQCRAwIIBQFpCHBheW1lbnRzAAEGYW1vdW50BQNwbXQFC3BtdEFzc2V0SWRCBRNyYXRpb1NoYXJlVG9rZW5zSW5BBANwbXQJAG4EBQhiYWxhbmNlQQUTcmF0aW9TaGFyZVRva2Vuc0luQgUGc2NhbGU4BQdDRUlMSU5HCQCXCgUFA3BtdAgJAJEDAggFAWkIcGF5bWVudHMAAQZhbW91bnQJAGUCCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAUDcG10BQtwbXRBc3NldElkQQUTcmF0aW9TaGFyZVRva2Vuc0luQgQKcG10QW1vdW50QQgFDSR0MDE0OTUwMTU0NTQCXzEECnBtdEFtb3VudEIIBQ0kdDAxNDk1MDE1NDU0Al8yBAZjaGFuZ2UIBQ0kdDAxNDk1MDE1NDU0Al8zBA1jaGFuZ2VBc3NldElkCAUNJHQwMTQ5NTAxNTQ1NAJfNAQPc2hhcmVUb2tlblJhdGlvCAUNJHQwMTQ5NTAxNTQ1NAJfNQQVc2hhcmVUb2tlblRvUGF5QW1vdW50CQBrAwUPc2hhcmVUb2tlblJhdGlvBRBzaGFyZUFzc2V0U3VwcGx5BQZzY2FsZTgDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAIJAAIBAhxUd28gYXR0YWNoZWQgYXNzZXRzIGV4cGVjdGVkAwMJAQIhPQIFC3BtdEFzc2V0SWRBBQhhc3NldElkQQYJAQIhPQIFC3BtdEFzc2V0SWRCBQhhc3NldElkQgkBC3Rocm93QXNzZXRzAAMJAAACBRVzaGFyZVRva2VuVG9QYXlBbW91bnQAAAkAAgECHVRvbyBzbWFsbCBhbW91bnQgdG8gcmVwbGVuaXNoAwkAZgIAAAUGY2hhbmdlCQACAQIKQ2hhbmdlIDwgMAMJAQEhAQUQaGFzRW5vdWdoQmFsYW5jZQkAzggCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUKcG10QW1vdW50QQULcG10QXNzZXRJZEEJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQpwbXRBbW91bnRCBQtwbXRBc3NldElkQgUDbmlsCQERc3VzcGVuZFN1c3BpY2lvdXMABAZzdGFrZTEDCQEPY29udGFpbnNFbGVtZW50AgUNc3Rha2luZ0Fzc2V0cwUOcG10U3RyQXNzZXRJZEEJAPwHBAUEdGhpcwIMc3Rha2VVbnN0YWtlCQDMCAIGCQDMCAIFCnBtdEFtb3VudEEJAMwIAgUOcG10U3RyQXNzZXRJZEEFA25pbAUDbmlsAAADCQAAAgUGc3Rha2UxBQZzdGFrZTEEBnN0YWtlMgMJAQ9jb250YWluc0VsZW1lbnQCBQ1zdGFraW5nQXNzZXRzBQ5wbXRTdHJBc3NldElkQgkA/AcEBQR0aGlzAgxzdGFrZVVuc3Rha2UJAMwIAgYJAMwIAgUKcG10QW1vdW50QgkAzAgCBQ5wbXRTdHJBc3NldElkQgUDbmlsBQNuaWwAAAMJAAACBQZzdGFrZTIFBnN0YWtlMgkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa0JhbGFuY2VBCQBkAgUIYmFsYW5jZUEFCnBtdEFtb3VudEEJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtCYWxhbmNlQgkAZAIFCGJhbGFuY2VCBQpwbXRBbW91bnRCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrU2hhcmVBc3NldFN1cHBseQkAZAIFEHNoYXJlQXNzZXRTdXBwbHkFFXNoYXJlVG9rZW5Ub1BheUFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUKa0ludmFyaWFudAkBDWludmFyaWFudENhbGMCCQBkAgUIYmFsYW5jZUEFCnBtdEFtb3VudEEJAGQCBQhiYWxhbmNlQgUKcG10QW1vdW50QgkAzAgCCQEHUmVpc3N1ZQMFDHNoYXJlQXNzZXRJZAUVc2hhcmVUb2tlblRvUGF5QW1vdW50BgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFFXNoYXJlVG9rZW5Ub1BheUFtb3VudAUMc2hhcmVBc3NldElkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUGY2hhbmdlBQ1jaGFuZ2VBc3NldElkBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEVcmVwbGVuaXNoV2l0aE9uZVRva2VuAhN2aXJ0dWFsU3dhcFRva2VuUGF5E3ZpcnR1YWxTd2FwVG9rZW5HZXQJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAEDSR0MDE3MTg3MTcyNjIJAJQKAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQJcG10QW1vdW50CAUNJHQwMTcxODcxNzI2MgJfMQQKcG10QXNzZXRJZAgFDSR0MDE3MTg3MTcyNjICXzIEDSR0MDE3MjY3MTczNDAJAQxnZXRBc3NldEluZm8BBQpwbXRBc3NldElkBA1wbXRTdHJBc3NldElkCAUNJHQwMTcyNjcxNzM0MAJfMQQMcG10QXNzZXROYW1lCAUNJHQwMTcyNjcxNzM0MAJfMgQLcG10RGVjaW1hbHMIBQ0kdDAxNzI2NzE3MzQwAl8zBA9wbXRNaW5UaHJlc2hvbGQAwJaxAgQddGhyZXNob2xkVmFsdWVGb3JNaW5Ub2xlcmFuY2UAgOHrFwQJdG9sZXJhbmNlAwkAZgIFHXRocmVzaG9sZFZhbHVlRm9yTWluVG9sZXJhbmNlBQlwbXRBbW91bnQAoI0GAAEEHHNsaXBwYWdlVmFsdWVNaW5Gb3JSZXBsZW5pc2gJAGUCBQZzY2FsZTgJAGkCCQBoAgUGc2NhbGU4BQl0b2xlcmFuY2UAgK3iBAQcc2xpcHBhZ2VWYWx1ZU1heEZvclJlcGxlbmlzaAkAZAIFBnNjYWxlOAkAaQIJAGgCBQZzY2FsZTgFCXRvbGVyYW5jZQCAreIEBBdzbGlwcGFnZVZhbHVlTWluRm9yU3dhcAkAZQIFBnNjYWxlOAkAaQIJAGgCBQZzY2FsZTgAAQCAreIEAwkAZgIFD3BtdE1pblRocmVzaG9sZAUJcG10QW1vdW50CQACAQkArAICCQCsAgIJAKwCAgkArAICAg9QYXltZW50IGFtb3VudCAJAKQDAQUJcG10QW1vdW50AicgZG9lcyBub3QgZXhjZWVkIHRoZSBtaW5pbXVtIGFtb3VudCBvZiAJAKQDAQUPcG10TWluVGhyZXNob2xkAgcgdG9rZW5zAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQEPdGhyb3dPbmVQYXltZW50AAMJAQEhAQUQaGFzRW5vdWdoQmFsYW5jZQkAzggCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUJcG10QW1vdW50BQpwbXRBc3NldElkBQNuaWwJARFzdXNwZW5kU3VzcGljaW91cwADAwkBAiE9AgUKcG10QXNzZXRJZAUIYXNzZXRJZEEJAQIhPQIFCnBtdEFzc2V0SWQFCGFzc2V0SWRCBwkBC3Rocm93QXNzZXRzAAQNJHQwMTgzMTgxODk2MAMJAAACBQpwbXRBc3NldElkBQhhc3NldElkQQkAmAoGCQBlAgUJcG10QW1vdW50BRN2aXJ0dWFsU3dhcFRva2VuUGF5BRN2aXJ0dWFsU3dhcFRva2VuR2V0CQBkAgUIYmFsYW5jZUEFE3ZpcnR1YWxTd2FwVG9rZW5QYXkJAGUCBQhiYWxhbmNlQgUTdmlydHVhbFN3YXBUb2tlbkdldAkAZAIFCGJhbGFuY2VBBQlwbXRBbW91bnQFCGJhbGFuY2VCCQCYCgYFE3ZpcnR1YWxTd2FwVG9rZW5HZXQJAGUCBQlwbXRBbW91bnQFE3ZpcnR1YWxTd2FwVG9rZW5QYXkJAGUCBQhiYWxhbmNlQQUTdmlydHVhbFN3YXBUb2tlbkdldAkAZAIFCGJhbGFuY2VCBRN2aXJ0dWFsU3dhcFRva2VuUGF5BQhiYWxhbmNlQQkAZAIFCGJhbGFuY2VCBQlwbXRBbW91bnQEEXZpcnR1YWxSZXBsZW5pc2hBCAUNJHQwMTgzMTgxODk2MAJfMQQRdmlydHVhbFJlcGxlbmlzaEIIBQ0kdDAxODMxODE4OTYwAl8yBBFiYWxhbmNlQWZ0ZXJTd2FwQQgFDSR0MDE4MzE4MTg5NjACXzMEEWJhbGFuY2VBZnRlclN3YXBCCAUNJHQwMTgzMTgxODk2MAJfNAQLbmV3QmFsYW5jZUEIBQ0kdDAxODMxODE4OTYwAl81BAtuZXdCYWxhbmNlQggFDSR0MDE4MzE4MTg5NjACXzYEDGludmFyaWFudE5ldwkBDWludmFyaWFudENhbGMCBRFiYWxhbmNlQWZ0ZXJTd2FwQQURYmFsYW5jZUFmdGVyU3dhcEIEJXJhdGlvVmlydHVhbEJhbGFuY2VUb1ZpcnR1YWxSZXBsZW5pc2gJAGkCCQBrAwUHc2NhbGUxNgURYmFsYW5jZUFmdGVyU3dhcEEFEWJhbGFuY2VBZnRlclN3YXBCCQBrAwUGc2NhbGU4BRF2aXJ0dWFsUmVwbGVuaXNoQQURdmlydHVhbFJlcGxlbmlzaEIEE2RBcHBUaHJlc2hvbGRBbW91bnQJAGsDCQBkAgULbmV3QmFsYW5jZUEFC25ld0JhbGFuY2VCBQ1kQXBwVGhyZXNob2xkCQBoAgACBRNkQXBwVGhyZXNob2xkU2NhbGUyAwMJAGcCBRdzbGlwcGFnZVZhbHVlTWluRm9yU3dhcAkAawMFBnNjYWxlOAUJaW52YXJpYW50BQxpbnZhcmlhbnROZXcGCQBmAgUJaW52YXJpYW50BQxpbnZhcmlhbnROZXcJAAIBAjpJbmNvcnJlY3QgdmlydHVhbFN3YXBUb2tlblBheSBvciB2aXJ0dWFsU3dhcFRva2VuR2V0IHZhbHVlAwMJAGYCBRxzbGlwcGFnZVZhbHVlTWluRm9yUmVwbGVuaXNoBSVyYXRpb1ZpcnR1YWxCYWxhbmNlVG9WaXJ0dWFsUmVwbGVuaXNoBgkAZgIFJXJhdGlvVmlydHVhbEJhbGFuY2VUb1ZpcnR1YWxSZXBsZW5pc2gFHHNsaXBwYWdlVmFsdWVNYXhGb3JSZXBsZW5pc2gJAAIBAmxTd2FwIHdpdGggdmlydHVhbFN3YXBUb2tlblBheSBhbmQgdmlydHVhbFN3YXBUb2tlbkdldCBpcyBwb3NzaWJsZSwgYnV0IHJhdGlvIGFmdGVyIHZpcnR1YWwgc3dhcCBpcyBpbmNvcnJlY3QDAwkAZgIFE2RBcHBUaHJlc2hvbGRBbW91bnQFC25ld0JhbGFuY2VBBgkAZgIFE2RBcHBUaHJlc2hvbGRBbW91bnQFC25ld0JhbGFuY2VCCQEOdGhyb3dUaHJlc2hvbGQDBRNkQXBwVGhyZXNob2xkQW1vdW50BQtuZXdCYWxhbmNlQQULbmV3QmFsYW5jZUIEE3JhdGlvU2hhcmVUb2tlbnNJbkEJAGsDBRF2aXJ0dWFsUmVwbGVuaXNoQQUGc2NhbGU4BRFiYWxhbmNlQWZ0ZXJTd2FwQQQTcmF0aW9TaGFyZVRva2Vuc0luQgkAawMFEXZpcnR1YWxSZXBsZW5pc2hCBQZzY2FsZTgFEWJhbGFuY2VBZnRlclN3YXBCBBVzaGFyZVRva2VuVG9QYXlBbW91bnQJAGsDCQCXAwEJAMwIAgUTcmF0aW9TaGFyZVRva2Vuc0luQQkAzAgCBRNyYXRpb1NoYXJlVG9rZW5zSW5CBQNuaWwFEHNoYXJlQXNzZXRTdXBwbHkFBnNjYWxlOAQdc2hhcmVUb2tlblRvUGF5QW1vdW50QWZ0ZXJGZWUJAGsDBRVzaGFyZVRva2VuVG9QYXlBbW91bnQJAGUCBQlmZWVTY2FsZTYJAGkCBQNmZWUAAgUJZmVlU2NhbGU2BBpzaGFyZVRva2VuR292ZXJuYW5jZVJld2FyZAkAawMFFXNoYXJlVG9rZW5Ub1BheUFtb3VudAkAaQIFDWZlZUdvdmVybmFuY2UAAgUJZmVlU2NhbGU2BBZnb3Zlcm5hbmNlUmV3YXJkVG9rZW5BCQBrAwUac2hhcmVUb2tlbkdvdmVybmFuY2VSZXdhcmQFCGJhbGFuY2VBBRBzaGFyZUFzc2V0U3VwcGx5BBZnb3Zlcm5hbmNlUmV3YXJkVG9rZW5CCQBrAwUac2hhcmVUb2tlbkdvdmVybmFuY2VSZXdhcmQFCGJhbGFuY2VCBRBzaGFyZUFzc2V0U3VwcGx5BA0kdDAyMDk0NzIxMjQyAwkAAAIFDXBtdFN0ckFzc2V0SWQFC3N0ckFzc2V0SWRBCQCVCgMJAGUCBQlwbXRBbW91bnQFFmdvdmVybmFuY2VSZXdhcmRUb2tlbkEFFmdvdmVybmFuY2VSZXdhcmRUb2tlbkIFC3N0ckFzc2V0SWRCCQCVCgMJAGUCBQlwbXRBbW91bnQFFmdvdmVybmFuY2VSZXdhcmRUb2tlbkIFFmdvdmVybmFuY2VSZXdhcmRUb2tlbkEFC3N0ckFzc2V0SWRBBAtzdGFrZUFtb3VudAgFDSR0MDIwOTQ3MjEyNDICXzEEDXVuc3Rha2VBbW91bnQIBQ0kdDAyMDk0NzIxMjQyAl8yBAx1bnN0YWtlQXNzZXQIBQ0kdDAyMDk0NzIxMjQyAl8zBAZzdGFrZTEDCQEPY29udGFpbnNFbGVtZW50AgUNc3Rha2luZ0Fzc2V0cwUNcG10U3RyQXNzZXRJZAkA/AcEBQR0aGlzAgxzdGFrZVVuc3Rha2UJAMwIAgYJAMwIAgULc3Rha2VBbW91bnQJAMwIAgUNcG10U3RyQXNzZXRJZAUDbmlsBQNuaWwAAAMJAAACBQZzdGFrZTEFBnN0YWtlMQQGc3Rha2UyAwkBD2NvbnRhaW5zRWxlbWVudAIFDXN0YWtpbmdBc3NldHMFDHVuc3Rha2VBc3NldAkA/AcEBQR0aGlzAgxzdGFrZVVuc3Rha2UJAMwIAgcJAMwIAgUNdW5zdGFrZUFtb3VudAkAzAgCBQx1bnN0YWtlQXNzZXQFA25pbAUDbmlsAAADCQAAAgUGc3Rha2UyBQZzdGFrZTIJAMwIAgkBB1JlaXNzdWUDBQxzaGFyZUFzc2V0SWQFHXNoYXJlVG9rZW5Ub1BheUFtb3VudEFmdGVyRmVlBgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFHXNoYXJlVG9rZW5Ub1BheUFtb3VudEFmdGVyRmVlBQxzaGFyZUFzc2V0SWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUPbW9uZXlCb3hBZGRyZXNzBRZnb3Zlcm5hbmNlUmV3YXJkVG9rZW5BBQhhc3NldElkQQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQ9tb25leUJveEFkZHJlc3MFFmdvdmVybmFuY2VSZXdhcmRUb2tlbkIFCGFzc2V0SWRCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrQmFsYW5jZUEJAGUCBQtuZXdCYWxhbmNlQQUWZ292ZXJuYW5jZVJld2FyZFRva2VuQQkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa0JhbGFuY2VCCQBlAgULbmV3QmFsYW5jZUIFFmdvdmVybmFuY2VSZXdhcmRUb2tlbkIJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtTaGFyZUFzc2V0U3VwcGx5CQBkAgUQc2hhcmVBc3NldFN1cHBseQUdc2hhcmVUb2tlblRvUGF5QW1vdW50QWZ0ZXJGZWUJAMwIAgkBDEludGVnZXJFbnRyeQIFCmtJbnZhcmlhbnQJAQ1pbnZhcmlhbnRDYWxjAgkAZQIFC25ld0JhbGFuY2VBBRZnb3Zlcm5hbmNlUmV3YXJkVG9rZW5BCQBlAgULbmV3QmFsYW5jZUIFFmdvdmVybmFuY2VSZXdhcmRUb2tlbkIFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQh3aXRoZHJhdwAJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAEDSR0MDIyNTI5MjI2MDQJAJQKAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQJcG10QW1vdW50CAUNJHQwMjI1MjkyMjYwNAJfMQQKcG10QXNzZXRJZAgFDSR0MDIyNTI5MjI2MDQCXzIEDGFtb3VudFRvUGF5QQkAawMFCXBtdEFtb3VudAUIYmFsYW5jZUEFEHNoYXJlQXNzZXRTdXBwbHkEDGFtb3VudFRvUGF5QgkAawMFCXBtdEFtb3VudAUIYmFsYW5jZUIFEHNoYXJlQXNzZXRTdXBwbHkEE2ludmFyaWFudENhbGN1bGF0ZWQJAQ1pbnZhcmlhbnRDYWxjAgkAZQIFCGJhbGFuY2VBBQxhbW91bnRUb1BheUEJAGUCBQhiYWxhbmNlQgUMYW1vdW50VG9QYXlCAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQEPdGhyb3dPbmVQYXltZW50AAMJAQIhPQIFCnBtdEFzc2V0SWQFDHNoYXJlQXNzZXRJZAkAAgEJAKwCAgIkSW5jb3JyZWN0IGFzc2V0IGF0dGFjaGVkLiBFeHBlY3RlZDogCQDYBAEFDHNoYXJlQXNzZXRJZAMJAQEhAQUQaGFzRW5vdWdoQmFsYW5jZQkAzggCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUJcG10QW1vdW50BQpwbXRBc3NldElkBQNuaWwJARFzdXNwZW5kU3VzcGljaW91cwAEBnN0YWtlMQMJAQ9jb250YWluc0VsZW1lbnQCBQ1zdGFraW5nQXNzZXRzBQtzdHJBc3NldElkQQkA/AcEBQR0aGlzAgxzdGFrZVVuc3Rha2UJAMwIAgcJAMwIAgUMYW1vdW50VG9QYXlBCQDMCAIFC3N0ckFzc2V0SWRBBQNuaWwFA25pbAAAAwkAAAIFBnN0YWtlMQUGc3Rha2UxBAZzdGFrZTIDCQEPY29udGFpbnNFbGVtZW50AgUNc3Rha2luZ0Fzc2V0cwULc3RyQXNzZXRJZEIJAPwHBAUEdGhpcwIMc3Rha2VVbnN0YWtlCQDMCAIHCQDMCAIFDGFtb3VudFRvUGF5QgkAzAgCBQtzdHJBc3NldElkQgUDbmlsBQNuaWwAAAMJAAACBQZzdGFrZTIFBnN0YWtlMgkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa0JhbGFuY2VBCQBlAgUIYmFsYW5jZUEFDGFtb3VudFRvUGF5QQkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa0JhbGFuY2VCCQBlAgUIYmFsYW5jZUIFDGFtb3VudFRvUGF5QgkAzAgCCQEMSW50ZWdlckVudHJ5AgURa1NoYXJlQXNzZXRTdXBwbHkJAGUCBRBzaGFyZUFzc2V0U3VwcGx5BQlwbXRBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIFCmtJbnZhcmlhbnQFE2ludmFyaWFudENhbGN1bGF0ZWQJAMwIAgkBBEJ1cm4CBQxzaGFyZUFzc2V0SWQFCXBtdEFtb3VudAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFDGFtb3VudFRvUGF5QQUIYXNzZXRJZEEJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQxhbW91bnRUb1BheUIFCGFzc2V0SWRCBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEIZXhjaGFuZ2UCGGVzdGltYXRlZEFtb3VudFRvUmVjZWl2ZRJtaW5BbW91bnRUb1JlY2VpdmUJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAEDSR0MDI0MTU1MjQyMzAJAJQKAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQJcG10QW1vdW50CAUNJHQwMjQxNTUyNDIzMAJfMQQKcG10QXNzZXRJZAgFDSR0MDI0MTU1MjQyMzACXzIDCQBnAgAABRhlc3RpbWF0ZWRBbW91bnRUb1JlY2VpdmUJAAIBCQCsAgICK0VzdGltYXRlZCBhbW91bnQgbXVzdCBiZSBwb3NpdGl2ZS4gQWN0dWFsOiAJAKQDAQUYZXN0aW1hdGVkQW1vdW50VG9SZWNlaXZlAwkAZgIFEm1pbkFtb3VudFRvUmVjZWl2ZQUYZXN0aW1hdGVkQW1vdW50VG9SZWNlaXZlCQACAQIvTWluaW1hbCBhbW91bnQgY2FuJ3QgYmUgZ3JlYXRlciB0aGFuIGVzdGltYXRlZC4DCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAQ90aHJvd09uZVBheW1lbnQAAwkBASEBBRBoYXNFbm91Z2hCYWxhbmNlCQDOCAIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQlwbXRBbW91bnQFCnBtdEFzc2V0SWQFA25pbAkBEXN1c3BlbmRTdXNwaWNpb3VzAAMDCQECIT0CBQpwbXRBc3NldElkBQhhc3NldElkQQkBAiE9AgUKcG10QXNzZXRJZAUIYXNzZXRJZEIHCQELdGhyb3dBc3NldHMAAwkAZgIAgK3iBAUJcG10QW1vdW50CQACAQIwT25seSBzd2FwIG9mIDEwLjAwMDAwMCBvciBtb3JlIHRva2VucyBpcyBhbGxvd2VkAwMJAGYCBRVleGNoYW5nZVJhdGlvTGltaXRNaW4JAGsDBQZzY2FsZTgFEm1pbkFtb3VudFRvUmVjZWl2ZQUJcG10QW1vdW50BgkAZgIJAGsDBQZzY2FsZTgFGGVzdGltYXRlZEFtb3VudFRvUmVjZWl2ZQUJcG10QW1vdW50BRVleGNoYW5nZVJhdGlvTGltaXRNYXgJAAIBAhxJbmNvcnJlY3QgYXJncyBhbmQgcG10IHJhdGlvBAtzZW5kQXNzZXRJZAMJAAACBQpwbXRBc3NldElkBQhhc3NldElkQQUIYXNzZXRJZEIFCGFzc2V0SWRBBAZhbW91bnQJARNjYWxjdWxhdGVTZW5kQW1vdW50BAUYZXN0aW1hdGVkQW1vdW50VG9SZWNlaXZlBRJtaW5BbW91bnRUb1JlY2VpdmUFCXBtdEFtb3VudAUKcG10QXNzZXRJZAQLZmVlRGlzY291bnQJARRjYWxjdWxhdGVGZWVEaXNjb3VudAEIBQFpDG9yaWdpbkNhbGxlcgQQZ292ZXJuYW5jZVJld2FyZAkAawMFBmFtb3VudAkAbgQFDWZlZUdvdmVybmFuY2UFC2ZlZURpc2NvdW50BQlmZWVTY2FsZTYFB0NFSUxJTkcFCWZlZVNjYWxlNgQOYW1vdW50TWludXNGZWUJAGsDBQZhbW91bnQJAGUCBQlmZWVTY2FsZTYJAG4EBQNmZWUFC2ZlZURpc2NvdW50BQlmZWVTY2FsZTYFB0NFSUxJTkcFCWZlZVNjYWxlNgQNJHQwMjU2ODMyNTk0NQMJAAACBQpwbXRBc3NldElkBQhhc3NldElkQQkAlAoCCQBkAgUIYmFsYW5jZUEFCXBtdEFtb3VudAkAZQIJAGUCBQhiYWxhbmNlQgUOYW1vdW50TWludXNGZWUFEGdvdmVybmFuY2VSZXdhcmQJAJQKAgkAZQIJAGUCBQhiYWxhbmNlQQUOYW1vdW50TWludXNGZWUFEGdvdmVybmFuY2VSZXdhcmQJAGQCBQhiYWxhbmNlQgUJcG10QW1vdW50BAtuZXdCYWxhbmNlQQgFDSR0MDI1NjgzMjU5NDUCXzEEC25ld0JhbGFuY2VCCAUNJHQwMjU2ODMyNTk0NQJfMgQTZEFwcFRocmVzaG9sZEFtb3VudAkAawMJAGQCBQtuZXdCYWxhbmNlQQULbmV3QmFsYW5jZUIFDWRBcHBUaHJlc2hvbGQJAGgCAAIFE2RBcHBUaHJlc2hvbGRTY2FsZTIDAwkAZgIFE2RBcHBUaHJlc2hvbGRBbW91bnQFC25ld0JhbGFuY2VBBgkAZgIFE2RBcHBUaHJlc2hvbGRBbW91bnQFC25ld0JhbGFuY2VCCQEOdGhyb3dUaHJlc2hvbGQDBRNkQXBwVGhyZXNob2xkQW1vdW50BQtuZXdCYWxhbmNlQQULbmV3QmFsYW5jZUIEDSR0MDI2MjQ0MjYzMTcJAQxnZXRBc3NldEluZm8BBQpwbXRBc3NldElkBA1wbXRTdHJBc3NldElkCAUNJHQwMjYyNDQyNjMxNwJfMQQMcG10QXNzZXROYW1lCAUNJHQwMjYyNDQyNjMxNwJfMgQLcG10RGVjaW1hbHMIBQ0kdDAyNjI0NDI2MzE3Al8zBA0kdDAyNjMzMDI2NDA3CQEMZ2V0QXNzZXRJbmZvAQULc2VuZEFzc2V0SWQEDnNlbmRTdHJBc3NldElkCAUNJHQwMjYzMzAyNjQwNwJfMQQNc2VuZEFzc2V0TmFtZQgFDSR0MDI2MzMwMjY0MDcCXzIEDHNlbmREZWNpbWFscwgFDSR0MDI2MzMwMjY0MDcCXzMEBnN0YWtlMQMJAQ9jb250YWluc0VsZW1lbnQCBQ1zdGFraW5nQXNzZXRzBQ1wbXRTdHJBc3NldElkCQD8BwQFBHRoaXMCDHN0YWtlVW5zdGFrZQkAzAgCBgkAzAgCBQlwbXRBbW91bnQJAMwIAgUNcG10U3RyQXNzZXRJZAUDbmlsBQNuaWwAAAMJAAACBQZzdGFrZTEFBnN0YWtlMQQGc3Rha2UyAwkBD2NvbnRhaW5zRWxlbWVudAIFDXN0YWtpbmdBc3NldHMFDnNlbmRTdHJBc3NldElkCQD8BwQFBHRoaXMCDHN0YWtlVW5zdGFrZQkAzAgCBwkAzAgCCQBkAgUOYW1vdW50TWludXNGZWUFEGdvdmVybmFuY2VSZXdhcmQJAMwIAgUOc2VuZFN0ckFzc2V0SWQFA25pbAUDbmlsAAADCQAAAgUGc3Rha2UyBQZzdGFrZTIJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa0JhbGFuY2VBBQtuZXdCYWxhbmNlQQkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa0JhbGFuY2VCBQtuZXdCYWxhbmNlQgkAzAgCCQEMSW50ZWdlckVudHJ5AgUKa0ludmFyaWFudAkBDWludmFyaWFudENhbGMCBQtuZXdCYWxhbmNlQQULbmV3QmFsYW5jZUIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQ5hbW91bnRNaW51c0ZlZQULc2VuZEFzc2V0SWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUPbW9uZXlCb3hBZGRyZXNzBRBnb3Zlcm5hbmNlUmV3YXJkBQtzZW5kQXNzZXRJZAUDbmlsCQDMCAIFDmFtb3VudE1pbnVzRmVlCQDMCAIFC3NlbmRBc3NldElkBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEIc2h1dGRvd24ACQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQFpAwkBASEBBQZhY3RpdmUJAAIBCQCsAgICIkRBcHAgaXMgYWxyZWFkeSBzdXNwZW5kZWQuIENhdXNlOiAJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUGa0NhdXNlAhp0aGUgY2F1c2Ugd2Fzbid0IHNwZWNpZmllZAkBB3N1c3BlbmQBAg9QYXVzZWQgYnkgYWRtaW4BaQEIYWN0aXZhdGUACQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQFpAwUGYWN0aXZlCQENdGhyb3dJc0FjdGl2ZQAJAMwIAgkBDEJvb2xlYW5FbnRyeQIFB2tBY3RpdmUGCQDMCAIJAQtEZWxldGVFbnRyeQEFBmtDYXVzZQUDbmlsAWkBGXRha2VJbnRvQWNjb3VudEV4dHJhRnVuZHMACQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUABA1hbW91bnRFbnJvbGxBCQBlAgUZYWNjb3VudEJhbGFuY2VXaXRoU3Rha2VkQQUIYmFsYW5jZUEEDWFtb3VudEVucm9sbEIJAGUCBRlhY2NvdW50QmFsYW5jZVdpdGhTdGFrZWRCBQhiYWxhbmNlQgQMaW52YXJpYW50TmV3CQENaW52YXJpYW50Q2FsYwIJAGQCBQhiYWxhbmNlQQUNYW1vdW50RW5yb2xsQQkAZAIFCGJhbGFuY2VCBQ1hbW91bnRFbnJvbGxCAwkBAiE9AggFAWkGY2FsbGVyBQ9tb25leUJveEFkZHJlc3MJAAIBAilPbmx5IHRoZSBtb25leSBib3ggY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgMDCQBmAgAABQ1hbW91bnRFbnJvbGxBBgkAZgIAAAUNYW1vdW50RW5yb2xsQgkBB3N1c3BlbmQBAhZFbnJvbGwgYW1vdW50IG5lZ2F0aXZlAwMJAAACBQ1hbW91bnRFbnJvbGxBAAAJAAACBQ1hbW91bnRFbnJvbGxCAAAHCQACAQIQTm8gbW9uZXkgdG8gdGFrZQQGc3Rha2UxAwMJAQ9jb250YWluc0VsZW1lbnQCBQ1zdGFraW5nQXNzZXRzBQtzdHJBc3NldElkQQkAZgIFDWFtb3VudEVucm9sbEEAAAcJAPwHBAUEdGhpcwIMc3Rha2VVbnN0YWtlCQDMCAIGCQDMCAIFDWFtb3VudEVucm9sbEEJAMwIAgULc3RyQXNzZXRJZEEFA25pbAUDbmlsAAADCQAAAgUGc3Rha2UxBQZzdGFrZTEEBnN0YWtlMgMDCQEPY29udGFpbnNFbGVtZW50AgUNc3Rha2luZ0Fzc2V0cwULc3RyQXNzZXRJZEIJAGYCBQ1hbW91bnRFbnJvbGxCAAAHCQD8BwQFBHRoaXMCDHN0YWtlVW5zdGFrZQkAzAgCBgkAzAgCBQ1hbW91bnRFbnJvbGxCCQDMCAIFC3N0ckFzc2V0SWRCBQNuaWwFA25pbAAAAwkAAAIFBnN0YWtlMgUGc3Rha2UyCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQprSW52YXJpYW50BQxpbnZhcmlhbnROZXcJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtCYWxhbmNlQQkAZAIFCGJhbGFuY2VBBQ1hbW91bnRFbnJvbGxBCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrQmFsYW5jZUIJAGQCBQhiYWxhbmNlQgUNYW1vdW50RW5yb2xsQgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBGGtlZXBMaW1pdEZvckZpcnN0SGFydmVzdAEKc2hhcmVMaW1pdAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUBaQkAzAgCCQEMSW50ZWdlckVudHJ5AgULa1NoYXJlTGltaXQFCnNoYXJlTGltaXQFA25pbAFpAQxzdGFrZVVuc3Rha2UDBXN0YWtlBmFtb3VudA1hc3NldElkU3RyaW5nAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQItT25seSBjb250cmFjdCBpdHNlbGYgY2FuIGludm9rZSB0aGlzIGZ1bmN0aW9uBA0kdDAyOTYxNDI5NzE3CQERY2FsY1N0YWtpbmdQYXJhbXMDBQVzdGFrZQUGYW1vdW50CQDZBAEFDWFzc2V0SWRTdHJpbmcEBGNhbGwIBQ0kdDAyOTYxNDI5NzE3Al8xBARhZGRyCAUNJHQwMjk2MTQyOTcxNwJfMgQGcGFyYW1zCAUNJHQwMjk2MTQyOTcxNwJfMwQIcGF5bWVudHMIBQ0kdDAyOTYxNDI5NzE3Al80BANpbnYJAPwHBAUEYWRkcgUEY2FsbAUGcGFyYW1zBQhwYXltZW50cwMJAAACBQNpbnYFA2ludgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJ0eAEGdmVyaWZ5AAQTbXVsdGlTaWduZWRCeUFkbWlucwQSYWRtaW5QdWJLZXkxU2lnbmVkAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUMYWRtaW5QdWJLZXkxAAEAAAQSYWRtaW5QdWJLZXkyU2lnbmVkAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAQUMYWRtaW5QdWJLZXkyAAEAAAQSYWRtaW5QdWJLZXkzU2lnbmVkAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAgUMYWRtaW5QdWJLZXkzAAEAAAkAZwIJAGQCCQBkAgUSYWRtaW5QdWJLZXkxU2lnbmVkBRJhZG1pblB1YktleTJTaWduZWQFEmFkbWluUHViS2V5M1NpZ25lZAACBAckbWF0Y2gwBQJ0eAMJAAECBQckbWF0Y2gwAhdJbnZva2VTY3JpcHRUcmFuc2FjdGlvbgQDaW52BQckbWF0Y2gwBBNjYWxsVGFrZUludG9BY2NvdW50AwkAAAIIBQNpbnYEZEFwcAUEdGhpcwkAAAIIBQNpbnYIZnVuY3Rpb24CGXRha2VJbnRvQWNjb3VudEV4dHJhRnVuZHMHBA1zaWduZWRCeUFkbWluAwMDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABQxhZG1pblB1YktleTEGCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABQxhZG1pblB1YktleTIGCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABQxhZG1pblB1YktleTMGCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABRFhZG1pblB1YktleUludm9rZQMDBRNjYWxsVGFrZUludG9BY2NvdW50BQ1zaWduZWRCeUFkbWluBwYFE211bHRpU2lnbmVkQnlBZG1pbnMFE211bHRpU2lnbmVkQnlBZG1pbnMV5lzM", "height": 2228898, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: CTvrV6qhmSxiMpCsBQPY4gXacNQpyhtuynMb88Ua5kLD Next: none Diff:
OldNewDifferences
1-{-# STDLIB_VERSION 5 #-}
1+{-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "2.0.0"
3535
3636 let q = "_SWOP_amount"
3737
38-let r = "admin_pub_1"
38+let r = "first_harvest"
3939
40-let s = "admin_pub_2"
40+let s = "first_harvest_height"
4141
42-let t = "admin_pub_3"
42+let t = "share_limit_on_first_harvest"
4343
44-let u = "admin_invoke_pub"
44+let u = "base_period"
4545
46-let v = "money_box_address"
46+let v = "period_length"
4747
48-let w = "governance_address"
48+let w = "start_height"
4949
50-let x = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
50+let x = "admin_pub_1"
5151
52-func y (z) = {
53- let A = getString(x, z)
54- if ($isInstanceOf(A, "String"))
52+let y = "admin_pub_2"
53+
54+let z = "admin_pub_3"
55+
56+let A = "admin_invoke_pub"
57+
58+let B = "money_box_address"
59+
60+let C = "governance_address"
61+
62+let D = "voting_address"
63+
64+let E = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
65+
66+func F (G) = {
67+ let H = getString(E, G)
68+ if ($isInstanceOf(H, "String"))
5569 then {
56- let B = A
57- fromBase58String(B)
70+ let I = H
71+ fromBase58String(I)
5872 }
5973 else {
60- let C = A
61- throw((z + "is empty"))
74+ let J = H
75+ throw((G + "is empty"))
6276 }
6377 }
6478
6579
66-let D = y(r)
80+let K = F(x)
6781
68-let E = y(s)
82+let L = F(y)
6983
70-let F = y(t)
84+let M = F(z)
7185
72-let G = y(u)
86+let N = F(A)
7387
74-let H = Address(y(v))
88+let O = Address(F(B))
7589
76-let I = Address(y(w))
90+let P = Address(F(C))
7791
78-let J = Address(y(m))
92+let Q = Address(F(m))
7993
80-let K = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
94+let R = Address(F(D))
8195
82-let L = [toBase58String(K)]
96+let S = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
8397
84-let M = getBooleanValue(this, c)
98+let T = [toBase58String(S)]
8599
86-let N = getStringValue(this, d)
100+let U = valueOrErrorMessage(getInteger(R, u), "Empty kBasePeriod")
87101
88-let O = getStringValue(this, e)
102+let V = valueOrErrorMessage(getInteger(R, w), "Empty kStartHeight")
89103
90-let P = if ((N == "WAVES"))
104+let W = valueOrErrorMessage(getInteger(R, v), "Empty kPeriodLength")
105+
106+let X = ((U + ((height - V) / W)) + 3)
107+
108+let Y = getBooleanValue(this, c)
109+
110+let Z = getStringValue(this, d)
111+
112+let aa = getStringValue(this, e)
113+
114+let ab = if ((Z == "WAVES"))
91115 then unit
92- else fromBase58String(N)
116+ else fromBase58String(Z)
93117
94-let Q = if ((O == "WAVES"))
118+let ac = if ((aa == "WAVES"))
95119 then unit
96- else fromBase58String(O)
120+ else fromBase58String(aa)
97121
98-let R = {
99- let A = P
100- if ($isInstanceOf(A, "ByteVector"))
122+let ad = {
123+ let H = ab
124+ if ($isInstanceOf(H, "ByteVector"))
101125 then {
102- let S = A
103- value(assetInfo(S)).name
126+ let ae = H
127+ value(assetInfo(ae)).name
104128 }
105- else if ($isInstanceOf(A, "Unit"))
129+ else if ($isInstanceOf(H, "Unit"))
106130 then {
107- let T = A
131+ let af = H
108132 "WAVES"
109133 }
110134 else throw("Match error")
111135 }
112136
113-let U = {
114- let A = Q
115- if ($isInstanceOf(A, "ByteVector"))
137+let ag = {
138+ let H = ac
139+ if ($isInstanceOf(H, "ByteVector"))
116140 then {
117- let S = A
118- value(assetInfo(S)).name
141+ let ae = H
142+ value(assetInfo(ae)).name
119143 }
120- else if ($isInstanceOf(A, "Unit"))
144+ else if ($isInstanceOf(H, "Unit"))
121145 then {
122- let T = A
146+ let af = H
123147 "WAVES"
124148 }
125149 else throw("Match error")
126150 }
127151
128-let V = getIntegerValue(this, f)
152+let ah = getIntegerValue(this, f)
129153
130-let W = getIntegerValue(this, g)
154+let ai = getIntegerValue(this, g)
131155
132-let X = fromBase58String(getStringValue(this, h))
156+let aj = fromBase58String(getStringValue(this, h))
133157
134-let Y = getIntegerValue(this, i)
158+let ak = getIntegerValue(this, i)
135159
136-let Z = getIntegerValue(this, k)
160+let al = getIntegerValue(this, k)
137161
138-let aa = getIntegerValue(this, j)
162+let am = getIntegerValue(this, j)
139163
140-let ab = fraction(aa, 40, 100)
164+let an = fraction(am, 40, 100)
141165
142-let ac = 1000000
166+let ao = 1000000
143167
144-let ad = 1000
168+let ap = 1000
145169
146-let ae = 100000000
170+let aq = 100000000
147171
148-let af = 10000000000000000
172+let ar = 10000000000000000
149173
150-let ag = 1000
174+let as = 1000
151175
152-let ah = 8
176+let at = 8
153177
154-let ai = 50
178+let au = 50
155179
156-let aj = 100
180+let av = 100
157181
158-let ak = 90000000
182+let aw = 90000000
159183
160-let al = 110000000
184+let ax = 110000000
161185
162-let am = 50
186+let ay = 50
163187
164-let an = 2
188+let az = 2
165189
166-let ao = 4600000000000000
190+let aA = 4600000000000000
167191
168-func ap (aq) = {
169- let A = aq
170- if ($isInstanceOf(A, "ByteVector"))
192+func aB (aC) = {
193+ let H = aC
194+ if ($isInstanceOf(H, "ByteVector"))
171195 then {
172- let S = A
173- assetBalance(this, S)
196+ let ae = H
197+ assetBalance(this, ae)
174198 }
175- else if ($isInstanceOf(A, "Unit"))
199+ else if ($isInstanceOf(H, "Unit"))
176200 then {
177- let T = A
201+ let af = H
178202 wavesBalance(this).available
179203 }
180204 else throw("Match error")
181205 }
182206
183207
184-func ar (aq) = {
185- let as = {
186- let A = aq
187- if ($isInstanceOf(A, "ByteVector"))
208+func aD (aC) = {
209+ let aE = {
210+ let H = aC
211+ if ($isInstanceOf(H, "ByteVector"))
188212 then {
189- let at = A
190- if ((at == K))
191- then getInteger(J, ((("rpd_balance_" + toBase58String(at)) + "_") + toString(this)))
213+ let aF = H
214+ if ((aF == S))
215+ then getInteger(Q, ((("rpd_balance_" + toBase58String(aF)) + "_") + toString(this)))
192216 else 0
193217 }
194- else if ($isInstanceOf(A, "Unit"))
218+ else if ($isInstanceOf(H, "Unit"))
195219 then 0
196220 else throw("Match error")
197221 }
198- let A = as
199- if ($isInstanceOf(A, "Int"))
222+ let H = aE
223+ if ($isInstanceOf(H, "Int"))
200224 then {
201- let au = A
202- au
225+ let aG = H
226+ aG
203227 }
204228 else 0
205229 }
206230
207231
208-let av = ar(P)
232+let aH = aD(ab)
209233
210-let aw = ar(Q)
234+let aI = aD(ac)
211235
212-let ax = (V - av)
236+let aJ = (ah - aH)
213237
214-let ay = (W - aw)
238+let aK = (ai - aI)
215239
216-let az = (ap(P) + av)
240+let aL = (aB(ab) + aH)
217241
218-let aA = (ap(Q) + aw)
242+let aM = (aB(ac) + aI)
219243
220-let aB = if ((az >= V))
221- then (aA >= W)
244+let aN = if ((aL >= ah))
245+ then (aM >= ai)
222246 else false
223247
224-func aC (aD,aE) = ((fraction(af, aD, aE) + fraction(af, aE, aD)) / 2)
248+func aO (aP,aQ) = ((fraction(ar, aP, aQ) + fraction(ar, aQ, aP)) / 2)
225249
226250
227-func aF (aD,aE) = {
228- let aG = aC(aD, aE)
229- (fraction((aD + aE), af, pow(aG, ah, am, an, ah, CEILING)) + (2 * fraction(toInt(pow(fraction(toBigInt(aD), toBigInt(aE), toBigInt(ae)), 0, toBigInt(5), 1, (ah / 2), DOWN)), pow((aG - ao), ah, am, an, ah, DOWN), ae)))
251+func aR (aP,aQ) = {
252+ let aS = aO(aP, aQ)
253+ (fraction((aP + aQ), ar, pow(aS, at, ay, az, at, CEILING)) + (2 * fraction(toInt(pow(fraction(toBigInt(aP), toBigInt(aQ), toBigInt(aq)), 0, toBigInt(5), 1, (at / 2), DOWN)), pow((aS - aA), at, ay, az, at, DOWN), aq)))
230254 }
231255
232256
233-func aH (aI,aJ,aK,aL) = {
234- let aM = (af - ((af * 1) / 10000000))
235- let aN = (aI - aJ)
236- let aD = (V + aK)
237- let aE = (W + aK)
238- func aO (aP,aQ) = if ((aP._1 == -1))
257+func aT (aU,aV,aW,aX) = {
258+ let aY = (ar - ((ar * 1) / 10000000))
259+ let aZ = (aU - aV)
260+ let aP = (ah + aW)
261+ let aQ = (ai + aW)
262+ func ba (bb,bc) = if ((bb._1 == -1))
239263 then {
240- let aR = (aI - (((aQ * aN) / 3) / ad))
241- let aS = if ((aL == P))
242- then aF(aD, (W - aR))
243- else aF((V - aR), aE)
244- if ((aS > Z))
245- then $Tuple2(aR, aS)
264+ let bd = (aU - (((bc * aZ) / 3) / ap))
265+ let be = if ((aX == ab))
266+ then aR(aP, (ai - bd))
267+ else aR((ah - bd), aQ)
268+ if ((be > al))
269+ then $Tuple2(bd, be)
246270 else $Tuple2(-1, 0)
247271 }
248- else aP
272+ else bb
249273
250- let aT = aO($Tuple2(-1, 0), 3000)
251- if ((0 > aT._1))
274+ let bf = ba($Tuple2(-1, 0), 3000)
275+ if ((0 > bf._1))
252276 then throw("Price is worse than minReceived")
253277 else {
254- let aU = if ((aL == P))
255- then aF(aD, (W - aI))
256- else if ((aL == Q))
257- then aF((V - aI), aE)
278+ let bg = if ((aX == ab))
279+ then aR(aP, (ai - aU))
280+ else if ((aX == ac))
281+ then aR((ah - aU), aQ)
258282 else throw("Wrong asset in payment")
259- if ((Z > aU))
260- then if ((aM >= fraction(af, Z, aU)))
283+ if ((al > bg))
284+ then if ((aY >= fraction(ar, al, bg)))
261285 then throw("The requested price is too not profitable for user")
262286 else {
263- let aV = {
264- let aW = [25, 200, 500]
265- let aX = size(aW)
266- let aY = $Tuple2(-1, 0)
267- func aZ (ba,bb) = if ((bb >= aX))
268- then ba
269- else aO(ba, aW[bb])
287+ let bh = {
288+ let bi = [25, 200, 500]
289+ let bj = size(bi)
290+ let bk = $Tuple2(-1, 0)
291+ func bl (bm,bn) = if ((bn >= bj))
292+ then bm
293+ else ba(bm, bi[bn])
270294
271- func bc (ba,bb) = if ((bb >= aX))
272- then ba
295+ func bo (bm,bn) = if ((bn >= bj))
296+ then bm
273297 else throw("List size exceeds 3")
274298
275- bc(aZ(aZ(aZ(aY, 0), 1), 2), 3)
299+ bo(bl(bl(bl(bk, 0), 1), 2), 3)
276300 }
277- if ((0 > aV._1))
278- then aT._1
279- else aV._1
301+ if ((0 > bh._1))
302+ then bf._1
303+ else bh._1
280304 }
281305 else {
282- let aV = {
283- let aW = [-500, -200, -25]
284- let aX = size(aW)
285- let aY = $Tuple2(-1, 0)
286- func aZ (ba,bb) = if ((bb >= aX))
287- then ba
288- else aO(ba, aW[bb])
306+ let bh = {
307+ let bi = [-500, -200, -25]
308+ let bj = size(bi)
309+ let bk = $Tuple2(-1, 0)
310+ func bl (bm,bn) = if ((bn >= bj))
311+ then bm
312+ else ba(bm, bi[bn])
289313
290- func bc (ba,bb) = if ((bb >= aX))
291- then ba
314+ func bo (bm,bn) = if ((bn >= bj))
315+ then bm
292316 else throw("List size exceeds 3")
293317
294- bc(aZ(aZ(aZ(aY, 0), 1), 2), 3)
318+ bo(bl(bl(bl(bk, 0), 1), 2), 3)
295319 }
296- let bd = if ((0 > aV._1))
297- then $Tuple2(aI, aU)
298- else aV
299- if ((aM >= fraction(af, Z, bd._2)))
320+ let bp = if ((0 > bh._1))
321+ then $Tuple2(aU, bg)
322+ else bh
323+ if ((aY >= fraction(ar, al, bp._2)))
300324 then throw("The requested price is too not profitable for user")
301- else bd._1
325+ else bp._1
302326 }
303327 }
304328 }
305329
306330
307-func be (aq) = {
308- let A = aq
309- if ($isInstanceOf(A, "ByteVector"))
331+func bq (aC) = {
332+ let H = aC
333+ if ($isInstanceOf(H, "ByteVector"))
310334 then {
311- let S = A
312- let bf = toBase58String(S)
313- let bg = valueOrErrorMessage(assetInfo(S), (("Asset " + bf) + " doesn't exist"))
314- $Tuple3(bf, bg.name, bg.decimals)
335+ let ae = H
336+ let br = toBase58String(ae)
337+ let bs = valueOrErrorMessage(assetInfo(ae), (("Asset " + br) + " doesn't exist"))
338+ $Tuple3(br, bs.name, bs.decimals)
315339 }
316- else if ($isInstanceOf(A, "Unit"))
340+ else if ($isInstanceOf(H, "Unit"))
317341 then {
318- let T = A
342+ let af = H
319343 $Tuple3("WAVES", "WAVES", 8)
320344 }
321345 else throw("Match error")
322346 }
323347
324348
325-func bh (bi) = [BooleanEntry(c, false), StringEntry(l, bi)]
349+func bt (bu) = [BooleanEntry(c, false), StringEntry(l, bu)]
326350
327351
328-func bj () = throw("DApp is already active")
352+func bv () = throw("DApp is already active")
329353
330354
331-func bk () = if (M)
355+func bw () = if (Y)
332356 then unit
333357 else throw("DApp is inactive at this moment")
334358
335359
336-func bl (au) = if (containsElement([D, E, F], au.callerPublicKey))
360+func bx (aG) = if (containsElement([K, L, M], aG.callerPublicKey))
337361 then unit
338362 else throw("Only admin can call this function")
339363
340364
341-func bm () = throw(((("Incorrect assets attached. Expected: " + N) + " and ") + O))
365+func by () = throw(((("Incorrect assets attached. Expected: " + Z) + " and ") + aa))
342366
343367
344-func bn () = throw("One attached payment expected")
368+func bz () = throw("One attached payment expected")
345369
346370
347-func bo (bp,bq,br) = throw(((((((((("New balance in assets of the DApp is less than threshold " + toString(bp)) + ": ") + toString(bq)) + " ") + R) + ", ") + toString(br)) + " ") + U))
371+func bA (bB,bC,bD) = throw(((((((((("New balance in assets of the DApp is less than threshold " + toString(bB)) + ": ") + toString(bC)) + " ") + ad) + ", ") + toString(bD)) + " ") + ag))
348372
349373
350-func bs () = bh(((((((((((((((("Suspicious state. Actual balances: " + toString(V)) + " ") + R) + ", ") + toString(W)) + " ") + U) + ". State: ") + toString(ap(P))) + " ") + R) + ", ") + toString(ap(Q))) + " ") + U))
374+func bE () = bt(((((((((((((((("Suspicious state. Actual balances: " + toString(ah)) + " ") + ad) + ", ") + toString(ai)) + " ") + ag) + ". State: ") + toString(aB(ab))) + " ") + ad) + ", ") + toString(aB(ac))) + " ") + ag))
351375
352376
353-func bt (bu,aq) = if (bu)
354- then $Tuple2("lockNeutrino", J)
355- else $Tuple2("unlockNeutrino", J)
377+func bF (bG,aC) = if (bG)
378+ then $Tuple2("lockNeutrino", Q)
379+ else $Tuple2("unlockNeutrino", Q)
356380
357381
358-func bv (bu,bw,aq) = if (bu)
382+func bH (bG,bI,aC) = if (bG)
359383 then {
360- let bx = bt(bu, aq)
361- let by = bx._1
362- let bz = bx._2
363- $Tuple4(by, bz, nil, [AttachedPayment(aq, bw)])
384+ let bJ = bF(bG, aC)
385+ let bK = bJ._1
386+ let bL = bJ._2
387+ $Tuple4(bK, bL, nil, [AttachedPayment(aC, bI)])
364388 }
365389 else {
366- let bA = bt(bu, aq)
367- let by = bA._1
368- let bz = bA._2
369- $Tuple4(by, bz, [bw, toBase58String(aq)], nil)
390+ let bM = bF(bG, aC)
391+ let bK = bM._1
392+ let bL = bM._2
393+ $Tuple4(bK, bL, [bI, toBase58String(aC)], nil)
370394 }
371395
372396
373-func bB (bC) = {
374- let bD = valueOrElse(getInteger(I, (toString(bC) + q)), 0)
375- let bE = split(getStringValue(x, p), ",")
376- let bF = split(getStringValue(x, o), ",")
377- if (if ((bD >= parseIntValue(bE[0])))
378- then (parseIntValue(bE[1]) > bD)
397+func bN (bO) = {
398+ let bP = valueOrElse(getInteger(P, (toString(bO) + q)), 0)
399+ let bQ = split(getStringValue(E, p), ",")
400+ let bR = split(getStringValue(E, o), ",")
401+ if (if ((bP >= parseIntValue(bQ[0])))
402+ then (parseIntValue(bQ[1]) > bP)
379403 else false)
380- then (ac - parseIntValue(bF[0]))
381- else if (if ((bD >= parseIntValue(bE[1])))
382- then (parseIntValue(bE[2]) > bD)
404+ then (ao - parseIntValue(bR[0]))
405+ else if (if ((bP >= parseIntValue(bQ[1])))
406+ then (parseIntValue(bQ[2]) > bP)
383407 else false)
384- then (ac - parseIntValue(bF[1]))
385- else if (if ((bD >= parseIntValue(bE[2])))
386- then (parseIntValue(bE[3]) > bD)
408+ then (ao - parseIntValue(bR[1]))
409+ else if (if ((bP >= parseIntValue(bQ[2])))
410+ then (parseIntValue(bQ[3]) > bP)
387411 else false)
388- then (ac - parseIntValue(bF[2]))
389- else if (if ((bD >= parseIntValue(bE[3])))
390- then (parseIntValue(bE[4]) > bD)
412+ then (ao - parseIntValue(bR[2]))
413+ else if (if ((bP >= parseIntValue(bQ[3])))
414+ then (parseIntValue(bQ[4]) > bP)
391415 else false)
392- then (ac - parseIntValue(bF[3]))
393- else if ((bD >= parseIntValue(bE[4])))
394- then (ac - parseIntValue(bF[4]))
395- else ac
416+ then (ao - parseIntValue(bR[3]))
417+ else if ((bP >= parseIntValue(bQ[4])))
418+ then (ao - parseIntValue(bR[4]))
419+ else ao
396420 }
397421
398422
399-@Callable(au)
400-func init () = {
401- let bG = $Tuple2(au.payments[0].amount, au.payments[0].assetId)
402- let bH = bG._1
403- let bI = bG._2
404- let bJ = $Tuple2(au.payments[1].amount, au.payments[1].assetId)
405- let bK = bJ._1
406- let bL = bJ._2
407- let bM = be(bI)
408- let bN = bM._1
409- let bO = bM._2
410- let bP = bM._3
411- let bQ = be(bL)
412- let bR = bQ._1
413- let bS = bQ._2
414- let bT = bQ._3
423+@Callable(aG)
424+func init (bS) = {
425+ let bT = $Tuple2(aG.payments[0].amount, aG.payments[0].assetId)
426+ let bU = bT._1
427+ let bV = bT._2
428+ let bW = $Tuple2(aG.payments[1].amount, aG.payments[1].assetId)
429+ let bX = bW._1
430+ let bY = bW._2
431+ let bZ = bq(bV)
432+ let ca = bZ._1
433+ let cb = bZ._2
434+ let cc = bZ._3
435+ let cd = bq(bY)
436+ let ce = cd._1
437+ let cf = cd._2
438+ let cg = cd._3
415439 if (isDefined(getBoolean(this, c)))
416- then bj()
417- else if ((bI == bL))
440+ then bv()
441+ else if ((bV == bY))
418442 then throw("Assets must be different")
419443 else {
420- let bU = ((("s" + take(bO, 7)) + "_") + take(bS, 7))
421- let bV = ((((("ShareToken of SwopFi protocol for " + bO) + " and ") + bS) + " at address ") + toString(this))
422- let bW = ((bP + bT) / 2)
423- let bX = fraction(pow(bH, bP, 5, 1, bP, DOWN), pow(bK, bT, 5, 1, bT, DOWN), pow(10, 0, bW, 0, 0, DOWN))
424- let bY = Issue(bU, bV, bX, bW, true)
425- let bZ = calculateAssetId(bY)
426- let ca = aF(bH, bK)
427- let cb = if (containsElement(L, bN))
428- then invoke(this, "stakeUnstake", [true, bH, bN], nil)
444+ let ch = ((("s" + take(cb, 7)) + "_") + take(cf, 7))
445+ let ci = ((((("ShareToken of SwopFi protocol for " + cb) + " and ") + cf) + " at address ") + toString(this))
446+ let cj = ((cc + cg) / 2)
447+ let ck = fraction(pow(bU, cc, 5, 1, cc, DOWN), pow(bX, cg, 5, 1, cg, DOWN), pow(10, 0, cj, 0, 0, DOWN))
448+ let cl = Issue(ch, ci, ck, cj, true)
449+ let cm = calculateAssetId(cl)
450+ let cn = aR(bU, bX)
451+ let co = if (containsElement(T, ca))
452+ then invoke(this, "stakeUnstake", [true, bU, ca], nil)
429453 else 0
430- if ((cb == cb))
454+ if ((co == co))
431455 then {
432- let cc = if (containsElement(L, bR))
433- then invoke(this, "stakeUnstake", [true, bK, bR], nil)
456+ let cp = if (containsElement(T, ce))
457+ then invoke(this, "stakeUnstake", [true, bX, ce], nil)
434458 else 0
435- if ((cc == cc))
436- then [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bN), StringEntry(e, bR), IntegerEntry(f, bH), IntegerEntry(g, bK), IntegerEntry(k, ca), IntegerEntry(j, getIntegerValue(x, "base_fee_flat")), bY, StringEntry(h, toBase58String(bZ)), IntegerEntry(i, bX), ScriptTransfer(au.caller, bX, bZ)]
459+ if ((cp == cp))
460+ then {
461+ let cq = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, ca), StringEntry(e, ce), IntegerEntry(f, bU), IntegerEntry(g, bX), IntegerEntry(k, cn), IntegerEntry(j, getIntegerValue(E, "base_fee_flat")), cl, StringEntry(h, toBase58String(cm)), IntegerEntry(i, ck), ScriptTransfer(aG.caller, ck, cm)]
462+ if (bS)
463+ then (cq ++ [BooleanEntry(r, bS), IntegerEntry(s, (V + (X * W)))])
464+ else cq
465+ }
437466 else throw("Strict value is not equal to itself.")
438467 }
439468 else throw("Strict value is not equal to itself.")
442471
443472
444473
445-@Callable(au)
446-func replenishWithTwoTokens () = valueOrElse(bk(), {
447- let bI = au.payments[0].assetId
448- let bL = au.payments[1].assetId
449- let cd = fraction(ae, au.payments[0].amount, V)
450- let ce = fraction(ae, au.payments[1].amount, W)
451- let cf = be(bI)
452- let bN = cf._1
453- let bO = cf._2
454- let bP = cf._3
455- let cg = be(bL)
456- let bR = cg._1
457- let bS = cg._2
458- let bT = cg._3
459- let ch = if ((ce > cd))
474+@Callable(aG)
475+func replenishWithTwoTokens () = valueOrElse(bw(), {
476+ let bV = aG.payments[0].assetId
477+ let bY = aG.payments[1].assetId
478+ let cr = fraction(aq, aG.payments[0].amount, ah)
479+ let cs = fraction(aq, aG.payments[1].amount, ai)
480+ let ct = bq(bV)
481+ let ca = ct._1
482+ let cb = ct._2
483+ let cc = ct._3
484+ let cu = bq(bY)
485+ let ce = cu._1
486+ let cf = cu._2
487+ let cg = cu._3
488+ let cv = if ((cs > cr))
460489 then {
461- let ci = fraction(W, cd, ae, CEILING)
462- $Tuple5(au.payments[0].amount, ci, (au.payments[1].amount - ci), bL, cd)
490+ let cw = fraction(ai, cr, aq, CEILING)
491+ $Tuple5(aG.payments[0].amount, cw, (aG.payments[1].amount - cw), bY, cr)
463492 }
464493 else {
465- let ci = fraction(V, ce, ae, CEILING)
466- $Tuple5(ci, au.payments[1].amount, (au.payments[0].amount - ci), bI, ce)
494+ let cw = fraction(ah, cs, aq, CEILING)
495+ $Tuple5(cw, aG.payments[1].amount, (aG.payments[0].amount - cw), bV, cs)
467496 }
468- let bH = ch._1
469- let bK = ch._2
470- let cj = ch._3
471- let ck = ch._4
472- let cl = ch._5
473- let cm = fraction(cl, Y, ae)
474- if ((size(au.payments) != 2))
497+ let bU = cv._1
498+ let bX = cv._2
499+ let cx = cv._3
500+ let cy = cv._4
501+ let cz = cv._5
502+ let cA = fraction(cz, ak, aq)
503+ if ((size(aG.payments) != 2))
475504 then throw("Two attached assets expected")
476- else if (if ((bI != P))
505+ else if (if ((bV != ab))
477506 then true
478- else (bL != Q))
479- then bm()
480- else if ((cm == 0))
507+ else (bY != ac))
508+ then by()
509+ else if ((cA == 0))
481510 then throw("Too small amount to replenish")
482- else if ((0 > cj))
511+ else if ((0 > cx))
483512 then throw("Change < 0")
484- else if (!(aB))
485- then ([ScriptTransfer(au.caller, bH, bI), ScriptTransfer(au.caller, bK, bL)] ++ bs())
513+ else if (!(aN))
514+ then ([ScriptTransfer(aG.caller, bU, bV), ScriptTransfer(aG.caller, bX, bY)] ++ bE())
486515 else {
487- let cb = if (containsElement(L, bN))
488- then invoke(this, "stakeUnstake", [true, bH, bN], nil)
516+ let co = if (containsElement(T, ca))
517+ then invoke(this, "stakeUnstake", [true, bU, ca], nil)
489518 else 0
490- if ((cb == cb))
519+ if ((co == co))
491520 then {
492- let cc = if (containsElement(L, bR))
493- then invoke(this, "stakeUnstake", [true, bK, bR], nil)
521+ let cp = if (containsElement(T, ce))
522+ then invoke(this, "stakeUnstake", [true, bX, ce], nil)
494523 else 0
495- if ((cc == cc))
496- then [IntegerEntry(f, (V + bH)), IntegerEntry(g, (W + bK)), IntegerEntry(i, (Y + cm)), IntegerEntry(k, aF((V + bH), (W + bK))), Reissue(X, cm, true), ScriptTransfer(au.caller, cm, X), ScriptTransfer(au.caller, cj, ck)]
524+ if ((cp == cp))
525+ then [IntegerEntry(f, (ah + bU)), IntegerEntry(g, (ai + bX)), IntegerEntry(i, (ak + cA)), IntegerEntry(k, aR((ah + bU), (ai + bX))), Reissue(aj, cA, true), ScriptTransfer(aG.caller, cA, aj), ScriptTransfer(aG.caller, cx, cy)]
497526 else throw("Strict value is not equal to itself.")
498527 }
499528 else throw("Strict value is not equal to itself.")
502531
503532
504533
505-@Callable(au)
506-func replenishWithOneToken (cn,co) = valueOrElse(bk(), {
507- let cp = $Tuple2(au.payments[0].amount, au.payments[0].assetId)
508- let cq = cp._1
509- let cr = cp._2
510- let cs = be(cr)
511- let ct = cs._1
512- let cu = cs._2
513- let cv = cs._3
514- let cw = 5000000
515- let cx = 50000000
516- let cy = if ((cx > cq))
534+@Callable(aG)
535+func replenishWithOneToken (cB,cC) = valueOrElse(bw(), {
536+ let cD = $Tuple2(aG.payments[0].amount, aG.payments[0].assetId)
537+ let cE = cD._1
538+ let cF = cD._2
539+ let cG = bq(cF)
540+ let cH = cG._1
541+ let cI = cG._2
542+ let cJ = cG._3
543+ let cK = 5000000
544+ let cL = 50000000
545+ let cM = if ((cL > cE))
517546 then 100000
518547 else 1
519- let cz = (ae - ((ae * cy) / 10000000))
520- let cA = (ae + ((ae * cy) / 10000000))
521- let cB = (ae - ((ae * 1) / 10000000))
522- if ((cw > cq))
523- then throw((((("Payment amount " + toString(cq)) + " does not exceed the minimum amount of ") + toString(cw)) + " tokens"))
524- else if ((size(au.payments) != 1))
525- then bn()
526- else if (!(aB))
527- then ([ScriptTransfer(au.caller, cq, cr)] ++ bs())
528- else if (if ((cr != P))
529- then (cr != Q)
548+ let cN = (aq - ((aq * cM) / 10000000))
549+ let cO = (aq + ((aq * cM) / 10000000))
550+ let cP = (aq - ((aq * 1) / 10000000))
551+ if ((cK > cE))
552+ then throw((((("Payment amount " + toString(cE)) + " does not exceed the minimum amount of ") + toString(cK)) + " tokens"))
553+ else if ((size(aG.payments) != 1))
554+ then bz()
555+ else if (!(aN))
556+ then ([ScriptTransfer(aG.caller, cE, cF)] ++ bE())
557+ else if (if ((cF != ab))
558+ then (cF != ac)
530559 else false)
531- then bm()
560+ then by()
532561 else {
533- let cC = if ((cr == P))
534- then $Tuple6((cq - cn), co, (V + cn), (W - co), (V + cq), W)
535- else $Tuple6(co, (cq - cn), (V - co), (W + cn), V, (W + cq))
536- let cD = cC._1
537- let cE = cC._2
538- let cF = cC._3
539- let cG = cC._4
540- let cH = cC._5
541- let cI = cC._6
542- let cJ = aF(cF, cG)
543- let cK = (fraction(af, cF, cG) / fraction(ae, cD, cE))
544- let cL = fraction((cH + cI), ai, (2 * aj))
545- if (if ((cB >= fraction(ae, Z, cJ)))
562+ let cQ = if ((cF == ab))
563+ then $Tuple6((cE - cB), cC, (ah + cB), (ai - cC), (ah + cE), ai)
564+ else $Tuple6(cC, (cE - cB), (ah - cC), (ai + cB), ah, (ai + cE))
565+ let cR = cQ._1
566+ let cS = cQ._2
567+ let cT = cQ._3
568+ let cU = cQ._4
569+ let cV = cQ._5
570+ let cW = cQ._6
571+ let cX = aR(cT, cU)
572+ let cY = (fraction(ar, cT, cU) / fraction(aq, cR, cS))
573+ let cZ = fraction((cV + cW), au, (2 * av))
574+ if (if ((cP >= fraction(aq, al, cX)))
546575 then true
547- else (Z > cJ))
576+ else (al > cX))
548577 then throw("Incorrect virtualSwapTokenPay or virtualSwapTokenGet value")
549- else if (if ((cz > cK))
578+ else if (if ((cN > cY))
550579 then true
551- else (cK > cA))
580+ else (cY > cO))
552581 then throw("Swap with virtualSwapTokenPay and virtualSwapTokenGet is possible, but ratio after virtual swap is incorrect")
553- else if (if ((cL > cH))
582+ else if (if ((cZ > cV))
554583 then true
555- else (cL > cI))
556- then bo(cL, cH, cI)
584+ else (cZ > cW))
585+ then bA(cZ, cV, cW)
557586 else {
558- let cd = fraction(cD, ae, cF)
559- let ce = fraction(cE, ae, cG)
560- let cm = fraction(min([cd, ce]), Y, ae)
561- let cM = fraction(cm, (ac - (aa / 2)), ac)
562- let cN = fraction(cm, (ab / 2), ac)
563- let cO = fraction(cN, V, Y)
564- let cP = fraction(cN, W, Y)
565- let cQ = if ((ct == N))
566- then $Tuple3((cq - cO), cP, O)
567- else $Tuple3((cq - cP), cO, N)
568- let cR = cQ._1
569- let cS = cQ._2
570- let cT = cQ._3
571- let cb = if (containsElement(L, ct))
572- then invoke(this, "stakeUnstake", [true, cR, ct], nil)
587+ let cr = fraction(cR, aq, cT)
588+ let cs = fraction(cS, aq, cU)
589+ let cA = fraction(min([cr, cs]), ak, aq)
590+ let da = fraction(cA, (ao - (am / 2)), ao)
591+ let db = fraction(cA, (an / 2), ao)
592+ let dc = fraction(db, ah, ak)
593+ let dd = fraction(db, ai, ak)
594+ let de = if ((cH == Z))
595+ then $Tuple3((cE - dc), dd, aa)
596+ else $Tuple3((cE - dd), dc, Z)
597+ let df = de._1
598+ let dg = de._2
599+ let dh = de._3
600+ let co = if (containsElement(T, cH))
601+ then invoke(this, "stakeUnstake", [true, df, cH], nil)
573602 else 0
574- if ((cb == cb))
603+ if ((co == co))
575604 then {
576- let cc = if (containsElement(L, cT))
577- then invoke(this, "stakeUnstake", [false, cS, cT], nil)
605+ let cp = if (containsElement(T, dh))
606+ then invoke(this, "stakeUnstake", [false, dg, dh], nil)
578607 else 0
579- if ((cc == cc))
580- then [Reissue(X, cM, true), ScriptTransfer(au.caller, cM, X), ScriptTransfer(H, cO, P), ScriptTransfer(H, cP, Q), IntegerEntry(f, (cH - cO)), IntegerEntry(g, (cI - cP)), IntegerEntry(i, (Y + cM)), IntegerEntry(k, aF((cH - cO), (cI - cP)))]
608+ if ((cp == cp))
609+ then [Reissue(aj, da, true), ScriptTransfer(aG.caller, da, aj), ScriptTransfer(O, dc, ab), ScriptTransfer(O, dd, ac), IntegerEntry(f, (cV - dc)), IntegerEntry(g, (cW - dd)), IntegerEntry(i, (ak + da)), IntegerEntry(k, aR((cV - dc), (cW - dd)))]
581610 else throw("Strict value is not equal to itself.")
582611 }
583612 else throw("Strict value is not equal to itself.")
587616
588617
589618
590-@Callable(au)
591-func withdraw () = valueOrElse(bk(), {
592- let cU = $Tuple2(au.payments[0].amount, au.payments[0].assetId)
593- let cq = cU._1
594- let cr = cU._2
595- let cV = fraction(cq, V, Y)
596- let cW = fraction(cq, W, Y)
597- let ca = aF((V - cV), (W - cW))
598- if ((size(au.payments) != 1))
599- then bn()
600- else if ((cr != X))
601- then throw(("Incorrect asset attached. Expected: " + toBase58String(X)))
602- else if (!(aB))
603- then ([ScriptTransfer(au.caller, cq, cr)] ++ bs())
619+@Callable(aG)
620+func withdraw () = valueOrElse(bw(), {
621+ let di = $Tuple2(aG.payments[0].amount, aG.payments[0].assetId)
622+ let cE = di._1
623+ let cF = di._2
624+ let dj = fraction(cE, ah, ak)
625+ let dk = fraction(cE, ai, ak)
626+ let cn = aR((ah - dj), (ai - dk))
627+ if ((size(aG.payments) != 1))
628+ then bz()
629+ else if ((cF != aj))
630+ then throw(("Incorrect asset attached. Expected: " + toBase58String(aj)))
631+ else if (!(aN))
632+ then ([ScriptTransfer(aG.caller, cE, cF)] ++ bE())
604633 else {
605- let cb = if (containsElement(L, N))
606- then invoke(this, "stakeUnstake", [false, cV, N], nil)
634+ let co = if (containsElement(T, Z))
635+ then invoke(this, "stakeUnstake", [false, dj, Z], nil)
607636 else 0
608- if ((cb == cb))
637+ if ((co == co))
609638 then {
610- let cc = if (containsElement(L, O))
611- then invoke(this, "stakeUnstake", [false, cW, O], nil)
639+ let cp = if (containsElement(T, aa))
640+ then invoke(this, "stakeUnstake", [false, dk, aa], nil)
612641 else 0
613- if ((cc == cc))
614- then [IntegerEntry(f, (V - cV)), IntegerEntry(g, (W - cW)), IntegerEntry(i, (Y - cq)), IntegerEntry(k, ca), Burn(X, cq), ScriptTransfer(au.caller, cV, P), ScriptTransfer(au.caller, cW, Q)]
642+ if ((cp == cp))
643+ then [IntegerEntry(f, (ah - dj)), IntegerEntry(g, (ai - dk)), IntegerEntry(i, (ak - cE)), IntegerEntry(k, cn), Burn(aj, cE), ScriptTransfer(aG.caller, dj, ab), ScriptTransfer(aG.caller, dk, ac)]
615644 else throw("Strict value is not equal to itself.")
616645 }
617646 else throw("Strict value is not equal to itself.")
620649
621650
622651
623-@Callable(au)
624-func exchange (cX,cY) = valueOrElse(bk(), {
625- let cZ = $Tuple2(au.payments[0].amount, au.payments[0].assetId)
626- let cq = cZ._1
627- let cr = cZ._2
628- if ((0 >= cX))
629- then throw(("Estimated amount must be positive. Actual: " + toString(cX)))
630- else if ((cY > cX))
652+@Callable(aG)
653+func exchange (dl,dm) = valueOrElse(bw(), {
654+ let dn = $Tuple2(aG.payments[0].amount, aG.payments[0].assetId)
655+ let cE = dn._1
656+ let cF = dn._2
657+ if ((0 >= dl))
658+ then throw(("Estimated amount must be positive. Actual: " + toString(dl)))
659+ else if ((dm > dl))
631660 then throw("Minimal amount can't be greater than estimated.")
632- else if ((size(au.payments) != 1))
633- then bn()
634- else if (!(aB))
635- then ([ScriptTransfer(au.caller, cq, cr)] ++ bs())
636- else if (if ((cr != P))
637- then (cr != Q)
661+ else if ((size(aG.payments) != 1))
662+ then bz()
663+ else if (!(aN))
664+ then ([ScriptTransfer(aG.caller, cE, cF)] ++ bE())
665+ else if (if ((cF != ab))
666+ then (cF != ac)
638667 else false)
639- then bm()
640- else if ((10000000 > cq))
668+ then by()
669+ else if ((10000000 > cE))
641670 then throw("Only swap of 10.000000 or more tokens is allowed")
642- else if (if ((ak > fraction(ae, cY, cq)))
671+ else if (if ((aw > fraction(aq, dm, cE)))
643672 then true
644- else (fraction(ae, cX, cq) > al))
673+ else (fraction(aq, dl, cE) > ax))
645674 then throw("Incorrect args and pmt ratio")
646675 else {
647- let da = if ((cr == P))
648- then Q
649- else P
650- let bw = aH(cX, cY, cq, cr)
651- let db = bB(au.originCaller)
652- let dc = fraction(bw, fraction(ab, db, ac, CEILING), ac)
653- let dd = fraction(bw, (ac - fraction(aa, db, ac, CEILING)), ac)
654- let de = if ((cr == P))
655- then $Tuple2((V + cq), ((W - dd) - dc))
656- else $Tuple2(((V - dd) - dc), (W + cq))
657- let cH = de._1
658- let cI = de._2
659- let cL = fraction((cH + cI), ai, (2 * aj))
660- if (if ((cL > cH))
676+ let do = if ((cF == ab))
677+ then ac
678+ else ab
679+ let bI = aT(dl, dm, cE, cF)
680+ let dp = bN(aG.originCaller)
681+ let dq = fraction(bI, fraction(an, dp, ao, CEILING), ao)
682+ let dr = fraction(bI, (ao - fraction(am, dp, ao, CEILING)), ao)
683+ let ds = if ((cF == ab))
684+ then $Tuple2((ah + cE), ((ai - dr) - dq))
685+ else $Tuple2(((ah - dr) - dq), (ai + cE))
686+ let cV = ds._1
687+ let cW = ds._2
688+ let cZ = fraction((cV + cW), au, (2 * av))
689+ if (if ((cZ > cV))
661690 then true
662- else (cL > cI))
663- then bo(cL, cH, cI)
691+ else (cZ > cW))
692+ then bA(cZ, cV, cW)
664693 else {
665- let df = be(cr)
666- let ct = df._1
667- let cu = df._2
668- let cv = df._3
669- let dg = be(da)
670- let dh = dg._1
671- let di = dg._2
672- let dj = dg._3
673- let cb = if (containsElement(L, ct))
674- then invoke(this, "stakeUnstake", [true, cq, ct], nil)
694+ let dt = bq(cF)
695+ let cH = dt._1
696+ let cI = dt._2
697+ let cJ = dt._3
698+ let du = bq(do)
699+ let dv = du._1
700+ let dw = du._2
701+ let dx = du._3
702+ let co = if (containsElement(T, cH))
703+ then invoke(this, "stakeUnstake", [true, cE, cH], nil)
675704 else 0
676- if ((cb == cb))
705+ if ((co == co))
677706 then {
678- let cc = if (containsElement(L, dh))
679- then invoke(this, "stakeUnstake", [false, (dd + dc), dh], nil)
707+ let cp = if (containsElement(T, dv))
708+ then invoke(this, "stakeUnstake", [false, (dr + dq), dv], nil)
680709 else 0
681- if ((cc == cc))
682- then $Tuple2([IntegerEntry(f, cH), IntegerEntry(g, cI), IntegerEntry(k, aF(cH, cI)), ScriptTransfer(au.caller, dd, da), ScriptTransfer(H, dc, da)], $Tuple2(dd, da))
710+ if ((cp == cp))
711+ then $Tuple2([IntegerEntry(f, cV), IntegerEntry(g, cW), IntegerEntry(k, aR(cV, cW)), ScriptTransfer(aG.caller, dr, do), ScriptTransfer(O, dq, do)], [dr, do])
683712 else throw("Strict value is not equal to itself.")
684713 }
685714 else throw("Strict value is not equal to itself.")
689718
690719
691720
692-@Callable(au)
693-func shutdown () = valueOrElse(bl(au), if (!(M))
721+@Callable(aG)
722+func shutdown () = valueOrElse(bx(aG), if (!(Y))
694723 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, l), "the cause wasn't specified")))
695- else bh("Paused by admin"))
724+ else bt("Paused by admin"))
696725
697726
698727
699-@Callable(au)
700-func activate () = valueOrElse(bl(au), if (M)
701- then bj()
728+@Callable(aG)
729+func activate () = valueOrElse(bx(aG), if (Y)
730+ then bv()
702731 else [BooleanEntry(c, true), DeleteEntry(l)])
703732
704733
705734
706-@Callable(au)
707-func takeIntoAccountExtraFunds () = valueOrElse(bk(), {
708- let dk = (az - V)
709- let dl = (aA - W)
710- let cJ = aF((V + dk), (W + dl))
711- if ((au.caller != H))
735+@Callable(aG)
736+func takeIntoAccountExtraFunds () = valueOrElse(bw(), {
737+ let dy = (aL - ah)
738+ let dz = (aM - ai)
739+ let cX = aR((ah + dy), (ai + dz))
740+ if ((aG.caller != O))
712741 then throw("Only the money box can call this function")
713- else if (if ((0 > dk))
742+ else if (if ((0 > dy))
714743 then true
715- else (0 > dl))
716- then bh("Enroll amount negative")
717- else if (if ((dk == 0))
718- then (dl == 0)
744+ else (0 > dz))
745+ then bt("Enroll amount negative")
746+ else if (if ((dy == 0))
747+ then (dz == 0)
719748 else false)
720749 then throw("No money to take")
721750 else {
722- let cb = if (if (containsElement(L, N))
723- then (dk > 0)
751+ let co = if (if (containsElement(T, Z))
752+ then (dy > 0)
724753 else false)
725- then invoke(this, "stakeUnstake", [true, dk, N], nil)
754+ then invoke(this, "stakeUnstake", [true, dy, Z], nil)
726755 else 0
727- if ((cb == cb))
756+ if ((co == co))
728757 then {
729- let cc = if (if (containsElement(L, O))
730- then (dl > 0)
758+ let cp = if (if (containsElement(T, aa))
759+ then (dz > 0)
731760 else false)
732- then invoke(this, "stakeUnstake", [true, dl, O], nil)
761+ then invoke(this, "stakeUnstake", [true, dz, aa], nil)
733762 else 0
734- if ((cc == cc))
735- then [IntegerEntry(k, cJ), IntegerEntry(f, (V + dk)), IntegerEntry(g, (W + dl))]
763+ if ((cp == cp))
764+ then [IntegerEntry(k, cX), IntegerEntry(f, (ah + dy)), IntegerEntry(g, (ai + dz))]
736765 else throw("Strict value is not equal to itself.")
737766 }
738767 else throw("Strict value is not equal to itself.")
741770
742771
743772
744-@Callable(au)
745-func stakeUnstake (bu,bw,dm) = if ((au.caller != this))
773+@Callable(aG)
774+func keepLimitForFirstHarvest (dA) = valueOrElse(bw(), valueOrElse(bx(aG), [IntegerEntry(t, dA)]))
775+
776+
777+
778+@Callable(aG)
779+func stakeUnstake (bG,bI,dB) = if ((aG.caller != this))
746780 then throw("Only contract itself can invoke this function")
747781 else {
748- let dn = bv(bu, bw, fromBase58String(dm))
749- let by = dn._1
750- let do = dn._2
751- let dp = dn._3
752- let dq = dn._4
753- let dr = invoke(do, by, dp, dq)
754- if ((dr == dr))
782+ let dC = bH(bG, bI, fromBase58String(dB))
783+ let bK = dC._1
784+ let dD = dC._2
785+ let dE = dC._3
786+ let dF = dC._4
787+ let dG = invoke(dD, bK, dE, dF)
788+ if ((dG == dG))
755789 then nil
756790 else throw("Strict value is not equal to itself.")
757791 }
758792
759793
760-
761-@Callable(au)
762-func toBigIntInvariant () = valueOrElse(bl(au), [IntegerEntry(k, aF(V, W))])
763-
764-
765-@Verifier(ds)
766-func dt () = {
767- let du = {
768- let dv = if (sigVerify(ds.bodyBytes, ds.proofs[0], D))
794+@Verifier(dH)
795+func dI () = {
796+ let dJ = {
797+ let dK = if (sigVerify(dH.bodyBytes, dH.proofs[0], K))
769798 then 1
770799 else 0
771- let dw = if (sigVerify(ds.bodyBytes, ds.proofs[1], E))
800+ let dL = if (sigVerify(dH.bodyBytes, dH.proofs[1], L))
772801 then 1
773802 else 0
774- let dx = if (sigVerify(ds.bodyBytes, ds.proofs[2], F))
803+ let dM = if (sigVerify(dH.bodyBytes, dH.proofs[2], M))
775804 then 1
776805 else 0
777- (((dv + dw) + dx) >= 2)
806+ (((dK + dL) + dM) >= 2)
778807 }
779- let A = ds
780- if ($isInstanceOf(A, "InvokeScriptTransaction"))
808+ let H = dH
809+ if ($isInstanceOf(H, "InvokeScriptTransaction"))
781810 then {
782- let dr = A
783- let dy = if ((dr.dApp == this))
784- then (dr.function == "takeIntoAccountExtraFunds")
811+ let dG = H
812+ let dN = if ((dG.dApp == this))
813+ then (dG.function == "takeIntoAccountExtraFunds")
785814 else false
786- let dz = if (if (if (sigVerify(ds.bodyBytes, ds.proofs[0], D))
815+ let dO = if (if (if (sigVerify(dH.bodyBytes, dH.proofs[0], K))
787816 then true
788- else sigVerify(ds.bodyBytes, ds.proofs[0], E))
817+ else sigVerify(dH.bodyBytes, dH.proofs[0], L))
789818 then true
790- else sigVerify(ds.bodyBytes, ds.proofs[0], F))
819+ else sigVerify(dH.bodyBytes, dH.proofs[0], M))
791820 then true
792- else sigVerify(ds.bodyBytes, ds.proofs[0], G)
793- if (if (dy)
794- then dz
821+ else sigVerify(dH.bodyBytes, dH.proofs[0], N)
822+ if (if (dN)
823+ then dO
795824 else false)
796825 then true
797- else du
826+ else dJ
798827 }
799- else du
828+ else dJ
800829 }
801830
Full:
OldNewDifferences
1-{-# STDLIB_VERSION 5 #-}
1+{-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "2.0.0"
55
66 let b = "version"
77
88 let c = "active"
99
1010 let d = "A_asset_id"
1111
1212 let e = "B_asset_id"
1313
1414 let f = "A_asset_balance"
1515
1616 let g = "B_asset_balance"
1717
1818 let h = "share_asset_id"
1919
2020 let i = "share_asset_supply"
2121
2222 let j = "commission"
2323
2424 let k = "invariant"
2525
2626 let l = "shutdown_cause"
2727
2828 let m = "staking_usdnnsbt_address"
2929
3030 let n = "staking_eurn_address"
3131
3232 let o = "discounts"
3333
3434 let p = "discount_values"
3535
3636 let q = "_SWOP_amount"
3737
38-let r = "admin_pub_1"
38+let r = "first_harvest"
3939
40-let s = "admin_pub_2"
40+let s = "first_harvest_height"
4141
42-let t = "admin_pub_3"
42+let t = "share_limit_on_first_harvest"
4343
44-let u = "admin_invoke_pub"
44+let u = "base_period"
4545
46-let v = "money_box_address"
46+let v = "period_length"
4747
48-let w = "governance_address"
48+let w = "start_height"
4949
50-let x = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
50+let x = "admin_pub_1"
5151
52-func y (z) = {
53- let A = getString(x, z)
54- if ($isInstanceOf(A, "String"))
52+let y = "admin_pub_2"
53+
54+let z = "admin_pub_3"
55+
56+let A = "admin_invoke_pub"
57+
58+let B = "money_box_address"
59+
60+let C = "governance_address"
61+
62+let D = "voting_address"
63+
64+let E = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
65+
66+func F (G) = {
67+ let H = getString(E, G)
68+ if ($isInstanceOf(H, "String"))
5569 then {
56- let B = A
57- fromBase58String(B)
70+ let I = H
71+ fromBase58String(I)
5872 }
5973 else {
60- let C = A
61- throw((z + "is empty"))
74+ let J = H
75+ throw((G + "is empty"))
6276 }
6377 }
6478
6579
66-let D = y(r)
80+let K = F(x)
6781
68-let E = y(s)
82+let L = F(y)
6983
70-let F = y(t)
84+let M = F(z)
7185
72-let G = y(u)
86+let N = F(A)
7387
74-let H = Address(y(v))
88+let O = Address(F(B))
7589
76-let I = Address(y(w))
90+let P = Address(F(C))
7791
78-let J = Address(y(m))
92+let Q = Address(F(m))
7993
80-let K = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
94+let R = Address(F(D))
8195
82-let L = [toBase58String(K)]
96+let S = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
8397
84-let M = getBooleanValue(this, c)
98+let T = [toBase58String(S)]
8599
86-let N = getStringValue(this, d)
100+let U = valueOrErrorMessage(getInteger(R, u), "Empty kBasePeriod")
87101
88-let O = getStringValue(this, e)
102+let V = valueOrErrorMessage(getInteger(R, w), "Empty kStartHeight")
89103
90-let P = if ((N == "WAVES"))
104+let W = valueOrErrorMessage(getInteger(R, v), "Empty kPeriodLength")
105+
106+let X = ((U + ((height - V) / W)) + 3)
107+
108+let Y = getBooleanValue(this, c)
109+
110+let Z = getStringValue(this, d)
111+
112+let aa = getStringValue(this, e)
113+
114+let ab = if ((Z == "WAVES"))
91115 then unit
92- else fromBase58String(N)
116+ else fromBase58String(Z)
93117
94-let Q = if ((O == "WAVES"))
118+let ac = if ((aa == "WAVES"))
95119 then unit
96- else fromBase58String(O)
120+ else fromBase58String(aa)
97121
98-let R = {
99- let A = P
100- if ($isInstanceOf(A, "ByteVector"))
122+let ad = {
123+ let H = ab
124+ if ($isInstanceOf(H, "ByteVector"))
101125 then {
102- let S = A
103- value(assetInfo(S)).name
126+ let ae = H
127+ value(assetInfo(ae)).name
104128 }
105- else if ($isInstanceOf(A, "Unit"))
129+ else if ($isInstanceOf(H, "Unit"))
106130 then {
107- let T = A
131+ let af = H
108132 "WAVES"
109133 }
110134 else throw("Match error")
111135 }
112136
113-let U = {
114- let A = Q
115- if ($isInstanceOf(A, "ByteVector"))
137+let ag = {
138+ let H = ac
139+ if ($isInstanceOf(H, "ByteVector"))
116140 then {
117- let S = A
118- value(assetInfo(S)).name
141+ let ae = H
142+ value(assetInfo(ae)).name
119143 }
120- else if ($isInstanceOf(A, "Unit"))
144+ else if ($isInstanceOf(H, "Unit"))
121145 then {
122- let T = A
146+ let af = H
123147 "WAVES"
124148 }
125149 else throw("Match error")
126150 }
127151
128-let V = getIntegerValue(this, f)
152+let ah = getIntegerValue(this, f)
129153
130-let W = getIntegerValue(this, g)
154+let ai = getIntegerValue(this, g)
131155
132-let X = fromBase58String(getStringValue(this, h))
156+let aj = fromBase58String(getStringValue(this, h))
133157
134-let Y = getIntegerValue(this, i)
158+let ak = getIntegerValue(this, i)
135159
136-let Z = getIntegerValue(this, k)
160+let al = getIntegerValue(this, k)
137161
138-let aa = getIntegerValue(this, j)
162+let am = getIntegerValue(this, j)
139163
140-let ab = fraction(aa, 40, 100)
164+let an = fraction(am, 40, 100)
141165
142-let ac = 1000000
166+let ao = 1000000
143167
144-let ad = 1000
168+let ap = 1000
145169
146-let ae = 100000000
170+let aq = 100000000
147171
148-let af = 10000000000000000
172+let ar = 10000000000000000
149173
150-let ag = 1000
174+let as = 1000
151175
152-let ah = 8
176+let at = 8
153177
154-let ai = 50
178+let au = 50
155179
156-let aj = 100
180+let av = 100
157181
158-let ak = 90000000
182+let aw = 90000000
159183
160-let al = 110000000
184+let ax = 110000000
161185
162-let am = 50
186+let ay = 50
163187
164-let an = 2
188+let az = 2
165189
166-let ao = 4600000000000000
190+let aA = 4600000000000000
167191
168-func ap (aq) = {
169- let A = aq
170- if ($isInstanceOf(A, "ByteVector"))
192+func aB (aC) = {
193+ let H = aC
194+ if ($isInstanceOf(H, "ByteVector"))
171195 then {
172- let S = A
173- assetBalance(this, S)
196+ let ae = H
197+ assetBalance(this, ae)
174198 }
175- else if ($isInstanceOf(A, "Unit"))
199+ else if ($isInstanceOf(H, "Unit"))
176200 then {
177- let T = A
201+ let af = H
178202 wavesBalance(this).available
179203 }
180204 else throw("Match error")
181205 }
182206
183207
184-func ar (aq) = {
185- let as = {
186- let A = aq
187- if ($isInstanceOf(A, "ByteVector"))
208+func aD (aC) = {
209+ let aE = {
210+ let H = aC
211+ if ($isInstanceOf(H, "ByteVector"))
188212 then {
189- let at = A
190- if ((at == K))
191- then getInteger(J, ((("rpd_balance_" + toBase58String(at)) + "_") + toString(this)))
213+ let aF = H
214+ if ((aF == S))
215+ then getInteger(Q, ((("rpd_balance_" + toBase58String(aF)) + "_") + toString(this)))
192216 else 0
193217 }
194- else if ($isInstanceOf(A, "Unit"))
218+ else if ($isInstanceOf(H, "Unit"))
195219 then 0
196220 else throw("Match error")
197221 }
198- let A = as
199- if ($isInstanceOf(A, "Int"))
222+ let H = aE
223+ if ($isInstanceOf(H, "Int"))
200224 then {
201- let au = A
202- au
225+ let aG = H
226+ aG
203227 }
204228 else 0
205229 }
206230
207231
208-let av = ar(P)
232+let aH = aD(ab)
209233
210-let aw = ar(Q)
234+let aI = aD(ac)
211235
212-let ax = (V - av)
236+let aJ = (ah - aH)
213237
214-let ay = (W - aw)
238+let aK = (ai - aI)
215239
216-let az = (ap(P) + av)
240+let aL = (aB(ab) + aH)
217241
218-let aA = (ap(Q) + aw)
242+let aM = (aB(ac) + aI)
219243
220-let aB = if ((az >= V))
221- then (aA >= W)
244+let aN = if ((aL >= ah))
245+ then (aM >= ai)
222246 else false
223247
224-func aC (aD,aE) = ((fraction(af, aD, aE) + fraction(af, aE, aD)) / 2)
248+func aO (aP,aQ) = ((fraction(ar, aP, aQ) + fraction(ar, aQ, aP)) / 2)
225249
226250
227-func aF (aD,aE) = {
228- let aG = aC(aD, aE)
229- (fraction((aD + aE), af, pow(aG, ah, am, an, ah, CEILING)) + (2 * fraction(toInt(pow(fraction(toBigInt(aD), toBigInt(aE), toBigInt(ae)), 0, toBigInt(5), 1, (ah / 2), DOWN)), pow((aG - ao), ah, am, an, ah, DOWN), ae)))
251+func aR (aP,aQ) = {
252+ let aS = aO(aP, aQ)
253+ (fraction((aP + aQ), ar, pow(aS, at, ay, az, at, CEILING)) + (2 * fraction(toInt(pow(fraction(toBigInt(aP), toBigInt(aQ), toBigInt(aq)), 0, toBigInt(5), 1, (at / 2), DOWN)), pow((aS - aA), at, ay, az, at, DOWN), aq)))
230254 }
231255
232256
233-func aH (aI,aJ,aK,aL) = {
234- let aM = (af - ((af * 1) / 10000000))
235- let aN = (aI - aJ)
236- let aD = (V + aK)
237- let aE = (W + aK)
238- func aO (aP,aQ) = if ((aP._1 == -1))
257+func aT (aU,aV,aW,aX) = {
258+ let aY = (ar - ((ar * 1) / 10000000))
259+ let aZ = (aU - aV)
260+ let aP = (ah + aW)
261+ let aQ = (ai + aW)
262+ func ba (bb,bc) = if ((bb._1 == -1))
239263 then {
240- let aR = (aI - (((aQ * aN) / 3) / ad))
241- let aS = if ((aL == P))
242- then aF(aD, (W - aR))
243- else aF((V - aR), aE)
244- if ((aS > Z))
245- then $Tuple2(aR, aS)
264+ let bd = (aU - (((bc * aZ) / 3) / ap))
265+ let be = if ((aX == ab))
266+ then aR(aP, (ai - bd))
267+ else aR((ah - bd), aQ)
268+ if ((be > al))
269+ then $Tuple2(bd, be)
246270 else $Tuple2(-1, 0)
247271 }
248- else aP
272+ else bb
249273
250- let aT = aO($Tuple2(-1, 0), 3000)
251- if ((0 > aT._1))
274+ let bf = ba($Tuple2(-1, 0), 3000)
275+ if ((0 > bf._1))
252276 then throw("Price is worse than minReceived")
253277 else {
254- let aU = if ((aL == P))
255- then aF(aD, (W - aI))
256- else if ((aL == Q))
257- then aF((V - aI), aE)
278+ let bg = if ((aX == ab))
279+ then aR(aP, (ai - aU))
280+ else if ((aX == ac))
281+ then aR((ah - aU), aQ)
258282 else throw("Wrong asset in payment")
259- if ((Z > aU))
260- then if ((aM >= fraction(af, Z, aU)))
283+ if ((al > bg))
284+ then if ((aY >= fraction(ar, al, bg)))
261285 then throw("The requested price is too not profitable for user")
262286 else {
263- let aV = {
264- let aW = [25, 200, 500]
265- let aX = size(aW)
266- let aY = $Tuple2(-1, 0)
267- func aZ (ba,bb) = if ((bb >= aX))
268- then ba
269- else aO(ba, aW[bb])
287+ let bh = {
288+ let bi = [25, 200, 500]
289+ let bj = size(bi)
290+ let bk = $Tuple2(-1, 0)
291+ func bl (bm,bn) = if ((bn >= bj))
292+ then bm
293+ else ba(bm, bi[bn])
270294
271- func bc (ba,bb) = if ((bb >= aX))
272- then ba
295+ func bo (bm,bn) = if ((bn >= bj))
296+ then bm
273297 else throw("List size exceeds 3")
274298
275- bc(aZ(aZ(aZ(aY, 0), 1), 2), 3)
299+ bo(bl(bl(bl(bk, 0), 1), 2), 3)
276300 }
277- if ((0 > aV._1))
278- then aT._1
279- else aV._1
301+ if ((0 > bh._1))
302+ then bf._1
303+ else bh._1
280304 }
281305 else {
282- let aV = {
283- let aW = [-500, -200, -25]
284- let aX = size(aW)
285- let aY = $Tuple2(-1, 0)
286- func aZ (ba,bb) = if ((bb >= aX))
287- then ba
288- else aO(ba, aW[bb])
306+ let bh = {
307+ let bi = [-500, -200, -25]
308+ let bj = size(bi)
309+ let bk = $Tuple2(-1, 0)
310+ func bl (bm,bn) = if ((bn >= bj))
311+ then bm
312+ else ba(bm, bi[bn])
289313
290- func bc (ba,bb) = if ((bb >= aX))
291- then ba
314+ func bo (bm,bn) = if ((bn >= bj))
315+ then bm
292316 else throw("List size exceeds 3")
293317
294- bc(aZ(aZ(aZ(aY, 0), 1), 2), 3)
318+ bo(bl(bl(bl(bk, 0), 1), 2), 3)
295319 }
296- let bd = if ((0 > aV._1))
297- then $Tuple2(aI, aU)
298- else aV
299- if ((aM >= fraction(af, Z, bd._2)))
320+ let bp = if ((0 > bh._1))
321+ then $Tuple2(aU, bg)
322+ else bh
323+ if ((aY >= fraction(ar, al, bp._2)))
300324 then throw("The requested price is too not profitable for user")
301- else bd._1
325+ else bp._1
302326 }
303327 }
304328 }
305329
306330
307-func be (aq) = {
308- let A = aq
309- if ($isInstanceOf(A, "ByteVector"))
331+func bq (aC) = {
332+ let H = aC
333+ if ($isInstanceOf(H, "ByteVector"))
310334 then {
311- let S = A
312- let bf = toBase58String(S)
313- let bg = valueOrErrorMessage(assetInfo(S), (("Asset " + bf) + " doesn't exist"))
314- $Tuple3(bf, bg.name, bg.decimals)
335+ let ae = H
336+ let br = toBase58String(ae)
337+ let bs = valueOrErrorMessage(assetInfo(ae), (("Asset " + br) + " doesn't exist"))
338+ $Tuple3(br, bs.name, bs.decimals)
315339 }
316- else if ($isInstanceOf(A, "Unit"))
340+ else if ($isInstanceOf(H, "Unit"))
317341 then {
318- let T = A
342+ let af = H
319343 $Tuple3("WAVES", "WAVES", 8)
320344 }
321345 else throw("Match error")
322346 }
323347
324348
325-func bh (bi) = [BooleanEntry(c, false), StringEntry(l, bi)]
349+func bt (bu) = [BooleanEntry(c, false), StringEntry(l, bu)]
326350
327351
328-func bj () = throw("DApp is already active")
352+func bv () = throw("DApp is already active")
329353
330354
331-func bk () = if (M)
355+func bw () = if (Y)
332356 then unit
333357 else throw("DApp is inactive at this moment")
334358
335359
336-func bl (au) = if (containsElement([D, E, F], au.callerPublicKey))
360+func bx (aG) = if (containsElement([K, L, M], aG.callerPublicKey))
337361 then unit
338362 else throw("Only admin can call this function")
339363
340364
341-func bm () = throw(((("Incorrect assets attached. Expected: " + N) + " and ") + O))
365+func by () = throw(((("Incorrect assets attached. Expected: " + Z) + " and ") + aa))
342366
343367
344-func bn () = throw("One attached payment expected")
368+func bz () = throw("One attached payment expected")
345369
346370
347-func bo (bp,bq,br) = throw(((((((((("New balance in assets of the DApp is less than threshold " + toString(bp)) + ": ") + toString(bq)) + " ") + R) + ", ") + toString(br)) + " ") + U))
371+func bA (bB,bC,bD) = throw(((((((((("New balance in assets of the DApp is less than threshold " + toString(bB)) + ": ") + toString(bC)) + " ") + ad) + ", ") + toString(bD)) + " ") + ag))
348372
349373
350-func bs () = bh(((((((((((((((("Suspicious state. Actual balances: " + toString(V)) + " ") + R) + ", ") + toString(W)) + " ") + U) + ". State: ") + toString(ap(P))) + " ") + R) + ", ") + toString(ap(Q))) + " ") + U))
374+func bE () = bt(((((((((((((((("Suspicious state. Actual balances: " + toString(ah)) + " ") + ad) + ", ") + toString(ai)) + " ") + ag) + ". State: ") + toString(aB(ab))) + " ") + ad) + ", ") + toString(aB(ac))) + " ") + ag))
351375
352376
353-func bt (bu,aq) = if (bu)
354- then $Tuple2("lockNeutrino", J)
355- else $Tuple2("unlockNeutrino", J)
377+func bF (bG,aC) = if (bG)
378+ then $Tuple2("lockNeutrino", Q)
379+ else $Tuple2("unlockNeutrino", Q)
356380
357381
358-func bv (bu,bw,aq) = if (bu)
382+func bH (bG,bI,aC) = if (bG)
359383 then {
360- let bx = bt(bu, aq)
361- let by = bx._1
362- let bz = bx._2
363- $Tuple4(by, bz, nil, [AttachedPayment(aq, bw)])
384+ let bJ = bF(bG, aC)
385+ let bK = bJ._1
386+ let bL = bJ._2
387+ $Tuple4(bK, bL, nil, [AttachedPayment(aC, bI)])
364388 }
365389 else {
366- let bA = bt(bu, aq)
367- let by = bA._1
368- let bz = bA._2
369- $Tuple4(by, bz, [bw, toBase58String(aq)], nil)
390+ let bM = bF(bG, aC)
391+ let bK = bM._1
392+ let bL = bM._2
393+ $Tuple4(bK, bL, [bI, toBase58String(aC)], nil)
370394 }
371395
372396
373-func bB (bC) = {
374- let bD = valueOrElse(getInteger(I, (toString(bC) + q)), 0)
375- let bE = split(getStringValue(x, p), ",")
376- let bF = split(getStringValue(x, o), ",")
377- if (if ((bD >= parseIntValue(bE[0])))
378- then (parseIntValue(bE[1]) > bD)
397+func bN (bO) = {
398+ let bP = valueOrElse(getInteger(P, (toString(bO) + q)), 0)
399+ let bQ = split(getStringValue(E, p), ",")
400+ let bR = split(getStringValue(E, o), ",")
401+ if (if ((bP >= parseIntValue(bQ[0])))
402+ then (parseIntValue(bQ[1]) > bP)
379403 else false)
380- then (ac - parseIntValue(bF[0]))
381- else if (if ((bD >= parseIntValue(bE[1])))
382- then (parseIntValue(bE[2]) > bD)
404+ then (ao - parseIntValue(bR[0]))
405+ else if (if ((bP >= parseIntValue(bQ[1])))
406+ then (parseIntValue(bQ[2]) > bP)
383407 else false)
384- then (ac - parseIntValue(bF[1]))
385- else if (if ((bD >= parseIntValue(bE[2])))
386- then (parseIntValue(bE[3]) > bD)
408+ then (ao - parseIntValue(bR[1]))
409+ else if (if ((bP >= parseIntValue(bQ[2])))
410+ then (parseIntValue(bQ[3]) > bP)
387411 else false)
388- then (ac - parseIntValue(bF[2]))
389- else if (if ((bD >= parseIntValue(bE[3])))
390- then (parseIntValue(bE[4]) > bD)
412+ then (ao - parseIntValue(bR[2]))
413+ else if (if ((bP >= parseIntValue(bQ[3])))
414+ then (parseIntValue(bQ[4]) > bP)
391415 else false)
392- then (ac - parseIntValue(bF[3]))
393- else if ((bD >= parseIntValue(bE[4])))
394- then (ac - parseIntValue(bF[4]))
395- else ac
416+ then (ao - parseIntValue(bR[3]))
417+ else if ((bP >= parseIntValue(bQ[4])))
418+ then (ao - parseIntValue(bR[4]))
419+ else ao
396420 }
397421
398422
399-@Callable(au)
400-func init () = {
401- let bG = $Tuple2(au.payments[0].amount, au.payments[0].assetId)
402- let bH = bG._1
403- let bI = bG._2
404- let bJ = $Tuple2(au.payments[1].amount, au.payments[1].assetId)
405- let bK = bJ._1
406- let bL = bJ._2
407- let bM = be(bI)
408- let bN = bM._1
409- let bO = bM._2
410- let bP = bM._3
411- let bQ = be(bL)
412- let bR = bQ._1
413- let bS = bQ._2
414- let bT = bQ._3
423+@Callable(aG)
424+func init (bS) = {
425+ let bT = $Tuple2(aG.payments[0].amount, aG.payments[0].assetId)
426+ let bU = bT._1
427+ let bV = bT._2
428+ let bW = $Tuple2(aG.payments[1].amount, aG.payments[1].assetId)
429+ let bX = bW._1
430+ let bY = bW._2
431+ let bZ = bq(bV)
432+ let ca = bZ._1
433+ let cb = bZ._2
434+ let cc = bZ._3
435+ let cd = bq(bY)
436+ let ce = cd._1
437+ let cf = cd._2
438+ let cg = cd._3
415439 if (isDefined(getBoolean(this, c)))
416- then bj()
417- else if ((bI == bL))
440+ then bv()
441+ else if ((bV == bY))
418442 then throw("Assets must be different")
419443 else {
420- let bU = ((("s" + take(bO, 7)) + "_") + take(bS, 7))
421- let bV = ((((("ShareToken of SwopFi protocol for " + bO) + " and ") + bS) + " at address ") + toString(this))
422- let bW = ((bP + bT) / 2)
423- let bX = fraction(pow(bH, bP, 5, 1, bP, DOWN), pow(bK, bT, 5, 1, bT, DOWN), pow(10, 0, bW, 0, 0, DOWN))
424- let bY = Issue(bU, bV, bX, bW, true)
425- let bZ = calculateAssetId(bY)
426- let ca = aF(bH, bK)
427- let cb = if (containsElement(L, bN))
428- then invoke(this, "stakeUnstake", [true, bH, bN], nil)
444+ let ch = ((("s" + take(cb, 7)) + "_") + take(cf, 7))
445+ let ci = ((((("ShareToken of SwopFi protocol for " + cb) + " and ") + cf) + " at address ") + toString(this))
446+ let cj = ((cc + cg) / 2)
447+ let ck = fraction(pow(bU, cc, 5, 1, cc, DOWN), pow(bX, cg, 5, 1, cg, DOWN), pow(10, 0, cj, 0, 0, DOWN))
448+ let cl = Issue(ch, ci, ck, cj, true)
449+ let cm = calculateAssetId(cl)
450+ let cn = aR(bU, bX)
451+ let co = if (containsElement(T, ca))
452+ then invoke(this, "stakeUnstake", [true, bU, ca], nil)
429453 else 0
430- if ((cb == cb))
454+ if ((co == co))
431455 then {
432- let cc = if (containsElement(L, bR))
433- then invoke(this, "stakeUnstake", [true, bK, bR], nil)
456+ let cp = if (containsElement(T, ce))
457+ then invoke(this, "stakeUnstake", [true, bX, ce], nil)
434458 else 0
435- if ((cc == cc))
436- then [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bN), StringEntry(e, bR), IntegerEntry(f, bH), IntegerEntry(g, bK), IntegerEntry(k, ca), IntegerEntry(j, getIntegerValue(x, "base_fee_flat")), bY, StringEntry(h, toBase58String(bZ)), IntegerEntry(i, bX), ScriptTransfer(au.caller, bX, bZ)]
459+ if ((cp == cp))
460+ then {
461+ let cq = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, ca), StringEntry(e, ce), IntegerEntry(f, bU), IntegerEntry(g, bX), IntegerEntry(k, cn), IntegerEntry(j, getIntegerValue(E, "base_fee_flat")), cl, StringEntry(h, toBase58String(cm)), IntegerEntry(i, ck), ScriptTransfer(aG.caller, ck, cm)]
462+ if (bS)
463+ then (cq ++ [BooleanEntry(r, bS), IntegerEntry(s, (V + (X * W)))])
464+ else cq
465+ }
437466 else throw("Strict value is not equal to itself.")
438467 }
439468 else throw("Strict value is not equal to itself.")
440469 }
441470 }
442471
443472
444473
445-@Callable(au)
446-func replenishWithTwoTokens () = valueOrElse(bk(), {
447- let bI = au.payments[0].assetId
448- let bL = au.payments[1].assetId
449- let cd = fraction(ae, au.payments[0].amount, V)
450- let ce = fraction(ae, au.payments[1].amount, W)
451- let cf = be(bI)
452- let bN = cf._1
453- let bO = cf._2
454- let bP = cf._3
455- let cg = be(bL)
456- let bR = cg._1
457- let bS = cg._2
458- let bT = cg._3
459- let ch = if ((ce > cd))
474+@Callable(aG)
475+func replenishWithTwoTokens () = valueOrElse(bw(), {
476+ let bV = aG.payments[0].assetId
477+ let bY = aG.payments[1].assetId
478+ let cr = fraction(aq, aG.payments[0].amount, ah)
479+ let cs = fraction(aq, aG.payments[1].amount, ai)
480+ let ct = bq(bV)
481+ let ca = ct._1
482+ let cb = ct._2
483+ let cc = ct._3
484+ let cu = bq(bY)
485+ let ce = cu._1
486+ let cf = cu._2
487+ let cg = cu._3
488+ let cv = if ((cs > cr))
460489 then {
461- let ci = fraction(W, cd, ae, CEILING)
462- $Tuple5(au.payments[0].amount, ci, (au.payments[1].amount - ci), bL, cd)
490+ let cw = fraction(ai, cr, aq, CEILING)
491+ $Tuple5(aG.payments[0].amount, cw, (aG.payments[1].amount - cw), bY, cr)
463492 }
464493 else {
465- let ci = fraction(V, ce, ae, CEILING)
466- $Tuple5(ci, au.payments[1].amount, (au.payments[0].amount - ci), bI, ce)
494+ let cw = fraction(ah, cs, aq, CEILING)
495+ $Tuple5(cw, aG.payments[1].amount, (aG.payments[0].amount - cw), bV, cs)
467496 }
468- let bH = ch._1
469- let bK = ch._2
470- let cj = ch._3
471- let ck = ch._4
472- let cl = ch._5
473- let cm = fraction(cl, Y, ae)
474- if ((size(au.payments) != 2))
497+ let bU = cv._1
498+ let bX = cv._2
499+ let cx = cv._3
500+ let cy = cv._4
501+ let cz = cv._5
502+ let cA = fraction(cz, ak, aq)
503+ if ((size(aG.payments) != 2))
475504 then throw("Two attached assets expected")
476- else if (if ((bI != P))
505+ else if (if ((bV != ab))
477506 then true
478- else (bL != Q))
479- then bm()
480- else if ((cm == 0))
507+ else (bY != ac))
508+ then by()
509+ else if ((cA == 0))
481510 then throw("Too small amount to replenish")
482- else if ((0 > cj))
511+ else if ((0 > cx))
483512 then throw("Change < 0")
484- else if (!(aB))
485- then ([ScriptTransfer(au.caller, bH, bI), ScriptTransfer(au.caller, bK, bL)] ++ bs())
513+ else if (!(aN))
514+ then ([ScriptTransfer(aG.caller, bU, bV), ScriptTransfer(aG.caller, bX, bY)] ++ bE())
486515 else {
487- let cb = if (containsElement(L, bN))
488- then invoke(this, "stakeUnstake", [true, bH, bN], nil)
516+ let co = if (containsElement(T, ca))
517+ then invoke(this, "stakeUnstake", [true, bU, ca], nil)
489518 else 0
490- if ((cb == cb))
519+ if ((co == co))
491520 then {
492- let cc = if (containsElement(L, bR))
493- then invoke(this, "stakeUnstake", [true, bK, bR], nil)
521+ let cp = if (containsElement(T, ce))
522+ then invoke(this, "stakeUnstake", [true, bX, ce], nil)
494523 else 0
495- if ((cc == cc))
496- then [IntegerEntry(f, (V + bH)), IntegerEntry(g, (W + bK)), IntegerEntry(i, (Y + cm)), IntegerEntry(k, aF((V + bH), (W + bK))), Reissue(X, cm, true), ScriptTransfer(au.caller, cm, X), ScriptTransfer(au.caller, cj, ck)]
524+ if ((cp == cp))
525+ then [IntegerEntry(f, (ah + bU)), IntegerEntry(g, (ai + bX)), IntegerEntry(i, (ak + cA)), IntegerEntry(k, aR((ah + bU), (ai + bX))), Reissue(aj, cA, true), ScriptTransfer(aG.caller, cA, aj), ScriptTransfer(aG.caller, cx, cy)]
497526 else throw("Strict value is not equal to itself.")
498527 }
499528 else throw("Strict value is not equal to itself.")
500529 }
501530 })
502531
503532
504533
505-@Callable(au)
506-func replenishWithOneToken (cn,co) = valueOrElse(bk(), {
507- let cp = $Tuple2(au.payments[0].amount, au.payments[0].assetId)
508- let cq = cp._1
509- let cr = cp._2
510- let cs = be(cr)
511- let ct = cs._1
512- let cu = cs._2
513- let cv = cs._3
514- let cw = 5000000
515- let cx = 50000000
516- let cy = if ((cx > cq))
534+@Callable(aG)
535+func replenishWithOneToken (cB,cC) = valueOrElse(bw(), {
536+ let cD = $Tuple2(aG.payments[0].amount, aG.payments[0].assetId)
537+ let cE = cD._1
538+ let cF = cD._2
539+ let cG = bq(cF)
540+ let cH = cG._1
541+ let cI = cG._2
542+ let cJ = cG._3
543+ let cK = 5000000
544+ let cL = 50000000
545+ let cM = if ((cL > cE))
517546 then 100000
518547 else 1
519- let cz = (ae - ((ae * cy) / 10000000))
520- let cA = (ae + ((ae * cy) / 10000000))
521- let cB = (ae - ((ae * 1) / 10000000))
522- if ((cw > cq))
523- then throw((((("Payment amount " + toString(cq)) + " does not exceed the minimum amount of ") + toString(cw)) + " tokens"))
524- else if ((size(au.payments) != 1))
525- then bn()
526- else if (!(aB))
527- then ([ScriptTransfer(au.caller, cq, cr)] ++ bs())
528- else if (if ((cr != P))
529- then (cr != Q)
548+ let cN = (aq - ((aq * cM) / 10000000))
549+ let cO = (aq + ((aq * cM) / 10000000))
550+ let cP = (aq - ((aq * 1) / 10000000))
551+ if ((cK > cE))
552+ then throw((((("Payment amount " + toString(cE)) + " does not exceed the minimum amount of ") + toString(cK)) + " tokens"))
553+ else if ((size(aG.payments) != 1))
554+ then bz()
555+ else if (!(aN))
556+ then ([ScriptTransfer(aG.caller, cE, cF)] ++ bE())
557+ else if (if ((cF != ab))
558+ then (cF != ac)
530559 else false)
531- then bm()
560+ then by()
532561 else {
533- let cC = if ((cr == P))
534- then $Tuple6((cq - cn), co, (V + cn), (W - co), (V + cq), W)
535- else $Tuple6(co, (cq - cn), (V - co), (W + cn), V, (W + cq))
536- let cD = cC._1
537- let cE = cC._2
538- let cF = cC._3
539- let cG = cC._4
540- let cH = cC._5
541- let cI = cC._6
542- let cJ = aF(cF, cG)
543- let cK = (fraction(af, cF, cG) / fraction(ae, cD, cE))
544- let cL = fraction((cH + cI), ai, (2 * aj))
545- if (if ((cB >= fraction(ae, Z, cJ)))
562+ let cQ = if ((cF == ab))
563+ then $Tuple6((cE - cB), cC, (ah + cB), (ai - cC), (ah + cE), ai)
564+ else $Tuple6(cC, (cE - cB), (ah - cC), (ai + cB), ah, (ai + cE))
565+ let cR = cQ._1
566+ let cS = cQ._2
567+ let cT = cQ._3
568+ let cU = cQ._4
569+ let cV = cQ._5
570+ let cW = cQ._6
571+ let cX = aR(cT, cU)
572+ let cY = (fraction(ar, cT, cU) / fraction(aq, cR, cS))
573+ let cZ = fraction((cV + cW), au, (2 * av))
574+ if (if ((cP >= fraction(aq, al, cX)))
546575 then true
547- else (Z > cJ))
576+ else (al > cX))
548577 then throw("Incorrect virtualSwapTokenPay or virtualSwapTokenGet value")
549- else if (if ((cz > cK))
578+ else if (if ((cN > cY))
550579 then true
551- else (cK > cA))
580+ else (cY > cO))
552581 then throw("Swap with virtualSwapTokenPay and virtualSwapTokenGet is possible, but ratio after virtual swap is incorrect")
553- else if (if ((cL > cH))
582+ else if (if ((cZ > cV))
554583 then true
555- else (cL > cI))
556- then bo(cL, cH, cI)
584+ else (cZ > cW))
585+ then bA(cZ, cV, cW)
557586 else {
558- let cd = fraction(cD, ae, cF)
559- let ce = fraction(cE, ae, cG)
560- let cm = fraction(min([cd, ce]), Y, ae)
561- let cM = fraction(cm, (ac - (aa / 2)), ac)
562- let cN = fraction(cm, (ab / 2), ac)
563- let cO = fraction(cN, V, Y)
564- let cP = fraction(cN, W, Y)
565- let cQ = if ((ct == N))
566- then $Tuple3((cq - cO), cP, O)
567- else $Tuple3((cq - cP), cO, N)
568- let cR = cQ._1
569- let cS = cQ._2
570- let cT = cQ._3
571- let cb = if (containsElement(L, ct))
572- then invoke(this, "stakeUnstake", [true, cR, ct], nil)
587+ let cr = fraction(cR, aq, cT)
588+ let cs = fraction(cS, aq, cU)
589+ let cA = fraction(min([cr, cs]), ak, aq)
590+ let da = fraction(cA, (ao - (am / 2)), ao)
591+ let db = fraction(cA, (an / 2), ao)
592+ let dc = fraction(db, ah, ak)
593+ let dd = fraction(db, ai, ak)
594+ let de = if ((cH == Z))
595+ then $Tuple3((cE - dc), dd, aa)
596+ else $Tuple3((cE - dd), dc, Z)
597+ let df = de._1
598+ let dg = de._2
599+ let dh = de._3
600+ let co = if (containsElement(T, cH))
601+ then invoke(this, "stakeUnstake", [true, df, cH], nil)
573602 else 0
574- if ((cb == cb))
603+ if ((co == co))
575604 then {
576- let cc = if (containsElement(L, cT))
577- then invoke(this, "stakeUnstake", [false, cS, cT], nil)
605+ let cp = if (containsElement(T, dh))
606+ then invoke(this, "stakeUnstake", [false, dg, dh], nil)
578607 else 0
579- if ((cc == cc))
580- then [Reissue(X, cM, true), ScriptTransfer(au.caller, cM, X), ScriptTransfer(H, cO, P), ScriptTransfer(H, cP, Q), IntegerEntry(f, (cH - cO)), IntegerEntry(g, (cI - cP)), IntegerEntry(i, (Y + cM)), IntegerEntry(k, aF((cH - cO), (cI - cP)))]
608+ if ((cp == cp))
609+ then [Reissue(aj, da, true), ScriptTransfer(aG.caller, da, aj), ScriptTransfer(O, dc, ab), ScriptTransfer(O, dd, ac), IntegerEntry(f, (cV - dc)), IntegerEntry(g, (cW - dd)), IntegerEntry(i, (ak + da)), IntegerEntry(k, aR((cV - dc), (cW - dd)))]
581610 else throw("Strict value is not equal to itself.")
582611 }
583612 else throw("Strict value is not equal to itself.")
584613 }
585614 }
586615 })
587616
588617
589618
590-@Callable(au)
591-func withdraw () = valueOrElse(bk(), {
592- let cU = $Tuple2(au.payments[0].amount, au.payments[0].assetId)
593- let cq = cU._1
594- let cr = cU._2
595- let cV = fraction(cq, V, Y)
596- let cW = fraction(cq, W, Y)
597- let ca = aF((V - cV), (W - cW))
598- if ((size(au.payments) != 1))
599- then bn()
600- else if ((cr != X))
601- then throw(("Incorrect asset attached. Expected: " + toBase58String(X)))
602- else if (!(aB))
603- then ([ScriptTransfer(au.caller, cq, cr)] ++ bs())
619+@Callable(aG)
620+func withdraw () = valueOrElse(bw(), {
621+ let di = $Tuple2(aG.payments[0].amount, aG.payments[0].assetId)
622+ let cE = di._1
623+ let cF = di._2
624+ let dj = fraction(cE, ah, ak)
625+ let dk = fraction(cE, ai, ak)
626+ let cn = aR((ah - dj), (ai - dk))
627+ if ((size(aG.payments) != 1))
628+ then bz()
629+ else if ((cF != aj))
630+ then throw(("Incorrect asset attached. Expected: " + toBase58String(aj)))
631+ else if (!(aN))
632+ then ([ScriptTransfer(aG.caller, cE, cF)] ++ bE())
604633 else {
605- let cb = if (containsElement(L, N))
606- then invoke(this, "stakeUnstake", [false, cV, N], nil)
634+ let co = if (containsElement(T, Z))
635+ then invoke(this, "stakeUnstake", [false, dj, Z], nil)
607636 else 0
608- if ((cb == cb))
637+ if ((co == co))
609638 then {
610- let cc = if (containsElement(L, O))
611- then invoke(this, "stakeUnstake", [false, cW, O], nil)
639+ let cp = if (containsElement(T, aa))
640+ then invoke(this, "stakeUnstake", [false, dk, aa], nil)
612641 else 0
613- if ((cc == cc))
614- then [IntegerEntry(f, (V - cV)), IntegerEntry(g, (W - cW)), IntegerEntry(i, (Y - cq)), IntegerEntry(k, ca), Burn(X, cq), ScriptTransfer(au.caller, cV, P), ScriptTransfer(au.caller, cW, Q)]
642+ if ((cp == cp))
643+ then [IntegerEntry(f, (ah - dj)), IntegerEntry(g, (ai - dk)), IntegerEntry(i, (ak - cE)), IntegerEntry(k, cn), Burn(aj, cE), ScriptTransfer(aG.caller, dj, ab), ScriptTransfer(aG.caller, dk, ac)]
615644 else throw("Strict value is not equal to itself.")
616645 }
617646 else throw("Strict value is not equal to itself.")
618647 }
619648 })
620649
621650
622651
623-@Callable(au)
624-func exchange (cX,cY) = valueOrElse(bk(), {
625- let cZ = $Tuple2(au.payments[0].amount, au.payments[0].assetId)
626- let cq = cZ._1
627- let cr = cZ._2
628- if ((0 >= cX))
629- then throw(("Estimated amount must be positive. Actual: " + toString(cX)))
630- else if ((cY > cX))
652+@Callable(aG)
653+func exchange (dl,dm) = valueOrElse(bw(), {
654+ let dn = $Tuple2(aG.payments[0].amount, aG.payments[0].assetId)
655+ let cE = dn._1
656+ let cF = dn._2
657+ if ((0 >= dl))
658+ then throw(("Estimated amount must be positive. Actual: " + toString(dl)))
659+ else if ((dm > dl))
631660 then throw("Minimal amount can't be greater than estimated.")
632- else if ((size(au.payments) != 1))
633- then bn()
634- else if (!(aB))
635- then ([ScriptTransfer(au.caller, cq, cr)] ++ bs())
636- else if (if ((cr != P))
637- then (cr != Q)
661+ else if ((size(aG.payments) != 1))
662+ then bz()
663+ else if (!(aN))
664+ then ([ScriptTransfer(aG.caller, cE, cF)] ++ bE())
665+ else if (if ((cF != ab))
666+ then (cF != ac)
638667 else false)
639- then bm()
640- else if ((10000000 > cq))
668+ then by()
669+ else if ((10000000 > cE))
641670 then throw("Only swap of 10.000000 or more tokens is allowed")
642- else if (if ((ak > fraction(ae, cY, cq)))
671+ else if (if ((aw > fraction(aq, dm, cE)))
643672 then true
644- else (fraction(ae, cX, cq) > al))
673+ else (fraction(aq, dl, cE) > ax))
645674 then throw("Incorrect args and pmt ratio")
646675 else {
647- let da = if ((cr == P))
648- then Q
649- else P
650- let bw = aH(cX, cY, cq, cr)
651- let db = bB(au.originCaller)
652- let dc = fraction(bw, fraction(ab, db, ac, CEILING), ac)
653- let dd = fraction(bw, (ac - fraction(aa, db, ac, CEILING)), ac)
654- let de = if ((cr == P))
655- then $Tuple2((V + cq), ((W - dd) - dc))
656- else $Tuple2(((V - dd) - dc), (W + cq))
657- let cH = de._1
658- let cI = de._2
659- let cL = fraction((cH + cI), ai, (2 * aj))
660- if (if ((cL > cH))
676+ let do = if ((cF == ab))
677+ then ac
678+ else ab
679+ let bI = aT(dl, dm, cE, cF)
680+ let dp = bN(aG.originCaller)
681+ let dq = fraction(bI, fraction(an, dp, ao, CEILING), ao)
682+ let dr = fraction(bI, (ao - fraction(am, dp, ao, CEILING)), ao)
683+ let ds = if ((cF == ab))
684+ then $Tuple2((ah + cE), ((ai - dr) - dq))
685+ else $Tuple2(((ah - dr) - dq), (ai + cE))
686+ let cV = ds._1
687+ let cW = ds._2
688+ let cZ = fraction((cV + cW), au, (2 * av))
689+ if (if ((cZ > cV))
661690 then true
662- else (cL > cI))
663- then bo(cL, cH, cI)
691+ else (cZ > cW))
692+ then bA(cZ, cV, cW)
664693 else {
665- let df = be(cr)
666- let ct = df._1
667- let cu = df._2
668- let cv = df._3
669- let dg = be(da)
670- let dh = dg._1
671- let di = dg._2
672- let dj = dg._3
673- let cb = if (containsElement(L, ct))
674- then invoke(this, "stakeUnstake", [true, cq, ct], nil)
694+ let dt = bq(cF)
695+ let cH = dt._1
696+ let cI = dt._2
697+ let cJ = dt._3
698+ let du = bq(do)
699+ let dv = du._1
700+ let dw = du._2
701+ let dx = du._3
702+ let co = if (containsElement(T, cH))
703+ then invoke(this, "stakeUnstake", [true, cE, cH], nil)
675704 else 0
676- if ((cb == cb))
705+ if ((co == co))
677706 then {
678- let cc = if (containsElement(L, dh))
679- then invoke(this, "stakeUnstake", [false, (dd + dc), dh], nil)
707+ let cp = if (containsElement(T, dv))
708+ then invoke(this, "stakeUnstake", [false, (dr + dq), dv], nil)
680709 else 0
681- if ((cc == cc))
682- then $Tuple2([IntegerEntry(f, cH), IntegerEntry(g, cI), IntegerEntry(k, aF(cH, cI)), ScriptTransfer(au.caller, dd, da), ScriptTransfer(H, dc, da)], $Tuple2(dd, da))
710+ if ((cp == cp))
711+ then $Tuple2([IntegerEntry(f, cV), IntegerEntry(g, cW), IntegerEntry(k, aR(cV, cW)), ScriptTransfer(aG.caller, dr, do), ScriptTransfer(O, dq, do)], [dr, do])
683712 else throw("Strict value is not equal to itself.")
684713 }
685714 else throw("Strict value is not equal to itself.")
686715 }
687716 }
688717 })
689718
690719
691720
692-@Callable(au)
693-func shutdown () = valueOrElse(bl(au), if (!(M))
721+@Callable(aG)
722+func shutdown () = valueOrElse(bx(aG), if (!(Y))
694723 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, l), "the cause wasn't specified")))
695- else bh("Paused by admin"))
724+ else bt("Paused by admin"))
696725
697726
698727
699-@Callable(au)
700-func activate () = valueOrElse(bl(au), if (M)
701- then bj()
728+@Callable(aG)
729+func activate () = valueOrElse(bx(aG), if (Y)
730+ then bv()
702731 else [BooleanEntry(c, true), DeleteEntry(l)])
703732
704733
705734
706-@Callable(au)
707-func takeIntoAccountExtraFunds () = valueOrElse(bk(), {
708- let dk = (az - V)
709- let dl = (aA - W)
710- let cJ = aF((V + dk), (W + dl))
711- if ((au.caller != H))
735+@Callable(aG)
736+func takeIntoAccountExtraFunds () = valueOrElse(bw(), {
737+ let dy = (aL - ah)
738+ let dz = (aM - ai)
739+ let cX = aR((ah + dy), (ai + dz))
740+ if ((aG.caller != O))
712741 then throw("Only the money box can call this function")
713- else if (if ((0 > dk))
742+ else if (if ((0 > dy))
714743 then true
715- else (0 > dl))
716- then bh("Enroll amount negative")
717- else if (if ((dk == 0))
718- then (dl == 0)
744+ else (0 > dz))
745+ then bt("Enroll amount negative")
746+ else if (if ((dy == 0))
747+ then (dz == 0)
719748 else false)
720749 then throw("No money to take")
721750 else {
722- let cb = if (if (containsElement(L, N))
723- then (dk > 0)
751+ let co = if (if (containsElement(T, Z))
752+ then (dy > 0)
724753 else false)
725- then invoke(this, "stakeUnstake", [true, dk, N], nil)
754+ then invoke(this, "stakeUnstake", [true, dy, Z], nil)
726755 else 0
727- if ((cb == cb))
756+ if ((co == co))
728757 then {
729- let cc = if (if (containsElement(L, O))
730- then (dl > 0)
758+ let cp = if (if (containsElement(T, aa))
759+ then (dz > 0)
731760 else false)
732- then invoke(this, "stakeUnstake", [true, dl, O], nil)
761+ then invoke(this, "stakeUnstake", [true, dz, aa], nil)
733762 else 0
734- if ((cc == cc))
735- then [IntegerEntry(k, cJ), IntegerEntry(f, (V + dk)), IntegerEntry(g, (W + dl))]
763+ if ((cp == cp))
764+ then [IntegerEntry(k, cX), IntegerEntry(f, (ah + dy)), IntegerEntry(g, (ai + dz))]
736765 else throw("Strict value is not equal to itself.")
737766 }
738767 else throw("Strict value is not equal to itself.")
739768 }
740769 })
741770
742771
743772
744-@Callable(au)
745-func stakeUnstake (bu,bw,dm) = if ((au.caller != this))
773+@Callable(aG)
774+func keepLimitForFirstHarvest (dA) = valueOrElse(bw(), valueOrElse(bx(aG), [IntegerEntry(t, dA)]))
775+
776+
777+
778+@Callable(aG)
779+func stakeUnstake (bG,bI,dB) = if ((aG.caller != this))
746780 then throw("Only contract itself can invoke this function")
747781 else {
748- let dn = bv(bu, bw, fromBase58String(dm))
749- let by = dn._1
750- let do = dn._2
751- let dp = dn._3
752- let dq = dn._4
753- let dr = invoke(do, by, dp, dq)
754- if ((dr == dr))
782+ let dC = bH(bG, bI, fromBase58String(dB))
783+ let bK = dC._1
784+ let dD = dC._2
785+ let dE = dC._3
786+ let dF = dC._4
787+ let dG = invoke(dD, bK, dE, dF)
788+ if ((dG == dG))
755789 then nil
756790 else throw("Strict value is not equal to itself.")
757791 }
758792
759793
760-
761-@Callable(au)
762-func toBigIntInvariant () = valueOrElse(bl(au), [IntegerEntry(k, aF(V, W))])
763-
764-
765-@Verifier(ds)
766-func dt () = {
767- let du = {
768- let dv = if (sigVerify(ds.bodyBytes, ds.proofs[0], D))
794+@Verifier(dH)
795+func dI () = {
796+ let dJ = {
797+ let dK = if (sigVerify(dH.bodyBytes, dH.proofs[0], K))
769798 then 1
770799 else 0
771- let dw = if (sigVerify(ds.bodyBytes, ds.proofs[1], E))
800+ let dL = if (sigVerify(dH.bodyBytes, dH.proofs[1], L))
772801 then 1
773802 else 0
774- let dx = if (sigVerify(ds.bodyBytes, ds.proofs[2], F))
803+ let dM = if (sigVerify(dH.bodyBytes, dH.proofs[2], M))
775804 then 1
776805 else 0
777- (((dv + dw) + dx) >= 2)
806+ (((dK + dL) + dM) >= 2)
778807 }
779- let A = ds
780- if ($isInstanceOf(A, "InvokeScriptTransaction"))
808+ let H = dH
809+ if ($isInstanceOf(H, "InvokeScriptTransaction"))
781810 then {
782- let dr = A
783- let dy = if ((dr.dApp == this))
784- then (dr.function == "takeIntoAccountExtraFunds")
811+ let dG = H
812+ let dN = if ((dG.dApp == this))
813+ then (dG.function == "takeIntoAccountExtraFunds")
785814 else false
786- let dz = if (if (if (sigVerify(ds.bodyBytes, ds.proofs[0], D))
815+ let dO = if (if (if (sigVerify(dH.bodyBytes, dH.proofs[0], K))
787816 then true
788- else sigVerify(ds.bodyBytes, ds.proofs[0], E))
817+ else sigVerify(dH.bodyBytes, dH.proofs[0], L))
789818 then true
790- else sigVerify(ds.bodyBytes, ds.proofs[0], F))
819+ else sigVerify(dH.bodyBytes, dH.proofs[0], M))
791820 then true
792- else sigVerify(ds.bodyBytes, ds.proofs[0], G)
793- if (if (dy)
794- then dz
821+ else sigVerify(dH.bodyBytes, dH.proofs[0], N)
822+ if (if (dN)
823+ then dO
795824 else false)
796825 then true
797- else du
826+ else dJ
798827 }
799- else du
828+ else dJ
800829 }
801830

github/deemru/w8io/873ac7e 
321.36 ms