tx · A7ZdxZ895MU6GEHkV9ZRtM7K3PbknVEMwnecSGNqWbTk

3NBPx1Fciu3JQNEGZ21jSnTdutLNGGBUSXh:  -0.02700000 Waves

2024.11.28 03:49 [3390590] smart account 3NBPx1Fciu3JQNEGZ21jSnTdutLNGGBUSXh > SELF 0.00000000 Waves

{ "type": 13, "id": "A7ZdxZ895MU6GEHkV9ZRtM7K3PbknVEMwnecSGNqWbTk", "fee": 2700000, "feeAssetId": null, "timestamp": 1732755008800, "version": 2, "chainId": 84, "sender": "3NBPx1Fciu3JQNEGZ21jSnTdutLNGGBUSXh", "senderPublicKey": "3QtfC1XbLZXdeawMDeSERy9vvjUmj1XYd2GFmrvx7pWQ", "proofs": [ "5BuXP5jGSuqAN3ywtf6Rdr2piy9ztymiMuZL4NgJNzwe9f67u4jgawCWGuhX2UHU1LvGPdMVMJBeLhkYeuqXs5FV" ], "script": "base64:BgJGCAISABIECgIICBIDCgEEEgMKAQESABIAEgMKAQESABIECgIIARIAEgMKAQgSAwoBCBIECgIIARIECgIIARIAEgMKAQgSAGEAA1NFUAICX18ABU1VTFQ2AMCEPQAFTVVMVDcAgK3iBAAFTVVMVDgAgMLXLwAKREFZX01JTExJUwCAuJkpABVVU0RUMkFDUkVTX01VTFRJUExJRVIACgATT05FX1BFUkNFTlRfRElWSVNPUgBkAAVjaGFpbgkAyQECCQDKAQIIBQR0aGlzBWJ5dGVzAAEAAQALV0VFS19CTE9DS1MEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAA4E4DCQAAAgEBVAUHJG1hdGNoMAC0AQkAAgECDVVua25vd24gY2hhaW4AC3VzZHRBc3NldElkBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwASCE2nqyCAM/TtG7yo7ui5O8yYLdC136B5ao1CP5qA//uQMJAAACAQFUBQckbWF0Y2gwASBVsdifcoeC7+XjW42sBatl3ppDoS8WuwXzGreHpfHFGAkAAgECDVVua25vd24gY2hhaW4AFmRlZmF1bHRSZXN0MkFkZHJlc3NTdHIEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDACIzNQRndZdGE4YmlFejMxenBlRmU1REpLOHdFNXRyU3BRVkY4AwkAAAIBAVQFByRtYXRjaDACIzNON1V1WWFyNjI2NFA1OEZCaFZXS1BRQWg0WXVhMmhnbmd2CQACAQINVW5rbm93biBjaGFpbgAOYXJiaXRyYWdlRGVsYXkEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAFCkRBWV9NSUxMSVMDCQAAAgEBVAUHJG1hdGNoMADg1AMJAAIBAg1Vbmtub3duIGNoYWluABVvbGRTdGFraW5nQ29udHJhY3RTdHIEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDACIzNQTG5jWHRTMVU4M0Q2Y1FiRkQzSDhyQkhQTGd6eFNGS1oxAwkAAAIBAVQFByRtYXRjaDACIzNOREN5Qkc1cTg1SnVhUmlpZ1VlRXRhaW55akNRVDNYcFptCQACAQINVW5rbm93biBjaGFpbgEPZ2V0U3RyaW5nT3JGYWlsAgdhZGRyZXNzA2tleQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFB2FkZHJlc3MFA2tleQkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQdhZGRyZXNzCQDMCAICAS4JAMwIAgUDa2V5CQDMCAICDyBpcyBub3QgZGVmaW5lZAUDbmlsAgAAEElkeENmZ0FjcmVzMkRhcHAAAQANSWR4Q2ZnV2xnRGFwcAACABRJZHhDZmdJbnZlc3RGdW5kRGFwcAAFAQprZXlSZXN0Q2ZnAAIOJXNfX3Jlc3RDb25maWcBD2tleVJlc3QyQWRkcmVzcwACDSVzX19yZXN0MkFkZHIBEXJlYWRSZXN0Q2ZnT3JGYWlsAQRyZXN0CQC8CQIJAQ9nZXRTdHJpbmdPckZhaWwCBQRyZXN0CQEKa2V5UmVzdENmZwAFA1NFUAEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAghyZXN0MkNmZwNpZHgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFCHJlc3QyQ2ZnBQNpZHgJAKwCAgIqUmVzdCBjZmcgZG9lc24ndCBjb250YWluIGFkZHJlc3MgYXQgaW5kZXggCQCkAwEFA2lkeAANcmVzdDJDb250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzCQEPa2V5UmVzdDJBZGRyZXNzAAUWZGVmYXVsdFJlc3QyQWRkcmVzc1N0cgAIcmVzdDJDZmcJARFyZWFkUmVzdENmZ09yRmFpbAEFDXJlc3QyQ29udHJhY3QADmFjcmVzMkNvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUIcmVzdDJDZmcFEElkeENmZ0FjcmVzMkRhcHAAC3dsZ0NvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUIcmVzdDJDZmcFDUlkeENmZ1dsZ0RhcHAAEmludmVzdEZ1bmRDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFCHJlc3QyQ2ZnBRRJZHhDZmdJbnZlc3RGdW5kRGFwcAATb2xkQWNyZXNDb250cmFjdEtleQIQb2xkQWNyZXNDb250cmFjdAEKa2V5QmxvY2tlZAACEGNvbnRyYWN0c0Jsb2NrZWQBFWtleUxhc3RXZWVrVHhJZEJ5VXNlcgEEYWRkcgkArAICAhNsYXN0V2Vla1R4SWRCeVVzZXJfBQRhZGRyARRrZXlDdXJXZWVrVHhJZEJ5VXNlcgEEYWRkcgkArAICAhJjdXJXZWVrVHhJZEJ5VXNlcl8FBGFkZHIAFGFjcmVzSXNzdWVkQW1vdW50S2V5AhFhY3Jlc0lzc3VlZEFtb3VudAAPYWNyZXNBc3NldElkS2V5AgxhY3Jlc0Fzc2V0SWQADGFjcmVzQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCcCAIFDmFjcmVzMkNvbnRyYWN0BQ9hY3Jlc0Fzc2V0SWRLZXkCF0FDUkVTIGlzIG5vdCBpc3N1ZWQgeWV0ARhrZXlBY3Jlc1N0YWtlZFRpbWVCeVVzZXIBBGFkZHIJAKwCAgIWYWNyZXNTdGFrZWRUaW1lQnlVc2VyXwUEYWRkcgEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQlvd25lckFkZHIJAKwCAgITc3Rha2VkTGFuZHNCeU93bmVyXwUJb3duZXJBZGRyARRrZXlTdGFrZWREdWNrQnlPd25lcgEJb3duZXJBZGRyCQCsAgICEnN0YWtlZER1Y2tCeU93bmVyXwUJb3duZXJBZGRyAR5rZXlTdGFrZWRUaW1lQnlBc3NldElkQW5kT3duZXICB2Fzc2V0SWQEYWRkcgkArAICCQCsAgIJAKwCAgIDc3RfBQdhc3NldElkAgFfBQRhZGRyARRrZXlTdGFrZWRORlRzQnlPd25lcgEJb3duZXJBZGRyCQCsAgICEnN0YWtlZE5GVHNCeU93bmVyXwUJb3duZXJBZGRyAQVhc0ludAEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAgNJbnQEAW4FByRtYXRjaDAFAW4JAAIBAhVmYWlsIHRvIGNhc3QgaW50byBJbnQBDGFzVHVwbGU1SW50cwEDdmFsBAckbWF0Y2gwBQN2YWwDCQABAgUHJG1hdGNoMAIZKEludCwgSW50LCBJbnQsIEludCwgSW50KQQBdAUHJG1hdGNoMAUBdAkAAgECK2ZhaWwgdG8gY2FzdCBpbnRvIChJbnQsIEludCwgSW50LCBJbnQsIEludCkBDGFzVHVwbGU0SW50cwEDdmFsBAckbWF0Y2gwBQN2YWwDCQABAgUHJG1hdGNoMAIUKEludCwgSW50LCBJbnQsIEludCkEAXQFByRtYXRjaDAFAXQJAAIBAiZmYWlsIHRvIGNhc3QgaW50byAoSW50LCBJbnQsIEludCwgSW50KQEMYXNUdXBsZTNJbnRzAQN2YWwEByRtYXRjaDAFA3ZhbAMJAAECBQckbWF0Y2gwAg8oSW50LCBJbnQsIEludCkEAXQFByRtYXRjaDAFAXQJAAIBAiFmYWlsIHRvIGNhc3QgaW50byAoSW50LCBJbnQsIEludCkBDGFzVHVwbGUySW50cwEDdmFsBAckbWF0Y2gwBQN2YWwDCQABAgUHJG1hdGNoMAIKKEludCwgSW50KQQBdAUHJG1hdGNoMAUBdAkAAgECHGZhaWwgdG8gY2FzdCBpbnRvIChJbnQsIEludCkBCmZpeGVkUG9pbnQCA3ZhbAhkZWNpbWFscwQGdGVuUG93CQBsBgAKAAAFCGRlY2ltYWxzAAAAAAUERE9XTgQHbG93UGFydAkApAMBCQBqAgUDdmFsBQZ0ZW5Qb3cEBnplcm9lcwkAsAICCQCkAwEFBnRlblBvdwkAZAIAAQkAsQIBBQdsb3dQYXJ0CQCsAgIJAKwCAgkArAICCQCkAwEJAGkCBQN2YWwFBnRlblBvdwIBLgUGemVyb2VzBQdsb3dQYXJ0AANNNl8AwIQ9AANNOF8AgMLXLwAPd2xnSXNzdWVkQW10S2V5AhB3bGdfaXNzdWVkQW1vdW50AA56Yklzc3VlZEFtdEtleQISemJpbGxfaXNzdWVkQW1vdW50ARdrZXlBY3Jlc1N0YWtlZEFtdEJ5VXNlcgEEYWRkcgkArAICAhhhY3Jlc1N0YWtlZEFtb3VudEJ5VXNlcl8FBGFkZHIBFWtleUZhcm1pbmdQb3dlckJ5VXNlcgEEYWRkcgkArAICAhNmYXJtaW5nUG93ZXJCeVVzZXJfBQRhZGRyABJhY3Jlc1N0YWtkVG90YWxLZXkCFmFjcmVzU3Rha2VkQW1vdW50VG90YWwAFHRvdGFsRmFybWluZ1Bvd2VyS2V5AhF0b3RhbEZhcm1pbmdQb3dlcgAVSWR4RHR4M1BlcmNDb252ZXJzaW9uAAAAC01BWF9XTF9ORlRTAAMADE1BWF9BUktfTkZUUwABAA1BUktfTkZUX0JPTlVTAIgnABdNQVhfTkZUU19TVEFLRURfQllfVVNFUgAEABFrZXlOZnRUb3RhbElzc3VlZAIObmZ0VG90YWxJc3N1ZWQAEWtleU5mdFRvdGFsQnVybmVkAg5uZnRUb3RhbEJ1cm5lZAATa2V5V2xOZnRUb3RhbFN0YWtlZAIQV2xOZnRUb3RhbFN0YWtlZAAUa2V5QXJrTmZ0VG90YWxTdGFrZWQCEUFya05mdFRvdGFsU3Rha2VkARVrZXlOZnROdW1iZXJCeUFzc2V0SWQBB2Fzc2V0SWQJAKwCAgITbmZ0TnVtYmVyQnlBc3NldElkXwUHYXNzZXRJZAESa2V5VXNlcldsTmZ0TnVtYmVyAQRhZGRyCQCsAgICEHVzZXJXbE5mdE51bWJlcl8FBGFkZHIBE2tleVVzZXJBcmtOZnROdW1iZXIBBGFkZHIJAKwCAgIRdXNlckFya05mdE51bWJlcl8FBGFkZHIBEGtleVVzZXJGdWxsQm9udXMBBGFkZHIJAKwCAgIOdXNlckZ1bGxCb251c18FBGFkZHIACmxldmVsQWNyZXMJAMwIAgAACQDMCAIACgkAzAgCABQJAMwIAgAoCQDMCAIAUAkAzAgCAJYBCQDMCAIA+gEJAMwIAgCQAwkAzAgCALwFCQDMCAIA6AcFA25pbAEPZ2V0TGV2ZWxCeUFjcmVzAQVhY3JlcwQDYWNyCQBpAgkAZAIFBWFjcmVzAP/B1y8FA004XwoBB2NoZWNrZXICA2FjYwRpdGVtAwkAZwIFBGl0ZW0FA2FjcgUDYWNjCQBkAgUDYWNjAAEKAAIkbAUKbGV2ZWxBY3JlcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEHY2hlY2tlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgEWZ2V0RmFybWluZ1Bvd2VyQnlBY3JlcwEFYWNyZXMJAGgCCQBoAgUFYWNyZXMAFAkAZAIJAQ9nZXRMZXZlbEJ5QWNyZXMBBQVhY3JlcwAEAR5nZXRGYXJtaW5nUG93ZXJCeUFjcmVzQW5kQm9udXMCBWFjcmVzBmJvbnVzNgQKbm90Qm9udXNlZAkBFmdldEZhcm1pbmdQb3dlckJ5QWNyZXMBBQVhY3JlcwkAlAoCCQBrAwUKbm90Qm9udXNlZAkAZAIFA002XwUGYm9udXM2BQNNNl8FCm5vdEJvbnVzZWQBGWtleUxhc3RXbGdUcmFkZVRpbWVCeVVzZXIBBGFkZHIJAKwCAgIQbGFzdEFyYlRpbWVVc2VyXwUEYWRkcgAUa2V5TGFzdEFjcmVzU2VsbFRpbWUCEWxhc3RBY3Jlc1NlbGxUaW1lABBrZXlMYXN0TGltaXRMZWZ0Ag1sYXN0TGltaXRMZWZ0AAhuZnROYW1lcwkAzAgCAglTSE9WRUwtUDMJAMwIAgIKUElDS0FYRS1DMQkAzAgCAgpQSUNLQVhFLUMzCQDMCAICClBJQ0tBWEUtQzUJAMwIAgILUElDS0FYRS1DMTAFA25pbAALY29udGVudEtleXMJAMwIAgIPY29udGVudFNob3ZlbFAzCQDMCAICEGNvbnRlbnRQaWNrYXhlQzEJAMwIAgIQY29udGVudFBpY2theGVDMwkAzAgCAhBjb250ZW50UGlja2F4ZUM1CQDMCAICEWNvbnRlbnRQaWNrYXhlQzEwBQNuaWwABW5hbWVzCQDMCAICC0dvbGQgc2hvdmVsCQDMCAICB1BpY2theGUJAMwIAgIHUGlja2F4ZQkAzAgCAgdQaWNrYXhlCQDMCAICB1BpY2theGUFA25pbAAMZGVzY3JpcHRpb25zCQDMCAICFlJld2FyZCBmb3IgZWFybHkgYmlyZHMJAMwIAgITSW5jcmVhc2VzIEZhcm1Qb3dlcgkAzAgCAhNJbmNyZWFzZXMgRmFybVBvd2VyCQDMCAICE0luY3JlYXNlcyBGYXJtUG93ZXIJAMwIAgITSW5jcmVhc2VzIEZhcm1Qb3dlcgUDbmlsAAhyYXJpdGllcwkAzAgCAgVQcm9tbwkAzAgCAgZDb21tb24JAMwIAgIGQ29tbW9uCQDMCAICBkNvbW1vbgkAzAgCAgZDb21tb24FA25pbAAHYm9udXNlcwkAzAgCAAMJAMwIAgABCQDMCAIAAwkAzAgCAAUJAMwIAgAKBQNuaWwBBnByb2xvZwEBaQMDCQECIT0CCAUBaQxvcmlnaW5DYWxsZXIFDXJlc3QyQ29udHJhY3QJAQt2YWx1ZU9yRWxzZQIJAKAIAQkBCmtleUJsb2NrZWQABwcJAAIBAh9Db250cmFjdHMgYXJlIHVuZGVyIG1haW50ZW5hbmNlBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQEd2VlawkAaQIFBmhlaWdodAULV0VFS19CTE9DS1MEEmxhc3RXZWVrVHhJZEJ5VXNlcgkAoggBCQEVa2V5TGFzdFdlZWtUeElkQnlVc2VyAQUEYWRkcgQEdHhJZAkA2AQBCAUBaQ10cmFuc2FjdGlvbklkBAN3dHgJAKwCAgkArAICCQCkAwEFBHdlZWsCAV8FBHR4SWQDCQEJaXNEZWZpbmVkAQUSbGFzdFdlZWtUeElkQnlVc2VyBApsYXN0V2Vla1R4CQC1CQIJAQV2YWx1ZQEFEmxhc3RXZWVrVHhJZEJ5VXNlcgIBXwMJAAACCQCRAwIFCmxhc3RXZWVrVHgAAAkApAMBBQR3ZWVrCQDMCAIJAQtTdHJpbmdFbnRyeQIJARVrZXlMYXN0V2Vla1R4SWRCeVVzZXIBBQRhZGRyBQN3dHgJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFGtleUN1cldlZWtUeElkQnlVc2VyAQUEYWRkcgUDd3R4BQNuaWwDCQAAAgkAkQMCBQpsYXN0V2Vla1R4AAAJAKQDAQkAZQIFBHdlZWsAAQkAzAgCCQELU3RyaW5nRW50cnkCCQEUa2V5Q3VyV2Vla1R4SWRCeVVzZXIBBQRhZGRyBQN3dHgFA25pbAQRY3VyV2Vla1R4SWRCeVVzZXIJARFAZXh0ck5hdGl2ZSgxMDU4KQEJARVrZXlMYXN0V2Vla1R4SWRCeVVzZXIBBQRhZGRyBAljdXJXZWVrVHgJALUJAgURY3VyV2Vla1R4SWRCeVVzZXICAV8DCQAAAgkAkQMCBQljdXJXZWVrVHgAAAkApAMBBQR3ZWVrCQDMCAIJAQtTdHJpbmdFbnRyeQIJARRrZXlDdXJXZWVrVHhJZEJ5VXNlcgEFBGFkZHIFA3d0eAUDbmlsCQDMCAIJAQtTdHJpbmdFbnRyeQIJARVrZXlMYXN0V2Vla1R4SWRCeVVzZXIBBQRhZGRyBRFjdXJXZWVrVHhJZEJ5VXNlcgkAzAgCCQELU3RyaW5nRW50cnkCCQEUa2V5Q3VyV2Vla1R4SWRCeVVzZXIBBQRhZGRyBQN3dHgFA25pbAkAzAgCCQELU3RyaW5nRW50cnkCCQEVa2V5TGFzdFdlZWtUeElkQnlVc2VyAQUEYWRkcgUDd3R4CQDMCAIJAQtTdHJpbmdFbnRyeQIJARRrZXlDdXJXZWVrVHhJZEJ5VXNlcgEFBGFkZHIFA3d0eAUDbmlsARRjcmVhdGVOZnREZXNjcmlwdGlvbgIIbmZ0SW5kZXgJbmZ0U2VyaWFsCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAiJ7InVybCI6ICJodHRwczovL3dhdmVzbGFuZHMuY29tIiwgAg8iY29udGVudEtleSI6ICIJAJEDAgULY29udGVudEtleXMFCG5mdEluZGV4AgMiLCACCiJudW1iZXIiOiAFCW5mdFNlcmlhbAICLCACHCJjb2xsZWN0aW9uIjogIkRpZ2dpbmcgdG9vbHMCAyIsIAIJIm5hbWUiOiAiCQCRAwIFBW5hbWVzBQhuZnRJbmRleAIDIiwgAhAiZGVzY3JpcHRpb24iOiAiCQCRAwIFDGRlc2NyaXB0aW9ucwUIbmZ0SW5kZXgCAyIsIAIJInJhcmUiOiAiCQCRAwIFCHJhcml0aWVzBQhuZnRJbmRleAIDIiwgAgkiYm9udXMiOiAJAKQDAQkAkQMCBQdib251c2VzBQhuZnRJbmRleAICLCACGSJib251c1R5cGUiOiAiRmFybVBvd2VyIn0BEGlzc3VlTkZUaW50ZXJuYWwCCG5mdEluZGV4BGFkZHIDCQBnAgUIbmZ0SW5kZXgJAJADAQULY29udGVudEtleXMJAAIBAhZuZnRJbmRleCBvdXQgb2YgYm91bmRzBAluZnRTZXJpYWwJAGQCCQELdmFsdWVPckVsc2UCCQCfCAEFEWtleU5mdFRvdGFsSXNzdWVkAP///////////wEAAQQFaXNzdWUJAMIIBQkAkQMCBQhuZnROYW1lcwUIbmZ0SW5kZXgJARRjcmVhdGVOZnREZXNjcmlwdGlvbgIFCG5mdEluZGV4CQCkAwEFCW5mdFNlcmlhbAABAAAHBApuZnRBc3NldElkCQC4CAEFBWlzc3VlCQCUCgIJAMwIAgUFaXNzdWUJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtleU5mdFRvdGFsSXNzdWVkCQBkAgUJbmZ0U2VyaWFsAAEJAMwIAgkBDEludGVnZXJFbnRyeQIJARVrZXlOZnROdW1iZXJCeUFzc2V0SWQBCQDYBAEFCm5mdEFzc2V0SWQFCW5mdFNlcmlhbAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQRhZGRyAAEFCm5mdEFzc2V0SWQFA25pbAUKbmZ0QXNzZXRJZAEZc3Rha2VVbnN0YWtlQWNyZXNJbnRlcm5hbAMDYW10B2FkZHJlc3MKYm9udXNEZWx0YQMDCQAAAgUDYW10AAAJAAACBQpib251c0RlbHRhAAAHCQACAQINTm90aGluZyB0byBkbwQJd2xnUmVzdWx0CQD8BwQFC3dsZ0NvbnRyYWN0AhJvblN0YWtlVW5zdGFrZUxhbmQJAMwIAgUHYWRkcmVzcwUDbmlsBQNuaWwDCQAAAgUJd2xnUmVzdWx0BQl3bGdSZXN1bHQEA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAEB3RpbWVLZXkJARhrZXlBY3Jlc1N0YWtlZFRpbWVCeVVzZXIBBQdhZGRyZXNzBAlhbW91bnRLZXkJARdrZXlBY3Jlc1N0YWtlZEFtdEJ5VXNlcgEFB2FkZHJlc3MEDm9sZEFjcmVzQW1vdW50CQELdmFsdWVPckVsc2UCCQCfCAEFCWFtb3VudEtleQAAAwMJAGYCAAAFA2FtdAkAZgIAAAkAZAIFDm9sZEFjcmVzQW1vdW50BQNhbXQHCQACAQkArAICCQCsAgIJAKwCAgIOWW91IGhhdmUgb25seSAJAQpmaXhlZFBvaW50AgUOb2xkQWNyZXNBbW91bnQACAIgIEFDUkVTIHN0YWtlZCwgdHJpZWQgdG8gdW5zdGFrZSAJAQpmaXhlZFBvaW50AgkBAS0BBQNhbXQACAQObmV3QWNyZXNBbW91bnQJAGQCBQ5vbGRBY3Jlc0Ftb3VudAUDYW10BAhvbGRUb3RhbAkBC3ZhbHVlT3JFbHNlAgkAnwgBBRJhY3Jlc1N0YWtkVG90YWxLZXkAAAQJdXNlckZwS2V5CQEVa2V5RmFybWluZ1Bvd2VyQnlVc2VyAQUHYWRkcmVzcwQFb2xkRnAJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJdXNlckZwS2V5AAAECGJvbnVzS2V5CQEQa2V5VXNlckZ1bGxCb251cwEFB2FkZHJlc3MECG9sZEJvbnVzCQELdmFsdWVPckVsc2UCCQCaCAIFDmFjcmVzMkNvbnRyYWN0BQhib251c0tleQAAAwMJAGYCAAAFCmJvbnVzRGVsdGEJAGYCAAAJAGQCBQhvbGRCb251cwUKYm9udXNEZWx0YQcJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICDllvdSBoYXZlIG9ubHkgCQEKZml4ZWRQb2ludAIFCG9sZEJvbnVzAAQCHiUgYm9udXMsIGFuZCB0cmllZCB0byB1bnN0YWtlIAkBCmZpeGVkUG9pbnQCCQEBLQEFCmJvbnVzRGVsdGEABAIBJQQLJHQwNTc5NDU4OTMJAR5nZXRGYXJtaW5nUG93ZXJCeUFjcmVzQW5kQm9udXMCBQ5uZXdBY3Jlc0Ftb3VudAkAZAIFCG9sZEJvbnVzBQpib251c0RlbHRhBAxuZXdCb251c2VkRnAIBQskdDA1Nzk0NTg5MwJfMQQHaWdub3JlZAgFCyR0MDU3OTQ1ODkzAl8yBApvbGRUb3RhbEZwCQELdmFsdWVPckVsc2UCCQCfCAEFFHRvdGFsRmFybWluZ1Bvd2VyS2V5AAAEDGFjcmVzQWN0aW9ucwMJAAACBQNhbXQAAAUDbmlsCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlhbW91bnRLZXkFDm5ld0FjcmVzQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJhY3Jlc1N0YWtkVG90YWxLZXkJAGQCBQhvbGRUb3RhbAUDYW10BQNuaWwJAJQKAgkAzQgCCQDNCAIJAM0IAgkAzQgCBQxhY3Jlc0FjdGlvbnMJAQxJbnRlZ2VyRW50cnkCBQd0aW1lS2V5CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkBDEludGVnZXJFbnRyeQIFCXVzZXJGcEtleQUMbmV3Qm9udXNlZEZwCQEMSW50ZWdlckVudHJ5AgUUdG90YWxGYXJtaW5nUG93ZXJLZXkJAGUCCQBkAgUKb2xkVG90YWxGcAUMbmV3Qm9udXNlZEZwBQVvbGRGcAkBDEludGVnZXJFbnRyeQIFCGJvbnVzS2V5CQBkAgUIb2xkQm9udXMFCmJvbnVzRGVsdGEFCXdsZ1Jlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgELZ2V0V2xnUHJpY2UBFXVzZHRCYWxhbmNlQ29ycmVjdGlvbgQMaXNzdWVkQW1vdW50CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgULd2xnQ29udHJhY3QFD3dsZ0lzc3VlZEFtdEtleQIYV0xHT0xEIGlzIG5vdCBpc3N1ZWQgeWV0BAZ3bGdVc2QJAPAHAgULd2xnQ29udHJhY3QFC3VzZHRBc3NldElkBAlhY3JlczJVc2QJAGUCCQDwBwIFDmFjcmVzMkNvbnRyYWN0BQt1c2R0QXNzZXRJZAUVdXNkdEJhbGFuY2VDb3JyZWN0aW9uBA9pbnZlc3RGdW5kVG90YWwJAGQCCQDwBwIFEmludmVzdEZ1bmRDb250cmFjdAULdXNkdEFzc2V0SWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUSaW52ZXN0RnVuZENvbnRyYWN0BQ56Yklzc3VlZEFtdEtleQAABA10b3RhbEZ1bmRzVXNkCQBkAgkAZAIFCWFjcmVzMlVzZAUGd2xnVXNkBQ9pbnZlc3RGdW5kVG90YWwJAGsDBQ10b3RhbEZ1bmRzVXNkBQVNVUxUOAUMaXNzdWVkQW1vdW50ARFnZXRTd2FwTGltaXRBY3JlcwAEBndsZ1VzZAkA8AcCBQt3bGdDb250cmFjdAULdXNkdEFzc2V0SWQECWFjcmVzMlVzZAkA8AcCBQR0aGlzBQt1c2R0QXNzZXRJZAQPaW52ZXN0RnVuZFRvdGFsCQBkAgkA8AcCBRJpbnZlc3RGdW5kQ29udHJhY3QFC3VzZHRBc3NldElkCQELdmFsdWVPckVsc2UCCQCaCAIFEmludmVzdEZ1bmRDb250cmFjdAUOemJJc3N1ZWRBbXRLZXkAAAQMZGVmYXVsdExpbWl0CQBpAgkAZAIJAGQCBQlhY3JlczJVc2QFBndsZ1VzZAUPaW52ZXN0RnVuZFRvdGFsBRNPTkVfUEVSQ0VOVF9ESVZJU09SBA1sYXN0TGltaXRMZWZ0CQELdmFsdWVPckVsc2UCCQCfCAEFEGtleUxhc3RMaW1pdExlZnQFDGRlZmF1bHRMaW1pdAQIbGFzdFRpbWUJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUUa2V5TGFzdEFjcmVzU2VsbFRpbWUAAAQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQMY3VycmVudExpbWl0CQBkAgUNbGFzdExpbWl0TGVmdAkAawMFDGRlZmF1bHRMaW1pdAkAZQIFA25vdwUIbGFzdFRpbWUFCkRBWV9NSUxMSVMEDWxpbWl0TGVmdFVzZHQJAJcDAQkAzAgCBQxjdXJyZW50TGltaXQJAMwIAgUMZGVmYXVsdExpbWl0BQNuaWwJAJQKAgkBDEludGVnZXJFbnRyeQIFFGtleUxhc3RBY3Jlc1NlbGxUaW1lBQNub3cFDWxpbWl0TGVmdFVzZHQACWFya09yYWNsZQkBEUBleHRyTmF0aXZlKDEwNjIpAQIjM1BKZ1o2QUsxV1ZDcGRDbUVacGVzSG1hS3ZyUURkWEc1b2cACWluY3ViYXRvcgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQlhcmtPcmFjbGUCF3N0YXRpY19pbmN1YmF0b3JBZGRyZXNzAgAAB2JyZWVkZXIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUJYXJrT3JhY2xlAhVzdGF0aWNfYnJlZWRlckFkZHJlc3MCAAAPdHVydGxlSW5jdWJhdG9yCQELdmFsdWVPckVsc2UCCQCdCAIFCWFya09yYWNsZQIdc3RhdGljX3R1cnRsZUluY3ViYXRvckFkZHJlc3MCAAANdHVydGxlQnJlZWRlcgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQlhcmtPcmFjbGUCG3N0YXRpY190dXJ0bGVCcmVlZGVyQWRkcmVzcwIAAA9jYW5pbmVJbmN1YmF0b3IJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUJYXJrT3JhY2xlAh1zdGF0aWNfY2FuaW5lSW5jdWJhdG9yQWRkcmVzcwIAAA1jYW5pbmVCcmVlZGVyCQELdmFsdWVPckVsc2UCCQCdCAIFCWFya09yYWNsZQIbc3RhdGljX2NhbmluZUJyZWVkZXJBZGRyZXNzAgAAD2ZlbGluZUluY3ViYXRvcgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQlhcmtPcmFjbGUCHXN0YXRpY19mZWxpbmVJbmN1YmF0b3JBZGRyZXNzAgAADWZlbGluZUJyZWVkZXIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUJYXJrT3JhY2xlAhtzdGF0aWNfZmVsaW5lQnJlZWRlckFkZHJlc3MCAAANbXV0YW50QnJlZWRlcgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQlhcmtPcmFjbGUCHXN0YXRpY19tdXRhbnRJbmN1YmF0b3JBZGRyZXNzAgABD2lzQXJraW1hbElzc3VlZAEDbmZvBAZpc3N1ZXIJAKUIAQgFA25mbwZpc3N1ZXIDAwMDAwMDAwMDCQAAAgUFY2hhaW4BAVQJAAACBQZpc3N1ZXIFFW9sZFN0YWtpbmdDb250cmFjdFN0cgcGCQAAAgUGaXNzdWVyBQlpbmN1YmF0b3IGCQAAAgUGaXNzdWVyBQdicmVlZGVyBgkAAAIFBmlzc3VlcgUPdHVydGxlSW5jdWJhdG9yBgkAAAIFBmlzc3VlcgUNdHVydGxlQnJlZWRlcgYJAAACBQZpc3N1ZXIFD2NhbmluZUluY3ViYXRvcgYJAAACBQZpc3N1ZXIFDWNhbmluZUJyZWVkZXIGCQAAAgUGaXNzdWVyBQ9mZWxpbmVJbmN1YmF0b3IGCQAAAgUGaXNzdWVyBQ1mZWxpbmVCcmVlZGVyCAUDbmZvBG5hbWUDCQAAAgUGaXNzdWVyBQ1tdXRhbnRCcmVlZGVyCAUDbmZvC2Rlc2NyaXB0aW9uAgABEmJvbnVzQnlEZXNjcmlwdGlvbgEFZGVzY3IDCQEBIQEJAQhjb250YWlucwIFBWRlc2NyAhgiYm9udXNUeXBlIjogIkZhcm1Qb3dlciIJAAIBCQCsAgICFk5GVCBpcyBub3Qgc3VwcG9ydGVkOiAFBWRlc2NyBAhib251c1N0cgkAkQMCCQC8CQIJAJEDAgkAvAkCBQVkZXNjcgIIImJvbnVzIjoAAQIBLAAACQENcGFyc2VJbnRWYWx1ZQEJALACAgUIYm9udXNTdHIJAGQCCQELdmFsdWVPckVsc2UCCQC3CQIFCGJvbnVzU3RyAgEgAP///////////wEAAQEQc3Rha2VOZnRJbnRlcm5hbAYEYWRkcgphc3NldElkU3RyBmJvbnVzNgp1c2VyTnVtS2V5C3RvdGFsTnVtS2V5BWxpbWl0BAluZnROdW1iZXIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUKdXNlck51bUtleQAAAwkAZwIFCW5mdE51bWJlcgUFbGltaXQJAAIBCQCsAgIJAKwCAgISWW91IGNhbiBzdGFrZSBtYXggCQCkAwEFBWxpbWl0Ag0gb2Ygc3VjaCBORlRzBA0kdDAxMDQwNzEwNDgzCQEZc3Rha2VVbnN0YWtlQWNyZXNJbnRlcm5hbAMAAAUEYWRkcgUGYm9udXM2BAdhY3Rpb25zCAUNJHQwMTA0MDcxMDQ4MwJfMQQQd2xnQ2xhaW1lZEFtb3VudAgFDSR0MDEwNDA3MTA0ODMCXzIJAJQKAgkAzQgCCQDNCAIJAM0IAgUHYWN0aW9ucwkBDEludGVnZXJFbnRyeQIFCnVzZXJOdW1LZXkJAGQCBQluZnROdW1iZXIAAQkBDEludGVnZXJFbnRyeQIFC3RvdGFsTnVtS2V5CQBkAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQt0b3RhbE51bUtleQAAAAEJAQxJbnRlZ2VyRW50cnkCCQEea2V5U3Rha2VkVGltZUJ5QXNzZXRJZEFuZE93bmVyAgUKYXNzZXRJZFN0cgUEYWRkcggFCWxhc3RCbG9jawl0aW1lc3RhbXAFEHdsZ0NsYWltZWRBbW91bnQRAWkBCnNhdmVMYXN0VHgAAwkBASEBCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQt3bGdDb250cmFjdAUDbmlsCAUBaQZjYWxsZXIJAAIBAg1BY2Nlc3MgZGVuaWVkCQCUCgIJAQZwcm9sb2cBBQFpACoBaQENY29uc3RydWN0b3JWMQIJcmVzdDJBZGRyDm9sZEFjckNvbnRyYWN0AwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRUGVybWlzc2lvbiBkZW5pZWQEDm9sZEFjckNvbnRBZGRyCQERQGV4dHJOYXRpdmUoMTA2MikBBQ5vbGRBY3JDb250cmFjdAkAzAgCCQEMSW50ZWdlckVudHJ5AgUUYWNyZXNJc3N1ZWRBbW91bnRLZXkJARFAZXh0ck5hdGl2ZSgxMDUwKQIFDm9sZEFjckNvbnRBZGRyBRRhY3Jlc0lzc3VlZEFtb3VudEtleQkAzAgCCQELQmluYXJ5RW50cnkCBQ9hY3Jlc0Fzc2V0SWRLZXkJARFAZXh0ck5hdGl2ZSgxMDUyKQIFDm9sZEFjckNvbnRBZGRyBQ9hY3Jlc0Fzc2V0SWRLZXkJAMwIAgkBC1N0cmluZ0VudHJ5AgkBD2tleVJlc3QyQWRkcmVzcwAFCXJlc3QyQWRkcgkAzAgCCQELU3RyaW5nRW50cnkCBRNvbGRBY3Jlc0NvbnRyYWN0S2V5BQ5vbGRBY3JDb250cmFjdAUDbmlsAWkBCnNldEJsb2NrZWQBCWlzQmxvY2tlZAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEXBlcm1pc3Npb24gZGVuaWVkCQDMCAIJAQxCb29sZWFuRW50cnkCCQEKa2V5QmxvY2tlZAAFCWlzQmxvY2tlZAUDbmlsAWkBDHVuc3Rha2VBY3JlcwEGYW1vdW50BA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAGcCAAAFBmFtb3VudAkAAgECGUFtb3VudCBzaG91bGQgYmUgcG9zaXRpdmUEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEDmFyYlJlbGVhc2VUaW1lCQBkAgkBC3ZhbHVlT3JFbHNlAgkAmggCBQt3bGdDb250cmFjdAkBGWtleUxhc3RXbGdUcmFkZVRpbWVCeVVzZXIBBQdhZGRyZXNzAAAFDmFyYml0cmFnZURlbGF5AwkAZgIFDmFyYlJlbGVhc2VUaW1lCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAAgEJAKwCAgItWW91IHRyYWRlZCBzb21lIFdMR09MRCwgY2Fubm90IHVuc3Rha2UgdW50aWwgCQCkAwEFDmFyYlJlbGVhc2VUaW1lBA0kdDAxMjA1NzEyMTM3CQEZc3Rha2VVbnN0YWtlQWNyZXNJbnRlcm5hbAMJAQEtAQUGYW1vdW50BQdhZGRyZXNzAAAEB2FjdGlvbnMIBQ0kdDAxMjA1NzEyMTM3Al8xBBB3bGdDbGFpbWVkQW1vdW50CAUNJHQwMTIwNTcxMjEzNwJfMgkAlAoCCQDOCAIJAM0IAgUHYWN0aW9ucwkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQZhbW91bnQFDGFjcmVzQXNzZXRJZAUNcHJvbG9nQWN0aW9ucwUQd2xnQ2xhaW1lZEFtb3VudAFpAQpzdGFrZUFjcmVzAAQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQDAwkBASEBCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBgkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkBQxhY3Jlc0Fzc2V0SWQJAAIBAhRBQ1JFUyBwYXltZW50cyBvbmx5IQQNJHQwMTI1ODgxMjY2NAkBGXN0YWtlVW5zdGFrZUFjcmVzSW50ZXJuYWwDBQNhbXQFB2FkZHJlc3MAAAQHYWN0aW9ucwgFDSR0MDEyNTg4MTI2NjQCXzEEEHdsZ0NsYWltZWRBbW91bnQIBQ0kdDAxMjU4ODEyNjY0Al8yCQCUCgIJAM4IAgUHYWN0aW9ucwUNcHJvbG9nQWN0aW9ucwUQd2xnQ2xhaW1lZEFtb3VudAFpAQhidXlBY3JlcwAEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAECnVzZHRBbW91bnQIBQNwbXQGYW1vdW50AwMJAQEhAQkBCWlzRGVmaW5lZAEIBQNwbXQHYXNzZXRJZAYJAQIhPQIJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhNVU0RUIHBheW1lbnRzIG9ubHkhAwkAZgIFBU1VTFQ2BQp1c2R0QW1vdW50CQACAQkArAICCQCsAgICFk1pbiBwYXltZW50IHNob3VsZCBiZSAJAQpmaXhlZFBvaW50AgUFTVVMVDYABgIFIFVTRFQEC2FjcmVzQW1vdW50CQBoAgUKdXNkdEFtb3VudAUVVVNEVDJBQ1JFU19NVUxUSVBMSUVSBAl3bGdBbW91bnQJAGsDBQp1c2R0QW1vdW50BQVNVUxUOAkBC2dldFdsZ1ByaWNlAQUKdXNkdEFtb3VudAQPb2xkQWNyZXNBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBCQERQGV4dHJOYXRpdmUoMTA1OCkBBRNvbGRBY3Jlc0NvbnRyYWN0S2V5BANyZXEJAPwHBAUPb2xkQWNyZXNBZGRyZXNzAhRyZXF1ZXN0QWNyZXNDYWxsYmFjawkAzAgCBQthY3Jlc0Ftb3VudAUDbmlsBQNuaWwDCQAAAgUDcmVxBQNyZXEECXdsZ1JlbWFpbgkBBWFzSW50AQkA/AcEBQt3bGdDb250cmFjdAIKYnVybldsZ29sZAkAzAgCBQl3bGdBbW91bnQFA25pbAUDbmlsCQCUCgIJAM4IAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFC2FjcmVzQW1vdW50BQxhY3Jlc0Fzc2V0SWQFA25pbAUNcHJvbG9nQWN0aW9ucwUJd2xnUmVtYWluCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEGJ1eUFjcmVzUkVBRE9OTFkBCnVzZHRBbW91bnQEC2FjcmVzQW1vdW50CQBoAgUKdXNkdEFtb3VudAUVVVNEVDJBQ1JFU19NVUxUSVBMSUVSBAl3bGdUb0J1cm4JAGsDBQp1c2R0QW1vdW50BQVNVUxUOAkBC2dldFdsZ1ByaWNlAQUKdXNkdEFtb3VudAkAlAoCBQNuaWwJAMwIAgULYWNyZXNBbW91bnQJAMwIAgUFTVVMVDYJAMwIAgULYWNyZXNBbW91bnQJAMwIAgUJd2xnVG9CdXJuBQNuaWwBaQEJc2VsbEFjcmVzAAQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAiJleGFjdGx5IDEgcGF5bWVudCBtdXN0IGJlIGF0dGFjaGVkBANwbXQJAJEDAggFAWkIcGF5bWVudHMAAAQLYWNyZXNBbW91bnQIBQNwbXQGYW1vdW50AwMJAQEhAQkBCWlzRGVmaW5lZAEIBQNwbXQHYXNzZXRJZAYJAQIhPQIJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAUMYWNyZXNBc3NldElkCQACAQIUQUNSRVMgcGF5bWVudHMgb25seSEDCQBmAgUFTVVMVDcFC2FjcmVzQW1vdW50CQACAQkArAICCQCsAgICFk1pbiBwYXltZW50IHNob3VsZCBiZSAJAQpmaXhlZFBvaW50AgUFTVVMVDcACAIGIEFDUkVTBARhZGRyCQClCAEIBQFpBmNhbGxlcgQNJHQwMTQ1MjExNDU2OQkBEWdldFN3YXBMaW1pdEFjcmVzAAQLbGltaXRBY3Rpb24IBQ0kdDAxNDUyMTE0NTY5Al8xBAdtYXhVc2R0CAUNJHQwMTQ1MjExNDU2OQJfMgQIbWF4QWNyZXMJAGgCBQdtYXhVc2R0BRVVU0RUMkFDUkVTX01VTFRJUExJRVIDCQBmAgULYWNyZXNBbW91bnQFCG1heEFjcmVzCQACAQkArAICCQCsAgICEVlvdSBjYW4gc2VsbCBtYXggCQEKZml4ZWRQb2ludAIFCG1heEFjcmVzAAgCBiBBQ1JFUwQKdXNkdEFtb3VudAkAaQIJAGkCBQthY3Jlc0Ftb3VudAUVVVNEVDJBQ1JFU19NVUxUSVBMSUVSAAIJAJQKAgkAzggCCQDMCAIFC2xpbWl0QWN0aW9uCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRBrZXlMYXN0TGltaXRMZWZ0CQBlAgUHbWF4VXNkdAUKdXNkdEFtb3VudAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFCnVzZHRBbW91bnQFC3VzZHRBc3NldElkBQNuaWwFDXByb2xvZ0FjdGlvbnMFCnVzZHRBbW91bnQBaQERc2VsbEFjcmVzUkVBRE9OTFkCB2FkZHJlc3MLYWNyZXNBbW91bnQEDSR0MDE1MDY1MTUxMTMJARFnZXRTd2FwTGltaXRBY3JlcwAEC2xpbWl0QWN0aW9uCAUNJHQwMTUwNjUxNTExMwJfMQQHbWF4VXNkdAgFDSR0MDE1MDY1MTUxMTMCXzIECnVzZHRBbW91bnQJAGkCCQBpAgULYWNyZXNBbW91bnQFFVVTRFQyQUNSRVNfTVVMVElQTElFUgACCQCUCgIFA25pbAkAzAgCBQp1c2R0QW1vdW50CQDMCAIFBU1VTFQ3CQDMCAIJAGgCBQdtYXhVc2R0BRVVU0RUMkFDUkVTX01VTFRJUExJRVIJAMwIAgAABQNuaWwBaQEQY29udmVydE9sZFN0YWtlcwADCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhRUZW1wb3JhcmlseSBkaXNhYmxlZAQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQPb2xkQWNyZXNBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBCQERQGV4dHJOYXRpdmUoMTA1OCkBBRNvbGRBY3Jlc0NvbnRyYWN0S2V5BAZhbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPb2xkQWNyZXNBZGRyZXNzCQEXa2V5QWNyZXNTdGFrZWRBbXRCeVVzZXIBBQdhZGRyZXNzAAAECWdvdEFjcmVzMAMJAGYCBQZhbW91bnQAAAkBDGFzVHVwbGUySW50cwEJAPwHBAUPb2xkQWNyZXNBZGRyZXNzAhR1bnN0YWtlQWNyZXNDYWxsYmFjawkAzAgCBQZhbW91bnQJAMwIAgUHYWRkcmVzcwUDbmlsBQNuaWwJAJQKAgAAAAAEEW9sZFN0YWtpbmdBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBBRVvbGRTdGFraW5nQ29udHJhY3RTdHIECGxhbmRzU3RyCQCdCAIFEW9sZFN0YWtpbmdBZGRyZXNzCQEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQUHYWRkcmVzcwQLbGFuZHNSZXN1bHQDCQEJaXNEZWZpbmVkAQUIbGFuZHNTdHIEBWxhbmRzCQC9CQIJAQV2YWx1ZQEFCGxhbmRzU3RyAgFfCgEHb25lTGFuZAIDYWNjC2xhbmRBc3NldElkAwkAAAIFC2xhbmRBc3NldElkAgAJAAIBAhdsYW5kQXNzZXRJZCBpcyByZXF1aXJlZAQBcgkBDGFzVHVwbGU1SW50cwEJAPwHBAURb2xkU3Rha2luZ0FkZHJlc3MCE3Vuc3Rha2VMYW5kQ2FsbGJhY2sJAMwIAgULbGFuZEFzc2V0SWQJAMwIAgUHYWRkcmVzcwUDbmlsBQNuaWwJAJYKBAkAZAIIBQNhY2MCXzEIBQFyAl8xCQBkAggFA2FjYwJfMggFAXICXzIJAGQCCAUDYWNjAl8zCAUBcgJfMwkAZAIIBQNhY2MCXzQIBQFyAl80BAJycgoAAiRsBQVsYW5kcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJYKBAAAAAAAAAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQdvbmVMYW5kAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhVMaXN0IHNpemUgZXhjZWVkcyAxMDAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAOgA7ADwAPQA+AD8AQABBAEIAQwBEAEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoAWwBcAF0AXgBfAGAAYQBiAGMAZAQIZmluYWxpemUJAPwHBAURb2xkU3Rha2luZ0FkZHJlc3MCHHVuc3Rha2VMYW5kc0ZpbmFsaXplQ2FsbGJhY2sJAMwIAgUHYWRkcmVzcwUDbmlsBQNuaWwDCQAAAgUIZmluYWxpemUFCGZpbmFsaXplBANyZXEJAPwHBAUPb2xkQWNyZXNBZGRyZXNzAhRyZXF1ZXN0QWNyZXNDYWxsYmFjawkAzAgCCQBkAgkAZAIJAGQCCAUCcnICXzEIBQJycgJfMggFAnJyAl8zCAUCcnICXzQFA25pbAUDbmlsAwkAAAIFA3JlcQUDcmVxBA0kdDAxNjk4MjE3MDYyCQEQaXNzdWVORlRpbnRlcm5hbAIFFUlkeER0eDNQZXJjQ29udmVyc2lvbggFAWkGY2FsbGVyBApuZnRBY3Rpb25zCAUNJHQwMTY5ODIxNzA2MgJfMQQKbmZ0QXNzZXRJZAgFDSR0MDE2OTgyMTcwNjICXzIJAJcKBQgFAnJyAl8xCAUCcnICXzIIBQJycgJfMwgFAnJyAl80BQpuZnRBY3Rpb25zCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQCXCgUAAAAAAAAAAAUDbmlsBAtkdWNrQXNzZXRJZAkBC3ZhbHVlT3JFbHNlAgkAnQgCBRFvbGRTdGFraW5nQWRkcmVzcwkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUHYWRkcmVzcwIABApkdWNrUmVzdWx0AwkBAiE9AgULZHVja0Fzc2V0SWQCAAkBDGFzVHVwbGUzSW50cwEJAPwHBAURb2xkU3Rha2luZ0FkZHJlc3MCE3Vuc3Rha2VEdWNrQ2FsbGJhY2sJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUHYWRkcmVzcwUDbmlsBQNuaWwJAJUKAwAAAAAAAAQBeAkBGXN0YWtlVW5zdGFrZUFjcmVzSW50ZXJuYWwDCQBkAgkAZAIJAGQCCQBkAgkAZAIJAGQCCQBkAggFCWdvdEFjcmVzMAJfMQgFC2xhbmRzUmVzdWx0Al8xCAULbGFuZHNSZXN1bHQCXzIIBQtsYW5kc1Jlc3VsdAJfMwgFC2xhbmRzUmVzdWx0Al80CAUKZHVja1Jlc3VsdAJfMQgFCmR1Y2tSZXN1bHQCXzIIBQpkdWNrUmVzdWx0Al8zBQdhZGRyZXNzAAAJAJQKAgkAzggCCAULbGFuZHNSZXN1bHQCXzUIBQF4Al8xCAUBeAJfMgFpARR1bnN0YWtlTGFuZHNSRUFET05MWQEHYWRkcmVzcwQRb2xkU3Rha2luZ0FkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDYyKQEFFW9sZFN0YWtpbmdDb250cmFjdFN0cgQIbGFuZHNTdHIJAJ0IAgURb2xkU3Rha2luZ0FkZHJlc3MJARVrZXlTdGFrZWRMYW5kc0J5T3duZXIBBQdhZGRyZXNzBAtsYW5kc1Jlc3VsdAMJAQlpc0RlZmluZWQBBQhsYW5kc1N0cgQFbGFuZHMJAL0JAgkBBXZhbHVlAQUIbGFuZHNTdHICAV8KAQdvbmVMYW5kAgNhY2MLbGFuZEFzc2V0SWQDCQAAAgULbGFuZEFzc2V0SWQCAAkAAgECF2xhbmRBc3NldElkIGlzIHJlcXVpcmVkBAFyCQEMYXNUdXBsZTRJbnRzAQkA/AcEBRFvbGRTdGFraW5nQWRkcmVzcwITdW5zdGFrZUxhbmRSRUFET05MWQkAzAgCBQtsYW5kQXNzZXRJZAkAzAgCBQdhZGRyZXNzBQNuaWwFA25pbAkAlgoECQBkAggFA2FjYwJfMQgFAXICXzEJAGQCCAUDYWNjAl8yCAUBcgJfMgkAZAIIBQNhY2MCXzMIBQFyAl8zCQBkAggFA2FjYwJfNAgFAXICXzQKAAIkbAUFbGFuZHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCWCgQAAAAAAAAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEHb25lTGFuZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIVTGlzdCBzaXplIGV4Y2VlZHMgMTAwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0APgA/AEAAQQBCAEMARABFAEYARwBIAEkASgBLAEwATQBOAE8AUABRAFIAUwBUAFUAVgBXAFgAWQBaAFsAXABdAF4AXwBgAGEAYgBjAGQJAJYKBAAAAAAAAAAACQCUCgIFA25pbAULbGFuZHNSZXN1bHQBaQESc3Rha2VBY3Jlc0NhbGxiYWNrAQRhZGRyAwkBAiE9AggFAWkGY2FsbGVyCQERQGV4dHJOYXRpdmUoMTA2MikBBRVvbGRTdGFraW5nQ29udHJhY3RTdHIJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAkBGXN0YWtlVW5zdGFrZUFjcmVzSW50ZXJuYWwDCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAUEYWRkcgAAAWkBGnNpbXVsYXRlU3Rha2VBY3Jlc1JFQURPTkxZAgdhZGRyZXNzC2FkZGVkQW1vdW50BAlhbW91bnRLZXkJARdrZXlBY3Jlc1N0YWtlZEFtdEJ5VXNlcgEFB2FkZHJlc3MEDm5ld0FjcmVzQW1vdW50CQBkAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlhbW91bnRLZXkAAAULYWRkZWRBbW91bnQECG9sZFRvdGFsCQELdmFsdWVPckVsc2UCCQCfCAEFEmFjcmVzU3Rha2RUb3RhbEtleQAABAl1c2VyRnBLZXkJARVrZXlGYXJtaW5nUG93ZXJCeVVzZXIBBQdhZGRyZXNzBAVvbGRGcAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQl1c2VyRnBLZXkAAAQJdXNlckJvbnVzCQELdmFsdWVPckVsc2UCCQCaCAIFDmFjcmVzMkNvbnRyYWN0CQEQa2V5VXNlckZ1bGxCb251cwEFB2FkZHJlc3MAAAQNJHQwMTkyMjcxOTMxNAkBHmdldEZhcm1pbmdQb3dlckJ5QWNyZXNBbmRCb251cwIFDm5ld0FjcmVzQW1vdW50BQl1c2VyQm9udXMEDG5ld0JvbnVzZWRGcAgFDSR0MDE5MjI3MTkzMTQCXzEEB2lnbm9yZWQIBQ0kdDAxOTIyNzE5MzE0Al8yBApvbGRUb3RhbEZwCQELdmFsdWVPckVsc2UCCQCfCAEFFHRvdGFsRmFybWluZ1Bvd2VyS2V5AAAECm5ld1RvdGFsRnAJAGUCCQBkAgUKb2xkVG90YWxGcAUMbmV3Qm9udXNlZEZwBQVvbGRGcAkAlAoCBQNuaWwJAMwIAgUFb2xkRnAJAMwIAgUMbmV3Qm9udXNlZEZwCQDMCAIFCm9sZFRvdGFsRnAJAMwIAgUKbmV3VG90YWxGcAUDbmlsAWkBCGlzc3VlTkZUAgpmb3JBZGRyZXNzCG5mdEluZGV4AwkBAiE9AggFAWkGY2FsbGVyBQt3bGdDb250cmFjdAkAAgECEVBlcm1pc3Npb24gZGVuaWVkCQEQaXNzdWVORlRpbnRlcm5hbAIFCG5mdEluZGV4CQERQGV4dHJOYXRpdmUoMTA2MikBBQpmb3JBZGRyZXNzAWkBCHN0YWtlTkZUAAQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQNwbXQGYW1vdW50AAEJAAIBAidORlQgdG9rZW4gc2hvdWxkIGJlIGF0dGFjaGVkIGFzIHBheW1lbnQEB2Fzc2V0SWQJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQUHYXNzZXRJZAQKYXNzZXRJZFN0cgkA2AQBBQdhc3NldElkBARhZGRyCQClCAEIBQFpBmNhbGxlcgQHbmZ0c0tleQkBFGtleVN0YWtlZE5GVHNCeU93bmVyAQUEYWRkcgQHbmZ0c1N0cgkAoggBBQduZnRzS2V5BARuZnRzAwkBCWlzRGVmaW5lZAEFB25mdHNTdHIJALwJAgkBBXZhbHVlAQUHbmZ0c1N0cgIBXwUDbmlsAwkBD2NvbnRhaW5zRWxlbWVudAIFBG5mdHMFCmFzc2V0SWRTdHIJAAIBCQCsAgICIVlvdXIgc3Rha2VkIE5GVHMgYWxyZWFkeSBjb250YWluIAUKYXNzZXRJZFN0cgMJAGcCCQCQAwEFBG5mdHMFF01BWF9ORlRTX1NUQUtFRF9CWV9VU0VSCQACAQkArAICCQCsAgICGVlvdXIgYWxyZWFkeSBzdGFrZWQgbWF4ICgJAKQDAQUXTUFYX05GVFNfU1RBS0VEX0JZX1VTRVICBikgTkZUcwQKbGlzdEFjdGlvbgkBC1N0cmluZ0VudHJ5AgUHbmZ0c0tleQkAugkCCQDNCAIFBG5mdHMFCmFzc2V0SWRTdHICAV8DCQAAAggFBWFzc2V0Bmlzc3VlcgUEdGhpcwQNJHQwMjA3MzEyMDkyMQkBEHN0YWtlTmZ0SW50ZXJuYWwGBQRhZGRyBQphc3NldElkU3RyCQBoAgkBEmJvbnVzQnlEZXNjcmlwdGlvbgEJAQV2YWx1ZQEIBQVhc3NldAtkZXNjcmlwdGlvbgCQTgkBEmtleVVzZXJXbE5mdE51bWJlcgEFBGFkZHIFE2tleVdsTmZ0VG90YWxTdGFrZWQFC01BWF9XTF9ORlRTBAdhY3Rpb25zCAUNJHQwMjA3MzEyMDkyMQJfMQQQd2xnQ2xhaW1lZEFtb3VudAgFDSR0MDIwNzMxMjA5MjECXzIJAJQKAgkAzQgCCQDOCAIFDXByb2xvZ0FjdGlvbnMFB2FjdGlvbnMFCmxpc3RBY3Rpb24FEHdsZ0NsYWltZWRBbW91bnQDCQAAAgkBD2lzQXJraW1hbElzc3VlZAEFBWFzc2V0AgAJAAIBAjRPbmx5IFdhdmVzTGFuZHMgYW5kIEFya2ltYWxzIE5GVCB0b2tlbnMgYXJlIGFjY2VwdGVkBA0kdDAyMTEwMjIxMjUzCQEQc3Rha2VOZnRJbnRlcm5hbAYFBGFkZHIFCmFzc2V0SWRTdHIFDUFSS19ORlRfQk9OVVMJARNrZXlVc2VyQXJrTmZ0TnVtYmVyAQUEYWRkcgUUa2V5QXJrTmZ0VG90YWxTdGFrZWQFDE1BWF9BUktfTkZUUwQHYWN0aW9ucwgFDSR0MDIxMTAyMjEyNTMCXzEEEHdsZ0NsYWltZWRBbW91bnQIBQ0kdDAyMTEwMjIxMjUzAl8yCQCUCgIJAM0IAgkAzggCBQ1wcm9sb2dBY3Rpb25zBQdhY3Rpb25zBQpsaXN0QWN0aW9uBRB3bGdDbGFpbWVkQW1vdW50AWkBCnVuc3Rha2VORlQBCmFzc2V0SWRTdHIEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEB2Fzc2V0SWQJANkEAQUKYXNzZXRJZFN0cgQEYWRkcgkApQgBCAUBaQZjYWxsZXIEBWFzc2V0CQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQEB3RpbWVLZXkJAR5rZXlTdGFrZWRUaW1lQnlBc3NldElkQW5kT3duZXICBQphc3NldElkU3RyBQRhZGRyAwkBASEBCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5CQACAQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAhUgaXMgbm90IHN0YWtlZCBieSB5b3UEB25mdHNLZXkJARRrZXlTdGFrZWRORlRzQnlPd25lcgEFBGFkZHIEBG5mdHMJALwJAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQduZnRzS2V5AgACAV8EA2lkeAkAzwgCBQRuZnRzBQphc3NldElkU3RyAwkBASEBCQEJaXNEZWZpbmVkAQUDaWR4CQACAQkArAICAh9Zb3VyIHN0YWtlZCBORlRzIGRvbid0IGNvbnRhaW4gBQphc3NldElkU3RyBApsaXN0QWN0aW9uAwkAZgIJAJADAQUEbmZ0cwABCQELU3RyaW5nRW50cnkCBQduZnRzS2V5CQC6CQIJANEIAgUEbmZ0cwkBBXZhbHVlAQUDaWR4AgFfCQELRGVsZXRlRW50cnkBBQduZnRzS2V5BARpc1dMCQAAAggFBWFzc2V0Bmlzc3VlcgUEdGhpcwMFBGlzV0wEC3dsTmZ0TnVtYmVyCQELdmFsdWVPckVsc2UCCQCfCAEJARJrZXlVc2VyV2xOZnROdW1iZXIBBQRhZGRyAAAECGJvbnVzVmFsCQBoAgkBEmJvbnVzQnlEZXNjcmlwdGlvbgEJAQV2YWx1ZQEIBQVhc3NldAtkZXNjcmlwdGlvbgCQTgQNJHQwMjI0MTgyMjQ5NwkBGXN0YWtlVW5zdGFrZUFjcmVzSW50ZXJuYWwDAAAFBGFkZHIJAQEtAQUIYm9udXNWYWwEB2FjdGlvbnMIBQ0kdDAyMjQxODIyNDk3Al8xBBB3bGdDbGFpbWVkQW1vdW50CAUNJHQwMjI0MTgyMjQ5NwJfMgkAlAoCCQDOCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCBQdhY3Rpb25zBQpsaXN0QWN0aW9uCQEMSW50ZWdlckVudHJ5AgkBEmtleVVzZXJXbE5mdE51bWJlcgEFBGFkZHIJAGUCBQt3bE5mdE51bWJlcgABCQEMSW50ZWdlckVudHJ5AgUTa2V5V2xOZnRUb3RhbFN0YWtlZAkAlgMBCQDMCAIAAAkAzAgCCQBlAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBRNrZXlXbE5mdFRvdGFsU3Rha2VkAAAAAQUDbmlsCQELRGVsZXRlRW50cnkBCQEea2V5U3Rha2VkVGltZUJ5QXNzZXRJZEFuZE93bmVyAgkA2AQBBQdhc3NldElkBQRhZGRyCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQUHYXNzZXRJZAUNcHJvbG9nQWN0aW9ucwUQd2xnQ2xhaW1lZEFtb3VudAQLYXJraW1hbE5hbWUJAQ9pc0Fya2ltYWxJc3N1ZWQBBQVhc3NldAMJAAACBQthcmtpbWFsTmFtZQIACQACAQI0T25seSBXYXZlc0xhbmRzIGFuZCBBcmtpbWFscyBORlQgdG9rZW5zIGFyZSBhY2NlcHRlZAQMYXJrTmZ0TnVtYmVyCQELdmFsdWVPckVsc2UCCQCfCAEJARNrZXlVc2VyQXJrTmZ0TnVtYmVyAQUEYWRkcgAABA0kdDAyMzE1NzIzMjQxCQEZc3Rha2VVbnN0YWtlQWNyZXNJbnRlcm5hbAMAAAUEYWRkcgkBAS0BBQ1BUktfTkZUX0JPTlVTBAdhY3Rpb25zCAUNJHQwMjMxNTcyMzI0MQJfMQQQd2xnQ2xhaW1lZEFtb3VudAgFDSR0MDIzMTU3MjMyNDECXzIJAJQKAgkAzggCCQDNCAIJAM0IAgkAzQgCCQDNCAIFB2FjdGlvbnMFCmxpc3RBY3Rpb24JAQxJbnRlZ2VyRW50cnkCCQETa2V5VXNlckFya05mdE51bWJlcgEFBGFkZHIJAGUCBQxhcmtOZnROdW1iZXIAAQkBC0RlbGV0ZUVudHJ5AQkBHmtleVN0YWtlZFRpbWVCeUFzc2V0SWRBbmRPd25lcgIJANgEAQUHYXNzZXRJZAUEYWRkcgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEFB2Fzc2V0SWQFDXByb2xvZ0FjdGlvbnMFEHdsZ0NsYWltZWRBbW91bnQBaQEMZXhjaGFuZ2VORlRzAAQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQBmAgADCQCQAwEIBQFpCHBheW1lbnRzCQACAQInTWluIG9uZSBVU0RUIGFuZCAyIE5GVCBwYXltZW50cyBhbGxvd2VkAwkAZgIJAJADAQgFAWkIcGF5bWVudHMABgkAAgECJ01heCBvbmUgVVNEVCBhbmQgNSBORlQgcGF5bWVudHMgYWxsb3dlZAQEYWRkcgkApQgBCAUBaQZjYWxsZXIKAQVhZGRVcAIDYWNjA3BtdAQHYXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCAUDcG10B2Fzc2V0SWQCGldBVkVTIHBheW1lbnRzIG5vdCBhbGxvd2VkAwkAAAIFB2Fzc2V0SWQFC3VzZHRBc3NldElkCQCVCgMJAGQCCAUDYWNjAl8xCAUDcG10BmFtb3VudAgFA2FjYwJfMggFA2FjYwJfMwQFYXNzZXQJAQV2YWx1ZQEJAOwHAQUHYXNzZXRJZAMJAQIhPQIIBQVhc3NldAZpc3N1ZXIFBHRoaXMJAAIBAhtPbmx5IFdMLWlzc3VlZCBORlRzIGFsbG93ZWQECWJvbnVzUGVyYwkBEmJvbnVzQnlEZXNjcmlwdGlvbgEJAQV2YWx1ZQEIBQVhc3NldAtkZXNjcmlwdGlvbgkAlQoDCAUDYWNjAl8xCQBkAggFA2FjYwJfMgUJYm9udXNQZXJjCQDNCAIIBQNhY2MCXzMJAQRCdXJuAgUHYXNzZXRJZAABBA0kdDAyNDM4OTI0NDY4CgACJGwIBQFpCHBheW1lbnRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlQoDAAAAAAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQVhZGRVcAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgQHdXNkdEZlZQgFDSR0MDI0Mzg5MjQ0NjgCXzEECnRvdGFsQm9udXMIBQ0kdDAyNDM4OTI0NDY4Al8yBAtidXJuQWN0aW9ucwgFDSR0MDI0Mzg5MjQ0NjgCXzMECG5mdEluZGV4AwkAAAIFCnRvdGFsQm9udXMAAwACAwkAAAIFCnRvdGFsQm9udXMABQADAwkAAAIFCnRvdGFsQm9udXMACgAECQACAQIrT25seSBib251c2VzIG9mIDMlLCA1JSBvciAxMCUgYXJlIHN1cHBvcnRlZAQGY2hhbmdlCQBlAgUHdXNkdEZlZQkAaAIFCnRvdGFsQm9udXMFBU1VTFQ2AwkAZgIAAAUGY2hhbmdlCQACAQkArAICCQCsAgICE1lvdSBuZWVkIHRvIGF0dGFjaCAJAKQDAQUKdG90YWxCb251cwIMIFVTRFQgYXMgZmVlBA1jaGFuZ2VBY3Rpb25zAwkAZgIFBmNoYW5nZQAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUGY2hhbmdlBQt1c2R0QXNzZXRJZAUDbmlsBQNuaWwEDSR0MDI0OTI1MjQ5OTcJARBpc3N1ZU5GVGludGVybmFsAgUIbmZ0SW5kZXgIBQFpBmNhbGxlcgQPaXNzdWVOZnRBY3Rpb25zCAUNJHQwMjQ5MjUyNDk5NwJfMQQKbmZ0QXNzZXRJZAgFDSR0MDI0OTI1MjQ5OTcCXzIEBmJ1cm5lZAkAkAMBBQtidXJuQWN0aW9ucwQSYnVybkNvdW50ZXJBY3Rpb25zAwkAAAIFBmJ1cm5lZAAABQNuaWwJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtleU5mdFRvdGFsQnVybmVkCQBkAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBRFrZXlOZnRUb3RhbEJ1cm5lZAAABQZidXJuZWQFA25pbAkAlAoCCQDOCAIJAM4IAgkAzggCCQDOCAIFD2lzc3VlTmZ0QWN0aW9ucwULYnVybkFjdGlvbnMFEmJ1cm5Db3VudGVyQWN0aW9ucwUNcHJvbG9nQWN0aW9ucwUNY2hhbmdlQWN0aW9ucwUKbmZ0QXNzZXRJZADAiP8T", "height": 3390590, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 3eBv7G3dZH3x5CCrig5BdUvVBSBWAX6YLpDWb1H9tHEf Next: A8VGKJakrnEL9esjq6YUKBHKw6ojsKmQD8wDjW83XPtL Diff:
OldNewDifferences
222222
223223 let ax = "WlNftTotalStaked"
224224
225-func ay (S) = ("nftNumberByAssetId_" + S)
225+let ay = "ArkNftTotalStaked"
226+
227+func az (S) = ("nftNumberByAssetId_" + S)
226228
227229
228-func az (I) = ("userWlNftNumber_" + I)
230+func aA (I) = ("userWlNftNumber_" + I)
229231
230232
231-func aA (I) = ("userArkNftNumber_" + I)
233+func aB (I) = ("userArkNftNumber_" + I)
232234
233235
234-func aB (I) = ("userFullBonus_" + I)
236+func aC (I) = ("userFullBonus_" + I)
235237
236238
237-let aC = [0, 10, 20, 40, 80, 150, 250, 400, 700, 1000]
239+let aD = [0, 10, 20, 40, 80, 150, 250, 400, 700, 1000]
238240
239-func aD (aE) = {
240- let aF = ((aE + 99999999) / aj)
241- func aG (aH,aI) = if ((aI >= aF))
242- then aH
243- else (aH + 1)
241+func aE (aF) = {
242+ let aG = ((aF + 99999999) / aj)
243+ func aH (aI,aJ) = if ((aJ >= aG))
244+ then aI
245+ else (aI + 1)
244246
245- let aJ = aC
246- let aK = size(aJ)
247- let aL = 0
248- func aM (aN,aO) = if ((aO >= aK))
249- then aN
250- else aG(aN, aJ[aO])
247+ let aK = aD
248+ let aL = size(aK)
249+ let aM = 0
250+ func aN (aO,aP) = if ((aP >= aL))
251+ then aO
252+ else aH(aO, aK[aP])
251253
252- func aP (aN,aO) = if ((aO >= aK))
253- then aN
254+ func aQ (aO,aP) = if ((aP >= aL))
255+ then aO
254256 else throw("List size exceeds 10")
255257
256- aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
258+ aQ(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aM, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
257259 }
258260
259261
260-func aQ (aE) = ((aE * 20) * (aD(aE) + 4))
262+func aR (aF) = ((aF * 20) * (aE(aF) + 4))
261263
262264
263-func aR (aE,aS) = {
264- let aT = aQ(aE)
265- $Tuple2(fraction(aT, (ai + aS), ai), aT)
265+func aS (aF,aT) = {
266+ let aU = aR(aF)
267+ $Tuple2(fraction(aU, (ai + aT), ai), aU)
266268 }
267269
268270
269-func aU (I) = ("lastArbTimeUser_" + I)
271+func aV (I) = ("lastArbTimeUser_" + I)
270272
271273
272-let aV = "lastAcresSellTime"
274+let aW = "lastAcresSellTime"
273275
274-let aW = "lastLimitLeft"
275-
276-let aX = [", \"collection\": \"Digging tools\", \"name\": \"Gold shovel\", \"description\": \"Reward for early birds\", \"rare\": \"Promo\", \"bonus\": 3, \"bonusType\": \"FarmPower\"}", ", \"collection\": \"Digging tools\", \"name\": \"Pickaxe\", \"description\": \"Increases FarmPower\", \"rare\": \"Common\", \"bonus\": 1, \"bonusType\": \"FarmPower\"}", ", \"collection\": \"Digging tools\", \"name\": \"Pickaxe\", \"description\": \"Increases FarmPower\", \"rare\": \"Common\", \"bonus\": 3, \"bonusType\": \"FarmPower\"}", ", \"collection\": \"Digging tools\", \"name\": \"Pickaxe\", \"description\": \"Increases FarmPower\", \"rare\": \"Common\", \"bonus\": 5, \"bonusType\": \"FarmPower\"}", ", \"collection\": \"Digging tools\", \"name\": \"Pickaxe\", \"description\": \"Increases FarmPower\", \"rare\": \"Common\", \"bonus\": 10, \"bonusType\": \"FarmPower\"}"]
276+let aX = "lastLimitLeft"
277277
278278 let aY = ["SHOVEL-P3", "PICKAXE-C1", "PICKAXE-C3", "PICKAXE-C5", "PICKAXE-C10"]
279279
280280 let aZ = ["contentShovelP3", "contentPickaxeC1", "contentPickaxeC3", "contentPickaxeC5", "contentPickaxeC10"]
281281
282-let ba = "\"url\": \"https://waveslands.com\", "
282+let ba = ["Gold shovel", "Pickaxe", "Pickaxe", "Pickaxe", "Pickaxe"]
283283
284-func bb (bc) = if (if ((bc.originCaller != B))
284+let bb = ["Reward for early birds", "Increases FarmPower", "Increases FarmPower", "Increases FarmPower", "Increases FarmPower"]
285+
286+let bc = ["Promo", "Common", "Common", "Common", "Common"]
287+
288+let bd = [3, 1, 3, 5, 10]
289+
290+func be (bf) = if (if ((bf.originCaller != B))
285291 then valueOrElse(getBoolean(G()), false)
286292 else false)
287293 then throw("Contracts are under maintenance")
288294 else {
289- let I = toString(bc.originCaller)
290- let bd = (height / i)
291- let be = getString(H(I))
292- let bf = toBase58String(bc.transactionId)
293- let bg = ((toString(bd) + "_") + bf)
294- if (isDefined(be))
295+ let I = toString(bf.originCaller)
296+ let bg = (height / i)
297+ let bh = getString(H(I))
298+ let bi = toBase58String(bf.transactionId)
299+ let bj = ((toString(bg) + "_") + bi)
300+ if (isDefined(bh))
295301 then {
296- let bh = split(value(be), "_")
297- if ((bh[0] == toString(bd)))
298- then [StringEntry(H(I), bg), StringEntry(J(I), bg)]
299- else if ((bh[0] == toString((bd - 1))))
300- then [StringEntry(J(I), bg)]
302+ let bk = split(value(bh), "_")
303+ if ((bk[0] == toString(bg)))
304+ then [StringEntry(H(I), bj), StringEntry(J(I), bj)]
305+ else if ((bk[0] == toString((bg - 1))))
306+ then [StringEntry(J(I), bj)]
301307 else {
302- let bi = getStringValue(H(I))
303- let bj = split(bi, "_")
304- if ((bj[0] == toString(bd)))
305- then [StringEntry(J(I), bg)]
306- else [StringEntry(H(I), bi), StringEntry(J(I), bg)]
308+ let bl = getStringValue(H(I))
309+ let bm = split(bl, "_")
310+ if ((bm[0] == toString(bg)))
311+ then [StringEntry(J(I), bj)]
312+ else [StringEntry(H(I), bl), StringEntry(J(I), bj)]
307313 }
308314 }
309- else [StringEntry(H(I), bg), StringEntry(J(I), bg)]
315+ else [StringEntry(H(I), bj), StringEntry(J(I), bj)]
310316 }
311317
312318
313-func bk (bl,I) = if ((bl >= size(aZ)))
319+func bn (bo,bp) = ((((((((((((((((((((("{\"url\": \"https://waveslands.com\", " + "\"contentKey\": \"") + aZ[bo]) + "\", ") + "\"number\": ") + bp) + ", ") + "\"collection\": \"Digging tools") + "\", ") + "\"name\": \"") + ba[bo]) + "\", ") + "\"description\": \"") + bb[bo]) + "\", ") + "\"rare\": \"") + bc[bo]) + "\", ") + "\"bonus\": ") + toString(bd[bo])) + ", ") + "\"bonusType\": \"FarmPower\"}")
320+
321+
322+func bq (bo,I) = if ((bo >= size(aZ)))
314323 then throw("nftIndex out of bounds")
315324 else {
316- let bm = (valueOrElse(getInteger(av), -1) + 1)
317- let bn = Issue(aY[bl], (((((("{" + ba) + "\"contentKey\": \"") + aZ[bl]) + "\", \"number\": ") + toString(bm)) + aX[bl]), 1, 0, false)
318- let bo = calculateAssetId(bn)
319- $Tuple2([bn, IntegerEntry(av, bm), IntegerEntry(ay(toBase58String(bo)), bm), ScriptTransfer(I, 1, bo)], bo)
325+ let bp = (valueOrElse(getInteger(av), -1) + 1)
326+ let br = Issue(aY[bo], bn(bo, toString(bp)), 1, 0, false)
327+ let bs = calculateAssetId(br)
328+ $Tuple2([br, IntegerEntry(av, (bp + 1)), IntegerEntry(az(toBase58String(bs)), bp), ScriptTransfer(I, 1, bs)], bs)
320329 }
321330
322331
323-func bp (bq,p,br) = if (if ((bq == 0))
324- then (br == 0)
332+func bt (bu,p,bv) = if (if ((bu == 0))
333+ then (bv == 0)
325334 else false)
326335 then throw("Nothing to do")
327336 else {
328- let bs = invoke(D, "onStakeUnstakeLand", [p], nil)
329- if ((bs == bs))
337+ let bw = invoke(D, "onStakeUnstakeLand", [p], nil)
338+ if ((bw == bw))
330339 then {
331- let bt = lastBlock.timestamp
332- let bu = N(p)
333- let bv = am(p)
334- let bw = valueOrElse(getInteger(bv), 0)
335- if (if ((0 > bq))
336- then (0 > (bw + bq))
340+ let bx = lastBlock.timestamp
341+ let by = N(p)
342+ let bz = am(p)
343+ let bA = valueOrElse(getInteger(bz), 0)
344+ if (if ((0 > bu))
345+ then (0 > (bA + bu))
337346 else false)
338- then throw(((("You have only " + ad(bw, 8)) + " ACRES staked, tried to unstake ") + ad(-(bq), 8)))
347+ then throw(((("You have only " + ad(bA, 8)) + " ACRES staked, tried to unstake ") + ad(-(bu), 8)))
339348 else {
340- let bx = (bw + bq)
341- let by = valueOrElse(getInteger(ao), 0)
342- let bz = an(p)
343- let bA = valueOrElse(getInteger(bz), 0)
344- let bB = aB(p)
345- let bC = valueOrElse(getInteger(C, bB), 0)
346- if (if ((0 > br))
347- then (0 > (bC + br))
349+ let bB = (bA + bu)
350+ let bC = valueOrElse(getInteger(ao), 0)
351+ let bD = an(p)
352+ let bE = valueOrElse(getInteger(bD), 0)
353+ let bF = aC(p)
354+ let bG = valueOrElse(getInteger(C, bF), 0)
355+ if (if ((0 > bv))
356+ then (0 > (bG + bv))
348357 else false)
349- then throw((((("You have only " + ad(bC, 4)) + "% bonus, and tried to unstake ") + ad(-(br), 4)) + "%"))
358+ then throw((((("You have only " + ad(bG, 4)) + "% bonus, and tried to unstake ") + ad(-(bv), 4)) + "%"))
350359 else {
351- let bD = aR(bx, (bC + br))
352- let bE = bD._1
353- let bF = bD._2
354- let bG = valueOrElse(getInteger(ap), 0)
355- let bH = if ((bq == 0))
360+ let bH = aS(bB, (bG + bv))
361+ let bI = bH._1
362+ let bJ = bH._2
363+ let bK = valueOrElse(getInteger(ap), 0)
364+ let bL = if ((bu == 0))
356365 then nil
357- else [IntegerEntry(bv, bx), IntegerEntry(ao, (by + bq))]
358- $Tuple2(((((bH :+ IntegerEntry(bu, lastBlock.timestamp)) :+ IntegerEntry(bz, bE)) :+ IntegerEntry(ap, ((bG + bE) - bA))) :+ IntegerEntry(bB, (bC + br))), bs)
366+ else [IntegerEntry(bz, bB), IntegerEntry(ao, (bC + bu))]
367+ $Tuple2(((((bL :+ IntegerEntry(by, lastBlock.timestamp)) :+ IntegerEntry(bD, bI)) :+ IntegerEntry(ap, ((bK + bI) - bE))) :+ IntegerEntry(bF, (bG + bv))), bw)
359368 }
360369 }
361370 }
363372 }
364373
365374
366-func bI (bJ) = {
367- let bK = valueOrErrorMessage(getInteger(D, ak), "WLGOLD is not issued yet")
368- let bL = assetBalance(D, k)
369- let bM = (assetBalance(C, k) - bJ)
370- let bN = (assetBalance(E, k) + valueOrElse(getInteger(E, al), 0))
371- let bO = ((bM + bL) + bN)
372- fraction(bO, d, bK)
375+func bM (bN) = {
376+ let bO = valueOrErrorMessage(getInteger(D, ak), "WLGOLD is not issued yet")
377+ let bP = assetBalance(D, k)
378+ let bQ = (assetBalance(C, k) - bN)
379+ let bR = (assetBalance(E, k) + valueOrElse(getInteger(E, al), 0))
380+ let bS = ((bQ + bP) + bR)
381+ fraction(bS, d, bO)
373382 }
374383
375384
376-func bP () = {
377- let bL = assetBalance(D, k)
378- let bM = assetBalance(this, k)
379- let bN = (assetBalance(E, k) + valueOrElse(getInteger(E, al), 0))
380- let bQ = (((bM + bL) + bN) / g)
381- let bR = valueOrElse(getInteger(aW), bQ)
382- let bS = valueOrElse(getInteger(aV), 0)
383- let bt = lastBlock.timestamp
384- let bT = (bR + fraction(bQ, (bt - bS), e))
385- let bU = min([bT, bQ])
386- $Tuple2(IntegerEntry(aV, bt), bU)
385+func bT () = {
386+ let bP = assetBalance(D, k)
387+ let bQ = assetBalance(this, k)
388+ let bR = (assetBalance(E, k) + valueOrElse(getInteger(E, al), 0))
389+ let bU = (((bQ + bP) + bR) / g)
390+ let bV = valueOrElse(getInteger(aX), bU)
391+ let bW = valueOrElse(getInteger(aW), 0)
392+ let bx = lastBlock.timestamp
393+ let bX = (bV + fraction(bU, (bx - bW), e))
394+ let bY = min([bX, bU])
395+ $Tuple2(IntegerEntry(aW, bx), bY)
387396 }
388397
389398
390-let bV = addressFromStringValue("3PJgZ6AK1WVCpdCmEZpesHmaKvrQDdXG5og")
399+let bZ = addressFromStringValue("3PJgZ6AK1WVCpdCmEZpesHmaKvrQDdXG5og")
391400
392-let bW = valueOrElse(getString(bV, "static_incubatorAddress"), "")
401+let ca = valueOrElse(getString(bZ, "static_incubatorAddress"), "")
393402
394-let bX = valueOrElse(getString(bV, "static_breederAddress"), "")
403+let cb = valueOrElse(getString(bZ, "static_breederAddress"), "")
395404
396-let bY = valueOrElse(getString(bV, "static_turtleIncubatorAddress"), "")
405+let cc = valueOrElse(getString(bZ, "static_turtleIncubatorAddress"), "")
397406
398-let bZ = valueOrElse(getString(bV, "static_turtleBreederAddress"), "")
407+let cd = valueOrElse(getString(bZ, "static_turtleBreederAddress"), "")
399408
400-let ca = valueOrElse(getString(bV, "static_canineIncubatorAddress"), "")
409+let ce = valueOrElse(getString(bZ, "static_canineIncubatorAddress"), "")
401410
402-let cb = valueOrElse(getString(bV, "static_canineBreederAddress"), "")
411+let cf = valueOrElse(getString(bZ, "static_canineBreederAddress"), "")
403412
404-let cc = valueOrElse(getString(bV, "static_felineIncubatorAddress"), "")
413+let cg = valueOrElse(getString(bZ, "static_felineIncubatorAddress"), "")
405414
406-let cd = valueOrElse(getString(bV, "static_felineBreederAddress"), "")
415+let ch = valueOrElse(getString(bZ, "static_felineBreederAddress"), "")
407416
408-let ce = valueOrElse(getString(bV, "static_mutantIncubatorAddress"), "")
417+let ci = valueOrElse(getString(bZ, "static_mutantIncubatorAddress"), "")
409418
410-func cf (cg) = {
411- let ch = toString(cg.issuer)
412- if (if (if (if (if (if (if (if ((ch == bW))
419+func cj (ck) = {
420+ let cl = toString(ck.issuer)
421+ if (if (if (if (if (if (if (if (if (if ((h == base58'2T'))
422+ then (cl == n)
423+ else false)
413424 then true
414- else (ch == bX))
425+ else (cl == ca))
415426 then true
416- else (ch == bY))
427+ else (cl == cb))
417428 then true
418- else (ch == bZ))
429+ else (cl == cc))
419430 then true
420- else (ch == ca))
431+ else (cl == cd))
421432 then true
422- else (ch == cb))
433+ else (cl == ce))
423434 then true
424- else (ch == cc))
435+ else (cl == cf))
425436 then true
426- else (ch == cd))
427- then cg.name
428- else if ((ch == ce))
429- then cg.description
437+ else (cl == cg))
438+ then true
439+ else (cl == ch))
440+ then ck.name
441+ else if ((cl == ci))
442+ then ck.description
430443 else ""
431444 }
432445
433446
434-func ci (cj) = if (!(contains(cj, "\"bonusType\": \"FarmPower\"")))
435- then throw(("NFT is not supported: " + cj))
447+func cm (cn) = if (!(contains(cn, "\"bonusType\": \"FarmPower\"")))
448+ then throw(("NFT is not supported: " + cn))
436449 else {
437- let ck = split_4C(split_4C(cj, "\"bonus\":")[1], ",")[0]
438- parseIntValue(drop(ck, (valueOrElse(lastIndexOf(ck, " "), -1) + 1)))
450+ let co = split_4C(split_4C(cn, "\"bonus\":")[1], ",")[0]
451+ parseIntValue(drop(co, (valueOrElse(lastIndexOf(co, " "), -1) + 1)))
439452 }
440453
441454
442-@Callable(bc)
443-func saveLastTx () = if (!(containsElement([D], bc.caller)))
455+func cp (I,cq,aT,cr,cs,ct) = {
456+ let cu = valueOrElse(getInteger(cr), 0)
457+ if ((cu >= ct))
458+ then throw((("You can stake max " + toString(ct)) + " of such NFTs"))
459+ else {
460+ let cv = bt(0, I, aT)
461+ let cw = cv._1
462+ let cx = cv._2
463+ $Tuple2((((cw :+ IntegerEntry(cr, (cu + 1))) :+ IntegerEntry(cs, (valueOrElse(getInteger(cs), 0) + 1))) :+ IntegerEntry(R(cq, I), lastBlock.timestamp)), cx)
464+ }
465+ }
466+
467+
468+@Callable(bf)
469+func saveLastTx () = if (!(containsElement([D], bf.caller)))
444470 then throw("Access denied")
445- else $Tuple2(bb(bc), 42)
471+ else $Tuple2(be(bf), 42)
446472
447473
448474
449-@Callable(bc)
450-func constructorV1 (cl,cm) = if ((bc.caller != this))
475+@Callable(bf)
476+func constructorV1 (cy,cz) = if ((bf.caller != this))
451477 then throw("Permission denied")
452478 else {
453- let cn = addressFromStringValue(cm)
454-[IntegerEntry(K, getIntegerValue(cn, K)), BinaryEntry(L, getBinaryValue(cn, L)), StringEntry(v(), cl), StringEntry(F, cm)]
479+ let cA = addressFromStringValue(cz)
480+[IntegerEntry(K, getIntegerValue(cA, K)), BinaryEntry(L, getBinaryValue(cA, L)), StringEntry(v(), cy), StringEntry(F, cz)]
455481 }
456482
457483
458484
459-@Callable(bc)
460-func setBlocked (co) = if ((bc.caller != this))
485+@Callable(bf)
486+func setBlocked (cB) = if ((bf.caller != this))
461487 then throw("permission denied")
462- else [BooleanEntry(G(), co)]
488+ else [BooleanEntry(G(), cB)]
463489
464490
465491
466-@Callable(bc)
467-func unstakeAcres (cp) = {
468- let cq = bb(bc)
469- if ((0 >= cp))
492+@Callable(bf)
493+func unstakeAcres (cC) = {
494+ let cD = be(bf)
495+ if ((0 >= cC))
470496 then throw("Amount should be positive")
471497 else {
472- let p = toString(bc.caller)
473- if ((size(bc.payments) != 0))
498+ let p = toString(bf.caller)
499+ if ((size(bf.payments) != 0))
474500 then throw("No payments required")
475501 else {
476- let cr = (valueOrElse(getInteger(D, aU(p)), 0) + m)
477- if ((cr > lastBlock.timestamp))
478- then throw(("You traded some WLGOLD, cannot unstake until " + toString(cr)))
502+ let cE = (valueOrElse(getInteger(D, aV(p)), 0) + m)
503+ if ((cE > lastBlock.timestamp))
504+ then throw(("You traded some WLGOLD, cannot unstake until " + toString(cE)))
479505 else {
480- let cs = bp(-(cp), p, 0)
481- let ct = cs._1
482- let cu = cs._2
483- $Tuple2(((ct :+ ScriptTransfer(bc.caller, cp, M)) ++ cq), cu)
506+ let cF = bt(-(cC), p, 0)
507+ let cw = cF._1
508+ let cx = cF._2
509+ $Tuple2(((cw :+ ScriptTransfer(bf.caller, cC, M)) ++ cD), cx)
484510 }
485511 }
486512 }
488514
489515
490516
491-@Callable(bc)
517+@Callable(bf)
492518 func stakeAcres () = {
493- let cq = bb(bc)
494- let p = toString(bc.caller)
495- if ((size(bc.payments) != 1))
519+ let cD = be(bf)
520+ let p = toString(bf.caller)
521+ if ((size(bf.payments) != 1))
496522 then throw("exactly 1 payment must be attached")
497523 else {
498- let cv = bc.payments[0]
499- let bq = cv.amount
500- if (if (!(isDefined(cv.assetId)))
524+ let cG = bf.payments[0]
525+ let bu = cG.amount
526+ if (if (!(isDefined(cG.assetId)))
501527 then true
502- else (value(cv.assetId) != M))
528+ else (value(cG.assetId) != M))
503529 then throw("ACRES payments only!")
504530 else {
505- let cw = bp(bq, p, 0)
506- let ct = cw._1
507- let cu = cw._2
508- $Tuple2((ct ++ cq), cu)
531+ let cH = bt(bu, p, 0)
532+ let cw = cH._1
533+ let cx = cH._2
534+ $Tuple2((cw ++ cD), cx)
509535 }
510536 }
511537 }
512538
513539
514540
515-@Callable(bc)
541+@Callable(bf)
516542 func buyAcres () = {
517- let cq = bb(bc)
518- if ((size(bc.payments) != 1))
543+ let cD = be(bf)
544+ if ((size(bf.payments) != 1))
519545 then throw("exactly 1 payment must be attached")
520546 else {
521- let cv = bc.payments[0]
522- let cx = cv.amount
523- if (if (!(isDefined(cv.assetId)))
547+ let cG = bf.payments[0]
548+ let cI = cG.amount
549+ if (if (!(isDefined(cG.assetId)))
524550 then true
525- else (value(cv.assetId) != k))
551+ else (value(cG.assetId) != k))
526552 then throw("USDT payments only!")
527- else if ((b > cx))
553+ else if ((b > cI))
528554 then throw((("Min payment should be " + ad(b, 6)) + " USDT"))
529555 else {
530- let cy = (cx * f)
531- let cz = fraction(cx, d, bI(cx))
532- let cA = addressFromStringValue(getStringValue(F))
533- let cB = invoke(cA, "requestAcresCallback", [cy], nil)
534- if ((cB == cB))
556+ let cJ = (cI * f)
557+ let cK = fraction(cI, d, bM(cI))
558+ let cL = addressFromStringValue(getStringValue(F))
559+ let cM = invoke(cL, "requestAcresCallback", [cJ], nil)
560+ if ((cM == cM))
535561 then {
536- let cC = U(invoke(D, "burnWlgold", [cz], nil))
537- $Tuple2(([ScriptTransfer(bc.caller, cy, M)] ++ cq), cC)
562+ let cN = U(invoke(D, "burnWlgold", [cK], nil))
563+ $Tuple2(([ScriptTransfer(bf.caller, cJ, M)] ++ cD), cN)
538564 }
539565 else throw("Strict value is not equal to itself.")
540566 }
543569
544570
545571
546-@Callable(bc)
547-func buyAcresREADONLY (cx) = {
548- let cy = (cx * f)
549- let cD = fraction(cx, d, bI(cx))
550- $Tuple2(nil, [cy, b, cy, cD])
572+@Callable(bf)
573+func buyAcresREADONLY (cI) = {
574+ let cJ = (cI * f)
575+ let cO = fraction(cI, d, bM(cI))
576+ $Tuple2(nil, [cJ, b, cJ, cO])
551577 }
552578
553579
554580
555-@Callable(bc)
581+@Callable(bf)
556582 func sellAcres () = {
557- let cq = bb(bc)
558- if ((size(bc.payments) != 1))
583+ let cD = be(bf)
584+ if ((size(bf.payments) != 1))
559585 then throw("exactly 1 payment must be attached")
560586 else {
561- let cv = bc.payments[0]
562- let cy = cv.amount
563- if (if (!(isDefined(cv.assetId)))
587+ let cG = bf.payments[0]
588+ let cJ = cG.amount
589+ if (if (!(isDefined(cG.assetId)))
564590 then true
565- else (value(cv.assetId) != M))
591+ else (value(cG.assetId) != M))
566592 then throw("ACRES payments only!")
567- else if ((c > cy))
593+ else if ((c > cJ))
568594 then throw((("Min payment should be " + ad(c, 8)) + " ACRES"))
569595 else {
570- let I = toString(bc.caller)
571- let cE = bP()
572- let cF = cE._1
573- let cG = cE._2
574- let cH = (cG * f)
575- if ((cy > cH))
576- then throw((("You can sell max " + ad(cH, 8)) + " ACRES"))
596+ let I = toString(bf.caller)
597+ let cP = bT()
598+ let cQ = cP._1
599+ let cR = cP._2
600+ let cS = (cR * f)
601+ if ((cJ > cS))
602+ then throw((("You can sell max " + ad(cS, 8)) + " ACRES"))
577603 else {
578- let cx = ((cy / f) / 2)
579- $Tuple2(([cF, IntegerEntry(aW, (cG - cx)), ScriptTransfer(bc.caller, cx, k)] ++ cq), cx)
604+ let cI = ((cJ / f) / 2)
605+ $Tuple2(([cQ, IntegerEntry(aX, (cR - cI)), ScriptTransfer(bf.caller, cI, k)] ++ cD), cI)
580606 }
581607 }
582608 }
584610
585611
586612
587-@Callable(bc)
588-func sellAcresREADONLY (p,cy) = {
589- let cI = bP()
590- let cF = cI._1
591- let cG = cI._2
592- let cx = ((cy / f) / 2)
593- $Tuple2(nil, [cx, c, (cG * f), 0])
613+@Callable(bf)
614+func sellAcresREADONLY (p,cJ) = {
615+ let cT = bT()
616+ let cQ = cT._1
617+ let cR = cT._2
618+ let cI = ((cJ / f) / 2)
619+ $Tuple2(nil, [cI, c, (cR * f), 0])
594620 }
595621
596622
597623
598-@Callable(bc)
599-func convertOldStakes () = if ((bc.caller != this))
624+@Callable(bf)
625+func convertOldStakes () = if ((bf.caller != this))
600626 then throw("Temporarily disabled")
601627 else {
602- let p = toString(bc.caller)
603- if ((size(bc.payments) != 0))
628+ let p = toString(bf.caller)
629+ if ((size(bf.payments) != 0))
604630 then throw("No payments required")
605631 else {
606- let cA = addressFromStringValue(getStringValue(F))
607- let cp = valueOrElse(getInteger(cA, am(p)), 0)
608- let cJ = if ((cp > 0))
609- then ac(invoke(cA, "unstakeAcresCallback", [cp, p], nil))
632+ let cL = addressFromStringValue(getStringValue(F))
633+ let cC = valueOrElse(getInteger(cL, am(p)), 0)
634+ let cU = if ((cC > 0))
635+ then ac(invoke(cL, "unstakeAcresCallback", [cC, p], nil))
610636 else $Tuple2(0, 0)
611- let cK = addressFromStringValue(n)
612- let cL = getString(cK, O(p))
613- let cM = if (isDefined(cL))
637+ let cV = addressFromStringValue(n)
638+ let cW = getString(cV, O(p))
639+ let cX = if (isDefined(cW))
614640 then {
615- let cN = split_51C(value(cL), "_")
616- func cO (aH,cP) = if ((cP == ""))
641+ let cY = split_51C(value(cW), "_")
642+ func cZ (aI,da) = if ((da == ""))
617643 then throw("landAssetId is required")
618644 else {
619- let cQ = X(invoke(cK, "unstakeLandCallback", [cP, p], nil))
620- $Tuple4((aH._1 + cQ._1), (aH._2 + cQ._2), (aH._3 + cQ._3), (aH._4 + cQ._4))
645+ let db = X(invoke(cV, "unstakeLandCallback", [da, p], nil))
646+ $Tuple4((aI._1 + db._1), (aI._2 + db._2), (aI._3 + db._3), (aI._4 + db._4))
621647 }
622648
623- let cR = {
624- let aJ = cN
625- let aK = size(aJ)
626- let aL = $Tuple4(0, 0, 0, 0)
627- func aM (aN,aO) = if ((aO >= aK))
628- then aN
629- else cO(aN, aJ[aO])
649+ let dc = {
650+ let aK = cY
651+ let aL = size(aK)
652+ let aM = $Tuple4(0, 0, 0, 0)
653+ func aN (aO,aP) = if ((aP >= aL))
654+ then aO
655+ else cZ(aO, aK[aP])
630656
631- func aP (aN,aO) = if ((aO >= aK))
632- then aN
657+ func aQ (aO,aP) = if ((aP >= aL))
658+ then aO
633659 else throw("List size exceeds 100")
634660
635- aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
661+ aQ(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aM, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
636662 }
637- let cS = invoke(cK, "unstakeLandsFinalizeCallback", [p], nil)
638- if ((cS == cS))
663+ let dd = invoke(cV, "unstakeLandsFinalizeCallback", [p], nil)
664+ if ((dd == dd))
639665 then {
640- let cB = invoke(cA, "requestAcresCallback", [(((cR._1 + cR._2) + cR._3) + cR._4)], nil)
641- if ((cB == cB))
666+ let cM = invoke(cL, "requestAcresCallback", [(((dc._1 + dc._2) + dc._3) + dc._4)], nil)
667+ if ((cM == cM))
642668 then {
643- let cT = bk(aq, bc.caller)
644- let cU = cT._1
645- let bo = cT._2
646- $Tuple5(cR._1, cR._2, cR._3, cR._4, cU)
669+ let de = bq(aq, bf.caller)
670+ let df = de._1
671+ let bs = de._2
672+ $Tuple5(dc._1, dc._2, dc._3, dc._4, df)
647673 }
648674 else throw("Strict value is not equal to itself.")
649675 }
650676 else throw("Strict value is not equal to itself.")
651677 }
652678 else $Tuple5(0, 0, 0, 0, nil)
653- let cV = valueOrElse(getString(cK, Q(p)), "")
654- let cW = if ((cV != ""))
655- then ab(invoke(cK, "unstakeDuckCallback", [cV, p], nil))
679+ let dg = valueOrElse(getString(cV, Q(p)), "")
680+ let dh = if ((dg != ""))
681+ then ab(invoke(cV, "unstakeDuckCallback", [dg, p], nil))
656682 else $Tuple3(0, 0, 0)
657- let cX = bp((((((((cJ._1 + cM._1) + cM._2) + cM._3) + cM._4) + cW._1) + cW._2) + cW._3), p, 0)
658- $Tuple2((cM._5 ++ cX._1), cX._2)
683+ let di = bt((((((((cU._1 + cX._1) + cX._2) + cX._3) + cX._4) + dh._1) + dh._2) + dh._3), p, 0)
684+ $Tuple2((cX._5 ++ di._1), di._2)
659685 }
660686 }
661687
662688
663689
664-@Callable(bc)
690+@Callable(bf)
665691 func unstakeLandsREADONLY (p) = {
666- let cK = addressFromStringValue(n)
667- let cL = getString(cK, O(p))
668- let cM = if (isDefined(cL))
692+ let cV = addressFromStringValue(n)
693+ let cW = getString(cV, O(p))
694+ let cX = if (isDefined(cW))
669695 then {
670- let cN = split_51C(value(cL), "_")
671- func cO (aH,cP) = if ((cP == ""))
696+ let cY = split_51C(value(cW), "_")
697+ func cZ (aI,da) = if ((da == ""))
672698 then throw("landAssetId is required")
673699 else {
674- let cQ = aa(invoke(cK, "unstakeLandREADONLY", [cP, p], nil))
675- $Tuple4((aH._1 + cQ._1), (aH._2 + cQ._2), (aH._3 + cQ._3), (aH._4 + cQ._4))
700+ let db = aa(invoke(cV, "unstakeLandREADONLY", [da, p], nil))
701+ $Tuple4((aI._1 + db._1), (aI._2 + db._2), (aI._3 + db._3), (aI._4 + db._4))
676702 }
677703
678- let aJ = cN
679- let aK = size(aJ)
680- let aL = $Tuple4(0, 0, 0, 0)
681- func aM (aN,aO) = if ((aO >= aK))
682- then aN
683- else cO(aN, aJ[aO])
704+ let aK = cY
705+ let aL = size(aK)
706+ let aM = $Tuple4(0, 0, 0, 0)
707+ func aN (aO,aP) = if ((aP >= aL))
708+ then aO
709+ else cZ(aO, aK[aP])
684710
685- func aP (aN,aO) = if ((aO >= aK))
686- then aN
711+ func aQ (aO,aP) = if ((aP >= aL))
712+ then aO
687713 else throw("List size exceeds 100")
688714
689- aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
715+ aQ(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aM, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
690716 }
691717 else $Tuple4(0, 0, 0, 0)
692- $Tuple2(nil, cM)
718+ $Tuple2(nil, cX)
693719 }
694720
695721
696722
697-@Callable(bc)
698-func stakeAcresCallback (I) = if ((bc.caller != addressFromStringValue(n)))
723+@Callable(bf)
724+func stakeAcresCallback (I) = if ((bf.caller != addressFromStringValue(n)))
699725 then throw("Permission denied")
700- else bp(bc.payments[0].amount, I, 0)
726+ else bt(bf.payments[0].amount, I, 0)
701727
702728
703729
704-@Callable(bc)
705-func simulateStakeAcresREADONLY (p,cY) = {
706- let bv = am(p)
707- let bx = (valueOrElse(getInteger(bv), 0) + cY)
708- let by = valueOrElse(getInteger(ao), 0)
709- let bz = an(p)
710- let bA = valueOrElse(getInteger(bz), 0)
711- let cZ = valueOrElse(getInteger(C, aB(p)), 0)
712- let da = aR(bx, cZ)
713- let bE = da._1
714- let bF = da._2
715- let bG = valueOrElse(getInteger(ap), 0)
716- let db = ((bG + bE) - bA)
717- $Tuple2(nil, [bA, bE, bG, db])
730+@Callable(bf)
731+func simulateStakeAcresREADONLY (p,dj) = {
732+ let bz = am(p)
733+ let bB = (valueOrElse(getInteger(bz), 0) + dj)
734+ let bC = valueOrElse(getInteger(ao), 0)
735+ let bD = an(p)
736+ let bE = valueOrElse(getInteger(bD), 0)
737+ let dk = valueOrElse(getInteger(C, aC(p)), 0)
738+ let dl = aS(bB, dk)
739+ let bI = dl._1
740+ let bJ = dl._2
741+ let bK = valueOrElse(getInteger(ap), 0)
742+ let dm = ((bK + bI) - bE)
743+ $Tuple2(nil, [bE, bI, bK, dm])
718744 }
719745
720746
721747
722-@Callable(bc)
723-func issueNFT (dc,bl) = if ((bc.caller != D))
748+@Callable(bf)
749+func issueNFT (dn,bo) = if ((bf.caller != D))
724750 then throw("Permission denied")
725- else bk(bl, addressFromStringValue(dc))
751+ else bq(bo, addressFromStringValue(dn))
726752
727753
728754
729-@Callable(bc)
755+@Callable(bf)
730756 func stakeNFT () = {
731- let cq = bb(bc)
732- if ((size(bc.payments) != 1))
757+ let cD = be(bf)
758+ if ((size(bf.payments) != 1))
733759 then throw("Exactly one payment required")
734760 else {
735- let cv = value(bc.payments[0])
736- if ((cv.amount != 1))
761+ let cG = value(bf.payments[0])
762+ if ((cG.amount != 1))
737763 then throw("NFT token should be attached as payment")
738764 else {
739- let S = value(cv.assetId)
740- let dd = value(assetInfo(S))
741- let de = toBase58String(S)
742- let I = toString(bc.caller)
743- let df = T(I)
744- let dg = getString(df)
745- let dh = if (isDefined(dg))
746- then split_4C(value(dg), "_")
765+ let S = value(cG.assetId)
766+ let do = value(assetInfo(S))
767+ let cq = toBase58String(S)
768+ let I = toString(bf.caller)
769+ let dp = T(I)
770+ let dq = getString(dp)
771+ let dr = if (isDefined(dq))
772+ then split_4C(value(dq), "_")
747773 else nil
748- if (containsElement(dh, de))
749- then throw(("Your staked NFTs already contain " + de))
750- else if ((size(dh) >= au))
774+ if (containsElement(dr, cq))
775+ then throw(("Your staked NFTs already contain " + cq))
776+ else if ((size(dr) >= au))
751777 then throw((("Your already staked max (" + toString(au)) + ") NFTs"))
752778 else {
753- let di = StringEntry(df, makeString_2C((dh :+ de), "_"))
754- let dj = (dd.issuer == this)
755- if (dj)
779+ let ds = StringEntry(dp, makeString_2C((dr :+ cq), "_"))
780+ if ((do.issuer == this))
756781 then {
757- let dk = valueOrElse(getInteger(az(I)), 0)
758- if ((dk >= ar))
759- then throw((("You can stake max " + toString(ar)) + " of WavesLands NFTs"))
760- else {
761- let dl = (ci(value(dd.description)) * 10000)
762- let dm = bp(0, I, dl)
763- let ct = dm._1
764- let cu = dm._2
765- $Tuple2((((((ct :+ di) :+ IntegerEntry(az(I), (dk + 1))) :+ IntegerEntry(ax, (valueOrElse(getInteger(ax), 0) + 1))) :+ IntegerEntry(R(de, I), lastBlock.timestamp)) ++ cq), cu)
766- }
782+ let dt = cp(I, cq, (cm(value(do.description)) * 10000), aA(I), ax, ar)
783+ let cw = dt._1
784+ let cx = dt._2
785+ $Tuple2(((cD ++ cw) :+ ds), cx)
767786 }
768- else {
769- let dn = cf(dd)
770- if ((dn == ""))
771- then throw("Only WavesLands and Arkimals NFT tokens are accepted")
772- else {
773- let do = valueOrElse(getInteger(aA(I)), 0)
774- if ((do >= as))
775- then throw((("You can stake max " + toString(as)) + " of Arkimals NFTs"))
776- else {
777- let dp = bp(0, I, at)
778- let ct = dp._1
779- let cu = dp._2
780- $Tuple2(((((ct :+ di) :+ IntegerEntry(aA(I), (do + 1))) :+ IntegerEntry(R(de, I), lastBlock.timestamp)) ++ cq), cu)
781- }
782- }
783- }
787+ else if ((cj(do) == ""))
788+ then throw("Only WavesLands and Arkimals NFT tokens are accepted")
789+ else {
790+ let du = cp(I, cq, at, aB(I), ay, as)
791+ let cw = du._1
792+ let cx = du._2
793+ $Tuple2(((cD ++ cw) :+ ds), cx)
794+ }
784795 }
785796 }
786797 }
788799
789800
790801
791-@Callable(bc)
792-func unstakeNFT (de) = {
793- let cq = bb(bc)
794- if ((size(bc.payments) != 0))
802+@Callable(bf)
803+func unstakeNFT (cq) = {
804+ let cD = be(bf)
805+ if ((size(bf.payments) != 0))
795806 then throw("No payments required")
796807 else {
797- let S = fromBase58String(de)
798- let I = toString(bc.caller)
799- let dd = value(assetInfo(S))
800- let bu = R(de, I)
801- if (!(isDefined(getInteger(bu))))
802- then throw((("NFT " + dd.name) + " is not staked by you"))
808+ let S = fromBase58String(cq)
809+ let I = toString(bf.caller)
810+ let do = value(assetInfo(S))
811+ let by = R(cq, I)
812+ if (!(isDefined(getInteger(by))))
813+ then throw((("NFT " + do.name) + " is not staked by you"))
803814 else {
804- let df = T(I)
805- let dh = split_4C(valueOrElse(getString(df), ""), "_")
806- let A = indexOf(dh, de)
815+ let dp = T(I)
816+ let dr = split_4C(valueOrElse(getString(dp), ""), "_")
817+ let A = indexOf(dr, cq)
807818 if (!(isDefined(A)))
808- then throw(("Your staked NFTs don't contain " + de))
819+ then throw(("Your staked NFTs don't contain " + cq))
809820 else {
810- let di = if ((size(dh) > 1))
811- then StringEntry(df, makeString_2C(removeByIndex(dh, value(A)), "_"))
812- else DeleteEntry(df)
813- let dj = (dd.issuer == this)
814- if (dj)
821+ let ds = if ((size(dr) > 1))
822+ then StringEntry(dp, makeString_2C(removeByIndex(dr, value(A)), "_"))
823+ else DeleteEntry(dp)
824+ let dv = (do.issuer == this)
825+ if (dv)
815826 then {
816- let dk = valueOrElse(getInteger(az(I)), 0)
817- let dl = (ci(value(dd.description)) * 10000)
818- let dq = bp(0, I, -(dl))
819- let ct = dq._1
820- let cu = dq._2
821- $Tuple2(((((((ct :+ di) :+ IntegerEntry(az(I), (dk - 1))) :+ IntegerEntry(ax, max([0, (valueOrElse(getInteger(ax), 0) - 1)]))) :+ DeleteEntry(R(toBase58String(S), I))) :+ ScriptTransfer(bc.caller, 1, S)) ++ cq), cu)
827+ let dw = valueOrElse(getInteger(aA(I)), 0)
828+ let dx = (cm(value(do.description)) * 10000)
829+ let dy = bt(0, I, -(dx))
830+ let cw = dy._1
831+ let cx = dy._2
832+ $Tuple2(((((((cw :+ ds) :+ IntegerEntry(aA(I), (dw - 1))) :+ IntegerEntry(ax, max([0, (valueOrElse(getInteger(ax), 0) - 1)]))) :+ DeleteEntry(R(toBase58String(S), I))) :+ ScriptTransfer(bf.caller, 1, S)) ++ cD), cx)
822833 }
823834 else {
824- let dn = cf(dd)
825- if ((dn == ""))
835+ let dz = cj(do)
836+ if ((dz == ""))
826837 then throw("Only WavesLands and Arkimals NFT tokens are accepted")
827838 else {
828- let do = valueOrElse(getInteger(aA(I)), 0)
829- let dr = bp(0, I, -(at))
830- let ct = dr._1
831- let cu = dr._2
832- $Tuple2((((((ct :+ di) :+ IntegerEntry(aA(I), (do - 1))) :+ DeleteEntry(R(toBase58String(S), I))) :+ ScriptTransfer(bc.caller, 1, S)) ++ cq), cu)
839+ let dA = valueOrElse(getInteger(aB(I)), 0)
840+ let dB = bt(0, I, -(at))
841+ let cw = dB._1
842+ let cx = dB._2
843+ $Tuple2((((((cw :+ ds) :+ IntegerEntry(aB(I), (dA - 1))) :+ DeleteEntry(R(toBase58String(S), I))) :+ ScriptTransfer(bf.caller, 1, S)) ++ cD), cx)
833844 }
834845 }
835846 }
839850
840851
841852
842-@Callable(bc)
853+@Callable(bf)
843854 func exchangeNFTs () = {
844- let cq = bb(bc)
845- if ((3 > size(bc.payments)))
855+ let cD = be(bf)
856+ if ((3 > size(bf.payments)))
846857 then throw("Min one USDT and 2 NFT payments allowed")
847- else if ((size(bc.payments) > 6))
858+ else if ((size(bf.payments) > 6))
848859 then throw("Max one USDT and 5 NFT payments allowed")
849860 else {
850- let I = toString(bc.caller)
851- func ds (aH,cv) = {
852- let S = valueOrErrorMessage(cv.assetId, "WAVES payments not allowed")
861+ let I = toString(bf.caller)
862+ func dC (aI,cG) = {
863+ let S = valueOrErrorMessage(cG.assetId, "WAVES payments not allowed")
853864 if ((S == k))
854- then $Tuple3((aH._1 + cv.amount), aH._2, aH._3)
865+ then $Tuple3((aI._1 + cG.amount), aI._2, aI._3)
855866 else {
856- let dd = value(assetInfo(S))
857- if ((dd.issuer != this))
867+ let do = value(assetInfo(S))
868+ if ((do.issuer != this))
858869 then throw("Only WL-issued NFTs allowed")
859870 else {
860- let dt = ci(value(dd.description))
861- $Tuple3(aH._1, (aH._2 + dt), (aH._3 :+ Burn(S, 1)))
871+ let dD = cm(value(do.description))
872+ $Tuple3(aI._1, (aI._2 + dD), (aI._3 :+ Burn(S, 1)))
862873 }
863874 }
864875 }
865876
866- let du = {
867- let aJ = bc.payments
868- let aK = size(aJ)
869- let aL = $Tuple3(0, 0, nil)
870- func aM (aN,aO) = if ((aO >= aK))
871- then aN
872- else ds(aN, aJ[aO])
877+ let dE = {
878+ let aK = bf.payments
879+ let aL = size(aK)
880+ let aM = $Tuple3(0, 0, nil)
881+ func aN (aO,aP) = if ((aP >= aL))
882+ then aO
883+ else dC(aO, aK[aP])
873884
874- func aP (aN,aO) = if ((aO >= aK))
875- then aN
885+ func aQ (aO,aP) = if ((aP >= aL))
886+ then aO
876887 else throw("List size exceeds 6")
877888
878- aP(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6)
889+ aQ(aN(aN(aN(aN(aN(aN(aM, 0), 1), 2), 3), 4), 5), 6)
879890 }
880- let dv = du._1
881- let dw = du._2
882- let dx = du._3
883- let bl = if ((dw == 3))
891+ let dF = dE._1
892+ let dG = dE._2
893+ let dH = dE._3
894+ let bo = if ((dG == 3))
884895 then 2
885- else if ((dw == 5))
896+ else if ((dG == 5))
886897 then 3
887- else if ((dw == 10))
898+ else if ((dG == 10))
888899 then 4
889900 else throw("Only bonuses of 3%, 5% or 10% are supported")
890- let dy = (dv - (dw * b))
891- if ((0 > dy))
892- then throw((("You need to attach " + toString(dw)) + " USDT as fee"))
901+ let dI = (dF - (dG * b))
902+ if ((0 > dI))
903+ then throw((("You need to attach " + toString(dG)) + " USDT as fee"))
893904 else {
894- let dz = if ((dy > 0))
895- then [ScriptTransfer(bc.caller, dy, k)]
905+ let dJ = if ((dI > 0))
906+ then [ScriptTransfer(bf.caller, dI, k)]
896907 else nil
897- let dA = bk(bl, bc.caller)
898- let dB = dA._1
899- let bo = dA._2
900- let dC = size(dx)
901- let dD = if ((dC == 0))
908+ let dK = bq(bo, bf.caller)
909+ let dL = dK._1
910+ let bs = dK._2
911+ let dM = size(dH)
912+ let dN = if ((dM == 0))
902913 then nil
903- else [IntegerEntry(aw, (valueOrElse(getInteger(aw), 0) + dC))]
904- $Tuple2(((((dB ++ dx) ++ dD) ++ cq) ++ dz), bo)
914+ else [IntegerEntry(aw, (valueOrElse(getInteger(aw), 0) + dM))]
915+ $Tuple2(((((dL ++ dH) ++ dN) ++ cD) ++ dJ), bs)
905916 }
906917 }
907918 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "__"
55
66 let b = 1000000
77
88 let c = 10000000
99
1010 let d = 100000000
1111
1212 let e = 86400000
1313
1414 let f = 10
1515
1616 let g = 100
1717
1818 let h = take(drop(this.bytes, 1), 1)
1919
2020 let i = {
2121 let j = h
2222 if ((base58'2W' == j))
2323 then 10080
2424 else if ((base58'2T' == j))
2525 then 180
2626 else throw("Unknown chain")
2727 }
2828
2929 let k = {
3030 let j = h
3131 if ((base58'2W' == j))
3232 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
3333 else if ((base58'2T' == j))
3434 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
3535 else throw("Unknown chain")
3636 }
3737
3838 let l = {
3939 let j = h
4040 if ((base58'2W' == j))
4141 then "3PFwYta8biEz31zpeFe5DJK8wE5trSpQVF8"
4242 else if ((base58'2T' == j))
4343 then "3N7UuYar6264P58FBhVWKPQAh4Yua2hgngv"
4444 else throw("Unknown chain")
4545 }
4646
4747 let m = {
4848 let j = h
4949 if ((base58'2W' == j))
5050 then e
5151 else if ((base58'2T' == j))
5252 then 60000
5353 else throw("Unknown chain")
5454 }
5555
5656 let n = {
5757 let j = h
5858 if ((base58'2W' == j))
5959 then "3PLncXtS1U83D6cQbFD3H8rBHPLgzxSFKZ1"
6060 else if ((base58'2T' == j))
6161 then "3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm"
6262 else throw("Unknown chain")
6363 }
6464
6565 func o (p,q) = valueOrErrorMessage(getString(p, q), makeString(["mandatory ", toString(p), ".", q, " is not defined"], ""))
6666
6767
6868 let r = 1
6969
7070 let s = 2
7171
7272 let t = 5
7373
7474 func u () = "%s__restConfig"
7575
7676
7777 func v () = "%s__rest2Addr"
7878
7979
8080 func w (x) = split_4C(o(x, u()), a)
8181
8282
8383 func y (z,A) = valueOrErrorMessage(addressFromString(z[A]), ("Rest cfg doesn't contain address at index " + toString(A)))
8484
8585
8686 let B = addressFromStringValue(valueOrElse(getString(this, v()), l))
8787
8888 let z = w(B)
8989
9090 let C = y(z, r)
9191
9292 let D = y(z, s)
9393
9494 let E = y(z, t)
9595
9696 let F = "oldAcresContract"
9797
9898 func G () = "contractsBlocked"
9999
100100
101101 func H (I) = ("lastWeekTxIdByUser_" + I)
102102
103103
104104 func J (I) = ("curWeekTxIdByUser_" + I)
105105
106106
107107 let K = "acresIssuedAmount"
108108
109109 let L = "acresAssetId"
110110
111111 let M = valueOrErrorMessage(getBinary(C, L), "ACRES is not issued yet")
112112
113113 func N (I) = ("acresStakedTimeByUser_" + I)
114114
115115
116116 func O (P) = ("stakedLandsByOwner_" + P)
117117
118118
119119 func Q (P) = ("stakedDuckByOwner_" + P)
120120
121121
122122 func R (S,I) = ((("st_" + S) + "_") + I)
123123
124124
125125 func T (P) = ("stakedNFTsByOwner_" + P)
126126
127127
128128 func U (V) = {
129129 let j = V
130130 if ($isInstanceOf(j, "Int"))
131131 then {
132132 let W = j
133133 W
134134 }
135135 else throw("fail to cast into Int")
136136 }
137137
138138
139139 func X (Y) = {
140140 let j = Y
141141 if ($isInstanceOf(j, "(Int, Int, Int, Int, Int)"))
142142 then {
143143 let Z = j
144144 Z
145145 }
146146 else throw("fail to cast into (Int, Int, Int, Int, Int)")
147147 }
148148
149149
150150 func aa (Y) = {
151151 let j = Y
152152 if ($isInstanceOf(j, "(Int, Int, Int, Int)"))
153153 then {
154154 let Z = j
155155 Z
156156 }
157157 else throw("fail to cast into (Int, Int, Int, Int)")
158158 }
159159
160160
161161 func ab (Y) = {
162162 let j = Y
163163 if ($isInstanceOf(j, "(Int, Int, Int)"))
164164 then {
165165 let Z = j
166166 Z
167167 }
168168 else throw("fail to cast into (Int, Int, Int)")
169169 }
170170
171171
172172 func ac (Y) = {
173173 let j = Y
174174 if ($isInstanceOf(j, "(Int, Int)"))
175175 then {
176176 let Z = j
177177 Z
178178 }
179179 else throw("fail to cast into (Int, Int)")
180180 }
181181
182182
183183 func ad (Y,ae) = {
184184 let af = pow(10, 0, ae, 0, 0, DOWN)
185185 let ag = toString((Y % af))
186186 let ah = drop(toString(af), (1 + size(ag)))
187187 (((toString((Y / af)) + ".") + ah) + ag)
188188 }
189189
190190
191191 let ai = 1000000
192192
193193 let aj = 100000000
194194
195195 let ak = "wlg_issuedAmount"
196196
197197 let al = "zbill_issuedAmount"
198198
199199 func am (I) = ("acresStakedAmountByUser_" + I)
200200
201201
202202 func an (I) = ("farmingPowerByUser_" + I)
203203
204204
205205 let ao = "acresStakedAmountTotal"
206206
207207 let ap = "totalFarmingPower"
208208
209209 let aq = 0
210210
211211 let ar = 3
212212
213213 let as = 1
214214
215215 let at = 5000
216216
217217 let au = 4
218218
219219 let av = "nftTotalIssued"
220220
221221 let aw = "nftTotalBurned"
222222
223223 let ax = "WlNftTotalStaked"
224224
225-func ay (S) = ("nftNumberByAssetId_" + S)
225+let ay = "ArkNftTotalStaked"
226+
227+func az (S) = ("nftNumberByAssetId_" + S)
226228
227229
228-func az (I) = ("userWlNftNumber_" + I)
230+func aA (I) = ("userWlNftNumber_" + I)
229231
230232
231-func aA (I) = ("userArkNftNumber_" + I)
233+func aB (I) = ("userArkNftNumber_" + I)
232234
233235
234-func aB (I) = ("userFullBonus_" + I)
236+func aC (I) = ("userFullBonus_" + I)
235237
236238
237-let aC = [0, 10, 20, 40, 80, 150, 250, 400, 700, 1000]
239+let aD = [0, 10, 20, 40, 80, 150, 250, 400, 700, 1000]
238240
239-func aD (aE) = {
240- let aF = ((aE + 99999999) / aj)
241- func aG (aH,aI) = if ((aI >= aF))
242- then aH
243- else (aH + 1)
241+func aE (aF) = {
242+ let aG = ((aF + 99999999) / aj)
243+ func aH (aI,aJ) = if ((aJ >= aG))
244+ then aI
245+ else (aI + 1)
244246
245- let aJ = aC
246- let aK = size(aJ)
247- let aL = 0
248- func aM (aN,aO) = if ((aO >= aK))
249- then aN
250- else aG(aN, aJ[aO])
247+ let aK = aD
248+ let aL = size(aK)
249+ let aM = 0
250+ func aN (aO,aP) = if ((aP >= aL))
251+ then aO
252+ else aH(aO, aK[aP])
251253
252- func aP (aN,aO) = if ((aO >= aK))
253- then aN
254+ func aQ (aO,aP) = if ((aP >= aL))
255+ then aO
254256 else throw("List size exceeds 10")
255257
256- aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
258+ aQ(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aM, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
257259 }
258260
259261
260-func aQ (aE) = ((aE * 20) * (aD(aE) + 4))
262+func aR (aF) = ((aF * 20) * (aE(aF) + 4))
261263
262264
263-func aR (aE,aS) = {
264- let aT = aQ(aE)
265- $Tuple2(fraction(aT, (ai + aS), ai), aT)
265+func aS (aF,aT) = {
266+ let aU = aR(aF)
267+ $Tuple2(fraction(aU, (ai + aT), ai), aU)
266268 }
267269
268270
269-func aU (I) = ("lastArbTimeUser_" + I)
271+func aV (I) = ("lastArbTimeUser_" + I)
270272
271273
272-let aV = "lastAcresSellTime"
274+let aW = "lastAcresSellTime"
273275
274-let aW = "lastLimitLeft"
275-
276-let aX = [", \"collection\": \"Digging tools\", \"name\": \"Gold shovel\", \"description\": \"Reward for early birds\", \"rare\": \"Promo\", \"bonus\": 3, \"bonusType\": \"FarmPower\"}", ", \"collection\": \"Digging tools\", \"name\": \"Pickaxe\", \"description\": \"Increases FarmPower\", \"rare\": \"Common\", \"bonus\": 1, \"bonusType\": \"FarmPower\"}", ", \"collection\": \"Digging tools\", \"name\": \"Pickaxe\", \"description\": \"Increases FarmPower\", \"rare\": \"Common\", \"bonus\": 3, \"bonusType\": \"FarmPower\"}", ", \"collection\": \"Digging tools\", \"name\": \"Pickaxe\", \"description\": \"Increases FarmPower\", \"rare\": \"Common\", \"bonus\": 5, \"bonusType\": \"FarmPower\"}", ", \"collection\": \"Digging tools\", \"name\": \"Pickaxe\", \"description\": \"Increases FarmPower\", \"rare\": \"Common\", \"bonus\": 10, \"bonusType\": \"FarmPower\"}"]
276+let aX = "lastLimitLeft"
277277
278278 let aY = ["SHOVEL-P3", "PICKAXE-C1", "PICKAXE-C3", "PICKAXE-C5", "PICKAXE-C10"]
279279
280280 let aZ = ["contentShovelP3", "contentPickaxeC1", "contentPickaxeC3", "contentPickaxeC5", "contentPickaxeC10"]
281281
282-let ba = "\"url\": \"https://waveslands.com\", "
282+let ba = ["Gold shovel", "Pickaxe", "Pickaxe", "Pickaxe", "Pickaxe"]
283283
284-func bb (bc) = if (if ((bc.originCaller != B))
284+let bb = ["Reward for early birds", "Increases FarmPower", "Increases FarmPower", "Increases FarmPower", "Increases FarmPower"]
285+
286+let bc = ["Promo", "Common", "Common", "Common", "Common"]
287+
288+let bd = [3, 1, 3, 5, 10]
289+
290+func be (bf) = if (if ((bf.originCaller != B))
285291 then valueOrElse(getBoolean(G()), false)
286292 else false)
287293 then throw("Contracts are under maintenance")
288294 else {
289- let I = toString(bc.originCaller)
290- let bd = (height / i)
291- let be = getString(H(I))
292- let bf = toBase58String(bc.transactionId)
293- let bg = ((toString(bd) + "_") + bf)
294- if (isDefined(be))
295+ let I = toString(bf.originCaller)
296+ let bg = (height / i)
297+ let bh = getString(H(I))
298+ let bi = toBase58String(bf.transactionId)
299+ let bj = ((toString(bg) + "_") + bi)
300+ if (isDefined(bh))
295301 then {
296- let bh = split(value(be), "_")
297- if ((bh[0] == toString(bd)))
298- then [StringEntry(H(I), bg), StringEntry(J(I), bg)]
299- else if ((bh[0] == toString((bd - 1))))
300- then [StringEntry(J(I), bg)]
302+ let bk = split(value(bh), "_")
303+ if ((bk[0] == toString(bg)))
304+ then [StringEntry(H(I), bj), StringEntry(J(I), bj)]
305+ else if ((bk[0] == toString((bg - 1))))
306+ then [StringEntry(J(I), bj)]
301307 else {
302- let bi = getStringValue(H(I))
303- let bj = split(bi, "_")
304- if ((bj[0] == toString(bd)))
305- then [StringEntry(J(I), bg)]
306- else [StringEntry(H(I), bi), StringEntry(J(I), bg)]
308+ let bl = getStringValue(H(I))
309+ let bm = split(bl, "_")
310+ if ((bm[0] == toString(bg)))
311+ then [StringEntry(J(I), bj)]
312+ else [StringEntry(H(I), bl), StringEntry(J(I), bj)]
307313 }
308314 }
309- else [StringEntry(H(I), bg), StringEntry(J(I), bg)]
315+ else [StringEntry(H(I), bj), StringEntry(J(I), bj)]
310316 }
311317
312318
313-func bk (bl,I) = if ((bl >= size(aZ)))
319+func bn (bo,bp) = ((((((((((((((((((((("{\"url\": \"https://waveslands.com\", " + "\"contentKey\": \"") + aZ[bo]) + "\", ") + "\"number\": ") + bp) + ", ") + "\"collection\": \"Digging tools") + "\", ") + "\"name\": \"") + ba[bo]) + "\", ") + "\"description\": \"") + bb[bo]) + "\", ") + "\"rare\": \"") + bc[bo]) + "\", ") + "\"bonus\": ") + toString(bd[bo])) + ", ") + "\"bonusType\": \"FarmPower\"}")
320+
321+
322+func bq (bo,I) = if ((bo >= size(aZ)))
314323 then throw("nftIndex out of bounds")
315324 else {
316- let bm = (valueOrElse(getInteger(av), -1) + 1)
317- let bn = Issue(aY[bl], (((((("{" + ba) + "\"contentKey\": \"") + aZ[bl]) + "\", \"number\": ") + toString(bm)) + aX[bl]), 1, 0, false)
318- let bo = calculateAssetId(bn)
319- $Tuple2([bn, IntegerEntry(av, bm), IntegerEntry(ay(toBase58String(bo)), bm), ScriptTransfer(I, 1, bo)], bo)
325+ let bp = (valueOrElse(getInteger(av), -1) + 1)
326+ let br = Issue(aY[bo], bn(bo, toString(bp)), 1, 0, false)
327+ let bs = calculateAssetId(br)
328+ $Tuple2([br, IntegerEntry(av, (bp + 1)), IntegerEntry(az(toBase58String(bs)), bp), ScriptTransfer(I, 1, bs)], bs)
320329 }
321330
322331
323-func bp (bq,p,br) = if (if ((bq == 0))
324- then (br == 0)
332+func bt (bu,p,bv) = if (if ((bu == 0))
333+ then (bv == 0)
325334 else false)
326335 then throw("Nothing to do")
327336 else {
328- let bs = invoke(D, "onStakeUnstakeLand", [p], nil)
329- if ((bs == bs))
337+ let bw = invoke(D, "onStakeUnstakeLand", [p], nil)
338+ if ((bw == bw))
330339 then {
331- let bt = lastBlock.timestamp
332- let bu = N(p)
333- let bv = am(p)
334- let bw = valueOrElse(getInteger(bv), 0)
335- if (if ((0 > bq))
336- then (0 > (bw + bq))
340+ let bx = lastBlock.timestamp
341+ let by = N(p)
342+ let bz = am(p)
343+ let bA = valueOrElse(getInteger(bz), 0)
344+ if (if ((0 > bu))
345+ then (0 > (bA + bu))
337346 else false)
338- then throw(((("You have only " + ad(bw, 8)) + " ACRES staked, tried to unstake ") + ad(-(bq), 8)))
347+ then throw(((("You have only " + ad(bA, 8)) + " ACRES staked, tried to unstake ") + ad(-(bu), 8)))
339348 else {
340- let bx = (bw + bq)
341- let by = valueOrElse(getInteger(ao), 0)
342- let bz = an(p)
343- let bA = valueOrElse(getInteger(bz), 0)
344- let bB = aB(p)
345- let bC = valueOrElse(getInteger(C, bB), 0)
346- if (if ((0 > br))
347- then (0 > (bC + br))
349+ let bB = (bA + bu)
350+ let bC = valueOrElse(getInteger(ao), 0)
351+ let bD = an(p)
352+ let bE = valueOrElse(getInteger(bD), 0)
353+ let bF = aC(p)
354+ let bG = valueOrElse(getInteger(C, bF), 0)
355+ if (if ((0 > bv))
356+ then (0 > (bG + bv))
348357 else false)
349- then throw((((("You have only " + ad(bC, 4)) + "% bonus, and tried to unstake ") + ad(-(br), 4)) + "%"))
358+ then throw((((("You have only " + ad(bG, 4)) + "% bonus, and tried to unstake ") + ad(-(bv), 4)) + "%"))
350359 else {
351- let bD = aR(bx, (bC + br))
352- let bE = bD._1
353- let bF = bD._2
354- let bG = valueOrElse(getInteger(ap), 0)
355- let bH = if ((bq == 0))
360+ let bH = aS(bB, (bG + bv))
361+ let bI = bH._1
362+ let bJ = bH._2
363+ let bK = valueOrElse(getInteger(ap), 0)
364+ let bL = if ((bu == 0))
356365 then nil
357- else [IntegerEntry(bv, bx), IntegerEntry(ao, (by + bq))]
358- $Tuple2(((((bH :+ IntegerEntry(bu, lastBlock.timestamp)) :+ IntegerEntry(bz, bE)) :+ IntegerEntry(ap, ((bG + bE) - bA))) :+ IntegerEntry(bB, (bC + br))), bs)
366+ else [IntegerEntry(bz, bB), IntegerEntry(ao, (bC + bu))]
367+ $Tuple2(((((bL :+ IntegerEntry(by, lastBlock.timestamp)) :+ IntegerEntry(bD, bI)) :+ IntegerEntry(ap, ((bK + bI) - bE))) :+ IntegerEntry(bF, (bG + bv))), bw)
359368 }
360369 }
361370 }
362371 else throw("Strict value is not equal to itself.")
363372 }
364373
365374
366-func bI (bJ) = {
367- let bK = valueOrErrorMessage(getInteger(D, ak), "WLGOLD is not issued yet")
368- let bL = assetBalance(D, k)
369- let bM = (assetBalance(C, k) - bJ)
370- let bN = (assetBalance(E, k) + valueOrElse(getInteger(E, al), 0))
371- let bO = ((bM + bL) + bN)
372- fraction(bO, d, bK)
375+func bM (bN) = {
376+ let bO = valueOrErrorMessage(getInteger(D, ak), "WLGOLD is not issued yet")
377+ let bP = assetBalance(D, k)
378+ let bQ = (assetBalance(C, k) - bN)
379+ let bR = (assetBalance(E, k) + valueOrElse(getInteger(E, al), 0))
380+ let bS = ((bQ + bP) + bR)
381+ fraction(bS, d, bO)
373382 }
374383
375384
376-func bP () = {
377- let bL = assetBalance(D, k)
378- let bM = assetBalance(this, k)
379- let bN = (assetBalance(E, k) + valueOrElse(getInteger(E, al), 0))
380- let bQ = (((bM + bL) + bN) / g)
381- let bR = valueOrElse(getInteger(aW), bQ)
382- let bS = valueOrElse(getInteger(aV), 0)
383- let bt = lastBlock.timestamp
384- let bT = (bR + fraction(bQ, (bt - bS), e))
385- let bU = min([bT, bQ])
386- $Tuple2(IntegerEntry(aV, bt), bU)
385+func bT () = {
386+ let bP = assetBalance(D, k)
387+ let bQ = assetBalance(this, k)
388+ let bR = (assetBalance(E, k) + valueOrElse(getInteger(E, al), 0))
389+ let bU = (((bQ + bP) + bR) / g)
390+ let bV = valueOrElse(getInteger(aX), bU)
391+ let bW = valueOrElse(getInteger(aW), 0)
392+ let bx = lastBlock.timestamp
393+ let bX = (bV + fraction(bU, (bx - bW), e))
394+ let bY = min([bX, bU])
395+ $Tuple2(IntegerEntry(aW, bx), bY)
387396 }
388397
389398
390-let bV = addressFromStringValue("3PJgZ6AK1WVCpdCmEZpesHmaKvrQDdXG5og")
399+let bZ = addressFromStringValue("3PJgZ6AK1WVCpdCmEZpesHmaKvrQDdXG5og")
391400
392-let bW = valueOrElse(getString(bV, "static_incubatorAddress"), "")
401+let ca = valueOrElse(getString(bZ, "static_incubatorAddress"), "")
393402
394-let bX = valueOrElse(getString(bV, "static_breederAddress"), "")
403+let cb = valueOrElse(getString(bZ, "static_breederAddress"), "")
395404
396-let bY = valueOrElse(getString(bV, "static_turtleIncubatorAddress"), "")
405+let cc = valueOrElse(getString(bZ, "static_turtleIncubatorAddress"), "")
397406
398-let bZ = valueOrElse(getString(bV, "static_turtleBreederAddress"), "")
407+let cd = valueOrElse(getString(bZ, "static_turtleBreederAddress"), "")
399408
400-let ca = valueOrElse(getString(bV, "static_canineIncubatorAddress"), "")
409+let ce = valueOrElse(getString(bZ, "static_canineIncubatorAddress"), "")
401410
402-let cb = valueOrElse(getString(bV, "static_canineBreederAddress"), "")
411+let cf = valueOrElse(getString(bZ, "static_canineBreederAddress"), "")
403412
404-let cc = valueOrElse(getString(bV, "static_felineIncubatorAddress"), "")
413+let cg = valueOrElse(getString(bZ, "static_felineIncubatorAddress"), "")
405414
406-let cd = valueOrElse(getString(bV, "static_felineBreederAddress"), "")
415+let ch = valueOrElse(getString(bZ, "static_felineBreederAddress"), "")
407416
408-let ce = valueOrElse(getString(bV, "static_mutantIncubatorAddress"), "")
417+let ci = valueOrElse(getString(bZ, "static_mutantIncubatorAddress"), "")
409418
410-func cf (cg) = {
411- let ch = toString(cg.issuer)
412- if (if (if (if (if (if (if (if ((ch == bW))
419+func cj (ck) = {
420+ let cl = toString(ck.issuer)
421+ if (if (if (if (if (if (if (if (if (if ((h == base58'2T'))
422+ then (cl == n)
423+ else false)
413424 then true
414- else (ch == bX))
425+ else (cl == ca))
415426 then true
416- else (ch == bY))
427+ else (cl == cb))
417428 then true
418- else (ch == bZ))
429+ else (cl == cc))
419430 then true
420- else (ch == ca))
431+ else (cl == cd))
421432 then true
422- else (ch == cb))
433+ else (cl == ce))
423434 then true
424- else (ch == cc))
435+ else (cl == cf))
425436 then true
426- else (ch == cd))
427- then cg.name
428- else if ((ch == ce))
429- then cg.description
437+ else (cl == cg))
438+ then true
439+ else (cl == ch))
440+ then ck.name
441+ else if ((cl == ci))
442+ then ck.description
430443 else ""
431444 }
432445
433446
434-func ci (cj) = if (!(contains(cj, "\"bonusType\": \"FarmPower\"")))
435- then throw(("NFT is not supported: " + cj))
447+func cm (cn) = if (!(contains(cn, "\"bonusType\": \"FarmPower\"")))
448+ then throw(("NFT is not supported: " + cn))
436449 else {
437- let ck = split_4C(split_4C(cj, "\"bonus\":")[1], ",")[0]
438- parseIntValue(drop(ck, (valueOrElse(lastIndexOf(ck, " "), -1) + 1)))
450+ let co = split_4C(split_4C(cn, "\"bonus\":")[1], ",")[0]
451+ parseIntValue(drop(co, (valueOrElse(lastIndexOf(co, " "), -1) + 1)))
439452 }
440453
441454
442-@Callable(bc)
443-func saveLastTx () = if (!(containsElement([D], bc.caller)))
455+func cp (I,cq,aT,cr,cs,ct) = {
456+ let cu = valueOrElse(getInteger(cr), 0)
457+ if ((cu >= ct))
458+ then throw((("You can stake max " + toString(ct)) + " of such NFTs"))
459+ else {
460+ let cv = bt(0, I, aT)
461+ let cw = cv._1
462+ let cx = cv._2
463+ $Tuple2((((cw :+ IntegerEntry(cr, (cu + 1))) :+ IntegerEntry(cs, (valueOrElse(getInteger(cs), 0) + 1))) :+ IntegerEntry(R(cq, I), lastBlock.timestamp)), cx)
464+ }
465+ }
466+
467+
468+@Callable(bf)
469+func saveLastTx () = if (!(containsElement([D], bf.caller)))
444470 then throw("Access denied")
445- else $Tuple2(bb(bc), 42)
471+ else $Tuple2(be(bf), 42)
446472
447473
448474
449-@Callable(bc)
450-func constructorV1 (cl,cm) = if ((bc.caller != this))
475+@Callable(bf)
476+func constructorV1 (cy,cz) = if ((bf.caller != this))
451477 then throw("Permission denied")
452478 else {
453- let cn = addressFromStringValue(cm)
454-[IntegerEntry(K, getIntegerValue(cn, K)), BinaryEntry(L, getBinaryValue(cn, L)), StringEntry(v(), cl), StringEntry(F, cm)]
479+ let cA = addressFromStringValue(cz)
480+[IntegerEntry(K, getIntegerValue(cA, K)), BinaryEntry(L, getBinaryValue(cA, L)), StringEntry(v(), cy), StringEntry(F, cz)]
455481 }
456482
457483
458484
459-@Callable(bc)
460-func setBlocked (co) = if ((bc.caller != this))
485+@Callable(bf)
486+func setBlocked (cB) = if ((bf.caller != this))
461487 then throw("permission denied")
462- else [BooleanEntry(G(), co)]
488+ else [BooleanEntry(G(), cB)]
463489
464490
465491
466-@Callable(bc)
467-func unstakeAcres (cp) = {
468- let cq = bb(bc)
469- if ((0 >= cp))
492+@Callable(bf)
493+func unstakeAcres (cC) = {
494+ let cD = be(bf)
495+ if ((0 >= cC))
470496 then throw("Amount should be positive")
471497 else {
472- let p = toString(bc.caller)
473- if ((size(bc.payments) != 0))
498+ let p = toString(bf.caller)
499+ if ((size(bf.payments) != 0))
474500 then throw("No payments required")
475501 else {
476- let cr = (valueOrElse(getInteger(D, aU(p)), 0) + m)
477- if ((cr > lastBlock.timestamp))
478- then throw(("You traded some WLGOLD, cannot unstake until " + toString(cr)))
502+ let cE = (valueOrElse(getInteger(D, aV(p)), 0) + m)
503+ if ((cE > lastBlock.timestamp))
504+ then throw(("You traded some WLGOLD, cannot unstake until " + toString(cE)))
479505 else {
480- let cs = bp(-(cp), p, 0)
481- let ct = cs._1
482- let cu = cs._2
483- $Tuple2(((ct :+ ScriptTransfer(bc.caller, cp, M)) ++ cq), cu)
506+ let cF = bt(-(cC), p, 0)
507+ let cw = cF._1
508+ let cx = cF._2
509+ $Tuple2(((cw :+ ScriptTransfer(bf.caller, cC, M)) ++ cD), cx)
484510 }
485511 }
486512 }
487513 }
488514
489515
490516
491-@Callable(bc)
517+@Callable(bf)
492518 func stakeAcres () = {
493- let cq = bb(bc)
494- let p = toString(bc.caller)
495- if ((size(bc.payments) != 1))
519+ let cD = be(bf)
520+ let p = toString(bf.caller)
521+ if ((size(bf.payments) != 1))
496522 then throw("exactly 1 payment must be attached")
497523 else {
498- let cv = bc.payments[0]
499- let bq = cv.amount
500- if (if (!(isDefined(cv.assetId)))
524+ let cG = bf.payments[0]
525+ let bu = cG.amount
526+ if (if (!(isDefined(cG.assetId)))
501527 then true
502- else (value(cv.assetId) != M))
528+ else (value(cG.assetId) != M))
503529 then throw("ACRES payments only!")
504530 else {
505- let cw = bp(bq, p, 0)
506- let ct = cw._1
507- let cu = cw._2
508- $Tuple2((ct ++ cq), cu)
531+ let cH = bt(bu, p, 0)
532+ let cw = cH._1
533+ let cx = cH._2
534+ $Tuple2((cw ++ cD), cx)
509535 }
510536 }
511537 }
512538
513539
514540
515-@Callable(bc)
541+@Callable(bf)
516542 func buyAcres () = {
517- let cq = bb(bc)
518- if ((size(bc.payments) != 1))
543+ let cD = be(bf)
544+ if ((size(bf.payments) != 1))
519545 then throw("exactly 1 payment must be attached")
520546 else {
521- let cv = bc.payments[0]
522- let cx = cv.amount
523- if (if (!(isDefined(cv.assetId)))
547+ let cG = bf.payments[0]
548+ let cI = cG.amount
549+ if (if (!(isDefined(cG.assetId)))
524550 then true
525- else (value(cv.assetId) != k))
551+ else (value(cG.assetId) != k))
526552 then throw("USDT payments only!")
527- else if ((b > cx))
553+ else if ((b > cI))
528554 then throw((("Min payment should be " + ad(b, 6)) + " USDT"))
529555 else {
530- let cy = (cx * f)
531- let cz = fraction(cx, d, bI(cx))
532- let cA = addressFromStringValue(getStringValue(F))
533- let cB = invoke(cA, "requestAcresCallback", [cy], nil)
534- if ((cB == cB))
556+ let cJ = (cI * f)
557+ let cK = fraction(cI, d, bM(cI))
558+ let cL = addressFromStringValue(getStringValue(F))
559+ let cM = invoke(cL, "requestAcresCallback", [cJ], nil)
560+ if ((cM == cM))
535561 then {
536- let cC = U(invoke(D, "burnWlgold", [cz], nil))
537- $Tuple2(([ScriptTransfer(bc.caller, cy, M)] ++ cq), cC)
562+ let cN = U(invoke(D, "burnWlgold", [cK], nil))
563+ $Tuple2(([ScriptTransfer(bf.caller, cJ, M)] ++ cD), cN)
538564 }
539565 else throw("Strict value is not equal to itself.")
540566 }
541567 }
542568 }
543569
544570
545571
546-@Callable(bc)
547-func buyAcresREADONLY (cx) = {
548- let cy = (cx * f)
549- let cD = fraction(cx, d, bI(cx))
550- $Tuple2(nil, [cy, b, cy, cD])
572+@Callable(bf)
573+func buyAcresREADONLY (cI) = {
574+ let cJ = (cI * f)
575+ let cO = fraction(cI, d, bM(cI))
576+ $Tuple2(nil, [cJ, b, cJ, cO])
551577 }
552578
553579
554580
555-@Callable(bc)
581+@Callable(bf)
556582 func sellAcres () = {
557- let cq = bb(bc)
558- if ((size(bc.payments) != 1))
583+ let cD = be(bf)
584+ if ((size(bf.payments) != 1))
559585 then throw("exactly 1 payment must be attached")
560586 else {
561- let cv = bc.payments[0]
562- let cy = cv.amount
563- if (if (!(isDefined(cv.assetId)))
587+ let cG = bf.payments[0]
588+ let cJ = cG.amount
589+ if (if (!(isDefined(cG.assetId)))
564590 then true
565- else (value(cv.assetId) != M))
591+ else (value(cG.assetId) != M))
566592 then throw("ACRES payments only!")
567- else if ((c > cy))
593+ else if ((c > cJ))
568594 then throw((("Min payment should be " + ad(c, 8)) + " ACRES"))
569595 else {
570- let I = toString(bc.caller)
571- let cE = bP()
572- let cF = cE._1
573- let cG = cE._2
574- let cH = (cG * f)
575- if ((cy > cH))
576- then throw((("You can sell max " + ad(cH, 8)) + " ACRES"))
596+ let I = toString(bf.caller)
597+ let cP = bT()
598+ let cQ = cP._1
599+ let cR = cP._2
600+ let cS = (cR * f)
601+ if ((cJ > cS))
602+ then throw((("You can sell max " + ad(cS, 8)) + " ACRES"))
577603 else {
578- let cx = ((cy / f) / 2)
579- $Tuple2(([cF, IntegerEntry(aW, (cG - cx)), ScriptTransfer(bc.caller, cx, k)] ++ cq), cx)
604+ let cI = ((cJ / f) / 2)
605+ $Tuple2(([cQ, IntegerEntry(aX, (cR - cI)), ScriptTransfer(bf.caller, cI, k)] ++ cD), cI)
580606 }
581607 }
582608 }
583609 }
584610
585611
586612
587-@Callable(bc)
588-func sellAcresREADONLY (p,cy) = {
589- let cI = bP()
590- let cF = cI._1
591- let cG = cI._2
592- let cx = ((cy / f) / 2)
593- $Tuple2(nil, [cx, c, (cG * f), 0])
613+@Callable(bf)
614+func sellAcresREADONLY (p,cJ) = {
615+ let cT = bT()
616+ let cQ = cT._1
617+ let cR = cT._2
618+ let cI = ((cJ / f) / 2)
619+ $Tuple2(nil, [cI, c, (cR * f), 0])
594620 }
595621
596622
597623
598-@Callable(bc)
599-func convertOldStakes () = if ((bc.caller != this))
624+@Callable(bf)
625+func convertOldStakes () = if ((bf.caller != this))
600626 then throw("Temporarily disabled")
601627 else {
602- let p = toString(bc.caller)
603- if ((size(bc.payments) != 0))
628+ let p = toString(bf.caller)
629+ if ((size(bf.payments) != 0))
604630 then throw("No payments required")
605631 else {
606- let cA = addressFromStringValue(getStringValue(F))
607- let cp = valueOrElse(getInteger(cA, am(p)), 0)
608- let cJ = if ((cp > 0))
609- then ac(invoke(cA, "unstakeAcresCallback", [cp, p], nil))
632+ let cL = addressFromStringValue(getStringValue(F))
633+ let cC = valueOrElse(getInteger(cL, am(p)), 0)
634+ let cU = if ((cC > 0))
635+ then ac(invoke(cL, "unstakeAcresCallback", [cC, p], nil))
610636 else $Tuple2(0, 0)
611- let cK = addressFromStringValue(n)
612- let cL = getString(cK, O(p))
613- let cM = if (isDefined(cL))
637+ let cV = addressFromStringValue(n)
638+ let cW = getString(cV, O(p))
639+ let cX = if (isDefined(cW))
614640 then {
615- let cN = split_51C(value(cL), "_")
616- func cO (aH,cP) = if ((cP == ""))
641+ let cY = split_51C(value(cW), "_")
642+ func cZ (aI,da) = if ((da == ""))
617643 then throw("landAssetId is required")
618644 else {
619- let cQ = X(invoke(cK, "unstakeLandCallback", [cP, p], nil))
620- $Tuple4((aH._1 + cQ._1), (aH._2 + cQ._2), (aH._3 + cQ._3), (aH._4 + cQ._4))
645+ let db = X(invoke(cV, "unstakeLandCallback", [da, p], nil))
646+ $Tuple4((aI._1 + db._1), (aI._2 + db._2), (aI._3 + db._3), (aI._4 + db._4))
621647 }
622648
623- let cR = {
624- let aJ = cN
625- let aK = size(aJ)
626- let aL = $Tuple4(0, 0, 0, 0)
627- func aM (aN,aO) = if ((aO >= aK))
628- then aN
629- else cO(aN, aJ[aO])
649+ let dc = {
650+ let aK = cY
651+ let aL = size(aK)
652+ let aM = $Tuple4(0, 0, 0, 0)
653+ func aN (aO,aP) = if ((aP >= aL))
654+ then aO
655+ else cZ(aO, aK[aP])
630656
631- func aP (aN,aO) = if ((aO >= aK))
632- then aN
657+ func aQ (aO,aP) = if ((aP >= aL))
658+ then aO
633659 else throw("List size exceeds 100")
634660
635- aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
661+ aQ(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aM, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
636662 }
637- let cS = invoke(cK, "unstakeLandsFinalizeCallback", [p], nil)
638- if ((cS == cS))
663+ let dd = invoke(cV, "unstakeLandsFinalizeCallback", [p], nil)
664+ if ((dd == dd))
639665 then {
640- let cB = invoke(cA, "requestAcresCallback", [(((cR._1 + cR._2) + cR._3) + cR._4)], nil)
641- if ((cB == cB))
666+ let cM = invoke(cL, "requestAcresCallback", [(((dc._1 + dc._2) + dc._3) + dc._4)], nil)
667+ if ((cM == cM))
642668 then {
643- let cT = bk(aq, bc.caller)
644- let cU = cT._1
645- let bo = cT._2
646- $Tuple5(cR._1, cR._2, cR._3, cR._4, cU)
669+ let de = bq(aq, bf.caller)
670+ let df = de._1
671+ let bs = de._2
672+ $Tuple5(dc._1, dc._2, dc._3, dc._4, df)
647673 }
648674 else throw("Strict value is not equal to itself.")
649675 }
650676 else throw("Strict value is not equal to itself.")
651677 }
652678 else $Tuple5(0, 0, 0, 0, nil)
653- let cV = valueOrElse(getString(cK, Q(p)), "")
654- let cW = if ((cV != ""))
655- then ab(invoke(cK, "unstakeDuckCallback", [cV, p], nil))
679+ let dg = valueOrElse(getString(cV, Q(p)), "")
680+ let dh = if ((dg != ""))
681+ then ab(invoke(cV, "unstakeDuckCallback", [dg, p], nil))
656682 else $Tuple3(0, 0, 0)
657- let cX = bp((((((((cJ._1 + cM._1) + cM._2) + cM._3) + cM._4) + cW._1) + cW._2) + cW._3), p, 0)
658- $Tuple2((cM._5 ++ cX._1), cX._2)
683+ let di = bt((((((((cU._1 + cX._1) + cX._2) + cX._3) + cX._4) + dh._1) + dh._2) + dh._3), p, 0)
684+ $Tuple2((cX._5 ++ di._1), di._2)
659685 }
660686 }
661687
662688
663689
664-@Callable(bc)
690+@Callable(bf)
665691 func unstakeLandsREADONLY (p) = {
666- let cK = addressFromStringValue(n)
667- let cL = getString(cK, O(p))
668- let cM = if (isDefined(cL))
692+ let cV = addressFromStringValue(n)
693+ let cW = getString(cV, O(p))
694+ let cX = if (isDefined(cW))
669695 then {
670- let cN = split_51C(value(cL), "_")
671- func cO (aH,cP) = if ((cP == ""))
696+ let cY = split_51C(value(cW), "_")
697+ func cZ (aI,da) = if ((da == ""))
672698 then throw("landAssetId is required")
673699 else {
674- let cQ = aa(invoke(cK, "unstakeLandREADONLY", [cP, p], nil))
675- $Tuple4((aH._1 + cQ._1), (aH._2 + cQ._2), (aH._3 + cQ._3), (aH._4 + cQ._4))
700+ let db = aa(invoke(cV, "unstakeLandREADONLY", [da, p], nil))
701+ $Tuple4((aI._1 + db._1), (aI._2 + db._2), (aI._3 + db._3), (aI._4 + db._4))
676702 }
677703
678- let aJ = cN
679- let aK = size(aJ)
680- let aL = $Tuple4(0, 0, 0, 0)
681- func aM (aN,aO) = if ((aO >= aK))
682- then aN
683- else cO(aN, aJ[aO])
704+ let aK = cY
705+ let aL = size(aK)
706+ let aM = $Tuple4(0, 0, 0, 0)
707+ func aN (aO,aP) = if ((aP >= aL))
708+ then aO
709+ else cZ(aO, aK[aP])
684710
685- func aP (aN,aO) = if ((aO >= aK))
686- then aN
711+ func aQ (aO,aP) = if ((aP >= aL))
712+ then aO
687713 else throw("List size exceeds 100")
688714
689- aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
715+ aQ(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aN(aM, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
690716 }
691717 else $Tuple4(0, 0, 0, 0)
692- $Tuple2(nil, cM)
718+ $Tuple2(nil, cX)
693719 }
694720
695721
696722
697-@Callable(bc)
698-func stakeAcresCallback (I) = if ((bc.caller != addressFromStringValue(n)))
723+@Callable(bf)
724+func stakeAcresCallback (I) = if ((bf.caller != addressFromStringValue(n)))
699725 then throw("Permission denied")
700- else bp(bc.payments[0].amount, I, 0)
726+ else bt(bf.payments[0].amount, I, 0)
701727
702728
703729
704-@Callable(bc)
705-func simulateStakeAcresREADONLY (p,cY) = {
706- let bv = am(p)
707- let bx = (valueOrElse(getInteger(bv), 0) + cY)
708- let by = valueOrElse(getInteger(ao), 0)
709- let bz = an(p)
710- let bA = valueOrElse(getInteger(bz), 0)
711- let cZ = valueOrElse(getInteger(C, aB(p)), 0)
712- let da = aR(bx, cZ)
713- let bE = da._1
714- let bF = da._2
715- let bG = valueOrElse(getInteger(ap), 0)
716- let db = ((bG + bE) - bA)
717- $Tuple2(nil, [bA, bE, bG, db])
730+@Callable(bf)
731+func simulateStakeAcresREADONLY (p,dj) = {
732+ let bz = am(p)
733+ let bB = (valueOrElse(getInteger(bz), 0) + dj)
734+ let bC = valueOrElse(getInteger(ao), 0)
735+ let bD = an(p)
736+ let bE = valueOrElse(getInteger(bD), 0)
737+ let dk = valueOrElse(getInteger(C, aC(p)), 0)
738+ let dl = aS(bB, dk)
739+ let bI = dl._1
740+ let bJ = dl._2
741+ let bK = valueOrElse(getInteger(ap), 0)
742+ let dm = ((bK + bI) - bE)
743+ $Tuple2(nil, [bE, bI, bK, dm])
718744 }
719745
720746
721747
722-@Callable(bc)
723-func issueNFT (dc,bl) = if ((bc.caller != D))
748+@Callable(bf)
749+func issueNFT (dn,bo) = if ((bf.caller != D))
724750 then throw("Permission denied")
725- else bk(bl, addressFromStringValue(dc))
751+ else bq(bo, addressFromStringValue(dn))
726752
727753
728754
729-@Callable(bc)
755+@Callable(bf)
730756 func stakeNFT () = {
731- let cq = bb(bc)
732- if ((size(bc.payments) != 1))
757+ let cD = be(bf)
758+ if ((size(bf.payments) != 1))
733759 then throw("Exactly one payment required")
734760 else {
735- let cv = value(bc.payments[0])
736- if ((cv.amount != 1))
761+ let cG = value(bf.payments[0])
762+ if ((cG.amount != 1))
737763 then throw("NFT token should be attached as payment")
738764 else {
739- let S = value(cv.assetId)
740- let dd = value(assetInfo(S))
741- let de = toBase58String(S)
742- let I = toString(bc.caller)
743- let df = T(I)
744- let dg = getString(df)
745- let dh = if (isDefined(dg))
746- then split_4C(value(dg), "_")
765+ let S = value(cG.assetId)
766+ let do = value(assetInfo(S))
767+ let cq = toBase58String(S)
768+ let I = toString(bf.caller)
769+ let dp = T(I)
770+ let dq = getString(dp)
771+ let dr = if (isDefined(dq))
772+ then split_4C(value(dq), "_")
747773 else nil
748- if (containsElement(dh, de))
749- then throw(("Your staked NFTs already contain " + de))
750- else if ((size(dh) >= au))
774+ if (containsElement(dr, cq))
775+ then throw(("Your staked NFTs already contain " + cq))
776+ else if ((size(dr) >= au))
751777 then throw((("Your already staked max (" + toString(au)) + ") NFTs"))
752778 else {
753- let di = StringEntry(df, makeString_2C((dh :+ de), "_"))
754- let dj = (dd.issuer == this)
755- if (dj)
779+ let ds = StringEntry(dp, makeString_2C((dr :+ cq), "_"))
780+ if ((do.issuer == this))
756781 then {
757- let dk = valueOrElse(getInteger(az(I)), 0)
758- if ((dk >= ar))
759- then throw((("You can stake max " + toString(ar)) + " of WavesLands NFTs"))
760- else {
761- let dl = (ci(value(dd.description)) * 10000)
762- let dm = bp(0, I, dl)
763- let ct = dm._1
764- let cu = dm._2
765- $Tuple2((((((ct :+ di) :+ IntegerEntry(az(I), (dk + 1))) :+ IntegerEntry(ax, (valueOrElse(getInteger(ax), 0) + 1))) :+ IntegerEntry(R(de, I), lastBlock.timestamp)) ++ cq), cu)
766- }
782+ let dt = cp(I, cq, (cm(value(do.description)) * 10000), aA(I), ax, ar)
783+ let cw = dt._1
784+ let cx = dt._2
785+ $Tuple2(((cD ++ cw) :+ ds), cx)
767786 }
768- else {
769- let dn = cf(dd)
770- if ((dn == ""))
771- then throw("Only WavesLands and Arkimals NFT tokens are accepted")
772- else {
773- let do = valueOrElse(getInteger(aA(I)), 0)
774- if ((do >= as))
775- then throw((("You can stake max " + toString(as)) + " of Arkimals NFTs"))
776- else {
777- let dp = bp(0, I, at)
778- let ct = dp._1
779- let cu = dp._2
780- $Tuple2(((((ct :+ di) :+ IntegerEntry(aA(I), (do + 1))) :+ IntegerEntry(R(de, I), lastBlock.timestamp)) ++ cq), cu)
781- }
782- }
783- }
787+ else if ((cj(do) == ""))
788+ then throw("Only WavesLands and Arkimals NFT tokens are accepted")
789+ else {
790+ let du = cp(I, cq, at, aB(I), ay, as)
791+ let cw = du._1
792+ let cx = du._2
793+ $Tuple2(((cD ++ cw) :+ ds), cx)
794+ }
784795 }
785796 }
786797 }
787798 }
788799
789800
790801
791-@Callable(bc)
792-func unstakeNFT (de) = {
793- let cq = bb(bc)
794- if ((size(bc.payments) != 0))
802+@Callable(bf)
803+func unstakeNFT (cq) = {
804+ let cD = be(bf)
805+ if ((size(bf.payments) != 0))
795806 then throw("No payments required")
796807 else {
797- let S = fromBase58String(de)
798- let I = toString(bc.caller)
799- let dd = value(assetInfo(S))
800- let bu = R(de, I)
801- if (!(isDefined(getInteger(bu))))
802- then throw((("NFT " + dd.name) + " is not staked by you"))
808+ let S = fromBase58String(cq)
809+ let I = toString(bf.caller)
810+ let do = value(assetInfo(S))
811+ let by = R(cq, I)
812+ if (!(isDefined(getInteger(by))))
813+ then throw((("NFT " + do.name) + " is not staked by you"))
803814 else {
804- let df = T(I)
805- let dh = split_4C(valueOrElse(getString(df), ""), "_")
806- let A = indexOf(dh, de)
815+ let dp = T(I)
816+ let dr = split_4C(valueOrElse(getString(dp), ""), "_")
817+ let A = indexOf(dr, cq)
807818 if (!(isDefined(A)))
808- then throw(("Your staked NFTs don't contain " + de))
819+ then throw(("Your staked NFTs don't contain " + cq))
809820 else {
810- let di = if ((size(dh) > 1))
811- then StringEntry(df, makeString_2C(removeByIndex(dh, value(A)), "_"))
812- else DeleteEntry(df)
813- let dj = (dd.issuer == this)
814- if (dj)
821+ let ds = if ((size(dr) > 1))
822+ then StringEntry(dp, makeString_2C(removeByIndex(dr, value(A)), "_"))
823+ else DeleteEntry(dp)
824+ let dv = (do.issuer == this)
825+ if (dv)
815826 then {
816- let dk = valueOrElse(getInteger(az(I)), 0)
817- let dl = (ci(value(dd.description)) * 10000)
818- let dq = bp(0, I, -(dl))
819- let ct = dq._1
820- let cu = dq._2
821- $Tuple2(((((((ct :+ di) :+ IntegerEntry(az(I), (dk - 1))) :+ IntegerEntry(ax, max([0, (valueOrElse(getInteger(ax), 0) - 1)]))) :+ DeleteEntry(R(toBase58String(S), I))) :+ ScriptTransfer(bc.caller, 1, S)) ++ cq), cu)
827+ let dw = valueOrElse(getInteger(aA(I)), 0)
828+ let dx = (cm(value(do.description)) * 10000)
829+ let dy = bt(0, I, -(dx))
830+ let cw = dy._1
831+ let cx = dy._2
832+ $Tuple2(((((((cw :+ ds) :+ IntegerEntry(aA(I), (dw - 1))) :+ IntegerEntry(ax, max([0, (valueOrElse(getInteger(ax), 0) - 1)]))) :+ DeleteEntry(R(toBase58String(S), I))) :+ ScriptTransfer(bf.caller, 1, S)) ++ cD), cx)
822833 }
823834 else {
824- let dn = cf(dd)
825- if ((dn == ""))
835+ let dz = cj(do)
836+ if ((dz == ""))
826837 then throw("Only WavesLands and Arkimals NFT tokens are accepted")
827838 else {
828- let do = valueOrElse(getInteger(aA(I)), 0)
829- let dr = bp(0, I, -(at))
830- let ct = dr._1
831- let cu = dr._2
832- $Tuple2((((((ct :+ di) :+ IntegerEntry(aA(I), (do - 1))) :+ DeleteEntry(R(toBase58String(S), I))) :+ ScriptTransfer(bc.caller, 1, S)) ++ cq), cu)
839+ let dA = valueOrElse(getInteger(aB(I)), 0)
840+ let dB = bt(0, I, -(at))
841+ let cw = dB._1
842+ let cx = dB._2
843+ $Tuple2((((((cw :+ ds) :+ IntegerEntry(aB(I), (dA - 1))) :+ DeleteEntry(R(toBase58String(S), I))) :+ ScriptTransfer(bf.caller, 1, S)) ++ cD), cx)
833844 }
834845 }
835846 }
836847 }
837848 }
838849 }
839850
840851
841852
842-@Callable(bc)
853+@Callable(bf)
843854 func exchangeNFTs () = {
844- let cq = bb(bc)
845- if ((3 > size(bc.payments)))
855+ let cD = be(bf)
856+ if ((3 > size(bf.payments)))
846857 then throw("Min one USDT and 2 NFT payments allowed")
847- else if ((size(bc.payments) > 6))
858+ else if ((size(bf.payments) > 6))
848859 then throw("Max one USDT and 5 NFT payments allowed")
849860 else {
850- let I = toString(bc.caller)
851- func ds (aH,cv) = {
852- let S = valueOrErrorMessage(cv.assetId, "WAVES payments not allowed")
861+ let I = toString(bf.caller)
862+ func dC (aI,cG) = {
863+ let S = valueOrErrorMessage(cG.assetId, "WAVES payments not allowed")
853864 if ((S == k))
854- then $Tuple3((aH._1 + cv.amount), aH._2, aH._3)
865+ then $Tuple3((aI._1 + cG.amount), aI._2, aI._3)
855866 else {
856- let dd = value(assetInfo(S))
857- if ((dd.issuer != this))
867+ let do = value(assetInfo(S))
868+ if ((do.issuer != this))
858869 then throw("Only WL-issued NFTs allowed")
859870 else {
860- let dt = ci(value(dd.description))
861- $Tuple3(aH._1, (aH._2 + dt), (aH._3 :+ Burn(S, 1)))
871+ let dD = cm(value(do.description))
872+ $Tuple3(aI._1, (aI._2 + dD), (aI._3 :+ Burn(S, 1)))
862873 }
863874 }
864875 }
865876
866- let du = {
867- let aJ = bc.payments
868- let aK = size(aJ)
869- let aL = $Tuple3(0, 0, nil)
870- func aM (aN,aO) = if ((aO >= aK))
871- then aN
872- else ds(aN, aJ[aO])
877+ let dE = {
878+ let aK = bf.payments
879+ let aL = size(aK)
880+ let aM = $Tuple3(0, 0, nil)
881+ func aN (aO,aP) = if ((aP >= aL))
882+ then aO
883+ else dC(aO, aK[aP])
873884
874- func aP (aN,aO) = if ((aO >= aK))
875- then aN
885+ func aQ (aO,aP) = if ((aP >= aL))
886+ then aO
876887 else throw("List size exceeds 6")
877888
878- aP(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6)
889+ aQ(aN(aN(aN(aN(aN(aN(aM, 0), 1), 2), 3), 4), 5), 6)
879890 }
880- let dv = du._1
881- let dw = du._2
882- let dx = du._3
883- let bl = if ((dw == 3))
891+ let dF = dE._1
892+ let dG = dE._2
893+ let dH = dE._3
894+ let bo = if ((dG == 3))
884895 then 2
885- else if ((dw == 5))
896+ else if ((dG == 5))
886897 then 3
887- else if ((dw == 10))
898+ else if ((dG == 10))
888899 then 4
889900 else throw("Only bonuses of 3%, 5% or 10% are supported")
890- let dy = (dv - (dw * b))
891- if ((0 > dy))
892- then throw((("You need to attach " + toString(dw)) + " USDT as fee"))
901+ let dI = (dF - (dG * b))
902+ if ((0 > dI))
903+ then throw((("You need to attach " + toString(dG)) + " USDT as fee"))
893904 else {
894- let dz = if ((dy > 0))
895- then [ScriptTransfer(bc.caller, dy, k)]
905+ let dJ = if ((dI > 0))
906+ then [ScriptTransfer(bf.caller, dI, k)]
896907 else nil
897- let dA = bk(bl, bc.caller)
898- let dB = dA._1
899- let bo = dA._2
900- let dC = size(dx)
901- let dD = if ((dC == 0))
908+ let dK = bq(bo, bf.caller)
909+ let dL = dK._1
910+ let bs = dK._2
911+ let dM = size(dH)
912+ let dN = if ((dM == 0))
902913 then nil
903- else [IntegerEntry(aw, (valueOrElse(getInteger(aw), 0) + dC))]
904- $Tuple2(((((dB ++ dx) ++ dD) ++ cq) ++ dz), bo)
914+ else [IntegerEntry(aw, (valueOrElse(getInteger(aw), 0) + dM))]
915+ $Tuple2(((((dL ++ dH) ++ dN) ++ cD) ++ dJ), bs)
905916 }
906917 }
907918 }
908919
909920

github/deemru/w8io/169f3d6 
358.17 ms