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