tx · 6AqtrWE6JazehSYZUUTv94J4TEjXQCVArLLj4YdpPXRc

3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm:  -0.09800000 Waves

2023.09.19 14:33 [2762217] smart account 3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm > SELF 0.00000000 Waves

{ "type": 13, "id": "6AqtrWE6JazehSYZUUTv94J4TEjXQCVArLLj4YdpPXRc", "fee": 9800000, "feeAssetId": null, "timestamp": 1695123267119, "version": 2, "chainId": 84, "sender": "3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm", "senderPublicKey": "EVooykMNV691Venwp1dHUTBd7KWequzUcda57Wd3LQEX", "proofs": [ "2iZmbsXREHba12JqhzRWbtabwWGSh7RxmkwgvF4sWr1HnRT58BQf9TLPYp4rSQB99vkwXbmBcu1oNa6TMWXNSCnE" ], "script": "base64:BgLYAQgCEgMKAQgSAwoBBBIAEgMKAQgSABIDCgEIEgQKAgEIEgQKAgEIEgQKAgICEgUKAwEBARIAEgQKAggIEgASAwoBCBIAEgQKAgICEgMKAQgSBAoCCAgSAwoBGBIECgIICBIECgIICBIDCgEIEgMKARgSAwoBCBIFCgMICAgSBAoCCAgSBwoFAQEBAQESAwoBARIFCgMBAQgSAwoBCBIDCgEIEgASBAoCCAESBAoCCAESAwoBCBIECgIICBIDCgEIEgASAwoBCBIECgICAhIECgICAhIECgICAocCARRrZXlMYXN0QXJiVGltZUJ5VXNlcgEEYWRkcgkArAICAhBsYXN0QXJiVGltZVVzZXJfBQRhZGRyAAZTQ0FMRTgAgMLXLwAMeHBMZXZlbFNjYWxlAIAZAA94cExldmVsUmVjaXBQb3cAoB8AEm51bVBvaW50c09uTGV2ZWxVcAADAA5yb2JiZXJ5Q29zdE1pbgCAwtcvABRyb2JiZXJ5Q29vbGRvd25Db2VmZgCQAwAMcmVxdWlyZW1lbnRzCQDMCAICCFN0cmVuZ3RoCQDMCAICCEFjY3VyYWN5CQDMCAICCUludGVsbGVjdAkAzAgCAglFbmR1cmFuY2UJAMwIAgIJRGV4dGVyaXR5CQDMCAICBUxldmVsCQDMCAICBkhlYWx0aAUDbmlsAAxjaGFyU3RyZW5ndGgAAAAMY2hhckFjY3VyYWN5AAEADWNoYXJJbnRlbGxlY3QAAgANY2hhckVuZHVyYW5jZQADAA1jaGFyRGV4dGVyaXR5AAQAC3NlZ0JhY2twYWNrAAAAC05VTVNFR01FTlRTAAYACk5VTU1BSU5BVVgAAgAITUFYU0xPVFMAAgANTUFYUFJPRElOU0xPVAAeABBsYW5kUm9iQ29vbGRvd25zCQDMCAIAAAkAzAgCAMDPJAkAzAgCAKD3NgkAzAgCAIDczBQJAMwIAgCArqYKBQNuaWwADk1JTl9SRVNfVE9fUk9CAIDaxAkADHJvYklkeExvY2tlZAABAAtkdWNrSWR4RnJlZQAAABBkdWNrSWR4UHJlcGFyaW5nAAEBDWtleUR1Y2tIZWFsdGgBC2R1Y2tBc3NldElkCQCsAgICC2R1Y2tIZWFsdGhfBQtkdWNrQXNzZXRJZAEMa2V5RHVja0NoYXJzAQtkdWNrQXNzZXRJZAkArAICAgpkdWNrQ2hhcnNfBQtkdWNrQXNzZXRJZAEJa2V5RHVja1hQAQtkdWNrQXNzZXRJZAkArAICAgdkdWNrWFBfBQtkdWNrQXNzZXRJZAEMa2V5RHVja0xldmVsAQtkdWNrQXNzZXRJZAkArAICAgpkdWNrTGV2ZWxfBQtkdWNrQXNzZXRJZAERa2V5RHVja0ZyZWVQb2ludHMBC2R1Y2tBc3NldElkCQCsAgICD2R1Y2tGcmVlUG9pbnRzXwULZHVja0Fzc2V0SWQBEGtleUR1Y2tFcXVpcG1lbnQBC2R1Y2tBc3NldElkCQCsAgICDmR1Y2tFcXVpcG1lbnRfBQtkdWNrQXNzZXRJZAEJa2V5VXNlclhQAQRhZGRyCQCsAgICB3VzZXJYUF8FBGFkZHIBDGtleVVzZXJMZXZlbAEEYWRkcgkArAICAgp1c2VyTGV2ZWxfBQRhZGRyARFrZXlVc2VyRnJlZVBvaW50cwEEYWRkcgkArAICAg91c2VyRnJlZVBvaW50c18FBGFkZHIBDmtleVNhdmVkSGVhbHRoAQtkdWNrQXNzZXRJZAkArAICAgxzYXZlZEhlYWx0aF8FC2R1Y2tBc3NldElkARBrZXlTYXZlZExvY2F0aW9uAQtkdWNrQXNzZXRJZAkArAICAg5zYXZlZExvY2F0aW9uXwULZHVja0Fzc2V0SWQBDGtleUR1Y2tCdWZmcwELZHVja0Fzc2V0SWQJAKwCAgIKZHVja0J1ZmZzXwULZHVja0Fzc2V0SWQBGGtleUxhc3RSb2JiZXJ5VGltZUJ5RHVjawELZHVja0Fzc2V0SWQJAKwCAgIQbGFzdFJvYmJlcnlUaW1lXwULZHVja0Fzc2V0SWQBGGtleUxhc3RSb2JiZXJ5Q29zdEJ5RHVjawELZHVja0Fzc2V0SWQJAKwCAgIQbGFzdFJvYmJlcnlDb3N0XwULZHVja0Fzc2V0SWQBE2tleUxhbmRSb2JiZXJ5U3RhdGUBC2xhbmRBc3NldElkCQCsAgICEWxhbmRSb2JiZXJ5U3RhdGVfBQtsYW5kQXNzZXRJZAESa2V5TGFuZENvb2xkb3duRVRBAQtsYW5kQXNzZXRJZAkArAICAhBsYW5kQ29vbGRvd25FVEFfBQtsYW5kQXNzZXRJZAETa2V5RHVja1JvYmJlcnlTdGF0ZQELZHVja0Fzc2V0SWQJAKwCAgIRZHVja1JvYmJlcnlTdGF0ZV8FC2R1Y2tBc3NldElkARNrZXlMb2NrZWRMYW5kQnlEdWNrAQtkdWNrQXNzZXRJZAkArAICAhFsb2NrZWRMYW5kQnlEdWNrXwULZHVja0Fzc2V0SWQAB3hwQ2xhaW0AkE4AD3hwU3VjY2Vzc0ZsaWdodACQTgAMeHBGYWlsRmxpZ2h0ANAPAAh4cENhbGxFUwCgjQYADHhwQ3VzdG9tTmFtZQDAhD0ACnhwTmV3U0xhbmQAwJaxAgAOeHBVcGdyYWRlSW5mcmEAkE4AB3hwTWVyZ2UAwIQ9AAl4cE9uYm9hcmQAwIQ9AAZ4cEhlYWwAkE4BCWxldmVsQnlYUAECeHAJAGsDBQx4cExldmVsU2NhbGUJAGwGBQJ4cAAEBQ94cExldmVsUmVjaXBQb3cABAAEBQRET1dOBQZTQ0FMRTgBCW1heEhlYWx0aAEFbGV2ZWwJAGQCAGQFBWxldmVsAQdsZXZlbFVwAgljdXJyTGV2ZWwFbmV3WFAECG5ld0xldmVsCQEJbGV2ZWxCeVhQAQUFbmV3WFAJAMwIAgUIbmV3TGV2ZWwJAMwIAgkAaAIFEm51bVBvaW50c09uTGV2ZWxVcAkAZQIFCG5ld0xldmVsBQljdXJyTGV2ZWwFA25pbAEMZ2V0RHVja1N0YXRzBA9zdGFraW5nQ29udHJhY3QLZHVja0Fzc2V0SWQKYnVmZkVmZmVjdApmb3JjZUJ1ZmZzBAVjaGFycwkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBDGtleUR1Y2tDaGFycwEFC2R1Y2tBc3NldElkAgkwXzBfMF8wXzACAV8EA2x2bAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QJAQxrZXlEdWNrTGV2ZWwBBQtkdWNrQXNzZXRJZAAABAZoZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkCQEJbWF4SGVhbHRoAQUDbHZsBApzdGF0ZUJ1ZmZzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEMa2V5RHVja0J1ZmZzAQULZHVja0Fzc2V0SWQCCTBfMF8wXzBfMAIBXwkAzggCCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUMY2hhclN0cmVuZ3RoCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUMY2hhckFjY3VyYWN5CQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckludGVsbGVjdAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDWNoYXJFbmR1cmFuY2UJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQ1jaGFyRGV4dGVyaXR5CQDMCAIFA2x2bAkAzAgCBQZoZWFsdGgFA25pbAMFCmZvcmNlQnVmZnMJAMwIAgUKYnVmZkVmZmVjdAkAzAgCBQpidWZmRWZmZWN0CQDMCAIFCmJ1ZmZFZmZlY3QJAMwIAgUKYnVmZkVmZmVjdAkAzAgCBQpidWZmRWZmZWN0BQNuaWwJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCnN0YXRlQnVmZnMFDGNoYXJTdHJlbmd0aAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKc3RhdGVCdWZmcwUMY2hhckFjY3VyYWN5CQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpzdGF0ZUJ1ZmZzBQ1jaGFySW50ZWxsZWN0CQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpzdGF0ZUJ1ZmZzBQ1jaGFyRW5kdXJhbmNlCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpzdGF0ZUJ1ZmZzBQ1jaGFyRGV4dGVyaXR5BQNuaWwBDmdldFJvYmJlcnlEYXRhAg9zdGFraW5nQ29udHJhY3QLZHVja0Fzc2V0SWQEC2xhc3RSb2JDb3N0CQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBGGtleUxhc3RSb2JiZXJ5Q29zdEJ5RHVjawEFC2R1Y2tBc3NldElkAAAEC2xhc3RSb2JUaW1lCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBGGtleUxhc3RSb2JiZXJ5VGltZUJ5RHVjawEFC2R1Y2tBc3NldElkAAAEA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAEB3JvYkNvc3QJAJYDAQkAzAgCBQ5yb2JiZXJ5Q29zdE1pbgkAzAgCCQBlAgULbGFzdFJvYkNvc3QJAGgCBRRyb2JiZXJ5Q29vbGRvd25Db2VmZgkAZQIFA25vdwULbGFzdFJvYlRpbWUFA25pbAQJZHVja1N0YXRlCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBE2tleUR1Y2tSb2JiZXJ5U3RhdGUBBQtkdWNrQXNzZXRJZAAABApsb2NrZWRMYW5kCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBE2tleUxvY2tlZExhbmRCeUR1Y2sBBQtkdWNrQXNzZXRJZAIABAdsYW5kRVRBCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBEmtleUxhbmRDb29sZG93bkVUQQEFCmxvY2tlZExhbmQAAAkAlwoFBQdyb2JDb3N0BQtsYXN0Um9iVGltZQUJZHVja1N0YXRlBQpsb2NrZWRMYW5kBQdsYW5kRVRBAApMQU5EUFJFRklYAgRMQU5EAApEVUNLUFJFRklYAgREVUNLAApBUlRQUkVTQUxFAgdQUkVTQUxFAAZOVU1SRVMABgAYTUFYX0xBTkRTX1NUQUtFRF9CWV9VU0VSABkAD0RBSUxZUkVTQllQSUVDRQCA+NIBAAlEQVlNSUxMSVMAgLiZKQAMV0hNVUxUSVBMSUVSAIDIr6AlAA9ERUZBVUxUTE9DQVRJT04CD0FmcmljYV9GX0FmcmljYQAQUkVTT1VSQ0VQUklDRU1JTgDVtQIACkVTU0VMTENPRUYACgAJcHJvZFR5cGVzCQDMCAICEEZpcnN0IEFpZCBLaXQgTDEJAMwIAgIQRmlyc3QgQWlkIEtpdCBMMgkAzAgCAhBGaXJzdCBBaWQgS2l0IEwzCQDMCAICC0JhY2twYWNrIEwxCQDMCAICC0JhY2twYWNrIEwyCQDMCAICC0JhY2twYWNrIEwzCQDMCAICDkZvb2QgUmF0aW9uIEwxCQDMCAICDkZvb2QgUmF0aW9uIEwyCQDMCAICDkZvb2QgUmF0aW9uIEwzCQDMCAICC0pldCBQYWNrIEwxCQDMCAICC0pldCBQYWNrIEwyCQDMCAICC0pldCBQYWNrIEwzCQDMCAICCVNoaWVsZCBMMQkAzAgCAglTaGllbGQgTDIJAMwIAgIJU2hpZWxkIEwzCQDMCAICB01pbmUgTDEJAMwIAgIHTWluZSBMMgkAzAgCAgdNaW5lIEwzCQDMCAICB1RyYXAgTDEJAMwIAgIHVHJhcCBMMgkAzAgCAgdUcmFwIEwzBQNuaWwACmNvbnRpbmVudHMJAMwIAgIIQW1lcmljYXMJAMwIAgIGRXVyb3BlCQDMCAICBEFzaWEJAMwIAgIGQWZyaWNhCQDMCAICB09jZWFuaWEFA25pbAAJQ09FRkYyTUFUAICt4gQAEGZvcnRBbGxvd2VkUHJvZHMJAMwIAgAPCQDMCAIAEAkAzAgCABEJAMwIAgASCQDMCAIAEwkAzAgCABQFA25pbAAQcHJvZHVjdGlvbk1hdHJpeAkAzAgCAiU4XzhfOF8xN18xN180Ml8xMl8wXzMwXzAsMCwwLDAsMCwwLDBfCQDMCAICJThfOF84XzE3XzE3XzQyXzI0XzBfNjBfMCwwLDUsMiwwLDAsMF8JAMwIAgInOF84XzhfMTdfMTdfNDJfMzZfMF8xMjBfMCwwLDEwLDQsMCwwLDBfCQDMCAICKThfMTlfMTlfOF8yN18xOV8yNl8xXzIwXzAsMCwwLDAsMCwwLDBfMDAxCQDMCAICKThfMTlfMTlfOF8yN18xOV81Ml8xXzQwXzAsMCwwLDAsMCwwLDBfMDAxCQDMCAICKThfMTlfMTlfOF8yN18xOV83OF8xXzgwXzAsMCwwLDAsMCwwLDBfMDAxCQDMCAICJThfOF84XzhfOF82MF8xM18yXzJfMCwwLDAsMCwwLDAsMF8wMTEJAMwIAgIlOF84XzhfOF84XzYwXzI2XzJfNF8wLDAsMCwwLDAsMCwwXzAxMQkAzAgCAiU4XzhfOF84XzhfNjBfMzlfMl84XzAsMCwwLDAsMCwwLDBfMDExCQDMCAICKTMwXzMwXzNfMTdfMTdfM18zMF8zXzMwXzAsMCwwLDAsMCwwLDBfMTExCQDMCAICKTMwXzMwXzNfMTdfMTdfM182MF8zXzUwXzAsMCwwLDAsMCwwLDBfMTExCQDMCAICKTMwXzMwXzNfMTdfMTdfM185MF8zXzcwXzAsMCwwLDAsMCwwLDBfMTExCQDMCAICKzE4XzE4XzEwXzE4XzE4XzE4XzExXzRfMTBfMCwwLDAsMCwwLDAsMF8yMDEJAMwIAgIrMThfMThfMTBfMThfMThfMThfMjJfNF8yMF8wLDAsMCwwLDAsMCwwXzIwMQkAzAgCAisxOF8xOF8xMF8xOF8xOF8xOF8zM180XzMwXzAsMCwwLDAsMCwwLDBfMjAxCQDMCAICKjRfMTNfMjJfNF8zNV8yMl8yM18wXzUwLDEsMF8wLDAsMCwwLDAsMCwwXwkAzAgCAio0XzEzXzIyXzRfMzVfMjJfNDZfMF81MCwxLDFfMCwyLDUsMCwwLDAsMF8JAMwIAgIrNF8xM18yMl80XzM1XzIyXzY5XzBfNTAsMiwxXzAsNSwxMCwwLDAsMCwwXwkAzAgCAio1XzI1XzQwXzVfMTBfMTVfMjBfMV8zMCwxLDFfMCwwLDAsMCwwLDAsMF8JAMwIAgIqNV8yNV80MF81XzEwXzE1XzQwXzFfMzAsMSwyXzIsMSwzLDAsMCwwLDBfCQDMCAICKjVfMjVfNDBfNV8xMF8xNV82MF8xXzMwLDEsM181LDIsOCwwLDAsMCwwXwUDbmlsAAlySWR4Q29lZmYABgAKcklkeEVmZmVjdAAIABBySWR4UmVxdWlyZW1lbnRzAAkACXJJZHhTbG90cwAKAA5QUk9EVUNUUEtHU0laRQAKAAt3aElkeExldmVscwAAAAh3aElkeFJlcwABAAh3aElkeE1hdAACAAl3aElkeFByb2QAAwAJd2hJZHhMT0ZUAAQACXZvbExvY2tlZAAAAAt2b2xPY2N1cGllZAABAAd2b2xGcmVlAAIACHZvbFRvdGFsAAMACmJwSWR4TGV2ZWwAAAAIYnBJZHhSZXMAAQAIYnBJZHhNYXQAAgAJYnBJZHhQcm9kAAMAD2xvY0lkeENvbnRpbmVudAAAAApsb2NJZHhUeXBlAAEACGxvY0lkeElkAAIBFWtleUxhbmRBc3NldElkVG9Pd25lcgEHYXNzZXRJZAkArAICAgNub18FB2Fzc2V0SWQBGmtleUxhbmRBc3NldElkVG9DdXN0b21OYW1lAQdhc3NldElkCQCsAgICBWxjbmFfBQdhc3NldElkARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQdhc3NldElkCQCsAgICA3N0XwUHYXNzZXRJZAEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBHR5cGUHYXNzZXRJZAkAuQkCCQDMCAICA2xhcwkAzAgCBQR0eXBlCQDMCAIFB2Fzc2V0SWQFA25pbAIBXwEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMHbmZ0VHlwZQdhc3NldElkCW93bmVyQWRkcgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICBnN0dGFvXwUHbmZ0VHlwZQIBXwUHYXNzZXRJZAIBXwUJb3duZXJBZGRyARJrZXlXYXJlaG91c2VCeUxhbmQBC2xhbmRBc3NldElkCQCsAgICA3doXwULbGFuZEFzc2V0SWQBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBB2Fzc2V0SWQJAKwCAgILaW5mcmFMZXZlbF8FB2Fzc2V0SWQBF2tleUZvcnRpZmljYXRpb25zQnlMYW5kAQtsYW5kQXNzZXRJZAkArAICAg9mb3J0aWZpY2F0aW9uc18FC2xhbmRBc3NldElkARprZXlEdWNrQXNzZXRJZFRvQ3VzdG9tTmFtZQEHYXNzZXRJZAkArAICAhhkdWNrQ3VzdG9tTmFtZUJ5QXNzZXRJZF8FB2Fzc2V0SWQBFmtleUFkZHJlc3NUb0N1c3RvbU5hbWUBBGFkZHIJAKwCAgIYYWNjb3VudEN1c3RvbU5hbWVCeUFkZHJfBQRhZGRyAQ9rZXlBZGRyZXNzUmVmQnkBBGFkZHIJAKwCAgIJYWNjUmVmQnlfBQRhZGRyARxrZXlPbmJvYXJkQXJ0QWN0aXZhdGVkT25EdWNrAQtkdWNrQXNzZXRJZAkArAICAhpvbmJvYXJkQXJ0QWN0aXZhdGVkT25EdWNrXwULZHVja0Fzc2V0SWQBHGtleU9uYm9hcmRBcnREdWNrQWN0aXZhdGVkQnkBBGFkZHIJAKwCAgIab25ib2FyZEFydEFjdGl2YXRlZER1Y2tCeV8FBGFkZHIBE2tleUFkZHJlc3NSZWZlcnJhbHMBBGFkZHIJAKwCAgINYWNjUmVmZXJyYWxzXwUEYWRkcgEQa2V5RHVja0lkVG9Pd25lcgEHYXNzZXRJZAkArAICAgpkdWNrT3duZXJfBQdhc3NldElkARRrZXlTdGFrZWREdWNrQnlPd25lcgEJb3duZXJBZGRyCQCsAgICEnN0YWtlZER1Y2tCeU93bmVyXwUJb3duZXJBZGRyARFrZXlCYWNrcGFja0J5RHVjawELZHVja0Fzc2V0SWQJAKwCAgIJYmFja1BhY2tfBQtkdWNrQXNzZXRJZAEPa2V5RHVja0xvY2F0aW9uAQtkdWNrQXNzZXRJZAkArAICAg1kdWNrTG9jYXRpb25fBQtkdWNrQXNzZXRJZAEVa2V5VXNlckd3bFJlbGVhc2VUaW1lAQh1c2VyQWRkcgkArAICAholcyVzX191c2VyR3dsUmVsZWFzZVRpbWVfXwUIdXNlckFkZHIBDmtleUVzV2FyZWhvdXNlAAIaZW1lcmdlbmN5V2FyZWhvdXNlUHJvZHVjdHMADWxhc3RUb3VySWRLZXkCDiVzX19sYXN0VG91cklkARVrZXlUb3VyU3RhdGljRGF0YUJ5SWQBA3RJZAkArAICAhYlcyVkX190b3VyU3RhdGljRGF0YV9fCQCkAwEFA3RJZAEWa2V5VG91ckR5bmFtaWNEYXRhQnlJZAEDdElkCQCsAgICFyVzJWRfX3RvdXJEeW5hbWljRGF0YV9fCQCkAwEFA3RJZAEaa2V5QmVzdFJlc3VsdEJ5VG91ckFuZER1Y2sCA3RJZAtkdWNrQXNzZXRJZAkAuQkCCQDMCAICHyVzJWQlc19fYmVzdFJlc3VsdEJ5VG91ckFuZER1Y2sJAMwIAgkApAMBBQN0SWQJAMwIAgULZHVja0Fzc2V0SWQFA25pbAICX18ACWlkeFN0YXRpYwAAAAppZHhEeW5hbWljAAEACnRTdGF0aWNFbmQABgAOdER5bmFtaWNTdGF0dXMAAQELZ2V0VG91ckRhdGECDHRvdXJDb250cmFjdAN0SWQEBnN0YXRpYwkAtQkCCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUMdG91ckNvbnRyYWN0CQEVa2V5VG91clN0YXRpY0RhdGFCeUlkAQUDdElkCQCsAgIJAKwCAgIZRXJyb3IgcmVhZGluZyB0b3VybmFtZW50IAkApAMBBQN0SWQCBSBkYXRhAgJfXwQHZHluYW1pYwkAvAkCCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUMdG91ckNvbnRyYWN0CQEWa2V5VG91ckR5bmFtaWNEYXRhQnlJZAEFA3RJZAkArAICCQCsAgICGUVycm9yIHJlYWRpbmcgdG91cm5hbWVudCAJAKQDAQUDdElkAgUgZGF0YQICX18JAMwIAgUGc3RhdGljCQDMCAIFB2R5bmFtaWMFA25pbAEOaXNJblRvdXJuYW1lbnQCDHRvdXJDb250cmFjdAhsb2NhdGlvbgQGbGFzdElkCQELdmFsdWVPckVsc2UCCQCaCAIFDHRvdXJDb250cmFjdAUNbGFzdFRvdXJJZEtleQAABANsb2MJALUJAgUIbG9jYXRpb24CAV8EA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAEBXREYXRhCQELZ2V0VG91ckRhdGECBQx0b3VyQ29udHJhY3QFBmxhc3RJZAQGc3RhdGljCQCRAwIFBXREYXRhBQlpZHhTdGF0aWMEB2R5bmFtaWMJAJEDAgUFdERhdGEFCmlkeER5bmFtaWMDAwMJAAACCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIBVAkAAAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQNsb2MFD2xvY0lkeENvbnRpbmVudAUGbGFzdElkBwkAAAIJAJEDAgUHZHluYW1pYwUOdER5bmFtaWNTdGF0dXMCCklOUFJPR1JFU1MHCQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBnN0YXRpYwUKdFN0YXRpY0VuZAUDbm93BwESZ2V0UmVjaXBlTWF0ZXJpYWxzAQZyZWNpcGUJAGgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGcmVjaXBlBQlySWR4Q29lZmYFCUNPRUZGMk1BVAAWS1NfU0VQQVJBVEVfUFVCTElDX0tFWQcAGEtTX0FMTE9XX0JJR19JTkZSQV9NRVJHRQcAEUtTX0FMTE9XX0RFTElWRVJZBwAFY2hhaW4JAMkBAgkAygECCAUEdGhpcwVieXRlcwABAAEAC3VzZHRBc3NldElkBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwASCE2nqyCAM/TtG7yo7ui5O8yYLdC136B5ao1CP5qA//uQMJAAACAQFUBQckbWF0Y2gwASBVsdifcoeC7+XjW42sBatl3ppDoS8WuwXzGreHpfHFGAkAAgECDVVua25vd24gY2hhaW4AFWRlZmF1bHRSZXN0QWRkcmVzc1N0cgQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAIjM1BRQ3V2RmJ2aDRMa1BVbnJuVTF6M2puYkExcDltM1dOaHYDCQAAAgEBVAUHJG1hdGNoMAIjM011bWtHR3p0Q0tBWHBXRHF4a2Rkb2ZxWFNVYnFRa3ZTSnkJAAIBAg1Vbmtub3duIGNoYWluABFJbmZyYVVwZ3JhZGVDb3N0UwQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMACAyK+gJQMJAAACAQFUBQckbWF0Y2gwAIDC1y8JAAIBAg1Vbmtub3duIGNoYWluAA5hcmJpdHJhZ2VEZWxheQQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMACAuJkpAwkAAAIBAVQFByRtYXRjaDAA4NQDCQACAQINVW5rbm93biBjaGFpbgADU0VQAgJfXwAFTVVMVDYAwIQ9AAVNVUxUOACAwtcvAAVTU0laRQAZAAVNU0laRQBkAAVMU0laRQDhAQAGWExTSVpFAJADAAdYWExTSVpFAPEEAAVJVEVSNgkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQUDbmlsAQ9nZXRTdHJpbmdPckZhaWwCB2FkZHJlc3MDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUHYWRkcmVzcwUDa2V5CQC5CQIJAMwIAgIKbWFuZGF0b3J5IAkAzAgCCQClCAEFB2FkZHJlc3MJAMwIAgIBLgkAzAgCBQNrZXkJAMwIAgIPIGlzIG5vdCBkZWZpbmVkBQNuaWwCAAARSWR4Q2ZnU3Rha2luZ0RhcHAAAQARSWR4Q2ZnRWNvbm9teURhcHAAAgAUSWR4Q2ZnR292ZXJuYW5jZURhcHAAAwANSWR4Q2ZnV2xnRGFwcAAEABRJZHhDZmdUb3VybmFtZW50RGFwcAAHAQprZXlSZXN0Q2ZnAAIOJXNfX3Jlc3RDb25maWcBDmtleVJlc3RBZGRyZXNzAAIMJXNfX3Jlc3RBZGRyARFyZWFkUmVzdENmZ09yRmFpbAEEcmVzdAkAvAkCCQEPZ2V0U3RyaW5nT3JGYWlsAgUEcmVzdAkBCmtleVJlc3RDZmcABQNTRVABGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIHcmVzdENmZwNpZHgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFB3Jlc3RDZmcFA2lkeAkArAICAipSZXN0IGNmZyBkb2Vzbid0IGNvbnRhaW4gYWRkcmVzcyBhdCBpbmRleCAJAKQDAQUDaWR4AAxyZXN0Q29udHJhY3QJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkBDmtleVJlc3RBZGRyZXNzAAUVZGVmYXVsdFJlc3RBZGRyZXNzU3RyAAdyZXN0Q2ZnCQERcmVhZFJlc3RDZmdPckZhaWwBBQxyZXN0Q29udHJhY3QAD3N0YWtpbmdDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFEUlkeENmZ1N0YWtpbmdEYXBwAA9lY29ub215Q29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRFJZHhDZmdFY29ub215RGFwcAALZ292Q29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRRJZHhDZmdHb3Zlcm5hbmNlRGFwcAALd2xnQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBQ1JZHhDZmdXbGdEYXBwABJ0b3VybmFtZW50Q29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRRJZHhDZmdUb3VybmFtZW50RGFwcAAKcmVjTGFuZE51bQAAAAtyZWNMYW5kU2l6ZQABAAtyZWNUZXJyYWlucwACAAxyZWNDb250aW5lbnQAAwANd2xnQXNzZXRJZEtleQILd2xnX2Fzc2V0SWQACndsZ0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnAgCBQt3bGdDb250cmFjdAUNd2xnQXNzZXRJZEtleQITTm90IGluaXRpYWxpemVkIHlldAALcmFuZG9tRGVsYXkAAgEJa2V5Q29tbWl0AQdhZGRyZXNzCQCsAgICE2ZpbmlzaEJsb2NrRm9yQWRkcl8FB2FkZHJlc3MBEWtleVJlc1Byb3BvcnRpb25zAAITcmVzVHlwZXNQcm9wb3J0aW9ucwEWa2V5UmVzVHlwZXNCeUNvbnRpbmVudAEJY29udGluZW50CQCsAgICFHJlc1R5cGVzQnlDb250aW5lbnRfBQljb250aW5lbnQBFWtleVN0YWtlZExhbmRzQnlPd25lcgEJb3duZXJBZGRyCQCsAgICE3N0YWtlZExhbmRzQnlPd25lcl8FCW93bmVyQWRkcgEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEJb3duZXJBZGRyCQCsAgICFHN0YWtlZFBpZWNlc0J5T3duZXJfBQlvd25lckFkZHIBCGFzU3RyaW5nAQF2BAckbWF0Y2gwBQF2AwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAUBcwkAAgECGGZhaWwgdG8gY2FzdCBpbnRvIFN0cmluZwEFYXNJbnQBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIDSW50BAFuBQckbWF0Y2gwBQFuCQACAQIVZmFpbCB0byBjYXN0IGludG8gSW50AQlhc0Jvb2xlYW4BAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIHQm9vbGVhbgQBcwUHJG1hdGNoMAUBcwkAAgECGWZhaWwgdG8gY2FzdCBpbnRvIEJvb2xlYW4BD251bVBpZWNlc0J5U2l6ZQEIbGFuZFNpemUEByRtYXRjaDAFCGxhbmRTaXplAwkAAAICAVMFByRtYXRjaDAFBVNTSVpFAwkAAAICAU0FByRtYXRjaDAFBU1TSVpFAwkAAAICAUwFByRtYXRjaDAFBUxTSVpFAwkAAAICAlhMBQckbWF0Y2gwBQZYTFNJWkUDCQAAAgIDWFhMBQckbWF0Y2gwBQdYWExTSVpFCQACAQIRVW5rbm93biBsYW5kIHNpemUBB2lzRGlnaXQBAXMJAQlpc0RlZmluZWQBCQC2CQEFAXMBCmtleUJsb2NrZWQAAhBjb250cmFjdHNCbG9ja2VkARFrZXlMYXN0VHhJZEJ5VXNlcgEEYWRkcgkArAICAg9sYXN0VHhJZEJ5VXNlcl8FBGFkZHIBD2dldFJhbmRvbU51bWJlcgMIbWF4VmFsdWUMZmluaXNoSGVpZ2h0CmF1eEVudHJvcHkED3JhbmRvbVNlZWRCbG9j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Y2tCeUN1c3RvbU5hbWVfBQRuYW1lARZrZXlDdXN0b21OYW1lVG9BZGRyZXNzAQRuYW1lCQCsAgICFGFjY291bnRCeUN1c3RvbU5hbWVfBQRuYW1lAQlrZXlPbGRpZXMAAgpvbGRpZXNMaXN0AAtjbGFpbU1vZGVXaAAAAA1jbGFpbU1vZGVEdWNrAAEAE2NsYWltTW9kZVdoVGhlbkR1Y2sAAgAIZmxIZWFsdGgAAAALZmxUaW1lc3RhbXAABQAHZmxCb251cwAGAAtmbFByb2RzVXNlZAAHAQduZnROYW1lAgdsYW5kTnVtCGxhbmRTaXplCQCsAgIJAKwCAgUKTEFORFBSRUZJWAUHbGFuZE51bQUIbGFuZFNpemUBCHRvVm9sdW1lAgZhbW91bnQHcGtnU2l6ZQQEcGtncwMJAGcCBQZhbW91bnQAAAkAaQIJAGUCCQBkAgUGYW1vdW50BQdwa2dTaXplAAEFB3BrZ1NpemUJAQEtAQkAaQIJAGUCCQBkAgkBAS0BBQZhbW91bnQFB3BrZ1NpemUAAQUHcGtnU2l6ZQkAaAIFBHBrZ3MFBU1VTFQ4ARNkaXN0cmlidXRlQnlXZWlnaHRzAgV0b3RhbAd3ZWlnaHRzBANzdW0JAGQCCQBkAgkAZAIJAGQCCQBkAgkAkQMCBQd3ZWlnaHRzAAAJAJEDAgUHd2VpZ2h0cwABCQCRAwIFB3dlaWdodHMAAgkAkQMCBQd3ZWlnaHRzAAMJAJEDAgUHd2VpZ2h0cwAECQCRAwIFB3dlaWdodHMABQMJAGcCAAAFA3N1bQkAAgECEFplcm8gd2VpZ2h0cyBzdW0EBW5vcm02CQBrAwUFdG90YWwFBU1VTFQ2BQNzdW0KAQpub3JtYWxpemVyAgNhY2MEZWxlbQkAzQgCBQNhY2MJAGsDBQRlbGVtBQVub3JtNgUFTVVMVDYKAAIkbAUHd2VpZ2h0cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKbm9ybWFsaXplcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgESZ2V0TmVlZGVkTWF0ZXJpYWxzAQV0b3RhbAQFcHJvcHMJALUJAgkBBXZhbHVlAQkAoggBCQERa2V5UmVzUHJvcG9ydGlvbnMAAgFfAwkBAiE9AgkAkAMBBQVwcm9wcwUGTlVNUkVTCQACAQIWV3JvbmcgcHJvcG9ydGlvbnMgZGF0YQQBcgkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAQkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAgkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAwkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMABAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMABQUDbmlsCQETZGlzdHJpYnV0ZUJ5V2VpZ2h0cwIFBXRvdGFsBQFyARFzdWJ0cmFjdE1hdGVyaWFscwMMc2hvdWxkVXNlTWF0A2hhcwl0b3RhbE5lZWQEBG5lZWQJARJnZXROZWVkZWRNYXRlcmlhbHMBBQl0b3RhbE5lZWQKAQpzdWJ0cmFjdG9yAgNhY2MDaWR4BAZyZXN1bHQJAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDaGFzBQNpZHgJAJEDAgUEbmVlZAUDaWR4AwkAZgIAAAUGcmVzdWx0CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICGE5vdCBlbm91Z2ggbWF0ZXJpYWwgaWR4PQkApAMBBQNpZHgCCywgeW91IGhhdmUgCQCRAwIFA2hhcwUDaWR4AgssIGJ1dCBuZWVkIAkApAMBCQCRAwIFBG5lZWQFA2lkeAkAzQgCBQNhY2MJAKQDAQUGcmVzdWx0AwUMc2hvdWxkVXNlTWF0CgACJGwFBUlURVI2CgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQpzdWJ0cmFjdG9yAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGBQNoYXMBEXN1YnRyYWN0RXF1aXBtZW50AgVvbGRFcQVwVXNlZAMJAAACBQVwVXNlZAIACQCUCgIFBW9sZEVxBwoBB3N1YlVzZWQCA2FjYwZpZHhBbXQEBXBhcnRzCQC1CQIFBmlkeEFtdAIBLAMJAQIhPQIJAJADAQUFcGFydHMAAgkAAgECKEluY29ycmVjdCBmb3JtYXQsIHNob3VsZCBiZSBpbmRleCxhbW91bnQEA2lkeAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXBhcnRzAAADAwkAZgIAAAUDaWR4BgkAZwIFA2lkeAkAkAMBBRBwcm9kdWN0aW9uTWF0cml4CQACAQITVW5rbm93biBwcm9kdWN0IGlkeAQDYW10CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcGFydHMAAQQHZXFQYXJ0cwkAtQkCCAUDYWNjAl8xCQCsAgIJAJEDAgUFcGFydHMAAAIBOgMJAQIhPQIJAJADAQUHZXFQYXJ0cwACCQACAQkArAICCQCsAgICD1lvdSBkb24ndCBoYXZlIAkAkQMCBQlwcm9kVHlwZXMFA2lkeAIJIGVxdWlwcGVkBAN0bXAJAJEDAgUHZXFQYXJ0cwABBAZudW1MZW4DCQEHaXNEaWdpdAEJAK8CAgkAsAICBQN0bXAAAQABAAIAAQQEY3VycgkBDXBhcnNlSW50VmFsdWUBCQCvAgIFA3RtcAUGbnVtTGVuBAR0YWlsCQCwAgIFA3RtcAUGbnVtTGVuBAZuZXdBbXQDCQBnAgUEY3VycgUDYW10CQBlAgUEY3VycgUDYW10CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICDVlvdSBlcXVpcHBlZCAJAKQDAQUEY3VycgIEIG9mIAkAkQMCBQlwcm9kVHlwZXMFA2lkeAITLCBidXQgdHJpZWQgdG8gdXNlIAkApAMBBQNhbXQJAJQKAgkArAICCQCsAgIJAKwCAgkArAICCQCR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BgAHAQpwbGFjZVByb2RCBgZpZHhDbnQFcExpc3QKaXNQb3NpdGl2ZQlkdWNrU3RhdHMIb2NjdXBpZWQEZnJlZQQFcGFydHMJALUJAgUGaWR4Q250AgE6AwkBAiE9AgkAkAMBBQVwYXJ0cwACCQACAQIoSW5jb3JyZWN0IGZvcm1hdCwgc2hvdWxkIGJlIGluZGV4OmFtb3VudAMDCQEBIQEFCmlzUG9zaXRpdmUJAQIhPQIJALECAQkAkQMCBQVwYXJ0cwAAAAIHCQACAQIrUHJvZHVjdCBpZHggc2hvdWxkIGJlIDIgZGlnaXRzLCB6ZXJvIHBhZGRlZAQKcHJvZHVjdElkeAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXBhcnRzAAAEBWNvdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcGFydHMAAQMJAQEhAQkBD2NvbnRhaW5zRWxlbWVudAIFEGZvcnRBbGxvd2VkUHJvZHMFCnByb2R1Y3RJZHgJAAIBCQCsAgIJAKwCAgIJUHJvZHVjdCAnCQCRAwIFCXByb2RUeXBlcwUKcHJvZHVjdElkeAIhJyBjYW5ub3QgYmUgdXNlZCBmb3IgbGFuZCBkZWZlbnNlAwkAZgIAAAUFY291bnQJAAIBAhdDb3VudCBjYW4ndCBiZSBuZWdhdGl2ZQMJAGYCBQVjb3VudAUNTUFYUFJPRElOU0xPVAkAAgEJAKwCAgkArAICCQCsAgICFENhbid0IHB1dCBtb3JlIHRoYW4gCQCkAwEFDU1BWFBST0RJTlNMT1QCBCBvZiAJAJEDAgUJcHJvZFR5cGVzBQpwcm9kdWN0SWR4AwkAAAIFBWNvdW50AAAJAJUKAwUFcExpc3QFCG9jY3VwaWVkBQRmcmVlBARoZWFkCQDJAQIFBXBMaXN0CQBoAgAIBQpwcm9kdWN0SWR4BARjdXJyCQCxCQEJAMkBAgkAygECBQVwTGlzdAkAaAIACAUKcHJvZHVjdElkeAAIBAR0YWlsCQDKAQIFBXBMaXN0CQBoAgAICQBkAgUKcHJvZHVjdElkeAABBAZyZWNpcGUJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4BQpwcm9kdWN0SWR4AgFfAwMJAQEhAQUKaXNQb3NpdGl2ZQkAZgIFBWNvdW50BQRjdXJyBwkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAglZb3UgaGF2ZSAJAKQDAQUEY3VycgIEIG9mIAkAkQMCBQlwcm9kVHlwZXMFCnByb2R1Y3RJZHgCEywgYnV0IHRyaWVkIHRvIHVzZSAJAKQDAQUFY291bnQEBm5ld0FtdAMDCQEBIQEFCmlzUG9zaXRpdmUJARVjaGVja1N0YXRSZXF1aXJlbWVudHMCBQlkdWNrU3RhdHMJALUJAgkAkQMCBQZyZWNpcGUFEHJJZHhSZXF1aXJlbWVudHMCASwHCQBlAgUEY3VycgUFY291bnQJAGQCBQRjdXJyBQVjb3VudAQIZGVsdGFWb2wJAGUCCQEIdG9Wb2x1bWUCBQZuZXdBbXQFDlBST0RVQ1RQS0dTSVpFCQEIdG9Wb2x1bWUCBQRjdXJyBQ5QUk9EVUNUUEtHU0laRQkAlQoDCQDLAQIJAMsBAgUEaGVhZAkAmgMBBQZuZXdBbXQFBHRhaWwJAGQCBQhvY2N1cGllZAUIZGVsdGFWb2wJAGUCBQRmcmVlBQhkZWx0YVZvbAEIYWRkUHJvZEIHBmlkeENudAVwTGlzdAppc1Bvc2l0aXZlB3NlZ21lbnQHbWFpbkF1eARzbG90CWR1Y2tTdGF0cwQFcGFydHMJALUJAgUGaWR4Q250AgE6AwkBAiE9AgkAkAMBBQVwYXJ0cwACCQACAQIoSW5jb3JyZWN0IGZvcm1hdCwgc2hvdWxkIGJlIGluZGV4OmFtb3VudAMDCQEBIQEFCmlzUG9zaXRpdmUJAQIhPQIJALECAQkAkQMCBQVwYXJ0cwAAAAIHCQACAQIrUHJvZHVjdCBpZHggc2hvdWxkIGJlIDIgZGlnaXRzLCB6ZXJvIHBhZGRlZAQKcHJvZHVjdElkeAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXBhcnRzAAAEBWNvdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcGFydHMAAQMDCQBmAgAABQpwcm9kdWN0SWR4BgkAZwIFCnByb2R1Y3RJZHgJAJADAQUQcHJvZHVjdGlvbk1hdHJpeAkAAgECE1Vua25vd24gcHJvZHVjdCBpZHgDCQBmAgAABQVjb3VudAkAAgECF0NvdW50IGNhbid0IGJlIG5lZ2F0aXZlAwkAZgIFBWNvdW50BQ1NQVhQUk9ESU5TTE9UCQACAQkArAICCQCsAgIJAKwCAgIUQ2FuJ3QgcHV0IG1vcmUgdGhhbiAJAKQDAQUNTUFYUFJPRElOU0xPVAIEIG9mIAkAkQMCBQlwcm9kVHlwZXMFCnByb2R1Y3RJZHgDCQAAAgUFY291bnQAAAkAlAoCBQVwTGlzdAcEBGhlYWQJAMkBAgUFcExpc3QJAGgCAAgFCnByb2R1Y3RJZHgEBGN1cnIJALEJAQkAyQECCQDKAQIFBXBMaXN0CQBoAgAIBQpwcm9kdWN0SWR4AAgEBHRhaWwJAMoBAgUFcExpc3QJAGgCAAgJAGQCBQpwcm9kdWN0SWR4AAEEBnJlY2lwZQkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgFCnByb2R1Y3RJZHgCAV8DAwkBASEBBQppc1Bvc2l0aXZlCQBmAgUFY291bnQFBGN1cnIHCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICCVlvdSBoYXZlIAkApAMBBQRjdXJyAgQgb2YgCQCRAwIFCXByb2RUeXBlcwUKcHJvZHVjdElkeAITLCBidXQgdHJpZWQgdG8gdXNlIAkApAMBBQVjb3VudAQJaXNCaWdJdGVtAwMJAQEhAQUKaXNQb3NpdGl2ZQkBFWNoZWNrU3RhdFJlcXVpcmVtZW50cwIFCWR1Y2tTdGF0cwkAtQkCCQCRAwIFBnJlY2lwZQUQcklkeFJlcXVpcmVtZW50cwIBLAcEBmNvbXBhdAkAkQMCBQZyZWNpcGUFCXJJZHhTbG90cwMJAAACBQZjb21wYXQCAAkAAgECF0l0ZW0gY2Fubm90IGJlIGVxdWlwcGVkBAFjCQENcGFyc2VJbnRWYWx1ZQEFBmNvbXBhdAQEY1NlZwkAaQIFAWMAZAMJAQIhPQIFB3NlZ21lbnQFBGNTZWcJAAIBAhRTZWdtZW50IGluY29tcGF0aWJsZQQIY01haW5BdXgJAGkCCQBqAgUBYwBkAAoDCQECIT0CBQdtYWluQXV4BQhjTWFpbkF1eAkAAgECEVNsb3QgaW5jb21wYXRpYmxlBAljTnVtU2xvdHMJAGoCBQFjAAoDAwkBAiE9AgUEc2xvdAAACQBmAgUJY051bVNsb3RzAAEHCQACAQIeQmlnIGl0ZW1zIHNob3VsZCBvY2N1cHkgc2xvdCAwCQBmAgUJY051bVNsb3RzAAEHCQCUCgIJAMsBAgkAywECBQRoZWFkCQCaAwEJAGQCBQRjdXJyAwUKaXNQb3NpdGl2ZQUFY291bnQJAQEtAQUFY291bnQFBHRhaWwFCWlzQmlnSXRlbQELc2xvdHNHcm91cEIGAWcEYnBJbgppc1Bvc2l0aXZlB3NlZ21lbnQHbWFpbkF1eAVzdGF0cwMJAQIhPQIFAWcCAAQFc2xvdHMJALUJAgUBZwIBLAMJAGYCCQCQAwEFBXNsb3RzBQhNQVhTTE9UUwkAAgECEldyb25nIHNsb3RzIGZvcm1hdAQCczAJAJEDAgUFc2xvdHMAAAQCczEDCQBmAgkAkAMBBQVzbG90cwABCQCRAwIFBXNsb3RzAAECAAMDCQAAAgUCczACAAkAAAIFAnMxAgAHBQRicEluBAV0bXBTMAMJAQIhPQIFAnMwAgAJAQhhZGRQcm9kQgcFAnMwBQRicEluBQppc1Bvc2l0aXZlBQdzZWdtZW50BQdtYWluQXV4AAAFBXN0YXRzCQCUCgIFBGJwSW4HAwkBAiE9AgUCczECAAMIBQV0bXBTMAJfMgkAAgECHkJpZyBpdGVtIGFscmVhZHkgb2NjdXBpZXMgc2xvdAgJAQhhZGRQcm9kQgcFAnMxCAUFdG1wUzACXzEFCmlzUG9zaXRpdmUFB3NlZ21lbnQFB21haW5BdXgAAQUFc3RhdHMCXzEIBQV0bXBTMAJfMQUEYnBJbgEGZHJlc3NCBAdzZWdMaXN0BnBCeXRlcwppc1Bvc2l0aXZlBXN0YXRzCgEHc2VnbWVudAIDYWNjA3NlZwQBaggFA2FjYwJfMQQHbWFpbkF1eAkAtQkCBQNzZWcCATsDCQECIT0CCQCQAwEFB21haW5BdXgFCk5VTU1BSU5BVVgJAAIBAhRXcm9uZyBzZWdtZW50IGZvcm1hdAQBbQkAkQMCBQdtYWluQXV4AAAEAWEJAJEDAgUHbWFpbkF1eAABAwMJAAACBQFtAgAJAAACBQFhAgAHCQCUCgIJAGQCBQFqAAEIBQNhY2MCXzIEBHRtcE0JAQtzbG90c0dyb3VwQgYFAW0IBQNhY2MCXzIFCmlzUG9zaXRpdmUFAWoAAAUFc3RhdHMJAJQKAgkAZAIFAWoAAQkBC3Nsb3RzR3JvdXBCBgUBYQUEdG1wTQUKaXNQb3NpdGl2ZQUBagABBQVzdGF0cwgKAAIkbAUHc2VnTGlzdAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgAABQZwQnl0ZXMKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBB3NlZ21lbnQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYCXzIBBWZvcnRCBgdzZWdMaXN0BnBCeXRlcwhvY2N1cGllZARmcmVlCmlzUG9zaXRpdmUJZHVja1N0YXRzAwkAZgIAAwkAkAMBBQdzZWdMaXN0CQACAQIxQXQgbGVhc3QgZHVjaywgbWluZXMgYW5kIHRyYXBzIHBhcnRzIGFyZSByZXF1aXJlZAoBB3NlZ21lbnQCA2FjYwNzZWcEAWoIBQNhY2MCXzEDCQAAAgUBagAACQCWCgQJAGQCBQFqAAEIBQNhY2MCXzIIBQNhY2MCXzMIBQNhY2MCXzQEAXAJAQpwbGFjZVByb2RCBgUDc2VnCAUDYWNjAl8yBQppc1Bvc2l0aXZlBQlkdWNrU3RhdHMIBQNhY2MCXzMIBQNhY2MCXzQJAJYKBAkAZAIFAWoAAQgFAXACXzEIBQFwAl8yCAUBcAJfMwQBdAoAAiRsBQdzZWdMaXN0CgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlgoEAAAFBnBCeXRlcwUIb2NjdXBpZWQFBGZyZWUKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBB3NlZ21lbnQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoJAJUKAwgFAXQCXzIIBQF0Al8zCAUBdAJfNAEXY2FuV2VhckN1cnJlbnRFcXVpcG1lbnQBC2R1Y2tBc3NldElkBAVlcUtleQkBEGtleUR1Y2tFcXVpcG1lbnQBBQtkdWNrQXNzZXRJZAQGY3VyckVxCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUFZXFLZXkCFyw7LF8sOyxfLDssXyw7LF8sOyxfLDssAgFfBAl0ZW1wUHJvZEIJAQZkcmVzc0IEBQZjdXJyRXEFDEVNUFRZX1BST0Q1MAYFA25pbAQIc2VnQnBBdXgJAJEDAgkAtQkCCQCRAwIFBmN1cnJFcQULc2VnQmFja3BhY2sCATsAAQQKYnVmZkVmZmVjdAMJAAACBQhzZWdCcEF1eAIAAAAEBGF1eDAJAJEDAgkAtQkCBQhzZWdCcEF1eAIBLAAAAwkAAAIFBGF1eDACAAAABAZpZHhDbnQJALUJAgUEYXV4MAIBOgQDaWR4CQCRAwIFBmlkeENudAAABANjbnQJAJEDAgUGaWR4Q250AAEDAwMDAwkAAAIFA2lkeAICMDYGCQAAAgUDaWR4AgIwNwYJAAACBQNpZHgCAjA4CQECIT0CBQNjbnQCAAcJAGYCCQENcGFyc2VJbnRWYWx1ZQEFA2NudAAABwkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4CQENcGFyc2VJbnRWYWx1ZQEFA2lkeAIBXwUKcklkeEVmZmVjdAAABAVzdGF0cwkBDGdldER1Y2tTdGF0cwQFBHRoaXMFC2R1Y2tBc3NldElkBQpidWZmRWZmZWN0BgQIbmV3UHJvZEIJAQZkcmVzc0IEBQZjdXJyRXEFCXRlbXBQcm9kQgcFBXN0YXRzCQAAAgUIbmV3UHJvZEIFCG5ld1Byb2RCARl1cGRhdGVQcm9wb3J0aW9uc0ludGVybmFsBAhwcm9wTGlzdA10ZXJyYWluQ291bnRzDWxhbmRTaXplSW5kZXgEc2lnbgMJAQIhPQIJAJADAQUIcHJvcExpc3QFBk5VTVJFUwkAAgECFldyb25nIHByb3BvcnRpb25zIGRhdGEKAQd1cGRhdGVyAgNhY2MBaQQGcmVzdWx0CQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb3BMaXN0BQFpCQBoAgkAaAIFBHNpZ24JAJEDAgUNdGVycmFpbkNvdW50cwUBaQUNbGFuZFNpemVJbmRleAMJAGYCAAAFBnJlc3VsdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIWUGFuaWMhIFBpZWNlcyBvZiB0eXBlPQkApAMBBQFpAgcsIHNpZ249CQCkAwEFBHNpZ24CEywgdGVycmFpbkNvdW50c1tpXT0JAKQDAQkAkQMCBQ10ZXJyYWluQ291bnRzBQFpAhAsIGxhbmRTaXplSW5kZXg9CQCkAwEFDWxhbmRTaXplSW5kZXgJAM0IAgUDYWNjCQCkAwEFBnJlc3VsdAoAAiRsBQVJVEVSNgoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEHdXBkYXRlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgERdXBkYXRlUHJvcG9ydGlvbnMDDXRlcnJhaW5Db3VudHMNbGFuZFNpemVJbmRleARzaWduBAhwcm9wTGlzdAkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEJARFrZXlSZXNQcm9wb3J0aW9ucwACCzBfMF8wXzBfMF8wAgFfCQC5CQIJARl1cGRhdGVQcm9wb3J0aW9uc0ludGVybmFsBAUIcHJvcExpc3QFDXRlcnJhaW5Db3VudHMFDWxhbmRTaXplSW5kZXgFBHNpZ24CAV8BDWNvdW50VGVycmFpbnMBCHRlcnJhaW5zCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUEAAQkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFCAAEJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBQwABCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUQAAQkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFFAAEJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBRgABBQNuaWwBBmFkZFJlcwUKY3VycmVudFJlcw10ZXJyYWluQ291bnRzCWRlbHRhVGltZQ1sYW5kU2l6ZUluZGV4F2RhaWx5QnlQaWVjZVdpdGhCb251c2VzCgEFYWRkZXICA2FjYwFpBAlyZXNPZlR5cGUJAGgCCQBoAgkAawMFCWRlbHRhVGltZQUXZGFpbHlCeVBpZWNlV2l0aEJvbnVzZXMFCURBWU1JTExJUwkAkQMCBQ10ZXJyYWluQ291bnRzBQFpBQ1sYW5kU2l6ZUluZGV4CQDNCAIFA2FjYwkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCmN1cnJlbnRSZXMFAWkFCXJlc09mVHlwZQQBcgoAAiRsBQVJVEVSNgoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEFYWRkZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYJALkJAgUBcgIBXwEJdmlydENsYWltBA10ZXJyYWluQ291bnRzCWRlbHRhVGltZQ1sYW5kU2l6ZUluZGV4F2RhaWx5QnlQaWVjZVdpdGhCb251c2VzCgEFYWRkZXICA2FjYwFpBAlyZXNPZlR5cGUJAGgCCQBoAgkAawMFCWRlbHRhVGltZQUXZGFpbHlCeVBpZWNlV2l0aEJvbnVzZXMFCURBWU1JTExJUwkAkQMCBQ10ZXJyYWluQ291bnRzBQFpBQ1sYW5kU2l6ZUluZGV4CQCUCgIJAM0IAggFA2FjYwJfMQUJcmVzT2ZUeXBlCQBkAggFA2FjYwJfMgUJcmVzT2ZUeXBlCgACJGwFBUlURVI2CgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwAAAoBBSRmMF8xAgIk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YWwFCndoT2NjdXBpZWQJAMwIAgkApAMBBQd3aFRvdGFsBQNuaWwCAV8EBGxvZnQJALUJAgkAkQMCBQJ3aAUJd2hJZHhMT0ZUAgFfBAh3aExvY2tlZAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFCXZvbExvY2tlZAQDb2NjAwkAZgIJAJADAQUEbG9mdAABCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQFCndoT2NjdXBpZWQJALkJAgkAzAgCCQCkAwEFCHdoTG9ja2VkCQDMCAIJAKQDAQUDb2NjCQDMCAIJAKQDAQkAZQIJAGUCBQd3aFRvdGFsBQh3aExvY2tlZAUDb2NjCQDMCAIJAKQDAQUHd2hUb3RhbAUDbmlsAgFfCQDMCAIJAJEDAgUCd2gFC3doSWR4TGV2ZWxzCQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUCd2gFCHdoSWR4UmVzAgFfBQZOVU1SRVMJAJEDAgUCd2gFCHdoSWR4UmVzAgswXzBfMF8wXzBfMAkAzAgCAwkAAAIJAJADAQkAtQkCCQCRAwIFAndoBQh3aElkeE1hdAIBXwUGTlVNUkVTCQCRAwIFAndoBQh3aElkeE1hdAILMF8wXzBfMF8wXzAJAMwIAgkAkQMCBQJ3aAUJd2hJZHhQcm9kCQDMCAIFBndoTG9mdAUDbmlsARVnZXRXYXJlaG91c2VTcGFjZUxlZnQBCWN1cnJlbnRXaAQLb2NjdXBpZWRWb2wJARdnZXRXYXJlaG91c2VPY2N1cGllZFZvbAEFCWN1cnJlbnRXaAQPY3VycldoTG9ja2VkVm9sCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUAgFfBQl2b2xMb2NrZWQJAGUCCQBlAgkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzBQtvY2N1cGllZFZvbAUPY3VycldoTG9ja2VkVm9sAQltb3ZlU3R1ZmYDCmNhcmdvUGFydHMJY3VycmVudFdoC2N1cnJlbnRQYWNrAwkBAiE9AgkAkAMBBQpjYXJnb1BhcnRzAAMJAAIBAjRjYXJnb0xpc3RTdHIgc2hvdWxkIGNvbnRhaW4gZXhhY3RseSAyICc6JyBzZXBhcmF0b3JzBAhyZXNQYXJ0cwkAtQkCCQCRAwIFCmNhcmdvUGFydHMAAAIBXwQIbWF0UGFydHMJALUJAgkAkQMCBQpjYXJnb1BhcnRzAAECAV8ECXByb2RQYXJ0cwMJAAACCQCRAwIFCmNhcmdvUGFydHMAAgIABQNuaWwJALwJAgkAkQMCBQpjYXJnb1BhcnRzAAICAV8DCQECIT0CCQCQAwEFCHJlc1BhcnRzBQZOVU1SRVMJAAIBAiBBbGwgNiByZXNvdXJjZXMgc2hvdWxkIGJlIHBhc3NlZAMJAQIhPQIJAJADAQUIbWF0UGFydHMFBk5VTVJFUwkAAgECIEFsbCA2IG1hdGVyaWFscyBzaG91bGQgYmUgcGFzc2VkBAt3aFNwYWNlTGVmdAkBFWdldFdhcmVob3VzZVNwYWNlTGVmdAEFCWN1cnJlbnRXaAQJY3VycldoUmVzCQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeFJlcwIBXwQJY3VycldoTWF0CQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeE1hdAIBXwQKY3VycldoUHJvZAMJAAACCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAgAFA25pbAkAvAkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAgFfBA5jdXJyZW50UGFja1JlcwkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwIBXwQOY3VycmVudFBhY2tNYXQJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8ED2N1cnJlbnRQYWNrUHJvZAMJAAACCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAAUDbmlsCQC8CQIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIBXwoBA212UgIDYWNjBGl0ZW0EAWkIBQNhY2MCXzEEAmFtCQENcGFyc2VJbnRWYWx1ZQEFBGl0ZW0EA3docgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWN1cnJXaFJlcwUBaQQDYnByCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOY3VycmVudFBhY2tSZXMFAWkDCQAAAgUCYW0AAAkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAJEDAgUJY3VycldoUmVzBQFpCQDNCAIIBQNhY2MCXzMJAJEDAgUOY3VycmVudFBhY2tSZXMFAWkIBQNhY2MCXzQDCQBmAgUCYW0AAAMJAGYCBQJhbQUDYnByCQACAQkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHRha2UgBQRpdGVtAhkgZnJvbSBiYWNrcGFjaywgYnV0IG9ubHkgCQCkAwEFA2JwcgIKIGF2YWlsYWJsZQkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZAIFA3docgUCYW0JAM0IAggFA2FjYwJfMwkApAMBCQBlAgUDYnByBQJhbQkAZAIIBQNhY2MCXzQFAmFtAwkAZgIJAQEtAQUCYW0FA3docgkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byB0YWtlIAkApAMBCQEBLQEFAmFtAhogZnJvbSB3YXJlaG91c2UsIGJ1dCBvbmx5IAkApAMBBQN3aHICCiBhdmFpbGFibGUJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGQCBQN3aHIFAmFtCQDNCAIIBQNhY2MCXzMJAKQDAQkAZQIFA2JwcgUCYW0JAGQCCAUDYWNjAl80BQJhbQQBcgoAAiRsBQhyZXNQYXJ0cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJYKBAAABQNuaWwFA25pbAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQNtdlICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYKAQNtdk0CA2FjYwRpdGVtBAFpCAUDYWNjAl8xBAJhbQkBDXBhcnNlSW50VmFsdWUBBQRpdGVtBAN3aG0JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQljdXJyV2hNYXQFAWkEA2JwbQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmN1cnJlbnRQYWNrTWF0BQFpAwkAAAIFAmFtAAAJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCRAwIFCWN1cnJXaE1hdAUBaQkAzQgCCAUDYWNjAl8zCQCRAwIFDmN1cnJlbnRQYWNrTWF0BQFpCAUDYWNjAl80AwkAZgIFAmFtAAADCQBmAgUCYW0FA2JwbQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byB0YWtlIAUEaXRlbQIZIGZyb20gYmFja3BhY2ssIGJ1dCBvbmx5IAkApAMBBQNicG0CCiBhdmFpbGFibGUJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGQCBQN3aG0FAmFtCQDNCAIIBQNhY2MCXzMJAKQDAQkAZQIFA2JwbQUCYW0JAGQCCAUDYWNjAl80BQJhbQMJAGYCCQEBLQEFAmFtBQN3aG0JAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAJAKQDAQkBAS0BBQJhbQIaIGZyb20gd2FyZWhvdXNlLCBidXQgb25seSAJAKQDAQUDd2htAgogYXZhaWxhYmxlCQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkApAMBCQBkAgUDd2htBQJhbQkAzQgCCAUDYWNjAl8zCQCkAwEJAGUCBQNicG0FAmFtCQBkAggFA2FjYwJfNAUCYW0EAW0KAAIkbAUIbWF0UGFydHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCWCgQAAAUDbmlsBQNuaWwIBQFyAl80CgEFJGYxXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQNtdk0CBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjFfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjFfMgIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYKAQNtdlACA2FjYwRpdGVtBAFpCAUDYWNjAl8xBAJhbQkBDXBhcnNlSW50VmFsdWUBBQRpdGVtBAN3aHADCQBmAgkAkAMBBQpjdXJyV2hQcm9kBQFpCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKY3VycldoUHJvZAUBaQAABANicHADCQBmAgkAkAMBBQ9jdXJyZW50UGFja1Byb2QFAWkJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ9jdXJyZW50UGFja1Byb2QFAWkAAAMJAAACBQJhbQAACQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkApAMBBQN3aHAJAM0IAggFA2FjYwJfMwkApAMBBQNicHAIBQNhY2MCXzQDCQBmAgUCYW0AAAMJAGYCBQJhbQUDYnBwCQACAQkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHRha2UgBQRpdGVtAhkgZnJvbSBiYWNrcGFjaywgYnV0IG9ubHkgCQCkAwEFA2JwcAIKIGF2YWlsYWJsZQQIZGVsdGFWb2wJAGUCCQEIdG9Wb2x1bWUCCQBkAgUDd2hwBQJhbQUOUFJPRFVDVFBLR1NJWkUJAQh0b1ZvbHVtZQIFA3docAUOUFJPRFVDVFBLR1NJWkUJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGQCBQN3aHAFAmFtCQDNCAIIBQNhY2MCXzMJAKQDAQkAZQIFA2JwcAUCYW0JAGQCCAUDYWNjAl80BQhkZWx0YVZvbAMJAGYCCQEBLQEFAmFtBQN3aHAJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAJAKQDAQkBAS0BBQJhbQIaIGZyb20gd2FyZWhvdXNlLCBidXQgb25seSAJAKQDAQUDd2hwAgogYXZhaWxhYmxlBAhkZWx0YVZvbAkAZQIJAQh0b1ZvbHVtZQIJAGQCBQN3aHAFAmFtBQ5QUk9EVUNUUEtHU0laRQkBCHRvVm9sdW1lAgUDd2hwBQ5QUk9EVUNUUEtHU0laRQkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZAIFA3docAUCYW0JAM0IAggFA2FjYwJfMwkApAMBCQBlAgUDYnBwBQJhbQkAZAIIBQNhY2MCXzQFCGRlbHRhVm9sBAFwAwkBAiE9AgkAkAMBBQlwcm9kUGFydHMAAAoAAiRsBQlwcm9kUGFydHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCWCgQAAAUDbmlsBQNuaWwIBQFtAl80CgEFJGYyXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQNtdlACBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjJfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDUwCQEFJGYyXzICCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgkAlgoEAAAFCmN1cnJXaFByb2QFD2N1cnJlbnRQYWNrUHJvZAgFAW0CXzQECHZvbFNhbGRvCAUBcAJfNAMJAGYCBQh2b2xTYWxkbwULd2hTcGFjZUxlZnQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICFUF0dGVtcHQgdG8gcHV0IHRvdGFsIAkApAMBBQh2b2xTYWxkbwIRIHN0dWZmLCBidXQgb25seSAJAKQDAQULd2hTcGFjZUxlZnQCFSB3YXJlaG91c2Ugc3BhY2UgbGVmdAkAmQoHCQC5CQIIBQFyAl8yAgFfCQC5CQIIBQFtAl8yAgFfCQC6CQIIBQFwAl8yAgFfCQC5CQIIBQFyAl8zAgFfCQC5CQIIBQFtAl8zAgFfCQC6CQIIBQFwAl8zAgFfBQh2b2xTYWxkbwESZXhwZWRpdGlvbkludGVybmFsAgZjYWxsZXIEdHhJZAQIdXNlckFkZHIJAKUIAQUGY2FsbGVyBAZiaWdOdW0JAQNhYnMBCQCeAwEFBHR4SWQEB2ZyZWVOdW0JAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBEmtleU5leHRGcmVlTGFuZE51bQAJAGQCBQ9QUkVTQUxFTlVNTEFORFMAAQQHbGFuZE51bQkApAMBBQdmcmVlTnVtBAxjb250aW5lbnRJZHgJAKADAQkAuwICBQZiaWdOdW0FBUZJVkVYBAh0ZXJyYWlucwkBC2dlblRlcnJhaW5zAgUGYmlnTnVtBQxjb250aW5lbnRJZHgECWNvbnRpbmVudAkAkQMCBQpjb250aW5lbnRzBQxjb250aW5lbnRJZHgEBWlzc3VlCQDCCAUJAQduZnROYW1lAgUHbGFuZE51bQIBUwkAuQkCCQDMCAIFB2xhbmROdW0JAMwIAgIBUwkAzAgCBQh0ZXJyYWlucwkAzAgCBQljb250aW5lbnQFA25pbAIBXwABAAAHBAdhc3NldElkCQC4CAEFBWlzc3VlBAJpZAkA2AQBBQdhc3NldElkCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJARJrZXlOZXh0RnJlZUxhbmROdW0ACQBkAgUHZnJlZU51bQABCQDMCAIFBWlzc3VlCQDMCAIJAQtTdHJpbmdFbnRyeQIJARBrZXlMYW5kVG9Bc3NldElkAQUHbGFuZE51bQUCaWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFAmlkBQh1c2VyQWRkcgkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5TGFuZE51bVRvT3duZXIBBQdsYW5kTnVtBQh1c2VyQWRkcgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQJpZAAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAgUCaWQFCHVzZXJBZGRyAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUGY2FsbGVyAAEFB2Fzc2V0SWQFA25pbAkAlAoCBQJpZAUJY29udGluZW50AQxmbGlnaHRDb21tb24DCHVzZXJBZGRyB21lc3NhZ2UDc2lnAwkBASEBCQDEEwMFB21lc3NhZ2UFA3NpZwUDcHViCQACAQIYc2lnbmF0dXJlIGRvZXMgbm90IG1hdGNoBAVwYXJ0cwkAvAkCCQCwCQEFB21lc3NhZ2UCATsECWZsaWdodExvZwkAvAkCCQCRAwIFBXBhcnRzAAACAXwEAmhwCQC1CQIJAJEDAgUJZmxpZ2h0TG9nBQhmbEhlYWx0aAIBXwQFY3VySFAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJocAAABAVuZXdIUAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmhwAAEEC25ld0xvY1R4VmVyCQC1CQIJAJEDAgUFcGFydHMAAQIBOgQLbmV3TG9jYXRpb24JAJEDAgULbmV3TG9jVHhWZXIAAAQEdGltZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWZsaWdodExvZwULZmxUaW1lc3RhbXADAwkAZgIFBHRpbWUJAGQCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAURRklWRU1JTlVURVNNSUxMSVMGCQBmAgkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBRFGSVZFTUlOVVRFU01JTExJUwUEdGltZQkAAgEJAKwCAgkArAICCQCsAgICHHNpZ25hdHVyZSBvdXRkYXRlZDogbG9nVGltZT0JAKQDAQUEdGltZQIJLCBiY1RpbWU9CQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAl0eEZyb21Nc2cJAJEDAgULbmV3TG9jVHhWZXIAAQQGbGFzdFR4CQELdmFsdWVPckVsc2UCCQCiCAEJARFrZXlMYXN0VHhJZEJ5VXNlcgEFCHVzZXJBZGRyAgADCQECIT0CBQZsYXN0VHgFCXR4RnJvbU1zZwkAAgEJAKwCAgkArAICCQCsAgICHlR4IGlkcyBkb24ndCBtYXRjaCEgSW4gc3RhdGU6IAUGbGFzdFR4AgosIGluIG1zZzogBQl0eEZyb21Nc2cEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUIdXNlckFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAQFbWF4SFAJAQltYXhIZWFsdGgBCQELdmFsdWVPckVsc2UCCQCfCAEJAQxrZXlEdWNrTGV2ZWwBBQtkdWNrQXNzZXRJZAAABAxvbGRGcm9tU3RhdGUJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoBQVtYXhIUAMJAQIhPQIFDG9sZEZyb21TdGF0ZQUFY3VySFAJAAIBCQCsAgIJAKwCAgkArAICAgpvbGRIZWFsdGg9CQCkAwEFDG9sZEZyb21TdGF0ZQIvIGZyb20gc3RhdGUgZG9lcyBub3QgbWF0Y2ggb25lIGZyb20gZmxpZ2h0IGxvZz0JAKQDAQUFY3VySFADCQBnAgAABQVjdXJIUAkAAgECHllvdSBjYW4ndCBmbHkgd2l0aCB6ZXJvIGhlYWx0aAMJAQEhAQkBF2NhbldlYXJDdXJyZW50RXF1aXBtZW50AQULZHVja0Fzc2V0SWQJAAIBAhZFcXVpcG1lbnQgaW5jb21wYXRpYmxlBAVib251cwMJAGYCCQCQAwEFCWZsaWdodExvZwUHZmxCb251cwkAkQMCBQlmbGlnaHRMb2cFB2ZsQm9udXMCAAQIcHJvZFVzZWQDCQBmAgkAkAMBBQlmbGlnaHRMb2cFC2ZsUHJvZHNVc2VkCQCRAwIFCWZsaWdodExvZwULZmxQcm9kc1VzZWQCAAQKc2VudEFtb3VudAMDCQBmAgUFbmV3SFAAAAkAAAIFBWJvbnVzAgEkBwkBBWFzSW50AQkA/AcEBQxyZXN0Q29udHJhY3QCDXNlbmRVc2R0UHJpemUJAMwIAgUIdXNlckFkZHIFA25pbAUDbmlsAAAJAJcKBQUFbmV3SFAFC2R1Y2tBc3NldElkBQpzZW50QW1vdW50BQtuZXdMb2NhdGlvbgUIcHJvZFVzZWQBDGFwcGx5Qm9udXNlcwILbGFuZEFzc2V0SWQGcGllY2VzBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAQJYXJ0UGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkAAAEBGFkZDYJAGkCBQppbmZyYUxldmVsAAYEBGFkZDcJAGkCBQppbmZyYUxldmVsAAcJAGQCCQBkAgUPREFJTFlSRVNCWVBJRUNFCQBrAwUPREFJTFlSRVNCWVBJRUNFCQBkAgkAZAIFCmluZnJhTGV2ZWwFBGFkZDYJAGgCAAIFBGFkZDcABQkAawMFD0RBSUxZUkVTQllQSUVDRQUJYXJ0UGllY2VzCQBoAgUGcGllY2VzAAUBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwRhZGRyCWNsYWltTW9kZQ1sYW5kQXNzZXRJZEluBA0kdDAzMzcwNjM0MjQ1AwkAAAIFCWNsYWltTW9kZQULY2xhaW1Nb2RlV2gJAJQKAgUNbGFuZEFzc2V0SWRJbgkBC3ZhbHVlT3JFbHNlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAgAEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04EA2xvYwkAtQkCCQEFdmFsdWUBBQtjdXJMb2NhdGlvbgIBXwMJAQIhPQIJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAgFMCQACAQkArAICCQCsAgICFkR1Y2sgbG9jYXRpb24gdHlwZSBpcyAJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAhEsIGJ1dCBzaG91bGQgYmUgTAkAlAoCCQCRAwIFA2xvYwUIbG9jSWR4SWQFC2R1Y2tBc3NldElkBAtsYW5kQXNzZXRJZAgFDSR0MDMzNzA2MzQyNDUCXzEEBmR1Y2tJZAgFDSR0MDMzNzA2MzQyNDUCXzIEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQECXNhdmVkVGltZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCfCAEFB3RpbWVLZXkJAKwCAgkArAICAgVMYW5kIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQBZAkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8JAJYKBAUGZHVja0lkBQtsYW5kQXNzZXRJZAUBZAUJc2F2ZWRUaW1lARBjbGFpbVJlc0ludGVybmFsBARhZGRyBmFtb3VudAljbGFpbU1vZGUNbGFuZEFzc2V0SWRJbgMJAGYCAAAFBmFtb3VudAkAAgECD05lZ2F0aXZlIGFtb3VudAQBYwkBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwUEYWRkcgUJY2xhaW1Nb2RlBQ1sYW5kQXNzZXRJZEluBAhsYW5kU2l6ZQkAkQMCCAUBYwJfMwULcmVjTGFuZFNpemUEDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCCAUBYwJfMwULcmVjVGVycmFpbnMECWRlbHRhVGltZQkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wCAUBYwJfNAMJAGYCAAAFCWRlbHRhVGltZQkAAgEJAKwCAgkArAICCQCsAgICJlNhdmVkIHRpbWVzdGFtcCBpcyBpbiBmdXR1cmUsIHNhdmVkID0gCQCkAwEIBQFjAl80AgwsIGN1cnJlbnQgPSAJAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXAEBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEFCGxhbmRTaXplBBZkYWlseVByb2R1Y3Rpb25CeVBpZWNlCQEMYXBwbHlCb251c2VzAggFAWMCXzIFBnBpZWNlcwQIYXZhaWxSZXMJAGsDBQlkZWx0YVRpbWUJAGgCBRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlBQZwaWVjZXMFCURBWU1JTExJUwMJAGYCBQZhbW91bnQFCGF2YWlsUmVzCQACAQkArAICCQCsAgIJAKwCAgIiTm90IGVub3VnaCByZXNvdXJjZXMsIGF2YWlsYWJsZSA9IAkApAMBBQhhdmFpbFJlcwIOLCByZXF1ZXN0ZWQgPSAJAKQDAQUGYW1vdW50BAxuZXdEZWx0YVRpbWUJAGsDCQBlAgUIYXZhaWxSZXMFBmFtb3VudAUJREFZTUlMTElTCQBoAgUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQUGcGllY2VzBAxuZXdUaW1lc3RhbXAJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUMbmV3RGVsdGFUaW1lBAlsYW5kSW5kZXgJAGkCBQZwaWVjZXMFBVNTSVpFBApyZXNUb0NsYWltCQEJdmlydENsYWltBAUNdGVycmFpbkNvdW50cwkAZQIFCWRlbHRhVGltZQUMbmV3RGVsdGFUaW1lBQlsYW5kSW5kZXgFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UEBXdoS2V5CQESa2V5V2FyZWhvdXNlQnlMYW5kAQgFAWMCXzIECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBCAUBYwJfMgAABAljdXJyZW50V2gJAQxnZXRXYXJlaG91c2UDBQV3aEtleQUJbGFuZEluZGV4BQppbmZyYUxldmVsBARsb2Z0CQC1CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeExPRlQCAV8EC3doU3BhY2VMZWZ0CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQMDCQAAAgUJY2xhaW1Nb2RlBQtjbGFpbU1vZGVXaAkAZgIFBmFtb3VudAULd2hTcGFjZUxlZnQHCQACAQkArAICCQCsAgICBU9ubHkgCQCkAwEFC3doU3BhY2VMZWZ0Ahggc3BhY2UgbGVmdCBpbiB3YXJlaG91c2UEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBCAUBYwJfMQQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BA5jdXJyZW50UGFja1JlcwkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwIBXwQMY3VycmVudFdoUmVzCQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeFJlcwIBXwQNJHQwMzY2MTkzNzQ5MAMJAAACBQljbGFpbU1vZGUFC2NsYWltTW9kZVdoCQCWCgQJAQZhZGRSZXMFBQxjdXJyZW50V2hSZXMFDXRlcnJhaW5Db3VudHMJAGUCBQlkZWx0YVRpbWUFDG5ld0RlbHRhVGltZQUJbGFuZEluZGV4BRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAgFCnJlc1RvQ2xhaW0CXzIJAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQgFCnJlc1RvQ2xhaW0CXzIDCQAAAgUJY2xhaW1Nb2RlBQ1jbGFpbU1vZGVEdWNrCQCWCgQJAJEDAgUJY3VycmVudFdoBQh3aElkeFJlcwkBBmFkZFJlcwUFDmN1cnJlbnRQYWNrUmVzBQ10ZXJyYWluQ291bnRzCQBlAgUJZGVsdGFUaW1lBQxuZXdEZWx0YVRpbWUFCWxhbmRJbmRleAUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQQFZGlzdHIJAQ1kaXN0cmlidXRlUmVzBAUMY3VycmVudFdoUmVzBQ5jdXJyZW50UGFja1JlcwUKcmVzVG9DbGFpbQULd2hTcGFjZUxlZnQEBHdoQW0JAJcDAQkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQkAzAgCCAUKcmVzVG9DbGFpbQJfMgUDbmlsCQCWCgQIBQVkaXN0cgJfMQgFBWRpc3RyAl8yCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkBQR3aEFtCQBlAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUFBHdoQW0EBXdoUmVzCAUNJHQwMzY2MTkzNzQ5MAJfMQQFYnBSZXMIBQ0kdDAzNjYxOTM3NDkwAl8yBAVsb2Z0TwgFDSR0MDM2NjE5Mzc0OTACXzMEBWxvZnRGCAUNJHQwMzY2MTkzNzQ5MAJfNAkAlwoFCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEIBQFjAl8yBQxuZXdUaW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKTEFORFBSRUZJWAgFAWMCXzIFBGFkZHIFDG5ld1RpbWVzdGFtcAUDbmlsBQVicEtleQkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIFBWJwUmVzCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsBQV3aEtleQkAzAgCCQCRAwIFCWN1cnJlbnRXaAULd2hJZHhMZXZlbHMJAMwIAgUFd2hSZXMJAMwIAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0CQDMCAIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QJAMwIAgkAuQkCCQDMCAIJAJEDAgUEbG9mdAUJdm9sTG9ja2VkCQDMCAIJAKQDAQUFbG9mdE8JAMwIAgkApAMBBQVsb2Z0RgkAzAgCCQCRAwIFBGxvZnQFCHZvbFRvdGFsBQNuaWwCAV8FA25pbAEIY2xhaW1BbGwEBGFkZHILbGFuZEFzc2V0SWQGcGllY2VzCWNsYWltTW9kZQQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAQJc2F2ZWRUaW1lCQEFdmFsdWUBCQCfCAEFB3RpbWVLZXkECGF2YWlsUmVzCQBoAgkAawMJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUJc2F2ZWRUaW1lCQEMYXBwbHlCb251c2VzAgULbGFuZEFzc2V0SWQFBnBpZWNlcwUJREFZTUlMTElTBQZwaWVjZXMJARBjbGFpbVJlc0ludGVybmFsBAUEYWRkcgUIYXZhaWxSZXMFCWNsYWltTW9kZQULbGFuZEFzc2V0SWQBDXVwSW5mcmFDb21tb24EDHNob3VsZFVzZU1hdAZjYWxsZXINcGF5bWVudEFtb3VudAtsYW5kQXNzZXRJZAQEYWRkcgkApQgBBQZjYWxsZXIEAWMJARRjaGVja0NsYWltQ29uZGl0aW9ucwMFBGFkZHIFE2NsYWltTW9kZVdoVGhlbkR1Y2sFC2xhbmRBc3NldElkBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIIBQFjAl8zBQtyZWNMYW5kU2l6ZQQIaW5mcmFLZXkJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQgFAWMCXzIECGN1ckxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEFCGluZnJhS2V5AAADAwkBASEBBRhLU19BTExPV19CSUdfSU5GUkFfTUVSR0UJAGcCBQhjdXJMZXZlbAADBwkAAgECJkN1cnJlbnRseSBtYXggaW5mcmFzdHJ1Y3R1cmUgbGV2ZWwgPSAzBAhtYXhJbmZyYQkAZAIJAGkCCQEEc3FydAQFBnBpZWNlcwAAAAAFBERPV04ABQACBAhuZXdMZXZlbAkAZAIFCGN1ckxldmVsAAEDAwUYS1NfQUxMT1dfQklHX0lORlJBX01FUkdFCQBmAgUIbmV3TGV2ZWwFCG1heEluZnJhBwkAAgEJAKwCAgIlQ3VycmVudGx5IG1heCBpbmZyYXN0cnVjdHVyZSBsZXZlbCA9IAkApAMBBQhtYXhJbmZyYQQEY29zdAkAawMFFUluZnJhVXBncmFkZUNvc3RTVXNkdAkAaAIFBnBpZWNlcwUIbmV3TGV2ZWwFBVNTSVpFAwMJAQEhAQUMc2hvdWxkVXNlTWF0CQECIT0CBQ1wYXltZW50QW1vdW50BQRjb3N0BwkAAgEJAKwCAgIbUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgCQCkAwEFBGNvc3QEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBCAUBYwJfMQQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAVtTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQHbWF0VXNlZAkAawMFEUluZnJhVXBncmFkZUNvc3RTCQBoAgUGcGllY2VzBQhuZXdMZXZlbAUFU1NJWkUEBm5ld01hdAkAuQkCCQERc3VidHJhY3RNYXRlcmlhbHMDBQxzaG91bGRVc2VNYXQFBW1MaXN0BQdtYXRVc2VkAgFfBAtjbGFpbVJlc3VsdAkBCGNsYWltQWxsBAUEYWRkcggFAWMCXzIFBnBpZWNlcwUTY2xhaW1Nb2RlV2hUaGVuRHVjawQGd2hEYXRhCAULY2xhaW1SZXN1bHQCXzUEBm9sZFZvbAkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQkAkQMCBQZ3aERhdGEFC3doSWR4TGV2ZWxzBApuZXdWb2xEYXRhCQC5CQIJAMwIAgkAkQMCCQC1CQIJAJEDAgUGd2hEYXRhBQt3aElkeExldmVscwIBXwAACQDMCAIJAKQDAQUIbmV3TGV2ZWwFA25pbAIBXwQGbmV3Vm9sCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBBQpuZXdWb2xEYXRhBARsb2Z0CQC1CQIJAJEDAgUGd2hEYXRhBQl3aElkeExPRlQCAV8ECm5ld0xvZnRTdHIJALkJAgkAzAgCCQCRAwIFBGxvZnQFCXZvbExvY2tlZAkAzAgCCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkCQDMCAIJAKQDAQkAZQIJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQUGbmV3Vm9sBQZvbGRWb2wJAMwIAgkApAMBBQZuZXdWb2wFA25pbAIBXwkAlQoDCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFCGluZnJhS2V5BQhuZXdMZXZlbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIIBQFjAl8yBQRhZGRyBQhuZXdMZXZlbAkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCCAULY2xhaW1SZXN1bHQCXzMFCGJwSWR4UmVzCQDMCAIFBm5ld01hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgkAzAgCCQELU3RyaW5nRW50cnkCCAULY2xhaW1SZXN1bHQCXzQJALkJAgkAzAgCBQpuZXdWb2xEYXRhCQDMCAIJAJEDAgUGd2hEYXRhBQh3aElkeFJlcwkAzAgCCQCRAwIFBndoRGF0YQUId2hJZHhNYXQJAMwIAgkAkQMCBQZ3aERhdGEFCXdoSWR4UHJvZAkAzAgCBQpuZXdMb2Z0U3RyBQNuaWwCAToFA25pbAgFC2NsYWltUmVzdWx0Al8xBQhuZXdMZXZlbAUHbWF0VXNlZAEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCC2R1Y2tBc3NldElkB2RlbHRhWFAEBmx2bEtleQkBDGtleUR1Y2tMZXZlbAEFC2R1Y2tBc3NldElkBAV4cEtleQkBCWtleUR1Y2tYUAEFC2R1Y2tBc3NldElkBAJ4cAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QFBXhwS2V5AAAEBW5ld1hQCQBkAgUCeHAFB2RlbHRhWFAECWx2bFBvaW50cwkBB2xldmVsVXACCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAUGbHZsS2V5AAAFBW5ld1hQBAlrZXlQb2ludHMJARFrZXlEdWNrRnJlZVBvaW50cwEFC2R1Y2tBc3NldElkCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIFBmx2bEtleQkAkQMCBQlsdmxQb2ludHMAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgUFeHBLZXkFBW5ld1hQCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrZXlQb2ludHMJAGQCCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleVBvaW50cwAACQCRAwIFCWx2bFBvaW50cwABBQNuaWwFBW5ld1hQARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgRhZGRyB2RlbHRhWFAEBmx2bEtleQkBDGtleVVzZXJMZXZlbAEFBGFkZHIEBXhwS2V5CQEJa2V5VXNlclhQAQUEYWRkcgQCeHAJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0BQV4cEtleQAABAVuZXdYUAkAZAIFAnhwBQdkZWx0YVhQBAlsdmxQb2ludHMJAQdsZXZlbFVwAgkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QFBmx2bEtleQAABQVuZXdYUAQJa2V5UG9pbnRzCQERa2V5VXNlckZyZWVQb2ludHMBBQRhZGRyCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIFBmx2bEtleQkAkQMCBQlsdmxQb2ludHMAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgUFeHBLZXkFBW5ld1hQCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrZXlQb2ludHMJAGQCCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleVBvaW50cwAACQCRAwIFCWx2bFBvaW50cwABBQNuaWwFBW5ld1hQARJhY3RpdmF0ZU9uYm9hcmRBcnQBBGFkZHIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQIcmVmQnlLZXkJAQ9rZXlBZGRyZXNzUmVmQnkBBQRhZGRyBAVyZWZCeQkAoggBBQhyZWZCeUtleQMJAQEhAQkBCWlzRGVmaW5lZAEFBXJlZkJ5CQACAQIpWW91IGFyZSBub3QgZWxpZ2libGUgZm9yIE9OQk9BUkQgYXJ0aWZhY3QEBmFydEtleQkBHGtleU9uYm9hcmRBcnREdWNrQWN0aXZhdGVkQnkBBQRhZGRyBAdhcnREdWNrCQCiCAEFBmFydEtleQMJAQlpc0RlZmluZWQBBQdhcnREdWNrCQACAQkArAICAi9Zb3UgYWxyZWFkeSB1c2VkIHlvdXIgT05CT0FSRCBhcnRpZmFjdCBvbiBkdWNrIAkBBXZhbHVlAQUHYXJ0RHVjawQQZHVja0FjdGl2YXRvcktleQkBHGtleU9uYm9hcmRBcnRBY3RpdmF0ZWRPbkR1Y2sBBQtkdWNrQXNzZXRJZAQNZHVja0FjdGl2YXRvcgkAoggBBRBkdWNrQWN0aXZhdG9yS2V5AwkBCWlzRGVmaW5lZAEFDWR1Y2tBY3RpdmF0b3IJAAIBCQCsAgIJAKwCAgkArAICAglUaGUgZHVjayAFC2R1Y2tBc3NldElkAjQgYWxyZWFkeSBnb3QgcG9pbnRzIGZyb20gT05CT0FSRCBhcnRpZmFjdCBmcm9tIHVzZXIgCQEFdmFsdWUBBQ1kdWNrQWN0aXZhdG9yCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUGYXJ0S2V5BQtkdWNrQXNzZXRJZAkAzAgCCQELU3RyaW5nRW50cnkCBRBkdWNrQWN0aXZhdG9yS2V5BQRhZGRyBQNuaWwICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAUJeHBPbmJvYXJkAl8xARJhY3RpdmF0ZVByZXNhbGVBcnQCBGFkZHINbGFuZEFzc2V0SWRJbgQBYwkBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwUEYWRkcgUTY2xhaW1Nb2RlV2hUaGVuRHVjawUNbGFuZEFzc2V0SWRJbgQLbGFuZEFzc2V0SWQIBQFjAl8yBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIIBQFjAl8zBQtyZWNMYW5kU2l6ZQQNYWN0aXZhdGlvbktleQkBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQDCQBmAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ1hY3RpdmF0aW9uS2V5AAAAAAkAAgECJVByZXNhbGUgYXJ0aWZhY3QgaXMgYWxyZWFkeSBhY3RpdmF0ZWQDCQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIIBQFjAl8zBQpyZWNMYW5kTnVtBQ9QUkVTQUxFTlVNTEFORFMJAAIBCQCsAgIJAKwCAgkArAICBQpMQU5EUFJFRklYAgEgBQtsYW5kQXNzZXRJZAIlIGlzIG5vdCBlbGlnaWJsZSBmb3IgcHJlc2FsZSBhcnRpZmFjdAQLY2xhaW1SZXN1bHQJAQhjbGFpbUFsbAQFBGFkZHIFC2xhbmRBc3NldElkBQZwaWVjZXMFE2NsYWltTW9kZVdoVGhlbkR1Y2sJAM0IAgkAzQgCCQDNCAIIBQtjbGFpbVJlc3VsdAJfMQkBDEludGVnZXJFbnRyeQIFDWFjdGl2YXRpb25LZXkFBnBpZWNlcwkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al8yCQC5CQIIBQtjbGFpbVJlc3VsdAJfMwIBOgkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al80CQC5CQIIBQtjbGFpbVJlc3VsdAJfNQIBOgEPY2hlY2tUb3VybmFtZW50AQtkdWNrQXNzZXRJZAQGbGFzdElkCQELdmFsdWVPckVsc2UCCQCaCAIFEnRvdXJuYW1lbnRDb250cmFjdAUNbGFzdFRvdXJJZEtleQAABAtjdXJMb2NhdGlvbgkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OAgFfBANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAV0RGF0YQkBC2dldFRvdXJEYXRhAgUSdG91cm5hbWVudENvbnRyYWN0BQZsYXN0SWQEBnN0YXRpYwkAkQMCBQV0RGF0YQUJaWR4U3RhdGljBAdkeW5hbWljCQCRAwIFBXREYXRhBQppZHhEeW5hbWljAwkBAiE9AgkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQIBVAcDAwMJAAACCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgULY3VyTG9jYXRpb24FD2xvY0lkeENvbnRpbmVudAUGbGFzdElkCQAAAgkAkQMCBQdkeW5hbWljBQ50RHluYW1pY1N0YXR1cwIKSU5QUk9HUkVTUwcJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGc3RhdGljBQp0U3RhdGljRW5kBQNub3cHCQACAQIqWW91ciBkdWNrIGlzIHRha2luZyBwYXJ0IGluIHRoZSB0b3VybmFtZW50CQEJYXNCb29sZWFuAQkA/AcEBQR0aGlzAhZleGl0VG91cm5hbWVudEludGVybmFsCQDMCAIFC2R1Y2tBc3NldElkBQNuaWwFA25pbAENbWVyZ2VJbnRlcm5hbAYLbmV3TGFuZFNpemUIbmV3TGV2ZWwHZm9ybXVsYQRhZGRyDGxhbmRBc3NldElkcwduZWVkTWF0BAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQDCQEPY2hlY2tUb3VybmFtZW50AQULZHVja0Fzc2V0SWQJAAIBAh1tZXJnZUludGVybmFsX2NoZWNrVG91cm5hbWVudAoBCmNoZWNrTWVyZ2UCA2FjYwtsYW5kQXNzZXRJZAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAQJc2F2ZWRUaW1lCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQUHdGltZUtleQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMEAWQJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfBAljb250aW5lbnQJAJEDAgUBZAUMcmVjQ29udGluZW50AwMJAQIhPQIIBQNhY2MCXzMCAAkBAiE9AggFA2FjYwJfMwUJY29udGluZW50BwkAAgECLkxhbmRzIHNob3VsZCBiZSBvbiB0aGUgc2FtZSBjb250aW5lbnQgdG8gbWVyZ2UECGxhbmRTaXplCQCRAwIFAWQFC3JlY0xhbmRTaXplBAdzaXplc0luCAUDYWNjAl8xBAFpCQETdmFsdWVPckVycm9yTWVzc2FnZQIJALMJAgUHc2l6ZXNJbgUIbGFuZFNpemUCJ1lvdSBoYXZlbid0IHBhc3NlZCBhbGwgdGhlIGxhbmRzIG5lZWRlZAQIc2l6ZXNPdXQJAKwCAgkArwICBQdzaXplc0luBQFpCQCwAgIFB3NpemVzSW4JAGQCBQFpAAEEBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEFCGxhbmRTaXplBARhcnRzCQBkAggFA2FjYwJfMgkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAAABAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAQIcmVxTGV2ZWwEByRtYXRjaDAFCGxhbmRTaXplAwkAAAICAVMFByRtYXRjaDAAAwMJAAACAgFNBQckbWF0Y2gwAAQDCQAAAgIBTAUHJG1hdGNoMAAFAwkAAAICAlhMBQckbWF0Y2gwAAYJAAIBAhpPbmx5IFMsIE0sIEwsIFhMIGNhbiBtZXJnZQMJAQIhPQIFCmluZnJhTGV2ZWwFCHJlcUxldmVsCQACAQIiQWxsIGxhbmRzIHNob3VsZCBiZSBtYXhlZCB0byBtZXJnZQQHbGFuZE51bQkAkQMCBQFkBQpyZWNMYW5kTnVtBA10ZXJyYWluQ291bnRzCQENY291bnRUZXJyYWlucwEJAJEDAgUBZAULcmVjVGVycmFpbnMECWRlbHRhVGltZQkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQlzYXZlZFRpbWUDCQBmAgAABQlkZWx0YVRpbWUJAAIBCQCsAgIJAKwCAgkArAICAiZTYXZlZCB0aW1lc3RhbXAgaXMgaW4gZnV0dXJlLCBzYXZlZCA9IAkApAMBBQlzYXZlZFRpbWUCDCwgY3VycmVudCA9IAkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQkBDGFwcGx5Qm9udXNlcwIFC2xhbmRBc3NldElkBQZwaWVjZXMECWxhbmRJbmRleAkAaQIFBnBpZWNlcwUFU1NJWkUEBWJwUmVzCQEGYWRkUmVzBQkAtQkCCAUDYWNjAl80AgFfBQ10ZXJyYWluQ291bnRzBQlkZWx0YVRpbWUFCWxhbmRJbmRleAUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQQFcHJvcHMJARl1cGRhdGVQcm9wb3J0aW9uc0ludGVybmFsBAgFA2FjYwJfNgUNdGVycmFpbkNvdW50cwUJbGFuZEluZGV4AP///////////wEEBmNQcm9wcwkBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwECAUDYWNjA18xMAUNdGVycmFpbkNvdW50cwUJbGFuZEluZGV4AP///////////wEEC3N1bVRlcnJhaW5zCQEZdXBkYXRlUHJvcG9ydGlvbnNJbnRlcm5hbAQIBQNhY2MCXzkFDXRlcnJhaW5Db3VudHMFCWxhbmRJbmRleAABBAVsYW5kcwgFA2FjYwJfNwQDaWR4CQDPCAIFBWxhbmRzBQtsYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEFA2lkeAkAAgEJAKwCAgIgWW91ciBzdGFrZWQgbGFuZHMgZG9uJ3QgY29udGFpbiAFC2xhbmRBc3NldElkBAljdXN0b21LZXkJARprZXlMYW5kQXNzZXRJZFRvQ3VzdG9tTmFtZQEFC2xhbmRBc3NldElkBApjdXN0b21OYW1lCQELdmFsdWVPckVsc2UCCQCiCAEFCWN1c3RvbUtleQIACQCcCgoFCHNpemVzT3V0BQRhcnRzBQljb250aW5lbnQFBWJwUmVzCQDOCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCAUDYWNjAl81CQELRGVsZXRlRW50cnkBCQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkxBTkRQUkVGSVgFC2xhbmRBc3NldElkBQRhZGRyCQELRGVsZXRlRW50cnkBCQEQa2V5TGFuZFRvQXNzZXRJZAEFB2xhbmROdW0JAQtEZWxldGVFbnRyeQEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIFC2xhbmRBc3NldElkBQRhZGRyCQELRGVsZXRlRW50cnkBCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQkBEWtleUxhbmROdW1Ub093bmVyAQUHbGFuZE51bQkBC0RlbGV0ZUVudHJ5AQkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBBQljdXN0b21LZXkJAQRCdXJuAgkA2QQBBQtsYW5kQXNzZXRJZAABAwkBAiE9AgUKY3VzdG9tTmFtZQIACQDMCAIJAQtEZWxldGVFbnRyeQEJARprZXlMYW5kQ3VzdG9tTmFtZVRvQXNzZXRJZAEFCmN1c3RvbU5hbWUFA25pbAUDbmlsBQVwcm9wcwkA0QgCBQVsYW5kcwkBBXZhbHVlAQUDaWR4CQBkAggFA2FjYwJfOAUGcGllY2VzBQtzdW1UZXJyYWlucwUGY1Byb3BzBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQIcHJvcExpc3QJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBCQERa2V5UmVzUHJvcG9ydGlvbnMAAgswXzBfMF8wXzBfMAIBXwQIbGFuZHNLZXkJARVrZXlTdGFrZWRMYW5kc0J5T3duZXIBBQRhZGRyBAhsYW5kc1N0cgkAoggBBQhsYW5kc0tleQQHbGFuZHNJbgMJAQlpc0RlZmluZWQBBQhsYW5kc1N0cgkAvQkCCQEFdmFsdWUBBQhsYW5kc1N0cgIBXwUDbmlsBAVjb250MAkAkQMCCQC1CQIICQEFdmFsdWUBCQDsBwEJANkEAQkAkQMCBQxsYW5kQXNzZXRJZHMAAAtkZXNjcmlwdGlvbgIBXwUMcmVjQ29udGluZW50BAljb250UHJvcHMJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBCQEWa2V5UmVzVHlwZXNCeUNvbnRpbmVudAEFBWNvbnQwAgswXzBfMF8wXzBfMAIBXwQBcgoAAiRsBQxsYW5kQXNzZXRJZHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCcCgoFB2Zvcm11bGEAAAIACQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwUDbmlsBQhwcm9wTGlzdAUHbGFuZHNJbgAACQC1CQICCzBfMF8wXzBfMF8wAgFfBQljb250UHJvcHMKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCmNoZWNrTWVyZ2UCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDUJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFBAljb250aW5lbnQIBQFyAl8zBAxjb250aW5lbnRJZHgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAzwgCBQpjb250aW5lbnRzBQljb250aW5lbnQJAKwCAgITVW5rbm93biBjb250aW5lbnQ6IAUJY29udGluZW50BAh0ZXJyYWlucwkBE2dlblRlcnJhaW5zRm9yTWVyZ2UCCAUBcgJfOQkAaQIJAQ9udW1QaWVjZXNCeVNpemUBBQtuZXdMYW5kU2l6ZQUFU1NJWkUEB2ZyZWVOdW0JAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBEmtleU5leHRGcmVlTGFuZE51bQAJAGQCBQ9QUkVTQUxFTlVNTEFORFMAAQQKbmV3TGFuZE51bQkApAMBBQdmcmVlTnVtBAVpc3N1ZQkAwggFCQEHbmZ0TmFtZQIFCm5ld0xhbmROdW0FC25ld0xhbmRTaXplCQC5CQIJAMwIAgUKbmV3TGFuZE51bQkAzAgCBQtuZXdMYW5kU2l6ZQkAzAgCBQh0ZXJyYWlucwkAzAgCBQljb250aW5lbnQFA25pbAIBXwABAAAHBAdhc3NldElkCQC4CAEFBWlzc3VlBA5uZXdMYW5kQXNzZXRJZAkA2AQBBQdhc3NldElkBAZuZXdNYXQJALkJAgkBEXN1YnRyYWN0TWF0ZXJpYWxzAwkAZgIFB25lZWRNYXQAAAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwUHbmVlZE1hdAIBXwQJcGllY2VzS2V5CQEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEFBGFkZHIEDHN0YWtlZFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlwaWVjZXNLZXkAAAkAlAoCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCAUBcgJfNQMJAGYCCQCQAwEIBQFyAl83AAAJAQtTdHJpbmdFbnRyeQIFCGxhbmRzS2V5CQC7CQIIBQFyAl83AgFfCQELRGVsZXRlRW50cnkBBQhsYW5kc0tleQkBDEludGVnZXJFbnRyeQIFCXBpZWNlc0tleQMJAGYCCAUBcgJfOAUMc3Rha2VkUGllY2VzAAAJAGUCBQxzdGFrZWRQaWVjZXMIBQFyAl84CQEMSW50ZWdlckVudHJ5AgkBEmtleU5leHRGcmVlTGFuZE51bQAJAGQCBQdmcmVlTnVtAAEFBWlzc3VlCQELU3RyaW5nRW50cnkCCQEQa2V5TGFuZFRvQXNzZXRJZAEFCm5ld0xhbmROdW0FDm5ld0xhbmRBc3NldElkCQELU3RyaW5nRW50cnkCCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQUObmV3TGFuZEFzc2V0SWQFBGFkZHIJAQtTdHJpbmdFbnRyeQIJARFrZXlMYW5kTnVtVG9Pd25lcgEFCm5ld0xhbmROdW0FBGFkZHIJAQxJbnRlZ2VyRW50cnkCCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQ5uZXdMYW5kQXNzZXRJZAgFAXICXzIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFDm5ld0xhbmRBc3NldElkBQhuZXdMZXZlbAkBDEludGVnZXJFbnRyeQIJAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICBQ5uZXdMYW5kQXNzZXRJZAUEYWRkcgUIbmV3TGV2ZWwJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCAUBcgJfNAkAzAgCBQZuZXdNYXQJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwCAToJAQtTdHJpbmdFbnRyeQIJARFrZXlSZXNQcm9wb3J0aW9ucwAJALkJAggFAXICXzYCAV8JAQtTdHJpbmdFbnRyeQIJARZrZXlSZXNUeXBlc0J5Q29udGluZW50AQUJY29udGluZW50CQC5CQIIBQFyA18xMAIBXwkBC1N0cmluZ0VudHJ5AgkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkCQC5CQIJAMwIAgUJY29udGluZW50CQDMCAICAUwJAMwIAgUObmV3TGFuZEFzc2V0SWQFA25pbAIBXwkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUEYWRkcgABBQdhc3NldElkBQ5uZXdMYW5kQXNzZXRJZAEDczJtAgRhZGRyDGxhbmRBc3NldElkcwkBDW1lcmdlSW50ZXJuYWwGAgFNAAMCBFNTU1MFBGFkZHIFDGxhbmRBc3NldElkcwAAAQNtMmwCBGFkZHIMbGFuZEFzc2V0SWRzCQENbWVyZ2VJbnRlcm5hbAYCAUwABAIDU01NBQRhZGRyBQxsYW5kQXNzZXRJZHMJAGgCBRFJbmZyYVVwZ3JhZGVDb3N0UwAEAQRsMnhsAgRhZGRyDGxhbmRBc3NldElkcwkBDW1lcmdlSW50ZXJuYWwGAgJYTAAFAgVTU1NNTAUEYWRkcgUMbGFuZEFzc2V0SWRzCQBoAgURSW5mcmFVcGdyYWRlQ29zdFMALwEGeGwyeHhsAgRhZGRyDGxhbmRBc3NldElkcwkBDW1lcmdlSW50ZXJuYWwGAgNYWEwABgIDTFhMBQRhZGRyBQxsYW5kQXNzZXRJZHMJAGgCBRFJbmZyYVVwZ3JhZGVDb3N0UwA2AQttZXJnZUNvbW1vbgIEYWRkcgxsYW5kQXNzZXRJZHMEByRtYXRjaDAJAJADAQUMbGFuZEFzc2V0SWRzAwkAAAIABAUHJG1hdGNoMAkBA3MybQIFBGFkZHIFDGxhbmRBc3NldElkcwMJAAACAAMFByRtYXRjaDAJAQNtMmwCBQRhZGRyBQxsYW5kQXNzZXRJZHMDCQAAAgAFBQckbWF0Y2gwCQEEbDJ4bAIFBGFkZHIFDGxhbmRBc3NldElkcwMJAAACAAIFByRtYXRjaDAJAQZ4bDJ4eGwCBQRhZGRyBQxsYW5kQXNzZXRJZHMJAAIBAg1Vbmtub3duIG1lcmdlAQZwcm9sb2cBAWkDAwkBAiE9AggFAWkMb3JpZ2luQ2FsbGVyBQxyZXN0Q29udHJhY3QJAQt2YWx1ZU9yRWxzZQIJAKAIAQkBCmtleUJsb2NrZWQABwcJAAIBAh9Db250cmFjdHMgYXJlIHVuZGVyIG1haW50ZW5hbmNlCQELU3RyaW5nRW50cnkCCQERa2V5TGFzdFR4SWRCeVVzZXIBCQClCAEIBQFpDG9yaWdpbkNhbGxlcgkA2AQBCAUBaQ10cmFuc2FjdGlvbklkKgFpAQ1jb25zdHJ1Y3RvclYxAQhyZXN0QWRkcgMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEVBlcm1pc3Npb24gZGVuaWVkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ5rZXlSZXN0QWRkcmVzcwAFCHJlc3RBZGRyBQNuaWwBaQEKc2V0QmxvY2tlZAEJaXNCbG9ja2VkAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRcGVybWlzc2lvbiBkZW5pZWQJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQprZXlCbG9ja2VkAAUJaXNCbG9ja2VkBQNuaWwBaQEJc3Rha2VMYW5kAAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAdhc3NldElkCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyAwkBAiE9AggFA3BtdAZhbW91bnQAAQkAAgEJAKwCAgkArAICAgRORlQgBQpMQU5EUFJFRklYAiQgdG9rZW4gc2hvdWxkIGJlIGF0dGFjaGVkIGFzIHBheW1lbnQEBWFzc2V0CQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQDCQECIT0CCAUFYXNzZXQGaXNzdWVyBQR0aGlzCQACAQIXVW5rbm93biBpc3N1ZXIgb2YgdG9rZW4DCQEBIQEJAQhjb250YWlucwIIBQVhc3NldARuYW1lBQpMQU5EUFJFRklYCQACAQkArAICCQCsAgICCU9ubHkgTkZUIAUKTEFORFBSRUZJWAIUIHRva2VucyBhcmUgYWNjZXB0ZWQEC2xhbmROdW1TaXplCQCwAgIIBQVhc3NldARuYW1lAAQEB2xhbmROdW0DCQEIY29udGFpbnMCBQtsYW5kTnVtU2l6ZQIDWFhMCQCzAgIFC2xhbmROdW1TaXplAAMDCQEIY29udGFpbnMCBQtsYW5kTnVtU2l6ZQICWEwJALMCAgULbGFuZE51bVNpemUAAgkAswICBQtsYW5kTnVtU2l6ZQABAwkBASEBCQEJaXNEZWZpbmVkAQkAtgkBBQdsYW5kTnVtCQACAQkArAICAh5DYW5ub3QgcGFyc2UgbGFuZCBudW1iZXIgZnJvbSAIBQVhc3NldARuYW1lBAtsYW5kQXNzZXRJZAkA2AQBBQdhc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAwkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQISIGlzIGFscmVhZHkgc3Rha2VkBAFkCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIFAWQFC3JlY1RlcnJhaW5zBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIFAWQFC3JlY0xhbmRTaXplBAlsYW5kSW5kZXgJAGkCBQZwaWVjZXMFBVNTSVpFBAVwcm9wcwkBEXVwZGF0ZVByb3BvcnRpb25zAwUNdGVycmFpbkNvdW50cwUJbGFuZEluZGV4AAEEDHJlc0J5Q29udEtleQkBFmtleVJlc1R5cGVzQnlDb250aW5lbnQBCQCRAwIFAWQFDHJlY0NvbnRpbmVudAQJY29udFByb3BzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUMcmVzQnlDb250S2V5AgswXzBfMF8wXzBfMAIBXwQQdXBkYXRlZENvbnRQcm9wcwkAuQkCCQEZdXBkYXRlUHJvcG9ydGlvbnNJbnRlcm5hbAQFCWNvbnRQcm9wcwUNdGVycmFpbkNvdW50cwUJbGFuZEluZGV4AAECAV8ECGxhbmRzS2V5CQEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQUHYWRkcmVzcwQIbGFuZHNTdHIJAKIIAQUIbGFuZHNLZXkEBWxhbmRzAwkBCWlzRGVmaW5lZAEFCGxhbmRzU3RyCQC9CQIJAQV2YWx1ZQEFCGxhbmRzU3RyAgFfBQNuaWwDCQEPY29udGFpbnNFbGVtZW50AgUFbGFuZHMFC2xhbmRBc3NldElkCQACAQkArAICAiJZb3VyIHN0YWtlZCBsYW5kcyBhbHJlYWR5IGNvbnRhaW4gBQtsYW5kQXNzZXRJZAMJAGcCCQCQAwEFBWxhbmRzBRhNQVhfTEFORFNfU1RBS0VEX0JZX1VTRVIJAAIBCQCsAgIJAKwCAgIZWW91ciBhbHJlYWR5IHN0YWtlZCBtYXggKAkApAMBBRhNQVhfTEFORFNfU1RBS0VEX0JZX1VTRVICBykgbGFuZHMECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAlwaWVjZXNLZXkJARZrZXlTdGFrZWRQaWVjZXNCeU93bmVyAQUHYWRkcmVzcwQJb2xkUGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEFCXBpZWNlc0tleQAABAl3bGdSZXN1bHQJAPwHBAULd2xnQ29udHJhY3QCEm9uU3Rha2VVbnN0YWtlTGFuZAkAzAgCBQdhZGRyZXNzBQNuaWwFA25pbAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQd0aW1lS2V5CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBC1N0cmluZ0VudHJ5AgUIbGFuZHNLZXkJALsJAgkAzQgCBQVsYW5kcwULbGFuZEFzc2V0SWQCAV8JAMwIAgkBDEludGVnZXJFbnRyeQIFCXBpZWNlc0tleQkAZAIFCW9sZFBpZWNlcwUGcGllY2VzCQDMCAIJAQtTdHJpbmdFbnRyeQIJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5TGFuZE51bVRvT3duZXIBBQdsYW5kTnVtBQdhZGRyZXNzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAgULbGFuZEFzc2V0SWQFB2FkZHJlc3MFCmluZnJhTGV2ZWwJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleVJlc1Byb3BvcnRpb25zAAUFcHJvcHMJAMwIAgkBC1N0cmluZ0VudHJ5AgUMcmVzQnlDb250S2V5BRB1cGRhdGVkQ29udFByb3BzCQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsBQl3bGdSZXN1bHQBaQELdW5zdGFrZUxhbmQBDWxhbmRBc3NldElkSW4EDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQZjYWxsZXIEAWMJARRjaGVja0NsYWltQ29uZGl0aW9ucwMFBGFkZHIFDWNsYWltTW9kZUR1Y2sFDWxhbmRBc3NldElkSW4EC2xhbmRBc3NldElkCAUBYwJfMgQBZAgFAWMCXzMECGxhbmRzS2V5CQEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQUEYWRkcgQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIFAWQFC3JlY1RlcnJhaW5zBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIFAWQFC3JlY0xhbmRTaXplBAlsYW5kSW5kZXgJAGkCBQZwaWVjZXMFBVNTSVpFBAVwcm9wcwkBEXVwZGF0ZVByb3BvcnRpb25zAwUNdGVycmFpbkNvdW50cwUJbGFuZEluZGV4AP///////////wEEDHJlc0J5Q29udEtleQkBFmtleVJlc1R5cGVzQnlDb250aW5lbnQBCQCRAwIFAWQFDHJlY0NvbnRpbmVudAQJY29udFByb3BzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUMcmVzQnlDb250S2V5AgswXzBfMF8wXzBfMAIBXwQQdXBkYXRlZENvbnRQcm9wcwkAuQkCCQEZdXBkYXRlUHJvcG9ydGlvbnNJbnRlcm5hbAQFCWNvbnRQcm9wcwUNdGVycmFpbkNvdW50cwUJbGFuZEluZGV4AP///////////wECAV8EC2NsYWltUmVzdWx0CQEIY2xhaW1BbGwEBQRhZGRyBQtsYW5kQXNzZXRJZAUGcGllY2VzBQ1jbGFpbU1vZGVEdWNrBAVsYW5kcwkAvQkCCQELdmFsdWVPckVsc2UCCQCiCAEFCGxhbmRzS2V5AgACAV8EA2lkeAkAzwgCBQVsYW5kcwULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBBQNpZHgJAAIBCQCsAgICIFlvdXIgc3Rha2VkIGxhbmRzIGRvbid0IGNvbnRhaW4gBQtsYW5kQXNzZXRJZAQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQOZ292UmVsZWFzZVRpbWUJAQt2YWx1ZU9yRWxzZQIJAJoIAgULZ292Q29udHJhY3QJARVrZXlVc2VyR3dsUmVsZWFzZVRpbWUBBQRhZGRyAAADCQBnAgUOZ292UmVsZWFzZVRpbWUFA25vdwkAAgEJAKwCAgI5WW91ciBnV0wgYXJlIHRha2luZyBwYXJ0IGluIHZvdGluZywgY2Fubm90IHVuc3Rha2UgdW50aWwgCQCkAwEFDmdvdlJlbGVhc2VUaW1lBA5hcmJSZWxlYXNlVGltZQkAZAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgULd2xnQ29udHJhY3QJARRrZXlMYXN0QXJiVGltZUJ5VXNlcgEFBGFkZHIAAAUOYXJiaXRyYWdlRGVsYXkDCQBmAgUOYXJiUmVsZWFzZVRpbWUFA25vdwkAAgEJAKwCAgI/WW91ciBzdGFrZWQgbGFuZHMgdG9vayBwYXJ0IGluIGFyYml0cmFnZSwgY2Fubm90IHVuc3Rha2UgdW50aWwgCQCkAwEFDmFyYlJlbGVhc2VUaW1lBAlwaWVjZXNLZXkJARZrZXlTdGFrZWRQaWVjZXNCeU93bmVyAQUEYWRkcgQMc3Rha2VkUGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEFCXBpZWNlc0tleQAABAluZXdQaWVjZXMDCQBmAgUGcGllY2VzBQxzdGFrZWRQaWVjZXMAAAkAZQIFDHN0YWtlZFBpZWNlcwUGcGllY2VzBAl3bGdSZXN1bHQJAPwHBAULd2xnQ29udHJhY3QCEm9uU3Rha2VVbnN0YWtlTGFuZAkAzAgCBQRhZGRyBQNuaWwFA25pbAkAlAoCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABCQDZBAEFC2xhbmRBc3NldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYBQtsYW5kQXNzZXRJZAUEYWRkcgkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5UmVzUHJvcG9ydGlvbnMABQVwcm9wcwkAzAgCCQELU3RyaW5nRW50cnkCBQxyZXNCeUNvbnRLZXkFEHVwZGF0ZWRDb250UHJvcHMJAMwIAgkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al8yCQC5CQIIBQtjbGFpbVJlc3VsdAJfMwIBOgkAzAgCAwkAZgIJAJADAQUFbGFuZHMAAQkBC1N0cmluZ0VudHJ5AgUIbGFuZHNLZXkJALsJAgkA0QgCBQVsYW5kcwkBBXZhbHVlAQUDaWR4AgFfCQELRGVsZXRlRW50cnkBBQhsYW5kc0tleQkAzAgCCQEMSW50ZWdlckVudHJ5AgUJcGllY2VzS2V5BQluZXdQaWVjZXMJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwFCXdsZ1Jlc3VsdAFpAQlzdGFrZUR1Y2sABAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAEB2Fzc2V0SWQJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIDCQECIT0CCAUDcG10BmFtb3VudAABCQACAQkArAICCQCsAgICBE5GVCAFCkRVQ0tQUkVGSVgCJCB0b2tlbiBzaG91bGQgYmUgYXR0YWNoZWQgYXMgcGF5bWVudAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQUHYXNzZXRJZAMDCQECIT0CCAUFYXNzZXQGaXNzdWVyBQ1pbmN1YmF0b3JBZGRyCQECIT0CCAUFYXNzZXQGaXNzdWVyBQticmVlZGVyQWRkcgcJAAIBCQCsAgIJAKwCAgISVW5rbm93biBpc3N1ZXIgb2YgBQpEVUNLUFJFRklYAgYgdG9rZW4DCQEBIQEJAQhjb250YWlucwIIBQVhc3NldARuYW1lBQpEVUNLUFJFRklYCQACAQkArAICCQCsAgICCU9ubHkgTkZUIAUKRFVDS1BSRUZJWAIUIHRva2VucyBhcmUgYWNjZXB0ZWQECmFzc2V0SWRTdHIJANgEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQphc3NldElkU3RyAwkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQISIGlzIGFscmVhZHkgc3Rha2VkAwkBCWlzRGVmaW5lZAEJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUHYWRkcmVzcwkAAgEJAKwCAgIdWW91IGFscmVhZHkgc3Rha2VkIG9uZSBkdWNrOiAIBQVhc3NldARuYW1lAwkBD2NoZWNrVG91cm5hbWVudAEFCmFzc2V0SWRTdHIJAAIBAhlzdGFrZUR1Y2tfY2hlY2tUb3VybmFtZW50BAZsb2NLZXkJAQ9rZXlEdWNrTG9jYXRpb24BBQphc3NldElkU3RyBAhsb2NhdGlvbgkAoggBBQZsb2NLZXkEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQphc3NldElkU3RyBAhiYWNrcGFjawkAoggBBQVicEtleQQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFCmFzc2V0SWRTdHIEBW1heEhQCQEJbWF4SGVhbHRoAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMa2V5RHVja0xldmVsAQUKYXNzZXRJZFN0cgAABAljdXJIZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoBQVtYXhIUAkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQd0aW1lS2V5CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpEVUNLUFJFRklYCQDYBAEFB2Fzc2V0SWQFB2FkZHJlc3MIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQtTdHJpbmdFbnRyeQIJARBrZXlEdWNrSWRUb093bmVyAQUKYXNzZXRJZFN0cgUHYWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQdhZGRyZXNzBQphc3NldElkU3RyBQNuaWwDCQEJaXNEZWZpbmVkAQUIbG9jYXRpb24FA25pbAkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBmxvY0tleQUPREVGQVVMVExPQ0FUSU9OBQNuaWwDCQEJaXNEZWZpbmVkAQUIYmFja3BhY2sFA25pbAkAzQgCCQDNCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkCGjA6MF8wXzBfMF8wXzA6MF8wXzBfMF8wXzA6BQNuaWwJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgFCWN1ckhlYWx0aAUMcHJvbG9nQWN0aW9uAWkBC3Vuc3Rha2VEdWNrAQphc3NldElkU3RyBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEB2Fzc2V0SWQJANkEAQUKYXNzZXRJZFN0cgQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIEBWFzc2V0CQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQUKYXNzZXRJZFN0cgMJAQEhAQkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQDCQEBIQEJAQlpc0RlZmluZWQBCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFB2FkZHJlc3MJAAIBCQCsAgIJAKwCAgIJVGhlIGR1Y2sgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBEGtleUR1Y2tJZFRvT3duZXIBBQphc3NldElkU3RyCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQdhZGRyZXNzCQACAQIXU3Rha2VkIE5GVCBpcyBub3QgeW91cnMDCQEPY2hlY2tUb3VybmFtZW50AQUKYXNzZXRJZFN0cgkAAgECG3Vuc3Rha2VEdWNrX2NoZWNrVG91cm5hbWVudAQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFCmFzc2V0SWRTdHIEBW1heEhQCQEJbWF4SGVhbHRoAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMa2V5RHVja0xldmVsAQUKYXNzZXRJZFN0cgAABAZoZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoBQVtYXhIUAMJAGYCBQVtYXhIUAUGaGVhbHRoCQACAQkArAICCQCsAgICGVBsZWFzZSBoZWFsIHlvdXIgZHVjayB0byAJAKQDAQUFbWF4SFACE2hwIGJlZm9yZSB1bnN0YWtpbmcJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEFB2Fzc2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQUHdGltZUtleQkAzAgCCQELRGVsZXRlRW50cnkBBQlrZXlIZWFsdGgJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBD2tleUR1Y2tMb2NhdGlvbgEFCmFzc2V0SWRTdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBEGtleUR1Y2tJZFRvT3duZXIBBQphc3NldElkU3RyCQDMCAIJAQtEZWxldGVFbnRyeQEJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKRFVDS1BSRUZJWAUKYXNzZXRJZFN0cgUHYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQdhZGRyZXNzCQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsAWkBCGNsYWltUmVzAgZhbW91bnQObGFuZEFzc2V0SWRTdHIEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEBnJlc3VsdAkBEGNsYWltUmVzSW50ZXJuYWwEBQRhZGRyBQZhbW91bnQFDWNsYWltTW9kZUR1Y2sFDmxhbmRBc3NldElkU3RyBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQJAJQKAgkAzQgCCQDNCAIJAM0IAgkAzggCCAUGcmVzdWx0Al8xCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQJAGsDBQd4cENsYWltBQZhbW91bnQFBU1VTFQ4Al8xCQELU3RyaW5nRW50cnkCCAUGcmVzdWx0Al8yCQC5CQIIBQZyZXN1bHQCXzMCAToJAQtTdHJpbmdFbnRyeQIIBQZyZXN1bHQCXzQJALkJAggFBnJlc3VsdAJfNQIBOgUMcHJvbG9nQWN0aW9uCQCRAwIIBQZyZXN1bHQCXzMFCGJwSWR4UmVzAWkBDGNsYWltUmVzVG9XSAIGYW1vdW50DmxhbmRBc3NldElkU3RyBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAZyZXN1bHQJARBjbGFpbVJlc0ludGVybmFsBAUEYWRkcgUGYW1vdW50BQtjbGFpbU1vZGVXaAUObGFuZEFzc2V0SWRTdHIJAJQKAgkAzQgCCQDNCAIJAM0IAgkAzggCCAUGcmVzdWx0Al8xCAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCBQRhZGRyCQBrAwUHeHBDbGFpbQUGYW1vdW50BQVNVUxUOAJfMQkBC1N0cmluZ0VudHJ5AggFBnJlc3VsdAJfMgkAuQkCCAUGcmVzdWx0Al8zAgE6CQELU3RyaW5nRW50cnkCCAUGcmVzdWx0Al80CQC5CQIIBQZyZXN1bHQCXzUCAToFDHByb2xvZ0FjdGlvbgkAkQMCCAUGcmVzdWx0Al81BQh3aElkeFJlcwFpAQZmbGlnaHQCB21lc3NhZ2UDc2lnBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQECHVzZXJBZGRyCQClCAEIBQFpBmNhbGxlcgQBZgkBDGZsaWdodENvbW1vbgMFCHVzZXJBZGRyBQdtZXNzYWdlBQNzaWcEBW5ld0hQCAUBZgJfMQQLZHVja0Fzc2V0SWQIBQFmAl8yBAZsb2NLZXkJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQUGbG9jS2V5BQ9ERUZBVUxUTE9DQVRJT04EC25ld0xvY2F0aW9uCAUBZgJfNAMJAAACBQtuZXdMb2NhdGlvbgULY3VyTG9jYXRpb24JAAIBAiJZb3UgY2FuJ3QgZmx5IHRvIHRoZSBzYW1lIGxvY2F0aW9uBAZuZXdMb2MJALUJAgULbmV3TG9jYXRpb24CAV8EBmlzVG91cgkAAAIJAJEDAgUGbmV3TG9jBQpsb2NJZHhUeXBlAgFUBAVlcUtleQkBEGtleUR1Y2tFcXVpcG1lbnQBBQtkdWNrQXNzZXRJZAQJY3VycmVudEVxCQELdmFsdWVPckVsc2UCCQCiCAEFBWVxS2V5AhcsOyxfLDssXyw7LF8sOyxfLDssXyw7LAQNJHQwNjU5ODE2NjA3OAkBEXN1YnRyYWN0RXF1aXBtZW50AgUJY3VycmVudEVxCAUBZgJfNQQFbmV3RXEIBQ0kdDA2NTk4MTY2MDc4Al8xBA9zaG91bGRaZXJvQnVmZnMIBQ0kdDA2NTk4MTY2MDc4Al8yBAlsb2NUb1NhdmUDCQEBIQEJAQ5pc0luVG91cm5hbWVudAIFEnRvdXJuYW1lbnRDb250cmFjdAULY3VyTG9jYXRpb24DBQZpc1RvdXIJAAIBCQCsAgIJAKwCAgkArAICAhZDaGVhdCBhdHRlbXB0OiBvbGRMb2M9BQtjdXJMb2NhdGlvbgIJLCBuZXdMb2M9BQtuZXdMb2NhdGlvbgMJAGYCBQVuZXdIUAAABQtuZXdMb2NhdGlvbgULY3VyTG9jYXRpb24DCQEBIQEJAQ5pc0luVG91cm5hbWVudAIFEnRvdXJuYW1lbnRDb250cmFjdAULbmV3TG9jYXRpb24JAAIBAipZb3VyIGR1Y2sgaXMgdGFraW5nIHBhcnQgaW4gdGhlIHRvdXJuYW1lbnQEBXNjb3JlCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGbmV3TG9jBQhsb2NJZHhJZAQGY3VyTG9jCQC1CQIFC2N1ckxvY2F0aW9uAgFfBAZsYXN0SWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUSdG91cm5hbWVudENvbnRyYWN0BQ1sYXN0VG91cklkS2V5AAADCQECIT0CBQVzY29yZQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZjdXJMb2MFCGxvY0lkeElkAAEJAAIBCQCsAgIJAKwCAgkArAICAhZDaGVhdCBhdHRlbXB0OiBvbGRMb2M9BQtjdXJMb2NhdGlvbgIJLCBuZXdMb2M9BQtuZXdMb2NhdGlvbgMJAGYCBQVuZXdIUAAABAlsb2NhbEJlc3QJAQt2YWx1ZU9yRWxzZQIJAJoIAgUSdG91cm5hbWVudENvbnRyYWN0CQEaa2V5QmVzdFJlc3VsdEJ5VG91ckFuZER1Y2sCBQZsYXN0SWQFC2R1Y2tBc3NldElkAAAECHVwZExvY2FsAwkAZgIFBXNjb3JlBQlsb2NhbEJlc3QJAPwHBAUSdG91cm5hbWVudENvbnRyYWN0Ag5zYXZlRHVja1Jlc3VsdAkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQVzY29yZQUDbmlsBQNuaWwFBHVuaXQDCQAAAgUIdXBkTG9jYWwFCHVwZExvY2FsBQtuZXdMb2NhdGlvbgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgULY3VyTG9jYXRpb24JAJQKAgkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBmxvY0tleQUJbG9jVG9TYXZlCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWVxS2V5BQVuZXdFcQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAUFbmV3SFAJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwDBQ9zaG91bGRaZXJvQnVmZnMJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleUR1Y2tCdWZmcwEFC2R1Y2tBc3NldElkAgkwXzBfMF8wXzAFA25pbAkAzggCBQNuaWwICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAMJAGYCBQVuZXdIUAAABQ94cFN1Y2Nlc3NGbGlnaHQFDHhwRmFpbEZsaWdodAJfMQgFAWYCXzMBaQEEaGVhbAMKcXVhbnRpdHlMMQpxdWFudGl0eUwyCnF1YW50aXR5TDMEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDAwMJAGYCAAAFCnF1YW50aXR5TDEGCQBmAgAABQpxdWFudGl0eUwyBgkAZgIAAAUKcXVhbnRpdHlMMwkAAgECG1F1YW50aXR5IGNhbm5vdCBiZSBuZWdhdGl2ZQQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAMJAQ9jaGVja1RvdXJuYW1lbnQBBQtkdWNrQXNzZXRJZAkAAgECFGhlYWxfY2hlY2tUb3VybmFtZW50BANxdHMJAMwIAgUKcXVhbnRpdHlMMQkAzAgCBQpxdWFudGl0eUwyCQDMCAIFCnF1YW50aXR5TDMFA25pbAQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAVtYXhIUAkBCW1heEhlYWx0aAEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDGtleUR1Y2tMZXZlbAEFC2R1Y2tBc3NldElkAAAECW9sZEhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQAwkAZwIFCW9sZEhlYWx0aAUFbWF4SFAJAAIBCQCsAgIJAKwCAgIPSFAgc2hvdWxkIGJlIDwg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Y3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQIaQWxsb3dlZCBVU0RUIHBheW1lbnQgb25seSEEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQDCQEPY2hlY2tUb3VybmFtZW50AQULZHVja0Fzc2V0SWQJAAIBAhZoZWFsRVNfY2hlY2tUb3VybmFtZW50BAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQEBW1heEhQCQEJbWF4SGVhbHRoAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMa2V5RHVja0xldmVsAQULZHVja0Fzc2V0SWQAAAQJb2xkSGVhbHRoCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aAUFbWF4SFADCQBmAgUJb2xkSGVhbHRoAAAJAAIBAihIUCBzaG91bGQgYmUgMCB0byBjYWxsIEVtZXJnZW5jeSBTZXJ2aWNlBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQIcHJvZExpc3QDCQAAAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgAFA25pbAkAvAkCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAV8EDW1lZEtpdEFtb3VudDEDCQBmAgkAkAMBBQhwcm9kTGlzdAAACQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvZExpc3QAAAAABA1tZWRLaXRBbW91bnQyAwkAZgIJAJADAQUIcHJvZExpc3QAAQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb2RMaXN0AAEAAAQNbWVkS2l0QW1vdW50MwMJAGYCCQCQAwEFCHByb2RMaXN0AAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhwcm9kTGlzdAACAAADAwMJAGYCBQ1tZWRLaXRBbW91bnQxAAAGCQBmAgUNbWVkS2l0QW1vdW50MgAABgkAZgIFDW1lZEtpdEFtb3VudDMAAAkAAgECH1lvdSBoYXZlIHRvIHVzZSBvd24gTWVkaWNhbCBLaXQECGV4aXN0U3RyCQCdCAIFD2Vjb25vbXlDb250cmFjdAkBDmtleUVzV2FyZWhvdXNlAAQMZXhpc3RBbW91bnRzAwkBCWlzRGVmaW5lZAEFCGV4aXN0U3RyCQC8CQIJAQV2YWx1ZQEFCGV4aXN0U3RyAgFfBQNuaWwEC2V4aXN0QW1vdW50AwkAZgIJAJADAQUMZXhpc3RBbW91bnRzAAAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQxleGlzdEFtb3VudHMAAAAAAwkAZwIAAAULZXhpc3RBbW91bnQJAAIBAjlUaGVyZSBhcmUgbm8gTWVkaWNhbCBLaXRzIEwxIGF0IEVtZXJnZW5jeSBTZXJ2aWNlIHN0b3JhZ2UECW5ld0hlYWx0aAkAZAIFCW9sZEhlYWx0aAkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4AAACAV8FCnJJZHhFZmZlY3QEBW5ld0VTCQC5CQIJAMwIAgkApAMBCQBlAgULZXhpc3RBbW91bnQAAQkA0QgCBQxleGlzdEFtb3VudHMAAAIBXwQGcmVjaXBlCQC1CQIJAJEDAgUQcHJvZHVjdGlvbk1hdHJpeAAAAgFfBAh0b3RhbE1hdAkBEmdldFJlY2lwZU1hdGVyaWFscwEFBnJlY2lwZQQJc2VsbFByaWNlCQBrAwkAaAIFCHRvdGFsTWF0BQpFU1NFTExDT0VGBRBSRVNPVVJDRVBSSUNFTUlOCQBoAgUFTVVMVDgFDlBST0RVQ1RQS0dTSVpFAwkBAiE9AggFA3BtdAZhbW91bnQFCXNlbGxQcmljZQkAAgEJAKwCAgIbUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgCQCkAwEFCXNlbGxQcmljZQQGcmVzdWx0CQEIYXNTdHJpbmcBCQD8BwQFD2Vjb25vbXlDb250cmFjdAIPdXBkYXRlRXNTdG9yYWdlCQDMCAIFBW5ld0VTBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFC3VzZHRBc3NldElkBQlzZWxsUHJpY2UFA25pbAkAlAoCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aAUJbmV3SGVhbHRoCQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQFCHhwQ2FsbEVTAl8xBQZyZXN1bHQBaQEOdXBkYXRlQmFja3BhY2sCC2R1Y2tBc3NldElkB25ld1BhY2sDCQECIT0CCAUBaQZjYWxsZXIFD2Vjb25vbXlDb250cmFjdAkAAgECEXBlcm1pc3Npb24gZGVuaWVkCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQFB25ld1BhY2sFA25pbAUHbmV3UGFjawFpAQ9jb21taXRGb3JSYW5kb20ABAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpBAtmaW5pc2hCbG9jawkAZAIFBmhlaWdodAULcmFuZG9tRGVsYXkEBGFkZHIJAKUIAQgFAWkGY2FsbGVyCQCUCgIJAM0IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBCWtleUNvbW1pdAEFBGFkZHIFC2ZpbmlzaEJsb2NrBQNuaWwFDHByb2xvZ0FjdGlvbgULZmluaXNoQmxvY2sBaQEKYXdhcmRTTGFuZAEHYWRkcmVzcwMJAQIhPQIIBQFpBmNhbGxlcgUSdG91cm5hbWVudENvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAZyZXN1bHQJARJleHBlZGl0aW9uSW50ZXJuYWwCCQERQGV4dHJOYXRpdmUoMTA2MikBBQdhZGRyZXNzCAUBaQ10cmFuc2FjdGlvbklkCQCUCgIIBQZyZXN1bHQCXzEICAUGcmVzdWx0Al8yAl8xAWkBCGJ1eVNMYW5kAAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAAwkBAiE9AggFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECGkFsbG93ZWQgVVNEVCBwYXltZW50IG9ubHkhAwkBAiE9AggFA3BtdAZhbW91bnQFB0VYUFVTRFQJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQdFWFBVU0RUBAZyZXN1bHQJARJleHBlZGl0aW9uSW50ZXJuYWwCCAUBaQZjYWxsZXIIBQFpDXRyYW5zYWN0aW9uSWQJAJQKAgkAzQgCCQDOCAIJAM0IAggFBnJlc3VsdAJfMQkBDlNjcmlwdFRyYW5zZmVyAwUPZWNvbm9teUNvbnRyYWN0CAUDcG10BmFtb3VudAULdXNkdEFzc2V0SWQICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIJAKUIAQgFAWkGY2FsbGVyBQp4cE5ld1NMYW5kAl8xBQxwcm9sb2dBY3Rpb24ICAUGcmVzdWx0Al8yAl8xAWkBCmV4cGVkaXRpb24CB21lc3NhZ2UDc2lnBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQECHVzZXJBZGRyCQClCAEIBQFpBmNhbGxlcgQBZgkBDGZsaWdodENvbW1vbgMFCHVzZXJBZGRyBQdtZXNzYWdlBQNzaWcEC2R1Y2tBc3NldElkCAUBZgJfMgQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQFbUxpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8EBm5ld01hdAkAuQkCCQERc3VidHJhY3RNYXRlcmlhbHMDBgUFbUxpc3QFDEVYUE1BVEVSSUFMUwIBXwQFZXFLZXkJARBrZXlEdWNrRXF1aXBtZW50AQULZHVja0Fzc2V0SWQECWN1cnJlbnRFcQkBC3ZhbHVlT3JFbHNlAgkAoggBBQVlcUtleQIXLDssXyw7LF8sOyxfLDssXyw7LF8sOywEDSR0MDc0NzM4NzQ4MzUJARFzdWJ0cmFjdEVxdWlwbWVudAIFCWN1cnJlbnRFcQgFAWYCXzUEBW5ld0VxCAUNJHQwNzQ3Mzg3NDgzNQJfMQQPc2hvdWxkWmVyb0J1ZmZzCAUNJHQwNzQ3Mzg3NDgzNQJfMgQBZQkBEmV4cGVkaXRpb25JbnRlcm5hbAIIBQFpBmNhbGxlcggFAWkNdHJhbnNhY3Rpb25JZAQCaWQICAUBZQJfMgJfMQQGcmVzdWx0AwkAZwIAAAgFAWYCXzEJAJUKAwkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoAAAJAMwIAgkBC1N0cmluZ0VudHJ5AgUFZXFLZXkFBW5ld0VxBQNuaWwCAAAACQCVCgMJAM4IAggFAWUCXzEDBQ9zaG91bGRaZXJvQnVmZnMJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleUR1Y2tCdWZmcwEFC2R1Y2tBc3NldElkAgkwXzBfMF8wXzAFA25pbAkAzQgCCQDNCAIJAM0IAgkAzQgCBQNuaWwJAQtTdHJpbmdFbnRyeQIJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAkAuQkCCQDMCAIICAUBZQJfMgJfMgkAzAgCAgFMCQDMCAIFAmlkBQNuaWwCAV8JAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgIBQFmAl8xCQELU3RyaW5nRW50cnkCBQVlcUtleQUFbmV3RXEJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAzAgCBQZuZXdNYXQJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwCAToFAmlkCAUBZgJfMwMJAQ9jaGVja1RvdXJuYW1lbnQBBQtkdWNrQXNzZXRJZAkAAgECGmV4cGVkaXRpb25fY2hlY2tUb3VybmFtZW50CQCUCgIJAM0IAgkAzggCCAUGcmVzdWx0Al8xCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQFCnhwTmV3U0xhbmQCXzEFDHByb2xvZ0FjdGlvbgkAlAoCCAUGcmVzdWx0Al8yCAUGcmVzdWx0Al8zAWkBDHVwZ3JhZGVJbmZyYQELbGFuZEFzc2V0SWQEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQGcmVzdWx0CQENdXBJbmZyYUNvbW1vbgQGCAUBaQZjYWxsZXIAAAULbGFuZEFzc2V0SWQEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQJAJQKAgkAzggCCQDNCAIIBQZyZXN1bHQCXzEFDHByb2xvZ0FjdGlvbggJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkCQBrAwUOeHBVcGdyYWRlSW5mcmEIBQZyZXN1bHQCXzMFBU1VTFQ4Al8xCAUGcmVzdWx0Al8yAWkBEGFjdGl2YXRlQXJ0aWZhY3QCB2FydE5hbWUObGFuZEFzc2V0SWRPcHQEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQZjYWxsZXIEBnJlc3VsdAQHJG1hdGNoMAUHYXJ0TmFtZQMJAAACAgdQUkVTQUxFBQckbWF0Y2gwCQESYWN0aXZhdGVQcmVzYWxlQXJ0AgUEYWRkcgUObGFuZEFzc2V0SWRPcHQDCQAAAgIHT05CT0FSRAUHJG1hdGNoMAkBEmFjdGl2YXRlT25ib2FyZEFydAEFBGFkZHIJAAIBAhBVbmtub3duIGFydGlmYWN0CQDNCAIFBnJlc3VsdAUMcHJvbG9nQWN0aW9uAWkBCm1lcmdlTGFuZHMBDGxhbmRBc3NldElkcwQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAZyZXN1bHQJAQttZXJnZUNvbW1vbgIJAKUIAQgFAWkGY2FsbGVyBQxsYW5kQXNzZXRJZHMJAJQKAgkAzggCCQDNCAIIBQZyZXN1bHQCXzEFDHByb2xvZ0FjdGlvbggJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgkApQgBCAUBaQZjYWxsZXIFB3hwTWVyZ2UCXzEIBQZyZXN1bHQCXzIBaQENY2FyZ29FeGNoYW5nZQIMY2FyZ29MaXN0U3RyC2xhbmRBc3NldElkBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQECmNhcmdvUGFydHMJALwJAgUMY2FyZ29MaXN0U3RyAgE6BARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAggFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQJbGFuZEluZGV4CQBpAgkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAgkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8FC3JlY0xhbmRTaXplBQVTU0laRQQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04EA2xvYwkAtQkCCQEFdmFsdWUBBQtjdXJMb2NhdGlvbgIBXwMJAQIhPQIJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAgFMCQACAQkArAICCQCsAgICFkR1Y2sgbG9jYXRpb24gdHlwZSBpcyAJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAhEsIGJ1dCBzaG91bGQgYmUgTAMJAQIhPQIJAJEDAgUDbG9jBQhsb2NJZHhJZAULbGFuZEFzc2V0SWQJAAIBCQCsAgICG0R1Y2sgc2hvdWxkIGJlIG9uIHRoZSBsYW5kIAULbGFuZEFzc2V0SWQEBXdoS2V5CQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQECWN1cnJlbnRXaAkBDGdldFdhcmVob3VzZQMFBXdoS2V5BQlsYW5kSW5kZXgFCmluZnJhTGV2ZWwEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAZyZXN1bHQJAQltb3ZlU3R1ZmYDBQpjYXJnb1BhcnRzBQljdXJyZW50V2gFC2N1cnJlbnRQYWNrBARsb2Z0CQC1CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeExPRlQCAV8EBWxvZnRPCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkCAUGcmVzdWx0Al83BAVsb2Z0RgkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlCAUGcmVzdWx0Al83CQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC6CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCAUGcmVzdWx0Al80CQDMCAIIBQZyZXN1bHQCXzUJAMwIAggFBnJlc3VsdAJfNgUDbmlsAgE6CQDMCAIJAQtTdHJpbmdFbnRyeQIFBXdoS2V5CQC6CQIJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIIBQZyZXN1bHQCXzEJAMwIAggFBnJlc3VsdAJfMgkAzAgCCAUGcmVzdWx0Al8zCQDMCAIJALkJAgkAzAgCCQCRAwIFBGxvZnQFCXZvbExvY2tlZAkAzAgCCQCkAwEFBWxvZnRPCQDMCAIJAKQDAQUFbG9mdEYJAMwIAgkAkQMCBQRsb2Z0BQh2b2xUb3RhbAUDbmlsAgFfBQNuaWwCAToJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwBaQENc2F2ZVdhcmVob3VzZQIFd2hTdHILbGFuZEFzc2V0SWQDCQECIT0CCAUBaQZjYWxsZXIFD2Vjb25vbXlDb250cmFjdAkAAgECDUFjY2VzcyBkZW5pZWQEBXdoS2V5CQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQEAndoCQC8CQIFBXdoU3RyAgE6AwkBAiE9AgkAkAMBBQJ3aAAFCQACAQIwd2FyZWhvdXNlIHN0cmluZyBzaG91bGQgY29udGFpbiA0ICc6JyBzZXBhcmF0b3JzBAVsb2Z0TAkAkQMCCQC1CQIJAJEDAgUCd2gFCXdoSWR4TE9GVAIBXwUJdm9sTG9ja2VkBAVsb2Z0TwkBF2dldFdhcmVob3VzZU9jY3VwaWVkVm9sAQUCd2gEBWxvZnRUCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBCQCRAwIFAndoBQt3aElkeExldmVscwQFbG9mdEYJAGUCCQBlAgUFbG9mdFQJAQ1wYXJzZUludFZhbHVlAQUFbG9mdEwFBWxvZnRPBAhuZXdXaFN0cgkAugkCCQDMCAIJAJEDAgUCd2gFC3doSWR4TGV2ZWxzCQDMCAIJAJEDAgUCd2gFCHdoSWR4UmVzCQDMCAIJAJEDAgUCd2gFCHdoSWR4TWF0CQDMCAIJAJEDAgUCd2gFCXdoSWR4UHJvZAkAzAgCCQC5CQIJAMwIAgUFbG9mdEwJAMwIAgkApAMBBQVsb2Z0TwkAzAgCCQCkAwEFBWxvZnRGCQDMCAIJAKQDAQUFbG9mdFQFA25pbAIBXwUDbmlsAgE6CQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFd2hLZXkFCG5ld1doU3RyBQNuaWwFCG5ld1doU3RyAWkBEmZpeFdhcmVob3VzZUZvcm1hdAELbGFuZEFzc2V0SWQDCQECIT0CCAUBaQZjYWxsZXIFDHJlc3RDb250cmFjdAkAAgECDUFjY2VzcyBkZW5pZWQEBXdoS2V5CQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQECWxhbmRJbmRleAkAaQIJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfBQtyZWNMYW5kU2l6ZQUFU1NJWkUECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAJ3aAkBDGdldFdhcmVob3VzZQMFBXdoS2V5BQlsYW5kSW5kZXgFCmluZnJhTGV2ZWwEBWxvZnRMCQEFYXNJbnQBCQD8BwQFD2Vjb25vbXlDb250cmFjdAIacmVjYWxjTG9ja2VkVm9sdW1lUkVBRE9OTFkJAMwIAgULbGFuZEFzc2V0SWQJAMwIAgUCd2gFA25pbAUDbmlsBAVsb2Z0TwkBF2dldFdhcmVob3VzZU9jY3VwaWVkVm9sAQUCd2gEBWxvZnRUCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBCQCRAwIFAndoBQt3aElkeExldmVscwQFbG9mdEYJAGUCCQBlAgUFbG9mdFQFBWxvZnRMBQVsb2Z0TwQIbmV3V2hTdHIJALoJAgkAzAgCCQCRAwIFAndoBQt3aElkeExldmVscwkAzAgCCQCRAwIFAndoBQh3aElkeFJlcwkAzAgCCQCRAwIFAndoBQh3aElkeE1hdAkAzAgCCQCRAwIFAndoBQl3aElkeFByb2QJAMwIAgkAuQkCCQDMCAIJAKQDAQUFbG9mdEwJAMwIAgkApAMBBQVsb2Z0TwkAzAgCCQCkAwEFBWxvZnRGCQDMCAIJAKQDAQUFbG9mdFQFA25pbAIBXwUDbmlsAgE6CQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFd2hLZXkFCG5ld1doU3RyBQNuaWwFCG5ld1doU3RyAWkBF2ZpeENvbnRpbmVudFByb3BvcnRpb25zAQxsYW5kQXNzZXRJZHMDCQECIT0CCAUBaQZjYWxsZXIFDHJlc3RDb250cmFjdAkAAgECDUFjY2VzcyBkZW5pZWQKAQhnZXRQcm9wcwIDYWNjBGNvbnQJAM0IAgUDYWNjCQELdmFsdWVPckVsc2UCCQCiCAEJARZrZXlSZXNUeXBlc0J5Q29udGluZW50AQUEY29udAILMF8wXzBfMF8wXzAEAXAKAAIkbAUKY29udGluZW50cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEIZ2V0UHJvcHMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDUJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFCgEJcHJvY2Vzc29yAgNhY2MLbGFuZEFzc2V0SWQEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQEAWQJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfBAlsYW5kSW5kZXgJAGkCCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCBQFkBQtyZWNMYW5kU2l6ZQUFU1NJWkUEBGNvbnQJAJEDAgUBZAUMcmVjQ29udGluZW50BA10ZXJyYWluQ291bnRzCQENY291bnRUZXJyYWlucwEJAJEDAgUBZAULcmVjVGVycmFpbnMEDGNvbnRpbmVudElkeAkBBXZhbHVlAQkAzwgCBQpjb250aW5lbnRzBQRjb250BAljb250UHJvcHMJALUJAgkAkQMCBQNhY2MFDGNvbnRpbmVudElkeAIBXwQHdXBkYXRlZAkAuQkCCQEZdXBkYXRlUHJvcG9ydGlvbnNJbnRlcm5hbAQFCWNvbnRQcm9wcwUNdGVycmFpbkNvdW50cwUJbGFuZEluZGV4AAECAV8EByRtYXRjaDAFBGNvbnQDCQAAAgIIQW1lcmljYXMFByRtYXRjaDAJAMwIAgUHdXBkYXRlZAkA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XgBfAGAAYQBiAGMAZAkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJARZrZXlSZXNUeXBlc0J5Q29udGluZW50AQIIQW1lcmljYXMJAJEDAgUBcgAACQDMCAIJAQtTdHJpbmdFbnRyeQIJARZrZXlSZXNUeXBlc0J5Q29udGluZW50AQIGRXVyb3BlCQCRAwIFAXIAAQkAzAgCCQELU3RyaW5nRW50cnkCCQEWa2V5UmVzVHlwZXNCeUNvbnRpbmVudAECBEFzaWEJAJEDAgUBcgACCQDMCAIJAQtTdHJpbmdFbnRyeQIJARZrZXlSZXNUeXBlc0J5Q29udGluZW50AQIGQWZyaWNhCQCRAwIFAXIAAwkAzAgCCQELU3RyaW5nRW50cnkCCQEWa2V5UmVzVHlwZXNCeUNvbnRpbmVudAECB09jZWFuaWEJAJEDAgUBcgAEBQNuaWwAAAFpAQ9maXhTdGFrZWRQaWVjZXMBB2FkZHJlc3MDCQECIT0CCAUBaQZjYWxsZXIFDHJlc3RDb250cmFjdAkAAgECDUFjY2VzcyBkZW5pZWQEDHN0YWtlZFBpZWNlcwMJAAACBQdhZGRyZXNzAgAAAAQIbGFuZHNTdHIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQUHYWRkcmVzcwQFbGFuZHMDCQEJaXNEZWZpbmVkAQUIbGFuZHNTdHIJAL0JAgkBBXZhbHVlAQUIbGFuZHNTdHICAV8FA25pbAoBB29uZUxhbmQCA2FjYwtsYW5kQXNzZXRJZAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQIbGFuZFNpemUJAJEDAgkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8FC3JlY0xhbmRTaXplCQBkAgUDYWNjCQEPbnVtUGllY2VzQnlTaXplAQUIbGFuZFNpemUKAAIkbAUFbGFuZHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBB29uZUxhbmQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFUxpc3Qgc2l6ZSBleGNlZWRzIDEwMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsAPAA9AD4APwBAAEEAQgBDAEQARQBGAEcASABJAEoASwBMAE0ATgBPAFAAUQBSAFMAVABVAFYAVwBYAFkAWgBbAFwAXQBeAF8AYABhAGIAYwBkCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJARZrZXlTdGFrZWRQaWVjZXNCeU93bmVyAQUHYWRkcmVzcwUMc3Rha2VkUGllY2VzBQNuaWwFDHN0YWtlZFBpZWNlcwFpAQ1zZXRDdXN0b21OYW1lAwdhc3NldElkCmN1c3RvbU5hbWUEdHlwZQQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAAwkBAiE9AggFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECGkFsbG93ZWQgVVNEVCBwYXltZW50IG9ubHkhAwkBAiE9AggFA3BtdAZhbW91bnQFDFJFTkFNSU5HQ09TVAkAAgEJAKwCAgISUGF5bWVudCBzaG91bGQgYmUgCQCkAwEFDFJFTkFNSU5HQ09TVAMJAQhjb250YWlucwIFCmN1c3RvbU5hbWUCAl9fCQACAQkArAICAh5OYW1lIHNob3VsZCBub3QgY29udGFpbiAnX18nOiAFCmN1c3RvbU5hbWUDCQBmAgkAsQIBBQpjdXN0b21OYW1lBQpNQVhOQU1FTEVOCQACAQkArAICAhlOYW1lIHRvbyBsb25nLCBtYXhMZW5ndGg9CQCkAwEFCk1BWE5BTUVMRU4EBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAdhY3Rpb25zBAckbWF0Y2gwBQR0eXBlAwkAAAICB0FDQ09VTlQFByRtYXRjaDAECnJldmVyc2VLZXkJARZrZXlDdXN0b21OYW1lVG9BZGRyZXNzAQUKY3VzdG9tTmFtZQQJbmFtZU93bmVyCQCiCAEFCnJldmVyc2VLZXkDCQEJaXNEZWZpbmVkAQUJbmFtZU93bmVyCQACAQkArAICAhlOYW1lIGFscmVhZHkgcmVnaXN0ZXJlZDogBQpjdXN0b21OYW1lBA1hZGRyVG9OYW1lS2V5CQEWa2V5QWRkcmVzc1RvQ3VzdG9tTmFtZQEFBGFkZHIEB29sZE5hbWUJAKIIAQUNYWRkclRvTmFtZUtleQQHZnJlZU9sZAMJAQlpc0RlZmluZWQBBQdvbGROYW1lCQDMCAIJAQtEZWxldGVFbnRyeQEJARZrZXlDdXN0b21OYW1lVG9BZGRyZXNzAQkBBXZhbHVlAQUHb2xkTmFtZQUDbmlsBQNuaWwJAM4IAgkAzQgCCQDNCAIFB2ZyZWVPbGQJAQtTdHJpbmdFbnRyeQIFDWFkZHJUb05hbWVLZXkFCmN1c3RvbU5hbWUJAQtTdHJpbmdFbnRyeQIFCnJldmVyc2VLZXkFBGFkZHIICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIFBGFkZHIFDHhwQ3VzdG9tTmFtZQJfMQMJAAACAgRMQU5EBQckbWF0Y2gwBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQUHYXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAggFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQdhc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBApyZXZlcnNlS2V5CQEaa2V5TGFuZEN1c3RvbU5hbWVUb0Fzc2V0SWQBBQpjdXN0b21OYW1lBAluYW1lT3duZXIJAKIIAQUKcmV2ZXJzZUtleQMJAQlpc0RlZmluZWQBBQluYW1lT3duZXIJAAIBCQCsAgICGU5hbWUgYWxyZWFkeSByZWdpc3RlcmVkOiAFCmN1c3RvbU5hbWUEDmFzc2V0VG9OYW1lS2V5CQEaa2V5TGFuZEFzc2V0SWRUb0N1c3RvbU5hbWUBBQdhc3NldElkBAdvbGROYW1lCQCiCAEFDmFzc2V0VG9OYW1lS2V5BAdmcmVlT2xkAwkBCWlzRGVmaW5lZAEFB29sZE5hbWUJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBGmtleUxhbmRDdXN0b21OYW1lVG9Bc3NldElkAQkBBXZhbHVlAQUHb2xkTmFtZQUDbmlsBQNuaWwJAM4IAgkAzQgCCQDNCAIFB2ZyZWVPbGQJAQtTdHJpbmdFbnRyeQIFDmFzc2V0VG9OYW1lS2V5BQpjdXN0b21OYW1lCQELU3RyaW5nRW50cnkCBQpyZXZlcnNlS2V5BQdhc3NldElkCAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCBQRhZGRyBQx4cEN1c3RvbU5hbWUCXzEDCQAAAgIERFVDSwUHJG1hdGNoMAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQdhc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFB2Fzc2V0SWQDAwkBASEBCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5BgkBASEBCQEJaXNEZWZpbmVkAQkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyCQACAQkArAICCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBEGtleUR1Y2tJZFRvT3duZXIBBQdhc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpEVUNLUFJFRklYAg0gaXMgbm90IHlvdXJzBApyZXZlcnNlS2V5CQEaa2V5RHVja0N1c3RvbU5hbWVUb0Fzc2V0SWQBBQpjdXN0b21OYW1lBAluYW1lT3duZXIJAKIIAQUKcmV2ZXJzZUtleQMJAQlpc0RlZmluZWQBBQluYW1lT3duZXIJAAIBCQCsAgICGU5hbWUgYWxyZWFkeSByZWdpc3RlcmVkOiAFCmN1c3RvbU5hbWUEDmFzc2V0VG9OYW1lS2V5CQEaa2V5RHVja0Fzc2V0SWRUb0N1c3RvbU5hbWUBBQdhc3NldElkBAdvbGROYW1lCQCiCAEFDmFzc2V0VG9OYW1lS2V5BAdmcmVlT2xkAwkBCWlzRGVmaW5lZAEFB29sZE5hbWUJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBGmtleUR1Y2tDdXN0b21OYW1lVG9Bc3NldElkAQkBBXZhbHVlAQUHb2xkTmFtZQUDbmlsBQNuaWwJAM4IAgkAzQgCCQDNCAIFB2ZyZWVPbGQJAQtTdHJpbmdFbnRyeQIFDmFzc2V0VG9OYW1lS2V5BQpjdXN0b21OYW1lCQELU3RyaW5nRW50cnkCBQpyZXZlcnNlS2V5BQdhc3NldElkCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgUHYXNzZXRJZAUMeHBDdXN0b21OYW1lAl8xCQACAQITVW5rbm93biBlbnRpdHkgdHlwZQkAlAoCCQDNCAIJAM0IAgUHYWN0aW9ucwkBDlNjcmlwdFRyYW5zZmVyAwUPZWNvbm9teUNvbnRyYWN0CAUDcG10BmFtb3VudAULdXNkdEFzc2V0SWQFDHByb2xvZ0FjdGlvbgAAAWkBDHNldFJlZmVycmFscwIJb2xkUGxheWVyCW5ld1BsYXllcgMJAQIhPQIIBQFpD2NhbGxlclB1YmxpY0tleQUDcHViCQACAQIRUGVybWlzc2lvbiBkZW5pZWQEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAMJAQEhAQkBCWlzRGVmaW5lZAEJAKYIAQUJb2xkUGxheWVyCQACAQkArAICAhFJbnZhbGlkIGFkZHJlc3M6IAUJb2xkUGxheWVyAwkBASEBCQEJaXNEZWZpbmVkAQkApggBBQluZXdQbGF5ZXIJAAIBCQCsAgICEUludmFsaWQgYWRkcmVzczogBQluZXdQbGF5ZXIEB29sZHNLZXkJAQlrZXlPbGRpZXMABARvbGRzCQCiCAEFB29sZHNLZXkEBm9sZGllcwMJAQlpc0RlZmluZWQBBQRvbGRzCQC8CQIJAQV2YWx1ZQEFBG9sZHMCAV8FA25pbAMJAQ9jb250YWluc0VsZW1lbnQCBQZvbGRpZXMFCW5ld1BsYXllcgkAAgEJAKwCAgUJbmV3UGxheWVyAiYgaXMgbm90IG5ld2JpZSAoYWxyZWFkeSBoYXMgcmVmZXJyYWxzKQQIcmVmQnlLZXkJAQ9rZXlBZGRyZXNzUmVmQnkBBQluZXdQbGF5ZXIEBXJlZkJ5CQCiCAEFCHJlZkJ5S2V5AwMJAQlpc0RlZmluZWQBBQVyZWZCeQkBCWlzRGVmaW5lZAEJAKYIAQkBBXZhbHVlAQUFcmVmQnkHCQACAQkArAICCQCsAgIFCW5ld1BsYXllcgIUIGFscmVhZHkgaGFzIHJlZkJ5OiAJAQV2YWx1ZQEFBXJlZkJ5BAdyZWZzS2V5CQETa2V5QWRkcmVzc1JlZmVycmFscwEFCW9sZFBsYXllcgQEcmVmcwkAoggBBQdyZWZzS2V5BAlyZWZzQXJyYXkDCQEJaXNEZWZpbmVkAQUEcmVmcwkAvAkCCQEFdmFsdWUBBQRyZWZzAgFfBQNuaWwDCQEPY29udGFpbnNFbGVtZW50AgUJcmVmc0FycmF5BQluZXdQbGF5ZXIJAAIBCQCsAgIJAKwCAgkArAICBQlvbGRQbGF5ZXICEiBhbHJlYWR5IGNvbnRhaW5zIAUJbmV3UGxheWVyAhEgd2l0aGluIHJlZmVycmFscwQHbmV3UmVmcwkAugkCCQDNCAIFCXJlZnNBcnJheQUJbmV3UGxheWVyAgFfBAduZXdPbGRzAwkBD2NvbnRhaW5zRWxlbWVudAIFBm9sZGllcwUJb2xkUGxheWVyCQEFdmFsdWUBBQRvbGRzCQC6CQIJAM0IAgUGb2xkaWVzBQlvbGRQbGF5ZXICAV8JAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCBQhyZWZCeUtleQUJb2xkUGxheWVyCQDMCAIJAQtTdHJpbmdFbnRyeQIFB3JlZnNLZXkFB25ld1JlZnMJAMwIAgkBC1N0cmluZ0VudHJ5AgUHb2xkc0tleQUHbmV3T2xkcwkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAAAAWkBEGRpc3RyaWJ1dGVQb2ludHMFCHN0cmVuZ3RoCGFjY3VyYWN5CWludGVsbGVjdAllbmR1cmFuY2UJZGV4dGVyaXR5BAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQECmZyZWVLZXlBY2MJARFrZXlVc2VyRnJlZVBvaW50cwEFBGFkZHIEDWZyZWVQb2ludHNBY2MJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0BQpmcmVlS2V5QWNjAAAEC2ZyZWVLZXlEdWNrCQERa2V5RHVja0ZyZWVQb2ludHMBBQtkdWNrQXNzZXRJZAQOZnJlZVBvaW50c0R1Y2sJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0BQtmcmVlS2V5RHVjawAABAdzdW1GcmVlCQBkAgUNZnJlZVBvaW50c0FjYwUOZnJlZVBvaW50c0R1Y2sED3N1bVRvRGlzdHJpYnV0ZQkAZAIJAGQCCQBkAgkAZAIFCHN0cmVuZ3RoBQhhY2N1cmFjeQUJaW50ZWxsZWN0BQllbmR1cmFuY2UFCWRleHRlcml0eQMJAGYCBQ9zdW1Ub0Rpc3RyaWJ1dGUFB3N1bUZyZWUJAAIBCQCsAgIJAKwCAgIPVGhlcmUgYXJlIG9ubHkgCQCkAwEFB3N1bUZyZWUCGiBmcmVlIHBvaW50cyB0byBkaXN0cmlidXRlBAhjaGFyc0tleQkBDGtleUR1Y2tDaGFycwEFC2R1Y2tBc3NldElkBAVjaGFycwkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAUIY2hhcnNLZXkCCTBfMF8wXzBfMAIBXwQGbmV3QWNjCQBlAgUNZnJlZVBvaW50c0FjYwUPc3VtVG9EaXN0cmlidXRlCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIFCmZyZWVLZXlBY2MDCQBmAgAABQZuZXdBY2MAAAUGbmV3QWNjCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQtmcmVlS2V5RHVjawMJAGYCAAAFBm5ld0FjYwkAZAIFDmZyZWVQb2ludHNEdWNrBQZuZXdBY2MFDmZyZWVQb2ludHNEdWNrCQDMCAIJAQtTdHJpbmdFbnRyeQIFCGNoYXJzS2V5CQC5CQIJAMwIAgkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQxjaGFyU3RyZW5ndGgFCHN0cmVuZ3RoCQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUMY2hhckFjY3VyYWN5BQhhY2N1cmFjeQkAzAgCCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDWNoYXJJbnRlbGxlY3QFCWludGVsbGVjdAkAzAgCCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDWNoYXJFbmR1cmFuY2UFCWVuZHVyYW5jZQkAzAgCCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDWNoYXJEZXh0ZXJpdHkFCWRleHRlcml0eQUDbmlsAgFfCQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsAAABaQEcc3BsaXRCeUdsb2JhbFdlaWdodHNSRUFET05MWQEGYW1vdW50CQCUCgIFA25pbAkBEmdldE5lZWRlZE1hdGVyaWFscwEFBmFtb3VudAFpASRzcGxpdEJ5R2xvYmFsQW5kTG9jYWxXZWlnaHRzUkVBRE9OTFkDCW1hdEFtb3VudAlyZXNBbW91bnQIdGVycmFpbnMEDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQUIdGVycmFpbnMJAJQKAgUDbmlsCQCUCgIJARJnZXROZWVkZWRNYXRlcmlhbHMBBQltYXRBbW91bnQJARNkaXN0cmlidXRlQnlXZWlnaHRzAgUJcmVzQW1vdW50BQ10ZXJyYWluQ291bnRzAWkBE2dldEJhY2twYWNrUkVBRE9OTFkBC2R1Y2tBc3NldElkCQCUCgIFA25pbAkAuQkCCQELZ2V0QmFja3BhY2sBCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAIBOgFpARRnZXRXYXJlaG91c2VSRUFET05MWQELbGFuZEFzc2V0SWQEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQECWxhbmRJbmRleAkAaQIJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfBQtyZWNMYW5kU2l6ZQUFU1NJWkUECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAACQCUCgIFA25pbAkAugkCCQEMZ2V0V2FyZWhvdXNlAwkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkBQlsYW5kSW5kZXgFCmluZnJhTGV2ZWwCAToBaQEKc2F2ZUxhc3RUeAAEBmNhbGxlcggFAWkGY2FsbGVyAwMDCQECIT0CBQZjYWxsZXIFC3dsZ0NvbnRyYWN0CQECIT0CBQZjYWxsZXIFD2Vjb25vbXlDb250cmFjdAcJAQIhPQIFBmNhbGxlcgUSdG91cm5hbWVudENvbnRyYWN0BwkAAgECDUFjY2VzcyBkZW5pZWQJAJQKAgkAzAgCCQEGcHJvbG9nAQUBaQUDbmlsACoBaQEPdXBkYXRlRHVja1N0YXRzAgtkdWNrQXNzZXRJZAdkZWx0YVhQAwkBAiE9AggFAWkGY2FsbGVyBQ9lY29ub215Q29udHJhY3QJAAIBAg1BY2Nlc3MgZGVuaWVkCQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAUHZGVsdGFYUAFpAQ51cGRhdGVBY2NTdGF0cwIEYWRkcgdkZWx0YVhQAwkBAiE9AggFAWkGY2FsbGVyBQ9lY29ub215Q29udHJhY3QJAAIBAg1BY2Nlc3MgZGVuaWVkCQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIFBGFkZHIFB2RlbHRhWFABaQEJZXF1aXBEdWNrAQllcXVpcG1lbnQEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAMJAQ9jaGVja1RvdXJuYW1lbnQBBQtkdWNrQXNzZXRJZAkAAgECGWVxdWlwRHVja19jaGVja1RvdXJuYW1lbnQEBWVxS2V5CQEQa2V5RHVja0VxdWlwbWVudAEFC2R1Y2tBc3NldElkBAtjdXJyZW50U2VncwkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEFBWVxS2V5AhcsOyxfLDssXyw7LF8sOyxfLDssXyw7LAIBXwQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEBW5ld0VxCQC1CQIFCWVxdWlwbWVudAIBXwMJAQIhPQIJAJADAQUFbmV3RXEFC05VTVNFR01FTlRTCQACAQIWV3JvbmcgZXF1aXBtZW50IHN0cmluZwQJdGVtcFByb2RCCQEGZHJlc3NCBAULY3VycmVudFNlZ3MJAQ5wcm9kU3RyVG9CeXRlcwEJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAYFA25pbAQIc2VnQnBBdXgJAJEDAgkAtQkCCQCRAwIFBW5ld0VxBQtzZWdCYWNrcGFjawIBOwABBApidWZmRWZmZWN0AwkAAAIFCHNlZ0JwQXV4AgAAAAQEYXV4MAkAkQMCCQC1CQIFCHNlZ0JwQXV4AgEsAAADCQAAAgUEYXV4MAIAAAAEBmlkeENudAkAtQkCBQRhdXgwAgE6BANpZHgJAJEDAgUGaWR4Q250AAAEA2NudAkAkQMCBQZpZHhDbnQAAQMDAwMDCQAAAgUDaWR4AgIwNgYJAAACBQNpZHgCAjA3BgkAAAIFA2lkeAICMDgJAQIhPQIFA2NudAIABwkAZgIJAQ1wYXJzZUludFZhbHVlAQUDY250AAAHCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgJAQ1wYXJzZUludFZhbHVlAQUDaWR4AgFfBQpySWR4RWZmZWN0AAAEBXN0YXRzCQEMZ2V0RHVja1N0YXRzBAUEdGhpcwULZHVja0Fzc2V0SWQFCmJ1ZmZFZmZlY3QGBAhuZXdQcm9kQgkBBmRyZXNzQgQFBW5ld0VxBQl0ZW1wUHJvZEIHBQVzdGF0cwQKbmV3UHJvZFN0cgkBDmJ5dGVzVG9Qcm9kU3RyAQUIbmV3UHJvZEIJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCBQVlcUtleQUJZXF1aXBtZW50CQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC6CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAkAzAgCBQpuZXdQcm9kU3RyBQNuaWwCAToJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleUR1Y2tCdWZmcwEFC2R1Y2tBc3NldElkCQC5CQIJAMwIAgkApAMBCQCRAwIFBXN0YXRzAAcJAMwIAgkApAMBCQCRAwIFBXN0YXRzAAgJAMwIAgkApAMBCQCRAwIFBXN0YXRzAAkJAMwIAgkApAMBCQCRAwIFBXN0YXRzAAoJAMwIAgkApAMBCQCRAwIFBXN0YXRzAAsFA25pbAIBXwkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAAAAWkBD2ZvcnRpZmljYXRlTGFuZAILbGFuZEFzc2V0SWQEcGxhbgQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQLZHVja0Fzc2V0SWQJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIABAlkdWNrU3RhdHMJAQxnZXREdWNrU3RhdHMEBQR0aGlzBQtkdWNrQXNzZXRJZAAABwQHZm9ydEtleQkBF2tleUZvcnRpZmljYXRpb25zQnlMYW5kAQULbGFuZEFzc2V0SWQEDGN1cnJlbnRGb3J0cwkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEFB2ZvcnRLZXkCDDowXzE1OjBfMTg6MAIBXwQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQJbGFuZEluZGV4CQBpAgkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAgkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8FC3JlY0xhbmRTaXplBQVTU0laRQQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAEBXdoS2V5CQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQEAndoCQEMZ2V0V2FyZWhvdXNlAwUFd2hLZXkFCWxhbmRJbmRleAUKaW5mcmFMZXZlbAQHY3VyTG9mdAkAtQkCCQCRAwIFAndoBQl3aElkeExPRlQCAV8EBGN1ck8JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdjdXJMb2Z0BQt2b2xPY2N1cGllZAQEY3VyRgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB2N1ckxvZnQFB3ZvbEZyZWUECG5ld0ZvcnRzCQC1CQIFBHBsYW4CAV8EDSR0MDk1ODUwOTU5NjUJAQVmb3J0QgYFDGN1cnJlbnRGb3J0cwkBDnByb2RTdHJUb0J5dGVzAQkAkQMCBQJ3aAUJd2hJZHhQcm9kBQRjdXJPBQRjdXJGBgUDbmlsBAl0ZW1wUHJvZEIIBQ0kdDA5NTg1MDk1OTY1Al8xBAV0ZW1wTwgFDSR0MDk1ODUwOTU5NjUCXzIEBXRlbXBGCAUNJHQwOTU4NTA5NTk2NQJfMwQNJHQwOTU5Njg5NjA2NAkBBWZvcnRCBgUIbmV3Rm9ydHMFCXRlbXBQcm9kQgUFdGVtcE8FBXRlbXBGBwUJZHVja1N0YXRzBAhuZXdQcm9kQggFDSR0MDk1OTY4OTYwNjQCXzEEBG5ld08IBQ0kdDA5NTk2ODk2MDY0Al8yBARuZXdGCAUNJHQwOTU5Njg5NjA2NAJfMwQKbmV3UHJvZFN0cgkBDmJ5dGVzVG9Qcm9kU3RyAQUIbmV3UHJvZEIECm5ld0xvZnRTdHIJALkJAgkAzAgCCQCRAwIFB2N1ckxvZnQFCXZvbExvY2tlZAkAzAgCCQCkAwEFBG5ld08JAMwIAgkApAMBBQRuZXdGCQDMCAIJAJEDAgUHY3VyTG9mdAUIdm9sVG90YWwFA25pbAIBXwkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIFB2ZvcnRLZXkFBHBsYW4JAMwIAgkBC1N0cmluZ0VudHJ5AgUFd2hLZXkJALoJAgkAzAgCCQCRAwIFAndoBQt3aElkeExldmVscwkAzAgCCQCRAwIFAndoBQh3aElkeFJlcwkAzAgCCQCRAwIFAndoBQh3aElkeE1hdAkAzAgCBQpuZXdQcm9kU3RyCQDMCAIFCm5ld0xvZnRTdHIFA25pbAIBOgkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAAAAWkBE2luaXREdWNrVG91ckF0dGVtcHQBC2R1Y2tBc3NldElkAwkBAiE9AggFAWkGY2FsbGVyBRJ0b3VybmFtZW50Q29udHJhY3QJAAIBAg1BY2Nlc3MgZGVuaWVkBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQEBW1heEhQCQEJbWF4SGVhbHRoAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMa2V5RHVja0xldmVsAQULZHVja0Fzc2V0SWQAAAQJY3VySGVhbHRoCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aAUFbWF4SFAECWN1ckxvY0tleQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAoggBBQljdXJMb2NLZXkFD0RFRkFVTFRMT0NBVElPTgQGbGFzdElkCQELdmFsdWVPckVsc2UCCQCaCAIFEnRvdXJuYW1lbnRDb250cmFjdAUNbGFzdFRvdXJJZEtleQAABAx0b3VyTG9jYXRpb24JAKwCAgkApAMBBQZsYXN0SWQCBF9UXzAJAJQKAgkAzAgCBQxwcm9sb2dBY3Rpb24JAMwIAgkBDEludGVnZXJFbnRyeQIJAQ5rZXlTYXZlZEhlYWx0aAEFC2R1Y2tBc3NldElkBQljdXJIZWFsdGgJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aAUFbWF4SFAJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEGtleVNhdmVkTG9jYXRpb24BBQtkdWNrQXNzZXRJZAULY3VyTG9jYXRpb24JAMwIAgkBC1N0cmluZ0VudHJ5AgUJY3VyTG9jS2V5BQx0b3VyTG9jYXRpb24FA25pbAUMdG91ckxvY2F0aW9uAWkBDGJyZWFrQXR0ZW1wdAAEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQECWN1ckxvY0tleQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAoggBBQljdXJMb2NLZXkFD0RFRkFVTFRMT0NBVElPTgMJAQIhPQIJAJEDAgkAtQkCBQtjdXJMb2NhdGlvbgIBXwUKbG9jSWR4VHlwZQIBVAkAAgECIllvdXIgZHVjayBpcyBub3QgaW4gdGhlIHRvdXJuYW1lbnQEC3NhdmVkSGVhbHRoCQERQGV4dHJOYXRpdmUoMTA1NSkBCQEOa2V5U2F2ZWRIZWFsdGgBBQtkdWNrQXNzZXRJZAQNc2F2ZWRMb2NhdGlvbgkBEUBleHRyTmF0aXZlKDEwNTgpAQkBEGtleVNhdmVkTG9jYXRpb24BBQtkdWNrQXNzZXRJZAkAlAoCCQDMCAIFDHByb2xvZ0FjdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAULc2F2ZWRIZWFsdGgJAMwIAgkBC1N0cmluZ0VudHJ5AgUJY3VyTG9jS2V5BQ1zYXZlZExvY2F0aW9uBQNuaWwFC2N1ckxvY2F0aW9uAWkBFmV4aXRUb3VybmFtZW50SW50ZXJuYWwBC2R1Y2tBc3NldElkAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQINQWNjZXNzIGRlbmllZAQLc2F2ZWRIZWFsdGgJARFAZXh0ck5hdGl2ZSgxMDU1KQEJAQ5rZXlTYXZlZEhlYWx0aAEFC2R1Y2tBc3NldElkBA1zYXZlZExvY2F0aW9uCQERQGV4dHJOYXRpdmUoMTA1OCkBCQEQa2V5U2F2ZWRMb2NhdGlvbgEFC2R1Y2tBc3NldElkCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQFC3NhdmVkSGVhbHRoCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUNc2F2ZWRMb2NhdGlvbgUDbmlsBwFpAQ5wcmVwYXJlUm9iYmVyeQIHbWVzc2FnZQNzaWcEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQEBIQEJAMQTAwUHbWVzc2FnZQUDc2lnBQNwdWIJAAIBAhhzaWduYXR1cmUgZG9lcyBub3QgbWF0Y2gDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAiJleGFjdGx5IDEgcGF5bWVudCBtdXN0IGJlIGF0dGFjaGVkBANwbXQJAJEDAggFAWkIcGF5bWVudHMAAAQGd2xnQW10CAUDcG10BmFtb3VudAMDCQEBIQEJAQlpc0RlZmluZWQBCAUDcG10B2Fzc2V0SWQGCQECIT0CCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQFCndsZ0Fzc2V0SWQJAAIBAhVXTEdPTEQgcGF5bWVudHMgb25seSEEBXBhcnRzCQC1CQIJALAJAQUHbWVzc2FnZQIBfAMJAQIhPQIJAJADAQUFcGFydHMAAgkAAgECFFdyb25nIG1lc3NhZ2UgZm9ybWF0BAtkdWNrQXNzZXRJZAkAkQMCBQVwYXJ0cwAABAdyb2JDb3N0CAkBDmdldFJvYmJlcnlEYXRhAgUEdGhpcwULZHVja0Fzc2V0SWQCXzEDCQBmAgUHcm9iQ29zdAUGd2xnQW10CQACAQkArAICCQCsAgIJAKwCAgIIUGF5bWVudCAJAKQDAQUGd2xnQW10AgwgPCByZXF1aXJlZCAJAKQDAQUHcm9iQ29zdAQKY2FuZGlkYXRlcwkAtQkCCQCRAwIFBXBhcnRzAAECAV8EA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAECWR1Y2tTdGF0ZQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQETa2V5RHVja1JvYmJlcnlTdGF0ZQEFC2R1Y2tBc3NldElkAAAECmxvY2tlZExhbmQJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBE2tleUxvY2tlZExhbmRCeUR1Y2sBBQtkdWNrQXNzZXRJZAIABAdsYW5kRVRBCQELdmFsdWVPckVsc2UCCQCfCAEJARJrZXlMYW5kQ29vbGRvd25FVEEBBQpsb2NrZWRMYW5kAAADAwkBAiE9AgUJZHVja1N0YXRlBQtkdWNrSWR4RnJlZQkAZgIFB2xhbmRFVEEFA25vdwcJAAIBCQCsAgICJ1lvdSBhbHJlYWR5IHN0YXJ0ZWQgcm9iYmluZywgd2FpdCB0aWxsIAkApAMBBQdsYW5kRVRBCgEHY2hlY2tlcgIDYWNjC2xhbmRBc3NldElkBAVzdGF0ZQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQETa2V5TGFuZFJvYmJlcnlTdGF0ZQEFC2xhbmRBc3NldElkAAAEC2Nvb2xkb3duRVRBCQELdmFsdWVPckVsc2UCCQCfCAEJARJrZXlMYW5kQ29vbGRvd25FVEEBBQtsYW5kQXNzZXRJZAAAAwkAZgIFBXN0YXRlCQCQAwEFEGxhbmRSb2JDb29sZG93bnMJAAIBAg1JbnZhbGlkIHN0YXRlAwkAZgIFA25vdwULY29vbGRvd25FVEEECnN0YWtlZFRpbWUJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAAAwkAZwIAAAUKc3Rha2VkVGltZQUDYWNjBAFhCQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQEAWQJALUJAggFAWELZGVzY3JpcHRpb24CAV8EBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAgUBZAULcmVjTGFuZFNpemUEDHByb2R1Y3Rpdml0eQkBDGFwcGx5Qm9udXNlcwIFC2xhbmRBc3NldElkBQZwaWVjZXMECWRlbHRhVGltZQkAZQIFA25vdwUKc3Rha2VkVGltZQQIYXZhaWxSZXMJAGsDBQlkZWx0YVRpbWUJAGgCBQxwcm9kdWN0aXZpdHkFBnBpZWNlcwUJREFZTUlMTElTAwkAZgIFDk1JTl9SRVNfVE9fUk9CBQhhdmFpbFJlcwUDYWNjCQDNCAIFA2FjYwULbGFuZEFzc2V0SWQFA2FjYwQIZmlsdGVyZWQKAAIkbAUKY2FuZGlkYXRlcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEHY2hlY2tlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgMJAAACCQCQAwEFCGZpbHRlcmVkAAAJAAIBAhlObyBjYW5kaWRhdGVzIGZvciByb2JiZXJ5BAZybmRJZHgJAQ9nZXRSYW5kb21OdW1iZXIDCQCQAwEFCGZpbHRlcmVkBQZoZWlnaHQJAMsBAgUDc2lnCAUBaQ10cmFuc2FjdGlvbklkBAtsYW5kQXNzZXRJZAkAkQMCBQhmaWx0ZXJlZAUGcm5kSWR4CQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJARNrZXlMYW5kUm9iYmVyeVN0YXRlAQULbGFuZEFzc2V0SWQFDHJvYklkeExvY2tlZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEmtleUxhbmRDb29sZG93bkVUQQEFC2xhbmRBc3NldElkCQBkAgUDbm93CQCRAwIFEGxhbmRSb2JDb29sZG93bnMFDHJvYklkeExvY2tlZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBE2tleUR1Y2tSb2JiZXJ5U3RhdGUBBQtkdWNrQXNzZXRJZAUQZHVja0lkeFByZXBhcmluZwkAzAgCCQELU3RyaW5nRW50cnkCCQETa2V5TG9ja2VkTGFuZEJ5RHVjawEFC2R1Y2tBc3NldElkBQtsYW5kQXNzZXRJZAkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAULbGFuZEFzc2V0SWQBaQEHcm9iTGFuZAIHbWVzc2FnZQNzaWcEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQEBIQEJAMQTAwUHbWVzc2FnZQUDc2lnBQNwdWIJAAIBAhhzaWduYXR1cmUgZG9lcyBub3QgbWF0Y2gECHVzZXJBZGRyCQClCAEIBQFpBmNhbGxlcgQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQh1c2VyQWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAlAoCCQDMCAIFDHByb2xvZ0FjdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBGGtleUxhc3RSb2JiZXJ5VGltZUJ5RHVjawEFC2R1Y2tBc3NldElkBQNub3cFA25pbAAAAWkBB2RlbGl2ZXICB21lc3NhZ2UDc2lnAwkBASEBBRFLU19BTExPV19ERUxJVkVSWQkAAgECH0RlbGl2ZXJ5IGZlYXR1cmUgaXMgdHVybmVkIG9mZiEEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQEBIQEJAMQTAwUHbWVzc2FnZQUDc2lnBQNwdWIJAAIBAhhzaWduYXR1cmUgZG9lcyBub3QgbWF0Y2gJAJQKAgkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAAAAJBuEjE=", "height": 2762217, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 3RFBnWytRxXt3xbLSdvVWo9KxEcA3KJsVZwJwEqc1yt2 Next: HtbEAwFirdhETNzJKDa2ujMfb3udqtbRryyuY5Pv1bzR Diff:
OldNewDifferences
341341
342342 let cf = false
343343
344-let cg = take(drop(this.bytes, 1), 1)
345-
346-let ch = {
347- let ci = cg
348- if ((base58'2W' == ci))
344+let cg = false
345+
346+let ch = take(drop(this.bytes, 1), 1)
347+
348+let ci = {
349+ let cj = ch
350+ if ((base58'2W' == cj))
349351 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
350- else if ((base58'2T' == ci))
352+ else if ((base58'2T' == cj))
351353 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
352354 else throw("Unknown chain")
353355 }
354356
355-let cj = {
356- let ci = cg
357- if ((base58'2W' == ci))
357+let ck = {
358+ let cj = ch
359+ if ((base58'2W' == cj))
358360 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
359- else if ((base58'2T' == ci))
361+ else if ((base58'2T' == cj))
360362 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
361363 else throw("Unknown chain")
362364 }
363365
364-let ck = {
365- let ci = cg
366- if ((base58'2W' == ci))
366+let cl = {
367+ let cj = ch
368+ if ((base58'2W' == cj))
367369 then 10000000000
368- else if ((base58'2T' == ci))
370+ else if ((base58'2T' == cj))
369371 then 100000000
370372 else throw("Unknown chain")
371373 }
372374
373-let cl = {
374- let ci = cg
375- if ((base58'2W' == ci))
375+let cm = {
376+ let cj = ch
377+ if ((base58'2W' == cj))
376378 then 86400000
377- else if ((base58'2T' == ci))
379+ else if ((base58'2T' == cj))
378380 then 60000
379381 else throw("Unknown chain")
380382 }
381383
382-let cm = "__"
383-
384-let cn = 1000000
385-
386-let co = 100000000
387-
388-let cp = 25
389-
390-let cq = 100
391-
392-let cr = 225
393-
394-let cs = 400
395-
396-let ct = 625
397-
398-let cu = [0, 1, 2, 3, 4, 5]
399-
400-func cv (cw,cx) = valueOrErrorMessage(getString(cw, cx), makeString(["mandatory ", toString(cw), ".", cx, " is not defined"], ""))
401-
402-
403-let cy = 1
404-
405-let cz = 2
406-
407-let cA = 3
408-
409-let cB = 4
410-
411-let cC = 7
412-
413-func cD () = "%s__restConfig"
414-
415-
416-func cE () = "%s__restAddr"
417-
418-
419-func cF (cG) = split_4C(cv(cG, cD()), cm)
420-
421-
422-func cH (cI,cJ) = valueOrErrorMessage(addressFromString(cI[cJ]), ("Rest cfg doesn't contain address at index " + toString(cJ)))
423-
424-
425-let cK = addressFromStringValue(valueOrElse(getString(this, cE()), cj))
426-
427-let cI = cF(cK)
428-
429-let al = cH(cI, cy)
430-
431-let cL = cH(cI, cz)
432-
433-let cM = cH(cI, cA)
434-
435-let cN = cH(cI, cB)
436-
437-let cO = cH(cI, cC)
438-
439-let cP = 0
440-
441-let cQ = 1
442-
443-let cR = 2
444-
445-let cS = 3
446-
447-let cT = "wlg_assetId"
448-
449-let cU = valueOrErrorMessage(getBinary(cN, cT), "Not initialized yet")
450-
451-let cV = 2
452-
453-func cW (cw) = ("finishBlockForAddr_" + cw)
454-
455-
456-func cX () = "resTypesProportions"
457-
458-
459-func cY (cZ) = ("resTypesByContinent_" + cZ)
460-
461-
462-func da (bt) = ("stakedLandsByOwner_" + bt)
463-
464-
465-func db (bt) = ("stakedPiecesByOwner_" + bt)
466-
467-
468-func dc (dd) = {
469- let ci = dd
470- if ($isInstanceOf(ci, "String"))
384+let cn = "__"
385+
386+let co = 1000000
387+
388+let cp = 100000000
389+
390+let cq = 25
391+
392+let cr = 100
393+
394+let cs = 225
395+
396+let ct = 400
397+
398+let cu = 625
399+
400+let cv = [0, 1, 2, 3, 4, 5]
401+
402+func cw (cx,cy) = valueOrErrorMessage(getString(cx, cy), makeString(["mandatory ", toString(cx), ".", cy, " is not defined"], ""))
403+
404+
405+let cz = 1
406+
407+let cA = 2
408+
409+let cB = 3
410+
411+let cC = 4
412+
413+let cD = 7
414+
415+func cE () = "%s__restConfig"
416+
417+
418+func cF () = "%s__restAddr"
419+
420+
421+func cG (cH) = split_4C(cw(cH, cE()), cn)
422+
423+
424+func cI (cJ,cK) = valueOrErrorMessage(addressFromString(cJ[cK]), ("Rest cfg doesn't contain address at index " + toString(cK)))
425+
426+
427+let cL = addressFromStringValue(valueOrElse(getString(this, cF()), ck))
428+
429+let cJ = cG(cL)
430+
431+let al = cI(cJ, cz)
432+
433+let cM = cI(cJ, cA)
434+
435+let cN = cI(cJ, cB)
436+
437+let cO = cI(cJ, cC)
438+
439+let cP = cI(cJ, cD)
440+
441+let cQ = 0
442+
443+let cR = 1
444+
445+let cS = 2
446+
447+let cT = 3
448+
449+let cU = "wlg_assetId"
450+
451+let cV = valueOrErrorMessage(getBinary(cO, cU), "Not initialized yet")
452+
453+let cW = 2
454+
455+func cX (cx) = ("finishBlockForAddr_" + cx)
456+
457+
458+func cY () = "resTypesProportions"
459+
460+
461+func cZ (da) = ("resTypesByContinent_" + da)
462+
463+
464+func db (bt) = ("stakedLandsByOwner_" + bt)
465+
466+
467+func dc (bt) = ("stakedPiecesByOwner_" + bt)
468+
469+
470+func dd (de) = {
471+ let cj = de
472+ if ($isInstanceOf(cj, "String"))
471473 then {
472- let de = ci
473- de
474+ let df = cj
475+ df
474476 }
475477 else throw("fail to cast into String")
476478 }
477479
478480
479-func df (dd) = {
480- let ci = dd
481- if ($isInstanceOf(ci, "Int"))
481+func dg (de) = {
482+ let cj = de
483+ if ($isInstanceOf(cj, "Int"))
482484 then {
483- let dg = ci
484- dg
485+ let dh = cj
486+ dh
485487 }
486488 else throw("fail to cast into Int")
487489 }
488490
489491
490-func dh (dd) = {
491- let ci = dd
492- if ($isInstanceOf(ci, "Boolean"))
492+func di (de) = {
493+ let cj = de
494+ if ($isInstanceOf(cj, "Boolean"))
493495 then {
494- let de = ci
495- de
496+ let df = cj
497+ df
496498 }
497499 else throw("fail to cast into Boolean")
498500 }
499501
500502
501-func di (dj) = {
502- let ci = dj
503- if (("S" == ci))
504- then cp
505- else if (("M" == ci))
506- then cq
507- else if (("L" == ci))
508- then cr
509- else if (("XL" == ci))
510- then cs
511- else if (("XXL" == ci))
512- then ct
503+func dj (dk) = {
504+ let cj = dk
505+ if (("S" == cj))
506+ then cq
507+ else if (("M" == cj))
508+ then cr
509+ else if (("L" == cj))
510+ then cs
511+ else if (("XL" == cj))
512+ then ct
513+ else if (("XXL" == cj))
514+ then cu
513515 else throw("Unknown land size")
514516 }
515517
516518
517-func dk (de) = isDefined(parseInt(de))
518-
519-
520-func dl () = "contractsBlocked"
521-
522-
523-func dm (b) = ("lastTxIdByUser_" + b)
524-
525-
526-func dn (do,dp,dq) = {
527- let dr = value(blockInfoByHeight(dp))
528- let ds = sha256((value(dr.vrf) + dq))
529- (toInt(ds) % do)
530- }
531-
532-
533-let dt = {
534- let ci = cg
535- if ((base58'2W' == ci))
519+func dl (df) = isDefined(parseInt(df))
520+
521+
522+func dm () = "contractsBlocked"
523+
524+
525+func dn (b) = ("lastTxIdByUser_" + b)
526+
527+
528+func do (dp,dq,dr) = {
529+ let ds = value(blockInfoByHeight(dq))
530+ let dt = sha256((value(ds.vrf) + dr))
531+ (toInt(dt) % dp)
532+ }
533+
534+
535+let du = {
536+ let cj = ch
537+ if ((base58'2W' == cj))
536538 then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv")
537- else if ((base58'2T' == ci))
539+ else if ((base58'2T' == cj))
538540 then this
539541 else throw("Unknown chain")
540542 }
541543
542-let du = {
543- let ci = cg
544- if ((base58'2W' == ci))
544+let dv = {
545+ let cj = ch
546+ if ((base58'2W' == cj))
545547 then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb")
546- else if ((base58'2T' == ci))
548+ else if ((base58'2T' == cj))
547549 then this
548550 else throw("Unknown chain")
549551 }
550552
551-let dv = {
552- let ci = cg
553- if ((base58'2W' == ci))
553+let dw = {
554+ let cj = ch
555+ if ((base58'2W' == cj))
554556 then if (ce)
555557 then base58'CWsMtTZC5BjjoL4Q1ayW4Wwb1ehGACQB6DrKyPgotKfm'
556558 else base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
557- else if ((base58'2T' == ci))
559+ else if ((base58'2T' == cj))
558560 then base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
559561 else throw("Unknown chain")
560562 }
561563
562-let dw = base64'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=='
563-
564-let dx = 300000
565-
566-let dy = 5000000
567-
568-let dz = 50
569-
570-let dA = 10000000
571-
572-let dB = {
573- let ci = cg
574- if ((base58'2W' == ci))
564+let dx = base64'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=='
565+
566+let dy = 300000
567+
568+let dz = 5000000
569+
570+let dA = 50
571+
572+let dB = 10000000
573+
574+let dC = {
575+ let cj = ch
576+ if ((base58'2W' == cj))
575577 then 252289527462
576- else if ((base58'2T' == ci))
578+ else if ((base58'2T' == cj))
577579 then 2522895274
578580 else throw("Unknown chain")
579581 }
580582
581-let dC = {
582- let ci = cg
583- if ((base58'2W' == ci))
583+let dD = {
584+ let cj = ch
585+ if ((base58'2W' == cj))
584586 then 250000000
585- else if ((base58'2T' == ci))
587+ else if ((base58'2T' == cj))
586588 then 250000000
587589 else throw("Unknown chain")
588590 }
589591
590-let dD = toBigInt(5)
591-
592-let dE = toBigInt(20)
593-
594-let dF = toBigInt((20 * 20))
595-
596-let dG = toBigInt(((20 * 20) * 20))
597-
598-let dH = toBigInt((((20 * 20) * 20) * 20))
599-
600-let dI = toBigInt(((((20 * 20) * 20) * 20) * 20))
601-
602-let dJ = 500
603-
604-func dK () = "nextLandNum"
605-
606-
607-func dL (dM) = ("lcn_" + dM)
608-
609-
610-func dN (dO) = ("la_" + dO)
611-
612-
613-func dP (bm,bt) = ((("ilao_" + bm) + "_") + bt)
614-
615-
616-func dQ (dO) = ("lo_" + dO)
617-
618-
619-func dR (dM) = ("duckByCustomName_" + dM)
620-
621-
622-func dS (dM) = ("accountByCustomName_" + dM)
623-
624-
625-func dT () = "oldiesList"
626-
627-
628-let dU = 0
629-
630-let dV = 1
631-
632-let dW = 2
633-
634-let dX = 0
635-
636-let dY = 5
637-
638-let dZ = 6
639-
640-let ea = 7
641-
642-func eb (dO,dj) = ((aA + dO) + dj)
643-
644-
645-func ec (ed,ee) = {
646- let ef = if ((ed >= 0))
647- then (((ed + ee) - 1) / ee)
648- else -((((-(ed) + ee) - 1) / ee))
649- (ef * co)
650- }
651-
652-
653-func eg (eh,ei) = {
654- let ej = (((((ei[0] + ei[1]) + ei[2]) + ei[3]) + ei[4]) + ei[5])
655- if ((0 >= ej))
592+let dE = toBigInt(5)
593+
594+let dF = toBigInt(20)
595+
596+let dG = toBigInt((20 * 20))
597+
598+let dH = toBigInt(((20 * 20) * 20))
599+
600+let dI = toBigInt((((20 * 20) * 20) * 20))
601+
602+let dJ = toBigInt(((((20 * 20) * 20) * 20) * 20))
603+
604+let dK = 500
605+
606+func dL () = "nextLandNum"
607+
608+
609+func dM (dN) = ("lcn_" + dN)
610+
611+
612+func dO (dP) = ("la_" + dP)
613+
614+
615+func dQ (bm,bt) = ((("ilao_" + bm) + "_") + bt)
616+
617+
618+func dR (dP) = ("lo_" + dP)
619+
620+
621+func dS (dN) = ("duckByCustomName_" + dN)
622+
623+
624+func dT (dN) = ("accountByCustomName_" + dN)
625+
626+
627+func dU () = "oldiesList"
628+
629+
630+let dV = 0
631+
632+let dW = 1
633+
634+let dX = 2
635+
636+let dY = 0
637+
638+let dZ = 5
639+
640+let ea = 6
641+
642+let eb = 7
643+
644+func ec (dP,dk) = ((aA + dP) + dk)
645+
646+
647+func ed (ee,ef) = {
648+ let eg = if ((ee >= 0))
649+ then (((ee + ef) - 1) / ef)
650+ else -((((-(ee) + ef) - 1) / ef))
651+ (eg * cp)
652+ }
653+
654+
655+func eh (ei,ej) = {
656+ let ek = (((((ej[0] + ej[1]) + ej[2]) + ej[3]) + ej[4]) + ej[5])
657+ if ((0 >= ek))
656658 then throw("Zero weights sum")
657659 else {
658- let ek = fraction(eh, cn, ej)
659- func el (em,en) = (em :+ fraction(en, ek, cn))
660-
661- let eo = ei
662- let ep = size(eo)
663- let eq = nil
664- func er (es,et) = if ((et >= ep))
665- then es
666- else el(es, eo[et])
667-
668- func eu (es,et) = if ((et >= ep))
669- then es
660+ let el = fraction(ei, co, ek)
661+ func em (en,eo) = (en :+ fraction(eo, el, co))
662+
663+ let ep = ej
664+ let eq = size(ep)
665+ let er = nil
666+ func es (et,eu) = if ((eu >= eq))
667+ then et
668+ else em(et, ep[eu])
669+
670+ func ev (et,eu) = if ((eu >= eq))
671+ then et
670672 else throw("List size exceeds 6")
671673
672- eu(er(er(er(er(er(er(eq, 0), 1), 2), 3), 4), 5), 6)
673- }
674- }
675-
676-
677-func ev (eh) = {
678- let ew = split(value(getString(cX())), "_")
679- if ((size(ew) != aD))
674+ ev(es(es(es(es(es(es(er, 0), 1), 2), 3), 4), 5), 6)
675+ }
676+ }
677+
678+
679+func ew (ei) = {
680+ let ex = split(value(getString(cY())), "_")
681+ if ((size(ex) != aD))
680682 then throw("Wrong proportions data")
681683 else {
682- let ex = [parseIntValue(ew[0]), parseIntValue(ew[1]), parseIntValue(ew[2]), parseIntValue(ew[3]), parseIntValue(ew[4]), parseIntValue(ew[5])]
683- eg(eh, ex)
684- }
685- }
686-
687-
688-func ey (ez,eA,eB) = {
689- let eC = ev(eB)
690- func eD (em,cJ) = {
691- let eE = (parseIntValue(eA[cJ]) - eC[cJ])
692- if ((0 > eE))
693- then throw(((((("Not enough material idx=" + toString(cJ)) + ", you have ") + eA[cJ]) + ", but need ") + toString(eC[cJ])))
694- else (em :+ toString(eE))
684+ let ey = [parseIntValue(ex[0]), parseIntValue(ex[1]), parseIntValue(ex[2]), parseIntValue(ex[3]), parseIntValue(ex[4]), parseIntValue(ex[5])]
685+ eh(ei, ey)
686+ }
687+ }
688+
689+
690+func ez (eA,eB,eC) = {
691+ let eD = ew(eC)
692+ func eE (en,cK) = {
693+ let eF = (parseIntValue(eB[cK]) - eD[cK])
694+ if ((0 > eF))
695+ then throw(((((("Not enough material idx=" + toString(cK)) + ", you have ") + eB[cK]) + ", but need ") + toString(eD[cK])))
696+ else (en :+ toString(eF))
695697 }
696698
697- if (ez)
699+ if (eA)
698700 then {
699- let eo = cu
700- let ep = size(eo)
701- let eq = nil
702- func er (es,et) = if ((et >= ep))
703- then es
704- else eD(es, eo[et])
705-
706- func eu (es,et) = if ((et >= ep))
707- then es
701+ let ep = cv
702+ let eq = size(ep)
703+ let er = nil
704+ func es (et,eu) = if ((eu >= eq))
705+ then et
706+ else eE(et, ep[eu])
707+
708+ func ev (et,eu) = if ((eu >= eq))
709+ then et
708710 else throw("List size exceeds 6")
709711
710- eu(er(er(er(er(er(er(eq, 0), 1), 2), 3), 4), 5), 6)
711- }
712- else eA
713- }
714-
715-
716-func eF (eG,eH) = if ((eH == ""))
717- then $Tuple2(eG, false)
712+ ev(es(es(es(es(es(es(er, 0), 1), 2), 3), 4), 5), 6)
713+ }
714+ else eB
715+ }
716+
717+
718+func eG (eH,eI) = if ((eI == ""))
719+ then $Tuple2(eH, false)
718720 else {
719- func eI (em,eJ) = {
720- let eK = split(eJ, ",")
721- if ((size(eK) != 2))
721+ func eJ (en,eK) = {
722+ let eL = split(eK, ",")
723+ if ((size(eL) != 2))
722724 then throw("Incorrect format, should be index,amount")
723725 else {
724- let cJ = parseIntValue(eK[0])
725- if (if ((0 > cJ))
726+ let cK = parseIntValue(eL[0])
727+ if (if ((0 > cK))
726728 then true
727- else (cJ >= size(aP)))
729+ else (cK >= size(aP)))
728730 then throw("Unknown product idx")
729731 else {
730- let eL = parseIntValue(eK[1])
731- let eM = split(em._1, (eK[0] + ":"))
732- if ((size(eM) != 2))
733- then throw((("You don't have " + aL[cJ]) + " equipped"))
732+ let eM = parseIntValue(eL[1])
733+ let eN = split(en._1, (eL[0] + ":"))
734+ if ((size(eN) != 2))
735+ then throw((("You don't have " + aL[cK]) + " equipped"))
734736 else {
735- let eN = eM[1]
736- let eO = if (dk(take(drop(eN, 1), 1)))
737+ let eO = eN[1]
738+ let eP = if (dl(take(drop(eO, 1), 1)))
737739 then 2
738740 else 1
739- let eP = parseIntValue(take(eN, eO))
740- let eQ = drop(eN, eO)
741- let eR = if ((eP >= eL))
742- then (eP - eL)
743- else throw(((((("You equipped " + toString(eP)) + " of ") + aL[cJ]) + ", but tried to use ") + toString(eL)))
744- $Tuple2(((((eM[0] + eK[0]) + ":") + toString(eR)) + eQ), if (em._2)
741+ let eQ = parseIntValue(take(eO, eP))
742+ let eR = drop(eO, eP)
743+ let eS = if ((eQ >= eM))
744+ then (eQ - eM)
745+ else throw(((((("You equipped " + toString(eQ)) + " of ") + aL[cK]) + ", but tried to use ") + toString(eM)))
746+ $Tuple2(((((eN[0] + eL[0]) + ":") + toString(eS)) + eR), if (en._2)
745747 then true
746- else if (if ((cJ >= 6))
747- then (8 >= cJ)
748+ else if (if ((cK >= 6))
749+ then (8 >= cK)
748750 else false)
749- then (eR == 0)
751+ then (eS == 0)
750752 else false)
751753 }
752754 }
753755 }
754756 }
755757
756- let eo = split(eH, "_")
757- let ep = size(eo)
758- let eq = $Tuple2(eG, false)
759- func er (es,et) = if ((et >= ep))
760- then es
761- else eI(es, eo[et])
762-
763- func eu (es,et) = if ((et >= ep))
764- then es
758+ let ep = split(eI, "_")
759+ let eq = size(ep)
760+ let er = $Tuple2(eH, false)
761+ func es (et,eu) = if ((eu >= eq))
762+ then et
763+ else eJ(et, ep[eu])
764+
765+ func ev (et,eu) = if ((eu >= eq))
766+ then et
765767 else throw("List size exceeds 10")
766768
767- eu(er(er(er(er(er(er(er(er(er(er(eq, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
769+ ev(es(es(es(es(es(es(es(es(es(es(er, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
768770 }
769771
770772
771-func eS (eT) = {
772- let eU = if ((eT == ""))
773+func eT (eU) = {
774+ let eV = if ((eU == ""))
773775 then nil
774- else split_4C(eT, "_")
775- func eV (em,cd) = {
776- let eW = (size(em) / 8)
777- let eP = if ((size(eU) > eW))
778- then parseIntValue(eU[eW])
776+ else split_4C(eU, "_")
777+ func eW (en,cd) = {
778+ let eX = (size(en) / 8)
779+ let eQ = if ((size(eV) > eX))
780+ then parseIntValue(eV[eX])
779781 else 0
780- (em + toBytes(eP))
782+ (en + toBytes(eQ))
781783 }
782784
783- let eo = aP
784- let ep = size(eo)
785- let eq = base58''
786- func er (es,et) = if ((et >= ep))
787- then es
788- else eV(es, eo[et])
789-
790- func eu (es,et) = if ((et >= ep))
791- then es
785+ let ep = aP
786+ let eq = size(ep)
787+ let er = base58''
788+ func es (et,eu) = if ((eu >= eq))
789+ then et
790+ else eW(et, ep[eu])
791+
792+ func ev (et,eu) = if ((eu >= eq))
793+ then et
792794 else throw("List size exceeds 50")
793795
794- eu(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(eq, 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)
795- }
796-
797-
798-func eX (eY) = {
799- func eZ (em,cd) = {
800- let eW = size(em)
801- let fa = take(drop(eY, (8 * eW)), 8)
802- (em :+ toString(toInt(fa)))
796+ ev(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(er, 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)
797+ }
798+
799+
800+func eY (eZ) = {
801+ func fa (en,cd) = {
802+ let eX = size(en)
803+ let fb = take(drop(eZ, (8 * eX)), 8)
804+ (en :+ toString(toInt(fb)))
803805 }
804806
805807 makeString_2C({
806- let eo = aP
807- let ep = size(eo)
808- let eq = nil
809- func er (es,et) = if ((et >= ep))
810- then es
811- else eZ(es, eo[et])
812-
813- func eu (es,et) = if ((et >= ep))
814- then es
808+ let ep = aP
809+ let eq = size(ep)
810+ let er = nil
811+ func es (et,eu) = if ((eu >= eq))
812+ then et
813+ else fa(et, ep[eu])
814+
815+ func ev (et,eu) = if ((eu >= eq))
816+ then et
815817 else throw("List size exceeds 50")
816818
817- eu(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(eq, 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)
819+ ev(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(er, 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)
818820 }, "_")
819821 }
820822
821823
822-func fb (fc,fd) = {
823- func fe (em,eW) = {
824- let ff = if ((size(fc) > (7 + eW)))
825- then fc[(7 + eW)]
824+func fc (fd,fe) = {
825+ func ff (en,eX) = {
826+ let fg = if ((size(fd) > (7 + eX)))
827+ then fd[(7 + eX)]
826828 else 0
827- if ((parseIntValue(fd[eW]) > (fc[eW] + ff)))
828- then throw(("Requirement not satisfied: " + i[eW]))
829+ if ((parseIntValue(fe[eX]) > (fd[eX] + fg)))
830+ then throw(("Requirement not satisfied: " + i[eX]))
829831 else true
830832 }
831833
832- let eo = [0, 1, 2, 3, 4, 5, 6]
833- let ep = size(eo)
834- let eq = false
835- func er (es,et) = if ((et >= ep))
836- then es
837- else fe(es, eo[et])
838-
839- func eu (es,et) = if ((et >= ep))
840- then es
834+ let ep = [0, 1, 2, 3, 4, 5, 6]
835+ let eq = size(ep)
836+ let er = false
837+ func es (et,eu) = if ((eu >= eq))
838+ then et
839+ else ff(et, ep[eu])
840+
841+ func ev (et,eu) = if ((eu >= eq))
842+ then et
841843 else throw("List size exceeds 7")
842844
843- eu(er(er(er(er(er(er(er(eq, 0), 1), 2), 3), 4), 5), 6), 7)
844- }
845-
846-
847-func fg (fh,eU,fi,fc,fj,fk) = {
848- let eK = split(fh, ":")
849- if ((size(eK) != 2))
845+ ev(es(es(es(es(es(es(es(er, 0), 1), 2), 3), 4), 5), 6), 7)
846+ }
847+
848+
849+func fh (fi,eV,fj,fd,fk,fl) = {
850+ let eL = split(fi, ":")
851+ if ((size(eL) != 2))
850852 then throw("Incorrect format, should be index:amount")
851- else if (if (!(fi))
852- then (size(eK[0]) != 2)
853+ else if (if (!(fj))
854+ then (size(eL[0]) != 2)
853855 else false)
854856 then throw("Product idx should be 2 digits, zero padded")
855857 else {
856- let fl = parseIntValue(eK[0])
857- let fm = parseIntValue(eK[1])
858- if (!(containsElement(aO, fl)))
859- then throw((("Product '" + aL[fl]) + "' cannot be used for land defense"))
860- else if ((0 > fm))
858+ let fm = parseIntValue(eL[0])
859+ let fn = parseIntValue(eL[1])
860+ if (!(containsElement(aO, fm)))
861+ then throw((("Product '" + aL[fm]) + "' cannot be used for land defense"))
862+ else if ((0 > fn))
861863 then throw("Count can't be negative")
862- else if ((fm > s))
863- then throw(((("Can't put more than " + toString(s)) + " of ") + aL[fl]))
864- else if ((fm == 0))
865- then $Tuple3(eU, fj, fk)
864+ else if ((fn > s))
865+ then throw(((("Can't put more than " + toString(s)) + " of ") + aL[fm]))
866+ else if ((fn == 0))
867+ then $Tuple3(eV, fk, fl)
866868 else {
867- let fn = take(eU, (8 * fl))
868- let eP = toInt(take(drop(eU, (8 * fl)), 8))
869- let eQ = drop(eU, (8 * (fl + 1)))
870- let cd = split(aP[fl], "_")
871- if (if (!(fi))
872- then (fm > eP)
869+ let fo = take(eV, (8 * fm))
870+ let eQ = toInt(take(drop(eV, (8 * fm)), 8))
871+ let eR = drop(eV, (8 * (fm + 1)))
872+ let cd = split(aP[fm], "_")
873+ if (if (!(fj))
874+ then (fn > eQ)
873875 else false)
874- then throw(((((("You have " + toString(eP)) + " of ") + aL[fl]) + ", but tried to use ") + toString(fm)))
876+ then throw(((((("You have " + toString(eQ)) + " of ") + aL[fm]) + ", but tried to use ") + toString(fn)))
875877 else {
876- let eR = if (if (!(fi))
877- then fb(fc, split(cd[aS], ","))
878+ let eS = if (if (!(fj))
879+ then fc(fd, split(cd[aS], ","))
878880 else false)
879- then (eP - fm)
880- else (eP + fm)
881- let fo = (ec(eR, aU) - ec(eP, aU))
882- $Tuple3(((fn + toBytes(eR)) + eQ), (fj + fo), (fk - fo))
881+ then (eQ - fn)
882+ else (eQ + fn)
883+ let fp = (ed(eS, aU) - ed(eQ, aU))
884+ $Tuple3(((fo + toBytes(eS)) + eR), (fk + fp), (fl - fp))
883885 }
884886 }
885887 }
886888 }
887889
888890
889-func fp (fh,eU,fi,fq,fr,fs,fc) = {
890- let eK = split(fh, ":")
891- if ((size(eK) != 2))
891+func fq (fi,eV,fj,fr,fs,ft,fd) = {
892+ let eL = split(fi, ":")
893+ if ((size(eL) != 2))
892894 then throw("Incorrect format, should be index:amount")
893- else if (if (!(fi))
894- then (size(eK[0]) != 2)
895+ else if (if (!(fj))
896+ then (size(eL[0]) != 2)
895897 else false)
896898 then throw("Product idx should be 2 digits, zero padded")
897899 else {
898- let fl = parseIntValue(eK[0])
899- let fm = parseIntValue(eK[1])
900- if (if ((0 > fl))
900+ let fm = parseIntValue(eL[0])
901+ let fn = parseIntValue(eL[1])
902+ if (if ((0 > fm))
901903 then true
902- else (fl >= size(aP)))
904+ else (fm >= size(aP)))
903905 then throw("Unknown product idx")
904- else if ((0 > fm))
906+ else if ((0 > fn))
905907 then throw("Count can't be negative")
906- else if ((fm > s))
907- then throw(((("Can't put more than " + toString(s)) + " of ") + aL[fl]))
908- else if ((fm == 0))
909- then $Tuple2(eU, false)
908+ else if ((fn > s))
909+ then throw(((("Can't put more than " + toString(s)) + " of ") + aL[fm]))
910+ else if ((fn == 0))
911+ then $Tuple2(eV, false)
910912 else {
911- let fn = take(eU, (8 * fl))
912- let eP = toInt(take(drop(eU, (8 * fl)), 8))
913- let eQ = drop(eU, (8 * (fl + 1)))
914- let cd = split(aP[fl], "_")
915- if (if (!(fi))
916- then (fm > eP)
913+ let fo = take(eV, (8 * fm))
914+ let eQ = toInt(take(drop(eV, (8 * fm)), 8))
915+ let eR = drop(eV, (8 * (fm + 1)))
916+ let cd = split(aP[fm], "_")
917+ if (if (!(fj))
918+ then (fn > eQ)
917919 else false)
918- then throw(((((("You have " + toString(eP)) + " of ") + aL[fl]) + ", but tried to use ") + toString(fm)))
920+ then throw(((((("You have " + toString(eQ)) + " of ") + aL[fm]) + ", but tried to use ") + toString(fn)))
919921 else {
920- let ft = if (if (!(fi))
921- then fb(fc, split(cd[aS], ","))
922+ let fu = if (if (!(fj))
923+ then fc(fd, split(cd[aS], ","))
922924 else false)
923925 then {
924- let fu = cd[aT]
925- if ((fu == ""))
926+ let fv = cd[aT]
927+ if ((fv == ""))
926928 then throw("Item cannot be equipped")
927929 else {
928- let fv = parseIntValue(fu)
929- let fw = (fv / 100)
930- if ((fq != fw))
930+ let fw = parseIntValue(fv)
931+ let fx = (fw / 100)
932+ if ((fr != fx))
931933 then throw("Segment incompatible")
932934 else {
933- let fx = ((fv % 100) / 10)
934- if ((fr != fx))
935+ let fy = ((fw % 100) / 10)
936+ if ((fs != fy))
935937 then throw("Slot incompatible")
936938 else {
937- let fy = (fv % 10)
938- if (if ((fs != 0))
939- then (fy > 1)
939+ let fz = (fw % 10)
940+ if (if ((ft != 0))
941+ then (fz > 1)
940942 else false)
941943 then throw("Big items should occupy slot 0")
942- else (fy > 1)
944+ else (fz > 1)
943945 }
944946 }
945947 }
946948 }
947949 else false
948- $Tuple2(((fn + toBytes((eP + (if (fi)
949- then fm
950- else -(fm))))) + eQ), ft)
950+ $Tuple2(((fo + toBytes((eQ + (if (fj)
951+ then fn
952+ else -(fn))))) + eR), fu)
951953 }
952954 }
953955 }
954956 }
955957
956958
957-func fz (fA,fB,fi,fq,fr,fC) = if ((fA != ""))
959+func fA (fB,fC,fj,fr,fs,fD) = if ((fB != ""))
958960 then {
959- let fD = split(fA, ",")
960- if ((size(fD) > r))
961+ let fE = split(fB, ",")
962+ if ((size(fE) > r))
961963 then throw("Wrong slots format")
962964 else {
963- let fE = fD[0]
964- let fF = if ((size(fD) > 1))
965- then fD[1]
965+ let fF = fE[0]
966+ let fG = if ((size(fE) > 1))
967+ then fE[1]
966968 else ""
967- if (if ((fE == ""))
968- then (fF == "")
969+ if (if ((fF == ""))
970+ then (fG == "")
969971 else false)
970- then fB
972+ then fC
971973 else {
972- let fG = if ((fE != ""))
973- then fp(fE, fB, fi, fq, fr, 0, fC)
974- else $Tuple2(fB, false)
975- if ((fF != ""))
976- then if (fG._2)
974+ let fH = if ((fF != ""))
975+ then fq(fF, fC, fj, fr, fs, 0, fD)
976+ else $Tuple2(fC, false)
977+ if ((fG != ""))
978+ then if (fH._2)
977979 then throw("Big item already occupies slot")
978- else fp(fF, fG._1, fi, fq, fr, 1, fC)._1
979- else fG._1
980+ else fq(fG, fH._1, fj, fr, fs, 1, fD)._1
981+ else fH._1
980982 }
981983 }
982984 }
983- else fB
984-
985-
986-func fH (fI,fJ,fi,fC) = {
987- func fq (em,fK) = {
988- let eW = em._1
989- let fr = split(fK, ";")
990- if ((size(fr) != q))
985+ else fC
986+
987+
988+func fI (fJ,fK,fj,fD) = {
989+ func fr (en,fL) = {
990+ let eX = en._1
991+ let fs = split(fL, ";")
992+ if ((size(fs) != q))
991993 then throw("Wrong segment format")
992994 else {
993- let fL = fr[0]
994- let fM = fr[1]
995- if (if ((fL == ""))
996- then (fM == "")
995+ let fM = fs[0]
996+ let fN = fs[1]
997+ if (if ((fM == ""))
998+ then (fN == "")
997999 else false)
998- then $Tuple2((eW + 1), em._2)
1000+ then $Tuple2((eX + 1), en._2)
9991001 else {
1000- let fN = fz(fL, em._2, fi, eW, 0, fC)
1001- $Tuple2((eW + 1), fz(fM, fN, fi, eW, 1, fC))
1002+ let fO = fA(fM, en._2, fj, eX, 0, fD)
1003+ $Tuple2((eX + 1), fA(fN, fO, fj, eX, 1, fD))
10021004 }
10031005 }
10041006 }
10051007
1006-( let eo = fI
1007- let ep = size(eo)
1008- let eq = $Tuple2(0, fJ)
1009- func er (es,et) = if ((et >= ep))
1010- then es
1011- else fq(es, eo[et])
1012-
1013- func eu (es,et) = if ((et >= ep))
1014- then es
1008+( let ep = fJ
1009+ let eq = size(ep)
1010+ let er = $Tuple2(0, fK)
1011+ func es (et,eu) = if ((eu >= eq))
1012+ then et
1013+ else fr(et, ep[eu])
1014+
1015+ func ev (et,eu) = if ((eu >= eq))
1016+ then et
10151017 else throw("List size exceeds 6")
10161018
1017- eu(er(er(er(er(er(er(eq, 0), 1), 2), 3), 4), 5), 6))._2
1018- }
1019-
1020-
1021-func fO (fI,fJ,fj,fk,fi,fc) = if ((3 > size(fI)))
1019+ ev(es(es(es(es(es(es(er, 0), 1), 2), 3), 4), 5), 6))._2
1020+ }
1021+
1022+
1023+func fP (fJ,fK,fk,fl,fj,fd) = if ((3 > size(fJ)))
10221024 then throw("At least duck, mines and traps parts are required")
10231025 else {
1024- func fq (em,fK) = {
1025- let eW = em._1
1026- if ((eW == 0))
1027- then $Tuple4((eW + 1), em._2, em._3, em._4)
1026+ func fr (en,fL) = {
1027+ let eX = en._1
1028+ if ((eX == 0))
1029+ then $Tuple4((eX + 1), en._2, en._3, en._4)
10281030 else {
1029- let fP = fg(fK, em._2, fi, fc, em._3, em._4)
1030- $Tuple4((eW + 1), fP._1, fP._2, fP._3)
1031+ let fQ = fh(fL, en._2, fj, fd, en._3, en._4)
1032+ $Tuple4((eX + 1), fQ._1, fQ._2, fQ._3)
10311033 }
10321034 }
10331035
1034- let fQ = {
1035- let eo = fI
1036- let ep = size(eo)
1037- let eq = $Tuple4(0, fJ, fj, fk)
1038- func er (es,et) = if ((et >= ep))
1039- then es
1040- else fq(es, eo[et])
1041-
1042- func eu (es,et) = if ((et >= ep))
1043- then es
1036+ let fR = {
1037+ let ep = fJ
1038+ let eq = size(ep)
1039+ let er = $Tuple4(0, fK, fk, fl)
1040+ func es (et,eu) = if ((eu >= eq))
1041+ then et
1042+ else fr(et, ep[eu])
1043+
1044+ func ev (et,eu) = if ((eu >= eq))
1045+ then et
10441046 else throw("List size exceeds 10")
10451047
1046- eu(er(er(er(er(er(er(er(er(er(er(eq, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
1047- }
1048- $Tuple3(fQ._2, fQ._3, fQ._4)
1048+ ev(es(es(es(es(es(es(es(es(es(es(er, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
1049+ }
1050+ $Tuple3(fR._2, fR._3, fR._4)
10491051 }
10501052
10511053
1052-func fR (z) = {
1053- let fS = E(z)
1054- let fT = split(valueOrElse(getString(fS), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
1055- let fU = fH(fT, dw, true, nil)
1056- let fV = split(fT[o], ";")[1]
1057- let am = if ((fV == ""))
1054+func fS (z) = {
1055+ let fT = E(z)
1056+ let fU = split(valueOrElse(getString(fT), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
1057+ let fV = fI(fU, dx, true, nil)
1058+ let fW = split(fU[o], ";")[1]
1059+ let am = if ((fW == ""))
10581060 then 0
10591061 else {
1060- let fW = split(fV, ",")[0]
1061- if ((fW == ""))
1062+ let fX = split(fW, ",")[0]
1063+ if ((fX == ""))
10621064 then 0
10631065 else {
1064- let fh = split(fW, ":")
1065- let cJ = fh[0]
1066- let fX = fh[1]
1067- if (if (if (if (if ((cJ == "06"))
1066+ let fi = split(fX, ":")
1067+ let cK = fi[0]
1068+ let fY = fi[1]
1069+ if (if (if (if (if ((cK == "06"))
10681070 then true
1069- else (cJ == "07"))
1071+ else (cK == "07"))
10701072 then true
1071- else (cJ == "08"))
1072- then (fX != "")
1073+ else (cK == "08"))
1074+ then (fY != "")
10731075 else false)
1074- then (parseIntValue(fX) > 0)
1076+ then (parseIntValue(fY) > 0)
10751077 else false)
1076- then parseIntValue(split(aP[parseIntValue(cJ)], "_")[aR])
1078+ then parseIntValue(split(aP[parseIntValue(cK)], "_")[aR])
10771079 else 0
10781080 }
10791081 }
1080- let fC = ak(this, z, am, true)
1081- let fY = fH(fT, fU, false, fC)
1082- (fY == fY)
1083- }
1084-
1085-
1086-func fZ (ga,gb,gc,gd) = if ((size(ga) != aD))
1082+ let fD = ak(this, z, am, true)
1083+ let fZ = fI(fU, fV, false, fD)
1084+ (fZ == fZ)
1085+ }
1086+
1087+
1088+func ga (gb,gc,gd,ge) = if ((size(gb) != aD))
10871089 then throw("Wrong proportions data")
10881090 else {
1089- func ge (em,gf) = {
1090- let eE = (parseIntValue(ga[gf]) + ((gd * gb[gf]) * gc))
1091- if ((0 > eE))
1092- then throw(((((((("Panic! Pieces of type=" + toString(gf)) + ", sign=") + toString(gd)) + ", terrainCounts[i]=") + toString(gb[gf])) + ", landSizeIndex=") + toString(gc)))
1093- else (em :+ toString(eE))
1094- }
1095-
1096- let eo = cu
1097- let ep = size(eo)
1098- let eq = nil
1099- func er (es,et) = if ((et >= ep))
1100- then es
1101- else ge(es, eo[et])
1102-
1103- func eu (es,et) = if ((et >= ep))
1104- then es
1091+ func gf (en,gg) = {
1092+ let eF = (parseIntValue(gb[gg]) + ((ge * gc[gg]) * gd))
1093+ if ((0 > eF))
1094+ then throw(((((((("Panic! Pieces of type=" + toString(gg)) + ", sign=") + toString(ge)) + ", terrainCounts[i]=") + toString(gc[gg])) + ", landSizeIndex=") + toString(gd)))
1095+ else (en :+ toString(eF))
1096+ }
1097+
1098+ let ep = cv
1099+ let eq = size(ep)
1100+ let er = nil
1101+ func es (et,eu) = if ((eu >= eq))
1102+ then et
1103+ else gf(et, ep[eu])
1104+
1105+ func ev (et,eu) = if ((eu >= eq))
1106+ then et
11051107 else throw("List size exceeds 6")
11061108
1107- eu(er(er(er(er(er(er(eq, 0), 1), 2), 3), 4), 5), 6)
1109+ ev(es(es(es(es(es(es(er, 0), 1), 2), 3), 4), 5), 6)
11081110 }
11091111
11101112
1111-func gg (gb,gc,gd) = {
1112- let ga = split(valueOrElse(getString(cX()), "0_0_0_0_0_0"), "_")
1113- makeString(fZ(ga, gb, gc, gd), "_")
1114- }
1115-
1116-
1117-func gh (gi) = [(size(split(gi, "A")) - 1), (size(split(gi, "B")) - 1), (size(split(gi, "C")) - 1), (size(split(gi, "D")) - 1), (size(split(gi, "E")) - 1), (size(split(gi, "F")) - 1)]
1118-
1119-
1120-func gj (gk,gb,gl,gc,gm) = {
1121- func gn (em,gf) = {
1122- let go = ((fraction(gl, gm, aG) * gb[gf]) * gc)
1123- (em :+ toString((parseIntValue(gk[gf]) + go)))
1113+func gh (gc,gd,ge) = {
1114+ let gb = split(valueOrElse(getString(cY()), "0_0_0_0_0_0"), "_")
1115+ makeString(ga(gb, gc, gd, ge), "_")
1116+ }
1117+
1118+
1119+func gi (gj) = [(size(split(gj, "A")) - 1), (size(split(gj, "B")) - 1), (size(split(gj, "C")) - 1), (size(split(gj, "D")) - 1), (size(split(gj, "E")) - 1), (size(split(gj, "F")) - 1)]
1120+
1121+
1122+func gk (gl,gc,gm,gd,gn) = {
1123+ func go (en,gg) = {
1124+ let gp = ((fraction(gm, gn, aG) * gc[gg]) * gd)
1125+ (en :+ toString((parseIntValue(gl[gg]) + gp)))
11241126 }
11251127
1126- let ex = {
1127- let eo = cu
1128- let ep = size(eo)
1129- let eq = nil
1130- func er (es,et) = if ((et >= ep))
1131- then es
1132- else gn(es, eo[et])
1133-
1134- func eu (es,et) = if ((et >= ep))
1135- then es
1128+ let ey = {
1129+ let ep = cv
1130+ let eq = size(ep)
1131+ let er = nil
1132+ func es (et,eu) = if ((eu >= eq))
1133+ then et
1134+ else go(et, ep[eu])
1135+
1136+ func ev (et,eu) = if ((eu >= eq))
1137+ then et
11361138 else throw("List size exceeds 6")
11371139
1138- eu(er(er(er(er(er(er(eq, 0), 1), 2), 3), 4), 5), 6)
1140+ ev(es(es(es(es(es(es(er, 0), 1), 2), 3), 4), 5), 6)
11391141 }
1140- makeString(ex, "_")
1141- }
1142-
1143-
1144-func gp (gb,gl,gc,gm) = {
1145- func gn (em,gf) = {
1146- let go = ((fraction(gl, gm, aG) * gb[gf]) * gc)
1147- $Tuple2((em._1 :+ go), (em._2 + go))
1142+ makeString(ey, "_")
1143+ }
1144+
1145+
1146+func gq (gc,gm,gd,gn) = {
1147+ func go (en,gg) = {
1148+ let gp = ((fraction(gm, gn, aG) * gc[gg]) * gd)
1149+ $Tuple2((en._1 :+ gp), (en._2 + gp))
11481150 }
11491151
1150- let eo = cu
1151- let ep = size(eo)
1152- let eq = $Tuple2(nil, 0)
1153- func er (es,et) = if ((et >= ep))
1154- then es
1155- else gn(es, eo[et])
1156-
1157- func eu (es,et) = if ((et >= ep))
1158- then es
1152+ let ep = cv
1153+ let eq = size(ep)
1154+ let er = $Tuple2(nil, 0)
1155+ func es (et,eu) = if ((eu >= eq))
1156+ then et
1157+ else go(et, ep[eu])
1158+
1159+ func ev (et,eu) = if ((eu >= eq))
1160+ then et
11591161 else throw("List size exceeds 6")
11601162
1161- eu(er(er(er(er(er(er(eq, 0), 1), 2), 3), 4), 5), 6)
1162- }
1163-
1164-
1165-func gq (gr,gs,gt,gu) = {
1166- let gv = gt._1
1167- let gw = gt._2
1168- if ((gw == 0))
1169- then $Tuple2(makeString(gr, "_"), makeString(gs, "_"))
1170- else if ((gu >= gw))
1163+ ev(es(es(es(es(es(es(er, 0), 1), 2), 3), 4), 5), 6)
1164+ }
1165+
1166+
1167+func gr (gs,gt,gu,gv) = {
1168+ let gw = gu._1
1169+ let gx = gu._2
1170+ if ((gx == 0))
1171+ then $Tuple2(makeString(gs, "_"), makeString(gt, "_"))
1172+ else if ((gv >= gx))
11711173 then {
1172- func gx (em,gf) = (em :+ toString((parseIntValue(gr[gf]) + gv[gf])))
1173-
1174- let ex = {
1175- let eo = cu
1176- let ep = size(eo)
1177- let eq = nil
1178- func er (es,et) = if ((et >= ep))
1179- then es
1180- else gx(es, eo[et])
1181-
1182- func eu (es,et) = if ((et >= ep))
1183- then es
1174+ func gy (en,gg) = (en :+ toString((parseIntValue(gs[gg]) + gw[gg])))
1175+
1176+ let ey = {
1177+ let ep = cv
1178+ let eq = size(ep)
1179+ let er = nil
1180+ func es (et,eu) = if ((eu >= eq))
1181+ then et
1182+ else gy(et, ep[eu])
1183+
1184+ func ev (et,eu) = if ((eu >= eq))
1185+ then et
11841186 else throw("List size exceeds 6")
11851187
1186- eu(er(er(er(er(er(er(eq, 0), 1), 2), 3), 4), 5), 6)
1188+ ev(es(es(es(es(es(es(er, 0), 1), 2), 3), 4), 5), 6)
11871189 }
1188- $Tuple2(makeString(ex, "_"), makeString(gs, "_"))
1190+ $Tuple2(makeString(ey, "_"), makeString(gt, "_"))
11891191 }
11901192 else {
1191- func gy (em,gf) = {
1192- let gz = fraction(gv[gf], gu, gw)
1193- $Tuple2((em._1 :+ toString((parseIntValue(gr[gf]) + gz))), (em._2 :+ toString(((parseIntValue(gs[gf]) + gv[gf]) - gz))))
1193+ func gz (en,gg) = {
1194+ let gA = fraction(gw[gg], gv, gx)
1195+ $Tuple2((en._1 :+ toString((parseIntValue(gs[gg]) + gA))), (en._2 :+ toString(((parseIntValue(gt[gg]) + gw[gg]) - gA))))
11941196 }
11951197
1196- let ex = {
1197- let eo = cu
1198- let ep = size(eo)
1199- let eq = $Tuple2(nil, nil)
1200- func er (es,et) = if ((et >= ep))
1201- then es
1202- else gy(es, eo[et])
1203-
1204- func eu (es,et) = if ((et >= ep))
1205- then es
1198+ let ey = {
1199+ let ep = cv
1200+ let eq = size(ep)
1201+ let er = $Tuple2(nil, nil)
1202+ func es (et,eu) = if ((eu >= eq))
1203+ then et
1204+ else gz(et, ep[eu])
1205+
1206+ func ev (et,eu) = if ((eu >= eq))
1207+ then et
12061208 else throw("List size exceeds 6")
12071209
1208- eu(er(er(er(er(er(er(eq, 0), 1), 2), 3), 4), 5), 6)
1210+ ev(es(es(es(es(es(es(er, 0), 1), 2), 3), 4), 5), 6)
12091211 }
1210- $Tuple2(makeString(ex._1, "_"), makeString(ex._2, "_"))
1212+ $Tuple2(makeString(ey._1, "_"), makeString(ey._2, "_"))
12111213 }
12121214 }
12131215
12141216
1215-func gA (gB) = if ((gB >= toBigInt(0)))
1216- then gB
1217- else -(gB)
1218-
1219-
1220-let gC = [[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]]
1221-
1222-func gD (dg,gE) = {
1223- let gF = toInt((dg % dE))
1224- let gG = if ((gE[0] > gF))
1217+func gB (gC) = if ((gC >= toBigInt(0)))
1218+ then gC
1219+ else -(gC)
1220+
1221+
1222+let gD = [[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]]
1223+
1224+func gE (dh,gF) = {
1225+ let gG = toInt((dh % dF))
1226+ let gH = if ((gF[0] > gG))
12251227 then "A"
1226- else if ((gE[1] > gF))
1228+ else if ((gF[1] > gG))
12271229 then "B"
1228- else if ((gE[2] > gF))
1230+ else if ((gF[2] > gG))
12291231 then "C"
1230- else if ((gE[3] > gF))
1232+ else if ((gF[3] > gG))
12311233 then "D"
1232- else if ((gE[4] > gF))
1234+ else if ((gF[4] > gG))
12331235 then "E"
12341236 else "F"
1235- gG
1236- }
1237-
1238-
1239-func gH (gI,gJ) = {
1240- let gK = gC[gJ]
1241- func gL (em,en) = $Tuple2((((((em._1 + gD(em._2, gK)) + gD((em._2 / dE), gK)) + gD((em._2 / dF), gK)) + gD((em._2 / dG), gK)) + gD((em._2 / dH), gK)), (em._2 / dI))
1242-
1243- let fQ = {
1244- let eo = [1, 2, 3, 4, 5]
1245- let ep = size(eo)
1246- let eq = $Tuple2("", (gI / dD))
1247- func er (es,et) = if ((et >= ep))
1248- then es
1249- else gL(es, eo[et])
1250-
1251- func eu (es,et) = if ((et >= ep))
1252- then es
1237+ gH
1238+ }
1239+
1240+
1241+func gI (gJ,gK) = {
1242+ let gL = gD[gK]
1243+ func gM (en,eo) = $Tuple2((((((en._1 + gE(en._2, gL)) + gE((en._2 / dF), gL)) + gE((en._2 / dG), gL)) + gE((en._2 / dH), gL)) + gE((en._2 / dI), gL)), (en._2 / dJ))
1244+
1245+ let fR = {
1246+ let ep = [1, 2, 3, 4, 5]
1247+ let eq = size(ep)
1248+ let er = $Tuple2("", (gJ / dE))
1249+ func es (et,eu) = if ((eu >= eq))
1250+ then et
1251+ else gM(et, ep[eu])
1252+
1253+ func ev (et,eu) = if ((eu >= eq))
1254+ then et
12531255 else throw("List size exceeds 5")
12541256
1255- eu(er(er(er(er(er(eq, 0), 1), 2), 3), 4), 5)
1257+ ev(es(es(es(es(es(er, 0), 1), 2), 3), 4), 5)
12561258 }
1257- fQ._1
1258- }
1259-
1260-
1261-let gM = [7, 2, 15, 19, 8, 24, 1, 21, 16, 5, 0, 22, 20, 23, 11, 4, 18, 12, 6, 10, 3, 17, 13, 9, 14]
1262-
1263-let gN = ["A", "B", "C", "D", "E", "F"]
1264-
1265-func gO (gP,gc) = {
1266- func gQ (em,de) = {
1267- let eW = em._2
1268- let gR = parseIntValue(de)
1269- let gB = if ((gR == 0))
1259+ fR._1
1260+ }
1261+
1262+
1263+let gN = [7, 2, 15, 19, 8, 24, 1, 21, 16, 5, 0, 22, 20, 23, 11, 4, 18, 12, 6, 10, 3, 17, 13, 9, 14]
1264+
1265+let gO = ["A", "B", "C", "D", "E", "F"]
1266+
1267+func gP (gQ,gd) = {
1268+ func gR (en,df) = {
1269+ let eX = en._2
1270+ let gS = parseIntValue(df)
1271+ let gC = if ((gS == 0))
12701272 then 0
1271- else if ((gR >= (4 * gc)))
1272- then (gR / gc)
1273- else if ((gR > (3 * gc)))
1273+ else if ((gS >= (4 * gd)))
1274+ then (gS / gd)
1275+ else if ((gS > (3 * gd)))
12741276 then 3
1275- else (((gR - 1) / gc) + 1)
1276- $Tuple3((em._1 :+ gB), (em._2 + 1), (em._3 + gB))
1277+ else (((gS - 1) / gd) + 1)
1278+ $Tuple3((en._1 :+ gC), (en._2 + 1), (en._3 + gC))
12771279 }
12781280
1279- let fQ = {
1280- let eo = gP
1281- let ep = size(eo)
1282- let eq = $Tuple3(nil, 0, 0)
1283- func er (es,et) = if ((et >= ep))
1284- then es
1285- else gQ(es, eo[et])
1286-
1287- func eu (es,et) = if ((et >= ep))
1288- then es
1281+ let fR = {
1282+ let ep = gQ
1283+ let eq = size(ep)
1284+ let er = $Tuple3(nil, 0, 0)
1285+ func es (et,eu) = if ((eu >= eq))
1286+ then et
1287+ else gR(et, ep[eu])
1288+
1289+ func ev (et,eu) = if ((eu >= eq))
1290+ then et
12891291 else throw("List size exceeds 6")
12901292
1291- eu(er(er(er(er(er(er(eq, 0), 1), 2), 3), 4), 5), 6)
1293+ ev(es(es(es(es(es(es(er, 0), 1), 2), 3), 4), 5), 6)
12921294 }
1293- let gS = fQ._1
1294- let gT = value(indexOf(gS, max(gS)))
1295- let gU = (fQ._3 - 25)
1296- func gV (em,cJ) = {
1297- let gW = if ((cJ == gT))
1298- then (gS[cJ] - gU)
1299- else gS[cJ]
1300- let gX = if ((gW == 0))
1295+ let gT = fR._1
1296+ let gU = value(indexOf(gT, max(gT)))
1297+ let gV = (fR._3 - 25)
1298+ func gW (en,cK) = {
1299+ let gX = if ((cK == gU))
1300+ then (gT[cK] - gV)
1301+ else gT[cK]
1302+ let gY = if ((gX == 0))
13011303 then nil
1302- else split(drop(toString(pow(10, 0, gW, 0, 0, DOWN)), 1), "")
1303- let fv = gN[cJ]
1304- func gY (gZ,ha) = (gZ :+ fv)
1305-
1306- let hb = {
1307- let eo = gX
1308- let ep = size(eo)
1309- let eq = nil
1310- func hc (es,et) = if ((et >= ep))
1311- then es
1312- else gY(es, eo[et])
1313-
1314- func hd (es,et) = if ((et >= ep))
1315- then es
1304+ else split(drop(toString(pow(10, 0, gX, 0, 0, DOWN)), 1), "")
1305+ let fw = gO[cK]
1306+ func gZ (ha,hb) = (ha :+ fw)
1307+
1308+ let hc = {
1309+ let ep = gY
1310+ let eq = size(ep)
1311+ let er = nil
1312+ func hd (et,eu) = if ((eu >= eq))
1313+ then et
1314+ else gZ(et, ep[eu])
1315+
1316+ func he (et,eu) = if ((eu >= eq))
1317+ then et
13161318 else throw("List size exceeds 25")
13171319
1318- hd(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(eq, 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)
1319- }
1320- (em ++ hb)
1320+ he(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(er, 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)
1321+ }
1322+ (en ++ hc)
13211323 }
13221324
1323- let ex = {
1324- let eo = cu
1325- let ep = size(eo)
1326- let eq = nil
1327- func hc (es,et) = if ((et >= ep))
1328- then es
1329- else gV(es, eo[et])
1330-
1331- func hd (es,et) = if ((et >= ep))
1332- then es
1325+ let ey = {
1326+ let ep = cv
1327+ let eq = size(ep)
1328+ let er = nil
1329+ func hd (et,eu) = if ((eu >= eq))
1330+ then et
1331+ else gW(et, ep[eu])
1332+
1333+ func he (et,eu) = if ((eu >= eq))
1334+ then et
13331335 else throw("List size exceeds 6")
13341336
1335- hd(hc(hc(hc(hc(hc(hc(eq, 0), 1), 2), 3), 4), 5), 6)
1337+ he(hd(hd(hd(hd(hd(hd(er, 0), 1), 2), 3), 4), 5), 6)
13361338 }
1337- func he (em,eW) = (em + ex[eW])
1338-
1339- let eo = gM
1340- let ep = size(eo)
1341- let eq = ""
1342- func hf (es,et) = if ((et >= ep))
1343- then es
1344- else he(es, eo[et])
1345-
1346- func hg (es,et) = if ((et >= ep))
1347- then es
1339+ func hf (en,eX) = (en + ey[eX])
1340+
1341+ let ep = gN
1342+ let eq = size(ep)
1343+ let er = ""
1344+ func hg (et,eu) = if ((eu >= eq))
1345+ then et
1346+ else hf(et, ep[eu])
1347+
1348+ func hh (et,eu) = if ((eu >= eq))
1349+ then et
13481350 else throw("List size exceeds 25")
13491351
1350- hg(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(eq, 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)
1351- }
1352-
1353-
1354-func hh (hi) = {
1355- let fP = split(valueOrElse(getString(hi), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
1356-[toString(valueOrElse(parseInt(fP[be]), 0)), if ((size(split(fP[bf], "_")) == aD))
1357- then fP[bf]
1358- else "0_0_0_0_0_0", if ((size(split(fP[bg], "_")) == aD))
1359- then fP[bg]
1360- else "0_0_0_0_0_0", fP[bh]]
1361- }
1362-
1363-
1364-func hj (hk) = {
1365- let eK = split(hk, "_")
1366- ((aH * (parseIntValue(eK[1]) + 1)) * parseIntValue(eK[0]))
1367- }
1368-
1369-
1370-func hl (hm) = {
1371- let hn = hm[aY]
1372- func ho (em,hp) = (em + parseIntValue(hp))
1373-
1374- func hq (em,hp) = {
1375- let cJ = em._1
1376- let ef = (((parseIntValue(hp) + aU) - 1) / aU)
1377- $Tuple2((cJ + 1), (em._2 + (ef * co)))
1352+ hh(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(er, 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)
1353+ }
1354+
1355+
1356+func hi (hj) = {
1357+ let fQ = split(valueOrElse(getString(hj), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
1358+[toString(valueOrElse(parseInt(fQ[be]), 0)), if ((size(split(fQ[bf], "_")) == aD))
1359+ then fQ[bf]
1360+ else "0_0_0_0_0_0", if ((size(split(fQ[bg], "_")) == aD))
1361+ then fQ[bg]
1362+ else "0_0_0_0_0_0", fQ[bh]]
1363+ }
1364+
1365+
1366+func hk (hl) = {
1367+ let eL = split(hl, "_")
1368+ ((aH * (parseIntValue(eL[1]) + 1)) * parseIntValue(eL[0]))
1369+ }
1370+
1371+
1372+func hm (hn) = {
1373+ let ho = hn[aY]
1374+ func hp (en,hq) = (en + parseIntValue(hq))
1375+
1376+ func hr (en,hq) = {
1377+ let cK = en._1
1378+ let eg = (((parseIntValue(hq) + aU) - 1) / aU)
1379+ $Tuple2((cK + 1), (en._2 + (eg * cp)))
13781380 }
13791381
1380- let hr = {
1381- let eo = split(hm[aW], "_")
1382- let ep = size(eo)
1383- let eq = 0
1384- func er (es,et) = if ((et >= ep))
1385- then es
1386- else ho(es, eo[et])
1387-
1388- func eu (es,et) = if ((et >= ep))
1389- then es
1382+ let hs = {
1383+ let ep = split(hn[aW], "_")
1384+ let eq = size(ep)
1385+ let er = 0
1386+ func es (et,eu) = if ((eu >= eq))
1387+ then et
1388+ else hp(et, ep[eu])
1389+
1390+ func ev (et,eu) = if ((eu >= eq))
1391+ then et
13901392 else throw("List size exceeds 6")
13911393
1392- eu(er(er(er(er(er(er(eq, 0), 1), 2), 3), 4), 5), 6)
1394+ ev(es(es(es(es(es(es(er, 0), 1), 2), 3), 4), 5), 6)
13931395 }
1394- let hs = {
1395- let eo = split(hm[aX], "_")
1396- let ep = size(eo)
1397- let eq = 0
1398- func hc (es,et) = if ((et >= ep))
1399- then es
1400- else ho(es, eo[et])
1401-
1402- func hd (es,et) = if ((et >= ep))
1403- then es
1396+ let ht = {
1397+ let ep = split(hn[aX], "_")
1398+ let eq = size(ep)
1399+ let er = 0
1400+ func hd (et,eu) = if ((eu >= eq))
1401+ then et
1402+ else hp(et, ep[eu])
1403+
1404+ func he (et,eu) = if ((eu >= eq))
1405+ then et
14041406 else throw("List size exceeds 6")
14051407
1406- hd(hc(hc(hc(hc(hc(hc(eq, 0), 1), 2), 3), 4), 5), 6)
1408+ he(hd(hd(hd(hd(hd(hd(er, 0), 1), 2), 3), 4), 5), 6)
14071409 }
1408- let ht = if ((hn == ""))
1410+ let hu = if ((ho == ""))
14091411 then 0
1410- else ( let eo = split_4C(hn, "_")
1411- let ep = size(eo)
1412- let eq = $Tuple2(0, 0)
1413- func hf (es,et) = if ((et >= ep))
1414- then es
1415- else hq(es, eo[et])
1416-
1417- func hg (es,et) = if ((et >= ep))
1418- then es
1412+ else ( let ep = split_4C(ho, "_")
1413+ let eq = size(ep)
1414+ let er = $Tuple2(0, 0)
1415+ func hg (et,eu) = if ((eu >= eq))
1416+ then et
1417+ else hr(et, ep[eu])
1418+
1419+ func hh (et,eu) = if ((eu >= eq))
1420+ then et
14191421 else throw("List size exceeds 50")
14201422
1421- hg(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(eq, 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
1422- ((hr + hs) + ht)
1423- }
1424-
1425-
1426-func hu (hv,hw,hx) = {
1427- let hk = ((toString(hw) + "_") + toString(hx))
1428- let hy = hj(hk)
1429- let hz = valueOrElse(getString(hv), (hk + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
1430- let hA = split_4C(hz, ":")
1431- let hB = hl(hA)
1432- let hC = if ((5 > size(hA)))
1433- then makeString(["0", toString(hB), toString((hy - hB)), toString(hy)], "_")
1423+ hh(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(er, 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
1424+ ((hs + ht) + hu)
1425+ }
1426+
1427+
1428+func hv (hw,hx,hy) = {
1429+ let hl = ((toString(hx) + "_") + toString(hy))
1430+ let hz = hk(hl)
1431+ let hA = valueOrElse(getString(hw), (hl + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
1432+ let hB = split_4C(hA, ":")
1433+ let hC = hm(hB)
1434+ let hD = if ((5 > size(hB)))
1435+ then makeString(["0", toString(hC), toString((hz - hC)), toString(hz)], "_")
14341436 else {
1435- let hD = split(hA[aZ], "_")
1436- let hE = parseIntValue(hD[ba])
1437- let hF = if ((size(hD) > 1))
1438- then parseIntValue(hD[bb])
1439- else hB
1440- makeString([toString(hE), toString(hF), toString(((hy - hE) - hF)), toString(hy)], "_")
1441- }
1442-[hA[aV], if ((size(split(hA[aW], "_")) == aD))
1443- then hA[aW]
1444- else "0_0_0_0_0_0", if ((size(split(hA[aX], "_")) == aD))
1445- then hA[aX]
1446- else "0_0_0_0_0_0", hA[aY], hC]
1447- }
1448-
1449-
1450-func hG (hm) = {
1451- let hH = hl(hm)
1452- let hI = parseIntValue(split(hm[aZ], "_")[ba])
1453- ((hj(hm[aV]) - hH) - hI)
1454- }
1455-
1456-
1457-func hJ (hK,hm,hL) = if ((size(hK) != 3))
1437+ let hE = split(hB[aZ], "_")
1438+ let hF = parseIntValue(hE[ba])
1439+ let hG = if ((size(hE) > 1))
1440+ then parseIntValue(hE[bb])
1441+ else hC
1442+ makeString([toString(hF), toString(hG), toString(((hz - hF) - hG)), toString(hz)], "_")
1443+ }
1444+[hB[aV], if ((size(split(hB[aW], "_")) == aD))
1445+ then hB[aW]
1446+ else "0_0_0_0_0_0", if ((size(split(hB[aX], "_")) == aD))
1447+ then hB[aX]
1448+ else "0_0_0_0_0_0", hB[aY], hD]
1449+ }
1450+
1451+
1452+func hH (hn) = {
1453+ let hI = hm(hn)
1454+ let hJ = parseIntValue(split(hn[aZ], "_")[ba])
1455+ ((hk(hn[aV]) - hI) - hJ)
1456+ }
1457+
1458+
1459+func hK (hL,hn,hM) = if ((size(hL) != 3))
14581460 then throw("cargoListStr should contain exactly 2 ':' separators")
14591461 else {
1460- let hM = split(hK[0], "_")
1461- let hN = split(hK[1], "_")
1462- let hO = if ((hK[2] == ""))
1462+ let hN = split(hL[0], "_")
1463+ let hO = split(hL[1], "_")
1464+ let hP = if ((hL[2] == ""))
14631465 then nil
1464- else split_4C(hK[2], "_")
1465- if ((size(hM) != aD))
1466+ else split_4C(hL[2], "_")
1467+ if ((size(hN) != aD))
14661468 then throw("All 6 resources should be passed")
1467- else if ((size(hN) != aD))
1469+ else if ((size(hO) != aD))
14681470 then throw("All 6 materials should be passed")
14691471 else {
1470- let gu = hG(hm)
1471- let hP = split(hm[aW], "_")
1472- let hQ = split(hm[aX], "_")
1473- let hR = if ((hm[aY] == ""))
1472+ let gv = hH(hn)
1473+ let hQ = split(hn[aW], "_")
1474+ let hR = split(hn[aX], "_")
1475+ let hS = if ((hn[aY] == ""))
14741476 then nil
1475- else split_4C(hm[aY], "_")
1476- let gs = split(hL[bf], "_")
1477- let hS = split(hL[bg], "_")
1478- let hT = if ((hL[bh] == ""))
1477+ else split_4C(hn[aY], "_")
1478+ let gt = split(hM[bf], "_")
1479+ let hT = split(hM[bg], "_")
1480+ let hU = if ((hM[bh] == ""))
14791481 then nil
1480- else split_4C(hL[bh], "_")
1481- func hU (em,hp) = {
1482- let gf = em._1
1483- let hV = parseIntValue(hp)
1484- let hW = parseIntValue(hP[gf])
1485- let hX = parseIntValue(gs[gf])
1486- if ((hV == 0))
1487- then $Tuple4((gf + 1), (em._2 :+ hP[gf]), (em._3 :+ gs[gf]), em._4)
1488- else if ((hV > 0))
1489- then if ((hV > hX))
1490- then throw((((("Attempt to take " + hp) + " from backpack, but only ") + toString(hX)) + " available"))
1491- else $Tuple4((gf + 1), (em._2 :+ toString((hW + hV))), (em._3 :+ toString((hX - hV))), (em._4 + hV))
1492- else if ((-(hV) > hW))
1493- then throw((((("Attempt to take " + toString(-(hV))) + " from warehouse, but only ") + toString(hW)) + " available"))
1494- else $Tuple4((gf + 1), (em._2 :+ toString((hW + hV))), (em._3 :+ toString((hX - hV))), (em._4 + hV))
1482+ else split_4C(hM[bh], "_")
1483+ func hV (en,hq) = {
1484+ let gg = en._1
1485+ let hW = parseIntValue(hq)
1486+ let hX = parseIntValue(hQ[gg])
1487+ let hY = parseIntValue(gt[gg])
1488+ if ((hW == 0))
1489+ then $Tuple4((gg + 1), (en._2 :+ hQ[gg]), (en._3 :+ gt[gg]), en._4)
1490+ else if ((hW > 0))
1491+ then if ((hW > hY))
1492+ then throw((((("Attempt to take " + hq) + " from backpack, but only ") + toString(hY)) + " available"))
1493+ else $Tuple4((gg + 1), (en._2 :+ toString((hX + hW))), (en._3 :+ toString((hY - hW))), (en._4 + hW))
1494+ else if ((-(hW) > hX))
1495+ then throw((((("Attempt to take " + toString(-(hW))) + " from warehouse, but only ") + toString(hX)) + " available"))
1496+ else $Tuple4((gg + 1), (en._2 :+ toString((hX + hW))), (en._3 :+ toString((hY - hW))), (en._4 + hW))
14951497 }
14961498
1497- let ex = {
1498- let eo = hM
1499- let ep = size(eo)
1500- let eq = $Tuple4(0, nil, nil, 0)
1501- func er (es,et) = if ((et >= ep))
1502- then es
1503- else hU(es, eo[et])
1504-
1505- func eu (es,et) = if ((et >= ep))
1506- then es
1499+ let ey = {
1500+ let ep = hN
1501+ let eq = size(ep)
1502+ let er = $Tuple4(0, nil, nil, 0)
1503+ func es (et,eu) = if ((eu >= eq))
1504+ then et
1505+ else hV(et, ep[eu])
1506+
1507+ func ev (et,eu) = if ((eu >= eq))
1508+ then et
15071509 else throw("List size exceeds 6")
15081510
1509- eu(er(er(er(er(er(er(eq, 0), 1), 2), 3), 4), 5), 6)
1511+ ev(es(es(es(es(es(es(er, 0), 1), 2), 3), 4), 5), 6)
15101512 }
1511- func hY (em,hp) = {
1512- let gf = em._1
1513- let hV = parseIntValue(hp)
1514- let hZ = parseIntValue(hQ[gf])
1515- let ia = parseIntValue(hS[gf])
1516- if ((hV == 0))
1517- then $Tuple4((gf + 1), (em._2 :+ hQ[gf]), (em._3 :+ hS[gf]), em._4)
1518- else if ((hV > 0))
1519- then if ((hV > ia))
1520- then throw((((("Attempt to take " + hp) + " from backpack, but only ") + toString(ia)) + " available"))
1521- else $Tuple4((gf + 1), (em._2 :+ toString((hZ + hV))), (em._3 :+ toString((ia - hV))), (em._4 + hV))
1522- else if ((-(hV) > hZ))
1523- then throw((((("Attempt to take " + toString(-(hV))) + " from warehouse, but only ") + toString(hZ)) + " available"))
1524- else $Tuple4((gf + 1), (em._2 :+ toString((hZ + hV))), (em._3 :+ toString((ia - hV))), (em._4 + hV))
1513+ func hZ (en,hq) = {
1514+ let gg = en._1
1515+ let hW = parseIntValue(hq)
1516+ let ia = parseIntValue(hR[gg])
1517+ let ib = parseIntValue(hT[gg])
1518+ if ((hW == 0))
1519+ then $Tuple4((gg + 1), (en._2 :+ hR[gg]), (en._3 :+ hT[gg]), en._4)
1520+ else if ((hW > 0))
1521+ then if ((hW > ib))
1522+ then throw((((("Attempt to take " + hq) + " from backpack, but only ") + toString(ib)) + " available"))
1523+ else $Tuple4((gg + 1), (en._2 :+ toString((ia + hW))), (en._3 :+ toString((ib - hW))), (en._4 + hW))
1524+ else if ((-(hW) > ia))
1525+ then throw((((("Attempt to take " + toString(-(hW))) + " from warehouse, but only ") + toString(ia)) + " available"))
1526+ else $Tuple4((gg + 1), (en._2 :+ toString((ia + hW))), (en._3 :+ toString((ib - hW))), (en._4 + hW))
15251527 }
15261528
1527- let fL = {
1528- let eo = hN
1529- let ep = size(eo)
1530- let eq = $Tuple4(0, nil, nil, ex._4)
1531- func hc (es,et) = if ((et >= ep))
1532- then es
1533- else hY(es, eo[et])
1534-
1535- func hd (es,et) = if ((et >= ep))
1536- then es
1529+ let fM = {
1530+ let ep = hO
1531+ let eq = size(ep)
1532+ let er = $Tuple4(0, nil, nil, ey._4)
1533+ func hd (et,eu) = if ((eu >= eq))
1534+ then et
1535+ else hZ(et, ep[eu])
1536+
1537+ func he (et,eu) = if ((eu >= eq))
1538+ then et
15371539 else throw("List size exceeds 6")
15381540
1539- hd(hc(hc(hc(hc(hc(hc(eq, 0), 1), 2), 3), 4), 5), 6)
1541+ he(hd(hd(hd(hd(hd(hd(er, 0), 1), 2), 3), 4), 5), 6)
15401542 }
1541- func ib (em,hp) = {
1542- let gf = em._1
1543- let hV = parseIntValue(hp)
1544- let ic = if ((size(hR) > gf))
1545- then parseIntValue(hR[gf])
1543+ func ic (en,hq) = {
1544+ let gg = en._1
1545+ let hW = parseIntValue(hq)
1546+ let id = if ((size(hS) > gg))
1547+ then parseIntValue(hS[gg])
15461548 else 0
1547- let id = if ((size(hT) > gf))
1548- then parseIntValue(hT[gf])
1549+ let ie = if ((size(hU) > gg))
1550+ then parseIntValue(hU[gg])
15491551 else 0
1550- if ((hV == 0))
1551- then $Tuple4((gf + 1), (em._2 :+ toString(ic)), (em._3 :+ toString(id)), em._4)
1552- else if ((hV > 0))
1553- then if ((hV > id))
1554- then throw((((("Attempt to take " + hp) + " from backpack, but only ") + toString(id)) + " available"))
1552+ if ((hW == 0))
1553+ then $Tuple4((gg + 1), (en._2 :+ toString(id)), (en._3 :+ toString(ie)), en._4)
1554+ else if ((hW > 0))
1555+ then if ((hW > ie))
1556+ then throw((((("Attempt to take " + hq) + " from backpack, but only ") + toString(ie)) + " available"))
15551557 else {
1556- let fo = (ec((ic + hV), aU) - ec(ic, aU))
1557- $Tuple4((gf + 1), (em._2 :+ toString((ic + hV))), (em._3 :+ toString((id - hV))), (em._4 + fo))
1558+ let fp = (ed((id + hW), aU) - ed(id, aU))
1559+ $Tuple4((gg + 1), (en._2 :+ toString((id + hW))), (en._3 :+ toString((ie - hW))), (en._4 + fp))
15581560 }
1559- else if ((-(hV) > ic))
1560- then throw((((("Attempt to take " + toString(-(hV))) + " from warehouse, but only ") + toString(ic)) + " available"))
1561+ else if ((-(hW) > id))
1562+ then throw((((("Attempt to take " + toString(-(hW))) + " from warehouse, but only ") + toString(id)) + " available"))
15611563 else {
1562- let fo = (ec((ic + hV), aU) - ec(ic, aU))
1563- $Tuple4((gf + 1), (em._2 :+ toString((ic + hV))), (em._3 :+ toString((id - hV))), (em._4 + fo))
1564+ let fp = (ed((id + hW), aU) - ed(id, aU))
1565+ $Tuple4((gg + 1), (en._2 :+ toString((id + hW))), (en._3 :+ toString((ie - hW))), (en._4 + fp))
15641566 }
15651567 }
15661568
1567- let fP = if ((size(hO) != 0))
1569+ let fQ = if ((size(hP) != 0))
15681570 then {
1569- let eo = hO
1570- let ep = size(eo)
1571- let eq = $Tuple4(0, nil, nil, fL._4)
1572- func hf (es,et) = if ((et >= ep))
1573- then es
1574- else ib(es, eo[et])
1575-
1576- func hg (es,et) = if ((et >= ep))
1577- then es
1571+ let ep = hP
1572+ let eq = size(ep)
1573+ let er = $Tuple4(0, nil, nil, fM._4)
1574+ func hg (et,eu) = if ((eu >= eq))
1575+ then et
1576+ else ic(et, ep[eu])
1577+
1578+ func hh (et,eu) = if ((eu >= eq))
1579+ then et
15781580 else throw("List size exceeds 50")
15791581
1580- hg(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(eq, 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)
1582+ hh(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(er, 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)
15811583 }
1582- else $Tuple4(0, hR, hT, fL._4)
1583- let ie = fP._4
1584- if ((ie > gu))
1585- then throw((((("Attempt to put total " + toString(ie)) + " stuff, but only ") + toString(gu)) + " warehouse space left"))
1586- else $Tuple7(makeString(ex._2, "_"), makeString(fL._2, "_"), makeString_2C(fP._2, "_"), makeString(ex._3, "_"), makeString(fL._3, "_"), makeString_2C(fP._3, "_"), ie)
1584+ else $Tuple4(0, hS, hU, fM._4)
1585+ let if = fQ._4
1586+ if ((if > gv))
1587+ then throw((((("Attempt to put total " + toString(if)) + " stuff, but only ") + toString(gv)) + " warehouse space left"))
1588+ else $Tuple7(makeString(ey._2, "_"), makeString(fM._2, "_"), makeString_2C(fQ._2, "_"), makeString(ey._3, "_"), makeString(fM._3, "_"), makeString_2C(fQ._3, "_"), if)
15871589 }
15881590 }
15891591
15901592
1591-func if (ig,ih) = {
1592- let bI = toString(ig)
1593- let ii = gA(toBigInt(ih))
1594- let ij = valueOrElse(getInteger(dK()), (dJ + 1))
1595- let dO = toString(ij)
1596- let gJ = toInt((ii % dD))
1597- let gi = gH(ii, gJ)
1598- let cZ = aM[gJ]
1599- let ik = Issue(eb(dO, "S"), makeString([dO, "S", gi, cZ], "_"), 1, 0, false)
1600- let bm = calculateAssetId(ik)
1601- let il = toBase58String(bm)
1602- $Tuple2([IntegerEntry(dK(), (ij + 1)), ik, StringEntry(dN(dO), il), StringEntry(bl(il), bI), StringEntry(dQ(dO), bI), IntegerEntry(bv(il), 0), IntegerEntry(dP(il, bI), 0), ScriptTransfer(ig, 1, bm)], $Tuple2(il, cZ))
1603- }
1604-
1605-
1606-func im (bI,in,io) = if (!(sigVerify_8Kb(in, io, dv)))
1593+func ig (ih,ii) = {
1594+ let bI = toString(ih)
1595+ let ij = gB(toBigInt(ii))
1596+ let ik = valueOrElse(getInteger(dL()), (dK + 1))
1597+ let dP = toString(ik)
1598+ let gK = toInt((ij % dE))
1599+ let gj = gI(ij, gK)
1600+ let da = aM[gK]
1601+ let il = Issue(ec(dP, "S"), makeString([dP, "S", gj, da], "_"), 1, 0, false)
1602+ let bm = calculateAssetId(il)
1603+ let im = toBase58String(bm)
1604+ $Tuple2([IntegerEntry(dL(), (ik + 1)), il, StringEntry(dO(dP), im), StringEntry(bl(im), bI), StringEntry(dR(dP), bI), IntegerEntry(bv(im), 0), IntegerEntry(dQ(im, bI), 0), ScriptTransfer(ih, 1, bm)], $Tuple2(im, da))
1605+ }
1606+
1607+
1608+func in (bI,io,ip) = if (!(sigVerify_8Kb(io, ip, dw)))
16071609 then throw("signature does not match")
16081610 else {
1609- let eK = split_4C(toUtf8String(in), ";")
1610- let ip = split_4C(eK[0], "|")
1611- let iq = split(ip[dX], "_")
1612- let ir = parseIntValue(iq[0])
1613- let is = parseIntValue(iq[1])
1614- let it = split(eK[1], ":")
1615- let iu = it[0]
1616- let iv = parseIntValue(ip[dY])
1617- if (if ((iv > (lastBlock.timestamp + dx)))
1611+ let eL = split_4C(toUtf8String(io), ";")
1612+ let iq = split_4C(eL[0], "|")
1613+ let ir = split(iq[dY], "_")
1614+ let is = parseIntValue(ir[0])
1615+ let it = parseIntValue(ir[1])
1616+ let iu = split(eL[1], ":")
1617+ let iv = iu[0]
1618+ let iw = parseIntValue(iq[dZ])
1619+ if (if ((iw > (lastBlock.timestamp + dy)))
16181620 then true
1619- else ((lastBlock.timestamp - dx) > iv))
1620- then throw(((("signature outdated: logTime=" + toString(iv)) + ", bcTime=") + toString(lastBlock.timestamp)))
1621+ else ((lastBlock.timestamp - dy) > iw))
1622+ then throw(((("signature outdated: logTime=" + toString(iw)) + ", bcTime=") + toString(lastBlock.timestamp)))
16211623 else {
1622- let iw = it[1]
1623- let ix = valueOrElse(getString(dm(bI)), "")
1624- if ((ix != iw))
1625- then throw(((("Tx ids don't match! In state: " + ix) + ", in msg: ") + iw))
1624+ let ix = iu[1]
1625+ let iy = valueOrElse(getString(dn(bI)), "")
1626+ if ((iy != ix))
1627+ then throw(((("Tx ids don't match! In state: " + iy) + ", in msg: ") + ix))
16261628 else {
16271629 let z = valueOrErrorMessage(getString(bE(bI)), "You don't have a duck staked")
1628- let iy = y(z)
1629- let iz = ae(valueOrElse(getInteger(C(z)), 0))
1630- let iA = valueOrElse(getInteger(iy), iz)
1631- if ((iA != ir))
1632- then throw(((("oldHealth=" + toString(iA)) + " from state does not match one from flight log=") + toString(ir)))
1633- else if ((0 >= ir))
1630+ let iz = y(z)
1631+ let iA = ae(valueOrElse(getInteger(C(z)), 0))
1632+ let iB = valueOrElse(getInteger(iz), iA)
1633+ if ((iB != is))
1634+ then throw(((("oldHealth=" + toString(iB)) + " from state does not match one from flight log=") + toString(is)))
1635+ else if ((0 >= is))
16341636 then throw("You can't fly with zero health")
1635- else if (!(fR(z)))
1637+ else if (!(fS(z)))
16361638 then throw("Equipment incompatible")
16371639 else {
1638- let iB = if ((size(ip) > dZ))
1639- then ip[dZ]
1640+ let iC = if ((size(iq) > ea))
1641+ then iq[ea]
16401642 else ""
1641- let iC = if ((size(ip) > ea))
1642- then ip[ea]
1643+ let iD = if ((size(iq) > eb))
1644+ then iq[eb]
16431645 else ""
1644- let iD = if (if ((is > 0))
1645- then (iB == "$")
1646+ let iE = if (if ((it > 0))
1647+ then (iC == "$")
16461648 else false)
1647- then df(invoke(cK, "sendUsdtPrize", [bI], nil))
1649+ then dg(invoke(cL, "sendUsdtPrize", [bI], nil))
16481650 else 0
1649- $Tuple5(is, z, iD, iu, iC)
1651+ $Tuple5(it, z, iE, iv, iD)
16501652 }
16511653 }
16521654 }
16531655 }
16541656
16551657
1656-func iE (O,iF) = {
1657- let hx = valueOrElse(getInteger(bv(O)), 0)
1658- let iG = valueOrElse(getInteger(bp(aC, O)), 0)
1659- let iH = (hx / 6)
1660- let iI = (hx / 7)
1661- ((aF + fraction(aF, ((hx + iH) + (2 * iI)), 5)) + fraction(aF, iG, (iF * 5)))
1662- }
1663-
1664-
1665-func iJ (b,iK,iL) = {
1666- let iM = if ((iK == dU))
1667- then $Tuple2(iL, valueOrElse(getString(bE(b)), ""))
1658+func iF (O,iG) = {
1659+ let hy = valueOrElse(getInteger(bv(O)), 0)
1660+ let iH = valueOrElse(getInteger(bp(aC, O)), 0)
1661+ let iI = (hy / 6)
1662+ let iJ = (hy / 7)
1663+ ((aF + fraction(aF, ((hy + iI) + (2 * iJ)), 5)) + fraction(aF, iH, (iG * 5)))
1664+ }
1665+
1666+
1667+func iK (b,iL,iM) = {
1668+ let iN = if ((iL == dV))
1669+ then $Tuple2(iM, valueOrElse(getString(bE(b)), ""))
16681670 else {
16691671 let z = valueOrErrorMessage(getString(bE(b)), "You don't have a duck staked")
1670- let iN = valueOrElse(getString(bG(z)), aI)
1671- let ca = split(value(iN), "_")
1672+ let iO = valueOrElse(getString(bG(z)), aI)
1673+ let ca = split(value(iO), "_")
16721674 if ((ca[bj] != "L"))
16731675 then throw((("Duck location type is " + ca[bj]) + ", but should be L"))
16741676 else $Tuple2(ca[bk], z)
16751677 }
1676- let O = iM._1
1677- let iO = iM._2
1678- let iP = value(assetInfo(fromBase58String(O)))
1679- let iQ = bo(O)
1680- let iR = valueOrErrorMessage(getInteger(iQ), (("Land " + iP.name) + " is not staked"))
1681- let iS = valueOrErrorMessage(getString(bl(O)), (("NFT " + iP.name) + " is orphaned"))
1682- if ((iS != b))
1678+ let O = iN._1
1679+ let iP = iN._2
1680+ let iQ = value(assetInfo(fromBase58String(O)))
1681+ let iR = bo(O)
1682+ let iS = valueOrErrorMessage(getInteger(iR), (("Land " + iQ.name) + " is not staked"))
1683+ let iT = valueOrErrorMessage(getString(bl(O)), (("NFT " + iQ.name) + " is orphaned"))
1684+ if ((iT != b))
16831685 then throw((aA + " is not yours"))
16841686 else {
1685- let iT = split(iP.description, "_")
1686- $Tuple4(iO, O, iT, iR)
1687- }
1688- }
1689-
1690-
1691-func iU (b,ed,iK,iL) = if ((0 > ed))
1687+ let iU = split(iQ.description, "_")
1688+ $Tuple4(iP, O, iU, iS)
1689+ }
1690+ }
1691+
1692+
1693+func iV (b,ee,iL,iM) = if ((0 > ee))
16921694 then throw("Negative amount")
16931695 else {
1694- let fv = iJ(b, iK, iL)
1695- let dj = fv._3[cQ]
1696- let gb = gh(fv._3[cR])
1697- let gl = (lastBlock.timestamp - fv._4)
1698- if ((0 > gl))
1699- then throw(((("Saved timestamp is in future, saved = " + toString(fv._4)) + ", current = ") + toString(lastBlock.timestamp)))
1696+ let fw = iK(b, iL, iM)
1697+ let dk = fw._3[cR]
1698+ let gc = gi(fw._3[cS])
1699+ let gm = (lastBlock.timestamp - fw._4)
1700+ if ((0 > gm))
1701+ then throw(((("Saved timestamp is in future, saved = " + toString(fw._4)) + ", current = ") + toString(lastBlock.timestamp)))
17001702 else {
1701- let iF = di(dj)
1702- let iV = iE(fv._2, iF)
1703- let iW = fraction(gl, (iV * iF), aG)
1704- if ((ed > iW))
1705- then throw(((("Not enough resources, available = " + toString(iW)) + ", requested = ") + toString(ed)))
1703+ let iG = dj(dk)
1704+ let iW = iF(fw._2, iG)
1705+ let iX = fraction(gm, (iW * iG), aG)
1706+ if ((ee > iX))
1707+ then throw(((("Not enough resources, available = " + toString(iX)) + ", requested = ") + toString(ee)))
17061708 else {
1707- let iX = fraction((iW - ed), aG, (iV * iF))
1708- let iY = (lastBlock.timestamp - iX)
1709- let hw = (iF / cp)
1710- let gt = gp(gb, (gl - iX), hw, iV)
1711- let hv = bu(fv._2)
1712- let hx = valueOrElse(getInteger(bv(fv._2)), 0)
1713- let hm = hu(hv, hw, hx)
1714- let hD = split(hm[aZ], "_")
1715- let gu = parseIntValue(hD[bc])
1716- if (if ((iK == dU))
1717- then (ed > gu)
1709+ let iY = fraction((iX - ee), aG, (iW * iG))
1710+ let iZ = (lastBlock.timestamp - iY)
1711+ let hx = (iG / cq)
1712+ let gu = gq(gc, (gm - iY), hx, iW)
1713+ let hw = bu(fw._2)
1714+ let hy = valueOrElse(getInteger(bv(fw._2)), 0)
1715+ let hn = hv(hw, hx, hy)
1716+ let hE = split(hn[aZ], "_")
1717+ let gv = parseIntValue(hE[bc])
1718+ if (if ((iL == dV))
1719+ then (ee > gv)
17181720 else false)
1719- then throw((("Only " + toString(gu)) + " space left in warehouse"))
1721+ then throw((("Only " + toString(gv)) + " space left in warehouse"))
17201722 else {
1721- let hi = bF(fv._1)
1722- let hL = hh(hi)
1723- let gs = split(hL[bf], "_")
1724- let gr = split(hm[aW], "_")
1725- let iZ = if ((iK == dU))
1726- then $Tuple4(gj(gr, gb, (gl - iX), hw, iV), hL[bf], (parseIntValue(hD[bb]) + gt._2), (parseIntValue(hD[bc]) - gt._2))
1727- else if ((iK == dV))
1728- then $Tuple4(hm[aW], gj(gs, gb, (gl - iX), hw, iV), parseIntValue(hD[bb]), parseIntValue(hD[bc]))
1723+ let hj = bF(fw._1)
1724+ let hM = hi(hj)
1725+ let gt = split(hM[bf], "_")
1726+ let gs = split(hn[aW], "_")
1727+ let ja = if ((iL == dV))
1728+ then $Tuple4(gk(gs, gc, (gm - iY), hx, iW), hM[bf], (parseIntValue(hE[bb]) + gu._2), (parseIntValue(hE[bc]) - gu._2))
1729+ else if ((iL == dW))
1730+ then $Tuple4(hn[aW], gk(gt, gc, (gm - iY), hx, iW), parseIntValue(hE[bb]), parseIntValue(hE[bc]))
17291731 else {
1730- let ja = gq(gr, gs, gt, gu)
1731- let jb = min([parseIntValue(hD[bc]), gt._2])
1732- $Tuple4(ja._1, ja._2, (parseIntValue(hD[bb]) + jb), (parseIntValue(hD[bc]) - jb))
1732+ let jb = gr(gs, gt, gu, gv)
1733+ let jc = min([parseIntValue(hE[bc]), gu._2])
1734+ $Tuple4(jb._1, jb._2, (parseIntValue(hE[bb]) + jc), (parseIntValue(hE[bc]) - jc))
17331735 }
1734- let jc = iZ._1
1735- let jd = iZ._2
1736- let je = iZ._3
1737- let jf = iZ._4
1738- $Tuple5([IntegerEntry(bo(fv._2), iY), IntegerEntry(br(aA, fv._2, b), iY)], hi, [hL[be], jd, hL[bg], hL[bh]], hv, [hm[aV], jc, hm[aX], hm[aY], makeString([hD[ba], toString(je), toString(jf), hD[bd]], "_")])
1736+ let jd = ja._1
1737+ let je = ja._2
1738+ let jf = ja._3
1739+ let jg = ja._4
1740+ $Tuple5([IntegerEntry(bo(fw._2), iZ), IntegerEntry(br(aA, fw._2, b), iZ)], hj, [hM[be], je, hM[bg], hM[bh]], hw, [hn[aV], jd, hn[aX], hn[aY], makeString([hE[ba], toString(jf), toString(jg), hE[bd]], "_")])
17391741 }
17401742 }
17411743 }
17421744 }
17431745
17441746
1745-func jg (b,O,iF,iK) = {
1746- let iQ = bo(O)
1747- let iR = value(getInteger(iQ))
1748- let iW = (fraction((lastBlock.timestamp - iR), iE(O, iF), aG) * iF)
1749- iU(b, iW, iK, O)
1750- }
1751-
1752-
1753-func jh (ez,ig,ji,O) = {
1754- let b = toString(ig)
1755- let fv = iJ(b, dW, O)
1756- let iF = di(fv._3[cQ])
1757- let jj = bv(fv._2)
1758- let jk = valueOrElse(getInteger(jj), 0)
1747+func jh (b,O,iG,iL) = {
1748+ let iR = bo(O)
1749+ let iS = value(getInteger(iR))
1750+ let iX = (fraction((lastBlock.timestamp - iS), iF(O, iG), aG) * iG)
1751+ iV(b, iX, iL, O)
1752+ }
1753+
1754+
1755+func ji (eA,ih,jj,O) = {
1756+ let b = toString(ih)
1757+ let fw = iK(b, dX, O)
1758+ let iG = dj(fw._3[cR])
1759+ let jk = bv(fw._2)
1760+ let jl = valueOrElse(getInteger(jk), 0)
17591761 if (if (!(cf))
1760- then (jk >= 3)
1762+ then (jl >= 3)
17611763 else false)
17621764 then throw("Currently max infrastructure level = 3")
17631765 else {
1764- let jl = ((sqrt(iF, 0, 0, DOWN) / 5) + 2)
1765- let aj = (jk + 1)
1766+ let jm = ((sqrt(iG, 0, 0, DOWN) / 5) + 2)
1767+ let aj = (jl + 1)
17661768 if (if (cf)
1767- then (aj > jl)
1769+ then (aj > jm)
17681770 else false)
1769- then throw(("Currently max infrastructure level = " + toString(jl)))
1771+ then throw(("Currently max infrastructure level = " + toString(jm)))
17701772 else {
1771- let jm = fraction(dA, (iF * aj), cp)
1772- if (if (!(ez))
1773- then (ji != jm)
1773+ let jn = fraction(dB, (iG * aj), cq)
1774+ if (if (!(eA))
1775+ then (jj != jn)
17741776 else false)
1775- then throw(("Payment attached should be " + toString(jm)))
1777+ then throw(("Payment attached should be " + toString(jn)))
17761778 else {
1777- let hi = bF(fv._1)
1778- let hL = hh(hi)
1779- let jn = split(hL[bg], "_")
1780- let jo = fraction(ck, (iF * aj), cp)
1781- let jp = makeString(ey(ez, jn, jo), "_")
1782- let jq = jg(b, fv._2, iF, dW)
1783- let jr = jq._5
1784- let js = hj(jr[aV])
1785- let jt = makeString([split(jr[aV], "_")[0], toString(aj)], "_")
1786- let ju = hj(jt)
1787- let hD = split(jr[aZ], "_")
1788- let jv = makeString([hD[ba], hD[bb], toString(((parseIntValue(hD[bc]) + ju) - js)), toString(ju)], "_")
1789- $Tuple3(([IntegerEntry(jj, aj), IntegerEntry(dP(fv._2, b), aj), StringEntry(hi, makeString([hL[be], jq._3[bf], jp, hL[bh]], ":")), StringEntry(jq._4, makeString([jt, jr[aW], jr[aX], jr[aY], jv], ":"))] ++ jq._1), aj, jo)
1779+ let hj = bF(fw._1)
1780+ let hM = hi(hj)
1781+ let jo = split(hM[bg], "_")
1782+ let jp = fraction(cl, (iG * aj), cq)
1783+ let jq = makeString(ez(eA, jo, jp), "_")
1784+ let jr = jh(b, fw._2, iG, dX)
1785+ let js = jr._5
1786+ let jt = hk(js[aV])
1787+ let ju = makeString([split(js[aV], "_")[0], toString(aj)], "_")
1788+ let jv = hk(ju)
1789+ let hE = split(js[aZ], "_")
1790+ let jw = makeString([hE[ba], hE[bb], toString(((parseIntValue(hE[bc]) + jv) - jt)), toString(jv)], "_")
1791+ $Tuple3(([IntegerEntry(jk, aj), IntegerEntry(dQ(fw._2, b), aj), StringEntry(hj, makeString([hM[be], jr._3[bf], jq, hM[bh]], ":")), StringEntry(jr._4, makeString([ju, js[aW], js[aX], js[aY], jw], ":"))] ++ jr._1), aj, jp)
17901792 }
17911793 }
17921794 }
17931795 }
17941796
17951797
1796-func jw (z,jx) = {
1797- let jy = C(z)
1798- let jz = B(z)
1799- let ad = valueOrElse(getInteger(al, jz), 0)
1800- let ai = (ad + jx)
1801- let jA = ag(valueOrElse(getInteger(al, jy), 0), ai)
1802- let jB = D(z)
1803- $Tuple2([IntegerEntry(jy, jA[0]), IntegerEntry(jz, ai), IntegerEntry(jB, (valueOrElse(getInteger(jB), 0) + jA[1]))], ai)
1804- }
1805-
1806-
1807-func jC (b,jx) = {
1808- let jy = G(b)
1809- let jz = F(b)
1810- let ad = valueOrElse(getInteger(al, jz), 0)
1811- let ai = (ad + jx)
1812- let jA = ag(valueOrElse(getInteger(al, jy), 0), ai)
1813- let jB = H(b)
1814- $Tuple2([IntegerEntry(jy, jA[0]), IntegerEntry(jz, ai), IntegerEntry(jB, (valueOrElse(getInteger(jB), 0) + jA[1]))], ai)
1815- }
1816-
1817-
1818-func jD (b) = {
1798+func jx (z,jy) = {
1799+ let jz = C(z)
1800+ let jA = B(z)
1801+ let ad = valueOrElse(getInteger(al, jA), 0)
1802+ let ai = (ad + jy)
1803+ let jB = ag(valueOrElse(getInteger(al, jz), 0), ai)
1804+ let jC = D(z)
1805+ $Tuple2([IntegerEntry(jz, jB[0]), IntegerEntry(jA, ai), IntegerEntry(jC, (valueOrElse(getInteger(jC), 0) + jB[1]))], ai)
1806+ }
1807+
1808+
1809+func jD (b,jy) = {
1810+ let jz = G(b)
1811+ let jA = F(b)
1812+ let ad = valueOrElse(getInteger(al, jA), 0)
1813+ let ai = (ad + jy)
1814+ let jB = ag(valueOrElse(getInteger(al, jz), 0), ai)
1815+ let jC = H(b)
1816+ $Tuple2([IntegerEntry(jz, jB[0]), IntegerEntry(jA, ai), IntegerEntry(jC, (valueOrElse(getInteger(jC), 0) + jB[1]))], ai)
1817+ }
1818+
1819+
1820+func jE (b) = {
18191821 let z = valueOrErrorMessage(getString(bE(b)), "You don't have a duck staked")
1820- let jE = bz(b)
1821- let jF = getString(jE)
1822- if (!(isDefined(jF)))
1822+ let jF = bz(b)
1823+ let jG = getString(jF)
1824+ if (!(isDefined(jG)))
18231825 then throw("You are not eligible for ONBOARD artifact")
18241826 else {
1825- let jG = bB(b)
1826- let jH = getString(jG)
1827- if (isDefined(jH))
1828- then throw(("You already used your ONBOARD artifact on duck " + value(jH)))
1827+ let jH = bB(b)
1828+ let jI = getString(jH)
1829+ if (isDefined(jI))
1830+ then throw(("You already used your ONBOARD artifact on duck " + value(jI)))
18291831 else {
1830- let jI = bA(z)
1831- let jJ = getString(jI)
1832- if (isDefined(jJ))
1833- then throw(((("The duck " + z) + " already got points from ONBOARD artifact from user ") + value(jJ)))
1834- else ([StringEntry(jG, z), StringEntry(jI, b)] ++ jw(z, aa)._1)
1832+ let jJ = bA(z)
1833+ let jK = getString(jJ)
1834+ if (isDefined(jK))
1835+ then throw(((("The duck " + z) + " already got points from ONBOARD artifact from user ") + value(jK)))
1836+ else ([StringEntry(jH, z), StringEntry(jJ, b)] ++ jx(z, aa)._1)
18351837 }
18361838 }
18371839 }
18381840
18391841
1840-func jK (b,iL) = {
1841- let fv = iJ(b, dW, iL)
1842- let O = fv._2
1843- let iF = di(fv._3[cQ])
1844- let jL = bp(aC, O)
1845- if ((valueOrElse(getInteger(jL), 0) > 0))
1842+func jL (b,iM) = {
1843+ let fw = iK(b, dX, iM)
1844+ let O = fw._2
1845+ let iG = dj(fw._3[cR])
1846+ let jM = bp(aC, O)
1847+ if ((valueOrElse(getInteger(jM), 0) > 0))
18461848 then throw("Presale artifact is already activated")
1847- else if ((parseIntValue(fv._3[cP]) > dJ))
1849+ else if ((parseIntValue(fw._3[cQ]) > dK))
18481850 then throw((((aA + " ") + O) + " is not eligible for presale artifact"))
18491851 else {
1850- let jq = jg(b, O, iF, dW)
1851- (((jq._1 :+ IntegerEntry(jL, iF)) :+ StringEntry(jq._2, makeString(jq._3, ":"))) :+ StringEntry(jq._4, makeString(jq._5, ":")))
1852+ let jr = jh(b, O, iG, dX)
1853+ (((jr._1 :+ IntegerEntry(jM, iG)) :+ StringEntry(jr._2, makeString(jr._3, ":"))) :+ StringEntry(jr._4, makeString(jr._5, ":")))
18521854 }
18531855 }
18541856
18551857
1856-func jM (z) = {
1857- let bZ = valueOrElse(getInteger(cO, bK), 0)
1858- let iN = split(valueOrElse(getString(bG(z)), aI), "_")
1858+func jN (z) = {
1859+ let bZ = valueOrElse(getInteger(cP, bK), 0)
1860+ let iO = split(valueOrElse(getString(bG(z)), aI), "_")
18591861 let av = lastBlock.timestamp
1860- let cb = bT(cO, bZ)
1862+ let cb = bT(cP, bZ)
18611863 let bV = cb[bP]
18621864 let bW = cb[bQ]
1863- if ((iN[bj] != "T"))
1865+ if ((iO[bj] != "T"))
18641866 then false
1865- else if (if (if ((parseIntValue(iN[bi]) == bZ))
1867+ else if (if (if ((parseIntValue(iO[bi]) == bZ))
18661868 then (bW[bS] == "INPROGRESS")
18671869 else false)
18681870 then (parseIntValue(bV[bR]) > av)
18691871 else false)
18701872 then throw("Your duck is taking part in the tournament")
1871- else dh(invoke(this, "exitTournamentInternal", [z], nil))
1872- }
1873-
1874-
1875-func jN (jO,aj,jP,b,jQ,jR) = {
1873+ else di(invoke(this, "exitTournamentInternal", [z], nil))
1874+ }
1875+
1876+
1877+func jO (jP,aj,jQ,b,jR,jS) = {
18761878 let z = valueOrErrorMessage(getString(bE(b)), "You don't have a duck staked")
1877- if (jM(z))
1879+ if (jN(z))
18781880 then throw("mergeInternal_checkTournament")
18791881 else {
1880- func jS (em,O) = {
1881- let iP = value(assetInfo(fromBase58String(O)))
1882- let iQ = bo(O)
1883- let iR = valueOrErrorMessage(getInteger(iQ), (("NFT " + iP.name) + " is not staked"))
1884- let iS = valueOrErrorMessage(getString(bl(O)), (("NFT " + iP.name) + " is orphaned"))
1885- if ((iS != b))
1882+ func jT (en,O) = {
1883+ let iQ = value(assetInfo(fromBase58String(O)))
1884+ let iR = bo(O)
1885+ let iS = valueOrErrorMessage(getInteger(iR), (("NFT " + iQ.name) + " is not staked"))
1886+ let iT = valueOrErrorMessage(getString(bl(O)), (("NFT " + iQ.name) + " is orphaned"))
1887+ if ((iT != b))
18861888 then throw((aA + " is not yours"))
18871889 else {
1888- let iT = split(iP.description, "_")
1889- let cZ = iT[cS]
1890- if (if ((em._3 != ""))
1891- then (em._3 != cZ)
1890+ let iU = split(iQ.description, "_")
1891+ let da = iU[cT]
1892+ if (if ((en._3 != ""))
1893+ then (en._3 != da)
18921894 else false)
18931895 then throw("Lands should be on the same continent to merge")
18941896 else {
1895- let dj = iT[cQ]
1896- let jT = em._1
1897- let gf = valueOrErrorMessage(indexOf(jT, dj), "You haven't passed all the lands needed")
1898- let jU = (take(jT, gf) + drop(jT, (gf + 1)))
1899- let iF = di(dj)
1900- let jV = (em._2 + valueOrElse(getInteger(bp(aC, O)), 0))
1901- let hx = valueOrElse(getInteger(bv(O)), 0)
1902- let jW = {
1903- let ci = dj
1904- if (("S" == ci))
1897+ let dk = iU[cR]
1898+ let jU = en._1
1899+ let gg = valueOrErrorMessage(indexOf(jU, dk), "You haven't passed all the lands needed")
1900+ let jV = (take(jU, gg) + drop(jU, (gg + 1)))
1901+ let iG = dj(dk)
1902+ let jW = (en._2 + valueOrElse(getInteger(bp(aC, O)), 0))
1903+ let hy = valueOrElse(getInteger(bv(O)), 0)
1904+ let jX = {
1905+ let cj = dk
1906+ if (("S" == cj))
19051907 then 3
1906- else if (("M" == ci))
1908+ else if (("M" == cj))
19071909 then 4
1908- else if (("L" == ci))
1910+ else if (("L" == cj))
19091911 then 5
1910- else if (("XL" == ci))
1912+ else if (("XL" == cj))
19111913 then 6
19121914 else throw("Only S, M, L, XL can merge")
19131915 }
1914- if ((hx != jW))
1916+ if ((hy != jX))
19151917 then throw("All lands should be maxed to merge")
19161918 else {
1917- let dO = iT[cP]
1918- let gb = gh(iT[cR])
1919- let gl = (lastBlock.timestamp - iR)
1920- if ((0 > gl))
1921- then throw(((("Saved timestamp is in future, saved = " + toString(iR)) + ", current = ") + toString(lastBlock.timestamp)))
1919+ let dP = iU[cQ]
1920+ let gc = gi(iU[cS])
1921+ let gm = (lastBlock.timestamp - iS)
1922+ if ((0 > gm))
1923+ then throw(((("Saved timestamp is in future, saved = " + toString(iS)) + ", current = ") + toString(lastBlock.timestamp)))
19221924 else {
1923- let iV = iE(O, iF)
1924- let hw = (iF / cp)
1925- let jd = gj(split(em._4, "_"), gb, gl, hw, iV)
1926- let ew = fZ(em._6, gb, hw, -1)
1927- let jX = fZ(em._10, gb, hw, -1)
1928- let gP = fZ(em._9, gb, hw, 1)
1929- let jY = em._7
1930- let cJ = indexOf(jY, O)
1931- if (!(isDefined(cJ)))
1925+ let iW = iF(O, iG)
1926+ let hx = (iG / cq)
1927+ let je = gk(split(en._4, "_"), gc, gm, hx, iW)
1928+ let ex = ga(en._6, gc, hx, -1)
1929+ let jY = ga(en._10, gc, hx, -1)
1930+ let gQ = ga(en._9, gc, hx, 1)
1931+ let jZ = en._7
1932+ let cK = indexOf(jZ, O)
1933+ if (!(isDefined(cK)))
19321934 then throw(("Your staked lands don't contain " + O))
19331935 else {
1934- let jZ = bn(O)
1935- let ka = valueOrElse(getString(jZ), "")
1936- $Tuple10(jU, jV, cZ, jd, ((((((((((((em._5 :+ DeleteEntry(bo(O))) :+ DeleteEntry(br(aA, O, b))) :+ DeleteEntry(dN(dO))) :+ DeleteEntry(bl(O))) :+ DeleteEntry(bv(O))) :+ DeleteEntry(dP(O, b))) :+ DeleteEntry(bp(aC, O))) :+ DeleteEntry(dQ(dO))) :+ DeleteEntry(bu(O))) :+ DeleteEntry(jZ)) :+ Burn(fromBase58String(O), 1)) ++ (if ((ka != ""))
1937- then [DeleteEntry(dL(ka))]
1938- else nil)), ew, removeByIndex(jY, value(cJ)), (em._8 + iF), gP, jX)
1936+ let ka = bn(O)
1937+ let kb = valueOrElse(getString(ka), "")
1938+ $Tuple10(jV, jW, da, je, ((((((((((((en._5 :+ DeleteEntry(bo(O))) :+ DeleteEntry(br(aA, O, b))) :+ DeleteEntry(dO(dP))) :+ DeleteEntry(bl(O))) :+ DeleteEntry(bv(O))) :+ DeleteEntry(dQ(O, b))) :+ DeleteEntry(bp(aC, O))) :+ DeleteEntry(dR(dP))) :+ DeleteEntry(bu(O))) :+ DeleteEntry(ka)) :+ Burn(fromBase58String(O), 1)) ++ (if ((kb != ""))
1939+ then [DeleteEntry(dM(kb))]
1940+ else nil)), ex, removeByIndex(jZ, value(cK)), (en._8 + iG), gQ, jY)
19391941 }
19401942 }
19411943 }
19431945 }
19441946 }
19451947
1946- let hi = bF(z)
1947- let hL = hh(hi)
1948- let ga = split(valueOrElse(getString(cX()), "0_0_0_0_0_0"), "_")
1949- let kb = da(b)
1950- let kc = getString(kb)
1951- let kd = if (isDefined(kc))
1952- then split_51C(value(kc), "_")
1948+ let hj = bF(z)
1949+ let hM = hi(hj)
1950+ let gb = split(valueOrElse(getString(cY()), "0_0_0_0_0_0"), "_")
1951+ let kc = db(b)
1952+ let kd = getString(kc)
1953+ let ke = if (isDefined(kd))
1954+ then split_51C(value(kd), "_")
19531955 else nil
1954- let ke = split(value(assetInfo(fromBase58String(jQ[0]))).description, "_")[cS]
1955- let kf = split(valueOrElse(getString(cY(ke)), "0_0_0_0_0_0"), "_")
1956- let ex = {
1957- let eo = jQ
1958- let ep = size(eo)
1959- let eq = $Tuple10(jP, 0, "", hL[bf], nil, ga, kd, 0, split("0_0_0_0_0_0", "_"), kf)
1960- func er (es,et) = if ((et >= ep))
1961- then es
1962- else jS(es, eo[et])
1963-
1964- func eu (es,et) = if ((et >= ep))
1965- then es
1956+ let kf = split(value(assetInfo(fromBase58String(jR[0]))).description, "_")[cT]
1957+ let kg = split(valueOrElse(getString(cZ(kf)), "0_0_0_0_0_0"), "_")
1958+ let ey = {
1959+ let ep = jR
1960+ let eq = size(ep)
1961+ let er = $Tuple10(jQ, 0, "", hM[bf], nil, gb, ke, 0, split("0_0_0_0_0_0", "_"), kg)
1962+ func es (et,eu) = if ((eu >= eq))
1963+ then et
1964+ else jT(et, ep[eu])
1965+
1966+ func ev (et,eu) = if ((eu >= eq))
1967+ then et
19661968 else throw("List size exceeds 5")
19671969
1968- eu(er(er(er(er(er(eq, 0), 1), 2), 3), 4), 5)
1970+ ev(es(es(es(es(es(er, 0), 1), 2), 3), 4), 5)
19691971 }
1970- let cZ = ex._3
1971- let gJ = valueOrErrorMessage(indexOf(aM, cZ), ("Unknown continent: " + cZ))
1972- let gi = gO(ex._9, (di(jO) / cp))
1973- let ij = valueOrElse(getInteger(dK()), (dJ + 1))
1974- let kg = toString(ij)
1975- let ik = Issue(eb(kg, jO), makeString([kg, jO, gi, cZ], "_"), 1, 0, false)
1976- let bm = calculateAssetId(ik)
1977- let kh = toBase58String(bm)
1978- let jp = makeString(ey((jR > 0), split(hL[bg], "_"), jR), "_")
1979- let ki = db(b)
1980- let kj = valueOrElse(getInteger(ki), 0)
1981- $Tuple2((((((((((((((((ex._5 :+ (if ((size(ex._7) > 0))
1982- then StringEntry(kb, makeString_11C(ex._7, "_"))
1983- else DeleteEntry(kb))) :+ IntegerEntry(ki, if ((ex._8 > kj))
1972+ let da = ey._3
1973+ let gK = valueOrErrorMessage(indexOf(aM, da), ("Unknown continent: " + da))
1974+ let gj = gP(ey._9, (dj(jP) / cq))
1975+ let ik = valueOrElse(getInteger(dL()), (dK + 1))
1976+ let kh = toString(ik)
1977+ let il = Issue(ec(kh, jP), makeString([kh, jP, gj, da], "_"), 1, 0, false)
1978+ let bm = calculateAssetId(il)
1979+ let ki = toBase58String(bm)
1980+ let jq = makeString(ez((jS > 0), split(hM[bg], "_"), jS), "_")
1981+ let kj = dc(b)
1982+ let kk = valueOrElse(getInteger(kj), 0)
1983+ $Tuple2((((((((((((((((ey._5 :+ (if ((size(ey._7) > 0))
1984+ then StringEntry(kc, makeString_11C(ey._7, "_"))
1985+ else DeleteEntry(kc))) :+ IntegerEntry(kj, if ((ey._8 > kk))
19841986 then 0
1985- else (kj - ex._8))) :+ IntegerEntry(dK(), (ij + 1))) :+ ik) :+ StringEntry(dN(kg), kh)) :+ StringEntry(bl(kh), b)) :+ StringEntry(dQ(kg), b)) :+ IntegerEntry(bp(aC, kh), ex._2)) :+ IntegerEntry(bv(kh), aj)) :+ IntegerEntry(dP(kh, b), aj)) :+ StringEntry(hi, makeString([hL[be], ex._4, jp, hL[bh]], ":"))) :+ StringEntry(cX(), makeString(ex._6, "_"))) :+ StringEntry(cY(cZ), makeString(ex._10, "_"))) :+ StringEntry(bG(z), makeString([cZ, "L", kh], "_"))) :+ ScriptTransfer(addressFromStringValue(b), 1, bm)), kh)
1986- }
1987- }
1988-
1989-
1990-func kk (b,jQ) = jN("M", 3, "SSSS", b, jQ, 0)
1991-
1992-
1993-func kl (b,jQ) = jN("L", 4, "SMM", b, jQ, (ck * 4))
1994-
1995-
1996-func km (b,jQ) = jN("XL", 5, "SSSML", b, jQ, (ck * 47))
1997-
1998-
1999-func kn (b,jQ) = jN("XXL", 6, "LXL", b, jQ, (ck * 54))
2000-
2001-
2002-func ko (b,jQ) = {
2003- let ci = size(jQ)
2004- if ((4 == ci))
2005- then kk(b, jQ)
2006- else if ((3 == ci))
2007- then kl(b, jQ)
2008- else if ((5 == ci))
2009- then km(b, jQ)
2010- else if ((2 == ci))
2011- then kn(b, jQ)
1987+ else (kk - ey._8))) :+ IntegerEntry(dL(), (ik + 1))) :+ il) :+ StringEntry(dO(kh), ki)) :+ StringEntry(bl(ki), b)) :+ StringEntry(dR(kh), b)) :+ IntegerEntry(bp(aC, ki), ey._2)) :+ IntegerEntry(bv(ki), aj)) :+ IntegerEntry(dQ(ki, b), aj)) :+ StringEntry(hj, makeString([hM[be], ey._4, jq, hM[bh]], ":"))) :+ StringEntry(cY(), makeString(ey._6, "_"))) :+ StringEntry(cZ(da), makeString(ey._10, "_"))) :+ StringEntry(bG(z), makeString([da, "L", ki], "_"))) :+ ScriptTransfer(addressFromStringValue(b), 1, bm)), ki)
1988+ }
1989+ }
1990+
1991+
1992+func kl (b,jR) = jO("M", 3, "SSSS", b, jR, 0)
1993+
1994+
1995+func km (b,jR) = jO("L", 4, "SMM", b, jR, (cl * 4))
1996+
1997+
1998+func kn (b,jR) = jO("XL", 5, "SSSML", b, jR, (cl * 47))
1999+
2000+
2001+func ko (b,jR) = jO("XXL", 6, "LXL", b, jR, (cl * 54))
2002+
2003+
2004+func kp (b,jR) = {
2005+ let cj = size(jR)
2006+ if ((4 == cj))
2007+ then kl(b, jR)
2008+ else if ((3 == cj))
2009+ then km(b, jR)
2010+ else if ((5 == cj))
2011+ then kn(b, jR)
2012+ else if ((2 == cj))
2013+ then ko(b, jR)
20122014 else throw("Unknown merge")
20132015 }
20142016
20152017
2016-func kp (gf) = if (if ((gf.originCaller != cK))
2017- then valueOrElse(getBoolean(dl()), false)
2018+func kq (gg) = if (if ((gg.originCaller != cL))
2019+ then valueOrElse(getBoolean(dm()), false)
20182020 else false)
20192021 then throw("Contracts are under maintenance")
2020- else StringEntry(dm(toString(gf.originCaller)), toBase58String(gf.transactionId))
2021-
2022-
2023-@Callable(gf)
2024-func constructorV1 (kq) = if ((gf.caller != this))
2022+ else StringEntry(dn(toString(gg.originCaller)), toBase58String(gg.transactionId))
2023+
2024+
2025+@Callable(gg)
2026+func constructorV1 (kr) = if ((gg.caller != this))
20252027 then throw("Permission denied")
2026- else [StringEntry(cE(), kq)]
2027-
2028-
2029-
2030-@Callable(gf)
2031-func setBlocked (kr) = if ((gf.caller != this))
2028+ else [StringEntry(cF(), kr)]
2029+
2030+
2031+
2032+@Callable(gg)
2033+func setBlocked (ks) = if ((gg.caller != this))
20322034 then throw("permission denied")
2033- else [BooleanEntry(dl(), kr)]
2034-
2035-
2036-
2037-@Callable(gf)
2035+ else [BooleanEntry(dm(), ks)]
2036+
2037+
2038+
2039+@Callable(gg)
20382040 func stakeLand () = {
2039- let ks = kp(gf)
2040- if ((size(gf.payments) != 1))
2041+ let kt = kq(gg)
2042+ if ((size(gg.payments) != 1))
20412043 then throw("Exactly one payment required")
20422044 else {
2043- let kt = value(gf.payments[0])
2044- let bm = value(kt.assetId)
2045- let cw = toString(gf.caller)
2046- if ((kt.amount != 1))
2045+ let ku = value(gg.payments[0])
2046+ let bm = value(ku.assetId)
2047+ let cx = toString(gg.caller)
2048+ if ((ku.amount != 1))
20472049 then throw((("NFT " + aA) + " token should be attached as payment"))
20482050 else {
2049- let iP = value(assetInfo(bm))
2050- if ((iP.issuer != this))
2051+ let iQ = value(assetInfo(bm))
2052+ if ((iQ.issuer != this))
20512053 then throw("Unknown issuer of token")
2052- else if (!(contains(iP.name, aA)))
2054+ else if (!(contains(iQ.name, aA)))
20532055 then throw((("Only NFT " + aA) + " tokens are accepted"))
20542056 else {
2055- let ku = drop(iP.name, 4)
2056- let dO = if (contains(ku, "XXL"))
2057- then dropRight(ku, 3)
2058- else if (contains(ku, "XL"))
2059- then dropRight(ku, 2)
2060- else dropRight(ku, 1)
2061- if (!(isDefined(parseInt(dO))))
2062- then throw(("Cannot parse land number from " + iP.name))
2057+ let kv = drop(iQ.name, 4)
2058+ let dP = if (contains(kv, "XXL"))
2059+ then dropRight(kv, 3)
2060+ else if (contains(kv, "XL"))
2061+ then dropRight(kv, 2)
2062+ else dropRight(kv, 1)
2063+ if (!(isDefined(parseInt(dP))))
2064+ then throw(("Cannot parse land number from " + iQ.name))
20632065 else {
20642066 let O = toBase58String(bm)
2065- let iQ = bo(O)
2066- if (isDefined(getInteger(iQ)))
2067- then throw((("NFT " + iP.name) + " is already staked"))
2067+ let iR = bo(O)
2068+ if (isDefined(getInteger(iR)))
2069+ then throw((("NFT " + iQ.name) + " is already staked"))
20682070 else {
2069- let iT = split(iP.description, "_")
2070- let gb = gh(iT[cR])
2071- let iF = di(iT[cQ])
2072- let hw = (iF / cp)
2073- let ew = gg(gb, hw, 1)
2074- let kv = cY(iT[cS])
2075- let kf = split(valueOrElse(getString(kv), "0_0_0_0_0_0"), "_")
2076- let kw = makeString(fZ(kf, gb, hw, 1), "_")
2077- let kb = da(cw)
2078- let kc = getString(kb)
2079- let jY = if (isDefined(kc))
2080- then split_51C(value(kc), "_")
2071+ let iU = split(iQ.description, "_")
2072+ let gc = gi(iU[cS])
2073+ let iG = dj(iU[cR])
2074+ let hx = (iG / cq)
2075+ let ex = gh(gc, hx, 1)
2076+ let kw = cZ(iU[cT])
2077+ let kg = split(valueOrElse(getString(kw), "0_0_0_0_0_0"), "_")
2078+ let kx = makeString(ga(kg, gc, hx, 1), "_")
2079+ let kc = db(cx)
2080+ let kd = getString(kc)
2081+ let jZ = if (isDefined(kd))
2082+ then split_51C(value(kd), "_")
20812083 else nil
2082- if (containsElement(jY, O))
2084+ if (containsElement(jZ, O))
20832085 then throw(("Your staked lands already contain " + O))
2084- else if ((size(jY) >= aE))
2086+ else if ((size(jZ) >= aE))
20852087 then throw((("Your already staked max (" + toString(aE)) + ") lands"))
20862088 else {
2087- let hx = valueOrElse(getInteger(bv(O)), 0)
2088- let ki = db(cw)
2089- let kx = valueOrElse(getInteger(ki), 0)
2090- let ky = invoke(cN, "onStakeUnstakeLand", [cw], nil)
2091- $Tuple2([IntegerEntry(iQ, lastBlock.timestamp), IntegerEntry(br(aA, O, cw), lastBlock.timestamp), StringEntry(kb, makeString_11C((jY :+ O), "_")), IntegerEntry(ki, (kx + iF)), StringEntry(bl(O), cw), StringEntry(dQ(dO), cw), IntegerEntry(dP(O, cw), hx), StringEntry(cX(), ew), StringEntry(kv, kw), ks], ky)
2089+ let hy = valueOrElse(getInteger(bv(O)), 0)
2090+ let kj = dc(cx)
2091+ let ky = valueOrElse(getInteger(kj), 0)
2092+ let kz = invoke(cO, "onStakeUnstakeLand", [cx], nil)
2093+ $Tuple2([IntegerEntry(iR, lastBlock.timestamp), IntegerEntry(br(aA, O, cx), lastBlock.timestamp), StringEntry(kc, makeString_11C((jZ :+ O), "_")), IntegerEntry(kj, (ky + iG)), StringEntry(bl(O), cx), StringEntry(dR(dP), cx), IntegerEntry(dQ(O, cx), hy), StringEntry(cY(), ex), StringEntry(kw, kx), kt], kz)
20922094 }
20932095 }
20942096 }
20992101
21002102
21012103
2102-@Callable(gf)
2103-func unstakeLand (iL) = {
2104- let ks = kp(gf)
2105- if ((size(gf.payments) != 0))
2104+@Callable(gg)
2105+func unstakeLand (iM) = {
2106+ let kt = kq(gg)
2107+ if ((size(gg.payments) != 0))
21062108 then throw("No payments required")
21072109 else {
2108- let b = toString(gf.caller)
2109- let fv = iJ(b, dV, iL)
2110- let O = fv._2
2111- let iT = fv._3
2112- let kb = da(b)
2113- let gb = gh(iT[cR])
2114- let iF = di(iT[cQ])
2115- let hw = (iF / cp)
2116- let ew = gg(gb, hw, -1)
2117- let kv = cY(iT[cS])
2118- let kf = split(valueOrElse(getString(kv), "0_0_0_0_0_0"), "_")
2119- let kw = makeString(fZ(kf, gb, hw, -1), "_")
2120- let jq = jg(b, O, iF, dV)
2121- let jY = split_51C(valueOrElse(getString(kb), ""), "_")
2122- let cJ = indexOf(jY, O)
2123- if (!(isDefined(cJ)))
2110+ let b = toString(gg.caller)
2111+ let fw = iK(b, dW, iM)
2112+ let O = fw._2
2113+ let iU = fw._3
2114+ let kc = db(b)
2115+ let gc = gi(iU[cS])
2116+ let iG = dj(iU[cR])
2117+ let hx = (iG / cq)
2118+ let ex = gh(gc, hx, -1)
2119+ let kw = cZ(iU[cT])
2120+ let kg = split(valueOrElse(getString(kw), "0_0_0_0_0_0"), "_")
2121+ let kx = makeString(ga(kg, gc, hx, -1), "_")
2122+ let jr = jh(b, O, iG, dW)
2123+ let jZ = split_51C(valueOrElse(getString(kc), ""), "_")
2124+ let cK = indexOf(jZ, O)
2125+ if (!(isDefined(cK)))
21242126 then throw(("Your staked lands don't contain " + O))
21252127 else {
21262128 let av = lastBlock.timestamp
2127- let kz = valueOrElse(getInteger(cM, bH(b)), 0)
2128- if ((kz >= av))
2129- then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(kz)))
2129+ let kA = valueOrElse(getInteger(cN, bH(b)), 0)
2130+ if ((kA >= av))
2131+ then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(kA)))
21302132 else {
2131- let kA = (valueOrElse(getInteger(cN, a(b)), 0) + cl)
2132- if ((kA > av))
2133- then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(kA)))
2133+ let kB = (valueOrElse(getInteger(cO, a(b)), 0) + cm)
2134+ if ((kB > av))
2135+ then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(kB)))
21342136 else {
2135- let ki = db(b)
2136- let kj = valueOrElse(getInteger(ki), 0)
2137- let kB = if ((iF > kj))
2137+ let kj = dc(b)
2138+ let kk = valueOrElse(getInteger(kj), 0)
2139+ let kC = if ((iG > kk))
21382140 then 0
2139- else (kj - iF)
2140- let ky = invoke(cN, "onStakeUnstakeLand", [b], nil)
2141- $Tuple2([ScriptTransfer(gf.caller, 1, fromBase58String(O)), DeleteEntry(bo(O)), DeleteEntry(br(aA, O, b)), StringEntry(cX(), ew), StringEntry(kv, kw), StringEntry(jq._2, makeString(jq._3, ":")), if ((size(jY) > 1))
2142- then StringEntry(kb, makeString_11C(removeByIndex(jY, value(cJ)), "_"))
2143- else DeleteEntry(kb), IntegerEntry(ki, kB), ks], ky)
2141+ else (kk - iG)
2142+ let kz = invoke(cO, "onStakeUnstakeLand", [b], nil)
2143+ $Tuple2([ScriptTransfer(gg.caller, 1, fromBase58String(O)), DeleteEntry(bo(O)), DeleteEntry(br(aA, O, b)), StringEntry(cY(), ex), StringEntry(kw, kx), StringEntry(jr._2, makeString(jr._3, ":")), if ((size(jZ) > 1))
2144+ then StringEntry(kc, makeString_11C(removeByIndex(jZ, value(cK)), "_"))
2145+ else DeleteEntry(kc), IntegerEntry(kj, kC), kt], kz)
21442146 }
21452147 }
21462148 }
21492151
21502152
21512153
2152-@Callable(gf)
2154+@Callable(gg)
21532155 func stakeDuck () = {
2154- let ks = kp(gf)
2155- if ((size(gf.payments) != 1))
2156+ let kt = kq(gg)
2157+ if ((size(gg.payments) != 1))
21562158 then throw("Exactly one payment required")
21572159 else {
2158- let kt = value(gf.payments[0])
2159- let bm = value(kt.assetId)
2160- let cw = toString(gf.caller)
2161- if ((kt.amount != 1))
2160+ let ku = value(gg.payments[0])
2161+ let bm = value(ku.assetId)
2162+ let cx = toString(gg.caller)
2163+ if ((ku.amount != 1))
21622164 then throw((("NFT " + aB) + " token should be attached as payment"))
21632165 else {
2164- let iP = value(assetInfo(bm))
2165- if (if ((iP.issuer != dt))
2166- then (iP.issuer != du)
2166+ let iQ = value(assetInfo(bm))
2167+ if (if ((iQ.issuer != du))
2168+ then (iQ.issuer != dv)
21672169 else false)
21682170 then throw((("Unknown issuer of " + aB) + " token"))
2169- else if (!(contains(iP.name, aB)))
2171+ else if (!(contains(iQ.name, aB)))
21702172 then throw((("Only NFT " + aB) + " tokens are accepted"))
21712173 else {
2172- let kC = toBase58String(bm)
2173- let iQ = bo(kC)
2174- if (isDefined(getInteger(iQ)))
2175- then throw((("NFT " + iP.name) + " is already staked"))
2176- else if (isDefined(getString(bE(cw))))
2177- then throw(("You already staked one duck: " + iP.name))
2178- else if (jM(kC))
2174+ let kD = toBase58String(bm)
2175+ let iR = bo(kD)
2176+ if (isDefined(getInteger(iR)))
2177+ then throw((("NFT " + iQ.name) + " is already staked"))
2178+ else if (isDefined(getString(bE(cx))))
2179+ then throw(("You already staked one duck: " + iQ.name))
2180+ else if (jN(kD))
21792181 then throw("stakeDuck_checkTournament")
21802182 else {
2181- let kD = bG(kC)
2182- let bY = getString(kD)
2183- let hi = bF(kC)
2184- let kE = getString(hi)
2185- let iy = y(kC)
2186- let iz = ae(valueOrElse(getInteger(C(kC)), 0))
2187- let kF = valueOrElse(getInteger(iy), iz)
2188- ([IntegerEntry(iQ, lastBlock.timestamp), IntegerEntry(br(aB, toBase58String(bm), cw), lastBlock.timestamp), StringEntry(bD(kC), cw), StringEntry(bE(cw), kC)] ++ (if (isDefined(bY))
2183+ let kE = bG(kD)
2184+ let bY = getString(kE)
2185+ let hj = bF(kD)
2186+ let kF = getString(hj)
2187+ let iz = y(kD)
2188+ let iA = ae(valueOrElse(getInteger(C(kD)), 0))
2189+ let kG = valueOrElse(getInteger(iz), iA)
2190+ ([IntegerEntry(iR, lastBlock.timestamp), IntegerEntry(br(aB, toBase58String(bm), cx), lastBlock.timestamp), StringEntry(bD(kD), cx), StringEntry(bE(cx), kD)] ++ (if (isDefined(bY))
21892191 then nil
2190- else ([StringEntry(kD, aI)] ++ (if (isDefined(kE))
2192+ else ([StringEntry(kE, aI)] ++ (if (isDefined(kF))
21912193 then nil
2192- else (([StringEntry(hi, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(iy, kF)) :+ ks)))))
2194+ else (([StringEntry(hj, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(iz, kG)) :+ kt)))))
21932195 }
21942196 }
21952197 }
21982200
21992201
22002202
2201-@Callable(gf)
2202-func unstakeDuck (kC) = {
2203- let ks = kp(gf)
2204- if ((size(gf.payments) != 0))
2203+@Callable(gg)
2204+func unstakeDuck (kD) = {
2205+ let kt = kq(gg)
2206+ if ((size(gg.payments) != 0))
22052207 then throw("No payments required")
22062208 else {
2207- let bm = fromBase58String(kC)
2208- let cw = toString(gf.caller)
2209- let iP = value(assetInfo(bm))
2210- let iQ = bo(kC)
2211- if (!(isDefined(getInteger(iQ))))
2212- then throw((("NFT " + iP.name) + " is not staked"))
2213- else if (!(isDefined(getString(bE(cw)))))
2214- then throw((("The duck " + iP.name) + " is not staked"))
2209+ let bm = fromBase58String(kD)
2210+ let cx = toString(gg.caller)
2211+ let iQ = value(assetInfo(bm))
2212+ let iR = bo(kD)
2213+ if (!(isDefined(getInteger(iR))))
2214+ then throw((("NFT " + iQ.name) + " is not staked"))
2215+ else if (!(isDefined(getString(bE(cx)))))
2216+ then throw((("The duck " + iQ.name) + " is not staked"))
22152217 else {
2216- let iS = valueOrErrorMessage(getString(bD(kC)), (("NFT " + iP.name) + " is orphaned"))
2217- if ((iS != cw))
2218+ let iT = valueOrErrorMessage(getString(bD(kD)), (("NFT " + iQ.name) + " is orphaned"))
2219+ if ((iT != cx))
22182220 then throw("Staked NFT is not yours")
2219- else if (jM(kC))
2221+ else if (jN(kD))
22202222 then throw("unstakeDuck_checkTournament")
22212223 else {
2222- let iy = y(kC)
2223- let iz = ae(valueOrElse(getInteger(C(kC)), 0))
2224- let aq = valueOrElse(getInteger(iy), iz)
2225- if ((iz > aq))
2226- then throw((("Please heal your duck to " + toString(iz)) + "hp before unstaking"))
2227- else [ScriptTransfer(gf.caller, 1, bm), DeleteEntry(iQ), DeleteEntry(iy), DeleteEntry(bG(kC)), DeleteEntry(bD(kC)), DeleteEntry(br(aB, kC, cw)), DeleteEntry(bE(cw)), ks]
2224+ let iz = y(kD)
2225+ let iA = ae(valueOrElse(getInteger(C(kD)), 0))
2226+ let aq = valueOrElse(getInteger(iz), iA)
2227+ if ((iA > aq))
2228+ then throw((("Please heal your duck to " + toString(iA)) + "hp before unstaking"))
2229+ else [ScriptTransfer(gg.caller, 1, bm), DeleteEntry(iR), DeleteEntry(iz), DeleteEntry(bG(kD)), DeleteEntry(bD(kD)), DeleteEntry(br(aB, kD, cx)), DeleteEntry(bE(cx)), kt]
22282230 }
22292231 }
22302232 }
22322234
22332235
22342236
2235-@Callable(gf)
2236-func claimRes (ed,kG) = {
2237- let ks = kp(gf)
2238- if ((size(gf.payments) != 0))
2237+@Callable(gg)
2238+func claimRes (ee,kH) = {
2239+ let kt = kq(gg)
2240+ if ((size(gg.payments) != 0))
22392241 then throw("No payments required")
22402242 else {
2241- let b = toString(gf.originCaller)
2242- let eE = iU(b, ed, dV, kG)
2243+ let b = toString(gg.originCaller)
2244+ let eF = iV(b, ee, dW, kH)
22432245 let z = valueOrErrorMessage(getString(bE(b)), "You don't have a duck staked")
2244- $Tuple2(((((eE._1 ++ jw(z, fraction(S, ed, co))._1) :+ StringEntry(eE._2, makeString(eE._3, ":"))) :+ StringEntry(eE._4, makeString(eE._5, ":"))) :+ ks), eE._3[bf])
2245- }
2246- }
2247-
2248-
2249-
2250-@Callable(gf)
2251-func claimResToWH (ed,kG) = {
2252- let ks = kp(gf)
2253- if ((size(gf.payments) != 0))
2246+ $Tuple2(((((eF._1 ++ jx(z, fraction(S, ee, cp))._1) :+ StringEntry(eF._2, makeString(eF._3, ":"))) :+ StringEntry(eF._4, makeString(eF._5, ":"))) :+ kt), eF._3[bf])
2247+ }
2248+ }
2249+
2250+
2251+
2252+@Callable(gg)
2253+func claimResToWH (ee,kH) = {
2254+ let kt = kq(gg)
2255+ if ((size(gg.payments) != 0))
22542256 then throw("No payments required")
22552257 else {
2256- let b = toString(gf.originCaller)
2257- let eE = iU(b, ed, dU, kG)
2258- $Tuple2(((((eE._1 ++ jC(b, fraction(S, ed, co))._1) :+ StringEntry(eE._2, makeString(eE._3, ":"))) :+ StringEntry(eE._4, makeString(eE._5, ":"))) :+ ks), eE._5[aW])
2259- }
2260- }
2261-
2262-
2263-
2264-@Callable(gf)
2265-func flight (in,io) = {
2266- let ks = kp(gf)
2267- if ((size(gf.payments) != 0))
2258+ let b = toString(gg.originCaller)
2259+ let eF = iV(b, ee, dV, kH)
2260+ $Tuple2(((((eF._1 ++ jD(b, fraction(S, ee, cp))._1) :+ StringEntry(eF._2, makeString(eF._3, ":"))) :+ StringEntry(eF._4, makeString(eF._5, ":"))) :+ kt), eF._5[aW])
2261+ }
2262+ }
2263+
2264+
2265+
2266+@Callable(gg)
2267+func flight (io,ip) = {
2268+ let kt = kq(gg)
2269+ if ((size(gg.payments) != 0))
22682270 then throw("No payments required")
22692271 else {
2270- let bI = toString(gf.caller)
2271- let gK = im(bI, in, io)
2272- let is = gK._1
2273- let z = gK._2
2274- let kD = bG(z)
2275- let iN = valueOrElse(getString(kD), aI)
2276- let iu = gK._4
2277- if ((iu == iN))
2272+ let bI = toString(gg.caller)
2273+ let gL = in(bI, io, ip)
2274+ let it = gL._1
2275+ let z = gL._2
2276+ let kE = bG(z)
2277+ let iO = valueOrElse(getString(kE), aI)
2278+ let iv = gL._4
2279+ if ((iv == iO))
22782280 then throw("You can't fly to the same location")
22792281 else {
2280- let kH = split(iu, "_")
2281- let kI = (kH[bj] == "T")
2282- let fS = E(z)
2283- let kJ = valueOrElse(getString(fS), ",;,_,;,_,;,_,;,_,;,_,;,")
2284- let kK = eF(kJ, gK._5)
2285- let kL = kK._1
2286- let kM = kK._2
2287- let kN = if (!(bX(cO, iN)))
2288- then if (kI)
2289- then throw(((("Cheat attempt: oldLoc=" + iN) + ", newLoc=") + iu))
2290- else if ((is > 0))
2291- then iu
2292- else iN
2293- else if (!(bX(cO, iu)))
2282+ let kI = split(iv, "_")
2283+ let kJ = (kI[bj] == "T")
2284+ let fT = E(z)
2285+ let kK = valueOrElse(getString(fT), ",;,_,;,_,;,_,;,_,;,_,;,")
2286+ let kL = eG(kK, gL._5)
2287+ let kM = kL._1
2288+ let kN = kL._2
2289+ let kO = if (!(bX(cP, iO)))
2290+ then if (kJ)
2291+ then throw(((("Cheat attempt: oldLoc=" + iO) + ", newLoc=") + iv))
2292+ else if ((it > 0))
2293+ then iv
2294+ else iO
2295+ else if (!(bX(cP, iv)))
22942296 then throw("Your duck is taking part in the tournament")
22952297 else {
2296- let kO = parseIntValue(kH[bk])
2297- let kP = split(iN, "_")
2298- let bZ = valueOrElse(getInteger(cO, bK), 0)
2299- if ((kO != (parseIntValue(kP[bk]) + 1)))
2300- then throw(((("Cheat attempt: oldLoc=" + iN) + ", newLoc=") + iu))
2301- else if ((is > 0))
2298+ let kP = parseIntValue(kI[bk])
2299+ let kQ = split(iO, "_")
2300+ let bZ = valueOrElse(getInteger(cP, bK), 0)
2301+ if ((kP != (parseIntValue(kQ[bk]) + 1)))
2302+ then throw(((("Cheat attempt: oldLoc=" + iO) + ", newLoc=") + iv))
2303+ else if ((it > 0))
23022304 then {
2303- let kQ = valueOrElse(getInteger(cO, bO(bZ, z)), 0)
2304- let kR = if ((kO > kQ))
2305- then invoke(cO, "saveDuckResult", [z, kO], nil)
2305+ let kR = valueOrElse(getInteger(cP, bO(bZ, z)), 0)
2306+ let kS = if ((kP > kR))
2307+ then invoke(cP, "saveDuckResult", [z, kP], nil)
23062308 else unit
2307- if ((kR == kR))
2308- then iu
2309+ if ((kS == kS))
2310+ then iv
23092311 else throw("Strict value is not equal to itself.")
23102312 }
2311- else iN
2313+ else iO
23122314 }
2313- $Tuple2(([StringEntry(kD, kN), StringEntry(fS, kL), IntegerEntry(y(z), is), ks] ++ (if (kM)
2315+ $Tuple2(([StringEntry(kE, kO), StringEntry(fT, kM), IntegerEntry(y(z), it), kt] ++ (if (kN)
23142316 then [StringEntry(K(z), "0_0_0_0_0")]
2315- else (nil ++ jw(z, if ((is > 0))
2317+ else (nil ++ jx(z, if ((it > 0))
23162318 then T
2317- else U)._1))), gK._3)
2319+ else U)._1))), gL._3)
23182320 }
23192321 }
23202322 }
23212323
23222324
23232325
2324-@Callable(gf)
2325-func heal (kS,kT,kU) = {
2326- let ks = kp(gf)
2327- if (if (if ((0 > kS))
2328- then true
2329- else (0 > kT))
2326+@Callable(gg)
2327+func heal (kT,kU,kV) = {
2328+ let kt = kq(gg)
2329+ if (if (if ((0 > kT))
23302330 then true
23312331 else (0 > kU))
2332+ then true
2333+ else (0 > kV))
23322334 then throw("Quantity cannot be negative")
23332335 else {
2334- let z = valueOrErrorMessage(getString(bE(toString(gf.caller))), "You don't have a duck staked")
2335- if (jM(z))
2336+ let z = valueOrErrorMessage(getString(bE(toString(gg.caller))), "You don't have a duck staked")
2337+ if (jN(z))
23362338 then throw("heal_checkTournament")
23372339 else {
2338- let kV = [kS, kT, kU]
2339- let iy = y(z)
2340- let iz = ae(valueOrElse(getInteger(C(z)), 0))
2341- let kW = valueOrElse(getInteger(iy), iz)
2342- if ((kW >= iz))
2343- then throw((("HP should be < " + toString(iz)) + " to heal"))
2340+ let kW = [kT, kU, kV]
2341+ let iz = y(z)
2342+ let iA = ae(valueOrElse(getInteger(C(z)), 0))
2343+ let kX = valueOrElse(getInteger(iz), iA)
2344+ if ((kX >= iA))
2345+ then throw((("HP should be < " + toString(iA)) + " to heal"))
23442346 else {
2345- let hi = bF(z)
2346- let hL = hh(hi)
2347- let kX = if ((hL[bh] == ""))
2347+ let hj = bF(z)
2348+ let hM = hi(hj)
2349+ let kY = if ((hM[bh] == ""))
23482350 then nil
2349- else split_4C(hL[bh], "_")
2350- func kY (em,cd) = {
2351- let dg = em._2
2352- let gB = if ((size(kX) > dg))
2353- then parseIntValue(kX[dg])
2351+ else split_4C(hM[bh], "_")
2352+ func kZ (en,cd) = {
2353+ let dh = en._2
2354+ let gC = if ((size(kY) > dh))
2355+ then parseIntValue(kY[dh])
23542356 else 0
2355- if ((3 > dg))
2357+ if ((3 > dh))
23562358 then {
2357- let kZ = kV[dg]
2358- if ((kZ > gB))
2359- then throw(((("You have only " + toString(gB)) + " of ") + aL[dg]))
2360- else $Tuple3((em._1 :+ toString((gB - kZ))), (dg + 1), (em._3 + (parseIntValue(split(cd, "_")[aR]) * kZ)))
2359+ let la = kW[dh]
2360+ if ((la > gC))
2361+ then throw(((("You have only " + toString(gC)) + " of ") + aL[dh]))
2362+ else $Tuple3((en._1 :+ toString((gC - la))), (dh + 1), (en._3 + (parseIntValue(split(cd, "_")[aR]) * la)))
23612363 }
2362- else $Tuple3((em._1 :+ toString(gB)), (dg + 1), em._3)
2364+ else $Tuple3((en._1 :+ toString(gC)), (dh + 1), en._3)
23632365 }
23642366
2365- let eE = {
2366- let eo = aP
2367- let ep = size(eo)
2368- let eq = $Tuple3(nil, 0, 0)
2369- func er (es,et) = if ((et >= ep))
2370- then es
2371- else kY(es, eo[et])
2372-
2373- func eu (es,et) = if ((et >= ep))
2374- then es
2367+ let eF = {
2368+ let ep = aP
2369+ let eq = size(ep)
2370+ let er = $Tuple3(nil, 0, 0)
2371+ func es (et,eu) = if ((eu >= eq))
2372+ then et
2373+ else kZ(et, ep[eu])
2374+
2375+ func ev (et,eu) = if ((eu >= eq))
2376+ then et
23752377 else throw("List size exceeds 50")
23762378
2377- eu(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(eq, 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)
2379+ ev(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(er, 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)
23782380 }
2379- let la = min([iz, (kW + eE._3)])
2380- $Tuple2(([IntegerEntry(iy, la), StringEntry(hi, makeString_2C([hL[be], hL[bf], hL[bg], makeString(eE._1, "_")], ":")), ks] ++ jw(z, (ab * ((kS + kT) + kU)))._1), la)
2381+ let lb = min([iA, (kX + eF._3)])
2382+ $Tuple2(([IntegerEntry(iz, lb), StringEntry(hj, makeString_2C([hM[be], hM[bf], hM[bg], makeString(eF._1, "_")], ":")), kt] ++ jx(z, (ab * ((kT + kU) + kV)))._1), lb)
23812383 }
23822384 }
23832385 }
23852387
23862388
23872389
2388-@Callable(gf)
2390+@Callable(gg)
23892391 func healES () = {
2390- let ks = kp(gf)
2391- if ((size(gf.payments) != 1))
2392+ let kt = kq(gg)
2393+ if ((size(gg.payments) != 1))
23922394 then throw("Exactly one payment required")
23932395 else {
2394- let kt = value(gf.payments[0])
2395- if ((kt.assetId != ch))
2396+ let ku = value(gg.payments[0])
2397+ if ((ku.assetId != ci))
23962398 then throw("Allowed USDT payment only!")
23972399 else {
2398- let z = valueOrErrorMessage(getString(bE(toString(gf.caller))), "You don't have a duck staked")
2399- if (jM(z))
2400+ let z = valueOrErrorMessage(getString(bE(toString(gg.caller))), "You don't have a duck staked")
2401+ if (jN(z))
24002402 then throw("healES_checkTournament")
24012403 else {
2402- let iy = y(z)
2403- let iz = ae(valueOrElse(getInteger(C(z)), 0))
2404- let kW = valueOrElse(getInteger(iy), iz)
2405- if ((kW > 0))
2404+ let iz = y(z)
2405+ let iA = ae(valueOrElse(getInteger(C(z)), 0))
2406+ let kX = valueOrElse(getInteger(iz), iA)
2407+ if ((kX > 0))
24062408 then throw("HP should be 0 to call Emergency Service")
24072409 else {
2408- let hi = bF(z)
2409- let hL = hh(hi)
2410- let kX = if ((hL[bh] == ""))
2410+ let hj = bF(z)
2411+ let hM = hi(hj)
2412+ let kY = if ((hM[bh] == ""))
24112413 then nil
2412- else split_4C(hL[bh], "_")
2413- let lb = if ((size(kX) > 0))
2414- then parseIntValue(kX[0])
2414+ else split_4C(hM[bh], "_")
2415+ let lc = if ((size(kY) > 0))
2416+ then parseIntValue(kY[0])
24152417 else 0
2416- let lc = if ((size(kX) > 1))
2417- then parseIntValue(kX[1])
2418+ let ld = if ((size(kY) > 1))
2419+ then parseIntValue(kY[1])
24182420 else 0
2419- let ld = if ((size(kX) > 2))
2420- then parseIntValue(kX[2])
2421+ let le = if ((size(kY) > 2))
2422+ then parseIntValue(kY[2])
24212423 else 0
2422- if (if (if ((lb > 0))
2423- then true
2424- else (lc > 0))
2424+ if (if (if ((lc > 0))
24252425 then true
24262426 else (ld > 0))
2427+ then true
2428+ else (le > 0))
24272429 then throw("You have to use own Medical Kit")
24282430 else {
2429- let le = getString(cL, bJ())
2430- let lf = if (isDefined(le))
2431- then split_4C(value(le), "_")
2431+ let lf = getString(cM, bJ())
2432+ let lg = if (isDefined(lf))
2433+ then split_4C(value(lf), "_")
24322434 else nil
2433- let lg = if ((size(lf) > 0))
2434- then parseIntValue(lf[0])
2435+ let lh = if ((size(lg) > 0))
2436+ then parseIntValue(lg[0])
24352437 else 0
2436- if ((0 >= lg))
2438+ if ((0 >= lh))
24372439 then throw("There are no Medical Kits L1 at Emergency Service storage")
24382440 else {
2439- let la = (kW + parseIntValue(split(aP[0], "_")[aR]))
2440- let lh = makeString([toString((lg - 1)), removeByIndex(lf, 0)], "_")
2441+ let lb = (kX + parseIntValue(split(aP[0], "_")[aR]))
2442+ let li = makeString([toString((lh - 1)), removeByIndex(lg, 0)], "_")
24412443 let cd = split(aP[0], "_")
2442- let li = cc(cd)
2443- let lj = fraction((li * aK), aJ, (co * aU))
2444- if ((kt.amount != lj))
2445- then throw(("Payment attached should be " + toString(lj)))
2444+ let lj = cc(cd)
2445+ let lk = fraction((lj * aK), aJ, (cp * aU))
2446+ if ((ku.amount != lk))
2447+ then throw(("Payment attached should be " + toString(lk)))
24462448 else {
2447- let eE = dc(invoke(cL, "updateEsStorage", [lh], [AttachedPayment(ch, lj)]))
2448- $Tuple2(([IntegerEntry(iy, la), ks] ++ jw(z, V)._1), eE)
2449+ let eF = dd(invoke(cM, "updateEsStorage", [li], [AttachedPayment(ci, lk)]))
2450+ $Tuple2(([IntegerEntry(iz, lb), kt] ++ jx(z, V)._1), eF)
24492451 }
24502452 }
24512453 }
24572459
24582460
24592461
2460-@Callable(gf)
2461-func updateBackpack (z,lk) = if ((gf.caller != cL))
2462+@Callable(gg)
2463+func updateBackpack (z,ll) = if ((gg.caller != cM))
24622464 then throw("permission denied")
2463- else $Tuple2([StringEntry(bF(z), lk)], lk)
2464-
2465-
2466-
2467-@Callable(gf)
2465+ else $Tuple2([StringEntry(bF(z), ll)], ll)
2466+
2467+
2468+
2469+@Callable(gg)
24682470 func commitForRandom () = {
2469- let ks = kp(gf)
2470- let ll = (height + cV)
2471- let b = toString(gf.caller)
2472- $Tuple2(([IntegerEntry(cW(b), ll)] :+ ks), ll)
2473- }
2474-
2475-
2476-
2477-@Callable(gf)
2478-func awardSLand (cw) = if ((gf.caller != cO))
2471+ let kt = kq(gg)
2472+ let lm = (height + cW)
2473+ let b = toString(gg.caller)
2474+ $Tuple2(([IntegerEntry(cX(b), lm)] :+ kt), lm)
2475+ }
2476+
2477+
2478+
2479+@Callable(gg)
2480+func awardSLand (cx) = if ((gg.caller != cP))
24792481 then throw("Access denied")
2480- else if ((size(gf.payments) != 0))
2482+ else if ((size(gg.payments) != 0))
24812483 then throw("No payments required")
24822484 else {
2483- let eE = if(addressFromStringValue(cw), gf.transactionId)
2484- $Tuple2(eE._1, eE._2._1)
2485- }
2486-
2487-
2488-
2489-@Callable(gf)
2485+ let eF = ig(addressFromStringValue(cx), gg.transactionId)
2486+ $Tuple2(eF._1, eF._2._1)
2487+ }
2488+
2489+
2490+
2491+@Callable(gg)
24902492 func buySLand () = {
2491- let ks = kp(gf)
2492- if ((size(gf.payments) != 1))
2493+ let kt = kq(gg)
2494+ if ((size(gg.payments) != 1))
24932495 then throw("Exactly one payment required")
24942496 else {
2495- let kt = value(gf.payments[0])
2496- if ((kt.assetId != ch))
2497+ let ku = value(gg.payments[0])
2498+ if ((ku.assetId != ci))
24972499 then throw("Allowed USDT payment only!")
2498- else if ((kt.amount != dC))
2499- then throw(("Payment attached should be " + toString(dC)))
2500+ else if ((ku.amount != dD))
2501+ then throw(("Payment attached should be " + toString(dD)))
25002502 else {
2501- let eE = if(gf.caller, gf.transactionId)
2502- $Tuple2((((eE._1 :+ ScriptTransfer(cL, kt.amount, ch)) ++ jC(toString(gf.caller), X)._1) :+ ks), eE._2._1)
2503+ let eF = ig(gg.caller, gg.transactionId)
2504+ $Tuple2((((eF._1 :+ ScriptTransfer(cM, ku.amount, ci)) ++ jD(toString(gg.caller), X)._1) :+ kt), eF._2._1)
25032505 }
25042506 }
25052507 }
25062508
25072509
25082510
2509-@Callable(gf)
2510-func expedition (in,io) = {
2511- let ks = kp(gf)
2512- if ((size(gf.payments) != 0))
2511+@Callable(gg)
2512+func expedition (io,ip) = {
2513+ let kt = kq(gg)
2514+ if ((size(gg.payments) != 0))
25132515 then throw("No payments required")
25142516 else {
2515- let bI = toString(gf.caller)
2516- let gK = im(bI, in, io)
2517- let z = gK._2
2518- let iy = y(z)
2519- let hi = bF(z)
2520- let hL = hh(hi)
2521- let jn = split(hL[bg], "_")
2522- let jp = makeString(ey(true, jn, dB), "_")
2523- let fS = E(z)
2524- let kJ = valueOrElse(getString(fS), ",;,_,;,_,;,_,;,_,;,_,;,")
2525- let lm = eF(kJ, gK._5)
2526- let kL = lm._1
2527- let kM = lm._2
2528- let ln = if(gf.caller, gf.transactionId)
2529- let il = ln._2._1
2530- let eE = if ((0 >= gK._1))
2531- then $Tuple3([IntegerEntry(iy, 0), StringEntry(fS, kL)], "", 0)
2532- else $Tuple3((ln._1 ++ (if (kM)
2517+ let bI = toString(gg.caller)
2518+ let gL = in(bI, io, ip)
2519+ let z = gL._2
2520+ let iz = y(z)
2521+ let hj = bF(z)
2522+ let hM = hi(hj)
2523+ let jo = split(hM[bg], "_")
2524+ let jq = makeString(ez(true, jo, dC), "_")
2525+ let fT = E(z)
2526+ let kK = valueOrElse(getString(fT), ",;,_,;,_,;,_,;,_,;,_,;,")
2527+ let ln = eG(kK, gL._5)
2528+ let kM = ln._1
2529+ let kN = ln._2
2530+ let lo = ig(gg.caller, gg.transactionId)
2531+ let im = lo._2._1
2532+ let eF = if ((0 >= gL._1))
2533+ then $Tuple3([IntegerEntry(iz, 0), StringEntry(fT, kM)], "", 0)
2534+ else $Tuple3((lo._1 ++ (if (kN)
25332535 then [StringEntry(K(z), "0_0_0_0_0")]
2534- else ((((nil :+ StringEntry(bG(z), makeString([ln._2._2, "L", il], "_"))) :+ IntegerEntry(iy, gK._1)) :+ StringEntry(fS, kL)) :+ StringEntry(hi, makeString([hL[be], hL[bf], jp, hL[bh]], ":"))))), il, gK._3)
2535- if (jM(z))
2536+ else ((((nil :+ StringEntry(bG(z), makeString([lo._2._2, "L", im], "_"))) :+ IntegerEntry(iz, gL._1)) :+ StringEntry(fT, kM)) :+ StringEntry(hj, makeString([hM[be], hM[bf], jq, hM[bh]], ":"))))), im, gL._3)
2537+ if (jN(z))
25362538 then throw("expedition_checkTournament")
2537- else $Tuple2(((eE._1 ++ jw(z, X)._1) :+ ks), $Tuple2(eE._2, eE._3))
2538- }
2539- }
2540-
2541-
2542-
2543-@Callable(gf)
2539+ else $Tuple2(((eF._1 ++ jx(z, X)._1) :+ kt), $Tuple2(eF._2, eF._3))
2540+ }
2541+ }
2542+
2543+
2544+
2545+@Callable(gg)
25442546 func upgradeInfra (O) = {
2545- let ks = kp(gf)
2546- if ((size(gf.payments) != 0))
2547+ let kt = kq(gg)
2548+ if ((size(gg.payments) != 0))
25472549 then throw("No payments required")
25482550 else {
2549- let eE = jh(true, gf.caller, 0, O)
2550- let z = valueOrErrorMessage(getString(bE(toString(gf.caller))), "You don't have a duck staked")
2551- $Tuple2(((eE._1 :+ ks) ++ jw(z, fraction(Y, eE._3, co))._1), eE._2)
2552- }
2553- }
2554-
2555-
2556-
2557-@Callable(gf)
2558-func activateArtifact (lo,lp) = {
2559- let ks = kp(gf)
2560- if ((size(gf.payments) != 0))
2551+ let eF = ji(true, gg.caller, 0, O)
2552+ let z = valueOrErrorMessage(getString(bE(toString(gg.caller))), "You don't have a duck staked")
2553+ $Tuple2(((eF._1 :+ kt) ++ jx(z, fraction(Y, eF._3, cp))._1), eF._2)
2554+ }
2555+ }
2556+
2557+
2558+
2559+@Callable(gg)
2560+func activateArtifact (lp,lq) = {
2561+ let kt = kq(gg)
2562+ if ((size(gg.payments) != 0))
25612563 then throw("No payments required")
25622564 else {
2563- let b = toString(gf.caller)
2564- let eE = {
2565- let ci = lo
2566- if (("PRESALE" == ci))
2567- then jK(b, lp)
2568- else if (("ONBOARD" == ci))
2569- then jD(b)
2565+ let b = toString(gg.caller)
2566+ let eF = {
2567+ let cj = lp
2568+ if (("PRESALE" == cj))
2569+ then jL(b, lq)
2570+ else if (("ONBOARD" == cj))
2571+ then jE(b)
25702572 else throw("Unknown artifact")
25712573 }
2572- (eE :+ ks)
2573- }
2574- }
2575-
2576-
2577-
2578-@Callable(gf)
2579-func mergeLands (jQ) = {
2580- let ks = kp(gf)
2581- if ((size(gf.payments) != 0))
2574+ (eF :+ kt)
2575+ }
2576+ }
2577+
2578+
2579+
2580+@Callable(gg)
2581+func mergeLands (jR) = {
2582+ let kt = kq(gg)
2583+ if ((size(gg.payments) != 0))
25822584 then throw("No payments required")
25832585 else {
2584- let eE = ko(toString(gf.caller), jQ)
2585- $Tuple2(((eE._1 :+ ks) ++ jC(toString(gf.caller), Z)._1), eE._2)
2586- }
2587- }
2588-
2589-
2590-
2591-@Callable(gf)
2592-func cargoExchange (lq,O) = {
2593- let ks = kp(gf)
2594- if ((size(gf.payments) != 0))
2586+ let eF = kp(toString(gg.caller), jR)
2587+ $Tuple2(((eF._1 :+ kt) ++ jD(toString(gg.caller), Z)._1), eF._2)
2588+ }
2589+ }
2590+
2591+
2592+
2593+@Callable(gg)
2594+func cargoExchange (lr,O) = {
2595+ let kt = kq(gg)
2596+ if ((size(gg.payments) != 0))
25952597 then throw("No payments required")
25962598 else {
2597- let hK = split_4C(lq, ":")
2598- let b = toString(gf.originCaller)
2599- let iP = value(assetInfo(fromBase58String(O)))
2600- let iQ = bo(O)
2601- if (!(isDefined(getInteger(iQ))))
2602- then throw((iP.name + " is not staked"))
2599+ let hL = split_4C(lr, ":")
2600+ let b = toString(gg.originCaller)
2601+ let iQ = value(assetInfo(fromBase58String(O)))
2602+ let iR = bo(O)
2603+ if (!(isDefined(getInteger(iR))))
2604+ then throw((iQ.name + " is not staked"))
26032605 else {
2604- let iS = valueOrErrorMessage(getString(bl(O)), (("NFT " + iP.name) + " is orphaned"))
2605- if ((iS != b))
2606+ let iT = valueOrErrorMessage(getString(bl(O)), (("NFT " + iQ.name) + " is orphaned"))
2607+ if ((iT != b))
26062608 then throw((aA + " is not yours"))
26072609 else {
2608- let hw = (di(split(iP.description, "_")[cQ]) / cp)
2609- let hx = valueOrElse(getInteger(bv(O)), 0)
2610+ let hx = (dj(split(iQ.description, "_")[cR]) / cq)
2611+ let hy = valueOrElse(getInteger(bv(O)), 0)
26102612 let z = valueOrErrorMessage(getString(bE(b)), "You don't have a duck staked")
2611- let iN = valueOrElse(getString(bG(z)), aI)
2612- let ca = split(value(iN), "_")
2613+ let iO = valueOrElse(getString(bG(z)), aI)
2614+ let ca = split(value(iO), "_")
26132615 if ((ca[bj] != "L"))
26142616 then throw((("Duck location type is " + ca[bj]) + ", but should be L"))
26152617 else if ((ca[bk] != O))
26162618 then throw(("Duck should be on the land " + O))
26172619 else {
2618- let hv = bu(O)
2619- let hm = hu(hv, hw, hx)
2620- let hi = bF(z)
2621- let hL = hh(hi)
2622- let eE = hJ(hK, hm, hL)
2623- let hD = split(hm[aZ], "_")
2624- let je = (parseIntValue(hD[bb]) + eE._7)
2625- let jf = (parseIntValue(hD[bc]) - eE._7)
2626-[StringEntry(hi, makeString_2C([hL[be], eE._4, eE._5, eE._6], ":")), StringEntry(hv, makeString_2C([hm[aV], eE._1, eE._2, eE._3, makeString([hD[ba], toString(je), toString(jf), hD[bd]], "_")], ":")), ks]
2620+ let hw = bu(O)
2621+ let hn = hv(hw, hx, hy)
2622+ let hj = bF(z)
2623+ let hM = hi(hj)
2624+ let eF = hK(hL, hn, hM)
2625+ let hE = split(hn[aZ], "_")
2626+ let jf = (parseIntValue(hE[bb]) + eF._7)
2627+ let jg = (parseIntValue(hE[bc]) - eF._7)
2628+[StringEntry(hj, makeString_2C([hM[be], eF._4, eF._5, eF._6], ":")), StringEntry(hw, makeString_2C([hn[aV], eF._1, eF._2, eF._3, makeString([hE[ba], toString(jf), toString(jg), hE[bd]], "_")], ":")), kt]
26272629 }
26282630 }
26292631 }
26322634
26332635
26342636
2635-@Callable(gf)
2636-func saveWarehouse (hz,O) = if ((gf.caller != cL))
2637+@Callable(gg)
2638+func saveWarehouse (hA,O) = if ((gg.caller != cM))
26372639 then throw("Access denied")
26382640 else {
2639- let hv = bu(O)
2640- let hA = split_4C(hz, ":")
2641- if ((size(hA) != 5))
2641+ let hw = bu(O)
2642+ let hB = split_4C(hA, ":")
2643+ if ((size(hB) != 5))
26422644 then throw("warehouse string should contain 4 ':' separators")
26432645 else {
2644- let lr = split(hA[aZ], "_")[ba]
2645- let je = hl(hA)
2646- let ls = hj(hA[aV])
2647- let jf = ((ls - parseIntValue(lr)) - je)
2648- let lt = makeString_2C([hA[aV], hA[aW], hA[aX], hA[aY], makeString([lr, toString(je), toString(jf), toString(ls)], "_")], ":")
2649- $Tuple2([StringEntry(hv, lt)], lt)
2646+ let ls = split(hB[aZ], "_")[ba]
2647+ let jf = hm(hB)
2648+ let lt = hk(hB[aV])
2649+ let jg = ((lt - parseIntValue(ls)) - jf)
2650+ let lu = makeString_2C([hB[aV], hB[aW], hB[aX], hB[aY], makeString([ls, toString(jf), toString(jg), toString(lt)], "_")], ":")
2651+ $Tuple2([StringEntry(hw, lu)], lu)
26502652 }
26512653 }
26522654
26532655
26542656
2655-@Callable(gf)
2656-func fixWarehouseFormat (O) = if ((gf.caller != cK))
2657+@Callable(gg)
2658+func fixWarehouseFormat (O) = if ((gg.caller != cL))
26572659 then throw("Access denied")
26582660 else {
2659- let hv = bu(O)
2660- let iP = value(assetInfo(fromBase58String(O)))
2661- let hw = (di(split(iP.description, "_")[cQ]) / cp)
2662- let hx = valueOrElse(getInteger(bv(O)), 0)
2663- let hA = hu(hv, hw, hx)
2664- let lr = df(invoke(cL, "recalcLockedVolumeREADONLY", [O, hA], nil))
2665- let je = hl(hA)
2666- let ls = hj(hA[aV])
2667- let jf = ((ls - lr) - je)
2668- let lt = makeString_2C([hA[aV], hA[aW], hA[aX], hA[aY], makeString([toString(lr), toString(je), toString(jf), toString(ls)], "_")], ":")
2669- $Tuple2([StringEntry(hv, lt)], lt)
2661+ let hw = bu(O)
2662+ let iQ = value(assetInfo(fromBase58String(O)))
2663+ let hx = (dj(split(iQ.description, "_")[cR]) / cq)
2664+ let hy = valueOrElse(getInteger(bv(O)), 0)
2665+ let hB = hv(hw, hx, hy)
2666+ let ls = dg(invoke(cM, "recalcLockedVolumeREADONLY", [O, hB], nil))
2667+ let jf = hm(hB)
2668+ let lt = hk(hB[aV])
2669+ let jg = ((lt - ls) - jf)
2670+ let lu = makeString_2C([hB[aV], hB[aW], hB[aX], hB[aY], makeString([toString(ls), toString(jf), toString(jg), toString(lt)], "_")], ":")
2671+ $Tuple2([StringEntry(hw, lu)], lu)
26702672 }
26712673
26722674
26732675
2674-@Callable(gf)
2675-func fixContinentProportions (jQ) = if ((gf.caller != cK))
2676+@Callable(gg)
2677+func fixContinentProportions (jR) = if ((gg.caller != cL))
26762678 then throw("Access denied")
26772679 else {
2678- func lu (em,lv) = (em :+ valueOrElse(getString(cY(lv)), "0_0_0_0_0_0"))
2679-
2680- let fP = {
2681- let eo = aM
2682- let ep = size(eo)
2683- let eq = nil
2684- func er (es,et) = if ((et >= ep))
2685- then es
2686- else lu(es, eo[et])
2687-
2688- func eu (es,et) = if ((et >= ep))
2689- then es
2680+ func lv (en,lw) = (en :+ valueOrElse(getString(cZ(lw)), "0_0_0_0_0_0"))
2681+
2682+ let fQ = {
2683+ let ep = aM
2684+ let eq = size(ep)
2685+ let er = nil
2686+ func es (et,eu) = if ((eu >= eq))
2687+ then et
2688+ else lv(et, ep[eu])
2689+
2690+ func ev (et,eu) = if ((eu >= eq))
2691+ then et
26902692 else throw("List size exceeds 5")
26912693
2692- eu(er(er(er(er(er(eq, 0), 1), 2), 3), 4), 5)
2693- }
2694- func lw (em,O) = {
2695- let iP = value(assetInfo(fromBase58String(O)))
2696- let iT = split(iP.description, "_")
2697- let hw = (di(iT[cQ]) / cp)
2698- let lv = iT[cS]
2699- let gb = gh(iT[cR])
2700- let gJ = value(indexOf(aM, lv))
2701- let kf = split(em[gJ], "_")
2702- let lx = makeString(fZ(kf, gb, hw, 1), "_")
2703- let ci = lv
2704- if (("Americas" == ci))
2705- then [lx, em[1], em[2], em[3], em[4]]
2706- else if (("Europe" == ci))
2707- then [em[0], lx, em[2], em[3], em[4]]
2708- else if (("Asia" == ci))
2709- then [em[0], em[1], lx, em[3], em[4]]
2710- else if (("Africa" == ci))
2711- then [em[0], em[1], em[2], lx, em[4]]
2712- else if (("Oceania" == ci))
2713- then [em[0], em[1], em[2], em[3], lx]
2694+ ev(es(es(es(es(es(er, 0), 1), 2), 3), 4), 5)
2695+ }
2696+ func lx (en,O) = {
2697+ let iQ = value(assetInfo(fromBase58String(O)))
2698+ let iU = split(iQ.description, "_")
2699+ let hx = (dj(iU[cR]) / cq)
2700+ let lw = iU[cT]
2701+ let gc = gi(iU[cS])
2702+ let gK = value(indexOf(aM, lw))
2703+ let kg = split(en[gK], "_")
2704+ let ly = makeString(ga(kg, gc, hx, 1), "_")
2705+ let cj = lw
2706+ if (("Americas" == cj))
2707+ then [ly, en[1], en[2], en[3], en[4]]
2708+ else if (("Europe" == cj))
2709+ then [en[0], ly, en[2], en[3], en[4]]
2710+ else if (("Asia" == cj))
2711+ then [en[0], en[1], ly, en[3], en[4]]
2712+ else if (("Africa" == cj))
2713+ then [en[0], en[1], en[2], ly, en[4]]
2714+ else if (("Oceania" == cj))
2715+ then [en[0], en[1], en[2], en[3], ly]
27142716 else throw("wrong continent")
27152717 }
27162718
2717- let ex = {
2718- let eo = jQ
2719- let ep = size(eo)
2720- let eq = fP
2721- func hc (es,et) = if ((et >= ep))
2722- then es
2723- else lw(es, eo[et])
2724-
2725- func hd (es,et) = if ((et >= ep))
2726- then es
2719+ let ey = {
2720+ let ep = jR
2721+ let eq = size(ep)
2722+ let er = fQ
2723+ func hd (et,eu) = if ((eu >= eq))
2724+ then et
2725+ else lx(et, ep[eu])
2726+
2727+ func he (et,eu) = if ((eu >= eq))
2728+ then et
27272729 else throw("List size exceeds 100")
27282730
2729- hd(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(eq, 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)
2730- }
2731- $Tuple2([StringEntry(cY("Americas"), ex[0]), StringEntry(cY("Europe"), ex[1]), StringEntry(cY("Asia"), ex[2]), StringEntry(cY("Africa"), ex[3]), StringEntry(cY("Oceania"), ex[4])], 0)
2731+ he(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(er, 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)
2732+ }
2733+ $Tuple2([StringEntry(cZ("Americas"), ey[0]), StringEntry(cZ("Europe"), ey[1]), StringEntry(cZ("Asia"), ey[2]), StringEntry(cZ("Africa"), ey[3]), StringEntry(cZ("Oceania"), ey[4])], 0)
27322734 }
27332735
27342736
27352737
2736-@Callable(gf)
2737-func fixStakedPieces (cw) = if ((gf.caller != cK))
2738+@Callable(gg)
2739+func fixStakedPieces (cx) = if ((gg.caller != cL))
27382740 then throw("Access denied")
27392741 else {
2740- let kj = if ((cw == ""))
2742+ let kk = if ((cx == ""))
27412743 then 0
27422744 else {
2743- let kc = getString(al, da(cw))
2744- let jY = if (isDefined(kc))
2745- then split_51C(value(kc), "_")
2745+ let kd = getString(al, db(cx))
2746+ let jZ = if (isDefined(kd))
2747+ then split_51C(value(kd), "_")
27462748 else nil
2747- func ly (em,O) = {
2748- let iP = value(assetInfo(fromBase58String(O)))
2749- let dj = split(iP.description, "_")[cQ]
2750- (em + di(dj))
2749+ func lz (en,O) = {
2750+ let iQ = value(assetInfo(fromBase58String(O)))
2751+ let dk = split(iQ.description, "_")[cR]
2752+ (en + dj(dk))
27512753 }
27522754
2753- let eo = jY
2754- let ep = size(eo)
2755- let eq = 0
2756- func er (es,et) = if ((et >= ep))
2757- then es
2758- else ly(es, eo[et])
2759-
2760- func eu (es,et) = if ((et >= ep))
2761- then es
2755+ let ep = jZ
2756+ let eq = size(ep)
2757+ let er = 0
2758+ func es (et,eu) = if ((eu >= eq))
2759+ then et
2760+ else lz(et, ep[eu])
2761+
2762+ func ev (et,eu) = if ((eu >= eq))
2763+ then et
27622764 else throw("List size exceeds 100")
27632765
2764- eu(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(eq, 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)
2766+ ev(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(er, 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)
27652767 }
2766- $Tuple2([IntegerEntry(db(cw), kj)], kj)
2768+ $Tuple2([IntegerEntry(dc(cx), kk)], kk)
27672769 }
27682770
27692771
27702772
2771-@Callable(gf)
2772-func setCustomName (bm,ka,bq) = {
2773- let ks = kp(gf)
2774- if ((size(gf.payments) != 1))
2773+@Callable(gg)
2774+func setCustomName (bm,kb,bq) = {
2775+ let kt = kq(gg)
2776+ if ((size(gg.payments) != 1))
27752777 then throw("Exactly one payment required")
27762778 else {
2777- let kt = value(gf.payments[0])
2778- if ((kt.assetId != ch))
2779+ let ku = value(gg.payments[0])
2780+ if ((ku.assetId != ci))
27792781 then throw("Allowed USDT payment only!")
2780- else if ((kt.amount != dy))
2781- then throw(("Payment should be " + toString(dy)))
2782- else if (contains(ka, "__"))
2783- then throw(("Name should not contain '__': " + ka))
2784- else if ((size(ka) > dz))
2785- then throw(("Name too long, maxLength=" + toString(dz)))
2782+ else if ((ku.amount != dz))
2783+ then throw(("Payment should be " + toString(dz)))
2784+ else if (contains(kb, "__"))
2785+ then throw(("Name should not contain '__': " + kb))
2786+ else if ((size(kb) > dA))
2787+ then throw(("Name too long, maxLength=" + toString(dA)))
27862788 else {
2787- let b = toString(gf.originCaller)
2788- let lz = {
2789- let ci = bq
2790- if (("ACCOUNT" == ci))
2789+ let b = toString(gg.originCaller)
2790+ let lA = {
2791+ let cj = bq
2792+ if (("ACCOUNT" == cj))
27912793 then {
2792- let lA = dS(ka)
2793- let lB = getString(lA)
2794- if (isDefined(lB))
2795- then throw(("Name already registered: " + ka))
2794+ let lB = dT(kb)
2795+ let lC = getString(lB)
2796+ if (isDefined(lC))
2797+ then throw(("Name already registered: " + kb))
27962798 else {
2797- let lC = by(b)
2798- let lD = getString(lC)
2799- let lE = if (isDefined(lD))
2800- then [DeleteEntry(dS(value(lD)))]
2799+ let lD = by(b)
2800+ let lE = getString(lD)
2801+ let lF = if (isDefined(lE))
2802+ then [DeleteEntry(dT(value(lE)))]
28012803 else nil
2802- (((lE :+ StringEntry(lC, ka)) :+ StringEntry(lA, b)) ++ jC(b, W)._1)
2804+ (((lF :+ StringEntry(lD, kb)) :+ StringEntry(lB, b)) ++ jD(b, W)._1)
28032805 }
28042806 }
2805- else if (("LAND" == ci))
2807+ else if (("LAND" == cj))
28062808 then {
2807- let iP = value(assetInfo(fromBase58String(bm)))
2808- let iQ = bo(bm)
2809- if (!(isDefined(getInteger(iQ))))
2810- then throw((iP.name + " is not staked"))
2809+ let iQ = value(assetInfo(fromBase58String(bm)))
2810+ let iR = bo(bm)
2811+ if (!(isDefined(getInteger(iR))))
2812+ then throw((iQ.name + " is not staked"))
28112813 else {
2812- let iS = valueOrErrorMessage(getString(bl(bm)), (("NFT " + iP.name) + " is orphaned"))
2813- if ((iS != b))
2814+ let iT = valueOrErrorMessage(getString(bl(bm)), (("NFT " + iQ.name) + " is orphaned"))
2815+ if ((iT != b))
28142816 then throw((aA + " is not yours"))
28152817 else {
2816- let lA = dL(ka)
2817- let lB = getString(lA)
2818- if (isDefined(lB))
2819- then throw(("Name already registered: " + ka))
2818+ let lB = dM(kb)
2819+ let lC = getString(lB)
2820+ if (isDefined(lC))
2821+ then throw(("Name already registered: " + kb))
28202822 else {
2821- let lF = bn(bm)
2822- let lD = getString(lF)
2823- let lE = if (isDefined(lD))
2824- then [DeleteEntry(dL(value(lD)))]
2823+ let lG = bn(bm)
2824+ let lE = getString(lG)
2825+ let lF = if (isDefined(lE))
2826+ then [DeleteEntry(dM(value(lE)))]
28252827 else nil
2826- (((lE :+ StringEntry(lF, ka)) :+ StringEntry(lA, bm)) ++ jC(b, W)._1)
2828+ (((lF :+ StringEntry(lG, kb)) :+ StringEntry(lB, bm)) ++ jD(b, W)._1)
28272829 }
28282830 }
28292831 }
28302832 }
2831- else if (("DUCK" == ci))
2833+ else if (("DUCK" == cj))
28322834 then {
2833- let iP = value(assetInfo(fromBase58String(bm)))
2834- let iQ = bo(bm)
2835- if (if (!(isDefined(getInteger(iQ))))
2835+ let iQ = value(assetInfo(fromBase58String(bm)))
2836+ let iR = bo(bm)
2837+ if (if (!(isDefined(getInteger(iR))))
28362838 then true
28372839 else !(isDefined(getString(bE(b)))))
2838- then throw((iP.name + " is not staked"))
2840+ then throw((iQ.name + " is not staked"))
28392841 else {
2840- let iS = valueOrErrorMessage(getString(bD(bm)), (("NFT " + iP.name) + " is orphaned"))
2841- if ((iS != b))
2842+ let iT = valueOrErrorMessage(getString(bD(bm)), (("NFT " + iQ.name) + " is orphaned"))
2843+ if ((iT != b))
28422844 then throw((aB + " is not yours"))
28432845 else {
2844- let lA = dR(ka)
2845- let lB = getString(lA)
2846- if (isDefined(lB))
2847- then throw(("Name already registered: " + ka))
2846+ let lB = dS(kb)
2847+ let lC = getString(lB)
2848+ if (isDefined(lC))
2849+ then throw(("Name already registered: " + kb))
28482850 else {
2849- let lF = bx(bm)
2850- let lD = getString(lF)
2851- let lE = if (isDefined(lD))
2852- then [DeleteEntry(dR(value(lD)))]
2851+ let lG = bx(bm)
2852+ let lE = getString(lG)
2853+ let lF = if (isDefined(lE))
2854+ then [DeleteEntry(dS(value(lE)))]
28532855 else nil
2854- (((lE :+ StringEntry(lF, ka)) :+ StringEntry(lA, bm)) ++ jw(bm, W)._1)
2856+ (((lF :+ StringEntry(lG, kb)) :+ StringEntry(lB, bm)) ++ jx(bm, W)._1)
28552857 }
28562858 }
28572859 }
28582860 }
28592861 else throw("Unknown entity type")
28602862 }
2861- $Tuple2(((lz :+ ScriptTransfer(cL, kt.amount, ch)) :+ ks), 0)
2863+ $Tuple2(((lA :+ ScriptTransfer(cM, ku.amount, ci)) :+ kt), 0)
28622864 }
28632865 }
28642866 }
28652867
28662868
28672869
2868-@Callable(gf)
2869-func setReferrals (lG,lH) = if ((gf.callerPublicKey != dv))
2870+@Callable(gg)
2871+func setReferrals (lH,lI) = if ((gg.callerPublicKey != dw))
28702872 then throw("Permission denied")
28712873 else {
2872- let ks = kp(gf)
2873- if ((size(gf.payments) != 0))
2874+ let kt = kq(gg)
2875+ if ((size(gg.payments) != 0))
28742876 then throw("No payments required")
2875- else if (!(isDefined(addressFromString(lG))))
2876- then throw(("Invalid address: " + lG))
2877- else if (!(isDefined(addressFromString(lH))))
2878- then throw(("Invalid address: " + lH))
2877+ else if (!(isDefined(addressFromString(lH))))
2878+ then throw(("Invalid address: " + lH))
2879+ else if (!(isDefined(addressFromString(lI))))
2880+ then throw(("Invalid address: " + lI))
28792881 else {
2880- let lI = dT()
2881- let lJ = getString(lI)
2882- let lK = if (isDefined(lJ))
2883- then split_4C(value(lJ), "_")
2882+ let lJ = dU()
2883+ let lK = getString(lJ)
2884+ let lL = if (isDefined(lK))
2885+ then split_4C(value(lK), "_")
28842886 else nil
2885- if (containsElement(lK, lH))
2886- then throw((lH + " is not newbie (already has referrals)"))
2887+ if (containsElement(lL, lI))
2888+ then throw((lI + " is not newbie (already has referrals)"))
28872889 else {
2888- let jE = bz(lH)
2889- let jF = getString(jE)
2890- if (if (isDefined(jF))
2891- then isDefined(addressFromString(value(jF)))
2890+ let jF = bz(lI)
2891+ let jG = getString(jF)
2892+ if (if (isDefined(jG))
2893+ then isDefined(addressFromString(value(jG)))
28922894 else false)
2893- then throw(((lH + " already has refBy: ") + value(jF)))
2895+ then throw(((lI + " already has refBy: ") + value(jG)))
28942896 else {
2895- let lL = bC(lG)
2896- let lM = getString(lL)
2897- let lN = if (isDefined(lM))
2898- then split_4C(value(lM), "_")
2897+ let lM = bC(lH)
2898+ let lN = getString(lM)
2899+ let lO = if (isDefined(lN))
2900+ then split_4C(value(lN), "_")
28992901 else nil
2900- if (containsElement(lN, lH))
2901- then throw((((lG + " already contains ") + lH) + " within referrals"))
2902+ if (containsElement(lO, lI))
2903+ then throw((((lH + " already contains ") + lI) + " within referrals"))
29022904 else {
2903- let lO = makeString_2C((lN :+ lH), "_")
2904- let lP = if (containsElement(lK, lG))
2905- then value(lJ)
2906- else makeString_2C((lK :+ lG), "_")
2907- $Tuple2([StringEntry(jE, lG), StringEntry(lL, lO), StringEntry(lI, lP), ks], 0)
2905+ let lP = makeString_2C((lO :+ lI), "_")
2906+ let lQ = if (containsElement(lL, lH))
2907+ then value(lK)
2908+ else makeString_2C((lL :+ lH), "_")
2909+ $Tuple2([StringEntry(jF, lH), StringEntry(lM, lP), StringEntry(lJ, lQ), kt], 0)
29082910 }
29092911 }
29102912 }
29132915
29142916
29152917
2916-@Callable(gf)
2917-func distributePoints (lQ,lR,lS,lT,lU) = {
2918- let ks = kp(gf)
2919- if ((size(gf.payments) != 0))
2918+@Callable(gg)
2919+func distributePoints (lR,lS,lT,lU,lV) = {
2920+ let kt = kq(gg)
2921+ if ((size(gg.payments) != 0))
29202922 then throw("No payments required")
29212923 else {
2922- let b = toString(gf.originCaller)
2924+ let b = toString(gg.originCaller)
29232925 let z = valueOrErrorMessage(getString(bE(b)), "You don't have a duck staked")
2924- let lV = H(b)
2925- let lW = valueOrElse(getInteger(al, lV), 0)
2926- let lX = D(z)
2927- let lY = valueOrElse(getInteger(al, lX), 0)
2928- let lZ = (lW + lY)
2929- let ma = ((((lQ + lR) + lS) + lT) + lU)
2930- if ((ma > lZ))
2931- then throw((("There are only " + toString(lZ)) + " free points to distribute"))
2926+ let lW = H(b)
2927+ let lX = valueOrElse(getInteger(al, lW), 0)
2928+ let lY = D(z)
2929+ let lZ = valueOrElse(getInteger(al, lY), 0)
2930+ let ma = (lX + lZ)
2931+ let mb = ((((lR + lS) + lT) + lU) + lV)
2932+ if ((mb > ma))
2933+ then throw((("There are only " + toString(ma)) + " free points to distribute"))
29322934 else {
2933- let mb = A(z)
2934- let ao = split(valueOrElse(getString(al, mb), "0_0_0_0_0"), "_")
2935- let mc = (lW - ma)
2936- $Tuple2([IntegerEntry(lV, if ((0 > mc))
2935+ let mc = A(z)
2936+ let ao = split(valueOrElse(getString(al, mc), "0_0_0_0_0"), "_")
2937+ let md = (lX - mb)
2938+ $Tuple2([IntegerEntry(lW, if ((0 > md))
29372939 then 0
2938- else mc), IntegerEntry(lX, if ((0 > mc))
2939- then (lY + mc)
2940- else lY), StringEntry(mb, makeString([toString((parseIntValue(ao[j]) + lQ)), toString((parseIntValue(ao[k]) + lR)), toString((parseIntValue(ao[l]) + lS)), toString((parseIntValue(ao[m]) + lT)), toString((parseIntValue(ao[n]) + lU))], "_")), ks], 0)
2940+ else md), IntegerEntry(lY, if ((0 > md))
2941+ then (lZ + md)
2942+ else lZ), StringEntry(mc, makeString([toString((parseIntValue(ao[j]) + lR)), toString((parseIntValue(ao[k]) + lS)), toString((parseIntValue(ao[l]) + lT)), toString((parseIntValue(ao[m]) + lU)), toString((parseIntValue(ao[n]) + lV))], "_")), kt], 0)
29412943 }
29422944 }
29432945 }
29442946
29452947
29462948
2947-@Callable(gf)
2948-func splitByGlobalWeightsREADONLY (ed) = $Tuple2(nil, ev(ed))
2949-
2950-
2951-
2952-@Callable(gf)
2953-func splitByGlobalAndLocalWeightsREADONLY (md,me,gi) = {
2954- let gb = gh(gi)
2955- $Tuple2(nil, $Tuple2(ev(md), eg(me, gb)))
2956- }
2957-
2958-
2959-
2960-@Callable(gf)
2961-func getBackpackREADONLY (z) = $Tuple2(nil, makeString(hh(bF(z)), ":"))
2962-
2963-
2964-
2965-@Callable(gf)
2949+@Callable(gg)
2950+func splitByGlobalWeightsREADONLY (ee) = $Tuple2(nil, ew(ee))
2951+
2952+
2953+
2954+@Callable(gg)
2955+func splitByGlobalAndLocalWeightsREADONLY (me,mf,gj) = {
2956+ let gc = gi(gj)
2957+ $Tuple2(nil, $Tuple2(ew(me), eh(mf, gc)))
2958+ }
2959+
2960+
2961+
2962+@Callable(gg)
2963+func getBackpackREADONLY (z) = $Tuple2(nil, makeString(hi(bF(z)), ":"))
2964+
2965+
2966+
2967+@Callable(gg)
29662968 func getWarehouseREADONLY (O) = {
2967- let iP = value(assetInfo(fromBase58String(O)))
2968- let hw = (di(split(iP.description, "_")[cQ]) / cp)
2969- let hx = valueOrElse(getInteger(bv(O)), 0)
2970- $Tuple2(nil, makeString_2C(hu(bu(O), hw, hx), ":"))
2971- }
2972-
2973-
2974-
2975-@Callable(gf)
2969+ let iQ = value(assetInfo(fromBase58String(O)))
2970+ let hx = (dj(split(iQ.description, "_")[cR]) / cq)
2971+ let hy = valueOrElse(getInteger(bv(O)), 0)
2972+ $Tuple2(nil, makeString_2C(hv(bu(O), hx, hy), ":"))
2973+ }
2974+
2975+
2976+
2977+@Callable(gg)
29762978 func saveLastTx () = {
2977- let ig = gf.caller
2978- if (if (if ((ig != cN))
2979- then (ig != cL)
2979+ let ih = gg.caller
2980+ if (if (if ((ih != cO))
2981+ then (ih != cM)
29802982 else false)
2981- then (ig != cO)
2983+ then (ih != cP)
29822984 else false)
29832985 then throw("Access denied")
2984- else $Tuple2([kp(gf)], 42)
2985- }
2986-
2987-
2988-
2989-@Callable(gf)
2990-func updateDuckStats (z,jx) = if ((gf.caller != cL))
2986+ else $Tuple2([kq(gg)], 42)
2987+ }
2988+
2989+
2990+
2991+@Callable(gg)
2992+func updateDuckStats (z,jy) = if ((gg.caller != cM))
29912993 then throw("Access denied")
2992- else jw(z, jx)
2993-
2994-
2995-
2996-@Callable(gf)
2997-func updateAccStats (b,jx) = if ((gf.caller != cL))
2994+ else jx(z, jy)
2995+
2996+
2997+
2998+@Callable(gg)
2999+func updateAccStats (b,jy) = if ((gg.caller != cM))
29983000 then throw("Access denied")
2999- else jC(b, jx)
3000-
3001-
3002-
3003-@Callable(gf)
3004-func equipDuck (mf) = {
3005- let ks = kp(gf)
3006- if ((size(gf.payments) != 0))
3001+ else jD(b, jy)
3002+
3003+
3004+
3005+@Callable(gg)
3006+func equipDuck (mg) = {
3007+ let kt = kq(gg)
3008+ if ((size(gg.payments) != 0))
30073009 then throw("No payments required")
30083010 else {
3009- let b = toString(gf.originCaller)
3011+ let b = toString(gg.originCaller)
30103012 let z = valueOrErrorMessage(getString(bE(b)), "You don't have a duck staked")
3011- if (jM(z))
3013+ if (jN(z))
30123014 then throw("equipDuck_checkTournament")
30133015 else {
3014- let fS = E(z)
3015- let mg = split(valueOrElse(getString(fS), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
3016- let hi = bF(z)
3017- let hL = hh(hi)
3018- let kL = split(mf, "_")
3019- if ((size(kL) != p))
3016+ let fT = E(z)
3017+ let mh = split(valueOrElse(getString(fT), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
3018+ let hj = bF(z)
3019+ let hM = hi(hj)
3020+ let kM = split(mg, "_")
3021+ if ((size(kM) != p))
30203022 then throw("Wrong equipment string")
30213023 else {
3022- let fU = fH(mg, eS(hL[bh]), true, nil)
3023- let fV = split(kL[o], ";")[1]
3024- let am = if ((fV == ""))
3024+ let fV = fI(mh, eT(hM[bh]), true, nil)
3025+ let fW = split(kM[o], ";")[1]
3026+ let am = if ((fW == ""))
30253027 then 0
30263028 else {
3027- let fW = split(fV, ",")[0]
3028- if ((fW == ""))
3029+ let fX = split(fW, ",")[0]
3030+ if ((fX == ""))
30293031 then 0
30303032 else {
3031- let fh = split(fW, ":")
3032- let cJ = fh[0]
3033- let fX = fh[1]
3034- if (if (if (if (if ((cJ == "06"))
3033+ let fi = split(fX, ":")
3034+ let cK = fi[0]
3035+ let fY = fi[1]
3036+ if (if (if (if (if ((cK == "06"))
30353037 then true
3036- else (cJ == "07"))
3038+ else (cK == "07"))
30373039 then true
3038- else (cJ == "08"))
3039- then (fX != "")
3040+ else (cK == "08"))
3041+ then (fY != "")
30403042 else false)
3041- then (parseIntValue(fX) > 0)
3043+ then (parseIntValue(fY) > 0)
30423044 else false)
3043- then parseIntValue(split(aP[parseIntValue(cJ)], "_")[aR])
3045+ then parseIntValue(split(aP[parseIntValue(cK)], "_")[aR])
30443046 else 0
30453047 }
30463048 }
3047- let fC = ak(this, z, am, true)
3048- let fY = fH(kL, fU, false, fC)
3049- let mh = eX(fY)
3050- $Tuple2([StringEntry(fS, mf), StringEntry(hi, makeString_2C([hL[be], hL[bf], hL[bg], mh], ":")), StringEntry(K(z), makeString([toString(fC[7]), toString(fC[8]), toString(fC[9]), toString(fC[10]), toString(fC[11])], "_")), ks], 0)
3049+ let fD = ak(this, z, am, true)
3050+ let fZ = fI(kM, fV, false, fD)
3051+ let mi = eY(fZ)
3052+ $Tuple2([StringEntry(fT, mg), StringEntry(hj, makeString_2C([hM[be], hM[bf], hM[bg], mi], ":")), StringEntry(K(z), makeString([toString(fD[7]), toString(fD[8]), toString(fD[9]), toString(fD[10]), toString(fD[11])], "_")), kt], 0)
30513053 }
30523054 }
30533055 }
30553057
30563058
30573059
3058-@Callable(gf)
3059-func fortificateLand (O,mi) = {
3060- let ks = kp(gf)
3061- if ((size(gf.payments) != 0))
3060+@Callable(gg)
3061+func fortificateLand (O,mj) = {
3062+ let kt = kq(gg)
3063+ if ((size(gg.payments) != 0))
30623064 then throw("No payments required")
30633065 else {
3064- let b = toString(gf.originCaller)
3066+ let b = toString(gg.originCaller)
30653067 let z = valueOrElse(getString(bE(b)), "")
3066- let fc = ak(this, z, 0, false)
3067- let mj = bw(O)
3068- let mk = split(valueOrElse(getString(mj), ":0_15:0_18:0"), "_")
3069- let iP = value(assetInfo(fromBase58String(O)))
3070- let hw = (di(split(iP.description, "_")[cQ]) / cp)
3071- let hx = valueOrElse(getInteger(bv(O)), 0)
3072- let hv = bu(O)
3073- let hA = hu(hv, hw, hx)
3074- let ml = split(hA[aZ], "_")
3075- let mm = parseIntValue(ml[bb])
3076- let mn = parseIntValue(ml[bc])
3077- let mo = split(mi, "_")
3078- let mp = fO(mk, eS(hA[aY]), mm, mn, true, nil)
3079- let fU = mp._1
3080- let mq = mp._2
3081- let mr = mp._3
3082- let ms = fO(mo, fU, mq, mr, false, fc)
3083- let fY = ms._1
3084- let mt = ms._2
3085- let mu = ms._3
3086- let mh = eX(fY)
3087- let jv = makeString([ml[ba], toString(mt), toString(mu), ml[bd]], "_")
3088- $Tuple2([StringEntry(mj, mi), StringEntry(hv, makeString_2C([hA[aV], hA[aW], hA[aX], mh, jv], ":")), ks], 0)
3089- }
3090- }
3091-
3092-
3093-
3094-@Callable(gf)
3095-func initDuckTourAttempt (z) = if ((gf.caller != cO))
3068+ let fd = ak(this, z, 0, false)
3069+ let mk = bw(O)
3070+ let ml = split(valueOrElse(getString(mk), ":0_15:0_18:0"), "_")
3071+ let iQ = value(assetInfo(fromBase58String(O)))
3072+ let hx = (dj(split(iQ.description, "_")[cR]) / cq)
3073+ let hy = valueOrElse(getInteger(bv(O)), 0)
3074+ let hw = bu(O)
3075+ let hB = hv(hw, hx, hy)
3076+ let mm = split(hB[aZ], "_")
3077+ let mn = parseIntValue(mm[bb])
3078+ let mo = parseIntValue(mm[bc])
3079+ let mp = split(mj, "_")
3080+ let mq = fP(ml, eT(hB[aY]), mn, mo, true, nil)
3081+ let fV = mq._1
3082+ let mr = mq._2
3083+ let ms = mq._3
3084+ let mt = fP(mp, fV, mr, ms, false, fd)
3085+ let fZ = mt._1
3086+ let mu = mt._2
3087+ let mv = mt._3
3088+ let mi = eY(fZ)
3089+ let jw = makeString([mm[ba], toString(mu), toString(mv), mm[bd]], "_")
3090+ $Tuple2([StringEntry(mk, mj), StringEntry(hw, makeString_2C([hB[aV], hB[aW], hB[aX], mi, jw], ":")), kt], 0)
3091+ }
3092+ }
3093+
3094+
3095+
3096+@Callable(gg)
3097+func initDuckTourAttempt (z) = if ((gg.caller != cP))
30963098 then throw("Access denied")
30973099 else {
3098- let ks = kp(gf)
3099- let iy = y(z)
3100- let iz = ae(valueOrElse(getInteger(C(z)), 0))
3101- let kF = valueOrElse(getInteger(iy), iz)
3102- let mv = bG(z)
3103- let iN = valueOrElse(getString(mv), aI)
3104- let bZ = valueOrElse(getInteger(cO, bK), 0)
3105- let mw = (toString(bZ) + "_T_0")
3106- $Tuple2([ks, IntegerEntry(I(z), kF), IntegerEntry(iy, iz), StringEntry(J(z), iN), StringEntry(mv, mw)], mw)
3100+ let kt = kq(gg)
3101+ let iz = y(z)
3102+ let iA = ae(valueOrElse(getInteger(C(z)), 0))
3103+ let kG = valueOrElse(getInteger(iz), iA)
3104+ let mw = bG(z)
3105+ let iO = valueOrElse(getString(mw), aI)
3106+ let bZ = valueOrElse(getInteger(cP, bK), 0)
3107+ let mx = (toString(bZ) + "_T_0")
3108+ $Tuple2([kt, IntegerEntry(I(z), kG), IntegerEntry(iz, iA), StringEntry(J(z), iO), StringEntry(mw, mx)], mx)
31073109 }
31083110
31093111
31103112
3111-@Callable(gf)
3113+@Callable(gg)
31123114 func breakAttempt () = {
3113- let ks = kp(gf)
3114- let z = valueOrErrorMessage(getString(bE(toString(gf.caller))), "You don't have a duck staked")
3115- let mv = bG(z)
3116- let iN = valueOrElse(getString(mv), aI)
3117- if ((split(iN, "_")[bj] != "T"))
3115+ let kt = kq(gg)
3116+ let z = valueOrErrorMessage(getString(bE(toString(gg.caller))), "You don't have a duck staked")
3117+ let mw = bG(z)
3118+ let iO = valueOrElse(getString(mw), aI)
3119+ if ((split(iO, "_")[bj] != "T"))
31183120 then throw("Your duck is not in the tournament")
31193121 else {
3120- let mx = getIntegerValue(I(z))
3121- let my = getStringValue(J(z))
3122- $Tuple2([ks, IntegerEntry(y(z), mx), StringEntry(mv, my)], iN)
3123- }
3124- }
3125-
3126-
3127-
3128-@Callable(gf)
3129-func exitTournamentInternal (z) = if ((gf.caller != this))
3122+ let my = getIntegerValue(I(z))
3123+ let mz = getStringValue(J(z))
3124+ $Tuple2([kt, IntegerEntry(y(z), my), StringEntry(mw, mz)], iO)
3125+ }
3126+ }
3127+
3128+
3129+
3130+@Callable(gg)
3131+func exitTournamentInternal (z) = if ((gg.caller != this))
31303132 then throw("Access denied")
31313133 else {
3132- let mx = getIntegerValue(I(z))
3133- let my = getStringValue(J(z))
3134- $Tuple2([IntegerEntry(y(z), mx), StringEntry(bG(z), my)], false)
3134+ let my = getIntegerValue(I(z))
3135+ let mz = getStringValue(J(z))
3136+ $Tuple2([IntegerEntry(y(z), my), StringEntry(bG(z), mz)], false)
31353137 }
31363138
31373139
31383140
3139-@Callable(gf)
3140-func prepareRobbery (in,io) = {
3141- let ks = kp(gf)
3142- if (!(sigVerify_8Kb(in, io, dv)))
3141+@Callable(gg)
3142+func prepareRobbery (io,ip) = {
3143+ let kt = kq(gg)
3144+ if (!(sigVerify_8Kb(io, ip, dw)))
31433145 then throw("signature does not match")
3144- else if ((size(gf.payments) != 1))
3146+ else if ((size(gg.payments) != 1))
31453147 then throw("exactly 1 payment must be attached")
31463148 else {
3147- let kt = gf.payments[0]
3148- let mz = kt.amount
3149- if (if (!(isDefined(kt.assetId)))
3149+ let ku = gg.payments[0]
3150+ let mA = ku.amount
3151+ if (if (!(isDefined(ku.assetId)))
31503152 then true
3151- else (value(kt.assetId) != cU))
3153+ else (value(ku.assetId) != cV))
31523154 then throw("WLGOLD payments only!")
31533155 else {
3154- let eK = split(toUtf8String(in), "|")
3155- if ((size(eK) != 2))
3156+ let eL = split(toUtf8String(io), "|")
3157+ if ((size(eL) != 2))
31563158 then throw("Wrong message format")
31573159 else {
3158- let z = eK[0]
3160+ let z = eL[0]
31593161 let aw = as(this, z)._1
3160- if ((aw > mz))
3161- then throw(((("Payment " + toString(mz)) + " < required ") + toString(aw)))
3162+ if ((aw > mA))
3163+ then throw(((("Payment " + toString(mA)) + " < required ") + toString(aw)))
31623164 else {
3163- let mA = split(eK[1], "_")
3165+ let mB = split(eL[1], "_")
31643166 let av = lastBlock.timestamp
31653167 let ax = valueOrElse(getInteger(Q(z)), 0)
31663168 let ay = valueOrElse(getString(R(z)), "")
31703172 else false)
31713173 then throw(("You already started robbing, wait till " + toString(az)))
31723174 else {
3173- func mB (em,O) = {
3174- let mC = valueOrElse(getInteger(N(O)), 0)
3175- let mD = valueOrElse(getInteger(P(O)), 0)
3176- if ((mC > size(t)))
3175+ func mC (en,O) = {
3176+ let mD = valueOrElse(getInteger(N(O)), 0)
3177+ let mE = valueOrElse(getInteger(P(O)), 0)
3178+ if ((mD > size(t)))
31773179 then throw("Invalid state")
3178- else if ((av > mD))
3180+ else if ((av > mE))
31793181 then {
3180- let mE = valueOrElse(getInteger(bo(O)), 0)
3181- if ((0 >= mE))
3182- then em
3182+ let mF = valueOrElse(getInteger(bo(O)), 0)
3183+ if ((0 >= mF))
3184+ then en
31833185 else {
3184- let fM = value(assetInfo(fromBase58String(O)))
3185- let iT = split(fM.description, "_")
3186- let iF = di(iT[cQ])
3187- let mF = iE(O, iF)
3188- let gl = (av - mE)
3189- let iW = fraction(gl, (mF * iF), aG)
3190- if ((u > iW))
3191- then em
3192- else (em :+ O)
3186+ let fN = value(assetInfo(fromBase58String(O)))
3187+ let iU = split(fN.description, "_")
3188+ let iG = dj(iU[cR])
3189+ let mG = iF(O, iG)
3190+ let gm = (av - mF)
3191+ let iX = fraction(gm, (mG * iG), aG)
3192+ if ((u > iX))
3193+ then en
3194+ else (en :+ O)
31933195 }
31943196 }
3195- else em
3197+ else en
31963198 }
31973199
3198- let mG = {
3199- let eo = mA
3200- let ep = size(eo)
3201- let eq = nil
3202- func er (es,et) = if ((et >= ep))
3203- then es
3204- else mB(es, eo[et])
3205-
3206- func eu (es,et) = if ((et >= ep))
3207- then es
3200+ let mH = {
3201+ let ep = mB
3202+ let eq = size(ep)
3203+ let er = nil
3204+ func es (et,eu) = if ((eu >= eq))
3205+ then et
3206+ else mC(et, ep[eu])
3207+
3208+ func ev (et,eu) = if ((eu >= eq))
3209+ then et
32083210 else throw("List size exceeds 10")
32093211
3210- eu(er(er(er(er(er(er(er(er(er(er(eq, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
3212+ ev(es(es(es(es(es(es(es(es(es(es(er, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
32113213 }
3212- if ((size(mG) == 0))
3214+ if ((size(mH) == 0))
32133215 then throw("No candidates for robbery")
32143216 else {
3215- let mH = dn(size(mG), height, (io + gf.transactionId))
3216- let O = mG[mH]
3217- $Tuple2([IntegerEntry(N(O), v), IntegerEntry(P(O), (av + t[v])), IntegerEntry(Q(z), x), StringEntry(R(z), O), ks], O)
3217+ let mI = do(size(mH), height, (ip + gg.transactionId))
3218+ let O = mH[mI]
3219+ $Tuple2([IntegerEntry(N(O), v), IntegerEntry(P(O), (av + t[v])), IntegerEntry(Q(z), x), StringEntry(R(z), O), kt], O)
32183220 }
32193221 }
32203222 }
32253227
32263228
32273229
3228-@Callable(gf)
3229-func robLand (in,io) = {
3230- let ks = kp(gf)
3231- if (!(sigVerify_8Kb(in, io, dv)))
3230+@Callable(gg)
3231+func robLand (io,ip) = {
3232+ let kt = kq(gg)
3233+ if (!(sigVerify_8Kb(io, ip, dw)))
32323234 then throw("signature does not match")
3233- else $Tuple2([ks], 0)
3234- }
3235+ else {
3236+ let bI = toString(gg.caller)
3237+ let z = valueOrErrorMessage(getString(bE(bI)), "You don't have a duck staked")
3238+ let av = lastBlock.timestamp
3239+ $Tuple2([kt, IntegerEntry(L(z), av)], 0)
3240+ }
3241+ }
3242+
3243+
3244+
3245+@Callable(gg)
3246+func deliver (io,ip) = if (!(cg))
3247+ then throw("Delivery feature is turned off!")
3248+ else {
3249+ let kt = kq(gg)
3250+ if (!(sigVerify_8Kb(io, ip, dw)))
3251+ then throw("signature does not match")
3252+ else $Tuple2([kt], 0)
3253+ }
32353254
32363255
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func a (b) = ("lastArbTimeUser_" + b)
55
66
77 let c = 100000000
88
99 let d = 3200
1010
1111 let e = 4000
1212
1313 let f = 3
1414
1515 let g = 100000000
1616
1717 let h = 400
1818
1919 let i = ["Strength", "Accuracy", "Intellect", "Endurance", "Dexterity", "Level", "Health"]
2020
2121 let j = 0
2222
2323 let k = 1
2424
2525 let l = 2
2626
2727 let m = 3
2828
2929 let n = 4
3030
3131 let o = 0
3232
3333 let p = 6
3434
3535 let q = 2
3636
3737 let r = 2
3838
3939 let s = 30
4040
4141 let t = [0, 600000, 900000, 43200000, 21600000]
4242
4343 let u = 20000000
4444
4545 let v = 1
4646
4747 let w = 0
4848
4949 let x = 1
5050
5151 func y (z) = ("duckHealth_" + z)
5252
5353
5454 func A (z) = ("duckChars_" + z)
5555
5656
5757 func B (z) = ("duckXP_" + z)
5858
5959
6060 func C (z) = ("duckLevel_" + z)
6161
6262
6363 func D (z) = ("duckFreePoints_" + z)
6464
6565
6666 func E (z) = ("duckEquipment_" + z)
6767
6868
6969 func F (b) = ("userXP_" + b)
7070
7171
7272 func G (b) = ("userLevel_" + b)
7373
7474
7575 func H (b) = ("userFreePoints_" + b)
7676
7777
7878 func I (z) = ("savedHealth_" + z)
7979
8080
8181 func J (z) = ("savedLocation_" + z)
8282
8383
8484 func K (z) = ("duckBuffs_" + z)
8585
8686
8787 func L (z) = ("lastRobberyTime_" + z)
8888
8989
9090 func M (z) = ("lastRobberyCost_" + z)
9191
9292
9393 func N (O) = ("landRobberyState_" + O)
9494
9595
9696 func P (O) = ("landCooldownETA_" + O)
9797
9898
9999 func Q (z) = ("duckRobberyState_" + z)
100100
101101
102102 func R (z) = ("lockedLandByDuck_" + z)
103103
104104
105105 let S = 10000
106106
107107 let T = 10000
108108
109109 let U = 2000
110110
111111 let V = 100000
112112
113113 let W = 1000000
114114
115115 let X = 5000000
116116
117117 let Y = 10000
118118
119119 let Z = 1000000
120120
121121 let aa = 1000000
122122
123123 let ab = 10000
124124
125125 func ac (ad) = fraction(d, pow(ad, 4, e, 4, 4, DOWN), c)
126126
127127
128128 func ae (af) = (100 + af)
129129
130130
131131 func ag (ah,ai) = {
132132 let aj = ac(ai)
133133 [aj, (f * (aj - ah))]
134134 }
135135
136136
137137 func ak (al,z,am,an) = {
138138 let ao = split(valueOrElse(getString(al, A(z)), "0_0_0_0_0"), "_")
139139 let ap = valueOrElse(getInteger(al, C(z)), 0)
140140 let aq = valueOrElse(getInteger(al, y(z)), ae(ap))
141141 let ar = split(valueOrElse(getString(al, K(z)), "0_0_0_0_0"), "_")
142142 ([parseIntValue(ao[j]), parseIntValue(ao[k]), parseIntValue(ao[l]), parseIntValue(ao[m]), parseIntValue(ao[n]), ap, aq] ++ (if (an)
143143 then [am, am, am, am, am]
144144 else [parseIntValue(ar[j]), parseIntValue(ar[k]), parseIntValue(ar[l]), parseIntValue(ar[m]), parseIntValue(ar[n])]))
145145 }
146146
147147
148148 func as (al,z) = {
149149 let at = valueOrElse(getInteger(al, M(z)), 0)
150150 let au = valueOrElse(getInteger(al, L(z)), 0)
151151 let av = lastBlock.timestamp
152152 let aw = max([g, (at - (h * (av - au)))])
153153 let ax = valueOrElse(getInteger(al, Q(z)), 0)
154154 let ay = valueOrElse(getString(al, R(z)), "")
155155 let az = valueOrElse(getInteger(al, P(ay)), 0)
156156 $Tuple5(aw, au, ax, ay, az)
157157 }
158158
159159
160160 let aA = "LAND"
161161
162162 let aB = "DUCK"
163163
164164 let aC = "PRESALE"
165165
166166 let aD = 6
167167
168168 let aE = 25
169169
170170 let aF = 3456000
171171
172172 let aG = 86400000
173173
174174 let aH = 10000000000
175175
176176 let aI = "Africa_F_Africa"
177177
178178 let aJ = 39637
179179
180180 let aK = 10
181181
182182 let aL = ["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", "Mine L1", "Mine L2", "Mine L3", "Trap L1", "Trap L2", "Trap L3"]
183183
184184 let aM = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
185185
186186 let aN = 10000000
187187
188188 let aO = [15, 16, 17, 18, 19, 20]
189189
190190 let aP = ["8_8_8_17_17_42_12_0_30_0,0,0,0,0,0,0_", "8_8_8_17_17_42_24_0_60_0,0,5,2,0,0,0_", "8_8_8_17_17_42_36_0_120_0,0,10,4,0,0,0_", "8_19_19_8_27_19_26_1_20_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_52_1_40_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_78_1_80_0,0,0,0,0,0,0_001", "8_8_8_8_8_60_13_2_2_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_011", "30_30_3_17_17_3_30_3_30_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_60_3_50_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_90_3_70_0,0,0,0,0,0,0_111", "18_18_10_18_18_18_11_4_10_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_20_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_30_0,0,0,0,0,0,0_201", "4_13_22_4_35_22_23_0_50,1,0_0,0,0,0,0,0,0_", "4_13_22_4_35_22_46_0_50,1,1_0,2,5,0,0,0,0_", "4_13_22_4_35_22_69_0_50,2,1_0,5,10,0,0,0,0_", "5_25_40_5_10_15_20_1_30,1,1_0,0,0,0,0,0,0_", "5_25_40_5_10_15_40_1_30,1,2_2,1,3,0,0,0,0_", "5_25_40_5_10_15_60_1_30,1,3_5,2,8,0,0,0,0_"]
191191
192192 let aQ = 6
193193
194194 let aR = 8
195195
196196 let aS = 9
197197
198198 let aT = 10
199199
200200 let aU = 10
201201
202202 let aV = 0
203203
204204 let aW = 1
205205
206206 let aX = 2
207207
208208 let aY = 3
209209
210210 let aZ = 4
211211
212212 let ba = 0
213213
214214 let bb = 1
215215
216216 let bc = 2
217217
218218 let bd = 3
219219
220220 let be = 0
221221
222222 let bf = 1
223223
224224 let bg = 2
225225
226226 let bh = 3
227227
228228 let bi = 0
229229
230230 let bj = 1
231231
232232 let bk = 2
233233
234234 func bl (bm) = ("no_" + bm)
235235
236236
237237 func bn (bm) = ("lcna_" + bm)
238238
239239
240240 func bo (bm) = ("st_" + bm)
241241
242242
243243 func bp (bq,bm) = makeString(["las", bq, bm], "_")
244244
245245
246246 func br (bs,bm,bt) = ((((("sttao_" + bs) + "_") + bm) + "_") + bt)
247247
248248
249249 func bu (O) = ("wh_" + O)
250250
251251
252252 func bv (bm) = ("infraLevel_" + bm)
253253
254254
255255 func bw (O) = ("fortifications_" + O)
256256
257257
258258 func bx (bm) = ("duckCustomNameByAssetId_" + bm)
259259
260260
261261 func by (b) = ("accountCustomNameByAddr_" + b)
262262
263263
264264 func bz (b) = ("accRefBy_" + b)
265265
266266
267267 func bA (z) = ("onboardArtActivatedOnDuck_" + z)
268268
269269
270270 func bB (b) = ("onboardArtActivatedDuckBy_" + b)
271271
272272
273273 func bC (b) = ("accReferrals_" + b)
274274
275275
276276 func bD (bm) = ("duckOwner_" + bm)
277277
278278
279279 func bE (bt) = ("stakedDuckByOwner_" + bt)
280280
281281
282282 func bF (z) = ("backPack_" + z)
283283
284284
285285 func bG (z) = ("duckLocation_" + z)
286286
287287
288288 func bH (bI) = ("%s%s__userGwlReleaseTime__" + bI)
289289
290290
291291 func bJ () = "emergencyWarehouseProducts"
292292
293293
294294 let bK = "%s__lastTourId"
295295
296296 func bL (bM) = ("%s%d__tourStaticData__" + toString(bM))
297297
298298
299299 func bN (bM) = ("%s%d__tourDynamicData__" + toString(bM))
300300
301301
302302 func bO (bM,z) = makeString(["%s%d%s__bestResultByTourAndDuck", toString(bM), z], "__")
303303
304304
305305 let bP = 0
306306
307307 let bQ = 1
308308
309309 let bR = 6
310310
311311 let bS = 1
312312
313313 func bT (bU,bM) = {
314314 let bV = split(valueOrErrorMessage(getString(bU, bL(bM)), (("Error reading tournament " + toString(bM)) + " data")), "__")
315315 let bW = split_4C(valueOrErrorMessage(getString(bU, bN(bM)), (("Error reading tournament " + toString(bM)) + " data")), "__")
316316 [bV, bW]
317317 }
318318
319319
320320 func bX (bU,bY) = {
321321 let bZ = valueOrElse(getInteger(bU, bK), 0)
322322 let ca = split(bY, "_")
323323 let av = lastBlock.timestamp
324324 let cb = bT(bU, bZ)
325325 let bV = cb[bP]
326326 let bW = cb[bQ]
327327 if (if (if ((ca[bj] == "T"))
328328 then (parseIntValue(ca[bi]) == bZ)
329329 else false)
330330 then (bW[bS] == "INPROGRESS")
331331 else false)
332332 then (parseIntValue(bV[bR]) > av)
333333 else false
334334 }
335335
336336
337337 func cc (cd) = (parseIntValue(cd[aQ]) * aN)
338338
339339
340340 let ce = false
341341
342342 let cf = false
343343
344-let cg = take(drop(this.bytes, 1), 1)
345-
346-let ch = {
347- let ci = cg
348- if ((base58'2W' == ci))
344+let cg = false
345+
346+let ch = take(drop(this.bytes, 1), 1)
347+
348+let ci = {
349+ let cj = ch
350+ if ((base58'2W' == cj))
349351 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
350- else if ((base58'2T' == ci))
352+ else if ((base58'2T' == cj))
351353 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
352354 else throw("Unknown chain")
353355 }
354356
355-let cj = {
356- let ci = cg
357- if ((base58'2W' == ci))
357+let ck = {
358+ let cj = ch
359+ if ((base58'2W' == cj))
358360 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
359- else if ((base58'2T' == ci))
361+ else if ((base58'2T' == cj))
360362 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
361363 else throw("Unknown chain")
362364 }
363365
364-let ck = {
365- let ci = cg
366- if ((base58'2W' == ci))
366+let cl = {
367+ let cj = ch
368+ if ((base58'2W' == cj))
367369 then 10000000000
368- else if ((base58'2T' == ci))
370+ else if ((base58'2T' == cj))
369371 then 100000000
370372 else throw("Unknown chain")
371373 }
372374
373-let cl = {
374- let ci = cg
375- if ((base58'2W' == ci))
375+let cm = {
376+ let cj = ch
377+ if ((base58'2W' == cj))
376378 then 86400000
377- else if ((base58'2T' == ci))
379+ else if ((base58'2T' == cj))
378380 then 60000
379381 else throw("Unknown chain")
380382 }
381383
382-let cm = "__"
383-
384-let cn = 1000000
385-
386-let co = 100000000
387-
388-let cp = 25
389-
390-let cq = 100
391-
392-let cr = 225
393-
394-let cs = 400
395-
396-let ct = 625
397-
398-let cu = [0, 1, 2, 3, 4, 5]
399-
400-func cv (cw,cx) = valueOrErrorMessage(getString(cw, cx), makeString(["mandatory ", toString(cw), ".", cx, " is not defined"], ""))
401-
402-
403-let cy = 1
404-
405-let cz = 2
406-
407-let cA = 3
408-
409-let cB = 4
410-
411-let cC = 7
412-
413-func cD () = "%s__restConfig"
414-
415-
416-func cE () = "%s__restAddr"
417-
418-
419-func cF (cG) = split_4C(cv(cG, cD()), cm)
420-
421-
422-func cH (cI,cJ) = valueOrErrorMessage(addressFromString(cI[cJ]), ("Rest cfg doesn't contain address at index " + toString(cJ)))
423-
424-
425-let cK = addressFromStringValue(valueOrElse(getString(this, cE()), cj))
426-
427-let cI = cF(cK)
428-
429-let al = cH(cI, cy)
430-
431-let cL = cH(cI, cz)
432-
433-let cM = cH(cI, cA)
434-
435-let cN = cH(cI, cB)
436-
437-let cO = cH(cI, cC)
438-
439-let cP = 0
440-
441-let cQ = 1
442-
443-let cR = 2
444-
445-let cS = 3
446-
447-let cT = "wlg_assetId"
448-
449-let cU = valueOrErrorMessage(getBinary(cN, cT), "Not initialized yet")
450-
451-let cV = 2
452-
453-func cW (cw) = ("finishBlockForAddr_" + cw)
454-
455-
456-func cX () = "resTypesProportions"
457-
458-
459-func cY (cZ) = ("resTypesByContinent_" + cZ)
460-
461-
462-func da (bt) = ("stakedLandsByOwner_" + bt)
463-
464-
465-func db (bt) = ("stakedPiecesByOwner_" + bt)
466-
467-
468-func dc (dd) = {
469- let ci = dd
470- if ($isInstanceOf(ci, "String"))
384+let cn = "__"
385+
386+let co = 1000000
387+
388+let cp = 100000000
389+
390+let cq = 25
391+
392+let cr = 100
393+
394+let cs = 225
395+
396+let ct = 400
397+
398+let cu = 625
399+
400+let cv = [0, 1, 2, 3, 4, 5]
401+
402+func cw (cx,cy) = valueOrErrorMessage(getString(cx, cy), makeString(["mandatory ", toString(cx), ".", cy, " is not defined"], ""))
403+
404+
405+let cz = 1
406+
407+let cA = 2
408+
409+let cB = 3
410+
411+let cC = 4
412+
413+let cD = 7
414+
415+func cE () = "%s__restConfig"
416+
417+
418+func cF () = "%s__restAddr"
419+
420+
421+func cG (cH) = split_4C(cw(cH, cE()), cn)
422+
423+
424+func cI (cJ,cK) = valueOrErrorMessage(addressFromString(cJ[cK]), ("Rest cfg doesn't contain address at index " + toString(cK)))
425+
426+
427+let cL = addressFromStringValue(valueOrElse(getString(this, cF()), ck))
428+
429+let cJ = cG(cL)
430+
431+let al = cI(cJ, cz)
432+
433+let cM = cI(cJ, cA)
434+
435+let cN = cI(cJ, cB)
436+
437+let cO = cI(cJ, cC)
438+
439+let cP = cI(cJ, cD)
440+
441+let cQ = 0
442+
443+let cR = 1
444+
445+let cS = 2
446+
447+let cT = 3
448+
449+let cU = "wlg_assetId"
450+
451+let cV = valueOrErrorMessage(getBinary(cO, cU), "Not initialized yet")
452+
453+let cW = 2
454+
455+func cX (cx) = ("finishBlockForAddr_" + cx)
456+
457+
458+func cY () = "resTypesProportions"
459+
460+
461+func cZ (da) = ("resTypesByContinent_" + da)
462+
463+
464+func db (bt) = ("stakedLandsByOwner_" + bt)
465+
466+
467+func dc (bt) = ("stakedPiecesByOwner_" + bt)
468+
469+
470+func dd (de) = {
471+ let cj = de
472+ if ($isInstanceOf(cj, "String"))
471473 then {
472- let de = ci
473- de
474+ let df = cj
475+ df
474476 }
475477 else throw("fail to cast into String")
476478 }
477479
478480
479-func df (dd) = {
480- let ci = dd
481- if ($isInstanceOf(ci, "Int"))
481+func dg (de) = {
482+ let cj = de
483+ if ($isInstanceOf(cj, "Int"))
482484 then {
483- let dg = ci
484- dg
485+ let dh = cj
486+ dh
485487 }
486488 else throw("fail to cast into Int")
487489 }
488490
489491
490-func dh (dd) = {
491- let ci = dd
492- if ($isInstanceOf(ci, "Boolean"))
492+func di (de) = {
493+ let cj = de
494+ if ($isInstanceOf(cj, "Boolean"))
493495 then {
494- let de = ci
495- de
496+ let df = cj
497+ df
496498 }
497499 else throw("fail to cast into Boolean")
498500 }
499501
500502
501-func di (dj) = {
502- let ci = dj
503- if (("S" == ci))
504- then cp
505- else if (("M" == ci))
506- then cq
507- else if (("L" == ci))
508- then cr
509- else if (("XL" == ci))
510- then cs
511- else if (("XXL" == ci))
512- then ct
503+func dj (dk) = {
504+ let cj = dk
505+ if (("S" == cj))
506+ then cq
507+ else if (("M" == cj))
508+ then cr
509+ else if (("L" == cj))
510+ then cs
511+ else if (("XL" == cj))
512+ then ct
513+ else if (("XXL" == cj))
514+ then cu
513515 else throw("Unknown land size")
514516 }
515517
516518
517-func dk (de) = isDefined(parseInt(de))
518-
519-
520-func dl () = "contractsBlocked"
521-
522-
523-func dm (b) = ("lastTxIdByUser_" + b)
524-
525-
526-func dn (do,dp,dq) = {
527- let dr = value(blockInfoByHeight(dp))
528- let ds = sha256((value(dr.vrf) + dq))
529- (toInt(ds) % do)
530- }
531-
532-
533-let dt = {
534- let ci = cg
535- if ((base58'2W' == ci))
519+func dl (df) = isDefined(parseInt(df))
520+
521+
522+func dm () = "contractsBlocked"
523+
524+
525+func dn (b) = ("lastTxIdByUser_" + b)
526+
527+
528+func do (dp,dq,dr) = {
529+ let ds = value(blockInfoByHeight(dq))
530+ let dt = sha256((value(ds.vrf) + dr))
531+ (toInt(dt) % dp)
532+ }
533+
534+
535+let du = {
536+ let cj = ch
537+ if ((base58'2W' == cj))
536538 then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv")
537- else if ((base58'2T' == ci))
539+ else if ((base58'2T' == cj))
538540 then this
539541 else throw("Unknown chain")
540542 }
541543
542-let du = {
543- let ci = cg
544- if ((base58'2W' == ci))
544+let dv = {
545+ let cj = ch
546+ if ((base58'2W' == cj))
545547 then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb")
546- else if ((base58'2T' == ci))
548+ else if ((base58'2T' == cj))
547549 then this
548550 else throw("Unknown chain")
549551 }
550552
551-let dv = {
552- let ci = cg
553- if ((base58'2W' == ci))
553+let dw = {
554+ let cj = ch
555+ if ((base58'2W' == cj))
554556 then if (ce)
555557 then base58'CWsMtTZC5BjjoL4Q1ayW4Wwb1ehGACQB6DrKyPgotKfm'
556558 else base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
557- else if ((base58'2T' == ci))
559+ else if ((base58'2T' == cj))
558560 then base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
559561 else throw("Unknown chain")
560562 }
561563
562-let dw = base64'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=='
563-
564-let dx = 300000
565-
566-let dy = 5000000
567-
568-let dz = 50
569-
570-let dA = 10000000
571-
572-let dB = {
573- let ci = cg
574- if ((base58'2W' == ci))
564+let dx = base64'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=='
565+
566+let dy = 300000
567+
568+let dz = 5000000
569+
570+let dA = 50
571+
572+let dB = 10000000
573+
574+let dC = {
575+ let cj = ch
576+ if ((base58'2W' == cj))
575577 then 252289527462
576- else if ((base58'2T' == ci))
578+ else if ((base58'2T' == cj))
577579 then 2522895274
578580 else throw("Unknown chain")
579581 }
580582
581-let dC = {
582- let ci = cg
583- if ((base58'2W' == ci))
583+let dD = {
584+ let cj = ch
585+ if ((base58'2W' == cj))
584586 then 250000000
585- else if ((base58'2T' == ci))
587+ else if ((base58'2T' == cj))
586588 then 250000000
587589 else throw("Unknown chain")
588590 }
589591
590-let dD = toBigInt(5)
591-
592-let dE = toBigInt(20)
593-
594-let dF = toBigInt((20 * 20))
595-
596-let dG = toBigInt(((20 * 20) * 20))
597-
598-let dH = toBigInt((((20 * 20) * 20) * 20))
599-
600-let dI = toBigInt(((((20 * 20) * 20) * 20) * 20))
601-
602-let dJ = 500
603-
604-func dK () = "nextLandNum"
605-
606-
607-func dL (dM) = ("lcn_" + dM)
608-
609-
610-func dN (dO) = ("la_" + dO)
611-
612-
613-func dP (bm,bt) = ((("ilao_" + bm) + "_") + bt)
614-
615-
616-func dQ (dO) = ("lo_" + dO)
617-
618-
619-func dR (dM) = ("duckByCustomName_" + dM)
620-
621-
622-func dS (dM) = ("accountByCustomName_" + dM)
623-
624-
625-func dT () = "oldiesList"
626-
627-
628-let dU = 0
629-
630-let dV = 1
631-
632-let dW = 2
633-
634-let dX = 0
635-
636-let dY = 5
637-
638-let dZ = 6
639-
640-let ea = 7
641-
642-func eb (dO,dj) = ((aA + dO) + dj)
643-
644-
645-func ec (ed,ee) = {
646- let ef = if ((ed >= 0))
647- then (((ed + ee) - 1) / ee)
648- else -((((-(ed) + ee) - 1) / ee))
649- (ef * co)
650- }
651-
652-
653-func eg (eh,ei) = {
654- let ej = (((((ei[0] + ei[1]) + ei[2]) + ei[3]) + ei[4]) + ei[5])
655- if ((0 >= ej))
592+let dE = toBigInt(5)
593+
594+let dF = toBigInt(20)
595+
596+let dG = toBigInt((20 * 20))
597+
598+let dH = toBigInt(((20 * 20) * 20))
599+
600+let dI = toBigInt((((20 * 20) * 20) * 20))
601+
602+let dJ = toBigInt(((((20 * 20) * 20) * 20) * 20))
603+
604+let dK = 500
605+
606+func dL () = "nextLandNum"
607+
608+
609+func dM (dN) = ("lcn_" + dN)
610+
611+
612+func dO (dP) = ("la_" + dP)
613+
614+
615+func dQ (bm,bt) = ((("ilao_" + bm) + "_") + bt)
616+
617+
618+func dR (dP) = ("lo_" + dP)
619+
620+
621+func dS (dN) = ("duckByCustomName_" + dN)
622+
623+
624+func dT (dN) = ("accountByCustomName_" + dN)
625+
626+
627+func dU () = "oldiesList"
628+
629+
630+let dV = 0
631+
632+let dW = 1
633+
634+let dX = 2
635+
636+let dY = 0
637+
638+let dZ = 5
639+
640+let ea = 6
641+
642+let eb = 7
643+
644+func ec (dP,dk) = ((aA + dP) + dk)
645+
646+
647+func ed (ee,ef) = {
648+ let eg = if ((ee >= 0))
649+ then (((ee + ef) - 1) / ef)
650+ else -((((-(ee) + ef) - 1) / ef))
651+ (eg * cp)
652+ }
653+
654+
655+func eh (ei,ej) = {
656+ let ek = (((((ej[0] + ej[1]) + ej[2]) + ej[3]) + ej[4]) + ej[5])
657+ if ((0 >= ek))
656658 then throw("Zero weights sum")
657659 else {
658- let ek = fraction(eh, cn, ej)
659- func el (em,en) = (em :+ fraction(en, ek, cn))
660-
661- let eo = ei
662- let ep = size(eo)
663- let eq = nil
664- func er (es,et) = if ((et >= ep))
665- then es
666- else el(es, eo[et])
667-
668- func eu (es,et) = if ((et >= ep))
669- then es
660+ let el = fraction(ei, co, ek)
661+ func em (en,eo) = (en :+ fraction(eo, el, co))
662+
663+ let ep = ej
664+ let eq = size(ep)
665+ let er = nil
666+ func es (et,eu) = if ((eu >= eq))
667+ then et
668+ else em(et, ep[eu])
669+
670+ func ev (et,eu) = if ((eu >= eq))
671+ then et
670672 else throw("List size exceeds 6")
671673
672- eu(er(er(er(er(er(er(eq, 0), 1), 2), 3), 4), 5), 6)
673- }
674- }
675-
676-
677-func ev (eh) = {
678- let ew = split(value(getString(cX())), "_")
679- if ((size(ew) != aD))
674+ ev(es(es(es(es(es(es(er, 0), 1), 2), 3), 4), 5), 6)
675+ }
676+ }
677+
678+
679+func ew (ei) = {
680+ let ex = split(value(getString(cY())), "_")
681+ if ((size(ex) != aD))
680682 then throw("Wrong proportions data")
681683 else {
682- let ex = [parseIntValue(ew[0]), parseIntValue(ew[1]), parseIntValue(ew[2]), parseIntValue(ew[3]), parseIntValue(ew[4]), parseIntValue(ew[5])]
683- eg(eh, ex)
684- }
685- }
686-
687-
688-func ey (ez,eA,eB) = {
689- let eC = ev(eB)
690- func eD (em,cJ) = {
691- let eE = (parseIntValue(eA[cJ]) - eC[cJ])
692- if ((0 > eE))
693- then throw(((((("Not enough material idx=" + toString(cJ)) + ", you have ") + eA[cJ]) + ", but need ") + toString(eC[cJ])))
694- else (em :+ toString(eE))
684+ let ey = [parseIntValue(ex[0]), parseIntValue(ex[1]), parseIntValue(ex[2]), parseIntValue(ex[3]), parseIntValue(ex[4]), parseIntValue(ex[5])]
685+ eh(ei, ey)
686+ }
687+ }
688+
689+
690+func ez (eA,eB,eC) = {
691+ let eD = ew(eC)
692+ func eE (en,cK) = {
693+ let eF = (parseIntValue(eB[cK]) - eD[cK])
694+ if ((0 > eF))
695+ then throw(((((("Not enough material idx=" + toString(cK)) + ", you have ") + eB[cK]) + ", but need ") + toString(eD[cK])))
696+ else (en :+ toString(eF))
695697 }
696698
697- if (ez)
699+ if (eA)
698700 then {
699- let eo = cu
700- let ep = size(eo)
701- let eq = nil
702- func er (es,et) = if ((et >= ep))
703- then es
704- else eD(es, eo[et])
705-
706- func eu (es,et) = if ((et >= ep))
707- then es
701+ let ep = cv
702+ let eq = size(ep)
703+ let er = nil
704+ func es (et,eu) = if ((eu >= eq))
705+ then et
706+ else eE(et, ep[eu])
707+
708+ func ev (et,eu) = if ((eu >= eq))
709+ then et
708710 else throw("List size exceeds 6")
709711
710- eu(er(er(er(er(er(er(eq, 0), 1), 2), 3), 4), 5), 6)
711- }
712- else eA
713- }
714-
715-
716-func eF (eG,eH) = if ((eH == ""))
717- then $Tuple2(eG, false)
712+ ev(es(es(es(es(es(es(er, 0), 1), 2), 3), 4), 5), 6)
713+ }
714+ else eB
715+ }
716+
717+
718+func eG (eH,eI) = if ((eI == ""))
719+ then $Tuple2(eH, false)
718720 else {
719- func eI (em,eJ) = {
720- let eK = split(eJ, ",")
721- if ((size(eK) != 2))
721+ func eJ (en,eK) = {
722+ let eL = split(eK, ",")
723+ if ((size(eL) != 2))
722724 then throw("Incorrect format, should be index,amount")
723725 else {
724- let cJ = parseIntValue(eK[0])
725- if (if ((0 > cJ))
726+ let cK = parseIntValue(eL[0])
727+ if (if ((0 > cK))
726728 then true
727- else (cJ >= size(aP)))
729+ else (cK >= size(aP)))
728730 then throw("Unknown product idx")
729731 else {
730- let eL = parseIntValue(eK[1])
731- let eM = split(em._1, (eK[0] + ":"))
732- if ((size(eM) != 2))
733- then throw((("You don't have " + aL[cJ]) + " equipped"))
732+ let eM = parseIntValue(eL[1])
733+ let eN = split(en._1, (eL[0] + ":"))
734+ if ((size(eN) != 2))
735+ then throw((("You don't have " + aL[cK]) + " equipped"))
734736 else {
735- let eN = eM[1]
736- let eO = if (dk(take(drop(eN, 1), 1)))
737+ let eO = eN[1]
738+ let eP = if (dl(take(drop(eO, 1), 1)))
737739 then 2
738740 else 1
739- let eP = parseIntValue(take(eN, eO))
740- let eQ = drop(eN, eO)
741- let eR = if ((eP >= eL))
742- then (eP - eL)
743- else throw(((((("You equipped " + toString(eP)) + " of ") + aL[cJ]) + ", but tried to use ") + toString(eL)))
744- $Tuple2(((((eM[0] + eK[0]) + ":") + toString(eR)) + eQ), if (em._2)
741+ let eQ = parseIntValue(take(eO, eP))
742+ let eR = drop(eO, eP)
743+ let eS = if ((eQ >= eM))
744+ then (eQ - eM)
745+ else throw(((((("You equipped " + toString(eQ)) + " of ") + aL[cK]) + ", but tried to use ") + toString(eM)))
746+ $Tuple2(((((eN[0] + eL[0]) + ":") + toString(eS)) + eR), if (en._2)
745747 then true
746- else if (if ((cJ >= 6))
747- then (8 >= cJ)
748+ else if (if ((cK >= 6))
749+ then (8 >= cK)
748750 else false)
749- then (eR == 0)
751+ then (eS == 0)
750752 else false)
751753 }
752754 }
753755 }
754756 }
755757
756- let eo = split(eH, "_")
757- let ep = size(eo)
758- let eq = $Tuple2(eG, false)
759- func er (es,et) = if ((et >= ep))
760- then es
761- else eI(es, eo[et])
762-
763- func eu (es,et) = if ((et >= ep))
764- then es
758+ let ep = split(eI, "_")
759+ let eq = size(ep)
760+ let er = $Tuple2(eH, false)
761+ func es (et,eu) = if ((eu >= eq))
762+ then et
763+ else eJ(et, ep[eu])
764+
765+ func ev (et,eu) = if ((eu >= eq))
766+ then et
765767 else throw("List size exceeds 10")
766768
767- eu(er(er(er(er(er(er(er(er(er(er(eq, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
769+ ev(es(es(es(es(es(es(es(es(es(es(er, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
768770 }
769771
770772
771-func eS (eT) = {
772- let eU = if ((eT == ""))
773+func eT (eU) = {
774+ let eV = if ((eU == ""))
773775 then nil
774- else split_4C(eT, "_")
775- func eV (em,cd) = {
776- let eW = (size(em) / 8)
777- let eP = if ((size(eU) > eW))
778- then parseIntValue(eU[eW])
776+ else split_4C(eU, "_")
777+ func eW (en,cd) = {
778+ let eX = (size(en) / 8)
779+ let eQ = if ((size(eV) > eX))
780+ then parseIntValue(eV[eX])
779781 else 0
780- (em + toBytes(eP))
782+ (en + toBytes(eQ))
781783 }
782784
783- let eo = aP
784- let ep = size(eo)
785- let eq = base58''
786- func er (es,et) = if ((et >= ep))
787- then es
788- else eV(es, eo[et])
789-
790- func eu (es,et) = if ((et >= ep))
791- then es
785+ let ep = aP
786+ let eq = size(ep)
787+ let er = base58''
788+ func es (et,eu) = if ((eu >= eq))
789+ then et
790+ else eW(et, ep[eu])
791+
792+ func ev (et,eu) = if ((eu >= eq))
793+ then et
792794 else throw("List size exceeds 50")
793795
794- eu(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(eq, 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)
795- }
796-
797-
798-func eX (eY) = {
799- func eZ (em,cd) = {
800- let eW = size(em)
801- let fa = take(drop(eY, (8 * eW)), 8)
802- (em :+ toString(toInt(fa)))
796+ ev(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(er, 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)
797+ }
798+
799+
800+func eY (eZ) = {
801+ func fa (en,cd) = {
802+ let eX = size(en)
803+ let fb = take(drop(eZ, (8 * eX)), 8)
804+ (en :+ toString(toInt(fb)))
803805 }
804806
805807 makeString_2C({
806- let eo = aP
807- let ep = size(eo)
808- let eq = nil
809- func er (es,et) = if ((et >= ep))
810- then es
811- else eZ(es, eo[et])
812-
813- func eu (es,et) = if ((et >= ep))
814- then es
808+ let ep = aP
809+ let eq = size(ep)
810+ let er = nil
811+ func es (et,eu) = if ((eu >= eq))
812+ then et
813+ else fa(et, ep[eu])
814+
815+ func ev (et,eu) = if ((eu >= eq))
816+ then et
815817 else throw("List size exceeds 50")
816818
817- eu(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(eq, 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)
819+ ev(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(er, 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)
818820 }, "_")
819821 }
820822
821823
822-func fb (fc,fd) = {
823- func fe (em,eW) = {
824- let ff = if ((size(fc) > (7 + eW)))
825- then fc[(7 + eW)]
824+func fc (fd,fe) = {
825+ func ff (en,eX) = {
826+ let fg = if ((size(fd) > (7 + eX)))
827+ then fd[(7 + eX)]
826828 else 0
827- if ((parseIntValue(fd[eW]) > (fc[eW] + ff)))
828- then throw(("Requirement not satisfied: " + i[eW]))
829+ if ((parseIntValue(fe[eX]) > (fd[eX] + fg)))
830+ then throw(("Requirement not satisfied: " + i[eX]))
829831 else true
830832 }
831833
832- let eo = [0, 1, 2, 3, 4, 5, 6]
833- let ep = size(eo)
834- let eq = false
835- func er (es,et) = if ((et >= ep))
836- then es
837- else fe(es, eo[et])
838-
839- func eu (es,et) = if ((et >= ep))
840- then es
834+ let ep = [0, 1, 2, 3, 4, 5, 6]
835+ let eq = size(ep)
836+ let er = false
837+ func es (et,eu) = if ((eu >= eq))
838+ then et
839+ else ff(et, ep[eu])
840+
841+ func ev (et,eu) = if ((eu >= eq))
842+ then et
841843 else throw("List size exceeds 7")
842844
843- eu(er(er(er(er(er(er(er(eq, 0), 1), 2), 3), 4), 5), 6), 7)
844- }
845-
846-
847-func fg (fh,eU,fi,fc,fj,fk) = {
848- let eK = split(fh, ":")
849- if ((size(eK) != 2))
845+ ev(es(es(es(es(es(es(es(er, 0), 1), 2), 3), 4), 5), 6), 7)
846+ }
847+
848+
849+func fh (fi,eV,fj,fd,fk,fl) = {
850+ let eL = split(fi, ":")
851+ if ((size(eL) != 2))
850852 then throw("Incorrect format, should be index:amount")
851- else if (if (!(fi))
852- then (size(eK[0]) != 2)
853+ else if (if (!(fj))
854+ then (size(eL[0]) != 2)
853855 else false)
854856 then throw("Product idx should be 2 digits, zero padded")
855857 else {
856- let fl = parseIntValue(eK[0])
857- let fm = parseIntValue(eK[1])
858- if (!(containsElement(aO, fl)))
859- then throw((("Product '" + aL[fl]) + "' cannot be used for land defense"))
860- else if ((0 > fm))
858+ let fm = parseIntValue(eL[0])
859+ let fn = parseIntValue(eL[1])
860+ if (!(containsElement(aO, fm)))
861+ then throw((("Product '" + aL[fm]) + "' cannot be used for land defense"))
862+ else if ((0 > fn))
861863 then throw("Count can't be negative")
862- else if ((fm > s))
863- then throw(((("Can't put more than " + toString(s)) + " of ") + aL[fl]))
864- else if ((fm == 0))
865- then $Tuple3(eU, fj, fk)
864+ else if ((fn > s))
865+ then throw(((("Can't put more than " + toString(s)) + " of ") + aL[fm]))
866+ else if ((fn == 0))
867+ then $Tuple3(eV, fk, fl)
866868 else {
867- let fn = take(eU, (8 * fl))
868- let eP = toInt(take(drop(eU, (8 * fl)), 8))
869- let eQ = drop(eU, (8 * (fl + 1)))
870- let cd = split(aP[fl], "_")
871- if (if (!(fi))
872- then (fm > eP)
869+ let fo = take(eV, (8 * fm))
870+ let eQ = toInt(take(drop(eV, (8 * fm)), 8))
871+ let eR = drop(eV, (8 * (fm + 1)))
872+ let cd = split(aP[fm], "_")
873+ if (if (!(fj))
874+ then (fn > eQ)
873875 else false)
874- then throw(((((("You have " + toString(eP)) + " of ") + aL[fl]) + ", but tried to use ") + toString(fm)))
876+ then throw(((((("You have " + toString(eQ)) + " of ") + aL[fm]) + ", but tried to use ") + toString(fn)))
875877 else {
876- let eR = if (if (!(fi))
877- then fb(fc, split(cd[aS], ","))
878+ let eS = if (if (!(fj))
879+ then fc(fd, split(cd[aS], ","))
878880 else false)
879- then (eP - fm)
880- else (eP + fm)
881- let fo = (ec(eR, aU) - ec(eP, aU))
882- $Tuple3(((fn + toBytes(eR)) + eQ), (fj + fo), (fk - fo))
881+ then (eQ - fn)
882+ else (eQ + fn)
883+ let fp = (ed(eS, aU) - ed(eQ, aU))
884+ $Tuple3(((fo + toBytes(eS)) + eR), (fk + fp), (fl - fp))
883885 }
884886 }
885887 }
886888 }
887889
888890
889-func fp (fh,eU,fi,fq,fr,fs,fc) = {
890- let eK = split(fh, ":")
891- if ((size(eK) != 2))
891+func fq (fi,eV,fj,fr,fs,ft,fd) = {
892+ let eL = split(fi, ":")
893+ if ((size(eL) != 2))
892894 then throw("Incorrect format, should be index:amount")
893- else if (if (!(fi))
894- then (size(eK[0]) != 2)
895+ else if (if (!(fj))
896+ then (size(eL[0]) != 2)
895897 else false)
896898 then throw("Product idx should be 2 digits, zero padded")
897899 else {
898- let fl = parseIntValue(eK[0])
899- let fm = parseIntValue(eK[1])
900- if (if ((0 > fl))
900+ let fm = parseIntValue(eL[0])
901+ let fn = parseIntValue(eL[1])
902+ if (if ((0 > fm))
901903 then true
902- else (fl >= size(aP)))
904+ else (fm >= size(aP)))
903905 then throw("Unknown product idx")
904- else if ((0 > fm))
906+ else if ((0 > fn))
905907 then throw("Count can't be negative")
906- else if ((fm > s))
907- then throw(((("Can't put more than " + toString(s)) + " of ") + aL[fl]))
908- else if ((fm == 0))
909- then $Tuple2(eU, false)
908+ else if ((fn > s))
909+ then throw(((("Can't put more than " + toString(s)) + " of ") + aL[fm]))
910+ else if ((fn == 0))
911+ then $Tuple2(eV, false)
910912 else {
911- let fn = take(eU, (8 * fl))
912- let eP = toInt(take(drop(eU, (8 * fl)), 8))
913- let eQ = drop(eU, (8 * (fl + 1)))
914- let cd = split(aP[fl], "_")
915- if (if (!(fi))
916- then (fm > eP)
913+ let fo = take(eV, (8 * fm))
914+ let eQ = toInt(take(drop(eV, (8 * fm)), 8))
915+ let eR = drop(eV, (8 * (fm + 1)))
916+ let cd = split(aP[fm], "_")
917+ if (if (!(fj))
918+ then (fn > eQ)
917919 else false)
918- then throw(((((("You have " + toString(eP)) + " of ") + aL[fl]) + ", but tried to use ") + toString(fm)))
920+ then throw(((((("You have " + toString(eQ)) + " of ") + aL[fm]) + ", but tried to use ") + toString(fn)))
919921 else {
920- let ft = if (if (!(fi))
921- then fb(fc, split(cd[aS], ","))
922+ let fu = if (if (!(fj))
923+ then fc(fd, split(cd[aS], ","))
922924 else false)
923925 then {
924- let fu = cd[aT]
925- if ((fu == ""))
926+ let fv = cd[aT]
927+ if ((fv == ""))
926928 then throw("Item cannot be equipped")
927929 else {
928- let fv = parseIntValue(fu)
929- let fw = (fv / 100)
930- if ((fq != fw))
930+ let fw = parseIntValue(fv)
931+ let fx = (fw / 100)
932+ if ((fr != fx))
931933 then throw("Segment incompatible")
932934 else {
933- let fx = ((fv % 100) / 10)
934- if ((fr != fx))
935+ let fy = ((fw % 100) / 10)
936+ if ((fs != fy))
935937 then throw("Slot incompatible")
936938 else {
937- let fy = (fv % 10)
938- if (if ((fs != 0))
939- then (fy > 1)
939+ let fz = (fw % 10)
940+ if (if ((ft != 0))
941+ then (fz > 1)
940942 else false)
941943 then throw("Big items should occupy slot 0")
942- else (fy > 1)
944+ else (fz > 1)
943945 }
944946 }
945947 }
946948 }
947949 else false
948- $Tuple2(((fn + toBytes((eP + (if (fi)
949- then fm
950- else -(fm))))) + eQ), ft)
950+ $Tuple2(((fo + toBytes((eQ + (if (fj)
951+ then fn
952+ else -(fn))))) + eR), fu)
951953 }
952954 }
953955 }
954956 }
955957
956958
957-func fz (fA,fB,fi,fq,fr,fC) = if ((fA != ""))
959+func fA (fB,fC,fj,fr,fs,fD) = if ((fB != ""))
958960 then {
959- let fD = split(fA, ",")
960- if ((size(fD) > r))
961+ let fE = split(fB, ",")
962+ if ((size(fE) > r))
961963 then throw("Wrong slots format")
962964 else {
963- let fE = fD[0]
964- let fF = if ((size(fD) > 1))
965- then fD[1]
965+ let fF = fE[0]
966+ let fG = if ((size(fE) > 1))
967+ then fE[1]
966968 else ""
967- if (if ((fE == ""))
968- then (fF == "")
969+ if (if ((fF == ""))
970+ then (fG == "")
969971 else false)
970- then fB
972+ then fC
971973 else {
972- let fG = if ((fE != ""))
973- then fp(fE, fB, fi, fq, fr, 0, fC)
974- else $Tuple2(fB, false)
975- if ((fF != ""))
976- then if (fG._2)
974+ let fH = if ((fF != ""))
975+ then fq(fF, fC, fj, fr, fs, 0, fD)
976+ else $Tuple2(fC, false)
977+ if ((fG != ""))
978+ then if (fH._2)
977979 then throw("Big item already occupies slot")
978- else fp(fF, fG._1, fi, fq, fr, 1, fC)._1
979- else fG._1
980+ else fq(fG, fH._1, fj, fr, fs, 1, fD)._1
981+ else fH._1
980982 }
981983 }
982984 }
983- else fB
984-
985-
986-func fH (fI,fJ,fi,fC) = {
987- func fq (em,fK) = {
988- let eW = em._1
989- let fr = split(fK, ";")
990- if ((size(fr) != q))
985+ else fC
986+
987+
988+func fI (fJ,fK,fj,fD) = {
989+ func fr (en,fL) = {
990+ let eX = en._1
991+ let fs = split(fL, ";")
992+ if ((size(fs) != q))
991993 then throw("Wrong segment format")
992994 else {
993- let fL = fr[0]
994- let fM = fr[1]
995- if (if ((fL == ""))
996- then (fM == "")
995+ let fM = fs[0]
996+ let fN = fs[1]
997+ if (if ((fM == ""))
998+ then (fN == "")
997999 else false)
998- then $Tuple2((eW + 1), em._2)
1000+ then $Tuple2((eX + 1), en._2)
9991001 else {
1000- let fN = fz(fL, em._2, fi, eW, 0, fC)
1001- $Tuple2((eW + 1), fz(fM, fN, fi, eW, 1, fC))
1002+ let fO = fA(fM, en._2, fj, eX, 0, fD)
1003+ $Tuple2((eX + 1), fA(fN, fO, fj, eX, 1, fD))
10021004 }
10031005 }
10041006 }
10051007
1006-( let eo = fI
1007- let ep = size(eo)
1008- let eq = $Tuple2(0, fJ)
1009- func er (es,et) = if ((et >= ep))
1010- then es
1011- else fq(es, eo[et])
1012-
1013- func eu (es,et) = if ((et >= ep))
1014- then es
1008+( let ep = fJ
1009+ let eq = size(ep)
1010+ let er = $Tuple2(0, fK)
1011+ func es (et,eu) = if ((eu >= eq))
1012+ then et
1013+ else fr(et, ep[eu])
1014+
1015+ func ev (et,eu) = if ((eu >= eq))
1016+ then et
10151017 else throw("List size exceeds 6")
10161018
1017- eu(er(er(er(er(er(er(eq, 0), 1), 2), 3), 4), 5), 6))._2
1018- }
1019-
1020-
1021-func fO (fI,fJ,fj,fk,fi,fc) = if ((3 > size(fI)))
1019+ ev(es(es(es(es(es(es(er, 0), 1), 2), 3), 4), 5), 6))._2
1020+ }
1021+
1022+
1023+func fP (fJ,fK,fk,fl,fj,fd) = if ((3 > size(fJ)))
10221024 then throw("At least duck, mines and traps parts are required")
10231025 else {
1024- func fq (em,fK) = {
1025- let eW = em._1
1026- if ((eW == 0))
1027- then $Tuple4((eW + 1), em._2, em._3, em._4)
1026+ func fr (en,fL) = {
1027+ let eX = en._1
1028+ if ((eX == 0))
1029+ then $Tuple4((eX + 1), en._2, en._3, en._4)
10281030 else {
1029- let fP = fg(fK, em._2, fi, fc, em._3, em._4)
1030- $Tuple4((eW + 1), fP._1, fP._2, fP._3)
1031+ let fQ = fh(fL, en._2, fj, fd, en._3, en._4)
1032+ $Tuple4((eX + 1), fQ._1, fQ._2, fQ._3)
10311033 }
10321034 }
10331035
1034- let fQ = {
1035- let eo = fI
1036- let ep = size(eo)
1037- let eq = $Tuple4(0, fJ, fj, fk)
1038- func er (es,et) = if ((et >= ep))
1039- then es
1040- else fq(es, eo[et])
1041-
1042- func eu (es,et) = if ((et >= ep))
1043- then es
1036+ let fR = {
1037+ let ep = fJ
1038+ let eq = size(ep)
1039+ let er = $Tuple4(0, fK, fk, fl)
1040+ func es (et,eu) = if ((eu >= eq))
1041+ then et
1042+ else fr(et, ep[eu])
1043+
1044+ func ev (et,eu) = if ((eu >= eq))
1045+ then et
10441046 else throw("List size exceeds 10")
10451047
1046- eu(er(er(er(er(er(er(er(er(er(er(eq, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
1047- }
1048- $Tuple3(fQ._2, fQ._3, fQ._4)
1048+ ev(es(es(es(es(es(es(es(es(es(es(er, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
1049+ }
1050+ $Tuple3(fR._2, fR._3, fR._4)
10491051 }
10501052
10511053
1052-func fR (z) = {
1053- let fS = E(z)
1054- let fT = split(valueOrElse(getString(fS), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
1055- let fU = fH(fT, dw, true, nil)
1056- let fV = split(fT[o], ";")[1]
1057- let am = if ((fV == ""))
1054+func fS (z) = {
1055+ let fT = E(z)
1056+ let fU = split(valueOrElse(getString(fT), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
1057+ let fV = fI(fU, dx, true, nil)
1058+ let fW = split(fU[o], ";")[1]
1059+ let am = if ((fW == ""))
10581060 then 0
10591061 else {
1060- let fW = split(fV, ",")[0]
1061- if ((fW == ""))
1062+ let fX = split(fW, ",")[0]
1063+ if ((fX == ""))
10621064 then 0
10631065 else {
1064- let fh = split(fW, ":")
1065- let cJ = fh[0]
1066- let fX = fh[1]
1067- if (if (if (if (if ((cJ == "06"))
1066+ let fi = split(fX, ":")
1067+ let cK = fi[0]
1068+ let fY = fi[1]
1069+ if (if (if (if (if ((cK == "06"))
10681070 then true
1069- else (cJ == "07"))
1071+ else (cK == "07"))
10701072 then true
1071- else (cJ == "08"))
1072- then (fX != "")
1073+ else (cK == "08"))
1074+ then (fY != "")
10731075 else false)
1074- then (parseIntValue(fX) > 0)
1076+ then (parseIntValue(fY) > 0)
10751077 else false)
1076- then parseIntValue(split(aP[parseIntValue(cJ)], "_")[aR])
1078+ then parseIntValue(split(aP[parseIntValue(cK)], "_")[aR])
10771079 else 0
10781080 }
10791081 }
1080- let fC = ak(this, z, am, true)
1081- let fY = fH(fT, fU, false, fC)
1082- (fY == fY)
1083- }
1084-
1085-
1086-func fZ (ga,gb,gc,gd) = if ((size(ga) != aD))
1082+ let fD = ak(this, z, am, true)
1083+ let fZ = fI(fU, fV, false, fD)
1084+ (fZ == fZ)
1085+ }
1086+
1087+
1088+func ga (gb,gc,gd,ge) = if ((size(gb) != aD))
10871089 then throw("Wrong proportions data")
10881090 else {
1089- func ge (em,gf) = {
1090- let eE = (parseIntValue(ga[gf]) + ((gd * gb[gf]) * gc))
1091- if ((0 > eE))
1092- then throw(((((((("Panic! Pieces of type=" + toString(gf)) + ", sign=") + toString(gd)) + ", terrainCounts[i]=") + toString(gb[gf])) + ", landSizeIndex=") + toString(gc)))
1093- else (em :+ toString(eE))
1094- }
1095-
1096- let eo = cu
1097- let ep = size(eo)
1098- let eq = nil
1099- func er (es,et) = if ((et >= ep))
1100- then es
1101- else ge(es, eo[et])
1102-
1103- func eu (es,et) = if ((et >= ep))
1104- then es
1091+ func gf (en,gg) = {
1092+ let eF = (parseIntValue(gb[gg]) + ((ge * gc[gg]) * gd))
1093+ if ((0 > eF))
1094+ then throw(((((((("Panic! Pieces of type=" + toString(gg)) + ", sign=") + toString(ge)) + ", terrainCounts[i]=") + toString(gc[gg])) + ", landSizeIndex=") + toString(gd)))
1095+ else (en :+ toString(eF))
1096+ }
1097+
1098+ let ep = cv
1099+ let eq = size(ep)
1100+ let er = nil
1101+ func es (et,eu) = if ((eu >= eq))
1102+ then et
1103+ else gf(et, ep[eu])
1104+
1105+ func ev (et,eu) = if ((eu >= eq))
1106+ then et
11051107 else throw("List size exceeds 6")
11061108
1107- eu(er(er(er(er(er(er(eq, 0), 1), 2), 3), 4), 5), 6)
1109+ ev(es(es(es(es(es(es(er, 0), 1), 2), 3), 4), 5), 6)
11081110 }
11091111
11101112
1111-func gg (gb,gc,gd) = {
1112- let ga = split(valueOrElse(getString(cX()), "0_0_0_0_0_0"), "_")
1113- makeString(fZ(ga, gb, gc, gd), "_")
1114- }
1115-
1116-
1117-func gh (gi) = [(size(split(gi, "A")) - 1), (size(split(gi, "B")) - 1), (size(split(gi, "C")) - 1), (size(split(gi, "D")) - 1), (size(split(gi, "E")) - 1), (size(split(gi, "F")) - 1)]
1118-
1119-
1120-func gj (gk,gb,gl,gc,gm) = {
1121- func gn (em,gf) = {
1122- let go = ((fraction(gl, gm, aG) * gb[gf]) * gc)
1123- (em :+ toString((parseIntValue(gk[gf]) + go)))
1113+func gh (gc,gd,ge) = {
1114+ let gb = split(valueOrElse(getString(cY()), "0_0_0_0_0_0"), "_")
1115+ makeString(ga(gb, gc, gd, ge), "_")
1116+ }
1117+
1118+
1119+func gi (gj) = [(size(split(gj, "A")) - 1), (size(split(gj, "B")) - 1), (size(split(gj, "C")) - 1), (size(split(gj, "D")) - 1), (size(split(gj, "E")) - 1), (size(split(gj, "F")) - 1)]
1120+
1121+
1122+func gk (gl,gc,gm,gd,gn) = {
1123+ func go (en,gg) = {
1124+ let gp = ((fraction(gm, gn, aG) * gc[gg]) * gd)
1125+ (en :+ toString((parseIntValue(gl[gg]) + gp)))
11241126 }
11251127
1126- let ex = {
1127- let eo = cu
1128- let ep = size(eo)
1129- let eq = nil
1130- func er (es,et) = if ((et >= ep))
1131- then es
1132- else gn(es, eo[et])
1133-
1134- func eu (es,et) = if ((et >= ep))
1135- then es
1128+ let ey = {
1129+ let ep = cv
1130+ let eq = size(ep)
1131+ let er = nil
1132+ func es (et,eu) = if ((eu >= eq))
1133+ then et
1134+ else go(et, ep[eu])
1135+
1136+ func ev (et,eu) = if ((eu >= eq))
1137+ then et
11361138 else throw("List size exceeds 6")
11371139
1138- eu(er(er(er(er(er(er(eq, 0), 1), 2), 3), 4), 5), 6)
1140+ ev(es(es(es(es(es(es(er, 0), 1), 2), 3), 4), 5), 6)
11391141 }
1140- makeString(ex, "_")
1141- }
1142-
1143-
1144-func gp (gb,gl,gc,gm) = {
1145- func gn (em,gf) = {
1146- let go = ((fraction(gl, gm, aG) * gb[gf]) * gc)
1147- $Tuple2((em._1 :+ go), (em._2 + go))
1142+ makeString(ey, "_")
1143+ }
1144+
1145+
1146+func gq (gc,gm,gd,gn) = {
1147+ func go (en,gg) = {
1148+ let gp = ((fraction(gm, gn, aG) * gc[gg]) * gd)
1149+ $Tuple2((en._1 :+ gp), (en._2 + gp))
11481150 }
11491151
1150- let eo = cu
1151- let ep = size(eo)
1152- let eq = $Tuple2(nil, 0)
1153- func er (es,et) = if ((et >= ep))
1154- then es
1155- else gn(es, eo[et])
1156-
1157- func eu (es,et) = if ((et >= ep))
1158- then es
1152+ let ep = cv
1153+ let eq = size(ep)
1154+ let er = $Tuple2(nil, 0)
1155+ func es (et,eu) = if ((eu >= eq))
1156+ then et
1157+ else go(et, ep[eu])
1158+
1159+ func ev (et,eu) = if ((eu >= eq))
1160+ then et
11591161 else throw("List size exceeds 6")
11601162
1161- eu(er(er(er(er(er(er(eq, 0), 1), 2), 3), 4), 5), 6)
1162- }
1163-
1164-
1165-func gq (gr,gs,gt,gu) = {
1166- let gv = gt._1
1167- let gw = gt._2
1168- if ((gw == 0))
1169- then $Tuple2(makeString(gr, "_"), makeString(gs, "_"))
1170- else if ((gu >= gw))
1163+ ev(es(es(es(es(es(es(er, 0), 1), 2), 3), 4), 5), 6)
1164+ }
1165+
1166+
1167+func gr (gs,gt,gu,gv) = {
1168+ let gw = gu._1
1169+ let gx = gu._2
1170+ if ((gx == 0))
1171+ then $Tuple2(makeString(gs, "_"), makeString(gt, "_"))
1172+ else if ((gv >= gx))
11711173 then {
1172- func gx (em,gf) = (em :+ toString((parseIntValue(gr[gf]) + gv[gf])))
1173-
1174- let ex = {
1175- let eo = cu
1176- let ep = size(eo)
1177- let eq = nil
1178- func er (es,et) = if ((et >= ep))
1179- then es
1180- else gx(es, eo[et])
1181-
1182- func eu (es,et) = if ((et >= ep))
1183- then es
1174+ func gy (en,gg) = (en :+ toString((parseIntValue(gs[gg]) + gw[gg])))
1175+
1176+ let ey = {
1177+ let ep = cv
1178+ let eq = size(ep)
1179+ let er = nil
1180+ func es (et,eu) = if ((eu >= eq))
1181+ then et
1182+ else gy(et, ep[eu])
1183+
1184+ func ev (et,eu) = if ((eu >= eq))
1185+ then et
11841186 else throw("List size exceeds 6")
11851187
1186- eu(er(er(er(er(er(er(eq, 0), 1), 2), 3), 4), 5), 6)
1188+ ev(es(es(es(es(es(es(er, 0), 1), 2), 3), 4), 5), 6)
11871189 }
1188- $Tuple2(makeString(ex, "_"), makeString(gs, "_"))
1190+ $Tuple2(makeString(ey, "_"), makeString(gt, "_"))
11891191 }
11901192 else {
1191- func gy (em,gf) = {
1192- let gz = fraction(gv[gf], gu, gw)
1193- $Tuple2((em._1 :+ toString((parseIntValue(gr[gf]) + gz))), (em._2 :+ toString(((parseIntValue(gs[gf]) + gv[gf]) - gz))))
1193+ func gz (en,gg) = {
1194+ let gA = fraction(gw[gg], gv, gx)
1195+ $Tuple2((en._1 :+ toString((parseIntValue(gs[gg]) + gA))), (en._2 :+ toString(((parseIntValue(gt[gg]) + gw[gg]) - gA))))
11941196 }
11951197
1196- let ex = {
1197- let eo = cu
1198- let ep = size(eo)
1199- let eq = $Tuple2(nil, nil)
1200- func er (es,et) = if ((et >= ep))
1201- then es
1202- else gy(es, eo[et])
1203-
1204- func eu (es,et) = if ((et >= ep))
1205- then es
1198+ let ey = {
1199+ let ep = cv
1200+ let eq = size(ep)
1201+ let er = $Tuple2(nil, nil)
1202+ func es (et,eu) = if ((eu >= eq))
1203+ then et
1204+ else gz(et, ep[eu])
1205+
1206+ func ev (et,eu) = if ((eu >= eq))
1207+ then et
12061208 else throw("List size exceeds 6")
12071209
1208- eu(er(er(er(er(er(er(eq, 0), 1), 2), 3), 4), 5), 6)
1210+ ev(es(es(es(es(es(es(er, 0), 1), 2), 3), 4), 5), 6)
12091211 }
1210- $Tuple2(makeString(ex._1, "_"), makeString(ex._2, "_"))
1212+ $Tuple2(makeString(ey._1, "_"), makeString(ey._2, "_"))
12111213 }
12121214 }
12131215
12141216
1215-func gA (gB) = if ((gB >= toBigInt(0)))
1216- then gB
1217- else -(gB)
1218-
1219-
1220-let gC = [[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]]
1221-
1222-func gD (dg,gE) = {
1223- let gF = toInt((dg % dE))
1224- let gG = if ((gE[0] > gF))
1217+func gB (gC) = if ((gC >= toBigInt(0)))
1218+ then gC
1219+ else -(gC)
1220+
1221+
1222+let gD = [[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]]
1223+
1224+func gE (dh,gF) = {
1225+ let gG = toInt((dh % dF))
1226+ let gH = if ((gF[0] > gG))
12251227 then "A"
1226- else if ((gE[1] > gF))
1228+ else if ((gF[1] > gG))
12271229 then "B"
1228- else if ((gE[2] > gF))
1230+ else if ((gF[2] > gG))
12291231 then "C"
1230- else if ((gE[3] > gF))
1232+ else if ((gF[3] > gG))
12311233 then "D"
1232- else if ((gE[4] > gF))
1234+ else if ((gF[4] > gG))
12331235 then "E"
12341236 else "F"
1235- gG
1236- }
1237-
1238-
1239-func gH (gI,gJ) = {
1240- let gK = gC[gJ]
1241- func gL (em,en) = $Tuple2((((((em._1 + gD(em._2, gK)) + gD((em._2 / dE), gK)) + gD((em._2 / dF), gK)) + gD((em._2 / dG), gK)) + gD((em._2 / dH), gK)), (em._2 / dI))
1242-
1243- let fQ = {
1244- let eo = [1, 2, 3, 4, 5]
1245- let ep = size(eo)
1246- let eq = $Tuple2("", (gI / dD))
1247- func er (es,et) = if ((et >= ep))
1248- then es
1249- else gL(es, eo[et])
1250-
1251- func eu (es,et) = if ((et >= ep))
1252- then es
1237+ gH
1238+ }
1239+
1240+
1241+func gI (gJ,gK) = {
1242+ let gL = gD[gK]
1243+ func gM (en,eo) = $Tuple2((((((en._1 + gE(en._2, gL)) + gE((en._2 / dF), gL)) + gE((en._2 / dG), gL)) + gE((en._2 / dH), gL)) + gE((en._2 / dI), gL)), (en._2 / dJ))
1244+
1245+ let fR = {
1246+ let ep = [1, 2, 3, 4, 5]
1247+ let eq = size(ep)
1248+ let er = $Tuple2("", (gJ / dE))
1249+ func es (et,eu) = if ((eu >= eq))
1250+ then et
1251+ else gM(et, ep[eu])
1252+
1253+ func ev (et,eu) = if ((eu >= eq))
1254+ then et
12531255 else throw("List size exceeds 5")
12541256
1255- eu(er(er(er(er(er(eq, 0), 1), 2), 3), 4), 5)
1257+ ev(es(es(es(es(es(er, 0), 1), 2), 3), 4), 5)
12561258 }
1257- fQ._1
1258- }
1259-
1260-
1261-let gM = [7, 2, 15, 19, 8, 24, 1, 21, 16, 5, 0, 22, 20, 23, 11, 4, 18, 12, 6, 10, 3, 17, 13, 9, 14]
1262-
1263-let gN = ["A", "B", "C", "D", "E", "F"]
1264-
1265-func gO (gP,gc) = {
1266- func gQ (em,de) = {
1267- let eW = em._2
1268- let gR = parseIntValue(de)
1269- let gB = if ((gR == 0))
1259+ fR._1
1260+ }
1261+
1262+
1263+let gN = [7, 2, 15, 19, 8, 24, 1, 21, 16, 5, 0, 22, 20, 23, 11, 4, 18, 12, 6, 10, 3, 17, 13, 9, 14]
1264+
1265+let gO = ["A", "B", "C", "D", "E", "F"]
1266+
1267+func gP (gQ,gd) = {
1268+ func gR (en,df) = {
1269+ let eX = en._2
1270+ let gS = parseIntValue(df)
1271+ let gC = if ((gS == 0))
12701272 then 0
1271- else if ((gR >= (4 * gc)))
1272- then (gR / gc)
1273- else if ((gR > (3 * gc)))
1273+ else if ((gS >= (4 * gd)))
1274+ then (gS / gd)
1275+ else if ((gS > (3 * gd)))
12741276 then 3
1275- else (((gR - 1) / gc) + 1)
1276- $Tuple3((em._1 :+ gB), (em._2 + 1), (em._3 + gB))
1277+ else (((gS - 1) / gd) + 1)
1278+ $Tuple3((en._1 :+ gC), (en._2 + 1), (en._3 + gC))
12771279 }
12781280
1279- let fQ = {
1280- let eo = gP
1281- let ep = size(eo)
1282- let eq = $Tuple3(nil, 0, 0)
1283- func er (es,et) = if ((et >= ep))
1284- then es
1285- else gQ(es, eo[et])
1286-
1287- func eu (es,et) = if ((et >= ep))
1288- then es
1281+ let fR = {
1282+ let ep = gQ
1283+ let eq = size(ep)
1284+ let er = $Tuple3(nil, 0, 0)
1285+ func es (et,eu) = if ((eu >= eq))
1286+ then et
1287+ else gR(et, ep[eu])
1288+
1289+ func ev (et,eu) = if ((eu >= eq))
1290+ then et
12891291 else throw("List size exceeds 6")
12901292
1291- eu(er(er(er(er(er(er(eq, 0), 1), 2), 3), 4), 5), 6)
1293+ ev(es(es(es(es(es(es(er, 0), 1), 2), 3), 4), 5), 6)
12921294 }
1293- let gS = fQ._1
1294- let gT = value(indexOf(gS, max(gS)))
1295- let gU = (fQ._3 - 25)
1296- func gV (em,cJ) = {
1297- let gW = if ((cJ == gT))
1298- then (gS[cJ] - gU)
1299- else gS[cJ]
1300- let gX = if ((gW == 0))
1295+ let gT = fR._1
1296+ let gU = value(indexOf(gT, max(gT)))
1297+ let gV = (fR._3 - 25)
1298+ func gW (en,cK) = {
1299+ let gX = if ((cK == gU))
1300+ then (gT[cK] - gV)
1301+ else gT[cK]
1302+ let gY = if ((gX == 0))
13011303 then nil
1302- else split(drop(toString(pow(10, 0, gW, 0, 0, DOWN)), 1), "")
1303- let fv = gN[cJ]
1304- func gY (gZ,ha) = (gZ :+ fv)
1305-
1306- let hb = {
1307- let eo = gX
1308- let ep = size(eo)
1309- let eq = nil
1310- func hc (es,et) = if ((et >= ep))
1311- then es
1312- else gY(es, eo[et])
1313-
1314- func hd (es,et) = if ((et >= ep))
1315- then es
1304+ else split(drop(toString(pow(10, 0, gX, 0, 0, DOWN)), 1), "")
1305+ let fw = gO[cK]
1306+ func gZ (ha,hb) = (ha :+ fw)
1307+
1308+ let hc = {
1309+ let ep = gY
1310+ let eq = size(ep)
1311+ let er = nil
1312+ func hd (et,eu) = if ((eu >= eq))
1313+ then et
1314+ else gZ(et, ep[eu])
1315+
1316+ func he (et,eu) = if ((eu >= eq))
1317+ then et
13161318 else throw("List size exceeds 25")
13171319
1318- hd(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(eq, 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)
1319- }
1320- (em ++ hb)
1320+ he(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(er, 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)
1321+ }
1322+ (en ++ hc)
13211323 }
13221324
1323- let ex = {
1324- let eo = cu
1325- let ep = size(eo)
1326- let eq = nil
1327- func hc (es,et) = if ((et >= ep))
1328- then es
1329- else gV(es, eo[et])
1330-
1331- func hd (es,et) = if ((et >= ep))
1332- then es
1325+ let ey = {
1326+ let ep = cv
1327+ let eq = size(ep)
1328+ let er = nil
1329+ func hd (et,eu) = if ((eu >= eq))
1330+ then et
1331+ else gW(et, ep[eu])
1332+
1333+ func he (et,eu) = if ((eu >= eq))
1334+ then et
13331335 else throw("List size exceeds 6")
13341336
1335- hd(hc(hc(hc(hc(hc(hc(eq, 0), 1), 2), 3), 4), 5), 6)
1337+ he(hd(hd(hd(hd(hd(hd(er, 0), 1), 2), 3), 4), 5), 6)
13361338 }
1337- func he (em,eW) = (em + ex[eW])
1338-
1339- let eo = gM
1340- let ep = size(eo)
1341- let eq = ""
1342- func hf (es,et) = if ((et >= ep))
1343- then es
1344- else he(es, eo[et])
1345-
1346- func hg (es,et) = if ((et >= ep))
1347- then es
1339+ func hf (en,eX) = (en + ey[eX])
1340+
1341+ let ep = gN
1342+ let eq = size(ep)
1343+ let er = ""
1344+ func hg (et,eu) = if ((eu >= eq))
1345+ then et
1346+ else hf(et, ep[eu])
1347+
1348+ func hh (et,eu) = if ((eu >= eq))
1349+ then et
13481350 else throw("List size exceeds 25")
13491351
1350- hg(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(eq, 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)
1351- }
1352-
1353-
1354-func hh (hi) = {
1355- let fP = split(valueOrElse(getString(hi), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
1356-[toString(valueOrElse(parseInt(fP[be]), 0)), if ((size(split(fP[bf], "_")) == aD))
1357- then fP[bf]
1358- else "0_0_0_0_0_0", if ((size(split(fP[bg], "_")) == aD))
1359- then fP[bg]
1360- else "0_0_0_0_0_0", fP[bh]]
1361- }
1362-
1363-
1364-func hj (hk) = {
1365- let eK = split(hk, "_")
1366- ((aH * (parseIntValue(eK[1]) + 1)) * parseIntValue(eK[0]))
1367- }
1368-
1369-
1370-func hl (hm) = {
1371- let hn = hm[aY]
1372- func ho (em,hp) = (em + parseIntValue(hp))
1373-
1374- func hq (em,hp) = {
1375- let cJ = em._1
1376- let ef = (((parseIntValue(hp) + aU) - 1) / aU)
1377- $Tuple2((cJ + 1), (em._2 + (ef * co)))
1352+ hh(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(er, 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)
1353+ }
1354+
1355+
1356+func hi (hj) = {
1357+ let fQ = split(valueOrElse(getString(hj), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
1358+[toString(valueOrElse(parseInt(fQ[be]), 0)), if ((size(split(fQ[bf], "_")) == aD))
1359+ then fQ[bf]
1360+ else "0_0_0_0_0_0", if ((size(split(fQ[bg], "_")) == aD))
1361+ then fQ[bg]
1362+ else "0_0_0_0_0_0", fQ[bh]]
1363+ }
1364+
1365+
1366+func hk (hl) = {
1367+ let eL = split(hl, "_")
1368+ ((aH * (parseIntValue(eL[1]) + 1)) * parseIntValue(eL[0]))
1369+ }
1370+
1371+
1372+func hm (hn) = {
1373+ let ho = hn[aY]
1374+ func hp (en,hq) = (en + parseIntValue(hq))
1375+
1376+ func hr (en,hq) = {
1377+ let cK = en._1
1378+ let eg = (((parseIntValue(hq) + aU) - 1) / aU)
1379+ $Tuple2((cK + 1), (en._2 + (eg * cp)))
13781380 }
13791381
1380- let hr = {
1381- let eo = split(hm[aW], "_")
1382- let ep = size(eo)
1383- let eq = 0
1384- func er (es,et) = if ((et >= ep))
1385- then es
1386- else ho(es, eo[et])
1387-
1388- func eu (es,et) = if ((et >= ep))
1389- then es
1382+ let hs = {
1383+ let ep = split(hn[aW], "_")
1384+ let eq = size(ep)
1385+ let er = 0
1386+ func es (et,eu) = if ((eu >= eq))
1387+ then et
1388+ else hp(et, ep[eu])
1389+
1390+ func ev (et,eu) = if ((eu >= eq))
1391+ then et
13901392 else throw("List size exceeds 6")
13911393
1392- eu(er(er(er(er(er(er(eq, 0), 1), 2), 3), 4), 5), 6)
1394+ ev(es(es(es(es(es(es(er, 0), 1), 2), 3), 4), 5), 6)
13931395 }
1394- let hs = {
1395- let eo = split(hm[aX], "_")
1396- let ep = size(eo)
1397- let eq = 0
1398- func hc (es,et) = if ((et >= ep))
1399- then es
1400- else ho(es, eo[et])
1401-
1402- func hd (es,et) = if ((et >= ep))
1403- then es
1396+ let ht = {
1397+ let ep = split(hn[aX], "_")
1398+ let eq = size(ep)
1399+ let er = 0
1400+ func hd (et,eu) = if ((eu >= eq))
1401+ then et
1402+ else hp(et, ep[eu])
1403+
1404+ func he (et,eu) = if ((eu >= eq))
1405+ then et
14041406 else throw("List size exceeds 6")
14051407
1406- hd(hc(hc(hc(hc(hc(hc(eq, 0), 1), 2), 3), 4), 5), 6)
1408+ he(hd(hd(hd(hd(hd(hd(er, 0), 1), 2), 3), 4), 5), 6)
14071409 }
1408- let ht = if ((hn == ""))
1410+ let hu = if ((ho == ""))
14091411 then 0
1410- else ( let eo = split_4C(hn, "_")
1411- let ep = size(eo)
1412- let eq = $Tuple2(0, 0)
1413- func hf (es,et) = if ((et >= ep))
1414- then es
1415- else hq(es, eo[et])
1416-
1417- func hg (es,et) = if ((et >= ep))
1418- then es
1412+ else ( let ep = split_4C(ho, "_")
1413+ let eq = size(ep)
1414+ let er = $Tuple2(0, 0)
1415+ func hg (et,eu) = if ((eu >= eq))
1416+ then et
1417+ else hr(et, ep[eu])
1418+
1419+ func hh (et,eu) = if ((eu >= eq))
1420+ then et
14191421 else throw("List size exceeds 50")
14201422
1421- hg(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(eq, 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
1422- ((hr + hs) + ht)
1423- }
1424-
1425-
1426-func hu (hv,hw,hx) = {
1427- let hk = ((toString(hw) + "_") + toString(hx))
1428- let hy = hj(hk)
1429- let hz = valueOrElse(getString(hv), (hk + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
1430- let hA = split_4C(hz, ":")
1431- let hB = hl(hA)
1432- let hC = if ((5 > size(hA)))
1433- then makeString(["0", toString(hB), toString((hy - hB)), toString(hy)], "_")
1423+ hh(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(er, 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
1424+ ((hs + ht) + hu)
1425+ }
1426+
1427+
1428+func hv (hw,hx,hy) = {
1429+ let hl = ((toString(hx) + "_") + toString(hy))
1430+ let hz = hk(hl)
1431+ let hA = valueOrElse(getString(hw), (hl + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
1432+ let hB = split_4C(hA, ":")
1433+ let hC = hm(hB)
1434+ let hD = if ((5 > size(hB)))
1435+ then makeString(["0", toString(hC), toString((hz - hC)), toString(hz)], "_")
14341436 else {
1435- let hD = split(hA[aZ], "_")
1436- let hE = parseIntValue(hD[ba])
1437- let hF = if ((size(hD) > 1))
1438- then parseIntValue(hD[bb])
1439- else hB
1440- makeString([toString(hE), toString(hF), toString(((hy - hE) - hF)), toString(hy)], "_")
1441- }
1442-[hA[aV], if ((size(split(hA[aW], "_")) == aD))
1443- then hA[aW]
1444- else "0_0_0_0_0_0", if ((size(split(hA[aX], "_")) == aD))
1445- then hA[aX]
1446- else "0_0_0_0_0_0", hA[aY], hC]
1447- }
1448-
1449-
1450-func hG (hm) = {
1451- let hH = hl(hm)
1452- let hI = parseIntValue(split(hm[aZ], "_")[ba])
1453- ((hj(hm[aV]) - hH) - hI)
1454- }
1455-
1456-
1457-func hJ (hK,hm,hL) = if ((size(hK) != 3))
1437+ let hE = split(hB[aZ], "_")
1438+ let hF = parseIntValue(hE[ba])
1439+ let hG = if ((size(hE) > 1))
1440+ then parseIntValue(hE[bb])
1441+ else hC
1442+ makeString([toString(hF), toString(hG), toString(((hz - hF) - hG)), toString(hz)], "_")
1443+ }
1444+[hB[aV], if ((size(split(hB[aW], "_")) == aD))
1445+ then hB[aW]
1446+ else "0_0_0_0_0_0", if ((size(split(hB[aX], "_")) == aD))
1447+ then hB[aX]
1448+ else "0_0_0_0_0_0", hB[aY], hD]
1449+ }
1450+
1451+
1452+func hH (hn) = {
1453+ let hI = hm(hn)
1454+ let hJ = parseIntValue(split(hn[aZ], "_")[ba])
1455+ ((hk(hn[aV]) - hI) - hJ)
1456+ }
1457+
1458+
1459+func hK (hL,hn,hM) = if ((size(hL) != 3))
14581460 then throw("cargoListStr should contain exactly 2 ':' separators")
14591461 else {
1460- let hM = split(hK[0], "_")
1461- let hN = split(hK[1], "_")
1462- let hO = if ((hK[2] == ""))
1462+ let hN = split(hL[0], "_")
1463+ let hO = split(hL[1], "_")
1464+ let hP = if ((hL[2] == ""))
14631465 then nil
1464- else split_4C(hK[2], "_")
1465- if ((size(hM) != aD))
1466+ else split_4C(hL[2], "_")
1467+ if ((size(hN) != aD))
14661468 then throw("All 6 resources should be passed")
1467- else if ((size(hN) != aD))
1469+ else if ((size(hO) != aD))
14681470 then throw("All 6 materials should be passed")
14691471 else {
1470- let gu = hG(hm)
1471- let hP = split(hm[aW], "_")
1472- let hQ = split(hm[aX], "_")
1473- let hR = if ((hm[aY] == ""))
1472+ let gv = hH(hn)
1473+ let hQ = split(hn[aW], "_")
1474+ let hR = split(hn[aX], "_")
1475+ let hS = if ((hn[aY] == ""))
14741476 then nil
1475- else split_4C(hm[aY], "_")
1476- let gs = split(hL[bf], "_")
1477- let hS = split(hL[bg], "_")
1478- let hT = if ((hL[bh] == ""))
1477+ else split_4C(hn[aY], "_")
1478+ let gt = split(hM[bf], "_")
1479+ let hT = split(hM[bg], "_")
1480+ let hU = if ((hM[bh] == ""))
14791481 then nil
1480- else split_4C(hL[bh], "_")
1481- func hU (em,hp) = {
1482- let gf = em._1
1483- let hV = parseIntValue(hp)
1484- let hW = parseIntValue(hP[gf])
1485- let hX = parseIntValue(gs[gf])
1486- if ((hV == 0))
1487- then $Tuple4((gf + 1), (em._2 :+ hP[gf]), (em._3 :+ gs[gf]), em._4)
1488- else if ((hV > 0))
1489- then if ((hV > hX))
1490- then throw((((("Attempt to take " + hp) + " from backpack, but only ") + toString(hX)) + " available"))
1491- else $Tuple4((gf + 1), (em._2 :+ toString((hW + hV))), (em._3 :+ toString((hX - hV))), (em._4 + hV))
1492- else if ((-(hV) > hW))
1493- then throw((((("Attempt to take " + toString(-(hV))) + " from warehouse, but only ") + toString(hW)) + " available"))
1494- else $Tuple4((gf + 1), (em._2 :+ toString((hW + hV))), (em._3 :+ toString((hX - hV))), (em._4 + hV))
1482+ else split_4C(hM[bh], "_")
1483+ func hV (en,hq) = {
1484+ let gg = en._1
1485+ let hW = parseIntValue(hq)
1486+ let hX = parseIntValue(hQ[gg])
1487+ let hY = parseIntValue(gt[gg])
1488+ if ((hW == 0))
1489+ then $Tuple4((gg + 1), (en._2 :+ hQ[gg]), (en._3 :+ gt[gg]), en._4)
1490+ else if ((hW > 0))
1491+ then if ((hW > hY))
1492+ then throw((((("Attempt to take " + hq) + " from backpack, but only ") + toString(hY)) + " available"))
1493+ else $Tuple4((gg + 1), (en._2 :+ toString((hX + hW))), (en._3 :+ toString((hY - hW))), (en._4 + hW))
1494+ else if ((-(hW) > hX))
1495+ then throw((((("Attempt to take " + toString(-(hW))) + " from warehouse, but only ") + toString(hX)) + " available"))
1496+ else $Tuple4((gg + 1), (en._2 :+ toString((hX + hW))), (en._3 :+ toString((hY - hW))), (en._4 + hW))
14951497 }
14961498
1497- let ex = {
1498- let eo = hM
1499- let ep = size(eo)
1500- let eq = $Tuple4(0, nil, nil, 0)
1501- func er (es,et) = if ((et >= ep))
1502- then es
1503- else hU(es, eo[et])
1504-
1505- func eu (es,et) = if ((et >= ep))
1506- then es
1499+ let ey = {
1500+ let ep = hN
1501+ let eq = size(ep)
1502+ let er = $Tuple4(0, nil, nil, 0)
1503+ func es (et,eu) = if ((eu >= eq))
1504+ then et
1505+ else hV(et, ep[eu])
1506+
1507+ func ev (et,eu) = if ((eu >= eq))
1508+ then et
15071509 else throw("List size exceeds 6")
15081510
1509- eu(er(er(er(er(er(er(eq, 0), 1), 2), 3), 4), 5), 6)
1511+ ev(es(es(es(es(es(es(er, 0), 1), 2), 3), 4), 5), 6)
15101512 }
1511- func hY (em,hp) = {
1512- let gf = em._1
1513- let hV = parseIntValue(hp)
1514- let hZ = parseIntValue(hQ[gf])
1515- let ia = parseIntValue(hS[gf])
1516- if ((hV == 0))
1517- then $Tuple4((gf + 1), (em._2 :+ hQ[gf]), (em._3 :+ hS[gf]), em._4)
1518- else if ((hV > 0))
1519- then if ((hV > ia))
1520- then throw((((("Attempt to take " + hp) + " from backpack, but only ") + toString(ia)) + " available"))
1521- else $Tuple4((gf + 1), (em._2 :+ toString((hZ + hV))), (em._3 :+ toString((ia - hV))), (em._4 + hV))
1522- else if ((-(hV) > hZ))
1523- then throw((((("Attempt to take " + toString(-(hV))) + " from warehouse, but only ") + toString(hZ)) + " available"))
1524- else $Tuple4((gf + 1), (em._2 :+ toString((hZ + hV))), (em._3 :+ toString((ia - hV))), (em._4 + hV))
1513+ func hZ (en,hq) = {
1514+ let gg = en._1
1515+ let hW = parseIntValue(hq)
1516+ let ia = parseIntValue(hR[gg])
1517+ let ib = parseIntValue(hT[gg])
1518+ if ((hW == 0))
1519+ then $Tuple4((gg + 1), (en._2 :+ hR[gg]), (en._3 :+ hT[gg]), en._4)
1520+ else if ((hW > 0))
1521+ then if ((hW > ib))
1522+ then throw((((("Attempt to take " + hq) + " from backpack, but only ") + toString(ib)) + " available"))
1523+ else $Tuple4((gg + 1), (en._2 :+ toString((ia + hW))), (en._3 :+ toString((ib - hW))), (en._4 + hW))
1524+ else if ((-(hW) > ia))
1525+ then throw((((("Attempt to take " + toString(-(hW))) + " from warehouse, but only ") + toString(ia)) + " available"))
1526+ else $Tuple4((gg + 1), (en._2 :+ toString((ia + hW))), (en._3 :+ toString((ib - hW))), (en._4 + hW))
15251527 }
15261528
1527- let fL = {
1528- let eo = hN
1529- let ep = size(eo)
1530- let eq = $Tuple4(0, nil, nil, ex._4)
1531- func hc (es,et) = if ((et >= ep))
1532- then es
1533- else hY(es, eo[et])
1534-
1535- func hd (es,et) = if ((et >= ep))
1536- then es
1529+ let fM = {
1530+ let ep = hO
1531+ let eq = size(ep)
1532+ let er = $Tuple4(0, nil, nil, ey._4)
1533+ func hd (et,eu) = if ((eu >= eq))
1534+ then et
1535+ else hZ(et, ep[eu])
1536+
1537+ func he (et,eu) = if ((eu >= eq))
1538+ then et
15371539 else throw("List size exceeds 6")
15381540
1539- hd(hc(hc(hc(hc(hc(hc(eq, 0), 1), 2), 3), 4), 5), 6)
1541+ he(hd(hd(hd(hd(hd(hd(er, 0), 1), 2), 3), 4), 5), 6)
15401542 }
1541- func ib (em,hp) = {
1542- let gf = em._1
1543- let hV = parseIntValue(hp)
1544- let ic = if ((size(hR) > gf))
1545- then parseIntValue(hR[gf])
1543+ func ic (en,hq) = {
1544+ let gg = en._1
1545+ let hW = parseIntValue(hq)
1546+ let id = if ((size(hS) > gg))
1547+ then parseIntValue(hS[gg])
15461548 else 0
1547- let id = if ((size(hT) > gf))
1548- then parseIntValue(hT[gf])
1549+ let ie = if ((size(hU) > gg))
1550+ then parseIntValue(hU[gg])
15491551 else 0
1550- if ((hV == 0))
1551- then $Tuple4((gf + 1), (em._2 :+ toString(ic)), (em._3 :+ toString(id)), em._4)
1552- else if ((hV > 0))
1553- then if ((hV > id))
1554- then throw((((("Attempt to take " + hp) + " from backpack, but only ") + toString(id)) + " available"))
1552+ if ((hW == 0))
1553+ then $Tuple4((gg + 1), (en._2 :+ toString(id)), (en._3 :+ toString(ie)), en._4)
1554+ else if ((hW > 0))
1555+ then if ((hW > ie))
1556+ then throw((((("Attempt to take " + hq) + " from backpack, but only ") + toString(ie)) + " available"))
15551557 else {
1556- let fo = (ec((ic + hV), aU) - ec(ic, aU))
1557- $Tuple4((gf + 1), (em._2 :+ toString((ic + hV))), (em._3 :+ toString((id - hV))), (em._4 + fo))
1558+ let fp = (ed((id + hW), aU) - ed(id, aU))
1559+ $Tuple4((gg + 1), (en._2 :+ toString((id + hW))), (en._3 :+ toString((ie - hW))), (en._4 + fp))
15581560 }
1559- else if ((-(hV) > ic))
1560- then throw((((("Attempt to take " + toString(-(hV))) + " from warehouse, but only ") + toString(ic)) + " available"))
1561+ else if ((-(hW) > id))
1562+ then throw((((("Attempt to take " + toString(-(hW))) + " from warehouse, but only ") + toString(id)) + " available"))
15611563 else {
1562- let fo = (ec((ic + hV), aU) - ec(ic, aU))
1563- $Tuple4((gf + 1), (em._2 :+ toString((ic + hV))), (em._3 :+ toString((id - hV))), (em._4 + fo))
1564+ let fp = (ed((id + hW), aU) - ed(id, aU))
1565+ $Tuple4((gg + 1), (en._2 :+ toString((id + hW))), (en._3 :+ toString((ie - hW))), (en._4 + fp))
15641566 }
15651567 }
15661568
1567- let fP = if ((size(hO) != 0))
1569+ let fQ = if ((size(hP) != 0))
15681570 then {
1569- let eo = hO
1570- let ep = size(eo)
1571- let eq = $Tuple4(0, nil, nil, fL._4)
1572- func hf (es,et) = if ((et >= ep))
1573- then es
1574- else ib(es, eo[et])
1575-
1576- func hg (es,et) = if ((et >= ep))
1577- then es
1571+ let ep = hP
1572+ let eq = size(ep)
1573+ let er = $Tuple4(0, nil, nil, fM._4)
1574+ func hg (et,eu) = if ((eu >= eq))
1575+ then et
1576+ else ic(et, ep[eu])
1577+
1578+ func hh (et,eu) = if ((eu >= eq))
1579+ then et
15781580 else throw("List size exceeds 50")
15791581
1580- hg(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(hf(eq, 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)
1582+ hh(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(hg(er, 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)
15811583 }
1582- else $Tuple4(0, hR, hT, fL._4)
1583- let ie = fP._4
1584- if ((ie > gu))
1585- then throw((((("Attempt to put total " + toString(ie)) + " stuff, but only ") + toString(gu)) + " warehouse space left"))
1586- else $Tuple7(makeString(ex._2, "_"), makeString(fL._2, "_"), makeString_2C(fP._2, "_"), makeString(ex._3, "_"), makeString(fL._3, "_"), makeString_2C(fP._3, "_"), ie)
1584+ else $Tuple4(0, hS, hU, fM._4)
1585+ let if = fQ._4
1586+ if ((if > gv))
1587+ then throw((((("Attempt to put total " + toString(if)) + " stuff, but only ") + toString(gv)) + " warehouse space left"))
1588+ else $Tuple7(makeString(ey._2, "_"), makeString(fM._2, "_"), makeString_2C(fQ._2, "_"), makeString(ey._3, "_"), makeString(fM._3, "_"), makeString_2C(fQ._3, "_"), if)
15871589 }
15881590 }
15891591
15901592
1591-func if (ig,ih) = {
1592- let bI = toString(ig)
1593- let ii = gA(toBigInt(ih))
1594- let ij = valueOrElse(getInteger(dK()), (dJ + 1))
1595- let dO = toString(ij)
1596- let gJ = toInt((ii % dD))
1597- let gi = gH(ii, gJ)
1598- let cZ = aM[gJ]
1599- let ik = Issue(eb(dO, "S"), makeString([dO, "S", gi, cZ], "_"), 1, 0, false)
1600- let bm = calculateAssetId(ik)
1601- let il = toBase58String(bm)
1602- $Tuple2([IntegerEntry(dK(), (ij + 1)), ik, StringEntry(dN(dO), il), StringEntry(bl(il), bI), StringEntry(dQ(dO), bI), IntegerEntry(bv(il), 0), IntegerEntry(dP(il, bI), 0), ScriptTransfer(ig, 1, bm)], $Tuple2(il, cZ))
1603- }
1604-
1605-
1606-func im (bI,in,io) = if (!(sigVerify_8Kb(in, io, dv)))
1593+func ig (ih,ii) = {
1594+ let bI = toString(ih)
1595+ let ij = gB(toBigInt(ii))
1596+ let ik = valueOrElse(getInteger(dL()), (dK + 1))
1597+ let dP = toString(ik)
1598+ let gK = toInt((ij % dE))
1599+ let gj = gI(ij, gK)
1600+ let da = aM[gK]
1601+ let il = Issue(ec(dP, "S"), makeString([dP, "S", gj, da], "_"), 1, 0, false)
1602+ let bm = calculateAssetId(il)
1603+ let im = toBase58String(bm)
1604+ $Tuple2([IntegerEntry(dL(), (ik + 1)), il, StringEntry(dO(dP), im), StringEntry(bl(im), bI), StringEntry(dR(dP), bI), IntegerEntry(bv(im), 0), IntegerEntry(dQ(im, bI), 0), ScriptTransfer(ih, 1, bm)], $Tuple2(im, da))
1605+ }
1606+
1607+
1608+func in (bI,io,ip) = if (!(sigVerify_8Kb(io, ip, dw)))
16071609 then throw("signature does not match")
16081610 else {
1609- let eK = split_4C(toUtf8String(in), ";")
1610- let ip = split_4C(eK[0], "|")
1611- let iq = split(ip[dX], "_")
1612- let ir = parseIntValue(iq[0])
1613- let is = parseIntValue(iq[1])
1614- let it = split(eK[1], ":")
1615- let iu = it[0]
1616- let iv = parseIntValue(ip[dY])
1617- if (if ((iv > (lastBlock.timestamp + dx)))
1611+ let eL = split_4C(toUtf8String(io), ";")
1612+ let iq = split_4C(eL[0], "|")
1613+ let ir = split(iq[dY], "_")
1614+ let is = parseIntValue(ir[0])
1615+ let it = parseIntValue(ir[1])
1616+ let iu = split(eL[1], ":")
1617+ let iv = iu[0]
1618+ let iw = parseIntValue(iq[dZ])
1619+ if (if ((iw > (lastBlock.timestamp + dy)))
16181620 then true
1619- else ((lastBlock.timestamp - dx) > iv))
1620- then throw(((("signature outdated: logTime=" + toString(iv)) + ", bcTime=") + toString(lastBlock.timestamp)))
1621+ else ((lastBlock.timestamp - dy) > iw))
1622+ then throw(((("signature outdated: logTime=" + toString(iw)) + ", bcTime=") + toString(lastBlock.timestamp)))
16211623 else {
1622- let iw = it[1]
1623- let ix = valueOrElse(getString(dm(bI)), "")
1624- if ((ix != iw))
1625- then throw(((("Tx ids don't match! In state: " + ix) + ", in msg: ") + iw))
1624+ let ix = iu[1]
1625+ let iy = valueOrElse(getString(dn(bI)), "")
1626+ if ((iy != ix))
1627+ then throw(((("Tx ids don't match! In state: " + iy) + ", in msg: ") + ix))
16261628 else {
16271629 let z = valueOrErrorMessage(getString(bE(bI)), "You don't have a duck staked")
1628- let iy = y(z)
1629- let iz = ae(valueOrElse(getInteger(C(z)), 0))
1630- let iA = valueOrElse(getInteger(iy), iz)
1631- if ((iA != ir))
1632- then throw(((("oldHealth=" + toString(iA)) + " from state does not match one from flight log=") + toString(ir)))
1633- else if ((0 >= ir))
1630+ let iz = y(z)
1631+ let iA = ae(valueOrElse(getInteger(C(z)), 0))
1632+ let iB = valueOrElse(getInteger(iz), iA)
1633+ if ((iB != is))
1634+ then throw(((("oldHealth=" + toString(iB)) + " from state does not match one from flight log=") + toString(is)))
1635+ else if ((0 >= is))
16341636 then throw("You can't fly with zero health")
1635- else if (!(fR(z)))
1637+ else if (!(fS(z)))
16361638 then throw("Equipment incompatible")
16371639 else {
1638- let iB = if ((size(ip) > dZ))
1639- then ip[dZ]
1640+ let iC = if ((size(iq) > ea))
1641+ then iq[ea]
16401642 else ""
1641- let iC = if ((size(ip) > ea))
1642- then ip[ea]
1643+ let iD = if ((size(iq) > eb))
1644+ then iq[eb]
16431645 else ""
1644- let iD = if (if ((is > 0))
1645- then (iB == "$")
1646+ let iE = if (if ((it > 0))
1647+ then (iC == "$")
16461648 else false)
1647- then df(invoke(cK, "sendUsdtPrize", [bI], nil))
1649+ then dg(invoke(cL, "sendUsdtPrize", [bI], nil))
16481650 else 0
1649- $Tuple5(is, z, iD, iu, iC)
1651+ $Tuple5(it, z, iE, iv, iD)
16501652 }
16511653 }
16521654 }
16531655 }
16541656
16551657
1656-func iE (O,iF) = {
1657- let hx = valueOrElse(getInteger(bv(O)), 0)
1658- let iG = valueOrElse(getInteger(bp(aC, O)), 0)
1659- let iH = (hx / 6)
1660- let iI = (hx / 7)
1661- ((aF + fraction(aF, ((hx + iH) + (2 * iI)), 5)) + fraction(aF, iG, (iF * 5)))
1662- }
1663-
1664-
1665-func iJ (b,iK,iL) = {
1666- let iM = if ((iK == dU))
1667- then $Tuple2(iL, valueOrElse(getString(bE(b)), ""))
1658+func iF (O,iG) = {
1659+ let hy = valueOrElse(getInteger(bv(O)), 0)
1660+ let iH = valueOrElse(getInteger(bp(aC, O)), 0)
1661+ let iI = (hy / 6)
1662+ let iJ = (hy / 7)
1663+ ((aF + fraction(aF, ((hy + iI) + (2 * iJ)), 5)) + fraction(aF, iH, (iG * 5)))
1664+ }
1665+
1666+
1667+func iK (b,iL,iM) = {
1668+ let iN = if ((iL == dV))
1669+ then $Tuple2(iM, valueOrElse(getString(bE(b)), ""))
16681670 else {
16691671 let z = valueOrErrorMessage(getString(bE(b)), "You don't have a duck staked")
1670- let iN = valueOrElse(getString(bG(z)), aI)
1671- let ca = split(value(iN), "_")
1672+ let iO = valueOrElse(getString(bG(z)), aI)
1673+ let ca = split(value(iO), "_")
16721674 if ((ca[bj] != "L"))
16731675 then throw((("Duck location type is " + ca[bj]) + ", but should be L"))
16741676 else $Tuple2(ca[bk], z)
16751677 }
1676- let O = iM._1
1677- let iO = iM._2
1678- let iP = value(assetInfo(fromBase58String(O)))
1679- let iQ = bo(O)
1680- let iR = valueOrErrorMessage(getInteger(iQ), (("Land " + iP.name) + " is not staked"))
1681- let iS = valueOrErrorMessage(getString(bl(O)), (("NFT " + iP.name) + " is orphaned"))
1682- if ((iS != b))
1678+ let O = iN._1
1679+ let iP = iN._2
1680+ let iQ = value(assetInfo(fromBase58String(O)))
1681+ let iR = bo(O)
1682+ let iS = valueOrErrorMessage(getInteger(iR), (("Land " + iQ.name) + " is not staked"))
1683+ let iT = valueOrErrorMessage(getString(bl(O)), (("NFT " + iQ.name) + " is orphaned"))
1684+ if ((iT != b))
16831685 then throw((aA + " is not yours"))
16841686 else {
1685- let iT = split(iP.description, "_")
1686- $Tuple4(iO, O, iT, iR)
1687- }
1688- }
1689-
1690-
1691-func iU (b,ed,iK,iL) = if ((0 > ed))
1687+ let iU = split(iQ.description, "_")
1688+ $Tuple4(iP, O, iU, iS)
1689+ }
1690+ }
1691+
1692+
1693+func iV (b,ee,iL,iM) = if ((0 > ee))
16921694 then throw("Negative amount")
16931695 else {
1694- let fv = iJ(b, iK, iL)
1695- let dj = fv._3[cQ]
1696- let gb = gh(fv._3[cR])
1697- let gl = (lastBlock.timestamp - fv._4)
1698- if ((0 > gl))
1699- then throw(((("Saved timestamp is in future, saved = " + toString(fv._4)) + ", current = ") + toString(lastBlock.timestamp)))
1696+ let fw = iK(b, iL, iM)
1697+ let dk = fw._3[cR]
1698+ let gc = gi(fw._3[cS])
1699+ let gm = (lastBlock.timestamp - fw._4)
1700+ if ((0 > gm))
1701+ then throw(((("Saved timestamp is in future, saved = " + toString(fw._4)) + ", current = ") + toString(lastBlock.timestamp)))
17001702 else {
1701- let iF = di(dj)
1702- let iV = iE(fv._2, iF)
1703- let iW = fraction(gl, (iV * iF), aG)
1704- if ((ed > iW))
1705- then throw(((("Not enough resources, available = " + toString(iW)) + ", requested = ") + toString(ed)))
1703+ let iG = dj(dk)
1704+ let iW = iF(fw._2, iG)
1705+ let iX = fraction(gm, (iW * iG), aG)
1706+ if ((ee > iX))
1707+ then throw(((("Not enough resources, available = " + toString(iX)) + ", requested = ") + toString(ee)))
17061708 else {
1707- let iX = fraction((iW - ed), aG, (iV * iF))
1708- let iY = (lastBlock.timestamp - iX)
1709- let hw = (iF / cp)
1710- let gt = gp(gb, (gl - iX), hw, iV)
1711- let hv = bu(fv._2)
1712- let hx = valueOrElse(getInteger(bv(fv._2)), 0)
1713- let hm = hu(hv, hw, hx)
1714- let hD = split(hm[aZ], "_")
1715- let gu = parseIntValue(hD[bc])
1716- if (if ((iK == dU))
1717- then (ed > gu)
1709+ let iY = fraction((iX - ee), aG, (iW * iG))
1710+ let iZ = (lastBlock.timestamp - iY)
1711+ let hx = (iG / cq)
1712+ let gu = gq(gc, (gm - iY), hx, iW)
1713+ let hw = bu(fw._2)
1714+ let hy = valueOrElse(getInteger(bv(fw._2)), 0)
1715+ let hn = hv(hw, hx, hy)
1716+ let hE = split(hn[aZ], "_")
1717+ let gv = parseIntValue(hE[bc])
1718+ if (if ((iL == dV))
1719+ then (ee > gv)
17181720 else false)
1719- then throw((("Only " + toString(gu)) + " space left in warehouse"))
1721+ then throw((("Only " + toString(gv)) + " space left in warehouse"))
17201722 else {
1721- let hi = bF(fv._1)
1722- let hL = hh(hi)
1723- let gs = split(hL[bf], "_")
1724- let gr = split(hm[aW], "_")
1725- let iZ = if ((iK == dU))
1726- then $Tuple4(gj(gr, gb, (gl - iX), hw, iV), hL[bf], (parseIntValue(hD[bb]) + gt._2), (parseIntValue(hD[bc]) - gt._2))
1727- else if ((iK == dV))
1728- then $Tuple4(hm[aW], gj(gs, gb, (gl - iX), hw, iV), parseIntValue(hD[bb]), parseIntValue(hD[bc]))
1723+ let hj = bF(fw._1)
1724+ let hM = hi(hj)
1725+ let gt = split(hM[bf], "_")
1726+ let gs = split(hn[aW], "_")
1727+ let ja = if ((iL == dV))
1728+ then $Tuple4(gk(gs, gc, (gm - iY), hx, iW), hM[bf], (parseIntValue(hE[bb]) + gu._2), (parseIntValue(hE[bc]) - gu._2))
1729+ else if ((iL == dW))
1730+ then $Tuple4(hn[aW], gk(gt, gc, (gm - iY), hx, iW), parseIntValue(hE[bb]), parseIntValue(hE[bc]))
17291731 else {
1730- let ja = gq(gr, gs, gt, gu)
1731- let jb = min([parseIntValue(hD[bc]), gt._2])
1732- $Tuple4(ja._1, ja._2, (parseIntValue(hD[bb]) + jb), (parseIntValue(hD[bc]) - jb))
1732+ let jb = gr(gs, gt, gu, gv)
1733+ let jc = min([parseIntValue(hE[bc]), gu._2])
1734+ $Tuple4(jb._1, jb._2, (parseIntValue(hE[bb]) + jc), (parseIntValue(hE[bc]) - jc))
17331735 }
1734- let jc = iZ._1
1735- let jd = iZ._2
1736- let je = iZ._3
1737- let jf = iZ._4
1738- $Tuple5([IntegerEntry(bo(fv._2), iY), IntegerEntry(br(aA, fv._2, b), iY)], hi, [hL[be], jd, hL[bg], hL[bh]], hv, [hm[aV], jc, hm[aX], hm[aY], makeString([hD[ba], toString(je), toString(jf), hD[bd]], "_")])
1736+ let jd = ja._1
1737+ let je = ja._2
1738+ let jf = ja._3
1739+ let jg = ja._4
1740+ $Tuple5([IntegerEntry(bo(fw._2), iZ), IntegerEntry(br(aA, fw._2, b), iZ)], hj, [hM[be], je, hM[bg], hM[bh]], hw, [hn[aV], jd, hn[aX], hn[aY], makeString([hE[ba], toString(jf), toString(jg), hE[bd]], "_")])
17391741 }
17401742 }
17411743 }
17421744 }
17431745
17441746
1745-func jg (b,O,iF,iK) = {
1746- let iQ = bo(O)
1747- let iR = value(getInteger(iQ))
1748- let iW = (fraction((lastBlock.timestamp - iR), iE(O, iF), aG) * iF)
1749- iU(b, iW, iK, O)
1750- }
1751-
1752-
1753-func jh (ez,ig,ji,O) = {
1754- let b = toString(ig)
1755- let fv = iJ(b, dW, O)
1756- let iF = di(fv._3[cQ])
1757- let jj = bv(fv._2)
1758- let jk = valueOrElse(getInteger(jj), 0)
1747+func jh (b,O,iG,iL) = {
1748+ let iR = bo(O)
1749+ let iS = value(getInteger(iR))
1750+ let iX = (fraction((lastBlock.timestamp - iS), iF(O, iG), aG) * iG)
1751+ iV(b, iX, iL, O)
1752+ }
1753+
1754+
1755+func ji (eA,ih,jj,O) = {
1756+ let b = toString(ih)
1757+ let fw = iK(b, dX, O)
1758+ let iG = dj(fw._3[cR])
1759+ let jk = bv(fw._2)
1760+ let jl = valueOrElse(getInteger(jk), 0)
17591761 if (if (!(cf))
1760- then (jk >= 3)
1762+ then (jl >= 3)
17611763 else false)
17621764 then throw("Currently max infrastructure level = 3")
17631765 else {
1764- let jl = ((sqrt(iF, 0, 0, DOWN) / 5) + 2)
1765- let aj = (jk + 1)
1766+ let jm = ((sqrt(iG, 0, 0, DOWN) / 5) + 2)
1767+ let aj = (jl + 1)
17661768 if (if (cf)
1767- then (aj > jl)
1769+ then (aj > jm)
17681770 else false)
1769- then throw(("Currently max infrastructure level = " + toString(jl)))
1771+ then throw(("Currently max infrastructure level = " + toString(jm)))
17701772 else {
1771- let jm = fraction(dA, (iF * aj), cp)
1772- if (if (!(ez))
1773- then (ji != jm)
1773+ let jn = fraction(dB, (iG * aj), cq)
1774+ if (if (!(eA))
1775+ then (jj != jn)
17741776 else false)
1775- then throw(("Payment attached should be " + toString(jm)))
1777+ then throw(("Payment attached should be " + toString(jn)))
17761778 else {
1777- let hi = bF(fv._1)
1778- let hL = hh(hi)
1779- let jn = split(hL[bg], "_")
1780- let jo = fraction(ck, (iF * aj), cp)
1781- let jp = makeString(ey(ez, jn, jo), "_")
1782- let jq = jg(b, fv._2, iF, dW)
1783- let jr = jq._5
1784- let js = hj(jr[aV])
1785- let jt = makeString([split(jr[aV], "_")[0], toString(aj)], "_")
1786- let ju = hj(jt)
1787- let hD = split(jr[aZ], "_")
1788- let jv = makeString([hD[ba], hD[bb], toString(((parseIntValue(hD[bc]) + ju) - js)), toString(ju)], "_")
1789- $Tuple3(([IntegerEntry(jj, aj), IntegerEntry(dP(fv._2, b), aj), StringEntry(hi, makeString([hL[be], jq._3[bf], jp, hL[bh]], ":")), StringEntry(jq._4, makeString([jt, jr[aW], jr[aX], jr[aY], jv], ":"))] ++ jq._1), aj, jo)
1779+ let hj = bF(fw._1)
1780+ let hM = hi(hj)
1781+ let jo = split(hM[bg], "_")
1782+ let jp = fraction(cl, (iG * aj), cq)
1783+ let jq = makeString(ez(eA, jo, jp), "_")
1784+ let jr = jh(b, fw._2, iG, dX)
1785+ let js = jr._5
1786+ let jt = hk(js[aV])
1787+ let ju = makeString([split(js[aV], "_")[0], toString(aj)], "_")
1788+ let jv = hk(ju)
1789+ let hE = split(js[aZ], "_")
1790+ let jw = makeString([hE[ba], hE[bb], toString(((parseIntValue(hE[bc]) + jv) - jt)), toString(jv)], "_")
1791+ $Tuple3(([IntegerEntry(jk, aj), IntegerEntry(dQ(fw._2, b), aj), StringEntry(hj, makeString([hM[be], jr._3[bf], jq, hM[bh]], ":")), StringEntry(jr._4, makeString([ju, js[aW], js[aX], js[aY], jw], ":"))] ++ jr._1), aj, jp)
17901792 }
17911793 }
17921794 }
17931795 }
17941796
17951797
1796-func jw (z,jx) = {
1797- let jy = C(z)
1798- let jz = B(z)
1799- let ad = valueOrElse(getInteger(al, jz), 0)
1800- let ai = (ad + jx)
1801- let jA = ag(valueOrElse(getInteger(al, jy), 0), ai)
1802- let jB = D(z)
1803- $Tuple2([IntegerEntry(jy, jA[0]), IntegerEntry(jz, ai), IntegerEntry(jB, (valueOrElse(getInteger(jB), 0) + jA[1]))], ai)
1804- }
1805-
1806-
1807-func jC (b,jx) = {
1808- let jy = G(b)
1809- let jz = F(b)
1810- let ad = valueOrElse(getInteger(al, jz), 0)
1811- let ai = (ad + jx)
1812- let jA = ag(valueOrElse(getInteger(al, jy), 0), ai)
1813- let jB = H(b)
1814- $Tuple2([IntegerEntry(jy, jA[0]), IntegerEntry(jz, ai), IntegerEntry(jB, (valueOrElse(getInteger(jB), 0) + jA[1]))], ai)
1815- }
1816-
1817-
1818-func jD (b) = {
1798+func jx (z,jy) = {
1799+ let jz = C(z)
1800+ let jA = B(z)
1801+ let ad = valueOrElse(getInteger(al, jA), 0)
1802+ let ai = (ad + jy)
1803+ let jB = ag(valueOrElse(getInteger(al, jz), 0), ai)
1804+ let jC = D(z)
1805+ $Tuple2([IntegerEntry(jz, jB[0]), IntegerEntry(jA, ai), IntegerEntry(jC, (valueOrElse(getInteger(jC), 0) + jB[1]))], ai)
1806+ }
1807+
1808+
1809+func jD (b,jy) = {
1810+ let jz = G(b)
1811+ let jA = F(b)
1812+ let ad = valueOrElse(getInteger(al, jA), 0)
1813+ let ai = (ad + jy)
1814+ let jB = ag(valueOrElse(getInteger(al, jz), 0), ai)
1815+ let jC = H(b)
1816+ $Tuple2([IntegerEntry(jz, jB[0]), IntegerEntry(jA, ai), IntegerEntry(jC, (valueOrElse(getInteger(jC), 0) + jB[1]))], ai)
1817+ }
1818+
1819+
1820+func jE (b) = {
18191821 let z = valueOrErrorMessage(getString(bE(b)), "You don't have a duck staked")
1820- let jE = bz(b)
1821- let jF = getString(jE)
1822- if (!(isDefined(jF)))
1822+ let jF = bz(b)
1823+ let jG = getString(jF)
1824+ if (!(isDefined(jG)))
18231825 then throw("You are not eligible for ONBOARD artifact")
18241826 else {
1825- let jG = bB(b)
1826- let jH = getString(jG)
1827- if (isDefined(jH))
1828- then throw(("You already used your ONBOARD artifact on duck " + value(jH)))
1827+ let jH = bB(b)
1828+ let jI = getString(jH)
1829+ if (isDefined(jI))
1830+ then throw(("You already used your ONBOARD artifact on duck " + value(jI)))
18291831 else {
1830- let jI = bA(z)
1831- let jJ = getString(jI)
1832- if (isDefined(jJ))
1833- then throw(((("The duck " + z) + " already got points from ONBOARD artifact from user ") + value(jJ)))
1834- else ([StringEntry(jG, z), StringEntry(jI, b)] ++ jw(z, aa)._1)
1832+ let jJ = bA(z)
1833+ let jK = getString(jJ)
1834+ if (isDefined(jK))
1835+ then throw(((("The duck " + z) + " already got points from ONBOARD artifact from user ") + value(jK)))
1836+ else ([StringEntry(jH, z), StringEntry(jJ, b)] ++ jx(z, aa)._1)
18351837 }
18361838 }
18371839 }
18381840
18391841
1840-func jK (b,iL) = {
1841- let fv = iJ(b, dW, iL)
1842- let O = fv._2
1843- let iF = di(fv._3[cQ])
1844- let jL = bp(aC, O)
1845- if ((valueOrElse(getInteger(jL), 0) > 0))
1842+func jL (b,iM) = {
1843+ let fw = iK(b, dX, iM)
1844+ let O = fw._2
1845+ let iG = dj(fw._3[cR])
1846+ let jM = bp(aC, O)
1847+ if ((valueOrElse(getInteger(jM), 0) > 0))
18461848 then throw("Presale artifact is already activated")
1847- else if ((parseIntValue(fv._3[cP]) > dJ))
1849+ else if ((parseIntValue(fw._3[cQ]) > dK))
18481850 then throw((((aA + " ") + O) + " is not eligible for presale artifact"))
18491851 else {
1850- let jq = jg(b, O, iF, dW)
1851- (((jq._1 :+ IntegerEntry(jL, iF)) :+ StringEntry(jq._2, makeString(jq._3, ":"))) :+ StringEntry(jq._4, makeString(jq._5, ":")))
1852+ let jr = jh(b, O, iG, dX)
1853+ (((jr._1 :+ IntegerEntry(jM, iG)) :+ StringEntry(jr._2, makeString(jr._3, ":"))) :+ StringEntry(jr._4, makeString(jr._5, ":")))
18521854 }
18531855 }
18541856
18551857
1856-func jM (z) = {
1857- let bZ = valueOrElse(getInteger(cO, bK), 0)
1858- let iN = split(valueOrElse(getString(bG(z)), aI), "_")
1858+func jN (z) = {
1859+ let bZ = valueOrElse(getInteger(cP, bK), 0)
1860+ let iO = split(valueOrElse(getString(bG(z)), aI), "_")
18591861 let av = lastBlock.timestamp
1860- let cb = bT(cO, bZ)
1862+ let cb = bT(cP, bZ)
18611863 let bV = cb[bP]
18621864 let bW = cb[bQ]
1863- if ((iN[bj] != "T"))
1865+ if ((iO[bj] != "T"))
18641866 then false
1865- else if (if (if ((parseIntValue(iN[bi]) == bZ))
1867+ else if (if (if ((parseIntValue(iO[bi]) == bZ))
18661868 then (bW[bS] == "INPROGRESS")
18671869 else false)
18681870 then (parseIntValue(bV[bR]) > av)
18691871 else false)
18701872 then throw("Your duck is taking part in the tournament")
1871- else dh(invoke(this, "exitTournamentInternal", [z], nil))
1872- }
1873-
1874-
1875-func jN (jO,aj,jP,b,jQ,jR) = {
1873+ else di(invoke(this, "exitTournamentInternal", [z], nil))
1874+ }
1875+
1876+
1877+func jO (jP,aj,jQ,b,jR,jS) = {
18761878 let z = valueOrErrorMessage(getString(bE(b)), "You don't have a duck staked")
1877- if (jM(z))
1879+ if (jN(z))
18781880 then throw("mergeInternal_checkTournament")
18791881 else {
1880- func jS (em,O) = {
1881- let iP = value(assetInfo(fromBase58String(O)))
1882- let iQ = bo(O)
1883- let iR = valueOrErrorMessage(getInteger(iQ), (("NFT " + iP.name) + " is not staked"))
1884- let iS = valueOrErrorMessage(getString(bl(O)), (("NFT " + iP.name) + " is orphaned"))
1885- if ((iS != b))
1882+ func jT (en,O) = {
1883+ let iQ = value(assetInfo(fromBase58String(O)))
1884+ let iR = bo(O)
1885+ let iS = valueOrErrorMessage(getInteger(iR), (("NFT " + iQ.name) + " is not staked"))
1886+ let iT = valueOrErrorMessage(getString(bl(O)), (("NFT " + iQ.name) + " is orphaned"))
1887+ if ((iT != b))
18861888 then throw((aA + " is not yours"))
18871889 else {
1888- let iT = split(iP.description, "_")
1889- let cZ = iT[cS]
1890- if (if ((em._3 != ""))
1891- then (em._3 != cZ)
1890+ let iU = split(iQ.description, "_")
1891+ let da = iU[cT]
1892+ if (if ((en._3 != ""))
1893+ then (en._3 != da)
18921894 else false)
18931895 then throw("Lands should be on the same continent to merge")
18941896 else {
1895- let dj = iT[cQ]
1896- let jT = em._1
1897- let gf = valueOrErrorMessage(indexOf(jT, dj), "You haven't passed all the lands needed")
1898- let jU = (take(jT, gf) + drop(jT, (gf + 1)))
1899- let iF = di(dj)
1900- let jV = (em._2 + valueOrElse(getInteger(bp(aC, O)), 0))
1901- let hx = valueOrElse(getInteger(bv(O)), 0)
1902- let jW = {
1903- let ci = dj
1904- if (("S" == ci))
1897+ let dk = iU[cR]
1898+ let jU = en._1
1899+ let gg = valueOrErrorMessage(indexOf(jU, dk), "You haven't passed all the lands needed")
1900+ let jV = (take(jU, gg) + drop(jU, (gg + 1)))
1901+ let iG = dj(dk)
1902+ let jW = (en._2 + valueOrElse(getInteger(bp(aC, O)), 0))
1903+ let hy = valueOrElse(getInteger(bv(O)), 0)
1904+ let jX = {
1905+ let cj = dk
1906+ if (("S" == cj))
19051907 then 3
1906- else if (("M" == ci))
1908+ else if (("M" == cj))
19071909 then 4
1908- else if (("L" == ci))
1910+ else if (("L" == cj))
19091911 then 5
1910- else if (("XL" == ci))
1912+ else if (("XL" == cj))
19111913 then 6
19121914 else throw("Only S, M, L, XL can merge")
19131915 }
1914- if ((hx != jW))
1916+ if ((hy != jX))
19151917 then throw("All lands should be maxed to merge")
19161918 else {
1917- let dO = iT[cP]
1918- let gb = gh(iT[cR])
1919- let gl = (lastBlock.timestamp - iR)
1920- if ((0 > gl))
1921- then throw(((("Saved timestamp is in future, saved = " + toString(iR)) + ", current = ") + toString(lastBlock.timestamp)))
1919+ let dP = iU[cQ]
1920+ let gc = gi(iU[cS])
1921+ let gm = (lastBlock.timestamp - iS)
1922+ if ((0 > gm))
1923+ then throw(((("Saved timestamp is in future, saved = " + toString(iS)) + ", current = ") + toString(lastBlock.timestamp)))
19221924 else {
1923- let iV = iE(O, iF)
1924- let hw = (iF / cp)
1925- let jd = gj(split(em._4, "_"), gb, gl, hw, iV)
1926- let ew = fZ(em._6, gb, hw, -1)
1927- let jX = fZ(em._10, gb, hw, -1)
1928- let gP = fZ(em._9, gb, hw, 1)
1929- let jY = em._7
1930- let cJ = indexOf(jY, O)
1931- if (!(isDefined(cJ)))
1925+ let iW = iF(O, iG)
1926+ let hx = (iG / cq)
1927+ let je = gk(split(en._4, "_"), gc, gm, hx, iW)
1928+ let ex = ga(en._6, gc, hx, -1)
1929+ let jY = ga(en._10, gc, hx, -1)
1930+ let gQ = ga(en._9, gc, hx, 1)
1931+ let jZ = en._7
1932+ let cK = indexOf(jZ, O)
1933+ if (!(isDefined(cK)))
19321934 then throw(("Your staked lands don't contain " + O))
19331935 else {
1934- let jZ = bn(O)
1935- let ka = valueOrElse(getString(jZ), "")
1936- $Tuple10(jU, jV, cZ, jd, ((((((((((((em._5 :+ DeleteEntry(bo(O))) :+ DeleteEntry(br(aA, O, b))) :+ DeleteEntry(dN(dO))) :+ DeleteEntry(bl(O))) :+ DeleteEntry(bv(O))) :+ DeleteEntry(dP(O, b))) :+ DeleteEntry(bp(aC, O))) :+ DeleteEntry(dQ(dO))) :+ DeleteEntry(bu(O))) :+ DeleteEntry(jZ)) :+ Burn(fromBase58String(O), 1)) ++ (if ((ka != ""))
1937- then [DeleteEntry(dL(ka))]
1938- else nil)), ew, removeByIndex(jY, value(cJ)), (em._8 + iF), gP, jX)
1936+ let ka = bn(O)
1937+ let kb = valueOrElse(getString(ka), "")
1938+ $Tuple10(jV, jW, da, je, ((((((((((((en._5 :+ DeleteEntry(bo(O))) :+ DeleteEntry(br(aA, O, b))) :+ DeleteEntry(dO(dP))) :+ DeleteEntry(bl(O))) :+ DeleteEntry(bv(O))) :+ DeleteEntry(dQ(O, b))) :+ DeleteEntry(bp(aC, O))) :+ DeleteEntry(dR(dP))) :+ DeleteEntry(bu(O))) :+ DeleteEntry(ka)) :+ Burn(fromBase58String(O), 1)) ++ (if ((kb != ""))
1939+ then [DeleteEntry(dM(kb))]
1940+ else nil)), ex, removeByIndex(jZ, value(cK)), (en._8 + iG), gQ, jY)
19391941 }
19401942 }
19411943 }
19421944 }
19431945 }
19441946 }
19451947
1946- let hi = bF(z)
1947- let hL = hh(hi)
1948- let ga = split(valueOrElse(getString(cX()), "0_0_0_0_0_0"), "_")
1949- let kb = da(b)
1950- let kc = getString(kb)
1951- let kd = if (isDefined(kc))
1952- then split_51C(value(kc), "_")
1948+ let hj = bF(z)
1949+ let hM = hi(hj)
1950+ let gb = split(valueOrElse(getString(cY()), "0_0_0_0_0_0"), "_")
1951+ let kc = db(b)
1952+ let kd = getString(kc)
1953+ let ke = if (isDefined(kd))
1954+ then split_51C(value(kd), "_")
19531955 else nil
1954- let ke = split(value(assetInfo(fromBase58String(jQ[0]))).description, "_")[cS]
1955- let kf = split(valueOrElse(getString(cY(ke)), "0_0_0_0_0_0"), "_")
1956- let ex = {
1957- let eo = jQ
1958- let ep = size(eo)
1959- let eq = $Tuple10(jP, 0, "", hL[bf], nil, ga, kd, 0, split("0_0_0_0_0_0", "_"), kf)
1960- func er (es,et) = if ((et >= ep))
1961- then es
1962- else jS(es, eo[et])
1963-
1964- func eu (es,et) = if ((et >= ep))
1965- then es
1956+ let kf = split(value(assetInfo(fromBase58String(jR[0]))).description, "_")[cT]
1957+ let kg = split(valueOrElse(getString(cZ(kf)), "0_0_0_0_0_0"), "_")
1958+ let ey = {
1959+ let ep = jR
1960+ let eq = size(ep)
1961+ let er = $Tuple10(jQ, 0, "", hM[bf], nil, gb, ke, 0, split("0_0_0_0_0_0", "_"), kg)
1962+ func es (et,eu) = if ((eu >= eq))
1963+ then et
1964+ else jT(et, ep[eu])
1965+
1966+ func ev (et,eu) = if ((eu >= eq))
1967+ then et
19661968 else throw("List size exceeds 5")
19671969
1968- eu(er(er(er(er(er(eq, 0), 1), 2), 3), 4), 5)
1970+ ev(es(es(es(es(es(er, 0), 1), 2), 3), 4), 5)
19691971 }
1970- let cZ = ex._3
1971- let gJ = valueOrErrorMessage(indexOf(aM, cZ), ("Unknown continent: " + cZ))
1972- let gi = gO(ex._9, (di(jO) / cp))
1973- let ij = valueOrElse(getInteger(dK()), (dJ + 1))
1974- let kg = toString(ij)
1975- let ik = Issue(eb(kg, jO), makeString([kg, jO, gi, cZ], "_"), 1, 0, false)
1976- let bm = calculateAssetId(ik)
1977- let kh = toBase58String(bm)
1978- let jp = makeString(ey((jR > 0), split(hL[bg], "_"), jR), "_")
1979- let ki = db(b)
1980- let kj = valueOrElse(getInteger(ki), 0)
1981- $Tuple2((((((((((((((((ex._5 :+ (if ((size(ex._7) > 0))
1982- then StringEntry(kb, makeString_11C(ex._7, "_"))
1983- else DeleteEntry(kb))) :+ IntegerEntry(ki, if ((ex._8 > kj))
1972+ let da = ey._3
1973+ let gK = valueOrErrorMessage(indexOf(aM, da), ("Unknown continent: " + da))
1974+ let gj = gP(ey._9, (dj(jP) / cq))
1975+ let ik = valueOrElse(getInteger(dL()), (dK + 1))
1976+ let kh = toString(ik)
1977+ let il = Issue(ec(kh, jP), makeString([kh, jP, gj, da], "_"), 1, 0, false)
1978+ let bm = calculateAssetId(il)
1979+ let ki = toBase58String(bm)
1980+ let jq = makeString(ez((jS > 0), split(hM[bg], "_"), jS), "_")
1981+ let kj = dc(b)
1982+ let kk = valueOrElse(getInteger(kj), 0)
1983+ $Tuple2((((((((((((((((ey._5 :+ (if ((size(ey._7) > 0))
1984+ then StringEntry(kc, makeString_11C(ey._7, "_"))
1985+ else DeleteEntry(kc))) :+ IntegerEntry(kj, if ((ey._8 > kk))
19841986 then 0
1985- else (kj - ex._8))) :+ IntegerEntry(dK(), (ij + 1))) :+ ik) :+ StringEntry(dN(kg), kh)) :+ StringEntry(bl(kh), b)) :+ StringEntry(dQ(kg), b)) :+ IntegerEntry(bp(aC, kh), ex._2)) :+ IntegerEntry(bv(kh), aj)) :+ IntegerEntry(dP(kh, b), aj)) :+ StringEntry(hi, makeString([hL[be], ex._4, jp, hL[bh]], ":"))) :+ StringEntry(cX(), makeString(ex._6, "_"))) :+ StringEntry(cY(cZ), makeString(ex._10, "_"))) :+ StringEntry(bG(z), makeString([cZ, "L", kh], "_"))) :+ ScriptTransfer(addressFromStringValue(b), 1, bm)), kh)
1986- }
1987- }
1988-
1989-
1990-func kk (b,jQ) = jN("M", 3, "SSSS", b, jQ, 0)
1991-
1992-
1993-func kl (b,jQ) = jN("L", 4, "SMM", b, jQ, (ck * 4))
1994-
1995-
1996-func km (b,jQ) = jN("XL", 5, "SSSML", b, jQ, (ck * 47))
1997-
1998-
1999-func kn (b,jQ) = jN("XXL", 6, "LXL", b, jQ, (ck * 54))
2000-
2001-
2002-func ko (b,jQ) = {
2003- let ci = size(jQ)
2004- if ((4 == ci))
2005- then kk(b, jQ)
2006- else if ((3 == ci))
2007- then kl(b, jQ)
2008- else if ((5 == ci))
2009- then km(b, jQ)
2010- else if ((2 == ci))
2011- then kn(b, jQ)
1987+ else (kk - ey._8))) :+ IntegerEntry(dL(), (ik + 1))) :+ il) :+ StringEntry(dO(kh), ki)) :+ StringEntry(bl(ki), b)) :+ StringEntry(dR(kh), b)) :+ IntegerEntry(bp(aC, ki), ey._2)) :+ IntegerEntry(bv(ki), aj)) :+ IntegerEntry(dQ(ki, b), aj)) :+ StringEntry(hj, makeString([hM[be], ey._4, jq, hM[bh]], ":"))) :+ StringEntry(cY(), makeString(ey._6, "_"))) :+ StringEntry(cZ(da), makeString(ey._10, "_"))) :+ StringEntry(bG(z), makeString([da, "L", ki], "_"))) :+ ScriptTransfer(addressFromStringValue(b), 1, bm)), ki)
1988+ }
1989+ }
1990+
1991+
1992+func kl (b,jR) = jO("M", 3, "SSSS", b, jR, 0)
1993+
1994+
1995+func km (b,jR) = jO("L", 4, "SMM", b, jR, (cl * 4))
1996+
1997+
1998+func kn (b,jR) = jO("XL", 5, "SSSML", b, jR, (cl * 47))
1999+
2000+
2001+func ko (b,jR) = jO("XXL", 6, "LXL", b, jR, (cl * 54))
2002+
2003+
2004+func kp (b,jR) = {
2005+ let cj = size(jR)
2006+ if ((4 == cj))
2007+ then kl(b, jR)
2008+ else if ((3 == cj))
2009+ then km(b, jR)
2010+ else if ((5 == cj))
2011+ then kn(b, jR)
2012+ else if ((2 == cj))
2013+ then ko(b, jR)
20122014 else throw("Unknown merge")
20132015 }
20142016
20152017
2016-func kp (gf) = if (if ((gf.originCaller != cK))
2017- then valueOrElse(getBoolean(dl()), false)
2018+func kq (gg) = if (if ((gg.originCaller != cL))
2019+ then valueOrElse(getBoolean(dm()), false)
20182020 else false)
20192021 then throw("Contracts are under maintenance")
2020- else StringEntry(dm(toString(gf.originCaller)), toBase58String(gf.transactionId))
2021-
2022-
2023-@Callable(gf)
2024-func constructorV1 (kq) = if ((gf.caller != this))
2022+ else StringEntry(dn(toString(gg.originCaller)), toBase58String(gg.transactionId))
2023+
2024+
2025+@Callable(gg)
2026+func constructorV1 (kr) = if ((gg.caller != this))
20252027 then throw("Permission denied")
2026- else [StringEntry(cE(), kq)]
2027-
2028-
2029-
2030-@Callable(gf)
2031-func setBlocked (kr) = if ((gf.caller != this))
2028+ else [StringEntry(cF(), kr)]
2029+
2030+
2031+
2032+@Callable(gg)
2033+func setBlocked (ks) = if ((gg.caller != this))
20322034 then throw("permission denied")
2033- else [BooleanEntry(dl(), kr)]
2034-
2035-
2036-
2037-@Callable(gf)
2035+ else [BooleanEntry(dm(), ks)]
2036+
2037+
2038+
2039+@Callable(gg)
20382040 func stakeLand () = {
2039- let ks = kp(gf)
2040- if ((size(gf.payments) != 1))
2041+ let kt = kq(gg)
2042+ if ((size(gg.payments) != 1))
20412043 then throw("Exactly one payment required")
20422044 else {
2043- let kt = value(gf.payments[0])
2044- let bm = value(kt.assetId)
2045- let cw = toString(gf.caller)
2046- if ((kt.amount != 1))
2045+ let ku = value(gg.payments[0])
2046+ let bm = value(ku.assetId)
2047+ let cx = toString(gg.caller)
2048+ if ((ku.amount != 1))
20472049 then throw((("NFT " + aA) + " token should be attached as payment"))
20482050 else {
2049- let iP = value(assetInfo(bm))
2050- if ((iP.issuer != this))
2051+ let iQ = value(assetInfo(bm))
2052+ if ((iQ.issuer != this))
20512053 then throw("Unknown issuer of token")
2052- else if (!(contains(iP.name, aA)))
2054+ else if (!(contains(iQ.name, aA)))
20532055 then throw((("Only NFT " + aA) + " tokens are accepted"))
20542056 else {
2055- let ku = drop(iP.name, 4)
2056- let dO = if (contains(ku, "XXL"))
2057- then dropRight(ku, 3)
2058- else if (contains(ku, "XL"))
2059- then dropRight(ku, 2)
2060- else dropRight(ku, 1)
2061- if (!(isDefined(parseInt(dO))))
2062- then throw(("Cannot parse land number from " + iP.name))
2057+ let kv = drop(iQ.name, 4)
2058+ let dP = if (contains(kv, "XXL"))
2059+ then dropRight(kv, 3)
2060+ else if (contains(kv, "XL"))
2061+ then dropRight(kv, 2)
2062+ else dropRight(kv, 1)
2063+ if (!(isDefined(parseInt(dP))))
2064+ then throw(("Cannot parse land number from " + iQ.name))
20632065 else {
20642066 let O = toBase58String(bm)
2065- let iQ = bo(O)
2066- if (isDefined(getInteger(iQ)))
2067- then throw((("NFT " + iP.name) + " is already staked"))
2067+ let iR = bo(O)
2068+ if (isDefined(getInteger(iR)))
2069+ then throw((("NFT " + iQ.name) + " is already staked"))
20682070 else {
2069- let iT = split(iP.description, "_")
2070- let gb = gh(iT[cR])
2071- let iF = di(iT[cQ])
2072- let hw = (iF / cp)
2073- let ew = gg(gb, hw, 1)
2074- let kv = cY(iT[cS])
2075- let kf = split(valueOrElse(getString(kv), "0_0_0_0_0_0"), "_")
2076- let kw = makeString(fZ(kf, gb, hw, 1), "_")
2077- let kb = da(cw)
2078- let kc = getString(kb)
2079- let jY = if (isDefined(kc))
2080- then split_51C(value(kc), "_")
2071+ let iU = split(iQ.description, "_")
2072+ let gc = gi(iU[cS])
2073+ let iG = dj(iU[cR])
2074+ let hx = (iG / cq)
2075+ let ex = gh(gc, hx, 1)
2076+ let kw = cZ(iU[cT])
2077+ let kg = split(valueOrElse(getString(kw), "0_0_0_0_0_0"), "_")
2078+ let kx = makeString(ga(kg, gc, hx, 1), "_")
2079+ let kc = db(cx)
2080+ let kd = getString(kc)
2081+ let jZ = if (isDefined(kd))
2082+ then split_51C(value(kd), "_")
20812083 else nil
2082- if (containsElement(jY, O))
2084+ if (containsElement(jZ, O))
20832085 then throw(("Your staked lands already contain " + O))
2084- else if ((size(jY) >= aE))
2086+ else if ((size(jZ) >= aE))
20852087 then throw((("Your already staked max (" + toString(aE)) + ") lands"))
20862088 else {
2087- let hx = valueOrElse(getInteger(bv(O)), 0)
2088- let ki = db(cw)
2089- let kx = valueOrElse(getInteger(ki), 0)
2090- let ky = invoke(cN, "onStakeUnstakeLand", [cw], nil)
2091- $Tuple2([IntegerEntry(iQ, lastBlock.timestamp), IntegerEntry(br(aA, O, cw), lastBlock.timestamp), StringEntry(kb, makeString_11C((jY :+ O), "_")), IntegerEntry(ki, (kx + iF)), StringEntry(bl(O), cw), StringEntry(dQ(dO), cw), IntegerEntry(dP(O, cw), hx), StringEntry(cX(), ew), StringEntry(kv, kw), ks], ky)
2089+ let hy = valueOrElse(getInteger(bv(O)), 0)
2090+ let kj = dc(cx)
2091+ let ky = valueOrElse(getInteger(kj), 0)
2092+ let kz = invoke(cO, "onStakeUnstakeLand", [cx], nil)
2093+ $Tuple2([IntegerEntry(iR, lastBlock.timestamp), IntegerEntry(br(aA, O, cx), lastBlock.timestamp), StringEntry(kc, makeString_11C((jZ :+ O), "_")), IntegerEntry(kj, (ky + iG)), StringEntry(bl(O), cx), StringEntry(dR(dP), cx), IntegerEntry(dQ(O, cx), hy), StringEntry(cY(), ex), StringEntry(kw, kx), kt], kz)
20922094 }
20932095 }
20942096 }
20952097 }
20962098 }
20972099 }
20982100 }
20992101
21002102
21012103
2102-@Callable(gf)
2103-func unstakeLand (iL) = {
2104- let ks = kp(gf)
2105- if ((size(gf.payments) != 0))
2104+@Callable(gg)
2105+func unstakeLand (iM) = {
2106+ let kt = kq(gg)
2107+ if ((size(gg.payments) != 0))
21062108 then throw("No payments required")
21072109 else {
2108- let b = toString(gf.caller)
2109- let fv = iJ(b, dV, iL)
2110- let O = fv._2
2111- let iT = fv._3
2112- let kb = da(b)
2113- let gb = gh(iT[cR])
2114- let iF = di(iT[cQ])
2115- let hw = (iF / cp)
2116- let ew = gg(gb, hw, -1)
2117- let kv = cY(iT[cS])
2118- let kf = split(valueOrElse(getString(kv), "0_0_0_0_0_0"), "_")
2119- let kw = makeString(fZ(kf, gb, hw, -1), "_")
2120- let jq = jg(b, O, iF, dV)
2121- let jY = split_51C(valueOrElse(getString(kb), ""), "_")
2122- let cJ = indexOf(jY, O)
2123- if (!(isDefined(cJ)))
2110+ let b = toString(gg.caller)
2111+ let fw = iK(b, dW, iM)
2112+ let O = fw._2
2113+ let iU = fw._3
2114+ let kc = db(b)
2115+ let gc = gi(iU[cS])
2116+ let iG = dj(iU[cR])
2117+ let hx = (iG / cq)
2118+ let ex = gh(gc, hx, -1)
2119+ let kw = cZ(iU[cT])
2120+ let kg = split(valueOrElse(getString(kw), "0_0_0_0_0_0"), "_")
2121+ let kx = makeString(ga(kg, gc, hx, -1), "_")
2122+ let jr = jh(b, O, iG, dW)
2123+ let jZ = split_51C(valueOrElse(getString(kc), ""), "_")
2124+ let cK = indexOf(jZ, O)
2125+ if (!(isDefined(cK)))
21242126 then throw(("Your staked lands don't contain " + O))
21252127 else {
21262128 let av = lastBlock.timestamp
2127- let kz = valueOrElse(getInteger(cM, bH(b)), 0)
2128- if ((kz >= av))
2129- then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(kz)))
2129+ let kA = valueOrElse(getInteger(cN, bH(b)), 0)
2130+ if ((kA >= av))
2131+ then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(kA)))
21302132 else {
2131- let kA = (valueOrElse(getInteger(cN, a(b)), 0) + cl)
2132- if ((kA > av))
2133- then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(kA)))
2133+ let kB = (valueOrElse(getInteger(cO, a(b)), 0) + cm)
2134+ if ((kB > av))
2135+ then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(kB)))
21342136 else {
2135- let ki = db(b)
2136- let kj = valueOrElse(getInteger(ki), 0)
2137- let kB = if ((iF > kj))
2137+ let kj = dc(b)
2138+ let kk = valueOrElse(getInteger(kj), 0)
2139+ let kC = if ((iG > kk))
21382140 then 0
2139- else (kj - iF)
2140- let ky = invoke(cN, "onStakeUnstakeLand", [b], nil)
2141- $Tuple2([ScriptTransfer(gf.caller, 1, fromBase58String(O)), DeleteEntry(bo(O)), DeleteEntry(br(aA, O, b)), StringEntry(cX(), ew), StringEntry(kv, kw), StringEntry(jq._2, makeString(jq._3, ":")), if ((size(jY) > 1))
2142- then StringEntry(kb, makeString_11C(removeByIndex(jY, value(cJ)), "_"))
2143- else DeleteEntry(kb), IntegerEntry(ki, kB), ks], ky)
2141+ else (kk - iG)
2142+ let kz = invoke(cO, "onStakeUnstakeLand", [b], nil)
2143+ $Tuple2([ScriptTransfer(gg.caller, 1, fromBase58String(O)), DeleteEntry(bo(O)), DeleteEntry(br(aA, O, b)), StringEntry(cY(), ex), StringEntry(kw, kx), StringEntry(jr._2, makeString(jr._3, ":")), if ((size(jZ) > 1))
2144+ then StringEntry(kc, makeString_11C(removeByIndex(jZ, value(cK)), "_"))
2145+ else DeleteEntry(kc), IntegerEntry(kj, kC), kt], kz)
21442146 }
21452147 }
21462148 }
21472149 }
21482150 }
21492151
21502152
21512153
2152-@Callable(gf)
2154+@Callable(gg)
21532155 func stakeDuck () = {
2154- let ks = kp(gf)
2155- if ((size(gf.payments) != 1))
2156+ let kt = kq(gg)
2157+ if ((size(gg.payments) != 1))
21562158 then throw("Exactly one payment required")
21572159 else {
2158- let kt = value(gf.payments[0])
2159- let bm = value(kt.assetId)
2160- let cw = toString(gf.caller)
2161- if ((kt.amount != 1))
2160+ let ku = value(gg.payments[0])
2161+ let bm = value(ku.assetId)
2162+ let cx = toString(gg.caller)
2163+ if ((ku.amount != 1))
21622164 then throw((("NFT " + aB) + " token should be attached as payment"))
21632165 else {
2164- let iP = value(assetInfo(bm))
2165- if (if ((iP.issuer != dt))
2166- then (iP.issuer != du)
2166+ let iQ = value(assetInfo(bm))
2167+ if (if ((iQ.issuer != du))
2168+ then (iQ.issuer != dv)
21672169 else false)
21682170 then throw((("Unknown issuer of " + aB) + " token"))
2169- else if (!(contains(iP.name, aB)))
2171+ else if (!(contains(iQ.name, aB)))
21702172 then throw((("Only NFT " + aB) + " tokens are accepted"))
21712173 else {
2172- let kC = toBase58String(bm)
2173- let iQ = bo(kC)
2174- if (isDefined(getInteger(iQ)))
2175- then throw((("NFT " + iP.name) + " is already staked"))
2176- else if (isDefined(getString(bE(cw))))
2177- then throw(("You already staked one duck: " + iP.name))
2178- else if (jM(kC))
2174+ let kD = toBase58String(bm)
2175+ let iR = bo(kD)
2176+ if (isDefined(getInteger(iR)))
2177+ then throw((("NFT " + iQ.name) + " is already staked"))
2178+ else if (isDefined(getString(bE(cx))))
2179+ then throw(("You already staked one duck: " + iQ.name))
2180+ else if (jN(kD))
21792181 then throw("stakeDuck_checkTournament")
21802182 else {
2181- let kD = bG(kC)
2182- let bY = getString(kD)
2183- let hi = bF(kC)
2184- let kE = getString(hi)
2185- let iy = y(kC)
2186- let iz = ae(valueOrElse(getInteger(C(kC)), 0))
2187- let kF = valueOrElse(getInteger(iy), iz)
2188- ([IntegerEntry(iQ, lastBlock.timestamp), IntegerEntry(br(aB, toBase58String(bm), cw), lastBlock.timestamp), StringEntry(bD(kC), cw), StringEntry(bE(cw), kC)] ++ (if (isDefined(bY))
2183+ let kE = bG(kD)
2184+ let bY = getString(kE)
2185+ let hj = bF(kD)
2186+ let kF = getString(hj)
2187+ let iz = y(kD)
2188+ let iA = ae(valueOrElse(getInteger(C(kD)), 0))
2189+ let kG = valueOrElse(getInteger(iz), iA)
2190+ ([IntegerEntry(iR, lastBlock.timestamp), IntegerEntry(br(aB, toBase58String(bm), cx), lastBlock.timestamp), StringEntry(bD(kD), cx), StringEntry(bE(cx), kD)] ++ (if (isDefined(bY))
21892191 then nil
2190- else ([StringEntry(kD, aI)] ++ (if (isDefined(kE))
2192+ else ([StringEntry(kE, aI)] ++ (if (isDefined(kF))
21912193 then nil
2192- else (([StringEntry(hi, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(iy, kF)) :+ ks)))))
2194+ else (([StringEntry(hj, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(iz, kG)) :+ kt)))))
21932195 }
21942196 }
21952197 }
21962198 }
21972199 }
21982200
21992201
22002202
2201-@Callable(gf)
2202-func unstakeDuck (kC) = {
2203- let ks = kp(gf)
2204- if ((size(gf.payments) != 0))
2203+@Callable(gg)
2204+func unstakeDuck (kD) = {
2205+ let kt = kq(gg)
2206+ if ((size(gg.payments) != 0))
22052207 then throw("No payments required")
22062208 else {
2207- let bm = fromBase58String(kC)
2208- let cw = toString(gf.caller)
2209- let iP = value(assetInfo(bm))
2210- let iQ = bo(kC)
2211- if (!(isDefined(getInteger(iQ))))
2212- then throw((("NFT " + iP.name) + " is not staked"))
2213- else if (!(isDefined(getString(bE(cw)))))
2214- then throw((("The duck " + iP.name) + " is not staked"))
2209+ let bm = fromBase58String(kD)
2210+ let cx = toString(gg.caller)
2211+ let iQ = value(assetInfo(bm))
2212+ let iR = bo(kD)
2213+ if (!(isDefined(getInteger(iR))))
2214+ then throw((("NFT " + iQ.name) + " is not staked"))
2215+ else if (!(isDefined(getString(bE(cx)))))
2216+ then throw((("The duck " + iQ.name) + " is not staked"))
22152217 else {
2216- let iS = valueOrErrorMessage(getString(bD(kC)), (("NFT " + iP.name) + " is orphaned"))
2217- if ((iS != cw))
2218+ let iT = valueOrErrorMessage(getString(bD(kD)), (("NFT " + iQ.name) + " is orphaned"))
2219+ if ((iT != cx))
22182220 then throw("Staked NFT is not yours")
2219- else if (jM(kC))
2221+ else if (jN(kD))
22202222 then throw("unstakeDuck_checkTournament")
22212223 else {
2222- let iy = y(kC)
2223- let iz = ae(valueOrElse(getInteger(C(kC)), 0))
2224- let aq = valueOrElse(getInteger(iy), iz)
2225- if ((iz > aq))
2226- then throw((("Please heal your duck to " + toString(iz)) + "hp before unstaking"))
2227- else [ScriptTransfer(gf.caller, 1, bm), DeleteEntry(iQ), DeleteEntry(iy), DeleteEntry(bG(kC)), DeleteEntry(bD(kC)), DeleteEntry(br(aB, kC, cw)), DeleteEntry(bE(cw)), ks]
2224+ let iz = y(kD)
2225+ let iA = ae(valueOrElse(getInteger(C(kD)), 0))
2226+ let aq = valueOrElse(getInteger(iz), iA)
2227+ if ((iA > aq))
2228+ then throw((("Please heal your duck to " + toString(iA)) + "hp before unstaking"))
2229+ else [ScriptTransfer(gg.caller, 1, bm), DeleteEntry(iR), DeleteEntry(iz), DeleteEntry(bG(kD)), DeleteEntry(bD(kD)), DeleteEntry(br(aB, kD, cx)), DeleteEntry(bE(cx)), kt]
22282230 }
22292231 }
22302232 }
22312233 }
22322234
22332235
22342236
2235-@Callable(gf)
2236-func claimRes (ed,kG) = {
2237- let ks = kp(gf)
2238- if ((size(gf.payments) != 0))
2237+@Callable(gg)
2238+func claimRes (ee,kH) = {
2239+ let kt = kq(gg)
2240+ if ((size(gg.payments) != 0))
22392241 then throw("No payments required")
22402242 else {
2241- let b = toString(gf.originCaller)
2242- let eE = iU(b, ed, dV, kG)
2243+ let b = toString(gg.originCaller)
2244+ let eF = iV(b, ee, dW, kH)
22432245 let z = valueOrErrorMessage(getString(bE(b)), "You don't have a duck staked")
2244- $Tuple2(((((eE._1 ++ jw(z, fraction(S, ed, co))._1) :+ StringEntry(eE._2, makeString(eE._3, ":"))) :+ StringEntry(eE._4, makeString(eE._5, ":"))) :+ ks), eE._3[bf])
2245- }
2246- }
2247-
2248-
2249-
2250-@Callable(gf)
2251-func claimResToWH (ed,kG) = {
2252- let ks = kp(gf)
2253- if ((size(gf.payments) != 0))
2246+ $Tuple2(((((eF._1 ++ jx(z, fraction(S, ee, cp))._1) :+ StringEntry(eF._2, makeString(eF._3, ":"))) :+ StringEntry(eF._4, makeString(eF._5, ":"))) :+ kt), eF._3[bf])
2247+ }
2248+ }
2249+
2250+
2251+
2252+@Callable(gg)
2253+func claimResToWH (ee,kH) = {
2254+ let kt = kq(gg)
2255+ if ((size(gg.payments) != 0))
22542256 then throw("No payments required")
22552257 else {
2256- let b = toString(gf.originCaller)
2257- let eE = iU(b, ed, dU, kG)
2258- $Tuple2(((((eE._1 ++ jC(b, fraction(S, ed, co))._1) :+ StringEntry(eE._2, makeString(eE._3, ":"))) :+ StringEntry(eE._4, makeString(eE._5, ":"))) :+ ks), eE._5[aW])
2259- }
2260- }
2261-
2262-
2263-
2264-@Callable(gf)
2265-func flight (in,io) = {
2266- let ks = kp(gf)
2267- if ((size(gf.payments) != 0))
2258+ let b = toString(gg.originCaller)
2259+ let eF = iV(b, ee, dV, kH)
2260+ $Tuple2(((((eF._1 ++ jD(b, fraction(S, ee, cp))._1) :+ StringEntry(eF._2, makeString(eF._3, ":"))) :+ StringEntry(eF._4, makeString(eF._5, ":"))) :+ kt), eF._5[aW])
2261+ }
2262+ }
2263+
2264+
2265+
2266+@Callable(gg)
2267+func flight (io,ip) = {
2268+ let kt = kq(gg)
2269+ if ((size(gg.payments) != 0))
22682270 then throw("No payments required")
22692271 else {
2270- let bI = toString(gf.caller)
2271- let gK = im(bI, in, io)
2272- let is = gK._1
2273- let z = gK._2
2274- let kD = bG(z)
2275- let iN = valueOrElse(getString(kD), aI)
2276- let iu = gK._4
2277- if ((iu == iN))
2272+ let bI = toString(gg.caller)
2273+ let gL = in(bI, io, ip)
2274+ let it = gL._1
2275+ let z = gL._2
2276+ let kE = bG(z)
2277+ let iO = valueOrElse(getString(kE), aI)
2278+ let iv = gL._4
2279+ if ((iv == iO))
22782280 then throw("You can't fly to the same location")
22792281 else {
2280- let kH = split(iu, "_")
2281- let kI = (kH[bj] == "T")
2282- let fS = E(z)
2283- let kJ = valueOrElse(getString(fS), ",;,_,;,_,;,_,;,_,;,_,;,")
2284- let kK = eF(kJ, gK._5)
2285- let kL = kK._1
2286- let kM = kK._2
2287- let kN = if (!(bX(cO, iN)))
2288- then if (kI)
2289- then throw(((("Cheat attempt: oldLoc=" + iN) + ", newLoc=") + iu))
2290- else if ((is > 0))
2291- then iu
2292- else iN
2293- else if (!(bX(cO, iu)))
2282+ let kI = split(iv, "_")
2283+ let kJ = (kI[bj] == "T")
2284+ let fT = E(z)
2285+ let kK = valueOrElse(getString(fT), ",;,_,;,_,;,_,;,_,;,_,;,")
2286+ let kL = eG(kK, gL._5)
2287+ let kM = kL._1
2288+ let kN = kL._2
2289+ let kO = if (!(bX(cP, iO)))
2290+ then if (kJ)
2291+ then throw(((("Cheat attempt: oldLoc=" + iO) + ", newLoc=") + iv))
2292+ else if ((it > 0))
2293+ then iv
2294+ else iO
2295+ else if (!(bX(cP, iv)))
22942296 then throw("Your duck is taking part in the tournament")
22952297 else {
2296- let kO = parseIntValue(kH[bk])
2297- let kP = split(iN, "_")
2298- let bZ = valueOrElse(getInteger(cO, bK), 0)
2299- if ((kO != (parseIntValue(kP[bk]) + 1)))
2300- then throw(((("Cheat attempt: oldLoc=" + iN) + ", newLoc=") + iu))
2301- else if ((is > 0))
2298+ let kP = parseIntValue(kI[bk])
2299+ let kQ = split(iO, "_")
2300+ let bZ = valueOrElse(getInteger(cP, bK), 0)
2301+ if ((kP != (parseIntValue(kQ[bk]) + 1)))
2302+ then throw(((("Cheat attempt: oldLoc=" + iO) + ", newLoc=") + iv))
2303+ else if ((it > 0))
23022304 then {
2303- let kQ = valueOrElse(getInteger(cO, bO(bZ, z)), 0)
2304- let kR = if ((kO > kQ))
2305- then invoke(cO, "saveDuckResult", [z, kO], nil)
2305+ let kR = valueOrElse(getInteger(cP, bO(bZ, z)), 0)
2306+ let kS = if ((kP > kR))
2307+ then invoke(cP, "saveDuckResult", [z, kP], nil)
23062308 else unit
2307- if ((kR == kR))
2308- then iu
2309+ if ((kS == kS))
2310+ then iv
23092311 else throw("Strict value is not equal to itself.")
23102312 }
2311- else iN
2313+ else iO
23122314 }
2313- $Tuple2(([StringEntry(kD, kN), StringEntry(fS, kL), IntegerEntry(y(z), is), ks] ++ (if (kM)
2315+ $Tuple2(([StringEntry(kE, kO), StringEntry(fT, kM), IntegerEntry(y(z), it), kt] ++ (if (kN)
23142316 then [StringEntry(K(z), "0_0_0_0_0")]
2315- else (nil ++ jw(z, if ((is > 0))
2317+ else (nil ++ jx(z, if ((it > 0))
23162318 then T
2317- else U)._1))), gK._3)
2319+ else U)._1))), gL._3)
23182320 }
23192321 }
23202322 }
23212323
23222324
23232325
2324-@Callable(gf)
2325-func heal (kS,kT,kU) = {
2326- let ks = kp(gf)
2327- if (if (if ((0 > kS))
2328- then true
2329- else (0 > kT))
2326+@Callable(gg)
2327+func heal (kT,kU,kV) = {
2328+ let kt = kq(gg)
2329+ if (if (if ((0 > kT))
23302330 then true
23312331 else (0 > kU))
2332+ then true
2333+ else (0 > kV))
23322334 then throw("Quantity cannot be negative")
23332335 else {
2334- let z = valueOrErrorMessage(getString(bE(toString(gf.caller))), "You don't have a duck staked")
2335- if (jM(z))
2336+ let z = valueOrErrorMessage(getString(bE(toString(gg.caller))), "You don't have a duck staked")
2337+ if (jN(z))
23362338 then throw("heal_checkTournament")
23372339 else {
2338- let kV = [kS, kT, kU]
2339- let iy = y(z)
2340- let iz = ae(valueOrElse(getInteger(C(z)), 0))
2341- let kW = valueOrElse(getInteger(iy), iz)
2342- if ((kW >= iz))
2343- then throw((("HP should be < " + toString(iz)) + " to heal"))
2340+ let kW = [kT, kU, kV]
2341+ let iz = y(z)
2342+ let iA = ae(valueOrElse(getInteger(C(z)), 0))
2343+ let kX = valueOrElse(getInteger(iz), iA)
2344+ if ((kX >= iA))
2345+ then throw((("HP should be < " + toString(iA)) + " to heal"))
23442346 else {
2345- let hi = bF(z)
2346- let hL = hh(hi)
2347- let kX = if ((hL[bh] == ""))
2347+ let hj = bF(z)
2348+ let hM = hi(hj)
2349+ let kY = if ((hM[bh] == ""))
23482350 then nil
2349- else split_4C(hL[bh], "_")
2350- func kY (em,cd) = {
2351- let dg = em._2
2352- let gB = if ((size(kX) > dg))
2353- then parseIntValue(kX[dg])
2351+ else split_4C(hM[bh], "_")
2352+ func kZ (en,cd) = {
2353+ let dh = en._2
2354+ let gC = if ((size(kY) > dh))
2355+ then parseIntValue(kY[dh])
23542356 else 0
2355- if ((3 > dg))
2357+ if ((3 > dh))
23562358 then {
2357- let kZ = kV[dg]
2358- if ((kZ > gB))
2359- then throw(((("You have only " + toString(gB)) + " of ") + aL[dg]))
2360- else $Tuple3((em._1 :+ toString((gB - kZ))), (dg + 1), (em._3 + (parseIntValue(split(cd, "_")[aR]) * kZ)))
2359+ let la = kW[dh]
2360+ if ((la > gC))
2361+ then throw(((("You have only " + toString(gC)) + " of ") + aL[dh]))
2362+ else $Tuple3((en._1 :+ toString((gC - la))), (dh + 1), (en._3 + (parseIntValue(split(cd, "_")[aR]) * la)))
23612363 }
2362- else $Tuple3((em._1 :+ toString(gB)), (dg + 1), em._3)
2364+ else $Tuple3((en._1 :+ toString(gC)), (dh + 1), en._3)
23632365 }
23642366
2365- let eE = {
2366- let eo = aP
2367- let ep = size(eo)
2368- let eq = $Tuple3(nil, 0, 0)
2369- func er (es,et) = if ((et >= ep))
2370- then es
2371- else kY(es, eo[et])
2372-
2373- func eu (es,et) = if ((et >= ep))
2374- then es
2367+ let eF = {
2368+ let ep = aP
2369+ let eq = size(ep)
2370+ let er = $Tuple3(nil, 0, 0)
2371+ func es (et,eu) = if ((eu >= eq))
2372+ then et
2373+ else kZ(et, ep[eu])
2374+
2375+ func ev (et,eu) = if ((eu >= eq))
2376+ then et
23752377 else throw("List size exceeds 50")
23762378
2377- eu(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(eq, 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)
2379+ ev(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(er, 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)
23782380 }
2379- let la = min([iz, (kW + eE._3)])
2380- $Tuple2(([IntegerEntry(iy, la), StringEntry(hi, makeString_2C([hL[be], hL[bf], hL[bg], makeString(eE._1, "_")], ":")), ks] ++ jw(z, (ab * ((kS + kT) + kU)))._1), la)
2381+ let lb = min([iA, (kX + eF._3)])
2382+ $Tuple2(([IntegerEntry(iz, lb), StringEntry(hj, makeString_2C([hM[be], hM[bf], hM[bg], makeString(eF._1, "_")], ":")), kt] ++ jx(z, (ab * ((kT + kU) + kV)))._1), lb)
23812383 }
23822384 }
23832385 }
23842386 }
23852387
23862388
23872389
2388-@Callable(gf)
2390+@Callable(gg)
23892391 func healES () = {
2390- let ks = kp(gf)
2391- if ((size(gf.payments) != 1))
2392+ let kt = kq(gg)
2393+ if ((size(gg.payments) != 1))
23922394 then throw("Exactly one payment required")
23932395 else {
2394- let kt = value(gf.payments[0])
2395- if ((kt.assetId != ch))
2396+ let ku = value(gg.payments[0])
2397+ if ((ku.assetId != ci))
23962398 then throw("Allowed USDT payment only!")
23972399 else {
2398- let z = valueOrErrorMessage(getString(bE(toString(gf.caller))), "You don't have a duck staked")
2399- if (jM(z))
2400+ let z = valueOrErrorMessage(getString(bE(toString(gg.caller))), "You don't have a duck staked")
2401+ if (jN(z))
24002402 then throw("healES_checkTournament")
24012403 else {
2402- let iy = y(z)
2403- let iz = ae(valueOrElse(getInteger(C(z)), 0))
2404- let kW = valueOrElse(getInteger(iy), iz)
2405- if ((kW > 0))
2404+ let iz = y(z)
2405+ let iA = ae(valueOrElse(getInteger(C(z)), 0))
2406+ let kX = valueOrElse(getInteger(iz), iA)
2407+ if ((kX > 0))
24062408 then throw("HP should be 0 to call Emergency Service")
24072409 else {
2408- let hi = bF(z)
2409- let hL = hh(hi)
2410- let kX = if ((hL[bh] == ""))
2410+ let hj = bF(z)
2411+ let hM = hi(hj)
2412+ let kY = if ((hM[bh] == ""))
24112413 then nil
2412- else split_4C(hL[bh], "_")
2413- let lb = if ((size(kX) > 0))
2414- then parseIntValue(kX[0])
2414+ else split_4C(hM[bh], "_")
2415+ let lc = if ((size(kY) > 0))
2416+ then parseIntValue(kY[0])
24152417 else 0
2416- let lc = if ((size(kX) > 1))
2417- then parseIntValue(kX[1])
2418+ let ld = if ((size(kY) > 1))
2419+ then parseIntValue(kY[1])
24182420 else 0
2419- let ld = if ((size(kX) > 2))
2420- then parseIntValue(kX[2])
2421+ let le = if ((size(kY) > 2))
2422+ then parseIntValue(kY[2])
24212423 else 0
2422- if (if (if ((lb > 0))
2423- then true
2424- else (lc > 0))
2424+ if (if (if ((lc > 0))
24252425 then true
24262426 else (ld > 0))
2427+ then true
2428+ else (le > 0))
24272429 then throw("You have to use own Medical Kit")
24282430 else {
2429- let le = getString(cL, bJ())
2430- let lf = if (isDefined(le))
2431- then split_4C(value(le), "_")
2431+ let lf = getString(cM, bJ())
2432+ let lg = if (isDefined(lf))
2433+ then split_4C(value(lf), "_")
24322434 else nil
2433- let lg = if ((size(lf) > 0))
2434- then parseIntValue(lf[0])
2435+ let lh = if ((size(lg) > 0))
2436+ then parseIntValue(lg[0])
24352437 else 0
2436- if ((0 >= lg))
2438+ if ((0 >= lh))
24372439 then throw("There are no Medical Kits L1 at Emergency Service storage")
24382440 else {
2439- let la = (kW + parseIntValue(split(aP[0], "_")[aR]))
2440- let lh = makeString([toString((lg - 1)), removeByIndex(lf, 0)], "_")
2441+ let lb = (kX + parseIntValue(split(aP[0], "_")[aR]))
2442+ let li = makeString([toString((lh - 1)), removeByIndex(lg, 0)], "_")
24412443 let cd = split(aP[0], "_")
2442- let li = cc(cd)
2443- let lj = fraction((li * aK), aJ, (co * aU))
2444- if ((kt.amount != lj))
2445- then throw(("Payment attached should be " + toString(lj)))
2444+ let lj = cc(cd)
2445+ let lk = fraction((lj * aK), aJ, (cp * aU))
2446+ if ((ku.amount != lk))
2447+ then throw(("Payment attached should be " + toString(lk)))
24462448 else {
2447- let eE = dc(invoke(cL, "updateEsStorage", [lh], [AttachedPayment(ch, lj)]))
2448- $Tuple2(([IntegerEntry(iy, la), ks] ++ jw(z, V)._1), eE)
2449+ let eF = dd(invoke(cM, "updateEsStorage", [li], [AttachedPayment(ci, lk)]))
2450+ $Tuple2(([IntegerEntry(iz, lb), kt] ++ jx(z, V)._1), eF)
24492451 }
24502452 }
24512453 }
24522454 }
24532455 }
24542456 }
24552457 }
24562458 }
24572459
24582460
24592461
2460-@Callable(gf)
2461-func updateBackpack (z,lk) = if ((gf.caller != cL))
2462+@Callable(gg)
2463+func updateBackpack (z,ll) = if ((gg.caller != cM))
24622464 then throw("permission denied")
2463- else $Tuple2([StringEntry(bF(z), lk)], lk)
2464-
2465-
2466-
2467-@Callable(gf)
2465+ else $Tuple2([StringEntry(bF(z), ll)], ll)
2466+
2467+
2468+
2469+@Callable(gg)
24682470 func commitForRandom () = {
2469- let ks = kp(gf)
2470- let ll = (height + cV)
2471- let b = toString(gf.caller)
2472- $Tuple2(([IntegerEntry(cW(b), ll)] :+ ks), ll)
2473- }
2474-
2475-
2476-
2477-@Callable(gf)
2478-func awardSLand (cw) = if ((gf.caller != cO))
2471+ let kt = kq(gg)
2472+ let lm = (height + cW)
2473+ let b = toString(gg.caller)
2474+ $Tuple2(([IntegerEntry(cX(b), lm)] :+ kt), lm)
2475+ }
2476+
2477+
2478+
2479+@Callable(gg)
2480+func awardSLand (cx) = if ((gg.caller != cP))
24792481 then throw("Access denied")
2480- else if ((size(gf.payments) != 0))
2482+ else if ((size(gg.payments) != 0))
24812483 then throw("No payments required")
24822484 else {
2483- let eE = if(addressFromStringValue(cw), gf.transactionId)
2484- $Tuple2(eE._1, eE._2._1)
2485- }
2486-
2487-
2488-
2489-@Callable(gf)
2485+ let eF = ig(addressFromStringValue(cx), gg.transactionId)
2486+ $Tuple2(eF._1, eF._2._1)
2487+ }
2488+
2489+
2490+
2491+@Callable(gg)
24902492 func buySLand () = {
2491- let ks = kp(gf)
2492- if ((size(gf.payments) != 1))
2493+ let kt = kq(gg)
2494+ if ((size(gg.payments) != 1))
24932495 then throw("Exactly one payment required")
24942496 else {
2495- let kt = value(gf.payments[0])
2496- if ((kt.assetId != ch))
2497+ let ku = value(gg.payments[0])
2498+ if ((ku.assetId != ci))
24972499 then throw("Allowed USDT payment only!")
2498- else if ((kt.amount != dC))
2499- then throw(("Payment attached should be " + toString(dC)))
2500+ else if ((ku.amount != dD))
2501+ then throw(("Payment attached should be " + toString(dD)))
25002502 else {
2501- let eE = if(gf.caller, gf.transactionId)
2502- $Tuple2((((eE._1 :+ ScriptTransfer(cL, kt.amount, ch)) ++ jC(toString(gf.caller), X)._1) :+ ks), eE._2._1)
2503+ let eF = ig(gg.caller, gg.transactionId)
2504+ $Tuple2((((eF._1 :+ ScriptTransfer(cM, ku.amount, ci)) ++ jD(toString(gg.caller), X)._1) :+ kt), eF._2._1)
25032505 }
25042506 }
25052507 }
25062508
25072509
25082510
2509-@Callable(gf)
2510-func expedition (in,io) = {
2511- let ks = kp(gf)
2512- if ((size(gf.payments) != 0))
2511+@Callable(gg)
2512+func expedition (io,ip) = {
2513+ let kt = kq(gg)
2514+ if ((size(gg.payments) != 0))
25132515 then throw("No payments required")
25142516 else {
2515- let bI = toString(gf.caller)
2516- let gK = im(bI, in, io)
2517- let z = gK._2
2518- let iy = y(z)
2519- let hi = bF(z)
2520- let hL = hh(hi)
2521- let jn = split(hL[bg], "_")
2522- let jp = makeString(ey(true, jn, dB), "_")
2523- let fS = E(z)
2524- let kJ = valueOrElse(getString(fS), ",;,_,;,_,;,_,;,_,;,_,;,")
2525- let lm = eF(kJ, gK._5)
2526- let kL = lm._1
2527- let kM = lm._2
2528- let ln = if(gf.caller, gf.transactionId)
2529- let il = ln._2._1
2530- let eE = if ((0 >= gK._1))
2531- then $Tuple3([IntegerEntry(iy, 0), StringEntry(fS, kL)], "", 0)
2532- else $Tuple3((ln._1 ++ (if (kM)
2517+ let bI = toString(gg.caller)
2518+ let gL = in(bI, io, ip)
2519+ let z = gL._2
2520+ let iz = y(z)
2521+ let hj = bF(z)
2522+ let hM = hi(hj)
2523+ let jo = split(hM[bg], "_")
2524+ let jq = makeString(ez(true, jo, dC), "_")
2525+ let fT = E(z)
2526+ let kK = valueOrElse(getString(fT), ",;,_,;,_,;,_,;,_,;,_,;,")
2527+ let ln = eG(kK, gL._5)
2528+ let kM = ln._1
2529+ let kN = ln._2
2530+ let lo = ig(gg.caller, gg.transactionId)
2531+ let im = lo._2._1
2532+ let eF = if ((0 >= gL._1))
2533+ then $Tuple3([IntegerEntry(iz, 0), StringEntry(fT, kM)], "", 0)
2534+ else $Tuple3((lo._1 ++ (if (kN)
25332535 then [StringEntry(K(z), "0_0_0_0_0")]
2534- else ((((nil :+ StringEntry(bG(z), makeString([ln._2._2, "L", il], "_"))) :+ IntegerEntry(iy, gK._1)) :+ StringEntry(fS, kL)) :+ StringEntry(hi, makeString([hL[be], hL[bf], jp, hL[bh]], ":"))))), il, gK._3)
2535- if (jM(z))
2536+ else ((((nil :+ StringEntry(bG(z), makeString([lo._2._2, "L", im], "_"))) :+ IntegerEntry(iz, gL._1)) :+ StringEntry(fT, kM)) :+ StringEntry(hj, makeString([hM[be], hM[bf], jq, hM[bh]], ":"))))), im, gL._3)
2537+ if (jN(z))
25362538 then throw("expedition_checkTournament")
2537- else $Tuple2(((eE._1 ++ jw(z, X)._1) :+ ks), $Tuple2(eE._2, eE._3))
2538- }
2539- }
2540-
2541-
2542-
2543-@Callable(gf)
2539+ else $Tuple2(((eF._1 ++ jx(z, X)._1) :+ kt), $Tuple2(eF._2, eF._3))
2540+ }
2541+ }
2542+
2543+
2544+
2545+@Callable(gg)
25442546 func upgradeInfra (O) = {
2545- let ks = kp(gf)
2546- if ((size(gf.payments) != 0))
2547+ let kt = kq(gg)
2548+ if ((size(gg.payments) != 0))
25472549 then throw("No payments required")
25482550 else {
2549- let eE = jh(true, gf.caller, 0, O)
2550- let z = valueOrErrorMessage(getString(bE(toString(gf.caller))), "You don't have a duck staked")
2551- $Tuple2(((eE._1 :+ ks) ++ jw(z, fraction(Y, eE._3, co))._1), eE._2)
2552- }
2553- }
2554-
2555-
2556-
2557-@Callable(gf)
2558-func activateArtifact (lo,lp) = {
2559- let ks = kp(gf)
2560- if ((size(gf.payments) != 0))
2551+ let eF = ji(true, gg.caller, 0, O)
2552+ let z = valueOrErrorMessage(getString(bE(toString(gg.caller))), "You don't have a duck staked")
2553+ $Tuple2(((eF._1 :+ kt) ++ jx(z, fraction(Y, eF._3, cp))._1), eF._2)
2554+ }
2555+ }
2556+
2557+
2558+
2559+@Callable(gg)
2560+func activateArtifact (lp,lq) = {
2561+ let kt = kq(gg)
2562+ if ((size(gg.payments) != 0))
25612563 then throw("No payments required")
25622564 else {
2563- let b = toString(gf.caller)
2564- let eE = {
2565- let ci = lo
2566- if (("PRESALE" == ci))
2567- then jK(b, lp)
2568- else if (("ONBOARD" == ci))
2569- then jD(b)
2565+ let b = toString(gg.caller)
2566+ let eF = {
2567+ let cj = lp
2568+ if (("PRESALE" == cj))
2569+ then jL(b, lq)
2570+ else if (("ONBOARD" == cj))
2571+ then jE(b)
25702572 else throw("Unknown artifact")
25712573 }
2572- (eE :+ ks)
2573- }
2574- }
2575-
2576-
2577-
2578-@Callable(gf)
2579-func mergeLands (jQ) = {
2580- let ks = kp(gf)
2581- if ((size(gf.payments) != 0))
2574+ (eF :+ kt)
2575+ }
2576+ }
2577+
2578+
2579+
2580+@Callable(gg)
2581+func mergeLands (jR) = {
2582+ let kt = kq(gg)
2583+ if ((size(gg.payments) != 0))
25822584 then throw("No payments required")
25832585 else {
2584- let eE = ko(toString(gf.caller), jQ)
2585- $Tuple2(((eE._1 :+ ks) ++ jC(toString(gf.caller), Z)._1), eE._2)
2586- }
2587- }
2588-
2589-
2590-
2591-@Callable(gf)
2592-func cargoExchange (lq,O) = {
2593- let ks = kp(gf)
2594- if ((size(gf.payments) != 0))
2586+ let eF = kp(toString(gg.caller), jR)
2587+ $Tuple2(((eF._1 :+ kt) ++ jD(toString(gg.caller), Z)._1), eF._2)
2588+ }
2589+ }
2590+
2591+
2592+
2593+@Callable(gg)
2594+func cargoExchange (lr,O) = {
2595+ let kt = kq(gg)
2596+ if ((size(gg.payments) != 0))
25952597 then throw("No payments required")
25962598 else {
2597- let hK = split_4C(lq, ":")
2598- let b = toString(gf.originCaller)
2599- let iP = value(assetInfo(fromBase58String(O)))
2600- let iQ = bo(O)
2601- if (!(isDefined(getInteger(iQ))))
2602- then throw((iP.name + " is not staked"))
2599+ let hL = split_4C(lr, ":")
2600+ let b = toString(gg.originCaller)
2601+ let iQ = value(assetInfo(fromBase58String(O)))
2602+ let iR = bo(O)
2603+ if (!(isDefined(getInteger(iR))))
2604+ then throw((iQ.name + " is not staked"))
26032605 else {
2604- let iS = valueOrErrorMessage(getString(bl(O)), (("NFT " + iP.name) + " is orphaned"))
2605- if ((iS != b))
2606+ let iT = valueOrErrorMessage(getString(bl(O)), (("NFT " + iQ.name) + " is orphaned"))
2607+ if ((iT != b))
26062608 then throw((aA + " is not yours"))
26072609 else {
2608- let hw = (di(split(iP.description, "_")[cQ]) / cp)
2609- let hx = valueOrElse(getInteger(bv(O)), 0)
2610+ let hx = (dj(split(iQ.description, "_")[cR]) / cq)
2611+ let hy = valueOrElse(getInteger(bv(O)), 0)
26102612 let z = valueOrErrorMessage(getString(bE(b)), "You don't have a duck staked")
2611- let iN = valueOrElse(getString(bG(z)), aI)
2612- let ca = split(value(iN), "_")
2613+ let iO = valueOrElse(getString(bG(z)), aI)
2614+ let ca = split(value(iO), "_")
26132615 if ((ca[bj] != "L"))
26142616 then throw((("Duck location type is " + ca[bj]) + ", but should be L"))
26152617 else if ((ca[bk] != O))
26162618 then throw(("Duck should be on the land " + O))
26172619 else {
2618- let hv = bu(O)
2619- let hm = hu(hv, hw, hx)
2620- let hi = bF(z)
2621- let hL = hh(hi)
2622- let eE = hJ(hK, hm, hL)
2623- let hD = split(hm[aZ], "_")
2624- let je = (parseIntValue(hD[bb]) + eE._7)
2625- let jf = (parseIntValue(hD[bc]) - eE._7)
2626-[StringEntry(hi, makeString_2C([hL[be], eE._4, eE._5, eE._6], ":")), StringEntry(hv, makeString_2C([hm[aV], eE._1, eE._2, eE._3, makeString([hD[ba], toString(je), toString(jf), hD[bd]], "_")], ":")), ks]
2620+ let hw = bu(O)
2621+ let hn = hv(hw, hx, hy)
2622+ let hj = bF(z)
2623+ let hM = hi(hj)
2624+ let eF = hK(hL, hn, hM)
2625+ let hE = split(hn[aZ], "_")
2626+ let jf = (parseIntValue(hE[bb]) + eF._7)
2627+ let jg = (parseIntValue(hE[bc]) - eF._7)
2628+[StringEntry(hj, makeString_2C([hM[be], eF._4, eF._5, eF._6], ":")), StringEntry(hw, makeString_2C([hn[aV], eF._1, eF._2, eF._3, makeString([hE[ba], toString(jf), toString(jg), hE[bd]], "_")], ":")), kt]
26272629 }
26282630 }
26292631 }
26302632 }
26312633 }
26322634
26332635
26342636
2635-@Callable(gf)
2636-func saveWarehouse (hz,O) = if ((gf.caller != cL))
2637+@Callable(gg)
2638+func saveWarehouse (hA,O) = if ((gg.caller != cM))
26372639 then throw("Access denied")
26382640 else {
2639- let hv = bu(O)
2640- let hA = split_4C(hz, ":")
2641- if ((size(hA) != 5))
2641+ let hw = bu(O)
2642+ let hB = split_4C(hA, ":")
2643+ if ((size(hB) != 5))
26422644 then throw("warehouse string should contain 4 ':' separators")
26432645 else {
2644- let lr = split(hA[aZ], "_")[ba]
2645- let je = hl(hA)
2646- let ls = hj(hA[aV])
2647- let jf = ((ls - parseIntValue(lr)) - je)
2648- let lt = makeString_2C([hA[aV], hA[aW], hA[aX], hA[aY], makeString([lr, toString(je), toString(jf), toString(ls)], "_")], ":")
2649- $Tuple2([StringEntry(hv, lt)], lt)
2646+ let ls = split(hB[aZ], "_")[ba]
2647+ let jf = hm(hB)
2648+ let lt = hk(hB[aV])
2649+ let jg = ((lt - parseIntValue(ls)) - jf)
2650+ let lu = makeString_2C([hB[aV], hB[aW], hB[aX], hB[aY], makeString([ls, toString(jf), toString(jg), toString(lt)], "_")], ":")
2651+ $Tuple2([StringEntry(hw, lu)], lu)
26502652 }
26512653 }
26522654
26532655
26542656
2655-@Callable(gf)
2656-func fixWarehouseFormat (O) = if ((gf.caller != cK))
2657+@Callable(gg)
2658+func fixWarehouseFormat (O) = if ((gg.caller != cL))
26572659 then throw("Access denied")
26582660 else {
2659- let hv = bu(O)
2660- let iP = value(assetInfo(fromBase58String(O)))
2661- let hw = (di(split(iP.description, "_")[cQ]) / cp)
2662- let hx = valueOrElse(getInteger(bv(O)), 0)
2663- let hA = hu(hv, hw, hx)
2664- let lr = df(invoke(cL, "recalcLockedVolumeREADONLY", [O, hA], nil))
2665- let je = hl(hA)
2666- let ls = hj(hA[aV])
2667- let jf = ((ls - lr) - je)
2668- let lt = makeString_2C([hA[aV], hA[aW], hA[aX], hA[aY], makeString([toString(lr), toString(je), toString(jf), toString(ls)], "_")], ":")
2669- $Tuple2([StringEntry(hv, lt)], lt)
2661+ let hw = bu(O)
2662+ let iQ = value(assetInfo(fromBase58String(O)))
2663+ let hx = (dj(split(iQ.description, "_")[cR]) / cq)
2664+ let hy = valueOrElse(getInteger(bv(O)), 0)
2665+ let hB = hv(hw, hx, hy)
2666+ let ls = dg(invoke(cM, "recalcLockedVolumeREADONLY", [O, hB], nil))
2667+ let jf = hm(hB)
2668+ let lt = hk(hB[aV])
2669+ let jg = ((lt - ls) - jf)
2670+ let lu = makeString_2C([hB[aV], hB[aW], hB[aX], hB[aY], makeString([toString(ls), toString(jf), toString(jg), toString(lt)], "_")], ":")
2671+ $Tuple2([StringEntry(hw, lu)], lu)
26702672 }
26712673
26722674
26732675
2674-@Callable(gf)
2675-func fixContinentProportions (jQ) = if ((gf.caller != cK))
2676+@Callable(gg)
2677+func fixContinentProportions (jR) = if ((gg.caller != cL))
26762678 then throw("Access denied")
26772679 else {
2678- func lu (em,lv) = (em :+ valueOrElse(getString(cY(lv)), "0_0_0_0_0_0"))
2679-
2680- let fP = {
2681- let eo = aM
2682- let ep = size(eo)
2683- let eq = nil
2684- func er (es,et) = if ((et >= ep))
2685- then es
2686- else lu(es, eo[et])
2687-
2688- func eu (es,et) = if ((et >= ep))
2689- then es
2680+ func lv (en,lw) = (en :+ valueOrElse(getString(cZ(lw)), "0_0_0_0_0_0"))
2681+
2682+ let fQ = {
2683+ let ep = aM
2684+ let eq = size(ep)
2685+ let er = nil
2686+ func es (et,eu) = if ((eu >= eq))
2687+ then et
2688+ else lv(et, ep[eu])
2689+
2690+ func ev (et,eu) = if ((eu >= eq))
2691+ then et
26902692 else throw("List size exceeds 5")
26912693
2692- eu(er(er(er(er(er(eq, 0), 1), 2), 3), 4), 5)
2693- }
2694- func lw (em,O) = {
2695- let iP = value(assetInfo(fromBase58String(O)))
2696- let iT = split(iP.description, "_")
2697- let hw = (di(iT[cQ]) / cp)
2698- let lv = iT[cS]
2699- let gb = gh(iT[cR])
2700- let gJ = value(indexOf(aM, lv))
2701- let kf = split(em[gJ], "_")
2702- let lx = makeString(fZ(kf, gb, hw, 1), "_")
2703- let ci = lv
2704- if (("Americas" == ci))
2705- then [lx, em[1], em[2], em[3], em[4]]
2706- else if (("Europe" == ci))
2707- then [em[0], lx, em[2], em[3], em[4]]
2708- else if (("Asia" == ci))
2709- then [em[0], em[1], lx, em[3], em[4]]
2710- else if (("Africa" == ci))
2711- then [em[0], em[1], em[2], lx, em[4]]
2712- else if (("Oceania" == ci))
2713- then [em[0], em[1], em[2], em[3], lx]
2694+ ev(es(es(es(es(es(er, 0), 1), 2), 3), 4), 5)
2695+ }
2696+ func lx (en,O) = {
2697+ let iQ = value(assetInfo(fromBase58String(O)))
2698+ let iU = split(iQ.description, "_")
2699+ let hx = (dj(iU[cR]) / cq)
2700+ let lw = iU[cT]
2701+ let gc = gi(iU[cS])
2702+ let gK = value(indexOf(aM, lw))
2703+ let kg = split(en[gK], "_")
2704+ let ly = makeString(ga(kg, gc, hx, 1), "_")
2705+ let cj = lw
2706+ if (("Americas" == cj))
2707+ then [ly, en[1], en[2], en[3], en[4]]
2708+ else if (("Europe" == cj))
2709+ then [en[0], ly, en[2], en[3], en[4]]
2710+ else if (("Asia" == cj))
2711+ then [en[0], en[1], ly, en[3], en[4]]
2712+ else if (("Africa" == cj))
2713+ then [en[0], en[1], en[2], ly, en[4]]
2714+ else if (("Oceania" == cj))
2715+ then [en[0], en[1], en[2], en[3], ly]
27142716 else throw("wrong continent")
27152717 }
27162718
2717- let ex = {
2718- let eo = jQ
2719- let ep = size(eo)
2720- let eq = fP
2721- func hc (es,et) = if ((et >= ep))
2722- then es
2723- else lw(es, eo[et])
2724-
2725- func hd (es,et) = if ((et >= ep))
2726- then es
2719+ let ey = {
2720+ let ep = jR
2721+ let eq = size(ep)
2722+ let er = fQ
2723+ func hd (et,eu) = if ((eu >= eq))
2724+ then et
2725+ else lx(et, ep[eu])
2726+
2727+ func he (et,eu) = if ((eu >= eq))
2728+ then et
27272729 else throw("List size exceeds 100")
27282730
2729- hd(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(hc(eq, 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)
2730- }
2731- $Tuple2([StringEntry(cY("Americas"), ex[0]), StringEntry(cY("Europe"), ex[1]), StringEntry(cY("Asia"), ex[2]), StringEntry(cY("Africa"), ex[3]), StringEntry(cY("Oceania"), ex[4])], 0)
2731+ he(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(hd(er, 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)
2732+ }
2733+ $Tuple2([StringEntry(cZ("Americas"), ey[0]), StringEntry(cZ("Europe"), ey[1]), StringEntry(cZ("Asia"), ey[2]), StringEntry(cZ("Africa"), ey[3]), StringEntry(cZ("Oceania"), ey[4])], 0)
27322734 }
27332735
27342736
27352737
2736-@Callable(gf)
2737-func fixStakedPieces (cw) = if ((gf.caller != cK))
2738+@Callable(gg)
2739+func fixStakedPieces (cx) = if ((gg.caller != cL))
27382740 then throw("Access denied")
27392741 else {
2740- let kj = if ((cw == ""))
2742+ let kk = if ((cx == ""))
27412743 then 0
27422744 else {
2743- let kc = getString(al, da(cw))
2744- let jY = if (isDefined(kc))
2745- then split_51C(value(kc), "_")
2745+ let kd = getString(al, db(cx))
2746+ let jZ = if (isDefined(kd))
2747+ then split_51C(value(kd), "_")
27462748 else nil
2747- func ly (em,O) = {
2748- let iP = value(assetInfo(fromBase58String(O)))
2749- let dj = split(iP.description, "_")[cQ]
2750- (em + di(dj))
2749+ func lz (en,O) = {
2750+ let iQ = value(assetInfo(fromBase58String(O)))
2751+ let dk = split(iQ.description, "_")[cR]
2752+ (en + dj(dk))
27512753 }
27522754
2753- let eo = jY
2754- let ep = size(eo)
2755- let eq = 0
2756- func er (es,et) = if ((et >= ep))
2757- then es
2758- else ly(es, eo[et])
2759-
2760- func eu (es,et) = if ((et >= ep))
2761- then es
2755+ let ep = jZ
2756+ let eq = size(ep)
2757+ let er = 0
2758+ func es (et,eu) = if ((eu >= eq))
2759+ then et
2760+ else lz(et, ep[eu])
2761+
2762+ func ev (et,eu) = if ((eu >= eq))
2763+ then et
27622764 else throw("List size exceeds 100")
27632765
2764- eu(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(er(eq, 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)
2766+ ev(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(es(er, 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)
27652767 }
2766- $Tuple2([IntegerEntry(db(cw), kj)], kj)
2768+ $Tuple2([IntegerEntry(dc(cx), kk)], kk)
27672769 }
27682770
27692771
27702772
2771-@Callable(gf)
2772-func setCustomName (bm,ka,bq) = {
2773- let ks = kp(gf)
2774- if ((size(gf.payments) != 1))
2773+@Callable(gg)
2774+func setCustomName (bm,kb,bq) = {
2775+ let kt = kq(gg)
2776+ if ((size(gg.payments) != 1))
27752777 then throw("Exactly one payment required")
27762778 else {
2777- let kt = value(gf.payments[0])
2778- if ((kt.assetId != ch))
2779+ let ku = value(gg.payments[0])
2780+ if ((ku.assetId != ci))
27792781 then throw("Allowed USDT payment only!")
2780- else if ((kt.amount != dy))
2781- then throw(("Payment should be " + toString(dy)))
2782- else if (contains(ka, "__"))
2783- then throw(("Name should not contain '__': " + ka))
2784- else if ((size(ka) > dz))
2785- then throw(("Name too long, maxLength=" + toString(dz)))
2782+ else if ((ku.amount != dz))
2783+ then throw(("Payment should be " + toString(dz)))
2784+ else if (contains(kb, "__"))
2785+ then throw(("Name should not contain '__': " + kb))
2786+ else if ((size(kb) > dA))
2787+ then throw(("Name too long, maxLength=" + toString(dA)))
27862788 else {
2787- let b = toString(gf.originCaller)
2788- let lz = {
2789- let ci = bq
2790- if (("ACCOUNT" == ci))
2789+ let b = toString(gg.originCaller)
2790+ let lA = {
2791+ let cj = bq
2792+ if (("ACCOUNT" == cj))
27912793 then {
2792- let lA = dS(ka)
2793- let lB = getString(lA)
2794- if (isDefined(lB))
2795- then throw(("Name already registered: " + ka))
2794+ let lB = dT(kb)
2795+ let lC = getString(lB)
2796+ if (isDefined(lC))
2797+ then throw(("Name already registered: " + kb))
27962798 else {
2797- let lC = by(b)
2798- let lD = getString(lC)
2799- let lE = if (isDefined(lD))
2800- then [DeleteEntry(dS(value(lD)))]
2799+ let lD = by(b)
2800+ let lE = getString(lD)
2801+ let lF = if (isDefined(lE))
2802+ then [DeleteEntry(dT(value(lE)))]
28012803 else nil
2802- (((lE :+ StringEntry(lC, ka)) :+ StringEntry(lA, b)) ++ jC(b, W)._1)
2804+ (((lF :+ StringEntry(lD, kb)) :+ StringEntry(lB, b)) ++ jD(b, W)._1)
28032805 }
28042806 }
2805- else if (("LAND" == ci))
2807+ else if (("LAND" == cj))
28062808 then {
2807- let iP = value(assetInfo(fromBase58String(bm)))
2808- let iQ = bo(bm)
2809- if (!(isDefined(getInteger(iQ))))
2810- then throw((iP.name + " is not staked"))
2809+ let iQ = value(assetInfo(fromBase58String(bm)))
2810+ let iR = bo(bm)
2811+ if (!(isDefined(getInteger(iR))))
2812+ then throw((iQ.name + " is not staked"))
28112813 else {
2812- let iS = valueOrErrorMessage(getString(bl(bm)), (("NFT " + iP.name) + " is orphaned"))
2813- if ((iS != b))
2814+ let iT = valueOrErrorMessage(getString(bl(bm)), (("NFT " + iQ.name) + " is orphaned"))
2815+ if ((iT != b))
28142816 then throw((aA + " is not yours"))
28152817 else {
2816- let lA = dL(ka)
2817- let lB = getString(lA)
2818- if (isDefined(lB))
2819- then throw(("Name already registered: " + ka))
2818+ let lB = dM(kb)
2819+ let lC = getString(lB)
2820+ if (isDefined(lC))
2821+ then throw(("Name already registered: " + kb))
28202822 else {
2821- let lF = bn(bm)
2822- let lD = getString(lF)
2823- let lE = if (isDefined(lD))
2824- then [DeleteEntry(dL(value(lD)))]
2823+ let lG = bn(bm)
2824+ let lE = getString(lG)
2825+ let lF = if (isDefined(lE))
2826+ then [DeleteEntry(dM(value(lE)))]
28252827 else nil
2826- (((lE :+ StringEntry(lF, ka)) :+ StringEntry(lA, bm)) ++ jC(b, W)._1)
2828+ (((lF :+ StringEntry(lG, kb)) :+ StringEntry(lB, bm)) ++ jD(b, W)._1)
28272829 }
28282830 }
28292831 }
28302832 }
2831- else if (("DUCK" == ci))
2833+ else if (("DUCK" == cj))
28322834 then {
2833- let iP = value(assetInfo(fromBase58String(bm)))
2834- let iQ = bo(bm)
2835- if (if (!(isDefined(getInteger(iQ))))
2835+ let iQ = value(assetInfo(fromBase58String(bm)))
2836+ let iR = bo(bm)
2837+ if (if (!(isDefined(getInteger(iR))))
28362838 then true
28372839 else !(isDefined(getString(bE(b)))))
2838- then throw((iP.name + " is not staked"))
2840+ then throw((iQ.name + " is not staked"))
28392841 else {
2840- let iS = valueOrErrorMessage(getString(bD(bm)), (("NFT " + iP.name) + " is orphaned"))
2841- if ((iS != b))
2842+ let iT = valueOrErrorMessage(getString(bD(bm)), (("NFT " + iQ.name) + " is orphaned"))
2843+ if ((iT != b))
28422844 then throw((aB + " is not yours"))
28432845 else {
2844- let lA = dR(ka)
2845- let lB = getString(lA)
2846- if (isDefined(lB))
2847- then throw(("Name already registered: " + ka))
2846+ let lB = dS(kb)
2847+ let lC = getString(lB)
2848+ if (isDefined(lC))
2849+ then throw(("Name already registered: " + kb))
28482850 else {
2849- let lF = bx(bm)
2850- let lD = getString(lF)
2851- let lE = if (isDefined(lD))
2852- then [DeleteEntry(dR(value(lD)))]
2851+ let lG = bx(bm)
2852+ let lE = getString(lG)
2853+ let lF = if (isDefined(lE))
2854+ then [DeleteEntry(dS(value(lE)))]
28532855 else nil
2854- (((lE :+ StringEntry(lF, ka)) :+ StringEntry(lA, bm)) ++ jw(bm, W)._1)
2856+ (((lF :+ StringEntry(lG, kb)) :+ StringEntry(lB, bm)) ++ jx(bm, W)._1)
28552857 }
28562858 }
28572859 }
28582860 }
28592861 else throw("Unknown entity type")
28602862 }
2861- $Tuple2(((lz :+ ScriptTransfer(cL, kt.amount, ch)) :+ ks), 0)
2863+ $Tuple2(((lA :+ ScriptTransfer(cM, ku.amount, ci)) :+ kt), 0)
28622864 }
28632865 }
28642866 }
28652867
28662868
28672869
2868-@Callable(gf)
2869-func setReferrals (lG,lH) = if ((gf.callerPublicKey != dv))
2870+@Callable(gg)
2871+func setReferrals (lH,lI) = if ((gg.callerPublicKey != dw))
28702872 then throw("Permission denied")
28712873 else {
2872- let ks = kp(gf)
2873- if ((size(gf.payments) != 0))
2874+ let kt = kq(gg)
2875+ if ((size(gg.payments) != 0))
28742876 then throw("No payments required")
2875- else if (!(isDefined(addressFromString(lG))))
2876- then throw(("Invalid address: " + lG))
2877- else if (!(isDefined(addressFromString(lH))))
2878- then throw(("Invalid address: " + lH))
2877+ else if (!(isDefined(addressFromString(lH))))
2878+ then throw(("Invalid address: " + lH))
2879+ else if (!(isDefined(addressFromString(lI))))
2880+ then throw(("Invalid address: " + lI))
28792881 else {
2880- let lI = dT()
2881- let lJ = getString(lI)
2882- let lK = if (isDefined(lJ))
2883- then split_4C(value(lJ), "_")
2882+ let lJ = dU()
2883+ let lK = getString(lJ)
2884+ let lL = if (isDefined(lK))
2885+ then split_4C(value(lK), "_")
28842886 else nil
2885- if (containsElement(lK, lH))
2886- then throw((lH + " is not newbie (already has referrals)"))
2887+ if (containsElement(lL, lI))
2888+ then throw((lI + " is not newbie (already has referrals)"))
28872889 else {
2888- let jE = bz(lH)
2889- let jF = getString(jE)
2890- if (if (isDefined(jF))
2891- then isDefined(addressFromString(value(jF)))
2890+ let jF = bz(lI)
2891+ let jG = getString(jF)
2892+ if (if (isDefined(jG))
2893+ then isDefined(addressFromString(value(jG)))
28922894 else false)
2893- then throw(((lH + " already has refBy: ") + value(jF)))
2895+ then throw(((lI + " already has refBy: ") + value(jG)))
28942896 else {
2895- let lL = bC(lG)
2896- let lM = getString(lL)
2897- let lN = if (isDefined(lM))
2898- then split_4C(value(lM), "_")
2897+ let lM = bC(lH)
2898+ let lN = getString(lM)
2899+ let lO = if (isDefined(lN))
2900+ then split_4C(value(lN), "_")
28992901 else nil
2900- if (containsElement(lN, lH))
2901- then throw((((lG + " already contains ") + lH) + " within referrals"))
2902+ if (containsElement(lO, lI))
2903+ then throw((((lH + " already contains ") + lI) + " within referrals"))
29022904 else {
2903- let lO = makeString_2C((lN :+ lH), "_")
2904- let lP = if (containsElement(lK, lG))
2905- then value(lJ)
2906- else makeString_2C((lK :+ lG), "_")
2907- $Tuple2([StringEntry(jE, lG), StringEntry(lL, lO), StringEntry(lI, lP), ks], 0)
2905+ let lP = makeString_2C((lO :+ lI), "_")
2906+ let lQ = if (containsElement(lL, lH))
2907+ then value(lK)
2908+ else makeString_2C((lL :+ lH), "_")
2909+ $Tuple2([StringEntry(jF, lH), StringEntry(lM, lP), StringEntry(lJ, lQ), kt], 0)
29082910 }
29092911 }
29102912 }
29112913 }
29122914 }
29132915
29142916
29152917
2916-@Callable(gf)
2917-func distributePoints (lQ,lR,lS,lT,lU) = {
2918- let ks = kp(gf)
2919- if ((size(gf.payments) != 0))
2918+@Callable(gg)
2919+func distributePoints (lR,lS,lT,lU,lV) = {
2920+ let kt = kq(gg)
2921+ if ((size(gg.payments) != 0))
29202922 then throw("No payments required")
29212923 else {
2922- let b = toString(gf.originCaller)
2924+ let b = toString(gg.originCaller)
29232925 let z = valueOrErrorMessage(getString(bE(b)), "You don't have a duck staked")
2924- let lV = H(b)
2925- let lW = valueOrElse(getInteger(al, lV), 0)
2926- let lX = D(z)
2927- let lY = valueOrElse(getInteger(al, lX), 0)
2928- let lZ = (lW + lY)
2929- let ma = ((((lQ + lR) + lS) + lT) + lU)
2930- if ((ma > lZ))
2931- then throw((("There are only " + toString(lZ)) + " free points to distribute"))
2926+ let lW = H(b)
2927+ let lX = valueOrElse(getInteger(al, lW), 0)
2928+ let lY = D(z)
2929+ let lZ = valueOrElse(getInteger(al, lY), 0)
2930+ let ma = (lX + lZ)
2931+ let mb = ((((lR + lS) + lT) + lU) + lV)
2932+ if ((mb > ma))
2933+ then throw((("There are only " + toString(ma)) + " free points to distribute"))
29322934 else {
2933- let mb = A(z)
2934- let ao = split(valueOrElse(getString(al, mb), "0_0_0_0_0"), "_")
2935- let mc = (lW - ma)
2936- $Tuple2([IntegerEntry(lV, if ((0 > mc))
2935+ let mc = A(z)
2936+ let ao = split(valueOrElse(getString(al, mc), "0_0_0_0_0"), "_")
2937+ let md = (lX - mb)
2938+ $Tuple2([IntegerEntry(lW, if ((0 > md))
29372939 then 0
2938- else mc), IntegerEntry(lX, if ((0 > mc))
2939- then (lY + mc)
2940- else lY), StringEntry(mb, makeString([toString((parseIntValue(ao[j]) + lQ)), toString((parseIntValue(ao[k]) + lR)), toString((parseIntValue(ao[l]) + lS)), toString((parseIntValue(ao[m]) + lT)), toString((parseIntValue(ao[n]) + lU))], "_")), ks], 0)
2940+ else md), IntegerEntry(lY, if ((0 > md))
2941+ then (lZ + md)
2942+ else lZ), StringEntry(mc, makeString([toString((parseIntValue(ao[j]) + lR)), toString((parseIntValue(ao[k]) + lS)), toString((parseIntValue(ao[l]) + lT)), toString((parseIntValue(ao[m]) + lU)), toString((parseIntValue(ao[n]) + lV))], "_")), kt], 0)
29412943 }
29422944 }
29432945 }
29442946
29452947
29462948
2947-@Callable(gf)
2948-func splitByGlobalWeightsREADONLY (ed) = $Tuple2(nil, ev(ed))
2949-
2950-
2951-
2952-@Callable(gf)
2953-func splitByGlobalAndLocalWeightsREADONLY (md,me,gi) = {
2954- let gb = gh(gi)
2955- $Tuple2(nil, $Tuple2(ev(md), eg(me, gb)))
2956- }
2957-
2958-
2959-
2960-@Callable(gf)
2961-func getBackpackREADONLY (z) = $Tuple2(nil, makeString(hh(bF(z)), ":"))
2962-
2963-
2964-
2965-@Callable(gf)
2949+@Callable(gg)
2950+func splitByGlobalWeightsREADONLY (ee) = $Tuple2(nil, ew(ee))
2951+
2952+
2953+
2954+@Callable(gg)
2955+func splitByGlobalAndLocalWeightsREADONLY (me,mf,gj) = {
2956+ let gc = gi(gj)
2957+ $Tuple2(nil, $Tuple2(ew(me), eh(mf, gc)))
2958+ }
2959+
2960+
2961+
2962+@Callable(gg)
2963+func getBackpackREADONLY (z) = $Tuple2(nil, makeString(hi(bF(z)), ":"))
2964+
2965+
2966+
2967+@Callable(gg)
29662968 func getWarehouseREADONLY (O) = {
2967- let iP = value(assetInfo(fromBase58String(O)))
2968- let hw = (di(split(iP.description, "_")[cQ]) / cp)
2969- let hx = valueOrElse(getInteger(bv(O)), 0)
2970- $Tuple2(nil, makeString_2C(hu(bu(O), hw, hx), ":"))
2971- }
2972-
2973-
2974-
2975-@Callable(gf)
2969+ let iQ = value(assetInfo(fromBase58String(O)))
2970+ let hx = (dj(split(iQ.description, "_")[cR]) / cq)
2971+ let hy = valueOrElse(getInteger(bv(O)), 0)
2972+ $Tuple2(nil, makeString_2C(hv(bu(O), hx, hy), ":"))
2973+ }
2974+
2975+
2976+
2977+@Callable(gg)
29762978 func saveLastTx () = {
2977- let ig = gf.caller
2978- if (if (if ((ig != cN))
2979- then (ig != cL)
2979+ let ih = gg.caller
2980+ if (if (if ((ih != cO))
2981+ then (ih != cM)
29802982 else false)
2981- then (ig != cO)
2983+ then (ih != cP)
29822984 else false)
29832985 then throw("Access denied")
2984- else $Tuple2([kp(gf)], 42)
2985- }
2986-
2987-
2988-
2989-@Callable(gf)
2990-func updateDuckStats (z,jx) = if ((gf.caller != cL))
2986+ else $Tuple2([kq(gg)], 42)
2987+ }
2988+
2989+
2990+
2991+@Callable(gg)
2992+func updateDuckStats (z,jy) = if ((gg.caller != cM))
29912993 then throw("Access denied")
2992- else jw(z, jx)
2993-
2994-
2995-
2996-@Callable(gf)
2997-func updateAccStats (b,jx) = if ((gf.caller != cL))
2994+ else jx(z, jy)
2995+
2996+
2997+
2998+@Callable(gg)
2999+func updateAccStats (b,jy) = if ((gg.caller != cM))
29983000 then throw("Access denied")
2999- else jC(b, jx)
3000-
3001-
3002-
3003-@Callable(gf)
3004-func equipDuck (mf) = {
3005- let ks = kp(gf)
3006- if ((size(gf.payments) != 0))
3001+ else jD(b, jy)
3002+
3003+
3004+
3005+@Callable(gg)
3006+func equipDuck (mg) = {
3007+ let kt = kq(gg)
3008+ if ((size(gg.payments) != 0))
30073009 then throw("No payments required")
30083010 else {
3009- let b = toString(gf.originCaller)
3011+ let b = toString(gg.originCaller)
30103012 let z = valueOrErrorMessage(getString(bE(b)), "You don't have a duck staked")
3011- if (jM(z))
3013+ if (jN(z))
30123014 then throw("equipDuck_checkTournament")
30133015 else {
3014- let fS = E(z)
3015- let mg = split(valueOrElse(getString(fS), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
3016- let hi = bF(z)
3017- let hL = hh(hi)
3018- let kL = split(mf, "_")
3019- if ((size(kL) != p))
3016+ let fT = E(z)
3017+ let mh = split(valueOrElse(getString(fT), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
3018+ let hj = bF(z)
3019+ let hM = hi(hj)
3020+ let kM = split(mg, "_")
3021+ if ((size(kM) != p))
30203022 then throw("Wrong equipment string")
30213023 else {
3022- let fU = fH(mg, eS(hL[bh]), true, nil)
3023- let fV = split(kL[o], ";")[1]
3024- let am = if ((fV == ""))
3024+ let fV = fI(mh, eT(hM[bh]), true, nil)
3025+ let fW = split(kM[o], ";")[1]
3026+ let am = if ((fW == ""))
30253027 then 0
30263028 else {
3027- let fW = split(fV, ",")[0]
3028- if ((fW == ""))
3029+ let fX = split(fW, ",")[0]
3030+ if ((fX == ""))
30293031 then 0
30303032 else {
3031- let fh = split(fW, ":")
3032- let cJ = fh[0]
3033- let fX = fh[1]
3034- if (if (if (if (if ((cJ == "06"))
3033+ let fi = split(fX, ":")
3034+ let cK = fi[0]
3035+ let fY = fi[1]
3036+ if (if (if (if (if ((cK == "06"))
30353037 then true
3036- else (cJ == "07"))
3038+ else (cK == "07"))
30373039 then true
3038- else (cJ == "08"))
3039- then (fX != "")
3040+ else (cK == "08"))
3041+ then (fY != "")
30403042 else false)
3041- then (parseIntValue(fX) > 0)
3043+ then (parseIntValue(fY) > 0)
30423044 else false)
3043- then parseIntValue(split(aP[parseIntValue(cJ)], "_")[aR])
3045+ then parseIntValue(split(aP[parseIntValue(cK)], "_")[aR])
30443046 else 0
30453047 }
30463048 }
3047- let fC = ak(this, z, am, true)
3048- let fY = fH(kL, fU, false, fC)
3049- let mh = eX(fY)
3050- $Tuple2([StringEntry(fS, mf), StringEntry(hi, makeString_2C([hL[be], hL[bf], hL[bg], mh], ":")), StringEntry(K(z), makeString([toString(fC[7]), toString(fC[8]), toString(fC[9]), toString(fC[10]), toString(fC[11])], "_")), ks], 0)
3049+ let fD = ak(this, z, am, true)
3050+ let fZ = fI(kM, fV, false, fD)
3051+ let mi = eY(fZ)
3052+ $Tuple2([StringEntry(fT, mg), StringEntry(hj, makeString_2C([hM[be], hM[bf], hM[bg], mi], ":")), StringEntry(K(z), makeString([toString(fD[7]), toString(fD[8]), toString(fD[9]), toString(fD[10]), toString(fD[11])], "_")), kt], 0)
30513053 }
30523054 }
30533055 }
30543056 }
30553057
30563058
30573059
3058-@Callable(gf)
3059-func fortificateLand (O,mi) = {
3060- let ks = kp(gf)
3061- if ((size(gf.payments) != 0))
3060+@Callable(gg)
3061+func fortificateLand (O,mj) = {
3062+ let kt = kq(gg)
3063+ if ((size(gg.payments) != 0))
30623064 then throw("No payments required")
30633065 else {
3064- let b = toString(gf.originCaller)
3066+ let b = toString(gg.originCaller)
30653067 let z = valueOrElse(getString(bE(b)), "")
3066- let fc = ak(this, z, 0, false)
3067- let mj = bw(O)
3068- let mk = split(valueOrElse(getString(mj), ":0_15:0_18:0"), "_")
3069- let iP = value(assetInfo(fromBase58String(O)))
3070- let hw = (di(split(iP.description, "_")[cQ]) / cp)
3071- let hx = valueOrElse(getInteger(bv(O)), 0)
3072- let hv = bu(O)
3073- let hA = hu(hv, hw, hx)
3074- let ml = split(hA[aZ], "_")
3075- let mm = parseIntValue(ml[bb])
3076- let mn = parseIntValue(ml[bc])
3077- let mo = split(mi, "_")
3078- let mp = fO(mk, eS(hA[aY]), mm, mn, true, nil)
3079- let fU = mp._1
3080- let mq = mp._2
3081- let mr = mp._3
3082- let ms = fO(mo, fU, mq, mr, false, fc)
3083- let fY = ms._1
3084- let mt = ms._2
3085- let mu = ms._3
3086- let mh = eX(fY)
3087- let jv = makeString([ml[ba], toString(mt), toString(mu), ml[bd]], "_")
3088- $Tuple2([StringEntry(mj, mi), StringEntry(hv, makeString_2C([hA[aV], hA[aW], hA[aX], mh, jv], ":")), ks], 0)
3089- }
3090- }
3091-
3092-
3093-
3094-@Callable(gf)
3095-func initDuckTourAttempt (z) = if ((gf.caller != cO))
3068+ let fd = ak(this, z, 0, false)
3069+ let mk = bw(O)
3070+ let ml = split(valueOrElse(getString(mk), ":0_15:0_18:0"), "_")
3071+ let iQ = value(assetInfo(fromBase58String(O)))
3072+ let hx = (dj(split(iQ.description, "_")[cR]) / cq)
3073+ let hy = valueOrElse(getInteger(bv(O)), 0)
3074+ let hw = bu(O)
3075+ let hB = hv(hw, hx, hy)
3076+ let mm = split(hB[aZ], "_")
3077+ let mn = parseIntValue(mm[bb])
3078+ let mo = parseIntValue(mm[bc])
3079+ let mp = split(mj, "_")
3080+ let mq = fP(ml, eT(hB[aY]), mn, mo, true, nil)
3081+ let fV = mq._1
3082+ let mr = mq._2
3083+ let ms = mq._3
3084+ let mt = fP(mp, fV, mr, ms, false, fd)
3085+ let fZ = mt._1
3086+ let mu = mt._2
3087+ let mv = mt._3
3088+ let mi = eY(fZ)
3089+ let jw = makeString([mm[ba], toString(mu), toString(mv), mm[bd]], "_")
3090+ $Tuple2([StringEntry(mk, mj), StringEntry(hw, makeString_2C([hB[aV], hB[aW], hB[aX], mi, jw], ":")), kt], 0)
3091+ }
3092+ }
3093+
3094+
3095+
3096+@Callable(gg)
3097+func initDuckTourAttempt (z) = if ((gg.caller != cP))
30963098 then throw("Access denied")
30973099 else {
3098- let ks = kp(gf)
3099- let iy = y(z)
3100- let iz = ae(valueOrElse(getInteger(C(z)), 0))
3101- let kF = valueOrElse(getInteger(iy), iz)
3102- let mv = bG(z)
3103- let iN = valueOrElse(getString(mv), aI)
3104- let bZ = valueOrElse(getInteger(cO, bK), 0)
3105- let mw = (toString(bZ) + "_T_0")
3106- $Tuple2([ks, IntegerEntry(I(z), kF), IntegerEntry(iy, iz), StringEntry(J(z), iN), StringEntry(mv, mw)], mw)
3100+ let kt = kq(gg)
3101+ let iz = y(z)
3102+ let iA = ae(valueOrElse(getInteger(C(z)), 0))
3103+ let kG = valueOrElse(getInteger(iz), iA)
3104+ let mw = bG(z)
3105+ let iO = valueOrElse(getString(mw), aI)
3106+ let bZ = valueOrElse(getInteger(cP, bK), 0)
3107+ let mx = (toString(bZ) + "_T_0")
3108+ $Tuple2([kt, IntegerEntry(I(z), kG), IntegerEntry(iz, iA), StringEntry(J(z), iO), StringEntry(mw, mx)], mx)
31073109 }
31083110
31093111
31103112
3111-@Callable(gf)
3113+@Callable(gg)
31123114 func breakAttempt () = {
3113- let ks = kp(gf)
3114- let z = valueOrErrorMessage(getString(bE(toString(gf.caller))), "You don't have a duck staked")
3115- let mv = bG(z)
3116- let iN = valueOrElse(getString(mv), aI)
3117- if ((split(iN, "_")[bj] != "T"))
3115+ let kt = kq(gg)
3116+ let z = valueOrErrorMessage(getString(bE(toString(gg.caller))), "You don't have a duck staked")
3117+ let mw = bG(z)
3118+ let iO = valueOrElse(getString(mw), aI)
3119+ if ((split(iO, "_")[bj] != "T"))
31183120 then throw("Your duck is not in the tournament")
31193121 else {
3120- let mx = getIntegerValue(I(z))
3121- let my = getStringValue(J(z))
3122- $Tuple2([ks, IntegerEntry(y(z), mx), StringEntry(mv, my)], iN)
3123- }
3124- }
3125-
3126-
3127-
3128-@Callable(gf)
3129-func exitTournamentInternal (z) = if ((gf.caller != this))
3122+ let my = getIntegerValue(I(z))
3123+ let mz = getStringValue(J(z))
3124+ $Tuple2([kt, IntegerEntry(y(z), my), StringEntry(mw, mz)], iO)
3125+ }
3126+ }
3127+
3128+
3129+
3130+@Callable(gg)
3131+func exitTournamentInternal (z) = if ((gg.caller != this))
31303132 then throw("Access denied")
31313133 else {
3132- let mx = getIntegerValue(I(z))
3133- let my = getStringValue(J(z))
3134- $Tuple2([IntegerEntry(y(z), mx), StringEntry(bG(z), my)], false)
3134+ let my = getIntegerValue(I(z))
3135+ let mz = getStringValue(J(z))
3136+ $Tuple2([IntegerEntry(y(z), my), StringEntry(bG(z), mz)], false)
31353137 }
31363138
31373139
31383140
3139-@Callable(gf)
3140-func prepareRobbery (in,io) = {
3141- let ks = kp(gf)
3142- if (!(sigVerify_8Kb(in, io, dv)))
3141+@Callable(gg)
3142+func prepareRobbery (io,ip) = {
3143+ let kt = kq(gg)
3144+ if (!(sigVerify_8Kb(io, ip, dw)))
31433145 then throw("signature does not match")
3144- else if ((size(gf.payments) != 1))
3146+ else if ((size(gg.payments) != 1))
31453147 then throw("exactly 1 payment must be attached")
31463148 else {
3147- let kt = gf.payments[0]
3148- let mz = kt.amount
3149- if (if (!(isDefined(kt.assetId)))
3149+ let ku = gg.payments[0]
3150+ let mA = ku.amount
3151+ if (if (!(isDefined(ku.assetId)))
31503152 then true
3151- else (value(kt.assetId) != cU))
3153+ else (value(ku.assetId) != cV))
31523154 then throw("WLGOLD payments only!")
31533155 else {
3154- let eK = split(toUtf8String(in), "|")
3155- if ((size(eK) != 2))
3156+ let eL = split(toUtf8String(io), "|")
3157+ if ((size(eL) != 2))
31563158 then throw("Wrong message format")
31573159 else {
3158- let z = eK[0]
3160+ let z = eL[0]
31593161 let aw = as(this, z)._1
3160- if ((aw > mz))
3161- then throw(((("Payment " + toString(mz)) + " < required ") + toString(aw)))
3162+ if ((aw > mA))
3163+ then throw(((("Payment " + toString(mA)) + " < required ") + toString(aw)))
31623164 else {
3163- let mA = split(eK[1], "_")
3165+ let mB = split(eL[1], "_")
31643166 let av = lastBlock.timestamp
31653167 let ax = valueOrElse(getInteger(Q(z)), 0)
31663168 let ay = valueOrElse(getString(R(z)), "")
31673169 let az = valueOrElse(getInteger(P(ay)), 0)
31683170 if (if ((ax != w))
31693171 then (az > av)
31703172 else false)
31713173 then throw(("You already started robbing, wait till " + toString(az)))
31723174 else {
3173- func mB (em,O) = {
3174- let mC = valueOrElse(getInteger(N(O)), 0)
3175- let mD = valueOrElse(getInteger(P(O)), 0)
3176- if ((mC > size(t)))
3175+ func mC (en,O) = {
3176+ let mD = valueOrElse(getInteger(N(O)), 0)
3177+ let mE = valueOrElse(getInteger(P(O)), 0)
3178+ if ((mD > size(t)))
31773179 then throw("Invalid state")
3178- else if ((av > mD))
3180+ else if ((av > mE))
31793181 then {
3180- let mE = valueOrElse(getInteger(bo(O)), 0)
3181- if ((0 >= mE))
3182- then em
3182+ let mF = valueOrElse(getInteger(bo(O)), 0)
3183+ if ((0 >= mF))
3184+ then en
31833185 else {
3184- let fM = value(assetInfo(fromBase58String(O)))
3185- let iT = split(fM.description, "_")
3186- let iF = di(iT[cQ])
3187- let mF = iE(O, iF)
3188- let gl = (av - mE)
3189- let iW = fraction(gl, (mF * iF), aG)
3190- if ((u > iW))
3191- then em
3192- else (em :+ O)
3186+ let fN = value(assetInfo(fromBase58String(O)))
3187+ let iU = split(fN.description, "_")
3188+ let iG = dj(iU[cR])
3189+ let mG = iF(O, iG)
3190+ let gm = (av - mF)
3191+ let iX = fraction(gm, (mG * iG), aG)
3192+ if ((u > iX))
3193+ then en
3194+ else (en :+ O)
31933195 }
31943196 }
3195- else em
3197+ else en
31963198 }
31973199
3198- let mG = {
3199- let eo = mA
3200- let ep = size(eo)
3201- let eq = nil
3202- func er (es,et) = if ((et >= ep))
3203- then es
3204- else mB(es, eo[et])
3205-
3206- func eu (es,et) = if ((et >= ep))
3207- then es
3200+ let mH = {
3201+ let ep = mB
3202+ let eq = size(ep)
3203+ let er = nil
3204+ func es (et,eu) = if ((eu >= eq))
3205+ then et
3206+ else mC(et, ep[eu])
3207+
3208+ func ev (et,eu) = if ((eu >= eq))
3209+ then et
32083210 else throw("List size exceeds 10")
32093211
3210- eu(er(er(er(er(er(er(er(er(er(er(eq, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
3212+ ev(es(es(es(es(es(es(es(es(es(es(er, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
32113213 }
3212- if ((size(mG) == 0))
3214+ if ((size(mH) == 0))
32133215 then throw("No candidates for robbery")
32143216 else {
3215- let mH = dn(size(mG), height, (io + gf.transactionId))
3216- let O = mG[mH]
3217- $Tuple2([IntegerEntry(N(O), v), IntegerEntry(P(O), (av + t[v])), IntegerEntry(Q(z), x), StringEntry(R(z), O), ks], O)
3217+ let mI = do(size(mH), height, (ip + gg.transactionId))
3218+ let O = mH[mI]
3219+ $Tuple2([IntegerEntry(N(O), v), IntegerEntry(P(O), (av + t[v])), IntegerEntry(Q(z), x), StringEntry(R(z), O), kt], O)
32183220 }
32193221 }
32203222 }
32213223 }
32223224 }
32233225 }
32243226 }
32253227
32263228
32273229
3228-@Callable(gf)
3229-func robLand (in,io) = {
3230- let ks = kp(gf)
3231- if (!(sigVerify_8Kb(in, io, dv)))
3230+@Callable(gg)
3231+func robLand (io,ip) = {
3232+ let kt = kq(gg)
3233+ if (!(sigVerify_8Kb(io, ip, dw)))
32323234 then throw("signature does not match")
3233- else $Tuple2([ks], 0)
3234- }
3235+ else {
3236+ let bI = toString(gg.caller)
3237+ let z = valueOrErrorMessage(getString(bE(bI)), "You don't have a duck staked")
3238+ let av = lastBlock.timestamp
3239+ $Tuple2([kt, IntegerEntry(L(z), av)], 0)
3240+ }
3241+ }
3242+
3243+
3244+
3245+@Callable(gg)
3246+func deliver (io,ip) = if (!(cg))
3247+ then throw("Delivery feature is turned off!")
3248+ else {
3249+ let kt = kq(gg)
3250+ if (!(sigVerify_8Kb(io, ip, dw)))
3251+ then throw("signature does not match")
3252+ else $Tuple2([kt], 0)
3253+ }
32353254
32363255

github/deemru/w8io/c3f4982 
1677.00 ms