tx · DYWprMNgwRcxyBQsbywLHWYo17cbCotJBzWj3wpP2zmM 3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm: -0.10800000 Waves 2023.11.03 16:30 [2827211] smart account 3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm > SELF 0.00000000 Waves
{ "type": 13, "id": "DYWprMNgwRcxyBQsbywLHWYo17cbCotJBzWj3wpP2zmM", "fee": 10800000, "feeAssetId": null, "timestamp": 1699018135348, "version": 2, "chainId": 84, "sender": "3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm", "senderPublicKey": "EVooykMNV691Venwp1dHUTBd7KWequzUcda57Wd3LQEX", "proofs": [ "4EM9fgwjV5JqhkcaAgFszTs295AQ4CcWh8CvngYVUhJhp7YKfy5SgdvgVqcLAKNfDW4zuSKBjKg3AmkUokgPXKwN" ], "script": "base64:BgLiAQgCEgMKAQgSBAoCCAESAwoBBBIAEgMKAQgSABIDCgEIEgQKAgEIEgQKAgEIEgQKAgICEgUKAwEBARIAEgQKAggIEgASABIECgICAhIAEgMKAQgSBAoCCAgSAwoBGBIECgIICBIECgIICBIFCgMICAgSBAoCCAgSBwoFAQEBAQESAwoBARIFCgMBAQgSAwoBCBIDCgEIEgASBAoCCAESBAoCCAESAwoBCBIECgIICBIDCgEIEgASAwoBCBIDCgEIEgYKBAgBCAESABIECgICAhIECgICAhIAEgMKAQgSBAoCAQGnAgAJREFZTUlMTElTAIC4mSkBFGtleUxhc3RBcmJUaW1lQnlVc2VyAQRhZGRyCQCsAgICEGxhc3RBcmJUaW1lVXNlcl8FBGFkZHIBGmtleUFjcmVzU3Rha2VkQW1vdW50QnlVc2VyAQRhZGRyCQCsAgICGGFjcmVzU3Rha2VkQW1vdW50QnlVc2VyXwUEYWRkcgAGU0NBTEU4AIDC1y8ADHhwTGV2ZWxTY2FsZQCAGQAPeHBMZXZlbFJlY2lwUG93AKAfABJudW1Qb2ludHNPbkxldmVsVXAAAwAOcm9iYmVyeUNvc3RNaW4AgMLXLwAUcm9iYmVyeUNvb2xkb3duQ29lZmYAkAMADHJlcXVpcmVtZW50cwkAzAgCAghTdHJlbmd0aAkAzAgCAghBY2N1cmFjeQkAzAgCAglJbnRlbGxlY3QJAMwIAgIJRW5kdXJhbmNlCQDMCAICCURleHRlcml0eQkAzAgCAgVMZXZlbAkAzAgCAgZIZWFsdGgFA25pbAAMY2hhclN0cmVuZ3RoAAAADGNoYXJBY2N1cmFjeQABAA1jaGFySW50ZWxsZWN0AAIADWNoYXJFbmR1cmFuY2UAAwANY2hhckRleHRlcml0eQAEAAtzZWdCYWNrcGFjawAAAAtOVU1TRUdNRU5UUwAGAApOVU1NQUlOQVVYAAIACE1BWFNMT1RTAAIADU1BWFBST0RJTlNMT1QAHgAQbGFuZFJvYkNvb2xkb3ducwkAzAgCAAAJAMwIAgDAzyQJAMwIAgCg9zYJAMwIAgCA3MwUCQDMCAIAgK6mCgUDbmlsAA5NSU5fUkVTX1RPX1JPQgCA2sQJAAxyb2JJZHhMb2NrZWQAAQALZHVja0lkeEZyZWUAAAAQZHVja0lkeFByZXBhcmluZwABAQ1rZXlEdWNrSGVhbHRoAQtkdWNrQXNzZXRJZAkArAICAgtkdWNrSGVhbHRoXwULZHVja0Fzc2V0SWQBDGtleUR1Y2tDaGFycwELZHVja0Fzc2V0SWQJAKwCAgIKZHVja0NoYXJzXwULZHVja0Fzc2V0SWQBCWtleUR1Y2tYUAELZHVja0Fzc2V0SWQJAKwCAgIHZHVja1hQXwULZHVja0Fzc2V0SWQBDGtleUR1Y2tMZXZlbAELZHVja0Fzc2V0SWQJAKwCAgIKZHVja0xldmVsXwULZHVja0Fzc2V0SWQBEWtleUR1Y2tGcmVlUG9pbnRzAQtkdWNrQXNzZXRJZAkArAICAg9kdWNrRnJlZVBvaW50c18FC2R1Y2tBc3NldElkARBrZXlEdWNrRXF1aXBtZW50AQtkdWNrQXNzZXRJZAkArAICAg5kdWNrRXF1aXBtZW50XwULZHVja0Fzc2V0SWQBCWtleVVzZXJYUAEEYWRkcgkArAICAgd1c2VyWFBfBQRhZGRyAQxrZXlVc2VyTGV2ZWwBBGFkZHIJAKwCAgIKdXNlckxldmVsXwUEYWRkcgERa2V5VXNlckZyZWVQb2ludHMBBGFkZHIJAKwCAgIPdXNlckZyZWVQb2ludHNfBQRhZGRyAQ5rZXlTYXZlZEhlYWx0aAELZHVja0Fzc2V0SWQJAKwCAgIMc2F2ZWRIZWFsdGhfBQtkdWNrQXNzZXRJZAEQa2V5U2F2ZWRMb2NhdGlvbgELZHVja0Fzc2V0SWQJAKwCAgIOc2F2ZWRMb2NhdGlvbl8FC2R1Y2tBc3NldElkAQxrZXlEdWNrQnVmZnMBC2R1Y2tBc3NldElkCQCsAgICCmR1Y2tCdWZmc18FC2R1Y2tBc3NldElkARhrZXlMYXN0Um9iYmVyeVRpbWVCeUR1Y2sBC2R1Y2tBc3NldElkCQCsAgICEGxhc3RSb2JiZXJ5VGltZV8FC2R1Y2tBc3NldElkARhrZXlMYXN0Um9iYmVyeUNvc3RCeUR1Y2sBC2R1Y2tBc3NldElkCQCsAgICEGxhc3RSb2JiZXJ5Q29zdF8FC2R1Y2tBc3NldElkARNrZXlMYW5kUm9iYmVyeVN0YXRlAQtsYW5kQXNzZXRJZAkArAICAhFsYW5kUm9iYmVyeVN0YXRlXwULbGFuZEFzc2V0SWQBEmtleUxhbmRDb29sZG93bkVUQQELbGFuZEFzc2V0SWQJAKwCAgIQbGFuZENvb2xkb3duRVRBXwULbGFuZEFzc2V0SWQBE2tleUR1Y2tSb2JiZXJ5U3RhdGUBC2R1Y2tBc3NldElkCQCsAgICEWR1Y2tSb2JiZXJ5U3RhdGVfBQtkdWNrQXNzZXRJZAETa2V5TG9ja2VkTGFuZEJ5RHVjawELZHVja0Fzc2V0SWQJAKwCAgIRbG9ja2VkTGFuZEJ5RHVja18FC2R1Y2tBc3NldElkARZrZXlEZWxpdmVyeURlbGF5QnlEdWNrAQtkdWNrQXNzZXRJZAkArAICAhRkZWxpdmVyeURlbGF5QnlEdWNrXwULZHVja0Fzc2V0SWQBFGtleVVzZXJEZWxpdmVyeUNvdW50AQRhZGRyCQCsAgICEnVzZXJEZWxpdmVyeUNvdW50XwUEYWRkcgEWa2V5VXNlckxhc3REZWxpdmVyeURheQEEYWRkcgkArAICAhR1c2VyTGFzdERlbGl2ZXJ5RGF5XwUEYWRkcgAHeHBDbGFpbQCQTgAPeHBTdWNjZXNzRmxpZ2h0AJBOAAx4cEZhaWxGbGlnaHQA0A8ACHhwQ2FsbEVTAKCNBgAMeHBDdXN0b21OYW1lAMCEPQAKeHBOZXdTTGFuZADAlrECAA54cFVwZ3JhZGVJbmZyYQCQTgAHeHBNZXJnZQDAhD0ACXhwT25ib2FyZADAhD0ABnhwSGVhbACQTgEJbGV2ZWxCeVhQAQJ4cAkAawMFDHhwTGV2ZWxTY2FsZQkAbAYFAnhwAAQFD3hwTGV2ZWxSZWNpcFBvdwAEAAQFBERPV04FBlNDQUxFOAEJbWF4SGVhbHRoAQVsZXZlbAkAZAIAZAUFbGV2ZWwBB2xldmVsVXACCWN1cnJMZXZlbAVuZXdYUAQIbmV3TGV2ZWwJAQlsZXZlbEJ5WFABBQVuZXdYUAkAzAgCBQhuZXdMZXZlbAkAzAgCCQBoAgUSbnVtUG9pbnRzT25MZXZlbFVwCQBlAgUIbmV3TGV2ZWwFCWN1cnJMZXZlbAUDbmlsAQxnZXREdWNrU3RhdHMED3N0YWtpbmdDb250cmFjdAtkdWNrQXNzZXRJZApidWZmRWZmZWN0CmZvcmNlQnVmZnMEBWNoYXJzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEMa2V5RHVja0NoYXJzAQULZHVja0Fzc2V0SWQCCTBfMF8wXzBfMAIBXwQDbHZsCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBDGtleUR1Y2tMZXZlbAEFC2R1Y2tBc3NldElkAAAEBmhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQJAQltYXhIZWFsdGgBBQNsdmwECnN0YXRlQnVmZnMJALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJAQxrZXlEdWNrQnVmZnMBBQtkdWNrQXNzZXRJZAIJMF8wXzBfMF8wAgFfCQDOCAIJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQxjaGFyU3RyZW5ndGgJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQxjaGFyQWNjdXJhY3kJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQ1jaGFySW50ZWxsZWN0CQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckVuZHVyYW5jZQkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDWNoYXJEZXh0ZXJpdHkJAMwIAgUDbHZsCQDMCAIFBmhlYWx0aAUDbmlsAwUKZm9yY2VCdWZmcwkAzAgCBQpidWZmRWZmZWN0CQDMCAIFCmJ1ZmZFZmZlY3QJAMwIAgUKYnVmZkVmZmVjdAkAzAgCBQpidWZmRWZmZWN0CQDMCAIFCmJ1ZmZFZmZlY3QFA25pbAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKc3RhdGVCdWZmcwUMY2hhclN0cmVuZ3RoCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpzdGF0ZUJ1ZmZzBQxjaGFyQWNjdXJhY3kJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCnN0YXRlQnVmZnMFDWNoYXJJbnRlbGxlY3QJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCnN0YXRlQnVmZnMFDWNoYXJFbmR1cmFuY2UJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCnN0YXRlQnVmZnMFDWNoYXJEZXh0ZXJpdHkFA25pbAEOZ2V0Um9iYmVyeURhdGECD3N0YWtpbmdDb250cmFjdAtkdWNrQXNzZXRJZAQLbGFzdFJvYkNvc3QJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQEYa2V5TGFzdFJvYmJlcnlDb3N0QnlEdWNrAQULZHVja0Fzc2V0SWQAAAQLbGFzdFJvYlRpbWUJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQEYa2V5TGFzdFJvYmJlcnlUaW1lQnlEdWNrAQULZHVja0Fzc2V0SWQAAAQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQHcm9iQ29zdAkAlgMBCQDMCAIFDnJvYmJlcnlDb3N0TWluCQDMCAIJAGUCBQtsYXN0Um9iQ29zdAkAaAIFFHJvYmJlcnlDb29sZG93bkNvZWZmCQBlAgUDbm93BQtsYXN0Um9iVGltZQUDbmlsBAlkdWNrU3RhdGUJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQETa2V5RHVja1JvYmJlcnlTdGF0ZQEFC2R1Y2tBc3NldElkAAAECmxvY2tlZExhbmQJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQETa2V5TG9ja2VkTGFuZEJ5RHVjawEFC2R1Y2tBc3NldElkAgAEB2xhbmRFVEEJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQESa2V5TGFuZENvb2xkb3duRVRBAQUKbG9ja2VkTGFuZAAACQCXCgUFB3JvYkNvc3QFC2xhc3RSb2JUaW1lBQlkdWNrU3RhdGUFCmxvY2tlZExhbmQFB2xhbmRFVEEACkxBTkRQUkVGSVgCBExBTkQACkRVQ0tQUkVGSVgCBERVQ0sACkFSVFBSRVNBTEUCB1BSRVNBTEUABk5VTVJFUwAGABhNQVhfTEFORFNfU1RBS0VEX0JZX1VTRVIAGQAPREFJTFlSRVNCWVBJRUNFAID40gEADFdITVVMVElQTElFUgCAyK+gJQAPREVGQVVMVExPQ0FUSU9OAg9BZnJpY2FfRl9BZnJpY2EAEFJFU09VUkNFUFJJQ0VNSU4A1bUCAApFU1NFTExDT0VGAAoAFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQDQhgMAElRFTl9NSU5VVEVTX01JTExJUwDAzyQAF0FMTE9XRURfRlJFRV9ERUxJVkVSSUVTAAEAGkFDUkVTX0ZPUl9ERUxJVkVSWV9BVFRFTVBUAIDh6xcACXByb2RUeXBlcwkAzAgCAhBGaXJzdCBBaWQgS2l0IEwxCQDMCAICEEZpcnN0IEFpZCBLaXQgTDIJAMwIAgIQRmlyc3QgQWlkIEtpdCBMMwkAzAgCAgtCYWNrcGFjayBMMQkAzAgCAgtCYWNrcGFjayBMMgkAzAgCAgtCYWNrcGFjayBMMwkAzAgCAg5Gb29kIFJhdGlvbiBMMQkAzAgCAg5Gb29kIFJhdGlvbiBMMgkAzAgCAg5Gb29kIFJhdGlvbiBMMwkAzAgCAgtKZXQgUGFjayBMMQkAzAgCAgtKZXQgUGFjayBMMgkAzAgCAgtKZXQgUGFjayBMMwkAzAgCAglTaGllbGQgTDEJAMwIAgIJU2hpZWxkIEwyCQDMCAICCVNoaWVsZCBMMwkAzAgCAgdNaW5lIEwxCQDMCAICB01pbmUgTDIJAMwIAgIHTWluZSBMMwkAzAgCAgdUcmFwIEwxCQDMCAICB1RyYXAgTDIJAMwIAgIHVHJhcCBMMwUDbmlsAApjb250aW5lbnRzCQDMCAICCEFtZXJpY2FzCQDMCAICBkV1cm9wZQkAzAgCAgRBc2lhCQDMCAICBkFmcmljYQkAzAgCAgdPY2VhbmlhBQNuaWwACUNPRUZGMk1BVACAreIEABBmb3J0QWxsb3dlZFByb2RzCQDMCAIADwkAzAgCABAJAMwIAgARCQDMCAIAEgkAzAgCABMJAMwIAgAUBQNuaWwAEHByb2R1Y3Rpb25NYXRyaXgJAMwIAgIlOF84XzhfMTdfMTdfNDJfMTJfMF8zMF8wLDAsMCwwLDAsMCwwXwkAzAgCAiU4XzhfOF8xN18xN180Ml8yNF8wXzYwXzAsMCw1LDIsMCwwLDBfCQDMCAICJzhfOF84XzE3XzE3XzQyXzM2XzBfMTIwXzAsMCwxMCw0LDAsMCwwXwkAzAgCAik4XzE5XzE5XzhfMjdfMTlfMjZfMV8yMF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAik4XzE5XzE5XzhfMjdfMTlfNTJfMV80MF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAik4XzE5XzE5XzhfMjdfMTlfNzhfMV84MF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAiU4XzhfOF84XzhfNjBfMTNfMl8yXzAsMCwwLDAsMCwwLDBfMDExCQDMCAICJThfOF84XzhfOF82MF8yNl8yXzRfMCwwLDAsMCwwLDAsMF8wMTEJAMwIAgIlOF84XzhfOF84XzYwXzM5XzJfOF8wLDAsMCwwLDAsMCwwXzAxMQkAzAgCAikzMF8zMF8zXzE3XzE3XzNfMzBfM18zMF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAikzMF8zMF8zXzE3XzE3XzNfNjBfM181MF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAikzMF8zMF8zXzE3XzE3XzNfOTBfM183MF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAisxOF8xOF8xMF8xOF8xOF8xOF8xMV80XzEwXzAsMCwwLDAsMCwwLDBfMjAxCQDMCAICKzE4XzE4XzEwXzE4XzE4XzE4XzIyXzRfMjBfMCwwLDAsMCwwLDAsMF8yMDEJAMwIAgIrMThfMThfMTBfMThfMThfMThfMzNfNF8zMF8wLDAsMCwwLDAsMCwwXzIwMQkAzAgCAio0XzEzXzIyXzRfMzVfMjJfMjNfMF81MCwxLDBfMCwwLDAsMCwwLDAsMF8JAMwIAgIqNF8xM18yMl80XzM1XzIyXzQ2XzBfNTAsMSwxXzAsMiw1LDAsMCwwLDBfCQDMCAICKzRfMTNfMjJfNF8zNV8yMl82OV8wXzUwLDIsMV8wLDUsMTAsMCwwLDAsMF8JAMwIAgIqNV8yNV80MF81XzEwXzE1XzIwXzFfMzAsMSwxXzAsMCwwLDAsMCwwLDBfCQDMCAICKjVfMjVfNDBfNV8xMF8xNV80MF8xXzMwLDEsMl8yLDEsMywwLDAsMCwwXwkAzAgCAio1XzI1XzQwXzVfMTBfMTVfNjBfMV8zMCwxLDNfNSwyLDgsMCwwLDAsMF8FA25pbAAJcklkeENvZWZmAAYACnJJZHhFZmZlY3QACAAQcklkeFJlcXVpcmVtZW50cwAJAAlySWR4U2xvdHMACgAOUFJPRFVDVFBLR1NJWkUACgALd2hJZHhMZXZlbHMAAAAId2hJZHhSZXMAAQAId2hJZHhNYXQAAgAJd2hJZHhQcm9kAAMACXdoSWR4TE9GVAAEAAl2b2xMb2NrZWQAAAALdm9sT2NjdXBpZWQAAQAHdm9sRnJlZQACAAh2b2xUb3RhbAADAApicElkeExldmVsAAAACGJwSWR4UmVzAAEACGJwSWR4TWF0AAIACWJwSWR4UHJvZAADAA9sb2NJZHhDb250aW5lbnQAAAAKbG9jSWR4VHlwZQABAAhsb2NJZHhJZAACARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBB2Fzc2V0SWQJAKwCAgIDbm9fBQdhc3NldElkARprZXlMYW5kQXNzZXRJZFRvQ3VzdG9tTmFtZQEHYXNzZXRJZAkArAICAgVsY25hXwUHYXNzZXRJZAEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEHYXNzZXRJZAkArAICAgNzdF8FB2Fzc2V0SWQBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgR0eXBlB2Fzc2V0SWQJALkJAgkAzAgCAgNsYXMJAMwIAgUEdHlwZQkAzAgCBQdhc3NldElkBQNuaWwCAV8BImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDB25mdFR5cGUHYXNzZXRJZAlvd25lckFkZHIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgZzdHRhb18FB25mdFR5cGUCAV8FB2Fzc2V0SWQCAV8FCW93bmVyQWRkcgESa2V5V2FyZWhvdXNlQnlMYW5kAQtsYW5kQXNzZXRJZAkArAICAgN3aF8FC2xhbmRBc3NldElkARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQdhc3NldElkCQCsAgICC2luZnJhTGV2ZWxfBQdhc3NldElkARdrZXlGb3J0aWZpY2F0aW9uc0J5TGFuZAELbGFuZEFzc2V0SWQJAKwCAgIPZm9ydGlmaWNhdGlvbnNfBQtsYW5kQXNzZXRJZAEaa2V5RHVja0Fzc2V0SWRUb0N1c3RvbU5hbWUBB2Fzc2V0SWQJAKwCAgIYZHVja0N1c3RvbU5hbWVCeUFzc2V0SWRfBQdhc3NldElkARZrZXlBZGRyZXNzVG9DdXN0b21OYW1lAQRhZGRyCQCsAgICGGFjY291bnRDdXN0b21OYW1lQnlBZGRyXwUEYWRkcgEPa2V5QWRkcmVzc1JlZkJ5AQRhZGRyCQCsAgICCWFjY1JlZkJ5XwUEYWRkcgEca2V5T25ib2FyZEFydEFjdGl2YXRlZE9uRHVjawELZHVja0Fzc2V0SWQJAKwCAgIab25ib2FyZEFydEFjdGl2YXRlZE9uRHVja18FC2R1Y2tBc3NldElkARxrZXlPbmJvYXJkQXJ0RHVja0FjdGl2YXRlZEJ5AQRhZGRyCQCsAgICGm9uYm9hcmRBcnRBY3RpdmF0ZWREdWNrQnlfBQRhZGRyARNrZXlBZGRyZXNzUmVmZXJyYWxzAQRhZGRyCQCsAgICDWFjY1JlZmVycmFsc18FBGFkZHIBEGtleUR1Y2tJZFRvT3duZXIBB2Fzc2V0SWQJAKwCAgIKZHVja093bmVyXwUHYXNzZXRJZAEUa2V5U3Rha2VkRHVja0J5T3duZXIBCW93bmVyQWRkcgkArAICAhJzdGFrZWREdWNrQnlPd25lcl8FCW93bmVyQWRkcgERa2V5QmFja3BhY2tCeUR1Y2sBC2R1Y2tBc3NldElkCQCsAgICCWJhY2tQYWNrXwULZHVja0Fzc2V0SWQBD2tleUR1Y2tMb2NhdGlvbgELZHVja0Fzc2V0SWQJAKwCAgINZHVja0xvY2F0aW9uXwULZHVja0Fzc2V0SWQBFWtleVVzZXJHd2xSZWxlYXNlVGltZQEIdXNlckFkZHIJAKwCAgIaJXMlc19fdXNlckd3bFJlbGVhc2VUaW1lX18FCHVzZXJBZGRyAQ5rZXlFc1dhcmVob3VzZQACGmVtZXJnZW5jeVdhcmVob3VzZVByb2R1Y3RzAA9kZWxpdmVyeUZ1bmRLZXkCDGRlbGl2ZXJ5RnVuZAARZGVsaXZlcnlMb2NrZWRLZXkCDmRlbGl2ZXJ5TG9ja2VkAA1sYXN0VG91cklkS2V5Ag4lc19fbGFzdFRvdXJJZAEVa2V5VG91clN0YXRpY0RhdGFCeUlkAQN0SWQJAKwCAgIWJXMlZF9fdG91clN0YXRpY0RhdGFfXwkApAMBBQN0SWQBFmtleVRvdXJEeW5hbWljRGF0YUJ5SWQBA3RJZAkArAICAhclcyVkX190b3VyRHluYW1pY0RhdGFfXwkApAMBBQN0SWQBGmtleUJlc3RSZXN1bHRCeVRvdXJBbmREdWNrAgN0SWQLZHVja0Fzc2V0SWQJALkJAgkAzAgCAh8lcyVkJXNfX2Jlc3RSZXN1bHRCeVRvdXJBbmREdWNrCQDMCAIJAKQDAQUDdElkCQDMCAIFC2R1Y2tBc3NldElkBQNuaWwCAl9fAAlpZHhTdGF0aWMAAAAKaWR4RHluYW1pYwABAAp0U3RhdGljRW5kAAYADnREeW5hbWljU3RhdHVzAAEBC2dldFRvdXJEYXRhAgx0b3VyQ29udHJhY3QDdElkBAZzdGF0aWMJALUJAgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFDHRvdXJDb250cmFjdAkBFWtleVRvdXJTdGF0aWNEYXRhQnlJZAEFA3RJZAkArAICCQCsAgICGUVycm9yIHJlYWRpbmcgdG91cm5hbWVudCAJAKQDAQUDdElkAgUgZGF0YQICX18EB2R5bmFtaWMJALwJAgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFDHRvdXJDb250cmFjdAkBFmtleVRvdXJEeW5hbWljRGF0YUJ5SWQBBQN0SWQJAKwCAgkArAICAhlFcnJvciByZWFkaW5nIHRvdXJuYW1lbnQgCQCkAwEFA3RJZAIFIGRhdGECAl9fCQDMCAIFBnN0YXRpYwkAzAgCBQdkeW5hbWljBQNuaWwBDmlzSW5Ub3VybmFtZW50Agx0b3VyQ29udHJhY3QIbG9jYXRpb24EBmxhc3RJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQx0b3VyQ29udHJhY3QFDWxhc3RUb3VySWRLZXkAAAQDbG9jCQC1CQIFCGxvY2F0aW9uAgFfBANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAV0RGF0YQkBC2dldFRvdXJEYXRhAgUMdG91ckNvbnRyYWN0BQZsYXN0SWQEBnN0YXRpYwkAkQMCBQV0RGF0YQUJaWR4U3RhdGljBAdkeW5hbWljCQCRAwIFBXREYXRhBQppZHhEeW5hbWljAwMDCQAAAgkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCAVQJAAACCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDbG9jBQ9sb2NJZHhDb250aW5lbnQFBmxhc3RJZAcJAAACCQCRAwIFB2R5bmFtaWMFDnREeW5hbWljU3RhdHVzAgpJTlBST0dSRVNTBwkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZzdGF0aWMFCnRTdGF0aWNFbmQFA25vdwcBDGlzSW5EZWxpdmVyeQEIbG9jYXRpb24EA2xvYwkAtQkCBQhsb2NhdGlvbgIBXwQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQJc3RhcnRUaW1lCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDbG9jBQ9sb2NJZHhDb250aW5lbnQECGRpc3RhbmNlCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDbG9jBQhsb2NJZHhJZAMDCQAAAgkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCAUQJAGYCCQBkAgUJc3RhcnRUaW1lBRJURU5fTUlOVVRFU19NSUxMSVMFA25vdwcJAGcCAAMFCGRpc3RhbmNlBwEPaXNVc3VhbExvY2F0aW9uAQhsb2NhdGlvbgQHbG9jVHlwZQkAkQMCCQC1CQIFCGxvY2F0aW9uAgFfBQpsb2NJZHhUeXBlAwkBAiE9AgUHbG9jVHlwZQIBVAkBAiE9AgUHbG9jVHlwZQIBRAcBCW9uTWlzc2lvbgIMdG91ckNvbnRyYWN0CGxvY2F0aW9uBAZsYXN0SWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUMdG91ckNvbnRyYWN0BQ1sYXN0VG91cklkS2V5AAAEA2xvYwkAtQkCBQhsb2NhdGlvbgIBXwQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQFdERhdGEJAQtnZXRUb3VyRGF0YQIFDHRvdXJDb250cmFjdAUGbGFzdElkBAZzdGF0aWMJAJEDAgUFdERhdGEFCWlkeFN0YXRpYwQHZHluYW1pYwkAkQMCBQV0RGF0YQUKaWR4RHluYW1pYwQHbG9jVHlwZQkAkQMCBQNsb2MFCmxvY0lkeFR5cGUDCQAAAgUHbG9jVHlwZQIBRAYDAwMJAAACCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIBVAkAAAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQNsb2MFD2xvY0lkeENvbnRpbmVudAUGbGFzdElkBwkAAAIJAJEDAgUHZHluYW1pYwUOdER5bmFtaWNTdGF0dXMCCklOUFJPR1JFU1MHCQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBnN0YXRpYwUKdFN0YXRpY0VuZAUDbm93BwESZ2V0UmVjaXBlTWF0ZXJpYWxzAQZyZWNpcGUJAGgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGcmVjaXBlBQlySWR4Q29lZmYFCUNPRUZGMk1BVAEMY2hlYXRBdHRlbXB0AwZvbGRMb2MGbmV3TG9jCWNoZWF0Q2FzZQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhZDaGVhdCBhdHRlbXB0OiBvbGRMb2M9BQZvbGRMb2MCCSwgbmV3TG9jPQUGbmV3TG9jAgcsIGNhc2U9CQCkAwEFCWNoZWF0Q2FzZQAWS1NfU0VQQVJBVEVfUFVCTElDX0tFWQcAGEtTX0FMTE9XX0JJR19JTkZSQV9NRVJHRQcACkRBWV9NSUxMSVMAgLiZKQAFY2hhaW4JAMkBAgkAygECCAUEdGhpcwVieXRlcwABAAEAC3VzZHRBc3NldElkBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwASCE2nqyCAM/TtG7yo7ui5O8yYLdC136B5ao1CP5qA//uQMJAAACAQFUBQckbWF0Y2gwASBVsdifcoeC7+XjW42sBatl3ppDoS8WuwXzGreHpfHFGAkAAgECDVVua25vd24gY2hhaW4AFWRlZmF1bHRSZXN0QWRkcmVzc1N0cgQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAIjM1BRQ3V2RmJ2aDRMa1BVbnJuVTF6M2puYkExcDltM1dOaHYDCQAAAgEBVAUHJG1hdGNoMAIjM011bWtHR3p0Q0tBWHBXRHF4a2Rkb2ZxWFNVYnFRa3ZTSnkJAAIBAg1Vbmtub3duIGNoYWluABFJbmZyYVVwZ3JhZGVDb3N0UwQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMACAyK+gJQMJAAACAQFUBQckbWF0Y2gwAIDC1y8JAAIBAg1Vbmtub3duIGNoYWluAA5hcmJpdHJhZ2VEZWxheQQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAUKREFZX01JTExJUwMJAAACAQFUBQckbWF0Y2gwAODUAwkAAgECDVVua25vd24gY2hhaW4AE0RFTElWRVJZX1BVTklTSE1FTlQEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAAgJeTBQMJAAACAQFUBQckbWF0Y2gwAKD3NgkAAgECDVVua25vd24gY2hhaW4AA1NFUAICX18ABU1VTFQ2AMCEPQAFTVVMVDgAgMLXLwAFU1NJWkUAGQAFTVNJWkUAZAAFTFNJWkUA4QEABlhMU0laRQCQAwAHWFhMU0laRQDxBAAFSVRFUjYJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAEPZ2V0U3RyaW5nT3JGYWlsAgdhZGRyZXNzA2tleQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFB2FkZHJlc3MFA2tleQkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQdhZGRyZXNzCQDMCAICAS4JAMwIAgUDa2V5CQDMCAICDyBpcyBub3QgZGVmaW5lZAUDbmlsAgAAEUlkeENmZ1N0YWtpbmdEYXBwAAEAEUlkeENmZ0Vjb25vbXlEYXBwAAIAFElkeENmZ0dvdmVybmFuY2VEYXBwAAMADUlkeENmZ1dsZ0RhcHAABAAUSWR4Q2ZnVG91cm5hbWVudERhcHAABwAPSWR4Q2ZnQWNyZXNEYXBwAAgBCmtleVJlc3RDZmcAAg4lc19fcmVzdENvbmZpZwEOa2V5UmVzdEFkZHJlc3MAAgwlc19fcmVzdEFkZHIBEXJlYWRSZXN0Q2ZnT3JGYWlsAQRyZXN0CQC8CQIJAQ9nZXRTdHJpbmdPckZhaWwCBQRyZXN0CQEKa2V5UmVzdENmZwAFA1NFUAEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgdyZXN0Q2ZnA2lkeAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUHcmVzdENmZwUDaWR4CQCsAgICKlJlc3QgY2ZnIGRvZXNuJ3QgY29udGFpbiBhZGRyZXNzIGF0IGluZGV4IAkApAMBBQNpZHgADHJlc3RDb250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzCQEOa2V5UmVzdEFkZHJlc3MABRVkZWZhdWx0UmVzdEFkZHJlc3NTdHIAB3Jlc3RDZmcJARFyZWFkUmVzdENmZ09yRmFpbAEFDHJlc3RDb250cmFjdAAPc3Rha2luZ0NvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwURSWR4Q2ZnU3Rha2luZ0RhcHAAD2Vjb25vbXlDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFEUlkeENmZ0Vjb25vbXlEYXBwAAtnb3ZDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFFElkeENmZ0dvdmVybmFuY2VEYXBwAAt3bGdDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFDUlkeENmZ1dsZ0RhcHAAEnRvdXJuYW1lbnRDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFFElkeENmZ1RvdXJuYW1lbnREYXBwAA1hY3Jlc0NvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwUPSWR4Q2ZnQWNyZXNEYXBwAApyZWNMYW5kTnVtAAAAC3JlY0xhbmRTaXplAAEAC3JlY1RlcnJhaW5zAAIADHJlY0NvbnRpbmVudAADAA13bGdBc3NldElkS2V5Agt3bGdfYXNzZXRJZAAKd2xnQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCcCAIFC3dsZ0NvbnRyYWN0BQ13bGdBc3NldElkS2V5AhhXTEdPTEQgaXMgbm90IGlzc3VlZCB5ZXQAD2FjcmVzQXNzZXRJZEtleQIMYWNyZXNBc3NldElkAAxhY3Jlc0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnAgCBQ1hY3Jlc0NvbnRyYWN0BQ9hY3Jlc0Fzc2V0SWRLZXkCF0FDUkVTIGlzIG5vdCBpc3N1ZWQgeWV0AAtyYW5kb21EZWxheQACAQlrZXlDb21taXQBB2FkZHJlc3MJAKwCAgITZmluaXNoQmxvY2tGb3JBZGRyXwUHYWRkcmVzcwERa2V5UmVzUHJvcG9ydGlvbnMAAhNyZXNUeXBlc1Byb3BvcnRpb25zARZrZXlSZXNUeXBlc0J5Q29udGluZW50AQljb250aW5lbnQJAKwCAgIUcmVzVHlwZXNCeUNvbnRpbmVudF8FCWNvbnRpbmVudAEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQlvd25lckFkZHIJAKwCAgITc3Rha2VkTGFuZHNCeU93bmVyXwUJb3duZXJBZGRyARZrZXlTdGFrZWRQaWVjZXNCeU93bmVyAQlvd25lckFkZHIJAKwCAgIUc3Rha2VkUGllY2VzQnlPd25lcl8FCW93bmVyQWRkcgEIYXNTdHJpbmcBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwBQFzCQACAQIYZmFpbCB0byBjYXN0IGludG8gU3RyaW5nAQVhc0ludAEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAgNJbnQEAW4FByRtYXRjaDAFAW4JAAIBAhVmYWlsIHRvIGNhc3QgaW50byBJbnQBCWFzQW55TGlzdAEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAglMaXN0W0FueV0EAWwFByRtYXRjaDAFAWwJAAIBAhtmYWlsIHRvIGNhc3QgaW50byBMaXN0W0FueV0BCWFzQm9vbGVhbgEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAgdCb29sZWFuBAFzBQckbWF0Y2gwBQFzCQACAQIZZmFpbCB0byBjYXN0IGludG8gQm9vbGVhbgEPbnVtUGllY2VzQnlTaXplAQhsYW5kU2l6ZQQHJG1hdGNoMAUIbGFuZFNpemUDCQAAAgIBUwUHJG1hdGNoMAUFU1NJWkUDCQAAAgIBTQUHJG1hdGNoMAUFTVNJWkUDCQAAAgIBTAUHJG1hdGNoMAUFTFNJWkUDCQAAAgICWEwFByRtYXRjaDAFBlhMU0laRQMJAAACAgNYWEwFByRtYXRjaDAFB1hYTFNJWkUJAAIBAhFVbmtub3duIGxhbmQgc2l6ZQEHaXNEaWdpdAEBcwkBCWlzRGVmaW5lZAEJALYJAQUBcwEKa2V5QmxvY2tlZAACEGNvbnRyYWN0c0Jsb2NrZWQBEWtleUxhc3RUeElkQnlVc2VyAQRhZGRyCQCs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ZFRvQXNzZXRJZAEHbGFuZE51bQkArAICAgNsYV8FB2xhbmROdW0BHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIHYXNzZXRJZAlvd25lckFkZHIJAKwCAgkArAICCQCsAgICBWlsYW9fBQdhc3NldElkAgFfBQlvd25lckFkZHIBEWtleUxhbmROdW1Ub093bmVyAQdsYW5kTnVtCQCsAgICA2xvXwUHbGFuZE51bQEaa2V5RHVja0N1c3RvbU5hbWVUb0Fzc2V0SWQBBG5hbWUJAKwCAgIRZHVja0J5Q3VzdG9tTmFtZV8FBG5hbWUBFmtleUN1c3RvbU5hbWVUb0FkZHJlc3MBBG5hbWUJAKwCAgIUYWNjb3VudEJ5Q3VzdG9tTmFtZV8FBG5hbWUBCWtleU9sZGllcwACCm9sZGllc0xpc3QAC2NsYWltTW9kZVdoAAAADWNsYWltTW9kZUR1Y2sAAQATY2xhaW1Nb2RlV2hUaGVuRHVjawACAAhmbEhlYWx0aAAAAAtmbFRpbWVzdGFtcAAFAAdmbEJvbnVzAAYAC2ZsUHJvZHNVc2VkAAcBB25mdE5hbWUCB2xhbmROdW0IbGFuZFNpemUJAKwCAgkArAICBQpMQU5EUFJFRklYBQdsYW5kTnVtBQhsYW5kU2l6ZQEIdG9Wb2x1bWUCBmFtb3VudAdwa2dTaXplBARwa2dzAwkAZwIFBmFtb3VudAAACQBpAgkAZQIJAGQCBQZhbW91bnQFB3BrZ1NpemUAAQUHcGtnU2l6ZQkBAS0BCQBpAgkAZQIJAGQCCQEBLQEFBmFtb3VudAUHcGtnU2l6ZQABBQdwa2dTaXplCQBoAgUEcGtncwUFTVVMVDgBE2Rpc3RyaWJ1dGVCeVdlaWdodHMCBXRvdGFsB3dlaWdodHMEA3N1bQkAZAIJAGQCCQBkAgkAZAIJAGQCCQCRAwIFB3dlaWdodHMAAAkAkQMCBQd3ZWlnaHRzAAEJAJEDAgUHd2VpZ2h0cwACCQCRAwIFB3dlaWdodHMAAwkAkQMCBQd3ZWlnaHRzAAQJAJEDAgUHd2VpZ2h0cwAFAwkAZwIAAAUDc3VtCQACAQIQWmVybyB3ZWlnaHRzIHN1bQQFbm9ybTYJAGsDBQV0b3RhbAUFTVVMVDYFA3N1bQoBCm5vcm1hbGl6ZXICA2FjYwRlbGVtCQDNCAIFA2FjYwkAawMFBGVsZW0FBW5vcm02BQVNVUxUNgoAAiRsBQd3ZWlnaHRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQpub3JtYWxpemVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGARJnZXROZWVkZWRNYXRlcmlhbHMBBXRvdGFsBAVwcm9wcwkAtQkCCQEFdmFsdWUBCQCiCAEJARFrZXlSZXNQcm9wb3J0aW9ucwACAV8DCQECIT0CCQCQAwEFBXByb3BzBQZOVU1SRVMJAAIBAhZXcm9uZyBwcm9wb3J0aW9ucyBkYXRhBAFyCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwAACQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwABCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwACCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwADCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwAECQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwAFBQNuaWwJARNkaXN0cmlidXRlQnlXZWlnaHRzAgUFdG90YWwFAXIBEXN1YnRyYWN0TWF0ZXJpYWxzAwxzaG91bGRVc2VNYXQDaGFzCXRvdGFsTmVlZAQEbmVlZAkBEmdldE5lZWRlZE1hdGVyaWFscwEFCXRvdGFsTmVlZAoBCnN1YnRyYWN0b3ICA2FjYwNpZHgEBnJlc3VsdAkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQNoYXMFA2lkeAkAkQMCBQRuZWVkBQNpZHgDCQBmAgAABQZyZXN1bHQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIYTm90IGVub3VnaCBt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BGZyZWUEBGhlYWQJAMkBAgUFcExpc3QJAGgCAAgFCnByb2R1Y3RJZHgEBGN1cnIJALEJAQkAyQECCQDKAQIFBXBMaXN0CQBoAgAIBQpwcm9kdWN0SWR4AAgEBHRhaWwJAMoBAgUFcExpc3QJAGgCAAgJAGQCBQpwcm9kdWN0SWR4AAEEBnJlY2lwZQkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgFCnByb2R1Y3RJZHgCAV8DAwkBASEBBQppc1Bvc2l0aXZlCQBmAgUFY291bnQFBGN1cnIHCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICCVlvdSBoYXZlIAkApAMBBQRjdXJyAgQgb2YgCQCRAwIFCXByb2RUeXBlcwUKcHJvZHVjdElkeAITLCBidXQgdHJpZWQgdG8gdXNlIAkApAMBBQVjb3VudAQGbmV3QW10AwMJAQEhAQUKaXNQb3NpdGl2ZQkBFWNoZWNrU3RhdFJlcXVpcmVtZW50cwIFCWR1Y2tTdGF0cwkAtQkCCQCRAwIFBnJlY2lwZQUQcklkeFJlcXVpcmVtZW50cwIBLAcJAGUCBQRjdXJyBQVjb3VudAkAZAIFBGN1cnIFBWNvdW50BAhkZWx0YVZvbAkAZQIJAQh0b1ZvbHVtZQIFBm5ld0FtdAUOUFJPRFVDVFBLR1NJWkUJAQh0b1ZvbHVtZQIFBGN1cnIFDlBST0RVQ1RQS0dTSVpFCQCVCgMJAMsBAgkAywECBQRoZWFkCQCaAwEFBm5ld0FtdAUEdGFpbAkAZAIFCG9jY3VwaWVkBQhkZWx0YVZvbAkAZQIFBGZyZWUFCGRlbHRhVm9sAQhhZGRQcm9kQgcGaWR4Q250BXBMaXN0CmlzUG9zaXRpdmUHc2VnbWVudAdtYWluQXV4BHNsb3QJZHVja1N0YXRzBAVwYXJ0cwkAtQkCBQZpZHhDbnQCAToDCQECIT0CCQCQAwEFBXBhcnRzAAIJAAIBAihJbmNvcnJlY3QgZm9ybWF0LCBzaG91bGQgYmUgaW5kZXg6YW1vdW50AwMJAQEhAQUKaXNQb3NpdGl2ZQkBAiE9AgkAsQIBCQCRAwIFBXBhcnRzAAAAAgcJAAIBAitQcm9kdWN0IGlkeCBzaG91bGQgYmUgMiBkaWdpdHMsIHplcm8gcGFkZGVkBApwcm9kdWN0SWR4CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcGFydHMAAAQFY291bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwYXJ0cwABAwMJAGYCAAAFCnByb2R1Y3RJZHgGCQBnAgUKcHJvZHVjdElkeAkAkAMBBRBwcm9kdWN0aW9uTWF0cml4CQACAQITVW5rbm93biBwcm9kdWN0IGlkeAMJAGYCAAAFBWNvdW50CQACAQIXQ291bnQgY2FuJ3QgYmUgbmVnYXRpdmUDCQBmAgUFY291bnQFDU1BWFBST0RJTlNMT1QJAAIBCQCsAgIJAKwCAgkArAICAhRDYW4ndCBwdXQgbW9yZSB0aGFuIAkApAMBBQ1NQVhQUk9ESU5TTE9UAgQgb2YgCQCRAwIFCXByb2RUeXBlcwUKcHJvZHVjdElkeAMJAAACBQVjb3VudAAACQCUCgIFBXBMaXN0BwQEaGVhZAkAyQECBQVwTGlzdAkAaAIACAUKcHJvZHVjdElkeAQEY3VycgkAsQkBCQDJAQIJAMoBAgUFcExpc3QJAGgCAAgFCnByb2R1Y3RJZHgACAQEdGFpbAkAygECBQVwTGlzdAkAaAIACAkAZAIFCnByb2R1Y3RJZHgAAQQGcmVjaXBlCQC1CQIJAJEDAgUQcHJvZHVjdGlvbk1hdHJpeAUKcHJvZHVjdElkeAIBXwMDCQEBIQEFCmlzUG9zaXRpdmUJAGYCBQVjb3VudAUEY3VycgcJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIJWW91IGhhdmUgCQCkAwEFBGN1cnICBCBvZiAJAJEDAgUJcHJvZFR5cGVzBQpwcm9kdWN0SWR4AhMsIGJ1dCB0cmllZCB0byB1c2UgCQCkAwEFBWNvdW50BAlpc0JpZ0l0ZW0DAwkBASEBBQppc1Bvc2l0aXZlCQEVY2hlY2tTdGF0UmVxdWlyZW1lbnRzAgUJZHVja1N0YXRzCQC1CQIJAJEDAgUGcmVjaXBlBRBySWR4UmVxdWlyZW1lbnRzAgEsBwQGY29tcGF0CQCRAwIFBnJlY2lwZQUJcklkeFNsb3RzAwkAAAIFBmNvbXBhdAIACQACAQIXSXRlbSBjYW5ub3QgYmUgZXF1aXBwZWQEAWMJAQ1wYXJzZUludFZhbHVlAQUGY29tcGF0BARjU2VnCQBpAgUBYwBkAwkBAiE9AgUHc2VnbWVudAUEY1NlZwkAAgECFFNlZ21lbnQgaW5jb21wYXRpYmxlBAhjTWFpbkF1eAkAaQIJAGoCBQFjAGQACgMJAQIhPQIFB21haW5BdXgFCGNNYWluQXV4CQACAQIRU2xvdCBpbmNvbXBhdGlibGUECWNOdW1TbG90cwkAagIFAWMACgMDCQECIT0CBQRzbG90AAAJAGYCBQljTnVtU2xvdHMAAQcJAAIBAh5CaWcgaXRlbXMgc2hvdWxkIG9jY3VweSBzbG90IDAJAGYCBQljTnVtU2xvdHMAAQcJAJQKAgkAywECCQDLAQIFBGhlYWQJAJoDAQkAZAIFBGN1cnIDBQppc1Bvc2l0aXZlBQVjb3VudAkBAS0BBQVjb3VudAUEdGFpbAUJaXNCaWdJdGVtAQtzbG90c0dyb3VwQgYBZwRicEluCmlzUG9zaXRpdmUHc2VnbWVudAdtYWluQXV4BXN0YXRzAwkBAiE9AgUBZwIABAVzbG90cwkAtQkCBQFnAgEsAwkAZgIJAJADAQUFc2xvdHMFCE1BWFNMT1RTCQACAQISV3Jvbmcgc2xvdHMgZm9ybWF0BAJzMAkAkQMCBQVzbG90cwAABAJzMQMJAGYCCQCQAwEFBXNsb3RzAAEJAJEDAgUFc2xvdHMAAQIAAwMJAAACBQJzMAIACQAAAgUCczECAAcFBGJwSW4EBXRtcFMwAwkBAiE9AgUCczACAAkBCGFkZFByb2RCBwUCczAFBGJwSW4FCmlzUG9zaXRpdmUFB3NlZ21lbnQFB21haW5BdXgAAAUFc3RhdHMJAJQKAgUEYnBJbgcDCQECIT0CBQJzMQIAAwgFBXRtcFMwAl8yCQACAQIeQmlnIGl0ZW0gYWxyZWFkeSBvY2N1cGllcyBzbG90CAkBCGFkZFByb2RCBwUCczEIBQV0bXBTMAJfMQUKaXNQb3NpdGl2ZQUHc2VnbWVudAUHbWFpbkF1eAABBQVzdGF0cwJfMQgFBXRtcFMwAl8xBQRicEluAQZkcmVzc0IEB3NlZ0xpc3QGcEJ5dGVzCmlzUG9zaXRpdmUFc3RhdHMKAQdzZWdtZW50AgNhY2MDc2VnBAFqCAUDYWNjAl8xBAdtYWluQXV4CQC1CQIFA3NlZwIBOwMJAQIhPQIJAJADAQUHbWFpbkF1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BmN1cnJFcQUJdGVtcFByb2RCBwUFc3RhdHMJAAACBQhuZXdQcm9kQgUIbmV3UHJvZEIBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwECHByb3BMaXN0DXRlcnJhaW5Db3VudHMNbGFuZFNpemVJbmRleARzaWduAwkBAiE9AgkAkAMBBQhwcm9wTGlzdAUGTlVNUkVTCQACAQIWV3JvbmcgcHJvcG9ydGlvbnMgZGF0YQoBB3VwZGF0ZXICA2FjYwFpBAZyZXN1bHQJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvcExpc3QFAWkJAGgCCQBoAgUEc2lnbgkAkQMCBQ10ZXJyYWluQ291bnRzBQFpBQ1sYW5kU2l6ZUluZGV4AwkAZgIAAAUGcmVzdWx0CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhZQYW5pYyEgUGllY2VzIG9mIHR5cGU9CQCkAwEFAWkCBywgc2lnbj0JAKQDAQUEc2lnbgITLCB0ZXJyYWluQ291bnRzW2ldPQkApAMBCQCRAwIFDXRlcnJhaW5Db3VudHMFAWkCECwgbGFuZFNpemVJbmRleD0JAKQDAQUNbGFuZFNpemVJbmRleAkAzQgCBQNhY2MJAKQDAQUGcmVzdWx0CgACJGwFBUlURVI2CgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQd1cGRhdGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGARF1cGRhdGVQcm9wb3J0aW9ucwMNdGVycmFpbkNvdW50cw1sYW5kU2l6ZUluZGV4BHNpZ24ECHByb3BMaXN0CQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBEWtleVJlc1Byb3BvcnRpb25zAAILMF8wXzBfMF8wXzACAV8JALkJAgkBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwEBQhwcm9wTGlzdAUNdGVycmFpbkNvdW50cwUNbGFuZFNpemVJbmRleAUEc2lnbgIBXwENY291bnRUZXJyYWlucwEIdGVycmFpbnMJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBQQABCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUIAAQkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFDAAEJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBRAABCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUUAAQkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFGAAEFA25pbAEGYWRkUmVzBQpjdXJyZW50UmVzDXRlcnJhaW5Db3VudHMJZGVsdGFUaW1lDWxhbmRTaXplSW5kZXgXZGFpbHlCeVBpZWNlV2l0aEJvbnVzZXMKAQVhZGRlcgIDYWNjAWkECXJlc09mVHlwZQkAaAIJAGgCCQBrAwUJZGVsdGFUaW1lBRdkYWlseUJ5UGllY2VXaXRoQm9udXNlcwUJREFZTUlMTElTCQCRAwIFDXRlcnJhaW5Db3VudHMFAWkFDWxhbmRTaXplSW5kZXgJAM0IAgUDYWNjCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKY3VycmVudFJlcwUBaQUJcmVzT2ZUeXBlBAFyCgACJGwFBUlURVI2CgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQVhZGRlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgkAuQkCBQFyAgFfAQl2aXJ0Q2xhaW0EDXRlcnJhaW5Db3VudHMJZGVsdGFUaW1lDWxhbmRTaXplSW5kZXgXZGFpbHlCeVBpZWNlV2l0aEJvbnVzZXMKAQVhZGRlcgID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CAIABQkAzAgCAAgJAMwIAgANCQDMCAIADgkAzAgCAA8FA25pbAkAzAgCCQDMCAIAAQkAzAgCAAQJAMwIAgAJCQDMCAIACgkAzAgCAA8FA25pbAkAzAgCCQDMCAIAAQkAzAgCAAYJAMwIAgAHCQDMCAIADwkAzAgCABMFA25pbAkAzAgCCQDMCAIABAkAzAgCAAcJAMwIAgAICQDMCAIADQkAzAgCABIFA25pbAUDbmlsAQdnZW5DaGFyAgFuBWZyZXFzBANyZW0JAKADAQkAuwICBQFuBQdUV0VOVFlYBAZsZXR0ZXIDCQBmAgkAkQMCBQVmcmVxcwAABQNyZW0CAUEDCQBmAgkAkQMCBQVmcmVxcwABBQNyZW0CAUIDCQBmAgkAkQMCBQVmcmVxcwACBQNyZW0CAUMDCQBmAgkAkQMCBQVmcmVxcwADBQNyZW0CAUQDCQBmAgkAkQMCBQVmcmVxcwAEBQNyZW0CAUUCAUYFBmxldHRlcgELZ2VuVGVycmFpbnMCBHNlZWQMY29udGluZW50SWR4BAFmCQCRAwIFBGZyZXEFDGNvbnRpbmVudElkeAoBEHRlcnJhaW5HZW5lcmF0b3ICA2FjYwRlbGVtCQCUCgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCAUDYWNjAl8xCQEHZ2VuQ2hhcgIIBQNhY2MCXzIFAWYJAQdnZW5DaGFyAgkAugICCAUDYWNjAl8yBQdUV0VOVFlYBQFmCQEHZ2VuQ2hhcgIJALoCAggFA2FjYwJfMgUIVFdFTlRZMlgFAWYJAQdnZW5DaGFyAgkAugICCAUDYWNjAl8yBQhUV0VOVFkzWAUBZgkBB2dlbkNoYXICCQC6AgIIBQNhY2MCXzIFCFRXRU5UWTRYBQFmCQC6AgIIBQNhY2MCXzIFCFRXRU5UWTVYBAF0CgACJGwJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCAgAJALoCAgUEc2VlZAUFRklWRVgKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBEHRlcnJhaW5HZW5lcmF0b3ICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkA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bAEFAndoBAZ3aExvZnQDCQBmAgAFCQCQAwEFAndoCQC5CQIJAMwIAgIBMAkAzAgCCQCkAwEFCndoT2NjdXBpZWQJAMwIAgkApAMBCQBlAgUHd2hUb3RhbAUKd2hPY2N1cGllZAkAzAgCCQCkAwEFB3doVG90YWwFA25pbAIBXwQEbG9mdAkAtQkCCQCRAwIFAndoBQl3aElkeExPRlQCAV8ECHdoTG9ja2VkCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUJdm9sTG9ja2VkBANvY2MDCQBmAgkAkAMBBQRsb2Z0AAEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAUKd2hPY2N1cGllZAkAuQkCCQDMCAIJAKQDAQUId2hMb2NrZWQJAMwIAgkApAMBBQNvY2MJAMwIAgkApAMBCQBlAgkAZQIFB3doVG90YWwFCHdoTG9ja2VkBQNvY2MJAMwIAgkApAMBBQd3aFRvdGFsBQNuaWwCAV8JAMwIAgkAkQMCBQJ3aAULd2hJZHhMZXZlbHMJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQJ3aAUId2hJZHhSZXMCAV8FBk5VTVJFUwkAkQMCBQJ3aAUId2hJZHhSZXMCCzBfMF8wXzBfMF8wCQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUCd2gFCHdoSWR4TWF0AgFfBQZOVU1SRVMJAJEDAgUCd2gFCHdoSWR4TWF0AgswXzBfMF8wXzBfMAkAzAgCCQCRAwIFAndoBQl3aElkeFByb2QJAMwIAgUGd2hMb2Z0BQNuaWwBFWdldFdhcmVob3VzZVNwYWNlTGVmdAEJY3VycmVudFdoBAtvY2N1cGllZFZvbAkBF2dldFdhcmVob3VzZU9jY3VwaWVkVm9sAQUJY3VycmVudFdoBA9jdXJyV2hMb2NrZWRWb2wJAQ1wYXJzZUludFZhbHVlAQkAkQMCCQC1CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeExPRlQCAV8FCXZvbExvY2tlZAkAZQIJAGUCCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBCQCRAwIFCWN1cnJlbnRXaAULd2hJZHhMZXZlbHMFC29jY3VwaWVkVm9sBQ9jdXJyV2hMb2NrZWRWb2wBCW1vdmVTdHVmZgMKY2FyZ29QYXJ0cwljdXJyZW50V2gLY3VycmVudFBhY2sDCQECIT0CCQCQAwEFCmNhcmdvUGFydHMAAwkAAgECNGNhcmdvTGlzdFN0ciBzaG91bGQgY29udGFpbiBleGFjdGx5IDIgJzonIHNlcGFyYXRvcnMECHJlc1BhcnRzCQC1CQIJAJEDAgUKY2FyZ29QYXJ0cwAAAgFfBAhtYXRQYXJ0cwkAtQkCCQCRAwIFCmNhcmdvUGFydHMAAQIBXwQJcHJvZFBhcnRzAwkAAAIJAJEDAgUKY2FyZ29QYXJ0cwACAgAFA25pbAkAvAkCCQCRAwIFCmNhcmdvUGFydHMAAgIBXwMJAQIhPQIJAJADAQUIcmVzUGFydHMFBk5VTVJFUwkAAgECIEFsbCA2IHJlc291cmNlcyBzaG91bGQgYmUgcGFzc2VkAwkBAiE9AgkAkAMBBQhtYXRQYXJ0cwUGTlVNUkVTCQACAQIgQWxsIDYgbWF0ZXJpYWxzIHNob3VsZCBiZSBwYXNzZWQEC3doU3BhY2VMZWZ0CQEVZ2V0V2FyZWhvdXNlU3BhY2VMZWZ0AQUJY3VycmVudFdoBAljdXJyV2hSZXMJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfBAljdXJyV2hNYXQJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0AgFfBApjdXJyV2hQcm9kAwkAAAIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAAUDbmlsCQC8CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAV8EDmN1cnJlbnRQYWNrUmVzCQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfBA5jdXJyZW50UGFja01hdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQPY3VycmVudFBhY2tQcm9kAwkAAAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIABQNuaWwJALwJAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgFfCgEDbXZSAgNhY2MEaXRlbQQBaQgFA2FjYwJfMQQCYW0JAQ1wYXJzZUludFZhbHVlAQUEaXRlbQQDd2hyCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJY3VycldoUmVzBQFpBANicHIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5jdXJyZW50UGFja1JlcwUBaQMJAAACBQJhbQAACQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkAkQMCBQljdXJyV2hSZXMFAWkJAM0IAggFA2FjYwJfMwkAkQMCBQ5jdXJyZW50UGFja1JlcwUBaQgFA2FjYwJfNAMJAGYCBQJhbQAAAwkAZgIFAmFtBQNicHIJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAFBGl0ZW0CGSBmcm9tIGJhY2twYWNrLCBidXQgb25seSAJAKQDAQUDYnByAgogYXZhaWxhYmxlCQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkApAMBCQBkAgUDd2hyBQJhbQkAzQgCCAUDYWNjAl8zCQCkAwEJAGUCBQNicHIFAmFtCQBkAggFA2FjYwJfNAUCYW0DCQBmAgkBAS0BBQJhbQUDd2hyCQACAQkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHRha2UgCQCkAwEJAQEtAQUCYW0CGiBmcm9tIHdhcmVob3VzZSwgYnV0IG9ubHkgCQCkAwEFA3docgIKIGF2YWlsYWJsZQkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZAIFA3docgUCYW0JAM0IAggFA2FjYwJfMwkApAMBCQBlAgUDYnByBQJhbQkAZAIIBQNhY2MCXzQFAmFtBAFyCgACJGwFCHJlc1BhcnRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlgoEAAAFA25pbAUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBA212UgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgoBA212TQIDYWNjBGl0ZW0EAWkIBQNhY2MCXzEEAmFtCQENcGFyc2VJbnRWYWx1ZQEFBGl0ZW0EA3dobQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWN1cnJXaE1hdAUBaQQDYnBtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOY3VycmVudFBhY2tNYXQFAWkDCQAAAgUCYW0AAAkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAJEDAgUJY3VycldoTWF0BQFpCQDNCAIIBQNhY2MCXzMJAJEDAgUOY3VycmVudFBhY2tNYXQFAWkIBQNhY2MCXzQDCQBmAgUCYW0AAAMJAGYCBQJhbQUDYnBtCQACAQkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHRha2UgBQRpdGVtAhkgZnJvbSBiYWNrcGFjaywgYnV0IG9ubHkgCQCkAwEFA2JwbQIKIGF2YWlsYWJsZQkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZAIFA3dobQUCYW0JAM0IAggFA2FjYwJfMwkApAMBCQBlAgUDYnBtBQJhbQkAZAIIBQNhY2MCXzQFAmFtAwkAZgIJAQEtAQUCYW0FA3dobQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byB0YWtlIAkApAMBCQEBLQEFAmFtAhogZnJvbSB3YXJlaG91c2UsIGJ1dCBvbmx5IAkApAMBBQN3aG0CCiBhdmFpbGFibGUJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGQCBQN3aG0FAmFtCQDNCAIIBQNhY2MCXzMJAKQDAQkAZQIFA2JwbQUCYW0JAGQCCAUDYWNjAl80BQJhbQQBbQoAAiRsBQhtYXRQYXJ0cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJYKBAAABQNuaWwFA25pbAgFAXICXzQKAQUkZjFfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBA212TQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMV8yAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgoBA212UAIDYWNjBGl0ZW0EAWkIBQNhY2MCXzEEAmFtCQENcGFyc2VJbnRWYWx1ZQEFBGl0ZW0EA3docAMJAGYCCQCQAwEFCmN1cnJXaFByb2QFAWkJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpjdXJyV2hQcm9kBQFpAAAEA2JwcAMJAGYCCQCQAwEFD2N1cnJlbnRQYWNrUHJvZAUBaQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFD2N1cnJlbnRQYWNrUHJvZAUBaQAAAwkAAAIFAmFtAAAJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCkAwEFA3docAkAzQgCCAUDYWNjAl8zCQCkAwEFA2JwcAgFA2FjYwJfNAMJAGYCBQJhbQAAAwkAZgIFAmFtBQNicHAJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAFBGl0ZW0CGSBmcm9tIGJhY2twYWNrLCBidXQgb25seSAJAKQDAQUDYnBwAgogYXZhaWxhYmxlBAhkZWx0YVZvbAkAZQIJAQh0b1ZvbHVtZQIJAGQCBQN3aHAFAmFtBQ5QUk9EVUNUUEtHU0laRQkBCHRvVm9sdW1lAgUDd2hwBQ5QUk9EVUNUUEtHU0laRQkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZAIFA3docAUCYW0JAM0IAggFA2FjYwJfMwkApAMBCQBlAgUDYnBwBQJhbQkAZAIIBQNhY2MCXzQFCGRlbHRhVm9sAwkAZgIJAQEtAQUCYW0FA3docAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byB0YWtlIAkApAMBCQEBLQEFAmFtAhogZnJvbSB3YXJlaG91c2UsIGJ1dCBvbmx5IAkApAMBBQN3aHACCiBhdmFpbGFibGUECGRlbHRhVm9sCQBlAgkBCHRvVm9sdW1lAgkAZAIFA3docAUCYW0FDlBST0RVQ1RQS0dTSVpFCQEIdG9Wb2x1bWUCBQN3aHAFDlBST0RVQ1RQS0dTSVpFCQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkApAMBCQBkAgUDd2hwBQJhbQkAzQgCCAUDYWNjAl8zCQCkAwEJAGUCBQNicHAFAmFtCQBkAggFA2FjYwJfNAUIZGVsdGFWb2wEAXADCQECIT0CCQCQAwEFCXByb2RQYXJ0cwAACgACJGwFCXByb2RQYXJ0cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJYKBAAABQNuaWwFA25pbAgFAW0CXzQKAQUkZjJfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBA212UAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMl8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgNTAJAQUkZjJfMgIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyCQCWCgQAAAUKY3VycldoUHJvZAUPY3VycmVudFBhY2tQcm9kCAUBbQJfNAQIdm9sU2FsZG8IBQFwAl80AwkAZgIFCHZvbFNhbGRvBQt3aFNwYWNlTGVmdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIVQXR0ZW1wdCB0byBwdXQgdG90YWwgCQCkAwEFCHZvbFNhbGRvAhEgc3R1ZmYsIGJ1dCBvbmx5IAkApAMBBQt3aFNwYWNlTGVmdAIVIHdhcmVob3VzZSBzcGFjZSBsZWZ0CQCZCgcJALkJAggFAXICXzICAV8JALkJAggFAW0CXzICAV8JALoJAggFAXACXzICAV8JALkJAggFAXICXzMCAV8JALkJAggFAW0CXzMCAV8JALoJAggFAXACXzMCAV8FCHZvbFNhbGRvARJleHBlZGl0aW9uSW50ZXJuYWwCBmNhbGxlcgR0eElkBAh1c2VyQWRkcgkApQgBBQZjYWxsZXIEBmJpZ051bQkBA2FicwEJAJ4DAQUEdHhJZAQHZnJlZU51bQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQESa2V5TmV4dEZyZWVMYW5kTnVtAAkAZAIFD1BSRVNBTEVOVU1MQU5EUwABBAdsYW5kTnVtCQCkAwEFB2ZyZWVOdW0EDGNvbnRpbmVudElkeAkAoAMBCQC7AgIFBmJpZ051bQUFRklWRVgECHRlcnJhaW5zCQELZ2VuVGVycmFpbnMCBQZiaWdOdW0FDGNvbnRpbmVudElkeAQJY29udGluZW50CQCRAwIFCmNvbnRpbmVudHMFDGNvbnRpbmVudElkeAQFaXNzdWUJAMIIBQkBB25mdE5hbWUCBQdsYW5kTnVtAgFTCQC5CQIJAMwIAgUHbGFuZE51bQkAzAgCAgFTCQDMCAIFCHRlcnJhaW5zCQDMCAIFCWNvbnRpbmVudAUDbmlsAgFfAAEAAAcEB2Fzc2V0SWQJALgIAQUFaXNzdWUEAmlkCQDYBAEFB2Fzc2V0SWQJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEmtleU5leHRGcmVlTGFuZE51bQAJAGQCBQdmcmVlTnVtAAEJAMwIAgUFaXNzdWUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEGtleUxhbmRUb0Fzc2V0SWQBBQdsYW5kTnVtBQJpZAkAzAgCCQELU3RyaW5nRW50cnkCCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQUCaWQFCHVzZXJBZGRyCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlMYW5kTnVtVG9Pd25lcgEFB2xhbmROdW0FCHVzZXJBZGRyCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFAmlkAAAJAMwIAgkBDEludGVnZXJFbnRyeQIJAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICBQJpZAUIdXNlckFkZHIAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQZjYWxsZXIAAQUHYXNzZXRJZAUDbmlsCQCUCgIFAmlkBQljb250aW5lbnQBDGZsaWdodENvbW1vbgMIdXNlckFkZHIHbWVzc2FnZQNzaWcDCQEBIQEJAMQTAwUHbWVzc2FnZQUDc2lnBQNwdWIJAAIBAhhzaWduYXR1cmUgZG9lcyBub3QgbWF0Y2gEBXBhcnRzCQC8CQIJALAJAQUHbWVzc2FnZQIBOwQJZmxpZ2h0TG9nCQC8CQIJAJEDAgUFcGFydHMAAAIBfAQCaHAJALUJAgkAkQMCBQlmbGlnaHRMb2cFCGZsSGVhbHRoAgFfBAVjdXJIUAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmhwAAAEBW5ld0hQCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCaHAAAQQLbmV3TG9jVHhWZXIJALUJAgkAkQMCBQVwYXJ0cwABAgE6BAtuZXdMb2NhdGlvbgkAkQMCBQtuZXdMb2NUeFZlcgAABAR0aW1lCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJZmxpZ2h0TG9nBQtmbFRpbWVzdGFtcAMDCQBmAgUEdGltZQkAZAIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBRFGSVZFTUlOVVRFU01JTExJUwYJAGYCCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFEUZJVkVNSU5VVEVTTUlMTElTBQR0aW1lCQACAQkArAICCQCsAgIJAKwCAgIcc2lnbmF0dXJlIG91dGRhdGVkOiBsb2dUaW1lPQkApAMBBQR0aW1lAgksIGJjVGltZT0JAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXAECXR4RnJvbU1zZwkAkQMCBQtuZXdMb2NUeFZlcgABBAZsYXN0VHgJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBEWtleUxhc3RUeElkQnlVc2VyAQUIdXNlckFkZHICAAMJAQIhPQIFBmxhc3RUeAUJdHhGcm9tTXNnCQACAQkArAICCQCsAgIJAKwCAgIeVHggaWRzIGRvbid0IG1hdGNoISBJbiBzdGF0ZTogBQZsYXN0VHgCCiwgaW4gbXNnOiAFCXR4RnJvbU1zZwQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQh1c2VyQWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAVtYXhIUAkBCW1heEhlYWx0aAEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDGtleUR1Y2tMZXZlbAEFC2R1Y2tBc3NldElkAAAEDG9sZEZyb21TdGF0ZQkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQAwkBAiE9AgUMb2xkRnJvbVN0YXRlBQVjdXJIUAkAAgEJAKwCAgkArAICCQCsAgICCm9sZEhlYWx0aD0JAKQDAQUMb2xkRnJvbVN0YXRlAi8gZnJvbSBzdGF0ZSBkb2VzIG5vdCBtYXRjaCBvbmUgZnJvbSBmbGlnaHQgbG9nPQkApAMBBQVjdXJIUAMJAGcCAAAFBWN1ckhQCQACAQIeWW91IGNhbid0IGZseSB3aXRoIHplcm8gaGVhbHRoAwkBASEBCQEXY2FuV2VhckN1cnJlbnRFcXVpcG1lbnQBBQtkdWNrQXNzZXRJZAkAAgECFkVxdWlwbWVudCBpbmNvbXBhdGlibGUEBWJvbnVzAwkAZgIJAJADAQUJZmxpZ2h0TG9nBQdmbEJvbnVzCQCRAwIFCWZsaWdodExvZwUHZmxCb251cwIABAhwcm9kVXNlZAMJAGYCCQCQAwEFCWZsaWdodExvZwULZmxQcm9kc1VzZWQJAJEDAgUJZmxpZ2h0TG9nBQtmbFByb2RzVXNlZAIABApzZW50QW1vdW50AwMJAGYCBQVuZXdIUAAACQAAAgUFYm9udXMCASQHCQEFYXNJbnQBCQD8BwQFDHJlc3RDb250cmFjdAINc2VuZFVzZHRQcml6ZQkAzAgCBQh1c2VyQWRkcgUDbmlsBQNuaWwAAAkAlwoFBQVuZXdIUAULZHVja0Fzc2V0SWQFCnNlbnRBbW91bnQFC25ld0xvY2F0aW9uBQhwcm9kVXNlZAEMYXBwbHlCb251c2VzAgtsYW5kQXNzZXRJZAZwaWVjZXMECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAlhcnRQaWVjZXMJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQAAAQEYWRkNgkAaQIFCmluZnJhTGV2ZWwABgQEYWRkNwkAaQIFCmluZnJhTGV2ZWwABwkAZAIJAGQCBQ9EQUlMWVJFU0JZUElFQ0UJAGsDBQ9EQUlMWVJFU0JZUElFQ0UJAGQCCQBkAgUKaW5mcmFMZXZlbAUEYWRkNgkAaAIAAgUEYWRkNwAFCQBrAwUPREFJTFlSRVNCWVBJRUNFBQlhcnRQaWVjZXMJAGgCBQZwaWVjZXMABQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBGFkZHIJY2xhaW1Nb2RlDWxhbmRBc3NldElkSW4EDSR0MDM2NjkyMzcyMzEDCQAAAgUJY2xhaW1Nb2RlBQtjbGFpbU1vZGVXaAkAlAoCBQ1sYW5kQXNzZXRJZEluCQELdmFsdWVPckVsc2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICAAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAoggBCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgQDbG9jCQC1CQIJAQV2YWx1ZQEFC2N1ckxvY2F0aW9uAgFfAwkBAiE9AgkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCAUwJAAIBCQCsAgIJAKwCAgIWRHVjayBsb2NhdGlvbiB0eXBlIGlzIAkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCESwgYnV0IHNob3VsZCBiZSBMCQCUCgIJAJEDAgUDbG9jBQhsb2NJZHhJZAULZHVja0Fzc2V0SWQEC2xhbmRBc3NldElkCAUNJHQwMzY2OTIzNzIzMQJfMQQGZHVja0lkCAUNJHQwMzY2OTIzNzIzMQJfMgQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAQJc2F2ZWRUaW1lCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQUHdGltZUtleQkArAICCQCsAgICBUxhbmQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBAFkCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwkAlgoEBQZkdWNrSWQFC2xhbmRBc3NldElkBQFkBQlzYXZlZFRpbWUBEGNsYWltUmVzSW50ZXJuYWwEBGFkZHIGYW1vdW50CWNsYWltTW9kZQ1sYW5kQXNzZXRJZEluAwkAZgIAAAUGYW1vdW50CQACAQIPTmVnYXRpdmUgYW1vdW50BAFjCQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBQRhZGRyBQljbGFpbU1vZGUFDWxhbmRBc3NldElkSW4ECGxhbmRTaXplCQCRAwIIBQFjAl8zBQtyZWNMYW5kU2l6ZQQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIIBQFjAl8zBQtyZWNUZXJyYWlucwQJZGVsdGFUaW1lCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAIBQFjAl80AwkAZgIAAAUJZGVsdGFUaW1lCQACAQkArAICCQCsAgIJAKwCAgImU2F2ZWQgdGltZXN0YW1wIGlzIGluIGZ1dHVyZSwgc2F2ZWQgPSAJAKQDAQgFAWMCXzQCDCwgY3VycmVudCA9IAkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQUIbGFuZFNpemUEFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UJAQxhcHBseUJvbnVzZXMCCAUBYwJfMgUGcGllY2VzBAhhdmFpbFJlcwkAawMFCWRlbHRhVGltZQkAaAIFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UFBnBpZWNlcwUJREFZTUlMTElTAwkAZgIFBmFtb3VudAUIYXZhaWxSZXMJAAIBCQCsAgIJAKwCAgkArAICAiJOb3QgZW5vdWdoIHJlc291cmNlcywgYXZhaWxhYmxlID0gCQCkAwEFCGF2YWlsUmVzAg4sIHJlcXVlc3RlZCA9IAkApAMBBQZhbW91bnQEDG5ld0RlbHRhVGltZQkAawMJAGUCBQhhdmFpbFJlcwUGYW1vdW50BQlEQVlNSUxMSVMJAGgCBRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlBQZwaWVjZXMEDG5ld1RpbWVzdGFtcAkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQxuZXdEZWx0YVRpbWUECWxhbmRJbmRleAkAaQIFBnBpZWNlcwUFU1NJWkUECnJlc1RvQ2xhaW0JAQl2aXJ0Q2xhaW0EBQ10ZXJyYWluQ291bnRzCQBlAgUJZGVsdGFUaW1lBQxuZXdEZWx0YVRpbWUFCWxhbmRJbmRleAUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQQFd2hLZXkJARJrZXlXYXJlaG91c2VCeUxhbmQBCAUBYwJfMgQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEIBQFjAl8yAAAECWN1cnJlbnRXaAkBDGdldFdhcmVob3VzZQMFBXdoS2V5BQlsYW5kSW5kZXgFCmluZnJhTGV2ZWwEBGxvZnQJALUJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4TE9GVAIBXwQLd2hTcGFjZUxlZnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlAwMJAAACBQljbGFpbU1vZGUFC2NsYWltTW9kZVdoCQBmAgUGYW1vdW50BQt3aFNwYWNlTGVmdAcJAAIBCQCsAgIJAKwCAgIFT25seSAJAKQDAQULd2hTcGFjZUxlZnQCGCBzcGFjZSBsZWZ0IGluIHdhcmVob3VzZQQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEIBQFjAl8xBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEDmN1cnJlbnRQYWNrUmVzCQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfBAxjdXJyZW50V2hSZXMJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfBA0kdDAzOTYwNTQwNDc2AwkAAAIFCWNsYWltTW9kZQULY2xhaW1Nb2RlV2gJAJYKBAkBBmFkZFJlcwUFDGN1cnJlbnRXaFJlcwUNdGVycmFpbkNvdW50cwkAZQIFCWRlbHRhVGltZQUMbmV3RGVsdGFUaW1lBQlsYW5kSW5kZXgFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkCAUKcmVzVG9DbGFpbQJfMgkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlCAUKcmVzVG9DbGFpbQJfMgMJAAACBQljbGFpbU1vZGUFDWNsYWltTW9kZUR1Y2sJAJYKBAkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzCQEGYWRkUmVzBQUOY3VycmVudFBhY2tSZXMFDXRlcnJhaW5Db3VudHMJAGUCBQlkZWx0YVRpbWUFDG5ld0RlbHRhVGltZQUJbGFuZEluZGV4BRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlBAVkaXN0cgkBDWRpc3RyaWJ1dGVSZXMEBQxjdXJyZW50V2hSZXMFDmN1cnJlbnRQYWNrUmVzBQpyZXNUb0NsYWltBQt3aFNwYWNlTGVmdAQEd2hBbQkAlwMBCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlCQDMCAIIBQpyZXNUb0NsYWltAl8yBQNuaWwJAJYKBAgFBWRpc3RyAl8xCAUFZGlzdHICXzIJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQFBHdoQW0JAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQUEd2hBbQQFd2hSZXMIBQ0kdDAzOTYwNTQwNDc2Al8xBAVicFJlcwgFDSR0MDM5NjA1NDA0NzYCXzIEBWxvZnRPCAUNJHQwMzk2MDU0MDQ3NgJfMwQFbG9mdEYIBQ0kdDAzOTYwNTQwNDc2Al80CQCXCgUJAMwIAgkBDEludGVnZXJFbnRyeQIJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQgFAWMCXzIFDG5ld1RpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYCAUBYwJfMgUEYWRkcgUMbmV3VGltZXN0YW1wBQNuaWwFBWJwS2V5CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgUFYnBSZXMJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwFBXdoS2V5CQDMCAIJAJEDAgUJY3VycmVudFdoBQt3aElkeExldmVscwkAzAgCBQV3aFJlcwkAzAgCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhNYXQJAMwIAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAkAzAgCCQC5CQIJAMwIAgkAkQMCBQRsb2Z0BQl2b2xMb2NrZWQJAMwIAgkApAMBBQVsb2Z0TwkAzAgCCQCkAwEFBWxvZnRGCQDMCAIJAJEDAgUEbG9mdAUIdm9sVG90YWwFA25pbAIBXwUDbmlsAQhjbGFpbUFsbAQEYWRkcgtsYW5kQXNzZXRJZAZwaWVjZXMJY2xhaW1Nb2RlBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkBAlzYXZlZFRpbWUJAQV2YWx1ZQEJAJ8IAQUHdGltZUtleQQIYXZhaWxSZXMJAGgCCQBrAwkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQlzYXZlZFRpbWUJAQxhcHBseUJvbnVzZXMCBQtsYW5kQXNzZXRJZAUGcGllY2VzBQlEQVlNSUxMSVMFBnBpZWNlcwkBEGNsYWltUmVzSW50ZXJuYWwEBQRhZGRyBQhhdmFpbFJlcwUJY2xhaW1Nb2RlBQtsYW5kQXNzZXRJZAENdXBJbmZyYUNvbW1vbgQMc2hvdWxkVXNlTWF0BmNhbGxlcg1wYXltZW50QW1vdW50C2xhbmRBc3NldElkBARhZGRyCQClCAEFBmNhbGxlcgQBYwkBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwUEYWRkcgUTY2xhaW1Nb2RlV2hUaGVuRHVjawULbGFuZEFzc2V0SWQEBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAggFAWMCXzMFC3JlY0xhbmRTaXplBAhpbmZyYUtleQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBCAUBYwJfMgQIY3VyTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUIaW5mcmFLZXkAAAMDCQEBIQEFGEtTX0FMTE9XX0JJR19JTkZSQV9NRVJHRQkAZwIFCGN1ckxldmVsAAMHCQACAQImQ3VycmVudGx5IG1heCBpbmZyYXN0cnVjdHVyZSBsZXZlbCA9IDMECG1heEluZnJhCQBkAgkAaQIJAQRzcXJ0BAUGcGllY2VzAAAAAAUERE9XTgAFAAIECG5ld0xldmVsCQBkAgUIY3VyTGV2ZWwAAQMDBRhLU19BTExPV19CSUdfSU5GUkFfTUVSR0UJAGYCBQhuZXdMZXZlbAUIbWF4SW5mcmEHCQACAQkArAICAiVDdXJyZW50bHkgbWF4IGluZnJhc3RydWN0dXJlIGxldmVsID0gCQCkAwEFCG1heEluZnJhBARjb3N0CQBrAwUVSW5mcmFVcGdyYWRlQ29zdFNVc2R0CQBoAgUGcGllY2VzBQhuZXdMZXZlbAUFU1NJWkUDAwkBASEBBQxzaG91bGRVc2VNYXQJAQIhPQIFDXBheW1lbnRBbW91bnQFBGNvc3QHCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUEY29zdAQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEIBQFjAl8xBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEBW1MaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBAdtYXRVc2VkCQBrAwURSW5mcmFVcGdyYWRlQ29zdFMJAGgCBQZwaWVjZXMFCG5ld0xldmVsBQVTU0laRQQGbmV3TWF0CQC5CQIJARFzdWJ0cmFjdE1hdGVyaWFscwMFDHNob3VsZFVzZU1hdAUFbUxpc3QFB21hdFVzZWQCAV8EC2NsYWltUmVzdWx0CQEIY2xhaW1BbGwEBQRhZGRyCAUBYwJfMgUGcGllY2VzBRNjbGFpbU1vZGVXaFRoZW5EdWNrBAZ3aERhdGEIBQtjbGFpbVJlc3VsdAJfNQQGb2xkVm9sCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBCQCRAwIFBndoRGF0YQULd2hJZHhMZXZlbHMECm5ld1ZvbERhdGEJALkJAgkAzAgCCQCRAwIJALUJAgkAkQMCBQZ3aERhdGEFC3doSWR4TGV2ZWxzAgFfAAAJAMwIAgkApAMBBQhuZXdMZXZlbAUDbmlsAgFfBAZuZXdWb2wJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEFCm5ld1ZvbERhdGEEBGxvZnQJALUJAgkAkQMCBQZ3aERhdGEFCXdoSWR4TE9GVAIBXwQKbmV3TG9mdFN0cgkAuQkCCQDMCAIJAJEDAgUEbG9mdAUJdm9sTG9ja2VkCQDMCAIJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQJAMwIAgkApAMBCQBlAgkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlBQZuZXdWb2wFBm9sZFZvbAkAzAgCCQCkAwEFBm5ld1ZvbAUDbmlsAgFfCQCVCgMJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUIaW5mcmFLZXkFCG5ld0xldmVsCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAggFAWMCXzIFBGFkZHIFCG5ld0xldmVsCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIIBQtjbGFpbVJlc3VsdAJfMwUIYnBJZHhSZXMJAMwIAgUGbmV3TWF0CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6CQDMCAIJAQtTdHJpbmdFbnRyeQIIBQtjbGFpbVJlc3VsdAJfNAkAuQkCCQDMCAIFCm5ld1ZvbERhdGEJAMwIAgkAkQMCBQZ3aERhdGEFCHdoSWR4UmVzCQDMCAIJAJEDAgUGd2hEYXRhBQh3aElkeE1hdAkAzAgCCQCRAwIFBndoRGF0YQUJd2hJZHhQcm9kCQDMCAIFCm5ld0xvZnRTdHIFA25pbAIBOgUDbmlsCAULY2xhaW1SZXN1bHQCXzEFCG5ld0xldmVsBQdtYXRVc2VkARN1cGRhdGVTdGF0c0ludGVybmFsBAZsdmxLZXkFeHBLZXkJcG9pbnRzS2V5B2RlbHRhWFAEAnhwCQELdmFsdWVPckVsc2UCCQCfCAEFBXhwS2V5AAAEBW5ld1hQCQBkAgUCeHAFB2RlbHRhWFAECWx2bFBvaW50cwkBB2xldmVsVXACCQELdmFsdWVPckVsc2UCCQCfCAEFBmx2bEtleQAABQVuZXdYUAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQZsdmxLZXkJAJEDAgUJbHZsUG9pbnRzAAAJAMwIAgkBDEludGVnZXJFbnRyeQIFBXhwS2V5BQVuZXdYUAkAzAgCCQEMSW50ZWdlckVudHJ5AgUJcG9pbnRzS2V5CQBkAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlwb2ludHNLZXkAAAkAkQMCBQlsdmxQb2ludHMAAQUDbmlsBQVuZXdYUAEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCC2R1Y2tBc3NldElkB2RlbHRhWFAJARN1cGRhdGVTdGF0c0ludGVybmFsBAkBDGtleUR1Y2tMZXZlbAEFC2R1Y2tBc3NldElkCQEJa2V5RHVja1hQAQULZHVja0Fzc2V0SWQJARFrZXlEdWNrRnJlZVBvaW50cwEFC2R1Y2tBc3NldElkBQdkZWx0YVhQARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgRhZGRyB2RlbHRhWFAJARN1cGRhdGVTdGF0c0ludGVybmFsBAkBDGtleVVzZXJMZXZlbAEFBGFkZHIJAQlrZXlVc2VyWFABBQRhZGRyCQERa2V5VXNlckZyZWVQb2ludHMBBQRhZGRyBQdkZWx0YVhQARJhY3RpdmF0ZU9uYm9hcmRBcnQBBGFkZHIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQIcmVmQnlLZXkJAQ9rZXlBZGRyZXNzUmVmQnkBBQRhZGRyBAVyZWZCeQkAoggBBQhyZWZCeUtleQMJAQEhAQkBCWlzRGVmaW5lZAEFBXJlZkJ5CQACAQIpWW91IGFyZSBub3QgZWxpZ2libGUgZm9yIE9OQk9BUkQgYXJ0aWZhY3QEBmFydEtleQkBHGtleU9uYm9hcmRBcnREdWNrQWN0aXZhdGVkQnkBBQRhZGRyBAdhcnREdWNrCQCiCAEFBmFydEtleQMJAQlpc0RlZmluZWQBBQdhcnREdWNrCQACAQkArAICAi9Zb3UgYWxyZWFkeSB1c2VkIHlvdXIgT05CT0FSRCBhcnRpZmFjdCBvbiBkdWNrIAkBBXZhbHVlAQUHYXJ0RHVjawQQZHVja0FjdGl2YXRvcktleQkBHGtleU9uYm9hcmRBcnRBY3RpdmF0ZWRPbkR1Y2sBBQtkdWNrQXNzZXRJZAQNZHVja0FjdGl2YXRvcgkAoggBBRBkdWNrQWN0aXZhdG9yS2V5AwkBCWlzRGVmaW5lZAEFDWR1Y2tBY3RpdmF0b3IJAAIBCQCsAgIJAKwCAgkArAICAglUaGUgZHVjayAFC2R1Y2tBc3NldElkAjQgYWxyZWFkeSBnb3QgcG9pbnRzIGZyb20gT05CT0FSRCBhcnRpZmFjdCBmcm9tIHVzZXIgCQEFdmFsdWUBBQ1kdWNrQWN0aXZhdG9yCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUGYXJ0S2V5BQtkdWNrQXNzZXRJZAkAzAgCCQELU3RyaW5nRW50cnkCBRBkdWNrQWN0aXZhdG9yS2V5BQRhZGRyBQNuaWwICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAUJeHBPbmJvYXJkAl8xARJhY3RpdmF0ZVByZXNhbGVBcnQCBGFkZHINbGFuZEFzc2V0SWRJbgQBYwkBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwUEYWRkcgUTY2xhaW1Nb2RlV2hUaGVuRHVjawUNbGFuZEFzc2V0SWRJbgQLbGFuZEFzc2V0SWQIBQFjAl8yBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIIBQFjAl8zBQtyZWNMYW5kU2l6ZQQNYWN0aXZhdGlvbktleQkBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQDCQBmAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ1hY3RpdmF0aW9uS2V5AAAAAAkAAgECJVByZXNhbGUgYXJ0aWZhY3QgaXMgYWxyZWFkeSBhY3RpdmF0ZWQDCQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIIBQFjAl8zBQpyZWNMYW5kTnVtBQ9QUkVTQUxFTlVNTEFORFMJAAIBCQCsAgIJAKwCAgkArAICBQpMQU5EUFJFRklYAgEgBQtsYW5kQXNzZXRJZAIlIGlzIG5vdCBlbGlnaWJsZSBmb3IgcHJlc2FsZSBhcnRpZmFjdAQLY2xhaW1SZXN1bHQJAQhjbGFpbUFsbAQFBGFkZHIFC2xhbmRBc3NldElkBQZwaWVjZXMFE2NsYWltTW9kZVdoVGhlbkR1Y2sJAM0IAgkAzQgCCQDNCAIIBQtjbGFpbVJlc3VsdAJfMQkBDEludGVnZXJFbnRyeQIFDWFjdGl2YXRpb25LZXkFBnBpZWNlcwkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al8yCQC5CQIIBQtjbGFpbVJlc3VsdAJfMwIBOgkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al80CQC5CQIIBQtjbGFpbVJlc3VsdAJfNQIBOgEPY2hlY2tUb3VybmFtZW50AQtkdWNrQXNzZXRJZAQGbGFzdElkCQELdmFsdWVPckVsc2UCCQCaCAIFEnRvdXJuYW1lbnRDb250cmFjdAUNbGFzdFRvdXJJZEtleQAABAtjdXJMb2NhdGlvbgkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OAgFfBANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAV0RGF0YQkBC2dldFRvdXJEYXRhAgUSdG91cm5hbWVudENvbnRyYWN0BQZsYXN0SWQEBnN0YXRpYwkAkQMCBQV0RGF0YQUJaWR4U3RhdGljBAdkeW5hbWljCQCRAwIFBXREYXRhBQppZHhEeW5hbWljAwkBAiE9AgkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQIBVAcDAwMJAAACCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgULY3VyTG9jYXRpb24FD2xvY0lkeENvbnRpbmVudAUGbGFzdElkCQAAAgkAkQMCBQdkeW5hbWljBQ50RHluYW1pY1N0YXR1cwIKSU5QUk9HUkVTUwcJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGc3RhdGljBQp0U3RhdGljRW5kBQNub3cHCQACAQIqWW91ciBkdWNrIGlzIHRha2luZyBwYXJ0IGluIHRoZSB0b3VybmFtZW50CQEJYXNCb29sZWFuAQkA/AcEBQR0aGlzAhZleGl0VG91cm5hbWVudEludGVybmFsCQDMCAIFC2R1Y2tBc3NldElkBQNuaWwFA25pbAENY2hlY2tEZWxpdmVyeQELZHVja0Fzc2V0SWQEC2N1ckxvY2F0aW9uCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04CAV8EA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXADCQECIT0CCQCRAwIFC2N1ckxvY2F0aW9uBQpsb2NJZHhUeXBlAgFEBwQJc3RhcnRUaW1lCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgULY3VyTG9jYXRpb24FD2xvY0lkeENvbnRpbmVudAQIZGlzdGFuY2UJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQtjdXJMb2NhdGlvbgUIbG9jSWR4SWQDAwkAZgIJAGQCBQlzdGFydFRpbWUFElRFTl9NSU5VVEVTX01JTExJUwUDbm93CQBmAgABBQhkaXN0YW5jZQcJAAIBAiBZb3VyIGR1Y2sgaXMgb24gZGVsaXZlcnkgbWlzc2lvbgkBCWFzQm9vbGVhbgEJAPwHBAUEdGhpcwIUZXhpdERlbGl2ZXJ5SW50ZXJuYWwJAMwIAgULZHVja0Fzc2V0SWQFA25pbAUDbmlsARJleGl0RGVsaXZlcnlDb21tb24EC2R1Y2tBc3NldElkBWNoZWNrBW5ld0hQBXNjb3JlBAtjdXJMb2NhdGlvbgkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OAgFfBANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAlzdGFydFRpbWUJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQtjdXJMb2NhdGlvbgUPbG9jSWR4Q29udGluZW50BAhkaXN0YW5jZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFC2N1ckxvY2F0aW9uBQhsb2NJZHhJZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEQa2V5RHVja0lkVG9Pd25lcgEFC2R1Y2tBc3NldElkAhRORlQgZHVjayBpcyBvcnBoYW5lZAQJaGVhbHRoS2V5CQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAljdXJIZWFsdGgJARFAZXh0ck5hdGl2ZSgxMDU1KQEFCWhlYWx0aEtleQQOb3V0Y29tZUFjdGlvbnMDAwkAZgIFCGRpc3RhbmNlAAAGAwMFBWNoZWNrCQBmAgUFc2NvcmUAAAcJAGYCBQVuZXdIUAAABwQGcmV3YXJkCQD8BwQFD2Vjb25vbXlDb250cmFjdAISc2VuZERlbGl2ZXJ5UmV3YXJkCQDMCAIFBW93bmVyBQNuaWwFA25pbAMJAAACBQZyZXdhcmQFBnJld2FyZAQIY291bnRLZXkJARRrZXlVc2VyRGVsaXZlcnlDb3VudAEFBW93bmVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQhjb3VudEtleQkAZAIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUIY291bnRLZXkAAAABCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5VXNlckxhc3REZWxpdmVyeURheQEFBW93bmVyCQBpAgUJc3RhcnRUaW1lBQlEQVlNSUxMSVMFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMDAwUFY2hlY2sJAGYCBQVuZXdIUAAABwkAZgIJAGQCBQlzdGFydFRpbWUFElRFTl9NSU5VVEVTX01JTExJUwUDbm93BwkAAgECJllvdXIgZHVjayBpcyBzdGlsbCBvbiBkZWxpdmVyeSBtaXNzaW9uBAtsb2NrZWRUb3RhbAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9lY29ub215Q29udHJhY3QFEWRlbGl2ZXJ5TG9ja2VkS2V5AAAEBnVubG9jawkA/AcEBQ9lY29ub215Q29udHJhY3QCFHVwZGF0ZURlbGl2ZXJ5TG9ja2VkCQDMCAIJAGUCBQtsb2NrZWRUb3RhbAUVTUlOX1VTRFRfRkVFX0RFTElWRVJZBQNuaWwFA25pbAMJAAACBQZ1bmxvY2sFBnVubG9jawMDAwUFY2hlY2sJAGcCAAAFBW5ld0hQBwYJAGcCAAAFCWN1ckhlYWx0aAUDbmlsCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5RGVsaXZlcnlEZWxheUJ5RHVjawEFC2R1Y2tBc3NldElkCQBkAgUJc3RhcnRUaW1lBRNERUxJVkVSWV9QVU5JU0hNRU5UBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4EDXNhdmVkTG9jYXRpb24JARFAZXh0ck5hdGl2ZSgxMDU4KQEJARBrZXlTYXZlZExvY2F0aW9uAQULZHVja0Fzc2V0SWQJAJUKAwUOb3V0Y29tZUFjdGlvbnMJAMwIAgkBC1N0cmluZ0VudHJ5AgkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ1zYXZlZExvY2F0aW9uBQNuaWwFDXNhdmVkTG9jYXRpb24BDW1lcmdlSW50ZXJuYWwGC25ld0xhbmRTaXplCG5ld0xldmVsB2Zvcm11bGEEYWRkcgxsYW5kQXNzZXRJZHMHbmVlZE1hdAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBD2NoZWNrVG91cm5hbWVudAEFC2R1Y2tBc3NldElkCQACAQIdbWVyZ2VJbnRlcm5hbF9jaGVja1RvdXJuYW1lbnQDCQENY2hlY2tEZWxpdmVyeQEFC2R1Y2tBc3NldElkCQACAQIbbWVyZ2VJbnRlcm5hbF9jaGVja0RlbGl2ZXJ5CgEKY2hlY2tNZXJnZQIDYWNjC2xhbmRBc3NldElkBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkBAlzYXZlZFRpbWUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBBQd0aW1lS2V5CQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQBZAkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8ECWNvbnRpbmVudAkAkQMCBQFkBQxyZWNDb250aW5lbnQDAwkBAiE9AggFA2FjYwJfMwIACQECIT0CCAUDYWNjAl8zBQljb250aW5lbnQHCQACAQIuTGFuZHMgc2hvdWxkIGJlIG9uIHRoZSBzYW1lIGNvbnRpbmVudCB0byBtZXJnZQQIbGFuZFNpemUJAJEDAgUBZAULcmVjTGFuZFNpemUEB3NpemVzSW4IBQNhY2MCXzEEAWkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAswkCBQdzaXplc0luBQhsYW5kU2l6ZQInWW91IGhhdmVuJ3QgcGFzc2VkIGFsbCB0aGUgbGFuZHMgbmVlZGVkBAhzaXplc091dAkArAICCQCvAgIFB3NpemVzSW4FAWkJALACAgUHc2l6ZXNJbgkAZAIFAWkAAQQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQUIbGFuZFNpemUEBGFydHMJAGQCCAUDYWNjAl8yCQELdmFsdWVPckVsc2UCCQCfCAEJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkAAAECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAhyZXFMZXZlbAQHJG1hdGNoMAUIbGFuZFNpemUDCQAAAgIBUwUHJG1hdGNoMAADAwkAAAICAU0FByRtYXRjaDAABAMJAAACAgFMBQckbWF0Y2gwAAUDCQAAAgICWEwFByRtYXRjaDAABgkAAgECGk9ubHkgUywgTSwgTCwgWEwgY2FuIG1lcmdlAwkBAiE9AgUKaW5mcmFMZXZlbAUIcmVxTGV2ZWwJAAIBAiJBbGwgbGFuZHMgc2hvdWxkIGJlIG1heGVkIHRvIG1lcmdlBAdsYW5kTnVtCQCRAwIFAWQFCnJlY0xhbmROdW0EDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCBQFkBQtyZWNUZXJyYWlucwQJZGVsdGFUaW1lCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFCXNhdmVkVGltZQMJAGYCAAAFCWRlbHRhVGltZQkAAgEJAKwCAgkArAICCQCsAgICJlNhdmVkIHRpbWVzdGFtcCBpcyBpbiBmdXR1cmUsIHNhdmVkID0gCQCkAwEFCXNhdmVkVGltZQIMLCBjdXJyZW50ID0gCQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wBBZkYWlseVByb2R1Y3Rpb25CeVBpZWNlCQEMYXBwbHlCb251c2VzAgULbGFuZEFzc2V0SWQFBnBpZWNlcwQJbGFuZEluZGV4CQBpAgUGcGllY2VzBQVTU0laRQQFYnBSZXMJAQZhZGRSZXMFCQC1CQIIBQNhY2MCXzQCAV8FDXRlcnJhaW5Db3VudHMFCWRlbHRhVGltZQUJbGFuZEluZGV4BRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlBAVwcm9wcwkBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwECAUDYWNjAl82BQ10ZXJyYWluQ291bnRzBQlsYW5kSW5kZXgA////////////AQQGY1Byb3BzCQEZdXBkYXRlUHJvcG9ydGlvbnNJbnRlcm5hbAQIBQNhY2MDXzEwBQ10ZXJyYWluQ291bnRzBQlsYW5kSW5kZXgA////////////AQQLc3VtVGVycmFpbnMJARl1cGRhdGVQcm9wb3J0aW9uc0ludGVybmFsBAgFA2FjYwJfOQUNdGVycmFpbkNvdW50cwUJbGFuZEluZGV4AAEEBWxhbmRzCAUDYWNjAl83BANpZHgJAM8IAgUFbGFuZHMFC2xhbmRBc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQUDaWR4CQACAQkArAICAiBZb3VyIHN0YWtlZCBsYW5kcyBkb24ndCBjb250YWluIAULbGFuZEFzc2V0SWQECWN1c3RvbUtleQkBGmtleUxhbmRBc3NldElkVG9DdXN0b21OYW1lAQULbGFuZEFzc2V0SWQECmN1c3RvbU5hbWUJAQt2YWx1ZU9yRWxzZQIJAKIIAQUJY3VzdG9tS2V5AgAJAJwKCgUIc2l6ZXNPdXQFBGFydHMFCWNvbnRpbmVudAUFYnBSZXMJAM4IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIIBQNhY2MCXzUJAQtEZWxldGVFbnRyeQEJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQJAQtEZWxldGVFbnRyeQEJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKTEFORFBSRUZJWAULbGFuZEFzc2V0SWQFBGFkZHIJAQtEZWxldGVFbnRyeQEJARBrZXlMYW5kVG9Bc3NldElkAQUHbGFuZE51bQkBC0RlbGV0ZUVudHJ5AQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAgULbGFuZEFzc2V0SWQFBGFkZHIJAQtEZWxldGVFbnRyeQEJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQERa2V5TGFuZE51bVRvT3duZXIBBQdsYW5kTnVtCQELRGVsZXRlRW50cnkBCQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQJAQtEZWxldGVFbnRyeQEFCWN1c3RvbUtleQkBBEJ1cm4CCQDZBAEFC2xhbmRBc3NldElkAAEDCQECIT0CBQpjdXN0b21OYW1lAgAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBGmtleUxhbmRDdXN0b21OYW1lVG9Bc3NldElkAQUKY3VzdG9tTmFtZQUDbmlsBQNuaWwFBXByb3BzCQDRCAIFBWxhbmRzCQEFdmFsdWUBBQNpZHgJAGQCCAUDYWNjAl84BQZwaWVjZXMFC3N1bVRlcnJhaW5zBQZjUHJvcHMEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAhwcm9wTGlzdAkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEJARFrZXlSZXNQcm9wb3J0aW9ucwACCzBfMF8wXzBfMF8wAgFfBAhsYW5kc0tleQkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFBGFkZHIECGxhbmRzU3RyCQCiCAEFCGxhbmRzS2V5BAdsYW5kc0luAwkBCWlzRGVmaW5lZAEFCGxhbmRzU3RyCQC9CQIJAQV2YWx1ZQEFCGxhbmRzU3RyAgFfBQNuaWwEBWNvbnQwCQCRAwIJALUJAggJAQV2YWx1ZQEJAOwHAQkA2QQBCQCRAwIFDGxhbmRBc3NldElkcwAAC2Rlc2NyaXB0aW9uAgFfBQxyZWNDb250aW5lbnQECWNvbnRQcm9wcwkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEJARZrZXlSZXNUeXBlc0J5Q29udGluZW50AQUFY29udDACCzBfMF8wXzBfMF8wAgFfBAFyCgACJGwFDGxhbmRBc3NldElkcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJwKCgUHZm9ybXVsYQAAAgAJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzBQNuaWwFCHByb3BMaXN0BQdsYW5kc0luAAAJALUJAgILMF8wXzBfMF8wXzACAV8FCWNvbnRQcm9wcwoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKY2hlY2tNZXJnZQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUECWNvbnRpbmVudAgFAXICXzMEDGNvbnRpbmVudElkeAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDPCAIFCmNvbnRpbmVudHMFCWNvbnRpbmVudAkArAICAhNVbmtub3duIGNvbnRpbmVudDogBQljb250aW5lbnQECHRlcnJhaW5zCQETZ2VuVGVycmFpbnNGb3JNZXJnZQIIBQFyAl85CQBpAgkBD251bVBpZWNlc0J5U2l6ZQEFC25ld0xhbmRTaXplBQVTU0laRQQHZnJlZU51bQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQESa2V5TmV4dEZyZWVMYW5kTnVtAAkAZAIFD1BSRVNBTEVOVU1MQU5EUwABBApuZXdMYW5kTnVtCQCkAwEFB2ZyZWVOdW0EBWlzc3VlCQDCCAUJAQduZnROYW1lAgUKbmV3TGFuZE51bQULbmV3TGFuZFNpemUJALkJAgkAzAgCBQpuZXdMYW5kTnVtCQDMCAIFC25ld0xhbmRTaXplCQDMCAIFCHRlcnJhaW5zCQDMCAIFCWNvbnRpbmVudAUDbmlsAgFfAAEAAAcEB2Fzc2V0SWQJALgIAQUFaXNzdWUEDm5ld0xhbmRBc3NldElkCQDYBAEFB2Fzc2V0SWQEBm5ld01hdAkAuQkCCQERc3VidHJhY3RNYXRlcmlhbHMDCQBmAgUHbmVlZE1hdAAACQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBQduZWVkTWF0AgFfBAlwaWVjZXNLZXkJARZrZXlTdGFrZWRQaWVjZXNCeU93bmVyAQUEYWRkcgQMc3Rha2VkUGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEFCXBpZWNlc0tleQAACQCUCgIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIIBQFyAl81AwkAZgIJAJADAQgFAXICXzcAAAkBC1N0cmluZ0VudHJ5AgUIbGFuZHNLZXkJALsJAggFAXICXzcCAV8JAQtEZWxldGVFbnRyeQEFCGxhbmRzS2V5CQEMSW50ZWdlckVudHJ5AgUJcGllY2VzS2V5AwkAZgIIBQFyAl84BQxzdGFrZWRQaWVjZXMAAAkAZQIFDHN0YWtlZFBpZWNlcwgFAXICXzgJAQxJbnRlZ2VyRW50cnkCCQESa2V5TmV4dEZyZWVMYW5kTnVtAAkAZAIFB2ZyZWVOdW0AAQUFaXNzdWUJAQtTdHJpbmdFbnRyeQIJARBrZXlMYW5kVG9Bc3NldElkAQUKbmV3TGFuZE51bQUObmV3TGFuZEFzc2V0SWQJAQtTdHJpbmdFbnRyeQIJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQ5uZXdMYW5kQXNzZXRJZAUEYWRkcgkBC1N0cmluZ0VudHJ5AgkBEWtleUxhbmROdW1Ub093bmVyAQUKbmV3TGFuZE51bQUEYWRkcgkBDEludGVnZXJFbnRyeQIJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFDm5ld0xhbmRBc3NldElkCAUBcgJfMgkBDEludGVnZXJFbnRyeQIJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQUObmV3TGFuZEFzc2V0SWQFCG5ld0xldmVsCQEMSW50ZWdlckVudHJ5AgkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIFDm5ld0xhbmRBc3NldElkBQRhZGRyBQhuZXdMZXZlbAkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIIBQFyAl80CQDMCAIFBm5ld01hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgkBC1N0cmluZ0VudHJ5AgkBEWtleVJlc1Byb3BvcnRpb25zAAkAuQkCCAUBcgJfNgIBXwkBC1N0cmluZ0VudHJ5AgkBFmtleVJlc1R5cGVzQnlDb250aW5lbnQBBQljb250aW5lbnQJALkJAggFAXIDXzEwAgFfCQELU3RyaW5nRW50cnkCCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQJALkJAgkAzAgCBQljb250aW5lbnQJAMwIAgIBTAkAzAgCBQ5uZXdMYW5kQXNzZXRJZAUDbmlsAgFfCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQRhZGRyAAEFB2Fzc2V0SWQFDm5ld0xhbmRBc3NldElkAQNzMm0CBGFkZHIMbGFuZEFzc2V0SWRzCQENbWVyZ2VJbnRlcm5hbAYCAU0AAwIEU1NTUwUEYWRkcgUMbGFuZEFzc2V0SWRzAAABA20ybAIEYWRkcgxsYW5kQXNzZXRJZHMJAQ1tZXJnZUludGVybmFsBgIBTAAEAgNTTU0FBGFkZHIFDGxhbmRBc3NldElkcwkAaAIFEUluZnJhVXBncmFkZUNvc3RTAAQBBGwyeGwCBGFkZHIMbGFuZEFzc2V0SWRzCQENbWVyZ2VJbnRlcm5hbAYCAlhMAAUCBVNTU01MBQRhZGRyBQxsYW5kQXNzZXRJZHMJAGgCBRFJbmZyYVVwZ3JhZGVDb3N0UwAvAQZ4bDJ4eGwCBGFkZHIMbGFuZEFzc2V0SWRzCQENbWVyZ2VJbnRlcm5hbAYCA1hYTAAGAgNMWEwFBGFkZHIFDGxhbmRBc3NldElkcwkAaAIFEUluZnJhVXBncmFkZUNvc3RTADYBC21lcmdlQ29tbW9uAgRhZGRyDGxhbmRBc3NldElkcwQHJG1hdGNoMAkAkAMBBQxsYW5kQXNzZXRJZHMDCQAAAgAEBQckbWF0Y2gwCQEDczJtAgUEYWRkcgUMbGFuZEFzc2V0SWRzAwkAAAIAAwUHJG1hdGNoMAkBA20ybAIFBGFkZHIFDGxhbmRBc3NldElkcwMJAAACAAUFByRtYXRjaDAJAQRsMnhsAgUEYWRkcgUMbGFuZEFzc2V0SWRzAwkAAAIAAgUHJG1hdGNoMAkBBnhsMnh4bAIFBGFkZHIFDGxhbmRBc3NldElkcwkAAgECDVVua25vd24gbWVyZ2UBFWNoZWNrT3V0ZGF0ZWREZWxpdmVyeQEIdXNlckFkZHIEBGR1Y2sJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUIdXNlckFkZHIDCQEJaXNEZWZpbmVkAQUEZHVjawQLZHVja0Fzc2V0SWQJAQV2YWx1ZQEFBGR1Y2sEBmxvY0tleQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBANsb2MJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQZsb2NLZXkFD0RFRkFVTFRMT0NBVElPTgIBXwQJc3RhcnRUaW1lCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDbG9jBQ9sb2NJZHhDb250aW5lbnQDAwkBAiE9AgkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCAUQGCQBmAgkAZAIFCXN0YXJ0VGltZQUSVEVOX01JTlVURVNfTUlMTElTCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUDbmlsBAloZWFsdGhLZXkJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQDCQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFA2xvYwUIbG9jSWR4SWQAAAQGcmV3YXJkCQD8BwQFD2Vjb25vbXlDb250cmFjdAISc2VuZERlbGl2ZXJ5UmV3YXJkCQDMCAIFCHVzZXJBZGRyBQNuaWwFA25pbAMJAAACBQZyZXdhcmQFBnJld2FyZAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQDNCAIJAM0IAgQLbG9ja2VkVG90YWwJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPZWNvbm9teUNvbnRyYWN0BRFkZWxpdmVyeUxvY2tlZEtleQAABAZ1bmxvY2sJAPwHBAUPZWNvbm9teUNvbnRyYWN0AhR1cGRhdGVEZWxpdmVyeUxvY2tlZAkAzAgCCQBlAgULbG9ja2VkVG90YWwFFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQUDbmlsBQNuaWwDCQAAAgUGdW5sb2NrBQZ1bmxvY2sDCQBnAgAACQERQGV4dHJOYXRpdmUoMTA1NSkBBQloZWFsdGhLZXkFA25pbAQKcHVuaXNobWVudAkA/AcEBQR0aGlzAgtzYXZlSW50ZWdlcgkAzAgCCQEWa2V5RGVsaXZlcnlEZWxheUJ5RHVjawEFC2R1Y2tBc3NldElkCQDMCAIJAGQCBQlzdGFydFRpbWUFE0RFTElWRVJZX1BVTklTSE1FTlQFA25pbAUDbmlsAwkAAAIFCnB1bmlzaG1lbnQFCnB1bmlzaG1lbnQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkBDEludGVnZXJFbnRyeQIFCWhlYWx0aEtleQkBEUBleHRyTmF0aXZlKDEwNTUpAQkBDmtleVNhdmVkSGVhbHRoAQULZHVja0Fzc2V0SWQJAQtTdHJpbmdFbnRyeQIFBmxvY0tleQkBEUBleHRyTmF0aXZlKDEwNTgpAQkBEGtleVNhdmVkTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUDbmlsAQZwcm9sb2cBAWkDAwkBAiE9AggFAWkMb3JpZ2luQ2FsbGVyBQxyZXN0Q29udHJhY3QJAQt2YWx1ZU9yRWxzZQIJAKAIAQkBCmtleUJsb2NrZWQABwcJAAIBAh9Db250cmFjdHMgYXJlIHVuZGVyIG1haW50ZW5hbmNlBAh1c2VyQWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIJAM0IAgkBFWNoZWNrT3V0ZGF0ZWREZWxpdmVyeQEFCHVzZXJBZGRyCQELU3RyaW5nRW50cnkCCQERa2V5TGFzdFR4SWRCeVVzZXIBBQh1c2VyQWRkcgkA2AQBCAUBaQ10cmFuc2FjdGlvbklkAQxwcm9sb2dGbGlnaHQBAWkDAwkBAiE9AggFAWkMb3JpZ2luQ2FsbGVyBQxyZXN0Q29udHJhY3QJAQt2YWx1ZU9yRWxzZQIJAKAIAQkBCmtleUJsb2NrZWQABwcJAAIBAh9Db250cmFjdHMgYXJlIHVuZGVyIG1haW50ZW5hbmNlCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlMYXN0VHhJZEJ5VXNlcgEJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyCQDYBAEIBQFpDXRyYW5zYWN0aW9uSWQFA25pbC0BaQENY29uc3RydWN0b3JWMQEIcmVzdEFkZHIDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAkAzAgCCQELU3RyaW5nRW50cnkCCQEOa2V5UmVzdEFkZHJlc3MABQhyZXN0QWRkcgUDbmlsAWkBC3NhdmVJbnRlZ2VyAgNrZXkGYW1vdW50AwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIgc2F2ZUludGVnZXIgaXMgbm90IHB1YmxpYyBtZXRob2QJAMwIAgkBDEludGVnZXJFbnRyeQIFA2tleQUGYW1vdW50BQNuaWwBaQEKc2V0QmxvY2tlZAEJaXNCbG9ja2VkAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRcGVybWlzc2lvbiBkZW5pZWQJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQprZXlCbG9ja2VkAAUJaXNCbG9ja2VkBQNuaWwBaQEJc3Rha2VMYW5kAAQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQHYXNzZXRJZAkBBXZhbHVlAQgFA3BtdAdhc3NldElkBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgMJAQIhPQIIBQNwbXQGYW1vdW50AAEJAAIBCQCsAgIJAKwCAgIETkZUIAUKTEFORFBSRUZJWAIkIHRva2VuIHNob3VsZCBiZSBhdHRhY2hlZCBhcyBwYXltZW50BAVhc3NldAkBBXZhbHVlAQkA7AcBBQdhc3NldElkAwkBAiE9AggFBWFzc2V0Bmlzc3VlcgUEdGhpcwkAAgECF1Vua25vd24gaXNzdWVyIG9mIHRva2VuAwkBASEBCQEIY29udGFpbnMCCAUFYXNzZXQEbmFtZQUKTEFORFBSRUZJWAkAAgEJAKwCAgkArAICAglPbmx5IE5GVCAFCkxBTkRQUkVGSVgCFCB0b2tlbnMgYXJlIGFjY2VwdGVkBAtsYW5kTnVtU2l6ZQkAsAICCAUFYXNzZXQEbmFtZQAEBAdsYW5kTnVtAwkBCGNvbnRhaW5zAgULbGFuZE51bVNpemUCA1hYTAkAswICBQtsYW5kTnVtU2l6ZQADAwkBCGNvbnRhaW5zAgULbGFuZE51bVNpemUCAlhMCQCzAgIFC2xhbmROdW1TaXplAAIJALMCAgULbGFuZE51bVNpemUAAQMJAQEhAQkBCWlzRGVmaW5lZAEJALYJAQUHbGFuZE51bQkAAgEJAKwCAgIeQ2Fubm90IHBhcnNlIGxhbmQgbnVtYmVyIGZyb20gCAUFYXNzZXQEbmFtZQQLbGFuZEFzc2V0SWQJANgEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAMJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCEiBpcyBhbHJlYWR5IHN0YWtlZAQBZAkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8EDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCBQFkBQtyZWNUZXJyYWlucwQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCBQFkBQtyZWNMYW5kU2l6ZQQJbGFuZEluZGV4CQBpAgUGcGllY2VzBQVTU0laRQQFcHJvcHMJARF1cGRhdGVQcm9wb3J0aW9ucwMFDXRlcnJhaW5Db3VudHMFCWxhbmRJbmRleAABBAxyZXNCeUNvbnRLZXkJARZrZXlSZXNUeXBlc0J5Q29udGluZW50AQkAkQMCBQFkBQxyZWNDb250aW5lbnQECWNvbnRQcm9wcwkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEFDHJlc0J5Q29udEtleQILMF8wXzBfMF8wXzACAV8EEHVwZGF0ZWRDb250UHJvcHMJALkJAgkBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwEBQljb250UHJvcHMFDXRlcnJhaW5Db3VudHMFCWxhbmRJbmRleAABAgFfBAhsYW5kc0tleQkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFB2FkZHJlc3MECGxhbmRzU3RyCQCiCAEFCGxhbmRzS2V5BAVsYW5kcwMJAQlpc0RlZmluZWQBBQhsYW5kc1N0cgkAvQkCCQEFdmFsdWUBBQhsYW5kc1N0cgIBXwUDbmlsAwkBD2NvbnRhaW5zRWxlbWVudAIFBWxhbmRzBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgIiWW91ciBzdGFrZWQgbGFuZHMgYWxyZWFkeSBjb250YWluIAULbGFuZEFzc2V0SWQDCQBnAgkAkAMBBQVsYW5kcwUYTUFYX0xBTkRTX1NUQUtFRF9CWV9VU0VSCQACAQkArAICCQCsAgICGVlvdXIgYWxyZWFkeSBzdGFrZWQgbWF4ICgJAKQDAQUYTUFYX0xBTkRTX1NUQUtFRF9CWV9VU0VSAgcpIGxhbmRzBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAQJcGllY2VzS2V5CQEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEFB2FkZHJlc3MECW9sZFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlwaWVjZXNLZXkAAAQJd2xnUmVzdWx0CQD8BwQFC3dsZ0NvbnRyYWN0AhJvblN0YWtlVW5zdGFrZUxhbmQJAMwIAgUHYWRkcmVzcwUDbmlsBQNuaWwJAJQKAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQd0aW1lS2V5CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBC1N0cmluZ0VudHJ5AgUIbGFuZHNLZXkJALsJAgkAzQgCBQVsYW5kcwULbGFuZEFzc2V0SWQCAV8JAMwIAgkBDEludGVnZXJFbnRyeQIFCXBpZWNlc0tleQkAZAIFCW9sZFBpZWNlcwUGcGllY2VzCQDMCAIJAQtTdHJpbmdFbnRyeQIJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5TGFuZE51bVRvT3duZXIBBQdsYW5kTnVtBQdhZGRyZXNzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAgULbGFuZEFzc2V0SWQFB2FkZHJlc3MFCmluZnJhTGV2ZWwJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleVJlc1Byb3BvcnRpb25zAAUFcHJvcHMJAMwIAgkBC1N0cmluZ0VudHJ5AgUMcmVzQnlDb250S2V5BRB1cGRhdGVkQ29udFByb3BzBQNuaWwFDXByb2xvZ0FjdGlvbnMFCXdsZ1Jlc3VsdAFpAQt1bnN0YWtlTGFuZAENbGFuZEFzc2V0SWRJbgQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQZjYWxsZXIEAWMJARRjaGVja0NsYWltQ29uZGl0aW9ucwMFBGFkZHIFDWNsYWltTW9kZUR1Y2sFDWxhbmRBc3NldElkSW4EC2xhbmRBc3NldElkCAUBYwJfMgQBZAgFAWMCXzMECGxhbmRzS2V5CQEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQUEYWRkcgQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIFAWQFC3JlY1RlcnJhaW5zBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIFAWQFC3JlY0xhbmRTaXplBAlsYW5kSW5kZXgJAGkCBQZwaWVjZXMFBVNTSVpFBAVwcm9wcwkBEXVwZGF0ZVByb3BvcnRpb25zAwUNdGVycmFpbkNvdW50cwUJbGFuZEluZGV4AP///////////wEEDHJlc0J5Q29udEtleQkBFmtleVJlc1R5cGVzQnlDb250aW5lbnQBCQCRAwIFAWQFDHJlY0NvbnRpbmVudAQJY29udFByb3BzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUMcmVzQnlDb250S2V5AgswXzBfMF8wXzBfMAIBXwQQdXBkYXRlZENvbnRQcm9wcwkAuQkCCQEZdXBkYXRlUHJvcG9ydGlvbnNJbnRlcm5hbAQFCWNvbnRQcm9wcwUNdGVycmFpbkNvdW50cwUJbGFuZEluZGV4AP///////////wECAV8EC2NsYWltUmVzdWx0CQEIY2xhaW1BbGwEBQRhZGRyBQtsYW5kQXNzZXRJZAUGcGllY2VzBQ1jbGFpbU1vZGVEdWNrBAVsYW5kcwkAvQkCCQELdmFsdWVPckVsc2UCCQCiCAEFCGxhbmRzS2V5AgACAV8EA2lkeAkAzwgCBQVsYW5kcwULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBBQNpZHgJAAIBCQCsAgICIFlvdXIgc3Rha2VkIGxhbmRzIGRvbid0IGNvbnRhaW4gBQtsYW5kQXNzZXRJZAQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQOZ292UmVsZWFzZVRpbWUJAQt2YWx1ZU9yRWxzZQIJAJoIAgULZ292Q29udHJhY3QJARVrZXlVc2VyR3dsUmVsZWFzZVRpbWUBBQRhZGRyAAADCQBnAgUOZ292UmVsZWFzZVRpbWUFA25vdwkAAgEJAKwCAgI5WW91ciBnV0wgYXJlIHRha2luZyBwYXJ0IGluIHZvdGluZywgY2Fubm90IHVuc3Rha2UgdW50aWwgCQCkAwEFDmdvdlJlbGVhc2VUaW1lBA5hcmJSZWxlYXNlVGltZQkAZAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgULd2xnQ29udHJhY3QJARRrZXlMYXN0QXJiVGltZUJ5VXNlcgEFBGFkZHIAAAUOYXJiaXRyYWdlRGVsYXkDCQBmAgUOYXJiUmVsZWFzZVRpbWUFA25vdwkAAgEJAKwCAgI/WW91ciBzdGFrZWQgbGFuZHMgdG9vayBwYXJ0IGluIGFyYml0cmFnZSwgY2Fubm90IHVuc3Rha2UgdW50aWwgCQCkAwEFDmFyYlJlbGVhc2VUaW1lBAlwaWVjZXNLZXkJARZrZXlTdGFrZWRQaWVjZXNCeU93bmVyAQUEYWRkcgQMc3Rha2VkUGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEFCXBpZWNlc0tleQAABAluZXdQaWVjZXMDCQBmAgUGcGllY2VzBQxzdGFrZWRQaWVjZXMAAAkAZQIFDHN0YWtlZFBpZWNlcwUGcGllY2VzBAl3bGdSZXN1bHQJAPwHBAULd2xnQ29udHJhY3QCEm9uU3Rha2VVbnN0YWtlTGFuZAkAzAgCBQRhZGRyBQNuaWwFA25pbAkAlAoCCQDOCAIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEJANkEAQULbGFuZEFzc2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkxBTkRQUkVGSVgFC2xhbmRBc3NldElkBQRhZGRyCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlSZXNQcm9wb3J0aW9ucwAFBXByb3BzCQDMCAIJAQtTdHJpbmdFbnRyeQIFDHJlc0J5Q29udEtleQUQdXBkYXRlZENvbnRQcm9wcwkAzAgCCQELU3RyaW5nRW50cnkCCAULY2xhaW1SZXN1bHQCXzIJALkJAggFC2NsYWltUmVzdWx0Al8zAgE6CQDMCAIDCQBmAgkAkAMBBQVsYW5kcwABCQELU3RyaW5nRW50cnkCBQhsYW5kc0tleQkAuwkCCQDRCAIFBWxhbmRzCQEFdmFsdWUBBQNpZHgCAV8JAQtEZWxldGVFbnRyeQEFCGxhbmRzS2V5CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlwaWVjZXNLZXkFCW5ld1BpZWNlcwUDbmlsBQ1wcm9sb2dBY3Rpb25zBQl3bGdSZXN1bHQBaQEJc3Rha2VEdWNrAAQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQHYXNzZXRJZAkBBXZhbHVlAQgFA3BtdAdhc3NldElkBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgMJAQIhPQIIBQNwbXQGYW1vdW50AAEJAAIBCQCsAgIJAKwCAgIETkZUIAUKRFVDS1BSRUZJWAIkIHRva2VuIHNob3VsZCBiZSBhdHRhY2hlZCBhcyBwYXltZW50BAVhc3NldAkBBXZhbHVlAQkA7AcBBQdhc3NldElkAwMJAQIhPQIIBQVhc3NldAZpc3N1ZXIFDWluY3ViYXRvckFkZHIJAQIhPQIIBQVhc3NldAZpc3N1ZXIFC2JyZWVkZXJBZGRyBwkAAgEJAKwCAgkArAICAhJVbmtub3duIGlzc3VlciBvZiAFCkRVQ0tQUkVGSVgCBiB0b2tlbgMJAQEhAQkBCGNvbnRhaW5zAggFBWFzc2V0BG5hbWUFCkRVQ0tQUkVGSVgJAAIBCQCsAgIJAKwCAgIJT25seSBORlQgBQpEVUNLUFJFRklYAhQgdG9rZW5zIGFyZSBhY2NlcHRlZAQKYXNzZXRJZFN0cgkA2AQBBQdhc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFCmFzc2V0SWRTdHIDCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5CQACAQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAhIgaXMgYWxyZWFkeSBzdGFrZWQDCQEJaXNEZWZpbmVkAQkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQdhZGRyZXNzCQACAQkArAICAh1Zb3UgYWxyZWFkeSBzdGFrZWQgb25lIGR1Y2s6IAgFBWFzc2V0BG5hbWUEBmxvY0tleQkBD2tleUR1Y2tMb2NhdGlvbgEFCmFzc2V0SWRTdHIECGxvY2F0aW9uCQCiCAEFBmxvY0tleQQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFCmFzc2V0SWRTdHIECGJhY2twYWNrCQCiCAEFBWJwS2V5BAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQUKYXNzZXRJZFN0cgQFbWF4SFAJAQltYXhIZWFsdGgBCQELdmFsdWVPckVsc2UCCQCfCAEJAQxrZXlEdWNrTGV2ZWwBBQphc3NldElkU3RyAAAECWN1ckhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFB3RpbWVLZXkIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkRVQ0tQUkVGSVgJANgEAQUHYXNzZXRJZAUHYWRkcmVzcwgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEGtleUR1Y2tJZFRvT3duZXIBBQphc3NldElkU3RyBQdhZGRyZXNzCQDMCAIJAQtTdHJpbmdFbnRyeQIJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFB2FkZHJlc3MFCmFzc2V0SWRTdHIFA25pbAMJAQlpc0RlZmluZWQBBQhsb2NhdGlvbgUDbmlsCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUGbG9jS2V5BQ9ERUZBVUxUTE9DQVRJT04FA25pbAMJAQlpc0RlZmluZWQBBQhiYWNrcGFjawUDbmlsCQDOCAIJAM0IAgkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQIaMDowXzBfMF8wXzBfMDowXzBfMF8wXzBfMDoFA25pbAkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aAUJY3VySGVhbHRoBQ1wcm9sb2dBY3Rpb25zAWkBC3Vuc3Rha2VEdWNrAQphc3NldElkU3RyBA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAdhc3NldElkCQDZBAEFCmFzc2V0SWRTdHIEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyBAVhc3NldAkBBXZhbHVlAQkA7AcBBQdhc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFCmFzc2V0SWRTdHIDCQEBIQEJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkAwkBASEBCQEJaXNEZWZpbmVkAQkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQdhZGRyZXNzCQACAQkArAICCQCsAgICCVRoZSBkdWNrIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARBrZXlEdWNrSWRUb093bmVyAQUKYXNzZXRJZFN0cgkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUHYWRkcmVzcwkAAgECF1N0YWtlZCBORlQgaXMgbm90IHlvdXJzAwkBD2NoZWNrVG91cm5hbWVudAEFCmFzc2V0SWRTdHIJAAIBAht1bnN0YWtlRHVja19jaGVja1RvdXJuYW1lbnQDCQENY2hlY2tEZWxpdmVyeQEFCmFzc2V0SWRTdHIJAAIBAhl1bnN0YWtlRHVja19jaGVja0RlbGl2ZXJ5BAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQUKYXNzZXRJZFN0cgQFbWF4SFAJAQltYXhIZWFsdGgBCQELdmFsdWVPckVsc2UCCQCfCAEJAQxrZXlEdWNrTGV2ZWwBBQphc3NldElkU3RyAAAEBmhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQAwkAZgIFBW1heEhQBQZoZWFsdGgJAAIBCQCsAgIJAKwCAgIZUGxlYXNlIGhlYWwgeW91ciBkdWNrIHRvIAkApAMBBQVtYXhIUAITaHAgYmVmb3JlIHVuc3Rha2luZwkAzggCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABBQdhc3NldElkCQDMCAIJAQtEZWxldGVFbnRyeQEFB3RpbWVLZXkJAMwIAgkBC0RlbGV0ZUVudHJ5AQUJa2V5SGVhbHRoCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ9rZXlEdWNrTG9jYXRpb24BBQphc3NldElkU3RyCQDMCAIJAQtEZWxldGVFbnRyeQEJARBrZXlEdWNrSWRUb093bmVyAQUKYXNzZXRJZFN0cgkAzAgCCQELRGVsZXRlRW50cnkBCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkRVQ0tQUkVGSVgFCmFzc2V0SWRTdHIFB2FkZHJlc3MJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUHYWRkcmVzcwUDbmlsBQ1wcm9sb2dBY3Rpb25zAWkBCGNsYWltUmVzAgZhbW91bnQObGFuZEFzc2V0SWRTdHIEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAZyZXN1bHQJARBjbGFpbVJlc0ludGVybmFsBAUEYWRkcgUGYW1vdW50BQ1jbGFpbU1vZGVEdWNrBQ5sYW5kQXNzZXRJZFN0cgQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkCQCUCgIJAM4IAgkAzQgCCQDNCAIJAM4IAggFBnJlc3VsdAJfMQgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkCQBrAwUHeHBDbGFpbQUGYW1vdW50BQVNVUxUOAJfMQkBC1N0cmluZ0VudHJ5AggFBnJlc3VsdAJfMgkAuQkCCAUGcmVzdWx0Al8zAgE6CQELU3RyaW5nRW50cnkCCAUGcmVzdWx0Al80CQC5CQIIBQZyZXN1bHQCXzUCAToFDXByb2xvZ0FjdGlvbnMJAJEDAggFBnJlc3VsdAJfMwUIYnBJZHhSZXMBaQEMY2xhaW1SZXNUb1dIAgZhbW91bnQObGFuZEFzc2V0SWRTdHIEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAZyZXN1bHQJARBjbGFpbVJlc0ludGVybmFsBAUEYWRkcgUGYW1vdW50BQtjbGFpbU1vZGVXaAUObGFuZEFzc2V0SWRTdHIJAJQKAgkAzggCCQDNCAIJAM0IAgkAzggCCAUGcmVzdWx0Al8xCAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCBQRhZGRyCQBrAwUHeHBDbGFpbQUGYW1vdW50BQVNVUxUOAJfMQkBC1N0cmluZ0VudHJ5AggFBnJlc3VsdAJfMgkAuQkCCAUGcmVzdWx0Al8zAgE6CQELU3RyaW5nRW50cnkCCAUGcmVzdWx0Al80CQC5CQIIBQZyZXN1bHQCXzUCAToFDXByb2xvZ0FjdGlvbnMJAJEDAggFBnJlc3VsdAJfNQUId2hJZHhSZXMBaQEGZmxpZ2h0AgdtZXNzYWdlA3NpZwQNcHJvbG9nQWN0aW9ucwkBDHByb2xvZ0ZsaWdodAEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQIdXNlckFkZHIJAKUIAQgFAWkGY2FsbGVyBAFmCQEMZmxpZ2h0Q29tbW9uAwUIdXNlckFkZHIFB21lc3NhZ2UFA3NpZwQFbmV3SFAIBQFmAl8xBAtkdWNrQXNzZXRJZAgFAWYCXzIEBmxvY0tleQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAoggBBQZsb2NLZXkFD0RFRkFVTFRMT0NBVElPTgQLbmV3TG9jYXRpb24IBQFmAl80AwkAAAIFC25ld0xvY2F0aW9uBQtjdXJMb2NhdGlvbgkAAgECIllvdSBjYW4ndCBmbHkgdG8gdGhlIHNhbWUgbG9jYXRpb24EBm5ld0xvYwkAtQkCBQtuZXdMb2NhdGlvbgIBXwQGaXNUb3VyCQAAAgkAkQMCBQZuZXdMb2MFCmxvY0lkeFR5cGUCAVQEB2lzRGVsaXYJAAACCQCRAwIFBm5ld0xvYwUKbG9jSWR4VHlwZQIBRAQFZXFLZXkJARBrZXlEdWNrRXF1aXBtZW50AQULZHVja0Fzc2V0SWQECWN1cnJlbnRFcQkBC3ZhbHVlT3JFbHNlAgkAoggBBQVlcUtleQIXLDssXyw7LF8sOyxfLDssXyw7LF8sOywEDSR0MDczMTE4NzMyMTUJARFzdWJ0cmFjdEVxdWlwbWVudAIFCWN1cnJlbnRFcQgFAWYCXzUEBW5ld0VxCAUNJHQwNzMxMTg3MzIxNQJfMQQPc2hvdWxkWmVyb0J1ZmZzCAUNJHQwNzMxMTg3MzIxNQJfMgQNJHQwNzMyMTg3NjMzMAMJAQEhAQkBCW9uTWlzc2lvbgIFEnRvdXJuYW1lbnRDb250cmFjdAULY3VyTG9jYXRpb24DCQEBIQEJAQ9pc1VzdWFsTG9jYXRpb24BBQtuZXdMb2NhdGlvbgkBDGNoZWF0QXR0ZW1wdAMFC2N1ckxvY2F0aW9uBQtuZXdMb2NhdGlvbgAFAwkAZgIFBW5ld0hQAAAJAJQKAgULbmV3TG9jYXRpb24FBW5ld0hQCQCUCgIFC2N1ckxvY2F0aW9uAAADCQEOaXNJblRvdXJuYW1lbnQCBRJ0b3VybmFtZW50Q29udHJhY3QFC2N1ckxvY2F0aW9uAwkBASEBCQEOaXNJblRvdXJuYW1lbnQCBRJ0b3VybmFtZW50Q29udHJhY3QFC25ld0xvY2F0aW9uCQACAQIqWW91ciBkdWNrIGlzIHRha2luZyBwYXJ0IGluIHRoZSB0b3VybmFtZW50BAVzY29yZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBm5ld0xvYwUIbG9jSWR4SWQEBmN1ckxvYwkAtQkCBQtjdXJMb2NhdGlvbgIBXwQGbGFzdElkCQELdmFsdWVPckVsc2UCCQCaCAIFEnRvdXJuYW1lbnRDb250cmFjdAUNbGFzdFRvdXJJZEtleQAAAwkBAiE9AgUFc2NvcmUJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGY3VyTG9jBQhsb2NJZHhJZAABCQEMY2hlYXRBdHRlbXB0AwULY3VyTG9jYXRpb24FC25ld0xvY2F0aW9uAAcDCQBmAgUFbmV3SFAAAAQJbG9jYWxCZXN0CQELdmFsdWVPckVsc2UCCQCaCAIFEnRvdXJuYW1lbnRDb250cmFjdAkBGmtleUJlc3RSZXN1bHRCeVRvdXJBbmREdWNrAgUGbGFzdElkBQtkdWNrQXNzZXRJZAAABAh1cGRMb2NhbAMJAGYCBQVzY29yZQUJbG9jYWxCZXN0CQD8BwQFEnRvdXJuYW1lbnRDb250cmFjdAIOc2F2ZUR1Y2tSZXN1bHQJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUFc2NvcmUFA25pbAUDbmlsBQR1bml0AwkAAAIFCHVwZExvY2FsBQh1cGRMb2NhbAkAlAoCBQtuZXdMb2NhdGlvbgUFbmV3SFAJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAJQKAgULY3VyTG9jYXRpb24AAAMJAQEhAQkBDGlzSW5EZWxpdmVyeQEFC2N1ckxvY2F0aW9uBAhzYXZlZExvYwkBCGFzU3RyaW5nAQkA/AcEBQR0aGlzAhBhdXRvRXhpdERlbGl2ZXJ5CQDMCAIFC2R1Y2tBc3NldElkCQDMCAIFBW5ld0hQCQDMCAIDBQdpc0RlbGl2AgIxMAICMTEJAMwIAgAABQNuaWwFA25pbAMJAAACBQhzYXZlZExvYwUIc2F2ZWRMb2MDBQdpc0RlbGl2CQCUCgIFCHNhdmVkTG9jBQVuZXdIUAMJAGYCBQVuZXdIUAAACQCUCgIFC25ld0xvY2F0aW9uBQVuZXdIUAkAlAoCBQhzYXZlZExvYwAACQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkBASEBBQdpc0RlbGl2CQACAQIkWW91ciBkdWNrIGlzIHRha2luZyBwYXJ0IGluIGRlbGl2ZXJ5AwkBASEBCQEMaXNJbkRlbGl2ZXJ5AQULbmV3TG9jYXRpb24JAQxjaGVhdEF0dGVtcHQDBQtjdXJMb2NhdGlvbgULbmV3TG9jYXRpb24ADQQFc2NvcmUJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZuZXdMb2MFCGxvY0lkeElkBAZjdXJMb2MJALUJAgULY3VyTG9jYXRpb24CAV8DCQECIT0CBQVzY29yZQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZjdXJMb2MFCGxvY0lkeElkAAEJAQxjaGVhdEF0dGVtcHQDBQtjdXJMb2NhdGlvbgULbmV3TG9jYXRpb24ADgMDCQBmAgUFbmV3SFAAAAkAZgIAAQUFc2NvcmUHCQCUCgIFC25ld0xvY2F0aW9uBQVuZXdIUAQIc2F2ZWRMb2MJAQhhc1N0cmluZwEJAPwHBAUEdGhpcwIQYXV0b0V4aXREZWxpdmVyeQkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQVuZXdIUAkAzAgCAgUxNS0xNwkAzAgCBQVzY29yZQUDbmlsBQNuaWwDCQAAAgUIc2F2ZWRMb2MFCHNhdmVkTG9jCQCUCgIFCHNhdmVkTG9jBQVuZXdIUAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQJbG9jVG9TYXZlCAUNJHQwNzMyMTg3NjMzMAJfMQQIaHBUb1NhdmUIBQ0kdDA3MzIxODc2MzMwAl8yCQCUCgIJAM4IAgkAzggCCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUGbG9jS2V5BQlsb2NUb1NhdmUJAMwIAgkBC1N0cmluZ0VudHJ5AgUFZXFLZXkFBW5ld0VxCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBQhocFRvU2F2ZQUDbmlsBQ1wcm9sb2dBY3Rpb25zAwUPc2hvdWxkWmVyb0J1ZmZzCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxrZXlEdWNrQnVmZnMBBQtkdWNrQXNzZXRJZAIJMF8wXzBfMF8wBQNuaWwFA25pbAgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkAwkAZgIFBW5ld0hQAAAFD3hwU3VjY2Vzc0ZsaWdodAUMeHBGYWlsRmxpZ2h0Al8xCAUBZgJfMwFpAQRoZWFsAwpxdWFudGl0eUwxCnF1YW50aXR5TDIKcXVhbnRpdHlMMwQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDAwMJAGYCAAAFCnF1YW50aXR5TDEGCQBmAgAABQpxdWFudGl0eUwyBgkAZgIAAAUKcXVhbnRpdHlMMwkAAgECG1F1YW50aXR5IGNhbm5vdCBiZSBuZWdhdGl2ZQQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAMJAQ9jaGVja1RvdXJuYW1lbnQBBQtkdWNrQXNzZXRJZAkAAgECFGhlYWxfY2hlY2tUb3VybmFtZW50AwkBDWNoZWNrRGVsaXZlcnkBBQtkdWNrQXNzZXRJZAkAAgECEmhlYWxfY2hlY2tEZWxpdmVyeQQDcXRzCQDMCAIFCnF1YW50aXR5TDEJAMwIAgUKcXVhbnRpdHlMMgkAzAgCBQpxdWFudGl0eUwzBQNuaWwECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAQFbWF4SFAJAQltYXhIZWFsdGgBCQELdmFsdWVPckVsc2UCCQCfCAEJAQxrZXlEdWNrTGV2ZWwBBQtkdWNrQXNzZXRJZAAABAlvbGRIZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoBQVtYXhIUAMJAGcCBQlvbGRIZWFsdGgFBW1heEhQCQACAQkArAICCQCsAgICD0hQIHNob3VsZCBiZSA8IAkApAMBBQVtYXhIUAIIIHRvIGhlYWwEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAhwcm9kTGlzdAMJAAACCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAAUDbmlsCQC8CQIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIBXwoBC2l0ZXJhdGVQcm9kAgNhY2MGcmVjaXBlBAFuCAUDYWNjAl8yBAF4AwkAZgIJAJADAQUIcHJvZExpc3QFAW4JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhwcm9kTGlzdAUBbgAAAwkAZgIAAwUBbgQBcQkAkQMCBQNxdHMFAW4DCQBmAgUBcQUBeAkAAgEJAKwCAgkArAICCQCsAgICDllvdSBoYXZlIG9ubHkgCQCkAwEFAXgCBCBvZiAJAJEDAgUJcHJvZFR5cGVzBQFuCQCVCgMJAM0IAggFA2FjYwJfMQkApAMBCQBlAgUBeAUBcQkAZAIFAW4AAQkAZAIIBQNhY2MCXzMJAGgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCBQZyZWNpcGUCAV8FCnJJZHhFZmZlY3QFAXEJAJUKAwkAzQgCCAUDYWNjAl8xCQCkAwEFAXgJAGQCBQFuAAEIBQNhY2MCXzMEBnJlc3VsdAoAAiRsBRBwcm9kdWN0aW9uTWF0cml4CgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlQoDBQNuaWwAAAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQtpdGVyYXRlUHJvZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgNTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyBAluZXdIZWFsdGgJAJcDAQkAzAgCBQVtYXhIUAkAzAgCCQBkAgUJb2xkSGVhbHRoCAUGcmVzdWx0Al8zBQNuaWwJAJQKAgkAzggCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aAUJbmV3SGVhbHRoCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC6CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAkAzAgCCQC5CQIIBQZyZXN1bHQCXzECAV8FA25pbAIBOgUDbmlsBQ1wcm9sb2dBY3Rpb25zCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQJAGgCBQZ4cEhlYWwJAGQCCQBkAgUKcXVhbnRpdHlMMQUKcXVhbnRpdHlMMgUKcXVhbnRpdHlMMwJfMQUJbmV3SGVhbHRoAWkBBmhlYWxFUwAEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQIaQWxsb3dlZCBVU0RUIHBheW1lbnQgb25seSEEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQDCQEPY2hlY2tUb3VybmFtZW50AQULZHVja0Fzc2V0SWQJAAIBAhZoZWFsRVNfY2hlY2tUb3VybmFtZW50AwkBDWNoZWNrRGVsaXZlcnkBBQtkdWNrQXNzZXRJZAkAAgECFGhlYWxFU19jaGVja0RlbGl2ZXJ5BAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQEBW1heEhQCQEJbWF4SGVhbHRoAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMa2V5RHVja0xldmVsAQULZHVja0Fzc2V0SWQAAAQJb2xkSGVhbHRoCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aAUFbWF4SFADCQBmAgUJb2xkSGVhbHRoAAAJAAIBAihIUCBzaG91bGQgYmUgMCB0byBjYWxsIEVtZXJnZW5jeSBTZXJ2aWNlBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQIcHJvZExpc3QDCQAAAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgAFA25pbAkAvAkCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAV8EDW1lZEtpdEFtb3VudDEDCQBmAgkAkAMBBQhwcm9kTGlzdAAACQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvZExpc3QAAAAABA1tZWRLaXRBbW91bnQyAwkAZgIJAJADAQUIcHJvZExpc3QAAQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb2RMaXN0AAEAAAQNbWVkS2l0QW1vdW50MwMJAGYCCQCQAwEFCHByb2RMaXN0AAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhwcm9kTGlzdAACAAADAwMJAGYCBQ1tZWRLaXRBbW91bnQxAAAGCQBmAgUNbWVkS2l0QW1vdW50MgAABgkAZgIFDW1lZEtpdEFtb3VudDMAAAkAAgECH1lvdSBoYXZlIHRvIHVzZSBvd24gTWVkaWNhbCBLaXQECGV4aXN0U3RyCQCdCAIFD2Vjb25vbXlDb250cmFjdAkBDmtleUVzV2FyZWhvdXNlAAQMZXhpc3RBbW91bnRzAwkBCWlzRGVmaW5lZAEFCGV4aXN0U3RyCQC8CQIJAQV2YWx1ZQEFCGV4aXN0U3RyAgFfBQNuaWwEC2V4aXN0QW1vdW50AwkAZgIJAJADAQUMZXhpc3RBbW91bnRzAAAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQxleGlzdEFtb3VudHMAAAAAAwkAZwIAAAULZXhpc3RBbW91bnQJAAIBAjlUaGVyZSBhcmUgbm8gTWVkaWNhbCBLaXRzIEwxIGF0IEVtZXJnZW5jeSBTZXJ2aWNlIHN0b3JhZ2UECW5ld0hlYWx0aAkAZAIFCW9sZEhlYWx0aAkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4AAACAV8FCnJJZHhFZmZlY3QEBW5ld0VTCQC5CQIJAMwIAgkApAMBCQBlAgULZXhpc3RBbW91bnQAAQkA0QgCBQxleGlzdEFtb3VudHMAAAIBXwQGcmVjaXBlCQC1CQIJAJEDAgUQcHJvZHVjdGlvbk1hdHJpeAAAAgFfBAh0b3RhbE1hdAkBEmdldFJlY2lwZU1hdGVyaWFscwEFBnJlY2lwZQQJc2VsbFByaWNlCQBrAwkAaAIFCHRvdGFsTWF0BQpFU1NFTExDT0VGBRBSRVNPVVJDRVBSSUNFTUlOCQBoAgUFTVVMVDgFDlBST0RVQ1RQS0dTSVpFAwkBAiE9AggFA3BtdAZhbW91bnQFCXNlbGxQcmljZQkAAgEJAKwCAgIbUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgCQCkAwEFCXNlbGxQcmljZQQGcmVzdWx0CQEIYXNTdHJpbmcBCQD8BwQFD2Vjb25vbXlDb250cmFjdAIPdXBkYXRlRXNTdG9yYWdlCQDMCAIFBW5ld0VTBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFC3VzZHRBc3NldElkBQlzZWxsUHJpY2UFA25pbAkAlAoCCQDOCAIJAM0IAgUNcHJvbG9nQWN0aW9ucwkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aAUJbmV3SGVhbHRoCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQFCHhwQ2FsbEVTAl8xBQZyZXN1bHQBaQEOdXBkYXRlQmFja3BhY2sCC2R1Y2tBc3NldElkB25ld1BhY2sDCQECIT0CCAUBaQZjYWxsZXIFD2Vjb25vbXlDb250cmFjdAkAAgECEXBlcm1pc3Npb24gZGVuaWVkCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQFB25ld1BhY2sFA25pbAUHbmV3UGFjawFpAQ9jb21taXRGb3JSYW5kb20ABA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQQLZmluaXNoQmxvY2sJAGQCBQZoZWlnaHQFC3JhbmRvbURlbGF5BARhZGRyCQClCAEIBQFpBmNhbGxlcgkAlAoCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJAQlrZXlDb21taXQBBQRhZGRyBQtmaW5pc2hCbG9jawUDbmlsBQ1wcm9sb2dBY3Rpb25zBQtmaW5pc2hCbG9jawFpAQhidXlTTGFuZAAEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQIaQWxsb3dlZCBVU0RUIHBheW1lbnQgb25seSEDCQECIT0CCAUDcG10BmFtb3VudAUHRVhQVVNEVAkAAgEJAKwCAgIbUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgCQCkAwEFB0VYUFVTRFQEBnJlc3VsdAkBEmV4cGVkaXRpb25JbnRlcm5hbAIIBQFpBmNhbGxlcggFAWkNdHJhbnNhY3Rpb25JZAQLYWNyZXNSZXN1bHQJAQVhc0ludAEJAPwHBAUNYWNyZXNDb250cmFjdAIJYnVybkFjcmVzCQDMCAIFDFNfQ09TVF9BQ1JFUwUDbmlsBQNuaWwJAJQKAgkAzggCCQDOCAIJAM0IAggFBnJlc3VsdAJfMQkBDlNjcmlwdFRyYW5zZmVyAwUPZWNvbm9teUNvbnRyYWN0CAUDcG10BmFtb3VudAULdXNkdEFzc2V0SWQICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIJAKUIAQgFAWkGY2FsbGVyBQp4cE5ld1NMYW5kAl8xBQ1wcm9sb2dBY3Rpb25zCQCUCgIICAUGcmVzdWx0Al8yAl8xBQthY3Jlc1Jlc3VsdAFpAQpleHBlZGl0aW9uAgdtZXNzYWdlA3NpZwQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQIdXNlckFkZHIJAKUIAQgFAWkGY2FsbGVyBAFmCQEMZmxpZ2h0Q29tbW9uAwUIdXNlckFkZHIFB21lc3NhZ2UFA3NpZwQLZHVja0Fzc2V0SWQIBQFmAl8yBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAVtTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQGbmV3TWF0CQC5CQIJARFzdWJ0cmFjdE1hdGVyaWFscwMGBQVtTGlzdAUMRVhQTUFURVJJQUxTAgFfBAVlcUtleQkBEGtleUR1Y2tFcXVpcG1lbnQBBQtkdWNrQXNzZXRJZAQJY3VycmVudEVxCQELdmFsdWVPckVsc2UCCQCiCAEFBWVxS2V5AhcsOyxfLDssXyw7LF8sOyxfLDssXyw7LAQNJHQwODM3NzA4Mzg2NwkBEXN1YnRyYWN0RXF1aXBtZW50AgUJY3VycmVudEVxCAUBZgJfNQQFbmV3RXEIBQ0kdDA4Mzc3MDgzODY3Al8xBA9zaG91bGRaZXJvQnVmZnMIBQ0kdDA4Mzc3MDgzODY3Al8yBAFlCQESZXhwZWRpdGlvbkludGVybmFsAggFAWkGY2FsbGVyCAUBaQ10cmFuc2FjdGlvbklkBAJpZAgIBQFlAl8yAl8xBAZyZXN1bHQDCQBnAgAACAUBZgJfMQkAlQoDCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgAAAkAzAgCCQELU3RyaW5nRW50cnkCBQVlcUtleQUFbmV3RXEFA25pbAIAAAAJAJUKAwkAzggCCAUBZQJfMQMFD3Nob3VsZFplcm9CdWZmcwkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5RHVja0J1ZmZzAQULZHVja0Fzc2V0SWQCCTBfMF8wXzBfMAUDbmlsCQDNCAIJAM0IAgkAzQgCCQDNCAIFA25pbAkBC1N0cmluZ0VudHJ5AgkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkCQC5CQIJAMwIAggIBQFlAl8yAl8yCQDMCAICAUwJAMwIAgUCaWQFA25pbAIBXwkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aAgFAWYCXzEJAQtTdHJpbmdFbnRyeQIFBWVxS2V5BQVuZXdFcQkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQDMCAIFBm5ld01hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgUCaWQIBQFmAl8zAwkBD2NoZWNrVG91cm5hbWVudAEFC2R1Y2tBc3NldElkCQACAQIaZXhwZWRpdGlvbl9jaGVja1RvdXJuYW1lbnQDCQENY2hlY2tEZWxpdmVyeQEFC2R1Y2tBc3NldElkCQACAQIYZXhwZWRpdGlvbl9jaGVja0RlbGl2ZXJ5BAthY3Jlc1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ1hY3Jlc0NvbnRyYWN0AglidXJuQWNyZXMJAMwIAgUMU19DT1NUX0FDUkVTBQNuaWwFA25pbAkAlAoCCQDOCAIJAM4IAggFBnJlc3VsdAJfMQgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkBQp4cE5ld1NMYW5kAl8xBQ1wcm9sb2dBY3Rpb25zCQCVCgMIBQZyZXN1bHQCXzIIBQZyZXN1bHQCXzMFC2FjcmVzUmVzdWx0AWkBEGJ1eVNMYW5kRm9yQWNyZXMABA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABANhbXQIBQNwbXQGYW1vdW50AwMJAQEhAQkBCWlzRGVmaW5lZAEIBQNwbXQHYXNzZXRJZAYJAQIhPQIJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAUMYWNyZXNBc3NldElkCQACAQIUQUNSRVMgcGF5bWVudHMgb25seSEDCQECIT0CBQNhbXQFDFNfQ09TVF9BQ1JFUwkAAgEJAKwCAgIbUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgCQCkAwEFDFNfQ09TVF9BQ1JFUwQGcmVzdWx0CQESZXhwZWRpdGlvbkludGVybmFsAggFAWkGY2FsbGVyCAUBaQ10cmFuc2FjdGlvbklkBAthY3Jlc1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ1hY3Jlc0NvbnRyYWN0AglidXJuQWNyZXMJAMwIAgUMU19DT1NUX0FDUkVTBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFDGFjcmVzQXNzZXRJZAUDYW10BQNuaWwJAJQKAgkAzggCCQDOCAIIBQZyZXN1bHQCXzEICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIJAKUIAQgFAWkGY2FsbGVyBQp4cE5ld1NMYW5kAl8xBQ1wcm9sb2dBY3Rpb25zCQCUCgIICAUGcmVzdWx0Al8yAl8xBQthY3Jlc1Jlc3VsdAFpAQx1cGdyYWRlSW5mcmEBC2xhbmRBc3NldElkBA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAZyZXN1bHQJAQ11cEluZnJhQ29tbW9uBAYIBQFpBmNhbGxlcgAABQtsYW5kQXNzZXRJZAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAkAlAoCCQDOCAIJAM4IAggFBnJlc3VsdAJfMQUNcHJvbG9nQWN0aW9ucwgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkCQBrAwUOeHBVcGdyYWRlSW5mcmEIBQZyZXN1bHQCXzMFBU1VTFQ4Al8xCAUGcmVzdWx0Al8yAWkBEGFjdGl2YXRlQXJ0aWZhY3QCB2FydE5hbWUObGFuZEFzc2V0SWRPcHQEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkGY2FsbGVyBAZyZXN1bHQEByRtYXRjaDAFB2FydE5hbWUDCQAAAgIHUFJFU0FMRQUHJG1hdGNoMAkBEmFjdGl2YXRlUHJlc2FsZUFydAIFBGFkZHIFDmxhbmRBc3NldElkT3B0AwkAAAICB09OQk9BUkQFByRtYXRjaDAJARJhY3RpdmF0ZU9uYm9hcmRBcnQBBQRhZGRyCQACAQIQVW5rbm93biBhcnRpZmFjdAkAzggCBQZyZXN1bHQFDXByb2xvZ0FjdGlvbnMBaQEKbWVyZ2VMYW5kcwEMbGFuZEFzc2V0SWRzBA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAZyZXN1bHQJAQttZXJnZUNvbW1vbgIJAKUIAQgFAWkGY2FsbGVyBQxsYW5kQXNzZXRJZHMJAJQKAgkAzggCCQDOCAIIBQZyZXN1bHQCXzEFDXByb2xvZ0FjdGlvbnMICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIJAKUIAQgFAWkGY2FsbGVyBQd4cE1lcmdlAl8xCAUGcmVzdWx0Al8yAWkBDWNhcmdvRXhjaGFuZ2UCDGNhcmdvTGlzdFN0cgtsYW5kQXNzZXRJZAQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQKY2FyZ29QYXJ0cwkAvAkCBQxjYXJnb0xpc3RTdHICAToEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5CQACAQkArAICCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBAlsYW5kSW5kZXgJAGkCCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwULcmVjTGFuZFNpemUFBVNTSVpFBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAoggBCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgQDbG9jCQC1CQIJAQV2YWx1ZQEFC2N1ckxvY2F0aW9uAgFfAwkBAiE9AgkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCAUwJAAIBCQCsAgIJAKwCAgIWRHVjayBsb2NhdGlvbiB0eXBlIGlzIAkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCESwgYnV0IHNob3VsZCBiZSBMAwkBAiE9AgkAkQMCBQNsb2MFCGxvY0lkeElkBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgIbRHVjayBzaG91bGQgYmUgb24gdGhlIGxhbmQgBQtsYW5kQXNzZXRJZAQFd2hLZXkJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAQJY3VycmVudFdoCQEMZ2V0V2FyZWhvdXNlAwUFd2hLZXkFCWxhbmRJbmRleAUKaW5mcmFMZXZlbAQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEBnJlc3VsdAkBCW1vdmVTdHVmZgMFCmNhcmdvUGFydHMFCWN1cnJlbnRXaAULY3VycmVudFBhY2sEBGxvZnQJALUJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4TE9GVAIBXwQFbG9mdE8JAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQIBQZyZXN1bHQCXzcEBWxvZnRGCQBlAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUIBQZyZXN1bHQCXzcJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAugkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAggFBnJlc3VsdAJfNAkAzAgCCAUGcmVzdWx0Al81CQDMCAIIBQZyZXN1bHQCXzYFA25pbAIBOgkAzAgCCQELU3RyaW5nRW50cnkCBQV3aEtleQkAugkCCQDMCAIJAJEDAgUJY3VycmVudFdoBQt3aElkeExldmVscwkAzAgCCAUGcmVzdWx0Al8xCQDMCAIIBQZyZXN1bHQCXzIJAMwIAggFBnJlc3VsdAJfMwkAzAgCCQC5CQIJAMwIAgkAkQMCBQRsb2Z0BQl2b2xMb2NrZWQJAMwIAgkApAMBBQVsb2Z0TwkAzAgCCQCkAwEFBWxvZnRGCQDMCAIJAJEDAgUEbG9mdAUIdm9sVG90YWwFA25pbAIBXwUDbmlsAgE6BQNuaWwFDXByb2xvZ0FjdGlvbnMBaQENc2F2ZVdhcmVob3VzZQIFd2hTdHILbGFuZEFzc2V0SWQDCQECIT0CCAUBaQZjYWxsZXIFD2Vjb25vbXlDb250cmFjdAkAAgECDUFjY2VzcyBkZW5pZWQEBXdoS2V5CQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQEAndoCQC8CQIFBXdoU3RyAgE6AwkBAiE9AgkAkAMBBQJ3aAAFCQACAQIwd2FyZWhvdXNlIHN0cmluZyBzaG91bGQgY29udGFpbiA0ICc6JyBzZXBhcmF0b3JzBAVsb2Z0TAkAkQMCCQC1CQIJAJEDAgUCd2gFCXdoSWR4TE9GVAIBXwUJdm9sTG9ja2VkBAVsb2Z0TwkBF2dldFdhcmVob3VzZU9jY3VwaWVkVm9sAQUCd2gEBWxvZnRUCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBCQCRAwIFAndoBQt3aElkeExldmVscwQFbG9mdEYJAGUCCQBlAgUFbG9mdFQJAQ1wYXJzZUludFZhbHVlAQUFbG9mdEwFBWxvZnRPAwkAZgIAAAUFbG9mdEYJAAIBAjBPcGVyYXRpb24gbGVhZHMgdG8gbmVnYXRpdmUgZnJlZSB3YXJlaG91c2Ugc3BhY2UECG5ld1doU3RyCQC6CQIJAMwIAgkAkQMCBQJ3aAULd2hJZHhMZXZlbHMJAMwIAgkAkQMCBQJ3aAUId2hJZHhSZXMJAMwIAgkAkQMCBQJ3aAUId2hJZHhNYXQJAMwIAgkAkQMCBQJ3aAUJd2hJZHhQcm9kCQDMCAIJALkJAgkAzAgCBQVsb2Z0TAkAzAgCCQCkAwEFBWxvZnRPCQDMCAIJAKQDAQUFbG9mdEYJAMwIAgkApAMBBQVsb2Z0VAUDbmlsAgFfBQNuaWwCAToJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCBQV3aEtleQUIbmV3V2hTdHIFA25pbAUIbmV3V2hTdHIBaQENc2V0Q3VzdG9tTmFtZQMHYXNzZXRJZApjdXN0b21OYW1lBHR5cGUEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQIaQWxsb3dlZCBVU0RUIHBheW1lbnQgb25seSEDCQECIT0CCAUDcG10BmFtb3VudAUMUkVOQU1JTkdDT1NUCQACAQkArAICAhJQYXltZW50IHNob3VsZCBiZSAJAKQDAQUMUkVOQU1JTkdDT1NUAwkBCGNvbnRhaW5zAgUKY3VzdG9tTmFtZQICX18JAAIBCQCsAgICHk5hbWUgc2hvdWxkIG5vdCBjb250YWluICdfXyc6IAUKY3VzdG9tTmFtZQMJAGYCCQCxAgEFCmN1c3RvbU5hbWUFCk1BWE5BTUVMRU4JAAIBCQCsAgICGU5hbWUgdG9vIGxvbmcsIG1heExlbmd0aD0JAKQDAQUKTUFYTkFNRUxFTgQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEB2FjdGlvbnMEByRtYXRjaDAFBHR5cGUDCQAAAgIHQUNDT1VOVAUHJG1hdGNoMAQKcmV2ZXJzZUtleQkBFmtleUN1c3RvbU5hbWVUb0FkZHJlc3MBBQpjdXN0b21OYW1lBAluYW1lT3duZXIJAKIIAQUKcmV2ZXJzZUtleQMJAQlpc0RlZmluZWQBBQluYW1lT3duZXIJAAIBCQCsAgICGU5hbWUgYWxyZWFkeSByZWdpc3RlcmVkOiAFCmN1c3RvbU5hbWUEDWFkZHJUb05hbWVLZXkJARZrZXlBZGRyZXNzVG9DdXN0b21OYW1lAQUEYWRkcgQHb2xkTmFtZQkAoggBBQ1hZGRyVG9OYW1lS2V5BAdmcmVlT2xkAwkBCWlzRGVmaW5lZAEFB29sZE5hbWUJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBFmtleUN1c3RvbU5hbWVUb0FkZHJlc3MBCQEFdmFsdWUBBQdvbGROYW1lBQNuaWwFA25pbAkAzggCCQDNCAIJAM0IAgUHZnJlZU9sZAkBC1N0cmluZ0VudHJ5AgUNYWRkclRvTmFtZUtleQUKY3VzdG9tTmFtZQkBC1N0cmluZ0VudHJ5AgUKcmV2ZXJzZUtleQUEYWRkcggJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgUEYWRkcgUMeHBDdXN0b21OYW1lAl8xAwkAAAICBExBTkQFByRtYXRjaDAEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQdhc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5CQACAQkArAICCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFB2Fzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMECnJldmVyc2VLZXkJARprZXlMYW5kQ3VzdG9tTmFtZVRvQXNzZXRJZAEFCmN1c3RvbU5hbWUECW5hbWVPd25lcgkAoggBBQpyZXZlcnNlS2V5AwkBCWlzRGVmaW5lZAEFCW5hbWVPd25lcgkAAgEJAKwCAgIZTmFtZSBhbHJlYWR5IHJlZ2lzdGVyZWQ6IAUKY3VzdG9tTmFtZQQOYXNzZXRUb05hbWVLZXkJARprZXlMYW5kQXNzZXRJZFRvQ3VzdG9tTmFtZQEFB2Fzc2V0SWQEB29sZE5hbWUJAKIIAQUOYXNzZXRUb05hbWVLZXkEB2ZyZWVPbGQDCQEJaXNEZWZpbmVkAQUHb2xkTmFtZQkAzAgCCQELRGVsZXRlRW50cnkBCQEaa2V5TGFuZEN1c3RvbU5hbWVUb0Fzc2V0SWQBCQEFdmFsdWUBBQdvbGROYW1lBQNuaWwFA25pbAkAzggCCQDNCAIJAM0IAgUHZnJlZU9sZAkBC1N0cmluZ0VudHJ5AgUOYXNzZXRUb05hbWVLZXkFCmN1c3RvbU5hbWUJAQtTdHJpbmdFbnRyeQIFCnJldmVyc2VLZXkFB2Fzc2V0SWQICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIFBGFkZHIFDHhwQ3VzdG9tTmFtZQJfMQMJAAACAgREVUNLBQckbWF0Y2gwBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQUHYXNzZXRJZAMDCQEBIQEJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkGCQEBIQEJAQlpc0RlZmluZWQBCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHIJAAIBCQCsAgIIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEQa2V5RHVja0lkVG9Pd25lcgEFB2Fzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkRVQ0tQUkVGSVgCDSBpcyBub3QgeW91cnMECnJldmVyc2VLZXkJARprZXlEdWNrQ3VzdG9tTmFtZVRvQXNzZXRJZAEFCmN1c3RvbU5hbWUECW5hbWVPd25lcgkAoggBBQpyZXZlcnNlS2V5AwkBCWlzRGVmaW5lZAEFCW5hbWVPd25lcgkAAgEJAKwCAgIZTmFtZSBhbHJlYWR5IHJlZ2lzdGVyZWQ6IAUKY3VzdG9tTmFtZQQOYXNzZXRUb05hbWVLZXkJARprZXlEdWNrQXNzZXRJZFRvQ3VzdG9tTmFtZQEFB2Fzc2V0SWQEB29sZE5hbWUJAKIIAQUOYXNzZXRUb05hbWVLZXkEB2ZyZWVPbGQDCQEJaXNEZWZpbmVkAQUHb2xkTmFtZQkAzAgCCQELRGVsZXRlRW50cnkBCQEaa2V5RHVja0N1c3RvbU5hbWVUb0Fzc2V0SWQBCQEFdmFsdWUBBQdvbGROYW1lBQNuaWwFA25pbAkAzggCCQDNCAIJAM0IAgUHZnJlZU9sZAkBC1N0cmluZ0VudHJ5AgUOYXNzZXRUb05hbWVLZXkFCmN1c3RvbU5hbWUJAQtTdHJpbmdFbnRyeQIFCnJldmVyc2VLZXkFB2Fzc2V0SWQICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQdhc3NldElkBQx4cEN1c3RvbU5hbWUCXzEJAAIBAhNVbmtub3duIGVudGl0eSB0eXBlCQCUCgIJAM4IAgkAzQgCBQdhY3Rpb25zCQEOU2NyaXB0VHJhbnNmZXIDBQ9lY29ub215Q29udHJhY3QIBQNwbXQGYW1vdW50BQt1c2R0QXNzZXRJZAUNcHJvbG9nQWN0aW9ucwAAAWkBDHNldFJlZmVycmFscwIJb2xkUGxheWVyCW5ld1BsYXllcgMJAQIhPQIIBQFpD2NhbGxlclB1YmxpY0tleQUDcHViCQACAQIRUGVybWlzc2lvbiBkZW5pZWQEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQDCQEBIQEJAQlpc0RlZmluZWQBCQCmCAEFCW9sZFBsYXllcgkAAgEJAKwCAgIRSW52YWxpZCBhZGRyZXNzOiAFCW9sZFBsYXllcgMJAQEhAQkBCWlzRGVmaW5lZAEJAKYIAQUJbmV3UGxheWVyCQACAQkArAICAhFJbnZhbGlkIGFkZHJlc3M6IAUJbmV3UGxheWVyBAdvbGRzS2V5CQEJa2V5T2xkaWVzAAQEb2xkcwkAoggBBQdvbGRzS2V5BAZvbGRpZXMDCQEJaXNEZWZpbmVkAQUEb2xkcwkAvAkCCQEFdmFsdWUBBQRvbGRzAgFfBQNuaWwDCQEPY29udGFpbnNFbGVtZW50AgUGb2xkaWVzBQluZXdQbGF5ZXIJAAIBCQCsAgIFCW5ld1BsYXllcgImIGlzIG5vdCBuZXdiaWUgKGFscmVhZHkgaGFzIHJlZmVycmFscykECHJlZkJ5S2V5CQEPa2V5QWRkcmVzc1JlZkJ5AQUJbmV3UGxheWVyBAVyZWZCeQkAoggBBQhyZWZCeUtleQMDCQEJaXNEZWZpbmVkAQUFcmVmQnkJAQlpc0RlZmluZWQBCQCmCAEJAQV2YWx1ZQEFBXJlZkJ5BwkAAgEJAKwCAgkArAICBQluZXdQbGF5ZXICFCBhbHJlYWR5IGhhcyByZWZCeTogCQEFdmFsdWUBBQVyZWZCeQQHcmVmc0tleQkBE2tleUFkZHJlc3NSZWZlcnJhbHMBBQlvbGRQbGF5ZXIEBHJlZnMJAKIIAQUHcmVmc0tleQQJcmVmc0FycmF5AwkBCWlzRGVmaW5lZAEFBHJlZnMJALwJAgkBBXZhbHVlAQUEcmVmcwIBXwUDbmlsAwkBD2NvbnRhaW5zRWxlbWVudAIFCXJlZnNBcnJheQUJbmV3UGxheWVyCQACAQkArAICCQCsAgIJAKwCAgUJb2xkUGxheWVyAhIgYWxyZWFkeSBjb250YWlucyAFCW5ld1BsYXllcgIRIHdpdGhpbiByZWZlcnJhbHMEB25ld1JlZnMJALoJAgkAzQgCBQlyZWZzQXJyYXkFCW5ld1BsYXllcgIBXwQHbmV3T2xkcwMJAQ9jb250YWluc0VsZW1lbnQCBQZvbGRpZXMFCW9sZFBsYXllcgkBBXZhbHVlAQUEb2xkcwkAugkCCQDNCAIFBm9sZGllcwUJb2xkUGxheWVyAgFfCQCUCgIJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCBQhyZWZCeUtleQUJb2xkUGxheWVyCQDMCAIJAQtTdHJpbmdFbnRyeQIFB3JlZnNLZXkFB25ld1JlZnMJAMwIAgkBC1N0cmluZ0VudHJ5AgUHb2xkc0tleQUHbmV3T2xkcwUDbmlsBQ1wcm9sb2dBY3Rpb25zAAABaQEQZGlzdHJpYnV0ZVBvaW50cwUIc3RyZW5ndGgIYWNjdXJhY3kJaW50ZWxsZWN0CWVuZHVyYW5jZQlkZXh0ZXJpdHkEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAt2aXJ0V2xnRGF0YQkBCWFzQW55TGlzdAEJAPwHBAULd2xnQ29udHJhY3QCEmNoZWNrV2xnWHBSRUFET05MWQkAzAgCBQRhZGRyBQNuaWwFA25pbAQNdmlydFdsZ1BvaW50cwkBBWFzSW50AQkAkQMCBQt2aXJ0V2xnRGF0YQABBA0kdDA5OTQ4Nzk5ODc3AwkAZwIAAAUNdmlydFdsZ1BvaW50cwkAlAoCAAAFA25pbAQHZGVsdGFYUAkBBWFzSW50AQkA/AcEBQt3bGdDb250cmFjdAIJdGFrZVdsZ1hwCQDMCAIFBGFkZHIFA25pbAUDbmlsAwkAAAIFB2RlbHRhWFAFB2RlbHRhWFAJAJQKAgUNdmlydFdsZ1BvaW50cwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDGtleVVzZXJMZXZlbAEFBGFkZHIJAQVhc0ludAEJAJEDAgULdmlydFdsZ0RhdGEAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBCWtleVVzZXJYUAEFBGFkZHIJAQVhc0ludAEJAJEDAgULdmlydFdsZ0RhdGEAAgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBAl3bGdQb2ludHMIBQ0kdDA5OTQ4Nzk5ODc3Al8xBAp3bGdBY3Rpb25zCAUNJHQwOTk0ODc5OTg3NwJfMgQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBApmcmVlS2V5QWNjCQERa2V5VXNlckZyZWVQb2ludHMBBQRhZGRyBA1mcmVlUG9pbnRzQWNjCQBkAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQpmcmVlS2V5QWNjAAAFCXdsZ1BvaW50cwQLZnJlZUtleUR1Y2sJARFrZXlEdWNrRnJlZVBvaW50cwEFC2R1Y2tBc3NldElkBA5mcmVlUG9pbnRzRHVjawkBC3ZhbHVlT3JFbHNlAgkAnwgBBQtmcmVlS2V5RHVjawAABAdzdW1GcmVlCQBkAgUNZnJlZVBvaW50c0FjYwUOZnJlZVBvaW50c0R1Y2sED3N1bVRvRGlzdHJpYnV0ZQkAZAIJAGQCCQBkAgkAZAIFCHN0cmVuZ3RoBQhhY2N1cmFjeQUJaW50ZWxsZWN0BQllbmR1cmFuY2UFCWRleHRlcml0eQMJAGYCBQ9zdW1Ub0Rpc3RyaWJ1dGUFB3N1bUZyZWUJAAIBCQCsAgIJAKwCAgIPVGhlcmUgYXJlIG9ubHkgCQCkAwEFB3N1bUZyZWUCGiBmcmVlIHBvaW50cyB0byBkaXN0cmlidXRlBAhjaGFyc0tleQkBDGtleUR1Y2tDaGFycwEFC2R1Y2tBc3NldElkBAVjaGFycwkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEFCGNoYXJzS2V5AgkwXzBfMF8wXzACAV8EBm5ld0FjYwkAZQIFDWZyZWVQb2ludHNBY2MFD3N1bVRvRGlzdHJpYnV0ZQkAlAoCCQDOCAIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUKZnJlZUtleUFjYwMJAGYCAAAFBm5ld0FjYwAABQZuZXdBY2MJAMwIAgkBDEludGVnZXJFbnRyeQIFC2ZyZWVLZXlEdWNrAwkAZgIAAAUGbmV3QWNjCQBkAgUOZnJlZVBvaW50c0R1Y2sFBm5ld0FjYwUOZnJlZVBvaW50c0R1Y2sJAMwIAgkBC1N0cmluZ0VudHJ5AgUIY2hhcnNLZXkJALkJAgkAzAgCCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDGNoYXJTdHJlbmd0aAUIc3RyZW5ndGgJAMwIAgkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQxjaGFyQWNjdXJhY3kFCGFjY3VyYWN5CQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckludGVsbGVjdAUJaW50ZWxsZWN0CQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckVuZHVyYW5jZQUJZW5kdXJhbmNlCQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckRleHRlcml0eQUJZGV4dGVyaXR5BQNuaWwCAV8FA25pbAUNcHJvbG9nQWN0aW9ucwUKd2xnQWN0aW9ucwAAAWkBHHNwbGl0QnlHbG9iYWxXZWlnaHRzUkVBRE9OTFkBBmFtb3VudAkAlAoCBQNuaWwJARJnZXROZWVkZWRNYXRlcmlhbHMBBQZhbW91bnQBaQEkc3BsaXRCeUdsb2JhbEFuZExvY2FsV2VpZ2h0c1JFQURPTkxZAwltYXRBbW91bnQJcmVzQW1vdW50CHRlcnJhaW5zBA10ZXJyYWluQ291bnRzCQENY291bnRUZXJyYWlucwEFCHRlcnJhaW5zCQCUCgIFA25pbAkAlAoCCQESZ2V0TmVlZGVkTWF0ZXJpYWxzAQUJbWF0QW1vdW50CQETZGlzdHJpYnV0ZUJ5V2VpZ2h0cwIFCXJlc0Ftb3VudAUNdGVycmFpbkNvdW50cwFpARNnZXRCYWNrcGFja1JFQURPTkxZAQtkdWNrQXNzZXRJZAkAlAoCBQNuaWwJALkJAgkBC2dldEJhY2twYWNrAQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQCAToBaQEUZ2V0V2FyZWhvdXNlUkVBRE9OTFkBC2xhbmRBc3NldElkBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAlsYW5kSW5kZXgJAGkCCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwULcmVjTGFuZFNpemUFBVNTSVpFBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAkAlAoCBQNuaWwJALoJAgkBDGdldFdhcmVob3VzZQMJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAUJbGFuZEluZGV4BQppbmZyYUxldmVsAgE6AWkBCnNhdmVMYXN0VHgAAwkBASEBCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQt3bGdDb250cmFjdAkAzAgCBQ9lY29ub215Q29udHJhY3QJAMwIAgUSdG91cm5hbWVudENvbnRyYWN0CQDMCAIFDWFjcmVzQ29udHJhY3QFA25pbAgFAWkGY2FsbGVyCQACAQINQWNjZXNzIGRlbmllZAkAlAoCCQEGcHJvbG9nAQUBaQAqAWkBD3VwZGF0ZUR1Y2tTdGF0cwILZHVja0Fzc2V0SWQHZGVsdGFYUAMJAQIhPQIIBQFpBmNhbGxlcgUPZWNvbm9teUNvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQFB2RlbHRhWFABaQEOdXBkYXRlQWNjU3RhdHMCBGFkZHIHZGVsdGFYUAMJAQEhAQkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgULd2xnQ29udHJhY3QJAMwIAgUPZWNvbm9teUNvbnRyYWN0CQDMCAIFDWFjcmVzQ29udHJhY3QFA25pbAgFAWkGY2FsbGVyCQACAQINQWNjZXNzIGRlbmllZAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCBQRhZGRyBQdkZWx0YVhQAWkBCWVxdWlwRHVjawEJZXF1aXBtZW50BA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBD2NoZWNrVG91cm5hbWVudAEFC2R1Y2tBc3NldElkCQACAQIZZXF1aXBEdWNrX2NoZWNrVG91cm5hbWVudAMJAQ1jaGVja0RlbGl2ZXJ5AQULZHVja0Fzc2V0SWQJAAIBAhdlcXVpcER1Y2tfY2hlY2tEZWxpdmVyeQQFZXFLZXkJARBrZXlEdWNrRXF1aXBtZW50AQULZHVja0Fzc2V0SWQEC2N1cnJlbnRTZWdzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUFZXFLZXkCFyw7LF8sOyxfLDssXyw7LF8sOyxfLDssAgFfBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQFbmV3RXEJALUJAgUJZXF1aXBtZW50AgFfAwkBAiE9AgkAkAMBBQVuZXdFcQULTlVNU0VHTUVOVFMJAAIBAhZXcm9uZyBlcXVpcG1lbnQgc3RyaW5nBAl0ZW1wUHJvZEIJAQZkcmVzc0IEBQtjdXJyZW50U2VncwkBDnByb2RTdHJUb0J5dGVzAQkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBgUDbmlsBAhzZWdCcEF1eAkAkQMCCQC1CQIJAJEDAgUFbmV3RXEFC3NlZ0JhY2twYWNrAgE7AAEECmJ1ZmZFZmZlY3QDCQAAAgUIc2VnQnBBdXgCAAAABARhdXgwCQCRAwIJALUJAgUIc2VnQnBBdXgCASwAAAMJAAACBQRhdXgwAgAAAAQGaWR4Q250CQC1CQIFBGF1eDACAToEA2lkeAkAkQMCBQZpZHhDbnQAAAQDY250CQCRAwIFBmlkeENudAABAwMDAwMJAAACBQNpZHgCAjA2BgkAAAIFA2lkeAICMDcGCQAAAgUDaWR4AgIwOAkBAiE9AgUDY250AgAHCQBmAgkBDXBhcnNlSW50VmFsdWUBBQNjbnQAAAcJAQ1wYXJzZUludFZhbHVlAQkAkQMCCQC1CQIJAJEDAgUQcHJvZHVjdGlvbk1hdHJpeAkBDXBhcnNlSW50VmFsdWUBBQNpZHgCAV8FCnJJZHhFZmZlY3QAAAQFc3RhdHMJAQxnZXREdWNrU3RhdHMEBQR0aGlzBQtkdWNrQXNzZXRJZAUKYnVmZkVmZmVjdAYECG5ld1Byb2RCCQEGZHJlc3NCBAUFbmV3RXEFCXRlbXBQcm9kQgcFBXN0YXRzBApuZXdQcm9kU3RyCQEOYnl0ZXNUb1Byb2RTdHIBBQhuZXdQcm9kQgkAlAoCCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFZXFLZXkFCWVxdWlwbWVudAkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAugkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQJAMwIAgUKbmV3UHJvZFN0cgUDbmlsAgE6CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxrZXlEdWNrQnVmZnMBBQtkdWNrQXNzZXRJZAkAuQkCCQDMCAIJAKQDAQkAkQMCBQVzdGF0cwAHCQDMCAIJAKQDAQkAkQMCBQVzdGF0cwAICQDMCAIJAKQDAQkAkQMCBQVzdGF0cwAJCQDMCAIJAKQDAQkAkQMCBQVzdGF0cwAKCQDMCAIJAKQDAQkAkQMCBQVzdGF0cwALBQNuaWwCAV8FA25pbAUNcHJvbG9nQWN0aW9ucwAAAWkBD2ZvcnRpZmljYXRlTGFuZAILbGFuZEFzc2V0SWQEcGxhbgQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEC2R1Y2tBc3NldElkCQELdmFsdWVPckVsc2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICAAQJZHVja1N0YXRzCQEMZ2V0RHVja1N0YXRzBAUEdGhpcwULZHVja0Fzc2V0SWQAAAcEB2ZvcnRLZXkJARdrZXlGb3J0aWZpY2F0aW9uc0J5TGFuZAEFC2xhbmRBc3NldElkBAxjdXJyZW50Rm9ydHMJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQdmb3J0S2V5Agw6MF8xNTowXzE4OjACAV8EBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQECWxhbmRJbmRleAkAaQIJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfBQtyZWNMYW5kU2l6ZQUFU1NJWkUECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAV3aEtleQkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkBAJ3aAkBDGdldFdhcmVob3VzZQMFBXdoS2V5BQlsYW5kSW5kZXgFCmluZnJhTGV2ZWwEB2N1ckxvZnQJALUJAgkAkQMCBQJ3aAUJd2hJZHhMT0ZUAgFfBARjdXJPCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHY3VyTG9mdAULdm9sT2NjdXBpZWQEBGN1ckYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdjdXJMb2Z0BQd2b2xGcmVlBAhuZXdGb3J0cwkAtQkCBQRwbGFuAgFfBA8kdDAxMDY3MTUxMDY4MzAJAQVmb3J0QgYFDGN1cnJlbnRGb3J0cwkBDnByb2RTdHJUb0J5dGVzAQkAkQMCBQJ3aAUJd2hJZHhQcm9kBQRjdXJPBQRjdXJGBgUDbmlsBAl0ZW1wUHJvZEIIBQ8kdDAxMDY3MTUxMDY4MzACXzEEBXRlbXBPCAUPJHQwMTA2NzE1MTA2ODMwAl8yBAV0ZW1wRggFDyR0MDEwNjcxNTEwNjgzMAJfMwQPJHQwMTA2ODMzMTA2OTI5CQEFZm9ydEIGBQhuZXdGb3J0cwUJdGVtcFByb2RCBQV0ZW1wTwUFdGVtcEYHBQlkdWNrU3RhdHMECG5ld1Byb2RCCAUPJHQwMTA2ODMzMTA2OTI5Al8xBARuZXdPCAUPJHQwMTA2ODMzMTA2OTI5Al8yBARuZXdGCAUPJHQwMTA2ODMzMTA2OTI5Al8zBApuZXdQcm9kU3RyCQEOYnl0ZXNUb1Byb2RTdHIBBQhuZXdQcm9kQgQKbmV3TG9mdFN0cgkAuQkCCQDMCAIJAJEDAgUHY3VyTG9mdAUJdm9sTG9ja2VkCQDMCAIJAKQDAQUEbmV3TwkAzAgCCQCkAwEFBG5ld0YJAMwIAgkAkQMCBQdjdXJMb2Z0BQh2b2xUb3RhbAUDbmlsAgFfCQCUCgIJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCBQdmb3J0S2V5BQRwbGFuCQDMCAIJAQtTdHJpbmdFbnRyeQIFBXdoS2V5CQC6CQIJAMwIAgkAkQMCBQJ3aAULd2hJZHhMZXZlbHMJAMwIAgkAkQMCBQJ3aAUId2hJZHhSZXMJAMwIAgkAkQMCBQJ3aAUId2hJZHhNYXQJAMwIAgUKbmV3UHJvZFN0cgkAzAgCBQpuZXdMb2Z0U3RyBQNuaWwCAToFA25pbAUNcHJvbG9nQWN0aW9ucwAAAWkBE2luaXREdWNrVG91ckF0dGVtcHQBC2R1Y2tBc3NldElkAwkBAiE9AggFAWkGY2FsbGVyBRJ0b3VybmFtZW50Q29udHJhY3QJAAIBAg1BY2Nlc3MgZGVuaWVkBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQEBW1heEhQCQEJbWF4SGVhbHRoAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMa2V5RHVja0xldmVsAQULZHVja0Fzc2V0SWQAAAQJY3VySGVhbHRoCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aAUFbWF4SFAECWN1ckxvY0tleQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAoggBBQljdXJMb2NLZXkFD0RFRkFVTFRMT0NBVElPTgQGbGFzdElkCQELdmFsdWVPckVsc2UCCQCaCAIFEnRvdXJuYW1lbnRDb250cmFjdAUNbGFzdFRvdXJJZEtleQAABAx0b3VyTG9jYXRpb24JAKwCAgkApAMBBQZsYXN0SWQCBF9UXzAJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDmtleVNhdmVkSGVhbHRoAQULZHVja0Fzc2V0SWQFCWN1ckhlYWx0aAkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoBQVtYXhIUAkAzAgCCQELU3RyaW5nRW50cnkCCQEQa2V5U2F2ZWRMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQtjdXJMb2NhdGlvbgkAzAgCCQELU3RyaW5nRW50cnkCBQljdXJMb2NLZXkFDHRvdXJMb2NhdGlvbgUDbmlsBQx0b3VyTG9jYXRpb24BaQEMYnJlYWtBdHRlbXB0AAQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQECWN1ckxvY0tleQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAoggBBQljdXJMb2NLZXkFD0RFRkFVTFRMT0NBVElPTgMJAQIhPQIJAJEDAgkAtQkCBQtjdXJMb2NhdGlvbgIBXwUKbG9jSWR4VHlwZQIBVAkAAgECIllvdXIgZHVjayBpcyBub3QgaW4gdGhlIHRvdXJuYW1lbnQEC3NhdmVkSGVhbHRoCQERQGV4dHJOYXRpdmUoMTA1NSkBCQEOa2V5U2F2ZWRIZWFsdGgBBQtkdWNrQXNzZXRJZAQNc2F2ZWRMb2NhdGlvbgkBEUBleHRyTmF0aXZlKDEwNTgpAQkBEGtleVNhdmVkTG9jYXRpb24BBQtkdWNrQXNzZXRJZAkAlAoCCQDNCAIJAM0IAgUNcHJvbG9nQWN0aW9ucwkBDEludGVnZXJFbnRyeQIJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQFC3NhdmVkSGVhbHRoCQELU3RyaW5nRW50cnkCBQljdXJMb2NLZXkFDXNhdmVkTG9jYXRpb24FC2N1ckxvY2F0aW9uAWkBFmV4aXRUb3VybmFtZW50SW50ZXJuYWwBC2R1Y2tBc3NldElkAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQINQWNjZXNzIGRlbmllZAQLc2F2ZWRIZWFsdGgJARFAZXh0ck5hdGl2ZSgxMDU1KQEJAQ5rZXlTYXZlZEhlYWx0aAEFC2R1Y2tBc3NldElkBA1zYXZlZExvY2F0aW9uCQERQGV4dHJOYXRpdmUoMTA1OCkBCQEQa2V5U2F2ZWRMb2NhdGlvbgEFC2R1Y2tBc3NldElkCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQFC3NhdmVkSGVhbHRoCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUNc2F2ZWRMb2NhdGlvbgUDbmlsBwFpARRleGl0RGVsaXZlcnlJbnRlcm5hbAELZHVja0Fzc2V0SWQDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAg1BY2Nlc3MgZGVuaWVkBAFlCQESZXhpdERlbGl2ZXJ5Q29tbW9uBAULZHVja0Fzc2V0SWQHAAAAAAkAlAoCCQDOCAIIBQFlAl8xCAUBZQJfMgcBaQEQYXV0b0V4aXREZWxpdmVyeQQLZHVja0Fzc2V0SWQFbmV3SFAGcmVhc29uBXNjb3JlAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQINQWNjZXNzIGRlbmllZAQBZQkBEmV4aXREZWxpdmVyeUNvbW1vbgQFC2R1Y2tBc3NldElkBgUFbmV3SFAFBXNjb3JlCQCUCgIIBQFlAl8xCAUBZQJfMwFpAQ1icmVha0RlbGl2ZXJ5AAkAlAoCCQEGcHJvbG9nAQUBaQINYnJlYWtEZWxpdmVyeQFpAQ5wcmVwYXJlUm9iYmVyeQIHbWVzc2FnZQNzaWcEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBASEBCQDEEwMFB21lc3NhZ2UFA3NpZwUDcHViCQACAQIYc2lnbmF0dXJlIGRvZXMgbm90IG1hdGNoAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEBndsZ0FtdAgFA3BtdAZhbW91bnQDAwkBASEBCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBgkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkBQp3bGdBc3NldElkCQACAQIVV0xHT0xEIHBheW1lbnRzIG9ubHkhBAVwYXJ0cwkAtQkCCQCwCQEFB21lc3NhZ2UCAXwDCQECIT0CCQCQAwEFBXBhcnRzAAIJAAIBAhRXcm9uZyBtZXNzYWdlIGZvcm1hdAQLZHVja0Fzc2V0SWQJAJEDAgUFcGFydHMAAAMJAQ9jaGVja1RvdXJuYW1lbnQBBQtkdWNrQXNzZXRJZAkAAgECHnByZXBhcmVSb2JiZXJ5X2NoZWNrVG91cm5hbWVudAMJAQ1jaGVja0RlbGl2ZXJ5AQULZHVja0Fzc2V0SWQJAAIBAhxwcmVwYXJlUm9iYmVyeV9jaGVja0RlbGl2ZXJ5BAdyb2JDb3N0CAkBDmdldFJvYmJlcnlEYXRhAgUEdGhpcwULZHVja0Fzc2V0SWQCXzEDCQBmAgUHcm9iQ29zdAUGd2xnQW10CQACAQkArAICCQCsAgIJAKwCAgIIUGF5bWVudCAJAKQDAQUGd2xnQW10AgwgPCByZXF1aXJlZCAJAKQDAQUHcm9iQ29zdAQKY2FuZGlkYXRlcwkAtQkCCQCRAwIFBXBhcnRzAAECAV8EA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAECWR1Y2tTdGF0ZQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQETa2V5RHVja1JvYmJlcnlTdGF0ZQEFC2R1Y2tBc3NldElkAAAECmxvY2tlZExhbmQJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBE2tleUxvY2tlZExhbmRCeUR1Y2sBBQtkdWNrQXNzZXRJZAIABAdsYW5kRVRBCQELdmFsdWVPckVsc2UCCQCfCAEJARJrZXlMYW5kQ29vbGRvd25FVEEBBQpsb2NrZWRMYW5kAAADAwkBAiE9AgUJZHVja1N0YXRlBQtkdWNrSWR4RnJlZQkAZgIFB2xhbmRFVEEFA25vdwcJAAIBCQCsAgICJ1lvdSBhbHJlYWR5IHN0YXJ0ZWQgcm9iYmluZywgd2FpdCB0aWxsIAkApAMBBQdsYW5kRVRBCgEHY2hlY2tlcgIDYWNjC2xhbmRBc3NldElkBAVzdGF0ZQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQETa2V5TGFuZFJvYmJlcnlTdGF0ZQEFC2xhbmRBc3NldElkAAAEC2Nvb2xkb3duRVRBCQELdmFsdWVPckVsc2UCCQCfCAEJARJrZXlMYW5kQ29vbGRvd25FVEEBBQtsYW5kQXNzZXRJZAAAAwkAZgIFBXN0YXRlCQCQAwEFEGxhbmRSb2JDb29sZG93bnMJAAIBAg1JbnZhbGlkIHN0YXRlAwkAZgIFA25vdwULY29vbGRvd25FVEEECnN0YWtlZFRpbWUJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAAAwkAZwIAAAUKc3Rha2VkVGltZQUDYWNjBAFhCQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQEAWQJALUJAggFAWELZGVzY3JpcHRpb24CAV8EBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAgUBZAULcmVjTGFuZFNpemUEDHByb2R1Y3Rpdml0eQkBDGFwcGx5Qm9udXNlcwIFC2xhbmRBc3NldElkBQZwaWVjZXMECWRlbHRhVGltZQkAZQIFA25vdwUKc3Rha2VkVGltZQQIYXZhaWxSZXMJAGsDBQlkZWx0YVRpbWUJAGgCBQxwcm9kdWN0aXZpdHkFBnBpZWNlcwUJREFZTUlMTElTAwkAZgIFDk1JTl9SRVNfVE9fUk9CBQhhdmFpbFJlcwUDYWNjCQDNCAIFA2FjYwULbGFuZEFzc2V0SWQFA2FjYwQIZmlsdGVyZWQKAAIkbAUKY2FuZGlkYXRlcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEHY2hlY2tlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgMJAAACCQCQAwEFCGZpbHRlcmVkAAAJAAIBAhlObyBjYW5kaWRhdGVzIGZvciByb2JiZXJ5BAZybmRJZHgJAQ9nZXRSYW5kb21OdW1iZXIDCQCQAwEFCGZpbHRlcmVkBQdtZXNzYWdlBQNzaWcEC2xhbmRBc3NldElkCQCRAwIFCGZpbHRlcmVkBQZybmRJZHgJAJQKAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQETa2V5TGFuZFJvYmJlcnlTdGF0ZQEFC2xhbmRBc3NldElkBQxyb2JJZHhMb2NrZWQJAMwIAgkBDEludGVnZXJFbnRyeQIJARJrZXlMYW5kQ29vbGRvd25FVEEBBQtsYW5kQXNzZXRJZAkAZAIFA25vdwkAkQMCBRBsYW5kUm9iQ29vbGRvd25zBQxyb2JJZHhMb2NrZWQJAMwIAgkBDEludGVnZXJFbnRyeQIJARNrZXlEdWNrUm9iYmVyeVN0YXRlAQULZHVja0Fzc2V0SWQFEGR1Y2tJZHhQcmVwYXJpbmcJAMwIAgkBC1N0cmluZ0VudHJ5AgkBE2tleUxvY2tlZExhbmRCeUR1Y2sBBQtkdWNrQXNzZXRJZAULbGFuZEFzc2V0SWQFA25pbAUNcHJvbG9nQWN0aW9ucwULbGFuZEFzc2V0SWQBaQEHcm9iTGFuZAIHbWVzc2FnZQNzaWcEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBASEBCQDEEwMFB21lc3NhZ2UFA3NpZwUDcHViCQACAQIYc2lnbmF0dXJlIGRvZXMgbm90IG1hdGNoBAh1c2VyQWRkcgkApQgBCAUBaQZjYWxsZXIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUIdXNlckFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAJQKAgkAzQgCBQ1wcm9sb2dBY3Rpb25zCQEMSW50ZWdlckVudHJ5AgkBGGtleUxhc3RSb2JiZXJ5VGltZUJ5RHVjawEFC2R1Y2tBc3NldElkBQNub3cAAAFpAQ5hY2NlcHREZWxpdmVyeQAEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpBAh1c2VyQWRkcgkApQgBCAUBaQZjYWxsZXIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUIdXNlckFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQECWZ1bmRUb3RhbAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9lY29ub215Q29udHJhY3QFD2RlbGl2ZXJ5RnVuZEtleQAABAtsb2NrZWRUb3RhbAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9lY29ub215Q29udHJhY3QFEWRlbGl2ZXJ5TG9ja2VkS2V5AAADCQBmAgUVTUlOX1VTRFRfRkVFX0RFTElWRVJZCQBlAgUJZnVuZFRvdGFsBQtsb2NrZWRUb3RhbAkAAgEJAKwCAgkArAICCQCsAgICIERlbGl2ZXJ5IGlzIG5vdCBhdmFpbGFibGUsIGZ1bmQ9CQEKZml4ZWRQb2ludAIFCWZ1bmRUb3RhbAAGAgksIGxvY2tlZD0JAQpmaXhlZFBvaW50AgULbG9ja2VkVG90YWwABgQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQIZGVsYXlFVEEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleURlbGl2ZXJ5RGVsYXlCeUR1Y2sBBQtkdWNrQXNzZXRJZAAAAwkAZgIFCGRlbGF5RVRBBQNub3cJAAIBCQCsAgICKkRlbGl2ZXJ5IGlzIGZvcmJpZGRlbiBmb3IgeW91ciBkdWNrIHVudGlsIAkApAMBBQhkZWxheUVUQQQGaGVhbHRoCQERQGV4dHJOYXRpdmUoMTA1NSkBCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkAwkAZwIAAAUGaGVhbHRoCQACAQIrWW91IGNhbm5vdCBhY2NlcHQgZGVsaXZlcnkgd2l0aCB6ZXJvIGhlYWx0aAQIY291bnRLZXkJARRrZXlVc2VyRGVsaXZlcnlDb3VudAEFCHVzZXJBZGRyBAVjb3VudAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQhjb3VudEtleQAABAdsYXN0RGF5CQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlVc2VyTGFzdERlbGl2ZXJ5RGF5AQUIdXNlckFkZHIAAAQFdG9kYXkJAGkCBQNub3cFCURBWU1JTExJUwQFYWNyZXMJAQt2YWx1ZU9yRWxzZQIJAJoIAgUNYWNyZXNDb250cmFjdAkBGmtleUFjcmVzU3Rha2VkQW1vdW50QnlVc2VyAQUIdXNlckFkZHIAAAQRYWxsb3dlZERlbGl2ZXJpZXMJAGQCBRdBTExPV0VEX0ZSRUVfREVMSVZFUklFUwkAaQIFBWFjcmVzBRpBQ1JFU19GT1JfREVMSVZFUllfQVRURU1QVAMDCQBnAgUFY291bnQFEWFsbG93ZWREZWxpdmVyaWVzCQAAAgUHbGFzdERheQUFdG9kYXkHCQACAQkArAICCQCsAgICEVlvdSBhbHJlYWR5IHVzZWQgCQCkAwEFEWFsbG93ZWREZWxpdmVyaWVzAhwgZGVsaXZlcnkgYXR0ZW1wdHMgZm9yIHRvZGF5AwkBD2NoZWNrVG91cm5hbWVudAEFC2R1Y2tBc3NldElkCQACAQIeYWNjZXB0RGVsaXZlcnlfY2hlY2tUb3VybmFtZW50AwkBDWNoZWNrRGVsaXZlcnkBBQtkdWNrQXNzZXRJZAkAAgECHGFjY2VwdERlbGl2ZXJ5X2NoZWNrRGVsaXZlcnkEDm5ld0xvY2tlZFRvdGFsCQEFYXNJbnQBCQD8BwQFD2Vjb25vbXlDb250cmFjdAIUdXBkYXRlRGVsaXZlcnlMb2NrZWQJAMwIAgkAZAIFC2xvY2tlZFRvdGFsBRVNSU5fVVNEVF9GRUVfREVMSVZFUlkFA25pbAUDbmlsBAljdXJMb2NLZXkJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQUJY3VyTG9jS2V5BQ9ERUZBVUxUTE9DQVRJT04EEGRlbGl2ZXJ5TG9jYXRpb24JAKwCAgkApAMBBQNub3cCBF9EXzAJAJQKAgkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIJARBrZXlTYXZlZExvY2F0aW9uAQULZHVja0Fzc2V0SWQFC2N1ckxvY2F0aW9uCQDMCAIJAQtTdHJpbmdFbnRyeQIFCWN1ckxvY0tleQUQZGVsaXZlcnlMb2NhdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgUIY291bnRLZXkDCQECIT0CBQdsYXN0RGF5BQV0b2RheQAABQVjb3VudAUDbmlsBQ1wcm9sb2dBY3Rpb25zCQCUCgIFEGRlbGl2ZXJ5TG9jYXRpb24FDm5ld0xvY2tlZFRvdGFsAWkBFWNoZWNrRGVsaXZlcnlDYWxsYmFjawELZHVja0Fzc2V0SWQDCQECIT0CCAUBaQZjYWxsZXIFEnRvdXJuYW1lbnRDb250cmFjdAkAAgECDUFjY2VzcyBkZW5pZWQJAJQKAgUDbmlsCQENY2hlY2tEZWxpdmVyeQEFC2R1Y2tBc3NldElkAWkBD2dlblRlc3RSRUFET05MWQIEc2VlZA1sYW5kU2l6ZUluZGV4BAN2cmYJAQV2YWx1ZQEICQEFdmFsdWUBCQDtBwEA/sWsAQN2cmYEBmJpZ051bQkBA2FicwEJAJ4DAQkAywECBQN2cmYJAPcDAQkAmgMBBQRzZWVkCQCUCgIFA25pbAkBBGdlbjECBQZiaWdOdW0FDWxhbmRTaXplSW5kZXgAzOYjrg==", "height": 2827211, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: BohPRMGBuTGSqzCqDj6UiF84FXk4jdEoYApe7tp26RBv Next: 6JQn6zjbVZccBYm5XhfrGCh2R1LZUiQ3jmVyQ495S3pC Diff:
Old | New | Differences | |
---|---|---|---|
1452 | 1452 | ||
1453 | 1453 | hQ(hP(hP(hP(hP(hP(hP(eY, 0), 1), 2), 3), 4), 5), 6) | |
1454 | 1454 | } | |
1455 | - | let | |
1456 | - | func | |
1457 | - | func | |
1458 | - | ||
1459 | - | let | |
1455 | + | let hX = hG[hR] | |
1456 | + | func hY (hC,hZ) = { | |
1457 | + | func ia (eU,fE) = (eU :+ ((hC._2[fE] * 120) - (hT[fE] * hC._3))) | |
1458 | + | ||
1459 | + | let ib = { | |
1460 | 1460 | let eW = cQ | |
1461 | 1461 | let eX = size(eW) | |
1462 | 1462 | let eY = nil | |
1463 | - | func ib (fa,fb) = if ((fb >= eX)) | |
1464 | - | then fa | |
1465 | - | else hZ(fa, eW[fb]) | |
1466 | - | ||
1467 | 1463 | func ic (fa,fb) = if ((fb >= eX)) | |
1468 | 1464 | then fa | |
1465 | + | else ia(fa, eW[fb]) | |
1466 | + | ||
1467 | + | func id (fa,fb) = if ((fb >= eX)) | |
1468 | + | then fa | |
1469 | 1469 | else throw("List size exceeds 6") | |
1470 | 1470 | ||
1471 | - | ic( | |
1472 | - | } | |
1473 | - | let | |
1474 | - | func | |
1475 | - | let dE = ( | |
1471 | + | id(ic(ic(ic(ic(ic(ic(eY, 0), 1), 2), 3), 4), 5), 6) | |
1472 | + | } | |
1473 | + | let ie = max(ib) | |
1474 | + | func if (eU,ho) = { | |
1475 | + | let dE = (ie - ho) | |
1476 | 1476 | $Tuple2((eU._1 :+ dE), (eU._2 + dE)) | |
1477 | 1477 | } | |
1478 | 1478 | ||
1479 | - | let | |
1480 | - | let eW = | |
1479 | + | let ig = { | |
1480 | + | let eW = ib | |
1481 | 1481 | let eX = size(eW) | |
1482 | 1482 | let eY = $Tuple2(nil, 0) | |
1483 | - | func ig (fa,fb) = if ((fb >= eX)) | |
1484 | - | then fa | |
1485 | - | else ie(fa, eW[fb]) | |
1486 | - | ||
1487 | 1483 | func ih (fa,fb) = if ((fb >= eX)) | |
1488 | 1484 | then fa | |
1485 | + | else if(fa, eW[fb]) | |
1486 | + | ||
1487 | + | func ii (fa,fb) = if ((fb >= eX)) | |
1488 | + | then fa | |
1489 | 1489 | else throw("List size exceeds 6") | |
1490 | 1490 | ||
1491 | - | ih( | |
1492 | - | } | |
1493 | - | let | |
1494 | - | let | |
1495 | - | let | |
1496 | - | let | |
1491 | + | ii(ih(ih(ih(ih(ih(ih(eY, 0), 1), 2), 3), 4), 5), 6) | |
1492 | + | } | |
1493 | + | let ij = ig._1 | |
1494 | + | let ik = ig._2 | |
1495 | + | let il = (ik / 60) | |
1496 | + | let im = if ((ik == 0)) | |
1497 | 1497 | then hp(6, hC._4) | |
1498 | 1498 | else { | |
1499 | - | let | |
1500 | - | let ff = | |
1501 | - | let hM = | |
1502 | - | $Tuple2(ht( | |
1499 | + | let in = hp((ik + (il * 6)), hC._4) | |
1500 | + | let ff = in._1 | |
1501 | + | let hM = in._2 | |
1502 | + | $Tuple2(ht(ij, ff, il), hM) | |
1503 | 1503 | } | |
1504 | - | let dg = | |
1505 | - | let | |
1506 | - | func | |
1504 | + | let dg = im._1 | |
1505 | + | let io = im._2 | |
1506 | + | func ip (eU,fE) = (eU :+ (hC._2[fE] + (if ((fE == dg)) | |
1507 | 1507 | then gK | |
1508 | 1508 | else 0))) | |
1509 | 1509 | ||
1510 | - | let | |
1510 | + | let iq = { | |
1511 | 1511 | let eW = cQ | |
1512 | 1512 | let eX = size(eW) | |
1513 | 1513 | let eY = nil | |
1514 | - | func iq (fa,fb) = if ((fb >= eX)) | |
1515 | - | then fa | |
1516 | - | else io(fa, eW[fb]) | |
1517 | - | ||
1518 | 1514 | func ir (fa,fb) = if ((fb >= eX)) | |
1519 | 1515 | then fa | |
1516 | + | else ip(fa, eW[fb]) | |
1517 | + | ||
1518 | + | func is (fa,fb) = if ((fb >= eX)) | |
1519 | + | then fa | |
1520 | 1520 | else throw("List size exceeds 6") | |
1521 | 1521 | ||
1522 | - | ir( | |
1523 | - | } | |
1524 | - | $Tuple4((hC._1 :+ hm[dg]), | |
1522 | + | is(ir(ir(ir(ir(ir(ir(eY, 0), 1), 2), 3), 4), 5), 6) | |
1523 | + | } | |
1524 | + | $Tuple4((hC._1 :+ hm[dg]), iq, (hC._3 + gK), io) | |
1525 | 1525 | } | |
1526 | 1526 | ||
1527 | 1527 | let fm = { | |
1528 | 1528 | let eW = hl | |
1529 | 1529 | let eX = size(eW) | |
1530 | - | let eY = $Tuple4(nil, hW, hE, hS) | |
1531 | - | func ib (fa,fb) = if ((fb >= eX)) | |
1532 | - | then fa | |
1533 | - | else hX(fa, eW[fb]) | |
1534 | - | ||
1530 | + | let eY = $Tuple4(nil, hW, hX, hS) | |
1535 | 1531 | func ic (fa,fb) = if ((fb >= eX)) | |
1536 | 1532 | then fa | |
1533 | + | else hY(fa, eW[fb]) | |
1534 | + | ||
1535 | + | func id (fa,fb) = if ((fb >= eX)) | |
1536 | + | then fa | |
1537 | 1537 | else throw("List size exceeds 25") | |
1538 | 1538 | ||
1539 | - | ic( | |
1539 | + | id(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(eY, 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) | |
1540 | 1540 | } | |
1541 | - | func | |
1541 | + | func it (eU,fE) = (eU + fm._1[fE]) | |
1542 | 1542 | ||
1543 | 1543 | $Tuple2(hR, { | |
1544 | 1544 | let eW = hl | |
1545 | 1545 | let eX = size(eW) | |
1546 | 1546 | let eY = "" | |
1547 | - | func ig (fa,fb) = if ((fb >= eX)) | |
1548 | - | then fa | |
1549 | - | else is(fa, eW[fb]) | |
1550 | - | ||
1551 | 1547 | func ih (fa,fb) = if ((fb >= eX)) | |
1552 | 1548 | then fa | |
1549 | + | else it(fa, eW[fb]) | |
1550 | + | ||
1551 | + | func ii (fa,fb) = if ((fb >= eX)) | |
1552 | + | then fa | |
1553 | 1553 | else throw("List size exceeds 25") | |
1554 | 1554 | ||
1555 | - | ih( | |
1555 | + | ii(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(eY, 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) | |
1556 | 1556 | }) | |
1557 | 1557 | } | |
1558 | 1558 | ||
1559 | 1559 | ||
1560 | - | let | |
1561 | - | ||
1562 | - | func | |
1560 | + | let iu = [[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]] | |
1561 | + | ||
1562 | + | func iv (dG,iw) = { | |
1563 | 1563 | let hy = toInt((dG % em)) | |
1564 | - | let | |
1564 | + | let ix = if ((iw[0] > hy)) | |
1565 | 1565 | then "A" | |
1566 | - | else if (( | |
1566 | + | else if ((iw[1] > hy)) | |
1567 | 1567 | then "B" | |
1568 | - | else if (( | |
1568 | + | else if ((iw[2] > hy)) | |
1569 | 1569 | then "C" | |
1570 | - | else if (( | |
1570 | + | else if ((iw[3] > hy)) | |
1571 | 1571 | then "D" | |
1572 | - | else if (( | |
1572 | + | else if ((iw[4] > hy)) | |
1573 | 1573 | then "E" | |
1574 | 1574 | else "F" | |
1575 | - | | |
1576 | - | } | |
1577 | - | ||
1578 | - | ||
1579 | - | func | |
1580 | - | let | |
1581 | - | func | |
1575 | + | ix | |
1576 | + | } | |
1577 | + | ||
1578 | + | ||
1579 | + | func iy (iz,iA) = { | |
1580 | + | let iB = iu[iA] | |
1581 | + | func iC (eU,eV) = $Tuple2((((((eU._1 + iv(eU._2, iB)) + iv((eU._2 / em), iB)) + iv((eU._2 / en), iB)) + iv((eU._2 / eo), iB)) + iv((eU._2 / ep), iB)), (eU._2 / eq)) | |
1582 | 1582 | ||
1583 | 1583 | let gy = { | |
1584 | 1584 | let eW = [1, 2, 3, 4, 5] | |
1585 | 1585 | let eX = size(eW) | |
1586 | - | let eY = $Tuple2("", ( | |
1586 | + | let eY = $Tuple2("", (iz / el)) | |
1587 | 1587 | func eZ (fa,fb) = if ((fb >= eX)) | |
1588 | 1588 | then fa | |
1589 | - | else | |
1589 | + | else iC(fa, eW[fb]) | |
1590 | 1590 | ||
1591 | 1591 | func fc (fa,fb) = if ((fb >= eX)) | |
1592 | 1592 | then fa | |
1598 | 1598 | } | |
1599 | 1599 | ||
1600 | 1600 | ||
1601 | - | func | |
1602 | - | func | |
1601 | + | func iD (iE,gK) = { | |
1602 | + | func iF (eU,dE) = { | |
1603 | 1603 | let fE = eU._2 | |
1604 | 1604 | let ho = parseIntValue(dE) | |
1605 | 1605 | let hj = if ((ho == 0)) | |
1613 | 1613 | } | |
1614 | 1614 | ||
1615 | 1615 | let gy = { | |
1616 | - | let eW = | |
1616 | + | let eW = iE | |
1617 | 1617 | let eX = size(eW) | |
1618 | 1618 | let eY = $Tuple3(nil, 0, 0) | |
1619 | 1619 | func eZ (fa,fb) = if ((fb >= eX)) | |
1620 | 1620 | then fa | |
1621 | - | else | |
1621 | + | else iF(fa, eW[fb]) | |
1622 | 1622 | ||
1623 | 1623 | func fc (fa,fb) = if ((fb >= eX)) | |
1624 | 1624 | then fa | |
1627 | 1627 | fc(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6) | |
1628 | 1628 | } | |
1629 | 1629 | let hu = gy._1 | |
1630 | - | let | |
1630 | + | let iG = value(indexOf(hu, max(hu))) | |
1631 | 1631 | let hw = (gy._3 - 25) | |
1632 | - | func | |
1633 | - | let dQ = (hu[dg] - (if ((dg == | |
1632 | + | func iH (eU,dg) = { | |
1633 | + | let dQ = (hu[dg] - (if ((dg == iG)) | |
1634 | 1634 | then hw | |
1635 | 1635 | else 0)) | |
1636 | 1636 | let dU = if ((dQ == 0)) | |
1637 | 1637 | then nil | |
1638 | 1638 | else split(drop(toString(pow(10, 0, dQ, 0, 0, DOWN)), 1), "") | |
1639 | 1639 | let gd = hm[dg] | |
1640 | - | func | |
1641 | - | ||
1642 | - | let | |
1640 | + | func iI (hC,hZ) = (hC :+ gd) | |
1641 | + | ||
1642 | + | let iJ = { | |
1643 | 1643 | let eW = dU | |
1644 | 1644 | let eX = size(eW) | |
1645 | 1645 | let eY = nil | |
1646 | 1646 | func hP (fa,fb) = if ((fb >= eX)) | |
1647 | 1647 | then fa | |
1648 | - | else | |
1648 | + | else iI(fa, eW[fb]) | |
1649 | 1649 | ||
1650 | 1650 | func hQ (fa,fb) = if ((fb >= eX)) | |
1651 | 1651 | then fa | |
1653 | 1653 | ||
1654 | 1654 | hQ(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(eY, 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) | |
1655 | 1655 | } | |
1656 | - | (eU ++ | |
1656 | + | (eU ++ iJ) | |
1657 | 1657 | } | |
1658 | 1658 | ||
1659 | 1659 | let ff = { | |
1662 | 1662 | let eY = nil | |
1663 | 1663 | func hP (fa,fb) = if ((fb >= eX)) | |
1664 | 1664 | then fa | |
1665 | - | else | |
1665 | + | else iH(fa, eW[fb]) | |
1666 | 1666 | ||
1667 | 1667 | func hQ (fa,fb) = if ((fb >= eX)) | |
1668 | 1668 | then fa | |
1670 | 1670 | ||
1671 | 1671 | hQ(hP(hP(hP(hP(hP(hP(eY, 0), 1), 2), 3), 4), 5), 6) | |
1672 | 1672 | } | |
1673 | - | func | |
1673 | + | func it (eU,fE) = (eU + ff[fE]) | |
1674 | 1674 | ||
1675 | 1675 | let eW = hl | |
1676 | 1676 | let eX = size(eW) | |
1677 | 1677 | let eY = "" | |
1678 | - | func ib (fa,fb) = if ((fb >= eX)) | |
1679 | - | then fa | |
1680 | - | else is(fa, eW[fb]) | |
1681 | - | ||
1682 | 1678 | func ic (fa,fb) = if ((fb >= eX)) | |
1683 | 1679 | then fa | |
1680 | + | else it(fa, eW[fb]) | |
1681 | + | ||
1682 | + | func id (fa,fb) = if ((fb >= eX)) | |
1683 | + | then fa | |
1684 | 1684 | else throw("List size exceeds 25") | |
1685 | 1685 | ||
1686 | - | ic( | |
1687 | - | } | |
1688 | - | ||
1689 | - | ||
1690 | - | func | |
1691 | - | let gx = split(valueOrElse(getString( | |
1686 | + | id(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(eY, 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) | |
1687 | + | } | |
1688 | + | ||
1689 | + | ||
1690 | + | func iK (iL) = { | |
1691 | + | let gx = split(valueOrElse(getString(iL), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":") | |
1692 | 1692 | [toString(valueOrElse(parseInt(gx[bm]), 0)), if ((size(split(gx[bn], "_")) == aI)) | |
1693 | 1693 | then gx[bn] | |
1694 | 1694 | else "0_0_0_0_0_0", if ((size(split(gx[bo], "_")) == aI)) | |
1697 | 1697 | } | |
1698 | 1698 | ||
1699 | 1699 | ||
1700 | - | func | |
1701 | - | let fs = split( | |
1700 | + | func iM (iN) = { | |
1701 | + | let fs = split(iN, "_") | |
1702 | 1702 | ((aL * (parseIntValue(fs[1]) + 1)) * parseIntValue(fs[0])) | |
1703 | 1703 | } | |
1704 | 1704 | ||
1705 | 1705 | ||
1706 | - | func | |
1707 | - | let | |
1708 | - | func | |
1709 | - | ||
1710 | - | func | |
1706 | + | func iO (iP) = { | |
1707 | + | let iQ = iP[bg] | |
1708 | + | func iR (eU,iS) = (eU + parseIntValue(iS)) | |
1709 | + | ||
1710 | + | func iT (eU,iS) = { | |
1711 | 1711 | let dg = eU._1 | |
1712 | - | let eN = (((parseIntValue( | |
1712 | + | let eN = (((parseIntValue(iS) + bc) - 1) / bc) | |
1713 | 1713 | $Tuple2((dg + 1), (eU._2 + (eN * cK))) | |
1714 | 1714 | } | |
1715 | 1715 | ||
1716 | - | let | |
1717 | - | let eW = split( | |
1716 | + | let iU = { | |
1717 | + | let eW = split(iP[be], "_") | |
1718 | 1718 | let eX = size(eW) | |
1719 | 1719 | let eY = 0 | |
1720 | 1720 | func eZ (fa,fb) = if ((fb >= eX)) | |
1721 | 1721 | then fa | |
1722 | - | else | |
1722 | + | else iR(fa, eW[fb]) | |
1723 | 1723 | ||
1724 | 1724 | func fc (fa,fb) = if ((fb >= eX)) | |
1725 | 1725 | then fa | |
1727 | 1727 | ||
1728 | 1728 | fc(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6) | |
1729 | 1729 | } | |
1730 | - | let | |
1731 | - | let eW = split( | |
1730 | + | let iV = { | |
1731 | + | let eW = split(iP[bf], "_") | |
1732 | 1732 | let eX = size(eW) | |
1733 | 1733 | let eY = 0 | |
1734 | 1734 | func hP (fa,fb) = if ((fb >= eX)) | |
1735 | 1735 | then fa | |
1736 | - | else | |
1736 | + | else iR(fa, eW[fb]) | |
1737 | 1737 | ||
1738 | 1738 | func hQ (fa,fb) = if ((fb >= eX)) | |
1739 | 1739 | then fa | |
1741 | 1741 | ||
1742 | 1742 | hQ(hP(hP(hP(hP(hP(hP(eY, 0), 1), 2), 3), 4), 5), 6) | |
1743 | 1743 | } | |
1744 | - | let | |
1744 | + | let iW = if ((iQ == "")) | |
1745 | 1745 | then 0 | |
1746 | - | else ( let eW = split_4C( | |
1746 | + | else ( let eW = split_4C(iQ, "_") | |
1747 | 1747 | let eX = size(eW) | |
1748 | 1748 | let eY = $Tuple2(0, 0) | |
1749 | - | func ib (fa,fb) = if ((fb >= eX)) | |
1750 | - | then fa | |
1751 | - | else iS(fa, eW[fb]) | |
1752 | - | ||
1753 | 1749 | func ic (fa,fb) = if ((fb >= eX)) | |
1754 | 1750 | then fa | |
1751 | + | else iT(fa, eW[fb]) | |
1752 | + | ||
1753 | + | func id (fa,fb) = if ((fb >= eX)) | |
1754 | + | then fa | |
1755 | 1755 | else throw("List size exceeds 50") | |
1756 | 1756 | ||
1757 | - | ic( | |
1758 | - | (( | |
1759 | - | } | |
1760 | - | ||
1761 | - | ||
1762 | - | func | |
1763 | - | let | |
1764 | - | let | |
1765 | - | let | |
1766 | - | let | |
1767 | - | let | |
1768 | - | let | |
1769 | - | then makeString(["0", toString( | |
1757 | + | id(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(eY, 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 | |
1758 | + | ((iU + iV) + iW) | |
1759 | + | } | |
1760 | + | ||
1761 | + | ||
1762 | + | func iX (iY,iZ,ja) = { | |
1763 | + | let iN = ((toString(iZ) + "_") + toString(ja)) | |
1764 | + | let jb = iM(iN) | |
1765 | + | let jc = valueOrElse(getString(iY), (iN + ":0_0_0_0_0_0:0_0_0_0_0_0::0")) | |
1766 | + | let jd = split_4C(jc, ":") | |
1767 | + | let je = iO(jd) | |
1768 | + | let jf = if ((5 > size(jd))) | |
1769 | + | then makeString(["0", toString(je), toString((jb - je)), toString(jb)], "_") | |
1770 | 1770 | else { | |
1771 | - | let | |
1772 | - | let | |
1773 | - | let | |
1774 | - | then parseIntValue( | |
1775 | - | else | |
1776 | - | makeString([toString( | |
1777 | - | } | |
1778 | - | [ | |
1779 | - | then | |
1780 | - | else "0_0_0_0_0_0", if ((size(split( | |
1781 | - | then | |
1782 | - | else "0_0_0_0_0_0", | |
1783 | - | } | |
1784 | - | ||
1785 | - | ||
1786 | - | func | |
1787 | - | let | |
1788 | - | let | |
1789 | - | (( | |
1790 | - | } | |
1791 | - | ||
1792 | - | ||
1793 | - | func | |
1771 | + | let jg = split(jd[bh], "_") | |
1772 | + | let jh = parseIntValue(jg[bi]) | |
1773 | + | let ji = if ((size(jg) > 1)) | |
1774 | + | then parseIntValue(jg[bj]) | |
1775 | + | else je | |
1776 | + | makeString([toString(jh), toString(ji), toString(((jb - jh) - ji)), toString(jb)], "_") | |
1777 | + | } | |
1778 | + | [jd[bd], if ((size(split(jd[be], "_")) == aI)) | |
1779 | + | then jd[be] | |
1780 | + | else "0_0_0_0_0_0", if ((size(split(jd[bf], "_")) == aI)) | |
1781 | + | then jd[bf] | |
1782 | + | else "0_0_0_0_0_0", jd[bg], jf] | |
1783 | + | } | |
1784 | + | ||
1785 | + | ||
1786 | + | func jj (iP) = { | |
1787 | + | let jk = iO(iP) | |
1788 | + | let jl = parseIntValue(split(iP[bh], "_")[bi]) | |
1789 | + | ((iM(iP[bd]) - jk) - jl) | |
1790 | + | } | |
1791 | + | ||
1792 | + | ||
1793 | + | func jm (jn,iP,jo) = if ((size(jn) != 3)) | |
1794 | 1794 | then throw("cargoListStr should contain exactly 2 ':' separators") | |
1795 | 1795 | else { | |
1796 | - | let | |
1797 | - | let | |
1798 | - | let | |
1796 | + | let jp = split(jn[0], "_") | |
1797 | + | let jq = split(jn[1], "_") | |
1798 | + | let jr = if ((jn[2] == "")) | |
1799 | 1799 | then nil | |
1800 | - | else split_4C( | |
1801 | - | if ((size( | |
1800 | + | else split_4C(jn[2], "_") | |
1801 | + | if ((size(jp) != aI)) | |
1802 | 1802 | then throw("All 6 resources should be passed") | |
1803 | - | else if ((size( | |
1803 | + | else if ((size(jq) != aI)) | |
1804 | 1804 | then throw("All 6 materials should be passed") | |
1805 | 1805 | else { | |
1806 | - | let hc = | |
1807 | - | let | |
1808 | - | let | |
1809 | - | let | |
1806 | + | let hc = jj(iP) | |
1807 | + | let js = split(iP[be], "_") | |
1808 | + | let jt = split(iP[bf], "_") | |
1809 | + | let ju = if ((iP[bg] == "")) | |
1810 | 1810 | then nil | |
1811 | - | else split_4C( | |
1812 | - | let ha = split( | |
1813 | - | let | |
1814 | - | let | |
1811 | + | else split_4C(iP[bg], "_") | |
1812 | + | let ha = split(jo[bn], "_") | |
1813 | + | let jv = split(jo[bo], "_") | |
1814 | + | let jw = if ((jo[bp] == "")) | |
1815 | 1815 | then nil | |
1816 | - | else split_4C( | |
1817 | - | func | |
1816 | + | else split_4C(jo[bp], "_") | |
1817 | + | func jx (eU,iS) = { | |
1818 | 1818 | let gN = eU._1 | |
1819 | - | let | |
1820 | - | let | |
1821 | - | let | |
1822 | - | if (( | |
1823 | - | then $Tuple4((gN + 1), (eU._2 :+ | |
1824 | - | else if (( | |
1825 | - | then if (( | |
1826 | - | then throw((((("Attempt to take " + | |
1827 | - | else $Tuple4((gN + 1), (eU._2 :+ toString(( | |
1828 | - | else if ((-( | |
1829 | - | then throw((((("Attempt to take " + toString(-( | |
1830 | - | else $Tuple4((gN + 1), (eU._2 :+ toString(( | |
1819 | + | let jy = parseIntValue(iS) | |
1820 | + | let jz = parseIntValue(js[gN]) | |
1821 | + | let jA = parseIntValue(ha[gN]) | |
1822 | + | if ((jy == 0)) | |
1823 | + | then $Tuple4((gN + 1), (eU._2 :+ js[gN]), (eU._3 :+ ha[gN]), eU._4) | |
1824 | + | else if ((jy > 0)) | |
1825 | + | then if ((jy > jA)) | |
1826 | + | then throw((((("Attempt to take " + iS) + " from backpack, but only ") + toString(jA)) + " available")) | |
1827 | + | else $Tuple4((gN + 1), (eU._2 :+ toString((jz + jy))), (eU._3 :+ toString((jA - jy))), (eU._4 + jy)) | |
1828 | + | else if ((-(jy) > jz)) | |
1829 | + | then throw((((("Attempt to take " + toString(-(jy))) + " from warehouse, but only ") + toString(jz)) + " available")) | |
1830 | + | else $Tuple4((gN + 1), (eU._2 :+ toString((jz + jy))), (eU._3 :+ toString((jA - jy))), (eU._4 + jy)) | |
1831 | 1831 | } | |
1832 | 1832 | ||
1833 | 1833 | let ff = { | |
1834 | - | let eW = | |
1834 | + | let eW = jp | |
1835 | 1835 | let eX = size(eW) | |
1836 | 1836 | let eY = $Tuple4(0, nil, nil, 0) | |
1837 | 1837 | func eZ (fa,fb) = if ((fb >= eX)) | |
1838 | 1838 | then fa | |
1839 | - | else | |
1839 | + | else jx(fa, eW[fb]) | |
1840 | 1840 | ||
1841 | 1841 | func fc (fa,fb) = if ((fb >= eX)) | |
1842 | 1842 | then fa | |
1844 | 1844 | ||
1845 | 1845 | fc(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6) | |
1846 | 1846 | } | |
1847 | - | func | |
1847 | + | func jB (eU,iS) = { | |
1848 | 1848 | let gN = eU._1 | |
1849 | - | let | |
1850 | - | let | |
1851 | - | let | |
1852 | - | if (( | |
1853 | - | then $Tuple4((gN + 1), (eU._2 :+ | |
1854 | - | else if (( | |
1855 | - | then if (( | |
1856 | - | then throw((((("Attempt to take " + | |
1857 | - | else $Tuple4((gN + 1), (eU._2 :+ toString(( | |
1858 | - | else if ((-( | |
1859 | - | then throw((((("Attempt to take " + toString(-( | |
1860 | - | else $Tuple4((gN + 1), (eU._2 :+ toString(( | |
1849 | + | let jy = parseIntValue(iS) | |
1850 | + | let jC = parseIntValue(jt[gN]) | |
1851 | + | let jD = parseIntValue(jv[gN]) | |
1852 | + | if ((jy == 0)) | |
1853 | + | then $Tuple4((gN + 1), (eU._2 :+ jt[gN]), (eU._3 :+ jv[gN]), eU._4) | |
1854 | + | else if ((jy > 0)) | |
1855 | + | then if ((jy > jD)) | |
1856 | + | then throw((((("Attempt to take " + iS) + " from backpack, but only ") + toString(jD)) + " available")) | |
1857 | + | else $Tuple4((gN + 1), (eU._2 :+ toString((jC + jy))), (eU._3 :+ toString((jD - jy))), (eU._4 + jy)) | |
1858 | + | else if ((-(jy) > jC)) | |
1859 | + | then throw((((("Attempt to take " + toString(-(jy))) + " from warehouse, but only ") + toString(jC)) + " available")) | |
1860 | + | else $Tuple4((gN + 1), (eU._2 :+ toString((jC + jy))), (eU._3 :+ toString((jD - jy))), (eU._4 + jy)) | |
1861 | 1861 | } | |
1862 | 1862 | ||
1863 | 1863 | let gt = { | |
1864 | - | let eW = | |
1864 | + | let eW = jq | |
1865 | 1865 | let eX = size(eW) | |
1866 | 1866 | let eY = $Tuple4(0, nil, nil, ff._4) | |
1867 | 1867 | func hP (fa,fb) = if ((fb >= eX)) | |
1868 | 1868 | then fa | |
1869 | - | else | |
1869 | + | else jB(fa, eW[fb]) | |
1870 | 1870 | ||
1871 | 1871 | func hQ (fa,fb) = if ((fb >= eX)) | |
1872 | 1872 | then fa | |
1874 | 1874 | ||
1875 | 1875 | hQ(hP(hP(hP(hP(hP(hP(eY, 0), 1), 2), 3), 4), 5), 6) | |
1876 | 1876 | } | |
1877 | - | func | |
1877 | + | func jE (eU,iS) = { | |
1878 | 1878 | let gN = eU._1 | |
1879 | - | let | |
1880 | - | let | |
1881 | - | then parseIntValue( | |
1879 | + | let jy = parseIntValue(iS) | |
1880 | + | let jF = if ((size(ju) > gN)) | |
1881 | + | then parseIntValue(ju[gN]) | |
1882 | 1882 | else 0 | |
1883 | - | let | |
1884 | - | then parseIntValue( | |
1883 | + | let jG = if ((size(jw) > gN)) | |
1884 | + | then parseIntValue(jw[gN]) | |
1885 | 1885 | else 0 | |
1886 | - | if (( | |
1887 | - | then $Tuple4((gN + 1), (eU._2 :+ toString( | |
1888 | - | else if (( | |
1889 | - | then if (( | |
1890 | - | then throw((((("Attempt to take " + | |
1886 | + | if ((jy == 0)) | |
1887 | + | then $Tuple4((gN + 1), (eU._2 :+ toString(jF)), (eU._3 :+ toString(jG)), eU._4) | |
1888 | + | else if ((jy > 0)) | |
1889 | + | then if ((jy > jG)) | |
1890 | + | then throw((((("Attempt to take " + iS) + " from backpack, but only ") + toString(jG)) + " available")) | |
1891 | 1891 | else { | |
1892 | - | let fW = (eK(( | |
1893 | - | $Tuple4((gN + 1), (eU._2 :+ toString(( | |
1892 | + | let fW = (eK((jF + jy), bc) - eK(jF, bc)) | |
1893 | + | $Tuple4((gN + 1), (eU._2 :+ toString((jF + jy))), (eU._3 :+ toString((jG - jy))), (eU._4 + fW)) | |
1894 | 1894 | } | |
1895 | - | else if ((-( | |
1896 | - | then throw((((("Attempt to take " + toString(-( | |
1895 | + | else if ((-(jy) > jF)) | |
1896 | + | then throw((((("Attempt to take " + toString(-(jy))) + " from warehouse, but only ") + toString(jF)) + " available")) | |
1897 | 1897 | else { | |
1898 | - | let fW = (eK(( | |
1899 | - | $Tuple4((gN + 1), (eU._2 :+ toString(( | |
1898 | + | let fW = (eK((jF + jy), bc) - eK(jF, bc)) | |
1899 | + | $Tuple4((gN + 1), (eU._2 :+ toString((jF + jy))), (eU._3 :+ toString((jG - jy))), (eU._4 + fW)) | |
1900 | 1900 | } | |
1901 | 1901 | } | |
1902 | 1902 | ||
1903 | - | let gx = if ((size( | |
1903 | + | let gx = if ((size(jr) != 0)) | |
1904 | 1904 | then { | |
1905 | - | let eW = | |
1905 | + | let eW = jr | |
1906 | 1906 | let eX = size(eW) | |
1907 | 1907 | let eY = $Tuple4(0, nil, nil, gt._4) | |
1908 | - | func ib (fa,fb) = if ((fb >= eX)) | |
1909 | - | then fa | |
1910 | - | else jD(fa, eW[fb]) | |
1911 | - | ||
1912 | 1908 | func ic (fa,fb) = if ((fb >= eX)) | |
1913 | 1909 | then fa | |
1910 | + | else jE(fa, eW[fb]) | |
1911 | + | ||
1912 | + | func id (fa,fb) = if ((fb >= eX)) | |
1913 | + | then fa | |
1914 | 1914 | else throw("List size exceeds 50") | |
1915 | 1915 | ||
1916 | - | ic( | |
1916 | + | id(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(eY, 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) | |
1917 | 1917 | } | |
1918 | - | else $Tuple4(0, | |
1919 | - | let | |
1920 | - | if (( | |
1921 | - | then throw((((("Attempt to put total " + toString( | |
1922 | - | else $Tuple7(makeString(ff._2, "_"), makeString(gt._2, "_"), makeString_2C(gx._2, "_"), makeString(ff._3, "_"), makeString(gt._3, "_"), makeString_2C(gx._3, "_"), | |
1918 | + | else $Tuple4(0, ju, jw, gt._4) | |
1919 | + | let jH = gx._4 | |
1920 | + | if ((jH > hc)) | |
1921 | + | then throw((((("Attempt to put total " + toString(jH)) + " stuff, but only ") + toString(hc)) + " warehouse space left")) | |
1922 | + | else $Tuple7(makeString(ff._2, "_"), makeString(gt._2, "_"), makeString_2C(gx._2, "_"), makeString(ff._3, "_"), makeString(gt._3, "_"), makeString_2C(gx._3, "_"), jH) | |
1923 | 1923 | } | |
1924 | 1924 | } | |
1925 | 1925 | ||
1926 | 1926 | ||
1927 | - | func | |
1928 | - | let bQ = toString( | |
1929 | - | let | |
1930 | - | let | |
1931 | - | let ew = toString( | |
1932 | - | let | |
1933 | - | let gQ = | |
1934 | - | let dz = aU[ | |
1935 | - | let | |
1936 | - | let bu = calculateAssetId( | |
1937 | - | let | |
1938 | - | $Tuple2([IntegerEntry(es(), ( | |
1939 | - | } | |
1940 | - | ||
1941 | - | ||
1942 | - | func | |
1927 | + | func jI (jJ,jK) = { | |
1928 | + | let bQ = toString(jJ) | |
1929 | + | let jL = hi(toBigInt(jK)) | |
1930 | + | let jM = valueOrElse(getInteger(es()), (er + 1)) | |
1931 | + | let ew = toString(jM) | |
1932 | + | let iA = toInt((jL % el)) | |
1933 | + | let gQ = iy(jL, iA) | |
1934 | + | let dz = aU[iA] | |
1935 | + | let jN = Issue(eJ(ew, "S"), makeString([ew, "S", gQ, dz], "_"), 1, 0, false) | |
1936 | + | let bu = calculateAssetId(jN) | |
1937 | + | let jO = toBase58String(bu) | |
1938 | + | $Tuple2([IntegerEntry(es(), (jM + 1)), jN, StringEntry(ev(ew), jO), StringEntry(bt(jO), bQ), StringEntry(ey(ew), bQ), IntegerEntry(bD(jO), 0), IntegerEntry(ex(jO, bQ), 0), ScriptTransfer(jJ, 1, bu)], $Tuple2(jO, dz)) | |
1939 | + | } | |
1940 | + | ||
1941 | + | ||
1942 | + | func jP (bQ,jQ,jR) = if (!(sigVerify_8Kb(jQ, jR, ec))) | |
1943 | 1943 | then throw("signature does not match") | |
1944 | 1944 | else { | |
1945 | - | let fs = split_4C(toUtf8String( | |
1946 | - | let | |
1947 | - | let | |
1948 | - | let | |
1949 | - | let | |
1950 | - | let | |
1951 | - | let | |
1952 | - | let | |
1953 | - | if (if (( | |
1945 | + | let fs = split_4C(toUtf8String(jQ), ";") | |
1946 | + | let jS = split_4C(fs[0], "|") | |
1947 | + | let jT = split(jS[eF], "_") | |
1948 | + | let jU = parseIntValue(jT[0]) | |
1949 | + | let jV = parseIntValue(jT[1]) | |
1950 | + | let jW = split(fs[1], ":") | |
1951 | + | let jX = jW[0] | |
1952 | + | let jY = parseIntValue(jS[eG]) | |
1953 | + | if (if ((jY > (lastBlock.timestamp + ee))) | |
1954 | 1954 | then true | |
1955 | - | else ((lastBlock.timestamp - ee) > | |
1956 | - | then throw(((("signature outdated: logTime=" + toString( | |
1955 | + | else ((lastBlock.timestamp - ee) > jY)) | |
1956 | + | then throw(((("signature outdated: logTime=" + toString(jY)) + ", bcTime=") + toString(lastBlock.timestamp))) | |
1957 | 1957 | else { | |
1958 | - | let | |
1959 | - | let | |
1960 | - | if (( | |
1961 | - | then throw(((("Tx ids don't match! In state: " + | |
1958 | + | let jZ = jW[1] | |
1959 | + | let ka = valueOrElse(getString(dO(bQ)), "") | |
1960 | + | if ((ka != jZ)) | |
1961 | + | then throw(((("Tx ids don't match! In state: " + ka) + ", in msg: ") + jZ)) | |
1962 | 1962 | else { | |
1963 | 1963 | let B = valueOrErrorMessage(getString(bM(bQ)), "You don't have a duck staked") | |
1964 | - | let | |
1965 | - | let | |
1966 | - | let | |
1967 | - | if (( | |
1968 | - | then throw(((("oldHealth=" + toString( | |
1969 | - | else if ((0 >= | |
1964 | + | let kb = A(B) | |
1965 | + | let kc = aj(valueOrElse(getInteger(E(B)), 0)) | |
1966 | + | let kd = valueOrElse(getInteger(kb), kc) | |
1967 | + | if ((kd != jU)) | |
1968 | + | then throw(((("oldHealth=" + toString(kd)) + " from state does not match one from flight log=") + toString(jU))) | |
1969 | + | else if ((0 >= jU)) | |
1970 | 1970 | then throw("You can't fly with zero health") | |
1971 | 1971 | else if (!(gz(B))) | |
1972 | 1972 | then throw("Equipment incompatible") | |
1973 | 1973 | else { | |
1974 | - | let | |
1975 | - | then | |
1974 | + | let ke = if ((size(jS) > eH)) | |
1975 | + | then jS[eH] | |
1976 | 1976 | else "" | |
1977 | - | let | |
1978 | - | then | |
1977 | + | let kf = if ((size(jS) > eI)) | |
1978 | + | then jS[eI] | |
1979 | 1979 | else "" | |
1980 | - | let | |
1981 | - | then ( | |
1980 | + | let kg = if (if ((jV > 0)) | |
1981 | + | then (ke == "$") | |
1982 | 1982 | else false) | |
1983 | 1983 | then dF(invoke(dh, "sendUsdtPrize", [bQ], nil)) | |
1984 | 1984 | else 0 | |
1985 | - | $Tuple5( | |
1985 | + | $Tuple5(jV, B, kg, jX, kf) | |
1986 | 1986 | } | |
1987 | 1987 | } | |
1988 | 1988 | } | |
1989 | 1989 | } | |
1990 | 1990 | ||
1991 | 1991 | ||
1992 | - | func | |
1993 | - | let | |
1994 | - | let | |
1995 | - | let | |
1996 | - | let | |
1997 | - | ((aK + fraction(aK, (( | |
1998 | - | } | |
1999 | - | ||
2000 | - | ||
2001 | - | func | |
2002 | - | let | |
2003 | - | then $Tuple2( | |
1992 | + | func kh (Q,ki) = { | |
1993 | + | let ja = valueOrElse(getInteger(bD(Q)), 0) | |
1994 | + | let kj = valueOrElse(getInteger(bx(aH, Q)), 0) | |
1995 | + | let kk = (ja / 6) | |
1996 | + | let kl = (ja / 7) | |
1997 | + | ((aK + fraction(aK, ((ja + kk) + (2 * kl)), 5)) + fraction(aK, kj, (ki * 5))) | |
1998 | + | } | |
1999 | + | ||
2000 | + | ||
2001 | + | func km (c,kn,ko) = { | |
2002 | + | let kp = if ((kn == eC)) | |
2003 | + | then $Tuple2(ko, valueOrElse(getString(bM(c)), "")) | |
2004 | 2004 | else { | |
2005 | 2005 | let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked") | |
2006 | - | let | |
2007 | - | let ck = split(value( | |
2006 | + | let kq = valueOrElse(getString(bO(B)), aM) | |
2007 | + | let ck = split(value(kq), "_") | |
2008 | 2008 | if ((ck[br] != "L")) | |
2009 | 2009 | then throw((("Duck location type is " + ck[br]) + ", but should be L")) | |
2010 | 2010 | else $Tuple2(ck[bs], B) | |
2011 | 2011 | } | |
2012 | - | let Q = | |
2013 | - | let | |
2014 | - | let | |
2015 | - | let | |
2016 | - | let | |
2017 | - | let | |
2018 | - | if (( | |
2012 | + | let Q = kp._1 | |
2013 | + | let kr = kp._2 | |
2014 | + | let ks = value(assetInfo(fromBase58String(Q))) | |
2015 | + | let kt = bw(Q) | |
2016 | + | let ku = valueOrErrorMessage(getInteger(kt), (("Land " + ks.name) + " is not staked")) | |
2017 | + | let kv = valueOrErrorMessage(getString(bt(Q)), (("NFT " + ks.name) + " is orphaned")) | |
2018 | + | if ((kv != c)) | |
2019 | 2019 | then throw((aF + " is not yours")) | |
2020 | 2020 | else { | |
2021 | - | let | |
2022 | - | $Tuple4( | |
2023 | - | } | |
2024 | - | } | |
2025 | - | ||
2026 | - | ||
2027 | - | func | |
2021 | + | let kw = split(ks.description, "_") | |
2022 | + | $Tuple4(kr, Q, kw, ku) | |
2023 | + | } | |
2024 | + | } | |
2025 | + | ||
2026 | + | ||
2027 | + | func kx (c,eL,kn,ko) = if ((0 > eL)) | |
2028 | 2028 | then throw("Negative amount") | |
2029 | 2029 | else { | |
2030 | - | let gd = | |
2030 | + | let gd = km(c, kn, ko) | |
2031 | 2031 | let dL = gd._3[do] | |
2032 | 2032 | let gJ = gP(gd._3[dp]) | |
2033 | 2033 | let gT = (lastBlock.timestamp - gd._4) | |
2034 | 2034 | if ((0 > gT)) | |
2035 | 2035 | then throw(((("Saved timestamp is in future, saved = " + toString(gd._4)) + ", current = ") + toString(lastBlock.timestamp))) | |
2036 | 2036 | else { | |
2037 | - | let | |
2038 | - | let | |
2039 | - | let | |
2040 | - | if ((eL > | |
2041 | - | then throw(((("Not enough resources, available = " + toString( | |
2037 | + | let ki = dK(dL) | |
2038 | + | let ky = kh(gd._2, ki) | |
2039 | + | let kz = fraction(gT, (ky * ki), a) | |
2040 | + | if ((eL > kz)) | |
2041 | + | then throw(((("Not enough resources, available = " + toString(kz)) + ", requested = ") + toString(eL))) | |
2042 | 2042 | else { | |
2043 | - | let | |
2044 | - | let | |
2045 | - | let | |
2046 | - | let hb = gX(gJ, (gT - | |
2047 | - | let | |
2048 | - | let | |
2049 | - | let | |
2050 | - | let | |
2051 | - | let hc = parseIntValue( | |
2052 | - | if (if (( | |
2043 | + | let kA = fraction((kz - eL), a, (ky * ki)) | |
2044 | + | let kB = (lastBlock.timestamp - kA) | |
2045 | + | let iZ = (ki / cL) | |
2046 | + | let hb = gX(gJ, (gT - kA), iZ, ky) | |
2047 | + | let iY = bC(gd._2) | |
2048 | + | let ja = valueOrElse(getInteger(bD(gd._2)), 0) | |
2049 | + | let iP = iX(iY, iZ, ja) | |
2050 | + | let jg = split(iP[bh], "_") | |
2051 | + | let hc = parseIntValue(jg[bk]) | |
2052 | + | if (if ((kn == eC)) | |
2053 | 2053 | then (eL > hc) | |
2054 | 2054 | else false) | |
2055 | 2055 | then throw((("Only " + toString(hc)) + " space left in warehouse")) | |
2056 | 2056 | else { | |
2057 | - | let | |
2058 | - | let | |
2059 | - | let ha = split( | |
2060 | - | let gZ = split( | |
2061 | - | let | |
2062 | - | then $Tuple4(gR(gZ, gJ, (gT - | |
2063 | - | else if (( | |
2064 | - | then $Tuple4( | |
2057 | + | let iL = bN(gd._1) | |
2058 | + | let jo = iK(iL) | |
2059 | + | let ha = split(jo[bn], "_") | |
2060 | + | let gZ = split(iP[be], "_") | |
2061 | + | let kC = if ((kn == eC)) | |
2062 | + | then $Tuple4(gR(gZ, gJ, (gT - kA), iZ, ky), jo[bn], (parseIntValue(jg[bj]) + hb._2), (parseIntValue(jg[bk]) - hb._2)) | |
2063 | + | else if ((kn == eD)) | |
2064 | + | then $Tuple4(iP[be], gR(ha, gJ, (gT - kA), iZ, ky), parseIntValue(jg[bj]), parseIntValue(jg[bk])) | |
2065 | 2065 | else { | |
2066 | - | let | |
2067 | - | let | |
2068 | - | $Tuple4( | |
2066 | + | let kD = gY(gZ, ha, hb, hc) | |
2067 | + | let kE = min([parseIntValue(jg[bk]), hb._2]) | |
2068 | + | $Tuple4(kD._1, kD._2, (parseIntValue(jg[bj]) + kE), (parseIntValue(jg[bk]) - kE)) | |
2069 | 2069 | } | |
2070 | - | let | |
2071 | - | let | |
2072 | - | let | |
2073 | - | let | |
2074 | - | $Tuple5([IntegerEntry(bw(gd._2), | |
2070 | + | let kF = kC._1 | |
2071 | + | let kG = kC._2 | |
2072 | + | let kH = kC._3 | |
2073 | + | let kI = kC._4 | |
2074 | + | $Tuple5([IntegerEntry(bw(gd._2), kB), IntegerEntry(bz(aF, gd._2, c), kB)], iL, [jo[bm], kG, jo[bo], jo[bp]], iY, [iP[bd], kF, iP[bf], iP[bg], makeString([jg[bi], toString(kH), toString(kI), jg[bl]], "_")]) | |
2075 | 2075 | } | |
2076 | 2076 | } | |
2077 | 2077 | } | |
2078 | 2078 | } | |
2079 | 2079 | ||
2080 | 2080 | ||
2081 | - | func | |
2082 | - | let | |
2083 | - | let | |
2084 | - | let | |
2085 | - | | |
2086 | - | } | |
2087 | - | ||
2088 | - | ||
2089 | - | func | |
2090 | - | let c = toString( | |
2091 | - | let gd = | |
2092 | - | let | |
2093 | - | let | |
2094 | - | let | |
2081 | + | func kJ (c,Q,ki,kn) = { | |
2082 | + | let kt = bw(Q) | |
2083 | + | let ku = value(getInteger(kt)) | |
2084 | + | let kz = (fraction((lastBlock.timestamp - ku), kh(Q, ki), a) * ki) | |
2085 | + | kx(c, kz, kn, Q) | |
2086 | + | } | |
2087 | + | ||
2088 | + | ||
2089 | + | func kK (fh,jJ,kL,Q) = { | |
2090 | + | let c = toString(jJ) | |
2091 | + | let gd = km(c, eE, Q) | |
2092 | + | let ki = dK(gd._3[do]) | |
2093 | + | let kM = bD(gd._2) | |
2094 | + | let kN = valueOrElse(getInteger(kM), 0) | |
2095 | 2095 | if (if (!(cz)) | |
2096 | - | then ( | |
2096 | + | then (kN >= 3) | |
2097 | 2097 | else false) | |
2098 | 2098 | then throw("Currently max infrastructure level = 3") | |
2099 | 2099 | else { | |
2100 | - | let | |
2101 | - | let ao = ( | |
2100 | + | let kO = ((sqrt(ki, 0, 0, DOWN) / 5) + 2) | |
2101 | + | let ao = (kN + 1) | |
2102 | 2102 | if (if (cz) | |
2103 | - | then (ao > | |
2103 | + | then (ao > kO) | |
2104 | 2104 | else false) | |
2105 | - | then throw(("Currently max infrastructure level = " + toString( | |
2105 | + | then throw(("Currently max infrastructure level = " + toString(kO))) | |
2106 | 2106 | else { | |
2107 | - | let | |
2107 | + | let kP = fraction(eh, (ki * ao), cL) | |
2108 | 2108 | if (if (!(fh)) | |
2109 | - | then ( | |
2109 | + | then (kL != kP) | |
2110 | 2110 | else false) | |
2111 | - | then throw(("Payment attached should be " + toString( | |
2111 | + | then throw(("Payment attached should be " + toString(kP))) | |
2112 | 2112 | else { | |
2113 | - | let | |
2114 | - | let | |
2115 | - | let | |
2116 | - | let | |
2117 | - | let | |
2118 | - | let | |
2119 | - | let | |
2120 | - | let | |
2121 | - | let | |
2122 | - | let | |
2123 | - | let | |
2124 | - | let | |
2125 | - | $Tuple3(([IntegerEntry( | |
2113 | + | let iL = bN(gd._1) | |
2114 | + | let jo = iK(iL) | |
2115 | + | let kQ = split(jo[bo], "_") | |
2116 | + | let kR = fraction(cF, (ki * ao), cL) | |
2117 | + | let kS = makeString(fg(fh, kQ, kR), "_") | |
2118 | + | let kT = kJ(c, gd._2, ki, eE) | |
2119 | + | let kU = kT._5 | |
2120 | + | let kV = iM(kU[bd]) | |
2121 | + | let kW = makeString([split(kU[bd], "_")[0], toString(ao)], "_") | |
2122 | + | let kX = iM(kW) | |
2123 | + | let jg = split(kU[bh], "_") | |
2124 | + | let kY = makeString([jg[bi], jg[bj], toString(((parseIntValue(jg[bk]) + kX) - kV)), toString(kX)], "_") | |
2125 | + | $Tuple3(([IntegerEntry(kM, ao), IntegerEntry(ex(gd._2, c), ao), StringEntry(iL, makeString([jo[bm], kT._3[bn], kS, jo[bp]], ":")), StringEntry(kT._4, makeString([kW, kU[be], kU[bf], kU[bg], kY], ":"))] ++ kT._1), ao, kR) | |
2126 | 2126 | } | |
2127 | 2127 | } | |
2128 | 2128 | } | |
2129 | 2129 | } | |
2130 | 2130 | ||
2131 | 2131 | ||
2132 | - | func | |
2133 | - | let ai = valueOrElse(getInteger( | |
2134 | - | let an = (ai + | |
2135 | - | let | |
2136 | - | $Tuple2([IntegerEntry( | |
2137 | - | } | |
2138 | - | ||
2139 | - | ||
2140 | - | func | |
2141 | - | ||
2142 | - | ||
2143 | - | func | |
2144 | - | ||
2145 | - | ||
2146 | - | func | |
2132 | + | func kZ (la,lb,lc,ld) = { | |
2133 | + | let ai = valueOrElse(getInteger(lb), 0) | |
2134 | + | let an = (ai + ld) | |
2135 | + | let le = al(valueOrElse(getInteger(la), 0), an) | |
2136 | + | $Tuple2([IntegerEntry(la, le[0]), IntegerEntry(lb, an), IntegerEntry(lc, (valueOrElse(getInteger(lc), 0) + le[1]))], an) | |
2137 | + | } | |
2138 | + | ||
2139 | + | ||
2140 | + | func lf (B,ld) = kZ(E(B), D(B), F(B), ld) | |
2141 | + | ||
2142 | + | ||
2143 | + | func lg (c,ld) = kZ(I(c), H(c), J(c), ld) | |
2144 | + | ||
2145 | + | ||
2146 | + | func lh (c) = { | |
2147 | 2147 | let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked") | |
2148 | - | let | |
2149 | - | let | |
2150 | - | if (!(isDefined( | |
2148 | + | let li = bH(c) | |
2149 | + | let lj = getString(li) | |
2150 | + | if (!(isDefined(lj))) | |
2151 | 2151 | then throw("You are not eligible for ONBOARD artifact") | |
2152 | 2152 | else { | |
2153 | - | let | |
2154 | - | let | |
2155 | - | if (isDefined( | |
2156 | - | then throw(("You already used your ONBOARD artifact on duck " + value( | |
2153 | + | let lk = bJ(c) | |
2154 | + | let ll = getString(lk) | |
2155 | + | if (isDefined(ll)) | |
2156 | + | then throw(("You already used your ONBOARD artifact on duck " + value(ll))) | |
2157 | 2157 | else { | |
2158 | - | let | |
2159 | - | let | |
2160 | - | if (isDefined( | |
2161 | - | then throw(((("The duck " + B) + " already got points from ONBOARD artifact from user ") + value( | |
2162 | - | else ([StringEntry( | |
2158 | + | let lm = bI(B) | |
2159 | + | let ln = getString(lm) | |
2160 | + | if (isDefined(ln)) | |
2161 | + | then throw(((("The duck " + B) + " already got points from ONBOARD artifact from user ") + value(ln))) | |
2162 | + | else ([StringEntry(lk, B), StringEntry(lm, c)] ++ lf(B, af)._1) | |
2163 | 2163 | } | |
2164 | 2164 | } | |
2165 | 2165 | } | |
2166 | 2166 | ||
2167 | 2167 | ||
2168 | - | func | |
2169 | - | let gd = | |
2168 | + | func lo (c,ko) = { | |
2169 | + | let gd = km(c, eE, ko) | |
2170 | 2170 | let Q = gd._2 | |
2171 | - | let | |
2172 | - | let | |
2173 | - | if ((valueOrElse(getInteger( | |
2171 | + | let ki = dK(gd._3[do]) | |
2172 | + | let lp = bx(aH, Q) | |
2173 | + | if ((valueOrElse(getInteger(lp), 0) > 0)) | |
2174 | 2174 | then throw("Presale artifact is already activated") | |
2175 | 2175 | else if ((parseIntValue(gd._3[dn]) > er)) | |
2176 | 2176 | then throw((((aF + " ") + Q) + " is not eligible for presale artifact")) | |
2177 | 2177 | else { | |
2178 | - | let | |
2179 | - | ((( | |
2178 | + | let kT = kJ(c, Q, ki, eE) | |
2179 | + | (((kT._1 :+ IntegerEntry(lp, ki)) :+ StringEntry(kT._2, makeString(kT._3, ":"))) :+ StringEntry(kT._4, makeString(kT._5, ":"))) | |
2180 | 2180 | } | |
2181 | 2181 | } | |
2182 | 2182 | ||
2183 | 2183 | ||
2184 | - | func | |
2184 | + | func lq (B) = { | |
2185 | 2185 | let cj = valueOrElse(getInteger(dl, bU), 0) | |
2186 | - | let | |
2186 | + | let kq = split(valueOrElse(getString(bO(B)), aM), "_") | |
2187 | 2187 | let aA = lastBlock.timestamp | |
2188 | 2188 | let cl = cd(dl, cj) | |
2189 | 2189 | let cf = cl[bZ] | |
2190 | 2190 | let cg = cl[ca] | |
2191 | - | if (( | |
2191 | + | if ((kq[br] != "T")) | |
2192 | 2192 | then false | |
2193 | - | else if (if (if ((parseIntValue( | |
2193 | + | else if (if (if ((parseIntValue(kq[bq]) == cj)) | |
2194 | 2194 | then (cg[cc] == "INPROGRESS") | |
2195 | 2195 | else false) | |
2196 | 2196 | then (parseIntValue(cf[cb]) > aA) | |
2200 | 2200 | } | |
2201 | 2201 | ||
2202 | 2202 | ||
2203 | - | func | |
2204 | - | let | |
2203 | + | func lr (B) = { | |
2204 | + | let kq = split(valueOrElse(getString(bO(B)), aM), "_") | |
2205 | 2205 | let aA = lastBlock.timestamp | |
2206 | - | if (( | |
2206 | + | if ((kq[br] != "D")) | |
2207 | 2207 | then false | |
2208 | 2208 | else { | |
2209 | - | let cn = parseIntValue( | |
2210 | - | let co = parseIntValue( | |
2209 | + | let cn = parseIntValue(kq[bq]) | |
2210 | + | let co = parseIntValue(kq[bs]) | |
2211 | 2211 | if (if (((cn + aQ) > aA)) | |
2212 | 2212 | then (1 > co) | |
2213 | 2213 | else false) | |
2217 | 2217 | } | |
2218 | 2218 | ||
2219 | 2219 | ||
2220 | - | func | |
2221 | - | let | |
2220 | + | func ls (B,fM,jV,lt) = { | |
2221 | + | let kq = split(valueOrElse(getString(bO(B)), aM), "_") | |
2222 | 2222 | let aA = lastBlock.timestamp | |
2223 | - | let cn = parseIntValue( | |
2224 | - | let co = parseIntValue( | |
2225 | - | let | |
2226 | - | let | |
2227 | - | let | |
2228 | - | let | |
2223 | + | let cn = parseIntValue(kq[bq]) | |
2224 | + | let co = parseIntValue(kq[bs]) | |
2225 | + | let kv = valueOrErrorMessage(getString(bL(B)), "NFT duck is orphaned") | |
2226 | + | let lu = A(B) | |
2227 | + | let lv = getIntegerValue(lu) | |
2228 | + | let lw = if (if ((co > 0)) | |
2229 | 2229 | then true | |
2230 | 2230 | else if (if (fM) | |
2231 | - | then ( | |
2231 | + | then (lt > 0) | |
2232 | 2232 | else false) | |
2233 | - | then ( | |
2233 | + | then (jV > 0) | |
2234 | 2234 | else false) | |
2235 | 2235 | then { | |
2236 | - | let | |
2237 | - | if (( | |
2236 | + | let lx = invoke(di, "sendDeliveryReward", [kv], nil) | |
2237 | + | if ((lx == lx)) | |
2238 | 2238 | then { | |
2239 | - | let | |
2240 | - | [IntegerEntry( | |
2239 | + | let ly = V(kv) | |
2240 | + | [IntegerEntry(ly, (valueOrElse(getInteger(ly), 0) + 1)), IntegerEntry(W(kv), (cn / a))] | |
2241 | 2241 | } | |
2242 | 2242 | else throw("Strict value is not equal to itself.") | |
2243 | 2243 | } | |
2244 | 2244 | else if (if (if (fM) | |
2245 | - | then ( | |
2245 | + | then (jV > 0) | |
2246 | 2246 | else false) | |
2247 | 2247 | then ((cn + aQ) > aA) | |
2248 | 2248 | else false) | |
2249 | 2249 | then throw("Your duck is still on delivery mission") | |
2250 | 2250 | else { | |
2251 | - | let | |
2252 | - | let | |
2253 | - | if (( | |
2251 | + | let lz = valueOrElse(getInteger(di, bT), 0) | |
2252 | + | let lA = invoke(di, "updateDeliveryLocked", [(lz - aP)], nil) | |
2253 | + | if ((lA == lA)) | |
2254 | 2254 | then if (if (if (fM) | |
2255 | - | then (0 >= | |
2255 | + | then (0 >= jV) | |
2256 | 2256 | else false) | |
2257 | 2257 | then true | |
2258 | - | else (0 >= | |
2258 | + | else (0 >= lv)) | |
2259 | 2259 | then nil | |
2260 | 2260 | else [IntegerEntry(U(B), (cn + cH))] | |
2261 | 2261 | else throw("Strict value is not equal to itself.") | |
2262 | 2262 | } | |
2263 | - | let | |
2264 | - | $Tuple3( | |
2265 | - | } | |
2266 | - | ||
2267 | - | ||
2268 | - | func | |
2263 | + | let lB = getStringValue(L(B)) | |
2264 | + | $Tuple3(lw, [StringEntry(bO(B), lB)], lB) | |
2265 | + | } | |
2266 | + | ||
2267 | + | ||
2268 | + | func lC (lD,ao,lE,c,lF,lG) = { | |
2269 | 2269 | let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked") | |
2270 | - | if ( | |
2270 | + | if (lq(B)) | |
2271 | 2271 | then throw("mergeInternal_checkTournament") | |
2272 | - | else if ( | |
2272 | + | else if (lr(B)) | |
2273 | 2273 | then throw("mergeInternal_checkDelivery") | |
2274 | 2274 | else { | |
2275 | - | func | |
2276 | - | let | |
2277 | - | let | |
2278 | - | let | |
2279 | - | let | |
2280 | - | if (( | |
2275 | + | func lH (eU,Q) = { | |
2276 | + | let ks = value(assetInfo(fromBase58String(Q))) | |
2277 | + | let kt = bw(Q) | |
2278 | + | let ku = valueOrErrorMessage(getInteger(kt), (("NFT " + ks.name) + " is not staked")) | |
2279 | + | let kv = valueOrErrorMessage(getString(bt(Q)), (("NFT " + ks.name) + " is orphaned")) | |
2280 | + | if ((kv != c)) | |
2281 | 2281 | then throw((aF + " is not yours")) | |
2282 | 2282 | else { | |
2283 | - | let | |
2284 | - | let dz = | |
2283 | + | let kw = split(ks.description, "_") | |
2284 | + | let dz = kw[dq] | |
2285 | 2285 | if (if ((eU._3 != "")) | |
2286 | 2286 | then (eU._3 != dz) | |
2287 | 2287 | else false) | |
2288 | 2288 | then throw("Lands should be on the same continent to merge") | |
2289 | 2289 | else { | |
2290 | - | let dL = | |
2291 | - | let | |
2292 | - | let gN = valueOrErrorMessage(indexOf( | |
2293 | - | let | |
2294 | - | let | |
2295 | - | let | |
2296 | - | let | |
2297 | - | let | |
2290 | + | let dL = kw[do] | |
2291 | + | let lI = eU._1 | |
2292 | + | let gN = valueOrErrorMessage(indexOf(lI, dL), "You haven't passed all the lands needed") | |
2293 | + | let lJ = (take(lI, gN) + drop(lI, (gN + 1))) | |
2294 | + | let ki = dK(dL) | |
2295 | + | let lK = (eU._2 + valueOrElse(getInteger(bx(aH, Q)), 0)) | |
2296 | + | let ja = valueOrElse(getInteger(bD(Q)), 0) | |
2297 | + | let lL = { | |
2298 | 2298 | let cD = dL | |
2299 | 2299 | if (("S" == cD)) | |
2300 | 2300 | then 3 | |
2306 | 2306 | then 6 | |
2307 | 2307 | else throw("Only S, M, L, XL can merge") | |
2308 | 2308 | } | |
2309 | - | if (( | |
2309 | + | if ((ja != lL)) | |
2310 | 2310 | then throw("All lands should be maxed to merge") | |
2311 | 2311 | else { | |
2312 | - | let ew = | |
2313 | - | let gJ = gP( | |
2314 | - | let gT = (lastBlock.timestamp - | |
2312 | + | let ew = kw[dn] | |
2313 | + | let gJ = gP(kw[dp]) | |
2314 | + | let gT = (lastBlock.timestamp - ku) | |
2315 | 2315 | if ((0 > gT)) | |
2316 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
2316 | + | then throw(((("Saved timestamp is in future, saved = " + toString(ku)) + ", current = ") + toString(lastBlock.timestamp))) | |
2317 | 2317 | else { | |
2318 | - | let | |
2319 | - | let | |
2320 | - | let | |
2321 | - | let fe = gH(eU._6, gJ, | |
2322 | - | let | |
2323 | - | let | |
2324 | - | let | |
2325 | - | let dg = indexOf( | |
2318 | + | let ky = kh(Q, ki) | |
2319 | + | let iZ = (ki / cL) | |
2320 | + | let kG = gR(split(eU._4, "_"), gJ, gT, iZ, ky) | |
2321 | + | let fe = gH(eU._6, gJ, iZ, -1) | |
2322 | + | let lM = gH(eU._10, gJ, iZ, -1) | |
2323 | + | let iE = gH(eU._9, gJ, iZ, 1) | |
2324 | + | let lN = eU._7 | |
2325 | + | let dg = indexOf(lN, Q) | |
2326 | 2326 | if (!(isDefined(dg))) | |
2327 | 2327 | then throw(("Your staked lands don't contain " + Q)) | |
2328 | 2328 | else { | |
2329 | - | let | |
2330 | - | let | |
2331 | - | $Tuple10( | |
2332 | - | then [DeleteEntry(et( | |
2333 | - | else nil)), fe, removeByIndex( | |
2329 | + | let lO = bv(Q) | |
2330 | + | let lP = valueOrElse(getString(lO), "") | |
2331 | + | $Tuple10(lJ, lK, dz, kG, ((((((((((((eU._5 :+ DeleteEntry(bw(Q))) :+ DeleteEntry(bz(aF, Q, c))) :+ DeleteEntry(ev(ew))) :+ DeleteEntry(bt(Q))) :+ DeleteEntry(bD(Q))) :+ DeleteEntry(ex(Q, c))) :+ DeleteEntry(bx(aH, Q))) :+ DeleteEntry(ey(ew))) :+ DeleteEntry(bC(Q))) :+ DeleteEntry(lO)) :+ Burn(fromBase58String(Q), 1)) ++ (if ((lP != "")) | |
2332 | + | then [DeleteEntry(et(lP))] | |
2333 | + | else nil)), fe, removeByIndex(lN, value(dg)), (eU._8 + ki), iE, lM) | |
2334 | 2334 | } | |
2335 | 2335 | } | |
2336 | 2336 | } | |
2338 | 2338 | } | |
2339 | 2339 | } | |
2340 | 2340 | ||
2341 | - | let | |
2342 | - | let | |
2341 | + | let iL = bN(B) | |
2342 | + | let jo = iK(iL) | |
2343 | 2343 | let gI = split(valueOrElse(getString(dx()), "0_0_0_0_0_0"), "_") | |
2344 | - | let | |
2345 | - | let | |
2346 | - | let | |
2347 | - | then split_51C(value( | |
2344 | + | let lQ = dA(c) | |
2345 | + | let lR = getString(lQ) | |
2346 | + | let lS = if (isDefined(lR)) | |
2347 | + | then split_51C(value(lR), "_") | |
2348 | 2348 | else nil | |
2349 | - | let | |
2350 | - | let | |
2349 | + | let lT = split(value(assetInfo(fromBase58String(lF[0]))).description, "_")[dq] | |
2350 | + | let lU = split(valueOrElse(getString(dy(lT)), "0_0_0_0_0_0"), "_") | |
2351 | 2351 | let ff = { | |
2352 | - | let eW = | |
2352 | + | let eW = lF | |
2353 | 2353 | let eX = size(eW) | |
2354 | - | let eY = $Tuple10( | |
2354 | + | let eY = $Tuple10(lE, 0, "", jo[bn], nil, gI, lS, 0, split("0_0_0_0_0_0", "_"), lU) | |
2355 | 2355 | func eZ (fa,fb) = if ((fb >= eX)) | |
2356 | 2356 | then fa | |
2357 | - | else | |
2357 | + | else lH(fa, eW[fb]) | |
2358 | 2358 | ||
2359 | 2359 | func fc (fa,fb) = if ((fb >= eX)) | |
2360 | 2360 | then fa | |
2363 | 2363 | fc(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5) | |
2364 | 2364 | } | |
2365 | 2365 | let dz = ff._3 | |
2366 | - | let | |
2367 | - | let gQ = | |
2368 | - | let | |
2369 | - | let | |
2370 | - | let | |
2371 | - | let bu = calculateAssetId( | |
2372 | - | let | |
2373 | - | let | |
2374 | - | let | |
2375 | - | let | |
2366 | + | let iA = valueOrErrorMessage(indexOf(aU, dz), ("Unknown continent: " + dz)) | |
2367 | + | let gQ = iD(ff._9, (dK(lD) / cL)) | |
2368 | + | let jM = valueOrElse(getInteger(es()), (er + 1)) | |
2369 | + | let lV = toString(jM) | |
2370 | + | let jN = Issue(eJ(lV, lD), makeString([lV, lD, gQ, dz], "_"), 1, 0, false) | |
2371 | + | let bu = calculateAssetId(jN) | |
2372 | + | let lW = toBase58String(bu) | |
2373 | + | let kS = makeString(fg((lG > 0), split(jo[bo], "_"), lG), "_") | |
2374 | + | let lX = dB(c) | |
2375 | + | let lY = valueOrElse(getInteger(lX), 0) | |
2376 | 2376 | $Tuple2((((((((((((((((ff._5 :+ (if ((size(ff._7) > 0)) | |
2377 | - | then StringEntry( | |
2378 | - | else DeleteEntry( | |
2377 | + | then StringEntry(lQ, makeString_11C(ff._7, "_")) | |
2378 | + | else DeleteEntry(lQ))) :+ IntegerEntry(lX, if ((ff._8 > lY)) | |
2379 | 2379 | then 0 | |
2380 | - | else ( | |
2380 | + | else (lY - ff._8))) :+ IntegerEntry(es(), (jM + 1))) :+ jN) :+ StringEntry(ev(lV), lW)) :+ StringEntry(bt(lW), c)) :+ StringEntry(ey(lV), c)) :+ IntegerEntry(bx(aH, lW), ff._2)) :+ IntegerEntry(bD(lW), ao)) :+ IntegerEntry(ex(lW, c), ao)) :+ StringEntry(iL, makeString([jo[bm], ff._4, kS, jo[bp]], ":"))) :+ StringEntry(dx(), makeString(ff._6, "_"))) :+ StringEntry(dy(dz), makeString(ff._10, "_"))) :+ StringEntry(bO(B), makeString([dz, "L", lW], "_"))) :+ ScriptTransfer(addressFromStringValue(c), 1, bu)), lW) | |
2381 | 2381 | } | |
2382 | 2382 | } | |
2383 | 2383 | ||
2384 | 2384 | ||
2385 | - | func | |
2386 | - | ||
2387 | - | ||
2388 | - | func | |
2389 | - | ||
2390 | - | ||
2391 | - | func | |
2392 | - | ||
2393 | - | ||
2394 | - | func | |
2395 | - | ||
2396 | - | ||
2397 | - | func | |
2398 | - | let cD = size( | |
2385 | + | func lZ (c,lF) = lC("M", 3, "SSSS", c, lF, 0) | |
2386 | + | ||
2387 | + | ||
2388 | + | func ma (c,lF) = lC("L", 4, "SMM", c, lF, (cF * 4)) | |
2389 | + | ||
2390 | + | ||
2391 | + | func mb (c,lF) = lC("XL", 5, "SSSML", c, lF, (cF * 47)) | |
2392 | + | ||
2393 | + | ||
2394 | + | func mc (c,lF) = lC("XXL", 6, "LXL", c, lF, (cF * 54)) | |
2395 | + | ||
2396 | + | ||
2397 | + | func md (c,lF) = { | |
2398 | + | let cD = size(lF) | |
2399 | 2399 | if ((4 == cD)) | |
2400 | - | then | |
2400 | + | then lZ(c, lF) | |
2401 | 2401 | else if ((3 == cD)) | |
2402 | - | then | |
2402 | + | then ma(c, lF) | |
2403 | 2403 | else if ((5 == cD)) | |
2404 | - | then | |
2404 | + | then mb(c, lF) | |
2405 | 2405 | else if ((2 == cD)) | |
2406 | - | then | |
2406 | + | then mc(c, lF) | |
2407 | 2407 | else throw("Unknown merge") | |
2408 | 2408 | } | |
2409 | 2409 | ||
2410 | 2410 | ||
2411 | - | func | |
2412 | - | let | |
2413 | - | if (isDefined( | |
2411 | + | func me (bQ) = { | |
2412 | + | let mf = getString(bM(bQ)) | |
2413 | + | if (isDefined(mf)) | |
2414 | 2414 | then { | |
2415 | - | let B = value( | |
2416 | - | let | |
2417 | - | let ck = split(valueOrElse(getString( | |
2415 | + | let B = value(mf) | |
2416 | + | let mg = bO(B) | |
2417 | + | let ck = split(valueOrElse(getString(mg), aM), "_") | |
2418 | 2418 | let cn = parseIntValue(ck[bq]) | |
2419 | 2419 | if (if ((ck[br] != "D")) | |
2420 | 2420 | then true | |
2421 | 2421 | else ((cn + aQ) > lastBlock.timestamp)) | |
2422 | 2422 | then nil | |
2423 | 2423 | else { | |
2424 | - | let | |
2424 | + | let lu = A(B) | |
2425 | 2425 | if ((parseIntValue(ck[bs]) > 0)) | |
2426 | 2426 | then { | |
2427 | - | let | |
2428 | - | if (( | |
2427 | + | let lx = invoke(di, "sendDeliveryReward", [bQ], nil) | |
2428 | + | if ((lx == lx)) | |
2429 | 2429 | then nil | |
2430 | 2430 | else throw("Strict value is not equal to itself.") | |
2431 | 2431 | } | |
2432 | 2432 | else (({ | |
2433 | - | let | |
2434 | - | let | |
2435 | - | if (( | |
2436 | - | then if ((0 >= getIntegerValue( | |
2433 | + | let lz = valueOrElse(getInteger(di, bT), 0) | |
2434 | + | let lA = invoke(di, "updateDeliveryLocked", [(lz - aP)], nil) | |
2435 | + | if ((lA == lA)) | |
2436 | + | then if ((0 >= getIntegerValue(lu))) | |
2437 | 2437 | then nil | |
2438 | 2438 | else { | |
2439 | - | let | |
2440 | - | if (( | |
2439 | + | let mh = invoke(this, "saveInteger", [U(B), (cn + cH)], nil) | |
2440 | + | if ((mh == mh)) | |
2441 | 2441 | then nil | |
2442 | 2442 | else throw("Strict value is not equal to itself.") | |
2443 | 2443 | } | |
2444 | 2444 | else throw("Strict value is not equal to itself.") | |
2445 | - | } :+ IntegerEntry( | |
2445 | + | } :+ IntegerEntry(lu, getIntegerValue(K(B)))) :+ StringEntry(mg, getStringValue(L(B)))) | |
2446 | 2446 | } | |
2447 | 2447 | } | |
2448 | 2448 | else nil | |
2449 | 2449 | } | |
2450 | 2450 | ||
2451 | 2451 | ||
2452 | - | func | |
2452 | + | func mi (gN) = if (if ((gN.originCaller != dh)) | |
2453 | 2453 | then valueOrElse(getBoolean(dN()), false) | |
2454 | 2454 | else false) | |
2455 | 2455 | then throw("Contracts are under maintenance") | |
2456 | 2456 | else { | |
2457 | 2457 | let bQ = toString(gN.originCaller) | |
2458 | - | ( | |
2458 | + | (me(bQ) :+ StringEntry(dO(bQ), toBase58String(gN.transactionId))) | |
2459 | 2459 | } | |
2460 | 2460 | ||
2461 | 2461 | ||
2462 | - | func | |
2462 | + | func mj (gN) = if (if ((gN.originCaller != dh)) | |
2463 | 2463 | then valueOrElse(getBoolean(dN()), false) | |
2464 | 2464 | else false) | |
2465 | 2465 | then throw("Contracts are under maintenance") | |
2467 | 2467 | ||
2468 | 2468 | ||
2469 | 2469 | @Callable(gN) | |
2470 | - | func constructorV1 ( | |
2470 | + | func constructorV1 (mk) = if ((gN.caller != this)) | |
2471 | 2471 | then throw("Permission denied") | |
2472 | - | else [StringEntry(db(), | |
2472 | + | else [StringEntry(db(), mk)] | |
2473 | 2473 | ||
2474 | 2474 | ||
2475 | 2475 | ||
2481 | 2481 | ||
2482 | 2482 | ||
2483 | 2483 | @Callable(gN) | |
2484 | - | func setBlocked ( | |
2484 | + | func setBlocked (ml) = if ((gN.caller != this)) | |
2485 | 2485 | then throw("permission denied") | |
2486 | - | else [BooleanEntry(dN(), | |
2486 | + | else [BooleanEntry(dN(), ml)] | |
2487 | 2487 | ||
2488 | 2488 | ||
2489 | 2489 | ||
2490 | 2490 | @Callable(gN) | |
2491 | 2491 | func stakeLand () = { | |
2492 | - | let | |
2492 | + | let mm = mi(gN) | |
2493 | 2493 | if ((size(gN.payments) != 1)) | |
2494 | 2494 | then throw("Exactly one payment required") | |
2495 | 2495 | else { | |
2496 | - | let | |
2497 | - | let bu = value( | |
2496 | + | let mn = value(gN.payments[0]) | |
2497 | + | let bu = value(mn.assetId) | |
2498 | 2498 | let cS = toString(gN.caller) | |
2499 | - | if (( | |
2499 | + | if ((mn.amount != 1)) | |
2500 | 2500 | then throw((("NFT " + aF) + " token should be attached as payment")) | |
2501 | 2501 | else { | |
2502 | - | let | |
2503 | - | if (( | |
2502 | + | let ks = value(assetInfo(bu)) | |
2503 | + | if ((ks.issuer != this)) | |
2504 | 2504 | then throw("Unknown issuer of token") | |
2505 | - | else if (!(contains( | |
2505 | + | else if (!(contains(ks.name, aF))) | |
2506 | 2506 | then throw((("Only NFT " + aF) + " tokens are accepted")) | |
2507 | 2507 | else { | |
2508 | - | let | |
2509 | - | let ew = if (contains( | |
2510 | - | then dropRight( | |
2511 | - | else if (contains( | |
2512 | - | then dropRight( | |
2513 | - | else dropRight( | |
2508 | + | let mo = drop(ks.name, 4) | |
2509 | + | let ew = if (contains(mo, "XXL")) | |
2510 | + | then dropRight(mo, 3) | |
2511 | + | else if (contains(mo, "XL")) | |
2512 | + | then dropRight(mo, 2) | |
2513 | + | else dropRight(mo, 1) | |
2514 | 2514 | if (!(isDefined(parseInt(ew)))) | |
2515 | - | then throw(("Cannot parse land number from " + | |
2515 | + | then throw(("Cannot parse land number from " + ks.name)) | |
2516 | 2516 | else { | |
2517 | 2517 | let Q = toBase58String(bu) | |
2518 | - | let | |
2519 | - | if (isDefined(getInteger( | |
2520 | - | then throw((("NFT " + | |
2518 | + | let kt = bw(Q) | |
2519 | + | if (isDefined(getInteger(kt))) | |
2520 | + | then throw((("NFT " + ks.name) + " is already staked")) | |
2521 | 2521 | else { | |
2522 | - | let | |
2523 | - | let gJ = gP( | |
2524 | - | let | |
2525 | - | let | |
2526 | - | let fe = gO(gJ, | |
2527 | - | let | |
2528 | - | let | |
2529 | - | let | |
2530 | - | let | |
2531 | - | let | |
2532 | - | let | |
2533 | - | then split_51C(value( | |
2522 | + | let kw = split(ks.description, "_") | |
2523 | + | let gJ = gP(kw[dp]) | |
2524 | + | let ki = dK(kw[do]) | |
2525 | + | let iZ = (ki / cL) | |
2526 | + | let fe = gO(gJ, iZ, 1) | |
2527 | + | let mp = dy(kw[dq]) | |
2528 | + | let lU = split(valueOrElse(getString(mp), "0_0_0_0_0_0"), "_") | |
2529 | + | let mq = makeString(gH(lU, gJ, iZ, 1), "_") | |
2530 | + | let lQ = dA(cS) | |
2531 | + | let lR = getString(lQ) | |
2532 | + | let lN = if (isDefined(lR)) | |
2533 | + | then split_51C(value(lR), "_") | |
2534 | 2534 | else nil | |
2535 | - | if (containsElement( | |
2535 | + | if (containsElement(lN, Q)) | |
2536 | 2536 | then throw(("Your staked lands already contain " + Q)) | |
2537 | - | else if ((size( | |
2537 | + | else if ((size(lN) >= aJ)) | |
2538 | 2538 | then throw((("Your already staked max (" + toString(aJ)) + ") lands")) | |
2539 | 2539 | else { | |
2540 | - | let | |
2541 | - | let | |
2542 | - | let | |
2543 | - | let | |
2544 | - | $Tuple2(([IntegerEntry( | |
2540 | + | let ja = valueOrElse(getInteger(bD(Q)), 0) | |
2541 | + | let lX = dB(cS) | |
2542 | + | let mr = valueOrElse(getInteger(lX), 0) | |
2543 | + | let ms = invoke(dk, "onStakeUnstakeLand", [cS], nil) | |
2544 | + | $Tuple2(([IntegerEntry(kt, lastBlock.timestamp), IntegerEntry(bz(aF, Q, cS), lastBlock.timestamp), StringEntry(lQ, makeString_11C((lN :+ Q), "_")), IntegerEntry(lX, (mr + ki)), StringEntry(bt(Q), cS), StringEntry(ey(ew), cS), IntegerEntry(ex(Q, cS), ja), StringEntry(dx(), fe), StringEntry(mp, mq)] ++ mm), ms) | |
2545 | 2545 | } | |
2546 | 2546 | } | |
2547 | 2547 | } | |
2553 | 2553 | ||
2554 | 2554 | ||
2555 | 2555 | @Callable(gN) | |
2556 | - | func unstakeLand ( | |
2557 | - | let | |
2556 | + | func unstakeLand (ko) = { | |
2557 | + | let mm = mi(gN) | |
2558 | 2558 | if ((size(gN.payments) != 0)) | |
2559 | 2559 | then throw("No payments required") | |
2560 | 2560 | else { | |
2561 | 2561 | let c = toString(gN.caller) | |
2562 | - | let gd = | |
2562 | + | let gd = km(c, eD, ko) | |
2563 | 2563 | let Q = gd._2 | |
2564 | - | let | |
2565 | - | let | |
2566 | - | let gJ = gP( | |
2567 | - | let | |
2568 | - | let | |
2569 | - | let fe = gO(gJ, | |
2570 | - | let | |
2571 | - | let | |
2572 | - | let | |
2573 | - | let | |
2574 | - | let | |
2575 | - | let dg = indexOf( | |
2564 | + | let kw = gd._3 | |
2565 | + | let lQ = dA(c) | |
2566 | + | let gJ = gP(kw[dp]) | |
2567 | + | let ki = dK(kw[do]) | |
2568 | + | let iZ = (ki / cL) | |
2569 | + | let fe = gO(gJ, iZ, -1) | |
2570 | + | let mp = dy(kw[dq]) | |
2571 | + | let lU = split(valueOrElse(getString(mp), "0_0_0_0_0_0"), "_") | |
2572 | + | let mq = makeString(gH(lU, gJ, iZ, -1), "_") | |
2573 | + | let kT = kJ(c, Q, ki, eD) | |
2574 | + | let lN = split_51C(valueOrElse(getString(lQ), ""), "_") | |
2575 | + | let dg = indexOf(lN, Q) | |
2576 | 2576 | if (!(isDefined(dg))) | |
2577 | 2577 | then throw(("Your staked lands don't contain " + Q)) | |
2578 | 2578 | else { | |
2579 | 2579 | let aA = lastBlock.timestamp | |
2580 | - | let | |
2581 | - | if (( | |
2582 | - | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString( | |
2580 | + | let mt = valueOrElse(getInteger(dj, bP(c)), 0) | |
2581 | + | if ((mt >= aA)) | |
2582 | + | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(mt))) | |
2583 | 2583 | else { | |
2584 | - | let | |
2585 | - | if (( | |
2586 | - | then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString( | |
2584 | + | let mu = (valueOrElse(getInteger(dk, b(c)), 0) + cG) | |
2585 | + | if ((mu > aA)) | |
2586 | + | then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(mu))) | |
2587 | 2587 | else { | |
2588 | - | let | |
2589 | - | let | |
2590 | - | let | |
2588 | + | let lX = dB(c) | |
2589 | + | let lY = valueOrElse(getInteger(lX), 0) | |
2590 | + | let mv = if ((ki > lY)) | |
2591 | 2591 | then 0 | |
2592 | - | else ( | |
2593 | - | let | |
2594 | - | $Tuple2(([ScriptTransfer(gN.caller, 1, fromBase58String(Q)), DeleteEntry(bw(Q)), DeleteEntry(bz(aF, Q, c)), StringEntry(dx(), fe), StringEntry( | |
2595 | - | then StringEntry( | |
2596 | - | else DeleteEntry( | |
2592 | + | else (lY - ki) | |
2593 | + | let ms = invoke(dk, "onStakeUnstakeLand", [c], nil) | |
2594 | + | $Tuple2(([ScriptTransfer(gN.caller, 1, fromBase58String(Q)), DeleteEntry(bw(Q)), DeleteEntry(bz(aF, Q, c)), StringEntry(dx(), fe), StringEntry(mp, mq), StringEntry(kT._2, makeString(kT._3, ":")), if ((size(lN) > 1)) | |
2595 | + | then StringEntry(lQ, makeString_11C(removeByIndex(lN, value(dg)), "_")) | |
2596 | + | else DeleteEntry(lQ), IntegerEntry(lX, mv)] ++ mm), ms) | |
2597 | 2597 | } | |
2598 | 2598 | } | |
2599 | 2599 | } | |
2604 | 2604 | ||
2605 | 2605 | @Callable(gN) | |
2606 | 2606 | func stakeDuck () = { | |
2607 | - | let | |
2607 | + | let mm = mi(gN) | |
2608 | 2608 | if ((size(gN.payments) != 1)) | |
2609 | 2609 | then throw("Exactly one payment required") | |
2610 | 2610 | else { | |
2611 | - | let | |
2612 | - | let bu = value( | |
2611 | + | let mn = value(gN.payments[0]) | |
2612 | + | let bu = value(mn.assetId) | |
2613 | 2613 | let cS = toString(gN.caller) | |
2614 | - | if (( | |
2614 | + | if ((mn.amount != 1)) | |
2615 | 2615 | then throw((("NFT " + aG) + " token should be attached as payment")) | |
2616 | 2616 | else { | |
2617 | - | let | |
2618 | - | if (if (( | |
2619 | - | then ( | |
2617 | + | let ks = value(assetInfo(bu)) | |
2618 | + | if (if ((ks.issuer != ea)) | |
2619 | + | then (ks.issuer != eb) | |
2620 | 2620 | else false) | |
2621 | 2621 | then throw((("Unknown issuer of " + aG) + " token")) | |
2622 | - | else if (!(contains( | |
2622 | + | else if (!(contains(ks.name, aG))) | |
2623 | 2623 | then throw((("Only NFT " + aG) + " tokens are accepted")) | |
2624 | 2624 | else { | |
2625 | - | let | |
2626 | - | let | |
2627 | - | if (isDefined(getInteger( | |
2628 | - | then throw((("NFT " + | |
2625 | + | let mw = toBase58String(bu) | |
2626 | + | let kt = bw(mw) | |
2627 | + | if (isDefined(getInteger(kt))) | |
2628 | + | then throw((("NFT " + ks.name) + " is already staked")) | |
2629 | 2629 | else if (isDefined(getString(bM(cS)))) | |
2630 | - | then throw(("You already staked one duck: " + | |
2630 | + | then throw(("You already staked one duck: " + ks.name)) | |
2631 | 2631 | else { | |
2632 | - | let | |
2633 | - | let ci = getString( | |
2634 | - | let | |
2635 | - | let | |
2636 | - | let | |
2637 | - | let | |
2638 | - | let | |
2639 | - | ([IntegerEntry( | |
2632 | + | let mg = bO(mw) | |
2633 | + | let ci = getString(mg) | |
2634 | + | let iL = bN(mw) | |
2635 | + | let mx = getString(iL) | |
2636 | + | let kb = A(mw) | |
2637 | + | let kc = aj(valueOrElse(getInteger(E(mw)), 0)) | |
2638 | + | let lv = valueOrElse(getInteger(kb), kc) | |
2639 | + | ([IntegerEntry(kt, lastBlock.timestamp), IntegerEntry(bz(aG, toBase58String(bu), cS), lastBlock.timestamp), StringEntry(bL(mw), cS), StringEntry(bM(cS), mw)] ++ (if (isDefined(ci)) | |
2640 | 2640 | then nil | |
2641 | - | else ([StringEntry( | |
2641 | + | else ([StringEntry(mg, aM)] ++ (if (isDefined(mx)) | |
2642 | 2642 | then nil | |
2643 | - | else (([StringEntry( | |
2643 | + | else (([StringEntry(iL, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(kb, lv)) ++ mm))))) | |
2644 | 2644 | } | |
2645 | 2645 | } | |
2646 | 2646 | } | |
2650 | 2650 | ||
2651 | 2651 | ||
2652 | 2652 | @Callable(gN) | |
2653 | - | func unstakeDuck ( | |
2654 | - | let | |
2653 | + | func unstakeDuck (mw) = { | |
2654 | + | let mm = mi(gN) | |
2655 | 2655 | if ((size(gN.payments) != 0)) | |
2656 | 2656 | then throw("No payments required") | |
2657 | 2657 | else { | |
2658 | - | let bu = fromBase58String( | |
2658 | + | let bu = fromBase58String(mw) | |
2659 | 2659 | let cS = toString(gN.caller) | |
2660 | - | let | |
2661 | - | let | |
2662 | - | if (!(isDefined(getInteger( | |
2663 | - | then throw((("NFT " + | |
2660 | + | let ks = value(assetInfo(bu)) | |
2661 | + | let kt = bw(mw) | |
2662 | + | if (!(isDefined(getInteger(kt)))) | |
2663 | + | then throw((("NFT " + ks.name) + " is not staked")) | |
2664 | 2664 | else if (!(isDefined(getString(bM(cS))))) | |
2665 | - | then throw((("The duck " + | |
2665 | + | then throw((("The duck " + ks.name) + " is not staked")) | |
2666 | 2666 | else { | |
2667 | - | let | |
2668 | - | if (( | |
2667 | + | let kv = valueOrErrorMessage(getString(bL(mw)), (("NFT " + ks.name) + " is orphaned")) | |
2668 | + | if ((kv != cS)) | |
2669 | 2669 | then throw("Staked NFT is not yours") | |
2670 | - | else if ( | |
2670 | + | else if (lq(mw)) | |
2671 | 2671 | then throw("unstakeDuck_checkTournament") | |
2672 | - | else if ( | |
2672 | + | else if (lr(mw)) | |
2673 | 2673 | then throw("unstakeDuck_checkDelivery") | |
2674 | 2674 | else { | |
2675 | - | let | |
2676 | - | let | |
2677 | - | let av = valueOrElse(getInteger( | |
2678 | - | if (( | |
2679 | - | then throw((("Please heal your duck to " + toString( | |
2680 | - | else ([ScriptTransfer(gN.caller, 1, bu), DeleteEntry( | |
2675 | + | let kb = A(mw) | |
2676 | + | let kc = aj(valueOrElse(getInteger(E(mw)), 0)) | |
2677 | + | let av = valueOrElse(getInteger(kb), kc) | |
2678 | + | if ((kc > av)) | |
2679 | + | then throw((("Please heal your duck to " + toString(kc)) + "hp before unstaking")) | |
2680 | + | else ([ScriptTransfer(gN.caller, 1, bu), DeleteEntry(kt), DeleteEntry(kb), DeleteEntry(bO(mw)), DeleteEntry(bL(mw)), DeleteEntry(bz(aG, mw, cS)), DeleteEntry(bM(cS))] ++ mm) | |
2681 | 2681 | } | |
2682 | 2682 | } | |
2683 | 2683 | } | |
2686 | 2686 | ||
2687 | 2687 | ||
2688 | 2688 | @Callable(gN) | |
2689 | - | func claimRes (eL, | |
2690 | - | let | |
2689 | + | func claimRes (eL,my) = { | |
2690 | + | let mm = mi(gN) | |
2691 | 2691 | if ((size(gN.payments) != 0)) | |
2692 | 2692 | then throw("No payments required") | |
2693 | 2693 | else { | |
2694 | 2694 | let c = toString(gN.originCaller) | |
2695 | - | let fm = | |
2695 | + | let fm = kx(c, eL, eD, my) | |
2696 | 2696 | let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked") | |
2697 | - | $Tuple2(((((fm._1 ++ | |
2698 | - | } | |
2699 | - | } | |
2700 | - | ||
2701 | - | ||
2702 | - | ||
2703 | - | @Callable(gN) | |
2704 | - | func claimResToWH (eL, | |
2705 | - | let | |
2697 | + | $Tuple2(((((fm._1 ++ lf(B, fraction(X, eL, cK))._1) :+ StringEntry(fm._2, makeString(fm._3, ":"))) :+ StringEntry(fm._4, makeString(fm._5, ":"))) ++ mm), fm._3[bn]) | |
2698 | + | } | |
2699 | + | } | |
2700 | + | ||
2701 | + | ||
2702 | + | ||
2703 | + | @Callable(gN) | |
2704 | + | func claimResToWH (eL,my) = { | |
2705 | + | let mm = mi(gN) | |
2706 | 2706 | if ((size(gN.payments) != 0)) | |
2707 | 2707 | then throw("No payments required") | |
2708 | 2708 | else { | |
2709 | 2709 | let c = toString(gN.originCaller) | |
2710 | - | let fm = | |
2711 | - | $Tuple2(((((fm._1 ++ | |
2712 | - | } | |
2713 | - | } | |
2714 | - | ||
2715 | - | ||
2716 | - | ||
2717 | - | @Callable(gN) | |
2718 | - | func flight ( | |
2719 | - | let | |
2710 | + | let fm = kx(c, eL, eC, my) | |
2711 | + | $Tuple2(((((fm._1 ++ lg(c, fraction(X, eL, cK))._1) :+ StringEntry(fm._2, makeString(fm._3, ":"))) :+ StringEntry(fm._4, makeString(fm._5, ":"))) ++ mm), fm._5[be]) | |
2712 | + | } | |
2713 | + | } | |
2714 | + | ||
2715 | + | ||
2716 | + | ||
2717 | + | @Callable(gN) | |
2718 | + | func flight (jQ,jR) = { | |
2719 | + | let mm = mj(gN) | |
2720 | 2720 | if ((size(gN.payments) != 0)) | |
2721 | 2721 | then throw("No payments required") | |
2722 | 2722 | else { | |
2723 | 2723 | let bQ = toString(gN.caller) | |
2724 | - | let | |
2725 | - | let | |
2726 | - | let B = | |
2727 | - | let | |
2728 | - | let | |
2729 | - | let | |
2730 | - | if (( | |
2724 | + | let iB = jP(bQ, jQ, jR) | |
2725 | + | let jV = iB._1 | |
2726 | + | let B = iB._2 | |
2727 | + | let mg = bO(B) | |
2728 | + | let kq = valueOrElse(getString(mg), aM) | |
2729 | + | let jX = iB._4 | |
2730 | + | if ((jX == kq)) | |
2731 | 2731 | then throw("You can't fly to the same location") | |
2732 | 2732 | else { | |
2733 | - | let cw = split( | |
2734 | - | let | |
2735 | - | let | |
2733 | + | let cw = split(jX, "_") | |
2734 | + | let mz = (cw[br] == "T") | |
2735 | + | let mA = (cw[br] == "D") | |
2736 | 2736 | let gA = G(B) | |
2737 | - | let | |
2738 | - | let | |
2739 | - | let | |
2740 | - | let | |
2741 | - | let | |
2742 | - | then if (!(cp( | |
2743 | - | then cu( | |
2744 | - | else if (( | |
2745 | - | then $Tuple2( | |
2746 | - | else $Tuple2( | |
2747 | - | else if (ch(dl, | |
2748 | - | then if (!(ch(dl, | |
2737 | + | let mB = valueOrElse(getString(gA), ",;,_,;,_,;,_,;,_,;,_,;,") | |
2738 | + | let mC = fn(mB, iB._5) | |
2739 | + | let mD = mC._1 | |
2740 | + | let mE = mC._2 | |
2741 | + | let mF = if (!(cr(dl, kq))) | |
2742 | + | then if (!(cp(jX))) | |
2743 | + | then cu(kq, jX, 5) | |
2744 | + | else if ((jV > 0)) | |
2745 | + | then $Tuple2(jX, jV) | |
2746 | + | else $Tuple2(kq, 0) | |
2747 | + | else if (ch(dl, kq)) | |
2748 | + | then if (!(ch(dl, jX))) | |
2749 | 2749 | then throw("Your duck is taking part in the tournament") | |
2750 | 2750 | else { | |
2751 | - | let | |
2752 | - | let | |
2751 | + | let lt = parseIntValue(cw[bs]) | |
2752 | + | let mG = split(kq, "_") | |
2753 | 2753 | let cj = valueOrElse(getInteger(dl, bU), 0) | |
2754 | - | if (( | |
2755 | - | then cu( | |
2756 | - | else if (( | |
2754 | + | if ((lt != (parseIntValue(mG[bs]) + 1))) | |
2755 | + | then cu(kq, jX, 7) | |
2756 | + | else if ((jV > 0)) | |
2757 | 2757 | then { | |
2758 | - | let | |
2759 | - | let | |
2760 | - | then invoke(dl, "saveDuckResult", [B, | |
2758 | + | let mH = valueOrElse(getInteger(dl, bY(cj, B)), 0) | |
2759 | + | let mI = if ((lt > mH)) | |
2760 | + | then invoke(dl, "saveDuckResult", [B, lt], nil) | |
2761 | 2761 | else unit | |
2762 | - | if (( | |
2763 | - | then $Tuple2( | |
2762 | + | if ((mI == mI)) | |
2763 | + | then $Tuple2(jX, jV) | |
2764 | 2764 | else throw("Strict value is not equal to itself.") | |
2765 | 2765 | } | |
2766 | - | else $Tuple2( | |
2766 | + | else $Tuple2(kq, 0) | |
2767 | 2767 | } | |
2768 | - | else if (!(cm( | |
2768 | + | else if (!(cm(kq))) | |
2769 | 2769 | then { | |
2770 | - | let | |
2770 | + | let mJ = dC(invoke(this, "autoExitDelivery", [B, jV, if (mA) | |
2771 | 2771 | then "10" | |
2772 | 2772 | else "11", 0], nil)) | |
2773 | - | if (( | |
2774 | - | then if ( | |
2775 | - | then $Tuple2( | |
2776 | - | else if (( | |
2777 | - | then $Tuple2( | |
2778 | - | else $Tuple2( | |
2773 | + | if ((mJ == mJ)) | |
2774 | + | then if (mA) | |
2775 | + | then $Tuple2(mJ, jV) | |
2776 | + | else if ((jV > 0)) | |
2777 | + | then $Tuple2(jX, jV) | |
2778 | + | else $Tuple2(mJ, 0) | |
2779 | 2779 | else throw("Strict value is not equal to itself.") | |
2780 | 2780 | } | |
2781 | - | else if (!( | |
2781 | + | else if (!(mA)) | |
2782 | 2782 | then throw("Your duck is taking part in delivery") | |
2783 | - | else if (!(cm( | |
2784 | - | then cu( | |
2783 | + | else if (!(cm(jX))) | |
2784 | + | then cu(kq, jX, 13) | |
2785 | 2785 | else { | |
2786 | - | let | |
2787 | - | let | |
2788 | - | if (( | |
2789 | - | then cu( | |
2790 | - | else if (if (( | |
2791 | - | then (1 > | |
2786 | + | let lt = parseIntValue(cw[bs]) | |
2787 | + | let mG = split(kq, "_") | |
2788 | + | if ((lt != (parseIntValue(mG[bs]) + 1))) | |
2789 | + | then cu(kq, jX, 14) | |
2790 | + | else if (if ((jV > 0)) | |
2791 | + | then (1 > lt) | |
2792 | 2792 | else false) | |
2793 | - | then $Tuple2( | |
2793 | + | then $Tuple2(jX, jV) | |
2794 | 2794 | else { | |
2795 | - | let | |
2796 | - | if (( | |
2797 | - | then $Tuple2( | |
2795 | + | let mJ = dC(invoke(this, "autoExitDelivery", [B, jV, "15-17", lt], nil)) | |
2796 | + | if ((mJ == mJ)) | |
2797 | + | then $Tuple2(mJ, jV) | |
2798 | 2798 | else throw("Strict value is not equal to itself.") | |
2799 | 2799 | } | |
2800 | 2800 | } | |
2801 | - | let | |
2802 | - | let | |
2803 | - | $Tuple2(((([StringEntry( | |
2801 | + | let mK = mF._1 | |
2802 | + | let mL = mF._2 | |
2803 | + | $Tuple2(((([StringEntry(mg, mK), StringEntry(gA, mD), IntegerEntry(A(B), mL)] ++ mm) ++ (if (mE) | |
2804 | 2804 | then [StringEntry(M(B), "0_0_0_0_0")] | |
2805 | - | else nil)) ++ | |
2805 | + | else nil)) ++ lf(B, if ((jV > 0)) | |
2806 | 2806 | then Y | |
2807 | - | else Z)._1), | |
2807 | + | else Z)._1), iB._3) | |
2808 | 2808 | } | |
2809 | 2809 | } | |
2810 | 2810 | } | |
2812 | 2812 | ||
2813 | 2813 | ||
2814 | 2814 | @Callable(gN) | |
2815 | - | func heal (mL,mM,mN) = { | |
2816 | - | let ml = mh(gN) | |
2817 | - | if (if (if ((0 > mL)) | |
2818 | - | then true | |
2819 | - | else (0 > mM)) | |
2815 | + | func heal (mM,mN,mO) = { | |
2816 | + | let mm = mi(gN) | |
2817 | + | if (if (if ((0 > mM)) | |
2820 | 2818 | then true | |
2821 | 2819 | else (0 > mN)) | |
2820 | + | then true | |
2821 | + | else (0 > mO)) | |
2822 | 2822 | then throw("Quantity cannot be negative") | |
2823 | 2823 | else { | |
2824 | 2824 | let B = valueOrErrorMessage(getString(bM(toString(gN.caller))), "You don't have a duck staked") | |
2825 | - | if ( | |
2825 | + | if (lq(B)) | |
2826 | 2826 | then throw("heal_checkTournament") | |
2827 | - | else if ( | |
2827 | + | else if (lr(B)) | |
2828 | 2828 | then throw("heal_checkDelivery") | |
2829 | 2829 | else { | |
2830 | - | let | |
2831 | - | let | |
2832 | - | let | |
2833 | - | let | |
2834 | - | if (( | |
2835 | - | then throw((("HP should be < " + toString( | |
2830 | + | let mP = [mM, mN, mO] | |
2831 | + | let kb = A(B) | |
2832 | + | let kc = aj(valueOrElse(getInteger(E(B)), 0)) | |
2833 | + | let mQ = valueOrElse(getInteger(kb), kc) | |
2834 | + | if ((mQ >= kc)) | |
2835 | + | then throw((("HP should be < " + toString(kc)) + " to heal")) | |
2836 | 2836 | else { | |
2837 | - | let | |
2838 | - | let | |
2839 | - | let | |
2837 | + | let iL = bN(B) | |
2838 | + | let jo = iK(iL) | |
2839 | + | let mR = if ((jo[bp] == "")) | |
2840 | 2840 | then nil | |
2841 | - | else split_4C( | |
2842 | - | func | |
2841 | + | else split_4C(jo[bp], "_") | |
2842 | + | func mS (eU,ct) = { | |
2843 | 2843 | let dG = eU._2 | |
2844 | - | let hj = if ((size( | |
2845 | - | then parseIntValue( | |
2844 | + | let hj = if ((size(mR) > dG)) | |
2845 | + | then parseIntValue(mR[dG]) | |
2846 | 2846 | else 0 | |
2847 | 2847 | if ((3 > dG)) | |
2848 | 2848 | then { | |
2849 | - | let | |
2850 | - | if (( | |
2849 | + | let mT = mP[dG] | |
2850 | + | if ((mT > hj)) | |
2851 | 2851 | then throw(((("You have only " + toString(hj)) + " of ") + aT[dG])) | |
2852 | - | else $Tuple3((eU._1 :+ toString((hj - | |
2852 | + | else $Tuple3((eU._1 :+ toString((hj - mT))), (dG + 1), (eU._3 + (parseIntValue(split(ct, "_")[aZ]) * mT))) | |
2853 | 2853 | } | |
2854 | 2854 | else $Tuple3((eU._1 :+ toString(hj)), (dG + 1), eU._3) | |
2855 | 2855 | } | |
2860 | 2860 | let eY = $Tuple3(nil, 0, 0) | |
2861 | 2861 | func eZ (fa,fb) = if ((fb >= eX)) | |
2862 | 2862 | then fa | |
2863 | - | else | |
2863 | + | else mS(fa, eW[fb]) | |
2864 | 2864 | ||
2865 | 2865 | func fc (fa,fb) = if ((fb >= eX)) | |
2866 | 2866 | then fa | |
2868 | 2868 | ||
2869 | 2869 | fc(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eY, 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) | |
2870 | 2870 | } | |
2871 | - | let | |
2872 | - | $Tuple2((([IntegerEntry( | |
2871 | + | let mU = min([kc, (mQ + fm._3)]) | |
2872 | + | $Tuple2((([IntegerEntry(kb, mU), StringEntry(iL, makeString_2C([jo[bm], jo[bn], jo[bo], makeString(fm._1, "_")], ":"))] ++ mm) ++ lf(B, (ag * ((mM + mN) + mO)))._1), mU) | |
2873 | 2873 | } | |
2874 | 2874 | } | |
2875 | 2875 | } | |
2879 | 2879 | ||
2880 | 2880 | @Callable(gN) | |
2881 | 2881 | func healES () = { | |
2882 | - | let | |
2882 | + | let mm = mi(gN) | |
2883 | 2883 | if ((size(gN.payments) != 1)) | |
2884 | 2884 | then throw("Exactly one payment required") | |
2885 | 2885 | else { | |
2886 | - | let | |
2887 | - | if (( | |
2886 | + | let mn = value(gN.payments[0]) | |
2887 | + | if ((mn.assetId != cC)) | |
2888 | 2888 | then throw("Allowed USDT payment only!") | |
2889 | 2889 | else { | |
2890 | 2890 | let B = valueOrErrorMessage(getString(bM(toString(gN.caller))), "You don't have a duck staked") | |
2891 | - | if ( | |
2891 | + | if (lq(B)) | |
2892 | 2892 | then throw("healES_checkTournament") | |
2893 | - | else if ( | |
2893 | + | else if (lr(B)) | |
2894 | 2894 | then throw("healES_checkDelivery") | |
2895 | 2895 | else { | |
2896 | - | let | |
2897 | - | let | |
2898 | - | let | |
2899 | - | if (( | |
2896 | + | let kb = A(B) | |
2897 | + | let kc = aj(valueOrElse(getInteger(E(B)), 0)) | |
2898 | + | let mQ = valueOrElse(getInteger(kb), kc) | |
2899 | + | if ((mQ > 0)) | |
2900 | 2900 | then throw("HP should be 0 to call Emergency Service") | |
2901 | 2901 | else { | |
2902 | - | let | |
2903 | - | let | |
2904 | - | let | |
2902 | + | let iL = bN(B) | |
2903 | + | let jo = iK(iL) | |
2904 | + | let mR = if ((jo[bp] == "")) | |
2905 | 2905 | then nil | |
2906 | - | else split_4C( | |
2907 | - | let | |
2908 | - | then parseIntValue( | |
2906 | + | else split_4C(jo[bp], "_") | |
2907 | + | let mV = if ((size(mR) > 0)) | |
2908 | + | then parseIntValue(mR[0]) | |
2909 | 2909 | else 0 | |
2910 | - | let | |
2911 | - | then parseIntValue( | |
2910 | + | let mW = if ((size(mR) > 1)) | |
2911 | + | then parseIntValue(mR[1]) | |
2912 | 2912 | else 0 | |
2913 | - | let | |
2914 | - | then parseIntValue( | |
2913 | + | let mX = if ((size(mR) > 2)) | |
2914 | + | then parseIntValue(mR[2]) | |
2915 | 2915 | else 0 | |
2916 | - | if (if (if ((mU > 0)) | |
2917 | - | then true | |
2918 | - | else (mV > 0)) | |
2916 | + | if (if (if ((mV > 0)) | |
2919 | 2917 | then true | |
2920 | 2918 | else (mW > 0)) | |
2919 | + | then true | |
2920 | + | else (mX > 0)) | |
2921 | 2921 | then throw("You have to use own Medical Kit") | |
2922 | 2922 | else { | |
2923 | - | let | |
2924 | - | let | |
2925 | - | then split_4C(value( | |
2923 | + | let mY = getString(di, bR()) | |
2924 | + | let mZ = if (isDefined(mY)) | |
2925 | + | then split_4C(value(mY), "_") | |
2926 | 2926 | else nil | |
2927 | - | let | |
2928 | - | then parseIntValue( | |
2927 | + | let na = if ((size(mZ) > 0)) | |
2928 | + | then parseIntValue(mZ[0]) | |
2929 | 2929 | else 0 | |
2930 | - | if ((0 >= | |
2930 | + | if ((0 >= na)) | |
2931 | 2931 | then throw("There are no Medical Kits L1 at Emergency Service storage") | |
2932 | 2932 | else { | |
2933 | - | let | |
2934 | - | let | |
2933 | + | let mU = (mQ + parseIntValue(split(aX[0], "_")[aZ])) | |
2934 | + | let nb = makeString([toString((na - 1)), removeByIndex(mZ, 0)], "_") | |
2935 | 2935 | let ct = split(aX[0], "_") | |
2936 | - | let | |
2937 | - | let | |
2938 | - | if (( | |
2939 | - | then throw(("Payment attached should be " + toString( | |
2936 | + | let nc = cs(ct) | |
2937 | + | let nd = fraction((nc * aO), aN, (cK * bc)) | |
2938 | + | if ((mn.amount != nd)) | |
2939 | + | then throw(("Payment attached should be " + toString(nd))) | |
2940 | 2940 | else { | |
2941 | - | let fm = dC(invoke(di, "updateEsStorage", [ | |
2942 | - | $Tuple2((( | |
2941 | + | let fm = dC(invoke(di, "updateEsStorage", [nb], [AttachedPayment(cC, nd)])) | |
2942 | + | $Tuple2(((mm :+ IntegerEntry(kb, mU)) ++ lf(B, aa)._1), fm) | |
2943 | 2943 | } | |
2944 | 2944 | } | |
2945 | 2945 | } | |
2952 | 2952 | ||
2953 | 2953 | ||
2954 | 2954 | @Callable(gN) | |
2955 | - | func updateBackpack (B, | |
2955 | + | func updateBackpack (B,ne) = if ((gN.caller != di)) | |
2956 | 2956 | then throw("permission denied") | |
2957 | - | else $Tuple2([StringEntry(bN(B), | |
2957 | + | else $Tuple2([StringEntry(bN(B), ne)], ne) | |
2958 | 2958 | ||
2959 | 2959 | ||
2960 | 2960 | ||
2961 | 2961 | @Callable(gN) | |
2962 | 2962 | func commitForRandom () = { | |
2963 | - | let | |
2964 | - | let | |
2963 | + | let mm = mi(gN) | |
2964 | + | let nf = (height + dv) | |
2965 | 2965 | let c = toString(gN.caller) | |
2966 | - | $Tuple2(([IntegerEntry(dw(c), | |
2966 | + | $Tuple2(([IntegerEntry(dw(c), nf)] ++ mm), nf) | |
2967 | 2967 | } | |
2968 | 2968 | ||
2969 | 2969 | ||
2970 | 2970 | ||
2971 | 2971 | @Callable(gN) | |
2972 | 2972 | func buySLand () = { | |
2973 | - | let | |
2973 | + | let mm = mi(gN) | |
2974 | 2974 | if ((size(gN.payments) != 1)) | |
2975 | 2975 | then throw("Exactly one payment required") | |
2976 | 2976 | else { | |
2977 | - | let | |
2978 | - | if (( | |
2977 | + | let mn = value(gN.payments[0]) | |
2978 | + | if ((mn.assetId != cC)) | |
2979 | 2979 | then throw("Allowed USDT payment only!") | |
2980 | - | else if (( | |
2980 | + | else if ((mn.amount != ej)) | |
2981 | 2981 | then throw(("Payment attached should be " + toString(ej))) | |
2982 | 2982 | else { | |
2983 | - | let fm = | |
2984 | - | let | |
2985 | - | $Tuple2((((fm._1 :+ ScriptTransfer(di, | |
2983 | + | let fm = jI(gN.caller, gN.transactionId) | |
2984 | + | let ng = dF(invoke(dm, "burnAcres", [ek], nil)) | |
2985 | + | $Tuple2((((fm._1 :+ ScriptTransfer(di, mn.amount, cC)) ++ lg(toString(gN.caller), ac)._1) ++ mm), $Tuple2(fm._2._1, ng)) | |
2986 | 2986 | } | |
2987 | 2987 | } | |
2988 | 2988 | } | |
2990 | 2990 | ||
2991 | 2991 | ||
2992 | 2992 | @Callable(gN) | |
2993 | - | func expedition ( | |
2994 | - | let | |
2993 | + | func expedition (jQ,jR) = { | |
2994 | + | let mm = mi(gN) | |
2995 | 2995 | if ((size(gN.payments) != 0)) | |
2996 | 2996 | then throw("No payments required") | |
2997 | 2997 | else { | |
2998 | 2998 | let bQ = toString(gN.caller) | |
2999 | - | let | |
3000 | - | let B = | |
3001 | - | let | |
3002 | - | let | |
3003 | - | let | |
3004 | - | let | |
3005 | - | let | |
2999 | + | let iB = jP(bQ, jQ, jR) | |
3000 | + | let B = iB._2 | |
3001 | + | let kb = A(B) | |
3002 | + | let iL = bN(B) | |
3003 | + | let jo = iK(iL) | |
3004 | + | let kQ = split(jo[bo], "_") | |
3005 | + | let kS = makeString(fg(true, kQ, ei), "_") | |
3006 | 3006 | let gA = G(B) | |
3007 | - | let | |
3008 | - | let | |
3009 | - | let | |
3010 | - | let | |
3011 | - | let | |
3012 | - | let | |
3013 | - | let fm = if ((0 >= | |
3014 | - | then $Tuple3([IntegerEntry( | |
3015 | - | else $Tuple3(( | |
3007 | + | let mB = valueOrElse(getString(gA), ",;,_,;,_,;,_,;,_,;,_,;,") | |
3008 | + | let nh = fn(mB, iB._5) | |
3009 | + | let mD = nh._1 | |
3010 | + | let mE = nh._2 | |
3011 | + | let ni = jI(gN.caller, gN.transactionId) | |
3012 | + | let jO = ni._2._1 | |
3013 | + | let fm = if ((0 >= iB._1)) | |
3014 | + | then $Tuple3([IntegerEntry(kb, 0), StringEntry(gA, mD)], "", 0) | |
3015 | + | else $Tuple3((ni._1 ++ (if (mE) | |
3016 | 3016 | then [StringEntry(M(B), "0_0_0_0_0")] | |
3017 | - | else ((((nil :+ StringEntry(bO(B), makeString([ | |
3018 | - | if ( | |
3017 | + | else ((((nil :+ StringEntry(bO(B), makeString([ni._2._2, "L", jO], "_"))) :+ IntegerEntry(kb, iB._1)) :+ StringEntry(gA, mD)) :+ StringEntry(iL, makeString([jo[bm], jo[bn], kS, jo[bp]], ":"))))), jO, iB._3) | |
3018 | + | if (lq(B)) | |
3019 | 3019 | then throw("expedition_checkTournament") | |
3020 | - | else if ( | |
3020 | + | else if (lr(B)) | |
3021 | 3021 | then throw("expedition_checkDelivery") | |
3022 | 3022 | else { | |
3023 | - | let | |
3024 | - | $Tuple2(((fm._1 ++ | |
3023 | + | let ng = dF(invoke(dm, "burnAcres", [ek], nil)) | |
3024 | + | $Tuple2(((fm._1 ++ lf(B, ac)._1) ++ mm), $Tuple3(fm._2, fm._3, ng)) | |
3025 | 3025 | } | |
3026 | 3026 | } | |
3027 | 3027 | } | |
3030 | 3030 | ||
3031 | 3031 | @Callable(gN) | |
3032 | 3032 | func buySLandForAcres () = { | |
3033 | - | let | |
3033 | + | let mm = mi(gN) | |
3034 | 3034 | if ((size(gN.payments) != 1)) | |
3035 | 3035 | then throw("exactly 1 payment must be attached") | |
3036 | 3036 | else { | |
3037 | - | let | |
3038 | - | let ft = | |
3039 | - | if (if (!(isDefined( | |
3037 | + | let mn = gN.payments[0] | |
3038 | + | let ft = mn.amount | |
3039 | + | if (if (!(isDefined(mn.assetId))) | |
3040 | 3040 | then true | |
3041 | - | else (value( | |
3041 | + | else (value(mn.assetId) != du)) | |
3042 | 3042 | then throw("ACRES payments only!") | |
3043 | 3043 | else if ((ft != ek)) | |
3044 | 3044 | then throw(("Payment attached should be " + toString(ek))) | |
3045 | 3045 | else { | |
3046 | - | let fm = | |
3047 | - | let | |
3048 | - | $Tuple2(((fm._1 ++ | |
3046 | + | let fm = jI(gN.caller, gN.transactionId) | |
3047 | + | let ng = dF(invoke(dm, "burnAcres", [ek], [AttachedPayment(du, ft)])) | |
3048 | + | $Tuple2(((fm._1 ++ lg(toString(gN.caller), ac)._1) ++ mm), $Tuple2(fm._2._1, ng)) | |
3049 | 3049 | } | |
3050 | 3050 | } | |
3051 | 3051 | } | |
3054 | 3054 | ||
3055 | 3055 | @Callable(gN) | |
3056 | 3056 | func upgradeInfra (Q) = { | |
3057 | - | let | |
3057 | + | let mm = mi(gN) | |
3058 | 3058 | if ((size(gN.payments) != 0)) | |
3059 | 3059 | then throw("No payments required") | |
3060 | 3060 | else { | |
3061 | - | let fm = | |
3061 | + | let fm = kK(true, gN.caller, 0, Q) | |
3062 | 3062 | let B = valueOrErrorMessage(getString(bM(toString(gN.caller))), "You don't have a duck staked") | |
3063 | - | $Tuple2(((fm._1 ++ | |
3064 | - | } | |
3065 | - | } | |
3066 | - | ||
3067 | - | ||
3068 | - | ||
3069 | - | @Callable(gN) | |
3070 | - | func activateArtifact ( | |
3071 | - | let | |
3063 | + | $Tuple2(((fm._1 ++ mm) ++ lf(B, fraction(ad, fm._3, cK))._1), fm._2) | |
3064 | + | } | |
3065 | + | } | |
3066 | + | ||
3067 | + | ||
3068 | + | ||
3069 | + | @Callable(gN) | |
3070 | + | func activateArtifact (nj,nk) = { | |
3071 | + | let mm = mi(gN) | |
3072 | 3072 | if ((size(gN.payments) != 0)) | |
3073 | 3073 | then throw("No payments required") | |
3074 | 3074 | else { | |
3075 | 3075 | let c = toString(gN.caller) | |
3076 | 3076 | let fm = { | |
3077 | - | let cD = | |
3077 | + | let cD = nj | |
3078 | 3078 | if (("PRESALE" == cD)) | |
3079 | - | then | |
3079 | + | then lo(c, nk) | |
3080 | 3080 | else if (("ONBOARD" == cD)) | |
3081 | - | then | |
3081 | + | then lh(c) | |
3082 | 3082 | else throw("Unknown artifact") | |
3083 | 3083 | } | |
3084 | - | (fm ++ | |
3085 | - | } | |
3086 | - | } | |
3087 | - | ||
3088 | - | ||
3089 | - | ||
3090 | - | @Callable(gN) | |
3091 | - | func mergeLands ( | |
3092 | - | let | |
3084 | + | (fm ++ mm) | |
3085 | + | } | |
3086 | + | } | |
3087 | + | ||
3088 | + | ||
3089 | + | ||
3090 | + | @Callable(gN) | |
3091 | + | func mergeLands (lF) = { | |
3092 | + | let mm = mi(gN) | |
3093 | 3093 | if ((size(gN.payments) != 0)) | |
3094 | 3094 | then throw("No payments required") | |
3095 | 3095 | else { | |
3096 | - | let fm = | |
3097 | - | $Tuple2(((fm._1 ++ | |
3098 | - | } | |
3099 | - | } | |
3100 | - | ||
3101 | - | ||
3102 | - | ||
3103 | - | @Callable(gN) | |
3104 | - | func cargoExchange ( | |
3105 | - | let | |
3096 | + | let fm = md(toString(gN.caller), lF) | |
3097 | + | $Tuple2(((fm._1 ++ mm) ++ lg(toString(gN.caller), ae)._1), fm._2) | |
3098 | + | } | |
3099 | + | } | |
3100 | + | ||
3101 | + | ||
3102 | + | ||
3103 | + | @Callable(gN) | |
3104 | + | func cargoExchange (nl,Q) = { | |
3105 | + | let mm = mi(gN) | |
3106 | 3106 | if ((size(gN.payments) != 0)) | |
3107 | 3107 | then throw("No payments required") | |
3108 | 3108 | else { | |
3109 | - | let | |
3109 | + | let jn = split_4C(nl, ":") | |
3110 | 3110 | let c = toString(gN.originCaller) | |
3111 | - | let | |
3112 | - | let | |
3113 | - | if (!(isDefined(getInteger( | |
3114 | - | then throw(( | |
3111 | + | let ks = value(assetInfo(fromBase58String(Q))) | |
3112 | + | let kt = bw(Q) | |
3113 | + | if (!(isDefined(getInteger(kt)))) | |
3114 | + | then throw((ks.name + " is not staked")) | |
3115 | 3115 | else { | |
3116 | - | let | |
3117 | - | if (( | |
3116 | + | let kv = valueOrErrorMessage(getString(bt(Q)), (("NFT " + ks.name) + " is orphaned")) | |
3117 | + | if ((kv != c)) | |
3118 | 3118 | then throw((aF + " is not yours")) | |
3119 | 3119 | else { | |
3120 | - | let | |
3121 | - | let | |
3120 | + | let iZ = (dK(split(ks.description, "_")[do]) / cL) | |
3121 | + | let ja = valueOrElse(getInteger(bD(Q)), 0) | |
3122 | 3122 | let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked") | |
3123 | - | let | |
3124 | - | let ck = split(value( | |
3123 | + | let kq = valueOrElse(getString(bO(B)), aM) | |
3124 | + | let ck = split(value(kq), "_") | |
3125 | 3125 | if ((ck[br] != "L")) | |
3126 | 3126 | then throw((("Duck location type is " + ck[br]) + ", but should be L")) | |
3127 | 3127 | else if ((ck[bs] != Q)) | |
3128 | 3128 | then throw(("Duck should be on the land " + Q)) | |
3129 | 3129 | else { | |
3130 | - | let | |
3131 | - | let | |
3132 | - | let | |
3133 | - | let | |
3134 | - | let fm = | |
3135 | - | let | |
3136 | - | let | |
3137 | - | let | |
3138 | - | ([StringEntry( | |
3130 | + | let iY = bC(Q) | |
3131 | + | let iP = iX(iY, iZ, ja) | |
3132 | + | let iL = bN(B) | |
3133 | + | let jo = iK(iL) | |
3134 | + | let fm = jm(jn, iP, jo) | |
3135 | + | let jg = split(iP[bh], "_") | |
3136 | + | let kH = (parseIntValue(jg[bj]) + fm._7) | |
3137 | + | let kI = (parseIntValue(jg[bk]) - fm._7) | |
3138 | + | ([StringEntry(iL, makeString_2C([jo[bm], fm._4, fm._5, fm._6], ":")), StringEntry(iY, makeString_2C([iP[bd], fm._1, fm._2, fm._3, makeString([jg[bi], toString(kH), toString(kI), jg[bl]], "_")], ":"))] ++ mm) | |
3139 | 3139 | } | |
3140 | 3140 | } | |
3141 | 3141 | } | |
3145 | 3145 | ||
3146 | 3146 | ||
3147 | 3147 | @Callable(gN) | |
3148 | - | func saveWarehouse ( | |
3148 | + | func saveWarehouse (jc,Q) = if ((gN.caller != di)) | |
3149 | 3149 | then throw("Access denied") | |
3150 | 3150 | else { | |
3151 | - | let | |
3152 | - | let | |
3153 | - | if ((size( | |
3151 | + | let iY = bC(Q) | |
3152 | + | let jd = split_4C(jc, ":") | |
3153 | + | if ((size(jd) != 5)) | |
3154 | 3154 | then throw("warehouse string should contain 4 ':' separators") | |
3155 | 3155 | else { | |
3156 | - | let | |
3157 | - | let | |
3158 | - | let | |
3159 | - | let | |
3160 | - | if ((0 > | |
3156 | + | let nm = split(jd[bh], "_")[bi] | |
3157 | + | let kH = iO(jd) | |
3158 | + | let nn = iM(jd[bd]) | |
3159 | + | let kI = ((nn - parseIntValue(nm)) - kH) | |
3160 | + | if ((0 > kI)) | |
3161 | 3161 | then throw("Operation leads to negative free warehouse space") | |
3162 | 3162 | else { | |
3163 | - | let | |
3164 | - | $Tuple2([StringEntry( | |
3163 | + | let no = makeString_2C([jd[bd], jd[be], jd[bf], jd[bg], makeString([nm, toString(kH), toString(kI), toString(nn)], "_")], ":") | |
3164 | + | $Tuple2([StringEntry(iY, no)], no) | |
3165 | 3165 | } | |
3166 | 3166 | } | |
3167 | 3167 | } | |
3169 | 3169 | ||
3170 | 3170 | ||
3171 | 3171 | @Callable(gN) | |
3172 | - | func setCustomName (bu, | |
3173 | - | let | |
3172 | + | func setCustomName (bu,lP,by) = { | |
3173 | + | let mm = mi(gN) | |
3174 | 3174 | if ((size(gN.payments) != 1)) | |
3175 | 3175 | then throw("Exactly one payment required") | |
3176 | 3176 | else { | |
3177 | - | let | |
3178 | - | if (( | |
3177 | + | let mn = value(gN.payments[0]) | |
3178 | + | if ((mn.assetId != cC)) | |
3179 | 3179 | then throw("Allowed USDT payment only!") | |
3180 | - | else if (( | |
3180 | + | else if ((mn.amount != ef)) | |
3181 | 3181 | then throw(("Payment should be " + toString(ef))) | |
3182 | - | else if (contains( | |
3183 | - | then throw(("Name should not contain '__': " + | |
3184 | - | else if ((size( | |
3182 | + | else if (contains(lP, "__")) | |
3183 | + | then throw(("Name should not contain '__': " + lP)) | |
3184 | + | else if ((size(lP) > eg)) | |
3185 | 3185 | then throw(("Name too long, maxLength=" + toString(eg))) | |
3186 | 3186 | else { | |
3187 | 3187 | let c = toString(gN.originCaller) | |
3188 | - | let | |
3188 | + | let np = { | |
3189 | 3189 | let cD = by | |
3190 | 3190 | if (("ACCOUNT" == cD)) | |
3191 | 3191 | then { | |
3192 | - | let | |
3193 | - | let | |
3194 | - | if (isDefined( | |
3195 | - | then throw(("Name already registered: " + | |
3192 | + | let nq = eA(lP) | |
3193 | + | let nr = getString(nq) | |
3194 | + | if (isDefined(nr)) | |
3195 | + | then throw(("Name already registered: " + lP)) | |
3196 | 3196 | else { | |
3197 | - | let | |
3198 | - | let | |
3199 | - | let | |
3200 | - | then [DeleteEntry(eA(value( | |
3197 | + | let ns = bG(c) | |
3198 | + | let nt = getString(ns) | |
3199 | + | let nu = if (isDefined(nt)) | |
3200 | + | then [DeleteEntry(eA(value(nt)))] | |
3201 | 3201 | else nil | |
3202 | - | ((( | |
3202 | + | (((nu :+ StringEntry(ns, lP)) :+ StringEntry(nq, c)) ++ lg(c, ab)._1) | |
3203 | 3203 | } | |
3204 | 3204 | } | |
3205 | 3205 | else if (("LAND" == cD)) | |
3206 | 3206 | then { | |
3207 | - | let | |
3208 | - | let | |
3209 | - | if (!(isDefined(getInteger( | |
3210 | - | then throw(( | |
3207 | + | let ks = value(assetInfo(fromBase58String(bu))) | |
3208 | + | let kt = bw(bu) | |
3209 | + | if (!(isDefined(getInteger(kt)))) | |
3210 | + | then throw((ks.name + " is not staked")) | |
3211 | 3211 | else { | |
3212 | - | let | |
3213 | - | if (( | |
3212 | + | let kv = valueOrErrorMessage(getString(bt(bu)), (("NFT " + ks.name) + " is orphaned")) | |
3213 | + | if ((kv != c)) | |
3214 | 3214 | then throw((aF + " is not yours")) | |
3215 | 3215 | else { | |
3216 | - | let | |
3217 | - | let | |
3218 | - | if (isDefined( | |
3219 | - | then throw(("Name already registered: " + | |
3216 | + | let nq = et(lP) | |
3217 | + | let nr = getString(nq) | |
3218 | + | if (isDefined(nr)) | |
3219 | + | then throw(("Name already registered: " + lP)) | |
3220 | 3220 | else { | |
3221 | - | let | |
3222 | - | let | |
3223 | - | let | |
3224 | - | then [DeleteEntry(et(value( | |
3221 | + | let nv = bv(bu) | |
3222 | + | let nt = getString(nv) | |
3223 | + | let nu = if (isDefined(nt)) | |
3224 | + | then [DeleteEntry(et(value(nt)))] | |
3225 | 3225 | else nil | |
3226 | - | ((( | |
3226 | + | (((nu :+ StringEntry(nv, lP)) :+ StringEntry(nq, bu)) ++ lg(c, ab)._1) | |
3227 | 3227 | } | |
3228 | 3228 | } | |
3229 | 3229 | } | |
3230 | 3230 | } | |
3231 | 3231 | else if (("DUCK" == cD)) | |
3232 | 3232 | then { | |
3233 | - | let | |
3234 | - | let | |
3235 | - | if (if (!(isDefined(getInteger( | |
3233 | + | let ks = value(assetInfo(fromBase58String(bu))) | |
3234 | + | let kt = bw(bu) | |
3235 | + | if (if (!(isDefined(getInteger(kt)))) | |
3236 | 3236 | then true | |
3237 | 3237 | else !(isDefined(getString(bM(c))))) | |
3238 | - | then throw(( | |
3238 | + | then throw((ks.name + " is not staked")) | |
3239 | 3239 | else { | |
3240 | - | let | |
3241 | - | if (( | |
3240 | + | let kv = valueOrErrorMessage(getString(bL(bu)), (("NFT " + ks.name) + " is orphaned")) | |
3241 | + | if ((kv != c)) | |
3242 | 3242 | then throw((aG + " is not yours")) | |
3243 | 3243 | else { | |
3244 | - | let | |
3245 | - | let | |
3246 | - | if (isDefined( | |
3247 | - | then throw(("Name already registered: " + | |
3244 | + | let nq = ez(lP) | |
3245 | + | let nr = getString(nq) | |
3246 | + | if (isDefined(nr)) | |
3247 | + | then throw(("Name already registered: " + lP)) | |
3248 | 3248 | else { | |
3249 | - | let | |
3250 | - | let | |
3251 | - | let | |
3252 | - | then [DeleteEntry(ez(value( | |
3249 | + | let nv = bF(bu) | |
3250 | + | let nt = getString(nv) | |
3251 | + | let nu = if (isDefined(nt)) | |
3252 | + | then [DeleteEntry(ez(value(nt)))] | |
3253 | 3253 | else nil | |
3254 | - | ((( | |
3254 | + | (((nu :+ StringEntry(nv, lP)) :+ StringEntry(nq, bu)) ++ lf(bu, ab)._1) | |
3255 | 3255 | } | |
3256 | 3256 | } | |
3257 | 3257 | } | |
3258 | 3258 | } | |
3259 | 3259 | else throw("Unknown entity type") | |
3260 | 3260 | } | |
3261 | - | $Tuple2((( | |
3261 | + | $Tuple2(((np :+ ScriptTransfer(di, mn.amount, cC)) ++ mm), 0) | |
3262 | 3262 | } | |
3263 | 3263 | } | |
3264 | 3264 | } | |
3266 | 3266 | ||
3267 | 3267 | ||
3268 | 3268 | @Callable(gN) | |
3269 | - | func setReferrals ( | |
3269 | + | func setReferrals (nw,nx) = if ((gN.callerPublicKey != ec)) | |
3270 | 3270 | then throw("Permission denied") | |
3271 | 3271 | else { | |
3272 | - | let | |
3272 | + | let mm = mi(gN) | |
3273 | 3273 | if ((size(gN.payments) != 0)) | |
3274 | 3274 | then throw("No payments required") | |
3275 | - | else if (!(isDefined(addressFromString( | |
3276 | - | then throw(("Invalid address: " + | |
3277 | - | else if (!(isDefined(addressFromString( | |
3278 | - | then throw(("Invalid address: " + | |
3275 | + | else if (!(isDefined(addressFromString(nw)))) | |
3276 | + | then throw(("Invalid address: " + nw)) | |
3277 | + | else if (!(isDefined(addressFromString(nx)))) | |
3278 | + | then throw(("Invalid address: " + nx)) | |
3279 | 3279 | else { | |
3280 | - | let | |
3281 | - | let | |
3282 | - | let | |
3283 | - | then split_4C(value( | |
3280 | + | let ny = eB() | |
3281 | + | let nz = getString(ny) | |
3282 | + | let nA = if (isDefined(nz)) | |
3283 | + | then split_4C(value(nz), "_") | |
3284 | 3284 | else nil | |
3285 | - | if (containsElement( | |
3286 | - | then throw(( | |
3285 | + | if (containsElement(nA, nx)) | |
3286 | + | then throw((nx + " is not newbie (already has referrals)")) | |
3287 | 3287 | else { | |
3288 | - | let | |
3289 | - | let | |
3290 | - | if (if (isDefined( | |
3291 | - | then isDefined(addressFromString(value( | |
3288 | + | let li = bH(nx) | |
3289 | + | let lj = getString(li) | |
3290 | + | if (if (isDefined(lj)) | |
3291 | + | then isDefined(addressFromString(value(lj))) | |
3292 | 3292 | else false) | |
3293 | - | then throw((( | |
3293 | + | then throw(((nx + " already has refBy: ") + value(lj))) | |
3294 | 3294 | else { | |
3295 | - | let | |
3296 | - | let | |
3297 | - | let | |
3298 | - | then split_4C(value( | |
3295 | + | let nB = bK(nw) | |
3296 | + | let nC = getString(nB) | |
3297 | + | let nD = if (isDefined(nC)) | |
3298 | + | then split_4C(value(nC), "_") | |
3299 | 3299 | else nil | |
3300 | - | if (containsElement( | |
3301 | - | then throw(((( | |
3300 | + | if (containsElement(nD, nx)) | |
3301 | + | then throw((((nw + " already contains ") + nx) + " within referrals")) | |
3302 | 3302 | else { | |
3303 | - | let | |
3304 | - | let | |
3305 | - | then value( | |
3306 | - | else makeString_2C(( | |
3307 | - | $Tuple2(([StringEntry( | |
3303 | + | let nE = makeString_2C((nD :+ nx), "_") | |
3304 | + | let nF = if (containsElement(nA, nw)) | |
3305 | + | then value(nz) | |
3306 | + | else makeString_2C((nA :+ nw), "_") | |
3307 | + | $Tuple2(([StringEntry(li, nw), StringEntry(nB, nE), StringEntry(ny, nF)] ++ mm), 0) | |
3308 | 3308 | } | |
3309 | 3309 | } | |
3310 | 3310 | } | |
3314 | 3314 | ||
3315 | 3315 | ||
3316 | 3316 | @Callable(gN) | |
3317 | - | func distributePoints ( | |
3318 | - | let | |
3317 | + | func distributePoints (nG,nH,nI,nJ,nK) = { | |
3318 | + | let mm = mi(gN) | |
3319 | 3319 | if ((size(gN.payments) != 0)) | |
3320 | 3320 | then throw("No payments required") | |
3321 | 3321 | else { | |
3322 | 3322 | let c = toString(gN.originCaller) | |
3323 | - | let | |
3324 | - | let | |
3325 | - | let | |
3323 | + | let nL = dH(invoke(dk, "checkWlgXpREADONLY", [c], nil)) | |
3324 | + | let nM = dF(nL[1]) | |
3325 | + | let nN = if ((0 >= nM)) | |
3326 | 3326 | then $Tuple2(0, nil) | |
3327 | 3327 | else { | |
3328 | - | let | |
3329 | - | if (( | |
3330 | - | then $Tuple2( | |
3328 | + | let ld = dF(invoke(dk, "takeWlgXp", [c], nil)) | |
3329 | + | if ((ld == ld)) | |
3330 | + | then $Tuple2(nM, [IntegerEntry(I(c), dF(nL[0])), IntegerEntry(H(c), dF(nL[2]))]) | |
3331 | 3331 | else throw("Strict value is not equal to itself.") | |
3332 | 3332 | } | |
3333 | - | let | |
3334 | - | let | |
3333 | + | let nO = nN._1 | |
3334 | + | let nP = nN._2 | |
3335 | 3335 | let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked") | |
3336 | - | let | |
3337 | - | let | |
3338 | - | let | |
3339 | - | let | |
3340 | - | let | |
3341 | - | let | |
3342 | - | if (( | |
3343 | - | then throw((("There are only " + toString( | |
3336 | + | let nQ = J(c) | |
3337 | + | let nR = (valueOrElse(getInteger(nQ), 0) + nO) | |
3338 | + | let nS = F(B) | |
3339 | + | let nT = valueOrElse(getInteger(nS), 0) | |
3340 | + | let nU = (nR + nT) | |
3341 | + | let nV = ((((nG + nH) + nI) + nJ) + nK) | |
3342 | + | if ((nV > nU)) | |
3343 | + | then throw((("There are only " + toString(nU)) + " free points to distribute")) | |
3344 | 3344 | else { | |
3345 | - | let | |
3346 | - | let at = split(valueOrElse(getString( | |
3347 | - | let | |
3348 | - | $Tuple2((([IntegerEntry( | |
3345 | + | let nW = C(B) | |
3346 | + | let at = split(valueOrElse(getString(nW), "0_0_0_0_0"), "_") | |
3347 | + | let nX = (nR - nV) | |
3348 | + | $Tuple2((([IntegerEntry(nQ, if ((0 > nX)) | |
3349 | 3349 | then 0 | |
3350 | - | else | |
3351 | - | then ( | |
3352 | - | else | |
3350 | + | else nX), IntegerEntry(nS, if ((0 > nX)) | |
3351 | + | then (nT + nX) | |
3352 | + | else nT), StringEntry(nW, makeString([toString((parseIntValue(at[l]) + nG)), toString((parseIntValue(at[m]) + nH)), toString((parseIntValue(at[n]) + nI)), toString((parseIntValue(at[o]) + nJ)), toString((parseIntValue(at[p]) + nK))], "_"))] ++ mm) ++ nP), 0) | |
3353 | 3353 | } | |
3354 | 3354 | } | |
3355 | 3355 | } | |
3362 | 3362 | ||
3363 | 3363 | ||
3364 | 3364 | @Callable(gN) | |
3365 | - | func splitByGlobalAndLocalWeightsREADONLY ( | |
3365 | + | func splitByGlobalAndLocalWeightsREADONLY (nY,nZ,gQ) = { | |
3366 | 3366 | let gJ = gP(gQ) | |
3367 | - | $Tuple2(nil, $Tuple2(fd( | |
3368 | - | } | |
3369 | - | ||
3370 | - | ||
3371 | - | ||
3372 | - | @Callable(gN) | |
3373 | - | func getBackpackREADONLY (B) = $Tuple2(nil, makeString( | |
3367 | + | $Tuple2(nil, $Tuple2(fd(nY), eO(nZ, gJ))) | |
3368 | + | } | |
3369 | + | ||
3370 | + | ||
3371 | + | ||
3372 | + | @Callable(gN) | |
3373 | + | func getBackpackREADONLY (B) = $Tuple2(nil, makeString(iK(bN(B)), ":")) | |
3374 | 3374 | ||
3375 | 3375 | ||
3376 | 3376 | ||
3377 | 3377 | @Callable(gN) | |
3378 | 3378 | func getWarehouseREADONLY (Q) = { | |
3379 | - | let | |
3380 | - | let | |
3381 | - | let | |
3382 | - | $Tuple2(nil, makeString_2C( | |
3379 | + | let ks = value(assetInfo(fromBase58String(Q))) | |
3380 | + | let iZ = (dK(split(ks.description, "_")[do]) / cL) | |
3381 | + | let ja = valueOrElse(getInteger(bD(Q)), 0) | |
3382 | + | $Tuple2(nil, makeString_2C(iX(bC(Q), iZ, ja), ":")) | |
3383 | 3383 | } | |
3384 | 3384 | ||
3385 | 3385 | ||
3387 | 3387 | @Callable(gN) | |
3388 | 3388 | func saveLastTx () = if (!(containsElement([dk, di, dl, dm], gN.caller))) | |
3389 | 3389 | then throw("Access denied") | |
3390 | - | else $Tuple2( | |
3391 | - | ||
3392 | - | ||
3393 | - | ||
3394 | - | @Callable(gN) | |
3395 | - | func updateDuckStats (B, | |
3390 | + | else $Tuple2(mi(gN), 42) | |
3391 | + | ||
3392 | + | ||
3393 | + | ||
3394 | + | @Callable(gN) | |
3395 | + | func updateDuckStats (B,ld) = if ((gN.caller != di)) | |
3396 | 3396 | then throw("Access denied") | |
3397 | - | else | |
3398 | - | ||
3399 | - | ||
3400 | - | ||
3401 | - | @Callable(gN) | |
3402 | - | func updateAccStats (c, | |
3397 | + | else lf(B, ld) | |
3398 | + | ||
3399 | + | ||
3400 | + | ||
3401 | + | @Callable(gN) | |
3402 | + | func updateAccStats (c,ld) = if (!(containsElement([dk, di, dm], gN.caller))) | |
3403 | 3403 | then throw("Access denied") | |
3404 | - | else | |
3405 | - | ||
3406 | - | ||
3407 | - | ||
3408 | - | @Callable(gN) | |
3409 | - | func equipDuck ( | |
3410 | - | let | |
3404 | + | else lg(c, ld) | |
3405 | + | ||
3406 | + | ||
3407 | + | ||
3408 | + | @Callable(gN) | |
3409 | + | func equipDuck (oa) = { | |
3410 | + | let mm = mi(gN) | |
3411 | 3411 | if ((size(gN.payments) != 0)) | |
3412 | 3412 | then throw("No payments required") | |
3413 | 3413 | else { | |
3414 | 3414 | let c = toString(gN.originCaller) | |
3415 | 3415 | let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked") | |
3416 | - | if ( | |
3416 | + | if (lq(B)) | |
3417 | 3417 | then throw("equipDuck_checkTournament") | |
3418 | - | else if ( | |
3418 | + | else if (lr(B)) | |
3419 | 3419 | then throw("equipDuck_checkDelivery") | |
3420 | 3420 | else { | |
3421 | 3421 | let gA = G(B) | |
3422 | - | let | |
3423 | - | let | |
3424 | - | let | |
3425 | - | let | |
3426 | - | if ((size( | |
3422 | + | let ob = split(valueOrElse(getString(gA), ",;,_,;,_,;,_,;,_,;,_,;,"), "_") | |
3423 | + | let iL = bN(B) | |
3424 | + | let jo = iK(iL) | |
3425 | + | let mD = split(oa, "_") | |
3426 | + | if ((size(mD) != r)) | |
3427 | 3427 | then throw("Wrong equipment string") | |
3428 | 3428 | else { | |
3429 | - | let gC = gp( | |
3430 | - | let gD = split( | |
3429 | + | let gC = gp(ob, fA(jo[bp]), true, nil) | |
3430 | + | let gD = split(mD[q], ";")[1] | |
3431 | 3431 | let ar = if ((gD == "")) | |
3432 | 3432 | then 0 | |
3433 | 3433 | else { | |
3452 | 3452 | } | |
3453 | 3453 | } | |
3454 | 3454 | let gk = ap(this, B, ar, true) | |
3455 | - | let gG = gp( | |
3456 | - | let | |
3457 | - | $Tuple2(([StringEntry(gA, | |
3455 | + | let gG = gp(mD, gC, false, gk) | |
3456 | + | let oc = fF(gG) | |
3457 | + | $Tuple2(([StringEntry(gA, oa), StringEntry(iL, makeString_2C([jo[bm], jo[bn], jo[bo], oc], ":")), StringEntry(M(B), makeString([toString(gk[7]), toString(gk[8]), toString(gk[9]), toString(gk[10]), toString(gk[11])], "_"))] ++ mm), 0) | |
3458 | 3458 | } | |
3459 | 3459 | } | |
3460 | 3460 | } | |
3463 | 3463 | ||
3464 | 3464 | ||
3465 | 3465 | @Callable(gN) | |
3466 | - | func fortificateLand (Q, | |
3467 | - | let | |
3466 | + | func fortificateLand (Q,od) = { | |
3467 | + | let mm = mi(gN) | |
3468 | 3468 | if ((size(gN.payments) != 0)) | |
3469 | 3469 | then throw("No payments required") | |
3470 | 3470 | else { | |
3471 | 3471 | let c = toString(gN.originCaller) | |
3472 | 3472 | let B = valueOrElse(getString(bM(c)), "") | |
3473 | 3473 | let fK = ap(this, B, 0, false) | |
3474 | - | let | |
3475 | - | let | |
3476 | - | let | |
3477 | - | let | |
3478 | - | let | |
3479 | - | let | |
3480 | - | let | |
3481 | - | let | |
3482 | - | let | |
3483 | - | let | |
3484 | - | let | |
3485 | - | let | |
3486 | - | let gC = | |
3487 | - | let | |
3488 | - | let | |
3489 | - | let | |
3490 | - | let gG = | |
3491 | - | let | |
3492 | - | let | |
3493 | - | let | |
3494 | - | let | |
3495 | - | $Tuple2(([StringEntry( | |
3474 | + | let oe = bE(Q) | |
3475 | + | let of = split(valueOrElse(getString(oe), ":0_15:0_18:0"), "_") | |
3476 | + | let ks = value(assetInfo(fromBase58String(Q))) | |
3477 | + | let iZ = (dK(split(ks.description, "_")[do]) / cL) | |
3478 | + | let ja = valueOrElse(getInteger(bD(Q)), 0) | |
3479 | + | let iY = bC(Q) | |
3480 | + | let jd = iX(iY, iZ, ja) | |
3481 | + | let og = split(jd[bh], "_") | |
3482 | + | let oh = parseIntValue(og[bj]) | |
3483 | + | let oi = parseIntValue(og[bk]) | |
3484 | + | let oj = split(od, "_") | |
3485 | + | let ok = gw(of, fA(jd[bg]), oh, oi, true, nil) | |
3486 | + | let gC = ok._1 | |
3487 | + | let ol = ok._2 | |
3488 | + | let om = ok._3 | |
3489 | + | let on = gw(oj, gC, ol, om, false, fK) | |
3490 | + | let gG = on._1 | |
3491 | + | let oo = on._2 | |
3492 | + | let op = on._3 | |
3493 | + | let oc = fF(gG) | |
3494 | + | let kY = makeString([og[bi], toString(oo), toString(op), og[bl]], "_") | |
3495 | + | $Tuple2(([StringEntry(oe, od), StringEntry(iY, makeString_2C([jd[bd], jd[be], jd[bf], oc, kY], ":"))] ++ mm), 0) | |
3496 | 3496 | } | |
3497 | 3497 | } | |
3498 | 3498 | ||
3502 | 3502 | func initDuckTourAttempt (B) = if ((gN.caller != dl)) | |
3503 | 3503 | then throw("Access denied") | |
3504 | 3504 | else { | |
3505 | - | let | |
3506 | - | let | |
3507 | - | let | |
3508 | - | let | |
3509 | - | let | |
3505 | + | let kb = A(B) | |
3506 | + | let kc = aj(valueOrElse(getInteger(E(B)), 0)) | |
3507 | + | let lv = valueOrElse(getInteger(kb), kc) | |
3508 | + | let oq = bO(B) | |
3509 | + | let kq = valueOrElse(getString(oq), aM) | |
3510 | 3510 | let cj = valueOrElse(getInteger(dl, bU), 0) | |
3511 | - | let | |
3512 | - | $Tuple2([IntegerEntry(K(B), | |
3511 | + | let or = (toString(cj) + "_T_0") | |
3512 | + | $Tuple2([IntegerEntry(K(B), lv), IntegerEntry(kb, kc), StringEntry(L(B), kq), StringEntry(oq, or)], or) | |
3513 | 3513 | } | |
3514 | 3514 | ||
3515 | 3515 | ||
3516 | 3516 | ||
3517 | 3517 | @Callable(gN) | |
3518 | 3518 | func breakAttempt () = { | |
3519 | - | let | |
3519 | + | let mm = mi(gN) | |
3520 | 3520 | let B = valueOrErrorMessage(getString(bM(toString(gN.caller))), "You don't have a duck staked") | |
3521 | - | let | |
3522 | - | let | |
3523 | - | if ((split( | |
3521 | + | let oq = bO(B) | |
3522 | + | let kq = valueOrElse(getString(oq), aM) | |
3523 | + | if ((split(kq, "_")[br] != "T")) | |
3524 | 3524 | then throw("Your duck is not in the tournament") | |
3525 | 3525 | else { | |
3526 | - | let | |
3527 | - | let | |
3528 | - | $Tuple2((( | |
3526 | + | let os = getIntegerValue(K(B)) | |
3527 | + | let lB = getStringValue(L(B)) | |
3528 | + | $Tuple2(((mm :+ IntegerEntry(A(B), os)) :+ StringEntry(oq, lB)), kq) | |
3529 | 3529 | } | |
3530 | 3530 | } | |
3531 | 3531 | ||
3535 | 3535 | func exitTournamentInternal (B) = if ((gN.caller != this)) | |
3536 | 3536 | then throw("Access denied") | |
3537 | 3537 | else { | |
3538 | - | let | |
3539 | - | let | |
3540 | - | $Tuple2([IntegerEntry(A(B), | |
3538 | + | let os = getIntegerValue(K(B)) | |
3539 | + | let lB = getStringValue(L(B)) | |
3540 | + | $Tuple2([IntegerEntry(A(B), os), StringEntry(bO(B), lB)], false) | |
3541 | 3541 | } | |
3542 | 3542 | ||
3543 | 3543 | ||
3546 | 3546 | func exitDeliveryInternal (B) = if ((gN.caller != this)) | |
3547 | 3547 | then throw("Access denied") | |
3548 | 3548 | else { | |
3549 | - | let | |
3550 | - | $Tuple2(( | |
3549 | + | let ni = ls(B, false, 0, 0) | |
3550 | + | $Tuple2((ni._1 ++ ni._2), false) | |
3551 | 3551 | } | |
3552 | 3552 | ||
3553 | 3553 | ||
3554 | 3554 | ||
3555 | 3555 | @Callable(gN) | |
3556 | - | func autoExitDelivery (B, | |
3556 | + | func autoExitDelivery (B,jV,ot,lt) = if ((gN.caller != this)) | |
3557 | 3557 | then throw("Access denied") | |
3558 | 3558 | else { | |
3559 | - | let | |
3560 | - | $Tuple2( | |
3559 | + | let ni = ls(B, true, jV, lt) | |
3560 | + | $Tuple2(ni._1, ni._3) | |
3561 | 3561 | } | |
3562 | 3562 | ||
3563 | 3563 | ||
3564 | 3564 | ||
3565 | 3565 | @Callable(gN) | |
3566 | - | func breakDelivery () = $Tuple2( | |
3567 | - | ||
3568 | - | ||
3569 | - | ||
3570 | - | @Callable(gN) | |
3571 | - | func prepareRobbery ( | |
3572 | - | let | |
3573 | - | if (!(sigVerify_8Kb( | |
3566 | + | func breakDelivery () = $Tuple2(mi(gN), "breakDelivery") | |
3567 | + | ||
3568 | + | ||
3569 | + | ||
3570 | + | @Callable(gN) | |
3571 | + | func prepareRobbery (jQ,jR) = { | |
3572 | + | let mm = mi(gN) | |
3573 | + | if (!(sigVerify_8Kb(jQ, jR, ec))) | |
3574 | 3574 | then throw("signature does not match") | |
3575 | 3575 | else if ((size(gN.payments) != 1)) | |
3576 | 3576 | then throw("exactly 1 payment must be attached") | |
3577 | 3577 | else { | |
3578 | - | let | |
3579 | - | let | |
3580 | - | if (if (!(isDefined( | |
3578 | + | let mn = gN.payments[0] | |
3579 | + | let ou = mn.amount | |
3580 | + | if (if (!(isDefined(mn.assetId))) | |
3581 | 3581 | then true | |
3582 | - | else (value( | |
3582 | + | else (value(mn.assetId) != ds)) | |
3583 | 3583 | then throw("WLGOLD payments only!") | |
3584 | 3584 | else { | |
3585 | - | let fs = split(toUtf8String( | |
3585 | + | let fs = split(toUtf8String(jQ), "|") | |
3586 | 3586 | if ((size(fs) != 2)) | |
3587 | 3587 | then throw("Wrong message format") | |
3588 | 3588 | else { | |
3589 | 3589 | let B = fs[0] | |
3590 | - | if ( | |
3590 | + | if (lq(B)) | |
3591 | 3591 | then throw("prepareRobbery_checkTournament") | |
3592 | - | else if ( | |
3592 | + | else if (lr(B)) | |
3593 | 3593 | then throw("prepareRobbery_checkDelivery") | |
3594 | 3594 | else { | |
3595 | 3595 | let aB = ax(this, B)._1 | |
3596 | - | if ((aB > | |
3597 | - | then throw(((("Payment " + toString( | |
3596 | + | if ((aB > ou)) | |
3597 | + | then throw(((("Payment " + toString(ou)) + " < required ") + toString(aB))) | |
3598 | 3598 | else { | |
3599 | - | let | |
3599 | + | let ov = split(fs[1], "_") | |
3600 | 3600 | let aA = lastBlock.timestamp | |
3601 | 3601 | let aC = valueOrElse(getInteger(S(B)), 0) | |
3602 | 3602 | let aD = valueOrElse(getString(T(B)), "") | |
3606 | 3606 | else false) | |
3607 | 3607 | then throw(("You already started robbing, wait till " + toString(aE))) | |
3608 | 3608 | else { | |
3609 | - | func | |
3610 | - | let | |
3611 | - | let | |
3612 | - | if (( | |
3609 | + | func ow (eU,Q) = { | |
3610 | + | let ox = valueOrElse(getInteger(P(Q)), 0) | |
3611 | + | let oy = valueOrElse(getInteger(R(Q)), 0) | |
3612 | + | if ((ox > size(v))) | |
3613 | 3613 | then throw("Invalid state") | |
3614 | - | else if ((aA > | |
3614 | + | else if ((aA > oy)) | |
3615 | 3615 | then { | |
3616 | - | let | |
3617 | - | if ((0 >= | |
3616 | + | let oz = valueOrElse(getInteger(bw(Q)), 0) | |
3617 | + | if ((0 >= oz)) | |
3618 | 3618 | then eU | |
3619 | 3619 | else { | |
3620 | 3620 | let gu = value(assetInfo(fromBase58String(Q))) | |
3621 | - | let | |
3622 | - | let | |
3623 | - | let | |
3624 | - | let gT = (aA - | |
3625 | - | let | |
3626 | - | if ((w > | |
3621 | + | let kw = split(gu.description, "_") | |
3622 | + | let ki = dK(kw[do]) | |
3623 | + | let oA = kh(Q, ki) | |
3624 | + | let gT = (aA - oz) | |
3625 | + | let kz = fraction(gT, (oA * ki), a) | |
3626 | + | if ((w > kz)) | |
3627 | 3627 | then eU | |
3628 | 3628 | else (eU :+ Q) | |
3629 | 3629 | } | |
3631 | 3631 | else eU | |
3632 | 3632 | } | |
3633 | 3633 | ||
3634 | - | let | |
3635 | - | let eW = | |
3634 | + | let oB = { | |
3635 | + | let eW = ov | |
3636 | 3636 | let eX = size(eW) | |
3637 | 3637 | let eY = nil | |
3638 | 3638 | func eZ (fa,fb) = if ((fb >= eX)) | |
3639 | 3639 | then fa | |
3640 | - | else | |
3640 | + | else ow(fa, eW[fb]) | |
3641 | 3641 | ||
3642 | 3642 | func fc (fa,fb) = if ((fb >= eX)) | |
3643 | 3643 | then fa | |
3645 | 3645 | ||
3646 | 3646 | fc(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
3647 | 3647 | } | |
3648 | - | if ((size( | |
3648 | + | if ((size(oB) == 0)) | |
3649 | 3649 | then throw("No candidates for robbery") | |
3650 | 3650 | else { | |
3651 | - | let | |
3652 | - | let Q = | |
3653 | - | $Tuple2(([IntegerEntry(P(Q), x), IntegerEntry(R(Q), (aA + v[x])), IntegerEntry(S(B), z), StringEntry(T(B), Q)] ++ | |
3651 | + | let oC = dV(size(oB), jQ, jR) | |
3652 | + | let Q = oB[oC] | |
3653 | + | $Tuple2(([IntegerEntry(P(Q), x), IntegerEntry(R(Q), (aA + v[x])), IntegerEntry(S(B), z), StringEntry(T(B), Q)] ++ mm), Q) | |
3654 | 3654 | } | |
3655 | 3655 | } | |
3656 | 3656 | } | |
3663 | 3663 | ||
3664 | 3664 | ||
3665 | 3665 | @Callable(gN) | |
3666 | - | func robLand ( | |
3667 | - | let | |
3668 | - | if (!(sigVerify_8Kb( | |
3666 | + | func robLand (jQ,jR) = { | |
3667 | + | let mm = mi(gN) | |
3668 | + | if (!(sigVerify_8Kb(jQ, jR, ec))) | |
3669 | 3669 | then throw("signature does not match") | |
3670 | 3670 | else { | |
3671 | 3671 | let bQ = toString(gN.caller) | |
3672 | 3672 | let B = valueOrErrorMessage(getString(bM(bQ)), "You don't have a duck staked") | |
3673 | 3673 | let aA = lastBlock.timestamp | |
3674 | - | $Tuple2(( | |
3674 | + | $Tuple2((mm :+ IntegerEntry(N(B), aA)), 0) | |
3675 | 3675 | } | |
3676 | 3676 | } | |
3677 | 3677 | ||
3679 | 3679 | ||
3680 | 3680 | @Callable(gN) | |
3681 | 3681 | func acceptDelivery () = { | |
3682 | - | let | |
3682 | + | let mm = mi(gN) | |
3683 | 3683 | let bQ = toString(gN.caller) | |
3684 | 3684 | let B = valueOrErrorMessage(getString(bM(bQ)), "You don't have a duck staked") | |
3685 | - | let | |
3686 | - | let | |
3687 | - | if ((aP > ( | |
3688 | - | then throw(((("Delivery is not available, fund=" + dP( | |
3685 | + | let oD = valueOrElse(getInteger(di, bS), 0) | |
3686 | + | let lz = valueOrElse(getInteger(di, bT), 0) | |
3687 | + | if ((aP > (oD - lz))) | |
3688 | + | then throw(((("Delivery is not available, fund=" + dP(oD, 6)) + ", locked=") + dP(lz, 6))) | |
3689 | 3689 | else { | |
3690 | 3690 | let aA = lastBlock.timestamp | |
3691 | - | let | |
3692 | - | if (( | |
3693 | - | then throw(("Delivery is forbidden for your duck until " + toString( | |
3691 | + | let oE = valueOrElse(getInteger(U(B)), 0) | |
3692 | + | if ((oE > aA)) | |
3693 | + | then throw(("Delivery is forbidden for your duck until " + toString(oE))) | |
3694 | 3694 | else { | |
3695 | 3695 | let av = getIntegerValue(A(B)) | |
3696 | 3696 | if ((0 >= av)) | |
3697 | 3697 | then throw("You cannot accept delivery with zero health") | |
3698 | 3698 | else { | |
3699 | - | let | |
3700 | - | let fU = valueOrElse(getInteger( | |
3701 | - | let | |
3702 | - | let | |
3703 | - | let | |
3704 | - | let | |
3705 | - | if (if ((fU >= | |
3706 | - | then ( | |
3699 | + | let ly = V(bQ) | |
3700 | + | let fU = valueOrElse(getInteger(ly), 0) | |
3701 | + | let oF = valueOrElse(getInteger(W(bQ)), 0) | |
3702 | + | let oG = (aA / a) | |
3703 | + | let oH = valueOrElse(getInteger(dm, d(bQ)), 0) | |
3704 | + | let oI = (aR + (oH / aS)) | |
3705 | + | if (if ((fU >= oI)) | |
3706 | + | then (oF == oG) | |
3707 | 3707 | else false) | |
3708 | - | then throw((("You already used " + toString( | |
3709 | - | else if ( | |
3708 | + | then throw((("You already used " + toString(oI)) + " delivery attempts for today")) | |
3709 | + | else if (lq(B)) | |
3710 | 3710 | then throw("acceptDelivery_checkTournament") | |
3711 | - | else if ( | |
3711 | + | else if (lr(B)) | |
3712 | 3712 | then throw("acceptDelivery_checkDelivery") | |
3713 | 3713 | else { | |
3714 | - | let | |
3715 | - | let | |
3716 | - | let | |
3717 | - | let | |
3718 | - | $Tuple2(([StringEntry(L(B), | |
3714 | + | let oJ = dF(invoke(di, "updateDeliveryLocked", [(lz + aP)], nil)) | |
3715 | + | let oq = bO(B) | |
3716 | + | let kq = valueOrElse(getString(oq), aM) | |
3717 | + | let oK = (toString(aA) + "_D_0") | |
3718 | + | $Tuple2(([StringEntry(L(B), kq), StringEntry(oq, oK), IntegerEntry(ly, if ((oF != oG)) | |
3719 | 3719 | then 0 | |
3720 | - | else fU)] ++ | |
3720 | + | else fU)] ++ mm), $Tuple2(oK, oJ)) | |
3721 | 3721 | } | |
3722 | 3722 | } | |
3723 | 3723 | } | |
3729 | 3729 | @Callable(gN) | |
3730 | 3730 | func checkDeliveryCallback (B) = if ((gN.caller != dl)) | |
3731 | 3731 | then throw("Access denied") | |
3732 | - | else $Tuple2(nil, lq(B)) | |
3733 | - | ||
3734 | - | ||
3735 | - | ||
3736 | - | @Callable(gN) | |
3737 | - | func genTestREADONLY (iy,gK) = { | |
3738 | - | let jK = hi(toBigInt(sha256(toBytes(iy)))) | |
3739 | - | $Tuple2(nil, hz(jK, gK)) | |
3732 | + | else $Tuple2(nil, lr(B)) | |
3733 | + | ||
3734 | + | ||
3735 | + | ||
3736 | + | @Callable(gN) | |
3737 | + | func genTestREADONLY (iz,gK) = { | |
3738 | + | let oL = value(value(blockInfoByHeight(2827006)).vrf) | |
3739 | + | let jL = hi(toBigInt((oL + sha256(toBytes(iz))))) | |
3740 | + | $Tuple2(nil, hz(jL, gK)) | |
3740 | 3741 | } | |
3741 | 3742 | ||
3742 | 3743 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = 86400000 | |
5 | 5 | ||
6 | 6 | func b (c) = ("lastArbTimeUser_" + c) | |
7 | 7 | ||
8 | 8 | ||
9 | 9 | func d (c) = ("acresStakedAmountByUser_" + c) | |
10 | 10 | ||
11 | 11 | ||
12 | 12 | let e = 100000000 | |
13 | 13 | ||
14 | 14 | let f = 3200 | |
15 | 15 | ||
16 | 16 | let g = 4000 | |
17 | 17 | ||
18 | 18 | let h = 3 | |
19 | 19 | ||
20 | 20 | let i = 100000000 | |
21 | 21 | ||
22 | 22 | let j = 400 | |
23 | 23 | ||
24 | 24 | let k = ["Strength", "Accuracy", "Intellect", "Endurance", "Dexterity", "Level", "Health"] | |
25 | 25 | ||
26 | 26 | let l = 0 | |
27 | 27 | ||
28 | 28 | let m = 1 | |
29 | 29 | ||
30 | 30 | let n = 2 | |
31 | 31 | ||
32 | 32 | let o = 3 | |
33 | 33 | ||
34 | 34 | let p = 4 | |
35 | 35 | ||
36 | 36 | let q = 0 | |
37 | 37 | ||
38 | 38 | let r = 6 | |
39 | 39 | ||
40 | 40 | let s = 2 | |
41 | 41 | ||
42 | 42 | let t = 2 | |
43 | 43 | ||
44 | 44 | let u = 30 | |
45 | 45 | ||
46 | 46 | let v = [0, 600000, 900000, 43200000, 21600000] | |
47 | 47 | ||
48 | 48 | let w = 20000000 | |
49 | 49 | ||
50 | 50 | let x = 1 | |
51 | 51 | ||
52 | 52 | let y = 0 | |
53 | 53 | ||
54 | 54 | let z = 1 | |
55 | 55 | ||
56 | 56 | func A (B) = ("duckHealth_" + B) | |
57 | 57 | ||
58 | 58 | ||
59 | 59 | func C (B) = ("duckChars_" + B) | |
60 | 60 | ||
61 | 61 | ||
62 | 62 | func D (B) = ("duckXP_" + B) | |
63 | 63 | ||
64 | 64 | ||
65 | 65 | func E (B) = ("duckLevel_" + B) | |
66 | 66 | ||
67 | 67 | ||
68 | 68 | func F (B) = ("duckFreePoints_" + B) | |
69 | 69 | ||
70 | 70 | ||
71 | 71 | func G (B) = ("duckEquipment_" + B) | |
72 | 72 | ||
73 | 73 | ||
74 | 74 | func H (c) = ("userXP_" + c) | |
75 | 75 | ||
76 | 76 | ||
77 | 77 | func I (c) = ("userLevel_" + c) | |
78 | 78 | ||
79 | 79 | ||
80 | 80 | func J (c) = ("userFreePoints_" + c) | |
81 | 81 | ||
82 | 82 | ||
83 | 83 | func K (B) = ("savedHealth_" + B) | |
84 | 84 | ||
85 | 85 | ||
86 | 86 | func L (B) = ("savedLocation_" + B) | |
87 | 87 | ||
88 | 88 | ||
89 | 89 | func M (B) = ("duckBuffs_" + B) | |
90 | 90 | ||
91 | 91 | ||
92 | 92 | func N (B) = ("lastRobberyTime_" + B) | |
93 | 93 | ||
94 | 94 | ||
95 | 95 | func O (B) = ("lastRobberyCost_" + B) | |
96 | 96 | ||
97 | 97 | ||
98 | 98 | func P (Q) = ("landRobberyState_" + Q) | |
99 | 99 | ||
100 | 100 | ||
101 | 101 | func R (Q) = ("landCooldownETA_" + Q) | |
102 | 102 | ||
103 | 103 | ||
104 | 104 | func S (B) = ("duckRobberyState_" + B) | |
105 | 105 | ||
106 | 106 | ||
107 | 107 | func T (B) = ("lockedLandByDuck_" + B) | |
108 | 108 | ||
109 | 109 | ||
110 | 110 | func U (B) = ("deliveryDelayByDuck_" + B) | |
111 | 111 | ||
112 | 112 | ||
113 | 113 | func V (c) = ("userDeliveryCount_" + c) | |
114 | 114 | ||
115 | 115 | ||
116 | 116 | func W (c) = ("userLastDeliveryDay_" + c) | |
117 | 117 | ||
118 | 118 | ||
119 | 119 | let X = 10000 | |
120 | 120 | ||
121 | 121 | let Y = 10000 | |
122 | 122 | ||
123 | 123 | let Z = 2000 | |
124 | 124 | ||
125 | 125 | let aa = 100000 | |
126 | 126 | ||
127 | 127 | let ab = 1000000 | |
128 | 128 | ||
129 | 129 | let ac = 5000000 | |
130 | 130 | ||
131 | 131 | let ad = 10000 | |
132 | 132 | ||
133 | 133 | let ae = 1000000 | |
134 | 134 | ||
135 | 135 | let af = 1000000 | |
136 | 136 | ||
137 | 137 | let ag = 10000 | |
138 | 138 | ||
139 | 139 | func ah (ai) = fraction(f, pow(ai, 4, g, 4, 4, DOWN), e) | |
140 | 140 | ||
141 | 141 | ||
142 | 142 | func aj (ak) = (100 + ak) | |
143 | 143 | ||
144 | 144 | ||
145 | 145 | func al (am,an) = { | |
146 | 146 | let ao = ah(an) | |
147 | 147 | [ao, (h * (ao - am))] | |
148 | 148 | } | |
149 | 149 | ||
150 | 150 | ||
151 | 151 | func ap (aq,B,ar,as) = { | |
152 | 152 | let at = split(valueOrElse(getString(aq, C(B)), "0_0_0_0_0"), "_") | |
153 | 153 | let au = valueOrElse(getInteger(aq, E(B)), 0) | |
154 | 154 | let av = valueOrElse(getInteger(aq, A(B)), aj(au)) | |
155 | 155 | let aw = split(valueOrElse(getString(aq, M(B)), "0_0_0_0_0"), "_") | |
156 | 156 | ([parseIntValue(at[l]), parseIntValue(at[m]), parseIntValue(at[n]), parseIntValue(at[o]), parseIntValue(at[p]), au, av] ++ (if (as) | |
157 | 157 | then [ar, ar, ar, ar, ar] | |
158 | 158 | else [parseIntValue(aw[l]), parseIntValue(aw[m]), parseIntValue(aw[n]), parseIntValue(aw[o]), parseIntValue(aw[p])])) | |
159 | 159 | } | |
160 | 160 | ||
161 | 161 | ||
162 | 162 | func ax (aq,B) = { | |
163 | 163 | let ay = valueOrElse(getInteger(aq, O(B)), 0) | |
164 | 164 | let az = valueOrElse(getInteger(aq, N(B)), 0) | |
165 | 165 | let aA = lastBlock.timestamp | |
166 | 166 | let aB = max([i, (ay - (j * (aA - az)))]) | |
167 | 167 | let aC = valueOrElse(getInteger(aq, S(B)), 0) | |
168 | 168 | let aD = valueOrElse(getString(aq, T(B)), "") | |
169 | 169 | let aE = valueOrElse(getInteger(aq, R(aD)), 0) | |
170 | 170 | $Tuple5(aB, az, aC, aD, aE) | |
171 | 171 | } | |
172 | 172 | ||
173 | 173 | ||
174 | 174 | let aF = "LAND" | |
175 | 175 | ||
176 | 176 | let aG = "DUCK" | |
177 | 177 | ||
178 | 178 | let aH = "PRESALE" | |
179 | 179 | ||
180 | 180 | let aI = 6 | |
181 | 181 | ||
182 | 182 | let aJ = 25 | |
183 | 183 | ||
184 | 184 | let aK = 3456000 | |
185 | 185 | ||
186 | 186 | let aL = 10000000000 | |
187 | 187 | ||
188 | 188 | let aM = "Africa_F_Africa" | |
189 | 189 | ||
190 | 190 | let aN = 39637 | |
191 | 191 | ||
192 | 192 | let aO = 10 | |
193 | 193 | ||
194 | 194 | let aP = 50000 | |
195 | 195 | ||
196 | 196 | let aQ = 600000 | |
197 | 197 | ||
198 | 198 | let aR = 1 | |
199 | 199 | ||
200 | 200 | let aS = 50000000 | |
201 | 201 | ||
202 | 202 | let aT = ["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"] | |
203 | 203 | ||
204 | 204 | let aU = ["Americas", "Europe", "Asia", "Africa", "Oceania"] | |
205 | 205 | ||
206 | 206 | let aV = 10000000 | |
207 | 207 | ||
208 | 208 | let aW = [15, 16, 17, 18, 19, 20] | |
209 | 209 | ||
210 | 210 | let aX = ["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_"] | |
211 | 211 | ||
212 | 212 | let aY = 6 | |
213 | 213 | ||
214 | 214 | let aZ = 8 | |
215 | 215 | ||
216 | 216 | let ba = 9 | |
217 | 217 | ||
218 | 218 | let bb = 10 | |
219 | 219 | ||
220 | 220 | let bc = 10 | |
221 | 221 | ||
222 | 222 | let bd = 0 | |
223 | 223 | ||
224 | 224 | let be = 1 | |
225 | 225 | ||
226 | 226 | let bf = 2 | |
227 | 227 | ||
228 | 228 | let bg = 3 | |
229 | 229 | ||
230 | 230 | let bh = 4 | |
231 | 231 | ||
232 | 232 | let bi = 0 | |
233 | 233 | ||
234 | 234 | let bj = 1 | |
235 | 235 | ||
236 | 236 | let bk = 2 | |
237 | 237 | ||
238 | 238 | let bl = 3 | |
239 | 239 | ||
240 | 240 | let bm = 0 | |
241 | 241 | ||
242 | 242 | let bn = 1 | |
243 | 243 | ||
244 | 244 | let bo = 2 | |
245 | 245 | ||
246 | 246 | let bp = 3 | |
247 | 247 | ||
248 | 248 | let bq = 0 | |
249 | 249 | ||
250 | 250 | let br = 1 | |
251 | 251 | ||
252 | 252 | let bs = 2 | |
253 | 253 | ||
254 | 254 | func bt (bu) = ("no_" + bu) | |
255 | 255 | ||
256 | 256 | ||
257 | 257 | func bv (bu) = ("lcna_" + bu) | |
258 | 258 | ||
259 | 259 | ||
260 | 260 | func bw (bu) = ("st_" + bu) | |
261 | 261 | ||
262 | 262 | ||
263 | 263 | func bx (by,bu) = makeString(["las", by, bu], "_") | |
264 | 264 | ||
265 | 265 | ||
266 | 266 | func bz (bA,bu,bB) = ((((("sttao_" + bA) + "_") + bu) + "_") + bB) | |
267 | 267 | ||
268 | 268 | ||
269 | 269 | func bC (Q) = ("wh_" + Q) | |
270 | 270 | ||
271 | 271 | ||
272 | 272 | func bD (bu) = ("infraLevel_" + bu) | |
273 | 273 | ||
274 | 274 | ||
275 | 275 | func bE (Q) = ("fortifications_" + Q) | |
276 | 276 | ||
277 | 277 | ||
278 | 278 | func bF (bu) = ("duckCustomNameByAssetId_" + bu) | |
279 | 279 | ||
280 | 280 | ||
281 | 281 | func bG (c) = ("accountCustomNameByAddr_" + c) | |
282 | 282 | ||
283 | 283 | ||
284 | 284 | func bH (c) = ("accRefBy_" + c) | |
285 | 285 | ||
286 | 286 | ||
287 | 287 | func bI (B) = ("onboardArtActivatedOnDuck_" + B) | |
288 | 288 | ||
289 | 289 | ||
290 | 290 | func bJ (c) = ("onboardArtActivatedDuckBy_" + c) | |
291 | 291 | ||
292 | 292 | ||
293 | 293 | func bK (c) = ("accReferrals_" + c) | |
294 | 294 | ||
295 | 295 | ||
296 | 296 | func bL (bu) = ("duckOwner_" + bu) | |
297 | 297 | ||
298 | 298 | ||
299 | 299 | func bM (bB) = ("stakedDuckByOwner_" + bB) | |
300 | 300 | ||
301 | 301 | ||
302 | 302 | func bN (B) = ("backPack_" + B) | |
303 | 303 | ||
304 | 304 | ||
305 | 305 | func bO (B) = ("duckLocation_" + B) | |
306 | 306 | ||
307 | 307 | ||
308 | 308 | func bP (bQ) = ("%s%s__userGwlReleaseTime__" + bQ) | |
309 | 309 | ||
310 | 310 | ||
311 | 311 | func bR () = "emergencyWarehouseProducts" | |
312 | 312 | ||
313 | 313 | ||
314 | 314 | let bS = "deliveryFund" | |
315 | 315 | ||
316 | 316 | let bT = "deliveryLocked" | |
317 | 317 | ||
318 | 318 | let bU = "%s__lastTourId" | |
319 | 319 | ||
320 | 320 | func bV (bW) = ("%s%d__tourStaticData__" + toString(bW)) | |
321 | 321 | ||
322 | 322 | ||
323 | 323 | func bX (bW) = ("%s%d__tourDynamicData__" + toString(bW)) | |
324 | 324 | ||
325 | 325 | ||
326 | 326 | func bY (bW,B) = makeString(["%s%d%s__bestResultByTourAndDuck", toString(bW), B], "__") | |
327 | 327 | ||
328 | 328 | ||
329 | 329 | let bZ = 0 | |
330 | 330 | ||
331 | 331 | let ca = 1 | |
332 | 332 | ||
333 | 333 | let cb = 6 | |
334 | 334 | ||
335 | 335 | let cc = 1 | |
336 | 336 | ||
337 | 337 | func cd (ce,bW) = { | |
338 | 338 | let cf = split(valueOrErrorMessage(getString(ce, bV(bW)), (("Error reading tournament " + toString(bW)) + " data")), "__") | |
339 | 339 | let cg = split_4C(valueOrErrorMessage(getString(ce, bX(bW)), (("Error reading tournament " + toString(bW)) + " data")), "__") | |
340 | 340 | [cf, cg] | |
341 | 341 | } | |
342 | 342 | ||
343 | 343 | ||
344 | 344 | func ch (ce,ci) = { | |
345 | 345 | let cj = valueOrElse(getInteger(ce, bU), 0) | |
346 | 346 | let ck = split(ci, "_") | |
347 | 347 | let aA = lastBlock.timestamp | |
348 | 348 | let cl = cd(ce, cj) | |
349 | 349 | let cf = cl[bZ] | |
350 | 350 | let cg = cl[ca] | |
351 | 351 | if (if (if ((ck[br] == "T")) | |
352 | 352 | then (parseIntValue(ck[bq]) == cj) | |
353 | 353 | else false) | |
354 | 354 | then (cg[cc] == "INPROGRESS") | |
355 | 355 | else false) | |
356 | 356 | then (parseIntValue(cf[cb]) > aA) | |
357 | 357 | else false | |
358 | 358 | } | |
359 | 359 | ||
360 | 360 | ||
361 | 361 | func cm (ci) = { | |
362 | 362 | let ck = split(ci, "_") | |
363 | 363 | let aA = lastBlock.timestamp | |
364 | 364 | let cn = parseIntValue(ck[bq]) | |
365 | 365 | let co = parseIntValue(ck[bs]) | |
366 | 366 | if (if ((ck[br] == "D")) | |
367 | 367 | then ((cn + aQ) > aA) | |
368 | 368 | else false) | |
369 | 369 | then (3 >= co) | |
370 | 370 | else false | |
371 | 371 | } | |
372 | 372 | ||
373 | 373 | ||
374 | 374 | func cp (ci) = { | |
375 | 375 | let cq = split(ci, "_")[br] | |
376 | 376 | if ((cq != "T")) | |
377 | 377 | then (cq != "D") | |
378 | 378 | else false | |
379 | 379 | } | |
380 | 380 | ||
381 | 381 | ||
382 | 382 | func cr (ce,ci) = { | |
383 | 383 | let cj = valueOrElse(getInteger(ce, bU), 0) | |
384 | 384 | let ck = split(ci, "_") | |
385 | 385 | let aA = lastBlock.timestamp | |
386 | 386 | let cl = cd(ce, cj) | |
387 | 387 | let cf = cl[bZ] | |
388 | 388 | let cg = cl[ca] | |
389 | 389 | let cq = ck[br] | |
390 | 390 | if ((cq == "D")) | |
391 | 391 | then true | |
392 | 392 | else if (if (if ((ck[br] == "T")) | |
393 | 393 | then (parseIntValue(ck[bq]) == cj) | |
394 | 394 | else false) | |
395 | 395 | then (cg[cc] == "INPROGRESS") | |
396 | 396 | else false) | |
397 | 397 | then (parseIntValue(cf[cb]) > aA) | |
398 | 398 | else false | |
399 | 399 | } | |
400 | 400 | ||
401 | 401 | ||
402 | 402 | func cs (ct) = (parseIntValue(ct[aY]) * aV) | |
403 | 403 | ||
404 | 404 | ||
405 | 405 | func cu (cv,cw,cx) = throw(((((("Cheat attempt: oldLoc=" + cv) + ", newLoc=") + cw) + ", case=") + toString(cx))) | |
406 | 406 | ||
407 | 407 | ||
408 | 408 | let cy = false | |
409 | 409 | ||
410 | 410 | let cz = false | |
411 | 411 | ||
412 | 412 | let cA = 86400000 | |
413 | 413 | ||
414 | 414 | let cB = take(drop(this.bytes, 1), 1) | |
415 | 415 | ||
416 | 416 | let cC = { | |
417 | 417 | let cD = cB | |
418 | 418 | if ((base58'2W' == cD)) | |
419 | 419 | then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi' | |
420 | 420 | else if ((base58'2T' == cD)) | |
421 | 421 | then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63' | |
422 | 422 | else throw("Unknown chain") | |
423 | 423 | } | |
424 | 424 | ||
425 | 425 | let cE = { | |
426 | 426 | let cD = cB | |
427 | 427 | if ((base58'2W' == cD)) | |
428 | 428 | then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv" | |
429 | 429 | else if ((base58'2T' == cD)) | |
430 | 430 | then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy" | |
431 | 431 | else throw("Unknown chain") | |
432 | 432 | } | |
433 | 433 | ||
434 | 434 | let cF = { | |
435 | 435 | let cD = cB | |
436 | 436 | if ((base58'2W' == cD)) | |
437 | 437 | then 10000000000 | |
438 | 438 | else if ((base58'2T' == cD)) | |
439 | 439 | then 100000000 | |
440 | 440 | else throw("Unknown chain") | |
441 | 441 | } | |
442 | 442 | ||
443 | 443 | let cG = { | |
444 | 444 | let cD = cB | |
445 | 445 | if ((base58'2W' == cD)) | |
446 | 446 | then cA | |
447 | 447 | else if ((base58'2T' == cD)) | |
448 | 448 | then 60000 | |
449 | 449 | else throw("Unknown chain") | |
450 | 450 | } | |
451 | 451 | ||
452 | 452 | let cH = { | |
453 | 453 | let cD = cB | |
454 | 454 | if ((base58'2W' == cD)) | |
455 | 455 | then 10800000 | |
456 | 456 | else if ((base58'2T' == cD)) | |
457 | 457 | then 900000 | |
458 | 458 | else throw("Unknown chain") | |
459 | 459 | } | |
460 | 460 | ||
461 | 461 | let cI = "__" | |
462 | 462 | ||
463 | 463 | let cJ = 1000000 | |
464 | 464 | ||
465 | 465 | let cK = 100000000 | |
466 | 466 | ||
467 | 467 | let cL = 25 | |
468 | 468 | ||
469 | 469 | let cM = 100 | |
470 | 470 | ||
471 | 471 | let cN = 225 | |
472 | 472 | ||
473 | 473 | let cO = 400 | |
474 | 474 | ||
475 | 475 | let cP = 625 | |
476 | 476 | ||
477 | 477 | let cQ = [0, 1, 2, 3, 4, 5] | |
478 | 478 | ||
479 | 479 | func cR (cS,cT) = valueOrErrorMessage(getString(cS, cT), makeString(["mandatory ", toString(cS), ".", cT, " is not defined"], "")) | |
480 | 480 | ||
481 | 481 | ||
482 | 482 | let cU = 1 | |
483 | 483 | ||
484 | 484 | let cV = 2 | |
485 | 485 | ||
486 | 486 | let cW = 3 | |
487 | 487 | ||
488 | 488 | let cX = 4 | |
489 | 489 | ||
490 | 490 | let cY = 7 | |
491 | 491 | ||
492 | 492 | let cZ = 8 | |
493 | 493 | ||
494 | 494 | func da () = "%s__restConfig" | |
495 | 495 | ||
496 | 496 | ||
497 | 497 | func db () = "%s__restAddr" | |
498 | 498 | ||
499 | 499 | ||
500 | 500 | func dc (dd) = split_4C(cR(dd, da()), cI) | |
501 | 501 | ||
502 | 502 | ||
503 | 503 | func de (df,dg) = valueOrErrorMessage(addressFromString(df[dg]), ("Rest cfg doesn't contain address at index " + toString(dg))) | |
504 | 504 | ||
505 | 505 | ||
506 | 506 | let dh = addressFromStringValue(valueOrElse(getString(this, db()), cE)) | |
507 | 507 | ||
508 | 508 | let df = dc(dh) | |
509 | 509 | ||
510 | 510 | let aq = de(df, cU) | |
511 | 511 | ||
512 | 512 | let di = de(df, cV) | |
513 | 513 | ||
514 | 514 | let dj = de(df, cW) | |
515 | 515 | ||
516 | 516 | let dk = de(df, cX) | |
517 | 517 | ||
518 | 518 | let dl = de(df, cY) | |
519 | 519 | ||
520 | 520 | let dm = de(df, cZ) | |
521 | 521 | ||
522 | 522 | let dn = 0 | |
523 | 523 | ||
524 | 524 | let do = 1 | |
525 | 525 | ||
526 | 526 | let dp = 2 | |
527 | 527 | ||
528 | 528 | let dq = 3 | |
529 | 529 | ||
530 | 530 | let dr = "wlg_assetId" | |
531 | 531 | ||
532 | 532 | let ds = valueOrErrorMessage(getBinary(dk, dr), "WLGOLD is not issued yet") | |
533 | 533 | ||
534 | 534 | let dt = "acresAssetId" | |
535 | 535 | ||
536 | 536 | let du = valueOrErrorMessage(getBinary(dm, dt), "ACRES is not issued yet") | |
537 | 537 | ||
538 | 538 | let dv = 2 | |
539 | 539 | ||
540 | 540 | func dw (cS) = ("finishBlockForAddr_" + cS) | |
541 | 541 | ||
542 | 542 | ||
543 | 543 | func dx () = "resTypesProportions" | |
544 | 544 | ||
545 | 545 | ||
546 | 546 | func dy (dz) = ("resTypesByContinent_" + dz) | |
547 | 547 | ||
548 | 548 | ||
549 | 549 | func dA (bB) = ("stakedLandsByOwner_" + bB) | |
550 | 550 | ||
551 | 551 | ||
552 | 552 | func dB (bB) = ("stakedPiecesByOwner_" + bB) | |
553 | 553 | ||
554 | 554 | ||
555 | 555 | func dC (dD) = { | |
556 | 556 | let cD = dD | |
557 | 557 | if ($isInstanceOf(cD, "String")) | |
558 | 558 | then { | |
559 | 559 | let dE = cD | |
560 | 560 | dE | |
561 | 561 | } | |
562 | 562 | else throw("fail to cast into String") | |
563 | 563 | } | |
564 | 564 | ||
565 | 565 | ||
566 | 566 | func dF (dD) = { | |
567 | 567 | let cD = dD | |
568 | 568 | if ($isInstanceOf(cD, "Int")) | |
569 | 569 | then { | |
570 | 570 | let dG = cD | |
571 | 571 | dG | |
572 | 572 | } | |
573 | 573 | else throw("fail to cast into Int") | |
574 | 574 | } | |
575 | 575 | ||
576 | 576 | ||
577 | 577 | func dH (dD) = { | |
578 | 578 | let cD = dD | |
579 | 579 | if ($isInstanceOf(cD, "List[Any]")) | |
580 | 580 | then { | |
581 | 581 | let dI = cD | |
582 | 582 | dI | |
583 | 583 | } | |
584 | 584 | else throw("fail to cast into List[Any]") | |
585 | 585 | } | |
586 | 586 | ||
587 | 587 | ||
588 | 588 | func dJ (dD) = { | |
589 | 589 | let cD = dD | |
590 | 590 | if ($isInstanceOf(cD, "Boolean")) | |
591 | 591 | then { | |
592 | 592 | let dE = cD | |
593 | 593 | dE | |
594 | 594 | } | |
595 | 595 | else throw("fail to cast into Boolean") | |
596 | 596 | } | |
597 | 597 | ||
598 | 598 | ||
599 | 599 | func dK (dL) = { | |
600 | 600 | let cD = dL | |
601 | 601 | if (("S" == cD)) | |
602 | 602 | then cL | |
603 | 603 | else if (("M" == cD)) | |
604 | 604 | then cM | |
605 | 605 | else if (("L" == cD)) | |
606 | 606 | then cN | |
607 | 607 | else if (("XL" == cD)) | |
608 | 608 | then cO | |
609 | 609 | else if (("XXL" == cD)) | |
610 | 610 | then cP | |
611 | 611 | else throw("Unknown land size") | |
612 | 612 | } | |
613 | 613 | ||
614 | 614 | ||
615 | 615 | func dM (dE) = isDefined(parseInt(dE)) | |
616 | 616 | ||
617 | 617 | ||
618 | 618 | func dN () = "contractsBlocked" | |
619 | 619 | ||
620 | 620 | ||
621 | 621 | func dO (c) = ("lastTxIdByUser_" + c) | |
622 | 622 | ||
623 | 623 | ||
624 | 624 | func dP (dQ,dR) = { | |
625 | 625 | let dS = pow(10, 0, dR, 0, 0, DOWN) | |
626 | 626 | let dT = toString((dQ % dS)) | |
627 | 627 | let dU = drop(toString(dS), (1 + size(dT))) | |
628 | 628 | (((toString((dQ / dS)) + ".") + dU) + dT) | |
629 | 629 | } | |
630 | 630 | ||
631 | 631 | ||
632 | 632 | func dV (dW,dX,dY) = { | |
633 | 633 | let dZ = sha256((dX + dY)) | |
634 | 634 | (toInt(dZ) % dW) | |
635 | 635 | } | |
636 | 636 | ||
637 | 637 | ||
638 | 638 | let ea = { | |
639 | 639 | let cD = cB | |
640 | 640 | if ((base58'2W' == cD)) | |
641 | 641 | then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv") | |
642 | 642 | else if ((base58'2T' == cD)) | |
643 | 643 | then this | |
644 | 644 | else throw("Unknown chain") | |
645 | 645 | } | |
646 | 646 | ||
647 | 647 | let eb = { | |
648 | 648 | let cD = cB | |
649 | 649 | if ((base58'2W' == cD)) | |
650 | 650 | then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb") | |
651 | 651 | else if ((base58'2T' == cD)) | |
652 | 652 | then this | |
653 | 653 | else throw("Unknown chain") | |
654 | 654 | } | |
655 | 655 | ||
656 | 656 | let ec = { | |
657 | 657 | let cD = cB | |
658 | 658 | if ((base58'2W' == cD)) | |
659 | 659 | then if (cy) | |
660 | 660 | then base58'CWsMtTZC5BjjoL4Q1ayW4Wwb1ehGACQB6DrKyPgotKfm' | |
661 | 661 | else base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD' | |
662 | 662 | else if ((base58'2T' == cD)) | |
663 | 663 | then base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD' | |
664 | 664 | else throw("Unknown chain") | |
665 | 665 | } | |
666 | 666 | ||
667 | 667 | let ed = base64'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==' | |
668 | 668 | ||
669 | 669 | let ee = 300000 | |
670 | 670 | ||
671 | 671 | let ef = 5000000 | |
672 | 672 | ||
673 | 673 | let eg = 50 | |
674 | 674 | ||
675 | 675 | let eh = 10000000 | |
676 | 676 | ||
677 | 677 | let ei = { | |
678 | 678 | let cD = cB | |
679 | 679 | if ((base58'2W' == cD)) | |
680 | 680 | then 252289527462 | |
681 | 681 | else if ((base58'2T' == cD)) | |
682 | 682 | then 2522895274 | |
683 | 683 | else throw("Unknown chain") | |
684 | 684 | } | |
685 | 685 | ||
686 | 686 | let ej = { | |
687 | 687 | let cD = cB | |
688 | 688 | if ((base58'2W' == cD)) | |
689 | 689 | then 250000000 | |
690 | 690 | else if ((base58'2T' == cD)) | |
691 | 691 | then 250000000 | |
692 | 692 | else throw("Unknown chain") | |
693 | 693 | } | |
694 | 694 | ||
695 | 695 | let ek = 2500000000 | |
696 | 696 | ||
697 | 697 | let el = toBigInt(5) | |
698 | 698 | ||
699 | 699 | let em = toBigInt(20) | |
700 | 700 | ||
701 | 701 | let en = toBigInt((20 * 20)) | |
702 | 702 | ||
703 | 703 | let eo = toBigInt(((20 * 20) * 20)) | |
704 | 704 | ||
705 | 705 | let ep = toBigInt((((20 * 20) * 20) * 20)) | |
706 | 706 | ||
707 | 707 | let eq = toBigInt(((((20 * 20) * 20) * 20) * 20)) | |
708 | 708 | ||
709 | 709 | let er = 500 | |
710 | 710 | ||
711 | 711 | func es () = "nextLandNum" | |
712 | 712 | ||
713 | 713 | ||
714 | 714 | func et (eu) = ("lcn_" + eu) | |
715 | 715 | ||
716 | 716 | ||
717 | 717 | func ev (ew) = ("la_" + ew) | |
718 | 718 | ||
719 | 719 | ||
720 | 720 | func ex (bu,bB) = ((("ilao_" + bu) + "_") + bB) | |
721 | 721 | ||
722 | 722 | ||
723 | 723 | func ey (ew) = ("lo_" + ew) | |
724 | 724 | ||
725 | 725 | ||
726 | 726 | func ez (eu) = ("duckByCustomName_" + eu) | |
727 | 727 | ||
728 | 728 | ||
729 | 729 | func eA (eu) = ("accountByCustomName_" + eu) | |
730 | 730 | ||
731 | 731 | ||
732 | 732 | func eB () = "oldiesList" | |
733 | 733 | ||
734 | 734 | ||
735 | 735 | let eC = 0 | |
736 | 736 | ||
737 | 737 | let eD = 1 | |
738 | 738 | ||
739 | 739 | let eE = 2 | |
740 | 740 | ||
741 | 741 | let eF = 0 | |
742 | 742 | ||
743 | 743 | let eG = 5 | |
744 | 744 | ||
745 | 745 | let eH = 6 | |
746 | 746 | ||
747 | 747 | let eI = 7 | |
748 | 748 | ||
749 | 749 | func eJ (ew,dL) = ((aF + ew) + dL) | |
750 | 750 | ||
751 | 751 | ||
752 | 752 | func eK (eL,eM) = { | |
753 | 753 | let eN = if ((eL >= 0)) | |
754 | 754 | then (((eL + eM) - 1) / eM) | |
755 | 755 | else -((((-(eL) + eM) - 1) / eM)) | |
756 | 756 | (eN * cK) | |
757 | 757 | } | |
758 | 758 | ||
759 | 759 | ||
760 | 760 | func eO (eP,eQ) = { | |
761 | 761 | let eR = (((((eQ[0] + eQ[1]) + eQ[2]) + eQ[3]) + eQ[4]) + eQ[5]) | |
762 | 762 | if ((0 >= eR)) | |
763 | 763 | then throw("Zero weights sum") | |
764 | 764 | else { | |
765 | 765 | let eS = fraction(eP, cJ, eR) | |
766 | 766 | func eT (eU,eV) = (eU :+ fraction(eV, eS, cJ)) | |
767 | 767 | ||
768 | 768 | let eW = eQ | |
769 | 769 | let eX = size(eW) | |
770 | 770 | let eY = nil | |
771 | 771 | func eZ (fa,fb) = if ((fb >= eX)) | |
772 | 772 | then fa | |
773 | 773 | else eT(fa, eW[fb]) | |
774 | 774 | ||
775 | 775 | func fc (fa,fb) = if ((fb >= eX)) | |
776 | 776 | then fa | |
777 | 777 | else throw("List size exceeds 6") | |
778 | 778 | ||
779 | 779 | fc(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6) | |
780 | 780 | } | |
781 | 781 | } | |
782 | 782 | ||
783 | 783 | ||
784 | 784 | func fd (eP) = { | |
785 | 785 | let fe = split(value(getString(dx())), "_") | |
786 | 786 | if ((size(fe) != aI)) | |
787 | 787 | then throw("Wrong proportions data") | |
788 | 788 | else { | |
789 | 789 | let ff = [parseIntValue(fe[0]), parseIntValue(fe[1]), parseIntValue(fe[2]), parseIntValue(fe[3]), parseIntValue(fe[4]), parseIntValue(fe[5])] | |
790 | 790 | eO(eP, ff) | |
791 | 791 | } | |
792 | 792 | } | |
793 | 793 | ||
794 | 794 | ||
795 | 795 | func fg (fh,fi,fj) = { | |
796 | 796 | let fk = fd(fj) | |
797 | 797 | func fl (eU,dg) = { | |
798 | 798 | let fm = (parseIntValue(fi[dg]) - fk[dg]) | |
799 | 799 | if ((0 > fm)) | |
800 | 800 | then throw(((((("Not enough material idx=" + toString(dg)) + ", you have ") + fi[dg]) + ", but need ") + toString(fk[dg]))) | |
801 | 801 | else (eU :+ toString(fm)) | |
802 | 802 | } | |
803 | 803 | ||
804 | 804 | if (fh) | |
805 | 805 | then { | |
806 | 806 | let eW = cQ | |
807 | 807 | let eX = size(eW) | |
808 | 808 | let eY = nil | |
809 | 809 | func eZ (fa,fb) = if ((fb >= eX)) | |
810 | 810 | then fa | |
811 | 811 | else fl(fa, eW[fb]) | |
812 | 812 | ||
813 | 813 | func fc (fa,fb) = if ((fb >= eX)) | |
814 | 814 | then fa | |
815 | 815 | else throw("List size exceeds 6") | |
816 | 816 | ||
817 | 817 | fc(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6) | |
818 | 818 | } | |
819 | 819 | else fi | |
820 | 820 | } | |
821 | 821 | ||
822 | 822 | ||
823 | 823 | func fn (fo,fp) = if ((fp == "")) | |
824 | 824 | then $Tuple2(fo, false) | |
825 | 825 | else { | |
826 | 826 | func fq (eU,fr) = { | |
827 | 827 | let fs = split(fr, ",") | |
828 | 828 | if ((size(fs) != 2)) | |
829 | 829 | then throw("Incorrect format, should be index,amount") | |
830 | 830 | else { | |
831 | 831 | let dg = parseIntValue(fs[0]) | |
832 | 832 | if (if ((0 > dg)) | |
833 | 833 | then true | |
834 | 834 | else (dg >= size(aX))) | |
835 | 835 | then throw("Unknown product idx") | |
836 | 836 | else { | |
837 | 837 | let ft = parseIntValue(fs[1]) | |
838 | 838 | let fu = split(eU._1, (fs[0] + ":")) | |
839 | 839 | if ((size(fu) != 2)) | |
840 | 840 | then throw((("You don't have " + aT[dg]) + " equipped")) | |
841 | 841 | else { | |
842 | 842 | let fv = fu[1] | |
843 | 843 | let fw = if (dM(take(drop(fv, 1), 1))) | |
844 | 844 | then 2 | |
845 | 845 | else 1 | |
846 | 846 | let fx = parseIntValue(take(fv, fw)) | |
847 | 847 | let fy = drop(fv, fw) | |
848 | 848 | let fz = if ((fx >= ft)) | |
849 | 849 | then (fx - ft) | |
850 | 850 | else throw(((((("You equipped " + toString(fx)) + " of ") + aT[dg]) + ", but tried to use ") + toString(ft))) | |
851 | 851 | $Tuple2(((((fu[0] + fs[0]) + ":") + toString(fz)) + fy), if (eU._2) | |
852 | 852 | then true | |
853 | 853 | else if (if ((dg >= 6)) | |
854 | 854 | then (8 >= dg) | |
855 | 855 | else false) | |
856 | 856 | then (fz == 0) | |
857 | 857 | else false) | |
858 | 858 | } | |
859 | 859 | } | |
860 | 860 | } | |
861 | 861 | } | |
862 | 862 | ||
863 | 863 | let eW = split(fp, "_") | |
864 | 864 | let eX = size(eW) | |
865 | 865 | let eY = $Tuple2(fo, false) | |
866 | 866 | func eZ (fa,fb) = if ((fb >= eX)) | |
867 | 867 | then fa | |
868 | 868 | else fq(fa, eW[fb]) | |
869 | 869 | ||
870 | 870 | func fc (fa,fb) = if ((fb >= eX)) | |
871 | 871 | then fa | |
872 | 872 | else throw("List size exceeds 10") | |
873 | 873 | ||
874 | 874 | fc(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
875 | 875 | } | |
876 | 876 | ||
877 | 877 | ||
878 | 878 | func fA (fB) = { | |
879 | 879 | let fC = if ((fB == "")) | |
880 | 880 | then nil | |
881 | 881 | else split_4C(fB, "_") | |
882 | 882 | func fD (eU,ct) = { | |
883 | 883 | let fE = (size(eU) / 8) | |
884 | 884 | let fx = if ((size(fC) > fE)) | |
885 | 885 | then parseIntValue(fC[fE]) | |
886 | 886 | else 0 | |
887 | 887 | (eU + toBytes(fx)) | |
888 | 888 | } | |
889 | 889 | ||
890 | 890 | let eW = aX | |
891 | 891 | let eX = size(eW) | |
892 | 892 | let eY = base58'' | |
893 | 893 | func eZ (fa,fb) = if ((fb >= eX)) | |
894 | 894 | then fa | |
895 | 895 | else fD(fa, eW[fb]) | |
896 | 896 | ||
897 | 897 | func fc (fa,fb) = if ((fb >= eX)) | |
898 | 898 | then fa | |
899 | 899 | else throw("List size exceeds 50") | |
900 | 900 | ||
901 | 901 | fc(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eY, 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) | |
902 | 902 | } | |
903 | 903 | ||
904 | 904 | ||
905 | 905 | func fF (fG) = { | |
906 | 906 | func fH (eU,ct) = { | |
907 | 907 | let fE = size(eU) | |
908 | 908 | let fI = take(drop(fG, (8 * fE)), 8) | |
909 | 909 | (eU :+ toString(toInt(fI))) | |
910 | 910 | } | |
911 | 911 | ||
912 | 912 | makeString_2C({ | |
913 | 913 | let eW = aX | |
914 | 914 | let eX = size(eW) | |
915 | 915 | let eY = nil | |
916 | 916 | func eZ (fa,fb) = if ((fb >= eX)) | |
917 | 917 | then fa | |
918 | 918 | else fH(fa, eW[fb]) | |
919 | 919 | ||
920 | 920 | func fc (fa,fb) = if ((fb >= eX)) | |
921 | 921 | then fa | |
922 | 922 | else throw("List size exceeds 50") | |
923 | 923 | ||
924 | 924 | fc(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eY, 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) | |
925 | 925 | }, "_") | |
926 | 926 | } | |
927 | 927 | ||
928 | 928 | ||
929 | 929 | func fJ (fK,fL) = { | |
930 | 930 | func fM (eU,fE) = { | |
931 | 931 | let fN = if ((size(fK) > (7 + fE))) | |
932 | 932 | then fK[(7 + fE)] | |
933 | 933 | else 0 | |
934 | 934 | if ((parseIntValue(fL[fE]) > (fK[fE] + fN))) | |
935 | 935 | then throw(("Requirement not satisfied: " + k[fE])) | |
936 | 936 | else true | |
937 | 937 | } | |
938 | 938 | ||
939 | 939 | let eW = [0, 1, 2, 3, 4, 5, 6] | |
940 | 940 | let eX = size(eW) | |
941 | 941 | let eY = false | |
942 | 942 | func eZ (fa,fb) = if ((fb >= eX)) | |
943 | 943 | then fa | |
944 | 944 | else fM(fa, eW[fb]) | |
945 | 945 | ||
946 | 946 | func fc (fa,fb) = if ((fb >= eX)) | |
947 | 947 | then fa | |
948 | 948 | else throw("List size exceeds 7") | |
949 | 949 | ||
950 | 950 | fc(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6), 7) | |
951 | 951 | } | |
952 | 952 | ||
953 | 953 | ||
954 | 954 | func fO (fP,fC,fQ,fK,fR,fS) = { | |
955 | 955 | let fs = split(fP, ":") | |
956 | 956 | if ((size(fs) != 2)) | |
957 | 957 | then throw("Incorrect format, should be index:amount") | |
958 | 958 | else if (if (!(fQ)) | |
959 | 959 | then (size(fs[0]) != 2) | |
960 | 960 | else false) | |
961 | 961 | then throw("Product idx should be 2 digits, zero padded") | |
962 | 962 | else { | |
963 | 963 | let fT = parseIntValue(fs[0]) | |
964 | 964 | let fU = parseIntValue(fs[1]) | |
965 | 965 | if (!(containsElement(aW, fT))) | |
966 | 966 | then throw((("Product '" + aT[fT]) + "' cannot be used for land defense")) | |
967 | 967 | else if ((0 > fU)) | |
968 | 968 | then throw("Count can't be negative") | |
969 | 969 | else if ((fU > u)) | |
970 | 970 | then throw(((("Can't put more than " + toString(u)) + " of ") + aT[fT])) | |
971 | 971 | else if ((fU == 0)) | |
972 | 972 | then $Tuple3(fC, fR, fS) | |
973 | 973 | else { | |
974 | 974 | let fV = take(fC, (8 * fT)) | |
975 | 975 | let fx = toInt(take(drop(fC, (8 * fT)), 8)) | |
976 | 976 | let fy = drop(fC, (8 * (fT + 1))) | |
977 | 977 | let ct = split(aX[fT], "_") | |
978 | 978 | if (if (!(fQ)) | |
979 | 979 | then (fU > fx) | |
980 | 980 | else false) | |
981 | 981 | then throw(((((("You have " + toString(fx)) + " of ") + aT[fT]) + ", but tried to use ") + toString(fU))) | |
982 | 982 | else { | |
983 | 983 | let fz = if (if (!(fQ)) | |
984 | 984 | then fJ(fK, split(ct[ba], ",")) | |
985 | 985 | else false) | |
986 | 986 | then (fx - fU) | |
987 | 987 | else (fx + fU) | |
988 | 988 | let fW = (eK(fz, bc) - eK(fx, bc)) | |
989 | 989 | $Tuple3(((fV + toBytes(fz)) + fy), (fR + fW), (fS - fW)) | |
990 | 990 | } | |
991 | 991 | } | |
992 | 992 | } | |
993 | 993 | } | |
994 | 994 | ||
995 | 995 | ||
996 | 996 | func fX (fP,fC,fQ,fY,fZ,ga,fK) = { | |
997 | 997 | let fs = split(fP, ":") | |
998 | 998 | if ((size(fs) != 2)) | |
999 | 999 | then throw("Incorrect format, should be index:amount") | |
1000 | 1000 | else if (if (!(fQ)) | |
1001 | 1001 | then (size(fs[0]) != 2) | |
1002 | 1002 | else false) | |
1003 | 1003 | then throw("Product idx should be 2 digits, zero padded") | |
1004 | 1004 | else { | |
1005 | 1005 | let fT = parseIntValue(fs[0]) | |
1006 | 1006 | let fU = parseIntValue(fs[1]) | |
1007 | 1007 | if (if ((0 > fT)) | |
1008 | 1008 | then true | |
1009 | 1009 | else (fT >= size(aX))) | |
1010 | 1010 | then throw("Unknown product idx") | |
1011 | 1011 | else if ((0 > fU)) | |
1012 | 1012 | then throw("Count can't be negative") | |
1013 | 1013 | else if ((fU > u)) | |
1014 | 1014 | then throw(((("Can't put more than " + toString(u)) + " of ") + aT[fT])) | |
1015 | 1015 | else if ((fU == 0)) | |
1016 | 1016 | then $Tuple2(fC, false) | |
1017 | 1017 | else { | |
1018 | 1018 | let fV = take(fC, (8 * fT)) | |
1019 | 1019 | let fx = toInt(take(drop(fC, (8 * fT)), 8)) | |
1020 | 1020 | let fy = drop(fC, (8 * (fT + 1))) | |
1021 | 1021 | let ct = split(aX[fT], "_") | |
1022 | 1022 | if (if (!(fQ)) | |
1023 | 1023 | then (fU > fx) | |
1024 | 1024 | else false) | |
1025 | 1025 | then throw(((((("You have " + toString(fx)) + " of ") + aT[fT]) + ", but tried to use ") + toString(fU))) | |
1026 | 1026 | else { | |
1027 | 1027 | let gb = if (if (!(fQ)) | |
1028 | 1028 | then fJ(fK, split(ct[ba], ",")) | |
1029 | 1029 | else false) | |
1030 | 1030 | then { | |
1031 | 1031 | let gc = ct[bb] | |
1032 | 1032 | if ((gc == "")) | |
1033 | 1033 | then throw("Item cannot be equipped") | |
1034 | 1034 | else { | |
1035 | 1035 | let gd = parseIntValue(gc) | |
1036 | 1036 | let ge = (gd / 100) | |
1037 | 1037 | if ((fY != ge)) | |
1038 | 1038 | then throw("Segment incompatible") | |
1039 | 1039 | else { | |
1040 | 1040 | let gf = ((gd % 100) / 10) | |
1041 | 1041 | if ((fZ != gf)) | |
1042 | 1042 | then throw("Slot incompatible") | |
1043 | 1043 | else { | |
1044 | 1044 | let gg = (gd % 10) | |
1045 | 1045 | if (if ((ga != 0)) | |
1046 | 1046 | then (gg > 1) | |
1047 | 1047 | else false) | |
1048 | 1048 | then throw("Big items should occupy slot 0") | |
1049 | 1049 | else (gg > 1) | |
1050 | 1050 | } | |
1051 | 1051 | } | |
1052 | 1052 | } | |
1053 | 1053 | } | |
1054 | 1054 | else false | |
1055 | 1055 | $Tuple2(((fV + toBytes((fx + (if (fQ) | |
1056 | 1056 | then fU | |
1057 | 1057 | else -(fU))))) + fy), gb) | |
1058 | 1058 | } | |
1059 | 1059 | } | |
1060 | 1060 | } | |
1061 | 1061 | } | |
1062 | 1062 | ||
1063 | 1063 | ||
1064 | 1064 | func gh (gi,gj,fQ,fY,fZ,gk) = if ((gi != "")) | |
1065 | 1065 | then { | |
1066 | 1066 | let gl = split(gi, ",") | |
1067 | 1067 | if ((size(gl) > t)) | |
1068 | 1068 | then throw("Wrong slots format") | |
1069 | 1069 | else { | |
1070 | 1070 | let gm = gl[0] | |
1071 | 1071 | let gn = if ((size(gl) > 1)) | |
1072 | 1072 | then gl[1] | |
1073 | 1073 | else "" | |
1074 | 1074 | if (if ((gm == "")) | |
1075 | 1075 | then (gn == "") | |
1076 | 1076 | else false) | |
1077 | 1077 | then gj | |
1078 | 1078 | else { | |
1079 | 1079 | let go = if ((gm != "")) | |
1080 | 1080 | then fX(gm, gj, fQ, fY, fZ, 0, gk) | |
1081 | 1081 | else $Tuple2(gj, false) | |
1082 | 1082 | if ((gn != "")) | |
1083 | 1083 | then if (go._2) | |
1084 | 1084 | then throw("Big item already occupies slot") | |
1085 | 1085 | else fX(gn, go._1, fQ, fY, fZ, 1, gk)._1 | |
1086 | 1086 | else go._1 | |
1087 | 1087 | } | |
1088 | 1088 | } | |
1089 | 1089 | } | |
1090 | 1090 | else gj | |
1091 | 1091 | ||
1092 | 1092 | ||
1093 | 1093 | func gp (gq,gr,fQ,gk) = { | |
1094 | 1094 | func fY (eU,gs) = { | |
1095 | 1095 | let fE = eU._1 | |
1096 | 1096 | let fZ = split(gs, ";") | |
1097 | 1097 | if ((size(fZ) != s)) | |
1098 | 1098 | then throw("Wrong segment format") | |
1099 | 1099 | else { | |
1100 | 1100 | let gt = fZ[0] | |
1101 | 1101 | let gu = fZ[1] | |
1102 | 1102 | if (if ((gt == "")) | |
1103 | 1103 | then (gu == "") | |
1104 | 1104 | else false) | |
1105 | 1105 | then $Tuple2((fE + 1), eU._2) | |
1106 | 1106 | else { | |
1107 | 1107 | let gv = gh(gt, eU._2, fQ, fE, 0, gk) | |
1108 | 1108 | $Tuple2((fE + 1), gh(gu, gv, fQ, fE, 1, gk)) | |
1109 | 1109 | } | |
1110 | 1110 | } | |
1111 | 1111 | } | |
1112 | 1112 | ||
1113 | 1113 | ( let eW = gq | |
1114 | 1114 | let eX = size(eW) | |
1115 | 1115 | let eY = $Tuple2(0, gr) | |
1116 | 1116 | func eZ (fa,fb) = if ((fb >= eX)) | |
1117 | 1117 | then fa | |
1118 | 1118 | else fY(fa, eW[fb]) | |
1119 | 1119 | ||
1120 | 1120 | func fc (fa,fb) = if ((fb >= eX)) | |
1121 | 1121 | then fa | |
1122 | 1122 | else throw("List size exceeds 6") | |
1123 | 1123 | ||
1124 | 1124 | fc(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6))._2 | |
1125 | 1125 | } | |
1126 | 1126 | ||
1127 | 1127 | ||
1128 | 1128 | func gw (gq,gr,fR,fS,fQ,fK) = if ((3 > size(gq))) | |
1129 | 1129 | then throw("At least duck, mines and traps parts are required") | |
1130 | 1130 | else { | |
1131 | 1131 | func fY (eU,gs) = { | |
1132 | 1132 | let fE = eU._1 | |
1133 | 1133 | if ((fE == 0)) | |
1134 | 1134 | then $Tuple4((fE + 1), eU._2, eU._3, eU._4) | |
1135 | 1135 | else { | |
1136 | 1136 | let gx = fO(gs, eU._2, fQ, fK, eU._3, eU._4) | |
1137 | 1137 | $Tuple4((fE + 1), gx._1, gx._2, gx._3) | |
1138 | 1138 | } | |
1139 | 1139 | } | |
1140 | 1140 | ||
1141 | 1141 | let gy = { | |
1142 | 1142 | let eW = gq | |
1143 | 1143 | let eX = size(eW) | |
1144 | 1144 | let eY = $Tuple4(0, gr, fR, fS) | |
1145 | 1145 | func eZ (fa,fb) = if ((fb >= eX)) | |
1146 | 1146 | then fa | |
1147 | 1147 | else fY(fa, eW[fb]) | |
1148 | 1148 | ||
1149 | 1149 | func fc (fa,fb) = if ((fb >= eX)) | |
1150 | 1150 | then fa | |
1151 | 1151 | else throw("List size exceeds 10") | |
1152 | 1152 | ||
1153 | 1153 | fc(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
1154 | 1154 | } | |
1155 | 1155 | $Tuple3(gy._2, gy._3, gy._4) | |
1156 | 1156 | } | |
1157 | 1157 | ||
1158 | 1158 | ||
1159 | 1159 | func gz (B) = { | |
1160 | 1160 | let gA = G(B) | |
1161 | 1161 | let gB = split(valueOrElse(getString(gA), ",;,_,;,_,;,_,;,_,;,_,;,"), "_") | |
1162 | 1162 | let gC = gp(gB, ed, true, nil) | |
1163 | 1163 | let gD = split(gB[q], ";")[1] | |
1164 | 1164 | let ar = if ((gD == "")) | |
1165 | 1165 | then 0 | |
1166 | 1166 | else { | |
1167 | 1167 | let gE = split(gD, ",")[0] | |
1168 | 1168 | if ((gE == "")) | |
1169 | 1169 | then 0 | |
1170 | 1170 | else { | |
1171 | 1171 | let fP = split(gE, ":") | |
1172 | 1172 | let dg = fP[0] | |
1173 | 1173 | let gF = fP[1] | |
1174 | 1174 | if (if (if (if (if ((dg == "06")) | |
1175 | 1175 | then true | |
1176 | 1176 | else (dg == "07")) | |
1177 | 1177 | then true | |
1178 | 1178 | else (dg == "08")) | |
1179 | 1179 | then (gF != "") | |
1180 | 1180 | else false) | |
1181 | 1181 | then (parseIntValue(gF) > 0) | |
1182 | 1182 | else false) | |
1183 | 1183 | then parseIntValue(split(aX[parseIntValue(dg)], "_")[aZ]) | |
1184 | 1184 | else 0 | |
1185 | 1185 | } | |
1186 | 1186 | } | |
1187 | 1187 | let gk = ap(this, B, ar, true) | |
1188 | 1188 | let gG = gp(gB, gC, false, gk) | |
1189 | 1189 | (gG == gG) | |
1190 | 1190 | } | |
1191 | 1191 | ||
1192 | 1192 | ||
1193 | 1193 | func gH (gI,gJ,gK,gL) = if ((size(gI) != aI)) | |
1194 | 1194 | then throw("Wrong proportions data") | |
1195 | 1195 | else { | |
1196 | 1196 | func gM (eU,gN) = { | |
1197 | 1197 | let fm = (parseIntValue(gI[gN]) + ((gL * gJ[gN]) * gK)) | |
1198 | 1198 | if ((0 > fm)) | |
1199 | 1199 | then throw(((((((("Panic! Pieces of type=" + toString(gN)) + ", sign=") + toString(gL)) + ", terrainCounts[i]=") + toString(gJ[gN])) + ", landSizeIndex=") + toString(gK))) | |
1200 | 1200 | else (eU :+ toString(fm)) | |
1201 | 1201 | } | |
1202 | 1202 | ||
1203 | 1203 | let eW = cQ | |
1204 | 1204 | let eX = size(eW) | |
1205 | 1205 | let eY = nil | |
1206 | 1206 | func eZ (fa,fb) = if ((fb >= eX)) | |
1207 | 1207 | then fa | |
1208 | 1208 | else gM(fa, eW[fb]) | |
1209 | 1209 | ||
1210 | 1210 | func fc (fa,fb) = if ((fb >= eX)) | |
1211 | 1211 | then fa | |
1212 | 1212 | else throw("List size exceeds 6") | |
1213 | 1213 | ||
1214 | 1214 | fc(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6) | |
1215 | 1215 | } | |
1216 | 1216 | ||
1217 | 1217 | ||
1218 | 1218 | func gO (gJ,gK,gL) = { | |
1219 | 1219 | let gI = split(valueOrElse(getString(dx()), "0_0_0_0_0_0"), "_") | |
1220 | 1220 | makeString(gH(gI, gJ, gK, gL), "_") | |
1221 | 1221 | } | |
1222 | 1222 | ||
1223 | 1223 | ||
1224 | 1224 | func gP (gQ) = [(size(split(gQ, "A")) - 1), (size(split(gQ, "B")) - 1), (size(split(gQ, "C")) - 1), (size(split(gQ, "D")) - 1), (size(split(gQ, "E")) - 1), (size(split(gQ, "F")) - 1)] | |
1225 | 1225 | ||
1226 | 1226 | ||
1227 | 1227 | func gR (gS,gJ,gT,gK,gU) = { | |
1228 | 1228 | func gV (eU,gN) = { | |
1229 | 1229 | let gW = ((fraction(gT, gU, a) * gJ[gN]) * gK) | |
1230 | 1230 | (eU :+ toString((parseIntValue(gS[gN]) + gW))) | |
1231 | 1231 | } | |
1232 | 1232 | ||
1233 | 1233 | let ff = { | |
1234 | 1234 | let eW = cQ | |
1235 | 1235 | let eX = size(eW) | |
1236 | 1236 | let eY = nil | |
1237 | 1237 | func eZ (fa,fb) = if ((fb >= eX)) | |
1238 | 1238 | then fa | |
1239 | 1239 | else gV(fa, eW[fb]) | |
1240 | 1240 | ||
1241 | 1241 | func fc (fa,fb) = if ((fb >= eX)) | |
1242 | 1242 | then fa | |
1243 | 1243 | else throw("List size exceeds 6") | |
1244 | 1244 | ||
1245 | 1245 | fc(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6) | |
1246 | 1246 | } | |
1247 | 1247 | makeString(ff, "_") | |
1248 | 1248 | } | |
1249 | 1249 | ||
1250 | 1250 | ||
1251 | 1251 | func gX (gJ,gT,gK,gU) = { | |
1252 | 1252 | func gV (eU,gN) = { | |
1253 | 1253 | let gW = ((fraction(gT, gU, a) * gJ[gN]) * gK) | |
1254 | 1254 | $Tuple2((eU._1 :+ gW), (eU._2 + gW)) | |
1255 | 1255 | } | |
1256 | 1256 | ||
1257 | 1257 | let eW = cQ | |
1258 | 1258 | let eX = size(eW) | |
1259 | 1259 | let eY = $Tuple2(nil, 0) | |
1260 | 1260 | func eZ (fa,fb) = if ((fb >= eX)) | |
1261 | 1261 | then fa | |
1262 | 1262 | else gV(fa, eW[fb]) | |
1263 | 1263 | ||
1264 | 1264 | func fc (fa,fb) = if ((fb >= eX)) | |
1265 | 1265 | then fa | |
1266 | 1266 | else throw("List size exceeds 6") | |
1267 | 1267 | ||
1268 | 1268 | fc(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6) | |
1269 | 1269 | } | |
1270 | 1270 | ||
1271 | 1271 | ||
1272 | 1272 | func gY (gZ,ha,hb,hc) = { | |
1273 | 1273 | let hd = hb._1 | |
1274 | 1274 | let he = hb._2 | |
1275 | 1275 | if ((he == 0)) | |
1276 | 1276 | then $Tuple2(makeString(gZ, "_"), makeString(ha, "_")) | |
1277 | 1277 | else if ((hc >= he)) | |
1278 | 1278 | then { | |
1279 | 1279 | func hf (eU,gN) = (eU :+ toString((parseIntValue(gZ[gN]) + hd[gN]))) | |
1280 | 1280 | ||
1281 | 1281 | let ff = { | |
1282 | 1282 | let eW = cQ | |
1283 | 1283 | let eX = size(eW) | |
1284 | 1284 | let eY = nil | |
1285 | 1285 | func eZ (fa,fb) = if ((fb >= eX)) | |
1286 | 1286 | then fa | |
1287 | 1287 | else hf(fa, eW[fb]) | |
1288 | 1288 | ||
1289 | 1289 | func fc (fa,fb) = if ((fb >= eX)) | |
1290 | 1290 | then fa | |
1291 | 1291 | else throw("List size exceeds 6") | |
1292 | 1292 | ||
1293 | 1293 | fc(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6) | |
1294 | 1294 | } | |
1295 | 1295 | $Tuple2(makeString(ff, "_"), makeString(ha, "_")) | |
1296 | 1296 | } | |
1297 | 1297 | else { | |
1298 | 1298 | func hg (eU,gN) = { | |
1299 | 1299 | let hh = fraction(hd[gN], hc, he) | |
1300 | 1300 | $Tuple2((eU._1 :+ toString((parseIntValue(gZ[gN]) + hh))), (eU._2 :+ toString(((parseIntValue(ha[gN]) + hd[gN]) - hh)))) | |
1301 | 1301 | } | |
1302 | 1302 | ||
1303 | 1303 | let ff = { | |
1304 | 1304 | let eW = cQ | |
1305 | 1305 | let eX = size(eW) | |
1306 | 1306 | let eY = $Tuple2(nil, nil) | |
1307 | 1307 | func eZ (fa,fb) = if ((fb >= eX)) | |
1308 | 1308 | then fa | |
1309 | 1309 | else hg(fa, eW[fb]) | |
1310 | 1310 | ||
1311 | 1311 | func fc (fa,fb) = if ((fb >= eX)) | |
1312 | 1312 | then fa | |
1313 | 1313 | else throw("List size exceeds 6") | |
1314 | 1314 | ||
1315 | 1315 | fc(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6) | |
1316 | 1316 | } | |
1317 | 1317 | $Tuple2(makeString(ff._1, "_"), makeString(ff._2, "_")) | |
1318 | 1318 | } | |
1319 | 1319 | } | |
1320 | 1320 | ||
1321 | 1321 | ||
1322 | 1322 | func hi (hj) = if ((hj >= toBigInt(0))) | |
1323 | 1323 | then hj | |
1324 | 1324 | else -(hj) | |
1325 | 1325 | ||
1326 | 1326 | ||
1327 | 1327 | let hk = [[35, 18, 30, 7, 6, 24], [29, 18, 29, 7, 8, 29], [6, 18, 29, 8, 30, 29], [6, 28, 6, 48, 26, 6], [24, 18, 6, 30, 30, 12]] | |
1328 | 1328 | ||
1329 | 1329 | let hl = [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] | |
1330 | 1330 | ||
1331 | 1331 | let hm = ["A", "B", "C", "D", "E", "F"] | |
1332 | 1332 | ||
1333 | 1333 | func hn (eU,ho) = (eU + parseIntValue(ho)) | |
1334 | 1334 | ||
1335 | 1335 | ||
1336 | 1336 | func hp (hq,hr) = if ((hq == 0)) | |
1337 | 1337 | then throw("maxRand should be non-zero") | |
1338 | 1338 | else { | |
1339 | 1339 | let hs = toBigInt(hq) | |
1340 | 1340 | $Tuple2(toInt((hr % hs)), (hr / hs)) | |
1341 | 1341 | } | |
1342 | 1342 | ||
1343 | 1343 | ||
1344 | 1344 | func ht (hu,hv,hw) = { | |
1345 | 1345 | func hx (eU,ho) = if (eU._1) | |
1346 | 1346 | then eU | |
1347 | 1347 | else { | |
1348 | 1348 | let hy = ((eU._3 - ho) - hw) | |
1349 | 1349 | if ((0 > hy)) | |
1350 | 1350 | then $Tuple3(true, eU._2, 0) | |
1351 | 1351 | else $Tuple3(false, (eU._2 + 1), hy) | |
1352 | 1352 | } | |
1353 | 1353 | ||
1354 | 1354 | let ff = { | |
1355 | 1355 | let eW = hu | |
1356 | 1356 | let eX = size(eW) | |
1357 | 1357 | let eY = $Tuple3(false, 0, hv) | |
1358 | 1358 | func eZ (fa,fb) = if ((fb >= eX)) | |
1359 | 1359 | then fa | |
1360 | 1360 | else hx(fa, eW[fb]) | |
1361 | 1361 | ||
1362 | 1362 | func fc (fa,fb) = if ((fb >= eX)) | |
1363 | 1363 | then fa | |
1364 | 1364 | else throw("List size exceeds 6") | |
1365 | 1365 | ||
1366 | 1366 | fc(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6) | |
1367 | 1367 | } | |
1368 | 1368 | ff._2 | |
1369 | 1369 | } | |
1370 | 1370 | ||
1371 | 1371 | ||
1372 | 1372 | func hz (hA,gK) = { | |
1373 | 1373 | func hB (hC,hD) = { | |
1374 | 1374 | let fx = split(valueOrElse(getString(dy(hD)), "0_0_0_0_0_0"), "_") | |
1375 | 1375 | let hE = { | |
1376 | 1376 | let eW = fx | |
1377 | 1377 | let eX = size(eW) | |
1378 | 1378 | let eY = 0 | |
1379 | 1379 | func eZ (fa,fb) = if ((fb >= eX)) | |
1380 | 1380 | then fa | |
1381 | 1381 | else hn(fa, eW[fb]) | |
1382 | 1382 | ||
1383 | 1383 | func fc (fa,fb) = if ((fb >= eX)) | |
1384 | 1384 | then fa | |
1385 | 1385 | else throw("List size exceeds 6") | |
1386 | 1386 | ||
1387 | 1387 | fc(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6) | |
1388 | 1388 | } | |
1389 | 1389 | $Tuple2((hC._1 :+ hE), (hC._2 + hE)) | |
1390 | 1390 | } | |
1391 | 1391 | ||
1392 | 1392 | let hF = { | |
1393 | 1393 | let eW = aU | |
1394 | 1394 | let eX = size(eW) | |
1395 | 1395 | let eY = $Tuple2(nil, 0) | |
1396 | 1396 | func eZ (fa,fb) = if ((fb >= eX)) | |
1397 | 1397 | then fa | |
1398 | 1398 | else hB(fa, eW[fb]) | |
1399 | 1399 | ||
1400 | 1400 | func fc (fa,fb) = if ((fb >= eX)) | |
1401 | 1401 | then fa | |
1402 | 1402 | else throw("List size exceeds 5") | |
1403 | 1403 | ||
1404 | 1404 | fc(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5) | |
1405 | 1405 | } | |
1406 | 1406 | let hG = hF._1 | |
1407 | 1407 | let eP = hF._2 | |
1408 | 1408 | let hH = max(hG) | |
1409 | 1409 | let hI = ((hH * 5) - eP) | |
1410 | 1410 | let hJ = (hI / 50) | |
1411 | 1411 | let hK = if ((hI == 0)) | |
1412 | 1412 | then hp(5, hA) | |
1413 | 1413 | else { | |
1414 | 1414 | let hL = hp((hI + (hJ * 5)), hA) | |
1415 | 1415 | let ff = hL._1 | |
1416 | 1416 | let hM = hL._2 | |
1417 | 1417 | func hN (eU,ho) = (eU :+ (hH - ho)) | |
1418 | 1418 | ||
1419 | 1419 | let hO = { | |
1420 | 1420 | let eW = hG | |
1421 | 1421 | let eX = size(eW) | |
1422 | 1422 | let eY = nil | |
1423 | 1423 | func hP (fa,fb) = if ((fb >= eX)) | |
1424 | 1424 | then fa | |
1425 | 1425 | else hN(fa, eW[fb]) | |
1426 | 1426 | ||
1427 | 1427 | func hQ (fa,fb) = if ((fb >= eX)) | |
1428 | 1428 | then fa | |
1429 | 1429 | else throw("List size exceeds 6") | |
1430 | 1430 | ||
1431 | 1431 | hQ(hP(hP(hP(hP(hP(hP(eY, 0), 1), 2), 3), 4), 5), 6) | |
1432 | 1432 | } | |
1433 | 1433 | $Tuple2(ht(hO, ff, hJ), hM) | |
1434 | 1434 | } | |
1435 | 1435 | let hR = hK._1 | |
1436 | 1436 | let hS = hK._2 | |
1437 | 1437 | let hT = hk[hR] | |
1438 | 1438 | let hU = split(valueOrElse(getString(dy(aU[hR])), "0_0_0_0_0_0"), "_") | |
1439 | 1439 | func hV (eU,ho) = (eU :+ parseIntValue(ho)) | |
1440 | 1440 | ||
1441 | 1441 | let hW = { | |
1442 | 1442 | let eW = hU | |
1443 | 1443 | let eX = size(eW) | |
1444 | 1444 | let eY = nil | |
1445 | 1445 | func hP (fa,fb) = if ((fb >= eX)) | |
1446 | 1446 | then fa | |
1447 | 1447 | else hV(fa, eW[fb]) | |
1448 | 1448 | ||
1449 | 1449 | func hQ (fa,fb) = if ((fb >= eX)) | |
1450 | 1450 | then fa | |
1451 | 1451 | else throw("List size exceeds 6") | |
1452 | 1452 | ||
1453 | 1453 | hQ(hP(hP(hP(hP(hP(hP(eY, 0), 1), 2), 3), 4), 5), 6) | |
1454 | 1454 | } | |
1455 | - | let | |
1456 | - | func | |
1457 | - | func | |
1458 | - | ||
1459 | - | let | |
1455 | + | let hX = hG[hR] | |
1456 | + | func hY (hC,hZ) = { | |
1457 | + | func ia (eU,fE) = (eU :+ ((hC._2[fE] * 120) - (hT[fE] * hC._3))) | |
1458 | + | ||
1459 | + | let ib = { | |
1460 | 1460 | let eW = cQ | |
1461 | 1461 | let eX = size(eW) | |
1462 | 1462 | let eY = nil | |
1463 | - | func ib (fa,fb) = if ((fb >= eX)) | |
1464 | - | then fa | |
1465 | - | else hZ(fa, eW[fb]) | |
1466 | - | ||
1467 | 1463 | func ic (fa,fb) = if ((fb >= eX)) | |
1468 | 1464 | then fa | |
1465 | + | else ia(fa, eW[fb]) | |
1466 | + | ||
1467 | + | func id (fa,fb) = if ((fb >= eX)) | |
1468 | + | then fa | |
1469 | 1469 | else throw("List size exceeds 6") | |
1470 | 1470 | ||
1471 | - | ic( | |
1472 | - | } | |
1473 | - | let | |
1474 | - | func | |
1475 | - | let dE = ( | |
1471 | + | id(ic(ic(ic(ic(ic(ic(eY, 0), 1), 2), 3), 4), 5), 6) | |
1472 | + | } | |
1473 | + | let ie = max(ib) | |
1474 | + | func if (eU,ho) = { | |
1475 | + | let dE = (ie - ho) | |
1476 | 1476 | $Tuple2((eU._1 :+ dE), (eU._2 + dE)) | |
1477 | 1477 | } | |
1478 | 1478 | ||
1479 | - | let | |
1480 | - | let eW = | |
1479 | + | let ig = { | |
1480 | + | let eW = ib | |
1481 | 1481 | let eX = size(eW) | |
1482 | 1482 | let eY = $Tuple2(nil, 0) | |
1483 | - | func ig (fa,fb) = if ((fb >= eX)) | |
1484 | - | then fa | |
1485 | - | else ie(fa, eW[fb]) | |
1486 | - | ||
1487 | 1483 | func ih (fa,fb) = if ((fb >= eX)) | |
1488 | 1484 | then fa | |
1485 | + | else if(fa, eW[fb]) | |
1486 | + | ||
1487 | + | func ii (fa,fb) = if ((fb >= eX)) | |
1488 | + | then fa | |
1489 | 1489 | else throw("List size exceeds 6") | |
1490 | 1490 | ||
1491 | - | ih( | |
1492 | - | } | |
1493 | - | let | |
1494 | - | let | |
1495 | - | let | |
1496 | - | let | |
1491 | + | ii(ih(ih(ih(ih(ih(ih(eY, 0), 1), 2), 3), 4), 5), 6) | |
1492 | + | } | |
1493 | + | let ij = ig._1 | |
1494 | + | let ik = ig._2 | |
1495 | + | let il = (ik / 60) | |
1496 | + | let im = if ((ik == 0)) | |
1497 | 1497 | then hp(6, hC._4) | |
1498 | 1498 | else { | |
1499 | - | let | |
1500 | - | let ff = | |
1501 | - | let hM = | |
1502 | - | $Tuple2(ht( | |
1499 | + | let in = hp((ik + (il * 6)), hC._4) | |
1500 | + | let ff = in._1 | |
1501 | + | let hM = in._2 | |
1502 | + | $Tuple2(ht(ij, ff, il), hM) | |
1503 | 1503 | } | |
1504 | - | let dg = | |
1505 | - | let | |
1506 | - | func | |
1504 | + | let dg = im._1 | |
1505 | + | let io = im._2 | |
1506 | + | func ip (eU,fE) = (eU :+ (hC._2[fE] + (if ((fE == dg)) | |
1507 | 1507 | then gK | |
1508 | 1508 | else 0))) | |
1509 | 1509 | ||
1510 | - | let | |
1510 | + | let iq = { | |
1511 | 1511 | let eW = cQ | |
1512 | 1512 | let eX = size(eW) | |
1513 | 1513 | let eY = nil | |
1514 | - | func iq (fa,fb) = if ((fb >= eX)) | |
1515 | - | then fa | |
1516 | - | else io(fa, eW[fb]) | |
1517 | - | ||
1518 | 1514 | func ir (fa,fb) = if ((fb >= eX)) | |
1519 | 1515 | then fa | |
1516 | + | else ip(fa, eW[fb]) | |
1517 | + | ||
1518 | + | func is (fa,fb) = if ((fb >= eX)) | |
1519 | + | then fa | |
1520 | 1520 | else throw("List size exceeds 6") | |
1521 | 1521 | ||
1522 | - | ir( | |
1523 | - | } | |
1524 | - | $Tuple4((hC._1 :+ hm[dg]), | |
1522 | + | is(ir(ir(ir(ir(ir(ir(eY, 0), 1), 2), 3), 4), 5), 6) | |
1523 | + | } | |
1524 | + | $Tuple4((hC._1 :+ hm[dg]), iq, (hC._3 + gK), io) | |
1525 | 1525 | } | |
1526 | 1526 | ||
1527 | 1527 | let fm = { | |
1528 | 1528 | let eW = hl | |
1529 | 1529 | let eX = size(eW) | |
1530 | - | let eY = $Tuple4(nil, hW, hE, hS) | |
1531 | - | func ib (fa,fb) = if ((fb >= eX)) | |
1532 | - | then fa | |
1533 | - | else hX(fa, eW[fb]) | |
1534 | - | ||
1530 | + | let eY = $Tuple4(nil, hW, hX, hS) | |
1535 | 1531 | func ic (fa,fb) = if ((fb >= eX)) | |
1536 | 1532 | then fa | |
1533 | + | else hY(fa, eW[fb]) | |
1534 | + | ||
1535 | + | func id (fa,fb) = if ((fb >= eX)) | |
1536 | + | then fa | |
1537 | 1537 | else throw("List size exceeds 25") | |
1538 | 1538 | ||
1539 | - | ic( | |
1539 | + | id(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(eY, 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) | |
1540 | 1540 | } | |
1541 | - | func | |
1541 | + | func it (eU,fE) = (eU + fm._1[fE]) | |
1542 | 1542 | ||
1543 | 1543 | $Tuple2(hR, { | |
1544 | 1544 | let eW = hl | |
1545 | 1545 | let eX = size(eW) | |
1546 | 1546 | let eY = "" | |
1547 | - | func ig (fa,fb) = if ((fb >= eX)) | |
1548 | - | then fa | |
1549 | - | else is(fa, eW[fb]) | |
1550 | - | ||
1551 | 1547 | func ih (fa,fb) = if ((fb >= eX)) | |
1552 | 1548 | then fa | |
1549 | + | else it(fa, eW[fb]) | |
1550 | + | ||
1551 | + | func ii (fa,fb) = if ((fb >= eX)) | |
1552 | + | then fa | |
1553 | 1553 | else throw("List size exceeds 25") | |
1554 | 1554 | ||
1555 | - | ih( | |
1555 | + | ii(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(eY, 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) | |
1556 | 1556 | }) | |
1557 | 1557 | } | |
1558 | 1558 | ||
1559 | 1559 | ||
1560 | - | let | |
1561 | - | ||
1562 | - | func | |
1560 | + | let iu = [[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]] | |
1561 | + | ||
1562 | + | func iv (dG,iw) = { | |
1563 | 1563 | let hy = toInt((dG % em)) | |
1564 | - | let | |
1564 | + | let ix = if ((iw[0] > hy)) | |
1565 | 1565 | then "A" | |
1566 | - | else if (( | |
1566 | + | else if ((iw[1] > hy)) | |
1567 | 1567 | then "B" | |
1568 | - | else if (( | |
1568 | + | else if ((iw[2] > hy)) | |
1569 | 1569 | then "C" | |
1570 | - | else if (( | |
1570 | + | else if ((iw[3] > hy)) | |
1571 | 1571 | then "D" | |
1572 | - | else if (( | |
1572 | + | else if ((iw[4] > hy)) | |
1573 | 1573 | then "E" | |
1574 | 1574 | else "F" | |
1575 | - | | |
1576 | - | } | |
1577 | - | ||
1578 | - | ||
1579 | - | func | |
1580 | - | let | |
1581 | - | func | |
1575 | + | ix | |
1576 | + | } | |
1577 | + | ||
1578 | + | ||
1579 | + | func iy (iz,iA) = { | |
1580 | + | let iB = iu[iA] | |
1581 | + | func iC (eU,eV) = $Tuple2((((((eU._1 + iv(eU._2, iB)) + iv((eU._2 / em), iB)) + iv((eU._2 / en), iB)) + iv((eU._2 / eo), iB)) + iv((eU._2 / ep), iB)), (eU._2 / eq)) | |
1582 | 1582 | ||
1583 | 1583 | let gy = { | |
1584 | 1584 | let eW = [1, 2, 3, 4, 5] | |
1585 | 1585 | let eX = size(eW) | |
1586 | - | let eY = $Tuple2("", ( | |
1586 | + | let eY = $Tuple2("", (iz / el)) | |
1587 | 1587 | func eZ (fa,fb) = if ((fb >= eX)) | |
1588 | 1588 | then fa | |
1589 | - | else | |
1589 | + | else iC(fa, eW[fb]) | |
1590 | 1590 | ||
1591 | 1591 | func fc (fa,fb) = if ((fb >= eX)) | |
1592 | 1592 | then fa | |
1593 | 1593 | else throw("List size exceeds 5") | |
1594 | 1594 | ||
1595 | 1595 | fc(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5) | |
1596 | 1596 | } | |
1597 | 1597 | gy._1 | |
1598 | 1598 | } | |
1599 | 1599 | ||
1600 | 1600 | ||
1601 | - | func | |
1602 | - | func | |
1601 | + | func iD (iE,gK) = { | |
1602 | + | func iF (eU,dE) = { | |
1603 | 1603 | let fE = eU._2 | |
1604 | 1604 | let ho = parseIntValue(dE) | |
1605 | 1605 | let hj = if ((ho == 0)) | |
1606 | 1606 | then 0 | |
1607 | 1607 | else if ((ho >= (4 * gK))) | |
1608 | 1608 | then (ho / gK) | |
1609 | 1609 | else if ((ho > (3 * gK))) | |
1610 | 1610 | then 3 | |
1611 | 1611 | else (((ho - 1) / gK) + 1) | |
1612 | 1612 | $Tuple3((eU._1 :+ hj), (eU._2 + 1), (eU._3 + hj)) | |
1613 | 1613 | } | |
1614 | 1614 | ||
1615 | 1615 | let gy = { | |
1616 | - | let eW = | |
1616 | + | let eW = iE | |
1617 | 1617 | let eX = size(eW) | |
1618 | 1618 | let eY = $Tuple3(nil, 0, 0) | |
1619 | 1619 | func eZ (fa,fb) = if ((fb >= eX)) | |
1620 | 1620 | then fa | |
1621 | - | else | |
1621 | + | else iF(fa, eW[fb]) | |
1622 | 1622 | ||
1623 | 1623 | func fc (fa,fb) = if ((fb >= eX)) | |
1624 | 1624 | then fa | |
1625 | 1625 | else throw("List size exceeds 6") | |
1626 | 1626 | ||
1627 | 1627 | fc(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6) | |
1628 | 1628 | } | |
1629 | 1629 | let hu = gy._1 | |
1630 | - | let | |
1630 | + | let iG = value(indexOf(hu, max(hu))) | |
1631 | 1631 | let hw = (gy._3 - 25) | |
1632 | - | func | |
1633 | - | let dQ = (hu[dg] - (if ((dg == | |
1632 | + | func iH (eU,dg) = { | |
1633 | + | let dQ = (hu[dg] - (if ((dg == iG)) | |
1634 | 1634 | then hw | |
1635 | 1635 | else 0)) | |
1636 | 1636 | let dU = if ((dQ == 0)) | |
1637 | 1637 | then nil | |
1638 | 1638 | else split(drop(toString(pow(10, 0, dQ, 0, 0, DOWN)), 1), "") | |
1639 | 1639 | let gd = hm[dg] | |
1640 | - | func | |
1641 | - | ||
1642 | - | let | |
1640 | + | func iI (hC,hZ) = (hC :+ gd) | |
1641 | + | ||
1642 | + | let iJ = { | |
1643 | 1643 | let eW = dU | |
1644 | 1644 | let eX = size(eW) | |
1645 | 1645 | let eY = nil | |
1646 | 1646 | func hP (fa,fb) = if ((fb >= eX)) | |
1647 | 1647 | then fa | |
1648 | - | else | |
1648 | + | else iI(fa, eW[fb]) | |
1649 | 1649 | ||
1650 | 1650 | func hQ (fa,fb) = if ((fb >= eX)) | |
1651 | 1651 | then fa | |
1652 | 1652 | else throw("List size exceeds 25") | |
1653 | 1653 | ||
1654 | 1654 | hQ(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(eY, 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) | |
1655 | 1655 | } | |
1656 | - | (eU ++ | |
1656 | + | (eU ++ iJ) | |
1657 | 1657 | } | |
1658 | 1658 | ||
1659 | 1659 | let ff = { | |
1660 | 1660 | let eW = cQ | |
1661 | 1661 | let eX = size(eW) | |
1662 | 1662 | let eY = nil | |
1663 | 1663 | func hP (fa,fb) = if ((fb >= eX)) | |
1664 | 1664 | then fa | |
1665 | - | else | |
1665 | + | else iH(fa, eW[fb]) | |
1666 | 1666 | ||
1667 | 1667 | func hQ (fa,fb) = if ((fb >= eX)) | |
1668 | 1668 | then fa | |
1669 | 1669 | else throw("List size exceeds 6") | |
1670 | 1670 | ||
1671 | 1671 | hQ(hP(hP(hP(hP(hP(hP(eY, 0), 1), 2), 3), 4), 5), 6) | |
1672 | 1672 | } | |
1673 | - | func | |
1673 | + | func it (eU,fE) = (eU + ff[fE]) | |
1674 | 1674 | ||
1675 | 1675 | let eW = hl | |
1676 | 1676 | let eX = size(eW) | |
1677 | 1677 | let eY = "" | |
1678 | - | func ib (fa,fb) = if ((fb >= eX)) | |
1679 | - | then fa | |
1680 | - | else is(fa, eW[fb]) | |
1681 | - | ||
1682 | 1678 | func ic (fa,fb) = if ((fb >= eX)) | |
1683 | 1679 | then fa | |
1680 | + | else it(fa, eW[fb]) | |
1681 | + | ||
1682 | + | func id (fa,fb) = if ((fb >= eX)) | |
1683 | + | then fa | |
1684 | 1684 | else throw("List size exceeds 25") | |
1685 | 1685 | ||
1686 | - | ic( | |
1687 | - | } | |
1688 | - | ||
1689 | - | ||
1690 | - | func | |
1691 | - | let gx = split(valueOrElse(getString( | |
1686 | + | id(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(eY, 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) | |
1687 | + | } | |
1688 | + | ||
1689 | + | ||
1690 | + | func iK (iL) = { | |
1691 | + | let gx = split(valueOrElse(getString(iL), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":") | |
1692 | 1692 | [toString(valueOrElse(parseInt(gx[bm]), 0)), if ((size(split(gx[bn], "_")) == aI)) | |
1693 | 1693 | then gx[bn] | |
1694 | 1694 | else "0_0_0_0_0_0", if ((size(split(gx[bo], "_")) == aI)) | |
1695 | 1695 | then gx[bo] | |
1696 | 1696 | else "0_0_0_0_0_0", gx[bp]] | |
1697 | 1697 | } | |
1698 | 1698 | ||
1699 | 1699 | ||
1700 | - | func | |
1701 | - | let fs = split( | |
1700 | + | func iM (iN) = { | |
1701 | + | let fs = split(iN, "_") | |
1702 | 1702 | ((aL * (parseIntValue(fs[1]) + 1)) * parseIntValue(fs[0])) | |
1703 | 1703 | } | |
1704 | 1704 | ||
1705 | 1705 | ||
1706 | - | func | |
1707 | - | let | |
1708 | - | func | |
1709 | - | ||
1710 | - | func | |
1706 | + | func iO (iP) = { | |
1707 | + | let iQ = iP[bg] | |
1708 | + | func iR (eU,iS) = (eU + parseIntValue(iS)) | |
1709 | + | ||
1710 | + | func iT (eU,iS) = { | |
1711 | 1711 | let dg = eU._1 | |
1712 | - | let eN = (((parseIntValue( | |
1712 | + | let eN = (((parseIntValue(iS) + bc) - 1) / bc) | |
1713 | 1713 | $Tuple2((dg + 1), (eU._2 + (eN * cK))) | |
1714 | 1714 | } | |
1715 | 1715 | ||
1716 | - | let | |
1717 | - | let eW = split( | |
1716 | + | let iU = { | |
1717 | + | let eW = split(iP[be], "_") | |
1718 | 1718 | let eX = size(eW) | |
1719 | 1719 | let eY = 0 | |
1720 | 1720 | func eZ (fa,fb) = if ((fb >= eX)) | |
1721 | 1721 | then fa | |
1722 | - | else | |
1722 | + | else iR(fa, eW[fb]) | |
1723 | 1723 | ||
1724 | 1724 | func fc (fa,fb) = if ((fb >= eX)) | |
1725 | 1725 | then fa | |
1726 | 1726 | else throw("List size exceeds 6") | |
1727 | 1727 | ||
1728 | 1728 | fc(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6) | |
1729 | 1729 | } | |
1730 | - | let | |
1731 | - | let eW = split( | |
1730 | + | let iV = { | |
1731 | + | let eW = split(iP[bf], "_") | |
1732 | 1732 | let eX = size(eW) | |
1733 | 1733 | let eY = 0 | |
1734 | 1734 | func hP (fa,fb) = if ((fb >= eX)) | |
1735 | 1735 | then fa | |
1736 | - | else | |
1736 | + | else iR(fa, eW[fb]) | |
1737 | 1737 | ||
1738 | 1738 | func hQ (fa,fb) = if ((fb >= eX)) | |
1739 | 1739 | then fa | |
1740 | 1740 | else throw("List size exceeds 6") | |
1741 | 1741 | ||
1742 | 1742 | hQ(hP(hP(hP(hP(hP(hP(eY, 0), 1), 2), 3), 4), 5), 6) | |
1743 | 1743 | } | |
1744 | - | let | |
1744 | + | let iW = if ((iQ == "")) | |
1745 | 1745 | then 0 | |
1746 | - | else ( let eW = split_4C( | |
1746 | + | else ( let eW = split_4C(iQ, "_") | |
1747 | 1747 | let eX = size(eW) | |
1748 | 1748 | let eY = $Tuple2(0, 0) | |
1749 | - | func ib (fa,fb) = if ((fb >= eX)) | |
1750 | - | then fa | |
1751 | - | else iS(fa, eW[fb]) | |
1752 | - | ||
1753 | 1749 | func ic (fa,fb) = if ((fb >= eX)) | |
1754 | 1750 | then fa | |
1751 | + | else iT(fa, eW[fb]) | |
1752 | + | ||
1753 | + | func id (fa,fb) = if ((fb >= eX)) | |
1754 | + | then fa | |
1755 | 1755 | else throw("List size exceeds 50") | |
1756 | 1756 | ||
1757 | - | ic( | |
1758 | - | (( | |
1759 | - | } | |
1760 | - | ||
1761 | - | ||
1762 | - | func | |
1763 | - | let | |
1764 | - | let | |
1765 | - | let | |
1766 | - | let | |
1767 | - | let | |
1768 | - | let | |
1769 | - | then makeString(["0", toString( | |
1757 | + | id(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(eY, 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 | |
1758 | + | ((iU + iV) + iW) | |
1759 | + | } | |
1760 | + | ||
1761 | + | ||
1762 | + | func iX (iY,iZ,ja) = { | |
1763 | + | let iN = ((toString(iZ) + "_") + toString(ja)) | |
1764 | + | let jb = iM(iN) | |
1765 | + | let jc = valueOrElse(getString(iY), (iN + ":0_0_0_0_0_0:0_0_0_0_0_0::0")) | |
1766 | + | let jd = split_4C(jc, ":") | |
1767 | + | let je = iO(jd) | |
1768 | + | let jf = if ((5 > size(jd))) | |
1769 | + | then makeString(["0", toString(je), toString((jb - je)), toString(jb)], "_") | |
1770 | 1770 | else { | |
1771 | - | let | |
1772 | - | let | |
1773 | - | let | |
1774 | - | then parseIntValue( | |
1775 | - | else | |
1776 | - | makeString([toString( | |
1777 | - | } | |
1778 | - | [ | |
1779 | - | then | |
1780 | - | else "0_0_0_0_0_0", if ((size(split( | |
1781 | - | then | |
1782 | - | else "0_0_0_0_0_0", | |
1783 | - | } | |
1784 | - | ||
1785 | - | ||
1786 | - | func | |
1787 | - | let | |
1788 | - | let | |
1789 | - | (( | |
1790 | - | } | |
1791 | - | ||
1792 | - | ||
1793 | - | func | |
1771 | + | let jg = split(jd[bh], "_") | |
1772 | + | let jh = parseIntValue(jg[bi]) | |
1773 | + | let ji = if ((size(jg) > 1)) | |
1774 | + | then parseIntValue(jg[bj]) | |
1775 | + | else je | |
1776 | + | makeString([toString(jh), toString(ji), toString(((jb - jh) - ji)), toString(jb)], "_") | |
1777 | + | } | |
1778 | + | [jd[bd], if ((size(split(jd[be], "_")) == aI)) | |
1779 | + | then jd[be] | |
1780 | + | else "0_0_0_0_0_0", if ((size(split(jd[bf], "_")) == aI)) | |
1781 | + | then jd[bf] | |
1782 | + | else "0_0_0_0_0_0", jd[bg], jf] | |
1783 | + | } | |
1784 | + | ||
1785 | + | ||
1786 | + | func jj (iP) = { | |
1787 | + | let jk = iO(iP) | |
1788 | + | let jl = parseIntValue(split(iP[bh], "_")[bi]) | |
1789 | + | ((iM(iP[bd]) - jk) - jl) | |
1790 | + | } | |
1791 | + | ||
1792 | + | ||
1793 | + | func jm (jn,iP,jo) = if ((size(jn) != 3)) | |
1794 | 1794 | then throw("cargoListStr should contain exactly 2 ':' separators") | |
1795 | 1795 | else { | |
1796 | - | let | |
1797 | - | let | |
1798 | - | let | |
1796 | + | let jp = split(jn[0], "_") | |
1797 | + | let jq = split(jn[1], "_") | |
1798 | + | let jr = if ((jn[2] == "")) | |
1799 | 1799 | then nil | |
1800 | - | else split_4C( | |
1801 | - | if ((size( | |
1800 | + | else split_4C(jn[2], "_") | |
1801 | + | if ((size(jp) != aI)) | |
1802 | 1802 | then throw("All 6 resources should be passed") | |
1803 | - | else if ((size( | |
1803 | + | else if ((size(jq) != aI)) | |
1804 | 1804 | then throw("All 6 materials should be passed") | |
1805 | 1805 | else { | |
1806 | - | let hc = | |
1807 | - | let | |
1808 | - | let | |
1809 | - | let | |
1806 | + | let hc = jj(iP) | |
1807 | + | let js = split(iP[be], "_") | |
1808 | + | let jt = split(iP[bf], "_") | |
1809 | + | let ju = if ((iP[bg] == "")) | |
1810 | 1810 | then nil | |
1811 | - | else split_4C( | |
1812 | - | let ha = split( | |
1813 | - | let | |
1814 | - | let | |
1811 | + | else split_4C(iP[bg], "_") | |
1812 | + | let ha = split(jo[bn], "_") | |
1813 | + | let jv = split(jo[bo], "_") | |
1814 | + | let jw = if ((jo[bp] == "")) | |
1815 | 1815 | then nil | |
1816 | - | else split_4C( | |
1817 | - | func | |
1816 | + | else split_4C(jo[bp], "_") | |
1817 | + | func jx (eU,iS) = { | |
1818 | 1818 | let gN = eU._1 | |
1819 | - | let | |
1820 | - | let | |
1821 | - | let | |
1822 | - | if (( | |
1823 | - | then $Tuple4((gN + 1), (eU._2 :+ | |
1824 | - | else if (( | |
1825 | - | then if (( | |
1826 | - | then throw((((("Attempt to take " + | |
1827 | - | else $Tuple4((gN + 1), (eU._2 :+ toString(( | |
1828 | - | else if ((-( | |
1829 | - | then throw((((("Attempt to take " + toString(-( | |
1830 | - | else $Tuple4((gN + 1), (eU._2 :+ toString(( | |
1819 | + | let jy = parseIntValue(iS) | |
1820 | + | let jz = parseIntValue(js[gN]) | |
1821 | + | let jA = parseIntValue(ha[gN]) | |
1822 | + | if ((jy == 0)) | |
1823 | + | then $Tuple4((gN + 1), (eU._2 :+ js[gN]), (eU._3 :+ ha[gN]), eU._4) | |
1824 | + | else if ((jy > 0)) | |
1825 | + | then if ((jy > jA)) | |
1826 | + | then throw((((("Attempt to take " + iS) + " from backpack, but only ") + toString(jA)) + " available")) | |
1827 | + | else $Tuple4((gN + 1), (eU._2 :+ toString((jz + jy))), (eU._3 :+ toString((jA - jy))), (eU._4 + jy)) | |
1828 | + | else if ((-(jy) > jz)) | |
1829 | + | then throw((((("Attempt to take " + toString(-(jy))) + " from warehouse, but only ") + toString(jz)) + " available")) | |
1830 | + | else $Tuple4((gN + 1), (eU._2 :+ toString((jz + jy))), (eU._3 :+ toString((jA - jy))), (eU._4 + jy)) | |
1831 | 1831 | } | |
1832 | 1832 | ||
1833 | 1833 | let ff = { | |
1834 | - | let eW = | |
1834 | + | let eW = jp | |
1835 | 1835 | let eX = size(eW) | |
1836 | 1836 | let eY = $Tuple4(0, nil, nil, 0) | |
1837 | 1837 | func eZ (fa,fb) = if ((fb >= eX)) | |
1838 | 1838 | then fa | |
1839 | - | else | |
1839 | + | else jx(fa, eW[fb]) | |
1840 | 1840 | ||
1841 | 1841 | func fc (fa,fb) = if ((fb >= eX)) | |
1842 | 1842 | then fa | |
1843 | 1843 | else throw("List size exceeds 6") | |
1844 | 1844 | ||
1845 | 1845 | fc(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6) | |
1846 | 1846 | } | |
1847 | - | func | |
1847 | + | func jB (eU,iS) = { | |
1848 | 1848 | let gN = eU._1 | |
1849 | - | let | |
1850 | - | let | |
1851 | - | let | |
1852 | - | if (( | |
1853 | - | then $Tuple4((gN + 1), (eU._2 :+ | |
1854 | - | else if (( | |
1855 | - | then if (( | |
1856 | - | then throw((((("Attempt to take " + | |
1857 | - | else $Tuple4((gN + 1), (eU._2 :+ toString(( | |
1858 | - | else if ((-( | |
1859 | - | then throw((((("Attempt to take " + toString(-( | |
1860 | - | else $Tuple4((gN + 1), (eU._2 :+ toString(( | |
1849 | + | let jy = parseIntValue(iS) | |
1850 | + | let jC = parseIntValue(jt[gN]) | |
1851 | + | let jD = parseIntValue(jv[gN]) | |
1852 | + | if ((jy == 0)) | |
1853 | + | then $Tuple4((gN + 1), (eU._2 :+ jt[gN]), (eU._3 :+ jv[gN]), eU._4) | |
1854 | + | else if ((jy > 0)) | |
1855 | + | then if ((jy > jD)) | |
1856 | + | then throw((((("Attempt to take " + iS) + " from backpack, but only ") + toString(jD)) + " available")) | |
1857 | + | else $Tuple4((gN + 1), (eU._2 :+ toString((jC + jy))), (eU._3 :+ toString((jD - jy))), (eU._4 + jy)) | |
1858 | + | else if ((-(jy) > jC)) | |
1859 | + | then throw((((("Attempt to take " + toString(-(jy))) + " from warehouse, but only ") + toString(jC)) + " available")) | |
1860 | + | else $Tuple4((gN + 1), (eU._2 :+ toString((jC + jy))), (eU._3 :+ toString((jD - jy))), (eU._4 + jy)) | |
1861 | 1861 | } | |
1862 | 1862 | ||
1863 | 1863 | let gt = { | |
1864 | - | let eW = | |
1864 | + | let eW = jq | |
1865 | 1865 | let eX = size(eW) | |
1866 | 1866 | let eY = $Tuple4(0, nil, nil, ff._4) | |
1867 | 1867 | func hP (fa,fb) = if ((fb >= eX)) | |
1868 | 1868 | then fa | |
1869 | - | else | |
1869 | + | else jB(fa, eW[fb]) | |
1870 | 1870 | ||
1871 | 1871 | func hQ (fa,fb) = if ((fb >= eX)) | |
1872 | 1872 | then fa | |
1873 | 1873 | else throw("List size exceeds 6") | |
1874 | 1874 | ||
1875 | 1875 | hQ(hP(hP(hP(hP(hP(hP(eY, 0), 1), 2), 3), 4), 5), 6) | |
1876 | 1876 | } | |
1877 | - | func | |
1877 | + | func jE (eU,iS) = { | |
1878 | 1878 | let gN = eU._1 | |
1879 | - | let | |
1880 | - | let | |
1881 | - | then parseIntValue( | |
1879 | + | let jy = parseIntValue(iS) | |
1880 | + | let jF = if ((size(ju) > gN)) | |
1881 | + | then parseIntValue(ju[gN]) | |
1882 | 1882 | else 0 | |
1883 | - | let | |
1884 | - | then parseIntValue( | |
1883 | + | let jG = if ((size(jw) > gN)) | |
1884 | + | then parseIntValue(jw[gN]) | |
1885 | 1885 | else 0 | |
1886 | - | if (( | |
1887 | - | then $Tuple4((gN + 1), (eU._2 :+ toString( | |
1888 | - | else if (( | |
1889 | - | then if (( | |
1890 | - | then throw((((("Attempt to take " + | |
1886 | + | if ((jy == 0)) | |
1887 | + | then $Tuple4((gN + 1), (eU._2 :+ toString(jF)), (eU._3 :+ toString(jG)), eU._4) | |
1888 | + | else if ((jy > 0)) | |
1889 | + | then if ((jy > jG)) | |
1890 | + | then throw((((("Attempt to take " + iS) + " from backpack, but only ") + toString(jG)) + " available")) | |
1891 | 1891 | else { | |
1892 | - | let fW = (eK(( | |
1893 | - | $Tuple4((gN + 1), (eU._2 :+ toString(( | |
1892 | + | let fW = (eK((jF + jy), bc) - eK(jF, bc)) | |
1893 | + | $Tuple4((gN + 1), (eU._2 :+ toString((jF + jy))), (eU._3 :+ toString((jG - jy))), (eU._4 + fW)) | |
1894 | 1894 | } | |
1895 | - | else if ((-( | |
1896 | - | then throw((((("Attempt to take " + toString(-( | |
1895 | + | else if ((-(jy) > jF)) | |
1896 | + | then throw((((("Attempt to take " + toString(-(jy))) + " from warehouse, but only ") + toString(jF)) + " available")) | |
1897 | 1897 | else { | |
1898 | - | let fW = (eK(( | |
1899 | - | $Tuple4((gN + 1), (eU._2 :+ toString(( | |
1898 | + | let fW = (eK((jF + jy), bc) - eK(jF, bc)) | |
1899 | + | $Tuple4((gN + 1), (eU._2 :+ toString((jF + jy))), (eU._3 :+ toString((jG - jy))), (eU._4 + fW)) | |
1900 | 1900 | } | |
1901 | 1901 | } | |
1902 | 1902 | ||
1903 | - | let gx = if ((size( | |
1903 | + | let gx = if ((size(jr) != 0)) | |
1904 | 1904 | then { | |
1905 | - | let eW = | |
1905 | + | let eW = jr | |
1906 | 1906 | let eX = size(eW) | |
1907 | 1907 | let eY = $Tuple4(0, nil, nil, gt._4) | |
1908 | - | func ib (fa,fb) = if ((fb >= eX)) | |
1909 | - | then fa | |
1910 | - | else jD(fa, eW[fb]) | |
1911 | - | ||
1912 | 1908 | func ic (fa,fb) = if ((fb >= eX)) | |
1913 | 1909 | then fa | |
1910 | + | else jE(fa, eW[fb]) | |
1911 | + | ||
1912 | + | func id (fa,fb) = if ((fb >= eX)) | |
1913 | + | then fa | |
1914 | 1914 | else throw("List size exceeds 50") | |
1915 | 1915 | ||
1916 | - | ic( | |
1916 | + | id(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(eY, 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) | |
1917 | 1917 | } | |
1918 | - | else $Tuple4(0, | |
1919 | - | let | |
1920 | - | if (( | |
1921 | - | then throw((((("Attempt to put total " + toString( | |
1922 | - | else $Tuple7(makeString(ff._2, "_"), makeString(gt._2, "_"), makeString_2C(gx._2, "_"), makeString(ff._3, "_"), makeString(gt._3, "_"), makeString_2C(gx._3, "_"), | |
1918 | + | else $Tuple4(0, ju, jw, gt._4) | |
1919 | + | let jH = gx._4 | |
1920 | + | if ((jH > hc)) | |
1921 | + | then throw((((("Attempt to put total " + toString(jH)) + " stuff, but only ") + toString(hc)) + " warehouse space left")) | |
1922 | + | else $Tuple7(makeString(ff._2, "_"), makeString(gt._2, "_"), makeString_2C(gx._2, "_"), makeString(ff._3, "_"), makeString(gt._3, "_"), makeString_2C(gx._3, "_"), jH) | |
1923 | 1923 | } | |
1924 | 1924 | } | |
1925 | 1925 | ||
1926 | 1926 | ||
1927 | - | func | |
1928 | - | let bQ = toString( | |
1929 | - | let | |
1930 | - | let | |
1931 | - | let ew = toString( | |
1932 | - | let | |
1933 | - | let gQ = | |
1934 | - | let dz = aU[ | |
1935 | - | let | |
1936 | - | let bu = calculateAssetId( | |
1937 | - | let | |
1938 | - | $Tuple2([IntegerEntry(es(), ( | |
1939 | - | } | |
1940 | - | ||
1941 | - | ||
1942 | - | func | |
1927 | + | func jI (jJ,jK) = { | |
1928 | + | let bQ = toString(jJ) | |
1929 | + | let jL = hi(toBigInt(jK)) | |
1930 | + | let jM = valueOrElse(getInteger(es()), (er + 1)) | |
1931 | + | let ew = toString(jM) | |
1932 | + | let iA = toInt((jL % el)) | |
1933 | + | let gQ = iy(jL, iA) | |
1934 | + | let dz = aU[iA] | |
1935 | + | let jN = Issue(eJ(ew, "S"), makeString([ew, "S", gQ, dz], "_"), 1, 0, false) | |
1936 | + | let bu = calculateAssetId(jN) | |
1937 | + | let jO = toBase58String(bu) | |
1938 | + | $Tuple2([IntegerEntry(es(), (jM + 1)), jN, StringEntry(ev(ew), jO), StringEntry(bt(jO), bQ), StringEntry(ey(ew), bQ), IntegerEntry(bD(jO), 0), IntegerEntry(ex(jO, bQ), 0), ScriptTransfer(jJ, 1, bu)], $Tuple2(jO, dz)) | |
1939 | + | } | |
1940 | + | ||
1941 | + | ||
1942 | + | func jP (bQ,jQ,jR) = if (!(sigVerify_8Kb(jQ, jR, ec))) | |
1943 | 1943 | then throw("signature does not match") | |
1944 | 1944 | else { | |
1945 | - | let fs = split_4C(toUtf8String( | |
1946 | - | let | |
1947 | - | let | |
1948 | - | let | |
1949 | - | let | |
1950 | - | let | |
1951 | - | let | |
1952 | - | let | |
1953 | - | if (if (( | |
1945 | + | let fs = split_4C(toUtf8String(jQ), ";") | |
1946 | + | let jS = split_4C(fs[0], "|") | |
1947 | + | let jT = split(jS[eF], "_") | |
1948 | + | let jU = parseIntValue(jT[0]) | |
1949 | + | let jV = parseIntValue(jT[1]) | |
1950 | + | let jW = split(fs[1], ":") | |
1951 | + | let jX = jW[0] | |
1952 | + | let jY = parseIntValue(jS[eG]) | |
1953 | + | if (if ((jY > (lastBlock.timestamp + ee))) | |
1954 | 1954 | then true | |
1955 | - | else ((lastBlock.timestamp - ee) > | |
1956 | - | then throw(((("signature outdated: logTime=" + toString( | |
1955 | + | else ((lastBlock.timestamp - ee) > jY)) | |
1956 | + | then throw(((("signature outdated: logTime=" + toString(jY)) + ", bcTime=") + toString(lastBlock.timestamp))) | |
1957 | 1957 | else { | |
1958 | - | let | |
1959 | - | let | |
1960 | - | if (( | |
1961 | - | then throw(((("Tx ids don't match! In state: " + | |
1958 | + | let jZ = jW[1] | |
1959 | + | let ka = valueOrElse(getString(dO(bQ)), "") | |
1960 | + | if ((ka != jZ)) | |
1961 | + | then throw(((("Tx ids don't match! In state: " + ka) + ", in msg: ") + jZ)) | |
1962 | 1962 | else { | |
1963 | 1963 | let B = valueOrErrorMessage(getString(bM(bQ)), "You don't have a duck staked") | |
1964 | - | let | |
1965 | - | let | |
1966 | - | let | |
1967 | - | if (( | |
1968 | - | then throw(((("oldHealth=" + toString( | |
1969 | - | else if ((0 >= | |
1964 | + | let kb = A(B) | |
1965 | + | let kc = aj(valueOrElse(getInteger(E(B)), 0)) | |
1966 | + | let kd = valueOrElse(getInteger(kb), kc) | |
1967 | + | if ((kd != jU)) | |
1968 | + | then throw(((("oldHealth=" + toString(kd)) + " from state does not match one from flight log=") + toString(jU))) | |
1969 | + | else if ((0 >= jU)) | |
1970 | 1970 | then throw("You can't fly with zero health") | |
1971 | 1971 | else if (!(gz(B))) | |
1972 | 1972 | then throw("Equipment incompatible") | |
1973 | 1973 | else { | |
1974 | - | let | |
1975 | - | then | |
1974 | + | let ke = if ((size(jS) > eH)) | |
1975 | + | then jS[eH] | |
1976 | 1976 | else "" | |
1977 | - | let | |
1978 | - | then | |
1977 | + | let kf = if ((size(jS) > eI)) | |
1978 | + | then jS[eI] | |
1979 | 1979 | else "" | |
1980 | - | let | |
1981 | - | then ( | |
1980 | + | let kg = if (if ((jV > 0)) | |
1981 | + | then (ke == "$") | |
1982 | 1982 | else false) | |
1983 | 1983 | then dF(invoke(dh, "sendUsdtPrize", [bQ], nil)) | |
1984 | 1984 | else 0 | |
1985 | - | $Tuple5( | |
1985 | + | $Tuple5(jV, B, kg, jX, kf) | |
1986 | 1986 | } | |
1987 | 1987 | } | |
1988 | 1988 | } | |
1989 | 1989 | } | |
1990 | 1990 | ||
1991 | 1991 | ||
1992 | - | func | |
1993 | - | let | |
1994 | - | let | |
1995 | - | let | |
1996 | - | let | |
1997 | - | ((aK + fraction(aK, (( | |
1998 | - | } | |
1999 | - | ||
2000 | - | ||
2001 | - | func | |
2002 | - | let | |
2003 | - | then $Tuple2( | |
1992 | + | func kh (Q,ki) = { | |
1993 | + | let ja = valueOrElse(getInteger(bD(Q)), 0) | |
1994 | + | let kj = valueOrElse(getInteger(bx(aH, Q)), 0) | |
1995 | + | let kk = (ja / 6) | |
1996 | + | let kl = (ja / 7) | |
1997 | + | ((aK + fraction(aK, ((ja + kk) + (2 * kl)), 5)) + fraction(aK, kj, (ki * 5))) | |
1998 | + | } | |
1999 | + | ||
2000 | + | ||
2001 | + | func km (c,kn,ko) = { | |
2002 | + | let kp = if ((kn == eC)) | |
2003 | + | then $Tuple2(ko, valueOrElse(getString(bM(c)), "")) | |
2004 | 2004 | else { | |
2005 | 2005 | let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked") | |
2006 | - | let | |
2007 | - | let ck = split(value( | |
2006 | + | let kq = valueOrElse(getString(bO(B)), aM) | |
2007 | + | let ck = split(value(kq), "_") | |
2008 | 2008 | if ((ck[br] != "L")) | |
2009 | 2009 | then throw((("Duck location type is " + ck[br]) + ", but should be L")) | |
2010 | 2010 | else $Tuple2(ck[bs], B) | |
2011 | 2011 | } | |
2012 | - | let Q = | |
2013 | - | let | |
2014 | - | let | |
2015 | - | let | |
2016 | - | let | |
2017 | - | let | |
2018 | - | if (( | |
2012 | + | let Q = kp._1 | |
2013 | + | let kr = kp._2 | |
2014 | + | let ks = value(assetInfo(fromBase58String(Q))) | |
2015 | + | let kt = bw(Q) | |
2016 | + | let ku = valueOrErrorMessage(getInteger(kt), (("Land " + ks.name) + " is not staked")) | |
2017 | + | let kv = valueOrErrorMessage(getString(bt(Q)), (("NFT " + ks.name) + " is orphaned")) | |
2018 | + | if ((kv != c)) | |
2019 | 2019 | then throw((aF + " is not yours")) | |
2020 | 2020 | else { | |
2021 | - | let | |
2022 | - | $Tuple4( | |
2023 | - | } | |
2024 | - | } | |
2025 | - | ||
2026 | - | ||
2027 | - | func | |
2021 | + | let kw = split(ks.description, "_") | |
2022 | + | $Tuple4(kr, Q, kw, ku) | |
2023 | + | } | |
2024 | + | } | |
2025 | + | ||
2026 | + | ||
2027 | + | func kx (c,eL,kn,ko) = if ((0 > eL)) | |
2028 | 2028 | then throw("Negative amount") | |
2029 | 2029 | else { | |
2030 | - | let gd = | |
2030 | + | let gd = km(c, kn, ko) | |
2031 | 2031 | let dL = gd._3[do] | |
2032 | 2032 | let gJ = gP(gd._3[dp]) | |
2033 | 2033 | let gT = (lastBlock.timestamp - gd._4) | |
2034 | 2034 | if ((0 > gT)) | |
2035 | 2035 | then throw(((("Saved timestamp is in future, saved = " + toString(gd._4)) + ", current = ") + toString(lastBlock.timestamp))) | |
2036 | 2036 | else { | |
2037 | - | let | |
2038 | - | let | |
2039 | - | let | |
2040 | - | if ((eL > | |
2041 | - | then throw(((("Not enough resources, available = " + toString( | |
2037 | + | let ki = dK(dL) | |
2038 | + | let ky = kh(gd._2, ki) | |
2039 | + | let kz = fraction(gT, (ky * ki), a) | |
2040 | + | if ((eL > kz)) | |
2041 | + | then throw(((("Not enough resources, available = " + toString(kz)) + ", requested = ") + toString(eL))) | |
2042 | 2042 | else { | |
2043 | - | let | |
2044 | - | let | |
2045 | - | let | |
2046 | - | let hb = gX(gJ, (gT - | |
2047 | - | let | |
2048 | - | let | |
2049 | - | let | |
2050 | - | let | |
2051 | - | let hc = parseIntValue( | |
2052 | - | if (if (( | |
2043 | + | let kA = fraction((kz - eL), a, (ky * ki)) | |
2044 | + | let kB = (lastBlock.timestamp - kA) | |
2045 | + | let iZ = (ki / cL) | |
2046 | + | let hb = gX(gJ, (gT - kA), iZ, ky) | |
2047 | + | let iY = bC(gd._2) | |
2048 | + | let ja = valueOrElse(getInteger(bD(gd._2)), 0) | |
2049 | + | let iP = iX(iY, iZ, ja) | |
2050 | + | let jg = split(iP[bh], "_") | |
2051 | + | let hc = parseIntValue(jg[bk]) | |
2052 | + | if (if ((kn == eC)) | |
2053 | 2053 | then (eL > hc) | |
2054 | 2054 | else false) | |
2055 | 2055 | then throw((("Only " + toString(hc)) + " space left in warehouse")) | |
2056 | 2056 | else { | |
2057 | - | let | |
2058 | - | let | |
2059 | - | let ha = split( | |
2060 | - | let gZ = split( | |
2061 | - | let | |
2062 | - | then $Tuple4(gR(gZ, gJ, (gT - | |
2063 | - | else if (( | |
2064 | - | then $Tuple4( | |
2057 | + | let iL = bN(gd._1) | |
2058 | + | let jo = iK(iL) | |
2059 | + | let ha = split(jo[bn], "_") | |
2060 | + | let gZ = split(iP[be], "_") | |
2061 | + | let kC = if ((kn == eC)) | |
2062 | + | then $Tuple4(gR(gZ, gJ, (gT - kA), iZ, ky), jo[bn], (parseIntValue(jg[bj]) + hb._2), (parseIntValue(jg[bk]) - hb._2)) | |
2063 | + | else if ((kn == eD)) | |
2064 | + | then $Tuple4(iP[be], gR(ha, gJ, (gT - kA), iZ, ky), parseIntValue(jg[bj]), parseIntValue(jg[bk])) | |
2065 | 2065 | else { | |
2066 | - | let | |
2067 | - | let | |
2068 | - | $Tuple4( | |
2066 | + | let kD = gY(gZ, ha, hb, hc) | |
2067 | + | let kE = min([parseIntValue(jg[bk]), hb._2]) | |
2068 | + | $Tuple4(kD._1, kD._2, (parseIntValue(jg[bj]) + kE), (parseIntValue(jg[bk]) - kE)) | |
2069 | 2069 | } | |
2070 | - | let | |
2071 | - | let | |
2072 | - | let | |
2073 | - | let | |
2074 | - | $Tuple5([IntegerEntry(bw(gd._2), | |
2070 | + | let kF = kC._1 | |
2071 | + | let kG = kC._2 | |
2072 | + | let kH = kC._3 | |
2073 | + | let kI = kC._4 | |
2074 | + | $Tuple5([IntegerEntry(bw(gd._2), kB), IntegerEntry(bz(aF, gd._2, c), kB)], iL, [jo[bm], kG, jo[bo], jo[bp]], iY, [iP[bd], kF, iP[bf], iP[bg], makeString([jg[bi], toString(kH), toString(kI), jg[bl]], "_")]) | |
2075 | 2075 | } | |
2076 | 2076 | } | |
2077 | 2077 | } | |
2078 | 2078 | } | |
2079 | 2079 | ||
2080 | 2080 | ||
2081 | - | func | |
2082 | - | let | |
2083 | - | let | |
2084 | - | let | |
2085 | - | | |
2086 | - | } | |
2087 | - | ||
2088 | - | ||
2089 | - | func | |
2090 | - | let c = toString( | |
2091 | - | let gd = | |
2092 | - | let | |
2093 | - | let | |
2094 | - | let | |
2081 | + | func kJ (c,Q,ki,kn) = { | |
2082 | + | let kt = bw(Q) | |
2083 | + | let ku = value(getInteger(kt)) | |
2084 | + | let kz = (fraction((lastBlock.timestamp - ku), kh(Q, ki), a) * ki) | |
2085 | + | kx(c, kz, kn, Q) | |
2086 | + | } | |
2087 | + | ||
2088 | + | ||
2089 | + | func kK (fh,jJ,kL,Q) = { | |
2090 | + | let c = toString(jJ) | |
2091 | + | let gd = km(c, eE, Q) | |
2092 | + | let ki = dK(gd._3[do]) | |
2093 | + | let kM = bD(gd._2) | |
2094 | + | let kN = valueOrElse(getInteger(kM), 0) | |
2095 | 2095 | if (if (!(cz)) | |
2096 | - | then ( | |
2096 | + | then (kN >= 3) | |
2097 | 2097 | else false) | |
2098 | 2098 | then throw("Currently max infrastructure level = 3") | |
2099 | 2099 | else { | |
2100 | - | let | |
2101 | - | let ao = ( | |
2100 | + | let kO = ((sqrt(ki, 0, 0, DOWN) / 5) + 2) | |
2101 | + | let ao = (kN + 1) | |
2102 | 2102 | if (if (cz) | |
2103 | - | then (ao > | |
2103 | + | then (ao > kO) | |
2104 | 2104 | else false) | |
2105 | - | then throw(("Currently max infrastructure level = " + toString( | |
2105 | + | then throw(("Currently max infrastructure level = " + toString(kO))) | |
2106 | 2106 | else { | |
2107 | - | let | |
2107 | + | let kP = fraction(eh, (ki * ao), cL) | |
2108 | 2108 | if (if (!(fh)) | |
2109 | - | then ( | |
2109 | + | then (kL != kP) | |
2110 | 2110 | else false) | |
2111 | - | then throw(("Payment attached should be " + toString( | |
2111 | + | then throw(("Payment attached should be " + toString(kP))) | |
2112 | 2112 | else { | |
2113 | - | let | |
2114 | - | let | |
2115 | - | let | |
2116 | - | let | |
2117 | - | let | |
2118 | - | let | |
2119 | - | let | |
2120 | - | let | |
2121 | - | let | |
2122 | - | let | |
2123 | - | let | |
2124 | - | let | |
2125 | - | $Tuple3(([IntegerEntry( | |
2113 | + | let iL = bN(gd._1) | |
2114 | + | let jo = iK(iL) | |
2115 | + | let kQ = split(jo[bo], "_") | |
2116 | + | let kR = fraction(cF, (ki * ao), cL) | |
2117 | + | let kS = makeString(fg(fh, kQ, kR), "_") | |
2118 | + | let kT = kJ(c, gd._2, ki, eE) | |
2119 | + | let kU = kT._5 | |
2120 | + | let kV = iM(kU[bd]) | |
2121 | + | let kW = makeString([split(kU[bd], "_")[0], toString(ao)], "_") | |
2122 | + | let kX = iM(kW) | |
2123 | + | let jg = split(kU[bh], "_") | |
2124 | + | let kY = makeString([jg[bi], jg[bj], toString(((parseIntValue(jg[bk]) + kX) - kV)), toString(kX)], "_") | |
2125 | + | $Tuple3(([IntegerEntry(kM, ao), IntegerEntry(ex(gd._2, c), ao), StringEntry(iL, makeString([jo[bm], kT._3[bn], kS, jo[bp]], ":")), StringEntry(kT._4, makeString([kW, kU[be], kU[bf], kU[bg], kY], ":"))] ++ kT._1), ao, kR) | |
2126 | 2126 | } | |
2127 | 2127 | } | |
2128 | 2128 | } | |
2129 | 2129 | } | |
2130 | 2130 | ||
2131 | 2131 | ||
2132 | - | func | |
2133 | - | let ai = valueOrElse(getInteger( | |
2134 | - | let an = (ai + | |
2135 | - | let | |
2136 | - | $Tuple2([IntegerEntry( | |
2137 | - | } | |
2138 | - | ||
2139 | - | ||
2140 | - | func | |
2141 | - | ||
2142 | - | ||
2143 | - | func | |
2144 | - | ||
2145 | - | ||
2146 | - | func | |
2132 | + | func kZ (la,lb,lc,ld) = { | |
2133 | + | let ai = valueOrElse(getInteger(lb), 0) | |
2134 | + | let an = (ai + ld) | |
2135 | + | let le = al(valueOrElse(getInteger(la), 0), an) | |
2136 | + | $Tuple2([IntegerEntry(la, le[0]), IntegerEntry(lb, an), IntegerEntry(lc, (valueOrElse(getInteger(lc), 0) + le[1]))], an) | |
2137 | + | } | |
2138 | + | ||
2139 | + | ||
2140 | + | func lf (B,ld) = kZ(E(B), D(B), F(B), ld) | |
2141 | + | ||
2142 | + | ||
2143 | + | func lg (c,ld) = kZ(I(c), H(c), J(c), ld) | |
2144 | + | ||
2145 | + | ||
2146 | + | func lh (c) = { | |
2147 | 2147 | let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked") | |
2148 | - | let | |
2149 | - | let | |
2150 | - | if (!(isDefined( | |
2148 | + | let li = bH(c) | |
2149 | + | let lj = getString(li) | |
2150 | + | if (!(isDefined(lj))) | |
2151 | 2151 | then throw("You are not eligible for ONBOARD artifact") | |
2152 | 2152 | else { | |
2153 | - | let | |
2154 | - | let | |
2155 | - | if (isDefined( | |
2156 | - | then throw(("You already used your ONBOARD artifact on duck " + value( | |
2153 | + | let lk = bJ(c) | |
2154 | + | let ll = getString(lk) | |
2155 | + | if (isDefined(ll)) | |
2156 | + | then throw(("You already used your ONBOARD artifact on duck " + value(ll))) | |
2157 | 2157 | else { | |
2158 | - | let | |
2159 | - | let | |
2160 | - | if (isDefined( | |
2161 | - | then throw(((("The duck " + B) + " already got points from ONBOARD artifact from user ") + value( | |
2162 | - | else ([StringEntry( | |
2158 | + | let lm = bI(B) | |
2159 | + | let ln = getString(lm) | |
2160 | + | if (isDefined(ln)) | |
2161 | + | then throw(((("The duck " + B) + " already got points from ONBOARD artifact from user ") + value(ln))) | |
2162 | + | else ([StringEntry(lk, B), StringEntry(lm, c)] ++ lf(B, af)._1) | |
2163 | 2163 | } | |
2164 | 2164 | } | |
2165 | 2165 | } | |
2166 | 2166 | ||
2167 | 2167 | ||
2168 | - | func | |
2169 | - | let gd = | |
2168 | + | func lo (c,ko) = { | |
2169 | + | let gd = km(c, eE, ko) | |
2170 | 2170 | let Q = gd._2 | |
2171 | - | let | |
2172 | - | let | |
2173 | - | if ((valueOrElse(getInteger( | |
2171 | + | let ki = dK(gd._3[do]) | |
2172 | + | let lp = bx(aH, Q) | |
2173 | + | if ((valueOrElse(getInteger(lp), 0) > 0)) | |
2174 | 2174 | then throw("Presale artifact is already activated") | |
2175 | 2175 | else if ((parseIntValue(gd._3[dn]) > er)) | |
2176 | 2176 | then throw((((aF + " ") + Q) + " is not eligible for presale artifact")) | |
2177 | 2177 | else { | |
2178 | - | let | |
2179 | - | ((( | |
2178 | + | let kT = kJ(c, Q, ki, eE) | |
2179 | + | (((kT._1 :+ IntegerEntry(lp, ki)) :+ StringEntry(kT._2, makeString(kT._3, ":"))) :+ StringEntry(kT._4, makeString(kT._5, ":"))) | |
2180 | 2180 | } | |
2181 | 2181 | } | |
2182 | 2182 | ||
2183 | 2183 | ||
2184 | - | func | |
2184 | + | func lq (B) = { | |
2185 | 2185 | let cj = valueOrElse(getInteger(dl, bU), 0) | |
2186 | - | let | |
2186 | + | let kq = split(valueOrElse(getString(bO(B)), aM), "_") | |
2187 | 2187 | let aA = lastBlock.timestamp | |
2188 | 2188 | let cl = cd(dl, cj) | |
2189 | 2189 | let cf = cl[bZ] | |
2190 | 2190 | let cg = cl[ca] | |
2191 | - | if (( | |
2191 | + | if ((kq[br] != "T")) | |
2192 | 2192 | then false | |
2193 | - | else if (if (if ((parseIntValue( | |
2193 | + | else if (if (if ((parseIntValue(kq[bq]) == cj)) | |
2194 | 2194 | then (cg[cc] == "INPROGRESS") | |
2195 | 2195 | else false) | |
2196 | 2196 | then (parseIntValue(cf[cb]) > aA) | |
2197 | 2197 | else false) | |
2198 | 2198 | then throw("Your duck is taking part in the tournament") | |
2199 | 2199 | else dJ(invoke(this, "exitTournamentInternal", [B], nil)) | |
2200 | 2200 | } | |
2201 | 2201 | ||
2202 | 2202 | ||
2203 | - | func | |
2204 | - | let | |
2203 | + | func lr (B) = { | |
2204 | + | let kq = split(valueOrElse(getString(bO(B)), aM), "_") | |
2205 | 2205 | let aA = lastBlock.timestamp | |
2206 | - | if (( | |
2206 | + | if ((kq[br] != "D")) | |
2207 | 2207 | then false | |
2208 | 2208 | else { | |
2209 | - | let cn = parseIntValue( | |
2210 | - | let co = parseIntValue( | |
2209 | + | let cn = parseIntValue(kq[bq]) | |
2210 | + | let co = parseIntValue(kq[bs]) | |
2211 | 2211 | if (if (((cn + aQ) > aA)) | |
2212 | 2212 | then (1 > co) | |
2213 | 2213 | else false) | |
2214 | 2214 | then throw("Your duck is on delivery mission") | |
2215 | 2215 | else dJ(invoke(this, "exitDeliveryInternal", [B], nil)) | |
2216 | 2216 | } | |
2217 | 2217 | } | |
2218 | 2218 | ||
2219 | 2219 | ||
2220 | - | func | |
2221 | - | let | |
2220 | + | func ls (B,fM,jV,lt) = { | |
2221 | + | let kq = split(valueOrElse(getString(bO(B)), aM), "_") | |
2222 | 2222 | let aA = lastBlock.timestamp | |
2223 | - | let cn = parseIntValue( | |
2224 | - | let co = parseIntValue( | |
2225 | - | let | |
2226 | - | let | |
2227 | - | let | |
2228 | - | let | |
2223 | + | let cn = parseIntValue(kq[bq]) | |
2224 | + | let co = parseIntValue(kq[bs]) | |
2225 | + | let kv = valueOrErrorMessage(getString(bL(B)), "NFT duck is orphaned") | |
2226 | + | let lu = A(B) | |
2227 | + | let lv = getIntegerValue(lu) | |
2228 | + | let lw = if (if ((co > 0)) | |
2229 | 2229 | then true | |
2230 | 2230 | else if (if (fM) | |
2231 | - | then ( | |
2231 | + | then (lt > 0) | |
2232 | 2232 | else false) | |
2233 | - | then ( | |
2233 | + | then (jV > 0) | |
2234 | 2234 | else false) | |
2235 | 2235 | then { | |
2236 | - | let | |
2237 | - | if (( | |
2236 | + | let lx = invoke(di, "sendDeliveryReward", [kv], nil) | |
2237 | + | if ((lx == lx)) | |
2238 | 2238 | then { | |
2239 | - | let | |
2240 | - | [IntegerEntry( | |
2239 | + | let ly = V(kv) | |
2240 | + | [IntegerEntry(ly, (valueOrElse(getInteger(ly), 0) + 1)), IntegerEntry(W(kv), (cn / a))] | |
2241 | 2241 | } | |
2242 | 2242 | else throw("Strict value is not equal to itself.") | |
2243 | 2243 | } | |
2244 | 2244 | else if (if (if (fM) | |
2245 | - | then ( | |
2245 | + | then (jV > 0) | |
2246 | 2246 | else false) | |
2247 | 2247 | then ((cn + aQ) > aA) | |
2248 | 2248 | else false) | |
2249 | 2249 | then throw("Your duck is still on delivery mission") | |
2250 | 2250 | else { | |
2251 | - | let | |
2252 | - | let | |
2253 | - | if (( | |
2251 | + | let lz = valueOrElse(getInteger(di, bT), 0) | |
2252 | + | let lA = invoke(di, "updateDeliveryLocked", [(lz - aP)], nil) | |
2253 | + | if ((lA == lA)) | |
2254 | 2254 | then if (if (if (fM) | |
2255 | - | then (0 >= | |
2255 | + | then (0 >= jV) | |
2256 | 2256 | else false) | |
2257 | 2257 | then true | |
2258 | - | else (0 >= | |
2258 | + | else (0 >= lv)) | |
2259 | 2259 | then nil | |
2260 | 2260 | else [IntegerEntry(U(B), (cn + cH))] | |
2261 | 2261 | else throw("Strict value is not equal to itself.") | |
2262 | 2262 | } | |
2263 | - | let | |
2264 | - | $Tuple3( | |
2265 | - | } | |
2266 | - | ||
2267 | - | ||
2268 | - | func | |
2263 | + | let lB = getStringValue(L(B)) | |
2264 | + | $Tuple3(lw, [StringEntry(bO(B), lB)], lB) | |
2265 | + | } | |
2266 | + | ||
2267 | + | ||
2268 | + | func lC (lD,ao,lE,c,lF,lG) = { | |
2269 | 2269 | let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked") | |
2270 | - | if ( | |
2270 | + | if (lq(B)) | |
2271 | 2271 | then throw("mergeInternal_checkTournament") | |
2272 | - | else if ( | |
2272 | + | else if (lr(B)) | |
2273 | 2273 | then throw("mergeInternal_checkDelivery") | |
2274 | 2274 | else { | |
2275 | - | func | |
2276 | - | let | |
2277 | - | let | |
2278 | - | let | |
2279 | - | let | |
2280 | - | if (( | |
2275 | + | func lH (eU,Q) = { | |
2276 | + | let ks = value(assetInfo(fromBase58String(Q))) | |
2277 | + | let kt = bw(Q) | |
2278 | + | let ku = valueOrErrorMessage(getInteger(kt), (("NFT " + ks.name) + " is not staked")) | |
2279 | + | let kv = valueOrErrorMessage(getString(bt(Q)), (("NFT " + ks.name) + " is orphaned")) | |
2280 | + | if ((kv != c)) | |
2281 | 2281 | then throw((aF + " is not yours")) | |
2282 | 2282 | else { | |
2283 | - | let | |
2284 | - | let dz = | |
2283 | + | let kw = split(ks.description, "_") | |
2284 | + | let dz = kw[dq] | |
2285 | 2285 | if (if ((eU._3 != "")) | |
2286 | 2286 | then (eU._3 != dz) | |
2287 | 2287 | else false) | |
2288 | 2288 | then throw("Lands should be on the same continent to merge") | |
2289 | 2289 | else { | |
2290 | - | let dL = | |
2291 | - | let | |
2292 | - | let gN = valueOrErrorMessage(indexOf( | |
2293 | - | let | |
2294 | - | let | |
2295 | - | let | |
2296 | - | let | |
2297 | - | let | |
2290 | + | let dL = kw[do] | |
2291 | + | let lI = eU._1 | |
2292 | + | let gN = valueOrErrorMessage(indexOf(lI, dL), "You haven't passed all the lands needed") | |
2293 | + | let lJ = (take(lI, gN) + drop(lI, (gN + 1))) | |
2294 | + | let ki = dK(dL) | |
2295 | + | let lK = (eU._2 + valueOrElse(getInteger(bx(aH, Q)), 0)) | |
2296 | + | let ja = valueOrElse(getInteger(bD(Q)), 0) | |
2297 | + | let lL = { | |
2298 | 2298 | let cD = dL | |
2299 | 2299 | if (("S" == cD)) | |
2300 | 2300 | then 3 | |
2301 | 2301 | else if (("M" == cD)) | |
2302 | 2302 | then 4 | |
2303 | 2303 | else if (("L" == cD)) | |
2304 | 2304 | then 5 | |
2305 | 2305 | else if (("XL" == cD)) | |
2306 | 2306 | then 6 | |
2307 | 2307 | else throw("Only S, M, L, XL can merge") | |
2308 | 2308 | } | |
2309 | - | if (( | |
2309 | + | if ((ja != lL)) | |
2310 | 2310 | then throw("All lands should be maxed to merge") | |
2311 | 2311 | else { | |
2312 | - | let ew = | |
2313 | - | let gJ = gP( | |
2314 | - | let gT = (lastBlock.timestamp - | |
2312 | + | let ew = kw[dn] | |
2313 | + | let gJ = gP(kw[dp]) | |
2314 | + | let gT = (lastBlock.timestamp - ku) | |
2315 | 2315 | if ((0 > gT)) | |
2316 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
2316 | + | then throw(((("Saved timestamp is in future, saved = " + toString(ku)) + ", current = ") + toString(lastBlock.timestamp))) | |
2317 | 2317 | else { | |
2318 | - | let | |
2319 | - | let | |
2320 | - | let | |
2321 | - | let fe = gH(eU._6, gJ, | |
2322 | - | let | |
2323 | - | let | |
2324 | - | let | |
2325 | - | let dg = indexOf( | |
2318 | + | let ky = kh(Q, ki) | |
2319 | + | let iZ = (ki / cL) | |
2320 | + | let kG = gR(split(eU._4, "_"), gJ, gT, iZ, ky) | |
2321 | + | let fe = gH(eU._6, gJ, iZ, -1) | |
2322 | + | let lM = gH(eU._10, gJ, iZ, -1) | |
2323 | + | let iE = gH(eU._9, gJ, iZ, 1) | |
2324 | + | let lN = eU._7 | |
2325 | + | let dg = indexOf(lN, Q) | |
2326 | 2326 | if (!(isDefined(dg))) | |
2327 | 2327 | then throw(("Your staked lands don't contain " + Q)) | |
2328 | 2328 | else { | |
2329 | - | let | |
2330 | - | let | |
2331 | - | $Tuple10( | |
2332 | - | then [DeleteEntry(et( | |
2333 | - | else nil)), fe, removeByIndex( | |
2329 | + | let lO = bv(Q) | |
2330 | + | let lP = valueOrElse(getString(lO), "") | |
2331 | + | $Tuple10(lJ, lK, dz, kG, ((((((((((((eU._5 :+ DeleteEntry(bw(Q))) :+ DeleteEntry(bz(aF, Q, c))) :+ DeleteEntry(ev(ew))) :+ DeleteEntry(bt(Q))) :+ DeleteEntry(bD(Q))) :+ DeleteEntry(ex(Q, c))) :+ DeleteEntry(bx(aH, Q))) :+ DeleteEntry(ey(ew))) :+ DeleteEntry(bC(Q))) :+ DeleteEntry(lO)) :+ Burn(fromBase58String(Q), 1)) ++ (if ((lP != "")) | |
2332 | + | then [DeleteEntry(et(lP))] | |
2333 | + | else nil)), fe, removeByIndex(lN, value(dg)), (eU._8 + ki), iE, lM) | |
2334 | 2334 | } | |
2335 | 2335 | } | |
2336 | 2336 | } | |
2337 | 2337 | } | |
2338 | 2338 | } | |
2339 | 2339 | } | |
2340 | 2340 | ||
2341 | - | let | |
2342 | - | let | |
2341 | + | let iL = bN(B) | |
2342 | + | let jo = iK(iL) | |
2343 | 2343 | let gI = split(valueOrElse(getString(dx()), "0_0_0_0_0_0"), "_") | |
2344 | - | let | |
2345 | - | let | |
2346 | - | let | |
2347 | - | then split_51C(value( | |
2344 | + | let lQ = dA(c) | |
2345 | + | let lR = getString(lQ) | |
2346 | + | let lS = if (isDefined(lR)) | |
2347 | + | then split_51C(value(lR), "_") | |
2348 | 2348 | else nil | |
2349 | - | let | |
2350 | - | let | |
2349 | + | let lT = split(value(assetInfo(fromBase58String(lF[0]))).description, "_")[dq] | |
2350 | + | let lU = split(valueOrElse(getString(dy(lT)), "0_0_0_0_0_0"), "_") | |
2351 | 2351 | let ff = { | |
2352 | - | let eW = | |
2352 | + | let eW = lF | |
2353 | 2353 | let eX = size(eW) | |
2354 | - | let eY = $Tuple10( | |
2354 | + | let eY = $Tuple10(lE, 0, "", jo[bn], nil, gI, lS, 0, split("0_0_0_0_0_0", "_"), lU) | |
2355 | 2355 | func eZ (fa,fb) = if ((fb >= eX)) | |
2356 | 2356 | then fa | |
2357 | - | else | |
2357 | + | else lH(fa, eW[fb]) | |
2358 | 2358 | ||
2359 | 2359 | func fc (fa,fb) = if ((fb >= eX)) | |
2360 | 2360 | then fa | |
2361 | 2361 | else throw("List size exceeds 5") | |
2362 | 2362 | ||
2363 | 2363 | fc(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5) | |
2364 | 2364 | } | |
2365 | 2365 | let dz = ff._3 | |
2366 | - | let | |
2367 | - | let gQ = | |
2368 | - | let | |
2369 | - | let | |
2370 | - | let | |
2371 | - | let bu = calculateAssetId( | |
2372 | - | let | |
2373 | - | let | |
2374 | - | let | |
2375 | - | let | |
2366 | + | let iA = valueOrErrorMessage(indexOf(aU, dz), ("Unknown continent: " + dz)) | |
2367 | + | let gQ = iD(ff._9, (dK(lD) / cL)) | |
2368 | + | let jM = valueOrElse(getInteger(es()), (er + 1)) | |
2369 | + | let lV = toString(jM) | |
2370 | + | let jN = Issue(eJ(lV, lD), makeString([lV, lD, gQ, dz], "_"), 1, 0, false) | |
2371 | + | let bu = calculateAssetId(jN) | |
2372 | + | let lW = toBase58String(bu) | |
2373 | + | let kS = makeString(fg((lG > 0), split(jo[bo], "_"), lG), "_") | |
2374 | + | let lX = dB(c) | |
2375 | + | let lY = valueOrElse(getInteger(lX), 0) | |
2376 | 2376 | $Tuple2((((((((((((((((ff._5 :+ (if ((size(ff._7) > 0)) | |
2377 | - | then StringEntry( | |
2378 | - | else DeleteEntry( | |
2377 | + | then StringEntry(lQ, makeString_11C(ff._7, "_")) | |
2378 | + | else DeleteEntry(lQ))) :+ IntegerEntry(lX, if ((ff._8 > lY)) | |
2379 | 2379 | then 0 | |
2380 | - | else ( | |
2380 | + | else (lY - ff._8))) :+ IntegerEntry(es(), (jM + 1))) :+ jN) :+ StringEntry(ev(lV), lW)) :+ StringEntry(bt(lW), c)) :+ StringEntry(ey(lV), c)) :+ IntegerEntry(bx(aH, lW), ff._2)) :+ IntegerEntry(bD(lW), ao)) :+ IntegerEntry(ex(lW, c), ao)) :+ StringEntry(iL, makeString([jo[bm], ff._4, kS, jo[bp]], ":"))) :+ StringEntry(dx(), makeString(ff._6, "_"))) :+ StringEntry(dy(dz), makeString(ff._10, "_"))) :+ StringEntry(bO(B), makeString([dz, "L", lW], "_"))) :+ ScriptTransfer(addressFromStringValue(c), 1, bu)), lW) | |
2381 | 2381 | } | |
2382 | 2382 | } | |
2383 | 2383 | ||
2384 | 2384 | ||
2385 | - | func | |
2386 | - | ||
2387 | - | ||
2388 | - | func | |
2389 | - | ||
2390 | - | ||
2391 | - | func | |
2392 | - | ||
2393 | - | ||
2394 | - | func | |
2395 | - | ||
2396 | - | ||
2397 | - | func | |
2398 | - | let cD = size( | |
2385 | + | func lZ (c,lF) = lC("M", 3, "SSSS", c, lF, 0) | |
2386 | + | ||
2387 | + | ||
2388 | + | func ma (c,lF) = lC("L", 4, "SMM", c, lF, (cF * 4)) | |
2389 | + | ||
2390 | + | ||
2391 | + | func mb (c,lF) = lC("XL", 5, "SSSML", c, lF, (cF * 47)) | |
2392 | + | ||
2393 | + | ||
2394 | + | func mc (c,lF) = lC("XXL", 6, "LXL", c, lF, (cF * 54)) | |
2395 | + | ||
2396 | + | ||
2397 | + | func md (c,lF) = { | |
2398 | + | let cD = size(lF) | |
2399 | 2399 | if ((4 == cD)) | |
2400 | - | then | |
2400 | + | then lZ(c, lF) | |
2401 | 2401 | else if ((3 == cD)) | |
2402 | - | then | |
2402 | + | then ma(c, lF) | |
2403 | 2403 | else if ((5 == cD)) | |
2404 | - | then | |
2404 | + | then mb(c, lF) | |
2405 | 2405 | else if ((2 == cD)) | |
2406 | - | then | |
2406 | + | then mc(c, lF) | |
2407 | 2407 | else throw("Unknown merge") | |
2408 | 2408 | } | |
2409 | 2409 | ||
2410 | 2410 | ||
2411 | - | func | |
2412 | - | let | |
2413 | - | if (isDefined( | |
2411 | + | func me (bQ) = { | |
2412 | + | let mf = getString(bM(bQ)) | |
2413 | + | if (isDefined(mf)) | |
2414 | 2414 | then { | |
2415 | - | let B = value( | |
2416 | - | let | |
2417 | - | let ck = split(valueOrElse(getString( | |
2415 | + | let B = value(mf) | |
2416 | + | let mg = bO(B) | |
2417 | + | let ck = split(valueOrElse(getString(mg), aM), "_") | |
2418 | 2418 | let cn = parseIntValue(ck[bq]) | |
2419 | 2419 | if (if ((ck[br] != "D")) | |
2420 | 2420 | then true | |
2421 | 2421 | else ((cn + aQ) > lastBlock.timestamp)) | |
2422 | 2422 | then nil | |
2423 | 2423 | else { | |
2424 | - | let | |
2424 | + | let lu = A(B) | |
2425 | 2425 | if ((parseIntValue(ck[bs]) > 0)) | |
2426 | 2426 | then { | |
2427 | - | let | |
2428 | - | if (( | |
2427 | + | let lx = invoke(di, "sendDeliveryReward", [bQ], nil) | |
2428 | + | if ((lx == lx)) | |
2429 | 2429 | then nil | |
2430 | 2430 | else throw("Strict value is not equal to itself.") | |
2431 | 2431 | } | |
2432 | 2432 | else (({ | |
2433 | - | let | |
2434 | - | let | |
2435 | - | if (( | |
2436 | - | then if ((0 >= getIntegerValue( | |
2433 | + | let lz = valueOrElse(getInteger(di, bT), 0) | |
2434 | + | let lA = invoke(di, "updateDeliveryLocked", [(lz - aP)], nil) | |
2435 | + | if ((lA == lA)) | |
2436 | + | then if ((0 >= getIntegerValue(lu))) | |
2437 | 2437 | then nil | |
2438 | 2438 | else { | |
2439 | - | let | |
2440 | - | if (( | |
2439 | + | let mh = invoke(this, "saveInteger", [U(B), (cn + cH)], nil) | |
2440 | + | if ((mh == mh)) | |
2441 | 2441 | then nil | |
2442 | 2442 | else throw("Strict value is not equal to itself.") | |
2443 | 2443 | } | |
2444 | 2444 | else throw("Strict value is not equal to itself.") | |
2445 | - | } :+ IntegerEntry( | |
2445 | + | } :+ IntegerEntry(lu, getIntegerValue(K(B)))) :+ StringEntry(mg, getStringValue(L(B)))) | |
2446 | 2446 | } | |
2447 | 2447 | } | |
2448 | 2448 | else nil | |
2449 | 2449 | } | |
2450 | 2450 | ||
2451 | 2451 | ||
2452 | - | func | |
2452 | + | func mi (gN) = if (if ((gN.originCaller != dh)) | |
2453 | 2453 | then valueOrElse(getBoolean(dN()), false) | |
2454 | 2454 | else false) | |
2455 | 2455 | then throw("Contracts are under maintenance") | |
2456 | 2456 | else { | |
2457 | 2457 | let bQ = toString(gN.originCaller) | |
2458 | - | ( | |
2458 | + | (me(bQ) :+ StringEntry(dO(bQ), toBase58String(gN.transactionId))) | |
2459 | 2459 | } | |
2460 | 2460 | ||
2461 | 2461 | ||
2462 | - | func | |
2462 | + | func mj (gN) = if (if ((gN.originCaller != dh)) | |
2463 | 2463 | then valueOrElse(getBoolean(dN()), false) | |
2464 | 2464 | else false) | |
2465 | 2465 | then throw("Contracts are under maintenance") | |
2466 | 2466 | else [StringEntry(dO(toString(gN.originCaller)), toBase58String(gN.transactionId))] | |
2467 | 2467 | ||
2468 | 2468 | ||
2469 | 2469 | @Callable(gN) | |
2470 | - | func constructorV1 ( | |
2470 | + | func constructorV1 (mk) = if ((gN.caller != this)) | |
2471 | 2471 | then throw("Permission denied") | |
2472 | - | else [StringEntry(db(), | |
2472 | + | else [StringEntry(db(), mk)] | |
2473 | 2473 | ||
2474 | 2474 | ||
2475 | 2475 | ||
2476 | 2476 | @Callable(gN) | |
2477 | 2477 | func saveInteger (cT,eL) = if ((gN.caller != this)) | |
2478 | 2478 | then throw("saveInteger is not public method") | |
2479 | 2479 | else [IntegerEntry(cT, eL)] | |
2480 | 2480 | ||
2481 | 2481 | ||
2482 | 2482 | ||
2483 | 2483 | @Callable(gN) | |
2484 | - | func setBlocked ( | |
2484 | + | func setBlocked (ml) = if ((gN.caller != this)) | |
2485 | 2485 | then throw("permission denied") | |
2486 | - | else [BooleanEntry(dN(), | |
2486 | + | else [BooleanEntry(dN(), ml)] | |
2487 | 2487 | ||
2488 | 2488 | ||
2489 | 2489 | ||
2490 | 2490 | @Callable(gN) | |
2491 | 2491 | func stakeLand () = { | |
2492 | - | let | |
2492 | + | let mm = mi(gN) | |
2493 | 2493 | if ((size(gN.payments) != 1)) | |
2494 | 2494 | then throw("Exactly one payment required") | |
2495 | 2495 | else { | |
2496 | - | let | |
2497 | - | let bu = value( | |
2496 | + | let mn = value(gN.payments[0]) | |
2497 | + | let bu = value(mn.assetId) | |
2498 | 2498 | let cS = toString(gN.caller) | |
2499 | - | if (( | |
2499 | + | if ((mn.amount != 1)) | |
2500 | 2500 | then throw((("NFT " + aF) + " token should be attached as payment")) | |
2501 | 2501 | else { | |
2502 | - | let | |
2503 | - | if (( | |
2502 | + | let ks = value(assetInfo(bu)) | |
2503 | + | if ((ks.issuer != this)) | |
2504 | 2504 | then throw("Unknown issuer of token") | |
2505 | - | else if (!(contains( | |
2505 | + | else if (!(contains(ks.name, aF))) | |
2506 | 2506 | then throw((("Only NFT " + aF) + " tokens are accepted")) | |
2507 | 2507 | else { | |
2508 | - | let | |
2509 | - | let ew = if (contains( | |
2510 | - | then dropRight( | |
2511 | - | else if (contains( | |
2512 | - | then dropRight( | |
2513 | - | else dropRight( | |
2508 | + | let mo = drop(ks.name, 4) | |
2509 | + | let ew = if (contains(mo, "XXL")) | |
2510 | + | then dropRight(mo, 3) | |
2511 | + | else if (contains(mo, "XL")) | |
2512 | + | then dropRight(mo, 2) | |
2513 | + | else dropRight(mo, 1) | |
2514 | 2514 | if (!(isDefined(parseInt(ew)))) | |
2515 | - | then throw(("Cannot parse land number from " + | |
2515 | + | then throw(("Cannot parse land number from " + ks.name)) | |
2516 | 2516 | else { | |
2517 | 2517 | let Q = toBase58String(bu) | |
2518 | - | let | |
2519 | - | if (isDefined(getInteger( | |
2520 | - | then throw((("NFT " + | |
2518 | + | let kt = bw(Q) | |
2519 | + | if (isDefined(getInteger(kt))) | |
2520 | + | then throw((("NFT " + ks.name) + " is already staked")) | |
2521 | 2521 | else { | |
2522 | - | let | |
2523 | - | let gJ = gP( | |
2524 | - | let | |
2525 | - | let | |
2526 | - | let fe = gO(gJ, | |
2527 | - | let | |
2528 | - | let | |
2529 | - | let | |
2530 | - | let | |
2531 | - | let | |
2532 | - | let | |
2533 | - | then split_51C(value( | |
2522 | + | let kw = split(ks.description, "_") | |
2523 | + | let gJ = gP(kw[dp]) | |
2524 | + | let ki = dK(kw[do]) | |
2525 | + | let iZ = (ki / cL) | |
2526 | + | let fe = gO(gJ, iZ, 1) | |
2527 | + | let mp = dy(kw[dq]) | |
2528 | + | let lU = split(valueOrElse(getString(mp), "0_0_0_0_0_0"), "_") | |
2529 | + | let mq = makeString(gH(lU, gJ, iZ, 1), "_") | |
2530 | + | let lQ = dA(cS) | |
2531 | + | let lR = getString(lQ) | |
2532 | + | let lN = if (isDefined(lR)) | |
2533 | + | then split_51C(value(lR), "_") | |
2534 | 2534 | else nil | |
2535 | - | if (containsElement( | |
2535 | + | if (containsElement(lN, Q)) | |
2536 | 2536 | then throw(("Your staked lands already contain " + Q)) | |
2537 | - | else if ((size( | |
2537 | + | else if ((size(lN) >= aJ)) | |
2538 | 2538 | then throw((("Your already staked max (" + toString(aJ)) + ") lands")) | |
2539 | 2539 | else { | |
2540 | - | let | |
2541 | - | let | |
2542 | - | let | |
2543 | - | let | |
2544 | - | $Tuple2(([IntegerEntry( | |
2540 | + | let ja = valueOrElse(getInteger(bD(Q)), 0) | |
2541 | + | let lX = dB(cS) | |
2542 | + | let mr = valueOrElse(getInteger(lX), 0) | |
2543 | + | let ms = invoke(dk, "onStakeUnstakeLand", [cS], nil) | |
2544 | + | $Tuple2(([IntegerEntry(kt, lastBlock.timestamp), IntegerEntry(bz(aF, Q, cS), lastBlock.timestamp), StringEntry(lQ, makeString_11C((lN :+ Q), "_")), IntegerEntry(lX, (mr + ki)), StringEntry(bt(Q), cS), StringEntry(ey(ew), cS), IntegerEntry(ex(Q, cS), ja), StringEntry(dx(), fe), StringEntry(mp, mq)] ++ mm), ms) | |
2545 | 2545 | } | |
2546 | 2546 | } | |
2547 | 2547 | } | |
2548 | 2548 | } | |
2549 | 2549 | } | |
2550 | 2550 | } | |
2551 | 2551 | } | |
2552 | 2552 | ||
2553 | 2553 | ||
2554 | 2554 | ||
2555 | 2555 | @Callable(gN) | |
2556 | - | func unstakeLand ( | |
2557 | - | let | |
2556 | + | func unstakeLand (ko) = { | |
2557 | + | let mm = mi(gN) | |
2558 | 2558 | if ((size(gN.payments) != 0)) | |
2559 | 2559 | then throw("No payments required") | |
2560 | 2560 | else { | |
2561 | 2561 | let c = toString(gN.caller) | |
2562 | - | let gd = | |
2562 | + | let gd = km(c, eD, ko) | |
2563 | 2563 | let Q = gd._2 | |
2564 | - | let | |
2565 | - | let | |
2566 | - | let gJ = gP( | |
2567 | - | let | |
2568 | - | let | |
2569 | - | let fe = gO(gJ, | |
2570 | - | let | |
2571 | - | let | |
2572 | - | let | |
2573 | - | let | |
2574 | - | let | |
2575 | - | let dg = indexOf( | |
2564 | + | let kw = gd._3 | |
2565 | + | let lQ = dA(c) | |
2566 | + | let gJ = gP(kw[dp]) | |
2567 | + | let ki = dK(kw[do]) | |
2568 | + | let iZ = (ki / cL) | |
2569 | + | let fe = gO(gJ, iZ, -1) | |
2570 | + | let mp = dy(kw[dq]) | |
2571 | + | let lU = split(valueOrElse(getString(mp), "0_0_0_0_0_0"), "_") | |
2572 | + | let mq = makeString(gH(lU, gJ, iZ, -1), "_") | |
2573 | + | let kT = kJ(c, Q, ki, eD) | |
2574 | + | let lN = split_51C(valueOrElse(getString(lQ), ""), "_") | |
2575 | + | let dg = indexOf(lN, Q) | |
2576 | 2576 | if (!(isDefined(dg))) | |
2577 | 2577 | then throw(("Your staked lands don't contain " + Q)) | |
2578 | 2578 | else { | |
2579 | 2579 | let aA = lastBlock.timestamp | |
2580 | - | let | |
2581 | - | if (( | |
2582 | - | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString( | |
2580 | + | let mt = valueOrElse(getInteger(dj, bP(c)), 0) | |
2581 | + | if ((mt >= aA)) | |
2582 | + | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(mt))) | |
2583 | 2583 | else { | |
2584 | - | let | |
2585 | - | if (( | |
2586 | - | then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString( | |
2584 | + | let mu = (valueOrElse(getInteger(dk, b(c)), 0) + cG) | |
2585 | + | if ((mu > aA)) | |
2586 | + | then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(mu))) | |
2587 | 2587 | else { | |
2588 | - | let | |
2589 | - | let | |
2590 | - | let | |
2588 | + | let lX = dB(c) | |
2589 | + | let lY = valueOrElse(getInteger(lX), 0) | |
2590 | + | let mv = if ((ki > lY)) | |
2591 | 2591 | then 0 | |
2592 | - | else ( | |
2593 | - | let | |
2594 | - | $Tuple2(([ScriptTransfer(gN.caller, 1, fromBase58String(Q)), DeleteEntry(bw(Q)), DeleteEntry(bz(aF, Q, c)), StringEntry(dx(), fe), StringEntry( | |
2595 | - | then StringEntry( | |
2596 | - | else DeleteEntry( | |
2592 | + | else (lY - ki) | |
2593 | + | let ms = invoke(dk, "onStakeUnstakeLand", [c], nil) | |
2594 | + | $Tuple2(([ScriptTransfer(gN.caller, 1, fromBase58String(Q)), DeleteEntry(bw(Q)), DeleteEntry(bz(aF, Q, c)), StringEntry(dx(), fe), StringEntry(mp, mq), StringEntry(kT._2, makeString(kT._3, ":")), if ((size(lN) > 1)) | |
2595 | + | then StringEntry(lQ, makeString_11C(removeByIndex(lN, value(dg)), "_")) | |
2596 | + | else DeleteEntry(lQ), IntegerEntry(lX, mv)] ++ mm), ms) | |
2597 | 2597 | } | |
2598 | 2598 | } | |
2599 | 2599 | } | |
2600 | 2600 | } | |
2601 | 2601 | } | |
2602 | 2602 | ||
2603 | 2603 | ||
2604 | 2604 | ||
2605 | 2605 | @Callable(gN) | |
2606 | 2606 | func stakeDuck () = { | |
2607 | - | let | |
2607 | + | let mm = mi(gN) | |
2608 | 2608 | if ((size(gN.payments) != 1)) | |
2609 | 2609 | then throw("Exactly one payment required") | |
2610 | 2610 | else { | |
2611 | - | let | |
2612 | - | let bu = value( | |
2611 | + | let mn = value(gN.payments[0]) | |
2612 | + | let bu = value(mn.assetId) | |
2613 | 2613 | let cS = toString(gN.caller) | |
2614 | - | if (( | |
2614 | + | if ((mn.amount != 1)) | |
2615 | 2615 | then throw((("NFT " + aG) + " token should be attached as payment")) | |
2616 | 2616 | else { | |
2617 | - | let | |
2618 | - | if (if (( | |
2619 | - | then ( | |
2617 | + | let ks = value(assetInfo(bu)) | |
2618 | + | if (if ((ks.issuer != ea)) | |
2619 | + | then (ks.issuer != eb) | |
2620 | 2620 | else false) | |
2621 | 2621 | then throw((("Unknown issuer of " + aG) + " token")) | |
2622 | - | else if (!(contains( | |
2622 | + | else if (!(contains(ks.name, aG))) | |
2623 | 2623 | then throw((("Only NFT " + aG) + " tokens are accepted")) | |
2624 | 2624 | else { | |
2625 | - | let | |
2626 | - | let | |
2627 | - | if (isDefined(getInteger( | |
2628 | - | then throw((("NFT " + | |
2625 | + | let mw = toBase58String(bu) | |
2626 | + | let kt = bw(mw) | |
2627 | + | if (isDefined(getInteger(kt))) | |
2628 | + | then throw((("NFT " + ks.name) + " is already staked")) | |
2629 | 2629 | else if (isDefined(getString(bM(cS)))) | |
2630 | - | then throw(("You already staked one duck: " + | |
2630 | + | then throw(("You already staked one duck: " + ks.name)) | |
2631 | 2631 | else { | |
2632 | - | let | |
2633 | - | let ci = getString( | |
2634 | - | let | |
2635 | - | let | |
2636 | - | let | |
2637 | - | let | |
2638 | - | let | |
2639 | - | ([IntegerEntry( | |
2632 | + | let mg = bO(mw) | |
2633 | + | let ci = getString(mg) | |
2634 | + | let iL = bN(mw) | |
2635 | + | let mx = getString(iL) | |
2636 | + | let kb = A(mw) | |
2637 | + | let kc = aj(valueOrElse(getInteger(E(mw)), 0)) | |
2638 | + | let lv = valueOrElse(getInteger(kb), kc) | |
2639 | + | ([IntegerEntry(kt, lastBlock.timestamp), IntegerEntry(bz(aG, toBase58String(bu), cS), lastBlock.timestamp), StringEntry(bL(mw), cS), StringEntry(bM(cS), mw)] ++ (if (isDefined(ci)) | |
2640 | 2640 | then nil | |
2641 | - | else ([StringEntry( | |
2641 | + | else ([StringEntry(mg, aM)] ++ (if (isDefined(mx)) | |
2642 | 2642 | then nil | |
2643 | - | else (([StringEntry( | |
2643 | + | else (([StringEntry(iL, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(kb, lv)) ++ mm))))) | |
2644 | 2644 | } | |
2645 | 2645 | } | |
2646 | 2646 | } | |
2647 | 2647 | } | |
2648 | 2648 | } | |
2649 | 2649 | ||
2650 | 2650 | ||
2651 | 2651 | ||
2652 | 2652 | @Callable(gN) | |
2653 | - | func unstakeDuck ( | |
2654 | - | let | |
2653 | + | func unstakeDuck (mw) = { | |
2654 | + | let mm = mi(gN) | |
2655 | 2655 | if ((size(gN.payments) != 0)) | |
2656 | 2656 | then throw("No payments required") | |
2657 | 2657 | else { | |
2658 | - | let bu = fromBase58String( | |
2658 | + | let bu = fromBase58String(mw) | |
2659 | 2659 | let cS = toString(gN.caller) | |
2660 | - | let | |
2661 | - | let | |
2662 | - | if (!(isDefined(getInteger( | |
2663 | - | then throw((("NFT " + | |
2660 | + | let ks = value(assetInfo(bu)) | |
2661 | + | let kt = bw(mw) | |
2662 | + | if (!(isDefined(getInteger(kt)))) | |
2663 | + | then throw((("NFT " + ks.name) + " is not staked")) | |
2664 | 2664 | else if (!(isDefined(getString(bM(cS))))) | |
2665 | - | then throw((("The duck " + | |
2665 | + | then throw((("The duck " + ks.name) + " is not staked")) | |
2666 | 2666 | else { | |
2667 | - | let | |
2668 | - | if (( | |
2667 | + | let kv = valueOrErrorMessage(getString(bL(mw)), (("NFT " + ks.name) + " is orphaned")) | |
2668 | + | if ((kv != cS)) | |
2669 | 2669 | then throw("Staked NFT is not yours") | |
2670 | - | else if ( | |
2670 | + | else if (lq(mw)) | |
2671 | 2671 | then throw("unstakeDuck_checkTournament") | |
2672 | - | else if ( | |
2672 | + | else if (lr(mw)) | |
2673 | 2673 | then throw("unstakeDuck_checkDelivery") | |
2674 | 2674 | else { | |
2675 | - | let | |
2676 | - | let | |
2677 | - | let av = valueOrElse(getInteger( | |
2678 | - | if (( | |
2679 | - | then throw((("Please heal your duck to " + toString( | |
2680 | - | else ([ScriptTransfer(gN.caller, 1, bu), DeleteEntry( | |
2675 | + | let kb = A(mw) | |
2676 | + | let kc = aj(valueOrElse(getInteger(E(mw)), 0)) | |
2677 | + | let av = valueOrElse(getInteger(kb), kc) | |
2678 | + | if ((kc > av)) | |
2679 | + | then throw((("Please heal your duck to " + toString(kc)) + "hp before unstaking")) | |
2680 | + | else ([ScriptTransfer(gN.caller, 1, bu), DeleteEntry(kt), DeleteEntry(kb), DeleteEntry(bO(mw)), DeleteEntry(bL(mw)), DeleteEntry(bz(aG, mw, cS)), DeleteEntry(bM(cS))] ++ mm) | |
2681 | 2681 | } | |
2682 | 2682 | } | |
2683 | 2683 | } | |
2684 | 2684 | } | |
2685 | 2685 | ||
2686 | 2686 | ||
2687 | 2687 | ||
2688 | 2688 | @Callable(gN) | |
2689 | - | func claimRes (eL, | |
2690 | - | let | |
2689 | + | func claimRes (eL,my) = { | |
2690 | + | let mm = mi(gN) | |
2691 | 2691 | if ((size(gN.payments) != 0)) | |
2692 | 2692 | then throw("No payments required") | |
2693 | 2693 | else { | |
2694 | 2694 | let c = toString(gN.originCaller) | |
2695 | - | let fm = | |
2695 | + | let fm = kx(c, eL, eD, my) | |
2696 | 2696 | let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked") | |
2697 | - | $Tuple2(((((fm._1 ++ | |
2698 | - | } | |
2699 | - | } | |
2700 | - | ||
2701 | - | ||
2702 | - | ||
2703 | - | @Callable(gN) | |
2704 | - | func claimResToWH (eL, | |
2705 | - | let | |
2697 | + | $Tuple2(((((fm._1 ++ lf(B, fraction(X, eL, cK))._1) :+ StringEntry(fm._2, makeString(fm._3, ":"))) :+ StringEntry(fm._4, makeString(fm._5, ":"))) ++ mm), fm._3[bn]) | |
2698 | + | } | |
2699 | + | } | |
2700 | + | ||
2701 | + | ||
2702 | + | ||
2703 | + | @Callable(gN) | |
2704 | + | func claimResToWH (eL,my) = { | |
2705 | + | let mm = mi(gN) | |
2706 | 2706 | if ((size(gN.payments) != 0)) | |
2707 | 2707 | then throw("No payments required") | |
2708 | 2708 | else { | |
2709 | 2709 | let c = toString(gN.originCaller) | |
2710 | - | let fm = | |
2711 | - | $Tuple2(((((fm._1 ++ | |
2712 | - | } | |
2713 | - | } | |
2714 | - | ||
2715 | - | ||
2716 | - | ||
2717 | - | @Callable(gN) | |
2718 | - | func flight ( | |
2719 | - | let | |
2710 | + | let fm = kx(c, eL, eC, my) | |
2711 | + | $Tuple2(((((fm._1 ++ lg(c, fraction(X, eL, cK))._1) :+ StringEntry(fm._2, makeString(fm._3, ":"))) :+ StringEntry(fm._4, makeString(fm._5, ":"))) ++ mm), fm._5[be]) | |
2712 | + | } | |
2713 | + | } | |
2714 | + | ||
2715 | + | ||
2716 | + | ||
2717 | + | @Callable(gN) | |
2718 | + | func flight (jQ,jR) = { | |
2719 | + | let mm = mj(gN) | |
2720 | 2720 | if ((size(gN.payments) != 0)) | |
2721 | 2721 | then throw("No payments required") | |
2722 | 2722 | else { | |
2723 | 2723 | let bQ = toString(gN.caller) | |
2724 | - | let | |
2725 | - | let | |
2726 | - | let B = | |
2727 | - | let | |
2728 | - | let | |
2729 | - | let | |
2730 | - | if (( | |
2724 | + | let iB = jP(bQ, jQ, jR) | |
2725 | + | let jV = iB._1 | |
2726 | + | let B = iB._2 | |
2727 | + | let mg = bO(B) | |
2728 | + | let kq = valueOrElse(getString(mg), aM) | |
2729 | + | let jX = iB._4 | |
2730 | + | if ((jX == kq)) | |
2731 | 2731 | then throw("You can't fly to the same location") | |
2732 | 2732 | else { | |
2733 | - | let cw = split( | |
2734 | - | let | |
2735 | - | let | |
2733 | + | let cw = split(jX, "_") | |
2734 | + | let mz = (cw[br] == "T") | |
2735 | + | let mA = (cw[br] == "D") | |
2736 | 2736 | let gA = G(B) | |
2737 | - | let | |
2738 | - | let | |
2739 | - | let | |
2740 | - | let | |
2741 | - | let | |
2742 | - | then if (!(cp( | |
2743 | - | then cu( | |
2744 | - | else if (( | |
2745 | - | then $Tuple2( | |
2746 | - | else $Tuple2( | |
2747 | - | else if (ch(dl, | |
2748 | - | then if (!(ch(dl, | |
2737 | + | let mB = valueOrElse(getString(gA), ",;,_,;,_,;,_,;,_,;,_,;,") | |
2738 | + | let mC = fn(mB, iB._5) | |
2739 | + | let mD = mC._1 | |
2740 | + | let mE = mC._2 | |
2741 | + | let mF = if (!(cr(dl, kq))) | |
2742 | + | then if (!(cp(jX))) | |
2743 | + | then cu(kq, jX, 5) | |
2744 | + | else if ((jV > 0)) | |
2745 | + | then $Tuple2(jX, jV) | |
2746 | + | else $Tuple2(kq, 0) | |
2747 | + | else if (ch(dl, kq)) | |
2748 | + | then if (!(ch(dl, jX))) | |
2749 | 2749 | then throw("Your duck is taking part in the tournament") | |
2750 | 2750 | else { | |
2751 | - | let | |
2752 | - | let | |
2751 | + | let lt = parseIntValue(cw[bs]) | |
2752 | + | let mG = split(kq, "_") | |
2753 | 2753 | let cj = valueOrElse(getInteger(dl, bU), 0) | |
2754 | - | if (( | |
2755 | - | then cu( | |
2756 | - | else if (( | |
2754 | + | if ((lt != (parseIntValue(mG[bs]) + 1))) | |
2755 | + | then cu(kq, jX, 7) | |
2756 | + | else if ((jV > 0)) | |
2757 | 2757 | then { | |
2758 | - | let | |
2759 | - | let | |
2760 | - | then invoke(dl, "saveDuckResult", [B, | |
2758 | + | let mH = valueOrElse(getInteger(dl, bY(cj, B)), 0) | |
2759 | + | let mI = if ((lt > mH)) | |
2760 | + | then invoke(dl, "saveDuckResult", [B, lt], nil) | |
2761 | 2761 | else unit | |
2762 | - | if (( | |
2763 | - | then $Tuple2( | |
2762 | + | if ((mI == mI)) | |
2763 | + | then $Tuple2(jX, jV) | |
2764 | 2764 | else throw("Strict value is not equal to itself.") | |
2765 | 2765 | } | |
2766 | - | else $Tuple2( | |
2766 | + | else $Tuple2(kq, 0) | |
2767 | 2767 | } | |
2768 | - | else if (!(cm( | |
2768 | + | else if (!(cm(kq))) | |
2769 | 2769 | then { | |
2770 | - | let | |
2770 | + | let mJ = dC(invoke(this, "autoExitDelivery", [B, jV, if (mA) | |
2771 | 2771 | then "10" | |
2772 | 2772 | else "11", 0], nil)) | |
2773 | - | if (( | |
2774 | - | then if ( | |
2775 | - | then $Tuple2( | |
2776 | - | else if (( | |
2777 | - | then $Tuple2( | |
2778 | - | else $Tuple2( | |
2773 | + | if ((mJ == mJ)) | |
2774 | + | then if (mA) | |
2775 | + | then $Tuple2(mJ, jV) | |
2776 | + | else if ((jV > 0)) | |
2777 | + | then $Tuple2(jX, jV) | |
2778 | + | else $Tuple2(mJ, 0) | |
2779 | 2779 | else throw("Strict value is not equal to itself.") | |
2780 | 2780 | } | |
2781 | - | else if (!( | |
2781 | + | else if (!(mA)) | |
2782 | 2782 | then throw("Your duck is taking part in delivery") | |
2783 | - | else if (!(cm( | |
2784 | - | then cu( | |
2783 | + | else if (!(cm(jX))) | |
2784 | + | then cu(kq, jX, 13) | |
2785 | 2785 | else { | |
2786 | - | let | |
2787 | - | let | |
2788 | - | if (( | |
2789 | - | then cu( | |
2790 | - | else if (if (( | |
2791 | - | then (1 > | |
2786 | + | let lt = parseIntValue(cw[bs]) | |
2787 | + | let mG = split(kq, "_") | |
2788 | + | if ((lt != (parseIntValue(mG[bs]) + 1))) | |
2789 | + | then cu(kq, jX, 14) | |
2790 | + | else if (if ((jV > 0)) | |
2791 | + | then (1 > lt) | |
2792 | 2792 | else false) | |
2793 | - | then $Tuple2( | |
2793 | + | then $Tuple2(jX, jV) | |
2794 | 2794 | else { | |
2795 | - | let | |
2796 | - | if (( | |
2797 | - | then $Tuple2( | |
2795 | + | let mJ = dC(invoke(this, "autoExitDelivery", [B, jV, "15-17", lt], nil)) | |
2796 | + | if ((mJ == mJ)) | |
2797 | + | then $Tuple2(mJ, jV) | |
2798 | 2798 | else throw("Strict value is not equal to itself.") | |
2799 | 2799 | } | |
2800 | 2800 | } | |
2801 | - | let | |
2802 | - | let | |
2803 | - | $Tuple2(((([StringEntry( | |
2801 | + | let mK = mF._1 | |
2802 | + | let mL = mF._2 | |
2803 | + | $Tuple2(((([StringEntry(mg, mK), StringEntry(gA, mD), IntegerEntry(A(B), mL)] ++ mm) ++ (if (mE) | |
2804 | 2804 | then [StringEntry(M(B), "0_0_0_0_0")] | |
2805 | - | else nil)) ++ | |
2805 | + | else nil)) ++ lf(B, if ((jV > 0)) | |
2806 | 2806 | then Y | |
2807 | - | else Z)._1), | |
2807 | + | else Z)._1), iB._3) | |
2808 | 2808 | } | |
2809 | 2809 | } | |
2810 | 2810 | } | |
2811 | 2811 | ||
2812 | 2812 | ||
2813 | 2813 | ||
2814 | 2814 | @Callable(gN) | |
2815 | - | func heal (mL,mM,mN) = { | |
2816 | - | let ml = mh(gN) | |
2817 | - | if (if (if ((0 > mL)) | |
2818 | - | then true | |
2819 | - | else (0 > mM)) | |
2815 | + | func heal (mM,mN,mO) = { | |
2816 | + | let mm = mi(gN) | |
2817 | + | if (if (if ((0 > mM)) | |
2820 | 2818 | then true | |
2821 | 2819 | else (0 > mN)) | |
2820 | + | then true | |
2821 | + | else (0 > mO)) | |
2822 | 2822 | then throw("Quantity cannot be negative") | |
2823 | 2823 | else { | |
2824 | 2824 | let B = valueOrErrorMessage(getString(bM(toString(gN.caller))), "You don't have a duck staked") | |
2825 | - | if ( | |
2825 | + | if (lq(B)) | |
2826 | 2826 | then throw("heal_checkTournament") | |
2827 | - | else if ( | |
2827 | + | else if (lr(B)) | |
2828 | 2828 | then throw("heal_checkDelivery") | |
2829 | 2829 | else { | |
2830 | - | let | |
2831 | - | let | |
2832 | - | let | |
2833 | - | let | |
2834 | - | if (( | |
2835 | - | then throw((("HP should be < " + toString( | |
2830 | + | let mP = [mM, mN, mO] | |
2831 | + | let kb = A(B) | |
2832 | + | let kc = aj(valueOrElse(getInteger(E(B)), 0)) | |
2833 | + | let mQ = valueOrElse(getInteger(kb), kc) | |
2834 | + | if ((mQ >= kc)) | |
2835 | + | then throw((("HP should be < " + toString(kc)) + " to heal")) | |
2836 | 2836 | else { | |
2837 | - | let | |
2838 | - | let | |
2839 | - | let | |
2837 | + | let iL = bN(B) | |
2838 | + | let jo = iK(iL) | |
2839 | + | let mR = if ((jo[bp] == "")) | |
2840 | 2840 | then nil | |
2841 | - | else split_4C( | |
2842 | - | func | |
2841 | + | else split_4C(jo[bp], "_") | |
2842 | + | func mS (eU,ct) = { | |
2843 | 2843 | let dG = eU._2 | |
2844 | - | let hj = if ((size( | |
2845 | - | then parseIntValue( | |
2844 | + | let hj = if ((size(mR) > dG)) | |
2845 | + | then parseIntValue(mR[dG]) | |
2846 | 2846 | else 0 | |
2847 | 2847 | if ((3 > dG)) | |
2848 | 2848 | then { | |
2849 | - | let | |
2850 | - | if (( | |
2849 | + | let mT = mP[dG] | |
2850 | + | if ((mT > hj)) | |
2851 | 2851 | then throw(((("You have only " + toString(hj)) + " of ") + aT[dG])) | |
2852 | - | else $Tuple3((eU._1 :+ toString((hj - | |
2852 | + | else $Tuple3((eU._1 :+ toString((hj - mT))), (dG + 1), (eU._3 + (parseIntValue(split(ct, "_")[aZ]) * mT))) | |
2853 | 2853 | } | |
2854 | 2854 | else $Tuple3((eU._1 :+ toString(hj)), (dG + 1), eU._3) | |
2855 | 2855 | } | |
2856 | 2856 | ||
2857 | 2857 | let fm = { | |
2858 | 2858 | let eW = aX | |
2859 | 2859 | let eX = size(eW) | |
2860 | 2860 | let eY = $Tuple3(nil, 0, 0) | |
2861 | 2861 | func eZ (fa,fb) = if ((fb >= eX)) | |
2862 | 2862 | then fa | |
2863 | - | else | |
2863 | + | else mS(fa, eW[fb]) | |
2864 | 2864 | ||
2865 | 2865 | func fc (fa,fb) = if ((fb >= eX)) | |
2866 | 2866 | then fa | |
2867 | 2867 | else throw("List size exceeds 50") | |
2868 | 2868 | ||
2869 | 2869 | fc(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eY, 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) | |
2870 | 2870 | } | |
2871 | - | let | |
2872 | - | $Tuple2((([IntegerEntry( | |
2871 | + | let mU = min([kc, (mQ + fm._3)]) | |
2872 | + | $Tuple2((([IntegerEntry(kb, mU), StringEntry(iL, makeString_2C([jo[bm], jo[bn], jo[bo], makeString(fm._1, "_")], ":"))] ++ mm) ++ lf(B, (ag * ((mM + mN) + mO)))._1), mU) | |
2873 | 2873 | } | |
2874 | 2874 | } | |
2875 | 2875 | } | |
2876 | 2876 | } | |
2877 | 2877 | ||
2878 | 2878 | ||
2879 | 2879 | ||
2880 | 2880 | @Callable(gN) | |
2881 | 2881 | func healES () = { | |
2882 | - | let | |
2882 | + | let mm = mi(gN) | |
2883 | 2883 | if ((size(gN.payments) != 1)) | |
2884 | 2884 | then throw("Exactly one payment required") | |
2885 | 2885 | else { | |
2886 | - | let | |
2887 | - | if (( | |
2886 | + | let mn = value(gN.payments[0]) | |
2887 | + | if ((mn.assetId != cC)) | |
2888 | 2888 | then throw("Allowed USDT payment only!") | |
2889 | 2889 | else { | |
2890 | 2890 | let B = valueOrErrorMessage(getString(bM(toString(gN.caller))), "You don't have a duck staked") | |
2891 | - | if ( | |
2891 | + | if (lq(B)) | |
2892 | 2892 | then throw("healES_checkTournament") | |
2893 | - | else if ( | |
2893 | + | else if (lr(B)) | |
2894 | 2894 | then throw("healES_checkDelivery") | |
2895 | 2895 | else { | |
2896 | - | let | |
2897 | - | let | |
2898 | - | let | |
2899 | - | if (( | |
2896 | + | let kb = A(B) | |
2897 | + | let kc = aj(valueOrElse(getInteger(E(B)), 0)) | |
2898 | + | let mQ = valueOrElse(getInteger(kb), kc) | |
2899 | + | if ((mQ > 0)) | |
2900 | 2900 | then throw("HP should be 0 to call Emergency Service") | |
2901 | 2901 | else { | |
2902 | - | let | |
2903 | - | let | |
2904 | - | let | |
2902 | + | let iL = bN(B) | |
2903 | + | let jo = iK(iL) | |
2904 | + | let mR = if ((jo[bp] == "")) | |
2905 | 2905 | then nil | |
2906 | - | else split_4C( | |
2907 | - | let | |
2908 | - | then parseIntValue( | |
2906 | + | else split_4C(jo[bp], "_") | |
2907 | + | let mV = if ((size(mR) > 0)) | |
2908 | + | then parseIntValue(mR[0]) | |
2909 | 2909 | else 0 | |
2910 | - | let | |
2911 | - | then parseIntValue( | |
2910 | + | let mW = if ((size(mR) > 1)) | |
2911 | + | then parseIntValue(mR[1]) | |
2912 | 2912 | else 0 | |
2913 | - | let | |
2914 | - | then parseIntValue( | |
2913 | + | let mX = if ((size(mR) > 2)) | |
2914 | + | then parseIntValue(mR[2]) | |
2915 | 2915 | else 0 | |
2916 | - | if (if (if ((mU > 0)) | |
2917 | - | then true | |
2918 | - | else (mV > 0)) | |
2916 | + | if (if (if ((mV > 0)) | |
2919 | 2917 | then true | |
2920 | 2918 | else (mW > 0)) | |
2919 | + | then true | |
2920 | + | else (mX > 0)) | |
2921 | 2921 | then throw("You have to use own Medical Kit") | |
2922 | 2922 | else { | |
2923 | - | let | |
2924 | - | let | |
2925 | - | then split_4C(value( | |
2923 | + | let mY = getString(di, bR()) | |
2924 | + | let mZ = if (isDefined(mY)) | |
2925 | + | then split_4C(value(mY), "_") | |
2926 | 2926 | else nil | |
2927 | - | let | |
2928 | - | then parseIntValue( | |
2927 | + | let na = if ((size(mZ) > 0)) | |
2928 | + | then parseIntValue(mZ[0]) | |
2929 | 2929 | else 0 | |
2930 | - | if ((0 >= | |
2930 | + | if ((0 >= na)) | |
2931 | 2931 | then throw("There are no Medical Kits L1 at Emergency Service storage") | |
2932 | 2932 | else { | |
2933 | - | let | |
2934 | - | let | |
2933 | + | let mU = (mQ + parseIntValue(split(aX[0], "_")[aZ])) | |
2934 | + | let nb = makeString([toString((na - 1)), removeByIndex(mZ, 0)], "_") | |
2935 | 2935 | let ct = split(aX[0], "_") | |
2936 | - | let | |
2937 | - | let | |
2938 | - | if (( | |
2939 | - | then throw(("Payment attached should be " + toString( | |
2936 | + | let nc = cs(ct) | |
2937 | + | let nd = fraction((nc * aO), aN, (cK * bc)) | |
2938 | + | if ((mn.amount != nd)) | |
2939 | + | then throw(("Payment attached should be " + toString(nd))) | |
2940 | 2940 | else { | |
2941 | - | let fm = dC(invoke(di, "updateEsStorage", [ | |
2942 | - | $Tuple2((( | |
2941 | + | let fm = dC(invoke(di, "updateEsStorage", [nb], [AttachedPayment(cC, nd)])) | |
2942 | + | $Tuple2(((mm :+ IntegerEntry(kb, mU)) ++ lf(B, aa)._1), fm) | |
2943 | 2943 | } | |
2944 | 2944 | } | |
2945 | 2945 | } | |
2946 | 2946 | } | |
2947 | 2947 | } | |
2948 | 2948 | } | |
2949 | 2949 | } | |
2950 | 2950 | } | |
2951 | 2951 | ||
2952 | 2952 | ||
2953 | 2953 | ||
2954 | 2954 | @Callable(gN) | |
2955 | - | func updateBackpack (B, | |
2955 | + | func updateBackpack (B,ne) = if ((gN.caller != di)) | |
2956 | 2956 | then throw("permission denied") | |
2957 | - | else $Tuple2([StringEntry(bN(B), | |
2957 | + | else $Tuple2([StringEntry(bN(B), ne)], ne) | |
2958 | 2958 | ||
2959 | 2959 | ||
2960 | 2960 | ||
2961 | 2961 | @Callable(gN) | |
2962 | 2962 | func commitForRandom () = { | |
2963 | - | let | |
2964 | - | let | |
2963 | + | let mm = mi(gN) | |
2964 | + | let nf = (height + dv) | |
2965 | 2965 | let c = toString(gN.caller) | |
2966 | - | $Tuple2(([IntegerEntry(dw(c), | |
2966 | + | $Tuple2(([IntegerEntry(dw(c), nf)] ++ mm), nf) | |
2967 | 2967 | } | |
2968 | 2968 | ||
2969 | 2969 | ||
2970 | 2970 | ||
2971 | 2971 | @Callable(gN) | |
2972 | 2972 | func buySLand () = { | |
2973 | - | let | |
2973 | + | let mm = mi(gN) | |
2974 | 2974 | if ((size(gN.payments) != 1)) | |
2975 | 2975 | then throw("Exactly one payment required") | |
2976 | 2976 | else { | |
2977 | - | let | |
2978 | - | if (( | |
2977 | + | let mn = value(gN.payments[0]) | |
2978 | + | if ((mn.assetId != cC)) | |
2979 | 2979 | then throw("Allowed USDT payment only!") | |
2980 | - | else if (( | |
2980 | + | else if ((mn.amount != ej)) | |
2981 | 2981 | then throw(("Payment attached should be " + toString(ej))) | |
2982 | 2982 | else { | |
2983 | - | let fm = | |
2984 | - | let | |
2985 | - | $Tuple2((((fm._1 :+ ScriptTransfer(di, | |
2983 | + | let fm = jI(gN.caller, gN.transactionId) | |
2984 | + | let ng = dF(invoke(dm, "burnAcres", [ek], nil)) | |
2985 | + | $Tuple2((((fm._1 :+ ScriptTransfer(di, mn.amount, cC)) ++ lg(toString(gN.caller), ac)._1) ++ mm), $Tuple2(fm._2._1, ng)) | |
2986 | 2986 | } | |
2987 | 2987 | } | |
2988 | 2988 | } | |
2989 | 2989 | ||
2990 | 2990 | ||
2991 | 2991 | ||
2992 | 2992 | @Callable(gN) | |
2993 | - | func expedition ( | |
2994 | - | let | |
2993 | + | func expedition (jQ,jR) = { | |
2994 | + | let mm = mi(gN) | |
2995 | 2995 | if ((size(gN.payments) != 0)) | |
2996 | 2996 | then throw("No payments required") | |
2997 | 2997 | else { | |
2998 | 2998 | let bQ = toString(gN.caller) | |
2999 | - | let | |
3000 | - | let B = | |
3001 | - | let | |
3002 | - | let | |
3003 | - | let | |
3004 | - | let | |
3005 | - | let | |
2999 | + | let iB = jP(bQ, jQ, jR) | |
3000 | + | let B = iB._2 | |
3001 | + | let kb = A(B) | |
3002 | + | let iL = bN(B) | |
3003 | + | let jo = iK(iL) | |
3004 | + | let kQ = split(jo[bo], "_") | |
3005 | + | let kS = makeString(fg(true, kQ, ei), "_") | |
3006 | 3006 | let gA = G(B) | |
3007 | - | let | |
3008 | - | let | |
3009 | - | let | |
3010 | - | let | |
3011 | - | let | |
3012 | - | let | |
3013 | - | let fm = if ((0 >= | |
3014 | - | then $Tuple3([IntegerEntry( | |
3015 | - | else $Tuple3(( | |
3007 | + | let mB = valueOrElse(getString(gA), ",;,_,;,_,;,_,;,_,;,_,;,") | |
3008 | + | let nh = fn(mB, iB._5) | |
3009 | + | let mD = nh._1 | |
3010 | + | let mE = nh._2 | |
3011 | + | let ni = jI(gN.caller, gN.transactionId) | |
3012 | + | let jO = ni._2._1 | |
3013 | + | let fm = if ((0 >= iB._1)) | |
3014 | + | then $Tuple3([IntegerEntry(kb, 0), StringEntry(gA, mD)], "", 0) | |
3015 | + | else $Tuple3((ni._1 ++ (if (mE) | |
3016 | 3016 | then [StringEntry(M(B), "0_0_0_0_0")] | |
3017 | - | else ((((nil :+ StringEntry(bO(B), makeString([ | |
3018 | - | if ( | |
3017 | + | else ((((nil :+ StringEntry(bO(B), makeString([ni._2._2, "L", jO], "_"))) :+ IntegerEntry(kb, iB._1)) :+ StringEntry(gA, mD)) :+ StringEntry(iL, makeString([jo[bm], jo[bn], kS, jo[bp]], ":"))))), jO, iB._3) | |
3018 | + | if (lq(B)) | |
3019 | 3019 | then throw("expedition_checkTournament") | |
3020 | - | else if ( | |
3020 | + | else if (lr(B)) | |
3021 | 3021 | then throw("expedition_checkDelivery") | |
3022 | 3022 | else { | |
3023 | - | let | |
3024 | - | $Tuple2(((fm._1 ++ | |
3023 | + | let ng = dF(invoke(dm, "burnAcres", [ek], nil)) | |
3024 | + | $Tuple2(((fm._1 ++ lf(B, ac)._1) ++ mm), $Tuple3(fm._2, fm._3, ng)) | |
3025 | 3025 | } | |
3026 | 3026 | } | |
3027 | 3027 | } | |
3028 | 3028 | ||
3029 | 3029 | ||
3030 | 3030 | ||
3031 | 3031 | @Callable(gN) | |
3032 | 3032 | func buySLandForAcres () = { | |
3033 | - | let | |
3033 | + | let mm = mi(gN) | |
3034 | 3034 | if ((size(gN.payments) != 1)) | |
3035 | 3035 | then throw("exactly 1 payment must be attached") | |
3036 | 3036 | else { | |
3037 | - | let | |
3038 | - | let ft = | |
3039 | - | if (if (!(isDefined( | |
3037 | + | let mn = gN.payments[0] | |
3038 | + | let ft = mn.amount | |
3039 | + | if (if (!(isDefined(mn.assetId))) | |
3040 | 3040 | then true | |
3041 | - | else (value( | |
3041 | + | else (value(mn.assetId) != du)) | |
3042 | 3042 | then throw("ACRES payments only!") | |
3043 | 3043 | else if ((ft != ek)) | |
3044 | 3044 | then throw(("Payment attached should be " + toString(ek))) | |
3045 | 3045 | else { | |
3046 | - | let fm = | |
3047 | - | let | |
3048 | - | $Tuple2(((fm._1 ++ | |
3046 | + | let fm = jI(gN.caller, gN.transactionId) | |
3047 | + | let ng = dF(invoke(dm, "burnAcres", [ek], [AttachedPayment(du, ft)])) | |
3048 | + | $Tuple2(((fm._1 ++ lg(toString(gN.caller), ac)._1) ++ mm), $Tuple2(fm._2._1, ng)) | |
3049 | 3049 | } | |
3050 | 3050 | } | |
3051 | 3051 | } | |
3052 | 3052 | ||
3053 | 3053 | ||
3054 | 3054 | ||
3055 | 3055 | @Callable(gN) | |
3056 | 3056 | func upgradeInfra (Q) = { | |
3057 | - | let | |
3057 | + | let mm = mi(gN) | |
3058 | 3058 | if ((size(gN.payments) != 0)) | |
3059 | 3059 | then throw("No payments required") | |
3060 | 3060 | else { | |
3061 | - | let fm = | |
3061 | + | let fm = kK(true, gN.caller, 0, Q) | |
3062 | 3062 | let B = valueOrErrorMessage(getString(bM(toString(gN.caller))), "You don't have a duck staked") | |
3063 | - | $Tuple2(((fm._1 ++ | |
3064 | - | } | |
3065 | - | } | |
3066 | - | ||
3067 | - | ||
3068 | - | ||
3069 | - | @Callable(gN) | |
3070 | - | func activateArtifact ( | |
3071 | - | let | |
3063 | + | $Tuple2(((fm._1 ++ mm) ++ lf(B, fraction(ad, fm._3, cK))._1), fm._2) | |
3064 | + | } | |
3065 | + | } | |
3066 | + | ||
3067 | + | ||
3068 | + | ||
3069 | + | @Callable(gN) | |
3070 | + | func activateArtifact (nj,nk) = { | |
3071 | + | let mm = mi(gN) | |
3072 | 3072 | if ((size(gN.payments) != 0)) | |
3073 | 3073 | then throw("No payments required") | |
3074 | 3074 | else { | |
3075 | 3075 | let c = toString(gN.caller) | |
3076 | 3076 | let fm = { | |
3077 | - | let cD = | |
3077 | + | let cD = nj | |
3078 | 3078 | if (("PRESALE" == cD)) | |
3079 | - | then | |
3079 | + | then lo(c, nk) | |
3080 | 3080 | else if (("ONBOARD" == cD)) | |
3081 | - | then | |
3081 | + | then lh(c) | |
3082 | 3082 | else throw("Unknown artifact") | |
3083 | 3083 | } | |
3084 | - | (fm ++ | |
3085 | - | } | |
3086 | - | } | |
3087 | - | ||
3088 | - | ||
3089 | - | ||
3090 | - | @Callable(gN) | |
3091 | - | func mergeLands ( | |
3092 | - | let | |
3084 | + | (fm ++ mm) | |
3085 | + | } | |
3086 | + | } | |
3087 | + | ||
3088 | + | ||
3089 | + | ||
3090 | + | @Callable(gN) | |
3091 | + | func mergeLands (lF) = { | |
3092 | + | let mm = mi(gN) | |
3093 | 3093 | if ((size(gN.payments) != 0)) | |
3094 | 3094 | then throw("No payments required") | |
3095 | 3095 | else { | |
3096 | - | let fm = | |
3097 | - | $Tuple2(((fm._1 ++ | |
3098 | - | } | |
3099 | - | } | |
3100 | - | ||
3101 | - | ||
3102 | - | ||
3103 | - | @Callable(gN) | |
3104 | - | func cargoExchange ( | |
3105 | - | let | |
3096 | + | let fm = md(toString(gN.caller), lF) | |
3097 | + | $Tuple2(((fm._1 ++ mm) ++ lg(toString(gN.caller), ae)._1), fm._2) | |
3098 | + | } | |
3099 | + | } | |
3100 | + | ||
3101 | + | ||
3102 | + | ||
3103 | + | @Callable(gN) | |
3104 | + | func cargoExchange (nl,Q) = { | |
3105 | + | let mm = mi(gN) | |
3106 | 3106 | if ((size(gN.payments) != 0)) | |
3107 | 3107 | then throw("No payments required") | |
3108 | 3108 | else { | |
3109 | - | let | |
3109 | + | let jn = split_4C(nl, ":") | |
3110 | 3110 | let c = toString(gN.originCaller) | |
3111 | - | let | |
3112 | - | let | |
3113 | - | if (!(isDefined(getInteger( | |
3114 | - | then throw(( | |
3111 | + | let ks = value(assetInfo(fromBase58String(Q))) | |
3112 | + | let kt = bw(Q) | |
3113 | + | if (!(isDefined(getInteger(kt)))) | |
3114 | + | then throw((ks.name + " is not staked")) | |
3115 | 3115 | else { | |
3116 | - | let | |
3117 | - | if (( | |
3116 | + | let kv = valueOrErrorMessage(getString(bt(Q)), (("NFT " + ks.name) + " is orphaned")) | |
3117 | + | if ((kv != c)) | |
3118 | 3118 | then throw((aF + " is not yours")) | |
3119 | 3119 | else { | |
3120 | - | let | |
3121 | - | let | |
3120 | + | let iZ = (dK(split(ks.description, "_")[do]) / cL) | |
3121 | + | let ja = valueOrElse(getInteger(bD(Q)), 0) | |
3122 | 3122 | let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked") | |
3123 | - | let | |
3124 | - | let ck = split(value( | |
3123 | + | let kq = valueOrElse(getString(bO(B)), aM) | |
3124 | + | let ck = split(value(kq), "_") | |
3125 | 3125 | if ((ck[br] != "L")) | |
3126 | 3126 | then throw((("Duck location type is " + ck[br]) + ", but should be L")) | |
3127 | 3127 | else if ((ck[bs] != Q)) | |
3128 | 3128 | then throw(("Duck should be on the land " + Q)) | |
3129 | 3129 | else { | |
3130 | - | let | |
3131 | - | let | |
3132 | - | let | |
3133 | - | let | |
3134 | - | let fm = | |
3135 | - | let | |
3136 | - | let | |
3137 | - | let | |
3138 | - | ([StringEntry( | |
3130 | + | let iY = bC(Q) | |
3131 | + | let iP = iX(iY, iZ, ja) | |
3132 | + | let iL = bN(B) | |
3133 | + | let jo = iK(iL) | |
3134 | + | let fm = jm(jn, iP, jo) | |
3135 | + | let jg = split(iP[bh], "_") | |
3136 | + | let kH = (parseIntValue(jg[bj]) + fm._7) | |
3137 | + | let kI = (parseIntValue(jg[bk]) - fm._7) | |
3138 | + | ([StringEntry(iL, makeString_2C([jo[bm], fm._4, fm._5, fm._6], ":")), StringEntry(iY, makeString_2C([iP[bd], fm._1, fm._2, fm._3, makeString([jg[bi], toString(kH), toString(kI), jg[bl]], "_")], ":"))] ++ mm) | |
3139 | 3139 | } | |
3140 | 3140 | } | |
3141 | 3141 | } | |
3142 | 3142 | } | |
3143 | 3143 | } | |
3144 | 3144 | ||
3145 | 3145 | ||
3146 | 3146 | ||
3147 | 3147 | @Callable(gN) | |
3148 | - | func saveWarehouse ( | |
3148 | + | func saveWarehouse (jc,Q) = if ((gN.caller != di)) | |
3149 | 3149 | then throw("Access denied") | |
3150 | 3150 | else { | |
3151 | - | let | |
3152 | - | let | |
3153 | - | if ((size( | |
3151 | + | let iY = bC(Q) | |
3152 | + | let jd = split_4C(jc, ":") | |
3153 | + | if ((size(jd) != 5)) | |
3154 | 3154 | then throw("warehouse string should contain 4 ':' separators") | |
3155 | 3155 | else { | |
3156 | - | let | |
3157 | - | let | |
3158 | - | let | |
3159 | - | let | |
3160 | - | if ((0 > | |
3156 | + | let nm = split(jd[bh], "_")[bi] | |
3157 | + | let kH = iO(jd) | |
3158 | + | let nn = iM(jd[bd]) | |
3159 | + | let kI = ((nn - parseIntValue(nm)) - kH) | |
3160 | + | if ((0 > kI)) | |
3161 | 3161 | then throw("Operation leads to negative free warehouse space") | |
3162 | 3162 | else { | |
3163 | - | let | |
3164 | - | $Tuple2([StringEntry( | |
3163 | + | let no = makeString_2C([jd[bd], jd[be], jd[bf], jd[bg], makeString([nm, toString(kH), toString(kI), toString(nn)], "_")], ":") | |
3164 | + | $Tuple2([StringEntry(iY, no)], no) | |
3165 | 3165 | } | |
3166 | 3166 | } | |
3167 | 3167 | } | |
3168 | 3168 | ||
3169 | 3169 | ||
3170 | 3170 | ||
3171 | 3171 | @Callable(gN) | |
3172 | - | func setCustomName (bu, | |
3173 | - | let | |
3172 | + | func setCustomName (bu,lP,by) = { | |
3173 | + | let mm = mi(gN) | |
3174 | 3174 | if ((size(gN.payments) != 1)) | |
3175 | 3175 | then throw("Exactly one payment required") | |
3176 | 3176 | else { | |
3177 | - | let | |
3178 | - | if (( | |
3177 | + | let mn = value(gN.payments[0]) | |
3178 | + | if ((mn.assetId != cC)) | |
3179 | 3179 | then throw("Allowed USDT payment only!") | |
3180 | - | else if (( | |
3180 | + | else if ((mn.amount != ef)) | |
3181 | 3181 | then throw(("Payment should be " + toString(ef))) | |
3182 | - | else if (contains( | |
3183 | - | then throw(("Name should not contain '__': " + | |
3184 | - | else if ((size( | |
3182 | + | else if (contains(lP, "__")) | |
3183 | + | then throw(("Name should not contain '__': " + lP)) | |
3184 | + | else if ((size(lP) > eg)) | |
3185 | 3185 | then throw(("Name too long, maxLength=" + toString(eg))) | |
3186 | 3186 | else { | |
3187 | 3187 | let c = toString(gN.originCaller) | |
3188 | - | let | |
3188 | + | let np = { | |
3189 | 3189 | let cD = by | |
3190 | 3190 | if (("ACCOUNT" == cD)) | |
3191 | 3191 | then { | |
3192 | - | let | |
3193 | - | let | |
3194 | - | if (isDefined( | |
3195 | - | then throw(("Name already registered: " + | |
3192 | + | let nq = eA(lP) | |
3193 | + | let nr = getString(nq) | |
3194 | + | if (isDefined(nr)) | |
3195 | + | then throw(("Name already registered: " + lP)) | |
3196 | 3196 | else { | |
3197 | - | let | |
3198 | - | let | |
3199 | - | let | |
3200 | - | then [DeleteEntry(eA(value( | |
3197 | + | let ns = bG(c) | |
3198 | + | let nt = getString(ns) | |
3199 | + | let nu = if (isDefined(nt)) | |
3200 | + | then [DeleteEntry(eA(value(nt)))] | |
3201 | 3201 | else nil | |
3202 | - | ((( | |
3202 | + | (((nu :+ StringEntry(ns, lP)) :+ StringEntry(nq, c)) ++ lg(c, ab)._1) | |
3203 | 3203 | } | |
3204 | 3204 | } | |
3205 | 3205 | else if (("LAND" == cD)) | |
3206 | 3206 | then { | |
3207 | - | let | |
3208 | - | let | |
3209 | - | if (!(isDefined(getInteger( | |
3210 | - | then throw(( | |
3207 | + | let ks = value(assetInfo(fromBase58String(bu))) | |
3208 | + | let kt = bw(bu) | |
3209 | + | if (!(isDefined(getInteger(kt)))) | |
3210 | + | then throw((ks.name + " is not staked")) | |
3211 | 3211 | else { | |
3212 | - | let | |
3213 | - | if (( | |
3212 | + | let kv = valueOrErrorMessage(getString(bt(bu)), (("NFT " + ks.name) + " is orphaned")) | |
3213 | + | if ((kv != c)) | |
3214 | 3214 | then throw((aF + " is not yours")) | |
3215 | 3215 | else { | |
3216 | - | let | |
3217 | - | let | |
3218 | - | if (isDefined( | |
3219 | - | then throw(("Name already registered: " + | |
3216 | + | let nq = et(lP) | |
3217 | + | let nr = getString(nq) | |
3218 | + | if (isDefined(nr)) | |
3219 | + | then throw(("Name already registered: " + lP)) | |
3220 | 3220 | else { | |
3221 | - | let | |
3222 | - | let | |
3223 | - | let | |
3224 | - | then [DeleteEntry(et(value( | |
3221 | + | let nv = bv(bu) | |
3222 | + | let nt = getString(nv) | |
3223 | + | let nu = if (isDefined(nt)) | |
3224 | + | then [DeleteEntry(et(value(nt)))] | |
3225 | 3225 | else nil | |
3226 | - | ((( | |
3226 | + | (((nu :+ StringEntry(nv, lP)) :+ StringEntry(nq, bu)) ++ lg(c, ab)._1) | |
3227 | 3227 | } | |
3228 | 3228 | } | |
3229 | 3229 | } | |
3230 | 3230 | } | |
3231 | 3231 | else if (("DUCK" == cD)) | |
3232 | 3232 | then { | |
3233 | - | let | |
3234 | - | let | |
3235 | - | if (if (!(isDefined(getInteger( | |
3233 | + | let ks = value(assetInfo(fromBase58String(bu))) | |
3234 | + | let kt = bw(bu) | |
3235 | + | if (if (!(isDefined(getInteger(kt)))) | |
3236 | 3236 | then true | |
3237 | 3237 | else !(isDefined(getString(bM(c))))) | |
3238 | - | then throw(( | |
3238 | + | then throw((ks.name + " is not staked")) | |
3239 | 3239 | else { | |
3240 | - | let | |
3241 | - | if (( | |
3240 | + | let kv = valueOrErrorMessage(getString(bL(bu)), (("NFT " + ks.name) + " is orphaned")) | |
3241 | + | if ((kv != c)) | |
3242 | 3242 | then throw((aG + " is not yours")) | |
3243 | 3243 | else { | |
3244 | - | let | |
3245 | - | let | |
3246 | - | if (isDefined( | |
3247 | - | then throw(("Name already registered: " + | |
3244 | + | let nq = ez(lP) | |
3245 | + | let nr = getString(nq) | |
3246 | + | if (isDefined(nr)) | |
3247 | + | then throw(("Name already registered: " + lP)) | |
3248 | 3248 | else { | |
3249 | - | let | |
3250 | - | let | |
3251 | - | let | |
3252 | - | then [DeleteEntry(ez(value( | |
3249 | + | let nv = bF(bu) | |
3250 | + | let nt = getString(nv) | |
3251 | + | let nu = if (isDefined(nt)) | |
3252 | + | then [DeleteEntry(ez(value(nt)))] | |
3253 | 3253 | else nil | |
3254 | - | ((( | |
3254 | + | (((nu :+ StringEntry(nv, lP)) :+ StringEntry(nq, bu)) ++ lf(bu, ab)._1) | |
3255 | 3255 | } | |
3256 | 3256 | } | |
3257 | 3257 | } | |
3258 | 3258 | } | |
3259 | 3259 | else throw("Unknown entity type") | |
3260 | 3260 | } | |
3261 | - | $Tuple2((( | |
3261 | + | $Tuple2(((np :+ ScriptTransfer(di, mn.amount, cC)) ++ mm), 0) | |
3262 | 3262 | } | |
3263 | 3263 | } | |
3264 | 3264 | } | |
3265 | 3265 | ||
3266 | 3266 | ||
3267 | 3267 | ||
3268 | 3268 | @Callable(gN) | |
3269 | - | func setReferrals ( | |
3269 | + | func setReferrals (nw,nx) = if ((gN.callerPublicKey != ec)) | |
3270 | 3270 | then throw("Permission denied") | |
3271 | 3271 | else { | |
3272 | - | let | |
3272 | + | let mm = mi(gN) | |
3273 | 3273 | if ((size(gN.payments) != 0)) | |
3274 | 3274 | then throw("No payments required") | |
3275 | - | else if (!(isDefined(addressFromString( | |
3276 | - | then throw(("Invalid address: " + | |
3277 | - | else if (!(isDefined(addressFromString( | |
3278 | - | then throw(("Invalid address: " + | |
3275 | + | else if (!(isDefined(addressFromString(nw)))) | |
3276 | + | then throw(("Invalid address: " + nw)) | |
3277 | + | else if (!(isDefined(addressFromString(nx)))) | |
3278 | + | then throw(("Invalid address: " + nx)) | |
3279 | 3279 | else { | |
3280 | - | let | |
3281 | - | let | |
3282 | - | let | |
3283 | - | then split_4C(value( | |
3280 | + | let ny = eB() | |
3281 | + | let nz = getString(ny) | |
3282 | + | let nA = if (isDefined(nz)) | |
3283 | + | then split_4C(value(nz), "_") | |
3284 | 3284 | else nil | |
3285 | - | if (containsElement( | |
3286 | - | then throw(( | |
3285 | + | if (containsElement(nA, nx)) | |
3286 | + | then throw((nx + " is not newbie (already has referrals)")) | |
3287 | 3287 | else { | |
3288 | - | let | |
3289 | - | let | |
3290 | - | if (if (isDefined( | |
3291 | - | then isDefined(addressFromString(value( | |
3288 | + | let li = bH(nx) | |
3289 | + | let lj = getString(li) | |
3290 | + | if (if (isDefined(lj)) | |
3291 | + | then isDefined(addressFromString(value(lj))) | |
3292 | 3292 | else false) | |
3293 | - | then throw((( | |
3293 | + | then throw(((nx + " already has refBy: ") + value(lj))) | |
3294 | 3294 | else { | |
3295 | - | let | |
3296 | - | let | |
3297 | - | let | |
3298 | - | then split_4C(value( | |
3295 | + | let nB = bK(nw) | |
3296 | + | let nC = getString(nB) | |
3297 | + | let nD = if (isDefined(nC)) | |
3298 | + | then split_4C(value(nC), "_") | |
3299 | 3299 | else nil | |
3300 | - | if (containsElement( | |
3301 | - | then throw(((( | |
3300 | + | if (containsElement(nD, nx)) | |
3301 | + | then throw((((nw + " already contains ") + nx) + " within referrals")) | |
3302 | 3302 | else { | |
3303 | - | let | |
3304 | - | let | |
3305 | - | then value( | |
3306 | - | else makeString_2C(( | |
3307 | - | $Tuple2(([StringEntry( | |
3303 | + | let nE = makeString_2C((nD :+ nx), "_") | |
3304 | + | let nF = if (containsElement(nA, nw)) | |
3305 | + | then value(nz) | |
3306 | + | else makeString_2C((nA :+ nw), "_") | |
3307 | + | $Tuple2(([StringEntry(li, nw), StringEntry(nB, nE), StringEntry(ny, nF)] ++ mm), 0) | |
3308 | 3308 | } | |
3309 | 3309 | } | |
3310 | 3310 | } | |
3311 | 3311 | } | |
3312 | 3312 | } | |
3313 | 3313 | ||
3314 | 3314 | ||
3315 | 3315 | ||
3316 | 3316 | @Callable(gN) | |
3317 | - | func distributePoints ( | |
3318 | - | let | |
3317 | + | func distributePoints (nG,nH,nI,nJ,nK) = { | |
3318 | + | let mm = mi(gN) | |
3319 | 3319 | if ((size(gN.payments) != 0)) | |
3320 | 3320 | then throw("No payments required") | |
3321 | 3321 | else { | |
3322 | 3322 | let c = toString(gN.originCaller) | |
3323 | - | let | |
3324 | - | let | |
3325 | - | let | |
3323 | + | let nL = dH(invoke(dk, "checkWlgXpREADONLY", [c], nil)) | |
3324 | + | let nM = dF(nL[1]) | |
3325 | + | let nN = if ((0 >= nM)) | |
3326 | 3326 | then $Tuple2(0, nil) | |
3327 | 3327 | else { | |
3328 | - | let | |
3329 | - | if (( | |
3330 | - | then $Tuple2( | |
3328 | + | let ld = dF(invoke(dk, "takeWlgXp", [c], nil)) | |
3329 | + | if ((ld == ld)) | |
3330 | + | then $Tuple2(nM, [IntegerEntry(I(c), dF(nL[0])), IntegerEntry(H(c), dF(nL[2]))]) | |
3331 | 3331 | else throw("Strict value is not equal to itself.") | |
3332 | 3332 | } | |
3333 | - | let | |
3334 | - | let | |
3333 | + | let nO = nN._1 | |
3334 | + | let nP = nN._2 | |
3335 | 3335 | let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked") | |
3336 | - | let | |
3337 | - | let | |
3338 | - | let | |
3339 | - | let | |
3340 | - | let | |
3341 | - | let | |
3342 | - | if (( | |
3343 | - | then throw((("There are only " + toString( | |
3336 | + | let nQ = J(c) | |
3337 | + | let nR = (valueOrElse(getInteger(nQ), 0) + nO) | |
3338 | + | let nS = F(B) | |
3339 | + | let nT = valueOrElse(getInteger(nS), 0) | |
3340 | + | let nU = (nR + nT) | |
3341 | + | let nV = ((((nG + nH) + nI) + nJ) + nK) | |
3342 | + | if ((nV > nU)) | |
3343 | + | then throw((("There are only " + toString(nU)) + " free points to distribute")) | |
3344 | 3344 | else { | |
3345 | - | let | |
3346 | - | let at = split(valueOrElse(getString( | |
3347 | - | let | |
3348 | - | $Tuple2((([IntegerEntry( | |
3345 | + | let nW = C(B) | |
3346 | + | let at = split(valueOrElse(getString(nW), "0_0_0_0_0"), "_") | |
3347 | + | let nX = (nR - nV) | |
3348 | + | $Tuple2((([IntegerEntry(nQ, if ((0 > nX)) | |
3349 | 3349 | then 0 | |
3350 | - | else | |
3351 | - | then ( | |
3352 | - | else | |
3350 | + | else nX), IntegerEntry(nS, if ((0 > nX)) | |
3351 | + | then (nT + nX) | |
3352 | + | else nT), StringEntry(nW, makeString([toString((parseIntValue(at[l]) + nG)), toString((parseIntValue(at[m]) + nH)), toString((parseIntValue(at[n]) + nI)), toString((parseIntValue(at[o]) + nJ)), toString((parseIntValue(at[p]) + nK))], "_"))] ++ mm) ++ nP), 0) | |
3353 | 3353 | } | |
3354 | 3354 | } | |
3355 | 3355 | } | |
3356 | 3356 | ||
3357 | 3357 | ||
3358 | 3358 | ||
3359 | 3359 | @Callable(gN) | |
3360 | 3360 | func splitByGlobalWeightsREADONLY (eL) = $Tuple2(nil, fd(eL)) | |
3361 | 3361 | ||
3362 | 3362 | ||
3363 | 3363 | ||
3364 | 3364 | @Callable(gN) | |
3365 | - | func splitByGlobalAndLocalWeightsREADONLY ( | |
3365 | + | func splitByGlobalAndLocalWeightsREADONLY (nY,nZ,gQ) = { | |
3366 | 3366 | let gJ = gP(gQ) | |
3367 | - | $Tuple2(nil, $Tuple2(fd( | |
3368 | - | } | |
3369 | - | ||
3370 | - | ||
3371 | - | ||
3372 | - | @Callable(gN) | |
3373 | - | func getBackpackREADONLY (B) = $Tuple2(nil, makeString( | |
3367 | + | $Tuple2(nil, $Tuple2(fd(nY), eO(nZ, gJ))) | |
3368 | + | } | |
3369 | + | ||
3370 | + | ||
3371 | + | ||
3372 | + | @Callable(gN) | |
3373 | + | func getBackpackREADONLY (B) = $Tuple2(nil, makeString(iK(bN(B)), ":")) | |
3374 | 3374 | ||
3375 | 3375 | ||
3376 | 3376 | ||
3377 | 3377 | @Callable(gN) | |
3378 | 3378 | func getWarehouseREADONLY (Q) = { | |
3379 | - | let | |
3380 | - | let | |
3381 | - | let | |
3382 | - | $Tuple2(nil, makeString_2C( | |
3379 | + | let ks = value(assetInfo(fromBase58String(Q))) | |
3380 | + | let iZ = (dK(split(ks.description, "_")[do]) / cL) | |
3381 | + | let ja = valueOrElse(getInteger(bD(Q)), 0) | |
3382 | + | $Tuple2(nil, makeString_2C(iX(bC(Q), iZ, ja), ":")) | |
3383 | 3383 | } | |
3384 | 3384 | ||
3385 | 3385 | ||
3386 | 3386 | ||
3387 | 3387 | @Callable(gN) | |
3388 | 3388 | func saveLastTx () = if (!(containsElement([dk, di, dl, dm], gN.caller))) | |
3389 | 3389 | then throw("Access denied") | |
3390 | - | else $Tuple2( | |
3391 | - | ||
3392 | - | ||
3393 | - | ||
3394 | - | @Callable(gN) | |
3395 | - | func updateDuckStats (B, | |
3390 | + | else $Tuple2(mi(gN), 42) | |
3391 | + | ||
3392 | + | ||
3393 | + | ||
3394 | + | @Callable(gN) | |
3395 | + | func updateDuckStats (B,ld) = if ((gN.caller != di)) | |
3396 | 3396 | then throw("Access denied") | |
3397 | - | else | |
3398 | - | ||
3399 | - | ||
3400 | - | ||
3401 | - | @Callable(gN) | |
3402 | - | func updateAccStats (c, | |
3397 | + | else lf(B, ld) | |
3398 | + | ||
3399 | + | ||
3400 | + | ||
3401 | + | @Callable(gN) | |
3402 | + | func updateAccStats (c,ld) = if (!(containsElement([dk, di, dm], gN.caller))) | |
3403 | 3403 | then throw("Access denied") | |
3404 | - | else | |
3405 | - | ||
3406 | - | ||
3407 | - | ||
3408 | - | @Callable(gN) | |
3409 | - | func equipDuck ( | |
3410 | - | let | |
3404 | + | else lg(c, ld) | |
3405 | + | ||
3406 | + | ||
3407 | + | ||
3408 | + | @Callable(gN) | |
3409 | + | func equipDuck (oa) = { | |
3410 | + | let mm = mi(gN) | |
3411 | 3411 | if ((size(gN.payments) != 0)) | |
3412 | 3412 | then throw("No payments required") | |
3413 | 3413 | else { | |
3414 | 3414 | let c = toString(gN.originCaller) | |
3415 | 3415 | let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked") | |
3416 | - | if ( | |
3416 | + | if (lq(B)) | |
3417 | 3417 | then throw("equipDuck_checkTournament") | |
3418 | - | else if ( | |
3418 | + | else if (lr(B)) | |
3419 | 3419 | then throw("equipDuck_checkDelivery") | |
3420 | 3420 | else { | |
3421 | 3421 | let gA = G(B) | |
3422 | - | let | |
3423 | - | let | |
3424 | - | let | |
3425 | - | let | |
3426 | - | if ((size( | |
3422 | + | let ob = split(valueOrElse(getString(gA), ",;,_,;,_,;,_,;,_,;,_,;,"), "_") | |
3423 | + | let iL = bN(B) | |
3424 | + | let jo = iK(iL) | |
3425 | + | let mD = split(oa, "_") | |
3426 | + | if ((size(mD) != r)) | |
3427 | 3427 | then throw("Wrong equipment string") | |
3428 | 3428 | else { | |
3429 | - | let gC = gp( | |
3430 | - | let gD = split( | |
3429 | + | let gC = gp(ob, fA(jo[bp]), true, nil) | |
3430 | + | let gD = split(mD[q], ";")[1] | |
3431 | 3431 | let ar = if ((gD == "")) | |
3432 | 3432 | then 0 | |
3433 | 3433 | else { | |
3434 | 3434 | let gE = split(gD, ",")[0] | |
3435 | 3435 | if ((gE == "")) | |
3436 | 3436 | then 0 | |
3437 | 3437 | else { | |
3438 | 3438 | let fP = split(gE, ":") | |
3439 | 3439 | let dg = fP[0] | |
3440 | 3440 | let gF = fP[1] | |
3441 | 3441 | if (if (if (if (if ((dg == "06")) | |
3442 | 3442 | then true | |
3443 | 3443 | else (dg == "07")) | |
3444 | 3444 | then true | |
3445 | 3445 | else (dg == "08")) | |
3446 | 3446 | then (gF != "") | |
3447 | 3447 | else false) | |
3448 | 3448 | then (parseIntValue(gF) > 0) | |
3449 | 3449 | else false) | |
3450 | 3450 | then parseIntValue(split(aX[parseIntValue(dg)], "_")[aZ]) | |
3451 | 3451 | else 0 | |
3452 | 3452 | } | |
3453 | 3453 | } | |
3454 | 3454 | let gk = ap(this, B, ar, true) | |
3455 | - | let gG = gp( | |
3456 | - | let | |
3457 | - | $Tuple2(([StringEntry(gA, | |
3455 | + | let gG = gp(mD, gC, false, gk) | |
3456 | + | let oc = fF(gG) | |
3457 | + | $Tuple2(([StringEntry(gA, oa), StringEntry(iL, makeString_2C([jo[bm], jo[bn], jo[bo], oc], ":")), StringEntry(M(B), makeString([toString(gk[7]), toString(gk[8]), toString(gk[9]), toString(gk[10]), toString(gk[11])], "_"))] ++ mm), 0) | |
3458 | 3458 | } | |
3459 | 3459 | } | |
3460 | 3460 | } | |
3461 | 3461 | } | |
3462 | 3462 | ||
3463 | 3463 | ||
3464 | 3464 | ||
3465 | 3465 | @Callable(gN) | |
3466 | - | func fortificateLand (Q, | |
3467 | - | let | |
3466 | + | func fortificateLand (Q,od) = { | |
3467 | + | let mm = mi(gN) | |
3468 | 3468 | if ((size(gN.payments) != 0)) | |
3469 | 3469 | then throw("No payments required") | |
3470 | 3470 | else { | |
3471 | 3471 | let c = toString(gN.originCaller) | |
3472 | 3472 | let B = valueOrElse(getString(bM(c)), "") | |
3473 | 3473 | let fK = ap(this, B, 0, false) | |
3474 | - | let | |
3475 | - | let | |
3476 | - | let | |
3477 | - | let | |
3478 | - | let | |
3479 | - | let | |
3480 | - | let | |
3481 | - | let | |
3482 | - | let | |
3483 | - | let | |
3484 | - | let | |
3485 | - | let | |
3486 | - | let gC = | |
3487 | - | let | |
3488 | - | let | |
3489 | - | let | |
3490 | - | let gG = | |
3491 | - | let | |
3492 | - | let | |
3493 | - | let | |
3494 | - | let | |
3495 | - | $Tuple2(([StringEntry( | |
3474 | + | let oe = bE(Q) | |
3475 | + | let of = split(valueOrElse(getString(oe), ":0_15:0_18:0"), "_") | |
3476 | + | let ks = value(assetInfo(fromBase58String(Q))) | |
3477 | + | let iZ = (dK(split(ks.description, "_")[do]) / cL) | |
3478 | + | let ja = valueOrElse(getInteger(bD(Q)), 0) | |
3479 | + | let iY = bC(Q) | |
3480 | + | let jd = iX(iY, iZ, ja) | |
3481 | + | let og = split(jd[bh], "_") | |
3482 | + | let oh = parseIntValue(og[bj]) | |
3483 | + | let oi = parseIntValue(og[bk]) | |
3484 | + | let oj = split(od, "_") | |
3485 | + | let ok = gw(of, fA(jd[bg]), oh, oi, true, nil) | |
3486 | + | let gC = ok._1 | |
3487 | + | let ol = ok._2 | |
3488 | + | let om = ok._3 | |
3489 | + | let on = gw(oj, gC, ol, om, false, fK) | |
3490 | + | let gG = on._1 | |
3491 | + | let oo = on._2 | |
3492 | + | let op = on._3 | |
3493 | + | let oc = fF(gG) | |
3494 | + | let kY = makeString([og[bi], toString(oo), toString(op), og[bl]], "_") | |
3495 | + | $Tuple2(([StringEntry(oe, od), StringEntry(iY, makeString_2C([jd[bd], jd[be], jd[bf], oc, kY], ":"))] ++ mm), 0) | |
3496 | 3496 | } | |
3497 | 3497 | } | |
3498 | 3498 | ||
3499 | 3499 | ||
3500 | 3500 | ||
3501 | 3501 | @Callable(gN) | |
3502 | 3502 | func initDuckTourAttempt (B) = if ((gN.caller != dl)) | |
3503 | 3503 | then throw("Access denied") | |
3504 | 3504 | else { | |
3505 | - | let | |
3506 | - | let | |
3507 | - | let | |
3508 | - | let | |
3509 | - | let | |
3505 | + | let kb = A(B) | |
3506 | + | let kc = aj(valueOrElse(getInteger(E(B)), 0)) | |
3507 | + | let lv = valueOrElse(getInteger(kb), kc) | |
3508 | + | let oq = bO(B) | |
3509 | + | let kq = valueOrElse(getString(oq), aM) | |
3510 | 3510 | let cj = valueOrElse(getInteger(dl, bU), 0) | |
3511 | - | let | |
3512 | - | $Tuple2([IntegerEntry(K(B), | |
3511 | + | let or = (toString(cj) + "_T_0") | |
3512 | + | $Tuple2([IntegerEntry(K(B), lv), IntegerEntry(kb, kc), StringEntry(L(B), kq), StringEntry(oq, or)], or) | |
3513 | 3513 | } | |
3514 | 3514 | ||
3515 | 3515 | ||
3516 | 3516 | ||
3517 | 3517 | @Callable(gN) | |
3518 | 3518 | func breakAttempt () = { | |
3519 | - | let | |
3519 | + | let mm = mi(gN) | |
3520 | 3520 | let B = valueOrErrorMessage(getString(bM(toString(gN.caller))), "You don't have a duck staked") | |
3521 | - | let | |
3522 | - | let | |
3523 | - | if ((split( | |
3521 | + | let oq = bO(B) | |
3522 | + | let kq = valueOrElse(getString(oq), aM) | |
3523 | + | if ((split(kq, "_")[br] != "T")) | |
3524 | 3524 | then throw("Your duck is not in the tournament") | |
3525 | 3525 | else { | |
3526 | - | let | |
3527 | - | let | |
3528 | - | $Tuple2((( | |
3526 | + | let os = getIntegerValue(K(B)) | |
3527 | + | let lB = getStringValue(L(B)) | |
3528 | + | $Tuple2(((mm :+ IntegerEntry(A(B), os)) :+ StringEntry(oq, lB)), kq) | |
3529 | 3529 | } | |
3530 | 3530 | } | |
3531 | 3531 | ||
3532 | 3532 | ||
3533 | 3533 | ||
3534 | 3534 | @Callable(gN) | |
3535 | 3535 | func exitTournamentInternal (B) = if ((gN.caller != this)) | |
3536 | 3536 | then throw("Access denied") | |
3537 | 3537 | else { | |
3538 | - | let | |
3539 | - | let | |
3540 | - | $Tuple2([IntegerEntry(A(B), | |
3538 | + | let os = getIntegerValue(K(B)) | |
3539 | + | let lB = getStringValue(L(B)) | |
3540 | + | $Tuple2([IntegerEntry(A(B), os), StringEntry(bO(B), lB)], false) | |
3541 | 3541 | } | |
3542 | 3542 | ||
3543 | 3543 | ||
3544 | 3544 | ||
3545 | 3545 | @Callable(gN) | |
3546 | 3546 | func exitDeliveryInternal (B) = if ((gN.caller != this)) | |
3547 | 3547 | then throw("Access denied") | |
3548 | 3548 | else { | |
3549 | - | let | |
3550 | - | $Tuple2(( | |
3549 | + | let ni = ls(B, false, 0, 0) | |
3550 | + | $Tuple2((ni._1 ++ ni._2), false) | |
3551 | 3551 | } | |
3552 | 3552 | ||
3553 | 3553 | ||
3554 | 3554 | ||
3555 | 3555 | @Callable(gN) | |
3556 | - | func autoExitDelivery (B, | |
3556 | + | func autoExitDelivery (B,jV,ot,lt) = if ((gN.caller != this)) | |
3557 | 3557 | then throw("Access denied") | |
3558 | 3558 | else { | |
3559 | - | let | |
3560 | - | $Tuple2( | |
3559 | + | let ni = ls(B, true, jV, lt) | |
3560 | + | $Tuple2(ni._1, ni._3) | |
3561 | 3561 | } | |
3562 | 3562 | ||
3563 | 3563 | ||
3564 | 3564 | ||
3565 | 3565 | @Callable(gN) | |
3566 | - | func breakDelivery () = $Tuple2( | |
3567 | - | ||
3568 | - | ||
3569 | - | ||
3570 | - | @Callable(gN) | |
3571 | - | func prepareRobbery ( | |
3572 | - | let | |
3573 | - | if (!(sigVerify_8Kb( | |
3566 | + | func breakDelivery () = $Tuple2(mi(gN), "breakDelivery") | |
3567 | + | ||
3568 | + | ||
3569 | + | ||
3570 | + | @Callable(gN) | |
3571 | + | func prepareRobbery (jQ,jR) = { | |
3572 | + | let mm = mi(gN) | |
3573 | + | if (!(sigVerify_8Kb(jQ, jR, ec))) | |
3574 | 3574 | then throw("signature does not match") | |
3575 | 3575 | else if ((size(gN.payments) != 1)) | |
3576 | 3576 | then throw("exactly 1 payment must be attached") | |
3577 | 3577 | else { | |
3578 | - | let | |
3579 | - | let | |
3580 | - | if (if (!(isDefined( | |
3578 | + | let mn = gN.payments[0] | |
3579 | + | let ou = mn.amount | |
3580 | + | if (if (!(isDefined(mn.assetId))) | |
3581 | 3581 | then true | |
3582 | - | else (value( | |
3582 | + | else (value(mn.assetId) != ds)) | |
3583 | 3583 | then throw("WLGOLD payments only!") | |
3584 | 3584 | else { | |
3585 | - | let fs = split(toUtf8String( | |
3585 | + | let fs = split(toUtf8String(jQ), "|") | |
3586 | 3586 | if ((size(fs) != 2)) | |
3587 | 3587 | then throw("Wrong message format") | |
3588 | 3588 | else { | |
3589 | 3589 | let B = fs[0] | |
3590 | - | if ( | |
3590 | + | if (lq(B)) | |
3591 | 3591 | then throw("prepareRobbery_checkTournament") | |
3592 | - | else if ( | |
3592 | + | else if (lr(B)) | |
3593 | 3593 | then throw("prepareRobbery_checkDelivery") | |
3594 | 3594 | else { | |
3595 | 3595 | let aB = ax(this, B)._1 | |
3596 | - | if ((aB > | |
3597 | - | then throw(((("Payment " + toString( | |
3596 | + | if ((aB > ou)) | |
3597 | + | then throw(((("Payment " + toString(ou)) + " < required ") + toString(aB))) | |
3598 | 3598 | else { | |
3599 | - | let | |
3599 | + | let ov = split(fs[1], "_") | |
3600 | 3600 | let aA = lastBlock.timestamp | |
3601 | 3601 | let aC = valueOrElse(getInteger(S(B)), 0) | |
3602 | 3602 | let aD = valueOrElse(getString(T(B)), "") | |
3603 | 3603 | let aE = valueOrElse(getInteger(R(aD)), 0) | |
3604 | 3604 | if (if ((aC != y)) | |
3605 | 3605 | then (aE > aA) | |
3606 | 3606 | else false) | |
3607 | 3607 | then throw(("You already started robbing, wait till " + toString(aE))) | |
3608 | 3608 | else { | |
3609 | - | func | |
3610 | - | let | |
3611 | - | let | |
3612 | - | if (( | |
3609 | + | func ow (eU,Q) = { | |
3610 | + | let ox = valueOrElse(getInteger(P(Q)), 0) | |
3611 | + | let oy = valueOrElse(getInteger(R(Q)), 0) | |
3612 | + | if ((ox > size(v))) | |
3613 | 3613 | then throw("Invalid state") | |
3614 | - | else if ((aA > | |
3614 | + | else if ((aA > oy)) | |
3615 | 3615 | then { | |
3616 | - | let | |
3617 | - | if ((0 >= | |
3616 | + | let oz = valueOrElse(getInteger(bw(Q)), 0) | |
3617 | + | if ((0 >= oz)) | |
3618 | 3618 | then eU | |
3619 | 3619 | else { | |
3620 | 3620 | let gu = value(assetInfo(fromBase58String(Q))) | |
3621 | - | let | |
3622 | - | let | |
3623 | - | let | |
3624 | - | let gT = (aA - | |
3625 | - | let | |
3626 | - | if ((w > | |
3621 | + | let kw = split(gu.description, "_") | |
3622 | + | let ki = dK(kw[do]) | |
3623 | + | let oA = kh(Q, ki) | |
3624 | + | let gT = (aA - oz) | |
3625 | + | let kz = fraction(gT, (oA * ki), a) | |
3626 | + | if ((w > kz)) | |
3627 | 3627 | then eU | |
3628 | 3628 | else (eU :+ Q) | |
3629 | 3629 | } | |
3630 | 3630 | } | |
3631 | 3631 | else eU | |
3632 | 3632 | } | |
3633 | 3633 | ||
3634 | - | let | |
3635 | - | let eW = | |
3634 | + | let oB = { | |
3635 | + | let eW = ov | |
3636 | 3636 | let eX = size(eW) | |
3637 | 3637 | let eY = nil | |
3638 | 3638 | func eZ (fa,fb) = if ((fb >= eX)) | |
3639 | 3639 | then fa | |
3640 | - | else | |
3640 | + | else ow(fa, eW[fb]) | |
3641 | 3641 | ||
3642 | 3642 | func fc (fa,fb) = if ((fb >= eX)) | |
3643 | 3643 | then fa | |
3644 | 3644 | else throw("List size exceeds 10") | |
3645 | 3645 | ||
3646 | 3646 | fc(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
3647 | 3647 | } | |
3648 | - | if ((size( | |
3648 | + | if ((size(oB) == 0)) | |
3649 | 3649 | then throw("No candidates for robbery") | |
3650 | 3650 | else { | |
3651 | - | let | |
3652 | - | let Q = | |
3653 | - | $Tuple2(([IntegerEntry(P(Q), x), IntegerEntry(R(Q), (aA + v[x])), IntegerEntry(S(B), z), StringEntry(T(B), Q)] ++ | |
3651 | + | let oC = dV(size(oB), jQ, jR) | |
3652 | + | let Q = oB[oC] | |
3653 | + | $Tuple2(([IntegerEntry(P(Q), x), IntegerEntry(R(Q), (aA + v[x])), IntegerEntry(S(B), z), StringEntry(T(B), Q)] ++ mm), Q) | |
3654 | 3654 | } | |
3655 | 3655 | } | |
3656 | 3656 | } | |
3657 | 3657 | } | |
3658 | 3658 | } | |
3659 | 3659 | } | |
3660 | 3660 | } | |
3661 | 3661 | } | |
3662 | 3662 | ||
3663 | 3663 | ||
3664 | 3664 | ||
3665 | 3665 | @Callable(gN) | |
3666 | - | func robLand ( | |
3667 | - | let | |
3668 | - | if (!(sigVerify_8Kb( | |
3666 | + | func robLand (jQ,jR) = { | |
3667 | + | let mm = mi(gN) | |
3668 | + | if (!(sigVerify_8Kb(jQ, jR, ec))) | |
3669 | 3669 | then throw("signature does not match") | |
3670 | 3670 | else { | |
3671 | 3671 | let bQ = toString(gN.caller) | |
3672 | 3672 | let B = valueOrErrorMessage(getString(bM(bQ)), "You don't have a duck staked") | |
3673 | 3673 | let aA = lastBlock.timestamp | |
3674 | - | $Tuple2(( | |
3674 | + | $Tuple2((mm :+ IntegerEntry(N(B), aA)), 0) | |
3675 | 3675 | } | |
3676 | 3676 | } | |
3677 | 3677 | ||
3678 | 3678 | ||
3679 | 3679 | ||
3680 | 3680 | @Callable(gN) | |
3681 | 3681 | func acceptDelivery () = { | |
3682 | - | let | |
3682 | + | let mm = mi(gN) | |
3683 | 3683 | let bQ = toString(gN.caller) | |
3684 | 3684 | let B = valueOrErrorMessage(getString(bM(bQ)), "You don't have a duck staked") | |
3685 | - | let | |
3686 | - | let | |
3687 | - | if ((aP > ( | |
3688 | - | then throw(((("Delivery is not available, fund=" + dP( | |
3685 | + | let oD = valueOrElse(getInteger(di, bS), 0) | |
3686 | + | let lz = valueOrElse(getInteger(di, bT), 0) | |
3687 | + | if ((aP > (oD - lz))) | |
3688 | + | then throw(((("Delivery is not available, fund=" + dP(oD, 6)) + ", locked=") + dP(lz, 6))) | |
3689 | 3689 | else { | |
3690 | 3690 | let aA = lastBlock.timestamp | |
3691 | - | let | |
3692 | - | if (( | |
3693 | - | then throw(("Delivery is forbidden for your duck until " + toString( | |
3691 | + | let oE = valueOrElse(getInteger(U(B)), 0) | |
3692 | + | if ((oE > aA)) | |
3693 | + | then throw(("Delivery is forbidden for your duck until " + toString(oE))) | |
3694 | 3694 | else { | |
3695 | 3695 | let av = getIntegerValue(A(B)) | |
3696 | 3696 | if ((0 >= av)) | |
3697 | 3697 | then throw("You cannot accept delivery with zero health") | |
3698 | 3698 | else { | |
3699 | - | let | |
3700 | - | let fU = valueOrElse(getInteger( | |
3701 | - | let | |
3702 | - | let | |
3703 | - | let | |
3704 | - | let | |
3705 | - | if (if ((fU >= | |
3706 | - | then ( | |
3699 | + | let ly = V(bQ) | |
3700 | + | let fU = valueOrElse(getInteger(ly), 0) | |
3701 | + | let oF = valueOrElse(getInteger(W(bQ)), 0) | |
3702 | + | let oG = (aA / a) | |
3703 | + | let oH = valueOrElse(getInteger(dm, d(bQ)), 0) | |
3704 | + | let oI = (aR + (oH / aS)) | |
3705 | + | if (if ((fU >= oI)) | |
3706 | + | then (oF == oG) | |
3707 | 3707 | else false) | |
3708 | - | then throw((("You already used " + toString( | |
3709 | - | else if ( | |
3708 | + | then throw((("You already used " + toString(oI)) + " delivery attempts for today")) | |
3709 | + | else if (lq(B)) | |
3710 | 3710 | then throw("acceptDelivery_checkTournament") | |
3711 | - | else if ( | |
3711 | + | else if (lr(B)) | |
3712 | 3712 | then throw("acceptDelivery_checkDelivery") | |
3713 | 3713 | else { | |
3714 | - | let | |
3715 | - | let | |
3716 | - | let | |
3717 | - | let | |
3718 | - | $Tuple2(([StringEntry(L(B), | |
3714 | + | let oJ = dF(invoke(di, "updateDeliveryLocked", [(lz + aP)], nil)) | |
3715 | + | let oq = bO(B) | |
3716 | + | let kq = valueOrElse(getString(oq), aM) | |
3717 | + | let oK = (toString(aA) + "_D_0") | |
3718 | + | $Tuple2(([StringEntry(L(B), kq), StringEntry(oq, oK), IntegerEntry(ly, if ((oF != oG)) | |
3719 | 3719 | then 0 | |
3720 | - | else fU)] ++ | |
3720 | + | else fU)] ++ mm), $Tuple2(oK, oJ)) | |
3721 | 3721 | } | |
3722 | 3722 | } | |
3723 | 3723 | } | |
3724 | 3724 | } | |
3725 | 3725 | } | |
3726 | 3726 | ||
3727 | 3727 | ||
3728 | 3728 | ||
3729 | 3729 | @Callable(gN) | |
3730 | 3730 | func checkDeliveryCallback (B) = if ((gN.caller != dl)) | |
3731 | 3731 | then throw("Access denied") | |
3732 | - | else $Tuple2(nil, lq(B)) | |
3733 | - | ||
3734 | - | ||
3735 | - | ||
3736 | - | @Callable(gN) | |
3737 | - | func genTestREADONLY (iy,gK) = { | |
3738 | - | let jK = hi(toBigInt(sha256(toBytes(iy)))) | |
3739 | - | $Tuple2(nil, hz(jK, gK)) | |
3732 | + | else $Tuple2(nil, lr(B)) | |
3733 | + | ||
3734 | + | ||
3735 | + | ||
3736 | + | @Callable(gN) | |
3737 | + | func genTestREADONLY (iz,gK) = { | |
3738 | + | let oL = value(value(blockInfoByHeight(2827006)).vrf) | |
3739 | + | let jL = hi(toBigInt((oL + sha256(toBytes(iz))))) | |
3740 | + | $Tuple2(nil, hz(jL, gK)) | |
3740 | 3741 | } | |
3741 | 3742 | ||
3742 | 3743 |
github/deemru/w8io/026f985 1055.48 ms ◑