tx · DqNMsQaMHFX6VTsFzhcgJCp7Vf9ggPeRWDEAkvV2ZQ6c 3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm: -0.06600000 Waves 2023.06.19 14:34 [2629454] smart account 3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm > SELF 0.00000000 Waves
{ "type": 13, "id": "DqNMsQaMHFX6VTsFzhcgJCp7Vf9ggPeRWDEAkvV2ZQ6c", "fee": 6600000, "feeAssetId": null, "timestamp": 1687174488197, "version": 2, "chainId": 84, "sender": "3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm", "senderPublicKey": "EVooykMNV691Venwp1dHUTBd7KWequzUcda57Wd3LQEX", "proofs": [ "2Cjjm8bEPYuVyZuR3h1yUpa4fXU8c5ToCoFRSdkciWCaB8e8WaHd6jWd8itNPjXr5MXPii4uE3PiFdxFRemKmw8Z" ], "script": "base64:BgKYAQgCEgMKAQgSAwoBBBIAEgMKAQgSABIDCgEIEgQKAgEIEgQKAgEIEgQKAgICEgUKAwEBARIAEgQKAggIEgASBAoCAgISAwoBCBIDCgEIEgQKAggIEgMKARgSAwoBGBIECgIICBIECgIICBIDCgEIEgMKAQgSBQoDCAgIEgQKAggIEgMKAQESBQoDAQEIEgMKAQgSAwoBCBIAvQEABWNoYWluCQDJAQIJAMoBAggFBHRoaXMFYnl0ZXMAAQABAAt1c2R0QXNzZXRJZAQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAEghNp6sggDP07Ru8qO7ouTvMmC3Qtd+geWqNQj+agP/7kDCQAAAgEBVAUHJG1hdGNoMAEgVbHYn3KHgu/l41uNrAWrZd6aQ6EvFrsF8xq3h6XxxRgJAAIBAg1Vbmtub3duIGNoYWluABVkZWZhdWx0UmVzdEFkZHJlc3NTdHIEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDACIzNQUUN1dkZidmg0TGtQVW5yblUxejNqbmJBMXA5bTNXTmh2AwkAAAIBAVQFByRtYXRjaDACIzNNdW1rR0d6dENLQVhwV0RxeGtkZG9mcVhTVWJxUWt2U0p5CQACAQINVW5rbm93biBjaGFpbgARSW5mcmFVcGdyYWRlQ29zdFMEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAAgMivoCUDCQAAAgEBVAUHJG1hdGNoMACAwtcvCQACAQINVW5rbm93biBjaGFpbgADU0VQAgJfXwAFTVVMVDYAwIQ9AAVNVUxUNwCAreIEAAVNVUxUOACAwtcvAAZNVUxUMTAAgMivoCUACkxBTkRQUkVGSVgCBExBTkQACkRVQ0tQUkVGSVgCBERVQ0sACkFSVFBSRVNBTEUCB1BSRVNBTEUABk5VTVJFUwAGAAVTU0laRQAZAAVNU0laRQBkAAVMU0laRQDhAQAGWExTSVpFAJADAAdYWExTSVpFAPEEAA9EQUlMWVJFU0JZUElFQ0UAgPjSAQAJREFZTUlMTElTAIC4mSkADFdITVVMVElQTElFUgCAyK+gJQAPREVGQVVMVExPQ0FUSU9OAg9BZnJpY2FfRl9BZnJpY2EAEFJFU09VUkNFUFJJQ0VNSU4A1bUCAA1FU01BWFBBQ0tBR0VTAAMACUVTQlVZQ09FRgAEAApFU1NFTExDT0VGAAoABU1BWEhQAGQACHJlc1R5cGVzCQDMCAICA09pbAkAzAgCAgNPcmUJAMwIAgIEV29vZAkAzAgCAgRTYW5kCQDMCAICBENsYXkJAMwIAgIHT3JnYW5pYwUDbmlsAAhtYXRUeXBlcwkAzAgCAgRGdWVsCQDMCAICBU1ldGFsCQDMCAICBVBsYW5rCQDMCAICBUdsYXNzCQDMCAICB1BsYXN0aWMJAMwIAgIHUHJvdGVpbgUDbmlsAAlwcm9kVHlwZXMJAMwIAgIQRmlyc3QgQWlkIEtpdCBMMQkAzAgCAhBGaXJzdCBBaWQgS2l0IEwyCQDMCAICEEZpcnN0IEFpZCBLaXQgTDMJAMwIAgILQmFja3BhY2sgTDEJAMwIAgILQmFja3BhY2sgTDIJAMwIAgILQmFja3BhY2sgTDMJAMwIAgIORm9vZCBSYXRpb24gTDEJAMwIAgIORm9vZCBSYXRpb24gTDIJAMwIAgIORm9vZCBSYXRpb24gTDMJAMwIAgILSmV0IFBhY2sgTDEJAMwIAgILSmV0IFBhY2sgTDIJAMwIAgILSmV0IFBhY2sgTDMJAMwIAgIJU2hpZWxkIEwxCQDMCAICCVNoaWVsZCBMMgkAzAgCAglTaGllbGQgTDMFA25pbAAKY29udGluZW50cwkAzAgCAghBbWVyaWNhcwkAzAgCAgZFdXJvcGUJAMwIAgIEQXNpYQkAzAgCAgZBZnJpY2EJAMwIAgIHT2NlYW5pYQUDbmlsABBwcm9kdWN0aW9uTWF0cml4CQDMCAICEjFfMV8xXzJfMl81XzFfMTBfMAkAzAgCAhMyXzJfMl80XzRfMTBfMV8xMF8wCQDMCAICEzNfM18zXzZfNl8xNV8xXzEwXzAJAMwIAgITMl81XzVfMl83XzVfMl8xMDBfMQkAzAgCAhc0XzEwXzEwXzRfMTRfMTBfMl8xMDBfMQkAzAgCAhc2XzE1XzE1XzZfMjFfMTVfMl8xMDBfMQkAzAgCAhIxXzFfMV8xXzFfOF8xXzEwXzIJAMwIAgITMl8yXzJfMl8yXzE2XzFfMTBfMgkAzAgCAhMzXzNfM18zXzNfMjRfMV8xMF8yCQDMCAICEzlfOV8xXzVfNV8xXzVfMTAwXzMJAMwIAgIXMThfMThfMl8xMF8xMF8yXzVfMTAwXzMJAMwIAgIXMjdfMjdfM18xNV8xNV8zXzVfMTAwXzMJAMwIAgISMl8yXzFfMl8yXzJfMV8xMF80CQDMCAICEjRfNF8yXzRfNF80XzFfMTBfNAkAzAgCAhI2XzZfM182XzZfNl8xXzEwXzQFA25pbAAPY29udElkeEFtZXJpY2FzAAAADWNvbnRJZHhFdXJvcGUAAQALY29udElkeEFzaWEAAgANY29udElkeEFmcmljYQADAA5jb250SWR4T2NlYW5pYQAEAA1yZWNpcGVJZHhGdWVsAAAADnJlY2lwZUlkeE1ldGFsAAEADnJlY2lwZUlkeFBsYW5rAAIADnJlY2lwZUlkeEdsYXNzAAMAEHJlY2lwZUlkeFBsYXN0aWMABAAQcmVjaXBlSWR4UHJvdGVpbgAFAA9yZWNpcGVJZHhXZWlnaHQABgARcmVjaXBlSWR4UGFja3NpemUABwAScmVjaXBlSWR4Q29udGluZW50AAgACnJlY0xhbmROdW0AAAALcmVjTGFuZFNpemUAAQALcmVjVGVycmFpbnMAAgAMcmVjQ29udGluZW50AAMAC3doSWR4TGV2ZWxzAAAACHdoSWR4UmVzAAEACHdoSWR4TWF0AAIACXdoSWR4UHJvZAADAAl3aElkeExPRlQABAAJdm9sTG9ja2VkAAAAC3ZvbE9jY3VwaWVkAAEAB3ZvbEZyZWUAAgAIdm9sVG90YWwAAwAKYnBJZHhMZXZlbAAAAAhicElkeFJlcwABAAhicElkeE1hdAACAAlicElkeFByb2QAAwEKZ2V0UGtnU2l6ZQEHcHJvZElkeAkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4BQdwcm9kSWR4AgFfBRFyZWNpcGVJZHhQYWNrc2l6ZQEPZ2V0U3RyaW5nT3JGYWlsAgdhZGRyZXNzA2tleQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFB2FkZHJlc3MFA2tleQkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQdhZGRyZXNzCQDMCAICAS4JAMwIAgUDa2V5CQDMCAICDyBpcyBub3QgZGVmaW5lZAUDbmlsAgABDGdldEludE9yRWxzZQIDa2V5CmRlZmF1bHRWYWwJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUDa2V5BQpkZWZhdWx0VmFsABFJZHhDZmdTdGFraW5nRGFwcAABABFJZHhDZmdFY29ub215RGFwcAACABRJZHhDZmdHb3Zlcm5hbmNlRGFwcAADAA1JZHhDZmdXbGdEYXBwAAQBCmtleVJlc3RDZmcAAg4lc19fcmVzdENvbmZpZwEOa2V5UmVzdEFkZHJlc3MAAgwlc19fcmVzdEFkZHIBEXJlYWRSZXN0Q2ZnT3JGYWlsAQRyZXN0CQC8CQIJAQ9nZXRTdHJpbmdPckZhaWwCBQRyZXN0CQEKa2V5UmVzdENmZwAFA1NFUAEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgdyZXN0Q2ZnA2lkeAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUHcmVzdENmZwUDaWR4CQCsAgICKlJlc3QgY2ZnIGRvZXNuJ3QgY29udGFpbiBhZGRyZXNzIGF0IGluZGV4IAkApAMBBQNpZHgADHJlc3RDb250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzCQEOa2V5UmVzdEFkZHJlc3MABRVkZWZhdWx0UmVzdEFkZHJlc3NTdHIAB3Jlc3RDZmcJARFyZWFkUmVzdENmZ09yRmFpbAEFDHJlc3RDb250cmFjdAAPc3Rha2luZ0NvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwURSWR4Q2ZnU3Rha2luZ0RhcHAAD2Vjb25vbXlDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFEUlkeENmZ0Vjb25vbXlEYXBwAAtnb3ZDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFFElkeENmZ0dvdmVybmFuY2VEYXBwAAt3bGdDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFDUlkeENmZ1dsZ0RhcHABEWtleUxhc3RUeElkQnlVc2VyAQRhZGRyCQCsAgICD2xhc3RUeElkQnlVc2VyXwUEYWRkcgEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQdhc3NldElkCQCsAgICCW5mdE93bmVyXwUHYXNzZXRJZAEaa2V5TGFuZEFzc2V0SWRUb0N1c3RvbU5hbWUBB2Fzc2V0SWQJAKwCAgIYbGFuZEN1c3RvbU5hbWVCeUFzc2V0SWRfBQdhc3NldElkARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQdhc3NldElkCQCsAgICC3N0YWtlZFRpbWVfBQdhc3NldElkARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQdhc3NldElkCQCsAgICC2luZnJhTGV2ZWxfBQdhc3NldElkASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIEdHlwZQdhc3NldElkCQC5CQIJAMwIAgINbGFuZEFydFN0YXR1cwkAzAgCBQR0eXBlCQDMCAIFB2Fzc2V0SWQFA25pbAIBXwEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMHbmZ0VHlwZQdhc3NldElkCW93bmVyQWRkcgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICIHN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXJfBQduZnRUeXBlAgFfBQdhc3NldElkAgFfBQlvd25lckFkZHIBEmtleVdhcmVob3VzZUJ5TGFuZAELbGFuZEFzc2V0SWQJAKwCAgIKd2FyZUhvdXNlXwULbGFuZEFzc2V0SWQBFWtleVN0YWtlZExhbmRzQnlPd25lcgEJb3duZXJBZGRyCQCsAgICE3N0YWtlZExhbmRzQnlPd25lcl8FCW93bmVyQWRkcgEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEJb3duZXJBZGRyCQCsAgICFHN0YWtlZFBpZWNlc0J5T3duZXJfBQlvd25lckFkZHIBGmtleUR1Y2tBc3NldElkVG9DdXN0b21OYW1lAQdhc3NldElkCQCsAgICGGR1Y2tDdXN0b21OYW1lQnlBc3NldElkXwUHYXNzZXRJZAEWa2V5QWRkcmVzc1RvQ3VzdG9tTmFtZQEEYWRkcgkArAICAhhhY2NvdW50Q3VzdG9tTmFtZUJ5QWRkcl8FBGFkZHIBD2tleUFkZHJlc3NSZWZCeQEEYWRkcgkArAICAglhY2NSZWZCeV8FBGFkZHIBE2tleUFkZHJlc3NSZWZlcnJhbHMBBGFkZHIJAKwCAgINYWNjUmVmZXJyYWxzXwUEYWRkcgEQa2V5RHVja0lkVG9Pd25lcgEHYXNzZXRJZAkArAICAgpkdWNrT3duZXJfBQdhc3NldElkARRrZXlTdGFrZWREdWNrQnlPd25lcgEJb3duZXJBZGRyCQCsAgICEnN0YWtlZER1Y2tCeU93bmVyXwUJb3duZXJBZGRyARFrZXlCYWNrcGFja0J5RHVjawELZHVja0Fzc2V0SWQJAKwCAgIJYmFja1BhY2tfBQtkdWNrQXNzZXRJZAEPa2V5RHVja0xvY2F0aW9uAQtkdWNrQXNzZXRJZAkArAICAg1kdWNrTG9jYXRpb25fBQtkdWNrQXNzZXRJZAENa2V5RHVja0hlYWx0aAELZHVja0Fzc2V0SWQJAKwCAgILZHVja0hlYWx0aF8FC2R1Y2tBc3NldElkARFrZXlSZXNQcm9wb3J0aW9ucwACE3Jlc1R5cGVzUHJvcG9ydGlvbnMBCmtleUJsb2NrZWQAAhBjb250cmFjdHNCbG9ja2VkARVrZXlVc2VyR3dsUmVsZWFzZVRpbWUBCHVzZXJBZGRyCQCsAgICGiVzJXNfX3VzZXJHd2xSZWxlYXNlVGltZV9fBQh1c2VyQWRkcgEOa2V5T3JkZXJCeUxhbmQBC2xhbmRBc3NldElkCQCsAgICCmxhbmRPcmRlcl8FC2xhbmRBc3NldElkAQ5rZXlFc1dhcmVob3VzZQACGmVtZXJnZW5jeVdhcmVob3VzZVByb2R1Y3RzAA9sb2NJZHhDb250aW5lbnQAAAAKbG9jSWR4VHlwZQABAAhsb2NJZHhJZAACAQhhc1N0cmluZwEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAFAXMJAAIBAhhmYWlsIHRvIGNhc3QgaW50byBTdHJpbmcBBWFzSW50AQF2BAckbWF0Y2gwBQF2AwkAAQIFByRtYXRjaDACA0ludAQBbgUHJG1hdGNoMAUBbgkAAgECFWZhaWwgdG8gY2FzdCBpbnRvIEludAEJYXNBbnlMaXN0AQF2BAckbWF0Y2gwBQF2AwkAAQIFByRtYXRjaDACCUxpc3RbQW55XQQBbAUHJG1hdGNoMAUBbAkAAgECG2ZhaWwgdG8gY2FzdCBpbnRvIExpc3RbQW55XQEJYXNCb29sZWFuAQF2BAckbWF0Y2gwBQF2AwkAAQIFByRtYXRjaDACB0Jvb2xlYW4EAXMFByRtYXRjaDAFAXMJAAIBAhlmYWlsIHRvIGNhc3QgaW50byBCb29sZWFuAQ9udW1QaWVjZXNCeVNpemUBCGxhbmRTaXplBAckbWF0Y2gwBQhsYW5kU2l6ZQMJAAACAgFTBQckbWF0Y2gwBQVTU0laRQMJAAACAgFNBQckbWF0Y2gwBQVNU0laRQMJAAACAgFMBQckbWF0Y2gwBQVMU0laRQMJAAACAgJYTAUHJG1hdGNoMAUGWExTSVpFAwkAAAICA1hYTAUHJG1hdGNoMAUHWFhMU0laRQkAAgECEVVua25vd24gbGFuZCBzaXplAAtJZHhFZmZUb3RhbAAAAApJZHhFZmZVc2VyAAEBDmdldFZvdGluZ1Bvd2VyARJ1c2VyQWRkclN0ck9yRW1wdHkEBXByb3BzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQERa2V5UmVzUHJvcG9ydGlvbnMAAgswXzBfMF8wXzBfMAIBXwoBBWFkZGVyAgNhY2MEaXRlbQkAZAIFA2FjYwkBDXBhcnNlSW50VmFsdWUBBQRpdGVtBAp0b3RhbFBvd2VyCgACJGwFBXByb3BzCgACJHMJAJADAQUCJGwKAAUkYWNjMAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQVhZGRlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgQKdXNlcnNQb3dlcgMJAAACBRJ1c2VyQWRkclN0ck9yRW1wdHkCAAAABAhsYW5kc1N0cgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARVrZXlTdGFrZWRMYW5kc0J5T3duZXIBBRJ1c2VyQWRkclN0ck9yRW1wdHkEBWxh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TkRTAPQDARJrZXlOZXh0RnJlZUxhbmROdW0AAgtuZXh0TGFuZE51bQEQa2V5TGFuZFRvQXNzZXRJZAEHbGFuZE51bQkArAICAgxsYW5kVG9Bc3NldF8FB2xhbmROdW0BGmtleUxhbmRDdXN0b21OYW1lVG9Bc3NldElkAQRuYW1lCQCsAgICEWxhbmRCeUN1c3RvbU5hbWVfBQRuYW1lAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICB2Fzc2V0SWQJb3duZXJBZGRyCQCsAgIJAKwCAgkArAICAhxpbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXJfBQdhc3NldElkAgFfBQlvd25lckFkZHIBJWtleUxhbmRBcnRTdGF0dXNCeVR5cGVBc3NldElkQW5kT3duZXIDBHR5cGUHYXNzZXRJZAlvd25lckFkZHIJALkJAgkAzAgCAiJsYW5kQXJ0U3RhdHVzQnlUeXBlQXNzZXRJZEFuZE93bmVyCQDMCAIFBHR5cGUJAMwIAgUHYXNzZXRJZAkAzAgCBQlvd25lckFkZHIFA25pbAIBXwERa2V5TGFuZE51bVRvT3duZXIBB2xhbmROdW0JAKwCAgIKbGFuZE93bmVyXwUHbGFuZE51bQEaa2V5RHVja0N1c3RvbU5hbWVUb0Fzc2V0SWQBBG5hbWUJAKwCAgIRZHVja0J5Q3VzdG9tTmFtZV8FBG5hbWUBFmtleUN1c3RvbU5hbWVUb0FkZHJlc3MBBG5hbWUJAKwCAgIUYWNjb3VudEJ5Q3VzdG9tTmFtZV8FBG5hbWUBCWtleU9sZGllcwACCm9sZGllc0xpc3QAC2NsYWltTW9kZVdoAAAADWNsYWltTW9kZUR1Y2sAAQATY2xhaW1Nb2RlV2hUaGVuRHVjawACAAhmbEhlYWx0aAAAAAlmbE1pc3Npb24AAQALZmxPYnN0YWNsZXMAAgAHZmxXaW5kcwADAAZmbFBhdGgABAALZmxUaW1lc3RhbXAABQAHZmxCb251cwAGAQduZnROYW1lAgdsYW5kTnVtCGxhbmRTaXplCQCsAgIJAKwCAgUKTEFORFBSRUZJWAUHbGFuZE51bQUIbGFuZFNpemUBE2Rpc3RyaWJ1dGVCeVdlaWdodHMCBXRvdGFsB3dlaWdodHMEA3N1bQkAZAIJAGQCCQBkAgkAZAIJAGQCCQCRAwIFB3dlaWdodHMAAAkAkQMCBQd3ZWlnaHRzAAEJAJEDAgUHd2VpZ2h0cwACCQCRAwIFB3dlaWdodHMAAwkAkQMCBQd3ZWlnaHRzAAQJAJEDAgUHd2VpZ2h0cwAFAwkAZwIAAAUDc3VtCQACAQIQWmVybyB3ZWlnaHRzIHN1bQQFbm9ybTYJAGsDBQV0b3RhbAUFTVVMVDYFA3N1bQoBCm5vcm1hbGl6ZXICA2FjYwRlbGVtCQDNCAIFA2FjYwkAawMFBGVsZW0FBW5vcm02BQVNVUxUNgoAAiRsBQd3ZWlnaHRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQpub3JtYWxpemVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGARJnZXROZWVkZWRNYXRlcmlhbHMBBXRvdGFsBAVwcm9wcwkAtQkCCQEFdmFsdWUBCQCiCAEJARFrZXlSZXNQcm9wb3J0aW9ucwACAV8DCQECIT0CCQCQAwEFBXByb3BzBQZOVU1SRVMJAAIBAhZXcm9uZyBwcm9wb3J0aW9ucyBkYXRhBAFyCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwAACQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwABCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwACCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwADCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwAECQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwAFBQNuaWwJARNkaXN0cmlidXRlQnlXZWlnaHRzAgUFdG90YWwFAXIBEXN1YnRyYWN0TWF0ZXJpYWxzAwxzaG91bGRVc2VNYXQDaGFzCXRvdGFsTmVlZAQEbmVlZAkBEmdldE5lZWRlZE1hdGVyaWFscwEFCXRvdGFsTmVlZAoBCnN1YnRyYWN0b3ICA2FjYwNpZHgEBnJlc3VsdAkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQNoYXMFA2lkeAkAkQMCBQRuZWVkBQNpZHgDCQBmAgAABQZyZXN1bHQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIYTm90IGVub3VnaCBtYXRlcmlhbCBpZHg9CQCkAwEFA2lkeAILLCB5b3UgaGF2ZSAJAJEDAgUDaGFzBQNpZHgCCywgYnV0IG5lZWQgCQCkAwEJAJEDAgUEbmVlZAUDaWR4CQDNCAIFA2FjYwkApAMBBQZyZXN1bHQDBQxzaG91bGRVc2VNYXQKAAIkbAkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQpzdWJ0cmFjdG9yAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGBQNoYXMBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwECHByb3BMaXN0DXRlcnJhaW5Db3VudHMNbGFuZFNpemVJbmRleARzaWduAwkBAiE9AgkAkAMBBQhwcm9wTGlzdAUGTlVNUkVTCQACAQIWV3JvbmcgcHJvcG9ydGlvbnMgZGF0YQoBB3VwZGF0ZXICA2FjYwFpBAZyZXN1bHQJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvcExpc3QFAWkJAGgCCQBoAgUEc2lnbgkAkQMCBQ10ZXJyYWluQ291bnRzBQFpBQ1sYW5kU2l6ZUluZGV4AwkAZgIAAAUGcmVzdWx0CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhZQYW5pYyEgUGllY2VzIG9mIHR5cGU9CQCkAwEFAWkCBywgc2lnbj0JAKQDAQUEc2lnbgIULCAgdGVycmFpbkNvdW50c1tpXT0JAKQDAQkAkQMCBQ10ZXJyYWluQ291bnRzBQFpAhAsIGxhbmRTaXplSW5kZXg9CQCkAwEFDWxhbmRTaXplSW5kZXgJAM0IAgUDYWNjCQCkAwEFBnJlc3VsdAQBcgoAAiRsCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFBQNuaWwKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBB3VwZGF0ZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYJALkJAgUBcgIBXwERdXBkYXRlUHJvcG9ydGlvbnMDDXRlcnJhaW5Db3VudHMNbGFuZFNpemVJbmRleARzaWduBAhwcm9wTGlzdAkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEJARFrZXlSZXNQcm9wb3J0aW9ucwACCzBfMF8wXzBfMF8wAgFfCQEZdXBkYXRlUHJvcG9ydGlvbnNJbnRlcm5hbAQFCHByb3BMaXN0BQ10ZXJyYWluQ291bnRzBQ1sYW5kU2l6ZUluZGV4BQRzaWduAQ1jb3VudFRlcnJhaW5zAQh0ZXJyYWlucwkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFBAAEJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBQgABCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUMAAQkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFEAAEJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBRQABCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUYAAQUDbmlsAQZhZGRSZXMFCmN1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cAUIYnBJZHhSZXMCAV8FBk5VTVJFUwkAkQMCBQFwBQhicElkeFJlcwILMF8wXzBfMF8wXzAJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQFwBQhicElkeE1hdAIBXwUGTlVNUkVTCQCRAwIFAXAFCGJwSWR4TWF0AgswXzBfMF8wXzBfMAkAzAgCCQCRAwIFAXAFCWJwSWR4UHJvZAUDbmlsARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEJdm9sUHJlZml4BAVwYXJ0cwkAtQkCBQl2b2xQcmVmaXgCAV8JAGgCCQBoAgUMV0hNVUxUSVBMSUVSCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXBhcnRzAAEAAQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXBhcnRzAAABF2dldFdhcmVob3VzZU9jY3VwaWVkVm9sAQljdXJyZW50V2gEBWdvb2RzCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kCgEJc3VtUmVzTWF0AgNhY2MEaXRlbQkAZAIFA2FjYwkBDXBhcnNlSW50VmFsdWUBBQRpdGVtCgEHc3VtUHJvZAIDYWNjBGl0ZW0EA2lkeAgFA2FjYwJfMQQHcGtnU2l6ZQkBCmdldFBrZ1NpemUBBQNpZHgEBHBrZ3MJAGkCCQBlAgkAZAIJAQ1wYXJzZUludFZhbHVlAQUEaXRlbQUHcGtnU2l6ZQABBQdwa2dTaXplCQCUCgIJAGQCBQNpZHgAAQkAZAIIBQNhY2MCXzIJAGgCBQRwa2dzBQVNVUxUOAQId2hSZXNWb2wKAAIkbAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8KAAIkcwkAkAMBBQIkbAoABSRhY2MwAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCXN1bVJlc01hdAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgQId2hNYXRWb2wKAAIkbAkA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BQh3aElkeFJlcwIBXwUGTlVNUkVTCQCRAwIFAndoBQh3aElkeFJlcwILMF8wXzBfMF8wXzAJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQJ3aAUId2hJZHhNYXQCAV8FBk5VTVJFUwkAkQMCBQJ3aAUId2hJZHhNYXQCCzBfMF8wXzBfMF8wCQDMCAIJAJEDAgUCd2gFCXdoSWR4UHJvZAkAzAgCBQZ3aExvZnQFA25pbAEVZ2V0V2FyZWhvdXNlU3BhY2VMZWZ0AQljdXJyZW50V2gEC29jY3VwaWVkVm9sCQEXZ2V0V2FyZWhvdXNlT2NjdXBpZWRWb2wBBQljdXJyZW50V2gED2N1cnJXaExvY2tlZFZvbAkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4TE9GVAIBXwUJdm9sTG9ja2VkCQBlAgkAZQIJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEJAJEDAgUJY3VycmVudFdoBQt3aElkeExldmVscwULb2NjdXBpZWRWb2wFD2N1cnJXaExvY2tlZFZvbAEIdG9Wb2x1bWUCBmFtb3VudAdwa2dTaXplBARwa2dzAwkAZwIFBmFtb3VudAAACQBpAgkAZQIJAGQCBQZhbW91bnQFB3BrZ1NpemUAAQUHcGtnU2l6ZQkBAS0BCQBpAgkAZQIJAGQCCQEBLQEFBmFtb3VudAUHcGtnU2l6ZQABBQdwa2dTaXplCQBoAgUEcGtncwUFTVVMVDgBCW1vdmVTdHVmZgMKY2FyZ29QYXJ0cwljdXJyZW50V2gLY3VycmVudFBhY2sDCQECIT0CCQCQAwEFCmNhcmdvUGFydHMAAwkAAgECNGNhcmdvTGlzdFN0ciBzaG91bGQgY29udGFpbiBleGFjdGx5IDIgJzonIHNlcGFyYXRvcnMECHJlc1BhcnRzCQC1CQIJAJEDAgUKY2FyZ29QYXJ0cwAAAgFfBAhtYXRQYXJ0cwkAtQkCCQCRAwIFCmNhcmdvUGFydHMAAQIBXwQJcHJvZFBhcnRzAwkAAAIJAJEDAgUKY2FyZ29QYXJ0cwACAgAFA25pbAkAtQkCCQCRAwIFCmNhcmdvUGFydHMAAgIBXwMJAQIhPQIJAJADAQUIcmVzUGFydHMFBk5VTVJFUwkAAgECIEFsbCA2IHJlc291cmNlcyBzaG91bGQgYmUgcGFzc2VkAwkBAiE9AgkAkAMBBQhtYXRQYXJ0cwUGTlVNUkVTCQACAQIgQWxsIDYgbWF0ZXJpYWxzIHNob3VsZCBiZSBwYXNzZWQEC3doU3BhY2VMZWZ0CQEVZ2V0V2FyZWhvdXNlU3BhY2VMZWZ0AQUJY3VycmVudFdoBAljdXJyV2hSZXMJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfBAljdXJyV2hNYXQJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0AgFfBApjdXJyV2hQcm9kAwkAAAIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAAUDbmlsCQC1CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAV8EDmN1cnJlbnRQYWNrUmVzCQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfBA5jdXJyZW50UGFja01hdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQPY3VycmVudFBhY2tQcm9kAwkAAAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIABQNuaWwJALUJAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgFfCgEDbXZSAgNhY2MEaXRlbQQBaQgFA2FjYwJfMQQCYW0JAQ1wYXJzZUludFZhbHVlAQUEaXRlbQQDd2hyCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJY3VycldoUmVzBQFpBANicHIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5jdXJyZW50UGFja1JlcwUBaQMJAAACBQJhbQAACQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkAkQMCBQljdXJyV2hSZXMFAWkJAM0IAggFA2FjYwJfMwkAkQMCBQ5jdXJyZW50UGFja1JlcwUBaQgFA2FjYwJfNAMJAGYCBQJhbQAAAwkAZgIFAmFtBQNicHIJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAFBGl0ZW0CGSBmcm9tIGJhY2twYWNrLCBidXQgb25seSAJAKQDAQUDYnByAgogYXZhaWxhYmxlCQCW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Y2MCXzMJAKQDAQUDYnBwCAUDYWNjAl80AwkAZgIFAmFtAAADCQBmAgUCYW0FA2JwcAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byB0YWtlIAUEaXRlbQIZIGZyb20gYmFja3BhY2ssIGJ1dCBvbmx5IAkApAMBBQNicHACCiBhdmFpbGFibGUECGRlbHRhVm9sCQBlAgkBCHRvVm9sdW1lAgkAZAIFA3docAUCYW0FB3BrZ1NpemUJAQh0b1ZvbHVtZQIFA3docAUHcGtnU2l6ZQkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZAIFA3docAUCYW0JAM0IAggFA2FjYwJfMwkApAMBCQBlAgUDYnBwBQJhbQkAZAIIBQNhY2MCXzQFCGRlbHRhVm9sAwkAZgIJAQEtAQUCYW0FA3docAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byB0YWtlIAkApAMBCQEBLQEFAmFtAhogZnJvbSB3YXJlaG91c2UsIGJ1dCBvbmx5IAkApAMBBQN3aHACCiBhdmFpbGFibGUECGRlbHRhVm9sCQBlAgkBCHRvVm9sdW1lAgkAZAIFA3docAUCYW0FB3BrZ1NpemUJAQh0b1ZvbHVtZQIFA3docAUHcGtnU2l6ZQkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZAIFA3docAUCYW0JAM0IAggFA2FjYwJfMwkApAMBCQBlAgUDYnBwBQJhbQkAZAIIBQNhY2MCXzQFCGRlbHRhVm9sBAFwAwkBAiE9AgkAkAMBBQlwcm9kUGFydHMAAAoAAiRsBQlwcm9kUGFydHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCWCgQAAAUDbmlsBQNuaWwIBQFtAl80CgEFJGYyXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQNtdlACBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjJfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDUwCQEFJGYyXzICCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgkAlgoEAAAFCmN1cnJXaFByb2QFD2N1cnJlbnRQYWNrUHJvZAgFAW0CXzQECHZvbFNhbGRvCAUBcAJfNAMJAGYCBQh2b2xTYWxkbwULd2hTcGFjZUxlZnQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICFUF0dGVtcHQgdG8gcHV0IHRvdGFsIAkApAMBBQh2b2xTYWxkbwIRIHN0dWZmLCBidXQgb25seSAJAKQDAQULd2hTcGFjZUxlZnQCFSB3YXJlaG91c2Ugc3BhY2UgbGVmdAkAmQoHCQC5CQIIBQFyAl8yAgFfCQC5CQIIBQFtAl8yAgFfCQC5CQIIBQFwAl8yAgFfCQC5CQIIBQFyAl8zAgFfCQC5CQIIBQFtAl8zAgFfCQC5CQIIBQFwAl8zAgFfBQh2b2xTYWxkbwESZXhwZWRpdGlvbkludGVybmFsAgZjYWxsZXIEdHhJZAQIdXNlckFkZHIJAKUIAQUGY2FsbGVyBAZiaWdOdW0JAQNhYnMBCQCeAwEFBHR4SWQEB2ZyZWVOdW0JAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBEmtleU5leHRGcmVlTGFuZE51bQAJAGQCBQ9QUkVTQUxFTlVNTEFORFMAAQQHbGFuZE51bQkApAMBBQdmcmVlTnVtBAxjb250aW5lbnRJZHgJAKADAQkAuwICBQZiaWdOdW0FBUZJVkVYBAh0ZXJyYWlucwkBC2dlblRlcnJhaW5zAgUGYmlnTnVtBQxjb250aW5lbnRJZHgECWNvbnRpbmVudAkAkQMCBQpjb250aW5lbnRzBQxjb250aW5lbnRJZHgEBWlzc3VlCQDCCAUJAQduZnROYW1lAgUHbGFuZE51bQIBUwkAuQkCCQDMCAIFB2xhbmROdW0JAMwIAgIBUwkAzAgCBQh0ZXJyYWlucwkAzAgCBQljb250aW5lbnQFA25pbAIBXwABAAAHBAdhc3NldElkCQC4CAEFBWlzc3VlBAJpZAkA2AQBBQdhc3NldElkCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJARJrZXlOZXh0RnJlZUxhbmROdW0ACQBkAgUHZnJlZU51bQABCQDMCAIFBWlzc3VlCQDMCAIJAQtTdHJpbmdFbnRyeQIJARBrZXlMYW5kVG9Bc3NldElkAQUHbGFuZE51bQUCaWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFAmlkBQh1c2VyQWRkcgkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5TGFuZE51bVRvT3duZXIBBQdsYW5kTnVtBQh1c2VyQWRkcgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQJpZAAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAgUCaWQFCHVzZXJBZGRyAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUGY2FsbGVyAAEFB2Fzc2V0SWQFA25pbAkAlAoCBQJpZAUJY29udGluZW50ARBleHBlZGl0aW9uQ29tbW9uBQxzaG91bGRVc2VNYXQGY2FsbGVyBHR4SWQHbWVzc2FnZQNzaWcDCQEBIQEJAMQTAwUHbWVzc2FnZQUDc2lnBQNwdWIJAAIBAhhzaWduYXR1cmUgZG9lcyBub3QgbWF0Y2gEBXBhcnRzCQC1CQIJALAJAQUHbWVzc2FnZQIBOwQJZmxpZ2h0TG9nCQC1CQIJAJEDAgUFcGFydHMAAAIBfAQCaHAJALUJAgkAkQMCBQlmbGlnaHRMb2cFCGZsSGVhbHRoAgFfBAVjdXJIUAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmhwAAAEBW5ld0hQCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCaHAAAQQLbmV3TG9jVHhWZXIJALUJAgkAkQMCBQVwYXJ0cwABAgE6BAtuZXdMb2NhdGlvbgkAkQMCBQtuZXdMb2NUeFZlcgAABAR0aW1lCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJZmxpZ2h0TG9nBQtmbFRpbWVzdGFtcAMDCQBmAgUEdGltZQkAZAIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBRFGSVZFTUlOVVRFU01JTExJUwYJAGYCCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFEUZJVkVNSU5VVEVTTUlMTElTBQR0aW1lCQACAQISc2lnbmF0dXJlIG91dGRhdGVkBAl0eEZyb21Nc2cJAJEDAgULbmV3TG9jVHhWZXIAAQQIdXNlckFkZHIJAKUIAQUGY2FsbGVyBAZsYXN0VHgJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBEWtleUxhc3RUeElkQnlVc2VyAQUIdXNlckFkZHICAAMJAQIhPQIFBmxhc3RUeAUJdHhGcm9tTXNnCQACAQkArAICCQCsAgIJAKwCAgIeVHggaWRzIGRvbid0IG1hdGNoISBJbiBzdGF0ZTogBQZsYXN0VHgCCiwgaW4gbXNnOiAFCXR4RnJvbU1zZwQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQh1c2VyQWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAxvbGRGcm9tU3RhdGUJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoAGQDCQECIT0CBQxvbGRGcm9tU3RhdGUFBWN1ckhQCQACAQkArAICCQCsAgIJAKwCAgIKb2xkSGVhbHRoPQkApAMBCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aABkAi8gZnJvbSBzdGF0ZSBkb2VzIG5vdCBtYXRjaCBvbmUgZnJvbSBmbGlnaHQgbG9nPQkApAMBBQVjdXJIUAMJAGcCAAAFBWN1ckhQCQACAQIeWW91IGNhbid0IGZseSB3aXRoIHplcm8gaGVhbHRoAwkAZwIAAAUFbmV3SFAJAJUKAwkAzQgCAwkBASEBBQxzaG91bGRVc2VNYXQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUGY2FsbGVyBQdFWFBVU0RUBQt1c2R0QXNzZXRJZAUDbmlsBQNuaWwJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgAAAIAAAAEBWJvbnVzAwkAZgIJAJADAQUJZmxpZ2h0TG9nBQdmbEJvbnVzCQCRAwIFCWZsaWdodExvZwUHZmxCb251cwIABApzZW50QW1vdW50AwkAAAIFBWJvbnVzAgEkCQEFYXNJbnQBCQD8BwQFDHJlc3RDb250cmFjdAINc2VuZFVzZHRQcml6ZQkAzAgCBQh1c2VyQWRkcgUDbmlsBQNuaWwAAAQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEBW1MaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBAZuZXdNYXQJALkJAgkBEXN1YnRyYWN0TWF0ZXJpYWxzAwUMc2hvdWxkVXNlTWF0BQVtTGlzdAUMRVhQTUFURVJJQUxTAgFfBAFlCQESZXhwZWRpdGlvbkludGVybmFsAgUGY2FsbGVyBQR0eElkBAJpZAgIBQFlAl8yAl8xCQCVCgMJAM0IAgkAzQgCCQDNCAIIBQFlAl8xCQELU3RyaW5nRW50cnkCCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQJALkJAgkAzAgCCAgFAWUCXzICXzIJAMwIAgIBTAkAzAgCBQJpZAUDbmlsAgFfCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoBQVuZXdIUAkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQDMCAIFBm5ld01hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgUCaWQFCnNlbnRBbW91bnQBDGFwcGx5Qm9udXNlcwILbGFuZEFzc2V0SWQGcGllY2VzBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAQJYXJ0UGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkAAAEBGFkZDYJAGkCBQppbmZyYUxldmVsAAYEBGFkZDcJAGkCBQppbmZyYUxldmVsAAcJAGQCCQBkAgUPREFJTFlSRVNCWVBJRUNFCQBrAwUPREFJTFlSRVNCWVBJRUNFCQBkAgkAZAIFCmluZnJhTGV2ZWwFBGFkZDYJAGgCAAIFBGFkZDcABQkAawMFD0RBSUxZUkVTQllQSUVDRQUJYXJ0UGllY2VzCQBoAgUGcGllY2VzAAUBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwRhZGRyCWNsYWltTW9kZQ1sYW5kQXNzZXRJZEluBA0kdDAyMjcwNjIzMjQ1AwkAAAIFCWNsYWltTW9kZQULY2xhaW1Nb2RlV2gJAJQKAgUNbGFuZEFzc2V0SWRJbgkBC3ZhbHVlT3JFbHNlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAgAEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04EA2xvYwkAtQkCCQEFdmFsdWUBBQtjdXJMb2NhdGlvbgIBXwMJAQIhPQIJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAgFMCQACAQkArAICCQCsAgICFkR1Y2sgbG9jYXRpb24gdHlwZSBpcyAJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAhEsIGJ1dCBzaG91bGQgYmUgTAkAlAoCCQCRAwIFA2xvYwUIbG9jSWR4SWQFC2R1Y2tBc3NldElkBAtsYW5kQXNzZXRJZAgFDSR0MDIyNzA2MjMyNDUCXzEEBmR1Y2tJZAgFDSR0MDIyNzA2MjMyNDUCXzIEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQECXNhdmVkVGltZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCfCAEFB3RpbWVLZXkJAKwCAgkArAICAgVMYW5kIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQBZAkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8JAJYKBAUGZHVja0lkBQtsYW5kQXNzZXRJZAUBZAUJc2F2ZWRUaW1lARBjbGFpbVJlc0ludGVybmFsBARhZGRyBmFtb3VudAljbGFpbU1vZGUNbGFuZEFzc2V0SWRJbgMJAGYCAAAFBmFtb3VudAkAAgECD05lZ2F0aXZlIGFtb3VudAQBYwkBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwUEYWRkcgUJY2xhaW1Nb2RlBQ1sYW5kQXNzZXRJZEluBAhsYW5kU2l6ZQkAkQMCCAUBYwJfMwULcmVjTGFuZFNpemUEDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCCAUBYwJfMwULcmVjVGVycmFpbnMECWRlbHRhVGltZQkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wCAUBYwJfNAMJAGYCAAAFCWRlbHRhVGltZQkAAgEJAKwCAgkArAICCQCsAgICJlNhdmVkIHRpbWVzdGFtcCBpcyBpbiBmdXR1cmUsIHNhdmVkID0gCQCkAwEIBQFjAl80AgwsIGN1cnJlbnQgPSAJAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXAEBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEFCGxhbmRTaXplBBZkYWlseVByb2R1Y3Rpb25CeVBpZWNlCQEMYXBwbHlCb251c2VzAggFAWMCXzIFBnBpZWNlcwQIYXZhaWxSZXMJAGsDBQlkZWx0YVRpbWUJAGgCBRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlBQZwaWVjZXMFCURBWU1JTExJUwMJAGYCBQZhbW91bnQFCGF2YWlsUmVzCQACAQkArAICCQCsAgIJAKwCAgIiTm90IGVub3VnaCByZXNvdXJjZXMsIGF2YWlsYWJsZSA9IAkApAMBBQhhdmFpbFJlcwIOLCByZXF1ZXN0ZWQgPSAJAKQDAQUGYW1vdW50BAxuZXdEZWx0YVRpbWUJAGsDCQBlAgUIYXZhaWxSZXMFBmFtb3VudAUJREFZTUlMTElTCQBoAgUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQUGcGllY2VzBAxuZXdUaW1lc3RhbXAJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUMbmV3RGVsdGFUaW1lBAlsYW5kSW5kZXgJAGkCBQZwaWVjZXMFBVNTSVpFBApyZXNUb0NsYWltCQEJdmlydENsYWltBAUNdGVycmFpbkNvdW50cwkAZQIFCWRlbHRhVGltZQUMbmV3RGVsdGFUaW1lBQlsYW5kSW5kZXgFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UEBXdoS2V5CQESa2V5V2FyZWhvdXNlQnlMYW5kAQgFAWMCXzIECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBCAUBYwJfMgAABAljdXJyZW50V2gJAQxnZXRXYXJlaG91c2UDBQV3aEtleQUJbGFuZEluZGV4BQppbmZyYUxldmVsBARsb2Z0CQC1CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeExPRlQCAV8EC3doU3BhY2VMZWZ0CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQMDCQAAAgUJY2xhaW1Nb2RlBQtjbGFpbU1vZGVXaAkAZgIFBmFtb3VudAULd2hTcGFjZUxlZnQHCQACAQkArAICCQCsAgICBU9ubHkgCQCkAwEFC3doU3BhY2VMZWZ0Ahggc3BhY2UgbGVmdCBpbiB3YXJlaG91c2UEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBCAUBYwJfMQQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BA5jdXJyZW50UGFja1JlcwkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwIBXwQMY3VycmVudFdoUmVzCQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeFJlcwIBXwQNJHQwMjU2MTkyNjQ5MAMJAAACBQljbGFpbU1vZGUFC2NsYWltTW9kZVdoCQCWCgQJAQZhZGRSZXMFBQxjdXJyZW50V2hSZXMFDXRlcnJhaW5Db3VudHMJAGUCBQlkZWx0YVRpbWUFDG5ld0RlbHRhVGltZQUJbGFuZEluZGV4BRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAgFCnJlc1RvQ2xhaW0CXzIJAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQgFCnJlc1RvQ2xhaW0CXzIDCQAAAgUJY2xhaW1Nb2RlBQ1jbGFpbU1vZGVEdWNrCQCWCgQJAJEDAgUJY3VycmVudFdoBQh3aElkeFJlcwkBBmFkZFJlcwUFDmN1cnJlbnRQYWNrUmVzBQ10ZXJyYWluQ291bnRzCQBlAgUJZGVsdGFUaW1lBQxuZXdEZWx0YVRpbWUFCWxhbmRJbmRleAUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQQFZGlzdHIJAQ1kaXN0cmlidXRlUmVzBAUMY3VycmVudFdoUmVzBQ5jdXJyZW50UGFja1JlcwUKcmVzVG9DbGFpbQULd2hTcGFjZUxlZnQEBHdoQW0JAJcDAQkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQkAzAgCCAUKcmVzVG9DbGFpbQJfMgUDbmlsCQCWCgQIBQVkaXN0cgJfMQgFBWRpc3RyAl8yCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkBQR3aEFtCQBlAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUFBHdoQW0EBXdoUmVzCAUNJHQwMjU2MTkyNjQ5MAJfMQQFYnBSZXMIBQ0kdDAyNTYxOTI2NDkwAl8yBAVsb2Z0TwgFDSR0MDI1NjE5MjY0OTACXzMEBWxvZnRGCAUNJHQwMjU2MTkyNjQ5MAJfNAkAlwoFCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEIBQFjAl8yBQxuZXdUaW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKTEFORFBSRUZJWAgFAWMCXzIFBGFkZHIFDG5ld1RpbWVzdGFtcAUDbmlsBQVicEtleQkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIFBWJwUmVzCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsBQV3aEtleQkAzAgCCQCRAwIFCWN1cnJlbnRXaAULd2hJZHhMZXZlbHMJAMwIAgUFd2hSZXMJAMwIAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0CQDMCAIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QJAMwIAgkAuQkCCQDMCAIJAJEDAgUEbG9mdAUJdm9sTG9ja2VkCQDMCAIJAKQDAQUFbG9mdE8JAMwIAgkApAMBBQVsb2Z0RgkAzAgCCQCRAwIFBGxvZnQFCHZvbFRvdGFsBQNuaWwCAV8FA25pbAEIY2xhaW1BbGwEBGFkZHILbGFuZEFzc2V0SWQGcGllY2VzCWNsYWltTW9kZQQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAQJc2F2ZWRUaW1lCQEFdmFsdWUBCQCfCAEFB3RpbWVLZXkECGF2YWlsUmVzCQBoAgkAawMJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUJc2F2ZWRUaW1lCQEMYXBwbHlCb251c2VzAgULbGFuZEFzc2V0SWQFBnBpZWNlcwUJREFZTUlMTElTBQZwaWVjZXMJARBjbGFpbVJlc0ludGVybmFsBAUEYWRkcgUIYXZhaWxSZXMFCWNsYWltTW9kZQULbGFuZEFzc2V0SWQBDXVwSW5mcmFDb21tb24EDHNob3VsZFVzZU1hdAZjYWxsZXINcGF5bWVudEFtb3VudAtsYW5kQXNzZXRJZAQEYWRkcgkApQgBBQZjYWxsZXIEAWMJARRjaGVja0NsYWltQ29uZGl0aW9ucwMFBGFkZHIFE2NsYWltTW9kZVdoVGhlbkR1Y2sFC2xhbmRBc3NldElkBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIIBQFjAl8zBQtyZWNMYW5kU2l6ZQQIaW5mcmFLZXkJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQgFAWMCXzIECGN1ckxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEFCGluZnJhS2V5AAADCQBnAgUIY3VyTGV2ZWwAAwkAAgECJkN1cnJlbnRseSBtYXggaW5mcmFzdHJ1Y3R1cmUgbGV2ZWwgPSAzBAhuZXdMZXZlbAkAZAIFCGN1ckxldmVsAAEEBGNvc3QJAGsDBRVJbmZyYVVwZ3JhZGVDb3N0U1VzZHQJAGgCBQZwaWVjZXMFCG5ld0xldmVsBQVTU0laRQMDCQEBIQEFDHNob3VsZFVzZU1hdAkBAiE9AgUNcGF5bWVudEFtb3VudAUEY29zdAcJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQRjb3N0BAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQgFAWMCXzEEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQFbUxpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8EBm5ld01hdAkAuQkCCQERc3VidHJhY3RNYXRlcmlhbHMDBQxzaG91bGRVc2VNYXQFBW1MaXN0CQBrAwURSW5mcmFVcGdyYWRlQ29zdFMJAGgCBQZwaWVjZXMFCG5ld0xldmVsBQVTU0laRQIBXwQLY2xhaW1SZXN1bHQJAQhjbGFpbUFsbAQFBGFkZHIIBQFjAl8yBQZwaWVjZXMFE2NsYWltTW9kZVdoVGhlbkR1Y2sEBndoRGF0YQgFC2NsYWltUmVzdWx0Al81BAZvbGRWb2wJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEJAJEDAgUGd2hEYXRhBQt3aElkeExldmVscwQKbmV3Vm9sRGF0YQkAuQkCCQDMCAIJAJEDAgkAtQkCCQCRAwIFBndoRGF0YQULd2hJZHhMZXZlbHMCAV8AAAkAzAgCCQCkAwEFCG5ld0xldmVsBQNuaWwCAV8EBm5ld1ZvbAkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQUKbmV3Vm9sRGF0YQQEbG9mdAkAtQkCCQCRAwIFBndoRGF0YQUJd2hJZHhMT0ZUAgFfBApuZXdMb2Z0U3RyCQC5CQIJAMwIAgkAkQMCBQRsb2Z0BQl2b2xMb2NrZWQJAMwIAgkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAkAzAgCCQCkAwEJAGUCCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUFBm5ld1ZvbAUGb2xkVm9sCQDMCAIJAKQDAQUGbmV3Vm9sBQNuaWwCAV8JAJQKAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQhpbmZyYUtleQUIbmV3TGV2ZWwJAMwIAgkBDEludGVnZXJFbnRyeQIJAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICCAUBYwJfMgUEYWRkcgUIbmV3TGV2ZWwJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAggFC2NsYWltUmVzdWx0Al8zBQhicElkeFJlcwkAzAgCBQZuZXdNYXQJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwCAToJAMwIAgkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al80CQC5CQIJAMwIAgUKbmV3Vm9sRGF0YQkAzAgCCQCRAwIFBndoRGF0YQUId2hJZHhSZXMJAMwIAgkAkQMCBQZ3aERhdGEFCHdoSWR4TWF0CQDMCAIJAJEDAgUGd2hEYXRhBQl3aElkeFByb2QJAMwIAgUKbmV3TG9mdFN0cgUDbmlsAgE6BQNuaWwIBQtjbGFpbVJlc3VsdAJfMQUIbmV3TGV2ZWwBEmFjdGl2YXRlT25ib2FyZEFydAEEYWRkcgAAARJhY3RpdmF0ZVByZXNhbGVBcnQCBGFkZHINbGFuZEFzc2V0SWRJbgQBYwkBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwUEYWRkcgUTY2xhaW1Nb2RlV2hUaGVuRHVjawUNbGFuZEFzc2V0SWRJbgQLbGFuZEFzc2V0SWQIBQFjAl8yBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIIBQFjAl8zBQtyZWNMYW5kU2l6ZQQNYWN0aXZhdGlvbktleQkBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQDCQBmAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ1hY3RpdmF0aW9uS2V5AAAAAAkAAgECJVByZXNhbGUgYXJ0aWZhY3QgaXMgYWxyZWFkeSBhY3RpdmF0ZWQDCQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIIBQFjAl8zBQpyZWNMYW5kTnVtBQ9QUkVTQUxFTlVNTEFORFMJAAIBCQCsAgIJAKwCAgkArAICBQpMQU5EUFJFRklYAgEgBQtsYW5kQXNzZXRJZAIlIGlzIG5vdCBlbGlnaWJsZSBmb3IgcHJlc2FsZSBhcnRpZmFjdAQLY2xhaW1SZXN1bHQJAQhjbGFpbUFsbAQFBGFkZHIFC2xhbmRBc3NldElkBQZwaWVjZXMFE2NsYWltTW9kZVdoVGhlbkR1Y2sJAM0IAgkAzQgCCQDNCAIJAM0IAggFC2NsYWltUmVzdWx0Al8xCQEMSW50ZWdlckVudHJ5AgUNYWN0aXZhdGlvbktleQUGcGllY2VzCQEMSW50ZWdlckVudHJ5AgkBJWtleUxhbmRBcnRTdGF0dXNCeVR5cGVBc3NldElkQW5kT3duZXIDBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAUEYWRkcgUGcGllY2VzCQELU3RyaW5nRW50cnkCCAULY2xhaW1SZXN1bHQCXzIJALkJAggFC2NsYWltUmVzdWx0Al8zAgE6CQELU3RyaW5nRW50cnkCCAULY2xhaW1SZXN1bHQCXzQJALkJAggFC2NsYWltUmVzdWx0Al81AgE6AQ1tZXJnZUludGVybmFsBwtuZXdMYW5kU2l6ZQhuZXdMZXZlbAdmb3JtdWxhBGFkZHIMbGFuZEFzc2V0SWRzBHR4SWQHbmVlZE1hdAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkCgEKY2hlY2tNZXJnZQIDYWNjC2xhbmRBc3NldElkBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkBAlzYXZlZFRpbWUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBBQd0aW1lS2V5CQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQBZAkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8ECWNvbnRpbmVudAkAkQMCBQFkBQxyZWNDb250aW5lbnQDAwkBAiE9AggFA2FjYwJfMwIACQECIT0CCAUDYWNjAl8zBQljb250aW5lbnQHCQACAQIuTGFuZHMgc2hvdWxkIGJlIG9uIHRoZSBzYW1lIGNvbnRpbmVudCB0byBtZXJnZQQIbGFuZFNpemUJAJEDAgUBZAULcmVjTGFuZFNpemUEB3NpemVzSW4IBQNhY2MCXzEEAWkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAswkCBQdzaXplc0luBQhsYW5kU2l6ZQInWW91IGhhdmVuJ3QgcGFzc2VkIGFsbCB0aGUgbGFuZHMgbmVlZGVkBAhzaXplc091dAkArAICCQCvAgIFB3NpemVzSW4FAWkJALACAgUHc2l6ZXNJbgkAZAIFAWkAAQQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQUIbGFuZFNpemUEBGFydHMJAGQCCAUDYWNjAl8yCQELdmFsdWVPckVsc2UCCQCfCAEJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkAAAECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAhyZXFMZXZlbAQHJG1hdGNoMAUIbGFuZFNpemUDCQAAAgIBUwUHJG1hdGNoMAADAwkAAAICAU0FByRtYXRjaDAABAMJAAACAgFMBQckbWF0Y2gwAAUDCQAAAgICWEwFByRtYXRjaDAABgkAAgECGk9ubHkgUywgTSwgTCwgWEwgY2FuIG1lcmdlAwkBAiE9AgUKaW5mcmFMZXZlbAUIcmVxTGV2ZWwJAAIBAiJBbGwgbGFuZHMgc2hvdWxkIGJlIG1heGVkIHRvIG1lcmdlBAdsYW5kTnVtCQCRAwIFAWQFCnJlY0xhbmROdW0EDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCBQFkBQtyZWNUZXJyYWlucwQJZGVsdGFUaW1lCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFCXNhdmVkVGltZQMJAGYCAAAFCWRlbHRhVGltZQkAAgEJAKwCAgkArAICCQCsAgICJlNhdmVkIHRpbWVzdGFtcCBpcyBpbiBmdXR1cmUsIHNhdmVkID0gCQCkAwEFCXNhdmVkVGltZQIMLCBjdXJyZW50ID0gCQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wBBZkYWlseVByb2R1Y3Rpb25CeVBpZWNlCQEMYXBwbHlCb251c2VzAgULbGFuZEFzc2V0SWQFBnBpZWNlcwQJbGFuZEluZGV4CQBpAgUGcGllY2VzBQVTU0laRQQFYnBSZXMJAQZhZGRSZXMFCQC1CQIIBQNhY2MCXzQCAV8FDXRlcnJhaW5Db3VudHMFCWRlbHRhVGltZQUJbGFuZEluZGV4BRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlBAVwcm9wcwkBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwECQC1CQIIBQNhY2MCXzYCAV8FDXRlcnJhaW5Db3VudHMFCWxhbmRJbmRleAD///////////8BBAVsYW5kcwgFA2FjYwJfNwQDaWR4CQDPCAIFBWxhbmRzBQtsYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEFA2lkeAkAAgEJAKwCAgIgWW91ciBzdGFrZWQgbGFuZHMgZG9uJ3QgY29udGFpbiAFC2xhbmRBc3NldElkBAljdXN0b21LZXkJARprZXlMYW5kQXNzZXRJZFRvQ3VzdG9tTmFtZQEFC2xhbmRBc3NldElkBApjdXN0b21OYW1lCQELdmFsdWVPckVsc2UCCQCiCAEFCWN1c3RvbUtleQIACQCaCggFCHNpemVzT3V0BQRhcnRzBQljb250aW5lbnQFBWJwUmVzCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIIBQNhY2MCXzUJAQtEZWxldGVFbnRyeQEJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQJAQtEZWxldGVFbnRyeQEJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKTEFORFBSRUZJWAULbGFuZEFzc2V0SWQFBGFkZHIJAQtEZWxldGVFbnRyeQEJARBrZXlMYW5kVG9Bc3NldElkAQUHbGFuZE51bQkBC0RlbGV0ZUVudHJ5AQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAgULbGFuZEFzc2V0SWQFBGFkZHIJAQtEZWxldGVFbnRyeQEJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQEla2V5TGFuZEFydFN0YXR1c0J5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkBQRhZGRyCQELRGVsZXRlRW50cnkBCQERa2V5TGFuZE51bVRvT3duZXIBBQdsYW5kTnVtCQELRGVsZXRlRW50cnkBCQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQJAQtEZWxldGVFbnRyeQEFCWN1c3RvbUtleQkBC0RlbGV0ZUVudHJ5AQkBGmtleUxhbmRDdXN0b21OYW1lVG9Bc3NldElkAQUKY3VzdG9tTmFtZQkBBEJ1cm4CCQDZBAEFC2xhbmRBc3NldElkAAEFBXByb3BzCQDRCAIFBWxhbmRzCQEFdmFsdWUBBQNpZHgJAGQCCAUDYWNjAl84BQZwaWVjZXMEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAdwcm9wU3RyCQELdmFsdWVPckVsc2UCCQCiCAEJARFrZXlSZXNQcm9wb3J0aW9ucwACCzBfMF8wXzBfMF8wBAhsYW5kc0tleQkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFBGFkZHIECGxhbmRzU3RyCQCiCAEFCGxhbmRzS2V5BAdsYW5kc0luAwkBCWlzRGVmaW5lZAEFCGxhbmRzU3RyCQC9CQIJAQV2YWx1ZQEFCGxhbmRzU3RyAgFfBQNuaWwEAXIKAAIkbAUMbGFuZEFzc2V0SWRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAmgoIBQdmb3JtdWxhAAACAAkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMFA25pbAUHcHJvcFN0cgUHbGFuZHNJbgAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQpjaGVja01lcmdlAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQQJY29udGluZW50CAUBcgJfMwQMY29udGluZW50SWR4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAM8IAgUKY29udGluZW50cwUJY29udGluZW50CQCsAgICE1Vua25vd24gY29udGluZW50OiAFCWNvbnRpbmVudAQIdGVycmFpbnMJAQtnZW5UZXJyYWlucwIJAQNhYnMBCQCeAwEFBHR4SWQFDGNvbnRpbmVudElkeAQHZnJlZU51bQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQESa2V5TmV4dEZyZWVMYW5kTnVtAAkAZAIFD1BSRVNBTEVOVU1MQU5EUwABBApuZXdMYW5kTnVtCQCkAwEFB2ZyZWVOdW0EBWlzc3VlCQDCCAUJAQduZnROYW1lAgUKbmV3TGFuZE51bQULbmV3TGFuZFNpemUJALkJAgkAzAgCBQpuZXdMYW5kTnVtCQDMCAIFC25ld0xhbmRTaXplCQDMCAIFCHRlcnJhaW5zCQDMCAIFCWNvbnRpbmVudAUDbmlsAgFfAAEAAAcEB2Fzc2V0SWQJALgIAQUFaXNzdWUEDm5ld0xhbmRBc3NldElkCQDYBAEFB2Fzc2V0SWQEBm5ld01hdAkAuQkCCQERc3VidHJhY3RNYXRlcmlhbHMDCQBmAgUHbmVlZE1hdAAACQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBQduZWVkTWF0AgFfBAlwaWVjZXNLZXkJARZrZXlTdGFrZWRQaWVjZXNCeU93bmVyAQUEYWRkcgQMc3Rha2VkUGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEFCXBpZWNlc0tleQAACQCUCgIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIIBQFyAl81AwkAZgIJAJADAQgFAXICXzcAAAkBC1N0cmluZ0VudHJ5AgUIbGFuZHNLZXkJALsJAggFAXICXzcCAV8JAQtEZWxldGVFbnRyeQEFCGxhbmRzS2V5CQEMSW50ZWdlckVudHJ5AgUJcGllY2VzS2V5AwkAZgIIBQFyAl84BQxzdGFrZWRQaWVjZXMAAAkAZQIFDHN0YWtlZFBpZWNlcwgFAXICXzgJAQxJbnRlZ2VyRW50cnkCCQESa2V5TmV4dEZyZWVMYW5kTnVtAAkAZAIFB2ZyZWVOdW0AAQUFaXNzdWUJAQtTdHJpbmdFbnRyeQIJARBrZXlMYW5kVG9Bc3NldElkAQUKbmV3TGFuZE51bQUObmV3TGFuZEFzc2V0SWQJAQtTdHJpbmdFbnRyeQIJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQ5uZXdMYW5kQXNzZXRJZAUEYWRkcgkBC1N0cmluZ0VudHJ5AgkBEWtleUxhbmROdW1Ub093bmVyAQUKbmV3TGFuZE51bQUEYWRkcgkBDEludGVnZXJFbnRyeQIJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFDm5ld0xhbmRBc3NldElkCAUBcgJfMgkBDEludGVnZXJFbnRyeQIJASVrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKQVJUUFJFU0FMRQUObmV3TGFuZEFzc2V0SWQFBGFkZHIIBQFyAl8yCQEMSW50ZWdlckVudHJ5AgkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQ5uZXdMYW5kQXNzZXRJZAUIbmV3TGV2ZWwJAQxJbnRlZ2VyRW50cnkCCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAgUObmV3TGFuZEFzc2V0SWQFBGFkZHIFCG5ld0xldmVsCQELU3RyaW5nRW50cnkCBQVicEtleQkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAggFAXICXzQJAMwIAgUGbmV3TWF0CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6CQELU3RyaW5nRW50cnkCCQERa2V5UmVzUHJvcG9ydGlvbnMACAUBcgJfNgkBC1N0cmluZ0VudHJ5AgkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkCQC5CQIJAMwIAgUJY29udGluZW50CQDMCAICAUwJAMwIAgUObmV3TGFuZEFzc2V0SWQFA25pbAIBXwkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUEYWRkcgABBQdhc3NldElkBQ5uZXdMYW5kQXNzZXRJZAEDczJtAwRhZGRyDGxhbmRBc3NldElkcwR0eElkCQENbWVyZ2VJbnRlcm5hbAcCAU0AAwIEU1NTUwUEYWRkcgUMbGFuZEFzc2V0SWRzBQR0eElkAAABA20ybAUEYWRkcgxsYW5kQXNzZXRJZHMEdHhJZAxzaG91bGRVc2VNYXQNcGF5bWVudEFtb3VudAQEY29zdAkAaAIFFUluZnJhVXBncmFkZUNvc3RTVXNkdAAEAwMJAQEhAQUMc2hvdWxkVXNlTWF0CQECIT0CBQ1wYXltZW50QW1vdW50BQRjb3N0BwkAAgEJAKwCAgIbUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgCQCkAwEFBGNvc3QJAQ1tZXJnZUludGVybmFsBwIBTAAEAgNTTU0FBGFkZHIFDGxhbmRBc3NldElkcwUEdHhJZAkAaAIFEUluZnJhVXBncmFkZUNvc3RTAAQBBGwyeGwFBGFkZHIMbGFuZEFzc2V0SWRzBHR4SWQMc2hvdWxkVXNlTWF0DXBheW1lbnRBbW91bnQEBGNvc3QJAGgCBRVJbmZyYVVwZ3JhZGVDb3N0U1VzZHQALwMDCQEBIQEFDHNob3VsZFVzZU1hdAkBAiE9AgUNcGF5bWVudEFtb3VudAUEY29zdAcJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQRjb3N0CQENbWVyZ2VJbnRlcm5hbAcCAlhMAAUCBVNTU01MBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQJAGgCBRFJbmZyYVVwZ3JhZGVDb3N0UwAvAQZ4bDJ4eGwFBGFkZHIMbGFuZEFzc2V0SWRzBHR4SWQMc2hvdWxkVXNlTWF0DXBheW1lbnRBbW91bnQEBGNvc3QJAGgCBRVJbmZyYVVwZ3JhZGVDb3N0U1VzZHQANgMDCQEBIQEFDHNob3VsZFVzZU1hdAkBAiE9AgUNcGF5bWVudEFtb3VudAUEY29zdAcJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQRjb3N0CQENbWVyZ2VJbnRlcm5hbAcCA1hYTAAGAgNMWEwFBGFkZHIFDGxhbmRBc3NldElkcwUEdHhJZAkAaAIFEUluZnJhVXBncmFkZUNvc3RTADYBC21lcmdlQ29tbW9uBQxzaG91bGRVc2VNYXQEYWRkcg1wYXltZW50QW1vdW50DGxhbmRBc3NldElkcwR0eElkBAttZXJnZVJlc3VsdAQHJG1hdGNoMAkAkAMBBQxsYW5kQXNzZXRJZHMDCQAAAgAEBQckbWF0Y2gwCQEDczJtAwUEYWRkcgUMbGFuZEFzc2V0SWRzBQR0eElkAwkAAAIAAwUHJG1hdGNoMAkBA20ybAUFBGFkZHIFDGxhbmRBc3NldElkcwUEdHhJZAUMc2hvdWxkVXNlTWF0BQ1wYXltZW50QW1vdW50AwkAAAIABQUHJG1hdGNoMAkBBGwyeGwFBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQFDHNob3VsZFVzZU1hdAUNcGF5bWVudEFtb3VudAMJAAACAAIFByRtYXRjaDAJAQZ4bDJ4eGwFBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQFDHNob3VsZFVzZU1hdAUNcGF5bWVudEFtb3VudAkAAgECDVVua25vd24gbWVyZ2UFC21lcmdlUmVzdWx0AQZwcm9sb2cBAWkDAwkBAiE9AggFAWkMb3JpZ2luQ2FsbGVyBQxyZXN0Q29udHJhY3QJAQt2YWx1ZU9yRWxzZQIJAKAIAQkBCmtleUJsb2NrZWQABwcJAAIBAh9Db250cmFjdHMgYXJlIHVuZGVyIG1haW50ZW5hbmNlCQELU3RyaW5nRW50cnkCCQERa2V5TGFzdFR4SWRCeVVzZXIBCQClCAEIBQFpDG9yaWdpbkNhbGxlcgkA2AQBCAUBaQ10cmFuc2FjdGlvbklkHgFpAQ1jb25zdHJ1Y3RvclYxAQhyZXN0QWRkcgMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEVBlcm1pc3Npb24gZGVuaWVkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ5rZXlSZXN0QWRkcmVzcwAFCHJlc3RBZGRyBQNuaWwBaQEKc2V0QmxvY2tlZAEJaXNCbG9ja2VkAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRcGVybWlzc2lvbiBkZW5pZWQJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQprZXlCbG9ja2VkAAUJaXNCbG9ja2VkBQNuaWwBaQEJc3Rha2VMYW5kAAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAdhc3NldElkCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyAwkBAiE9AggFA3BtdAZhbW91bnQAAQkAAgEJAKwCAgkArAICAgRORlQgBQpMQU5EUFJFRklYAiQgdG9rZW4gc2hvdWxkIGJlIGF0dGFjaGVkIGFzIHBheW1lbnQEBWFzc2V0CQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQDCQECIT0CCAUFYXNzZXQGaXNzdWVyBQR0aGlzCQACAQIXVW5rbm93biBpc3N1ZXIgb2YgdG9rZW4DCQEBIQEJAQhjb250YWlucwIIBQVhc3NldARuYW1lBQpMQU5EUFJFRklYCQACAQkArAICCQCsAgICCU9ubHkgTkZUIAUKTEFORFBSRUZJWAIUIHRva2VucyBhcmUgYWNjZXB0ZWQEC2xhbmROdW1TaXplCQCwAgIIBQVhc3NldARuYW1lAAQEB2xhbmROdW0DCQEIY29udGFpbnMCBQtsYW5kTnVtU2l6ZQIDWFhMCQCzAgIFC2xhbmROdW1TaXplAAMDCQEIY29udGFpbnMCBQtsYW5kTnVtU2l6ZQICWEwJALMCAgULbGFuZE51bVNpemUAAgkAswICBQtsYW5kTnVtU2l6ZQABAwkBASEBCQEJaXNEZWZpbmVkAQkAtgkBBQdsYW5kTnVtCQACAQkArAICAh5DYW5ub3QgcGFyc2UgbGFuZCBudW1iZXIgZnJvbSAIBQVhc3NldARuYW1lBAtsYW5kQXNzZXRJZAkA2AQBBQdhc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAwkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQISIGlzIGFscmVhZHkgc3Rha2VkBAFkCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIFAWQFC3JlY1RlcnJhaW5zBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIFAWQFC3JlY0xhbmRTaXplBAVwcm9wcwkBEXVwZGF0ZVByb3BvcnRpb25zAwUNdGVycmFpbkNvdW50cwkAaQIFBnBpZWNlcwUFU1NJWkUAAQQJYXJ0UGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkAAAECGxhbmRzS2V5CQEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQUHYWRkcmVzcwQIbGFuZHNTdHIJAKIIAQUIbGFuZHNLZXkEBWxhbmRzAwkBCWlzRGVmaW5lZAEFCGxhbmRzU3RyCQC9CQIJAQV2YWx1ZQEFCGxhbmRzU3RyAgFfBQNuaWwDCQEPY29udGFpbnNFbGVtZW50AgUFbGFuZHMFC2xhbmRBc3NldElkCQACAQkArAICAiJZb3VyIHN0YWtlZCBsYW5kcyBhbHJlYWR5IGNvbnRhaW4gBQtsYW5kQXNzZXRJZAQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAJAMwIAgkBDEludGVnZXJFbnRyeQIFB3RpbWVLZXkIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkxBTkRQUkVGSVgFC2xhbmRBc3NldElkBQdhZGRyZXNzCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQELU3RyaW5nRW50cnkCBQhsYW5kc0tleQkAuwkCCQDNCAIFBWxhbmRzBQtsYW5kQXNzZXRJZAIBXwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFmtleVN0YWtlZFBpZWNlc0J5T3duZXIBBQdhZGRyZXNzCQBkAgkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEFB2FkZHJlc3MAAAUGcGllY2VzCQDMCAIJAQtTdHJpbmdFbnRyeQIJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5TGFuZE51bVRvT3duZXIBBQdsYW5kTnVtBQdhZGRyZXNzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEla2V5TGFuZEFydFN0YXR1c0J5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkBQdhZGRyZXNzBQlhcnRQaWVjZXMJAMwIAgkBDEludGVnZXJFbnRyeQIJAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwUKaW5mcmFMZXZlbAkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5UmVzUHJvcG9ydGlvbnMABQVwcm9wcwkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAFpAQt1bnN0YWtlTGFuZAENbGFuZEFzc2V0SWRJbgQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpBmNhbGxlcgQBYwkBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwUEYWRkcgUNY2xhaW1Nb2RlRHVjawUNbGFuZEFzc2V0SWRJbgQLbGFuZEFzc2V0SWQIBQFjAl8yBAhsYW5kc0tleQkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFBGFkZHIEDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCCAUBYwJfMwULcmVjVGVycmFpbnMEBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAggFAWMCXzMFC3JlY0xhbmRTaXplBAVwcm9wcwkBEXVwZGF0ZVByb3BvcnRpb25zAwUNdGVycmFpbkNvdW50cwkAaQIFBnBpZWNlcwUFU1NJWkUA////////////AQQLY2xhaW1SZXN1bHQJAQhjbGFpbUFsbAQFBGFkZHIFC2xhbmRBc3NldElkBQZwaWVjZXMFDWNsYWltTW9kZUR1Y2sEBWxhbmRzCQC9CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUIbGFuZHNLZXkCAAIBXwQDaWR4CQDPCAIFBWxhbmRzBQtsYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEFA2lkeAkAAgEJAKwCAgIgWW91ciBzdGFrZWQgbGFuZHMgZG9uJ3QgY29udGFpbiAFC2xhbmRBc3NldElkBAF0CAkBBXZhbHVlAQkA7QcBBQZoZWlnaHQJdGltZXN0YW1wBAtyZWxlYXNlVGltZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQtnb3ZDb250cmFjdAkBFWtleVVzZXJHd2xSZWxlYXNlVGltZQEFBGFkZHIAAAMJAGcCBQtyZWxlYXNlVGltZQUBdAkAAgEJAKwCAgI5WW91ciBnV0wgYXJlIHRha2luZyBwYXJ0IGluIHZvdGluZywgY2Fubm90IHVuc3Rha2UgdW50aWwgCQCkAwEFC3JlbGVhc2VUaW1lBAlwaWVjZXNLZXkJARZrZXlTdGFrZWRQaWVjZXNCeU93bmVyAQUEYWRkcgQMc3Rha2VkUGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEFCXBpZWNlc0tleQAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABCQDZBAEFC2xhbmRBc3NldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYBQtsYW5kQXNzZXRJZAUEYWRkcgkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5UmVzUHJvcG9ydGlvbnMABQVwcm9wcwkAzAgCCQELU3RyaW5nRW50cnkCCAULY2xhaW1SZXN1bHQCXzIJALkJAggFC2NsYWltUmVzdWx0Al8zAgE6CQDMCAIDCQBmAgkAkAMBBQVsYW5kcwABCQELU3RyaW5nRW50cnkCBQhsYW5kc0tleQkAuwkCCQDRCAIFBWxhbmRzCQEFdmFsdWUBBQNpZHgCAV8JAQtEZWxldGVFbnRyeQEFCGxhbmRzS2V5CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlwaWVjZXNLZXkDCQBmAgUGcGllY2VzBQxzdGFrZWRQaWVjZXMAAAkAZQIFDHN0YWtlZFBpZWNlcwUGcGllY2VzCQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsAWkBCXN0YWtlRHVjawAEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQHYXNzZXRJZAkBBXZhbHVlAQgFA3BtdAdhc3NldElkBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgMJAQIhPQIIBQNwbXQGYW1vdW50AAEJAAIBCQCsAgIJAKwCAgIETkZUIAUKRFVDS1BSRUZJWAIkIHRva2VuIHNob3VsZCBiZSBhdHRhY2hlZCBhcyBwYXltZW50BAVhc3NldAkBBXZhbHVlAQkA7AcBBQdhc3NldElkAwMJAQIhPQIIBQVhc3NldAZpc3N1ZXIFDWluY3ViYXRvckFkZHIJAQIhPQIIBQVhc3NldAZpc3N1ZXIFC2JyZWVkZXJBZGRyBwkAAgEJAKwCAgkArAICAhJVbmtub3duIGlzc3VlciBvZiAFCkRVQ0tQUkVGSVgCBiB0b2tlbgMJAQEhAQkBCGNvbnRhaW5zAggFBWFzc2V0BG5hbWUFCkRVQ0tQUkVGSVgJAAIBCQCsAgIJAKwCAgIJT25seSBORlQgBQpEVUNLUFJFRklYAhQgdG9rZW5zIGFyZSBhY2NlcHRlZAQKYXNzZXRJZFN0cgkA2AQBBQdhc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFCmFzc2V0SWRTdHIDCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5CQACAQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAhIgaXMgYWxyZWFkeSBzdGFrZWQDCQEJaXNEZWZpbmVkAQkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQdhZGRyZXNzCQACAQkArAICAh1Zb3UgYWxyZWFkeSBzdGFrZWQgb25lIGR1Y2s6IAgFBWFzc2V0BG5hbWUEBmxvY0tleQkBD2tleUR1Y2tMb2NhdGlvbgEFCmFzc2V0SWRTdHIECGxvY2F0aW9uCQCiCAEFBmxvY0tleQQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFCmFzc2V0SWRTdHIECGJhY2twYWNrCQCiCAEFBWJwS2V5CQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFB3RpbWVLZXkIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkRVQ0tQUkVGSVgJANgEAQUHYXNzZXRJZAUHYWRkcmVzcwgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEGtleUR1Y2tJZFRvT3duZXIBBQphc3NldElkU3RyBQdhZGRyZXNzCQDMCAIJAQtTdHJpbmdFbnRyeQIJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFB2FkZHJlc3MFCmFzc2V0SWRTdHIFA25pbAMJAQlpc0RlZmluZWQBBQhsb2NhdGlvbgUDbmlsCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUGbG9jS2V5BQ9ERUZBVUxUTE9DQVRJT04FA25pbAMJAQlpc0RlZmluZWQBBQhiYWNrcGFjawUDbmlsCQDNCAIJAM0IAgkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQIaMDowXzBfMF8wXzBfMDowXzBfMF8wXzBfMDoFA25pbAkBDEludGVnZXJFbnRyeQIJAQ1rZXlEdWNrSGVhbHRoAQUKYXNzZXRJZFN0cgBkBQxwcm9sb2dBY3Rpb24BaQELdW5zdGFrZUR1Y2sBCmFzc2V0SWRTdHIEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQHYXNzZXRJZAkA2QQBBQphc3NldElkU3RyBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgQFYXNzZXQJAQV2YWx1ZQEJAOwHAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBCQDYBAEFB2Fzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkAwkBASEBCQEJaXNEZWZpbmVkAQkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQdhZGRyZXNzCQACAQkArAICCQCsAgICCVRoZSBkdWNrIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARBrZXlEdWNrSWRUb093bmVyAQkA2AQBBQdhc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQdhZGRyZXNzCQACAQIXU3Rha2VkIE5GVCBpcyBub3QgeW91cnMECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQphc3NldElkU3RyBAZoZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoAGQDCQBmAgBkBQZoZWFsdGgJAAIBAiZQbGVhc2UgaGVhbCB5b3VyIGR1Y2sgYmVmb3JlIHVuc3Rha2luZwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQUHYXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBBQd0aW1lS2V5CQDMCAIJAQtEZWxldGVFbnRyeQEFCWtleUhlYWx0aAkAzAgCCQELRGVsZXRlRW50cnkBCQEPa2V5RHVja0xvY2F0aW9uAQUKYXNzZXRJZFN0cgkAzAgCCQELRGVsZXRlRW50cnkBCQEQa2V5RHVja0lkVG9Pd25lcgEFCmFzc2V0SWRTdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpEVUNLUFJFRklYBQphc3NldElkU3RyBQdhZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFB2FkZHJlc3MJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwBaQEIY2xhaW1SZXMCBmFtb3VudA5sYW5kQXNzZXRJZFN0cgQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQGcmVzdWx0CQEQY2xhaW1SZXNJbnRlcm5hbAQFBGFkZHIFBmFtb3VudAUNY2xhaW1Nb2RlRHVjawUObGFuZEFzc2V0SWRTdHIJAJQKAgkAzQgCCQDNCAIJAM0IAggFBnJlc3VsdAJfMQkBC1N0cmluZ0VudHJ5AggFBnJlc3VsdAJfMgkAuQkCCAUGcmVzdWx0Al8zAgE6CQELU3RyaW5nRW50cnkCCAUGcmVzdWx0Al80CQC5CQIIBQZyZXN1bHQCXzUCAToFDHByb2xvZ0FjdGlvbgkAkQMCCAUGcmVzdWx0Al8zBQhicElkeFJlcwFpAQxjbGFpbVJlc1RvV0gCBmFtb3VudA5sYW5kQXNzZXRJZFN0cgQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQGcmVzdWx0CQEQY2xhaW1SZXNJbnRlcm5hbAQFBGFkZHIFBmFtb3VudAULY2xhaW1Nb2RlV2gFDmxhbmRBc3NldElkU3RyCQCUCgIJAM0IAgkAzQgCCQDNCAIIBQZyZXN1bHQCXzEJAQtTdHJpbmdFbnRyeQIIBQZyZXN1bHQCXzIJALkJAggFBnJlc3VsdAJfMwIBOgkBC1N0cmluZ0VudHJ5AggFBnJlc3VsdAJfNAkAuQkCCAUGcmVzdWx0Al81AgE6BQxwcm9sb2dBY3Rpb24JAJEDAggFBnJlc3VsdAJfNQUId2hJZHhSZXMBaQEGZmxpZ2h0AgdtZXNzYWdlA3NpZwQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQEhAQkAxBMDBQdtZXNzYWdlBQNzaWcFA3B1YgkAAgECGHNpZ25hdHVyZSBkb2VzIG5vdCBtYXRjaAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAVwYXJ0cwkAtQkCCQCwCQEFB21lc3NhZ2UCATsECWZsaWdodExvZwkAtQkCCQCRAwIFBXBhcnRzAAACAXwEAmhwCQC1CQIJAJEDAgUJZmxpZ2h0TG9nBQhmbEhlYWx0aAIBXwQFY3VySFAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJocAAABAVuZXdIUAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmhwAAEEC25ld0xvY1R4VmVyCQC1CQIJAJEDAgUFcGFydHMAAQIBOgQLbmV3TG9jYXRpb24JAJEDAgULbmV3TG9jVHhWZXIAAAQEdGltZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWZsaWdodExvZwULZmxUaW1lc3RhbXADAwkAZgIFBHRpbWUJAGQCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAURRklWRU1JTlVURVNNSUxMSVMGCQBmAgkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBRFGSVZFTUlOVVRFU01JTExJUwUEdGltZQkAAgEJAKwCAgkArAICCQCsAgICHHNpZ25hdHVyZSBvdXRkYXRlZDogbG9nVGltZT0JAKQDAQUEdGltZQIJLCBiY1RpbWU9CQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAl0eEZyb21Nc2cJAJEDAgULbmV3TG9jVHhWZXIAAQQGbGFzdFR4CQELdmFsdWVPckVsc2UCCQCiCAEJARFrZXlMYXN0VHhJZEJ5VXNlcgEJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyAgADCQECIT0CBQZsYXN0VHgFCXR4RnJvbU1zZwkAAgEJAKwCAgkArAICCQCsAgICHlR4IGlkcyBkb24ndCBtYXRjaCEgSW4gc3RhdGU6IAUGbGFzdFR4AgosIGluIG1zZzogBQl0eEZyb21Nc2cECHVzZXJBZGRyCQClCAEIBQFpBmNhbGxlcgQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQh1c2VyQWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAxvbGRGcm9tU3RhdGUJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoAGQDCQECIT0CBQxvbGRGcm9tU3RhdGUFBWN1ckhQCQACAQkArAICCQCsAgIJAKwCAgIKb2xkSGVhbHRoPQkApAMBCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aABkAi8gZnJvbSBzdGF0ZSBkb2VzIG5vdCBtYXRjaCBvbmUgZnJvbSBmbGlnaHQgbG9nPQkApAMBBQVjdXJIUAMJAGcCAAAFBWN1ckhQCQACAQIeWW91IGNhbid0IGZseSB3aXRoIHplcm8gaGVhbHRoBAZsb2NLZXkJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQUGbG9jS2V5BQ9ERUZBVUxUTE9DQVRJT04DCQAAAgULbmV3TG9jYXRpb24FC2N1ckxvY2F0aW9uCQACAQIiWW91IGNhbid0IGZseSB0byB0aGUgc2FtZSBsb2NhdGlvbgQFYm9udXMDCQBmAgkAkAMBBQlmbGlnaHRMb2cFB2ZsQm9udXMJAJEDAgUJZmxpZ2h0TG9nBQdmbEJvbnVzAgAECnNlbnRBbW91bnQDAwkAZgIFBW5ld0hQAAAJAAACBQVib251cwIBJAcJAQVhc0ludAEJAPwHBAUMcmVzdENvbnRyYWN0Ag1zZW5kVXNkdFByaXplCQDMCAIFCHVzZXJBZGRyBQNuaWwFA25pbAAACQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUGbG9jS2V5AwkAZgIFBW5ld0hQAAAFC25ld0xvY2F0aW9uBQtjdXJMb2NhdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoBQVuZXdIUAkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAUKc2VudEFtb3VudAFpAQRoZWFsAwpxdWFudGl0eUwxCnF1YW50aXR5TDIKcXVhbnRpdHlMMwQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMDAwkAZgIAAAUKcXVhbnRpdHlMMQYJAGYCAAAFCnF1YW50aXR5TDIGCQBmAgAABQpxdWFudGl0eUwzCQACAQIbUXVhbnRpdHkgY2Fubm90IGJlIG5lZ2F0aXZlBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBANxdHMJAMwIAgUKcXVhbnRpdHlMMQkAzAgCBQpxdWFudGl0eUwyCQDMCAIFCnF1YW50aXR5TDMFA25pbAQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAlvbGRIZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoAGQDCQBnAgUJb2xkSGVhbHRoBQVNQVhIUAkAAgEJAKwCAgkArAICAg9IUCBzaG91bGQgYmUgPCAJAKQDAQUFTUFYSFACCCB0byBoZWFsBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQIcHJvZExpc3QDCQAAAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgAFA25pbAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAV8KAQtpdGVyYXRlUHJvZAIDYWNjC2lnbm9yZWRJdGVtBAFuCAUDYWNjAl8yBAF4AwkAZgIJAJADAQUIcHJvZExpc3QFAW4JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhwcm9kTGlzdAUBbgAAAwkAZgIAAwUBbgQBcQkAkQMCBQNxdHMFAW4DCQBmAgUBcQUBeAkAAgEJAKwCAgkArAICCQCsAgICDllvdSBoYXZlIG9ubHkgCQCkAwEFAXgCBCBvZiAJAJEDAgUJcHJvZFR5cGVzBQFuCQCVCgMJAM0IAggFA2FjYwJfMQkApAMBCQBlAgUBeAUBcQkAZAIFAW4AAQkAZAIIBQNhY2MCXzMJAGgCCQCRAwIFCG1lZEtpdEhwBQFuBQFxCQCVCgMJAM0IAggFA2FjYwJfMQkApAMBBQF4CQBkAgUBbgABCAUDYWNjAl8zBAZyZXN1bHQKAAIkbAUQcHJvZHVjdGlvbk1hdHJpeAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJUKAwUDbmlsAAAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQELaXRlcmF0ZVByb2QCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDUwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgQJbmV3SGVhbHRoCQCXAwEJAMwIAgUFTUFYSFAJAMwIAgkAZAIFCW9sZEhlYWx0aAgFBnJlc3VsdAJfMwUDbmlsCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aAUJbmV3SGVhbHRoCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC6CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAkAzAgCCQC5CQIIBQZyZXN1bHQCXzECAV8FA25pbAIBOgkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAUJbmV3SGVhbHRoAWkBBmhlYWxFUwAEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhpBbGxvd2VkIFVTRFQgcGF5bWVudCBvbmx5IQQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAlvbGRIZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoAGQDCQBmAgUJb2xkSGVhbHRoAAAJAAIBAihIUCBzaG91bGQgYmUgMCB0byBjYWxsIEVtZXJnZW5jeSBTZXJ2aWNlBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQIcHJvZExpc3QDCQAAAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgAFA25pbAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAV8EDW1lZEtpdEFtb3VudDEDCQBmAgkAkAMBBQhwcm9kTGlzdAAACQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvZExpc3QAAAAABA1tZWRLaXRBbW91bnQyAwkAZgIJAJADAQUIcHJvZExpc3QAAQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb2RMaXN0AAEAAAQNbWVkS2l0QW1vdW50MwMJAGYCCQCQAwEFCHByb2RMaXN0AAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhwcm9kTGlzdAACAAADAwMJAGYCBQ1tZWRLaXRBbW91bnQxAAAGCQBmAgUNbWVkS2l0QW1vdW50MgAABgkAZgIFDW1lZEtpdEFtb3VudDMAAAkAAgECH1lvdSBoYXZlIHRvIHVzZSBvd24gTWVkaWNhbCBLaXQECGV4aXN0U3RyCQCdCAIFD2Vjb25vbXlDb250cmFjdAkBDmtleUVzV2FyZWhvdXNlAAQMZXhpc3RBbW91bnRzAwkBCWlzRGVmaW5lZAEFCGV4aXN0U3RyCQC1CQIJAQV2YWx1ZQEFCGV4aXN0U3RyAgFfBQNuaWwEC2V4aXN0QW1vdW50AwkAZgIJAJADAQUMZXhpc3RBbW91bnRzAAAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQxleGlzdEFtb3VudHMAAAAAAwkAZwIAAAULZXhpc3RBbW91bnQJAAIBAjlUaGVyZSBhcmUgbm8gTWVkaWNhbCBLaXRzIEwxIGF0IEVtZXJnZW5jeSBTZXJ2aWNlIHN0b3JhZ2UECW5ld0hlYWx0aAkAZAIFCW9sZEhlYWx0aAkAkQMCBQhtZWRLaXRIcAAABAVuZXdFUwkAuQkCCQDMCAIJAKQDAQkAZQIFC2V4aXN0QW1vdW50AAEJANEIAgUMZXhpc3RBbW91bnRzAAACAV8EBnJlY2lwZQkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgAAAIBXwQIdG90YWxNYXQJARJnZXRSZWNpcGVNYXRlcmlhbHMBBQZyZWNpcGUECHBhY2tTaXplCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGcmVjaXBlBRFyZWNpcGVJZHhQYWNrc2l6ZQQJc2VsbFByaWNlCQBrAwkAaAIFCHRvdGFsTWF0BQpFU1NFTExDT0VGBRBSRVNPVVJDRVBSSUNFTUlOCQBoAgAKBQhwYWNrU2l6ZQMJAQIhPQIIBQNwbXQGYW1vdW50BQlzZWxsUHJpY2UJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQlzZWxsUHJpY2UEBnJlc3VsdAkBCGFzU3RyaW5nAQkA/AcEBQ9lY29ub215Q29udHJhY3QCD3VwZGF0ZUVzU3RvcmFnZQkAzAgCBQVuZXdFUwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQt1c2R0QXNzZXRJZAUJc2VsbFByaWNlBQNuaWwJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoBQluZXdIZWFsdGgJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwFBnJlc3VsdAFpAQ51cGRhdGVCYWNrcGFjawILZHVja0Fzc2V0SWQHbmV3UGFjawQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIIBQFpBmNhbGxlcgUPZWNvbm9teUNvbnRyYWN0CQACAQIRcGVybWlzc2lvbiBkZW5pZWQJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAUHbmV3UGFjawkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAUHbmV3UGFjawFpAQhidXlTTGFuZAAEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhpBbGxvd2VkIFVTRFQgcGF5bWVudCBvbmx5IQMJAQIhPQIIBQNwbXQGYW1vdW50BQdFWFBVU0RUCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUHRVhQVVNEVAQGcmVzdWx0CQESZXhwZWRpdGlvbkludGVybmFsAggFAWkGY2FsbGVyCAUBaQ10cmFuc2FjdGlvbklkCQCUCgIJAM0IAgkAzQgCCAUGcmVzdWx0Al8xCQEOU2NyaXB0VHJhbnNmZXIDBQ9lY29ub215Q29udHJhY3QIBQNwbXQGYW1vdW50BQt1c2R0QXNzZXRJZAUMcHJvbG9nQWN0aW9uCAgFBnJlc3VsdAJfMgJfMQFpAQpleHBlZGl0aW9uAgdtZXNzYWdlA3NpZwQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAZyZXN1bHQJARBleHBlZGl0aW9uQ29tbW9uBQYIBQFpBmNhbGxlcggFAWkNdHJhbnNhY3Rpb25JZAUHbWVzc2FnZQUDc2lnCQCUCgIJAM0IAggFBnJlc3VsdAJfMQUMcHJvbG9nQWN0aW9uCQCUCgIIBQZyZXN1bHQCXzIIBQZyZXN1bHQCXzMBaQEMdXBncmFkZUluZnJhAQtsYW5kQXNzZXRJZAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAZyZXN1bHQJAQ11cEluZnJhQ29tbW9uBAYIBQFpBmNhbGxlcgAABQtsYW5kQXNzZXRJZAkAlAoCCQDNCAIIBQZyZXN1bHQCXzEFDHByb2xvZ0FjdGlvbggFBnJlc3VsdAJfMgFpARB1cGdyYWRlSW5mcmFVc2R0AQtsYW5kQXNzZXRJZAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEVBlcm1pc3Npb24gZGVuaWVkBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQIaQWxsb3dlZCBVU0RUIHBheW1lbnQgb25seSEEBnJlc3VsdAkBDXVwSW5mcmFDb21tb24EBwgFAWkGY2FsbGVyCAUDcG10BmFtb3VudAULbGFuZEFzc2V0SWQJAJQKAgkAzQgCCQDNCAIIBQZyZXN1bHQCXzEJAQ5TY3JpcHRUcmFuc2ZlcgMFD2Vjb25vbXlDb250cmFjdAgFA3BtdAZhbW91bnQFC3VzZHRBc3NldElkBQxwcm9sb2dBY3Rpb24IBQZyZXN1bHQCXzIBaQEQYWN0aXZhdGVBcnRpZmFjdAIHYXJ0TmFtZQtsYW5kQXNzZXRJZAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAZyZXN1bHQEByRtYXRjaDAFB2FydE5hbWUDCQAAAgIHUFJFU0FMRQUHJG1hdGNoMAkBEmFjdGl2YXRlUHJlc2FsZUFydAIJAKUIAQgFAWkGY2FsbGVyBQtsYW5kQXNzZXRJZAkAAgECEFVua25vd24gYXJ0aWZhY3QJAM0IAgUGcmVzdWx0BQxwcm9sb2dBY3Rpb24BaQEKbWVyZ2VMYW5kcwEMbGFuZEFzc2V0SWRzBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBnJlc3VsdAkBC21lcmdlQ29tbW9uBQYJAKUIAQgFAWkGY2FsbGVyAAAFDGxhbmRBc3NldElkcwgFAWkNdHJhbnNhY3Rpb25JZAkAlAoCCQDNCAIIBQZyZXN1bHQCXzEFDHByb2xvZ0FjdGlvbggFBnJlc3VsdAJfMgFpAQ5tZXJnZUxhbmRzVXNkdAEMbGFuZEFzc2V0SWRzBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQIaQWxsb3dlZCBVU0RUIHBheW1lbnQgb25seSEEBnJlc3VsdAkBC21lcmdlQ29tbW9uBQcJAKUIAQgFAWkGY2FsbGVyCAUDcG10BmFtb3VudAUMbGFuZEFzc2V0SWRzCAUBaQ10cmFuc2FjdGlvbklkCQCUCgIJAM0IAgkAzQgCCAUGcmVzdWx0Al8xCQEOU2NyaXB0VHJhbnNmZXIDBQ9lY29ub215Q29udHJhY3QIBQNwbXQGYW1vdW50BQt1c2R0QXNzZXRJZAUMcHJvbG9nQWN0aW9uCAUGcmVzdWx0Al8yAWkBDWNhcmdvRXhjaGFuZ2UCDGNhcmdvTGlzdFN0cgtsYW5kQXNzZXRJZAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBApjYXJnb1BhcnRzCQC8CQIFDGNhcmdvTGlzdFN0cgIBOgQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMECWxhbmRJbmRleAkAaQIJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfBQtyZWNMYW5kU2l6ZQUFU1NJWkUECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEC2N1ckxvY2F0aW9uCQELdmFsdWVPckVsc2UCCQCiCAEJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OBANsb2MJALUJAgkBBXZhbHVlAQULY3VyTG9jYXRpb24CAV8DCQECIT0CCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIBTAkAAgEJAKwCAgkArAICAhZEdWNrIGxvY2F0aW9uIHR5cGUgaXMgCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIRLCBidXQgc2hvdWxkIGJlIEwDCQECIT0CCQCRAwIFA2xvYwUIbG9jSWR4SWQFC2xhbmRBc3NldElkCQACAQkArAICAhtEdWNrIHNob3VsZCBiZSBvbiB0aGUgbGFuZCAFC2xhbmRBc3NldElkBAV3aEtleQkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkBAljdXJyZW50V2gJAQxnZXRXYXJlaG91c2UDBQV3aEtleQUJbGFuZEluZGV4BQppbmZyYUxldmVsBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQGcmVzdWx0CQEJbW92ZVN0dWZmAwUKY2FyZ29QYXJ0cwUJY3VycmVudFdoBQtjdXJyZW50UGFjawQEbG9mdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUAgFfBAVsb2Z0TwkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAgFBnJlc3VsdAJfNwQFbG9mdEYJAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQgFBnJlc3VsdAJfNwkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAugkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAggFBnJlc3VsdAJfNAkAzAgCCAUGcmVzdWx0Al81CQDMCAIIBQZyZXN1bHQCXzYFA25pbAIBOgkAzAgCCQELU3RyaW5nRW50cnkCBQV3aEtleQkAugkCCQDMCAIJAJEDAgUJY3VycmVudFdoBQt3aElkeExldmVscwkAzAgCCAUGcmVzdWx0Al8xCQDMCAIIBQZyZXN1bHQCXzIJAMwIAggFBnJlc3VsdAJfMwkAzAgCCQC5CQIJAMwIAgkAkQMCBQRsb2Z0BQl2b2xMb2NrZWQJAMwIAgkApAMBBQVsb2Z0TwkAzAgCCQCkAwEFBWxvZnRGCQDMCAIJAJEDAgUEbG9mdAUIdm9sVG90YWwFA25pbAIBXwUDbmlsAgE6CQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsAWkBDXNhdmVXYXJlaG91c2UCBXdoU3RyC2xhbmRBc3NldElkBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AggFAWkGY2FsbGVyBQ9lY29ub215Q29udHJhY3QJAAIBAg1BY2Nlc3MgZGVuaWVkBAV3aEtleQkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkBAJ3aAkAvAkCBQV3aFN0cgIBOgMJAQIhPQIJAJADAQUCd2gABQkAAgECMHdhcmVob3VzZSBzdHJpbmcgc2hvdWxkIGNvbnRhaW4gNCAnOicgc2VwYXJhdG9ycwQFbG9mdEwJAJEDAgkAtQkCCQCRAwIFAndoBQl3aElkeExPRlQCAV8FCXZvbExvY2tlZAQFbG9mdE8JARdnZXRXYXJlaG91c2VPY2N1cGllZFZvbAEFAndoBAVsb2Z0VAkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQkAkQMCBQJ3aAULd2hJZHhMZXZlbHMEBWxvZnRGCQBlAgkAZQIFBWxvZnRUCQENcGFyc2VJbnRWYWx1ZQEFBWxvZnRMBQVsb2Z0TwQIbmV3V2hTdHIJALoJAgkAzAgCCQCRAwIFAndoBQt3aElkeExldmVscwkAzAgCCQCRAwIFAndoBQh3aElkeFJlcwkAzAgCCQCRAwIFAndoBQh3aElkeE1hdAkAzAgCCQCRAwIFAndoBQl3aElkeFByb2QJAMwIAgkAuQkCCQDMCAIFBWxvZnRMCQDMCAIJAKQDAQUFbG9mdE8JAMwIAgkApAMBBQVsb2Z0RgkAzAgCCQCkAwEFBWxvZnRUBQNuaWwCAV8FA25pbAIBOgkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBXdoS2V5BQhuZXdXaFN0cgkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAUIbmV3V2hTdHIBaQESZml4V2FyZWhvdXNlRm9ybWF0AQtsYW5kQXNzZXRJZAMJAQIhPQIIBQFpBmNhbGxlcgUMcmVzdENvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAQFd2hLZXkJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQJbGFuZEluZGV4CQBpAgkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAgkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8FC3JlY0xhbmRTaXplBQVTU0laRQQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAEAndoCQEMZ2V0V2FyZWhvdXNlAwUFd2hLZXkFCWxhbmRJbmRleAUKaW5mcmFMZXZlbAQFbG9mdEwJAQVhc0ludAEJAPwHBAUPZWNvbm9teUNvbnRyYWN0AhpyZWNhbGNMb2NrZWRWb2x1bWVSRUFET05MWQkAzAgCBQtsYW5kQXNzZXRJZAkAzAgCBQJ3aAUDbmlsBQNuaWwEBWxvZnRPCQEXZ2V0V2FyZWhvdXNlT2NjdXBpZWRWb2wBBQJ3aAQFbG9mdFQJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEJAJEDAgUCd2gFC3doSWR4TGV2ZWxzBAVsb2Z0RgkAZQIJAGUCBQVsb2Z0VAUFbG9mdEwFBWxvZnRPBAhuZXdXaFN0cgkAugkCCQDMCAIJAJEDAgUCd2gFC3doSWR4TGV2ZWxzCQDMCAIJAJEDAgUCd2gFCHdoSWR4UmVzCQDMCAIJAJEDAgUCd2gFCHdoSWR4TWF0CQDMCAIJAJEDAgUCd2gFCXdoSWR4UHJvZAkAzAgCCQC5CQIJAMwIAgkApAMBBQVsb2Z0TAkAzAgCCQCkAwEFBWxvZnRPCQDMCAIJAKQDAQUFbG9mdEYJAMwIAgkApAMBBQVsb2Z0VAUDbmlsAgFfBQNuaWwC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ZFBpZWNlcwUDbmlsBQxzdGFrZWRQaWVjZXMBaQENc2V0Q3VzdG9tTmFtZQMHYXNzZXRJZApjdXN0b21OYW1lBHR5cGUEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhpBbGxvd2VkIFVTRFQgcGF5bWVudCBvbmx5IQMJAQIhPQIIBQNwbXQGYW1vdW50BQxSRU5BTUlOR0NPU1QJAAIBCQCsAgICElBheW1lbnQgc2hvdWxkIGJlIAkApAMBBQxSRU5BTUlOR0NPU1QDCQEIY29udGFpbnMCBQpjdXN0b21OYW1lAgJfXwkAAgEJAKwCAgIeTmFtZSBzaG91bGQgbm90IGNvbnRhaW4gJ19fJzogBQpjdXN0b21OYW1lAwkAZgIJALECAQUKY3VzdG9tTmFtZQUKTUFYTkFNRUxFTgkAAgEJAKwCAgIZTmFtZSB0b28gbG9uZywgbWF4TGVuZ3RoPQkApAMBBQpNQVhOQU1FTEVOBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQHYWN0aW9ucwQHJG1hdGNoMAUEdHlwZQMJAAACAgdBQ0NPVU5UBQckbWF0Y2gwBApyZXZlcnNlS2V5CQEWa2V5Q3VzdG9tTmFtZVRvQWRkcmVzcwEFCmN1c3RvbU5hbWUECW5hbWVPd25lcgkAoggBBQpyZXZlcnNlS2V5AwkBCWlzRGVmaW5lZAEFCW5hbWVPd25lcgkAAgEJAKwCAgIZTmFtZSBhbHJlYWR5IHJlZ2lzdGVyZWQ6IAUKY3VzdG9tTmFtZQQNYWRkclRvTmFtZUtleQkBFmtleUFkZHJlc3NUb0N1c3RvbU5hbWUBBQRhZGRyBAdvbGROYW1lCQCiCAEFDWFkZHJUb05hbWVLZXkEB2ZyZWVPbGQDCQEJaXNEZWZpbmVkAQUHb2xkTmFtZQkAzAgCCQELRGVsZXRlRW50cnkBCQEWa2V5Q3VzdG9tTmFtZVRvQWRkcmVzcwEJAQV2YWx1ZQEFB29sZE5hbWUFA25pbAUDbmlsCQDNCAIJAM0IAgUHZnJlZU9sZAkBC1N0cmluZ0VudHJ5AgUNYWRkclRvTmFtZUtleQUKY3VzdG9tTmFtZQkBC1N0cmluZ0VudHJ5AgUKcmV2ZXJzZUtleQUEYWRkcgMJAAACAgRMQU5EBQckbWF0Y2gwBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQUHYXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAggFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQdhc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBApyZXZlcnNlS2V5CQEaa2V5TGFuZEN1c3RvbU5hbWVUb0Fzc2V0SWQBBQpjdXN0b21OYW1lBAluYW1lT3duZXIJAKIIAQUKcmV2ZXJzZUtleQMJAQlpc0RlZmluZWQBBQluYW1lT3duZXIJAAIBCQCsAgICGU5hbWUgYWxyZWFkeSByZWdpc3RlcmVkOiAFCmN1c3RvbU5hbWUEDmFzc2V0VG9OYW1lS2V5CQEaa2V5TGFuZEFzc2V0SWRUb0N1c3RvbU5hbWUBBQdhc3NldElkBAdvbGROYW1lCQCiCAEFDmFzc2V0VG9OYW1lS2V5BAdmcmVlT2xkAwkBCWlzRGVmaW5lZAEFB29sZE5hbWUJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBGmtleUxhbmRDdXN0b21OYW1lVG9Bc3NldElkAQkBBXZhbHVlAQUHb2xkTmFtZQUDbmlsBQNuaWwJAM0IAgkAzQgCBQdmcmVlT2xkCQELU3RyaW5nRW50cnkCBQ5hc3NldFRvTmFtZUtleQUKY3VzdG9tTmFtZQkBC1N0cmluZ0VudHJ5AgUKcmV2ZXJzZUtleQUHYXNzZXRJZAMJAAACAgREVUNLBQckbWF0Y2gwBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQUHYXNzZXRJZAMDCQEBIQEJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkGCQEBIQEJAQlpc0RlZmluZWQBCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHIJAAIBCQCsAgIIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEQa2V5RHVja0lkVG9Pd25lcgEFB2Fzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkRVQ0tQUkVGSVgCDSBpcyBub3QgeW91cnMECnJldmVyc2VLZXkJARprZXlEdWNrQ3VzdG9tTmFtZVRvQXNzZXRJZAEFCmN1c3RvbU5hbWUECW5hbWVPd25lcgkAoggBBQpyZXZlcnNlS2V5AwkBCWlzRGVmaW5lZAEFCW5hbWVPd25lcgkAAgEJAKwCAgIZTmFtZSBhbHJlYWR5IHJlZ2lzdGVyZWQ6IAUKY3VzdG9tTmFtZQQOYXNzZXRUb05hbWVLZXkJARprZXlEdWNrQXNzZXRJZFRvQ3VzdG9tTmFtZQEFB2Fzc2V0SWQEB29sZE5hbWUJAKIIAQUOYXNzZXRUb05hbWVLZXkEB2ZyZWVPbGQDCQEJaXNEZWZpbmVkAQUHb2xkTmFtZQkAzAgCCQELRGVsZXRlRW50cnkBCQEaa2V5RHVja0N1c3RvbU5hbWVUb0Fzc2V0SWQBCQEFdmFsdWUBBQdvbGROYW1lBQNuaWwFA25pbAkAzQgCCQDNCAIFB2ZyZWVPbGQJAQtTdHJpbmdFbnRyeQIFDmFzc2V0VG9OYW1lS2V5BQpjdXN0b21OYW1lCQELU3RyaW5nRW50cnkCBQpyZXZlcnNlS2V5BQdhc3NldElkCQACAQITVW5rbm93biBlbnRpdHkgdHlwZQkAlAoCCQDNCAIJAM0IAgUHYWN0aW9ucwkBDlNjcmlwdFRyYW5zZmVyAwUPZWNvbm9teUNvbnRyYWN0CAUDcG10BmFtb3VudAULdXNkdEFzc2V0SWQFDHByb2xvZ0FjdGlvbgAAAWkBDHNldFJlZmVycmFscwIJb2xkUGxheWVyCW5ld1BsYXllcgMJAQIhPQIIBQFpD2NhbGxlclB1YmxpY0tleQUDcHViCQACAQIRUGVybWlzc2lvbiBkZW5pZWQEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAMJAQEhAQkBCWlzRGVmaW5lZAEJAKYIAQUJb2xkUGxheWVyCQACAQkArAICAhFJbnZhbGlkIGFkZHJlc3M6IAUJb2xkUGxheWVyAwkBASEBCQEJaXNEZWZpbmVkAQkApggBBQluZXdQbGF5ZXIJAAIBCQCsAgICEUludmFsaWQgYWRkcmVzczogBQluZXdQbGF5ZXIEB29sZHNLZXkJAQlrZXlPbGRpZXMABARvbGRzCQCiCAEFB29sZHNLZXkEBm9sZGllcwMJAQlpc0RlZmluZWQBBQRvbGRzCQC8CQIJAQV2YWx1ZQEFBG9sZHMCAV8FA25pbAMJAQ9jb250YWluc0VsZW1lbnQCBQZvbGRpZXMFCW5ld1BsYXllcgkAAgEJAKwCAgUJbmV3UGxheWVyAiYgaXMgbm90IG5ld2JpZSAoYWxyZWFkeSBoYXMgcmVmZXJyYWxzKQQIcmVmQnlLZXkJAQ9rZXlBZGRyZXNzUmVmQnkBBQluZXdQbGF5ZXIEBXJlZkJ5CQCiCAEFCHJlZkJ5S2V5AwMJAQlpc0RlZmluZWQBBQVyZWZCeQkBCWlzRGVmaW5lZAEJAKYIAQkBBXZhbHVlAQUFcmVmQnkHCQACAQkArAICCQCsAgIFCW5ld1BsYXllcgIUIGFscmVhZHkgaGFzIHJlZkJ5OiAJAQV2YWx1ZQEFBXJlZkJ5BAdyZWZzS2V5CQETa2V5QWRkcmVzc1JlZmVycmFscwEFCW9sZFBsYXllcgQEcmVmcwkAoggBBQdyZWZzS2V5BAlyZWZzQXJyYXkDCQEJaXNEZWZpbmVkAQUEcmVmcwkAvAkCCQEFdmFsdWUBBQRyZWZzAgFfBQNuaWwDCQEPY29udGFpbnNFbGVtZW50AgUJcmVmc0FycmF5BQluZXdQbGF5ZXIJAAIBCQCsAgIJAKwCAgkArAICBQlvbGRQbGF5ZXICEiBhbHJlYWR5IGNvbnRhaW5zIAUJbmV3UGxheWVyAhEgd2l0aGluIHJlZmVycmFscwQHbmV3UmVmcwkAugkCCQDNCAIFCXJlZnNBcnJheQUJbmV3UGxheWVyAgFfBAduZXdPbGRzAwkBD2NvbnRhaW5zRWxlbWVudAIFBm9sZGllcwUJb2xkUGxheWVyCQEFdmFsdWUBBQRvbGRzCQC6CQIJAM0IAgUGb2xkaWVzBQlvbGRQbGF5ZXICAV8JAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCBQhyZWZCeUtleQUJb2xkUGxheWVyCQDMCAIJAQtTdHJpbmdFbnRyeQIFB3JlZnNLZXkFB25ld1JlZnMJAMwIAgkBC1N0cmluZ0VudHJ5AgUHb2xkc0tleQUHbmV3T2xkcwkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAAAAWkBHHNwbGl0QnlHbG9iYWxXZWlnaHRzUkVBRE9OTFkBBmFtb3VudAkAlAoCBQNuaWwJARJnZXROZWVkZWRNYXRlcmlhbHMBBQZhbW91bnQBaQEkc3BsaXRCeUdsb2JhbEFuZExvY2FsV2VpZ2h0c1JFQURPTkxZAwltYXRBbW91bnQJcmVzQW1vdW50CHRlcnJhaW5zBA10ZXJyYWluQ291bnRzCQENY291bnRUZXJyYWlucwEFCHRlcnJhaW5zCQCUCgIFA25pbAkAlAoCCQESZ2V0TmVlZGVkTWF0ZXJpYWxzAQUJbWF0QW1vdW50CQETZGlzdHJpYnV0ZUJ5V2VpZ2h0cwIFCXJlc0Ftb3VudAUNdGVycmFpbkNvdW50cwFpARNnZXRCYWNrcGFja1JFQURPTkxZAQtkdWNrQXNzZXRJZAkAlAoCBQNuaWwJALkJAgkBC2dldEJhY2twYWNrAQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQCAToBaQEUZ2V0V2FyZWhvdXNlUkVBRE9OTFkBC2xhbmRBc3NldElkBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAlsYW5kSW5kZXgJAGkCCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwULcmVjTGFuZFNpemUFBVNTSVpFBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAkAlAoCBQNuaWwJALoJAgkBDGdldFdhcmVob3VzZQMJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAUJbGFuZEluZGV4BQppbmZyYUxldmVsAgE6AWkBCnNhdmVMYXN0VHgAAwkBAiE9AggFAWkGY2FsbGVyBQt3bGdDb250cmFjdAkAAgECDUFjY2VzcyBkZW5pZWQJAJQKAgkAzAgCCQEGcHJvbG9nAQUBaQUDbmlsACoAYQt3wg==", "height": 2629454, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 45x5PRss1DouWBiKodgfQoMEKYk2ruuqfLg5b29LYTiF Next: Yn7jTiNBWNi5G94z6SCngKNKXUP3d8VDT8A3VAf1UXs Diff:
Old | New | Differences | |
---|---|---|---|
34 | 34 | ||
35 | 35 | let g = 1000000 | |
36 | 36 | ||
37 | - | let h = 100000000 | |
38 | - | ||
39 | - | let i = "LAND" | |
40 | - | ||
41 | - | let j = "DUCK" | |
42 | - | ||
43 | - | let k = "PRESALE" | |
44 | - | ||
45 | - | let l = 6 | |
46 | - | ||
47 | - | let m = 25 | |
48 | - | ||
49 | - | let n = 100 | |
50 | - | ||
51 | - | let o = 225 | |
52 | - | ||
53 | - | let p = 400 | |
54 | - | ||
55 | - | let q = 625 | |
56 | - | ||
57 | - | let r = 3456000 | |
58 | - | ||
59 | - | let s = 86400000 | |
60 | - | ||
61 | - | let t = 10000000000 | |
62 | - | ||
63 | - | let u = "Africa_F_Africa" | |
64 | - | ||
65 | - | let v = 39637 | |
66 | - | ||
67 | - | let w = 10 | |
68 | - | ||
69 | - | let x = 100 | |
70 | - | ||
71 | - | let y = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3"] | |
72 | - | ||
73 | - | let z = ["Americas", "Europe", "Asia", "Africa", "Oceania"] | |
74 | - | ||
75 | - | let A = ["1_1_1_2_2_5_1_10_0", "2_2_2_4_4_10_1_10_0", "3_3_3_6_6_15_1_10_0", "2_5_5_2_7_5_2_100_1", "4_10_10_4_14_10_2_100_1", "6_15_15_6_21_15_2_100_1", "1_1_1_1_1_8_1_10_2", "2_2_2_2_2_16_1_10_2", "3_3_3_3_3_24_1_10_2", "9_9_1_5_5_1_5_100_3", "18_18_2_10_10_2_5_100_3", "27_27_3_15_15_3_5_100_3", "2_2_1_2_2_2_1_10_4", "4_4_2_4_4_4_1_10_4", "6_6_3_6_6_6_1_10_4"] | |
76 | - | ||
77 | - | let B = 7 | |
78 | - | ||
79 | - | let C = 0 | |
80 | - | ||
81 | - | let D = 1 | |
82 | - | ||
83 | - | let E = 2 | |
84 | - | ||
85 | - | let F = 3 | |
86 | - | ||
87 | - | let G = 0 | |
88 | - | ||
89 | - | let H = 1 | |
90 | - | ||
91 | - | let I = 2 | |
92 | - | ||
93 | - | let J = 3 | |
94 | - | ||
95 | - | let K = 4 | |
96 | - | ||
97 | - | let L = 0 | |
98 | - | ||
99 | - | let M = 1 | |
100 | - | ||
101 | - | let N = 2 | |
102 | - | ||
103 | - | let O = 3 | |
104 | - | ||
105 | - | let P = 0 | |
106 | - | ||
107 | - | let Q = 1 | |
108 | - | ||
109 | - | let R = 2 | |
110 | - | ||
111 | - | let S = 3 | |
112 | - | ||
113 | - | func T (U) = parseIntValue(split(A[U], "_")[B]) | |
114 | - | ||
115 | - | ||
116 | - | func V (W,X) = valueOrErrorMessage(getString(W, X), makeString(["mandatory ", toString(W), ".", X, " is not defined"], "")) | |
117 | - | ||
118 | - | ||
119 | - | let Y = 1 | |
120 | - | ||
121 | - | let Z = 2 | |
122 | - | ||
123 | - | let aa = 3 | |
124 | - | ||
125 | - | func ab () = "%s__restConfig" | |
126 | - | ||
127 | - | ||
128 | - | func ac () = "%s__restAddr" | |
129 | - | ||
130 | - | ||
131 | - | func ad (ae) = split_4C(V(ae, ab()), f) | |
132 | - | ||
133 | - | ||
134 | - | func af (ag,ah) = valueOrErrorMessage(addressFromString(ag[ah]), ("Rest cfg doesn't contain address at index " + toString(ah))) | |
135 | - | ||
136 | - | ||
137 | - | let ai = addressFromStringValue(valueOrElse(getString(this, ac()), d)) | |
138 | - | ||
139 | - | let ag = ad(ai) | |
140 | - | ||
141 | - | let aj = af(ag, Y) | |
142 | - | ||
143 | - | let ak = af(ag, Z) | |
144 | - | ||
145 | - | let al = af(ag, aa) | |
146 | - | ||
147 | - | func am (an) = ("lastTxIdByUser_" + an) | |
148 | - | ||
149 | - | ||
150 | - | func ao (ap) = ("nftOwner_" + ap) | |
151 | - | ||
152 | - | ||
153 | - | func aq (ap) = ("landCustomNameByAssetId_" + ap) | |
154 | - | ||
155 | - | ||
156 | - | func ar (ap) = ("stakedTime_" + ap) | |
157 | - | ||
158 | - | ||
159 | - | func as (ap) = ("infraLevel_" + ap) | |
160 | - | ||
161 | - | ||
162 | - | func at (au,ap) = makeString(["landArtStatus", au, ap], "_") | |
163 | - | ||
164 | - | ||
165 | - | func av (aw,ap,ax) = ((((("stakedTimeByTypeAssetIdAndOwner_" + aw) + "_") + ap) + "_") + ax) | |
166 | - | ||
167 | - | ||
168 | - | func ay (az) = ("wareHouse_" + az) | |
169 | - | ||
170 | - | ||
171 | - | func aA (ax) = ("stakedLandsByOwner_" + ax) | |
172 | - | ||
173 | - | ||
174 | - | func aB (ax) = ("stakedPiecesByOwner_" + ax) | |
175 | - | ||
176 | - | ||
177 | - | func aC (ap) = ("duckCustomNameByAssetId_" + ap) | |
178 | - | ||
179 | - | ||
180 | - | func aD (an) = ("accountCustomNameByAddr_" + an) | |
181 | - | ||
182 | - | ||
183 | - | func aE (an) = ("accRefBy_" + an) | |
184 | - | ||
185 | - | ||
186 | - | func aF (an) = ("accReferrals_" + an) | |
187 | - | ||
188 | - | ||
189 | - | func aG (ap) = ("duckOwner_" + ap) | |
190 | - | ||
191 | - | ||
192 | - | func aH (ax) = ("stakedDuckByOwner_" + ax) | |
193 | - | ||
194 | - | ||
195 | - | func aI (aJ) = ("backPack_" + aJ) | |
196 | - | ||
197 | - | ||
198 | - | func aK (aJ) = ("duckLocation_" + aJ) | |
199 | - | ||
200 | - | ||
201 | - | func aL (aJ) = ("duckHealth_" + aJ) | |
202 | - | ||
203 | - | ||
204 | - | func aM () = "resTypesProportions" | |
205 | - | ||
206 | - | ||
207 | - | func aN () = "contractsBlocked" | |
208 | - | ||
209 | - | ||
210 | - | func aO (aP) = ("%s%s__userGwlReleaseTime__" + aP) | |
211 | - | ||
212 | - | ||
213 | - | func aQ () = "emergencyWarehouseProducts" | |
214 | - | ||
215 | - | ||
216 | - | let aR = 1 | |
217 | - | ||
218 | - | let aS = 2 | |
219 | - | ||
220 | - | func aT (aU) = { | |
221 | - | let c = aU | |
37 | + | let h = 10000000 | |
38 | + | ||
39 | + | let i = 100000000 | |
40 | + | ||
41 | + | let j = 10000000000 | |
42 | + | ||
43 | + | let k = "LAND" | |
44 | + | ||
45 | + | let l = "DUCK" | |
46 | + | ||
47 | + | let m = "PRESALE" | |
48 | + | ||
49 | + | let n = 6 | |
50 | + | ||
51 | + | let o = 25 | |
52 | + | ||
53 | + | let p = 100 | |
54 | + | ||
55 | + | let q = 225 | |
56 | + | ||
57 | + | let r = 400 | |
58 | + | ||
59 | + | let s = 625 | |
60 | + | ||
61 | + | let t = 3456000 | |
62 | + | ||
63 | + | let u = 86400000 | |
64 | + | ||
65 | + | let v = 10000000000 | |
66 | + | ||
67 | + | let w = "Africa_F_Africa" | |
68 | + | ||
69 | + | let x = 39637 | |
70 | + | ||
71 | + | let y = 3 | |
72 | + | ||
73 | + | let z = 4 | |
74 | + | ||
75 | + | let A = 10 | |
76 | + | ||
77 | + | let B = 100 | |
78 | + | ||
79 | + | let C = ["Oil", "Ore", "Wood", "Sand", "Clay", "Organic"] | |
80 | + | ||
81 | + | let D = ["Fuel", "Metal", "Plank", "Glass", "Plastic", "Protein"] | |
82 | + | ||
83 | + | let E = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3"] | |
84 | + | ||
85 | + | let F = ["Americas", "Europe", "Asia", "Africa", "Oceania"] | |
86 | + | ||
87 | + | let G = ["1_1_1_2_2_5_1_10_0", "2_2_2_4_4_10_1_10_0", "3_3_3_6_6_15_1_10_0", "2_5_5_2_7_5_2_100_1", "4_10_10_4_14_10_2_100_1", "6_15_15_6_21_15_2_100_1", "1_1_1_1_1_8_1_10_2", "2_2_2_2_2_16_1_10_2", "3_3_3_3_3_24_1_10_2", "9_9_1_5_5_1_5_100_3", "18_18_2_10_10_2_5_100_3", "27_27_3_15_15_3_5_100_3", "2_2_1_2_2_2_1_10_4", "4_4_2_4_4_4_1_10_4", "6_6_3_6_6_6_1_10_4"] | |
88 | + | ||
89 | + | let H = 0 | |
90 | + | ||
91 | + | let I = 1 | |
92 | + | ||
93 | + | let J = 2 | |
94 | + | ||
95 | + | let K = 3 | |
96 | + | ||
97 | + | let L = 4 | |
98 | + | ||
99 | + | let M = 0 | |
100 | + | ||
101 | + | let N = 1 | |
102 | + | ||
103 | + | let O = 2 | |
104 | + | ||
105 | + | let P = 3 | |
106 | + | ||
107 | + | let Q = 4 | |
108 | + | ||
109 | + | let R = 5 | |
110 | + | ||
111 | + | let S = 6 | |
112 | + | ||
113 | + | let T = 7 | |
114 | + | ||
115 | + | let U = 8 | |
116 | + | ||
117 | + | let V = 0 | |
118 | + | ||
119 | + | let W = 1 | |
120 | + | ||
121 | + | let X = 2 | |
122 | + | ||
123 | + | let Y = 3 | |
124 | + | ||
125 | + | let Z = 0 | |
126 | + | ||
127 | + | let aa = 1 | |
128 | + | ||
129 | + | let ab = 2 | |
130 | + | ||
131 | + | let ac = 3 | |
132 | + | ||
133 | + | let ad = 4 | |
134 | + | ||
135 | + | let ae = 0 | |
136 | + | ||
137 | + | let af = 1 | |
138 | + | ||
139 | + | let ag = 2 | |
140 | + | ||
141 | + | let ah = 3 | |
142 | + | ||
143 | + | let ai = 0 | |
144 | + | ||
145 | + | let aj = 1 | |
146 | + | ||
147 | + | let ak = 2 | |
148 | + | ||
149 | + | let al = 3 | |
150 | + | ||
151 | + | func am (an) = parseIntValue(split(G[an], "_")[T]) | |
152 | + | ||
153 | + | ||
154 | + | func ao (ap,aq) = valueOrErrorMessage(getString(ap, aq), makeString(["mandatory ", toString(ap), ".", aq, " is not defined"], "")) | |
155 | + | ||
156 | + | ||
157 | + | func ar (aq,as) = valueOrElse(getInteger(this, aq), as) | |
158 | + | ||
159 | + | ||
160 | + | let at = 1 | |
161 | + | ||
162 | + | let au = 2 | |
163 | + | ||
164 | + | let av = 3 | |
165 | + | ||
166 | + | let aw = 4 | |
167 | + | ||
168 | + | func ax () = "%s__restConfig" | |
169 | + | ||
170 | + | ||
171 | + | func ay () = "%s__restAddr" | |
172 | + | ||
173 | + | ||
174 | + | func az (aA) = split_4C(ao(aA, ax()), f) | |
175 | + | ||
176 | + | ||
177 | + | func aB (aC,aD) = valueOrErrorMessage(addressFromString(aC[aD]), ("Rest cfg doesn't contain address at index " + toString(aD))) | |
178 | + | ||
179 | + | ||
180 | + | let aE = addressFromStringValue(valueOrElse(getString(this, ay()), d)) | |
181 | + | ||
182 | + | let aC = az(aE) | |
183 | + | ||
184 | + | let aF = aB(aC, at) | |
185 | + | ||
186 | + | let aG = aB(aC, au) | |
187 | + | ||
188 | + | let aH = aB(aC, av) | |
189 | + | ||
190 | + | let aI = aB(aC, aw) | |
191 | + | ||
192 | + | func aJ (aK) = ("lastTxIdByUser_" + aK) | |
193 | + | ||
194 | + | ||
195 | + | func aL (aM) = ("nftOwner_" + aM) | |
196 | + | ||
197 | + | ||
198 | + | func aN (aM) = ("landCustomNameByAssetId_" + aM) | |
199 | + | ||
200 | + | ||
201 | + | func aO (aM) = ("stakedTime_" + aM) | |
202 | + | ||
203 | + | ||
204 | + | func aP (aM) = ("infraLevel_" + aM) | |
205 | + | ||
206 | + | ||
207 | + | func aQ (aR,aM) = makeString(["landArtStatus", aR, aM], "_") | |
208 | + | ||
209 | + | ||
210 | + | func aS (aT,aM,aU) = ((((("stakedTimeByTypeAssetIdAndOwner_" + aT) + "_") + aM) + "_") + aU) | |
211 | + | ||
212 | + | ||
213 | + | func aV (aW) = ("wareHouse_" + aW) | |
214 | + | ||
215 | + | ||
216 | + | func aX (aU) = ("stakedLandsByOwner_" + aU) | |
217 | + | ||
218 | + | ||
219 | + | func aY (aU) = ("stakedPiecesByOwner_" + aU) | |
220 | + | ||
221 | + | ||
222 | + | func aZ (aM) = ("duckCustomNameByAssetId_" + aM) | |
223 | + | ||
224 | + | ||
225 | + | func ba (aK) = ("accountCustomNameByAddr_" + aK) | |
226 | + | ||
227 | + | ||
228 | + | func bb (aK) = ("accRefBy_" + aK) | |
229 | + | ||
230 | + | ||
231 | + | func bc (aK) = ("accReferrals_" + aK) | |
232 | + | ||
233 | + | ||
234 | + | func bd (aM) = ("duckOwner_" + aM) | |
235 | + | ||
236 | + | ||
237 | + | func be (aU) = ("stakedDuckByOwner_" + aU) | |
238 | + | ||
239 | + | ||
240 | + | func bf (bg) = ("backPack_" + bg) | |
241 | + | ||
242 | + | ||
243 | + | func bh (bg) = ("duckLocation_" + bg) | |
244 | + | ||
245 | + | ||
246 | + | func bi (bg) = ("duckHealth_" + bg) | |
247 | + | ||
248 | + | ||
249 | + | func bj () = "resTypesProportions" | |
250 | + | ||
251 | + | ||
252 | + | func bk () = "contractsBlocked" | |
253 | + | ||
254 | + | ||
255 | + | func bl (bm) = ("%s%s__userGwlReleaseTime__" + bm) | |
256 | + | ||
257 | + | ||
258 | + | func bn (aW) = ("landOrder_" + aW) | |
259 | + | ||
260 | + | ||
261 | + | func bo () = "emergencyWarehouseProducts" | |
262 | + | ||
263 | + | ||
264 | + | let bp = 0 | |
265 | + | ||
266 | + | let bq = 1 | |
267 | + | ||
268 | + | let br = 2 | |
269 | + | ||
270 | + | func bs (bt) = { | |
271 | + | let c = bt | |
222 | 272 | if ($isInstanceOf(c, "String")) | |
223 | 273 | then { | |
224 | - | let | |
225 | - | | |
274 | + | let bu = c | |
275 | + | bu | |
226 | 276 | } | |
227 | 277 | else throw("fail to cast into String") | |
228 | 278 | } | |
229 | 279 | ||
230 | 280 | ||
231 | - | func | |
232 | - | let c = | |
281 | + | func bv (bt) = { | |
282 | + | let c = bt | |
233 | 283 | if ($isInstanceOf(c, "Int")) | |
234 | 284 | then { | |
235 | - | let | |
236 | - | | |
285 | + | let bw = c | |
286 | + | bw | |
237 | 287 | } | |
238 | 288 | else throw("fail to cast into Int") | |
239 | 289 | } | |
240 | 290 | ||
241 | 291 | ||
242 | - | func aY (aZ) = { | |
243 | - | let c = aZ | |
292 | + | func bx (bt) = { | |
293 | + | let c = bt | |
294 | + | if ($isInstanceOf(c, "List[Any]")) | |
295 | + | then { | |
296 | + | let by = c | |
297 | + | by | |
298 | + | } | |
299 | + | else throw("fail to cast into List[Any]") | |
300 | + | } | |
301 | + | ||
302 | + | ||
303 | + | func bz (bt) = { | |
304 | + | let c = bt | |
305 | + | if ($isInstanceOf(c, "Boolean")) | |
306 | + | then { | |
307 | + | let bu = c | |
308 | + | bu | |
309 | + | } | |
310 | + | else throw("fail to cast into Boolean") | |
311 | + | } | |
312 | + | ||
313 | + | ||
314 | + | func bA (bB) = { | |
315 | + | let c = bB | |
244 | 316 | if (("S" == c)) | |
245 | - | then | |
317 | + | then o | |
246 | 318 | else if (("M" == c)) | |
247 | - | then | |
319 | + | then p | |
248 | 320 | else if (("L" == c)) | |
249 | - | then | |
321 | + | then q | |
250 | 322 | else if (("XL" == c)) | |
251 | - | then | |
323 | + | then r | |
252 | 324 | else if (("XXL" == c)) | |
253 | - | then | |
325 | + | then s | |
254 | 326 | else throw("Unknown land size") | |
255 | 327 | } | |
256 | 328 | ||
257 | 329 | ||
258 | - | func ba (bb) = { | |
259 | - | func bc (bd,be) = (bd + parseIntValue(bb[be])) | |
260 | - | ||
261 | - | let bf = [0, 1, 2, 3, 4, 5] | |
262 | - | let bg = size(bf) | |
263 | - | let bh = 0 | |
264 | - | func bi (bj,bk) = if ((bk >= bg)) | |
265 | - | then bj | |
266 | - | else bc(bj, bf[bk]) | |
267 | - | ||
268 | - | func bl (bj,bk) = if ((bk >= bg)) | |
269 | - | then bj | |
330 | + | let bC = 0 | |
331 | + | ||
332 | + | let bD = 1 | |
333 | + | ||
334 | + | func bE (bF) = { | |
335 | + | let bG = split(valueOrElse(getString(aF, bj()), "0_0_0_0_0_0"), "_") | |
336 | + | func bH (bI,bJ) = (bI + parseIntValue(bJ)) | |
337 | + | ||
338 | + | let bK = { | |
339 | + | let bL = bG | |
340 | + | let bM = size(bL) | |
341 | + | let bN = 0 | |
342 | + | func bO (bP,bQ) = if ((bQ >= bM)) | |
343 | + | then bP | |
344 | + | else bH(bP, bL[bQ]) | |
345 | + | ||
346 | + | func bR (bP,bQ) = if ((bQ >= bM)) | |
347 | + | then bP | |
348 | + | else throw("List size exceeds 6") | |
349 | + | ||
350 | + | bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6) | |
351 | + | } | |
352 | + | let bS = if ((bF == "")) | |
353 | + | then 0 | |
354 | + | else { | |
355 | + | let bT = getString(aF, aX(bF)) | |
356 | + | let bU = if (isDefined(bT)) | |
357 | + | then split_51C(value(bT), "_") | |
358 | + | else nil | |
359 | + | func bV (bI,aW) = { | |
360 | + | let bW = value(assetInfo(fromBase58String(aW))) | |
361 | + | let bB = split(bW.description, "_")[W] | |
362 | + | (bI + bA(bB)) | |
363 | + | } | |
364 | + | ||
365 | + | let bL = bU | |
366 | + | let bM = size(bL) | |
367 | + | let bN = 0 | |
368 | + | func bX (bP,bQ) = if ((bQ >= bM)) | |
369 | + | then bP | |
370 | + | else bV(bP, bL[bQ]) | |
371 | + | ||
372 | + | func bY (bP,bQ) = if ((bQ >= bM)) | |
373 | + | then bP | |
374 | + | else throw("List size exceeds 100") | |
375 | + | ||
376 | + | bY(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bN, 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) | |
377 | + | } | |
378 | + | [bK, bS] | |
379 | + | } | |
380 | + | ||
381 | + | ||
382 | + | func bZ (ca) = { | |
383 | + | func cb (cc,cd) = (cc + parseIntValue(ca[cd])) | |
384 | + | ||
385 | + | let bL = [0, 1, 2, 3, 4, 5] | |
386 | + | let bM = size(bL) | |
387 | + | let bN = 0 | |
388 | + | func bO (bP,bQ) = if ((bQ >= bM)) | |
389 | + | then bP | |
390 | + | else cb(bP, bL[bQ]) | |
391 | + | ||
392 | + | func bR (bP,bQ) = if ((bQ >= bM)) | |
393 | + | then bP | |
270 | 394 | else throw("List size exceeds 6") | |
271 | 395 | ||
272 | - | | |
273 | - | } | |
274 | - | ||
275 | - | ||
276 | - | let | |
396 | + | bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6) | |
397 | + | } | |
398 | + | ||
399 | + | ||
400 | + | let ce = { | |
277 | 401 | let c = a | |
278 | 402 | if ((base58'2W' == c)) | |
279 | 403 | then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv") | |
282 | 406 | else throw("Unknown chain") | |
283 | 407 | } | |
284 | 408 | ||
285 | - | let | |
409 | + | let cf = { | |
286 | 410 | let c = a | |
287 | 411 | if ((base58'2W' == c)) | |
288 | 412 | then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb") | |
291 | 415 | else throw("Unknown chain") | |
292 | 416 | } | |
293 | 417 | ||
294 | - | let | |
295 | - | ||
296 | - | let | |
297 | - | ||
298 | - | let | |
299 | - | ||
300 | - | let | |
301 | - | ||
302 | - | let | |
303 | - | ||
304 | - | let | |
305 | - | ||
306 | - | let | |
418 | + | let cg = base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD' | |
419 | + | ||
420 | + | let ch = [30, 60, 120] | |
421 | + | ||
422 | + | let ci = 300000 | |
423 | + | ||
424 | + | let cj = 5000000 | |
425 | + | ||
426 | + | let ck = 50 | |
427 | + | ||
428 | + | let cl = 10000000 | |
429 | + | ||
430 | + | let cm = { | |
307 | 431 | let c = a | |
308 | 432 | if ((base58'2W' == c)) | |
309 | 433 | then 252289527462 | |
312 | 436 | else throw("Unknown chain") | |
313 | 437 | } | |
314 | 438 | ||
315 | - | let | |
439 | + | let cn = { | |
316 | 440 | let c = a | |
317 | 441 | if ((base58'2W' == c)) | |
318 | 442 | then 250000000 | |
321 | 445 | else throw("Unknown chain") | |
322 | 446 | } | |
323 | 447 | ||
324 | - | let bw = toBigInt(5) | |
325 | - | ||
326 | - | let bx = toBigInt(20) | |
327 | - | ||
328 | - | let by = toBigInt((20 * 20)) | |
329 | - | ||
330 | - | let bz = toBigInt(((20 * 20) * 20)) | |
331 | - | ||
332 | - | let bA = toBigInt((((20 * 20) * 20) * 20)) | |
333 | - | ||
334 | - | let bB = toBigInt(((((20 * 20) * 20) * 20) * 20)) | |
335 | - | ||
336 | - | let bC = 500 | |
337 | - | ||
338 | - | func bD () = "nextLandNum" | |
339 | - | ||
340 | - | ||
341 | - | func bE (bF) = ("landToAsset_" + bF) | |
342 | - | ||
343 | - | ||
344 | - | func bG (bH) = ("landByCustomName_" + bH) | |
345 | - | ||
346 | - | ||
347 | - | func bI (ap,ax) = ((("infraLevelByAssetIdAndOwner_" + ap) + "_") + ax) | |
348 | - | ||
349 | - | ||
350 | - | func bJ (au,ap,ax) = makeString(["landArtStatusByTypeAssetIdAndOwner", au, ap, ax], "_") | |
351 | - | ||
352 | - | ||
353 | - | func bK (bF) = ("landOwner_" + bF) | |
354 | - | ||
355 | - | ||
356 | - | func bL (bH) = ("duckByCustomName_" + bH) | |
357 | - | ||
358 | - | ||
359 | - | func bM (bH) = ("accountByCustomName_" + bH) | |
360 | - | ||
361 | - | ||
362 | - | func bN () = "oldiesList" | |
363 | - | ||
364 | - | ||
365 | - | let bO = 0 | |
366 | - | ||
367 | - | let bP = 1 | |
368 | - | ||
369 | - | let bQ = 2 | |
370 | - | ||
371 | - | let bR = 0 | |
372 | - | ||
373 | - | let bS = 5 | |
374 | - | ||
375 | - | let bT = 6 | |
376 | - | ||
377 | - | func bU (bF,aZ) = ((i + bF) + aZ) | |
378 | - | ||
379 | - | ||
380 | - | func bV (bW,bX) = { | |
381 | - | let bY = (((((bX[0] + bX[1]) + bX[2]) + bX[3]) + bX[4]) + bX[5]) | |
382 | - | if ((0 >= bY)) | |
448 | + | let co = toBigInt(5) | |
449 | + | ||
450 | + | let cp = toBigInt(20) | |
451 | + | ||
452 | + | let cq = toBigInt((20 * 20)) | |
453 | + | ||
454 | + | let cr = toBigInt(((20 * 20) * 20)) | |
455 | + | ||
456 | + | let cs = toBigInt((((20 * 20) * 20) * 20)) | |
457 | + | ||
458 | + | let ct = toBigInt(((((20 * 20) * 20) * 20) * 20)) | |
459 | + | ||
460 | + | let cu = 500 | |
461 | + | ||
462 | + | func cv () = "nextLandNum" | |
463 | + | ||
464 | + | ||
465 | + | func cw (cx) = ("landToAsset_" + cx) | |
466 | + | ||
467 | + | ||
468 | + | func cy (cz) = ("landByCustomName_" + cz) | |
469 | + | ||
470 | + | ||
471 | + | func cA (aM,aU) = ((("infraLevelByAssetIdAndOwner_" + aM) + "_") + aU) | |
472 | + | ||
473 | + | ||
474 | + | func cB (aR,aM,aU) = makeString(["landArtStatusByTypeAssetIdAndOwner", aR, aM, aU], "_") | |
475 | + | ||
476 | + | ||
477 | + | func cC (cx) = ("landOwner_" + cx) | |
478 | + | ||
479 | + | ||
480 | + | func cD (cz) = ("duckByCustomName_" + cz) | |
481 | + | ||
482 | + | ||
483 | + | func cE (cz) = ("accountByCustomName_" + cz) | |
484 | + | ||
485 | + | ||
486 | + | func cF () = "oldiesList" | |
487 | + | ||
488 | + | ||
489 | + | let cG = 0 | |
490 | + | ||
491 | + | let cH = 1 | |
492 | + | ||
493 | + | let cI = 2 | |
494 | + | ||
495 | + | let cJ = 0 | |
496 | + | ||
497 | + | let cK = 1 | |
498 | + | ||
499 | + | let cL = 2 | |
500 | + | ||
501 | + | let cM = 3 | |
502 | + | ||
503 | + | let cN = 4 | |
504 | + | ||
505 | + | let cO = 5 | |
506 | + | ||
507 | + | let cP = 6 | |
508 | + | ||
509 | + | func cQ (cx,bB) = ((k + cx) + bB) | |
510 | + | ||
511 | + | ||
512 | + | func cR (cS,cT) = { | |
513 | + | let cU = (((((cT[0] + cT[1]) + cT[2]) + cT[3]) + cT[4]) + cT[5]) | |
514 | + | if ((0 >= cU)) | |
383 | 515 | then throw("Zero weights sum") | |
384 | 516 | else { | |
385 | - | let | |
386 | - | func | |
387 | - | ||
388 | - | let | |
389 | - | let | |
390 | - | let | |
391 | - | func | |
392 | - | then | |
393 | - | else | |
394 | - | ||
395 | - | func | |
396 | - | then | |
517 | + | let cV = fraction(cS, g, cU) | |
518 | + | func cW (bI,cX) = (bI :+ fraction(cX, cV, g)) | |
519 | + | ||
520 | + | let bL = cT | |
521 | + | let bM = size(bL) | |
522 | + | let bN = nil | |
523 | + | func bO (bP,bQ) = if ((bQ >= bM)) | |
524 | + | then bP | |
525 | + | else cW(bP, bL[bQ]) | |
526 | + | ||
527 | + | func bR (bP,bQ) = if ((bQ >= bM)) | |
528 | + | then bP | |
397 | 529 | else throw("List size exceeds 6") | |
398 | 530 | ||
399 | - | | |
400 | - | } | |
401 | - | } | |
402 | - | ||
403 | - | ||
404 | - | func | |
405 | - | let | |
406 | - | if ((size( | |
531 | + | bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6) | |
532 | + | } | |
533 | + | } | |
534 | + | ||
535 | + | ||
536 | + | func cY (cS) = { | |
537 | + | let bG = split(value(getString(bj())), "_") | |
538 | + | if ((size(bG) != n)) | |
407 | 539 | then throw("Wrong proportions data") | |
408 | 540 | else { | |
409 | - | let | |
410 | - | | |
411 | - | } | |
412 | - | } | |
413 | - | ||
414 | - | ||
415 | - | func | |
416 | - | let | |
417 | - | func | |
418 | - | let | |
419 | - | if ((0 > | |
420 | - | then throw(((((("Not enough material idx=" + toString( | |
421 | - | else ( | |
541 | + | let cZ = [parseIntValue(bG[0]), parseIntValue(bG[1]), parseIntValue(bG[2]), parseIntValue(bG[3]), parseIntValue(bG[4]), parseIntValue(bG[5])] | |
542 | + | cR(cS, cZ) | |
543 | + | } | |
544 | + | } | |
545 | + | ||
546 | + | ||
547 | + | func da (db,dc,dd) = { | |
548 | + | let de = cY(dd) | |
549 | + | func df (bI,aD) = { | |
550 | + | let dg = (parseIntValue(dc[aD]) - de[aD]) | |
551 | + | if ((0 > dg)) | |
552 | + | then throw(((((("Not enough material idx=" + toString(aD)) + ", you have ") + dc[aD]) + ", but need ") + toString(de[aD]))) | |
553 | + | else (bI :+ toString(dg)) | |
422 | 554 | } | |
423 | 555 | ||
424 | - | if ( | |
556 | + | if (db) | |
425 | 557 | then { | |
426 | - | let | |
427 | - | let | |
428 | - | let | |
429 | - | func | |
430 | - | then | |
431 | - | else | |
432 | - | ||
433 | - | func | |
434 | - | then | |
558 | + | let bL = [0, 1, 2, 3, 4, 5] | |
559 | + | let bM = size(bL) | |
560 | + | let bN = nil | |
561 | + | func bO (bP,bQ) = if ((bQ >= bM)) | |
562 | + | then bP | |
563 | + | else df(bP, bL[bQ]) | |
564 | + | ||
565 | + | func bR (bP,bQ) = if ((bQ >= bM)) | |
566 | + | then bP | |
435 | 567 | else throw("List size exceeds 6") | |
436 | 568 | ||
437 | - | | |
438 | - | } | |
439 | - | else | |
440 | - | } | |
441 | - | ||
442 | - | ||
443 | - | func | |
569 | + | bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6) | |
570 | + | } | |
571 | + | else dc | |
572 | + | } | |
573 | + | ||
574 | + | ||
575 | + | func dh (di,dj,dk,dl) = if ((size(di) != n)) | |
444 | 576 | then throw("Wrong proportions data") | |
445 | 577 | else { | |
446 | - | func | |
447 | - | let | |
448 | - | if ((0 > | |
449 | - | then throw(((((((("Panic! Pieces of type=" + toString( | |
450 | - | else ( | |
451 | - | } | |
452 | - | ||
453 | - | let | |
454 | - | let | |
455 | - | let | |
456 | - | let | |
457 | - | func | |
458 | - | then | |
459 | - | else | |
460 | - | ||
461 | - | func | |
462 | - | then | |
578 | + | func dm (bI,dn) = { | |
579 | + | let dg = (parseIntValue(di[dn]) + ((dl * dj[dn]) * dk)) | |
580 | + | if ((0 > dg)) | |
581 | + | then throw(((((((("Panic! Pieces of type=" + toString(dn)) + ", sign=") + toString(dl)) + ", terrainCounts[i]=") + toString(dj[dn])) + ", landSizeIndex=") + toString(dk))) | |
582 | + | else (bI :+ toString(dg)) | |
583 | + | } | |
584 | + | ||
585 | + | let cZ = { | |
586 | + | let bL = [0, 1, 2, 3, 4, 5] | |
587 | + | let bM = size(bL) | |
588 | + | let bN = nil | |
589 | + | func bO (bP,bQ) = if ((bQ >= bM)) | |
590 | + | then bP | |
591 | + | else dm(bP, bL[bQ]) | |
592 | + | ||
593 | + | func bR (bP,bQ) = if ((bQ >= bM)) | |
594 | + | then bP | |
463 | 595 | else throw("List size exceeds 6") | |
464 | 596 | ||
465 | - | | |
466 | - | } | |
467 | - | makeString( | |
597 | + | bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6) | |
598 | + | } | |
599 | + | makeString(cZ, "_") | |
468 | 600 | } | |
469 | 601 | ||
470 | 602 | ||
471 | - | func | |
472 | - | let | |
473 | - | | |
474 | - | } | |
475 | - | ||
476 | - | ||
477 | - | func | |
478 | - | ||
479 | - | ||
480 | - | func | |
481 | - | func | |
482 | - | let | |
483 | - | ( | |
603 | + | func do (dj,dk,dl) = { | |
604 | + | let di = split(valueOrElse(getString(bj()), "0_0_0_0_0_0"), "_") | |
605 | + | dh(di, dj, dk, dl) | |
606 | + | } | |
607 | + | ||
608 | + | ||
609 | + | func dp (dq) = [(size(split(dq, "A")) - 1), (size(split(dq, "B")) - 1), (size(split(dq, "C")) - 1), (size(split(dq, "D")) - 1), (size(split(dq, "E")) - 1), (size(split(dq, "F")) - 1)] | |
610 | + | ||
611 | + | ||
612 | + | func dr (ds,dj,dt,dk,du) = { | |
613 | + | func bH (bI,dn) = { | |
614 | + | let dv = ((fraction(dt, du, u) * dj[dn]) * dk) | |
615 | + | (bI :+ toString((parseIntValue(ds[dn]) + dv))) | |
484 | 616 | } | |
485 | 617 | ||
486 | - | let | |
487 | - | let | |
488 | - | let | |
489 | - | let | |
490 | - | func | |
491 | - | then | |
492 | - | else | |
493 | - | ||
494 | - | func | |
495 | - | then | |
618 | + | let cZ = { | |
619 | + | let bL = [0, 1, 2, 3, 4, 5] | |
620 | + | let bM = size(bL) | |
621 | + | let bN = nil | |
622 | + | func bO (bP,bQ) = if ((bQ >= bM)) | |
623 | + | then bP | |
624 | + | else bH(bP, bL[bQ]) | |
625 | + | ||
626 | + | func bR (bP,bQ) = if ((bQ >= bM)) | |
627 | + | then bP | |
496 | 628 | else throw("List size exceeds 6") | |
497 | 629 | ||
498 | - | | |
630 | + | bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6) | |
499 | 631 | } | |
500 | - | makeString( | |
501 | - | } | |
502 | - | ||
503 | - | ||
504 | - | func | |
505 | - | func | |
506 | - | let | |
507 | - | $Tuple2(( | |
632 | + | makeString(cZ, "_") | |
633 | + | } | |
634 | + | ||
635 | + | ||
636 | + | func dw (dj,dt,dk,du) = { | |
637 | + | func bH (bI,dn) = { | |
638 | + | let dv = ((fraction(dt, du, u) * dj[dn]) * dk) | |
639 | + | $Tuple2((bI._1 :+ dv), (bI._2 + dv)) | |
508 | 640 | } | |
509 | 641 | ||
510 | - | let | |
511 | - | let | |
512 | - | let | |
513 | - | func | |
514 | - | then | |
515 | - | else | |
516 | - | ||
517 | - | func | |
518 | - | then | |
642 | + | let bL = [0, 1, 2, 3, 4, 5] | |
643 | + | let bM = size(bL) | |
644 | + | let bN = $Tuple2(nil, 0) | |
645 | + | func bO (bP,bQ) = if ((bQ >= bM)) | |
646 | + | then bP | |
647 | + | else bH(bP, bL[bQ]) | |
648 | + | ||
649 | + | func bR (bP,bQ) = if ((bQ >= bM)) | |
650 | + | then bP | |
519 | 651 | else throw("List size exceeds 6") | |
520 | 652 | ||
521 | - | | |
522 | - | } | |
523 | - | ||
524 | - | ||
525 | - | func | |
526 | - | let | |
527 | - | let | |
528 | - | if (( | |
529 | - | then $Tuple2(makeString( | |
530 | - | else if (( | |
653 | + | bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6) | |
654 | + | } | |
655 | + | ||
656 | + | ||
657 | + | func dx (dy,dz,dA,dB) = { | |
658 | + | let dC = dA._1 | |
659 | + | let dD = dA._2 | |
660 | + | if ((dD == 0)) | |
661 | + | then $Tuple2(makeString(dy, "_"), makeString(dz, "_")) | |
662 | + | else if ((dB >= dD)) | |
531 | 663 | then { | |
532 | - | func | |
533 | - | ||
534 | - | let | |
535 | - | let | |
536 | - | let | |
537 | - | let | |
538 | - | func | |
539 | - | then | |
540 | - | else | |
541 | - | ||
542 | - | func | |
543 | - | then | |
664 | + | func dE (bI,dn) = (bI :+ toString((parseIntValue(dy[dn]) + dC[dn]))) | |
665 | + | ||
666 | + | let cZ = { | |
667 | + | let bL = [0, 1, 2, 3, 4, 5] | |
668 | + | let bM = size(bL) | |
669 | + | let bN = nil | |
670 | + | func bO (bP,bQ) = if ((bQ >= bM)) | |
671 | + | then bP | |
672 | + | else dE(bP, bL[bQ]) | |
673 | + | ||
674 | + | func bR (bP,bQ) = if ((bQ >= bM)) | |
675 | + | then bP | |
544 | 676 | else throw("List size exceeds 6") | |
545 | 677 | ||
546 | - | | |
678 | + | bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6) | |
547 | 679 | } | |
548 | - | $Tuple2(makeString( | |
680 | + | $Tuple2(makeString(cZ, "_"), makeString(dz, "_")) | |
549 | 681 | } | |
550 | 682 | else { | |
551 | - | func | |
552 | - | let | |
553 | - | $Tuple2(( | |
683 | + | func dF (bI,dn) = { | |
684 | + | let dG = fraction(dC[dn], dB, dD) | |
685 | + | $Tuple2((bI._1 :+ toString((parseIntValue(dy[dn]) + dG))), (bI._2 :+ toString(((parseIntValue(dz[dn]) + dC[dn]) - dG)))) | |
554 | 686 | } | |
555 | 687 | ||
556 | - | let | |
557 | - | let | |
558 | - | let | |
559 | - | let | |
560 | - | func | |
561 | - | then | |
562 | - | else | |
563 | - | ||
564 | - | func | |
565 | - | then | |
688 | + | let cZ = { | |
689 | + | let bL = [0, 1, 2, 3, 4, 5] | |
690 | + | let bM = size(bL) | |
691 | + | let bN = $Tuple2(nil, nil) | |
692 | + | func bO (bP,bQ) = if ((bQ >= bM)) | |
693 | + | then bP | |
694 | + | else dF(bP, bL[bQ]) | |
695 | + | ||
696 | + | func bR (bP,bQ) = if ((bQ >= bM)) | |
697 | + | then bP | |
566 | 698 | else throw("List size exceeds 6") | |
567 | 699 | ||
568 | - | | |
700 | + | bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6) | |
569 | 701 | } | |
570 | - | $Tuple2(makeString( | |
702 | + | $Tuple2(makeString(cZ._1, "_"), makeString(cZ._2, "_")) | |
571 | 703 | } | |
572 | 704 | } | |
573 | 705 | ||
574 | 706 | ||
575 | - | func | |
576 | - | then | |
577 | - | else -( | |
578 | - | ||
579 | - | ||
580 | - | let | |
581 | - | ||
582 | - | func | |
583 | - | let | |
584 | - | let | |
707 | + | func dH (dI) = if ((dI >= toBigInt(0))) | |
708 | + | then dI | |
709 | + | else -(dI) | |
710 | + | ||
711 | + | ||
712 | + | let dJ = [[6, 9, 14, 15, 16], [5, 8, 13, 14, 15], [1, 4, 9, 10, 15], [1, 6, 7, 15, 19], [4, 7, 8, 13, 18]] | |
713 | + | ||
714 | + | func dK (bw,dL) = { | |
715 | + | let dM = toInt((bw % cp)) | |
716 | + | let dN = if ((dL[0] > dM)) | |
585 | 717 | then "A" | |
586 | - | else if (( | |
718 | + | else if ((dL[1] > dM)) | |
587 | 719 | then "B" | |
588 | - | else if (( | |
720 | + | else if ((dL[2] > dM)) | |
589 | 721 | then "C" | |
590 | - | else if (( | |
722 | + | else if ((dL[3] > dM)) | |
591 | 723 | then "D" | |
592 | - | else if (( | |
724 | + | else if ((dL[4] > dM)) | |
593 | 725 | then "E" | |
594 | 726 | else "F" | |
595 | - | | |
596 | - | } | |
597 | - | ||
598 | - | ||
599 | - | func | |
600 | - | let | |
601 | - | func | |
602 | - | ||
603 | - | let | |
604 | - | let | |
605 | - | let | |
606 | - | let | |
607 | - | func | |
608 | - | then | |
609 | - | else | |
610 | - | ||
611 | - | func | |
612 | - | then | |
727 | + | dN | |
728 | + | } | |
729 | + | ||
730 | + | ||
731 | + | func dO (dP,dQ) = { | |
732 | + | let dR = dJ[dQ] | |
733 | + | func dS (bI,cX) = $Tuple2((((((bI._1 + dK(bI._2, dR)) + dK((bI._2 / cp), dR)) + dK((bI._2 / cq), dR)) + dK((bI._2 / cr), dR)) + dK((bI._2 / cs), dR)), (bI._2 / ct)) | |
734 | + | ||
735 | + | let dT = { | |
736 | + | let bL = [1, 2, 3, 4, 5] | |
737 | + | let bM = size(bL) | |
738 | + | let bN = $Tuple2("", (dP / co)) | |
739 | + | func bO (bP,bQ) = if ((bQ >= bM)) | |
740 | + | then bP | |
741 | + | else dS(bP, bL[bQ]) | |
742 | + | ||
743 | + | func bR (bP,bQ) = if ((bQ >= bM)) | |
744 | + | then bP | |
613 | 745 | else throw("List size exceeds 5") | |
614 | 746 | ||
615 | - | | |
747 | + | bR(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5) | |
616 | 748 | } | |
617 | - | | |
618 | - | } | |
619 | - | ||
620 | - | ||
621 | - | func | |
622 | - | let | |
623 | - | [toString(valueOrElse(parseInt( | |
624 | - | then | |
625 | - | else "0_0_0_0_0_0", if ((size(split( | |
626 | - | then | |
627 | - | else "0_0_0_0_0_0", | |
628 | - | } | |
629 | - | ||
630 | - | ||
631 | - | func | |
632 | - | let | |
633 | - | (( | |
634 | - | } | |
635 | - | ||
636 | - | ||
637 | - | func | |
638 | - | let | |
639 | - | func | |
640 | - | ||
641 | - | func | |
642 | - | let | |
643 | - | let | |
644 | - | let | |
645 | - | $Tuple2(( | |
749 | + | dT._1 | |
750 | + | } | |
751 | + | ||
752 | + | ||
753 | + | func dU (dV) = { | |
754 | + | let dW = split(valueOrElse(getString(dV), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":") | |
755 | + | [toString(valueOrElse(parseInt(dW[ai]), 0)), if ((size(split(dW[aj], "_")) == n)) | |
756 | + | then dW[aj] | |
757 | + | else "0_0_0_0_0_0", if ((size(split(dW[ak], "_")) == n)) | |
758 | + | then dW[ak] | |
759 | + | else "0_0_0_0_0_0", dW[al]] | |
760 | + | } | |
761 | + | ||
762 | + | ||
763 | + | func dX (dY) = { | |
764 | + | let dZ = split(dY, "_") | |
765 | + | ((v * (parseIntValue(dZ[1]) + 1)) * parseIntValue(dZ[0])) | |
766 | + | } | |
767 | + | ||
768 | + | ||
769 | + | func ea (eb) = { | |
770 | + | let ec = eb[ac] | |
771 | + | func ed (bI,bJ) = (bI + parseIntValue(bJ)) | |
772 | + | ||
773 | + | func ee (bI,bJ) = { | |
774 | + | let aD = bI._1 | |
775 | + | let ef = am(aD) | |
776 | + | let eg = (((parseIntValue(bJ) + ef) - 1) / ef) | |
777 | + | $Tuple2((aD + 1), (bI._2 + (eg * i))) | |
646 | 778 | } | |
647 | 779 | ||
648 | - | let | |
649 | - | let | |
650 | - | let | |
651 | - | let | |
652 | - | func | |
653 | - | then | |
654 | - | else | |
655 | - | ||
656 | - | func | |
657 | - | then | |
780 | + | let eh = { | |
781 | + | let bL = split(eb[aa], "_") | |
782 | + | let bM = size(bL) | |
783 | + | let bN = 0 | |
784 | + | func bO (bP,bQ) = if ((bQ >= bM)) | |
785 | + | then bP | |
786 | + | else ed(bP, bL[bQ]) | |
787 | + | ||
788 | + | func bR (bP,bQ) = if ((bQ >= bM)) | |
789 | + | then bP | |
658 | 790 | else throw("List size exceeds 6") | |
659 | 791 | ||
660 | - | | |
792 | + | bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6) | |
661 | 793 | } | |
662 | - | let | |
663 | - | let | |
664 | - | let | |
665 | - | let | |
666 | - | func | |
667 | - | then | |
668 | - | else | |
669 | - | ||
670 | - | func | |
671 | - | then | |
794 | + | let ei = { | |
795 | + | let bL = split(eb[ab], "_") | |
796 | + | let bM = size(bL) | |
797 | + | let bN = 0 | |
798 | + | func bX (bP,bQ) = if ((bQ >= bM)) | |
799 | + | then bP | |
800 | + | else ed(bP, bL[bQ]) | |
801 | + | ||
802 | + | func bY (bP,bQ) = if ((bQ >= bM)) | |
803 | + | then bP | |
672 | 804 | else throw("List size exceeds 6") | |
673 | 805 | ||
674 | - | | |
806 | + | bY(bX(bX(bX(bX(bX(bX(bN, 0), 1), 2), 3), 4), 5), 6) | |
675 | 807 | } | |
676 | - | let | |
808 | + | let ej = if ((ec == "")) | |
677 | 809 | then 0 | |
678 | - | else ( let | |
679 | - | let | |
680 | - | let | |
681 | - | func | |
682 | - | then | |
683 | - | else | |
684 | - | ||
685 | - | func | |
686 | - | then | |
810 | + | else ( let bL = split_4C(ec, "_") | |
811 | + | let bM = size(bL) | |
812 | + | let bN = $Tuple2(0, 0) | |
813 | + | func ek (bP,bQ) = if ((bQ >= bM)) | |
814 | + | then bP | |
815 | + | else ee(bP, bL[bQ]) | |
816 | + | ||
817 | + | func el (bP,bQ) = if ((bQ >= bM)) | |
818 | + | then bP | |
687 | 819 | else throw("List size exceeds 50") | |
688 | 820 | ||
689 | - | | |
690 | - | (( | |
691 | - | } | |
692 | - | ||
693 | - | ||
694 | - | func | |
695 | - | let | |
696 | - | let | |
697 | - | let | |
698 | - | let | |
699 | - | let | |
700 | - | let | |
701 | - | then makeString(["0", toString( | |
702 | - | else { | |
703 | - | let | |
704 | - | let | |
705 | - | let | |
706 | - | then parseIntValue( | |
707 | - | else | |
708 | - | makeString([toString( | |
709 | - | } | |
710 | - | [ | |
711 | - | then | |
712 | - | else "0_0_0_0_0_0", if ((size(split( | |
713 | - | then | |
714 | - | else "0_0_0_0_0_0", | |
715 | - | } | |
716 | - | ||
717 | - | ||
718 | - | func | |
719 | - | let | |
720 | - | let | |
721 | - | (( | |
722 | - | } | |
723 | - | ||
724 | - | ||
725 | - | func | |
726 | - | let | |
727 | - | then ((( | |
728 | - | else -((((-( | |
729 | - | ( | |
730 | - | } | |
731 | - | ||
732 | - | ||
733 | - | func | |
821 | + | el(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(bN, 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))._2 | |
822 | + | ((eh + ei) + ej) | |
823 | + | } | |
824 | + | ||
825 | + | ||
826 | + | func em (en,eo,ep) = { | |
827 | + | let dY = ((toString(eo) + "_") + toString(ep)) | |
828 | + | let eq = dX(dY) | |
829 | + | let er = valueOrElse(getString(en), (dY + ":0_0_0_0_0_0:0_0_0_0_0_0::0")) | |
830 | + | let es = split_4C(er, ":") | |
831 | + | let et = ea(es) | |
832 | + | let eu = if ((5 > size(es))) | |
833 | + | then makeString(["0", toString(et), toString((eq - et)), toString(eq)], "_") | |
834 | + | else { | |
835 | + | let ev = split(es[ad], "_") | |
836 | + | let ew = parseIntValue(ev[ae]) | |
837 | + | let ex = if ((size(ev) > 1)) | |
838 | + | then parseIntValue(ev[af]) | |
839 | + | else et | |
840 | + | makeString([toString(ew), toString(ex), toString(((eq - ew) - ex)), toString(eq)], "_") | |
841 | + | } | |
842 | + | [es[Z], if ((size(split(es[aa], "_")) == n)) | |
843 | + | then es[aa] | |
844 | + | else "0_0_0_0_0_0", if ((size(split(es[ab], "_")) == n)) | |
845 | + | then es[ab] | |
846 | + | else "0_0_0_0_0_0", es[ac], eu] | |
847 | + | } | |
848 | + | ||
849 | + | ||
850 | + | func ey (eb) = { | |
851 | + | let ez = ea(eb) | |
852 | + | let eA = parseIntValue(split(eb[ad], "_")[ae]) | |
853 | + | ((dX(eb[Z]) - ez) - eA) | |
854 | + | } | |
855 | + | ||
856 | + | ||
857 | + | func eB (eC,ef) = { | |
858 | + | let eg = if ((eC >= 0)) | |
859 | + | then (((eC + ef) - 1) / ef) | |
860 | + | else -((((-(eC) + ef) - 1) / ef)) | |
861 | + | (eg * i) | |
862 | + | } | |
863 | + | ||
864 | + | ||
865 | + | func eD (eE,eb,eF) = if ((size(eE) != 3)) | |
734 | 866 | then throw("cargoListStr should contain exactly 2 ':' separators") | |
735 | 867 | else { | |
736 | - | let | |
737 | - | let | |
738 | - | let | |
868 | + | let eG = split(eE[0], "_") | |
869 | + | let eH = split(eE[1], "_") | |
870 | + | let eI = if ((eE[2] == "")) | |
739 | 871 | then nil | |
740 | - | else split( | |
741 | - | if ((size( | |
872 | + | else split(eE[2], "_") | |
873 | + | if ((size(eG) != n)) | |
742 | 874 | then throw("All 6 resources should be passed") | |
743 | - | else if ((size( | |
875 | + | else if ((size(eH) != n)) | |
744 | 876 | then throw("All 6 materials should be passed") | |
745 | 877 | else { | |
746 | - | let | |
747 | - | let | |
748 | - | let | |
749 | - | let | |
878 | + | let dB = ey(eb) | |
879 | + | let eJ = split(eb[aa], "_") | |
880 | + | let eK = split(eb[ab], "_") | |
881 | + | let eL = if ((eb[ac] == "")) | |
750 | 882 | then nil | |
751 | - | else split( | |
752 | - | let | |
753 | - | let | |
754 | - | let | |
883 | + | else split(eb[ac], "_") | |
884 | + | let dz = split(eF[aj], "_") | |
885 | + | let eM = split(eF[ak], "_") | |
886 | + | let eN = if ((eF[al] == "")) | |
755 | 887 | then nil | |
756 | - | else split( | |
757 | - | func | |
758 | - | let | |
759 | - | let | |
760 | - | let | |
761 | - | let | |
762 | - | if (( | |
763 | - | then $Tuple4(( | |
764 | - | else if (( | |
765 | - | then if (( | |
766 | - | then throw((((("Attempt to take " + | |
767 | - | else $Tuple4(( | |
768 | - | else if ((-( | |
769 | - | then throw((((("Attempt to take " + toString(-( | |
770 | - | else $Tuple4(( | |
888 | + | else split(eF[al], "_") | |
889 | + | func eO (bI,bJ) = { | |
890 | + | let dn = bI._1 | |
891 | + | let eP = parseIntValue(bJ) | |
892 | + | let eQ = parseIntValue(eJ[dn]) | |
893 | + | let eR = parseIntValue(dz[dn]) | |
894 | + | if ((eP == 0)) | |
895 | + | then $Tuple4((dn + 1), (bI._2 :+ eJ[dn]), (bI._3 :+ dz[dn]), bI._4) | |
896 | + | else if ((eP > 0)) | |
897 | + | then if ((eP > eR)) | |
898 | + | then throw((((("Attempt to take " + bJ) + " from backpack, but only ") + toString(eR)) + " available")) | |
899 | + | else $Tuple4((dn + 1), (bI._2 :+ toString((eQ + eP))), (bI._3 :+ toString((eR - eP))), (bI._4 + eP)) | |
900 | + | else if ((-(eP) > eQ)) | |
901 | + | then throw((((("Attempt to take " + toString(-(eP))) + " from warehouse, but only ") + toString(eQ)) + " available")) | |
902 | + | else $Tuple4((dn + 1), (bI._2 :+ toString((eQ + eP))), (bI._3 :+ toString((eR - eP))), (bI._4 + eP)) | |
771 | 903 | } | |
772 | 904 | ||
773 | - | let | |
774 | - | let | |
775 | - | let | |
776 | - | let | |
777 | - | func | |
778 | - | then | |
779 | - | else | |
780 | - | ||
781 | - | func | |
782 | - | then | |
905 | + | let cZ = { | |
906 | + | let bL = eG | |
907 | + | let bM = size(bL) | |
908 | + | let bN = $Tuple4(0, nil, nil, 0) | |
909 | + | func bO (bP,bQ) = if ((bQ >= bM)) | |
910 | + | then bP | |
911 | + | else eO(bP, bL[bQ]) | |
912 | + | ||
913 | + | func bR (bP,bQ) = if ((bQ >= bM)) | |
914 | + | then bP | |
783 | 915 | else throw("List size exceeds 6") | |
784 | 916 | ||
785 | - | | |
917 | + | bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6) | |
786 | 918 | } | |
787 | - | func | |
788 | - | let | |
789 | - | let | |
790 | - | let | |
791 | - | let | |
792 | - | if (( | |
793 | - | then $Tuple4(( | |
794 | - | else if (( | |
795 | - | then if (( | |
796 | - | then throw((((("Attempt to take " + | |
797 | - | else $Tuple4(( | |
798 | - | else if ((-( | |
799 | - | then throw((((("Attempt to take " + toString(-( | |
800 | - | else $Tuple4(( | |
919 | + | func eS (bI,bJ) = { | |
920 | + | let dn = bI._1 | |
921 | + | let eP = parseIntValue(bJ) | |
922 | + | let eT = parseIntValue(eK[dn]) | |
923 | + | let eU = parseIntValue(eM[dn]) | |
924 | + | if ((eP == 0)) | |
925 | + | then $Tuple4((dn + 1), (bI._2 :+ eK[dn]), (bI._3 :+ eM[dn]), bI._4) | |
926 | + | else if ((eP > 0)) | |
927 | + | then if ((eP > eU)) | |
928 | + | then throw((((("Attempt to take " + bJ) + " from backpack, but only ") + toString(eU)) + " available")) | |
929 | + | else $Tuple4((dn + 1), (bI._2 :+ toString((eT + eP))), (bI._3 :+ toString((eU - eP))), (bI._4 + eP)) | |
930 | + | else if ((-(eP) > eT)) | |
931 | + | then throw((((("Attempt to take " + toString(-(eP))) + " from warehouse, but only ") + toString(eT)) + " available")) | |
932 | + | else $Tuple4((dn + 1), (bI._2 :+ toString((eT + eP))), (bI._3 :+ toString((eU - eP))), (bI._4 + eP)) | |
801 | 933 | } | |
802 | 934 | ||
803 | - | let | |
804 | - | let | |
805 | - | let | |
806 | - | let | |
807 | - | func | |
808 | - | then | |
809 | - | else | |
810 | - | ||
811 | - | func | |
812 | - | then | |
935 | + | let eV = { | |
936 | + | let bL = eH | |
937 | + | let bM = size(bL) | |
938 | + | let bN = $Tuple4(0, nil, nil, cZ._4) | |
939 | + | func bX (bP,bQ) = if ((bQ >= bM)) | |
940 | + | then bP | |
941 | + | else eS(bP, bL[bQ]) | |
942 | + | ||
943 | + | func bY (bP,bQ) = if ((bQ >= bM)) | |
944 | + | then bP | |
813 | 945 | else throw("List size exceeds 6") | |
814 | 946 | ||
815 | - | | |
947 | + | bY(bX(bX(bX(bX(bX(bX(bN, 0), 1), 2), 3), 4), 5), 6) | |
816 | 948 | } | |
817 | - | func | |
818 | - | let | |
819 | - | let | |
820 | - | let | |
821 | - | let | |
822 | - | then parseIntValue( | |
949 | + | func eW (bI,bJ) = { | |
950 | + | let dn = bI._1 | |
951 | + | let ef = am(dn) | |
952 | + | let eP = parseIntValue(bJ) | |
953 | + | let eX = if ((size(eL) > dn)) | |
954 | + | then parseIntValue(eL[dn]) | |
823 | 955 | else 0 | |
824 | - | let | |
825 | - | then parseIntValue( | |
956 | + | let eY = if ((size(eN) > dn)) | |
957 | + | then parseIntValue(eN[dn]) | |
826 | 958 | else 0 | |
827 | - | if (( | |
828 | - | then $Tuple4(( | |
829 | - | else if (( | |
830 | - | then if (( | |
831 | - | then throw((((("Attempt to take " + | |
959 | + | if ((eP == 0)) | |
960 | + | then $Tuple4((dn + 1), (bI._2 :+ toString(eX)), (bI._3 :+ toString(eY)), bI._4) | |
961 | + | else if ((eP > 0)) | |
962 | + | then if ((eP > eY)) | |
963 | + | then throw((((("Attempt to take " + bJ) + " from backpack, but only ") + toString(eY)) + " available")) | |
832 | 964 | else { | |
833 | - | let | |
834 | - | $Tuple4(( | |
965 | + | let eZ = (eB((eX + eP), ef) - eB(eX, ef)) | |
966 | + | $Tuple4((dn + 1), (bI._2 :+ toString((eX + eP))), (bI._3 :+ toString((eY - eP))), (bI._4 + eZ)) | |
835 | 967 | } | |
836 | - | else if ((-( | |
837 | - | then throw((((("Attempt to take " + toString(-( | |
968 | + | else if ((-(eP) > eX)) | |
969 | + | then throw((((("Attempt to take " + toString(-(eP))) + " from warehouse, but only ") + toString(eX)) + " available")) | |
838 | 970 | else { | |
839 | - | let | |
840 | - | $Tuple4(( | |
971 | + | let eZ = (eB((eX + eP), ef) - eB(eX, ef)) | |
972 | + | $Tuple4((dn + 1), (bI._2 :+ toString((eX + eP))), (bI._3 :+ toString((eY - eP))), (bI._4 + eZ)) | |
841 | 973 | } | |
842 | 974 | } | |
843 | 975 | ||
844 | - | let | |
976 | + | let dW = if ((size(eI) != 0)) | |
845 | 977 | then { | |
846 | - | let | |
847 | - | let | |
848 | - | let | |
849 | - | func | |
850 | - | then | |
851 | - | else | |
852 | - | ||
853 | - | func | |
854 | - | then | |
978 | + | let bL = eI | |
979 | + | let bM = size(bL) | |
980 | + | let bN = $Tuple4(0, nil, nil, eV._4) | |
981 | + | func ek (bP,bQ) = if ((bQ >= bM)) | |
982 | + | then bP | |
983 | + | else eW(bP, bL[bQ]) | |
984 | + | ||
985 | + | func el (bP,bQ) = if ((bQ >= bM)) | |
986 | + | then bP | |
855 | 987 | else throw("List size exceeds 50") | |
856 | 988 | ||
857 | - | | |
989 | + | el(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(bN, 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) | |
858 | 990 | } | |
859 | - | else $Tuple4(0, | |
860 | - | let | |
861 | - | if (( | |
862 | - | then throw((((("Attempt to put total " + toString( | |
863 | - | else $Tuple7(makeString( | |
991 | + | else $Tuple4(0, eL, eN, eV._4) | |
992 | + | let fa = dW._4 | |
993 | + | if ((fa > dB)) | |
994 | + | then throw((((("Attempt to put total " + toString(fa)) + " stuff, but only ") + toString(dB)) + " warehouse space left")) | |
995 | + | else $Tuple7(makeString(cZ._2, "_"), makeString(eV._2, "_"), makeString(dW._2, "_"), makeString(cZ._3, "_"), makeString(eV._3, "_"), makeString(dW._3, "_"), fa) | |
864 | 996 | } | |
865 | 997 | } | |
866 | 998 | ||
867 | 999 | ||
868 | - | func | |
869 | - | let | |
870 | - | let | |
871 | - | let | |
872 | - | let | |
873 | - | let | |
874 | - | let | |
875 | - | let | |
876 | - | let | |
877 | - | let | |
878 | - | let | |
879 | - | $Tuple2([IntegerEntry( | |
880 | - | } | |
881 | - | ||
882 | - | ||
883 | - | func | |
1000 | + | func fb (fc,fd) = { | |
1001 | + | let bm = toString(fc) | |
1002 | + | let fe = dH(toBigInt(fd)) | |
1003 | + | let ff = valueOrElse(getInteger(cv()), (cu + 1)) | |
1004 | + | let cx = toString(ff) | |
1005 | + | let dQ = toInt((fe % co)) | |
1006 | + | let dq = dO(fe, dQ) | |
1007 | + | let fg = F[dQ] | |
1008 | + | let fh = Issue(cQ(cx, "S"), makeString([cx, "S", dq, fg], "_"), 1, 0, false) | |
1009 | + | let aM = calculateAssetId(fh) | |
1010 | + | let fi = toBase58String(aM) | |
1011 | + | $Tuple2([IntegerEntry(cv(), (ff + 1)), fh, StringEntry(cw(cx), fi), StringEntry(aL(fi), bm), StringEntry(cC(cx), bm), IntegerEntry(aP(fi), 0), IntegerEntry(cA(fi, bm), 0), ScriptTransfer(fc, 1, aM)], $Tuple2(fi, fg)) | |
1012 | + | } | |
1013 | + | ||
1014 | + | ||
1015 | + | func fj (db,fc,fd,fk,fl) = if (!(sigVerify_8Kb(fk, fl, cg))) | |
884 | 1016 | then throw("signature does not match") | |
885 | 1017 | else { | |
886 | - | let | |
887 | - | let | |
888 | - | let | |
889 | - | let | |
890 | - | let | |
891 | - | let | |
892 | - | let | |
893 | - | let | |
894 | - | if (if (( | |
1018 | + | let dZ = split(toUtf8String(fk), ";") | |
1019 | + | let fm = split(dZ[0], "|") | |
1020 | + | let fn = split(fm[cJ], "_") | |
1021 | + | let fo = parseIntValue(fn[0]) | |
1022 | + | let fp = parseIntValue(fn[1]) | |
1023 | + | let fq = split(dZ[1], ":") | |
1024 | + | let fr = fq[0] | |
1025 | + | let fs = parseIntValue(fm[cO]) | |
1026 | + | if (if ((fs > (lastBlock.timestamp + ci))) | |
895 | 1027 | then true | |
896 | - | else ((lastBlock.timestamp - | |
1028 | + | else ((lastBlock.timestamp - ci) > fs)) | |
897 | 1029 | then throw("signature outdated") | |
898 | 1030 | else { | |
899 | - | let | |
900 | - | let | |
901 | - | let | |
902 | - | if (( | |
903 | - | then throw(((("Tx ids don't match! In state: " + | |
1031 | + | let ft = fq[1] | |
1032 | + | let bm = toString(fc) | |
1033 | + | let fu = valueOrElse(getString(aJ(bm)), "") | |
1034 | + | if ((fu != ft)) | |
1035 | + | then throw(((("Tx ids don't match! In state: " + fu) + ", in msg: ") + ft)) | |
904 | 1036 | else { | |
905 | - | let | |
906 | - | let | |
907 | - | let | |
908 | - | if (( | |
909 | - | then throw(((("oldHealth=" + toString(valueOrElse(getInteger( | |
910 | - | else if ((0 >= | |
1037 | + | let bg = valueOrErrorMessage(getString(be(bm)), "You don't have a duck staked") | |
1038 | + | let fv = bi(bg) | |
1039 | + | let fw = valueOrElse(getInteger(fv), 100) | |
1040 | + | if ((fw != fo)) | |
1041 | + | then throw(((("oldHealth=" + toString(valueOrElse(getInteger(fv), 100))) + " from state does not match one from flight log=") + toString(fo))) | |
1042 | + | else if ((0 >= fo)) | |
911 | 1043 | then throw("You can't fly with zero health") | |
912 | - | else if ((0 >= | |
913 | - | then $Tuple3(((if (!( | |
914 | - | then [ScriptTransfer( | |
915 | - | else nil) :+ IntegerEntry( | |
1044 | + | else if ((0 >= fp)) | |
1045 | + | then $Tuple3(((if (!(db)) | |
1046 | + | then [ScriptTransfer(fc, cn, b)] | |
1047 | + | else nil) :+ IntegerEntry(fv, 0)), "", 0) | |
916 | 1048 | else { | |
917 | - | let | |
918 | - | then | |
1049 | + | let fx = if ((size(fm) > cP)) | |
1050 | + | then fm[cP] | |
919 | 1051 | else "" | |
920 | - | let | |
921 | - | then | |
1052 | + | let fy = if ((fx == "$")) | |
1053 | + | then bv(invoke(aE, "sendUsdtPrize", [bm], nil)) | |
922 | 1054 | else 0 | |
923 | - | let | |
924 | - | let | |
925 | - | let | |
926 | - | let | |
927 | - | let | |
928 | - | let | |
929 | - | $Tuple3(((( | |
1055 | + | let dV = bf(bg) | |
1056 | + | let eF = dU(dV) | |
1057 | + | let fz = split(eF[ak], "_") | |
1058 | + | let fA = makeString(da(db, fz, cm), "_") | |
1059 | + | let fB = fb(fc, fd) | |
1060 | + | let fi = fB._2._1 | |
1061 | + | $Tuple3((((fB._1 :+ StringEntry(bh(bg), makeString([fB._2._2, "L", fi], "_"))) :+ IntegerEntry(fv, fp)) :+ StringEntry(dV, makeString([eF[ai], eF[aj], fA, eF[al]], ":"))), fi, fy) | |
930 | 1062 | } | |
931 | 1063 | } | |
932 | 1064 | } | |
933 | 1065 | } | |
934 | 1066 | ||
935 | 1067 | ||
936 | - | func | |
937 | - | let | |
938 | - | let | |
939 | - | let | |
940 | - | let | |
941 | - | (( | |
942 | - | } | |
943 | - | ||
944 | - | ||
945 | - | func | |
946 | - | let | |
947 | - | then $Tuple2( | |
948 | - | else { | |
949 | - | let | |
950 | - | let | |
951 | - | let | |
952 | - | if (( | |
953 | - | then throw((("Duck location type is " + | |
954 | - | else $Tuple2( | |
955 | - | } | |
956 | - | let | |
957 | - | let | |
958 | - | let | |
959 | - | let | |
960 | - | let | |
961 | - | let | |
962 | - | if (( | |
963 | - | then throw(( | |
964 | - | else { | |
965 | - | let | |
966 | - | $Tuple4( | |
967 | - | } | |
968 | - | } | |
969 | - | ||
970 | - | ||
971 | - | func | |
1068 | + | func fC (aW,fD) = { | |
1069 | + | let ep = valueOrElse(getInteger(aP(aW)), 0) | |
1070 | + | let fE = valueOrElse(getInteger(aQ(m, aW)), 0) | |
1071 | + | let fF = (ep / 6) | |
1072 | + | let fG = (ep / 7) | |
1073 | + | ((t + fraction(t, ((ep + fF) + (2 * fG)), 5)) + fraction(t, fE, (fD * 5))) | |
1074 | + | } | |
1075 | + | ||
1076 | + | ||
1077 | + | func fH (aK,fI,fJ) = { | |
1078 | + | let fK = if ((fI == cG)) | |
1079 | + | then $Tuple2(fJ, valueOrElse(getString(be(aK)), "")) | |
1080 | + | else { | |
1081 | + | let bg = valueOrErrorMessage(getString(be(aK)), "You don't have a duck staked") | |
1082 | + | let fL = valueOrElse(getString(bh(bg)), w) | |
1083 | + | let fM = split(value(fL), "_") | |
1084 | + | if ((fM[bq] != "L")) | |
1085 | + | then throw((("Duck location type is " + fM[bq]) + ", but should be L")) | |
1086 | + | else $Tuple2(fM[br], bg) | |
1087 | + | } | |
1088 | + | let aW = fK._1 | |
1089 | + | let fN = fK._2 | |
1090 | + | let bW = value(assetInfo(fromBase58String(aW))) | |
1091 | + | let fO = aO(aW) | |
1092 | + | let fP = valueOrErrorMessage(getInteger(fO), (("Land " + bW.name) + " is not staked")) | |
1093 | + | let fQ = valueOrErrorMessage(getString(aL(aW)), (("NFT " + bW.name) + " is orphaned")) | |
1094 | + | if ((fQ != aK)) | |
1095 | + | then throw((k + " is not yours")) | |
1096 | + | else { | |
1097 | + | let fR = split(bW.description, "_") | |
1098 | + | $Tuple4(fN, aW, fR, fP) | |
1099 | + | } | |
1100 | + | } | |
1101 | + | ||
1102 | + | ||
1103 | + | func fS (aK,eC,fI,fJ) = if ((0 > eC)) | |
972 | 1104 | then throw("Negative amount") | |
973 | 1105 | else { | |
974 | - | let | |
975 | - | let | |
976 | - | let | |
977 | - | let | |
978 | - | if ((0 > | |
979 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
1106 | + | let fT = fH(aK, fI, fJ) | |
1107 | + | let bB = fT._3[W] | |
1108 | + | let dj = dp(fT._3[X]) | |
1109 | + | let dt = (lastBlock.timestamp - fT._4) | |
1110 | + | if ((0 > dt)) | |
1111 | + | then throw(((("Saved timestamp is in future, saved = " + toString(fT._4)) + ", current = ") + toString(lastBlock.timestamp))) | |
980 | 1112 | else { | |
981 | - | let | |
982 | - | let | |
983 | - | let | |
984 | - | if (( | |
985 | - | then throw(((("Not enough resources, available = " + toString( | |
1113 | + | let fD = bA(bB) | |
1114 | + | let fU = fC(fT._2, fD) | |
1115 | + | let fV = fraction(dt, (fU * fD), u) | |
1116 | + | if ((eC > fV)) | |
1117 | + | then throw(((("Not enough resources, available = " + toString(fV)) + ", requested = ") + toString(eC))) | |
986 | 1118 | else { | |
987 | - | let | |
988 | - | let | |
989 | - | let | |
990 | - | let | |
991 | - | let | |
992 | - | let | |
993 | - | let | |
994 | - | let | |
995 | - | let | |
996 | - | if (if (( | |
997 | - | then ( | |
1119 | + | let fW = fraction((fV - eC), u, (fU * fD)) | |
1120 | + | let fX = (lastBlock.timestamp - fW) | |
1121 | + | let eo = (fD / o) | |
1122 | + | let dA = dw(dj, (dt - fW), eo, fU) | |
1123 | + | let en = aV(fT._2) | |
1124 | + | let ep = valueOrElse(getInteger(aP(fT._2)), 0) | |
1125 | + | let eb = em(en, eo, ep) | |
1126 | + | let ev = split(eb[ad], "_") | |
1127 | + | let dB = parseIntValue(ev[ag]) | |
1128 | + | if (if ((fI == cG)) | |
1129 | + | then (eC > dB) | |
998 | 1130 | else false) | |
999 | - | then throw((("Only " + toString( | |
1131 | + | then throw((("Only " + toString(dB)) + " space left in warehouse")) | |
1000 | 1132 | else { | |
1001 | - | let | |
1002 | - | let | |
1003 | - | let | |
1004 | - | let | |
1005 | - | let | |
1006 | - | then $Tuple4( | |
1007 | - | else if (( | |
1008 | - | then $Tuple4( | |
1133 | + | let dV = bf(fT._1) | |
1134 | + | let eF = dU(dV) | |
1135 | + | let dz = split(eF[aj], "_") | |
1136 | + | let dy = split(eb[aa], "_") | |
1137 | + | let fY = if ((fI == cG)) | |
1138 | + | then $Tuple4(dr(dy, dj, (dt - fW), eo, fU), eF[aj], (parseIntValue(ev[af]) + dA._2), (parseIntValue(ev[ag]) - dA._2)) | |
1139 | + | else if ((fI == cH)) | |
1140 | + | then $Tuple4(eb[aa], dr(dz, dj, (dt - fW), eo, fU), parseIntValue(ev[af]), parseIntValue(ev[ag])) | |
1009 | 1141 | else { | |
1010 | - | let | |
1011 | - | let | |
1012 | - | $Tuple4( | |
1142 | + | let fZ = dx(dy, dz, dA, dB) | |
1143 | + | let ga = min([parseIntValue(ev[ag]), dA._2]) | |
1144 | + | $Tuple4(fZ._1, fZ._2, (parseIntValue(ev[af]) + ga), (parseIntValue(ev[ag]) - ga)) | |
1013 | 1145 | } | |
1014 | - | let | |
1015 | - | let | |
1016 | - | let | |
1017 | - | let | |
1018 | - | $Tuple5([IntegerEntry( | |
1146 | + | let gb = fY._1 | |
1147 | + | let gc = fY._2 | |
1148 | + | let gd = fY._3 | |
1149 | + | let ge = fY._4 | |
1150 | + | $Tuple5([IntegerEntry(aO(fT._2), fX), IntegerEntry(aS(k, fT._2, aK), fX)], dV, [eF[ai], gc, eF[ak], eF[al]], en, [eb[Z], gb, eb[ab], eb[ac], makeString([ev[ae], toString(gd), toString(ge), ev[ah]], "_")]) | |
1019 | 1151 | } | |
1020 | 1152 | } | |
1021 | 1153 | } | |
1022 | 1154 | } | |
1023 | 1155 | ||
1024 | 1156 | ||
1025 | - | func | |
1026 | - | let | |
1027 | - | let | |
1028 | - | let | |
1029 | - | | |
1030 | - | } | |
1031 | - | ||
1032 | - | ||
1033 | - | func | |
1034 | - | let | |
1035 | - | let | |
1036 | - | let | |
1037 | - | let | |
1038 | - | let | |
1039 | - | if (( | |
1157 | + | func gf (aK,aW,fD,fI) = { | |
1158 | + | let fO = aO(aW) | |
1159 | + | let fP = value(getInteger(fO)) | |
1160 | + | let fV = (fraction((lastBlock.timestamp - fP), fC(aW, fD), u) * fD) | |
1161 | + | fS(aK, fV, fI, aW) | |
1162 | + | } | |
1163 | + | ||
1164 | + | ||
1165 | + | func gg (db,fc,gh,aW) = { | |
1166 | + | let aK = toString(fc) | |
1167 | + | let fT = fH(aK, cI, aW) | |
1168 | + | let fD = bA(fT._3[W]) | |
1169 | + | let gi = aP(fT._2) | |
1170 | + | let gj = valueOrElse(getInteger(gi), 0) | |
1171 | + | if ((gj >= 3)) | |
1040 | 1172 | then throw("Currently max infrastructure level = 3") | |
1041 | 1173 | else { | |
1042 | - | let | |
1043 | - | let | |
1044 | - | if (if (!( | |
1045 | - | then ( | |
1174 | + | let gk = (gj + 1) | |
1175 | + | let gl = fraction(cl, (fD * gk), o) | |
1176 | + | if (if (!(db)) | |
1177 | + | then (gh != gl) | |
1046 | 1178 | else false) | |
1047 | - | then throw(("Payment attached should be " + toString( | |
1179 | + | then throw(("Payment attached should be " + toString(gl))) | |
1048 | 1180 | else { | |
1049 | - | let | |
1050 | - | let | |
1051 | - | let | |
1052 | - | let | |
1053 | - | let | |
1054 | - | let | |
1055 | - | let | |
1056 | - | let | |
1057 | - | let | |
1058 | - | let | |
1059 | - | let | |
1060 | - | $Tuple2(([IntegerEntry( | |
1181 | + | let dV = bf(fT._1) | |
1182 | + | let eF = dU(dV) | |
1183 | + | let fz = split(eF[ak], "_") | |
1184 | + | let fA = makeString(da(db, fz, fraction(e, (fD * gk), o)), "_") | |
1185 | + | let gm = gf(aK, fT._2, fD, cI) | |
1186 | + | let gn = gm._5 | |
1187 | + | let go = dX(gn[Z]) | |
1188 | + | let gp = makeString([split(gn[Z], "_")[0], toString(gk)], "_") | |
1189 | + | let gq = dX(gp) | |
1190 | + | let ev = split(gn[ad], "_") | |
1191 | + | let gr = makeString([ev[ae], ev[af], toString(((parseIntValue(ev[ag]) + gq) - go)), toString(gq)], "_") | |
1192 | + | $Tuple2(([IntegerEntry(gi, gk), IntegerEntry(cA(fT._2, aK), gk), StringEntry(dV, makeString([eF[ai], gm._3[aj], fA, eF[al]], ":")), StringEntry(gm._4, makeString([gp, gn[aa], gn[ab], gn[ac], gr], ":"))] ++ gm._1), gk) | |
1061 | 1193 | } | |
1062 | 1194 | } | |
1063 | 1195 | } | |
1064 | 1196 | ||
1065 | 1197 | ||
1066 | - | func fD (an,eT) = { | |
1067 | - | let fe = eR(an, bQ, eT) | |
1068 | - | let az = fe._2 | |
1069 | - | let eN = aY(fe._3[D]) | |
1070 | - | let fE = at(k, az) | |
1071 | - | if ((valueOrElse(getInteger(fE), 0) > 0)) | |
1198 | + | func gs (aK) = 0 | |
1199 | + | ||
1200 | + | ||
1201 | + | func gt (aK,fJ) = { | |
1202 | + | let fT = fH(aK, cI, fJ) | |
1203 | + | let aW = fT._2 | |
1204 | + | let fD = bA(fT._3[W]) | |
1205 | + | let gu = aQ(m, aW) | |
1206 | + | if ((valueOrElse(getInteger(gu), 0) > 0)) | |
1072 | 1207 | then throw("Presale artifact is already activated") | |
1073 | - | else if ((parseIntValue( | |
1074 | - | then throw(((( | |
1208 | + | else if ((parseIntValue(fT._3[V]) > cu)) | |
1209 | + | then throw((((k + " ") + aW) + " is not eligible for presale artifact")) | |
1075 | 1210 | else { | |
1076 | - | let | |
1077 | - | (((( | |
1211 | + | let gm = gf(aK, aW, fD, cI) | |
1212 | + | ((((gm._1 :+ IntegerEntry(gu, fD)) :+ IntegerEntry(cB(m, aW, aK), fD)) :+ StringEntry(gm._2, makeString(gm._3, ":"))) :+ StringEntry(gm._4, makeString(gm._5, ":"))) | |
1078 | 1213 | } | |
1079 | 1214 | } | |
1080 | 1215 | ||
1081 | 1216 | ||
1082 | - | func | |
1083 | - | let | |
1084 | - | func | |
1085 | - | let | |
1086 | - | let | |
1087 | - | let | |
1088 | - | let | |
1089 | - | if (( | |
1090 | - | then throw(( | |
1217 | + | func gv (gw,gk,gx,aK,gy,fd,gz) = { | |
1218 | + | let bg = valueOrErrorMessage(getString(be(aK)), "You don't have a duck staked") | |
1219 | + | func gA (bI,aW) = { | |
1220 | + | let bW = value(assetInfo(fromBase58String(aW))) | |
1221 | + | let fO = aO(aW) | |
1222 | + | let fP = valueOrErrorMessage(getInteger(fO), (("NFT " + bW.name) + " is not staked")) | |
1223 | + | let fQ = valueOrErrorMessage(getString(aL(aW)), (("NFT " + bW.name) + " is orphaned")) | |
1224 | + | if ((fQ != aK)) | |
1225 | + | then throw((k + " is not yours")) | |
1091 | 1226 | else { | |
1092 | - | let | |
1093 | - | let | |
1094 | - | if (if (( | |
1095 | - | then ( | |
1227 | + | let fR = split(bW.description, "_") | |
1228 | + | let fg = fR[Y] | |
1229 | + | if (if ((bI._3 != "")) | |
1230 | + | then (bI._3 != fg) | |
1096 | 1231 | else false) | |
1097 | 1232 | then throw("Lands should be on the same continent to merge") | |
1098 | 1233 | else { | |
1099 | - | let | |
1100 | - | let | |
1101 | - | let | |
1102 | - | let | |
1103 | - | let | |
1104 | - | let | |
1105 | - | let | |
1106 | - | let | |
1107 | - | let c = | |
1234 | + | let bB = fR[W] | |
1235 | + | let gB = bI._1 | |
1236 | + | let dn = valueOrErrorMessage(indexOf(gB, bB), "You haven't passed all the lands needed") | |
1237 | + | let gC = (take(gB, dn) + drop(gB, (dn + 1))) | |
1238 | + | let fD = bA(bB) | |
1239 | + | let gD = (bI._2 + valueOrElse(getInteger(aQ(m, aW)), 0)) | |
1240 | + | let ep = valueOrElse(getInteger(aP(aW)), 0) | |
1241 | + | let gE = { | |
1242 | + | let c = bB | |
1108 | 1243 | if (("S" == c)) | |
1109 | 1244 | then 3 | |
1110 | 1245 | else if (("M" == c)) | |
1115 | 1250 | then 6 | |
1116 | 1251 | else throw("Only S, M, L, XL can merge") | |
1117 | 1252 | } | |
1118 | - | if (( | |
1253 | + | if ((ep != gE)) | |
1119 | 1254 | then throw("All lands should be maxed to merge") | |
1120 | 1255 | else { | |
1121 | - | let | |
1122 | - | let | |
1123 | - | let | |
1124 | - | if ((0 > | |
1125 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
1256 | + | let cx = fR[V] | |
1257 | + | let dj = dp(fR[X]) | |
1258 | + | let dt = (lastBlock.timestamp - fP) | |
1259 | + | if ((0 > dt)) | |
1260 | + | then throw(((("Saved timestamp is in future, saved = " + toString(fP)) + ", current = ") + toString(lastBlock.timestamp))) | |
1126 | 1261 | else { | |
1127 | - | let | |
1128 | - | let | |
1129 | - | let | |
1130 | - | let | |
1131 | - | let | |
1132 | - | let | |
1133 | - | if (!(isDefined( | |
1134 | - | then throw(("Your staked lands don't contain " + | |
1262 | + | let fU = fC(aW, fD) | |
1263 | + | let eo = (fD / o) | |
1264 | + | let gc = dr(split(bI._4, "_"), dj, dt, eo, fU) | |
1265 | + | let bG = dh(split(bI._6, "_"), dj, eo, -1) | |
1266 | + | let bU = bI._7 | |
1267 | + | let aD = indexOf(bU, aW) | |
1268 | + | if (!(isDefined(aD))) | |
1269 | + | then throw(("Your staked lands don't contain " + aW)) | |
1135 | 1270 | else { | |
1136 | - | let | |
1137 | - | let | |
1138 | - | $Tuple8( | |
1271 | + | let gF = aN(aW) | |
1272 | + | let gG = valueOrElse(getString(gF), "") | |
1273 | + | $Tuple8(gC, gD, fg, gc, (((((((((((((bI._5 :+ DeleteEntry(aO(aW))) :+ DeleteEntry(aS(k, aW, aK))) :+ DeleteEntry(cw(cx))) :+ DeleteEntry(aL(aW))) :+ DeleteEntry(aP(aW))) :+ DeleteEntry(cA(aW, aK))) :+ DeleteEntry(aQ(m, aW))) :+ DeleteEntry(cB(m, aW, aK))) :+ DeleteEntry(cC(cx))) :+ DeleteEntry(aV(aW))) :+ DeleteEntry(gF)) :+ DeleteEntry(cy(gG))) :+ Burn(fromBase58String(aW), 1)), bG, removeByIndex(bU, value(aD)), (bI._8 + fD)) | |
1139 | 1274 | } | |
1140 | 1275 | } | |
1141 | 1276 | } | |
1143 | 1278 | } | |
1144 | 1279 | } | |
1145 | 1280 | ||
1146 | - | let | |
1147 | - | let | |
1148 | - | let | |
1149 | - | let | |
1150 | - | let | |
1151 | - | let | |
1152 | - | then split_51C(value( | |
1281 | + | let dV = bf(bg) | |
1282 | + | let eF = dU(dV) | |
1283 | + | let gH = valueOrElse(getString(bj()), "0_0_0_0_0_0") | |
1284 | + | let gI = aX(aK) | |
1285 | + | let bT = getString(gI) | |
1286 | + | let gJ = if (isDefined(bT)) | |
1287 | + | then split_51C(value(bT), "_") | |
1153 | 1288 | else nil | |
1154 | - | let | |
1155 | - | let | |
1156 | - | let | |
1157 | - | let | |
1158 | - | func | |
1159 | - | then | |
1160 | - | else | |
1161 | - | ||
1162 | - | func | |
1163 | - | then | |
1289 | + | let cZ = { | |
1290 | + | let bL = gy | |
1291 | + | let bM = size(bL) | |
1292 | + | let bN = $Tuple8(gx, 0, "", eF[aj], nil, gH, gJ, 0) | |
1293 | + | func bO (bP,bQ) = if ((bQ >= bM)) | |
1294 | + | then bP | |
1295 | + | else gA(bP, bL[bQ]) | |
1296 | + | ||
1297 | + | func bR (bP,bQ) = if ((bQ >= bM)) | |
1298 | + | then bP | |
1164 | 1299 | else throw("List size exceeds 5") | |
1165 | 1300 | ||
1166 | - | | |
1301 | + | bR(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5) | |
1167 | 1302 | } | |
1168 | - | let | |
1169 | - | let | |
1170 | - | let | |
1171 | - | let | |
1172 | - | let | |
1173 | - | let | |
1174 | - | let | |
1175 | - | let | |
1176 | - | let | |
1177 | - | let | |
1178 | - | let | |
1179 | - | $Tuple2(((((((((((((((( | |
1180 | - | then StringEntry( | |
1181 | - | else DeleteEntry( | |
1303 | + | let fg = cZ._3 | |
1304 | + | let dQ = valueOrErrorMessage(indexOf(F, fg), ("Unknown continent: " + fg)) | |
1305 | + | let dq = dO(dH(toBigInt(fd)), dQ) | |
1306 | + | let ff = valueOrElse(getInteger(cv()), (cu + 1)) | |
1307 | + | let gK = toString(ff) | |
1308 | + | let fh = Issue(cQ(gK, gw), makeString([gK, gw, dq, fg], "_"), 1, 0, false) | |
1309 | + | let aM = calculateAssetId(fh) | |
1310 | + | let gL = toBase58String(aM) | |
1311 | + | let fA = makeString(da((gz > 0), split(eF[ak], "_"), gz), "_") | |
1312 | + | let gM = aY(aK) | |
1313 | + | let gN = valueOrElse(getInteger(gM), 0) | |
1314 | + | $Tuple2((((((((((((((((cZ._5 :+ (if ((size(cZ._7) > 0)) | |
1315 | + | then StringEntry(gI, makeString_11C(cZ._7, "_")) | |
1316 | + | else DeleteEntry(gI))) :+ IntegerEntry(gM, if ((cZ._8 > gN)) | |
1182 | 1317 | then 0 | |
1183 | - | else ( | |
1184 | - | } | |
1185 | - | ||
1186 | - | ||
1187 | - | func | |
1188 | - | ||
1189 | - | ||
1190 | - | func | |
1191 | - | let | |
1192 | - | if (if (!( | |
1193 | - | then ( | |
1318 | + | else (gN - cZ._8))) :+ IntegerEntry(cv(), (ff + 1))) :+ fh) :+ StringEntry(cw(gK), gL)) :+ StringEntry(aL(gL), aK)) :+ StringEntry(cC(gK), aK)) :+ IntegerEntry(aQ(m, gL), cZ._2)) :+ IntegerEntry(cB(m, gL, aK), cZ._2)) :+ IntegerEntry(aP(gL), gk)) :+ IntegerEntry(cA(gL, aK), gk)) :+ StringEntry(dV, makeString([eF[ai], cZ._4, fA, eF[al]], ":"))) :+ StringEntry(bj(), cZ._6)) :+ StringEntry(bh(bg), makeString([fg, "L", gL], "_"))) :+ ScriptTransfer(addressFromStringValue(aK), 1, aM)), gL) | |
1319 | + | } | |
1320 | + | ||
1321 | + | ||
1322 | + | func gO (aK,gy,fd) = gv("M", 3, "SSSS", aK, gy, fd, 0) | |
1323 | + | ||
1324 | + | ||
1325 | + | func gP (aK,gy,fd,db,gh) = { | |
1326 | + | let gl = (cl * 4) | |
1327 | + | if (if (!(db)) | |
1328 | + | then (gh != gl) | |
1194 | 1329 | else false) | |
1195 | - | then throw(("Payment attached should be " + toString( | |
1196 | - | else | |
1197 | - | } | |
1198 | - | ||
1199 | - | ||
1200 | - | func | |
1201 | - | let | |
1202 | - | if (if (!( | |
1203 | - | then ( | |
1330 | + | then throw(("Payment attached should be " + toString(gl))) | |
1331 | + | else gv("L", 4, "SMM", aK, gy, fd, (e * 4)) | |
1332 | + | } | |
1333 | + | ||
1334 | + | ||
1335 | + | func gQ (aK,gy,fd,db,gh) = { | |
1336 | + | let gl = (cl * 47) | |
1337 | + | if (if (!(db)) | |
1338 | + | then (gh != gl) | |
1204 | 1339 | else false) | |
1205 | - | then throw(("Payment attached should be " + toString( | |
1206 | - | else | |
1207 | - | } | |
1208 | - | ||
1209 | - | ||
1210 | - | func | |
1211 | - | let | |
1212 | - | if (if (!( | |
1213 | - | then ( | |
1340 | + | then throw(("Payment attached should be " + toString(gl))) | |
1341 | + | else gv("XL", 5, "SSSML", aK, gy, fd, (e * 47)) | |
1342 | + | } | |
1343 | + | ||
1344 | + | ||
1345 | + | func gR (aK,gy,fd,db,gh) = { | |
1346 | + | let gl = (cl * 54) | |
1347 | + | if (if (!(db)) | |
1348 | + | then (gh != gl) | |
1214 | 1349 | else false) | |
1215 | - | then throw(("Payment attached should be " + toString( | |
1216 | - | else | |
1217 | - | } | |
1218 | - | ||
1219 | - | ||
1220 | - | func | |
1221 | - | let | |
1222 | - | let c = size( | |
1350 | + | then throw(("Payment attached should be " + toString(gl))) | |
1351 | + | else gv("XXL", 6, "LXL", aK, gy, fd, (e * 54)) | |
1352 | + | } | |
1353 | + | ||
1354 | + | ||
1355 | + | func gS (db,aK,gh,gy,fd) = { | |
1356 | + | let gT = { | |
1357 | + | let c = size(gy) | |
1223 | 1358 | if ((4 == c)) | |
1224 | - | then | |
1359 | + | then gO(aK, gy, fd) | |
1225 | 1360 | else if ((3 == c)) | |
1226 | - | then | |
1361 | + | then gP(aK, gy, fd, db, gh) | |
1227 | 1362 | else if ((5 == c)) | |
1228 | - | then | |
1363 | + | then gQ(aK, gy, fd, db, gh) | |
1229 | 1364 | else if ((2 == c)) | |
1230 | - | then | |
1365 | + | then gR(aK, gy, fd, db, gh) | |
1231 | 1366 | else throw("Unknown merge") | |
1232 | 1367 | } | |
1233 | - | | |
1234 | - | } | |
1235 | - | ||
1236 | - | ||
1237 | - | func | |
1238 | - | then valueOrElse(getBoolean( | |
1368 | + | gT | |
1369 | + | } | |
1370 | + | ||
1371 | + | ||
1372 | + | func gU (dn) = if (if ((dn.originCaller != aE)) | |
1373 | + | then valueOrElse(getBoolean(bk()), false) | |
1239 | 1374 | else false) | |
1240 | 1375 | then throw("Contracts are under maintenance") | |
1241 | - | else StringEntry( | |
1242 | - | ||
1243 | - | ||
1244 | - | @Callable( | |
1245 | - | func constructorV1 ( | |
1376 | + | else StringEntry(aJ(toString(dn.originCaller)), toBase58String(dn.transactionId)) | |
1377 | + | ||
1378 | + | ||
1379 | + | @Callable(dn) | |
1380 | + | func constructorV1 (gV) = if ((dn.caller != this)) | |
1246 | 1381 | then throw("Permission denied") | |
1247 | - | else [StringEntry( | |
1248 | - | ||
1249 | - | ||
1250 | - | ||
1251 | - | @Callable( | |
1252 | - | func setBlocked ( | |
1382 | + | else [StringEntry(ay(), gV)] | |
1383 | + | ||
1384 | + | ||
1385 | + | ||
1386 | + | @Callable(dn) | |
1387 | + | func setBlocked (gW) = if ((dn.caller != this)) | |
1253 | 1388 | then throw("permission denied") | |
1254 | - | else [BooleanEntry( | |
1255 | - | ||
1256 | - | ||
1257 | - | ||
1258 | - | @Callable( | |
1389 | + | else [BooleanEntry(bk(), gW)] | |
1390 | + | ||
1391 | + | ||
1392 | + | ||
1393 | + | @Callable(dn) | |
1259 | 1394 | func stakeLand () = { | |
1260 | - | let | |
1261 | - | if ((size( | |
1395 | + | let gX = gU(dn) | |
1396 | + | if ((size(dn.payments) != 1)) | |
1262 | 1397 | then throw("Exactly one payment required") | |
1263 | 1398 | else { | |
1264 | - | let | |
1265 | - | let | |
1266 | - | let | |
1267 | - | if (( | |
1268 | - | then throw((("NFT " + | |
1399 | + | let gY = value(dn.payments[0]) | |
1400 | + | let aM = value(gY.assetId) | |
1401 | + | let ap = toString(dn.caller) | |
1402 | + | if ((gY.amount != 1)) | |
1403 | + | then throw((("NFT " + k) + " token should be attached as payment")) | |
1269 | 1404 | else { | |
1270 | - | let | |
1271 | - | if (( | |
1405 | + | let bW = value(assetInfo(aM)) | |
1406 | + | if ((bW.issuer != this)) | |
1272 | 1407 | then throw("Unknown issuer of token") | |
1273 | - | else if (!(contains( | |
1274 | - | then throw((("Only NFT " + | |
1408 | + | else if (!(contains(bW.name, k))) | |
1409 | + | then throw((("Only NFT " + k) + " tokens are accepted")) | |
1275 | 1410 | else { | |
1276 | - | let | |
1277 | - | let | |
1278 | - | then dropRight( | |
1279 | - | else if (contains( | |
1280 | - | then dropRight( | |
1281 | - | else dropRight( | |
1282 | - | if (!(isDefined(parseInt( | |
1283 | - | then throw(("Cannot parse land number from " + | |
1411 | + | let gZ = drop(bW.name, 4) | |
1412 | + | let cx = if (contains(gZ, "XXL")) | |
1413 | + | then dropRight(gZ, 3) | |
1414 | + | else if (contains(gZ, "XL")) | |
1415 | + | then dropRight(gZ, 2) | |
1416 | + | else dropRight(gZ, 1) | |
1417 | + | if (!(isDefined(parseInt(cx)))) | |
1418 | + | then throw(("Cannot parse land number from " + bW.name)) | |
1284 | 1419 | else { | |
1285 | - | let | |
1286 | - | let | |
1287 | - | if (isDefined(getInteger( | |
1288 | - | then throw((("NFT " + | |
1420 | + | let aW = toBase58String(aM) | |
1421 | + | let fO = aO(aW) | |
1422 | + | if (isDefined(getInteger(fO))) | |
1423 | + | then throw((("NFT " + bW.name) + " is already staked")) | |
1289 | 1424 | else { | |
1290 | - | let | |
1291 | - | let | |
1292 | - | let | |
1293 | - | let | |
1294 | - | let | |
1295 | - | let | |
1296 | - | let | |
1297 | - | let | |
1298 | - | then split_51C(value( | |
1425 | + | let fR = split(bW.description, "_") | |
1426 | + | let dj = dp(fR[X]) | |
1427 | + | let fD = bA(fR[W]) | |
1428 | + | let bG = do(dj, (fD / o), 1) | |
1429 | + | let fE = valueOrElse(getInteger(aQ(m, aW)), 0) | |
1430 | + | let gI = aX(ap) | |
1431 | + | let bT = getString(gI) | |
1432 | + | let bU = if (isDefined(bT)) | |
1433 | + | then split_51C(value(bT), "_") | |
1299 | 1434 | else nil | |
1300 | - | if (containsElement( | |
1301 | - | then throw(("Your staked lands already contain " + | |
1435 | + | if (containsElement(bU, aW)) | |
1436 | + | then throw(("Your staked lands already contain " + aW)) | |
1302 | 1437 | else { | |
1303 | - | let | |
1304 | - | [IntegerEntry( | |
1438 | + | let ep = valueOrElse(getInteger(aP(aW)), 0) | |
1439 | + | [IntegerEntry(fO, lastBlock.timestamp), IntegerEntry(aS(k, aW, ap), lastBlock.timestamp), StringEntry(gI, makeString_11C((bU :+ aW), "_")), IntegerEntry(aY(ap), (valueOrElse(getInteger(aY(ap)), 0) + fD)), StringEntry(aL(aW), ap), StringEntry(cC(cx), ap), IntegerEntry(cB(m, aW, ap), fE), IntegerEntry(cA(aW, ap), ep), StringEntry(bj(), bG), gX] | |
1305 | 1440 | } | |
1306 | 1441 | } | |
1307 | 1442 | } | |
1312 | 1447 | ||
1313 | 1448 | ||
1314 | 1449 | ||
1315 | - | @Callable( | |
1316 | - | func unstakeLand ( | |
1317 | - | let | |
1318 | - | if ((size( | |
1450 | + | @Callable(dn) | |
1451 | + | func unstakeLand (fJ) = { | |
1452 | + | let gX = gU(dn) | |
1453 | + | if ((size(dn.payments) != 0)) | |
1319 | 1454 | then throw("No payments required") | |
1320 | 1455 | else { | |
1321 | - | let | |
1322 | - | let | |
1323 | - | let | |
1324 | - | let | |
1325 | - | let | |
1326 | - | let | |
1327 | - | let | |
1328 | - | let | |
1329 | - | let | |
1330 | - | let | |
1331 | - | if (!(isDefined( | |
1332 | - | then throw(("Your staked lands don't contain " + | |
1456 | + | let aK = toString(dn.caller) | |
1457 | + | let fT = fH(aK, cH, fJ) | |
1458 | + | let aW = fT._2 | |
1459 | + | let gI = aX(aK) | |
1460 | + | let dj = dp(fT._3[X]) | |
1461 | + | let fD = bA(fT._3[W]) | |
1462 | + | let bG = do(dj, (fD / o), -1) | |
1463 | + | let gm = gf(aK, aW, fD, cH) | |
1464 | + | let bU = split_51C(valueOrElse(getString(gI), ""), "_") | |
1465 | + | let aD = indexOf(bU, aW) | |
1466 | + | if (!(isDefined(aD))) | |
1467 | + | then throw(("Your staked lands don't contain " + aW)) | |
1333 | 1468 | else { | |
1334 | - | let | |
1335 | - | let | |
1336 | - | if (( | |
1337 | - | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString( | |
1469 | + | let dT = value(blockInfoByHeight(height)).timestamp | |
1470 | + | let ha = valueOrElse(getInteger(aH, bl(aK)), 0) | |
1471 | + | if ((ha >= dT)) | |
1472 | + | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(ha))) | |
1338 | 1473 | else { | |
1339 | - | let | |
1340 | - | let | |
1341 | - | [ScriptTransfer( | |
1342 | - | then StringEntry( | |
1343 | - | else DeleteEntry( | |
1474 | + | let gM = aY(aK) | |
1475 | + | let gN = valueOrElse(getInteger(gM), 0) | |
1476 | + | [ScriptTransfer(dn.caller, 1, fromBase58String(aW)), DeleteEntry(aO(aW)), DeleteEntry(aS(k, aW, aK)), StringEntry(bj(), bG), StringEntry(gm._2, makeString(gm._3, ":")), if ((size(bU) > 1)) | |
1477 | + | then StringEntry(gI, makeString_11C(removeByIndex(bU, value(aD)), "_")) | |
1478 | + | else DeleteEntry(gI), IntegerEntry(gM, if ((fD > gN)) | |
1344 | 1479 | then 0 | |
1345 | - | else ( | |
1480 | + | else (gN - fD)), gX] | |
1346 | 1481 | } | |
1347 | 1482 | } | |
1348 | 1483 | } | |
1350 | 1485 | ||
1351 | 1486 | ||
1352 | 1487 | ||
1353 | - | @Callable( | |
1488 | + | @Callable(dn) | |
1354 | 1489 | func stakeDuck () = { | |
1355 | - | let | |
1356 | - | if ((size( | |
1490 | + | let gX = gU(dn) | |
1491 | + | if ((size(dn.payments) != 1)) | |
1357 | 1492 | then throw("Exactly one payment required") | |
1358 | 1493 | else { | |
1359 | - | let | |
1360 | - | let | |
1361 | - | let | |
1362 | - | if (( | |
1363 | - | then throw((("NFT " + | |
1494 | + | let gY = value(dn.payments[0]) | |
1495 | + | let aM = value(gY.assetId) | |
1496 | + | let ap = toString(dn.caller) | |
1497 | + | if ((gY.amount != 1)) | |
1498 | + | then throw((("NFT " + l) + " token should be attached as payment")) | |
1364 | 1499 | else { | |
1365 | - | let | |
1366 | - | if (if (( | |
1367 | - | then ( | |
1500 | + | let bW = value(assetInfo(aM)) | |
1501 | + | if (if ((bW.issuer != ce)) | |
1502 | + | then (bW.issuer != cf) | |
1368 | 1503 | else false) | |
1369 | - | then throw((("Unknown issuer of " + | |
1370 | - | else if (!(contains( | |
1371 | - | then throw((("Only NFT " + | |
1504 | + | then throw((("Unknown issuer of " + l) + " token")) | |
1505 | + | else if (!(contains(bW.name, l))) | |
1506 | + | then throw((("Only NFT " + l) + " tokens are accepted")) | |
1372 | 1507 | else { | |
1373 | - | let | |
1374 | - | let | |
1375 | - | if (isDefined(getInteger( | |
1376 | - | then throw((("NFT " + | |
1377 | - | else if (isDefined(getString( | |
1378 | - | then throw(("You already staked one duck: " + | |
1508 | + | let hb = toBase58String(aM) | |
1509 | + | let fO = aO(hb) | |
1510 | + | if (isDefined(getInteger(fO))) | |
1511 | + | then throw((("NFT " + bW.name) + " is already staked")) | |
1512 | + | else if (isDefined(getString(be(ap)))) | |
1513 | + | then throw(("You already staked one duck: " + bW.name)) | |
1379 | 1514 | else { | |
1380 | - | let | |
1381 | - | let | |
1382 | - | let | |
1383 | - | let | |
1384 | - | ([IntegerEntry( | |
1515 | + | let hc = bh(hb) | |
1516 | + | let hd = getString(hc) | |
1517 | + | let dV = bf(hb) | |
1518 | + | let he = getString(dV) | |
1519 | + | ([IntegerEntry(fO, lastBlock.timestamp), IntegerEntry(aS(l, toBase58String(aM), ap), lastBlock.timestamp), StringEntry(bd(hb), ap), StringEntry(be(ap), hb)] ++ (if (isDefined(hd)) | |
1385 | 1520 | then nil | |
1386 | - | else ([StringEntry( | |
1521 | + | else ([StringEntry(hc, w)] ++ (if (isDefined(he)) | |
1387 | 1522 | then nil | |
1388 | - | else (([StringEntry( | |
1523 | + | else (([StringEntry(dV, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(bi(hb), 100)) :+ gX))))) | |
1389 | 1524 | } | |
1390 | 1525 | } | |
1391 | 1526 | } | |
1394 | 1529 | ||
1395 | 1530 | ||
1396 | 1531 | ||
1397 | - | @Callable( | |
1398 | - | func unstakeDuck ( | |
1399 | - | let | |
1400 | - | if ((size( | |
1532 | + | @Callable(dn) | |
1533 | + | func unstakeDuck (hb) = { | |
1534 | + | let gX = gU(dn) | |
1535 | + | if ((size(dn.payments) != 0)) | |
1401 | 1536 | then throw("No payments required") | |
1402 | 1537 | else { | |
1403 | - | let | |
1404 | - | let | |
1405 | - | let | |
1406 | - | let | |
1407 | - | if (!(isDefined(getInteger( | |
1408 | - | then throw((("NFT " + | |
1409 | - | else if (!(isDefined(getString( | |
1410 | - | then throw((("The duck " + | |
1538 | + | let aM = fromBase58String(hb) | |
1539 | + | let ap = toString(dn.caller) | |
1540 | + | let bW = value(assetInfo(aM)) | |
1541 | + | let fO = aO(toBase58String(aM)) | |
1542 | + | if (!(isDefined(getInteger(fO)))) | |
1543 | + | then throw((("NFT " + bW.name) + " is not staked")) | |
1544 | + | else if (!(isDefined(getString(be(ap))))) | |
1545 | + | then throw((("The duck " + bW.name) + " is not staked")) | |
1411 | 1546 | else { | |
1412 | - | let | |
1413 | - | if (( | |
1547 | + | let fQ = valueOrErrorMessage(getString(bd(toBase58String(aM))), (("NFT " + bW.name) + " is orphaned")) | |
1548 | + | if ((fQ != ap)) | |
1414 | 1549 | then throw("Staked NFT is not yours") | |
1415 | 1550 | else { | |
1416 | - | let | |
1417 | - | let | |
1418 | - | if ((100 > | |
1551 | + | let fv = bi(hb) | |
1552 | + | let hf = valueOrElse(getInteger(fv), 100) | |
1553 | + | if ((100 > hf)) | |
1419 | 1554 | then throw("Please heal your duck before unstaking") | |
1420 | - | else [ScriptTransfer( | |
1555 | + | else [ScriptTransfer(dn.caller, 1, aM), DeleteEntry(fO), DeleteEntry(fv), DeleteEntry(bh(hb)), DeleteEntry(bd(hb)), DeleteEntry(aS(l, hb, ap)), DeleteEntry(be(ap)), gX] | |
1421 | 1556 | } | |
1422 | 1557 | } | |
1423 | 1558 | } | |
1425 | 1560 | ||
1426 | 1561 | ||
1427 | 1562 | ||
1428 | - | @Callable( | |
1429 | - | func claimRes ( | |
1430 | - | let | |
1431 | - | if ((size( | |
1563 | + | @Callable(dn) | |
1564 | + | func claimRes (eC,hg) = { | |
1565 | + | let gX = gU(dn) | |
1566 | + | if ((size(dn.payments) != 0)) | |
1432 | 1567 | then throw("No payments required") | |
1433 | 1568 | else { | |
1434 | - | let | |
1435 | - | let | |
1436 | - | $Tuple2(((( | |
1437 | - | } | |
1438 | - | } | |
1439 | - | ||
1440 | - | ||
1441 | - | ||
1442 | - | @Callable( | |
1443 | - | func claimResToWH ( | |
1444 | - | let | |
1445 | - | if ((size( | |
1569 | + | let aK = toString(dn.originCaller) | |
1570 | + | let dg = fS(aK, eC, cH, hg) | |
1571 | + | $Tuple2((((dg._1 :+ StringEntry(dg._2, makeString(dg._3, ":"))) :+ StringEntry(dg._4, makeString(dg._5, ":"))) :+ gX), dg._3[aj]) | |
1572 | + | } | |
1573 | + | } | |
1574 | + | ||
1575 | + | ||
1576 | + | ||
1577 | + | @Callable(dn) | |
1578 | + | func claimResToWH (eC,hg) = { | |
1579 | + | let gX = gU(dn) | |
1580 | + | if ((size(dn.payments) != 0)) | |
1446 | 1581 | then throw("No payments required") | |
1447 | 1582 | else { | |
1448 | - | let | |
1449 | - | let | |
1450 | - | $Tuple2(((( | |
1451 | - | } | |
1452 | - | } | |
1453 | - | ||
1454 | - | ||
1455 | - | ||
1456 | - | @Callable( | |
1457 | - | func flight ( | |
1458 | - | let | |
1459 | - | if (!(sigVerify_8Kb( | |
1583 | + | let aK = toString(dn.originCaller) | |
1584 | + | let dg = fS(aK, eC, cG, hg) | |
1585 | + | $Tuple2((((dg._1 :+ StringEntry(dg._2, makeString(dg._3, ":"))) :+ StringEntry(dg._4, makeString(dg._5, ":"))) :+ gX), dg._5[aa]) | |
1586 | + | } | |
1587 | + | } | |
1588 | + | ||
1589 | + | ||
1590 | + | ||
1591 | + | @Callable(dn) | |
1592 | + | func flight (fk,fl) = { | |
1593 | + | let gX = gU(dn) | |
1594 | + | if (!(sigVerify_8Kb(fk, fl, cg))) | |
1460 | 1595 | then throw("signature does not match") | |
1461 | - | else if ((size( | |
1596 | + | else if ((size(dn.payments) != 0)) | |
1462 | 1597 | then throw("No payments required") | |
1463 | 1598 | else { | |
1464 | - | let | |
1465 | - | let | |
1466 | - | let | |
1467 | - | let | |
1468 | - | let | |
1469 | - | let | |
1470 | - | let | |
1471 | - | let | |
1472 | - | if (if (( | |
1599 | + | let dZ = split(toUtf8String(fk), ";") | |
1600 | + | let fm = split(dZ[0], "|") | |
1601 | + | let fn = split(fm[cJ], "_") | |
1602 | + | let fo = parseIntValue(fn[0]) | |
1603 | + | let fp = parseIntValue(fn[1]) | |
1604 | + | let fq = split(dZ[1], ":") | |
1605 | + | let fr = fq[0] | |
1606 | + | let fs = parseIntValue(fm[cO]) | |
1607 | + | if (if ((fs > (lastBlock.timestamp + ci))) | |
1473 | 1608 | then true | |
1474 | - | else ((lastBlock.timestamp - | |
1475 | - | then throw(((("signature outdated: logTime=" + toString( | |
1609 | + | else ((lastBlock.timestamp - ci) > fs)) | |
1610 | + | then throw(((("signature outdated: logTime=" + toString(fs)) + ", bcTime=") + toString(lastBlock.timestamp))) | |
1476 | 1611 | else { | |
1477 | - | let | |
1478 | - | let | |
1479 | - | if (( | |
1480 | - | then throw(((("Tx ids don't match! In state: " + | |
1612 | + | let ft = fq[1] | |
1613 | + | let fu = valueOrElse(getString(aJ(toString(dn.originCaller))), "") | |
1614 | + | if ((fu != ft)) | |
1615 | + | then throw(((("Tx ids don't match! In state: " + fu) + ", in msg: ") + ft)) | |
1481 | 1616 | else { | |
1482 | - | let | |
1483 | - | let | |
1484 | - | let | |
1485 | - | let | |
1486 | - | if (( | |
1487 | - | then throw(((("oldHealth=" + toString(valueOrElse(getInteger( | |
1488 | - | else if ((0 >= | |
1617 | + | let bm = toString(dn.caller) | |
1618 | + | let bg = valueOrErrorMessage(getString(be(bm)), "You don't have a duck staked") | |
1619 | + | let fv = bi(bg) | |
1620 | + | let fw = valueOrElse(getInteger(fv), 100) | |
1621 | + | if ((fw != fo)) | |
1622 | + | then throw(((("oldHealth=" + toString(valueOrElse(getInteger(fv), 100))) + " from state does not match one from flight log=") + toString(fo))) | |
1623 | + | else if ((0 >= fo)) | |
1489 | 1624 | then throw("You can't fly with zero health") | |
1490 | 1625 | else { | |
1491 | - | let | |
1492 | - | let | |
1493 | - | if (( | |
1626 | + | let hc = bh(bg) | |
1627 | + | let fL = valueOrElse(getString(hc), w) | |
1628 | + | if ((fr == fL)) | |
1494 | 1629 | then throw("You can't fly to the same location") | |
1495 | 1630 | else { | |
1496 | - | let | |
1497 | - | then | |
1631 | + | let fx = if ((size(fm) > cP)) | |
1632 | + | then fm[cP] | |
1498 | 1633 | else "" | |
1499 | - | let | |
1500 | - | then ( | |
1634 | + | let fy = if (if ((fp > 0)) | |
1635 | + | then (fx == "$") | |
1501 | 1636 | else false) | |
1502 | - | then | |
1637 | + | then bv(invoke(aE, "sendUsdtPrize", [bm], nil)) | |
1503 | 1638 | else 0 | |
1504 | - | $Tuple2([StringEntry( | |
1505 | - | then | |
1506 | - | else | |
1639 | + | $Tuple2([StringEntry(hc, if ((fp > 0)) | |
1640 | + | then fr | |
1641 | + | else fL), IntegerEntry(fv, fp), gX], fy) | |
1507 | 1642 | } | |
1508 | 1643 | } | |
1509 | 1644 | } | |
1513 | 1648 | ||
1514 | 1649 | ||
1515 | 1650 | ||
1516 | - | @Callable( | |
1517 | - | func heal ( | |
1518 | - | let | |
1519 | - | if (if (if ((0 > | |
1651 | + | @Callable(dn) | |
1652 | + | func heal (hh,hi,hj) = { | |
1653 | + | let gX = gU(dn) | |
1654 | + | if (if (if ((0 > hh)) | |
1520 | 1655 | then true | |
1521 | - | else (0 > | |
1656 | + | else (0 > hi)) | |
1522 | 1657 | then true | |
1523 | - | else (0 > | |
1658 | + | else (0 > hj)) | |
1524 | 1659 | then throw("Quantity cannot be negative") | |
1525 | 1660 | else { | |
1526 | - | let | |
1527 | - | let | |
1528 | - | let | |
1529 | - | let | |
1530 | - | if (( | |
1531 | - | then throw((("HP should be < " + toString( | |
1661 | + | let bg = valueOrErrorMessage(getString(be(toString(dn.caller))), "You don't have a duck staked") | |
1662 | + | let hk = [hh, hi, hj] | |
1663 | + | let fv = bi(bg) | |
1664 | + | let hl = valueOrElse(getInteger(fv), 100) | |
1665 | + | if ((hl >= B)) | |
1666 | + | then throw((("HP should be < " + toString(B)) + " to heal")) | |
1532 | 1667 | else { | |
1533 | - | let | |
1534 | - | let | |
1535 | - | let | |
1668 | + | let dV = bf(bg) | |
1669 | + | let eF = dU(dV) | |
1670 | + | let hm = if ((eF[al] == "")) | |
1536 | 1671 | then nil | |
1537 | - | else split( | |
1538 | - | func | |
1539 | - | let | |
1540 | - | let | |
1541 | - | then parseIntValue( | |
1672 | + | else split(eF[al], "_") | |
1673 | + | func hn (bI,ho) = { | |
1674 | + | let bw = bI._2 | |
1675 | + | let dI = if ((size(hm) > bw)) | |
1676 | + | then parseIntValue(hm[bw]) | |
1542 | 1677 | else 0 | |
1543 | - | if ((3 > | |
1678 | + | if ((3 > bw)) | |
1544 | 1679 | then { | |
1545 | - | let | |
1546 | - | if (( | |
1547 | - | then throw(((("You have only " + toString( | |
1548 | - | else $Tuple3(( | |
1680 | + | let hp = hk[bw] | |
1681 | + | if ((hp > dI)) | |
1682 | + | then throw(((("You have only " + toString(dI)) + " of ") + E[bw])) | |
1683 | + | else $Tuple3((bI._1 :+ toString((dI - hp))), (bw + 1), (bI._3 + (ch[bw] * hp))) | |
1549 | 1684 | } | |
1550 | - | else $Tuple3(( | |
1685 | + | else $Tuple3((bI._1 :+ toString(dI)), (bw + 1), bI._3) | |
1551 | 1686 | } | |
1552 | 1687 | ||
1553 | - | let | |
1554 | - | let | |
1555 | - | let | |
1556 | - | let | |
1557 | - | func | |
1558 | - | then | |
1559 | - | else | |
1560 | - | ||
1561 | - | func | |
1562 | - | then | |
1688 | + | let dg = { | |
1689 | + | let bL = G | |
1690 | + | let bM = size(bL) | |
1691 | + | let bN = $Tuple3(nil, 0, 0) | |
1692 | + | func bO (bP,bQ) = if ((bQ >= bM)) | |
1693 | + | then bP | |
1694 | + | else hn(bP, bL[bQ]) | |
1695 | + | ||
1696 | + | func bR (bP,bQ) = if ((bQ >= bM)) | |
1697 | + | then bP | |
1563 | 1698 | else throw("List size exceeds 50") | |
1564 | 1699 | ||
1565 | - | | |
1700 | + | bR(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bN, 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) | |
1566 | 1701 | } | |
1567 | - | let | |
1568 | - | $Tuple2([IntegerEntry( | |
1702 | + | let hq = min([B, (hl + dg._3)]) | |
1703 | + | $Tuple2([IntegerEntry(fv, hq), StringEntry(dV, makeString_2C([eF[ai], eF[aj], eF[ak], makeString(dg._1, "_")], ":")), gX], hq) | |
1569 | 1704 | } | |
1570 | 1705 | } | |
1571 | 1706 | } | |
1572 | 1707 | ||
1573 | 1708 | ||
1574 | 1709 | ||
1575 | - | @Callable( | |
1710 | + | @Callable(dn) | |
1576 | 1711 | func healES () = { | |
1577 | - | let | |
1578 | - | if ((size( | |
1712 | + | let gX = gU(dn) | |
1713 | + | if ((size(dn.payments) != 1)) | |
1579 | 1714 | then throw("Exactly one payment required") | |
1580 | 1715 | else { | |
1581 | - | let | |
1582 | - | if (( | |
1716 | + | let gY = value(dn.payments[0]) | |
1717 | + | if ((gY.assetId != b)) | |
1583 | 1718 | then throw("Allowed USDT payment only!") | |
1584 | 1719 | else { | |
1585 | - | let | |
1586 | - | let | |
1587 | - | let | |
1588 | - | if (( | |
1720 | + | let bg = valueOrErrorMessage(getString(be(toString(dn.caller))), "You don't have a duck staked") | |
1721 | + | let fv = bi(bg) | |
1722 | + | let hl = valueOrElse(getInteger(fv), 100) | |
1723 | + | if ((hl > 0)) | |
1589 | 1724 | then throw("HP should be 0 to call Emergency Service") | |
1590 | 1725 | else { | |
1591 | - | let | |
1592 | - | let | |
1593 | - | let | |
1726 | + | let dV = bf(bg) | |
1727 | + | let eF = dU(dV) | |
1728 | + | let hm = if ((eF[al] == "")) | |
1594 | 1729 | then nil | |
1595 | - | else split( | |
1596 | - | let | |
1597 | - | then parseIntValue( | |
1730 | + | else split(eF[al], "_") | |
1731 | + | let hr = if ((size(hm) > 0)) | |
1732 | + | then parseIntValue(hm[0]) | |
1598 | 1733 | else 0 | |
1599 | - | let | |
1600 | - | then parseIntValue( | |
1734 | + | let hs = if ((size(hm) > 1)) | |
1735 | + | then parseIntValue(hm[1]) | |
1601 | 1736 | else 0 | |
1602 | - | let | |
1603 | - | then parseIntValue( | |
1737 | + | let ht = if ((size(hm) > 2)) | |
1738 | + | then parseIntValue(hm[2]) | |
1604 | 1739 | else 0 | |
1605 | - | if (if (if (( | |
1740 | + | if (if (if ((hr > 0)) | |
1606 | 1741 | then true | |
1607 | - | else ( | |
1742 | + | else (hs > 0)) | |
1608 | 1743 | then true | |
1609 | - | else ( | |
1744 | + | else (ht > 0)) | |
1610 | 1745 | then throw("You have to use own Medical Kit") | |
1611 | 1746 | else { | |
1612 | - | let | |
1613 | - | let | |
1614 | - | then split(value( | |
1747 | + | let hu = getString(aG, bo()) | |
1748 | + | let hv = if (isDefined(hu)) | |
1749 | + | then split(value(hu), "_") | |
1615 | 1750 | else nil | |
1616 | - | let | |
1617 | - | then parseIntValue( | |
1751 | + | let hw = if ((size(hv) > 0)) | |
1752 | + | then parseIntValue(hv[0]) | |
1618 | 1753 | else 0 | |
1619 | - | if ((0 >= | |
1754 | + | if ((0 >= hw)) | |
1620 | 1755 | then throw("There are no Medical Kits L1 at Emergency Service storage") | |
1621 | 1756 | else { | |
1622 | - | let | |
1623 | - | let | |
1624 | - | let | |
1625 | - | let | |
1626 | - | let | |
1627 | - | let | |
1628 | - | if (( | |
1629 | - | then throw(("Payment attached should be " + toString( | |
1757 | + | let hq = (hl + ch[0]) | |
1758 | + | let hx = makeString([toString((hw - 1)), removeByIndex(hv, 0)], "_") | |
1759 | + | let ca = split(G[0], "_") | |
1760 | + | let hy = bZ(ca) | |
1761 | + | let hz = parseIntValue(ca[T]) | |
1762 | + | let hA = fraction((hy * A), x, (10 * hz)) | |
1763 | + | if ((gY.amount != hA)) | |
1764 | + | then throw(("Payment attached should be " + toString(hA))) | |
1630 | 1765 | else { | |
1631 | - | let | |
1632 | - | $Tuple2([IntegerEntry( | |
1766 | + | let dg = bs(invoke(aG, "updateEsStorage", [hx], [AttachedPayment(b, hA)])) | |
1767 | + | $Tuple2([IntegerEntry(fv, hq), gX], dg) | |
1633 | 1768 | } | |
1634 | 1769 | } | |
1635 | 1770 | } | |
1640 | 1775 | ||
1641 | 1776 | ||
1642 | 1777 | ||
1643 | - | @Callable( | |
1644 | - | func updateBackpack ( | |
1645 | - | let | |
1646 | - | if (( | |
1778 | + | @Callable(dn) | |
1779 | + | func updateBackpack (bg,hB) = { | |
1780 | + | let gX = gU(dn) | |
1781 | + | if ((dn.caller != aG)) | |
1647 | 1782 | then throw("permission denied") | |
1648 | - | else $Tuple2([StringEntry( | |
1649 | - | } | |
1650 | - | ||
1651 | - | ||
1652 | - | ||
1653 | - | @Callable( | |
1783 | + | else $Tuple2([StringEntry(bf(bg), hB), gX], hB) | |
1784 | + | } | |
1785 | + | ||
1786 | + | ||
1787 | + | ||
1788 | + | @Callable(dn) | |
1654 | 1789 | func buySLand () = { | |
1655 | - | let | |
1656 | - | if ((size( | |
1790 | + | let gX = gU(dn) | |
1791 | + | if ((size(dn.payments) != 1)) | |
1657 | 1792 | then throw("Exactly one payment required") | |
1658 | 1793 | else { | |
1659 | - | let | |
1660 | - | if (( | |
1794 | + | let gY = value(dn.payments[0]) | |
1795 | + | if ((gY.assetId != b)) | |
1661 | 1796 | then throw("Allowed USDT payment only!") | |
1662 | - | else if (( | |
1663 | - | then throw(("Payment attached should be " + toString( | |
1797 | + | else if ((gY.amount != cn)) | |
1798 | + | then throw(("Payment attached should be " + toString(cn))) | |
1664 | 1799 | else { | |
1665 | - | let | |
1666 | - | $Tuple2((( | |
1800 | + | let dg = fb(dn.caller, dn.transactionId) | |
1801 | + | $Tuple2(((dg._1 :+ ScriptTransfer(aG, gY.amount, b)) :+ gX), dg._2._1) | |
1667 | 1802 | } | |
1668 | 1803 | } | |
1669 | 1804 | } | |
1670 | 1805 | ||
1671 | 1806 | ||
1672 | 1807 | ||
1673 | - | @Callable( | |
1674 | - | func expedition ( | |
1675 | - | let | |
1676 | - | if ((size( | |
1808 | + | @Callable(dn) | |
1809 | + | func expedition (fk,fl) = { | |
1810 | + | let gX = gU(dn) | |
1811 | + | if ((size(dn.payments) != 0)) | |
1677 | 1812 | then throw("No payments required") | |
1678 | 1813 | else { | |
1679 | - | let | |
1680 | - | $Tuple2(( | |
1681 | - | } | |
1682 | - | } | |
1683 | - | ||
1684 | - | ||
1685 | - | ||
1686 | - | @Callable( | |
1687 | - | func upgradeInfra ( | |
1688 | - | let | |
1689 | - | if ((size( | |
1814 | + | let dg = fj(true, dn.caller, dn.transactionId, fk, fl) | |
1815 | + | $Tuple2((dg._1 :+ gX), $Tuple2(dg._2, dg._3)) | |
1816 | + | } | |
1817 | + | } | |
1818 | + | ||
1819 | + | ||
1820 | + | ||
1821 | + | @Callable(dn) | |
1822 | + | func upgradeInfra (aW) = { | |
1823 | + | let gX = gU(dn) | |
1824 | + | if ((size(dn.payments) != 0)) | |
1690 | 1825 | then throw("No payments required") | |
1691 | 1826 | else { | |
1692 | - | let | |
1693 | - | $Tuple2(( | |
1694 | - | } | |
1695 | - | } | |
1696 | - | ||
1697 | - | ||
1698 | - | ||
1699 | - | @Callable( | |
1700 | - | func upgradeInfraUsdt ( | |
1827 | + | let dg = gg(true, dn.caller, 0, aW) | |
1828 | + | $Tuple2((dg._1 :+ gX), dg._2) | |
1829 | + | } | |
1830 | + | } | |
1831 | + | ||
1832 | + | ||
1833 | + | ||
1834 | + | @Callable(dn) | |
1835 | + | func upgradeInfraUsdt (aW) = if ((dn.caller != this)) | |
1701 | 1836 | then throw("Permission denied") | |
1702 | 1837 | else { | |
1703 | - | let | |
1704 | - | if ((size( | |
1838 | + | let gX = gU(dn) | |
1839 | + | if ((size(dn.payments) != 1)) | |
1705 | 1840 | then throw("Exactly one payment required") | |
1706 | 1841 | else { | |
1707 | - | let | |
1708 | - | if (( | |
1842 | + | let gY = value(dn.payments[0]) | |
1843 | + | if ((gY.assetId != b)) | |
1709 | 1844 | then throw("Allowed USDT payment only!") | |
1710 | 1845 | else { | |
1711 | - | let | |
1712 | - | $Tuple2((( | |
1846 | + | let dg = gg(false, dn.caller, gY.amount, aW) | |
1847 | + | $Tuple2(((dg._1 :+ ScriptTransfer(aG, gY.amount, b)) :+ gX), dg._2) | |
1713 | 1848 | } | |
1714 | 1849 | } | |
1715 | 1850 | } | |
1716 | 1851 | ||
1717 | 1852 | ||
1718 | 1853 | ||
1719 | - | @Callable( | |
1720 | - | func activateArtifact ( | |
1721 | - | let | |
1722 | - | if ((size( | |
1854 | + | @Callable(dn) | |
1855 | + | func activateArtifact (hC,aW) = { | |
1856 | + | let gX = gU(dn) | |
1857 | + | if ((size(dn.payments) != 0)) | |
1723 | 1858 | then throw("No payments required") | |
1724 | 1859 | else { | |
1725 | - | let | |
1726 | - | let c = | |
1860 | + | let dg = { | |
1861 | + | let c = hC | |
1727 | 1862 | if (("PRESALE" == c)) | |
1728 | - | then | |
1863 | + | then gt(toString(dn.caller), aW) | |
1729 | 1864 | else throw("Unknown artifact") | |
1730 | 1865 | } | |
1731 | - | ( | |
1732 | - | } | |
1733 | - | } | |
1734 | - | ||
1735 | - | ||
1736 | - | ||
1737 | - | @Callable( | |
1738 | - | func mergeLands ( | |
1739 | - | let | |
1740 | - | if ((size( | |
1866 | + | (dg :+ gX) | |
1867 | + | } | |
1868 | + | } | |
1869 | + | ||
1870 | + | ||
1871 | + | ||
1872 | + | @Callable(dn) | |
1873 | + | func mergeLands (gy) = { | |
1874 | + | let gX = gU(dn) | |
1875 | + | if ((size(dn.payments) != 0)) | |
1741 | 1876 | then throw("No payments required") | |
1742 | 1877 | else { | |
1743 | - | let | |
1744 | - | $Tuple2(( | |
1745 | - | } | |
1746 | - | } | |
1747 | - | ||
1748 | - | ||
1749 | - | ||
1750 | - | @Callable( | |
1751 | - | func mergeLandsUsdt ( | |
1752 | - | let | |
1753 | - | if ((size( | |
1878 | + | let dg = gS(true, toString(dn.caller), 0, gy, dn.transactionId) | |
1879 | + | $Tuple2((dg._1 :+ gX), dg._2) | |
1880 | + | } | |
1881 | + | } | |
1882 | + | ||
1883 | + | ||
1884 | + | ||
1885 | + | @Callable(dn) | |
1886 | + | func mergeLandsUsdt (gy) = { | |
1887 | + | let gX = gU(dn) | |
1888 | + | if ((size(dn.payments) != 1)) | |
1754 | 1889 | then throw("Exactly one payment required") | |
1755 | 1890 | else { | |
1756 | - | let | |
1757 | - | if (( | |
1891 | + | let gY = value(dn.payments[0]) | |
1892 | + | if ((gY.assetId != b)) | |
1758 | 1893 | then throw("Allowed USDT payment only!") | |
1759 | 1894 | else { | |
1760 | - | let | |
1761 | - | $Tuple2((( | |
1895 | + | let dg = gS(false, toString(dn.caller), gY.amount, gy, dn.transactionId) | |
1896 | + | $Tuple2(((dg._1 :+ ScriptTransfer(aG, gY.amount, b)) :+ gX), dg._2) | |
1762 | 1897 | } | |
1763 | 1898 | } | |
1764 | 1899 | } | |
1765 | 1900 | ||
1766 | 1901 | ||
1767 | 1902 | ||
1768 | - | @Callable( | |
1769 | - | func cargoExchange ( | |
1770 | - | let | |
1771 | - | if ((size( | |
1903 | + | @Callable(dn) | |
1904 | + | func cargoExchange (hD,aW) = { | |
1905 | + | let gX = gU(dn) | |
1906 | + | if ((size(dn.payments) != 0)) | |
1772 | 1907 | then throw("No payments required") | |
1773 | 1908 | else { | |
1774 | - | let | |
1775 | - | let | |
1776 | - | let | |
1777 | - | let | |
1778 | - | if (!(isDefined(getInteger( | |
1779 | - | then throw(( | |
1909 | + | let eE = split_4C(hD, ":") | |
1910 | + | let aK = toString(dn.originCaller) | |
1911 | + | let bW = value(assetInfo(fromBase58String(aW))) | |
1912 | + | let fO = aO(aW) | |
1913 | + | if (!(isDefined(getInteger(fO)))) | |
1914 | + | then throw((bW.name + " is not staked")) | |
1780 | 1915 | else { | |
1781 | - | let | |
1782 | - | if (( | |
1783 | - | then throw(( | |
1916 | + | let fQ = valueOrErrorMessage(getString(aL(aW)), (("NFT " + bW.name) + " is orphaned")) | |
1917 | + | if ((fQ != aK)) | |
1918 | + | then throw((k + " is not yours")) | |
1784 | 1919 | else { | |
1785 | - | let | |
1786 | - | let | |
1787 | - | let | |
1788 | - | let | |
1789 | - | let | |
1790 | - | if (( | |
1791 | - | then throw((("Duck location type is " + | |
1792 | - | else if (( | |
1793 | - | then throw(("Duck should be on the land " + | |
1920 | + | let eo = (bA(split(bW.description, "_")[W]) / o) | |
1921 | + | let ep = valueOrElse(getInteger(aP(aW)), 0) | |
1922 | + | let bg = valueOrErrorMessage(getString(be(aK)), "You don't have a duck staked") | |
1923 | + | let fL = valueOrElse(getString(bh(bg)), w) | |
1924 | + | let fM = split(value(fL), "_") | |
1925 | + | if ((fM[bq] != "L")) | |
1926 | + | then throw((("Duck location type is " + fM[bq]) + ", but should be L")) | |
1927 | + | else if ((fM[br] != aW)) | |
1928 | + | then throw(("Duck should be on the land " + aW)) | |
1794 | 1929 | else { | |
1795 | - | let | |
1796 | - | let | |
1797 | - | let | |
1798 | - | let | |
1799 | - | let | |
1800 | - | let | |
1801 | - | let | |
1802 | - | let | |
1803 | - | [StringEntry( | |
1930 | + | let en = aV(aW) | |
1931 | + | let eb = em(en, eo, ep) | |
1932 | + | let dV = bf(bg) | |
1933 | + | let eF = dU(dV) | |
1934 | + | let dg = eD(eE, eb, eF) | |
1935 | + | let ev = split(eb[ad], "_") | |
1936 | + | let gd = (parseIntValue(ev[af]) + dg._7) | |
1937 | + | let ge = (parseIntValue(ev[ag]) - dg._7) | |
1938 | + | [StringEntry(dV, makeString_2C([eF[ai], dg._4, dg._5, dg._6], ":")), StringEntry(en, makeString_2C([eb[Z], dg._1, dg._2, dg._3, makeString([ev[ae], toString(gd), toString(ge), ev[ah]], "_")], ":")), gX] | |
1804 | 1939 | } | |
1805 | 1940 | } | |
1806 | 1941 | } | |
1809 | 1944 | ||
1810 | 1945 | ||
1811 | 1946 | ||
1812 | - | @Callable( | |
1813 | - | func saveWarehouse ( | |
1814 | - | let | |
1815 | - | if (( | |
1947 | + | @Callable(dn) | |
1948 | + | func saveWarehouse (er,aW) = { | |
1949 | + | let gX = gU(dn) | |
1950 | + | if ((dn.caller != aG)) | |
1816 | 1951 | then throw("Access denied") | |
1817 | 1952 | else { | |
1818 | - | let | |
1819 | - | let | |
1820 | - | if ((size( | |
1953 | + | let en = aV(aW) | |
1954 | + | let es = split_4C(er, ":") | |
1955 | + | if ((size(es) != 5)) | |
1821 | 1956 | then throw("warehouse string should contain 4 ':' separators") | |
1822 | 1957 | else { | |
1823 | - | let | |
1824 | - | let | |
1825 | - | let | |
1826 | - | let | |
1827 | - | let | |
1828 | - | $Tuple2([StringEntry( | |
1958 | + | let hE = split(es[ad], "_")[ae] | |
1959 | + | let gd = ea(es) | |
1960 | + | let hF = dX(es[Z]) | |
1961 | + | let ge = ((hF - parseIntValue(hE)) - gd) | |
1962 | + | let hG = makeString_2C([es[Z], es[aa], es[ab], es[ac], makeString([hE, toString(gd), toString(ge), toString(hF)], "_")], ":") | |
1963 | + | $Tuple2([StringEntry(en, hG), gX], hG) | |
1829 | 1964 | } | |
1830 | 1965 | } | |
1831 | 1966 | } | |
1832 | 1967 | ||
1833 | 1968 | ||
1834 | 1969 | ||
1835 | - | @Callable( | |
1836 | - | func fixWarehouseFormat ( | |
1970 | + | @Callable(dn) | |
1971 | + | func fixWarehouseFormat (aW) = if ((dn.caller != aE)) | |
1837 | 1972 | then throw("Access denied") | |
1838 | 1973 | else { | |
1839 | - | let | |
1840 | - | let | |
1841 | - | let | |
1842 | - | let | |
1843 | - | let | |
1844 | - | let | |
1845 | - | let | |
1846 | - | let | |
1847 | - | let | |
1848 | - | let | |
1849 | - | $Tuple2([StringEntry( | |
1974 | + | let en = aV(aW) | |
1975 | + | let bW = value(assetInfo(fromBase58String(aW))) | |
1976 | + | let eo = (bA(split(bW.description, "_")[W]) / o) | |
1977 | + | let ep = valueOrElse(getInteger(aP(aW)), 0) | |
1978 | + | let es = em(en, eo, ep) | |
1979 | + | let hE = bv(invoke(aG, "recalcLockedVolumeREADONLY", [aW, es], nil)) | |
1980 | + | let gd = ea(es) | |
1981 | + | let hF = dX(es[Z]) | |
1982 | + | let ge = ((hF - hE) - gd) | |
1983 | + | let hG = makeString_2C([es[Z], es[aa], es[ab], es[ac], makeString([toString(hE), toString(gd), toString(ge), toString(hF)], "_")], ":") | |
1984 | + | $Tuple2([StringEntry(en, hG)], hG) | |
1850 | 1985 | } | |
1851 | 1986 | ||
1852 | 1987 | ||
1853 | 1988 | ||
1854 | - | @Callable( | |
1855 | - | func fixStakedPieces ( | |
1989 | + | @Callable(dn) | |
1990 | + | func fixStakedPieces (ap) = if ((dn.caller != aE)) | |
1856 | 1991 | then throw("Access denied") | |
1857 | 1992 | else { | |
1858 | - | let | |
1993 | + | let gN = if ((ap == "")) | |
1859 | 1994 | then 0 | |
1860 | 1995 | else { | |
1861 | - | let | |
1862 | - | let | |
1863 | - | then split_51C(value( | |
1996 | + | let bT = getString(aF, aX(ap)) | |
1997 | + | let bU = if (isDefined(bT)) | |
1998 | + | then split_51C(value(bT), "_") | |
1864 | 1999 | else nil | |
1865 | - | func | |
1866 | - | let | |
1867 | - | let | |
1868 | - | ( | |
2000 | + | func bV (bI,aW) = { | |
2001 | + | let bW = value(assetInfo(fromBase58String(aW))) | |
2002 | + | let bB = split(bW.description, "_")[W] | |
2003 | + | (bI + bA(bB)) | |
1869 | 2004 | } | |
1870 | 2005 | ||
1871 | - | let | |
1872 | - | let | |
1873 | - | let | |
1874 | - | func | |
1875 | - | then | |
1876 | - | else | |
1877 | - | ||
1878 | - | func | |
1879 | - | then | |
2006 | + | let bL = bU | |
2007 | + | let bM = size(bL) | |
2008 | + | let bN = 0 | |
2009 | + | func bO (bP,bQ) = if ((bQ >= bM)) | |
2010 | + | then bP | |
2011 | + | else bV(bP, bL[bQ]) | |
2012 | + | ||
2013 | + | func bR (bP,bQ) = if ((bQ >= bM)) | |
2014 | + | then bP | |
1880 | 2015 | else throw("List size exceeds 100") | |
1881 | 2016 | ||
1882 | - | | |
2017 | + | bR(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bN, 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) | |
1883 | 2018 | } | |
1884 | - | $Tuple2([IntegerEntry( | |
2019 | + | $Tuple2([IntegerEntry(aY(ap), gN)], gN) | |
1885 | 2020 | } | |
1886 | 2021 | ||
1887 | 2022 | ||
1888 | 2023 | ||
1889 | - | @Callable( | |
1890 | - | func setCustomName ( | |
1891 | - | let | |
1892 | - | if ((size( | |
2024 | + | @Callable(dn) | |
2025 | + | func setCustomName (aM,gG,aR) = { | |
2026 | + | let gX = gU(dn) | |
2027 | + | if ((size(dn.payments) != 1)) | |
1893 | 2028 | then throw("Exactly one payment required") | |
1894 | 2029 | else { | |
1895 | - | let | |
1896 | - | if (( | |
2030 | + | let gY = value(dn.payments[0]) | |
2031 | + | if ((gY.assetId != b)) | |
1897 | 2032 | then throw("Allowed USDT payment only!") | |
1898 | - | else if (( | |
1899 | - | then throw(("Payment should be " + toString( | |
1900 | - | else if (contains( | |
1901 | - | then throw(("Name should not contain '__': " + | |
1902 | - | else if ((size( | |
1903 | - | then throw(("Name too long, maxLength=" + toString( | |
2033 | + | else if ((gY.amount != cj)) | |
2034 | + | then throw(("Payment should be " + toString(cj))) | |
2035 | + | else if (contains(gG, "__")) | |
2036 | + | then throw(("Name should not contain '__': " + gG)) | |
2037 | + | else if ((size(gG) > ck)) | |
2038 | + | then throw(("Name too long, maxLength=" + toString(ck))) | |
1904 | 2039 | else { | |
1905 | - | let | |
1906 | - | let | |
1907 | - | let c = | |
2040 | + | let aK = toString(dn.originCaller) | |
2041 | + | let hH = { | |
2042 | + | let c = aR | |
1908 | 2043 | if (("ACCOUNT" == c)) | |
1909 | 2044 | then { | |
1910 | - | let | |
1911 | - | let | |
1912 | - | if (isDefined( | |
1913 | - | then throw(("Name already registered: " + | |
2045 | + | let hI = cE(gG) | |
2046 | + | let hJ = getString(hI) | |
2047 | + | if (isDefined(hJ)) | |
2048 | + | then throw(("Name already registered: " + gG)) | |
1914 | 2049 | else { | |
1915 | - | let | |
1916 | - | let | |
1917 | - | let | |
1918 | - | then [DeleteEntry( | |
2050 | + | let hK = ba(aK) | |
2051 | + | let hL = getString(hK) | |
2052 | + | let hM = if (isDefined(hL)) | |
2053 | + | then [DeleteEntry(cE(value(hL)))] | |
1919 | 2054 | else nil | |
1920 | - | (( | |
2055 | + | ((hM :+ StringEntry(hK, gG)) :+ StringEntry(hI, aK)) | |
1921 | 2056 | } | |
1922 | 2057 | } | |
1923 | 2058 | else if (("LAND" == c)) | |
1924 | 2059 | then { | |
1925 | - | let | |
1926 | - | let | |
1927 | - | if (!(isDefined(getInteger( | |
1928 | - | then throw(( | |
2060 | + | let bW = value(assetInfo(fromBase58String(aM))) | |
2061 | + | let fO = aO(aM) | |
2062 | + | if (!(isDefined(getInteger(fO)))) | |
2063 | + | then throw((bW.name + " is not staked")) | |
1929 | 2064 | else { | |
1930 | - | let | |
1931 | - | if (( | |
1932 | - | then throw(( | |
2065 | + | let fQ = valueOrErrorMessage(getString(aL(aM)), (("NFT " + bW.name) + " is orphaned")) | |
2066 | + | if ((fQ != aK)) | |
2067 | + | then throw((k + " is not yours")) | |
1933 | 2068 | else { | |
1934 | - | let | |
1935 | - | let | |
1936 | - | if (isDefined( | |
1937 | - | then throw(("Name already registered: " + | |
2069 | + | let hI = cy(gG) | |
2070 | + | let hJ = getString(hI) | |
2071 | + | if (isDefined(hJ)) | |
2072 | + | then throw(("Name already registered: " + gG)) | |
1938 | 2073 | else { | |
1939 | - | let | |
1940 | - | let | |
1941 | - | let | |
1942 | - | then [DeleteEntry( | |
2074 | + | let hN = aN(aM) | |
2075 | + | let hL = getString(hN) | |
2076 | + | let hM = if (isDefined(hL)) | |
2077 | + | then [DeleteEntry(cy(value(hL)))] | |
1943 | 2078 | else nil | |
1944 | - | (( | |
2079 | + | ((hM :+ StringEntry(hN, gG)) :+ StringEntry(hI, aM)) | |
1945 | 2080 | } | |
1946 | 2081 | } | |
1947 | 2082 | } | |
1948 | 2083 | } | |
1949 | 2084 | else if (("DUCK" == c)) | |
1950 | 2085 | then { | |
1951 | - | let | |
1952 | - | let | |
1953 | - | if (if (!(isDefined(getInteger( | |
2086 | + | let bW = value(assetInfo(fromBase58String(aM))) | |
2087 | + | let fO = aO(aM) | |
2088 | + | if (if (!(isDefined(getInteger(fO)))) | |
1954 | 2089 | then true | |
1955 | - | else !(isDefined(getString( | |
1956 | - | then throw(( | |
2090 | + | else !(isDefined(getString(be(aK))))) | |
2091 | + | then throw((bW.name + " is not staked")) | |
1957 | 2092 | else { | |
1958 | - | let | |
1959 | - | if (( | |
1960 | - | then throw(( | |
2093 | + | let fQ = valueOrErrorMessage(getString(bd(aM)), (("NFT " + bW.name) + " is orphaned")) | |
2094 | + | if ((fQ != aK)) | |
2095 | + | then throw((l + " is not yours")) | |
1961 | 2096 | else { | |
1962 | - | let | |
1963 | - | let | |
1964 | - | if (isDefined( | |
1965 | - | then throw(("Name already registered: " + | |
2097 | + | let hI = cD(gG) | |
2098 | + | let hJ = getString(hI) | |
2099 | + | if (isDefined(hJ)) | |
2100 | + | then throw(("Name already registered: " + gG)) | |
1966 | 2101 | else { | |
1967 | - | let | |
1968 | - | let | |
1969 | - | let | |
1970 | - | then [DeleteEntry( | |
2102 | + | let hN = aZ(aM) | |
2103 | + | let hL = getString(hN) | |
2104 | + | let hM = if (isDefined(hL)) | |
2105 | + | then [DeleteEntry(cD(value(hL)))] | |
1971 | 2106 | else nil | |
1972 | - | (( | |
2107 | + | ((hM :+ StringEntry(hN, gG)) :+ StringEntry(hI, aM)) | |
1973 | 2108 | } | |
1974 | 2109 | } | |
1975 | 2110 | } | |
1976 | 2111 | } | |
1977 | 2112 | else throw("Unknown entity type") | |
1978 | 2113 | } | |
1979 | - | $Tuple2((( | |
2114 | + | $Tuple2(((hH :+ ScriptTransfer(aG, gY.amount, b)) :+ gX), 0) | |
1980 | 2115 | } | |
1981 | 2116 | } | |
1982 | 2117 | } | |
1983 | 2118 | ||
1984 | 2119 | ||
1985 | 2120 | ||
1986 | - | @Callable( | |
1987 | - | func setReferrals ( | |
2121 | + | @Callable(dn) | |
2122 | + | func setReferrals (hO,hP) = if ((dn.callerPublicKey != cg)) | |
1988 | 2123 | then throw("Permission denied") | |
1989 | 2124 | else { | |
1990 | - | let | |
1991 | - | if ((size( | |
2125 | + | let gX = gU(dn) | |
2126 | + | if ((size(dn.payments) != 0)) | |
1992 | 2127 | then throw("No payments required") | |
1993 | - | else if (!(isDefined(addressFromString( | |
1994 | - | then throw(("Invalid address: " + | |
1995 | - | else if (!(isDefined(addressFromString( | |
1996 | - | then throw(("Invalid address: " + | |
2128 | + | else if (!(isDefined(addressFromString(hO)))) | |
2129 | + | then throw(("Invalid address: " + hO)) | |
2130 | + | else if (!(isDefined(addressFromString(hP)))) | |
2131 | + | then throw(("Invalid address: " + hP)) | |
1997 | 2132 | else { | |
1998 | - | let | |
1999 | - | let | |
2000 | - | let | |
2001 | - | then split_4C(value( | |
2133 | + | let hQ = cF() | |
2134 | + | let hR = getString(hQ) | |
2135 | + | let hS = if (isDefined(hR)) | |
2136 | + | then split_4C(value(hR), "_") | |
2002 | 2137 | else nil | |
2003 | - | if (containsElement( | |
2004 | - | then throw(( | |
2138 | + | if (containsElement(hS, hP)) | |
2139 | + | then throw((hP + " is not newbie (already has referrals)")) | |
2005 | 2140 | else { | |
2006 | - | let | |
2007 | - | let | |
2008 | - | if (if (isDefined( | |
2009 | - | then isDefined(addressFromString(value( | |
2141 | + | let hT = bb(hP) | |
2142 | + | let hU = getString(hT) | |
2143 | + | if (if (isDefined(hU)) | |
2144 | + | then isDefined(addressFromString(value(hU))) | |
2010 | 2145 | else false) | |
2011 | - | then throw((( | |
2146 | + | then throw(((hP + " already has refBy: ") + value(hU))) | |
2012 | 2147 | else { | |
2013 | - | let | |
2014 | - | let | |
2015 | - | let | |
2016 | - | then split_4C(value( | |
2148 | + | let hV = bc(hO) | |
2149 | + | let hW = getString(hV) | |
2150 | + | let hX = if (isDefined(hW)) | |
2151 | + | then split_4C(value(hW), "_") | |
2017 | 2152 | else nil | |
2018 | - | if (containsElement( | |
2019 | - | then throw(((( | |
2153 | + | if (containsElement(hX, hP)) | |
2154 | + | then throw((((hO + " already contains ") + hP) + " within referrals")) | |
2020 | 2155 | else { | |
2021 | - | let | |
2022 | - | let | |
2023 | - | then value( | |
2024 | - | else makeString_2C(( | |
2025 | - | $Tuple2([StringEntry( | |
2156 | + | let hY = makeString_2C((hX :+ hP), "_") | |
2157 | + | let hZ = if (containsElement(hS, hO)) | |
2158 | + | then value(hR) | |
2159 | + | else makeString_2C((hS :+ hO), "_") | |
2160 | + | $Tuple2([StringEntry(hT, hO), StringEntry(hV, hY), StringEntry(hQ, hZ), gX], 0) | |
2026 | 2161 | } | |
2027 | 2162 | } | |
2028 | 2163 | } | |
2031 | 2166 | ||
2032 | 2167 | ||
2033 | 2168 | ||
2034 | - | @Callable(ct) | |
2035 | - | func splitByGlobalWeightsREADONLY (dM) = $Tuple2(nil, cd(dM)) | |
2036 | - | ||
2037 | - | ||
2038 | - | ||
2039 | - | @Callable(ct) | |
2040 | - | func splitByGlobalAndLocalWeightsREADONLY (hn,ho,cw) = { | |
2041 | - | let cp = cv(cw) | |
2042 | - | $Tuple2(nil, $Tuple2(cd(hn), bV(ho, cp))) | |
2043 | - | } | |
2044 | - | ||
2045 | - | ||
2046 | - | ||
2047 | - | @Callable(ct) | |
2048 | - | func getBackpackREADONLY (aJ) = $Tuple2(nil, makeString(db(aI(aJ)), ":")) | |
2049 | - | ||
2050 | - | ||
2051 | - | ||
2052 | - | @Callable(ct) | |
2053 | - | func getWarehouseREADONLY (az) = { | |
2054 | - | let eY = value(assetInfo(fromBase58String(az))) | |
2055 | - | let dy = (aY(split(eY.description, "_")[D]) / m) | |
2056 | - | let dz = valueOrElse(getInteger(as(az)), 0) | |
2057 | - | $Tuple2(nil, makeString_2C(dw(ay(az), dy, dz), ":")) | |
2058 | - | } | |
2169 | + | @Callable(dn) | |
2170 | + | func splitByGlobalWeightsREADONLY (eC) = $Tuple2(nil, cY(eC)) | |
2171 | + | ||
2172 | + | ||
2173 | + | ||
2174 | + | @Callable(dn) | |
2175 | + | func splitByGlobalAndLocalWeightsREADONLY (ia,ib,dq) = { | |
2176 | + | let dj = dp(dq) | |
2177 | + | $Tuple2(nil, $Tuple2(cY(ia), cR(ib, dj))) | |
2178 | + | } | |
2179 | + | ||
2180 | + | ||
2181 | + | ||
2182 | + | @Callable(dn) | |
2183 | + | func getBackpackREADONLY (bg) = $Tuple2(nil, makeString(dU(bf(bg)), ":")) | |
2184 | + | ||
2185 | + | ||
2186 | + | ||
2187 | + | @Callable(dn) | |
2188 | + | func getWarehouseREADONLY (aW) = { | |
2189 | + | let bW = value(assetInfo(fromBase58String(aW))) | |
2190 | + | let eo = (bA(split(bW.description, "_")[W]) / o) | |
2191 | + | let ep = valueOrElse(getInteger(aP(aW)), 0) | |
2192 | + | $Tuple2(nil, makeString_2C(em(aV(aW), eo, ep), ":")) | |
2193 | + | } | |
2194 | + | ||
2195 | + | ||
2196 | + | ||
2197 | + | @Callable(dn) | |
2198 | + | func saveLastTx () = if ((dn.caller != aI)) | |
2199 | + | then throw("Access denied") | |
2200 | + | else $Tuple2([gU(dn)], 42) | |
2059 | 2201 | ||
2060 | 2202 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = take(drop(this.bytes, 1), 1) | |
5 | 5 | ||
6 | 6 | let b = { | |
7 | 7 | let c = a | |
8 | 8 | if ((base58'2W' == c)) | |
9 | 9 | then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi' | |
10 | 10 | else if ((base58'2T' == c)) | |
11 | 11 | then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63' | |
12 | 12 | else throw("Unknown chain") | |
13 | 13 | } | |
14 | 14 | ||
15 | 15 | let d = { | |
16 | 16 | let c = a | |
17 | 17 | if ((base58'2W' == c)) | |
18 | 18 | then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv" | |
19 | 19 | else if ((base58'2T' == c)) | |
20 | 20 | then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy" | |
21 | 21 | else throw("Unknown chain") | |
22 | 22 | } | |
23 | 23 | ||
24 | 24 | let e = { | |
25 | 25 | let c = a | |
26 | 26 | if ((base58'2W' == c)) | |
27 | 27 | then 10000000000 | |
28 | 28 | else if ((base58'2T' == c)) | |
29 | 29 | then 100000000 | |
30 | 30 | else throw("Unknown chain") | |
31 | 31 | } | |
32 | 32 | ||
33 | 33 | let f = "__" | |
34 | 34 | ||
35 | 35 | let g = 1000000 | |
36 | 36 | ||
37 | - | let h = 100000000 | |
38 | - | ||
39 | - | let i = "LAND" | |
40 | - | ||
41 | - | let j = "DUCK" | |
42 | - | ||
43 | - | let k = "PRESALE" | |
44 | - | ||
45 | - | let l = 6 | |
46 | - | ||
47 | - | let m = 25 | |
48 | - | ||
49 | - | let n = 100 | |
50 | - | ||
51 | - | let o = 225 | |
52 | - | ||
53 | - | let p = 400 | |
54 | - | ||
55 | - | let q = 625 | |
56 | - | ||
57 | - | let r = 3456000 | |
58 | - | ||
59 | - | let s = 86400000 | |
60 | - | ||
61 | - | let t = 10000000000 | |
62 | - | ||
63 | - | let u = "Africa_F_Africa" | |
64 | - | ||
65 | - | let v = 39637 | |
66 | - | ||
67 | - | let w = 10 | |
68 | - | ||
69 | - | let x = 100 | |
70 | - | ||
71 | - | let y = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3"] | |
72 | - | ||
73 | - | let z = ["Americas", "Europe", "Asia", "Africa", "Oceania"] | |
74 | - | ||
75 | - | let A = ["1_1_1_2_2_5_1_10_0", "2_2_2_4_4_10_1_10_0", "3_3_3_6_6_15_1_10_0", "2_5_5_2_7_5_2_100_1", "4_10_10_4_14_10_2_100_1", "6_15_15_6_21_15_2_100_1", "1_1_1_1_1_8_1_10_2", "2_2_2_2_2_16_1_10_2", "3_3_3_3_3_24_1_10_2", "9_9_1_5_5_1_5_100_3", "18_18_2_10_10_2_5_100_3", "27_27_3_15_15_3_5_100_3", "2_2_1_2_2_2_1_10_4", "4_4_2_4_4_4_1_10_4", "6_6_3_6_6_6_1_10_4"] | |
76 | - | ||
77 | - | let B = 7 | |
78 | - | ||
79 | - | let C = 0 | |
80 | - | ||
81 | - | let D = 1 | |
82 | - | ||
83 | - | let E = 2 | |
84 | - | ||
85 | - | let F = 3 | |
86 | - | ||
87 | - | let G = 0 | |
88 | - | ||
89 | - | let H = 1 | |
90 | - | ||
91 | - | let I = 2 | |
92 | - | ||
93 | - | let J = 3 | |
94 | - | ||
95 | - | let K = 4 | |
96 | - | ||
97 | - | let L = 0 | |
98 | - | ||
99 | - | let M = 1 | |
100 | - | ||
101 | - | let N = 2 | |
102 | - | ||
103 | - | let O = 3 | |
104 | - | ||
105 | - | let P = 0 | |
106 | - | ||
107 | - | let Q = 1 | |
108 | - | ||
109 | - | let R = 2 | |
110 | - | ||
111 | - | let S = 3 | |
112 | - | ||
113 | - | func T (U) = parseIntValue(split(A[U], "_")[B]) | |
114 | - | ||
115 | - | ||
116 | - | func V (W,X) = valueOrErrorMessage(getString(W, X), makeString(["mandatory ", toString(W), ".", X, " is not defined"], "")) | |
117 | - | ||
118 | - | ||
119 | - | let Y = 1 | |
120 | - | ||
121 | - | let Z = 2 | |
122 | - | ||
123 | - | let aa = 3 | |
124 | - | ||
125 | - | func ab () = "%s__restConfig" | |
126 | - | ||
127 | - | ||
128 | - | func ac () = "%s__restAddr" | |
129 | - | ||
130 | - | ||
131 | - | func ad (ae) = split_4C(V(ae, ab()), f) | |
132 | - | ||
133 | - | ||
134 | - | func af (ag,ah) = valueOrErrorMessage(addressFromString(ag[ah]), ("Rest cfg doesn't contain address at index " + toString(ah))) | |
135 | - | ||
136 | - | ||
137 | - | let ai = addressFromStringValue(valueOrElse(getString(this, ac()), d)) | |
138 | - | ||
139 | - | let ag = ad(ai) | |
140 | - | ||
141 | - | let aj = af(ag, Y) | |
142 | - | ||
143 | - | let ak = af(ag, Z) | |
144 | - | ||
145 | - | let al = af(ag, aa) | |
146 | - | ||
147 | - | func am (an) = ("lastTxIdByUser_" + an) | |
148 | - | ||
149 | - | ||
150 | - | func ao (ap) = ("nftOwner_" + ap) | |
151 | - | ||
152 | - | ||
153 | - | func aq (ap) = ("landCustomNameByAssetId_" + ap) | |
154 | - | ||
155 | - | ||
156 | - | func ar (ap) = ("stakedTime_" + ap) | |
157 | - | ||
158 | - | ||
159 | - | func as (ap) = ("infraLevel_" + ap) | |
160 | - | ||
161 | - | ||
162 | - | func at (au,ap) = makeString(["landArtStatus", au, ap], "_") | |
163 | - | ||
164 | - | ||
165 | - | func av (aw,ap,ax) = ((((("stakedTimeByTypeAssetIdAndOwner_" + aw) + "_") + ap) + "_") + ax) | |
166 | - | ||
167 | - | ||
168 | - | func ay (az) = ("wareHouse_" + az) | |
169 | - | ||
170 | - | ||
171 | - | func aA (ax) = ("stakedLandsByOwner_" + ax) | |
172 | - | ||
173 | - | ||
174 | - | func aB (ax) = ("stakedPiecesByOwner_" + ax) | |
175 | - | ||
176 | - | ||
177 | - | func aC (ap) = ("duckCustomNameByAssetId_" + ap) | |
178 | - | ||
179 | - | ||
180 | - | func aD (an) = ("accountCustomNameByAddr_" + an) | |
181 | - | ||
182 | - | ||
183 | - | func aE (an) = ("accRefBy_" + an) | |
184 | - | ||
185 | - | ||
186 | - | func aF (an) = ("accReferrals_" + an) | |
187 | - | ||
188 | - | ||
189 | - | func aG (ap) = ("duckOwner_" + ap) | |
190 | - | ||
191 | - | ||
192 | - | func aH (ax) = ("stakedDuckByOwner_" + ax) | |
193 | - | ||
194 | - | ||
195 | - | func aI (aJ) = ("backPack_" + aJ) | |
196 | - | ||
197 | - | ||
198 | - | func aK (aJ) = ("duckLocation_" + aJ) | |
199 | - | ||
200 | - | ||
201 | - | func aL (aJ) = ("duckHealth_" + aJ) | |
202 | - | ||
203 | - | ||
204 | - | func aM () = "resTypesProportions" | |
205 | - | ||
206 | - | ||
207 | - | func aN () = "contractsBlocked" | |
208 | - | ||
209 | - | ||
210 | - | func aO (aP) = ("%s%s__userGwlReleaseTime__" + aP) | |
211 | - | ||
212 | - | ||
213 | - | func aQ () = "emergencyWarehouseProducts" | |
214 | - | ||
215 | - | ||
216 | - | let aR = 1 | |
217 | - | ||
218 | - | let aS = 2 | |
219 | - | ||
220 | - | func aT (aU) = { | |
221 | - | let c = aU | |
37 | + | let h = 10000000 | |
38 | + | ||
39 | + | let i = 100000000 | |
40 | + | ||
41 | + | let j = 10000000000 | |
42 | + | ||
43 | + | let k = "LAND" | |
44 | + | ||
45 | + | let l = "DUCK" | |
46 | + | ||
47 | + | let m = "PRESALE" | |
48 | + | ||
49 | + | let n = 6 | |
50 | + | ||
51 | + | let o = 25 | |
52 | + | ||
53 | + | let p = 100 | |
54 | + | ||
55 | + | let q = 225 | |
56 | + | ||
57 | + | let r = 400 | |
58 | + | ||
59 | + | let s = 625 | |
60 | + | ||
61 | + | let t = 3456000 | |
62 | + | ||
63 | + | let u = 86400000 | |
64 | + | ||
65 | + | let v = 10000000000 | |
66 | + | ||
67 | + | let w = "Africa_F_Africa" | |
68 | + | ||
69 | + | let x = 39637 | |
70 | + | ||
71 | + | let y = 3 | |
72 | + | ||
73 | + | let z = 4 | |
74 | + | ||
75 | + | let A = 10 | |
76 | + | ||
77 | + | let B = 100 | |
78 | + | ||
79 | + | let C = ["Oil", "Ore", "Wood", "Sand", "Clay", "Organic"] | |
80 | + | ||
81 | + | let D = ["Fuel", "Metal", "Plank", "Glass", "Plastic", "Protein"] | |
82 | + | ||
83 | + | let E = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3"] | |
84 | + | ||
85 | + | let F = ["Americas", "Europe", "Asia", "Africa", "Oceania"] | |
86 | + | ||
87 | + | let G = ["1_1_1_2_2_5_1_10_0", "2_2_2_4_4_10_1_10_0", "3_3_3_6_6_15_1_10_0", "2_5_5_2_7_5_2_100_1", "4_10_10_4_14_10_2_100_1", "6_15_15_6_21_15_2_100_1", "1_1_1_1_1_8_1_10_2", "2_2_2_2_2_16_1_10_2", "3_3_3_3_3_24_1_10_2", "9_9_1_5_5_1_5_100_3", "18_18_2_10_10_2_5_100_3", "27_27_3_15_15_3_5_100_3", "2_2_1_2_2_2_1_10_4", "4_4_2_4_4_4_1_10_4", "6_6_3_6_6_6_1_10_4"] | |
88 | + | ||
89 | + | let H = 0 | |
90 | + | ||
91 | + | let I = 1 | |
92 | + | ||
93 | + | let J = 2 | |
94 | + | ||
95 | + | let K = 3 | |
96 | + | ||
97 | + | let L = 4 | |
98 | + | ||
99 | + | let M = 0 | |
100 | + | ||
101 | + | let N = 1 | |
102 | + | ||
103 | + | let O = 2 | |
104 | + | ||
105 | + | let P = 3 | |
106 | + | ||
107 | + | let Q = 4 | |
108 | + | ||
109 | + | let R = 5 | |
110 | + | ||
111 | + | let S = 6 | |
112 | + | ||
113 | + | let T = 7 | |
114 | + | ||
115 | + | let U = 8 | |
116 | + | ||
117 | + | let V = 0 | |
118 | + | ||
119 | + | let W = 1 | |
120 | + | ||
121 | + | let X = 2 | |
122 | + | ||
123 | + | let Y = 3 | |
124 | + | ||
125 | + | let Z = 0 | |
126 | + | ||
127 | + | let aa = 1 | |
128 | + | ||
129 | + | let ab = 2 | |
130 | + | ||
131 | + | let ac = 3 | |
132 | + | ||
133 | + | let ad = 4 | |
134 | + | ||
135 | + | let ae = 0 | |
136 | + | ||
137 | + | let af = 1 | |
138 | + | ||
139 | + | let ag = 2 | |
140 | + | ||
141 | + | let ah = 3 | |
142 | + | ||
143 | + | let ai = 0 | |
144 | + | ||
145 | + | let aj = 1 | |
146 | + | ||
147 | + | let ak = 2 | |
148 | + | ||
149 | + | let al = 3 | |
150 | + | ||
151 | + | func am (an) = parseIntValue(split(G[an], "_")[T]) | |
152 | + | ||
153 | + | ||
154 | + | func ao (ap,aq) = valueOrErrorMessage(getString(ap, aq), makeString(["mandatory ", toString(ap), ".", aq, " is not defined"], "")) | |
155 | + | ||
156 | + | ||
157 | + | func ar (aq,as) = valueOrElse(getInteger(this, aq), as) | |
158 | + | ||
159 | + | ||
160 | + | let at = 1 | |
161 | + | ||
162 | + | let au = 2 | |
163 | + | ||
164 | + | let av = 3 | |
165 | + | ||
166 | + | let aw = 4 | |
167 | + | ||
168 | + | func ax () = "%s__restConfig" | |
169 | + | ||
170 | + | ||
171 | + | func ay () = "%s__restAddr" | |
172 | + | ||
173 | + | ||
174 | + | func az (aA) = split_4C(ao(aA, ax()), f) | |
175 | + | ||
176 | + | ||
177 | + | func aB (aC,aD) = valueOrErrorMessage(addressFromString(aC[aD]), ("Rest cfg doesn't contain address at index " + toString(aD))) | |
178 | + | ||
179 | + | ||
180 | + | let aE = addressFromStringValue(valueOrElse(getString(this, ay()), d)) | |
181 | + | ||
182 | + | let aC = az(aE) | |
183 | + | ||
184 | + | let aF = aB(aC, at) | |
185 | + | ||
186 | + | let aG = aB(aC, au) | |
187 | + | ||
188 | + | let aH = aB(aC, av) | |
189 | + | ||
190 | + | let aI = aB(aC, aw) | |
191 | + | ||
192 | + | func aJ (aK) = ("lastTxIdByUser_" + aK) | |
193 | + | ||
194 | + | ||
195 | + | func aL (aM) = ("nftOwner_" + aM) | |
196 | + | ||
197 | + | ||
198 | + | func aN (aM) = ("landCustomNameByAssetId_" + aM) | |
199 | + | ||
200 | + | ||
201 | + | func aO (aM) = ("stakedTime_" + aM) | |
202 | + | ||
203 | + | ||
204 | + | func aP (aM) = ("infraLevel_" + aM) | |
205 | + | ||
206 | + | ||
207 | + | func aQ (aR,aM) = makeString(["landArtStatus", aR, aM], "_") | |
208 | + | ||
209 | + | ||
210 | + | func aS (aT,aM,aU) = ((((("stakedTimeByTypeAssetIdAndOwner_" + aT) + "_") + aM) + "_") + aU) | |
211 | + | ||
212 | + | ||
213 | + | func aV (aW) = ("wareHouse_" + aW) | |
214 | + | ||
215 | + | ||
216 | + | func aX (aU) = ("stakedLandsByOwner_" + aU) | |
217 | + | ||
218 | + | ||
219 | + | func aY (aU) = ("stakedPiecesByOwner_" + aU) | |
220 | + | ||
221 | + | ||
222 | + | func aZ (aM) = ("duckCustomNameByAssetId_" + aM) | |
223 | + | ||
224 | + | ||
225 | + | func ba (aK) = ("accountCustomNameByAddr_" + aK) | |
226 | + | ||
227 | + | ||
228 | + | func bb (aK) = ("accRefBy_" + aK) | |
229 | + | ||
230 | + | ||
231 | + | func bc (aK) = ("accReferrals_" + aK) | |
232 | + | ||
233 | + | ||
234 | + | func bd (aM) = ("duckOwner_" + aM) | |
235 | + | ||
236 | + | ||
237 | + | func be (aU) = ("stakedDuckByOwner_" + aU) | |
238 | + | ||
239 | + | ||
240 | + | func bf (bg) = ("backPack_" + bg) | |
241 | + | ||
242 | + | ||
243 | + | func bh (bg) = ("duckLocation_" + bg) | |
244 | + | ||
245 | + | ||
246 | + | func bi (bg) = ("duckHealth_" + bg) | |
247 | + | ||
248 | + | ||
249 | + | func bj () = "resTypesProportions" | |
250 | + | ||
251 | + | ||
252 | + | func bk () = "contractsBlocked" | |
253 | + | ||
254 | + | ||
255 | + | func bl (bm) = ("%s%s__userGwlReleaseTime__" + bm) | |
256 | + | ||
257 | + | ||
258 | + | func bn (aW) = ("landOrder_" + aW) | |
259 | + | ||
260 | + | ||
261 | + | func bo () = "emergencyWarehouseProducts" | |
262 | + | ||
263 | + | ||
264 | + | let bp = 0 | |
265 | + | ||
266 | + | let bq = 1 | |
267 | + | ||
268 | + | let br = 2 | |
269 | + | ||
270 | + | func bs (bt) = { | |
271 | + | let c = bt | |
222 | 272 | if ($isInstanceOf(c, "String")) | |
223 | 273 | then { | |
224 | - | let | |
225 | - | | |
274 | + | let bu = c | |
275 | + | bu | |
226 | 276 | } | |
227 | 277 | else throw("fail to cast into String") | |
228 | 278 | } | |
229 | 279 | ||
230 | 280 | ||
231 | - | func | |
232 | - | let c = | |
281 | + | func bv (bt) = { | |
282 | + | let c = bt | |
233 | 283 | if ($isInstanceOf(c, "Int")) | |
234 | 284 | then { | |
235 | - | let | |
236 | - | | |
285 | + | let bw = c | |
286 | + | bw | |
237 | 287 | } | |
238 | 288 | else throw("fail to cast into Int") | |
239 | 289 | } | |
240 | 290 | ||
241 | 291 | ||
242 | - | func aY (aZ) = { | |
243 | - | let c = aZ | |
292 | + | func bx (bt) = { | |
293 | + | let c = bt | |
294 | + | if ($isInstanceOf(c, "List[Any]")) | |
295 | + | then { | |
296 | + | let by = c | |
297 | + | by | |
298 | + | } | |
299 | + | else throw("fail to cast into List[Any]") | |
300 | + | } | |
301 | + | ||
302 | + | ||
303 | + | func bz (bt) = { | |
304 | + | let c = bt | |
305 | + | if ($isInstanceOf(c, "Boolean")) | |
306 | + | then { | |
307 | + | let bu = c | |
308 | + | bu | |
309 | + | } | |
310 | + | else throw("fail to cast into Boolean") | |
311 | + | } | |
312 | + | ||
313 | + | ||
314 | + | func bA (bB) = { | |
315 | + | let c = bB | |
244 | 316 | if (("S" == c)) | |
245 | - | then | |
317 | + | then o | |
246 | 318 | else if (("M" == c)) | |
247 | - | then | |
319 | + | then p | |
248 | 320 | else if (("L" == c)) | |
249 | - | then | |
321 | + | then q | |
250 | 322 | else if (("XL" == c)) | |
251 | - | then | |
323 | + | then r | |
252 | 324 | else if (("XXL" == c)) | |
253 | - | then | |
325 | + | then s | |
254 | 326 | else throw("Unknown land size") | |
255 | 327 | } | |
256 | 328 | ||
257 | 329 | ||
258 | - | func ba (bb) = { | |
259 | - | func bc (bd,be) = (bd + parseIntValue(bb[be])) | |
260 | - | ||
261 | - | let bf = [0, 1, 2, 3, 4, 5] | |
262 | - | let bg = size(bf) | |
263 | - | let bh = 0 | |
264 | - | func bi (bj,bk) = if ((bk >= bg)) | |
265 | - | then bj | |
266 | - | else bc(bj, bf[bk]) | |
267 | - | ||
268 | - | func bl (bj,bk) = if ((bk >= bg)) | |
269 | - | then bj | |
330 | + | let bC = 0 | |
331 | + | ||
332 | + | let bD = 1 | |
333 | + | ||
334 | + | func bE (bF) = { | |
335 | + | let bG = split(valueOrElse(getString(aF, bj()), "0_0_0_0_0_0"), "_") | |
336 | + | func bH (bI,bJ) = (bI + parseIntValue(bJ)) | |
337 | + | ||
338 | + | let bK = { | |
339 | + | let bL = bG | |
340 | + | let bM = size(bL) | |
341 | + | let bN = 0 | |
342 | + | func bO (bP,bQ) = if ((bQ >= bM)) | |
343 | + | then bP | |
344 | + | else bH(bP, bL[bQ]) | |
345 | + | ||
346 | + | func bR (bP,bQ) = if ((bQ >= bM)) | |
347 | + | then bP | |
348 | + | else throw("List size exceeds 6") | |
349 | + | ||
350 | + | bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6) | |
351 | + | } | |
352 | + | let bS = if ((bF == "")) | |
353 | + | then 0 | |
354 | + | else { | |
355 | + | let bT = getString(aF, aX(bF)) | |
356 | + | let bU = if (isDefined(bT)) | |
357 | + | then split_51C(value(bT), "_") | |
358 | + | else nil | |
359 | + | func bV (bI,aW) = { | |
360 | + | let bW = value(assetInfo(fromBase58String(aW))) | |
361 | + | let bB = split(bW.description, "_")[W] | |
362 | + | (bI + bA(bB)) | |
363 | + | } | |
364 | + | ||
365 | + | let bL = bU | |
366 | + | let bM = size(bL) | |
367 | + | let bN = 0 | |
368 | + | func bX (bP,bQ) = if ((bQ >= bM)) | |
369 | + | then bP | |
370 | + | else bV(bP, bL[bQ]) | |
371 | + | ||
372 | + | func bY (bP,bQ) = if ((bQ >= bM)) | |
373 | + | then bP | |
374 | + | else throw("List size exceeds 100") | |
375 | + | ||
376 | + | bY(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bN, 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) | |
377 | + | } | |
378 | + | [bK, bS] | |
379 | + | } | |
380 | + | ||
381 | + | ||
382 | + | func bZ (ca) = { | |
383 | + | func cb (cc,cd) = (cc + parseIntValue(ca[cd])) | |
384 | + | ||
385 | + | let bL = [0, 1, 2, 3, 4, 5] | |
386 | + | let bM = size(bL) | |
387 | + | let bN = 0 | |
388 | + | func bO (bP,bQ) = if ((bQ >= bM)) | |
389 | + | then bP | |
390 | + | else cb(bP, bL[bQ]) | |
391 | + | ||
392 | + | func bR (bP,bQ) = if ((bQ >= bM)) | |
393 | + | then bP | |
270 | 394 | else throw("List size exceeds 6") | |
271 | 395 | ||
272 | - | | |
273 | - | } | |
274 | - | ||
275 | - | ||
276 | - | let | |
396 | + | bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6) | |
397 | + | } | |
398 | + | ||
399 | + | ||
400 | + | let ce = { | |
277 | 401 | let c = a | |
278 | 402 | if ((base58'2W' == c)) | |
279 | 403 | then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv") | |
280 | 404 | else if ((base58'2T' == c)) | |
281 | 405 | then this | |
282 | 406 | else throw("Unknown chain") | |
283 | 407 | } | |
284 | 408 | ||
285 | - | let | |
409 | + | let cf = { | |
286 | 410 | let c = a | |
287 | 411 | if ((base58'2W' == c)) | |
288 | 412 | then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb") | |
289 | 413 | else if ((base58'2T' == c)) | |
290 | 414 | then this | |
291 | 415 | else throw("Unknown chain") | |
292 | 416 | } | |
293 | 417 | ||
294 | - | let | |
295 | - | ||
296 | - | let | |
297 | - | ||
298 | - | let | |
299 | - | ||
300 | - | let | |
301 | - | ||
302 | - | let | |
303 | - | ||
304 | - | let | |
305 | - | ||
306 | - | let | |
418 | + | let cg = base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD' | |
419 | + | ||
420 | + | let ch = [30, 60, 120] | |
421 | + | ||
422 | + | let ci = 300000 | |
423 | + | ||
424 | + | let cj = 5000000 | |
425 | + | ||
426 | + | let ck = 50 | |
427 | + | ||
428 | + | let cl = 10000000 | |
429 | + | ||
430 | + | let cm = { | |
307 | 431 | let c = a | |
308 | 432 | if ((base58'2W' == c)) | |
309 | 433 | then 252289527462 | |
310 | 434 | else if ((base58'2T' == c)) | |
311 | 435 | then 2522895274 | |
312 | 436 | else throw("Unknown chain") | |
313 | 437 | } | |
314 | 438 | ||
315 | - | let | |
439 | + | let cn = { | |
316 | 440 | let c = a | |
317 | 441 | if ((base58'2W' == c)) | |
318 | 442 | then 250000000 | |
319 | 443 | else if ((base58'2T' == c)) | |
320 | 444 | then 250000000 | |
321 | 445 | else throw("Unknown chain") | |
322 | 446 | } | |
323 | 447 | ||
324 | - | let bw = toBigInt(5) | |
325 | - | ||
326 | - | let bx = toBigInt(20) | |
327 | - | ||
328 | - | let by = toBigInt((20 * 20)) | |
329 | - | ||
330 | - | let bz = toBigInt(((20 * 20) * 20)) | |
331 | - | ||
332 | - | let bA = toBigInt((((20 * 20) * 20) * 20)) | |
333 | - | ||
334 | - | let bB = toBigInt(((((20 * 20) * 20) * 20) * 20)) | |
335 | - | ||
336 | - | let bC = 500 | |
337 | - | ||
338 | - | func bD () = "nextLandNum" | |
339 | - | ||
340 | - | ||
341 | - | func bE (bF) = ("landToAsset_" + bF) | |
342 | - | ||
343 | - | ||
344 | - | func bG (bH) = ("landByCustomName_" + bH) | |
345 | - | ||
346 | - | ||
347 | - | func bI (ap,ax) = ((("infraLevelByAssetIdAndOwner_" + ap) + "_") + ax) | |
348 | - | ||
349 | - | ||
350 | - | func bJ (au,ap,ax) = makeString(["landArtStatusByTypeAssetIdAndOwner", au, ap, ax], "_") | |
351 | - | ||
352 | - | ||
353 | - | func bK (bF) = ("landOwner_" + bF) | |
354 | - | ||
355 | - | ||
356 | - | func bL (bH) = ("duckByCustomName_" + bH) | |
357 | - | ||
358 | - | ||
359 | - | func bM (bH) = ("accountByCustomName_" + bH) | |
360 | - | ||
361 | - | ||
362 | - | func bN () = "oldiesList" | |
363 | - | ||
364 | - | ||
365 | - | let bO = 0 | |
366 | - | ||
367 | - | let bP = 1 | |
368 | - | ||
369 | - | let bQ = 2 | |
370 | - | ||
371 | - | let bR = 0 | |
372 | - | ||
373 | - | let bS = 5 | |
374 | - | ||
375 | - | let bT = 6 | |
376 | - | ||
377 | - | func bU (bF,aZ) = ((i + bF) + aZ) | |
378 | - | ||
379 | - | ||
380 | - | func bV (bW,bX) = { | |
381 | - | let bY = (((((bX[0] + bX[1]) + bX[2]) + bX[3]) + bX[4]) + bX[5]) | |
382 | - | if ((0 >= bY)) | |
448 | + | let co = toBigInt(5) | |
449 | + | ||
450 | + | let cp = toBigInt(20) | |
451 | + | ||
452 | + | let cq = toBigInt((20 * 20)) | |
453 | + | ||
454 | + | let cr = toBigInt(((20 * 20) * 20)) | |
455 | + | ||
456 | + | let cs = toBigInt((((20 * 20) * 20) * 20)) | |
457 | + | ||
458 | + | let ct = toBigInt(((((20 * 20) * 20) * 20) * 20)) | |
459 | + | ||
460 | + | let cu = 500 | |
461 | + | ||
462 | + | func cv () = "nextLandNum" | |
463 | + | ||
464 | + | ||
465 | + | func cw (cx) = ("landToAsset_" + cx) | |
466 | + | ||
467 | + | ||
468 | + | func cy (cz) = ("landByCustomName_" + cz) | |
469 | + | ||
470 | + | ||
471 | + | func cA (aM,aU) = ((("infraLevelByAssetIdAndOwner_" + aM) + "_") + aU) | |
472 | + | ||
473 | + | ||
474 | + | func cB (aR,aM,aU) = makeString(["landArtStatusByTypeAssetIdAndOwner", aR, aM, aU], "_") | |
475 | + | ||
476 | + | ||
477 | + | func cC (cx) = ("landOwner_" + cx) | |
478 | + | ||
479 | + | ||
480 | + | func cD (cz) = ("duckByCustomName_" + cz) | |
481 | + | ||
482 | + | ||
483 | + | func cE (cz) = ("accountByCustomName_" + cz) | |
484 | + | ||
485 | + | ||
486 | + | func cF () = "oldiesList" | |
487 | + | ||
488 | + | ||
489 | + | let cG = 0 | |
490 | + | ||
491 | + | let cH = 1 | |
492 | + | ||
493 | + | let cI = 2 | |
494 | + | ||
495 | + | let cJ = 0 | |
496 | + | ||
497 | + | let cK = 1 | |
498 | + | ||
499 | + | let cL = 2 | |
500 | + | ||
501 | + | let cM = 3 | |
502 | + | ||
503 | + | let cN = 4 | |
504 | + | ||
505 | + | let cO = 5 | |
506 | + | ||
507 | + | let cP = 6 | |
508 | + | ||
509 | + | func cQ (cx,bB) = ((k + cx) + bB) | |
510 | + | ||
511 | + | ||
512 | + | func cR (cS,cT) = { | |
513 | + | let cU = (((((cT[0] + cT[1]) + cT[2]) + cT[3]) + cT[4]) + cT[5]) | |
514 | + | if ((0 >= cU)) | |
383 | 515 | then throw("Zero weights sum") | |
384 | 516 | else { | |
385 | - | let | |
386 | - | func | |
387 | - | ||
388 | - | let | |
389 | - | let | |
390 | - | let | |
391 | - | func | |
392 | - | then | |
393 | - | else | |
394 | - | ||
395 | - | func | |
396 | - | then | |
517 | + | let cV = fraction(cS, g, cU) | |
518 | + | func cW (bI,cX) = (bI :+ fraction(cX, cV, g)) | |
519 | + | ||
520 | + | let bL = cT | |
521 | + | let bM = size(bL) | |
522 | + | let bN = nil | |
523 | + | func bO (bP,bQ) = if ((bQ >= bM)) | |
524 | + | then bP | |
525 | + | else cW(bP, bL[bQ]) | |
526 | + | ||
527 | + | func bR (bP,bQ) = if ((bQ >= bM)) | |
528 | + | then bP | |
397 | 529 | else throw("List size exceeds 6") | |
398 | 530 | ||
399 | - | | |
400 | - | } | |
401 | - | } | |
402 | - | ||
403 | - | ||
404 | - | func | |
405 | - | let | |
406 | - | if ((size( | |
531 | + | bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6) | |
532 | + | } | |
533 | + | } | |
534 | + | ||
535 | + | ||
536 | + | func cY (cS) = { | |
537 | + | let bG = split(value(getString(bj())), "_") | |
538 | + | if ((size(bG) != n)) | |
407 | 539 | then throw("Wrong proportions data") | |
408 | 540 | else { | |
409 | - | let | |
410 | - | | |
411 | - | } | |
412 | - | } | |
413 | - | ||
414 | - | ||
415 | - | func | |
416 | - | let | |
417 | - | func | |
418 | - | let | |
419 | - | if ((0 > | |
420 | - | then throw(((((("Not enough material idx=" + toString( | |
421 | - | else ( | |
541 | + | let cZ = [parseIntValue(bG[0]), parseIntValue(bG[1]), parseIntValue(bG[2]), parseIntValue(bG[3]), parseIntValue(bG[4]), parseIntValue(bG[5])] | |
542 | + | cR(cS, cZ) | |
543 | + | } | |
544 | + | } | |
545 | + | ||
546 | + | ||
547 | + | func da (db,dc,dd) = { | |
548 | + | let de = cY(dd) | |
549 | + | func df (bI,aD) = { | |
550 | + | let dg = (parseIntValue(dc[aD]) - de[aD]) | |
551 | + | if ((0 > dg)) | |
552 | + | then throw(((((("Not enough material idx=" + toString(aD)) + ", you have ") + dc[aD]) + ", but need ") + toString(de[aD]))) | |
553 | + | else (bI :+ toString(dg)) | |
422 | 554 | } | |
423 | 555 | ||
424 | - | if ( | |
556 | + | if (db) | |
425 | 557 | then { | |
426 | - | let | |
427 | - | let | |
428 | - | let | |
429 | - | func | |
430 | - | then | |
431 | - | else | |
432 | - | ||
433 | - | func | |
434 | - | then | |
558 | + | let bL = [0, 1, 2, 3, 4, 5] | |
559 | + | let bM = size(bL) | |
560 | + | let bN = nil | |
561 | + | func bO (bP,bQ) = if ((bQ >= bM)) | |
562 | + | then bP | |
563 | + | else df(bP, bL[bQ]) | |
564 | + | ||
565 | + | func bR (bP,bQ) = if ((bQ >= bM)) | |
566 | + | then bP | |
435 | 567 | else throw("List size exceeds 6") | |
436 | 568 | ||
437 | - | | |
438 | - | } | |
439 | - | else | |
440 | - | } | |
441 | - | ||
442 | - | ||
443 | - | func | |
569 | + | bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6) | |
570 | + | } | |
571 | + | else dc | |
572 | + | } | |
573 | + | ||
574 | + | ||
575 | + | func dh (di,dj,dk,dl) = if ((size(di) != n)) | |
444 | 576 | then throw("Wrong proportions data") | |
445 | 577 | else { | |
446 | - | func | |
447 | - | let | |
448 | - | if ((0 > | |
449 | - | then throw(((((((("Panic! Pieces of type=" + toString( | |
450 | - | else ( | |
451 | - | } | |
452 | - | ||
453 | - | let | |
454 | - | let | |
455 | - | let | |
456 | - | let | |
457 | - | func | |
458 | - | then | |
459 | - | else | |
460 | - | ||
461 | - | func | |
462 | - | then | |
578 | + | func dm (bI,dn) = { | |
579 | + | let dg = (parseIntValue(di[dn]) + ((dl * dj[dn]) * dk)) | |
580 | + | if ((0 > dg)) | |
581 | + | then throw(((((((("Panic! Pieces of type=" + toString(dn)) + ", sign=") + toString(dl)) + ", terrainCounts[i]=") + toString(dj[dn])) + ", landSizeIndex=") + toString(dk))) | |
582 | + | else (bI :+ toString(dg)) | |
583 | + | } | |
584 | + | ||
585 | + | let cZ = { | |
586 | + | let bL = [0, 1, 2, 3, 4, 5] | |
587 | + | let bM = size(bL) | |
588 | + | let bN = nil | |
589 | + | func bO (bP,bQ) = if ((bQ >= bM)) | |
590 | + | then bP | |
591 | + | else dm(bP, bL[bQ]) | |
592 | + | ||
593 | + | func bR (bP,bQ) = if ((bQ >= bM)) | |
594 | + | then bP | |
463 | 595 | else throw("List size exceeds 6") | |
464 | 596 | ||
465 | - | | |
466 | - | } | |
467 | - | makeString( | |
597 | + | bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6) | |
598 | + | } | |
599 | + | makeString(cZ, "_") | |
468 | 600 | } | |
469 | 601 | ||
470 | 602 | ||
471 | - | func | |
472 | - | let | |
473 | - | | |
474 | - | } | |
475 | - | ||
476 | - | ||
477 | - | func | |
478 | - | ||
479 | - | ||
480 | - | func | |
481 | - | func | |
482 | - | let | |
483 | - | ( | |
603 | + | func do (dj,dk,dl) = { | |
604 | + | let di = split(valueOrElse(getString(bj()), "0_0_0_0_0_0"), "_") | |
605 | + | dh(di, dj, dk, dl) | |
606 | + | } | |
607 | + | ||
608 | + | ||
609 | + | func dp (dq) = [(size(split(dq, "A")) - 1), (size(split(dq, "B")) - 1), (size(split(dq, "C")) - 1), (size(split(dq, "D")) - 1), (size(split(dq, "E")) - 1), (size(split(dq, "F")) - 1)] | |
610 | + | ||
611 | + | ||
612 | + | func dr (ds,dj,dt,dk,du) = { | |
613 | + | func bH (bI,dn) = { | |
614 | + | let dv = ((fraction(dt, du, u) * dj[dn]) * dk) | |
615 | + | (bI :+ toString((parseIntValue(ds[dn]) + dv))) | |
484 | 616 | } | |
485 | 617 | ||
486 | - | let | |
487 | - | let | |
488 | - | let | |
489 | - | let | |
490 | - | func | |
491 | - | then | |
492 | - | else | |
493 | - | ||
494 | - | func | |
495 | - | then | |
618 | + | let cZ = { | |
619 | + | let bL = [0, 1, 2, 3, 4, 5] | |
620 | + | let bM = size(bL) | |
621 | + | let bN = nil | |
622 | + | func bO (bP,bQ) = if ((bQ >= bM)) | |
623 | + | then bP | |
624 | + | else bH(bP, bL[bQ]) | |
625 | + | ||
626 | + | func bR (bP,bQ) = if ((bQ >= bM)) | |
627 | + | then bP | |
496 | 628 | else throw("List size exceeds 6") | |
497 | 629 | ||
498 | - | | |
630 | + | bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6) | |
499 | 631 | } | |
500 | - | makeString( | |
501 | - | } | |
502 | - | ||
503 | - | ||
504 | - | func | |
505 | - | func | |
506 | - | let | |
507 | - | $Tuple2(( | |
632 | + | makeString(cZ, "_") | |
633 | + | } | |
634 | + | ||
635 | + | ||
636 | + | func dw (dj,dt,dk,du) = { | |
637 | + | func bH (bI,dn) = { | |
638 | + | let dv = ((fraction(dt, du, u) * dj[dn]) * dk) | |
639 | + | $Tuple2((bI._1 :+ dv), (bI._2 + dv)) | |
508 | 640 | } | |
509 | 641 | ||
510 | - | let | |
511 | - | let | |
512 | - | let | |
513 | - | func | |
514 | - | then | |
515 | - | else | |
516 | - | ||
517 | - | func | |
518 | - | then | |
642 | + | let bL = [0, 1, 2, 3, 4, 5] | |
643 | + | let bM = size(bL) | |
644 | + | let bN = $Tuple2(nil, 0) | |
645 | + | func bO (bP,bQ) = if ((bQ >= bM)) | |
646 | + | then bP | |
647 | + | else bH(bP, bL[bQ]) | |
648 | + | ||
649 | + | func bR (bP,bQ) = if ((bQ >= bM)) | |
650 | + | then bP | |
519 | 651 | else throw("List size exceeds 6") | |
520 | 652 | ||
521 | - | | |
522 | - | } | |
523 | - | ||
524 | - | ||
525 | - | func | |
526 | - | let | |
527 | - | let | |
528 | - | if (( | |
529 | - | then $Tuple2(makeString( | |
530 | - | else if (( | |
653 | + | bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6) | |
654 | + | } | |
655 | + | ||
656 | + | ||
657 | + | func dx (dy,dz,dA,dB) = { | |
658 | + | let dC = dA._1 | |
659 | + | let dD = dA._2 | |
660 | + | if ((dD == 0)) | |
661 | + | then $Tuple2(makeString(dy, "_"), makeString(dz, "_")) | |
662 | + | else if ((dB >= dD)) | |
531 | 663 | then { | |
532 | - | func | |
533 | - | ||
534 | - | let | |
535 | - | let | |
536 | - | let | |
537 | - | let | |
538 | - | func | |
539 | - | then | |
540 | - | else | |
541 | - | ||
542 | - | func | |
543 | - | then | |
664 | + | func dE (bI,dn) = (bI :+ toString((parseIntValue(dy[dn]) + dC[dn]))) | |
665 | + | ||
666 | + | let cZ = { | |
667 | + | let bL = [0, 1, 2, 3, 4, 5] | |
668 | + | let bM = size(bL) | |
669 | + | let bN = nil | |
670 | + | func bO (bP,bQ) = if ((bQ >= bM)) | |
671 | + | then bP | |
672 | + | else dE(bP, bL[bQ]) | |
673 | + | ||
674 | + | func bR (bP,bQ) = if ((bQ >= bM)) | |
675 | + | then bP | |
544 | 676 | else throw("List size exceeds 6") | |
545 | 677 | ||
546 | - | | |
678 | + | bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6) | |
547 | 679 | } | |
548 | - | $Tuple2(makeString( | |
680 | + | $Tuple2(makeString(cZ, "_"), makeString(dz, "_")) | |
549 | 681 | } | |
550 | 682 | else { | |
551 | - | func | |
552 | - | let | |
553 | - | $Tuple2(( | |
683 | + | func dF (bI,dn) = { | |
684 | + | let dG = fraction(dC[dn], dB, dD) | |
685 | + | $Tuple2((bI._1 :+ toString((parseIntValue(dy[dn]) + dG))), (bI._2 :+ toString(((parseIntValue(dz[dn]) + dC[dn]) - dG)))) | |
554 | 686 | } | |
555 | 687 | ||
556 | - | let | |
557 | - | let | |
558 | - | let | |
559 | - | let | |
560 | - | func | |
561 | - | then | |
562 | - | else | |
563 | - | ||
564 | - | func | |
565 | - | then | |
688 | + | let cZ = { | |
689 | + | let bL = [0, 1, 2, 3, 4, 5] | |
690 | + | let bM = size(bL) | |
691 | + | let bN = $Tuple2(nil, nil) | |
692 | + | func bO (bP,bQ) = if ((bQ >= bM)) | |
693 | + | then bP | |
694 | + | else dF(bP, bL[bQ]) | |
695 | + | ||
696 | + | func bR (bP,bQ) = if ((bQ >= bM)) | |
697 | + | then bP | |
566 | 698 | else throw("List size exceeds 6") | |
567 | 699 | ||
568 | - | | |
700 | + | bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6) | |
569 | 701 | } | |
570 | - | $Tuple2(makeString( | |
702 | + | $Tuple2(makeString(cZ._1, "_"), makeString(cZ._2, "_")) | |
571 | 703 | } | |
572 | 704 | } | |
573 | 705 | ||
574 | 706 | ||
575 | - | func | |
576 | - | then | |
577 | - | else -( | |
578 | - | ||
579 | - | ||
580 | - | let | |
581 | - | ||
582 | - | func | |
583 | - | let | |
584 | - | let | |
707 | + | func dH (dI) = if ((dI >= toBigInt(0))) | |
708 | + | then dI | |
709 | + | else -(dI) | |
710 | + | ||
711 | + | ||
712 | + | let dJ = [[6, 9, 14, 15, 16], [5, 8, 13, 14, 15], [1, 4, 9, 10, 15], [1, 6, 7, 15, 19], [4, 7, 8, 13, 18]] | |
713 | + | ||
714 | + | func dK (bw,dL) = { | |
715 | + | let dM = toInt((bw % cp)) | |
716 | + | let dN = if ((dL[0] > dM)) | |
585 | 717 | then "A" | |
586 | - | else if (( | |
718 | + | else if ((dL[1] > dM)) | |
587 | 719 | then "B" | |
588 | - | else if (( | |
720 | + | else if ((dL[2] > dM)) | |
589 | 721 | then "C" | |
590 | - | else if (( | |
722 | + | else if ((dL[3] > dM)) | |
591 | 723 | then "D" | |
592 | - | else if (( | |
724 | + | else if ((dL[4] > dM)) | |
593 | 725 | then "E" | |
594 | 726 | else "F" | |
595 | - | | |
596 | - | } | |
597 | - | ||
598 | - | ||
599 | - | func | |
600 | - | let | |
601 | - | func | |
602 | - | ||
603 | - | let | |
604 | - | let | |
605 | - | let | |
606 | - | let | |
607 | - | func | |
608 | - | then | |
609 | - | else | |
610 | - | ||
611 | - | func | |
612 | - | then | |
727 | + | dN | |
728 | + | } | |
729 | + | ||
730 | + | ||
731 | + | func dO (dP,dQ) = { | |
732 | + | let dR = dJ[dQ] | |
733 | + | func dS (bI,cX) = $Tuple2((((((bI._1 + dK(bI._2, dR)) + dK((bI._2 / cp), dR)) + dK((bI._2 / cq), dR)) + dK((bI._2 / cr), dR)) + dK((bI._2 / cs), dR)), (bI._2 / ct)) | |
734 | + | ||
735 | + | let dT = { | |
736 | + | let bL = [1, 2, 3, 4, 5] | |
737 | + | let bM = size(bL) | |
738 | + | let bN = $Tuple2("", (dP / co)) | |
739 | + | func bO (bP,bQ) = if ((bQ >= bM)) | |
740 | + | then bP | |
741 | + | else dS(bP, bL[bQ]) | |
742 | + | ||
743 | + | func bR (bP,bQ) = if ((bQ >= bM)) | |
744 | + | then bP | |
613 | 745 | else throw("List size exceeds 5") | |
614 | 746 | ||
615 | - | | |
747 | + | bR(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5) | |
616 | 748 | } | |
617 | - | | |
618 | - | } | |
619 | - | ||
620 | - | ||
621 | - | func | |
622 | - | let | |
623 | - | [toString(valueOrElse(parseInt( | |
624 | - | then | |
625 | - | else "0_0_0_0_0_0", if ((size(split( | |
626 | - | then | |
627 | - | else "0_0_0_0_0_0", | |
628 | - | } | |
629 | - | ||
630 | - | ||
631 | - | func | |
632 | - | let | |
633 | - | (( | |
634 | - | } | |
635 | - | ||
636 | - | ||
637 | - | func | |
638 | - | let | |
639 | - | func | |
640 | - | ||
641 | - | func | |
642 | - | let | |
643 | - | let | |
644 | - | let | |
645 | - | $Tuple2(( | |
749 | + | dT._1 | |
750 | + | } | |
751 | + | ||
752 | + | ||
753 | + | func dU (dV) = { | |
754 | + | let dW = split(valueOrElse(getString(dV), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":") | |
755 | + | [toString(valueOrElse(parseInt(dW[ai]), 0)), if ((size(split(dW[aj], "_")) == n)) | |
756 | + | then dW[aj] | |
757 | + | else "0_0_0_0_0_0", if ((size(split(dW[ak], "_")) == n)) | |
758 | + | then dW[ak] | |
759 | + | else "0_0_0_0_0_0", dW[al]] | |
760 | + | } | |
761 | + | ||
762 | + | ||
763 | + | func dX (dY) = { | |
764 | + | let dZ = split(dY, "_") | |
765 | + | ((v * (parseIntValue(dZ[1]) + 1)) * parseIntValue(dZ[0])) | |
766 | + | } | |
767 | + | ||
768 | + | ||
769 | + | func ea (eb) = { | |
770 | + | let ec = eb[ac] | |
771 | + | func ed (bI,bJ) = (bI + parseIntValue(bJ)) | |
772 | + | ||
773 | + | func ee (bI,bJ) = { | |
774 | + | let aD = bI._1 | |
775 | + | let ef = am(aD) | |
776 | + | let eg = (((parseIntValue(bJ) + ef) - 1) / ef) | |
777 | + | $Tuple2((aD + 1), (bI._2 + (eg * i))) | |
646 | 778 | } | |
647 | 779 | ||
648 | - | let | |
649 | - | let | |
650 | - | let | |
651 | - | let | |
652 | - | func | |
653 | - | then | |
654 | - | else | |
655 | - | ||
656 | - | func | |
657 | - | then | |
780 | + | let eh = { | |
781 | + | let bL = split(eb[aa], "_") | |
782 | + | let bM = size(bL) | |
783 | + | let bN = 0 | |
784 | + | func bO (bP,bQ) = if ((bQ >= bM)) | |
785 | + | then bP | |
786 | + | else ed(bP, bL[bQ]) | |
787 | + | ||
788 | + | func bR (bP,bQ) = if ((bQ >= bM)) | |
789 | + | then bP | |
658 | 790 | else throw("List size exceeds 6") | |
659 | 791 | ||
660 | - | | |
792 | + | bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6) | |
661 | 793 | } | |
662 | - | let | |
663 | - | let | |
664 | - | let | |
665 | - | let | |
666 | - | func | |
667 | - | then | |
668 | - | else | |
669 | - | ||
670 | - | func | |
671 | - | then | |
794 | + | let ei = { | |
795 | + | let bL = split(eb[ab], "_") | |
796 | + | let bM = size(bL) | |
797 | + | let bN = 0 | |
798 | + | func bX (bP,bQ) = if ((bQ >= bM)) | |
799 | + | then bP | |
800 | + | else ed(bP, bL[bQ]) | |
801 | + | ||
802 | + | func bY (bP,bQ) = if ((bQ >= bM)) | |
803 | + | then bP | |
672 | 804 | else throw("List size exceeds 6") | |
673 | 805 | ||
674 | - | | |
806 | + | bY(bX(bX(bX(bX(bX(bX(bN, 0), 1), 2), 3), 4), 5), 6) | |
675 | 807 | } | |
676 | - | let | |
808 | + | let ej = if ((ec == "")) | |
677 | 809 | then 0 | |
678 | - | else ( let | |
679 | - | let | |
680 | - | let | |
681 | - | func | |
682 | - | then | |
683 | - | else | |
684 | - | ||
685 | - | func | |
686 | - | then | |
810 | + | else ( let bL = split_4C(ec, "_") | |
811 | + | let bM = size(bL) | |
812 | + | let bN = $Tuple2(0, 0) | |
813 | + | func ek (bP,bQ) = if ((bQ >= bM)) | |
814 | + | then bP | |
815 | + | else ee(bP, bL[bQ]) | |
816 | + | ||
817 | + | func el (bP,bQ) = if ((bQ >= bM)) | |
818 | + | then bP | |
687 | 819 | else throw("List size exceeds 50") | |
688 | 820 | ||
689 | - | | |
690 | - | (( | |
691 | - | } | |
692 | - | ||
693 | - | ||
694 | - | func | |
695 | - | let | |
696 | - | let | |
697 | - | let | |
698 | - | let | |
699 | - | let | |
700 | - | let | |
701 | - | then makeString(["0", toString( | |
702 | - | else { | |
703 | - | let | |
704 | - | let | |
705 | - | let | |
706 | - | then parseIntValue( | |
707 | - | else | |
708 | - | makeString([toString( | |
709 | - | } | |
710 | - | [ | |
711 | - | then | |
712 | - | else "0_0_0_0_0_0", if ((size(split( | |
713 | - | then | |
714 | - | else "0_0_0_0_0_0", | |
715 | - | } | |
716 | - | ||
717 | - | ||
718 | - | func | |
719 | - | let | |
720 | - | let | |
721 | - | (( | |
722 | - | } | |
723 | - | ||
724 | - | ||
725 | - | func | |
726 | - | let | |
727 | - | then ((( | |
728 | - | else -((((-( | |
729 | - | ( | |
730 | - | } | |
731 | - | ||
732 | - | ||
733 | - | func | |
821 | + | el(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(bN, 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))._2 | |
822 | + | ((eh + ei) + ej) | |
823 | + | } | |
824 | + | ||
825 | + | ||
826 | + | func em (en,eo,ep) = { | |
827 | + | let dY = ((toString(eo) + "_") + toString(ep)) | |
828 | + | let eq = dX(dY) | |
829 | + | let er = valueOrElse(getString(en), (dY + ":0_0_0_0_0_0:0_0_0_0_0_0::0")) | |
830 | + | let es = split_4C(er, ":") | |
831 | + | let et = ea(es) | |
832 | + | let eu = if ((5 > size(es))) | |
833 | + | then makeString(["0", toString(et), toString((eq - et)), toString(eq)], "_") | |
834 | + | else { | |
835 | + | let ev = split(es[ad], "_") | |
836 | + | let ew = parseIntValue(ev[ae]) | |
837 | + | let ex = if ((size(ev) > 1)) | |
838 | + | then parseIntValue(ev[af]) | |
839 | + | else et | |
840 | + | makeString([toString(ew), toString(ex), toString(((eq - ew) - ex)), toString(eq)], "_") | |
841 | + | } | |
842 | + | [es[Z], if ((size(split(es[aa], "_")) == n)) | |
843 | + | then es[aa] | |
844 | + | else "0_0_0_0_0_0", if ((size(split(es[ab], "_")) == n)) | |
845 | + | then es[ab] | |
846 | + | else "0_0_0_0_0_0", es[ac], eu] | |
847 | + | } | |
848 | + | ||
849 | + | ||
850 | + | func ey (eb) = { | |
851 | + | let ez = ea(eb) | |
852 | + | let eA = parseIntValue(split(eb[ad], "_")[ae]) | |
853 | + | ((dX(eb[Z]) - ez) - eA) | |
854 | + | } | |
855 | + | ||
856 | + | ||
857 | + | func eB (eC,ef) = { | |
858 | + | let eg = if ((eC >= 0)) | |
859 | + | then (((eC + ef) - 1) / ef) | |
860 | + | else -((((-(eC) + ef) - 1) / ef)) | |
861 | + | (eg * i) | |
862 | + | } | |
863 | + | ||
864 | + | ||
865 | + | func eD (eE,eb,eF) = if ((size(eE) != 3)) | |
734 | 866 | then throw("cargoListStr should contain exactly 2 ':' separators") | |
735 | 867 | else { | |
736 | - | let | |
737 | - | let | |
738 | - | let | |
868 | + | let eG = split(eE[0], "_") | |
869 | + | let eH = split(eE[1], "_") | |
870 | + | let eI = if ((eE[2] == "")) | |
739 | 871 | then nil | |
740 | - | else split( | |
741 | - | if ((size( | |
872 | + | else split(eE[2], "_") | |
873 | + | if ((size(eG) != n)) | |
742 | 874 | then throw("All 6 resources should be passed") | |
743 | - | else if ((size( | |
875 | + | else if ((size(eH) != n)) | |
744 | 876 | then throw("All 6 materials should be passed") | |
745 | 877 | else { | |
746 | - | let | |
747 | - | let | |
748 | - | let | |
749 | - | let | |
878 | + | let dB = ey(eb) | |
879 | + | let eJ = split(eb[aa], "_") | |
880 | + | let eK = split(eb[ab], "_") | |
881 | + | let eL = if ((eb[ac] == "")) | |
750 | 882 | then nil | |
751 | - | else split( | |
752 | - | let | |
753 | - | let | |
754 | - | let | |
883 | + | else split(eb[ac], "_") | |
884 | + | let dz = split(eF[aj], "_") | |
885 | + | let eM = split(eF[ak], "_") | |
886 | + | let eN = if ((eF[al] == "")) | |
755 | 887 | then nil | |
756 | - | else split( | |
757 | - | func | |
758 | - | let | |
759 | - | let | |
760 | - | let | |
761 | - | let | |
762 | - | if (( | |
763 | - | then $Tuple4(( | |
764 | - | else if (( | |
765 | - | then if (( | |
766 | - | then throw((((("Attempt to take " + | |
767 | - | else $Tuple4(( | |
768 | - | else if ((-( | |
769 | - | then throw((((("Attempt to take " + toString(-( | |
770 | - | else $Tuple4(( | |
888 | + | else split(eF[al], "_") | |
889 | + | func eO (bI,bJ) = { | |
890 | + | let dn = bI._1 | |
891 | + | let eP = parseIntValue(bJ) | |
892 | + | let eQ = parseIntValue(eJ[dn]) | |
893 | + | let eR = parseIntValue(dz[dn]) | |
894 | + | if ((eP == 0)) | |
895 | + | then $Tuple4((dn + 1), (bI._2 :+ eJ[dn]), (bI._3 :+ dz[dn]), bI._4) | |
896 | + | else if ((eP > 0)) | |
897 | + | then if ((eP > eR)) | |
898 | + | then throw((((("Attempt to take " + bJ) + " from backpack, but only ") + toString(eR)) + " available")) | |
899 | + | else $Tuple4((dn + 1), (bI._2 :+ toString((eQ + eP))), (bI._3 :+ toString((eR - eP))), (bI._4 + eP)) | |
900 | + | else if ((-(eP) > eQ)) | |
901 | + | then throw((((("Attempt to take " + toString(-(eP))) + " from warehouse, but only ") + toString(eQ)) + " available")) | |
902 | + | else $Tuple4((dn + 1), (bI._2 :+ toString((eQ + eP))), (bI._3 :+ toString((eR - eP))), (bI._4 + eP)) | |
771 | 903 | } | |
772 | 904 | ||
773 | - | let | |
774 | - | let | |
775 | - | let | |
776 | - | let | |
777 | - | func | |
778 | - | then | |
779 | - | else | |
780 | - | ||
781 | - | func | |
782 | - | then | |
905 | + | let cZ = { | |
906 | + | let bL = eG | |
907 | + | let bM = size(bL) | |
908 | + | let bN = $Tuple4(0, nil, nil, 0) | |
909 | + | func bO (bP,bQ) = if ((bQ >= bM)) | |
910 | + | then bP | |
911 | + | else eO(bP, bL[bQ]) | |
912 | + | ||
913 | + | func bR (bP,bQ) = if ((bQ >= bM)) | |
914 | + | then bP | |
783 | 915 | else throw("List size exceeds 6") | |
784 | 916 | ||
785 | - | | |
917 | + | bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6) | |
786 | 918 | } | |
787 | - | func | |
788 | - | let | |
789 | - | let | |
790 | - | let | |
791 | - | let | |
792 | - | if (( | |
793 | - | then $Tuple4(( | |
794 | - | else if (( | |
795 | - | then if (( | |
796 | - | then throw((((("Attempt to take " + | |
797 | - | else $Tuple4(( | |
798 | - | else if ((-( | |
799 | - | then throw((((("Attempt to take " + toString(-( | |
800 | - | else $Tuple4(( | |
919 | + | func eS (bI,bJ) = { | |
920 | + | let dn = bI._1 | |
921 | + | let eP = parseIntValue(bJ) | |
922 | + | let eT = parseIntValue(eK[dn]) | |
923 | + | let eU = parseIntValue(eM[dn]) | |
924 | + | if ((eP == 0)) | |
925 | + | then $Tuple4((dn + 1), (bI._2 :+ eK[dn]), (bI._3 :+ eM[dn]), bI._4) | |
926 | + | else if ((eP > 0)) | |
927 | + | then if ((eP > eU)) | |
928 | + | then throw((((("Attempt to take " + bJ) + " from backpack, but only ") + toString(eU)) + " available")) | |
929 | + | else $Tuple4((dn + 1), (bI._2 :+ toString((eT + eP))), (bI._3 :+ toString((eU - eP))), (bI._4 + eP)) | |
930 | + | else if ((-(eP) > eT)) | |
931 | + | then throw((((("Attempt to take " + toString(-(eP))) + " from warehouse, but only ") + toString(eT)) + " available")) | |
932 | + | else $Tuple4((dn + 1), (bI._2 :+ toString((eT + eP))), (bI._3 :+ toString((eU - eP))), (bI._4 + eP)) | |
801 | 933 | } | |
802 | 934 | ||
803 | - | let | |
804 | - | let | |
805 | - | let | |
806 | - | let | |
807 | - | func | |
808 | - | then | |
809 | - | else | |
810 | - | ||
811 | - | func | |
812 | - | then | |
935 | + | let eV = { | |
936 | + | let bL = eH | |
937 | + | let bM = size(bL) | |
938 | + | let bN = $Tuple4(0, nil, nil, cZ._4) | |
939 | + | func bX (bP,bQ) = if ((bQ >= bM)) | |
940 | + | then bP | |
941 | + | else eS(bP, bL[bQ]) | |
942 | + | ||
943 | + | func bY (bP,bQ) = if ((bQ >= bM)) | |
944 | + | then bP | |
813 | 945 | else throw("List size exceeds 6") | |
814 | 946 | ||
815 | - | | |
947 | + | bY(bX(bX(bX(bX(bX(bX(bN, 0), 1), 2), 3), 4), 5), 6) | |
816 | 948 | } | |
817 | - | func | |
818 | - | let | |
819 | - | let | |
820 | - | let | |
821 | - | let | |
822 | - | then parseIntValue( | |
949 | + | func eW (bI,bJ) = { | |
950 | + | let dn = bI._1 | |
951 | + | let ef = am(dn) | |
952 | + | let eP = parseIntValue(bJ) | |
953 | + | let eX = if ((size(eL) > dn)) | |
954 | + | then parseIntValue(eL[dn]) | |
823 | 955 | else 0 | |
824 | - | let | |
825 | - | then parseIntValue( | |
956 | + | let eY = if ((size(eN) > dn)) | |
957 | + | then parseIntValue(eN[dn]) | |
826 | 958 | else 0 | |
827 | - | if (( | |
828 | - | then $Tuple4(( | |
829 | - | else if (( | |
830 | - | then if (( | |
831 | - | then throw((((("Attempt to take " + | |
959 | + | if ((eP == 0)) | |
960 | + | then $Tuple4((dn + 1), (bI._2 :+ toString(eX)), (bI._3 :+ toString(eY)), bI._4) | |
961 | + | else if ((eP > 0)) | |
962 | + | then if ((eP > eY)) | |
963 | + | then throw((((("Attempt to take " + bJ) + " from backpack, but only ") + toString(eY)) + " available")) | |
832 | 964 | else { | |
833 | - | let | |
834 | - | $Tuple4(( | |
965 | + | let eZ = (eB((eX + eP), ef) - eB(eX, ef)) | |
966 | + | $Tuple4((dn + 1), (bI._2 :+ toString((eX + eP))), (bI._3 :+ toString((eY - eP))), (bI._4 + eZ)) | |
835 | 967 | } | |
836 | - | else if ((-( | |
837 | - | then throw((((("Attempt to take " + toString(-( | |
968 | + | else if ((-(eP) > eX)) | |
969 | + | then throw((((("Attempt to take " + toString(-(eP))) + " from warehouse, but only ") + toString(eX)) + " available")) | |
838 | 970 | else { | |
839 | - | let | |
840 | - | $Tuple4(( | |
971 | + | let eZ = (eB((eX + eP), ef) - eB(eX, ef)) | |
972 | + | $Tuple4((dn + 1), (bI._2 :+ toString((eX + eP))), (bI._3 :+ toString((eY - eP))), (bI._4 + eZ)) | |
841 | 973 | } | |
842 | 974 | } | |
843 | 975 | ||
844 | - | let | |
976 | + | let dW = if ((size(eI) != 0)) | |
845 | 977 | then { | |
846 | - | let | |
847 | - | let | |
848 | - | let | |
849 | - | func | |
850 | - | then | |
851 | - | else | |
852 | - | ||
853 | - | func | |
854 | - | then | |
978 | + | let bL = eI | |
979 | + | let bM = size(bL) | |
980 | + | let bN = $Tuple4(0, nil, nil, eV._4) | |
981 | + | func ek (bP,bQ) = if ((bQ >= bM)) | |
982 | + | then bP | |
983 | + | else eW(bP, bL[bQ]) | |
984 | + | ||
985 | + | func el (bP,bQ) = if ((bQ >= bM)) | |
986 | + | then bP | |
855 | 987 | else throw("List size exceeds 50") | |
856 | 988 | ||
857 | - | | |
989 | + | el(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(bN, 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) | |
858 | 990 | } | |
859 | - | else $Tuple4(0, | |
860 | - | let | |
861 | - | if (( | |
862 | - | then throw((((("Attempt to put total " + toString( | |
863 | - | else $Tuple7(makeString( | |
991 | + | else $Tuple4(0, eL, eN, eV._4) | |
992 | + | let fa = dW._4 | |
993 | + | if ((fa > dB)) | |
994 | + | then throw((((("Attempt to put total " + toString(fa)) + " stuff, but only ") + toString(dB)) + " warehouse space left")) | |
995 | + | else $Tuple7(makeString(cZ._2, "_"), makeString(eV._2, "_"), makeString(dW._2, "_"), makeString(cZ._3, "_"), makeString(eV._3, "_"), makeString(dW._3, "_"), fa) | |
864 | 996 | } | |
865 | 997 | } | |
866 | 998 | ||
867 | 999 | ||
868 | - | func | |
869 | - | let | |
870 | - | let | |
871 | - | let | |
872 | - | let | |
873 | - | let | |
874 | - | let | |
875 | - | let | |
876 | - | let | |
877 | - | let | |
878 | - | let | |
879 | - | $Tuple2([IntegerEntry( | |
880 | - | } | |
881 | - | ||
882 | - | ||
883 | - | func | |
1000 | + | func fb (fc,fd) = { | |
1001 | + | let bm = toString(fc) | |
1002 | + | let fe = dH(toBigInt(fd)) | |
1003 | + | let ff = valueOrElse(getInteger(cv()), (cu + 1)) | |
1004 | + | let cx = toString(ff) | |
1005 | + | let dQ = toInt((fe % co)) | |
1006 | + | let dq = dO(fe, dQ) | |
1007 | + | let fg = F[dQ] | |
1008 | + | let fh = Issue(cQ(cx, "S"), makeString([cx, "S", dq, fg], "_"), 1, 0, false) | |
1009 | + | let aM = calculateAssetId(fh) | |
1010 | + | let fi = toBase58String(aM) | |
1011 | + | $Tuple2([IntegerEntry(cv(), (ff + 1)), fh, StringEntry(cw(cx), fi), StringEntry(aL(fi), bm), StringEntry(cC(cx), bm), IntegerEntry(aP(fi), 0), IntegerEntry(cA(fi, bm), 0), ScriptTransfer(fc, 1, aM)], $Tuple2(fi, fg)) | |
1012 | + | } | |
1013 | + | ||
1014 | + | ||
1015 | + | func fj (db,fc,fd,fk,fl) = if (!(sigVerify_8Kb(fk, fl, cg))) | |
884 | 1016 | then throw("signature does not match") | |
885 | 1017 | else { | |
886 | - | let | |
887 | - | let | |
888 | - | let | |
889 | - | let | |
890 | - | let | |
891 | - | let | |
892 | - | let | |
893 | - | let | |
894 | - | if (if (( | |
1018 | + | let dZ = split(toUtf8String(fk), ";") | |
1019 | + | let fm = split(dZ[0], "|") | |
1020 | + | let fn = split(fm[cJ], "_") | |
1021 | + | let fo = parseIntValue(fn[0]) | |
1022 | + | let fp = parseIntValue(fn[1]) | |
1023 | + | let fq = split(dZ[1], ":") | |
1024 | + | let fr = fq[0] | |
1025 | + | let fs = parseIntValue(fm[cO]) | |
1026 | + | if (if ((fs > (lastBlock.timestamp + ci))) | |
895 | 1027 | then true | |
896 | - | else ((lastBlock.timestamp - | |
1028 | + | else ((lastBlock.timestamp - ci) > fs)) | |
897 | 1029 | then throw("signature outdated") | |
898 | 1030 | else { | |
899 | - | let | |
900 | - | let | |
901 | - | let | |
902 | - | if (( | |
903 | - | then throw(((("Tx ids don't match! In state: " + | |
1031 | + | let ft = fq[1] | |
1032 | + | let bm = toString(fc) | |
1033 | + | let fu = valueOrElse(getString(aJ(bm)), "") | |
1034 | + | if ((fu != ft)) | |
1035 | + | then throw(((("Tx ids don't match! In state: " + fu) + ", in msg: ") + ft)) | |
904 | 1036 | else { | |
905 | - | let | |
906 | - | let | |
907 | - | let | |
908 | - | if (( | |
909 | - | then throw(((("oldHealth=" + toString(valueOrElse(getInteger( | |
910 | - | else if ((0 >= | |
1037 | + | let bg = valueOrErrorMessage(getString(be(bm)), "You don't have a duck staked") | |
1038 | + | let fv = bi(bg) | |
1039 | + | let fw = valueOrElse(getInteger(fv), 100) | |
1040 | + | if ((fw != fo)) | |
1041 | + | then throw(((("oldHealth=" + toString(valueOrElse(getInteger(fv), 100))) + " from state does not match one from flight log=") + toString(fo))) | |
1042 | + | else if ((0 >= fo)) | |
911 | 1043 | then throw("You can't fly with zero health") | |
912 | - | else if ((0 >= | |
913 | - | then $Tuple3(((if (!( | |
914 | - | then [ScriptTransfer( | |
915 | - | else nil) :+ IntegerEntry( | |
1044 | + | else if ((0 >= fp)) | |
1045 | + | then $Tuple3(((if (!(db)) | |
1046 | + | then [ScriptTransfer(fc, cn, b)] | |
1047 | + | else nil) :+ IntegerEntry(fv, 0)), "", 0) | |
916 | 1048 | else { | |
917 | - | let | |
918 | - | then | |
1049 | + | let fx = if ((size(fm) > cP)) | |
1050 | + | then fm[cP] | |
919 | 1051 | else "" | |
920 | - | let | |
921 | - | then | |
1052 | + | let fy = if ((fx == "$")) | |
1053 | + | then bv(invoke(aE, "sendUsdtPrize", [bm], nil)) | |
922 | 1054 | else 0 | |
923 | - | let | |
924 | - | let | |
925 | - | let | |
926 | - | let | |
927 | - | let | |
928 | - | let | |
929 | - | $Tuple3(((( | |
1055 | + | let dV = bf(bg) | |
1056 | + | let eF = dU(dV) | |
1057 | + | let fz = split(eF[ak], "_") | |
1058 | + | let fA = makeString(da(db, fz, cm), "_") | |
1059 | + | let fB = fb(fc, fd) | |
1060 | + | let fi = fB._2._1 | |
1061 | + | $Tuple3((((fB._1 :+ StringEntry(bh(bg), makeString([fB._2._2, "L", fi], "_"))) :+ IntegerEntry(fv, fp)) :+ StringEntry(dV, makeString([eF[ai], eF[aj], fA, eF[al]], ":"))), fi, fy) | |
930 | 1062 | } | |
931 | 1063 | } | |
932 | 1064 | } | |
933 | 1065 | } | |
934 | 1066 | ||
935 | 1067 | ||
936 | - | func | |
937 | - | let | |
938 | - | let | |
939 | - | let | |
940 | - | let | |
941 | - | (( | |
942 | - | } | |
943 | - | ||
944 | - | ||
945 | - | func | |
946 | - | let | |
947 | - | then $Tuple2( | |
948 | - | else { | |
949 | - | let | |
950 | - | let | |
951 | - | let | |
952 | - | if (( | |
953 | - | then throw((("Duck location type is " + | |
954 | - | else $Tuple2( | |
955 | - | } | |
956 | - | let | |
957 | - | let | |
958 | - | let | |
959 | - | let | |
960 | - | let | |
961 | - | let | |
962 | - | if (( | |
963 | - | then throw(( | |
964 | - | else { | |
965 | - | let | |
966 | - | $Tuple4( | |
967 | - | } | |
968 | - | } | |
969 | - | ||
970 | - | ||
971 | - | func | |
1068 | + | func fC (aW,fD) = { | |
1069 | + | let ep = valueOrElse(getInteger(aP(aW)), 0) | |
1070 | + | let fE = valueOrElse(getInteger(aQ(m, aW)), 0) | |
1071 | + | let fF = (ep / 6) | |
1072 | + | let fG = (ep / 7) | |
1073 | + | ((t + fraction(t, ((ep + fF) + (2 * fG)), 5)) + fraction(t, fE, (fD * 5))) | |
1074 | + | } | |
1075 | + | ||
1076 | + | ||
1077 | + | func fH (aK,fI,fJ) = { | |
1078 | + | let fK = if ((fI == cG)) | |
1079 | + | then $Tuple2(fJ, valueOrElse(getString(be(aK)), "")) | |
1080 | + | else { | |
1081 | + | let bg = valueOrErrorMessage(getString(be(aK)), "You don't have a duck staked") | |
1082 | + | let fL = valueOrElse(getString(bh(bg)), w) | |
1083 | + | let fM = split(value(fL), "_") | |
1084 | + | if ((fM[bq] != "L")) | |
1085 | + | then throw((("Duck location type is " + fM[bq]) + ", but should be L")) | |
1086 | + | else $Tuple2(fM[br], bg) | |
1087 | + | } | |
1088 | + | let aW = fK._1 | |
1089 | + | let fN = fK._2 | |
1090 | + | let bW = value(assetInfo(fromBase58String(aW))) | |
1091 | + | let fO = aO(aW) | |
1092 | + | let fP = valueOrErrorMessage(getInteger(fO), (("Land " + bW.name) + " is not staked")) | |
1093 | + | let fQ = valueOrErrorMessage(getString(aL(aW)), (("NFT " + bW.name) + " is orphaned")) | |
1094 | + | if ((fQ != aK)) | |
1095 | + | then throw((k + " is not yours")) | |
1096 | + | else { | |
1097 | + | let fR = split(bW.description, "_") | |
1098 | + | $Tuple4(fN, aW, fR, fP) | |
1099 | + | } | |
1100 | + | } | |
1101 | + | ||
1102 | + | ||
1103 | + | func fS (aK,eC,fI,fJ) = if ((0 > eC)) | |
972 | 1104 | then throw("Negative amount") | |
973 | 1105 | else { | |
974 | - | let | |
975 | - | let | |
976 | - | let | |
977 | - | let | |
978 | - | if ((0 > | |
979 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
1106 | + | let fT = fH(aK, fI, fJ) | |
1107 | + | let bB = fT._3[W] | |
1108 | + | let dj = dp(fT._3[X]) | |
1109 | + | let dt = (lastBlock.timestamp - fT._4) | |
1110 | + | if ((0 > dt)) | |
1111 | + | then throw(((("Saved timestamp is in future, saved = " + toString(fT._4)) + ", current = ") + toString(lastBlock.timestamp))) | |
980 | 1112 | else { | |
981 | - | let | |
982 | - | let | |
983 | - | let | |
984 | - | if (( | |
985 | - | then throw(((("Not enough resources, available = " + toString( | |
1113 | + | let fD = bA(bB) | |
1114 | + | let fU = fC(fT._2, fD) | |
1115 | + | let fV = fraction(dt, (fU * fD), u) | |
1116 | + | if ((eC > fV)) | |
1117 | + | then throw(((("Not enough resources, available = " + toString(fV)) + ", requested = ") + toString(eC))) | |
986 | 1118 | else { | |
987 | - | let | |
988 | - | let | |
989 | - | let | |
990 | - | let | |
991 | - | let | |
992 | - | let | |
993 | - | let | |
994 | - | let | |
995 | - | let | |
996 | - | if (if (( | |
997 | - | then ( | |
1119 | + | let fW = fraction((fV - eC), u, (fU * fD)) | |
1120 | + | let fX = (lastBlock.timestamp - fW) | |
1121 | + | let eo = (fD / o) | |
1122 | + | let dA = dw(dj, (dt - fW), eo, fU) | |
1123 | + | let en = aV(fT._2) | |
1124 | + | let ep = valueOrElse(getInteger(aP(fT._2)), 0) | |
1125 | + | let eb = em(en, eo, ep) | |
1126 | + | let ev = split(eb[ad], "_") | |
1127 | + | let dB = parseIntValue(ev[ag]) | |
1128 | + | if (if ((fI == cG)) | |
1129 | + | then (eC > dB) | |
998 | 1130 | else false) | |
999 | - | then throw((("Only " + toString( | |
1131 | + | then throw((("Only " + toString(dB)) + " space left in warehouse")) | |
1000 | 1132 | else { | |
1001 | - | let | |
1002 | - | let | |
1003 | - | let | |
1004 | - | let | |
1005 | - | let | |
1006 | - | then $Tuple4( | |
1007 | - | else if (( | |
1008 | - | then $Tuple4( | |
1133 | + | let dV = bf(fT._1) | |
1134 | + | let eF = dU(dV) | |
1135 | + | let dz = split(eF[aj], "_") | |
1136 | + | let dy = split(eb[aa], "_") | |
1137 | + | let fY = if ((fI == cG)) | |
1138 | + | then $Tuple4(dr(dy, dj, (dt - fW), eo, fU), eF[aj], (parseIntValue(ev[af]) + dA._2), (parseIntValue(ev[ag]) - dA._2)) | |
1139 | + | else if ((fI == cH)) | |
1140 | + | then $Tuple4(eb[aa], dr(dz, dj, (dt - fW), eo, fU), parseIntValue(ev[af]), parseIntValue(ev[ag])) | |
1009 | 1141 | else { | |
1010 | - | let | |
1011 | - | let | |
1012 | - | $Tuple4( | |
1142 | + | let fZ = dx(dy, dz, dA, dB) | |
1143 | + | let ga = min([parseIntValue(ev[ag]), dA._2]) | |
1144 | + | $Tuple4(fZ._1, fZ._2, (parseIntValue(ev[af]) + ga), (parseIntValue(ev[ag]) - ga)) | |
1013 | 1145 | } | |
1014 | - | let | |
1015 | - | let | |
1016 | - | let | |
1017 | - | let | |
1018 | - | $Tuple5([IntegerEntry( | |
1146 | + | let gb = fY._1 | |
1147 | + | let gc = fY._2 | |
1148 | + | let gd = fY._3 | |
1149 | + | let ge = fY._4 | |
1150 | + | $Tuple5([IntegerEntry(aO(fT._2), fX), IntegerEntry(aS(k, fT._2, aK), fX)], dV, [eF[ai], gc, eF[ak], eF[al]], en, [eb[Z], gb, eb[ab], eb[ac], makeString([ev[ae], toString(gd), toString(ge), ev[ah]], "_")]) | |
1019 | 1151 | } | |
1020 | 1152 | } | |
1021 | 1153 | } | |
1022 | 1154 | } | |
1023 | 1155 | ||
1024 | 1156 | ||
1025 | - | func | |
1026 | - | let | |
1027 | - | let | |
1028 | - | let | |
1029 | - | | |
1030 | - | } | |
1031 | - | ||
1032 | - | ||
1033 | - | func | |
1034 | - | let | |
1035 | - | let | |
1036 | - | let | |
1037 | - | let | |
1038 | - | let | |
1039 | - | if (( | |
1157 | + | func gf (aK,aW,fD,fI) = { | |
1158 | + | let fO = aO(aW) | |
1159 | + | let fP = value(getInteger(fO)) | |
1160 | + | let fV = (fraction((lastBlock.timestamp - fP), fC(aW, fD), u) * fD) | |
1161 | + | fS(aK, fV, fI, aW) | |
1162 | + | } | |
1163 | + | ||
1164 | + | ||
1165 | + | func gg (db,fc,gh,aW) = { | |
1166 | + | let aK = toString(fc) | |
1167 | + | let fT = fH(aK, cI, aW) | |
1168 | + | let fD = bA(fT._3[W]) | |
1169 | + | let gi = aP(fT._2) | |
1170 | + | let gj = valueOrElse(getInteger(gi), 0) | |
1171 | + | if ((gj >= 3)) | |
1040 | 1172 | then throw("Currently max infrastructure level = 3") | |
1041 | 1173 | else { | |
1042 | - | let | |
1043 | - | let | |
1044 | - | if (if (!( | |
1045 | - | then ( | |
1174 | + | let gk = (gj + 1) | |
1175 | + | let gl = fraction(cl, (fD * gk), o) | |
1176 | + | if (if (!(db)) | |
1177 | + | then (gh != gl) | |
1046 | 1178 | else false) | |
1047 | - | then throw(("Payment attached should be " + toString( | |
1179 | + | then throw(("Payment attached should be " + toString(gl))) | |
1048 | 1180 | else { | |
1049 | - | let | |
1050 | - | let | |
1051 | - | let | |
1052 | - | let | |
1053 | - | let | |
1054 | - | let | |
1055 | - | let | |
1056 | - | let | |
1057 | - | let | |
1058 | - | let | |
1059 | - | let | |
1060 | - | $Tuple2(([IntegerEntry( | |
1181 | + | let dV = bf(fT._1) | |
1182 | + | let eF = dU(dV) | |
1183 | + | let fz = split(eF[ak], "_") | |
1184 | + | let fA = makeString(da(db, fz, fraction(e, (fD * gk), o)), "_") | |
1185 | + | let gm = gf(aK, fT._2, fD, cI) | |
1186 | + | let gn = gm._5 | |
1187 | + | let go = dX(gn[Z]) | |
1188 | + | let gp = makeString([split(gn[Z], "_")[0], toString(gk)], "_") | |
1189 | + | let gq = dX(gp) | |
1190 | + | let ev = split(gn[ad], "_") | |
1191 | + | let gr = makeString([ev[ae], ev[af], toString(((parseIntValue(ev[ag]) + gq) - go)), toString(gq)], "_") | |
1192 | + | $Tuple2(([IntegerEntry(gi, gk), IntegerEntry(cA(fT._2, aK), gk), StringEntry(dV, makeString([eF[ai], gm._3[aj], fA, eF[al]], ":")), StringEntry(gm._4, makeString([gp, gn[aa], gn[ab], gn[ac], gr], ":"))] ++ gm._1), gk) | |
1061 | 1193 | } | |
1062 | 1194 | } | |
1063 | 1195 | } | |
1064 | 1196 | ||
1065 | 1197 | ||
1066 | - | func fD (an,eT) = { | |
1067 | - | let fe = eR(an, bQ, eT) | |
1068 | - | let az = fe._2 | |
1069 | - | let eN = aY(fe._3[D]) | |
1070 | - | let fE = at(k, az) | |
1071 | - | if ((valueOrElse(getInteger(fE), 0) > 0)) | |
1198 | + | func gs (aK) = 0 | |
1199 | + | ||
1200 | + | ||
1201 | + | func gt (aK,fJ) = { | |
1202 | + | let fT = fH(aK, cI, fJ) | |
1203 | + | let aW = fT._2 | |
1204 | + | let fD = bA(fT._3[W]) | |
1205 | + | let gu = aQ(m, aW) | |
1206 | + | if ((valueOrElse(getInteger(gu), 0) > 0)) | |
1072 | 1207 | then throw("Presale artifact is already activated") | |
1073 | - | else if ((parseIntValue( | |
1074 | - | then throw(((( | |
1208 | + | else if ((parseIntValue(fT._3[V]) > cu)) | |
1209 | + | then throw((((k + " ") + aW) + " is not eligible for presale artifact")) | |
1075 | 1210 | else { | |
1076 | - | let | |
1077 | - | (((( | |
1211 | + | let gm = gf(aK, aW, fD, cI) | |
1212 | + | ((((gm._1 :+ IntegerEntry(gu, fD)) :+ IntegerEntry(cB(m, aW, aK), fD)) :+ StringEntry(gm._2, makeString(gm._3, ":"))) :+ StringEntry(gm._4, makeString(gm._5, ":"))) | |
1078 | 1213 | } | |
1079 | 1214 | } | |
1080 | 1215 | ||
1081 | 1216 | ||
1082 | - | func | |
1083 | - | let | |
1084 | - | func | |
1085 | - | let | |
1086 | - | let | |
1087 | - | let | |
1088 | - | let | |
1089 | - | if (( | |
1090 | - | then throw(( | |
1217 | + | func gv (gw,gk,gx,aK,gy,fd,gz) = { | |
1218 | + | let bg = valueOrErrorMessage(getString(be(aK)), "You don't have a duck staked") | |
1219 | + | func gA (bI,aW) = { | |
1220 | + | let bW = value(assetInfo(fromBase58String(aW))) | |
1221 | + | let fO = aO(aW) | |
1222 | + | let fP = valueOrErrorMessage(getInteger(fO), (("NFT " + bW.name) + " is not staked")) | |
1223 | + | let fQ = valueOrErrorMessage(getString(aL(aW)), (("NFT " + bW.name) + " is orphaned")) | |
1224 | + | if ((fQ != aK)) | |
1225 | + | then throw((k + " is not yours")) | |
1091 | 1226 | else { | |
1092 | - | let | |
1093 | - | let | |
1094 | - | if (if (( | |
1095 | - | then ( | |
1227 | + | let fR = split(bW.description, "_") | |
1228 | + | let fg = fR[Y] | |
1229 | + | if (if ((bI._3 != "")) | |
1230 | + | then (bI._3 != fg) | |
1096 | 1231 | else false) | |
1097 | 1232 | then throw("Lands should be on the same continent to merge") | |
1098 | 1233 | else { | |
1099 | - | let | |
1100 | - | let | |
1101 | - | let | |
1102 | - | let | |
1103 | - | let | |
1104 | - | let | |
1105 | - | let | |
1106 | - | let | |
1107 | - | let c = | |
1234 | + | let bB = fR[W] | |
1235 | + | let gB = bI._1 | |
1236 | + | let dn = valueOrErrorMessage(indexOf(gB, bB), "You haven't passed all the lands needed") | |
1237 | + | let gC = (take(gB, dn) + drop(gB, (dn + 1))) | |
1238 | + | let fD = bA(bB) | |
1239 | + | let gD = (bI._2 + valueOrElse(getInteger(aQ(m, aW)), 0)) | |
1240 | + | let ep = valueOrElse(getInteger(aP(aW)), 0) | |
1241 | + | let gE = { | |
1242 | + | let c = bB | |
1108 | 1243 | if (("S" == c)) | |
1109 | 1244 | then 3 | |
1110 | 1245 | else if (("M" == c)) | |
1111 | 1246 | then 4 | |
1112 | 1247 | else if (("L" == c)) | |
1113 | 1248 | then 5 | |
1114 | 1249 | else if (("XL" == c)) | |
1115 | 1250 | then 6 | |
1116 | 1251 | else throw("Only S, M, L, XL can merge") | |
1117 | 1252 | } | |
1118 | - | if (( | |
1253 | + | if ((ep != gE)) | |
1119 | 1254 | then throw("All lands should be maxed to merge") | |
1120 | 1255 | else { | |
1121 | - | let | |
1122 | - | let | |
1123 | - | let | |
1124 | - | if ((0 > | |
1125 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
1256 | + | let cx = fR[V] | |
1257 | + | let dj = dp(fR[X]) | |
1258 | + | let dt = (lastBlock.timestamp - fP) | |
1259 | + | if ((0 > dt)) | |
1260 | + | then throw(((("Saved timestamp is in future, saved = " + toString(fP)) + ", current = ") + toString(lastBlock.timestamp))) | |
1126 | 1261 | else { | |
1127 | - | let | |
1128 | - | let | |
1129 | - | let | |
1130 | - | let | |
1131 | - | let | |
1132 | - | let | |
1133 | - | if (!(isDefined( | |
1134 | - | then throw(("Your staked lands don't contain " + | |
1262 | + | let fU = fC(aW, fD) | |
1263 | + | let eo = (fD / o) | |
1264 | + | let gc = dr(split(bI._4, "_"), dj, dt, eo, fU) | |
1265 | + | let bG = dh(split(bI._6, "_"), dj, eo, -1) | |
1266 | + | let bU = bI._7 | |
1267 | + | let aD = indexOf(bU, aW) | |
1268 | + | if (!(isDefined(aD))) | |
1269 | + | then throw(("Your staked lands don't contain " + aW)) | |
1135 | 1270 | else { | |
1136 | - | let | |
1137 | - | let | |
1138 | - | $Tuple8( | |
1271 | + | let gF = aN(aW) | |
1272 | + | let gG = valueOrElse(getString(gF), "") | |
1273 | + | $Tuple8(gC, gD, fg, gc, (((((((((((((bI._5 :+ DeleteEntry(aO(aW))) :+ DeleteEntry(aS(k, aW, aK))) :+ DeleteEntry(cw(cx))) :+ DeleteEntry(aL(aW))) :+ DeleteEntry(aP(aW))) :+ DeleteEntry(cA(aW, aK))) :+ DeleteEntry(aQ(m, aW))) :+ DeleteEntry(cB(m, aW, aK))) :+ DeleteEntry(cC(cx))) :+ DeleteEntry(aV(aW))) :+ DeleteEntry(gF)) :+ DeleteEntry(cy(gG))) :+ Burn(fromBase58String(aW), 1)), bG, removeByIndex(bU, value(aD)), (bI._8 + fD)) | |
1139 | 1274 | } | |
1140 | 1275 | } | |
1141 | 1276 | } | |
1142 | 1277 | } | |
1143 | 1278 | } | |
1144 | 1279 | } | |
1145 | 1280 | ||
1146 | - | let | |
1147 | - | let | |
1148 | - | let | |
1149 | - | let | |
1150 | - | let | |
1151 | - | let | |
1152 | - | then split_51C(value( | |
1281 | + | let dV = bf(bg) | |
1282 | + | let eF = dU(dV) | |
1283 | + | let gH = valueOrElse(getString(bj()), "0_0_0_0_0_0") | |
1284 | + | let gI = aX(aK) | |
1285 | + | let bT = getString(gI) | |
1286 | + | let gJ = if (isDefined(bT)) | |
1287 | + | then split_51C(value(bT), "_") | |
1153 | 1288 | else nil | |
1154 | - | let | |
1155 | - | let | |
1156 | - | let | |
1157 | - | let | |
1158 | - | func | |
1159 | - | then | |
1160 | - | else | |
1161 | - | ||
1162 | - | func | |
1163 | - | then | |
1289 | + | let cZ = { | |
1290 | + | let bL = gy | |
1291 | + | let bM = size(bL) | |
1292 | + | let bN = $Tuple8(gx, 0, "", eF[aj], nil, gH, gJ, 0) | |
1293 | + | func bO (bP,bQ) = if ((bQ >= bM)) | |
1294 | + | then bP | |
1295 | + | else gA(bP, bL[bQ]) | |
1296 | + | ||
1297 | + | func bR (bP,bQ) = if ((bQ >= bM)) | |
1298 | + | then bP | |
1164 | 1299 | else throw("List size exceeds 5") | |
1165 | 1300 | ||
1166 | - | | |
1301 | + | bR(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5) | |
1167 | 1302 | } | |
1168 | - | let | |
1169 | - | let | |
1170 | - | let | |
1171 | - | let | |
1172 | - | let | |
1173 | - | let | |
1174 | - | let | |
1175 | - | let | |
1176 | - | let | |
1177 | - | let | |
1178 | - | let | |
1179 | - | $Tuple2(((((((((((((((( | |
1180 | - | then StringEntry( | |
1181 | - | else DeleteEntry( | |
1303 | + | let fg = cZ._3 | |
1304 | + | let dQ = valueOrErrorMessage(indexOf(F, fg), ("Unknown continent: " + fg)) | |
1305 | + | let dq = dO(dH(toBigInt(fd)), dQ) | |
1306 | + | let ff = valueOrElse(getInteger(cv()), (cu + 1)) | |
1307 | + | let gK = toString(ff) | |
1308 | + | let fh = Issue(cQ(gK, gw), makeString([gK, gw, dq, fg], "_"), 1, 0, false) | |
1309 | + | let aM = calculateAssetId(fh) | |
1310 | + | let gL = toBase58String(aM) | |
1311 | + | let fA = makeString(da((gz > 0), split(eF[ak], "_"), gz), "_") | |
1312 | + | let gM = aY(aK) | |
1313 | + | let gN = valueOrElse(getInteger(gM), 0) | |
1314 | + | $Tuple2((((((((((((((((cZ._5 :+ (if ((size(cZ._7) > 0)) | |
1315 | + | then StringEntry(gI, makeString_11C(cZ._7, "_")) | |
1316 | + | else DeleteEntry(gI))) :+ IntegerEntry(gM, if ((cZ._8 > gN)) | |
1182 | 1317 | then 0 | |
1183 | - | else ( | |
1184 | - | } | |
1185 | - | ||
1186 | - | ||
1187 | - | func | |
1188 | - | ||
1189 | - | ||
1190 | - | func | |
1191 | - | let | |
1192 | - | if (if (!( | |
1193 | - | then ( | |
1318 | + | else (gN - cZ._8))) :+ IntegerEntry(cv(), (ff + 1))) :+ fh) :+ StringEntry(cw(gK), gL)) :+ StringEntry(aL(gL), aK)) :+ StringEntry(cC(gK), aK)) :+ IntegerEntry(aQ(m, gL), cZ._2)) :+ IntegerEntry(cB(m, gL, aK), cZ._2)) :+ IntegerEntry(aP(gL), gk)) :+ IntegerEntry(cA(gL, aK), gk)) :+ StringEntry(dV, makeString([eF[ai], cZ._4, fA, eF[al]], ":"))) :+ StringEntry(bj(), cZ._6)) :+ StringEntry(bh(bg), makeString([fg, "L", gL], "_"))) :+ ScriptTransfer(addressFromStringValue(aK), 1, aM)), gL) | |
1319 | + | } | |
1320 | + | ||
1321 | + | ||
1322 | + | func gO (aK,gy,fd) = gv("M", 3, "SSSS", aK, gy, fd, 0) | |
1323 | + | ||
1324 | + | ||
1325 | + | func gP (aK,gy,fd,db,gh) = { | |
1326 | + | let gl = (cl * 4) | |
1327 | + | if (if (!(db)) | |
1328 | + | then (gh != gl) | |
1194 | 1329 | else false) | |
1195 | - | then throw(("Payment attached should be " + toString( | |
1196 | - | else | |
1197 | - | } | |
1198 | - | ||
1199 | - | ||
1200 | - | func | |
1201 | - | let | |
1202 | - | if (if (!( | |
1203 | - | then ( | |
1330 | + | then throw(("Payment attached should be " + toString(gl))) | |
1331 | + | else gv("L", 4, "SMM", aK, gy, fd, (e * 4)) | |
1332 | + | } | |
1333 | + | ||
1334 | + | ||
1335 | + | func gQ (aK,gy,fd,db,gh) = { | |
1336 | + | let gl = (cl * 47) | |
1337 | + | if (if (!(db)) | |
1338 | + | then (gh != gl) | |
1204 | 1339 | else false) | |
1205 | - | then throw(("Payment attached should be " + toString( | |
1206 | - | else | |
1207 | - | } | |
1208 | - | ||
1209 | - | ||
1210 | - | func | |
1211 | - | let | |
1212 | - | if (if (!( | |
1213 | - | then ( | |
1340 | + | then throw(("Payment attached should be " + toString(gl))) | |
1341 | + | else gv("XL", 5, "SSSML", aK, gy, fd, (e * 47)) | |
1342 | + | } | |
1343 | + | ||
1344 | + | ||
1345 | + | func gR (aK,gy,fd,db,gh) = { | |
1346 | + | let gl = (cl * 54) | |
1347 | + | if (if (!(db)) | |
1348 | + | then (gh != gl) | |
1214 | 1349 | else false) | |
1215 | - | then throw(("Payment attached should be " + toString( | |
1216 | - | else | |
1217 | - | } | |
1218 | - | ||
1219 | - | ||
1220 | - | func | |
1221 | - | let | |
1222 | - | let c = size( | |
1350 | + | then throw(("Payment attached should be " + toString(gl))) | |
1351 | + | else gv("XXL", 6, "LXL", aK, gy, fd, (e * 54)) | |
1352 | + | } | |
1353 | + | ||
1354 | + | ||
1355 | + | func gS (db,aK,gh,gy,fd) = { | |
1356 | + | let gT = { | |
1357 | + | let c = size(gy) | |
1223 | 1358 | if ((4 == c)) | |
1224 | - | then | |
1359 | + | then gO(aK, gy, fd) | |
1225 | 1360 | else if ((3 == c)) | |
1226 | - | then | |
1361 | + | then gP(aK, gy, fd, db, gh) | |
1227 | 1362 | else if ((5 == c)) | |
1228 | - | then | |
1363 | + | then gQ(aK, gy, fd, db, gh) | |
1229 | 1364 | else if ((2 == c)) | |
1230 | - | then | |
1365 | + | then gR(aK, gy, fd, db, gh) | |
1231 | 1366 | else throw("Unknown merge") | |
1232 | 1367 | } | |
1233 | - | | |
1234 | - | } | |
1235 | - | ||
1236 | - | ||
1237 | - | func | |
1238 | - | then valueOrElse(getBoolean( | |
1368 | + | gT | |
1369 | + | } | |
1370 | + | ||
1371 | + | ||
1372 | + | func gU (dn) = if (if ((dn.originCaller != aE)) | |
1373 | + | then valueOrElse(getBoolean(bk()), false) | |
1239 | 1374 | else false) | |
1240 | 1375 | then throw("Contracts are under maintenance") | |
1241 | - | else StringEntry( | |
1242 | - | ||
1243 | - | ||
1244 | - | @Callable( | |
1245 | - | func constructorV1 ( | |
1376 | + | else StringEntry(aJ(toString(dn.originCaller)), toBase58String(dn.transactionId)) | |
1377 | + | ||
1378 | + | ||
1379 | + | @Callable(dn) | |
1380 | + | func constructorV1 (gV) = if ((dn.caller != this)) | |
1246 | 1381 | then throw("Permission denied") | |
1247 | - | else [StringEntry( | |
1248 | - | ||
1249 | - | ||
1250 | - | ||
1251 | - | @Callable( | |
1252 | - | func setBlocked ( | |
1382 | + | else [StringEntry(ay(), gV)] | |
1383 | + | ||
1384 | + | ||
1385 | + | ||
1386 | + | @Callable(dn) | |
1387 | + | func setBlocked (gW) = if ((dn.caller != this)) | |
1253 | 1388 | then throw("permission denied") | |
1254 | - | else [BooleanEntry( | |
1255 | - | ||
1256 | - | ||
1257 | - | ||
1258 | - | @Callable( | |
1389 | + | else [BooleanEntry(bk(), gW)] | |
1390 | + | ||
1391 | + | ||
1392 | + | ||
1393 | + | @Callable(dn) | |
1259 | 1394 | func stakeLand () = { | |
1260 | - | let | |
1261 | - | if ((size( | |
1395 | + | let gX = gU(dn) | |
1396 | + | if ((size(dn.payments) != 1)) | |
1262 | 1397 | then throw("Exactly one payment required") | |
1263 | 1398 | else { | |
1264 | - | let | |
1265 | - | let | |
1266 | - | let | |
1267 | - | if (( | |
1268 | - | then throw((("NFT " + | |
1399 | + | let gY = value(dn.payments[0]) | |
1400 | + | let aM = value(gY.assetId) | |
1401 | + | let ap = toString(dn.caller) | |
1402 | + | if ((gY.amount != 1)) | |
1403 | + | then throw((("NFT " + k) + " token should be attached as payment")) | |
1269 | 1404 | else { | |
1270 | - | let | |
1271 | - | if (( | |
1405 | + | let bW = value(assetInfo(aM)) | |
1406 | + | if ((bW.issuer != this)) | |
1272 | 1407 | then throw("Unknown issuer of token") | |
1273 | - | else if (!(contains( | |
1274 | - | then throw((("Only NFT " + | |
1408 | + | else if (!(contains(bW.name, k))) | |
1409 | + | then throw((("Only NFT " + k) + " tokens are accepted")) | |
1275 | 1410 | else { | |
1276 | - | let | |
1277 | - | let | |
1278 | - | then dropRight( | |
1279 | - | else if (contains( | |
1280 | - | then dropRight( | |
1281 | - | else dropRight( | |
1282 | - | if (!(isDefined(parseInt( | |
1283 | - | then throw(("Cannot parse land number from " + | |
1411 | + | let gZ = drop(bW.name, 4) | |
1412 | + | let cx = if (contains(gZ, "XXL")) | |
1413 | + | then dropRight(gZ, 3) | |
1414 | + | else if (contains(gZ, "XL")) | |
1415 | + | then dropRight(gZ, 2) | |
1416 | + | else dropRight(gZ, 1) | |
1417 | + | if (!(isDefined(parseInt(cx)))) | |
1418 | + | then throw(("Cannot parse land number from " + bW.name)) | |
1284 | 1419 | else { | |
1285 | - | let | |
1286 | - | let | |
1287 | - | if (isDefined(getInteger( | |
1288 | - | then throw((("NFT " + | |
1420 | + | let aW = toBase58String(aM) | |
1421 | + | let fO = aO(aW) | |
1422 | + | if (isDefined(getInteger(fO))) | |
1423 | + | then throw((("NFT " + bW.name) + " is already staked")) | |
1289 | 1424 | else { | |
1290 | - | let | |
1291 | - | let | |
1292 | - | let | |
1293 | - | let | |
1294 | - | let | |
1295 | - | let | |
1296 | - | let | |
1297 | - | let | |
1298 | - | then split_51C(value( | |
1425 | + | let fR = split(bW.description, "_") | |
1426 | + | let dj = dp(fR[X]) | |
1427 | + | let fD = bA(fR[W]) | |
1428 | + | let bG = do(dj, (fD / o), 1) | |
1429 | + | let fE = valueOrElse(getInteger(aQ(m, aW)), 0) | |
1430 | + | let gI = aX(ap) | |
1431 | + | let bT = getString(gI) | |
1432 | + | let bU = if (isDefined(bT)) | |
1433 | + | then split_51C(value(bT), "_") | |
1299 | 1434 | else nil | |
1300 | - | if (containsElement( | |
1301 | - | then throw(("Your staked lands already contain " + | |
1435 | + | if (containsElement(bU, aW)) | |
1436 | + | then throw(("Your staked lands already contain " + aW)) | |
1302 | 1437 | else { | |
1303 | - | let | |
1304 | - | [IntegerEntry( | |
1438 | + | let ep = valueOrElse(getInteger(aP(aW)), 0) | |
1439 | + | [IntegerEntry(fO, lastBlock.timestamp), IntegerEntry(aS(k, aW, ap), lastBlock.timestamp), StringEntry(gI, makeString_11C((bU :+ aW), "_")), IntegerEntry(aY(ap), (valueOrElse(getInteger(aY(ap)), 0) + fD)), StringEntry(aL(aW), ap), StringEntry(cC(cx), ap), IntegerEntry(cB(m, aW, ap), fE), IntegerEntry(cA(aW, ap), ep), StringEntry(bj(), bG), gX] | |
1305 | 1440 | } | |
1306 | 1441 | } | |
1307 | 1442 | } | |
1308 | 1443 | } | |
1309 | 1444 | } | |
1310 | 1445 | } | |
1311 | 1446 | } | |
1312 | 1447 | ||
1313 | 1448 | ||
1314 | 1449 | ||
1315 | - | @Callable( | |
1316 | - | func unstakeLand ( | |
1317 | - | let | |
1318 | - | if ((size( | |
1450 | + | @Callable(dn) | |
1451 | + | func unstakeLand (fJ) = { | |
1452 | + | let gX = gU(dn) | |
1453 | + | if ((size(dn.payments) != 0)) | |
1319 | 1454 | then throw("No payments required") | |
1320 | 1455 | else { | |
1321 | - | let | |
1322 | - | let | |
1323 | - | let | |
1324 | - | let | |
1325 | - | let | |
1326 | - | let | |
1327 | - | let | |
1328 | - | let | |
1329 | - | let | |
1330 | - | let | |
1331 | - | if (!(isDefined( | |
1332 | - | then throw(("Your staked lands don't contain " + | |
1456 | + | let aK = toString(dn.caller) | |
1457 | + | let fT = fH(aK, cH, fJ) | |
1458 | + | let aW = fT._2 | |
1459 | + | let gI = aX(aK) | |
1460 | + | let dj = dp(fT._3[X]) | |
1461 | + | let fD = bA(fT._3[W]) | |
1462 | + | let bG = do(dj, (fD / o), -1) | |
1463 | + | let gm = gf(aK, aW, fD, cH) | |
1464 | + | let bU = split_51C(valueOrElse(getString(gI), ""), "_") | |
1465 | + | let aD = indexOf(bU, aW) | |
1466 | + | if (!(isDefined(aD))) | |
1467 | + | then throw(("Your staked lands don't contain " + aW)) | |
1333 | 1468 | else { | |
1334 | - | let | |
1335 | - | let | |
1336 | - | if (( | |
1337 | - | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString( | |
1469 | + | let dT = value(blockInfoByHeight(height)).timestamp | |
1470 | + | let ha = valueOrElse(getInteger(aH, bl(aK)), 0) | |
1471 | + | if ((ha >= dT)) | |
1472 | + | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(ha))) | |
1338 | 1473 | else { | |
1339 | - | let | |
1340 | - | let | |
1341 | - | [ScriptTransfer( | |
1342 | - | then StringEntry( | |
1343 | - | else DeleteEntry( | |
1474 | + | let gM = aY(aK) | |
1475 | + | let gN = valueOrElse(getInteger(gM), 0) | |
1476 | + | [ScriptTransfer(dn.caller, 1, fromBase58String(aW)), DeleteEntry(aO(aW)), DeleteEntry(aS(k, aW, aK)), StringEntry(bj(), bG), StringEntry(gm._2, makeString(gm._3, ":")), if ((size(bU) > 1)) | |
1477 | + | then StringEntry(gI, makeString_11C(removeByIndex(bU, value(aD)), "_")) | |
1478 | + | else DeleteEntry(gI), IntegerEntry(gM, if ((fD > gN)) | |
1344 | 1479 | then 0 | |
1345 | - | else ( | |
1480 | + | else (gN - fD)), gX] | |
1346 | 1481 | } | |
1347 | 1482 | } | |
1348 | 1483 | } | |
1349 | 1484 | } | |
1350 | 1485 | ||
1351 | 1486 | ||
1352 | 1487 | ||
1353 | - | @Callable( | |
1488 | + | @Callable(dn) | |
1354 | 1489 | func stakeDuck () = { | |
1355 | - | let | |
1356 | - | if ((size( | |
1490 | + | let gX = gU(dn) | |
1491 | + | if ((size(dn.payments) != 1)) | |
1357 | 1492 | then throw("Exactly one payment required") | |
1358 | 1493 | else { | |
1359 | - | let | |
1360 | - | let | |
1361 | - | let | |
1362 | - | if (( | |
1363 | - | then throw((("NFT " + | |
1494 | + | let gY = value(dn.payments[0]) | |
1495 | + | let aM = value(gY.assetId) | |
1496 | + | let ap = toString(dn.caller) | |
1497 | + | if ((gY.amount != 1)) | |
1498 | + | then throw((("NFT " + l) + " token should be attached as payment")) | |
1364 | 1499 | else { | |
1365 | - | let | |
1366 | - | if (if (( | |
1367 | - | then ( | |
1500 | + | let bW = value(assetInfo(aM)) | |
1501 | + | if (if ((bW.issuer != ce)) | |
1502 | + | then (bW.issuer != cf) | |
1368 | 1503 | else false) | |
1369 | - | then throw((("Unknown issuer of " + | |
1370 | - | else if (!(contains( | |
1371 | - | then throw((("Only NFT " + | |
1504 | + | then throw((("Unknown issuer of " + l) + " token")) | |
1505 | + | else if (!(contains(bW.name, l))) | |
1506 | + | then throw((("Only NFT " + l) + " tokens are accepted")) | |
1372 | 1507 | else { | |
1373 | - | let | |
1374 | - | let | |
1375 | - | if (isDefined(getInteger( | |
1376 | - | then throw((("NFT " + | |
1377 | - | else if (isDefined(getString( | |
1378 | - | then throw(("You already staked one duck: " + | |
1508 | + | let hb = toBase58String(aM) | |
1509 | + | let fO = aO(hb) | |
1510 | + | if (isDefined(getInteger(fO))) | |
1511 | + | then throw((("NFT " + bW.name) + " is already staked")) | |
1512 | + | else if (isDefined(getString(be(ap)))) | |
1513 | + | then throw(("You already staked one duck: " + bW.name)) | |
1379 | 1514 | else { | |
1380 | - | let | |
1381 | - | let | |
1382 | - | let | |
1383 | - | let | |
1384 | - | ([IntegerEntry( | |
1515 | + | let hc = bh(hb) | |
1516 | + | let hd = getString(hc) | |
1517 | + | let dV = bf(hb) | |
1518 | + | let he = getString(dV) | |
1519 | + | ([IntegerEntry(fO, lastBlock.timestamp), IntegerEntry(aS(l, toBase58String(aM), ap), lastBlock.timestamp), StringEntry(bd(hb), ap), StringEntry(be(ap), hb)] ++ (if (isDefined(hd)) | |
1385 | 1520 | then nil | |
1386 | - | else ([StringEntry( | |
1521 | + | else ([StringEntry(hc, w)] ++ (if (isDefined(he)) | |
1387 | 1522 | then nil | |
1388 | - | else (([StringEntry( | |
1523 | + | else (([StringEntry(dV, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(bi(hb), 100)) :+ gX))))) | |
1389 | 1524 | } | |
1390 | 1525 | } | |
1391 | 1526 | } | |
1392 | 1527 | } | |
1393 | 1528 | } | |
1394 | 1529 | ||
1395 | 1530 | ||
1396 | 1531 | ||
1397 | - | @Callable( | |
1398 | - | func unstakeDuck ( | |
1399 | - | let | |
1400 | - | if ((size( | |
1532 | + | @Callable(dn) | |
1533 | + | func unstakeDuck (hb) = { | |
1534 | + | let gX = gU(dn) | |
1535 | + | if ((size(dn.payments) != 0)) | |
1401 | 1536 | then throw("No payments required") | |
1402 | 1537 | else { | |
1403 | - | let | |
1404 | - | let | |
1405 | - | let | |
1406 | - | let | |
1407 | - | if (!(isDefined(getInteger( | |
1408 | - | then throw((("NFT " + | |
1409 | - | else if (!(isDefined(getString( | |
1410 | - | then throw((("The duck " + | |
1538 | + | let aM = fromBase58String(hb) | |
1539 | + | let ap = toString(dn.caller) | |
1540 | + | let bW = value(assetInfo(aM)) | |
1541 | + | let fO = aO(toBase58String(aM)) | |
1542 | + | if (!(isDefined(getInteger(fO)))) | |
1543 | + | then throw((("NFT " + bW.name) + " is not staked")) | |
1544 | + | else if (!(isDefined(getString(be(ap))))) | |
1545 | + | then throw((("The duck " + bW.name) + " is not staked")) | |
1411 | 1546 | else { | |
1412 | - | let | |
1413 | - | if (( | |
1547 | + | let fQ = valueOrErrorMessage(getString(bd(toBase58String(aM))), (("NFT " + bW.name) + " is orphaned")) | |
1548 | + | if ((fQ != ap)) | |
1414 | 1549 | then throw("Staked NFT is not yours") | |
1415 | 1550 | else { | |
1416 | - | let | |
1417 | - | let | |
1418 | - | if ((100 > | |
1551 | + | let fv = bi(hb) | |
1552 | + | let hf = valueOrElse(getInteger(fv), 100) | |
1553 | + | if ((100 > hf)) | |
1419 | 1554 | then throw("Please heal your duck before unstaking") | |
1420 | - | else [ScriptTransfer( | |
1555 | + | else [ScriptTransfer(dn.caller, 1, aM), DeleteEntry(fO), DeleteEntry(fv), DeleteEntry(bh(hb)), DeleteEntry(bd(hb)), DeleteEntry(aS(l, hb, ap)), DeleteEntry(be(ap)), gX] | |
1421 | 1556 | } | |
1422 | 1557 | } | |
1423 | 1558 | } | |
1424 | 1559 | } | |
1425 | 1560 | ||
1426 | 1561 | ||
1427 | 1562 | ||
1428 | - | @Callable( | |
1429 | - | func claimRes ( | |
1430 | - | let | |
1431 | - | if ((size( | |
1563 | + | @Callable(dn) | |
1564 | + | func claimRes (eC,hg) = { | |
1565 | + | let gX = gU(dn) | |
1566 | + | if ((size(dn.payments) != 0)) | |
1432 | 1567 | then throw("No payments required") | |
1433 | 1568 | else { | |
1434 | - | let | |
1435 | - | let | |
1436 | - | $Tuple2(((( | |
1437 | - | } | |
1438 | - | } | |
1439 | - | ||
1440 | - | ||
1441 | - | ||
1442 | - | @Callable( | |
1443 | - | func claimResToWH ( | |
1444 | - | let | |
1445 | - | if ((size( | |
1569 | + | let aK = toString(dn.originCaller) | |
1570 | + | let dg = fS(aK, eC, cH, hg) | |
1571 | + | $Tuple2((((dg._1 :+ StringEntry(dg._2, makeString(dg._3, ":"))) :+ StringEntry(dg._4, makeString(dg._5, ":"))) :+ gX), dg._3[aj]) | |
1572 | + | } | |
1573 | + | } | |
1574 | + | ||
1575 | + | ||
1576 | + | ||
1577 | + | @Callable(dn) | |
1578 | + | func claimResToWH (eC,hg) = { | |
1579 | + | let gX = gU(dn) | |
1580 | + | if ((size(dn.payments) != 0)) | |
1446 | 1581 | then throw("No payments required") | |
1447 | 1582 | else { | |
1448 | - | let | |
1449 | - | let | |
1450 | - | $Tuple2(((( | |
1451 | - | } | |
1452 | - | } | |
1453 | - | ||
1454 | - | ||
1455 | - | ||
1456 | - | @Callable( | |
1457 | - | func flight ( | |
1458 | - | let | |
1459 | - | if (!(sigVerify_8Kb( | |
1583 | + | let aK = toString(dn.originCaller) | |
1584 | + | let dg = fS(aK, eC, cG, hg) | |
1585 | + | $Tuple2((((dg._1 :+ StringEntry(dg._2, makeString(dg._3, ":"))) :+ StringEntry(dg._4, makeString(dg._5, ":"))) :+ gX), dg._5[aa]) | |
1586 | + | } | |
1587 | + | } | |
1588 | + | ||
1589 | + | ||
1590 | + | ||
1591 | + | @Callable(dn) | |
1592 | + | func flight (fk,fl) = { | |
1593 | + | let gX = gU(dn) | |
1594 | + | if (!(sigVerify_8Kb(fk, fl, cg))) | |
1460 | 1595 | then throw("signature does not match") | |
1461 | - | else if ((size( | |
1596 | + | else if ((size(dn.payments) != 0)) | |
1462 | 1597 | then throw("No payments required") | |
1463 | 1598 | else { | |
1464 | - | let | |
1465 | - | let | |
1466 | - | let | |
1467 | - | let | |
1468 | - | let | |
1469 | - | let | |
1470 | - | let | |
1471 | - | let | |
1472 | - | if (if (( | |
1599 | + | let dZ = split(toUtf8String(fk), ";") | |
1600 | + | let fm = split(dZ[0], "|") | |
1601 | + | let fn = split(fm[cJ], "_") | |
1602 | + | let fo = parseIntValue(fn[0]) | |
1603 | + | let fp = parseIntValue(fn[1]) | |
1604 | + | let fq = split(dZ[1], ":") | |
1605 | + | let fr = fq[0] | |
1606 | + | let fs = parseIntValue(fm[cO]) | |
1607 | + | if (if ((fs > (lastBlock.timestamp + ci))) | |
1473 | 1608 | then true | |
1474 | - | else ((lastBlock.timestamp - | |
1475 | - | then throw(((("signature outdated: logTime=" + toString( | |
1609 | + | else ((lastBlock.timestamp - ci) > fs)) | |
1610 | + | then throw(((("signature outdated: logTime=" + toString(fs)) + ", bcTime=") + toString(lastBlock.timestamp))) | |
1476 | 1611 | else { | |
1477 | - | let | |
1478 | - | let | |
1479 | - | if (( | |
1480 | - | then throw(((("Tx ids don't match! In state: " + | |
1612 | + | let ft = fq[1] | |
1613 | + | let fu = valueOrElse(getString(aJ(toString(dn.originCaller))), "") | |
1614 | + | if ((fu != ft)) | |
1615 | + | then throw(((("Tx ids don't match! In state: " + fu) + ", in msg: ") + ft)) | |
1481 | 1616 | else { | |
1482 | - | let | |
1483 | - | let | |
1484 | - | let | |
1485 | - | let | |
1486 | - | if (( | |
1487 | - | then throw(((("oldHealth=" + toString(valueOrElse(getInteger( | |
1488 | - | else if ((0 >= | |
1617 | + | let bm = toString(dn.caller) | |
1618 | + | let bg = valueOrErrorMessage(getString(be(bm)), "You don't have a duck staked") | |
1619 | + | let fv = bi(bg) | |
1620 | + | let fw = valueOrElse(getInteger(fv), 100) | |
1621 | + | if ((fw != fo)) | |
1622 | + | then throw(((("oldHealth=" + toString(valueOrElse(getInteger(fv), 100))) + " from state does not match one from flight log=") + toString(fo))) | |
1623 | + | else if ((0 >= fo)) | |
1489 | 1624 | then throw("You can't fly with zero health") | |
1490 | 1625 | else { | |
1491 | - | let | |
1492 | - | let | |
1493 | - | if (( | |
1626 | + | let hc = bh(bg) | |
1627 | + | let fL = valueOrElse(getString(hc), w) | |
1628 | + | if ((fr == fL)) | |
1494 | 1629 | then throw("You can't fly to the same location") | |
1495 | 1630 | else { | |
1496 | - | let | |
1497 | - | then | |
1631 | + | let fx = if ((size(fm) > cP)) | |
1632 | + | then fm[cP] | |
1498 | 1633 | else "" | |
1499 | - | let | |
1500 | - | then ( | |
1634 | + | let fy = if (if ((fp > 0)) | |
1635 | + | then (fx == "$") | |
1501 | 1636 | else false) | |
1502 | - | then | |
1637 | + | then bv(invoke(aE, "sendUsdtPrize", [bm], nil)) | |
1503 | 1638 | else 0 | |
1504 | - | $Tuple2([StringEntry( | |
1505 | - | then | |
1506 | - | else | |
1639 | + | $Tuple2([StringEntry(hc, if ((fp > 0)) | |
1640 | + | then fr | |
1641 | + | else fL), IntegerEntry(fv, fp), gX], fy) | |
1507 | 1642 | } | |
1508 | 1643 | } | |
1509 | 1644 | } | |
1510 | 1645 | } | |
1511 | 1646 | } | |
1512 | 1647 | } | |
1513 | 1648 | ||
1514 | 1649 | ||
1515 | 1650 | ||
1516 | - | @Callable( | |
1517 | - | func heal ( | |
1518 | - | let | |
1519 | - | if (if (if ((0 > | |
1651 | + | @Callable(dn) | |
1652 | + | func heal (hh,hi,hj) = { | |
1653 | + | let gX = gU(dn) | |
1654 | + | if (if (if ((0 > hh)) | |
1520 | 1655 | then true | |
1521 | - | else (0 > | |
1656 | + | else (0 > hi)) | |
1522 | 1657 | then true | |
1523 | - | else (0 > | |
1658 | + | else (0 > hj)) | |
1524 | 1659 | then throw("Quantity cannot be negative") | |
1525 | 1660 | else { | |
1526 | - | let | |
1527 | - | let | |
1528 | - | let | |
1529 | - | let | |
1530 | - | if (( | |
1531 | - | then throw((("HP should be < " + toString( | |
1661 | + | let bg = valueOrErrorMessage(getString(be(toString(dn.caller))), "You don't have a duck staked") | |
1662 | + | let hk = [hh, hi, hj] | |
1663 | + | let fv = bi(bg) | |
1664 | + | let hl = valueOrElse(getInteger(fv), 100) | |
1665 | + | if ((hl >= B)) | |
1666 | + | then throw((("HP should be < " + toString(B)) + " to heal")) | |
1532 | 1667 | else { | |
1533 | - | let | |
1534 | - | let | |
1535 | - | let | |
1668 | + | let dV = bf(bg) | |
1669 | + | let eF = dU(dV) | |
1670 | + | let hm = if ((eF[al] == "")) | |
1536 | 1671 | then nil | |
1537 | - | else split( | |
1538 | - | func | |
1539 | - | let | |
1540 | - | let | |
1541 | - | then parseIntValue( | |
1672 | + | else split(eF[al], "_") | |
1673 | + | func hn (bI,ho) = { | |
1674 | + | let bw = bI._2 | |
1675 | + | let dI = if ((size(hm) > bw)) | |
1676 | + | then parseIntValue(hm[bw]) | |
1542 | 1677 | else 0 | |
1543 | - | if ((3 > | |
1678 | + | if ((3 > bw)) | |
1544 | 1679 | then { | |
1545 | - | let | |
1546 | - | if (( | |
1547 | - | then throw(((("You have only " + toString( | |
1548 | - | else $Tuple3(( | |
1680 | + | let hp = hk[bw] | |
1681 | + | if ((hp > dI)) | |
1682 | + | then throw(((("You have only " + toString(dI)) + " of ") + E[bw])) | |
1683 | + | else $Tuple3((bI._1 :+ toString((dI - hp))), (bw + 1), (bI._3 + (ch[bw] * hp))) | |
1549 | 1684 | } | |
1550 | - | else $Tuple3(( | |
1685 | + | else $Tuple3((bI._1 :+ toString(dI)), (bw + 1), bI._3) | |
1551 | 1686 | } | |
1552 | 1687 | ||
1553 | - | let | |
1554 | - | let | |
1555 | - | let | |
1556 | - | let | |
1557 | - | func | |
1558 | - | then | |
1559 | - | else | |
1560 | - | ||
1561 | - | func | |
1562 | - | then | |
1688 | + | let dg = { | |
1689 | + | let bL = G | |
1690 | + | let bM = size(bL) | |
1691 | + | let bN = $Tuple3(nil, 0, 0) | |
1692 | + | func bO (bP,bQ) = if ((bQ >= bM)) | |
1693 | + | then bP | |
1694 | + | else hn(bP, bL[bQ]) | |
1695 | + | ||
1696 | + | func bR (bP,bQ) = if ((bQ >= bM)) | |
1697 | + | then bP | |
1563 | 1698 | else throw("List size exceeds 50") | |
1564 | 1699 | ||
1565 | - | | |
1700 | + | bR(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bN, 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) | |
1566 | 1701 | } | |
1567 | - | let | |
1568 | - | $Tuple2([IntegerEntry( | |
1702 | + | let hq = min([B, (hl + dg._3)]) | |
1703 | + | $Tuple2([IntegerEntry(fv, hq), StringEntry(dV, makeString_2C([eF[ai], eF[aj], eF[ak], makeString(dg._1, "_")], ":")), gX], hq) | |
1569 | 1704 | } | |
1570 | 1705 | } | |
1571 | 1706 | } | |
1572 | 1707 | ||
1573 | 1708 | ||
1574 | 1709 | ||
1575 | - | @Callable( | |
1710 | + | @Callable(dn) | |
1576 | 1711 | func healES () = { | |
1577 | - | let | |
1578 | - | if ((size( | |
1712 | + | let gX = gU(dn) | |
1713 | + | if ((size(dn.payments) != 1)) | |
1579 | 1714 | then throw("Exactly one payment required") | |
1580 | 1715 | else { | |
1581 | - | let | |
1582 | - | if (( | |
1716 | + | let gY = value(dn.payments[0]) | |
1717 | + | if ((gY.assetId != b)) | |
1583 | 1718 | then throw("Allowed USDT payment only!") | |
1584 | 1719 | else { | |
1585 | - | let | |
1586 | - | let | |
1587 | - | let | |
1588 | - | if (( | |
1720 | + | let bg = valueOrErrorMessage(getString(be(toString(dn.caller))), "You don't have a duck staked") | |
1721 | + | let fv = bi(bg) | |
1722 | + | let hl = valueOrElse(getInteger(fv), 100) | |
1723 | + | if ((hl > 0)) | |
1589 | 1724 | then throw("HP should be 0 to call Emergency Service") | |
1590 | 1725 | else { | |
1591 | - | let | |
1592 | - | let | |
1593 | - | let | |
1726 | + | let dV = bf(bg) | |
1727 | + | let eF = dU(dV) | |
1728 | + | let hm = if ((eF[al] == "")) | |
1594 | 1729 | then nil | |
1595 | - | else split( | |
1596 | - | let | |
1597 | - | then parseIntValue( | |
1730 | + | else split(eF[al], "_") | |
1731 | + | let hr = if ((size(hm) > 0)) | |
1732 | + | then parseIntValue(hm[0]) | |
1598 | 1733 | else 0 | |
1599 | - | let | |
1600 | - | then parseIntValue( | |
1734 | + | let hs = if ((size(hm) > 1)) | |
1735 | + | then parseIntValue(hm[1]) | |
1601 | 1736 | else 0 | |
1602 | - | let | |
1603 | - | then parseIntValue( | |
1737 | + | let ht = if ((size(hm) > 2)) | |
1738 | + | then parseIntValue(hm[2]) | |
1604 | 1739 | else 0 | |
1605 | - | if (if (if (( | |
1740 | + | if (if (if ((hr > 0)) | |
1606 | 1741 | then true | |
1607 | - | else ( | |
1742 | + | else (hs > 0)) | |
1608 | 1743 | then true | |
1609 | - | else ( | |
1744 | + | else (ht > 0)) | |
1610 | 1745 | then throw("You have to use own Medical Kit") | |
1611 | 1746 | else { | |
1612 | - | let | |
1613 | - | let | |
1614 | - | then split(value( | |
1747 | + | let hu = getString(aG, bo()) | |
1748 | + | let hv = if (isDefined(hu)) | |
1749 | + | then split(value(hu), "_") | |
1615 | 1750 | else nil | |
1616 | - | let | |
1617 | - | then parseIntValue( | |
1751 | + | let hw = if ((size(hv) > 0)) | |
1752 | + | then parseIntValue(hv[0]) | |
1618 | 1753 | else 0 | |
1619 | - | if ((0 >= | |
1754 | + | if ((0 >= hw)) | |
1620 | 1755 | then throw("There are no Medical Kits L1 at Emergency Service storage") | |
1621 | 1756 | else { | |
1622 | - | let | |
1623 | - | let | |
1624 | - | let | |
1625 | - | let | |
1626 | - | let | |
1627 | - | let | |
1628 | - | if (( | |
1629 | - | then throw(("Payment attached should be " + toString( | |
1757 | + | let hq = (hl + ch[0]) | |
1758 | + | let hx = makeString([toString((hw - 1)), removeByIndex(hv, 0)], "_") | |
1759 | + | let ca = split(G[0], "_") | |
1760 | + | let hy = bZ(ca) | |
1761 | + | let hz = parseIntValue(ca[T]) | |
1762 | + | let hA = fraction((hy * A), x, (10 * hz)) | |
1763 | + | if ((gY.amount != hA)) | |
1764 | + | then throw(("Payment attached should be " + toString(hA))) | |
1630 | 1765 | else { | |
1631 | - | let | |
1632 | - | $Tuple2([IntegerEntry( | |
1766 | + | let dg = bs(invoke(aG, "updateEsStorage", [hx], [AttachedPayment(b, hA)])) | |
1767 | + | $Tuple2([IntegerEntry(fv, hq), gX], dg) | |
1633 | 1768 | } | |
1634 | 1769 | } | |
1635 | 1770 | } | |
1636 | 1771 | } | |
1637 | 1772 | } | |
1638 | 1773 | } | |
1639 | 1774 | } | |
1640 | 1775 | ||
1641 | 1776 | ||
1642 | 1777 | ||
1643 | - | @Callable( | |
1644 | - | func updateBackpack ( | |
1645 | - | let | |
1646 | - | if (( | |
1778 | + | @Callable(dn) | |
1779 | + | func updateBackpack (bg,hB) = { | |
1780 | + | let gX = gU(dn) | |
1781 | + | if ((dn.caller != aG)) | |
1647 | 1782 | then throw("permission denied") | |
1648 | - | else $Tuple2([StringEntry( | |
1649 | - | } | |
1650 | - | ||
1651 | - | ||
1652 | - | ||
1653 | - | @Callable( | |
1783 | + | else $Tuple2([StringEntry(bf(bg), hB), gX], hB) | |
1784 | + | } | |
1785 | + | ||
1786 | + | ||
1787 | + | ||
1788 | + | @Callable(dn) | |
1654 | 1789 | func buySLand () = { | |
1655 | - | let | |
1656 | - | if ((size( | |
1790 | + | let gX = gU(dn) | |
1791 | + | if ((size(dn.payments) != 1)) | |
1657 | 1792 | then throw("Exactly one payment required") | |
1658 | 1793 | else { | |
1659 | - | let | |
1660 | - | if (( | |
1794 | + | let gY = value(dn.payments[0]) | |
1795 | + | if ((gY.assetId != b)) | |
1661 | 1796 | then throw("Allowed USDT payment only!") | |
1662 | - | else if (( | |
1663 | - | then throw(("Payment attached should be " + toString( | |
1797 | + | else if ((gY.amount != cn)) | |
1798 | + | then throw(("Payment attached should be " + toString(cn))) | |
1664 | 1799 | else { | |
1665 | - | let | |
1666 | - | $Tuple2((( | |
1800 | + | let dg = fb(dn.caller, dn.transactionId) | |
1801 | + | $Tuple2(((dg._1 :+ ScriptTransfer(aG, gY.amount, b)) :+ gX), dg._2._1) | |
1667 | 1802 | } | |
1668 | 1803 | } | |
1669 | 1804 | } | |
1670 | 1805 | ||
1671 | 1806 | ||
1672 | 1807 | ||
1673 | - | @Callable( | |
1674 | - | func expedition ( | |
1675 | - | let | |
1676 | - | if ((size( | |
1808 | + | @Callable(dn) | |
1809 | + | func expedition (fk,fl) = { | |
1810 | + | let gX = gU(dn) | |
1811 | + | if ((size(dn.payments) != 0)) | |
1677 | 1812 | then throw("No payments required") | |
1678 | 1813 | else { | |
1679 | - | let | |
1680 | - | $Tuple2(( | |
1681 | - | } | |
1682 | - | } | |
1683 | - | ||
1684 | - | ||
1685 | - | ||
1686 | - | @Callable( | |
1687 | - | func upgradeInfra ( | |
1688 | - | let | |
1689 | - | if ((size( | |
1814 | + | let dg = fj(true, dn.caller, dn.transactionId, fk, fl) | |
1815 | + | $Tuple2((dg._1 :+ gX), $Tuple2(dg._2, dg._3)) | |
1816 | + | } | |
1817 | + | } | |
1818 | + | ||
1819 | + | ||
1820 | + | ||
1821 | + | @Callable(dn) | |
1822 | + | func upgradeInfra (aW) = { | |
1823 | + | let gX = gU(dn) | |
1824 | + | if ((size(dn.payments) != 0)) | |
1690 | 1825 | then throw("No payments required") | |
1691 | 1826 | else { | |
1692 | - | let | |
1693 | - | $Tuple2(( | |
1694 | - | } | |
1695 | - | } | |
1696 | - | ||
1697 | - | ||
1698 | - | ||
1699 | - | @Callable( | |
1700 | - | func upgradeInfraUsdt ( | |
1827 | + | let dg = gg(true, dn.caller, 0, aW) | |
1828 | + | $Tuple2((dg._1 :+ gX), dg._2) | |
1829 | + | } | |
1830 | + | } | |
1831 | + | ||
1832 | + | ||
1833 | + | ||
1834 | + | @Callable(dn) | |
1835 | + | func upgradeInfraUsdt (aW) = if ((dn.caller != this)) | |
1701 | 1836 | then throw("Permission denied") | |
1702 | 1837 | else { | |
1703 | - | let | |
1704 | - | if ((size( | |
1838 | + | let gX = gU(dn) | |
1839 | + | if ((size(dn.payments) != 1)) | |
1705 | 1840 | then throw("Exactly one payment required") | |
1706 | 1841 | else { | |
1707 | - | let | |
1708 | - | if (( | |
1842 | + | let gY = value(dn.payments[0]) | |
1843 | + | if ((gY.assetId != b)) | |
1709 | 1844 | then throw("Allowed USDT payment only!") | |
1710 | 1845 | else { | |
1711 | - | let | |
1712 | - | $Tuple2((( | |
1846 | + | let dg = gg(false, dn.caller, gY.amount, aW) | |
1847 | + | $Tuple2(((dg._1 :+ ScriptTransfer(aG, gY.amount, b)) :+ gX), dg._2) | |
1713 | 1848 | } | |
1714 | 1849 | } | |
1715 | 1850 | } | |
1716 | 1851 | ||
1717 | 1852 | ||
1718 | 1853 | ||
1719 | - | @Callable( | |
1720 | - | func activateArtifact ( | |
1721 | - | let | |
1722 | - | if ((size( | |
1854 | + | @Callable(dn) | |
1855 | + | func activateArtifact (hC,aW) = { | |
1856 | + | let gX = gU(dn) | |
1857 | + | if ((size(dn.payments) != 0)) | |
1723 | 1858 | then throw("No payments required") | |
1724 | 1859 | else { | |
1725 | - | let | |
1726 | - | let c = | |
1860 | + | let dg = { | |
1861 | + | let c = hC | |
1727 | 1862 | if (("PRESALE" == c)) | |
1728 | - | then | |
1863 | + | then gt(toString(dn.caller), aW) | |
1729 | 1864 | else throw("Unknown artifact") | |
1730 | 1865 | } | |
1731 | - | ( | |
1732 | - | } | |
1733 | - | } | |
1734 | - | ||
1735 | - | ||
1736 | - | ||
1737 | - | @Callable( | |
1738 | - | func mergeLands ( | |
1739 | - | let | |
1740 | - | if ((size( | |
1866 | + | (dg :+ gX) | |
1867 | + | } | |
1868 | + | } | |
1869 | + | ||
1870 | + | ||
1871 | + | ||
1872 | + | @Callable(dn) | |
1873 | + | func mergeLands (gy) = { | |
1874 | + | let gX = gU(dn) | |
1875 | + | if ((size(dn.payments) != 0)) | |
1741 | 1876 | then throw("No payments required") | |
1742 | 1877 | else { | |
1743 | - | let | |
1744 | - | $Tuple2(( | |
1745 | - | } | |
1746 | - | } | |
1747 | - | ||
1748 | - | ||
1749 | - | ||
1750 | - | @Callable( | |
1751 | - | func mergeLandsUsdt ( | |
1752 | - | let | |
1753 | - | if ((size( | |
1878 | + | let dg = gS(true, toString(dn.caller), 0, gy, dn.transactionId) | |
1879 | + | $Tuple2((dg._1 :+ gX), dg._2) | |
1880 | + | } | |
1881 | + | } | |
1882 | + | ||
1883 | + | ||
1884 | + | ||
1885 | + | @Callable(dn) | |
1886 | + | func mergeLandsUsdt (gy) = { | |
1887 | + | let gX = gU(dn) | |
1888 | + | if ((size(dn.payments) != 1)) | |
1754 | 1889 | then throw("Exactly one payment required") | |
1755 | 1890 | else { | |
1756 | - | let | |
1757 | - | if (( | |
1891 | + | let gY = value(dn.payments[0]) | |
1892 | + | if ((gY.assetId != b)) | |
1758 | 1893 | then throw("Allowed USDT payment only!") | |
1759 | 1894 | else { | |
1760 | - | let | |
1761 | - | $Tuple2((( | |
1895 | + | let dg = gS(false, toString(dn.caller), gY.amount, gy, dn.transactionId) | |
1896 | + | $Tuple2(((dg._1 :+ ScriptTransfer(aG, gY.amount, b)) :+ gX), dg._2) | |
1762 | 1897 | } | |
1763 | 1898 | } | |
1764 | 1899 | } | |
1765 | 1900 | ||
1766 | 1901 | ||
1767 | 1902 | ||
1768 | - | @Callable( | |
1769 | - | func cargoExchange ( | |
1770 | - | let | |
1771 | - | if ((size( | |
1903 | + | @Callable(dn) | |
1904 | + | func cargoExchange (hD,aW) = { | |
1905 | + | let gX = gU(dn) | |
1906 | + | if ((size(dn.payments) != 0)) | |
1772 | 1907 | then throw("No payments required") | |
1773 | 1908 | else { | |
1774 | - | let | |
1775 | - | let | |
1776 | - | let | |
1777 | - | let | |
1778 | - | if (!(isDefined(getInteger( | |
1779 | - | then throw(( | |
1909 | + | let eE = split_4C(hD, ":") | |
1910 | + | let aK = toString(dn.originCaller) | |
1911 | + | let bW = value(assetInfo(fromBase58String(aW))) | |
1912 | + | let fO = aO(aW) | |
1913 | + | if (!(isDefined(getInteger(fO)))) | |
1914 | + | then throw((bW.name + " is not staked")) | |
1780 | 1915 | else { | |
1781 | - | let | |
1782 | - | if (( | |
1783 | - | then throw(( | |
1916 | + | let fQ = valueOrErrorMessage(getString(aL(aW)), (("NFT " + bW.name) + " is orphaned")) | |
1917 | + | if ((fQ != aK)) | |
1918 | + | then throw((k + " is not yours")) | |
1784 | 1919 | else { | |
1785 | - | let | |
1786 | - | let | |
1787 | - | let | |
1788 | - | let | |
1789 | - | let | |
1790 | - | if (( | |
1791 | - | then throw((("Duck location type is " + | |
1792 | - | else if (( | |
1793 | - | then throw(("Duck should be on the land " + | |
1920 | + | let eo = (bA(split(bW.description, "_")[W]) / o) | |
1921 | + | let ep = valueOrElse(getInteger(aP(aW)), 0) | |
1922 | + | let bg = valueOrErrorMessage(getString(be(aK)), "You don't have a duck staked") | |
1923 | + | let fL = valueOrElse(getString(bh(bg)), w) | |
1924 | + | let fM = split(value(fL), "_") | |
1925 | + | if ((fM[bq] != "L")) | |
1926 | + | then throw((("Duck location type is " + fM[bq]) + ", but should be L")) | |
1927 | + | else if ((fM[br] != aW)) | |
1928 | + | then throw(("Duck should be on the land " + aW)) | |
1794 | 1929 | else { | |
1795 | - | let | |
1796 | - | let | |
1797 | - | let | |
1798 | - | let | |
1799 | - | let | |
1800 | - | let | |
1801 | - | let | |
1802 | - | let | |
1803 | - | [StringEntry( | |
1930 | + | let en = aV(aW) | |
1931 | + | let eb = em(en, eo, ep) | |
1932 | + | let dV = bf(bg) | |
1933 | + | let eF = dU(dV) | |
1934 | + | let dg = eD(eE, eb, eF) | |
1935 | + | let ev = split(eb[ad], "_") | |
1936 | + | let gd = (parseIntValue(ev[af]) + dg._7) | |
1937 | + | let ge = (parseIntValue(ev[ag]) - dg._7) | |
1938 | + | [StringEntry(dV, makeString_2C([eF[ai], dg._4, dg._5, dg._6], ":")), StringEntry(en, makeString_2C([eb[Z], dg._1, dg._2, dg._3, makeString([ev[ae], toString(gd), toString(ge), ev[ah]], "_")], ":")), gX] | |
1804 | 1939 | } | |
1805 | 1940 | } | |
1806 | 1941 | } | |
1807 | 1942 | } | |
1808 | 1943 | } | |
1809 | 1944 | ||
1810 | 1945 | ||
1811 | 1946 | ||
1812 | - | @Callable( | |
1813 | - | func saveWarehouse ( | |
1814 | - | let | |
1815 | - | if (( | |
1947 | + | @Callable(dn) | |
1948 | + | func saveWarehouse (er,aW) = { | |
1949 | + | let gX = gU(dn) | |
1950 | + | if ((dn.caller != aG)) | |
1816 | 1951 | then throw("Access denied") | |
1817 | 1952 | else { | |
1818 | - | let | |
1819 | - | let | |
1820 | - | if ((size( | |
1953 | + | let en = aV(aW) | |
1954 | + | let es = split_4C(er, ":") | |
1955 | + | if ((size(es) != 5)) | |
1821 | 1956 | then throw("warehouse string should contain 4 ':' separators") | |
1822 | 1957 | else { | |
1823 | - | let | |
1824 | - | let | |
1825 | - | let | |
1826 | - | let | |
1827 | - | let | |
1828 | - | $Tuple2([StringEntry( | |
1958 | + | let hE = split(es[ad], "_")[ae] | |
1959 | + | let gd = ea(es) | |
1960 | + | let hF = dX(es[Z]) | |
1961 | + | let ge = ((hF - parseIntValue(hE)) - gd) | |
1962 | + | let hG = makeString_2C([es[Z], es[aa], es[ab], es[ac], makeString([hE, toString(gd), toString(ge), toString(hF)], "_")], ":") | |
1963 | + | $Tuple2([StringEntry(en, hG), gX], hG) | |
1829 | 1964 | } | |
1830 | 1965 | } | |
1831 | 1966 | } | |
1832 | 1967 | ||
1833 | 1968 | ||
1834 | 1969 | ||
1835 | - | @Callable( | |
1836 | - | func fixWarehouseFormat ( | |
1970 | + | @Callable(dn) | |
1971 | + | func fixWarehouseFormat (aW) = if ((dn.caller != aE)) | |
1837 | 1972 | then throw("Access denied") | |
1838 | 1973 | else { | |
1839 | - | let | |
1840 | - | let | |
1841 | - | let | |
1842 | - | let | |
1843 | - | let | |
1844 | - | let | |
1845 | - | let | |
1846 | - | let | |
1847 | - | let | |
1848 | - | let | |
1849 | - | $Tuple2([StringEntry( | |
1974 | + | let en = aV(aW) | |
1975 | + | let bW = value(assetInfo(fromBase58String(aW))) | |
1976 | + | let eo = (bA(split(bW.description, "_")[W]) / o) | |
1977 | + | let ep = valueOrElse(getInteger(aP(aW)), 0) | |
1978 | + | let es = em(en, eo, ep) | |
1979 | + | let hE = bv(invoke(aG, "recalcLockedVolumeREADONLY", [aW, es], nil)) | |
1980 | + | let gd = ea(es) | |
1981 | + | let hF = dX(es[Z]) | |
1982 | + | let ge = ((hF - hE) - gd) | |
1983 | + | let hG = makeString_2C([es[Z], es[aa], es[ab], es[ac], makeString([toString(hE), toString(gd), toString(ge), toString(hF)], "_")], ":") | |
1984 | + | $Tuple2([StringEntry(en, hG)], hG) | |
1850 | 1985 | } | |
1851 | 1986 | ||
1852 | 1987 | ||
1853 | 1988 | ||
1854 | - | @Callable( | |
1855 | - | func fixStakedPieces ( | |
1989 | + | @Callable(dn) | |
1990 | + | func fixStakedPieces (ap) = if ((dn.caller != aE)) | |
1856 | 1991 | then throw("Access denied") | |
1857 | 1992 | else { | |
1858 | - | let | |
1993 | + | let gN = if ((ap == "")) | |
1859 | 1994 | then 0 | |
1860 | 1995 | else { | |
1861 | - | let | |
1862 | - | let | |
1863 | - | then split_51C(value( | |
1996 | + | let bT = getString(aF, aX(ap)) | |
1997 | + | let bU = if (isDefined(bT)) | |
1998 | + | then split_51C(value(bT), "_") | |
1864 | 1999 | else nil | |
1865 | - | func | |
1866 | - | let | |
1867 | - | let | |
1868 | - | ( | |
2000 | + | func bV (bI,aW) = { | |
2001 | + | let bW = value(assetInfo(fromBase58String(aW))) | |
2002 | + | let bB = split(bW.description, "_")[W] | |
2003 | + | (bI + bA(bB)) | |
1869 | 2004 | } | |
1870 | 2005 | ||
1871 | - | let | |
1872 | - | let | |
1873 | - | let | |
1874 | - | func | |
1875 | - | then | |
1876 | - | else | |
1877 | - | ||
1878 | - | func | |
1879 | - | then | |
2006 | + | let bL = bU | |
2007 | + | let bM = size(bL) | |
2008 | + | let bN = 0 | |
2009 | + | func bO (bP,bQ) = if ((bQ >= bM)) | |
2010 | + | then bP | |
2011 | + | else bV(bP, bL[bQ]) | |
2012 | + | ||
2013 | + | func bR (bP,bQ) = if ((bQ >= bM)) | |
2014 | + | then bP | |
1880 | 2015 | else throw("List size exceeds 100") | |
1881 | 2016 | ||
1882 | - | | |
2017 | + | bR(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bN, 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) | |
1883 | 2018 | } | |
1884 | - | $Tuple2([IntegerEntry( | |
2019 | + | $Tuple2([IntegerEntry(aY(ap), gN)], gN) | |
1885 | 2020 | } | |
1886 | 2021 | ||
1887 | 2022 | ||
1888 | 2023 | ||
1889 | - | @Callable( | |
1890 | - | func setCustomName ( | |
1891 | - | let | |
1892 | - | if ((size( | |
2024 | + | @Callable(dn) | |
2025 | + | func setCustomName (aM,gG,aR) = { | |
2026 | + | let gX = gU(dn) | |
2027 | + | if ((size(dn.payments) != 1)) | |
1893 | 2028 | then throw("Exactly one payment required") | |
1894 | 2029 | else { | |
1895 | - | let | |
1896 | - | if (( | |
2030 | + | let gY = value(dn.payments[0]) | |
2031 | + | if ((gY.assetId != b)) | |
1897 | 2032 | then throw("Allowed USDT payment only!") | |
1898 | - | else if (( | |
1899 | - | then throw(("Payment should be " + toString( | |
1900 | - | else if (contains( | |
1901 | - | then throw(("Name should not contain '__': " + | |
1902 | - | else if ((size( | |
1903 | - | then throw(("Name too long, maxLength=" + toString( | |
2033 | + | else if ((gY.amount != cj)) | |
2034 | + | then throw(("Payment should be " + toString(cj))) | |
2035 | + | else if (contains(gG, "__")) | |
2036 | + | then throw(("Name should not contain '__': " + gG)) | |
2037 | + | else if ((size(gG) > ck)) | |
2038 | + | then throw(("Name too long, maxLength=" + toString(ck))) | |
1904 | 2039 | else { | |
1905 | - | let | |
1906 | - | let | |
1907 | - | let c = | |
2040 | + | let aK = toString(dn.originCaller) | |
2041 | + | let hH = { | |
2042 | + | let c = aR | |
1908 | 2043 | if (("ACCOUNT" == c)) | |
1909 | 2044 | then { | |
1910 | - | let | |
1911 | - | let | |
1912 | - | if (isDefined( | |
1913 | - | then throw(("Name already registered: " + | |
2045 | + | let hI = cE(gG) | |
2046 | + | let hJ = getString(hI) | |
2047 | + | if (isDefined(hJ)) | |
2048 | + | then throw(("Name already registered: " + gG)) | |
1914 | 2049 | else { | |
1915 | - | let | |
1916 | - | let | |
1917 | - | let | |
1918 | - | then [DeleteEntry( | |
2050 | + | let hK = ba(aK) | |
2051 | + | let hL = getString(hK) | |
2052 | + | let hM = if (isDefined(hL)) | |
2053 | + | then [DeleteEntry(cE(value(hL)))] | |
1919 | 2054 | else nil | |
1920 | - | (( | |
2055 | + | ((hM :+ StringEntry(hK, gG)) :+ StringEntry(hI, aK)) | |
1921 | 2056 | } | |
1922 | 2057 | } | |
1923 | 2058 | else if (("LAND" == c)) | |
1924 | 2059 | then { | |
1925 | - | let | |
1926 | - | let | |
1927 | - | if (!(isDefined(getInteger( | |
1928 | - | then throw(( | |
2060 | + | let bW = value(assetInfo(fromBase58String(aM))) | |
2061 | + | let fO = aO(aM) | |
2062 | + | if (!(isDefined(getInteger(fO)))) | |
2063 | + | then throw((bW.name + " is not staked")) | |
1929 | 2064 | else { | |
1930 | - | let | |
1931 | - | if (( | |
1932 | - | then throw(( | |
2065 | + | let fQ = valueOrErrorMessage(getString(aL(aM)), (("NFT " + bW.name) + " is orphaned")) | |
2066 | + | if ((fQ != aK)) | |
2067 | + | then throw((k + " is not yours")) | |
1933 | 2068 | else { | |
1934 | - | let | |
1935 | - | let | |
1936 | - | if (isDefined( | |
1937 | - | then throw(("Name already registered: " + | |
2069 | + | let hI = cy(gG) | |
2070 | + | let hJ = getString(hI) | |
2071 | + | if (isDefined(hJ)) | |
2072 | + | then throw(("Name already registered: " + gG)) | |
1938 | 2073 | else { | |
1939 | - | let | |
1940 | - | let | |
1941 | - | let | |
1942 | - | then [DeleteEntry( | |
2074 | + | let hN = aN(aM) | |
2075 | + | let hL = getString(hN) | |
2076 | + | let hM = if (isDefined(hL)) | |
2077 | + | then [DeleteEntry(cy(value(hL)))] | |
1943 | 2078 | else nil | |
1944 | - | (( | |
2079 | + | ((hM :+ StringEntry(hN, gG)) :+ StringEntry(hI, aM)) | |
1945 | 2080 | } | |
1946 | 2081 | } | |
1947 | 2082 | } | |
1948 | 2083 | } | |
1949 | 2084 | else if (("DUCK" == c)) | |
1950 | 2085 | then { | |
1951 | - | let | |
1952 | - | let | |
1953 | - | if (if (!(isDefined(getInteger( | |
2086 | + | let bW = value(assetInfo(fromBase58String(aM))) | |
2087 | + | let fO = aO(aM) | |
2088 | + | if (if (!(isDefined(getInteger(fO)))) | |
1954 | 2089 | then true | |
1955 | - | else !(isDefined(getString( | |
1956 | - | then throw(( | |
2090 | + | else !(isDefined(getString(be(aK))))) | |
2091 | + | then throw((bW.name + " is not staked")) | |
1957 | 2092 | else { | |
1958 | - | let | |
1959 | - | if (( | |
1960 | - | then throw(( | |
2093 | + | let fQ = valueOrErrorMessage(getString(bd(aM)), (("NFT " + bW.name) + " is orphaned")) | |
2094 | + | if ((fQ != aK)) | |
2095 | + | then throw((l + " is not yours")) | |
1961 | 2096 | else { | |
1962 | - | let | |
1963 | - | let | |
1964 | - | if (isDefined( | |
1965 | - | then throw(("Name already registered: " + | |
2097 | + | let hI = cD(gG) | |
2098 | + | let hJ = getString(hI) | |
2099 | + | if (isDefined(hJ)) | |
2100 | + | then throw(("Name already registered: " + gG)) | |
1966 | 2101 | else { | |
1967 | - | let | |
1968 | - | let | |
1969 | - | let | |
1970 | - | then [DeleteEntry( | |
2102 | + | let hN = aZ(aM) | |
2103 | + | let hL = getString(hN) | |
2104 | + | let hM = if (isDefined(hL)) | |
2105 | + | then [DeleteEntry(cD(value(hL)))] | |
1971 | 2106 | else nil | |
1972 | - | (( | |
2107 | + | ((hM :+ StringEntry(hN, gG)) :+ StringEntry(hI, aM)) | |
1973 | 2108 | } | |
1974 | 2109 | } | |
1975 | 2110 | } | |
1976 | 2111 | } | |
1977 | 2112 | else throw("Unknown entity type") | |
1978 | 2113 | } | |
1979 | - | $Tuple2((( | |
2114 | + | $Tuple2(((hH :+ ScriptTransfer(aG, gY.amount, b)) :+ gX), 0) | |
1980 | 2115 | } | |
1981 | 2116 | } | |
1982 | 2117 | } | |
1983 | 2118 | ||
1984 | 2119 | ||
1985 | 2120 | ||
1986 | - | @Callable( | |
1987 | - | func setReferrals ( | |
2121 | + | @Callable(dn) | |
2122 | + | func setReferrals (hO,hP) = if ((dn.callerPublicKey != cg)) | |
1988 | 2123 | then throw("Permission denied") | |
1989 | 2124 | else { | |
1990 | - | let | |
1991 | - | if ((size( | |
2125 | + | let gX = gU(dn) | |
2126 | + | if ((size(dn.payments) != 0)) | |
1992 | 2127 | then throw("No payments required") | |
1993 | - | else if (!(isDefined(addressFromString( | |
1994 | - | then throw(("Invalid address: " + | |
1995 | - | else if (!(isDefined(addressFromString( | |
1996 | - | then throw(("Invalid address: " + | |
2128 | + | else if (!(isDefined(addressFromString(hO)))) | |
2129 | + | then throw(("Invalid address: " + hO)) | |
2130 | + | else if (!(isDefined(addressFromString(hP)))) | |
2131 | + | then throw(("Invalid address: " + hP)) | |
1997 | 2132 | else { | |
1998 | - | let | |
1999 | - | let | |
2000 | - | let | |
2001 | - | then split_4C(value( | |
2133 | + | let hQ = cF() | |
2134 | + | let hR = getString(hQ) | |
2135 | + | let hS = if (isDefined(hR)) | |
2136 | + | then split_4C(value(hR), "_") | |
2002 | 2137 | else nil | |
2003 | - | if (containsElement( | |
2004 | - | then throw(( | |
2138 | + | if (containsElement(hS, hP)) | |
2139 | + | then throw((hP + " is not newbie (already has referrals)")) | |
2005 | 2140 | else { | |
2006 | - | let | |
2007 | - | let | |
2008 | - | if (if (isDefined( | |
2009 | - | then isDefined(addressFromString(value( | |
2141 | + | let hT = bb(hP) | |
2142 | + | let hU = getString(hT) | |
2143 | + | if (if (isDefined(hU)) | |
2144 | + | then isDefined(addressFromString(value(hU))) | |
2010 | 2145 | else false) | |
2011 | - | then throw((( | |
2146 | + | then throw(((hP + " already has refBy: ") + value(hU))) | |
2012 | 2147 | else { | |
2013 | - | let | |
2014 | - | let | |
2015 | - | let | |
2016 | - | then split_4C(value( | |
2148 | + | let hV = bc(hO) | |
2149 | + | let hW = getString(hV) | |
2150 | + | let hX = if (isDefined(hW)) | |
2151 | + | then split_4C(value(hW), "_") | |
2017 | 2152 | else nil | |
2018 | - | if (containsElement( | |
2019 | - | then throw(((( | |
2153 | + | if (containsElement(hX, hP)) | |
2154 | + | then throw((((hO + " already contains ") + hP) + " within referrals")) | |
2020 | 2155 | else { | |
2021 | - | let | |
2022 | - | let | |
2023 | - | then value( | |
2024 | - | else makeString_2C(( | |
2025 | - | $Tuple2([StringEntry( | |
2156 | + | let hY = makeString_2C((hX :+ hP), "_") | |
2157 | + | let hZ = if (containsElement(hS, hO)) | |
2158 | + | then value(hR) | |
2159 | + | else makeString_2C((hS :+ hO), "_") | |
2160 | + | $Tuple2([StringEntry(hT, hO), StringEntry(hV, hY), StringEntry(hQ, hZ), gX], 0) | |
2026 | 2161 | } | |
2027 | 2162 | } | |
2028 | 2163 | } | |
2029 | 2164 | } | |
2030 | 2165 | } | |
2031 | 2166 | ||
2032 | 2167 | ||
2033 | 2168 | ||
2034 | - | @Callable(ct) | |
2035 | - | func splitByGlobalWeightsREADONLY (dM) = $Tuple2(nil, cd(dM)) | |
2036 | - | ||
2037 | - | ||
2038 | - | ||
2039 | - | @Callable(ct) | |
2040 | - | func splitByGlobalAndLocalWeightsREADONLY (hn,ho,cw) = { | |
2041 | - | let cp = cv(cw) | |
2042 | - | $Tuple2(nil, $Tuple2(cd(hn), bV(ho, cp))) | |
2043 | - | } | |
2044 | - | ||
2045 | - | ||
2046 | - | ||
2047 | - | @Callable(ct) | |
2048 | - | func getBackpackREADONLY (aJ) = $Tuple2(nil, makeString(db(aI(aJ)), ":")) | |
2049 | - | ||
2050 | - | ||
2051 | - | ||
2052 | - | @Callable(ct) | |
2053 | - | func getWarehouseREADONLY (az) = { | |
2054 | - | let eY = value(assetInfo(fromBase58String(az))) | |
2055 | - | let dy = (aY(split(eY.description, "_")[D]) / m) | |
2056 | - | let dz = valueOrElse(getInteger(as(az)), 0) | |
2057 | - | $Tuple2(nil, makeString_2C(dw(ay(az), dy, dz), ":")) | |
2058 | - | } | |
2169 | + | @Callable(dn) | |
2170 | + | func splitByGlobalWeightsREADONLY (eC) = $Tuple2(nil, cY(eC)) | |
2171 | + | ||
2172 | + | ||
2173 | + | ||
2174 | + | @Callable(dn) | |
2175 | + | func splitByGlobalAndLocalWeightsREADONLY (ia,ib,dq) = { | |
2176 | + | let dj = dp(dq) | |
2177 | + | $Tuple2(nil, $Tuple2(cY(ia), cR(ib, dj))) | |
2178 | + | } | |
2179 | + | ||
2180 | + | ||
2181 | + | ||
2182 | + | @Callable(dn) | |
2183 | + | func getBackpackREADONLY (bg) = $Tuple2(nil, makeString(dU(bf(bg)), ":")) | |
2184 | + | ||
2185 | + | ||
2186 | + | ||
2187 | + | @Callable(dn) | |
2188 | + | func getWarehouseREADONLY (aW) = { | |
2189 | + | let bW = value(assetInfo(fromBase58String(aW))) | |
2190 | + | let eo = (bA(split(bW.description, "_")[W]) / o) | |
2191 | + | let ep = valueOrElse(getInteger(aP(aW)), 0) | |
2192 | + | $Tuple2(nil, makeString_2C(em(aV(aW), eo, ep), ":")) | |
2193 | + | } | |
2194 | + | ||
2195 | + | ||
2196 | + | ||
2197 | + | @Callable(dn) | |
2198 | + | func saveLastTx () = if ((dn.caller != aI)) | |
2199 | + | then throw("Access denied") | |
2200 | + | else $Tuple2([gU(dn)], 42) | |
2059 | 2201 | ||
2060 | 2202 |
github/deemru/w8io/169f3d6 1009.99 ms ◑![]()