tx · G3JAdpq4Jv68ad3r8K5MfoR6xRzXRKU5AKfKPiTPMLfk

3MvRWw2FPEimFCTGtK7qY9uAJbM7XJ4ZfJS:  -0.32000000 Waves

2023.04.20 10:50 [2542593] smart account 3MvRWw2FPEimFCTGtK7qY9uAJbM7XJ4ZfJS > SELF 0.00000000 Waves

{ "type": 13, "id": "G3JAdpq4Jv68ad3r8K5MfoR6xRzXRKU5AKfKPiTPMLfk", "fee": 32000000, "feeAssetId": null, "timestamp": 1681977024482, "version": 2, "chainId": 84, "sender": "3MvRWw2FPEimFCTGtK7qY9uAJbM7XJ4ZfJS", "senderPublicKey": "HP8sssVq1866F7CaPQJwgFrt6fsqhQjKwM84cL1wjD2a", "proofs": [ "5xnpxV4XmnmKRGzMjBuMF8SeR6ne339z1nrxJDWDD1z4gD9GQHMcSyDNv5YE8FvVR3KmMsVW1SFrnkEmvpRzqGMF" ], "script": "base64:BgJlCAISAwoBCBIDCgEIEgUKAwgBCBIDCgEIEgUKAwgBCBIDCgEIEgQKAggBEgMKAQgSDgoMCAgIAQQRGBgRAQEYEgoKCAgICAEECAEYEg4KDAgICAEEGBgYGBgBGBIICgYICAEBAQFJAAdTRl9QT09MAgJTRgAHV1hfUE9PTAICV1gAD0NBUF9GRUVfTk9fTE9BTgIJY2FwTm9Mb2FuAAxDQVBfRkVFX0xPQU4CB2NhcExvYW4ACExPQU5fRkVFAgRsb2FuAAtOT19MT0FOX0ZFRQIGbm9Mb2FuAAZTQ0FMRTgAgMLXLwAHU0NBTEUxMACAyK+gJQAKRkVFX1NDQUxFNgDAhD0AFGtTRlBvb2xBQXNzZXRCYWxhbmNlAg9BX2Fzc2V0X2JhbGFuY2UAFGtTRlBvb2xCQXNzZXRCYWxhbmNlAg9CX2Fzc2V0X2JhbGFuY2UAD2tTRlBvb2xBQXNzZXRJZAIKQV9hc3NldF9pZAAPa1NGUG9vbEJBc3NldElkAgpCX2Fzc2V0X2lkAA5rU0ZQb29sU2hhcmVJZAIOc2hhcmVfYXNzZXRfaWQACmtTRlBvb2xGZWUCCmNvbW1pc3Npb24ADWtVc2VyUG9zaXRpb24CDl91c2VyX3Bvc2l0aW9uABFrVXNlckJvcnJvd0Ftb3VudAIcX3VzZXJfcG9zaXRpb25fYm9ycm93X2Ftb3VudAASa1VzZXJCb3Jyb3dBc3NldElkAh5fdXNlcl9wb3NpdGlvbl9ib3Jyb3dfYXNzZXRfaWQAEGtVc2VyUG9zaXRpb25OdW0CFV91c2VyX3Bvc2l0aW9uX251bWJlcgAVa1VzZXJQb3NpdGlvbkludGVyZXN0AhdfdXNlcl9wb3NpdGlvbl9pbnRlcmVzdAAKa1Bvb2xUb3RhbAILX3Bvb2xfdG90YWwADmtQb29sVG90YWxMb2FuAhBfcG9vbF90b3RhbF9sb2FuAA1rUG9vbEludGVyZXN0Ag5fcG9vbF9pbnRlcmVzdAAVa0F4bHlJbkZlZVdpdGhvdXRMb2FuAhZfYXhseV9mZWVfd2l0aG91dF9sb2FuABJrQXhseUluRmVlV2l0aExvYW4CE19heGx5X2ZlZV93aXRoX2xvYW4AEWtBeGx5Tm9Mb2FuQ2FwRmVlAhdfYXhseV9mZWVfY2FwX3dpdGhfbG9hbgATa0F4bHlXaXRoTG9hbkNhcEZlZQIVX2F4bHlfZmVlX2NhcF9ub19sb2FuAAprUmVxdWVzdElkAgtfcmVxdWVzdF9pZAAMa1JlcXVlc3RJdGVyAg1yZXF1ZXN0c19pdGVyAAVrUG9vbAIFcG9vbF8ACmtTaGFyZVBvb2wCDl9wb29sX3NoYXJlX2lkAA5rUG9vbENhcENoYW5nZQIQX3Bvb2xfY2FwX2NoYW5nZQAJa01vbmV5Qm94Ag5heGx5X21vbmV5X2JveAAOa1NGRmFybWluZ0FkZHICE3N3b3BmaV9mYXJtaW5nX2FkZHIADGtMZW5kU2VydmljZQIRbGVuZF9zZXJ2aWNlX2FkZHIADGtQcmljZU9yYWNsZQIMcHJpY2Vfb3JhY2xlAAtrRXhDb250cmFjdAIRZXhjaGFuZ2VfY29udHJhY3QAD2tXeFN3YXBDb250cmFjdAIQd3hfc3dhcF9jb250cmFjdAAIbW9uZXlCb3gJAQdBZGRyZXNzAQkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUJa01vbmV5Qm94AhhObyBheGx5IG1vbmV5Qm94IGFkZHJlc3MACmV4Q29udHJhY3QJAQdBZGRyZXNzAQkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwULa0V4Q29udHJhY3QCHE5vIGV4Y2hhbmdlIGNvbnRyYWN0IGFkZHJlc3MAD3ByaWNlT3JhY2xlQWRkcgkBB0FkZHJlc3MBCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQxrUHJpY2VPcmFjbGUCF05vIHByaWNlIG9yYWNsZSBhZGRyZXNzAA53eFN3YXBDb250cmFjdAkBB0FkZHJlc3MBCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQ9rV3hTd2FwQ29udHJhY3QCEk5vIHd4IHN3YXAgYWRkcmVzcwAGU1dPUElEASA0ARNWjmBG4n5bqbgBR4LnsQAmEpt25E5LoqB8nG3ugQAEV1hJRAEgxlIegU7qbuM8wJewDl8s8mrp7Z2yhtGaQnioYH0+G7EBCmlzU2VsZkNhbGwBAWkDCQAAAggFAWkGY2FsbGVyBQR0aGlzBQR1bml0CQACAQIrT25seSBjb250cmFjdCBpdHNlbGYgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgEOYWNjb3VudEJhbGFuY2UBB2Fzc2V0SWQEByRtYXRjaDAFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQCaWQFByRtYXRjaDAJAPAHAgUEdGhpcwUCaWQDCQABAgUHJG1hdGNoMAIEVW5pdAQFd2F2ZXMFByRtYXRjaDAICQDvBwEFBHRoaXMJYXZhaWxhYmxlCQACAQILTWF0Y2ggZXJyb3IBDWdldFNGUG9vbERhdGEBCHBvb2xBZGRyCQCXCgUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQhwb29sQWRkcgUPa1NGUG9vbEFBc3NldElkAhlDYW4ndCBnZXQgcG9vbCBBIGFzc2V0IGlkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUIcG9vbEFkZHIFD2tTRlBvb2xCQXNzZXRJZAIZQ2FuJ3QgZ2V0IHBvb2wgQiBhc3NldCBpZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFCHBvb2xBZGRyBRRrU0ZQb29sQUFzc2V0QmFsYW5jZQIeQ2FuJ3QgZ2V0IHBvb2wgQSBhc3NldCBiYWxhbmNlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUIcG9vbEFkZHIFFGtTRlBvb2xCQXNzZXRCYWxhbmNlAh5DYW4ndCBnZXQgcG9vbCBCIGFzc2V0IGJhbGFuY2UJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQhwb29sQWRkcgUOa1NGUG9vbFNoYXJlSWQCGENhbid0IGdldCBzaGFyZSBhc3NldCBpZAENZ2V0V1hQb29sRGF0YQEIcG9vbEFkZHIEA2NmZwoAAUAJAPwHBAUIcG9vbEFkZHICHGdldFBvb2xDb25maWdXcmFwcGVyUkVBRE9OTFkFA25pbAUDbmlsAwkAAQIFAUACCUxpc3RbQW55XQUBQAkAAgEJAKwCAgkAAwEFAUACHiBjb3VsZG4ndCBiZSBjYXN0IHRvIExpc3RbQW55XQMJAAACBQNjZmcFA2NmZwQDYUlkCQETdmFsdWVPckVycm9yTWVzc2FnZQIKAAFACQCRAwIFA2NmZwAEAwkAAQIFAUACBlN0cmluZwUBQAUEdW5pdAIZQ2FuJ3QgZ2V0IHBvb2wgQSBhc3NldCBpZAQDYklkCQETdmFsdWVPckVycm9yTWVzc2FnZQIKAAFACQCRAwIFA2NmZwAFAwkAAQIFAUACBlN0cmluZwUBQAUEdW5pdAIZQ2FuJ3QgZ2V0IHBvb2wgQiBhc3NldCBpZAQHc2hhcmVJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCgABQAkAkQMCBQNjZmcAAwMJAAECBQFAAgZTdHJpbmcFAUAFBHVuaXQCGkNhbid0IGdldCBwb29sIExQIGFzc2V0IGlkBARiYWxBCgABQAkA/AcEBQhwb29sQWRkcgIcZ2V0QWNjQmFsYW5jZVdyYXBwZXJSRUFET05MWQkAzAgCBQNhSWQFA25pbAUDbmlsAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAMJAAACBQRiYWxBBQRiYWxBBARiYWxCCgABQAkA/AcEBQhwb29sQWRkcgIcZ2V0QWNjQmFsYW5jZVdyYXBwZXJSRUFET05MWQkAzAgCBQNiSWQFA25pbAUDbmlsAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAMJAAACBQRiYWxCBQRiYWxCCQCXCgUFA2FJZAUDYklkBQRiYWxBBQRiYWxCBQdzaGFyZUlkCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQtnZXRQb29sRGF0YQIIcG9vbEFkZHIEdHlwZQMJAAACBQR0eXBlBQdTRl9QT09MCQENZ2V0U0ZQb29sRGF0YQEFCHBvb2xBZGRyAwkAAAIFBHR5cGUFB1dYX1BPT0wJAQ1nZXRXWFBvb2xEYXRhAQUIcG9vbEFkZHIJAAIBAg9Xcm9uZyBwb29sIHR5cGUBEWdldFBvb2xUb3RhbFNoYXJlAQRwb29sCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEcG9vbAUKa1Bvb2xUb3RhbAAAARlnZXRQb29sVG90YWxTaGFyZVdpdGhMb2FuAQRwb29sCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEcG9vbAUOa1Bvb2xUb3RhbExvYW4AAAEYZ2V0TmV3VXNlclBvc2l0aW9uTnVtYmVyAgRwb29sBHVzZXIJAGQCCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFEGtVc2VyUG9zaXRpb25OdW0AAAABAQpnZXRBeGx5RmVlAgRwb29sB2ZlZVR5cGUDCQAAAgUHZmVlVHlwZQUMQ0FQX0ZFRV9MT0FOCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIFBHBvb2wFE2tBeGx5V2l0aExvYW5DYXBGZWUDCQAAAgUHZmVlVHlwZQUPQ0FQX0ZFRV9OT19MT0FOCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIFBHBvb2wFEWtBeGx5Tm9Mb2FuQ2FwRmVlAwkAAAIFB2ZlZVR5cGUFCExPQU5fRkVFCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIFBHBvb2wFEmtBeGx5SW5GZWVXaXRoTG9hbgMJAAACBQdmZWVUeXBlBQtOT19MT0FOX0ZFRQkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICBQRwb29sBRVrQXhseUluRmVlV2l0aG91dExvYW4JAAIBAg5Xcm9uZyBmZWUgdHlwZQEQZ2V0U0ZGYXJtaW5nQWRkcgAJAQdBZGRyZXNzAQkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUOa1NGRmFybWluZ0FkZHICHUNhbid0IGdldCBzd29wZmkgZmFybWluZyBhZGRyARBnZXRXWEZhcm1pbmdBZGRyAQhwb29sQWRkcgQJZkNvbnRyYWN0CQEHQWRkcmVzcwEJANkEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFCHBvb2xBZGRyAhMlc19fZmFjdG9yeUNvbnRyYWN0AiJDYW4ndCBnZXQgV1ggZmFjdG9yeSBjb250cmFjdCBhZGRyBApmYWN0cm95Q2ZnCQC1CQIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQlmQ29udHJhY3QCESVzX19mYWN0b3J5Q29uZmlnAhhDYW4ndCBnZXQgV1ggZmFjdG9yeSBjZmcCAl9fCQEHQWRkcmVzcwEJANkEAQkAkQMCBQpmYWN0cm95Q2ZnAAEBDmdldExlbmRTcnZBZGRyAAkBB0FkZHJlc3MBCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQxrTGVuZFNlcnZpY2UCG0Nhbid0IGdldCBsZW5kIHNlcnZpY2UgYWRkcgEMYXNzZXRJZFRvU3RyAQdhc3NldElkBAckbWF0Y2gwBQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAmlkBQckbWF0Y2gwCQDYBAEFAmlkAwkAAQIFByRtYXRjaDACBFVuaXQEBXdhdmVzBQckbWF0Y2gwAgVXQVZFUwkAAgECC01hdGNoIGVycm9yAQ5hc3NldElkRnJvbVN0cgEHYXNzZXRJZAMJAAACBQdhc3NldElkAgVXQVZFUwUEdW5pdAkA2QQBBQdhc3NldElkARBnZXRBc3NldERlY2ltYWxzAQdhc3NldElkAwkAAAIFB2Fzc2V0SWQCBVdBVkVTAAgEByRtYXRjaDAJAOwHAQkA2QQBBQdhc3NldElkAwkAAQIFByRtYXRjaDACBUFzc2V0BAVhc3NldAUHJG1hdGNoMAgFBWFzc2V0CGRlY2ltYWxzCQACAQIQQ2FuJ3QgZmluZCBhc3NldAEPcmVwbGVuaXNoU3dvcEZpCQRwb29sB2ZlZVR5cGUEcG10QQlwbXRBc3NldEEEcG10QglwbXRBc3NldEIEYmFsQQRiYWxCB3NoYXJlSWQEEnNoYXJlQmFsYW5jZUJlZm9yZQkBDmFjY291bnRCYWxhbmNlAQkA2QQBBQdzaGFyZUlkAwkAAAIFEnNoYXJlQmFsYW5jZUJlZm9yZQUSc2hhcmVCYWxhbmNlQmVmb3JlBAhwb29sQWRkcgkBB0FkZHJlc3MBCQDZBAEFBHBvb2wEBnJhdGlvQQkAawMFBlNDQUxFOAUEcG10QQUEYmFsQQQGcmF0aW9CCQBrAwUGU0NBTEU4BQRwbXRCBQRiYWxCBAskdDA3MTM1NzQyNwMJAGYCBQZyYXRpb0IFBnJhdGlvQQQDcG10CQBuBAUEYmFsQgUGcmF0aW9BBQZTQ0FMRTgFB0NFSUxJTkcJAJYKBAUEcG10QQUDcG10CQBlAgUEcG10QgUDcG10BQlwbXRBc3NldEIEA3BtdAkAbgQFBGJhbEEFBnJhdGlvQgUGU0NBTEU4BQdDRUlMSU5HCQCWCgQFA3BtdAUEcG10QgkAZQIFBHBtdEEFA3BtdAUJcG10QXNzZXRBBApwbXRBbW91bnRBCAULJHQwNzEzNTc0MjcCXzEECnBtdEFtb3VudEIIBQskdDA3MTM1NzQyNwJfMgQGY2hhbmdlCAULJHQwNzEzNTc0MjcCXzMEDWNoYW5nZUFzc2V0SWQIBQskdDA3MTM1NzQyNwJfNAQEaW52MQMDCQBmAgUKcG10QW1vdW50QQAACQBmAgUKcG10QW1vdW50QgAABwQIcGF5bWVudHMJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ5hc3NldElkRnJvbVN0cgEFCXBtdEFzc2V0QQUKcG10QW1vdW50QQkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDmFzc2V0SWRGcm9tU3RyAQUJcG10QXNzZXRCBQpwbXRBbW91bnRCBQNuaWwJAPwHBAUIcG9vbEFkZHICDGNhbGxGdW5jdGlvbgkAzAgCAhZyZXBsZW5pc2hXaXRoVHdvVG9rZW5zCQDMCAIJAMwIAgIFZmFsc2UJAMwIAgIBMAUDbmlsBQNuaWwFCHBheW1lbnRzAAADCQAAAgUEaW52MQUEaW52MQQEaW52MgMJAGYCBQZjaGFuZ2UAAAQIcGF5bWVudHMJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ5hc3NldElkRnJvbVN0cgEFDWNoYW5nZUFzc2V0SWQFBmNoYW5nZQUDbmlsBAR2YXJzCQDMCAICATAJAMwIAgIFZmFsc2UJAMwIAgIBMAUDbmlsCQD8BwQFCHBvb2xBZGRyAgxjYWxsRnVuY3Rpb24JAMwIAgIVcmVwbGVuaXNoV2l0aE9uZVRva2VuCQDMCAIFBHZhcnMFA25pbAUIcGF5bWVudHMAAAMJAAACBQRpbnYyBQRpbnYyBBFzaGFyZUJhbGFuY2VBZnRlcgkBDmFjY291bnRCYWxhbmNlAQkA2QQBBQdzaGFyZUlkBAt0b3RhbFN0YWtlZAkAZQIFEXNoYXJlQmFsYW5jZUFmdGVyBRJzaGFyZUJhbGFuY2VCZWZvcmUEDWF4bHlGZWVBbW91bnQJAGsDBQt0b3RhbFN0YWtlZAkBCmdldEF4bHlGZWUCBQRwb29sBQdmZWVUeXBlBQpGRUVfU0NBTEU2BBF1c2VyU2hhcmVGb3JTdGFrZQkAZQIFC3RvdGFsU3Rha2VkBQ1heGx5RmVlQW1vdW50AwkAZwIAAAURdXNlclNoYXJlRm9yU3Rha2UJAAIBAihhbW91bnQgb2Ygc3Rha2VkIHNoYXJldG9rZW5zIG11c3QgYmUgPiAwBARpbnYzCQD8BwQJARBnZXRTRkZhcm1pbmdBZGRyAAIPbG9ja1NoYXJlVG9rZW5zCQDMCAIFBHBvb2wJAMwIAgAABQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJANkEAQUHc2hhcmVJZAURdXNlclNoYXJlRm9yU3Rha2UFA25pbAMJAAACBQRpbnYzBQRpbnYzCQCUCgIFEXVzZXJTaGFyZUZvclN0YWtlBQ1heGx5RmVlQW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQtyZXBsZW5pc2hXWAcEcG9vbAdmZWVUeXBlBHBtdEEJcG10QXNzZXRBBHBtdEIJcG10QXNzZXRCB3NoYXJlSWQECHBvb2xBZGRyCQEHQWRkcmVzcwEJANkEAQUEcG9vbAQLJHQwODg3ODk3MjcDAwkAZgIFBHBtdEEAAAkAZgIFBHBtdEIAAAcECmV2YWxQdXRJbkEJALUJAgoAAUAJAPwHBAUIcG9vbEFkZHICIGV2YWx1YXRlUHV0QnlBbW91bnRBc3NldFJFQURPTkxZCQDMCAIFBHBtdEEFA25pbAUDbmlsAwkAAQIFAUACBlN0cmluZwUBQAkAAgEJAKwCAgkAAwEFAUACGyBjb3VsZG4ndCBiZSBjYXN0IHRvIFN0cmluZwICX18DCQAAAgUKZXZhbFB1dEluQQUKZXZhbFB1dEluQQQKZXZhbFB1dEluQgkAtQkCCgABQAkA/AcEBQhwb29sQWRkcgIfZXZhbHVhdGVQdXRCeVByaWNlQXNzZXRSRUFET05MWQkAzAgCBQRwbXRCBQNuaWwFA25pbAMJAAECBQFAAgZTdHJpbmcFAUAJAAIBCQCsAgIJAAMBBQFAAhsgY291bGRuJ3QgYmUgY2FzdCB0byBTdHJpbmcCAl9fAwkAAAIFCmV2YWxQdXRJbkIFCmV2YWxQdXRJbkIEBWxwSW5BCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKZXZhbFB1dEluQQABBAVscEluQgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCmV2YWxQdXRJbkIAAQMJAGYCBQVscEluQgUFbHBJbkEEBnBtdEluQgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCmV2YWxQdXRJbkEACAkAlgoEBQRwbXRBBQZwbXRJbkIJAGUCBQRwbXRCBQZwbXRJbkIFCXBtdEFzc2V0QgQGcG10SW5BCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKZXZhbFB1dEluQgAHCQCWCgQFBnBtdEluQQUEcG10QgkAZQIFBHBtdEEFBnBtdEluQQUJcG10QXNzZXRBCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkAZgIFBHBtdEEAAAkAlgoEBQRwbXRBBQRwbXRCBQRwbXRBBQlwbXRBc3NldEEDCQBmAgUEcG10QgAACQCWCgQFBHBtdEEFBHBtdEIFBHBtdEIFCXBtdEFzc2V0QgkAAgECEHBtdHMgbXVzdCBiZSA+IDAECnBtdEFtb3VudEEIBQskdDA4ODc4OTcyNwJfMQQKcG10QW1vdW50QggFCyR0MDg4Nzg5NzI3Al8yBAZjaGFuZ2UIBQskdDA4ODc4OTcyNwJfMwQNY2hhbmdlQXNzZXRJZAgFCyR0MDg4Nzg5NzI3Al80BBJzaGFyZUJhbGFuY2VCZWZvcmUJAQ5hY2NvdW50QmFsYW5jZQEJANkEAQUHc2hhcmVJZAMJAAACBRJzaGFyZUJhbGFuY2VCZWZvcmUFEnNoYXJlQmFsYW5jZUJlZm9yZQQEaW52MQMDCQBmAgUKcG10QW1vdW50QQAACQBmAgUKcG10QW1vdW50QgAABwQIcGF5bWVudHMJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ5hc3NldElkRnJvbVN0cgEFCXBtdEFzc2V0QQUKcG10QW1vdW50QQkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDmFzc2V0SWRGcm9tU3RyAQUJcG10QXNzZXRCBQpwbXRBbW91bnRCBQNuaWwJAPwHBAUIcG9vbEFkZHICA3B1dAkAzAgCAMCEPQkAzAgCBwUDbmlsBQhwYXltZW50cwAAAwkAAAIFBGludjEFBGludjEEBGludjIDCQBmAgUGY2hhbmdlAAAECHBheW1lbnRzCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEOYXNzZXRJZEZyb21TdHIBBQ1jaGFuZ2VBc3NldElkBQZjaGFuZ2UFA25pbAkA/AcEBQhwb29sQWRkcgIJcHV0T25lVGtuCQDMCAIAAAkAzAgCBwUDbmlsBQhwYXltZW50cwAAAwkAAAIFBGludjIFBGludjIEEXNoYXJlQmFsYW5jZUFmdGVyCQEOYWNjb3VudEJhbGFuY2UBCQDZBAEFB3NoYXJlSWQEC3RvdGFsU3Rha2VkCQBlAgURc2hhcmVCYWxhbmNlQWZ0ZXIFEnNoYXJlQmFsYW5jZUJlZm9yZQQNYXhseUZlZUFtb3VudAkAawMFC3RvdGFsU3Rha2VkCQEKZ2V0QXhseUZlZQIFBHBvb2wFB2ZlZVR5cGUFCkZFRV9TQ0FMRTYEEXVzZXJTaGFyZUZvclN0YWtlCQBlAgULdG90YWxTdGFrZWQFDWF4bHlGZWVBbW91bnQDCQBnAgAABRF1c2VyU2hhcmVGb3JTdGFrZQkAAgECKGFtb3VudCBvZiBzdGFrZWQgc2hhcmV0b2tlbnMgbXVzdCBiZSA+IDAEBGludjMJAPwHBAkBEGdldFdYRmFybWluZ0FkZHIBBQhwb29sQWRkcgIFc3Rha2UFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkA2QQBBQdzaGFyZUlkBRF1c2VyU2hhcmVGb3JTdGFrZQUDbmlsAwkAAAIFBGludjMFBGludjMJAJQKAgURdXNlclNoYXJlRm9yU3Rha2UFDWF4bHlGZWVBbW91bnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BD3JlcGxlbmlzaEJ5VHlwZQoEdHlwZQRwb29sB2ZlZVR5cGUEcG10QQNBSWQEcG10QgNCSWQEYmFsQQRiYWxCB3NoYXJlSWQDCQAAAgUEdHlwZQUHU0ZfUE9PTAkBD3JlcGxlbmlzaFN3b3BGaQkFBHBvb2wFCExPQU5fRkVFBQRwbXRBBQNBSWQFBHBtdEIFA0JJZAUEYmFsQQUEYmFsQgUHc2hhcmVJZAMJAAACBQR0eXBlBQdXWF9QT09MCQELcmVwbGVuaXNoV1gHBQRwb29sBQhMT0FOX0ZFRQUEcG10QQUDQUlkBQRwbXRCBQNCSWQFB3NoYXJlSWQJAAIBAg9Xcm9uZyBwb29sIHR5cGUBEHJlcGxlbmlzaEVudHJpZXMHBHBvb2wEdXNlcgxzdGFrZWRBbW91bnQNYXhseUZlZUFtb3VudAZwb3NOdW0Hc2hhcmVJZAR0eXBlBAt0b3RhbEFtb3VudAkBEWdldFBvb2xUb3RhbFNoYXJlAQUEcG9vbAQPdG90YWxBbW91bnRMb2FuCQEZZ2V0UG9vbFRvdGFsU2hhcmVXaXRoTG9hbgEFBHBvb2wED2N1clBvb2xJbnRlcmVzdAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICBQRwb29sBQ1rUG9vbEludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFCmtQb29sVG90YWwJAGQCBQt0b3RhbEFtb3VudAUMc3Rha2VkQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFDmtQb29sVG90YWxMb2FuCQBkAgUPdG90YWxBbW91bnRMb2FuBQxzdGFrZWRBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfCQCkAwEFBnBvc051bQUNa1VzZXJQb3NpdGlvbgUMc3Rha2VkQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwkApAMBBQZwb3NOdW0FFWtVc2VyUG9zaXRpb25JbnRlcmVzdAUPY3VyUG9vbEludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRBrVXNlclBvc2l0aW9uTnVtBQZwb3NOdW0JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUIbW9uZXlCb3gFDWF4bHlGZWVBbW91bnQJANkEAQUHc2hhcmVJZAUDbmlsAQtjbGFpbUZhcm1lZAIEdHlwZQRwb29sAwkAAAIFBHR5cGUFB1NGX1BPT0wECWJhbEJlZm9yZQkBDmFjY291bnRCYWxhbmNlAQUGU1dPUElEAwkAAAIFCWJhbEJlZm9yZQUJYmFsQmVmb3JlBANpbnYJAPwHBAkBEGdldFNGRmFybWluZ0FkZHIAAgVjbGFpbQkAzAgCBQRwb29sBQNuaWwFA25pbAMJAAACBQNpbnYFA2ludgQIYmFsQWZ0ZXIJAQ5hY2NvdW50QmFsYW5jZQEFBlNXT1BJRAkAlAoCCQBlAgUIYmFsQWZ0ZXIFCWJhbEJlZm9yZQUGU1dPUElECQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkAAAIFBHR5cGUFB1dYX1BPT0wECWJhbEJlZm9yZQkBDmFjY291bnRCYWxhbmNlAQUEV1hJRAMJAAACBQliYWxCZWZvcmUFCWJhbEJlZm9yZQQDaW52CQD8BwQJARBnZXRXWEZhcm1pbmdBZGRyAQkBB0FkZHJlc3MBCQDZBAEFBHBvb2wCB2NsYWltV1gJAMwIAgUEcG9vbAUDbmlsBQNuaWwDCQAAAgUDaW52BQNpbnYECGJhbEFmdGVyCQEOYWNjb3VudEJhbGFuY2UBBQRXWElECQCUCgIJAGUCBQhiYWxBZnRlcgUJYmFsQmVmb3JlBQRXWElECQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIPV3JvbmcgcG9vbCB0eXBlAQ5leGNoYW5nZUtlZXBlcgoHdG9Ub2tlbglwbXRBbW91bnQIcG10QXNzZXQJYW1vdW50c0luCWFkZHJlc3Nlcw9hc3NldHNUb1JlY2VpdmULZXN0UmVjZWl2ZWQRc2xpcHBhZ2VUb2xlcmFuY2ULbWluUmVjZWl2ZWQHb3B0aW9ucwQSdG9rZW5CYWxhbmNlQmVmb3JlCQEOYWNjb3VudEJhbGFuY2UBCQEOYXNzZXRJZEZyb21TdHIBBQd0b1Rva2VuAwkAAAIFEnRva2VuQmFsYW5jZUJlZm9yZQUSdG9rZW5CYWxhbmNlQmVmb3JlBANpbnYJAPwHBAUKZXhDb250cmFjdAIEc3dhcAkAzAgCBQlhbW91bnRzSW4JAMwIAgUJYWRkcmVzc2VzCQDMCAIFD2Fzc2V0c1RvUmVjZWl2ZQkAzAgCBQtlc3RSZWNlaXZlZAkAzAgCBRFzbGlwcGFnZVRvbGVyYW5jZQkAzAgCBQttaW5SZWNlaXZlZAkAzAgCBQdvcHRpb25zBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFCHBtdEFzc2V0BQlwbXRBbW91bnQFA25pbAMJAAACBQNpbnYFA2ludgkAZQIJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFB3RvVG9rZW4FEnRva2VuQmFsYW5jZUJlZm9yZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEOZXhjaGFuZ2VQYXp6bGUGB3RvVG9rZW4JcG10QW1vdW50CHBtdEFzc2V0CXJvdXRlc1N0cgxtaW5Ub1JlY2VpdmUHb3B0aW9ucwQSdG9rZW5CYWxhbmNlQmVmb3JlCQEOYWNjb3VudEJhbGFuY2UBCQEOYXNzZXRJZEZyb21TdHIBBQd0b1Rva2VuAwkAAAIFEnRva2VuQmFsYW5jZUJlZm9yZQUSdG9rZW5CYWxhbmNlQmVmb3JlBANpbnYJAPwHBAUKZXhDb250cmFjdAIKcHV6emxlU3dhcAkAzAgCBQlyb3V0ZXNTdHIJAMwIAgUMbWluVG9SZWNlaXZlCQDMCAIFB29wdGlvbnMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUIcG10QXNzZXQFCXBtdEFtb3VudAUDbmlsAwkAAAIFA2ludgUDaW52CQBlAgkBDmFjY291bnRCYWxhbmNlAQkBDmFzc2V0SWRGcm9tU3RyAQUHdG9Ub2tlbgUSdG9rZW5CYWxhbmNlQmVmb3JlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQ5leGNoYW5nZVN3b3BGaQoHdG9Ub2tlbglwbXRBbW91bnQIcG10QXNzZXQKZXhjaGFuZ2Vycw5leGNoYW5nZXJzVHlwZQVhcmdzMQVhcmdzMhFyb3V0aW5nQXNzZXRzS2V5cxJtaW5BbW91bnRUb1JlY2VpdmUHb3B0aW9ucwQSdG9rZW5CYWxhbmNlQmVmb3JlCQEOYWNjb3VudEJhbGFuY2UBCQEOYXNzZXRJZEZyb21TdHIBBQd0b1Rva2VuAwkAAAIFEnRva2VuQmFsYW5jZUJlZm9yZQUSdG9rZW5CYWxhbmNlQmVmb3JlBANpbnYJAPwHBAUKZXhDb250cmFjdAIKc3dvcGZpU3dhcAkAzAgCBQpleGNoYW5nZXJzCQDMCAIFDmV4Y2hhbmdlcnNUeXBlCQDMCAIFBWFyZ3MxCQDMCAIFBWFyZ3MyCQDMCAIFEXJvdXRpbmdBc3NldHNLZXlzCQDMCAIFEm1pbkFtb3VudFRvUmVjZWl2ZQkAzAgCBQdvcHRpb25zBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFCHBtdEFzc2V0BQlwbXRBbW91bnQFA25pbAMJAAACBQNpbnYFA2ludgkAZQIJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFB3RvVG9rZW4FEnRva2VuQmFsYW5jZUJlZm9yZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEKY2FwaXRhbGl6ZQQEcG9vbAVwVHlwZQd0b2tlbklkC3Rva2VuQW1vdW50BAhwb29sQWRkcgkBB0FkZHJlc3MBCQDZBAEFBHBvb2wEDSR0MDE0NjkxMTQ3NzAJAQtnZXRQb29sRGF0YQIFCHBvb2xBZGRyBQVwVHlwZQQDQUlkCAUNJHQwMTQ2OTExNDc3MAJfMQQDQklkCAUNJHQwMTQ2OTExNDc3MAJfMgQEYmFsQQgFDSR0MDE0NjkxMTQ3NzACXzMEBGJhbEIIBQ0kdDAxNDY5MTE0NzcwAl80BAdzaGFyZUlkCAUNJHQwMTQ2OTExNDc3MAJfNQQNJHQwMTQ3NzMxNDg1MwMJAAACBQd0b2tlbklkBQNBSWQJAJQKAgULdG9rZW5BbW91bnQAAAkAlAoCAAAFC3Rva2VuQW1vdW50BARwbXRBCAUNJHQwMTQ3NzMxNDg1MwJfMQQEcG10QggFDSR0MDE0NzczMTQ4NTMCXzIEDSR0MDE0ODU2MTQ5NzEJAQ9yZXBsZW5pc2hCeVR5cGUKBQVwVHlwZQUEcG9vbAUMQ0FQX0ZFRV9MT0FOBQRwbXRBBQNBSWQFBHBtdEIFA0JJZAUEYmFsQQUEYmFsQgUHc2hhcmVJZAQMc3Rha2VkQW1vdW50CAUNJHQwMTQ4NTYxNDk3MQJfMQQHYXhseUZlZQgFDSR0MDE0ODU2MTQ5NzECXzIED2N1clBvb2xJbnRlcmVzdAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFDWtQb29sSW50ZXJlc3QAAAQQdG90YWxTaGFyZUFtb3VudAkBEWdldFBvb2xUb3RhbFNoYXJlAQUEcG9vbAQLbmV3SW50ZXJlc3QJAGQCBQ9jdXJQb29sSW50ZXJlc3QJAGsDBQxzdGFrZWRBbW91bnQFB1NDQUxFMTAFEHRvdGFsU2hhcmVBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUNa1Bvb2xJbnRlcmVzdAULbmV3SW50ZXJlc3QJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUIbW9uZXlCb3gFB2F4bHlGZWUJANkEAQUHc2hhcmVJZAUDbmlsARJleGNoYW5nZURpcmVjdGx5U0YHBHBvb2wIYXNzZXRJZEEIYXNzZXRJZEIEYmFsQQRiYWxCEGFtb3VudFRva2VuVG9HZXQPYXNzZXRUb2tlblRvR2V0BAhwb29sQWRkcgkBB0FkZHJlc3MBCQDZBAEFBHBvb2wECWZlZVNjYWxlNgDAhD0EA2ZlZQkBEUBleHRyTmF0aXZlKDEwNTApAgUIcG9vbEFkZHIFCmtTRlBvb2xGZWUEDGFtbnRHZXROb0ZlZQkAawMFEGFtb3VudFRva2VuVG9HZXQFCWZlZVNjYWxlNgkAZQIFCWZlZVNjYWxlNgUDZmVlBA0kdDAxNTY2NDE1OTUyAwkAAAIFD2Fzc2V0VG9rZW5Ub0dldAUIYXNzZXRJZEEEC2Ftb3VudFRvUGF5CQBrAwUEYmFsQQUMYW1udEdldE5vRmVlCQBlAgUEYmFsQgUMYW1udEdldE5vRmVlCQCUCgIFC2Ftb3VudFRvUGF5BQhhc3NldElkQgQLYW1vdW50VG9QYXkJAGsDBQRiYWxCBQxhbW50R2V0Tm9GZWUJAGUCBQRiYWxBBQxhbW50R2V0Tm9GZWUJAJQKAgULYW1vdW50VG9QYXkFCGFzc2V0SWRBBAthbW91bnRUb1BheQgFDSR0MDE1NjY0MTU5NTICXzEECmFzc2V0VG9QYXkIBQ0kdDAxNTY2NDE1OTUyAl8yCQD8BwQFCHBvb2xBZGRyAgxjYWxsRnVuY3Rpb24JAMwIAgIIZXhjaGFuZ2UJAMwIAgkAzAgCAgExBQNuaWwFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDmFzc2V0SWRGcm9tU3RyAQUKYXNzZXRUb1BheQULYW1vdW50VG9QYXkFA25pbAESZXhjaGFuZ2VEaXJlY3RseVdYBwRwb29sCGFzc2V0SWRBCGFzc2V0SWRCBGJhbEEEYmFsQhBhbW91bnRUb2tlblRvR2V0D2Fzc2V0VG9rZW5Ub0dldAQIcG9vbEFkZHIJAQdBZGRyZXNzAQkA2QQBBQRwb29sBAVwckZlZQkBEUBleHRyTmF0aXZlKDEwNTApAgUOd3hTd2FwQ29udHJhY3QCDyVzX19wcm90b2NvbEZlZQQEcEZlZQkBEUBleHRyTmF0aXZlKDEwNTApAgUOd3hTd2FwQ29udHJhY3QCCyVzX19wb29sRmVlBAhmZWVTY2FsZQkAtgIBAIDC1y8EDSR0MDE2NDMxMTY3MzkDCQAAAgUPYXNzZXRUb2tlblRvR2V0BQhhc3NldElkQQQLYW1vdW50VG9QYXkJAGsDBQRiYWxBBRBhbW91bnRUb2tlblRvR2V0CQBlAgUEYmFsQgUQYW1vdW50VG9rZW5Ub0dldAkAlAoCBQthbW91bnRUb1BheQUIYXNzZXRJZEIEC2Ftb3VudFRvUGF5CQBrAwUEYmFsQgUQYW1vdW50VG9rZW5Ub0dldAkAZQIFBGJhbEEFEGFtb3VudFRva2VuVG9HZXQJAJQKAgULYW1vdW50VG9QYXkFCGFzc2V0SWRBBAthbW91bnRUb1BheQgFDSR0MDE2NDMxMTY3MzkCXzEECmFzc2V0VG9QYXkIBQ0kdDAxNjQzMTE2NzM5Al8yBBJhbW91bnRUb1BheVdpdGhGZWUJAKADAQkAvAIDCQC2AgEFC2Ftb3VudFRvUGF5BQhmZWVTY2FsZQkAuAICBQhmZWVTY2FsZQkAtgIBCQBkAgUFcHJGZWUFBHBGZWUJAPwHBAUOd3hTd2FwQ29udHJhY3QCBHN3YXAJAMwIAgABCQDMCAIFD2Fzc2V0VG9rZW5Ub0dldAkAzAgCCQClCAEFBHRoaXMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDmFzc2V0SWRGcm9tU3RyAQUKYXNzZXRUb1BheQUSYW1vdW50VG9QYXlXaXRoRmVlBQNuaWwBEGV4Y2hhbmdlRGlyZWN0bHkIBHR5cGUEcG9vbAhhc3NldElkQQhhc3NldElkQgRiYWxBBGJhbEIQYW1vdW50VG9rZW5Ub0dldA9hc3NldFRva2VuVG9HZXQDCQAAAgUEdHlwZQUHU0ZfUE9PTAkBEmV4Y2hhbmdlRGlyZWN0bHlTRgcFBHBvb2wFCGFzc2V0SWRBBQhhc3NldElkQgUEYmFsQQUEYmFsQgUQYW1vdW50VG9rZW5Ub0dldAUPYXNzZXRUb2tlblRvR2V0CQESZXhjaGFuZ2VEaXJlY3RseVdYBwUEcG9vbAUIYXNzZXRJZEEFCGFzc2V0SWRCBQRiYWxBBQRiYWxCBRBhbW91bnRUb2tlblRvR2V0BQ9hc3NldFRva2VuVG9HZXQBEndpdGhkcmF3QW1vdW50Q2FsYwQEcG9vbA91c2VyQ2FuV2l0aGRyYXcEZGVidAtib3Jyb3dBc3NldAQIcG9vbEFkZHIJAQdBZGRyZXNzAQkA2QQBBQRwb29sBAVwVHlwZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMJAKwCAgUFa1Bvb2wFBHBvb2wCDFVua25vd24gcG9vbAQNJHQwMTc2MDQxNzY3MQkBC2dldFBvb2xEYXRhAgUIcG9vbEFkZHIFBXBUeXBlBAhhc3NldElkQQgFDSR0MDE3NjA0MTc2NzECXzEECGFzc2V0SWRCCAUNJHQwMTc2MDQxNzY3MQJfMgQEYmFsQQgFDSR0MDE3NjA0MTc2NzECXzMEBGJhbEIIBQ0kdDAxNzYwNDE3NjcxAl80BAtjQmFsQUJlZm9yZQkBDmFjY291bnRCYWxhbmNlAQkBDmFzc2V0SWRGcm9tU3RyAQUIYXNzZXRJZEEDCQAAAgULY0JhbEFCZWZvcmUFC2NCYWxBQmVmb3JlBAtjQmFsQkJlZm9yZQkBDmFjY291bnRCYWxhbmNlAQkBDmFzc2V0SWRGcm9tU3RyAQUIYXNzZXRJZEIDCQAAAgULY0JhbEJCZWZvcmUFC2NCYWxCQmVmb3JlBANpbnYDCQAAAgUFcFR5cGUFB1NGX1BPT0wJAPwHBAUIcG9vbEFkZHICDGNhbGxGdW5jdGlvbgkAzAgCAgh3aXRoZHJhdwkAzAgCCQDMCAIJAKQDAQUPdXNlckNhbldpdGhkcmF3BQNuaWwFA25pbAUDbmlsAwkAAAIFBXBUeXBlBQdXWF9QT09MCQD8BwQFCHBvb2xBZGRyAg11bnN0YWtlQW5kR2V0CQDMCAIFD3VzZXJDYW5XaXRoZHJhdwUDbmlsBQNuaWwJAAIBAhNXcm9uZyBwb3NpdGlvbiB0eXBlAwkAAAIFA2ludgUDaW52BApjQmFsQUFmdGVyCQEOYWNjb3VudEJhbGFuY2UBCQEOYXNzZXRJZEZyb21TdHIBBQhhc3NldElkQQQKY0JhbEJBZnRlcgkBDmFjY291bnRCYWxhbmNlAQkBDmFzc2V0SWRGcm9tU3RyAQUIYXNzZXRJZEIEDSR0MDE4MTgzMTgyNzIJAJQKAgkAZQIFCmNCYWxBQWZ0ZXIFC2NCYWxBQmVmb3JlCQBlAgUKY0JhbEJBZnRlcgULY0JhbEJCZWZvcmUEDXRva2Vuc0Ftb3VudEEIBQ0kdDAxODE4MzE4MjcyAl8xBA10b2tlbnNBbW91bnRCCAUNJHQwMTgxODMxODI3MgJfMgQNJHQwMTgyNzUxODk3MQMJAGYCBQRkZWJ0AAAEDWFtb3VudFRvR2V0RXgDAwkAAAIFC2JvcnJvd0Fzc2V0BQhhc3NldElkQQkAZgIFBGRlYnQFDXRva2Vuc0Ftb3VudEEHCQBlAgUEZGVidAUNdG9rZW5zQW1vdW50QQMDCQAAAgULYm9ycm93QXNzZXQFCGFzc2V0SWRCCQBmAgUEZGVidAUNdG9rZW5zQW1vdW50QgcJAGUCBQRkZWJ0BQ10b2tlbnNBbW91bnRCAAAEBWV4SW52AwkAZgIFDWFtb3VudFRvR2V0RXgAAAkBEGV4Y2hhbmdlRGlyZWN0bHkIBQVwVHlwZQUEcG9vbAUIYXNzZXRJZEEFCGFzc2V0SWRCBQRiYWxBBQRiYWxCBQ1hbW91bnRUb0dldEV4BQtib3Jyb3dBc3NldAAAAwkAAAIFBWV4SW52BQVleEludgQPY0JhbEFBZnRlclJlcGF5CQEOYWNjb3VudEJhbGFuY2UBCQEOYXNzZXRJZEZyb21TdHIBBQhhc3NldElkQQQPY0JhbEJBZnRlclJlcGF5CQEOYWNjb3VudEJhbGFuY2UBCQEOYXNzZXRJZEZyb21TdHIBBQhhc3NldElkQgkAlAoCCQBlAgUPY0JhbEFBZnRlclJlcGF5BQtjQmFsQUJlZm9yZQkAZQIFD2NCYWxCQWZ0ZXJSZXBheQULY0JhbEJCZWZvcmUJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAJQKAgUNdG9rZW5zQW1vdW50QQUNdG9rZW5zQW1vdW50QgQNdG9Vc2VyQW1vdW50QQgFDSR0MDE4Mjc1MTg5NzECXzEEDXRvVXNlckFtb3VudEIIBQ0kdDAxODI3NTE4OTcxAl8yCQCYCgYFDXRvVXNlckFtb3VudEEFCGFzc2V0SWRBBQ10b1VzZXJBbW91bnRCBQhhc3NldElkQgUKY0JhbEFBZnRlcgUKY0JhbEJBZnRlcgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEMcGFyc2VSZXF1ZXN0AQlyZXF1ZXN0SWQEB3JlcXVlc3QJALUJAgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMJAKwCAgUJcmVxdWVzdElkBQprUmVxdWVzdElkCQCsAgICE05vIHJlcXVlc3Qgd2l0aCBpZCAFCXJlcXVlc3RJZAIBLAQEdXNlcgkAkQMCBQdyZXF1ZXN0AAAEBHBvb2wJAJEDAgUHcmVxdWVzdAABBARwbXRBCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHcmVxdWVzdAACBANBSWQJAJEDAgUHcmVxdWVzdAADBARwbXRCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHcmVxdWVzdAAEBANCSWQJAJEDAgUHcmVxdWVzdAAFBARiYWxBCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHcmVxdWVzdAAGBARiYWxCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHcmVxdWVzdAAHBAdzaGFyZUlkCQCRAwIFB3JlcXVlc3QACAQHYndBc3NldAkAkQMCBQdyZXF1ZXN0AAkECGJ3QW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHcmVxdWVzdAAKCQCdCgsFBHVzZXIFBHBvb2wFBHBtdEEFA0FJZAUEcG10QgUDQklkBQRiYWxBBQRiYWxCBQdzaGFyZUlkBQdid0Fzc2V0BQhid0Ftb3VudAwBaQENZ2V0QXNzZXRQcmljZQEHYXNzZXRJZAkAlAoCBQNuaWwICgABQAkA/AcEBQ9wcmljZU9yYWNsZUFkZHICCWdldFRXQVA2MAkAzAgCBQdhc3NldElkCQDMCAIHBQNuaWwFA25pbAMJAAECBQFAAgooSW50LCBJbnQpBQFACQACAQkArAICCQADAQUBQAIfIGNvdWxkbid0IGJlIGNhc3QgdG8gKEludCwgSW50KQJfMgFpAQ1nZXRTaGFyZVByaWNlAQdzaGFyZUlkBARwb29sCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwkArAIC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CAIJAKQDAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCBQxuZXdSZXF1ZXN0SWQCGENhbid0IGNyZWF0ZSBuZXcgcmVxdWVzdAUDbmlsBANpbnYJAP0HBAkBDmdldExlbmRTcnZBZGRyAAINZmxhc2hQb3NpdGlvbgUEYXJncwUDbmlsAwkAAAIFA2ludgUDaW52CQCUCgIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCFUVWQUxPTkxZX1NUQUtFREFNT1VOVAUMYm9ycm93QW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQCUCgIICQEPcmVwbGVuaXNoQnlUeXBlCgUFcFR5cGUFBHBvb2wFC05PX0xPQU5fRkVFBQRwbXRBBQNBSWQFBHBtdEIFA0JJZAUEYmFsQQUEYmFsQgUHc2hhcmVJZAJfMQAABAp1c2VyU3Rha2VkCAUNJHQwMjEzNTQyMjgwNQJfMQQMYm9ycm93QW1vdW50CAUNJHQwMjEzNTQyMjgwNQJfMgQNJHQwMjI4MDkyMjk3NgkBEndpdGhkcmF3QW1vdW50Q2FsYwQFBHBvb2wFCnVzZXJTdGFrZWQFDGJvcnJvd0Ftb3VudAUNYm9ycm93QXNzZXRJZAMJAAACBQ0kdDAyMjgwOTIyOTc2BQ0kdDAyMjgwOTIyOTc2BBN1c2VyR2V0QkJlZm9yZVJlcGF5CAUNJHQwMjI4MDkyMjk3NgJfNgQTdXNlckdldEFCZWZvcmVSZXBheQgFDSR0MDIyODA5MjI5NzYCXzUECGFzc2V0SWRCCAUNJHQwMjI4MDkyMjk3NgJfNAQNdG9Vc2VyQW1vdW50QggFDSR0MDIyODA5MjI5NzYCXzMECGFzc2V0SWRBCAUNJHQwMjI4MDkyMjk3NgJfMgQNdG9Vc2VyQW1vdW50QQgFDSR0MDIyODA5MjI5NzYCXzEEDSR0MDIyOTc5MjMwOTQJAQtnZXRQb29sRGF0YQIJAQdBZGRyZXNzAQkA2QQBBQRwb29sBQVwVHlwZQQIQUlkQWZ0ZXIIBQ0kdDAyMjk3OTIzMDk0Al8xBAhCSWRBZnRlcggFDSR0MDIyOTc5MjMwOTQCXzIECWJhbEFBZnRlcggFDSR0MDIyOTc5MjMwOTQCXzMECWJhbEJBZnRlcggFDSR0MDIyOTc5MjMwOTQCXzQEDHNoYXJlSWRBZnRlcggFDSR0MDIyOTc5MjMwOTQCXzUEC3JhdGlvQmVmb3JlCQBrAwUEYmFsQgUGU0NBTEU4BQRiYWxBBApyYXRpb0FmdGVyCQBrAwUJYmFsQkFmdGVyBQZTQ0FMRTgFCWJhbEFBZnRlcgQGaW1wYWN0CQBlAgUGU0NBTEU4CQBrAwULcmF0aW9CZWZvcmUFBlNDQUxFOAUKcmF0aW9BZnRlcgQIaW1jYXRNb2QDCQBmAgAABQZpbXBhY3QJAGgCBQZpbXBhY3QA////////////AQUGaW1wYWN0CQCUCgIFA25pbAkAzAgCBRN1c2VyR2V0QUJlZm9yZVJlcGF5CQDMCAIFE3VzZXJHZXRCQmVmb3JlUmVwYXkJAMwIAgUIaW1jYXRNb2QFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARlyZXBsZW5pc2hGcm9tTGFuZEVWQUxPTkxZAQlyZXF1ZXN0SWQEDSR0MDIzNDY0MjM1NjgJAQxwYXJzZVJlcXVlc3QBBQlyZXF1ZXN0SWQEBHVzZXIIBQ0kdDAyMzQ2NDIzNTY4Al8xBARwb29sCAUNJHQwMjM0NjQyMzU2OAJfMgQEcG10QQgFDSR0MDIzNDY0MjM1NjgCXzMEA0FJZAgFDSR0MDIzNDY0MjM1NjgCXzQEBHBtdEIIBQ0kdDAyMzQ2NDIzNTY4Al81BANCSWQIBQ0kdDAyMzQ2NDIzNTY4Al82BARiYWxBCAUNJHQwMjM0NjQyMzU2OAJfNwQEYmFsQggFDSR0MDIzNDY0MjM1NjgCXzgEB3NoYXJlSWQIBQ0kdDAyMzQ2NDIzNTY4Al85BAdid0Fzc2V0CAUNJHQwMjM0NjQyMzU2OANfMTAECGJ3QW1vdW50CAUNJHQwMjM0NjQyMzU2OANfMTEDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhJXcm9uZyBwYXltZW50IHNpemUDAwkBAiE9AgkBDGFzc2V0SWRUb1N0cgEICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUHYndBc3NldAYJAQIhPQIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BQhid0Ftb3VudAkAAgECDVdyb25nIHBheW1lbnQEDSR0MDIzNzU4MjM4ODIDCQAAAgUDQUlkBQdid0Fzc2V0CQCUCgIJAGQCBQRwbXRBCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAUEcG10QgkAlAoCBQRwbXRBCQBkAgUEcG10QggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQEB3BtdEFsbEEIBQ0kdDAyMzc1ODIzODgyAl8xBAdwbXRBbGxCCAUNJHQwMjM3NTgyMzg4MgJfMgQFcFR5cGUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgIFBWtQb29sBQRwb29sAgxVbmtub3duIHBvb2wEDSR0MDIzOTY0MjQwNzMJAQ9yZXBsZW5pc2hCeVR5cGUKBQVwVHlwZQUEcG9vbAUITE9BTl9GRUUFBHBtdEEFA0FJZAUEcG10QgUDQklkBQRiYWxBBQRiYWxCBQdzaGFyZUlkBAp1c2VyU3Rha2VkCAUNJHQwMjM5NjQyNDA3MwJfMQQHYXhseUZlZQgFDSR0MDIzOTY0MjQwNzMCXzIJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgIVRVZBTE9OTFlfU1RBS0VEQU1PVU5UBQp1c2VyU3Rha2VkBQNuaWwFCnVzZXJTdGFrZWQBaQEJcmVwbGVuaXNoAwRwb29sCGxldmVyYWdlDWJvcnJvd0Fzc2V0SWQDAwkAZgIAZAUIbGV2ZXJhZ2UGCQBmAgUIbGV2ZXJhZ2UArAIJAAIBAh9MZXZlcmFnZSBjYW4ndCBiZSA8MTAwIGFuZCA+MzAwBAVwVHlwZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMJAKwCAgUFa1Bvb2wFBHBvb2wCElBvb2wgaXMgbm90IGluaXRlZAQNJHQwMjQ0NTAyNDU0MAkBC2dldFBvb2xEYXRhAgkBB0FkZHJlc3MBCQDZBAEFBHBvb2wFBXBUeXBlBANBSWQIBQ0kdDAyNDQ1MDI0NTQwAl8xBANCSWQIBQ0kdDAyNDQ1MDI0NTQwAl8yBARiYWxBCAUNJHQwMjQ0NTAyNDU0MAJfMwQEYmFsQggFDSR0MDI0NDUw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bmlzaEZyb21MYW5kCQDMCAIJAKQDAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCBQxuZXdSZXF1ZXN0SWQCGENhbid0IGNyZWF0ZSBuZXcgcmVxdWVzdAUDbmlsBANpbnYJAP0HBAkBDmdldExlbmRTcnZBZGRyAAINZmxhc2hQb3NpdGlvbgUEYXJncwUDbmlsAwkAAAIFA2ludgUDaW52BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4EDSR0MDI2NDc3MjY1ODkJAQ9yZXBsZW5pc2hCeVR5cGUKBQVwVHlwZQUEcG9vbAULTk9fTE9BTl9GRUUFBHBtdEEFA0FJZAUEcG10QgUDQklkBQRiYWxBBQRiYWxCBQdzaGFyZUlkBAp1c2VyU3Rha2VkCAUNJHQwMjY0NzcyNjU4OQJfMQQHYXhseUZlZQgFDSR0MDI2NDc3MjY1ODkCXzIJARByZXBsZW5pc2hFbnRyaWVzBwUEcG9vbAkApQgBCAUBaQZjYWxsZXIFCnVzZXJTdGFrZWQFB2F4bHlGZWUFCW5ld1Bvc051bQUHc2hhcmVJZAUFcFR5cGUBaQERcmVwbGVuaXNoRnJvbUxhbmQBCXJlcXVlc3RJZAQNJHQwMjY3NTEyNjg1NQkBDHBhcnNlUmVxdWVzdAEFCXJlcXVlc3RJZAQEdXNlcggFDSR0MDI2NzUxMjY4NTUCXzEEBHBvb2wIBQ0kdDAyNjc1MTI2ODU1Al8yBARwbXRBCAUNJHQwMjY3NTEyNjg1NQJfMwQDQUlkCAUNJHQwMjY3NTEyNjg1NQJfNAQEcG10QggFDSR0MDI2NzUxMjY4NTUCXzUEA0JJZAgFDSR0MDI2NzUxMjY4NTUCXzYEBGJhbEEIBQ0kdDAyNjc1MTI2ODU1Al83BARiYWxCCAUNJHQwMjY3NTEyNjg1NQJfOAQHc2hhcmVJZAgFDSR0MDI2NzUxMjY4NTUCXzkEB2J3QXNzZXQIBQ0kdDAyNjc1MTI2ODU1A18xMAQIYndBbW91bnQIBQ0kdDAyNjc1MTI2ODU1A18xMQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECEldyb25nIHBheW1lbnQgc2l6ZQMDCQECIT0CCQEMYXNzZXRJZFRvU3RyAQgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQdid0Fzc2V0BgkBAiE9AggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFCGJ3QW1vdW50CQACAQINV3JvbmcgcGF5bWVudAQNJHQwMjcwNDUyNzE2OQMJAAACBQNBSWQFB2J3QXNzZXQJAJQKAgkAZAIFBHBtdEEICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BQRwbXRCCQCUCgIFBHBtdEEJAGQCBQRwbXRCCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQHcG10QWxsQQgFDSR0MDI3MDQ1MjcxNjkCXzEEB3BtdEFsbEIIBQ0kdDAyNzA0NTI3MTY5Al8yBAVwVHlwZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMJAKwCAgUFa1Bvb2wFBHBvb2wCDFVua25vd24gcG9vbAQNJHQwMjcyNTEyNzM2MAkBD3JlcGxlbmlzaEJ5VHlwZQoFBXBUeXBlBQRwb29sBQhMT0FOX0ZFRQUEcG10QQUDQUlkBQRwbXRCBQNCSWQFBGJhbEEFBGJhbEIFB3NoYXJlSWQECnVzZXJTdGFrZWQIBQ0kdDAyNzI1MTI3MzYwAl8xBAdheGx5RmVlCAUNJHQwMjcyNTEyNzM2MAJfMgQGcG9zTnVtCQEYZ2V0TmV3VXNlclBvc2l0aW9uTnVtYmVyAgUEcG9vbAkApQgBCAUBaQZjYWxsZXIEDWJvcnJvd0VudHJpZXMJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfCQCkAwEFBnBvc051bQURa1VzZXJCb3Jyb3dBbW91bnQFCGJ3QW1vdW50CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfCQCkAwEFBnBvc051bQUSa1VzZXJCb3Jyb3dBc3NldElkBQdid0Fzc2V0BQNuaWwEB2VudHJpZXMJARByZXBsZW5pc2hFbnRyaWVzBwUEcG9vbAUEdXNlcgUKdXNlclN0YWtlZAUHYXhseUZlZQUGcG9zTnVtBQdzaGFyZUlkBQVwVHlwZQkAlAoCCQDNCAIJAM4IAgUHZW50cmllcwUNYm9ycm93RW50cmllcwkBC0RlbGV0ZUVudHJ5AQkArAICBQlyZXF1ZXN0SWQFCmtSZXF1ZXN0SWQFCnVzZXJTdGFrZWQBaQEId2l0aGRyYXcCBHBvb2wFcG9zSWQEBHVzZXIJAKUIAQgFAWkGY2FsbGVyBAdwQW1vdW50CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8JAKQDAQUFcG9zSWQFDWtVc2VyUG9zaXRpb24CEFVua25vd24gcG9zaXRpb24EDHVzZXJJbnRlcmVzdAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8JAKQDAQUFcG9zSWQFFWtVc2VyUG9zaXRpb25JbnRlcmVzdAQLcG9vbEludGVyc3QJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAUNa1Bvb2xJbnRlcmVzdAQOcG9vbFRvdGFsU2hhcmUJARFnZXRQb29sVG90YWxTaGFyZQEFBHBvb2wED3VzZXJDYW5XaXRoZHJhdwkAZAIFB3BBbW91bnQJAGsDBQdwQW1vdW50CQBlAgULcG9vbEludGVyc3QFDHVzZXJJbnRlcmVzdAUHU0NBTEUxMAQIdXNlckFkZHIJAQdBZGRyZXNzAQkA2QQBBQR1c2VyBAxib3Jyb3dBbW91bnQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfCQCkAwEFBXBvc0lkBRFrVXNlckJvcnJvd0Ftb3VudAQLYm9ycm93QXNzZXQJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfCQCkAwEFBXBvc0lkBRJrVXNlckJvcnJvd0Fzc2V0SWQEBGRlYnQDCQBmAgUMYm9ycm93QW1vdW50AAAKAAFACQD8BwQJAQ5nZXRMZW5kU3J2QWRkcgACDGdldEFzc2V0RGVidAkAzAgCBwkAzAgCCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8JAKQDAQUFcG9zSWQJAMwIAgULYm9ycm93QXNzZXQFA25pbAUDbmlsAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAAABA0kdDAyODgwMjI4OTIyCQESd2l0aGRyYXdBbW91bnRDYWxjBAUEcG9vbAUPdXNlckNhbldpdGhkcmF3BQRkZWJ0BQtib3Jyb3dBc3NldAMJAAACBQ0kdDAyODgwMjI4OTIyBQ0kdDAyODgwMjI4OTIyBAhhc3NldElkQggFDSR0MDI4ODAyMjg5MjICXzQEDXRvVXNlckFtb3VudEIIBQ0kdDAyODgwMjI4OTIyAl8zBAhhc3NldElkQQgFDSR0MDI4ODAyMjg5MjICXzIEDXRvVXNlckFtb3VudEEIBQ0kdDAyODgwMjI4OTIyAl8xBAtjbG9zZURidEludgMJAGYCBQRkZWJ0AAAJAPwHBAkBDmdldExlbmRTcnZBZGRyAAIIcmVwYXlGb3IJAMwIAgkArAICCQCsAgIFBHVzZXICAV8JAKQDAQUFcG9zSWQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDmFzc2V0SWRGcm9tU3RyAQULYm9ycm93QXNzZXQFBGRlYnQFA25pbAAAAwkAAAIFC2Nsb3NlRGJ0SW52BQtjbG9zZURidEludgkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwkApAMBBQVwb3NJZAUNa1VzZXJQb3NpdGlvbgkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwkApAMBBQVwb3NJZAUVa1VzZXJQb3NpdGlvbkludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFCmtQb29sVG90YWwJAGUCBQ5wb29sVG90YWxTaGFyZQUPdXNlckNhbldpdGhkcmF3CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFCHVzZXJBZGRyBQ10b1VzZXJBbW91bnRBCQEOYXNzZXRJZEZyb21TdHIBBQhhc3NldElkQQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQh1c2VyQWRkcgUNdG9Vc2VyQW1vdW50QgkBDmFzc2V0SWRGcm9tU3RyAQUIYXNzZXRJZEIFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARBjcmVhdGVOZXdSZXF1ZXN0AQZwYXJhbXMJAQt2YWx1ZU9yRWxzZQIJAQppc1NlbGZDYWxsAQUBaQQMbmV3UmVxdWVzdElkCQBkAgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQxrUmVxdWVzdEl0ZXIAAAABCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCkAwEFDG5ld1JlcXVlc3RJZAUKa1JlcXVlc3RJZAUGcGFyYW1zCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQxrUmVxdWVzdEl0ZXIFDG5ld1JlcXVlc3RJZAUDbmlsBQxuZXdSZXF1ZXN0SWQBaQESY2FwaXRhbGl6ZUV4S2VlcGVyDARwb29sBHR5cGUJdG9rZW5Ub0lkEGFtb3VudFRvRXhjaGFuZ2UFY2xhaW0JYW1vdW50c0luCWFkZHJlc3Nlcw9hc3NldHNUb1JlY2VpdmULZXN0UmVjZWl2ZWQRc2xpcHBhZ2VUb2xlcmFuY2ULbWluUmVjZWl2ZWQHb3B0aW9ucwQNJHQwMzAyMTkzMDQxMwMFBWNsYWltCQELY2xhaW1GYXJtZWQCBQR0eXBlBQRwb29sBAxjbGFpbWVkQXNzZXQDCQAAAgUEdHlwZQUHU0ZfUE9PTAUGU1dPUElEBQRXWElECQCUCgIFEGFtb3VudFRvRXhjaGFuZ2UFDGNsYWltZWRBc3NldAQNY2xhaW1lZEFtb3VudAgFDSR0MDMwMjE5MzA0MTMCXzEEDGNsYWltZWRBc3NldAgFDSR0MDMwMjE5MzA0MTMCXzIED2V4Y2hhbmdlZEFtb3VudAkBDmV4Y2hhbmdlS2VlcGVyCgUJdG9rZW5Ub0lkBRBhbW91bnRUb0V4Y2hhbmdlBQxjbGFpbWVkQXNzZXQFCWFtb3VudHNJbgUJYWRkcmVzc2VzBQ9hc3NldHNUb1JlY2VpdmUFC2VzdFJlY2VpdmVkBRFzbGlwcGFnZVRvbGVyYW5jZQULbWluUmVjZWl2ZWQFB29wdGlvbnMEBmNoYW5nZQkAZQIFDWNsYWltZWRBbW91bnQFEGFtb3VudFRvRXhjaGFuZ2UEC2NoYW5nZUVudHJ5AwkAZgIFBmNoYW5nZQAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFDmtQb29sQ2FwQ2hhbmdlCQBkAgUGY2hhbmdlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEcG9vbAUOa1Bvb2xDYXBDaGFuZ2UAAAUDbmlsBQNuaWwJAM4IAgkBCmNhcGl0YWxpemUEBQRwb29sBQR0eXBlBQl0b2tlblRvSWQFD2V4Y2hhbmdlZEFtb3VudAULY2hhbmdlRW50cnkBaQESY2FwaXRhbGl6ZUV4UGF6emxlCARwb29sBHR5cGUJdG9rZW5Ub0lkEGFtb3VudFRvRXhjaGFuZ2UFY2xhaW0Jcm91dGVzU3RyDG1pblRvUmVjZWl2ZQdvcHRpb25zBA0kdDAzMTA2OTMxMjYzAwUFY2xhaW0JAQtjbGFpbUZhcm1lZAIFBHR5cGUFBHBvb2wEDGNsYWltZWRBc3NldAMJAAACBQR0eXBlBQdTRl9QT09MBQZTV09QSUQFBFdYSUQJAJQKAgUQYW1vdW50VG9FeGNoYW5nZQUMY2xhaW1lZEFzc2V0BA1jbGFpbWVkQW1vdW50CAUNJHQwMzEwNjkzMTI2MwJfMQQMY2xhaW1lZEFzc2V0CAUNJHQwMzEwNjkzMTI2MwJfMgQPZXhjaGFuZ2VkQW1vdW50CQEOZXhjaGFuZ2VQYXp6bGUGBQl0b2tlblRvSWQFEGFtb3VudFRvRXhjaGFuZ2UFDGNsYWltZWRBc3NldAUJcm91dGVzU3RyBQxtaW5Ub1JlY2VpdmUFB29wdGlvbnMEBmNoYW5nZQkAZQIFDWNsYWltZWRBbW91bnQFEGFtb3VudFRvRXhjaGFuZ2UEC2NoYW5nZUVudHJ5AwkAZgIFBmNoYW5nZQAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFDmtQb29sQ2FwQ2hhbmdlCQBkAgUGY2hhbmdlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEcG9vbAUOa1Bvb2xDYXBDaGFuZ2UAAAUDbmlsBQNuaWwJAM4IAgkBCmNhcGl0YWxpemUEBQRwb29sBQR0eXBlBQl0b2tlblRvSWQFD2V4Y2hhbmdlZEFtb3VudAULY2hhbmdlRW50cnkBaQESY2FwaXRhbGl6ZUV4U3dvcEZpDARwb29sBHR5cGUJdG9rZW5Ub0lkEGFtb3VudFRvRXhjaGFuZ2UFY2xhaW0KZXhjaGFuZ2Vycw5leGNoYW5nZXJzVHlwZQVhcmdzMQVhcmdzMhFyb3V0aW5nQXNzZXRzS2V5cxJtaW5BbW91bnRUb1JlY2VpdmUHb3B0aW9ucwQNJHQwMzE5ODYzMjE4MAMFBWNsYWltCQELY2xhaW1GYXJtZWQCBQR0eXBlBQRwb29sBAxjbGFpbWVkQXNzZXQDCQAAAgUEdHlwZQUHU0ZfUE9PTAUGU1dPUElEBQRXWElECQCUCgIFEGFtb3VudFRvRXhjaGFuZ2UFDGNsYWltZWRBc3NldAQNY2xhaW1lZEFtb3VudAgFDSR0MDMxOTg2MzIxODACXzEEDGNsYWltZWRBc3NldAgFDSR0MDMxOTg2MzIxODACXzIED2V4Y2hhbmdlZEFtb3VudAkBDmV4Y2hhbmdlU3dvcEZpCgUJdG9rZW5Ub0lkBRBhbW91bnRUb0V4Y2hhbmdlBQxjbGFpbWVkQXNzZXQFCmV4Y2hhbmdlcnMFDmV4Y2hhbmdlcnNUeXBlBQVhcmdzMQUFYXJnczIFEXJvdXRpbmdBc3NldHNLZXlzBRJtaW5BbW91bnRUb1JlY2VpdmUFB29wdGlvbnMEBmNoYW5nZQkAZQIFDWNsYWltZWRBbW91bnQFEGFtb3VudFRvRXhjaGFuZ2UEC2NoYW5nZUVudHJ5AwkAZgIFBmNoYW5nZQAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFDmtQb29sQ2FwQ2hhbmdlCQBkAgUGY2hhbmdlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEcG9vbAUOa1Bvb2xDYXBDaGFuZ2UAAAUDbmlsBQNuaWwJAM4IAgkBCmNhcGl0YWxpemUEBQRwb29sBQR0eXBlBQl0b2tlblRvSWQFD2V4Y2hhbmdlZEFtb3VudAULY2hhbmdlRW50cnkBaQELaW5pdE5ld1Bvb2wGBHR5cGUIcG9vbEFkZHILaW5GZWVOb0xvYW4JaW5GZWVMb2FuDGNhcEZlZU5vTG9hbg5jYXBGZWVXaXRoTG9hbgMDCQECIT0CBQR0eXBlBQdTRl9QT09MCQECIT0CBQR0eXBlBQdXWF9QT09MBwkAAgECCldyb25nIHR5cGUEDSR0MDMyODI1MzI5MTkJAQtnZXRQb29sRGF0YQIJAQdBZGRyZXNzAQkA2QQBBQhwb29sQWRkcgUEdHlwZQQDYUlkCAUNJHQwMzI4MjUzMjkxOQJfMQQDYklkCAUNJHQwMzI4MjUzMjkxOQJfMgQEYUJhbAgFDSR0MDMyODI1MzI5MTkCXzMEBGJCYWwIBQ0kdDAzMjgyNTMyOTE5Al80BAdzaGFyZUlkCAUNJHQwMzI4MjUzMjkxOQJfNQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQhwb29sQWRkcgUVa0F4bHlJbkZlZVdpdGhvdXRMb2FuBQtpbkZlZU5vTG9hbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQhwb29sQWRkcgUSa0F4bHlJbkZlZVdpdGhMb2FuBQlpbkZlZUxvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUIcG9vbEFkZHIFEWtBeGx5Tm9Mb2FuQ2FwRmVlBQxjYXBGZWVOb0xvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUIcG9vbEFkZHIFE2tBeGx5V2l0aExvYW5DYXBGZWUFDmNhcEZlZVdpdGhMb2FuCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCHBvb2xBZGRyBQ1rUG9vbEludGVyZXN0AAAJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQVrUG9vbAUIcG9vbEFkZHIFBHR5cGUJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQdzaGFyZUlkBQprU2hhcmVQb29sBQhwb29sQWRkcgUDbmlsAQJ0eAEGdmVyaWZ5AAkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tleecYp4I=", "height": 2542593, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 3hoWt5UxKr2tE3ZN9Rdp28thqzX28PitvoW7kvgnDkXN Next: D5fR9GKAFo54kJi9S7gKH27SmohD7tgNEpmujjBqCHFk Diff:
OldNewDifferences
55
66 let b = "WX"
77
8-let c = "cap"
8+let c = "capNoLoan"
99
10-let d = "loan"
10+let d = "capLoan"
1111
12-let e = "noLoan"
12+let e = "loan"
1313
14-let f = 100000000
14+let f = "noLoan"
1515
16-let g = 10000000000
16+let g = 100000000
1717
18-let h = 1000000
18+let h = 10000000000
1919
20-let i = "A_asset_balance"
20+let i = 1000000
2121
22-let j = "B_asset_balance"
22+let j = "A_asset_balance"
2323
24-let k = "A_asset_id"
24+let k = "B_asset_balance"
2525
26-let l = "B_asset_id"
26+let l = "A_asset_id"
2727
28-let m = "share_asset_id"
28+let m = "B_asset_id"
2929
30-let n = "commission"
30+let n = "share_asset_id"
3131
32-let o = "_user_position"
32+let o = "commission"
3333
34-let p = "_user_position_borrow_amount"
34+let p = "_user_position"
3535
36-let q = "_user_position_borrow_asset_id"
36+let q = "_user_position_borrow_amount"
3737
38-let r = "_user_position_number"
38+let r = "_user_position_borrow_asset_id"
3939
40-let s = "_user_position_interest"
40+let s = "_user_position_number"
4141
42-let t = "_pool_total"
42+let t = "_user_position_interest"
4343
44-let u = "_pool_interest"
44+let u = "_pool_total"
4545
46-let v = "_axly_fee_without_loan"
46+let v = "_pool_total_loan"
4747
48-let w = "_axly_fee_with_loan"
48+let w = "_pool_interest"
4949
50-let x = "_axly_fee_cap"
50+let x = "_axly_fee_without_loan"
5151
52-let y = "_request_id"
52+let y = "_axly_fee_with_loan"
5353
54-let z = "requests_iter"
54+let z = "_axly_fee_cap_with_loan"
5555
56-let A = "pool_"
56+let A = "_axly_fee_cap_no_loan"
5757
58-let B = "_pool_cap_change"
58+let B = "_request_id"
5959
60-let C = "axly_money_box"
60+let C = "requests_iter"
6161
62-let D = "swopfi_farming_addr"
62+let D = "pool_"
6363
64-let E = "lend_service_addr"
64+let E = "_pool_share_id"
6565
66-let F = "price_oracle"
66+let F = "_pool_cap_change"
6767
68-let G = "exchange_contract"
68+let G = "axly_money_box"
6969
70-let H = "wx_swap_contract"
70+let H = "swopfi_farming_addr"
7171
72-let I = Address(fromBase58String(valueOrErrorMessage(getString(this, C), "No axly moneyBox address")))
72+let I = "lend_service_addr"
7373
74-let J = Address(fromBase58String(valueOrErrorMessage(getString(this, G), "No exchange contract address")))
74+let J = "price_oracle"
7575
76-let K = Address(fromBase58String(valueOrErrorMessage(getString(this, F), "No price oracle address")))
76+let K = "exchange_contract"
7777
78-let L = Address(fromBase58String(valueOrErrorMessage(getString(this, H), "No wx swap address")))
78+let L = "wx_swap_contract"
7979
80-let M = base58'4W19ndijcc2CsQa9HGW2dfXKTVXhnneWWttxXrtjPmEp'
80+let M = Address(fromBase58String(valueOrErrorMessage(getString(this, G), "No axly moneyBox address")))
8181
82-let N = base58'EMAMLxDnv3xiz8RXg8Btj33jcEw3wLczL3JKYYmuubpc'
82+let N = Address(fromBase58String(valueOrErrorMessage(getString(this, K), "No exchange contract address")))
8383
84-func O (P) = if ((P.caller == this))
84+let O = Address(fromBase58String(valueOrErrorMessage(getString(this, J), "No price oracle address")))
85+
86+let P = Address(fromBase58String(valueOrErrorMessage(getString(this, L), "No wx swap address")))
87+
88+let Q = base58'4W19ndijcc2CsQa9HGW2dfXKTVXhnneWWttxXrtjPmEp'
89+
90+let R = base58'EMAMLxDnv3xiz8RXg8Btj33jcEw3wLczL3JKYYmuubpc'
91+
92+func S (T) = if ((T.caller == this))
8593 then unit
8694 else throw("Only contract itself can call this function")
8795
8896
89-func Q (R) = {
90- let S = R
91- if ($isInstanceOf(S, "ByteVector"))
97+func U (V) = {
98+ let W = V
99+ if ($isInstanceOf(W, "ByteVector"))
92100 then {
93- let T = S
94- assetBalance(this, T)
101+ let X = W
102+ assetBalance(this, X)
95103 }
96- else if ($isInstanceOf(S, "Unit"))
104+ else if ($isInstanceOf(W, "Unit"))
97105 then {
98- let U = S
106+ let Y = W
99107 wavesBalance(this).available
100108 }
101109 else throw("Match error")
102110 }
103111
104112
105-func V (W) = $Tuple5(valueOrErrorMessage(getString(W, k), "Can't get pool A asset id"), valueOrErrorMessage(getString(W, l), "Can't get pool B asset id"), valueOrErrorMessage(getInteger(W, i), "Can't get pool A asset balance"), valueOrErrorMessage(getInteger(W, j), "Can't get pool B asset balance"), valueOrErrorMessage(getString(W, m), "Can't get share asset id"))
113+func Z (aa) = $Tuple5(valueOrErrorMessage(getString(aa, l), "Can't get pool A asset id"), valueOrErrorMessage(getString(aa, m), "Can't get pool B asset id"), valueOrErrorMessage(getInteger(aa, j), "Can't get pool A asset balance"), valueOrErrorMessage(getInteger(aa, k), "Can't get pool B asset balance"), valueOrErrorMessage(getString(aa, n), "Can't get share asset id"))
106114
107115
108-func X (W) = {
109- let Y = {
110- let Z = invoke(W, "getPoolConfigWrapperREADONLY", nil, nil)
111- if ($isInstanceOf(Z, "List[Any]"))
112- then Z
113- else throw(($getType(Z) + " couldn't be cast to List[Any]"))
116+func ab (aa) = {
117+ let ac = {
118+ let ad = invoke(aa, "getPoolConfigWrapperREADONLY", nil, nil)
119+ if ($isInstanceOf(ad, "List[Any]"))
120+ then ad
121+ else throw(($getType(ad) + " couldn't be cast to List[Any]"))
114122 }
115- if ((Y == Y))
116- then $Tuple5(valueOrErrorMessage({
117- let Z = Y[4]
118- if ($isInstanceOf(Z, "String"))
119- then Z
120- else unit
121- }, "Can't get pool A asset id"), valueOrErrorMessage({
122- let Z = Y[5]
123- if ($isInstanceOf(Z, "String"))
124- then Z
125- else unit
126- }, "Can't get pool B asset id"), 0, 0, valueOrErrorMessage({
127- let Z = Y[3]
128- if ($isInstanceOf(Z, "String"))
129- then Z
130- else unit
131- }, "Can't get pool LP asset id"))
123+ if ((ac == ac))
124+ then {
125+ let ae = valueOrErrorMessage({
126+ let ad = ac[4]
127+ if ($isInstanceOf(ad, "String"))
128+ then ad
129+ else unit
130+ }, "Can't get pool A asset id")
131+ let af = valueOrErrorMessage({
132+ let ad = ac[5]
133+ if ($isInstanceOf(ad, "String"))
134+ then ad
135+ else unit
136+ }, "Can't get pool B asset id")
137+ let ag = valueOrErrorMessage({
138+ let ad = ac[3]
139+ if ($isInstanceOf(ad, "String"))
140+ then ad
141+ else unit
142+ }, "Can't get pool LP asset id")
143+ let ah = {
144+ let ad = invoke(aa, "getAccBalanceWrapperREADONLY", [ae], nil)
145+ if ($isInstanceOf(ad, "Int"))
146+ then ad
147+ else throw(($getType(ad) + " couldn't be cast to Int"))
148+ }
149+ if ((ah == ah))
150+ then {
151+ let ai = {
152+ let ad = invoke(aa, "getAccBalanceWrapperREADONLY", [af], nil)
153+ if ($isInstanceOf(ad, "Int"))
154+ then ad
155+ else throw(($getType(ad) + " couldn't be cast to Int"))
156+ }
157+ if ((ai == ai))
158+ then $Tuple5(ae, af, ah, ai, ag)
159+ else throw("Strict value is not equal to itself.")
160+ }
161+ else throw("Strict value is not equal to itself.")
162+ }
132163 else throw("Strict value is not equal to itself.")
133164 }
134165
135166
136-func aa (W,ab) = if ((ab == a))
137- then V(W)
138- else if ((ab == b))
139- then X(W)
167+func aj (aa,ak) = if ((ak == a))
168+ then Z(aa)
169+ else if ((ak == b))
170+ then ab(aa)
140171 else throw("Wrong pool type")
141172
142173
143-func ac (ad) = valueOrElse(getInteger(this, (ad + t)), 0)
174+func al (am) = valueOrElse(getInteger(this, (am + u)), 0)
144175
145176
146-func ae (ad,af) = (valueOrElse(getInteger(this, (((ad + "_") + af) + r)), 0) + 1)
177+func an (am) = valueOrElse(getInteger(this, (am + v)), 0)
147178
148179
149-func ag (ad,ah) = if ((ah == "cap"))
150- then getIntegerValue(this, (ad + x))
151- else if ((ah == "loan"))
152- then getIntegerValue(this, (ad + w))
153- else if ((ah == "noLoan"))
154- then getIntegerValue(this, (ad + v))
155- else throw("Wrong fee type")
180+func ao (am,ap) = (valueOrElse(getInteger(this, (((am + "_") + ap) + s)), 0) + 1)
156181
157182
158-func ai () = Address(fromBase58String(valueOrErrorMessage(getString(this, D), "Can't get swopfi farming addr")))
183+func aq (am,ar) = if ((ar == d))
184+ then getIntegerValue(this, (am + A))
185+ else if ((ar == c))
186+ then getIntegerValue(this, (am + z))
187+ else if ((ar == e))
188+ then getIntegerValue(this, (am + y))
189+ else if ((ar == f))
190+ then getIntegerValue(this, (am + x))
191+ else throw("Wrong fee type")
159192
160193
161-func aj (W) = {
162- let ak = Address(fromBase58String(valueOrErrorMessage(getString(W, "%s__factoryContract"), "Can't get WX factory contract addr")))
163- let al = split(valueOrErrorMessage(getString(ak, "%s__factoryConfig"), "Can't get WX factory cfg"), "__")
164- Address(fromBase58String(al[1]))
194+func as () = Address(fromBase58String(valueOrErrorMessage(getString(this, H), "Can't get swopfi farming addr")))
195+
196+
197+func at (aa) = {
198+ let au = Address(fromBase58String(valueOrErrorMessage(getString(aa, "%s__factoryContract"), "Can't get WX factory contract addr")))
199+ let av = split(valueOrErrorMessage(getString(au, "%s__factoryConfig"), "Can't get WX factory cfg"), "__")
200+ Address(fromBase58String(av[1]))
165201 }
166202
167203
168-func am () = Address(fromBase58String(valueOrErrorMessage(getString(this, E), "Can't get lend service addr")))
204+func aw () = Address(fromBase58String(valueOrErrorMessage(getString(this, I), "Can't get lend service addr")))
169205
170206
171-func an (R) = {
172- let S = R
173- if ($isInstanceOf(S, "ByteVector"))
207+func ax (V) = {
208+ let W = V
209+ if ($isInstanceOf(W, "ByteVector"))
174210 then {
175- let T = S
176- toBase58String(T)
211+ let X = W
212+ toBase58String(X)
177213 }
178- else if ($isInstanceOf(S, "Unit"))
214+ else if ($isInstanceOf(W, "Unit"))
179215 then {
180- let U = S
216+ let Y = W
181217 "WAVES"
182218 }
183219 else throw("Match error")
184220 }
185221
186222
187-func ao (R) = if ((R == "WAVES"))
223+func ay (V) = if ((V == "WAVES"))
188224 then unit
189- else fromBase58String(R)
225+ else fromBase58String(V)
190226
191227
192-func ap (R) = if ((R == "WAVES"))
228+func az (V) = if ((V == "WAVES"))
193229 then 8
194230 else {
195- let S = assetInfo(fromBase58String(R))
196- if ($isInstanceOf(S, "Asset"))
231+ let W = assetInfo(fromBase58String(V))
232+ if ($isInstanceOf(W, "Asset"))
197233 then {
198- let aq = S
199- aq.decimals
234+ let aA = W
235+ aA.decimals
200236 }
201237 else throw("Can't find asset")
202238 }
203239
204240
205-func ar (ad,ah,as,at,au,av,aw,ax,ay) = {
206- let az = Q(fromBase58String(ay))
207- if ((az == az))
241+func aB (am,ar,aC,aD,aE,aF,ah,ai,ag) = {
242+ let aG = U(fromBase58String(ag))
243+ if ((aG == aG))
208244 then {
209- let W = Address(fromBase58String(ad))
210- let aA = fraction(f, as, aw)
211- let aB = fraction(f, au, ax)
212- let aC = if ((aB > aA))
245+ let aa = Address(fromBase58String(am))
246+ let aH = fraction(g, aC, ah)
247+ let aI = fraction(g, aE, ai)
248+ let aJ = if ((aI > aH))
213249 then {
214- let aD = fraction(ax, aA, f, CEILING)
215- $Tuple4(as, aD, (au - aD), av)
250+ let aK = fraction(ai, aH, g, CEILING)
251+ $Tuple4(aC, aK, (aE - aK), aF)
216252 }
217253 else {
218- let aD = fraction(aw, aB, f, CEILING)
219- $Tuple4(aD, au, (as - aD), at)
254+ let aK = fraction(ah, aI, g, CEILING)
255+ $Tuple4(aK, aE, (aC - aK), aD)
220256 }
221- let aE = aC._1
222- let aF = aC._2
223- let aG = aC._3
224- let aH = aC._4
225- let aI = if (if ((aE > 0))
226- then (aF > 0)
257+ let aL = aJ._1
258+ let aM = aJ._2
259+ let aN = aJ._3
260+ let aO = aJ._4
261+ let aP = if (if ((aL > 0))
262+ then (aM > 0)
227263 else false)
228264 then {
229- let aJ = [AttachedPayment(ao(at), aE), AttachedPayment(ao(av), aF)]
230- invoke(W, "callFunction", ["replenishWithTwoTokens", ["false", "0"]], aJ)
265+ let aQ = [AttachedPayment(ay(aD), aL), AttachedPayment(ay(aF), aM)]
266+ invoke(aa, "callFunction", ["replenishWithTwoTokens", ["false", "0"]], aQ)
231267 }
232268 else 0
233- if ((aI == aI))
269+ if ((aP == aP))
234270 then {
235- let aK = if ((aG > 0))
271+ let aR = if ((aN > 0))
236272 then {
237- let aJ = [AttachedPayment(ao(aH), aG)]
238- let aL = ["0", "false", "0"]
239- invoke(W, "callFunction", ["replenishWithOneToken", aL], aJ)
273+ let aQ = [AttachedPayment(ay(aO), aN)]
274+ let aS = ["0", "false", "0"]
275+ invoke(aa, "callFunction", ["replenishWithOneToken", aS], aQ)
240276 }
241277 else 0
242- if ((aK == aK))
278+ if ((aR == aR))
243279 then {
244- let aM = Q(fromBase58String(ay))
245- let aN = (aM - az)
246- let aO = fraction(aN, ag(ad, ah), h)
247- let aP = (aN - aO)
248- if ((0 >= aP))
280+ let aT = U(fromBase58String(ag))
281+ let aU = (aT - aG)
282+ let aV = fraction(aU, aq(am, ar), i)
283+ let aW = (aU - aV)
284+ if ((0 >= aW))
249285 then throw("amount of staked sharetokens must be > 0")
250286 else {
251- let aQ = invoke(ai(), "lockShareTokens", [ad, 0], [AttachedPayment(fromBase58String(ay), aP)])
252- if ((aQ == aQ))
253- then $Tuple2(aP, aO)
287+ let aX = invoke(as(), "lockShareTokens", [am, 0], [AttachedPayment(fromBase58String(ag), aW)])
288+ if ((aX == aX))
289+ then $Tuple2(aW, aV)
254290 else throw("Strict value is not equal to itself.")
255291 }
256292 }
262298 }
263299
264300
265-func aR (ad,ah,as,at,au,av,ay) = {
266- let W = Address(fromBase58String(ad))
267- let aS = if (if ((as > 0))
268- then (au > 0)
301+func aY (am,ar,aC,aD,aE,aF,ag) = {
302+ let aa = Address(fromBase58String(am))
303+ let aZ = if (if ((aC > 0))
304+ then (aE > 0)
269305 else false)
270306 then {
271- let aT = split({
272- let Z = invoke(W, "evaluatePutByAmountAssetREADONLY", [as], nil)
273- if ($isInstanceOf(Z, "String"))
274- then Z
275- else throw(($getType(Z) + " couldn't be cast to String"))
307+ let ba = split({
308+ let ad = invoke(aa, "evaluatePutByAmountAssetREADONLY", [aC], nil)
309+ if ($isInstanceOf(ad, "String"))
310+ then ad
311+ else throw(($getType(ad) + " couldn't be cast to String"))
276312 }, "__")
277- if ((aT == aT))
313+ if ((ba == ba))
278314 then {
279- let aU = split({
280- let Z = invoke(W, "evaluatePutByPriceAssetREADONLY", [au], nil)
281- if ($isInstanceOf(Z, "String"))
282- then Z
283- else throw(($getType(Z) + " couldn't be cast to String"))
315+ let bb = split({
316+ let ad = invoke(aa, "evaluatePutByPriceAssetREADONLY", [aE], nil)
317+ if ($isInstanceOf(ad, "String"))
318+ then ad
319+ else throw(($getType(ad) + " couldn't be cast to String"))
284320 }, "__")
285- if ((aU == aU))
321+ if ((bb == bb))
286322 then {
287- let aV = parseIntValue(aT[1])
288- let aW = parseIntValue(aU[1])
289- if ((aW > aV))
323+ let bc = parseIntValue(ba[1])
324+ let bd = parseIntValue(bb[1])
325+ if ((bd > bc))
290326 then {
291- let aX = parseIntValue(aT[8])
292- $Tuple4(as, aX, (au - aX), av)
327+ let be = parseIntValue(ba[8])
328+ $Tuple4(aC, be, (aE - be), aF)
293329 }
294330 else {
295- let aY = parseIntValue(aU[7])
296- $Tuple4(aY, au, (as - aY), at)
331+ let bf = parseIntValue(bb[7])
332+ $Tuple4(bf, aE, (aC - bf), aD)
297333 }
298334 }
299335 else throw("Strict value is not equal to itself.")
300336 }
301337 else throw("Strict value is not equal to itself.")
302338 }
303- else if ((as > 0))
304- then $Tuple4(as, au, as, at)
305- else if ((au > 0))
306- then $Tuple4(as, au, au, av)
339+ else if ((aC > 0))
340+ then $Tuple4(aC, aE, aC, aD)
341+ else if ((aE > 0))
342+ then $Tuple4(aC, aE, aE, aF)
307343 else throw("pmts must be > 0")
308- let aE = aS._1
309- let aF = aS._2
310- let aG = aS._3
311- let aH = aS._4
312- let az = Q(fromBase58String(ay))
313- if ((az == az))
344+ let aL = aZ._1
345+ let aM = aZ._2
346+ let aN = aZ._3
347+ let aO = aZ._4
348+ let aG = U(fromBase58String(ag))
349+ if ((aG == aG))
314350 then {
315- let aI = if (if ((aE > 0))
316- then (aF > 0)
351+ let aP = if (if ((aL > 0))
352+ then (aM > 0)
317353 else false)
318354 then {
319- let aJ = [AttachedPayment(ao(at), aE), AttachedPayment(ao(av), aF)]
320- invoke(W, "put", [1000000, false], aJ)
355+ let aQ = [AttachedPayment(ay(aD), aL), AttachedPayment(ay(aF), aM)]
356+ invoke(aa, "put", [1000000, false], aQ)
321357 }
322358 else 0
323- if ((aI == aI))
359+ if ((aP == aP))
324360 then {
325- let aK = if ((aG > 0))
361+ let aR = if ((aN > 0))
326362 then {
327- let aJ = [AttachedPayment(ao(aH), aG)]
328- invoke(W, "putOneTkn", [0, false], aJ)
363+ let aQ = [AttachedPayment(ay(aO), aN)]
364+ invoke(aa, "putOneTkn", [0, false], aQ)
329365 }
330366 else 0
331- if ((aK == aK))
367+ if ((aR == aR))
332368 then {
333- let aM = Q(fromBase58String(ay))
334- let aN = (aM - az)
335- let aO = fraction(aN, ag(ad, ah), h)
336- let aP = (aN - aO)
337- if ((0 >= aP))
369+ let aT = U(fromBase58String(ag))
370+ let aU = (aT - aG)
371+ let aV = fraction(aU, aq(am, ar), i)
372+ let aW = (aU - aV)
373+ if ((0 >= aW))
338374 then throw("amount of staked sharetokens must be > 0")
339375 else {
340- let aQ = invoke(aj(W), "stake", nil, [AttachedPayment(fromBase58String(ay), aP)])
341- if ((aQ == aQ))
342- then $Tuple2(aP, aO)
376+ let aX = invoke(at(aa), "stake", nil, [AttachedPayment(fromBase58String(ag), aW)])
377+ if ((aX == aX))
378+ then $Tuple2(aW, aV)
343379 else throw("Strict value is not equal to itself.")
344380 }
345381 }
351387 }
352388
353389
354-func aZ (ab,ad,ah,as,ba,au,bb,aw,ax,ay) = if ((ab == a))
355- then ar(ad, d, as, ba, au, bb, aw, ax, ay)
356- else if ((ab == b))
357- then aR(ad, d, as, ba, au, bb, ay)
390+func bg (ak,am,ar,aC,bh,aE,bi,ah,ai,ag) = if ((ak == a))
391+ then aB(am, e, aC, bh, aE, bi, ah, ai, ag)
392+ else if ((ak == b))
393+ then aY(am, e, aC, bh, aE, bi, ag)
358394 else throw("Wrong pool type")
359395
360396
361-func bc (ad,af,bd,aO,be,ay,ab) = {
362- let bf = ac(ad)
363- let bg = getIntegerValue(this, (ad + u))
364-[IntegerEntry((ad + t), (bf + bd)), IntegerEntry((((((ad + "_") + af) + "_") + toString(be)) + o), bd), IntegerEntry((((((ad + "_") + af) + "_") + toString(be)) + s), bg), IntegerEntry((((ad + "_") + af) + r), be), ScriptTransfer(I, aO, fromBase58String(ay))]
397+func bj (am,ap,bk,aV,bl,ag,ak) = {
398+ let bm = al(am)
399+ let bn = an(am)
400+ let bo = getIntegerValue(this, (am + w))
401+[IntegerEntry((am + u), (bm + bk)), IntegerEntry((am + v), (bn + bk)), IntegerEntry((((((am + "_") + ap) + "_") + toString(bl)) + p), bk), IntegerEntry((((((am + "_") + ap) + "_") + toString(bl)) + t), bo), IntegerEntry((((am + "_") + ap) + s), bl), ScriptTransfer(M, aV, fromBase58String(ag))]
365402 }
366403
367404
368-func bh (ab,ad) = if ((ab == a))
405+func bp (ak,am) = if ((ak == a))
369406 then {
370- let bi = Q(M)
371- if ((bi == bi))
407+ let bq = U(Q)
408+ if ((bq == bq))
372409 then {
373- let bj = invoke(ai(), "claim", [ad], nil)
374- if ((bj == bj))
410+ let br = invoke(as(), "claim", [am], nil)
411+ if ((br == br))
375412 then {
376- let bk = Q(M)
377- $Tuple2((bk - bi), M)
413+ let bs = U(Q)
414+ $Tuple2((bs - bq), Q)
378415 }
379416 else throw("Strict value is not equal to itself.")
380417 }
381418 else throw("Strict value is not equal to itself.")
382419 }
383- else if ((ab == b))
420+ else if ((ak == b))
384421 then {
385- let bi = Q(N)
386- if ((bi == bi))
422+ let bq = U(R)
423+ if ((bq == bq))
387424 then {
388- let bj = invoke(aj(Address(fromBase58String(ad))), "claimWX", [ad], nil)
389- if ((bj == bj))
425+ let br = invoke(at(Address(fromBase58String(am))), "claimWX", [am], nil)
426+ if ((br == br))
390427 then {
391- let bk = Q(N)
392- $Tuple2((bk - bi), N)
428+ let bs = U(R)
429+ $Tuple2((bs - bq), R)
393430 }
394431 else throw("Strict value is not equal to itself.")
395432 }
398435 else throw("Wrong pool type")
399436
400437
401-func bl (bm,bn,bo,bp,bq,br,bs,bt,bu,bv) = {
402- let bw = Q(ao(bm))
403- if ((bw == bw))
438+func bt (bu,bv,bw,bx,by,bz,bA,bB,bC,bD) = {
439+ let bE = U(ay(bu))
440+ if ((bE == bE))
404441 then {
405- let bj = invoke(J, "swap", [bp, bq, br, bs, bt, bu, bv], [AttachedPayment(bo, bn)])
406- if ((bj == bj))
407- then (Q(ao(bm)) - bw)
442+ let br = invoke(N, "swap", [bx, by, bz, bA, bB, bC, bD], [AttachedPayment(bw, bv)])
443+ if ((br == br))
444+ then (U(ay(bu)) - bE)
408445 else throw("Strict value is not equal to itself.")
409446 }
410447 else throw("Strict value is not equal to itself.")
411448 }
412449
413450
414-func bx (bm,bn,bo,by,bz,bv) = {
415- let bw = Q(ao(bm))
416- if ((bw == bw))
451+func bF (bu,bv,bw,bG,bH,bD) = {
452+ let bE = U(ay(bu))
453+ if ((bE == bE))
417454 then {
418- let bj = invoke(J, "puzzleSwap", [by, bz, bv], [AttachedPayment(bo, bn)])
419- if ((bj == bj))
420- then (Q(ao(bm)) - bw)
455+ let br = invoke(N, "puzzleSwap", [bG, bH, bD], [AttachedPayment(bw, bv)])
456+ if ((br == br))
457+ then (U(ay(bu)) - bE)
421458 else throw("Strict value is not equal to itself.")
422459 }
423460 else throw("Strict value is not equal to itself.")
424461 }
425462
426463
427-func bA (bm,bn,bo,bB,bC,bD,bE,bF,bG,bv) = {
428- let bw = Q(ao(bm))
429- if ((bw == bw))
464+func bI (bu,bv,bw,bJ,bK,bL,bM,bN,bO,bD) = {
465+ let bE = U(ay(bu))
466+ if ((bE == bE))
430467 then {
431- let bj = invoke(J, "swopfiSwap", [bB, bC, bD, bE, bF, bG, bv], [AttachedPayment(bo, bn)])
432- if ((bj == bj))
433- then (Q(ao(bm)) - bw)
468+ let br = invoke(N, "swopfiSwap", [bJ, bK, bL, bM, bN, bO, bD], [AttachedPayment(bw, bv)])
469+ if ((br == br))
470+ then (U(ay(bu)) - bE)
434471 else throw("Strict value is not equal to itself.")
435472 }
436473 else throw("Strict value is not equal to itself.")
437474 }
438475
439476
440-func bH (ad,bI,bJ,bK) = {
441- let W = Address(fromBase58String(ad))
442- let bL = aa(W, bI)
443- let ba = bL._1
444- let bb = bL._2
445- let aw = bL._3
446- let ax = bL._4
447- let ay = bL._5
448- let bM = if ((bJ == ba))
449- then $Tuple2(bK, 0)
450- else $Tuple2(0, bK)
451- let as = bM._1
452- let au = bM._2
453- let bN = aZ(bI, ad, c, as, ba, au, bb, aw, ax, ay)
454- let bd = bN._1
455- let bO = bN._2
456- let bg = valueOrElse(getInteger(this, (ad + u)), 0)
457- let bP = ac(ad)
458- let bQ = (bg + fraction(bd, g, bP))
459-[IntegerEntry((ad + u), bQ), ScriptTransfer(I, bO, fromBase58String(ay))]
477+func bP (am,bQ,bR,bS) = {
478+ let aa = Address(fromBase58String(am))
479+ let bT = aj(aa, bQ)
480+ let bh = bT._1
481+ let bi = bT._2
482+ let ah = bT._3
483+ let ai = bT._4
484+ let ag = bT._5
485+ let bU = if ((bR == bh))
486+ then $Tuple2(bS, 0)
487+ else $Tuple2(0, bS)
488+ let aC = bU._1
489+ let aE = bU._2
490+ let bV = bg(bQ, am, d, aC, bh, aE, bi, ah, ai, ag)
491+ let bk = bV._1
492+ let bW = bV._2
493+ let bo = valueOrElse(getInteger(this, (am + w)), 0)
494+ let bX = al(am)
495+ let bY = (bo + fraction(bk, h, bX))
496+[IntegerEntry((am + w), bY), ScriptTransfer(M, bW, fromBase58String(ag))]
460497 }
461498
462499
463-func bR (ad,bS,bT,aw,ax,bU,bV) = {
464- let W = Address(fromBase58String(ad))
465- let bW = 1000000
466- let bX = getIntegerValue(W, n)
467- let bY = fraction(bU, bW, (bW - bX))
468- let bZ = if ((bV == bS))
500+func bZ (am,ca,cb,ah,ai,cc,cd) = {
501+ let aa = Address(fromBase58String(am))
502+ let ce = 1000000
503+ let cf = getIntegerValue(aa, o)
504+ let cg = fraction(cc, ce, (ce - cf))
505+ let ch = if ((cd == ca))
469506 then {
470- let ca = fraction(aw, bY, (ax - bY))
471- $Tuple2(ca, bT)
507+ let ci = fraction(ah, cg, (ai - cg))
508+ $Tuple2(ci, cb)
472509 }
473510 else {
474- let ca = fraction(ax, bY, (aw - bY))
475- $Tuple2(ca, bS)
511+ let ci = fraction(ai, cg, (ah - cg))
512+ $Tuple2(ci, ca)
476513 }
477- let ca = bZ._1
478- let cb = bZ._2
479- invoke(W, "callFunction", ["exchange", ["1"]], [AttachedPayment(ao(cb), ca)])
514+ let ci = ch._1
515+ let cj = ch._2
516+ invoke(aa, "callFunction", ["exchange", ["1"]], [AttachedPayment(ay(cj), ci)])
480517 }
481518
482519
483-func cc (ad,bS,bT,aw,ax,bU,bV) = {
484- let W = Address(fromBase58String(ad))
485- let cd = getIntegerValue(L, "%s__protocolFee")
486- let ce = getIntegerValue(L, "%s__poolFee")
487- let cf = toBigInt(100000000)
488- let cg = if ((bV == bS))
520+func ck (am,ca,cb,ah,ai,cc,cd) = {
521+ let aa = Address(fromBase58String(am))
522+ let cl = getIntegerValue(P, "%s__protocolFee")
523+ let cm = getIntegerValue(P, "%s__poolFee")
524+ let cn = toBigInt(100000000)
525+ let co = if ((cd == ca))
489526 then {
490- let ca = fraction(aw, bU, (ax - bU))
491- $Tuple2(ca, bT)
527+ let ci = fraction(ah, cc, (ai - cc))
528+ $Tuple2(ci, cb)
492529 }
493530 else {
494- let ca = fraction(ax, bU, (aw - bU))
495- $Tuple2(ca, bS)
531+ let ci = fraction(ai, cc, (ah - cc))
532+ $Tuple2(ci, ca)
496533 }
497- let ca = cg._1
498- let cb = cg._2
499- let ch = toInt(fraction(toBigInt(ca), cf, (cf - toBigInt((cd + ce)))))
500- invoke(L, "swap", [1, bV, toString(this)], [AttachedPayment(ao(cb), ch)])
534+ let ci = co._1
535+ let cj = co._2
536+ let cp = toInt(fraction(toBigInt(ci), cn, (cn - toBigInt((cl + cm)))))
537+ invoke(P, "swap", [1, cd, toString(this)], [AttachedPayment(ay(cj), cp)])
501538 }
502539
503540
504-func ci (ab,ad,bS,bT,aw,ax,bU,bV) = if ((ab == a))
505- then bR(ad, bS, bT, aw, ax, bU, bV)
506- else cc(ad, bS, bT, aw, ax, bU, bV)
541+func cq (ak,am,ca,cb,ah,ai,cc,cd) = if ((ak == a))
542+ then bZ(am, ca, cb, ah, ai, cc, cd)
543+ else ck(am, ca, cb, ah, ai, cc, cd)
507544
508545
509-func cj (ad,ck,cl,cm) = {
510- let W = Address(fromBase58String(ad))
511- let bI = valueOrErrorMessage(getString(this, (A + ad)), "Unknown pool")
512- let cn = aa(W, bI)
513- let bS = cn._1
514- let bT = cn._2
515- let aw = cn._3
516- let ax = cn._4
517- let co = Q(ao(bS))
518- if ((co == co))
546+func cr (am,cs,ct,cu) = {
547+ let aa = Address(fromBase58String(am))
548+ let bQ = valueOrErrorMessage(getString(this, (D + am)), "Unknown pool")
549+ let cv = aj(aa, bQ)
550+ let ca = cv._1
551+ let cb = cv._2
552+ let ah = cv._3
553+ let ai = cv._4
554+ let cw = U(ay(ca))
555+ if ((cw == cw))
519556 then {
520- let cp = Q(ao(bT))
521- if ((cp == cp))
557+ let cx = U(ay(cb))
558+ if ((cx == cx))
522559 then {
523- let bj = if ((bI == a))
524- then invoke(W, "callFunction", ["withdraw", [toString(ck)]], nil)
525- else if ((bI == b))
526- then invoke(W, "unstakeAndGet", [ck], nil)
560+ let br = if ((bQ == a))
561+ then invoke(aa, "callFunction", ["withdraw", [toString(cs)]], nil)
562+ else if ((bQ == b))
563+ then invoke(aa, "unstakeAndGet", [cs], nil)
527564 else throw("Wrong position type")
528- if ((bj == bj))
565+ if ((br == br))
529566 then {
530- let cq = Q(ao(bS))
531- let cr = Q(ao(bT))
532- let cs = $Tuple2((cq - co), (cr - cp))
533- let ct = cs._1
534- let cu = cs._2
535- let cv = if ((cl > 0))
567+ let cy = U(ay(ca))
568+ let cz = U(ay(cb))
569+ let cA = $Tuple2((cy - cw), (cz - cx))
570+ let cB = cA._1
571+ let cC = cA._2
572+ let cD = if ((ct > 0))
536573 then {
537- let cw = if (if ((cm == bS))
538- then (cl > ct)
574+ let cE = if (if ((cu == ca))
575+ then (ct > cB)
539576 else false)
540- then (cl - ct)
541- else if (if ((cm == bT))
542- then (cl > cu)
577+ then (ct - cB)
578+ else if (if ((cu == cb))
579+ then (ct > cC)
543580 else false)
544- then (cl - cu)
581+ then (ct - cC)
545582 else 0
546- let cx = if ((cw > 0))
547- then ci(bI, ad, bS, bT, aw, ax, cw, cm)
583+ let cF = if ((cE > 0))
584+ then cq(bQ, am, ca, cb, ah, ai, cE, cu)
548585 else 0
549- if ((cx == cx))
586+ if ((cF == cF))
550587 then {
551- let cy = Q(ao(bS))
552- let cz = Q(ao(bT))
553- $Tuple2((cy - co), (cz - cp))
588+ let cG = U(ay(ca))
589+ let cH = U(ay(cb))
590+ $Tuple2((cG - cw), (cH - cx))
554591 }
555592 else throw("Strict value is not equal to itself.")
556593 }
557- else $Tuple2(ct, cu)
558- let cA = cv._1
559- let cB = cv._2
560- $Tuple4(cA, bS, cB, bT)
594+ else $Tuple2(cB, cC)
595+ let cI = cD._1
596+ let cJ = cD._2
597+ $Tuple6(cI, ca, cJ, cb, cy, cz)
561598 }
562599 else throw("Strict value is not equal to itself.")
563600 }
567604 }
568605
569606
570-func cC (cD) = {
571- let cE = split(valueOrErrorMessage(getString(this, (cD + y)), ("No request with id " + cD)), ",")
572- let af = cE[0]
573- let ad = cE[1]
574- let as = parseIntValue(cE[2])
575- let ba = cE[3]
576- let au = parseIntValue(cE[4])
577- let bb = cE[5]
578- let aw = parseIntValue(cE[6])
579- let ax = parseIntValue(cE[7])
580- let ay = cE[8]
581- let cF = cE[9]
582- let cG = parseIntValue(cE[10])
583- $Tuple11(af, ad, as, ba, au, bb, aw, ax, ay, cF, cG)
607+func cK (cL) = {
608+ let cM = split(valueOrErrorMessage(getString(this, (cL + B)), ("No request with id " + cL)), ",")
609+ let ap = cM[0]
610+ let am = cM[1]
611+ let aC = parseIntValue(cM[2])
612+ let bh = cM[3]
613+ let aE = parseIntValue(cM[4])
614+ let bi = cM[5]
615+ let ah = parseIntValue(cM[6])
616+ let ai = parseIntValue(cM[7])
617+ let ag = cM[8]
618+ let cN = cM[9]
619+ let cO = parseIntValue(cM[10])
620+ $Tuple11(ap, am, aC, bh, aE, bi, ah, ai, ag, cN, cO)
584621 }
585622
586623
587-@Callable(P)
588-func replenishEVALONLY (ad,cH,cI) = if (if ((100 > cH))
624+@Callable(T)
625+func getAssetPrice (V) = $Tuple2(nil, (let ad = invoke(O, "getTWAP60", [V, false], nil)
626+if ($isInstanceOf(ad, "(Int, Int)"))
627+ then ad
628+ else throw(($getType(ad) + " couldn't be cast to (Int, Int)")))._2)
629+
630+
631+
632+@Callable(T)
633+func getSharePrice (ag) = {
634+ let am = valueOrErrorMessage(getString(this, (ag + E)), "Can't find pool addr by share id")
635+ let bQ = valueOrErrorMessage(getString(this, (D + am)), "Pool is not inited")
636+ let cP = aj(Address(fromBase58String(am)), bQ)
637+ let ae = cP._1
638+ let af = cP._2
639+ let cQ = ( let ad = invoke(O, "getTWAP60", [ae, false], nil)
640+ if ($isInstanceOf(ad, "(Int, Int)"))
641+ then ad
642+ else throw(($getType(ad) + " couldn't be cast to (Int, Int)")))._2
643+ let cR = ( let ad = invoke(O, "getTWAP60", [af, false], nil)
644+ if ($isInstanceOf(ad, "(Int, Int)"))
645+ then ad
646+ else throw(($getType(ad) + " couldn't be cast to (Int, Int)")))._2
647+ $Tuple2(nil, (cQ + cR))
648+ }
649+
650+
651+
652+@Callable(T)
653+func replenishEVALONLY (am,cS,cT) = if (if ((100 > cS))
589654 then true
590- else (cH > 300))
655+ else (cS > 300))
591656 then throw("Leverage can't be <100 and >300")
592657 else {
593- let bI = valueOrErrorMessage(getString(this, (A + ad)), "Pool is not inited")
594- let cJ = aa(Address(fromBase58String(ad)), bI)
595- let ba = cJ._1
596- let bb = cJ._2
597- let aw = cJ._3
598- let ax = cJ._4
599- let ay = cJ._5
600- let cK = if ((size(P.payments) == 2))
601- then if ((an(P.payments[0].assetId) != ba))
658+ let bQ = valueOrErrorMessage(getString(this, (D + am)), "Pool is not inited")
659+ let cU = aj(Address(fromBase58String(am)), bQ)
660+ let bh = cU._1
661+ let bi = cU._2
662+ let ah = cU._3
663+ let ai = cU._4
664+ let ag = cU._5
665+ let cV = if ((size(T.payments) == 2))
666+ then if ((ax(T.payments[0].assetId) != bh))
602667 then throw("Wrong payment asset A")
603- else if ((an(P.payments[1].assetId) != bb))
668+ else if ((ax(T.payments[1].assetId) != bi))
604669 then throw("Wrong payment asset B")
605- else $Tuple4(P.payments[0].amount, ba, P.payments[1].amount, bb)
606- else if ((size(P.payments) == 1))
607- then if ((an(P.payments[0].assetId) == ba))
608- then $Tuple4(P.payments[0].amount, ba, 0, bb)
609- else if ((an(P.payments[0].assetId) == bb))
610- then $Tuple4(0, ba, P.payments[0].amount, bb)
670+ else $Tuple4(T.payments[0].amount, bh, T.payments[1].amount, bi)
671+ else if ((size(T.payments) == 1))
672+ then if ((ax(T.payments[0].assetId) == bh))
673+ then $Tuple4(T.payments[0].amount, bh, 0, bi)
674+ else if ((ax(T.payments[0].assetId) == bi))
675+ then $Tuple4(0, bh, T.payments[0].amount, bi)
611676 else throw("Wrong payment")
612677 else throw("One or two payments expected")
613- let as = cK._1
614- let at = cK._2
615- let au = cK._3
616- let av = cK._4
617- let cL = if ((cH > 100))
678+ let aC = cV._1
679+ let aD = cV._2
680+ let aE = cV._3
681+ let aF = cV._4
682+ let cW = if ((cS > 100))
618683 then {
619- let cM = ( let Z = invoke(K, "getTWAP60", [at, false], nil)
620- if ($isInstanceOf(Z, "(Int, Int)"))
621- then Z
622- else throw(($getType(Z) + " couldn't be cast to (Int, Int)")))._1
623- let cN = ( let Z = invoke(K, "getTWAP60", [av, false], nil)
624- if ($isInstanceOf(Z, "(Int, Int)"))
625- then Z
626- else throw(($getType(Z) + " couldn't be cast to (Int, Int)")))._1
627- let cO = (fraction(cM, as, pow(10, 0, ap(at), 0, 0, DOWN)) + fraction(cN, au, pow(10, 0, ap(av), 0, 0, DOWN)))
628- let cP = fraction(cO, (cH - 100), 100)
629- let cE = makeString([toString(P.caller), ad, toString(as), at, toString(au), av, toString(aw), toString(ax), ay, cI, toString(cP), toString(1)], ",")
630- let cQ = {
631- let Z = invoke(this, "createNewRequest", [cE], nil)
632- if ($isInstanceOf(Z, "Int"))
633- then Z
634- else throw(($getType(Z) + " couldn't be cast to Int"))
684+ let cQ = ( let ad = invoke(O, "getTWAP60", [aD, false], nil)
685+ if ($isInstanceOf(ad, "(Int, Int)"))
686+ then ad
687+ else throw(($getType(ad) + " couldn't be cast to (Int, Int)")))._2
688+ let cR = ( let ad = invoke(O, "getTWAP60", [aF, false], nil)
689+ if ($isInstanceOf(ad, "(Int, Int)"))
690+ then ad
691+ else throw(($getType(ad) + " couldn't be cast to (Int, Int)")))._2
692+ let cX = (fraction(cQ, aC, pow(10, 0, az(aD), 0, 0, DOWN)) + fraction(cR, aE, pow(10, 0, az(aF), 0, 0, DOWN)))
693+ let cY = fraction(cX, (cS - 100), 100)
694+ let cM = makeString([toString(T.caller), am, toString(aC), aD, toString(aE), aF, toString(ah), toString(ai), ag, cT, toString(cY), toString(1)], ",")
695+ let cZ = {
696+ let ad = invoke(this, "createNewRequest", [cM], nil)
697+ if ($isInstanceOf(ad, "Int"))
698+ then ad
699+ else throw(($getType(ad) + " couldn't be cast to Int"))
635700 }
636- if ((cQ == cQ))
701+ if ((cZ == cZ))
637702 then {
638- let cR = [((toString(P.caller) + "_") + toString(1)), ay, cI, cP, toString(this), "replenishFromLandReadOnly", toString(valueOrErrorMessage(cQ, "Can't create new request"))]
639- let bj = reentrantInvoke(am(), "flashPosition", cR, nil)
640- if ((bj == bj))
641- then $Tuple2(getIntegerValue(this, "EVALONLY_STAKEDAMOUNT"), cP)
703+ let da = [((toString(T.caller) + "_") + toString(1)), ag, cT, cY, toString(this), "replenishFromLandReadOnly", toString(valueOrErrorMessage(cZ, "Can't create new request"))]
704+ let br = reentrantInvoke(aw(), "flashPosition", da, nil)
705+ if ((br == br))
706+ then $Tuple2(getIntegerValue(this, "EVALONLY_STAKEDAMOUNT"), cY)
642707 else throw("Strict value is not equal to itself.")
643708 }
644709 else throw("Strict value is not equal to itself.")
645710 }
646- else $Tuple2(aZ(bI, ad, e, as, ba, au, bb, aw, ax, ay)._1, 0)
647- let cS = cL._1
648- let cP = cL._2
649- let cT = cj(ad, cS, cP, cI)
650- if ((cT == cT))
711+ else $Tuple2(bg(bQ, am, f, aC, bh, aE, bi, ah, ai, ag)._1, 0)
712+ let db = cW._1
713+ let cY = cW._2
714+ let dc = cr(am, db, cY, cT)
715+ if ((dc == dc))
651716 then {
652- let bT = cT._4
653- let cB = cT._3
654- let bS = cT._2
655- let cA = cT._1
656- $Tuple2(nil, [cS, cA, cB])
717+ let dd = dc._6
718+ let de = dc._5
719+ let cb = dc._4
720+ let cJ = dc._3
721+ let ca = dc._2
722+ let cI = dc._1
723+ let df = aj(Address(fromBase58String(am)), bQ)
724+ let dg = df._1
725+ let dh = df._2
726+ let di = df._3
727+ let dj = df._4
728+ let dk = df._5
729+ let dl = fraction(ai, g, ah)
730+ let dm = fraction(dj, g, di)
731+ let dn = (g - fraction(dl, g, dm))
732+ let do = if ((0 > dn))
733+ then (dn * -1)
734+ else dn
735+ $Tuple2(nil, [de, dd, do])
657736 }
658737 else throw("Strict value is not equal to itself.")
659738 }
660739
661740
662741
663-@Callable(P)
664-func replenishFromLandEVALONLY (cD) = {
665- let cU = cC(cD)
666- let af = cU._1
667- let ad = cU._2
668- let as = cU._3
669- let ba = cU._4
670- let au = cU._5
671- let bb = cU._6
672- let aw = cU._7
673- let ax = cU._8
674- let ay = cU._9
675- let cF = cU._10
676- let cG = cU._11
677- if ((size(P.payments) != 1))
742+@Callable(T)
743+func replenishFromLandEVALONLY (cL) = {
744+ let dp = cK(cL)
745+ let ap = dp._1
746+ let am = dp._2
747+ let aC = dp._3
748+ let bh = dp._4
749+ let aE = dp._5
750+ let bi = dp._6
751+ let ah = dp._7
752+ let ai = dp._8
753+ let ag = dp._9
754+ let cN = dp._10
755+ let cO = dp._11
756+ if ((size(T.payments) != 1))
678757 then throw("Wrong payment size")
679- else if (if ((an(P.payments[0].assetId) != cF))
758+ else if (if ((ax(T.payments[0].assetId) != cN))
680759 then true
681- else (P.payments[0].amount != cG))
760+ else (T.payments[0].amount != cO))
682761 then throw("Wrong payment")
683762 else {
684- let cV = if ((ba == cF))
685- then $Tuple2((as + P.payments[0].amount), au)
686- else $Tuple2(as, (au + P.payments[0].amount))
687- let cW = cV._1
688- let cX = cV._2
689- let bI = valueOrErrorMessage(getString(this, (A + ad)), "Unknown pool")
690- let cY = aZ(bI, ad, d, as, ba, au, bb, aw, ax, ay)
691- let cS = cY._1
692- let bO = cY._2
693- $Tuple2([IntegerEntry("EVALONLY_STAKEDAMOUNT", cS)], cS)
763+ let dq = if ((bh == cN))
764+ then $Tuple2((aC + T.payments[0].amount), aE)
765+ else $Tuple2(aC, (aE + T.payments[0].amount))
766+ let dr = dq._1
767+ let ds = dq._2
768+ let bQ = valueOrErrorMessage(getString(this, (D + am)), "Unknown pool")
769+ let dt = bg(bQ, am, e, aC, bh, aE, bi, ah, ai, ag)
770+ let db = dt._1
771+ let bW = dt._2
772+ $Tuple2([IntegerEntry("EVALONLY_STAKEDAMOUNT", db)], db)
694773 }
695774 }
696775
697776
698777
699-@Callable(P)
700-func replenish (ad,cH,cI) = if (if ((100 > cH))
778+@Callable(T)
779+func replenish (am,cS,cT) = if (if ((100 > cS))
701780 then true
702- else (cH > 300))
781+ else (cS > 300))
703782 then throw("Leverage can't be <100 and >300")
704783 else {
705- let bI = valueOrErrorMessage(getString(this, (A + ad)), "Pool is not inited")
706- let cZ = aa(Address(fromBase58String(ad)), bI)
707- let ba = cZ._1
708- let bb = cZ._2
709- let aw = cZ._3
710- let ax = cZ._4
711- let ay = cZ._5
712- let da = if ((size(P.payments) == 2))
713- then if ((an(P.payments[0].assetId) != ba))
784+ let bQ = valueOrErrorMessage(getString(this, (D + am)), "Pool is not inited")
785+ let du = aj(Address(fromBase58String(am)), bQ)
786+ let bh = du._1
787+ let bi = du._2
788+ let ah = du._3
789+ let ai = du._4
790+ let ag = du._5
791+ let dv = if ((size(T.payments) == 2))
792+ then if ((ax(T.payments[0].assetId) != bh))
714793 then throw("Wrong payment asset A")
715- else if ((an(P.payments[1].assetId) != bb))
794+ else if ((ax(T.payments[1].assetId) != bi))
716795 then throw("Wrong payment asset B")
717- else $Tuple4(P.payments[0].amount, ba, P.payments[1].amount, bb)
718- else if ((size(P.payments) == 1))
719- then if ((an(P.payments[0].assetId) == ba))
720- then $Tuple4(P.payments[0].amount, ba, 0, bb)
721- else if ((an(P.payments[0].assetId) == bb))
722- then $Tuple4(0, ba, P.payments[0].amount, bb)
796+ else $Tuple4(T.payments[0].amount, bh, T.payments[1].amount, bi)
797+ else if ((size(T.payments) == 1))
798+ then if ((ax(T.payments[0].assetId) == bh))
799+ then $Tuple4(T.payments[0].amount, bh, 0, bi)
800+ else if ((ax(T.payments[0].assetId) == bi))
801+ then $Tuple4(0, bh, T.payments[0].amount, bi)
723802 else throw("Wrong payment")
724803 else throw("One or two payments expected")
725- let as = da._1
726- let at = da._2
727- let au = da._3
728- let av = da._4
729- let db = ae(ad, toString(P.caller))
730- if ((cH > 100))
804+ let aC = dv._1
805+ let aD = dv._2
806+ let aE = dv._3
807+ let aF = dv._4
808+ let dw = ao(am, toString(T.caller))
809+ if ((cS > 100))
731810 then {
732- let cM = ( let Z = invoke(K, "getTWAP60", [at, false], nil)
733- if ($isInstanceOf(Z, "(Int, Int)"))
734- then Z
735- else throw(($getType(Z) + " couldn't be cast to (Int, Int)")))._1
736- let cN = ( let Z = invoke(K, "getTWAP60", [av, false], nil)
737- if ($isInstanceOf(Z, "(Int, Int)"))
738- then Z
739- else throw(($getType(Z) + " couldn't be cast to (Int, Int)")))._1
740- let cO = (fraction(cM, as, pow(10, 0, ap(at), 0, 0, DOWN)) + fraction(cN, au, pow(10, 0, ap(av), 0, 0, DOWN)))
741- let cP = fraction(cO, (cH - 100), 100)
742- let cE = makeString([toString(P.caller), ad, toString(as), at, toString(au), av, toString(aw), toString(ax), ay, cI, toString(cP)], ",")
743- let cQ = {
744- let Z = invoke(this, "createNewRequest", [cE], nil)
745- if ($isInstanceOf(Z, "Int"))
746- then Z
747- else throw(($getType(Z) + " couldn't be cast to Int"))
811+ let cQ = ( let ad = invoke(O, "getTWAP60", [aD, false], nil)
812+ if ($isInstanceOf(ad, "(Int, Int)"))
813+ then ad
814+ else throw(($getType(ad) + " couldn't be cast to (Int, Int)")))._2
815+ let cR = ( let ad = invoke(O, "getTWAP60", [aF, false], nil)
816+ if ($isInstanceOf(ad, "(Int, Int)"))
817+ then ad
818+ else throw(($getType(ad) + " couldn't be cast to (Int, Int)")))._2
819+ let cX = (fraction(cQ, aC, pow(10, 0, az(aD), 0, 0, DOWN)) + fraction(cR, aE, pow(10, 0, az(aF), 0, 0, DOWN)))
820+ let cY = fraction(cX, (cS - 100), 100)
821+ let cM = makeString([toString(T.caller), am, toString(aC), aD, toString(aE), aF, toString(ah), toString(ai), ag, cT, toString(cY)], ",")
822+ let cZ = {
823+ let ad = invoke(this, "createNewRequest", [cM], nil)
824+ if ($isInstanceOf(ad, "Int"))
825+ then ad
826+ else throw(($getType(ad) + " couldn't be cast to Int"))
748827 }
749- if ((cQ == cQ))
828+ if ((cZ == cZ))
750829 then {
751- let cR = [((toString(P.caller) + "_") + toString(db)), ay, cI, cP, toString(this), "replenishFromLand", toString(valueOrErrorMessage(cQ, "Can't create new request"))]
752- let bj = reentrantInvoke(am(), "flashPosition", cR, nil)
753- if ((bj == bj))
830+ let da = [((toString(T.caller) + "_") + toString(dw)), ag, cT, cY, toString(this), "replenishFromLand", toString(valueOrErrorMessage(cZ, "Can't create new request"))]
831+ let br = reentrantInvoke(aw(), "flashPosition", da, nil)
832+ if ((br == br))
754833 then nil
755834 else throw("Strict value is not equal to itself.")
756835 }
757836 else throw("Strict value is not equal to itself.")
758837 }
759838 else {
760- let dc = aZ(bI, ad, e, as, ba, au, bb, aw, ax, ay)
761- let cS = dc._1
762- let bO = dc._2
763- bc(ad, toString(P.caller), cS, bO, db, ay, bI)
839+ let dx = bg(bQ, am, f, aC, bh, aE, bi, ah, ai, ag)
840+ let db = dx._1
841+ let bW = dx._2
842+ bj(am, toString(T.caller), db, bW, dw, ag, bQ)
764843 }
765844 }
766845
767846
768847
769-@Callable(P)
770-func replenishFromLand (cD) = {
771- let dd = cC(cD)
772- let af = dd._1
773- let ad = dd._2
774- let as = dd._3
775- let ba = dd._4
776- let au = dd._5
777- let bb = dd._6
778- let aw = dd._7
779- let ax = dd._8
780- let ay = dd._9
781- let cF = dd._10
782- let cG = dd._11
783- if ((size(P.payments) != 1))
848+@Callable(T)
849+func replenishFromLand (cL) = {
850+ let dy = cK(cL)
851+ let ap = dy._1
852+ let am = dy._2
853+ let aC = dy._3
854+ let bh = dy._4
855+ let aE = dy._5
856+ let bi = dy._6
857+ let ah = dy._7
858+ let ai = dy._8
859+ let ag = dy._9
860+ let cN = dy._10
861+ let cO = dy._11
862+ if ((size(T.payments) != 1))
784863 then throw("Wrong payment size")
785- else if (if ((an(P.payments[0].assetId) != cF))
864+ else if (if ((ax(T.payments[0].assetId) != cN))
786865 then true
787- else (P.payments[0].amount != cG))
866+ else (T.payments[0].amount != cO))
788867 then throw("Wrong payment")
789868 else {
790- let de = if ((ba == cF))
791- then $Tuple2((as + P.payments[0].amount), au)
792- else $Tuple2(as, (au + P.payments[0].amount))
793- let cW = de._1
794- let cX = de._2
795- let bI = valueOrErrorMessage(getString(this, (A + ad)), "Unknown pool")
796- let df = aZ(bI, ad, d, as, ba, au, bb, aw, ax, ay)
797- let cS = df._1
798- let bO = df._2
799- let be = ae(ad, toString(P.caller))
800- let dg = [IntegerEntry((((((ad + "_") + af) + "_") + toString(be)) + p), cG), StringEntry((((((ad + "_") + af) + "_") + toString(be)) + q), cF)]
801- let dh = bc(ad, af, cS, bO, be, ay, bI)
802- $Tuple2(((dh ++ dg) :+ DeleteEntry((cD + y))), cS)
869+ let dz = if ((bh == cN))
870+ then $Tuple2((aC + T.payments[0].amount), aE)
871+ else $Tuple2(aC, (aE + T.payments[0].amount))
872+ let dr = dz._1
873+ let ds = dz._2
874+ let bQ = valueOrErrorMessage(getString(this, (D + am)), "Unknown pool")
875+ let dA = bg(bQ, am, e, aC, bh, aE, bi, ah, ai, ag)
876+ let db = dA._1
877+ let bW = dA._2
878+ let bl = ao(am, toString(T.caller))
879+ let dB = [IntegerEntry((((((am + "_") + ap) + "_") + toString(bl)) + q), cO), StringEntry((((((am + "_") + ap) + "_") + toString(bl)) + r), cN)]
880+ let dC = bj(am, ap, db, bW, bl, ag, bQ)
881+ $Tuple2(((dC ++ dB) :+ DeleteEntry((cL + B))), db)
803882 }
804883 }
805884
806885
807886
808-@Callable(P)
809-func withdraw (ad,di) = {
810- let af = toString(P.caller)
811- let dj = valueOrErrorMessage(getInteger(this, (((((ad + "_") + af) + "_") + toString(di)) + o)), "Unknown position")
812- let dk = getIntegerValue(this, (((((ad + "_") + af) + "_") + toString(di)) + s))
813- let dl = getIntegerValue(this, (ad + u))
814- let dm = ac(ad)
815- let ck = (dj + fraction(dj, (dl - dk), g))
816- let dn = Address(fromBase58String(af))
817- let cP = getIntegerValue(this, (((((ad + "_") + af) + "_") + toString(di)) + p))
818- let cm = getStringValue(this, (((((ad + "_") + af) + "_") + toString(di)) + q))
819- let cl = if ((cP > 0))
887+@Callable(T)
888+func withdraw (am,dD) = {
889+ let ap = toString(T.caller)
890+ let dE = valueOrErrorMessage(getInteger(this, (((((am + "_") + ap) + "_") + toString(dD)) + p)), "Unknown position")
891+ let dF = getIntegerValue(this, (((((am + "_") + ap) + "_") + toString(dD)) + t))
892+ let dG = getIntegerValue(this, (am + w))
893+ let dH = al(am)
894+ let cs = (dE + fraction(dE, (dG - dF), h))
895+ let dI = Address(fromBase58String(ap))
896+ let cY = getIntegerValue(this, (((((am + "_") + ap) + "_") + toString(dD)) + q))
897+ let cu = getStringValue(this, (((((am + "_") + ap) + "_") + toString(dD)) + r))
898+ let ct = if ((cY > 0))
820899 then {
821- let Z = invoke(am(), "getAssetDebt", [false, ((((ad + "_") + af) + "_") + toString(di)), cm], nil)
822- if ($isInstanceOf(Z, "Int"))
823- then Z
824- else throw(($getType(Z) + " couldn't be cast to Int"))
900+ let ad = invoke(aw(), "getAssetDebt", [false, ((((am + "_") + ap) + "_") + toString(dD)), cu], nil)
901+ if ($isInstanceOf(ad, "Int"))
902+ then ad
903+ else throw(($getType(ad) + " couldn't be cast to Int"))
825904 }
826905 else 0
827- let do = cj(ad, ck, cl, cm)
828- if ((do == do))
906+ let dJ = cr(am, cs, ct, cu)
907+ if ((dJ == dJ))
829908 then {
830- let bT = do._4
831- let cB = do._3
832- let bS = do._2
833- let cA = do._1
834- let dp = if ((cl > 0))
835- then invoke(am(), "repayFor", [((af + "_") + toString(di))], [AttachedPayment(ao(cm), cl)])
909+ let cb = dJ._4
910+ let cJ = dJ._3
911+ let ca = dJ._2
912+ let cI = dJ._1
913+ let dK = if ((ct > 0))
914+ then invoke(aw(), "repayFor", [((ap + "_") + toString(dD))], [AttachedPayment(ay(cu), ct)])
836915 else 0
837- if ((dp == dp))
838- then [DeleteEntry((((((ad + "_") + af) + "_") + toString(di)) + o)), DeleteEntry((((((ad + "_") + af) + "_") + toString(di)) + s)), IntegerEntry((ad + t), (dm - ck)), ScriptTransfer(dn, cA, ao(bS)), ScriptTransfer(dn, cB, ao(bT))]
916+ if ((dK == dK))
917+ then [DeleteEntry((((((am + "_") + ap) + "_") + toString(dD)) + p)), DeleteEntry((((((am + "_") + ap) + "_") + toString(dD)) + t)), IntegerEntry((am + u), (dH - cs)), ScriptTransfer(dI, cI, ay(ca)), ScriptTransfer(dI, cJ, ay(cb))]
839918 else throw("Strict value is not equal to itself.")
840919 }
841920 else throw("Strict value is not equal to itself.")
843922
844923
845924
846-@Callable(P)
847-func createNewRequest (dq) = valueOrElse(O(P), {
848- let cQ = (valueOrElse(getInteger(this, z), 0) + 1)
849- $Tuple2([StringEntry((toString(cQ) + y), dq), IntegerEntry(z, cQ)], cQ)
925+@Callable(T)
926+func createNewRequest (dL) = valueOrElse(S(T), {
927+ let cZ = (valueOrElse(getInteger(this, C), 0) + 1)
928+ $Tuple2([StringEntry((toString(cZ) + B), dL), IntegerEntry(C, cZ)], cZ)
850929 })
851930
852931
853932
854-@Callable(P)
855-func capitalizeExKeeper (ad,ab,dr,ds,dt,bp,bq,br,bs,bt,bu,bv) = {
856- let du = if (dt)
857- then bh(ab, ad)
933+@Callable(T)
934+func capitalizeExKeeper (am,ak,dM,dN,dO,bx,by,bz,bA,bB,bC,bD) = {
935+ let dP = if (dO)
936+ then bp(ak, am)
858937 else {
859- let dv = if ((ab == a))
860- then M
861- else N
862- $Tuple2(ds, dv)
938+ let dQ = if ((ak == a))
939+ then Q
940+ else R
941+ $Tuple2(dN, dQ)
863942 }
864- let dw = du._1
865- let dv = du._2
866- let dx = bl(dr, ds, dv, bp, bq, br, bs, bt, bu, bv)
867- let aG = (dw - ds)
868- let dy = if ((aG > 0))
869- then [IntegerEntry((ad + B), (aG + valueOrElse(getInteger(this, (ad + B)), 0)))]
943+ let dR = dP._1
944+ let dQ = dP._2
945+ let dS = bt(dM, dN, dQ, bx, by, bz, bA, bB, bC, bD)
946+ let aN = (dR - dN)
947+ let dT = if ((aN > 0))
948+ then [IntegerEntry((am + F), (aN + valueOrElse(getInteger(this, (am + F)), 0)))]
870949 else nil
871- (bH(ad, ab, dr, dx) ++ dy)
950+ (bP(am, ak, dM, dS) ++ dT)
872951 }
873952
874953
875954
876-@Callable(P)
877-func capitalizeExPazzle (ad,ab,dr,ds,dt,by,bz,bv) = {
878- let dz = if (dt)
879- then bh(ab, ad)
955+@Callable(T)
956+func capitalizeExPazzle (am,ak,dM,dN,dO,bG,bH,bD) = {
957+ let dU = if (dO)
958+ then bp(ak, am)
880959 else {
881- let dv = if ((ab == a))
882- then M
883- else N
884- $Tuple2(ds, dv)
960+ let dQ = if ((ak == a))
961+ then Q
962+ else R
963+ $Tuple2(dN, dQ)
885964 }
886- let dw = dz._1
887- let dv = dz._2
888- let dx = bx(dr, ds, dv, by, bz, bv)
889- let aG = (dw - ds)
890- let dy = if ((aG > 0))
891- then [IntegerEntry((ad + B), (aG + valueOrElse(getInteger(this, (ad + B)), 0)))]
965+ let dR = dU._1
966+ let dQ = dU._2
967+ let dS = bF(dM, dN, dQ, bG, bH, bD)
968+ let aN = (dR - dN)
969+ let dT = if ((aN > 0))
970+ then [IntegerEntry((am + F), (aN + valueOrElse(getInteger(this, (am + F)), 0)))]
892971 else nil
893- (bH(ad, ab, dr, dx) ++ dy)
972+ (bP(am, ak, dM, dS) ++ dT)
894973 }
895974
896975
897976
898-@Callable(P)
899-func capitalizeExSwopFi (ad,ab,dr,ds,dt,bB,bC,bD,bE,bF,bG,bv) = {
900- let dA = if (dt)
901- then bh(ab, ad)
977+@Callable(T)
978+func capitalizeExSwopFi (am,ak,dM,dN,dO,bJ,bK,bL,bM,bN,bO,bD) = {
979+ let dV = if (dO)
980+ then bp(ak, am)
902981 else {
903- let dv = if ((ab == a))
904- then M
905- else N
906- $Tuple2(ds, dv)
982+ let dQ = if ((ak == a))
983+ then Q
984+ else R
985+ $Tuple2(dN, dQ)
907986 }
908- let dw = dA._1
909- let dv = dA._2
910- let dx = bA(dr, ds, dv, bB, bC, bD, bE, bF, bG, bv)
911- let aG = (dw - ds)
912- let dy = if ((aG > 0))
913- then [IntegerEntry((ad + B), (aG + valueOrElse(getInteger(this, (ad + B)), 0)))]
987+ let dR = dV._1
988+ let dQ = dV._2
989+ let dS = bI(dM, dN, dQ, bJ, bK, bL, bM, bN, bO, bD)
990+ let aN = (dR - dN)
991+ let dT = if ((aN > 0))
992+ then [IntegerEntry((am + F), (aN + valueOrElse(getInteger(this, (am + F)), 0)))]
914993 else nil
915- (bH(ad, ab, dr, dx) ++ dy)
994+ (bP(am, ak, dM, dS) ++ dT)
916995 }
917996
918997
919998
920-@Callable(P)
921-func initNewPool (ab,W,dB,dC,dD) = if (if ((ab != a))
922- then (ab != b)
999+@Callable(T)
1000+func initNewPool (ak,aa,dW,dX,dY,dZ) = if (if ((ak != a))
1001+ then (ak != b)
9231002 else false)
9241003 then throw("Wrong type")
925- else [IntegerEntry((W + v), dB), IntegerEntry((W + w), dC), IntegerEntry((W + x), dD), IntegerEntry((W + u), 0), StringEntry((A + W), ab)]
1004+ else {
1005+ let ea = aj(Address(fromBase58String(aa)), ak)
1006+ let ae = ea._1
1007+ let af = ea._2
1008+ let eb = ea._3
1009+ let ec = ea._4
1010+ let ag = ea._5
1011+[IntegerEntry((aa + x), dW), IntegerEntry((aa + y), dX), IntegerEntry((aa + z), dY), IntegerEntry((aa + A), dZ), IntegerEntry((aa + w), 0), StringEntry((D + aa), ak), StringEntry((ag + E), aa)]
1012+ }
9261013
9271014
928-@Verifier(dE)
929-func dF () = sigVerify(dE.bodyBytes, dE.proofs[0], dE.senderPublicKey)
1015+@Verifier(ed)
1016+func ee () = sigVerify(ed.bodyBytes, ed.proofs[0], ed.senderPublicKey)
9301017
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "SF"
55
66 let b = "WX"
77
8-let c = "cap"
8+let c = "capNoLoan"
99
10-let d = "loan"
10+let d = "capLoan"
1111
12-let e = "noLoan"
12+let e = "loan"
1313
14-let f = 100000000
14+let f = "noLoan"
1515
16-let g = 10000000000
16+let g = 100000000
1717
18-let h = 1000000
18+let h = 10000000000
1919
20-let i = "A_asset_balance"
20+let i = 1000000
2121
22-let j = "B_asset_balance"
22+let j = "A_asset_balance"
2323
24-let k = "A_asset_id"
24+let k = "B_asset_balance"
2525
26-let l = "B_asset_id"
26+let l = "A_asset_id"
2727
28-let m = "share_asset_id"
28+let m = "B_asset_id"
2929
30-let n = "commission"
30+let n = "share_asset_id"
3131
32-let o = "_user_position"
32+let o = "commission"
3333
34-let p = "_user_position_borrow_amount"
34+let p = "_user_position"
3535
36-let q = "_user_position_borrow_asset_id"
36+let q = "_user_position_borrow_amount"
3737
38-let r = "_user_position_number"
38+let r = "_user_position_borrow_asset_id"
3939
40-let s = "_user_position_interest"
40+let s = "_user_position_number"
4141
42-let t = "_pool_total"
42+let t = "_user_position_interest"
4343
44-let u = "_pool_interest"
44+let u = "_pool_total"
4545
46-let v = "_axly_fee_without_loan"
46+let v = "_pool_total_loan"
4747
48-let w = "_axly_fee_with_loan"
48+let w = "_pool_interest"
4949
50-let x = "_axly_fee_cap"
50+let x = "_axly_fee_without_loan"
5151
52-let y = "_request_id"
52+let y = "_axly_fee_with_loan"
5353
54-let z = "requests_iter"
54+let z = "_axly_fee_cap_with_loan"
5555
56-let A = "pool_"
56+let A = "_axly_fee_cap_no_loan"
5757
58-let B = "_pool_cap_change"
58+let B = "_request_id"
5959
60-let C = "axly_money_box"
60+let C = "requests_iter"
6161
62-let D = "swopfi_farming_addr"
62+let D = "pool_"
6363
64-let E = "lend_service_addr"
64+let E = "_pool_share_id"
6565
66-let F = "price_oracle"
66+let F = "_pool_cap_change"
6767
68-let G = "exchange_contract"
68+let G = "axly_money_box"
6969
70-let H = "wx_swap_contract"
70+let H = "swopfi_farming_addr"
7171
72-let I = Address(fromBase58String(valueOrErrorMessage(getString(this, C), "No axly moneyBox address")))
72+let I = "lend_service_addr"
7373
74-let J = Address(fromBase58String(valueOrErrorMessage(getString(this, G), "No exchange contract address")))
74+let J = "price_oracle"
7575
76-let K = Address(fromBase58String(valueOrErrorMessage(getString(this, F), "No price oracle address")))
76+let K = "exchange_contract"
7777
78-let L = Address(fromBase58String(valueOrErrorMessage(getString(this, H), "No wx swap address")))
78+let L = "wx_swap_contract"
7979
80-let M = base58'4W19ndijcc2CsQa9HGW2dfXKTVXhnneWWttxXrtjPmEp'
80+let M = Address(fromBase58String(valueOrErrorMessage(getString(this, G), "No axly moneyBox address")))
8181
82-let N = base58'EMAMLxDnv3xiz8RXg8Btj33jcEw3wLczL3JKYYmuubpc'
82+let N = Address(fromBase58String(valueOrErrorMessage(getString(this, K), "No exchange contract address")))
8383
84-func O (P) = if ((P.caller == this))
84+let O = Address(fromBase58String(valueOrErrorMessage(getString(this, J), "No price oracle address")))
85+
86+let P = Address(fromBase58String(valueOrErrorMessage(getString(this, L), "No wx swap address")))
87+
88+let Q = base58'4W19ndijcc2CsQa9HGW2dfXKTVXhnneWWttxXrtjPmEp'
89+
90+let R = base58'EMAMLxDnv3xiz8RXg8Btj33jcEw3wLczL3JKYYmuubpc'
91+
92+func S (T) = if ((T.caller == this))
8593 then unit
8694 else throw("Only contract itself can call this function")
8795
8896
89-func Q (R) = {
90- let S = R
91- if ($isInstanceOf(S, "ByteVector"))
97+func U (V) = {
98+ let W = V
99+ if ($isInstanceOf(W, "ByteVector"))
92100 then {
93- let T = S
94- assetBalance(this, T)
101+ let X = W
102+ assetBalance(this, X)
95103 }
96- else if ($isInstanceOf(S, "Unit"))
104+ else if ($isInstanceOf(W, "Unit"))
97105 then {
98- let U = S
106+ let Y = W
99107 wavesBalance(this).available
100108 }
101109 else throw("Match error")
102110 }
103111
104112
105-func V (W) = $Tuple5(valueOrErrorMessage(getString(W, k), "Can't get pool A asset id"), valueOrErrorMessage(getString(W, l), "Can't get pool B asset id"), valueOrErrorMessage(getInteger(W, i), "Can't get pool A asset balance"), valueOrErrorMessage(getInteger(W, j), "Can't get pool B asset balance"), valueOrErrorMessage(getString(W, m), "Can't get share asset id"))
113+func Z (aa) = $Tuple5(valueOrErrorMessage(getString(aa, l), "Can't get pool A asset id"), valueOrErrorMessage(getString(aa, m), "Can't get pool B asset id"), valueOrErrorMessage(getInteger(aa, j), "Can't get pool A asset balance"), valueOrErrorMessage(getInteger(aa, k), "Can't get pool B asset balance"), valueOrErrorMessage(getString(aa, n), "Can't get share asset id"))
106114
107115
108-func X (W) = {
109- let Y = {
110- let Z = invoke(W, "getPoolConfigWrapperREADONLY", nil, nil)
111- if ($isInstanceOf(Z, "List[Any]"))
112- then Z
113- else throw(($getType(Z) + " couldn't be cast to List[Any]"))
116+func ab (aa) = {
117+ let ac = {
118+ let ad = invoke(aa, "getPoolConfigWrapperREADONLY", nil, nil)
119+ if ($isInstanceOf(ad, "List[Any]"))
120+ then ad
121+ else throw(($getType(ad) + " couldn't be cast to List[Any]"))
114122 }
115- if ((Y == Y))
116- then $Tuple5(valueOrErrorMessage({
117- let Z = Y[4]
118- if ($isInstanceOf(Z, "String"))
119- then Z
120- else unit
121- }, "Can't get pool A asset id"), valueOrErrorMessage({
122- let Z = Y[5]
123- if ($isInstanceOf(Z, "String"))
124- then Z
125- else unit
126- }, "Can't get pool B asset id"), 0, 0, valueOrErrorMessage({
127- let Z = Y[3]
128- if ($isInstanceOf(Z, "String"))
129- then Z
130- else unit
131- }, "Can't get pool LP asset id"))
123+ if ((ac == ac))
124+ then {
125+ let ae = valueOrErrorMessage({
126+ let ad = ac[4]
127+ if ($isInstanceOf(ad, "String"))
128+ then ad
129+ else unit
130+ }, "Can't get pool A asset id")
131+ let af = valueOrErrorMessage({
132+ let ad = ac[5]
133+ if ($isInstanceOf(ad, "String"))
134+ then ad
135+ else unit
136+ }, "Can't get pool B asset id")
137+ let ag = valueOrErrorMessage({
138+ let ad = ac[3]
139+ if ($isInstanceOf(ad, "String"))
140+ then ad
141+ else unit
142+ }, "Can't get pool LP asset id")
143+ let ah = {
144+ let ad = invoke(aa, "getAccBalanceWrapperREADONLY", [ae], nil)
145+ if ($isInstanceOf(ad, "Int"))
146+ then ad
147+ else throw(($getType(ad) + " couldn't be cast to Int"))
148+ }
149+ if ((ah == ah))
150+ then {
151+ let ai = {
152+ let ad = invoke(aa, "getAccBalanceWrapperREADONLY", [af], nil)
153+ if ($isInstanceOf(ad, "Int"))
154+ then ad
155+ else throw(($getType(ad) + " couldn't be cast to Int"))
156+ }
157+ if ((ai == ai))
158+ then $Tuple5(ae, af, ah, ai, ag)
159+ else throw("Strict value is not equal to itself.")
160+ }
161+ else throw("Strict value is not equal to itself.")
162+ }
132163 else throw("Strict value is not equal to itself.")
133164 }
134165
135166
136-func aa (W,ab) = if ((ab == a))
137- then V(W)
138- else if ((ab == b))
139- then X(W)
167+func aj (aa,ak) = if ((ak == a))
168+ then Z(aa)
169+ else if ((ak == b))
170+ then ab(aa)
140171 else throw("Wrong pool type")
141172
142173
143-func ac (ad) = valueOrElse(getInteger(this, (ad + t)), 0)
174+func al (am) = valueOrElse(getInteger(this, (am + u)), 0)
144175
145176
146-func ae (ad,af) = (valueOrElse(getInteger(this, (((ad + "_") + af) + r)), 0) + 1)
177+func an (am) = valueOrElse(getInteger(this, (am + v)), 0)
147178
148179
149-func ag (ad,ah) = if ((ah == "cap"))
150- then getIntegerValue(this, (ad + x))
151- else if ((ah == "loan"))
152- then getIntegerValue(this, (ad + w))
153- else if ((ah == "noLoan"))
154- then getIntegerValue(this, (ad + v))
155- else throw("Wrong fee type")
180+func ao (am,ap) = (valueOrElse(getInteger(this, (((am + "_") + ap) + s)), 0) + 1)
156181
157182
158-func ai () = Address(fromBase58String(valueOrErrorMessage(getString(this, D), "Can't get swopfi farming addr")))
183+func aq (am,ar) = if ((ar == d))
184+ then getIntegerValue(this, (am + A))
185+ else if ((ar == c))
186+ then getIntegerValue(this, (am + z))
187+ else if ((ar == e))
188+ then getIntegerValue(this, (am + y))
189+ else if ((ar == f))
190+ then getIntegerValue(this, (am + x))
191+ else throw("Wrong fee type")
159192
160193
161-func aj (W) = {
162- let ak = Address(fromBase58String(valueOrErrorMessage(getString(W, "%s__factoryContract"), "Can't get WX factory contract addr")))
163- let al = split(valueOrErrorMessage(getString(ak, "%s__factoryConfig"), "Can't get WX factory cfg"), "__")
164- Address(fromBase58String(al[1]))
194+func as () = Address(fromBase58String(valueOrErrorMessage(getString(this, H), "Can't get swopfi farming addr")))
195+
196+
197+func at (aa) = {
198+ let au = Address(fromBase58String(valueOrErrorMessage(getString(aa, "%s__factoryContract"), "Can't get WX factory contract addr")))
199+ let av = split(valueOrErrorMessage(getString(au, "%s__factoryConfig"), "Can't get WX factory cfg"), "__")
200+ Address(fromBase58String(av[1]))
165201 }
166202
167203
168-func am () = Address(fromBase58String(valueOrErrorMessage(getString(this, E), "Can't get lend service addr")))
204+func aw () = Address(fromBase58String(valueOrErrorMessage(getString(this, I), "Can't get lend service addr")))
169205
170206
171-func an (R) = {
172- let S = R
173- if ($isInstanceOf(S, "ByteVector"))
207+func ax (V) = {
208+ let W = V
209+ if ($isInstanceOf(W, "ByteVector"))
174210 then {
175- let T = S
176- toBase58String(T)
211+ let X = W
212+ toBase58String(X)
177213 }
178- else if ($isInstanceOf(S, "Unit"))
214+ else if ($isInstanceOf(W, "Unit"))
179215 then {
180- let U = S
216+ let Y = W
181217 "WAVES"
182218 }
183219 else throw("Match error")
184220 }
185221
186222
187-func ao (R) = if ((R == "WAVES"))
223+func ay (V) = if ((V == "WAVES"))
188224 then unit
189- else fromBase58String(R)
225+ else fromBase58String(V)
190226
191227
192-func ap (R) = if ((R == "WAVES"))
228+func az (V) = if ((V == "WAVES"))
193229 then 8
194230 else {
195- let S = assetInfo(fromBase58String(R))
196- if ($isInstanceOf(S, "Asset"))
231+ let W = assetInfo(fromBase58String(V))
232+ if ($isInstanceOf(W, "Asset"))
197233 then {
198- let aq = S
199- aq.decimals
234+ let aA = W
235+ aA.decimals
200236 }
201237 else throw("Can't find asset")
202238 }
203239
204240
205-func ar (ad,ah,as,at,au,av,aw,ax,ay) = {
206- let az = Q(fromBase58String(ay))
207- if ((az == az))
241+func aB (am,ar,aC,aD,aE,aF,ah,ai,ag) = {
242+ let aG = U(fromBase58String(ag))
243+ if ((aG == aG))
208244 then {
209- let W = Address(fromBase58String(ad))
210- let aA = fraction(f, as, aw)
211- let aB = fraction(f, au, ax)
212- let aC = if ((aB > aA))
245+ let aa = Address(fromBase58String(am))
246+ let aH = fraction(g, aC, ah)
247+ let aI = fraction(g, aE, ai)
248+ let aJ = if ((aI > aH))
213249 then {
214- let aD = fraction(ax, aA, f, CEILING)
215- $Tuple4(as, aD, (au - aD), av)
250+ let aK = fraction(ai, aH, g, CEILING)
251+ $Tuple4(aC, aK, (aE - aK), aF)
216252 }
217253 else {
218- let aD = fraction(aw, aB, f, CEILING)
219- $Tuple4(aD, au, (as - aD), at)
254+ let aK = fraction(ah, aI, g, CEILING)
255+ $Tuple4(aK, aE, (aC - aK), aD)
220256 }
221- let aE = aC._1
222- let aF = aC._2
223- let aG = aC._3
224- let aH = aC._4
225- let aI = if (if ((aE > 0))
226- then (aF > 0)
257+ let aL = aJ._1
258+ let aM = aJ._2
259+ let aN = aJ._3
260+ let aO = aJ._4
261+ let aP = if (if ((aL > 0))
262+ then (aM > 0)
227263 else false)
228264 then {
229- let aJ = [AttachedPayment(ao(at), aE), AttachedPayment(ao(av), aF)]
230- invoke(W, "callFunction", ["replenishWithTwoTokens", ["false", "0"]], aJ)
265+ let aQ = [AttachedPayment(ay(aD), aL), AttachedPayment(ay(aF), aM)]
266+ invoke(aa, "callFunction", ["replenishWithTwoTokens", ["false", "0"]], aQ)
231267 }
232268 else 0
233- if ((aI == aI))
269+ if ((aP == aP))
234270 then {
235- let aK = if ((aG > 0))
271+ let aR = if ((aN > 0))
236272 then {
237- let aJ = [AttachedPayment(ao(aH), aG)]
238- let aL = ["0", "false", "0"]
239- invoke(W, "callFunction", ["replenishWithOneToken", aL], aJ)
273+ let aQ = [AttachedPayment(ay(aO), aN)]
274+ let aS = ["0", "false", "0"]
275+ invoke(aa, "callFunction", ["replenishWithOneToken", aS], aQ)
240276 }
241277 else 0
242- if ((aK == aK))
278+ if ((aR == aR))
243279 then {
244- let aM = Q(fromBase58String(ay))
245- let aN = (aM - az)
246- let aO = fraction(aN, ag(ad, ah), h)
247- let aP = (aN - aO)
248- if ((0 >= aP))
280+ let aT = U(fromBase58String(ag))
281+ let aU = (aT - aG)
282+ let aV = fraction(aU, aq(am, ar), i)
283+ let aW = (aU - aV)
284+ if ((0 >= aW))
249285 then throw("amount of staked sharetokens must be > 0")
250286 else {
251- let aQ = invoke(ai(), "lockShareTokens", [ad, 0], [AttachedPayment(fromBase58String(ay), aP)])
252- if ((aQ == aQ))
253- then $Tuple2(aP, aO)
287+ let aX = invoke(as(), "lockShareTokens", [am, 0], [AttachedPayment(fromBase58String(ag), aW)])
288+ if ((aX == aX))
289+ then $Tuple2(aW, aV)
254290 else throw("Strict value is not equal to itself.")
255291 }
256292 }
257293 else throw("Strict value is not equal to itself.")
258294 }
259295 else throw("Strict value is not equal to itself.")
260296 }
261297 else throw("Strict value is not equal to itself.")
262298 }
263299
264300
265-func aR (ad,ah,as,at,au,av,ay) = {
266- let W = Address(fromBase58String(ad))
267- let aS = if (if ((as > 0))
268- then (au > 0)
301+func aY (am,ar,aC,aD,aE,aF,ag) = {
302+ let aa = Address(fromBase58String(am))
303+ let aZ = if (if ((aC > 0))
304+ then (aE > 0)
269305 else false)
270306 then {
271- let aT = split({
272- let Z = invoke(W, "evaluatePutByAmountAssetREADONLY", [as], nil)
273- if ($isInstanceOf(Z, "String"))
274- then Z
275- else throw(($getType(Z) + " couldn't be cast to String"))
307+ let ba = split({
308+ let ad = invoke(aa, "evaluatePutByAmountAssetREADONLY", [aC], nil)
309+ if ($isInstanceOf(ad, "String"))
310+ then ad
311+ else throw(($getType(ad) + " couldn't be cast to String"))
276312 }, "__")
277- if ((aT == aT))
313+ if ((ba == ba))
278314 then {
279- let aU = split({
280- let Z = invoke(W, "evaluatePutByPriceAssetREADONLY", [au], nil)
281- if ($isInstanceOf(Z, "String"))
282- then Z
283- else throw(($getType(Z) + " couldn't be cast to String"))
315+ let bb = split({
316+ let ad = invoke(aa, "evaluatePutByPriceAssetREADONLY", [aE], nil)
317+ if ($isInstanceOf(ad, "String"))
318+ then ad
319+ else throw(($getType(ad) + " couldn't be cast to String"))
284320 }, "__")
285- if ((aU == aU))
321+ if ((bb == bb))
286322 then {
287- let aV = parseIntValue(aT[1])
288- let aW = parseIntValue(aU[1])
289- if ((aW > aV))
323+ let bc = parseIntValue(ba[1])
324+ let bd = parseIntValue(bb[1])
325+ if ((bd > bc))
290326 then {
291- let aX = parseIntValue(aT[8])
292- $Tuple4(as, aX, (au - aX), av)
327+ let be = parseIntValue(ba[8])
328+ $Tuple4(aC, be, (aE - be), aF)
293329 }
294330 else {
295- let aY = parseIntValue(aU[7])
296- $Tuple4(aY, au, (as - aY), at)
331+ let bf = parseIntValue(bb[7])
332+ $Tuple4(bf, aE, (aC - bf), aD)
297333 }
298334 }
299335 else throw("Strict value is not equal to itself.")
300336 }
301337 else throw("Strict value is not equal to itself.")
302338 }
303- else if ((as > 0))
304- then $Tuple4(as, au, as, at)
305- else if ((au > 0))
306- then $Tuple4(as, au, au, av)
339+ else if ((aC > 0))
340+ then $Tuple4(aC, aE, aC, aD)
341+ else if ((aE > 0))
342+ then $Tuple4(aC, aE, aE, aF)
307343 else throw("pmts must be > 0")
308- let aE = aS._1
309- let aF = aS._2
310- let aG = aS._3
311- let aH = aS._4
312- let az = Q(fromBase58String(ay))
313- if ((az == az))
344+ let aL = aZ._1
345+ let aM = aZ._2
346+ let aN = aZ._3
347+ let aO = aZ._4
348+ let aG = U(fromBase58String(ag))
349+ if ((aG == aG))
314350 then {
315- let aI = if (if ((aE > 0))
316- then (aF > 0)
351+ let aP = if (if ((aL > 0))
352+ then (aM > 0)
317353 else false)
318354 then {
319- let aJ = [AttachedPayment(ao(at), aE), AttachedPayment(ao(av), aF)]
320- invoke(W, "put", [1000000, false], aJ)
355+ let aQ = [AttachedPayment(ay(aD), aL), AttachedPayment(ay(aF), aM)]
356+ invoke(aa, "put", [1000000, false], aQ)
321357 }
322358 else 0
323- if ((aI == aI))
359+ if ((aP == aP))
324360 then {
325- let aK = if ((aG > 0))
361+ let aR = if ((aN > 0))
326362 then {
327- let aJ = [AttachedPayment(ao(aH), aG)]
328- invoke(W, "putOneTkn", [0, false], aJ)
363+ let aQ = [AttachedPayment(ay(aO), aN)]
364+ invoke(aa, "putOneTkn", [0, false], aQ)
329365 }
330366 else 0
331- if ((aK == aK))
367+ if ((aR == aR))
332368 then {
333- let aM = Q(fromBase58String(ay))
334- let aN = (aM - az)
335- let aO = fraction(aN, ag(ad, ah), h)
336- let aP = (aN - aO)
337- if ((0 >= aP))
369+ let aT = U(fromBase58String(ag))
370+ let aU = (aT - aG)
371+ let aV = fraction(aU, aq(am, ar), i)
372+ let aW = (aU - aV)
373+ if ((0 >= aW))
338374 then throw("amount of staked sharetokens must be > 0")
339375 else {
340- let aQ = invoke(aj(W), "stake", nil, [AttachedPayment(fromBase58String(ay), aP)])
341- if ((aQ == aQ))
342- then $Tuple2(aP, aO)
376+ let aX = invoke(at(aa), "stake", nil, [AttachedPayment(fromBase58String(ag), aW)])
377+ if ((aX == aX))
378+ then $Tuple2(aW, aV)
343379 else throw("Strict value is not equal to itself.")
344380 }
345381 }
346382 else throw("Strict value is not equal to itself.")
347383 }
348384 else throw("Strict value is not equal to itself.")
349385 }
350386 else throw("Strict value is not equal to itself.")
351387 }
352388
353389
354-func aZ (ab,ad,ah,as,ba,au,bb,aw,ax,ay) = if ((ab == a))
355- then ar(ad, d, as, ba, au, bb, aw, ax, ay)
356- else if ((ab == b))
357- then aR(ad, d, as, ba, au, bb, ay)
390+func bg (ak,am,ar,aC,bh,aE,bi,ah,ai,ag) = if ((ak == a))
391+ then aB(am, e, aC, bh, aE, bi, ah, ai, ag)
392+ else if ((ak == b))
393+ then aY(am, e, aC, bh, aE, bi, ag)
358394 else throw("Wrong pool type")
359395
360396
361-func bc (ad,af,bd,aO,be,ay,ab) = {
362- let bf = ac(ad)
363- let bg = getIntegerValue(this, (ad + u))
364-[IntegerEntry((ad + t), (bf + bd)), IntegerEntry((((((ad + "_") + af) + "_") + toString(be)) + o), bd), IntegerEntry((((((ad + "_") + af) + "_") + toString(be)) + s), bg), IntegerEntry((((ad + "_") + af) + r), be), ScriptTransfer(I, aO, fromBase58String(ay))]
397+func bj (am,ap,bk,aV,bl,ag,ak) = {
398+ let bm = al(am)
399+ let bn = an(am)
400+ let bo = getIntegerValue(this, (am + w))
401+[IntegerEntry((am + u), (bm + bk)), IntegerEntry((am + v), (bn + bk)), IntegerEntry((((((am + "_") + ap) + "_") + toString(bl)) + p), bk), IntegerEntry((((((am + "_") + ap) + "_") + toString(bl)) + t), bo), IntegerEntry((((am + "_") + ap) + s), bl), ScriptTransfer(M, aV, fromBase58String(ag))]
365402 }
366403
367404
368-func bh (ab,ad) = if ((ab == a))
405+func bp (ak,am) = if ((ak == a))
369406 then {
370- let bi = Q(M)
371- if ((bi == bi))
407+ let bq = U(Q)
408+ if ((bq == bq))
372409 then {
373- let bj = invoke(ai(), "claim", [ad], nil)
374- if ((bj == bj))
410+ let br = invoke(as(), "claim", [am], nil)
411+ if ((br == br))
375412 then {
376- let bk = Q(M)
377- $Tuple2((bk - bi), M)
413+ let bs = U(Q)
414+ $Tuple2((bs - bq), Q)
378415 }
379416 else throw("Strict value is not equal to itself.")
380417 }
381418 else throw("Strict value is not equal to itself.")
382419 }
383- else if ((ab == b))
420+ else if ((ak == b))
384421 then {
385- let bi = Q(N)
386- if ((bi == bi))
422+ let bq = U(R)
423+ if ((bq == bq))
387424 then {
388- let bj = invoke(aj(Address(fromBase58String(ad))), "claimWX", [ad], nil)
389- if ((bj == bj))
425+ let br = invoke(at(Address(fromBase58String(am))), "claimWX", [am], nil)
426+ if ((br == br))
390427 then {
391- let bk = Q(N)
392- $Tuple2((bk - bi), N)
428+ let bs = U(R)
429+ $Tuple2((bs - bq), R)
393430 }
394431 else throw("Strict value is not equal to itself.")
395432 }
396433 else throw("Strict value is not equal to itself.")
397434 }
398435 else throw("Wrong pool type")
399436
400437
401-func bl (bm,bn,bo,bp,bq,br,bs,bt,bu,bv) = {
402- let bw = Q(ao(bm))
403- if ((bw == bw))
438+func bt (bu,bv,bw,bx,by,bz,bA,bB,bC,bD) = {
439+ let bE = U(ay(bu))
440+ if ((bE == bE))
404441 then {
405- let bj = invoke(J, "swap", [bp, bq, br, bs, bt, bu, bv], [AttachedPayment(bo, bn)])
406- if ((bj == bj))
407- then (Q(ao(bm)) - bw)
442+ let br = invoke(N, "swap", [bx, by, bz, bA, bB, bC, bD], [AttachedPayment(bw, bv)])
443+ if ((br == br))
444+ then (U(ay(bu)) - bE)
408445 else throw("Strict value is not equal to itself.")
409446 }
410447 else throw("Strict value is not equal to itself.")
411448 }
412449
413450
414-func bx (bm,bn,bo,by,bz,bv) = {
415- let bw = Q(ao(bm))
416- if ((bw == bw))
451+func bF (bu,bv,bw,bG,bH,bD) = {
452+ let bE = U(ay(bu))
453+ if ((bE == bE))
417454 then {
418- let bj = invoke(J, "puzzleSwap", [by, bz, bv], [AttachedPayment(bo, bn)])
419- if ((bj == bj))
420- then (Q(ao(bm)) - bw)
455+ let br = invoke(N, "puzzleSwap", [bG, bH, bD], [AttachedPayment(bw, bv)])
456+ if ((br == br))
457+ then (U(ay(bu)) - bE)
421458 else throw("Strict value is not equal to itself.")
422459 }
423460 else throw("Strict value is not equal to itself.")
424461 }
425462
426463
427-func bA (bm,bn,bo,bB,bC,bD,bE,bF,bG,bv) = {
428- let bw = Q(ao(bm))
429- if ((bw == bw))
464+func bI (bu,bv,bw,bJ,bK,bL,bM,bN,bO,bD) = {
465+ let bE = U(ay(bu))
466+ if ((bE == bE))
430467 then {
431- let bj = invoke(J, "swopfiSwap", [bB, bC, bD, bE, bF, bG, bv], [AttachedPayment(bo, bn)])
432- if ((bj == bj))
433- then (Q(ao(bm)) - bw)
468+ let br = invoke(N, "swopfiSwap", [bJ, bK, bL, bM, bN, bO, bD], [AttachedPayment(bw, bv)])
469+ if ((br == br))
470+ then (U(ay(bu)) - bE)
434471 else throw("Strict value is not equal to itself.")
435472 }
436473 else throw("Strict value is not equal to itself.")
437474 }
438475
439476
440-func bH (ad,bI,bJ,bK) = {
441- let W = Address(fromBase58String(ad))
442- let bL = aa(W, bI)
443- let ba = bL._1
444- let bb = bL._2
445- let aw = bL._3
446- let ax = bL._4
447- let ay = bL._5
448- let bM = if ((bJ == ba))
449- then $Tuple2(bK, 0)
450- else $Tuple2(0, bK)
451- let as = bM._1
452- let au = bM._2
453- let bN = aZ(bI, ad, c, as, ba, au, bb, aw, ax, ay)
454- let bd = bN._1
455- let bO = bN._2
456- let bg = valueOrElse(getInteger(this, (ad + u)), 0)
457- let bP = ac(ad)
458- let bQ = (bg + fraction(bd, g, bP))
459-[IntegerEntry((ad + u), bQ), ScriptTransfer(I, bO, fromBase58String(ay))]
477+func bP (am,bQ,bR,bS) = {
478+ let aa = Address(fromBase58String(am))
479+ let bT = aj(aa, bQ)
480+ let bh = bT._1
481+ let bi = bT._2
482+ let ah = bT._3
483+ let ai = bT._4
484+ let ag = bT._5
485+ let bU = if ((bR == bh))
486+ then $Tuple2(bS, 0)
487+ else $Tuple2(0, bS)
488+ let aC = bU._1
489+ let aE = bU._2
490+ let bV = bg(bQ, am, d, aC, bh, aE, bi, ah, ai, ag)
491+ let bk = bV._1
492+ let bW = bV._2
493+ let bo = valueOrElse(getInteger(this, (am + w)), 0)
494+ let bX = al(am)
495+ let bY = (bo + fraction(bk, h, bX))
496+[IntegerEntry((am + w), bY), ScriptTransfer(M, bW, fromBase58String(ag))]
460497 }
461498
462499
463-func bR (ad,bS,bT,aw,ax,bU,bV) = {
464- let W = Address(fromBase58String(ad))
465- let bW = 1000000
466- let bX = getIntegerValue(W, n)
467- let bY = fraction(bU, bW, (bW - bX))
468- let bZ = if ((bV == bS))
500+func bZ (am,ca,cb,ah,ai,cc,cd) = {
501+ let aa = Address(fromBase58String(am))
502+ let ce = 1000000
503+ let cf = getIntegerValue(aa, o)
504+ let cg = fraction(cc, ce, (ce - cf))
505+ let ch = if ((cd == ca))
469506 then {
470- let ca = fraction(aw, bY, (ax - bY))
471- $Tuple2(ca, bT)
507+ let ci = fraction(ah, cg, (ai - cg))
508+ $Tuple2(ci, cb)
472509 }
473510 else {
474- let ca = fraction(ax, bY, (aw - bY))
475- $Tuple2(ca, bS)
511+ let ci = fraction(ai, cg, (ah - cg))
512+ $Tuple2(ci, ca)
476513 }
477- let ca = bZ._1
478- let cb = bZ._2
479- invoke(W, "callFunction", ["exchange", ["1"]], [AttachedPayment(ao(cb), ca)])
514+ let ci = ch._1
515+ let cj = ch._2
516+ invoke(aa, "callFunction", ["exchange", ["1"]], [AttachedPayment(ay(cj), ci)])
480517 }
481518
482519
483-func cc (ad,bS,bT,aw,ax,bU,bV) = {
484- let W = Address(fromBase58String(ad))
485- let cd = getIntegerValue(L, "%s__protocolFee")
486- let ce = getIntegerValue(L, "%s__poolFee")
487- let cf = toBigInt(100000000)
488- let cg = if ((bV == bS))
520+func ck (am,ca,cb,ah,ai,cc,cd) = {
521+ let aa = Address(fromBase58String(am))
522+ let cl = getIntegerValue(P, "%s__protocolFee")
523+ let cm = getIntegerValue(P, "%s__poolFee")
524+ let cn = toBigInt(100000000)
525+ let co = if ((cd == ca))
489526 then {
490- let ca = fraction(aw, bU, (ax - bU))
491- $Tuple2(ca, bT)
527+ let ci = fraction(ah, cc, (ai - cc))
528+ $Tuple2(ci, cb)
492529 }
493530 else {
494- let ca = fraction(ax, bU, (aw - bU))
495- $Tuple2(ca, bS)
531+ let ci = fraction(ai, cc, (ah - cc))
532+ $Tuple2(ci, ca)
496533 }
497- let ca = cg._1
498- let cb = cg._2
499- let ch = toInt(fraction(toBigInt(ca), cf, (cf - toBigInt((cd + ce)))))
500- invoke(L, "swap", [1, bV, toString(this)], [AttachedPayment(ao(cb), ch)])
534+ let ci = co._1
535+ let cj = co._2
536+ let cp = toInt(fraction(toBigInt(ci), cn, (cn - toBigInt((cl + cm)))))
537+ invoke(P, "swap", [1, cd, toString(this)], [AttachedPayment(ay(cj), cp)])
501538 }
502539
503540
504-func ci (ab,ad,bS,bT,aw,ax,bU,bV) = if ((ab == a))
505- then bR(ad, bS, bT, aw, ax, bU, bV)
506- else cc(ad, bS, bT, aw, ax, bU, bV)
541+func cq (ak,am,ca,cb,ah,ai,cc,cd) = if ((ak == a))
542+ then bZ(am, ca, cb, ah, ai, cc, cd)
543+ else ck(am, ca, cb, ah, ai, cc, cd)
507544
508545
509-func cj (ad,ck,cl,cm) = {
510- let W = Address(fromBase58String(ad))
511- let bI = valueOrErrorMessage(getString(this, (A + ad)), "Unknown pool")
512- let cn = aa(W, bI)
513- let bS = cn._1
514- let bT = cn._2
515- let aw = cn._3
516- let ax = cn._4
517- let co = Q(ao(bS))
518- if ((co == co))
546+func cr (am,cs,ct,cu) = {
547+ let aa = Address(fromBase58String(am))
548+ let bQ = valueOrErrorMessage(getString(this, (D + am)), "Unknown pool")
549+ let cv = aj(aa, bQ)
550+ let ca = cv._1
551+ let cb = cv._2
552+ let ah = cv._3
553+ let ai = cv._4
554+ let cw = U(ay(ca))
555+ if ((cw == cw))
519556 then {
520- let cp = Q(ao(bT))
521- if ((cp == cp))
557+ let cx = U(ay(cb))
558+ if ((cx == cx))
522559 then {
523- let bj = if ((bI == a))
524- then invoke(W, "callFunction", ["withdraw", [toString(ck)]], nil)
525- else if ((bI == b))
526- then invoke(W, "unstakeAndGet", [ck], nil)
560+ let br = if ((bQ == a))
561+ then invoke(aa, "callFunction", ["withdraw", [toString(cs)]], nil)
562+ else if ((bQ == b))
563+ then invoke(aa, "unstakeAndGet", [cs], nil)
527564 else throw("Wrong position type")
528- if ((bj == bj))
565+ if ((br == br))
529566 then {
530- let cq = Q(ao(bS))
531- let cr = Q(ao(bT))
532- let cs = $Tuple2((cq - co), (cr - cp))
533- let ct = cs._1
534- let cu = cs._2
535- let cv = if ((cl > 0))
567+ let cy = U(ay(ca))
568+ let cz = U(ay(cb))
569+ let cA = $Tuple2((cy - cw), (cz - cx))
570+ let cB = cA._1
571+ let cC = cA._2
572+ let cD = if ((ct > 0))
536573 then {
537- let cw = if (if ((cm == bS))
538- then (cl > ct)
574+ let cE = if (if ((cu == ca))
575+ then (ct > cB)
539576 else false)
540- then (cl - ct)
541- else if (if ((cm == bT))
542- then (cl > cu)
577+ then (ct - cB)
578+ else if (if ((cu == cb))
579+ then (ct > cC)
543580 else false)
544- then (cl - cu)
581+ then (ct - cC)
545582 else 0
546- let cx = if ((cw > 0))
547- then ci(bI, ad, bS, bT, aw, ax, cw, cm)
583+ let cF = if ((cE > 0))
584+ then cq(bQ, am, ca, cb, ah, ai, cE, cu)
548585 else 0
549- if ((cx == cx))
586+ if ((cF == cF))
550587 then {
551- let cy = Q(ao(bS))
552- let cz = Q(ao(bT))
553- $Tuple2((cy - co), (cz - cp))
588+ let cG = U(ay(ca))
589+ let cH = U(ay(cb))
590+ $Tuple2((cG - cw), (cH - cx))
554591 }
555592 else throw("Strict value is not equal to itself.")
556593 }
557- else $Tuple2(ct, cu)
558- let cA = cv._1
559- let cB = cv._2
560- $Tuple4(cA, bS, cB, bT)
594+ else $Tuple2(cB, cC)
595+ let cI = cD._1
596+ let cJ = cD._2
597+ $Tuple6(cI, ca, cJ, cb, cy, cz)
561598 }
562599 else throw("Strict value is not equal to itself.")
563600 }
564601 else throw("Strict value is not equal to itself.")
565602 }
566603 else throw("Strict value is not equal to itself.")
567604 }
568605
569606
570-func cC (cD) = {
571- let cE = split(valueOrErrorMessage(getString(this, (cD + y)), ("No request with id " + cD)), ",")
572- let af = cE[0]
573- let ad = cE[1]
574- let as = parseIntValue(cE[2])
575- let ba = cE[3]
576- let au = parseIntValue(cE[4])
577- let bb = cE[5]
578- let aw = parseIntValue(cE[6])
579- let ax = parseIntValue(cE[7])
580- let ay = cE[8]
581- let cF = cE[9]
582- let cG = parseIntValue(cE[10])
583- $Tuple11(af, ad, as, ba, au, bb, aw, ax, ay, cF, cG)
607+func cK (cL) = {
608+ let cM = split(valueOrErrorMessage(getString(this, (cL + B)), ("No request with id " + cL)), ",")
609+ let ap = cM[0]
610+ let am = cM[1]
611+ let aC = parseIntValue(cM[2])
612+ let bh = cM[3]
613+ let aE = parseIntValue(cM[4])
614+ let bi = cM[5]
615+ let ah = parseIntValue(cM[6])
616+ let ai = parseIntValue(cM[7])
617+ let ag = cM[8]
618+ let cN = cM[9]
619+ let cO = parseIntValue(cM[10])
620+ $Tuple11(ap, am, aC, bh, aE, bi, ah, ai, ag, cN, cO)
584621 }
585622
586623
587-@Callable(P)
588-func replenishEVALONLY (ad,cH,cI) = if (if ((100 > cH))
624+@Callable(T)
625+func getAssetPrice (V) = $Tuple2(nil, (let ad = invoke(O, "getTWAP60", [V, false], nil)
626+if ($isInstanceOf(ad, "(Int, Int)"))
627+ then ad
628+ else throw(($getType(ad) + " couldn't be cast to (Int, Int)")))._2)
629+
630+
631+
632+@Callable(T)
633+func getSharePrice (ag) = {
634+ let am = valueOrErrorMessage(getString(this, (ag + E)), "Can't find pool addr by share id")
635+ let bQ = valueOrErrorMessage(getString(this, (D + am)), "Pool is not inited")
636+ let cP = aj(Address(fromBase58String(am)), bQ)
637+ let ae = cP._1
638+ let af = cP._2
639+ let cQ = ( let ad = invoke(O, "getTWAP60", [ae, false], nil)
640+ if ($isInstanceOf(ad, "(Int, Int)"))
641+ then ad
642+ else throw(($getType(ad) + " couldn't be cast to (Int, Int)")))._2
643+ let cR = ( let ad = invoke(O, "getTWAP60", [af, false], nil)
644+ if ($isInstanceOf(ad, "(Int, Int)"))
645+ then ad
646+ else throw(($getType(ad) + " couldn't be cast to (Int, Int)")))._2
647+ $Tuple2(nil, (cQ + cR))
648+ }
649+
650+
651+
652+@Callable(T)
653+func replenishEVALONLY (am,cS,cT) = if (if ((100 > cS))
589654 then true
590- else (cH > 300))
655+ else (cS > 300))
591656 then throw("Leverage can't be <100 and >300")
592657 else {
593- let bI = valueOrErrorMessage(getString(this, (A + ad)), "Pool is not inited")
594- let cJ = aa(Address(fromBase58String(ad)), bI)
595- let ba = cJ._1
596- let bb = cJ._2
597- let aw = cJ._3
598- let ax = cJ._4
599- let ay = cJ._5
600- let cK = if ((size(P.payments) == 2))
601- then if ((an(P.payments[0].assetId) != ba))
658+ let bQ = valueOrErrorMessage(getString(this, (D + am)), "Pool is not inited")
659+ let cU = aj(Address(fromBase58String(am)), bQ)
660+ let bh = cU._1
661+ let bi = cU._2
662+ let ah = cU._3
663+ let ai = cU._4
664+ let ag = cU._5
665+ let cV = if ((size(T.payments) == 2))
666+ then if ((ax(T.payments[0].assetId) != bh))
602667 then throw("Wrong payment asset A")
603- else if ((an(P.payments[1].assetId) != bb))
668+ else if ((ax(T.payments[1].assetId) != bi))
604669 then throw("Wrong payment asset B")
605- else $Tuple4(P.payments[0].amount, ba, P.payments[1].amount, bb)
606- else if ((size(P.payments) == 1))
607- then if ((an(P.payments[0].assetId) == ba))
608- then $Tuple4(P.payments[0].amount, ba, 0, bb)
609- else if ((an(P.payments[0].assetId) == bb))
610- then $Tuple4(0, ba, P.payments[0].amount, bb)
670+ else $Tuple4(T.payments[0].amount, bh, T.payments[1].amount, bi)
671+ else if ((size(T.payments) == 1))
672+ then if ((ax(T.payments[0].assetId) == bh))
673+ then $Tuple4(T.payments[0].amount, bh, 0, bi)
674+ else if ((ax(T.payments[0].assetId) == bi))
675+ then $Tuple4(0, bh, T.payments[0].amount, bi)
611676 else throw("Wrong payment")
612677 else throw("One or two payments expected")
613- let as = cK._1
614- let at = cK._2
615- let au = cK._3
616- let av = cK._4
617- let cL = if ((cH > 100))
678+ let aC = cV._1
679+ let aD = cV._2
680+ let aE = cV._3
681+ let aF = cV._4
682+ let cW = if ((cS > 100))
618683 then {
619- let cM = ( let Z = invoke(K, "getTWAP60", [at, false], nil)
620- if ($isInstanceOf(Z, "(Int, Int)"))
621- then Z
622- else throw(($getType(Z) + " couldn't be cast to (Int, Int)")))._1
623- let cN = ( let Z = invoke(K, "getTWAP60", [av, false], nil)
624- if ($isInstanceOf(Z, "(Int, Int)"))
625- then Z
626- else throw(($getType(Z) + " couldn't be cast to (Int, Int)")))._1
627- let cO = (fraction(cM, as, pow(10, 0, ap(at), 0, 0, DOWN)) + fraction(cN, au, pow(10, 0, ap(av), 0, 0, DOWN)))
628- let cP = fraction(cO, (cH - 100), 100)
629- let cE = makeString([toString(P.caller), ad, toString(as), at, toString(au), av, toString(aw), toString(ax), ay, cI, toString(cP), toString(1)], ",")
630- let cQ = {
631- let Z = invoke(this, "createNewRequest", [cE], nil)
632- if ($isInstanceOf(Z, "Int"))
633- then Z
634- else throw(($getType(Z) + " couldn't be cast to Int"))
684+ let cQ = ( let ad = invoke(O, "getTWAP60", [aD, false], nil)
685+ if ($isInstanceOf(ad, "(Int, Int)"))
686+ then ad
687+ else throw(($getType(ad) + " couldn't be cast to (Int, Int)")))._2
688+ let cR = ( let ad = invoke(O, "getTWAP60", [aF, false], nil)
689+ if ($isInstanceOf(ad, "(Int, Int)"))
690+ then ad
691+ else throw(($getType(ad) + " couldn't be cast to (Int, Int)")))._2
692+ let cX = (fraction(cQ, aC, pow(10, 0, az(aD), 0, 0, DOWN)) + fraction(cR, aE, pow(10, 0, az(aF), 0, 0, DOWN)))
693+ let cY = fraction(cX, (cS - 100), 100)
694+ let cM = makeString([toString(T.caller), am, toString(aC), aD, toString(aE), aF, toString(ah), toString(ai), ag, cT, toString(cY), toString(1)], ",")
695+ let cZ = {
696+ let ad = invoke(this, "createNewRequest", [cM], nil)
697+ if ($isInstanceOf(ad, "Int"))
698+ then ad
699+ else throw(($getType(ad) + " couldn't be cast to Int"))
635700 }
636- if ((cQ == cQ))
701+ if ((cZ == cZ))
637702 then {
638- let cR = [((toString(P.caller) + "_") + toString(1)), ay, cI, cP, toString(this), "replenishFromLandReadOnly", toString(valueOrErrorMessage(cQ, "Can't create new request"))]
639- let bj = reentrantInvoke(am(), "flashPosition", cR, nil)
640- if ((bj == bj))
641- then $Tuple2(getIntegerValue(this, "EVALONLY_STAKEDAMOUNT"), cP)
703+ let da = [((toString(T.caller) + "_") + toString(1)), ag, cT, cY, toString(this), "replenishFromLandReadOnly", toString(valueOrErrorMessage(cZ, "Can't create new request"))]
704+ let br = reentrantInvoke(aw(), "flashPosition", da, nil)
705+ if ((br == br))
706+ then $Tuple2(getIntegerValue(this, "EVALONLY_STAKEDAMOUNT"), cY)
642707 else throw("Strict value is not equal to itself.")
643708 }
644709 else throw("Strict value is not equal to itself.")
645710 }
646- else $Tuple2(aZ(bI, ad, e, as, ba, au, bb, aw, ax, ay)._1, 0)
647- let cS = cL._1
648- let cP = cL._2
649- let cT = cj(ad, cS, cP, cI)
650- if ((cT == cT))
711+ else $Tuple2(bg(bQ, am, f, aC, bh, aE, bi, ah, ai, ag)._1, 0)
712+ let db = cW._1
713+ let cY = cW._2
714+ let dc = cr(am, db, cY, cT)
715+ if ((dc == dc))
651716 then {
652- let bT = cT._4
653- let cB = cT._3
654- let bS = cT._2
655- let cA = cT._1
656- $Tuple2(nil, [cS, cA, cB])
717+ let dd = dc._6
718+ let de = dc._5
719+ let cb = dc._4
720+ let cJ = dc._3
721+ let ca = dc._2
722+ let cI = dc._1
723+ let df = aj(Address(fromBase58String(am)), bQ)
724+ let dg = df._1
725+ let dh = df._2
726+ let di = df._3
727+ let dj = df._4
728+ let dk = df._5
729+ let dl = fraction(ai, g, ah)
730+ let dm = fraction(dj, g, di)
731+ let dn = (g - fraction(dl, g, dm))
732+ let do = if ((0 > dn))
733+ then (dn * -1)
734+ else dn
735+ $Tuple2(nil, [de, dd, do])
657736 }
658737 else throw("Strict value is not equal to itself.")
659738 }
660739
661740
662741
663-@Callable(P)
664-func replenishFromLandEVALONLY (cD) = {
665- let cU = cC(cD)
666- let af = cU._1
667- let ad = cU._2
668- let as = cU._3
669- let ba = cU._4
670- let au = cU._5
671- let bb = cU._6
672- let aw = cU._7
673- let ax = cU._8
674- let ay = cU._9
675- let cF = cU._10
676- let cG = cU._11
677- if ((size(P.payments) != 1))
742+@Callable(T)
743+func replenishFromLandEVALONLY (cL) = {
744+ let dp = cK(cL)
745+ let ap = dp._1
746+ let am = dp._2
747+ let aC = dp._3
748+ let bh = dp._4
749+ let aE = dp._5
750+ let bi = dp._6
751+ let ah = dp._7
752+ let ai = dp._8
753+ let ag = dp._9
754+ let cN = dp._10
755+ let cO = dp._11
756+ if ((size(T.payments) != 1))
678757 then throw("Wrong payment size")
679- else if (if ((an(P.payments[0].assetId) != cF))
758+ else if (if ((ax(T.payments[0].assetId) != cN))
680759 then true
681- else (P.payments[0].amount != cG))
760+ else (T.payments[0].amount != cO))
682761 then throw("Wrong payment")
683762 else {
684- let cV = if ((ba == cF))
685- then $Tuple2((as + P.payments[0].amount), au)
686- else $Tuple2(as, (au + P.payments[0].amount))
687- let cW = cV._1
688- let cX = cV._2
689- let bI = valueOrErrorMessage(getString(this, (A + ad)), "Unknown pool")
690- let cY = aZ(bI, ad, d, as, ba, au, bb, aw, ax, ay)
691- let cS = cY._1
692- let bO = cY._2
693- $Tuple2([IntegerEntry("EVALONLY_STAKEDAMOUNT", cS)], cS)
763+ let dq = if ((bh == cN))
764+ then $Tuple2((aC + T.payments[0].amount), aE)
765+ else $Tuple2(aC, (aE + T.payments[0].amount))
766+ let dr = dq._1
767+ let ds = dq._2
768+ let bQ = valueOrErrorMessage(getString(this, (D + am)), "Unknown pool")
769+ let dt = bg(bQ, am, e, aC, bh, aE, bi, ah, ai, ag)
770+ let db = dt._1
771+ let bW = dt._2
772+ $Tuple2([IntegerEntry("EVALONLY_STAKEDAMOUNT", db)], db)
694773 }
695774 }
696775
697776
698777
699-@Callable(P)
700-func replenish (ad,cH,cI) = if (if ((100 > cH))
778+@Callable(T)
779+func replenish (am,cS,cT) = if (if ((100 > cS))
701780 then true
702- else (cH > 300))
781+ else (cS > 300))
703782 then throw("Leverage can't be <100 and >300")
704783 else {
705- let bI = valueOrErrorMessage(getString(this, (A + ad)), "Pool is not inited")
706- let cZ = aa(Address(fromBase58String(ad)), bI)
707- let ba = cZ._1
708- let bb = cZ._2
709- let aw = cZ._3
710- let ax = cZ._4
711- let ay = cZ._5
712- let da = if ((size(P.payments) == 2))
713- then if ((an(P.payments[0].assetId) != ba))
784+ let bQ = valueOrErrorMessage(getString(this, (D + am)), "Pool is not inited")
785+ let du = aj(Address(fromBase58String(am)), bQ)
786+ let bh = du._1
787+ let bi = du._2
788+ let ah = du._3
789+ let ai = du._4
790+ let ag = du._5
791+ let dv = if ((size(T.payments) == 2))
792+ then if ((ax(T.payments[0].assetId) != bh))
714793 then throw("Wrong payment asset A")
715- else if ((an(P.payments[1].assetId) != bb))
794+ else if ((ax(T.payments[1].assetId) != bi))
716795 then throw("Wrong payment asset B")
717- else $Tuple4(P.payments[0].amount, ba, P.payments[1].amount, bb)
718- else if ((size(P.payments) == 1))
719- then if ((an(P.payments[0].assetId) == ba))
720- then $Tuple4(P.payments[0].amount, ba, 0, bb)
721- else if ((an(P.payments[0].assetId) == bb))
722- then $Tuple4(0, ba, P.payments[0].amount, bb)
796+ else $Tuple4(T.payments[0].amount, bh, T.payments[1].amount, bi)
797+ else if ((size(T.payments) == 1))
798+ then if ((ax(T.payments[0].assetId) == bh))
799+ then $Tuple4(T.payments[0].amount, bh, 0, bi)
800+ else if ((ax(T.payments[0].assetId) == bi))
801+ then $Tuple4(0, bh, T.payments[0].amount, bi)
723802 else throw("Wrong payment")
724803 else throw("One or two payments expected")
725- let as = da._1
726- let at = da._2
727- let au = da._3
728- let av = da._4
729- let db = ae(ad, toString(P.caller))
730- if ((cH > 100))
804+ let aC = dv._1
805+ let aD = dv._2
806+ let aE = dv._3
807+ let aF = dv._4
808+ let dw = ao(am, toString(T.caller))
809+ if ((cS > 100))
731810 then {
732- let cM = ( let Z = invoke(K, "getTWAP60", [at, false], nil)
733- if ($isInstanceOf(Z, "(Int, Int)"))
734- then Z
735- else throw(($getType(Z) + " couldn't be cast to (Int, Int)")))._1
736- let cN = ( let Z = invoke(K, "getTWAP60", [av, false], nil)
737- if ($isInstanceOf(Z, "(Int, Int)"))
738- then Z
739- else throw(($getType(Z) + " couldn't be cast to (Int, Int)")))._1
740- let cO = (fraction(cM, as, pow(10, 0, ap(at), 0, 0, DOWN)) + fraction(cN, au, pow(10, 0, ap(av), 0, 0, DOWN)))
741- let cP = fraction(cO, (cH - 100), 100)
742- let cE = makeString([toString(P.caller), ad, toString(as), at, toString(au), av, toString(aw), toString(ax), ay, cI, toString(cP)], ",")
743- let cQ = {
744- let Z = invoke(this, "createNewRequest", [cE], nil)
745- if ($isInstanceOf(Z, "Int"))
746- then Z
747- else throw(($getType(Z) + " couldn't be cast to Int"))
811+ let cQ = ( let ad = invoke(O, "getTWAP60", [aD, false], nil)
812+ if ($isInstanceOf(ad, "(Int, Int)"))
813+ then ad
814+ else throw(($getType(ad) + " couldn't be cast to (Int, Int)")))._2
815+ let cR = ( let ad = invoke(O, "getTWAP60", [aF, false], nil)
816+ if ($isInstanceOf(ad, "(Int, Int)"))
817+ then ad
818+ else throw(($getType(ad) + " couldn't be cast to (Int, Int)")))._2
819+ let cX = (fraction(cQ, aC, pow(10, 0, az(aD), 0, 0, DOWN)) + fraction(cR, aE, pow(10, 0, az(aF), 0, 0, DOWN)))
820+ let cY = fraction(cX, (cS - 100), 100)
821+ let cM = makeString([toString(T.caller), am, toString(aC), aD, toString(aE), aF, toString(ah), toString(ai), ag, cT, toString(cY)], ",")
822+ let cZ = {
823+ let ad = invoke(this, "createNewRequest", [cM], nil)
824+ if ($isInstanceOf(ad, "Int"))
825+ then ad
826+ else throw(($getType(ad) + " couldn't be cast to Int"))
748827 }
749- if ((cQ == cQ))
828+ if ((cZ == cZ))
750829 then {
751- let cR = [((toString(P.caller) + "_") + toString(db)), ay, cI, cP, toString(this), "replenishFromLand", toString(valueOrErrorMessage(cQ, "Can't create new request"))]
752- let bj = reentrantInvoke(am(), "flashPosition", cR, nil)
753- if ((bj == bj))
830+ let da = [((toString(T.caller) + "_") + toString(dw)), ag, cT, cY, toString(this), "replenishFromLand", toString(valueOrErrorMessage(cZ, "Can't create new request"))]
831+ let br = reentrantInvoke(aw(), "flashPosition", da, nil)
832+ if ((br == br))
754833 then nil
755834 else throw("Strict value is not equal to itself.")
756835 }
757836 else throw("Strict value is not equal to itself.")
758837 }
759838 else {
760- let dc = aZ(bI, ad, e, as, ba, au, bb, aw, ax, ay)
761- let cS = dc._1
762- let bO = dc._2
763- bc(ad, toString(P.caller), cS, bO, db, ay, bI)
839+ let dx = bg(bQ, am, f, aC, bh, aE, bi, ah, ai, ag)
840+ let db = dx._1
841+ let bW = dx._2
842+ bj(am, toString(T.caller), db, bW, dw, ag, bQ)
764843 }
765844 }
766845
767846
768847
769-@Callable(P)
770-func replenishFromLand (cD) = {
771- let dd = cC(cD)
772- let af = dd._1
773- let ad = dd._2
774- let as = dd._3
775- let ba = dd._4
776- let au = dd._5
777- let bb = dd._6
778- let aw = dd._7
779- let ax = dd._8
780- let ay = dd._9
781- let cF = dd._10
782- let cG = dd._11
783- if ((size(P.payments) != 1))
848+@Callable(T)
849+func replenishFromLand (cL) = {
850+ let dy = cK(cL)
851+ let ap = dy._1
852+ let am = dy._2
853+ let aC = dy._3
854+ let bh = dy._4
855+ let aE = dy._5
856+ let bi = dy._6
857+ let ah = dy._7
858+ let ai = dy._8
859+ let ag = dy._9
860+ let cN = dy._10
861+ let cO = dy._11
862+ if ((size(T.payments) != 1))
784863 then throw("Wrong payment size")
785- else if (if ((an(P.payments[0].assetId) != cF))
864+ else if (if ((ax(T.payments[0].assetId) != cN))
786865 then true
787- else (P.payments[0].amount != cG))
866+ else (T.payments[0].amount != cO))
788867 then throw("Wrong payment")
789868 else {
790- let de = if ((ba == cF))
791- then $Tuple2((as + P.payments[0].amount), au)
792- else $Tuple2(as, (au + P.payments[0].amount))
793- let cW = de._1
794- let cX = de._2
795- let bI = valueOrErrorMessage(getString(this, (A + ad)), "Unknown pool")
796- let df = aZ(bI, ad, d, as, ba, au, bb, aw, ax, ay)
797- let cS = df._1
798- let bO = df._2
799- let be = ae(ad, toString(P.caller))
800- let dg = [IntegerEntry((((((ad + "_") + af) + "_") + toString(be)) + p), cG), StringEntry((((((ad + "_") + af) + "_") + toString(be)) + q), cF)]
801- let dh = bc(ad, af, cS, bO, be, ay, bI)
802- $Tuple2(((dh ++ dg) :+ DeleteEntry((cD + y))), cS)
869+ let dz = if ((bh == cN))
870+ then $Tuple2((aC + T.payments[0].amount), aE)
871+ else $Tuple2(aC, (aE + T.payments[0].amount))
872+ let dr = dz._1
873+ let ds = dz._2
874+ let bQ = valueOrErrorMessage(getString(this, (D + am)), "Unknown pool")
875+ let dA = bg(bQ, am, e, aC, bh, aE, bi, ah, ai, ag)
876+ let db = dA._1
877+ let bW = dA._2
878+ let bl = ao(am, toString(T.caller))
879+ let dB = [IntegerEntry((((((am + "_") + ap) + "_") + toString(bl)) + q), cO), StringEntry((((((am + "_") + ap) + "_") + toString(bl)) + r), cN)]
880+ let dC = bj(am, ap, db, bW, bl, ag, bQ)
881+ $Tuple2(((dC ++ dB) :+ DeleteEntry((cL + B))), db)
803882 }
804883 }
805884
806885
807886
808-@Callable(P)
809-func withdraw (ad,di) = {
810- let af = toString(P.caller)
811- let dj = valueOrErrorMessage(getInteger(this, (((((ad + "_") + af) + "_") + toString(di)) + o)), "Unknown position")
812- let dk = getIntegerValue(this, (((((ad + "_") + af) + "_") + toString(di)) + s))
813- let dl = getIntegerValue(this, (ad + u))
814- let dm = ac(ad)
815- let ck = (dj + fraction(dj, (dl - dk), g))
816- let dn = Address(fromBase58String(af))
817- let cP = getIntegerValue(this, (((((ad + "_") + af) + "_") + toString(di)) + p))
818- let cm = getStringValue(this, (((((ad + "_") + af) + "_") + toString(di)) + q))
819- let cl = if ((cP > 0))
887+@Callable(T)
888+func withdraw (am,dD) = {
889+ let ap = toString(T.caller)
890+ let dE = valueOrErrorMessage(getInteger(this, (((((am + "_") + ap) + "_") + toString(dD)) + p)), "Unknown position")
891+ let dF = getIntegerValue(this, (((((am + "_") + ap) + "_") + toString(dD)) + t))
892+ let dG = getIntegerValue(this, (am + w))
893+ let dH = al(am)
894+ let cs = (dE + fraction(dE, (dG - dF), h))
895+ let dI = Address(fromBase58String(ap))
896+ let cY = getIntegerValue(this, (((((am + "_") + ap) + "_") + toString(dD)) + q))
897+ let cu = getStringValue(this, (((((am + "_") + ap) + "_") + toString(dD)) + r))
898+ let ct = if ((cY > 0))
820899 then {
821- let Z = invoke(am(), "getAssetDebt", [false, ((((ad + "_") + af) + "_") + toString(di)), cm], nil)
822- if ($isInstanceOf(Z, "Int"))
823- then Z
824- else throw(($getType(Z) + " couldn't be cast to Int"))
900+ let ad = invoke(aw(), "getAssetDebt", [false, ((((am + "_") + ap) + "_") + toString(dD)), cu], nil)
901+ if ($isInstanceOf(ad, "Int"))
902+ then ad
903+ else throw(($getType(ad) + " couldn't be cast to Int"))
825904 }
826905 else 0
827- let do = cj(ad, ck, cl, cm)
828- if ((do == do))
906+ let dJ = cr(am, cs, ct, cu)
907+ if ((dJ == dJ))
829908 then {
830- let bT = do._4
831- let cB = do._3
832- let bS = do._2
833- let cA = do._1
834- let dp = if ((cl > 0))
835- then invoke(am(), "repayFor", [((af + "_") + toString(di))], [AttachedPayment(ao(cm), cl)])
909+ let cb = dJ._4
910+ let cJ = dJ._3
911+ let ca = dJ._2
912+ let cI = dJ._1
913+ let dK = if ((ct > 0))
914+ then invoke(aw(), "repayFor", [((ap + "_") + toString(dD))], [AttachedPayment(ay(cu), ct)])
836915 else 0
837- if ((dp == dp))
838- then [DeleteEntry((((((ad + "_") + af) + "_") + toString(di)) + o)), DeleteEntry((((((ad + "_") + af) + "_") + toString(di)) + s)), IntegerEntry((ad + t), (dm - ck)), ScriptTransfer(dn, cA, ao(bS)), ScriptTransfer(dn, cB, ao(bT))]
916+ if ((dK == dK))
917+ then [DeleteEntry((((((am + "_") + ap) + "_") + toString(dD)) + p)), DeleteEntry((((((am + "_") + ap) + "_") + toString(dD)) + t)), IntegerEntry((am + u), (dH - cs)), ScriptTransfer(dI, cI, ay(ca)), ScriptTransfer(dI, cJ, ay(cb))]
839918 else throw("Strict value is not equal to itself.")
840919 }
841920 else throw("Strict value is not equal to itself.")
842921 }
843922
844923
845924
846-@Callable(P)
847-func createNewRequest (dq) = valueOrElse(O(P), {
848- let cQ = (valueOrElse(getInteger(this, z), 0) + 1)
849- $Tuple2([StringEntry((toString(cQ) + y), dq), IntegerEntry(z, cQ)], cQ)
925+@Callable(T)
926+func createNewRequest (dL) = valueOrElse(S(T), {
927+ let cZ = (valueOrElse(getInteger(this, C), 0) + 1)
928+ $Tuple2([StringEntry((toString(cZ) + B), dL), IntegerEntry(C, cZ)], cZ)
850929 })
851930
852931
853932
854-@Callable(P)
855-func capitalizeExKeeper (ad,ab,dr,ds,dt,bp,bq,br,bs,bt,bu,bv) = {
856- let du = if (dt)
857- then bh(ab, ad)
933+@Callable(T)
934+func capitalizeExKeeper (am,ak,dM,dN,dO,bx,by,bz,bA,bB,bC,bD) = {
935+ let dP = if (dO)
936+ then bp(ak, am)
858937 else {
859- let dv = if ((ab == a))
860- then M
861- else N
862- $Tuple2(ds, dv)
938+ let dQ = if ((ak == a))
939+ then Q
940+ else R
941+ $Tuple2(dN, dQ)
863942 }
864- let dw = du._1
865- let dv = du._2
866- let dx = bl(dr, ds, dv, bp, bq, br, bs, bt, bu, bv)
867- let aG = (dw - ds)
868- let dy = if ((aG > 0))
869- then [IntegerEntry((ad + B), (aG + valueOrElse(getInteger(this, (ad + B)), 0)))]
943+ let dR = dP._1
944+ let dQ = dP._2
945+ let dS = bt(dM, dN, dQ, bx, by, bz, bA, bB, bC, bD)
946+ let aN = (dR - dN)
947+ let dT = if ((aN > 0))
948+ then [IntegerEntry((am + F), (aN + valueOrElse(getInteger(this, (am + F)), 0)))]
870949 else nil
871- (bH(ad, ab, dr, dx) ++ dy)
950+ (bP(am, ak, dM, dS) ++ dT)
872951 }
873952
874953
875954
876-@Callable(P)
877-func capitalizeExPazzle (ad,ab,dr,ds,dt,by,bz,bv) = {
878- let dz = if (dt)
879- then bh(ab, ad)
955+@Callable(T)
956+func capitalizeExPazzle (am,ak,dM,dN,dO,bG,bH,bD) = {
957+ let dU = if (dO)
958+ then bp(ak, am)
880959 else {
881- let dv = if ((ab == a))
882- then M
883- else N
884- $Tuple2(ds, dv)
960+ let dQ = if ((ak == a))
961+ then Q
962+ else R
963+ $Tuple2(dN, dQ)
885964 }
886- let dw = dz._1
887- let dv = dz._2
888- let dx = bx(dr, ds, dv, by, bz, bv)
889- let aG = (dw - ds)
890- let dy = if ((aG > 0))
891- then [IntegerEntry((ad + B), (aG + valueOrElse(getInteger(this, (ad + B)), 0)))]
965+ let dR = dU._1
966+ let dQ = dU._2
967+ let dS = bF(dM, dN, dQ, bG, bH, bD)
968+ let aN = (dR - dN)
969+ let dT = if ((aN > 0))
970+ then [IntegerEntry((am + F), (aN + valueOrElse(getInteger(this, (am + F)), 0)))]
892971 else nil
893- (bH(ad, ab, dr, dx) ++ dy)
972+ (bP(am, ak, dM, dS) ++ dT)
894973 }
895974
896975
897976
898-@Callable(P)
899-func capitalizeExSwopFi (ad,ab,dr,ds,dt,bB,bC,bD,bE,bF,bG,bv) = {
900- let dA = if (dt)
901- then bh(ab, ad)
977+@Callable(T)
978+func capitalizeExSwopFi (am,ak,dM,dN,dO,bJ,bK,bL,bM,bN,bO,bD) = {
979+ let dV = if (dO)
980+ then bp(ak, am)
902981 else {
903- let dv = if ((ab == a))
904- then M
905- else N
906- $Tuple2(ds, dv)
982+ let dQ = if ((ak == a))
983+ then Q
984+ else R
985+ $Tuple2(dN, dQ)
907986 }
908- let dw = dA._1
909- let dv = dA._2
910- let dx = bA(dr, ds, dv, bB, bC, bD, bE, bF, bG, bv)
911- let aG = (dw - ds)
912- let dy = if ((aG > 0))
913- then [IntegerEntry((ad + B), (aG + valueOrElse(getInteger(this, (ad + B)), 0)))]
987+ let dR = dV._1
988+ let dQ = dV._2
989+ let dS = bI(dM, dN, dQ, bJ, bK, bL, bM, bN, bO, bD)
990+ let aN = (dR - dN)
991+ let dT = if ((aN > 0))
992+ then [IntegerEntry((am + F), (aN + valueOrElse(getInteger(this, (am + F)), 0)))]
914993 else nil
915- (bH(ad, ab, dr, dx) ++ dy)
994+ (bP(am, ak, dM, dS) ++ dT)
916995 }
917996
918997
919998
920-@Callable(P)
921-func initNewPool (ab,W,dB,dC,dD) = if (if ((ab != a))
922- then (ab != b)
999+@Callable(T)
1000+func initNewPool (ak,aa,dW,dX,dY,dZ) = if (if ((ak != a))
1001+ then (ak != b)
9231002 else false)
9241003 then throw("Wrong type")
925- else [IntegerEntry((W + v), dB), IntegerEntry((W + w), dC), IntegerEntry((W + x), dD), IntegerEntry((W + u), 0), StringEntry((A + W), ab)]
1004+ else {
1005+ let ea = aj(Address(fromBase58String(aa)), ak)
1006+ let ae = ea._1
1007+ let af = ea._2
1008+ let eb = ea._3
1009+ let ec = ea._4
1010+ let ag = ea._5
1011+[IntegerEntry((aa + x), dW), IntegerEntry((aa + y), dX), IntegerEntry((aa + z), dY), IntegerEntry((aa + A), dZ), IntegerEntry((aa + w), 0), StringEntry((D + aa), ak), StringEntry((ag + E), aa)]
1012+ }
9261013
9271014
928-@Verifier(dE)
929-func dF () = sigVerify(dE.bodyBytes, dE.proofs[0], dE.senderPublicKey)
1015+@Verifier(ed)
1016+func ee () = sigVerify(ed.bodyBytes, ed.proofs[0], ed.senderPublicKey)
9301017

github/deemru/w8io/169f3d6 
345.74 ms