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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BQh3aElkeFJlcwIBXwUGTlVNUkVTCQCRAwIFAndoBQh3aElkeFJlcwILMF8wXzBfMF8wXzAJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQJ3aAUId2hJZHhNYXQCAV8FBk5VTVJFUwkAkQMCBQJ3aAUId2hJZHhNYXQCCzBfMF8wXzBfMF8wCQDMCAIJAJEDAgUCd2gFCXdoSWR4UHJvZAkAzAgCBQZ3aExvZnQFA25pbAEVZ2V0V2FyZWhvdXNlU3BhY2VMZWZ0AQljdXJyZW50V2gEC29jY3VwaWVkVm9sCQEXZ2V0V2FyZWhvdXNlT2NjdXBpZWRWb2wBBQljdXJyZW50V2gED2N1cnJXaExvY2tlZFZvbAkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4TE9GVAIBXwUJdm9sTG9ja2VkCQBlAgkAZQIJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEJAJEDAgUJY3VycmVudFdoBQt3aElkeExldmVscwULb2NjdXBpZWRWb2wFD2N1cnJXaExvY2tlZFZvbAEIdG9Wb2x1bWUCBmFtb3VudAdwa2dTaXplBARwa2dzAwkAZwIFBmFtb3VudAAACQBpAgkAZQIJAGQCBQZhbW91bnQFB3BrZ1NpemUAAQUHcGtnU2l6ZQkBAS0BCQBpAgkAZQIJAGQCCQEBLQEFBmFtb3VudAUHcGtnU2l6ZQABBQdwa2dTaXplCQBoAgUEcGtncwUFTVVMVDgBCW1vdmVTdHVmZgMKY2FyZ29QYXJ0cwljdXJyZW50V2gLY3VycmVudFBhY2sDCQECIT0CCQCQAwEFCmNhcmdvUGFydHMAAwkAAgECNGNhcmdvTGlzdFN0ciBzaG91bGQgY29udGFpbiBleGFjdGx5IDIgJzonIHNlcGFyYXRvcnMECHJlc1BhcnRzCQC1CQIJAJEDAgUKY2FyZ29QYXJ0cwAAAgFfBAhtYXRQYXJ0cwkAtQkCCQCRAwIFCmNhcmdvUGFydHMAAQIBXwQJcHJvZFBhcnRzAwkAAAIJAJEDAgUKY2FyZ29QYXJ0cwACAgAFA25pbAkAtQkCCQCRAwIFCmNhcmdvUGFydHMAAgIBXwMJAQIhPQIJAJADAQUIcmVzUGFydHMFBk5VTVJFUwkAAgECIEFsbCA2IHJlc291cmNlcyBzaG91bGQgYmUgcGFzc2VkAwkBAiE9AgkAkAMBBQhtYXRQYXJ0cwUGTlVNUkVTCQACAQIgQWxsIDYgbWF0ZXJpYWxzIHNob3VsZCBiZSBwYXNzZWQEC3doU3BhY2VMZWZ0CQEVZ2V0V2FyZWhvdXNlU3BhY2VMZWZ0AQUJY3VycmVudFdoBAljdXJyV2hSZXMJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfBAljdXJyV2hNYXQJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0AgFfBApjdXJyV2hQcm9kAwkAAAIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAAUDbmlsCQC1CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAV8EDmN1cnJlbnRQYWNrUmVzCQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfBA5jdXJyZW50UGFja01hdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQPY3VycmVudFBhY2tQcm9kAwkAAAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIABQNuaWwJALUJAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgFfCgEDbXZSAgNhY2MEaXRlbQQBaQgFA2FjYwJfMQQCYW0JAQ1wYXJzZUludFZhbHVlAQUEaXRlbQQDd2hyCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJY3VycldoUmVzBQFpBANicHIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5jdXJyZW50UGFja1JlcwUBaQMJAAACBQJhbQAACQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkAkQMCBQljdXJyV2hSZXMFAWkJAM0IAggFA2FjYwJfMwkAkQMCBQ5jdXJyZW50UGFja1JlcwUBaQgFA2FjYwJfNAMJAGYCBQJhbQAAAwkAZgIFAmFtBQNicHIJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAFBGl0ZW0CGSBmcm9tIGJhY2twYWNrLCBidXQgb25seSAJAKQDAQUDYnByAgogYXZhaWxhYmxlCQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkApAMBCQBkAgUDd2hyBQJhbQkAzQgCCAUDYWNjAl8zCQCkAwEJAGUCBQNicHIFAmFtCQBkAggFA2FjYwJfNAUCYW0DCQBmAgkBAS0BBQJhbQUDd2hyCQACAQkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHRha2UgCQCkAwEJAQEtAQUCYW0CGiBmcm9tIHdhcmVob3VzZSwgYnV0IG9ubHkgCQCkAwEFA3docgIKIGF2YWlsYWJsZQkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZAIFA3docgUCYW0JAM0IAggFA2FjYwJfMwkApAMBCQBlAgUDYnByBQJhbQkAZAIIBQNhY2MCXzQFAmFtBAFyCgACJGwFCHJlc1BhcnRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlgoEAAAFA25pbAUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBA212UgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgoBA212TQIDYWNjBGl0ZW0EAWkIBQNhY2MCXzEEAmFtCQENcGFyc2VJbnRWYWx1ZQEFBGl0ZW0EA3dobQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWN1cnJXaE1hdAUBaQQDYnBtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOY3VycmVudFBhY2tNYXQFAWkDCQAAAgUCYW0AAAkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAJEDAgUJY3VycldoTWF0BQFpCQDNCAIIBQNhY2MCXzMJAJEDAgUOY3VycmVudFBhY2tNYXQFAWkIBQNhY2MCXzQDCQBmAgUCYW0AAAMJAGYCBQJhbQUDYnBtCQACAQkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHRha2UgBQRpdGVtAhkgZnJvbSBiYWNrcGFjaywgYnV0IG9ubHkgCQCkAwEFA2JwbQIKIGF2YWlsYWJsZQkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZAIFA3dobQUCYW0JAM0IAggFA2FjYwJfMwkApAMBCQBlAgUDYnBtBQJhbQkAZAIIBQNhY2MCXzQFAmFtAwkAZgIJAQEtAQUCYW0FA3dobQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byB0YWtlIAkApAMBCQEBLQEFAmFtAhogZnJvbSB3YXJlaG91c2UsIGJ1dCBvbmx5IAkApAMBBQN3aG0CCiBhdmFpbGFibGUJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGQCBQN3aG0FAmFtCQDNCAIIBQNhY2MCXzMJAKQDAQkAZQIFA2JwbQUCYW0JAGQCCAUDYWNjAl80BQJhbQQBbQoAAiRsBQhtYXRQYXJ0cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJYKBAAABQNuaWwFA25pbAgFAXICXzQKAQUkZjFfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBA212TQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMV8yAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgoBA212UAIDYWNjBGl0ZW0EAWkIBQNhY2MCXzEEB3BrZ1NpemUJAQpnZXRQa2dTaXplAQUBaQQCYW0JAQ1wYXJzZUludFZhbHVlAQUEaXRlbQQDd2hwAwkAZgIJAJADAQUKY3VycldoUHJvZAUBaQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCmN1cnJXaFByb2QFAWkAAAQDYnBwAwkAZgIJAJADAQUPY3VycmVudFBhY2tQcm9kBQFpCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUPY3VycmVudFBhY2tQcm9kBQFpAAADCQAAAgUCYW0AAAkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAKQDAQUDd2hwCQDNCAIIBQNhY2MCXzMJAKQDAQUDYnBwCAUDYWNjAl80AwkAZgIFAmFtAAADCQBmAgUCYW0FA2JwcAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byB0YWtlIAUEaXRlbQIZIGZyb20gYmFja3BhY2ssIGJ1dCBvbmx5IAkApAMBBQNicHACCiBhdmFpbGFibGUECGRlbHRhVm9sCQBlAgkBCHRvVm9sdW1lAgkAZAIFA3docAUCYW0FB3BrZ1NpemUJAQh0b1ZvbHVtZQIFA3docAUHcGtnU2l6ZQkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZAIFA3docAUCYW0JAM0IAggFA2FjYwJfMwkApAMBCQBlAgUDYnBwBQJhbQkAZAIIBQNhY2MCXzQFCGRlbHRhVm9sAwkAZgIJAQEtAQUCYW0FA3docAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byB0YWtlIAkApAMBCQEBLQEFAmFtAhogZnJvbSB3YXJlaG91c2UsIGJ1dCBvbmx5IAkApAMBBQN3aHACCiBhdmFpbGFibGUECGRlbHRhVm9sCQBlAgkBCHRvVm9sdW1lAgkAZAIFA3docAUCYW0FB3BrZ1NpemUJAQh0b1ZvbHVtZQIFA3docAUHcGtnU2l6ZQkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZAIFA3docAUCYW0JAM0IAggFA2FjYwJfMwkApAMBCQBlAgUDYnBwBQJhbQkAZAIIBQNhY2MCXzQFCGRlbHRhVm9sBAFwAwkBAiE9AgkAkAMBBQlwcm9kUGFydHMAAAoAAiRsBQlwcm9kUGFydHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCWCgQAAAUDbmlsBQNuaWwIBQFtAl80CgEFJGYyXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQNtdlACBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjJfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDUwCQEFJGYyXzICCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgkAlgoEAAAFCmN1cnJXaFByb2QFD2N1cnJlbnRQYWNrUHJvZAgFAW0CXzQECHZvbFNhbGRvCAUBcAJfNAMJAGYCBQh2b2xTYWxkbwULd2hTcGFjZUxlZnQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICFUF0dGVtcHQgdG8gcHV0IHRvdGFsIAkApAMBBQh2b2xTYWxkbwIRIHN0dWZmLCBidXQgb25seSAJAKQDAQULd2hTcGFjZUxlZnQCFSB3YXJlaG91c2Ugc3BhY2UgbGVmdAkAmQoHCQC5CQIIBQFyAl8yAgFfCQC5CQIIBQFtAl8yAgFfCQC5CQIIBQFwAl8yAgFfCQC5CQIIBQFyAl8zAgFfCQC5CQIIBQFtAl8zAgFfCQC5CQIIBQFwAl8zAgFfBQh2b2xTYWxkbwESZXhwZWRpdGlvbkludGVybmFsAgZjYWxsZXIEdHhJZAQIdXNlckFkZHIJAKUIAQUGY2FsbGVyBAZiaWdOdW0JAQNhYnMBCQCeAwEFBHR4SWQEB2ZyZWVOdW0JAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBEmtleU5leHRGcmVlTGFuZE51bQAJAGQCBQ9QUkVTQUxFTlVNTEFORFMAAQQHbGFuZE51bQkApAMBBQdmcmVlTnVtBAxjb250aW5lbnRJZHgJAKADAQkAuwICBQZiaWdOdW0FBUZJVkVYBAh0ZXJyYWlucwkBC2dlblRlcnJhaW5zAgUGYmlnTnVtBQxjb250aW5lbnRJZHgECWNvbnRpbmVudAkAkQMCBQpjb250aW5lbnRzBQxjb250aW5lbnRJZHgEBWlzc3VlCQDCCAUJAQduZnROYW1lAgUHbGFuZE51bQIBUwkAuQkCCQDMCAIFB2xhbmROdW0JAMwIAgIBUwkAzAgCBQh0ZXJyYWlucwkAzAgCBQljb250aW5lbnQFA25pbAIBXwABAAAHBAdhc3NldElkCQC4CAEFBWlzc3VlBAJpZAkA2AQBBQdhc3NldElkCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJARJrZXlOZXh0RnJlZUxhbmROdW0ACQBkAgUHZnJlZU51bQABCQDMCAIFBWlzc3VlCQDMCAIJAQtTdHJpbmdFbnRyeQIJARBrZXlMYW5kVG9Bc3NldElkAQUHbGFuZE51bQUCaWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFAmlkBQh1c2VyQWRkcgkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5TGFuZE51bVRvT3duZXIBBQdsYW5kTnVtBQh1c2VyQWRkcgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQJpZAAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAgUCaWQFCHVzZXJBZGRyAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUGY2FsbGVyAAEFB2Fzc2V0SWQFA25pbAkAlAoCBQJpZAUJY29udGluZW50ARBleHBlZGl0aW9uQ29tbW9uBQxzaG91bGRVc2VNYXQGY2FsbGVyBHR4SWQHbWVzc2FnZQNzaWcDCQEBIQEJAMQTAwUHbWVzc2FnZQUDc2lnBQNwdWIJAAIBAhhzaWduYXR1cmUgZG9lcyBub3QgbWF0Y2gEBXBhcnRzCQC1CQIJALAJAQUHbWVzc2FnZQIBOwQJZmxpZ2h0TG9nCQC1CQIJAJEDAgUFcGFydHMAAAIBfAQCaHAJALUJAgkAkQMCBQlmbGlnaHRMb2cFCGZsSGVhbHRoAgFfBAVjdXJIUAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmhwAAAEBW5ld0hQCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCaHAAAQQLbmV3TG9jVHhWZXIJALUJAgkAkQMCBQVwYXJ0cwABAgE6BAtuZXdMb2NhdGlvbgkAkQMCBQtuZXdMb2NUeFZlcgAABAR0aW1lCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJZmxpZ2h0TG9nBQtmbFRpbWVzdGFtcAMDCQBmAgUEdGltZQkAZAIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBRFGSVZFTUlOVVRFU01JTExJUwYJAGYCCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFEUZJVkVNSU5VVEVTTUlMTElTBQR0aW1lCQACAQISc2lnbmF0dXJlIG91dGRhdGVkBAl0eEZyb21Nc2cJAJEDAgULbmV3TG9jVHhWZXIAAQQIdXNlckFkZHIJAKUIAQUGY2FsbGVyBAZsYXN0VHgJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBEWtleUxhc3RUeElkQnlVc2VyAQUIdXNlckFkZHICAAMJAQIhPQIFBmxhc3RUeAUJdHhGcm9tTXNnCQACAQkArAICCQCsAgIJAKwCAgIeVHggaWRzIGRvbid0IG1hdGNoISBJbiBzdGF0ZTogBQZsYXN0VHgCCiwgaW4gbXNnOiAFCXR4RnJvbU1zZwQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQh1c2VyQWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAxvbGRGcm9tU3RhdGUJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoAGQDCQECIT0CBQxvbGRGcm9tU3RhdGUFBWN1ckhQCQACAQkArAICCQCsAgIJAKwCAgIKb2xkSGVhbHRoPQkApAMBCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aABkAi8gZnJvbSBzdGF0ZSBkb2VzIG5vdCBtYXRjaCBvbmUgZnJvbSBmbGlnaHQgbG9nPQkApAMBBQVjdXJIUAMJAGcCAAAFBWN1ckhQCQACAQIeWW91IGNhbid0IGZseSB3aXRoIHplcm8gaGVhbHRoAwkAZwIAAAUFbmV3SFAJAJUKAwkAzQgCAwkBASEBBQxzaG91bGRVc2VNYXQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUGY2FsbGVyBQdFWFBVU0RUBQt1c2R0QXNzZXRJZAUDbmlsBQNuaWwJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgAAAIAAAAEBWJvbnVzAwkAZgIJAJADAQUJZmxpZ2h0TG9nBQdmbEJvbnVzCQCRAwIFCWZsaWdodExvZwUHZmxCb251cwIABApzZW50QW1vdW50AwkAAAIFBWJvbnVzAgEkCQEFYXNJbnQBCQD8BwQFDHJlc3RDb250cmFjdAINc2VuZFVzZHRQcml6ZQkAzAgCBQh1c2VyQWRkcgUDbmlsBQNuaWwAAAQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEBW1MaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBAZuZXdNYXQJALkJAgkBEXN1YnRyYWN0TWF0ZXJpYWxzAwUMc2hvdWxkVXNlTWF0BQVtTGlzdAUMRVhQTUFURVJJQUxTAgFfBAFlCQESZXhwZWRpdGlvbkludGVybmFsAgUGY2FsbGVyBQR0eElkBAJpZAgIBQFlAl8yAl8xCQCVCgMJAM0IAgkAzQgCCQDNCAIIBQFlAl8xCQELU3RyaW5nRW50cnkCCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQJALkJAgkAzAgCCAgFAWUCXzICXzIJAMwIAgIBTAkAzAgCBQJpZAUDbmlsAgFfCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoBQVuZXdIUAkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQDMCAIFBm5ld01hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgUCaWQFCnNlbnRBbW91bnQBDGFwcGx5Qm9udXNlcwILbGFuZEFzc2V0SWQGcGllY2VzBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAQJYXJ0UGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkAAAEBGFkZDYJAGkCBQppbmZyYUxldmVsAAYEBGFkZDcJAGkCBQppbmZyYUxldmVsAAcJAGQCCQBkAgUPREFJTFlSRVNCWVBJRUNFCQBrAwUPREFJTFlSRVNCWVBJRUNFCQBkAgkAZAIFCmluZnJhTGV2ZWwFBGFkZDYJAGgCAAIFBGFkZDcABQkAawMFD0RBSUxZUkVTQllQSUVDRQUJYXJ0UGllY2VzCQBoAgUGcGllY2VzAAUBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwRhZGRyCWNsYWltTW9kZQ1sYW5kQXNzZXRJZEluBA0kdDAyMjcwNjIzMjQ1AwkAAAIFCWNsYWltTW9kZQULY2xhaW1Nb2RlV2gJAJQKAgUNbGFuZEFzc2V0SWRJbgkBC3ZhbHVlT3JFbHNlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAgAEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04EA2xvYwkAtQkCCQEFdmFsdWUBBQtjdXJMb2NhdGlvbgIBXwMJAQIhPQIJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAgFMCQACAQkArAICCQCsAgICFkR1Y2sgbG9jYXRpb24gdHlwZSBpcyAJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAhEsIGJ1dCBzaG91bGQgYmUgTAkAlAoCCQCRAwIFA2xvYwUIbG9jSWR4SWQFC2R1Y2tBc3NldElkBAtsYW5kQXNzZXRJZAgFDSR0MDIyNzA2MjMyNDUCXzEEBmR1Y2tJZAgFDSR0MDIyNzA2MjMyNDUCXzIEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQECXNhdmVkVGltZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCfCAEFB3RpbWVLZXkJAKwCAgkArAICAgVMYW5kIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQBZAkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8JAJYKBAUGZHVja0lkBQtsYW5kQXNzZXRJZAUBZAUJc2F2ZWRUaW1lARBjbGFpbVJlc0ludGVybmFsBARhZGRyBmFtb3VudAljbGFpbU1vZGUNbGFuZEFzc2V0SWRJbgMJAGYCAAAFBmFtb3VudAkAAgECD05lZ2F0aXZlIGFtb3VudAQBYwkBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwUEYWRkcgUJY2xhaW1Nb2RlBQ1sYW5kQXNzZXRJZEluBAhsYW5kU2l6ZQkAkQMCCAUBYwJfMwULcmVjTGFuZFNpemUEDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCCAUBYwJfMwULcmVjVGVycmFpbnMECWRlbHRhVGltZQkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wCAUBYwJfNAMJAGYCAAAFCWRlbHRhVGltZQkAAgEJAKwCAgkArAICCQCsAgICJlNhdmVkIHRpbWVzdGFtcCBpcyBpbiBmdXR1cmUsIHNhdmVkID0gCQCkAwEIBQFjAl80AgwsIGN1cnJlbnQgPSAJAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXAEBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEFCGxhbmRTaXplBBZkYWlseVByb2R1Y3Rpb25CeVBpZWNlCQEMYXBwbHlCb251c2VzAggFAWMCXzIFBnBpZWNlcwQIYXZhaWxSZXMJAGsDBQlkZWx0YVRpbWUJAGgCBRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlBQZwaWVjZXMFCURBWU1JTExJUwMJAGYCBQZhbW91bnQFCGF2YWlsUmVzCQACAQkArAICCQCsAgIJAKwCAgIiTm90IGVub3VnaCByZXNvdXJjZXMsIGF2YWlsYWJsZSA9IAkApAMBBQhhdmFpbFJlcwIOLCByZXF1ZXN0ZWQgPSAJAKQDAQUGYW1vdW50BAxuZXdEZWx0YVRpbWUJAGsDCQBlAgUIYXZhaWxSZXMFBmFtb3VudAUJREFZTUlMTElTCQBoAgUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQUGcGllY2VzBAxuZXdUaW1lc3RhbXAJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUMbmV3RGVsdGFUaW1lBAlsYW5kSW5kZXgJAGkCBQZwaWVjZXMFBVNTSVpFBApyZXNUb0NsYWltCQEJdmlydENsYWltBAUNdGVycmFpbkNvdW50cwkAZQIFCWRlbHRhVGltZQUMbmV3RGVsdGFUaW1lBQlsYW5kSW5kZXgFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UEBXdoS2V5CQESa2V5V2FyZWhvdXNlQnlMYW5kAQgFAWMCXzIECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBCAUBYwJfMgAABAljdXJyZW50V2gJAQxnZXRXYXJlaG91c2UDBQV3aEtleQUJbGFuZEluZGV4BQppbmZyYUxldmVsBARsb2Z0CQC1CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeExPRlQCAV8EC3doU3BhY2VMZWZ0CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQMDCQAAAgUJY2xhaW1Nb2RlBQtjbGFpbU1vZGVXaAkAZgIFBmFtb3VudAULd2hTcGFjZUxlZnQHCQACAQkArAICCQCsAgICBU9ubHkgCQCkAwEFC3doU3BhY2VMZWZ0Ahggc3BhY2UgbGVmdCBpbiB3YXJlaG91c2UEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBCAUBYwJfMQQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BA5jdXJyZW50UGFja1JlcwkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwIBXwQMY3VycmVudFdoUmVzCQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeFJlcwIBXwQNJHQwMjU2MTkyNjQ5MAMJAAACBQljbGFpbU1vZGUFC2NsYWltTW9kZVdoCQCWCgQJAQZhZGRSZXMFBQxjdXJyZW50V2hSZXMFDXRlcnJhaW5Db3VudHMJAGUCBQlkZWx0YVRpbWUFDG5ld0RlbHRhVGltZQUJbGFuZEluZGV4BRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAgFCnJlc1RvQ2xhaW0CXzIJAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQgFCnJlc1RvQ2xhaW0CXzIDCQAAAgUJY2xhaW1Nb2RlBQ1jbGFpbU1vZGVEdWNrCQCWCgQJAJEDAgUJY3VycmVudFdoBQh3aElkeFJlcwkBBmFkZFJlcwUFDmN1cnJlbnRQYWNrUmVzBQ10ZXJyYWluQ291bnRzCQBlAgUJZGVsdGFUaW1lBQxuZXdEZWx0YVRpbWUFCWxhbmRJbmRleAUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQQFZGlzdHIJAQ1kaXN0cmlidXRlUmVzBAUMY3VycmVudFdoUmVzBQ5jdXJyZW50UGFja1JlcwUKcmVzVG9DbGFpbQULd2hTcGFjZUxlZnQEBHdoQW0JAJcDAQkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQkAzAgCCAUKcmVzVG9DbGFpbQJfMgUDbmlsCQCWCgQIBQVkaXN0cgJfMQgFBWRpc3RyAl8yCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkBQR3aEFtCQBlAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUFBHdoQW0EBXdoUmVzCAUNJHQwMjU2MTkyNjQ5MAJfMQQFYnBSZXMIBQ0kdDAyNTYxOTI2NDkwAl8yBAVsb2Z0TwgFDSR0MDI1NjE5MjY0OTACXzMEBWxvZnRGCAUNJHQwMjU2MTkyNjQ5MAJfNAkAlwoFCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEIBQFjAl8yBQxuZXdUaW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKTEFORFBSRUZJWAgFAWMCXzIFBGFkZHIFDG5ld1RpbWVzdGFtcAUDbmlsBQVicEtleQkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIFBWJwUmVzCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsBQV3aEtleQkAzAgCCQCRAwIFCWN1cnJlbnRXaAULd2hJZHhMZXZlbHMJAMwIAgUFd2hSZXMJAMwIAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0CQDMCAIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QJAMwIAgkAuQkCCQDMCAIJAJEDAgUEbG9mdAUJdm9sTG9ja2VkCQDMCAIJAKQDAQUFbG9mdE8JAMwIAgkApAMBBQVsb2Z0RgkAzAgCCQCRAwIFBGxvZnQFCHZvbFRvdGFsBQNuaWwCAV8FA25pbAEIY2xhaW1BbGwEBGFkZHILbGFuZEFzc2V0SWQGcGllY2VzCWNsYWltTW9kZQQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAQJc2F2ZWRUaW1lCQEFdmFsdWUBCQCfCAEFB3RpbWVLZXkECGF2YWlsUmVzCQBoAgkAawMJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUJc2F2ZWRUaW1lCQEMYXBwbHlCb251c2VzAgULbGFuZEFzc2V0SWQFBnBpZWNlcwUJREFZTUlMTElTBQZwaWVjZXMJARBjbGFpbVJlc0ludGVybmFsBAUEYWRkcgUIYXZhaWxSZXMFCWNsYWltTW9kZQULbGFuZEFzc2V0SWQBDXVwSW5mcmFDb21tb24EDHNob3VsZFVzZU1hdAZjYWxsZXINcGF5bWVudEFtb3VudAtsYW5kQXNzZXRJZAQEYWRkcgkApQgBBQZjYWxsZXIEAWMJARRjaGVja0NsYWltQ29uZGl0aW9ucwMFBGFkZHIFE2NsYWltTW9kZVdoVGhlbkR1Y2sFC2xhbmRBc3NldElkBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIIBQFjAl8zBQtyZWNMYW5kU2l6ZQQIaW5mcmFLZXkJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQgFAWMCXzIECGN1ckxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEFCGluZnJhS2V5AAADCQBnAgUIY3VyTGV2ZWwAAwkAAgECJkN1cnJlbnRseSBtYXggaW5mcmFzdHJ1Y3R1cmUgbGV2ZWwgPSAzBAhuZXdMZXZlbAkAZAIFCGN1ckxldmVsAAEEBGNvc3QJAGsDBRVJbmZyYVVwZ3JhZGVDb3N0U1VzZHQJAGgCBQZwaWVjZXMFCG5ld0xldmVsBQVTU0laRQMDCQEBIQEFDHNob3VsZFVzZU1hdAkBAiE9AgUNcGF5bWVudEFtb3VudAUEY29zdAcJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQRjb3N0BAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQgFAWMCXzEEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQFbUxpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8EBm5ld01hdAkAuQkCCQERc3VidHJhY3RNYXRlcmlhbHMDBQxzaG91bGRVc2VNYXQFBW1MaXN0CQBrAwURSW5mcmFVcGdyYWRlQ29zdFMJAGgCBQZwaWVjZXMFCG5ld0xldmVsBQVTU0laRQIBXwQLY2xhaW1SZXN1bHQJAQhjbGFpbUFsbAQFBGFkZHIIBQFjAl8yBQZwaWVjZXMFE2NsYWltTW9kZVdoVGhlbkR1Y2sEBndoRGF0YQgFC2NsYWltUmVzdWx0Al81BAZvbGRWb2wJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEJAJEDAgUGd2hEYXRhBQt3aElkeExldmVscwQKbmV3Vm9sRGF0YQkAuQkCCQDMCAIJAJEDAgkAtQkCCQCRAwIFBndoRGF0YQULd2hJZHhMZXZlbHMCAV8AAAkAzAgCCQCkAwEFCG5ld0xldmVsBQNuaWwCAV8EBm5ld1ZvbAkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQUKbmV3Vm9sRGF0YQQEbG9mdAkAtQkCCQCRAwIFBndoRGF0YQUJd2hJZHhMT0ZUAgFfBApuZXdMb2Z0U3RyCQC5CQIJAMwIAgkAkQMCBQRsb2Z0BQl2b2xMb2NrZWQJAMwIAgkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAkAzAgCCQCkAwEJAGUCCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUFBm5ld1ZvbAUGb2xkVm9sCQDMCAIJAKQDAQUGbmV3Vm9sBQNuaWwCAV8JAJQKAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQhpbmZyYUtleQUIbmV3TGV2ZWwJAMwIAgkBDEludGVnZXJFbnRyeQIJAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICCAUBYwJfMgUEYWRkcgUIbmV3TGV2ZWwJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAggFC2NsYWltUmVzdWx0Al8zBQhicElkeFJlcwkAzAgCBQZuZXdNYXQJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwCAToJAMwIAgkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al80CQC5CQIJAMwIAgUKbmV3Vm9sRGF0YQkAzAgCCQCRAwIFBndoRGF0YQUId2hJZHhSZXMJAMwIAgkAkQMCBQZ3aERhdGEFCHdoSWR4TWF0CQDMCAIJAJEDAgUGd2hEYXRhBQl3aElkeFByb2QJAMwIAgUKbmV3TG9mdFN0cgUDbmlsAgE6BQNuaWwIBQtjbGFpbVJlc3VsdAJfMQUIbmV3TGV2ZWwBEmFjdGl2YXRlT25ib2FyZEFydAEEYWRkcgAAARJhY3RpdmF0ZVByZXNhbGVBcnQCBGFkZHINbGFuZEFzc2V0SWRJbgQBYwkBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwUEYWRkcgUTY2xhaW1Nb2RlV2hUaGVuRHVjawUNbGFuZEFzc2V0SWRJbgQLbGFuZEFzc2V0SWQIBQFjAl8yBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIIBQFjAl8zBQtyZWNMYW5kU2l6ZQQNYWN0aXZhdGlvbktleQkBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQDCQBmAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ1hY3RpdmF0aW9uS2V5AAAAAAkAAgECJVByZXNhbGUgYXJ0aWZhY3QgaXMgYWxyZWFkeSBhY3RpdmF0ZWQDCQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIIBQFjAl8zBQpyZWNMYW5kTnVtBQ9QUkVTQUxFTlVNTEFORFMJAAIBCQCsAgIJAKwCAgkArAICBQpMQU5EUFJFRklYAgEgBQtsYW5kQXNzZXRJZAIlIGlzIG5vdCBlbGlnaWJsZSBmb3IgcHJlc2FsZSBhcnRpZmFjdAQLY2xhaW1SZXN1bHQJAQhjbGFpbUFsbAQFBGFkZHIFC2xhbmRBc3NldElkBQZwaWVjZXMFE2NsYWltTW9kZVdoVGhlbkR1Y2sJAM0IAgkAzQgCCQDNCAIJAM0IAggFC2NsYWltUmVzdWx0Al8xCQEMSW50ZWdlckVudHJ5AgUNYWN0aXZhdGlvbktleQUGcGllY2VzCQEMSW50ZWdlckVudHJ5AgkBJWtleUxhbmRBcnRTdGF0dXNCeVR5cGVBc3NldElkQW5kT3duZXIDBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAUEYWRkcgUGcGllY2VzCQELU3RyaW5nRW50cnkCCAULY2xhaW1SZXN1bHQCXzIJALkJAggFC2NsYWltUmVzdWx0Al8zAgE6CQELU3RyaW5nRW50cnkCCAULY2xhaW1SZXN1bHQCXzQJALkJAggFC2NsYWltUmVzdWx0Al81AgE6AQ1tZXJnZUludGVybmFsBwtuZXdMYW5kU2l6ZQhuZXdMZXZlbAdmb3JtdWxhBGFkZHIMbGFuZEFzc2V0SWRzBHR4SWQHbmVlZE1hdAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkCgEKY2hlY2tNZXJnZQIDYWNjC2xhbmRBc3NldElkBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkBAlzYXZlZFRpbWUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBBQd0aW1lS2V5CQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQBZAkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8ECWNvbnRpbmVudAkAkQMCBQFkBQxyZWNDb250aW5lbnQDAwkBAiE9AggFA2FjYwJfMwIACQECIT0CCAUDYWNjAl8zBQljb250aW5lbnQHCQACAQIuTGFuZHMgc2hvdWxkIGJlIG9uIHRoZSBzYW1lIGNvbnRpbmVudCB0byBtZXJnZQQIbGFuZFNpemUJAJEDAgUBZAULcmVjTGFuZFNpemUEB3NpemVzSW4IBQNhY2MCXzEEAWkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAswkCBQdzaXplc0luBQhsYW5kU2l6ZQInWW91IGhhdmVuJ3QgcGFzc2VkIGFsbCB0aGUgbGFuZHMgbmVlZGVkBAhzaXplc091dAkArAICCQCvAgIFB3NpemVzSW4FAWkJALACAgUHc2l6ZXNJbgkAZAIFAWkAAQQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQUIbGFuZFNpemUEBGFydHMJAGQCCAUDYWNjAl8yCQELdmFsdWVPckVsc2UCCQCfCAEJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkAAAECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAhyZXFMZXZlbAQHJG1hdGNoMAUIbGFuZFNpemUDCQAAAgIBUwUHJG1hdGNoMAADAwkAAAICAU0FByRtYXRjaDAABAMJAAACAgFMBQckbWF0Y2gwAAUDCQAAAgICWEwFByRtYXRjaDAABgkAAgECGk9ubHkgUywgTSwgTCwgWEwgY2FuIG1lcmdlAwkBAiE9AgUKaW5mcmFMZXZlbAUIcmVxTGV2ZWwJAAIBAiJBbGwgbGFuZHMgc2hvdWxkIGJlIG1heGVkIHRvIG1lcmdlBAdsYW5kTnVtCQCRAwIFAWQFCnJlY0xhbmROdW0EDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCBQFkBQtyZWNUZXJyYWlucwQJZGVsdGFUaW1lCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFCXNhdmVkVGltZQMJAGYCAAAFCWRlbHRhVGltZQkAAgEJAKwCAgkArAICCQCsAgICJlNhdmVkIHRpbWVzdGFtcCBpcyBpbiBmdXR1cmUsIHNhdmVkID0gCQCkAwEFCXNhdmVkVGltZQIMLCBjdXJyZW50ID0gCQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wBBZkYWlseVByb2R1Y3Rpb25CeVBpZWNlCQEMYXBwbHlCb251c2VzAgULbGFuZEFzc2V0SWQFBnBpZWNlcwQJbGFuZEluZGV4CQBpAgUGcGllY2VzBQVTU0laRQQFYnBSZXMJAQZhZGRSZXMFCQC1CQIIBQNhY2MCXzQCAV8FDXRlcnJhaW5Db3VudHMFCWRlbHRhVGltZQUJbGFuZEluZGV4BRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlBAVwcm9wcwkBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwECQC1CQIIBQNhY2MCXzYCAV8FDXRlcnJhaW5Db3VudHMFCWxhbmRJbmRleAD///////////8BBAVsYW5kcwgFA2FjYwJfNwQDaWR4CQDPCAIFBWxhbmRzBQtsYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEFA2lkeAkAAgEJAKwCAgIgWW91ciBzdGFrZWQgbGFuZHMgZG9uJ3QgY29udGFpbiAFC2xhbmRBc3NldElkBAljdXN0b21LZXkJARprZXlMYW5kQXNzZXRJZFRvQ3VzdG9tTmFtZQEFC2xhbmRBc3NldElkBApjdXN0b21OYW1lCQELdmFsdWVPckVsc2UCCQCiCAEFCWN1c3RvbUtleQIACQCaCggFCHNpemVzT3V0BQRhcnRzBQljb250aW5lbnQFBWJwUmVzCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIIBQNhY2MCXzUJAQtEZWxldGVFbnRyeQEJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQJAQtEZWxldGVFbnRyeQEJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKTEFORFBSRUZJWAULbGFuZEFzc2V0SWQFBGFkZHIJAQtEZWxldGVFbnRyeQEJARBrZXlMYW5kVG9Bc3NldElkAQUHbGFuZE51bQkBC0RlbGV0ZUVudHJ5AQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAgULbGFuZEFzc2V0SWQFBGFkZHIJAQtEZWxldGVFbnRyeQEJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQEla2V5TGFuZEFydFN0YXR1c0J5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkBQRhZGRyCQELRGVsZXRlRW50cnkBCQERa2V5TGFuZE51bVRvT3duZXIBBQdsYW5kTnVtCQELRGVsZXRlRW50cnkBCQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQJAQtEZWxldGVFbnRyeQEFCWN1c3RvbUtleQkBC0RlbGV0ZUVudHJ5AQkBGmtleUxhbmRDdXN0b21OYW1lVG9Bc3NldElkAQUKY3VzdG9tTmFtZQkBBEJ1cm4CCQDZBAEFC2xhbmRBc3NldElkAAEFBXByb3BzCQDRCAIFBWxhbmRzCQEFdmFsdWUBBQNpZHgJAGQCCAUDYWNjAl84BQZwaWVjZXMEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAdwcm9wU3RyCQELdmFsdWVPckVsc2UCCQCiCAEJARFrZXlSZXNQcm9wb3J0aW9ucwACCzBfMF8wXzBfMF8wBAhsYW5kc0tleQkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFBGFkZHIECGxhbmRzU3RyCQCiCAEFCGxhbmRzS2V5BAdsYW5kc0luAwkBCWlzRGVmaW5lZAEFCGxhbmRzU3RyCQC9CQIJAQV2YWx1ZQEFCGxhbmRzU3RyAgFfBQNuaWwEAXIKAAIkbAUMbGFuZEFzc2V0SWRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAmgoIBQdmb3JtdWxhAAACAAkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMFA25pbAUHcHJvcFN0cgUHbGFuZHNJbgAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQpjaGVja01lcmdlAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQQJY29udGluZW50CAUBcgJfMwQMY29udGluZW50SWR4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAM8IAgUKY29udGluZW50cwUJY29udGluZW50CQCsAgICE1Vua25vd24gY29udGluZW50OiAFCWNvbnRpbmVudAQIdGVycmFpbnMJAQtnZW5UZXJyYWlucwIJAQNhYnMBCQCeAwEFBHR4SWQFDGNvbnRpbmVudElkeAQHZnJlZU51bQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQESa2V5TmV4dEZyZWVMYW5kTnVtAAkAZAIFD1BSRVNBTEVOVU1MQU5EUwABBApuZXdMYW5kTnVtCQCkAwEFB2ZyZWVOdW0EBWlzc3VlCQDCCAUJAQduZnROYW1lAgUKbmV3TGFuZE51bQULbmV3TGFuZFNpemUJALkJAgkAzAgCBQpuZXdMYW5kTnVtCQDMCAIFC25ld0xhbmRTaXplCQDMCAIFCHRlcnJhaW5zCQDMCAIFCWNvbnRpbmVudAUDbmlsAgFfAAEAAAcEB2Fzc2V0SWQJALgIAQUFaXNzdWUEDm5ld0xhbmRBc3NldElkCQDYBAEFB2Fzc2V0SWQEBm5ld01hdAkAuQkCCQERc3VidHJhY3RNYXRlcmlhbHMDCQBmAgUHbmVlZE1hdAAACQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBQduZWVkTWF0AgFfBAlwaWVjZXNLZXkJARZrZXlTdGFrZWRQaWVjZXNCeU93bmVyAQUEYWRkcgQMc3Rha2VkUGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEFCXBpZWNlc0tleQAACQCUCgIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIIBQFyAl81AwkAZgIJAJADAQgFAXICXzcAAAkBC1N0cmluZ0VudHJ5AgUIbGFuZHNLZXkJALsJAggFAXICXzcCAV8JAQtEZWxldGVFbnRyeQEFCGxhbmRzS2V5CQEMSW50ZWdlckVudHJ5AgUJcGllY2VzS2V5AwkAZgIIBQFyAl84BQxzdGFrZWRQaWVjZXMAAAkAZQIFDHN0YWtlZFBpZWNlcwgFAXICXzgJAQxJbnRlZ2VyRW50cnkCCQESa2V5TmV4dEZyZWVMYW5kTnVtAAkAZAIFB2ZyZWVOdW0AAQUFaXNzdWUJAQtTdHJpbmdFbnRyeQIJARBrZXlMYW5kVG9Bc3NldElkAQUKbmV3TGFuZE51bQUObmV3TGFuZEFzc2V0SWQJAQtTdHJpbmdFbnRyeQIJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQ5uZXdMYW5kQXNzZXRJZAUEYWRkcgkBC1N0cmluZ0VudHJ5AgkBEWtleUxhbmROdW1Ub093bmVyAQUKbmV3TGFuZE51bQUEYWRkcgkBDEludGVnZXJFbnRyeQIJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFDm5ld0xhbmRBc3NldElkCAUBcgJfMgkBDEludGVnZXJFbnRyeQIJASVrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKQVJUUFJFU0FMRQUObmV3TGFuZEFzc2V0SWQFBGFkZHIIBQFyAl8yCQEMSW50ZWdlckVudHJ5AgkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQ5uZXdMYW5kQXNzZXRJZAUIbmV3TGV2ZWwJAQxJbnRlZ2VyRW50cnkCCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAgUObmV3TGFuZEFzc2V0SWQFBGFkZHIFCG5ld0xldmVsCQELU3RyaW5nRW50cnkCBQVicEtleQkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAggFAXICXzQJAMwIAgUGbmV3TWF0CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6CQELU3RyaW5nRW50cnkCCQERa2V5UmVzUHJvcG9ydGlvbnMACAUBcgJfNgkBC1N0cmluZ0VudHJ5AgkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkCQC5CQIJAMwIAgUJY29udGluZW50CQDMCAICAUwJAMwIAgUObmV3TGFuZEFzc2V0SWQFA25pbAIBXwkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUEYWRkcgABBQdhc3NldElkBQ5uZXdMYW5kQXNzZXRJZAEDczJtAwRhZGRyDGxhbmRBc3NldElkcwR0eElkCQENbWVyZ2VJbnRlcm5hbAcCAU0AAwIEU1NTUwUEYWRkcgUMbGFuZEFzc2V0SWRzBQR0eElkAAABA20ybAUEYWRkcgxsYW5kQXNzZXRJZHMEdHhJZAxzaG91bGRVc2VNYXQNcGF5bWVudEFtb3VudAQEY29zdAkAaAIFFUluZnJhVXBncmFkZUNvc3RTVXNkdAAEAwMJAQEhAQUMc2hvdWxkVXNlTWF0CQECIT0CBQ1wYXltZW50QW1vdW50BQRjb3N0BwkAAgEJAKwCAgIbUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgCQCkAwEFBGNvc3QJAQ1tZXJnZUludGVybmFsBwIBTAAEAgNTTU0FBGFkZHIFDGxhbmRBc3NldElkcwUEdHhJZAkAaAIFEUluZnJhVXBncmFkZUNvc3RTAAQBBGwyeGwFBGFkZHIMbGFuZEFzc2V0SWRzBHR4SWQMc2hvdWxkVXNlTWF0DXBheW1lbnRBbW91bnQEBGNvc3QJAGgCBRVJbmZyYVVwZ3JhZGVDb3N0U1VzZHQALwMDCQEBIQEFDHNob3VsZFVzZU1hdAkBAiE9AgUNcGF5bWVudEFtb3VudAUEY29zdAcJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQRjb3N0CQENbWVyZ2VJbnRlcm5hbAcCAlhMAAUCBVNTU01MBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQJAGgCBRFJbmZyYVVwZ3JhZGVDb3N0UwAvAQZ4bDJ4eGwFBGFkZHIMbGFuZEFzc2V0SWRzBHR4SWQMc2hvdWxkVXNlTWF0DXBheW1lbnRBbW91bnQEBGNvc3QJAGgCBRVJbmZyYVVwZ3JhZGVDb3N0U1VzZHQANgMDCQEBIQEFDHNob3VsZFVzZU1hdAkBAiE9AgUNcGF5bWVudEFtb3VudAUEY29zdAcJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQRjb3N0CQENbWVyZ2VJbnRlcm5hbAcCA1hYTAAGAgNMWEwFBGFkZHIFDGxhbmRBc3NldElkcwUEdHhJZAkAaAIFEUluZnJhVXBncmFkZUNvc3RTADYBC21lcmdlQ29tbW9uBQxzaG91bGRVc2VNYXQEYWRkcg1wYXltZW50QW1vdW50DGxhbmRBc3NldElkcwR0eElkBAttZXJnZVJlc3VsdAQHJG1hdGNoMAkAkAMBBQxsYW5kQXNzZXRJZHMDCQAAAgAEBQckbWF0Y2gwCQEDczJtAwUEYWRkcgUMbGFuZEFzc2V0SWRzBQR0eElkAwkAAAIAAwUHJG1hdGNoMAkBA20ybAUFBGFkZHIFDGxhbmRBc3NldElkcwUEdHhJZAUMc2hvdWxkVXNlTWF0BQ1wYXltZW50QW1vdW50AwkAAAIABQUHJG1hdGNoMAkBBGwyeGwFBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQFDHNob3VsZFVzZU1hdAUNcGF5bWVudEFtb3VudAMJAAACAAIFByRtYXRjaDAJAQZ4bDJ4eGwFBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQFDHNob3VsZFVzZU1hdAUNcGF5bWVudEFtb3VudAkAAgECDVVua25vd24gbWVyZ2UFC21lcmdlUmVzdWx0AQZwcm9sb2cBAWkDAwkBAiE9AggFAWkMb3JpZ2luQ2FsbGVyBQxyZXN0Q29udHJhY3QJAQt2YWx1ZU9yRWxzZQIJAKAIAQkBCmtleUJsb2NrZWQABwcJAAIBAh9Db250cmFjdHMgYXJlIHVuZGVyIG1haW50ZW5hbmNlCQELU3RyaW5nRW50cnkCCQERa2V5TGFzdFR4SWRCeVVzZXIBCQClCAEIBQFpDG9yaWdpbkNhbGxlcgkA2AQBCAUBaQ10cmFuc2FjdGlvbklkHgFpAQ1jb25zdHJ1Y3RvclYxAQhyZXN0QWRkcgMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEVBlcm1pc3Npb24gZGVuaWVkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ5rZXlSZXN0QWRkcmVzcwAFCHJlc3RBZGRyBQNuaWwBaQEKc2V0QmxvY2tlZAEJaXNCbG9ja2VkAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRcGVybWlzc2lvbiBkZW5pZWQJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQprZXlCbG9ja2VkAAUJaXNCbG9ja2VkBQNuaWwBaQEJc3Rha2VMYW5kAAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAdhc3NldElkCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyAwkBAiE9AggFA3BtdAZhbW91bnQAAQkAAgEJAKwCAgkArAICAgRORlQgBQpMQU5EUFJFRklYAiQgdG9rZW4gc2hvdWxkIGJlIGF0dGFjaGVkIGFzIHBheW1lbnQEBWFzc2V0CQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQDCQECIT0CCAUFYXNzZXQGaXNzdWVyBQR0aGlzCQACAQIXVW5rbm93biBpc3N1ZXIgb2YgdG9rZW4DCQEBIQEJAQhjb250YWlucwIIBQVhc3NldARuYW1lBQpMQU5EUFJFRklYCQACAQkArAICCQCsAgICCU9ubHkgTkZUIAUKTEFORFBSRUZJWAIUIHRva2VucyBhcmUgYWNjZXB0ZWQEC2xhbmROdW1TaXplCQCwAgIIBQVhc3NldARuYW1lAAQEB2xhbmROdW0DCQEIY29udGFpbnMCBQtsYW5kTnVtU2l6ZQIDWFhMCQCzAgIFC2xhbmROdW1TaXplAAMDCQEIY29udGFpbnMCBQtsYW5kTnVtU2l6ZQICWEwJALMCAgULbGFuZE51bVNpemUAAgkAswICBQtsYW5kTnVtU2l6ZQABAwkBASEBCQEJaXNEZWZpbmVkAQkAtgkBBQdsYW5kTnVtCQACAQkArAICAh5DYW5ub3QgcGFyc2UgbGFuZCBudW1iZXIgZnJvbSAIBQVhc3NldARuYW1lBAtsYW5kQXNzZXRJZAkA2AQBBQdhc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAwkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQISIGlzIGFscmVhZHkgc3Rha2VkBAFkCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIFAWQFC3JlY1RlcnJhaW5zBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIFAWQFC3JlY0xhbmRTaXplBAVwcm9wcwkBEXVwZGF0ZVByb3BvcnRpb25zAwUNdGVycmFpbkNvdW50cwkAaQIFBnBpZWNlcwUFU1NJWkUAAQQJYXJ0UGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkAAAECGxhbmRzS2V5CQEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQUHYWRkcmVzcwQIbGFuZHNTdHIJAKIIAQUIbGFuZHNLZXkEBWxhbmRzAwkBCWlzRGVmaW5lZAEFCGxhbmRzU3RyCQC9CQIJAQV2YWx1ZQEFCGxhbmRzU3RyAgFfBQNuaWwDCQEPY29udGFpbnNFbGVtZW50AgUFbGFuZHMFC2xhbmRBc3NldElkCQACAQkArAICAiJZb3VyIHN0YWtlZCBsYW5kcyBhbHJlYWR5IGNvbnRhaW4gBQtsYW5kQXNzZXRJZAQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAJAMwIAgkBDEludGVnZXJFbnRyeQIFB3RpbWVLZXkIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkxBTkRQUkVGSVgFC2xhbmRBc3NldElkBQdhZGRyZXNzCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQELU3RyaW5nRW50cnkCBQhsYW5kc0tleQkAuwkCCQDNCAIFBWxhbmRzBQtsYW5kQXNzZXRJZAIBXwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFmtleVN0YWtlZFBpZWNlc0J5T3duZXIBBQdhZGRyZXNzCQBkAgkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEFB2FkZHJlc3MAAAUGcGllY2VzCQDMCAIJAQtTdHJpbmdFbnRyeQIJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5TGFuZE51bVRvT3duZXIBBQdsYW5kTnVtBQdhZGRyZXNzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEla2V5TGFuZEFydFN0YXR1c0J5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkBQdhZGRyZXNzBQlhcnRQaWVjZXMJAMwIAgkBDEludGVnZXJFbnRyeQIJAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwUKaW5mcmFMZXZlbAkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5UmVzUHJvcG9ydGlvbnMABQVwcm9wcwkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAFpAQt1bnN0YWtlTGFuZAENbGFuZEFzc2V0SWRJbgQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpBmNhbGxlcgQBYwkBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwUEYWRkcgUNY2xhaW1Nb2RlRHVjawUNbGFuZEFzc2V0SWRJbgQLbGFuZEFzc2V0SWQIBQFjAl8yBAhsYW5kc0tleQkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFBGFkZHIEDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCCAUBYwJfMwULcmVjVGVycmFpbnMEBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAggFAWMCXzMFC3JlY0xhbmRTaXplBAVwcm9wcwkBEXVwZGF0ZVByb3BvcnRpb25zAwUNdGVycmFpbkNvdW50cwkAaQIFBnBpZWNlcwUFU1NJWkUA////////////AQQLY2xhaW1SZXN1bHQJAQhjbGFpbUFsbAQFBGFkZHIFC2xhbmRBc3NldElkBQZwaWVjZXMFDWNsYWltTW9kZUR1Y2sEBWxhbmRzCQC9CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUIbGFuZHNLZXkCAAIBXwQDaWR4CQDPCAIFBWxhbmRzBQtsYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEFA2lkeAkAAgEJAKwCAgIgWW91ciBzdGFrZWQgbGFuZHMgZG9uJ3QgY29udGFpbiAFC2xhbmRBc3NldElkBAF0CAkBBXZhbHVlAQkA7QcBBQZoZWlnaHQJdGltZXN0YW1wBAtyZWxlYXNlVGltZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQtnb3ZDb250cmFjdAkBFWtleVVzZXJHd2xSZWxlYXNlVGltZQEFBGFkZHIAAAMJAGcCBQtyZWxlYXNlVGltZQUBdAkAAgEJAKwCAgI5WW91ciBnV0wgYXJlIHRha2luZyBwYXJ0IGluIHZvdGluZywgY2Fubm90IHVuc3Rha2UgdW50aWwgCQCkAwEFC3JlbGVhc2VUaW1lBAlwaWVjZXNLZXkJARZrZXlTdGFrZWRQaWVjZXNCeU93bmVyAQUEYWRkcgQMc3Rha2VkUGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEFCXBpZWNlc0tleQAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABCQDZBAEFC2xhbmRBc3NldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYBQtsYW5kQXNzZXRJZAUEYWRkcgkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5UmVzUHJvcG9ydGlvbnMABQVwcm9wcwkAzAgCCQELU3RyaW5nRW50cnkCCAULY2xhaW1SZXN1bHQCXzIJALkJAggFC2NsYWltUmVzdWx0Al8zAgE6CQDMCAIDCQBmAgkAkAMBBQVsYW5kcwABCQELU3RyaW5nRW50cnkCBQhsYW5kc0tleQkAuwkCCQDRCAIFBWxhbmRzCQEFdmFsdWUBBQNpZHgCAV8JAQtEZWxldGVFbnRyeQEFCGxhbmRzS2V5CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlwaWVjZXNLZXkDCQBmAgUGcGllY2VzBQxzdGFrZWRQaWVjZXMAAAkAZQIFDHN0YWtlZFBpZWNlcwUGcGllY2VzCQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsAWkBCXN0YWtlRHVjawAEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQHYXNzZXRJZAkBBXZhbHVlAQgFA3BtdAdhc3NldElkBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgMJAQIhPQIIBQNwbXQGYW1vdW50AAEJAAIBCQCsAgIJAKwCAgIETkZUIAUKRFVDS1BSRUZJWAIkIHRva2VuIHNob3VsZCBiZSBhdHRhY2hlZCBhcyBwYXltZW50BAVhc3NldAkBBXZhbHVlAQkA7AcBBQdhc3NldElkAwMJAQIhPQIIBQVhc3NldAZpc3N1ZXIFDWluY3ViYXRvckFkZHIJAQIhPQIIBQVhc3NldAZpc3N1ZXIFC2JyZWVkZXJBZGRyBwkAAgEJAKwCAgkArAICAhJVbmtub3duIGlzc3VlciBvZiAFCkRVQ0tQUkVGSVgCBiB0b2tlbgMJAQEhAQkBCGNvbnRhaW5zAggFBWFzc2V0BG5hbWUFCkRVQ0tQUkVGSVgJAAIBCQCsAgIJAKwCAgIJT25seSBORlQgBQpEVUNLUFJFRklYAhQgdG9rZW5zIGFyZSBhY2NlcHRlZAQKYXNzZXRJZFN0cgkA2AQBBQdhc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFCmFzc2V0SWRTdHIDCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5CQACAQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAhIgaXMgYWxyZWFkeSBzdGFrZWQDCQEJaXNEZWZpbmVkAQkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQdhZGRyZXNzCQACAQkArAICAh1Zb3UgYWxyZWFkeSBzdGFrZWQgb25lIGR1Y2s6IAgFBWFzc2V0BG5hbWUEBmxvY0tleQkBD2tleUR1Y2tMb2NhdGlvbgEFCmFzc2V0SWRTdHIECGxvY2F0aW9uCQCiCAEFBmxvY0tleQQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFCmFzc2V0SWRTdHIECGJhY2twYWNrCQCiCAEFBWJwS2V5CQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFB3RpbWVLZXkIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkRVQ0tQUkVGSVgJANgEAQUHYXNzZXRJZAUHYWRkcmVzcwgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEGtleUR1Y2tJZFRvT3duZXIBBQphc3NldElkU3RyBQdhZGRyZXNzCQDMCAIJAQtTdHJpbmdFbnRyeQIJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFB2FkZHJlc3MFCmFzc2V0SWRTdHIFA25pbAMJAQlpc0RlZmluZWQBBQhsb2NhdGlvbgUDbmlsCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUGbG9jS2V5BQ9ERUZBVUxUTE9DQVRJT04FA25pbAMJAQlpc0RlZmluZWQBBQhiYWNrcGFjawUDbmlsCQDNCAIJAM0IAgkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQIaMDowXzBfMF8wXzBfMDowXzBfMF8wXzBfMDoFA25pbAkBDEludGVnZXJFbnRyeQIJAQ1rZXlEdWNrSGVhbHRoAQUKYXNzZXRJZFN0cgBkBQxwcm9sb2dBY3Rpb24BaQELdW5zdGFrZUR1Y2sBCmFzc2V0SWRTdHIEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQHYXNzZXRJZAkA2QQBBQphc3NldElkU3RyBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgQFYXNzZXQJAQV2YWx1ZQEJAOwHAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBCQDYBAEFB2Fzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkAwkBASEBCQEJaXNEZWZpbmVkAQkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQdhZGRyZXNzCQACAQkArAICCQCsAgICCVRoZSBkdWNrIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARBrZXlEdWNrSWRUb093bmVyAQkA2AQBBQdhc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQdhZGRyZXNzCQACAQIXU3Rha2VkIE5GVCBpcyBub3QgeW91cnMECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQphc3NldElkU3RyBAZoZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoAGQDCQBmAgBkBQZoZWFsdGgJAAIBAiZQbGVhc2UgaGVhbCB5b3VyIGR1Y2sgYmVmb3JlIHVuc3Rha2luZwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQUHYXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBBQd0aW1lS2V5CQDMCAIJAQtEZWxldGVFbnRyeQEFCWtleUhlYWx0aAkAzAgCCQELRGVsZXRlRW50cnkBCQEPa2V5RHVja0xvY2F0aW9uAQUKYXNzZXRJZFN0cgkAzAgCCQELRGVsZXRlRW50cnkBCQEQa2V5RHVja0lkVG9Pd25lcgEFCmFzc2V0SWRTdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpEVUNLUFJFRklYBQphc3NldElkU3RyBQdhZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFB2FkZHJlc3MJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwBaQEIY2xhaW1SZXMCBmFtb3VudA5sYW5kQXNzZXRJZFN0cgQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQGcmVzdWx0CQEQY2xhaW1SZXNJbnRlcm5hbAQFBGFkZHIFBmFtb3VudAUNY2xhaW1Nb2RlRHVjawUObGFuZEFzc2V0SWRTdHIJAJQKAgkAzQgCCQDNCAIJAM0IAggFBnJlc3VsdAJfMQkBC1N0cmluZ0VudHJ5AggFBnJlc3VsdAJfMgkAuQkCCAUGcmVzdWx0Al8zAgE6CQELU3RyaW5nRW50cnkCCAUGcmVzdWx0Al80CQC5CQIIBQZyZXN1bHQCXzUCAToFDHByb2xvZ0FjdGlvbgkAkQMCCAUGcmVzdWx0Al8zBQhicElkeFJlcwFpAQxjbGFpbVJlc1RvV0gCBmFtb3VudA5sYW5kQXNzZXRJZFN0cgQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQGcmVzdWx0CQEQY2xhaW1SZXNJbnRlcm5hbAQFBGFkZHIFBmFtb3VudAULY2xhaW1Nb2RlV2gFDmxhbmRBc3NldElkU3RyCQCUCgIJAM0IAgkAzQgCCQDNCAIIBQZyZXN1bHQCXzEJAQtTdHJpbmdFbnRyeQIIBQZyZXN1bHQCXzIJALkJAggFBnJlc3VsdAJfMwIBOgkBC1N0cmluZ0VudHJ5AggFBnJlc3VsdAJfNAkAuQkCCAUGcmVzdWx0Al81AgE6BQxwcm9sb2dBY3Rpb24JAJEDAggFBnJlc3VsdAJfNQUId2hJZHhSZXMBaQEGZmxpZ2h0AgdtZXNzYWdlA3NpZwQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQEhAQkAxBMDBQdtZXNzYWdlBQNzaWcFA3B1YgkAAgECGHNpZ25hdHVyZSBkb2VzIG5vdCBtYXRjaAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAVwYXJ0cwkAtQkCCQCwCQEFB21lc3NhZ2UCATsECWZsaWdodExvZwkAtQkCCQCRAwIFBXBhcnRzAAACAXwEAmhwCQC1CQIJAJEDAgUJZmxpZ2h0TG9nBQhmbEhlYWx0aAIBXwQFY3VySFAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJocAAABAVuZXdIUAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmhwAAEEC25ld0xvY1R4VmVyCQC1CQIJAJEDAgUFcGFydHMAAQIBOgQLbmV3TG9jYXRpb24JAJEDAgULbmV3TG9jVHhWZXIAAAQEdGltZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWZsaWdodExvZwULZmxUaW1lc3RhbXADAwkAZgIFBHRpbWUJAGQCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAURRklWRU1JTlVURVNNSUxMSVMGCQBmAgkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBRFGSVZFTUlOVVRFU01JTExJUwUEdGltZQkAAgEJAKwCAgkArAICCQCsAgICHHNpZ25hdHVyZSBvdXRkYXRlZDogbG9nVGltZT0JAKQDAQUEdGltZQIJLCBiY1RpbWU9CQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAl0eEZyb21Nc2cJAJEDAgULbmV3TG9jVHhWZXIAAQQGbGFzdFR4CQELdmFsdWVPckVsc2UCCQCiCAEJARFrZXlMYXN0VHhJZEJ5VXNlcgEJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyAgADCQECIT0CBQZsYXN0VHgFCXR4RnJvbU1zZwkAAgEJAKwCAgkArAICCQCsAgICHlR4IGlkcyBkb24ndCBtYXRjaCEgSW4gc3RhdGU6IAUGbGFzdFR4AgosIGluIG1zZzogBQl0eEZyb21Nc2cECHVzZXJBZGRyCQClCAEIBQFpBmNhbGxlcgQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQh1c2VyQWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAxvbGRGcm9tU3RhdGUJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoAGQDCQECIT0CBQxvbGRGcm9tU3RhdGUFBWN1ckhQCQACAQkArAICCQCsAgIJAKwCAgIKb2xkSGVhbHRoPQkApAMBCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aABkAi8gZnJvbSBzdGF0ZSBkb2VzIG5vdCBtYXRjaCBvbmUgZnJvbSBmbGlnaHQgbG9nPQkApAMBBQVjdXJIUAMJAGcCAAAFBWN1ckhQCQACAQIeWW91IGNhbid0IGZseSB3aXRoIHplcm8gaGVhbHRoBAZsb2NLZXkJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQUGbG9jS2V5BQ9ERUZBVUxUTE9DQVRJT04DCQAAAgULbmV3TG9jYXRpb24FC2N1ckxvY2F0aW9uCQACAQIiWW91IGNhbid0IGZseSB0byB0aGUgc2FtZSBsb2NhdGlvbgQFYm9udXMDCQBmAgkAkAMBBQlmbGlnaHRMb2cFB2ZsQm9udXMJAJEDAgUJZmxpZ2h0TG9nBQdmbEJvbnVzAgAECnNlbnRBbW91bnQDAwkAZgIFBW5ld0hQAAAJAAACBQVib251cwIBJAcJAQVhc0ludAEJAPwHBAUMcmVzdENvbnRyYWN0Ag1zZW5kVXNkdFByaXplCQDMCAIFCHVzZXJBZGRyBQNuaWwFA25pbAAACQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUGbG9jS2V5AwkAZgIFBW5ld0hQAAAFC25ld0xvY2F0aW9uBQtjdXJMb2NhdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoBQVuZXdIUAkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAUKc2VudEFtb3VudAFpAQRoZWFsAwpxdWFudGl0eUwxCnF1YW50aXR5TDIKcXVhbnRpdHlMMwQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMDAwkAZgIAAAUKcXVhbnRpdHlMMQYJAGYCAAAFCnF1YW50aXR5TDIGCQBmAgAABQpxdWFudGl0eUwzCQACAQIbUXVhbnRpdHkgY2Fubm90IGJlIG5lZ2F0aXZlBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBANxdHMJAMwIAgUKcXVhbnRpdHlMMQkAzAgCBQpxdWFudGl0eUwyCQDMCAIFCnF1YW50aXR5TDMFA25pbAQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAlvbGRIZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoAGQDCQBnAgUJb2xkSGVhbHRoBQVNQVhIUAkAAgEJAKwCAgkArAICAg9IUCBzaG91bGQgYmUgPCAJAKQDAQUFTUFYSFACCCB0byBoZWFsBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQIcHJvZExpc3QDCQAAAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgAFA25pbAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAV8KAQtpdGVyYXRlUHJvZAIDYWNjC2lnbm9yZWRJdGVtBAFuCAUDYWNjAl8yBAF4AwkAZgIJAJADAQUIcHJvZExpc3QFAW4JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhwcm9kTGlzdAUBbgAAAwkAZgIAAwUBbgQBcQkAkQMCBQNxdHMFAW4DCQBmAgUBcQUBeAkAAgEJAKwCAgkArAICCQCsAgICDllvdSBoYXZlIG9ubHkgCQCkAwEFAXgCBCBvZiAJAJEDAgUJcHJvZFR5cGVzBQFuCQCVCgMJAM0IAggFA2FjYwJfMQkApAMBCQBlAgUBeAUBcQkAZAIFAW4AAQkAZAIIBQNhY2MCXzMJAGgCCQCRAwIFCG1lZEtpdEhwBQFuBQFxCQCVCgMJAM0IAggFA2FjYwJfMQkApAMBBQF4CQBkAgUBbgABCAUDYWNjAl8zBAZyZXN1bHQKAAIkbAUQcHJvZHVjdGlvbk1hdHJpeAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJUKAwUDbmlsAAAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQELaXRlcmF0ZVByb2QCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDUwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgQJbmV3SGVhbHRoCQCXAwEJAMwIAgUFTUFYSFAJAMwIAgkAZAIFCW9sZEhlYWx0aAgFBnJlc3VsdAJfMwUDbmlsCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aAUJbmV3SGVhbHRoCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC6CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAkAzAgCCQC5CQIIBQZyZXN1bHQCXzECAV8FA25pbAIBOgkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAUJbmV3SGVhbHRoAWkBBmhlYWxFUwAEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhpBbGxvd2VkIFVTRFQgcGF5bWVudCBvbmx5IQQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAlvbGRIZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoAGQDCQBmAgUJb2xkSGVhbHRoAAAJAAIBAihIUCBzaG91bGQgYmUgMCB0byBjYWxsIEVtZXJnZW5jeSBTZXJ2aWNlBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQIcHJvZExpc3QDCQAAAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgAFA25pbAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAV8EDW1lZEtpdEFtb3VudDEDCQBmAgkAkAMBBQhwcm9kTGlzdAAACQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvZExpc3QAAAAABA1tZWRLaXRBbW91bnQyAwkAZgIJAJADAQUIcHJvZExpc3QAAQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb2RMaXN0AAEAAAQNbWVkS2l0QW1vdW50MwMJAGYCCQCQAwEFCHByb2RMaXN0AAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhwcm9kTGlzdAACAAADAwMJAGYCBQ1tZWRLaXRBbW91bnQxAAAGCQBmAgUNbWVkS2l0QW1vdW50MgAABgkAZgIFDW1lZEtpdEFtb3VudDMAAAkAAgECH1lvdSBoYXZlIHRvIHVzZSBvd24gTWVkaWNhbCBLaXQECGV4aXN0U3RyCQCdCAIFD2Vjb25vbXlDb250cmFjdAkBDmtleUVzV2FyZWhvdXNlAAQMZXhpc3RBbW91bnRzAwkBCWlzRGVmaW5lZAEFCGV4aXN0U3RyCQC1CQIJAQV2YWx1ZQEFCGV4aXN0U3RyAgFfBQNuaWwEC2V4aXN0QW1vdW50AwkAZgIJAJADAQUMZXhpc3RBbW91bnRzAAAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQxleGlzdEFtb3VudHMAAAAAAwkAZwIAAAULZXhpc3RBbW91bnQJAAIBAjlUaGVyZSBhcmUgbm8gTWVkaWNhbCBLaXRzIEwxIGF0IEVtZXJnZW5jeSBTZXJ2aWNlIHN0b3JhZ2UECW5ld0hlYWx0aAkAZAIFCW9sZEhlYWx0aAkAkQMCBQhtZWRLaXRIcAAABAVuZXdFUwkAuQkCCQDMCAIJAKQDAQkAZQIFC2V4aXN0QW1vdW50AAEJANEIAgUMZXhpc3RBbW91bnRzAAACAV8EBnJlY2lwZQkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgAAAIBXwQIdG90YWxNYXQJARJnZXRSZWNpcGVNYXRlcmlhbHMBBQZyZWNpcGUECHBhY2tTaXplCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGcmVjaXBlBRFyZWNpcGVJZHhQYWNrc2l6ZQQJc2VsbFByaWNlCQBrAwkAaAIFCHRvdGFsTWF0BQpFU1NFTExDT0VGBRBSRVNPVVJDRVBSSUNFTUlOCQBoAgAKBQhwYWNrU2l6ZQMJAQIhPQIIBQNwbXQGYW1vdW50BQlzZWxsUHJpY2UJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQlzZWxsUHJpY2UEBnJlc3VsdAkBCGFzU3RyaW5nAQkA/AcEBQ9lY29ub215Q29udHJhY3QCD3VwZGF0ZUVzU3RvcmFnZQkAzAgCBQVuZXdFUwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQt1c2R0QXNzZXRJZAUJc2VsbFByaWNlBQNuaWwJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoBQluZXdIZWFsdGgJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwFBnJlc3VsdAFpAQ51cGRhdGVCYWNrcGFjawILZHVja0Fzc2V0SWQHbmV3UGFjawQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIIBQFpBmNhbGxlcgUPZWNvbm9teUNvbnRyYWN0CQACAQIRcGVybWlzc2lvbiBkZW5pZWQJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAUHbmV3UGFjawkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAUHbmV3UGFjawFpAQhidXlTTGFuZAAEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhpBbGxvd2VkIFVTRFQgcGF5bWVudCBvbmx5IQMJAQIhPQIIBQNwbXQGYW1vdW50BQdFWFBVU0RUCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUHRVhQVVNEVAQGcmVzdWx0CQESZXhwZWRpdGlvbkludGVybmFsAggFAWkGY2FsbGVyCAUBaQ10cmFuc2FjdGlvbklkCQCUCgIJAM0IAgkAzQgCCAUGcmVzdWx0Al8xCQEOU2NyaXB0VHJhbnNmZXIDBQ9lY29ub215Q29udHJhY3QIBQNwbXQGYW1vdW50BQt1c2R0QXNzZXRJZAUMcHJvbG9nQWN0aW9uCAgFBnJlc3VsdAJfMgJfMQFpAQpleHBlZGl0aW9uAgdtZXNzYWdlA3NpZwQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAZyZXN1bHQJARBleHBlZGl0aW9uQ29tbW9uBQYIBQFpBmNhbGxlcggFAWkNdHJhbnNhY3Rpb25JZAUHbWVzc2FnZQUDc2lnCQCUCgIJAM0IAggFBnJlc3VsdAJfMQUMcHJvbG9nQWN0aW9uCQCUCgIIBQZyZXN1bHQCXzIIBQZyZXN1bHQCXzMBaQEMdXBncmFkZUluZnJhAQtsYW5kQXNzZXRJZAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAZyZXN1bHQJAQ11cEluZnJhQ29tbW9uBAYIBQFpBmNhbGxlcgAABQtsYW5kQXNzZXRJZAkAlAoCCQDNCAIIBQZyZXN1bHQCXzEFDHByb2xvZ0FjdGlvbggFBnJlc3VsdAJfMgFpARB1cGdyYWRlSW5mcmFVc2R0AQtsYW5kQXNzZXRJZAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEVBlcm1pc3Npb24gZGVuaWVkBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQIaQWxsb3dlZCBVU0RUIHBheW1lbnQgb25seSEEBnJlc3VsdAkBDXVwSW5mcmFDb21tb24EBwgFAWkGY2FsbGVyCAUDcG10BmFtb3VudAULbGFuZEFzc2V0SWQJAJQKAgkAzQgCCQDNCAIIBQZyZXN1bHQCXzEJAQ5TY3JpcHRUcmFuc2ZlcgMFD2Vjb25vbXlDb250cmFjdAgFA3BtdAZhbW91bnQFC3VzZHRBc3NldElkBQxwcm9sb2dBY3Rpb24IBQZyZXN1bHQCXzIBaQEQYWN0aXZhdGVBcnRpZmFjdAIHYXJ0TmFtZQtsYW5kQXNzZXRJZAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAZyZXN1bHQEByRtYXRjaDAFB2FydE5hbWUDCQAAAgIHUFJFU0FMRQUHJG1hdGNoMAkBEmFjdGl2YXRlUHJlc2FsZUFydAIJAKUIAQgFAWkGY2FsbGVyBQtsYW5kQXNzZXRJZAkAAgECEFVua25vd24gYXJ0aWZhY3QJAM0IAgUGcmVzdWx0BQxwcm9sb2dBY3Rpb24BaQEKbWVyZ2VMYW5kcwEMbGFuZEFzc2V0SWRzBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBnJlc3VsdAkBC21lcmdlQ29tbW9uBQYJAKUIAQgFAWkGY2FsbGVyAAAFDGxhbmRBc3NldElkcwgFAWkNdHJhbnNhY3Rpb25JZAkAlAoCCQDNCAIIBQZyZXN1bHQCXzEFDHByb2xvZ0FjdGlvbggFBnJlc3VsdAJfMgFpAQ5tZXJnZUxhbmRzVXNkdAEMbGFuZEFzc2V0SWRzBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQIaQWxsb3dlZCBVU0RUIHBheW1lbnQgb25seSEEBnJlc3VsdAkBC21lcmdlQ29tbW9uBQcJAKUIAQgFAWkGY2FsbGVyCAUDcG10BmFtb3VudAUMbGFuZEFzc2V0SWRzCAUBaQ10cmFuc2FjdGlvbklkCQCUCgIJAM0IAgkAzQgCCAUGcmVzdWx0Al8xCQEOU2NyaXB0VHJhbnNmZXIDBQ9lY29ub215Q29udHJhY3QIBQNwbXQGYW1vdW50BQt1c2R0QXNzZXRJZAUMcHJvbG9nQWN0aW9uCAUGcmVzdWx0Al8yAWkBDWNhcmdvRXhjaGFuZ2UCDGNhcmdvTGlzdFN0cgtsYW5kQXNzZXRJZAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBApjYXJnb1BhcnRzCQC8CQIFDGNhcmdvTGlzdFN0cgIBOgQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMECWxhbmRJbmRleAkAaQIJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfBQtyZWNMYW5kU2l6ZQUFU1NJWkUECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEC2N1ckxvY2F0aW9uCQELdmFsdWVPckVsc2UCCQCiCAEJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OBANsb2MJALUJAgkBBXZhbHVlAQULY3VyTG9jYXRpb24CAV8DCQECIT0CCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIBTAkAAgEJAKwCAgkArAICAhZEdWNrIGxvY2F0aW9uIHR5cGUgaXMgCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIRLCBidXQgc2hvdWxkIGJlIEwDCQECIT0CCQCRAwIFA2xvYwUIbG9jSWR4SWQFC2xhbmRBc3NldElkCQACAQkArAICAhtEdWNrIHNob3VsZCBiZSBvbiB0aGUgbGFuZCAFC2xhbmRBc3NldElkBAV3aEtleQkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkBAljdXJyZW50V2gJAQxnZXRXYXJlaG91c2UDBQV3aEtleQUJbGFuZEluZGV4BQppbmZyYUxldmVsBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQGcmVzdWx0CQEJbW92ZVN0dWZmAwUKY2FyZ29QYXJ0cwUJY3VycmVudFdoBQtjdXJyZW50UGFjawQEbG9mdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUAgFfBAVsb2Z0TwkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAgFBnJlc3VsdAJfNwQFbG9mdEYJAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQgFBnJlc3VsdAJfNwkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAugkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAggFBnJlc3VsdAJfNAkAzAgCCAUGcmVzdWx0Al81CQDMCAIIBQZyZXN1bHQCXzYFA25pbAIBOgkAzAgCCQELU3RyaW5nRW50cnkCBQV3aEtleQkAugkCCQDMCAIJAJEDAgUJY3VycmVudFdoBQt3aElkeExldmVscwkAzAgCCAUGcmVzdWx0Al8xCQDMCAIIBQZyZXN1bHQCXzIJAMwIAggFBnJlc3VsdAJfMwkAzAgCCQC5CQIJAMwIAgkAkQMCBQRsb2Z0BQl2b2xMb2NrZWQJAMwIAgkApAMBBQVsb2Z0TwkAzAgCCQCkAwEFBWxvZnRGCQDMCAIJAJEDAgUEbG9mdAUIdm9sVG90YWwFA25pbAIBXwUDbmlsAgE6CQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsAWkBDXNhdmVXYXJlaG91c2UCBXdoU3RyC2xhbmRBc3NldElkBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AggFAWkGY2FsbGVyBQ9lY29ub215Q29udHJhY3QJAAIBAg1BY2Nlc3MgZGVuaWVkBAV3aEtleQkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkBAJ3aAkAvAkCBQV3aFN0cgIBOgMJAQIhPQIJAJADAQUCd2gABQkAAgECMHdhcmVob3VzZSBzdHJpbmcgc2hvdWxkIGNvbnRhaW4gNCAnOicgc2VwYXJhdG9ycwQFbG9mdEwJAJEDAgkAtQkCCQCRAwIFAndoBQl3aElkeExPRlQCAV8FCXZvbExvY2tlZAQFbG9mdE8JARdnZXRXYXJlaG91c2VPY2N1cGllZFZvbAEFAndoBAVsb2Z0VAkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQkAkQMCBQJ3aAULd2hJZHhMZXZlbHMEBWxvZnRGCQBlAgkAZQIFBWxvZnRUCQENcGFyc2VJbnRWYWx1ZQEFBWxvZnRMBQVsb2Z0TwQIbmV3V2hTdHIJALoJAgkAzAgCCQCRAwIFAndoBQt3aElkeExldmVscwkAzAgCCQCRAwIFAndoBQh3aElkeFJlcwkAzAgCCQCRAwIFAndoBQh3aElkeE1hdAkAzAgCCQCRAwIFAndoBQl3aElkeFByb2QJAMwIAgkAuQkCCQDMCAIFBWxvZnRMCQDMCAIJAKQDAQUFbG9mdE8JAMwIAgkApAMBBQVsb2Z0RgkAzAgCCQCkAwEFBWxvZnRUBQNuaWwCAV8FA25pbAIBOgkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBXdoS2V5BQhuZXdXaFN0cgkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAUIbmV3V2hTdHIBaQESZml4V2FyZWhvdXNlRm9ybWF0AQtsYW5kQXNzZXRJZAMJAQIhPQIIBQFpBmNhbGxlcgUMcmVzdENvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAQFd2hLZXkJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQJbGFuZEluZGV4CQBpAgkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAgkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8FC3JlY0xhbmRTaXplBQVTU0laRQQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAEAndoCQEMZ2V0V2FyZWhvdXNlAwUFd2hLZXkFCWxhbmRJbmRleAUKaW5mcmFMZXZlbAQFbG9mdEwJAQVhc0ludAEJAPwHBAUPZWNvbm9teUNvbnRyYWN0AhpyZWNhbGNMb2NrZWRWb2x1bWVSRUFET05MWQkAzAgCBQtsYW5kQXNzZXRJZAkAzAgCBQJ3aAUDbmlsBQNuaWwEBWxvZnRPCQEXZ2V0V2FyZWhvdXNlT2NjdXBpZWRWb2wBBQJ3aAQFbG9mdFQJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEJAJEDAgUCd2gFC3doSWR4TGV2ZWxzBAVsb2Z0RgkAZQIJAGUCBQVsb2Z0VAUFbG9mdEwFBWxvZnRPBAhuZXdXaFN0cgkAugkCCQDMCAIJAJEDAgUCd2gFC3doSWR4TGV2ZWxzCQDMCAIJAJEDAgUCd2gFCHdoSWR4UmVzCQDMCAIJAJEDAgUCd2gFCHdoSWR4TWF0CQDMCAIJAJEDAgUCd2gFCXdoSWR4UHJvZAkAzAgCCQC5CQIJAMwIAgkApAMBBQVsb2Z0TAkAzAgCCQCkAwEFBWxvZnRPCQDMCAIJAKQDAQUFbG9mdEYJAMwIAgkApAMBBQVsb2Z0VAUDbmlsAgFfBQNuaWwC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ZFBpZWNlcwUDbmlsBQxzdGFrZWRQaWVjZXMBaQENc2V0Q3VzdG9tTmFtZQMHYXNzZXRJZApjdXN0b21OYW1lBHR5cGUEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhpBbGxvd2VkIFVTRFQgcGF5bWVudCBvbmx5IQMJAQIhPQIIBQNwbXQGYW1vdW50BQxSRU5BTUlOR0NPU1QJAAIBCQCsAgICElBheW1lbnQgc2hvdWxkIGJlIAkApAMBBQxSRU5BTUlOR0NPU1QDCQEIY29udGFpbnMCBQpjdXN0b21OYW1lAgJfXwkAAgEJAKwCAgIeTmFtZSBzaG91bGQgbm90IGNvbnRhaW4gJ19fJzogBQpjdXN0b21OYW1lAwkAZgIJALECAQUKY3VzdG9tTmFtZQUKTUFYTkFNRUxFTgkAAgEJAKwCAgIZTmFtZSB0b28gbG9uZywgbWF4TGVuZ3RoPQkApAMBBQpNQVhOQU1FTEVOBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQHYWN0aW9ucwQHJG1hdGNoMAUEdHlwZQMJAAACAgdBQ0NPVU5UBQckbWF0Y2gwBApyZXZlcnNlS2V5CQEWa2V5Q3VzdG9tTmFtZVRvQWRkcmVzcwEFCmN1c3RvbU5hbWUECW5hbWVPd25lcgkAoggBBQpyZXZlcnNlS2V5AwkBCWlzRGVmaW5lZAEFCW5hbWVPd25lcgkAAgEJAKwCAgIZTmFtZSBhbHJlYWR5IHJlZ2lzdGVyZWQ6IAUKY3VzdG9tTmFtZQQNYWRkclRvTmFtZUtleQkBFmtleUFkZHJlc3NUb0N1c3RvbU5hbWUBBQRhZGRyBAdvbGROYW1lCQCiCAEFDWFkZHJUb05hbWVLZXkEB2ZyZWVPbGQDCQEJaXNEZWZpbmVkAQUHb2xkTmFtZQkAzAgCCQELRGVsZXRlRW50cnkBCQEWa2V5Q3VzdG9tTmFtZVRvQWRkcmVzcwEJAQV2YWx1ZQEFB29sZE5hbWUFA25pbAUDbmlsCQDNCAIJAM0IAgUHZnJlZU9sZAkBC1N0cmluZ0VudHJ5AgUNYWRkclRvTmFtZUtleQUKY3VzdG9tTmFtZQkBC1N0cmluZ0VudHJ5AgUKcmV2ZXJzZUtleQUEYWRkcgMJAAACAgRMQU5EBQckbWF0Y2gwBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQUHYXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAggFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQdhc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBApyZXZlcnNlS2V5CQEaa2V5TGFuZEN1c3RvbU5hbWVUb0Fzc2V0SWQBBQpjdXN0b21OYW1lBAluYW1lT3duZXIJAKIIAQUKcmV2ZXJzZUtleQMJAQlpc0RlZmluZWQBBQluYW1lT3duZXIJAAIBCQCsAgICGU5hbWUgYWxyZWFkeSByZWdpc3RlcmVkOiAFCmN1c3RvbU5hbWUEDmFzc2V0VG9OYW1lS2V5CQEaa2V5TGFuZEFzc2V0SWRUb0N1c3RvbU5hbWUBBQdhc3NldElkBAdvbGROYW1lCQCiCAEFDmFzc2V0VG9OYW1lS2V5BAdmcmVlT2xkAwkBCWlzRGVmaW5lZAEFB29sZE5hbWUJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBGmtleUxhbmRDdXN0b21OYW1lVG9Bc3NldElkAQkBBXZhbHVlAQUHb2xkTmFtZQUDbmlsBQNuaWwJAM0IAgkAzQgCBQdmcmVlT2xkCQELU3RyaW5nRW50cnkCBQ5hc3NldFRvTmFtZUtleQUKY3VzdG9tTmFtZQkBC1N0cmluZ0VudHJ5AgUKcmV2ZXJzZUtleQUHYXNzZXRJZAMJAAACAgREVUNLBQckbWF0Y2gwBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQUHYXNzZXRJZAMDCQEBIQEJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkGCQEBIQEJAQlpc0RlZmluZWQBCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHIJAAIBCQCsAgIIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEQa2V5RHVja0lkVG9Pd25lcgEFB2Fzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkRVQ0tQUkVGSVgCDSBpcyBub3QgeW91cnMECnJldmVyc2VLZXkJARprZXlEdWNrQ3VzdG9tTmFtZVRvQXNzZXRJZAEFCmN1c3RvbU5hbWUECW5hbWVPd25lcgkAoggBBQpyZXZlcnNlS2V5AwkBCWlzRGVmaW5lZAEFCW5hbWVPd25lcgkAAgEJAKwCAgIZTmFtZSBhbHJlYWR5IHJlZ2lzdGVyZWQ6IAUKY3VzdG9tTmFtZQQOYXNzZXRUb05hbWVLZXkJARprZXlEdWNrQXNzZXRJZFRvQ3VzdG9tTmFtZQEFB2Fzc2V0SWQEB29sZE5hbWUJAKIIAQUOYXNzZXRUb05hbWVLZXkEB2ZyZWVPbGQDCQEJaXNEZWZpbmVkAQUHb2xkTmFtZQkAzAgCCQELRGVsZXRlRW50cnkBCQEaa2V5RHVja0N1c3RvbU5hbWVUb0Fzc2V0SWQBCQEFdmFsdWUBBQdvbGROYW1lBQNuaWwFA25pbAkAzQgCCQDNCAIFB2ZyZWVPbGQJAQtTdHJpbmdFbnRyeQIFDmFzc2V0VG9OYW1lS2V5BQpjdXN0b21OYW1lCQELU3RyaW5nRW50cnkCBQpyZXZlcnNlS2V5BQdhc3NldElkCQACAQITVW5rbm93biBlbnRpdHkgdHlwZQkAlAoCCQDNCAIJAM0IAgUHYWN0aW9ucwkBDlNjcmlwdFRyYW5zZmVyAwUPZWNvbm9teUNvbnRyYWN0CAUDcG10BmFtb3VudAULdXNkdEFzc2V0SWQFDHByb2xvZ0FjdGlvbgAAAWkBDHNldFJlZmVycmFscwIJb2xkUGxheWVyCW5ld1BsYXllcgMJAQIhPQIIBQFpD2NhbGxlclB1YmxpY0tleQUDcHViCQACAQIRUGVybWlzc2lvbiBkZW5pZWQEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAMJAQEhAQkBCWlzRGVmaW5lZAEJAKYIAQUJb2xkUGxheWVyCQACAQkArAICAhFJbnZhbGlkIGFkZHJlc3M6IAUJb2xkUGxheWVyAwkBASEBCQEJaXNEZWZpbmVkAQkApggBBQluZXdQbGF5ZXIJAAIBCQCsAgICEUludmFsaWQgYWRkcmVzczogBQluZXdQbGF5ZXIEB29sZHNLZXkJAQlrZXlPbGRpZXMABARvbGRzCQCiCAEFB29sZHNLZXkEBm9sZGllcwMJAQlpc0RlZmluZWQBBQRvbGRzCQC8CQIJAQV2YWx1ZQEFBG9sZHMCAV8FA25pbAMJAQ9jb250YWluc0VsZW1lbnQCBQZvbGRpZXMFCW5ld1BsYXllcgkAAgEJAKwCAgUJbmV3UGxheWVyAiYgaXMgbm90IG5ld2JpZSAoYWxyZWFkeSBoYXMgcmVmZXJyYWxzKQQIcmVmQnlLZXkJAQ9rZXlBZGRyZXNzUmVmQnkBBQluZXdQbGF5ZXIEBXJlZkJ5CQCiCAEFCHJlZkJ5S2V5AwMJAQlpc0RlZmluZWQBBQVyZWZCeQkBCWlzRGVmaW5lZAEJAKYIAQkBBXZhbHVlAQUFcmVmQnkHCQACAQkArAICCQCsAgIFCW5ld1BsYXllcgIUIGFscmVhZHkgaGFzIHJlZkJ5OiAJAQV2YWx1ZQEFBXJlZkJ5BAdyZWZzS2V5CQETa2V5QWRkcmVzc1JlZmVycmFscwEFCW9sZFBsYXllcgQEcmVmcwkAoggBBQdyZWZzS2V5BAlyZWZzQXJyYXkDCQEJaXNEZWZpbmVkAQUEcmVmcwkAvAkCCQEFdmFsdWUBBQRyZWZzAgFfBQNuaWwDCQEPY29udGFpbnNFbGVtZW50AgUJcmVmc0FycmF5BQluZXdQbGF5ZXIJAAIBCQCsAgIJAKwCAgkArAICBQlvbGRQbGF5ZXICEiBhbHJlYWR5IGNvbnRhaW5zIAUJbmV3UGxheWVyAhEgd2l0aGluIHJlZmVycmFscwQHbmV3UmVmcwkAugkCCQDNCAIFCXJlZnNBcnJheQUJbmV3UGxheWVyAgFfBAduZXdPbGRzAwkBD2NvbnRhaW5zRWxlbWVudAIFBm9sZGllcwUJb2xkUGxheWVyCQEFdmFsdWUBBQRvbGRzCQC6CQIJAM0IAgUGb2xkaWVzBQlvbGRQbGF5ZXICAV8JAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCBQhyZWZCeUtleQUJb2xkUGxheWVyCQDMCAIJAQtTdHJpbmdFbnRyeQIFB3JlZnNLZXkFB25ld1JlZnMJAMwIAgkBC1N0cmluZ0VudHJ5AgUHb2xkc0tleQUHbmV3T2xkcwkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAAAAWkBHHNwbGl0QnlHbG9iYWxXZWlnaHRzUkVBRE9OTFkBBmFtb3VudAkAlAoCBQNuaWwJARJnZXROZWVkZWRNYXRlcmlhbHMBBQZhbW91bnQBaQEkc3BsaXRCeUdsb2JhbEFuZExvY2FsV2VpZ2h0c1JFQURPTkxZAwltYXRBbW91bnQJcmVzQW1vdW50CHRlcnJhaW5zBA10ZXJyYWluQ291bnRzCQENY291bnRUZXJyYWlucwEFCHRlcnJhaW5zCQCUCgIFA25pbAkAlAoCCQESZ2V0TmVlZGVkTWF0ZXJpYWxzAQUJbWF0QW1vdW50CQETZGlzdHJpYnV0ZUJ5V2VpZ2h0cwIFCXJlc0Ftb3VudAUNdGVycmFpbkNvdW50cwFpARNnZXRCYWNrcGFja1JFQURPTkxZAQtkdWNrQXNzZXRJZAkAlAoCBQNuaWwJALkJAgkBC2dldEJhY2twYWNrAQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQCAToBaQEUZ2V0V2FyZWhvdXNlUkVBRE9OTFkBC2xhbmRBc3NldElkBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAlsYW5kSW5kZXgJAGkCCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwULcmVjTGFuZFNpemUFBVNTSVpFBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAkAlAoCBQNuaWwJALoJAgkBDGdldFdhcmVob3VzZQMJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAUJbGFuZEluZGV4BQppbmZyYUxldmVsAgE6AWkBCnNhdmVMYXN0VHgAAwkBAiE9AggFAWkGY2FsbGVyBQt3bGdDb250cmFjdAkAAgECDUFjY2VzcyBkZW5pZWQJAJQKAgkAzAgCCQEGcHJvbG9nAQUBaQUDbmlsACoAYQt3wg==", "height": 2629454, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 45x5PRss1DouWBiKodgfQoMEKYk2ruuqfLg5b29LYTiF Next: Yn7jTiNBWNi5G94z6SCngKNKXUP3d8VDT8A3VAf1UXs Diff:
OldNewDifferences
3434
3535 let g = 1000000
3636
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
222272 if ($isInstanceOf(c, "String"))
223273 then {
224- let aV = c
225- aV
274+ let bu = c
275+ bu
226276 }
227277 else throw("fail to cast into String")
228278 }
229279
230280
231-func aW (aU) = {
232- let c = aU
281+func bv (bt) = {
282+ let c = bt
233283 if ($isInstanceOf(c, "Int"))
234284 then {
235- let aX = c
236- aX
285+ let bw = c
286+ bw
237287 }
238288 else throw("fail to cast into Int")
239289 }
240290
241291
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
244316 if (("S" == c))
245- then m
317+ then o
246318 else if (("M" == c))
247- then n
319+ then p
248320 else if (("L" == c))
249- then o
321+ then q
250322 else if (("XL" == c))
251- then p
323+ then r
252324 else if (("XXL" == c))
253- then q
325+ then s
254326 else throw("Unknown land size")
255327 }
256328
257329
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
270394 else throw("List size exceeds 6")
271395
272- bl(bi(bi(bi(bi(bi(bi(bh, 0), 1), 2), 3), 4), 5), 6)
273- }
274-
275-
276-let bm = {
396+ bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
397+ }
398+
399+
400+let ce = {
277401 let c = a
278402 if ((base58'2W' == c))
279403 then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv")
282406 else throw("Unknown chain")
283407 }
284408
285-let bn = {
409+let cf = {
286410 let c = a
287411 if ((base58'2W' == c))
288412 then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb")
291415 else throw("Unknown chain")
292416 }
293417
294-let bo = base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
295-
296-let bp = [30, 60, 120]
297-
298-let bq = 300000
299-
300-let br = 5000000
301-
302-let bs = 50
303-
304-let bt = 10000000
305-
306-let bu = {
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 = {
307431 let c = a
308432 if ((base58'2W' == c))
309433 then 252289527462
312436 else throw("Unknown chain")
313437 }
314438
315-let bv = {
439+let cn = {
316440 let c = a
317441 if ((base58'2W' == c))
318442 then 250000000
321445 else throw("Unknown chain")
322446 }
323447
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))
383515 then throw("Zero weights sum")
384516 else {
385- let bZ = fraction(bW, g, bY)
386- func ca (cb,cc) = (cb :+ fraction(cc, bZ, g))
387-
388- let bf = bX
389- let bg = size(bf)
390- let bh = nil
391- func bi (bj,bk) = if ((bk >= bg))
392- then bj
393- else ca(bj, bf[bk])
394-
395- func bl (bj,bk) = if ((bk >= bg))
396- then bj
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
397529 else throw("List size exceeds 6")
398530
399- bl(bi(bi(bi(bi(bi(bi(bh, 0), 1), 2), 3), 4), 5), 6)
400- }
401- }
402-
403-
404-func cd (bW) = {
405- let ce = split(value(getString(aM())), "_")
406- if ((size(ce) != l))
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))
407539 then throw("Wrong proportions data")
408540 else {
409- let cf = [parseIntValue(ce[0]), parseIntValue(ce[1]), parseIntValue(ce[2]), parseIntValue(ce[3]), parseIntValue(ce[4]), parseIntValue(ce[5])]
410- bV(bW, cf)
411- }
412- }
413-
414-
415-func cg (ch,ci,cj) = {
416- let ck = cd(cj)
417- func cl (cb,ah) = {
418- let cm = (parseIntValue(ci[ah]) - ck[ah])
419- if ((0 > cm))
420- then throw(((((("Not enough material idx=" + toString(ah)) + ", you have ") + ci[ah]) + ", but need ") + toString(ck[ah])))
421- else (cb :+ toString(cm))
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))
422554 }
423555
424- if (ch)
556+ if (db)
425557 then {
426- let bf = [0, 1, 2, 3, 4, 5]
427- let bg = size(bf)
428- let bh = nil
429- func bi (bj,bk) = if ((bk >= bg))
430- then bj
431- else cl(bj, bf[bk])
432-
433- func bl (bj,bk) = if ((bk >= bg))
434- then bj
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
435567 else throw("List size exceeds 6")
436568
437- bl(bi(bi(bi(bi(bi(bi(bh, 0), 1), 2), 3), 4), 5), 6)
438- }
439- else ci
440- }
441-
442-
443-func cn (co,cp,cq,cr) = if ((size(co) != l))
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))
444576 then throw("Wrong proportions data")
445577 else {
446- func cs (cb,ct) = {
447- let cm = (parseIntValue(co[ct]) + ((cr * cp[ct]) * cq))
448- if ((0 > cm))
449- then throw(((((((("Panic! Pieces of type=" + toString(ct)) + ", sign=") + toString(cr)) + ", terrainCounts[i]=") + toString(cp[ct])) + ", landSizeIndex=") + toString(cq)))
450- else (cb :+ toString(cm))
451- }
452-
453- let cf = {
454- let bf = [0, 1, 2, 3, 4, 5]
455- let bg = size(bf)
456- let bh = nil
457- func bi (bj,bk) = if ((bk >= bg))
458- then bj
459- else cs(bj, bf[bk])
460-
461- func bl (bj,bk) = if ((bk >= bg))
462- then bj
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
463595 else throw("List size exceeds 6")
464596
465- bl(bi(bi(bi(bi(bi(bi(bh, 0), 1), 2), 3), 4), 5), 6)
466- }
467- makeString(cf, "_")
597+ bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
598+ }
599+ makeString(cZ, "_")
468600 }
469601
470602
471-func cu (cp,cq,cr) = {
472- let co = split(valueOrElse(getString(aM()), "0_0_0_0_0_0"), "_")
473- cn(co, cp, cq, cr)
474- }
475-
476-
477-func cv (cw) = [(size(split(cw, "A")) - 1), (size(split(cw, "B")) - 1), (size(split(cw, "C")) - 1), (size(split(cw, "D")) - 1), (size(split(cw, "E")) - 1), (size(split(cw, "F")) - 1)]
478-
479-
480-func cx (cy,cp,cz,cq,cA) = {
481- func cB (cb,ct) = {
482- let cC = ((fraction(cz, cA, s) * cp[ct]) * cq)
483- (cb :+ toString((parseIntValue(cy[ct]) + cC)))
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)))
484616 }
485617
486- let cf = {
487- let bf = [0, 1, 2, 3, 4, 5]
488- let bg = size(bf)
489- let bh = nil
490- func bi (bj,bk) = if ((bk >= bg))
491- then bj
492- else cB(bj, bf[bk])
493-
494- func bl (bj,bk) = if ((bk >= bg))
495- then bj
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
496628 else throw("List size exceeds 6")
497629
498- bl(bi(bi(bi(bi(bi(bi(bh, 0), 1), 2), 3), 4), 5), 6)
630+ bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
499631 }
500- makeString(cf, "_")
501- }
502-
503-
504-func cD (cp,cz,cq,cA) = {
505- func cB (cb,ct) = {
506- let cC = ((fraction(cz, cA, s) * cp[ct]) * cq)
507- $Tuple2((cb._1 :+ cC), (cb._2 + cC))
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))
508640 }
509641
510- let bf = [0, 1, 2, 3, 4, 5]
511- let bg = size(bf)
512- let bh = $Tuple2(nil, 0)
513- func bi (bj,bk) = if ((bk >= bg))
514- then bj
515- else cB(bj, bf[bk])
516-
517- func bl (bj,bk) = if ((bk >= bg))
518- then bj
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
519651 else throw("List size exceeds 6")
520652
521- bl(bi(bi(bi(bi(bi(bi(bh, 0), 1), 2), 3), 4), 5), 6)
522- }
523-
524-
525-func cE (cF,cG,cH,cI) = {
526- let cJ = cH._1
527- let cK = cH._2
528- if ((cK == 0))
529- then $Tuple2(makeString(cF, "_"), makeString(cG, "_"))
530- else if ((cI >= cK))
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))
531663 then {
532- func cL (cb,ct) = (cb :+ toString((parseIntValue(cF[ct]) + cJ[ct])))
533-
534- let cf = {
535- let bf = [0, 1, 2, 3, 4, 5]
536- let bg = size(bf)
537- let bh = nil
538- func bi (bj,bk) = if ((bk >= bg))
539- then bj
540- else cL(bj, bf[bk])
541-
542- func bl (bj,bk) = if ((bk >= bg))
543- then bj
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
544676 else throw("List size exceeds 6")
545677
546- bl(bi(bi(bi(bi(bi(bi(bh, 0), 1), 2), 3), 4), 5), 6)
678+ bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
547679 }
548- $Tuple2(makeString(cf, "_"), makeString(cG, "_"))
680+ $Tuple2(makeString(cZ, "_"), makeString(dz, "_"))
549681 }
550682 else {
551- func cM (cb,ct) = {
552- let cN = fraction(cJ[ct], cI, cK)
553- $Tuple2((cb._1 :+ toString((parseIntValue(cF[ct]) + cN))), (cb._2 :+ toString(((parseIntValue(cG[ct]) + cJ[ct]) - cN))))
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))))
554686 }
555687
556- let cf = {
557- let bf = [0, 1, 2, 3, 4, 5]
558- let bg = size(bf)
559- let bh = $Tuple2(nil, nil)
560- func bi (bj,bk) = if ((bk >= bg))
561- then bj
562- else cM(bj, bf[bk])
563-
564- func bl (bj,bk) = if ((bk >= bg))
565- then bj
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
566698 else throw("List size exceeds 6")
567699
568- bl(bi(bi(bi(bi(bi(bi(bh, 0), 1), 2), 3), 4), 5), 6)
700+ bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
569701 }
570- $Tuple2(makeString(cf._1, "_"), makeString(cf._2, "_"))
702+ $Tuple2(makeString(cZ._1, "_"), makeString(cZ._2, "_"))
571703 }
572704 }
573705
574706
575-func cO (cP) = if ((cP >= toBigInt(0)))
576- then cP
577- else -(cP)
578-
579-
580-let cQ = [[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]]
581-
582-func cR (aX,cS) = {
583- let cT = toInt((aX % bx))
584- let cU = if ((cS[0] > cT))
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))
585717 then "A"
586- else if ((cS[1] > cT))
718+ else if ((dL[1] > dM))
587719 then "B"
588- else if ((cS[2] > cT))
720+ else if ((dL[2] > dM))
589721 then "C"
590- else if ((cS[3] > cT))
722+ else if ((dL[3] > dM))
591723 then "D"
592- else if ((cS[4] > cT))
724+ else if ((dL[4] > dM))
593725 then "E"
594726 else "F"
595- cU
596- }
597-
598-
599-func cV (cW,cX) = {
600- let cY = cQ[cX]
601- func cZ (cb,cc) = $Tuple2((((((cb._1 + cR(cb._2, cY)) + cR((cb._2 / bx), cY)) + cR((cb._2 / by), cY)) + cR((cb._2 / bz), cY)) + cR((cb._2 / bA), cY)), (cb._2 / bB))
602-
603- let da = {
604- let bf = [1, 2, 3, 4, 5]
605- let bg = size(bf)
606- let bh = $Tuple2("", (cW / bw))
607- func bi (bj,bk) = if ((bk >= bg))
608- then bj
609- else cZ(bj, bf[bk])
610-
611- func bl (bj,bk) = if ((bk >= bg))
612- then bj
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
613745 else throw("List size exceeds 5")
614746
615- bl(bi(bi(bi(bi(bi(bh, 0), 1), 2), 3), 4), 5)
747+ bR(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5)
616748 }
617- da._1
618- }
619-
620-
621-func db (dc) = {
622- let dd = split(valueOrElse(getString(dc), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
623-[toString(valueOrElse(parseInt(dd[P]), 0)), if ((size(split(dd[Q], "_")) == l))
624- then dd[Q]
625- else "0_0_0_0_0_0", if ((size(split(dd[R], "_")) == l))
626- then dd[R]
627- else "0_0_0_0_0_0", dd[S]]
628- }
629-
630-
631-func de (df) = {
632- let dg = split(df, "_")
633- ((t * (parseIntValue(dg[1]) + 1)) * parseIntValue(dg[0]))
634- }
635-
636-
637-func dh (di) = {
638- let dj = di[J]
639- func dk (cb,dl) = (cb + parseIntValue(dl))
640-
641- func dm (cb,dl) = {
642- let ah = cb._1
643- let dn = T(ah)
644- let do = (((parseIntValue(dl) + dn) - 1) / dn)
645- $Tuple2((ah + 1), (cb._2 + (do * h)))
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)))
646778 }
647779
648- let dp = {
649- let bf = split(di[H], "_")
650- let bg = size(bf)
651- let bh = 0
652- func bi (bj,bk) = if ((bk >= bg))
653- then bj
654- else dk(bj, bf[bk])
655-
656- func bl (bj,bk) = if ((bk >= bg))
657- then bj
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
658790 else throw("List size exceeds 6")
659791
660- bl(bi(bi(bi(bi(bi(bi(bh, 0), 1), 2), 3), 4), 5), 6)
792+ bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
661793 }
662- let dq = {
663- let bf = split(di[I], "_")
664- let bg = size(bf)
665- let bh = 0
666- func dr (bj,bk) = if ((bk >= bg))
667- then bj
668- else dk(bj, bf[bk])
669-
670- func ds (bj,bk) = if ((bk >= bg))
671- then bj
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
672804 else throw("List size exceeds 6")
673805
674- ds(dr(dr(dr(dr(dr(dr(bh, 0), 1), 2), 3), 4), 5), 6)
806+ bY(bX(bX(bX(bX(bX(bX(bN, 0), 1), 2), 3), 4), 5), 6)
675807 }
676- let dt = if ((dj == ""))
808+ let ej = if ((ec == ""))
677809 then 0
678- else ( let bf = split_4C(dj, "_")
679- let bg = size(bf)
680- let bh = $Tuple2(0, 0)
681- func du (bj,bk) = if ((bk >= bg))
682- then bj
683- else dm(bj, bf[bk])
684-
685- func dv (bj,bk) = if ((bk >= bg))
686- then bj
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
687819 else throw("List size exceeds 50")
688820
689- dv(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(bh, 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
690- ((dp + dq) + dt)
691- }
692-
693-
694-func dw (dx,dy,dz) = {
695- let df = ((toString(dy) + "_") + toString(dz))
696- let dA = de(df)
697- let dB = valueOrElse(getString(dx), (df + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
698- let dC = split_4C(dB, ":")
699- let dD = dh(dC)
700- let dE = if ((5 > size(dC)))
701- then makeString(["0", toString(dD), toString((dA - dD)), toString(dA)], "_")
702- else {
703- let dF = split(dC[K], "_")
704- let dG = parseIntValue(dF[L])
705- let dH = if ((size(dF) > 1))
706- then parseIntValue(dF[M])
707- else dD
708- makeString([toString(dG), toString(dH), toString(((dA - dG) - dH)), toString(dA)], "_")
709- }
710-[dC[G], if ((size(split(dC[H], "_")) == l))
711- then dC[H]
712- else "0_0_0_0_0_0", if ((size(split(dC[I], "_")) == l))
713- then dC[I]
714- else "0_0_0_0_0_0", dC[J], dE]
715- }
716-
717-
718-func dI (di) = {
719- let dJ = dh(di)
720- let dK = parseIntValue(split(di[K], "_")[L])
721- ((de(di[G]) - dJ) - dK)
722- }
723-
724-
725-func dL (dM,dn) = {
726- let do = if ((dM >= 0))
727- then (((dM + dn) - 1) / dn)
728- else -((((-(dM) + dn) - 1) / dn))
729- (do * h)
730- }
731-
732-
733-func dN (dO,di,dP) = if ((size(dO) != 3))
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))
734866 then throw("cargoListStr should contain exactly 2 ':' separators")
735867 else {
736- let dQ = split(dO[0], "_")
737- let dR = split(dO[1], "_")
738- let dS = if ((dO[2] == ""))
868+ let eG = split(eE[0], "_")
869+ let eH = split(eE[1], "_")
870+ let eI = if ((eE[2] == ""))
739871 then nil
740- else split(dO[2], "_")
741- if ((size(dQ) != l))
872+ else split(eE[2], "_")
873+ if ((size(eG) != n))
742874 then throw("All 6 resources should be passed")
743- else if ((size(dR) != l))
875+ else if ((size(eH) != n))
744876 then throw("All 6 materials should be passed")
745877 else {
746- let cI = dI(di)
747- let dT = split(di[H], "_")
748- let dU = split(di[I], "_")
749- let dV = if ((di[J] == ""))
878+ let dB = ey(eb)
879+ let eJ = split(eb[aa], "_")
880+ let eK = split(eb[ab], "_")
881+ let eL = if ((eb[ac] == ""))
750882 then nil
751- else split(di[J], "_")
752- let cG = split(dP[Q], "_")
753- let dW = split(dP[R], "_")
754- let dX = if ((dP[S] == ""))
883+ else split(eb[ac], "_")
884+ let dz = split(eF[aj], "_")
885+ let eM = split(eF[ak], "_")
886+ let eN = if ((eF[al] == ""))
755887 then nil
756- else split(dP[S], "_")
757- func dY (cb,dl) = {
758- let ct = cb._1
759- let dZ = parseIntValue(dl)
760- let ea = parseIntValue(dT[ct])
761- let eb = parseIntValue(cG[ct])
762- if ((dZ == 0))
763- then $Tuple4((ct + 1), (cb._2 :+ dT[ct]), (cb._3 :+ cG[ct]), cb._4)
764- else if ((dZ > 0))
765- then if ((dZ > eb))
766- then throw((((("Attempt to take " + dl) + " from backpack, but only ") + toString(eb)) + " available"))
767- else $Tuple4((ct + 1), (cb._2 :+ toString((ea + dZ))), (cb._3 :+ toString((eb - dZ))), (cb._4 + dZ))
768- else if ((-(dZ) > ea))
769- then throw((((("Attempt to take " + toString(-(dZ))) + " from warehouse, but only ") + toString(ea)) + " available"))
770- else $Tuple4((ct + 1), (cb._2 :+ toString((ea + dZ))), (cb._3 :+ toString((eb - dZ))), (cb._4 + dZ))
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))
771903 }
772904
773- let cf = {
774- let bf = dQ
775- let bg = size(bf)
776- let bh = $Tuple4(0, nil, nil, 0)
777- func bi (bj,bk) = if ((bk >= bg))
778- then bj
779- else dY(bj, bf[bk])
780-
781- func bl (bj,bk) = if ((bk >= bg))
782- then bj
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
783915 else throw("List size exceeds 6")
784916
785- bl(bi(bi(bi(bi(bi(bi(bh, 0), 1), 2), 3), 4), 5), 6)
917+ bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
786918 }
787- func ec (cb,dl) = {
788- let ct = cb._1
789- let dZ = parseIntValue(dl)
790- let ed = parseIntValue(dU[ct])
791- let ee = parseIntValue(dW[ct])
792- if ((dZ == 0))
793- then $Tuple4((ct + 1), (cb._2 :+ dU[ct]), (cb._3 :+ dW[ct]), cb._4)
794- else if ((dZ > 0))
795- then if ((dZ > ee))
796- then throw((((("Attempt to take " + dl) + " from backpack, but only ") + toString(ee)) + " available"))
797- else $Tuple4((ct + 1), (cb._2 :+ toString((ed + dZ))), (cb._3 :+ toString((ee - dZ))), (cb._4 + dZ))
798- else if ((-(dZ) > ed))
799- then throw((((("Attempt to take " + toString(-(dZ))) + " from warehouse, but only ") + toString(ed)) + " available"))
800- else $Tuple4((ct + 1), (cb._2 :+ toString((ed + dZ))), (cb._3 :+ toString((ee - dZ))), (cb._4 + dZ))
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))
801933 }
802934
803- let ef = {
804- let bf = dR
805- let bg = size(bf)
806- let bh = $Tuple4(0, nil, nil, cf._4)
807- func dr (bj,bk) = if ((bk >= bg))
808- then bj
809- else ec(bj, bf[bk])
810-
811- func ds (bj,bk) = if ((bk >= bg))
812- then bj
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
813945 else throw("List size exceeds 6")
814946
815- ds(dr(dr(dr(dr(dr(dr(bh, 0), 1), 2), 3), 4), 5), 6)
947+ bY(bX(bX(bX(bX(bX(bX(bN, 0), 1), 2), 3), 4), 5), 6)
816948 }
817- func eg (cb,dl) = {
818- let ct = cb._1
819- let dn = T(ct)
820- let dZ = parseIntValue(dl)
821- let eh = if ((size(dV) > ct))
822- then parseIntValue(dV[ct])
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])
823955 else 0
824- let ei = if ((size(dX) > ct))
825- then parseIntValue(dX[ct])
956+ let eY = if ((size(eN) > dn))
957+ then parseIntValue(eN[dn])
826958 else 0
827- if ((dZ == 0))
828- then $Tuple4((ct + 1), (cb._2 :+ toString(eh)), (cb._3 :+ toString(ei)), cb._4)
829- else if ((dZ > 0))
830- then if ((dZ > ei))
831- then throw((((("Attempt to take " + dl) + " from backpack, but only ") + toString(ei)) + " available"))
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"))
832964 else {
833- let ej = (dL((eh + dZ), dn) - dL(eh, dn))
834- $Tuple4((ct + 1), (cb._2 :+ toString((eh + dZ))), (cb._3 :+ toString((ei - dZ))), (cb._4 + ej))
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))
835967 }
836- else if ((-(dZ) > eh))
837- then throw((((("Attempt to take " + toString(-(dZ))) + " from warehouse, but only ") + toString(eh)) + " available"))
968+ else if ((-(eP) > eX))
969+ then throw((((("Attempt to take " + toString(-(eP))) + " from warehouse, but only ") + toString(eX)) + " available"))
838970 else {
839- let ej = (dL((eh + dZ), dn) - dL(eh, dn))
840- $Tuple4((ct + 1), (cb._2 :+ toString((eh + dZ))), (cb._3 :+ toString((ei - dZ))), (cb._4 + ej))
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))
841973 }
842974 }
843975
844- let dd = if ((size(dS) != 0))
976+ let dW = if ((size(eI) != 0))
845977 then {
846- let bf = dS
847- let bg = size(bf)
848- let bh = $Tuple4(0, nil, nil, ef._4)
849- func du (bj,bk) = if ((bk >= bg))
850- then bj
851- else eg(bj, bf[bk])
852-
853- func dv (bj,bk) = if ((bk >= bg))
854- then bj
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
855987 else throw("List size exceeds 50")
856988
857- dv(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(bh, 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)
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)
858990 }
859- else $Tuple4(0, dV, dX, ef._4)
860- let ek = dd._4
861- if ((ek > cI))
862- then throw((((("Attempt to put total " + toString(ek)) + " stuff, but only ") + toString(cI)) + " warehouse space left"))
863- else $Tuple7(makeString(cf._2, "_"), makeString(ef._2, "_"), makeString(dd._2, "_"), makeString(cf._3, "_"), makeString(ef._3, "_"), makeString(dd._3, "_"), ek)
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)
864996 }
865997 }
866998
867999
868-func el (em,en) = {
869- let aP = toString(em)
870- let eo = cO(toBigInt(en))
871- let ep = valueOrElse(getInteger(bD()), (bC + 1))
872- let bF = toString(ep)
873- let cX = toInt((eo % bw))
874- let cw = cV(eo, cX)
875- let eq = z[cX]
876- let er = Issue(bU(bF, "S"), makeString([bF, "S", cw, eq], "_"), 1, 0, false)
877- let ap = calculateAssetId(er)
878- let es = toBase58String(ap)
879- $Tuple2([IntegerEntry(bD(), (ep + 1)), er, StringEntry(bE(bF), es), StringEntry(ao(es), aP), StringEntry(bK(bF), aP), IntegerEntry(as(es), 0), IntegerEntry(bI(es, aP), 0), ScriptTransfer(em, 1, ap)], $Tuple2(es, eq))
880- }
881-
882-
883-func et (ch,em,en,eu,ev) = if (!(sigVerify_8Kb(eu, ev, bo)))
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)))
8841016 then throw("signature does not match")
8851017 else {
886- let dg = split(toUtf8String(eu), ";")
887- let ew = split(dg[0], "|")
888- let ex = split(ew[bR], "_")
889- let ey = parseIntValue(ex[0])
890- let ez = parseIntValue(ex[1])
891- let eA = split(dg[1], ":")
892- let eB = eA[0]
893- let eC = parseIntValue(ew[bS])
894- if (if ((eC > (lastBlock.timestamp + bq)))
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)))
8951027 then true
896- else ((lastBlock.timestamp - bq) > eC))
1028+ else ((lastBlock.timestamp - ci) > fs))
8971029 then throw("signature outdated")
8981030 else {
899- let eD = eA[1]
900- let aP = toString(em)
901- let eE = valueOrElse(getString(am(aP)), "")
902- if ((eE != eD))
903- then throw(((("Tx ids don't match! In state: " + eE) + ", in msg: ") + eD))
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))
9041036 else {
905- let aJ = valueOrErrorMessage(getString(aH(aP)), "You don't have a duck staked")
906- let eF = aL(aJ)
907- let eG = valueOrElse(getInteger(eF), 100)
908- if ((eG != ey))
909- then throw(((("oldHealth=" + toString(valueOrElse(getInteger(eF), 100))) + " from state does not match one from flight log=") + toString(ey)))
910- else if ((0 >= ey))
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))
9111043 then throw("You can't fly with zero health")
912- else if ((0 >= ez))
913- then $Tuple3(((if (!(ch))
914- then [ScriptTransfer(em, bv, b)]
915- else nil) :+ IntegerEntry(eF, 0)), "", 0)
1044+ else if ((0 >= fp))
1045+ then $Tuple3(((if (!(db))
1046+ then [ScriptTransfer(fc, cn, b)]
1047+ else nil) :+ IntegerEntry(fv, 0)), "", 0)
9161048 else {
917- let eH = if ((size(ew) > bT))
918- then ew[bT]
1049+ let fx = if ((size(fm) > cP))
1050+ then fm[cP]
9191051 else ""
920- let eI = if ((eH == "$"))
921- then aW(invoke(ai, "sendUsdtPrize", [aP], nil))
1052+ let fy = if ((fx == "$"))
1053+ then bv(invoke(aE, "sendUsdtPrize", [bm], nil))
9221054 else 0
923- let dc = aI(aJ)
924- let dP = db(dc)
925- let eJ = split(dP[R], "_")
926- let eK = makeString(cg(ch, eJ, bu), "_")
927- let eL = el(em, en)
928- let es = eL._2._1
929- $Tuple3((((eL._1 :+ StringEntry(aK(aJ), makeString([eL._2._2, "L", es], "_"))) :+ IntegerEntry(eF, ez)) :+ StringEntry(dc, makeString([dP[P], dP[Q], eK, dP[S]], ":"))), es, eI)
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)
9301062 }
9311063 }
9321064 }
9331065 }
9341066
9351067
936-func eM (az,eN) = {
937- let dz = valueOrElse(getInteger(as(az)), 0)
938- let eO = valueOrElse(getInteger(at(k, az)), 0)
939- let eP = (dz / 6)
940- let eQ = (dz / 7)
941- ((r + fraction(r, ((dz + eP) + (2 * eQ)), 5)) + fraction(r, eO, (eN * 5)))
942- }
943-
944-
945-func eR (an,eS,eT) = {
946- let eU = if ((eS == bO))
947- then $Tuple2(eT, valueOrElse(getString(aH(an)), ""))
948- else {
949- let aJ = valueOrErrorMessage(getString(aH(an)), "You don't have a duck staked")
950- let eV = valueOrElse(getString(aK(aJ)), u)
951- let eW = split(value(eV), "_")
952- if ((eW[aR] != "L"))
953- then throw((("Duck location type is " + eW[aR]) + ", but should be L"))
954- else $Tuple2(eW[aS], aJ)
955- }
956- let az = eU._1
957- let eX = eU._2
958- let eY = value(assetInfo(fromBase58String(az)))
959- let eZ = ar(az)
960- let fa = valueOrErrorMessage(getInteger(eZ), (("Land " + eY.name) + " is not staked"))
961- let fb = valueOrErrorMessage(getString(ao(az)), (("NFT " + eY.name) + " is orphaned"))
962- if ((fb != an))
963- then throw((i + " is not yours"))
964- else {
965- let fc = split(eY.description, "_")
966- $Tuple4(eX, az, fc, fa)
967- }
968- }
969-
970-
971-func fd (an,dM,eS,eT) = if ((0 > dM))
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))
9721104 then throw("Negative amount")
9731105 else {
974- let fe = eR(an, eS, eT)
975- let aZ = fe._3[D]
976- let cp = cv(fe._3[E])
977- let cz = (lastBlock.timestamp - fe._4)
978- if ((0 > cz))
979- then throw(((("Saved timestamp is in future, saved = " + toString(fe._4)) + ", current = ") + toString(lastBlock.timestamp)))
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)))
9801112 else {
981- let eN = aY(aZ)
982- let ff = eM(fe._2, eN)
983- let fg = fraction(cz, (ff * eN), s)
984- if ((dM > fg))
985- then throw(((("Not enough resources, available = " + toString(fg)) + ", requested = ") + toString(dM)))
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)))
9861118 else {
987- let fh = fraction((fg - dM), s, (ff * eN))
988- let fi = (lastBlock.timestamp - fh)
989- let dy = (eN / m)
990- let cH = cD(cp, (cz - fh), dy, ff)
991- let dx = ay(fe._2)
992- let dz = valueOrElse(getInteger(as(fe._2)), 0)
993- let di = dw(dx, dy, dz)
994- let dF = split(di[K], "_")
995- let cI = parseIntValue(dF[N])
996- if (if ((eS == bO))
997- then (dM > cI)
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)
9981130 else false)
999- then throw((("Only " + toString(cI)) + " space left in warehouse"))
1131+ then throw((("Only " + toString(dB)) + " space left in warehouse"))
10001132 else {
1001- let dc = aI(fe._1)
1002- let dP = db(dc)
1003- let cG = split(dP[Q], "_")
1004- let cF = split(di[H], "_")
1005- let fj = if ((eS == bO))
1006- then $Tuple4(cx(cF, cp, (cz - fh), dy, ff), dP[Q], (parseIntValue(dF[M]) + cH._2), (parseIntValue(dF[N]) - cH._2))
1007- else if ((eS == bP))
1008- then $Tuple4(di[H], cx(cG, cp, (cz - fh), dy, ff), parseIntValue(dF[M]), parseIntValue(dF[N]))
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]))
10091141 else {
1010- let fk = cE(cF, cG, cH, cI)
1011- let fl = min([parseIntValue(dF[N]), cH._2])
1012- $Tuple4(fk._1, fk._2, (parseIntValue(dF[M]) + fl), (parseIntValue(dF[N]) - fl))
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))
10131145 }
1014- let fm = fj._1
1015- let fn = fj._2
1016- let fo = fj._3
1017- let fp = fj._4
1018- $Tuple5([IntegerEntry(ar(fe._2), fi), IntegerEntry(av(i, fe._2, an), fi)], dc, [dP[P], fn, dP[R], dP[S]], dx, [di[G], fm, di[I], di[J], makeString([dF[L], toString(fo), toString(fp), dF[O]], "_")])
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]], "_")])
10191151 }
10201152 }
10211153 }
10221154 }
10231155
10241156
1025-func fq (an,az,eN,eS) = {
1026- let eZ = ar(az)
1027- let fa = value(getInteger(eZ))
1028- let fg = (fraction((lastBlock.timestamp - fa), eM(az, eN), s) * eN)
1029- fd(an, fg, eS, az)
1030- }
1031-
1032-
1033-func fr (ch,em,fs,az) = {
1034- let an = toString(em)
1035- let fe = eR(an, bQ, az)
1036- let eN = aY(fe._3[D])
1037- let ft = as(fe._2)
1038- let fu = valueOrElse(getInteger(ft), 0)
1039- if ((fu >= 3))
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))
10401172 then throw("Currently max infrastructure level = 3")
10411173 else {
1042- let fv = (fu + 1)
1043- let fw = fraction(bt, (eN * fv), m)
1044- if (if (!(ch))
1045- then (fs != fw)
1174+ let gk = (gj + 1)
1175+ let gl = fraction(cl, (fD * gk), o)
1176+ if (if (!(db))
1177+ then (gh != gl)
10461178 else false)
1047- then throw(("Payment attached should be " + toString(fw)))
1179+ then throw(("Payment attached should be " + toString(gl)))
10481180 else {
1049- let dc = aI(fe._1)
1050- let dP = db(dc)
1051- let eJ = split(dP[R], "_")
1052- let eK = makeString(cg(ch, eJ, fraction(e, (eN * fv), m)), "_")
1053- let fx = fq(an, fe._2, eN, bQ)
1054- let fy = fx._5
1055- let fz = de(fy[G])
1056- let fA = makeString([split(fy[G], "_")[0], toString(fv)], "_")
1057- let fB = de(fA)
1058- let dF = split(fy[K], "_")
1059- let fC = makeString([dF[L], dF[M], toString(((parseIntValue(dF[N]) + fB) - fz)), toString(fB)], "_")
1060- $Tuple2(([IntegerEntry(ft, fv), IntegerEntry(bI(fe._2, an), fv), StringEntry(dc, makeString([dP[P], fx._3[Q], eK, dP[S]], ":")), StringEntry(fx._4, makeString([fA, fy[H], fy[I], fy[J], fC], ":"))] ++ fx._1), fv)
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)
10611193 }
10621194 }
10631195 }
10641196
10651197
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))
10721207 then throw("Presale artifact is already activated")
1073- else if ((parseIntValue(fe._3[C]) > bC))
1074- then throw((((i + " ") + az) + " is not eligible for presale artifact"))
1208+ else if ((parseIntValue(fT._3[V]) > cu))
1209+ then throw((((k + " ") + aW) + " is not eligible for presale artifact"))
10751210 else {
1076- let fx = fq(an, az, eN, bQ)
1077- ((((fx._1 :+ IntegerEntry(fE, eN)) :+ IntegerEntry(bJ(k, az, an), eN)) :+ StringEntry(fx._2, makeString(fx._3, ":"))) :+ StringEntry(fx._4, makeString(fx._5, ":")))
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, ":")))
10781213 }
10791214 }
10801215
10811216
1082-func fF (fG,fv,fH,an,fI,en,fJ) = {
1083- let aJ = valueOrErrorMessage(getString(aH(an)), "You don't have a duck staked")
1084- func fK (cb,az) = {
1085- let eY = value(assetInfo(fromBase58String(az)))
1086- let eZ = ar(az)
1087- let fa = valueOrErrorMessage(getInteger(eZ), (("NFT " + eY.name) + " is not staked"))
1088- let fb = valueOrErrorMessage(getString(ao(az)), (("NFT " + eY.name) + " is orphaned"))
1089- if ((fb != an))
1090- then throw((i + " is not yours"))
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"))
10911226 else {
1092- let fc = split(eY.description, "_")
1093- let eq = fc[F]
1094- if (if ((cb._3 != ""))
1095- then (cb._3 != eq)
1227+ let fR = split(bW.description, "_")
1228+ let fg = fR[Y]
1229+ if (if ((bI._3 != ""))
1230+ then (bI._3 != fg)
10961231 else false)
10971232 then throw("Lands should be on the same continent to merge")
10981233 else {
1099- let aZ = fc[D]
1100- let fL = cb._1
1101- let ct = valueOrErrorMessage(indexOf(fL, aZ), "You haven't passed all the lands needed")
1102- let fM = (take(fL, ct) + drop(fL, (ct + 1)))
1103- let eN = aY(aZ)
1104- let fN = (cb._2 + valueOrElse(getInteger(at(k, az)), 0))
1105- let dz = valueOrElse(getInteger(as(az)), 0)
1106- let fO = {
1107- let c = aZ
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
11081243 if (("S" == c))
11091244 then 3
11101245 else if (("M" == c))
11151250 then 6
11161251 else throw("Only S, M, L, XL can merge")
11171252 }
1118- if ((dz != fO))
1253+ if ((ep != gE))
11191254 then throw("All lands should be maxed to merge")
11201255 else {
1121- let bF = fc[C]
1122- let cp = cv(fc[E])
1123- let cz = (lastBlock.timestamp - fa)
1124- if ((0 > cz))
1125- then throw(((("Saved timestamp is in future, saved = " + toString(fa)) + ", current = ") + toString(lastBlock.timestamp)))
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)))
11261261 else {
1127- let ff = eM(az, eN)
1128- let dy = (eN / m)
1129- let fn = cx(split(cb._4, "_"), cp, cz, dy, ff)
1130- let ce = cn(split(cb._6, "_"), cp, dy, -1)
1131- let fP = cb._7
1132- let ah = indexOf(fP, az)
1133- if (!(isDefined(ah)))
1134- then throw(("Your staked lands don't contain " + az))
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))
11351270 else {
1136- let fQ = aq(az)
1137- let fR = valueOrElse(getString(fQ), "")
1138- $Tuple8(fM, fN, eq, fn, (((((((((((((cb._5 :+ DeleteEntry(ar(az))) :+ DeleteEntry(av(i, az, an))) :+ DeleteEntry(bE(bF))) :+ DeleteEntry(ao(az))) :+ DeleteEntry(as(az))) :+ DeleteEntry(bI(az, an))) :+ DeleteEntry(at(k, az))) :+ DeleteEntry(bJ(k, az, an))) :+ DeleteEntry(bK(bF))) :+ DeleteEntry(ay(az))) :+ DeleteEntry(fQ)) :+ DeleteEntry(bG(fR))) :+ Burn(fromBase58String(az), 1)), ce, removeByIndex(fP, value(ah)), (cb._8 + eN))
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))
11391274 }
11401275 }
11411276 }
11431278 }
11441279 }
11451280
1146- let dc = aI(aJ)
1147- let dP = db(dc)
1148- let fS = valueOrElse(getString(aM()), "0_0_0_0_0_0")
1149- let fT = aA(an)
1150- let fU = getString(fT)
1151- let fV = if (isDefined(fU))
1152- then split_51C(value(fU), "_")
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), "_")
11531288 else nil
1154- let cf = {
1155- let bf = fI
1156- let bg = size(bf)
1157- let bh = $Tuple8(fH, 0, "", dP[Q], nil, fS, fV, 0)
1158- func bi (bj,bk) = if ((bk >= bg))
1159- then bj
1160- else fK(bj, bf[bk])
1161-
1162- func bl (bj,bk) = if ((bk >= bg))
1163- then bj
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
11641299 else throw("List size exceeds 5")
11651300
1166- bl(bi(bi(bi(bi(bi(bh, 0), 1), 2), 3), 4), 5)
1301+ bR(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5)
11671302 }
1168- let eq = cf._3
1169- let cX = valueOrErrorMessage(indexOf(z, eq), ("Unknown continent: " + eq))
1170- let cw = cV(cO(toBigInt(en)), cX)
1171- let ep = valueOrElse(getInteger(bD()), (bC + 1))
1172- let fW = toString(ep)
1173- let er = Issue(bU(fW, fG), makeString([fW, fG, cw, eq], "_"), 1, 0, false)
1174- let ap = calculateAssetId(er)
1175- let fX = toBase58String(ap)
1176- let eK = makeString(cg((fJ > 0), split(dP[R], "_"), fJ), "_")
1177- let fY = aB(an)
1178- let fZ = valueOrElse(getInteger(fY), 0)
1179- $Tuple2((((((((((((((((cf._5 :+ (if ((size(cf._7) > 0))
1180- then StringEntry(fT, makeString_11C(cf._7, "_"))
1181- else DeleteEntry(fT))) :+ IntegerEntry(fY, if ((cf._8 > fZ))
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))
11821317 then 0
1183- else (fZ - cf._8))) :+ IntegerEntry(bD(), (ep + 1))) :+ er) :+ StringEntry(bE(fW), fX)) :+ StringEntry(ao(fX), an)) :+ StringEntry(bK(fW), an)) :+ IntegerEntry(at(k, fX), cf._2)) :+ IntegerEntry(bJ(k, fX, an), cf._2)) :+ IntegerEntry(as(fX), fv)) :+ IntegerEntry(bI(fX, an), fv)) :+ StringEntry(dc, makeString([dP[P], cf._4, eK, dP[S]], ":"))) :+ StringEntry(aM(), cf._6)) :+ StringEntry(aK(aJ), makeString([eq, "L", fX], "_"))) :+ ScriptTransfer(addressFromStringValue(an), 1, ap)), fX)
1184- }
1185-
1186-
1187-func ga (an,fI,en) = fF("M", 3, "SSSS", an, fI, en, 0)
1188-
1189-
1190-func gb (an,fI,en,ch,fs) = {
1191- let fw = (bt * 4)
1192- if (if (!(ch))
1193- then (fs != fw)
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)
11941329 else false)
1195- then throw(("Payment attached should be " + toString(fw)))
1196- else fF("L", 4, "SMM", an, fI, en, (e * 4))
1197- }
1198-
1199-
1200-func gc (an,fI,en,ch,fs) = {
1201- let fw = (bt * 47)
1202- if (if (!(ch))
1203- then (fs != fw)
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)
12041339 else false)
1205- then throw(("Payment attached should be " + toString(fw)))
1206- else fF("XL", 5, "SSSML", an, fI, en, (e * 47))
1207- }
1208-
1209-
1210-func gd (an,fI,en,ch,fs) = {
1211- let fw = (bt * 54)
1212- if (if (!(ch))
1213- then (fs != fw)
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)
12141349 else false)
1215- then throw(("Payment attached should be " + toString(fw)))
1216- else fF("XXL", 6, "LXL", an, fI, en, (e * 54))
1217- }
1218-
1219-
1220-func ge (ch,an,fs,fI,en) = {
1221- let gf = {
1222- let c = size(fI)
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)
12231358 if ((4 == c))
1224- then ga(an, fI, en)
1359+ then gO(aK, gy, fd)
12251360 else if ((3 == c))
1226- then gb(an, fI, en, ch, fs)
1361+ then gP(aK, gy, fd, db, gh)
12271362 else if ((5 == c))
1228- then gc(an, fI, en, ch, fs)
1363+ then gQ(aK, gy, fd, db, gh)
12291364 else if ((2 == c))
1230- then gd(an, fI, en, ch, fs)
1365+ then gR(aK, gy, fd, db, gh)
12311366 else throw("Unknown merge")
12321367 }
1233- gf
1234- }
1235-
1236-
1237-func gg (ct) = if (if ((ct.originCaller != ai))
1238- then valueOrElse(getBoolean(aN()), false)
1368+ gT
1369+ }
1370+
1371+
1372+func gU (dn) = if (if ((dn.originCaller != aE))
1373+ then valueOrElse(getBoolean(bk()), false)
12391374 else false)
12401375 then throw("Contracts are under maintenance")
1241- else StringEntry(am(toString(ct.originCaller)), toBase58String(ct.transactionId))
1242-
1243-
1244-@Callable(ct)
1245-func constructorV1 (gh) = if ((ct.caller != this))
1376+ else StringEntry(aJ(toString(dn.originCaller)), toBase58String(dn.transactionId))
1377+
1378+
1379+@Callable(dn)
1380+func constructorV1 (gV) = if ((dn.caller != this))
12461381 then throw("Permission denied")
1247- else [StringEntry(ac(), gh)]
1248-
1249-
1250-
1251-@Callable(ct)
1252-func setBlocked (gi) = if ((ct.caller != this))
1382+ else [StringEntry(ay(), gV)]
1383+
1384+
1385+
1386+@Callable(dn)
1387+func setBlocked (gW) = if ((dn.caller != this))
12531388 then throw("permission denied")
1254- else [BooleanEntry(aN(), gi)]
1255-
1256-
1257-
1258-@Callable(ct)
1389+ else [BooleanEntry(bk(), gW)]
1390+
1391+
1392+
1393+@Callable(dn)
12591394 func stakeLand () = {
1260- let gj = gg(ct)
1261- if ((size(ct.payments) != 1))
1395+ let gX = gU(dn)
1396+ if ((size(dn.payments) != 1))
12621397 then throw("Exactly one payment required")
12631398 else {
1264- let gk = value(ct.payments[0])
1265- let ap = value(gk.assetId)
1266- let W = toString(ct.caller)
1267- if ((gk.amount != 1))
1268- then throw((("NFT " + i) + " token should be attached as payment"))
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"))
12691404 else {
1270- let eY = value(assetInfo(ap))
1271- if ((eY.issuer != this))
1405+ let bW = value(assetInfo(aM))
1406+ if ((bW.issuer != this))
12721407 then throw("Unknown issuer of token")
1273- else if (!(contains(eY.name, i)))
1274- then throw((("Only NFT " + i) + " tokens are accepted"))
1408+ else if (!(contains(bW.name, k)))
1409+ then throw((("Only NFT " + k) + " tokens are accepted"))
12751410 else {
1276- let gl = drop(eY.name, 4)
1277- let bF = if (contains(gl, "XXL"))
1278- then dropRight(gl, 3)
1279- else if (contains(gl, "XL"))
1280- then dropRight(gl, 2)
1281- else dropRight(gl, 1)
1282- if (!(isDefined(parseInt(bF))))
1283- then throw(("Cannot parse land number from " + eY.name))
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))
12841419 else {
1285- let az = toBase58String(ap)
1286- let eZ = ar(az)
1287- if (isDefined(getInteger(eZ)))
1288- then throw((("NFT " + eY.name) + " is already staked"))
1420+ let aW = toBase58String(aM)
1421+ let fO = aO(aW)
1422+ if (isDefined(getInteger(fO)))
1423+ then throw((("NFT " + bW.name) + " is already staked"))
12891424 else {
1290- let fc = split(eY.description, "_")
1291- let cp = cv(fc[E])
1292- let eN = aY(fc[D])
1293- let ce = cu(cp, (eN / m), 1)
1294- let eO = valueOrElse(getInteger(at(k, az)), 0)
1295- let fT = aA(W)
1296- let fU = getString(fT)
1297- let fP = if (isDefined(fU))
1298- then split_51C(value(fU), "_")
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), "_")
12991434 else nil
1300- if (containsElement(fP, az))
1301- then throw(("Your staked lands already contain " + az))
1435+ if (containsElement(bU, aW))
1436+ then throw(("Your staked lands already contain " + aW))
13021437 else {
1303- let dz = valueOrElse(getInteger(as(az)), 0)
1304-[IntegerEntry(eZ, lastBlock.timestamp), IntegerEntry(av(i, az, W), lastBlock.timestamp), StringEntry(fT, makeString_11C((fP :+ az), "_")), IntegerEntry(aB(W), (valueOrElse(getInteger(aB(W)), 0) + eN)), StringEntry(ao(az), W), StringEntry(bK(bF), W), IntegerEntry(bJ(k, az, W), eO), IntegerEntry(bI(az, W), dz), StringEntry(aM(), ce), gj]
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]
13051440 }
13061441 }
13071442 }
13121447
13131448
13141449
1315-@Callable(ct)
1316-func unstakeLand (eT) = {
1317- let gj = gg(ct)
1318- if ((size(ct.payments) != 0))
1450+@Callable(dn)
1451+func unstakeLand (fJ) = {
1452+ let gX = gU(dn)
1453+ if ((size(dn.payments) != 0))
13191454 then throw("No payments required")
13201455 else {
1321- let an = toString(ct.caller)
1322- let fe = eR(an, bP, eT)
1323- let az = fe._2
1324- let fT = aA(an)
1325- let cp = cv(fe._3[E])
1326- let eN = aY(fe._3[D])
1327- let ce = cu(cp, (eN / m), -1)
1328- let fx = fq(an, az, eN, bP)
1329- let fP = split_51C(valueOrElse(getString(fT), ""), "_")
1330- let ah = indexOf(fP, az)
1331- if (!(isDefined(ah)))
1332- then throw(("Your staked lands don't contain " + az))
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))
13331468 else {
1334- let da = value(blockInfoByHeight(height)).timestamp
1335- let gm = valueOrElse(getInteger(al, aO(an)), 0)
1336- if ((gm >= da))
1337- then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(gm)))
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)))
13381473 else {
1339- let fY = aB(an)
1340- let fZ = valueOrElse(getInteger(fY), 0)
1341-[ScriptTransfer(ct.caller, 1, fromBase58String(az)), DeleteEntry(ar(az)), DeleteEntry(av(i, az, an)), StringEntry(aM(), ce), StringEntry(fx._2, makeString(fx._3, ":")), if ((size(fP) > 1))
1342- then StringEntry(fT, makeString_11C(removeByIndex(fP, value(ah)), "_"))
1343- else DeleteEntry(fT), IntegerEntry(fY, if ((eN > fZ))
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))
13441479 then 0
1345- else (fZ - eN)), gj]
1480+ else (gN - fD)), gX]
13461481 }
13471482 }
13481483 }
13501485
13511486
13521487
1353-@Callable(ct)
1488+@Callable(dn)
13541489 func stakeDuck () = {
1355- let gj = gg(ct)
1356- if ((size(ct.payments) != 1))
1490+ let gX = gU(dn)
1491+ if ((size(dn.payments) != 1))
13571492 then throw("Exactly one payment required")
13581493 else {
1359- let gk = value(ct.payments[0])
1360- let ap = value(gk.assetId)
1361- let W = toString(ct.caller)
1362- if ((gk.amount != 1))
1363- then throw((("NFT " + j) + " token should be attached as payment"))
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"))
13641499 else {
1365- let eY = value(assetInfo(ap))
1366- if (if ((eY.issuer != bm))
1367- then (eY.issuer != bn)
1500+ let bW = value(assetInfo(aM))
1501+ if (if ((bW.issuer != ce))
1502+ then (bW.issuer != cf)
13681503 else false)
1369- then throw((("Unknown issuer of " + j) + " token"))
1370- else if (!(contains(eY.name, j)))
1371- then throw((("Only NFT " + j) + " tokens are accepted"))
1504+ then throw((("Unknown issuer of " + l) + " token"))
1505+ else if (!(contains(bW.name, l)))
1506+ then throw((("Only NFT " + l) + " tokens are accepted"))
13721507 else {
1373- let gn = toBase58String(ap)
1374- let eZ = ar(gn)
1375- if (isDefined(getInteger(eZ)))
1376- then throw((("NFT " + eY.name) + " is already staked"))
1377- else if (isDefined(getString(aH(W))))
1378- then throw(("You already staked one duck: " + eY.name))
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))
13791514 else {
1380- let go = aK(gn)
1381- let gp = getString(go)
1382- let dc = aI(gn)
1383- let gq = getString(dc)
1384- ([IntegerEntry(eZ, lastBlock.timestamp), IntegerEntry(av(j, toBase58String(ap), W), lastBlock.timestamp), StringEntry(aG(gn), W), StringEntry(aH(W), gn)] ++ (if (isDefined(gp))
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))
13851520 then nil
1386- else ([StringEntry(go, u)] ++ (if (isDefined(gq))
1521+ else ([StringEntry(hc, w)] ++ (if (isDefined(he))
13871522 then nil
1388- else (([StringEntry(dc, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(aL(gn), 100)) :+ gj)))))
1523+ else (([StringEntry(dV, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(bi(hb), 100)) :+ gX)))))
13891524 }
13901525 }
13911526 }
13941529
13951530
13961531
1397-@Callable(ct)
1398-func unstakeDuck (gn) = {
1399- let gj = gg(ct)
1400- if ((size(ct.payments) != 0))
1532+@Callable(dn)
1533+func unstakeDuck (hb) = {
1534+ let gX = gU(dn)
1535+ if ((size(dn.payments) != 0))
14011536 then throw("No payments required")
14021537 else {
1403- let ap = fromBase58String(gn)
1404- let W = toString(ct.caller)
1405- let eY = value(assetInfo(ap))
1406- let eZ = ar(toBase58String(ap))
1407- if (!(isDefined(getInteger(eZ))))
1408- then throw((("NFT " + eY.name) + " is not staked"))
1409- else if (!(isDefined(getString(aH(W)))))
1410- then throw((("The duck " + eY.name) + " is not staked"))
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"))
14111546 else {
1412- let fb = valueOrErrorMessage(getString(aG(toBase58String(ap))), (("NFT " + eY.name) + " is orphaned"))
1413- if ((fb != W))
1547+ let fQ = valueOrErrorMessage(getString(bd(toBase58String(aM))), (("NFT " + bW.name) + " is orphaned"))
1548+ if ((fQ != ap))
14141549 then throw("Staked NFT is not yours")
14151550 else {
1416- let eF = aL(gn)
1417- let gr = valueOrElse(getInteger(eF), 100)
1418- if ((100 > gr))
1551+ let fv = bi(hb)
1552+ let hf = valueOrElse(getInteger(fv), 100)
1553+ if ((100 > hf))
14191554 then throw("Please heal your duck before unstaking")
1420- else [ScriptTransfer(ct.caller, 1, ap), DeleteEntry(eZ), DeleteEntry(eF), DeleteEntry(aK(gn)), DeleteEntry(aG(gn)), DeleteEntry(av(j, gn, W)), DeleteEntry(aH(W)), gj]
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]
14211556 }
14221557 }
14231558 }
14251560
14261561
14271562
1428-@Callable(ct)
1429-func claimRes (dM,gs) = {
1430- let gj = gg(ct)
1431- if ((size(ct.payments) != 0))
1563+@Callable(dn)
1564+func claimRes (eC,hg) = {
1565+ let gX = gU(dn)
1566+ if ((size(dn.payments) != 0))
14321567 then throw("No payments required")
14331568 else {
1434- let an = toString(ct.originCaller)
1435- let cm = fd(an, dM, bP, gs)
1436- $Tuple2((((cm._1 :+ StringEntry(cm._2, makeString(cm._3, ":"))) :+ StringEntry(cm._4, makeString(cm._5, ":"))) :+ gj), cm._3[Q])
1437- }
1438- }
1439-
1440-
1441-
1442-@Callable(ct)
1443-func claimResToWH (dM,gs) = {
1444- let gj = gg(ct)
1445- if ((size(ct.payments) != 0))
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))
14461581 then throw("No payments required")
14471582 else {
1448- let an = toString(ct.originCaller)
1449- let cm = fd(an, dM, bO, gs)
1450- $Tuple2((((cm._1 :+ StringEntry(cm._2, makeString(cm._3, ":"))) :+ StringEntry(cm._4, makeString(cm._5, ":"))) :+ gj), cm._5[H])
1451- }
1452- }
1453-
1454-
1455-
1456-@Callable(ct)
1457-func flight (eu,ev) = {
1458- let gj = gg(ct)
1459- if (!(sigVerify_8Kb(eu, ev, bo)))
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)))
14601595 then throw("signature does not match")
1461- else if ((size(ct.payments) != 0))
1596+ else if ((size(dn.payments) != 0))
14621597 then throw("No payments required")
14631598 else {
1464- let dg = split(toUtf8String(eu), ";")
1465- let ew = split(dg[0], "|")
1466- let ex = split(ew[bR], "_")
1467- let ey = parseIntValue(ex[0])
1468- let ez = parseIntValue(ex[1])
1469- let eA = split(dg[1], ":")
1470- let eB = eA[0]
1471- let eC = parseIntValue(ew[bS])
1472- if (if ((eC > (lastBlock.timestamp + bq)))
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)))
14731608 then true
1474- else ((lastBlock.timestamp - bq) > eC))
1475- then throw(((("signature outdated: logTime=" + toString(eC)) + ", bcTime=") + toString(lastBlock.timestamp)))
1609+ else ((lastBlock.timestamp - ci) > fs))
1610+ then throw(((("signature outdated: logTime=" + toString(fs)) + ", bcTime=") + toString(lastBlock.timestamp)))
14761611 else {
1477- let eD = eA[1]
1478- let eE = valueOrElse(getString(am(toString(ct.originCaller))), "")
1479- if ((eE != eD))
1480- then throw(((("Tx ids don't match! In state: " + eE) + ", in msg: ") + eD))
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))
14811616 else {
1482- let aP = toString(ct.caller)
1483- let aJ = valueOrErrorMessage(getString(aH(aP)), "You don't have a duck staked")
1484- let eF = aL(aJ)
1485- let eG = valueOrElse(getInteger(eF), 100)
1486- if ((eG != ey))
1487- then throw(((("oldHealth=" + toString(valueOrElse(getInteger(eF), 100))) + " from state does not match one from flight log=") + toString(ey)))
1488- else if ((0 >= ey))
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))
14891624 then throw("You can't fly with zero health")
14901625 else {
1491- let go = aK(aJ)
1492- let eV = valueOrElse(getString(go), u)
1493- if ((eB == eV))
1626+ let hc = bh(bg)
1627+ let fL = valueOrElse(getString(hc), w)
1628+ if ((fr == fL))
14941629 then throw("You can't fly to the same location")
14951630 else {
1496- let eH = if ((size(ew) > bT))
1497- then ew[bT]
1631+ let fx = if ((size(fm) > cP))
1632+ then fm[cP]
14981633 else ""
1499- let eI = if (if ((ez > 0))
1500- then (eH == "$")
1634+ let fy = if (if ((fp > 0))
1635+ then (fx == "$")
15011636 else false)
1502- then aW(invoke(ai, "sendUsdtPrize", [aP], nil))
1637+ then bv(invoke(aE, "sendUsdtPrize", [bm], nil))
15031638 else 0
1504- $Tuple2([StringEntry(go, if ((ez > 0))
1505- then eB
1506- else eV), IntegerEntry(eF, ez), gj], eI)
1639+ $Tuple2([StringEntry(hc, if ((fp > 0))
1640+ then fr
1641+ else fL), IntegerEntry(fv, fp), gX], fy)
15071642 }
15081643 }
15091644 }
15131648
15141649
15151650
1516-@Callable(ct)
1517-func heal (gt,gu,gv) = {
1518- let gj = gg(ct)
1519- if (if (if ((0 > gt))
1651+@Callable(dn)
1652+func heal (hh,hi,hj) = {
1653+ let gX = gU(dn)
1654+ if (if (if ((0 > hh))
15201655 then true
1521- else (0 > gu))
1656+ else (0 > hi))
15221657 then true
1523- else (0 > gv))
1658+ else (0 > hj))
15241659 then throw("Quantity cannot be negative")
15251660 else {
1526- let aJ = valueOrErrorMessage(getString(aH(toString(ct.caller))), "You don't have a duck staked")
1527- let gw = [gt, gu, gv]
1528- let eF = aL(aJ)
1529- let gx = valueOrElse(getInteger(eF), 100)
1530- if ((gx >= x))
1531- then throw((("HP should be < " + toString(x)) + " to heal"))
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"))
15321667 else {
1533- let dc = aI(aJ)
1534- let dP = db(dc)
1535- let gy = if ((dP[S] == ""))
1668+ let dV = bf(bg)
1669+ let eF = dU(dV)
1670+ let hm = if ((eF[al] == ""))
15361671 then nil
1537- else split(dP[S], "_")
1538- func gz (cb,gA) = {
1539- let aX = cb._2
1540- let cP = if ((size(gy) > aX))
1541- then parseIntValue(gy[aX])
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])
15421677 else 0
1543- if ((3 > aX))
1678+ if ((3 > bw))
15441679 then {
1545- let gB = gw[aX]
1546- if ((gB > cP))
1547- then throw(((("You have only " + toString(cP)) + " of ") + y[aX]))
1548- else $Tuple3((cb._1 :+ toString((cP - gB))), (aX + 1), (cb._3 + (bp[aX] * gB)))
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)))
15491684 }
1550- else $Tuple3((cb._1 :+ toString(cP)), (aX + 1), cb._3)
1685+ else $Tuple3((bI._1 :+ toString(dI)), (bw + 1), bI._3)
15511686 }
15521687
1553- let cm = {
1554- let bf = A
1555- let bg = size(bf)
1556- let bh = $Tuple3(nil, 0, 0)
1557- func bi (bj,bk) = if ((bk >= bg))
1558- then bj
1559- else gz(bj, bf[bk])
1560-
1561- func bl (bj,bk) = if ((bk >= bg))
1562- then bj
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
15631698 else throw("List size exceeds 50")
15641699
1565- bl(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bh, 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)
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)
15661701 }
1567- let gC = min([x, (gx + cm._3)])
1568- $Tuple2([IntegerEntry(eF, gC), StringEntry(dc, makeString_2C([dP[P], dP[Q], dP[R], makeString(cm._1, "_")], ":")), gj], gC)
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)
15691704 }
15701705 }
15711706 }
15721707
15731708
15741709
1575-@Callable(ct)
1710+@Callable(dn)
15761711 func healES () = {
1577- let gj = gg(ct)
1578- if ((size(ct.payments) != 1))
1712+ let gX = gU(dn)
1713+ if ((size(dn.payments) != 1))
15791714 then throw("Exactly one payment required")
15801715 else {
1581- let gk = value(ct.payments[0])
1582- if ((gk.assetId != b))
1716+ let gY = value(dn.payments[0])
1717+ if ((gY.assetId != b))
15831718 then throw("Allowed USDT payment only!")
15841719 else {
1585- let aJ = valueOrErrorMessage(getString(aH(toString(ct.caller))), "You don't have a duck staked")
1586- let eF = aL(aJ)
1587- let gx = valueOrElse(getInteger(eF), 100)
1588- if ((gx > 0))
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))
15891724 then throw("HP should be 0 to call Emergency Service")
15901725 else {
1591- let dc = aI(aJ)
1592- let dP = db(dc)
1593- let gy = if ((dP[S] == ""))
1726+ let dV = bf(bg)
1727+ let eF = dU(dV)
1728+ let hm = if ((eF[al] == ""))
15941729 then nil
1595- else split(dP[S], "_")
1596- let gD = if ((size(gy) > 0))
1597- then parseIntValue(gy[0])
1730+ else split(eF[al], "_")
1731+ let hr = if ((size(hm) > 0))
1732+ then parseIntValue(hm[0])
15981733 else 0
1599- let gE = if ((size(gy) > 1))
1600- then parseIntValue(gy[1])
1734+ let hs = if ((size(hm) > 1))
1735+ then parseIntValue(hm[1])
16011736 else 0
1602- let gF = if ((size(gy) > 2))
1603- then parseIntValue(gy[2])
1737+ let ht = if ((size(hm) > 2))
1738+ then parseIntValue(hm[2])
16041739 else 0
1605- if (if (if ((gD > 0))
1740+ if (if (if ((hr > 0))
16061741 then true
1607- else (gE > 0))
1742+ else (hs > 0))
16081743 then true
1609- else (gF > 0))
1744+ else (ht > 0))
16101745 then throw("You have to use own Medical Kit")
16111746 else {
1612- let gG = getString(ak, aQ())
1613- let gH = if (isDefined(gG))
1614- then split(value(gG), "_")
1747+ let hu = getString(aG, bo())
1748+ let hv = if (isDefined(hu))
1749+ then split(value(hu), "_")
16151750 else nil
1616- let gI = if ((size(gH) > 0))
1617- then parseIntValue(gH[0])
1751+ let hw = if ((size(hv) > 0))
1752+ then parseIntValue(hv[0])
16181753 else 0
1619- if ((0 >= gI))
1754+ if ((0 >= hw))
16201755 then throw("There are no Medical Kits L1 at Emergency Service storage")
16211756 else {
1622- let gC = (gx + bp[0])
1623- let gJ = makeString([toString((gI - 1)), removeByIndex(gH, 0)], "_")
1624- let bb = split(A[0], "_")
1625- let gK = ba(bb)
1626- let gL = parseIntValue(bb[B])
1627- let gM = fraction((gK * w), v, (10 * gL))
1628- if ((gk.amount != gM))
1629- then throw(("Payment attached should be " + toString(gM)))
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)))
16301765 else {
1631- let cm = aT(invoke(ak, "updateEsStorage", [gJ], [AttachedPayment(b, gM)]))
1632- $Tuple2([IntegerEntry(eF, gC), gj], cm)
1766+ let dg = bs(invoke(aG, "updateEsStorage", [hx], [AttachedPayment(b, hA)]))
1767+ $Tuple2([IntegerEntry(fv, hq), gX], dg)
16331768 }
16341769 }
16351770 }
16401775
16411776
16421777
1643-@Callable(ct)
1644-func updateBackpack (aJ,gN) = {
1645- let gj = gg(ct)
1646- if ((ct.caller != ak))
1778+@Callable(dn)
1779+func updateBackpack (bg,hB) = {
1780+ let gX = gU(dn)
1781+ if ((dn.caller != aG))
16471782 then throw("permission denied")
1648- else $Tuple2([StringEntry(aI(aJ), gN), gj], gN)
1649- }
1650-
1651-
1652-
1653-@Callable(ct)
1783+ else $Tuple2([StringEntry(bf(bg), hB), gX], hB)
1784+ }
1785+
1786+
1787+
1788+@Callable(dn)
16541789 func buySLand () = {
1655- let gj = gg(ct)
1656- if ((size(ct.payments) != 1))
1790+ let gX = gU(dn)
1791+ if ((size(dn.payments) != 1))
16571792 then throw("Exactly one payment required")
16581793 else {
1659- let gk = value(ct.payments[0])
1660- if ((gk.assetId != b))
1794+ let gY = value(dn.payments[0])
1795+ if ((gY.assetId != b))
16611796 then throw("Allowed USDT payment only!")
1662- else if ((gk.amount != bv))
1663- then throw(("Payment attached should be " + toString(bv)))
1797+ else if ((gY.amount != cn))
1798+ then throw(("Payment attached should be " + toString(cn)))
16641799 else {
1665- let cm = el(ct.caller, ct.transactionId)
1666- $Tuple2(((cm._1 :+ ScriptTransfer(ak, gk.amount, b)) :+ gj), cm._2._1)
1800+ let dg = fb(dn.caller, dn.transactionId)
1801+ $Tuple2(((dg._1 :+ ScriptTransfer(aG, gY.amount, b)) :+ gX), dg._2._1)
16671802 }
16681803 }
16691804 }
16701805
16711806
16721807
1673-@Callable(ct)
1674-func expedition (eu,ev) = {
1675- let gj = gg(ct)
1676- if ((size(ct.payments) != 0))
1808+@Callable(dn)
1809+func expedition (fk,fl) = {
1810+ let gX = gU(dn)
1811+ if ((size(dn.payments) != 0))
16771812 then throw("No payments required")
16781813 else {
1679- let cm = et(true, ct.caller, ct.transactionId, eu, ev)
1680- $Tuple2((cm._1 :+ gj), $Tuple2(cm._2, cm._3))
1681- }
1682- }
1683-
1684-
1685-
1686-@Callable(ct)
1687-func upgradeInfra (az) = {
1688- let gj = gg(ct)
1689- if ((size(ct.payments) != 0))
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))
16901825 then throw("No payments required")
16911826 else {
1692- let cm = fr(true, ct.caller, 0, az)
1693- $Tuple2((cm._1 :+ gj), cm._2)
1694- }
1695- }
1696-
1697-
1698-
1699-@Callable(ct)
1700-func upgradeInfraUsdt (az) = if ((ct.caller != this))
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))
17011836 then throw("Permission denied")
17021837 else {
1703- let gj = gg(ct)
1704- if ((size(ct.payments) != 1))
1838+ let gX = gU(dn)
1839+ if ((size(dn.payments) != 1))
17051840 then throw("Exactly one payment required")
17061841 else {
1707- let gk = value(ct.payments[0])
1708- if ((gk.assetId != b))
1842+ let gY = value(dn.payments[0])
1843+ if ((gY.assetId != b))
17091844 then throw("Allowed USDT payment only!")
17101845 else {
1711- let cm = fr(false, ct.caller, gk.amount, az)
1712- $Tuple2(((cm._1 :+ ScriptTransfer(ak, gk.amount, b)) :+ gj), cm._2)
1846+ let dg = gg(false, dn.caller, gY.amount, aW)
1847+ $Tuple2(((dg._1 :+ ScriptTransfer(aG, gY.amount, b)) :+ gX), dg._2)
17131848 }
17141849 }
17151850 }
17161851
17171852
17181853
1719-@Callable(ct)
1720-func activateArtifact (gO,az) = {
1721- let gj = gg(ct)
1722- if ((size(ct.payments) != 0))
1854+@Callable(dn)
1855+func activateArtifact (hC,aW) = {
1856+ let gX = gU(dn)
1857+ if ((size(dn.payments) != 0))
17231858 then throw("No payments required")
17241859 else {
1725- let cm = {
1726- let c = gO
1860+ let dg = {
1861+ let c = hC
17271862 if (("PRESALE" == c))
1728- then fD(toString(ct.caller), az)
1863+ then gt(toString(dn.caller), aW)
17291864 else throw("Unknown artifact")
17301865 }
1731- (cm :+ gj)
1732- }
1733- }
1734-
1735-
1736-
1737-@Callable(ct)
1738-func mergeLands (fI) = {
1739- let gj = gg(ct)
1740- if ((size(ct.payments) != 0))
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))
17411876 then throw("No payments required")
17421877 else {
1743- let cm = ge(true, toString(ct.caller), 0, fI, ct.transactionId)
1744- $Tuple2((cm._1 :+ gj), cm._2)
1745- }
1746- }
1747-
1748-
1749-
1750-@Callable(ct)
1751-func mergeLandsUsdt (fI) = {
1752- let gj = gg(ct)
1753- if ((size(ct.payments) != 1))
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))
17541889 then throw("Exactly one payment required")
17551890 else {
1756- let gk = value(ct.payments[0])
1757- if ((gk.assetId != b))
1891+ let gY = value(dn.payments[0])
1892+ if ((gY.assetId != b))
17581893 then throw("Allowed USDT payment only!")
17591894 else {
1760- let cm = ge(false, toString(ct.caller), gk.amount, fI, ct.transactionId)
1761- $Tuple2(((cm._1 :+ ScriptTransfer(ak, gk.amount, b)) :+ gj), cm._2)
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)
17621897 }
17631898 }
17641899 }
17651900
17661901
17671902
1768-@Callable(ct)
1769-func cargoExchange (gP,az) = {
1770- let gj = gg(ct)
1771- if ((size(ct.payments) != 0))
1903+@Callable(dn)
1904+func cargoExchange (hD,aW) = {
1905+ let gX = gU(dn)
1906+ if ((size(dn.payments) != 0))
17721907 then throw("No payments required")
17731908 else {
1774- let dO = split_4C(gP, ":")
1775- let an = toString(ct.originCaller)
1776- let eY = value(assetInfo(fromBase58String(az)))
1777- let eZ = ar(az)
1778- if (!(isDefined(getInteger(eZ))))
1779- then throw((eY.name + " is not staked"))
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"))
17801915 else {
1781- let fb = valueOrErrorMessage(getString(ao(az)), (("NFT " + eY.name) + " is orphaned"))
1782- if ((fb != an))
1783- then throw((i + " is not yours"))
1916+ let fQ = valueOrErrorMessage(getString(aL(aW)), (("NFT " + bW.name) + " is orphaned"))
1917+ if ((fQ != aK))
1918+ then throw((k + " is not yours"))
17841919 else {
1785- let dy = (aY(split(eY.description, "_")[D]) / m)
1786- let dz = valueOrElse(getInteger(as(az)), 0)
1787- let aJ = valueOrErrorMessage(getString(aH(an)), "You don't have a duck staked")
1788- let eV = valueOrElse(getString(aK(aJ)), u)
1789- let eW = split(value(eV), "_")
1790- if ((eW[aR] != "L"))
1791- then throw((("Duck location type is " + eW[aR]) + ", but should be L"))
1792- else if ((eW[aS] != az))
1793- then throw(("Duck should be on the land " + az))
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))
17941929 else {
1795- let dx = ay(az)
1796- let di = dw(dx, dy, dz)
1797- let dc = aI(aJ)
1798- let dP = db(dc)
1799- let cm = dN(dO, di, dP)
1800- let dF = split(di[K], "_")
1801- let fo = (parseIntValue(dF[M]) + cm._7)
1802- let fp = (parseIntValue(dF[N]) - cm._7)
1803-[StringEntry(dc, makeString_2C([dP[P], cm._4, cm._5, cm._6], ":")), StringEntry(dx, makeString_2C([di[G], cm._1, cm._2, cm._3, makeString([dF[L], toString(fo), toString(fp), dF[O]], "_")], ":")), gj]
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]
18041939 }
18051940 }
18061941 }
18091944
18101945
18111946
1812-@Callable(ct)
1813-func saveWarehouse (dB,az) = {
1814- let gj = gg(ct)
1815- if ((ct.caller != ak))
1947+@Callable(dn)
1948+func saveWarehouse (er,aW) = {
1949+ let gX = gU(dn)
1950+ if ((dn.caller != aG))
18161951 then throw("Access denied")
18171952 else {
1818- let dx = ay(az)
1819- let dC = split_4C(dB, ":")
1820- if ((size(dC) != 5))
1953+ let en = aV(aW)
1954+ let es = split_4C(er, ":")
1955+ if ((size(es) != 5))
18211956 then throw("warehouse string should contain 4 ':' separators")
18221957 else {
1823- let gQ = split(dC[K], "_")[L]
1824- let fo = dh(dC)
1825- let gR = de(dC[G])
1826- let fp = ((gR - parseIntValue(gQ)) - fo)
1827- let gS = makeString_2C([dC[G], dC[H], dC[I], dC[J], makeString([gQ, toString(fo), toString(fp), toString(gR)], "_")], ":")
1828- $Tuple2([StringEntry(dx, gS), gj], gS)
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)
18291964 }
18301965 }
18311966 }
18321967
18331968
18341969
1835-@Callable(ct)
1836-func fixWarehouseFormat (az) = if ((ct.caller != ai))
1970+@Callable(dn)
1971+func fixWarehouseFormat (aW) = if ((dn.caller != aE))
18371972 then throw("Access denied")
18381973 else {
1839- let dx = ay(az)
1840- let eY = value(assetInfo(fromBase58String(az)))
1841- let dy = (aY(split(eY.description, "_")[D]) / m)
1842- let dz = valueOrElse(getInteger(as(az)), 0)
1843- let dC = dw(dx, dy, dz)
1844- let gQ = aW(invoke(ak, "recalcLockedVolumeREADONLY", [az, dC], nil))
1845- let fo = dh(dC)
1846- let gR = de(dC[G])
1847- let fp = ((gR - gQ) - fo)
1848- let gS = makeString_2C([dC[G], dC[H], dC[I], dC[J], makeString([toString(gQ), toString(fo), toString(fp), toString(gR)], "_")], ":")
1849- $Tuple2([StringEntry(dx, gS)], gS)
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)
18501985 }
18511986
18521987
18531988
1854-@Callable(ct)
1855-func fixStakedPieces (W) = if ((ct.caller != ai))
1989+@Callable(dn)
1990+func fixStakedPieces (ap) = if ((dn.caller != aE))
18561991 then throw("Access denied")
18571992 else {
1858- let fZ = if ((W == ""))
1993+ let gN = if ((ap == ""))
18591994 then 0
18601995 else {
1861- let fU = getString(aj, aA(W))
1862- let fP = if (isDefined(fU))
1863- then split_51C(value(fU), "_")
1996+ let bT = getString(aF, aX(ap))
1997+ let bU = if (isDefined(bT))
1998+ then split_51C(value(bT), "_")
18641999 else nil
1865- func gT (cb,az) = {
1866- let eY = value(assetInfo(fromBase58String(az)))
1867- let aZ = split(eY.description, "_")[D]
1868- (cb + aY(aZ))
2000+ func bV (bI,aW) = {
2001+ let bW = value(assetInfo(fromBase58String(aW)))
2002+ let bB = split(bW.description, "_")[W]
2003+ (bI + bA(bB))
18692004 }
18702005
1871- let bf = fP
1872- let bg = size(bf)
1873- let bh = 0
1874- func bi (bj,bk) = if ((bk >= bg))
1875- then bj
1876- else gT(bj, bf[bk])
1877-
1878- func bl (bj,bk) = if ((bk >= bg))
1879- then bj
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
18802015 else throw("List size exceeds 100")
18812016
1882- bl(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bh, 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)
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)
18832018 }
1884- $Tuple2([IntegerEntry(aB(W), fZ)], fZ)
2019+ $Tuple2([IntegerEntry(aY(ap), gN)], gN)
18852020 }
18862021
18872022
18882023
1889-@Callable(ct)
1890-func setCustomName (ap,fR,au) = {
1891- let gj = gg(ct)
1892- if ((size(ct.payments) != 1))
2024+@Callable(dn)
2025+func setCustomName (aM,gG,aR) = {
2026+ let gX = gU(dn)
2027+ if ((size(dn.payments) != 1))
18932028 then throw("Exactly one payment required")
18942029 else {
1895- let gk = value(ct.payments[0])
1896- if ((gk.assetId != b))
2030+ let gY = value(dn.payments[0])
2031+ if ((gY.assetId != b))
18972032 then throw("Allowed USDT payment only!")
1898- else if ((gk.amount != br))
1899- then throw(("Payment should be " + toString(br)))
1900- else if (contains(fR, "__"))
1901- then throw(("Name should not contain '__': " + fR))
1902- else if ((size(fR) > bs))
1903- then throw(("Name too long, maxLength=" + toString(bs)))
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)))
19042039 else {
1905- let an = toString(ct.originCaller)
1906- let gU = {
1907- let c = au
2040+ let aK = toString(dn.originCaller)
2041+ let hH = {
2042+ let c = aR
19082043 if (("ACCOUNT" == c))
19092044 then {
1910- let gV = bM(fR)
1911- let gW = getString(gV)
1912- if (isDefined(gW))
1913- then throw(("Name already registered: " + fR))
2045+ let hI = cE(gG)
2046+ let hJ = getString(hI)
2047+ if (isDefined(hJ))
2048+ then throw(("Name already registered: " + gG))
19142049 else {
1915- let gX = aD(an)
1916- let gY = getString(gX)
1917- let gZ = if (isDefined(gY))
1918- then [DeleteEntry(bM(value(gY)))]
2050+ let hK = ba(aK)
2051+ let hL = getString(hK)
2052+ let hM = if (isDefined(hL))
2053+ then [DeleteEntry(cE(value(hL)))]
19192054 else nil
1920- ((gZ :+ StringEntry(gX, fR)) :+ StringEntry(gV, an))
2055+ ((hM :+ StringEntry(hK, gG)) :+ StringEntry(hI, aK))
19212056 }
19222057 }
19232058 else if (("LAND" == c))
19242059 then {
1925- let eY = value(assetInfo(fromBase58String(ap)))
1926- let eZ = ar(ap)
1927- if (!(isDefined(getInteger(eZ))))
1928- then throw((eY.name + " is not staked"))
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"))
19292064 else {
1930- let fb = valueOrErrorMessage(getString(ao(ap)), (("NFT " + eY.name) + " is orphaned"))
1931- if ((fb != an))
1932- then throw((i + " is not yours"))
2065+ let fQ = valueOrErrorMessage(getString(aL(aM)), (("NFT " + bW.name) + " is orphaned"))
2066+ if ((fQ != aK))
2067+ then throw((k + " is not yours"))
19332068 else {
1934- let gV = bG(fR)
1935- let gW = getString(gV)
1936- if (isDefined(gW))
1937- then throw(("Name already registered: " + fR))
2069+ let hI = cy(gG)
2070+ let hJ = getString(hI)
2071+ if (isDefined(hJ))
2072+ then throw(("Name already registered: " + gG))
19382073 else {
1939- let ha = aq(ap)
1940- let gY = getString(ha)
1941- let gZ = if (isDefined(gY))
1942- then [DeleteEntry(bG(value(gY)))]
2074+ let hN = aN(aM)
2075+ let hL = getString(hN)
2076+ let hM = if (isDefined(hL))
2077+ then [DeleteEntry(cy(value(hL)))]
19432078 else nil
1944- ((gZ :+ StringEntry(ha, fR)) :+ StringEntry(gV, ap))
2079+ ((hM :+ StringEntry(hN, gG)) :+ StringEntry(hI, aM))
19452080 }
19462081 }
19472082 }
19482083 }
19492084 else if (("DUCK" == c))
19502085 then {
1951- let eY = value(assetInfo(fromBase58String(ap)))
1952- let eZ = ar(ap)
1953- if (if (!(isDefined(getInteger(eZ))))
2086+ let bW = value(assetInfo(fromBase58String(aM)))
2087+ let fO = aO(aM)
2088+ if (if (!(isDefined(getInteger(fO))))
19542089 then true
1955- else !(isDefined(getString(aH(an)))))
1956- then throw((eY.name + " is not staked"))
2090+ else !(isDefined(getString(be(aK)))))
2091+ then throw((bW.name + " is not staked"))
19572092 else {
1958- let fb = valueOrErrorMessage(getString(aG(ap)), (("NFT " + eY.name) + " is orphaned"))
1959- if ((fb != an))
1960- then throw((j + " is not yours"))
2093+ let fQ = valueOrErrorMessage(getString(bd(aM)), (("NFT " + bW.name) + " is orphaned"))
2094+ if ((fQ != aK))
2095+ then throw((l + " is not yours"))
19612096 else {
1962- let gV = bL(fR)
1963- let gW = getString(gV)
1964- if (isDefined(gW))
1965- then throw(("Name already registered: " + fR))
2097+ let hI = cD(gG)
2098+ let hJ = getString(hI)
2099+ if (isDefined(hJ))
2100+ then throw(("Name already registered: " + gG))
19662101 else {
1967- let ha = aC(ap)
1968- let gY = getString(ha)
1969- let gZ = if (isDefined(gY))
1970- then [DeleteEntry(bL(value(gY)))]
2102+ let hN = aZ(aM)
2103+ let hL = getString(hN)
2104+ let hM = if (isDefined(hL))
2105+ then [DeleteEntry(cD(value(hL)))]
19712106 else nil
1972- ((gZ :+ StringEntry(ha, fR)) :+ StringEntry(gV, ap))
2107+ ((hM :+ StringEntry(hN, gG)) :+ StringEntry(hI, aM))
19732108 }
19742109 }
19752110 }
19762111 }
19772112 else throw("Unknown entity type")
19782113 }
1979- $Tuple2(((gU :+ ScriptTransfer(ak, gk.amount, b)) :+ gj), 0)
2114+ $Tuple2(((hH :+ ScriptTransfer(aG, gY.amount, b)) :+ gX), 0)
19802115 }
19812116 }
19822117 }
19832118
19842119
19852120
1986-@Callable(ct)
1987-func setReferrals (hb,hc) = if ((ct.callerPublicKey != bo))
2121+@Callable(dn)
2122+func setReferrals (hO,hP) = if ((dn.callerPublicKey != cg))
19882123 then throw("Permission denied")
19892124 else {
1990- let gj = gg(ct)
1991- if ((size(ct.payments) != 0))
2125+ let gX = gU(dn)
2126+ if ((size(dn.payments) != 0))
19922127 then throw("No payments required")
1993- else if (!(isDefined(addressFromString(hb))))
1994- then throw(("Invalid address: " + hb))
1995- else if (!(isDefined(addressFromString(hc))))
1996- then throw(("Invalid address: " + hc))
2128+ else if (!(isDefined(addressFromString(hO))))
2129+ then throw(("Invalid address: " + hO))
2130+ else if (!(isDefined(addressFromString(hP))))
2131+ then throw(("Invalid address: " + hP))
19972132 else {
1998- let hd = bN()
1999- let he = getString(hd)
2000- let hf = if (isDefined(he))
2001- then split_4C(value(he), "_")
2133+ let hQ = cF()
2134+ let hR = getString(hQ)
2135+ let hS = if (isDefined(hR))
2136+ then split_4C(value(hR), "_")
20022137 else nil
2003- if (containsElement(hf, hc))
2004- then throw((hc + " is not newbie (already has referrals)"))
2138+ if (containsElement(hS, hP))
2139+ then throw((hP + " is not newbie (already has referrals)"))
20052140 else {
2006- let hg = aE(hc)
2007- let hh = getString(hg)
2008- if (if (isDefined(hh))
2009- then isDefined(addressFromString(value(hh)))
2141+ let hT = bb(hP)
2142+ let hU = getString(hT)
2143+ if (if (isDefined(hU))
2144+ then isDefined(addressFromString(value(hU)))
20102145 else false)
2011- then throw(((hc + " already has refBy: ") + value(hh)))
2146+ then throw(((hP + " already has refBy: ") + value(hU)))
20122147 else {
2013- let hi = aF(hb)
2014- let hj = getString(hi)
2015- let hk = if (isDefined(hj))
2016- then split_4C(value(hj), "_")
2148+ let hV = bc(hO)
2149+ let hW = getString(hV)
2150+ let hX = if (isDefined(hW))
2151+ then split_4C(value(hW), "_")
20172152 else nil
2018- if (containsElement(hk, hc))
2019- then throw((((hb + " already contains ") + hc) + " within referrals"))
2153+ if (containsElement(hX, hP))
2154+ then throw((((hO + " already contains ") + hP) + " within referrals"))
20202155 else {
2021- let hl = makeString_2C((hk :+ hc), "_")
2022- let hm = if (containsElement(hf, hb))
2023- then value(he)
2024- else makeString_2C((hf :+ hb), "_")
2025- $Tuple2([StringEntry(hg, hb), StringEntry(hi, hl), StringEntry(hd, hm), gj], 0)
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)
20262161 }
20272162 }
20282163 }
20312166
20322167
20332168
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)
20592201
20602202
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = take(drop(this.bytes, 1), 1)
55
66 let b = {
77 let c = a
88 if ((base58'2W' == c))
99 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
1010 else if ((base58'2T' == c))
1111 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
1212 else throw("Unknown chain")
1313 }
1414
1515 let d = {
1616 let c = a
1717 if ((base58'2W' == c))
1818 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
1919 else if ((base58'2T' == c))
2020 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
2121 else throw("Unknown chain")
2222 }
2323
2424 let e = {
2525 let c = a
2626 if ((base58'2W' == c))
2727 then 10000000000
2828 else if ((base58'2T' == c))
2929 then 100000000
3030 else throw("Unknown chain")
3131 }
3232
3333 let f = "__"
3434
3535 let g = 1000000
3636
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
222272 if ($isInstanceOf(c, "String"))
223273 then {
224- let aV = c
225- aV
274+ let bu = c
275+ bu
226276 }
227277 else throw("fail to cast into String")
228278 }
229279
230280
231-func aW (aU) = {
232- let c = aU
281+func bv (bt) = {
282+ let c = bt
233283 if ($isInstanceOf(c, "Int"))
234284 then {
235- let aX = c
236- aX
285+ let bw = c
286+ bw
237287 }
238288 else throw("fail to cast into Int")
239289 }
240290
241291
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
244316 if (("S" == c))
245- then m
317+ then o
246318 else if (("M" == c))
247- then n
319+ then p
248320 else if (("L" == c))
249- then o
321+ then q
250322 else if (("XL" == c))
251- then p
323+ then r
252324 else if (("XXL" == c))
253- then q
325+ then s
254326 else throw("Unknown land size")
255327 }
256328
257329
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
270394 else throw("List size exceeds 6")
271395
272- bl(bi(bi(bi(bi(bi(bi(bh, 0), 1), 2), 3), 4), 5), 6)
273- }
274-
275-
276-let bm = {
396+ bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
397+ }
398+
399+
400+let ce = {
277401 let c = a
278402 if ((base58'2W' == c))
279403 then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv")
280404 else if ((base58'2T' == c))
281405 then this
282406 else throw("Unknown chain")
283407 }
284408
285-let bn = {
409+let cf = {
286410 let c = a
287411 if ((base58'2W' == c))
288412 then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb")
289413 else if ((base58'2T' == c))
290414 then this
291415 else throw("Unknown chain")
292416 }
293417
294-let bo = base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
295-
296-let bp = [30, 60, 120]
297-
298-let bq = 300000
299-
300-let br = 5000000
301-
302-let bs = 50
303-
304-let bt = 10000000
305-
306-let bu = {
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 = {
307431 let c = a
308432 if ((base58'2W' == c))
309433 then 252289527462
310434 else if ((base58'2T' == c))
311435 then 2522895274
312436 else throw("Unknown chain")
313437 }
314438
315-let bv = {
439+let cn = {
316440 let c = a
317441 if ((base58'2W' == c))
318442 then 250000000
319443 else if ((base58'2T' == c))
320444 then 250000000
321445 else throw("Unknown chain")
322446 }
323447
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))
383515 then throw("Zero weights sum")
384516 else {
385- let bZ = fraction(bW, g, bY)
386- func ca (cb,cc) = (cb :+ fraction(cc, bZ, g))
387-
388- let bf = bX
389- let bg = size(bf)
390- let bh = nil
391- func bi (bj,bk) = if ((bk >= bg))
392- then bj
393- else ca(bj, bf[bk])
394-
395- func bl (bj,bk) = if ((bk >= bg))
396- then bj
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
397529 else throw("List size exceeds 6")
398530
399- bl(bi(bi(bi(bi(bi(bi(bh, 0), 1), 2), 3), 4), 5), 6)
400- }
401- }
402-
403-
404-func cd (bW) = {
405- let ce = split(value(getString(aM())), "_")
406- if ((size(ce) != l))
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))
407539 then throw("Wrong proportions data")
408540 else {
409- let cf = [parseIntValue(ce[0]), parseIntValue(ce[1]), parseIntValue(ce[2]), parseIntValue(ce[3]), parseIntValue(ce[4]), parseIntValue(ce[5])]
410- bV(bW, cf)
411- }
412- }
413-
414-
415-func cg (ch,ci,cj) = {
416- let ck = cd(cj)
417- func cl (cb,ah) = {
418- let cm = (parseIntValue(ci[ah]) - ck[ah])
419- if ((0 > cm))
420- then throw(((((("Not enough material idx=" + toString(ah)) + ", you have ") + ci[ah]) + ", but need ") + toString(ck[ah])))
421- else (cb :+ toString(cm))
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))
422554 }
423555
424- if (ch)
556+ if (db)
425557 then {
426- let bf = [0, 1, 2, 3, 4, 5]
427- let bg = size(bf)
428- let bh = nil
429- func bi (bj,bk) = if ((bk >= bg))
430- then bj
431- else cl(bj, bf[bk])
432-
433- func bl (bj,bk) = if ((bk >= bg))
434- then bj
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
435567 else throw("List size exceeds 6")
436568
437- bl(bi(bi(bi(bi(bi(bi(bh, 0), 1), 2), 3), 4), 5), 6)
438- }
439- else ci
440- }
441-
442-
443-func cn (co,cp,cq,cr) = if ((size(co) != l))
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))
444576 then throw("Wrong proportions data")
445577 else {
446- func cs (cb,ct) = {
447- let cm = (parseIntValue(co[ct]) + ((cr * cp[ct]) * cq))
448- if ((0 > cm))
449- then throw(((((((("Panic! Pieces of type=" + toString(ct)) + ", sign=") + toString(cr)) + ", terrainCounts[i]=") + toString(cp[ct])) + ", landSizeIndex=") + toString(cq)))
450- else (cb :+ toString(cm))
451- }
452-
453- let cf = {
454- let bf = [0, 1, 2, 3, 4, 5]
455- let bg = size(bf)
456- let bh = nil
457- func bi (bj,bk) = if ((bk >= bg))
458- then bj
459- else cs(bj, bf[bk])
460-
461- func bl (bj,bk) = if ((bk >= bg))
462- then bj
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
463595 else throw("List size exceeds 6")
464596
465- bl(bi(bi(bi(bi(bi(bi(bh, 0), 1), 2), 3), 4), 5), 6)
466- }
467- makeString(cf, "_")
597+ bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
598+ }
599+ makeString(cZ, "_")
468600 }
469601
470602
471-func cu (cp,cq,cr) = {
472- let co = split(valueOrElse(getString(aM()), "0_0_0_0_0_0"), "_")
473- cn(co, cp, cq, cr)
474- }
475-
476-
477-func cv (cw) = [(size(split(cw, "A")) - 1), (size(split(cw, "B")) - 1), (size(split(cw, "C")) - 1), (size(split(cw, "D")) - 1), (size(split(cw, "E")) - 1), (size(split(cw, "F")) - 1)]
478-
479-
480-func cx (cy,cp,cz,cq,cA) = {
481- func cB (cb,ct) = {
482- let cC = ((fraction(cz, cA, s) * cp[ct]) * cq)
483- (cb :+ toString((parseIntValue(cy[ct]) + cC)))
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)))
484616 }
485617
486- let cf = {
487- let bf = [0, 1, 2, 3, 4, 5]
488- let bg = size(bf)
489- let bh = nil
490- func bi (bj,bk) = if ((bk >= bg))
491- then bj
492- else cB(bj, bf[bk])
493-
494- func bl (bj,bk) = if ((bk >= bg))
495- then bj
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
496628 else throw("List size exceeds 6")
497629
498- bl(bi(bi(bi(bi(bi(bi(bh, 0), 1), 2), 3), 4), 5), 6)
630+ bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
499631 }
500- makeString(cf, "_")
501- }
502-
503-
504-func cD (cp,cz,cq,cA) = {
505- func cB (cb,ct) = {
506- let cC = ((fraction(cz, cA, s) * cp[ct]) * cq)
507- $Tuple2((cb._1 :+ cC), (cb._2 + cC))
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))
508640 }
509641
510- let bf = [0, 1, 2, 3, 4, 5]
511- let bg = size(bf)
512- let bh = $Tuple2(nil, 0)
513- func bi (bj,bk) = if ((bk >= bg))
514- then bj
515- else cB(bj, bf[bk])
516-
517- func bl (bj,bk) = if ((bk >= bg))
518- then bj
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
519651 else throw("List size exceeds 6")
520652
521- bl(bi(bi(bi(bi(bi(bi(bh, 0), 1), 2), 3), 4), 5), 6)
522- }
523-
524-
525-func cE (cF,cG,cH,cI) = {
526- let cJ = cH._1
527- let cK = cH._2
528- if ((cK == 0))
529- then $Tuple2(makeString(cF, "_"), makeString(cG, "_"))
530- else if ((cI >= cK))
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))
531663 then {
532- func cL (cb,ct) = (cb :+ toString((parseIntValue(cF[ct]) + cJ[ct])))
533-
534- let cf = {
535- let bf = [0, 1, 2, 3, 4, 5]
536- let bg = size(bf)
537- let bh = nil
538- func bi (bj,bk) = if ((bk >= bg))
539- then bj
540- else cL(bj, bf[bk])
541-
542- func bl (bj,bk) = if ((bk >= bg))
543- then bj
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
544676 else throw("List size exceeds 6")
545677
546- bl(bi(bi(bi(bi(bi(bi(bh, 0), 1), 2), 3), 4), 5), 6)
678+ bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
547679 }
548- $Tuple2(makeString(cf, "_"), makeString(cG, "_"))
680+ $Tuple2(makeString(cZ, "_"), makeString(dz, "_"))
549681 }
550682 else {
551- func cM (cb,ct) = {
552- let cN = fraction(cJ[ct], cI, cK)
553- $Tuple2((cb._1 :+ toString((parseIntValue(cF[ct]) + cN))), (cb._2 :+ toString(((parseIntValue(cG[ct]) + cJ[ct]) - cN))))
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))))
554686 }
555687
556- let cf = {
557- let bf = [0, 1, 2, 3, 4, 5]
558- let bg = size(bf)
559- let bh = $Tuple2(nil, nil)
560- func bi (bj,bk) = if ((bk >= bg))
561- then bj
562- else cM(bj, bf[bk])
563-
564- func bl (bj,bk) = if ((bk >= bg))
565- then bj
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
566698 else throw("List size exceeds 6")
567699
568- bl(bi(bi(bi(bi(bi(bi(bh, 0), 1), 2), 3), 4), 5), 6)
700+ bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
569701 }
570- $Tuple2(makeString(cf._1, "_"), makeString(cf._2, "_"))
702+ $Tuple2(makeString(cZ._1, "_"), makeString(cZ._2, "_"))
571703 }
572704 }
573705
574706
575-func cO (cP) = if ((cP >= toBigInt(0)))
576- then cP
577- else -(cP)
578-
579-
580-let cQ = [[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]]
581-
582-func cR (aX,cS) = {
583- let cT = toInt((aX % bx))
584- let cU = if ((cS[0] > cT))
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))
585717 then "A"
586- else if ((cS[1] > cT))
718+ else if ((dL[1] > dM))
587719 then "B"
588- else if ((cS[2] > cT))
720+ else if ((dL[2] > dM))
589721 then "C"
590- else if ((cS[3] > cT))
722+ else if ((dL[3] > dM))
591723 then "D"
592- else if ((cS[4] > cT))
724+ else if ((dL[4] > dM))
593725 then "E"
594726 else "F"
595- cU
596- }
597-
598-
599-func cV (cW,cX) = {
600- let cY = cQ[cX]
601- func cZ (cb,cc) = $Tuple2((((((cb._1 + cR(cb._2, cY)) + cR((cb._2 / bx), cY)) + cR((cb._2 / by), cY)) + cR((cb._2 / bz), cY)) + cR((cb._2 / bA), cY)), (cb._2 / bB))
602-
603- let da = {
604- let bf = [1, 2, 3, 4, 5]
605- let bg = size(bf)
606- let bh = $Tuple2("", (cW / bw))
607- func bi (bj,bk) = if ((bk >= bg))
608- then bj
609- else cZ(bj, bf[bk])
610-
611- func bl (bj,bk) = if ((bk >= bg))
612- then bj
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
613745 else throw("List size exceeds 5")
614746
615- bl(bi(bi(bi(bi(bi(bh, 0), 1), 2), 3), 4), 5)
747+ bR(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5)
616748 }
617- da._1
618- }
619-
620-
621-func db (dc) = {
622- let dd = split(valueOrElse(getString(dc), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
623-[toString(valueOrElse(parseInt(dd[P]), 0)), if ((size(split(dd[Q], "_")) == l))
624- then dd[Q]
625- else "0_0_0_0_0_0", if ((size(split(dd[R], "_")) == l))
626- then dd[R]
627- else "0_0_0_0_0_0", dd[S]]
628- }
629-
630-
631-func de (df) = {
632- let dg = split(df, "_")
633- ((t * (parseIntValue(dg[1]) + 1)) * parseIntValue(dg[0]))
634- }
635-
636-
637-func dh (di) = {
638- let dj = di[J]
639- func dk (cb,dl) = (cb + parseIntValue(dl))
640-
641- func dm (cb,dl) = {
642- let ah = cb._1
643- let dn = T(ah)
644- let do = (((parseIntValue(dl) + dn) - 1) / dn)
645- $Tuple2((ah + 1), (cb._2 + (do * h)))
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)))
646778 }
647779
648- let dp = {
649- let bf = split(di[H], "_")
650- let bg = size(bf)
651- let bh = 0
652- func bi (bj,bk) = if ((bk >= bg))
653- then bj
654- else dk(bj, bf[bk])
655-
656- func bl (bj,bk) = if ((bk >= bg))
657- then bj
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
658790 else throw("List size exceeds 6")
659791
660- bl(bi(bi(bi(bi(bi(bi(bh, 0), 1), 2), 3), 4), 5), 6)
792+ bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
661793 }
662- let dq = {
663- let bf = split(di[I], "_")
664- let bg = size(bf)
665- let bh = 0
666- func dr (bj,bk) = if ((bk >= bg))
667- then bj
668- else dk(bj, bf[bk])
669-
670- func ds (bj,bk) = if ((bk >= bg))
671- then bj
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
672804 else throw("List size exceeds 6")
673805
674- ds(dr(dr(dr(dr(dr(dr(bh, 0), 1), 2), 3), 4), 5), 6)
806+ bY(bX(bX(bX(bX(bX(bX(bN, 0), 1), 2), 3), 4), 5), 6)
675807 }
676- let dt = if ((dj == ""))
808+ let ej = if ((ec == ""))
677809 then 0
678- else ( let bf = split_4C(dj, "_")
679- let bg = size(bf)
680- let bh = $Tuple2(0, 0)
681- func du (bj,bk) = if ((bk >= bg))
682- then bj
683- else dm(bj, bf[bk])
684-
685- func dv (bj,bk) = if ((bk >= bg))
686- then bj
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
687819 else throw("List size exceeds 50")
688820
689- dv(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(bh, 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
690- ((dp + dq) + dt)
691- }
692-
693-
694-func dw (dx,dy,dz) = {
695- let df = ((toString(dy) + "_") + toString(dz))
696- let dA = de(df)
697- let dB = valueOrElse(getString(dx), (df + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
698- let dC = split_4C(dB, ":")
699- let dD = dh(dC)
700- let dE = if ((5 > size(dC)))
701- then makeString(["0", toString(dD), toString((dA - dD)), toString(dA)], "_")
702- else {
703- let dF = split(dC[K], "_")
704- let dG = parseIntValue(dF[L])
705- let dH = if ((size(dF) > 1))
706- then parseIntValue(dF[M])
707- else dD
708- makeString([toString(dG), toString(dH), toString(((dA - dG) - dH)), toString(dA)], "_")
709- }
710-[dC[G], if ((size(split(dC[H], "_")) == l))
711- then dC[H]
712- else "0_0_0_0_0_0", if ((size(split(dC[I], "_")) == l))
713- then dC[I]
714- else "0_0_0_0_0_0", dC[J], dE]
715- }
716-
717-
718-func dI (di) = {
719- let dJ = dh(di)
720- let dK = parseIntValue(split(di[K], "_")[L])
721- ((de(di[G]) - dJ) - dK)
722- }
723-
724-
725-func dL (dM,dn) = {
726- let do = if ((dM >= 0))
727- then (((dM + dn) - 1) / dn)
728- else -((((-(dM) + dn) - 1) / dn))
729- (do * h)
730- }
731-
732-
733-func dN (dO,di,dP) = if ((size(dO) != 3))
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))
734866 then throw("cargoListStr should contain exactly 2 ':' separators")
735867 else {
736- let dQ = split(dO[0], "_")
737- let dR = split(dO[1], "_")
738- let dS = if ((dO[2] == ""))
868+ let eG = split(eE[0], "_")
869+ let eH = split(eE[1], "_")
870+ let eI = if ((eE[2] == ""))
739871 then nil
740- else split(dO[2], "_")
741- if ((size(dQ) != l))
872+ else split(eE[2], "_")
873+ if ((size(eG) != n))
742874 then throw("All 6 resources should be passed")
743- else if ((size(dR) != l))
875+ else if ((size(eH) != n))
744876 then throw("All 6 materials should be passed")
745877 else {
746- let cI = dI(di)
747- let dT = split(di[H], "_")
748- let dU = split(di[I], "_")
749- let dV = if ((di[J] == ""))
878+ let dB = ey(eb)
879+ let eJ = split(eb[aa], "_")
880+ let eK = split(eb[ab], "_")
881+ let eL = if ((eb[ac] == ""))
750882 then nil
751- else split(di[J], "_")
752- let cG = split(dP[Q], "_")
753- let dW = split(dP[R], "_")
754- let dX = if ((dP[S] == ""))
883+ else split(eb[ac], "_")
884+ let dz = split(eF[aj], "_")
885+ let eM = split(eF[ak], "_")
886+ let eN = if ((eF[al] == ""))
755887 then nil
756- else split(dP[S], "_")
757- func dY (cb,dl) = {
758- let ct = cb._1
759- let dZ = parseIntValue(dl)
760- let ea = parseIntValue(dT[ct])
761- let eb = parseIntValue(cG[ct])
762- if ((dZ == 0))
763- then $Tuple4((ct + 1), (cb._2 :+ dT[ct]), (cb._3 :+ cG[ct]), cb._4)
764- else if ((dZ > 0))
765- then if ((dZ > eb))
766- then throw((((("Attempt to take " + dl) + " from backpack, but only ") + toString(eb)) + " available"))
767- else $Tuple4((ct + 1), (cb._2 :+ toString((ea + dZ))), (cb._3 :+ toString((eb - dZ))), (cb._4 + dZ))
768- else if ((-(dZ) > ea))
769- then throw((((("Attempt to take " + toString(-(dZ))) + " from warehouse, but only ") + toString(ea)) + " available"))
770- else $Tuple4((ct + 1), (cb._2 :+ toString((ea + dZ))), (cb._3 :+ toString((eb - dZ))), (cb._4 + dZ))
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))
771903 }
772904
773- let cf = {
774- let bf = dQ
775- let bg = size(bf)
776- let bh = $Tuple4(0, nil, nil, 0)
777- func bi (bj,bk) = if ((bk >= bg))
778- then bj
779- else dY(bj, bf[bk])
780-
781- func bl (bj,bk) = if ((bk >= bg))
782- then bj
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
783915 else throw("List size exceeds 6")
784916
785- bl(bi(bi(bi(bi(bi(bi(bh, 0), 1), 2), 3), 4), 5), 6)
917+ bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
786918 }
787- func ec (cb,dl) = {
788- let ct = cb._1
789- let dZ = parseIntValue(dl)
790- let ed = parseIntValue(dU[ct])
791- let ee = parseIntValue(dW[ct])
792- if ((dZ == 0))
793- then $Tuple4((ct + 1), (cb._2 :+ dU[ct]), (cb._3 :+ dW[ct]), cb._4)
794- else if ((dZ > 0))
795- then if ((dZ > ee))
796- then throw((((("Attempt to take " + dl) + " from backpack, but only ") + toString(ee)) + " available"))
797- else $Tuple4((ct + 1), (cb._2 :+ toString((ed + dZ))), (cb._3 :+ toString((ee - dZ))), (cb._4 + dZ))
798- else if ((-(dZ) > ed))
799- then throw((((("Attempt to take " + toString(-(dZ))) + " from warehouse, but only ") + toString(ed)) + " available"))
800- else $Tuple4((ct + 1), (cb._2 :+ toString((ed + dZ))), (cb._3 :+ toString((ee - dZ))), (cb._4 + dZ))
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))
801933 }
802934
803- let ef = {
804- let bf = dR
805- let bg = size(bf)
806- let bh = $Tuple4(0, nil, nil, cf._4)
807- func dr (bj,bk) = if ((bk >= bg))
808- then bj
809- else ec(bj, bf[bk])
810-
811- func ds (bj,bk) = if ((bk >= bg))
812- then bj
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
813945 else throw("List size exceeds 6")
814946
815- ds(dr(dr(dr(dr(dr(dr(bh, 0), 1), 2), 3), 4), 5), 6)
947+ bY(bX(bX(bX(bX(bX(bX(bN, 0), 1), 2), 3), 4), 5), 6)
816948 }
817- func eg (cb,dl) = {
818- let ct = cb._1
819- let dn = T(ct)
820- let dZ = parseIntValue(dl)
821- let eh = if ((size(dV) > ct))
822- then parseIntValue(dV[ct])
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])
823955 else 0
824- let ei = if ((size(dX) > ct))
825- then parseIntValue(dX[ct])
956+ let eY = if ((size(eN) > dn))
957+ then parseIntValue(eN[dn])
826958 else 0
827- if ((dZ == 0))
828- then $Tuple4((ct + 1), (cb._2 :+ toString(eh)), (cb._3 :+ toString(ei)), cb._4)
829- else if ((dZ > 0))
830- then if ((dZ > ei))
831- then throw((((("Attempt to take " + dl) + " from backpack, but only ") + toString(ei)) + " available"))
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"))
832964 else {
833- let ej = (dL((eh + dZ), dn) - dL(eh, dn))
834- $Tuple4((ct + 1), (cb._2 :+ toString((eh + dZ))), (cb._3 :+ toString((ei - dZ))), (cb._4 + ej))
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))
835967 }
836- else if ((-(dZ) > eh))
837- then throw((((("Attempt to take " + toString(-(dZ))) + " from warehouse, but only ") + toString(eh)) + " available"))
968+ else if ((-(eP) > eX))
969+ then throw((((("Attempt to take " + toString(-(eP))) + " from warehouse, but only ") + toString(eX)) + " available"))
838970 else {
839- let ej = (dL((eh + dZ), dn) - dL(eh, dn))
840- $Tuple4((ct + 1), (cb._2 :+ toString((eh + dZ))), (cb._3 :+ toString((ei - dZ))), (cb._4 + ej))
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))
841973 }
842974 }
843975
844- let dd = if ((size(dS) != 0))
976+ let dW = if ((size(eI) != 0))
845977 then {
846- let bf = dS
847- let bg = size(bf)
848- let bh = $Tuple4(0, nil, nil, ef._4)
849- func du (bj,bk) = if ((bk >= bg))
850- then bj
851- else eg(bj, bf[bk])
852-
853- func dv (bj,bk) = if ((bk >= bg))
854- then bj
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
855987 else throw("List size exceeds 50")
856988
857- dv(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(du(bh, 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)
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)
858990 }
859- else $Tuple4(0, dV, dX, ef._4)
860- let ek = dd._4
861- if ((ek > cI))
862- then throw((((("Attempt to put total " + toString(ek)) + " stuff, but only ") + toString(cI)) + " warehouse space left"))
863- else $Tuple7(makeString(cf._2, "_"), makeString(ef._2, "_"), makeString(dd._2, "_"), makeString(cf._3, "_"), makeString(ef._3, "_"), makeString(dd._3, "_"), ek)
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)
864996 }
865997 }
866998
867999
868-func el (em,en) = {
869- let aP = toString(em)
870- let eo = cO(toBigInt(en))
871- let ep = valueOrElse(getInteger(bD()), (bC + 1))
872- let bF = toString(ep)
873- let cX = toInt((eo % bw))
874- let cw = cV(eo, cX)
875- let eq = z[cX]
876- let er = Issue(bU(bF, "S"), makeString([bF, "S", cw, eq], "_"), 1, 0, false)
877- let ap = calculateAssetId(er)
878- let es = toBase58String(ap)
879- $Tuple2([IntegerEntry(bD(), (ep + 1)), er, StringEntry(bE(bF), es), StringEntry(ao(es), aP), StringEntry(bK(bF), aP), IntegerEntry(as(es), 0), IntegerEntry(bI(es, aP), 0), ScriptTransfer(em, 1, ap)], $Tuple2(es, eq))
880- }
881-
882-
883-func et (ch,em,en,eu,ev) = if (!(sigVerify_8Kb(eu, ev, bo)))
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)))
8841016 then throw("signature does not match")
8851017 else {
886- let dg = split(toUtf8String(eu), ";")
887- let ew = split(dg[0], "|")
888- let ex = split(ew[bR], "_")
889- let ey = parseIntValue(ex[0])
890- let ez = parseIntValue(ex[1])
891- let eA = split(dg[1], ":")
892- let eB = eA[0]
893- let eC = parseIntValue(ew[bS])
894- if (if ((eC > (lastBlock.timestamp + bq)))
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)))
8951027 then true
896- else ((lastBlock.timestamp - bq) > eC))
1028+ else ((lastBlock.timestamp - ci) > fs))
8971029 then throw("signature outdated")
8981030 else {
899- let eD = eA[1]
900- let aP = toString(em)
901- let eE = valueOrElse(getString(am(aP)), "")
902- if ((eE != eD))
903- then throw(((("Tx ids don't match! In state: " + eE) + ", in msg: ") + eD))
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))
9041036 else {
905- let aJ = valueOrErrorMessage(getString(aH(aP)), "You don't have a duck staked")
906- let eF = aL(aJ)
907- let eG = valueOrElse(getInteger(eF), 100)
908- if ((eG != ey))
909- then throw(((("oldHealth=" + toString(valueOrElse(getInteger(eF), 100))) + " from state does not match one from flight log=") + toString(ey)))
910- else if ((0 >= ey))
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))
9111043 then throw("You can't fly with zero health")
912- else if ((0 >= ez))
913- then $Tuple3(((if (!(ch))
914- then [ScriptTransfer(em, bv, b)]
915- else nil) :+ IntegerEntry(eF, 0)), "", 0)
1044+ else if ((0 >= fp))
1045+ then $Tuple3(((if (!(db))
1046+ then [ScriptTransfer(fc, cn, b)]
1047+ else nil) :+ IntegerEntry(fv, 0)), "", 0)
9161048 else {
917- let eH = if ((size(ew) > bT))
918- then ew[bT]
1049+ let fx = if ((size(fm) > cP))
1050+ then fm[cP]
9191051 else ""
920- let eI = if ((eH == "$"))
921- then aW(invoke(ai, "sendUsdtPrize", [aP], nil))
1052+ let fy = if ((fx == "$"))
1053+ then bv(invoke(aE, "sendUsdtPrize", [bm], nil))
9221054 else 0
923- let dc = aI(aJ)
924- let dP = db(dc)
925- let eJ = split(dP[R], "_")
926- let eK = makeString(cg(ch, eJ, bu), "_")
927- let eL = el(em, en)
928- let es = eL._2._1
929- $Tuple3((((eL._1 :+ StringEntry(aK(aJ), makeString([eL._2._2, "L", es], "_"))) :+ IntegerEntry(eF, ez)) :+ StringEntry(dc, makeString([dP[P], dP[Q], eK, dP[S]], ":"))), es, eI)
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)
9301062 }
9311063 }
9321064 }
9331065 }
9341066
9351067
936-func eM (az,eN) = {
937- let dz = valueOrElse(getInteger(as(az)), 0)
938- let eO = valueOrElse(getInteger(at(k, az)), 0)
939- let eP = (dz / 6)
940- let eQ = (dz / 7)
941- ((r + fraction(r, ((dz + eP) + (2 * eQ)), 5)) + fraction(r, eO, (eN * 5)))
942- }
943-
944-
945-func eR (an,eS,eT) = {
946- let eU = if ((eS == bO))
947- then $Tuple2(eT, valueOrElse(getString(aH(an)), ""))
948- else {
949- let aJ = valueOrErrorMessage(getString(aH(an)), "You don't have a duck staked")
950- let eV = valueOrElse(getString(aK(aJ)), u)
951- let eW = split(value(eV), "_")
952- if ((eW[aR] != "L"))
953- then throw((("Duck location type is " + eW[aR]) + ", but should be L"))
954- else $Tuple2(eW[aS], aJ)
955- }
956- let az = eU._1
957- let eX = eU._2
958- let eY = value(assetInfo(fromBase58String(az)))
959- let eZ = ar(az)
960- let fa = valueOrErrorMessage(getInteger(eZ), (("Land " + eY.name) + " is not staked"))
961- let fb = valueOrErrorMessage(getString(ao(az)), (("NFT " + eY.name) + " is orphaned"))
962- if ((fb != an))
963- then throw((i + " is not yours"))
964- else {
965- let fc = split(eY.description, "_")
966- $Tuple4(eX, az, fc, fa)
967- }
968- }
969-
970-
971-func fd (an,dM,eS,eT) = if ((0 > dM))
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))
9721104 then throw("Negative amount")
9731105 else {
974- let fe = eR(an, eS, eT)
975- let aZ = fe._3[D]
976- let cp = cv(fe._3[E])
977- let cz = (lastBlock.timestamp - fe._4)
978- if ((0 > cz))
979- then throw(((("Saved timestamp is in future, saved = " + toString(fe._4)) + ", current = ") + toString(lastBlock.timestamp)))
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)))
9801112 else {
981- let eN = aY(aZ)
982- let ff = eM(fe._2, eN)
983- let fg = fraction(cz, (ff * eN), s)
984- if ((dM > fg))
985- then throw(((("Not enough resources, available = " + toString(fg)) + ", requested = ") + toString(dM)))
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)))
9861118 else {
987- let fh = fraction((fg - dM), s, (ff * eN))
988- let fi = (lastBlock.timestamp - fh)
989- let dy = (eN / m)
990- let cH = cD(cp, (cz - fh), dy, ff)
991- let dx = ay(fe._2)
992- let dz = valueOrElse(getInteger(as(fe._2)), 0)
993- let di = dw(dx, dy, dz)
994- let dF = split(di[K], "_")
995- let cI = parseIntValue(dF[N])
996- if (if ((eS == bO))
997- then (dM > cI)
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)
9981130 else false)
999- then throw((("Only " + toString(cI)) + " space left in warehouse"))
1131+ then throw((("Only " + toString(dB)) + " space left in warehouse"))
10001132 else {
1001- let dc = aI(fe._1)
1002- let dP = db(dc)
1003- let cG = split(dP[Q], "_")
1004- let cF = split(di[H], "_")
1005- let fj = if ((eS == bO))
1006- then $Tuple4(cx(cF, cp, (cz - fh), dy, ff), dP[Q], (parseIntValue(dF[M]) + cH._2), (parseIntValue(dF[N]) - cH._2))
1007- else if ((eS == bP))
1008- then $Tuple4(di[H], cx(cG, cp, (cz - fh), dy, ff), parseIntValue(dF[M]), parseIntValue(dF[N]))
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]))
10091141 else {
1010- let fk = cE(cF, cG, cH, cI)
1011- let fl = min([parseIntValue(dF[N]), cH._2])
1012- $Tuple4(fk._1, fk._2, (parseIntValue(dF[M]) + fl), (parseIntValue(dF[N]) - fl))
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))
10131145 }
1014- let fm = fj._1
1015- let fn = fj._2
1016- let fo = fj._3
1017- let fp = fj._4
1018- $Tuple5([IntegerEntry(ar(fe._2), fi), IntegerEntry(av(i, fe._2, an), fi)], dc, [dP[P], fn, dP[R], dP[S]], dx, [di[G], fm, di[I], di[J], makeString([dF[L], toString(fo), toString(fp), dF[O]], "_")])
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]], "_")])
10191151 }
10201152 }
10211153 }
10221154 }
10231155
10241156
1025-func fq (an,az,eN,eS) = {
1026- let eZ = ar(az)
1027- let fa = value(getInteger(eZ))
1028- let fg = (fraction((lastBlock.timestamp - fa), eM(az, eN), s) * eN)
1029- fd(an, fg, eS, az)
1030- }
1031-
1032-
1033-func fr (ch,em,fs,az) = {
1034- let an = toString(em)
1035- let fe = eR(an, bQ, az)
1036- let eN = aY(fe._3[D])
1037- let ft = as(fe._2)
1038- let fu = valueOrElse(getInteger(ft), 0)
1039- if ((fu >= 3))
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))
10401172 then throw("Currently max infrastructure level = 3")
10411173 else {
1042- let fv = (fu + 1)
1043- let fw = fraction(bt, (eN * fv), m)
1044- if (if (!(ch))
1045- then (fs != fw)
1174+ let gk = (gj + 1)
1175+ let gl = fraction(cl, (fD * gk), o)
1176+ if (if (!(db))
1177+ then (gh != gl)
10461178 else false)
1047- then throw(("Payment attached should be " + toString(fw)))
1179+ then throw(("Payment attached should be " + toString(gl)))
10481180 else {
1049- let dc = aI(fe._1)
1050- let dP = db(dc)
1051- let eJ = split(dP[R], "_")
1052- let eK = makeString(cg(ch, eJ, fraction(e, (eN * fv), m)), "_")
1053- let fx = fq(an, fe._2, eN, bQ)
1054- let fy = fx._5
1055- let fz = de(fy[G])
1056- let fA = makeString([split(fy[G], "_")[0], toString(fv)], "_")
1057- let fB = de(fA)
1058- let dF = split(fy[K], "_")
1059- let fC = makeString([dF[L], dF[M], toString(((parseIntValue(dF[N]) + fB) - fz)), toString(fB)], "_")
1060- $Tuple2(([IntegerEntry(ft, fv), IntegerEntry(bI(fe._2, an), fv), StringEntry(dc, makeString([dP[P], fx._3[Q], eK, dP[S]], ":")), StringEntry(fx._4, makeString([fA, fy[H], fy[I], fy[J], fC], ":"))] ++ fx._1), fv)
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)
10611193 }
10621194 }
10631195 }
10641196
10651197
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))
10721207 then throw("Presale artifact is already activated")
1073- else if ((parseIntValue(fe._3[C]) > bC))
1074- then throw((((i + " ") + az) + " is not eligible for presale artifact"))
1208+ else if ((parseIntValue(fT._3[V]) > cu))
1209+ then throw((((k + " ") + aW) + " is not eligible for presale artifact"))
10751210 else {
1076- let fx = fq(an, az, eN, bQ)
1077- ((((fx._1 :+ IntegerEntry(fE, eN)) :+ IntegerEntry(bJ(k, az, an), eN)) :+ StringEntry(fx._2, makeString(fx._3, ":"))) :+ StringEntry(fx._4, makeString(fx._5, ":")))
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, ":")))
10781213 }
10791214 }
10801215
10811216
1082-func fF (fG,fv,fH,an,fI,en,fJ) = {
1083- let aJ = valueOrErrorMessage(getString(aH(an)), "You don't have a duck staked")
1084- func fK (cb,az) = {
1085- let eY = value(assetInfo(fromBase58String(az)))
1086- let eZ = ar(az)
1087- let fa = valueOrErrorMessage(getInteger(eZ), (("NFT " + eY.name) + " is not staked"))
1088- let fb = valueOrErrorMessage(getString(ao(az)), (("NFT " + eY.name) + " is orphaned"))
1089- if ((fb != an))
1090- then throw((i + " is not yours"))
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"))
10911226 else {
1092- let fc = split(eY.description, "_")
1093- let eq = fc[F]
1094- if (if ((cb._3 != ""))
1095- then (cb._3 != eq)
1227+ let fR = split(bW.description, "_")
1228+ let fg = fR[Y]
1229+ if (if ((bI._3 != ""))
1230+ then (bI._3 != fg)
10961231 else false)
10971232 then throw("Lands should be on the same continent to merge")
10981233 else {
1099- let aZ = fc[D]
1100- let fL = cb._1
1101- let ct = valueOrErrorMessage(indexOf(fL, aZ), "You haven't passed all the lands needed")
1102- let fM = (take(fL, ct) + drop(fL, (ct + 1)))
1103- let eN = aY(aZ)
1104- let fN = (cb._2 + valueOrElse(getInteger(at(k, az)), 0))
1105- let dz = valueOrElse(getInteger(as(az)), 0)
1106- let fO = {
1107- let c = aZ
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
11081243 if (("S" == c))
11091244 then 3
11101245 else if (("M" == c))
11111246 then 4
11121247 else if (("L" == c))
11131248 then 5
11141249 else if (("XL" == c))
11151250 then 6
11161251 else throw("Only S, M, L, XL can merge")
11171252 }
1118- if ((dz != fO))
1253+ if ((ep != gE))
11191254 then throw("All lands should be maxed to merge")
11201255 else {
1121- let bF = fc[C]
1122- let cp = cv(fc[E])
1123- let cz = (lastBlock.timestamp - fa)
1124- if ((0 > cz))
1125- then throw(((("Saved timestamp is in future, saved = " + toString(fa)) + ", current = ") + toString(lastBlock.timestamp)))
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)))
11261261 else {
1127- let ff = eM(az, eN)
1128- let dy = (eN / m)
1129- let fn = cx(split(cb._4, "_"), cp, cz, dy, ff)
1130- let ce = cn(split(cb._6, "_"), cp, dy, -1)
1131- let fP = cb._7
1132- let ah = indexOf(fP, az)
1133- if (!(isDefined(ah)))
1134- then throw(("Your staked lands don't contain " + az))
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))
11351270 else {
1136- let fQ = aq(az)
1137- let fR = valueOrElse(getString(fQ), "")
1138- $Tuple8(fM, fN, eq, fn, (((((((((((((cb._5 :+ DeleteEntry(ar(az))) :+ DeleteEntry(av(i, az, an))) :+ DeleteEntry(bE(bF))) :+ DeleteEntry(ao(az))) :+ DeleteEntry(as(az))) :+ DeleteEntry(bI(az, an))) :+ DeleteEntry(at(k, az))) :+ DeleteEntry(bJ(k, az, an))) :+ DeleteEntry(bK(bF))) :+ DeleteEntry(ay(az))) :+ DeleteEntry(fQ)) :+ DeleteEntry(bG(fR))) :+ Burn(fromBase58String(az), 1)), ce, removeByIndex(fP, value(ah)), (cb._8 + eN))
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))
11391274 }
11401275 }
11411276 }
11421277 }
11431278 }
11441279 }
11451280
1146- let dc = aI(aJ)
1147- let dP = db(dc)
1148- let fS = valueOrElse(getString(aM()), "0_0_0_0_0_0")
1149- let fT = aA(an)
1150- let fU = getString(fT)
1151- let fV = if (isDefined(fU))
1152- then split_51C(value(fU), "_")
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), "_")
11531288 else nil
1154- let cf = {
1155- let bf = fI
1156- let bg = size(bf)
1157- let bh = $Tuple8(fH, 0, "", dP[Q], nil, fS, fV, 0)
1158- func bi (bj,bk) = if ((bk >= bg))
1159- then bj
1160- else fK(bj, bf[bk])
1161-
1162- func bl (bj,bk) = if ((bk >= bg))
1163- then bj
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
11641299 else throw("List size exceeds 5")
11651300
1166- bl(bi(bi(bi(bi(bi(bh, 0), 1), 2), 3), 4), 5)
1301+ bR(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5)
11671302 }
1168- let eq = cf._3
1169- let cX = valueOrErrorMessage(indexOf(z, eq), ("Unknown continent: " + eq))
1170- let cw = cV(cO(toBigInt(en)), cX)
1171- let ep = valueOrElse(getInteger(bD()), (bC + 1))
1172- let fW = toString(ep)
1173- let er = Issue(bU(fW, fG), makeString([fW, fG, cw, eq], "_"), 1, 0, false)
1174- let ap = calculateAssetId(er)
1175- let fX = toBase58String(ap)
1176- let eK = makeString(cg((fJ > 0), split(dP[R], "_"), fJ), "_")
1177- let fY = aB(an)
1178- let fZ = valueOrElse(getInteger(fY), 0)
1179- $Tuple2((((((((((((((((cf._5 :+ (if ((size(cf._7) > 0))
1180- then StringEntry(fT, makeString_11C(cf._7, "_"))
1181- else DeleteEntry(fT))) :+ IntegerEntry(fY, if ((cf._8 > fZ))
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))
11821317 then 0
1183- else (fZ - cf._8))) :+ IntegerEntry(bD(), (ep + 1))) :+ er) :+ StringEntry(bE(fW), fX)) :+ StringEntry(ao(fX), an)) :+ StringEntry(bK(fW), an)) :+ IntegerEntry(at(k, fX), cf._2)) :+ IntegerEntry(bJ(k, fX, an), cf._2)) :+ IntegerEntry(as(fX), fv)) :+ IntegerEntry(bI(fX, an), fv)) :+ StringEntry(dc, makeString([dP[P], cf._4, eK, dP[S]], ":"))) :+ StringEntry(aM(), cf._6)) :+ StringEntry(aK(aJ), makeString([eq, "L", fX], "_"))) :+ ScriptTransfer(addressFromStringValue(an), 1, ap)), fX)
1184- }
1185-
1186-
1187-func ga (an,fI,en) = fF("M", 3, "SSSS", an, fI, en, 0)
1188-
1189-
1190-func gb (an,fI,en,ch,fs) = {
1191- let fw = (bt * 4)
1192- if (if (!(ch))
1193- then (fs != fw)
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)
11941329 else false)
1195- then throw(("Payment attached should be " + toString(fw)))
1196- else fF("L", 4, "SMM", an, fI, en, (e * 4))
1197- }
1198-
1199-
1200-func gc (an,fI,en,ch,fs) = {
1201- let fw = (bt * 47)
1202- if (if (!(ch))
1203- then (fs != fw)
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)
12041339 else false)
1205- then throw(("Payment attached should be " + toString(fw)))
1206- else fF("XL", 5, "SSSML", an, fI, en, (e * 47))
1207- }
1208-
1209-
1210-func gd (an,fI,en,ch,fs) = {
1211- let fw = (bt * 54)
1212- if (if (!(ch))
1213- then (fs != fw)
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)
12141349 else false)
1215- then throw(("Payment attached should be " + toString(fw)))
1216- else fF("XXL", 6, "LXL", an, fI, en, (e * 54))
1217- }
1218-
1219-
1220-func ge (ch,an,fs,fI,en) = {
1221- let gf = {
1222- let c = size(fI)
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)
12231358 if ((4 == c))
1224- then ga(an, fI, en)
1359+ then gO(aK, gy, fd)
12251360 else if ((3 == c))
1226- then gb(an, fI, en, ch, fs)
1361+ then gP(aK, gy, fd, db, gh)
12271362 else if ((5 == c))
1228- then gc(an, fI, en, ch, fs)
1363+ then gQ(aK, gy, fd, db, gh)
12291364 else if ((2 == c))
1230- then gd(an, fI, en, ch, fs)
1365+ then gR(aK, gy, fd, db, gh)
12311366 else throw("Unknown merge")
12321367 }
1233- gf
1234- }
1235-
1236-
1237-func gg (ct) = if (if ((ct.originCaller != ai))
1238- then valueOrElse(getBoolean(aN()), false)
1368+ gT
1369+ }
1370+
1371+
1372+func gU (dn) = if (if ((dn.originCaller != aE))
1373+ then valueOrElse(getBoolean(bk()), false)
12391374 else false)
12401375 then throw("Contracts are under maintenance")
1241- else StringEntry(am(toString(ct.originCaller)), toBase58String(ct.transactionId))
1242-
1243-
1244-@Callable(ct)
1245-func constructorV1 (gh) = if ((ct.caller != this))
1376+ else StringEntry(aJ(toString(dn.originCaller)), toBase58String(dn.transactionId))
1377+
1378+
1379+@Callable(dn)
1380+func constructorV1 (gV) = if ((dn.caller != this))
12461381 then throw("Permission denied")
1247- else [StringEntry(ac(), gh)]
1248-
1249-
1250-
1251-@Callable(ct)
1252-func setBlocked (gi) = if ((ct.caller != this))
1382+ else [StringEntry(ay(), gV)]
1383+
1384+
1385+
1386+@Callable(dn)
1387+func setBlocked (gW) = if ((dn.caller != this))
12531388 then throw("permission denied")
1254- else [BooleanEntry(aN(), gi)]
1255-
1256-
1257-
1258-@Callable(ct)
1389+ else [BooleanEntry(bk(), gW)]
1390+
1391+
1392+
1393+@Callable(dn)
12591394 func stakeLand () = {
1260- let gj = gg(ct)
1261- if ((size(ct.payments) != 1))
1395+ let gX = gU(dn)
1396+ if ((size(dn.payments) != 1))
12621397 then throw("Exactly one payment required")
12631398 else {
1264- let gk = value(ct.payments[0])
1265- let ap = value(gk.assetId)
1266- let W = toString(ct.caller)
1267- if ((gk.amount != 1))
1268- then throw((("NFT " + i) + " token should be attached as payment"))
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"))
12691404 else {
1270- let eY = value(assetInfo(ap))
1271- if ((eY.issuer != this))
1405+ let bW = value(assetInfo(aM))
1406+ if ((bW.issuer != this))
12721407 then throw("Unknown issuer of token")
1273- else if (!(contains(eY.name, i)))
1274- then throw((("Only NFT " + i) + " tokens are accepted"))
1408+ else if (!(contains(bW.name, k)))
1409+ then throw((("Only NFT " + k) + " tokens are accepted"))
12751410 else {
1276- let gl = drop(eY.name, 4)
1277- let bF = if (contains(gl, "XXL"))
1278- then dropRight(gl, 3)
1279- else if (contains(gl, "XL"))
1280- then dropRight(gl, 2)
1281- else dropRight(gl, 1)
1282- if (!(isDefined(parseInt(bF))))
1283- then throw(("Cannot parse land number from " + eY.name))
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))
12841419 else {
1285- let az = toBase58String(ap)
1286- let eZ = ar(az)
1287- if (isDefined(getInteger(eZ)))
1288- then throw((("NFT " + eY.name) + " is already staked"))
1420+ let aW = toBase58String(aM)
1421+ let fO = aO(aW)
1422+ if (isDefined(getInteger(fO)))
1423+ then throw((("NFT " + bW.name) + " is already staked"))
12891424 else {
1290- let fc = split(eY.description, "_")
1291- let cp = cv(fc[E])
1292- let eN = aY(fc[D])
1293- let ce = cu(cp, (eN / m), 1)
1294- let eO = valueOrElse(getInteger(at(k, az)), 0)
1295- let fT = aA(W)
1296- let fU = getString(fT)
1297- let fP = if (isDefined(fU))
1298- then split_51C(value(fU), "_")
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), "_")
12991434 else nil
1300- if (containsElement(fP, az))
1301- then throw(("Your staked lands already contain " + az))
1435+ if (containsElement(bU, aW))
1436+ then throw(("Your staked lands already contain " + aW))
13021437 else {
1303- let dz = valueOrElse(getInteger(as(az)), 0)
1304-[IntegerEntry(eZ, lastBlock.timestamp), IntegerEntry(av(i, az, W), lastBlock.timestamp), StringEntry(fT, makeString_11C((fP :+ az), "_")), IntegerEntry(aB(W), (valueOrElse(getInteger(aB(W)), 0) + eN)), StringEntry(ao(az), W), StringEntry(bK(bF), W), IntegerEntry(bJ(k, az, W), eO), IntegerEntry(bI(az, W), dz), StringEntry(aM(), ce), gj]
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]
13051440 }
13061441 }
13071442 }
13081443 }
13091444 }
13101445 }
13111446 }
13121447
13131448
13141449
1315-@Callable(ct)
1316-func unstakeLand (eT) = {
1317- let gj = gg(ct)
1318- if ((size(ct.payments) != 0))
1450+@Callable(dn)
1451+func unstakeLand (fJ) = {
1452+ let gX = gU(dn)
1453+ if ((size(dn.payments) != 0))
13191454 then throw("No payments required")
13201455 else {
1321- let an = toString(ct.caller)
1322- let fe = eR(an, bP, eT)
1323- let az = fe._2
1324- let fT = aA(an)
1325- let cp = cv(fe._3[E])
1326- let eN = aY(fe._3[D])
1327- let ce = cu(cp, (eN / m), -1)
1328- let fx = fq(an, az, eN, bP)
1329- let fP = split_51C(valueOrElse(getString(fT), ""), "_")
1330- let ah = indexOf(fP, az)
1331- if (!(isDefined(ah)))
1332- then throw(("Your staked lands don't contain " + az))
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))
13331468 else {
1334- let da = value(blockInfoByHeight(height)).timestamp
1335- let gm = valueOrElse(getInteger(al, aO(an)), 0)
1336- if ((gm >= da))
1337- then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(gm)))
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)))
13381473 else {
1339- let fY = aB(an)
1340- let fZ = valueOrElse(getInteger(fY), 0)
1341-[ScriptTransfer(ct.caller, 1, fromBase58String(az)), DeleteEntry(ar(az)), DeleteEntry(av(i, az, an)), StringEntry(aM(), ce), StringEntry(fx._2, makeString(fx._3, ":")), if ((size(fP) > 1))
1342- then StringEntry(fT, makeString_11C(removeByIndex(fP, value(ah)), "_"))
1343- else DeleteEntry(fT), IntegerEntry(fY, if ((eN > fZ))
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))
13441479 then 0
1345- else (fZ - eN)), gj]
1480+ else (gN - fD)), gX]
13461481 }
13471482 }
13481483 }
13491484 }
13501485
13511486
13521487
1353-@Callable(ct)
1488+@Callable(dn)
13541489 func stakeDuck () = {
1355- let gj = gg(ct)
1356- if ((size(ct.payments) != 1))
1490+ let gX = gU(dn)
1491+ if ((size(dn.payments) != 1))
13571492 then throw("Exactly one payment required")
13581493 else {
1359- let gk = value(ct.payments[0])
1360- let ap = value(gk.assetId)
1361- let W = toString(ct.caller)
1362- if ((gk.amount != 1))
1363- then throw((("NFT " + j) + " token should be attached as payment"))
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"))
13641499 else {
1365- let eY = value(assetInfo(ap))
1366- if (if ((eY.issuer != bm))
1367- then (eY.issuer != bn)
1500+ let bW = value(assetInfo(aM))
1501+ if (if ((bW.issuer != ce))
1502+ then (bW.issuer != cf)
13681503 else false)
1369- then throw((("Unknown issuer of " + j) + " token"))
1370- else if (!(contains(eY.name, j)))
1371- then throw((("Only NFT " + j) + " tokens are accepted"))
1504+ then throw((("Unknown issuer of " + l) + " token"))
1505+ else if (!(contains(bW.name, l)))
1506+ then throw((("Only NFT " + l) + " tokens are accepted"))
13721507 else {
1373- let gn = toBase58String(ap)
1374- let eZ = ar(gn)
1375- if (isDefined(getInteger(eZ)))
1376- then throw((("NFT " + eY.name) + " is already staked"))
1377- else if (isDefined(getString(aH(W))))
1378- then throw(("You already staked one duck: " + eY.name))
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))
13791514 else {
1380- let go = aK(gn)
1381- let gp = getString(go)
1382- let dc = aI(gn)
1383- let gq = getString(dc)
1384- ([IntegerEntry(eZ, lastBlock.timestamp), IntegerEntry(av(j, toBase58String(ap), W), lastBlock.timestamp), StringEntry(aG(gn), W), StringEntry(aH(W), gn)] ++ (if (isDefined(gp))
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))
13851520 then nil
1386- else ([StringEntry(go, u)] ++ (if (isDefined(gq))
1521+ else ([StringEntry(hc, w)] ++ (if (isDefined(he))
13871522 then nil
1388- else (([StringEntry(dc, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(aL(gn), 100)) :+ gj)))))
1523+ else (([StringEntry(dV, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(bi(hb), 100)) :+ gX)))))
13891524 }
13901525 }
13911526 }
13921527 }
13931528 }
13941529
13951530
13961531
1397-@Callable(ct)
1398-func unstakeDuck (gn) = {
1399- let gj = gg(ct)
1400- if ((size(ct.payments) != 0))
1532+@Callable(dn)
1533+func unstakeDuck (hb) = {
1534+ let gX = gU(dn)
1535+ if ((size(dn.payments) != 0))
14011536 then throw("No payments required")
14021537 else {
1403- let ap = fromBase58String(gn)
1404- let W = toString(ct.caller)
1405- let eY = value(assetInfo(ap))
1406- let eZ = ar(toBase58String(ap))
1407- if (!(isDefined(getInteger(eZ))))
1408- then throw((("NFT " + eY.name) + " is not staked"))
1409- else if (!(isDefined(getString(aH(W)))))
1410- then throw((("The duck " + eY.name) + " is not staked"))
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"))
14111546 else {
1412- let fb = valueOrErrorMessage(getString(aG(toBase58String(ap))), (("NFT " + eY.name) + " is orphaned"))
1413- if ((fb != W))
1547+ let fQ = valueOrErrorMessage(getString(bd(toBase58String(aM))), (("NFT " + bW.name) + " is orphaned"))
1548+ if ((fQ != ap))
14141549 then throw("Staked NFT is not yours")
14151550 else {
1416- let eF = aL(gn)
1417- let gr = valueOrElse(getInteger(eF), 100)
1418- if ((100 > gr))
1551+ let fv = bi(hb)
1552+ let hf = valueOrElse(getInteger(fv), 100)
1553+ if ((100 > hf))
14191554 then throw("Please heal your duck before unstaking")
1420- else [ScriptTransfer(ct.caller, 1, ap), DeleteEntry(eZ), DeleteEntry(eF), DeleteEntry(aK(gn)), DeleteEntry(aG(gn)), DeleteEntry(av(j, gn, W)), DeleteEntry(aH(W)), gj]
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]
14211556 }
14221557 }
14231558 }
14241559 }
14251560
14261561
14271562
1428-@Callable(ct)
1429-func claimRes (dM,gs) = {
1430- let gj = gg(ct)
1431- if ((size(ct.payments) != 0))
1563+@Callable(dn)
1564+func claimRes (eC,hg) = {
1565+ let gX = gU(dn)
1566+ if ((size(dn.payments) != 0))
14321567 then throw("No payments required")
14331568 else {
1434- let an = toString(ct.originCaller)
1435- let cm = fd(an, dM, bP, gs)
1436- $Tuple2((((cm._1 :+ StringEntry(cm._2, makeString(cm._3, ":"))) :+ StringEntry(cm._4, makeString(cm._5, ":"))) :+ gj), cm._3[Q])
1437- }
1438- }
1439-
1440-
1441-
1442-@Callable(ct)
1443-func claimResToWH (dM,gs) = {
1444- let gj = gg(ct)
1445- if ((size(ct.payments) != 0))
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))
14461581 then throw("No payments required")
14471582 else {
1448- let an = toString(ct.originCaller)
1449- let cm = fd(an, dM, bO, gs)
1450- $Tuple2((((cm._1 :+ StringEntry(cm._2, makeString(cm._3, ":"))) :+ StringEntry(cm._4, makeString(cm._5, ":"))) :+ gj), cm._5[H])
1451- }
1452- }
1453-
1454-
1455-
1456-@Callable(ct)
1457-func flight (eu,ev) = {
1458- let gj = gg(ct)
1459- if (!(sigVerify_8Kb(eu, ev, bo)))
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)))
14601595 then throw("signature does not match")
1461- else if ((size(ct.payments) != 0))
1596+ else if ((size(dn.payments) != 0))
14621597 then throw("No payments required")
14631598 else {
1464- let dg = split(toUtf8String(eu), ";")
1465- let ew = split(dg[0], "|")
1466- let ex = split(ew[bR], "_")
1467- let ey = parseIntValue(ex[0])
1468- let ez = parseIntValue(ex[1])
1469- let eA = split(dg[1], ":")
1470- let eB = eA[0]
1471- let eC = parseIntValue(ew[bS])
1472- if (if ((eC > (lastBlock.timestamp + bq)))
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)))
14731608 then true
1474- else ((lastBlock.timestamp - bq) > eC))
1475- then throw(((("signature outdated: logTime=" + toString(eC)) + ", bcTime=") + toString(lastBlock.timestamp)))
1609+ else ((lastBlock.timestamp - ci) > fs))
1610+ then throw(((("signature outdated: logTime=" + toString(fs)) + ", bcTime=") + toString(lastBlock.timestamp)))
14761611 else {
1477- let eD = eA[1]
1478- let eE = valueOrElse(getString(am(toString(ct.originCaller))), "")
1479- if ((eE != eD))
1480- then throw(((("Tx ids don't match! In state: " + eE) + ", in msg: ") + eD))
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))
14811616 else {
1482- let aP = toString(ct.caller)
1483- let aJ = valueOrErrorMessage(getString(aH(aP)), "You don't have a duck staked")
1484- let eF = aL(aJ)
1485- let eG = valueOrElse(getInteger(eF), 100)
1486- if ((eG != ey))
1487- then throw(((("oldHealth=" + toString(valueOrElse(getInteger(eF), 100))) + " from state does not match one from flight log=") + toString(ey)))
1488- else if ((0 >= ey))
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))
14891624 then throw("You can't fly with zero health")
14901625 else {
1491- let go = aK(aJ)
1492- let eV = valueOrElse(getString(go), u)
1493- if ((eB == eV))
1626+ let hc = bh(bg)
1627+ let fL = valueOrElse(getString(hc), w)
1628+ if ((fr == fL))
14941629 then throw("You can't fly to the same location")
14951630 else {
1496- let eH = if ((size(ew) > bT))
1497- then ew[bT]
1631+ let fx = if ((size(fm) > cP))
1632+ then fm[cP]
14981633 else ""
1499- let eI = if (if ((ez > 0))
1500- then (eH == "$")
1634+ let fy = if (if ((fp > 0))
1635+ then (fx == "$")
15011636 else false)
1502- then aW(invoke(ai, "sendUsdtPrize", [aP], nil))
1637+ then bv(invoke(aE, "sendUsdtPrize", [bm], nil))
15031638 else 0
1504- $Tuple2([StringEntry(go, if ((ez > 0))
1505- then eB
1506- else eV), IntegerEntry(eF, ez), gj], eI)
1639+ $Tuple2([StringEntry(hc, if ((fp > 0))
1640+ then fr
1641+ else fL), IntegerEntry(fv, fp), gX], fy)
15071642 }
15081643 }
15091644 }
15101645 }
15111646 }
15121647 }
15131648
15141649
15151650
1516-@Callable(ct)
1517-func heal (gt,gu,gv) = {
1518- let gj = gg(ct)
1519- if (if (if ((0 > gt))
1651+@Callable(dn)
1652+func heal (hh,hi,hj) = {
1653+ let gX = gU(dn)
1654+ if (if (if ((0 > hh))
15201655 then true
1521- else (0 > gu))
1656+ else (0 > hi))
15221657 then true
1523- else (0 > gv))
1658+ else (0 > hj))
15241659 then throw("Quantity cannot be negative")
15251660 else {
1526- let aJ = valueOrErrorMessage(getString(aH(toString(ct.caller))), "You don't have a duck staked")
1527- let gw = [gt, gu, gv]
1528- let eF = aL(aJ)
1529- let gx = valueOrElse(getInteger(eF), 100)
1530- if ((gx >= x))
1531- then throw((("HP should be < " + toString(x)) + " to heal"))
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"))
15321667 else {
1533- let dc = aI(aJ)
1534- let dP = db(dc)
1535- let gy = if ((dP[S] == ""))
1668+ let dV = bf(bg)
1669+ let eF = dU(dV)
1670+ let hm = if ((eF[al] == ""))
15361671 then nil
1537- else split(dP[S], "_")
1538- func gz (cb,gA) = {
1539- let aX = cb._2
1540- let cP = if ((size(gy) > aX))
1541- then parseIntValue(gy[aX])
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])
15421677 else 0
1543- if ((3 > aX))
1678+ if ((3 > bw))
15441679 then {
1545- let gB = gw[aX]
1546- if ((gB > cP))
1547- then throw(((("You have only " + toString(cP)) + " of ") + y[aX]))
1548- else $Tuple3((cb._1 :+ toString((cP - gB))), (aX + 1), (cb._3 + (bp[aX] * gB)))
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)))
15491684 }
1550- else $Tuple3((cb._1 :+ toString(cP)), (aX + 1), cb._3)
1685+ else $Tuple3((bI._1 :+ toString(dI)), (bw + 1), bI._3)
15511686 }
15521687
1553- let cm = {
1554- let bf = A
1555- let bg = size(bf)
1556- let bh = $Tuple3(nil, 0, 0)
1557- func bi (bj,bk) = if ((bk >= bg))
1558- then bj
1559- else gz(bj, bf[bk])
1560-
1561- func bl (bj,bk) = if ((bk >= bg))
1562- then bj
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
15631698 else throw("List size exceeds 50")
15641699
1565- bl(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bh, 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)
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)
15661701 }
1567- let gC = min([x, (gx + cm._3)])
1568- $Tuple2([IntegerEntry(eF, gC), StringEntry(dc, makeString_2C([dP[P], dP[Q], dP[R], makeString(cm._1, "_")], ":")), gj], gC)
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)
15691704 }
15701705 }
15711706 }
15721707
15731708
15741709
1575-@Callable(ct)
1710+@Callable(dn)
15761711 func healES () = {
1577- let gj = gg(ct)
1578- if ((size(ct.payments) != 1))
1712+ let gX = gU(dn)
1713+ if ((size(dn.payments) != 1))
15791714 then throw("Exactly one payment required")
15801715 else {
1581- let gk = value(ct.payments[0])
1582- if ((gk.assetId != b))
1716+ let gY = value(dn.payments[0])
1717+ if ((gY.assetId != b))
15831718 then throw("Allowed USDT payment only!")
15841719 else {
1585- let aJ = valueOrErrorMessage(getString(aH(toString(ct.caller))), "You don't have a duck staked")
1586- let eF = aL(aJ)
1587- let gx = valueOrElse(getInteger(eF), 100)
1588- if ((gx > 0))
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))
15891724 then throw("HP should be 0 to call Emergency Service")
15901725 else {
1591- let dc = aI(aJ)
1592- let dP = db(dc)
1593- let gy = if ((dP[S] == ""))
1726+ let dV = bf(bg)
1727+ let eF = dU(dV)
1728+ let hm = if ((eF[al] == ""))
15941729 then nil
1595- else split(dP[S], "_")
1596- let gD = if ((size(gy) > 0))
1597- then parseIntValue(gy[0])
1730+ else split(eF[al], "_")
1731+ let hr = if ((size(hm) > 0))
1732+ then parseIntValue(hm[0])
15981733 else 0
1599- let gE = if ((size(gy) > 1))
1600- then parseIntValue(gy[1])
1734+ let hs = if ((size(hm) > 1))
1735+ then parseIntValue(hm[1])
16011736 else 0
1602- let gF = if ((size(gy) > 2))
1603- then parseIntValue(gy[2])
1737+ let ht = if ((size(hm) > 2))
1738+ then parseIntValue(hm[2])
16041739 else 0
1605- if (if (if ((gD > 0))
1740+ if (if (if ((hr > 0))
16061741 then true
1607- else (gE > 0))
1742+ else (hs > 0))
16081743 then true
1609- else (gF > 0))
1744+ else (ht > 0))
16101745 then throw("You have to use own Medical Kit")
16111746 else {
1612- let gG = getString(ak, aQ())
1613- let gH = if (isDefined(gG))
1614- then split(value(gG), "_")
1747+ let hu = getString(aG, bo())
1748+ let hv = if (isDefined(hu))
1749+ then split(value(hu), "_")
16151750 else nil
1616- let gI = if ((size(gH) > 0))
1617- then parseIntValue(gH[0])
1751+ let hw = if ((size(hv) > 0))
1752+ then parseIntValue(hv[0])
16181753 else 0
1619- if ((0 >= gI))
1754+ if ((0 >= hw))
16201755 then throw("There are no Medical Kits L1 at Emergency Service storage")
16211756 else {
1622- let gC = (gx + bp[0])
1623- let gJ = makeString([toString((gI - 1)), removeByIndex(gH, 0)], "_")
1624- let bb = split(A[0], "_")
1625- let gK = ba(bb)
1626- let gL = parseIntValue(bb[B])
1627- let gM = fraction((gK * w), v, (10 * gL))
1628- if ((gk.amount != gM))
1629- then throw(("Payment attached should be " + toString(gM)))
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)))
16301765 else {
1631- let cm = aT(invoke(ak, "updateEsStorage", [gJ], [AttachedPayment(b, gM)]))
1632- $Tuple2([IntegerEntry(eF, gC), gj], cm)
1766+ let dg = bs(invoke(aG, "updateEsStorage", [hx], [AttachedPayment(b, hA)]))
1767+ $Tuple2([IntegerEntry(fv, hq), gX], dg)
16331768 }
16341769 }
16351770 }
16361771 }
16371772 }
16381773 }
16391774 }
16401775
16411776
16421777
1643-@Callable(ct)
1644-func updateBackpack (aJ,gN) = {
1645- let gj = gg(ct)
1646- if ((ct.caller != ak))
1778+@Callable(dn)
1779+func updateBackpack (bg,hB) = {
1780+ let gX = gU(dn)
1781+ if ((dn.caller != aG))
16471782 then throw("permission denied")
1648- else $Tuple2([StringEntry(aI(aJ), gN), gj], gN)
1649- }
1650-
1651-
1652-
1653-@Callable(ct)
1783+ else $Tuple2([StringEntry(bf(bg), hB), gX], hB)
1784+ }
1785+
1786+
1787+
1788+@Callable(dn)
16541789 func buySLand () = {
1655- let gj = gg(ct)
1656- if ((size(ct.payments) != 1))
1790+ let gX = gU(dn)
1791+ if ((size(dn.payments) != 1))
16571792 then throw("Exactly one payment required")
16581793 else {
1659- let gk = value(ct.payments[0])
1660- if ((gk.assetId != b))
1794+ let gY = value(dn.payments[0])
1795+ if ((gY.assetId != b))
16611796 then throw("Allowed USDT payment only!")
1662- else if ((gk.amount != bv))
1663- then throw(("Payment attached should be " + toString(bv)))
1797+ else if ((gY.amount != cn))
1798+ then throw(("Payment attached should be " + toString(cn)))
16641799 else {
1665- let cm = el(ct.caller, ct.transactionId)
1666- $Tuple2(((cm._1 :+ ScriptTransfer(ak, gk.amount, b)) :+ gj), cm._2._1)
1800+ let dg = fb(dn.caller, dn.transactionId)
1801+ $Tuple2(((dg._1 :+ ScriptTransfer(aG, gY.amount, b)) :+ gX), dg._2._1)
16671802 }
16681803 }
16691804 }
16701805
16711806
16721807
1673-@Callable(ct)
1674-func expedition (eu,ev) = {
1675- let gj = gg(ct)
1676- if ((size(ct.payments) != 0))
1808+@Callable(dn)
1809+func expedition (fk,fl) = {
1810+ let gX = gU(dn)
1811+ if ((size(dn.payments) != 0))
16771812 then throw("No payments required")
16781813 else {
1679- let cm = et(true, ct.caller, ct.transactionId, eu, ev)
1680- $Tuple2((cm._1 :+ gj), $Tuple2(cm._2, cm._3))
1681- }
1682- }
1683-
1684-
1685-
1686-@Callable(ct)
1687-func upgradeInfra (az) = {
1688- let gj = gg(ct)
1689- if ((size(ct.payments) != 0))
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))
16901825 then throw("No payments required")
16911826 else {
1692- let cm = fr(true, ct.caller, 0, az)
1693- $Tuple2((cm._1 :+ gj), cm._2)
1694- }
1695- }
1696-
1697-
1698-
1699-@Callable(ct)
1700-func upgradeInfraUsdt (az) = if ((ct.caller != this))
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))
17011836 then throw("Permission denied")
17021837 else {
1703- let gj = gg(ct)
1704- if ((size(ct.payments) != 1))
1838+ let gX = gU(dn)
1839+ if ((size(dn.payments) != 1))
17051840 then throw("Exactly one payment required")
17061841 else {
1707- let gk = value(ct.payments[0])
1708- if ((gk.assetId != b))
1842+ let gY = value(dn.payments[0])
1843+ if ((gY.assetId != b))
17091844 then throw("Allowed USDT payment only!")
17101845 else {
1711- let cm = fr(false, ct.caller, gk.amount, az)
1712- $Tuple2(((cm._1 :+ ScriptTransfer(ak, gk.amount, b)) :+ gj), cm._2)
1846+ let dg = gg(false, dn.caller, gY.amount, aW)
1847+ $Tuple2(((dg._1 :+ ScriptTransfer(aG, gY.amount, b)) :+ gX), dg._2)
17131848 }
17141849 }
17151850 }
17161851
17171852
17181853
1719-@Callable(ct)
1720-func activateArtifact (gO,az) = {
1721- let gj = gg(ct)
1722- if ((size(ct.payments) != 0))
1854+@Callable(dn)
1855+func activateArtifact (hC,aW) = {
1856+ let gX = gU(dn)
1857+ if ((size(dn.payments) != 0))
17231858 then throw("No payments required")
17241859 else {
1725- let cm = {
1726- let c = gO
1860+ let dg = {
1861+ let c = hC
17271862 if (("PRESALE" == c))
1728- then fD(toString(ct.caller), az)
1863+ then gt(toString(dn.caller), aW)
17291864 else throw("Unknown artifact")
17301865 }
1731- (cm :+ gj)
1732- }
1733- }
1734-
1735-
1736-
1737-@Callable(ct)
1738-func mergeLands (fI) = {
1739- let gj = gg(ct)
1740- if ((size(ct.payments) != 0))
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))
17411876 then throw("No payments required")
17421877 else {
1743- let cm = ge(true, toString(ct.caller), 0, fI, ct.transactionId)
1744- $Tuple2((cm._1 :+ gj), cm._2)
1745- }
1746- }
1747-
1748-
1749-
1750-@Callable(ct)
1751-func mergeLandsUsdt (fI) = {
1752- let gj = gg(ct)
1753- if ((size(ct.payments) != 1))
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))
17541889 then throw("Exactly one payment required")
17551890 else {
1756- let gk = value(ct.payments[0])
1757- if ((gk.assetId != b))
1891+ let gY = value(dn.payments[0])
1892+ if ((gY.assetId != b))
17581893 then throw("Allowed USDT payment only!")
17591894 else {
1760- let cm = ge(false, toString(ct.caller), gk.amount, fI, ct.transactionId)
1761- $Tuple2(((cm._1 :+ ScriptTransfer(ak, gk.amount, b)) :+ gj), cm._2)
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)
17621897 }
17631898 }
17641899 }
17651900
17661901
17671902
1768-@Callable(ct)
1769-func cargoExchange (gP,az) = {
1770- let gj = gg(ct)
1771- if ((size(ct.payments) != 0))
1903+@Callable(dn)
1904+func cargoExchange (hD,aW) = {
1905+ let gX = gU(dn)
1906+ if ((size(dn.payments) != 0))
17721907 then throw("No payments required")
17731908 else {
1774- let dO = split_4C(gP, ":")
1775- let an = toString(ct.originCaller)
1776- let eY = value(assetInfo(fromBase58String(az)))
1777- let eZ = ar(az)
1778- if (!(isDefined(getInteger(eZ))))
1779- then throw((eY.name + " is not staked"))
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"))
17801915 else {
1781- let fb = valueOrErrorMessage(getString(ao(az)), (("NFT " + eY.name) + " is orphaned"))
1782- if ((fb != an))
1783- then throw((i + " is not yours"))
1916+ let fQ = valueOrErrorMessage(getString(aL(aW)), (("NFT " + bW.name) + " is orphaned"))
1917+ if ((fQ != aK))
1918+ then throw((k + " is not yours"))
17841919 else {
1785- let dy = (aY(split(eY.description, "_")[D]) / m)
1786- let dz = valueOrElse(getInteger(as(az)), 0)
1787- let aJ = valueOrErrorMessage(getString(aH(an)), "You don't have a duck staked")
1788- let eV = valueOrElse(getString(aK(aJ)), u)
1789- let eW = split(value(eV), "_")
1790- if ((eW[aR] != "L"))
1791- then throw((("Duck location type is " + eW[aR]) + ", but should be L"))
1792- else if ((eW[aS] != az))
1793- then throw(("Duck should be on the land " + az))
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))
17941929 else {
1795- let dx = ay(az)
1796- let di = dw(dx, dy, dz)
1797- let dc = aI(aJ)
1798- let dP = db(dc)
1799- let cm = dN(dO, di, dP)
1800- let dF = split(di[K], "_")
1801- let fo = (parseIntValue(dF[M]) + cm._7)
1802- let fp = (parseIntValue(dF[N]) - cm._7)
1803-[StringEntry(dc, makeString_2C([dP[P], cm._4, cm._5, cm._6], ":")), StringEntry(dx, makeString_2C([di[G], cm._1, cm._2, cm._3, makeString([dF[L], toString(fo), toString(fp), dF[O]], "_")], ":")), gj]
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]
18041939 }
18051940 }
18061941 }
18071942 }
18081943 }
18091944
18101945
18111946
1812-@Callable(ct)
1813-func saveWarehouse (dB,az) = {
1814- let gj = gg(ct)
1815- if ((ct.caller != ak))
1947+@Callable(dn)
1948+func saveWarehouse (er,aW) = {
1949+ let gX = gU(dn)
1950+ if ((dn.caller != aG))
18161951 then throw("Access denied")
18171952 else {
1818- let dx = ay(az)
1819- let dC = split_4C(dB, ":")
1820- if ((size(dC) != 5))
1953+ let en = aV(aW)
1954+ let es = split_4C(er, ":")
1955+ if ((size(es) != 5))
18211956 then throw("warehouse string should contain 4 ':' separators")
18221957 else {
1823- let gQ = split(dC[K], "_")[L]
1824- let fo = dh(dC)
1825- let gR = de(dC[G])
1826- let fp = ((gR - parseIntValue(gQ)) - fo)
1827- let gS = makeString_2C([dC[G], dC[H], dC[I], dC[J], makeString([gQ, toString(fo), toString(fp), toString(gR)], "_")], ":")
1828- $Tuple2([StringEntry(dx, gS), gj], gS)
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)
18291964 }
18301965 }
18311966 }
18321967
18331968
18341969
1835-@Callable(ct)
1836-func fixWarehouseFormat (az) = if ((ct.caller != ai))
1970+@Callable(dn)
1971+func fixWarehouseFormat (aW) = if ((dn.caller != aE))
18371972 then throw("Access denied")
18381973 else {
1839- let dx = ay(az)
1840- let eY = value(assetInfo(fromBase58String(az)))
1841- let dy = (aY(split(eY.description, "_")[D]) / m)
1842- let dz = valueOrElse(getInteger(as(az)), 0)
1843- let dC = dw(dx, dy, dz)
1844- let gQ = aW(invoke(ak, "recalcLockedVolumeREADONLY", [az, dC], nil))
1845- let fo = dh(dC)
1846- let gR = de(dC[G])
1847- let fp = ((gR - gQ) - fo)
1848- let gS = makeString_2C([dC[G], dC[H], dC[I], dC[J], makeString([toString(gQ), toString(fo), toString(fp), toString(gR)], "_")], ":")
1849- $Tuple2([StringEntry(dx, gS)], gS)
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)
18501985 }
18511986
18521987
18531988
1854-@Callable(ct)
1855-func fixStakedPieces (W) = if ((ct.caller != ai))
1989+@Callable(dn)
1990+func fixStakedPieces (ap) = if ((dn.caller != aE))
18561991 then throw("Access denied")
18571992 else {
1858- let fZ = if ((W == ""))
1993+ let gN = if ((ap == ""))
18591994 then 0
18601995 else {
1861- let fU = getString(aj, aA(W))
1862- let fP = if (isDefined(fU))
1863- then split_51C(value(fU), "_")
1996+ let bT = getString(aF, aX(ap))
1997+ let bU = if (isDefined(bT))
1998+ then split_51C(value(bT), "_")
18641999 else nil
1865- func gT (cb,az) = {
1866- let eY = value(assetInfo(fromBase58String(az)))
1867- let aZ = split(eY.description, "_")[D]
1868- (cb + aY(aZ))
2000+ func bV (bI,aW) = {
2001+ let bW = value(assetInfo(fromBase58String(aW)))
2002+ let bB = split(bW.description, "_")[W]
2003+ (bI + bA(bB))
18692004 }
18702005
1871- let bf = fP
1872- let bg = size(bf)
1873- let bh = 0
1874- func bi (bj,bk) = if ((bk >= bg))
1875- then bj
1876- else gT(bj, bf[bk])
1877-
1878- func bl (bj,bk) = if ((bk >= bg))
1879- then bj
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
18802015 else throw("List size exceeds 100")
18812016
1882- bl(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bi(bh, 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)
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)
18832018 }
1884- $Tuple2([IntegerEntry(aB(W), fZ)], fZ)
2019+ $Tuple2([IntegerEntry(aY(ap), gN)], gN)
18852020 }
18862021
18872022
18882023
1889-@Callable(ct)
1890-func setCustomName (ap,fR,au) = {
1891- let gj = gg(ct)
1892- if ((size(ct.payments) != 1))
2024+@Callable(dn)
2025+func setCustomName (aM,gG,aR) = {
2026+ let gX = gU(dn)
2027+ if ((size(dn.payments) != 1))
18932028 then throw("Exactly one payment required")
18942029 else {
1895- let gk = value(ct.payments[0])
1896- if ((gk.assetId != b))
2030+ let gY = value(dn.payments[0])
2031+ if ((gY.assetId != b))
18972032 then throw("Allowed USDT payment only!")
1898- else if ((gk.amount != br))
1899- then throw(("Payment should be " + toString(br)))
1900- else if (contains(fR, "__"))
1901- then throw(("Name should not contain '__': " + fR))
1902- else if ((size(fR) > bs))
1903- then throw(("Name too long, maxLength=" + toString(bs)))
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)))
19042039 else {
1905- let an = toString(ct.originCaller)
1906- let gU = {
1907- let c = au
2040+ let aK = toString(dn.originCaller)
2041+ let hH = {
2042+ let c = aR
19082043 if (("ACCOUNT" == c))
19092044 then {
1910- let gV = bM(fR)
1911- let gW = getString(gV)
1912- if (isDefined(gW))
1913- then throw(("Name already registered: " + fR))
2045+ let hI = cE(gG)
2046+ let hJ = getString(hI)
2047+ if (isDefined(hJ))
2048+ then throw(("Name already registered: " + gG))
19142049 else {
1915- let gX = aD(an)
1916- let gY = getString(gX)
1917- let gZ = if (isDefined(gY))
1918- then [DeleteEntry(bM(value(gY)))]
2050+ let hK = ba(aK)
2051+ let hL = getString(hK)
2052+ let hM = if (isDefined(hL))
2053+ then [DeleteEntry(cE(value(hL)))]
19192054 else nil
1920- ((gZ :+ StringEntry(gX, fR)) :+ StringEntry(gV, an))
2055+ ((hM :+ StringEntry(hK, gG)) :+ StringEntry(hI, aK))
19212056 }
19222057 }
19232058 else if (("LAND" == c))
19242059 then {
1925- let eY = value(assetInfo(fromBase58String(ap)))
1926- let eZ = ar(ap)
1927- if (!(isDefined(getInteger(eZ))))
1928- then throw((eY.name + " is not staked"))
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"))
19292064 else {
1930- let fb = valueOrErrorMessage(getString(ao(ap)), (("NFT " + eY.name) + " is orphaned"))
1931- if ((fb != an))
1932- then throw((i + " is not yours"))
2065+ let fQ = valueOrErrorMessage(getString(aL(aM)), (("NFT " + bW.name) + " is orphaned"))
2066+ if ((fQ != aK))
2067+ then throw((k + " is not yours"))
19332068 else {
1934- let gV = bG(fR)
1935- let gW = getString(gV)
1936- if (isDefined(gW))
1937- then throw(("Name already registered: " + fR))
2069+ let hI = cy(gG)
2070+ let hJ = getString(hI)
2071+ if (isDefined(hJ))
2072+ then throw(("Name already registered: " + gG))
19382073 else {
1939- let ha = aq(ap)
1940- let gY = getString(ha)
1941- let gZ = if (isDefined(gY))
1942- then [DeleteEntry(bG(value(gY)))]
2074+ let hN = aN(aM)
2075+ let hL = getString(hN)
2076+ let hM = if (isDefined(hL))
2077+ then [DeleteEntry(cy(value(hL)))]
19432078 else nil
1944- ((gZ :+ StringEntry(ha, fR)) :+ StringEntry(gV, ap))
2079+ ((hM :+ StringEntry(hN, gG)) :+ StringEntry(hI, aM))
19452080 }
19462081 }
19472082 }
19482083 }
19492084 else if (("DUCK" == c))
19502085 then {
1951- let eY = value(assetInfo(fromBase58String(ap)))
1952- let eZ = ar(ap)
1953- if (if (!(isDefined(getInteger(eZ))))
2086+ let bW = value(assetInfo(fromBase58String(aM)))
2087+ let fO = aO(aM)
2088+ if (if (!(isDefined(getInteger(fO))))
19542089 then true
1955- else !(isDefined(getString(aH(an)))))
1956- then throw((eY.name + " is not staked"))
2090+ else !(isDefined(getString(be(aK)))))
2091+ then throw((bW.name + " is not staked"))
19572092 else {
1958- let fb = valueOrErrorMessage(getString(aG(ap)), (("NFT " + eY.name) + " is orphaned"))
1959- if ((fb != an))
1960- then throw((j + " is not yours"))
2093+ let fQ = valueOrErrorMessage(getString(bd(aM)), (("NFT " + bW.name) + " is orphaned"))
2094+ if ((fQ != aK))
2095+ then throw((l + " is not yours"))
19612096 else {
1962- let gV = bL(fR)
1963- let gW = getString(gV)
1964- if (isDefined(gW))
1965- then throw(("Name already registered: " + fR))
2097+ let hI = cD(gG)
2098+ let hJ = getString(hI)
2099+ if (isDefined(hJ))
2100+ then throw(("Name already registered: " + gG))
19662101 else {
1967- let ha = aC(ap)
1968- let gY = getString(ha)
1969- let gZ = if (isDefined(gY))
1970- then [DeleteEntry(bL(value(gY)))]
2102+ let hN = aZ(aM)
2103+ let hL = getString(hN)
2104+ let hM = if (isDefined(hL))
2105+ then [DeleteEntry(cD(value(hL)))]
19712106 else nil
1972- ((gZ :+ StringEntry(ha, fR)) :+ StringEntry(gV, ap))
2107+ ((hM :+ StringEntry(hN, gG)) :+ StringEntry(hI, aM))
19732108 }
19742109 }
19752110 }
19762111 }
19772112 else throw("Unknown entity type")
19782113 }
1979- $Tuple2(((gU :+ ScriptTransfer(ak, gk.amount, b)) :+ gj), 0)
2114+ $Tuple2(((hH :+ ScriptTransfer(aG, gY.amount, b)) :+ gX), 0)
19802115 }
19812116 }
19822117 }
19832118
19842119
19852120
1986-@Callable(ct)
1987-func setReferrals (hb,hc) = if ((ct.callerPublicKey != bo))
2121+@Callable(dn)
2122+func setReferrals (hO,hP) = if ((dn.callerPublicKey != cg))
19882123 then throw("Permission denied")
19892124 else {
1990- let gj = gg(ct)
1991- if ((size(ct.payments) != 0))
2125+ let gX = gU(dn)
2126+ if ((size(dn.payments) != 0))
19922127 then throw("No payments required")
1993- else if (!(isDefined(addressFromString(hb))))
1994- then throw(("Invalid address: " + hb))
1995- else if (!(isDefined(addressFromString(hc))))
1996- then throw(("Invalid address: " + hc))
2128+ else if (!(isDefined(addressFromString(hO))))
2129+ then throw(("Invalid address: " + hO))
2130+ else if (!(isDefined(addressFromString(hP))))
2131+ then throw(("Invalid address: " + hP))
19972132 else {
1998- let hd = bN()
1999- let he = getString(hd)
2000- let hf = if (isDefined(he))
2001- then split_4C(value(he), "_")
2133+ let hQ = cF()
2134+ let hR = getString(hQ)
2135+ let hS = if (isDefined(hR))
2136+ then split_4C(value(hR), "_")
20022137 else nil
2003- if (containsElement(hf, hc))
2004- then throw((hc + " is not newbie (already has referrals)"))
2138+ if (containsElement(hS, hP))
2139+ then throw((hP + " is not newbie (already has referrals)"))
20052140 else {
2006- let hg = aE(hc)
2007- let hh = getString(hg)
2008- if (if (isDefined(hh))
2009- then isDefined(addressFromString(value(hh)))
2141+ let hT = bb(hP)
2142+ let hU = getString(hT)
2143+ if (if (isDefined(hU))
2144+ then isDefined(addressFromString(value(hU)))
20102145 else false)
2011- then throw(((hc + " already has refBy: ") + value(hh)))
2146+ then throw(((hP + " already has refBy: ") + value(hU)))
20122147 else {
2013- let hi = aF(hb)
2014- let hj = getString(hi)
2015- let hk = if (isDefined(hj))
2016- then split_4C(value(hj), "_")
2148+ let hV = bc(hO)
2149+ let hW = getString(hV)
2150+ let hX = if (isDefined(hW))
2151+ then split_4C(value(hW), "_")
20172152 else nil
2018- if (containsElement(hk, hc))
2019- then throw((((hb + " already contains ") + hc) + " within referrals"))
2153+ if (containsElement(hX, hP))
2154+ then throw((((hO + " already contains ") + hP) + " within referrals"))
20202155 else {
2021- let hl = makeString_2C((hk :+ hc), "_")
2022- let hm = if (containsElement(hf, hb))
2023- then value(he)
2024- else makeString_2C((hf :+ hb), "_")
2025- $Tuple2([StringEntry(hg, hb), StringEntry(hi, hl), StringEntry(hd, hm), gj], 0)
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)
20262161 }
20272162 }
20282163 }
20292164 }
20302165 }
20312166
20322167
20332168
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)
20592201
20602202

github/deemru/w8io/03bedc9 
941.97 ms