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