tx · 824xxgQAk3VUU8QcSWzZ1DQ9s1cDp4QyFrhxF2HaGxpr 3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm: -0.09900000 Waves 2023.11.23 23:34 [2856531] smart account 3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm > SELF 0.00000000 Waves
{ "type": 13, "id": "824xxgQAk3VUU8QcSWzZ1DQ9s1cDp4QyFrhxF2HaGxpr", "fee": 9900000, "feeAssetId": null, "timestamp": 1700771696954, "version": 2, "chainId": 84, "sender": "3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm", "senderPublicKey": "EVooykMNV691Venwp1dHUTBd7KWequzUcda57Wd3LQEX", "proofs": [ "24XndcDE99edSQQ7wWBrMcWcYacaFHMZ1dwkVist2aLEjocozmLzBrYQpNmedA6YddeD53nWqpcwCEVgLF2XmqT3" ], "script": "base64:BgLUAQgCEgMKAQgSBAoCCAESAwoBBBIAEgMKAQgSABIDCgEIEgQKAgEIEgQKAgEIEgQKAgICEgUKAwEBARIAEgQKAggIEgASAwoBARIAEgQKAgICEgASAwoBCBIECgIICBIDCgEYEgQKAggIEgQKAggIEgUKAwgICBIECgIICBIHCgUBAQEBARIDCgEBEgUKAwEBCBIDCgEIEgMKAQgSABIECgIIARIECgIIARIDCgEIEgQKAggIEgMKAQgSABIAEgMKAQgSAwoBCBIECgICAhIECgICAhIAnQIACURBWU1JTExJUwCAuJkpARRrZXlMYXN0QXJiVGltZUJ5VXNlcgEEYWRkcgkArAICAhBsYXN0QXJiVGltZVVzZXJfBQRhZGRyARprZXlBY3Jlc1N0YWtlZEFtb3VudEJ5VXNlcgEEYWRkcgkArAICAhhhY3Jlc1N0YWtlZEFtb3VudEJ5VXNlcl8FBGFkZHIABlNDQUxFOACAwtcvAAx4cExldmVsU2NhbGUAgBkAD3hwTGV2ZWxSZWNpcFBvdwCgHwASbnVtUG9pbnRzT25MZXZlbFVwAAMADnJvYmJlcnlDb3N0TWluAIDC1y8AFHJvYmJlcnlDb29sZG93bkNvZWZmAJADAAxyZXF1aXJlbWVudHMJAMwIAgIIU3RyZW5ndGgJAMwIAgIIQWNjdXJhY3kJAMwIAgIJSW50ZWxsZWN0CQDMCAICCUVuZHVyYW5jZQkAzAgCAglEZXh0ZXJpdHkJAMwIAgIFTGV2ZWwJAMwIAgIGSGVhbHRoBQNuaWwADGNoYXJTdHJlbmd0aAAAAAxjaGFyQWNjdXJhY3kAAQANY2hhckludGVsbGVjdAACAA1jaGFyRW5kdXJhbmNlAAMADWNoYXJEZXh0ZXJpdHkABAALc2VnQmFja3BhY2sAAAALTlVNU0VHTUVOVFMABgAKTlVNTUFJTkFVWAACAAhNQVhTTE9UUwACAA1NQVhQUk9ESU5TTE9UAB4AEGxhbmRSb2JDb29sZG93bnMJAMwIAgAACQDMCAIAwM8kCQDMCAIAoPc2CQDMCAIAgNzMFAkAzAgCAICupgoFA25pbAAOTUlOX1JFU19UT19ST0IAgNrECQAMcm9iSWR4TG9ja2VkAAEAC2R1Y2tJZHhGcmVlAAAAEGR1Y2tJZHhQcmVwYXJpbmcAAQENa2V5RHVja0hlYWx0aAELZHVja0Fzc2V0SWQJAKwCAgILZHVja0hlYWx0aF8FC2R1Y2tBc3NldElkAQxrZXlEdWNrQ2hhcnMBC2R1Y2tBc3NldElkCQCsAgICCmR1Y2tDaGFyc18FC2R1Y2tBc3NldElkAQlrZXlEdWNrWFABC2R1Y2tBc3NldElkCQCsAgICB2R1Y2tYUF8FC2R1Y2tBc3NldElkAQxrZXlEdWNrTGV2ZWwBC2R1Y2tBc3NldElkCQCsAgICCmR1Y2tMZXZlbF8FC2R1Y2tBc3NldElkARFrZXlEdWNrRnJlZVBvaW50cwELZHVja0Fzc2V0SWQJAKwCAgIPZHVja0ZyZWVQb2ludHNfBQtkdWNrQXNzZXRJZAEQa2V5RHVja0VxdWlwbWVudAELZHVja0Fzc2V0SWQJAKwCAgIOZHVja0VxdWlwbWVudF8FC2R1Y2tBc3NldElkAQlrZXlVc2VyWFABBGFkZHIJAKwCAgIHdXNlclhQXwUEYWRkcgEMa2V5VXNlckxldmVsAQRhZGRyCQCsAgICCnVzZXJMZXZlbF8FBGFkZHIBEWtleVVzZXJGcmVlUG9pbnRzAQRhZGRyCQCsAgICD3VzZXJGcmVlUG9pbnRzXwUEYWRkcgEOa2V5U2F2ZWRIZWFsdGgBC2R1Y2tBc3NldElkCQCsAgICDHNhdmVkSGVhbHRoXwULZHVja0Fzc2V0SWQBEGtleVNhdmVkTG9jYXRpb24BC2R1Y2tBc3NldElkCQCsAgICDnNhdmVkTG9jYXRpb25fBQtkdWNrQXNzZXRJZAEMa2V5RHVja0J1ZmZzAQtkdWNrQXNzZXRJZAkArAICAgpkdWNrQnVmZnNfBQtkdWNrQXNzZXRJZAEYa2V5TGFzdFJvYmJlcnlUaW1lQnlEdWNrAQtkdWNrQXNzZXRJZAkArAICAhBsYXN0Um9iYmVyeVRpbWVfBQtkdWNrQXNzZXRJZAEYa2V5TGFzdFJvYmJlcnlDb3N0QnlEdWNrAQtkdWNrQXNzZXRJZAkArAICAhBsYXN0Um9iYmVyeUNvc3RfBQtkdWNrQXNzZXRJZAETa2V5TGFuZFJvYmJlcnlTdGF0ZQELbGFuZEFzc2V0SWQJAKwCAgIRbGFuZFJvYmJlcnlTdGF0ZV8FC2xhbmRBc3NldElkARJrZXlMYW5kQ29vbGRvd25FVEEBC2xhbmRBc3NldElkCQCsAgICEGxhbmRDb29sZG93bkVUQV8FC2xhbmRBc3NldElkARNrZXlEdWNrUm9iYmVyeVN0YXRlAQtkdWNrQXNzZXRJZAkArAICAhFkdWNrUm9iYmVyeVN0YXRlXwULZHVja0Fzc2V0SWQBE2tleUxvY2tlZExhbmRCeUR1Y2sBC2R1Y2tBc3NldElkCQCsAgICEWxvY2tlZExhbmRCeUR1Y2tfBQtkdWNrQXNzZXRJZAEUa2V5RHVja0RlbGl2ZXJ5Q291bnQBC2R1Y2tBc3NldElkCQCsAgICGXRvdGFsRGVsaXZlcnlDb3VudEJ5RHVja18FC2R1Y2tBc3NldElkARRrZXlVc2VyRGVsaXZlcnlDb3VudAEEYWRkcgkArAICAhJ1c2VyRGVsaXZlcnlDb3VudF8FBGFkZHIBFmtleVVzZXJMYXN0RGVsaXZlcnlEYXkBBGFkZHIJAKwCAgIUdXNlckxhc3REZWxpdmVyeURheV8FBGFkZHIAB3hwQ2xhaW0AkE4AD3hwU3VjY2Vzc0ZsaWdodACQTgAMeHBGYWlsRmxpZ2h0ANAPAAh4cENhbGxFUwCgjQYADHhwQ3VzdG9tTmFtZQDAhD0ACnhwTmV3U0xhbmQAwJaxAgAOeHBVcGdyYWRlSW5mcmEAkE4AB3hwTWVyZ2UAwIQ9AAl4cE9uYm9hcmQAwIQ9AAZ4cEhlYWwAkE4BCWxldmVsQnlYUAECeHAJAGsDBQx4cExldmVsU2NhbGUJAGwGBQJ4cAAEBQ94cExldmVsUmVjaXBQb3cABAAEBQRET1dOBQZTQ0FMRTgBCW1heEhlYWx0aAEFbGV2ZWwJAGQCAGQFBWxldmVsAQdsZXZlbFVwAgljdXJyTGV2ZWwFbmV3WFAECG5ld0xldmVsCQEJbGV2ZWxCeVhQAQUFbmV3WFAJAMwIAgUIbmV3TGV2ZWwJAMwIAgkAaAIFEm51bVBvaW50c09uTGV2ZWxVcAkAZQIFCG5ld0xldmVsBQljdXJyTGV2ZWwFA25pbAEMZ2V0RHVja1N0YXRzBA9zdGFraW5nQ29udHJhY3QLZHVja0Fzc2V0SWQKYnVmZkVmZmVjdApmb3JjZUJ1ZmZzBAVjaGFycwkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBDGtleUR1Y2tDaGFycwEFC2R1Y2tBc3NldElkAgkwXzBfMF8wXzACAV8EA2x2bAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QJAQxrZXlEdWNrTGV2ZWwBBQtkdWNrQXNzZXRJZAAABAZoZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkCQEJbWF4SGVhbHRoAQUDbHZsBApzdGF0ZUJ1ZmZzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEMa2V5RHVja0J1ZmZzAQULZHVja0Fzc2V0SWQCCTBfMF8wXzBfMAIBXwkAzggCCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUMY2hhclN0cmVuZ3RoCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUMY2hhckFjY3VyYWN5CQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckludGVsbGVjdAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDWNoYXJFbmR1cmFuY2UJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQ1jaGFyRGV4dGVyaXR5CQDMCAIFA2x2bAkAzAgCBQZoZWFsdGgFA25pbAMFCmZvcmNlQnVmZnMJAMwIAgUKYnVmZkVmZmVjdAkAzAgCBQpidWZmRWZmZWN0CQDMCAIFCmJ1ZmZFZmZlY3QJAMwIAgUKYnVmZkVmZmVjdAkAzAgCBQpidWZmRWZmZWN0BQNuaWwJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCnN0YXRlQnVmZnMFDGNoYXJTdHJlbmd0aAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKc3RhdGVCdWZmcwUMY2hhckFjY3VyYWN5CQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpzdGF0ZUJ1ZmZzBQ1jaGFySW50ZWxsZWN0CQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpzdGF0ZUJ1ZmZzBQ1jaGFyRW5kdXJhbmNlCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpzdGF0ZUJ1ZmZzBQ1jaGFyRGV4dGVyaXR5BQNuaWwBDmdldFJvYmJlcnlEYXRhAg9zdGFraW5nQ29udHJhY3QLZHVja0Fzc2V0SWQEC2xhc3RSb2JDb3N0CQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBGGtleUxhc3RSb2JiZXJ5Q29zdEJ5RHVjawEFC2R1Y2tBc3NldElkAAAEC2xhc3RSb2JUaW1lCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBGGtleUxhc3RSb2JiZXJ5VGltZUJ5RHVjawEFC2R1Y2tBc3NldElkAAAEA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAEB3JvYkNvc3QJAJYDAQkAzAgCBQ5yb2JiZXJ5Q29zdE1pbgkAzAgCCQBlAgULbGFzdFJvYkNvc3QJAGgCBRRyb2JiZXJ5Q29vbGRvd25Db2VmZgkAZQIFA25vdwULbGFzdFJvYlRpbWUFA25pbAQJZHVja1N0YXRlCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBE2tleUR1Y2tSb2JiZXJ5U3RhdGUBBQtkdWNrQXNzZXRJZAAABApsb2NrZWRMYW5kCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBE2tleUxvY2tlZExhbmRCeUR1Y2sBBQtkdWNrQXNzZXRJZAIABAdsYW5kRVRBCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBEmtleUxhbmRDb29sZG93bkVUQQEFCmxvY2tlZExhbmQAAAkAlwoFBQdyb2JDb3N0BQtsYXN0Um9iVGltZQUJZHVja1N0YXRlBQpsb2NrZWRMYW5kBQdsYW5kRVRBAApMQU5EUFJFRklYAgRMQU5EAApEVUNLUFJFRklYAgREVUNLAAtST0JPX1BSRUZJWAIEUk9CTwAKQVJUUFJFU0FMRQIHUFJFU0FMRQAGTlVNUkVTAAYAGE1BWF9MQU5EU19TVEFLRURfQllfVVNFUgAZAA9EQUlMWVJFU0JZUElFQ0UAgPjSAQAMV0hNVUxUSVBMSUVSAIDIr6AlAA9ERUZBVUxUTE9DQVRJT04CD0FmcmljYV9GX0FmcmljYQAQUkVTT1VSQ0VQUklDRU1JTgDVtQIACkVTU0VMTENPRUYACgAVTUlOX1VTRFRfRkVFX0RFTElWRVJZANCGAwAXQUxMT1dFRF9GUkVFX0RFTElWRVJJRVMAAQAaQUNSRVNfRk9SX0RFTElWRVJZX0FUVEVNUFQAgOHrFwAJcHJvZFR5cGVzCQDMCAICEEZpcnN0IEFpZCBLaXQgTDEJAMwIAgIQRmlyc3QgQWlkIEtpdCBMMgkAzAgCAhBGaXJzdCBBaWQgS2l0IEwzCQDMCAICC0JhY2twYWNrIEwxCQDMCAICC0JhY2twYWNrIEwyCQDMCAICC0JhY2twYWNrIEwzCQDMCAICDkZvb2QgUmF0aW9uIEwxCQDMCAICDkZvb2QgUmF0aW9uIEwyCQDMCAICDkZvb2QgUmF0aW9uIEwzCQDMCAICC0pldCBQYWNrIEwxCQDMCAICC0pldCBQYWNrIEwyCQDMCAICC0pldCBQYWNrIEwzCQDMCAICCVNoaWVsZCBMMQkAzAgCAglTaGllbGQgTDIJAMwIAgIJU2hpZWxkIEwzCQDMCAICB01pbmUgTDEJAMwIAgIHTWluZSBMMgkAzAgCAgdNaW5lIEwzCQDMCAICB1RyYXAgTDEJAMwIAgIHVHJhcCBMMgkAzAgCAgdUcmFwIEwzCQDMCAICC0Jvb20tRG9nIEwxCQDMCAICC0Jvb20tRG9nIEwyCQDMCAICC0Jvb20tRG9nIEwzBQNuaWwACmNvbnRpbmVudHMJAMwIAgIIQW1lcmljYXMJAMwIAgIGRXVyb3BlCQDMCAICBEFzaWEJAMwIAgIGQWZyaWNhCQDMCAICB09jZWFuaWEFA25pbAAJQ09FRkYyTUFUAICt4gQAEGZvcnRBbGxvd2VkUHJvZHMJAMwIAgAPCQDMCAIAEAkAzAgCABEJAMwIAgASCQDMCAIAEwkAzAgCABQJAMwIAgAVCQDMCAIAFgkAzAgCABcFA25pbAAQcHJvZHVjdGlvbk1hdHJpeAkAzAgCAiU4XzhfOF8xN18xN180Ml8xMl8wXzMwXzAsMCwwLDAsMCwwLDBfCQDMCAICJThfOF84XzE3XzE3XzQyXzI0XzBfNjBfMCwwLDUsMiwwLDAsMF8JAMwIAgInOF84XzhfMTdfMTdfNDJfMzZfMF8xMjBfMCwwLDEwLDQsMCwwLDBfCQDMCAICKThfMTlfMTlfOF8yN18xOV8yNl8xXzIwXzAsMCwwLDAsMCwwLDBfMDAxCQDMCAICKThfMTlfMTlfOF8yN18xOV81Ml8xXzQwXzAsMCwwLDAsMCwwLDBfMDAxCQDMCAICKThfMTlfMTlfOF8yN18xOV83OF8xXzgwXzAsMCwwLDAsMCwwLDBfMDAxCQDMCAICJThfOF84XzhfOF82MF8xM18yXzJfMCwwLDAsMCwwLDAsMF8wMTEJAMwIAgIlOF84XzhfOF84XzYwXzI2XzJfNF8wLDAsMCwwLDAsMCwwXzAxMQkAzAgCAiU4XzhfOF84XzhfNjBfMzlfMl84XzAsMCwwLDAsMCwwLDBfMDExCQDMCAICKTMwXzMwXzNfMTdfMTdfM18zMF8zXzMwXzAsMCwwLDAsMCwwLDBfMTExCQDMCAICKTMwXzMwXzNfMTdfMTdfM182MF8zXzUwXzAsMCwwLDAsMCwwLDBfMTExCQDMCAICKTMwXzMwXzNfMTdfMTdfM185MF8zXzcwXzAsMCwwLDAsMCwwLDBfMTExCQDMCAICKzE4XzE4XzEwXzE4XzE4XzE4XzExXzRfMTBfMCwwLDAsMCwwLDAsMF8yMDEJAMwIAgIrMThfMThfMTBfMThfMThfMThfMjJfNF8yMF8wLDAsMCwwLDAsMCwwXzIwMQkAzAgCAisxOF8xOF8xMF8xOF8xOF8xOF8zM180XzMwXzAsMCwwLDAsMCwwLDBfMjAxCQDMCAICKjRfMTNfMjJfNF8zNV8yMl8yM18wXzUwLDEsMF8wLDAsMCwwLDAsMCwwXwkAzAgCAio0XzEzXzIyXzRfMzVfMjJfNDZfMF81MCwxLDFfMCwyLDUsMCwwLDAsMF8JAMwIAgIrNF8xM18yMl80XzM1XzIyXzY5XzBfNTAsMiwxXzAsNSwxMCwwLDAsMCwwXwkAzAgCAio1XzI1XzQwXzVfMTBfMTVfMjBfMV8zMCwxLDFfMCwwLDAsMCwwLDAsMF8JAMwIAgIqNV8yNV80MF81XzEwXzE1XzQwXzFfMzAsMSwyXzIsMSwzLDAsMCwwLDBfCQDMCAICKjVfMjVfNDBfNV8xMF8xNV82MF8xXzMwLDEsM181LDIsOCwwLDAsMCwwXwkAzAgCAicyM18yM181XzIwXzIzXzZfMzVfMl8xMDBfMCwwLDAsMCwwLDAsMF8JAMwIAgInMjNfMjNfNV8yMF8yM182XzcwXzJfMTUwXzAsMCwwLDAsMCwwLDBfCQDMCAICKDIzXzIzXzVfMjBfMjNfNl8xMDVfMl8yMDBfMCwwLDAsMCwwLDAsMF8FA25pbAAJcklkeENvZWZmAAYACnJJZHhFZmZlY3QACAAQcklkeFJlcXVpcmVtZW50cwAJAAlySWR4U2xvdHMACgAOUFJPRFVDVFBLR1NJWkUACgALd2hJZHhMZXZlbHMAAAAId2hJZHhSZXMAAQAId2hJZHhNYXQAAgAJd2hJZHhQcm9kAAMACXdoSWR4TE9GVAAEAAl2b2xMb2NrZWQAAAALdm9sT2NjdXBpZWQAAQAHdm9sRnJlZQACAAh2b2xUb3RhbAADAApicElkeExldmVsAAAACGJwSWR4UmVzAAEACGJwSWR4TWF0AAIACWJwSWR4UHJvZAADAA9sb2NJZHhDb250aW5lbnQAAAAKbG9jSWR4VHlwZQABAAhsb2NJZHhJZAACARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBB2Fzc2V0SWQJAKwCAgIDbm9fBQdhc3NldElkARprZXlMYW5kQXNzZXRJZFRvQ3VzdG9tTmFtZQEHYXNzZXRJZAkArAICAgVsY25hXwUHYXNzZXRJZAEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEHYXNzZXRJZAkArAICAgNzdF8FB2Fzc2V0SWQBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgR0eXBlB2Fzc2V0SWQJALkJAgkAzAgCAgNsYXMJAMwIAgUEdHlwZQkAzAgCBQdhc3NldElkBQNuaWwCAV8BImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDB25mdFR5cGUHYXNzZXRJZAlvd25lckFkZHIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgZzdHRhb18FB25mdFR5cGUCAV8FB2Fzc2V0SWQCAV8FCW93bmVyQWRkcgESa2V5V2FyZWhvdXNlQnlMYW5kAQtsYW5kQXNzZXRJZAkArAICAgN3aF8FC2xhbmRBc3NldElkARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQdhc3NldElkCQCsAgICC2luZnJhTGV2ZWxfBQdhc3NldElkARdrZXlGb3J0aWZpY2F0aW9uc0J5TGFuZAELbGFuZEFzc2V0SWQJAKwCAgIPZm9ydGlmaWNhdGlvbnNfBQtsYW5kQXNzZXRJZAEaa2V5RHVja0Fzc2V0SWRUb0N1c3RvbU5hbWUBB2Fzc2V0SWQJAKwCAgIYZHVja0N1c3RvbU5hbWVCeUFzc2V0SWRfBQdhc3NldElkARZrZXlBZGRyZXNzVG9DdXN0b21OYW1lAQRhZGRyCQCsAgICGGFjY291bnRDdXN0b21OYW1lQnlBZGRyXwUEYWRkcgEPa2V5QWRkcmVzc1JlZkJ5AQRhZGRyCQCsAgICCWFjY1JlZkJ5XwUEYWRkcgEca2V5T25ib2FyZEFydEFjdGl2YXRlZE9uRHVjawELZHVja0Fzc2V0SWQJAKwCAgIab25ib2FyZEFydEFjdGl2YXRlZE9uRHVja18FC2R1Y2tBc3NldElkARxrZXlPbmJvYXJkQXJ0RHVja0FjdGl2YXRlZEJ5AQRhZGRyCQCsAgICGm9uYm9hcmRBcnRBY3RpdmF0ZWREdWNrQnlfBQRhZGRyARNrZXlBZGRyZXNzUmVmZXJyYWxzAQRhZGRyCQCsAgICDWFjY1JlZmVycmFsc18FBGFkZHIBEGtleUR1Y2tJZFRvT3duZXIBB2Fzc2V0SWQJAKwCAgIKZHVja093bmVyXwUHYXNzZXRJZAEUa2V5U3Rha2VkRHVja0J5T3duZXIBCW93bmVyQWRkcgkArAICAhJzdGFrZWREdWNrQnlPd25lcl8FCW93bmVyQWRkcgERa2V5QmFja3BhY2tCeUR1Y2sBC2R1Y2tBc3NldElkCQCsAgICCWJhY2tQYWNrXwULZHVja0Fzc2V0SWQBD2tleUR1Y2tMb2NhdGlvbgELZHVja0Fzc2V0SWQJAKwCAgINZHVja0xvY2F0aW9uXwULZHVja0Fzc2V0SWQBFWtleVVzZXJHd2xSZWxlYXNlVGltZQEIdXNlckFkZHIJAKwCAgIaJXMlc19fdXNlckd3bFJlbGVhc2VUaW1lX18FCHVzZXJBZGRyAQ5rZXlFc1dhcmVob3VzZQACGmVtZXJnZW5jeVdhcmVob3VzZVByb2R1Y3RzAA9kZWxpdmVyeUZ1bmRLZXkCDGRlbGl2ZXJ5RnVuZAANbGFzdFRvdXJJZEtleQIOJXNfX2xhc3RUb3VySWQBFWtleVRvdXJTdGF0aWNEYXRhQnlJZAEDdElkCQCsAgICFiVzJWRfX3RvdXJTdGF0aWNEYXRhX18JAKQDAQUDdElkARZrZXlUb3VyRHluYW1pY0RhdGFCeUlkAQN0SWQJAKwCAgIXJXMlZF9fdG91ckR5bmFtaWNEYXRhX18JAKQDAQUDdElkARprZXlCZXN0UmVzdWx0QnlUb3VyQW5kRHVjawIDdElkC2R1Y2tBc3NldElkCQC5CQIJAMwIAgIfJXMlZCVzX19iZXN0UmVzdWx0QnlUb3VyQW5kRHVjawkAzAgCCQCkAwEFA3RJZAkAzAgCBQtkdWNrQXNzZXRJZAUDbmlsAgJfXwAJaWR4U3RhdGljAAAACmlkeER5bmFtaWMAAQAKdFN0YXRpY0VuZAAGAA50RHluYW1pY1N0YXR1cwABAQtnZXRUb3VyRGF0YQIMdG91ckNvbnRyYWN0A3RJZAQGc3RhdGljCQC1CQIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQx0b3VyQ29udHJhY3QJARVrZXlUb3VyU3RhdGljRGF0YUJ5SWQBBQN0SWQJAKwCAgkArAICAhlFcnJvciByZWFkaW5nIHRvdXJuYW1lbnQgCQCkAwEFA3RJZAIFIGRhdGECAl9fBAdkeW5hbWljCQC8CQIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQx0b3VyQ29udHJhY3QJARZrZXlUb3VyRHluYW1pY0RhdGFCeUlkAQUDdElkCQCsAgIJAKwCAgIZRXJyb3IgcmVhZGluZyB0b3VybmFtZW50IAkApAMBBQN0SWQCBSBkYXRhAgJfXwkAzAgCBQZzdGF0aWMJAMwIAgUHZHluYW1pYwUDbmlsAQ5pc0luVG91cm5hbWVudAIMdG91ckNvbnRyYWN0CGxvY2F0aW9uBAZsYXN0SWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUMdG91ckNvbnRyYWN0BQ1sYXN0VG91cklkS2V5AAAEA2xvYwkAtQkCBQhsb2NhdGlvbgIBXwQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQFdERhdGEJAQtnZXRUb3VyRGF0YQIFDHRvdXJDb250cmFjdAUGbGFzdElkBAZzdGF0aWMJAJEDAgUFdERhdGEFCWlkeFN0YXRpYwQHZHluYW1pYwkAkQMCBQV0RGF0YQUKaWR4RHluYW1pYwMDAwkAAAIJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAgFUCQAAAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFA2xvYwUPbG9jSWR4Q29udGluZW50BQZsYXN0SWQHCQAAAgkAkQMCBQdkeW5hbWljBQ50RHluYW1pY1N0YXR1cwIKSU5QUk9HUkVTUwcJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGc3RhdGljBQp0U3RhdGljRW5kBQNub3cHAQlvbk1pc3Npb24CDHRvdXJDb250cmFjdAhsb2NhdGlvbgQGbGFzdElkCQELdmFsdWVPckVsc2UCCQCaCAIFDHRvdXJDb250cmFjdAUNbGFzdFRvdXJJZEtleQAABANsb2MJALUJAgUIbG9jYXRpb24CAV8EA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAEBXREYXRhCQELZ2V0VG91ckRhdGECBQx0b3VyQ29udHJhY3QFBmxhc3RJZAQGc3RhdGljCQCRAwIFBXREYXRhBQlpZHhTdGF0aWMEB2R5bmFtaWMJAJEDAgUFdERhdGEFCmlkeER5bmFtaWMEB2xvY1R5cGUJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAwMDCQAAAgkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCAVQJAAACCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDbG9jBQ9sb2NJZHhDb250aW5lbnQFBmxhc3RJZAcJAAACCQCRAwIFB2R5bmFtaWMFDnREeW5hbWljU3RhdHVzAgpJTlBST0dSRVNTBwkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZzdGF0aWMFCnRTdGF0aWNFbmQFA25vdwcBEmdldFJlY2lwZU1hdGVyaWFscwEGcmVjaXBlCQBoAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBnJlY2lwZQUJcklkeENvZWZmBQlDT0VGRjJNQVQBDGNoZWF0QXR0ZW1wdAMGb2xkTG9jBm5ld0xvYwljaGVhdENhc2UJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIWQ2hlYXQgYXR0ZW1wdDogb2xkTG9jPQUGb2xkTG9jAgksIG5ld0xvYz0FBm5ld0xvYwIHLCBjYXNlPQkApAMBBQljaGVhdENhc2UAFktTX1NFUEFSQVRFX1BVQkxJQ19LRVkHABhLU19BTExPV19CSUdfSU5GUkFfTUVSR0UHABNLU19BTExPV19ST0JPX0RVQ0tTBwAKREFZX01JTExJUwCAuJkpAAVjaGFpbgkAyQECCQDKAQIIBQR0aGlzBWJ5dGVzAAEAAQADcHViBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAwUWS1NfU0VQQVJBVEVfUFVCTElDX0tFWQEgqxdXjxVn41lUQbDWcutmm8Sj02Ze1ZmGUN+YNx+yCQgBIE9T4ho/VKjWnVJOEx1GJ1W9s1PzLHvJVFSw/0PBtBQoAwkAAAIBAVQFByRtYXRjaDABIE9T4ho/VKjWnVJOEx1GJ1W9s1PzLHvJVFSw/0PBtBQoCQACAQINVW5rbm93biBjaGFpbgALdXNkdEFzc2V0SWQEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDABIITaerIIAz9O0bvKju6Lk7zJgt0LXfoHlqjUI/moD/+5AwkAAAIBAVQFByRtYXRjaDABIFWx2J9yh4Lv5eNbjawFq2XemkOhLxa7BfMat4el8cUYCQACAQINVW5rbm93biBjaGFpbgAVZGVmYXVsdFJlc3RBZGRyZXNzU3RyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAiMzUFFDdXZGYnZoNExrUFVucm5VMXozam5iQTFwOW0zV05odgMJAAACAQFUBQckbWF0Y2gwAiMzTXVta0dHenRDS0FYcFdEcXhrZGRvZnFYU1VicVFrdlNKeQkAAgECDVVua25vd24gY2hhaW4AEUluZnJhVXBncmFkZUNvc3RTBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAIDIr6AlAwkAAAIBAVQFByRtYXRjaDAAgMLXLwkAAgECDVVua25vd24gY2hhaW4ADmFyYml0cmFnZURlbGF5BAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwBQpEQVlfTUlMTElTAwkAAAIBAVQFByRtYXRjaDAA4NQDCQACAQINVW5rbm93biBjaGFpbgADU0VQAgJfXwAFTVVMVDYAwIQ9AAVNVUxUOACAwtcvAAVTU0laRQAZAAVNU0laRQBkAAVMU0laRQDhAQAGWExTSVpFAJADAAdYWExTSVpFAPEEAAVJVEVSNgkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQUDbmlsAQ9nZXRTdHJpbmdPckZhaWwCB2FkZHJlc3MDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUHYWRkcmVzcwUDa2V5CQC5CQIJAMwIAgIKbWFuZGF0b3J5IAkAzAgCCQClCAEFB2FkZHJlc3MJAMwIAgIBLgkAzAgCBQNrZXkJAMwIAgIPIGlzIG5vdCBkZWZpbmVkBQNuaWwCAAARSWR4Q2ZnU3Rha2luZ0RhcHAAAQARSWR4Q2ZnRWNvbm9teURhcHAAAgAUSWR4Q2ZnR292ZXJuYW5jZURhcHAAAwANSWR4Q2ZnV2xnRGFwcAAEABRJZHhDZmdUb3VybmFtZW50RGFwcAAHAA9JZHhDZmdBY3Jlc0RhcHAACAEKa2V5UmVzdENmZwACDiVzX19yZXN0Q29uZmlnAQ5rZXlSZXN0QWRkcmVzcwACDCVzX19yZXN0QWRkcgERcmVhZFJlc3RDZmdPckZhaWwBBHJlc3QJALwJAgkBD2dldFN0cmluZ09yRmFpbAIFBHJlc3QJAQprZXlSZXN0Q2ZnAAUDU0VQARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCB3Jlc3RDZmcDaWR4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQdyZXN0Q2ZnBQNpZHgJAKwCAgIqUmVzdCBjZmcgZG9lc24ndCBjb250YWluIGFkZHJlc3MgYXQgaW5kZXggCQCkAwEFA2lkeAAMcmVzdENvbnRyYWN0CQERQGV4dHJOYXRpdmUoMTA2MikBCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMJAQ5rZXlSZXN0QWRkcmVzcwAFFWRlZmF1bHRSZXN0QWRkcmVzc1N0cgAHcmVzdENmZwkBEXJlYWRSZXN0Q2ZnT3JGYWlsAQUMcmVzdENvbnRyYWN0AA9zdGFraW5nQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRFJZHhDZmdTdGFraW5nRGFwcAAPZWNvbm9teUNvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwURSWR4Q2ZnRWNvbm9teURhcHAAC2dvdkNvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwUUSWR4Q2ZnR292ZXJuYW5jZURhcHAAC3dsZ0NvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwUNSWR4Q2ZnV2xnRGFwcAASdG91cm5hbWVudENvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwUUSWR4Q2ZnVG91cm5hbWVudERhcHAADWFjcmVzQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBQ9JZHhDZmdBY3Jlc0RhcHAACnJlY0xhbmROdW0AAAALcmVjTGFuZFNpemUAAQALcmVjVGVycmFpbnMAAgAMcmVjQ29udGluZW50AAMADXdsZ0Fzc2V0SWRLZXkCC3dsZ19hc3NldElkAAp3bGdBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJwIAgULd2xnQ29udHJhY3QFDXdsZ0Fzc2V0SWRLZXkCGFdMR09MRCBpcyBub3QgaXNzdWVkIHlldAAPYWNyZXNBc3NldElkS2V5AgxhY3Jlc0Fzc2V0SWQADGFjcmVzQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCcCAIFDWFjcmVzQ29udHJhY3QFD2FjcmVzQXNzZXRJZEtleQIXQUNSRVMgaXMgbm90IGlzc3VlZCB5ZXQAC3JhbmRvbURlbGF5AAIBCWtleUNvbW1pdAEHYWRkcmVzcwkArAICAhNmaW5pc2hCbG9ja0ZvckFkZHJfBQdhZGRyZXNzARFrZXlSZXNQcm9wb3J0aW9ucwACE3Jlc1R5cGVzUHJvcG9ydGlvbnMBFmtleVJlc1R5cGVzQnlDb250aW5lbnQBCWNvbnRpbmVudAkArAICAhRyZXNUeXBlc0J5Q29udGluZW50XwUJY29udGluZW50ARVrZXlTdGFrZWRMYW5kc0J5T3duZXIBCW93bmVyQWRkcgkArAICAhNzdGFrZWRMYW5kc0J5T3duZXJfBQlvd25lckFkZHIBFmtleVN0YWtlZFBpZWNlc0J5T3duZXIBCW93bmVyQWRkcgkArAICAhRzdGFrZWRQaWVjZXNCeU93bmVyXwUJb3duZXJBZGRyAQhhc1N0cmluZwEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAFAXMJAAIBAhhmYWlsIHRvIGNhc3QgaW50byBTdHJpbmcBBWFzSW50AQF2BAckbWF0Y2gwBQF2AwkAAQIFByRtYXRjaDACA0ludAQBbgUHJG1hdGNoMAUBbgkAAgECFWZhaWwgdG8gY2FzdCBpbnRvIEludAEJYXNBbnlMaXN0AQF2BAckbWF0Y2gwBQF2AwkAAQIFByRtYXRjaDACCUxpc3RbQW55XQQBbAUHJG1hdGNoMAUBbAkAAgECG2ZhaWwgdG8gY2FzdCBpbnRvIExpc3RbQW55XQEJYXNCb29sZWFuAQF2BAckbWF0Y2gwBQF2AwkAAQIFByRtYXRjaDACB0Jvb2xlYW4EAXMFByRtYXRjaDAFAXMJAAIBAhlmYWlsIHRvIGNhc3QgaW50byBCb29sZWFuAQ9udW1QaWVjZXNCeVNpemUBCGxhbmRTaXplBAckbWF0Y2gwBQhsYW5kU2l6ZQMJAAACAgFTBQckbWF0Y2gwBQVTU0laRQMJAAACAgFNBQckbWF0Y2gwBQVNU0laRQMJAAACAgFMBQckbWF0Y2gwBQVMU0laRQMJAAACAgJYTAUHJG1hdGNoMAUGWExTSVpFAwkAAAICA1hYTAUHJG1hdGNoMAUHWFhMU0laRQkAAgECEVVua25vd24gbGFuZCBzaXplAQdpc0RpZ2l0AQFzCQEJaXNEZWZpbmVkAQkAtgkBBQFzAQprZXlCbG9ja2VkAAIQY29udHJhY3RzQmxvY2tlZAERa2V5TGFzdFR4SWRCeVVzZXIBBGFkZHIJAKwCAgIPbGFzdFR4SWRCeVVzZXJfBQRhZGRyAQpmaXhlZFBvaW50AgN2YWwIZGVjaW1hbHMEBnRlblBvdwkAbAYACgAABQhkZWNpbWFscwAAAAAFBERPV04EB2xvd1BhcnQJAKQDAQkAagIFA3ZhbAUGdGVuUG93BAZ6ZXJvZXMJALACAgkApAMBBQZ0ZW5Qb3cJAGQCAAEJALECAQUHbG93UGFydAkArAICCQCsAgIJAKwCAgkApAMBCQBpAgUDdmFsBQZ0ZW5Qb3cCAS4FBnplcm9lcwUHbG93UGFydAEPZ2V0UmFuZG9tTnVtYmVyAwhtYXhWYWx1ZQRzYWx0B2VudHJvcHkDCQBnAgAABQhtYXhWYWx1ZQkAAgECFm1heFZhbHVlIHNob3VsZCBiZSA+IDAECnJhbmRvbUhhc2gJAPcDAQkAywECBQRzYWx0BQdlbnRyb3B5CQBqAgkAsQkBBQpyYW5kb21IYXNoBQhtYXhWYWx1ZQANaW5jdWJhdG9yQWRkcgQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAkBEUBleHRyTmF0aXZlKDEwNjIpAQIjM1BFa3RWdXgyUmhjaFNONjNEc0RvNGI0bXo0UXF6S1NlRHYDCQAAAgEBVAUHJG1hdGNoMAUEdGhpcwkAAgECDVVua25vd24gY2hhaW4AC2JyZWVkZXJBZGRyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwCQERQGV4dHJOYXRpdmUoMTA2MikBAiMzUERWdVU0NUg3RWg1ZG10TmJuUk5SU3RHd1VMQTdOWTZIYgMJAAACAQFUBQckbWF0Y2gwBQR0aGlzCQACAQINVW5rbm93biBjaGFpbgAMRU1QVFlfUFJPRDUwAZADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARRklWRU1JTlVURVNNSUxMSVMA4KcSAAxSRU5BTUlOR0NPU1QAwJaxAgAKTUFYTkFNRUxFTgAyABVJbmZyYVVwZ3JhZGVDb3N0U1VzZHQAgK3iBAAMRVhQTUFURVJJQUxTBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAKbdgu2rBwMJAAACAQFUBQckbWF0Y2gwAKqngbMJCQACAQINVW5rbm93biBjaGFpbgAHRVhQVVNEVAQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMACA5Zp3AwkAAAIBAVQFByRtYXRjaDAAgOWadwkAAgECDVVua25vd24gY2hhaW4ADlJPQk9fRFVDS19VU0RUAKCNBgAMU19DT1NUX0FDUkVTAIDyi6gJAAVGSVZFWAkAtgIBAAUAB1RXRU5UWVgJALYCAQAUAAhUV0VOVFkyWAkAtgIBCQBoAgAUABQACFRXRU5UWTNYCQC2AgEJAGgCCQBoAgAUABQAFAAIVFdFTlRZNFgJALYCAQkAaAIJAGgCCQBoAgAUABQAFAAUAAhUV0VOVFk1WAkAtgIBCQBoAgkAaAIJAGgCCQBoAgAUABQAFAAUABQAD1BSRVNBTEVOVU1MQU5EUwD0AwESa2V5TmV4dEZyZWVMYW5kTnVtAAILbmV4dExhbmROdW0BGmtleUxhbmRDdXN0b21OYW1lVG9Bc3NldElkAQRuYW1lCQCsAgICBGxjbl8FBG5hbWUBEGtleUxhbmRUb0Fzc2V0SWQBB2xhbmROdW0JAKwCAgIDbGFfBQdsYW5kTnVtAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICB2Fzc2V0SWQJb3duZXJBZGRyCQCsAgIJAKwCAgkArAICAgVpbGFvXwUHYXNzZXRJZAIBXwUJb3duZXJBZGRyARFrZXlMYW5kTnVtVG9Pd25lcgEHbGFuZE51bQkArAICAgNsb18FB2xhbmROdW0BGmtleUR1Y2tDdXN0b21OYW1lVG9Bc3NldElkAQRuYW1lCQCsAgICEWR1Y2tCeUN1c3RvbU5hbWVfBQRuYW1lARZrZXlDdXN0b21OYW1lVG9BZGRyZXNzAQRuYW1lCQCsAgICFGFjY291bnRCeUN1c3RvbU5hbWVfBQRuYW1lAQlrZXlPbGRpZXMAAgpvbGRpZXNMaXN0AQ9rZXlOZXh0Um9ib0R1Y2sAAgxuZXh0Um9ib0R1Y2sAC2NsYWltTW9kZVdoAAAADWNsYWltTW9kZUR1Y2sAAQATY2xhaW1Nb2RlV2hUaGVuRHVjawACAAhmbEhlYWx0aAAAAAtmbFRpbWVzdGFtcAAFAAdmbEJvbnVzAAYAC2ZsUHJvZHNVc2VkAAcBB25mdE5hbWUCB2xhbmROdW0IbGFuZFNpemUJAKwCAgkArAICBQpMQU5EUFJFRklYBQdsYW5kTnVtBQhsYW5kU2l6ZQEIdG9Wb2x1bWUCBmFtb3VudAdwa2dTaXplBARwa2dzAwkAZwIFBmFtb3VudAAACQBpAgkAZQIJAGQCBQZhbW91bnQFB3BrZ1NpemUAAQUHcGtnU2l6ZQkBAS0BCQBpAgkAZQIJAGQCCQEBLQEFBmFtb3VudAUHcGtnU2l6ZQABBQdwa2dTaXplCQBoAgUEcGtncwUFTVVMVDgBE2Rpc3RyaWJ1dGVCeVdlaWdodHMCBXRvdGFsB3dlaWdodHMEA3N1bQkAZAIJAGQCCQBkAgkAZAIJAGQCCQCRAwIFB3dlaWdodHMAAAkAkQMCBQd3ZWlnaHRzAAEJAJEDAgUHd2VpZ2h0cwACCQCRAwIFB3dlaWdodHMAAwkAkQMCBQd3ZWlnaHRzAAQJAJEDAgUHd2VpZ2h0cwAFAwkAZwIAAAUDc3VtCQACAQIQWmVybyB3ZWlnaHRzIHN1bQQFbm9ybTYJAGsDBQV0b3RhbAUFTVVMVDYFA3N1bQoBCm5vcm1hbGl6ZXICA2FjYwRlbGVtCQDNCAIFA2FjYwkAawMFBGVsZW0FBW5vcm02BQVNVUxUNgoAAiRsBQd3ZWlnaHRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQpub3JtYWxpemVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGARJnZXROZWVkZWRNYXRlcmlhbHMBBXRvdGFsBAVwcm9wcwkAtQkCCQEFdmFsdWUBCQCiCAEJARFrZXlSZXNQcm9wb3J0aW9ucwACAV8DCQECIT0CCQCQAwEFBXByb3BzBQZOVU1SRVMJAAIBAhZXcm9uZyBwcm9wb3J0aW9ucyBkYXRhBAFyCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwAACQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwABCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwACCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwADCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwAECQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwAFBQNuaWwJARNkaXN0cmlidXRlQnlXZWlnaHRzAgUFdG90YWwFAXIBEXN1YnRyYWN0TWF0ZXJpYWxzAwxzaG91bGRVc2VNYXQDaGFzCXRvdGFsTmVlZAQEbmVlZAkBEmdldE5lZWRlZE1hdGVyaWFscwEFCXRvdGFsTmVlZAoBCnN1YnRyYWN0b3ICA2FjYwNpZHgEBnJlc3VsdAkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQNoYXMFA2lkeAkAkQMCBQRuZWVkBQNpZHgDCQBmAgAABQZyZXN1bHQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIYTm90IGVub3VnaCBtYXRlcmlhbCBpZHg9CQCkAwEFA2lkeAILLCB5b3UgaGF2ZSAJAJEDAgUDaGFzBQNpZHgCCywgYnV0IG5lZWQgCQCkAwEJAJEDAgUEbmVlZAUDaWR4CQDNCAIFA2FjYwkApAMBBQZyZXN1bHQDBQxzaG91bGRVc2VNYXQKAAIkbAUFSVRFUjYKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCnN1YnRyYWN0b3ICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYFA2hhcwERc3VidHJhY3RFcXVpcG1lbnQCBW9sZEVxBXBVc2VkAwkAAAIFBXBVc2VkAgAJAJQKAgUFb2xkRXEHCgEHc3ViVXNlZAIDYWNjBmlkeEFtdAQFcGFydHMJALUJAgUGaWR4QW10AgEsAwkBAiE9AgkAkAMBBQVwYXJ0cwACCQACAQIoSW5jb3JyZWN0IGZvcm1hdCwgc2hvdWxkIGJlIGluZGV4LGFtb3VudAQDaWR4CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcGFydHMAAAMDCQBmAgAABQNpZHgGCQBnAgUDaWR4CQCQAwEFEHByb2R1Y3Rpb25NYXRyaXgJAAIBAhNVbmtub3duIHByb2R1Y3QgaWR4BANhbXQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwYXJ0cwABBAdlcVBhcnRzCQC1CQIIBQNhY2MCXzEJAKwCAgkAkQMCBQVwYXJ0cwAAAgE6AwkBAiE9AgkAkAMBBQdlcVBhcnRzAAIJAAIBCQCsAgIJAKwCAgIPWW91IGRvbid0IGhhdmUgCQCRAwIFCXByb2RUeXBlcwUDaWR4AgkgZXF1aXBwZWQEA3RtcAkAkQMCBQdlcVBhcnRzAAEEBm51bUxlbgMJAQdpc0RpZ2l0AQkArwICCQCwAgIFA3RtcAABAAEAAgABBARjdXJyCQENcGFyc2VJbnRWYWx1ZQEJAK8CAgUDdG1wBQZudW1MZW4EBHRhaWwJALACAgUDdG1wBQZudW1MZW4EBm5ld0FtdAMJAGcCBQRjdXJyBQNhbXQJAGUCBQRjdXJyBQNhbXQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgINWW91IGVxdWlwcGVkIAkApAMBBQRjdXJyAgQgb2YgCQCRAwIFCXByb2RUeXBlcwUDaWR4AhMsIGJ1dCB0cmllZCB0byB1c2UgCQCkAwEFA2FtdAkAlAoCCQCsAgIJAKwCAgkArAICCQCsAgIJAJEDAgUHZXFQYXJ0cwAACQCRAwIFBXBhcnRzAAACAToJAKQDAQUGbmV3QW10BQR0YWlsAwgFA2FjYwJfMgYDAwkAZwIFA2lkeAAGCQBnAgAIBQNpZHgHCQAAAgUGbmV3QW10AAAHCgACJGwJALUJAgUFcFVzZWQCAV8KAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIFBW9sZEVxBwoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEHc3ViVXNlZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgEOcHJvZFN0clRvQnl0ZXMBB3Byb2RTdHIEBXBMaXN0AwkAAAIFB3Byb2RTdHICAAUDbmlsCQC8CQIFB3Byb2RTdHICAV8KAQR0b0JWAgNhY2MGcmVjaXBlBAFqCQBpAgkAyAEBBQNhY2MACAQEY3VycgMJAGYCCQCQAwEFBXBMaXN0BQFqCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcExpc3QFAWoAAAkAywECBQNhY2MJAJoDAQUEY3VycgoAAiRsBRBwcm9kdWN0aW9uTWF0cml4CgACJHMJAJADAQUCJGwKAAUkYWNjMAEACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQR0b0JWAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyA1MAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIBDmJ5dGVzVG9Qcm9kU3RyAQJidgoBBmZyb21CVgIDYWNjBnJlY2lwZQQBagkAkAMBBQNhY2MEAWIJAMkBAgkAygECBQJidgkAaAIACAUBagAICQDNCAIFA2FjYwkApAMBCQCxCQEFAWIJALoJAgoAAiRsBRBwcm9kdWN0aW9uTWF0cml4CgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQZmcm9tQlYCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDUwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgIBXwEVY2hlY2tTdGF0UmVxdWlyZW1lbnRzAglkdWNrU3RhdHMEcmVxcwoBBWNoZWNrAgNhY2MBagQEYnVmZgMJAGYCCQCQAwEFCWR1Y2tTdGF0cwkAZAIABwUBagkAkQMCBQlkdWNrU3RhdHMJAGQCAAcFAWoAAAMJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEcmVxcwUBagkAZAIJAJEDAgUJZHVja1N0YXRzBQFqBQRidWZmCQACAQkArAICAhtSZXF1aXJlbWVudCBub3Qgc2F0aXNmaWVkOiAJAJEDAgUMcmVxdWlyZW1lbnRzBQFqBgoAAiRsCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFCQDMCAIABgUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAcKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBWNoZWNrAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA3CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcBCnBsYWNlUHJvZEIGBmlkeENudAVwTGlzdAppc1Bvc2l0aXZlCWR1Y2tTdGF0cwhvY2N1cGllZARmcmVlBAVwYXJ0cwkAtQkCBQZpZHhDbnQCAToDCQECIT0CCQCQAwEFBXBhcnRzAAIJAAIBAihJbmNvcnJlY3QgZm9ybWF0LCBzaG91bGQgYmUgaW5kZXg6YW1vdW50AwMJAQEhAQUKaXNQb3NpdGl2ZQkBAiE9AgkAsQIBCQCRAwIFBXBhcnRzAAAAAgcJAAIBAitQcm9kdWN0IGlkeCBzaG91bGQgYmUgMiBkaWdpdHMsIHplcm8gcGFkZGVkBApwcm9kdWN0SWR4CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcGFydHMAAAQFY291bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwYXJ0cwABAwkBASEBCQEPY29udGFpbnNFbGVtZW50AgUQZm9ydEFsbG93ZWRQcm9kcwUKcHJvZHVjdElkeAkAAgEJAKwCAgkArAICAglQcm9kdWN0ICcJAJEDAgUJcHJvZFR5cGVzBQpwcm9kdWN0SWR4AiEnIGNhbm5vdCBiZSB1c2VkIGZvciBsYW5kIGRlZmVuc2UDCQBmAgAABQVjb3VudAkAAgECF0NvdW50IGNhbid0IGJlIG5lZ2F0aXZlAwkAZgIFBWNvdW50BQ1NQVhQUk9ESU5TTE9UCQACAQkArAICCQCsAgIJAKwCAgIUQ2FuJ3QgcHV0IG1vcmUgdGhhbiAJAKQDAQUNTUFYUFJPRElOU0xPVAIEIG9mIAkAkQMCBQlwcm9kVHlwZXMFCnByb2R1Y3RJZHgDCQAAAgUFY291bnQAAAkAlQoDBQVwTGlzdAUIb2NjdXBpZWQFBGZyZWUEBGhlYWQJAMkBAgUFcExpc3QJAGgCAAgFCnByb2R1Y3RJZHgEBGN1cnIJALEJAQkAyQECCQDKAQIFBXBMaXN0CQBoAgAIBQpwcm9kdWN0SWR4AAgEBHRhaWwJAMoBAgUFcExpc3QJAGgCAAgJAGQCBQpwcm9kdWN0SWR4AAEEBnJlY2lwZQkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgFCnByb2R1Y3RJZHgCAV8DAwkBASEBBQppc1Bvc2l0aXZlCQBmAgUFY291bnQFBGN1cnIHCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICCVlvdSBoYXZlIAkApAMBBQRjdXJyAgQgb2YgCQCRAwIFCXByb2RUeXBlcwUKcHJvZHVjdElkeAITLCBidXQgdHJpZWQgdG8gdXNlIAkApAMBBQVjb3VudAQGbmV3QW10AwMJAQEhAQUKaXNQb3NpdGl2ZQkBFWNoZWNrU3RhdFJlcXVpcmVtZW50cwIFCWR1Y2tTdGF0cwkAtQkCCQCRAwIFBnJlY2lwZQUQcklkeFJlcXVpcmVtZW50cwIBLAcJAGUCBQRjdXJyBQVjb3VudAkAZAIFBGN1cnIFBWNvdW50BAhkZWx0YVZvbAkAZQIJAQh0b1ZvbHVtZQIFBm5ld0FtdAUOUFJPRFVDVFBLR1NJWkUJAQh0b1ZvbHVtZQIFBGN1cnIFDlBST0RVQ1RQS0dTSVpFCQCVCgMJAMsBAgkAywECBQRoZWFkCQCaAwEFBm5ld0FtdAUEdGFpbAkAZAIFCG9jY3VwaWVkBQhkZWx0YVZvbAkAZQIFBGZyZWUFCGRlbHRhVm9sAQhhZGRQcm9kQgcGaWR4Q250BXBMaXN0CmlzUG9zaXRpdmUHc2VnbWVudAdtYWluQXV4BHNsb3QJZHVja1N0YXRzBAVwYXJ0cwkAtQkCBQZpZHhDbnQCAToDCQECIT0CCQCQAwEFBXBhcnRzAAIJAAIBAihJbmNvcnJlY3QgZm9ybWF0LCBzaG91bGQgYmUgaW5kZXg6YW1vdW50AwMJAQEhAQUKaXNQb3NpdGl2ZQkBAiE9AgkAsQIBCQCRAwIFBXBhcnRzAAAAAgcJAAIBAitQcm9kdWN0IGlkeCBzaG91bGQgYmUgMiBkaWdpdHMsIHplcm8gcGFkZGVkBApwcm9kdWN0SWR4CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcGFydHMAAAQFY291bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwYXJ0cwABAwMJAGYCAAAFCnByb2R1Y3RJZHgGCQBnAgUKcHJvZHVjdElkeAkAkAMBBRBwcm9kdWN0aW9uTWF0cml4CQACAQITVW5rbm93biBwcm9kdWN0IGlkeAMJAGYCAAAFBWNvdW50CQACAQIXQ291bnQgY2FuJ3QgYmUgbmVnYXRpdmUDCQBmAgUFY291bnQFDU1BWFBST0RJTlNMT1QJAAIBCQCsAgIJAKwCAgkArAICAhRDYW4ndCBwdXQgbW9yZSB0aGFuIAkApAMBBQ1NQVhQUk9ESU5TTE9UAgQgb2YgCQCRAwIFCXByb2RUeXBlcwUKcHJvZHVjdElkeAMJAAACBQVjb3VudAAACQCUCgIFBXBMaXN0BwQEaGVhZAkAyQECBQVwTGlzdAkAaAIACAUKcHJvZHVjdElkeAQEY3VycgkAsQkBCQDJAQIJAMoBAgUFcExpc3QJAGgCAAgFCnByb2R1Y3RJZHgACAQEdGFpbAkAygECBQVwTGlzdAkAaAIACAkAZAIFCnByb2R1Y3RJZHgAAQQGcmVjaXBlCQC1CQIJAJEDAgUQcHJvZHVjdGlvbk1hdHJpeAUKcHJvZHVjdElkeAIBXwMDCQEBIQEFCmlzUG9zaXRpdmUJAGYCBQVjb3VudAUEY3VycgcJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIJWW91IGhhdmUgCQCkAwEFBGN1cnICBCBvZiAJAJEDAgUJcHJvZFR5cGVzBQpwcm9kdWN0SWR4AhMsIGJ1dCB0cmllZCB0byB1c2UgCQCkAwEFBWNvdW50BAlpc0JpZ0l0ZW0DAwkBASEBBQppc1Bvc2l0aXZlCQEVY2hlY2tTdGF0UmVxdWlyZW1lbnRzAgUJZHVja1N0YXRzCQC1CQIJAJEDAgUGcmVjaXBlBRBySWR4UmVxdWlyZW1lbnRzAgEsBwQGY29tcGF0CQCRAwIFBnJlY2lwZQUJcklkeFNsb3RzAwkAAAIFBmNvbXBhdAIACQACAQIXSXRlbSBjYW5ub3QgYmUgZXF1aXBwZWQEAWMJAQ1wYXJzZUludFZhbHVlAQUGY29tcGF0BARjU2VnCQBpAgUBYwBkAwkBAiE9AgUHc2VnbWVudAUEY1NlZwkAAgECFFNlZ21lbnQgaW5jb21wYXRpYmxlBAhjTWFpbkF1eAkAaQIJAGoCBQFjAGQACgMJAQIhPQIFB21haW5BdXgFCGNNYWluQXV4CQACAQIRU2xvdCBpbmNvbXBhdGlibGUECWNOdW1TbG90cwkAagIFAWMACgMDCQECIT0CBQRzbG90AAAJAGYCBQljTnVtU2xvdHMAAQcJAAIBAh5CaWcgaXRlbXMgc2hvdWxkIG9jY3VweSBzbG90IDAJAGYCBQljTnVtU2xvdHMAAQcJAJQKAgkAywECCQDLAQIFBGhlYWQJAJoDAQkAZAIFBGN1cnIDBQppc1Bvc2l0aXZlBQVjb3VudAkBAS0BBQVjb3VudAUEdGFpbAUJaXNCaWdJdGVtAQtzbG90c0dyb3VwQgYBZwRicEluCmlzUG9zaXRpdmUHc2VnbWVudAdtYWluQXV4BXN0YXRzAwkBAiE9AgUBZwIABAVzbG90cwkAtQkCBQFnAgEsAwkAZgIJAJADAQUFc2xvdHMFCE1BWFNMT1RTCQACAQISV3Jvbmcgc2xvdHMgZm9ybWF0BAJzMAkAkQMCBQVzbG90cwAABAJzMQMJAGYCCQCQAwEFBXNsb3RzAAEJAJEDAgUFc2xvdHMAAQIAAwMJAAACBQJzMAIACQAAAgUCczECAAcFBGJwSW4EBXRtcFMwAwkBAiE9AgUCczACAAkBCGFkZFByb2RCBwUCczAFBGJwSW4FCmlzUG9zaXRpdmUFB3NlZ21lbnQFB21haW5BdXgAAAUFc3RhdHMJAJQKAgUEYnBJbgcDCQECIT0CBQJzMQIAAwgFBXRtcFMwAl8yCQACAQIeQmlnIGl0ZW0gYWxyZWFkeSBvY2N1cGllcyBzbG90CAkBCGFkZFByb2RCBwUCczEIBQV0bXBTMAJfMQUKaXNQb3NpdGl2ZQUHc2VnbWVudAUHbWFpbkF1eAABBQVzdGF0cwJfMQgFBXRtcFMwAl8xBQRicEluAQZkcmVzc0IEB3NlZ0xpc3QGcEJ5dGVzCmlzUG9zaXRpdmUFc3RhdHMKAQdzZWdtZW50AgNhY2MDc2VnBAFqCAUDYWNjAl8xBAdtYWluQXV4CQC1CQIFA3NlZwIBOwMJAQIhPQIJAJADAQUHbWFpbkF1eAUKTlVNTUFJTkFVWAkAAgECFFdyb25nIHNlZ21lbnQgZm9ybWF0BAFtCQCRAwIFB21haW5BdXgAAAQBYQkAkQMCBQdtYWluQXV4AAEDAwkAAAIFAW0CAAkAAAIFAWECAAcJAJQKAgkAZAIFAWoAAQgFA2FjYwJfMgQEdG1wTQkBC3Nsb3RzR3JvdXBCBgUBbQgFA2FjYwJfMgUKaXNQb3NpdGl2ZQUBagAABQVzdGF0cwkAlAoCCQBkAgUBagABCQELc2xvdHNHcm91cEIGBQFhBQR0bXBNBQppc1Bvc2l0aXZlBQFqAAEFBXN0YXRzCAoAAiRsBQdzZWdMaXN0CgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCAAAFBnBCeXRlcwoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEHc2VnbWVudAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgJfMgEFZm9ydEIGB3NlZ0xpc3QGcEJ5dGVzCG9jY3VwaWVkBGZyZWUKaXNQb3NpdGl2ZQlkdWNrU3RhdHMDCQBmAgADCQCQAwEFB3NlZ0xpc3QJAAIBAjFBdCBsZWFzdCBkdWNrLCBtaW5lcyBhbmQgdHJhcHMgcGFydHMgYXJlIHJlcXVpcmVkCgEHc2VnbWVudAIDYWNjA3NlZwQBaggFA2FjYwJfMQMJAAACBQFqAAAJAJYKBAkAZAIFAWoAAQgFA2FjYwJfMggFA2FjYwJfMwgFA2FjYwJfNAQBcAkBCnBsYWNlUHJvZEIGBQNzZWcIBQNhY2MCXzIFCmlzUG9zaXRpdmUFCWR1Y2tTdGF0cwgFA2FjYwJfMwgFA2FjYwJfNAkAlgoECQBkAgUBagABCAUBcAJfMQgFAXACXzIIBQFwAl8zBAF0CgACJGwFB3NlZ0xpc3QKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCWCgQAAAUGcEJ5dGVzBQhvY2N1cGllZAUEZnJlZQoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEHc2VnbWVudAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgkAlQoDCAUBdAJfMggFAXQCXzMIBQF0Al80ARdjYW5XZWFyQ3VycmVudEVxdWlwbWVudAELZHVja0Fzc2V0SWQEBWVxS2V5CQEQa2V5RHVja0VxdWlwbWVudAEFC2R1Y2tBc3NldElkBAZjdXJyRXEJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQVlcUtleQIXLDssXyw7LF8sOyxfLDssXyw7LF8sOywCAV8ECXRlbXBQcm9kQgkBBmRyZXNzQgQFBmN1cnJFcQUMRU1QVFlfUFJPRDUwBgUDbmlsBAhzZWdCcEF1eAkAkQMCCQC1CQIJAJEDAgUGY3VyckVxBQtzZWdCYWNrcGFjawIBOwABBApidWZmRWZmZWN0AwkAAAIFCHNlZ0JwQXV4AgAAAAQEYXV4MAkAkQMCCQC1CQIFCHNlZ0JwQXV4AgEsAAADCQAAAgUEYXV4MAIAAAAEBmlkeENudAkAtQkCBQRhdXgwAgE6BANpZHgJAJEDAgUGaWR4Q250AAAEA2NudAkAkQMCBQZpZHhDbnQAAQMDAwMDCQAAAgUDaWR4AgIwNgYJAAACBQNpZHgCAjA3BgkAAAIFA2lkeAICMDgJAQIhPQIFA2NudAIABwkAZgIJAQ1wYXJzZUludFZhbHVlAQUDY250AAAHCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgJAQ1wYXJzZUludFZhbHVlAQUDaWR4AgFfBQpySWR4RWZmZWN0AAAEBXN0YXRzCQEMZ2V0RHVja1N0YXRzBAUEdGhpcwULZHVja0Fzc2V0SWQFCmJ1ZmZFZmZlY3QGBAhuZXdQcm9kQgkBBmRyZXNzQgQFBmN1cnJFcQUJdGVtcFByb2RCBwUFc3RhdHMJAAACBQhuZXdQcm9kQgUIbmV3UHJvZEIBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwECHByb3BMaXN0DXRlcnJhaW5Db3VudHMNbGFuZFNpemVJbmRleARzaWduAwkBAiE9AgkAkAMBBQhwcm9wTGlzdAUGTlVNUkVTCQACAQIWV3JvbmcgcHJvcG9ydGlvbnMgZGF0YQoBB3VwZGF0ZXICA2FjYwFpBAZyZXN1bHQJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvcExpc3QFAWkJAGgCCQBoAgUEc2lnbgkAkQMCBQ10ZXJyYWluQ291bnRzBQFpBQ1sYW5kU2l6ZUluZGV4AwkAZgIAAAUGcmVzdWx0CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhZQYW5pYyEgUGllY2VzIG9mIHR5cGU9CQCkAwEFAWkCBywgc2lnbj0JAKQDAQUEc2lnbgITLCB0ZXJyYWluQ291bnRzW2ldPQkApAMBCQCRAwIFDXRlcnJhaW5Db3VudHMFAWkCECwgbGFuZFNpemVJbmRleD0JAKQDAQUNbGFuZFNpemVJbmRleAkAzQgCBQNhY2MJAKQDAQUGcmVzdWx0CgACJGwFBUlURVI2CgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQd1cGRhdGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGARF1cGRhdGVQcm9wb3J0aW9ucwMNdGVycmFpbkNvdW50cw1sYW5kU2l6ZUluZGV4BHNpZ24ECHByb3BMaXN0CQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBEWtleVJlc1Byb3BvcnRpb25zAAILMF8wXzBfMF8wXzACAV8JALkJAgkBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwEBQhwcm9wTGlzdAUNdGVycmFpbkNvdW50cwUNbGFuZFNpemVJbmRleAUEc2lnbgIBXwENY291bnRUZXJyYWlucwEIdGVycmFpbnMJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBQQABCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUIAAQkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFDAAEJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBRAABCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUUAAQkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFGAAEFA25pbAEGYWRkUmVzBQpjdXJyZW50UmVzDXRlcnJhaW5Db3VudHMJZGVsdGFUaW1lDWxhbmRTaXplSW5kZXgXZGFpbHlCeVBpZWNlV2l0aEJvbnVzZXMKAQVhZGRlcgIDYWNjAWkECXJlc09mVHlwZQkAaAIJAGgCCQBrAwUJZGVsdGFUaW1lBRdkYWlseUJ5UGllY2VXaXRoQm9udXNlcwUJREFZTUlMTElTCQCRAwIFDXRlcnJhaW5Db3VudHMFAWkFDWxhbmRTaXplSW5kZXgJAM0IAgUDYWNjCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKY3VycmVudFJlcwUBaQUJcmVzT2ZUeXBlBAFyCgACJGwFBUlURVI2CgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQVhZGRlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgkAuQkCBQFyAgFfAQl2aXJ0Q2xhaW0EDXRlcnJhaW5Db3VudHMJZGVsdGFUaW1lDWxhbmRTaXplSW5kZXgXZGFpbHlCeVBpZWNlV2l0aEJvbnVzZXMKAQVhZGRlcgIDYWNjAWkECXJlc09mVHlwZQkAaAIJAGgCCQBrAwUJZGVsdGFUaW1lBRdkYWlseUJ5UGllY2VXaXRoQm9udXNlcwUJREFZTUlMTElTCQCRAwIFDXRlcnJhaW5Db3VudHMFAWkFDWxhbmRTaXplSW5kZXgJAJQKAgkAzQgCCAUDYWNjAl8xBQlyZXNPZlR5cGUJAGQCCAUDYWNjAl8yBQlyZXNPZlR5cGUKAAIkbAUFSVRFUjYKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIFA25pbAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQVhZGRlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgENZGlzdHJpYnV0ZVJlcwQMY3VycmVudFdoUmVzDmN1cnJlbnRQYWNrUmVzCnJlc1RvQ2xhaW0Ld2hTcGFjZUxlZnQEDnJlc0xpc3RUb0NsYWltCAUKcmVzVG9DbGFpbQJfMQQMcmVzQW1Ub0NsYWltCAUKcmVzVG9DbGFpbQJfMgMJAAACBQxyZXNBbVRvQ2xhaW0AAAkAlAoCCQC5CQIFDGN1cnJlbnRXaFJlcwIBXwkAuQkCBQ5jdXJyZW50UGFja1JlcwIBXwMJAGcCBQt3aFNwYWNlTGVmdAUMcmVzQW1Ub0NsYWltCgEIYWRkTGlzdHMCA2FjYwFpCQDNCAIFA2FjYwkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDGN1cnJlbnRXaFJlcwUBaQkAkQMCBQ5yZXNMaXN0VG9DbGFpbQUBaQQBcgoAAiRsBQVJVEVSNgoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEIYWRkTGlzdHMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYJAJQKAgkAuQkCBQFyAgFfCQC5CQIFDmN1cnJlbnRQYWNrUmVzAgFfCgEMYWRkUGFydExpc3RzAgNhY2MBaQQGd2hQYXJ0CQBrAwkAkQMCBQ5yZXNMaXN0VG9DbGFpbQUBaQULd2hTcGFjZUxlZnQFDHJlc0FtVG9DbGFpbQkAlAoCCQDNCAIIBQNhY2MCXzEJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQxjdXJyZW50V2hSZXMFAWkFBndoUGFydAkAzQgCCAUDYWNjAl8yCQCkAwEJAGUCCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmN1cnJlbnRQYWNrUmVzBQFpCQCRAwIFDnJlc0xpc3RUb0NsYWltBQFpBQZ3aFBhcnQEAXIKAAIkbAUFSVRFUjYKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIFA25pbAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQxhZGRQYXJ0TGlzdHMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYJAJQKAgkAuQkCCAUBcgJfMQIBXwkAuQkCCAUBcgJfMgIBXwEDYWJzAQF4AwkAwAICBQF4CQC2AgEAAAUBeAkAvgIBBQF4AARmcmVxCQDMCAIJAMwIAgAGCQDMCAIACQkAzAgCAA4JAMwIAgAPCQDMCAIAEAUDbmlsCQDMCAIJAMwIAgAFCQDMCAIACAkAzAgCAA0JAMwIAgAOCQDMCAIADwUDbmlsCQDMCAIJAMwIAgABCQDMCAIABAkAzAgCAAkJAMwIAgAKCQDMCAIADwUDbmlsCQDMCAIJAMwIAgABCQDMCAIABgkAzAgCAAcJAMwIAgAPCQDMCAIAEwUDbmlsCQDMCAIJAMwIAgAECQDMCAIABwkAzAgCAAgJAMwIAgANCQDMCAIAEgUDbmlsBQNuaWwBB2dlbkNoYXICAW4FZnJlcXMEA3JlbQkAoAMBCQC7AgIFAW4FB1RXRU5UWVgEBmxldHRlcgMJAGYCCQCRAwIFBWZyZXFzAAAFA3JlbQIBQQMJAGYCCQCRAwIFBWZyZXFzAAEFA3JlbQIBQgMJAGYCCQCRAwIFBWZyZXFzAAIFA3JlbQIBQwMJAGYCCQCRAwIFBWZyZXFzAAMFA3JlbQIBRAMJAGYCCQCRAwIFBWZyZXFzAAQFA3JlbQIBRQIBRgUGbGV0dGVyAQtnZW5UZXJyYWlucwIEc2VlZAxjb250aW5lbnRJZHgEAWYJAJEDAgUEZnJlcQUMY29udGluZW50SWR4CgEQdGVycmFpbkdlbmVyYXRvcgIDYWNjBGVsZW0JAJQKAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIIBQNhY2MCXzEJAQdnZW5DaGFyAggFA2FjYwJfMgUBZgkBB2dlbkNoYXICCQC6AgIIBQNhY2MCXzIFB1RXRU5UWVgFAWYJAQdnZW5DaGFyAgkAugICCAUDYWNjAl8yBQhUV0VOVFkyWAUBZgkBB2dlbkNoYXICCQC6AgIIBQNhY2MCXzIFCFRXRU5UWTNYBQFmCQEHZ2VuQ2hhcgIJALoCAggFA2FjYwJfMgUIVFdFTlRZNFgFAWYJALoCAggFA2FjYwJfMgUIVFdFTlRZNVgEAXQKAAIkbAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFBQNuaWwKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgICAAkAugICBQRzZWVkBQVGSVZFWAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEQdGVycmFpbkdlbmVyYXRvcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUIBQF0Al8xAAZQRVJNMjUJAMwIAgAHCQDMCAIAAgkAzAgCAA8JAMwIAgATCQDMCAIACAkAzAgCABgJAMwIAgABCQDMCAIAFQkAzAgCABAJAMwIAgAFCQDMCAIAAAkAzAgCABYJAMwIAgAUCQDMCAIAFwkAzAgCAAsJAMwIAgAECQDMCAIAEgkAzAgCAAwJAMwIAgAGCQDMCAIACgkAzAgCAAMJAMwIAgARCQDMCAIADQkAzAgCAAkJAMwIAgAOBQNuaWwABlRDSEFSUwkAzAgCAgFBCQDMCAICAUIJAMwIAgIBQwkAzAgCAgFECQDMCAICAUUJAMwIAgIBRgUDbmlsARNnZW5UZXJyYWluc0Zvck1lcmdlAgtzdW1UZXJyYWlucw1sYW5kU2l6ZUluZGV4CgEFc3RlcDECA2FjYwFzBAFqCAUDYWNjAl8yBAJlbAkBDXBhcnNlSW50VmFsdWUBBQFzBAF4AwkAAAIFAmVsAAAAAAMJAGcCBQJlbAkAaAIABAUNbGFuZFNpemVJbmRleAkAaQIFAmVsBQ1sYW5kU2l6ZUluZGV4AwkAZgIFAmVsCQBoAgADBQ1sYW5kU2l6ZUluZGV4AAMJAGQCCQBpAgkAZQIFAmVsAAEFDWxhbmRTaXplSW5kZXgAAQkAlQoDCQDNCAIIBQNhY2MCXzEFAXgJAGQCCAUDYWNjAl8yAAEJAGQCCAUDYWNjAl8zBQF4BAF0CgACJGwFC3N1bVRlcnJhaW5zCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlQoDBQNuaWwAAAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQVzdGVwMQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgQDYXJyCAUBdAJfMQQGbWF4SWR4CQEFdmFsdWUBCQDPCAIFA2FycgkAlgMBBQNhcnIEBWRlbHRhCQBlAggFAXQCXzMAGQoBBnN1YmJlcgIDYWNjA2lkeAQDdmFsAwkAAAIFA2lkeAUGbWF4SWR4CQBlAgkAkQMCBQNhcnIFA2lkeAUFZGVsdGEJAJEDAgUDYXJyBQNpZHgEBnplcm9lcwMJAAACBQN2YWwAAAUDbmlsCQC1CQIJALACAgkApAMBCQBsBgAKAAAFA3ZhbAAAAAAFBERPV04AAQIABAFjCQCRAwIFBlRDSEFSUwUDaWR4CgEHbGlzdEdlbgICYWMHaWdub3JlZAkAzQgCBQJhYwUBYwQBegoAAiRsBQZ6ZXJvZXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjFfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBB2xpc3RHZW4CBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjFfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDI1CQEFJGYxXzICCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkJAM4IAgUDYWNjBQF6BAFyCgACJGwFBUlURVI2CgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYxXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQZzdWJiZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjFfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjFfMgIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYKAQZwZXJtdXQCA2FjYwFqCQCsAgIFA2FjYwkAkQMCBQFyBQFqCgACJGwFBlBFUk0yNQoAAiRzCQCQAwEFAiRsCgAFJGFjYzACAAoBBSRmMl8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEGcGVybXV0AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYyXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAyNQkBBSRmMl8yAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZAQtnZXRCYWNrcGFjawEFYnBLZXkEAXAJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQVicEtleQIaMDowXzBfMF8wXzBfMDowXzBfMF8wXzBfMDoCAToJAMwIAgkApAMBCQELdmFsdWVPckVsc2UCCQC2CQEJAJEDAgUBcAUKYnBJZHhMZXZlbAAACQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUBcAUIYnBJZHhSZXMCAV8FBk5VTVJFUwkAkQMCBQFwBQhicElkeFJlcwILMF8wXzBfMF8wXzAJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQFwBQhicElkeE1hdAIBXwUGTlVNUkVTCQCRAwIFAXAFCGJwSWR4TWF0AgswXzBfMF8wXzBfMAkAzAgCCQCRAwIFAXAFCWJwSWR4UHJvZAUDbmlsARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEJdm9sUHJlZml4BAVwYXJ0cwkAtQkCBQl2b2xQcmVmaXgCAV8JAGgCCQBoAgUMV0hNVUxUSVBMSUVSCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXBhcnRzAAEAAQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXBhcnRzAAABF2dldFdhcmVob3VzZU9jY3VwaWVkVm9sAQljdXJyZW50V2gEBWdvb2RzCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kCgEJc3VtUmVzTWF0AgNhY2MEaXRlbQkAZAIFA2FjYwkBDXBhcnNlSW50VmFsdWUBBQRpdGVtCgEHc3VtUHJvZAIDYWNjBGl0ZW0EA2lkeAgFA2FjYwJfMQQEcGtncwkAaQIJAGUCCQBkAgkBDXBhcnNlSW50VmFsdWUBBQRpdGVtBQ5QUk9EVUNUUEtHU0laRQABBQ5QUk9EVUNUUEtHU0laRQkAlAoCCQBkAgUDaWR4AAEJAGQCCAUDYWNjAl8yCQBoAgUEcGtncwUFTVVMVDgECHdoUmVzVm9sCgACJGwJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfCgACJHMJAJADAQUCJGwKAAUkYWNjMAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQlzdW1SZXNNYXQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYECHdoTWF0Vm9sCgACJGwJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0AgFfCgACJHMJAJADAQUCJGwKAAUkYWNjMAAACgEFJGYxXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQlzdW1SZXNNYXQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjFfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjFfMgIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYECndoR29vZHNWb2wDCQAAAgUFZ29vZHMCAAAACAoAAiRsCQC8CQIFBWdvb2RzAgFfCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCAAAAAAoBBSRmMl8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEHc3VtUHJvZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMl8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgNTAJAQUkZjJfMgIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyAl8yCQBkAgkAZAIFCHdoUmVzVm9sBQh3aE1hdFZvbAUKd2hHb29kc1ZvbAEMZ2V0V2FyZWhvdXNlAwV3aEtleQlsYW5kSW5kZXgKaW5mcmFMZXZlbAQJdm9sUHJlZml4CQCsAgIJAKwCAgkApAMBBQlsYW5kSW5kZXgCAV8JAKQDAQUKaW5mcmFMZXZlbAQHd2hUb3RhbAkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQUJdm9sUHJlZml4BAV3aFN0cgkBC3ZhbHVlT3JFbHNlAgkAoggBBQV3aEtleQkArAICBQl2b2xQcmVmaXgCGzowXzBfMF8wXzBfMDowXzBfMF8wXzBfMDo6MAQCd2gJALwJAgUFd2hTdHICAToECndoT2NjdXBpZWQJARdnZXRXYXJlaG91c2VPY2N1cGllZFZvbAEFAndoBAZ3aExvZnQDCQBmAgAFCQCQAwEFAndoCQC5CQIJAMwIAgIBMAkAzAgCCQCkAwEFCndoT2NjdXBpZWQJAMwIAgkApAMBCQBlAgUHd2hUb3RhbAUKd2hPY2N1cGllZAkAzAgCCQCkAwEFB3doVG90YWwFA25pbAIBXwQEbG9mdAkAtQkCCQCRAwIFAndoBQl3aElkeExPRlQCAV8ECHdoTG9ja2VkCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUJdm9sTG9ja2VkBANvY2MDCQBmAgkAkAMBBQRsb2Z0AAEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAUKd2hPY2N1cGllZAkAuQkCCQDMCAIJAKQDAQUId2hMb2NrZWQJAMwIAgkApAMBBQNvY2MJAMwIAgkApAMBCQBlAgkAZQIFB3doVG90YWwFCHdoTG9ja2VkBQNvY2MJAMwIAgkApAMBBQd3aFRvdGFsBQNuaWwCAV8JAMwIAgkAkQMCBQJ3aAULd2hJZHhMZXZlbHMJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQJ3aAUId2hJZHhSZXMCAV8FBk5VTVJFUwkAkQMCBQJ3aAUId2hJZHhSZXMCCzBfMF8wXzBfMF8wCQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUCd2gFCHdoSWR4TWF0AgFfBQZOVU1SRVMJAJEDAgUCd2gFCHdoSWR4TWF0AgswXzBfMF8wXzBfMAkAzAgCCQCRAwIFAndoBQl3aElkeFByb2QJAMwIAgUGd2hMb2Z0BQNuaWwBFWdldFdhcmVob3VzZVNwYWNlTGVmdAEJY3VycmVudFdoBAtvY2N1cGllZFZvbAkBF2dldFdhcmVob3VzZU9jY3VwaWVkVm9sAQUJY3VycmVudFdoBA9jdXJyV2hMb2NrZWRWb2wJAQ1wYXJzZUludFZhbHVlAQkAkQMCCQC1CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeExPRlQCAV8FCXZvbExvY2tlZAkAZQIJAGUCCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBCQCRAwIFCWN1cnJlbnRXaAULd2hJZHhMZXZlbHMFC29jY3VwaWVkVm9sBQ9jdXJyV2hMb2NrZWRWb2wBCW1vdmVTdHVmZgMKY2FyZ29QYXJ0cwljdXJyZW50V2gLY3VycmVudFBhY2sDCQECIT0CCQCQAwEFCmNhcmdvUGFydHMAAwkAAgECNGNhcmdvTGlzdFN0ciBzaG91bGQgY29udGFpbiBleGFjdGx5IDIgJzonIHNlcGFyYXRvcnMECHJlc1BhcnRzCQC1CQIJAJEDAgUKY2FyZ29QYXJ0cwAAAgFfBAhtYXRQYXJ0cwkAtQkCCQCRAwIFCmNhcmdvUGFydHMAAQIBXwQJcHJvZFBhcnRzAwkAAAIJAJEDAgUKY2FyZ29QYXJ0cwACAgAFA25pbAkAvAkCCQCRAwIFCmNhcmdvUGFydHMAAgIBXwMJAQIhPQIJAJADAQUIcmVzUGFydHMFBk5VTVJFUwkAAgECIEFsbCA2IHJlc291cmNlcyBzaG91bGQgYmUgcGFzc2VkAwkBAiE9AgkAkAMBBQhtYXRQYXJ0cwUGTlVNUkVTCQACAQIgQWxsIDYgbWF0ZXJpYWxzIHNob3VsZCBiZSBwYXNzZWQEC3doU3BhY2VMZWZ0CQEVZ2V0V2FyZWhvdXNlU3BhY2VMZWZ0AQUJY3VycmVudFdoBAljdXJyV2hSZXMJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfBAljdXJyV2hNYXQJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0AgFfBApjdXJyV2hQcm9kAwkAAAIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAAUDbmlsCQC8CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAV8EDmN1cnJlbnRQYWNrUmVzCQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfBA5jdXJyZW50UGFja01hdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQPY3VycmVudFBhY2tQcm9kAwkAAAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIABQNuaWwJALwJAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgFfCgEDbXZSAgNhY2MEaXRlbQQBaQgFA2FjYwJfMQQCYW0JAQ1wYXJzZUludFZhbHVlAQUEaXRlbQQDd2hyCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJY3VycldoUmVzBQFpBANicHIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5jdXJyZW50UGFja1JlcwUBaQMJAAACBQJhbQAACQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkAkQMCBQljdXJyV2hSZXMFAWkJAM0IAggFA2FjYwJfMwkAkQMCBQ5jdXJyZW50UGFja1JlcwUBaQgFA2FjYwJfNAMJAGYCBQJhbQAAAwkAZgIFAmFtBQNicHIJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAFBGl0ZW0CGSBmcm9tIGJhY2twYWNrLCBidXQgb25seSAJAKQDAQUDYnByAgogYXZhaWxhYmxlCQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkApAMBCQBkAgUDd2hyBQJhbQkAzQgCCAUDYWNjAl8zCQCkAwEJAGUCBQNicHIFAmFtCQBkAggFA2FjYwJfNAUCYW0DCQBmAgkBAS0BBQJhbQUDd2hyCQACAQkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHRha2UgCQCkAwEJAQEtAQUCYW0CGiBmcm9tIHdhcmVob3VzZSwgYnV0IG9ubHkgCQCkAwEFA3docgIKIGF2YWlsYWJsZQkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZAIFA3docgUCYW0JAM0IAggFA2FjYwJfMwkApAMBCQBlAgUDYnByBQJhbQkAZAIIBQNhY2MCXzQFAmFtBAFyCgACJGwFCHJlc1BhcnRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlgoEAAAFA25pbAUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBA212UgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgoBA212TQIDYWNjBGl0ZW0EAWkIBQNhY2MCXzEEAmFtCQENcGFyc2VJbnRWYWx1ZQEFBGl0ZW0EA3dobQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWN1cnJXaE1hdAUBaQQDYnBtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOY3VycmVudFBhY2tNYXQFAWkDCQAAAgUCYW0AAAkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAJEDAgUJY3VycldoTWF0BQFpCQDNCAIIBQNhY2MCXzMJAJEDAgUOY3VycmVudFBhY2tNYXQFAWkIBQNhY2MCXzQDCQBmAgUCYW0AAAMJAGYCBQJhbQUDYnBtCQACAQkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHRha2UgBQRpdGVtAhkgZnJvbSBiYWNrcGFjaywgYnV0IG9ubHkgCQCkAwEFA2JwbQIKIGF2YWlsYWJsZQkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZAIFA3dobQUCYW0JAM0IAggFA2FjYwJfMwkApAMBCQBlAgUDYnBtBQJhbQkAZAIIBQNhY2MCXzQFAmFtAwkAZgIJAQEtAQUCYW0FA3dobQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byB0YWtlIAkApAMBCQEBLQEFAmFtAhogZnJvbSB3YXJlaG91c2UsIGJ1dCBvbmx5IAkApAMBBQN3aG0CCiBhdmFpbGFibGUJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGQCBQN3aG0FAmFtCQDNCAIIBQNhY2MCXzMJAKQDAQkAZQIFA2JwbQUCYW0JAGQCCAUDYWNjAl80BQJhbQQBbQoAAiRsBQhtYXRQYXJ0cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJYKBAAABQNuaWwFA25pbAgFAXICXzQKAQUkZjFfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBA212TQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMV8yAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgoBA212UAIDYWNjBGl0ZW0EAWkIBQNhY2MCXzEEAmFtCQENcGFyc2VJbnRWYWx1ZQEFBGl0ZW0EA3docAMJAGYCCQCQAwEFCmN1cnJXaFByb2QFAWkJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpjdXJyV2hQcm9kBQFpAAAEA2JwcAMJAGYCCQCQAwEFD2N1cnJlbnRQYWNrUHJvZAUBaQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFD2N1cnJlbnRQYWNrUHJvZAUBaQAAAwkAAAIFAmFtAAAJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCkAwEFA3docAkAzQgCCAUDYWNjAl8zCQCkAwEFA2JwcAgFA2FjYwJfNAMJAGYCBQJhbQAAAwkAZgIFAmFtBQNicHAJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAFBGl0ZW0CGSBmcm9tIGJhY2twYWNrLCBidXQgb25seSAJAKQDAQUDYnBwAgogYXZhaWxhYmxlBAhkZWx0YVZvbAkAZQIJAQh0b1ZvbHVtZQIJAGQCBQN3aHAFAmFtBQ5QUk9EVUNUUEtHU0laRQkBCHRvVm9sdW1lAgUDd2hwBQ5QUk9EVUNUUEtHU0laRQkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZAIFA3docAUCYW0JAM0IAggFA2FjYwJfMwkApAMBCQBlAgUDYnBwBQJhbQkAZAIIBQNhY2MCXzQFCGRlbHRhVm9sAwkAZgIJAQEtAQUCYW0FA3docAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byB0YWtlIAkApAMBCQEBLQEFAmFtAhogZnJvbSB3YXJlaG91c2UsIGJ1dCBvbmx5IAkApAMBBQN3aHACCiBhdmFpbGFibGUECGRlbHRhVm9sCQBlAgkBCHRvVm9sdW1lAgkAZAIFA3docAUCYW0FDlBST0RVQ1RQS0dTSVpFCQEIdG9Wb2x1bWUCBQN3aHAFDlBST0RVQ1RQS0dTSVpFCQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkApAMBCQBkAgUDd2hwBQJhbQkAzQgCCAUDYWNjAl8zCQCkAwEJAGUCBQNicHAFAmFtCQBkAggFA2FjYwJfNAUIZGVsdGFWb2wEAXADCQECIT0CCQCQAwEFCXByb2RQYXJ0cwAACgACJGwFCXByb2RQYXJ0cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJYKBAAABQNuaWwFA25pbAgFAW0CXzQKAQUkZjJfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBA212UAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMl8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgNTAJAQUkZjJfMgIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyCQCWCgQAAAUKY3VycldoUHJvZAUPY3VycmVudFBhY2tQcm9kCAUBbQJfNAQIdm9sU2FsZG8IBQFwAl80AwkAZgIFCHZvbFNhbGRvBQt3aFNwYWNlTGVmdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIVQXR0ZW1wdCB0byBwdXQgdG90YWwgCQCkAwEFCHZvbFNhbGRvAhEgc3R1ZmYsIGJ1dCBvbmx5IAkApAMBBQt3aFNwYWNlTGVmdAIVIHdhcmVob3VzZSBzcGFjZSBsZWZ0CQCZCgcJALkJAggFAXICXzICAV8JALkJAggFAW0CXzICAV8JALoJAggFAXACXzICAV8JALkJAggFAXICXzMCAV8JALkJAggFAW0CXzMCAV8JALoJAggFAXACXzMCAV8FCHZvbFNhbGRvARJleHBlZGl0aW9uSW50ZXJuYWwCBmNhbGxlcgR0eElkBAh1c2VyQWRkcgkApQgBBQZjYWxsZXIEBmJpZ051bQkBA2FicwEJAJ4DAQUEdHhJZAQHZnJlZU51bQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQESa2V5TmV4dEZyZWVMYW5kTnVtAAkAZAIFD1BSRVNBTEVOVU1MQU5EUwABBAdsYW5kTnVtCQCkAwEFB2ZyZWVOdW0EDGNvbnRpbmVudElkeAkAoAMBCQC7AgIFBmJpZ051bQUFRklWRVgECHRlcnJhaW5zCQELZ2VuVGVycmFpbnMCBQZiaWdOdW0FDGNvbnRpbmVudElkeAQJY29udGluZW50CQCRAwIFCmNvbnRpbmVudHMFDGNvbnRpbmVudElkeAQFaXNzdWUJAMIIBQkBB25mdE5hbWUCBQdsYW5kTnVtAgFTCQC5CQIJAMwIAgUHbGFuZE51bQkAzAgCAgFTCQDMCAIFCHRlcnJhaW5zCQDMCAIFCWNvbnRpbmVudAUDbmlsAgFfAAEAAAcEB2Fzc2V0SWQJALgIAQUFaXNzdWUEAmlkCQDYBAEFB2Fzc2V0SWQJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEmtleU5leHRGcmVlTGFuZE51bQAJAGQCBQdmcmVlTnVtAAEJAMwIAgUFaXNzdWUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEGtleUxhbmRUb0Fzc2V0SWQBBQdsYW5kTnVtBQJpZAkAzAgCCQELU3RyaW5nRW50cnkCCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQUCaWQFCHVzZXJBZGRyCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlMYW5kTnVtVG9Pd25lcgEFB2xhbmROdW0FCHVzZXJBZGRyCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFAmlkAAAJAMwIAgkBDEludGVnZXJFbnRyeQIJAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICBQJpZAUIdXNlckFkZHIAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQZjYWxsZXIAAQUHYXNzZXRJZAUDbmlsCQCUCgIFAmlkBQljb250aW5lbnQBDGZsaWdodENvbW1vbgMIdXNlckFkZHIHbWVzc2FnZQNzaWcDCQEBIQEJAMQTAwUHbWVzc2FnZQUDc2lnBQNwdWIJAAIBAhhzaWduYXR1cmUgZG9lcyBub3QgbWF0Y2gEBXBhcnRzCQC8CQIJALAJAQUHbWVzc2FnZQIBOwQJZmxpZ2h0TG9nCQC8CQIJAJEDAgUFcGFydHMAAAIBfAQCaHAJALUJAgkAkQMCBQlmbGlnaHRMb2cFCGZsSGVhbHRoAgFfBAVjdXJIUAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmhwAAAEBW5ld0hQCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCaHAAAQQLbmV3TG9jVHhWZXIJALUJAgkAkQMCBQVwYXJ0cwABAgE6BAtuZXdMb2NhdGlvbgkAkQMCBQtuZXdMb2NUeFZlcgAABAR0aW1lCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJZmxpZ2h0TG9nBQtmbFRpbWVzdGFtcAMDCQBmAgUEdGltZQkAZAIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBRFGSVZFTUlOVVRFU01JTExJUwYJAGYCCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFEUZJVkVNSU5VVEVTTUlMTElTBQR0aW1lCQACAQkArAICCQCsAgIJAKwCAgIcc2lnbmF0dXJlIG91dGRhdGVkOiBsb2dUaW1lPQkApAMBBQR0aW1lAgksIGJjVGltZT0JAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXAECXR4RnJvbU1zZwkAkQMCBQtuZXdMb2NUeFZlcgABBAZsYXN0VHgJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBEWtleUxhc3RUeElkQnlVc2VyAQUIdXNlckFkZHICAAMJAQIhPQIFBmxhc3RUeAUJdHhGcm9tTXNnCQACAQkArAICCQCsAgIJAKwCAgIeVHggaWRzIGRvbid0IG1hdGNoISBJbiBzdGF0ZTogBQZsYXN0VHgCCiwgaW4gbXNnOiAFCXR4RnJvbU1zZwQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQh1c2VyQWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAVtYXhIUAkBCW1heEhlYWx0aAEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDGtleUR1Y2tMZXZlbAEFC2R1Y2tBc3NldElkAAAEDG9sZEZyb21TdGF0ZQkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQAwkBAiE9AgUMb2xkRnJvbVN0YXRlBQVjdXJIUAkAAgEJAKwCAgkArAICCQCsAgICCm9sZEhlYWx0aD0JAKQDAQUMb2xkRnJvbVN0YXRlAi8gZnJvbSBzdGF0ZSBkb2VzIG5vdCBtYXRjaCBvbmUgZnJvbSBmbGlnaHQgbG9nPQkApAMBBQVjdXJIUAMJAGcCAAAFBWN1ckhQCQACAQIeWW91IGNhbid0IGZseSB3aXRoIHplcm8gaGVhbHRoAwkBASEBCQEXY2FuV2VhckN1cnJlbnRFcXVpcG1lbnQBBQtkdWNrQXNzZXRJZAkAAgECFkVxdWlwbWVudCBpbmNvbXBhdGlibGUEBWJvbnVzAwkAZgIJAJADAQUJZmxpZ2h0TG9nBQdmbEJvbnVzCQCRAwIFCWZsaWdodExvZwUHZmxCb251cwIABAhwcm9kVXNlZAMJAGYCCQCQAwEFCWZsaWdodExvZwULZmxQcm9kc1VzZWQJAJEDAgUJZmxpZ2h0TG9nBQtmbFByb2RzVXNlZAIABApzZW50QW1vdW50AwMJAGYCBQVuZXdIUAAACQAAAgUFYm9udXMCASQHCQEFYXNJbnQBCQD8BwQFDHJlc3RDb250cmFjdAINc2VuZFVzZHRQcml6ZQkAzAgCBQh1c2VyQWRkcgUDbmlsBQNuaWwAAAkAlwoFBQVuZXdIUAULZHVja0Fzc2V0SWQFCnNlbnRBbW91bnQFC25ld0xvY2F0aW9uBQhwcm9kVXNlZAEMYXBwbHlCb251c2VzAgtsYW5kQXNzZXRJZAZwaWVjZXMECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAlhcnRQaWVjZXMJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQAAAQEYWRkNgkAaQIFCmluZnJhTGV2ZWwABgQEYWRkNwkAaQIFCmluZnJhTGV2ZWwABwkAZAIJAGQCBQ9EQUlMWVJFU0JZUElFQ0UJAGsDBQ9EQUlMWVJFU0JZUElFQ0UJAGQCCQBkAgUKaW5mcmFMZXZlbAUEYWRkNgkAaAIAAgUEYWRkNwAFCQBrAwUPREFJTFlSRVNCWVBJRUNFBQlhcnRQaWVjZXMJAGgCBQZwaWVjZXMABQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBGFkZHIJY2xhaW1Nb2RlDWxhbmRBc3NldElkSW4EDSR0MDMzMzQzMzM4ODIDCQAAAgUJY2xhaW1Nb2RlBQtjbGFpbU1vZGVXaAkAlAoCBQ1sYW5kQXNzZXRJZEluCQELdmFsdWVPckVsc2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICAAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAoggBCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgQDbG9jCQC1CQIJAQV2YWx1ZQEFC2N1ckxvY2F0aW9uAgFfAwkBAiE9AgkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCAUwJAAIBCQCsAgIJAKwCAgIWRHVjayBsb2NhdGlvbiB0eXBlIGlzIAkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCESwgYnV0IHNob3VsZCBiZSBMCQCUCgIJAJEDAgUDbG9jBQhsb2NJZHhJZAULZHVja0Fzc2V0SWQEC2xhbmRBc3NldElkCAUNJHQwMzMzNDMzMzg4MgJfMQQGZHVja0lkCAUNJHQwMzMzNDMzMzg4MgJfMgQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAQJc2F2ZWRUaW1lCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQUHdGltZUtleQkArAICCQCsAgICBUxhbmQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBAFkCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwkAlgoEBQZkdWNrSWQFC2xhbmRBc3NldElkBQFkBQlzYXZlZFRpbWUBEGNsYWltUmVzSW50ZXJuYWwEBGFkZHIGYW1vdW50CWNsYWltTW9kZQ1sYW5kQXNzZXRJZEluAwkAZgIAAAUGYW1vdW50CQACAQIPTmVnYXRpdmUgYW1vdW50BAFjCQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBQRhZGRyBQljbGFpbU1vZGUFDWxhbmRBc3NldElkSW4ECGxhbmRTaXplCQCRAwIIBQFjAl8zBQtyZWNMYW5kU2l6ZQQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIIBQFjAl8zBQtyZWNUZXJyYWlucwQJZGVsdGFUaW1lCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAIBQFjAl80AwkAZgIAAAUJZGVsdGFUaW1lCQACAQkArAICCQCsAgIJAKwCAgImU2F2ZWQgdGltZXN0YW1wIGlzIGluIGZ1dHVyZSwgc2F2ZWQgPSAJAKQDAQgFAWMCXzQCDCwgY3VycmVudCA9IAkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQUIbGFuZFNpemUEFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UJAQxhcHBseUJvbnVzZXMCCAUBYwJfMgUGcGllY2VzBAhhdmFpbFJlcwkAawMFCWRlbHRhVGltZQkAaAIFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UFBnBpZWNlcwUJREFZTUlMTElTAwkAZgIFBmFtb3VudAUIYXZhaWxSZXMJAAIBCQCsAgIJAKwCAgkArAICAiJOb3QgZW5vdWdoIHJlc291cmNlcywgYXZhaWxhYmxlID0gCQCkAwEFCGF2YWlsUmVzAg4sIHJlcXVlc3RlZCA9IAkApAMBBQZhbW91bnQEDG5ld0RlbHRhVGltZQkAawMJAGUCBQhhdmFpbFJlcwUGYW1vdW50BQlEQVlNSUxMSVMJAGgCBRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlBQZwaWVjZXMEDG5ld1RpbWVzdGFtcAkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQxuZXdEZWx0YVRpbWUECWxhbmRJbmRleAkAaQIFBnBpZWNlcwUFU1NJWkUECnJlc1RvQ2xhaW0JAQl2aXJ0Q2xhaW0EBQ10ZXJyYWluQ291bnRzCQBlAgUJZGVsdGFUaW1lBQxuZXdEZWx0YVRpbWUFCWxhbmRJbmRleAUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQQFd2hLZXkJARJrZXlXYXJlaG91c2VCeUxhbmQBCAUBYwJfMgQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEIBQFjAl8yAAAECWN1cnJlbnRXaAkBDGdldFdhcmVob3VzZQMFBXdoS2V5BQlsYW5kSW5kZXgFCmluZnJhTGV2ZWwEBGxvZnQJALUJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4TE9GVAIBXwQLd2hTcGFjZUxlZnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlAwMJAAACBQljbGFpbU1vZGUFC2NsYWltTW9kZVdoCQBmAgUGYW1vdW50BQt3aFNwYWNlTGVmdAcJAAIBCQCsAgIJAKwCAgIFT25seSAJAKQDAQULd2hTcGFjZUxlZnQCGCBzcGFjZSBsZWZ0IGluIHdhcmVob3VzZQQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEIBQFjAl8xBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEDmN1cnJlbnRQYWNrUmVzCQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfBAxjdXJyZW50V2hSZXMJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfBA0kdDAzNjI1NjM3MTI3AwkAAAIFCWNsYWltTW9kZQULY2xhaW1Nb2RlV2gJAJYKBAkBBmFkZFJlcwUFDGN1cnJlbnRXaFJlcwUNdGVycmFpbkNvdW50cwkAZQIFCWRlbHRhVGltZQUMbmV3RGVsdGFUaW1lBQlsYW5kSW5kZXgFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkCAUKcmVzVG9DbGFpbQJfMgkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlCAUKcmVzVG9DbGFpbQJfMgMJAAACBQljbGFpbU1vZGUFDWNsYWltTW9kZUR1Y2sJAJYKBAkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzCQEGYWRkUmVzBQUOY3VycmVudFBhY2tSZXMFDXRlcnJhaW5Db3VudHMJAGUCBQlkZWx0YVRpbWUFDG5ld0RlbHRhVGltZQUJbGFuZEluZGV4BRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlBAVkaXN0cgkBDWRpc3RyaWJ1dGVSZXMEBQxjdXJyZW50V2hSZXMFDmN1cnJlbnRQYWNrUmVzBQpyZXNUb0NsYWltBQt3aFNwYWNlTGVmdAQEd2hBbQkAlwMBCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlCQDMCAIIBQpyZXNUb0NsYWltAl8yBQNuaWwJAJYKBAgFBWRpc3RyAl8xCAUFZGlzdHICXzIJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQFBHdoQW0JAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQUEd2hBbQQFd2hSZXMIBQ0kdDAzNjI1NjM3MTI3Al8xBAVicFJlcwgFDSR0MDM2MjU2MzcxMjcCXzIEBWxvZnRPCAUNJHQwMzYyNTYzNzEyNwJfMwQFbG9mdEYIBQ0kdDAzNjI1NjM3MTI3Al80CQCXCgUJAMwIAgkBDEludGVnZXJFbnRyeQIJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQgFAWMCXzIFDG5ld1RpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYCAUBYwJfMgUEYWRkcgUMbmV3VGltZXN0YW1wBQNuaWwFBWJwS2V5CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgUFYnBSZXMJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwFBXdoS2V5CQDMCAIJAJEDAgUJY3VycmVudFdoBQt3aElkeExldmVscwkAzAgCBQV3aFJlcwkAzAgCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhNYXQJAMwIAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAkAzAgCCQC5CQIJAMwIAgkAkQMCBQRsb2Z0BQl2b2xMb2NrZWQJAMwIAgkApAMBBQVsb2Z0TwkAzAgCCQCkAwEFBWxvZnRGCQDMCAIJAJEDAgUEbG9mdAUIdm9sVG90YWwFA25pbAIBXwUDbmlsAQhjbGFpbUFsbAQEYWRkcgtsYW5kQXNzZXRJZAZwaWVjZXMJY2xhaW1Nb2RlBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkBAlzYXZlZFRpbWUJAQV2YWx1ZQEJAJ8IAQUHdGltZUtleQQIYXZhaWxSZXMJAGgCCQBrAwkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQlzYXZlZFRpbWUJAQxhcHBseUJvbnVzZXMCBQtsYW5kQXNzZXRJZAUGcGllY2VzBQlEQVlNSUxMSVMFBnBpZWNlcwkBEGNsYWltUmVzSW50ZXJuYWwEBQRhZGRyBQhhdmFpbFJlcwUJY2xhaW1Nb2RlBQtsYW5kQXNzZXRJZAENdXBJbmZyYUNvbW1vbgQMc2hvdWxkVXNlTWF0BmNhbGxlcg1wYXltZW50QW1vdW50C2xhbmRBc3NldElkBARhZGRyCQClCAEFBmNhbGxlcgQBYwkBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwUEYWRkcgUTY2xhaW1Nb2RlV2hUaGVuRHVjawULbGFuZEFzc2V0SWQEBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAggFAWMCXzMFC3JlY0xhbmRTaXplBAhpbmZyYUtleQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBCAUBYwJfMgQIY3VyTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUIaW5mcmFLZXkAAAMDCQEBIQEFGEtTX0FMTE9XX0JJR19JTkZSQV9NRVJHRQkAZwIFCGN1ckxldmVsAAMHCQACAQImQ3VycmVudGx5IG1heCBpbmZyYXN0cnVjdHVyZSBsZXZlbCA9IDMECG1heEluZnJhCQBkAgkAaQIJAQRzcXJ0BAUGcGllY2VzAAAAAAUERE9XTgAFAAIECG5ld0xldmVsCQBkAgUIY3VyTGV2ZWwAAQMDBRhLU19BTExPV19CSUdfSU5GUkFfTUVSR0UJAGYCBQhuZXdMZXZlbAUIbWF4SW5mcmEHCQACAQkArAICAiVDdXJyZW50bHkgbWF4IGluZnJhc3RydWN0dXJlIGxldmVsID0gCQCkAwEFCG1heEluZnJhBARjb3N0CQBrAwUVSW5mcmFVcGdyYWRlQ29zdFNVc2R0CQBoAgUGcGllY2VzBQhuZXdMZXZlbAUFU1NJWkUDAwkBASEBBQxzaG91bGRVc2VNYXQJAQIhPQIFDXBheW1lbnRBbW91bnQFBGNvc3QHCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUEY29zdAQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEIBQFjAl8xBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEBW1MaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBAdtYXRVc2VkCQBrAwURSW5mcmFVcGdyYWRlQ29zdFMJAGgCBQZwaWVjZXMFCG5ld0xldmVsBQVTU0laRQQGbmV3TWF0CQC5CQIJARFzdWJ0cmFjdE1hdGVyaWFscwMFDHNob3VsZFVzZU1hdAUFbUxpc3QFB21hdFVzZWQCAV8EC2NsYWltUmVzdWx0CQEIY2xhaW1BbGwEBQRhZGRyCAUBYwJfMgUGcGllY2VzBRNjbGFpbU1vZGVXaFRoZW5EdWNrBAZ3aERhdGEIBQtjbGFpbVJlc3VsdAJfNQQGb2xkVm9sCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBCQCRAwIFBndoRGF0YQULd2hJZHhMZXZlbHMECm5ld1ZvbERhdGEJALkJAgkAzAgCCQCRAwIJALUJAgkAkQMCBQZ3aERhdGEFC3doSWR4TGV2ZWxzAgFfAAAJAMwIAgkApAMBBQhuZXdMZXZlbAUDbmlsAgFfBAZuZXdWb2wJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEFCm5ld1ZvbERhdGEEBGxvZnQJALUJAgkAkQMCBQZ3aERhdGEFCXdoSWR4TE9GVAIBXwQKbmV3TG9mdFN0cgkAuQkCCQDMCAIJAJEDAgUEbG9mdAUJdm9sTG9ja2VkCQDMCAIJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQJAMwIAgkApAMBCQBlAgkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlBQZuZXdWb2wFBm9sZFZvbAkAzAgCCQCkAwEFBm5ld1ZvbAUDbmlsAgFfCQCVCgMJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUIaW5mcmFLZXkFCG5ld0xldmVsCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAggFAWMCXzIFBGFkZHIFCG5ld0xldmVsCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIIBQtjbGFpbVJlc3VsdAJfMwUIYnBJZHhSZXMJAMwIAgUGbmV3TWF0CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6CQDMCAIJAQtTdHJpbmdFbnRyeQIIBQtjbGFpbVJlc3VsdAJfNAkAuQkCCQDMCAIFCm5ld1ZvbERhdGEJAMwIAgkAkQMCBQZ3aERhdGEFCHdoSWR4UmVzCQDMCAIJAJEDAgUGd2hEYXRhBQh3aElkeE1hdAkAzAgCCQCRAwIFBndoRGF0YQUJd2hJZHhQcm9kCQDMCAIFCm5ld0xvZnRTdHIFA25pbAIBOgUDbmlsCAULY2xhaW1SZXN1bHQCXzEFCG5ld0xldmVsBQdtYXRVc2VkARN1cGRhdGVTdGF0c0ludGVybmFsBAZsdmxLZXkFeHBLZXkJcG9pbnRzS2V5B2RlbHRhWFAEAnhwCQELdmFsdWVPckVsc2UCCQCfCAEFBXhwS2V5AAAEBW5ld1hQCQBkAgUCeHAFB2RlbHRhWFAECWx2bFBvaW50cwkBB2xldmVsVXACCQELdmFsdWVPckVsc2UCCQCfCAEFBmx2bEtleQAABQVuZXdYUAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQZsdmxLZXkJAJEDAgUJbHZsUG9pbnRzAAAJAMwIAgkBDEludGVnZXJFbnRyeQIFBXhwS2V5BQVuZXdYUAkAzAgCCQEMSW50ZWdlckVudHJ5AgUJcG9pbnRzS2V5CQBkAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlwb2ludHNLZXkAAAkAkQMCBQlsdmxQb2ludHMAAQUDbmlsBQVuZXdYUAEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCC2R1Y2tBc3NldElkB2RlbHRhWFAEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULZHVja0Fzc2V0SWQEBGFkZHIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEQa2V5RHVja0lkVG9Pd25lcgEFC2R1Y2tBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMDAwUTS1NfQUxMT1dfUk9CT19EVUNLUwkAAAIIBQVhc3NldAZpc3N1ZXIFBHRoaXMHCQEIY29udGFpbnMCCAUFYXNzZXQEbmFtZQULUk9CT19QUkVGSVgHCQETdXBkYXRlU3RhdHNJbnRlcm5hbAQJAQxrZXlVc2VyTGV2ZWwBBQRhZGRyCQEJa2V5VXNlclhQAQUEYWRkcgkBEWtleVVzZXJGcmVlUG9pbnRzAQUEYWRkcgUHZGVsdGFYUAkBE3VwZGF0ZVN0YXRzSW50ZXJuYWwECQEMa2V5RHVja0xldmVsAQULZHVja0Fzc2V0SWQJAQlrZXlEdWNrWFABBQtkdWNrQXNzZXRJZAkBEWtleUR1Y2tGcmVlUG9pbnRzAQULZHVja0Fzc2V0SWQFB2RlbHRhWFABFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCBGFkZHIHZGVsdGFYUAkBE3VwZGF0ZVN0YXRzSW50ZXJuYWwECQEMa2V5VXNlckxldmVsAQUEYWRkcgkBCWtleVVzZXJYUAEFBGFkZHIJARFrZXlVc2VyRnJlZVBvaW50cwEFBGFkZHIFB2RlbHRhWFABEmFjdGl2YXRlT25ib2FyZEFydAEEYWRkcgQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAhyZWZCeUtleQkBD2tleUFkZHJlc3NSZWZCeQEFBGFkZHIEBXJlZkJ5CQCiCAEFCHJlZkJ5S2V5AwkBASEBCQEJaXNEZWZpbmVkAQUFcmVmQnkJAAIBAilZb3UgYXJlIG5vdCBlbGlnaWJsZSBmb3IgT05CT0FSRCBhcnRpZmFjdAQGYXJ0S2V5CQEca2V5T25ib2FyZEFydER1Y2tBY3RpdmF0ZWRCeQEFBGFkZHIEB2FydER1Y2sJAKIIAQUGYXJ0S2V5AwkBCWlzRGVmaW5lZAEFB2FydER1Y2sJAAIBCQCsAgICL1lvdSBhbHJlYWR5IHVzZWQgeW91ciBPTkJPQVJEIGFydGlmYWN0IG9uIGR1Y2sgCQEFdmFsdWUBBQdhcnREdWNrBBBkdWNrQWN0aXZhdG9yS2V5CQEca2V5T25ib2FyZEFydEFjdGl2YXRlZE9uRHVjawEFC2R1Y2tBc3NldElkBA1kdWNrQWN0aXZhdG9yCQCiCAEFEGR1Y2tBY3RpdmF0b3JLZXkDCQEJaXNEZWZpbmVkAQUNZHVja0FjdGl2YXRvcgkAAgEJAKwCAgkArAICCQCsAgICCVRoZSBkdWNrIAULZHVja0Fzc2V0SWQCNCBhbHJlYWR5IGdvdCBwb2ludHMgZnJvbSBPTkJPQVJEIGFydGlmYWN0IGZyb20gdXNlciAJAQV2YWx1ZQEFDWR1Y2tBY3RpdmF0b3IJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCBQZhcnRLZXkFC2R1Y2tBc3NldElkCQDMCAIJAQtTdHJpbmdFbnRyeQIFEGR1Y2tBY3RpdmF0b3JLZXkFBGFkZHIFA25pbAgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkBQl4cE9uYm9hcmQCXzEBEmFjdGl2YXRlUHJlc2FsZUFydAIEYWRkcg1sYW5kQXNzZXRJZEluBAFjCQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBQRhZGRyBRNjbGFpbU1vZGVXaFRoZW5EdWNrBQ1sYW5kQXNzZXRJZEluBAtsYW5kQXNzZXRJZAgFAWMCXzIEBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAggFAWMCXzMFC3JlY0xhbmRTaXplBA1hY3RpdmF0aW9uS2V5CQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAMJAGYCCQELdmFsdWVPckVsc2UCCQCfCAEFDWFjdGl2YXRpb25LZXkAAAAACQACAQIlUHJlc2FsZSBhcnRpZmFjdCBpcyBhbHJlYWR5IGFjdGl2YXRlZAMJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAggFAWMCXzMFCnJlY0xhbmROdW0FD1BSRVNBTEVOVU1MQU5EUwkAAgEJAKwCAgkArAICCQCsAgIFCkxBTkRQUkVGSVgCASAFC2xhbmRBc3NldElkAiUgaXMgbm90IGVsaWdpYmxlIGZvciBwcmVzYWxlIGFydGlmYWN0BAtjbGFpbVJlc3VsdAkBCGNsYWltQWxsBAUEYWRkcgULbGFuZEFzc2V0SWQFBnBpZWNlcwUTY2xhaW1Nb2RlV2hUaGVuRHVjawkAzQgCCQDNCAIJAM0IAggFC2NsYWltUmVzdWx0Al8xCQEMSW50ZWdlckVudHJ5AgUNYWN0aXZhdGlvbktleQUGcGllY2VzCQELU3RyaW5nRW50cnkCCAULY2xhaW1SZXN1bHQCXzIJALkJAggFC2NsYWltUmVzdWx0Al8zAgE6CQELU3RyaW5nRW50cnkCCAULY2xhaW1SZXN1bHQCXzQJALkJAggFC2NsYWltUmVzdWx0Al81AgE6AQ9jaGVja1RvdXJuYW1lbnQBC2R1Y2tBc3NldElkBAZsYXN0SWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUSdG91cm5hbWVudENvbnRyYWN0BQ1sYXN0VG91cklkS2V5AAAEC2N1ckxvY2F0aW9uCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04CAV8EA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAEBXREYXRhCQELZ2V0VG91ckRhdGECBRJ0b3VybmFtZW50Q29udHJhY3QFBmxhc3RJZAQGc3RhdGljCQCRAwIFBXREYXRhBQlpZHhTdGF0aWMEB2R5bmFtaWMJAJEDAgUFdERhdGEFCmlkeER5bmFtaWMDCQECIT0CCQCRAwIFC2N1ckxvY2F0aW9uBQpsb2NJZHhUeXBlAgFUBwMDAwkAAAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQtjdXJMb2NhdGlvbgUPbG9jSWR4Q29udGluZW50BQZsYXN0SWQJAAACCQCRAwIFB2R5bmFtaWMFDnREeW5hbWljU3RhdHVzAgpJTlBST0dSRVNTBwkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZzdGF0aWMFCnRTdGF0aWNFbmQFA25vdwcJAAIBAipZb3VyIGR1Y2sgaXMgdGFraW5nIHBhcnQgaW4gdGhlIHRvdXJuYW1lbnQJAQlhc0Jvb2xlYW4BCQD8BwQFBHRoaXMCFmV4aXRUb3VybmFtZW50SW50ZXJuYWwJAMwIAgULZHVja0Fzc2V0SWQFA25pbAUDbmlsAQ1tZXJnZUludGVybmFsBgtuZXdMYW5kU2l6ZQhuZXdMZXZlbAdmb3JtdWxhBGFkZHIMbGFuZEFzc2V0SWRzB25lZWRNYXQEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAMJAQ9jaGVja1RvdXJuYW1lbnQBBQtkdWNrQXNzZXRJZAkAAgECHW1lcmdlSW50ZXJuYWxfY2hlY2tUb3VybmFtZW50CgEKY2hlY2tNZXJnZQIDYWNjC2xhbmRBc3NldElkBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkBAlzYXZlZFRpbWUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBBQd0aW1lS2V5CQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQBZAkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8ECWNvbnRpbmVudAkAkQMCBQFkBQxyZWNDb250aW5lbnQDAwkBAiE9AggFA2FjYwJfMwIACQECIT0CCAUDYWNjAl8zBQljb250aW5lbnQHCQACAQIuTGFuZHMgc2hvdWxkIGJlIG9uIHRoZSBzYW1lIGNvbnRpbmVudCB0byBtZXJnZQQIbGFuZFNpemUJAJEDAgUBZAULcmVjTGFuZFNpemUEB3NpemVzSW4IBQNhY2MCXzEEAWkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAswkCBQdzaXplc0luBQhsYW5kU2l6ZQInWW91IGhhdmVuJ3QgcGFzc2VkIGFsbCB0aGUgbGFuZHMgbmVlZGVkBAhzaXplc091dAkArAICCQCvAgIFB3NpemVzSW4FAWkJALACAgUHc2l6ZXNJbgkAZAIFAWkAAQQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQUIbGFuZFNpemUEBGFydHMJAGQCCAUDYWNjAl8yCQELdmFsdWVPckVsc2UCCQCfCAEJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkAAAECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAhyZXFMZXZlbAQHJG1hdGNoMAUIbGFuZFNpemUDCQAAAgIBUwUHJG1hdGNoMAADAwkAAAICAU0FByRtYXRjaDAABAMJAAACAgFMBQckbWF0Y2gwAAUDCQAAAgICWEwFByRtYXRjaDAABgkAAgECGk9ubHkgUywgTSwgTCwgWEwgY2FuIG1lcmdlAwkBAiE9AgUKaW5mcmFMZXZlbAUIcmVxTGV2ZWwJAAIBAiJBbGwgbGFuZHMgc2hvdWxkIGJlIG1heGVkIHRvIG1lcmdlBAdsYW5kTnVtCQCRAwIFAWQFCnJlY0xhbmROdW0EDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCBQFkBQtyZWNUZXJyYWlucwQJZGVsdGFUaW1lCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFCXNhdmVkVGltZQMJAGYCAAAFCWRlbHRhVGltZQkAAgEJAKwCAgkArAICCQCsAgICJlNhdmVkIHRpbWVzdGFtcCBpcyBpbiBmdXR1cmUsIHNhdmVkID0gCQCkAwEFCXNhdmVkVGltZQIMLCBjdXJyZW50ID0gCQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wBBZkYWlseVByb2R1Y3Rpb25CeVBpZWNlCQEMYXBwbHlCb251c2VzAgULbGFuZEFzc2V0SWQFBnBpZWNlcwQJbGFuZEluZGV4CQBpAgUGcGllY2VzBQVTU0laRQQFYnBSZXMJAQZhZGRSZXMFCQC1CQIIBQNhY2MCXzQCAV8FDXRlcnJhaW5Db3VudHMFCWRlbHRhVGltZQUJbGFuZEluZGV4BRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlBAVwcm9wcwkBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwECAUDYWNjAl82BQ10ZXJyYWluQ291bnRzBQlsYW5kSW5kZXgA////////////AQQGY1Byb3BzCQEZdXBkYXRlUHJvcG9ydGlvbnNJbnRlcm5hbAQIBQNhY2MDXzEwBQ10ZXJyYWluQ291bnRzBQlsYW5kSW5kZXgA////////////AQQLc3VtVGVycmFpbnMJARl1cGRhdGVQcm9wb3J0aW9uc0ludGVybmFsBAgFA2FjYwJfOQUNdGVycmFpbkNvdW50cwUJbGFuZEluZGV4AAEEBWxhbmRzCAUDYWNjAl83BANpZHgJAM8IAgUFbGFuZHMFC2xhbmRBc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQUDaWR4CQACAQkArAICAiBZb3VyIHN0YWtlZCBsYW5kcyBkb24ndCBjb250YWluIAULbGFuZEFzc2V0SWQECWN1c3RvbUtleQkBGmtleUxhbmRBc3NldElkVG9DdXN0b21OYW1lAQULbGFuZEFzc2V0SWQECmN1c3RvbU5hbWUJAQt2YWx1ZU9yRWxzZQIJAKIIAQUJY3VzdG9tS2V5AgAJAJwKCgUIc2l6ZXNPdXQFBGFydHMFCWNvbnRpbmVudAUFYnBSZXMJAM4IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIIBQNhY2MCXzUJAQtEZWxldGVFbnRyeQEJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQJAQtEZWxldGVFbnRyeQEJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKTEFORFBSRUZJWAULbGFuZEFzc2V0SWQFBGFkZHIJAQtEZWxldGVFbnRyeQEJARBrZXlMYW5kVG9Bc3NldElkAQUHbGFuZE51bQkBC0RlbGV0ZUVudHJ5AQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAgULbGFuZEFzc2V0SWQFBGFkZHIJAQtEZWxldGVFbnRyeQEJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQERa2V5TGFuZE51bVRvT3duZXIBBQdsYW5kTnVtCQELRGVsZXRlRW50cnkBCQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQJAQtEZWxldGVFbnRyeQEFCWN1c3RvbUtleQkBBEJ1cm4CCQDZBAEFC2xhbmRBc3NldElkAAEDCQECIT0CBQpjdXN0b21OYW1lAgAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBGmtleUxhbmRDdXN0b21OYW1lVG9Bc3NldElkAQUKY3VzdG9tTmFtZQUDbmlsBQNuaWwFBXByb3BzCQDRCAIFBWxhbmRzCQEFdmFsdWUBBQNpZHgJAGQCCAUDYWNjAl84BQZwaWVjZXMFC3N1bVRlcnJhaW5zBQZjUHJvcHMEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAhwcm9wTGlzdAkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEJARFrZXlSZXNQcm9wb3J0aW9ucwACCzBfMF8wXzBfMF8wAgFfBAhsYW5kc0tleQkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFBGFkZHIECGxhbmRzU3RyCQCiCAEFCGxhbmRzS2V5BAdsYW5kc0luAwkBCWlzRGVmaW5lZAEFCGxhbmRzU3RyCQC9CQIJAQV2YWx1ZQEFCGxhbmRzU3RyAgFfBQNuaWwEBWNvbnQwCQCRAwIJALUJAggJAQV2YWx1ZQEJAOwHAQkA2QQBCQCRAwIFDGxhbmRBc3NldElkcwAAC2Rlc2NyaXB0aW9uAgFfBQxyZWNDb250aW5lbnQECWNvbnRQcm9wcwkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEJARZrZXlSZXNUeXBlc0J5Q29udGluZW50AQUFY29udDACCzBfMF8wXzBfMF8wAgFfBAFyCgACJGwFDGxhbmRBc3NldElkcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJwKCgUHZm9ybXVsYQAAAgAJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzBQNuaWwFCHByb3BMaXN0BQdsYW5kc0luAAAJALUJAgILMF8wXzBfMF8wXzACAV8FCWNvbnRQcm9wcwoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKY2hlY2tNZXJnZQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUECWNvbnRpbmVudAgFAXICXzMEDGNvbnRpbmVudElkeAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDPCAIFCmNvbnRpbmVudHMFCWNvbnRpbmVudAkArAICAhNVbmtub3duIGNvbnRpbmVudDogBQljb250aW5lbnQECHRlcnJhaW5zCQETZ2VuVGVycmFpbnNGb3JNZXJnZQIIBQFyAl85CQBpAgkBD251bVBpZWNlc0J5U2l6ZQEFC25ld0xhbmRTaXplBQVTU0laRQQHZnJlZU51bQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQESa2V5TmV4dEZyZWVMYW5kTnVtAAkAZAIFD1BSRVNBTEVOVU1MQU5EUwABBApuZXdMYW5kTnVtCQCkAwEFB2ZyZWVOdW0EBWlzc3VlCQDCCAUJAQduZnROYW1lAgUKbmV3TGFuZE51bQULbmV3TGFuZFNpemUJALkJAgkAzAgCBQpuZXdMYW5kTnVtCQDMCAIFC25ld0xhbmRTaXplCQDMCAIFCHRlcnJhaW5zCQDMCAIFCWNvbnRpbmVudAUDbmlsAgFfAAEAAAcEB2Fzc2V0SWQJALgIAQUFaXNzdWUEDm5ld0xhbmRBc3NldElkCQDYBAEFB2Fzc2V0SWQEBm5ld01hdAkAuQkCCQERc3VidHJhY3RNYXRlcmlhbHMDCQBmAgUHbmVlZE1hdAAACQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBQduZWVkTWF0AgFfBAlwaWVjZXNLZXkJARZrZXlTdGFrZWRQaWVjZXNCeU93bmVyAQUEYWRkcgQMc3Rha2VkUGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEFCXBpZWNlc0tleQAACQCUCgIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIIBQFyAl81AwkAZgIJAJADAQgFAXICXzcAAAkBC1N0cmluZ0VudHJ5AgUIbGFuZHNLZXkJALsJAggFAXICXzcCAV8JAQtEZWxldGVFbnRyeQEFCGxhbmRzS2V5CQEMSW50ZWdlckVudHJ5AgUJcGllY2VzS2V5AwkAZgIIBQFyAl84BQxzdGFrZWRQaWVjZXMAAAkAZQIFDHN0YWtlZFBpZWNlcwgFAXICXzgJAQxJbnRlZ2VyRW50cnkCCQESa2V5TmV4dEZyZWVMYW5kTnVtAAkAZAIFB2ZyZWVOdW0AAQUFaXNzdWUJAQtTdHJpbmdFbnRyeQIJARBrZXlMYW5kVG9Bc3NldElkAQUKbmV3TGFuZE51bQUObmV3TGFuZEFzc2V0SWQJAQtTdHJpbmdFbnRyeQIJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQ5uZXdMYW5kQXNzZXRJZAUEYWRkcgkBC1N0cmluZ0VudHJ5AgkBEWtleUxhbmROdW1Ub093bmVyAQUKbmV3TGFuZE51bQUEYWRkcgkBDEludGVnZXJFbnRyeQIJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFDm5ld0xhbmRBc3NldElkCAUBcgJfMgkBDEludGVnZXJFbnRyeQIJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQUObmV3TGFuZEFzc2V0SWQFCG5ld0xldmVsCQEMSW50ZWdlckVudHJ5AgkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIFDm5ld0xhbmRBc3NldElkBQRhZGRyBQhuZXdMZXZlbAkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIIBQFyAl80CQDMCAIFBm5ld01hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgkBC1N0cmluZ0VudHJ5AgkBEWtleVJlc1Byb3BvcnRpb25zAAkAuQkCCAUBcgJfNgIBXwkBC1N0cmluZ0VudHJ5AgkBFmtleVJlc1R5cGVzQnlDb250aW5lbnQBBQljb250aW5lbnQJALkJAggFAXIDXzEwAgFfCQELU3RyaW5nRW50cnkCCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQJALkJAgkAzAgCBQljb250aW5lbnQJAMwIAgIBTAkAzAgCBQ5uZXdMYW5kQXNzZXRJZAUDbmlsAgFfCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQRhZGRyAAEFB2Fzc2V0SWQFDm5ld0xhbmRBc3NldElkAQNzMm0CBGFkZHIMbGFuZEFzc2V0SWRzCQENbWVyZ2VJbnRlcm5hbAYCAU0AAwIEU1NTUwUEYWRkcgUMbGFuZEFzc2V0SWRzAAABA20ybAIEYWRkcgxsYW5kQXNzZXRJZHMJAQ1tZXJnZUludGVybmFsBgIBTAAEAgNTTU0FBGFkZHIFDGxhbmRBc3NldElkcwkAaAIFEUluZnJhVXBncmFkZUNvc3RTAAQBBGwyeGwCBGFkZHIMbGFuZEFzc2V0SWRzCQENbWVyZ2VJbnRlcm5hbAYCAlhMAAUCBVNTU01MBQRhZGRyBQxsYW5kQXNzZXRJZHMJAGgCBRFJbmZyYVVwZ3JhZGVDb3N0UwAvAQZ4bDJ4eGwCBGFkZHIMbGFuZEFzc2V0SWRzCQENbWVyZ2VJbnRlcm5hbAYCA1hYTAAGAgNMWEwFBGFkZHIFDGxhbmRBc3NldElkcwkAaAIFEUluZnJhVXBncmFkZUNvc3RTADYBC21lcmdlQ29tbW9uAgRhZGRyDGxhbmRBc3NldElkcwQHJG1hdGNoMAkAkAMBBQxsYW5kQXNzZXRJZHMDCQAAAgAEBQckbWF0Y2gwCQEDczJtAgUEYWRkcgUMbGFuZEFzc2V0SWRzAwkAAAIAAwUHJG1hdGNoMAkBA20ybAIFBGFkZHIFDGxhbmRBc3NldElkcwMJAAACAAUFByRtYXRjaDAJAQRsMnhsAgUEYWRkcgUMbGFuZEFzc2V0SWRzAwkAAAIAAgUHJG1hdGNoMAkBBnhsMnh4bAIFBGFkZHIFDGxhbmRBc3NldElkcwkAAgECDVVua25vd24gbWVyZ2UBBnByb2xvZwEBaQMDCQECIT0CCAUBaQxvcmlnaW5DYWxsZXIFDHJlc3RDb250cmFjdAkBC3ZhbHVlT3JFbHNlAgkAoAgBCQEKa2V5QmxvY2tlZAAHBwkAAgECH0NvbnRyYWN0cyBhcmUgdW5kZXIgbWFpbnRlbmFuY2UJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleUxhc3RUeElkQnlVc2VyAQkApQgBCAUBaQxvcmlnaW5DYWxsZXIJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAUDbmlsKwFpAQ1jb25zdHJ1Y3RvclYxAQhyZXN0QWRkcgMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEVBlcm1pc3Npb24gZGVuaWVkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ5rZXlSZXN0QWRkcmVzcwAFCHJlc3RBZGRyBQNuaWwBaQELc2F2ZUludGVnZXICA2tleQZhbW91bnQDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAiBzYXZlSW50ZWdlciBpcyBub3QgcHVibGljIG1ldGhvZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUDa2V5BQZhbW91bnQFA25pbAFpAQpzZXRCbG9ja2VkAQlpc0Jsb2NrZWQDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhFwZXJtaXNzaW9uIGRlbmllZAkAzAgCCQEMQm9vbGVhbkVudHJ5AgkBCmtleUJsb2NrZWQABQlpc0Jsb2NrZWQFA25pbAFpAQlzdGFrZUxhbmQABA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAdhc3NldElkCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyAwkBAiE9AggFA3BtdAZhbW91bnQAAQkAAgEJAKwCAgkArAICAgRORlQgBQpMQU5EUFJFRklYAiQgdG9rZW4gc2hvdWxkIGJlIGF0dGFjaGVkIGFzIHBheW1lbnQEBWFzc2V0CQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQDCQECIT0CCAUFYXNzZXQGaXNzdWVyBQR0aGlzCQACAQIXVW5rbm93biBpc3N1ZXIgb2YgdG9rZW4DCQEBIQEJAQhjb250YWlucwIIBQVhc3NldARuYW1lBQpMQU5EUFJFRklYCQACAQkArAICCQCsAgICCU9ubHkgTkZUIAUKTEFORFBSRUZJWAIUIHRva2VucyBhcmUgYWNjZXB0ZWQEC2xhbmROdW1TaXplCQCwAgIIBQVhc3NldARuYW1lAAQEB2xhbmROdW0DCQEIY29udGFpbnMCBQtsYW5kTnVtU2l6ZQIDWFhMCQCzAgIFC2xhbmROdW1TaXplAAMDCQEIY29udGFpbnMCBQtsYW5kTnVtU2l6ZQICWEwJALMCAgULbGFuZE51bVNpemUAAgkAswICBQtsYW5kTnVtU2l6ZQABAwkBASEBCQEJaXNEZWZpbmVkAQkAtgkBBQdsYW5kTnVtCQACAQkArAICAh5DYW5ub3QgcGFyc2UgbGFuZCBudW1iZXIgZnJvbSAIBQVhc3NldARuYW1lBAtsYW5kQXNzZXRJZAkA2AQBBQdhc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAwkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQISIGlzIGFscmVhZHkgc3Rha2VkBAFkCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIFAWQFC3JlY1RlcnJhaW5zBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIFAWQFC3JlY0xhbmRTaXplBAlsYW5kSW5kZXgJAGkCBQZwaWVjZXMFBVNTSVpFBAVwcm9wcwkBEXVwZGF0ZVByb3BvcnRpb25zAwUNdGVycmFpbkNvdW50cwUJbGFuZEluZGV4AAEEDHJlc0J5Q29udEtleQkBFmtleVJlc1R5cGVzQnlDb250aW5lbnQBCQCRAwIFAWQFDHJlY0NvbnRpbmVudAQJY29udFByb3BzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUMcmVzQnlDb250S2V5AgswXzBfMF8wXzBfMAIBXwQQdXBkYXRlZENvbnRQcm9wcwkAuQkCCQEZdXBkYXRlUHJvcG9ydGlvbnNJbnRlcm5hbAQFCWNvbnRQcm9wcwUNdGVycmFpbkNvdW50cwUJbGFuZEluZGV4AAECAV8ECGxhbmRzS2V5CQEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQUHYWRkcmVzcwQIbGFuZHNTdHIJAKIIAQUIbGFuZHNLZXkEBWxhbmRzAwkBCWlzRGVmaW5lZAEFCGxhbmRzU3RyCQC9CQIJAQV2YWx1ZQEFCGxhbmRzU3RyAgFfBQNuaWwDCQEPY29udGFpbnNFbGVtZW50AgUFbGFuZHMFC2xhbmRBc3NldElkCQACAQkArAICAiJZb3VyIHN0YWtlZCBsYW5kcyBhbHJlYWR5IGNvbnRhaW4gBQtsYW5kQXNzZXRJZAMJAGcCCQCQAwEFBWxhbmRzBRhNQVhfTEFORFNfU1RBS0VEX0JZX1VTRVIJAAIBCQCsAgIJAKwCAgIZWW91ciBhbHJlYWR5IHN0YWtlZCBtYXggKAkApAMBBRhNQVhfTEFORFNfU1RBS0VEX0JZX1VTRVICBykgbGFuZHMECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAlwaWVjZXNLZXkJARZrZXlTdGFrZWRQaWVjZXNCeU93bmVyAQUHYWRkcmVzcwQJb2xkUGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEFCXBpZWNlc0tleQAABAl3bGdSZXN1bHQJAPwHBAULd2xnQ29udHJhY3QCEm9uU3Rha2VVbnN0YWtlTGFuZAkAzAgCBQdhZGRyZXNzBQNuaWwFA25pbAkAlAoCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFB3RpbWVLZXkIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkxBTkRQUkVGSVgFC2xhbmRBc3NldElkBQdhZGRyZXNzCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQELU3RyaW5nRW50cnkCBQhsYW5kc0tleQkAuwkCCQDNCAIFBWxhbmRzBQtsYW5kQXNzZXRJZAIBXwkAzAgCCQEMSW50ZWdlckVudHJ5AgUJcGllY2VzS2V5CQBkAgUJb2xkUGllY2VzBQZwaWVjZXMJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkBQdhZGRyZXNzCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlMYW5kTnVtVG9Pd25lcgEFB2xhbmROdW0FB2FkZHJlc3MJAMwIAgkBDEludGVnZXJFbnRyeQIJAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwUKaW5mcmFMZXZlbAkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5UmVzUHJvcG9ydGlvbnMABQVwcm9wcwkAzAgCCQELU3RyaW5nRW50cnkCBQxyZXNCeUNvbnRLZXkFEHVwZGF0ZWRDb250UHJvcHMFA25pbAUNcHJvbG9nQWN0aW9ucwUJd2xnUmVzdWx0AWkBC3Vuc3Rha2VMYW5kAQ1sYW5kQXNzZXRJZEluBA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpBmNhbGxlcgQBYwkBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwUEYWRkcgUNY2xhaW1Nb2RlRHVjawUNbGFuZEFzc2V0SWRJbgQLbGFuZEFzc2V0SWQIBQFjAl8yBAFkCAUBYwJfMwQIbGFuZHNLZXkJARVrZXlTdGFrZWRMYW5kc0J5T3duZXIBBQRhZGRyBA10ZXJyYWluQ291bnRzCQENY291bnRUZXJyYWlucwEJAJEDAgUBZAULcmVjVGVycmFpbnMEBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAgUBZAULcmVjTGFuZFNpemUECWxhbmRJbmRleAkAaQIFBnBpZWNlcwUFU1NJWkUEBXByb3BzCQERdXBkYXRlUHJvcG9ydGlvbnMDBQ10ZXJyYWluQ291bnRzBQlsYW5kSW5kZXgA////////////AQQMcmVzQnlDb250S2V5CQEWa2V5UmVzVHlwZXNCeUNvbnRpbmVudAEJAJEDAgUBZAUMcmVjQ29udGluZW50BAljb250UHJvcHMJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQxyZXNCeUNvbnRLZXkCCzBfMF8wXzBfMF8wAgFfBBB1cGRhdGVkQ29udFByb3BzCQC5CQIJARl1cGRhdGVQcm9wb3J0aW9uc0ludGVybmFsBAUJY29udFByb3BzBQ10ZXJyYWluQ291bnRzBQlsYW5kSW5kZXgA////////////AQIBXwQLY2xhaW1SZXN1bHQJAQhjbGFpbUFsbAQFBGFkZHIFC2xhbmRBc3NldElkBQZwaWVjZXMFDWNsYWltTW9kZUR1Y2sEBWxhbmRzCQC9CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUIbGFuZHNLZXkCAAIBXwQDaWR4CQDPCAIFBWxhbmRzBQtsYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEFA2lkeAkAAgEJAKwCAgIgWW91ciBzdGFrZWQgbGFuZHMgZG9uJ3QgY29udGFpbiAFC2xhbmRBc3NldElkBANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wBA5nb3ZSZWxlYXNlVGltZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQtnb3ZDb250cmFjdAkBFWtleVVzZXJHd2xSZWxlYXNlVGltZQEFBGFkZHIAAAMJAGcCBQ5nb3ZSZWxlYXNlVGltZQUDbm93CQACAQkArAICAjlZb3VyIGdXTCBhcmUgdGFraW5nIHBhcnQgaW4gdm90aW5nLCBjYW5ub3QgdW5zdGFrZSB1bnRpbCAJAKQDAQUOZ292UmVsZWFzZVRpbWUEDmFyYlJlbGVhc2VUaW1lCQBkAgkBC3ZhbHVlT3JFbHNlAgkAmggCBQt3bGdDb250cmFjdAkBFGtleUxhc3RBcmJUaW1lQnlVc2VyAQUEYWRkcgAABQ5hcmJpdHJhZ2VEZWxheQMJAGYCBQ5hcmJSZWxlYXNlVGltZQUDbm93CQACAQkArAICAj9Zb3VyIHN0YWtlZCBsYW5kcyB0b29rIHBhcnQgaW4gYXJiaXRyYWdlLCBjYW5ub3QgdW5zdGFrZSB1bnRpbCAJAKQDAQUOYXJiUmVsZWFzZVRpbWUECXBpZWNlc0tleQkBFmtleVN0YWtlZFBpZWNlc0J5T3duZXIBBQRhZGRyBAxzdGFrZWRQaWVjZXMJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJcGllY2VzS2V5AAAECW5ld1BpZWNlcwMJAGYCBQZwaWVjZXMFDHN0YWtlZFBpZWNlcwAACQBlAgUMc3Rha2VkUGllY2VzBQZwaWVjZXMECXdsZ1Jlc3VsdAkA/AcEBQt3bGdDb250cmFjdAISb25TdGFrZVVuc3Rha2VMYW5kCQDMCAIFBGFkZHIFA25pbAUDbmlsCQCUCgIJAM4IAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQkA2QQBBQtsYW5kQXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKTEFORFBSRUZJWAULbGFuZEFzc2V0SWQFBGFkZHIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleVJlc1Byb3BvcnRpb25zAAUFcHJvcHMJAMwIAgkBC1N0cmluZ0VudHJ5AgUMcmVzQnlDb250S2V5BRB1cGRhdGVkQ29udFByb3BzCQDMCAIJAQtTdHJpbmdFbnRyeQIIBQtjbGFpbVJlc3VsdAJfMgkAuQkCCAULY2xhaW1SZXN1bHQCXzMCAToJAMwIAgMJAGYCCQCQAwEFBWxhbmRzAAEJAQtTdHJpbmdFbnRyeQIFCGxhbmRzS2V5CQC7CQIJANEIAgUFbGFuZHMJAQV2YWx1ZQEFA2lkeAIBXwkBC0RlbGV0ZUVudHJ5AQUIbGFuZHNLZXkJAMwIAgkBDEludGVnZXJFbnRyeQIFCXBpZWNlc0tleQUJbmV3UGllY2VzBQNuaWwFDXByb2xvZ0FjdGlvbnMFCXdsZ1Jlc3VsdAFpAQlzdGFrZUR1Y2sABA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAdhc3NldElkCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyAwkBAiE9AggFA3BtdAZhbW91bnQAAQkAAgEJAKwCAgkArAICAgRORlQgBQpEVUNLUFJFRklYAiQgdG9rZW4gc2hvdWxkIGJlIGF0dGFjaGVkIGFzIHBheW1lbnQEBWFzc2V0CQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQEBmlzUm9ibwMDBRNLU19BTExPV19ST0JPX0RVQ0tTCQAAAggFBWFzc2V0Bmlzc3VlcgUEdGhpcwcJAQhjb250YWlucwIIBQVhc3NldARuYW1lBQtST0JPX1BSRUZJWAcDAwMJAQIhPQIIBQVhc3NldAZpc3N1ZXIFDWluY3ViYXRvckFkZHIJAQIhPQIIBQVhc3NldAZpc3N1ZXIFC2JyZWVkZXJBZGRyBwkBASEBBQZpc1JvYm8HCQACAQkArAICCQCsAgIJAKwCAgkArAICAhJVbmtub3duIGlzc3VlciBvZiAFCkRVQ0tQUkVGSVgCBCBvciAFC1JPQk9fUFJFRklYAgYgdG9rZW4DAwkBASEBCQEIY29udGFpbnMCCAUFYXNzZXQEbmFtZQUKRFVDS1BSRUZJWAkBASEBBQZpc1JvYm8HCQACAQkArAICCQCsAgIJAKwCAgkArAICAglPbmx5IE5GVCAFCkRVQ0tQUkVGSVgCBCBvciAFC1JPQk9fUFJFRklYAhQgdG9rZW5zIGFyZSBhY2NlcHRlZAQKYXNzZXRJZFN0cgkA2AQBBQdhc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFCmFzc2V0SWRTdHIDCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5CQACAQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAhIgaXMgYWxyZWFkeSBzdGFrZWQDCQEJaXNEZWZpbmVkAQkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQdhZGRyZXNzCQACAQkArAICAh1Zb3UgYWxyZWFkeSBzdGFrZWQgb25lIGR1Y2s6IAgFBWFzc2V0BG5hbWUEBmxvY0tleQkBD2tleUR1Y2tMb2NhdGlvbgEFCmFzc2V0SWRTdHIECGxvY2F0aW9uCQCiCAEFBmxvY0tleQQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFCmFzc2V0SWRTdHIECGJhY2twYWNrCQCiCAEFBWJwS2V5BAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQUKYXNzZXRJZFN0cgQFbWF4SFAJAQltYXhIZWFsdGgBCQELdmFsdWVPckVsc2UCCQCfCAEJAQxrZXlEdWNrTGV2ZWwBBQphc3NldElkU3RyAAAECWN1ckhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFB3RpbWVLZXkIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkRVQ0tQUkVGSVgJANgEAQUHYXNzZXRJZAUHYWRkcmVzcwgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEGtleUR1Y2tJZFRvT3duZXIBBQphc3NldElkU3RyBQdhZGRyZXNzCQDMCAIJAQtTdHJpbmdFbnRyeQIJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFB2FkZHJlc3MFCmFzc2V0SWRTdHIFA25pbAMJAQlpc0RlZmluZWQBBQhsb2NhdGlvbgUDbmlsCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUGbG9jS2V5BQ9ERUZBVUxUTE9DQVRJT04FA25pbAMJAQlpc0RlZmluZWQBBQhiYWNrcGFjawUDbmlsCQDOCAIJAM0IAgkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQIaMDowXzBfMF8wXzBfMDowXzBfMF8wXzBfMDoFA25pbAkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aAUJY3VySGVhbHRoBQ1wcm9sb2dBY3Rpb25zAWkBC3Vuc3Rha2VEdWNrAQphc3NldElkU3RyBA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAdhc3NldElkCQDZBAEFCmFzc2V0SWRTdHIEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyBAVhc3NldAkBBXZhbHVlAQkA7AcBBQdhc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFCmFzc2V0SWRTdHIDCQEBIQEJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkAwkBASEBCQEJaXNEZWZpbmVkAQkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQdhZGRyZXNzCQACAQkArAICCQCsAgICCVRoZSBkdWNrIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARBrZXlEdWNrSWRUb093bmVyAQUKYXNzZXRJZFN0cgkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUHYWRkcmVzcwkAAgECF1N0YWtlZCBORlQgaXMgbm90IHlvdXJzAwkBD2NoZWNrVG91cm5hbWVudAEFCmFzc2V0SWRTdHIJAAIBAht1bnN0YWtlRHVja19jaGVja1RvdXJuYW1lbnQECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQphc3NldElkU3RyBAVtYXhIUAkBCW1heEhlYWx0aAEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDGtleUR1Y2tMZXZlbAEFCmFzc2V0SWRTdHIAAAQGaGVhbHRoCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aAUFbWF4SFADCQBmAgUFbWF4SFAFBmhlYWx0aAkAAgEJAKwCAgkArAICAhlQbGVhc2UgaGVhbCB5b3VyIGR1Y2sgdG8gCQCkAwEFBW1heEhQAhNocCBiZWZvcmUgdW5zdGFraW5nCQDOCAIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEFB2Fzc2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQUHdGltZUtleQkAzAgCCQELRGVsZXRlRW50cnkBBQlrZXlIZWFsdGgJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBD2tleUR1Y2tMb2NhdGlvbgEFCmFzc2V0SWRTdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBEGtleUR1Y2tJZFRvT3duZXIBBQphc3NldElkU3RyCQDMCAIJAQtEZWxldGVFbnRyeQEJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKRFVDS1BSRUZJWAUKYXNzZXRJZFN0cgUHYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQdhZGRyZXNzBQNuaWwFDXByb2xvZ0FjdGlvbnMBaQEIY2xhaW1SZXMCBmFtb3VudA5sYW5kQXNzZXRJZFN0cgQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEBnJlc3VsdAkBEGNsYWltUmVzSW50ZXJuYWwEBQRhZGRyBQZhbW91bnQFDWNsYWltTW9kZUR1Y2sFDmxhbmRBc3NldElkU3RyBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQJAJQKAgkAzggCCQDNCAIJAM0IAgkAzggCCAUGcmVzdWx0Al8xCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQJAGsDBQd4cENsYWltBQZhbW91bnQFBU1VTFQ4Al8xCQELU3RyaW5nRW50cnkCCAUGcmVzdWx0Al8yCQC5CQIIBQZyZXN1bHQCXzMCAToJAQtTdHJpbmdFbnRyeQIIBQZyZXN1bHQCXzQJALkJAggFBnJlc3VsdAJfNQIBOgUNcHJvbG9nQWN0aW9ucwkAkQMCCAUGcmVzdWx0Al8zBQhicElkeFJlcwFpAQxjbGFpbVJlc1RvV0gCBmFtb3VudA5sYW5kQXNzZXRJZFN0cgQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEBnJlc3VsdAkBEGNsYWltUmVzSW50ZXJuYWwEBQRhZGRyBQZhbW91bnQFC2NsYWltTW9kZVdoBQ5sYW5kQXNzZXRJZFN0cgkAlAoCCQDOCAIJAM0IAgkAzQgCCQDOCAIIBQZyZXN1bHQCXzEICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIFBGFkZHIJAGsDBQd4cENsYWltBQZhbW91bnQFBU1VTFQ4Al8xCQELU3RyaW5nRW50cnkCCAUGcmVzdWx0Al8yCQC5CQIIBQZyZXN1bHQCXzMCAToJAQtTdHJpbmdFbnRyeQIIBQZyZXN1bHQCXzQJALkJAggFBnJlc3VsdAJfNQIBOgUNcHJvbG9nQWN0aW9ucwkAkQMCCAUGcmVzdWx0Al81BQh3aElkeFJlcwFpAQZmbGlnaHQCB21lc3NhZ2UDc2lnBA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAh1c2VyQWRkcgkApQgBCAUBaQZjYWxsZXIEAWYJAQxmbGlnaHRDb21tb24DBQh1c2VyQWRkcgUHbWVzc2FnZQUDc2lnBAVuZXdIUAgFAWYCXzEEC2R1Y2tBc3NldElkCAUBZgJfMgQGbG9jS2V5CQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQEC2N1ckxvY2F0aW9uCQELdmFsdWVPckVsc2UCCQCiCAEFBmxvY0tleQUPREVGQVVMVExPQ0FUSU9OBAtuZXdMb2NhdGlvbggFAWYCXzQDCQAAAgULbmV3TG9jYXRpb24FC2N1ckxvY2F0aW9uCQACAQIiWW91IGNhbid0IGZseSB0byB0aGUgc2FtZSBsb2NhdGlvbgQGbmV3TG9jCQC1CQIFC25ld0xvY2F0aW9uAgFfBAZpc1RvdXIJAAACCQCRAwIFBm5ld0xvYwUKbG9jSWR4VHlwZQIBVAQHaXNEZWxpdgkAAAIJAJEDAgUGbmV3TG9jBQpsb2NJZHhUeXBlAgFEBAVlcUtleQkBEGtleUR1Y2tFcXVpcG1lbnQBBQtkdWNrQXNzZXRJZAQJY3VycmVudEVxCQELdmFsdWVPckVsc2UCCQCiCAEFBWVxS2V5AhcsOyxfLDssXyw7LF8sOyxfLDssXyw7LAQNJHQwNjYwMzU2NjEzMgkBEXN1YnRyYWN0RXF1aXBtZW50AgUJY3VycmVudEVxCAUBZgJfNQQFbmV3RXEIBQ0kdDA2NjAzNTY2MTMyAl8xBA9zaG91bGRaZXJvQnVmZnMIBQ0kdDA2NjAzNTY2MTMyAl8yBA0kdDA2NjEzNTY3OTY3AwkBASEBCQEJb25NaXNzaW9uAgUSdG91cm5hbWVudENvbnRyYWN0BQtjdXJMb2NhdGlvbgMFBmlzVG91cgkBDGNoZWF0QXR0ZW1wdAMFC2N1ckxvY2F0aW9uBQtuZXdMb2NhdGlvbgAFAwkBASEBBQdpc0RlbGl2AwkAZgIFBW5ld0hQAAAJAJQKAgULbmV3TG9jYXRpb24FBW5ld0hQCQCUCgIFC2N1ckxvY2F0aW9uAAADCQBmAgUFbmV3SFAAAAQBcwkA/AcEBQR0aGlzAg9wcm9jZXNzRGVsaXZlcnkJAMwIAgULZHVja0Fzc2V0SWQFA25pbAUDbmlsAwkAAAIFAXMFAXMJAJQKAgULY3VyTG9jYXRpb24FBW5ld0hQCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQCUCgIFC2N1ckxvY2F0aW9uAAADCQEOaXNJblRvdXJuYW1lbnQCBRJ0b3VybmFtZW50Q29udHJhY3QFC2N1ckxvY2F0aW9uAwkBASEBCQEOaXNJblRvdXJuYW1lbnQCBRJ0b3VybmFtZW50Q29udHJhY3QFC25ld0xvY2F0aW9uCQACAQIqWW91ciBkdWNrIGlzIHRha2luZyBwYXJ0IGluIHRoZSB0b3VybmFtZW50BAVzY29yZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBm5ld0xvYwUIbG9jSWR4SWQEBmN1ckxvYwkAtQkCBQtjdXJMb2NhdGlvbgIBXwQGbGFzdElkCQELdmFsdWVPckVsc2UCCQCaCAIFEnRvdXJuYW1lbnRDb250cmFjdAUNbGFzdFRvdXJJZEtleQAAAwkBAiE9AgUFc2NvcmUJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGY3VyTG9jBQhsb2NJZHhJZAABCQEMY2hlYXRBdHRlbXB0AwULY3VyTG9jYXRpb24FC25ld0xvY2F0aW9uAAcDCQBmAgUFbmV3SFAAAAQJbG9jYWxCZXN0CQELdmFsdWVPckVsc2UCCQCaCAIFEnRvdXJuYW1lbnRDb250cmFjdAkBGmtleUJlc3RSZXN1bHRCeVRvdXJBbmREdWNrAgUGbGFzdElkBQtkdWNrQXNzZXRJZAAABAh1cGRMb2NhbAMJAGYCBQVzY29yZQUJbG9jYWxCZXN0CQD8BwQFEnRvdXJuYW1lbnRDb250cmFjdAIOc2F2ZUR1Y2tSZXN1bHQJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUFc2NvcmUFA25pbAUDbmlsBQR1bml0AwkAAAIFCHVwZExvY2FsBQh1cGRMb2NhbAkAlAoCBQtuZXdMb2NhdGlvbgUFbmV3SFAJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAJQKAgULY3VyTG9jYXRpb24AAAkAAgEJAKwCAgIUVW5rbm93biBjdXJMb2NhdGlvbjoFC2N1ckxvY2F0aW9uBAlsb2NUb1NhdmUIBQ0kdDA2NjEzNTY3OTY3Al8xBAhocFRvU2F2ZQgFDSR0MDY2MTM1Njc5NjcCXzIJAJQKAgkAzggCCQDOCAIJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCBQZsb2NLZXkFCWxvY1RvU2F2ZQkAzAgCCQELU3RyaW5nRW50cnkCBQVlcUtleQUFbmV3RXEJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQFCGhwVG9TYXZlBQNuaWwFDXByb2xvZ0FjdGlvbnMDBQ9zaG91bGRaZXJvQnVmZnMJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleUR1Y2tCdWZmcwEFC2R1Y2tBc3NldElkAgkwXzBfMF8wXzAFA25pbAUDbmlsCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQDCQBmAgUFbmV3SFAAAAUPeHBTdWNjZXNzRmxpZ2h0BQx4cEZhaWxGbGlnaHQCXzEIBQFmAl8zAWkBBGhlYWwDCnF1YW50aXR5TDEKcXVhbnRpdHlMMgpxdWFudGl0eUwzBA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMDAwkAZgIAAAUKcXVhbnRpdHlMMQYJAGYCAAAFCnF1YW50aXR5TDIGCQBmAgAABQpxdWFudGl0eUwzCQACAQIbUXVhbnRpdHkgY2Fubm90IGJlIG5lZ2F0aXZlBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBD2NoZWNrVG91cm5hbWVudAEFC2R1Y2tBc3NldElkCQACAQIUaGVhbF9jaGVja1RvdXJuYW1lbnQEA3F0cwkAzAgCBQpxdWFudGl0eUwxCQDMCAIFCnF1YW50aXR5TDIJAMwIAgUKcXVhbnRpdHlMMwUDbmlsBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQEBW1heEhQCQEJbWF4SGVhbHRoAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMa2V5RHVja0xldmVsAQULZHVja0Fzc2V0SWQAAAQJb2xkSGVhbHRoCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aAUFbWF4SFADCQBnAgUJb2xkSGVhbHRoBQVtYXhIUAkAAgEJAKwCAgkArAICAg9IUCBzaG91bGQgYmUgPCAJAKQDAQUFbWF4SFACCCB0byBoZWFsBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQIcHJvZExpc3QDCQAAAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgAFA25pbAkAvAkCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAV8KAQtpdGVyYXRlUHJvZAIDYWNjBnJlY2lwZQQBbggFA2FjYwJfMgQBeAMJAGYCCQCQAwEFCHByb2RMaXN0BQFuCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvZExpc3QFAW4AAAMJAGYCAAMFAW4EAXEJAJEDAgUDcXRzBQFuAwkAZgIFAXEFAXgJAAIBCQCsAgIJAKwCAgkArAICAg5Zb3UgaGF2ZSBvbmx5IAkApAMBBQF4AgQgb2YgCQCRAwIFCXByb2RUeXBlcwUBbgkAlQoDCQDNCAIIBQNhY2MCXzEJAKQDAQkAZQIFAXgFAXEJAGQCBQFuAAEJAGQCCAUDYWNjAl8zCQBoAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgUGcmVjaXBlAgFfBQpySWR4RWZmZWN0BQFxCQCVCgMJAM0IAggFA2FjYwJfMQkApAMBBQF4CQBkAgUBbgABCAUDYWNjAl8zBAZyZXN1bHQKAAIkbAUQcHJvZHVjdGlvbk1hdHJpeAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJUKAwUDbmlsAAAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQELaXRlcmF0ZVByb2QCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDUwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgQJbmV3SGVhbHRoCQCXAwEJAMwIAgUFbWF4SFAJAMwIAgkAZAIFCW9sZEhlYWx0aAgFBnJlc3VsdAJfMwUDbmlsCQCUCgIJAM4IAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgFCW5ld0hlYWx0aAkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAugkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQJAMwIAgkAuQkCCAUGcmVzdWx0Al8xAgFfBQNuaWwCAToFA25pbAUNcHJvbG9nQWN0aW9ucwgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkCQBoAgUGeHBIZWFsCQBkAgkAZAIFCnF1YW50aXR5TDEFCnF1YW50aXR5TDIFCnF1YW50aXR5TDMCXzEFCW5ld0hlYWx0aAFpAQZoZWFsRVMABA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAAwkBAiE9AggFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECGkFsbG93ZWQgVVNEVCBwYXltZW50IG9ubHkhBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBD2NoZWNrVG91cm5hbWVudAEFC2R1Y2tBc3NldElkCQACAQIWaGVhbEVTX2NoZWNrVG91cm5hbWVudAQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAVtYXhIUAkBCW1heEhlYWx0aAEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDGtleUR1Y2tMZXZlbAEFC2R1Y2tBc3NldElkAAAECW9sZEhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQAwkAZgIFCW9sZEhlYWx0aAAACQACAQIoSFAgc2hvdWxkIGJlIDAgdG8gY2FsbCBFbWVyZ2VuY3kgU2VydmljZQQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkECHByb2RMaXN0AwkAAAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIABQNuaWwJALwJAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgFfBA1tZWRLaXRBbW91bnQxAwkAZgIJAJADAQUIcHJvZExpc3QAAAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb2RMaXN0AAAAAAQNbWVkS2l0QW1vdW50MgMJAGYCCQCQAwEFCHByb2RMaXN0AAEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhwcm9kTGlzdAABAAAEDW1lZEtpdEFtb3VudDMDCQBmAgkAkAMBBQhwcm9kTGlzdAACCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvZExpc3QAAgAAAwMDCQBmAgUNbWVkS2l0QW1vdW50MQAABgkAZgIFDW1lZEtpdEFtb3VudDIAAAYJAGYCBQ1tZWRLaXRBbW91bnQzAAAJAAIBAh9Zb3UgaGF2ZSB0byB1c2Ugb3duIE1lZGljYWwgS2l0BAhleGlzdFN0cgkAnQgCBQ9lY29ub215Q29udHJhY3QJAQ5rZXlFc1dhcmVob3VzZQAEDGV4aXN0QW1vdW50cwMJAQlpc0RlZmluZWQBBQhleGlzdFN0cgkAvAkCCQEFdmFsdWUBBQhleGlzdFN0cgIBXwUDbmlsBAtleGlzdEFtb3VudAMJAGYCCQCQAwEFDGV4aXN0QW1vdW50cwAACQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUMZXhpc3RBbW91bnRzAAAAAAMJAGcCAAAFC2V4aXN0QW1vdW50CQACAQI5VGhlcmUgYXJlIG5vIE1lZGljYWwgS2l0cyBMMSBhdCBFbWVyZ2VuY3kgU2VydmljZSBzdG9yYWdlBAluZXdIZWFsdGgJAGQCBQlvbGRIZWFsdGgJAQ1wYXJzZUludFZhbHVlAQkAkQMCCQC1CQIJAJEDAgUQcHJvZHVjdGlvbk1hdHJpeAAAAgFfBQpySWR4RWZmZWN0BAVuZXdFUwkAuQkCCQDMCAIJAKQDAQkAZQIFC2V4aXN0QW1vdW50AAEJANEIAgUMZXhpc3RBbW91bnRzAAACAV8EBnJlY2lwZQkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgAAAIBXwQIdG90YWxNYXQJARJnZXRSZWNpcGVNYXRlcmlhbHMBBQZyZWNpcGUECXNlbGxQcmljZQkAawMJAGgCBQh0b3RhbE1hdAUKRVNTRUxMQ09FRgUQUkVTT1VSQ0VQUklDRU1JTgkAaAIFBU1VTFQ4BQ5QUk9EVUNUUEtHU0laRQMJAQIhPQIIBQNwbXQGYW1vdW50BQlzZWxsUHJpY2UJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQlzZWxsUHJpY2UEBnJlc3VsdAkBCGFzU3RyaW5nAQkA/AcEBQ9lY29ub215Q29udHJhY3QCD3VwZGF0ZUVzU3RvcmFnZQkAzAgCBQVuZXdFUwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQt1c2R0QXNzZXRJZAUJc2VsbFByaWNlBQNuaWwJAJQKAgkAzggCCQDNCAIFDXByb2xvZ0FjdGlvbnMJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgFCW5ld0hlYWx0aAgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkBQh4cENhbGxFUwJfMQUGcmVzdWx0AWkBDnVwZGF0ZUJhY2twYWNrAgtkdWNrQXNzZXRJZAduZXdQYWNrAwkBAiE9AggFAWkGY2FsbGVyBQ9lY29ub215Q29udHJhY3QJAAIBAhFwZXJtaXNzaW9uIGRlbmllZAkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBQduZXdQYWNrBQNuaWwFB25ld1BhY2sBaQEPY29tbWl0Rm9yUmFuZG9tAAQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkEC2ZpbmlzaEJsb2NrCQBkAgUGaGVpZ2h0BQtyYW5kb21EZWxheQQEYWRkcgkApQgBCAUBaQZjYWxsZXIJAJQKAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEJa2V5Q29tbWl0AQUEYWRkcgULZmluaXNoQmxvY2sFA25pbAUNcHJvbG9nQWN0aW9ucwULZmluaXNoQmxvY2sBaQEMcmV2ZWFsUmFuZG9tAQhtYXhWYWx1ZQQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkEBGFkZHIJAKUIAQgFAWkGY2FsbGVyBAlmaW5pc2hLZXkJAQlrZXlDb21taXQBBQRhZGRyBAtmaW5pc2hCbG9jawkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCfCAEFCWZpbmlzaEtleQIkWW91IGhhdmUgdG8gY29tbWl0Rm9yUmFuZG9tKCkgZmlyc3QhAwkAZgIFC2ZpbmlzaEJsb2NrBQZoZWlnaHQJAAIBCQCsAgICNFJhbmRvbSBudW1iZXIgaXMgbm90IHJlYWR5IHlldCwgd2FpdCB1bnRpbCBoZWlnaHQgPSAJAKQDAQULZmluaXNoQmxvY2sEB2VudHJvcHkJAQV2YWx1ZQEICQEFdmFsdWUBCQDtBwEFC2ZpbmlzaEJsb2NrA3ZyZgQEc2FsdAkAmwMBCQELdmFsdWVPckVsc2UCCQCiCAEJARFrZXlMYXN0VHhJZEJ5VXNlcgEFBGFkZHICAAQEcmFuZAkBD2dldFJhbmRvbU51bWJlcgMFCG1heFZhbHVlBQRzYWx0BQdlbnRyb3B5CQCUCgIJAM4IAgkAzAgCCQELRGVsZXRlRW50cnkBBQlmaW5pc2hLZXkFA25pbAUNcHJvbG9nQWN0aW9ucwUEcmFuZAFpAQhidXlTTGFuZAAEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQIaQWxsb3dlZCBVU0RUIHBheW1lbnQgb25seSEDCQECIT0CCAUDcG10BmFtb3VudAUHRVhQVVNEVAkAAgEJAKwCAgIbUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgCQCkAwEFB0VYUFVTRFQEBnJlc3VsdAkBEmV4cGVkaXRpb25JbnRlcm5hbAIIBQFpBmNhbGxlcggFAWkNdHJhbnNhY3Rpb25JZAQLYWNyZXNSZXN1bHQJAQVhc0ludAEJAPwHBAUNYWNyZXNDb250cmFjdAIJYnVybkFjcmVzCQDMCAIFDFNfQ09TVF9BQ1JFUwUDbmlsBQNuaWwJAJQKAgkAzggCCQDOCAIJAM0IAggFBnJlc3VsdAJfMQkBDlNjcmlwdFRyYW5zZmVyAwUPZWNvbm9teUNvbnRyYWN0CAUDcG10BmFtb3VudAULdXNkdEFzc2V0SWQICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIJAKUIAQgFAWkGY2FsbGVyBQp4cE5ld1NMYW5kAl8xBQ1wcm9sb2dBY3Rpb25zCQCUCgIICAUGcmVzdWx0Al8yAl8xBQthY3Jlc1Jlc3VsdAFpAQpleHBlZGl0aW9uAgdtZXNzYWdlA3NpZwQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQIdXNlckFkZHIJAKUIAQgFAWkGY2FsbGVyBAFmCQEMZmxpZ2h0Q29tbW9uAwUIdXNlckFkZHIFB21lc3NhZ2UFA3NpZwQLZHVja0Fzc2V0SWQIBQFmAl8yBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAVtTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQGbmV3TWF0CQC5CQIJARFzdWJ0cmFjdE1hdGVyaWFscwMGBQVtTGlzdAUMRVhQTUFURVJJQUxTAgFfBAVlcUtleQkBEGtleUR1Y2tFcXVpcG1lbnQBBQtkdWNrQXNzZXRJZAQJY3VycmVudEVxCQELdmFsdWVPckVsc2UCCQCiCAEFBWVxS2V5AhcsOyxfLDssXyw7LF8sOyxfLDssXyw7LAQNJHQwNzU4ODc3NTk4NAkBEXN1YnRyYWN0RXF1aXBtZW50AgUJY3VycmVudEVxCAUBZgJfNQQFbmV3RXEIBQ0kdDA3NTg4Nzc1OTg0Al8xBA9zaG91bGRaZXJvQnVmZnMIBQ0kdDA3NTg4Nzc1OTg0Al8yBAFlCQESZXhwZWRpdGlvbkludGVybmFsAggFAWkGY2FsbGVyCAUBaQ10cmFuc2FjdGlvbklkBAJpZAgIBQFlAl8yAl8xBAZyZXN1bHQDCQBnAgAACAUBZgJfMQkAlQoDCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgAAAkAzAgCCQELU3RyaW5nRW50cnkCBQVlcUtleQUFbmV3RXEFA25pbAIAAAAJAJUKAwkAzggCCAUBZQJfMQMFD3Nob3VsZFplcm9CdWZmcwkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5RHVja0J1ZmZzAQULZHVja0Fzc2V0SWQCCTBfMF8wXzBfMAUDbmlsCQDNCAIJAM0IAgkAzQgCCQDNCAIFA25pbAkBC1N0cmluZ0VudHJ5AgkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkCQC5CQIJAMwIAggIBQFlAl8yAl8yCQDMCAICAUwJAMwIAgUCaWQFA25pbAIBXwkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aAgFAWYCXzEJAQtTdHJpbmdFbnRyeQIFBWVxS2V5BQVuZXdFcQkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQDMCAIFBm5ld01hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgUCaWQIBQFmAl8zAwkBD2NoZWNrVG91cm5hbWVudAEFC2R1Y2tBc3NldElkCQACAQIaZXhwZWRpdGlvbl9jaGVja1RvdXJuYW1lbnQEC2FjcmVzUmVzdWx0CQEFYXNJbnQBCQD8BwQFDWFjcmVzQ29udHJhY3QCCWJ1cm5BY3JlcwkAzAgCBQxTX0NPU1RfQUNSRVMFA25pbAUDbmlsCQCUCgIJAM4IAgkAzggCCAUGcmVzdWx0Al8xCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQFCnhwTmV3U0xhbmQCXzEFDXByb2xvZ0FjdGlvbnMJAJUKAwgFBnJlc3VsdAJfMggFBnJlc3VsdAJfMwULYWNyZXNSZXN1bHQBaQEQYnV5U0xhbmRGb3JBY3JlcwAEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQDAwkBASEBCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBgkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkBQxhY3Jlc0Fzc2V0SWQJAAIBAhRBQ1JFUyBwYXltZW50cyBvbmx5IQMJAQIhPQIFA2FtdAUMU19DT1NUX0FDUkVTCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUMU19DT1NUX0FDUkVTBAZyZXN1bHQJARJleHBlZGl0aW9uSW50ZXJuYWwCCAUBaQZjYWxsZXIIBQFpDXRyYW5zYWN0aW9uSWQEC2FjcmVzUmVzdWx0CQEFYXNJbnQBCQD8BwQFDWFjcmVzQ29udHJhY3QCCWJ1cm5BY3JlcwkAzAgCBQxTX0NPU1RfQUNSRVMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUMYWNyZXNBc3NldElkBQNhbXQFA25pbAkAlAoCCQDOCAIJAM4IAggFBnJlc3VsdAJfMQgJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgkApQgBCAUBaQZjYWxsZXIFCnhwTmV3U0xhbmQCXzEFDXByb2xvZ0FjdGlvbnMJAJQKAggIBQZyZXN1bHQCXzICXzEFC2FjcmVzUmVzdWx0AWkBDHVwZ3JhZGVJbmZyYQELbGFuZEFzc2V0SWQEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBnJlc3VsdAkBDXVwSW5mcmFDb21tb24EBggFAWkGY2FsbGVyAAAFC2xhbmRBc3NldElkBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkCQCUCgIJAM4IAgkAzggCCAUGcmVzdWx0Al8xBQ1wcm9sb2dBY3Rpb25zCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQJAGsDBQ54cFVwZ3JhZGVJbmZyYQgFBnJlc3VsdAJfMwUFTVVMVDgCXzEIBQZyZXN1bHQCXzIBaQEQYWN0aXZhdGVBcnRpZmFjdAIHYXJ0TmFtZQ5sYW5kQXNzZXRJZE9wdAQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQZjYWxsZXIEBnJlc3VsdAQHJG1hdGNoMAUHYXJ0TmFtZQMJAAACAgdQUkVTQUxFBQckbWF0Y2gwCQESYWN0aXZhdGVQcmVzYWxlQXJ0AgUEYWRkcgUObGFuZEFzc2V0SWRPcHQDCQAAAgIHT05CT0FSRAUHJG1hdGNoMAkBEmFjdGl2YXRlT25ib2FyZEFydAEFBGFkZHIJAAIBAhBVbmtub3duIGFydGlmYWN0CQDOCAIFBnJlc3VsdAUNcHJvbG9nQWN0aW9ucwFpAQptZXJnZUxhbmRzAQxsYW5kQXNzZXRJZHMEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBnJlc3VsdAkBC21lcmdlQ29tbW9uAgkApQgBCAUBaQZjYWxsZXIFDGxhbmRBc3NldElkcwkAlAoCCQDOCAIJAM4IAggFBnJlc3VsdAJfMQUNcHJvbG9nQWN0aW9ucwgJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgkApQgBCAUBaQZjYWxsZXIFB3hwTWVyZ2UCXzEIBQZyZXN1bHQCXzIBaQENY2FyZ29FeGNoYW5nZQIMY2FyZ29MaXN0U3RyC2xhbmRBc3NldElkBA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBApjYXJnb1BhcnRzCQC8CQIFDGNhcmdvTGlzdFN0cgIBOgQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMECWxhbmRJbmRleAkAaQIJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfBQtyZWNMYW5kU2l6ZQUFU1NJWkUECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEC2N1ckxvY2F0aW9uCQELdmFsdWVPckVsc2UCCQCiCAEJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OBANsb2MJALUJAgkBBXZhbHVlAQULY3VyTG9jYXRpb24CAV8DCQECIT0CCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIBTAkAAgEJAKwCAgkArAICAhZEdWNrIGxvY2F0aW9uIHR5cGUgaXMgCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIRLCBidXQgc2hvdWxkIGJlIEwDCQECIT0CCQCRAwIFA2xvYwUIbG9jSWR4SWQFC2xhbmRBc3NldElkCQACAQkArAICAhtEdWNrIHNob3VsZCBiZSBvbiB0aGUgbGFuZCAFC2xhbmRBc3NldElkBAV3aEtleQkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkBAljdXJyZW50V2gJAQxnZXRXYXJlaG91c2UDBQV3aEtleQUJbGFuZEluZGV4BQppbmZyYUxldmVsBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQGcmVzdWx0CQEJbW92ZVN0dWZmAwUKY2FyZ29QYXJ0cwUJY3VycmVudFdoBQtjdXJyZW50UGFjawQEbG9mdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUAgFfBAVsb2Z0TwkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAgFBnJlc3VsdAJfNwQFbG9mdEYJAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQgFBnJlc3VsdAJfNwkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC6CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCAUGcmVzdWx0Al80CQDMCAIIBQZyZXN1bHQCXzUJAMwIAggFBnJlc3VsdAJfNgUDbmlsAgE6CQDMCAIJAQtTdHJpbmdFbnRyeQIFBXdoS2V5CQC6CQIJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIIBQZyZXN1bHQCXzEJAMwIAggFBnJlc3VsdAJfMgkAzAgCCAUGcmVzdWx0Al8zCQDMCAIJALkJAgkAzAgCCQCRAwIFBGxvZnQFCXZvbExvY2tlZAkAzAgCCQCkAwEFBWxvZnRPCQDMCAIJAKQDAQUFbG9mdEYJAMwIAgkAkQMCBQRsb2Z0BQh2b2xUb3RhbAUDbmlsAgFfBQNuaWwCAToFA25pbAUNcHJvbG9nQWN0aW9ucwFpAQ1zYXZlV2FyZWhvdXNlAgV3aFN0cgtsYW5kQXNzZXRJZAMJAQIhPQIIBQFpBmNhbGxlcgUPZWNvbm9teUNvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAQFd2hLZXkJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAQCd2gJALwJAgUFd2hTdHICAToDCQECIT0CCQCQAwEFAndoAAUJAAIBAjB3YXJlaG91c2Ugc3RyaW5nIHNob3VsZCBjb250YWluIDQgJzonIHNlcGFyYXRvcnMEBWxvZnRMCQCRAwIJALUJAgkAkQMCBQJ3aAUJd2hJZHhMT0ZUAgFfBQl2b2xMb2NrZWQEBWxvZnRPCQEXZ2V0V2FyZWhvdXNlT2NjdXBpZWRWb2wBBQJ3aAQFbG9mdFQJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEJAJEDAgUCd2gFC3doSWR4TGV2ZWxzBAVsb2Z0RgkAZQIJAGUCBQVsb2Z0VAkBDXBhcnNlSW50VmFsdWUBBQVsb2Z0TAUFbG9mdE8DCQBmAgAABQVsb2Z0RgkAAgECME9wZXJhdGlvbiBsZWFkcyB0byBuZWdhdGl2ZSBmcmVlIHdhcmVob3VzZSBzcGFjZQQIbmV3V2hTdHIJALoJAgkAzAgCCQCRAwIFAndoBQt3aElkeExldmVscwkAzAgCCQCRAwIFAndoBQh3aElkeFJlcwkAzAgCCQCRAwIFAndoBQh3aElkeE1hdAkAzAgCCQCRAwIFAndoBQl3aElkeFByb2QJAMwIAgkAuQkCCQDMCAIFBWxvZnRMCQDMCAIJAKQDAQUFbG9mdE8JAMwIAgkApAMBBQVsb2Z0RgkAzAgCCQCkAwEFBWxvZnRUBQNuaWwCAV8FA25pbAIBOgkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBXdoS2V5BQhuZXdXaFN0cgUDbmlsBQhuZXdXaFN0cgFpAQ1zZXRDdXN0b21OYW1lAwdhc3NldElkCmN1c3RvbU5hbWUEdHlwZQQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhpBbGxvd2VkIFVTRFQgcGF5bWVudCBvbmx5IQMJAQIhPQIIBQNwbXQGYW1vdW50BQxSRU5BTUlOR0NPU1QJAAIBCQCsAgICElBheW1lbnQgc2hvdWxkIGJlIAkApAMBBQxSRU5BTUlOR0NPU1QDCQEIY29udGFpbnMCBQpjdXN0b21OYW1lAgJfXwkAAgEJAKwCAgIeTmFtZSBzaG91bGQgbm90IGNvbnRhaW4gJ19fJzogBQpjdXN0b21OYW1lAwkAZgIJALECAQUKY3VzdG9tTmFtZQUKTUFYTkFNRUxFTgkAAgEJAKwCAgIZTmFtZSB0b28gbG9uZywgbWF4TGVuZ3RoPQkApAMBBQpNQVhOQU1FTEVOBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQHYWN0aW9ucwQHJG1hdGNoMAUEdHlwZQMJAAACAgdBQ0NPVU5UBQckbWF0Y2gwBApyZXZlcnNlS2V5CQEWa2V5Q3VzdG9tTmFtZVRvQWRkcmVzcwEFCmN1c3RvbU5hbWUECW5hbWVPd25lcgkAoggBBQpyZXZlcnNlS2V5AwkBCWlzRGVmaW5lZAEFCW5hbWVPd25lcgkAAgEJAKwCAgIZTmFtZSBhbHJlYWR5IHJlZ2lzdGVyZWQ6IAUKY3VzdG9tTmFtZQQNYWRkclRvTmFtZUtleQkBFmtleUFkZHJlc3NUb0N1c3RvbU5hbWUBBQRhZGRyBAdvbGROYW1lCQCiCAEFDWFkZHJUb05hbWVLZXkEB2ZyZWVPbGQDCQEJaXNEZWZpbmVkAQUHb2xkTmFtZQkAzAgCCQELRGVsZXRlRW50cnkBCQEWa2V5Q3VzdG9tTmFtZVRvQWRkcmVzcwEJAQV2YWx1ZQEFB29sZE5hbWUFA25pbAUDbmlsCQDOCAIJAM0IAgkAzQgCBQdmcmVlT2xkCQELU3RyaW5nRW50cnkCBQ1hZGRyVG9OYW1lS2V5BQpjdXN0b21OYW1lCQELU3RyaW5nRW50cnkCBQpyZXZlcnNlS2V5BQRhZGRyCAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCBQRhZGRyBQx4cEN1c3RvbU5hbWUCXzEDCQAAAgIETEFORAUHJG1hdGNoMAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQdhc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFB2Fzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQUHYXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQKcmV2ZXJzZUtleQkBGmtleUxhbmRDdXN0b21OYW1lVG9Bc3NldElkAQUKY3VzdG9tTmFtZQQJbmFtZU93bmVyCQCiCAEFCnJldmVyc2VLZXkDCQEJaXNEZWZpbmVkAQUJbmFtZU93bmVyCQACAQkArAICAhlOYW1lIGFscmVhZHkgcmVnaXN0ZXJlZDogBQpjdXN0b21OYW1lBA5hc3NldFRvTmFtZUtleQkBGmtleUxhbmRBc3NldElkVG9DdXN0b21OYW1lAQUHYXNzZXRJZAQHb2xkTmFtZQkAoggBBQ5hc3NldFRvTmFtZUtleQQHZnJlZU9sZAMJAQlpc0RlZmluZWQBBQdvbGROYW1lCQDMCAIJAQtEZWxldGVFbnRyeQEJARprZXlMYW5kQ3VzdG9tTmFtZVRvQXNzZXRJZAEJAQV2YWx1ZQEFB29sZE5hbWUFA25pbAUDbmlsCQDOCAIJAM0IAgkAzQgCBQdmcmVlT2xkCQELU3RyaW5nRW50cnkCBQ5hc3NldFRvTmFtZUtleQUKY3VzdG9tTmFtZQkBC1N0cmluZ0VudHJ5AgUKcmV2ZXJzZUtleQUHYXNzZXRJZAgJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgUEYWRkcgUMeHBDdXN0b21OYW1lAl8xAwkAAAICBERVQ0sFByRtYXRjaDAEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQdhc3NldElkAwMJAQEhAQkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQYJAQEhAQkBCWlzRGVmaW5lZAEJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgkAAgEJAKwCAggFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARBrZXlEdWNrSWRUb093bmVyAQUHYXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKRFVDS1BSRUZJWAINIGlzIG5vdCB5b3VycwQKcmV2ZXJzZUtleQkBGmtleUR1Y2tDdXN0b21OYW1lVG9Bc3NldElkAQUKY3VzdG9tTmFtZQQJbmFtZU93bmVyCQCiCAEFCnJldmVyc2VLZXkDCQEJaXNEZWZpbmVkAQUJbmFtZU93bmVyCQACAQkArAICAhlOYW1lIGFscmVhZHkgcmVnaXN0ZXJlZDogBQpjdXN0b21OYW1lBA5hc3NldFRvTmFtZUtleQkBGmtleUR1Y2tBc3NldElkVG9DdXN0b21OYW1lAQUHYXNzZXRJZAQHb2xkTmFtZQkAoggBBQ5hc3NldFRvTmFtZUtleQQHZnJlZU9sZAMJAQlpc0RlZmluZWQBBQdvbGROYW1lCQDMCAIJAQtEZWxldGVFbnRyeQEJARprZXlEdWNrQ3VzdG9tTmFtZVRvQXNzZXRJZAEJAQV2YWx1ZQEFB29sZE5hbWUFA25pbAUDbmlsCQDOCAIJAM0IAgkAzQgCBQdmcmVlT2xkCQELU3RyaW5nRW50cnkCBQ5hc3NldFRvTmFtZUtleQUKY3VzdG9tTmFtZQkBC1N0cmluZ0VudHJ5AgUKcmV2ZXJzZUtleQUHYXNzZXRJZAgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFB2Fzc2V0SWQFDHhwQ3VzdG9tTmFtZQJfMQkAAgECE1Vua25vd24gZW50aXR5IHR5cGUJAJQKAgkAzggCCQDNCAIFB2FjdGlvbnMJAQ5TY3JpcHRUcmFuc2ZlcgMFD2Vjb25vbXlDb250cmFjdAgFA3BtdAZhbW91bnQFC3VzZHRBc3NldElkBQ1wcm9sb2dBY3Rpb25zAAABaQEMc2V0UmVmZXJyYWxzAglvbGRQbGF5ZXIJbmV3UGxheWVyAwkBAiE9AggFAWkPY2FsbGVyUHVibGljS2V5BQNwdWIJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAMJAQEhAQkBCWlzRGVmaW5lZAEJAKYIAQUJb2xkUGxheWVyCQACAQkArAICAhFJbnZhbGlkIGFkZHJlc3M6IAUJb2xkUGxheWVyBApuZXdiaWVBZGRyCQCmCAEFCW5ld1BsYXllcgMJAQEhAQkBCWlzRGVmaW5lZAEFCm5ld2JpZUFkZHIJAAIBCQCsAgICEUludmFsaWQgYWRkcmVzczogBQluZXdQbGF5ZXIECW9sZExhc3RUeAkAoggBCQERa2V5TGFzdFR4SWRCeVVzZXIBBQlvbGRQbGF5ZXIDCQEBIQEJAQlpc0RlZmluZWQBBQlvbGRMYXN0VHgJAAIBAiJvbGRQbGF5ZXIgZGlkbid0IGRvIGFueSB0eCBpbiBnYW1lAwkAZwIAAAgJAO8HAQkBBXZhbHVlAQUKbmV3YmllQWRkcglhdmFpbGFibGUJAAIBAhZuZXdQbGF5ZXIgaGFzIG5vIFdBVkVTBAdvbGRzS2V5CQEJa2V5T2xkaWVzAAQEb2xkcwkAoggBBQdvbGRzS2V5BAZvbGRpZXMDCQEJaXNEZWZpbmVkAQUEb2xkcwkAvAkCCQEFdmFsdWUBBQRvbGRzAgFfBQNuaWwDCQEPY29udGFpbnNFbGVtZW50AgUGb2xkaWVzBQluZXdQbGF5ZXIJAAIBCQCsAgIFCW5ld1BsYXllcgImIGlzIG5vdCBuZXdiaWUgKGFscmVhZHkgaGFzIHJlZmVycmFscykECHJlZkJ5S2V5CQEPa2V5QWRkcmVzc1JlZkJ5AQUJbmV3UGxheWVyBAVyZWZCeQkAoggBBQhyZWZCeUtleQMDCQEJaXNEZWZpbmVkAQUFcmVmQnkJAQlpc0RlZmluZWQBCQCmCAEJAQV2YWx1ZQEFBXJlZkJ5BwkAAgEJAKwCAgkArAICBQluZXdQbGF5ZXICFCBhbHJlYWR5IGhhcyByZWZCeTogCQEFdmFsdWUBBQVyZWZCeQQHcmVmc0tleQkBE2tleUFkZHJlc3NSZWZlcnJhbHMBBQlvbGRQbGF5ZXIEBHJlZnMJAKIIAQUHcmVmc0tleQQJcmVmc0FycmF5AwkBCWlzRGVmaW5lZAEFBHJlZnMJALwJAgkBBXZhbHVlAQUEcmVmcwIBXwUDbmlsAwkBD2NvbnRhaW5zRWxlbWVudAIFCXJlZnNBcnJheQUJbmV3UGxheWVyCQACAQkArAICCQCsAgIJAKwCAgUJb2xkUGxheWVyAhIgYWxyZWFkeSBjb250YWlucyAFCW5ld1BsYXllcgIRIHdpdGhpbiByZWZlcnJhbHMEB25ld1JlZnMJALoJAgkAzQgCBQlyZWZzQXJyYXkFCW5ld1BsYXllcgIBXwQHbmV3T2xkcwMJAQ9jb250YWluc0VsZW1lbnQCBQZvbGRpZXMFCW9sZFBsYXllcgkBBXZhbHVlAQUEb2xkcwkAugkCCQDNCAIFBm9sZGllcwUJb2xkUGxheWVyAgFfCQCUCgIJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCBQhyZWZCeUtleQUJb2xkUGxheWVyCQDMCAIJAQtTdHJpbmdFbnRyeQIFB3JlZnNLZXkFB25ld1JlZnMJAMwIAgkBC1N0cmluZ0VudHJ5AgUHb2xkc0tleQUHbmV3T2xkcwUDbmlsBQ1wcm9sb2dBY3Rpb25zAAABaQEQZGlzdHJpYnV0ZVBvaW50cwUIc3RyZW5ndGgIYWNjdXJhY3kJaW50ZWxsZWN0CWVuZHVyYW5jZQlkZXh0ZXJpdHkEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAt2aXJ0V2xnRGF0YQkBCWFzQW55TGlzdAEJAPwHBAULd2xnQ29udHJhY3QCEmNoZWNrV2xnWHBSRUFET05MWQkAzAgCBQRhZGRyBQNuaWwFA25pbAQNdmlydFdsZ1BvaW50cwkBBWFzSW50AQkAkQMCBQt2aXJ0V2xnRGF0YQABBA0kdDA5MTc5NjkyMTg2AwkAZwIAAAUNdmlydFdsZ1BvaW50cwkAlAoCAAAFA25pbAQHZGVsdGFYUAkBBWFzSW50AQkA/AcEBQt3bGdDb250cmFjdAIJdGFrZVdsZ1hwCQDMCAIFBGFkZHIFA25pbAUDbmlsAwkAAAIFB2RlbHRhWFAFB2RlbHRhWFAJAJQKAgUNdmlydFdsZ1BvaW50cwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDGtleVVzZXJMZXZlbAEFBGFkZHIJAQVhc0ludAEJAJEDAgULdmlydFdsZ0RhdGEAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBCWtleVVzZXJYUAEFBGFkZHIJAQVhc0ludAEJAJEDAgULdmlydFdsZ0RhdGEAAgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBAl3bGdQb2ludHMIBQ0kdDA5MTc5NjkyMTg2Al8xBAp3bGdBY3Rpb25zCAUNJHQwOTE3OTY5MjE4NgJfMgQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBApmcmVlS2V5QWNjCQERa2V5VXNlckZyZWVQb2ludHMBBQRhZGRyBA1mcmVlUG9pbnRzQWNjCQBkAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQpmcmVlS2V5QWNjAAAFCXdsZ1BvaW50cwQLZnJlZUtleUR1Y2sJARFrZXlEdWNrRnJlZVBvaW50cwEFC2R1Y2tBc3NldElkBA5mcmVlUG9pbnRzRHVjawkBC3ZhbHVlT3JFbHNlAgkAnwgBBQtmcmVlS2V5RHVjawAABAdzdW1GcmVlCQBkAgUNZnJlZVBvaW50c0FjYwUOZnJlZVBvaW50c0R1Y2sED3N1bVRvRGlzdHJpYnV0ZQkAZAIJAGQCCQBkAgkAZAIFCHN0cmVuZ3RoBQhhY2N1cmFjeQUJaW50ZWxsZWN0BQllbmR1cmFuY2UFCWRleHRlcml0eQMJAGYCBQ9zdW1Ub0Rpc3RyaWJ1dGUFB3N1bUZyZWUJAAIBCQCsAgIJAKwCAgIPVGhlcmUgYXJlIG9ubHkgCQCkAwEFB3N1bUZyZWUCGiBmcmVlIHBvaW50cyB0byBkaXN0cmlidXRlBAhjaGFyc0tleQkBDGtleUR1Y2tDaGFycwEFC2R1Y2tBc3NldElkBAVjaGFycwkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEFCGNoYXJzS2V5AgkwXzBfMF8wXzACAV8EBm5ld0FjYwkAZQIFDWZyZWVQb2ludHNBY2MFD3N1bVRvRGlzdHJpYnV0ZQkAlAoCCQDOCAIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUKZnJlZUtleUFjYwMJAGYCAAAFBm5ld0FjYwAABQZuZXdBY2MJAMwIAgkBDEludGVnZXJFbnRyeQIFC2ZyZWVLZXlEdWNrAwkAZgIAAAUGbmV3QWNjCQBkAgUOZnJlZVBvaW50c0R1Y2sFBm5ld0FjYwUOZnJlZVBvaW50c0R1Y2sJAMwIAgkBC1N0cmluZ0VudHJ5AgUIY2hhcnNLZXkJALkJAgkAzAgCCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDGNoYXJTdHJlbmd0aAUIc3RyZW5ndGgJAMwIAgkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQxjaGFyQWNjdXJhY3kFCGFjY3VyYWN5CQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckludGVsbGVjdAUJaW50ZWxsZWN0CQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckVuZHVyYW5jZQUJZW5kdXJhbmNlCQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckRleHRlcml0eQUJZGV4dGVyaXR5BQNuaWwCAV8FA25pbAUNcHJvbG9nQWN0aW9ucwUKd2xnQWN0aW9ucwAAAWkBHHNwbGl0QnlHbG9iYWxXZWlnaHRzUkVBRE9OTFkBBmFtb3VudAkAlAoCBQNuaWwJARJnZXROZWVkZWRNYXRlcmlhbHMBBQZhbW91bnQBaQEkc3BsaXRCeUdsb2JhbEFuZExvY2FsV2VpZ2h0c1JFQURPTkxZAwltYXRBbW91bnQJcmVzQW1vdW50CHRlcnJhaW5zBA10ZXJyYWluQ291bnRzCQENY291bnRUZXJyYWlucwEFCHRlcnJhaW5zCQCUCgIFA25pbAkAlAoCCQESZ2V0TmVlZGVkTWF0ZXJpYWxzAQUJbWF0QW1vdW50CQETZGlzdHJpYnV0ZUJ5V2VpZ2h0cwIFCXJlc0Ftb3VudAUNdGVycmFpbkNvdW50cwFpARNnZXRCYWNrcGFja1JFQURPTkxZAQtkdWNrQXNzZXRJZAkAlAoCBQNuaWwJALkJAgkBC2dldEJhY2twYWNrAQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQCAToBaQEUZ2V0V2FyZWhvdXNlUkVBRE9OTFkBC2xhbmRBc3NldElkBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAlsYW5kSW5kZXgJAGkCCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwULcmVjTGFuZFNpemUFBVNTSVpFBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAkAlAoCBQNuaWwJALoJAgkBDGdldFdhcmVob3VzZQMJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAUJbGFuZEluZGV4BQppbmZyYUxldmVsAgE6AWkBCnNhdmVMYXN0VHgAAwkBASEBCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQt3bGdDb250cmFjdAkAzAgCBQ9lY29ub215Q29udHJhY3QJAMwIAgUSdG91cm5hbWVudENvbnRyYWN0CQDMCAIFDWFjcmVzQ29udHJhY3QFA25pbAgFAWkGY2FsbGVyCQACAQINQWNjZXNzIGRlbmllZAkAlAoCCQEGcHJvbG9nAQUBaQAqAWkBD3VwZGF0ZUR1Y2tTdGF0cwILZHVja0Fzc2V0SWQHZGVsdGFYUAMJAQIhPQIIBQFpBmNhbGxlcgUPZWNvbm9teUNvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQFB2RlbHRhWFABaQEOdXBkYXRlQWNjU3RhdHMCBGFkZHIHZGVsdGFYUAMJAQEhAQkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgULd2xnQ29udHJhY3QJAMwIAgUPZWNvbm9teUNvbnRyYWN0CQDMCAIFDWFjcmVzQ29udHJhY3QFA25pbAgFAWkGY2FsbGVyCQACAQINQWNjZXNzIGRlbmllZAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCBQRhZGRyBQdkZWx0YVhQAWkBCWVxdWlwRHVjawEJZXF1aXBtZW50BA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBD2NoZWNrVG91cm5hbWVudAEFC2R1Y2tBc3NldElkCQACAQIZZXF1aXBEdWNrX2NoZWNrVG91cm5hbWVudAQFZXFLZXkJARBrZXlEdWNrRXF1aXBtZW50AQULZHVja0Fzc2V0SWQEC2N1cnJlbnRTZWdzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUFZXFLZXkCFyw7LF8sOyxfLDssXyw7LF8sOyxfLDssAgFfBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQFbmV3RXEJALUJAgUJZXF1aXBtZW50AgFfAwkBAiE9AgkAkAMBBQVuZXdFcQULTlVNU0VHTUVOVFMJAAIBAhZXcm9uZyBlcXVpcG1lbnQgc3RyaW5nBAl0ZW1wUHJvZEIJAQZkcmVzc0IEBQtjdXJyZW50U2VncwkBDnByb2RTdHJUb0J5dGVzAQkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBgUDbmlsBAhzZWdCcEF1eAkAkQMCCQC1CQIJAJEDAgUFbmV3RXEFC3NlZ0JhY2twYWNrAgE7AAEECmJ1ZmZFZmZlY3QDCQAAAgUIc2VnQnBBdXgCAAAABARhdXgwCQCRAwIJALUJAgUIc2VnQnBBdXgCASwAAAMJAAACBQRhdXgwAgAAAAQGaWR4Q250CQC1CQIFBGF1eDACAToEA2lkeAkAkQMCBQZpZHhDbnQAAAQDY250CQCRAwIFBmlkeENudAABAwMDAwMJAAACBQNpZHgCAjA2BgkAAAIFA2lkeAICMDcGCQAAAgUDaWR4AgIwOAkBAiE9AgUDY250AgAHCQBmAgkBDXBhcnNlSW50VmFsdWUBBQNjbnQAAAcJAQ1wYXJzZUludFZhbHVlAQkAkQMCCQC1CQIJAJEDAgUQcHJvZHVjdGlvbk1hdHJpeAkBDXBhcnNlSW50VmFsdWUBBQNpZHgCAV8FCnJJZHhFZmZlY3QAAAQFc3RhdHMJAQxnZXREdWNrU3RhdHMEBQR0aGlzBQtkdWNrQXNzZXRJZAUKYnVmZkVmZmVjdAYECG5ld1Byb2RCCQEGZHJlc3NCBAUFbmV3RXEFCXRlbXBQcm9kQgcFBXN0YXRzBApuZXdQcm9kU3RyCQEOYnl0ZXNUb1Byb2RTdHIBBQhuZXdQcm9kQgkAlAoCCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFZXFLZXkFCWVxdWlwbWVudAkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAugkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQJAMwIAgUKbmV3UHJvZFN0cgUDbmlsAgE6CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxrZXlEdWNrQnVmZnMBBQtkdWNrQXNzZXRJZAkAuQkCCQDMCAIJAKQDAQkAkQMCBQVzdGF0cwAHCQDMCAIJAKQDAQkAkQMCBQVzdGF0cwAICQDMCAIJAKQDAQkAkQMCBQVzdGF0cwAJCQDMCAIJAKQDAQkAkQMCBQVzdGF0cwAKCQDMCAIJAKQDAQkAkQMCBQVzdGF0cwALBQNuaWwCAV8FA25pbAUNcHJvbG9nQWN0aW9ucwAAAWkBD2ZvcnRpZmljYXRlTGFuZAILbGFuZEFzc2V0SWQEcGxhbgQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEC2R1Y2tBc3NldElkCQELdmFsdWVPckVsc2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICAAQJZHVja1N0YXRzCQEMZ2V0RHVja1N0YXRzBAUEdGhpcwULZHVja0Fzc2V0SWQAAAcEB2ZvcnRLZXkJARdrZXlGb3J0aWZpY2F0aW9uc0J5TGFuZAEFC2xhbmRBc3NldElkBAxjdXJyZW50Rm9ydHMJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQdmb3J0S2V5Agw6MF8xNTowXzE4OjACAV8EBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQECWxhbmRJbmRleAkAaQIJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfBQtyZWNMYW5kU2l6ZQUFU1NJWkUECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAV3aEtleQkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkBAJ3aAkBDGdldFdhcmVob3VzZQMFBXdoS2V5BQlsYW5kSW5kZXgFCmluZnJhTGV2ZWwEB2N1ckxvZnQJALUJAgkAkQMCBQJ3aAUJd2hJZHhMT0ZUAgFfBARjdXJPCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHY3VyTG9mdAULdm9sT2NjdXBpZWQEBGN1ckYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdjdXJMb2Z0BQd2b2xGcmVlBAhuZXdGb3J0cwkAtQkCBQRwbGFuAgFfBA0kdDA5ODk0Nzk5MDYyCQEFZm9ydEIGBQxjdXJyZW50Rm9ydHMJAQ5wcm9kU3RyVG9CeXRlcwEJAJEDAgUCd2gFCXdoSWR4UHJvZAUEY3VyTwUEY3VyRgYFA25pbAQJdGVtcFByb2RCCAUNJHQwOTg5NDc5OTA2MgJfMQQFdGVtcE8IBQ0kdDA5ODk0Nzk5MDYyAl8yBAV0ZW1wRggFDSR0MDk4OTQ3OTkwNjICXzMEDSR0MDk5MDY1OTkxNjEJAQVmb3J0QgYFCG5ld0ZvcnRzBQl0ZW1wUHJvZEIFBXRlbXBPBQV0ZW1wRgcFCWR1Y2tTdGF0cwQIbmV3UHJvZEIIBQ0kdDA5OTA2NTk5MTYxAl8xBARuZXdPCAUNJHQwOTkwNjU5OTE2MQJfMgQEbmV3RggFDSR0MDk5MDY1OTkxNjECXzMECm5ld1Byb2RTdHIJAQ5ieXRlc1RvUHJvZFN0cgEFCG5ld1Byb2RCBApuZXdMb2Z0U3RyCQC5CQIJAMwIAgkAkQMCBQdjdXJMb2Z0BQl2b2xMb2NrZWQJAMwIAgkApAMBBQRuZXdPCQDMCAIJAKQDAQUEbmV3RgkAzAgCCQCRAwIFB2N1ckxvZnQFCHZvbFRvdGFsBQNuaWwCAV8JAJQKAgkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIFB2ZvcnRLZXkFBHBsYW4JAMwIAgkBC1N0cmluZ0VudHJ5AgUFd2hLZXkJALoJAgkAzAgCCQCRAwIFAndoBQt3aElkeExldmVscwkAzAgCCQCRAwIFAndoBQh3aElkeFJlcwkAzAgCCQCRAwIFAndoBQh3aElkeE1hdAkAzAgCBQpuZXdQcm9kU3RyCQDMCAIFCm5ld0xvZnRTdHIFA25pbAIBOgUDbmlsBQ1wcm9sb2dBY3Rpb25zAAABaQETaW5pdER1Y2tUb3VyQXR0ZW1wdAELZHVja0Fzc2V0SWQDCQECIT0CCAUBaQZjYWxsZXIFEnRvdXJuYW1lbnRDb250cmFjdAkAAgECDUFjY2VzcyBkZW5pZWQECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAQFbWF4SFAJAQltYXhIZWFsdGgBCQELdmFsdWVPckVsc2UCCQCfCAEJAQxrZXlEdWNrTGV2ZWwBBQtkdWNrQXNzZXRJZAAABAljdXJIZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoBQVtYXhIUAQJY3VyTG9jS2V5CQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQEC2N1ckxvY2F0aW9uCQELdmFsdWVPckVsc2UCCQCiCAEFCWN1ckxvY0tleQUPREVGQVVMVExPQ0FUSU9OBAZsYXN0SWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUSdG91cm5hbWVudENvbnRyYWN0BQ1sYXN0VG91cklkS2V5AAAEDHRvdXJMb2NhdGlvbgkArAICCQCkAwEFBmxhc3RJZAIEX1RfMAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOa2V5U2F2ZWRIZWFsdGgBBQtkdWNrQXNzZXRJZAUJY3VySGVhbHRoCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgFBW1heEhQCQDMCAIJAQtTdHJpbmdFbnRyeQIJARBrZXlTYXZlZExvY2F0aW9uAQULZHVja0Fzc2V0SWQFC2N1ckxvY2F0aW9uCQDMCAIJAQtTdHJpbmdFbnRyeQIFCWN1ckxvY0tleQUMdG91ckxvY2F0aW9uBQNuaWwFDHRvdXJMb2NhdGlvbgFpAQxicmVha0F0dGVtcHQABA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQJY3VyTG9jS2V5CQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQEC2N1ckxvY2F0aW9uCQELdmFsdWVPckVsc2UCCQCiCAEFCWN1ckxvY0tleQUPREVGQVVMVExPQ0FUSU9OAwkBAiE9AgkAkQMCCQC1CQIFC2N1ckxvY2F0aW9uAgFfBQpsb2NJZHhUeXBlAgFUCQACAQIiWW91ciBkdWNrIGlzIG5vdCBpbiB0aGUgdG91cm5hbWVudAQLc2F2ZWRIZWFsdGgJARFAZXh0ck5hdGl2ZSgxMDU1KQEJAQ5rZXlTYXZlZEhlYWx0aAEFC2R1Y2tBc3NldElkBA1zYXZlZExvY2F0aW9uCQERQGV4dHJOYXRpdmUoMTA1OCkBCQEQa2V5U2F2ZWRMb2NhdGlvbgEFC2R1Y2tBc3NldElkCQCUCgIJAM0IAgkAzQgCBQ1wcm9sb2dBY3Rpb25zCQEMSW50ZWdlckVudHJ5AgkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAULc2F2ZWRIZWFsdGgJAQtTdHJpbmdFbnRyeQIFCWN1ckxvY0tleQUNc2F2ZWRMb2NhdGlvbgULY3VyTG9jYXRpb24BaQEUYnJlYWtBdHRlbXB0Q2FsbGJhY2sAAwkBAiE9AggFAWkGY2FsbGVyBRJ0b3VybmFtZW50Q29udHJhY3QJAAIBAg1BY2Nlc3MgZGVuaWVkBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQJARFAZXh0ck5hdGl2ZSgxMDU1KQEJAQ5rZXlTYXZlZEhlYWx0aAEFC2R1Y2tBc3NldElkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAkBEUBleHRyTmF0aXZlKDEwNTgpAQkBEGtleVNhdmVkTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUDbmlsAhRicmVha0F0dGVtcHRDYWxsYmFjawFpARZleGl0VG91cm5hbWVudEludGVybmFsAQtkdWNrQXNzZXRJZAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECDUFjY2VzcyBkZW5pZWQEC3NhdmVkSGVhbHRoCQERQGV4dHJOYXRpdmUoMTA1NSkBCQEOa2V5U2F2ZWRIZWFsdGgBBQtkdWNrQXNzZXRJZAQNc2F2ZWRMb2NhdGlvbgkBEUBleHRyTmF0aXZlKDEwNTgpAQkBEGtleVNhdmVkTG9jYXRpb24BBQtkdWNrQXNzZXRJZAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBQtzYXZlZEhlYWx0aAkAzAgCCQELU3RyaW5nRW50cnkCCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFDXNhdmVkTG9jYXRpb24FA25pbAcBaQEPcHJvY2Vzc0RlbGl2ZXJ5AQtkdWNrQXNzZXRJZAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECDUFjY2VzcyBkZW5pZWQEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAlmdW5kVG90YWwJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPZWNvbm9teUNvbnRyYWN0BQ9kZWxpdmVyeUZ1bmRLZXkAAAMJAGYCBRVNSU5fVVNEVF9GRUVfREVMSVZFUlkFCWZ1bmRUb3RhbAkAAgEJAKwCAgIgRGVsaXZlcnkgaXMgbm90IGF2YWlsYWJsZSwgZnVuZD0JAQpmaXhlZFBvaW50AgUJZnVuZFRvdGFsAAYEA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAECGNvdW50S2V5CQEUa2V5VXNlckRlbGl2ZXJ5Q291bnQBBQRhZGRyBAVjb3VudAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQhjb3VudEtleQAABAdsYXN0RGF5CQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlVc2VyTGFzdERlbGl2ZXJ5RGF5AQUEYWRkcgAABAV0b2RheQkAaQIFA25vdwUJREFZTUlMTElTBAVhY3JlcwkBC3ZhbHVlT3JFbHNlAgkAmggCBQ1hY3Jlc0NvbnRyYWN0CQEaa2V5QWNyZXNTdGFrZWRBbW91bnRCeVVzZXIBBQRhZGRyAAAEEWFsbG93ZWREZWxpdmVyaWVzCQBkAgUXQUxMT1dFRF9GUkVFX0RFTElWRVJJRVMJAGkCBQVhY3JlcwUaQUNSRVNfRk9SX0RFTElWRVJZX0FUVEVNUFQDAwkAZwIFBWNvdW50BRFhbGxvd2VkRGVsaXZlcmllcwkAAAIFB2xhc3REYXkFBXRvZGF5BwkAAgEJAKwCAgkArAICAhFZb3UgYWxyZWFkeSB1c2VkIAkApAMBBRFhbGxvd2VkRGVsaXZlcmllcwIcIGRlbGl2ZXJ5IGF0dGVtcHRzIGZvciB0b2RheQQOZ2xvYmFsQ291bnRLZXkJARRrZXlEdWNrRGVsaXZlcnlDb3VudAEFC2R1Y2tBc3NldElkBAZyZXdhcmQJAPwHBAUPZWNvbm9teUNvbnRyYWN0AhJzZW5kRGVsaXZlcnlSZXdhcmQJAMwIAgUEYWRkcgUDbmlsBQNuaWwJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUIY291bnRLZXkJAGQCBQVjb3VudAABCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5VXNlckxhc3REZWxpdmVyeURheQEFBGFkZHIFBXRvZGF5CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ5nbG9iYWxDb3VudEtleQkAZAIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUOZ2xvYmFsQ291bnRLZXkAAAABBQNuaWwFBnJld2FyZAFpAQ5wcmVwYXJlUm9iYmVyeQIHbWVzc2FnZQNzaWcEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBASEBCQDEEwMFB21lc3NhZ2UFA3NpZwUDcHViCQACAQIYc2lnbmF0dXJlIGRvZXMgbm90IG1hdGNoAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEBndsZ0FtdAgFA3BtdAZhbW91bnQDAwkBASEBCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBgkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkBQp3bGdBc3NldElkCQACAQIVV0xHT0xEIHBheW1lbnRzIG9ubHkhBAVwYXJ0cwkAtQkCCQCwCQEFB21lc3NhZ2UCAXwDCQBmAgACCQCQAwEFBXBhcnRzCQACAQIUV3JvbmcgbWVzc2FnZSBmb3JtYXQECXR4RnJvbU1zZwMJAGcCCQCQAwEFBXBhcnRzAAIJAJEDAgUFcGFydHMAAgIABAh1c2VyQWRkcgkApQgBCAUBaQZjYWxsZXIEBmxhc3RUeAkBC3ZhbHVlT3JFbHNlAgkAoggBCQERa2V5TGFzdFR4SWRCeVVzZXIBBQh1c2VyQWRkcgIAAwkBAiE9AgUGbGFzdFR4BQl0eEZyb21Nc2cJAAIBCQCsAgIJAKwCAgkArAICAh5UeCBpZHMgZG9uJ3QgbWF0Y2ghIEluIHN0YXRlOiAFBmxhc3RUeAIKLCBpbiBtc2c6IAUJdHhGcm9tTXNnBAtkdWNrQXNzZXRJZAkAkQMCBQVwYXJ0cwAAAwkBD2NoZWNrVG91cm5hbWVudAEFC2R1Y2tBc3NldElkCQACAQIecHJlcGFyZVJvYmJlcnlfY2hlY2tUb3VybmFtZW50BAdyb2JDb3N0CAkBDmdldFJvYmJlcnlEYXRhAgUEdGhpcwULZHVja0Fzc2V0SWQCXzEDCQBmAgUHcm9iQ29zdAUGd2xnQW10CQACAQkArAICCQCsAgIJAKwCAgIIUGF5bWVudCAJAKQDAQUGd2xnQW10AgwgPCByZXF1aXJlZCAJAKQDAQUHcm9iQ29zdAQKY2FuZGlkYXRlcwkAtQkCCQCRAwIFBXBhcnRzAAECAV8EA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAECWR1Y2tTdGF0ZQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQETa2V5RHVja1JvYmJlcnlTdGF0ZQEFC2R1Y2tBc3NldElkAAAECmxvY2tlZExhbmQJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBE2tleUxvY2tlZExhbmRCeUR1Y2sBBQtkdWNrQXNzZXRJZAIABAdsYW5kRVRBCQELdmFsdWVPckVsc2UCCQCfCAEJARJrZXlMYW5kQ29vbGRvd25FVEEBBQpsb2NrZWRMYW5kAAADAwkBAiE9AgUJZHVja1N0YXRlBQtkdWNrSWR4RnJlZQkAZgIFB2xhbmRFVEEFA25vdwcJAAIBCQCsAgICJ1lvdSBhbHJlYWR5IHN0YXJ0ZWQgcm9iYmluZywgd2FpdCB0aWxsIAkApAMBBQdsYW5kRVRBCgEHY2hlY2tlcgIDYWNjC2xhbmRBc3NldElkBAVzdGF0ZQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQETa2V5TGFuZFJvYmJlcnlTdGF0ZQEFC2xhbmRBc3NldElkAAAEC2Nvb2xkb3duRVRBCQELdmFsdWVPckVsc2UCCQCfCAEJARJrZXlMYW5kQ29vbGRvd25FVEEBBQtsYW5kQXNzZXRJZAAAAwkAZgIFBXN0YXRlCQCQAwEFEGxhbmRSb2JDb29sZG93bnMJAAIBAg1JbnZhbGlkIHN0YXRlAwkAZgIFA25vdwULY29vbGRvd25FVEEECnN0YWtlZFRpbWUJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAAAwkAZwIAAAUKc3Rha2VkVGltZQUDYWNjBAFhCQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQEAWQJALUJAggFAWELZGVzY3JpcHRpb24CAV8EBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAgUBZAULcmVjTGFuZFNpemUEDHByb2R1Y3Rpdml0eQkBDGFwcGx5Qm9udXNlcwIFC2xhbmRBc3NldElkBQZwaWVjZXMECWRlbHRhVGltZQkAZQIFA25vdwUKc3Rha2VkVGltZQQIYXZhaWxSZXMJAGsDBQlkZWx0YVRpbWUJAGgCBQxwcm9kdWN0aXZpdHkFBnBpZWNlcwUJREFZTUlMTElTAwkAZgIFDk1JTl9SRVNfVE9fUk9CBQhhdmFpbFJlcwUDYWNjCQDNCAIFA2FjYwULbGFuZEFzc2V0SWQFA2FjYwQIZmlsdGVyZWQKAAIkbAUKY2FuZGlkYXRlcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEHY2hlY2tlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgMJAAACCQCQAwEFCGZpbHRlcmVkAAAJAAIBAhlObyBjYW5kaWRhdGVzIGZvciByb2JiZXJ5BAZybmRJZHgJAQ9nZXRSYW5kb21OdW1iZXIDCQCQAwEFCGZpbHRlcmVkBQdtZXNzYWdlBQNzaWcEC2xhbmRBc3NldElkCQCRAwIFCGZpbHRlcmVkBQZybmRJZHgJAJQKAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQETa2V5TGFuZFJvYmJlcnlTdGF0ZQEFC2xhbmRBc3NldElkBQxyb2JJZHhMb2NrZWQJAMwIAgkBDEludGVnZXJFbnRyeQIJARJrZXlMYW5kQ29vbGRvd25FVEEBBQtsYW5kQXNzZXRJZAkAZAIFA25vdwkAkQMCBRBsYW5kUm9iQ29vbGRvd25zBQxyb2JJZHhMb2NrZWQJAMwIAgkBDEludGVnZXJFbnRyeQIJARNrZXlEdWNrUm9iYmVyeVN0YXRlAQULZHVja0Fzc2V0SWQFEGR1Y2tJZHhQcmVwYXJpbmcJAMwIAgkBC1N0cmluZ0VudHJ5AgkBE2tleUxvY2tlZExhbmRCeUR1Y2sBBQtkdWNrQXNzZXRJZAULbGFuZEFzc2V0SWQFA25pbAUNcHJvbG9nQWN0aW9ucwULbGFuZEFzc2V0SWQBaQEHcm9iTGFuZAIHbWVzc2FnZQNzaWcEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBASEBCQDEEwMFB21lc3NhZ2UFA3NpZwUDcHViCQACAQIYc2lnbmF0dXJlIGRvZXMgbm90IG1hdGNoBAh1c2VyQWRkcgkApQgBCAUBaQZjYWxsZXIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUIdXNlckFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAJQKAgkAzQgCBQ1wcm9sb2dBY3Rpb25zCQEMSW50ZWdlckVudHJ5AgkBGGtleUxhc3RSb2JiZXJ5VGltZUJ5RHVjawEFC2R1Y2tBc3NldElkBQNub3cAAAFpAQtidXlSb2JvRHVjawADCQEBIQEFE0tTX0FMTE9XX1JPQk9fRFVDS1MJAAIBAhVGZWF0dXJlIGlzIHR1cm5lZCBvZmYEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQIaQWxsb3dlZCBVU0RUIHBheW1lbnQgb25seSEDCQECIT0CCAUDcG10BmFtb3VudAUOUk9CT19EVUNLX1VTRFQJAAIBCQCsAgIJAKwCAgIbUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgCQEKZml4ZWRQb2ludAIFDlJPQk9fRFVDS19VU0RUAAYCBSBVU0RUBAduZXh0TnVtCQELdmFsdWVPckVsc2UCCQCfCAEJAQ9rZXlOZXh0Um9ib0R1Y2sAAAAEBWJ5dGV6CQCaAwEFB25leHROdW0EBG5hbWUJAKwCAgkArAICBQtST0JPX1BSRUZJWAIBLQkAsgICCQDcBAEFBWJ5dGV6AAgEBWNvbG9yCQCyAgIJANwEAQkA1BYBBQVieXRlegAGBAVpc3N1ZQkAwggFBQRuYW1lCQCsAgICN1JvYm8gRHVjayBORlQgZm9yIFdhdmVzTGFuZHMgZ2FtZSwgYmFja2dyb3VuZCBjb2xvciA9ICMFBWNvbG9yAAEAAAcEB2Fzc2V0SWQJALgIAQUFaXNzdWUJAJQKAgkAzQgCCQDNCAIJAM0IAgkAzQgCBQ1wcm9sb2dBY3Rpb25zCQEMSW50ZWdlckVudHJ5AgkBD2tleU5leHRSb2JvRHVjawAJAGQCBQduZXh0TnVtAAEFBWlzc3VlCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQxvcmlnaW5DYWxsZXIAAQUHYXNzZXRJZAkBDlNjcmlwdFRyYW5zZmVyAwUPZWNvbm9teUNvbnRyYWN0CAUDcG10BmFtb3VudAULdXNkdEFzc2V0SWQJAJQKAgkA2AQBBQdhc3NldElkBQVjb2xvcgDtH6h1", "height": 2856531, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: AvcsySzhYmHuF2C9zKs3pA79hSTp6TY4GpQPiGXMvuSb Next: 84hSJSUsFz5TzRshvvc4PKzqAEdMikmAA7cXovQQBH7i Diff:
Old | New | Differences | |
---|---|---|---|
107 | 107 | func T (B) = ("lockedLandByDuck_" + B) | |
108 | 108 | ||
109 | 109 | ||
110 | - | func U (c) = ("userDeliveryCount_" + c) | |
111 | - | ||
112 | - | ||
113 | - | func V (c) = ("userLastDeliveryDay_" + c) | |
114 | - | ||
115 | - | ||
116 | - | let W = 10000 | |
110 | + | func U (B) = ("totalDeliveryCountByDuck_" + B) | |
111 | + | ||
112 | + | ||
113 | + | func V (c) = ("userDeliveryCount_" + c) | |
114 | + | ||
115 | + | ||
116 | + | func W (c) = ("userLastDeliveryDay_" + c) | |
117 | + | ||
117 | 118 | ||
118 | 119 | let X = 10000 | |
119 | 120 | ||
120 | - | let Y = | |
121 | - | ||
122 | - | let Z = | |
123 | - | ||
124 | - | let aa = | |
125 | - | ||
126 | - | let ab = | |
127 | - | ||
128 | - | let ac = | |
129 | - | ||
130 | - | let ad = | |
121 | + | let Y = 10000 | |
122 | + | ||
123 | + | let Z = 2000 | |
124 | + | ||
125 | + | let aa = 100000 | |
126 | + | ||
127 | + | let ab = 1000000 | |
128 | + | ||
129 | + | let ac = 5000000 | |
130 | + | ||
131 | + | let ad = 10000 | |
131 | 132 | ||
132 | 133 | let ae = 1000000 | |
133 | 134 | ||
134 | - | let af = | |
135 | - | ||
136 | - | ||
137 | - | ||
138 | - | ||
139 | - | ||
140 | - | ||
141 | - | ||
142 | - | ||
143 | - | ||
144 | - | ||
145 | - | | |
146 | - | ||
147 | - | ||
148 | - | ||
149 | - | ||
150 | - | ||
151 | - | let | |
152 | - | let | |
153 | - | ( | |
154 | - | | |
155 | - | | |
156 | - | | |
157 | - | ||
158 | - | ||
159 | - | ||
160 | - | ||
161 | - | ||
162 | - | let | |
163 | - | let | |
164 | - | let | |
165 | - | let | |
166 | - | let | |
167 | - | | |
168 | - | | |
169 | - | ||
170 | - | ||
171 | - | ||
172 | - | ||
173 | - | let aF = " | |
174 | - | ||
175 | - | let aG = " | |
176 | - | ||
177 | - | let aH = " | |
178 | - | ||
179 | - | let aI = | |
180 | - | ||
181 | - | let aJ = | |
182 | - | ||
183 | - | let aK = | |
184 | - | ||
185 | - | let aL = | |
186 | - | ||
187 | - | let aM = | |
188 | - | ||
189 | - | let aN = | |
190 | - | ||
191 | - | let aO = | |
192 | - | ||
193 | - | let aP = | |
194 | - | ||
195 | - | let aQ = | |
196 | - | ||
197 | - | let aR = | |
198 | - | ||
199 | - | let aS = | |
200 | - | ||
201 | - | let aT = [" | |
202 | - | ||
203 | - | let aU = | |
204 | - | ||
205 | - | let aV = | |
206 | - | ||
207 | - | let aW = [ | |
208 | - | ||
209 | - | let aX = 6 | |
210 | - | ||
211 | - | let aY = | |
212 | - | ||
213 | - | let aZ = | |
214 | - | ||
215 | - | let ba = | |
135 | + | let af = 1000000 | |
136 | + | ||
137 | + | let ag = 10000 | |
138 | + | ||
139 | + | func ah (ai) = fraction(f, pow(ai, 4, g, 4, 4, DOWN), e) | |
140 | + | ||
141 | + | ||
142 | + | func aj (ak) = (100 + ak) | |
143 | + | ||
144 | + | ||
145 | + | func al (am,an) = { | |
146 | + | let ao = ah(an) | |
147 | + | [ao, (h * (ao - am))] | |
148 | + | } | |
149 | + | ||
150 | + | ||
151 | + | func ap (aq,B,ar,as) = { | |
152 | + | let at = split(valueOrElse(getString(aq, C(B)), "0_0_0_0_0"), "_") | |
153 | + | let au = valueOrElse(getInteger(aq, E(B)), 0) | |
154 | + | let av = valueOrElse(getInteger(aq, A(B)), aj(au)) | |
155 | + | let aw = split(valueOrElse(getString(aq, M(B)), "0_0_0_0_0"), "_") | |
156 | + | ([parseIntValue(at[l]), parseIntValue(at[m]), parseIntValue(at[n]), parseIntValue(at[o]), parseIntValue(at[p]), au, av] ++ (if (as) | |
157 | + | then [ar, ar, ar, ar, ar] | |
158 | + | else [parseIntValue(aw[l]), parseIntValue(aw[m]), parseIntValue(aw[n]), parseIntValue(aw[o]), parseIntValue(aw[p])])) | |
159 | + | } | |
160 | + | ||
161 | + | ||
162 | + | func ax (aq,B) = { | |
163 | + | let ay = valueOrElse(getInteger(aq, O(B)), 0) | |
164 | + | let az = valueOrElse(getInteger(aq, N(B)), 0) | |
165 | + | let aA = lastBlock.timestamp | |
166 | + | let aB = max([i, (ay - (j * (aA - az)))]) | |
167 | + | let aC = valueOrElse(getInteger(aq, S(B)), 0) | |
168 | + | let aD = valueOrElse(getString(aq, T(B)), "") | |
169 | + | let aE = valueOrElse(getInteger(aq, R(aD)), 0) | |
170 | + | $Tuple5(aB, az, aC, aD, aE) | |
171 | + | } | |
172 | + | ||
173 | + | ||
174 | + | let aF = "LAND" | |
175 | + | ||
176 | + | let aG = "DUCK" | |
177 | + | ||
178 | + | let aH = "ROBO" | |
179 | + | ||
180 | + | let aI = "PRESALE" | |
181 | + | ||
182 | + | let aJ = 6 | |
183 | + | ||
184 | + | let aK = 25 | |
185 | + | ||
186 | + | let aL = 3456000 | |
187 | + | ||
188 | + | let aM = 10000000000 | |
189 | + | ||
190 | + | let aN = "Africa_F_Africa" | |
191 | + | ||
192 | + | let aO = 39637 | |
193 | + | ||
194 | + | let aP = 10 | |
195 | + | ||
196 | + | let aQ = 50000 | |
197 | + | ||
198 | + | let aR = 1 | |
199 | + | ||
200 | + | let aS = 50000000 | |
201 | + | ||
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", "Boom-Dog L1", "Boom-Dog L2", "Boom-Dog L3"] | |
203 | + | ||
204 | + | let aU = ["Americas", "Europe", "Asia", "Africa", "Oceania"] | |
205 | + | ||
206 | + | let aV = 10000000 | |
207 | + | ||
208 | + | let aW = [15, 16, 17, 18, 19, 20, 21, 22, 23] | |
209 | + | ||
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_", "23_23_5_20_23_6_35_2_100_0,0,0,0,0,0,0_", "23_23_5_20_23_6_70_2_150_0,0,0,0,0,0,0_", "23_23_5_20_23_6_105_2_200_0,0,0,0,0,0,0_"] | |
211 | + | ||
212 | + | let aY = 6 | |
213 | + | ||
214 | + | let aZ = 8 | |
215 | + | ||
216 | + | let ba = 9 | |
216 | 217 | ||
217 | 218 | let bb = 10 | |
218 | 219 | ||
219 | - | let bc = 0 | |
220 | - | ||
221 | - | let bd = 1 | |
222 | - | ||
223 | - | let be = 2 | |
224 | - | ||
225 | - | let bf = 3 | |
226 | - | ||
227 | - | let bg = 4 | |
228 | - | ||
229 | - | let bh = 0 | |
230 | - | ||
231 | - | let bi = 1 | |
232 | - | ||
233 | - | let bj = 2 | |
234 | - | ||
235 | - | let bk = 3 | |
236 | - | ||
237 | - | let bl = 0 | |
238 | - | ||
239 | - | let bm = 1 | |
240 | - | ||
241 | - | let bn = 2 | |
242 | - | ||
243 | - | let bo = 3 | |
244 | - | ||
245 | - | let bp = 0 | |
246 | - | ||
247 | - | let bq = 1 | |
248 | - | ||
249 | - | let br = 2 | |
250 | - | ||
251 | - | func bs (bt) = ("no_" + bt) | |
252 | - | ||
253 | - | ||
254 | - | func bu (bt) = ("lcna_" + bt) | |
255 | - | ||
256 | - | ||
257 | - | func bv (bt) = ("st_" + bt) | |
258 | - | ||
259 | - | ||
260 | - | func bw (bx,bt) = makeString(["las", bx, bt], "_") | |
261 | - | ||
262 | - | ||
263 | - | func by (bz,bt,bA) = ((((("sttao_" + bz) + "_") + bt) + "_") + bA) | |
264 | - | ||
265 | - | ||
266 | - | func bB (Q) = ("wh_" + Q) | |
267 | - | ||
268 | - | ||
269 | - | func bC (bt) = ("infraLevel_" + bt) | |
270 | - | ||
271 | - | ||
272 | - | func bD (Q) = ("fortifications_" + Q) | |
273 | - | ||
274 | - | ||
275 | - | func bE (bt) = ("duckCustomNameByAssetId_" + bt) | |
276 | - | ||
277 | - | ||
278 | - | func bF (c) = ("accountCustomNameByAddr_" + c) | |
279 | - | ||
280 | - | ||
281 | - | func bG (c) = ("accRefBy_" + c) | |
282 | - | ||
283 | - | ||
284 | - | func bH (B) = ("onboardArtActivatedOnDuck_" + B) | |
285 | - | ||
286 | - | ||
287 | - | func bI (c) = ("onboardArtActivatedDuckBy_" + c) | |
288 | - | ||
289 | - | ||
290 | - | func bJ (c) = ("accReferrals_" + c) | |
291 | - | ||
292 | - | ||
293 | - | func bK (bt) = ("duckOwner_" + bt) | |
294 | - | ||
295 | - | ||
296 | - | func bL (bA) = ("stakedDuckByOwner_" + bA) | |
297 | - | ||
298 | - | ||
299 | - | func bM (B) = ("backPack_" + B) | |
300 | - | ||
301 | - | ||
302 | - | func bN (B) = ("duckLocation_" + B) | |
303 | - | ||
304 | - | ||
305 | - | func bO (bP) = ("%s%s__userGwlReleaseTime__" + bP) | |
306 | - | ||
307 | - | ||
308 | - | func bQ () = "emergencyWarehouseProducts" | |
309 | - | ||
310 | - | ||
311 | - | let bR = "deliveryFund" | |
312 | - | ||
313 | - | let bS = "%s__lastTourId" | |
314 | - | ||
315 | - | func bT (bU) = ("%s%d__tourStaticData__" + toString(bU)) | |
316 | - | ||
317 | - | ||
318 | - | func bV (bU) = ("%s%d__tourDynamicData__" + toString(bU)) | |
319 | - | ||
320 | - | ||
321 | - | func bW (bU,B) = makeString(["%s%d%s__bestResultByTourAndDuck", toString(bU), B], "__") | |
322 | - | ||
323 | - | ||
324 | - | let bX = 0 | |
325 | - | ||
326 | - | let bY = 1 | |
327 | - | ||
328 | - | let bZ = 6 | |
329 | - | ||
330 | - | let ca = 1 | |
331 | - | ||
332 | - | func cb (cc,bU) = { | |
333 | - | let cd = split(valueOrErrorMessage(getString(cc, bT(bU)), (("Error reading tournament " + toString(bU)) + " data")), "__") | |
334 | - | let ce = split_4C(valueOrErrorMessage(getString(cc, bV(bU)), (("Error reading tournament " + toString(bU)) + " data")), "__") | |
335 | - | [cd, ce] | |
336 | - | } | |
337 | - | ||
338 | - | ||
339 | - | func cf (cc,cg) = { | |
340 | - | let ch = valueOrElse(getInteger(cc, bS), 0) | |
341 | - | let ci = split(cg, "_") | |
342 | - | let az = lastBlock.timestamp | |
343 | - | let cj = cb(cc, ch) | |
344 | - | let cd = cj[bX] | |
345 | - | let ce = cj[bY] | |
346 | - | if (if (if ((ci[bq] == "T")) | |
347 | - | then (parseIntValue(ci[bp]) == ch) | |
220 | + | let bc = 10 | |
221 | + | ||
222 | + | let bd = 0 | |
223 | + | ||
224 | + | let be = 1 | |
225 | + | ||
226 | + | let bf = 2 | |
227 | + | ||
228 | + | let bg = 3 | |
229 | + | ||
230 | + | let bh = 4 | |
231 | + | ||
232 | + | let bi = 0 | |
233 | + | ||
234 | + | let bj = 1 | |
235 | + | ||
236 | + | let bk = 2 | |
237 | + | ||
238 | + | let bl = 3 | |
239 | + | ||
240 | + | let bm = 0 | |
241 | + | ||
242 | + | let bn = 1 | |
243 | + | ||
244 | + | let bo = 2 | |
245 | + | ||
246 | + | let bp = 3 | |
247 | + | ||
248 | + | let bq = 0 | |
249 | + | ||
250 | + | let br = 1 | |
251 | + | ||
252 | + | let bs = 2 | |
253 | + | ||
254 | + | func bt (bu) = ("no_" + bu) | |
255 | + | ||
256 | + | ||
257 | + | func bv (bu) = ("lcna_" + bu) | |
258 | + | ||
259 | + | ||
260 | + | func bw (bu) = ("st_" + bu) | |
261 | + | ||
262 | + | ||
263 | + | func bx (by,bu) = makeString(["las", by, bu], "_") | |
264 | + | ||
265 | + | ||
266 | + | func bz (bA,bu,bB) = ((((("sttao_" + bA) + "_") + bu) + "_") + bB) | |
267 | + | ||
268 | + | ||
269 | + | func bC (Q) = ("wh_" + Q) | |
270 | + | ||
271 | + | ||
272 | + | func bD (bu) = ("infraLevel_" + bu) | |
273 | + | ||
274 | + | ||
275 | + | func bE (Q) = ("fortifications_" + Q) | |
276 | + | ||
277 | + | ||
278 | + | func bF (bu) = ("duckCustomNameByAssetId_" + bu) | |
279 | + | ||
280 | + | ||
281 | + | func bG (c) = ("accountCustomNameByAddr_" + c) | |
282 | + | ||
283 | + | ||
284 | + | func bH (c) = ("accRefBy_" + c) | |
285 | + | ||
286 | + | ||
287 | + | func bI (B) = ("onboardArtActivatedOnDuck_" + B) | |
288 | + | ||
289 | + | ||
290 | + | func bJ (c) = ("onboardArtActivatedDuckBy_" + c) | |
291 | + | ||
292 | + | ||
293 | + | func bK (c) = ("accReferrals_" + c) | |
294 | + | ||
295 | + | ||
296 | + | func bL (bu) = ("duckOwner_" + bu) | |
297 | + | ||
298 | + | ||
299 | + | func bM (bB) = ("stakedDuckByOwner_" + bB) | |
300 | + | ||
301 | + | ||
302 | + | func bN (B) = ("backPack_" + B) | |
303 | + | ||
304 | + | ||
305 | + | func bO (B) = ("duckLocation_" + B) | |
306 | + | ||
307 | + | ||
308 | + | func bP (bQ) = ("%s%s__userGwlReleaseTime__" + bQ) | |
309 | + | ||
310 | + | ||
311 | + | func bR () = "emergencyWarehouseProducts" | |
312 | + | ||
313 | + | ||
314 | + | let bS = "deliveryFund" | |
315 | + | ||
316 | + | let bT = "%s__lastTourId" | |
317 | + | ||
318 | + | func bU (bV) = ("%s%d__tourStaticData__" + toString(bV)) | |
319 | + | ||
320 | + | ||
321 | + | func bW (bV) = ("%s%d__tourDynamicData__" + toString(bV)) | |
322 | + | ||
323 | + | ||
324 | + | func bX (bV,B) = makeString(["%s%d%s__bestResultByTourAndDuck", toString(bV), B], "__") | |
325 | + | ||
326 | + | ||
327 | + | let bY = 0 | |
328 | + | ||
329 | + | let bZ = 1 | |
330 | + | ||
331 | + | let ca = 6 | |
332 | + | ||
333 | + | let cb = 1 | |
334 | + | ||
335 | + | func cc (cd,bV) = { | |
336 | + | let ce = split(valueOrErrorMessage(getString(cd, bU(bV)), (("Error reading tournament " + toString(bV)) + " data")), "__") | |
337 | + | let cf = split_4C(valueOrErrorMessage(getString(cd, bW(bV)), (("Error reading tournament " + toString(bV)) + " data")), "__") | |
338 | + | [ce, cf] | |
339 | + | } | |
340 | + | ||
341 | + | ||
342 | + | func cg (cd,ch) = { | |
343 | + | let ci = valueOrElse(getInteger(cd, bT), 0) | |
344 | + | let cj = split(ch, "_") | |
345 | + | let aA = lastBlock.timestamp | |
346 | + | let ck = cc(cd, ci) | |
347 | + | let ce = ck[bY] | |
348 | + | let cf = ck[bZ] | |
349 | + | if (if (if ((cj[br] == "T")) | |
350 | + | then (parseIntValue(cj[bq]) == ci) | |
348 | 351 | else false) | |
349 | - | then ( | |
352 | + | then (cf[cb] == "INPROGRESS") | |
350 | 353 | else false) | |
351 | - | then (parseIntValue( | |
354 | + | then (parseIntValue(ce[ca]) > aA) | |
352 | 355 | else false | |
353 | 356 | } | |
354 | 357 | ||
355 | 358 | ||
356 | - | func | |
357 | - | let | |
358 | - | let | |
359 | - | let | |
360 | - | let | |
361 | - | let | |
362 | - | let | |
363 | - | let | |
364 | - | if (if (if (( | |
365 | - | then (parseIntValue( | |
359 | + | func cl (cd,ch) = { | |
360 | + | let ci = valueOrElse(getInteger(cd, bT), 0) | |
361 | + | let cj = split(ch, "_") | |
362 | + | let aA = lastBlock.timestamp | |
363 | + | let ck = cc(cd, ci) | |
364 | + | let ce = ck[bY] | |
365 | + | let cf = ck[bZ] | |
366 | + | let cm = cj[br] | |
367 | + | if (if (if ((cj[br] == "T")) | |
368 | + | then (parseIntValue(cj[bq]) == ci) | |
366 | 369 | else false) | |
367 | - | then ( | |
370 | + | then (cf[cb] == "INPROGRESS") | |
368 | 371 | else false) | |
369 | - | then (parseIntValue( | |
372 | + | then (parseIntValue(ce[ca]) > aA) | |
370 | 373 | else false | |
371 | 374 | } | |
372 | 375 | ||
373 | 376 | ||
374 | - | func cm (cn) = (parseIntValue(cn[aX]) * aU) | |
375 | - | ||
376 | - | ||
377 | - | func co (cp,cq,cr) = throw(((((("Cheat attempt: oldLoc=" + cp) + ", newLoc=") + cq) + ", case=") + toString(cr))) | |
378 | - | ||
379 | - | ||
380 | - | let cs = false | |
377 | + | func cn (co) = (parseIntValue(co[aY]) * aV) | |
378 | + | ||
379 | + | ||
380 | + | func cp (cq,cr,cs) = throw(((((("Cheat attempt: oldLoc=" + cq) + ", newLoc=") + cr) + ", case=") + toString(cs))) | |
381 | + | ||
381 | 382 | ||
382 | 383 | let ct = false | |
383 | 384 | ||
384 | 385 | let cu = false | |
385 | 386 | ||
386 | - | let cv = 86400000 | |
387 | - | ||
388 | - | let cw = take(drop(this.bytes, 1), 1) | |
389 | - | ||
390 | - | let cx = { | |
391 | - | let cy = cw | |
392 | - | if ((base58'2W' == cy)) | |
393 | - | then if (cs) | |
387 | + | let cv = false | |
388 | + | ||
389 | + | let cw = 86400000 | |
390 | + | ||
391 | + | let cx = take(drop(this.bytes, 1), 1) | |
392 | + | ||
393 | + | let cy = { | |
394 | + | let cz = cx | |
395 | + | if ((base58'2W' == cz)) | |
396 | + | then if (ct) | |
394 | 397 | then base58'CWsMtTZC5BjjoL4Q1ayW4Wwb1ehGACQB6DrKyPgotKfm' | |
395 | 398 | else base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD' | |
396 | - | else if ((base58'2T' == | |
399 | + | else if ((base58'2T' == cz)) | |
397 | 400 | then base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD' | |
398 | 401 | else throw("Unknown chain") | |
399 | 402 | } | |
400 | 403 | ||
401 | - | let | |
402 | - | let | |
403 | - | if ((base58'2W' == | |
404 | + | let cA = { | |
405 | + | let cz = cx | |
406 | + | if ((base58'2W' == cz)) | |
404 | 407 | then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi' | |
405 | - | else if ((base58'2T' == | |
408 | + | else if ((base58'2T' == cz)) | |
406 | 409 | then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63' | |
407 | 410 | else throw("Unknown chain") | |
408 | 411 | } | |
409 | 412 | ||
410 | - | let | |
411 | - | let | |
412 | - | if ((base58'2W' == | |
413 | + | let cB = { | |
414 | + | let cz = cx | |
415 | + | if ((base58'2W' == cz)) | |
413 | 416 | then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv" | |
414 | - | else if ((base58'2T' == | |
417 | + | else if ((base58'2T' == cz)) | |
415 | 418 | then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy" | |
416 | 419 | else throw("Unknown chain") | |
417 | 420 | } | |
418 | 421 | ||
419 | - | let | |
420 | - | let | |
421 | - | if ((base58'2W' == | |
422 | + | let cC = { | |
423 | + | let cz = cx | |
424 | + | if ((base58'2W' == cz)) | |
422 | 425 | then 10000000000 | |
423 | - | else if ((base58'2T' == | |
426 | + | else if ((base58'2T' == cz)) | |
424 | 427 | then 100000000 | |
425 | 428 | else throw("Unknown chain") | |
426 | 429 | } | |
427 | 430 | ||
428 | - | let | |
429 | - | let | |
430 | - | if ((base58'2W' == | |
431 | - | then | |
432 | - | else if ((base58'2T' == | |
431 | + | let cD = { | |
432 | + | let cz = cx | |
433 | + | if ((base58'2W' == cz)) | |
434 | + | then cw | |
435 | + | else if ((base58'2T' == cz)) | |
433 | 436 | then 60000 | |
434 | 437 | else throw("Unknown chain") | |
435 | 438 | } | |
436 | 439 | ||
437 | - | let | |
438 | - | ||
439 | - | let | |
440 | - | ||
441 | - | let | |
442 | - | ||
443 | - | let | |
444 | - | ||
445 | - | let | |
446 | - | ||
447 | - | let | |
448 | - | ||
449 | - | let | |
450 | - | ||
451 | - | let | |
452 | - | ||
453 | - | let | |
454 | - | ||
455 | - | func | |
456 | - | ||
457 | - | ||
458 | - | let | |
459 | - | ||
460 | - | let | |
461 | - | ||
462 | - | let | |
463 | - | ||
464 | - | let | |
465 | - | ||
466 | - | let | |
467 | - | ||
468 | - | let | |
469 | - | ||
470 | - | func | |
471 | - | ||
472 | - | ||
473 | - | func | |
474 | - | ||
475 | - | ||
476 | - | func | |
477 | - | ||
478 | - | ||
479 | - | func | |
480 | - | ||
481 | - | ||
482 | - | let | |
483 | - | ||
484 | - | let | |
485 | - | ||
486 | - | let | |
487 | - | ||
488 | - | let | |
489 | - | ||
490 | - | let | |
491 | - | ||
492 | - | let | |
493 | - | ||
494 | - | let | |
495 | - | ||
496 | - | let | |
497 | - | ||
498 | - | let | |
499 | - | ||
500 | - | let | |
501 | - | ||
502 | - | let | |
503 | - | ||
504 | - | let | |
505 | - | ||
506 | - | let | |
507 | - | ||
508 | - | let | |
509 | - | ||
510 | - | let | |
511 | - | ||
512 | - | let | |
513 | - | ||
514 | - | let | |
515 | - | ||
516 | - | func | |
517 | - | ||
518 | - | ||
519 | - | func | |
520 | - | ||
521 | - | ||
522 | - | func | |
523 | - | ||
524 | - | ||
525 | - | func | |
526 | - | ||
527 | - | ||
528 | - | func | |
529 | - | ||
530 | - | ||
531 | - | func | |
532 | - | let | |
533 | - | if ($isInstanceOf( | |
440 | + | let cE = "__" | |
441 | + | ||
442 | + | let cF = 1000000 | |
443 | + | ||
444 | + | let cG = 100000000 | |
445 | + | ||
446 | + | let cH = 25 | |
447 | + | ||
448 | + | let cI = 100 | |
449 | + | ||
450 | + | let cJ = 225 | |
451 | + | ||
452 | + | let cK = 400 | |
453 | + | ||
454 | + | let cL = 625 | |
455 | + | ||
456 | + | let cM = [0, 1, 2, 3, 4, 5] | |
457 | + | ||
458 | + | func cN (cO,cP) = valueOrErrorMessage(getString(cO, cP), makeString(["mandatory ", toString(cO), ".", cP, " is not defined"], "")) | |
459 | + | ||
460 | + | ||
461 | + | let cQ = 1 | |
462 | + | ||
463 | + | let cR = 2 | |
464 | + | ||
465 | + | let cS = 3 | |
466 | + | ||
467 | + | let cT = 4 | |
468 | + | ||
469 | + | let cU = 7 | |
470 | + | ||
471 | + | let cV = 8 | |
472 | + | ||
473 | + | func cW () = "%s__restConfig" | |
474 | + | ||
475 | + | ||
476 | + | func cX () = "%s__restAddr" | |
477 | + | ||
478 | + | ||
479 | + | func cY (cZ) = split_4C(cN(cZ, cW()), cE) | |
480 | + | ||
481 | + | ||
482 | + | func da (db,dc) = valueOrErrorMessage(addressFromString(db[dc]), ("Rest cfg doesn't contain address at index " + toString(dc))) | |
483 | + | ||
484 | + | ||
485 | + | let dd = addressFromStringValue(valueOrElse(getString(this, cX()), cB)) | |
486 | + | ||
487 | + | let db = cY(dd) | |
488 | + | ||
489 | + | let aq = da(db, cQ) | |
490 | + | ||
491 | + | let de = da(db, cR) | |
492 | + | ||
493 | + | let df = da(db, cS) | |
494 | + | ||
495 | + | let dg = da(db, cT) | |
496 | + | ||
497 | + | let dh = da(db, cU) | |
498 | + | ||
499 | + | let di = da(db, cV) | |
500 | + | ||
501 | + | let dj = 0 | |
502 | + | ||
503 | + | let dk = 1 | |
504 | + | ||
505 | + | let dl = 2 | |
506 | + | ||
507 | + | let dm = 3 | |
508 | + | ||
509 | + | let dn = "wlg_assetId" | |
510 | + | ||
511 | + | let do = valueOrErrorMessage(getBinary(dg, dn), "WLGOLD is not issued yet") | |
512 | + | ||
513 | + | let dp = "acresAssetId" | |
514 | + | ||
515 | + | let dq = valueOrErrorMessage(getBinary(di, dp), "ACRES is not issued yet") | |
516 | + | ||
517 | + | let dr = 2 | |
518 | + | ||
519 | + | func ds (cO) = ("finishBlockForAddr_" + cO) | |
520 | + | ||
521 | + | ||
522 | + | func dt () = "resTypesProportions" | |
523 | + | ||
524 | + | ||
525 | + | func du (dv) = ("resTypesByContinent_" + dv) | |
526 | + | ||
527 | + | ||
528 | + | func dw (bB) = ("stakedLandsByOwner_" + bB) | |
529 | + | ||
530 | + | ||
531 | + | func dx (bB) = ("stakedPiecesByOwner_" + bB) | |
532 | + | ||
533 | + | ||
534 | + | func dy (dz) = { | |
535 | + | let cz = dz | |
536 | + | if ($isInstanceOf(cz, "String")) | |
534 | 537 | then { | |
535 | - | let | |
536 | - | | |
538 | + | let dA = cz | |
539 | + | dA | |
537 | 540 | } | |
538 | 541 | else throw("fail to cast into String") | |
539 | 542 | } | |
540 | 543 | ||
541 | 544 | ||
542 | - | func | |
543 | - | let | |
544 | - | if ($isInstanceOf( | |
545 | + | func dB (dz) = { | |
546 | + | let cz = dz | |
547 | + | if ($isInstanceOf(cz, "Int")) | |
545 | 548 | then { | |
546 | - | let | |
547 | - | | |
549 | + | let dC = cz | |
550 | + | dC | |
548 | 551 | } | |
549 | 552 | else throw("fail to cast into Int") | |
550 | 553 | } | |
551 | 554 | ||
552 | 555 | ||
553 | - | func | |
554 | - | let | |
555 | - | if ($isInstanceOf( | |
556 | + | func dD (dz) = { | |
557 | + | let cz = dz | |
558 | + | if ($isInstanceOf(cz, "List[Any]")) | |
556 | 559 | then { | |
557 | - | let | |
558 | - | | |
560 | + | let dE = cz | |
561 | + | dE | |
559 | 562 | } | |
560 | 563 | else throw("fail to cast into List[Any]") | |
561 | 564 | } | |
562 | 565 | ||
563 | 566 | ||
564 | - | func | |
565 | - | let | |
566 | - | if ($isInstanceOf( | |
567 | + | func dF (dz) = { | |
568 | + | let cz = dz | |
569 | + | if ($isInstanceOf(cz, "Boolean")) | |
567 | 570 | then { | |
568 | - | let | |
569 | - | | |
571 | + | let dA = cz | |
572 | + | dA | |
570 | 573 | } | |
571 | 574 | else throw("fail to cast into Boolean") | |
572 | 575 | } | |
573 | 576 | ||
574 | 577 | ||
575 | - | func | |
576 | - | let | |
577 | - | if (("S" == | |
578 | - | then | |
579 | - | else if (("M" == | |
580 | - | then | |
581 | - | else if (("L" == | |
582 | - | then | |
583 | - | else if (("XL" == | |
584 | - | then | |
585 | - | else if (("XXL" == | |
586 | - | then | |
578 | + | func dG (dH) = { | |
579 | + | let cz = dH | |
580 | + | if (("S" == cz)) | |
581 | + | then cH | |
582 | + | else if (("M" == cz)) | |
583 | + | then cI | |
584 | + | else if (("L" == cz)) | |
585 | + | then cJ | |
586 | + | else if (("XL" == cz)) | |
587 | + | then cK | |
588 | + | else if (("XXL" == cz)) | |
589 | + | then cL | |
587 | 590 | else throw("Unknown land size") | |
588 | 591 | } | |
589 | 592 | ||
590 | 593 | ||
591 | - | func | |
592 | - | ||
593 | - | ||
594 | - | func | |
595 | - | ||
596 | - | ||
597 | - | func | |
598 | - | ||
599 | - | ||
600 | - | func | |
601 | - | let | |
602 | - | let | |
603 | - | let | |
604 | - | (((toString(( | |
605 | - | } | |
606 | - | ||
607 | - | ||
608 | - | func | |
594 | + | func dI (dA) = isDefined(parseInt(dA)) | |
595 | + | ||
596 | + | ||
597 | + | func dJ () = "contractsBlocked" | |
598 | + | ||
599 | + | ||
600 | + | func dK (c) = ("lastTxIdByUser_" + c) | |
601 | + | ||
602 | + | ||
603 | + | func dL (dM,dN) = { | |
604 | + | let dO = pow(10, 0, dN, 0, 0, DOWN) | |
605 | + | let dP = toString((dM % dO)) | |
606 | + | let dQ = drop(toString(dO), (1 + size(dP))) | |
607 | + | (((toString((dM / dO)) + ".") + dQ) + dP) | |
608 | + | } | |
609 | + | ||
610 | + | ||
611 | + | func dR (dS,dT,dU) = if ((0 >= dS)) | |
609 | 612 | then throw("maxValue should be > 0") | |
610 | 613 | else { | |
611 | - | let | |
612 | - | (toInt( | |
614 | + | let dV = sha256((dT + dU)) | |
615 | + | (toInt(dV) % dS) | |
613 | 616 | } | |
614 | 617 | ||
615 | 618 | ||
616 | - | let | |
617 | - | let | |
618 | - | if ((base58'2W' == | |
619 | + | let dW = { | |
620 | + | let cz = cx | |
621 | + | if ((base58'2W' == cz)) | |
619 | 622 | then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv") | |
620 | - | else if ((base58'2T' == | |
623 | + | else if ((base58'2T' == cz)) | |
621 | 624 | then this | |
622 | 625 | else throw("Unknown chain") | |
623 | 626 | } | |
624 | 627 | ||
625 | - | let | |
626 | - | let | |
627 | - | if ((base58'2W' == | |
628 | + | let dX = { | |
629 | + | let cz = cx | |
630 | + | if ((base58'2W' == cz)) | |
628 | 631 | then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb") | |
629 | - | else if ((base58'2T' == | |
632 | + | else if ((base58'2T' == cz)) | |
630 | 633 | then this | |
631 | 634 | else throw("Unknown chain") | |
632 | 635 | } | |
633 | 636 | ||
634 | - | let | |
635 | - | ||
636 | - | let | |
637 | - | ||
638 | - | let | |
639 | - | ||
640 | - | let | |
641 | - | ||
642 | - | let | |
643 | - | ||
644 | - | let | |
645 | - | let | |
646 | - | if ((base58'2W' == | |
637 | + | let dY = base64'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==' | |
638 | + | ||
639 | + | let dZ = 300000 | |
640 | + | ||
641 | + | let ea = 5000000 | |
642 | + | ||
643 | + | let eb = 50 | |
644 | + | ||
645 | + | let ec = 10000000 | |
646 | + | ||
647 | + | let ed = { | |
648 | + | let cz = cx | |
649 | + | if ((base58'2W' == cz)) | |
647 | 650 | then 252289527462 | |
648 | - | else if ((base58'2T' == | |
651 | + | else if ((base58'2T' == cz)) | |
649 | 652 | then 2522895274 | |
650 | 653 | else throw("Unknown chain") | |
651 | 654 | } | |
652 | 655 | ||
653 | - | let | |
654 | - | let | |
655 | - | if ((base58'2W' == | |
656 | + | let ee = { | |
657 | + | let cz = cx | |
658 | + | if ((base58'2W' == cz)) | |
656 | 659 | then 250000000 | |
657 | - | else if ((base58'2T' == | |
660 | + | else if ((base58'2T' == cz)) | |
658 | 661 | then 250000000 | |
659 | 662 | else throw("Unknown chain") | |
660 | 663 | } | |
661 | 664 | ||
662 | - | let | |
663 | - | ||
664 | - | let | |
665 | - | ||
666 | - | let | |
667 | - | ||
668 | - | let | |
669 | - | ||
670 | - | let | |
671 | - | ||
672 | - | let | |
673 | - | ||
674 | - | let | |
675 | - | ||
676 | - | let | |
677 | - | ||
678 | - | let | |
679 | - | ||
680 | - | func | |
681 | - | ||
682 | - | ||
683 | - | func | |
684 | - | ||
685 | - | ||
686 | - | func | |
687 | - | ||
688 | - | ||
689 | - | func | |
690 | - | ||
691 | - | ||
692 | - | func | |
693 | - | ||
694 | - | ||
695 | - | func | |
696 | - | ||
697 | - | ||
698 | - | func | |
699 | - | ||
700 | - | ||
701 | - | func | |
702 | - | ||
703 | - | ||
704 | - | func | |
705 | - | ||
706 | - | ||
707 | - | let | |
708 | - | ||
709 | - | let | |
710 | - | ||
711 | - | let | |
712 | - | ||
713 | - | let | |
714 | - | ||
715 | - | let | |
716 | - | ||
717 | - | let | |
718 | - | ||
719 | - | let | |
720 | - | ||
721 | - | func | |
722 | - | ||
723 | - | ||
724 | - | func | |
725 | - | let | |
726 | - | then ((( | |
727 | - | else -((((-( | |
728 | - | ( | |
729 | - | } | |
730 | - | ||
731 | - | ||
732 | - | func | |
733 | - | let | |
734 | - | if ((0 >= | |
665 | + | let ef = 100000 | |
666 | + | ||
667 | + | let eg = 2500000000 | |
668 | + | ||
669 | + | let eh = toBigInt(5) | |
670 | + | ||
671 | + | let ei = toBigInt(20) | |
672 | + | ||
673 | + | let ej = toBigInt((20 * 20)) | |
674 | + | ||
675 | + | let ek = toBigInt(((20 * 20) * 20)) | |
676 | + | ||
677 | + | let el = toBigInt((((20 * 20) * 20) * 20)) | |
678 | + | ||
679 | + | let em = toBigInt(((((20 * 20) * 20) * 20) * 20)) | |
680 | + | ||
681 | + | let en = 500 | |
682 | + | ||
683 | + | func eo () = "nextLandNum" | |
684 | + | ||
685 | + | ||
686 | + | func ep (eq) = ("lcn_" + eq) | |
687 | + | ||
688 | + | ||
689 | + | func er (es) = ("la_" + es) | |
690 | + | ||
691 | + | ||
692 | + | func et (bu,bB) = ((("ilao_" + bu) + "_") + bB) | |
693 | + | ||
694 | + | ||
695 | + | func eu (es) = ("lo_" + es) | |
696 | + | ||
697 | + | ||
698 | + | func ev (eq) = ("duckByCustomName_" + eq) | |
699 | + | ||
700 | + | ||
701 | + | func ew (eq) = ("accountByCustomName_" + eq) | |
702 | + | ||
703 | + | ||
704 | + | func ex () = "oldiesList" | |
705 | + | ||
706 | + | ||
707 | + | func ey () = "nextRoboDuck" | |
708 | + | ||
709 | + | ||
710 | + | let ez = 0 | |
711 | + | ||
712 | + | let eA = 1 | |
713 | + | ||
714 | + | let eB = 2 | |
715 | + | ||
716 | + | let eC = 0 | |
717 | + | ||
718 | + | let eD = 5 | |
719 | + | ||
720 | + | let eE = 6 | |
721 | + | ||
722 | + | let eF = 7 | |
723 | + | ||
724 | + | func eG (es,dH) = ((aF + es) + dH) | |
725 | + | ||
726 | + | ||
727 | + | func eH (eI,eJ) = { | |
728 | + | let eK = if ((eI >= 0)) | |
729 | + | then (((eI + eJ) - 1) / eJ) | |
730 | + | else -((((-(eI) + eJ) - 1) / eJ)) | |
731 | + | (eK * cG) | |
732 | + | } | |
733 | + | ||
734 | + | ||
735 | + | func eL (eM,eN) = { | |
736 | + | let eO = (((((eN[0] + eN[1]) + eN[2]) + eN[3]) + eN[4]) + eN[5]) | |
737 | + | if ((0 >= eO)) | |
735 | 738 | then throw("Zero weights sum") | |
736 | 739 | else { | |
737 | - | let | |
738 | - | func | |
739 | - | ||
740 | - | let | |
741 | - | let | |
742 | - | let | |
743 | - | func | |
744 | - | then | |
745 | - | else | |
746 | - | ||
747 | - | func | |
748 | - | then | |
740 | + | let eP = fraction(eM, cF, eO) | |
741 | + | func eQ (eR,eS) = (eR :+ fraction(eS, eP, cF)) | |
742 | + | ||
743 | + | let eT = eN | |
744 | + | let eU = size(eT) | |
745 | + | let eV = nil | |
746 | + | func eW (eX,eY) = if ((eY >= eU)) | |
747 | + | then eX | |
748 | + | else eQ(eX, eT[eY]) | |
749 | + | ||
750 | + | func eZ (eX,eY) = if ((eY >= eU)) | |
751 | + | then eX | |
749 | 752 | else throw("List size exceeds 6") | |
750 | 753 | ||
751 | - | | |
752 | - | } | |
753 | - | } | |
754 | - | ||
755 | - | ||
756 | - | func | |
757 | - | let | |
758 | - | if ((size( | |
754 | + | eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6) | |
755 | + | } | |
756 | + | } | |
757 | + | ||
758 | + | ||
759 | + | func fa (eM) = { | |
760 | + | let fb = split(value(getString(dt())), "_") | |
761 | + | if ((size(fb) != aJ)) | |
759 | 762 | then throw("Wrong proportions data") | |
760 | 763 | else { | |
761 | - | let | |
762 | - | | |
763 | - | } | |
764 | - | } | |
765 | - | ||
766 | - | ||
767 | - | func | |
768 | - | let | |
769 | - | func | |
770 | - | let | |
771 | - | if ((0 > | |
772 | - | then throw(((((("Not enough material idx=" + toString( | |
773 | - | else ( | |
764 | + | let fc = [parseIntValue(fb[0]), parseIntValue(fb[1]), parseIntValue(fb[2]), parseIntValue(fb[3]), parseIntValue(fb[4]), parseIntValue(fb[5])] | |
765 | + | eL(eM, fc) | |
766 | + | } | |
767 | + | } | |
768 | + | ||
769 | + | ||
770 | + | func fd (fe,ff,fg) = { | |
771 | + | let fh = fa(fg) | |
772 | + | func fi (eR,dc) = { | |
773 | + | let fj = (parseIntValue(ff[dc]) - fh[dc]) | |
774 | + | if ((0 > fj)) | |
775 | + | then throw(((((("Not enough material idx=" + toString(dc)) + ", you have ") + ff[dc]) + ", but need ") + toString(fh[dc]))) | |
776 | + | else (eR :+ toString(fj)) | |
774 | 777 | } | |
775 | 778 | ||
776 | - | if ( | |
779 | + | if (fe) | |
777 | 780 | then { | |
778 | - | let | |
779 | - | let | |
780 | - | let | |
781 | - | func | |
782 | - | then | |
783 | - | else | |
784 | - | ||
785 | - | func | |
786 | - | then | |
781 | + | let eT = cM | |
782 | + | let eU = size(eT) | |
783 | + | let eV = nil | |
784 | + | func eW (eX,eY) = if ((eY >= eU)) | |
785 | + | then eX | |
786 | + | else fi(eX, eT[eY]) | |
787 | + | ||
788 | + | func eZ (eX,eY) = if ((eY >= eU)) | |
789 | + | then eX | |
787 | 790 | else throw("List size exceeds 6") | |
788 | 791 | ||
789 | - | | |
790 | - | } | |
791 | - | else | |
792 | - | } | |
793 | - | ||
794 | - | ||
795 | - | func | |
796 | - | then $Tuple2( | |
792 | + | eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6) | |
793 | + | } | |
794 | + | else ff | |
795 | + | } | |
796 | + | ||
797 | + | ||
798 | + | func fk (fl,fm) = if ((fm == "")) | |
799 | + | then $Tuple2(fl, false) | |
797 | 800 | else { | |
798 | - | func | |
799 | - | let | |
800 | - | if ((size( | |
801 | + | func fn (eR,fo) = { | |
802 | + | let fp = split(fo, ",") | |
803 | + | if ((size(fp) != 2)) | |
801 | 804 | then throw("Incorrect format, should be index,amount") | |
802 | 805 | else { | |
803 | - | let | |
804 | - | if (if ((0 > | |
806 | + | let dc = parseIntValue(fp[0]) | |
807 | + | if (if ((0 > dc)) | |
805 | 808 | then true | |
806 | - | else ( | |
809 | + | else (dc >= size(aX))) | |
807 | 810 | then throw("Unknown product idx") | |
808 | 811 | else { | |
809 | - | let | |
810 | - | let | |
811 | - | if ((size( | |
812 | - | then throw((("You don't have " + | |
812 | + | let fq = parseIntValue(fp[1]) | |
813 | + | let fr = split(eR._1, (fp[0] + ":")) | |
814 | + | if ((size(fr) != 2)) | |
815 | + | then throw((("You don't have " + aT[dc]) + " equipped")) | |
813 | 816 | else { | |
814 | - | let | |
815 | - | let | |
817 | + | let fs = fr[1] | |
818 | + | let ft = if (dI(take(drop(fs, 1), 1))) | |
816 | 819 | then 2 | |
817 | 820 | else 1 | |
818 | - | let | |
819 | - | let | |
820 | - | let | |
821 | - | then ( | |
822 | - | else throw(((((("You equipped " + toString( | |
823 | - | $Tuple2((((( | |
821 | + | let fu = parseIntValue(take(fs, ft)) | |
822 | + | let fv = drop(fs, ft) | |
823 | + | let fw = if ((fu >= fq)) | |
824 | + | then (fu - fq) | |
825 | + | else throw(((((("You equipped " + toString(fu)) + " of ") + aT[dc]) + ", but tried to use ") + toString(fq))) | |
826 | + | $Tuple2(((((fr[0] + fp[0]) + ":") + toString(fw)) + fv), if (eR._2) | |
824 | 827 | then true | |
825 | - | else if (if (( | |
826 | - | then (8 >= | |
828 | + | else if (if ((dc >= 6)) | |
829 | + | then (8 >= dc) | |
827 | 830 | else false) | |
828 | - | then ( | |
831 | + | then (fw == 0) | |
829 | 832 | else false) | |
830 | 833 | } | |
831 | 834 | } | |
832 | 835 | } | |
833 | 836 | } | |
834 | 837 | ||
835 | - | let | |
836 | - | let | |
837 | - | let | |
838 | - | func | |
839 | - | then | |
840 | - | else | |
841 | - | ||
842 | - | func | |
843 | - | then | |
838 | + | let eT = split(fm, "_") | |
839 | + | let eU = size(eT) | |
840 | + | let eV = $Tuple2(fl, false) | |
841 | + | func eW (eX,eY) = if ((eY >= eU)) | |
842 | + | then eX | |
843 | + | else fn(eX, eT[eY]) | |
844 | + | ||
845 | + | func eZ (eX,eY) = if ((eY >= eU)) | |
846 | + | then eX | |
844 | 847 | else throw("List size exceeds 10") | |
845 | 848 | ||
846 | - | | |
849 | + | eZ(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
847 | 850 | } | |
848 | 851 | ||
849 | 852 | ||
850 | - | func | |
851 | - | let | |
853 | + | func fx (fy) = { | |
854 | + | let fz = if ((fy == "")) | |
852 | 855 | then nil | |
853 | - | else split_4C( | |
854 | - | func | |
855 | - | let | |
856 | - | let | |
857 | - | then parseIntValue( | |
856 | + | else split_4C(fy, "_") | |
857 | + | func fA (eR,co) = { | |
858 | + | let fB = (size(eR) / 8) | |
859 | + | let fu = if ((size(fz) > fB)) | |
860 | + | then parseIntValue(fz[fB]) | |
858 | 861 | else 0 | |
859 | - | ( | |
862 | + | (eR + toBytes(fu)) | |
860 | 863 | } | |
861 | 864 | ||
862 | - | let | |
863 | - | let | |
864 | - | let | |
865 | - | func | |
866 | - | then | |
867 | - | else | |
868 | - | ||
869 | - | func | |
870 | - | then | |
865 | + | let eT = aX | |
866 | + | let eU = size(eT) | |
867 | + | let eV = base58'' | |
868 | + | func eW (eX,eY) = if ((eY >= eU)) | |
869 | + | then eX | |
870 | + | else fA(eX, eT[eY]) | |
871 | + | ||
872 | + | func eZ (eX,eY) = if ((eY >= eU)) | |
873 | + | then eX | |
871 | 874 | else throw("List size exceeds 50") | |
872 | 875 | ||
873 | - | | |
874 | - | } | |
875 | - | ||
876 | - | ||
877 | - | func | |
878 | - | func | |
879 | - | let | |
880 | - | let | |
881 | - | ( | |
876 | + | eZ(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eV, 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) | |
877 | + | } | |
878 | + | ||
879 | + | ||
880 | + | func fC (fD) = { | |
881 | + | func fE (eR,co) = { | |
882 | + | let fB = size(eR) | |
883 | + | let fF = take(drop(fD, (8 * fB)), 8) | |
884 | + | (eR :+ toString(toInt(fF))) | |
882 | 885 | } | |
883 | 886 | ||
884 | 887 | makeString_2C({ | |
885 | - | let | |
886 | - | let | |
887 | - | let | |
888 | - | func | |
889 | - | then | |
890 | - | else | |
891 | - | ||
892 | - | func | |
893 | - | then | |
888 | + | let eT = aX | |
889 | + | let eU = size(eT) | |
890 | + | let eV = nil | |
891 | + | func eW (eX,eY) = if ((eY >= eU)) | |
892 | + | then eX | |
893 | + | else fE(eX, eT[eY]) | |
894 | + | ||
895 | + | func eZ (eX,eY) = if ((eY >= eU)) | |
896 | + | then eX | |
894 | 897 | else throw("List size exceeds 50") | |
895 | 898 | ||
896 | - | | |
899 | + | eZ(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eV, 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) | |
897 | 900 | }, "_") | |
898 | 901 | } | |
899 | 902 | ||
900 | 903 | ||
901 | - | func | |
902 | - | func | |
903 | - | let | |
904 | - | then | |
904 | + | func fG (fH,fI) = { | |
905 | + | func fJ (eR,fB) = { | |
906 | + | let fK = if ((size(fH) > (7 + fB))) | |
907 | + | then fH[(7 + fB)] | |
905 | 908 | else 0 | |
906 | - | if ((parseIntValue( | |
907 | - | then throw(("Requirement not satisfied: " + k[ | |
909 | + | if ((parseIntValue(fI[fB]) > (fH[fB] + fK))) | |
910 | + | then throw(("Requirement not satisfied: " + k[fB])) | |
908 | 911 | else true | |
909 | 912 | } | |
910 | 913 | ||
911 | - | let | |
912 | - | let | |
913 | - | let | |
914 | - | func | |
915 | - | then | |
916 | - | else | |
917 | - | ||
918 | - | func | |
919 | - | then | |
914 | + | let eT = [0, 1, 2, 3, 4, 5, 6] | |
915 | + | let eU = size(eT) | |
916 | + | let eV = false | |
917 | + | func eW (eX,eY) = if ((eY >= eU)) | |
918 | + | then eX | |
919 | + | else fJ(eX, eT[eY]) | |
920 | + | ||
921 | + | func eZ (eX,eY) = if ((eY >= eU)) | |
922 | + | then eX | |
920 | 923 | else throw("List size exceeds 7") | |
921 | 924 | ||
922 | - | | |
923 | - | } | |
924 | - | ||
925 | - | ||
926 | - | func | |
927 | - | let | |
928 | - | if ((size( | |
925 | + | eZ(eW(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6), 7) | |
926 | + | } | |
927 | + | ||
928 | + | ||
929 | + | func fL (fM,fz,fN,fH,fO,fP) = { | |
930 | + | let fp = split(fM, ":") | |
931 | + | if ((size(fp) != 2)) | |
929 | 932 | then throw("Incorrect format, should be index:amount") | |
930 | - | else if (if (!( | |
931 | - | then (size( | |
933 | + | else if (if (!(fN)) | |
934 | + | then (size(fp[0]) != 2) | |
932 | 935 | else false) | |
933 | 936 | then throw("Product idx should be 2 digits, zero padded") | |
934 | 937 | else { | |
935 | - | let | |
936 | - | let | |
937 | - | if (!(containsElement( | |
938 | - | then throw((("Product '" + | |
939 | - | else if ((0 > | |
938 | + | let fQ = parseIntValue(fp[0]) | |
939 | + | let fR = parseIntValue(fp[1]) | |
940 | + | if (!(containsElement(aW, fQ))) | |
941 | + | then throw((("Product '" + aT[fQ]) + "' cannot be used for land defense")) | |
942 | + | else if ((0 > fR)) | |
940 | 943 | then throw("Count can't be negative") | |
941 | - | else if (( | |
942 | - | then throw(((("Can't put more than " + toString(u)) + " of ") + | |
943 | - | else if (( | |
944 | - | then $Tuple3( | |
944 | + | else if ((fR > u)) | |
945 | + | then throw(((("Can't put more than " + toString(u)) + " of ") + aT[fQ])) | |
946 | + | else if ((fR == 0)) | |
947 | + | then $Tuple3(fz, fO, fP) | |
945 | 948 | else { | |
946 | - | let | |
947 | - | let | |
948 | - | let | |
949 | - | let | |
950 | - | if (if (!( | |
951 | - | then ( | |
949 | + | let fS = take(fz, (8 * fQ)) | |
950 | + | let fu = toInt(take(drop(fz, (8 * fQ)), 8)) | |
951 | + | let fv = drop(fz, (8 * (fQ + 1))) | |
952 | + | let co = split(aX[fQ], "_") | |
953 | + | if (if (!(fN)) | |
954 | + | then (fR > fu) | |
952 | 955 | else false) | |
953 | - | then throw(((((("You have " + toString( | |
956 | + | then throw(((((("You have " + toString(fu)) + " of ") + aT[fQ]) + ", but tried to use ") + toString(fR))) | |
954 | 957 | else { | |
955 | - | let | |
956 | - | then | |
958 | + | let fw = if (if (!(fN)) | |
959 | + | then fG(fH, split(co[ba], ",")) | |
957 | 960 | else false) | |
958 | - | then ( | |
959 | - | else ( | |
960 | - | let | |
961 | - | $Tuple3((( | |
961 | + | then (fu - fR) | |
962 | + | else (fu + fR) | |
963 | + | let fT = (eH(fw, bc) - eH(fu, bc)) | |
964 | + | $Tuple3(((fS + toBytes(fw)) + fv), (fO + fT), (fP - fT)) | |
962 | 965 | } | |
963 | 966 | } | |
964 | 967 | } | |
965 | 968 | } | |
966 | 969 | ||
967 | 970 | ||
968 | - | func | |
969 | - | let | |
970 | - | if ((size( | |
971 | + | func fU (fM,fz,fN,fV,fW,fX,fH) = { | |
972 | + | let fp = split(fM, ":") | |
973 | + | if ((size(fp) != 2)) | |
971 | 974 | then throw("Incorrect format, should be index:amount") | |
972 | - | else if (if (!( | |
973 | - | then (size( | |
975 | + | else if (if (!(fN)) | |
976 | + | then (size(fp[0]) != 2) | |
974 | 977 | else false) | |
975 | 978 | then throw("Product idx should be 2 digits, zero padded") | |
976 | 979 | else { | |
977 | - | let | |
978 | - | let | |
979 | - | if (if ((0 > | |
980 | + | let fQ = parseIntValue(fp[0]) | |
981 | + | let fR = parseIntValue(fp[1]) | |
982 | + | if (if ((0 > fQ)) | |
980 | 983 | then true | |
981 | - | else ( | |
984 | + | else (fQ >= size(aX))) | |
982 | 985 | then throw("Unknown product idx") | |
983 | - | else if ((0 > | |
986 | + | else if ((0 > fR)) | |
984 | 987 | then throw("Count can't be negative") | |
985 | - | else if (( | |
986 | - | then throw(((("Can't put more than " + toString(u)) + " of ") + | |
987 | - | else if (( | |
988 | - | then $Tuple2( | |
988 | + | else if ((fR > u)) | |
989 | + | then throw(((("Can't put more than " + toString(u)) + " of ") + aT[fQ])) | |
990 | + | else if ((fR == 0)) | |
991 | + | then $Tuple2(fz, false) | |
989 | 992 | else { | |
990 | - | let | |
991 | - | let | |
992 | - | let | |
993 | - | let | |
994 | - | if (if (!( | |
995 | - | then ( | |
993 | + | let fS = take(fz, (8 * fQ)) | |
994 | + | let fu = toInt(take(drop(fz, (8 * fQ)), 8)) | |
995 | + | let fv = drop(fz, (8 * (fQ + 1))) | |
996 | + | let co = split(aX[fQ], "_") | |
997 | + | if (if (!(fN)) | |
998 | + | then (fR > fu) | |
996 | 999 | else false) | |
997 | - | then throw(((((("You have " + toString( | |
1000 | + | then throw(((((("You have " + toString(fu)) + " of ") + aT[fQ]) + ", but tried to use ") + toString(fR))) | |
998 | 1001 | else { | |
999 | - | let | |
1000 | - | then | |
1002 | + | let fY = if (if (!(fN)) | |
1003 | + | then fG(fH, split(co[ba], ",")) | |
1001 | 1004 | else false) | |
1002 | 1005 | then { | |
1003 | - | let | |
1004 | - | if (( | |
1006 | + | let fZ = co[bb] | |
1007 | + | if ((fZ == "")) | |
1005 | 1008 | then throw("Item cannot be equipped") | |
1006 | 1009 | else { | |
1007 | - | let | |
1008 | - | let | |
1009 | - | if (( | |
1010 | + | let ga = parseIntValue(fZ) | |
1011 | + | let gb = (ga / 100) | |
1012 | + | if ((fV != gb)) | |
1010 | 1013 | then throw("Segment incompatible") | |
1011 | 1014 | else { | |
1012 | - | let | |
1013 | - | if (( | |
1015 | + | let gc = ((ga % 100) / 10) | |
1016 | + | if ((fW != gc)) | |
1014 | 1017 | then throw("Slot incompatible") | |
1015 | 1018 | else { | |
1016 | - | let | |
1017 | - | if (if (( | |
1018 | - | then ( | |
1019 | + | let gd = (ga % 10) | |
1020 | + | if (if ((fX != 0)) | |
1021 | + | then (gd > 1) | |
1019 | 1022 | else false) | |
1020 | 1023 | then throw("Big items should occupy slot 0") | |
1021 | - | else ( | |
1024 | + | else (gd > 1) | |
1022 | 1025 | } | |
1023 | 1026 | } | |
1024 | 1027 | } | |
1025 | 1028 | } | |
1026 | 1029 | else false | |
1027 | - | $Tuple2((( | |
1028 | - | then | |
1029 | - | else -( | |
1030 | + | $Tuple2(((fS + toBytes((fu + (if (fN) | |
1031 | + | then fR | |
1032 | + | else -(fR))))) + fv), fY) | |
1030 | 1033 | } | |
1031 | 1034 | } | |
1032 | 1035 | } | |
1033 | 1036 | } | |
1034 | 1037 | ||
1035 | 1038 | ||
1036 | - | func | |
1039 | + | func ge (gf,gg,fN,fV,fW,gh) = if ((gf != "")) | |
1037 | 1040 | then { | |
1038 | - | let | |
1039 | - | if ((size( | |
1041 | + | let gi = split(gf, ",") | |
1042 | + | if ((size(gi) > t)) | |
1040 | 1043 | then throw("Wrong slots format") | |
1041 | 1044 | else { | |
1042 | - | let | |
1043 | - | let | |
1044 | - | then | |
1045 | + | let gj = gi[0] | |
1046 | + | let gk = if ((size(gi) > 1)) | |
1047 | + | then gi[1] | |
1045 | 1048 | else "" | |
1046 | - | if (if (( | |
1047 | - | then ( | |
1049 | + | if (if ((gj == "")) | |
1050 | + | then (gk == "") | |
1048 | 1051 | else false) | |
1049 | - | then | |
1052 | + | then gg | |
1050 | 1053 | else { | |
1051 | - | let | |
1052 | - | then | |
1053 | - | else $Tuple2( | |
1054 | - | if (( | |
1055 | - | then if ( | |
1054 | + | let gl = if ((gj != "")) | |
1055 | + | then fU(gj, gg, fN, fV, fW, 0, gh) | |
1056 | + | else $Tuple2(gg, false) | |
1057 | + | if ((gk != "")) | |
1058 | + | then if (gl._2) | |
1056 | 1059 | then throw("Big item already occupies slot") | |
1057 | - | else | |
1058 | - | else | |
1060 | + | else fU(gk, gl._1, fN, fV, fW, 1, gh)._1 | |
1061 | + | else gl._1 | |
1059 | 1062 | } | |
1060 | 1063 | } | |
1061 | 1064 | } | |
1062 | - | else | |
1063 | - | ||
1064 | - | ||
1065 | - | func | |
1066 | - | func | |
1067 | - | let | |
1068 | - | let | |
1069 | - | if ((size( | |
1065 | + | else gg | |
1066 | + | ||
1067 | + | ||
1068 | + | func gm (gn,go,fN,gh) = { | |
1069 | + | func fV (eR,gp) = { | |
1070 | + | let fB = eR._1 | |
1071 | + | let fW = split(gp, ";") | |
1072 | + | if ((size(fW) != s)) | |
1070 | 1073 | then throw("Wrong segment format") | |
1071 | 1074 | else { | |
1072 | - | let | |
1073 | - | let | |
1074 | - | if (if (( | |
1075 | - | then ( | |
1075 | + | let gq = fW[0] | |
1076 | + | let gr = fW[1] | |
1077 | + | if (if ((gq == "")) | |
1078 | + | then (gr == "") | |
1076 | 1079 | else false) | |
1077 | - | then $Tuple2(( | |
1080 | + | then $Tuple2((fB + 1), eR._2) | |
1078 | 1081 | else { | |
1079 | - | let | |
1080 | - | $Tuple2(( | |
1082 | + | let gs = ge(gq, eR._2, fN, fB, 0, gh) | |
1083 | + | $Tuple2((fB + 1), ge(gr, gs, fN, fB, 1, gh)) | |
1081 | 1084 | } | |
1082 | 1085 | } | |
1083 | 1086 | } | |
1084 | 1087 | ||
1085 | - | ( let | |
1086 | - | let | |
1087 | - | let | |
1088 | - | func | |
1089 | - | then | |
1090 | - | else | |
1091 | - | ||
1092 | - | func | |
1093 | - | then | |
1088 | + | ( let eT = gn | |
1089 | + | let eU = size(eT) | |
1090 | + | let eV = $Tuple2(0, go) | |
1091 | + | func eW (eX,eY) = if ((eY >= eU)) | |
1092 | + | then eX | |
1093 | + | else fV(eX, eT[eY]) | |
1094 | + | ||
1095 | + | func eZ (eX,eY) = if ((eY >= eU)) | |
1096 | + | then eX | |
1094 | 1097 | else throw("List size exceeds 6") | |
1095 | 1098 | ||
1096 | - | | |
1097 | - | } | |
1098 | - | ||
1099 | - | ||
1100 | - | func | |
1099 | + | eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6))._2 | |
1100 | + | } | |
1101 | + | ||
1102 | + | ||
1103 | + | func gt (gn,go,fO,fP,fN,fH) = if ((3 > size(gn))) | |
1101 | 1104 | then throw("At least duck, mines and traps parts are required") | |
1102 | 1105 | else { | |
1103 | - | func | |
1104 | - | let | |
1105 | - | if (( | |
1106 | - | then $Tuple4(( | |
1106 | + | func fV (eR,gp) = { | |
1107 | + | let fB = eR._1 | |
1108 | + | if ((fB == 0)) | |
1109 | + | then $Tuple4((fB + 1), eR._2, eR._3, eR._4) | |
1107 | 1110 | else { | |
1108 | - | let | |
1109 | - | $Tuple4(( | |
1111 | + | let gu = fL(gp, eR._2, fN, fH, eR._3, eR._4) | |
1112 | + | $Tuple4((fB + 1), gu._1, gu._2, gu._3) | |
1110 | 1113 | } | |
1111 | 1114 | } | |
1112 | 1115 | ||
1113 | - | let | |
1114 | - | let | |
1115 | - | let | |
1116 | - | let | |
1117 | - | func | |
1118 | - | then | |
1119 | - | else | |
1120 | - | ||
1121 | - | func | |
1122 | - | then | |
1116 | + | let gv = { | |
1117 | + | let eT = gn | |
1118 | + | let eU = size(eT) | |
1119 | + | let eV = $Tuple4(0, go, fO, fP) | |
1120 | + | func eW (eX,eY) = if ((eY >= eU)) | |
1121 | + | then eX | |
1122 | + | else fV(eX, eT[eY]) | |
1123 | + | ||
1124 | + | func eZ (eX,eY) = if ((eY >= eU)) | |
1125 | + | then eX | |
1123 | 1126 | else throw("List size exceeds 10") | |
1124 | 1127 | ||
1125 | - | | |
1126 | - | } | |
1127 | - | $Tuple3( | |
1128 | + | eZ(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
1129 | + | } | |
1130 | + | $Tuple3(gv._2, gv._3, gv._4) | |
1128 | 1131 | } | |
1129 | 1132 | ||
1130 | 1133 | ||
1131 | - | func | |
1132 | - | let | |
1133 | - | let | |
1134 | - | let | |
1135 | - | let | |
1136 | - | let | |
1134 | + | func gw (B) = { | |
1135 | + | let gx = G(B) | |
1136 | + | let gy = split(valueOrElse(getString(gx), ",;,_,;,_,;,_,;,_,;,_,;,"), "_") | |
1137 | + | let gz = gm(gy, dY, true, nil) | |
1138 | + | let gA = split(gy[q], ";")[1] | |
1139 | + | let ar = if ((gA == "")) | |
1137 | 1140 | then 0 | |
1138 | 1141 | else { | |
1139 | - | let | |
1140 | - | if (( | |
1142 | + | let gB = split(gA, ",")[0] | |
1143 | + | if ((gB == "")) | |
1141 | 1144 | then 0 | |
1142 | 1145 | else { | |
1143 | - | let | |
1144 | - | let | |
1145 | - | let | |
1146 | - | if (if (if (if (if (( | |
1146 | + | let fM = split(gB, ":") | |
1147 | + | let dc = fM[0] | |
1148 | + | let gC = fM[1] | |
1149 | + | if (if (if (if (if ((dc == "06")) | |
1147 | 1150 | then true | |
1148 | - | else ( | |
1151 | + | else (dc == "07")) | |
1149 | 1152 | then true | |
1150 | - | else ( | |
1151 | - | then ( | |
1153 | + | else (dc == "08")) | |
1154 | + | then (gC != "") | |
1152 | 1155 | else false) | |
1153 | - | then (parseIntValue( | |
1156 | + | then (parseIntValue(gC) > 0) | |
1154 | 1157 | else false) | |
1155 | - | then parseIntValue(split( | |
1158 | + | then parseIntValue(split(aX[parseIntValue(dc)], "_")[aZ]) | |
1156 | 1159 | else 0 | |
1157 | 1160 | } | |
1158 | 1161 | } | |
1159 | - | let | |
1160 | - | let | |
1161 | - | ( | |
1162 | - | } | |
1163 | - | ||
1164 | - | ||
1165 | - | func | |
1162 | + | let gh = ap(this, B, ar, true) | |
1163 | + | let gD = gm(gy, gz, false, gh) | |
1164 | + | (gD == gD) | |
1165 | + | } | |
1166 | + | ||
1167 | + | ||
1168 | + | func gE (gF,gG,gH,gI) = if ((size(gF) != aJ)) | |
1166 | 1169 | then throw("Wrong proportions data") | |
1167 | 1170 | else { | |
1168 | - | func | |
1169 | - | let | |
1170 | - | if ((0 > | |
1171 | - | then throw(((((((("Panic! Pieces of type=" + toString( | |
1172 | - | else ( | |
1173 | - | } | |
1174 | - | ||
1175 | - | let | |
1176 | - | let | |
1177 | - | let | |
1178 | - | func | |
1179 | - | then | |
1180 | - | else | |
1181 | - | ||
1182 | - | func | |
1183 | - | then | |
1171 | + | func gJ (eR,gK) = { | |
1172 | + | let fj = (parseIntValue(gF[gK]) + ((gI * gG[gK]) * gH)) | |
1173 | + | if ((0 > fj)) | |
1174 | + | then throw(((((((("Panic! Pieces of type=" + toString(gK)) + ", sign=") + toString(gI)) + ", terrainCounts[i]=") + toString(gG[gK])) + ", landSizeIndex=") + toString(gH))) | |
1175 | + | else (eR :+ toString(fj)) | |
1176 | + | } | |
1177 | + | ||
1178 | + | let eT = cM | |
1179 | + | let eU = size(eT) | |
1180 | + | let eV = nil | |
1181 | + | func eW (eX,eY) = if ((eY >= eU)) | |
1182 | + | then eX | |
1183 | + | else gJ(eX, eT[eY]) | |
1184 | + | ||
1185 | + | func eZ (eX,eY) = if ((eY >= eU)) | |
1186 | + | then eX | |
1184 | 1187 | else throw("List size exceeds 6") | |
1185 | 1188 | ||
1186 | - | | |
1189 | + | eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6) | |
1187 | 1190 | } | |
1188 | 1191 | ||
1189 | 1192 | ||
1190 | - | func | |
1191 | - | let | |
1192 | - | makeString( | |
1193 | - | } | |
1194 | - | ||
1195 | - | ||
1196 | - | func | |
1197 | - | ||
1198 | - | ||
1199 | - | func | |
1200 | - | func | |
1201 | - | let | |
1202 | - | ( | |
1193 | + | func gL (gG,gH,gI) = { | |
1194 | + | let gF = split(valueOrElse(getString(dt()), "0_0_0_0_0_0"), "_") | |
1195 | + | makeString(gE(gF, gG, gH, gI), "_") | |
1196 | + | } | |
1197 | + | ||
1198 | + | ||
1199 | + | func gM (gN) = [(size(split(gN, "A")) - 1), (size(split(gN, "B")) - 1), (size(split(gN, "C")) - 1), (size(split(gN, "D")) - 1), (size(split(gN, "E")) - 1), (size(split(gN, "F")) - 1)] | |
1200 | + | ||
1201 | + | ||
1202 | + | func gO (gP,gG,gQ,gH,gR) = { | |
1203 | + | func gS (eR,gK) = { | |
1204 | + | let gT = ((fraction(gQ, gR, a) * gG[gK]) * gH) | |
1205 | + | (eR :+ toString((parseIntValue(gP[gK]) + gT))) | |
1203 | 1206 | } | |
1204 | 1207 | ||
1205 | - | let | |
1206 | - | let | |
1207 | - | let | |
1208 | - | let | |
1209 | - | func | |
1210 | - | then | |
1211 | - | else | |
1212 | - | ||
1213 | - | func | |
1214 | - | then | |
1208 | + | let fc = { | |
1209 | + | let eT = cM | |
1210 | + | let eU = size(eT) | |
1211 | + | let eV = nil | |
1212 | + | func eW (eX,eY) = if ((eY >= eU)) | |
1213 | + | then eX | |
1214 | + | else gS(eX, eT[eY]) | |
1215 | + | ||
1216 | + | func eZ (eX,eY) = if ((eY >= eU)) | |
1217 | + | then eX | |
1215 | 1218 | else throw("List size exceeds 6") | |
1216 | 1219 | ||
1217 | - | | |
1220 | + | eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6) | |
1218 | 1221 | } | |
1219 | - | makeString( | |
1220 | - | } | |
1221 | - | ||
1222 | - | ||
1223 | - | func | |
1224 | - | func | |
1225 | - | let | |
1226 | - | $Tuple2(( | |
1222 | + | makeString(fc, "_") | |
1223 | + | } | |
1224 | + | ||
1225 | + | ||
1226 | + | func gU (gG,gQ,gH,gR) = { | |
1227 | + | func gS (eR,gK) = { | |
1228 | + | let gT = ((fraction(gQ, gR, a) * gG[gK]) * gH) | |
1229 | + | $Tuple2((eR._1 :+ gT), (eR._2 + gT)) | |
1227 | 1230 | } | |
1228 | 1231 | ||
1229 | - | let | |
1230 | - | let | |
1231 | - | let | |
1232 | - | func | |
1233 | - | then | |
1234 | - | else | |
1235 | - | ||
1236 | - | func | |
1237 | - | then | |
1232 | + | let eT = cM | |
1233 | + | let eU = size(eT) | |
1234 | + | let eV = $Tuple2(nil, 0) | |
1235 | + | func eW (eX,eY) = if ((eY >= eU)) | |
1236 | + | then eX | |
1237 | + | else gS(eX, eT[eY]) | |
1238 | + | ||
1239 | + | func eZ (eX,eY) = if ((eY >= eU)) | |
1240 | + | then eX | |
1238 | 1241 | else throw("List size exceeds 6") | |
1239 | 1242 | ||
1240 | - | | |
1241 | - | } | |
1242 | - | ||
1243 | - | ||
1244 | - | func | |
1245 | - | let | |
1246 | - | let | |
1247 | - | if (( | |
1248 | - | then $Tuple2(makeString( | |
1249 | - | else if (( | |
1243 | + | eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6) | |
1244 | + | } | |
1245 | + | ||
1246 | + | ||
1247 | + | func gV (gW,gX,gY,gZ) = { | |
1248 | + | let ha = gY._1 | |
1249 | + | let hb = gY._2 | |
1250 | + | if ((hb == 0)) | |
1251 | + | then $Tuple2(makeString(gW, "_"), makeString(gX, "_")) | |
1252 | + | else if ((gZ >= hb)) | |
1250 | 1253 | then { | |
1251 | - | func | |
1252 | - | ||
1253 | - | let | |
1254 | - | let | |
1255 | - | let | |
1256 | - | let | |
1257 | - | func | |
1258 | - | then | |
1259 | - | else | |
1260 | - | ||
1261 | - | func | |
1262 | - | then | |
1254 | + | func hc (eR,gK) = (eR :+ toString((parseIntValue(gW[gK]) + ha[gK]))) | |
1255 | + | ||
1256 | + | let fc = { | |
1257 | + | let eT = cM | |
1258 | + | let eU = size(eT) | |
1259 | + | let eV = nil | |
1260 | + | func eW (eX,eY) = if ((eY >= eU)) | |
1261 | + | then eX | |
1262 | + | else hc(eX, eT[eY]) | |
1263 | + | ||
1264 | + | func eZ (eX,eY) = if ((eY >= eU)) | |
1265 | + | then eX | |
1263 | 1266 | else throw("List size exceeds 6") | |
1264 | 1267 | ||
1265 | - | | |
1268 | + | eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6) | |
1266 | 1269 | } | |
1267 | - | $Tuple2(makeString( | |
1270 | + | $Tuple2(makeString(fc, "_"), makeString(gX, "_")) | |
1268 | 1271 | } | |
1269 | 1272 | else { | |
1270 | - | func | |
1271 | - | let | |
1272 | - | $Tuple2(( | |
1273 | + | func hd (eR,gK) = { | |
1274 | + | let he = fraction(ha[gK], gZ, hb) | |
1275 | + | $Tuple2((eR._1 :+ toString((parseIntValue(gW[gK]) + he))), (eR._2 :+ toString(((parseIntValue(gX[gK]) + ha[gK]) - he)))) | |
1273 | 1276 | } | |
1274 | 1277 | ||
1275 | - | let | |
1276 | - | let | |
1277 | - | let | |
1278 | - | let | |
1279 | - | func | |
1280 | - | then | |
1281 | - | else | |
1282 | - | ||
1283 | - | func | |
1284 | - | then | |
1278 | + | let fc = { | |
1279 | + | let eT = cM | |
1280 | + | let eU = size(eT) | |
1281 | + | let eV = $Tuple2(nil, nil) | |
1282 | + | func eW (eX,eY) = if ((eY >= eU)) | |
1283 | + | then eX | |
1284 | + | else hd(eX, eT[eY]) | |
1285 | + | ||
1286 | + | func eZ (eX,eY) = if ((eY >= eU)) | |
1287 | + | then eX | |
1285 | 1288 | else throw("List size exceeds 6") | |
1286 | 1289 | ||
1287 | - | | |
1290 | + | eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6) | |
1288 | 1291 | } | |
1289 | - | $Tuple2(makeString( | |
1292 | + | $Tuple2(makeString(fc._1, "_"), makeString(fc._2, "_")) | |
1290 | 1293 | } | |
1291 | 1294 | } | |
1292 | 1295 | ||
1293 | 1296 | ||
1294 | - | func | |
1295 | - | then | |
1296 | - | else -( | |
1297 | - | ||
1298 | - | ||
1299 | - | let | |
1300 | - | ||
1301 | - | func | |
1302 | - | let | |
1303 | - | let | |
1297 | + | func hf (hg) = if ((hg >= toBigInt(0))) | |
1298 | + | then hg | |
1299 | + | else -(hg) | |
1300 | + | ||
1301 | + | ||
1302 | + | let hh = [[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]] | |
1303 | + | ||
1304 | + | func hi (dC,hj) = { | |
1305 | + | let hk = toInt((dC % ei)) | |
1306 | + | let hl = if ((hj[0] > hk)) | |
1304 | 1307 | then "A" | |
1305 | - | else if (( | |
1308 | + | else if ((hj[1] > hk)) | |
1306 | 1309 | then "B" | |
1307 | - | else if (( | |
1310 | + | else if ((hj[2] > hk)) | |
1308 | 1311 | then "C" | |
1309 | - | else if (( | |
1312 | + | else if ((hj[3] > hk)) | |
1310 | 1313 | then "D" | |
1311 | - | else if (( | |
1314 | + | else if ((hj[4] > hk)) | |
1312 | 1315 | then "E" | |
1313 | 1316 | else "F" | |
1314 | - | | |
1315 | - | } | |
1316 | - | ||
1317 | - | ||
1318 | - | func | |
1319 | - | let | |
1320 | - | func | |
1321 | - | ||
1322 | - | let | |
1323 | - | let | |
1324 | - | let | |
1325 | - | let | |
1326 | - | func | |
1327 | - | then | |
1328 | - | else | |
1329 | - | ||
1330 | - | func | |
1331 | - | then | |
1317 | + | hl | |
1318 | + | } | |
1319 | + | ||
1320 | + | ||
1321 | + | func hm (hn,ho) = { | |
1322 | + | let hp = hh[ho] | |
1323 | + | func hq (eR,eS) = $Tuple2((((((eR._1 + hi(eR._2, hp)) + hi((eR._2 / ei), hp)) + hi((eR._2 / ej), hp)) + hi((eR._2 / ek), hp)) + hi((eR._2 / el), hp)), (eR._2 / em)) | |
1324 | + | ||
1325 | + | let gv = { | |
1326 | + | let eT = [1, 2, 3, 4, 5] | |
1327 | + | let eU = size(eT) | |
1328 | + | let eV = $Tuple2("", (hn / eh)) | |
1329 | + | func eW (eX,eY) = if ((eY >= eU)) | |
1330 | + | then eX | |
1331 | + | else hq(eX, eT[eY]) | |
1332 | + | ||
1333 | + | func eZ (eX,eY) = if ((eY >= eU)) | |
1334 | + | then eX | |
1332 | 1335 | else throw("List size exceeds 5") | |
1333 | 1336 | ||
1334 | - | | |
1337 | + | eZ(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5) | |
1335 | 1338 | } | |
1336 | - | | |
1337 | - | } | |
1338 | - | ||
1339 | - | ||
1340 | - | let | |
1341 | - | ||
1342 | - | let | |
1343 | - | ||
1344 | - | func | |
1345 | - | func | |
1346 | - | let | |
1347 | - | let | |
1348 | - | let | |
1339 | + | gv._1 | |
1340 | + | } | |
1341 | + | ||
1342 | + | ||
1343 | + | let hr = [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] | |
1344 | + | ||
1345 | + | let hs = ["A", "B", "C", "D", "E", "F"] | |
1346 | + | ||
1347 | + | func ht (hu,gH) = { | |
1348 | + | func hv (eR,dA) = { | |
1349 | + | let fB = eR._2 | |
1350 | + | let hw = parseIntValue(dA) | |
1351 | + | let hg = if ((hw == 0)) | |
1349 | 1352 | then 0 | |
1350 | - | else if (( | |
1351 | - | then ( | |
1352 | - | else if (( | |
1353 | + | else if ((hw >= (4 * gH))) | |
1354 | + | then (hw / gH) | |
1355 | + | else if ((hw > (3 * gH))) | |
1353 | 1356 | then 3 | |
1354 | - | else ((( | |
1355 | - | $Tuple3(( | |
1357 | + | else (((hw - 1) / gH) + 1) | |
1358 | + | $Tuple3((eR._1 :+ hg), (eR._2 + 1), (eR._3 + hg)) | |
1356 | 1359 | } | |
1357 | 1360 | ||
1358 | - | let | |
1359 | - | let | |
1360 | - | let | |
1361 | - | let | |
1362 | - | func | |
1363 | - | then | |
1364 | - | else | |
1365 | - | ||
1366 | - | func | |
1367 | - | then | |
1361 | + | let gv = { | |
1362 | + | let eT = hu | |
1363 | + | let eU = size(eT) | |
1364 | + | let eV = $Tuple3(nil, 0, 0) | |
1365 | + | func eW (eX,eY) = if ((eY >= eU)) | |
1366 | + | then eX | |
1367 | + | else hv(eX, eT[eY]) | |
1368 | + | ||
1369 | + | func eZ (eX,eY) = if ((eY >= eU)) | |
1370 | + | then eX | |
1368 | 1371 | else throw("List size exceeds 6") | |
1369 | 1372 | ||
1370 | - | | |
1373 | + | eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6) | |
1371 | 1374 | } | |
1372 | - | let | |
1373 | - | let | |
1374 | - | let | |
1375 | - | func | |
1376 | - | let | |
1377 | - | then ( | |
1378 | - | else | |
1379 | - | let | |
1375 | + | let hx = gv._1 | |
1376 | + | let hy = value(indexOf(hx, max(hx))) | |
1377 | + | let hz = (gv._3 - 25) | |
1378 | + | func hA (eR,dc) = { | |
1379 | + | let dM = if ((dc == hy)) | |
1380 | + | then (hx[dc] - hz) | |
1381 | + | else hx[dc] | |
1382 | + | let dQ = if ((dM == 0)) | |
1380 | 1383 | then nil | |
1381 | - | else split(drop(toString(pow(10, 0, | |
1382 | - | let | |
1383 | - | func | |
1384 | - | ||
1385 | - | let | |
1386 | - | let | |
1387 | - | let | |
1388 | - | let | |
1389 | - | func | |
1390 | - | then | |
1391 | - | else | |
1392 | - | ||
1393 | - | func | |
1394 | - | then | |
1384 | + | else split(drop(toString(pow(10, 0, dM, 0, 0, DOWN)), 1), "") | |
1385 | + | let ga = hs[dc] | |
1386 | + | func hB (hC,hD) = (hC :+ ga) | |
1387 | + | ||
1388 | + | let hE = { | |
1389 | + | let eT = dQ | |
1390 | + | let eU = size(eT) | |
1391 | + | let eV = nil | |
1392 | + | func hF (eX,eY) = if ((eY >= eU)) | |
1393 | + | then eX | |
1394 | + | else hB(eX, eT[eY]) | |
1395 | + | ||
1396 | + | func hG (eX,eY) = if ((eY >= eU)) | |
1397 | + | then eX | |
1395 | 1398 | else throw("List size exceeds 25") | |
1396 | 1399 | ||
1397 | - | hF( | |
1398 | - | } | |
1399 | - | ( | |
1400 | + | hG(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(eV, 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) | |
1401 | + | } | |
1402 | + | (eR ++ hE) | |
1400 | 1403 | } | |
1401 | 1404 | ||
1402 | - | let | |
1403 | - | let | |
1404 | - | let | |
1405 | - | let | |
1406 | - | func | |
1407 | - | then | |
1408 | - | else | |
1409 | - | ||
1410 | - | func | |
1411 | - | then | |
1405 | + | let fc = { | |
1406 | + | let eT = cM | |
1407 | + | let eU = size(eT) | |
1408 | + | let eV = nil | |
1409 | + | func hF (eX,eY) = if ((eY >= eU)) | |
1410 | + | then eX | |
1411 | + | else hA(eX, eT[eY]) | |
1412 | + | ||
1413 | + | func hG (eX,eY) = if ((eY >= eU)) | |
1414 | + | then eX | |
1412 | 1415 | else throw("List size exceeds 6") | |
1413 | 1416 | ||
1414 | - | hF( | |
1417 | + | hG(hF(hF(hF(hF(hF(hF(eV, 0), 1), 2), 3), 4), 5), 6) | |
1415 | 1418 | } | |
1416 | - | func | |
1417 | - | ||
1418 | - | let | |
1419 | - | let | |
1420 | - | let | |
1421 | - | func | |
1422 | - | then | |
1423 | - | else | |
1424 | - | ||
1425 | - | func | |
1426 | - | then | |
1419 | + | func hH (eR,fB) = (eR + fc[fB]) | |
1420 | + | ||
1421 | + | let eT = hr | |
1422 | + | let eU = size(eT) | |
1423 | + | let eV = "" | |
1424 | + | func hI (eX,eY) = if ((eY >= eU)) | |
1425 | + | then eX | |
1426 | + | else hH(eX, eT[eY]) | |
1427 | + | ||
1428 | + | func hJ (eX,eY) = if ((eY >= eU)) | |
1429 | + | then eX | |
1427 | 1430 | else throw("List size exceeds 25") | |
1428 | 1431 | ||
1429 | - | hI( | |
1430 | - | } | |
1431 | - | ||
1432 | - | ||
1433 | - | func | |
1434 | - | let | |
1435 | - | [toString(valueOrElse(parseInt( | |
1436 | - | then | |
1437 | - | else "0_0_0_0_0_0", if ((size(split( | |
1438 | - | then | |
1439 | - | else "0_0_0_0_0_0", | |
1440 | - | } | |
1441 | - | ||
1442 | - | ||
1443 | - | func | |
1444 | - | let | |
1445 | - | (( | |
1446 | - | } | |
1447 | - | ||
1448 | - | ||
1449 | - | func | |
1450 | - | let | |
1451 | - | func | |
1452 | - | ||
1453 | - | func | |
1454 | - | let | |
1455 | - | let | |
1456 | - | $Tuple2(( | |
1432 | + | hJ(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(eV, 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) | |
1433 | + | } | |
1434 | + | ||
1435 | + | ||
1436 | + | func hK (hL) = { | |
1437 | + | let gu = split(valueOrElse(getString(hL), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":") | |
1438 | + | [toString(valueOrElse(parseInt(gu[bm]), 0)), if ((size(split(gu[bn], "_")) == aJ)) | |
1439 | + | then gu[bn] | |
1440 | + | else "0_0_0_0_0_0", if ((size(split(gu[bo], "_")) == aJ)) | |
1441 | + | then gu[bo] | |
1442 | + | else "0_0_0_0_0_0", gu[bp]] | |
1443 | + | } | |
1444 | + | ||
1445 | + | ||
1446 | + | func hM (hN) = { | |
1447 | + | let fp = split(hN, "_") | |
1448 | + | ((aM * (parseIntValue(fp[1]) + 1)) * parseIntValue(fp[0])) | |
1449 | + | } | |
1450 | + | ||
1451 | + | ||
1452 | + | func hO (hP) = { | |
1453 | + | let hQ = hP[bg] | |
1454 | + | func hR (eR,hS) = (eR + parseIntValue(hS)) | |
1455 | + | ||
1456 | + | func hT (eR,hS) = { | |
1457 | + | let dc = eR._1 | |
1458 | + | let eK = (((parseIntValue(hS) + bc) - 1) / bc) | |
1459 | + | $Tuple2((dc + 1), (eR._2 + (eK * cG))) | |
1457 | 1460 | } | |
1458 | 1461 | ||
1459 | - | let | |
1460 | - | let | |
1461 | - | let | |
1462 | - | let | |
1463 | - | func | |
1464 | - | then | |
1465 | - | else | |
1466 | - | ||
1467 | - | func | |
1468 | - | then | |
1462 | + | let hU = { | |
1463 | + | let eT = split(hP[be], "_") | |
1464 | + | let eU = size(eT) | |
1465 | + | let eV = 0 | |
1466 | + | func eW (eX,eY) = if ((eY >= eU)) | |
1467 | + | then eX | |
1468 | + | else hR(eX, eT[eY]) | |
1469 | + | ||
1470 | + | func eZ (eX,eY) = if ((eY >= eU)) | |
1471 | + | then eX | |
1469 | 1472 | else throw("List size exceeds 6") | |
1470 | 1473 | ||
1471 | - | | |
1474 | + | eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6) | |
1472 | 1475 | } | |
1473 | - | let | |
1474 | - | let | |
1475 | - | let | |
1476 | - | let | |
1477 | - | func | |
1478 | - | then | |
1479 | - | else | |
1480 | - | ||
1481 | - | func | |
1482 | - | then | |
1476 | + | let hV = { | |
1477 | + | let eT = split(hP[bf], "_") | |
1478 | + | let eU = size(eT) | |
1479 | + | let eV = 0 | |
1480 | + | func hF (eX,eY) = if ((eY >= eU)) | |
1481 | + | then eX | |
1482 | + | else hR(eX, eT[eY]) | |
1483 | + | ||
1484 | + | func hG (eX,eY) = if ((eY >= eU)) | |
1485 | + | then eX | |
1483 | 1486 | else throw("List size exceeds 6") | |
1484 | 1487 | ||
1485 | - | hF( | |
1488 | + | hG(hF(hF(hF(hF(hF(hF(eV, 0), 1), 2), 3), 4), 5), 6) | |
1486 | 1489 | } | |
1487 | - | let | |
1490 | + | let hW = if ((hQ == "")) | |
1488 | 1491 | then 0 | |
1489 | - | else ( let | |
1490 | - | let | |
1491 | - | let | |
1492 | - | func | |
1493 | - | then | |
1494 | - | else | |
1495 | - | ||
1496 | - | func | |
1497 | - | then | |
1492 | + | else ( let eT = split_4C(hQ, "_") | |
1493 | + | let eU = size(eT) | |
1494 | + | let eV = $Tuple2(0, 0) | |
1495 | + | func hI (eX,eY) = if ((eY >= eU)) | |
1496 | + | then eX | |
1497 | + | else hT(eX, eT[eY]) | |
1498 | + | ||
1499 | + | func hJ (eX,eY) = if ((eY >= eU)) | |
1500 | + | then eX | |
1498 | 1501 | else throw("List size exceeds 50") | |
1499 | 1502 | ||
1500 | - | hI( | |
1501 | - | (( | |
1502 | - | } | |
1503 | - | ||
1504 | - | ||
1505 | - | func | |
1506 | - | let | |
1507 | - | let | |
1508 | - | let | |
1509 | - | let | |
1510 | - | let | |
1511 | - | let | |
1512 | - | then makeString(["0", toString( | |
1503 | + | hJ(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(eV, 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 | |
1504 | + | ((hU + hV) + hW) | |
1505 | + | } | |
1506 | + | ||
1507 | + | ||
1508 | + | func hX (hY,hZ,ia) = { | |
1509 | + | let hN = ((toString(hZ) + "_") + toString(ia)) | |
1510 | + | let ib = hM(hN) | |
1511 | + | let ic = valueOrElse(getString(hY), (hN + ":0_0_0_0_0_0:0_0_0_0_0_0::0")) | |
1512 | + | let id = split_4C(ic, ":") | |
1513 | + | let ie = hO(id) | |
1514 | + | let if = if ((5 > size(id))) | |
1515 | + | then makeString(["0", toString(ie), toString((ib - ie)), toString(ib)], "_") | |
1513 | 1516 | else { | |
1514 | - | let | |
1515 | - | let | |
1516 | - | let | |
1517 | - | then parseIntValue( | |
1518 | - | else | |
1519 | - | makeString([toString( | |
1520 | - | } | |
1521 | - | [ | |
1522 | - | then | |
1523 | - | else "0_0_0_0_0_0", if ((size(split( | |
1524 | - | then | |
1525 | - | else "0_0_0_0_0_0", | |
1526 | - | } | |
1527 | - | ||
1528 | - | ||
1529 | - | func | |
1530 | - | let | |
1531 | - | let | |
1532 | - | (( | |
1533 | - | } | |
1534 | - | ||
1535 | - | ||
1536 | - | func | |
1517 | + | let ig = split(id[bh], "_") | |
1518 | + | let ih = parseIntValue(ig[bi]) | |
1519 | + | let ii = if ((size(ig) > 1)) | |
1520 | + | then parseIntValue(ig[bj]) | |
1521 | + | else ie | |
1522 | + | makeString([toString(ih), toString(ii), toString(((ib - ih) - ii)), toString(ib)], "_") | |
1523 | + | } | |
1524 | + | [id[bd], if ((size(split(id[be], "_")) == aJ)) | |
1525 | + | then id[be] | |
1526 | + | else "0_0_0_0_0_0", if ((size(split(id[bf], "_")) == aJ)) | |
1527 | + | then id[bf] | |
1528 | + | else "0_0_0_0_0_0", id[bg], if] | |
1529 | + | } | |
1530 | + | ||
1531 | + | ||
1532 | + | func ij (hP) = { | |
1533 | + | let ik = hO(hP) | |
1534 | + | let il = parseIntValue(split(hP[bh], "_")[bi]) | |
1535 | + | ((hM(hP[bd]) - ik) - il) | |
1536 | + | } | |
1537 | + | ||
1538 | + | ||
1539 | + | func im (in,hP,io) = if ((size(in) != 3)) | |
1537 | 1540 | then throw("cargoListStr should contain exactly 2 ':' separators") | |
1538 | 1541 | else { | |
1539 | - | let | |
1540 | - | let | |
1541 | - | let | |
1542 | + | let ip = split(in[0], "_") | |
1543 | + | let iq = split(in[1], "_") | |
1544 | + | let ir = if ((in[2] == "")) | |
1542 | 1545 | then nil | |
1543 | - | else split_4C( | |
1544 | - | if ((size( | |
1546 | + | else split_4C(in[2], "_") | |
1547 | + | if ((size(ip) != aJ)) | |
1545 | 1548 | then throw("All 6 resources should be passed") | |
1546 | - | else if ((size( | |
1549 | + | else if ((size(iq) != aJ)) | |
1547 | 1550 | then throw("All 6 materials should be passed") | |
1548 | 1551 | else { | |
1549 | - | let | |
1550 | - | let | |
1551 | - | let | |
1552 | - | let | |
1552 | + | let gZ = ij(hP) | |
1553 | + | let is = split(hP[be], "_") | |
1554 | + | let it = split(hP[bf], "_") | |
1555 | + | let iu = if ((hP[bg] == "")) | |
1553 | 1556 | then nil | |
1554 | - | else split_4C( | |
1555 | - | let | |
1556 | - | let | |
1557 | - | let | |
1557 | + | else split_4C(hP[bg], "_") | |
1558 | + | let gX = split(io[bn], "_") | |
1559 | + | let iv = split(io[bo], "_") | |
1560 | + | let iw = if ((io[bp] == "")) | |
1558 | 1561 | then nil | |
1559 | - | else split_4C( | |
1560 | - | func | |
1561 | - | let | |
1562 | - | let | |
1563 | - | let | |
1564 | - | let | |
1565 | - | if (( | |
1566 | - | then $Tuple4(( | |
1567 | - | else if (( | |
1568 | - | then if (( | |
1569 | - | then throw((((("Attempt to take " + | |
1570 | - | else $Tuple4(( | |
1571 | - | else if ((-( | |
1572 | - | then throw((((("Attempt to take " + toString(-( | |
1573 | - | else $Tuple4(( | |
1562 | + | else split_4C(io[bp], "_") | |
1563 | + | func ix (eR,hS) = { | |
1564 | + | let gK = eR._1 | |
1565 | + | let iy = parseIntValue(hS) | |
1566 | + | let iz = parseIntValue(is[gK]) | |
1567 | + | let iA = parseIntValue(gX[gK]) | |
1568 | + | if ((iy == 0)) | |
1569 | + | then $Tuple4((gK + 1), (eR._2 :+ is[gK]), (eR._3 :+ gX[gK]), eR._4) | |
1570 | + | else if ((iy > 0)) | |
1571 | + | then if ((iy > iA)) | |
1572 | + | then throw((((("Attempt to take " + hS) + " from backpack, but only ") + toString(iA)) + " available")) | |
1573 | + | else $Tuple4((gK + 1), (eR._2 :+ toString((iz + iy))), (eR._3 :+ toString((iA - iy))), (eR._4 + iy)) | |
1574 | + | else if ((-(iy) > iz)) | |
1575 | + | then throw((((("Attempt to take " + toString(-(iy))) + " from warehouse, but only ") + toString(iz)) + " available")) | |
1576 | + | else $Tuple4((gK + 1), (eR._2 :+ toString((iz + iy))), (eR._3 :+ toString((iA - iy))), (eR._4 + iy)) | |
1574 | 1577 | } | |
1575 | 1578 | ||
1576 | - | let | |
1577 | - | let | |
1578 | - | let | |
1579 | - | let | |
1580 | - | func | |
1581 | - | then | |
1582 | - | else | |
1583 | - | ||
1584 | - | func | |
1585 | - | then | |
1579 | + | let fc = { | |
1580 | + | let eT = ip | |
1581 | + | let eU = size(eT) | |
1582 | + | let eV = $Tuple4(0, nil, nil, 0) | |
1583 | + | func eW (eX,eY) = if ((eY >= eU)) | |
1584 | + | then eX | |
1585 | + | else ix(eX, eT[eY]) | |
1586 | + | ||
1587 | + | func eZ (eX,eY) = if ((eY >= eU)) | |
1588 | + | then eX | |
1586 | 1589 | else throw("List size exceeds 6") | |
1587 | 1590 | ||
1588 | - | | |
1591 | + | eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6) | |
1589 | 1592 | } | |
1590 | - | func | |
1591 | - | let | |
1592 | - | let | |
1593 | - | let | |
1594 | - | let | |
1595 | - | if (( | |
1596 | - | then $Tuple4(( | |
1597 | - | else if (( | |
1598 | - | then if (( | |
1599 | - | then throw((((("Attempt to take " + | |
1600 | - | else $Tuple4(( | |
1601 | - | else if ((-( | |
1602 | - | then throw((((("Attempt to take " + toString(-( | |
1603 | - | else $Tuple4(( | |
1593 | + | func iB (eR,hS) = { | |
1594 | + | let gK = eR._1 | |
1595 | + | let iy = parseIntValue(hS) | |
1596 | + | let iC = parseIntValue(it[gK]) | |
1597 | + | let iD = parseIntValue(iv[gK]) | |
1598 | + | if ((iy == 0)) | |
1599 | + | then $Tuple4((gK + 1), (eR._2 :+ it[gK]), (eR._3 :+ iv[gK]), eR._4) | |
1600 | + | else if ((iy > 0)) | |
1601 | + | then if ((iy > iD)) | |
1602 | + | then throw((((("Attempt to take " + hS) + " from backpack, but only ") + toString(iD)) + " available")) | |
1603 | + | else $Tuple4((gK + 1), (eR._2 :+ toString((iC + iy))), (eR._3 :+ toString((iD - iy))), (eR._4 + iy)) | |
1604 | + | else if ((-(iy) > iC)) | |
1605 | + | then throw((((("Attempt to take " + toString(-(iy))) + " from warehouse, but only ") + toString(iC)) + " available")) | |
1606 | + | else $Tuple4((gK + 1), (eR._2 :+ toString((iC + iy))), (eR._3 :+ toString((iD - iy))), (eR._4 + iy)) | |
1604 | 1607 | } | |
1605 | 1608 | ||
1606 | - | let | |
1607 | - | let | |
1608 | - | let | |
1609 | - | let | |
1610 | - | func | |
1611 | - | then | |
1612 | - | else | |
1613 | - | ||
1614 | - | func | |
1615 | - | then | |
1609 | + | let gq = { | |
1610 | + | let eT = iq | |
1611 | + | let eU = size(eT) | |
1612 | + | let eV = $Tuple4(0, nil, nil, fc._4) | |
1613 | + | func hF (eX,eY) = if ((eY >= eU)) | |
1614 | + | then eX | |
1615 | + | else iB(eX, eT[eY]) | |
1616 | + | ||
1617 | + | func hG (eX,eY) = if ((eY >= eU)) | |
1618 | + | then eX | |
1616 | 1619 | else throw("List size exceeds 6") | |
1617 | 1620 | ||
1618 | - | hF( | |
1621 | + | hG(hF(hF(hF(hF(hF(hF(eV, 0), 1), 2), 3), 4), 5), 6) | |
1619 | 1622 | } | |
1620 | - | func | |
1621 | - | let | |
1622 | - | let | |
1623 | - | let | |
1624 | - | then parseIntValue( | |
1623 | + | func iE (eR,hS) = { | |
1624 | + | let gK = eR._1 | |
1625 | + | let iy = parseIntValue(hS) | |
1626 | + | let iF = if ((size(iu) > gK)) | |
1627 | + | then parseIntValue(iu[gK]) | |
1625 | 1628 | else 0 | |
1626 | - | let | |
1627 | - | then parseIntValue( | |
1629 | + | let iG = if ((size(iw) > gK)) | |
1630 | + | then parseIntValue(iw[gK]) | |
1628 | 1631 | else 0 | |
1629 | - | if (( | |
1630 | - | then $Tuple4(( | |
1631 | - | else if (( | |
1632 | - | then if (( | |
1633 | - | then throw((((("Attempt to take " + | |
1632 | + | if ((iy == 0)) | |
1633 | + | then $Tuple4((gK + 1), (eR._2 :+ toString(iF)), (eR._3 :+ toString(iG)), eR._4) | |
1634 | + | else if ((iy > 0)) | |
1635 | + | then if ((iy > iG)) | |
1636 | + | then throw((((("Attempt to take " + hS) + " from backpack, but only ") + toString(iG)) + " available")) | |
1634 | 1637 | else { | |
1635 | - | let | |
1636 | - | $Tuple4(( | |
1638 | + | let fT = (eH((iF + iy), bc) - eH(iF, bc)) | |
1639 | + | $Tuple4((gK + 1), (eR._2 :+ toString((iF + iy))), (eR._3 :+ toString((iG - iy))), (eR._4 + fT)) | |
1637 | 1640 | } | |
1638 | - | else if ((-( | |
1639 | - | then throw((((("Attempt to take " + toString(-( | |
1641 | + | else if ((-(iy) > iF)) | |
1642 | + | then throw((((("Attempt to take " + toString(-(iy))) + " from warehouse, but only ") + toString(iF)) + " available")) | |
1640 | 1643 | else { | |
1641 | - | let | |
1642 | - | $Tuple4(( | |
1644 | + | let fT = (eH((iF + iy), bc) - eH(iF, bc)) | |
1645 | + | $Tuple4((gK + 1), (eR._2 :+ toString((iF + iy))), (eR._3 :+ toString((iG - iy))), (eR._4 + fT)) | |
1643 | 1646 | } | |
1644 | 1647 | } | |
1645 | 1648 | ||
1646 | - | let | |
1649 | + | let gu = if ((size(ir) != 0)) | |
1647 | 1650 | then { | |
1648 | - | let | |
1649 | - | let | |
1650 | - | let | |
1651 | - | func | |
1652 | - | then | |
1653 | - | else | |
1654 | - | ||
1655 | - | func | |
1656 | - | then | |
1651 | + | let eT = ir | |
1652 | + | let eU = size(eT) | |
1653 | + | let eV = $Tuple4(0, nil, nil, gq._4) | |
1654 | + | func hI (eX,eY) = if ((eY >= eU)) | |
1655 | + | then eX | |
1656 | + | else iE(eX, eT[eY]) | |
1657 | + | ||
1658 | + | func hJ (eX,eY) = if ((eY >= eU)) | |
1659 | + | then eX | |
1657 | 1660 | else throw("List size exceeds 50") | |
1658 | 1661 | ||
1659 | - | hI( | |
1662 | + | hJ(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(eV, 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) | |
1660 | 1663 | } | |
1661 | - | else $Tuple4(0, | |
1662 | - | let | |
1663 | - | if (( | |
1664 | - | then throw((((("Attempt to put total " + toString( | |
1665 | - | else $Tuple7(makeString( | |
1664 | + | else $Tuple4(0, iu, iw, gq._4) | |
1665 | + | let iH = gu._4 | |
1666 | + | if ((iH > gZ)) | |
1667 | + | then throw((((("Attempt to put total " + toString(iH)) + " stuff, but only ") + toString(gZ)) + " warehouse space left")) | |
1668 | + | else $Tuple7(makeString(fc._2, "_"), makeString(gq._2, "_"), makeString_2C(gu._2, "_"), makeString(fc._3, "_"), makeString(gq._3, "_"), makeString_2C(gu._3, "_"), iH) | |
1666 | 1669 | } | |
1667 | 1670 | } | |
1668 | 1671 | ||
1669 | 1672 | ||
1670 | - | func | |
1671 | - | let | |
1672 | - | let | |
1673 | - | let | |
1674 | - | let | |
1675 | - | let | |
1676 | - | let | |
1677 | - | let | |
1678 | - | let | |
1679 | - | let | |
1680 | - | let | |
1681 | - | $Tuple2([IntegerEntry( | |
1682 | - | } | |
1683 | - | ||
1684 | - | ||
1685 | - | func | |
1673 | + | func iI (iJ,iK) = { | |
1674 | + | let bQ = toString(iJ) | |
1675 | + | let iL = hf(toBigInt(iK)) | |
1676 | + | let iM = valueOrElse(getInteger(eo()), (en + 1)) | |
1677 | + | let es = toString(iM) | |
1678 | + | let ho = toInt((iL % eh)) | |
1679 | + | let gN = hm(iL, ho) | |
1680 | + | let dv = aU[ho] | |
1681 | + | let iN = Issue(eG(es, "S"), makeString([es, "S", gN, dv], "_"), 1, 0, false) | |
1682 | + | let bu = calculateAssetId(iN) | |
1683 | + | let iO = toBase58String(bu) | |
1684 | + | $Tuple2([IntegerEntry(eo(), (iM + 1)), iN, StringEntry(er(es), iO), StringEntry(bt(iO), bQ), StringEntry(eu(es), bQ), IntegerEntry(bD(iO), 0), IntegerEntry(et(iO, bQ), 0), ScriptTransfer(iJ, 1, bu)], $Tuple2(iO, dv)) | |
1685 | + | } | |
1686 | + | ||
1687 | + | ||
1688 | + | func iP (bQ,iQ,iR) = if (!(sigVerify_8Kb(iQ, iR, cy))) | |
1686 | 1689 | then throw("signature does not match") | |
1687 | 1690 | else { | |
1688 | - | let | |
1689 | - | let | |
1690 | - | let | |
1691 | - | let | |
1692 | - | let | |
1693 | - | let | |
1694 | - | let | |
1695 | - | let | |
1696 | - | if (if (( | |
1691 | + | let fp = split_4C(toUtf8String(iQ), ";") | |
1692 | + | let iS = split_4C(fp[0], "|") | |
1693 | + | let iT = split(iS[eC], "_") | |
1694 | + | let iU = parseIntValue(iT[0]) | |
1695 | + | let iV = parseIntValue(iT[1]) | |
1696 | + | let iW = split(fp[1], ":") | |
1697 | + | let iX = iW[0] | |
1698 | + | let iY = parseIntValue(iS[eD]) | |
1699 | + | if (if ((iY > (lastBlock.timestamp + dZ))) | |
1697 | 1700 | then true | |
1698 | - | else ((lastBlock.timestamp - | |
1699 | - | then throw(((("signature outdated: logTime=" + toString( | |
1701 | + | else ((lastBlock.timestamp - dZ) > iY)) | |
1702 | + | then throw(((("signature outdated: logTime=" + toString(iY)) + ", bcTime=") + toString(lastBlock.timestamp))) | |
1700 | 1703 | else { | |
1701 | - | let | |
1702 | - | let | |
1703 | - | if (( | |
1704 | - | then throw(((("Tx ids don't match! In state: " + | |
1704 | + | let iZ = iW[1] | |
1705 | + | let ja = valueOrElse(getString(dK(bQ)), "") | |
1706 | + | if ((ja != iZ)) | |
1707 | + | then throw(((("Tx ids don't match! In state: " + ja) + ", in msg: ") + iZ)) | |
1705 | 1708 | else { | |
1706 | - | let B = valueOrErrorMessage(getString( | |
1707 | - | let | |
1708 | - | let | |
1709 | - | let | |
1710 | - | if (( | |
1711 | - | then throw(((("oldHealth=" + toString( | |
1712 | - | else if ((0 >= | |
1709 | + | let B = valueOrErrorMessage(getString(bM(bQ)), "You don't have a duck staked") | |
1710 | + | let jb = A(B) | |
1711 | + | let jc = aj(valueOrElse(getInteger(E(B)), 0)) | |
1712 | + | let jd = valueOrElse(getInteger(jb), jc) | |
1713 | + | if ((jd != iU)) | |
1714 | + | then throw(((("oldHealth=" + toString(jd)) + " from state does not match one from flight log=") + toString(iU))) | |
1715 | + | else if ((0 >= iU)) | |
1713 | 1716 | then throw("You can't fly with zero health") | |
1714 | - | else if (!( | |
1717 | + | else if (!(gw(B))) | |
1715 | 1718 | then throw("Equipment incompatible") | |
1716 | 1719 | else { | |
1717 | - | let | |
1718 | - | then | |
1720 | + | let je = if ((size(iS) > eE)) | |
1721 | + | then iS[eE] | |
1719 | 1722 | else "" | |
1720 | - | let | |
1721 | - | then | |
1723 | + | let jf = if ((size(iS) > eF)) | |
1724 | + | then iS[eF] | |
1722 | 1725 | else "" | |
1723 | - | let | |
1724 | - | then ( | |
1726 | + | let jg = if (if ((iV > 0)) | |
1727 | + | then (je == "$") | |
1725 | 1728 | else false) | |
1726 | - | then | |
1729 | + | then dB(invoke(dd, "sendUsdtPrize", [bQ], nil)) | |
1727 | 1730 | else 0 | |
1728 | - | $Tuple5( | |
1731 | + | $Tuple5(iV, B, jg, iX, jf) | |
1729 | 1732 | } | |
1730 | 1733 | } | |
1731 | 1734 | } | |
1732 | 1735 | } | |
1733 | 1736 | ||
1734 | 1737 | ||
1735 | - | func | |
1736 | - | let | |
1737 | - | let | |
1738 | - | let | |
1739 | - | let | |
1740 | - | (( | |
1741 | - | } | |
1742 | - | ||
1743 | - | ||
1744 | - | func | |
1745 | - | let | |
1746 | - | then $Tuple2( | |
1738 | + | func jh (Q,ji) = { | |
1739 | + | let ia = valueOrElse(getInteger(bD(Q)), 0) | |
1740 | + | let jj = valueOrElse(getInteger(bx(aI, Q)), 0) | |
1741 | + | let jk = (ia / 6) | |
1742 | + | let jl = (ia / 7) | |
1743 | + | ((aL + fraction(aL, ((ia + jk) + (2 * jl)), 5)) + fraction(aL, jj, (ji * 5))) | |
1744 | + | } | |
1745 | + | ||
1746 | + | ||
1747 | + | func jm (c,jn,jo) = { | |
1748 | + | let jp = if ((jn == ez)) | |
1749 | + | then $Tuple2(jo, valueOrElse(getString(bM(c)), "")) | |
1747 | 1750 | else { | |
1748 | - | let B = valueOrErrorMessage(getString( | |
1749 | - | let | |
1750 | - | let | |
1751 | - | if (( | |
1752 | - | then throw((("Duck location type is " + | |
1753 | - | else $Tuple2( | |
1754 | - | } | |
1755 | - | let Q = | |
1756 | - | let | |
1757 | - | let | |
1758 | - | let | |
1759 | - | let | |
1760 | - | let | |
1761 | - | if (( | |
1762 | - | then throw(( | |
1751 | + | let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked") | |
1752 | + | let jq = valueOrElse(getString(bO(B)), aN) | |
1753 | + | let cj = split(value(jq), "_") | |
1754 | + | if ((cj[br] != "L")) | |
1755 | + | then throw((("Duck location type is " + cj[br]) + ", but should be L")) | |
1756 | + | else $Tuple2(cj[bs], B) | |
1757 | + | } | |
1758 | + | let Q = jp._1 | |
1759 | + | let jr = jp._2 | |
1760 | + | let js = value(assetInfo(fromBase58String(Q))) | |
1761 | + | let jt = bw(Q) | |
1762 | + | let ju = valueOrErrorMessage(getInteger(jt), (("Land " + js.name) + " is not staked")) | |
1763 | + | let jv = valueOrErrorMessage(getString(bt(Q)), (("NFT " + js.name) + " is orphaned")) | |
1764 | + | if ((jv != c)) | |
1765 | + | then throw((aF + " is not yours")) | |
1763 | 1766 | else { | |
1764 | - | let | |
1765 | - | $Tuple4( | |
1766 | - | } | |
1767 | - | } | |
1768 | - | ||
1769 | - | ||
1770 | - | func | |
1767 | + | let jw = split(js.description, "_") | |
1768 | + | $Tuple4(jr, Q, jw, ju) | |
1769 | + | } | |
1770 | + | } | |
1771 | + | ||
1772 | + | ||
1773 | + | func jx (c,eI,jn,jo) = if ((0 > eI)) | |
1771 | 1774 | then throw("Negative amount") | |
1772 | 1775 | else { | |
1773 | - | let | |
1774 | - | let | |
1775 | - | let | |
1776 | - | let | |
1777 | - | if ((0 > | |
1778 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
1776 | + | let ga = jm(c, jn, jo) | |
1777 | + | let dH = ga._3[dk] | |
1778 | + | let gG = gM(ga._3[dl]) | |
1779 | + | let gQ = (lastBlock.timestamp - ga._4) | |
1780 | + | if ((0 > gQ)) | |
1781 | + | then throw(((("Saved timestamp is in future, saved = " + toString(ga._4)) + ", current = ") + toString(lastBlock.timestamp))) | |
1779 | 1782 | else { | |
1780 | - | let | |
1781 | - | let | |
1782 | - | let | |
1783 | - | if (( | |
1784 | - | then throw(((("Not enough resources, available = " + toString( | |
1783 | + | let ji = dG(dH) | |
1784 | + | let jy = jh(ga._2, ji) | |
1785 | + | let jz = fraction(gQ, (jy * ji), a) | |
1786 | + | if ((eI > jz)) | |
1787 | + | then throw(((("Not enough resources, available = " + toString(jz)) + ", requested = ") + toString(eI))) | |
1785 | 1788 | else { | |
1786 | - | let | |
1787 | - | let | |
1788 | - | let | |
1789 | - | let | |
1790 | - | let | |
1791 | - | let | |
1792 | - | let | |
1793 | - | let | |
1794 | - | let | |
1795 | - | if (if (( | |
1796 | - | then ( | |
1789 | + | let jA = fraction((jz - eI), a, (jy * ji)) | |
1790 | + | let jB = (lastBlock.timestamp - jA) | |
1791 | + | let hZ = (ji / cH) | |
1792 | + | let gY = gU(gG, (gQ - jA), hZ, jy) | |
1793 | + | let hY = bC(ga._2) | |
1794 | + | let ia = valueOrElse(getInteger(bD(ga._2)), 0) | |
1795 | + | let hP = hX(hY, hZ, ia) | |
1796 | + | let ig = split(hP[bh], "_") | |
1797 | + | let gZ = parseIntValue(ig[bk]) | |
1798 | + | if (if ((jn == ez)) | |
1799 | + | then (eI > gZ) | |
1797 | 1800 | else false) | |
1798 | - | then throw((("Only " + toString( | |
1801 | + | then throw((("Only " + toString(gZ)) + " space left in warehouse")) | |
1799 | 1802 | else { | |
1800 | - | let | |
1801 | - | let | |
1802 | - | let | |
1803 | - | let | |
1804 | - | let | |
1805 | - | then $Tuple4( | |
1806 | - | else if (( | |
1807 | - | then $Tuple4( | |
1803 | + | let hL = bN(ga._1) | |
1804 | + | let io = hK(hL) | |
1805 | + | let gX = split(io[bn], "_") | |
1806 | + | let gW = split(hP[be], "_") | |
1807 | + | let jC = if ((jn == ez)) | |
1808 | + | then $Tuple4(gO(gW, gG, (gQ - jA), hZ, jy), io[bn], (parseIntValue(ig[bj]) + gY._2), (parseIntValue(ig[bk]) - gY._2)) | |
1809 | + | else if ((jn == eA)) | |
1810 | + | then $Tuple4(hP[be], gO(gX, gG, (gQ - jA), hZ, jy), parseIntValue(ig[bj]), parseIntValue(ig[bk])) | |
1808 | 1811 | else { | |
1809 | - | let | |
1810 | - | let | |
1811 | - | $Tuple4( | |
1812 | + | let jD = gV(gW, gX, gY, gZ) | |
1813 | + | let jE = min([parseIntValue(ig[bk]), gY._2]) | |
1814 | + | $Tuple4(jD._1, jD._2, (parseIntValue(ig[bj]) + jE), (parseIntValue(ig[bk]) - jE)) | |
1812 | 1815 | } | |
1813 | - | let | |
1814 | - | let | |
1815 | - | let | |
1816 | - | let | |
1817 | - | $Tuple5([IntegerEntry( | |
1816 | + | let jF = jC._1 | |
1817 | + | let jG = jC._2 | |
1818 | + | let jH = jC._3 | |
1819 | + | let jI = jC._4 | |
1820 | + | $Tuple5([IntegerEntry(bw(ga._2), jB), IntegerEntry(bz(aF, ga._2, c), jB)], hL, [io[bm], jG, io[bo], io[bp]], hY, [hP[bd], jF, hP[bf], hP[bg], makeString([ig[bi], toString(jH), toString(jI), ig[bl]], "_")]) | |
1818 | 1821 | } | |
1819 | 1822 | } | |
1820 | 1823 | } | |
1821 | 1824 | } | |
1822 | 1825 | ||
1823 | 1826 | ||
1824 | - | func | |
1825 | - | let | |
1826 | - | let | |
1827 | - | let | |
1828 | - | | |
1829 | - | } | |
1830 | - | ||
1831 | - | ||
1832 | - | func | |
1833 | - | let c = toString( | |
1834 | - | let | |
1835 | - | let | |
1836 | - | let | |
1837 | - | let | |
1838 | - | if (if (!( | |
1839 | - | then ( | |
1827 | + | func jJ (c,Q,ji,jn) = { | |
1828 | + | let jt = bw(Q) | |
1829 | + | let ju = value(getInteger(jt)) | |
1830 | + | let jz = (fraction((lastBlock.timestamp - ju), jh(Q, ji), a) * ji) | |
1831 | + | jx(c, jz, jn, Q) | |
1832 | + | } | |
1833 | + | ||
1834 | + | ||
1835 | + | func jK (fe,iJ,jL,Q) = { | |
1836 | + | let c = toString(iJ) | |
1837 | + | let ga = jm(c, eB, Q) | |
1838 | + | let ji = dG(ga._3[dk]) | |
1839 | + | let jM = bD(ga._2) | |
1840 | + | let jN = valueOrElse(getInteger(jM), 0) | |
1841 | + | if (if (!(cu)) | |
1842 | + | then (jN >= 3) | |
1840 | 1843 | else false) | |
1841 | 1844 | then throw("Currently max infrastructure level = 3") | |
1842 | 1845 | else { | |
1843 | - | let | |
1844 | - | let | |
1845 | - | if (if ( | |
1846 | - | then ( | |
1846 | + | let jO = ((sqrt(ji, 0, 0, DOWN) / 5) + 2) | |
1847 | + | let ao = (jN + 1) | |
1848 | + | if (if (cu) | |
1849 | + | then (ao > jO) | |
1847 | 1850 | else false) | |
1848 | - | then throw(("Currently max infrastructure level = " + toString( | |
1851 | + | then throw(("Currently max infrastructure level = " + toString(jO))) | |
1849 | 1852 | else { | |
1850 | - | let | |
1851 | - | if (if (!( | |
1852 | - | then ( | |
1853 | + | let jP = fraction(ec, (ji * ao), cH) | |
1854 | + | if (if (!(fe)) | |
1855 | + | then (jL != jP) | |
1853 | 1856 | else false) | |
1854 | - | then throw(("Payment attached should be " + toString( | |
1857 | + | then throw(("Payment attached should be " + toString(jP))) | |
1855 | 1858 | else { | |
1856 | - | let | |
1857 | - | let | |
1858 | - | let | |
1859 | - | let | |
1860 | - | let | |
1861 | - | let | |
1862 | - | let | |
1863 | - | let | |
1864 | - | let | |
1865 | - | let | |
1866 | - | let | |
1867 | - | let | |
1868 | - | $Tuple3(([IntegerEntry( | |
1859 | + | let hL = bN(ga._1) | |
1860 | + | let io = hK(hL) | |
1861 | + | let jQ = split(io[bo], "_") | |
1862 | + | let jR = fraction(cC, (ji * ao), cH) | |
1863 | + | let jS = makeString(fd(fe, jQ, jR), "_") | |
1864 | + | let jT = jJ(c, ga._2, ji, eB) | |
1865 | + | let jU = jT._5 | |
1866 | + | let jV = hM(jU[bd]) | |
1867 | + | let jW = makeString([split(jU[bd], "_")[0], toString(ao)], "_") | |
1868 | + | let jX = hM(jW) | |
1869 | + | let ig = split(jU[bh], "_") | |
1870 | + | let jY = makeString([ig[bi], ig[bj], toString(((parseIntValue(ig[bk]) + jX) - jV)), toString(jX)], "_") | |
1871 | + | $Tuple3(([IntegerEntry(jM, ao), IntegerEntry(et(ga._2, c), ao), StringEntry(hL, makeString([io[bm], jT._3[bn], jS, io[bp]], ":")), StringEntry(jT._4, makeString([jW, jU[be], jU[bf], jU[bg], jY], ":"))] ++ jT._1), ao, jR) | |
1869 | 1872 | } | |
1870 | 1873 | } | |
1871 | 1874 | } | |
1872 | 1875 | } | |
1873 | 1876 | ||
1874 | 1877 | ||
1875 | - | func | |
1876 | - | let | |
1877 | - | let | |
1878 | - | let | |
1879 | - | $Tuple2([IntegerEntry( | |
1880 | - | } | |
1881 | - | ||
1882 | - | ||
1883 | - | func | |
1884 | - | let | |
1885 | - | let c = valueOrErrorMessage(getString( | |
1886 | - | if (if (if ( | |
1887 | - | then ( | |
1878 | + | func jZ (ka,kb,kc,kd) = { | |
1879 | + | let ai = valueOrElse(getInteger(kb), 0) | |
1880 | + | let an = (ai + kd) | |
1881 | + | let ke = al(valueOrElse(getInteger(ka), 0), an) | |
1882 | + | $Tuple2([IntegerEntry(ka, ke[0]), IntegerEntry(kb, an), IntegerEntry(kc, (valueOrElse(getInteger(kc), 0) + ke[1]))], an) | |
1883 | + | } | |
1884 | + | ||
1885 | + | ||
1886 | + | func kf (B,kd) = { | |
1887 | + | let js = value(assetInfo(fromBase58String(B))) | |
1888 | + | let c = valueOrErrorMessage(getString(bL(B)), (("NFT " + js.name) + " is orphaned")) | |
1889 | + | if (if (if (cv) | |
1890 | + | then (js.issuer == this) | |
1888 | 1891 | else false) | |
1889 | - | then contains( | |
1892 | + | then contains(js.name, aH) | |
1890 | 1893 | else false) | |
1891 | - | then | |
1892 | - | else | |
1893 | - | } | |
1894 | - | ||
1895 | - | ||
1896 | - | func | |
1897 | - | ||
1898 | - | ||
1899 | - | func | |
1900 | - | let B = valueOrErrorMessage(getString( | |
1901 | - | let | |
1902 | - | let | |
1903 | - | if (!(isDefined( | |
1894 | + | then jZ(I(c), H(c), J(c), kd) | |
1895 | + | else jZ(E(B), D(B), F(B), kd) | |
1896 | + | } | |
1897 | + | ||
1898 | + | ||
1899 | + | func kg (c,kd) = jZ(I(c), H(c), J(c), kd) | |
1900 | + | ||
1901 | + | ||
1902 | + | func kh (c) = { | |
1903 | + | let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked") | |
1904 | + | let ki = bH(c) | |
1905 | + | let kj = getString(ki) | |
1906 | + | if (!(isDefined(kj))) | |
1904 | 1907 | then throw("You are not eligible for ONBOARD artifact") | |
1905 | 1908 | else { | |
1906 | - | let | |
1907 | - | let | |
1908 | - | if (isDefined( | |
1909 | - | then throw(("You already used your ONBOARD artifact on duck " + value( | |
1909 | + | let kk = bJ(c) | |
1910 | + | let kl = getString(kk) | |
1911 | + | if (isDefined(kl)) | |
1912 | + | then throw(("You already used your ONBOARD artifact on duck " + value(kl))) | |
1910 | 1913 | else { | |
1911 | - | let | |
1912 | - | let | |
1913 | - | if (isDefined( | |
1914 | - | then throw(((("The duck " + B) + " already got points from ONBOARD artifact from user ") + value( | |
1915 | - | else ([StringEntry( | |
1914 | + | let km = bI(B) | |
1915 | + | let kn = getString(km) | |
1916 | + | if (isDefined(kn)) | |
1917 | + | then throw(((("The duck " + B) + " already got points from ONBOARD artifact from user ") + value(kn))) | |
1918 | + | else ([StringEntry(kk, B), StringEntry(km, c)] ++ kf(B, af)._1) | |
1916 | 1919 | } | |
1917 | 1920 | } | |
1918 | 1921 | } | |
1919 | 1922 | ||
1920 | 1923 | ||
1921 | - | func | |
1922 | - | let | |
1923 | - | let Q = | |
1924 | - | let | |
1925 | - | let | |
1926 | - | if ((valueOrElse(getInteger( | |
1924 | + | func ko (c,jo) = { | |
1925 | + | let ga = jm(c, eB, jo) | |
1926 | + | let Q = ga._2 | |
1927 | + | let ji = dG(ga._3[dk]) | |
1928 | + | let kp = bx(aI, Q) | |
1929 | + | if ((valueOrElse(getInteger(kp), 0) > 0)) | |
1927 | 1930 | then throw("Presale artifact is already activated") | |
1928 | - | else if ((parseIntValue( | |
1929 | - | then throw(((( | |
1931 | + | else if ((parseIntValue(ga._3[dj]) > en)) | |
1932 | + | then throw((((aF + " ") + Q) + " is not eligible for presale artifact")) | |
1930 | 1933 | else { | |
1931 | - | let | |
1932 | - | ((( | |
1934 | + | let jT = jJ(c, Q, ji, eB) | |
1935 | + | (((jT._1 :+ IntegerEntry(kp, ji)) :+ StringEntry(jT._2, makeString(jT._3, ":"))) :+ StringEntry(jT._4, makeString(jT._5, ":"))) | |
1933 | 1936 | } | |
1934 | 1937 | } | |
1935 | 1938 | ||
1936 | 1939 | ||
1937 | - | func | |
1938 | - | let | |
1939 | - | let | |
1940 | - | let | |
1941 | - | let | |
1942 | - | let | |
1943 | - | let | |
1944 | - | if (( | |
1940 | + | func kq (B) = { | |
1941 | + | let ci = valueOrElse(getInteger(dh, bT), 0) | |
1942 | + | let jq = split(valueOrElse(getString(bO(B)), aN), "_") | |
1943 | + | let aA = lastBlock.timestamp | |
1944 | + | let ck = cc(dh, ci) | |
1945 | + | let ce = ck[bY] | |
1946 | + | let cf = ck[bZ] | |
1947 | + | if ((jq[br] != "T")) | |
1945 | 1948 | then false | |
1946 | - | else if (if (if ((parseIntValue( | |
1947 | - | then ( | |
1949 | + | else if (if (if ((parseIntValue(jq[bq]) == ci)) | |
1950 | + | then (cf[cb] == "INPROGRESS") | |
1948 | 1951 | else false) | |
1949 | - | then (parseIntValue( | |
1952 | + | then (parseIntValue(ce[ca]) > aA) | |
1950 | 1953 | else false) | |
1951 | 1954 | then throw("Your duck is taking part in the tournament") | |
1952 | - | else | |
1953 | - | } | |
1954 | - | ||
1955 | - | ||
1956 | - | func | |
1957 | - | let B = valueOrErrorMessage(getString( | |
1958 | - | if ( | |
1955 | + | else dF(invoke(this, "exitTournamentInternal", [B], nil)) | |
1956 | + | } | |
1957 | + | ||
1958 | + | ||
1959 | + | func kr (ks,ao,kt,c,ku,kv) = { | |
1960 | + | let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked") | |
1961 | + | if (kq(B)) | |
1959 | 1962 | then throw("mergeInternal_checkTournament") | |
1960 | 1963 | else { | |
1961 | - | func | |
1962 | - | let | |
1963 | - | let | |
1964 | - | let | |
1965 | - | let | |
1966 | - | if (( | |
1967 | - | then throw(( | |
1964 | + | func kw (eR,Q) = { | |
1965 | + | let js = value(assetInfo(fromBase58String(Q))) | |
1966 | + | let jt = bw(Q) | |
1967 | + | let ju = valueOrErrorMessage(getInteger(jt), (("NFT " + js.name) + " is not staked")) | |
1968 | + | let jv = valueOrErrorMessage(getString(bt(Q)), (("NFT " + js.name) + " is orphaned")) | |
1969 | + | if ((jv != c)) | |
1970 | + | then throw((aF + " is not yours")) | |
1968 | 1971 | else { | |
1969 | - | let | |
1970 | - | let | |
1971 | - | if (if (( | |
1972 | - | then ( | |
1972 | + | let jw = split(js.description, "_") | |
1973 | + | let dv = jw[dm] | |
1974 | + | if (if ((eR._3 != "")) | |
1975 | + | then (eR._3 != dv) | |
1973 | 1976 | else false) | |
1974 | 1977 | then throw("Lands should be on the same continent to merge") | |
1975 | 1978 | else { | |
1976 | - | let | |
1977 | - | let | |
1978 | - | let | |
1979 | - | let | |
1980 | - | let | |
1981 | - | let | |
1982 | - | let | |
1983 | - | let | |
1984 | - | let | |
1985 | - | if (("S" == | |
1979 | + | let dH = jw[dk] | |
1980 | + | let kx = eR._1 | |
1981 | + | let gK = valueOrErrorMessage(indexOf(kx, dH), "You haven't passed all the lands needed") | |
1982 | + | let ky = (take(kx, gK) + drop(kx, (gK + 1))) | |
1983 | + | let ji = dG(dH) | |
1984 | + | let kz = (eR._2 + valueOrElse(getInteger(bx(aI, Q)), 0)) | |
1985 | + | let ia = valueOrElse(getInteger(bD(Q)), 0) | |
1986 | + | let kA = { | |
1987 | + | let cz = dH | |
1988 | + | if (("S" == cz)) | |
1986 | 1989 | then 3 | |
1987 | - | else if (("M" == | |
1990 | + | else if (("M" == cz)) | |
1988 | 1991 | then 4 | |
1989 | - | else if (("L" == | |
1992 | + | else if (("L" == cz)) | |
1990 | 1993 | then 5 | |
1991 | - | else if (("XL" == | |
1994 | + | else if (("XL" == cz)) | |
1992 | 1995 | then 6 | |
1993 | 1996 | else throw("Only S, M, L, XL can merge") | |
1994 | 1997 | } | |
1995 | - | if (( | |
1998 | + | if ((ia != kA)) | |
1996 | 1999 | then throw("All lands should be maxed to merge") | |
1997 | 2000 | else { | |
1998 | - | let | |
1999 | - | let | |
2000 | - | let | |
2001 | - | if ((0 > | |
2002 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
2001 | + | let es = jw[dj] | |
2002 | + | let gG = gM(jw[dl]) | |
2003 | + | let gQ = (lastBlock.timestamp - ju) | |
2004 | + | if ((0 > gQ)) | |
2005 | + | then throw(((("Saved timestamp is in future, saved = " + toString(ju)) + ", current = ") + toString(lastBlock.timestamp))) | |
2003 | 2006 | else { | |
2004 | - | let | |
2005 | - | let | |
2006 | - | let | |
2007 | - | let | |
2008 | - | let | |
2009 | - | let | |
2010 | - | let | |
2011 | - | let | |
2012 | - | if (!(isDefined( | |
2007 | + | let jy = jh(Q, ji) | |
2008 | + | let hZ = (ji / cH) | |
2009 | + | let jG = gO(split(eR._4, "_"), gG, gQ, hZ, jy) | |
2010 | + | let fb = gE(eR._6, gG, hZ, -1) | |
2011 | + | let kB = gE(eR._10, gG, hZ, -1) | |
2012 | + | let hu = gE(eR._9, gG, hZ, 1) | |
2013 | + | let kC = eR._7 | |
2014 | + | let dc = indexOf(kC, Q) | |
2015 | + | if (!(isDefined(dc))) | |
2013 | 2016 | then throw(("Your staked lands don't contain " + Q)) | |
2014 | 2017 | else { | |
2015 | - | let | |
2016 | - | let | |
2017 | - | $Tuple10( | |
2018 | - | then [DeleteEntry( | |
2019 | - | else nil)), | |
2018 | + | let kD = bv(Q) | |
2019 | + | let kE = valueOrElse(getString(kD), "") | |
2020 | + | $Tuple10(ky, kz, dv, jG, ((((((((((((eR._5 :+ DeleteEntry(bw(Q))) :+ DeleteEntry(bz(aF, Q, c))) :+ DeleteEntry(er(es))) :+ DeleteEntry(bt(Q))) :+ DeleteEntry(bD(Q))) :+ DeleteEntry(et(Q, c))) :+ DeleteEntry(bx(aI, Q))) :+ DeleteEntry(eu(es))) :+ DeleteEntry(bC(Q))) :+ DeleteEntry(kD)) :+ Burn(fromBase58String(Q), 1)) ++ (if ((kE != "")) | |
2021 | + | then [DeleteEntry(ep(kE))] | |
2022 | + | else nil)), fb, removeByIndex(kC, value(dc)), (eR._8 + ji), hu, kB) | |
2020 | 2023 | } | |
2021 | 2024 | } | |
2022 | 2025 | } | |
2024 | 2027 | } | |
2025 | 2028 | } | |
2026 | 2029 | ||
2027 | - | let | |
2028 | - | let | |
2029 | - | let | |
2030 | - | let | |
2031 | - | let | |
2032 | - | let | |
2033 | - | then split_51C(value( | |
2030 | + | let hL = bN(B) | |
2031 | + | let io = hK(hL) | |
2032 | + | let gF = split(valueOrElse(getString(dt()), "0_0_0_0_0_0"), "_") | |
2033 | + | let kF = dw(c) | |
2034 | + | let kG = getString(kF) | |
2035 | + | let kH = if (isDefined(kG)) | |
2036 | + | then split_51C(value(kG), "_") | |
2034 | 2037 | else nil | |
2035 | - | let | |
2036 | - | let | |
2037 | - | let | |
2038 | - | let | |
2039 | - | let | |
2040 | - | let | |
2041 | - | func | |
2042 | - | then | |
2043 | - | else | |
2044 | - | ||
2045 | - | func | |
2046 | - | then | |
2038 | + | let kI = split(value(assetInfo(fromBase58String(ku[0]))).description, "_")[dm] | |
2039 | + | let kJ = split(valueOrElse(getString(du(kI)), "0_0_0_0_0_0"), "_") | |
2040 | + | let fc = { | |
2041 | + | let eT = ku | |
2042 | + | let eU = size(eT) | |
2043 | + | let eV = $Tuple10(kt, 0, "", io[bn], nil, gF, kH, 0, split("0_0_0_0_0_0", "_"), kJ) | |
2044 | + | func eW (eX,eY) = if ((eY >= eU)) | |
2045 | + | then eX | |
2046 | + | else kw(eX, eT[eY]) | |
2047 | + | ||
2048 | + | func eZ (eX,eY) = if ((eY >= eU)) | |
2049 | + | then eX | |
2047 | 2050 | else throw("List size exceeds 5") | |
2048 | 2051 | ||
2049 | - | | |
2052 | + | eZ(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5) | |
2050 | 2053 | } | |
2051 | - | let | |
2052 | - | let | |
2053 | - | let | |
2054 | - | let | |
2055 | - | let | |
2056 | - | let | |
2057 | - | let | |
2058 | - | let | |
2059 | - | let | |
2060 | - | let | |
2061 | - | let | |
2062 | - | $Tuple2(((((((((((((((( | |
2063 | - | then StringEntry( | |
2064 | - | else DeleteEntry( | |
2054 | + | let dv = fc._3 | |
2055 | + | let ho = valueOrErrorMessage(indexOf(aU, dv), ("Unknown continent: " + dv)) | |
2056 | + | let gN = ht(fc._9, (dG(ks) / cH)) | |
2057 | + | let iM = valueOrElse(getInteger(eo()), (en + 1)) | |
2058 | + | let kK = toString(iM) | |
2059 | + | let iN = Issue(eG(kK, ks), makeString([kK, ks, gN, dv], "_"), 1, 0, false) | |
2060 | + | let bu = calculateAssetId(iN) | |
2061 | + | let kL = toBase58String(bu) | |
2062 | + | let jS = makeString(fd((kv > 0), split(io[bo], "_"), kv), "_") | |
2063 | + | let kM = dx(c) | |
2064 | + | let kN = valueOrElse(getInteger(kM), 0) | |
2065 | + | $Tuple2((((((((((((((((fc._5 :+ (if ((size(fc._7) > 0)) | |
2066 | + | then StringEntry(kF, makeString_11C(fc._7, "_")) | |
2067 | + | else DeleteEntry(kF))) :+ IntegerEntry(kM, if ((fc._8 > kN)) | |
2065 | 2068 | then 0 | |
2066 | - | else ( | |
2067 | - | } | |
2068 | - | } | |
2069 | - | ||
2070 | - | ||
2071 | - | func | |
2072 | - | ||
2073 | - | ||
2074 | - | func | |
2075 | - | ||
2076 | - | ||
2077 | - | func | |
2078 | - | ||
2079 | - | ||
2080 | - | func | |
2081 | - | ||
2082 | - | ||
2083 | - | func | |
2084 | - | let | |
2085 | - | if ((4 == | |
2086 | - | then | |
2087 | - | else if ((3 == | |
2088 | - | then | |
2089 | - | else if ((5 == | |
2090 | - | then | |
2091 | - | else if ((2 == | |
2092 | - | then | |
2069 | + | else (kN - fc._8))) :+ IntegerEntry(eo(), (iM + 1))) :+ iN) :+ StringEntry(er(kK), kL)) :+ StringEntry(bt(kL), c)) :+ StringEntry(eu(kK), c)) :+ IntegerEntry(bx(aI, kL), fc._2)) :+ IntegerEntry(bD(kL), ao)) :+ IntegerEntry(et(kL, c), ao)) :+ StringEntry(hL, makeString([io[bm], fc._4, jS, io[bp]], ":"))) :+ StringEntry(dt(), makeString(fc._6, "_"))) :+ StringEntry(du(dv), makeString(fc._10, "_"))) :+ StringEntry(bO(B), makeString([dv, "L", kL], "_"))) :+ ScriptTransfer(addressFromStringValue(c), 1, bu)), kL) | |
2070 | + | } | |
2071 | + | } | |
2072 | + | ||
2073 | + | ||
2074 | + | func kO (c,ku) = kr("M", 3, "SSSS", c, ku, 0) | |
2075 | + | ||
2076 | + | ||
2077 | + | func kP (c,ku) = kr("L", 4, "SMM", c, ku, (cC * 4)) | |
2078 | + | ||
2079 | + | ||
2080 | + | func kQ (c,ku) = kr("XL", 5, "SSSML", c, ku, (cC * 47)) | |
2081 | + | ||
2082 | + | ||
2083 | + | func kR (c,ku) = kr("XXL", 6, "LXL", c, ku, (cC * 54)) | |
2084 | + | ||
2085 | + | ||
2086 | + | func kS (c,ku) = { | |
2087 | + | let cz = size(ku) | |
2088 | + | if ((4 == cz)) | |
2089 | + | then kO(c, ku) | |
2090 | + | else if ((3 == cz)) | |
2091 | + | then kP(c, ku) | |
2092 | + | else if ((5 == cz)) | |
2093 | + | then kQ(c, ku) | |
2094 | + | else if ((2 == cz)) | |
2095 | + | then kR(c, ku) | |
2093 | 2096 | else throw("Unknown merge") | |
2094 | 2097 | } | |
2095 | 2098 | ||
2096 | 2099 | ||
2097 | - | func | |
2098 | - | then valueOrElse(getBoolean( | |
2100 | + | func kT (gK) = if (if ((gK.originCaller != dd)) | |
2101 | + | then valueOrElse(getBoolean(dJ()), false) | |
2099 | 2102 | else false) | |
2100 | 2103 | then throw("Contracts are under maintenance") | |
2101 | - | else [StringEntry( | |
2102 | - | ||
2103 | - | ||
2104 | - | @Callable( | |
2105 | - | func constructorV1 ( | |
2104 | + | else [StringEntry(dK(toString(gK.originCaller)), toBase58String(gK.transactionId))] | |
2105 | + | ||
2106 | + | ||
2107 | + | @Callable(gK) | |
2108 | + | func constructorV1 (kU) = if ((gK.caller != this)) | |
2106 | 2109 | then throw("Permission denied") | |
2107 | - | else [StringEntry( | |
2108 | - | ||
2109 | - | ||
2110 | - | ||
2111 | - | @Callable( | |
2112 | - | func saveInteger ( | |
2110 | + | else [StringEntry(cX(), kU)] | |
2111 | + | ||
2112 | + | ||
2113 | + | ||
2114 | + | @Callable(gK) | |
2115 | + | func saveInteger (cP,eI) = if ((gK.caller != this)) | |
2113 | 2116 | then throw("saveInteger is not public method") | |
2114 | - | else [IntegerEntry( | |
2115 | - | ||
2116 | - | ||
2117 | - | ||
2118 | - | @Callable( | |
2119 | - | func setBlocked ( | |
2117 | + | else [IntegerEntry(cP, eI)] | |
2118 | + | ||
2119 | + | ||
2120 | + | ||
2121 | + | @Callable(gK) | |
2122 | + | func setBlocked (kV) = if ((gK.caller != this)) | |
2120 | 2123 | then throw("permission denied") | |
2121 | - | else [BooleanEntry( | |
2122 | - | ||
2123 | - | ||
2124 | - | ||
2125 | - | @Callable( | |
2124 | + | else [BooleanEntry(dJ(), kV)] | |
2125 | + | ||
2126 | + | ||
2127 | + | ||
2128 | + | @Callable(gK) | |
2126 | 2129 | func stakeLand () = { | |
2127 | - | let | |
2128 | - | if ((size( | |
2130 | + | let kW = kT(gK) | |
2131 | + | if ((size(gK.payments) != 1)) | |
2129 | 2132 | then throw("Exactly one payment required") | |
2130 | 2133 | else { | |
2131 | - | let | |
2132 | - | let | |
2133 | - | let | |
2134 | - | if (( | |
2135 | - | then throw((("NFT " + | |
2134 | + | let kX = value(gK.payments[0]) | |
2135 | + | let bu = value(kX.assetId) | |
2136 | + | let cO = toString(gK.caller) | |
2137 | + | if ((kX.amount != 1)) | |
2138 | + | then throw((("NFT " + aF) + " token should be attached as payment")) | |
2136 | 2139 | else { | |
2137 | - | let | |
2138 | - | if (( | |
2140 | + | let js = value(assetInfo(bu)) | |
2141 | + | if ((js.issuer != this)) | |
2139 | 2142 | then throw("Unknown issuer of token") | |
2140 | - | else if (!(contains( | |
2141 | - | then throw((("Only NFT " + | |
2143 | + | else if (!(contains(js.name, aF))) | |
2144 | + | then throw((("Only NFT " + aF) + " tokens are accepted")) | |
2142 | 2145 | else { | |
2143 | - | let | |
2144 | - | let | |
2145 | - | then dropRight( | |
2146 | - | else if (contains( | |
2147 | - | then dropRight( | |
2148 | - | else dropRight( | |
2149 | - | if (!(isDefined(parseInt( | |
2150 | - | then throw(("Cannot parse land number from " + | |
2146 | + | let kY = drop(js.name, 4) | |
2147 | + | let es = if (contains(kY, "XXL")) | |
2148 | + | then dropRight(kY, 3) | |
2149 | + | else if (contains(kY, "XL")) | |
2150 | + | then dropRight(kY, 2) | |
2151 | + | else dropRight(kY, 1) | |
2152 | + | if (!(isDefined(parseInt(es)))) | |
2153 | + | then throw(("Cannot parse land number from " + js.name)) | |
2151 | 2154 | else { | |
2152 | - | let Q = toBase58String( | |
2153 | - | let | |
2154 | - | if (isDefined(getInteger( | |
2155 | - | then throw((("NFT " + | |
2155 | + | let Q = toBase58String(bu) | |
2156 | + | let jt = bw(Q) | |
2157 | + | if (isDefined(getInteger(jt))) | |
2158 | + | then throw((("NFT " + js.name) + " is already staked")) | |
2156 | 2159 | else { | |
2157 | - | let | |
2158 | - | let | |
2159 | - | let | |
2160 | - | let | |
2161 | - | let | |
2162 | - | let | |
2163 | - | let | |
2164 | - | let | |
2165 | - | let | |
2166 | - | let | |
2167 | - | let | |
2168 | - | then split_51C(value( | |
2160 | + | let jw = split(js.description, "_") | |
2161 | + | let gG = gM(jw[dl]) | |
2162 | + | let ji = dG(jw[dk]) | |
2163 | + | let hZ = (ji / cH) | |
2164 | + | let fb = gL(gG, hZ, 1) | |
2165 | + | let kZ = du(jw[dm]) | |
2166 | + | let kJ = split(valueOrElse(getString(kZ), "0_0_0_0_0_0"), "_") | |
2167 | + | let la = makeString(gE(kJ, gG, hZ, 1), "_") | |
2168 | + | let kF = dw(cO) | |
2169 | + | let kG = getString(kF) | |
2170 | + | let kC = if (isDefined(kG)) | |
2171 | + | then split_51C(value(kG), "_") | |
2169 | 2172 | else nil | |
2170 | - | if (containsElement( | |
2173 | + | if (containsElement(kC, Q)) | |
2171 | 2174 | then throw(("Your staked lands already contain " + Q)) | |
2172 | - | else if ((size( | |
2173 | - | then throw((("Your already staked max (" + toString( | |
2175 | + | else if ((size(kC) >= aK)) | |
2176 | + | then throw((("Your already staked max (" + toString(aK)) + ") lands")) | |
2174 | 2177 | else { | |
2175 | - | let | |
2176 | - | let | |
2177 | - | let | |
2178 | - | let | |
2179 | - | $Tuple2(([IntegerEntry( | |
2178 | + | let ia = valueOrElse(getInteger(bD(Q)), 0) | |
2179 | + | let kM = dx(cO) | |
2180 | + | let lb = valueOrElse(getInteger(kM), 0) | |
2181 | + | let lc = invoke(dg, "onStakeUnstakeLand", [cO], nil) | |
2182 | + | $Tuple2(([IntegerEntry(jt, lastBlock.timestamp), IntegerEntry(bz(aF, Q, cO), lastBlock.timestamp), StringEntry(kF, makeString_11C((kC :+ Q), "_")), IntegerEntry(kM, (lb + ji)), StringEntry(bt(Q), cO), StringEntry(eu(es), cO), IntegerEntry(et(Q, cO), ia), StringEntry(dt(), fb), StringEntry(kZ, la)] ++ kW), lc) | |
2180 | 2183 | } | |
2181 | 2184 | } | |
2182 | 2185 | } | |
2187 | 2190 | ||
2188 | 2191 | ||
2189 | 2192 | ||
2190 | - | @Callable( | |
2191 | - | func unstakeLand ( | |
2192 | - | let | |
2193 | - | if ((size( | |
2193 | + | @Callable(gK) | |
2194 | + | func unstakeLand (jo) = { | |
2195 | + | let kW = kT(gK) | |
2196 | + | if ((size(gK.payments) != 0)) | |
2194 | 2197 | then throw("No payments required") | |
2195 | 2198 | else { | |
2196 | - | let c = toString( | |
2197 | - | let | |
2198 | - | let Q = | |
2199 | - | let | |
2200 | - | let | |
2201 | - | let | |
2202 | - | let | |
2203 | - | let | |
2204 | - | let | |
2205 | - | let | |
2206 | - | let | |
2207 | - | let | |
2208 | - | let | |
2209 | - | let | |
2210 | - | let | |
2211 | - | if (!(isDefined( | |
2199 | + | let c = toString(gK.caller) | |
2200 | + | let ga = jm(c, eA, jo) | |
2201 | + | let Q = ga._2 | |
2202 | + | let jw = ga._3 | |
2203 | + | let kF = dw(c) | |
2204 | + | let gG = gM(jw[dl]) | |
2205 | + | let ji = dG(jw[dk]) | |
2206 | + | let hZ = (ji / cH) | |
2207 | + | let fb = gL(gG, hZ, -1) | |
2208 | + | let kZ = du(jw[dm]) | |
2209 | + | let kJ = split(valueOrElse(getString(kZ), "0_0_0_0_0_0"), "_") | |
2210 | + | let la = makeString(gE(kJ, gG, hZ, -1), "_") | |
2211 | + | let jT = jJ(c, Q, ji, eA) | |
2212 | + | let kC = split_51C(valueOrElse(getString(kF), ""), "_") | |
2213 | + | let dc = indexOf(kC, Q) | |
2214 | + | if (!(isDefined(dc))) | |
2212 | 2215 | then throw(("Your staked lands don't contain " + Q)) | |
2213 | 2216 | else { | |
2214 | - | let | |
2215 | - | let | |
2216 | - | if (( | |
2217 | - | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString( | |
2217 | + | let aA = lastBlock.timestamp | |
2218 | + | let ld = valueOrElse(getInteger(df, bP(c)), 0) | |
2219 | + | if ((ld >= aA)) | |
2220 | + | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(ld))) | |
2218 | 2221 | else { | |
2219 | - | let | |
2220 | - | if (( | |
2221 | - | then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString( | |
2222 | + | let le = (valueOrElse(getInteger(dg, b(c)), 0) + cD) | |
2223 | + | if ((le > aA)) | |
2224 | + | then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(le))) | |
2222 | 2225 | else { | |
2223 | - | let | |
2224 | - | let | |
2225 | - | let | |
2226 | + | let kM = dx(c) | |
2227 | + | let kN = valueOrElse(getInteger(kM), 0) | |
2228 | + | let lf = if ((ji > kN)) | |
2226 | 2229 | then 0 | |
2227 | - | else ( | |
2228 | - | let | |
2229 | - | $Tuple2(([ScriptTransfer( | |
2230 | - | then StringEntry( | |
2231 | - | else DeleteEntry( | |
2230 | + | else (kN - ji) | |
2231 | + | let lc = invoke(dg, "onStakeUnstakeLand", [c], nil) | |
2232 | + | $Tuple2(([ScriptTransfer(gK.caller, 1, fromBase58String(Q)), DeleteEntry(bw(Q)), DeleteEntry(bz(aF, Q, c)), StringEntry(dt(), fb), StringEntry(kZ, la), StringEntry(jT._2, makeString(jT._3, ":")), if ((size(kC) > 1)) | |
2233 | + | then StringEntry(kF, makeString_11C(removeByIndex(kC, value(dc)), "_")) | |
2234 | + | else DeleteEntry(kF), IntegerEntry(kM, lf)] ++ kW), lc) | |
2232 | 2235 | } | |
2233 | 2236 | } | |
2234 | 2237 | } | |
2237 | 2240 | ||
2238 | 2241 | ||
2239 | 2242 | ||
2240 | - | @Callable( | |
2243 | + | @Callable(gK) | |
2241 | 2244 | func stakeDuck () = { | |
2242 | - | let | |
2243 | - | if ((size( | |
2245 | + | let kW = kT(gK) | |
2246 | + | if ((size(gK.payments) != 1)) | |
2244 | 2247 | then throw("Exactly one payment required") | |
2245 | 2248 | else { | |
2246 | - | let | |
2247 | - | let | |
2248 | - | let | |
2249 | - | if (( | |
2250 | - | then throw((("NFT " + | |
2249 | + | let kX = value(gK.payments[0]) | |
2250 | + | let bu = value(kX.assetId) | |
2251 | + | let cO = toString(gK.caller) | |
2252 | + | if ((kX.amount != 1)) | |
2253 | + | then throw((("NFT " + aG) + " token should be attached as payment")) | |
2251 | 2254 | else { | |
2252 | - | let | |
2253 | - | let | |
2254 | - | then ( | |
2255 | + | let js = value(assetInfo(bu)) | |
2256 | + | let lg = if (if (cv) | |
2257 | + | then (js.issuer == this) | |
2255 | 2258 | else false) | |
2256 | - | then contains( | |
2259 | + | then contains(js.name, aH) | |
2257 | 2260 | else false | |
2258 | - | if (if (if (( | |
2259 | - | then ( | |
2261 | + | if (if (if ((js.issuer != dW)) | |
2262 | + | then (js.issuer != dX) | |
2260 | 2263 | else false) | |
2261 | - | then !( | |
2264 | + | then !(lg) | |
2262 | 2265 | else false) | |
2263 | - | then throw((((("Unknown issuer of " + | |
2264 | - | else if (if (!(contains( | |
2265 | - | then !( | |
2266 | + | then throw((((("Unknown issuer of " + aG) + " or ") + aH) + " token")) | |
2267 | + | else if (if (!(contains(js.name, aG))) | |
2268 | + | then !(lg) | |
2266 | 2269 | else false) | |
2267 | - | then throw((((("Only NFT " + | |
2270 | + | then throw((((("Only NFT " + aG) + " or ") + aH) + " tokens are accepted")) | |
2268 | 2271 | else { | |
2269 | - | let | |
2270 | - | let | |
2271 | - | if (isDefined(getInteger( | |
2272 | - | then throw((("NFT " + | |
2273 | - | else if (isDefined(getString( | |
2274 | - | then throw(("You already staked one duck: " + | |
2272 | + | let lh = toBase58String(bu) | |
2273 | + | let jt = bw(lh) | |
2274 | + | if (isDefined(getInteger(jt))) | |
2275 | + | then throw((("NFT " + js.name) + " is already staked")) | |
2276 | + | else if (isDefined(getString(bM(cO)))) | |
2277 | + | then throw(("You already staked one duck: " + js.name)) | |
2275 | 2278 | else { | |
2276 | - | let | |
2277 | - | let | |
2278 | - | let | |
2279 | - | let | |
2280 | - | let | |
2281 | - | let | |
2282 | - | let | |
2283 | - | ([IntegerEntry( | |
2279 | + | let li = bO(lh) | |
2280 | + | let ch = getString(li) | |
2281 | + | let hL = bN(lh) | |
2282 | + | let lj = getString(hL) | |
2283 | + | let jb = A(lh) | |
2284 | + | let jc = aj(valueOrElse(getInteger(E(lh)), 0)) | |
2285 | + | let lk = valueOrElse(getInteger(jb), jc) | |
2286 | + | ([IntegerEntry(jt, lastBlock.timestamp), IntegerEntry(bz(aG, toBase58String(bu), cO), lastBlock.timestamp), StringEntry(bL(lh), cO), StringEntry(bM(cO), lh)] ++ (if (isDefined(ch)) | |
2284 | 2287 | then nil | |
2285 | - | else ([StringEntry( | |
2288 | + | else ([StringEntry(li, aN)] ++ (if (isDefined(lj)) | |
2286 | 2289 | then nil | |
2287 | - | else (([StringEntry( | |
2290 | + | else (([StringEntry(hL, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(jb, lk)) ++ kW))))) | |
2288 | 2291 | } | |
2289 | 2292 | } | |
2290 | 2293 | } | |
2293 | 2296 | ||
2294 | 2297 | ||
2295 | 2298 | ||
2296 | - | @Callable( | |
2297 | - | func unstakeDuck ( | |
2298 | - | let | |
2299 | - | if ((size( | |
2299 | + | @Callable(gK) | |
2300 | + | func unstakeDuck (lh) = { | |
2301 | + | let kW = kT(gK) | |
2302 | + | if ((size(gK.payments) != 0)) | |
2300 | 2303 | then throw("No payments required") | |
2301 | 2304 | else { | |
2302 | - | let | |
2303 | - | let | |
2304 | - | let | |
2305 | - | let | |
2306 | - | if (!(isDefined(getInteger( | |
2307 | - | then throw((("NFT " + | |
2308 | - | else if (!(isDefined(getString( | |
2309 | - | then throw((("The duck " + | |
2305 | + | let bu = fromBase58String(lh) | |
2306 | + | let cO = toString(gK.caller) | |
2307 | + | let js = value(assetInfo(bu)) | |
2308 | + | let jt = bw(lh) | |
2309 | + | if (!(isDefined(getInteger(jt)))) | |
2310 | + | then throw((("NFT " + js.name) + " is not staked")) | |
2311 | + | else if (!(isDefined(getString(bM(cO))))) | |
2312 | + | then throw((("The duck " + js.name) + " is not staked")) | |
2310 | 2313 | else { | |
2311 | - | let | |
2312 | - | if (( | |
2314 | + | let jv = valueOrErrorMessage(getString(bL(lh)), (("NFT " + js.name) + " is orphaned")) | |
2315 | + | if ((jv != cO)) | |
2313 | 2316 | then throw("Staked NFT is not yours") | |
2314 | - | else if ( | |
2317 | + | else if (kq(lh)) | |
2315 | 2318 | then throw("unstakeDuck_checkTournament") | |
2316 | 2319 | else { | |
2317 | - | let | |
2318 | - | let | |
2319 | - | let | |
2320 | - | if (( | |
2321 | - | then throw((("Please heal your duck to " + toString( | |
2322 | - | else ([ScriptTransfer( | |
2320 | + | let jb = A(lh) | |
2321 | + | let jc = aj(valueOrElse(getInteger(E(lh)), 0)) | |
2322 | + | let av = valueOrElse(getInteger(jb), jc) | |
2323 | + | if ((jc > av)) | |
2324 | + | then throw((("Please heal your duck to " + toString(jc)) + "hp before unstaking")) | |
2325 | + | else ([ScriptTransfer(gK.caller, 1, bu), DeleteEntry(jt), DeleteEntry(jb), DeleteEntry(bO(lh)), DeleteEntry(bL(lh)), DeleteEntry(bz(aG, lh, cO)), DeleteEntry(bM(cO))] ++ kW) | |
2323 | 2326 | } | |
2324 | 2327 | } | |
2325 | 2328 | } | |
2327 | 2330 | ||
2328 | 2331 | ||
2329 | 2332 | ||
2330 | - | @Callable( | |
2331 | - | func claimRes ( | |
2332 | - | let | |
2333 | - | if ((size( | |
2333 | + | @Callable(gK) | |
2334 | + | func claimRes (eI,ll) = { | |
2335 | + | let kW = kT(gK) | |
2336 | + | if ((size(gK.payments) != 0)) | |
2334 | 2337 | then throw("No payments required") | |
2335 | 2338 | else { | |
2336 | - | let c = toString( | |
2337 | - | let | |
2338 | - | let B = valueOrErrorMessage(getString( | |
2339 | - | $Tuple2((((( | |
2340 | - | } | |
2341 | - | } | |
2342 | - | ||
2343 | - | ||
2344 | - | ||
2345 | - | @Callable( | |
2346 | - | func claimResToWH ( | |
2347 | - | let | |
2348 | - | if ((size( | |
2339 | + | let c = toString(gK.originCaller) | |
2340 | + | let fj = jx(c, eI, eA, ll) | |
2341 | + | let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked") | |
2342 | + | $Tuple2(((((fj._1 ++ kf(B, fraction(X, eI, cG))._1) :+ StringEntry(fj._2, makeString(fj._3, ":"))) :+ StringEntry(fj._4, makeString(fj._5, ":"))) ++ kW), fj._3[bn]) | |
2343 | + | } | |
2344 | + | } | |
2345 | + | ||
2346 | + | ||
2347 | + | ||
2348 | + | @Callable(gK) | |
2349 | + | func claimResToWH (eI,ll) = { | |
2350 | + | let kW = kT(gK) | |
2351 | + | if ((size(gK.payments) != 0)) | |
2349 | 2352 | then throw("No payments required") | |
2350 | 2353 | else { | |
2351 | - | let c = toString( | |
2352 | - | let | |
2353 | - | $Tuple2((((( | |
2354 | - | } | |
2355 | - | } | |
2356 | - | ||
2357 | - | ||
2358 | - | ||
2359 | - | @Callable( | |
2360 | - | func flight ( | |
2361 | - | let | |
2362 | - | if ((size( | |
2354 | + | let c = toString(gK.originCaller) | |
2355 | + | let fj = jx(c, eI, ez, ll) | |
2356 | + | $Tuple2(((((fj._1 ++ kg(c, fraction(X, eI, cG))._1) :+ StringEntry(fj._2, makeString(fj._3, ":"))) :+ StringEntry(fj._4, makeString(fj._5, ":"))) ++ kW), fj._5[be]) | |
2357 | + | } | |
2358 | + | } | |
2359 | + | ||
2360 | + | ||
2361 | + | ||
2362 | + | @Callable(gK) | |
2363 | + | func flight (iQ,iR) = { | |
2364 | + | let kW = kT(gK) | |
2365 | + | if ((size(gK.payments) != 0)) | |
2363 | 2366 | then throw("No payments required") | |
2364 | 2367 | else { | |
2365 | - | let | |
2366 | - | let | |
2367 | - | let | |
2368 | - | let B = | |
2369 | - | let | |
2370 | - | let | |
2371 | - | let | |
2372 | - | if (( | |
2368 | + | let bQ = toString(gK.caller) | |
2369 | + | let hp = iP(bQ, iQ, iR) | |
2370 | + | let iV = hp._1 | |
2371 | + | let B = hp._2 | |
2372 | + | let li = bO(B) | |
2373 | + | let jq = valueOrElse(getString(li), aN) | |
2374 | + | let iX = hp._4 | |
2375 | + | if ((iX == jq)) | |
2373 | 2376 | then throw("You can't fly to the same location") | |
2374 | 2377 | else { | |
2375 | - | let | |
2376 | - | let | |
2377 | - | let | |
2378 | - | let | |
2379 | - | let | |
2380 | - | let | |
2381 | - | let | |
2382 | - | let | |
2383 | - | let | |
2384 | - | then if ( | |
2385 | - | then | |
2386 | - | else if (!( | |
2387 | - | then if (( | |
2388 | - | then $Tuple2( | |
2389 | - | else $Tuple2( | |
2390 | - | else if (( | |
2378 | + | let cr = split(iX, "_") | |
2379 | + | let lm = (cr[br] == "T") | |
2380 | + | let ln = (cr[br] == "D") | |
2381 | + | let gx = G(B) | |
2382 | + | let lo = valueOrElse(getString(gx), ",;,_,;,_,;,_,;,_,;,_,;,") | |
2383 | + | let lp = fk(lo, hp._5) | |
2384 | + | let lq = lp._1 | |
2385 | + | let lr = lp._2 | |
2386 | + | let ls = if (!(cl(dh, jq))) | |
2387 | + | then if (lm) | |
2388 | + | then cp(jq, iX, 5) | |
2389 | + | else if (!(ln)) | |
2390 | + | then if ((iV > 0)) | |
2391 | + | then $Tuple2(iX, iV) | |
2392 | + | else $Tuple2(jq, 0) | |
2393 | + | else if ((iV > 0)) | |
2391 | 2394 | then { | |
2392 | - | let | |
2393 | - | if (( | |
2394 | - | then $Tuple2( | |
2395 | + | let dA = invoke(this, "processDelivery", [B], nil) | |
2396 | + | if ((dA == dA)) | |
2397 | + | then $Tuple2(jq, iV) | |
2395 | 2398 | else throw("Strict value is not equal to itself.") | |
2396 | 2399 | } | |
2397 | - | else $Tuple2( | |
2398 | - | else if ( | |
2399 | - | then if (!( | |
2400 | + | else $Tuple2(jq, 0) | |
2401 | + | else if (cg(dh, jq)) | |
2402 | + | then if (!(cg(dh, iX))) | |
2400 | 2403 | then throw("Your duck is taking part in the tournament") | |
2401 | 2404 | else { | |
2402 | - | let | |
2403 | - | let | |
2404 | - | let | |
2405 | - | if (( | |
2406 | - | then | |
2407 | - | else if (( | |
2405 | + | let lt = parseIntValue(cr[bs]) | |
2406 | + | let lu = split(jq, "_") | |
2407 | + | let ci = valueOrElse(getInteger(dh, bT), 0) | |
2408 | + | if ((lt != (parseIntValue(lu[bs]) + 1))) | |
2409 | + | then cp(jq, iX, 7) | |
2410 | + | else if ((iV > 0)) | |
2408 | 2411 | then { | |
2409 | - | let | |
2410 | - | let | |
2411 | - | then invoke( | |
2412 | + | let lv = valueOrElse(getInteger(dh, bX(ci, B)), 0) | |
2413 | + | let lw = if ((lt > lv)) | |
2414 | + | then invoke(dh, "saveDuckResult", [B, lt], nil) | |
2412 | 2415 | else unit | |
2413 | - | if (( | |
2414 | - | then $Tuple2( | |
2416 | + | if ((lw == lw)) | |
2417 | + | then $Tuple2(iX, iV) | |
2415 | 2418 | else throw("Strict value is not equal to itself.") | |
2416 | 2419 | } | |
2417 | - | else $Tuple2( | |
2420 | + | else $Tuple2(jq, 0) | |
2418 | 2421 | } | |
2419 | - | else throw(("Unknown curLocation:" + | |
2420 | - | let | |
2421 | - | let | |
2422 | - | $Tuple2(((([StringEntry( | |
2422 | + | else throw(("Unknown curLocation:" + jq)) | |
2423 | + | let lx = ls._1 | |
2424 | + | let ly = ls._2 | |
2425 | + | $Tuple2(((([StringEntry(li, lx), StringEntry(gx, lq), IntegerEntry(A(B), ly)] ++ kW) ++ (if (lr) | |
2423 | 2426 | then [StringEntry(M(B), "0_0_0_0_0")] | |
2424 | - | else nil)) ++ | |
2425 | - | then | |
2426 | - | else | |
2427 | + | else nil)) ++ kf(B, if ((iV > 0)) | |
2428 | + | then Y | |
2429 | + | else Z)._1), hp._3) | |
2427 | 2430 | } | |
2428 | 2431 | } | |
2429 | 2432 | } | |
2430 | 2433 | ||
2431 | 2434 | ||
2432 | 2435 | ||
2433 | - | @Callable(gJ) | |
2434 | - | func heal (ly,lz,lA) = { | |
2435 | - | let kV = kS(gJ) | |
2436 | - | if (if (if ((0 > ly)) | |
2437 | - | then true | |
2438 | - | else (0 > lz)) | |
2436 | + | @Callable(gK) | |
2437 | + | func heal (lz,lA,lB) = { | |
2438 | + | let kW = kT(gK) | |
2439 | + | if (if (if ((0 > lz)) | |
2439 | 2440 | then true | |
2440 | 2441 | else (0 > lA)) | |
2442 | + | then true | |
2443 | + | else (0 > lB)) | |
2441 | 2444 | then throw("Quantity cannot be negative") | |
2442 | 2445 | else { | |
2443 | - | let B = valueOrErrorMessage(getString( | |
2444 | - | if ( | |
2446 | + | let B = valueOrErrorMessage(getString(bM(toString(gK.caller))), "You don't have a duck staked") | |
2447 | + | if (kq(B)) | |
2445 | 2448 | then throw("heal_checkTournament") | |
2446 | 2449 | else { | |
2447 | - | let | |
2448 | - | let | |
2449 | - | let | |
2450 | - | let | |
2451 | - | if (( | |
2452 | - | then throw((("HP should be < " + toString( | |
2450 | + | let lC = [lz, lA, lB] | |
2451 | + | let jb = A(B) | |
2452 | + | let jc = aj(valueOrElse(getInteger(E(B)), 0)) | |
2453 | + | let lD = valueOrElse(getInteger(jb), jc) | |
2454 | + | if ((lD >= jc)) | |
2455 | + | then throw((("HP should be < " + toString(jc)) + " to heal")) | |
2453 | 2456 | else { | |
2454 | - | let | |
2455 | - | let | |
2456 | - | let | |
2457 | + | let hL = bN(B) | |
2458 | + | let io = hK(hL) | |
2459 | + | let lE = if ((io[bp] == "")) | |
2457 | 2460 | then nil | |
2458 | - | else split_4C( | |
2459 | - | func | |
2460 | - | let | |
2461 | - | let | |
2462 | - | then parseIntValue( | |
2461 | + | else split_4C(io[bp], "_") | |
2462 | + | func lF (eR,co) = { | |
2463 | + | let dC = eR._2 | |
2464 | + | let hg = if ((size(lE) > dC)) | |
2465 | + | then parseIntValue(lE[dC]) | |
2463 | 2466 | else 0 | |
2464 | - | if ((3 > | |
2467 | + | if ((3 > dC)) | |
2465 | 2468 | then { | |
2466 | - | let | |
2467 | - | if (( | |
2468 | - | then throw(((("You have only " + toString( | |
2469 | - | else $Tuple3(( | |
2469 | + | let lG = lC[dC] | |
2470 | + | if ((lG > hg)) | |
2471 | + | then throw(((("You have only " + toString(hg)) + " of ") + aT[dC])) | |
2472 | + | else $Tuple3((eR._1 :+ toString((hg - lG))), (dC + 1), (eR._3 + (parseIntValue(split(co, "_")[aZ]) * lG))) | |
2470 | 2473 | } | |
2471 | - | else $Tuple3(( | |
2474 | + | else $Tuple3((eR._1 :+ toString(hg)), (dC + 1), eR._3) | |
2472 | 2475 | } | |
2473 | 2476 | ||
2474 | - | let | |
2475 | - | let | |
2476 | - | let | |
2477 | - | let | |
2478 | - | func | |
2479 | - | then | |
2480 | - | else | |
2481 | - | ||
2482 | - | func | |
2483 | - | then | |
2477 | + | let fj = { | |
2478 | + | let eT = aX | |
2479 | + | let eU = size(eT) | |
2480 | + | let eV = $Tuple3(nil, 0, 0) | |
2481 | + | func eW (eX,eY) = if ((eY >= eU)) | |
2482 | + | then eX | |
2483 | + | else lF(eX, eT[eY]) | |
2484 | + | ||
2485 | + | func eZ (eX,eY) = if ((eY >= eU)) | |
2486 | + | then eX | |
2484 | 2487 | else throw("List size exceeds 50") | |
2485 | 2488 | ||
2486 | - | | |
2489 | + | eZ(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eV, 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) | |
2487 | 2490 | } | |
2488 | - | let | |
2489 | - | $Tuple2((([IntegerEntry( | |
2491 | + | let lH = min([jc, (lD + fj._3)]) | |
2492 | + | $Tuple2((([IntegerEntry(jb, lH), StringEntry(hL, makeString_2C([io[bm], io[bn], io[bo], makeString(fj._1, "_")], ":"))] ++ kW) ++ kf(B, (ag * ((lz + lA) + lB)))._1), lH) | |
2490 | 2493 | } | |
2491 | 2494 | } | |
2492 | 2495 | } | |
2494 | 2497 | ||
2495 | 2498 | ||
2496 | 2499 | ||
2497 | - | @Callable( | |
2500 | + | @Callable(gK) | |
2498 | 2501 | func healES () = { | |
2499 | - | let | |
2500 | - | if ((size( | |
2502 | + | let kW = kT(gK) | |
2503 | + | if ((size(gK.payments) != 1)) | |
2501 | 2504 | then throw("Exactly one payment required") | |
2502 | 2505 | else { | |
2503 | - | let | |
2504 | - | if (( | |
2506 | + | let kX = value(gK.payments[0]) | |
2507 | + | if ((kX.assetId != cA)) | |
2505 | 2508 | then throw("Allowed USDT payment only!") | |
2506 | 2509 | else { | |
2507 | - | let B = valueOrErrorMessage(getString( | |
2508 | - | if ( | |
2510 | + | let B = valueOrErrorMessage(getString(bM(toString(gK.caller))), "You don't have a duck staked") | |
2511 | + | if (kq(B)) | |
2509 | 2512 | then throw("healES_checkTournament") | |
2510 | 2513 | else { | |
2511 | - | let | |
2512 | - | let | |
2513 | - | let | |
2514 | - | if (( | |
2514 | + | let jb = A(B) | |
2515 | + | let jc = aj(valueOrElse(getInteger(E(B)), 0)) | |
2516 | + | let lD = valueOrElse(getInteger(jb), jc) | |
2517 | + | if ((lD > 0)) | |
2515 | 2518 | then throw("HP should be 0 to call Emergency Service") | |
2516 | 2519 | else { | |
2517 | - | let | |
2518 | - | let | |
2519 | - | let | |
2520 | + | let hL = bN(B) | |
2521 | + | let io = hK(hL) | |
2522 | + | let lE = if ((io[bp] == "")) | |
2520 | 2523 | then nil | |
2521 | - | else split_4C( | |
2522 | - | let | |
2523 | - | then parseIntValue( | |
2524 | + | else split_4C(io[bp], "_") | |
2525 | + | let lI = if ((size(lE) > 0)) | |
2526 | + | then parseIntValue(lE[0]) | |
2524 | 2527 | else 0 | |
2525 | - | let | |
2526 | - | then parseIntValue( | |
2528 | + | let lJ = if ((size(lE) > 1)) | |
2529 | + | then parseIntValue(lE[1]) | |
2527 | 2530 | else 0 | |
2528 | - | let | |
2529 | - | then parseIntValue( | |
2531 | + | let lK = if ((size(lE) > 2)) | |
2532 | + | then parseIntValue(lE[2]) | |
2530 | 2533 | else 0 | |
2531 | - | if (if (if ((lH > 0)) | |
2532 | - | then true | |
2533 | - | else (lI > 0)) | |
2534 | + | if (if (if ((lI > 0)) | |
2534 | 2535 | then true | |
2535 | 2536 | else (lJ > 0)) | |
2537 | + | then true | |
2538 | + | else (lK > 0)) | |
2536 | 2539 | then throw("You have to use own Medical Kit") | |
2537 | 2540 | else { | |
2538 | - | let | |
2539 | - | let | |
2540 | - | then split_4C(value( | |
2541 | + | let lL = getString(de, bR()) | |
2542 | + | let lM = if (isDefined(lL)) | |
2543 | + | then split_4C(value(lL), "_") | |
2541 | 2544 | else nil | |
2542 | - | let | |
2543 | - | then parseIntValue( | |
2545 | + | let lN = if ((size(lM) > 0)) | |
2546 | + | then parseIntValue(lM[0]) | |
2544 | 2547 | else 0 | |
2545 | - | if ((0 >= | |
2548 | + | if ((0 >= lN)) | |
2546 | 2549 | then throw("There are no Medical Kits L1 at Emergency Service storage") | |
2547 | 2550 | else { | |
2548 | - | let | |
2549 | - | let | |
2550 | - | let | |
2551 | - | let | |
2552 | - | let | |
2553 | - | if (( | |
2554 | - | then throw(("Payment attached should be " + toString( | |
2551 | + | let lH = (lD + parseIntValue(split(aX[0], "_")[aZ])) | |
2552 | + | let lO = makeString([toString((lN - 1)), removeByIndex(lM, 0)], "_") | |
2553 | + | let co = split(aX[0], "_") | |
2554 | + | let lP = cn(co) | |
2555 | + | let lQ = fraction((lP * aP), aO, (cG * bc)) | |
2556 | + | if ((kX.amount != lQ)) | |
2557 | + | then throw(("Payment attached should be " + toString(lQ))) | |
2555 | 2558 | else { | |
2556 | - | let | |
2557 | - | $Tuple2((( | |
2559 | + | let fj = dy(invoke(de, "updateEsStorage", [lO], [AttachedPayment(cA, lQ)])) | |
2560 | + | $Tuple2(((kW :+ IntegerEntry(jb, lH)) ++ kf(B, aa)._1), fj) | |
2558 | 2561 | } | |
2559 | 2562 | } | |
2560 | 2563 | } | |
2566 | 2569 | ||
2567 | 2570 | ||
2568 | 2571 | ||
2569 | - | @Callable( | |
2570 | - | func updateBackpack (B, | |
2572 | + | @Callable(gK) | |
2573 | + | func updateBackpack (B,lR) = if ((gK.caller != de)) | |
2571 | 2574 | then throw("permission denied") | |
2572 | - | else $Tuple2([StringEntry( | |
2573 | - | ||
2574 | - | ||
2575 | - | ||
2576 | - | @Callable( | |
2575 | + | else $Tuple2([StringEntry(bN(B), lR)], lR) | |
2576 | + | ||
2577 | + | ||
2578 | + | ||
2579 | + | @Callable(gK) | |
2577 | 2580 | func commitForRandom () = { | |
2578 | - | let | |
2579 | - | let | |
2580 | - | let c = toString( | |
2581 | - | $Tuple2(([IntegerEntry( | |
2582 | - | } | |
2583 | - | ||
2584 | - | ||
2585 | - | ||
2586 | - | @Callable( | |
2587 | - | func revealRandom ( | |
2588 | - | let | |
2589 | - | let c = toString( | |
2590 | - | let | |
2591 | - | let | |
2592 | - | if (( | |
2593 | - | then throw(("Random number is not ready yet, wait until height = " + toString( | |
2581 | + | let kW = kT(gK) | |
2582 | + | let lS = (height + dr) | |
2583 | + | let c = toString(gK.caller) | |
2584 | + | $Tuple2(([IntegerEntry(ds(c), lS)] ++ kW), lS) | |
2585 | + | } | |
2586 | + | ||
2587 | + | ||
2588 | + | ||
2589 | + | @Callable(gK) | |
2590 | + | func revealRandom (dS) = { | |
2591 | + | let kW = kT(gK) | |
2592 | + | let c = toString(gK.caller) | |
2593 | + | let lT = ds(c) | |
2594 | + | let lS = valueOrErrorMessage(getInteger(lT), "You have to commitForRandom() first!") | |
2595 | + | if ((lS > height)) | |
2596 | + | then throw(("Random number is not ready yet, wait until height = " + toString(lS))) | |
2594 | 2597 | else { | |
2595 | - | let | |
2596 | - | let | |
2597 | - | let | |
2598 | - | $Tuple2(([DeleteEntry( | |
2599 | - | } | |
2600 | - | } | |
2601 | - | ||
2602 | - | ||
2603 | - | ||
2604 | - | @Callable( | |
2598 | + | let dU = value(value(blockInfoByHeight(lS)).vrf) | |
2599 | + | let dT = toBytes(valueOrElse(getString(dK(c)), "")) | |
2600 | + | let lU = dR(dS, dT, dU) | |
2601 | + | $Tuple2(([DeleteEntry(lT)] ++ kW), lU) | |
2602 | + | } | |
2603 | + | } | |
2604 | + | ||
2605 | + | ||
2606 | + | ||
2607 | + | @Callable(gK) | |
2605 | 2608 | func buySLand () = { | |
2606 | - | let | |
2607 | - | if ((size( | |
2609 | + | let kW = kT(gK) | |
2610 | + | if ((size(gK.payments) != 1)) | |
2608 | 2611 | then throw("Exactly one payment required") | |
2609 | 2612 | else { | |
2610 | - | let | |
2611 | - | if (( | |
2613 | + | let kX = value(gK.payments[0]) | |
2614 | + | if ((kX.assetId != cA)) | |
2612 | 2615 | then throw("Allowed USDT payment only!") | |
2613 | - | else if (( | |
2614 | - | then throw(("Payment attached should be " + toString( | |
2616 | + | else if ((kX.amount != ee)) | |
2617 | + | then throw(("Payment attached should be " + toString(ee))) | |
2615 | 2618 | else { | |
2616 | - | let | |
2617 | - | let | |
2618 | - | $Tuple2(((( | |
2619 | + | let fj = iI(gK.caller, gK.transactionId) | |
2620 | + | let lV = dB(invoke(di, "burnAcres", [eg], nil)) | |
2621 | + | $Tuple2((((fj._1 :+ ScriptTransfer(de, kX.amount, cA)) ++ kg(toString(gK.caller), ac)._1) ++ kW), $Tuple2(fj._2._1, lV)) | |
2619 | 2622 | } | |
2620 | 2623 | } | |
2621 | 2624 | } | |
2622 | 2625 | ||
2623 | 2626 | ||
2624 | 2627 | ||
2625 | - | @Callable( | |
2626 | - | func expedition ( | |
2627 | - | let | |
2628 | - | if ((size( | |
2628 | + | @Callable(gK) | |
2629 | + | func expedition (iQ,iR) = { | |
2630 | + | let kW = kT(gK) | |
2631 | + | if ((size(gK.payments) != 0)) | |
2629 | 2632 | then throw("No payments required") | |
2630 | 2633 | else { | |
2631 | - | let | |
2632 | - | let | |
2633 | - | let B = | |
2634 | - | let | |
2635 | - | let | |
2636 | - | let | |
2637 | - | let | |
2638 | - | let | |
2639 | - | let | |
2640 | - | let | |
2641 | - | let | |
2642 | - | let | |
2643 | - | let | |
2644 | - | let | |
2645 | - | let | |
2646 | - | let | |
2647 | - | then $Tuple3([IntegerEntry( | |
2648 | - | else $Tuple3(( | |
2634 | + | let bQ = toString(gK.caller) | |
2635 | + | let hp = iP(bQ, iQ, iR) | |
2636 | + | let B = hp._2 | |
2637 | + | let jb = A(B) | |
2638 | + | let hL = bN(B) | |
2639 | + | let io = hK(hL) | |
2640 | + | let jQ = split(io[bo], "_") | |
2641 | + | let jS = makeString(fd(true, jQ, ed), "_") | |
2642 | + | let gx = G(B) | |
2643 | + | let lo = valueOrElse(getString(gx), ",;,_,;,_,;,_,;,_,;,_,;,") | |
2644 | + | let lW = fk(lo, hp._5) | |
2645 | + | let lq = lW._1 | |
2646 | + | let lr = lW._2 | |
2647 | + | let lX = iI(gK.caller, gK.transactionId) | |
2648 | + | let iO = lX._2._1 | |
2649 | + | let fj = if ((0 >= hp._1)) | |
2650 | + | then $Tuple3([IntegerEntry(jb, 0), StringEntry(gx, lq)], "", 0) | |
2651 | + | else $Tuple3((lX._1 ++ (if (lr) | |
2649 | 2652 | then [StringEntry(M(B), "0_0_0_0_0")] | |
2650 | - | else ((((nil :+ StringEntry( | |
2651 | - | if ( | |
2653 | + | else ((((nil :+ StringEntry(bO(B), makeString([lX._2._2, "L", iO], "_"))) :+ IntegerEntry(jb, hp._1)) :+ StringEntry(gx, lq)) :+ StringEntry(hL, makeString([io[bm], io[bn], jS, io[bp]], ":"))))), iO, hp._3) | |
2654 | + | if (kq(B)) | |
2652 | 2655 | then throw("expedition_checkTournament") | |
2653 | 2656 | else { | |
2654 | - | let | |
2655 | - | $Tuple2((( | |
2657 | + | let lV = dB(invoke(di, "burnAcres", [eg], nil)) | |
2658 | + | $Tuple2(((fj._1 ++ kf(B, ac)._1) ++ kW), $Tuple3(fj._2, fj._3, lV)) | |
2656 | 2659 | } | |
2657 | 2660 | } | |
2658 | 2661 | } | |
2659 | 2662 | ||
2660 | 2663 | ||
2661 | 2664 | ||
2662 | - | @Callable( | |
2665 | + | @Callable(gK) | |
2663 | 2666 | func buySLandForAcres () = { | |
2664 | - | let | |
2665 | - | if ((size( | |
2667 | + | let kW = kT(gK) | |
2668 | + | if ((size(gK.payments) != 1)) | |
2666 | 2669 | then throw("exactly 1 payment must be attached") | |
2667 | 2670 | else { | |
2668 | - | let | |
2669 | - | let | |
2670 | - | if (if (!(isDefined( | |
2671 | + | let kX = gK.payments[0] | |
2672 | + | let fq = kX.amount | |
2673 | + | if (if (!(isDefined(kX.assetId))) | |
2671 | 2674 | then true | |
2672 | - | else (value( | |
2675 | + | else (value(kX.assetId) != dq)) | |
2673 | 2676 | then throw("ACRES payments only!") | |
2674 | - | else if (( | |
2675 | - | then throw(("Payment attached should be " + toString( | |
2677 | + | else if ((fq != eg)) | |
2678 | + | then throw(("Payment attached should be " + toString(eg))) | |
2676 | 2679 | else { | |
2677 | - | let | |
2678 | - | let | |
2679 | - | $Tuple2((( | |
2680 | + | let fj = iI(gK.caller, gK.transactionId) | |
2681 | + | let lV = dB(invoke(di, "burnAcres", [eg], [AttachedPayment(dq, fq)])) | |
2682 | + | $Tuple2(((fj._1 ++ kg(toString(gK.caller), ac)._1) ++ kW), $Tuple2(fj._2._1, lV)) | |
2680 | 2683 | } | |
2681 | 2684 | } | |
2682 | 2685 | } | |
2683 | 2686 | ||
2684 | 2687 | ||
2685 | 2688 | ||
2686 | - | @Callable( | |
2689 | + | @Callable(gK) | |
2687 | 2690 | func upgradeInfra (Q) = { | |
2688 | - | let | |
2689 | - | if ((size( | |
2691 | + | let kW = kT(gK) | |
2692 | + | if ((size(gK.payments) != 0)) | |
2690 | 2693 | then throw("No payments required") | |
2691 | 2694 | else { | |
2692 | - | let | |
2693 | - | let B = valueOrErrorMessage(getString( | |
2694 | - | $Tuple2((( | |
2695 | - | } | |
2696 | - | } | |
2697 | - | ||
2698 | - | ||
2699 | - | ||
2700 | - | @Callable( | |
2701 | - | func activateArtifact ( | |
2702 | - | let | |
2703 | - | if ((size( | |
2695 | + | let fj = jK(true, gK.caller, 0, Q) | |
2696 | + | let B = valueOrErrorMessage(getString(bM(toString(gK.caller))), "You don't have a duck staked") | |
2697 | + | $Tuple2(((fj._1 ++ kW) ++ kf(B, fraction(ad, fj._3, cG))._1), fj._2) | |
2698 | + | } | |
2699 | + | } | |
2700 | + | ||
2701 | + | ||
2702 | + | ||
2703 | + | @Callable(gK) | |
2704 | + | func activateArtifact (lY,lZ) = { | |
2705 | + | let kW = kT(gK) | |
2706 | + | if ((size(gK.payments) != 0)) | |
2704 | 2707 | then throw("No payments required") | |
2705 | 2708 | else { | |
2706 | - | let c = toString( | |
2707 | - | let | |
2708 | - | let | |
2709 | - | if (("PRESALE" == | |
2710 | - | then | |
2711 | - | else if (("ONBOARD" == | |
2712 | - | then | |
2709 | + | let c = toString(gK.caller) | |
2710 | + | let fj = { | |
2711 | + | let cz = lY | |
2712 | + | if (("PRESALE" == cz)) | |
2713 | + | then ko(c, lZ) | |
2714 | + | else if (("ONBOARD" == cz)) | |
2715 | + | then kh(c) | |
2713 | 2716 | else throw("Unknown artifact") | |
2714 | 2717 | } | |
2715 | - | ( | |
2716 | - | } | |
2717 | - | } | |
2718 | - | ||
2719 | - | ||
2720 | - | ||
2721 | - | @Callable( | |
2722 | - | func mergeLands ( | |
2723 | - | let | |
2724 | - | if ((size( | |
2718 | + | (fj ++ kW) | |
2719 | + | } | |
2720 | + | } | |
2721 | + | ||
2722 | + | ||
2723 | + | ||
2724 | + | @Callable(gK) | |
2725 | + | func mergeLands (ku) = { | |
2726 | + | let kW = kT(gK) | |
2727 | + | if ((size(gK.payments) != 0)) | |
2725 | 2728 | then throw("No payments required") | |
2726 | 2729 | else { | |
2727 | - | let | |
2728 | - | $Tuple2((( | |
2729 | - | } | |
2730 | - | } | |
2731 | - | ||
2732 | - | ||
2733 | - | ||
2734 | - | @Callable( | |
2735 | - | func cargoExchange ( | |
2736 | - | let | |
2737 | - | if ((size( | |
2730 | + | let fj = kS(toString(gK.caller), ku) | |
2731 | + | $Tuple2(((fj._1 ++ kW) ++ kg(toString(gK.caller), ae)._1), fj._2) | |
2732 | + | } | |
2733 | + | } | |
2734 | + | ||
2735 | + | ||
2736 | + | ||
2737 | + | @Callable(gK) | |
2738 | + | func cargoExchange (ma,Q) = { | |
2739 | + | let kW = kT(gK) | |
2740 | + | if ((size(gK.payments) != 0)) | |
2738 | 2741 | then throw("No payments required") | |
2739 | 2742 | else { | |
2740 | - | let | |
2741 | - | let c = toString( | |
2742 | - | let | |
2743 | - | let | |
2744 | - | if (!(isDefined(getInteger( | |
2745 | - | then throw(( | |
2743 | + | let in = split_4C(ma, ":") | |
2744 | + | let c = toString(gK.originCaller) | |
2745 | + | let js = value(assetInfo(fromBase58String(Q))) | |
2746 | + | let jt = bw(Q) | |
2747 | + | if (!(isDefined(getInteger(jt)))) | |
2748 | + | then throw((js.name + " is not staked")) | |
2746 | 2749 | else { | |
2747 | - | let | |
2748 | - | if (( | |
2749 | - | then throw(( | |
2750 | + | let jv = valueOrErrorMessage(getString(bt(Q)), (("NFT " + js.name) + " is orphaned")) | |
2751 | + | if ((jv != c)) | |
2752 | + | then throw((aF + " is not yours")) | |
2750 | 2753 | else { | |
2751 | - | let | |
2752 | - | let | |
2753 | - | let B = valueOrErrorMessage(getString( | |
2754 | - | let | |
2755 | - | let | |
2756 | - | if (( | |
2757 | - | then throw((("Duck location type is " + | |
2758 | - | else if (( | |
2754 | + | let hZ = (dG(split(js.description, "_")[dk]) / cH) | |
2755 | + | let ia = valueOrElse(getInteger(bD(Q)), 0) | |
2756 | + | let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked") | |
2757 | + | let jq = valueOrElse(getString(bO(B)), aN) | |
2758 | + | let cj = split(value(jq), "_") | |
2759 | + | if ((cj[br] != "L")) | |
2760 | + | then throw((("Duck location type is " + cj[br]) + ", but should be L")) | |
2761 | + | else if ((cj[bs] != Q)) | |
2759 | 2762 | then throw(("Duck should be on the land " + Q)) | |
2760 | 2763 | else { | |
2761 | - | let | |
2762 | - | let | |
2763 | - | let | |
2764 | - | let | |
2765 | - | let | |
2766 | - | let | |
2767 | - | let | |
2768 | - | let | |
2769 | - | ([StringEntry( | |
2764 | + | let hY = bC(Q) | |
2765 | + | let hP = hX(hY, hZ, ia) | |
2766 | + | let hL = bN(B) | |
2767 | + | let io = hK(hL) | |
2768 | + | let fj = im(in, hP, io) | |
2769 | + | let ig = split(hP[bh], "_") | |
2770 | + | let jH = (parseIntValue(ig[bj]) + fj._7) | |
2771 | + | let jI = (parseIntValue(ig[bk]) - fj._7) | |
2772 | + | ([StringEntry(hL, makeString_2C([io[bm], fj._4, fj._5, fj._6], ":")), StringEntry(hY, makeString_2C([hP[bd], fj._1, fj._2, fj._3, makeString([ig[bi], toString(jH), toString(jI), ig[bl]], "_")], ":"))] ++ kW) | |
2770 | 2773 | } | |
2771 | 2774 | } | |
2772 | 2775 | } | |
2775 | 2778 | ||
2776 | 2779 | ||
2777 | 2780 | ||
2778 | - | @Callable( | |
2779 | - | func saveWarehouse ( | |
2781 | + | @Callable(gK) | |
2782 | + | func saveWarehouse (ic,Q) = if ((gK.caller != de)) | |
2780 | 2783 | then throw("Access denied") | |
2781 | 2784 | else { | |
2782 | - | let | |
2783 | - | let | |
2784 | - | if ((size( | |
2785 | + | let hY = bC(Q) | |
2786 | + | let id = split_4C(ic, ":") | |
2787 | + | if ((size(id) != 5)) | |
2785 | 2788 | then throw("warehouse string should contain 4 ':' separators") | |
2786 | 2789 | else { | |
2787 | - | let | |
2788 | - | let | |
2789 | - | let | |
2790 | - | let | |
2791 | - | if ((0 > | |
2790 | + | let mb = split(id[bh], "_")[bi] | |
2791 | + | let jH = hO(id) | |
2792 | + | let mc = hM(id[bd]) | |
2793 | + | let jI = ((mc - parseIntValue(mb)) - jH) | |
2794 | + | if ((0 > jI)) | |
2792 | 2795 | then throw("Operation leads to negative free warehouse space") | |
2793 | 2796 | else { | |
2794 | - | let | |
2795 | - | $Tuple2([StringEntry( | |
2797 | + | let md = makeString_2C([id[bd], id[be], id[bf], id[bg], makeString([mb, toString(jH), toString(jI), toString(mc)], "_")], ":") | |
2798 | + | $Tuple2([StringEntry(hY, md)], md) | |
2796 | 2799 | } | |
2797 | 2800 | } | |
2798 | 2801 | } | |
2799 | 2802 | ||
2800 | 2803 | ||
2801 | 2804 | ||
2802 | - | @Callable( | |
2803 | - | func setCustomName ( | |
2804 | - | let | |
2805 | - | if ((size( | |
2805 | + | @Callable(gK) | |
2806 | + | func setCustomName (bu,kE,by) = { | |
2807 | + | let kW = kT(gK) | |
2808 | + | if ((size(gK.payments) != 1)) | |
2806 | 2809 | then throw("Exactly one payment required") | |
2807 | 2810 | else { | |
2808 | - | let | |
2809 | - | if (( | |
2811 | + | let kX = value(gK.payments[0]) | |
2812 | + | if ((kX.assetId != cA)) | |
2810 | 2813 | then throw("Allowed USDT payment only!") | |
2811 | - | else if (( | |
2812 | - | then throw(("Payment should be " + toString( | |
2813 | - | else if (contains( | |
2814 | - | then throw(("Name should not contain '__': " + | |
2815 | - | else if ((size( | |
2816 | - | then throw(("Name too long, maxLength=" + toString( | |
2814 | + | else if ((kX.amount != ea)) | |
2815 | + | then throw(("Payment should be " + toString(ea))) | |
2816 | + | else if (contains(kE, "__")) | |
2817 | + | then throw(("Name should not contain '__': " + kE)) | |
2818 | + | else if ((size(kE) > eb)) | |
2819 | + | then throw(("Name too long, maxLength=" + toString(eb))) | |
2817 | 2820 | else { | |
2818 | - | let c = toString( | |
2819 | - | let | |
2820 | - | let | |
2821 | - | if (("ACCOUNT" == | |
2821 | + | let c = toString(gK.originCaller) | |
2822 | + | let me = { | |
2823 | + | let cz = by | |
2824 | + | if (("ACCOUNT" == cz)) | |
2822 | 2825 | then { | |
2823 | - | let | |
2824 | - | let | |
2825 | - | if (isDefined( | |
2826 | - | then throw(("Name already registered: " + | |
2826 | + | let mf = ew(kE) | |
2827 | + | let mg = getString(mf) | |
2828 | + | if (isDefined(mg)) | |
2829 | + | then throw(("Name already registered: " + kE)) | |
2827 | 2830 | else { | |
2828 | - | let | |
2829 | - | let | |
2830 | - | let | |
2831 | - | then [DeleteEntry( | |
2831 | + | let mh = bG(c) | |
2832 | + | let mi = getString(mh) | |
2833 | + | let mj = if (isDefined(mi)) | |
2834 | + | then [DeleteEntry(ew(value(mi)))] | |
2832 | 2835 | else nil | |
2833 | - | ((( | |
2836 | + | (((mj :+ StringEntry(mh, kE)) :+ StringEntry(mf, c)) ++ kg(c, ab)._1) | |
2834 | 2837 | } | |
2835 | 2838 | } | |
2836 | - | else if (("LAND" == | |
2839 | + | else if (("LAND" == cz)) | |
2837 | 2840 | then { | |
2838 | - | let | |
2839 | - | let | |
2840 | - | if (!(isDefined(getInteger( | |
2841 | - | then throw(( | |
2841 | + | let js = value(assetInfo(fromBase58String(bu))) | |
2842 | + | let jt = bw(bu) | |
2843 | + | if (!(isDefined(getInteger(jt)))) | |
2844 | + | then throw((js.name + " is not staked")) | |
2842 | 2845 | else { | |
2843 | - | let | |
2844 | - | if (( | |
2845 | - | then throw(( | |
2846 | + | let jv = valueOrErrorMessage(getString(bt(bu)), (("NFT " + js.name) + " is orphaned")) | |
2847 | + | if ((jv != c)) | |
2848 | + | then throw((aF + " is not yours")) | |
2846 | 2849 | else { | |
2847 | - | let | |
2848 | - | let | |
2849 | - | if (isDefined( | |
2850 | - | then throw(("Name already registered: " + | |
2850 | + | let mf = ep(kE) | |
2851 | + | let mg = getString(mf) | |
2852 | + | if (isDefined(mg)) | |
2853 | + | then throw(("Name already registered: " + kE)) | |
2851 | 2854 | else { | |
2852 | - | let | |
2853 | - | let | |
2854 | - | let | |
2855 | - | then [DeleteEntry( | |
2855 | + | let mk = bv(bu) | |
2856 | + | let mi = getString(mk) | |
2857 | + | let mj = if (isDefined(mi)) | |
2858 | + | then [DeleteEntry(ep(value(mi)))] | |
2856 | 2859 | else nil | |
2857 | - | ((( | |
2860 | + | (((mj :+ StringEntry(mk, kE)) :+ StringEntry(mf, bu)) ++ kg(c, ab)._1) | |
2858 | 2861 | } | |
2859 | 2862 | } | |
2860 | 2863 | } | |
2861 | 2864 | } | |
2862 | - | else if (("DUCK" == | |
2865 | + | else if (("DUCK" == cz)) | |
2863 | 2866 | then { | |
2864 | - | let | |
2865 | - | let | |
2866 | - | if (if (!(isDefined(getInteger( | |
2867 | + | let js = value(assetInfo(fromBase58String(bu))) | |
2868 | + | let jt = bw(bu) | |
2869 | + | if (if (!(isDefined(getInteger(jt)))) | |
2867 | 2870 | then true | |
2868 | - | else !(isDefined(getString( | |
2869 | - | then throw(( | |
2871 | + | else !(isDefined(getString(bM(c))))) | |
2872 | + | then throw((js.name + " is not staked")) | |
2870 | 2873 | else { | |
2871 | - | let | |
2872 | - | if (( | |
2873 | - | then throw(( | |
2874 | + | let jv = valueOrErrorMessage(getString(bL(bu)), (("NFT " + js.name) + " is orphaned")) | |
2875 | + | if ((jv != c)) | |
2876 | + | then throw((aG + " is not yours")) | |
2874 | 2877 | else { | |
2875 | - | let | |
2876 | - | let | |
2877 | - | if (isDefined( | |
2878 | - | then throw(("Name already registered: " + | |
2878 | + | let mf = ev(kE) | |
2879 | + | let mg = getString(mf) | |
2880 | + | if (isDefined(mg)) | |
2881 | + | then throw(("Name already registered: " + kE)) | |
2879 | 2882 | else { | |
2880 | - | let | |
2881 | - | let | |
2882 | - | let | |
2883 | - | then [DeleteEntry( | |
2883 | + | let mk = bF(bu) | |
2884 | + | let mi = getString(mk) | |
2885 | + | let mj = if (isDefined(mi)) | |
2886 | + | then [DeleteEntry(ev(value(mi)))] | |
2884 | 2887 | else nil | |
2885 | - | ((( | |
2888 | + | (((mj :+ StringEntry(mk, kE)) :+ StringEntry(mf, bu)) ++ kf(bu, ab)._1) | |
2886 | 2889 | } | |
2887 | 2890 | } | |
2888 | 2891 | } | |
2889 | 2892 | } | |
2890 | 2893 | else throw("Unknown entity type") | |
2891 | 2894 | } | |
2892 | - | $Tuple2((( | |
2895 | + | $Tuple2(((me :+ ScriptTransfer(de, kX.amount, cA)) ++ kW), 0) | |
2893 | 2896 | } | |
2894 | 2897 | } | |
2895 | 2898 | } | |
2896 | 2899 | ||
2897 | 2900 | ||
2898 | 2901 | ||
2899 | - | @Callable( | |
2900 | - | func setReferrals ( | |
2902 | + | @Callable(gK) | |
2903 | + | func setReferrals (ml,mm) = if ((gK.callerPublicKey != cy)) | |
2901 | 2904 | then throw("Permission denied") | |
2902 | 2905 | else { | |
2903 | - | let | |
2904 | - | if ((size( | |
2906 | + | let kW = kT(gK) | |
2907 | + | if ((size(gK.payments) != 0)) | |
2905 | 2908 | then throw("No payments required") | |
2906 | - | else if (!(isDefined(addressFromString( | |
2907 | - | then throw(("Invalid address: " + | |
2909 | + | else if (!(isDefined(addressFromString(ml)))) | |
2910 | + | then throw(("Invalid address: " + ml)) | |
2908 | 2911 | else { | |
2909 | - | let | |
2910 | - | if (!(isDefined( | |
2911 | - | then throw(("Invalid address: " + | |
2912 | + | let mn = addressFromString(mm) | |
2913 | + | if (!(isDefined(mn))) | |
2914 | + | then throw(("Invalid address: " + mm)) | |
2912 | 2915 | else { | |
2913 | - | let | |
2914 | - | if (!(isDefined( | |
2916 | + | let mo = getString(dK(ml)) | |
2917 | + | if (!(isDefined(mo))) | |
2915 | 2918 | then throw("oldPlayer didn't do any tx in game") | |
2916 | - | else if ((0 >= wavesBalance(value( | |
2919 | + | else if ((0 >= wavesBalance(value(mn)).available)) | |
2917 | 2920 | then throw("newPlayer has no WAVES") | |
2918 | 2921 | else { | |
2919 | - | let | |
2920 | - | let | |
2921 | - | let | |
2922 | - | then split_4C(value( | |
2922 | + | let mp = ex() | |
2923 | + | let mq = getString(mp) | |
2924 | + | let mr = if (isDefined(mq)) | |
2925 | + | then split_4C(value(mq), "_") | |
2923 | 2926 | else nil | |
2924 | - | if (containsElement( | |
2925 | - | then throw(( | |
2927 | + | if (containsElement(mr, mm)) | |
2928 | + | then throw((mm + " is not newbie (already has referrals)")) | |
2926 | 2929 | else { | |
2927 | - | let | |
2928 | - | let | |
2929 | - | if (if (isDefined( | |
2930 | - | then isDefined(addressFromString(value( | |
2930 | + | let ki = bH(mm) | |
2931 | + | let kj = getString(ki) | |
2932 | + | if (if (isDefined(kj)) | |
2933 | + | then isDefined(addressFromString(value(kj))) | |
2931 | 2934 | else false) | |
2932 | - | then throw((( | |
2935 | + | then throw(((mm + " already has refBy: ") + value(kj))) | |
2933 | 2936 | else { | |
2934 | - | let | |
2935 | - | let | |
2936 | - | let | |
2937 | - | then split_4C(value( | |
2937 | + | let ms = bK(ml) | |
2938 | + | let mt = getString(ms) | |
2939 | + | let mu = if (isDefined(mt)) | |
2940 | + | then split_4C(value(mt), "_") | |
2938 | 2941 | else nil | |
2939 | - | if (containsElement( | |
2940 | - | then throw(((( | |
2942 | + | if (containsElement(mu, mm)) | |
2943 | + | then throw((((ml + " already contains ") + mm) + " within referrals")) | |
2941 | 2944 | else { | |
2942 | - | let | |
2943 | - | let | |
2944 | - | then value( | |
2945 | - | else makeString_2C(( | |
2946 | - | $Tuple2(([StringEntry( | |
2945 | + | let mv = makeString_2C((mu :+ mm), "_") | |
2946 | + | let mw = if (containsElement(mr, ml)) | |
2947 | + | then value(mq) | |
2948 | + | else makeString_2C((mr :+ ml), "_") | |
2949 | + | $Tuple2(([StringEntry(ki, ml), StringEntry(ms, mv), StringEntry(mp, mw)] ++ kW), 0) | |
2947 | 2950 | } | |
2948 | 2951 | } | |
2949 | 2952 | } | |
2954 | 2957 | ||
2955 | 2958 | ||
2956 | 2959 | ||
2957 | - | @Callable( | |
2958 | - | func distributePoints ( | |
2959 | - | let | |
2960 | - | if ((size( | |
2960 | + | @Callable(gK) | |
2961 | + | func distributePoints (mx,my,mz,mA,mB) = { | |
2962 | + | let kW = kT(gK) | |
2963 | + | if ((size(gK.payments) != 0)) | |
2961 | 2964 | then throw("No payments required") | |
2962 | 2965 | else { | |
2963 | - | let c = toString( | |
2964 | - | let | |
2965 | - | let | |
2966 | - | let | |
2966 | + | let c = toString(gK.originCaller) | |
2967 | + | let mC = dD(invoke(dg, "checkWlgXpREADONLY", [c], nil)) | |
2968 | + | let mD = dB(mC[1]) | |
2969 | + | let mE = if ((0 >= mD)) | |
2967 | 2970 | then $Tuple2(0, nil) | |
2968 | 2971 | else { | |
2969 | - | let | |
2970 | - | if (( | |
2971 | - | then $Tuple2( | |
2972 | + | let kd = dB(invoke(dg, "takeWlgXp", [c], nil)) | |
2973 | + | if ((kd == kd)) | |
2974 | + | then $Tuple2(mD, [IntegerEntry(I(c), dB(mC[0])), IntegerEntry(H(c), dB(mC[2]))]) | |
2972 | 2975 | else throw("Strict value is not equal to itself.") | |
2973 | 2976 | } | |
2974 | - | let | |
2975 | - | let | |
2976 | - | let B = valueOrErrorMessage(getString( | |
2977 | - | let | |
2978 | - | let | |
2979 | - | let | |
2980 | - | let | |
2981 | - | let | |
2982 | - | let | |
2983 | - | if (( | |
2984 | - | then throw((("There are only " + toString( | |
2977 | + | let mF = mE._1 | |
2978 | + | let mG = mE._2 | |
2979 | + | let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked") | |
2980 | + | let mH = J(c) | |
2981 | + | let mI = (valueOrElse(getInteger(mH), 0) + mF) | |
2982 | + | let mJ = F(B) | |
2983 | + | let mK = valueOrElse(getInteger(mJ), 0) | |
2984 | + | let mL = (mI + mK) | |
2985 | + | let mM = ((((mx + my) + mz) + mA) + mB) | |
2986 | + | if ((mM > mL)) | |
2987 | + | then throw((("There are only " + toString(mL)) + " free points to distribute")) | |
2985 | 2988 | else { | |
2986 | - | let | |
2987 | - | let | |
2988 | - | let | |
2989 | - | $Tuple2((([IntegerEntry( | |
2989 | + | let mN = C(B) | |
2990 | + | let at = split(valueOrElse(getString(mN), "0_0_0_0_0"), "_") | |
2991 | + | let mO = (mI - mM) | |
2992 | + | $Tuple2((([IntegerEntry(mH, if ((0 > mO)) | |
2990 | 2993 | then 0 | |
2991 | - | else | |
2992 | - | then ( | |
2993 | - | else | |
2994 | + | else mO), IntegerEntry(mJ, if ((0 > mO)) | |
2995 | + | then (mK + mO) | |
2996 | + | else mK), StringEntry(mN, makeString([toString((parseIntValue(at[l]) + mx)), toString((parseIntValue(at[m]) + my)), toString((parseIntValue(at[n]) + mz)), toString((parseIntValue(at[o]) + mA)), toString((parseIntValue(at[p]) + mB))], "_"))] ++ kW) ++ mG), 0) | |
2994 | 2997 | } | |
2995 | 2998 | } | |
2996 | 2999 | } | |
2997 | 3000 | ||
2998 | 3001 | ||
2999 | 3002 | ||
3000 | - | @Callable( | |
3001 | - | func splitByGlobalWeightsREADONLY ( | |
3002 | - | ||
3003 | - | ||
3004 | - | ||
3005 | - | @Callable( | |
3006 | - | func splitByGlobalAndLocalWeightsREADONLY ( | |
3007 | - | let | |
3008 | - | $Tuple2(nil, $Tuple2( | |
3009 | - | } | |
3010 | - | ||
3011 | - | ||
3012 | - | ||
3013 | - | @Callable( | |
3014 | - | func getBackpackREADONLY (B) = $Tuple2(nil, makeString( | |
3015 | - | ||
3016 | - | ||
3017 | - | ||
3018 | - | @Callable( | |
3003 | + | @Callable(gK) | |
3004 | + | func splitByGlobalWeightsREADONLY (eI) = $Tuple2(nil, fa(eI)) | |
3005 | + | ||
3006 | + | ||
3007 | + | ||
3008 | + | @Callable(gK) | |
3009 | + | func splitByGlobalAndLocalWeightsREADONLY (mP,mQ,gN) = { | |
3010 | + | let gG = gM(gN) | |
3011 | + | $Tuple2(nil, $Tuple2(fa(mP), eL(mQ, gG))) | |
3012 | + | } | |
3013 | + | ||
3014 | + | ||
3015 | + | ||
3016 | + | @Callable(gK) | |
3017 | + | func getBackpackREADONLY (B) = $Tuple2(nil, makeString(hK(bN(B)), ":")) | |
3018 | + | ||
3019 | + | ||
3020 | + | ||
3021 | + | @Callable(gK) | |
3019 | 3022 | func getWarehouseREADONLY (Q) = { | |
3020 | - | let | |
3021 | - | let | |
3022 | - | let | |
3023 | - | $Tuple2(nil, makeString_2C( | |
3024 | - | } | |
3025 | - | ||
3026 | - | ||
3027 | - | ||
3028 | - | @Callable( | |
3029 | - | func saveLastTx () = if (!(containsElement([ | |
3023 | + | let js = value(assetInfo(fromBase58String(Q))) | |
3024 | + | let hZ = (dG(split(js.description, "_")[dk]) / cH) | |
3025 | + | let ia = valueOrElse(getInteger(bD(Q)), 0) | |
3026 | + | $Tuple2(nil, makeString_2C(hX(bC(Q), hZ, ia), ":")) | |
3027 | + | } | |
3028 | + | ||
3029 | + | ||
3030 | + | ||
3031 | + | @Callable(gK) | |
3032 | + | func saveLastTx () = if (!(containsElement([dg, de, dh, di], gK.caller))) | |
3030 | 3033 | then throw("Access denied") | |
3031 | - | else $Tuple2( | |
3032 | - | ||
3033 | - | ||
3034 | - | ||
3035 | - | @Callable( | |
3036 | - | func updateDuckStats (B, | |
3034 | + | else $Tuple2(kT(gK), 42) | |
3035 | + | ||
3036 | + | ||
3037 | + | ||
3038 | + | @Callable(gK) | |
3039 | + | func updateDuckStats (B,kd) = if ((gK.caller != de)) | |
3037 | 3040 | then throw("Access denied") | |
3038 | - | else | |
3039 | - | ||
3040 | - | ||
3041 | - | ||
3042 | - | @Callable( | |
3043 | - | func updateAccStats (c, | |
3041 | + | else kf(B, kd) | |
3042 | + | ||
3043 | + | ||
3044 | + | ||
3045 | + | @Callable(gK) | |
3046 | + | func updateAccStats (c,kd) = if (!(containsElement([dg, de, di], gK.caller))) | |
3044 | 3047 | then throw("Access denied") | |
3045 | - | else | |
3046 | - | ||
3047 | - | ||
3048 | - | ||
3049 | - | @Callable( | |
3050 | - | func equipDuck ( | |
3051 | - | let | |
3052 | - | if ((size( | |
3048 | + | else kg(c, kd) | |
3049 | + | ||
3050 | + | ||
3051 | + | ||
3052 | + | @Callable(gK) | |
3053 | + | func equipDuck (mR) = { | |
3054 | + | let kW = kT(gK) | |
3055 | + | if ((size(gK.payments) != 0)) | |
3053 | 3056 | then throw("No payments required") | |
3054 | 3057 | else { | |
3055 | - | let c = toString( | |
3056 | - | let B = valueOrErrorMessage(getString( | |
3057 | - | if ( | |
3058 | + | let c = toString(gK.originCaller) | |
3059 | + | let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked") | |
3060 | + | if (kq(B)) | |
3058 | 3061 | then throw("equipDuck_checkTournament") | |
3059 | 3062 | else { | |
3060 | - | let | |
3061 | - | let | |
3062 | - | let | |
3063 | - | let | |
3064 | - | let | |
3065 | - | if ((size( | |
3063 | + | let gx = G(B) | |
3064 | + | let mS = split(valueOrElse(getString(gx), ",;,_,;,_,;,_,;,_,;,_,;,"), "_") | |
3065 | + | let hL = bN(B) | |
3066 | + | let io = hK(hL) | |
3067 | + | let lq = split(mR, "_") | |
3068 | + | if ((size(lq) != r)) | |
3066 | 3069 | then throw("Wrong equipment string") | |
3067 | 3070 | else { | |
3068 | - | let | |
3069 | - | let | |
3070 | - | let | |
3071 | + | let gz = gm(mS, fx(io[bp]), true, nil) | |
3072 | + | let gA = split(lq[q], ";")[1] | |
3073 | + | let ar = if ((gA == "")) | |
3071 | 3074 | then 0 | |
3072 | 3075 | else { | |
3073 | - | let | |
3074 | - | if (( | |
3076 | + | let gB = split(gA, ",")[0] | |
3077 | + | if ((gB == "")) | |
3075 | 3078 | then 0 | |
3076 | 3079 | else { | |
3077 | - | let | |
3078 | - | let | |
3079 | - | let | |
3080 | - | if (if (if (if (if (( | |
3080 | + | let fM = split(gB, ":") | |
3081 | + | let dc = fM[0] | |
3082 | + | let gC = fM[1] | |
3083 | + | if (if (if (if (if ((dc == "06")) | |
3081 | 3084 | then true | |
3082 | - | else ( | |
3085 | + | else (dc == "07")) | |
3083 | 3086 | then true | |
3084 | - | else ( | |
3085 | - | then ( | |
3087 | + | else (dc == "08")) | |
3088 | + | then (gC != "") | |
3086 | 3089 | else false) | |
3087 | - | then (parseIntValue( | |
3090 | + | then (parseIntValue(gC) > 0) | |
3088 | 3091 | else false) | |
3089 | - | then parseIntValue(split( | |
3092 | + | then parseIntValue(split(aX[parseIntValue(dc)], "_")[aZ]) | |
3090 | 3093 | else 0 | |
3091 | 3094 | } | |
3092 | 3095 | } | |
3093 | - | let | |
3094 | - | let | |
3095 | - | let | |
3096 | - | $Tuple2(([StringEntry( | |
3096 | + | let gh = ap(this, B, ar, true) | |
3097 | + | let gD = gm(lq, gz, false, gh) | |
3098 | + | let mT = fC(gD) | |
3099 | + | $Tuple2(([StringEntry(gx, mR), StringEntry(hL, makeString_2C([io[bm], io[bn], io[bo], mT], ":")), StringEntry(M(B), makeString([toString(gh[7]), toString(gh[8]), toString(gh[9]), toString(gh[10]), toString(gh[11])], "_"))] ++ kW), 0) | |
3097 | 3100 | } | |
3098 | 3101 | } | |
3099 | 3102 | } | |
3101 | 3104 | ||
3102 | 3105 | ||
3103 | 3106 | ||
3104 | - | @Callable( | |
3105 | - | func fortificateLand (Q, | |
3106 | - | let | |
3107 | - | if ((size( | |
3107 | + | @Callable(gK) | |
3108 | + | func fortificateLand (Q,mU) = { | |
3109 | + | let kW = kT(gK) | |
3110 | + | if ((size(gK.payments) != 0)) | |
3108 | 3111 | then throw("No payments required") | |
3109 | 3112 | else { | |
3110 | - | let c = toString( | |
3111 | - | let B = valueOrElse(getString( | |
3112 | - | let | |
3113 | - | let | |
3114 | - | let | |
3115 | - | let | |
3116 | - | let | |
3117 | - | let | |
3118 | - | let | |
3119 | - | let | |
3120 | - | let | |
3121 | - | let | |
3122 | - | let | |
3123 | - | let | |
3124 | - | let | |
3125 | - | let | |
3126 | - | let | |
3127 | - | let | |
3128 | - | let | |
3129 | - | let | |
3130 | - | let | |
3131 | - | let | |
3132 | - | let | |
3133 | - | let | |
3134 | - | $Tuple2(([StringEntry( | |
3135 | - | } | |
3136 | - | } | |
3137 | - | ||
3138 | - | ||
3139 | - | ||
3140 | - | @Callable( | |
3141 | - | func initDuckTourAttempt (B) = if (( | |
3113 | + | let c = toString(gK.originCaller) | |
3114 | + | let B = valueOrElse(getString(bM(c)), "") | |
3115 | + | let fH = ap(this, B, 0, false) | |
3116 | + | let mV = bE(Q) | |
3117 | + | let mW = split(valueOrElse(getString(mV), ":0_15:0_18:0"), "_") | |
3118 | + | let js = value(assetInfo(fromBase58String(Q))) | |
3119 | + | let hZ = (dG(split(js.description, "_")[dk]) / cH) | |
3120 | + | let ia = valueOrElse(getInteger(bD(Q)), 0) | |
3121 | + | let hY = bC(Q) | |
3122 | + | let id = hX(hY, hZ, ia) | |
3123 | + | let mX = split(id[bh], "_") | |
3124 | + | let mY = parseIntValue(mX[bj]) | |
3125 | + | let mZ = parseIntValue(mX[bk]) | |
3126 | + | let na = split(mU, "_") | |
3127 | + | let nb = gt(mW, fx(id[bg]), mY, mZ, true, nil) | |
3128 | + | let gz = nb._1 | |
3129 | + | let nc = nb._2 | |
3130 | + | let nd = nb._3 | |
3131 | + | let ne = gt(na, gz, nc, nd, false, fH) | |
3132 | + | let gD = ne._1 | |
3133 | + | let nf = ne._2 | |
3134 | + | let ng = ne._3 | |
3135 | + | let mT = fC(gD) | |
3136 | + | let jY = makeString([mX[bi], toString(nf), toString(ng), mX[bl]], "_") | |
3137 | + | $Tuple2(([StringEntry(mV, mU), StringEntry(hY, makeString_2C([id[bd], id[be], id[bf], mT, jY], ":"))] ++ kW), 0) | |
3138 | + | } | |
3139 | + | } | |
3140 | + | ||
3141 | + | ||
3142 | + | ||
3143 | + | @Callable(gK) | |
3144 | + | func initDuckTourAttempt (B) = if ((gK.caller != dh)) | |
3142 | 3145 | then throw("Access denied") | |
3143 | 3146 | else { | |
3144 | - | let | |
3145 | - | let | |
3146 | - | let | |
3147 | - | let | |
3148 | - | let | |
3149 | - | let | |
3150 | - | let | |
3151 | - | $Tuple2([IntegerEntry(K(B), | |
3147 | + | let jb = A(B) | |
3148 | + | let jc = aj(valueOrElse(getInteger(E(B)), 0)) | |
3149 | + | let lk = valueOrElse(getInteger(jb), jc) | |
3150 | + | let nh = bO(B) | |
3151 | + | let jq = valueOrElse(getString(nh), aN) | |
3152 | + | let ci = valueOrElse(getInteger(dh, bT), 0) | |
3153 | + | let ni = (toString(ci) + "_T_0") | |
3154 | + | $Tuple2([IntegerEntry(K(B), lk), IntegerEntry(jb, jc), StringEntry(L(B), jq), StringEntry(nh, ni)], ni) | |
3152 | 3155 | } | |
3153 | 3156 | ||
3154 | 3157 | ||
3155 | 3158 | ||
3156 | - | @Callable( | |
3159 | + | @Callable(gK) | |
3157 | 3160 | func breakAttempt () = { | |
3158 | - | let | |
3159 | - | let B = valueOrErrorMessage(getString( | |
3160 | - | let | |
3161 | - | let | |
3162 | - | if ((split( | |
3161 | + | let kW = kT(gK) | |
3162 | + | let B = valueOrErrorMessage(getString(bM(toString(gK.caller))), "You don't have a duck staked") | |
3163 | + | let nh = bO(B) | |
3164 | + | let jq = valueOrElse(getString(nh), aN) | |
3165 | + | if ((split(jq, "_")[br] != "T")) | |
3163 | 3166 | then throw("Your duck is not in the tournament") | |
3164 | 3167 | else { | |
3165 | - | let | |
3166 | - | let | |
3167 | - | $Tuple2((( | |
3168 | - | } | |
3169 | - | } | |
3170 | - | ||
3171 | - | ||
3172 | - | ||
3173 | - | @Callable( | |
3174 | - | func breakAttemptCallback () = if (( | |
3168 | + | let nj = getIntegerValue(K(B)) | |
3169 | + | let nk = getStringValue(L(B)) | |
3170 | + | $Tuple2(((kW :+ IntegerEntry(A(B), nj)) :+ StringEntry(nh, nk)), jq) | |
3171 | + | } | |
3172 | + | } | |
3173 | + | ||
3174 | + | ||
3175 | + | ||
3176 | + | @Callable(gK) | |
3177 | + | func breakAttemptCallback () = if ((gK.caller != dh)) | |
3175 | 3178 | then throw("Access denied") | |
3176 | 3179 | else { | |
3177 | - | let B = valueOrErrorMessage(getString( | |
3178 | - | $Tuple2([IntegerEntry(A(B), getIntegerValue(K(B))), StringEntry( | |
3180 | + | let B = valueOrErrorMessage(getString(bM(toString(gK.originCaller))), "You don't have a duck staked") | |
3181 | + | $Tuple2([IntegerEntry(A(B), getIntegerValue(K(B))), StringEntry(bO(B), getStringValue(L(B)))], "breakAttemptCallback") | |
3179 | 3182 | } | |
3180 | 3183 | ||
3181 | 3184 | ||
3182 | 3185 | ||
3183 | - | @Callable( | |
3184 | - | func exitTournamentInternal (B) = if (( | |
3186 | + | @Callable(gK) | |
3187 | + | func exitTournamentInternal (B) = if ((gK.caller != this)) | |
3185 | 3188 | then throw("Access denied") | |
3186 | 3189 | else { | |
3187 | - | let | |
3188 | - | let | |
3189 | - | $Tuple2([IntegerEntry(A(B), | |
3190 | + | let nj = getIntegerValue(K(B)) | |
3191 | + | let nk = getStringValue(L(B)) | |
3192 | + | $Tuple2([IntegerEntry(A(B), nj), StringEntry(bO(B), nk)], false) | |
3190 | 3193 | } | |
3191 | 3194 | ||
3192 | 3195 | ||
3193 | 3196 | ||
3194 | - | @Callable( | |
3195 | - | func processDelivery (B) = if (( | |
3197 | + | @Callable(gK) | |
3198 | + | func processDelivery (B) = if ((gK.caller != this)) | |
3196 | 3199 | then throw("Access denied") | |
3197 | 3200 | else { | |
3198 | - | let c = toString( | |
3199 | - | let | |
3200 | - | if (( | |
3201 | - | then throw(("Delivery is not available, fund=" + | |
3201 | + | let c = toString(gK.originCaller) | |
3202 | + | let nl = valueOrElse(getInteger(de, bS), 0) | |
3203 | + | if ((aQ > nl)) | |
3204 | + | then throw(("Delivery is not available, fund=" + dL(nl, 6))) | |
3202 | 3205 | else { | |
3203 | - | let | |
3204 | - | let | |
3205 | - | let | |
3206 | - | let | |
3207 | - | let | |
3208 | - | let | |
3209 | - | let | |
3210 | - | if (if (( | |
3211 | - | then ( | |
3206 | + | let aA = lastBlock.timestamp | |
3207 | + | let nm = V(c) | |
3208 | + | let fR = valueOrElse(getInteger(nm), 0) | |
3209 | + | let nn = valueOrElse(getInteger(W(c)), 0) | |
3210 | + | let no = (aA / a) | |
3211 | + | let np = valueOrElse(getInteger(di, d(c)), 0) | |
3212 | + | let nq = (aR + (np / aS)) | |
3213 | + | if (if ((fR >= nq)) | |
3214 | + | then (nn == no) | |
3212 | 3215 | else false) | |
3213 | - | then throw((("You already used " + toString( | |
3216 | + | then throw((("You already used " + toString(nq)) + " delivery attempts for today")) | |
3214 | 3217 | else { | |
3215 | - | let nq = invoke(dd, "sendDeliveryReward", [c], nil) | |
3216 | - | $Tuple2([IntegerEntry(nl, (fQ + 1)), IntegerEntry(V(c), nn)], nq) | |
3218 | + | let nr = U(B) | |
3219 | + | let ns = invoke(de, "sendDeliveryReward", [c], nil) | |
3220 | + | $Tuple2([IntegerEntry(nm, (fR + 1)), IntegerEntry(W(c), no), IntegerEntry(nr, (valueOrElse(getInteger(nr), 0) + 1))], ns) | |
3217 | 3221 | } | |
3218 | 3222 | } | |
3219 | 3223 | } | |
3220 | 3224 | ||
3221 | 3225 | ||
3222 | 3226 | ||
3223 | - | @Callable( | |
3224 | - | func prepareRobbery ( | |
3225 | - | let | |
3226 | - | if (!(sigVerify_8Kb( | |
3227 | + | @Callable(gK) | |
3228 | + | func prepareRobbery (iQ,iR) = { | |
3229 | + | let kW = kT(gK) | |
3230 | + | if (!(sigVerify_8Kb(iQ, iR, cy))) | |
3227 | 3231 | then throw("signature does not match") | |
3228 | - | else if ((size( | |
3232 | + | else if ((size(gK.payments) != 1)) | |
3229 | 3233 | then throw("exactly 1 payment must be attached") | |
3230 | 3234 | else { | |
3231 | - | let | |
3232 | - | let | |
3233 | - | if (if (!(isDefined( | |
3235 | + | let kX = gK.payments[0] | |
3236 | + | let nt = kX.amount | |
3237 | + | if (if (!(isDefined(kX.assetId))) | |
3234 | 3238 | then true | |
3235 | - | else (value( | |
3239 | + | else (value(kX.assetId) != do)) | |
3236 | 3240 | then throw("WLGOLD payments only!") | |
3237 | 3241 | else { | |
3238 | - | let | |
3239 | - | if ((2 > size( | |
3242 | + | let fp = split(toUtf8String(iQ), "|") | |
3243 | + | if ((2 > size(fp))) | |
3240 | 3244 | then throw("Wrong message format") | |
3241 | 3245 | else { | |
3242 | - | let | |
3243 | - | then | |
3246 | + | let iZ = if ((size(fp) >= 2)) | |
3247 | + | then fp[2] | |
3244 | 3248 | else "" | |
3245 | - | let | |
3246 | - | let | |
3247 | - | if (( | |
3248 | - | then throw(((("Tx ids don't match! In state: " + | |
3249 | + | let bQ = toString(gK.caller) | |
3250 | + | let ja = valueOrElse(getString(dK(bQ)), "") | |
3251 | + | if ((ja != iZ)) | |
3252 | + | then throw(((("Tx ids don't match! In state: " + ja) + ", in msg: ") + iZ)) | |
3249 | 3253 | else { | |
3250 | - | let B = | |
3251 | - | if ( | |
3254 | + | let B = fp[0] | |
3255 | + | if (kq(B)) | |
3252 | 3256 | then throw("prepareRobbery_checkTournament") | |
3253 | 3257 | else { | |
3254 | - | let | |
3255 | - | if (( | |
3256 | - | then throw(((("Payment " + toString( | |
3258 | + | let aB = ax(this, B)._1 | |
3259 | + | if ((aB > nt)) | |
3260 | + | then throw(((("Payment " + toString(nt)) + " < required ") + toString(aB))) | |
3257 | 3261 | else { | |
3258 | - | let | |
3259 | - | let | |
3260 | - | let | |
3261 | - | let | |
3262 | - | let | |
3263 | - | if (if (( | |
3264 | - | then ( | |
3262 | + | let nu = split(fp[1], "_") | |
3263 | + | let aA = lastBlock.timestamp | |
3264 | + | let aC = valueOrElse(getInteger(S(B)), 0) | |
3265 | + | let aD = valueOrElse(getString(T(B)), "") | |
3266 | + | let aE = valueOrElse(getInteger(R(aD)), 0) | |
3267 | + | if (if ((aC != y)) | |
3268 | + | then (aE > aA) | |
3265 | 3269 | else false) | |
3266 | - | then throw(("You already started robbing, wait till " + toString( | |
3270 | + | then throw(("You already started robbing, wait till " + toString(aE))) | |
3267 | 3271 | else { | |
3268 | - | func | |
3269 | - | let | |
3270 | - | let | |
3271 | - | if (( | |
3272 | + | func nv (eR,Q) = { | |
3273 | + | let nw = valueOrElse(getInteger(P(Q)), 0) | |
3274 | + | let nx = valueOrElse(getInteger(R(Q)), 0) | |
3275 | + | if ((nw > size(v))) | |
3272 | 3276 | then throw("Invalid state") | |
3273 | - | else if (( | |
3277 | + | else if ((aA > nx)) | |
3274 | 3278 | then { | |
3275 | - | let | |
3276 | - | if ((0 >= | |
3277 | - | then | |
3279 | + | let ny = valueOrElse(getInteger(bw(Q)), 0) | |
3280 | + | if ((0 >= ny)) | |
3281 | + | then eR | |
3278 | 3282 | else { | |
3279 | - | let | |
3280 | - | let | |
3281 | - | let | |
3282 | - | let | |
3283 | - | let | |
3284 | - | let | |
3285 | - | if ((w > | |
3286 | - | then | |
3287 | - | else ( | |
3283 | + | let gr = value(assetInfo(fromBase58String(Q))) | |
3284 | + | let jw = split(gr.description, "_") | |
3285 | + | let ji = dG(jw[dk]) | |
3286 | + | let nz = jh(Q, ji) | |
3287 | + | let gQ = (aA - ny) | |
3288 | + | let jz = fraction(gQ, (nz * ji), a) | |
3289 | + | if ((w > jz)) | |
3290 | + | then eR | |
3291 | + | else (eR :+ Q) | |
3288 | 3292 | } | |
3289 | 3293 | } | |
3290 | - | else | |
3294 | + | else eR | |
3291 | 3295 | } | |
3292 | 3296 | ||
3293 | - | let | |
3294 | - | let | |
3295 | - | let | |
3296 | - | let | |
3297 | - | func | |
3298 | - | then | |
3299 | - | else | |
3300 | - | ||
3301 | - | func | |
3302 | - | then | |
3297 | + | let nA = { | |
3298 | + | let eT = nu | |
3299 | + | let eU = size(eT) | |
3300 | + | let eV = nil | |
3301 | + | func eW (eX,eY) = if ((eY >= eU)) | |
3302 | + | then eX | |
3303 | + | else nv(eX, eT[eY]) | |
3304 | + | ||
3305 | + | func eZ (eX,eY) = if ((eY >= eU)) | |
3306 | + | then eX | |
3303 | 3307 | else throw("List size exceeds 10") | |
3304 | 3308 | ||
3305 | - | | |
3309 | + | eZ(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
3306 | 3310 | } | |
3307 | - | if ((size( | |
3311 | + | if ((size(nA) == 0)) | |
3308 | 3312 | then throw("No candidates for robbery") | |
3309 | 3313 | else { | |
3310 | - | let | |
3311 | - | let Q = | |
3312 | - | $Tuple2(([IntegerEntry(P(Q), x), IntegerEntry(R(Q), ( | |
3314 | + | let nB = dR(size(nA), iQ, iR) | |
3315 | + | let Q = nA[nB] | |
3316 | + | $Tuple2(([IntegerEntry(P(Q), x), IntegerEntry(R(Q), (aA + v[x])), IntegerEntry(S(B), z), StringEntry(T(B), Q)] ++ kW), Q) | |
3313 | 3317 | } | |
3314 | 3318 | } | |
3315 | 3319 | } | |
3322 | 3326 | ||
3323 | 3327 | ||
3324 | 3328 | ||
3325 | - | @Callable( | |
3326 | - | func robLand ( | |
3327 | - | let | |
3328 | - | if (!(sigVerify_8Kb( | |
3329 | + | @Callable(gK) | |
3330 | + | func robLand (iQ,iR) = { | |
3331 | + | let kW = kT(gK) | |
3332 | + | if (!(sigVerify_8Kb(iQ, iR, cy))) | |
3329 | 3333 | then throw("signature does not match") | |
3330 | 3334 | else { | |
3331 | - | let | |
3332 | - | let B = valueOrErrorMessage(getString( | |
3333 | - | let | |
3334 | - | $Tuple2(( | |
3335 | - | } | |
3336 | - | } | |
3337 | - | ||
3338 | - | ||
3339 | - | ||
3340 | - | @Callable( | |
3341 | - | func buyRoboDuck () = if (!( | |
3335 | + | let bQ = toString(gK.caller) | |
3336 | + | let B = valueOrErrorMessage(getString(bM(bQ)), "You don't have a duck staked") | |
3337 | + | let aA = lastBlock.timestamp | |
3338 | + | $Tuple2((kW :+ IntegerEntry(N(B), aA)), 0) | |
3339 | + | } | |
3340 | + | } | |
3341 | + | ||
3342 | + | ||
3343 | + | ||
3344 | + | @Callable(gK) | |
3345 | + | func buyRoboDuck () = if (!(cv)) | |
3342 | 3346 | then throw("Feature is turned off") | |
3343 | 3347 | else { | |
3344 | - | let | |
3345 | - | if ((size( | |
3348 | + | let kW = kT(gK) | |
3349 | + | if ((size(gK.payments) != 1)) | |
3346 | 3350 | then throw("Exactly one payment required") | |
3347 | 3351 | else { | |
3348 | - | let | |
3349 | - | if (( | |
3352 | + | let kX = value(gK.payments[0]) | |
3353 | + | if ((kX.assetId != cA)) | |
3350 | 3354 | then throw("Allowed USDT payment only!") | |
3351 | - | else if (( | |
3352 | - | then throw((("Payment attached should be " + | |
3355 | + | else if ((kX.amount != ef)) | |
3356 | + | then throw((("Payment attached should be " + dL(ef, 6)) + " USDT")) | |
3353 | 3357 | else { | |
3354 | - | let | |
3355 | - | let | |
3356 | - | let | |
3357 | - | let | |
3358 | - | let | |
3359 | - | let | |
3360 | - | $Tuple2((((( | |
3358 | + | let nC = valueOrElse(getInteger(ey()), 0) | |
3359 | + | let nD = toBytes(nC) | |
3360 | + | let eq = ((aH + "-") + takeRight(toBase16String(nD), 8)) | |
3361 | + | let nE = takeRight(toBase16String(sha256_16Kb(nD)), 6) | |
3362 | + | let iN = Issue(eq, ("Robo Duck NFT for WavesLands game, background color = #" + nE), 1, 0, false) | |
3363 | + | let bu = calculateAssetId(iN) | |
3364 | + | $Tuple2(((((kW :+ IntegerEntry(ey(), (nC + 1))) :+ iN) :+ ScriptTransfer(gK.originCaller, 1, bu)) :+ ScriptTransfer(de, kX.amount, cA)), $Tuple2(toBase58String(bu), nE)) | |
3361 | 3365 | } | |
3362 | 3366 | } | |
3363 | 3367 | } |
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 | - | func U (c) = ("userDeliveryCount_" + c) | |
111 | - | ||
112 | - | ||
113 | - | func V (c) = ("userLastDeliveryDay_" + c) | |
114 | - | ||
115 | - | ||
116 | - | let W = 10000 | |
110 | + | func U (B) = ("totalDeliveryCountByDuck_" + B) | |
111 | + | ||
112 | + | ||
113 | + | func V (c) = ("userDeliveryCount_" + c) | |
114 | + | ||
115 | + | ||
116 | + | func W (c) = ("userLastDeliveryDay_" + c) | |
117 | + | ||
117 | 118 | ||
118 | 119 | let X = 10000 | |
119 | 120 | ||
120 | - | let Y = | |
121 | - | ||
122 | - | let Z = | |
123 | - | ||
124 | - | let aa = | |
125 | - | ||
126 | - | let ab = | |
127 | - | ||
128 | - | let ac = | |
129 | - | ||
130 | - | let ad = | |
121 | + | let Y = 10000 | |
122 | + | ||
123 | + | let Z = 2000 | |
124 | + | ||
125 | + | let aa = 100000 | |
126 | + | ||
127 | + | let ab = 1000000 | |
128 | + | ||
129 | + | let ac = 5000000 | |
130 | + | ||
131 | + | let ad = 10000 | |
131 | 132 | ||
132 | 133 | let ae = 1000000 | |
133 | 134 | ||
134 | - | let af = | |
135 | - | ||
136 | - | ||
137 | - | ||
138 | - | ||
139 | - | ||
140 | - | ||
141 | - | ||
142 | - | ||
143 | - | ||
144 | - | ||
145 | - | | |
146 | - | ||
147 | - | ||
148 | - | ||
149 | - | ||
150 | - | ||
151 | - | let | |
152 | - | let | |
153 | - | ( | |
154 | - | | |
155 | - | | |
156 | - | | |
157 | - | ||
158 | - | ||
159 | - | ||
160 | - | ||
161 | - | ||
162 | - | let | |
163 | - | let | |
164 | - | let | |
165 | - | let | |
166 | - | let | |
167 | - | | |
168 | - | | |
169 | - | ||
170 | - | ||
171 | - | ||
172 | - | ||
173 | - | let aF = " | |
174 | - | ||
175 | - | let aG = " | |
176 | - | ||
177 | - | let aH = " | |
178 | - | ||
179 | - | let aI = | |
180 | - | ||
181 | - | let aJ = | |
182 | - | ||
183 | - | let aK = | |
184 | - | ||
185 | - | let aL = | |
186 | - | ||
187 | - | let aM = | |
188 | - | ||
189 | - | let aN = | |
190 | - | ||
191 | - | let aO = | |
192 | - | ||
193 | - | let aP = | |
194 | - | ||
195 | - | let aQ = | |
196 | - | ||
197 | - | let aR = | |
198 | - | ||
199 | - | let aS = | |
200 | - | ||
201 | - | let aT = [" | |
202 | - | ||
203 | - | let aU = | |
204 | - | ||
205 | - | let aV = | |
206 | - | ||
207 | - | let aW = [ | |
208 | - | ||
209 | - | let aX = 6 | |
210 | - | ||
211 | - | let aY = | |
212 | - | ||
213 | - | let aZ = | |
214 | - | ||
215 | - | let ba = | |
135 | + | let af = 1000000 | |
136 | + | ||
137 | + | let ag = 10000 | |
138 | + | ||
139 | + | func ah (ai) = fraction(f, pow(ai, 4, g, 4, 4, DOWN), e) | |
140 | + | ||
141 | + | ||
142 | + | func aj (ak) = (100 + ak) | |
143 | + | ||
144 | + | ||
145 | + | func al (am,an) = { | |
146 | + | let ao = ah(an) | |
147 | + | [ao, (h * (ao - am))] | |
148 | + | } | |
149 | + | ||
150 | + | ||
151 | + | func ap (aq,B,ar,as) = { | |
152 | + | let at = split(valueOrElse(getString(aq, C(B)), "0_0_0_0_0"), "_") | |
153 | + | let au = valueOrElse(getInteger(aq, E(B)), 0) | |
154 | + | let av = valueOrElse(getInteger(aq, A(B)), aj(au)) | |
155 | + | let aw = split(valueOrElse(getString(aq, M(B)), "0_0_0_0_0"), "_") | |
156 | + | ([parseIntValue(at[l]), parseIntValue(at[m]), parseIntValue(at[n]), parseIntValue(at[o]), parseIntValue(at[p]), au, av] ++ (if (as) | |
157 | + | then [ar, ar, ar, ar, ar] | |
158 | + | else [parseIntValue(aw[l]), parseIntValue(aw[m]), parseIntValue(aw[n]), parseIntValue(aw[o]), parseIntValue(aw[p])])) | |
159 | + | } | |
160 | + | ||
161 | + | ||
162 | + | func ax (aq,B) = { | |
163 | + | let ay = valueOrElse(getInteger(aq, O(B)), 0) | |
164 | + | let az = valueOrElse(getInteger(aq, N(B)), 0) | |
165 | + | let aA = lastBlock.timestamp | |
166 | + | let aB = max([i, (ay - (j * (aA - az)))]) | |
167 | + | let aC = valueOrElse(getInteger(aq, S(B)), 0) | |
168 | + | let aD = valueOrElse(getString(aq, T(B)), "") | |
169 | + | let aE = valueOrElse(getInteger(aq, R(aD)), 0) | |
170 | + | $Tuple5(aB, az, aC, aD, aE) | |
171 | + | } | |
172 | + | ||
173 | + | ||
174 | + | let aF = "LAND" | |
175 | + | ||
176 | + | let aG = "DUCK" | |
177 | + | ||
178 | + | let aH = "ROBO" | |
179 | + | ||
180 | + | let aI = "PRESALE" | |
181 | + | ||
182 | + | let aJ = 6 | |
183 | + | ||
184 | + | let aK = 25 | |
185 | + | ||
186 | + | let aL = 3456000 | |
187 | + | ||
188 | + | let aM = 10000000000 | |
189 | + | ||
190 | + | let aN = "Africa_F_Africa" | |
191 | + | ||
192 | + | let aO = 39637 | |
193 | + | ||
194 | + | let aP = 10 | |
195 | + | ||
196 | + | let aQ = 50000 | |
197 | + | ||
198 | + | let aR = 1 | |
199 | + | ||
200 | + | let aS = 50000000 | |
201 | + | ||
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", "Boom-Dog L1", "Boom-Dog L2", "Boom-Dog L3"] | |
203 | + | ||
204 | + | let aU = ["Americas", "Europe", "Asia", "Africa", "Oceania"] | |
205 | + | ||
206 | + | let aV = 10000000 | |
207 | + | ||
208 | + | let aW = [15, 16, 17, 18, 19, 20, 21, 22, 23] | |
209 | + | ||
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_", "23_23_5_20_23_6_35_2_100_0,0,0,0,0,0,0_", "23_23_5_20_23_6_70_2_150_0,0,0,0,0,0,0_", "23_23_5_20_23_6_105_2_200_0,0,0,0,0,0,0_"] | |
211 | + | ||
212 | + | let aY = 6 | |
213 | + | ||
214 | + | let aZ = 8 | |
215 | + | ||
216 | + | let ba = 9 | |
216 | 217 | ||
217 | 218 | let bb = 10 | |
218 | 219 | ||
219 | - | let bc = 0 | |
220 | - | ||
221 | - | let bd = 1 | |
222 | - | ||
223 | - | let be = 2 | |
224 | - | ||
225 | - | let bf = 3 | |
226 | - | ||
227 | - | let bg = 4 | |
228 | - | ||
229 | - | let bh = 0 | |
230 | - | ||
231 | - | let bi = 1 | |
232 | - | ||
233 | - | let bj = 2 | |
234 | - | ||
235 | - | let bk = 3 | |
236 | - | ||
237 | - | let bl = 0 | |
238 | - | ||
239 | - | let bm = 1 | |
240 | - | ||
241 | - | let bn = 2 | |
242 | - | ||
243 | - | let bo = 3 | |
244 | - | ||
245 | - | let bp = 0 | |
246 | - | ||
247 | - | let bq = 1 | |
248 | - | ||
249 | - | let br = 2 | |
250 | - | ||
251 | - | func bs (bt) = ("no_" + bt) | |
252 | - | ||
253 | - | ||
254 | - | func bu (bt) = ("lcna_" + bt) | |
255 | - | ||
256 | - | ||
257 | - | func bv (bt) = ("st_" + bt) | |
258 | - | ||
259 | - | ||
260 | - | func bw (bx,bt) = makeString(["las", bx, bt], "_") | |
261 | - | ||
262 | - | ||
263 | - | func by (bz,bt,bA) = ((((("sttao_" + bz) + "_") + bt) + "_") + bA) | |
264 | - | ||
265 | - | ||
266 | - | func bB (Q) = ("wh_" + Q) | |
267 | - | ||
268 | - | ||
269 | - | func bC (bt) = ("infraLevel_" + bt) | |
270 | - | ||
271 | - | ||
272 | - | func bD (Q) = ("fortifications_" + Q) | |
273 | - | ||
274 | - | ||
275 | - | func bE (bt) = ("duckCustomNameByAssetId_" + bt) | |
276 | - | ||
277 | - | ||
278 | - | func bF (c) = ("accountCustomNameByAddr_" + c) | |
279 | - | ||
280 | - | ||
281 | - | func bG (c) = ("accRefBy_" + c) | |
282 | - | ||
283 | - | ||
284 | - | func bH (B) = ("onboardArtActivatedOnDuck_" + B) | |
285 | - | ||
286 | - | ||
287 | - | func bI (c) = ("onboardArtActivatedDuckBy_" + c) | |
288 | - | ||
289 | - | ||
290 | - | func bJ (c) = ("accReferrals_" + c) | |
291 | - | ||
292 | - | ||
293 | - | func bK (bt) = ("duckOwner_" + bt) | |
294 | - | ||
295 | - | ||
296 | - | func bL (bA) = ("stakedDuckByOwner_" + bA) | |
297 | - | ||
298 | - | ||
299 | - | func bM (B) = ("backPack_" + B) | |
300 | - | ||
301 | - | ||
302 | - | func bN (B) = ("duckLocation_" + B) | |
303 | - | ||
304 | - | ||
305 | - | func bO (bP) = ("%s%s__userGwlReleaseTime__" + bP) | |
306 | - | ||
307 | - | ||
308 | - | func bQ () = "emergencyWarehouseProducts" | |
309 | - | ||
310 | - | ||
311 | - | let bR = "deliveryFund" | |
312 | - | ||
313 | - | let bS = "%s__lastTourId" | |
314 | - | ||
315 | - | func bT (bU) = ("%s%d__tourStaticData__" + toString(bU)) | |
316 | - | ||
317 | - | ||
318 | - | func bV (bU) = ("%s%d__tourDynamicData__" + toString(bU)) | |
319 | - | ||
320 | - | ||
321 | - | func bW (bU,B) = makeString(["%s%d%s__bestResultByTourAndDuck", toString(bU), B], "__") | |
322 | - | ||
323 | - | ||
324 | - | let bX = 0 | |
325 | - | ||
326 | - | let bY = 1 | |
327 | - | ||
328 | - | let bZ = 6 | |
329 | - | ||
330 | - | let ca = 1 | |
331 | - | ||
332 | - | func cb (cc,bU) = { | |
333 | - | let cd = split(valueOrErrorMessage(getString(cc, bT(bU)), (("Error reading tournament " + toString(bU)) + " data")), "__") | |
334 | - | let ce = split_4C(valueOrErrorMessage(getString(cc, bV(bU)), (("Error reading tournament " + toString(bU)) + " data")), "__") | |
335 | - | [cd, ce] | |
336 | - | } | |
337 | - | ||
338 | - | ||
339 | - | func cf (cc,cg) = { | |
340 | - | let ch = valueOrElse(getInteger(cc, bS), 0) | |
341 | - | let ci = split(cg, "_") | |
342 | - | let az = lastBlock.timestamp | |
343 | - | let cj = cb(cc, ch) | |
344 | - | let cd = cj[bX] | |
345 | - | let ce = cj[bY] | |
346 | - | if (if (if ((ci[bq] == "T")) | |
347 | - | then (parseIntValue(ci[bp]) == ch) | |
220 | + | let bc = 10 | |
221 | + | ||
222 | + | let bd = 0 | |
223 | + | ||
224 | + | let be = 1 | |
225 | + | ||
226 | + | let bf = 2 | |
227 | + | ||
228 | + | let bg = 3 | |
229 | + | ||
230 | + | let bh = 4 | |
231 | + | ||
232 | + | let bi = 0 | |
233 | + | ||
234 | + | let bj = 1 | |
235 | + | ||
236 | + | let bk = 2 | |
237 | + | ||
238 | + | let bl = 3 | |
239 | + | ||
240 | + | let bm = 0 | |
241 | + | ||
242 | + | let bn = 1 | |
243 | + | ||
244 | + | let bo = 2 | |
245 | + | ||
246 | + | let bp = 3 | |
247 | + | ||
248 | + | let bq = 0 | |
249 | + | ||
250 | + | let br = 1 | |
251 | + | ||
252 | + | let bs = 2 | |
253 | + | ||
254 | + | func bt (bu) = ("no_" + bu) | |
255 | + | ||
256 | + | ||
257 | + | func bv (bu) = ("lcna_" + bu) | |
258 | + | ||
259 | + | ||
260 | + | func bw (bu) = ("st_" + bu) | |
261 | + | ||
262 | + | ||
263 | + | func bx (by,bu) = makeString(["las", by, bu], "_") | |
264 | + | ||
265 | + | ||
266 | + | func bz (bA,bu,bB) = ((((("sttao_" + bA) + "_") + bu) + "_") + bB) | |
267 | + | ||
268 | + | ||
269 | + | func bC (Q) = ("wh_" + Q) | |
270 | + | ||
271 | + | ||
272 | + | func bD (bu) = ("infraLevel_" + bu) | |
273 | + | ||
274 | + | ||
275 | + | func bE (Q) = ("fortifications_" + Q) | |
276 | + | ||
277 | + | ||
278 | + | func bF (bu) = ("duckCustomNameByAssetId_" + bu) | |
279 | + | ||
280 | + | ||
281 | + | func bG (c) = ("accountCustomNameByAddr_" + c) | |
282 | + | ||
283 | + | ||
284 | + | func bH (c) = ("accRefBy_" + c) | |
285 | + | ||
286 | + | ||
287 | + | func bI (B) = ("onboardArtActivatedOnDuck_" + B) | |
288 | + | ||
289 | + | ||
290 | + | func bJ (c) = ("onboardArtActivatedDuckBy_" + c) | |
291 | + | ||
292 | + | ||
293 | + | func bK (c) = ("accReferrals_" + c) | |
294 | + | ||
295 | + | ||
296 | + | func bL (bu) = ("duckOwner_" + bu) | |
297 | + | ||
298 | + | ||
299 | + | func bM (bB) = ("stakedDuckByOwner_" + bB) | |
300 | + | ||
301 | + | ||
302 | + | func bN (B) = ("backPack_" + B) | |
303 | + | ||
304 | + | ||
305 | + | func bO (B) = ("duckLocation_" + B) | |
306 | + | ||
307 | + | ||
308 | + | func bP (bQ) = ("%s%s__userGwlReleaseTime__" + bQ) | |
309 | + | ||
310 | + | ||
311 | + | func bR () = "emergencyWarehouseProducts" | |
312 | + | ||
313 | + | ||
314 | + | let bS = "deliveryFund" | |
315 | + | ||
316 | + | let bT = "%s__lastTourId" | |
317 | + | ||
318 | + | func bU (bV) = ("%s%d__tourStaticData__" + toString(bV)) | |
319 | + | ||
320 | + | ||
321 | + | func bW (bV) = ("%s%d__tourDynamicData__" + toString(bV)) | |
322 | + | ||
323 | + | ||
324 | + | func bX (bV,B) = makeString(["%s%d%s__bestResultByTourAndDuck", toString(bV), B], "__") | |
325 | + | ||
326 | + | ||
327 | + | let bY = 0 | |
328 | + | ||
329 | + | let bZ = 1 | |
330 | + | ||
331 | + | let ca = 6 | |
332 | + | ||
333 | + | let cb = 1 | |
334 | + | ||
335 | + | func cc (cd,bV) = { | |
336 | + | let ce = split(valueOrErrorMessage(getString(cd, bU(bV)), (("Error reading tournament " + toString(bV)) + " data")), "__") | |
337 | + | let cf = split_4C(valueOrErrorMessage(getString(cd, bW(bV)), (("Error reading tournament " + toString(bV)) + " data")), "__") | |
338 | + | [ce, cf] | |
339 | + | } | |
340 | + | ||
341 | + | ||
342 | + | func cg (cd,ch) = { | |
343 | + | let ci = valueOrElse(getInteger(cd, bT), 0) | |
344 | + | let cj = split(ch, "_") | |
345 | + | let aA = lastBlock.timestamp | |
346 | + | let ck = cc(cd, ci) | |
347 | + | let ce = ck[bY] | |
348 | + | let cf = ck[bZ] | |
349 | + | if (if (if ((cj[br] == "T")) | |
350 | + | then (parseIntValue(cj[bq]) == ci) | |
348 | 351 | else false) | |
349 | - | then ( | |
352 | + | then (cf[cb] == "INPROGRESS") | |
350 | 353 | else false) | |
351 | - | then (parseIntValue( | |
354 | + | then (parseIntValue(ce[ca]) > aA) | |
352 | 355 | else false | |
353 | 356 | } | |
354 | 357 | ||
355 | 358 | ||
356 | - | func | |
357 | - | let | |
358 | - | let | |
359 | - | let | |
360 | - | let | |
361 | - | let | |
362 | - | let | |
363 | - | let | |
364 | - | if (if (if (( | |
365 | - | then (parseIntValue( | |
359 | + | func cl (cd,ch) = { | |
360 | + | let ci = valueOrElse(getInteger(cd, bT), 0) | |
361 | + | let cj = split(ch, "_") | |
362 | + | let aA = lastBlock.timestamp | |
363 | + | let ck = cc(cd, ci) | |
364 | + | let ce = ck[bY] | |
365 | + | let cf = ck[bZ] | |
366 | + | let cm = cj[br] | |
367 | + | if (if (if ((cj[br] == "T")) | |
368 | + | then (parseIntValue(cj[bq]) == ci) | |
366 | 369 | else false) | |
367 | - | then ( | |
370 | + | then (cf[cb] == "INPROGRESS") | |
368 | 371 | else false) | |
369 | - | then (parseIntValue( | |
372 | + | then (parseIntValue(ce[ca]) > aA) | |
370 | 373 | else false | |
371 | 374 | } | |
372 | 375 | ||
373 | 376 | ||
374 | - | func cm (cn) = (parseIntValue(cn[aX]) * aU) | |
375 | - | ||
376 | - | ||
377 | - | func co (cp,cq,cr) = throw(((((("Cheat attempt: oldLoc=" + cp) + ", newLoc=") + cq) + ", case=") + toString(cr))) | |
378 | - | ||
379 | - | ||
380 | - | let cs = false | |
377 | + | func cn (co) = (parseIntValue(co[aY]) * aV) | |
378 | + | ||
379 | + | ||
380 | + | func cp (cq,cr,cs) = throw(((((("Cheat attempt: oldLoc=" + cq) + ", newLoc=") + cr) + ", case=") + toString(cs))) | |
381 | + | ||
381 | 382 | ||
382 | 383 | let ct = false | |
383 | 384 | ||
384 | 385 | let cu = false | |
385 | 386 | ||
386 | - | let cv = 86400000 | |
387 | - | ||
388 | - | let cw = take(drop(this.bytes, 1), 1) | |
389 | - | ||
390 | - | let cx = { | |
391 | - | let cy = cw | |
392 | - | if ((base58'2W' == cy)) | |
393 | - | then if (cs) | |
387 | + | let cv = false | |
388 | + | ||
389 | + | let cw = 86400000 | |
390 | + | ||
391 | + | let cx = take(drop(this.bytes, 1), 1) | |
392 | + | ||
393 | + | let cy = { | |
394 | + | let cz = cx | |
395 | + | if ((base58'2W' == cz)) | |
396 | + | then if (ct) | |
394 | 397 | then base58'CWsMtTZC5BjjoL4Q1ayW4Wwb1ehGACQB6DrKyPgotKfm' | |
395 | 398 | else base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD' | |
396 | - | else if ((base58'2T' == | |
399 | + | else if ((base58'2T' == cz)) | |
397 | 400 | then base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD' | |
398 | 401 | else throw("Unknown chain") | |
399 | 402 | } | |
400 | 403 | ||
401 | - | let | |
402 | - | let | |
403 | - | if ((base58'2W' == | |
404 | + | let cA = { | |
405 | + | let cz = cx | |
406 | + | if ((base58'2W' == cz)) | |
404 | 407 | then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi' | |
405 | - | else if ((base58'2T' == | |
408 | + | else if ((base58'2T' == cz)) | |
406 | 409 | then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63' | |
407 | 410 | else throw("Unknown chain") | |
408 | 411 | } | |
409 | 412 | ||
410 | - | let | |
411 | - | let | |
412 | - | if ((base58'2W' == | |
413 | + | let cB = { | |
414 | + | let cz = cx | |
415 | + | if ((base58'2W' == cz)) | |
413 | 416 | then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv" | |
414 | - | else if ((base58'2T' == | |
417 | + | else if ((base58'2T' == cz)) | |
415 | 418 | then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy" | |
416 | 419 | else throw("Unknown chain") | |
417 | 420 | } | |
418 | 421 | ||
419 | - | let | |
420 | - | let | |
421 | - | if ((base58'2W' == | |
422 | + | let cC = { | |
423 | + | let cz = cx | |
424 | + | if ((base58'2W' == cz)) | |
422 | 425 | then 10000000000 | |
423 | - | else if ((base58'2T' == | |
426 | + | else if ((base58'2T' == cz)) | |
424 | 427 | then 100000000 | |
425 | 428 | else throw("Unknown chain") | |
426 | 429 | } | |
427 | 430 | ||
428 | - | let | |
429 | - | let | |
430 | - | if ((base58'2W' == | |
431 | - | then | |
432 | - | else if ((base58'2T' == | |
431 | + | let cD = { | |
432 | + | let cz = cx | |
433 | + | if ((base58'2W' == cz)) | |
434 | + | then cw | |
435 | + | else if ((base58'2T' == cz)) | |
433 | 436 | then 60000 | |
434 | 437 | else throw("Unknown chain") | |
435 | 438 | } | |
436 | 439 | ||
437 | - | let | |
438 | - | ||
439 | - | let | |
440 | - | ||
441 | - | let | |
442 | - | ||
443 | - | let | |
444 | - | ||
445 | - | let | |
446 | - | ||
447 | - | let | |
448 | - | ||
449 | - | let | |
450 | - | ||
451 | - | let | |
452 | - | ||
453 | - | let | |
454 | - | ||
455 | - | func | |
456 | - | ||
457 | - | ||
458 | - | let | |
459 | - | ||
460 | - | let | |
461 | - | ||
462 | - | let | |
463 | - | ||
464 | - | let | |
465 | - | ||
466 | - | let | |
467 | - | ||
468 | - | let | |
469 | - | ||
470 | - | func | |
471 | - | ||
472 | - | ||
473 | - | func | |
474 | - | ||
475 | - | ||
476 | - | func | |
477 | - | ||
478 | - | ||
479 | - | func | |
480 | - | ||
481 | - | ||
482 | - | let | |
483 | - | ||
484 | - | let | |
485 | - | ||
486 | - | let | |
487 | - | ||
488 | - | let | |
489 | - | ||
490 | - | let | |
491 | - | ||
492 | - | let | |
493 | - | ||
494 | - | let | |
495 | - | ||
496 | - | let | |
497 | - | ||
498 | - | let | |
499 | - | ||
500 | - | let | |
501 | - | ||
502 | - | let | |
503 | - | ||
504 | - | let | |
505 | - | ||
506 | - | let | |
507 | - | ||
508 | - | let | |
509 | - | ||
510 | - | let | |
511 | - | ||
512 | - | let | |
513 | - | ||
514 | - | let | |
515 | - | ||
516 | - | func | |
517 | - | ||
518 | - | ||
519 | - | func | |
520 | - | ||
521 | - | ||
522 | - | func | |
523 | - | ||
524 | - | ||
525 | - | func | |
526 | - | ||
527 | - | ||
528 | - | func | |
529 | - | ||
530 | - | ||
531 | - | func | |
532 | - | let | |
533 | - | if ($isInstanceOf( | |
440 | + | let cE = "__" | |
441 | + | ||
442 | + | let cF = 1000000 | |
443 | + | ||
444 | + | let cG = 100000000 | |
445 | + | ||
446 | + | let cH = 25 | |
447 | + | ||
448 | + | let cI = 100 | |
449 | + | ||
450 | + | let cJ = 225 | |
451 | + | ||
452 | + | let cK = 400 | |
453 | + | ||
454 | + | let cL = 625 | |
455 | + | ||
456 | + | let cM = [0, 1, 2, 3, 4, 5] | |
457 | + | ||
458 | + | func cN (cO,cP) = valueOrErrorMessage(getString(cO, cP), makeString(["mandatory ", toString(cO), ".", cP, " is not defined"], "")) | |
459 | + | ||
460 | + | ||
461 | + | let cQ = 1 | |
462 | + | ||
463 | + | let cR = 2 | |
464 | + | ||
465 | + | let cS = 3 | |
466 | + | ||
467 | + | let cT = 4 | |
468 | + | ||
469 | + | let cU = 7 | |
470 | + | ||
471 | + | let cV = 8 | |
472 | + | ||
473 | + | func cW () = "%s__restConfig" | |
474 | + | ||
475 | + | ||
476 | + | func cX () = "%s__restAddr" | |
477 | + | ||
478 | + | ||
479 | + | func cY (cZ) = split_4C(cN(cZ, cW()), cE) | |
480 | + | ||
481 | + | ||
482 | + | func da (db,dc) = valueOrErrorMessage(addressFromString(db[dc]), ("Rest cfg doesn't contain address at index " + toString(dc))) | |
483 | + | ||
484 | + | ||
485 | + | let dd = addressFromStringValue(valueOrElse(getString(this, cX()), cB)) | |
486 | + | ||
487 | + | let db = cY(dd) | |
488 | + | ||
489 | + | let aq = da(db, cQ) | |
490 | + | ||
491 | + | let de = da(db, cR) | |
492 | + | ||
493 | + | let df = da(db, cS) | |
494 | + | ||
495 | + | let dg = da(db, cT) | |
496 | + | ||
497 | + | let dh = da(db, cU) | |
498 | + | ||
499 | + | let di = da(db, cV) | |
500 | + | ||
501 | + | let dj = 0 | |
502 | + | ||
503 | + | let dk = 1 | |
504 | + | ||
505 | + | let dl = 2 | |
506 | + | ||
507 | + | let dm = 3 | |
508 | + | ||
509 | + | let dn = "wlg_assetId" | |
510 | + | ||
511 | + | let do = valueOrErrorMessage(getBinary(dg, dn), "WLGOLD is not issued yet") | |
512 | + | ||
513 | + | let dp = "acresAssetId" | |
514 | + | ||
515 | + | let dq = valueOrErrorMessage(getBinary(di, dp), "ACRES is not issued yet") | |
516 | + | ||
517 | + | let dr = 2 | |
518 | + | ||
519 | + | func ds (cO) = ("finishBlockForAddr_" + cO) | |
520 | + | ||
521 | + | ||
522 | + | func dt () = "resTypesProportions" | |
523 | + | ||
524 | + | ||
525 | + | func du (dv) = ("resTypesByContinent_" + dv) | |
526 | + | ||
527 | + | ||
528 | + | func dw (bB) = ("stakedLandsByOwner_" + bB) | |
529 | + | ||
530 | + | ||
531 | + | func dx (bB) = ("stakedPiecesByOwner_" + bB) | |
532 | + | ||
533 | + | ||
534 | + | func dy (dz) = { | |
535 | + | let cz = dz | |
536 | + | if ($isInstanceOf(cz, "String")) | |
534 | 537 | then { | |
535 | - | let | |
536 | - | | |
538 | + | let dA = cz | |
539 | + | dA | |
537 | 540 | } | |
538 | 541 | else throw("fail to cast into String") | |
539 | 542 | } | |
540 | 543 | ||
541 | 544 | ||
542 | - | func | |
543 | - | let | |
544 | - | if ($isInstanceOf( | |
545 | + | func dB (dz) = { | |
546 | + | let cz = dz | |
547 | + | if ($isInstanceOf(cz, "Int")) | |
545 | 548 | then { | |
546 | - | let | |
547 | - | | |
549 | + | let dC = cz | |
550 | + | dC | |
548 | 551 | } | |
549 | 552 | else throw("fail to cast into Int") | |
550 | 553 | } | |
551 | 554 | ||
552 | 555 | ||
553 | - | func | |
554 | - | let | |
555 | - | if ($isInstanceOf( | |
556 | + | func dD (dz) = { | |
557 | + | let cz = dz | |
558 | + | if ($isInstanceOf(cz, "List[Any]")) | |
556 | 559 | then { | |
557 | - | let | |
558 | - | | |
560 | + | let dE = cz | |
561 | + | dE | |
559 | 562 | } | |
560 | 563 | else throw("fail to cast into List[Any]") | |
561 | 564 | } | |
562 | 565 | ||
563 | 566 | ||
564 | - | func | |
565 | - | let | |
566 | - | if ($isInstanceOf( | |
567 | + | func dF (dz) = { | |
568 | + | let cz = dz | |
569 | + | if ($isInstanceOf(cz, "Boolean")) | |
567 | 570 | then { | |
568 | - | let | |
569 | - | | |
571 | + | let dA = cz | |
572 | + | dA | |
570 | 573 | } | |
571 | 574 | else throw("fail to cast into Boolean") | |
572 | 575 | } | |
573 | 576 | ||
574 | 577 | ||
575 | - | func | |
576 | - | let | |
577 | - | if (("S" == | |
578 | - | then | |
579 | - | else if (("M" == | |
580 | - | then | |
581 | - | else if (("L" == | |
582 | - | then | |
583 | - | else if (("XL" == | |
584 | - | then | |
585 | - | else if (("XXL" == | |
586 | - | then | |
578 | + | func dG (dH) = { | |
579 | + | let cz = dH | |
580 | + | if (("S" == cz)) | |
581 | + | then cH | |
582 | + | else if (("M" == cz)) | |
583 | + | then cI | |
584 | + | else if (("L" == cz)) | |
585 | + | then cJ | |
586 | + | else if (("XL" == cz)) | |
587 | + | then cK | |
588 | + | else if (("XXL" == cz)) | |
589 | + | then cL | |
587 | 590 | else throw("Unknown land size") | |
588 | 591 | } | |
589 | 592 | ||
590 | 593 | ||
591 | - | func | |
592 | - | ||
593 | - | ||
594 | - | func | |
595 | - | ||
596 | - | ||
597 | - | func | |
598 | - | ||
599 | - | ||
600 | - | func | |
601 | - | let | |
602 | - | let | |
603 | - | let | |
604 | - | (((toString(( | |
605 | - | } | |
606 | - | ||
607 | - | ||
608 | - | func | |
594 | + | func dI (dA) = isDefined(parseInt(dA)) | |
595 | + | ||
596 | + | ||
597 | + | func dJ () = "contractsBlocked" | |
598 | + | ||
599 | + | ||
600 | + | func dK (c) = ("lastTxIdByUser_" + c) | |
601 | + | ||
602 | + | ||
603 | + | func dL (dM,dN) = { | |
604 | + | let dO = pow(10, 0, dN, 0, 0, DOWN) | |
605 | + | let dP = toString((dM % dO)) | |
606 | + | let dQ = drop(toString(dO), (1 + size(dP))) | |
607 | + | (((toString((dM / dO)) + ".") + dQ) + dP) | |
608 | + | } | |
609 | + | ||
610 | + | ||
611 | + | func dR (dS,dT,dU) = if ((0 >= dS)) | |
609 | 612 | then throw("maxValue should be > 0") | |
610 | 613 | else { | |
611 | - | let | |
612 | - | (toInt( | |
614 | + | let dV = sha256((dT + dU)) | |
615 | + | (toInt(dV) % dS) | |
613 | 616 | } | |
614 | 617 | ||
615 | 618 | ||
616 | - | let | |
617 | - | let | |
618 | - | if ((base58'2W' == | |
619 | + | let dW = { | |
620 | + | let cz = cx | |
621 | + | if ((base58'2W' == cz)) | |
619 | 622 | then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv") | |
620 | - | else if ((base58'2T' == | |
623 | + | else if ((base58'2T' == cz)) | |
621 | 624 | then this | |
622 | 625 | else throw("Unknown chain") | |
623 | 626 | } | |
624 | 627 | ||
625 | - | let | |
626 | - | let | |
627 | - | if ((base58'2W' == | |
628 | + | let dX = { | |
629 | + | let cz = cx | |
630 | + | if ((base58'2W' == cz)) | |
628 | 631 | then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb") | |
629 | - | else if ((base58'2T' == | |
632 | + | else if ((base58'2T' == cz)) | |
630 | 633 | then this | |
631 | 634 | else throw("Unknown chain") | |
632 | 635 | } | |
633 | 636 | ||
634 | - | let | |
635 | - | ||
636 | - | let | |
637 | - | ||
638 | - | let | |
639 | - | ||
640 | - | let | |
641 | - | ||
642 | - | let | |
643 | - | ||
644 | - | let | |
645 | - | let | |
646 | - | if ((base58'2W' == | |
637 | + | let dY = base64'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==' | |
638 | + | ||
639 | + | let dZ = 300000 | |
640 | + | ||
641 | + | let ea = 5000000 | |
642 | + | ||
643 | + | let eb = 50 | |
644 | + | ||
645 | + | let ec = 10000000 | |
646 | + | ||
647 | + | let ed = { | |
648 | + | let cz = cx | |
649 | + | if ((base58'2W' == cz)) | |
647 | 650 | then 252289527462 | |
648 | - | else if ((base58'2T' == | |
651 | + | else if ((base58'2T' == cz)) | |
649 | 652 | then 2522895274 | |
650 | 653 | else throw("Unknown chain") | |
651 | 654 | } | |
652 | 655 | ||
653 | - | let | |
654 | - | let | |
655 | - | if ((base58'2W' == | |
656 | + | let ee = { | |
657 | + | let cz = cx | |
658 | + | if ((base58'2W' == cz)) | |
656 | 659 | then 250000000 | |
657 | - | else if ((base58'2T' == | |
660 | + | else if ((base58'2T' == cz)) | |
658 | 661 | then 250000000 | |
659 | 662 | else throw("Unknown chain") | |
660 | 663 | } | |
661 | 664 | ||
662 | - | let | |
663 | - | ||
664 | - | let | |
665 | - | ||
666 | - | let | |
667 | - | ||
668 | - | let | |
669 | - | ||
670 | - | let | |
671 | - | ||
672 | - | let | |
673 | - | ||
674 | - | let | |
675 | - | ||
676 | - | let | |
677 | - | ||
678 | - | let | |
679 | - | ||
680 | - | func | |
681 | - | ||
682 | - | ||
683 | - | func | |
684 | - | ||
685 | - | ||
686 | - | func | |
687 | - | ||
688 | - | ||
689 | - | func | |
690 | - | ||
691 | - | ||
692 | - | func | |
693 | - | ||
694 | - | ||
695 | - | func | |
696 | - | ||
697 | - | ||
698 | - | func | |
699 | - | ||
700 | - | ||
701 | - | func | |
702 | - | ||
703 | - | ||
704 | - | func | |
705 | - | ||
706 | - | ||
707 | - | let | |
708 | - | ||
709 | - | let | |
710 | - | ||
711 | - | let | |
712 | - | ||
713 | - | let | |
714 | - | ||
715 | - | let | |
716 | - | ||
717 | - | let | |
718 | - | ||
719 | - | let | |
720 | - | ||
721 | - | func | |
722 | - | ||
723 | - | ||
724 | - | func | |
725 | - | let | |
726 | - | then ((( | |
727 | - | else -((((-( | |
728 | - | ( | |
729 | - | } | |
730 | - | ||
731 | - | ||
732 | - | func | |
733 | - | let | |
734 | - | if ((0 >= | |
665 | + | let ef = 100000 | |
666 | + | ||
667 | + | let eg = 2500000000 | |
668 | + | ||
669 | + | let eh = toBigInt(5) | |
670 | + | ||
671 | + | let ei = toBigInt(20) | |
672 | + | ||
673 | + | let ej = toBigInt((20 * 20)) | |
674 | + | ||
675 | + | let ek = toBigInt(((20 * 20) * 20)) | |
676 | + | ||
677 | + | let el = toBigInt((((20 * 20) * 20) * 20)) | |
678 | + | ||
679 | + | let em = toBigInt(((((20 * 20) * 20) * 20) * 20)) | |
680 | + | ||
681 | + | let en = 500 | |
682 | + | ||
683 | + | func eo () = "nextLandNum" | |
684 | + | ||
685 | + | ||
686 | + | func ep (eq) = ("lcn_" + eq) | |
687 | + | ||
688 | + | ||
689 | + | func er (es) = ("la_" + es) | |
690 | + | ||
691 | + | ||
692 | + | func et (bu,bB) = ((("ilao_" + bu) + "_") + bB) | |
693 | + | ||
694 | + | ||
695 | + | func eu (es) = ("lo_" + es) | |
696 | + | ||
697 | + | ||
698 | + | func ev (eq) = ("duckByCustomName_" + eq) | |
699 | + | ||
700 | + | ||
701 | + | func ew (eq) = ("accountByCustomName_" + eq) | |
702 | + | ||
703 | + | ||
704 | + | func ex () = "oldiesList" | |
705 | + | ||
706 | + | ||
707 | + | func ey () = "nextRoboDuck" | |
708 | + | ||
709 | + | ||
710 | + | let ez = 0 | |
711 | + | ||
712 | + | let eA = 1 | |
713 | + | ||
714 | + | let eB = 2 | |
715 | + | ||
716 | + | let eC = 0 | |
717 | + | ||
718 | + | let eD = 5 | |
719 | + | ||
720 | + | let eE = 6 | |
721 | + | ||
722 | + | let eF = 7 | |
723 | + | ||
724 | + | func eG (es,dH) = ((aF + es) + dH) | |
725 | + | ||
726 | + | ||
727 | + | func eH (eI,eJ) = { | |
728 | + | let eK = if ((eI >= 0)) | |
729 | + | then (((eI + eJ) - 1) / eJ) | |
730 | + | else -((((-(eI) + eJ) - 1) / eJ)) | |
731 | + | (eK * cG) | |
732 | + | } | |
733 | + | ||
734 | + | ||
735 | + | func eL (eM,eN) = { | |
736 | + | let eO = (((((eN[0] + eN[1]) + eN[2]) + eN[3]) + eN[4]) + eN[5]) | |
737 | + | if ((0 >= eO)) | |
735 | 738 | then throw("Zero weights sum") | |
736 | 739 | else { | |
737 | - | let | |
738 | - | func | |
739 | - | ||
740 | - | let | |
741 | - | let | |
742 | - | let | |
743 | - | func | |
744 | - | then | |
745 | - | else | |
746 | - | ||
747 | - | func | |
748 | - | then | |
740 | + | let eP = fraction(eM, cF, eO) | |
741 | + | func eQ (eR,eS) = (eR :+ fraction(eS, eP, cF)) | |
742 | + | ||
743 | + | let eT = eN | |
744 | + | let eU = size(eT) | |
745 | + | let eV = nil | |
746 | + | func eW (eX,eY) = if ((eY >= eU)) | |
747 | + | then eX | |
748 | + | else eQ(eX, eT[eY]) | |
749 | + | ||
750 | + | func eZ (eX,eY) = if ((eY >= eU)) | |
751 | + | then eX | |
749 | 752 | else throw("List size exceeds 6") | |
750 | 753 | ||
751 | - | | |
752 | - | } | |
753 | - | } | |
754 | - | ||
755 | - | ||
756 | - | func | |
757 | - | let | |
758 | - | if ((size( | |
754 | + | eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6) | |
755 | + | } | |
756 | + | } | |
757 | + | ||
758 | + | ||
759 | + | func fa (eM) = { | |
760 | + | let fb = split(value(getString(dt())), "_") | |
761 | + | if ((size(fb) != aJ)) | |
759 | 762 | then throw("Wrong proportions data") | |
760 | 763 | else { | |
761 | - | let | |
762 | - | | |
763 | - | } | |
764 | - | } | |
765 | - | ||
766 | - | ||
767 | - | func | |
768 | - | let | |
769 | - | func | |
770 | - | let | |
771 | - | if ((0 > | |
772 | - | then throw(((((("Not enough material idx=" + toString( | |
773 | - | else ( | |
764 | + | let fc = [parseIntValue(fb[0]), parseIntValue(fb[1]), parseIntValue(fb[2]), parseIntValue(fb[3]), parseIntValue(fb[4]), parseIntValue(fb[5])] | |
765 | + | eL(eM, fc) | |
766 | + | } | |
767 | + | } | |
768 | + | ||
769 | + | ||
770 | + | func fd (fe,ff,fg) = { | |
771 | + | let fh = fa(fg) | |
772 | + | func fi (eR,dc) = { | |
773 | + | let fj = (parseIntValue(ff[dc]) - fh[dc]) | |
774 | + | if ((0 > fj)) | |
775 | + | then throw(((((("Not enough material idx=" + toString(dc)) + ", you have ") + ff[dc]) + ", but need ") + toString(fh[dc]))) | |
776 | + | else (eR :+ toString(fj)) | |
774 | 777 | } | |
775 | 778 | ||
776 | - | if ( | |
779 | + | if (fe) | |
777 | 780 | then { | |
778 | - | let | |
779 | - | let | |
780 | - | let | |
781 | - | func | |
782 | - | then | |
783 | - | else | |
784 | - | ||
785 | - | func | |
786 | - | then | |
781 | + | let eT = cM | |
782 | + | let eU = size(eT) | |
783 | + | let eV = nil | |
784 | + | func eW (eX,eY) = if ((eY >= eU)) | |
785 | + | then eX | |
786 | + | else fi(eX, eT[eY]) | |
787 | + | ||
788 | + | func eZ (eX,eY) = if ((eY >= eU)) | |
789 | + | then eX | |
787 | 790 | else throw("List size exceeds 6") | |
788 | 791 | ||
789 | - | | |
790 | - | } | |
791 | - | else | |
792 | - | } | |
793 | - | ||
794 | - | ||
795 | - | func | |
796 | - | then $Tuple2( | |
792 | + | eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6) | |
793 | + | } | |
794 | + | else ff | |
795 | + | } | |
796 | + | ||
797 | + | ||
798 | + | func fk (fl,fm) = if ((fm == "")) | |
799 | + | then $Tuple2(fl, false) | |
797 | 800 | else { | |
798 | - | func | |
799 | - | let | |
800 | - | if ((size( | |
801 | + | func fn (eR,fo) = { | |
802 | + | let fp = split(fo, ",") | |
803 | + | if ((size(fp) != 2)) | |
801 | 804 | then throw("Incorrect format, should be index,amount") | |
802 | 805 | else { | |
803 | - | let | |
804 | - | if (if ((0 > | |
806 | + | let dc = parseIntValue(fp[0]) | |
807 | + | if (if ((0 > dc)) | |
805 | 808 | then true | |
806 | - | else ( | |
809 | + | else (dc >= size(aX))) | |
807 | 810 | then throw("Unknown product idx") | |
808 | 811 | else { | |
809 | - | let | |
810 | - | let | |
811 | - | if ((size( | |
812 | - | then throw((("You don't have " + | |
812 | + | let fq = parseIntValue(fp[1]) | |
813 | + | let fr = split(eR._1, (fp[0] + ":")) | |
814 | + | if ((size(fr) != 2)) | |
815 | + | then throw((("You don't have " + aT[dc]) + " equipped")) | |
813 | 816 | else { | |
814 | - | let | |
815 | - | let | |
817 | + | let fs = fr[1] | |
818 | + | let ft = if (dI(take(drop(fs, 1), 1))) | |
816 | 819 | then 2 | |
817 | 820 | else 1 | |
818 | - | let | |
819 | - | let | |
820 | - | let | |
821 | - | then ( | |
822 | - | else throw(((((("You equipped " + toString( | |
823 | - | $Tuple2((((( | |
821 | + | let fu = parseIntValue(take(fs, ft)) | |
822 | + | let fv = drop(fs, ft) | |
823 | + | let fw = if ((fu >= fq)) | |
824 | + | then (fu - fq) | |
825 | + | else throw(((((("You equipped " + toString(fu)) + " of ") + aT[dc]) + ", but tried to use ") + toString(fq))) | |
826 | + | $Tuple2(((((fr[0] + fp[0]) + ":") + toString(fw)) + fv), if (eR._2) | |
824 | 827 | then true | |
825 | - | else if (if (( | |
826 | - | then (8 >= | |
828 | + | else if (if ((dc >= 6)) | |
829 | + | then (8 >= dc) | |
827 | 830 | else false) | |
828 | - | then ( | |
831 | + | then (fw == 0) | |
829 | 832 | else false) | |
830 | 833 | } | |
831 | 834 | } | |
832 | 835 | } | |
833 | 836 | } | |
834 | 837 | ||
835 | - | let | |
836 | - | let | |
837 | - | let | |
838 | - | func | |
839 | - | then | |
840 | - | else | |
841 | - | ||
842 | - | func | |
843 | - | then | |
838 | + | let eT = split(fm, "_") | |
839 | + | let eU = size(eT) | |
840 | + | let eV = $Tuple2(fl, false) | |
841 | + | func eW (eX,eY) = if ((eY >= eU)) | |
842 | + | then eX | |
843 | + | else fn(eX, eT[eY]) | |
844 | + | ||
845 | + | func eZ (eX,eY) = if ((eY >= eU)) | |
846 | + | then eX | |
844 | 847 | else throw("List size exceeds 10") | |
845 | 848 | ||
846 | - | | |
849 | + | eZ(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
847 | 850 | } | |
848 | 851 | ||
849 | 852 | ||
850 | - | func | |
851 | - | let | |
853 | + | func fx (fy) = { | |
854 | + | let fz = if ((fy == "")) | |
852 | 855 | then nil | |
853 | - | else split_4C( | |
854 | - | func | |
855 | - | let | |
856 | - | let | |
857 | - | then parseIntValue( | |
856 | + | else split_4C(fy, "_") | |
857 | + | func fA (eR,co) = { | |
858 | + | let fB = (size(eR) / 8) | |
859 | + | let fu = if ((size(fz) > fB)) | |
860 | + | then parseIntValue(fz[fB]) | |
858 | 861 | else 0 | |
859 | - | ( | |
862 | + | (eR + toBytes(fu)) | |
860 | 863 | } | |
861 | 864 | ||
862 | - | let | |
863 | - | let | |
864 | - | let | |
865 | - | func | |
866 | - | then | |
867 | - | else | |
868 | - | ||
869 | - | func | |
870 | - | then | |
865 | + | let eT = aX | |
866 | + | let eU = size(eT) | |
867 | + | let eV = base58'' | |
868 | + | func eW (eX,eY) = if ((eY >= eU)) | |
869 | + | then eX | |
870 | + | else fA(eX, eT[eY]) | |
871 | + | ||
872 | + | func eZ (eX,eY) = if ((eY >= eU)) | |
873 | + | then eX | |
871 | 874 | else throw("List size exceeds 50") | |
872 | 875 | ||
873 | - | | |
874 | - | } | |
875 | - | ||
876 | - | ||
877 | - | func | |
878 | - | func | |
879 | - | let | |
880 | - | let | |
881 | - | ( | |
876 | + | eZ(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eV, 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) | |
877 | + | } | |
878 | + | ||
879 | + | ||
880 | + | func fC (fD) = { | |
881 | + | func fE (eR,co) = { | |
882 | + | let fB = size(eR) | |
883 | + | let fF = take(drop(fD, (8 * fB)), 8) | |
884 | + | (eR :+ toString(toInt(fF))) | |
882 | 885 | } | |
883 | 886 | ||
884 | 887 | makeString_2C({ | |
885 | - | let | |
886 | - | let | |
887 | - | let | |
888 | - | func | |
889 | - | then | |
890 | - | else | |
891 | - | ||
892 | - | func | |
893 | - | then | |
888 | + | let eT = aX | |
889 | + | let eU = size(eT) | |
890 | + | let eV = nil | |
891 | + | func eW (eX,eY) = if ((eY >= eU)) | |
892 | + | then eX | |
893 | + | else fE(eX, eT[eY]) | |
894 | + | ||
895 | + | func eZ (eX,eY) = if ((eY >= eU)) | |
896 | + | then eX | |
894 | 897 | else throw("List size exceeds 50") | |
895 | 898 | ||
896 | - | | |
899 | + | eZ(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eV, 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) | |
897 | 900 | }, "_") | |
898 | 901 | } | |
899 | 902 | ||
900 | 903 | ||
901 | - | func | |
902 | - | func | |
903 | - | let | |
904 | - | then | |
904 | + | func fG (fH,fI) = { | |
905 | + | func fJ (eR,fB) = { | |
906 | + | let fK = if ((size(fH) > (7 + fB))) | |
907 | + | then fH[(7 + fB)] | |
905 | 908 | else 0 | |
906 | - | if ((parseIntValue( | |
907 | - | then throw(("Requirement not satisfied: " + k[ | |
909 | + | if ((parseIntValue(fI[fB]) > (fH[fB] + fK))) | |
910 | + | then throw(("Requirement not satisfied: " + k[fB])) | |
908 | 911 | else true | |
909 | 912 | } | |
910 | 913 | ||
911 | - | let | |
912 | - | let | |
913 | - | let | |
914 | - | func | |
915 | - | then | |
916 | - | else | |
917 | - | ||
918 | - | func | |
919 | - | then | |
914 | + | let eT = [0, 1, 2, 3, 4, 5, 6] | |
915 | + | let eU = size(eT) | |
916 | + | let eV = false | |
917 | + | func eW (eX,eY) = if ((eY >= eU)) | |
918 | + | then eX | |
919 | + | else fJ(eX, eT[eY]) | |
920 | + | ||
921 | + | func eZ (eX,eY) = if ((eY >= eU)) | |
922 | + | then eX | |
920 | 923 | else throw("List size exceeds 7") | |
921 | 924 | ||
922 | - | | |
923 | - | } | |
924 | - | ||
925 | - | ||
926 | - | func | |
927 | - | let | |
928 | - | if ((size( | |
925 | + | eZ(eW(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6), 7) | |
926 | + | } | |
927 | + | ||
928 | + | ||
929 | + | func fL (fM,fz,fN,fH,fO,fP) = { | |
930 | + | let fp = split(fM, ":") | |
931 | + | if ((size(fp) != 2)) | |
929 | 932 | then throw("Incorrect format, should be index:amount") | |
930 | - | else if (if (!( | |
931 | - | then (size( | |
933 | + | else if (if (!(fN)) | |
934 | + | then (size(fp[0]) != 2) | |
932 | 935 | else false) | |
933 | 936 | then throw("Product idx should be 2 digits, zero padded") | |
934 | 937 | else { | |
935 | - | let | |
936 | - | let | |
937 | - | if (!(containsElement( | |
938 | - | then throw((("Product '" + | |
939 | - | else if ((0 > | |
938 | + | let fQ = parseIntValue(fp[0]) | |
939 | + | let fR = parseIntValue(fp[1]) | |
940 | + | if (!(containsElement(aW, fQ))) | |
941 | + | then throw((("Product '" + aT[fQ]) + "' cannot be used for land defense")) | |
942 | + | else if ((0 > fR)) | |
940 | 943 | then throw("Count can't be negative") | |
941 | - | else if (( | |
942 | - | then throw(((("Can't put more than " + toString(u)) + " of ") + | |
943 | - | else if (( | |
944 | - | then $Tuple3( | |
944 | + | else if ((fR > u)) | |
945 | + | then throw(((("Can't put more than " + toString(u)) + " of ") + aT[fQ])) | |
946 | + | else if ((fR == 0)) | |
947 | + | then $Tuple3(fz, fO, fP) | |
945 | 948 | else { | |
946 | - | let | |
947 | - | let | |
948 | - | let | |
949 | - | let | |
950 | - | if (if (!( | |
951 | - | then ( | |
949 | + | let fS = take(fz, (8 * fQ)) | |
950 | + | let fu = toInt(take(drop(fz, (8 * fQ)), 8)) | |
951 | + | let fv = drop(fz, (8 * (fQ + 1))) | |
952 | + | let co = split(aX[fQ], "_") | |
953 | + | if (if (!(fN)) | |
954 | + | then (fR > fu) | |
952 | 955 | else false) | |
953 | - | then throw(((((("You have " + toString( | |
956 | + | then throw(((((("You have " + toString(fu)) + " of ") + aT[fQ]) + ", but tried to use ") + toString(fR))) | |
954 | 957 | else { | |
955 | - | let | |
956 | - | then | |
958 | + | let fw = if (if (!(fN)) | |
959 | + | then fG(fH, split(co[ba], ",")) | |
957 | 960 | else false) | |
958 | - | then ( | |
959 | - | else ( | |
960 | - | let | |
961 | - | $Tuple3((( | |
961 | + | then (fu - fR) | |
962 | + | else (fu + fR) | |
963 | + | let fT = (eH(fw, bc) - eH(fu, bc)) | |
964 | + | $Tuple3(((fS + toBytes(fw)) + fv), (fO + fT), (fP - fT)) | |
962 | 965 | } | |
963 | 966 | } | |
964 | 967 | } | |
965 | 968 | } | |
966 | 969 | ||
967 | 970 | ||
968 | - | func | |
969 | - | let | |
970 | - | if ((size( | |
971 | + | func fU (fM,fz,fN,fV,fW,fX,fH) = { | |
972 | + | let fp = split(fM, ":") | |
973 | + | if ((size(fp) != 2)) | |
971 | 974 | then throw("Incorrect format, should be index:amount") | |
972 | - | else if (if (!( | |
973 | - | then (size( | |
975 | + | else if (if (!(fN)) | |
976 | + | then (size(fp[0]) != 2) | |
974 | 977 | else false) | |
975 | 978 | then throw("Product idx should be 2 digits, zero padded") | |
976 | 979 | else { | |
977 | - | let | |
978 | - | let | |
979 | - | if (if ((0 > | |
980 | + | let fQ = parseIntValue(fp[0]) | |
981 | + | let fR = parseIntValue(fp[1]) | |
982 | + | if (if ((0 > fQ)) | |
980 | 983 | then true | |
981 | - | else ( | |
984 | + | else (fQ >= size(aX))) | |
982 | 985 | then throw("Unknown product idx") | |
983 | - | else if ((0 > | |
986 | + | else if ((0 > fR)) | |
984 | 987 | then throw("Count can't be negative") | |
985 | - | else if (( | |
986 | - | then throw(((("Can't put more than " + toString(u)) + " of ") + | |
987 | - | else if (( | |
988 | - | then $Tuple2( | |
988 | + | else if ((fR > u)) | |
989 | + | then throw(((("Can't put more than " + toString(u)) + " of ") + aT[fQ])) | |
990 | + | else if ((fR == 0)) | |
991 | + | then $Tuple2(fz, false) | |
989 | 992 | else { | |
990 | - | let | |
991 | - | let | |
992 | - | let | |
993 | - | let | |
994 | - | if (if (!( | |
995 | - | then ( | |
993 | + | let fS = take(fz, (8 * fQ)) | |
994 | + | let fu = toInt(take(drop(fz, (8 * fQ)), 8)) | |
995 | + | let fv = drop(fz, (8 * (fQ + 1))) | |
996 | + | let co = split(aX[fQ], "_") | |
997 | + | if (if (!(fN)) | |
998 | + | then (fR > fu) | |
996 | 999 | else false) | |
997 | - | then throw(((((("You have " + toString( | |
1000 | + | then throw(((((("You have " + toString(fu)) + " of ") + aT[fQ]) + ", but tried to use ") + toString(fR))) | |
998 | 1001 | else { | |
999 | - | let | |
1000 | - | then | |
1002 | + | let fY = if (if (!(fN)) | |
1003 | + | then fG(fH, split(co[ba], ",")) | |
1001 | 1004 | else false) | |
1002 | 1005 | then { | |
1003 | - | let | |
1004 | - | if (( | |
1006 | + | let fZ = co[bb] | |
1007 | + | if ((fZ == "")) | |
1005 | 1008 | then throw("Item cannot be equipped") | |
1006 | 1009 | else { | |
1007 | - | let | |
1008 | - | let | |
1009 | - | if (( | |
1010 | + | let ga = parseIntValue(fZ) | |
1011 | + | let gb = (ga / 100) | |
1012 | + | if ((fV != gb)) | |
1010 | 1013 | then throw("Segment incompatible") | |
1011 | 1014 | else { | |
1012 | - | let | |
1013 | - | if (( | |
1015 | + | let gc = ((ga % 100) / 10) | |
1016 | + | if ((fW != gc)) | |
1014 | 1017 | then throw("Slot incompatible") | |
1015 | 1018 | else { | |
1016 | - | let | |
1017 | - | if (if (( | |
1018 | - | then ( | |
1019 | + | let gd = (ga % 10) | |
1020 | + | if (if ((fX != 0)) | |
1021 | + | then (gd > 1) | |
1019 | 1022 | else false) | |
1020 | 1023 | then throw("Big items should occupy slot 0") | |
1021 | - | else ( | |
1024 | + | else (gd > 1) | |
1022 | 1025 | } | |
1023 | 1026 | } | |
1024 | 1027 | } | |
1025 | 1028 | } | |
1026 | 1029 | else false | |
1027 | - | $Tuple2((( | |
1028 | - | then | |
1029 | - | else -( | |
1030 | + | $Tuple2(((fS + toBytes((fu + (if (fN) | |
1031 | + | then fR | |
1032 | + | else -(fR))))) + fv), fY) | |
1030 | 1033 | } | |
1031 | 1034 | } | |
1032 | 1035 | } | |
1033 | 1036 | } | |
1034 | 1037 | ||
1035 | 1038 | ||
1036 | - | func | |
1039 | + | func ge (gf,gg,fN,fV,fW,gh) = if ((gf != "")) | |
1037 | 1040 | then { | |
1038 | - | let | |
1039 | - | if ((size( | |
1041 | + | let gi = split(gf, ",") | |
1042 | + | if ((size(gi) > t)) | |
1040 | 1043 | then throw("Wrong slots format") | |
1041 | 1044 | else { | |
1042 | - | let | |
1043 | - | let | |
1044 | - | then | |
1045 | + | let gj = gi[0] | |
1046 | + | let gk = if ((size(gi) > 1)) | |
1047 | + | then gi[1] | |
1045 | 1048 | else "" | |
1046 | - | if (if (( | |
1047 | - | then ( | |
1049 | + | if (if ((gj == "")) | |
1050 | + | then (gk == "") | |
1048 | 1051 | else false) | |
1049 | - | then | |
1052 | + | then gg | |
1050 | 1053 | else { | |
1051 | - | let | |
1052 | - | then | |
1053 | - | else $Tuple2( | |
1054 | - | if (( | |
1055 | - | then if ( | |
1054 | + | let gl = if ((gj != "")) | |
1055 | + | then fU(gj, gg, fN, fV, fW, 0, gh) | |
1056 | + | else $Tuple2(gg, false) | |
1057 | + | if ((gk != "")) | |
1058 | + | then if (gl._2) | |
1056 | 1059 | then throw("Big item already occupies slot") | |
1057 | - | else | |
1058 | - | else | |
1060 | + | else fU(gk, gl._1, fN, fV, fW, 1, gh)._1 | |
1061 | + | else gl._1 | |
1059 | 1062 | } | |
1060 | 1063 | } | |
1061 | 1064 | } | |
1062 | - | else | |
1063 | - | ||
1064 | - | ||
1065 | - | func | |
1066 | - | func | |
1067 | - | let | |
1068 | - | let | |
1069 | - | if ((size( | |
1065 | + | else gg | |
1066 | + | ||
1067 | + | ||
1068 | + | func gm (gn,go,fN,gh) = { | |
1069 | + | func fV (eR,gp) = { | |
1070 | + | let fB = eR._1 | |
1071 | + | let fW = split(gp, ";") | |
1072 | + | if ((size(fW) != s)) | |
1070 | 1073 | then throw("Wrong segment format") | |
1071 | 1074 | else { | |
1072 | - | let | |
1073 | - | let | |
1074 | - | if (if (( | |
1075 | - | then ( | |
1075 | + | let gq = fW[0] | |
1076 | + | let gr = fW[1] | |
1077 | + | if (if ((gq == "")) | |
1078 | + | then (gr == "") | |
1076 | 1079 | else false) | |
1077 | - | then $Tuple2(( | |
1080 | + | then $Tuple2((fB + 1), eR._2) | |
1078 | 1081 | else { | |
1079 | - | let | |
1080 | - | $Tuple2(( | |
1082 | + | let gs = ge(gq, eR._2, fN, fB, 0, gh) | |
1083 | + | $Tuple2((fB + 1), ge(gr, gs, fN, fB, 1, gh)) | |
1081 | 1084 | } | |
1082 | 1085 | } | |
1083 | 1086 | } | |
1084 | 1087 | ||
1085 | - | ( let | |
1086 | - | let | |
1087 | - | let | |
1088 | - | func | |
1089 | - | then | |
1090 | - | else | |
1091 | - | ||
1092 | - | func | |
1093 | - | then | |
1088 | + | ( let eT = gn | |
1089 | + | let eU = size(eT) | |
1090 | + | let eV = $Tuple2(0, go) | |
1091 | + | func eW (eX,eY) = if ((eY >= eU)) | |
1092 | + | then eX | |
1093 | + | else fV(eX, eT[eY]) | |
1094 | + | ||
1095 | + | func eZ (eX,eY) = if ((eY >= eU)) | |
1096 | + | then eX | |
1094 | 1097 | else throw("List size exceeds 6") | |
1095 | 1098 | ||
1096 | - | | |
1097 | - | } | |
1098 | - | ||
1099 | - | ||
1100 | - | func | |
1099 | + | eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6))._2 | |
1100 | + | } | |
1101 | + | ||
1102 | + | ||
1103 | + | func gt (gn,go,fO,fP,fN,fH) = if ((3 > size(gn))) | |
1101 | 1104 | then throw("At least duck, mines and traps parts are required") | |
1102 | 1105 | else { | |
1103 | - | func | |
1104 | - | let | |
1105 | - | if (( | |
1106 | - | then $Tuple4(( | |
1106 | + | func fV (eR,gp) = { | |
1107 | + | let fB = eR._1 | |
1108 | + | if ((fB == 0)) | |
1109 | + | then $Tuple4((fB + 1), eR._2, eR._3, eR._4) | |
1107 | 1110 | else { | |
1108 | - | let | |
1109 | - | $Tuple4(( | |
1111 | + | let gu = fL(gp, eR._2, fN, fH, eR._3, eR._4) | |
1112 | + | $Tuple4((fB + 1), gu._1, gu._2, gu._3) | |
1110 | 1113 | } | |
1111 | 1114 | } | |
1112 | 1115 | ||
1113 | - | let | |
1114 | - | let | |
1115 | - | let | |
1116 | - | let | |
1117 | - | func | |
1118 | - | then | |
1119 | - | else | |
1120 | - | ||
1121 | - | func | |
1122 | - | then | |
1116 | + | let gv = { | |
1117 | + | let eT = gn | |
1118 | + | let eU = size(eT) | |
1119 | + | let eV = $Tuple4(0, go, fO, fP) | |
1120 | + | func eW (eX,eY) = if ((eY >= eU)) | |
1121 | + | then eX | |
1122 | + | else fV(eX, eT[eY]) | |
1123 | + | ||
1124 | + | func eZ (eX,eY) = if ((eY >= eU)) | |
1125 | + | then eX | |
1123 | 1126 | else throw("List size exceeds 10") | |
1124 | 1127 | ||
1125 | - | | |
1126 | - | } | |
1127 | - | $Tuple3( | |
1128 | + | eZ(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
1129 | + | } | |
1130 | + | $Tuple3(gv._2, gv._3, gv._4) | |
1128 | 1131 | } | |
1129 | 1132 | ||
1130 | 1133 | ||
1131 | - | func | |
1132 | - | let | |
1133 | - | let | |
1134 | - | let | |
1135 | - | let | |
1136 | - | let | |
1134 | + | func gw (B) = { | |
1135 | + | let gx = G(B) | |
1136 | + | let gy = split(valueOrElse(getString(gx), ",;,_,;,_,;,_,;,_,;,_,;,"), "_") | |
1137 | + | let gz = gm(gy, dY, true, nil) | |
1138 | + | let gA = split(gy[q], ";")[1] | |
1139 | + | let ar = if ((gA == "")) | |
1137 | 1140 | then 0 | |
1138 | 1141 | else { | |
1139 | - | let | |
1140 | - | if (( | |
1142 | + | let gB = split(gA, ",")[0] | |
1143 | + | if ((gB == "")) | |
1141 | 1144 | then 0 | |
1142 | 1145 | else { | |
1143 | - | let | |
1144 | - | let | |
1145 | - | let | |
1146 | - | if (if (if (if (if (( | |
1146 | + | let fM = split(gB, ":") | |
1147 | + | let dc = fM[0] | |
1148 | + | let gC = fM[1] | |
1149 | + | if (if (if (if (if ((dc == "06")) | |
1147 | 1150 | then true | |
1148 | - | else ( | |
1151 | + | else (dc == "07")) | |
1149 | 1152 | then true | |
1150 | - | else ( | |
1151 | - | then ( | |
1153 | + | else (dc == "08")) | |
1154 | + | then (gC != "") | |
1152 | 1155 | else false) | |
1153 | - | then (parseIntValue( | |
1156 | + | then (parseIntValue(gC) > 0) | |
1154 | 1157 | else false) | |
1155 | - | then parseIntValue(split( | |
1158 | + | then parseIntValue(split(aX[parseIntValue(dc)], "_")[aZ]) | |
1156 | 1159 | else 0 | |
1157 | 1160 | } | |
1158 | 1161 | } | |
1159 | - | let | |
1160 | - | let | |
1161 | - | ( | |
1162 | - | } | |
1163 | - | ||
1164 | - | ||
1165 | - | func | |
1162 | + | let gh = ap(this, B, ar, true) | |
1163 | + | let gD = gm(gy, gz, false, gh) | |
1164 | + | (gD == gD) | |
1165 | + | } | |
1166 | + | ||
1167 | + | ||
1168 | + | func gE (gF,gG,gH,gI) = if ((size(gF) != aJ)) | |
1166 | 1169 | then throw("Wrong proportions data") | |
1167 | 1170 | else { | |
1168 | - | func | |
1169 | - | let | |
1170 | - | if ((0 > | |
1171 | - | then throw(((((((("Panic! Pieces of type=" + toString( | |
1172 | - | else ( | |
1173 | - | } | |
1174 | - | ||
1175 | - | let | |
1176 | - | let | |
1177 | - | let | |
1178 | - | func | |
1179 | - | then | |
1180 | - | else | |
1181 | - | ||
1182 | - | func | |
1183 | - | then | |
1171 | + | func gJ (eR,gK) = { | |
1172 | + | let fj = (parseIntValue(gF[gK]) + ((gI * gG[gK]) * gH)) | |
1173 | + | if ((0 > fj)) | |
1174 | + | then throw(((((((("Panic! Pieces of type=" + toString(gK)) + ", sign=") + toString(gI)) + ", terrainCounts[i]=") + toString(gG[gK])) + ", landSizeIndex=") + toString(gH))) | |
1175 | + | else (eR :+ toString(fj)) | |
1176 | + | } | |
1177 | + | ||
1178 | + | let eT = cM | |
1179 | + | let eU = size(eT) | |
1180 | + | let eV = nil | |
1181 | + | func eW (eX,eY) = if ((eY >= eU)) | |
1182 | + | then eX | |
1183 | + | else gJ(eX, eT[eY]) | |
1184 | + | ||
1185 | + | func eZ (eX,eY) = if ((eY >= eU)) | |
1186 | + | then eX | |
1184 | 1187 | else throw("List size exceeds 6") | |
1185 | 1188 | ||
1186 | - | | |
1189 | + | eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6) | |
1187 | 1190 | } | |
1188 | 1191 | ||
1189 | 1192 | ||
1190 | - | func | |
1191 | - | let | |
1192 | - | makeString( | |
1193 | - | } | |
1194 | - | ||
1195 | - | ||
1196 | - | func | |
1197 | - | ||
1198 | - | ||
1199 | - | func | |
1200 | - | func | |
1201 | - | let | |
1202 | - | ( | |
1193 | + | func gL (gG,gH,gI) = { | |
1194 | + | let gF = split(valueOrElse(getString(dt()), "0_0_0_0_0_0"), "_") | |
1195 | + | makeString(gE(gF, gG, gH, gI), "_") | |
1196 | + | } | |
1197 | + | ||
1198 | + | ||
1199 | + | func gM (gN) = [(size(split(gN, "A")) - 1), (size(split(gN, "B")) - 1), (size(split(gN, "C")) - 1), (size(split(gN, "D")) - 1), (size(split(gN, "E")) - 1), (size(split(gN, "F")) - 1)] | |
1200 | + | ||
1201 | + | ||
1202 | + | func gO (gP,gG,gQ,gH,gR) = { | |
1203 | + | func gS (eR,gK) = { | |
1204 | + | let gT = ((fraction(gQ, gR, a) * gG[gK]) * gH) | |
1205 | + | (eR :+ toString((parseIntValue(gP[gK]) + gT))) | |
1203 | 1206 | } | |
1204 | 1207 | ||
1205 | - | let | |
1206 | - | let | |
1207 | - | let | |
1208 | - | let | |
1209 | - | func | |
1210 | - | then | |
1211 | - | else | |
1212 | - | ||
1213 | - | func | |
1214 | - | then | |
1208 | + | let fc = { | |
1209 | + | let eT = cM | |
1210 | + | let eU = size(eT) | |
1211 | + | let eV = nil | |
1212 | + | func eW (eX,eY) = if ((eY >= eU)) | |
1213 | + | then eX | |
1214 | + | else gS(eX, eT[eY]) | |
1215 | + | ||
1216 | + | func eZ (eX,eY) = if ((eY >= eU)) | |
1217 | + | then eX | |
1215 | 1218 | else throw("List size exceeds 6") | |
1216 | 1219 | ||
1217 | - | | |
1220 | + | eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6) | |
1218 | 1221 | } | |
1219 | - | makeString( | |
1220 | - | } | |
1221 | - | ||
1222 | - | ||
1223 | - | func | |
1224 | - | func | |
1225 | - | let | |
1226 | - | $Tuple2(( | |
1222 | + | makeString(fc, "_") | |
1223 | + | } | |
1224 | + | ||
1225 | + | ||
1226 | + | func gU (gG,gQ,gH,gR) = { | |
1227 | + | func gS (eR,gK) = { | |
1228 | + | let gT = ((fraction(gQ, gR, a) * gG[gK]) * gH) | |
1229 | + | $Tuple2((eR._1 :+ gT), (eR._2 + gT)) | |
1227 | 1230 | } | |
1228 | 1231 | ||
1229 | - | let | |
1230 | - | let | |
1231 | - | let | |
1232 | - | func | |
1233 | - | then | |
1234 | - | else | |
1235 | - | ||
1236 | - | func | |
1237 | - | then | |
1232 | + | let eT = cM | |
1233 | + | let eU = size(eT) | |
1234 | + | let eV = $Tuple2(nil, 0) | |
1235 | + | func eW (eX,eY) = if ((eY >= eU)) | |
1236 | + | then eX | |
1237 | + | else gS(eX, eT[eY]) | |
1238 | + | ||
1239 | + | func eZ (eX,eY) = if ((eY >= eU)) | |
1240 | + | then eX | |
1238 | 1241 | else throw("List size exceeds 6") | |
1239 | 1242 | ||
1240 | - | | |
1241 | - | } | |
1242 | - | ||
1243 | - | ||
1244 | - | func | |
1245 | - | let | |
1246 | - | let | |
1247 | - | if (( | |
1248 | - | then $Tuple2(makeString( | |
1249 | - | else if (( | |
1243 | + | eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6) | |
1244 | + | } | |
1245 | + | ||
1246 | + | ||
1247 | + | func gV (gW,gX,gY,gZ) = { | |
1248 | + | let ha = gY._1 | |
1249 | + | let hb = gY._2 | |
1250 | + | if ((hb == 0)) | |
1251 | + | then $Tuple2(makeString(gW, "_"), makeString(gX, "_")) | |
1252 | + | else if ((gZ >= hb)) | |
1250 | 1253 | then { | |
1251 | - | func | |
1252 | - | ||
1253 | - | let | |
1254 | - | let | |
1255 | - | let | |
1256 | - | let | |
1257 | - | func | |
1258 | - | then | |
1259 | - | else | |
1260 | - | ||
1261 | - | func | |
1262 | - | then | |
1254 | + | func hc (eR,gK) = (eR :+ toString((parseIntValue(gW[gK]) + ha[gK]))) | |
1255 | + | ||
1256 | + | let fc = { | |
1257 | + | let eT = cM | |
1258 | + | let eU = size(eT) | |
1259 | + | let eV = nil | |
1260 | + | func eW (eX,eY) = if ((eY >= eU)) | |
1261 | + | then eX | |
1262 | + | else hc(eX, eT[eY]) | |
1263 | + | ||
1264 | + | func eZ (eX,eY) = if ((eY >= eU)) | |
1265 | + | then eX | |
1263 | 1266 | else throw("List size exceeds 6") | |
1264 | 1267 | ||
1265 | - | | |
1268 | + | eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6) | |
1266 | 1269 | } | |
1267 | - | $Tuple2(makeString( | |
1270 | + | $Tuple2(makeString(fc, "_"), makeString(gX, "_")) | |
1268 | 1271 | } | |
1269 | 1272 | else { | |
1270 | - | func | |
1271 | - | let | |
1272 | - | $Tuple2(( | |
1273 | + | func hd (eR,gK) = { | |
1274 | + | let he = fraction(ha[gK], gZ, hb) | |
1275 | + | $Tuple2((eR._1 :+ toString((parseIntValue(gW[gK]) + he))), (eR._2 :+ toString(((parseIntValue(gX[gK]) + ha[gK]) - he)))) | |
1273 | 1276 | } | |
1274 | 1277 | ||
1275 | - | let | |
1276 | - | let | |
1277 | - | let | |
1278 | - | let | |
1279 | - | func | |
1280 | - | then | |
1281 | - | else | |
1282 | - | ||
1283 | - | func | |
1284 | - | then | |
1278 | + | let fc = { | |
1279 | + | let eT = cM | |
1280 | + | let eU = size(eT) | |
1281 | + | let eV = $Tuple2(nil, nil) | |
1282 | + | func eW (eX,eY) = if ((eY >= eU)) | |
1283 | + | then eX | |
1284 | + | else hd(eX, eT[eY]) | |
1285 | + | ||
1286 | + | func eZ (eX,eY) = if ((eY >= eU)) | |
1287 | + | then eX | |
1285 | 1288 | else throw("List size exceeds 6") | |
1286 | 1289 | ||
1287 | - | | |
1290 | + | eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6) | |
1288 | 1291 | } | |
1289 | - | $Tuple2(makeString( | |
1292 | + | $Tuple2(makeString(fc._1, "_"), makeString(fc._2, "_")) | |
1290 | 1293 | } | |
1291 | 1294 | } | |
1292 | 1295 | ||
1293 | 1296 | ||
1294 | - | func | |
1295 | - | then | |
1296 | - | else -( | |
1297 | - | ||
1298 | - | ||
1299 | - | let | |
1300 | - | ||
1301 | - | func | |
1302 | - | let | |
1303 | - | let | |
1297 | + | func hf (hg) = if ((hg >= toBigInt(0))) | |
1298 | + | then hg | |
1299 | + | else -(hg) | |
1300 | + | ||
1301 | + | ||
1302 | + | let hh = [[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]] | |
1303 | + | ||
1304 | + | func hi (dC,hj) = { | |
1305 | + | let hk = toInt((dC % ei)) | |
1306 | + | let hl = if ((hj[0] > hk)) | |
1304 | 1307 | then "A" | |
1305 | - | else if (( | |
1308 | + | else if ((hj[1] > hk)) | |
1306 | 1309 | then "B" | |
1307 | - | else if (( | |
1310 | + | else if ((hj[2] > hk)) | |
1308 | 1311 | then "C" | |
1309 | - | else if (( | |
1312 | + | else if ((hj[3] > hk)) | |
1310 | 1313 | then "D" | |
1311 | - | else if (( | |
1314 | + | else if ((hj[4] > hk)) | |
1312 | 1315 | then "E" | |
1313 | 1316 | else "F" | |
1314 | - | | |
1315 | - | } | |
1316 | - | ||
1317 | - | ||
1318 | - | func | |
1319 | - | let | |
1320 | - | func | |
1321 | - | ||
1322 | - | let | |
1323 | - | let | |
1324 | - | let | |
1325 | - | let | |
1326 | - | func | |
1327 | - | then | |
1328 | - | else | |
1329 | - | ||
1330 | - | func | |
1331 | - | then | |
1317 | + | hl | |
1318 | + | } | |
1319 | + | ||
1320 | + | ||
1321 | + | func hm (hn,ho) = { | |
1322 | + | let hp = hh[ho] | |
1323 | + | func hq (eR,eS) = $Tuple2((((((eR._1 + hi(eR._2, hp)) + hi((eR._2 / ei), hp)) + hi((eR._2 / ej), hp)) + hi((eR._2 / ek), hp)) + hi((eR._2 / el), hp)), (eR._2 / em)) | |
1324 | + | ||
1325 | + | let gv = { | |
1326 | + | let eT = [1, 2, 3, 4, 5] | |
1327 | + | let eU = size(eT) | |
1328 | + | let eV = $Tuple2("", (hn / eh)) | |
1329 | + | func eW (eX,eY) = if ((eY >= eU)) | |
1330 | + | then eX | |
1331 | + | else hq(eX, eT[eY]) | |
1332 | + | ||
1333 | + | func eZ (eX,eY) = if ((eY >= eU)) | |
1334 | + | then eX | |
1332 | 1335 | else throw("List size exceeds 5") | |
1333 | 1336 | ||
1334 | - | | |
1337 | + | eZ(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5) | |
1335 | 1338 | } | |
1336 | - | | |
1337 | - | } | |
1338 | - | ||
1339 | - | ||
1340 | - | let | |
1341 | - | ||
1342 | - | let | |
1343 | - | ||
1344 | - | func | |
1345 | - | func | |
1346 | - | let | |
1347 | - | let | |
1348 | - | let | |
1339 | + | gv._1 | |
1340 | + | } | |
1341 | + | ||
1342 | + | ||
1343 | + | let hr = [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] | |
1344 | + | ||
1345 | + | let hs = ["A", "B", "C", "D", "E", "F"] | |
1346 | + | ||
1347 | + | func ht (hu,gH) = { | |
1348 | + | func hv (eR,dA) = { | |
1349 | + | let fB = eR._2 | |
1350 | + | let hw = parseIntValue(dA) | |
1351 | + | let hg = if ((hw == 0)) | |
1349 | 1352 | then 0 | |
1350 | - | else if (( | |
1351 | - | then ( | |
1352 | - | else if (( | |
1353 | + | else if ((hw >= (4 * gH))) | |
1354 | + | then (hw / gH) | |
1355 | + | else if ((hw > (3 * gH))) | |
1353 | 1356 | then 3 | |
1354 | - | else ((( | |
1355 | - | $Tuple3(( | |
1357 | + | else (((hw - 1) / gH) + 1) | |
1358 | + | $Tuple3((eR._1 :+ hg), (eR._2 + 1), (eR._3 + hg)) | |
1356 | 1359 | } | |
1357 | 1360 | ||
1358 | - | let | |
1359 | - | let | |
1360 | - | let | |
1361 | - | let | |
1362 | - | func | |
1363 | - | then | |
1364 | - | else | |
1365 | - | ||
1366 | - | func | |
1367 | - | then | |
1361 | + | let gv = { | |
1362 | + | let eT = hu | |
1363 | + | let eU = size(eT) | |
1364 | + | let eV = $Tuple3(nil, 0, 0) | |
1365 | + | func eW (eX,eY) = if ((eY >= eU)) | |
1366 | + | then eX | |
1367 | + | else hv(eX, eT[eY]) | |
1368 | + | ||
1369 | + | func eZ (eX,eY) = if ((eY >= eU)) | |
1370 | + | then eX | |
1368 | 1371 | else throw("List size exceeds 6") | |
1369 | 1372 | ||
1370 | - | | |
1373 | + | eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6) | |
1371 | 1374 | } | |
1372 | - | let | |
1373 | - | let | |
1374 | - | let | |
1375 | - | func | |
1376 | - | let | |
1377 | - | then ( | |
1378 | - | else | |
1379 | - | let | |
1375 | + | let hx = gv._1 | |
1376 | + | let hy = value(indexOf(hx, max(hx))) | |
1377 | + | let hz = (gv._3 - 25) | |
1378 | + | func hA (eR,dc) = { | |
1379 | + | let dM = if ((dc == hy)) | |
1380 | + | then (hx[dc] - hz) | |
1381 | + | else hx[dc] | |
1382 | + | let dQ = if ((dM == 0)) | |
1380 | 1383 | then nil | |
1381 | - | else split(drop(toString(pow(10, 0, | |
1382 | - | let | |
1383 | - | func | |
1384 | - | ||
1385 | - | let | |
1386 | - | let | |
1387 | - | let | |
1388 | - | let | |
1389 | - | func | |
1390 | - | then | |
1391 | - | else | |
1392 | - | ||
1393 | - | func | |
1394 | - | then | |
1384 | + | else split(drop(toString(pow(10, 0, dM, 0, 0, DOWN)), 1), "") | |
1385 | + | let ga = hs[dc] | |
1386 | + | func hB (hC,hD) = (hC :+ ga) | |
1387 | + | ||
1388 | + | let hE = { | |
1389 | + | let eT = dQ | |
1390 | + | let eU = size(eT) | |
1391 | + | let eV = nil | |
1392 | + | func hF (eX,eY) = if ((eY >= eU)) | |
1393 | + | then eX | |
1394 | + | else hB(eX, eT[eY]) | |
1395 | + | ||
1396 | + | func hG (eX,eY) = if ((eY >= eU)) | |
1397 | + | then eX | |
1395 | 1398 | else throw("List size exceeds 25") | |
1396 | 1399 | ||
1397 | - | hF( | |
1398 | - | } | |
1399 | - | ( | |
1400 | + | hG(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(eV, 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) | |
1401 | + | } | |
1402 | + | (eR ++ hE) | |
1400 | 1403 | } | |
1401 | 1404 | ||
1402 | - | let | |
1403 | - | let | |
1404 | - | let | |
1405 | - | let | |
1406 | - | func | |
1407 | - | then | |
1408 | - | else | |
1409 | - | ||
1410 | - | func | |
1411 | - | then | |
1405 | + | let fc = { | |
1406 | + | let eT = cM | |
1407 | + | let eU = size(eT) | |
1408 | + | let eV = nil | |
1409 | + | func hF (eX,eY) = if ((eY >= eU)) | |
1410 | + | then eX | |
1411 | + | else hA(eX, eT[eY]) | |
1412 | + | ||
1413 | + | func hG (eX,eY) = if ((eY >= eU)) | |
1414 | + | then eX | |
1412 | 1415 | else throw("List size exceeds 6") | |
1413 | 1416 | ||
1414 | - | hF( | |
1417 | + | hG(hF(hF(hF(hF(hF(hF(eV, 0), 1), 2), 3), 4), 5), 6) | |
1415 | 1418 | } | |
1416 | - | func | |
1417 | - | ||
1418 | - | let | |
1419 | - | let | |
1420 | - | let | |
1421 | - | func | |
1422 | - | then | |
1423 | - | else | |
1424 | - | ||
1425 | - | func | |
1426 | - | then | |
1419 | + | func hH (eR,fB) = (eR + fc[fB]) | |
1420 | + | ||
1421 | + | let eT = hr | |
1422 | + | let eU = size(eT) | |
1423 | + | let eV = "" | |
1424 | + | func hI (eX,eY) = if ((eY >= eU)) | |
1425 | + | then eX | |
1426 | + | else hH(eX, eT[eY]) | |
1427 | + | ||
1428 | + | func hJ (eX,eY) = if ((eY >= eU)) | |
1429 | + | then eX | |
1427 | 1430 | else throw("List size exceeds 25") | |
1428 | 1431 | ||
1429 | - | hI( | |
1430 | - | } | |
1431 | - | ||
1432 | - | ||
1433 | - | func | |
1434 | - | let | |
1435 | - | [toString(valueOrElse(parseInt( | |
1436 | - | then | |
1437 | - | else "0_0_0_0_0_0", if ((size(split( | |
1438 | - | then | |
1439 | - | else "0_0_0_0_0_0", | |
1440 | - | } | |
1441 | - | ||
1442 | - | ||
1443 | - | func | |
1444 | - | let | |
1445 | - | (( | |
1446 | - | } | |
1447 | - | ||
1448 | - | ||
1449 | - | func | |
1450 | - | let | |
1451 | - | func | |
1452 | - | ||
1453 | - | func | |
1454 | - | let | |
1455 | - | let | |
1456 | - | $Tuple2(( | |
1432 | + | hJ(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(eV, 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) | |
1433 | + | } | |
1434 | + | ||
1435 | + | ||
1436 | + | func hK (hL) = { | |
1437 | + | let gu = split(valueOrElse(getString(hL), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":") | |
1438 | + | [toString(valueOrElse(parseInt(gu[bm]), 0)), if ((size(split(gu[bn], "_")) == aJ)) | |
1439 | + | then gu[bn] | |
1440 | + | else "0_0_0_0_0_0", if ((size(split(gu[bo], "_")) == aJ)) | |
1441 | + | then gu[bo] | |
1442 | + | else "0_0_0_0_0_0", gu[bp]] | |
1443 | + | } | |
1444 | + | ||
1445 | + | ||
1446 | + | func hM (hN) = { | |
1447 | + | let fp = split(hN, "_") | |
1448 | + | ((aM * (parseIntValue(fp[1]) + 1)) * parseIntValue(fp[0])) | |
1449 | + | } | |
1450 | + | ||
1451 | + | ||
1452 | + | func hO (hP) = { | |
1453 | + | let hQ = hP[bg] | |
1454 | + | func hR (eR,hS) = (eR + parseIntValue(hS)) | |
1455 | + | ||
1456 | + | func hT (eR,hS) = { | |
1457 | + | let dc = eR._1 | |
1458 | + | let eK = (((parseIntValue(hS) + bc) - 1) / bc) | |
1459 | + | $Tuple2((dc + 1), (eR._2 + (eK * cG))) | |
1457 | 1460 | } | |
1458 | 1461 | ||
1459 | - | let | |
1460 | - | let | |
1461 | - | let | |
1462 | - | let | |
1463 | - | func | |
1464 | - | then | |
1465 | - | else | |
1466 | - | ||
1467 | - | func | |
1468 | - | then | |
1462 | + | let hU = { | |
1463 | + | let eT = split(hP[be], "_") | |
1464 | + | let eU = size(eT) | |
1465 | + | let eV = 0 | |
1466 | + | func eW (eX,eY) = if ((eY >= eU)) | |
1467 | + | then eX | |
1468 | + | else hR(eX, eT[eY]) | |
1469 | + | ||
1470 | + | func eZ (eX,eY) = if ((eY >= eU)) | |
1471 | + | then eX | |
1469 | 1472 | else throw("List size exceeds 6") | |
1470 | 1473 | ||
1471 | - | | |
1474 | + | eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6) | |
1472 | 1475 | } | |
1473 | - | let | |
1474 | - | let | |
1475 | - | let | |
1476 | - | let | |
1477 | - | func | |
1478 | - | then | |
1479 | - | else | |
1480 | - | ||
1481 | - | func | |
1482 | - | then | |
1476 | + | let hV = { | |
1477 | + | let eT = split(hP[bf], "_") | |
1478 | + | let eU = size(eT) | |
1479 | + | let eV = 0 | |
1480 | + | func hF (eX,eY) = if ((eY >= eU)) | |
1481 | + | then eX | |
1482 | + | else hR(eX, eT[eY]) | |
1483 | + | ||
1484 | + | func hG (eX,eY) = if ((eY >= eU)) | |
1485 | + | then eX | |
1483 | 1486 | else throw("List size exceeds 6") | |
1484 | 1487 | ||
1485 | - | hF( | |
1488 | + | hG(hF(hF(hF(hF(hF(hF(eV, 0), 1), 2), 3), 4), 5), 6) | |
1486 | 1489 | } | |
1487 | - | let | |
1490 | + | let hW = if ((hQ == "")) | |
1488 | 1491 | then 0 | |
1489 | - | else ( let | |
1490 | - | let | |
1491 | - | let | |
1492 | - | func | |
1493 | - | then | |
1494 | - | else | |
1495 | - | ||
1496 | - | func | |
1497 | - | then | |
1492 | + | else ( let eT = split_4C(hQ, "_") | |
1493 | + | let eU = size(eT) | |
1494 | + | let eV = $Tuple2(0, 0) | |
1495 | + | func hI (eX,eY) = if ((eY >= eU)) | |
1496 | + | then eX | |
1497 | + | else hT(eX, eT[eY]) | |
1498 | + | ||
1499 | + | func hJ (eX,eY) = if ((eY >= eU)) | |
1500 | + | then eX | |
1498 | 1501 | else throw("List size exceeds 50") | |
1499 | 1502 | ||
1500 | - | hI( | |
1501 | - | (( | |
1502 | - | } | |
1503 | - | ||
1504 | - | ||
1505 | - | func | |
1506 | - | let | |
1507 | - | let | |
1508 | - | let | |
1509 | - | let | |
1510 | - | let | |
1511 | - | let | |
1512 | - | then makeString(["0", toString( | |
1503 | + | hJ(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(eV, 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 | |
1504 | + | ((hU + hV) + hW) | |
1505 | + | } | |
1506 | + | ||
1507 | + | ||
1508 | + | func hX (hY,hZ,ia) = { | |
1509 | + | let hN = ((toString(hZ) + "_") + toString(ia)) | |
1510 | + | let ib = hM(hN) | |
1511 | + | let ic = valueOrElse(getString(hY), (hN + ":0_0_0_0_0_0:0_0_0_0_0_0::0")) | |
1512 | + | let id = split_4C(ic, ":") | |
1513 | + | let ie = hO(id) | |
1514 | + | let if = if ((5 > size(id))) | |
1515 | + | then makeString(["0", toString(ie), toString((ib - ie)), toString(ib)], "_") | |
1513 | 1516 | else { | |
1514 | - | let | |
1515 | - | let | |
1516 | - | let | |
1517 | - | then parseIntValue( | |
1518 | - | else | |
1519 | - | makeString([toString( | |
1520 | - | } | |
1521 | - | [ | |
1522 | - | then | |
1523 | - | else "0_0_0_0_0_0", if ((size(split( | |
1524 | - | then | |
1525 | - | else "0_0_0_0_0_0", | |
1526 | - | } | |
1527 | - | ||
1528 | - | ||
1529 | - | func | |
1530 | - | let | |
1531 | - | let | |
1532 | - | (( | |
1533 | - | } | |
1534 | - | ||
1535 | - | ||
1536 | - | func | |
1517 | + | let ig = split(id[bh], "_") | |
1518 | + | let ih = parseIntValue(ig[bi]) | |
1519 | + | let ii = if ((size(ig) > 1)) | |
1520 | + | then parseIntValue(ig[bj]) | |
1521 | + | else ie | |
1522 | + | makeString([toString(ih), toString(ii), toString(((ib - ih) - ii)), toString(ib)], "_") | |
1523 | + | } | |
1524 | + | [id[bd], if ((size(split(id[be], "_")) == aJ)) | |
1525 | + | then id[be] | |
1526 | + | else "0_0_0_0_0_0", if ((size(split(id[bf], "_")) == aJ)) | |
1527 | + | then id[bf] | |
1528 | + | else "0_0_0_0_0_0", id[bg], if] | |
1529 | + | } | |
1530 | + | ||
1531 | + | ||
1532 | + | func ij (hP) = { | |
1533 | + | let ik = hO(hP) | |
1534 | + | let il = parseIntValue(split(hP[bh], "_")[bi]) | |
1535 | + | ((hM(hP[bd]) - ik) - il) | |
1536 | + | } | |
1537 | + | ||
1538 | + | ||
1539 | + | func im (in,hP,io) = if ((size(in) != 3)) | |
1537 | 1540 | then throw("cargoListStr should contain exactly 2 ':' separators") | |
1538 | 1541 | else { | |
1539 | - | let | |
1540 | - | let | |
1541 | - | let | |
1542 | + | let ip = split(in[0], "_") | |
1543 | + | let iq = split(in[1], "_") | |
1544 | + | let ir = if ((in[2] == "")) | |
1542 | 1545 | then nil | |
1543 | - | else split_4C( | |
1544 | - | if ((size( | |
1546 | + | else split_4C(in[2], "_") | |
1547 | + | if ((size(ip) != aJ)) | |
1545 | 1548 | then throw("All 6 resources should be passed") | |
1546 | - | else if ((size( | |
1549 | + | else if ((size(iq) != aJ)) | |
1547 | 1550 | then throw("All 6 materials should be passed") | |
1548 | 1551 | else { | |
1549 | - | let | |
1550 | - | let | |
1551 | - | let | |
1552 | - | let | |
1552 | + | let gZ = ij(hP) | |
1553 | + | let is = split(hP[be], "_") | |
1554 | + | let it = split(hP[bf], "_") | |
1555 | + | let iu = if ((hP[bg] == "")) | |
1553 | 1556 | then nil | |
1554 | - | else split_4C( | |
1555 | - | let | |
1556 | - | let | |
1557 | - | let | |
1557 | + | else split_4C(hP[bg], "_") | |
1558 | + | let gX = split(io[bn], "_") | |
1559 | + | let iv = split(io[bo], "_") | |
1560 | + | let iw = if ((io[bp] == "")) | |
1558 | 1561 | then nil | |
1559 | - | else split_4C( | |
1560 | - | func | |
1561 | - | let | |
1562 | - | let | |
1563 | - | let | |
1564 | - | let | |
1565 | - | if (( | |
1566 | - | then $Tuple4(( | |
1567 | - | else if (( | |
1568 | - | then if (( | |
1569 | - | then throw((((("Attempt to take " + | |
1570 | - | else $Tuple4(( | |
1571 | - | else if ((-( | |
1572 | - | then throw((((("Attempt to take " + toString(-( | |
1573 | - | else $Tuple4(( | |
1562 | + | else split_4C(io[bp], "_") | |
1563 | + | func ix (eR,hS) = { | |
1564 | + | let gK = eR._1 | |
1565 | + | let iy = parseIntValue(hS) | |
1566 | + | let iz = parseIntValue(is[gK]) | |
1567 | + | let iA = parseIntValue(gX[gK]) | |
1568 | + | if ((iy == 0)) | |
1569 | + | then $Tuple4((gK + 1), (eR._2 :+ is[gK]), (eR._3 :+ gX[gK]), eR._4) | |
1570 | + | else if ((iy > 0)) | |
1571 | + | then if ((iy > iA)) | |
1572 | + | then throw((((("Attempt to take " + hS) + " from backpack, but only ") + toString(iA)) + " available")) | |
1573 | + | else $Tuple4((gK + 1), (eR._2 :+ toString((iz + iy))), (eR._3 :+ toString((iA - iy))), (eR._4 + iy)) | |
1574 | + | else if ((-(iy) > iz)) | |
1575 | + | then throw((((("Attempt to take " + toString(-(iy))) + " from warehouse, but only ") + toString(iz)) + " available")) | |
1576 | + | else $Tuple4((gK + 1), (eR._2 :+ toString((iz + iy))), (eR._3 :+ toString((iA - iy))), (eR._4 + iy)) | |
1574 | 1577 | } | |
1575 | 1578 | ||
1576 | - | let | |
1577 | - | let | |
1578 | - | let | |
1579 | - | let | |
1580 | - | func | |
1581 | - | then | |
1582 | - | else | |
1583 | - | ||
1584 | - | func | |
1585 | - | then | |
1579 | + | let fc = { | |
1580 | + | let eT = ip | |
1581 | + | let eU = size(eT) | |
1582 | + | let eV = $Tuple4(0, nil, nil, 0) | |
1583 | + | func eW (eX,eY) = if ((eY >= eU)) | |
1584 | + | then eX | |
1585 | + | else ix(eX, eT[eY]) | |
1586 | + | ||
1587 | + | func eZ (eX,eY) = if ((eY >= eU)) | |
1588 | + | then eX | |
1586 | 1589 | else throw("List size exceeds 6") | |
1587 | 1590 | ||
1588 | - | | |
1591 | + | eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6) | |
1589 | 1592 | } | |
1590 | - | func | |
1591 | - | let | |
1592 | - | let | |
1593 | - | let | |
1594 | - | let | |
1595 | - | if (( | |
1596 | - | then $Tuple4(( | |
1597 | - | else if (( | |
1598 | - | then if (( | |
1599 | - | then throw((((("Attempt to take " + | |
1600 | - | else $Tuple4(( | |
1601 | - | else if ((-( | |
1602 | - | then throw((((("Attempt to take " + toString(-( | |
1603 | - | else $Tuple4(( | |
1593 | + | func iB (eR,hS) = { | |
1594 | + | let gK = eR._1 | |
1595 | + | let iy = parseIntValue(hS) | |
1596 | + | let iC = parseIntValue(it[gK]) | |
1597 | + | let iD = parseIntValue(iv[gK]) | |
1598 | + | if ((iy == 0)) | |
1599 | + | then $Tuple4((gK + 1), (eR._2 :+ it[gK]), (eR._3 :+ iv[gK]), eR._4) | |
1600 | + | else if ((iy > 0)) | |
1601 | + | then if ((iy > iD)) | |
1602 | + | then throw((((("Attempt to take " + hS) + " from backpack, but only ") + toString(iD)) + " available")) | |
1603 | + | else $Tuple4((gK + 1), (eR._2 :+ toString((iC + iy))), (eR._3 :+ toString((iD - iy))), (eR._4 + iy)) | |
1604 | + | else if ((-(iy) > iC)) | |
1605 | + | then throw((((("Attempt to take " + toString(-(iy))) + " from warehouse, but only ") + toString(iC)) + " available")) | |
1606 | + | else $Tuple4((gK + 1), (eR._2 :+ toString((iC + iy))), (eR._3 :+ toString((iD - iy))), (eR._4 + iy)) | |
1604 | 1607 | } | |
1605 | 1608 | ||
1606 | - | let | |
1607 | - | let | |
1608 | - | let | |
1609 | - | let | |
1610 | - | func | |
1611 | - | then | |
1612 | - | else | |
1613 | - | ||
1614 | - | func | |
1615 | - | then | |
1609 | + | let gq = { | |
1610 | + | let eT = iq | |
1611 | + | let eU = size(eT) | |
1612 | + | let eV = $Tuple4(0, nil, nil, fc._4) | |
1613 | + | func hF (eX,eY) = if ((eY >= eU)) | |
1614 | + | then eX | |
1615 | + | else iB(eX, eT[eY]) | |
1616 | + | ||
1617 | + | func hG (eX,eY) = if ((eY >= eU)) | |
1618 | + | then eX | |
1616 | 1619 | else throw("List size exceeds 6") | |
1617 | 1620 | ||
1618 | - | hF( | |
1621 | + | hG(hF(hF(hF(hF(hF(hF(eV, 0), 1), 2), 3), 4), 5), 6) | |
1619 | 1622 | } | |
1620 | - | func | |
1621 | - | let | |
1622 | - | let | |
1623 | - | let | |
1624 | - | then parseIntValue( | |
1623 | + | func iE (eR,hS) = { | |
1624 | + | let gK = eR._1 | |
1625 | + | let iy = parseIntValue(hS) | |
1626 | + | let iF = if ((size(iu) > gK)) | |
1627 | + | then parseIntValue(iu[gK]) | |
1625 | 1628 | else 0 | |
1626 | - | let | |
1627 | - | then parseIntValue( | |
1629 | + | let iG = if ((size(iw) > gK)) | |
1630 | + | then parseIntValue(iw[gK]) | |
1628 | 1631 | else 0 | |
1629 | - | if (( | |
1630 | - | then $Tuple4(( | |
1631 | - | else if (( | |
1632 | - | then if (( | |
1633 | - | then throw((((("Attempt to take " + | |
1632 | + | if ((iy == 0)) | |
1633 | + | then $Tuple4((gK + 1), (eR._2 :+ toString(iF)), (eR._3 :+ toString(iG)), eR._4) | |
1634 | + | else if ((iy > 0)) | |
1635 | + | then if ((iy > iG)) | |
1636 | + | then throw((((("Attempt to take " + hS) + " from backpack, but only ") + toString(iG)) + " available")) | |
1634 | 1637 | else { | |
1635 | - | let | |
1636 | - | $Tuple4(( | |
1638 | + | let fT = (eH((iF + iy), bc) - eH(iF, bc)) | |
1639 | + | $Tuple4((gK + 1), (eR._2 :+ toString((iF + iy))), (eR._3 :+ toString((iG - iy))), (eR._4 + fT)) | |
1637 | 1640 | } | |
1638 | - | else if ((-( | |
1639 | - | then throw((((("Attempt to take " + toString(-( | |
1641 | + | else if ((-(iy) > iF)) | |
1642 | + | then throw((((("Attempt to take " + toString(-(iy))) + " from warehouse, but only ") + toString(iF)) + " available")) | |
1640 | 1643 | else { | |
1641 | - | let | |
1642 | - | $Tuple4(( | |
1644 | + | let fT = (eH((iF + iy), bc) - eH(iF, bc)) | |
1645 | + | $Tuple4((gK + 1), (eR._2 :+ toString((iF + iy))), (eR._3 :+ toString((iG - iy))), (eR._4 + fT)) | |
1643 | 1646 | } | |
1644 | 1647 | } | |
1645 | 1648 | ||
1646 | - | let | |
1649 | + | let gu = if ((size(ir) != 0)) | |
1647 | 1650 | then { | |
1648 | - | let | |
1649 | - | let | |
1650 | - | let | |
1651 | - | func | |
1652 | - | then | |
1653 | - | else | |
1654 | - | ||
1655 | - | func | |
1656 | - | then | |
1651 | + | let eT = ir | |
1652 | + | let eU = size(eT) | |
1653 | + | let eV = $Tuple4(0, nil, nil, gq._4) | |
1654 | + | func hI (eX,eY) = if ((eY >= eU)) | |
1655 | + | then eX | |
1656 | + | else iE(eX, eT[eY]) | |
1657 | + | ||
1658 | + | func hJ (eX,eY) = if ((eY >= eU)) | |
1659 | + | then eX | |
1657 | 1660 | else throw("List size exceeds 50") | |
1658 | 1661 | ||
1659 | - | hI( | |
1662 | + | hJ(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(eV, 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) | |
1660 | 1663 | } | |
1661 | - | else $Tuple4(0, | |
1662 | - | let | |
1663 | - | if (( | |
1664 | - | then throw((((("Attempt to put total " + toString( | |
1665 | - | else $Tuple7(makeString( | |
1664 | + | else $Tuple4(0, iu, iw, gq._4) | |
1665 | + | let iH = gu._4 | |
1666 | + | if ((iH > gZ)) | |
1667 | + | then throw((((("Attempt to put total " + toString(iH)) + " stuff, but only ") + toString(gZ)) + " warehouse space left")) | |
1668 | + | else $Tuple7(makeString(fc._2, "_"), makeString(gq._2, "_"), makeString_2C(gu._2, "_"), makeString(fc._3, "_"), makeString(gq._3, "_"), makeString_2C(gu._3, "_"), iH) | |
1666 | 1669 | } | |
1667 | 1670 | } | |
1668 | 1671 | ||
1669 | 1672 | ||
1670 | - | func | |
1671 | - | let | |
1672 | - | let | |
1673 | - | let | |
1674 | - | let | |
1675 | - | let | |
1676 | - | let | |
1677 | - | let | |
1678 | - | let | |
1679 | - | let | |
1680 | - | let | |
1681 | - | $Tuple2([IntegerEntry( | |
1682 | - | } | |
1683 | - | ||
1684 | - | ||
1685 | - | func | |
1673 | + | func iI (iJ,iK) = { | |
1674 | + | let bQ = toString(iJ) | |
1675 | + | let iL = hf(toBigInt(iK)) | |
1676 | + | let iM = valueOrElse(getInteger(eo()), (en + 1)) | |
1677 | + | let es = toString(iM) | |
1678 | + | let ho = toInt((iL % eh)) | |
1679 | + | let gN = hm(iL, ho) | |
1680 | + | let dv = aU[ho] | |
1681 | + | let iN = Issue(eG(es, "S"), makeString([es, "S", gN, dv], "_"), 1, 0, false) | |
1682 | + | let bu = calculateAssetId(iN) | |
1683 | + | let iO = toBase58String(bu) | |
1684 | + | $Tuple2([IntegerEntry(eo(), (iM + 1)), iN, StringEntry(er(es), iO), StringEntry(bt(iO), bQ), StringEntry(eu(es), bQ), IntegerEntry(bD(iO), 0), IntegerEntry(et(iO, bQ), 0), ScriptTransfer(iJ, 1, bu)], $Tuple2(iO, dv)) | |
1685 | + | } | |
1686 | + | ||
1687 | + | ||
1688 | + | func iP (bQ,iQ,iR) = if (!(sigVerify_8Kb(iQ, iR, cy))) | |
1686 | 1689 | then throw("signature does not match") | |
1687 | 1690 | else { | |
1688 | - | let | |
1689 | - | let | |
1690 | - | let | |
1691 | - | let | |
1692 | - | let | |
1693 | - | let | |
1694 | - | let | |
1695 | - | let | |
1696 | - | if (if (( | |
1691 | + | let fp = split_4C(toUtf8String(iQ), ";") | |
1692 | + | let iS = split_4C(fp[0], "|") | |
1693 | + | let iT = split(iS[eC], "_") | |
1694 | + | let iU = parseIntValue(iT[0]) | |
1695 | + | let iV = parseIntValue(iT[1]) | |
1696 | + | let iW = split(fp[1], ":") | |
1697 | + | let iX = iW[0] | |
1698 | + | let iY = parseIntValue(iS[eD]) | |
1699 | + | if (if ((iY > (lastBlock.timestamp + dZ))) | |
1697 | 1700 | then true | |
1698 | - | else ((lastBlock.timestamp - | |
1699 | - | then throw(((("signature outdated: logTime=" + toString( | |
1701 | + | else ((lastBlock.timestamp - dZ) > iY)) | |
1702 | + | then throw(((("signature outdated: logTime=" + toString(iY)) + ", bcTime=") + toString(lastBlock.timestamp))) | |
1700 | 1703 | else { | |
1701 | - | let | |
1702 | - | let | |
1703 | - | if (( | |
1704 | - | then throw(((("Tx ids don't match! In state: " + | |
1704 | + | let iZ = iW[1] | |
1705 | + | let ja = valueOrElse(getString(dK(bQ)), "") | |
1706 | + | if ((ja != iZ)) | |
1707 | + | then throw(((("Tx ids don't match! In state: " + ja) + ", in msg: ") + iZ)) | |
1705 | 1708 | else { | |
1706 | - | let B = valueOrErrorMessage(getString( | |
1707 | - | let | |
1708 | - | let | |
1709 | - | let | |
1710 | - | if (( | |
1711 | - | then throw(((("oldHealth=" + toString( | |
1712 | - | else if ((0 >= | |
1709 | + | let B = valueOrErrorMessage(getString(bM(bQ)), "You don't have a duck staked") | |
1710 | + | let jb = A(B) | |
1711 | + | let jc = aj(valueOrElse(getInteger(E(B)), 0)) | |
1712 | + | let jd = valueOrElse(getInteger(jb), jc) | |
1713 | + | if ((jd != iU)) | |
1714 | + | then throw(((("oldHealth=" + toString(jd)) + " from state does not match one from flight log=") + toString(iU))) | |
1715 | + | else if ((0 >= iU)) | |
1713 | 1716 | then throw("You can't fly with zero health") | |
1714 | - | else if (!( | |
1717 | + | else if (!(gw(B))) | |
1715 | 1718 | then throw("Equipment incompatible") | |
1716 | 1719 | else { | |
1717 | - | let | |
1718 | - | then | |
1720 | + | let je = if ((size(iS) > eE)) | |
1721 | + | then iS[eE] | |
1719 | 1722 | else "" | |
1720 | - | let | |
1721 | - | then | |
1723 | + | let jf = if ((size(iS) > eF)) | |
1724 | + | then iS[eF] | |
1722 | 1725 | else "" | |
1723 | - | let | |
1724 | - | then ( | |
1726 | + | let jg = if (if ((iV > 0)) | |
1727 | + | then (je == "$") | |
1725 | 1728 | else false) | |
1726 | - | then | |
1729 | + | then dB(invoke(dd, "sendUsdtPrize", [bQ], nil)) | |
1727 | 1730 | else 0 | |
1728 | - | $Tuple5( | |
1731 | + | $Tuple5(iV, B, jg, iX, jf) | |
1729 | 1732 | } | |
1730 | 1733 | } | |
1731 | 1734 | } | |
1732 | 1735 | } | |
1733 | 1736 | ||
1734 | 1737 | ||
1735 | - | func | |
1736 | - | let | |
1737 | - | let | |
1738 | - | let | |
1739 | - | let | |
1740 | - | (( | |
1741 | - | } | |
1742 | - | ||
1743 | - | ||
1744 | - | func | |
1745 | - | let | |
1746 | - | then $Tuple2( | |
1738 | + | func jh (Q,ji) = { | |
1739 | + | let ia = valueOrElse(getInteger(bD(Q)), 0) | |
1740 | + | let jj = valueOrElse(getInteger(bx(aI, Q)), 0) | |
1741 | + | let jk = (ia / 6) | |
1742 | + | let jl = (ia / 7) | |
1743 | + | ((aL + fraction(aL, ((ia + jk) + (2 * jl)), 5)) + fraction(aL, jj, (ji * 5))) | |
1744 | + | } | |
1745 | + | ||
1746 | + | ||
1747 | + | func jm (c,jn,jo) = { | |
1748 | + | let jp = if ((jn == ez)) | |
1749 | + | then $Tuple2(jo, valueOrElse(getString(bM(c)), "")) | |
1747 | 1750 | else { | |
1748 | - | let B = valueOrErrorMessage(getString( | |
1749 | - | let | |
1750 | - | let | |
1751 | - | if (( | |
1752 | - | then throw((("Duck location type is " + | |
1753 | - | else $Tuple2( | |
1754 | - | } | |
1755 | - | let Q = | |
1756 | - | let | |
1757 | - | let | |
1758 | - | let | |
1759 | - | let | |
1760 | - | let | |
1761 | - | if (( | |
1762 | - | then throw(( | |
1751 | + | let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked") | |
1752 | + | let jq = valueOrElse(getString(bO(B)), aN) | |
1753 | + | let cj = split(value(jq), "_") | |
1754 | + | if ((cj[br] != "L")) | |
1755 | + | then throw((("Duck location type is " + cj[br]) + ", but should be L")) | |
1756 | + | else $Tuple2(cj[bs], B) | |
1757 | + | } | |
1758 | + | let Q = jp._1 | |
1759 | + | let jr = jp._2 | |
1760 | + | let js = value(assetInfo(fromBase58String(Q))) | |
1761 | + | let jt = bw(Q) | |
1762 | + | let ju = valueOrErrorMessage(getInteger(jt), (("Land " + js.name) + " is not staked")) | |
1763 | + | let jv = valueOrErrorMessage(getString(bt(Q)), (("NFT " + js.name) + " is orphaned")) | |
1764 | + | if ((jv != c)) | |
1765 | + | then throw((aF + " is not yours")) | |
1763 | 1766 | else { | |
1764 | - | let | |
1765 | - | $Tuple4( | |
1766 | - | } | |
1767 | - | } | |
1768 | - | ||
1769 | - | ||
1770 | - | func | |
1767 | + | let jw = split(js.description, "_") | |
1768 | + | $Tuple4(jr, Q, jw, ju) | |
1769 | + | } | |
1770 | + | } | |
1771 | + | ||
1772 | + | ||
1773 | + | func jx (c,eI,jn,jo) = if ((0 > eI)) | |
1771 | 1774 | then throw("Negative amount") | |
1772 | 1775 | else { | |
1773 | - | let | |
1774 | - | let | |
1775 | - | let | |
1776 | - | let | |
1777 | - | if ((0 > | |
1778 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
1776 | + | let ga = jm(c, jn, jo) | |
1777 | + | let dH = ga._3[dk] | |
1778 | + | let gG = gM(ga._3[dl]) | |
1779 | + | let gQ = (lastBlock.timestamp - ga._4) | |
1780 | + | if ((0 > gQ)) | |
1781 | + | then throw(((("Saved timestamp is in future, saved = " + toString(ga._4)) + ", current = ") + toString(lastBlock.timestamp))) | |
1779 | 1782 | else { | |
1780 | - | let | |
1781 | - | let | |
1782 | - | let | |
1783 | - | if (( | |
1784 | - | then throw(((("Not enough resources, available = " + toString( | |
1783 | + | let ji = dG(dH) | |
1784 | + | let jy = jh(ga._2, ji) | |
1785 | + | let jz = fraction(gQ, (jy * ji), a) | |
1786 | + | if ((eI > jz)) | |
1787 | + | then throw(((("Not enough resources, available = " + toString(jz)) + ", requested = ") + toString(eI))) | |
1785 | 1788 | else { | |
1786 | - | let | |
1787 | - | let | |
1788 | - | let | |
1789 | - | let | |
1790 | - | let | |
1791 | - | let | |
1792 | - | let | |
1793 | - | let | |
1794 | - | let | |
1795 | - | if (if (( | |
1796 | - | then ( | |
1789 | + | let jA = fraction((jz - eI), a, (jy * ji)) | |
1790 | + | let jB = (lastBlock.timestamp - jA) | |
1791 | + | let hZ = (ji / cH) | |
1792 | + | let gY = gU(gG, (gQ - jA), hZ, jy) | |
1793 | + | let hY = bC(ga._2) | |
1794 | + | let ia = valueOrElse(getInteger(bD(ga._2)), 0) | |
1795 | + | let hP = hX(hY, hZ, ia) | |
1796 | + | let ig = split(hP[bh], "_") | |
1797 | + | let gZ = parseIntValue(ig[bk]) | |
1798 | + | if (if ((jn == ez)) | |
1799 | + | then (eI > gZ) | |
1797 | 1800 | else false) | |
1798 | - | then throw((("Only " + toString( | |
1801 | + | then throw((("Only " + toString(gZ)) + " space left in warehouse")) | |
1799 | 1802 | else { | |
1800 | - | let | |
1801 | - | let | |
1802 | - | let | |
1803 | - | let | |
1804 | - | let | |
1805 | - | then $Tuple4( | |
1806 | - | else if (( | |
1807 | - | then $Tuple4( | |
1803 | + | let hL = bN(ga._1) | |
1804 | + | let io = hK(hL) | |
1805 | + | let gX = split(io[bn], "_") | |
1806 | + | let gW = split(hP[be], "_") | |
1807 | + | let jC = if ((jn == ez)) | |
1808 | + | then $Tuple4(gO(gW, gG, (gQ - jA), hZ, jy), io[bn], (parseIntValue(ig[bj]) + gY._2), (parseIntValue(ig[bk]) - gY._2)) | |
1809 | + | else if ((jn == eA)) | |
1810 | + | then $Tuple4(hP[be], gO(gX, gG, (gQ - jA), hZ, jy), parseIntValue(ig[bj]), parseIntValue(ig[bk])) | |
1808 | 1811 | else { | |
1809 | - | let | |
1810 | - | let | |
1811 | - | $Tuple4( | |
1812 | + | let jD = gV(gW, gX, gY, gZ) | |
1813 | + | let jE = min([parseIntValue(ig[bk]), gY._2]) | |
1814 | + | $Tuple4(jD._1, jD._2, (parseIntValue(ig[bj]) + jE), (parseIntValue(ig[bk]) - jE)) | |
1812 | 1815 | } | |
1813 | - | let | |
1814 | - | let | |
1815 | - | let | |
1816 | - | let | |
1817 | - | $Tuple5([IntegerEntry( | |
1816 | + | let jF = jC._1 | |
1817 | + | let jG = jC._2 | |
1818 | + | let jH = jC._3 | |
1819 | + | let jI = jC._4 | |
1820 | + | $Tuple5([IntegerEntry(bw(ga._2), jB), IntegerEntry(bz(aF, ga._2, c), jB)], hL, [io[bm], jG, io[bo], io[bp]], hY, [hP[bd], jF, hP[bf], hP[bg], makeString([ig[bi], toString(jH), toString(jI), ig[bl]], "_")]) | |
1818 | 1821 | } | |
1819 | 1822 | } | |
1820 | 1823 | } | |
1821 | 1824 | } | |
1822 | 1825 | ||
1823 | 1826 | ||
1824 | - | func | |
1825 | - | let | |
1826 | - | let | |
1827 | - | let | |
1828 | - | | |
1829 | - | } | |
1830 | - | ||
1831 | - | ||
1832 | - | func | |
1833 | - | let c = toString( | |
1834 | - | let | |
1835 | - | let | |
1836 | - | let | |
1837 | - | let | |
1838 | - | if (if (!( | |
1839 | - | then ( | |
1827 | + | func jJ (c,Q,ji,jn) = { | |
1828 | + | let jt = bw(Q) | |
1829 | + | let ju = value(getInteger(jt)) | |
1830 | + | let jz = (fraction((lastBlock.timestamp - ju), jh(Q, ji), a) * ji) | |
1831 | + | jx(c, jz, jn, Q) | |
1832 | + | } | |
1833 | + | ||
1834 | + | ||
1835 | + | func jK (fe,iJ,jL,Q) = { | |
1836 | + | let c = toString(iJ) | |
1837 | + | let ga = jm(c, eB, Q) | |
1838 | + | let ji = dG(ga._3[dk]) | |
1839 | + | let jM = bD(ga._2) | |
1840 | + | let jN = valueOrElse(getInteger(jM), 0) | |
1841 | + | if (if (!(cu)) | |
1842 | + | then (jN >= 3) | |
1840 | 1843 | else false) | |
1841 | 1844 | then throw("Currently max infrastructure level = 3") | |
1842 | 1845 | else { | |
1843 | - | let | |
1844 | - | let | |
1845 | - | if (if ( | |
1846 | - | then ( | |
1846 | + | let jO = ((sqrt(ji, 0, 0, DOWN) / 5) + 2) | |
1847 | + | let ao = (jN + 1) | |
1848 | + | if (if (cu) | |
1849 | + | then (ao > jO) | |
1847 | 1850 | else false) | |
1848 | - | then throw(("Currently max infrastructure level = " + toString( | |
1851 | + | then throw(("Currently max infrastructure level = " + toString(jO))) | |
1849 | 1852 | else { | |
1850 | - | let | |
1851 | - | if (if (!( | |
1852 | - | then ( | |
1853 | + | let jP = fraction(ec, (ji * ao), cH) | |
1854 | + | if (if (!(fe)) | |
1855 | + | then (jL != jP) | |
1853 | 1856 | else false) | |
1854 | - | then throw(("Payment attached should be " + toString( | |
1857 | + | then throw(("Payment attached should be " + toString(jP))) | |
1855 | 1858 | else { | |
1856 | - | let | |
1857 | - | let | |
1858 | - | let | |
1859 | - | let | |
1860 | - | let | |
1861 | - | let | |
1862 | - | let | |
1863 | - | let | |
1864 | - | let | |
1865 | - | let | |
1866 | - | let | |
1867 | - | let | |
1868 | - | $Tuple3(([IntegerEntry( | |
1859 | + | let hL = bN(ga._1) | |
1860 | + | let io = hK(hL) | |
1861 | + | let jQ = split(io[bo], "_") | |
1862 | + | let jR = fraction(cC, (ji * ao), cH) | |
1863 | + | let jS = makeString(fd(fe, jQ, jR), "_") | |
1864 | + | let jT = jJ(c, ga._2, ji, eB) | |
1865 | + | let jU = jT._5 | |
1866 | + | let jV = hM(jU[bd]) | |
1867 | + | let jW = makeString([split(jU[bd], "_")[0], toString(ao)], "_") | |
1868 | + | let jX = hM(jW) | |
1869 | + | let ig = split(jU[bh], "_") | |
1870 | + | let jY = makeString([ig[bi], ig[bj], toString(((parseIntValue(ig[bk]) + jX) - jV)), toString(jX)], "_") | |
1871 | + | $Tuple3(([IntegerEntry(jM, ao), IntegerEntry(et(ga._2, c), ao), StringEntry(hL, makeString([io[bm], jT._3[bn], jS, io[bp]], ":")), StringEntry(jT._4, makeString([jW, jU[be], jU[bf], jU[bg], jY], ":"))] ++ jT._1), ao, jR) | |
1869 | 1872 | } | |
1870 | 1873 | } | |
1871 | 1874 | } | |
1872 | 1875 | } | |
1873 | 1876 | ||
1874 | 1877 | ||
1875 | - | func | |
1876 | - | let | |
1877 | - | let | |
1878 | - | let | |
1879 | - | $Tuple2([IntegerEntry( | |
1880 | - | } | |
1881 | - | ||
1882 | - | ||
1883 | - | func | |
1884 | - | let | |
1885 | - | let c = valueOrErrorMessage(getString( | |
1886 | - | if (if (if ( | |
1887 | - | then ( | |
1878 | + | func jZ (ka,kb,kc,kd) = { | |
1879 | + | let ai = valueOrElse(getInteger(kb), 0) | |
1880 | + | let an = (ai + kd) | |
1881 | + | let ke = al(valueOrElse(getInteger(ka), 0), an) | |
1882 | + | $Tuple2([IntegerEntry(ka, ke[0]), IntegerEntry(kb, an), IntegerEntry(kc, (valueOrElse(getInteger(kc), 0) + ke[1]))], an) | |
1883 | + | } | |
1884 | + | ||
1885 | + | ||
1886 | + | func kf (B,kd) = { | |
1887 | + | let js = value(assetInfo(fromBase58String(B))) | |
1888 | + | let c = valueOrErrorMessage(getString(bL(B)), (("NFT " + js.name) + " is orphaned")) | |
1889 | + | if (if (if (cv) | |
1890 | + | then (js.issuer == this) | |
1888 | 1891 | else false) | |
1889 | - | then contains( | |
1892 | + | then contains(js.name, aH) | |
1890 | 1893 | else false) | |
1891 | - | then | |
1892 | - | else | |
1893 | - | } | |
1894 | - | ||
1895 | - | ||
1896 | - | func | |
1897 | - | ||
1898 | - | ||
1899 | - | func | |
1900 | - | let B = valueOrErrorMessage(getString( | |
1901 | - | let | |
1902 | - | let | |
1903 | - | if (!(isDefined( | |
1894 | + | then jZ(I(c), H(c), J(c), kd) | |
1895 | + | else jZ(E(B), D(B), F(B), kd) | |
1896 | + | } | |
1897 | + | ||
1898 | + | ||
1899 | + | func kg (c,kd) = jZ(I(c), H(c), J(c), kd) | |
1900 | + | ||
1901 | + | ||
1902 | + | func kh (c) = { | |
1903 | + | let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked") | |
1904 | + | let ki = bH(c) | |
1905 | + | let kj = getString(ki) | |
1906 | + | if (!(isDefined(kj))) | |
1904 | 1907 | then throw("You are not eligible for ONBOARD artifact") | |
1905 | 1908 | else { | |
1906 | - | let | |
1907 | - | let | |
1908 | - | if (isDefined( | |
1909 | - | then throw(("You already used your ONBOARD artifact on duck " + value( | |
1909 | + | let kk = bJ(c) | |
1910 | + | let kl = getString(kk) | |
1911 | + | if (isDefined(kl)) | |
1912 | + | then throw(("You already used your ONBOARD artifact on duck " + value(kl))) | |
1910 | 1913 | else { | |
1911 | - | let | |
1912 | - | let | |
1913 | - | if (isDefined( | |
1914 | - | then throw(((("The duck " + B) + " already got points from ONBOARD artifact from user ") + value( | |
1915 | - | else ([StringEntry( | |
1914 | + | let km = bI(B) | |
1915 | + | let kn = getString(km) | |
1916 | + | if (isDefined(kn)) | |
1917 | + | then throw(((("The duck " + B) + " already got points from ONBOARD artifact from user ") + value(kn))) | |
1918 | + | else ([StringEntry(kk, B), StringEntry(km, c)] ++ kf(B, af)._1) | |
1916 | 1919 | } | |
1917 | 1920 | } | |
1918 | 1921 | } | |
1919 | 1922 | ||
1920 | 1923 | ||
1921 | - | func | |
1922 | - | let | |
1923 | - | let Q = | |
1924 | - | let | |
1925 | - | let | |
1926 | - | if ((valueOrElse(getInteger( | |
1924 | + | func ko (c,jo) = { | |
1925 | + | let ga = jm(c, eB, jo) | |
1926 | + | let Q = ga._2 | |
1927 | + | let ji = dG(ga._3[dk]) | |
1928 | + | let kp = bx(aI, Q) | |
1929 | + | if ((valueOrElse(getInteger(kp), 0) > 0)) | |
1927 | 1930 | then throw("Presale artifact is already activated") | |
1928 | - | else if ((parseIntValue( | |
1929 | - | then throw(((( | |
1931 | + | else if ((parseIntValue(ga._3[dj]) > en)) | |
1932 | + | then throw((((aF + " ") + Q) + " is not eligible for presale artifact")) | |
1930 | 1933 | else { | |
1931 | - | let | |
1932 | - | ((( | |
1934 | + | let jT = jJ(c, Q, ji, eB) | |
1935 | + | (((jT._1 :+ IntegerEntry(kp, ji)) :+ StringEntry(jT._2, makeString(jT._3, ":"))) :+ StringEntry(jT._4, makeString(jT._5, ":"))) | |
1933 | 1936 | } | |
1934 | 1937 | } | |
1935 | 1938 | ||
1936 | 1939 | ||
1937 | - | func | |
1938 | - | let | |
1939 | - | let | |
1940 | - | let | |
1941 | - | let | |
1942 | - | let | |
1943 | - | let | |
1944 | - | if (( | |
1940 | + | func kq (B) = { | |
1941 | + | let ci = valueOrElse(getInteger(dh, bT), 0) | |
1942 | + | let jq = split(valueOrElse(getString(bO(B)), aN), "_") | |
1943 | + | let aA = lastBlock.timestamp | |
1944 | + | let ck = cc(dh, ci) | |
1945 | + | let ce = ck[bY] | |
1946 | + | let cf = ck[bZ] | |
1947 | + | if ((jq[br] != "T")) | |
1945 | 1948 | then false | |
1946 | - | else if (if (if ((parseIntValue( | |
1947 | - | then ( | |
1949 | + | else if (if (if ((parseIntValue(jq[bq]) == ci)) | |
1950 | + | then (cf[cb] == "INPROGRESS") | |
1948 | 1951 | else false) | |
1949 | - | then (parseIntValue( | |
1952 | + | then (parseIntValue(ce[ca]) > aA) | |
1950 | 1953 | else false) | |
1951 | 1954 | then throw("Your duck is taking part in the tournament") | |
1952 | - | else | |
1953 | - | } | |
1954 | - | ||
1955 | - | ||
1956 | - | func | |
1957 | - | let B = valueOrErrorMessage(getString( | |
1958 | - | if ( | |
1955 | + | else dF(invoke(this, "exitTournamentInternal", [B], nil)) | |
1956 | + | } | |
1957 | + | ||
1958 | + | ||
1959 | + | func kr (ks,ao,kt,c,ku,kv) = { | |
1960 | + | let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked") | |
1961 | + | if (kq(B)) | |
1959 | 1962 | then throw("mergeInternal_checkTournament") | |
1960 | 1963 | else { | |
1961 | - | func | |
1962 | - | let | |
1963 | - | let | |
1964 | - | let | |
1965 | - | let | |
1966 | - | if (( | |
1967 | - | then throw(( | |
1964 | + | func kw (eR,Q) = { | |
1965 | + | let js = value(assetInfo(fromBase58String(Q))) | |
1966 | + | let jt = bw(Q) | |
1967 | + | let ju = valueOrErrorMessage(getInteger(jt), (("NFT " + js.name) + " is not staked")) | |
1968 | + | let jv = valueOrErrorMessage(getString(bt(Q)), (("NFT " + js.name) + " is orphaned")) | |
1969 | + | if ((jv != c)) | |
1970 | + | then throw((aF + " is not yours")) | |
1968 | 1971 | else { | |
1969 | - | let | |
1970 | - | let | |
1971 | - | if (if (( | |
1972 | - | then ( | |
1972 | + | let jw = split(js.description, "_") | |
1973 | + | let dv = jw[dm] | |
1974 | + | if (if ((eR._3 != "")) | |
1975 | + | then (eR._3 != dv) | |
1973 | 1976 | else false) | |
1974 | 1977 | then throw("Lands should be on the same continent to merge") | |
1975 | 1978 | else { | |
1976 | - | let | |
1977 | - | let | |
1978 | - | let | |
1979 | - | let | |
1980 | - | let | |
1981 | - | let | |
1982 | - | let | |
1983 | - | let | |
1984 | - | let | |
1985 | - | if (("S" == | |
1979 | + | let dH = jw[dk] | |
1980 | + | let kx = eR._1 | |
1981 | + | let gK = valueOrErrorMessage(indexOf(kx, dH), "You haven't passed all the lands needed") | |
1982 | + | let ky = (take(kx, gK) + drop(kx, (gK + 1))) | |
1983 | + | let ji = dG(dH) | |
1984 | + | let kz = (eR._2 + valueOrElse(getInteger(bx(aI, Q)), 0)) | |
1985 | + | let ia = valueOrElse(getInteger(bD(Q)), 0) | |
1986 | + | let kA = { | |
1987 | + | let cz = dH | |
1988 | + | if (("S" == cz)) | |
1986 | 1989 | then 3 | |
1987 | - | else if (("M" == | |
1990 | + | else if (("M" == cz)) | |
1988 | 1991 | then 4 | |
1989 | - | else if (("L" == | |
1992 | + | else if (("L" == cz)) | |
1990 | 1993 | then 5 | |
1991 | - | else if (("XL" == | |
1994 | + | else if (("XL" == cz)) | |
1992 | 1995 | then 6 | |
1993 | 1996 | else throw("Only S, M, L, XL can merge") | |
1994 | 1997 | } | |
1995 | - | if (( | |
1998 | + | if ((ia != kA)) | |
1996 | 1999 | then throw("All lands should be maxed to merge") | |
1997 | 2000 | else { | |
1998 | - | let | |
1999 | - | let | |
2000 | - | let | |
2001 | - | if ((0 > | |
2002 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
2001 | + | let es = jw[dj] | |
2002 | + | let gG = gM(jw[dl]) | |
2003 | + | let gQ = (lastBlock.timestamp - ju) | |
2004 | + | if ((0 > gQ)) | |
2005 | + | then throw(((("Saved timestamp is in future, saved = " + toString(ju)) + ", current = ") + toString(lastBlock.timestamp))) | |
2003 | 2006 | else { | |
2004 | - | let | |
2005 | - | let | |
2006 | - | let | |
2007 | - | let | |
2008 | - | let | |
2009 | - | let | |
2010 | - | let | |
2011 | - | let | |
2012 | - | if (!(isDefined( | |
2007 | + | let jy = jh(Q, ji) | |
2008 | + | let hZ = (ji / cH) | |
2009 | + | let jG = gO(split(eR._4, "_"), gG, gQ, hZ, jy) | |
2010 | + | let fb = gE(eR._6, gG, hZ, -1) | |
2011 | + | let kB = gE(eR._10, gG, hZ, -1) | |
2012 | + | let hu = gE(eR._9, gG, hZ, 1) | |
2013 | + | let kC = eR._7 | |
2014 | + | let dc = indexOf(kC, Q) | |
2015 | + | if (!(isDefined(dc))) | |
2013 | 2016 | then throw(("Your staked lands don't contain " + Q)) | |
2014 | 2017 | else { | |
2015 | - | let | |
2016 | - | let | |
2017 | - | $Tuple10( | |
2018 | - | then [DeleteEntry( | |
2019 | - | else nil)), | |
2018 | + | let kD = bv(Q) | |
2019 | + | let kE = valueOrElse(getString(kD), "") | |
2020 | + | $Tuple10(ky, kz, dv, jG, ((((((((((((eR._5 :+ DeleteEntry(bw(Q))) :+ DeleteEntry(bz(aF, Q, c))) :+ DeleteEntry(er(es))) :+ DeleteEntry(bt(Q))) :+ DeleteEntry(bD(Q))) :+ DeleteEntry(et(Q, c))) :+ DeleteEntry(bx(aI, Q))) :+ DeleteEntry(eu(es))) :+ DeleteEntry(bC(Q))) :+ DeleteEntry(kD)) :+ Burn(fromBase58String(Q), 1)) ++ (if ((kE != "")) | |
2021 | + | then [DeleteEntry(ep(kE))] | |
2022 | + | else nil)), fb, removeByIndex(kC, value(dc)), (eR._8 + ji), hu, kB) | |
2020 | 2023 | } | |
2021 | 2024 | } | |
2022 | 2025 | } | |
2023 | 2026 | } | |
2024 | 2027 | } | |
2025 | 2028 | } | |
2026 | 2029 | ||
2027 | - | let | |
2028 | - | let | |
2029 | - | let | |
2030 | - | let | |
2031 | - | let | |
2032 | - | let | |
2033 | - | then split_51C(value( | |
2030 | + | let hL = bN(B) | |
2031 | + | let io = hK(hL) | |
2032 | + | let gF = split(valueOrElse(getString(dt()), "0_0_0_0_0_0"), "_") | |
2033 | + | let kF = dw(c) | |
2034 | + | let kG = getString(kF) | |
2035 | + | let kH = if (isDefined(kG)) | |
2036 | + | then split_51C(value(kG), "_") | |
2034 | 2037 | else nil | |
2035 | - | let | |
2036 | - | let | |
2037 | - | let | |
2038 | - | let | |
2039 | - | let | |
2040 | - | let | |
2041 | - | func | |
2042 | - | then | |
2043 | - | else | |
2044 | - | ||
2045 | - | func | |
2046 | - | then | |
2038 | + | let kI = split(value(assetInfo(fromBase58String(ku[0]))).description, "_")[dm] | |
2039 | + | let kJ = split(valueOrElse(getString(du(kI)), "0_0_0_0_0_0"), "_") | |
2040 | + | let fc = { | |
2041 | + | let eT = ku | |
2042 | + | let eU = size(eT) | |
2043 | + | let eV = $Tuple10(kt, 0, "", io[bn], nil, gF, kH, 0, split("0_0_0_0_0_0", "_"), kJ) | |
2044 | + | func eW (eX,eY) = if ((eY >= eU)) | |
2045 | + | then eX | |
2046 | + | else kw(eX, eT[eY]) | |
2047 | + | ||
2048 | + | func eZ (eX,eY) = if ((eY >= eU)) | |
2049 | + | then eX | |
2047 | 2050 | else throw("List size exceeds 5") | |
2048 | 2051 | ||
2049 | - | | |
2052 | + | eZ(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5) | |
2050 | 2053 | } | |
2051 | - | let | |
2052 | - | let | |
2053 | - | let | |
2054 | - | let | |
2055 | - | let | |
2056 | - | let | |
2057 | - | let | |
2058 | - | let | |
2059 | - | let | |
2060 | - | let | |
2061 | - | let | |
2062 | - | $Tuple2(((((((((((((((( | |
2063 | - | then StringEntry( | |
2064 | - | else DeleteEntry( | |
2054 | + | let dv = fc._3 | |
2055 | + | let ho = valueOrErrorMessage(indexOf(aU, dv), ("Unknown continent: " + dv)) | |
2056 | + | let gN = ht(fc._9, (dG(ks) / cH)) | |
2057 | + | let iM = valueOrElse(getInteger(eo()), (en + 1)) | |
2058 | + | let kK = toString(iM) | |
2059 | + | let iN = Issue(eG(kK, ks), makeString([kK, ks, gN, dv], "_"), 1, 0, false) | |
2060 | + | let bu = calculateAssetId(iN) | |
2061 | + | let kL = toBase58String(bu) | |
2062 | + | let jS = makeString(fd((kv > 0), split(io[bo], "_"), kv), "_") | |
2063 | + | let kM = dx(c) | |
2064 | + | let kN = valueOrElse(getInteger(kM), 0) | |
2065 | + | $Tuple2((((((((((((((((fc._5 :+ (if ((size(fc._7) > 0)) | |
2066 | + | then StringEntry(kF, makeString_11C(fc._7, "_")) | |
2067 | + | else DeleteEntry(kF))) :+ IntegerEntry(kM, if ((fc._8 > kN)) | |
2065 | 2068 | then 0 | |
2066 | - | else ( | |
2067 | - | } | |
2068 | - | } | |
2069 | - | ||
2070 | - | ||
2071 | - | func | |
2072 | - | ||
2073 | - | ||
2074 | - | func | |
2075 | - | ||
2076 | - | ||
2077 | - | func | |
2078 | - | ||
2079 | - | ||
2080 | - | func | |
2081 | - | ||
2082 | - | ||
2083 | - | func | |
2084 | - | let | |
2085 | - | if ((4 == | |
2086 | - | then | |
2087 | - | else if ((3 == | |
2088 | - | then | |
2089 | - | else if ((5 == | |
2090 | - | then | |
2091 | - | else if ((2 == | |
2092 | - | then | |
2069 | + | else (kN - fc._8))) :+ IntegerEntry(eo(), (iM + 1))) :+ iN) :+ StringEntry(er(kK), kL)) :+ StringEntry(bt(kL), c)) :+ StringEntry(eu(kK), c)) :+ IntegerEntry(bx(aI, kL), fc._2)) :+ IntegerEntry(bD(kL), ao)) :+ IntegerEntry(et(kL, c), ao)) :+ StringEntry(hL, makeString([io[bm], fc._4, jS, io[bp]], ":"))) :+ StringEntry(dt(), makeString(fc._6, "_"))) :+ StringEntry(du(dv), makeString(fc._10, "_"))) :+ StringEntry(bO(B), makeString([dv, "L", kL], "_"))) :+ ScriptTransfer(addressFromStringValue(c), 1, bu)), kL) | |
2070 | + | } | |
2071 | + | } | |
2072 | + | ||
2073 | + | ||
2074 | + | func kO (c,ku) = kr("M", 3, "SSSS", c, ku, 0) | |
2075 | + | ||
2076 | + | ||
2077 | + | func kP (c,ku) = kr("L", 4, "SMM", c, ku, (cC * 4)) | |
2078 | + | ||
2079 | + | ||
2080 | + | func kQ (c,ku) = kr("XL", 5, "SSSML", c, ku, (cC * 47)) | |
2081 | + | ||
2082 | + | ||
2083 | + | func kR (c,ku) = kr("XXL", 6, "LXL", c, ku, (cC * 54)) | |
2084 | + | ||
2085 | + | ||
2086 | + | func kS (c,ku) = { | |
2087 | + | let cz = size(ku) | |
2088 | + | if ((4 == cz)) | |
2089 | + | then kO(c, ku) | |
2090 | + | else if ((3 == cz)) | |
2091 | + | then kP(c, ku) | |
2092 | + | else if ((5 == cz)) | |
2093 | + | then kQ(c, ku) | |
2094 | + | else if ((2 == cz)) | |
2095 | + | then kR(c, ku) | |
2093 | 2096 | else throw("Unknown merge") | |
2094 | 2097 | } | |
2095 | 2098 | ||
2096 | 2099 | ||
2097 | - | func | |
2098 | - | then valueOrElse(getBoolean( | |
2100 | + | func kT (gK) = if (if ((gK.originCaller != dd)) | |
2101 | + | then valueOrElse(getBoolean(dJ()), false) | |
2099 | 2102 | else false) | |
2100 | 2103 | then throw("Contracts are under maintenance") | |
2101 | - | else [StringEntry( | |
2102 | - | ||
2103 | - | ||
2104 | - | @Callable( | |
2105 | - | func constructorV1 ( | |
2104 | + | else [StringEntry(dK(toString(gK.originCaller)), toBase58String(gK.transactionId))] | |
2105 | + | ||
2106 | + | ||
2107 | + | @Callable(gK) | |
2108 | + | func constructorV1 (kU) = if ((gK.caller != this)) | |
2106 | 2109 | then throw("Permission denied") | |
2107 | - | else [StringEntry( | |
2108 | - | ||
2109 | - | ||
2110 | - | ||
2111 | - | @Callable( | |
2112 | - | func saveInteger ( | |
2110 | + | else [StringEntry(cX(), kU)] | |
2111 | + | ||
2112 | + | ||
2113 | + | ||
2114 | + | @Callable(gK) | |
2115 | + | func saveInteger (cP,eI) = if ((gK.caller != this)) | |
2113 | 2116 | then throw("saveInteger is not public method") | |
2114 | - | else [IntegerEntry( | |
2115 | - | ||
2116 | - | ||
2117 | - | ||
2118 | - | @Callable( | |
2119 | - | func setBlocked ( | |
2117 | + | else [IntegerEntry(cP, eI)] | |
2118 | + | ||
2119 | + | ||
2120 | + | ||
2121 | + | @Callable(gK) | |
2122 | + | func setBlocked (kV) = if ((gK.caller != this)) | |
2120 | 2123 | then throw("permission denied") | |
2121 | - | else [BooleanEntry( | |
2122 | - | ||
2123 | - | ||
2124 | - | ||
2125 | - | @Callable( | |
2124 | + | else [BooleanEntry(dJ(), kV)] | |
2125 | + | ||
2126 | + | ||
2127 | + | ||
2128 | + | @Callable(gK) | |
2126 | 2129 | func stakeLand () = { | |
2127 | - | let | |
2128 | - | if ((size( | |
2130 | + | let kW = kT(gK) | |
2131 | + | if ((size(gK.payments) != 1)) | |
2129 | 2132 | then throw("Exactly one payment required") | |
2130 | 2133 | else { | |
2131 | - | let | |
2132 | - | let | |
2133 | - | let | |
2134 | - | if (( | |
2135 | - | then throw((("NFT " + | |
2134 | + | let kX = value(gK.payments[0]) | |
2135 | + | let bu = value(kX.assetId) | |
2136 | + | let cO = toString(gK.caller) | |
2137 | + | if ((kX.amount != 1)) | |
2138 | + | then throw((("NFT " + aF) + " token should be attached as payment")) | |
2136 | 2139 | else { | |
2137 | - | let | |
2138 | - | if (( | |
2140 | + | let js = value(assetInfo(bu)) | |
2141 | + | if ((js.issuer != this)) | |
2139 | 2142 | then throw("Unknown issuer of token") | |
2140 | - | else if (!(contains( | |
2141 | - | then throw((("Only NFT " + | |
2143 | + | else if (!(contains(js.name, aF))) | |
2144 | + | then throw((("Only NFT " + aF) + " tokens are accepted")) | |
2142 | 2145 | else { | |
2143 | - | let | |
2144 | - | let | |
2145 | - | then dropRight( | |
2146 | - | else if (contains( | |
2147 | - | then dropRight( | |
2148 | - | else dropRight( | |
2149 | - | if (!(isDefined(parseInt( | |
2150 | - | then throw(("Cannot parse land number from " + | |
2146 | + | let kY = drop(js.name, 4) | |
2147 | + | let es = if (contains(kY, "XXL")) | |
2148 | + | then dropRight(kY, 3) | |
2149 | + | else if (contains(kY, "XL")) | |
2150 | + | then dropRight(kY, 2) | |
2151 | + | else dropRight(kY, 1) | |
2152 | + | if (!(isDefined(parseInt(es)))) | |
2153 | + | then throw(("Cannot parse land number from " + js.name)) | |
2151 | 2154 | else { | |
2152 | - | let Q = toBase58String( | |
2153 | - | let | |
2154 | - | if (isDefined(getInteger( | |
2155 | - | then throw((("NFT " + | |
2155 | + | let Q = toBase58String(bu) | |
2156 | + | let jt = bw(Q) | |
2157 | + | if (isDefined(getInteger(jt))) | |
2158 | + | then throw((("NFT " + js.name) + " is already staked")) | |
2156 | 2159 | else { | |
2157 | - | let | |
2158 | - | let | |
2159 | - | let | |
2160 | - | let | |
2161 | - | let | |
2162 | - | let | |
2163 | - | let | |
2164 | - | let | |
2165 | - | let | |
2166 | - | let | |
2167 | - | let | |
2168 | - | then split_51C(value( | |
2160 | + | let jw = split(js.description, "_") | |
2161 | + | let gG = gM(jw[dl]) | |
2162 | + | let ji = dG(jw[dk]) | |
2163 | + | let hZ = (ji / cH) | |
2164 | + | let fb = gL(gG, hZ, 1) | |
2165 | + | let kZ = du(jw[dm]) | |
2166 | + | let kJ = split(valueOrElse(getString(kZ), "0_0_0_0_0_0"), "_") | |
2167 | + | let la = makeString(gE(kJ, gG, hZ, 1), "_") | |
2168 | + | let kF = dw(cO) | |
2169 | + | let kG = getString(kF) | |
2170 | + | let kC = if (isDefined(kG)) | |
2171 | + | then split_51C(value(kG), "_") | |
2169 | 2172 | else nil | |
2170 | - | if (containsElement( | |
2173 | + | if (containsElement(kC, Q)) | |
2171 | 2174 | then throw(("Your staked lands already contain " + Q)) | |
2172 | - | else if ((size( | |
2173 | - | then throw((("Your already staked max (" + toString( | |
2175 | + | else if ((size(kC) >= aK)) | |
2176 | + | then throw((("Your already staked max (" + toString(aK)) + ") lands")) | |
2174 | 2177 | else { | |
2175 | - | let | |
2176 | - | let | |
2177 | - | let | |
2178 | - | let | |
2179 | - | $Tuple2(([IntegerEntry( | |
2178 | + | let ia = valueOrElse(getInteger(bD(Q)), 0) | |
2179 | + | let kM = dx(cO) | |
2180 | + | let lb = valueOrElse(getInteger(kM), 0) | |
2181 | + | let lc = invoke(dg, "onStakeUnstakeLand", [cO], nil) | |
2182 | + | $Tuple2(([IntegerEntry(jt, lastBlock.timestamp), IntegerEntry(bz(aF, Q, cO), lastBlock.timestamp), StringEntry(kF, makeString_11C((kC :+ Q), "_")), IntegerEntry(kM, (lb + ji)), StringEntry(bt(Q), cO), StringEntry(eu(es), cO), IntegerEntry(et(Q, cO), ia), StringEntry(dt(), fb), StringEntry(kZ, la)] ++ kW), lc) | |
2180 | 2183 | } | |
2181 | 2184 | } | |
2182 | 2185 | } | |
2183 | 2186 | } | |
2184 | 2187 | } | |
2185 | 2188 | } | |
2186 | 2189 | } | |
2187 | 2190 | ||
2188 | 2191 | ||
2189 | 2192 | ||
2190 | - | @Callable( | |
2191 | - | func unstakeLand ( | |
2192 | - | let | |
2193 | - | if ((size( | |
2193 | + | @Callable(gK) | |
2194 | + | func unstakeLand (jo) = { | |
2195 | + | let kW = kT(gK) | |
2196 | + | if ((size(gK.payments) != 0)) | |
2194 | 2197 | then throw("No payments required") | |
2195 | 2198 | else { | |
2196 | - | let c = toString( | |
2197 | - | let | |
2198 | - | let Q = | |
2199 | - | let | |
2200 | - | let | |
2201 | - | let | |
2202 | - | let | |
2203 | - | let | |
2204 | - | let | |
2205 | - | let | |
2206 | - | let | |
2207 | - | let | |
2208 | - | let | |
2209 | - | let | |
2210 | - | let | |
2211 | - | if (!(isDefined( | |
2199 | + | let c = toString(gK.caller) | |
2200 | + | let ga = jm(c, eA, jo) | |
2201 | + | let Q = ga._2 | |
2202 | + | let jw = ga._3 | |
2203 | + | let kF = dw(c) | |
2204 | + | let gG = gM(jw[dl]) | |
2205 | + | let ji = dG(jw[dk]) | |
2206 | + | let hZ = (ji / cH) | |
2207 | + | let fb = gL(gG, hZ, -1) | |
2208 | + | let kZ = du(jw[dm]) | |
2209 | + | let kJ = split(valueOrElse(getString(kZ), "0_0_0_0_0_0"), "_") | |
2210 | + | let la = makeString(gE(kJ, gG, hZ, -1), "_") | |
2211 | + | let jT = jJ(c, Q, ji, eA) | |
2212 | + | let kC = split_51C(valueOrElse(getString(kF), ""), "_") | |
2213 | + | let dc = indexOf(kC, Q) | |
2214 | + | if (!(isDefined(dc))) | |
2212 | 2215 | then throw(("Your staked lands don't contain " + Q)) | |
2213 | 2216 | else { | |
2214 | - | let | |
2215 | - | let | |
2216 | - | if (( | |
2217 | - | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString( | |
2217 | + | let aA = lastBlock.timestamp | |
2218 | + | let ld = valueOrElse(getInteger(df, bP(c)), 0) | |
2219 | + | if ((ld >= aA)) | |
2220 | + | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(ld))) | |
2218 | 2221 | else { | |
2219 | - | let | |
2220 | - | if (( | |
2221 | - | then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString( | |
2222 | + | let le = (valueOrElse(getInteger(dg, b(c)), 0) + cD) | |
2223 | + | if ((le > aA)) | |
2224 | + | then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(le))) | |
2222 | 2225 | else { | |
2223 | - | let | |
2224 | - | let | |
2225 | - | let | |
2226 | + | let kM = dx(c) | |
2227 | + | let kN = valueOrElse(getInteger(kM), 0) | |
2228 | + | let lf = if ((ji > kN)) | |
2226 | 2229 | then 0 | |
2227 | - | else ( | |
2228 | - | let | |
2229 | - | $Tuple2(([ScriptTransfer( | |
2230 | - | then StringEntry( | |
2231 | - | else DeleteEntry( | |
2230 | + | else (kN - ji) | |
2231 | + | let lc = invoke(dg, "onStakeUnstakeLand", [c], nil) | |
2232 | + | $Tuple2(([ScriptTransfer(gK.caller, 1, fromBase58String(Q)), DeleteEntry(bw(Q)), DeleteEntry(bz(aF, Q, c)), StringEntry(dt(), fb), StringEntry(kZ, la), StringEntry(jT._2, makeString(jT._3, ":")), if ((size(kC) > 1)) | |
2233 | + | then StringEntry(kF, makeString_11C(removeByIndex(kC, value(dc)), "_")) | |
2234 | + | else DeleteEntry(kF), IntegerEntry(kM, lf)] ++ kW), lc) | |
2232 | 2235 | } | |
2233 | 2236 | } | |
2234 | 2237 | } | |
2235 | 2238 | } | |
2236 | 2239 | } | |
2237 | 2240 | ||
2238 | 2241 | ||
2239 | 2242 | ||
2240 | - | @Callable( | |
2243 | + | @Callable(gK) | |
2241 | 2244 | func stakeDuck () = { | |
2242 | - | let | |
2243 | - | if ((size( | |
2245 | + | let kW = kT(gK) | |
2246 | + | if ((size(gK.payments) != 1)) | |
2244 | 2247 | then throw("Exactly one payment required") | |
2245 | 2248 | else { | |
2246 | - | let | |
2247 | - | let | |
2248 | - | let | |
2249 | - | if (( | |
2250 | - | then throw((("NFT " + | |
2249 | + | let kX = value(gK.payments[0]) | |
2250 | + | let bu = value(kX.assetId) | |
2251 | + | let cO = toString(gK.caller) | |
2252 | + | if ((kX.amount != 1)) | |
2253 | + | then throw((("NFT " + aG) + " token should be attached as payment")) | |
2251 | 2254 | else { | |
2252 | - | let | |
2253 | - | let | |
2254 | - | then ( | |
2255 | + | let js = value(assetInfo(bu)) | |
2256 | + | let lg = if (if (cv) | |
2257 | + | then (js.issuer == this) | |
2255 | 2258 | else false) | |
2256 | - | then contains( | |
2259 | + | then contains(js.name, aH) | |
2257 | 2260 | else false | |
2258 | - | if (if (if (( | |
2259 | - | then ( | |
2261 | + | if (if (if ((js.issuer != dW)) | |
2262 | + | then (js.issuer != dX) | |
2260 | 2263 | else false) | |
2261 | - | then !( | |
2264 | + | then !(lg) | |
2262 | 2265 | else false) | |
2263 | - | then throw((((("Unknown issuer of " + | |
2264 | - | else if (if (!(contains( | |
2265 | - | then !( | |
2266 | + | then throw((((("Unknown issuer of " + aG) + " or ") + aH) + " token")) | |
2267 | + | else if (if (!(contains(js.name, aG))) | |
2268 | + | then !(lg) | |
2266 | 2269 | else false) | |
2267 | - | then throw((((("Only NFT " + | |
2270 | + | then throw((((("Only NFT " + aG) + " or ") + aH) + " tokens are accepted")) | |
2268 | 2271 | else { | |
2269 | - | let | |
2270 | - | let | |
2271 | - | if (isDefined(getInteger( | |
2272 | - | then throw((("NFT " + | |
2273 | - | else if (isDefined(getString( | |
2274 | - | then throw(("You already staked one duck: " + | |
2272 | + | let lh = toBase58String(bu) | |
2273 | + | let jt = bw(lh) | |
2274 | + | if (isDefined(getInteger(jt))) | |
2275 | + | then throw((("NFT " + js.name) + " is already staked")) | |
2276 | + | else if (isDefined(getString(bM(cO)))) | |
2277 | + | then throw(("You already staked one duck: " + js.name)) | |
2275 | 2278 | else { | |
2276 | - | let | |
2277 | - | let | |
2278 | - | let | |
2279 | - | let | |
2280 | - | let | |
2281 | - | let | |
2282 | - | let | |
2283 | - | ([IntegerEntry( | |
2279 | + | let li = bO(lh) | |
2280 | + | let ch = getString(li) | |
2281 | + | let hL = bN(lh) | |
2282 | + | let lj = getString(hL) | |
2283 | + | let jb = A(lh) | |
2284 | + | let jc = aj(valueOrElse(getInteger(E(lh)), 0)) | |
2285 | + | let lk = valueOrElse(getInteger(jb), jc) | |
2286 | + | ([IntegerEntry(jt, lastBlock.timestamp), IntegerEntry(bz(aG, toBase58String(bu), cO), lastBlock.timestamp), StringEntry(bL(lh), cO), StringEntry(bM(cO), lh)] ++ (if (isDefined(ch)) | |
2284 | 2287 | then nil | |
2285 | - | else ([StringEntry( | |
2288 | + | else ([StringEntry(li, aN)] ++ (if (isDefined(lj)) | |
2286 | 2289 | then nil | |
2287 | - | else (([StringEntry( | |
2290 | + | else (([StringEntry(hL, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(jb, lk)) ++ kW))))) | |
2288 | 2291 | } | |
2289 | 2292 | } | |
2290 | 2293 | } | |
2291 | 2294 | } | |
2292 | 2295 | } | |
2293 | 2296 | ||
2294 | 2297 | ||
2295 | 2298 | ||
2296 | - | @Callable( | |
2297 | - | func unstakeDuck ( | |
2298 | - | let | |
2299 | - | if ((size( | |
2299 | + | @Callable(gK) | |
2300 | + | func unstakeDuck (lh) = { | |
2301 | + | let kW = kT(gK) | |
2302 | + | if ((size(gK.payments) != 0)) | |
2300 | 2303 | then throw("No payments required") | |
2301 | 2304 | else { | |
2302 | - | let | |
2303 | - | let | |
2304 | - | let | |
2305 | - | let | |
2306 | - | if (!(isDefined(getInteger( | |
2307 | - | then throw((("NFT " + | |
2308 | - | else if (!(isDefined(getString( | |
2309 | - | then throw((("The duck " + | |
2305 | + | let bu = fromBase58String(lh) | |
2306 | + | let cO = toString(gK.caller) | |
2307 | + | let js = value(assetInfo(bu)) | |
2308 | + | let jt = bw(lh) | |
2309 | + | if (!(isDefined(getInteger(jt)))) | |
2310 | + | then throw((("NFT " + js.name) + " is not staked")) | |
2311 | + | else if (!(isDefined(getString(bM(cO))))) | |
2312 | + | then throw((("The duck " + js.name) + " is not staked")) | |
2310 | 2313 | else { | |
2311 | - | let | |
2312 | - | if (( | |
2314 | + | let jv = valueOrErrorMessage(getString(bL(lh)), (("NFT " + js.name) + " is orphaned")) | |
2315 | + | if ((jv != cO)) | |
2313 | 2316 | then throw("Staked NFT is not yours") | |
2314 | - | else if ( | |
2317 | + | else if (kq(lh)) | |
2315 | 2318 | then throw("unstakeDuck_checkTournament") | |
2316 | 2319 | else { | |
2317 | - | let | |
2318 | - | let | |
2319 | - | let | |
2320 | - | if (( | |
2321 | - | then throw((("Please heal your duck to " + toString( | |
2322 | - | else ([ScriptTransfer( | |
2320 | + | let jb = A(lh) | |
2321 | + | let jc = aj(valueOrElse(getInteger(E(lh)), 0)) | |
2322 | + | let av = valueOrElse(getInteger(jb), jc) | |
2323 | + | if ((jc > av)) | |
2324 | + | then throw((("Please heal your duck to " + toString(jc)) + "hp before unstaking")) | |
2325 | + | else ([ScriptTransfer(gK.caller, 1, bu), DeleteEntry(jt), DeleteEntry(jb), DeleteEntry(bO(lh)), DeleteEntry(bL(lh)), DeleteEntry(bz(aG, lh, cO)), DeleteEntry(bM(cO))] ++ kW) | |
2323 | 2326 | } | |
2324 | 2327 | } | |
2325 | 2328 | } | |
2326 | 2329 | } | |
2327 | 2330 | ||
2328 | 2331 | ||
2329 | 2332 | ||
2330 | - | @Callable( | |
2331 | - | func claimRes ( | |
2332 | - | let | |
2333 | - | if ((size( | |
2333 | + | @Callable(gK) | |
2334 | + | func claimRes (eI,ll) = { | |
2335 | + | let kW = kT(gK) | |
2336 | + | if ((size(gK.payments) != 0)) | |
2334 | 2337 | then throw("No payments required") | |
2335 | 2338 | else { | |
2336 | - | let c = toString( | |
2337 | - | let | |
2338 | - | let B = valueOrErrorMessage(getString( | |
2339 | - | $Tuple2((((( | |
2340 | - | } | |
2341 | - | } | |
2342 | - | ||
2343 | - | ||
2344 | - | ||
2345 | - | @Callable( | |
2346 | - | func claimResToWH ( | |
2347 | - | let | |
2348 | - | if ((size( | |
2339 | + | let c = toString(gK.originCaller) | |
2340 | + | let fj = jx(c, eI, eA, ll) | |
2341 | + | let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked") | |
2342 | + | $Tuple2(((((fj._1 ++ kf(B, fraction(X, eI, cG))._1) :+ StringEntry(fj._2, makeString(fj._3, ":"))) :+ StringEntry(fj._4, makeString(fj._5, ":"))) ++ kW), fj._3[bn]) | |
2343 | + | } | |
2344 | + | } | |
2345 | + | ||
2346 | + | ||
2347 | + | ||
2348 | + | @Callable(gK) | |
2349 | + | func claimResToWH (eI,ll) = { | |
2350 | + | let kW = kT(gK) | |
2351 | + | if ((size(gK.payments) != 0)) | |
2349 | 2352 | then throw("No payments required") | |
2350 | 2353 | else { | |
2351 | - | let c = toString( | |
2352 | - | let | |
2353 | - | $Tuple2((((( | |
2354 | - | } | |
2355 | - | } | |
2356 | - | ||
2357 | - | ||
2358 | - | ||
2359 | - | @Callable( | |
2360 | - | func flight ( | |
2361 | - | let | |
2362 | - | if ((size( | |
2354 | + | let c = toString(gK.originCaller) | |
2355 | + | let fj = jx(c, eI, ez, ll) | |
2356 | + | $Tuple2(((((fj._1 ++ kg(c, fraction(X, eI, cG))._1) :+ StringEntry(fj._2, makeString(fj._3, ":"))) :+ StringEntry(fj._4, makeString(fj._5, ":"))) ++ kW), fj._5[be]) | |
2357 | + | } | |
2358 | + | } | |
2359 | + | ||
2360 | + | ||
2361 | + | ||
2362 | + | @Callable(gK) | |
2363 | + | func flight (iQ,iR) = { | |
2364 | + | let kW = kT(gK) | |
2365 | + | if ((size(gK.payments) != 0)) | |
2363 | 2366 | then throw("No payments required") | |
2364 | 2367 | else { | |
2365 | - | let | |
2366 | - | let | |
2367 | - | let | |
2368 | - | let B = | |
2369 | - | let | |
2370 | - | let | |
2371 | - | let | |
2372 | - | if (( | |
2368 | + | let bQ = toString(gK.caller) | |
2369 | + | let hp = iP(bQ, iQ, iR) | |
2370 | + | let iV = hp._1 | |
2371 | + | let B = hp._2 | |
2372 | + | let li = bO(B) | |
2373 | + | let jq = valueOrElse(getString(li), aN) | |
2374 | + | let iX = hp._4 | |
2375 | + | if ((iX == jq)) | |
2373 | 2376 | then throw("You can't fly to the same location") | |
2374 | 2377 | else { | |
2375 | - | let | |
2376 | - | let | |
2377 | - | let | |
2378 | - | let | |
2379 | - | let | |
2380 | - | let | |
2381 | - | let | |
2382 | - | let | |
2383 | - | let | |
2384 | - | then if ( | |
2385 | - | then | |
2386 | - | else if (!( | |
2387 | - | then if (( | |
2388 | - | then $Tuple2( | |
2389 | - | else $Tuple2( | |
2390 | - | else if (( | |
2378 | + | let cr = split(iX, "_") | |
2379 | + | let lm = (cr[br] == "T") | |
2380 | + | let ln = (cr[br] == "D") | |
2381 | + | let gx = G(B) | |
2382 | + | let lo = valueOrElse(getString(gx), ",;,_,;,_,;,_,;,_,;,_,;,") | |
2383 | + | let lp = fk(lo, hp._5) | |
2384 | + | let lq = lp._1 | |
2385 | + | let lr = lp._2 | |
2386 | + | let ls = if (!(cl(dh, jq))) | |
2387 | + | then if (lm) | |
2388 | + | then cp(jq, iX, 5) | |
2389 | + | else if (!(ln)) | |
2390 | + | then if ((iV > 0)) | |
2391 | + | then $Tuple2(iX, iV) | |
2392 | + | else $Tuple2(jq, 0) | |
2393 | + | else if ((iV > 0)) | |
2391 | 2394 | then { | |
2392 | - | let | |
2393 | - | if (( | |
2394 | - | then $Tuple2( | |
2395 | + | let dA = invoke(this, "processDelivery", [B], nil) | |
2396 | + | if ((dA == dA)) | |
2397 | + | then $Tuple2(jq, iV) | |
2395 | 2398 | else throw("Strict value is not equal to itself.") | |
2396 | 2399 | } | |
2397 | - | else $Tuple2( | |
2398 | - | else if ( | |
2399 | - | then if (!( | |
2400 | + | else $Tuple2(jq, 0) | |
2401 | + | else if (cg(dh, jq)) | |
2402 | + | then if (!(cg(dh, iX))) | |
2400 | 2403 | then throw("Your duck is taking part in the tournament") | |
2401 | 2404 | else { | |
2402 | - | let | |
2403 | - | let | |
2404 | - | let | |
2405 | - | if (( | |
2406 | - | then | |
2407 | - | else if (( | |
2405 | + | let lt = parseIntValue(cr[bs]) | |
2406 | + | let lu = split(jq, "_") | |
2407 | + | let ci = valueOrElse(getInteger(dh, bT), 0) | |
2408 | + | if ((lt != (parseIntValue(lu[bs]) + 1))) | |
2409 | + | then cp(jq, iX, 7) | |
2410 | + | else if ((iV > 0)) | |
2408 | 2411 | then { | |
2409 | - | let | |
2410 | - | let | |
2411 | - | then invoke( | |
2412 | + | let lv = valueOrElse(getInteger(dh, bX(ci, B)), 0) | |
2413 | + | let lw = if ((lt > lv)) | |
2414 | + | then invoke(dh, "saveDuckResult", [B, lt], nil) | |
2412 | 2415 | else unit | |
2413 | - | if (( | |
2414 | - | then $Tuple2( | |
2416 | + | if ((lw == lw)) | |
2417 | + | then $Tuple2(iX, iV) | |
2415 | 2418 | else throw("Strict value is not equal to itself.") | |
2416 | 2419 | } | |
2417 | - | else $Tuple2( | |
2420 | + | else $Tuple2(jq, 0) | |
2418 | 2421 | } | |
2419 | - | else throw(("Unknown curLocation:" + | |
2420 | - | let | |
2421 | - | let | |
2422 | - | $Tuple2(((([StringEntry( | |
2422 | + | else throw(("Unknown curLocation:" + jq)) | |
2423 | + | let lx = ls._1 | |
2424 | + | let ly = ls._2 | |
2425 | + | $Tuple2(((([StringEntry(li, lx), StringEntry(gx, lq), IntegerEntry(A(B), ly)] ++ kW) ++ (if (lr) | |
2423 | 2426 | then [StringEntry(M(B), "0_0_0_0_0")] | |
2424 | - | else nil)) ++ | |
2425 | - | then | |
2426 | - | else | |
2427 | + | else nil)) ++ kf(B, if ((iV > 0)) | |
2428 | + | then Y | |
2429 | + | else Z)._1), hp._3) | |
2427 | 2430 | } | |
2428 | 2431 | } | |
2429 | 2432 | } | |
2430 | 2433 | ||
2431 | 2434 | ||
2432 | 2435 | ||
2433 | - | @Callable(gJ) | |
2434 | - | func heal (ly,lz,lA) = { | |
2435 | - | let kV = kS(gJ) | |
2436 | - | if (if (if ((0 > ly)) | |
2437 | - | then true | |
2438 | - | else (0 > lz)) | |
2436 | + | @Callable(gK) | |
2437 | + | func heal (lz,lA,lB) = { | |
2438 | + | let kW = kT(gK) | |
2439 | + | if (if (if ((0 > lz)) | |
2439 | 2440 | then true | |
2440 | 2441 | else (0 > lA)) | |
2442 | + | then true | |
2443 | + | else (0 > lB)) | |
2441 | 2444 | then throw("Quantity cannot be negative") | |
2442 | 2445 | else { | |
2443 | - | let B = valueOrErrorMessage(getString( | |
2444 | - | if ( | |
2446 | + | let B = valueOrErrorMessage(getString(bM(toString(gK.caller))), "You don't have a duck staked") | |
2447 | + | if (kq(B)) | |
2445 | 2448 | then throw("heal_checkTournament") | |
2446 | 2449 | else { | |
2447 | - | let | |
2448 | - | let | |
2449 | - | let | |
2450 | - | let | |
2451 | - | if (( | |
2452 | - | then throw((("HP should be < " + toString( | |
2450 | + | let lC = [lz, lA, lB] | |
2451 | + | let jb = A(B) | |
2452 | + | let jc = aj(valueOrElse(getInteger(E(B)), 0)) | |
2453 | + | let lD = valueOrElse(getInteger(jb), jc) | |
2454 | + | if ((lD >= jc)) | |
2455 | + | then throw((("HP should be < " + toString(jc)) + " to heal")) | |
2453 | 2456 | else { | |
2454 | - | let | |
2455 | - | let | |
2456 | - | let | |
2457 | + | let hL = bN(B) | |
2458 | + | let io = hK(hL) | |
2459 | + | let lE = if ((io[bp] == "")) | |
2457 | 2460 | then nil | |
2458 | - | else split_4C( | |
2459 | - | func | |
2460 | - | let | |
2461 | - | let | |
2462 | - | then parseIntValue( | |
2461 | + | else split_4C(io[bp], "_") | |
2462 | + | func lF (eR,co) = { | |
2463 | + | let dC = eR._2 | |
2464 | + | let hg = if ((size(lE) > dC)) | |
2465 | + | then parseIntValue(lE[dC]) | |
2463 | 2466 | else 0 | |
2464 | - | if ((3 > | |
2467 | + | if ((3 > dC)) | |
2465 | 2468 | then { | |
2466 | - | let | |
2467 | - | if (( | |
2468 | - | then throw(((("You have only " + toString( | |
2469 | - | else $Tuple3(( | |
2469 | + | let lG = lC[dC] | |
2470 | + | if ((lG > hg)) | |
2471 | + | then throw(((("You have only " + toString(hg)) + " of ") + aT[dC])) | |
2472 | + | else $Tuple3((eR._1 :+ toString((hg - lG))), (dC + 1), (eR._3 + (parseIntValue(split(co, "_")[aZ]) * lG))) | |
2470 | 2473 | } | |
2471 | - | else $Tuple3(( | |
2474 | + | else $Tuple3((eR._1 :+ toString(hg)), (dC + 1), eR._3) | |
2472 | 2475 | } | |
2473 | 2476 | ||
2474 | - | let | |
2475 | - | let | |
2476 | - | let | |
2477 | - | let | |
2478 | - | func | |
2479 | - | then | |
2480 | - | else | |
2481 | - | ||
2482 | - | func | |
2483 | - | then | |
2477 | + | let fj = { | |
2478 | + | let eT = aX | |
2479 | + | let eU = size(eT) | |
2480 | + | let eV = $Tuple3(nil, 0, 0) | |
2481 | + | func eW (eX,eY) = if ((eY >= eU)) | |
2482 | + | then eX | |
2483 | + | else lF(eX, eT[eY]) | |
2484 | + | ||
2485 | + | func eZ (eX,eY) = if ((eY >= eU)) | |
2486 | + | then eX | |
2484 | 2487 | else throw("List size exceeds 50") | |
2485 | 2488 | ||
2486 | - | | |
2489 | + | eZ(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eV, 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) | |
2487 | 2490 | } | |
2488 | - | let | |
2489 | - | $Tuple2((([IntegerEntry( | |
2491 | + | let lH = min([jc, (lD + fj._3)]) | |
2492 | + | $Tuple2((([IntegerEntry(jb, lH), StringEntry(hL, makeString_2C([io[bm], io[bn], io[bo], makeString(fj._1, "_")], ":"))] ++ kW) ++ kf(B, (ag * ((lz + lA) + lB)))._1), lH) | |
2490 | 2493 | } | |
2491 | 2494 | } | |
2492 | 2495 | } | |
2493 | 2496 | } | |
2494 | 2497 | ||
2495 | 2498 | ||
2496 | 2499 | ||
2497 | - | @Callable( | |
2500 | + | @Callable(gK) | |
2498 | 2501 | func healES () = { | |
2499 | - | let | |
2500 | - | if ((size( | |
2502 | + | let kW = kT(gK) | |
2503 | + | if ((size(gK.payments) != 1)) | |
2501 | 2504 | then throw("Exactly one payment required") | |
2502 | 2505 | else { | |
2503 | - | let | |
2504 | - | if (( | |
2506 | + | let kX = value(gK.payments[0]) | |
2507 | + | if ((kX.assetId != cA)) | |
2505 | 2508 | then throw("Allowed USDT payment only!") | |
2506 | 2509 | else { | |
2507 | - | let B = valueOrErrorMessage(getString( | |
2508 | - | if ( | |
2510 | + | let B = valueOrErrorMessage(getString(bM(toString(gK.caller))), "You don't have a duck staked") | |
2511 | + | if (kq(B)) | |
2509 | 2512 | then throw("healES_checkTournament") | |
2510 | 2513 | else { | |
2511 | - | let | |
2512 | - | let | |
2513 | - | let | |
2514 | - | if (( | |
2514 | + | let jb = A(B) | |
2515 | + | let jc = aj(valueOrElse(getInteger(E(B)), 0)) | |
2516 | + | let lD = valueOrElse(getInteger(jb), jc) | |
2517 | + | if ((lD > 0)) | |
2515 | 2518 | then throw("HP should be 0 to call Emergency Service") | |
2516 | 2519 | else { | |
2517 | - | let | |
2518 | - | let | |
2519 | - | let | |
2520 | + | let hL = bN(B) | |
2521 | + | let io = hK(hL) | |
2522 | + | let lE = if ((io[bp] == "")) | |
2520 | 2523 | then nil | |
2521 | - | else split_4C( | |
2522 | - | let | |
2523 | - | then parseIntValue( | |
2524 | + | else split_4C(io[bp], "_") | |
2525 | + | let lI = if ((size(lE) > 0)) | |
2526 | + | then parseIntValue(lE[0]) | |
2524 | 2527 | else 0 | |
2525 | - | let | |
2526 | - | then parseIntValue( | |
2528 | + | let lJ = if ((size(lE) > 1)) | |
2529 | + | then parseIntValue(lE[1]) | |
2527 | 2530 | else 0 | |
2528 | - | let | |
2529 | - | then parseIntValue( | |
2531 | + | let lK = if ((size(lE) > 2)) | |
2532 | + | then parseIntValue(lE[2]) | |
2530 | 2533 | else 0 | |
2531 | - | if (if (if ((lH > 0)) | |
2532 | - | then true | |
2533 | - | else (lI > 0)) | |
2534 | + | if (if (if ((lI > 0)) | |
2534 | 2535 | then true | |
2535 | 2536 | else (lJ > 0)) | |
2537 | + | then true | |
2538 | + | else (lK > 0)) | |
2536 | 2539 | then throw("You have to use own Medical Kit") | |
2537 | 2540 | else { | |
2538 | - | let | |
2539 | - | let | |
2540 | - | then split_4C(value( | |
2541 | + | let lL = getString(de, bR()) | |
2542 | + | let lM = if (isDefined(lL)) | |
2543 | + | then split_4C(value(lL), "_") | |
2541 | 2544 | else nil | |
2542 | - | let | |
2543 | - | then parseIntValue( | |
2545 | + | let lN = if ((size(lM) > 0)) | |
2546 | + | then parseIntValue(lM[0]) | |
2544 | 2547 | else 0 | |
2545 | - | if ((0 >= | |
2548 | + | if ((0 >= lN)) | |
2546 | 2549 | then throw("There are no Medical Kits L1 at Emergency Service storage") | |
2547 | 2550 | else { | |
2548 | - | let | |
2549 | - | let | |
2550 | - | let | |
2551 | - | let | |
2552 | - | let | |
2553 | - | if (( | |
2554 | - | then throw(("Payment attached should be " + toString( | |
2551 | + | let lH = (lD + parseIntValue(split(aX[0], "_")[aZ])) | |
2552 | + | let lO = makeString([toString((lN - 1)), removeByIndex(lM, 0)], "_") | |
2553 | + | let co = split(aX[0], "_") | |
2554 | + | let lP = cn(co) | |
2555 | + | let lQ = fraction((lP * aP), aO, (cG * bc)) | |
2556 | + | if ((kX.amount != lQ)) | |
2557 | + | then throw(("Payment attached should be " + toString(lQ))) | |
2555 | 2558 | else { | |
2556 | - | let | |
2557 | - | $Tuple2((( | |
2559 | + | let fj = dy(invoke(de, "updateEsStorage", [lO], [AttachedPayment(cA, lQ)])) | |
2560 | + | $Tuple2(((kW :+ IntegerEntry(jb, lH)) ++ kf(B, aa)._1), fj) | |
2558 | 2561 | } | |
2559 | 2562 | } | |
2560 | 2563 | } | |
2561 | 2564 | } | |
2562 | 2565 | } | |
2563 | 2566 | } | |
2564 | 2567 | } | |
2565 | 2568 | } | |
2566 | 2569 | ||
2567 | 2570 | ||
2568 | 2571 | ||
2569 | - | @Callable( | |
2570 | - | func updateBackpack (B, | |
2572 | + | @Callable(gK) | |
2573 | + | func updateBackpack (B,lR) = if ((gK.caller != de)) | |
2571 | 2574 | then throw("permission denied") | |
2572 | - | else $Tuple2([StringEntry( | |
2573 | - | ||
2574 | - | ||
2575 | - | ||
2576 | - | @Callable( | |
2575 | + | else $Tuple2([StringEntry(bN(B), lR)], lR) | |
2576 | + | ||
2577 | + | ||
2578 | + | ||
2579 | + | @Callable(gK) | |
2577 | 2580 | func commitForRandom () = { | |
2578 | - | let | |
2579 | - | let | |
2580 | - | let c = toString( | |
2581 | - | $Tuple2(([IntegerEntry( | |
2582 | - | } | |
2583 | - | ||
2584 | - | ||
2585 | - | ||
2586 | - | @Callable( | |
2587 | - | func revealRandom ( | |
2588 | - | let | |
2589 | - | let c = toString( | |
2590 | - | let | |
2591 | - | let | |
2592 | - | if (( | |
2593 | - | then throw(("Random number is not ready yet, wait until height = " + toString( | |
2581 | + | let kW = kT(gK) | |
2582 | + | let lS = (height + dr) | |
2583 | + | let c = toString(gK.caller) | |
2584 | + | $Tuple2(([IntegerEntry(ds(c), lS)] ++ kW), lS) | |
2585 | + | } | |
2586 | + | ||
2587 | + | ||
2588 | + | ||
2589 | + | @Callable(gK) | |
2590 | + | func revealRandom (dS) = { | |
2591 | + | let kW = kT(gK) | |
2592 | + | let c = toString(gK.caller) | |
2593 | + | let lT = ds(c) | |
2594 | + | let lS = valueOrErrorMessage(getInteger(lT), "You have to commitForRandom() first!") | |
2595 | + | if ((lS > height)) | |
2596 | + | then throw(("Random number is not ready yet, wait until height = " + toString(lS))) | |
2594 | 2597 | else { | |
2595 | - | let | |
2596 | - | let | |
2597 | - | let | |
2598 | - | $Tuple2(([DeleteEntry( | |
2599 | - | } | |
2600 | - | } | |
2601 | - | ||
2602 | - | ||
2603 | - | ||
2604 | - | @Callable( | |
2598 | + | let dU = value(value(blockInfoByHeight(lS)).vrf) | |
2599 | + | let dT = toBytes(valueOrElse(getString(dK(c)), "")) | |
2600 | + | let lU = dR(dS, dT, dU) | |
2601 | + | $Tuple2(([DeleteEntry(lT)] ++ kW), lU) | |
2602 | + | } | |
2603 | + | } | |
2604 | + | ||
2605 | + | ||
2606 | + | ||
2607 | + | @Callable(gK) | |
2605 | 2608 | func buySLand () = { | |
2606 | - | let | |
2607 | - | if ((size( | |
2609 | + | let kW = kT(gK) | |
2610 | + | if ((size(gK.payments) != 1)) | |
2608 | 2611 | then throw("Exactly one payment required") | |
2609 | 2612 | else { | |
2610 | - | let | |
2611 | - | if (( | |
2613 | + | let kX = value(gK.payments[0]) | |
2614 | + | if ((kX.assetId != cA)) | |
2612 | 2615 | then throw("Allowed USDT payment only!") | |
2613 | - | else if (( | |
2614 | - | then throw(("Payment attached should be " + toString( | |
2616 | + | else if ((kX.amount != ee)) | |
2617 | + | then throw(("Payment attached should be " + toString(ee))) | |
2615 | 2618 | else { | |
2616 | - | let | |
2617 | - | let | |
2618 | - | $Tuple2(((( | |
2619 | + | let fj = iI(gK.caller, gK.transactionId) | |
2620 | + | let lV = dB(invoke(di, "burnAcres", [eg], nil)) | |
2621 | + | $Tuple2((((fj._1 :+ ScriptTransfer(de, kX.amount, cA)) ++ kg(toString(gK.caller), ac)._1) ++ kW), $Tuple2(fj._2._1, lV)) | |
2619 | 2622 | } | |
2620 | 2623 | } | |
2621 | 2624 | } | |
2622 | 2625 | ||
2623 | 2626 | ||
2624 | 2627 | ||
2625 | - | @Callable( | |
2626 | - | func expedition ( | |
2627 | - | let | |
2628 | - | if ((size( | |
2628 | + | @Callable(gK) | |
2629 | + | func expedition (iQ,iR) = { | |
2630 | + | let kW = kT(gK) | |
2631 | + | if ((size(gK.payments) != 0)) | |
2629 | 2632 | then throw("No payments required") | |
2630 | 2633 | else { | |
2631 | - | let | |
2632 | - | let | |
2633 | - | let B = | |
2634 | - | let | |
2635 | - | let | |
2636 | - | let | |
2637 | - | let | |
2638 | - | let | |
2639 | - | let | |
2640 | - | let | |
2641 | - | let | |
2642 | - | let | |
2643 | - | let | |
2644 | - | let | |
2645 | - | let | |
2646 | - | let | |
2647 | - | then $Tuple3([IntegerEntry( | |
2648 | - | else $Tuple3(( | |
2634 | + | let bQ = toString(gK.caller) | |
2635 | + | let hp = iP(bQ, iQ, iR) | |
2636 | + | let B = hp._2 | |
2637 | + | let jb = A(B) | |
2638 | + | let hL = bN(B) | |
2639 | + | let io = hK(hL) | |
2640 | + | let jQ = split(io[bo], "_") | |
2641 | + | let jS = makeString(fd(true, jQ, ed), "_") | |
2642 | + | let gx = G(B) | |
2643 | + | let lo = valueOrElse(getString(gx), ",;,_,;,_,;,_,;,_,;,_,;,") | |
2644 | + | let lW = fk(lo, hp._5) | |
2645 | + | let lq = lW._1 | |
2646 | + | let lr = lW._2 | |
2647 | + | let lX = iI(gK.caller, gK.transactionId) | |
2648 | + | let iO = lX._2._1 | |
2649 | + | let fj = if ((0 >= hp._1)) | |
2650 | + | then $Tuple3([IntegerEntry(jb, 0), StringEntry(gx, lq)], "", 0) | |
2651 | + | else $Tuple3((lX._1 ++ (if (lr) | |
2649 | 2652 | then [StringEntry(M(B), "0_0_0_0_0")] | |
2650 | - | else ((((nil :+ StringEntry( | |
2651 | - | if ( | |
2653 | + | else ((((nil :+ StringEntry(bO(B), makeString([lX._2._2, "L", iO], "_"))) :+ IntegerEntry(jb, hp._1)) :+ StringEntry(gx, lq)) :+ StringEntry(hL, makeString([io[bm], io[bn], jS, io[bp]], ":"))))), iO, hp._3) | |
2654 | + | if (kq(B)) | |
2652 | 2655 | then throw("expedition_checkTournament") | |
2653 | 2656 | else { | |
2654 | - | let | |
2655 | - | $Tuple2((( | |
2657 | + | let lV = dB(invoke(di, "burnAcres", [eg], nil)) | |
2658 | + | $Tuple2(((fj._1 ++ kf(B, ac)._1) ++ kW), $Tuple3(fj._2, fj._3, lV)) | |
2656 | 2659 | } | |
2657 | 2660 | } | |
2658 | 2661 | } | |
2659 | 2662 | ||
2660 | 2663 | ||
2661 | 2664 | ||
2662 | - | @Callable( | |
2665 | + | @Callable(gK) | |
2663 | 2666 | func buySLandForAcres () = { | |
2664 | - | let | |
2665 | - | if ((size( | |
2667 | + | let kW = kT(gK) | |
2668 | + | if ((size(gK.payments) != 1)) | |
2666 | 2669 | then throw("exactly 1 payment must be attached") | |
2667 | 2670 | else { | |
2668 | - | let | |
2669 | - | let | |
2670 | - | if (if (!(isDefined( | |
2671 | + | let kX = gK.payments[0] | |
2672 | + | let fq = kX.amount | |
2673 | + | if (if (!(isDefined(kX.assetId))) | |
2671 | 2674 | then true | |
2672 | - | else (value( | |
2675 | + | else (value(kX.assetId) != dq)) | |
2673 | 2676 | then throw("ACRES payments only!") | |
2674 | - | else if (( | |
2675 | - | then throw(("Payment attached should be " + toString( | |
2677 | + | else if ((fq != eg)) | |
2678 | + | then throw(("Payment attached should be " + toString(eg))) | |
2676 | 2679 | else { | |
2677 | - | let | |
2678 | - | let | |
2679 | - | $Tuple2((( | |
2680 | + | let fj = iI(gK.caller, gK.transactionId) | |
2681 | + | let lV = dB(invoke(di, "burnAcres", [eg], [AttachedPayment(dq, fq)])) | |
2682 | + | $Tuple2(((fj._1 ++ kg(toString(gK.caller), ac)._1) ++ kW), $Tuple2(fj._2._1, lV)) | |
2680 | 2683 | } | |
2681 | 2684 | } | |
2682 | 2685 | } | |
2683 | 2686 | ||
2684 | 2687 | ||
2685 | 2688 | ||
2686 | - | @Callable( | |
2689 | + | @Callable(gK) | |
2687 | 2690 | func upgradeInfra (Q) = { | |
2688 | - | let | |
2689 | - | if ((size( | |
2691 | + | let kW = kT(gK) | |
2692 | + | if ((size(gK.payments) != 0)) | |
2690 | 2693 | then throw("No payments required") | |
2691 | 2694 | else { | |
2692 | - | let | |
2693 | - | let B = valueOrErrorMessage(getString( | |
2694 | - | $Tuple2((( | |
2695 | - | } | |
2696 | - | } | |
2697 | - | ||
2698 | - | ||
2699 | - | ||
2700 | - | @Callable( | |
2701 | - | func activateArtifact ( | |
2702 | - | let | |
2703 | - | if ((size( | |
2695 | + | let fj = jK(true, gK.caller, 0, Q) | |
2696 | + | let B = valueOrErrorMessage(getString(bM(toString(gK.caller))), "You don't have a duck staked") | |
2697 | + | $Tuple2(((fj._1 ++ kW) ++ kf(B, fraction(ad, fj._3, cG))._1), fj._2) | |
2698 | + | } | |
2699 | + | } | |
2700 | + | ||
2701 | + | ||
2702 | + | ||
2703 | + | @Callable(gK) | |
2704 | + | func activateArtifact (lY,lZ) = { | |
2705 | + | let kW = kT(gK) | |
2706 | + | if ((size(gK.payments) != 0)) | |
2704 | 2707 | then throw("No payments required") | |
2705 | 2708 | else { | |
2706 | - | let c = toString( | |
2707 | - | let | |
2708 | - | let | |
2709 | - | if (("PRESALE" == | |
2710 | - | then | |
2711 | - | else if (("ONBOARD" == | |
2712 | - | then | |
2709 | + | let c = toString(gK.caller) | |
2710 | + | let fj = { | |
2711 | + | let cz = lY | |
2712 | + | if (("PRESALE" == cz)) | |
2713 | + | then ko(c, lZ) | |
2714 | + | else if (("ONBOARD" == cz)) | |
2715 | + | then kh(c) | |
2713 | 2716 | else throw("Unknown artifact") | |
2714 | 2717 | } | |
2715 | - | ( | |
2716 | - | } | |
2717 | - | } | |
2718 | - | ||
2719 | - | ||
2720 | - | ||
2721 | - | @Callable( | |
2722 | - | func mergeLands ( | |
2723 | - | let | |
2724 | - | if ((size( | |
2718 | + | (fj ++ kW) | |
2719 | + | } | |
2720 | + | } | |
2721 | + | ||
2722 | + | ||
2723 | + | ||
2724 | + | @Callable(gK) | |
2725 | + | func mergeLands (ku) = { | |
2726 | + | let kW = kT(gK) | |
2727 | + | if ((size(gK.payments) != 0)) | |
2725 | 2728 | then throw("No payments required") | |
2726 | 2729 | else { | |
2727 | - | let | |
2728 | - | $Tuple2((( | |
2729 | - | } | |
2730 | - | } | |
2731 | - | ||
2732 | - | ||
2733 | - | ||
2734 | - | @Callable( | |
2735 | - | func cargoExchange ( | |
2736 | - | let | |
2737 | - | if ((size( | |
2730 | + | let fj = kS(toString(gK.caller), ku) | |
2731 | + | $Tuple2(((fj._1 ++ kW) ++ kg(toString(gK.caller), ae)._1), fj._2) | |
2732 | + | } | |
2733 | + | } | |
2734 | + | ||
2735 | + | ||
2736 | + | ||
2737 | + | @Callable(gK) | |
2738 | + | func cargoExchange (ma,Q) = { | |
2739 | + | let kW = kT(gK) | |
2740 | + | if ((size(gK.payments) != 0)) | |
2738 | 2741 | then throw("No payments required") | |
2739 | 2742 | else { | |
2740 | - | let | |
2741 | - | let c = toString( | |
2742 | - | let | |
2743 | - | let | |
2744 | - | if (!(isDefined(getInteger( | |
2745 | - | then throw(( | |
2743 | + | let in = split_4C(ma, ":") | |
2744 | + | let c = toString(gK.originCaller) | |
2745 | + | let js = value(assetInfo(fromBase58String(Q))) | |
2746 | + | let jt = bw(Q) | |
2747 | + | if (!(isDefined(getInteger(jt)))) | |
2748 | + | then throw((js.name + " is not staked")) | |
2746 | 2749 | else { | |
2747 | - | let | |
2748 | - | if (( | |
2749 | - | then throw(( | |
2750 | + | let jv = valueOrErrorMessage(getString(bt(Q)), (("NFT " + js.name) + " is orphaned")) | |
2751 | + | if ((jv != c)) | |
2752 | + | then throw((aF + " is not yours")) | |
2750 | 2753 | else { | |
2751 | - | let | |
2752 | - | let | |
2753 | - | let B = valueOrErrorMessage(getString( | |
2754 | - | let | |
2755 | - | let | |
2756 | - | if (( | |
2757 | - | then throw((("Duck location type is " + | |
2758 | - | else if (( | |
2754 | + | let hZ = (dG(split(js.description, "_")[dk]) / cH) | |
2755 | + | let ia = valueOrElse(getInteger(bD(Q)), 0) | |
2756 | + | let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked") | |
2757 | + | let jq = valueOrElse(getString(bO(B)), aN) | |
2758 | + | let cj = split(value(jq), "_") | |
2759 | + | if ((cj[br] != "L")) | |
2760 | + | then throw((("Duck location type is " + cj[br]) + ", but should be L")) | |
2761 | + | else if ((cj[bs] != Q)) | |
2759 | 2762 | then throw(("Duck should be on the land " + Q)) | |
2760 | 2763 | else { | |
2761 | - | let | |
2762 | - | let | |
2763 | - | let | |
2764 | - | let | |
2765 | - | let | |
2766 | - | let | |
2767 | - | let | |
2768 | - | let | |
2769 | - | ([StringEntry( | |
2764 | + | let hY = bC(Q) | |
2765 | + | let hP = hX(hY, hZ, ia) | |
2766 | + | let hL = bN(B) | |
2767 | + | let io = hK(hL) | |
2768 | + | let fj = im(in, hP, io) | |
2769 | + | let ig = split(hP[bh], "_") | |
2770 | + | let jH = (parseIntValue(ig[bj]) + fj._7) | |
2771 | + | let jI = (parseIntValue(ig[bk]) - fj._7) | |
2772 | + | ([StringEntry(hL, makeString_2C([io[bm], fj._4, fj._5, fj._6], ":")), StringEntry(hY, makeString_2C([hP[bd], fj._1, fj._2, fj._3, makeString([ig[bi], toString(jH), toString(jI), ig[bl]], "_")], ":"))] ++ kW) | |
2770 | 2773 | } | |
2771 | 2774 | } | |
2772 | 2775 | } | |
2773 | 2776 | } | |
2774 | 2777 | } | |
2775 | 2778 | ||
2776 | 2779 | ||
2777 | 2780 | ||
2778 | - | @Callable( | |
2779 | - | func saveWarehouse ( | |
2781 | + | @Callable(gK) | |
2782 | + | func saveWarehouse (ic,Q) = if ((gK.caller != de)) | |
2780 | 2783 | then throw("Access denied") | |
2781 | 2784 | else { | |
2782 | - | let | |
2783 | - | let | |
2784 | - | if ((size( | |
2785 | + | let hY = bC(Q) | |
2786 | + | let id = split_4C(ic, ":") | |
2787 | + | if ((size(id) != 5)) | |
2785 | 2788 | then throw("warehouse string should contain 4 ':' separators") | |
2786 | 2789 | else { | |
2787 | - | let | |
2788 | - | let | |
2789 | - | let | |
2790 | - | let | |
2791 | - | if ((0 > | |
2790 | + | let mb = split(id[bh], "_")[bi] | |
2791 | + | let jH = hO(id) | |
2792 | + | let mc = hM(id[bd]) | |
2793 | + | let jI = ((mc - parseIntValue(mb)) - jH) | |
2794 | + | if ((0 > jI)) | |
2792 | 2795 | then throw("Operation leads to negative free warehouse space") | |
2793 | 2796 | else { | |
2794 | - | let | |
2795 | - | $Tuple2([StringEntry( | |
2797 | + | let md = makeString_2C([id[bd], id[be], id[bf], id[bg], makeString([mb, toString(jH), toString(jI), toString(mc)], "_")], ":") | |
2798 | + | $Tuple2([StringEntry(hY, md)], md) | |
2796 | 2799 | } | |
2797 | 2800 | } | |
2798 | 2801 | } | |
2799 | 2802 | ||
2800 | 2803 | ||
2801 | 2804 | ||
2802 | - | @Callable( | |
2803 | - | func setCustomName ( | |
2804 | - | let | |
2805 | - | if ((size( | |
2805 | + | @Callable(gK) | |
2806 | + | func setCustomName (bu,kE,by) = { | |
2807 | + | let kW = kT(gK) | |
2808 | + | if ((size(gK.payments) != 1)) | |
2806 | 2809 | then throw("Exactly one payment required") | |
2807 | 2810 | else { | |
2808 | - | let | |
2809 | - | if (( | |
2811 | + | let kX = value(gK.payments[0]) | |
2812 | + | if ((kX.assetId != cA)) | |
2810 | 2813 | then throw("Allowed USDT payment only!") | |
2811 | - | else if (( | |
2812 | - | then throw(("Payment should be " + toString( | |
2813 | - | else if (contains( | |
2814 | - | then throw(("Name should not contain '__': " + | |
2815 | - | else if ((size( | |
2816 | - | then throw(("Name too long, maxLength=" + toString( | |
2814 | + | else if ((kX.amount != ea)) | |
2815 | + | then throw(("Payment should be " + toString(ea))) | |
2816 | + | else if (contains(kE, "__")) | |
2817 | + | then throw(("Name should not contain '__': " + kE)) | |
2818 | + | else if ((size(kE) > eb)) | |
2819 | + | then throw(("Name too long, maxLength=" + toString(eb))) | |
2817 | 2820 | else { | |
2818 | - | let c = toString( | |
2819 | - | let | |
2820 | - | let | |
2821 | - | if (("ACCOUNT" == | |
2821 | + | let c = toString(gK.originCaller) | |
2822 | + | let me = { | |
2823 | + | let cz = by | |
2824 | + | if (("ACCOUNT" == cz)) | |
2822 | 2825 | then { | |
2823 | - | let | |
2824 | - | let | |
2825 | - | if (isDefined( | |
2826 | - | then throw(("Name already registered: " + | |
2826 | + | let mf = ew(kE) | |
2827 | + | let mg = getString(mf) | |
2828 | + | if (isDefined(mg)) | |
2829 | + | then throw(("Name already registered: " + kE)) | |
2827 | 2830 | else { | |
2828 | - | let | |
2829 | - | let | |
2830 | - | let | |
2831 | - | then [DeleteEntry( | |
2831 | + | let mh = bG(c) | |
2832 | + | let mi = getString(mh) | |
2833 | + | let mj = if (isDefined(mi)) | |
2834 | + | then [DeleteEntry(ew(value(mi)))] | |
2832 | 2835 | else nil | |
2833 | - | ((( | |
2836 | + | (((mj :+ StringEntry(mh, kE)) :+ StringEntry(mf, c)) ++ kg(c, ab)._1) | |
2834 | 2837 | } | |
2835 | 2838 | } | |
2836 | - | else if (("LAND" == | |
2839 | + | else if (("LAND" == cz)) | |
2837 | 2840 | then { | |
2838 | - | let | |
2839 | - | let | |
2840 | - | if (!(isDefined(getInteger( | |
2841 | - | then throw(( | |
2841 | + | let js = value(assetInfo(fromBase58String(bu))) | |
2842 | + | let jt = bw(bu) | |
2843 | + | if (!(isDefined(getInteger(jt)))) | |
2844 | + | then throw((js.name + " is not staked")) | |
2842 | 2845 | else { | |
2843 | - | let | |
2844 | - | if (( | |
2845 | - | then throw(( | |
2846 | + | let jv = valueOrErrorMessage(getString(bt(bu)), (("NFT " + js.name) + " is orphaned")) | |
2847 | + | if ((jv != c)) | |
2848 | + | then throw((aF + " is not yours")) | |
2846 | 2849 | else { | |
2847 | - | let | |
2848 | - | let | |
2849 | - | if (isDefined( | |
2850 | - | then throw(("Name already registered: " + | |
2850 | + | let mf = ep(kE) | |
2851 | + | let mg = getString(mf) | |
2852 | + | if (isDefined(mg)) | |
2853 | + | then throw(("Name already registered: " + kE)) | |
2851 | 2854 | else { | |
2852 | - | let | |
2853 | - | let | |
2854 | - | let | |
2855 | - | then [DeleteEntry( | |
2855 | + | let mk = bv(bu) | |
2856 | + | let mi = getString(mk) | |
2857 | + | let mj = if (isDefined(mi)) | |
2858 | + | then [DeleteEntry(ep(value(mi)))] | |
2856 | 2859 | else nil | |
2857 | - | ((( | |
2860 | + | (((mj :+ StringEntry(mk, kE)) :+ StringEntry(mf, bu)) ++ kg(c, ab)._1) | |
2858 | 2861 | } | |
2859 | 2862 | } | |
2860 | 2863 | } | |
2861 | 2864 | } | |
2862 | - | else if (("DUCK" == | |
2865 | + | else if (("DUCK" == cz)) | |
2863 | 2866 | then { | |
2864 | - | let | |
2865 | - | let | |
2866 | - | if (if (!(isDefined(getInteger( | |
2867 | + | let js = value(assetInfo(fromBase58String(bu))) | |
2868 | + | let jt = bw(bu) | |
2869 | + | if (if (!(isDefined(getInteger(jt)))) | |
2867 | 2870 | then true | |
2868 | - | else !(isDefined(getString( | |
2869 | - | then throw(( | |
2871 | + | else !(isDefined(getString(bM(c))))) | |
2872 | + | then throw((js.name + " is not staked")) | |
2870 | 2873 | else { | |
2871 | - | let | |
2872 | - | if (( | |
2873 | - | then throw(( | |
2874 | + | let jv = valueOrErrorMessage(getString(bL(bu)), (("NFT " + js.name) + " is orphaned")) | |
2875 | + | if ((jv != c)) | |
2876 | + | then throw((aG + " is not yours")) | |
2874 | 2877 | else { | |
2875 | - | let | |
2876 | - | let | |
2877 | - | if (isDefined( | |
2878 | - | then throw(("Name already registered: " + | |
2878 | + | let mf = ev(kE) | |
2879 | + | let mg = getString(mf) | |
2880 | + | if (isDefined(mg)) | |
2881 | + | then throw(("Name already registered: " + kE)) | |
2879 | 2882 | else { | |
2880 | - | let | |
2881 | - | let | |
2882 | - | let | |
2883 | - | then [DeleteEntry( | |
2883 | + | let mk = bF(bu) | |
2884 | + | let mi = getString(mk) | |
2885 | + | let mj = if (isDefined(mi)) | |
2886 | + | then [DeleteEntry(ev(value(mi)))] | |
2884 | 2887 | else nil | |
2885 | - | ((( | |
2888 | + | (((mj :+ StringEntry(mk, kE)) :+ StringEntry(mf, bu)) ++ kf(bu, ab)._1) | |
2886 | 2889 | } | |
2887 | 2890 | } | |
2888 | 2891 | } | |
2889 | 2892 | } | |
2890 | 2893 | else throw("Unknown entity type") | |
2891 | 2894 | } | |
2892 | - | $Tuple2((( | |
2895 | + | $Tuple2(((me :+ ScriptTransfer(de, kX.amount, cA)) ++ kW), 0) | |
2893 | 2896 | } | |
2894 | 2897 | } | |
2895 | 2898 | } | |
2896 | 2899 | ||
2897 | 2900 | ||
2898 | 2901 | ||
2899 | - | @Callable( | |
2900 | - | func setReferrals ( | |
2902 | + | @Callable(gK) | |
2903 | + | func setReferrals (ml,mm) = if ((gK.callerPublicKey != cy)) | |
2901 | 2904 | then throw("Permission denied") | |
2902 | 2905 | else { | |
2903 | - | let | |
2904 | - | if ((size( | |
2906 | + | let kW = kT(gK) | |
2907 | + | if ((size(gK.payments) != 0)) | |
2905 | 2908 | then throw("No payments required") | |
2906 | - | else if (!(isDefined(addressFromString( | |
2907 | - | then throw(("Invalid address: " + | |
2909 | + | else if (!(isDefined(addressFromString(ml)))) | |
2910 | + | then throw(("Invalid address: " + ml)) | |
2908 | 2911 | else { | |
2909 | - | let | |
2910 | - | if (!(isDefined( | |
2911 | - | then throw(("Invalid address: " + | |
2912 | + | let mn = addressFromString(mm) | |
2913 | + | if (!(isDefined(mn))) | |
2914 | + | then throw(("Invalid address: " + mm)) | |
2912 | 2915 | else { | |
2913 | - | let | |
2914 | - | if (!(isDefined( | |
2916 | + | let mo = getString(dK(ml)) | |
2917 | + | if (!(isDefined(mo))) | |
2915 | 2918 | then throw("oldPlayer didn't do any tx in game") | |
2916 | - | else if ((0 >= wavesBalance(value( | |
2919 | + | else if ((0 >= wavesBalance(value(mn)).available)) | |
2917 | 2920 | then throw("newPlayer has no WAVES") | |
2918 | 2921 | else { | |
2919 | - | let | |
2920 | - | let | |
2921 | - | let | |
2922 | - | then split_4C(value( | |
2922 | + | let mp = ex() | |
2923 | + | let mq = getString(mp) | |
2924 | + | let mr = if (isDefined(mq)) | |
2925 | + | then split_4C(value(mq), "_") | |
2923 | 2926 | else nil | |
2924 | - | if (containsElement( | |
2925 | - | then throw(( | |
2927 | + | if (containsElement(mr, mm)) | |
2928 | + | then throw((mm + " is not newbie (already has referrals)")) | |
2926 | 2929 | else { | |
2927 | - | let | |
2928 | - | let | |
2929 | - | if (if (isDefined( | |
2930 | - | then isDefined(addressFromString(value( | |
2930 | + | let ki = bH(mm) | |
2931 | + | let kj = getString(ki) | |
2932 | + | if (if (isDefined(kj)) | |
2933 | + | then isDefined(addressFromString(value(kj))) | |
2931 | 2934 | else false) | |
2932 | - | then throw((( | |
2935 | + | then throw(((mm + " already has refBy: ") + value(kj))) | |
2933 | 2936 | else { | |
2934 | - | let | |
2935 | - | let | |
2936 | - | let | |
2937 | - | then split_4C(value( | |
2937 | + | let ms = bK(ml) | |
2938 | + | let mt = getString(ms) | |
2939 | + | let mu = if (isDefined(mt)) | |
2940 | + | then split_4C(value(mt), "_") | |
2938 | 2941 | else nil | |
2939 | - | if (containsElement( | |
2940 | - | then throw(((( | |
2942 | + | if (containsElement(mu, mm)) | |
2943 | + | then throw((((ml + " already contains ") + mm) + " within referrals")) | |
2941 | 2944 | else { | |
2942 | - | let | |
2943 | - | let | |
2944 | - | then value( | |
2945 | - | else makeString_2C(( | |
2946 | - | $Tuple2(([StringEntry( | |
2945 | + | let mv = makeString_2C((mu :+ mm), "_") | |
2946 | + | let mw = if (containsElement(mr, ml)) | |
2947 | + | then value(mq) | |
2948 | + | else makeString_2C((mr :+ ml), "_") | |
2949 | + | $Tuple2(([StringEntry(ki, ml), StringEntry(ms, mv), StringEntry(mp, mw)] ++ kW), 0) | |
2947 | 2950 | } | |
2948 | 2951 | } | |
2949 | 2952 | } | |
2950 | 2953 | } | |
2951 | 2954 | } | |
2952 | 2955 | } | |
2953 | 2956 | } | |
2954 | 2957 | ||
2955 | 2958 | ||
2956 | 2959 | ||
2957 | - | @Callable( | |
2958 | - | func distributePoints ( | |
2959 | - | let | |
2960 | - | if ((size( | |
2960 | + | @Callable(gK) | |
2961 | + | func distributePoints (mx,my,mz,mA,mB) = { | |
2962 | + | let kW = kT(gK) | |
2963 | + | if ((size(gK.payments) != 0)) | |
2961 | 2964 | then throw("No payments required") | |
2962 | 2965 | else { | |
2963 | - | let c = toString( | |
2964 | - | let | |
2965 | - | let | |
2966 | - | let | |
2966 | + | let c = toString(gK.originCaller) | |
2967 | + | let mC = dD(invoke(dg, "checkWlgXpREADONLY", [c], nil)) | |
2968 | + | let mD = dB(mC[1]) | |
2969 | + | let mE = if ((0 >= mD)) | |
2967 | 2970 | then $Tuple2(0, nil) | |
2968 | 2971 | else { | |
2969 | - | let | |
2970 | - | if (( | |
2971 | - | then $Tuple2( | |
2972 | + | let kd = dB(invoke(dg, "takeWlgXp", [c], nil)) | |
2973 | + | if ((kd == kd)) | |
2974 | + | then $Tuple2(mD, [IntegerEntry(I(c), dB(mC[0])), IntegerEntry(H(c), dB(mC[2]))]) | |
2972 | 2975 | else throw("Strict value is not equal to itself.") | |
2973 | 2976 | } | |
2974 | - | let | |
2975 | - | let | |
2976 | - | let B = valueOrErrorMessage(getString( | |
2977 | - | let | |
2978 | - | let | |
2979 | - | let | |
2980 | - | let | |
2981 | - | let | |
2982 | - | let | |
2983 | - | if (( | |
2984 | - | then throw((("There are only " + toString( | |
2977 | + | let mF = mE._1 | |
2978 | + | let mG = mE._2 | |
2979 | + | let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked") | |
2980 | + | let mH = J(c) | |
2981 | + | let mI = (valueOrElse(getInteger(mH), 0) + mF) | |
2982 | + | let mJ = F(B) | |
2983 | + | let mK = valueOrElse(getInteger(mJ), 0) | |
2984 | + | let mL = (mI + mK) | |
2985 | + | let mM = ((((mx + my) + mz) + mA) + mB) | |
2986 | + | if ((mM > mL)) | |
2987 | + | then throw((("There are only " + toString(mL)) + " free points to distribute")) | |
2985 | 2988 | else { | |
2986 | - | let | |
2987 | - | let | |
2988 | - | let | |
2989 | - | $Tuple2((([IntegerEntry( | |
2989 | + | let mN = C(B) | |
2990 | + | let at = split(valueOrElse(getString(mN), "0_0_0_0_0"), "_") | |
2991 | + | let mO = (mI - mM) | |
2992 | + | $Tuple2((([IntegerEntry(mH, if ((0 > mO)) | |
2990 | 2993 | then 0 | |
2991 | - | else | |
2992 | - | then ( | |
2993 | - | else | |
2994 | + | else mO), IntegerEntry(mJ, if ((0 > mO)) | |
2995 | + | then (mK + mO) | |
2996 | + | else mK), StringEntry(mN, makeString([toString((parseIntValue(at[l]) + mx)), toString((parseIntValue(at[m]) + my)), toString((parseIntValue(at[n]) + mz)), toString((parseIntValue(at[o]) + mA)), toString((parseIntValue(at[p]) + mB))], "_"))] ++ kW) ++ mG), 0) | |
2994 | 2997 | } | |
2995 | 2998 | } | |
2996 | 2999 | } | |
2997 | 3000 | ||
2998 | 3001 | ||
2999 | 3002 | ||
3000 | - | @Callable( | |
3001 | - | func splitByGlobalWeightsREADONLY ( | |
3002 | - | ||
3003 | - | ||
3004 | - | ||
3005 | - | @Callable( | |
3006 | - | func splitByGlobalAndLocalWeightsREADONLY ( | |
3007 | - | let | |
3008 | - | $Tuple2(nil, $Tuple2( | |
3009 | - | } | |
3010 | - | ||
3011 | - | ||
3012 | - | ||
3013 | - | @Callable( | |
3014 | - | func getBackpackREADONLY (B) = $Tuple2(nil, makeString( | |
3015 | - | ||
3016 | - | ||
3017 | - | ||
3018 | - | @Callable( | |
3003 | + | @Callable(gK) | |
3004 | + | func splitByGlobalWeightsREADONLY (eI) = $Tuple2(nil, fa(eI)) | |
3005 | + | ||
3006 | + | ||
3007 | + | ||
3008 | + | @Callable(gK) | |
3009 | + | func splitByGlobalAndLocalWeightsREADONLY (mP,mQ,gN) = { | |
3010 | + | let gG = gM(gN) | |
3011 | + | $Tuple2(nil, $Tuple2(fa(mP), eL(mQ, gG))) | |
3012 | + | } | |
3013 | + | ||
3014 | + | ||
3015 | + | ||
3016 | + | @Callable(gK) | |
3017 | + | func getBackpackREADONLY (B) = $Tuple2(nil, makeString(hK(bN(B)), ":")) | |
3018 | + | ||
3019 | + | ||
3020 | + | ||
3021 | + | @Callable(gK) | |
3019 | 3022 | func getWarehouseREADONLY (Q) = { | |
3020 | - | let | |
3021 | - | let | |
3022 | - | let | |
3023 | - | $Tuple2(nil, makeString_2C( | |
3024 | - | } | |
3025 | - | ||
3026 | - | ||
3027 | - | ||
3028 | - | @Callable( | |
3029 | - | func saveLastTx () = if (!(containsElement([ | |
3023 | + | let js = value(assetInfo(fromBase58String(Q))) | |
3024 | + | let hZ = (dG(split(js.description, "_")[dk]) / cH) | |
3025 | + | let ia = valueOrElse(getInteger(bD(Q)), 0) | |
3026 | + | $Tuple2(nil, makeString_2C(hX(bC(Q), hZ, ia), ":")) | |
3027 | + | } | |
3028 | + | ||
3029 | + | ||
3030 | + | ||
3031 | + | @Callable(gK) | |
3032 | + | func saveLastTx () = if (!(containsElement([dg, de, dh, di], gK.caller))) | |
3030 | 3033 | then throw("Access denied") | |
3031 | - | else $Tuple2( | |
3032 | - | ||
3033 | - | ||
3034 | - | ||
3035 | - | @Callable( | |
3036 | - | func updateDuckStats (B, | |
3034 | + | else $Tuple2(kT(gK), 42) | |
3035 | + | ||
3036 | + | ||
3037 | + | ||
3038 | + | @Callable(gK) | |
3039 | + | func updateDuckStats (B,kd) = if ((gK.caller != de)) | |
3037 | 3040 | then throw("Access denied") | |
3038 | - | else | |
3039 | - | ||
3040 | - | ||
3041 | - | ||
3042 | - | @Callable( | |
3043 | - | func updateAccStats (c, | |
3041 | + | else kf(B, kd) | |
3042 | + | ||
3043 | + | ||
3044 | + | ||
3045 | + | @Callable(gK) | |
3046 | + | func updateAccStats (c,kd) = if (!(containsElement([dg, de, di], gK.caller))) | |
3044 | 3047 | then throw("Access denied") | |
3045 | - | else | |
3046 | - | ||
3047 | - | ||
3048 | - | ||
3049 | - | @Callable( | |
3050 | - | func equipDuck ( | |
3051 | - | let | |
3052 | - | if ((size( | |
3048 | + | else kg(c, kd) | |
3049 | + | ||
3050 | + | ||
3051 | + | ||
3052 | + | @Callable(gK) | |
3053 | + | func equipDuck (mR) = { | |
3054 | + | let kW = kT(gK) | |
3055 | + | if ((size(gK.payments) != 0)) | |
3053 | 3056 | then throw("No payments required") | |
3054 | 3057 | else { | |
3055 | - | let c = toString( | |
3056 | - | let B = valueOrErrorMessage(getString( | |
3057 | - | if ( | |
3058 | + | let c = toString(gK.originCaller) | |
3059 | + | let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked") | |
3060 | + | if (kq(B)) | |
3058 | 3061 | then throw("equipDuck_checkTournament") | |
3059 | 3062 | else { | |
3060 | - | let | |
3061 | - | let | |
3062 | - | let | |
3063 | - | let | |
3064 | - | let | |
3065 | - | if ((size( | |
3063 | + | let gx = G(B) | |
3064 | + | let mS = split(valueOrElse(getString(gx), ",;,_,;,_,;,_,;,_,;,_,;,"), "_") | |
3065 | + | let hL = bN(B) | |
3066 | + | let io = hK(hL) | |
3067 | + | let lq = split(mR, "_") | |
3068 | + | if ((size(lq) != r)) | |
3066 | 3069 | then throw("Wrong equipment string") | |
3067 | 3070 | else { | |
3068 | - | let | |
3069 | - | let | |
3070 | - | let | |
3071 | + | let gz = gm(mS, fx(io[bp]), true, nil) | |
3072 | + | let gA = split(lq[q], ";")[1] | |
3073 | + | let ar = if ((gA == "")) | |
3071 | 3074 | then 0 | |
3072 | 3075 | else { | |
3073 | - | let | |
3074 | - | if (( | |
3076 | + | let gB = split(gA, ",")[0] | |
3077 | + | if ((gB == "")) | |
3075 | 3078 | then 0 | |
3076 | 3079 | else { | |
3077 | - | let | |
3078 | - | let | |
3079 | - | let | |
3080 | - | if (if (if (if (if (( | |
3080 | + | let fM = split(gB, ":") | |
3081 | + | let dc = fM[0] | |
3082 | + | let gC = fM[1] | |
3083 | + | if (if (if (if (if ((dc == "06")) | |
3081 | 3084 | then true | |
3082 | - | else ( | |
3085 | + | else (dc == "07")) | |
3083 | 3086 | then true | |
3084 | - | else ( | |
3085 | - | then ( | |
3087 | + | else (dc == "08")) | |
3088 | + | then (gC != "") | |
3086 | 3089 | else false) | |
3087 | - | then (parseIntValue( | |
3090 | + | then (parseIntValue(gC) > 0) | |
3088 | 3091 | else false) | |
3089 | - | then parseIntValue(split( | |
3092 | + | then parseIntValue(split(aX[parseIntValue(dc)], "_")[aZ]) | |
3090 | 3093 | else 0 | |
3091 | 3094 | } | |
3092 | 3095 | } | |
3093 | - | let | |
3094 | - | let | |
3095 | - | let | |
3096 | - | $Tuple2(([StringEntry( | |
3096 | + | let gh = ap(this, B, ar, true) | |
3097 | + | let gD = gm(lq, gz, false, gh) | |
3098 | + | let mT = fC(gD) | |
3099 | + | $Tuple2(([StringEntry(gx, mR), StringEntry(hL, makeString_2C([io[bm], io[bn], io[bo], mT], ":")), StringEntry(M(B), makeString([toString(gh[7]), toString(gh[8]), toString(gh[9]), toString(gh[10]), toString(gh[11])], "_"))] ++ kW), 0) | |
3097 | 3100 | } | |
3098 | 3101 | } | |
3099 | 3102 | } | |
3100 | 3103 | } | |
3101 | 3104 | ||
3102 | 3105 | ||
3103 | 3106 | ||
3104 | - | @Callable( | |
3105 | - | func fortificateLand (Q, | |
3106 | - | let | |
3107 | - | if ((size( | |
3107 | + | @Callable(gK) | |
3108 | + | func fortificateLand (Q,mU) = { | |
3109 | + | let kW = kT(gK) | |
3110 | + | if ((size(gK.payments) != 0)) | |
3108 | 3111 | then throw("No payments required") | |
3109 | 3112 | else { | |
3110 | - | let c = toString( | |
3111 | - | let B = valueOrElse(getString( | |
3112 | - | let | |
3113 | - | let | |
3114 | - | let | |
3115 | - | let | |
3116 | - | let | |
3117 | - | let | |
3118 | - | let | |
3119 | - | let | |
3120 | - | let | |
3121 | - | let | |
3122 | - | let | |
3123 | - | let | |
3124 | - | let | |
3125 | - | let | |
3126 | - | let | |
3127 | - | let | |
3128 | - | let | |
3129 | - | let | |
3130 | - | let | |
3131 | - | let | |
3132 | - | let | |
3133 | - | let | |
3134 | - | $Tuple2(([StringEntry( | |
3135 | - | } | |
3136 | - | } | |
3137 | - | ||
3138 | - | ||
3139 | - | ||
3140 | - | @Callable( | |
3141 | - | func initDuckTourAttempt (B) = if (( | |
3113 | + | let c = toString(gK.originCaller) | |
3114 | + | let B = valueOrElse(getString(bM(c)), "") | |
3115 | + | let fH = ap(this, B, 0, false) | |
3116 | + | let mV = bE(Q) | |
3117 | + | let mW = split(valueOrElse(getString(mV), ":0_15:0_18:0"), "_") | |
3118 | + | let js = value(assetInfo(fromBase58String(Q))) | |
3119 | + | let hZ = (dG(split(js.description, "_")[dk]) / cH) | |
3120 | + | let ia = valueOrElse(getInteger(bD(Q)), 0) | |
3121 | + | let hY = bC(Q) | |
3122 | + | let id = hX(hY, hZ, ia) | |
3123 | + | let mX = split(id[bh], "_") | |
3124 | + | let mY = parseIntValue(mX[bj]) | |
3125 | + | let mZ = parseIntValue(mX[bk]) | |
3126 | + | let na = split(mU, "_") | |
3127 | + | let nb = gt(mW, fx(id[bg]), mY, mZ, true, nil) | |
3128 | + | let gz = nb._1 | |
3129 | + | let nc = nb._2 | |
3130 | + | let nd = nb._3 | |
3131 | + | let ne = gt(na, gz, nc, nd, false, fH) | |
3132 | + | let gD = ne._1 | |
3133 | + | let nf = ne._2 | |
3134 | + | let ng = ne._3 | |
3135 | + | let mT = fC(gD) | |
3136 | + | let jY = makeString([mX[bi], toString(nf), toString(ng), mX[bl]], "_") | |
3137 | + | $Tuple2(([StringEntry(mV, mU), StringEntry(hY, makeString_2C([id[bd], id[be], id[bf], mT, jY], ":"))] ++ kW), 0) | |
3138 | + | } | |
3139 | + | } | |
3140 | + | ||
3141 | + | ||
3142 | + | ||
3143 | + | @Callable(gK) | |
3144 | + | func initDuckTourAttempt (B) = if ((gK.caller != dh)) | |
3142 | 3145 | then throw("Access denied") | |
3143 | 3146 | else { | |
3144 | - | let | |
3145 | - | let | |
3146 | - | let | |
3147 | - | let | |
3148 | - | let | |
3149 | - | let | |
3150 | - | let | |
3151 | - | $Tuple2([IntegerEntry(K(B), | |
3147 | + | let jb = A(B) | |
3148 | + | let jc = aj(valueOrElse(getInteger(E(B)), 0)) | |
3149 | + | let lk = valueOrElse(getInteger(jb), jc) | |
3150 | + | let nh = bO(B) | |
3151 | + | let jq = valueOrElse(getString(nh), aN) | |
3152 | + | let ci = valueOrElse(getInteger(dh, bT), 0) | |
3153 | + | let ni = (toString(ci) + "_T_0") | |
3154 | + | $Tuple2([IntegerEntry(K(B), lk), IntegerEntry(jb, jc), StringEntry(L(B), jq), StringEntry(nh, ni)], ni) | |
3152 | 3155 | } | |
3153 | 3156 | ||
3154 | 3157 | ||
3155 | 3158 | ||
3156 | - | @Callable( | |
3159 | + | @Callable(gK) | |
3157 | 3160 | func breakAttempt () = { | |
3158 | - | let | |
3159 | - | let B = valueOrErrorMessage(getString( | |
3160 | - | let | |
3161 | - | let | |
3162 | - | if ((split( | |
3161 | + | let kW = kT(gK) | |
3162 | + | let B = valueOrErrorMessage(getString(bM(toString(gK.caller))), "You don't have a duck staked") | |
3163 | + | let nh = bO(B) | |
3164 | + | let jq = valueOrElse(getString(nh), aN) | |
3165 | + | if ((split(jq, "_")[br] != "T")) | |
3163 | 3166 | then throw("Your duck is not in the tournament") | |
3164 | 3167 | else { | |
3165 | - | let | |
3166 | - | let | |
3167 | - | $Tuple2((( | |
3168 | - | } | |
3169 | - | } | |
3170 | - | ||
3171 | - | ||
3172 | - | ||
3173 | - | @Callable( | |
3174 | - | func breakAttemptCallback () = if (( | |
3168 | + | let nj = getIntegerValue(K(B)) | |
3169 | + | let nk = getStringValue(L(B)) | |
3170 | + | $Tuple2(((kW :+ IntegerEntry(A(B), nj)) :+ StringEntry(nh, nk)), jq) | |
3171 | + | } | |
3172 | + | } | |
3173 | + | ||
3174 | + | ||
3175 | + | ||
3176 | + | @Callable(gK) | |
3177 | + | func breakAttemptCallback () = if ((gK.caller != dh)) | |
3175 | 3178 | then throw("Access denied") | |
3176 | 3179 | else { | |
3177 | - | let B = valueOrErrorMessage(getString( | |
3178 | - | $Tuple2([IntegerEntry(A(B), getIntegerValue(K(B))), StringEntry( | |
3180 | + | let B = valueOrErrorMessage(getString(bM(toString(gK.originCaller))), "You don't have a duck staked") | |
3181 | + | $Tuple2([IntegerEntry(A(B), getIntegerValue(K(B))), StringEntry(bO(B), getStringValue(L(B)))], "breakAttemptCallback") | |
3179 | 3182 | } | |
3180 | 3183 | ||
3181 | 3184 | ||
3182 | 3185 | ||
3183 | - | @Callable( | |
3184 | - | func exitTournamentInternal (B) = if (( | |
3186 | + | @Callable(gK) | |
3187 | + | func exitTournamentInternal (B) = if ((gK.caller != this)) | |
3185 | 3188 | then throw("Access denied") | |
3186 | 3189 | else { | |
3187 | - | let | |
3188 | - | let | |
3189 | - | $Tuple2([IntegerEntry(A(B), | |
3190 | + | let nj = getIntegerValue(K(B)) | |
3191 | + | let nk = getStringValue(L(B)) | |
3192 | + | $Tuple2([IntegerEntry(A(B), nj), StringEntry(bO(B), nk)], false) | |
3190 | 3193 | } | |
3191 | 3194 | ||
3192 | 3195 | ||
3193 | 3196 | ||
3194 | - | @Callable( | |
3195 | - | func processDelivery (B) = if (( | |
3197 | + | @Callable(gK) | |
3198 | + | func processDelivery (B) = if ((gK.caller != this)) | |
3196 | 3199 | then throw("Access denied") | |
3197 | 3200 | else { | |
3198 | - | let c = toString( | |
3199 | - | let | |
3200 | - | if (( | |
3201 | - | then throw(("Delivery is not available, fund=" + | |
3201 | + | let c = toString(gK.originCaller) | |
3202 | + | let nl = valueOrElse(getInteger(de, bS), 0) | |
3203 | + | if ((aQ > nl)) | |
3204 | + | then throw(("Delivery is not available, fund=" + dL(nl, 6))) | |
3202 | 3205 | else { | |
3203 | - | let | |
3204 | - | let | |
3205 | - | let | |
3206 | - | let | |
3207 | - | let | |
3208 | - | let | |
3209 | - | let | |
3210 | - | if (if (( | |
3211 | - | then ( | |
3206 | + | let aA = lastBlock.timestamp | |
3207 | + | let nm = V(c) | |
3208 | + | let fR = valueOrElse(getInteger(nm), 0) | |
3209 | + | let nn = valueOrElse(getInteger(W(c)), 0) | |
3210 | + | let no = (aA / a) | |
3211 | + | let np = valueOrElse(getInteger(di, d(c)), 0) | |
3212 | + | let nq = (aR + (np / aS)) | |
3213 | + | if (if ((fR >= nq)) | |
3214 | + | then (nn == no) | |
3212 | 3215 | else false) | |
3213 | - | then throw((("You already used " + toString( | |
3216 | + | then throw((("You already used " + toString(nq)) + " delivery attempts for today")) | |
3214 | 3217 | else { | |
3215 | - | let nq = invoke(dd, "sendDeliveryReward", [c], nil) | |
3216 | - | $Tuple2([IntegerEntry(nl, (fQ + 1)), IntegerEntry(V(c), nn)], nq) | |
3218 | + | let nr = U(B) | |
3219 | + | let ns = invoke(de, "sendDeliveryReward", [c], nil) | |
3220 | + | $Tuple2([IntegerEntry(nm, (fR + 1)), IntegerEntry(W(c), no), IntegerEntry(nr, (valueOrElse(getInteger(nr), 0) + 1))], ns) | |
3217 | 3221 | } | |
3218 | 3222 | } | |
3219 | 3223 | } | |
3220 | 3224 | ||
3221 | 3225 | ||
3222 | 3226 | ||
3223 | - | @Callable( | |
3224 | - | func prepareRobbery ( | |
3225 | - | let | |
3226 | - | if (!(sigVerify_8Kb( | |
3227 | + | @Callable(gK) | |
3228 | + | func prepareRobbery (iQ,iR) = { | |
3229 | + | let kW = kT(gK) | |
3230 | + | if (!(sigVerify_8Kb(iQ, iR, cy))) | |
3227 | 3231 | then throw("signature does not match") | |
3228 | - | else if ((size( | |
3232 | + | else if ((size(gK.payments) != 1)) | |
3229 | 3233 | then throw("exactly 1 payment must be attached") | |
3230 | 3234 | else { | |
3231 | - | let | |
3232 | - | let | |
3233 | - | if (if (!(isDefined( | |
3235 | + | let kX = gK.payments[0] | |
3236 | + | let nt = kX.amount | |
3237 | + | if (if (!(isDefined(kX.assetId))) | |
3234 | 3238 | then true | |
3235 | - | else (value( | |
3239 | + | else (value(kX.assetId) != do)) | |
3236 | 3240 | then throw("WLGOLD payments only!") | |
3237 | 3241 | else { | |
3238 | - | let | |
3239 | - | if ((2 > size( | |
3242 | + | let fp = split(toUtf8String(iQ), "|") | |
3243 | + | if ((2 > size(fp))) | |
3240 | 3244 | then throw("Wrong message format") | |
3241 | 3245 | else { | |
3242 | - | let | |
3243 | - | then | |
3246 | + | let iZ = if ((size(fp) >= 2)) | |
3247 | + | then fp[2] | |
3244 | 3248 | else "" | |
3245 | - | let | |
3246 | - | let | |
3247 | - | if (( | |
3248 | - | then throw(((("Tx ids don't match! In state: " + | |
3249 | + | let bQ = toString(gK.caller) | |
3250 | + | let ja = valueOrElse(getString(dK(bQ)), "") | |
3251 | + | if ((ja != iZ)) | |
3252 | + | then throw(((("Tx ids don't match! In state: " + ja) + ", in msg: ") + iZ)) | |
3249 | 3253 | else { | |
3250 | - | let B = | |
3251 | - | if ( | |
3254 | + | let B = fp[0] | |
3255 | + | if (kq(B)) | |
3252 | 3256 | then throw("prepareRobbery_checkTournament") | |
3253 | 3257 | else { | |
3254 | - | let | |
3255 | - | if (( | |
3256 | - | then throw(((("Payment " + toString( | |
3258 | + | let aB = ax(this, B)._1 | |
3259 | + | if ((aB > nt)) | |
3260 | + | then throw(((("Payment " + toString(nt)) + " < required ") + toString(aB))) | |
3257 | 3261 | else { | |
3258 | - | let | |
3259 | - | let | |
3260 | - | let | |
3261 | - | let | |
3262 | - | let | |
3263 | - | if (if (( | |
3264 | - | then ( | |
3262 | + | let nu = split(fp[1], "_") | |
3263 | + | let aA = lastBlock.timestamp | |
3264 | + | let aC = valueOrElse(getInteger(S(B)), 0) | |
3265 | + | let aD = valueOrElse(getString(T(B)), "") | |
3266 | + | let aE = valueOrElse(getInteger(R(aD)), 0) | |
3267 | + | if (if ((aC != y)) | |
3268 | + | then (aE > aA) | |
3265 | 3269 | else false) | |
3266 | - | then throw(("You already started robbing, wait till " + toString( | |
3270 | + | then throw(("You already started robbing, wait till " + toString(aE))) | |
3267 | 3271 | else { | |
3268 | - | func | |
3269 | - | let | |
3270 | - | let | |
3271 | - | if (( | |
3272 | + | func nv (eR,Q) = { | |
3273 | + | let nw = valueOrElse(getInteger(P(Q)), 0) | |
3274 | + | let nx = valueOrElse(getInteger(R(Q)), 0) | |
3275 | + | if ((nw > size(v))) | |
3272 | 3276 | then throw("Invalid state") | |
3273 | - | else if (( | |
3277 | + | else if ((aA > nx)) | |
3274 | 3278 | then { | |
3275 | - | let | |
3276 | - | if ((0 >= | |
3277 | - | then | |
3279 | + | let ny = valueOrElse(getInteger(bw(Q)), 0) | |
3280 | + | if ((0 >= ny)) | |
3281 | + | then eR | |
3278 | 3282 | else { | |
3279 | - | let | |
3280 | - | let | |
3281 | - | let | |
3282 | - | let | |
3283 | - | let | |
3284 | - | let | |
3285 | - | if ((w > | |
3286 | - | then | |
3287 | - | else ( | |
3283 | + | let gr = value(assetInfo(fromBase58String(Q))) | |
3284 | + | let jw = split(gr.description, "_") | |
3285 | + | let ji = dG(jw[dk]) | |
3286 | + | let nz = jh(Q, ji) | |
3287 | + | let gQ = (aA - ny) | |
3288 | + | let jz = fraction(gQ, (nz * ji), a) | |
3289 | + | if ((w > jz)) | |
3290 | + | then eR | |
3291 | + | else (eR :+ Q) | |
3288 | 3292 | } | |
3289 | 3293 | } | |
3290 | - | else | |
3294 | + | else eR | |
3291 | 3295 | } | |
3292 | 3296 | ||
3293 | - | let | |
3294 | - | let | |
3295 | - | let | |
3296 | - | let | |
3297 | - | func | |
3298 | - | then | |
3299 | - | else | |
3300 | - | ||
3301 | - | func | |
3302 | - | then | |
3297 | + | let nA = { | |
3298 | + | let eT = nu | |
3299 | + | let eU = size(eT) | |
3300 | + | let eV = nil | |
3301 | + | func eW (eX,eY) = if ((eY >= eU)) | |
3302 | + | then eX | |
3303 | + | else nv(eX, eT[eY]) | |
3304 | + | ||
3305 | + | func eZ (eX,eY) = if ((eY >= eU)) | |
3306 | + | then eX | |
3303 | 3307 | else throw("List size exceeds 10") | |
3304 | 3308 | ||
3305 | - | | |
3309 | + | eZ(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
3306 | 3310 | } | |
3307 | - | if ((size( | |
3311 | + | if ((size(nA) == 0)) | |
3308 | 3312 | then throw("No candidates for robbery") | |
3309 | 3313 | else { | |
3310 | - | let | |
3311 | - | let Q = | |
3312 | - | $Tuple2(([IntegerEntry(P(Q), x), IntegerEntry(R(Q), ( | |
3314 | + | let nB = dR(size(nA), iQ, iR) | |
3315 | + | let Q = nA[nB] | |
3316 | + | $Tuple2(([IntegerEntry(P(Q), x), IntegerEntry(R(Q), (aA + v[x])), IntegerEntry(S(B), z), StringEntry(T(B), Q)] ++ kW), Q) | |
3313 | 3317 | } | |
3314 | 3318 | } | |
3315 | 3319 | } | |
3316 | 3320 | } | |
3317 | 3321 | } | |
3318 | 3322 | } | |
3319 | 3323 | } | |
3320 | 3324 | } | |
3321 | 3325 | } | |
3322 | 3326 | ||
3323 | 3327 | ||
3324 | 3328 | ||
3325 | - | @Callable( | |
3326 | - | func robLand ( | |
3327 | - | let | |
3328 | - | if (!(sigVerify_8Kb( | |
3329 | + | @Callable(gK) | |
3330 | + | func robLand (iQ,iR) = { | |
3331 | + | let kW = kT(gK) | |
3332 | + | if (!(sigVerify_8Kb(iQ, iR, cy))) | |
3329 | 3333 | then throw("signature does not match") | |
3330 | 3334 | else { | |
3331 | - | let | |
3332 | - | let B = valueOrErrorMessage(getString( | |
3333 | - | let | |
3334 | - | $Tuple2(( | |
3335 | - | } | |
3336 | - | } | |
3337 | - | ||
3338 | - | ||
3339 | - | ||
3340 | - | @Callable( | |
3341 | - | func buyRoboDuck () = if (!( | |
3335 | + | let bQ = toString(gK.caller) | |
3336 | + | let B = valueOrErrorMessage(getString(bM(bQ)), "You don't have a duck staked") | |
3337 | + | let aA = lastBlock.timestamp | |
3338 | + | $Tuple2((kW :+ IntegerEntry(N(B), aA)), 0) | |
3339 | + | } | |
3340 | + | } | |
3341 | + | ||
3342 | + | ||
3343 | + | ||
3344 | + | @Callable(gK) | |
3345 | + | func buyRoboDuck () = if (!(cv)) | |
3342 | 3346 | then throw("Feature is turned off") | |
3343 | 3347 | else { | |
3344 | - | let | |
3345 | - | if ((size( | |
3348 | + | let kW = kT(gK) | |
3349 | + | if ((size(gK.payments) != 1)) | |
3346 | 3350 | then throw("Exactly one payment required") | |
3347 | 3351 | else { | |
3348 | - | let | |
3349 | - | if (( | |
3352 | + | let kX = value(gK.payments[0]) | |
3353 | + | if ((kX.assetId != cA)) | |
3350 | 3354 | then throw("Allowed USDT payment only!") | |
3351 | - | else if (( | |
3352 | - | then throw((("Payment attached should be " + | |
3355 | + | else if ((kX.amount != ef)) | |
3356 | + | then throw((("Payment attached should be " + dL(ef, 6)) + " USDT")) | |
3353 | 3357 | else { | |
3354 | - | let | |
3355 | - | let | |
3356 | - | let | |
3357 | - | let | |
3358 | - | let | |
3359 | - | let | |
3360 | - | $Tuple2((((( | |
3358 | + | let nC = valueOrElse(getInteger(ey()), 0) | |
3359 | + | let nD = toBytes(nC) | |
3360 | + | let eq = ((aH + "-") + takeRight(toBase16String(nD), 8)) | |
3361 | + | let nE = takeRight(toBase16String(sha256_16Kb(nD)), 6) | |
3362 | + | let iN = Issue(eq, ("Robo Duck NFT for WavesLands game, background color = #" + nE), 1, 0, false) | |
3363 | + | let bu = calculateAssetId(iN) | |
3364 | + | $Tuple2(((((kW :+ IntegerEntry(ey(), (nC + 1))) :+ iN) :+ ScriptTransfer(gK.originCaller, 1, bu)) :+ ScriptTransfer(de, kX.amount, cA)), $Tuple2(toBase58String(bu), nE)) | |
3361 | 3365 | } | |
3362 | 3366 | } | |
3363 | 3367 | } | |
3364 | 3368 | ||
3365 | 3369 |
github/deemru/w8io/026f985 1413.61 ms ◑