tx · BvMzugfkeWcn5ckPb4ECCsXaxgKn14f4nq5jyM2NmtQd 3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm: -0.07600000 Waves 2023.07.23 16:47 [2678579] smart account 3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm > SELF 0.00000000 Waves
{ "type": 13, "id": "BvMzugfkeWcn5ckPb4ECCsXaxgKn14f4nq5jyM2NmtQd", "fee": 7600000, "feeAssetId": null, "timestamp": 1690120033383, "version": 2, "chainId": 84, "sender": "3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm", "senderPublicKey": "EVooykMNV691Venwp1dHUTBd7KWequzUcda57Wd3LQEX", "proofs": [ "4WHw8C5FpLBkJHKsj5Mv847wFx9BLe6EkrSQrQqFwCn4S7hCWfgsXWJwE4U6M9AZZgEpKPa3RzHngC2MEnEj5WSd" ], "script": "base64:BgKyAQgCEgMKAQgSAwoBBBIAEgMKAQgSABIDCgEIEgQKAgEIEgQKAgEIEgQKAgICEgUKAwEBARIAEgQKAggIEgASBAoCAgISAwoBCBIDCgEIEgQKAggIEgMKARgSAwoBGBIECgIICBIECgIICBIDCgEIEgMKAQgSBQoDCAgIEgQKAggIEgcKBQEBAQEBEgMKAQESBQoDAQEIEgMKAQgSAwoBCBIAEgQKAggBEgQKAggBEgMKAQjVAQEUa2V5TGFzdEFyYlRpbWVCeVVzZXIBBGFkZHIJAKwCAgIQbGFzdEFyYlRpbWVVc2VyXwUEYWRkcgAGU0NBTEU4AIDC1y8ADHhwTGV2ZWxTY2FsZQCAGQAPeHBMZXZlbFJlY2lwUG93AKAfABJudW1Qb2ludHNPbkxldmVsVXAAAwAMcmVxdWlyZW1lbnRzCQDMCAICCFN0cmVuZ3RoCQDMCAICCEFjY3VyYWN5CQDMCAICCUludGVsbGVjdAkAzAgCAglFbmR1cmFuY2UJAMwIAgIJRGV4dGVyaXR5CQDMCAICBUxldmVsCQDMCAICBkhlYWx0aAUDbmlsAAxjaGFyU3RyZW5ndGgAAAAMY2hhckFjY3VyYWN5AAEADWNoYXJJbnRlbGxlY3QAAgANY2hhckVuZHVyYW5jZQADAA1jaGFyRGV4dGVyaXR5AAQAC05VTVNFR01FTlRTAAYACk5VTU1BSU5BVVgAAgAITUFYU0xPVFMAAgANTUFYUFJPRElOU0xPVAAeAQ1rZXlEdWNrSGVhbHRoAQtkdWNrQXNzZXRJZAkArAICAgtkdWNrSGVhbHRoXwULZHVja0Fzc2V0SWQBDGtleUR1Y2tDaGFycwELZHVja0Fzc2V0SWQJAKwCAgIKZHVja0NoYXJzXwULZHVja0Fzc2V0SWQBCWtleUR1Y2tYUAELZHVja0Fzc2V0SWQJAKwCAgIHZHVja1hQXwULZHVja0Fzc2V0SWQBDGtleUR1Y2tMZXZlbAELZHVja0Fzc2V0SWQJAKwCAgIKZHVja0xldmVsXwULZHVja0Fzc2V0SWQBEWtleUR1Y2tGcmVlUG9pbnRzAQtkdWNrQXNzZXRJZAkArAICAg9kdWNrRnJlZVBvaW50c18FC2R1Y2tBc3NldElkARBrZXlEdWNrRXF1aXBtZW50AQtkdWNrQXNzZXRJZAkArAICAg5kdWNrRXF1aXBtZW50XwULZHVja0Fzc2V0SWQBCWtleVVzZXJYUAEEYWRkcgkArAICAgd1c2VyWFBfBQRhZGRyAQxrZXlVc2VyTGV2ZWwBBGFkZHIJAKwCAgIKdXNlckxldmVsXwUEYWRkcgERa2V5VXNlckZyZWVQb2ludHMBBGFkZHIJAKwCAgIPdXNlckZyZWVQb2ludHNfBQRhZGRyAAd4cENsYWltAKCNBgAPeHBTdWNjZXNzRmxpZ2h0ANCGAwAMeHBGYWlsRmxpZ2h0AJBOAAh4cENhbGxFUwCgjQYADHhwQ3VzdG9tTmFtZQDAlrECAAp4cE5ld1NMYW5kAIDh6xcADnhwVXBncmFkZUluZnJhAKCNBgAHeHBNZXJnZQCAreIEAAl4cE9uYm9hcmQAgK3iBAAGeHBIZWFsAJBOAQlsZXZlbEJ5WFABAnhwCQBrAwUMeHBMZXZlbFNjYWxlCQBsBgUCeHAABAUPeHBMZXZlbFJlY2lwUG93AAQABAUERE9XTgUGU0NBTEU4AQltYXhIZWFsdGgBBWxldmVsCQBkAgBkBQVsZXZlbAEHbGV2ZWxVcAIJY3VyckxldmVsBW5ld1hQBAhuZXdMZXZlbAkBCWxldmVsQnlYUAEFBW5ld1hQCQDMCAIFCG5ld0xldmVsCQDMCAIJAGgCBRJudW1Qb2ludHNPbkxldmVsVXAJAGUCBQhuZXdMZXZlbAUJY3VyckxldmVsBQNuaWwBDGdldER1Y2tTdGF0cwIPc3Rha2luZ0NvbnRyYWN0C2R1Y2tBc3NldElkBAVjaGFycwkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBDGtleUR1Y2tDaGFycwEFC2R1Y2tBc3NldElkAgkwXzBfMF8wXzACAV8EA2x2bAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QJAQxrZXlEdWNrTGV2ZWwBBQtkdWNrQXNzZXRJZAAABAZoZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkCQEJbWF4SGVhbHRoAQUDbHZsCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUMY2hhclN0cmVuZ3RoCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUMY2hhckFjY3VyYWN5CQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckludGVsbGVjdAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDWNoYXJFbmR1cmFuY2UJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQ1jaGFyRGV4dGVyaXR5CQDMCAIFA2x2bAkAzAgCBQZoZWFsdGgFA25pbAAKTEFORFBSRUZJWAIETEFORAAKRFVDS1BSRUZJWAIERFVDSwAKQVJUUFJFU0FMRQIHUFJFU0FMRQAGTlVNUkVTAAYAD0RBSUxZUkVTQllQSUVDRQCA+NIBAAlEQVlNSUxMSVMAgLiZKQAMV0hNVUxUSVBMSUVSAIDIr6AlAA9ERUZBVUxUTE9DQVRJT04CD0FmcmljYV9GX0FmcmljYQAQUkVTT1VSQ0VQUklDRU1JTgDVtQIACkVTU0VMTENPRUYACgAJcHJvZFR5cGVzCQDMCAICEEZpcnN0IEFpZCBLaXQgTDEJAMwIAgIQRmlyc3QgQWlkIEtpdCBMMgkAzAgCAhBGaXJzdCBBaWQgS2l0IEwzCQDMCAICC0JhY2twYWNrIEwxCQDMCAICC0JhY2twYWNrIEwyCQDMCAICC0JhY2twYWNrIEwzCQDMCAICDkZvb2QgUmF0aW9uIEwxCQDMCAICDkZvb2QgUmF0aW9uIEwyCQDMCAICDkZvb2QgUmF0aW9uIEwzCQDMCAICC0pldCBQYWNrIEwxCQDMCAICC0pldCBQYWNrIEwyCQDMCAICC0pldCBQYWNrIEwzCQDMCAICCVNoaWVsZCBMMQkAzAgCAglTaGllbGQgTDIJAMwIAgIJU2hpZWxkIEwzBQNuaWwACmNvbnRpbmVudHMJAMwIAgIIQW1lcmljYXMJAMwIAgIGRXVyb3BlCQDMCAICBEFzaWEJAMwIAgIGQWZyaWNhCQDMCAICB09jZWFuaWEFA25pbAAJQ09FRkYyTUFUAICt4gQAEHByb2R1Y3Rpb25NYXRyaXgJAMwIAgIlOF84XzhfMTdfMTdfNDJfMTJfMF8zMF8wLDAsMCwwLDAsMCwwXwkAzAgCAiU4XzhfOF8xN18xN180Ml8yNF8wXzYwXzAsMCw1LDIsMCwwLDBfCQDMCAICJzhfOF84XzE3XzE3XzQyXzM2XzBfMTIwXzAsMCwxMCw0LDAsMCwwXwkAzAgCAik4XzE5XzE5XzhfMjdfMTlfMjZfMV8yMF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAik4XzE5XzE5XzhfMjdfMTlfNTJfMV80MF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAik4XzE5XzE5XzhfMjdfMTlfNzhfMV84MF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAiI4XzhfOF84XzhfNjBfMTNfMl8yXzAsMCwwLDAsMCwwLDBfCQDMCAICIjhfOF84XzhfOF82MF8yNl8yXzRfMCwwLDAsMCwwLDAsMF8JAMwIAgIiOF84XzhfOF84XzYwXzM5XzJfOF8wLDAsMCwwLDAsMCwwXwkAzAgCAikzMF8zMF8zXzE3XzE3XzNfMzBfM18zMF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAikzMF8zMF8zXzE3XzE3XzNfNjBfM181MF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAikzMF8zMF8zXzE3XzE3XzNfOTBfM183MF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAisxOF8xOF8xMF8xOF8xOF8xOF8xMV80XzMwXzAsMCwwLDAsMCwwLDBfMjAxCQDMCAICKzE4XzE4XzEwXzE4XzE4XzE4XzIyXzRfNTBfMCwwLDAsMCwwLDAsMF8yMDEJAMwIAgIrMThfMThfMTBfMThfMThfMThfMzNfNF83MF8wLDAsMCwwLDAsMCwwXzIwMQUDbmlsAAlySWR4Q29lZmYABgAQcklkeFJlcXVpcmVtZW50cwAJAAlySWR4U2xvdHMACgAOUFJPRFVDVFBLR1NJWkUACgALd2hJZHhMZXZlbHMAAAAId2hJZHhSZXMAAQAId2hJZHhNYXQAAgAJd2hJZHhQcm9kAAMACXdoSWR4TE9GVAAEAAl2b2xMb2NrZWQAAAALdm9sT2NjdXBpZWQAAQAHdm9sRnJlZQACAAh2b2xUb3RhbAADAApicElkeExldmVsAAAACGJwSWR4UmVzAAEACGJwSWR4TWF0AAIACWJwSWR4UHJvZAADARFrZXlMYXN0VHhJZEJ5VXNlcgEEYWRkcgkArAICAg9sYXN0VHhJZEJ5VXNlcl8FBGFkZHIBFWtleUxhbmRBc3NldElkVG9Pd25lcgEHYXNzZXRJZAkArAICAgluZnRPd25lcl8FB2Fzc2V0SWQBGmtleUxhbmRBc3NldElkVG9DdXN0b21OYW1lAQdhc3NldElkCQCsAgICGGxhbmRDdXN0b21OYW1lQnlBc3NldElkXwUHYXNzZXRJZAEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEHYXNzZXRJZAkArAICAgtzdGFrZWRUaW1lXwUHYXNzZXRJZAEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEHYXNzZXRJZAkArAICAgtpbmZyYUxldmVsXwUHYXNzZXRJZAEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBHR5cGUHYXNzZXRJZAkAuQkCCQDMCAICDWxhbmRBcnRTdGF0dXMJAMwIAgUEdHlwZQkAzAgCBQdhc3NldElkBQNuaWwCAV8BImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDB25mdFR5cGUHYXNzZXRJZAlvd25lckFkZHIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAiBzdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyXwUHbmZ0VHlwZQIBXwUHYXNzZXRJZAIBXwUJb3duZXJBZGRyARJrZXlXYXJlaG91c2VCeUxhbmQBC2xhbmRBc3NldElkCQCsAgICCndhcmVIb3VzZV8FC2xhbmRBc3NldElkARprZXlEdWNrQXNzZXRJZFRvQ3VzdG9tTmFtZQEHYXNzZXRJZAkArAICAhhkdWNrQ3VzdG9tTmFtZUJ5QXNzZXRJZF8FB2Fzc2V0SWQBFmtleUFkZHJlc3NUb0N1c3RvbU5hbWUBBGFkZHIJAKwCAgIYYWNjb3VudEN1c3RvbU5hbWVCeUFkZHJfBQRhZGRyAQ9rZXlBZGRyZXNzUmVmQnkBBGFkZHIJAKwCAgIJYWNjUmVmQnlfBQRhZGRyARxrZXlPbmJvYXJkQXJ0QWN0aXZhdGVkT25EdWNrAQtkdWNrQXNzZXRJZAkArAICAhpvbmJvYXJkQXJ0QWN0aXZhdGVkT25EdWNrXwULZHVja0Fzc2V0SWQBHGtleU9uYm9hcmRBcnREdWNrQWN0aXZhdGVkQnkBBGFkZHIJAKwCAgIab25ib2FyZEFydEFjdGl2YXRlZER1Y2tCeV8FBGFkZHIBE2tleUFkZHJlc3NSZWZlcnJhbHMBBGFkZHIJAKwCAgINYWNjUmVmZXJyYWxzXwUEYWRkcgEQa2V5RHVja0lkVG9Pd25lcgEHYXNzZXRJZAkArAICAgpkdWNrT3duZXJfBQdhc3NldElkARRrZXlTdGFrZWREdWNrQnlPd25lcgEJb3duZXJBZGRyCQCsAgICEnN0YWtlZER1Y2tCeU93bmVyXwUJb3duZXJBZGRyARFrZXlCYWNrcGFja0J5RHVjawELZHVja0Fzc2V0SWQJAKwCAgIJYmFja1BhY2tfBQtkdWNrQXNzZXRJZAEPa2V5RHVja0xvY2F0aW9uAQtkdWNrQXNzZXRJZAkArAICAg1kdWNrTG9jYXRpb25fBQtkdWNrQXNzZXRJZAEKa2V5QmxvY2tlZAACEGNvbnRyYWN0c0Jsb2NrZWQBFWtleVVzZXJHd2xSZWxlYXNlVGltZQEIdXNlckFkZHIJAKwCAgIaJXMlc19fdXNlckd3bFJlbGVhc2VUaW1lX18FCHVzZXJBZGRyAQ5rZXlFc1dhcmVob3VzZQACGmVtZXJnZW5jeVdhcmVob3VzZVByb2R1Y3RzAApsb2NJZHhUeXBlAAEACGxvY0lkeElkAAIBEmdldFJlY2lwZU1hdGVyaWFscwEGcmVjaXBlCQBoAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBnJlY2lwZQUJcklkeENvZWZmBQlDT0VGRjJNQVQAD0tTQUxMT1dYUExFVkVMUwYABWNoYWluCQDJAQIJAMoBAggFBHRoaXMFYnl0ZXMAAQABAAt1c2R0QXNzZXRJZAQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAEghNp6sggDP07Ru8qO7ouTvMmC3Qtd+geWqNQj+agP/7kDCQAAAgEBVAUHJG1hdGNoMAEgVbHYn3KHgu/l41uNrAWrZd6aQ6EvFrsF8xq3h6XxxRgJAAIBAg1Vbmtub3duIGNoYWluABVkZWZhdWx0UmVzdEFkZHJlc3NTdHIEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDACIzNQUUN1dkZidmg0TGtQVW5yblUxejNqbmJBMXA5bTNXTmh2AwkAAAIBAVQFByRtYXRjaDACIzNNdW1rR0d6dENLQVhwV0RxeGtkZG9mcVhTVWJxUWt2U0p5CQACAQINVW5rbm93biBjaGFpbgARSW5mcmFVcGdyYWRlQ29zdFMEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAAgMivoCUDCQAAAgEBVAUHJG1hdGNoMACAwtcvCQACAQINVW5rbm93biBjaGFpbgAOYXJiaXRyYWdlRGVsYXkEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAAwM8kAwkAAAIBAVQFByRtYXRjaDAA4NQDCQACAQINVW5rbm93biBjaGFpbgADU0VQAgJfXwAFTVVMVDYAwIQ9AAVNVUxUOACAwtcvAAVTU0laRQAZAAVNU0laRQBkAAVMU0laRQDhAQAGWExTSVpFAJADAAdYWExTSVpFAPEEAQ9nZXRTdHJpbmdPckZhaWwCB2FkZHJlc3MDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUHYWRkcmVzcwUDa2V5CQC5CQIJAMwIAgIKbWFuZGF0b3J5IAkAzAgCCQClCAEFB2FkZHJlc3MJAMwIAgIBLgkAzAgCBQNrZXkJAMwIAgIPIGlzIG5vdCBkZWZpbmVkBQNuaWwCAAARSWR4Q2ZnU3Rha2luZ0RhcHAAAQARSWR4Q2ZnRWNvbm9teURhcHAAAgAUSWR4Q2ZnR292ZXJuYW5jZURhcHAAAwANSWR4Q2ZnV2xnRGFwcAAEAQprZXlSZXN0Q2ZnAAIOJXNfX3Jlc3RDb25maWcBDmtleVJlc3RBZGRyZXNzAAIMJXNfX3Jlc3RBZGRyARFyZWFkUmVzdENmZ09yRmFpbAEEcmVzdAkAvAkCCQEPZ2V0U3RyaW5nT3JGYWlsAgUEcmVzdAkBCmtleVJlc3RDZmcABQNTRVABGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIHcmVzdENmZwNpZHgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFB3Jlc3RDZmcFA2lkeAkArAICAipSZXN0IGNmZyBkb2Vzbid0IGNvbnRhaW4gYWRkcmVzcyBhdCBpbmRleCAJAKQDAQUDaWR4AAxyZXN0Q29udHJhY3QJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkBDmtleVJlc3RBZGRyZXNzAAUVZGVmYXVsdFJlc3RBZGRyZXNzU3RyAAdyZXN0Q2ZnCQERcmVhZFJlc3RDZmdPckZhaWwBBQxyZXN0Q29udHJhY3QAD3N0YWtpbmdDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFEUlkeENmZ1N0YWtpbmdEYXBwAA9lY29ub215Q29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRFJZHhDZmdFY29ub215RGFwcAALZ292Q29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRRJZHhDZmdHb3Zlcm5hbmNlRGFwcAALd2xnQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBQ1JZHhDZmdXbGdEYXBwAApyZWNMYW5kTnVtAAAAC3JlY0xhbmRTaXplAAEAC3JlY1RlcnJhaW5zAAIADHJlY0NvbnRpbmVudAADARFrZXlSZXNQcm9wb3J0aW9ucwACE3Jlc1R5cGVzUHJvcG9ydGlvbnMBFWtleVN0YWtlZExhbmRzQnlPd25lcgEJb3duZXJBZGRyCQCsAgICE3N0YWtlZExhbmRzQnlPd25lcl8FCW93bmVyQWRkcgEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEJb3duZXJBZGRyCQCsAgICFHN0YWtlZFBpZWNlc0J5T3duZXJfBQlvd25lckFkZHIBCGFzU3RyaW5nAQF2BAckbWF0Y2gwBQF2AwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAUBcwkAAgECGGZhaWwgdG8gY2FzdCBpbnRvIFN0cmluZwEFYXNJbnQBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIDSW50BAFuBQckbWF0Y2gwBQFuCQACAQIVZmFpbCB0byBjYXN0IGludG8gSW50AQ9udW1QaWVjZXNCeVNpemUBCGxhbmRTaXplBAckbWF0Y2gwBQhsYW5kU2l6ZQMJAAACAgFTBQckbWF0Y2gwBQVTU0laRQMJAAACAgFNBQckbWF0Y2gwBQVNU0laRQMJAAACAgFMBQckbWF0Y2gwBQVMU0laRQMJAAACAgJYTAUHJG1hdGNoMAUGWExTSVpFAwkAAAICA1hYTAUHJG1hdGNoMAUHWFhMU0laRQkAAgECEVVua25vd24gbGFuZCBzaXplAQdpc0RpZ2l0AQFzCQEJaXNEZWZpbmVkAQkAtgkBBQFzAA1pbmN1YmF0b3JBZGRyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwCQERQGV4dHJOYXRpdmUoMTA2MikBAiMzUEVrdFZ1eDJSaGNoU042M0RzRG80YjRtejRRcXpLU2VEdgMJAAACAQFUBQckbWF0Y2gwBQR0aGlzCQACAQINVW5rbm93biBjaGFpbgALYnJlZWRlckFkZHIEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAJARFAZXh0ck5hdGl2ZSgxMDYyKQECIzNQRFZ1VTQ1SDdFaDVkbXROYm5STlJTdEd3VUxBN05ZNkhiAwkAAAIBAVQFByRtYXRjaDAFBHRoaXMJAAIBAg1Vbmtub3duIGNoYWluAANwdWIBIE9T4ho/VKjWnVJOEx1GJ1W9s1PzLHvJVFSw/0PBtBQoAAhtZWRLaXRIcAkAzAgCAB4JAMwIAgA8CQDMCAIAeAUDbmlsABFGSVZFTUlOVVRFU01JTExJUwDgpxIADFJFTkFNSU5HQ09TVADAlrECAApNQVhOQU1FTEVOADIAFUluZnJhVXBncmFkZUNvc3RTVXNkdACAreIEAAxFWFBNQVRFUklBTFMEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAApt2C7asHAwkAAAIBAVQFByRtYXRjaDAAqqeBswkJAAIBAg1Vbmtub3duIGNoYWluAAdFWFBVU0RUBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAIDlmncDCQAAAgEBVAUHJG1hdGNoMACA5Zp3CQACAQINVW5rbm93biBjaGFpbgAFRklWRVgJALYCAQAFAAdUV0VOVFlYCQC2AgEAFAAIVFdFTlRZMlgJALYCAQkAaAIAFAAUAAhUV0VOVFkzWAkAtgIBCQBoAgkAaAIAFAAUABQACFRXRU5UWTRYCQC2AgEJAGgCCQBoAgkAaAIAFAAUABQAFAAIVFdFTlRZNVgJALYCAQkAaAIJAGgCCQBoAgkAaAIAFAAUABQAFAAUAA9QUkVTQUxFTlVNTEFORFMA9AMBEmtleU5leHRGcmVlTGFuZE51bQACC25leHRMYW5kTnVtARBrZXlMYW5kVG9Bc3NldElkAQdsYW5kTnVtCQCsAgICDGxhbmRUb0Fzc2V0XwUHbGFuZE51bQEaa2V5TGFuZEN1c3RvbU5hbWVUb0Fzc2V0SWQBBG5hbWUJAKwCAgIRbGFuZEJ5Q3VzdG9tTmFtZV8FBG5hbWUBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIHYXNzZXRJZAlvd25lckFkZHIJAKwCAgkArAICCQCsAgICHGluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcl8FB2Fzc2V0SWQCAV8FCW93bmVyQWRkcgEla2V5TGFuZEFydFN0YXR1c0J5VHlwZUFzc2V0SWRBbmRPd25lcgMEdHlwZQdhc3NldElkCW93bmVyQWRkcgkAuQkCCQDMCAICImxhbmRBcnRTdGF0dXNCeVR5cGVBc3NldElkQW5kT3duZXIJAMwIAgUEdHlwZQkAzAgCBQdhc3NldElkCQDMCAIFCW93bmVyQWRkcgUDbmlsAgFfARFrZXlMYW5kTnVtVG9Pd25lcgEHbGFuZE51bQkArAICAgpsYW5kT3duZXJfBQdsYW5kTnVtARprZXlEdWNrQ3VzdG9tTmFtZVRvQXNzZXRJZAEEbmFtZQkArAICAhFkdWNrQnlDdXN0b21OYW1lXwUEbmFtZQEWa2V5Q3VzdG9tTmFtZVRvQWRkcmVzcwEEbmFtZQkArAICAhRhY2NvdW50QnlDdXN0b21OYW1lXwUEbmFtZQEJa2V5T2xkaWVzAAIKb2xkaWVzTGlzdAALY2xhaW1Nb2RlV2gAAAANY2xhaW1Nb2RlRHVjawABABNjbGFpbU1vZGVXaFRoZW5EdWNrAAIACGZsSGVhbHRoAAAAC2ZsVGltZXN0YW1wAAUAB2ZsQm9udXMABgALZmxQcm9kc1VzZWQABwEHbmZ0TmFtZQIHbGFuZE51bQhsYW5kU2l6ZQkArAICCQCsAgIFCkxBTkRQUkVGSVgFB2xhbmROdW0FCGxhbmRTaXplARNkaXN0cmlidXRlQnlXZWlnaHRzAgV0b3RhbAd3ZWlnaHRzBANzdW0JAGQCCQBkAgkAZAIJAGQCCQBkAgkAkQMCBQd3ZWlnaHRzAAAJAJEDAgUHd2VpZ2h0cwABCQCRAwIFB3dlaWdodHMAAgkAkQMCBQd3ZWlnaHRzAAMJAJEDAgUHd2VpZ2h0cwAECQCRAwIFB3dlaWdodHMABQMJAGcCAAAFA3N1bQkAAgECEFplcm8gd2VpZ2h0cyBzdW0EBW5vcm02CQBrAwUFdG90YWwFBU1VTFQ2BQNzdW0KAQpub3JtYWxpemVyAgNhY2MEZWxlbQkAzQgCBQNhY2MJAGsDBQRlbGVtBQVub3JtNgUFTVVMVDYKAAIkbAUHd2VpZ2h0cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKbm9ybWFsaXplcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgESZ2V0TmVlZGVkTWF0ZXJpYWxzAQV0b3RhbAQFcHJvcHMJALUJAgkBBXZhbHVlAQkAoggBCQERa2V5UmVzUHJvcG9ydGlvbnMAAgFfAwkBAiE9AgkAkAMBBQVwcm9wcwUGTlVNUkVTCQACAQIWV3JvbmcgcHJvcG9ydGlvbnMgZGF0YQQBcgkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAQkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAgkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAwkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMABAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMABQUDbmlsCQETZGlzdHJpYnV0ZUJ5V2VpZ2h0cwIFBXRvdGFsBQFyARFzdWJ0cmFjdE1hdGVyaWFscwMMc2hvdWxkVXNlTWF0A2hhcwl0b3RhbE5lZWQEBG5lZWQJARJnZXROZWVkZWRNYXRlcmlhbHMBBQl0b3RhbE5lZWQKAQpzdWJ0cmFjdG9yAgNhY2MDaWR4BAZyZXN1bHQJAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDaGFzBQNpZHgJAJEDAgUEbmVlZAUDaWR4AwkAZgIAAAUGcmVzdWx0CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICGE5vdCBlbm91Z2ggbWF0ZXJpYWwgaWR4PQkApAMBBQNpZHgCCywgeW91IGhhdmUgCQCRAwIFA2hhcwUDaWR4AgssIGJ1dCBuZWVkIAkApAMBCQCRAwIFBG5lZWQFA2lkeAkAzQgCBQNhY2MJAKQDAQUGcmVzdWx0AwUMc2hvdWxkVXNlTWF0CgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKc3VidHJhY3RvcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgUDaGFzARFzdWJ0cmFjdEVxdWlwbWVudAIFb2xkRXEFcFVzZWQKAQdzdWJVc2VkAgNhY2MGaWR4QW10BAVwYXJ0cwkAtQkCBQZpZHhBbXQCASwDCQECIT0CCQCQAwEFBXBhcnRzAAIJAAIBAihJbmNvcnJlY3QgZm9ybWF0LCBzaG91bGQgYmUgaW5kZXgsYW1vdW50BANpZHgJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwYXJ0cwAAAwMJAGYCAAAFA2lkeAYJAGcCBQNpZHgJAJADAQUQcHJvZHVjdGlvbk1hdHJpeAkAAgECE1Vua25vd24gcHJvZHVjdCBpZHgEA2FtdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXBhcnRzAAEEB2VxUGFydHMJALUJAgUDYWNjCQCsAgIJAJEDAgUFcGFydHMAAAIBOgMJAQIhPQIJAJADAQUHZXFQYXJ0cwACCQACAQkArAICCQCsAgICD1lvdSBkb24ndCBoYXZlIAkAkQMCBQlwcm9kVHlwZXMFA2lkeAIJIGVxdWlwcGVkBAN0bXAJAJEDAgUHZXFQYXJ0cwABBAZudW1MZW4DCQEHaXNEaWdpdAEJAK8CAgkAsAICBQN0bXAAAQABAAIAAQQEY3VycgkBDXBhcnNlSW50VmFsdWUBCQCvAgIFA3RtcAUGbnVtTGVuBAR0YWlsCQCwAgIFA3RtcAUGbnVtTGVuBAZuZXdBbXQDCQBnAgUEY3VycgUDYW10CQBlAgUEY3VycgUDYW10CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICDVlvdSBlcXVpcHBlZCAJAKQDAQUEY3VycgIEIG9mIAkAkQMCBQlwcm9kVHlwZXMFA2lkeAITLCBidXQgdHJpZWQgdG8gdXNlIAkApAMBBQNhbXQJAKwCAgkArAICCQCsAgIJAKwCAgkAkQMCBQdlcVBhcnRzAAAJAJEDAgUFcGFydHMAAAIBOgkApAMBBQZuZXdBbXQFBHRhaWwKAAIkbAkAtQkCBQVwVXNlZAIBXwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFBW9sZEVxCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQdzdWJVc2VkAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAQ5wcm9kU3RyVG9CeXRlcwEHcHJvZFN0cgQFcExpc3QDCQAAAgUHcHJvZFN0cgIABQNuaWwJALUJAgUHcHJvZFN0cgIBXwoBBHRvQlYCA2FjYwZyZWNpcGUEAWoJAGkCCQDIAQEFA2FjYwAIBARjdXJyAwkAZgIJAJADAQUFcExpc3QFAWoJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwTGlzdAUBagAACQDLAQIFA2FjYwkAmgMBBQRjdXJyCgACJGwFEHByb2R1Y3Rpb25NYXRyaXgKAAIkcwkAkAMBBQIkbAoABSRhY2MwAQAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBHRvQlYCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDUwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgEOYnl0ZXNUb1Byb2RTdHIBAmJ2CgEGZnJvbUJWAgNhY2MGcmVjaXBlBAFqCQCQAwEFA2FjYwQBYgkAyQECCQDKAQIFAmJ2CQBoAgAIBQFqAAgJAM0IAgUDYWNjCQCkAwEJALEJAQUBYgkAuQkCCgACJGwFEHByb2R1Y3Rpb25NYXRyaXgKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBmZyb21CVgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgNTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyAgFfARVjaGVja1N0YXRSZXF1aXJlbWVudHMCCWR1Y2tTdGF0cwRyZXFzCgEFY2hlY2sCA2FjYwFqAwkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRyZXFzBQFqCQCRAwIFCWR1Y2tTdGF0cwUBagkAAgEJAKwCAgIbUmVxdWlyZW1lbnQgbm90IHNhdGlzZmllZDogCQCRAwIFDHJlcXVpcmVtZW50cwUBagYKAAIkbAkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQkAzAgCAAYFA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAHCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQVjaGVjawIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNwkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAQhhZGRQcm9kQgcGaWR4Q250BXBMaXN0CmlzUG9zaXRpdmUHc2VnbWVudAdtYWluQXV4BHNsb3QJZHVja1N0YXRzBAVwYXJ0cwkAtQkCBQZpZHhDbnQCAToDCQECIT0CCQCQAwEFBXBhcnRzAAIJAAIBAihJbmNvcnJlY3QgZm9ybWF0LCBzaG91bGQgYmUgaW5kZXg6YW1vdW50AwkBAiE9AgkAsQIBCQCRAwIFBXBhcnRzAAAAAgkAAgECK1Byb2R1Y3QgaWR4IHNob3VsZCBiZSAyIGRpZ2l0cywgemVybyBwYWRkZWQECnByb2R1Y3RJZHgJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwYXJ0cwAABAVjb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXBhcnRzAAEDAwkAZgIAAAUKcHJvZHVjdElkeAYJAGcCBQpwcm9kdWN0SWR4CQCQAwEFEHByb2R1Y3Rpb25NYXRyaXgJAAIBAhNVbmtub3duIHByb2R1Y3QgaWR4AwkAZgIAAAUFY291bnQJAAIBAhdDb3VudCBjYW4ndCBiZSBuZWdhdGl2ZQMJAGYCBQVjb3VudAUNTUFYUFJPRElOU0xPVAkAAgEJAKwCAgkArAICCQCsAgICFENhbid0IHB1dCBtb3JlIHRoYW4gCQCkAwEFDU1BWFBST0RJTlNMT1QCBCBvZiAJAJEDAgUJcHJvZFR5cGVzBQpwcm9kdWN0SWR4AwkAAAIFBWNvdW50AAAJAJQKAgUFcExpc3QHBARoZWFkCQDJAQIFBXBMaXN0CQBoAgAIBQpwcm9kdWN0SWR4BARjdXJyCQCxCQEJAMkBAgkAygECBQVwTGlzdAkAaAIACAUKcHJvZHVjdElkeAAIBAR0YWlsCQDKAQIFBXBMaXN0CQBoAgAICQBkAgUKcHJvZHVjdElkeAABBAZyZWNpcGUJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4BQpwcm9kdWN0SWR4AgFfAwMJAQEhAQUKaXNQb3NpdGl2ZQkAZgIFBWNvdW50BQRjdXJyBwkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAglZb3UgaGF2ZSAJAKQDAQUEY3VycgIEIG9mIAkAkQMCBQlwcm9kVHlwZXMFCnByb2R1Y3RJZHgCEywgYnV0IHRyaWVkIHRvIHVzZSAJAKQDAQUFY291bnQECWlzQmlnSXRlbQMDCQEBIQEFCmlzUG9zaXRpdmUJARVjaGVja1N0YXRSZXF1aXJlbWVudHMCBQlkdWNrU3RhdHMJALUJAgkAkQMCBQZyZWNpcGUFEHJJZHhSZXF1aXJlbWVudHMCASwHBAZjb21wYXQJAJEDAgUGcmVjaXBlBQlySWR4U2xvdHMDCQAAAgUGY29tcGF0AgAJAAIBAhdJdGVtIGNhbm5vdCBiZSBlcXVpcHBlZAQBYwkBDXBhcnNlSW50VmFsdWUBBQZjb21wYXQEBGNTZWcJAGkCBQFjAGQDCQECIT0CBQdzZWdtZW50BQRjU2VnCQACAQIUU2VnbWVudCBpbmNvbXBhdGlibGUECGNNYWluQXV4CQBpAgkAagIFAWMAZAAKAwkBAiE9AgUHbWFpbkF1eAUIY01haW5BdXgJAAIBAhFTbG90IGluY29tcGF0aWJsZQQJY051bVNsb3RzCQBqAgUBYwAKAwMJAQIhPQIFBHNsb3QAAAkAZgIFCWNOdW1TbG90cwABBwkAAgECHkJpZyBpdGVtcyBzaG91bGQgb2NjdXB5IHNsb3QgMAkAZgIFCWNOdW1TbG90cwABBwkAlAoCCQDLAQIJAMsBAgUEaGVhZAkAmgMBCQBkAgUEY3VycgMFCmlzUG9zaXRpdmUFBWNvdW50CQEBLQEFBWNvdW50BQR0YWlsBQlpc0JpZ0l0ZW0BC3Nsb3RzR3JvdXBCBgFnBGJwSW4KaXNQb3NpdGl2ZQdzZWdtZW50B21haW5BdXgEcmVxcwMJAQIhPQIFAWcCAAQFc2xvdHMJALUJAgUBZwIBLAMJAGYCCQCQAwEFBXNsb3RzBQhNQVhTTE9UUwkAAgECEldyb25nIHNsb3RzIGZvcm1hdAQCczAJAJEDAgUFc2xvdHMAAAQCczEDCQBmAgkAkAMBBQVzbG90cwABCQCRAwIFBXNsb3RzAAECAAMDCQAAAgUCczACAAkAAAIFAnMxAgAHBQRicEluBAV0bXBTMAMJAQIhPQIFAnMwAgAJAQhhZGRQcm9kQgcFAnMwBQRicEluBQppc1Bvc2l0aXZlBQdzZWdtZW50BQdtYWluQXV4AAAFBHJlcXMJAJQKAgUEYnBJbgcDCQECIT0CBQJzMQIAAwgFBXRtcFMwAl8yCQACAQIeQmlnIGl0ZW0gYWxyZWFkeSBvY2N1cGllcyBzbG90CAkBCGFkZFByb2RCBwUCczEIBQV0bXBTMAJfMQUKaXNQb3NpdGl2ZQUHc2VnbWVudAUHbWFpbkF1eAABBQRyZXFzAl8xCAUFdG1wUzACXzEFBGJwSW4BBmRyZXNzQgQHc2VnTGlzdAZwQnl0ZXMKaXNQb3NpdGl2ZQRyZXFzCgEHc2VnbWVudAIDYWNjA3NlZwQBaggFA2FjYwJfMQQHbWFpbkF1eAkAtQkCBQNzZWcCATsDCQECIT0CCQCQAwEFB21haW5BdXgFCk5VTU1BSU5BVVgJAAIBAhRXcm9uZyBzZWdtZW50IGZvcm1hdAQBbQkAkQMCBQdtYWluQXV4AAAEAWEJAJEDAgUHbWFpbkF1eAABAwMJAAACBQFtAgAJAAACBQFhAgAHCQCUCgIJAGQCBQFqAAEIBQNhY2MCXzIEBHRtcE0JAQtzbG90c0dyb3VwQgYFAW0IBQNhY2MCXzIFCmlzUG9zaXRpdmUFAWoAAAUEcmVxcwkAlAoCCQBkAgUBagABCQELc2xvdHNHcm91cEIGBQFhBQR0bXBNBQppc1Bvc2l0aXZlBQFqAAEFBHJlcXMICgACJGwFB3NlZ0xpc3QKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIAAAUGcEJ5dGVzCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQdzZWdtZW50AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAl8yARl1cGRhdGVQcm9wb3J0aW9uc0ludGVybmFsBAhwcm9wTGlzdA10ZXJyYWluQ291bnRzDWxhbmRTaXplSW5kZXgEc2lnbgMJAQIhPQIJAJADAQUIcHJvcExpc3QFBk5VTVJFUwkAAgECFldyb25nIHByb3BvcnRpb25zIGRhdGEKAQd1cGRhdGVyAgNhY2MBaQQGcmVzdWx0CQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb3BMaXN0BQFpCQBoAgkAaAIFBHNpZ24JAJEDAgUNdGVycmFpbkNvdW50cwUBaQUNbGFuZFNpemVJbmRleAMJAGYCAAAFBnJlc3VsdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIWUGFuaWMhIFBpZWNlcyBvZiB0eXBlPQkApAMBBQFpAgcsIHNpZ249CQCkAwEFBHNpZ24CFCwgIHRlcnJhaW5Db3VudHNbaV09CQCkAwEJAJEDAgUNdGVycmFpbkNvdW50cwUBaQIQLCBsYW5kU2l6ZUluZGV4PQkApAMBBQ1sYW5kU2l6ZUluZGV4CQDNCAIFA2FjYwkApAMBBQZyZXN1bHQEAXIKAAIkbAkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQd1cGRhdGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGCQC5CQIFAXICAV8BEXVwZGF0ZVByb3BvcnRpb25zAw10ZXJyYWluQ291bnRzDWxhbmRTaXplSW5kZXgEc2lnbgQIcHJvcExpc3QJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBCQERa2V5UmVzUHJvcG9ydGlvbnMAAgswXzBfMF8wXzBfMAIBXwkBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwEBQhwcm9wTGlzdAUNdGVycmFpbkNvdW50cwUNbGFuZFNpemVJbmRleAUEc2lnbgENY291bnRUZXJyYWlucwEIdGVycmFpbnMJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBQQABCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUIAAQkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFDAAEJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBRAABCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUUAAQkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFGAAEFA25pbAEGYWRkUmVzBQpjdXJyZW50UmVzDXRlcnJhaW5Db3VudHMJZGVsdGFUaW1lDWxhbmRTaXplSW5kZXgXZGFpbHlCeVBpZWNlV2l0aEJvbnVzZXMKAQVhZGRlcgIDYWNjAWkECXJlc09mVHlwZQkAaAIJAGgCCQBrAwUJZGVsdGFUaW1lBRdkYWlseUJ5UGllY2VXaXRoQm9udXNlcwUJREFZTUlMTElTCQCRAwIFDXRlcnJhaW5Db3VudHMFAWkFDWxhbmRTaXplSW5kZXgJAM0IAgUDYWNjCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKY3VycmVudFJlcwUBaQUJcmVzT2ZUeXBlBAFyCgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEFYWRkZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYJALkJAgUBcgIBXwEJdmlydENsYWltBA10ZXJyYWluQ291bnRzCWRlbHRhVGltZQ1sYW5kU2l6ZUluZGV4F2RhaWx5QnlQaWVjZVdpdGhCb251c2VzCgEFYWRkZXICA2FjYwFpBAlyZXNPZlR5cGUJAGgCCQBoAgkAawMFCWRlbHRhVGltZQUXZGFpbHlCeVBpZWNlV2l0aEJvbnVzZXMFCURBWU1JTExJUwkAkQMCBQ10ZXJyYWluQ291bnRzBQFpBQ1sYW5kU2l6ZUluZGV4CQCUCgIJAM0IAggFA2FjYwJfMQUJcmVzT2ZUeXBlCQBkAggFA2FjYwJfMgUJcmVzT2ZUeXBlCgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBWFkZGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAQ1kaXN0cmlidXRlUmVzBAxjdXJyZW50V2hSZXMOY3VycmVudFBhY2tSZXMKcmVzVG9DbGFpbQt3aFNwYWNlTGVmdAQOcmVzTGlzdFRvQ2xhaW0IBQpyZXNUb0NsYWltAl8xBAxyZXNBbVRvQ2xhaW0IBQpyZXNUb0NsYWltAl8yAwkAAAIFDHJlc0FtVG9DbGFpbQAACQCUCgIJALkJAgUMY3VycmVudFdoUmVzAgFfCQC5CQIFDmN1cnJlbnRQYWNrUmVzAgFfAwkAZwIFC3doU3BhY2VMZWZ0BQxyZXNBbVRvQ2xhaW0KAQhhZGRMaXN0cwIDYWNjAWkJAM0IAgUDYWNjCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUMY3VycmVudFdoUmVzBQFpCQCRAwIFDnJlc0xpc3RUb0NsYWltBQFpBAFyCgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEIYWRkTGlzdHMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYJAJQKAgkAuQkCBQFyAgFfCQC5CQIFDmN1cnJlbnRQYWNrUmVzAgFfCgEMYWRkUGFydExpc3RzAgNhY2MBaQQGd2hQYXJ0CQBrAwkAkQMCBQ5yZXNMaXN0VG9DbGFpbQUBaQULd2hTcGFjZUxlZnQFDHJlc0FtVG9DbGFpbQkAlAoCCQDNCAIIBQNhY2MCXzEJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQxjdXJyZW50V2hSZXMFAWkFBndoUGFydAkAzQgCCAUDYWNjAl8yCQCkAwEJAGUCCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmN1cnJlbnRQYWNrUmVzBQFpCQCRAwIFDnJlc0xpc3RUb0NsYWltBQFpBQZ3aFBhcnQEAXIKAAIkbAkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEMYWRkUGFydExpc3RzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGCQCUCgIJALkJAggFAXICXzECAV8JALkJAggFAXICXzICAV8BA2FicwEBeAMJAMACAgUBeAkAtgIBAAAFAXgJAL4CAQUBeAAEZnJlcQkAzAgCCQDMCAIABgkAzAgCAAkJAMwIAgAOCQDMCAIADwkAzAgCABAFA25pbAkAzAgCCQDMCAIABQkAzAgCAAgJAMwIAgANCQDMCAIADgkAzAgCAA8FA25pbAkAzAgCCQDMCAIAAQkAzAgCAAQJAMwIAgAJCQDMCAIACgkAzAgCAA8FA25pbAkAzAgCCQDMCAIAAQkAzAgCAAYJAMwIAgAHCQDMCAIADwkAzAgCABMFA25pbAkAzAgCCQDMCAIABAkAzAgCAAcJAMwIAgAICQDMCAIADQkAzAgCABIFA25pbAUDbmlsAQdnZW5DaGFyAgFuBWZyZXFzBANyZW0JAKADAQkAuwICBQFuBQdUV0VOVFlYBAZsZXR0ZXIDCQBmAgkAkQMCBQVmcmVxcwAABQNyZW0CAUEDCQBmAgkAkQMCBQVmcmVxcwABBQNyZW0CAUIDCQBmAgkAkQMCBQVmcmVxcwACBQNyZW0CAUMDCQBmAgkAkQMCBQVmcmVxcwADBQNyZW0CAUQDCQBmAgkAkQMCBQVmcmVxcwAEBQNyZW0CAUUCAUYFBmxldHRlcgELZ2VuVGVycmFpbnMCBHNlZWQMY29udGluZW50SWR4BAFmCQCRAwIFBGZyZXEFDGNvbnRpbmVudElkeAoBEHRlcnJhaW5HZW5lcmF0b3ICA2FjYwRlbGVtCQCUCgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCAUDYWNjAl8xCQEHZ2VuQ2hhcgIIBQNhY2MCXzIFAWYJAQdnZW5DaGFyAgkAugICCAUDYWNjAl8yBQdUV0VOVFlYBQFmCQEHZ2VuQ2hhcgIJALoCAggFA2FjYwJfMgUIVFdFTlRZMlgFAWYJAQdnZW5DaGFyAgkAugICCAUDYWNjAl8yBQhUV0VOVFkzWAUBZgkBB2dlbkNoYXICCQC6AgIIBQNhY2MCXzIFCFRXRU5UWTRYBQFmCQC6AgIIBQNhY2MCXzIFCFRXRU5UWTVYBAF0CgACJGwJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCAgAJALoCAgUEc2VlZAUFRklWRVgKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBEHRlcnJhaW5HZW5lcmF0b3ICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDUJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFCAUBdAJfMQELZ2V0QmFja3BhY2sBBWJwS2V5BAFwCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUFYnBLZXkCGjA6MF8wXzBfMF8wXzA6MF8wXzBfMF8wXzA6AgE6CQDMCAIJAKQDAQkBC3ZhbHVlT3JFbHNlAgkAtgkBCQCRAwIFAXAFCmJwSWR4TGV2ZWwAAAkAzAgCAwkAAAIJAJADAQkAtQkCCQCRAwIFAXAFCGJwSWR4UmVzAgFfBQZOVU1SRVMJAJEDAgUBcAUIYnBJZHhSZXMCCzBfMF8wXzBfMF8wCQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUBcAUIYnBJZHhNYXQCAV8FBk5VTVJFUwkAkQMCBQFwBQhicElkeE1hdAILMF8wXzBfMF8wXzAJAMwIAgkAkQMCBQFwBQlicElkeFByb2QFA25pbAEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBCXZvbFByZWZpeAQFcGFydHMJALUJAgUJdm9sUHJlZml4AgFfCQBoAgkAaAIFDFdITVVMVElQTElFUgkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwYXJ0cwABAAEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwYXJ0cwAAARdnZXRXYXJlaG91c2VPY2N1cGllZFZvbAEJY3VycmVudFdoBAVnb29kcwkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAoBCXN1bVJlc01hdAIDYWNjBGl0ZW0JAGQCBQNhY2MJAQ1wYXJzZUludFZhbHVlAQUEaXRlbQoBB3N1bVByb2QCA2FjYwRpdGVtBANpZHgIBQNhY2MCXzEEBHBrZ3MJAGkCCQBlAgkAZAIJAQ1wYXJzZUludFZhbHVlAQUEaXRlbQUOUFJPRFVDVFBLR1NJWkUAAQUOUFJPRFVDVFBLR1NJWkUJAJQKAgkAZAIFA2lkeAABCQBkAggFA2FjYwJfMgkAaAIFBHBrZ3MFBU1VTFQ4BAh3aFJlc1ZvbAoAAiRsCQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeFJlcwIBXwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEJc3VtUmVzTWF0AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGBAh3aE1hdFZvbAoAAiRsCQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeE1hdAIBXwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAAAAoBBSRmMV8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEJc3VtUmVzTWF0AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYxXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYxXzICCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECBQUkYWNjMAAAAAEAAgADAAQABQAGBAp3aEdvb2RzVm9sAwkAAAIFBWdvb2RzAgAAAAgKAAIkbAkAvAkCBQVnb29kcwIBXwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgAAAAAKAQUkZjJfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBB3N1bVByb2QCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjJfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDUwCQEFJGYyXzICCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgJfMgkAZAIJAGQCBQh3aFJlc1ZvbAUId2hNYXRWb2wFCndoR29vZHNWb2wBDGdldFdhcmVob3VzZQMFd2hLZXkJbGFuZEluZGV4CmluZnJhTGV2ZWwECXZvbFByZWZpeAkArAICCQCsAgIJAKQDAQUJbGFuZEluZGV4AgFfCQCkAwEFCmluZnJhTGV2ZWwEB3doVG90YWwJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEFCXZvbFByZWZpeAQFd2hTdHIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUFd2hLZXkJAKwCAgUJdm9sUHJlZml4Ahs6MF8wXzBfMF8wXzA6MF8wXzBfMF8wXzA6OjAEAndoCQC8CQIFBXdoU3RyAgE6BAp3aE9jY3VwaWVkCQEXZ2V0V2FyZWhvdXNlT2NjdXBpZWRWb2wBBQJ3aAQGd2hMb2Z0AwkAZgIABQkAkAMBBQJ3aAkAuQkCCQDMCAICATAJAMwIAgkApAMBBQp3aE9jY3VwaWVkCQDMCAIJAKQDAQkAZQIFB3doVG90YWwFCndoT2NjdXBpZWQJAMwIAgkApAMBBQd3aFRvdGFsBQNuaWwCAV8EBGxvZnQJALUJAgkAkQMCBQJ3aAUJd2hJZHhMT0ZUAgFfBAh3aExvY2tlZAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFCXZvbExvY2tlZAQDb2NjAwkAZgIJAJADAQUEbG9mdAABCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQFCndoT2NjdXBpZWQJALkJAgkAzAgCCQCkAwEFCHdoTG9ja2VkCQDMCAIJAKQDAQUDb2NjCQDMCAIJAKQDAQkAZQIJAGUCBQd3aFRvdGFsBQh3aExvY2tlZAUDb2NjCQDMCAIJAKQDAQUHd2hUb3RhbAUDbmlsAgFfCQDMCAIJAJEDAgUCd2gFC3doSWR4TGV2ZWxzCQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUCd2gFCHdoSWR4UmVzAgFfBQZOVU1SRVMJAJEDAgUCd2gFCHdoSWR4UmVzAgswXzBfMF8wXzBfMAkAzAgCAwkAAAIJAJADAQkAtQkCCQCRAwIFAndoBQh3aElkeE1hdAIBXwUGTlVNUkVTCQCRAwIFAndoBQh3aElkeE1hdAILMF8wXzBfMF8wXzAJAMwIAgkAkQMCBQJ3aAUJd2hJZHhQcm9kCQDMCAIFBndoTG9mdAUDbmlsARVnZXRXYXJlaG91c2VTcGFjZUxlZnQBCWN1cnJlbnRXaAQLb2NjdXBpZWRWb2wJARdnZXRXYXJlaG91c2VPY2N1cGllZFZvbAEFCWN1cnJlbnRXaAQPY3VycldoTG9ja2VkVm9sCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUAgFfBQl2b2xMb2NrZWQJAGUCCQBlAgkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzBQtvY2N1cGllZFZvbAUPY3VycldoTG9ja2VkVm9sAQh0b1ZvbHVtZQIGYW1vdW50B3BrZ1NpemUEBHBrZ3MDCQBnAgUGYW1vdW50AAAJAGkCCQBlAgkAZAIFBmFtb3VudAUHcGtnU2l6ZQABBQdwa2dTaXplCQEBLQEJAGkCCQBlAgkAZAIJAQEtAQUGYW1vdW50BQdwa2dTaXplAAEFB3BrZ1NpemUJAGgCBQRwa2dzBQVNVUxUOAEJbW92ZVN0dWZmAwpjYXJnb1BhcnRzCWN1cnJlbnRXaAtjdXJyZW50UGFjawMJAQIhPQIJAJADAQUKY2FyZ29QYXJ0cwADCQACAQI0Y2FyZ29MaXN0U3RyIHNob3VsZCBjb250YWluIGV4YWN0bHkgMiAnOicgc2VwYXJhdG9ycwQIcmVzUGFydHMJALUJAgkAkQMCBQpjYXJnb1BhcnRzAAACAV8ECG1hdFBhcnRzCQC1CQIJAJEDAgUKY2FyZ29QYXJ0cwABAgFfBAlwcm9kUGFydHMDCQAAAgkAkQMCBQpjYXJnb1BhcnRzAAICAAUDbmlsCQC1CQIJAJEDAgUKY2FyZ29QYXJ0cwACAgFfAwkBAiE9AgkAkAMBBQhyZXNQYXJ0cwUGTlVNUkVTCQACAQIgQWxsIDYgcmVzb3VyY2VzIHNob3VsZCBiZSBwYXNzZWQDCQECIT0CCQCQAwEFCG1hdFBhcnRzBQZOVU1SRVMJAAIBAiBBbGwgNiBtYXRlcmlhbHMgc2hvdWxkIGJlIHBhc3NlZAQLd2hTcGFjZUxlZnQJARVnZXRXYXJlaG91c2VTcGFjZUxlZnQBBQljdXJyZW50V2gECWN1cnJXaFJlcwkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8ECWN1cnJXaE1hdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhNYXQCAV8ECmN1cnJXaFByb2QDCQAAAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAIABQNuaWwJALUJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAIBXwQOY3VycmVudFBhY2tSZXMJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMCAV8EDmN1cnJlbnRQYWNrTWF0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBA9jdXJyZW50UGFja1Byb2QDCQAAAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgAFA25pbAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAV8KAQNtdlICA2FjYwRpdGVtBAFpCAUDYWNjAl8xBAJhbQkBDXBhcnNlSW50VmFsdWUBBQRpdGVtBAN3aHIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQljdXJyV2hSZXMFAWkEA2JwcgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmN1cnJlbnRQYWNrUmVzBQFpAwkAAAIFAmFtAAAJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCRAwIFCWN1cnJXaFJlcwUBaQkAzQgCCAUDYWNjAl8zCQCRAwIFDmN1cnJlbnRQYWNrUmVzBQFpCAUDYWNjAl80AwkAZgIFAmFtAAADCQBmAgUCYW0FA2JwcgkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byB0YWtlIAUEaXRlbQIZIGZyb20gYmFja3BhY2ssIGJ1dCBvbmx5IAkApAMBBQNicHICCiBhdmFpbGFibGUJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGQCBQN3aHIFAmFtCQDNCAIIBQNhY2MCXzMJAKQDAQkAZQIFA2JwcgUCYW0JAGQCCAUDYWNjAl80BQJhbQMJAGYCCQEBLQEFAmFtBQN3aHIJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAJAKQDAQkBAS0BBQJhbQIaIGZyb20gd2FyZWhvdXNlLCBidXQgb25seSAJAKQDAQUDd2hyAgogYXZhaWxhYmxlCQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkApAMBCQBkAgUDd2hyBQJhbQkAzQgCCAUDYWNjAl8zCQCkAwEJAGUCBQNicHIFAmFtCQBkAggFA2FjYwJfNAUCYW0EAXIKAAIkbAUIcmVzUGFydHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCWCgQAAAUDbmlsBQNuaWwAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEDbXZSAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGCgEDbXZNAgNhY2MEaXRlbQQBaQgFA2FjYwJfMQQCYW0JAQ1wYXJzZUludFZhbHVlAQUEaXRlbQQDd2htCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJY3VycldoTWF0BQFpBANicG0JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5jdXJyZW50UGFja01hdAUBaQMJAAACBQJhbQAACQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkAkQMCBQljdXJyV2hNYXQFAWkJAM0IAggFA2FjYwJfMwkAkQMCBQ5jdXJyZW50UGFja01hdAUBaQgFA2FjYwJfNAMJAGYCBQJhbQAAAwkAZgIFAmFtBQNicG0JAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAFBGl0ZW0CGSBmcm9tIGJhY2twYWNrLCBidXQgb25seSAJAKQDAQUDYnBtAgogYXZhaWxhYmxlCQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkApAMBCQBkAgUDd2htBQJhbQkAzQgCCAUDYWNjAl8zCQCkAwEJAGUCBQNicG0FAmFtCQBkAggFA2FjYwJfNAUCYW0DCQBmAgkBAS0BBQJhbQUDd2htCQACAQkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHRha2UgCQCkAwEJAQEtAQUCYW0CGiBmcm9tIHdhcmVob3VzZSwgYnV0IG9ubHkgCQCkAwEFA3dobQIKIGF2YWlsYWJsZQkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZAIFA3dobQUCYW0JAM0IAggFA2FjYwJfMwkApAMBCQBlAgUDYnBtBQJhbQkAZAIIBQNhY2MCXzQFAmFtBAFtCgACJGwFCG1hdFBhcnRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlgoEAAAFA25pbAUDbmlsCAUBcgJfNAoBBSRmMV8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEDbXZNAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYxXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYxXzICCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECBQUkYWNjMAAAAAEAAgADAAQABQAGCgEDbXZQAgNhY2MEaXRlbQQBaQgFA2FjYwJfMQQCYW0JAQ1wYXJzZUludFZhbHVlAQUEaXRlbQQDd2hwAwkAZgIJAJADAQUKY3VycldoUHJvZAUBaQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCmN1cnJXaFByb2QFAWkAAAQDYnBwAwkAZgIJAJADAQUPY3VycmVudFBhY2tQcm9kBQFpCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUPY3VycmVudFBhY2tQcm9kBQFpAAADCQAAAgUCYW0AAAkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAKQDAQUDd2hwCQDNCAIIBQNhY2MCXzMJAKQDAQUDYnBwCAUDYWNjAl80AwkAZgIFAmFtAAADCQBmAgUCYW0FA2JwcAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byB0YWtlIAUEaXRlbQIZIGZyb20gYmFja3BhY2ssIGJ1dCBvbmx5IAkApAMBBQNicHACCiBhdmFpbGFibGUECGRlbHRhVm9sCQBlAgkBCHRvVm9sdW1lAgkAZAIFA3docAUCYW0FDlBST0RVQ1RQS0dTSVpFCQEIdG9Wb2x1bWUCBQN3aHAFDlBST0RVQ1RQS0dTSVpFCQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkApAMBCQBkAgUDd2hwBQJhbQkAzQgCCAUDYWNjAl8zCQCkAwEJAGUCBQNicHAFAmFtCQBkAggFA2FjYwJfNAUIZGVsdGFWb2wDCQBmAgkBAS0BBQJhbQUDd2hwCQACAQkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHRha2UgCQCkAwEJAQEtAQUCYW0CGiBmcm9tIHdhcmVob3VzZSwgYnV0IG9ubHkgCQCkAwEFA3docAIKIGF2YWlsYWJsZQQIZGVsdGFWb2wJAGUCCQEIdG9Wb2x1bWUCCQBkAgUDd2hwBQJhbQUOUFJPRFVDVFBLR1NJWkUJAQh0b1ZvbHVtZQIFA3docAUOUFJPRFVDVFBLR1NJWkUJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGQCBQN3aHAFAmFtCQDNCAIIBQNhY2MCXzMJAKQDAQkAZQIFA2JwcAUCYW0JAGQCCAUDYWNjAl80BQhkZWx0YVZvbAQBcAMJAQIhPQIJAJADAQUJcHJvZFBhcnRzAAAKAAIkbAUJcHJvZFBhcnRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlgoEAAAFA25pbAUDbmlsCAUBbQJfNAoBBSRmMl8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEDbXZQAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYyXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyA1MAkBBSRmMl8yAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIJAJYKBAAABQpjdXJyV2hQcm9kBQ9jdXJyZW50UGFja1Byb2QIBQFtAl80BAh2b2xTYWxkbwgFAXACXzQDCQBmAgUIdm9sU2FsZG8FC3doU3BhY2VMZWZ0CQACAQkArAICCQCsAgIJAKwCAgkArAICAhVBdHRlbXB0IHRvIHB1dCB0b3RhbCAJAKQDAQUIdm9sU2FsZG8CESBzdHVmZiwgYnV0IG9ubHkgCQCkAwEFC3doU3BhY2VMZWZ0AhUgd2FyZWhvdXNlIHNwYWNlIGxlZnQJAJkKBwkAuQkCCAUBcgJfMgIBXwkAuQkCCAUBbQJfMgIBXwkAuQkCCAUBcAJfMgIBXwkAuQkCCAUBcgJfMwIBXwkAuQkCCAUBbQJfMwIBXwkAuQkCCAUBcAJfMwIBXwUIdm9sU2FsZG8BEmV4cGVkaXRpb25JbnRlcm5hbAIGY2FsbGVyBHR4SWQECHVzZXJBZGRyCQClCAEFBmNhbGxlcgQGYmlnTnVtCQEDYWJzAQkAngMBBQR0eElkBAdmcmVlTnVtCQELdmFsdWVPckVsc2UCCQCfCAEJARJrZXlOZXh0RnJlZUxhbmROdW0ACQBkAgUPUFJFU0FMRU5VTUxBTkRTAAEEB2xhbmROdW0JAKQDAQUHZnJlZU51bQQMY29udGluZW50SWR4CQCgAwEJALsCAgUGYmlnTnVtBQVGSVZFWAQIdGVycmFpbnMJAQtnZW5UZXJyYWlucwIFBmJpZ051bQUMY29udGluZW50SWR4BAljb250aW5lbnQJAJEDAgUKY29udGluZW50cwUMY29udGluZW50SWR4BAVpc3N1ZQkAwggFCQEHbmZ0TmFtZQIFB2xhbmROdW0CAVMJALkJAgkAzAgCBQdsYW5kTnVtCQDMCAICAVMJAMwIAgUIdGVycmFpbnMJAMwIAgUJY29udGluZW50BQNuaWwCAV8AAQAABwQHYXNzZXRJZAkAuAgBBQVpc3N1ZQQCaWQJANgEAQUHYXNzZXRJZAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQESa2V5TmV4dEZyZWVMYW5kTnVtAAkAZAIFB2ZyZWVOdW0AAQkAzAgCBQVpc3N1ZQkAzAgCCQELU3RyaW5nRW50cnkCCQEQa2V5TGFuZFRvQXNzZXRJZAEFB2xhbmROdW0FAmlkCQDMCAIJAQtTdHJpbmdFbnRyeQIJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQJpZAUIdXNlckFkZHIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleUxhbmROdW1Ub093bmVyAQUHbGFuZE51bQUIdXNlckFkZHIJAMwIAgkBDEludGVnZXJFbnRyeQIJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQUCaWQAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIFAmlkBQh1c2VyQWRkcgAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFBmNhbGxlcgABBQdhc3NldElkBQNuaWwJAJQKAgUCaWQFCWNvbnRpbmVudAEMZmxpZ2h0Q29tbW9uAwh1c2VyQWRkcgdtZXNzYWdlA3NpZwMJAQEhAQkAxBMDBQdtZXNzYWdlBQNzaWcFA3B1YgkAAgECGHNpZ25hdHVyZSBkb2VzIG5vdCBtYXRjaAQFcGFydHMJALUJAgkAsAkBBQdtZXNzYWdlAgE7BAlmbGlnaHRMb2cJALUJAgkAkQMCBQVwYXJ0cwAAAgF8BAJocAkAtQkCCQCRAwIFCWZsaWdodExvZwUIZmxIZWFsdGgCAV8EBWN1ckhQCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCaHAAAAQFbmV3SFAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJocAABBAtuZXdMb2NUeFZlcgkAtQkCCQCRAwIFBXBhcnRzAAECAToEC25ld0xvY2F0aW9uCQCRAwIFC25ld0xvY1R4VmVyAAAEBHRpbWUJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQlmbGlnaHRMb2cFC2ZsVGltZXN0YW1wAwMJAGYCBQR0aW1lCQBkAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFEUZJVkVNSU5VVEVTTUlMTElTBgkAZgIJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAURRklWRU1JTlVURVNNSUxMSVMFBHRpbWUJAAIBCQCsAgIJAKwCAgkArAICAhxzaWduYXR1cmUgb3V0ZGF0ZWQ6IGxvZ1RpbWU9CQCkAwEFBHRpbWUCCSwgYmNUaW1lPQkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQJdHhGcm9tTXNnCQCRAwIFC25ld0xvY1R4VmVyAAEEBmxhc3RUeAkBC3ZhbHVlT3JFbHNlAgkAoggBCQERa2V5TGFzdFR4SWRCeVVzZXIBBQh1c2VyQWRkcgIAAwkBAiE9AgUGbGFzdFR4BQl0eEZyb21Nc2cJAAIBCQCsAgIJAKwCAgkArAICAh5UeCBpZHMgZG9uJ3QgbWF0Y2ghIEluIHN0YXRlOiAFBmxhc3RUeAIKLCBpbiBtc2c6IAUJdHhGcm9tTXNnBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFCHVzZXJBZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQEBW1heEhQCQEJbWF4SGVhbHRoAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMa2V5RHVja0xldmVsAQULZHVja0Fzc2V0SWQAAAQMb2xkRnJvbVN0YXRlCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aAUFbWF4SFADCQECIT0CBQxvbGRGcm9tU3RhdGUFBWN1ckhQCQACAQkArAICCQCsAgIJAKwCAgIKb2xkSGVhbHRoPQkApAMBBQxvbGRGcm9tU3RhdGUCLyBmcm9tIHN0YXRlIGRvZXMgbm90IG1hdGNoIG9uZSBmcm9tIGZsaWdodCBsb2c9CQCkAwEFBWN1ckhQAwkAZwIAAAUFY3VySFAJAAIBAh5Zb3UgY2FuJ3QgZmx5IHdpdGggemVybyBoZWFsdGgEBWJvbnVzAwkAZgIJAJADAQUJZmxpZ2h0TG9nBQdmbEJvbnVzCQCRAwIFCWZsaWdodExvZwUHZmxCb251cwIABAhwcm9kVXNlZAMJAGYCCQCQAwEFCWZsaWdodExvZwULZmxQcm9kc1VzZWQJAJEDAgUJZmxpZ2h0TG9nBQtmbFByb2RzVXNlZAIABApzZW50QW1vdW50AwMJAGYCBQVuZXdIUAAACQAAAgUFYm9udXMCASQHCQEFYXNJbnQBCQD8BwQFDHJlc3RDb250cmFjdAINc2VuZFVzZHRQcml6ZQkAzAgCBQh1c2VyQWRkcgUDbmlsBQNuaWwAAAkAlwoFBQVuZXdIUAULZHVja0Fzc2V0SWQFCnNlbnRBbW91bnQFC25ld0xvY2F0aW9uBQhwcm9kVXNlZAEQZXhwZWRpdGlvbkNvbW1vbgQGY2FsbGVyBHR4SWQHbWVzc2FnZQNzaWcECHVzZXJBZGRyCQClCAEFBmNhbGxlcgQBZgkBDGZsaWdodENvbW1vbgMFCHVzZXJBZGRyBQdtZXNzYWdlBQNzaWcEC2R1Y2tBc3NldElkCAUBZgJfMgQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQFbUxpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8EBm5ld01hdAkAuQkCCQERc3VidHJhY3RNYXRlcmlhbHMDBgUFbUxpc3QFDEVYUE1BVEVSSUFMUwIBXwQFZXFLZXkJARBrZXlEdWNrRXF1aXBtZW50AQULZHVja0Fzc2V0SWQECWN1cnJlbnRFcQkBC3ZhbHVlT3JFbHNlAgkAoggBBQVlcUtleQIXLDssXyw7LF8sOyxfLDssXyw7LF8sOywEBW5ld0VxCQERc3VidHJhY3RFcXVpcG1lbnQCBQljdXJyZW50RXEIBQFmAl81AwkAZwIAAAgFAWYCXzEJAJUKAwkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoAAAJAMwIAgkBC1N0cmluZ0VudHJ5AgUFZXFLZXkFBW5ld0VxBQNuaWwCAAAABAFlCQESZXhwZWRpdGlvbkludGVybmFsAgUGY2FsbGVyBQR0eElkBAJpZAgIBQFlAl8yAl8xCQCVCgMJAM0IAgkAzQgCCQDNCAIJAM0IAggFAWUCXzEJAQtTdHJpbmdFbnRyeQIJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAkAuQkCCQDMCAIICAUBZQJfMgJfMgkAzAgCAgFMCQDMCAIFAmlkBQNuaWwCAV8JAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgIBQFmAl8xCQELU3RyaW5nRW50cnkCBQVlcUtleQUFbmV3RXEJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAzAgCBQZuZXdNYXQJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwCAToFAmlkCAUBZgJfMwEMYXBwbHlCb251c2VzAgtsYW5kQXNzZXRJZAZwaWVjZXMECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAlhcnRQaWVjZXMJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQAAAQEYWRkNgkAaQIFCmluZnJhTGV2ZWwABgQEYWRkNwkAaQIFCmluZnJhTGV2ZWwABwkAZAIJAGQCBQ9EQUlMWVJFU0JZUElFQ0UJAGsDBQ9EQUlMWVJFU0JZUElFQ0UJAGQCCQBkAgUKaW5mcmFMZXZlbAUEYWRkNgkAaAIAAgUEYWRkNwAFCQBrAwUPREFJTFlSRVNCWVBJRUNFBQlhcnRQaWVjZXMJAGgCBQZwaWVjZXMABQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBGFkZHIJY2xhaW1Nb2RlDWxhbmRBc3NldElkSW4EDSR0MDI5MjAzMjk3NDIDCQAAAgUJY2xhaW1Nb2RlBQtjbGFpbU1vZGVXaAkAlAoCBQ1sYW5kQXNzZXRJZEluCQELdmFsdWVPckVsc2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICAAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAoggBCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgQDbG9jCQC1CQIJAQV2YWx1ZQEFC2N1ckxvY2F0aW9uAgFfAwkBAiE9AgkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCAUwJAAIBCQCsAgIJAKwCAgIWRHVjayBsb2NhdGlvbiB0eXBlIGlzIAkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCESwgYnV0IHNob3VsZCBiZSBMCQCUCgIJAJEDAgUDbG9jBQhsb2NJZHhJZAULZHVja0Fzc2V0SWQEC2xhbmRBc3NldElkCAUNJHQwMjkyMDMyOTc0MgJfMQQGZHVja0lkCAUNJHQwMjkyMDMyOTc0MgJfMgQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAQJc2F2ZWRUaW1lCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQUHdGltZUtleQkArAICCQCsAgICBUxhbmQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBAFkCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwkAlgoEBQZkdWNrSWQFC2xhbmRBc3NldElkBQFkBQlzYXZlZFRpbWUBEGNsYWltUmVzSW50ZXJuYWwEBGFkZHIGYW1vdW50CWNsYWltTW9kZQ1sYW5kQXNzZXRJZEluAwkAZgIAAAUGYW1vdW50CQACAQIPTmVnYXRpdmUgYW1vdW50BAFjCQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBQRhZGRyBQljbGFpbU1vZGUFDWxhbmRBc3NldElkSW4ECGxhbmRTaXplCQCRAwIIBQFjAl8zBQtyZWNMYW5kU2l6ZQQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIIBQFjAl8zBQtyZWNUZXJyYWlucwQJZGVsdGFUaW1lCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAIBQFjAl80AwkAZgIAAAUJZGVsdGFUaW1lCQACAQkArAICCQCsAgIJAKwCAgImU2F2ZWQgdGltZXN0YW1wIGlzIGluIGZ1dHVyZSwgc2F2ZWQgPSAJAKQDAQgFAWMCXzQCDCwgY3VycmVudCA9IAkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQUIbGFuZFNpemUEFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UJAQxhcHBseUJvbnVzZXMCCAUBYwJfMgUGcGllY2VzBAhhdmFpbFJlcwkAawMFCWRlbHRhVGltZQkAaAIFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UFBnBpZWNlcwUJREFZTUlMTElTAwkAZgIFBmFtb3VudAUIYXZhaWxSZXMJAAIBCQCsAgIJAKwCAgkArAICAiJOb3QgZW5vdWdoIHJlc291cmNlcywgYXZhaWxhYmxlID0gCQCkAwEFCGF2YWlsUmVzAg4sIHJlcXVlc3RlZCA9IAkApAMBBQZhbW91bnQEDG5ld0RlbHRhVGltZQkAawMJAGUCBQhhdmFpbFJlcwUGYW1vdW50BQlEQVlNSUxMSVMJAGgCBRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlBQZwaWVjZXMEDG5ld1RpbWVzdGFtcAkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQxuZXdEZWx0YVRpbWUECWxhbmRJbmRleAkAaQIFBnBpZWNlcwUFU1NJWkUECnJlc1RvQ2xhaW0JAQl2aXJ0Q2xhaW0EBQ10ZXJyYWluQ291bnRzCQBlAgUJZGVsdGFUaW1lBQxuZXdEZWx0YVRpbWUFCWxhbmRJbmRleAUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQQFd2hLZXkJARJrZXlXYXJlaG91c2VCeUxhbmQBCAUBYwJfMgQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEIBQFjAl8yAAAECWN1cnJlbnRXaAkBDGdldFdhcmVob3VzZQMFBXdoS2V5BQlsYW5kSW5kZXgFCmluZnJhTGV2ZWwEBGxvZnQJALUJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4TE9GVAIBXwQLd2hTcGFjZUxlZnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlAwMJAAACBQljbGFpbU1vZGUFC2NsYWltTW9kZVdoCQBmAgUGYW1vdW50BQt3aFNwYWNlTGVmdAcJAAIBCQCsAgIJAKwCAgIFT25seSAJAKQDAQULd2hTcGFjZUxlZnQCGCBzcGFjZSBsZWZ0IGluIHdhcmVob3VzZQQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEIBQFjAl8xBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEDmN1cnJlbnRQYWNrUmVzCQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfBAxjdXJyZW50V2hSZXMJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfBA0kdDAzMjExNjMyOTg3AwkAAAIFCWNsYWltTW9kZQULY2xhaW1Nb2RlV2gJAJYKBAkBBmFkZFJlcwUFDGN1cnJlbnRXaFJlcwUNdGVycmFpbkNvdW50cwkAZQIFCWRlbHRhVGltZQUMbmV3RGVsdGFUaW1lBQlsYW5kSW5kZXgFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkCAUKcmVzVG9DbGFpbQJfMgkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlCAUKcmVzVG9DbGFpbQJfMgMJAAACBQljbGFpbU1vZGUFDWNsYWltTW9kZUR1Y2sJAJYKBAkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzCQEGYWRkUmVzBQUOY3VycmVudFBhY2tSZXMFDXRlcnJhaW5Db3VudHMJAGUCBQlkZWx0YVRpbWUFDG5ld0RlbHRhVGltZQUJbGFuZEluZGV4BRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlBAVkaXN0cgkBDWRpc3RyaWJ1dGVSZXMEBQxjdXJyZW50V2hSZXMFDmN1cnJlbnRQYWNrUmVzBQpyZXNUb0NsYWltBQt3aFNwYWNlTGVmdAQEd2hBbQkAlwMBCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlCQDMCAIIBQpyZXNUb0NsYWltAl8yBQNuaWwJAJYKBAgFBWRpc3RyAl8xCAUFZGlzdHICXzIJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQFBHdoQW0JAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQUEd2hBbQQFd2hSZXMIBQ0kdDAzMjExNjMyOTg3Al8xBAVicFJlcwgFDSR0MDMyMTE2MzI5ODcCXzIEBWxvZnRPCAUNJHQwMzIxMTYzMjk4NwJfMwQFbG9mdEYIBQ0kdDAzMjExNjMyOTg3Al80CQCXCgUJAMwIAgkBDEludGVnZXJFbnRyeQIJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQgFAWMCXzIFDG5ld1RpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYCAUBYwJfMgUEYWRkcgUMbmV3VGltZXN0YW1wBQNuaWwFBWJwS2V5CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgUFYnBSZXMJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwFBXdoS2V5CQDMCAIJAJEDAgUJY3VycmVudFdoBQt3aElkeExldmVscwkAzAgCBQV3aFJlcwkAzAgCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhNYXQJAMwIAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAkAzAgCCQC5CQIJAMwIAgkAkQMCBQRsb2Z0BQl2b2xMb2NrZWQJAMwIAgkApAMBBQVsb2Z0TwkAzAgCCQCkAwEFBWxvZnRGCQDMCAIJAJEDAgUEbG9mdAUIdm9sVG90YWwFA25pbAIBXwUDbmlsAQhjbGFpbUFsbAQEYWRkcgtsYW5kQXNzZXRJZAZwaWVjZXMJY2xhaW1Nb2RlBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkBAlzYXZlZFRpbWUJAQV2YWx1ZQEJAJ8IAQUHdGltZUtleQQIYXZhaWxSZXMJAGgCCQBrAwkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQlzYXZlZFRpbWUJAQxhcHBseUJvbnVzZXMCBQtsYW5kQXNzZXRJZAUGcGllY2VzBQlEQVlNSUxMSVMFBnBpZWNlcwkBEGNsYWltUmVzSW50ZXJuYWwEBQRhZGRyBQhhdmFpbFJlcwUJY2xhaW1Nb2RlBQtsYW5kQXNzZXRJZAENdXBJbmZyYUNvbW1vbgQMc2hvdWxkVXNlTWF0BmNhbGxlcg1wYXltZW50QW1vdW50C2xhbmRBc3NldElkBARhZGRyCQClCAEFBmNhbGxlcgQBYwkBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwUEYWRkcgUTY2xhaW1Nb2RlV2hUaGVuRHVjawULbGFuZEFzc2V0SWQEBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAggFAWMCXzMFC3JlY0xhbmRTaXplBAhpbmZyYUtleQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBCAUBYwJfMgQIY3VyTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUIaW5mcmFLZXkAAAMJAGcCBQhjdXJMZXZlbAADCQACAQImQ3VycmVudGx5IG1heCBpbmZyYXN0cnVjdHVyZSBsZXZlbCA9IDMECG5ld0xldmVsCQBkAgUIY3VyTGV2ZWwAAQQEY29zdAkAawMFFUluZnJhVXBncmFkZUNvc3RTVXNkdAkAaAIFBnBpZWNlcwUIbmV3TGV2ZWwFBVNTSVpFAwMJAQEhAQUMc2hvdWxkVXNlTWF0CQECIT0CBQ1wYXltZW50QW1vdW50BQRjb3N0BwkAAgEJAKwCAgIbUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgCQCkAwEFBGNvc3QEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBCAUBYwJfMQQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAVtTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQHbWF0VXNlZAkAawMFEUluZnJhVXBncmFkZUNvc3RTCQBoAgUGcGllY2VzBQhuZXdMZXZlbAUFU1NJWkUEBm5ld01hdAkAuQkCCQERc3VidHJhY3RNYXRlcmlhbHMDBQxzaG91bGRVc2VNYXQFBW1MaXN0BQdtYXRVc2VkAgFfBAtjbGFpbVJlc3VsdAkBCGNsYWltQWxsBAUEYWRkcggFAWMCXzIFBnBpZWNlcwUTY2xhaW1Nb2RlV2hUaGVuRHVjawQGd2hEYXRhCAULY2xhaW1SZXN1bHQCXzUEBm9sZFZvbAkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQkAkQMCBQZ3aERhdGEFC3doSWR4TGV2ZWxzBApuZXdWb2xEYXRhCQC5CQIJAMwIAgkAkQMCCQC1CQIJAJEDAgUGd2hEYXRhBQt3aElkeExldmVscwIBXwAACQDMCAIJAKQDAQUIbmV3TGV2ZWwFA25pbAIBXwQGbmV3Vm9sCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBBQpuZXdWb2xEYXRhBARsb2Z0CQC1CQIJAJEDAgUGd2hEYXRhBQl3aElkeExPRlQCAV8ECm5ld0xvZnRTdHIJALkJAgkAzAgCCQCRAwIFBGxvZnQFCXZvbExvY2tlZAkAzAgCCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkCQDMCAIJAKQDAQkAZQIJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQUGbmV3Vm9sBQZvbGRWb2wJAMwIAgkApAMBBQZuZXdWb2wFA25pbAIBXwkAlQoDCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFCGluZnJhS2V5BQhuZXdMZXZlbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIIBQFjAl8yBQRhZGRyBQhuZXdMZXZlbAkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCCAULY2xhaW1SZXN1bHQCXzMFCGJwSWR4UmVzCQDMCAIFBm5ld01hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgkAzAgCCQELU3RyaW5nRW50cnkCCAULY2xhaW1SZXN1bHQCXzQJALkJAgkAzAgCBQpuZXdWb2xEYXRhCQDMCAIJAJEDAgUGd2hEYXRhBQh3aElkeFJlcwkAzAgCCQCRAwIFBndoRGF0YQUId2hJZHhNYXQJAMwIAgkAkQMCBQZ3aERhdGEFCXdoSWR4UHJvZAkAzAgCBQpuZXdMb2Z0U3RyBQNuaWwCAToFA25pbAgFC2NsYWltUmVzdWx0Al8xBQhuZXdMZXZlbAUHbWF0VXNlZAEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCC2R1Y2tBc3NldElkB2RlbHRhWFADCQEBIQEFD0tTQUxMT1dYUExFVkVMUwkAlAoCBQNuaWwAAAQGbHZsS2V5CQEMa2V5RHVja0xldmVsAQULZHVja0Fzc2V0SWQEBXhwS2V5CQEJa2V5RHVja1hQAQULZHVja0Fzc2V0SWQEAnhwCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAUFeHBLZXkAAAQFbmV3WFAJAGQCBQJ4cAUHZGVsdGFYUAQJbHZsUG9pbnRzCQEHbGV2ZWxVcAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0BQZsdmxLZXkAAAUFbmV3WFAECWtleVBvaW50cwkBEWtleUR1Y2tGcmVlUG9pbnRzAQULZHVja0Fzc2V0SWQJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUGbHZsS2V5CQCRAwIFCWx2bFBvaW50cwAACQDMCAIJAQxJbnRlZ2VyRW50cnkCBQV4cEtleQUFbmV3WFAJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtleVBvaW50cwkAZAIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5UG9pbnRzAAAJAJEDAgUJbHZsUG9pbnRzAAEFA25pbAUFbmV3WFABFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCBGFkZHIHZGVsdGFYUAMJAQEhAQUPS1NBTExPV1hQTEVWRUxTCQCUCgIFA25pbAAABAZsdmxLZXkJAQxrZXlVc2VyTGV2ZWwBBQRhZGRyBAV4cEtleQkBCWtleVVzZXJYUAEFBGFkZHIEAnhwCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAUFeHBLZXkAAAQFbmV3WFAJAGQCBQJ4cAUHZGVsdGFYUAQJbHZsUG9pbnRzCQEHbGV2ZWxVcAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0BQZsdmxLZXkAAAUFbmV3WFAECWtleVBvaW50cwkBEWtleVVzZXJGcmVlUG9pbnRzAQUEYWRkcgkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQZsdmxLZXkJAJEDAgUJbHZsUG9pbnRzAAAJAMwIAgkBDEludGVnZXJFbnRyeQIFBXhwS2V5BQVuZXdYUAkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa2V5UG9pbnRzCQBkAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlQb2ludHMAAAkAkQMCBQlsdmxQb2ludHMAAQUDbmlsBQVuZXdYUAESYWN0aXZhdGVPbmJvYXJkQXJ0AQRhZGRyBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQECHJlZkJ5S2V5CQEPa2V5QWRkcmVzc1JlZkJ5AQUEYWRkcgQFcmVmQnkJAKIIAQUIcmVmQnlLZXkDCQEBIQEJAQlpc0RlZmluZWQBBQVyZWZCeQkAAgECKVlvdSBhcmUgbm90IGVsaWdpYmxlIGZvciBPTkJPQVJEIGFydGlmYWN0BAZhcnRLZXkJARxrZXlPbmJvYXJkQXJ0RHVja0FjdGl2YXRlZEJ5AQUEYWRkcgQHYXJ0RHVjawkAoggBBQZhcnRLZXkDCQEJaXNEZWZpbmVkAQUHYXJ0RHVjawkAAgEJAKwCAgIvWW91IGFscmVhZHkgdXNlZCB5b3VyIE9OQk9BUkQgYXJ0aWZhY3Qgb24gZHVjayAJAQV2YWx1ZQEFB2FydER1Y2sEEGR1Y2tBY3RpdmF0b3JLZXkJARxrZXlPbmJvYXJkQXJ0QWN0aXZhdGVkT25EdWNrAQULZHVja0Fzc2V0SWQEDWR1Y2tBY3RpdmF0b3IJAKIIAQUQZHVja0FjdGl2YXRvcktleQMJAQlpc0RlZmluZWQBBQ1kdWNrQWN0aXZhdG9yCQACAQkArAICCQCsAgIJAKwCAgIJVGhlIGR1Y2sgBQtkdWNrQXNzZXRJZAI0IGFscmVhZHkgZ290IHBvaW50cyBmcm9tIE9OQk9BUkQgYXJ0aWZhY3QgZnJvbSB1c2VyIAkBBXZhbHVlAQUNZHVja0FjdGl2YXRvcgkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBmFydEtleQULZHVja0Fzc2V0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUQZHVja0FjdGl2YXRvcktleQUEYWRkcgUDbmlsCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQFCXhwT25ib2FyZAJfMQESYWN0aXZhdGVQcmVzYWxlQXJ0AgRhZGRyDWxhbmRBc3NldElkSW4EAWMJARRjaGVja0NsYWltQ29uZGl0aW9ucwMFBGFkZHIFE2NsYWltTW9kZVdoVGhlbkR1Y2sFDWxhbmRBc3NldElkSW4EC2xhbmRBc3NldElkCAUBYwJfMgQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCAUBYwJfMwULcmVjTGFuZFNpemUEDWFjdGl2YXRpb25LZXkJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkAwkAZgIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUNYWN0aXZhdGlvbktleQAAAAAJAAIBAiVQcmVzYWxlIGFydGlmYWN0IGlzIGFscmVhZHkgYWN0aXZhdGVkAwkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCCAUBYwJfMwUKcmVjTGFuZE51bQUPUFJFU0FMRU5VTUxBTkRTCQACAQkArAICCQCsAgIJAKwCAgUKTEFORFBSRUZJWAIBIAULbGFuZEFzc2V0SWQCJSBpcyBub3QgZWxpZ2libGUgZm9yIHByZXNhbGUgYXJ0aWZhY3QEC2NsYWltUmVzdWx0CQEIY2xhaW1BbGwEBQRhZGRyBQtsYW5kQXNzZXRJZAUGcGllY2VzBRNjbGFpbU1vZGVXaFRoZW5EdWNrCQDNCAIJAM0IAgkAzQgCCQDNCAIIBQtjbGFpbVJlc3VsdAJfMQkBDEludGVnZXJFbnRyeQIFDWFjdGl2YXRpb25LZXkFBnBpZWNlcwkBDEludGVnZXJFbnRyeQIJASVrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQFBGFkZHIFBnBpZWNlcwkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al8yCQC5CQIIBQtjbGFpbVJlc3VsdAJfMwIBOgkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al80CQC5CQIIBQtjbGFpbVJlc3VsdAJfNQIBOgENbWVyZ2VJbnRlcm5hbAcLbmV3TGFuZFNpemUIbmV3TGV2ZWwHZm9ybXVsYQRhZGRyDGxhbmRBc3NldElkcwR0eElkB25lZWRNYXQEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAoBCmNoZWNrTWVyZ2UCA2FjYwtsYW5kQXNzZXRJZAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAQJc2F2ZWRUaW1lCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQUHdGltZUtleQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMEAWQJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfBAljb250aW5lbnQJAJEDAgUBZAUMcmVjQ29udGluZW50AwMJAQIhPQIIBQNhY2MCXzMCAAkBAiE9AggFA2FjYwJfMwUJY29udGluZW50BwkAAgECLkxhbmRzIHNob3VsZCBiZSBvbiB0aGUgc2FtZSBjb250aW5lbnQgdG8gbWVyZ2UECGxhbmRTaXplCQCRAwIFAWQFC3JlY0xhbmRTaXplBAdzaXplc0luCAUDYWNjAl8xBAFpCQETdmFsdWVPckVycm9yTWVzc2FnZQIJALMJAgUHc2l6ZXNJbgUIbGFuZFNpemUCJ1lvdSBoYXZlbid0IHBhc3NlZCBhbGwgdGhlIGxhbmRzIG5lZWRlZAQIc2l6ZXNPdXQJAKwCAgkArwICBQdzaXplc0luBQFpCQCwAgIFB3NpemVzSW4JAGQCBQFpAAEEBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEFCGxhbmRTaXplBARhcnRzCQBkAggFA2FjYwJfMgkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAAABAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAQIcmVxTGV2ZWwEByRtYXRjaDAFCGxhbmRTaXplAwkAAAICAVMFByRtYXRjaDAAAwMJAAACAgFNBQckbWF0Y2gwAAQDCQAAAgIBTAUHJG1hdGNoMAAFAwkAAAICAlhMBQckbWF0Y2gwAAYJAAIBAhpPbmx5IFMsIE0sIEwsIFhMIGNhbiBtZXJnZQMJAQIhPQIFCmluZnJhTGV2ZWwFCHJlcUxldmVsCQACAQIiQWxsIGxhbmRzIHNob3VsZCBiZSBtYXhlZCB0byBtZXJnZQQHbGFuZE51bQkAkQMCBQFkBQpyZWNMYW5kTnVtBA10ZXJyYWluQ291bnRzCQENY291bnRUZXJyYWlucwEJAJEDAgUBZAULcmVjVGVycmFpbnMECWRlbHRhVGltZQkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQlzYXZlZFRpbWUDCQBmAgAABQlkZWx0YVRpbWUJAAIBCQCsAgIJAKwCAgkArAICAiZTYXZlZCB0aW1lc3RhbXAgaXMgaW4gZnV0dXJlLCBzYXZlZCA9IAkApAMBBQlzYXZlZFRpbWUCDCwgY3VycmVudCA9IAkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQkBDGFwcGx5Qm9udXNlcwIFC2xhbmRBc3NldElkBQZwaWVjZXMECWxhbmRJbmRleAkAaQIFBnBpZWNlcwUFU1NJWkUEBWJwUmVzCQEGYWRkUmVzBQkAtQkCCAUDYWNjAl80AgFfBQ10ZXJyYWluQ291bnRzBQlkZWx0YVRpbWUFCWxhbmRJbmRleAUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQQFcHJvcHMJARl1cGRhdGVQcm9wb3J0aW9uc0ludGVybmFsBAkAtQkCCAUDYWNjAl82AgFfBQ10ZXJyYWluQ291bnRzBQlsYW5kSW5kZXgA////////////AQQFbGFuZHMIBQNhY2MCXzcEA2lkeAkAzwgCBQVsYW5kcwULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBBQNpZHgJAAIBCQCsAgICIFlvdXIgc3Rha2VkIGxhbmRzIGRvbid0IGNvbnRhaW4gBQtsYW5kQXNzZXRJZAQJY3VzdG9tS2V5CQEaa2V5TGFuZEFzc2V0SWRUb0N1c3RvbU5hbWUBBQtsYW5kQXNzZXRJZAQKY3VzdG9tTmFtZQkBC3ZhbHVlT3JFbHNlAgkAoggBBQljdXN0b21LZXkCAAkAmgoIBQhzaXplc091dAUEYXJ0cwUJY29udGluZW50BQVicFJlcwkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCAUDYWNjAl81CQELRGVsZXRlRW50cnkBCQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkxBTkRQUkVGSVgFC2xhbmRBc3NldElkBQRhZGRyCQELRGVsZXRlRW50cnkBCQEQa2V5TGFuZFRvQXNzZXRJZAEFB2xhbmROdW0JAQtEZWxldGVFbnRyeQEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIFC2xhbmRBc3NldElkBQRhZGRyCQELRGVsZXRlRW50cnkBCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQkBJWtleUxhbmRBcnRTdGF0dXNCeVR5cGVBc3NldElkQW5kT3duZXIDBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAUEYWRkcgkBC0RlbGV0ZUVudHJ5AQkBEWtleUxhbmROdW1Ub093bmVyAQUHbGFuZE51bQkBC0RlbGV0ZUVudHJ5AQkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBBQljdXN0b21LZXkJAQtEZWxldGVFbnRyeQEJARprZXlMYW5kQ3VzdG9tTmFtZVRvQXNzZXRJZAEFCmN1c3RvbU5hbWUJAQRCdXJuAgkA2QQBBQtsYW5kQXNzZXRJZAABBQVwcm9wcwkA0QgCBQVsYW5kcwkBBXZhbHVlAQUDaWR4CQBkAggFA2FjYwJfOAUGcGllY2VzBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQHcHJvcFN0cgkBC3ZhbHVlT3JFbHNlAgkAoggBCQERa2V5UmVzUHJvcG9ydGlvbnMAAgswXzBfMF8wXzBfMAQIbGFuZHNLZXkJARVrZXlTdGFrZWRMYW5kc0J5T3duZXIBBQRhZGRyBAhsYW5kc1N0cgkAoggBBQhsYW5kc0tleQQHbGFuZHNJbgMJAQlpc0RlZmluZWQBBQhsYW5kc1N0cgkAvQkCCQEFdmFsdWUBBQhsYW5kc1N0cgIBXwUDbmlsBAFyCgACJGwFDGxhbmRBc3NldElkcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJoKCAUHZm9ybXVsYQAAAgAJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzBQNuaWwFB3Byb3BTdHIFB2xhbmRzSW4AAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKY2hlY2tNZXJnZQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUECWNvbnRpbmVudAgFAXICXzMEDGNvbnRpbmVudElkeAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDPCAIFCmNvbnRpbmVudHMFCWNvbnRpbmVudAkArAICAhNVbmtub3duIGNvbnRpbmVudDogBQljb250aW5lbnQECHRlcnJhaW5zCQELZ2VuVGVycmFpbnMCCQEDYWJzAQkAngMBBQR0eElkBQxjb250aW5lbnRJZHgEB2ZyZWVOdW0JAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBEmtleU5leHRGcmVlTGFuZE51bQAJAGQCBQ9QUkVTQUxFTlVNTEFORFMAAQQKbmV3TGFuZE51bQkApAMBBQdmcmVlTnVtBAVpc3N1ZQkAwggFCQEHbmZ0TmFtZQIFCm5ld0xhbmROdW0FC25ld0xhbmRTaXplCQC5CQIJAMwIAgUKbmV3TGFuZE51bQkAzAgCBQtuZXdMYW5kU2l6ZQkAzAgCBQh0ZXJyYWlucwkAzAgCBQljb250aW5lbnQFA25pbAIBXwABAAAHBAdhc3NldElkCQC4CAEFBWlzc3VlBA5uZXdMYW5kQXNzZXRJZAkA2AQBBQdhc3NldElkBAZuZXdNYXQJALkJAgkBEXN1YnRyYWN0TWF0ZXJpYWxzAwkAZgIFB25lZWRNYXQAAAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwUHbmVlZE1hdAIBXwQJcGllY2VzS2V5CQEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEFBGFkZHIEDHN0YWtlZFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlwaWVjZXNLZXkAAAkAlAoCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCAUBcgJfNQMJAGYCCQCQAwEIBQFyAl83AAAJAQtTdHJpbmdFbnRyeQIFCGxhbmRzS2V5CQC7CQIIBQFyAl83AgFfCQELRGVsZXRlRW50cnkBBQhsYW5kc0tleQkBDEludGVnZXJFbnRyeQIFCXBpZWNlc0tleQMJAGYCCAUBcgJfOAUMc3Rha2VkUGllY2VzAAAJAGUCBQxzdGFrZWRQaWVjZXMIBQFyAl84CQEMSW50ZWdlckVudHJ5AgkBEmtleU5leHRGcmVlTGFuZE51bQAJAGQCBQdmcmVlTnVtAAEFBWlzc3VlCQELU3RyaW5nRW50cnkCCQEQa2V5TGFuZFRvQXNzZXRJZAEFCm5ld0xhbmROdW0FDm5ld0xhbmRBc3NldElkCQELU3RyaW5nRW50cnkCCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQUObmV3TGFuZEFzc2V0SWQFBGFkZHIJAQtTdHJpbmdFbnRyeQIJARFrZXlMYW5kTnVtVG9Pd25lcgEFCm5ld0xhbmROdW0FBGFkZHIJAQxJbnRlZ2VyRW50cnkCCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQ5uZXdMYW5kQXNzZXRJZAgFAXICXzIJAQxJbnRlZ2VyRW50cnkCCQEla2V5TGFuZEFydFN0YXR1c0J5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkFSVFBSRVNBTEUFDm5ld0xhbmRBc3NldElkBQRhZGRyCAUBcgJfMgkBDEludGVnZXJFbnRyeQIJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQUObmV3TGFuZEFzc2V0SWQFCG5ld0xldmVsCQEMSW50ZWdlckVudHJ5AgkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIFDm5ld0xhbmRBc3NldElkBQRhZGRyBQhuZXdMZXZlbAkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIIBQFyAl80CQDMCAIFBm5ld01hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgkBC1N0cmluZ0VudHJ5AgkBEWtleVJlc1Byb3BvcnRpb25zAAgFAXICXzYJAQtTdHJpbmdFbnRyeQIJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAkAuQkCCQDMCAIFCWNvbnRpbmVudAkAzAgCAgFMCQDMCAIFDm5ld0xhbmRBc3NldElkBQNuaWwCAV8JAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBGFkZHIAAQUHYXNzZXRJZAUObmV3TGFuZEFzc2V0SWQBA3MybQMEYWRkcgxsYW5kQXNzZXRJZHMEdHhJZAkBDW1lcmdlSW50ZXJuYWwHAgFNAAMCBFNTU1MFBGFkZHIFDGxhbmRBc3NldElkcwUEdHhJZAAAAQNtMmwFBGFkZHIMbGFuZEFzc2V0SWRzBHR4SWQMc2hvdWxkVXNlTWF0DXBheW1lbnRBbW91bnQEBGNvc3QJAGgCBRVJbmZyYVVwZ3JhZGVDb3N0U1VzZHQABAMDCQEBIQEFDHNob3VsZFVzZU1hdAkBAiE9AgUNcGF5bWVudEFtb3VudAUEY29zdAcJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQRjb3N0CQENbWVyZ2VJbnRlcm5hbAcCAUwABAIDU01NBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQJAGgCBRFJbmZyYVVwZ3JhZGVDb3N0UwAEAQRsMnhsBQRhZGRyDGxhbmRBc3NldElkcwR0eElkDHNob3VsZFVzZU1hdA1wYXltZW50QW1vdW50BARjb3N0CQBoAgUVSW5mcmFVcGdyYWRlQ29zdFNVc2R0AC8DAwkBASEBBQxzaG91bGRVc2VNYXQJAQIhPQIFDXBheW1lbnRBbW91bnQFBGNvc3QHCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUEY29zdAkBDW1lcmdlSW50ZXJuYWwHAgJYTAAFAgVTU1NNTAUEYWRkcgUMbGFuZEFzc2V0SWRzBQR0eElkCQBoAgURSW5mcmFVcGdyYWRlQ29zdFMALwEGeGwyeHhsBQRhZGRyDGxhbmRBc3NldElkcwR0eElkDHNob3VsZFVzZU1hdA1wYXltZW50QW1vdW50BARjb3N0CQBoAgUVSW5mcmFVcGdyYWRlQ29zdFNVc2R0ADYDAwkBASEBBQxzaG91bGRVc2VNYXQJAQIhPQIFDXBheW1lbnRBbW91bnQFBGNvc3QHCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUEY29zdAkBDW1lcmdlSW50ZXJuYWwHAgNYWEwABgIDTFhMBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQJAGgCBRFJbmZyYVVwZ3JhZGVDb3N0UwA2AQttZXJnZUNvbW1vbgUMc2hvdWxkVXNlTWF0BGFkZHINcGF5bWVudEFtb3VudAxsYW5kQXNzZXRJZHMEdHhJZAQLbWVyZ2VSZXN1bHQEByRtYXRjaDAJAJADAQUMbGFuZEFzc2V0SWRzAwkAAAIABAUHJG1hdGNoMAkBA3MybQMFBGFkZHIFDGxhbmRBc3NldElkcwUEdHhJZAMJAAACAAMFByRtYXRjaDAJAQNtMmwFBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQFDHNob3VsZFVzZU1hdAUNcGF5bWVudEFtb3VudAMJAAACAAUFByRtYXRjaDAJAQRsMnhsBQUEYWRkcgUMbGFuZEFzc2V0SWRzBQR0eElkBQxzaG91bGRVc2VNYXQFDXBheW1lbnRBbW91bnQDCQAAAgACBQckbWF0Y2gwCQEGeGwyeHhsBQUEYWRkcgUMbGFuZEFzc2V0SWRzBQR0eElkBQxzaG91bGRVc2VNYXQFDXBheW1lbnRBbW91bnQJAAIBAg1Vbmtub3duIG1lcmdlBQttZXJnZVJlc3VsdAEGcHJvbG9nAQFpAwMJAQIhPQIIBQFpDG9yaWdpbkNhbGxlcgUMcmVzdENvbnRyYWN0CQELdmFsdWVPckVsc2UCCQCgCAEJAQprZXlCbG9ja2VkAAcHCQACAQIfQ29udHJhY3RzIGFyZSB1bmRlciBtYWludGVuYW5jZQkBC1N0cmluZ0VudHJ5AgkBEWtleUxhc3RUeElkQnlVc2VyAQkApQgBCAUBaQxvcmlnaW5DYWxsZXIJANgEAQgFAWkNdHJhbnNhY3Rpb25JZCIBaQENY29uc3RydWN0b3JWMQEIcmVzdEFkZHIDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAkAzAgCCQELU3RyaW5nRW50cnkCCQEOa2V5UmVzdEFkZHJlc3MABQhyZXN0QWRkcgUDbmlsAWkBCnNldEJsb2NrZWQBCWlzQmxvY2tlZAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEXBlcm1pc3Npb24gZGVuaWVkCQDMCAIJAQxCb29sZWFuRW50cnkCCQEKa2V5QmxvY2tlZAAFCWlzQmxvY2tlZAUDbmlsAWkBCXN0YWtlTGFuZAAEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQHYXNzZXRJZAkBBXZhbHVlAQgFA3BtdAdhc3NldElkBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgMJAQIhPQIIBQNwbXQGYW1vdW50AAEJAAIBCQCsAgIJAKwCAgIETkZUIAUKTEFORFBSRUZJWAIkIHRva2VuIHNob3VsZCBiZSBhdHRhY2hlZCBhcyBwYXltZW50BAVhc3NldAkBBXZhbHVlAQkA7AcBBQdhc3NldElkAwkBAiE9AggFBWFzc2V0Bmlzc3VlcgUEdGhpcwkAAgECF1Vua25vd24gaXNzdWVyIG9mIHRva2VuAwkBASEBCQEIY29udGFpbnMCCAUFYXNzZXQEbmFtZQUKTEFORFBSRUZJWAkAAgEJAKwCAgkArAICAglPbmx5IE5GVCAFCkxBTkRQUkVGSVgCFCB0b2tlbnMgYXJlIGFjY2VwdGVkBAtsYW5kTnVtU2l6ZQkAsAICCAUFYXNzZXQEbmFtZQAEBAdsYW5kTnVtAwkBCGNvbnRhaW5zAgULbGFuZE51bVNpemUCA1hYTAkAswICBQtsYW5kTnVtU2l6ZQADAwkBCGNvbnRhaW5zAgULbGFuZE51bVNpemUCAlhMCQCzAgIFC2xhbmROdW1TaXplAAIJALMCAgULbGFuZE51bVNpemUAAQMJAQEhAQkBCWlzRGVmaW5lZAEJALYJAQUHbGFuZE51bQkAAgEJAKwCAgIeQ2Fubm90IHBhcnNlIGxhbmQgbnVtYmVyIGZyb20gCAUFYXNzZXQEbmFtZQQLbGFuZEFzc2V0SWQJANgEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAMJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCEiBpcyBhbHJlYWR5IHN0YWtlZAQBZAkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8EDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCBQFkBQtyZWNUZXJyYWlucwQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCBQFkBQtyZWNMYW5kU2l6ZQQFcHJvcHMJARF1cGRhdGVQcm9wb3J0aW9ucwMFDXRlcnJhaW5Db3VudHMJAGkCBQZwaWVjZXMFBVNTSVpFAAEECWFydFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAAABAhsYW5kc0tleQkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFB2FkZHJlc3MECGxhbmRzU3RyCQCiCAEFCGxhbmRzS2V5BAVsYW5kcwMJAQlpc0RlZmluZWQBBQhsYW5kc1N0cgkAvQkCCQEFdmFsdWUBBQhsYW5kc1N0cgIBXwUDbmlsAwkBD2NvbnRhaW5zRWxlbWVudAIFBWxhbmRzBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgIiWW91ciBzdGFrZWQgbGFuZHMgYWxyZWFkeSBjb250YWluIAULbGFuZEFzc2V0SWQECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAlwaWVjZXNLZXkJARZrZXlTdGFrZWRQaWVjZXNCeU93bmVyAQUHYWRkcmVzcwQJb2xkUGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEFCXBpZWNlc0tleQAABAl3bGdSZXN1bHQJAQVhc0ludAEJAPwHBAULd2xnQ29udHJhY3QCEm9uU3Rha2VVbnN0YWtlTGFuZAkAzAgCBQdhZGRyZXNzBQNuaWwFA25pbAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQd0aW1lS2V5CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBC1N0cmluZ0VudHJ5AgUIbGFuZHNLZXkJALsJAgkAzQgCBQVsYW5kcwULbGFuZEFzc2V0SWQCAV8JAMwIAgkBDEludGVnZXJFbnRyeQIFCXBpZWNlc0tleQkAZAIFCW9sZFBpZWNlcwUGcGllY2VzCQDMCAIJAQtTdHJpbmdFbnRyeQIJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5TGFuZE51bVRvT3duZXIBBQdsYW5kTnVtBQdhZGRyZXNzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEla2V5TGFuZEFydFN0YXR1c0J5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkBQdhZGRyZXNzBQlhcnRQaWVjZXMJAMwIAgkBDEludGVnZXJFbnRyeQIJAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwUKaW5mcmFMZXZlbAkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5UmVzUHJvcG9ydGlvbnMABQVwcm9wcwkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAUJd2xnUmVzdWx0AWkBC3Vuc3Rha2VMYW5kAQ1sYW5kQXNzZXRJZEluBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkGY2FsbGVyBAFjCQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBQRhZGRyBQ1jbGFpbU1vZGVEdWNrBQ1sYW5kQXNzZXRJZEluBAtsYW5kQXNzZXRJZAgFAWMCXzIECGxhbmRzS2V5CQEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQUEYWRkcgQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIIBQFjAl8zBQtyZWNUZXJyYWlucwQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCAUBYwJfMwULcmVjTGFuZFNpemUEBXByb3BzCQERdXBkYXRlUHJvcG9ydGlvbnMDBQ10ZXJyYWluQ291bnRzCQBpAgUGcGllY2VzBQVTU0laRQD///////////8BBAtjbGFpbVJlc3VsdAkBCGNsYWltQWxsBAUEYWRkcgULbGFuZEFzc2V0SWQFBnBpZWNlcwUNY2xhaW1Nb2RlRHVjawQFbGFuZHMJAL0JAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQhsYW5kc0tleQIAAgFfBANpZHgJAM8IAgUFbGFuZHMFC2xhbmRBc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQUDaWR4CQACAQkArAICAiBZb3VyIHN0YWtlZCBsYW5kcyBkb24ndCBjb250YWluIAULbGFuZEFzc2V0SWQEA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAEDmdvdlJlbGVhc2VUaW1lCQELdmFsdWVPckVsc2UCCQCaCAIFC2dvdkNvbnRyYWN0CQEVa2V5VXNlckd3bFJlbGVhc2VUaW1lAQUEYWRkcgAAAwkAZwIFDmdvdlJlbGVhc2VUaW1lBQNub3cJAAIBCQCsAgICOVlvdXIgZ1dMIGFyZSB0YWtpbmcgcGFydCBpbiB2b3RpbmcsIGNhbm5vdCB1bnN0YWtlIHVudGlsIAkApAMBBQ5nb3ZSZWxlYXNlVGltZQQOYXJiUmVsZWFzZVRpbWUJAGQCCQELdmFsdWVPckVsc2UCCQCaCAIFC3dsZ0NvbnRyYWN0CQEUa2V5TGFzdEFyYlRpbWVCeVVzZXIBBQRhZGRyAAAFDmFyYml0cmFnZURlbGF5AwkAZgIFDmFyYlJlbGVhc2VUaW1lBQNub3cJAAIBCQCsAgICP1lvdXIgc3Rha2VkIGxhbmRzIHRvb2sgcGFydCBpbiBhcmJpdHJhZ2UsIGNhbm5vdCB1bnN0YWtlIHVudGlsIAkApAMBBQ5hcmJSZWxlYXNlVGltZQQJcGllY2VzS2V5CQEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEFBGFkZHIEDHN0YWtlZFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlwaWVjZXNLZXkAAAQJbmV3UGllY2VzAwkAZgIFBnBpZWNlcwUMc3Rha2VkUGllY2VzAAAJAGUCBQxzdGFrZWRQaWVjZXMFBnBpZWNlcwQJd2xnUmVzdWx0CQEFYXNJbnQBCQD8BwQFC3dsZ0NvbnRyYWN0AhJvblN0YWtlVW5zdGFrZUxhbmQJAMwIAgUEYWRkcgUDbmlsBQNuaWwJAJQKAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQkA2QQBBQtsYW5kQXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKTEFORFBSRUZJWAULbGFuZEFzc2V0SWQFBGFkZHIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleVJlc1Byb3BvcnRpb25zAAUFcHJvcHMJAMwIAgkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al8yCQC5CQIIBQtjbGFpbVJlc3VsdAJfMwIBOgkAzAgCAwkAZgIJAJADAQUFbGFuZHMAAQkBC1N0cmluZ0VudHJ5AgUIbGFuZHNLZXkJALsJAgkA0QgCBQVsYW5kcwkBBXZhbHVlAQUDaWR4AgFfCQELRGVsZXRlRW50cnkBBQhsYW5kc0tleQkAzAgCCQEMSW50ZWdlckVudHJ5AgUJcGllY2VzS2V5BQluZXdQaWVjZXMJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwFCXdsZ1Jlc3VsdAFpAQlzdGFrZUR1Y2sABAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAEB2Fzc2V0SWQJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIDCQECIT0CCAUDcG10BmFtb3VudAABCQACAQkArAICCQCsAgICBE5GVCAFCkRVQ0tQUkVGSVgCJCB0b2tlbiBzaG91bGQgYmUgYXR0YWNoZWQgYXMgcGF5bWVudAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQUHYXNzZXRJZAMDCQECIT0CCAUFYXNzZXQGaXNzdWVyBQ1pbmN1YmF0b3JBZGRyCQECIT0CCAUFYXNzZXQGaXNzdWVyBQticmVlZGVyQWRkcgcJAAIBCQCsAgIJAKwCAgISVW5rbm93biBpc3N1ZXIgb2YgBQpEVUNLUFJFRklYAgYgdG9rZW4DCQEBIQEJAQhjb250YWlucwIIBQVhc3NldARuYW1lBQpEVUNLUFJFRklYCQACAQkArAICCQCsAgICCU9ubHkgTkZUIAUKRFVDS1BSRUZJWAIUIHRva2VucyBhcmUgYWNjZXB0ZWQECmFzc2V0SWRTdHIJANgEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQphc3NldElkU3RyAwkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQISIGlzIGFscmVhZHkgc3Rha2VkAwkBCWlzRGVmaW5lZAEJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUHYWRkcmVzcwkAAgEJAKwCAgIdWW91IGFscmVhZHkgc3Rha2VkIG9uZSBkdWNrOiAIBQVhc3NldARuYW1lBAZsb2NLZXkJAQ9rZXlEdWNrTG9jYXRpb24BBQphc3NldElkU3RyBAhsb2NhdGlvbgkAoggBBQZsb2NLZXkEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQphc3NldElkU3RyBAhiYWNrcGFjawkAoggBBQVicEtleQQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFCmFzc2V0SWRTdHIEBW1heEhQCQEJbWF4SGVhbHRoAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMa2V5RHVja0xldmVsAQUKYXNzZXRJZFN0cgAABAljdXJIZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoBQVtYXhIUAkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQd0aW1lS2V5CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpEVUNLUFJFRklYCQDYBAEFB2Fzc2V0SWQFB2FkZHJlc3MIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQtTdHJpbmdFbnRyeQIJARBrZXlEdWNrSWRUb093bmVyAQUKYXNzZXRJZFN0cgUHYWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQdhZGRyZXNzBQphc3NldElkU3RyBQNuaWwDCQEJaXNEZWZpbmVkAQUIbG9jYXRpb24FA25pbAkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBmxvY0tleQUPREVGQVVMVExPQ0FUSU9OBQNuaWwDCQEJaXNEZWZpbmVkAQUIYmFja3BhY2sFA25pbAkAzQgCCQDNCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkCGjA6MF8wXzBfMF8wXzA6MF8wXzBfMF8wXzA6BQNuaWwJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgFCWN1ckhlYWx0aAUMcHJvbG9nQWN0aW9uAWkBC3Vuc3Rha2VEdWNrAQphc3NldElkU3RyBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEB2Fzc2V0SWQJANkEAQUKYXNzZXRJZFN0cgQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIEBWFzc2V0CQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQkA2AQBBQdhc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5CQACAQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAMJAQEhAQkBCWlzRGVmaW5lZAEJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUHYWRkcmVzcwkAAgEJAKwCAgkArAICAglUaGUgZHVjayAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEQa2V5RHVja0lkVG9Pd25lcgEJANgEAQUHYXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUHYWRkcmVzcwkAAgECF1N0YWtlZCBORlQgaXMgbm90IHlvdXJzBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQUKYXNzZXRJZFN0cgQFbWF4SFAJAQltYXhIZWFsdGgBCQELdmFsdWVPckVsc2UCCQCfCAEJAQxrZXlEdWNrTGV2ZWwBBQphc3NldElkU3RyAAAEBmhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQAwkAZgIFBW1heEhQBQZoZWFsdGgJAAIBCQCsAgIJAKwCAgIZUGxlYXNlIGhlYWwgeW91ciBkdWNrIHRvIAkApAMBBQVtYXhIUAITaHAgYmVmb3JlIHVuc3Rha2luZwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQUHYXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBBQd0aW1lS2V5CQDMCAIJAQtEZWxldGVFbnRyeQEFCWtleUhlYWx0aAkAzAgCCQELRGVsZXRlRW50cnkBCQEPa2V5RHVja0xvY2F0aW9uAQUKYXNzZXRJZFN0cgkAzAgCCQELRGVsZXRlRW50cnkBCQEQa2V5RHVja0lkVG9Pd25lcgEFCmFzc2V0SWRTdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpEVUNLUFJFRklYBQphc3NldElkU3RyBQdhZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFB2FkZHJlc3MJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwBaQEIY2xhaW1SZXMCBmFtb3VudA5sYW5kQXNzZXRJZFN0cgQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQGcmVzdWx0CQEQY2xhaW1SZXNJbnRlcm5hbAQFBGFkZHIFBmFtb3VudAUNY2xhaW1Nb2RlRHVjawUObGFuZEFzc2V0SWRTdHIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAkAlAoCCQDNCAIJAM0IAgkAzQgCCQDOCAIIBQZyZXN1bHQCXzEICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAkAawMFB3hwQ2xhaW0FBmFtb3VudAUFTVVMVDgCXzEJAQtTdHJpbmdFbnRyeQIIBQZyZXN1bHQCXzIJALkJAggFBnJlc3VsdAJfMwIBOgkBC1N0cmluZ0VudHJ5AggFBnJlc3VsdAJfNAkAuQkCCAUGcmVzdWx0Al81AgE6BQxwcm9sb2dBY3Rpb24JAJEDAggFBnJlc3VsdAJfMwUIYnBJZHhSZXMBaQEMY2xhaW1SZXNUb1dIAgZhbW91bnQObGFuZEFzc2V0SWRTdHIEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEBnJlc3VsdAkBEGNsYWltUmVzSW50ZXJuYWwEBQRhZGRyBQZhbW91bnQFC2NsYWltTW9kZVdoBQ5sYW5kQXNzZXRJZFN0cgkAlAoCCQDNCAIJAM0IAgkAzQgCCQDOCAIIBQZyZXN1bHQCXzEICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIFBGFkZHIJAGsDBQd4cENsYWltBQZhbW91bnQFBU1VTFQ4Al8xCQELU3RyaW5nRW50cnkCCAUGcmVzdWx0Al8yCQC5CQIIBQZyZXN1bHQCXzMCAToJAQtTdHJpbmdFbnRyeQIIBQZyZXN1bHQCXzQJALkJAggFBnJlc3VsdAJfNQIBOgUMcHJvbG9nQWN0aW9uCQCRAwIIBQZyZXN1bHQCXzUFCHdoSWR4UmVzAWkBBmZsaWdodAIHbWVzc2FnZQNzaWcEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQIdXNlckFkZHIJAKUIAQgFAWkGY2FsbGVyBAFmCQEMZmxpZ2h0Q29tbW9uAwUIdXNlckFkZHIFB21lc3NhZ2UFA3NpZwQLZHVja0Fzc2V0SWQIBQFmAl8yBAZsb2NLZXkJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQUGbG9jS2V5BQ9ERUZBVUxUTE9DQVRJT04DCQAAAggFAWYCXzQFC2N1ckxvY2F0aW9uCQACAQIiWW91IGNhbid0IGZseSB0byB0aGUgc2FtZSBsb2NhdGlvbgQFZXFLZXkJARBrZXlEdWNrRXF1aXBtZW50AQULZHVja0Fzc2V0SWQECWN1cnJlbnRFcQkBC3ZhbHVlT3JFbHNlAgkAoggBBQVlcUtleQIXLDssXyw7LF8sOyxfLDssXyw7LF8sOywEBW5ld0VxCQERc3VidHJhY3RFcXVpcG1lbnQCBQljdXJyZW50RXEIBQFmAl81CQCUCgIJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCBQZsb2NLZXkDCQBmAggFAWYCXzEAAAgFAWYCXzQFC2N1ckxvY2F0aW9uCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWVxS2V5BQVuZXdFcQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAgFAWYCXzEJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAMJAGYCCAUBZgJfMQAABQ94cFN1Y2Nlc3NGbGlnaHQFDHhwRmFpbEZsaWdodAJfMQgFAWYCXzMBaQEEaGVhbAMKcXVhbnRpdHlMMQpxdWFudGl0eUwyCnF1YW50aXR5TDMEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDAwMJAGYCAAAFCnF1YW50aXR5TDEGCQBmAgAABQpxdWFudGl0eUwyBgkAZgIAAAUKcXVhbnRpdHlMMwkAAgECG1F1YW50aXR5IGNhbm5vdCBiZSBuZWdhdGl2ZQQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQDcXRzCQDMCAIFCnF1YW50aXR5TDEJAMwIAgUKcXVhbnRpdHlMMgkAzAgCBQpxdWFudGl0eUwzBQNuaWwECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAQFbWF4SFAJAQltYXhIZWFsdGgBCQELdmFsdWVPckVsc2UCCQCfCAEJAQxrZXlEdWNrTGV2ZWwBBQtkdWNrQXNzZXRJZAAABAlvbGRIZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoBQVtYXhIUAMJAGcCBQlvbGRIZWFsdGgFBW1heEhQCQACAQkArAICCQCsAgICD0hQIHNob3VsZCBiZSA8IAkApAMBBQVtYXhIUAIIIHRvIGhlYWwEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAhwcm9kTGlzdAMJAAACCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAAUDbmlsCQC1CQIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIBXwoBC2l0ZXJhdGVQcm9kAgNhY2MLaWdub3JlZEl0ZW0EAW4IBQNhY2MCXzIEAXgDCQBmAgkAkAMBBQhwcm9kTGlzdAUBbgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb2RMaXN0BQFuAAADCQBmAgADBQFuBAFxCQCRAwIFA3F0cwUBbgMJAGYCBQFxBQF4CQACAQkArAICCQCsAgIJAKwCAgIOWW91IGhhdmUgb25seSAJAKQDAQUBeAIEIG9mIAkAkQMCBQlwcm9kVHlwZXMFAW4JAJUKAwkAzQgCCAUDYWNjAl8xCQCkAwEJAGUCBQF4BQFxCQBkAgUBbgABCQBkAggFA2FjYwJfMwkAaAIJAJEDAgUIbWVkS2l0SHAFAW4FAXEJAJUKAwkAzQgCCAUDYWNjAl8xCQCkAwEFAXgJAGQCBQFuAAEIBQNhY2MCXzMEBnJlc3VsdAoAAiRsBRBwcm9kdWN0aW9uTWF0cml4CgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlQoDBQNuaWwAAAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQtpdGVyYXRlUHJvZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgNTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyBAluZXdIZWFsdGgJAJcDAQkAzAgCBQVtYXhIUAkAzAgCCQBkAgUJb2xkSGVhbHRoCAUGcmVzdWx0Al8zBQNuaWwJAJQKAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgFCW5ld0hlYWx0aAkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAugkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQJAMwIAgkAuQkCCAUGcmVzdWx0Al8xAgFfBQNuaWwCAToJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAkAaAIFBnhwSGVhbAkAZAIJAGQCBQpxdWFudGl0eUwxBQpxdWFudGl0eUwyBQpxdWFudGl0eUwzAl8xBQluZXdIZWFsdGgBaQEGaGVhbEVTAAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAAwkBAiE9AggFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECGkFsbG93ZWQgVVNEVCBwYXltZW50IG9ubHkhBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQEBW1heEhQCQEJbWF4SGVhbHRoAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMa2V5RHVja0xldmVsAQULZHVja0Fzc2V0SWQAAAQJb2xkSGVhbHRoCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aAUFbWF4SFADCQBmAgUJb2xkSGVhbHRoAAAJAAIBAihIUCBzaG91bGQgYmUgMCB0byBjYWxsIEVtZXJnZW5jeSBTZXJ2aWNlBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQIcHJvZExpc3QDCQAAAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgAFA25pbAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAV8EDW1lZEtpdEFtb3VudDEDCQBmAgkAkAMBBQhwcm9kTGlzdAAACQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvZExpc3QAAAAABA1tZWRLaXRBbW91bnQyAwkAZgIJAJADAQUIcHJvZExpc3QAAQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb2RMaXN0AAEAAAQNbWVkS2l0QW1vdW50MwMJAGYCCQCQAwEFCHByb2RMaXN0AAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhwcm9kTGlzdAACAAADAwMJAGYCBQ1tZWRLaXRBbW91bnQxAAAGCQBmAgUNbWVkS2l0QW1vdW50MgAABgkAZgIFDW1lZEtpdEFtb3VudDMAAAkAAgECH1lvdSBoYXZlIHRvIHVzZSBvd24gTWVkaWNhbCBLaXQECGV4aXN0U3RyCQCdCAIFD2Vjb25vbXlDb250cmFjdAkBDmtleUVzV2FyZWhvdXNlAAQMZXhpc3RBbW91bnRzAwkBCWlzRGVmaW5lZAEFCGV4aXN0U3RyCQC1CQIJAQV2YWx1ZQEFCGV4aXN0U3RyAgFfBQNuaWwEC2V4aXN0QW1vdW50AwkAZgIJAJADAQUMZXhpc3RBbW91bnRzAAAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQxleGlzdEFtb3VudHMAAAAAAwkAZwIAAAULZXhpc3RBbW91bnQJAAIBAjlUaGVyZSBhcmUgbm8gTWVkaWNhbCBLaXRzIEwxIGF0IEVtZXJnZW5jeSBTZXJ2aWNlIHN0b3JhZ2UECW5ld0hlYWx0aAkAZAIFCW9sZEhlYWx0aAkAkQMCBQhtZWRLaXRIcAAABAVuZXdFUwkAuQkCCQDMCAIJAKQDAQkAZQIFC2V4aXN0QW1vdW50AAEJANEIAgUMZXhpc3RBbW91bnRzAAACAV8EBnJlY2lwZQkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgAAAIBXwQIdG90YWxNYXQJARJnZXRSZWNpcGVNYXRlcmlhbHMBBQZyZWNpcGUECXNlbGxQcmljZQkAawMJAGgCBQh0b3RhbE1hdAUKRVNTRUxMQ09FRgUQUkVTT1VSQ0VQUklDRU1JTgkAaAIACgUOUFJPRFVDVFBLR1NJWkUDCQECIT0CCAUDcG10BmFtb3VudAUJc2VsbFByaWNlCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUJc2VsbFByaWNlBAZyZXN1bHQJAQhhc1N0cmluZwEJAPwHBAUPZWNvbm9teUNvbnRyYWN0Ag91cGRhdGVFc1N0b3JhZ2UJAMwIAgUFbmV3RVMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgULdXNkdEFzc2V0SWQFCXNlbGxQcmljZQUDbmlsCQCUCgIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoBQluZXdIZWFsdGgJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAUIeHBDYWxsRVMCXzEFBnJlc3VsdAFpAQ51cGRhdGVCYWNrcGFjawILZHVja0Fzc2V0SWQHbmV3UGFjawMJAQIhPQIIBQFpBmNhbGxlcgUPZWNvbm9teUNvbnRyYWN0CQACAQIRcGVybWlzc2lvbiBkZW5pZWQJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAUHbmV3UGFjawUDbmlsBQduZXdQYWNrAWkBCGJ1eVNMYW5kAAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAAwkBAiE9AggFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECGkFsbG93ZWQgVVNEVCBwYXltZW50IG9ubHkhAwkBAiE9AggFA3BtdAZhbW91bnQFB0VYUFVTRFQJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQdFWFBVU0RUBAZyZXN1bHQJARJleHBlZGl0aW9uSW50ZXJuYWwCCAUBaQZjYWxsZXIIBQFpDXRyYW5zYWN0aW9uSWQJAJQKAgkAzQgCCQDOCAIJAM0IAggFBnJlc3VsdAJfMQkBDlNjcmlwdFRyYW5zZmVyAwUPZWNvbm9teUNvbnRyYWN0CAUDcG10BmFtb3VudAULdXNkdEFzc2V0SWQICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIJAKUIAQgFAWkGY2FsbGVyBQp4cE5ld1NMYW5kAl8xBQxwcm9sb2dBY3Rpb24ICAUGcmVzdWx0Al8yAl8xAWkBCmV4cGVkaXRpb24CB21lc3NhZ2UDc2lnBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBnJlc3VsdAkBEGV4cGVkaXRpb25Db21tb24ECAUBaQZjYWxsZXIIBQFpDXRyYW5zYWN0aW9uSWQFB21lc3NhZ2UFA3NpZwQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAkAlAoCCQDNCAIJAM4IAggFBnJlc3VsdAJfMQgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkBQp4cE5ld1NMYW5kAl8xBQxwcm9sb2dBY3Rpb24JAJQKAggFBnJlc3VsdAJfMggFBnJlc3VsdAJfMwFpAQx1cGdyYWRlSW5mcmEBC2xhbmRBc3NldElkBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBnJlc3VsdAkBDXVwSW5mcmFDb21tb24EBggFAWkGY2FsbGVyAAAFC2xhbmRBc3NldElkBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkCQCUCgIJAM4IAgkAzQgCCAUGcmVzdWx0Al8xBQxwcm9sb2dBY3Rpb24ICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAkAawMFDnhwVXBncmFkZUluZnJhCAUGcmVzdWx0Al8zBQVNVUxUOAJfMQgFBnJlc3VsdAJfMgFpARB1cGdyYWRlSW5mcmFVc2R0AQtsYW5kQXNzZXRJZAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEVBlcm1pc3Npb24gZGVuaWVkBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQIaQWxsb3dlZCBVU0RUIHBheW1lbnQgb25seSEEBnJlc3VsdAkBDXVwSW5mcmFDb21tb24EBwgFAWkGY2FsbGVyCAUDcG10BmFtb3VudAULbGFuZEFzc2V0SWQJAJQKAgkAzQgCCQDNCAIIBQZyZXN1bHQCXzEJAQ5TY3JpcHRUcmFuc2ZlcgMFD2Vjb25vbXlDb250cmFjdAgFA3BtdAZhbW91bnQFC3VzZHRBc3NldElkBQxwcm9sb2dBY3Rpb24IBQZyZXN1bHQCXzIBaQEQYWN0aXZhdGVBcnRpZmFjdAIHYXJ0TmFtZQ5sYW5kQXNzZXRJZE9wdAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpBmNhbGxlcgQGcmVzdWx0BAckbWF0Y2gwBQdhcnROYW1lAwkAAAICB1BSRVNBTEUFByRtYXRjaDAJARJhY3RpdmF0ZVByZXNhbGVBcnQCBQRhZGRyBQ5sYW5kQXNzZXRJZE9wdAMJAAACAgdPTkJPQVJEBQckbWF0Y2gwCQESYWN0aXZhdGVPbmJvYXJkQXJ0AQUEYWRkcgkAAgECEFVua25vd24gYXJ0aWZhY3QJAM0IAgUGcmVzdWx0BQxwcm9sb2dBY3Rpb24BaQEKbWVyZ2VMYW5kcwEMbGFuZEFzc2V0SWRzBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBnJlc3VsdAkBC21lcmdlQ29tbW9uBQYJAKUIAQgFAWkGY2FsbGVyAAAFDGxhbmRBc3NldElkcwgFAWkNdHJhbnNhY3Rpb25JZAkAlAoCCQDOCAIJAM0IAggFBnJlc3VsdAJfMQUMcHJvbG9nQWN0aW9uCAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCCQClCAEIBQFpBmNhbGxlcgUHeHBNZXJnZQJfMQgFBnJlc3VsdAJfMgFpAQ5tZXJnZUxhbmRzVXNkdAEMbGFuZEFzc2V0SWRzBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQIaQWxsb3dlZCBVU0RUIHBheW1lbnQgb25seSEEBnJlc3VsdAkBC21lcmdlQ29tbW9uBQcJAKUIAQgFAWkGY2FsbGVyCAUDcG10BmFtb3VudAUMbGFuZEFzc2V0SWRzCAUBaQ10cmFuc2FjdGlvbklkCQCUCgIJAM0IAgkAzQgCCAUGcmVzdWx0Al8xCQEOU2NyaXB0VHJhbnNmZXIDBQ9lY29ub215Q29udHJhY3QIBQNwbXQGYW1vdW50BQt1c2R0QXNzZXRJZAUMcHJvbG9nQWN0aW9uCAUGcmVzdWx0Al8yAWkBDWNhcmdvRXhjaGFuZ2UCDGNhcmdvTGlzdFN0cgtsYW5kQXNzZXRJZAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBApjYXJnb1BhcnRzCQC8CQIFDGNhcmdvTGlzdFN0cgIBOgQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMECWxhbmRJbmRleAkAaQIJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfBQtyZWNMYW5kU2l6ZQUFU1NJWkUECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEC2N1ckxvY2F0aW9uCQELdmFsdWVPckVsc2UCCQCiCAEJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OBANsb2MJALUJAgkBBXZhbHVlAQULY3VyTG9jYXRpb24CAV8DCQECIT0CCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIBTAkAAgEJAKwCAgkArAICAhZEdWNrIGxvY2F0aW9uIHR5cGUgaXMgCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIRLCBidXQgc2hvdWxkIGJlIEwDCQECIT0CCQCRAwIFA2xvYwUIbG9jSWR4SWQFC2xhbmRBc3NldElkCQACAQkArAICAhtEdWNrIHNob3VsZCBiZSBvbiB0aGUgbGFuZCAFC2xhbmRBc3NldElkBAV3aEtleQkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkBAljdXJyZW50V2gJAQxnZXRXYXJlaG91c2UDBQV3aEtleQUJbGFuZEluZGV4BQppbmZyYUxldmVsBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQGcmVzdWx0CQEJbW92ZVN0dWZmAwUKY2FyZ29QYXJ0cwUJY3VycmVudFdoBQtjdXJyZW50UGFjawQEbG9mdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUAgFfBAVsb2Z0TwkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAgFBnJlc3VsdAJfNwQFbG9mdEYJAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQgFBnJlc3VsdAJfNwkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAugkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAggFBnJlc3VsdAJfNAkAzAgCCAUGcmVzdWx0Al81CQDMCAIIBQZyZXN1bHQCXzYFA25pbAIBOgkAzAgCCQELU3RyaW5nRW50cnkCBQV3aEtleQkAugkCCQDMCAIJAJEDAgUJY3VycmVudFdoBQt3aElkeExldmVscwkAzAgCCAUGcmVzdWx0Al8xCQDMCAIIBQZyZXN1bHQCXzIJAMwIAggFBnJlc3VsdAJfMwkAzAgCCQC5CQIJAMwIAgkAkQMCBQRsb2Z0BQl2b2xMb2NrZWQJAMwIAgkApAMBBQVsb2Z0TwkAzAgCCQCkAwEFBWxvZnRGCQDMCAIJAJEDAgUEbG9mdAUIdm9sVG90YWwFA25pbAIBXwUDbmlsAgE6CQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsAWkBDXNhdmVXYXJlaG91c2UCBXdoU3RyC2xhbmRBc3NldElkAwkBAiE9AggFAWkGY2FsbGVyBQ9lY29ub215Q29udHJhY3QJAAIBAg1BY2Nlc3MgZGVuaWVkBAV3aEtleQkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkBAJ3aAkAvAkCBQV3aFN0cgIBOgMJAQIhPQIJAJADAQUCd2gABQkAAgECMHdhcmVob3VzZSBzdHJpbmcgc2hvdWxkIGNvbnRhaW4gNCAnOicgc2VwYXJhdG9ycwQFbG9mdEwJAJEDAgkAtQkCCQCRAwIFAndoBQl3aElkeExPRlQCAV8FCXZvbExvY2tlZAQFbG9mdE8JARdnZXRXYXJlaG91c2VPY2N1cGllZFZvbAEFAndoBAVsb2Z0VAkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQkAkQMCBQJ3aAULd2hJZHhMZXZlbHMEBWxvZnRGCQBlAgkAZQIFBWxvZnRUCQENcGFyc2VJbnRWYWx1ZQEFBWxvZnRMBQVsb2Z0TwQIbmV3V2hTdHIJALoJAgkAzAgCCQCRAwIFAndoBQt3aElkeExldmVscwkAzAgCCQCRAwIFAndoBQh3aElkeFJlcwkAzAgCCQCRAwIFAndoBQh3aElkeE1hdAkAzAgCCQCRAwIFAndoBQl3aElkeFByb2QJAMwIAgkAuQkCCQDMCAIFBWxvZnRMCQDMCAIJAKQDAQUFbG9mdE8JAMwIAgkApAMBBQVsb2Z0RgkAzAgCCQCkAwEFBWxvZnRUBQNuaWwCAV8FA25pbAIBOgkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBXdoS2V5BQhuZXdXaFN0cgUDbmlsBQhuZXdXaFN0cgFpARJmaXhXYXJlaG91c2VGb3JtYXQBC2xhbmRBc3NldElkAwkBAiE9AggFAWkGY2FsbGVyBQxyZXN0Q29udHJhY3QJAAIBAg1BY2Nlc3MgZGVuaWVkBAV3aEtleQkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAlsYW5kSW5kZXgJAGkCCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwULcmVjTGFuZFNpemUFBVNTSVpFBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAQCd2gJAQxnZXRXYXJlaG91c2UDBQV3aEtleQUJbGFuZEluZGV4BQppbmZyYUxldmVsBAVsb2Z0TAkBBWFzSW50AQkA/AcEBQ9lY29ub215Q29udHJhY3QCGnJlY2FsY0xvY2tlZFZvbHVtZVJFQURPTkxZCQDMCAIFC2xhbmRBc3NldElkCQDMCAIFAndoBQNuaWwFA25pbAQFbG9mdE8JARdnZXRXYXJlaG91c2VPY2N1cGllZFZvbAEFAndoBAVsb2Z0VAkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQkAkQMCBQJ3aAULd2hJZHhMZXZlbHMEBWxvZnRGCQBlAgkAZQIFBWxvZnRUBQVsb2Z0TAUFbG9mdE8ECG5ld1doU3RyCQC6CQIJAMwIAgkAkQMCBQJ3aAULd2hJZHhMZXZlbHMJAMwIAgkAkQMCBQJ3aAUId2hJZHhSZXMJAMwIAgkAkQMCBQJ3aAUId2hJZHhNYXQJAMwIAgkAkQMCBQJ3aAUJd2hJZHhQcm9kCQDMCAIJALkJAgkAzAgCCQCkAwEFBWxvZnRMCQDMCAIJAKQDAQUFbG9mdE8JAMwIAgkApAMBBQVsb2Z0RgkAzAgCCQCkAwEFBWxvZnRUBQNuaWwCAV8FA25pbAIBOgkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBXdoS2V5BQhuZXdXaFN0cgUDbmlsBQhuZXdXaFN0cgFpAQ9maXhTdGFrZWRQaWVjZXMBB2FkZHJlc3MDCQECIT0CCAUBaQZjYWxsZXIFDHJlc3RDb250cmFjdAkAAgECDUFjY2VzcyBkZW5pZWQEDHN0YWtlZFBpZWNlcwMJAAACBQdhZGRyZXNzAgAAAAQIbGFuZHNTdHIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQUHYWRkcmVzcwQFbGFuZHMDCQEJaXNEZWZpbmVkAQUIbGFuZHNTdHIJAL0JAgkBBXZhbHVlAQUIbGFuZHNTdHICAV8FA25pbAoBB29uZUxhbmQCA2FjYwtsYW5kQXNzZXRJZAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQIbGFuZFNpemUJAJEDAgkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8FC3JlY0xhbmRTaXplCQBkAgUDYWNjCQEPbnVtUGllY2VzQnlTaXplAQUIbGFuZFNpemUKAAIkbAUFbGFuZHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBB29uZUxhbmQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFUxpc3Qgc2l6ZSBleGNlZWRzIDEwMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsAPAA9AD4APwBAAEEAQgBDAEQARQBGAEcASABJAEoASwBMAE0ATgBPAFAAUQBSAFMAVABVAFYAVwBYAFkAWgBbAFwAXQBeAF8AYABhAGIAYwBkCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJARZrZXlTdGFrZWRQaWVjZXNCeU93bmVyAQUHYWRkcmVzcwUMc3Rha2VkUGllY2VzBQNuaWwFDHN0YWtlZFBpZWNlcwFpAQ1zZXRDdXN0b21OYW1lAwdhc3NldElkCmN1c3RvbU5hbWUEdHlwZQQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAAwkBAiE9AggFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECGkFsbG93ZWQgVVNEVCBwYXltZW50IG9ubHkhAwkBAiE9AggFA3BtdAZhbW91bnQFDFJFTkFNSU5HQ09TVAkAAgEJAKwCAgISUGF5bWVudCBzaG91bGQgYmUgCQCkAwEFDFJFTkFNSU5HQ09TVAMJAQhjb250YWlucwIFCmN1c3RvbU5hbWUCAl9fCQACAQkArAICAh5OYW1lIHNob3VsZCBub3QgY29udGFpbiAnX18nOiAFCmN1c3RvbU5hbWUDCQBmAgkAsQIBBQpjdXN0b21OYW1lBQpNQVhOQU1FTEVOCQACAQkArAICAhlOYW1lIHRvbyBsb25nLCBtYXhMZW5ndGg9CQCkAwEFCk1BWE5BTUVMRU4EBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAdhY3Rpb25zBAckbWF0Y2gwBQR0eXBlAwkAAAICB0FDQ09VTlQFByRtYXRjaDAECnJldmVyc2VLZXkJARZrZXlDdXN0b21OYW1lVG9BZGRyZXNzAQUKY3VzdG9tTmFtZQQJbmFtZU93bmVyCQCiCAEFCnJldmVyc2VLZXkDCQEJaXNEZWZpbmVkAQUJbmFtZU93bmVyCQACAQkArAICAhlOYW1lIGFscmVhZHkgcmVnaXN0ZXJlZDogBQpjdXN0b21OYW1lBA1hZGRyVG9OYW1lS2V5CQEWa2V5QWRkcmVzc1RvQ3VzdG9tTmFtZQEFBGFkZHIEB29sZE5hbWUJAKIIAQUNYWRkclRvTmFtZUtleQQHZnJlZU9sZAMJAQlpc0RlZmluZWQBBQdvbGROYW1lCQDMCAIJAQtEZWxldGVFbnRyeQEJARZrZXlDdXN0b21OYW1lVG9BZGRyZXNzAQkBBXZhbHVlAQUHb2xkTmFtZQUDbmlsBQNuaWwJAM4IAgkAzQgCCQDNCAIFB2ZyZWVPbGQJAQtTdHJpbmdFbnRyeQIFDWFkZHJUb05hbWVLZXkFCmN1c3RvbU5hbWUJAQtTdHJpbmdFbnRyeQIFCnJldmVyc2VLZXkFBGFkZHIICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIFBGFkZHIFDHhwQ3VzdG9tTmFtZQJfMQMJAAACAgRMQU5EBQckbWF0Y2gwBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQUHYXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAggFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQdhc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBApyZXZlcnNlS2V5CQEaa2V5TGFuZEN1c3RvbU5hbWVUb0Fzc2V0SWQBBQpjdXN0b21OYW1lBAluYW1lT3duZXIJAKIIAQUKcmV2ZXJzZUtleQMJAQlpc0RlZmluZWQBBQluYW1lT3duZXIJAAIBCQCsAgICGU5hbWUgYWxyZWFkeSByZWdpc3RlcmVkOiAFCmN1c3RvbU5hbWUEDmFzc2V0VG9OYW1lS2V5CQEaa2V5TGFuZEFzc2V0SWRUb0N1c3RvbU5hbWUBBQdhc3NldElkBAdvbGROYW1lCQCiCAEFDmFzc2V0VG9OYW1lS2V5BAdmcmVlT2xkAwkBCWlzRGVmaW5lZAEFB29sZE5hbWUJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBGmtleUxhbmRDdXN0b21OYW1lVG9Bc3NldElkAQkBBXZhbHVlAQUHb2xkTmFtZQUDbmlsBQNuaWwJAM4IAgkAzQgCCQDNCAIFB2ZyZWVPbGQJAQtTdHJpbmdFbnRyeQIFDmFzc2V0VG9OYW1lS2V5BQpjdXN0b21OYW1lCQELU3RyaW5nRW50cnkCBQpyZXZlcnNlS2V5BQdhc3NldElkCAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCBQRhZGRyBQx4cEN1c3RvbU5hbWUCXzEDCQAAAgIERFVDSwUHJG1hdGNoMAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQdhc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFB2Fzc2V0SWQDAwkBASEBCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5BgkBASEBCQEJaXNEZWZpbmVkAQkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyCQACAQkArAICCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBEGtleUR1Y2tJZFRvT3duZXIBBQdhc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpEVUNLUFJFRklYAg0gaXMgbm90IHlvdXJzBApyZXZlcnNlS2V5CQEaa2V5RHVja0N1c3RvbU5hbWVUb0Fzc2V0SWQBBQpjdXN0b21OYW1lBAluYW1lT3duZXIJAKIIAQUKcmV2ZXJzZUtleQMJAQlpc0RlZmluZWQBBQluYW1lT3duZXIJAAIBCQCsAgICGU5hbWUgYWxyZWFkeSByZWdpc3RlcmVkOiAFCmN1c3RvbU5hbWUEDmFzc2V0VG9OYW1lS2V5CQEaa2V5RHVja0Fzc2V0SWRUb0N1c3RvbU5hbWUBBQdhc3NldElkBAdvbGROYW1lCQCiCAEFDmFzc2V0VG9OYW1lS2V5BAdmcmVlT2xkAwkBCWlzRGVmaW5lZAEFB29sZE5hbWUJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBGmtleUR1Y2tDdXN0b21OYW1lVG9Bc3NldElkAQkBBXZhbHVlAQUHb2xkTmFtZQUDbmlsBQNuaWwJAM4IAgkAzQgCCQDNCAIFB2ZyZWVPbGQJAQtTdHJpbmdFbnRyeQIFDmFzc2V0VG9OYW1lS2V5BQpjdXN0b21OYW1lCQELU3RyaW5nRW50cnkCBQpyZXZlcnNlS2V5BQdhc3NldElkCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgUHYXNzZXRJZAUMeHBDdXN0b21OYW1lAl8xCQACAQITVW5rbm93biBlbnRpdHkgdHlwZQkAlAoCCQDNCAIJAM0IAgUHYWN0aW9ucwkBDlNjcmlwdFRyYW5zZmVyAwUPZWNvbm9teUNvbnRyYWN0CAUDcG10BmFtb3VudAULdXNkdEFzc2V0SWQFDHByb2xvZ0FjdGlvbgAAAWkBDHNldFJlZmVycmFscwIJb2xkUGxheWVyCW5ld1BsYXllcgMJAQIhPQIIBQFpD2NhbGxlclB1YmxpY0tleQUDcHViCQACAQIRUGVybWlzc2lvbiBkZW5pZWQEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAMJAQEhAQkBCWlzRGVmaW5lZAEJAKYIAQUJb2xkUGxheWVyCQACAQkArAICAhFJbnZhbGlkIGFkZHJlc3M6IAUJb2xkUGxheWVyAwkBASEBCQEJaXNEZWZpbmVkAQkApggBBQluZXdQbGF5ZXIJAAIBCQCsAgICEUludmFsaWQgYWRkcmVzczogBQluZXdQbGF5ZXIEB29sZHNLZXkJAQlrZXlPbGRpZXMABARvbGRzCQCiCAEFB29sZHNLZXkEBm9sZGllcwMJAQlpc0RlZmluZWQBBQRvbGRzCQC8CQIJAQV2YWx1ZQEFBG9sZHMCAV8FA25pbAMJAQ9jb250YWluc0VsZW1lbnQCBQZvbGRpZXMFCW5ld1BsYXllcgkAAgEJAKwCAgUJbmV3UGxheWVyAiYgaXMgbm90IG5ld2JpZSAoYWxyZWFkeSBoYXMgcmVmZXJyYWxzKQQIcmVmQnlLZXkJAQ9rZXlBZGRyZXNzUmVmQnkBBQluZXdQbGF5ZXIEBXJlZkJ5CQCiCAEFCHJlZkJ5S2V5AwMJAQlpc0RlZmluZWQBBQVyZWZCeQkBCWlzRGVmaW5lZAEJAKYIAQkBBXZhbHVlAQUFcmVmQnkHCQACAQkArAICCQCsAgIFCW5ld1BsYXllcgIUIGFscmVhZHkgaGFzIHJlZkJ5OiAJAQV2YWx1ZQEFBXJlZkJ5BAdyZWZzS2V5CQETa2V5QWRkcmVzc1JlZmVycmFscwEFCW9sZFBsYXllcgQEcmVmcwkAoggBBQdyZWZzS2V5BAlyZWZzQXJyYXkDCQEJaXNEZWZpbmVkAQUEcmVmcwkAvAkCCQEFdmFsdWUBBQRyZWZzAgFfBQNuaWwDCQEPY29udGFpbnNFbGVtZW50AgUJcmVmc0FycmF5BQluZXdQbGF5ZXIJAAIBCQCsAgIJAKwCAgkArAICBQlvbGRQbGF5ZXICEiBhbHJlYWR5IGNvbnRhaW5zIAUJbmV3UGxheWVyAhEgd2l0aGluIHJlZmVycmFscwQHbmV3UmVmcwkAugkCCQDNCAIFCXJlZnNBcnJheQUJbmV3UGxheWVyAgFfBAduZXdPbGRzAwkBD2NvbnRhaW5zRWxlbWVudAIFBm9sZGllcwUJb2xkUGxheWVyCQEFdmFsdWUBBQRvbGRzCQC6CQIJAM0IAgUGb2xkaWVzBQlvbGRQbGF5ZXICAV8JAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCBQhyZWZCeUtleQUJb2xkUGxheWVyCQDMCAIJAQtTdHJpbmdFbnRyeQIFB3JlZnNLZXkFB25ld1JlZnMJAMwIAgkBC1N0cmluZ0VudHJ5AgUHb2xkc0tleQUHbmV3T2xkcwkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAAAAWkBEGRpc3RyaWJ1dGVQb2ludHMFCHN0cmVuZ3RoCGFjY3VyYWN5CWludGVsbGVjdAllbmR1cmFuY2UJZGV4dGVyaXR5BAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQECmZyZWVLZXlBY2MJARFrZXlVc2VyRnJlZVBvaW50cwEFBGFkZHIEDWZyZWVQb2ludHNBY2MJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0BQpmcmVlS2V5QWNjAAAEC2ZyZWVLZXlEdWNrCQERa2V5RHVja0ZyZWVQb2ludHMBBQtkdWNrQXNzZXRJZAQOZnJlZVBvaW50c0R1Y2sJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0BQtmcmVlS2V5RHVjawAABAdzdW1GcmVlCQBkAgUNZnJlZVBvaW50c0FjYwUOZnJlZVBvaW50c0R1Y2sED3N1bVRvRGlzdHJpYnV0ZQkAZAIJAGQCCQBkAgkAZAIFCHN0cmVuZ3RoBQhhY2N1cmFjeQUJaW50ZWxsZWN0BQllbmR1cmFuY2UFCWRleHRlcml0eQMJAGYCBQ9zdW1Ub0Rpc3RyaWJ1dGUFB3N1bUZyZWUJAAIBCQCsAgIJAKwCAgIPVGhlcmUgYXJlIG9ubHkgCQCkAwEFB3N1bUZyZWUCGiBmcmVlIHBvaW50cyB0byBkaXN0cmlidXRlBAhjaGFyc0tleQkBDGtleUR1Y2tDaGFycwEFC2R1Y2tBc3NldElkBAVjaGFycwkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAUIY2hhcnNLZXkCCTBfMF8wXzBfMAIBXwQGbmV3QWNjCQBlAgUNZnJlZVBvaW50c0FjYwUPc3VtVG9EaXN0cmlidXRlCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIFCmZyZWVLZXlBY2MDCQBmAgAABQZuZXdBY2MAAAUGbmV3QWNjCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQtmcmVlS2V5RHVjawMJAGYCAAAFBm5ld0FjYwkAZAIFDmZyZWVQb2ludHNEdWNrBQZuZXdBY2MFDmZyZWVQb2ludHNEdWNrCQDMCAIJAQtTdHJpbmdFbnRyeQIFCGNoYXJzS2V5CQC5CQIJAMwIAgkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQxjaGFyU3RyZW5ndGgFCHN0cmVuZ3RoCQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUMY2hhckFjY3VyYWN5BQhhY2N1cmFjeQkAzAgCCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDWNoYXJJbnRlbGxlY3QFCWludGVsbGVjdAkAzAgCCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDWNoYXJFbmR1cmFuY2UFCWVuZHVyYW5jZQkAzAgCCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDWNoYXJEZXh0ZXJpdHkFCWRleHRlcml0eQUDbmlsAgFfCQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsAAABaQEcc3BsaXRCeUdsb2JhbFdlaWdodHNSRUFET05MWQEGYW1vdW50CQCUCgIFA25pbAkBEmdldE5lZWRlZE1hdGVyaWFscwEFBmFtb3VudAFpASRzcGxpdEJ5R2xvYmFsQW5kTG9jYWxXZWlnaHRzUkVBRE9OTFkDCW1hdEFtb3VudAlyZXNBbW91bnQIdGVycmFpbnMEDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQUIdGVycmFpbnMJAJQKAgUDbmlsCQCUCgIJARJnZXROZWVkZWRNYXRlcmlhbHMBBQltYXRBbW91bnQJARNkaXN0cmlidXRlQnlXZWlnaHRzAgUJcmVzQW1vdW50BQ10ZXJyYWluQ291bnRzAWkBE2dldEJhY2twYWNrUkVBRE9OTFkBC2R1Y2tBc3NldElkCQCUCgIFA25pbAkAuQkCCQELZ2V0QmFja3BhY2sBCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAIBOgFpARRnZXRXYXJlaG91c2VSRUFET05MWQELbGFuZEFzc2V0SWQEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQECWxhbmRJbmRleAkAaQIJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfBQtyZWNMYW5kU2l6ZQUFU1NJWkUECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAACQCUCgIFA25pbAkAugkCCQEMZ2V0V2FyZWhvdXNlAwkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkBQlsYW5kSW5kZXgFCmluZnJhTGV2ZWwCAToBaQEKc2F2ZUxhc3RUeAADAwkBAiE9AggFAWkGY2FsbGVyBQt3bGdDb250cmFjdAkBAiE9AggFAWkGY2FsbGVyBQ9lY29ub215Q29udHJhY3QHCQACAQINQWNjZXNzIGRlbmllZAkAlAoCCQDMCAIJAQZwcm9sb2cBBQFpBQNuaWwAKgFpAQ91cGRhdGVEdWNrU3RhdHMCC2R1Y2tBc3NldElkB2RlbHRhWFADCQECIT0CCAUBaQZjYWxsZXIFD2Vjb25vbXlDb250cmFjdAkAAgECDUFjY2VzcyBkZW5pZWQJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkBQdkZWx0YVhQAWkBDnVwZGF0ZUFjY1N0YXRzAgRhZGRyB2RlbHRhWFADCQECIT0CCAUBaQZjYWxsZXIFD2Vjb25vbXlDb250cmFjdAkAAgECDUFjY2VzcyBkZW5pZWQJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgUEYWRkcgUHZGVsdGFYUAFpAQllcXVpcER1Y2sBCWVxdWlwbWVudAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAVlcUtleQkBEGtleUR1Y2tFcXVpcG1lbnQBBQtkdWNrQXNzZXRJZAQLY3VycmVudFNlZ3MJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQVlcUtleQIXLDssXyw7LF8sOyxfLDssXyw7LF8sOywCAV8EBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAVuZXdFcQkAtQkCBQllcXVpcG1lbnQCAV8DCQECIT0CCQCQAwEFBW5ld0VxBQtOVU1TRUdNRU5UUwkAAgECFldyb25nIGVxdWlwbWVudCBzdHJpbmcEBHJlcXMJAQxnZXREdWNrU3RhdHMCBQR0aGlzBQtkdWNrQXNzZXRJZAQJdGVtcFByb2RCCQEGZHJlc3NCBAULY3VycmVudFNlZ3MJAQ5wcm9kU3RyVG9CeXRlcwEJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAYFBHJlcXMECG5ld1Byb2RCCQEGZHJlc3NCBAUFbmV3RXEFCXRlbXBQcm9kQgcFBHJlcXMECm5ld1Byb2RTdHIJAQ5ieXRlc1RvUHJvZFN0cgEFCG5ld1Byb2RCCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFZXFLZXkFCWVxdWlwbWVudAkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAugkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQJAMwIAgUKbmV3UHJvZFN0cgUDbmlsAgE6CQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsAAAAxU1jkg==", "height": 2678579, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 7WCNFt8rezTWy1WF1PHrrtFLfSxLU2uzi7M5mhHG4QAa Next: DxM4Fr3uH12fuWgKBRcMMZ9oQHfLShDoArG6kHvir8Na Diff:
Old | New | Differences | |
---|---|---|---|
30 | 30 | ||
31 | 31 | let o = 2 | |
32 | 32 | ||
33 | - | ||
34 | - | ||
35 | - | ||
36 | - | ||
37 | - | ||
38 | - | ||
39 | - | ||
40 | - | ||
41 | - | ||
42 | - | ||
43 | - | ||
44 | - | ||
45 | - | ||
46 | - | ||
47 | - | ||
48 | - | ||
49 | - | ||
50 | - | ||
51 | - | ||
52 | - | ||
53 | - | ||
54 | - | ||
55 | - | ||
56 | - | ||
57 | - | ||
58 | - | ||
59 | - | ||
60 | - | ||
61 | - | ||
62 | - | let A = | |
63 | - | ||
64 | - | let B = | |
65 | - | ||
66 | - | let C = | |
67 | - | ||
68 | - | let D = | |
69 | - | ||
70 | - | let E = | |
71 | - | ||
72 | - | let F = | |
73 | - | ||
74 | - | let G = | |
33 | + | let p = 30 | |
34 | + | ||
35 | + | func q (r) = ("duckHealth_" + r) | |
36 | + | ||
37 | + | ||
38 | + | func s (r) = ("duckChars_" + r) | |
39 | + | ||
40 | + | ||
41 | + | func t (r) = ("duckXP_" + r) | |
42 | + | ||
43 | + | ||
44 | + | func u (r) = ("duckLevel_" + r) | |
45 | + | ||
46 | + | ||
47 | + | func v (r) = ("duckFreePoints_" + r) | |
48 | + | ||
49 | + | ||
50 | + | func w (r) = ("duckEquipment_" + r) | |
51 | + | ||
52 | + | ||
53 | + | func x (b) = ("userXP_" + b) | |
54 | + | ||
55 | + | ||
56 | + | func y (b) = ("userLevel_" + b) | |
57 | + | ||
58 | + | ||
59 | + | func z (b) = ("userFreePoints_" + b) | |
60 | + | ||
61 | + | ||
62 | + | let A = 100000 | |
63 | + | ||
64 | + | let B = 50000 | |
65 | + | ||
66 | + | let C = 10000 | |
67 | + | ||
68 | + | let D = 100000 | |
69 | + | ||
70 | + | let E = 5000000 | |
71 | + | ||
72 | + | let F = 50000000 | |
73 | + | ||
74 | + | let G = 100000 | |
75 | 75 | ||
76 | 76 | let H = 10000000 | |
77 | 77 | ||
78 | - | let I = | |
79 | - | ||
80 | - | ||
81 | - | ||
82 | - | ||
83 | - | ||
84 | - | ||
85 | - | ||
86 | - | ||
87 | - | ||
88 | - | ||
89 | - | | |
90 | - | ||
91 | - | ||
92 | - | ||
93 | - | ||
94 | - | ||
95 | - | let | |
96 | - | ||
97 | - | | |
98 | - | ||
99 | - | ||
100 | - | ||
101 | - | ||
102 | - | let X = " | |
103 | - | ||
104 | - | let Y = " | |
105 | - | ||
106 | - | let Z = | |
107 | - | ||
108 | - | let aa = | |
109 | - | ||
110 | - | let ab = | |
111 | - | ||
112 | - | let ac = | |
113 | - | ||
114 | - | let ad = | |
115 | - | ||
116 | - | let ae = | |
117 | - | ||
118 | - | let af = | |
119 | - | ||
120 | - | let ag = | |
121 | - | ||
122 | - | let ah = [" | |
123 | - | ||
124 | - | let ai = | |
125 | - | ||
126 | - | let aj = | |
127 | - | ||
128 | - | let ak = | |
129 | - | ||
130 | - | let al = | |
131 | - | ||
132 | - | let am = | |
78 | + | let I = 10000000 | |
79 | + | ||
80 | + | let J = 10000 | |
81 | + | ||
82 | + | func K (L) = fraction(d, pow(L, 4, e, 4, 4, DOWN), c) | |
83 | + | ||
84 | + | ||
85 | + | func M (N) = (100 + N) | |
86 | + | ||
87 | + | ||
88 | + | func O (P,Q) = { | |
89 | + | let R = K(Q) | |
90 | + | [R, (f * (R - P))] | |
91 | + | } | |
92 | + | ||
93 | + | ||
94 | + | func S (T,r) = { | |
95 | + | let U = split(valueOrElse(getString(T, s(r)), "0_0_0_0_0"), "_") | |
96 | + | let V = valueOrElse(getInteger(T, u(r)), 0) | |
97 | + | let W = valueOrElse(getInteger(T, q(r)), M(V)) | |
98 | + | [parseIntValue(U[h]), parseIntValue(U[i]), parseIntValue(U[j]), parseIntValue(U[k]), parseIntValue(U[l]), V, W] | |
99 | + | } | |
100 | + | ||
101 | + | ||
102 | + | let X = "LAND" | |
103 | + | ||
104 | + | let Y = "DUCK" | |
105 | + | ||
106 | + | let Z = "PRESALE" | |
107 | + | ||
108 | + | let aa = 6 | |
109 | + | ||
110 | + | let ab = 3456000 | |
111 | + | ||
112 | + | let ac = 86400000 | |
113 | + | ||
114 | + | let ad = 10000000000 | |
115 | + | ||
116 | + | let ae = "Africa_F_Africa" | |
117 | + | ||
118 | + | let af = 39637 | |
119 | + | ||
120 | + | let ag = 10 | |
121 | + | ||
122 | + | let ah = ["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"] | |
123 | + | ||
124 | + | let ai = ["Americas", "Europe", "Asia", "Africa", "Oceania"] | |
125 | + | ||
126 | + | let aj = 10000000 | |
127 | + | ||
128 | + | let ak = ["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_", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_", "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_30_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_50_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_70_0,0,0,0,0,0,0_201"] | |
129 | + | ||
130 | + | let al = 6 | |
131 | + | ||
132 | + | let am = 9 | |
133 | 133 | ||
134 | 134 | let an = 10 | |
135 | 135 | ||
136 | - | let ao = 0 | |
137 | - | ||
138 | - | let ap = 1 | |
139 | - | ||
140 | - | let aq = 2 | |
141 | - | ||
142 | - | let ar = 3 | |
143 | - | ||
144 | - | let as = 4 | |
145 | - | ||
146 | - | let at = 0 | |
147 | - | ||
148 | - | let au = 1 | |
149 | - | ||
150 | - | let av = 2 | |
151 | - | ||
152 | - | let aw = 3 | |
153 | - | ||
154 | - | let ax = 0 | |
155 | - | ||
156 | - | let ay = 1 | |
157 | - | ||
158 | - | let az = 2 | |
159 | - | ||
160 | - | let aA = 3 | |
161 | - | ||
162 | - | func aB (b) = ("lastTxIdByUser_" + b) | |
163 | - | ||
164 | - | ||
165 | - | func aC (aD) = ("nftOwner_" + aD) | |
166 | - | ||
167 | - | ||
168 | - | func aE (aD) = ("landCustomNameByAssetId_" + aD) | |
169 | - | ||
170 | - | ||
171 | - | func aF (aD) = ("stakedTime_" + aD) | |
172 | - | ||
173 | - | ||
174 | - | func aG (aD) = ("infraLevel_" + aD) | |
175 | - | ||
176 | - | ||
177 | - | func aH (aI,aD) = makeString(["landArtStatus", aI, aD], "_") | |
178 | - | ||
179 | - | ||
180 | - | func aJ (aK,aD,aL) = ((((("stakedTimeByTypeAssetIdAndOwner_" + aK) + "_") + aD) + "_") + aL) | |
181 | - | ||
182 | - | ||
183 | - | func aM (aN) = ("wareHouse_" + aN) | |
184 | - | ||
185 | - | ||
186 | - | func aO (aD) = ("duckCustomNameByAssetId_" + aD) | |
187 | - | ||
188 | - | ||
189 | - | func aP (b) = ("accountCustomNameByAddr_" + b) | |
190 | - | ||
191 | - | ||
192 | - | func aQ (b) = ("accRefBy_" + b) | |
193 | - | ||
194 | - | ||
195 | - | func aR (q) = ("onboardArtActivatedOnDuck_" + q) | |
196 | - | ||
197 | - | ||
198 | - | func aS (b) = ("onboardArtActivatedDuckBy_" + b) | |
199 | - | ||
200 | - | ||
201 | - | func aT (b) = ("accReferrals_" + b) | |
202 | - | ||
203 | - | ||
204 | - | func aU (aD) = ("duckOwner_" + aD) | |
205 | - | ||
206 | - | ||
207 | - | func aV (aL) = ("stakedDuckByOwner_" + aL) | |
208 | - | ||
209 | - | ||
210 | - | func aW (q) = ("backPack_" + q) | |
211 | - | ||
212 | - | ||
213 | - | func aX (q) = ("duckLocation_" + q) | |
214 | - | ||
215 | - | ||
216 | - | func aY () = "contractsBlocked" | |
217 | - | ||
218 | - | ||
219 | - | func aZ (ba) = ("%s%s__userGwlReleaseTime__" + ba) | |
220 | - | ||
221 | - | ||
222 | - | func bb () = "emergencyWarehouseProducts" | |
223 | - | ||
224 | - | ||
225 | - | let bc = 1 | |
226 | - | ||
227 | - | let bd = 2 | |
228 | - | ||
229 | - | func be (bf) = (parseIntValue(bf[ak]) * ai) | |
230 | - | ||
231 | - | ||
232 | - | let bg = true | |
233 | - | ||
234 | - | let bh = take(drop(this.bytes, 1), 1) | |
235 | - | ||
236 | - | let bi = { | |
237 | - | let bj = bh | |
238 | - | if ((base58'2W' == bj)) | |
136 | + | let ao = 10 | |
137 | + | ||
138 | + | let ap = 0 | |
139 | + | ||
140 | + | let aq = 1 | |
141 | + | ||
142 | + | let ar = 2 | |
143 | + | ||
144 | + | let as = 3 | |
145 | + | ||
146 | + | let at = 4 | |
147 | + | ||
148 | + | let au = 0 | |
149 | + | ||
150 | + | let av = 1 | |
151 | + | ||
152 | + | let aw = 2 | |
153 | + | ||
154 | + | let ax = 3 | |
155 | + | ||
156 | + | let ay = 0 | |
157 | + | ||
158 | + | let az = 1 | |
159 | + | ||
160 | + | let aA = 2 | |
161 | + | ||
162 | + | let aB = 3 | |
163 | + | ||
164 | + | func aC (b) = ("lastTxIdByUser_" + b) | |
165 | + | ||
166 | + | ||
167 | + | func aD (aE) = ("nftOwner_" + aE) | |
168 | + | ||
169 | + | ||
170 | + | func aF (aE) = ("landCustomNameByAssetId_" + aE) | |
171 | + | ||
172 | + | ||
173 | + | func aG (aE) = ("stakedTime_" + aE) | |
174 | + | ||
175 | + | ||
176 | + | func aH (aE) = ("infraLevel_" + aE) | |
177 | + | ||
178 | + | ||
179 | + | func aI (aJ,aE) = makeString(["landArtStatus", aJ, aE], "_") | |
180 | + | ||
181 | + | ||
182 | + | func aK (aL,aE,aM) = ((((("stakedTimeByTypeAssetIdAndOwner_" + aL) + "_") + aE) + "_") + aM) | |
183 | + | ||
184 | + | ||
185 | + | func aN (aO) = ("wareHouse_" + aO) | |
186 | + | ||
187 | + | ||
188 | + | func aP (aE) = ("duckCustomNameByAssetId_" + aE) | |
189 | + | ||
190 | + | ||
191 | + | func aQ (b) = ("accountCustomNameByAddr_" + b) | |
192 | + | ||
193 | + | ||
194 | + | func aR (b) = ("accRefBy_" + b) | |
195 | + | ||
196 | + | ||
197 | + | func aS (r) = ("onboardArtActivatedOnDuck_" + r) | |
198 | + | ||
199 | + | ||
200 | + | func aT (b) = ("onboardArtActivatedDuckBy_" + b) | |
201 | + | ||
202 | + | ||
203 | + | func aU (b) = ("accReferrals_" + b) | |
204 | + | ||
205 | + | ||
206 | + | func aV (aE) = ("duckOwner_" + aE) | |
207 | + | ||
208 | + | ||
209 | + | func aW (aM) = ("stakedDuckByOwner_" + aM) | |
210 | + | ||
211 | + | ||
212 | + | func aX (r) = ("backPack_" + r) | |
213 | + | ||
214 | + | ||
215 | + | func aY (r) = ("duckLocation_" + r) | |
216 | + | ||
217 | + | ||
218 | + | func aZ () = "contractsBlocked" | |
219 | + | ||
220 | + | ||
221 | + | func ba (bb) = ("%s%s__userGwlReleaseTime__" + bb) | |
222 | + | ||
223 | + | ||
224 | + | func bc () = "emergencyWarehouseProducts" | |
225 | + | ||
226 | + | ||
227 | + | let bd = 1 | |
228 | + | ||
229 | + | let be = 2 | |
230 | + | ||
231 | + | func bf (bg) = (parseIntValue(bg[al]) * aj) | |
232 | + | ||
233 | + | ||
234 | + | let bh = true | |
235 | + | ||
236 | + | let bi = take(drop(this.bytes, 1), 1) | |
237 | + | ||
238 | + | let bj = { | |
239 | + | let bk = bi | |
240 | + | if ((base58'2W' == bk)) | |
239 | 241 | then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi' | |
240 | - | else if ((base58'2T' == | |
242 | + | else if ((base58'2T' == bk)) | |
241 | 243 | then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63' | |
242 | 244 | else throw("Unknown chain") | |
243 | 245 | } | |
244 | 246 | ||
245 | - | let | |
246 | - | let | |
247 | - | if ((base58'2W' == | |
247 | + | let bl = { | |
248 | + | let bk = bi | |
249 | + | if ((base58'2W' == bk)) | |
248 | 250 | then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv" | |
249 | - | else if ((base58'2T' == | |
251 | + | else if ((base58'2T' == bk)) | |
250 | 252 | then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy" | |
251 | 253 | else throw("Unknown chain") | |
252 | 254 | } | |
253 | 255 | ||
254 | - | let | |
255 | - | let | |
256 | - | if ((base58'2W' == | |
256 | + | let bm = { | |
257 | + | let bk = bi | |
258 | + | if ((base58'2W' == bk)) | |
257 | 259 | then 10000000000 | |
258 | - | else if ((base58'2T' == | |
260 | + | else if ((base58'2T' == bk)) | |
259 | 261 | then 100000000 | |
260 | 262 | else throw("Unknown chain") | |
261 | 263 | } | |
262 | 264 | ||
263 | - | let | |
264 | - | let | |
265 | - | if ((base58'2W' == | |
265 | + | let bn = { | |
266 | + | let bk = bi | |
267 | + | if ((base58'2W' == bk)) | |
266 | 268 | then 600000 | |
267 | - | else if ((base58'2T' == | |
269 | + | else if ((base58'2T' == bk)) | |
268 | 270 | then 60000 | |
269 | 271 | else throw("Unknown chain") | |
270 | 272 | } | |
271 | 273 | ||
272 | - | let | |
273 | - | ||
274 | - | let | |
275 | - | ||
276 | - | let | |
277 | - | ||
278 | - | let | |
279 | - | ||
280 | - | let | |
281 | - | ||
282 | - | let | |
283 | - | ||
284 | - | let | |
285 | - | ||
286 | - | let | |
287 | - | ||
288 | - | func | |
289 | - | ||
290 | - | ||
291 | - | let | |
292 | - | ||
293 | - | let | |
294 | - | ||
295 | - | let | |
296 | - | ||
297 | - | let | |
298 | - | ||
299 | - | func | |
300 | - | ||
301 | - | ||
302 | - | func | |
303 | - | ||
304 | - | ||
305 | - | func | |
306 | - | ||
307 | - | ||
308 | - | func | |
309 | - | ||
310 | - | ||
311 | - | let | |
312 | - | ||
313 | - | let | |
314 | - | ||
315 | - | let | |
316 | - | ||
317 | - | let | |
318 | - | ||
319 | - | let | |
320 | - | ||
321 | - | let | |
322 | - | ||
323 | - | let | |
324 | - | ||
325 | - | let | |
326 | - | ||
327 | - | let | |
328 | - | ||
329 | - | let | |
330 | - | ||
331 | - | func | |
332 | - | ||
333 | - | ||
334 | - | func | |
335 | - | ||
336 | - | ||
337 | - | func | |
338 | - | ||
339 | - | ||
340 | - | func | |
341 | - | let | |
342 | - | if ($isInstanceOf( | |
274 | + | let bo = "__" | |
275 | + | ||
276 | + | let bp = 1000000 | |
277 | + | ||
278 | + | let bq = 100000000 | |
279 | + | ||
280 | + | let br = 25 | |
281 | + | ||
282 | + | let bs = 100 | |
283 | + | ||
284 | + | let bt = 225 | |
285 | + | ||
286 | + | let bu = 400 | |
287 | + | ||
288 | + | let bv = 625 | |
289 | + | ||
290 | + | func bw (bx,by) = valueOrErrorMessage(getString(bx, by), makeString(["mandatory ", toString(bx), ".", by, " is not defined"], "")) | |
291 | + | ||
292 | + | ||
293 | + | let bz = 1 | |
294 | + | ||
295 | + | let bA = 2 | |
296 | + | ||
297 | + | let bB = 3 | |
298 | + | ||
299 | + | let bC = 4 | |
300 | + | ||
301 | + | func bD () = "%s__restConfig" | |
302 | + | ||
303 | + | ||
304 | + | func bE () = "%s__restAddr" | |
305 | + | ||
306 | + | ||
307 | + | func bF (bG) = split_4C(bw(bG, bD()), bo) | |
308 | + | ||
309 | + | ||
310 | + | func bH (bI,bJ) = valueOrErrorMessage(addressFromString(bI[bJ]), ("Rest cfg doesn't contain address at index " + toString(bJ))) | |
311 | + | ||
312 | + | ||
313 | + | let bK = addressFromStringValue(valueOrElse(getString(this, bE()), bl)) | |
314 | + | ||
315 | + | let bI = bF(bK) | |
316 | + | ||
317 | + | let T = bH(bI, bz) | |
318 | + | ||
319 | + | let bL = bH(bI, bA) | |
320 | + | ||
321 | + | let bM = bH(bI, bB) | |
322 | + | ||
323 | + | let bN = bH(bI, bC) | |
324 | + | ||
325 | + | let bO = 0 | |
326 | + | ||
327 | + | let bP = 1 | |
328 | + | ||
329 | + | let bQ = 2 | |
330 | + | ||
331 | + | let bR = 3 | |
332 | + | ||
333 | + | func bS () = "resTypesProportions" | |
334 | + | ||
335 | + | ||
336 | + | func bT (aM) = ("stakedLandsByOwner_" + aM) | |
337 | + | ||
338 | + | ||
339 | + | func bU (aM) = ("stakedPiecesByOwner_" + aM) | |
340 | + | ||
341 | + | ||
342 | + | func bV (bW) = { | |
343 | + | let bk = bW | |
344 | + | if ($isInstanceOf(bk, "String")) | |
343 | 345 | then { | |
344 | - | let | |
345 | - | | |
346 | + | let bX = bk | |
347 | + | bX | |
346 | 348 | } | |
347 | 349 | else throw("fail to cast into String") | |
348 | 350 | } | |
349 | 351 | ||
350 | 352 | ||
351 | - | func | |
352 | - | let | |
353 | - | if ($isInstanceOf( | |
353 | + | func bY (bW) = { | |
354 | + | let bk = bW | |
355 | + | if ($isInstanceOf(bk, "Int")) | |
354 | 356 | then { | |
355 | - | let | |
356 | - | | |
357 | + | let bZ = bk | |
358 | + | bZ | |
357 | 359 | } | |
358 | 360 | else throw("fail to cast into Int") | |
359 | 361 | } | |
360 | 362 | ||
361 | 363 | ||
362 | - | func | |
363 | - | let | |
364 | - | if (("S" == | |
365 | - | then | |
366 | - | else if (("M" == | |
367 | - | then | |
368 | - | else if (("L" == | |
369 | - | then | |
370 | - | else if (("XL" == | |
371 | - | then | |
372 | - | else if (("XXL" == | |
373 | - | then | |
364 | + | func ca (cb) = { | |
365 | + | let bk = cb | |
366 | + | if (("S" == bk)) | |
367 | + | then br | |
368 | + | else if (("M" == bk)) | |
369 | + | then bs | |
370 | + | else if (("L" == bk)) | |
371 | + | then bt | |
372 | + | else if (("XL" == bk)) | |
373 | + | then bu | |
374 | + | else if (("XXL" == bk)) | |
375 | + | then bv | |
374 | 376 | else throw("Unknown land size") | |
375 | 377 | } | |
376 | 378 | ||
377 | 379 | ||
378 | - | let cb = { | |
379 | - | let bj = bh | |
380 | - | if ((base58'2W' == bj)) | |
380 | + | func cc (bX) = isDefined(parseInt(bX)) | |
381 | + | ||
382 | + | ||
383 | + | let cd = { | |
384 | + | let bk = bi | |
385 | + | if ((base58'2W' == bk)) | |
381 | 386 | then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv") | |
382 | - | else if ((base58'2T' == | |
387 | + | else if ((base58'2T' == bk)) | |
383 | 388 | then this | |
384 | 389 | else throw("Unknown chain") | |
385 | 390 | } | |
386 | 391 | ||
387 | - | let | |
388 | - | let | |
389 | - | if ((base58'2W' == | |
392 | + | let ce = { | |
393 | + | let bk = bi | |
394 | + | if ((base58'2W' == bk)) | |
390 | 395 | then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb") | |
391 | - | else if ((base58'2T' == | |
396 | + | else if ((base58'2T' == bk)) | |
392 | 397 | then this | |
393 | 398 | else throw("Unknown chain") | |
394 | 399 | } | |
395 | 400 | ||
396 | - | let | |
397 | - | ||
398 | - | let | |
399 | - | ||
400 | - | let | |
401 | - | ||
402 | - | let | |
403 | - | ||
404 | - | let | |
405 | - | ||
406 | - | let | |
407 | - | ||
408 | - | let | |
409 | - | let | |
410 | - | if ((base58'2W' == | |
401 | + | let cf = base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD' | |
402 | + | ||
403 | + | let cg = [30, 60, 120] | |
404 | + | ||
405 | + | let ch = 300000 | |
406 | + | ||
407 | + | let ci = 5000000 | |
408 | + | ||
409 | + | let cj = 50 | |
410 | + | ||
411 | + | let ck = 10000000 | |
412 | + | ||
413 | + | let cl = { | |
414 | + | let bk = bi | |
415 | + | if ((base58'2W' == bk)) | |
411 | 416 | then 252289527462 | |
412 | - | else if ((base58'2T' == | |
417 | + | else if ((base58'2T' == bk)) | |
413 | 418 | then 2522895274 | |
414 | 419 | else throw("Unknown chain") | |
415 | 420 | } | |
416 | 421 | ||
417 | - | let | |
418 | - | let | |
419 | - | if ((base58'2W' == | |
422 | + | let cm = { | |
423 | + | let bk = bi | |
424 | + | if ((base58'2W' == bk)) | |
420 | 425 | then 250000000 | |
421 | - | else if ((base58'2T' == | |
426 | + | else if ((base58'2T' == bk)) | |
422 | 427 | then 250000000 | |
423 | 428 | else throw("Unknown chain") | |
424 | 429 | } | |
425 | 430 | ||
426 | - | let | |
427 | - | ||
428 | - | let | |
429 | - | ||
430 | - | let | |
431 | - | ||
432 | - | let | |
433 | - | ||
434 | - | let | |
435 | - | ||
436 | - | let | |
437 | - | ||
438 | - | let | |
439 | - | ||
440 | - | func | |
441 | - | ||
442 | - | ||
443 | - | func | |
444 | - | ||
445 | - | ||
446 | - | func | |
447 | - | ||
448 | - | ||
449 | - | func | |
450 | - | ||
451 | - | ||
452 | - | func | |
453 | - | ||
454 | - | ||
455 | - | func | |
456 | - | ||
457 | - | ||
458 | - | func | |
459 | - | ||
460 | - | ||
461 | - | func | |
462 | - | ||
463 | - | ||
464 | - | func | |
465 | - | ||
466 | - | ||
467 | - | let | |
468 | - | ||
469 | - | let | |
470 | - | ||
471 | - | let | |
472 | - | ||
473 | - | let | |
474 | - | ||
475 | - | let | |
476 | - | ||
477 | - | let | |
478 | - | ||
479 | - | let | |
480 | - | ||
481 | - | func | |
482 | - | ||
483 | - | ||
484 | - | func | |
485 | - | let | |
486 | - | if ((0 >= | |
431 | + | let cn = toBigInt(5) | |
432 | + | ||
433 | + | let co = toBigInt(20) | |
434 | + | ||
435 | + | let cp = toBigInt((20 * 20)) | |
436 | + | ||
437 | + | let cq = toBigInt(((20 * 20) * 20)) | |
438 | + | ||
439 | + | let cr = toBigInt((((20 * 20) * 20) * 20)) | |
440 | + | ||
441 | + | let cs = toBigInt(((((20 * 20) * 20) * 20) * 20)) | |
442 | + | ||
443 | + | let ct = 500 | |
444 | + | ||
445 | + | func cu () = "nextLandNum" | |
446 | + | ||
447 | + | ||
448 | + | func cv (cw) = ("landToAsset_" + cw) | |
449 | + | ||
450 | + | ||
451 | + | func cx (cy) = ("landByCustomName_" + cy) | |
452 | + | ||
453 | + | ||
454 | + | func cz (aE,aM) = ((("infraLevelByAssetIdAndOwner_" + aE) + "_") + aM) | |
455 | + | ||
456 | + | ||
457 | + | func cA (aJ,aE,aM) = makeString(["landArtStatusByTypeAssetIdAndOwner", aJ, aE, aM], "_") | |
458 | + | ||
459 | + | ||
460 | + | func cB (cw) = ("landOwner_" + cw) | |
461 | + | ||
462 | + | ||
463 | + | func cC (cy) = ("duckByCustomName_" + cy) | |
464 | + | ||
465 | + | ||
466 | + | func cD (cy) = ("accountByCustomName_" + cy) | |
467 | + | ||
468 | + | ||
469 | + | func cE () = "oldiesList" | |
470 | + | ||
471 | + | ||
472 | + | let cF = 0 | |
473 | + | ||
474 | + | let cG = 1 | |
475 | + | ||
476 | + | let cH = 2 | |
477 | + | ||
478 | + | let cI = 0 | |
479 | + | ||
480 | + | let cJ = 5 | |
481 | + | ||
482 | + | let cK = 6 | |
483 | + | ||
484 | + | let cL = 7 | |
485 | + | ||
486 | + | func cM (cw,cb) = ((X + cw) + cb) | |
487 | + | ||
488 | + | ||
489 | + | func cN (cO,cP) = { | |
490 | + | let cQ = (((((cP[0] + cP[1]) + cP[2]) + cP[3]) + cP[4]) + cP[5]) | |
491 | + | if ((0 >= cQ)) | |
487 | 492 | then throw("Zero weights sum") | |
488 | 493 | else { | |
489 | - | let | |
490 | - | func | |
491 | - | ||
492 | - | let | |
493 | - | let | |
494 | - | let | |
495 | - | func | |
496 | - | then | |
497 | - | else | |
498 | - | ||
499 | - | func | |
500 | - | then | |
494 | + | let cR = fraction(cO, bp, cQ) | |
495 | + | func cS (cT,cU) = (cT :+ fraction(cU, cR, bp)) | |
496 | + | ||
497 | + | let cV = cP | |
498 | + | let cW = size(cV) | |
499 | + | let cX = nil | |
500 | + | func cY (cZ,da) = if ((da >= cW)) | |
501 | + | then cZ | |
502 | + | else cS(cZ, cV[da]) | |
503 | + | ||
504 | + | func db (cZ,da) = if ((da >= cW)) | |
505 | + | then cZ | |
501 | 506 | else throw("List size exceeds 6") | |
502 | 507 | ||
503 | - | | |
504 | - | } | |
505 | - | } | |
506 | - | ||
507 | - | ||
508 | - | func | |
509 | - | let | |
510 | - | if ((size( | |
508 | + | db(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6) | |
509 | + | } | |
510 | + | } | |
511 | + | ||
512 | + | ||
513 | + | func dc (cO) = { | |
514 | + | let dd = split(value(getString(bS())), "_") | |
515 | + | if ((size(dd) != aa)) | |
511 | 516 | then throw("Wrong proportions data") | |
512 | 517 | else { | |
513 | - | let | |
514 | - | | |
515 | - | } | |
516 | - | } | |
517 | - | ||
518 | - | ||
519 | - | func | |
520 | - | let | |
521 | - | func | |
522 | - | let | |
523 | - | if ((0 > | |
524 | - | then throw(((((("Not enough material idx=" + toString( | |
525 | - | else ( | |
526 | - | } | |
527 | - | ||
528 | - | if ( | |
518 | + | let de = [parseIntValue(dd[0]), parseIntValue(dd[1]), parseIntValue(dd[2]), parseIntValue(dd[3]), parseIntValue(dd[4]), parseIntValue(dd[5])] | |
519 | + | cN(cO, de) | |
520 | + | } | |
521 | + | } | |
522 | + | ||
523 | + | ||
524 | + | func df (dg,dh,di) = { | |
525 | + | let dj = dc(di) | |
526 | + | func dk (cT,bJ) = { | |
527 | + | let dl = (parseIntValue(dh[bJ]) - dj[bJ]) | |
528 | + | if ((0 > dl)) | |
529 | + | then throw(((((("Not enough material idx=" + toString(bJ)) + ", you have ") + dh[bJ]) + ", but need ") + toString(dj[bJ]))) | |
530 | + | else (cT :+ toString(dl)) | |
531 | + | } | |
532 | + | ||
533 | + | if (dg) | |
529 | 534 | then { | |
530 | - | let | |
531 | - | let | |
532 | - | let | |
533 | - | func | |
534 | - | then | |
535 | - | else | |
536 | - | ||
537 | - | func | |
538 | - | then | |
535 | + | let cV = [0, 1, 2, 3, 4, 5] | |
536 | + | let cW = size(cV) | |
537 | + | let cX = nil | |
538 | + | func cY (cZ,da) = if ((da >= cW)) | |
539 | + | then cZ | |
540 | + | else dk(cZ, cV[da]) | |
541 | + | ||
542 | + | func db (cZ,da) = if ((da >= cW)) | |
543 | + | then cZ | |
539 | 544 | else throw("List size exceeds 6") | |
540 | 545 | ||
541 | - | cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6) | |
542 | - | } | |
543 | - | else df | |
544 | - | } | |
545 | - | ||
546 | - | ||
547 | - | func dk (dl,dm) = if ((dm == "")) | |
548 | - | then dl | |
549 | - | else { | |
550 | - | let dn = if ((dl == "")) | |
551 | - | then nil | |
552 | - | else split(dl, "_") | |
553 | - | func do (cR,dp) = { | |
554 | - | let dq = cR._1 | |
555 | - | func dr (ds,dt) = { | |
556 | - | let du = split(dt, ",") | |
557 | - | if ((size(du) != 2)) | |
558 | - | then throw("Incorrect format, should be index,amount") | |
546 | + | db(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6) | |
547 | + | } | |
548 | + | else dh | |
549 | + | } | |
550 | + | ||
551 | + | ||
552 | + | func dm (dn,do) = { | |
553 | + | func dp (cT,dq) = { | |
554 | + | let dr = split(dq, ",") | |
555 | + | if ((size(dr) != 2)) | |
556 | + | then throw("Incorrect format, should be index,amount") | |
557 | + | else { | |
558 | + | let bJ = parseIntValue(dr[0]) | |
559 | + | if (if ((0 > bJ)) | |
560 | + | then true | |
561 | + | else (bJ >= size(ak))) | |
562 | + | then throw("Unknown product idx") | |
559 | 563 | else { | |
560 | - | let bI = parseIntValue(du[0]) | |
561 | - | if (if ((0 > bI)) | |
562 | - | then true | |
563 | - | else (bI >= size(aj))) | |
564 | - | then throw("Unknown product idx") | |
565 | - | else if ((bI != dq)) | |
566 | - | then ds | |
567 | - | else { | |
568 | - | let dv = parseIntValue(du[1]) | |
569 | - | if ((0 >= dv)) | |
570 | - | then throw("Pass only positive amounts") | |
571 | - | else (ds + dv) | |
572 | - | } | |
564 | + | let ds = parseIntValue(dr[1]) | |
565 | + | let dt = split(cT, (dr[0] + ":")) | |
566 | + | if ((size(dt) != 2)) | |
567 | + | then throw((("You don't have " + ah[bJ]) + " equipped")) | |
568 | + | else { | |
569 | + | let du = dt[1] | |
570 | + | let dv = if (cc(take(drop(du, 1), 1))) | |
571 | + | then 2 | |
572 | + | else 1 | |
573 | + | let dw = parseIntValue(take(du, dv)) | |
574 | + | let dx = drop(du, dv) | |
575 | + | let dy = if ((dw >= ds)) | |
576 | + | then (dw - ds) | |
577 | + | else throw(((((("You equipped " + toString(dw)) + " of ") + ah[bJ]) + ", but tried to use ") + toString(ds))) | |
578 | + | ((((dt[0] + dr[0]) + ":") + toString(dy)) + dx) | |
579 | + | } | |
573 | 580 | } | |
574 | 581 | } | |
575 | - | ||
576 | - | let dw = { | |
577 | - | let cT = split(dm, "_") | |
578 | - | let cU = size(cT) | |
579 | - | let cV = 0 | |
580 | - | func cW (cX,cY) = if ((cY >= cU)) | |
581 | - | then cX | |
582 | - | else dr(cX, cT[cY]) | |
583 | - | ||
584 | - | func cZ (cX,cY) = if ((cY >= cU)) | |
585 | - | then cX | |
586 | - | else throw("List size exceeds 10") | |
587 | - | ||
588 | - | cZ(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
589 | - | } | |
590 | - | let dx = if ((size(dn) > dq)) | |
591 | - | then parseIntValue(dn[dq]) | |
592 | - | else 0 | |
593 | - | let dy = if ((dx >= dw)) | |
594 | - | then (dx - dw) | |
595 | - | else throw(((((("You have " + toString(dx)) + " of ") + ag[dq]) + ", but tried to use ") + toString(dw))) | |
596 | - | $Tuple2((dq + 1), (cR._2 :+ toString(dy))) | |
597 | - | } | |
598 | - | ||
599 | - | let dz = { | |
600 | - | let cT = aj | |
601 | - | let cU = size(cT) | |
602 | - | let cV = $Tuple2(0, nil) | |
603 | - | func cW (cX,cY) = if ((cY >= cU)) | |
604 | - | then cX | |
605 | - | else do(cX, cT[cY]) | |
606 | - | ||
607 | - | func cZ (cX,cY) = if ((cY >= cU)) | |
608 | - | then cX | |
609 | - | else throw("List size exceeds 50") | |
610 | - | ||
611 | - | cZ(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cV, 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) | |
612 | - | } | |
613 | - | makeString(dz._2, "_") | |
614 | - | } | |
615 | - | ||
616 | - | ||
617 | - | func dA (dB) = { | |
618 | - | let dn = if ((dB == "")) | |
582 | + | } | |
583 | + | ||
584 | + | let cV = split(do, "_") | |
585 | + | let cW = size(cV) | |
586 | + | let cX = dn | |
587 | + | func cY (cZ,da) = if ((da >= cW)) | |
588 | + | then cZ | |
589 | + | else dp(cZ, cV[da]) | |
590 | + | ||
591 | + | func db (cZ,da) = if ((da >= cW)) | |
592 | + | then cZ | |
593 | + | else throw("List size exceeds 10") | |
594 | + | ||
595 | + | db(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
596 | + | } | |
597 | + | ||
598 | + | ||
599 | + | func dz (dA) = { | |
600 | + | let dB = if ((dA == "")) | |
619 | 601 | then nil | |
620 | - | else split( | |
621 | - | func dC ( | |
622 | - | let | |
623 | - | let | |
624 | - | then parseIntValue( | |
602 | + | else split(dA, "_") | |
603 | + | func dC (cT,bg) = { | |
604 | + | let dD = (size(cT) / 8) | |
605 | + | let dw = if ((size(dB) > dD)) | |
606 | + | then parseIntValue(dB[dD]) | |
625 | 607 | else 0 | |
626 | - | ( | |
627 | - | } | |
628 | - | ||
629 | - | let | |
630 | - | let | |
631 | - | let | |
632 | - | func | |
633 | - | then | |
634 | - | else dC( | |
635 | - | ||
636 | - | func | |
637 | - | then | |
608 | + | (cT + toBytes(dw)) | |
609 | + | } | |
610 | + | ||
611 | + | let cV = ak | |
612 | + | let cW = size(cV) | |
613 | + | let cX = base58'' | |
614 | + | func cY (cZ,da) = if ((da >= cW)) | |
615 | + | then cZ | |
616 | + | else dC(cZ, cV[da]) | |
617 | + | ||
618 | + | func db (cZ,da) = if ((da >= cW)) | |
619 | + | then cZ | |
638 | 620 | else throw("List size exceeds 50") | |
639 | 621 | ||
640 | - | | |
641 | - | } | |
642 | - | ||
643 | - | ||
644 | - | func | |
645 | - | func | |
646 | - | let | |
647 | - | let | |
648 | - | ( | |
622 | + | db(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cX, 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) | |
623 | + | } | |
624 | + | ||
625 | + | ||
626 | + | func dE (dF) = { | |
627 | + | func dG (cT,bg) = { | |
628 | + | let dD = size(cT) | |
629 | + | let dH = take(drop(dF, (8 * dD)), 8) | |
630 | + | (cT :+ toString(toInt(dH))) | |
649 | 631 | } | |
650 | 632 | ||
651 | 633 | makeString({ | |
652 | - | let | |
653 | - | let | |
654 | - | let | |
655 | - | func | |
656 | - | then | |
657 | - | else | |
658 | - | ||
659 | - | func | |
660 | - | then | |
634 | + | let cV = ak | |
635 | + | let cW = size(cV) | |
636 | + | let cX = nil | |
637 | + | func cY (cZ,da) = if ((da >= cW)) | |
638 | + | then cZ | |
639 | + | else dG(cZ, cV[da]) | |
640 | + | ||
641 | + | func db (cZ,da) = if ((da >= cW)) | |
642 | + | then cZ | |
661 | 643 | else throw("List size exceeds 50") | |
662 | 644 | ||
663 | - | | |
645 | + | db(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cX, 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) | |
664 | 646 | }, "_") | |
665 | 647 | } | |
666 | 648 | ||
667 | 649 | ||
668 | - | func | |
669 | - | func | |
670 | - | then throw(("Requirement not satisfied: " + g[ | |
650 | + | func dI (dJ,dK) = { | |
651 | + | func dL (cT,dD) = if ((parseIntValue(dK[dD]) > dJ[dD])) | |
652 | + | then throw(("Requirement not satisfied: " + g[dD])) | |
671 | 653 | else true | |
672 | 654 | ||
673 | - | let | |
674 | - | let | |
675 | - | let | |
676 | - | func | |
677 | - | then | |
678 | - | else | |
679 | - | ||
680 | - | func | |
681 | - | then | |
655 | + | let cV = [0, 1, 2, 3, 4, 5, 6] | |
656 | + | let cW = size(cV) | |
657 | + | let cX = false | |
658 | + | func cY (cZ,da) = if ((da >= cW)) | |
659 | + | then cZ | |
660 | + | else dL(cZ, cV[da]) | |
661 | + | ||
662 | + | func db (cZ,da) = if ((da >= cW)) | |
663 | + | then cZ | |
682 | 664 | else throw("List size exceeds 7") | |
683 | 665 | ||
684 | - | | |
685 | - | } | |
686 | - | ||
687 | - | ||
688 | - | func | |
689 | - | let | |
690 | - | if ((size( | |
666 | + | db(cY(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6), 7) | |
667 | + | } | |
668 | + | ||
669 | + | ||
670 | + | func dM (dN,dB,dO,dP,dQ,dR,dJ) = { | |
671 | + | let dr = split(dN, ":") | |
672 | + | if ((size(dr) != 2)) | |
691 | 673 | then throw("Incorrect format, should be index:amount") | |
692 | - | else { | |
693 | - | let dR = parseIntValue(du[0]) | |
694 | - | let dS = parseIntValue(du[1]) | |
695 | - | if (if ((0 > dR)) | |
696 | - | then true | |
697 | - | else (dR >= size(aj))) | |
698 | - | then throw("Unknown product idx") | |
699 | - | else if ((0 > dS)) | |
700 | - | then throw("Count can't be negative") | |
701 | - | else if ((dS == 0)) | |
702 | - | then $Tuple2(dn, false) | |
703 | - | else { | |
704 | - | let dT = take(dn, (8 * dR)) | |
705 | - | let dx = toInt(take(drop(dn, (8 * dR)), 8)) | |
706 | - | let dU = drop(dn, (8 * (dR + 1))) | |
707 | - | let bf = split(aj[dR], "_") | |
708 | - | if (if (!(dN)) | |
709 | - | then (dS > dx) | |
710 | - | else false) | |
711 | - | then throw(((((("You have " + toString(dx)) + " of ") + ag[dR]) + ", but tried to use ") + toString(dS))) | |
674 | + | else if ((size(dr[0]) != 2)) | |
675 | + | then throw("Product idx should be 2 digits, zero padded") | |
676 | + | else { | |
677 | + | let dS = parseIntValue(dr[0]) | |
678 | + | let dT = parseIntValue(dr[1]) | |
679 | + | if (if ((0 > dS)) | |
680 | + | then true | |
681 | + | else (dS >= size(ak))) | |
682 | + | then throw("Unknown product idx") | |
683 | + | else if ((0 > dT)) | |
684 | + | then throw("Count can't be negative") | |
685 | + | else if ((dT > p)) | |
686 | + | then throw(((("Can't put more than " + toString(p)) + " of ") + ah[dS])) | |
687 | + | else if ((dT == 0)) | |
688 | + | then $Tuple2(dB, false) | |
712 | 689 | else { | |
713 | - | let dV = if (if (!(dN)) | |
714 | - | then dH(dI, split(bf[al], ",")) | |
690 | + | let dU = take(dB, (8 * dS)) | |
691 | + | let dw = toInt(take(drop(dB, (8 * dS)), 8)) | |
692 | + | let dx = drop(dB, (8 * (dS + 1))) | |
693 | + | let bg = split(ak[dS], "_") | |
694 | + | if (if (!(dO)) | |
695 | + | then (dT > dw) | |
715 | 696 | else false) | |
716 | - | then | |
717 | - | | |
718 | - | if (( | |
719 | - | then | |
720 | - | else | |
721 | - | | |
722 | - | let | |
723 | - | if (( | |
724 | - | then throw(" | |
697 | + | then throw(((((("You have " + toString(dw)) + " of ") + ah[dS]) + ", but tried to use ") + toString(dT))) | |
698 | + | else { | |
699 | + | let dV = if (if (!(dO)) | |
700 | + | then dI(dJ, split(bg[am], ",")) | |
701 | + | else false) | |
702 | + | then { | |
703 | + | let dW = bg[an] | |
704 | + | if ((dW == "")) | |
705 | + | then throw("Item cannot be equipped") | |
725 | 706 | else { | |
726 | - | let dZ = ((dX % 100) / 10) | |
727 | - | if ((dP != dZ)) | |
728 | - | then throw("Slot incompatible") | |
707 | + | let dX = parseIntValue(dW) | |
708 | + | let dY = (dX / 100) | |
709 | + | if ((dP != dY)) | |
710 | + | then throw("Segment incompatible") | |
729 | 711 | else { | |
730 | - | let ea = (dX % 10) | |
731 | - | if (if ((dQ != 0)) | |
732 | - | then (ea > 1) | |
733 | - | else false) | |
734 | - | then throw("Big items should occupy slot 0") | |
735 | - | else (ea > 1) | |
712 | + | let dZ = ((dX % 100) / 10) | |
713 | + | if ((dQ != dZ)) | |
714 | + | then throw("Slot incompatible") | |
715 | + | else { | |
716 | + | let ea = (dX % 10) | |
717 | + | if (if ((dR != 0)) | |
718 | + | then (ea > 1) | |
719 | + | else false) | |
720 | + | then throw("Big items should occupy slot 0") | |
721 | + | else (ea > 1) | |
722 | + | } | |
736 | 723 | } | |
737 | 724 | } | |
738 | 725 | } | |
726 | + | else false | |
727 | + | $Tuple2(((dU + toBytes((dw + (if (dO) | |
728 | + | then dT | |
729 | + | else -(dT))))) + dx), dV) | |
739 | 730 | } | |
740 | - | else false | |
741 | - | $Tuple2(((dT + toBytes((dx + (if (dN) | |
742 | - | then dS | |
743 | - | else -(dS))))) + dU), dV) | |
744 | 731 | } | |
745 | - | } | |
746 | - | } | |
747 | - | } | |
748 | - | ||
749 | - | ||
750 | - | func eb (ec,ed,dN,dO,dP,dJ) = if ((ec != "")) | |
732 | + | } | |
733 | + | } | |
734 | + | ||
735 | + | ||
736 | + | func eb (ec,ed,dO,dP,dQ,dK) = if ((ec != "")) | |
751 | 737 | then { | |
752 | 738 | let ee = split(ec, ",") | |
753 | 739 | if ((size(ee) > o)) | |
763 | 749 | then ed | |
764 | 750 | else { | |
765 | 751 | let eh = if ((ef != "")) | |
766 | - | then | |
752 | + | then dM(ef, ed, dO, dP, dQ, 0, dK) | |
767 | 753 | else $Tuple2(ed, false) | |
768 | 754 | if ((eg != "")) | |
769 | 755 | then if (eh._2) | |
770 | 756 | then throw("Big item already occupies slot") | |
771 | - | else | |
757 | + | else dM(eg, eh._1, dO, dP, dQ, 1, dK)._1 | |
772 | 758 | else eh._1 | |
773 | 759 | } | |
774 | 760 | } | |
776 | 762 | else ed | |
777 | 763 | ||
778 | 764 | ||
779 | - | func ei (ej,ek, | |
780 | - | func | |
781 | - | let | |
782 | - | let | |
783 | - | if ((size( | |
765 | + | func ei (ej,ek,dO,dK) = { | |
766 | + | func dP (cT,el) = { | |
767 | + | let dD = cT._1 | |
768 | + | let dQ = split(el, ";") | |
769 | + | if ((size(dQ) != n)) | |
784 | 770 | then throw("Wrong segment format") | |
785 | 771 | else { | |
786 | - | let em = | |
787 | - | let | |
772 | + | let em = dQ[0] | |
773 | + | let en = dQ[1] | |
788 | 774 | if (if ((em == "")) | |
789 | - | then ( | |
775 | + | then (en == "") | |
790 | 776 | else false) | |
791 | - | then $Tuple2(( | |
777 | + | then $Tuple2((dD + 1), cT._2) | |
792 | 778 | else { | |
793 | - | let | |
794 | - | $Tuple2(( | |
779 | + | let eo = eb(em, cT._2, dO, dD, 0, dK) | |
780 | + | $Tuple2((dD + 1), eb(en, eo, dO, dD, 1, dK)) | |
795 | 781 | } | |
796 | 782 | } | |
797 | 783 | } | |
798 | 784 | ||
799 | - | ( let | |
800 | - | let | |
801 | - | let | |
802 | - | func | |
803 | - | then | |
804 | - | else | |
805 | - | ||
806 | - | func | |
807 | - | then | |
785 | + | ( let cV = ej | |
786 | + | let cW = size(cV) | |
787 | + | let cX = $Tuple2(0, ek) | |
788 | + | func cY (cZ,da) = if ((da >= cW)) | |
789 | + | then cZ | |
790 | + | else dP(cZ, cV[da]) | |
791 | + | ||
792 | + | func db (cZ,da) = if ((da >= cW)) | |
793 | + | then cZ | |
808 | 794 | else throw("List size exceeds 6") | |
809 | 795 | ||
810 | - | | |
811 | - | } | |
812 | - | ||
813 | - | ||
814 | - | func | |
796 | + | db(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6))._2 | |
797 | + | } | |
798 | + | ||
799 | + | ||
800 | + | func ep (eq,er,es,et) = if ((size(eq) != aa)) | |
815 | 801 | then throw("Wrong proportions data") | |
816 | 802 | else { | |
817 | - | func | |
818 | - | let | |
819 | - | if ((0 > | |
820 | - | then throw(((((((("Panic! Pieces of type=" + toString( | |
821 | - | else ( | |
822 | - | } | |
823 | - | ||
824 | - | let | |
825 | - | let | |
826 | - | let | |
827 | - | let | |
828 | - | func | |
829 | - | then | |
830 | - | else | |
831 | - | ||
832 | - | func | |
833 | - | then | |
803 | + | func eu (cT,ev) = { | |
804 | + | let dl = (parseIntValue(eq[ev]) + ((et * er[ev]) * es)) | |
805 | + | if ((0 > dl)) | |
806 | + | then throw(((((((("Panic! Pieces of type=" + toString(ev)) + ", sign=") + toString(et)) + ", terrainCounts[i]=") + toString(er[ev])) + ", landSizeIndex=") + toString(es))) | |
807 | + | else (cT :+ toString(dl)) | |
808 | + | } | |
809 | + | ||
810 | + | let de = { | |
811 | + | let cV = [0, 1, 2, 3, 4, 5] | |
812 | + | let cW = size(cV) | |
813 | + | let cX = nil | |
814 | + | func cY (cZ,da) = if ((da >= cW)) | |
815 | + | then cZ | |
816 | + | else eu(cZ, cV[da]) | |
817 | + | ||
818 | + | func db (cZ,da) = if ((da >= cW)) | |
819 | + | then cZ | |
834 | 820 | else throw("List size exceeds 6") | |
835 | 821 | ||
836 | - | | |
837 | - | } | |
838 | - | makeString( | |
839 | - | } | |
840 | - | ||
841 | - | ||
842 | - | func | |
843 | - | let | |
844 | - | | |
845 | - | } | |
846 | - | ||
847 | - | ||
848 | - | func | |
849 | - | ||
850 | - | ||
851 | - | func | |
852 | - | func | |
853 | - | let | |
854 | - | ( | |
855 | - | } | |
856 | - | ||
857 | - | let | |
858 | - | let | |
859 | - | let | |
860 | - | let | |
861 | - | func | |
862 | - | then | |
863 | - | else | |
864 | - | ||
865 | - | func | |
866 | - | then | |
822 | + | db(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6) | |
823 | + | } | |
824 | + | makeString(de, "_") | |
825 | + | } | |
826 | + | ||
827 | + | ||
828 | + | func ew (er,es,et) = { | |
829 | + | let eq = split(valueOrElse(getString(bS()), "0_0_0_0_0_0"), "_") | |
830 | + | ep(eq, er, es, et) | |
831 | + | } | |
832 | + | ||
833 | + | ||
834 | + | func ex (ey) = [(size(split(ey, "A")) - 1), (size(split(ey, "B")) - 1), (size(split(ey, "C")) - 1), (size(split(ey, "D")) - 1), (size(split(ey, "E")) - 1), (size(split(ey, "F")) - 1)] | |
835 | + | ||
836 | + | ||
837 | + | func ez (eA,er,eB,es,eC) = { | |
838 | + | func eD (cT,ev) = { | |
839 | + | let eE = ((fraction(eB, eC, ac) * er[ev]) * es) | |
840 | + | (cT :+ toString((parseIntValue(eA[ev]) + eE))) | |
841 | + | } | |
842 | + | ||
843 | + | let de = { | |
844 | + | let cV = [0, 1, 2, 3, 4, 5] | |
845 | + | let cW = size(cV) | |
846 | + | let cX = nil | |
847 | + | func cY (cZ,da) = if ((da >= cW)) | |
848 | + | then cZ | |
849 | + | else eD(cZ, cV[da]) | |
850 | + | ||
851 | + | func db (cZ,da) = if ((da >= cW)) | |
852 | + | then cZ | |
867 | 853 | else throw("List size exceeds 6") | |
868 | 854 | ||
869 | - | | |
870 | - | } | |
871 | - | makeString( | |
872 | - | } | |
873 | - | ||
874 | - | ||
875 | - | func | |
876 | - | func | |
877 | - | let | |
878 | - | $Tuple2(( | |
879 | - | } | |
880 | - | ||
881 | - | let | |
882 | - | let | |
883 | - | let | |
884 | - | func | |
885 | - | then | |
886 | - | else | |
887 | - | ||
888 | - | func | |
889 | - | then | |
855 | + | db(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6) | |
856 | + | } | |
857 | + | makeString(de, "_") | |
858 | + | } | |
859 | + | ||
860 | + | ||
861 | + | func eF (er,eB,es,eC) = { | |
862 | + | func eD (cT,ev) = { | |
863 | + | let eE = ((fraction(eB, eC, ac) * er[ev]) * es) | |
864 | + | $Tuple2((cT._1 :+ eE), (cT._2 + eE)) | |
865 | + | } | |
866 | + | ||
867 | + | let cV = [0, 1, 2, 3, 4, 5] | |
868 | + | let cW = size(cV) | |
869 | + | let cX = $Tuple2(nil, 0) | |
870 | + | func cY (cZ,da) = if ((da >= cW)) | |
871 | + | then cZ | |
872 | + | else eD(cZ, cV[da]) | |
873 | + | ||
874 | + | func db (cZ,da) = if ((da >= cW)) | |
875 | + | then cZ | |
890 | 876 | else throw("List size exceeds 6") | |
891 | 877 | ||
892 | - | | |
893 | - | } | |
894 | - | ||
895 | - | ||
896 | - | func | |
897 | - | let | |
898 | - | let | |
899 | - | if (( | |
900 | - | then $Tuple2(makeString( | |
901 | - | else if (( | |
878 | + | db(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6) | |
879 | + | } | |
880 | + | ||
881 | + | ||
882 | + | func eG (eH,eI,eJ,eK) = { | |
883 | + | let eL = eJ._1 | |
884 | + | let eM = eJ._2 | |
885 | + | if ((eM == 0)) | |
886 | + | then $Tuple2(makeString(eH, "_"), makeString(eI, "_")) | |
887 | + | else if ((eK >= eM)) | |
902 | 888 | then { | |
903 | - | func | |
904 | - | ||
905 | - | let | |
906 | - | let | |
907 | - | let | |
908 | - | let | |
909 | - | func | |
910 | - | then | |
911 | - | else | |
912 | - | ||
913 | - | func | |
914 | - | then | |
889 | + | func eN (cT,ev) = (cT :+ toString((parseIntValue(eH[ev]) + eL[ev]))) | |
890 | + | ||
891 | + | let de = { | |
892 | + | let cV = [0, 1, 2, 3, 4, 5] | |
893 | + | let cW = size(cV) | |
894 | + | let cX = nil | |
895 | + | func cY (cZ,da) = if ((da >= cW)) | |
896 | + | then cZ | |
897 | + | else eN(cZ, cV[da]) | |
898 | + | ||
899 | + | func db (cZ,da) = if ((da >= cW)) | |
900 | + | then cZ | |
915 | 901 | else throw("List size exceeds 6") | |
916 | 902 | ||
917 | - | | |
903 | + | db(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6) | |
918 | 904 | } | |
919 | - | $Tuple2(makeString( | |
905 | + | $Tuple2(makeString(de, "_"), makeString(eI, "_")) | |
920 | 906 | } | |
921 | 907 | else { | |
922 | - | func | |
923 | - | let | |
924 | - | $Tuple2(( | |
908 | + | func eO (cT,ev) = { | |
909 | + | let eP = fraction(eL[ev], eK, eM) | |
910 | + | $Tuple2((cT._1 :+ toString((parseIntValue(eH[ev]) + eP))), (cT._2 :+ toString(((parseIntValue(eI[ev]) + eL[ev]) - eP)))) | |
925 | 911 | } | |
926 | 912 | ||
927 | - | let | |
928 | - | let | |
929 | - | let | |
930 | - | let | |
931 | - | func | |
932 | - | then | |
933 | - | else | |
934 | - | ||
935 | - | func | |
936 | - | then | |
913 | + | let de = { | |
914 | + | let cV = [0, 1, 2, 3, 4, 5] | |
915 | + | let cW = size(cV) | |
916 | + | let cX = $Tuple2(nil, nil) | |
917 | + | func cY (cZ,da) = if ((da >= cW)) | |
918 | + | then cZ | |
919 | + | else eO(cZ, cV[da]) | |
920 | + | ||
921 | + | func db (cZ,da) = if ((da >= cW)) | |
922 | + | then cZ | |
937 | 923 | else throw("List size exceeds 6") | |
938 | 924 | ||
939 | - | | |
925 | + | db(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6) | |
940 | 926 | } | |
941 | - | $Tuple2(makeString( | |
927 | + | $Tuple2(makeString(de._1, "_"), makeString(de._2, "_")) | |
942 | 928 | } | |
943 | 929 | } | |
944 | 930 | ||
945 | 931 | ||
946 | - | func | |
947 | - | then | |
948 | - | else -( | |
949 | - | ||
950 | - | ||
951 | - | let | |
952 | - | ||
953 | - | func | |
954 | - | let | |
955 | - | let | |
932 | + | func eQ (eR) = if ((eR >= toBigInt(0))) | |
933 | + | then eR | |
934 | + | else -(eR) | |
935 | + | ||
936 | + | ||
937 | + | let eS = [[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]] | |
938 | + | ||
939 | + | func eT (bZ,eU) = { | |
940 | + | let eV = toInt((bZ % co)) | |
941 | + | let eW = if ((eU[0] > eV)) | |
956 | 942 | then "A" | |
957 | - | else if (( | |
943 | + | else if ((eU[1] > eV)) | |
958 | 944 | then "B" | |
959 | - | else if (( | |
945 | + | else if ((eU[2] > eV)) | |
960 | 946 | then "C" | |
961 | - | else if (( | |
947 | + | else if ((eU[3] > eV)) | |
962 | 948 | then "D" | |
963 | - | else if (( | |
949 | + | else if ((eU[4] > eV)) | |
964 | 950 | then "E" | |
965 | 951 | else "F" | |
966 | - | | |
967 | - | } | |
968 | - | ||
969 | - | ||
970 | - | func | |
971 | - | let | |
972 | - | func | |
973 | - | ||
974 | - | let | |
975 | - | let | |
976 | - | let | |
977 | - | let | |
978 | - | func | |
979 | - | then | |
980 | - | else | |
981 | - | ||
982 | - | func | |
983 | - | then | |
952 | + | eW | |
953 | + | } | |
954 | + | ||
955 | + | ||
956 | + | func eX (eY,eZ) = { | |
957 | + | let fa = eS[eZ] | |
958 | + | func fb (cT,cU) = $Tuple2((((((cT._1 + eT(cT._2, fa)) + eT((cT._2 / co), fa)) + eT((cT._2 / cp), fa)) + eT((cT._2 / cq), fa)) + eT((cT._2 / cr), fa)), (cT._2 / cs)) | |
959 | + | ||
960 | + | let fc = { | |
961 | + | let cV = [1, 2, 3, 4, 5] | |
962 | + | let cW = size(cV) | |
963 | + | let cX = $Tuple2("", (eY / cn)) | |
964 | + | func cY (cZ,da) = if ((da >= cW)) | |
965 | + | then cZ | |
966 | + | else fb(cZ, cV[da]) | |
967 | + | ||
968 | + | func db (cZ,da) = if ((da >= cW)) | |
969 | + | then cZ | |
984 | 970 | else throw("List size exceeds 5") | |
985 | 971 | ||
986 | - | | |
987 | - | } | |
988 | - | | |
989 | - | } | |
990 | - | ||
991 | - | ||
992 | - | func | |
993 | - | let | |
994 | - | [toString(valueOrElse(parseInt( | |
995 | - | then | |
996 | - | else "0_0_0_0_0_0", if ((size(split( | |
997 | - | then | |
998 | - | else "0_0_0_0_0_0", | |
999 | - | } | |
1000 | - | ||
1001 | - | ||
1002 | - | func | |
1003 | - | let | |
1004 | - | (( | |
1005 | - | } | |
1006 | - | ||
1007 | - | ||
1008 | - | func | |
1009 | - | let | |
1010 | - | func | |
1011 | - | ||
1012 | - | func | |
1013 | - | let | |
1014 | - | let | |
1015 | - | $Tuple2(( | |
1016 | - | } | |
1017 | - | ||
1018 | - | let | |
1019 | - | let | |
1020 | - | let | |
1021 | - | let | |
1022 | - | func | |
1023 | - | then | |
1024 | - | else | |
1025 | - | ||
1026 | - | func | |
1027 | - | then | |
972 | + | db(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5) | |
973 | + | } | |
974 | + | fc._1 | |
975 | + | } | |
976 | + | ||
977 | + | ||
978 | + | func fd (fe) = { | |
979 | + | let ff = split(valueOrElse(getString(fe), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":") | |
980 | + | [toString(valueOrElse(parseInt(ff[ay]), 0)), if ((size(split(ff[az], "_")) == aa)) | |
981 | + | then ff[az] | |
982 | + | else "0_0_0_0_0_0", if ((size(split(ff[aA], "_")) == aa)) | |
983 | + | then ff[aA] | |
984 | + | else "0_0_0_0_0_0", ff[aB]] | |
985 | + | } | |
986 | + | ||
987 | + | ||
988 | + | func fg (fh) = { | |
989 | + | let dr = split(fh, "_") | |
990 | + | ((ad * (parseIntValue(dr[1]) + 1)) * parseIntValue(dr[0])) | |
991 | + | } | |
992 | + | ||
993 | + | ||
994 | + | func fi (fj) = { | |
995 | + | let fk = fj[as] | |
996 | + | func fl (cT,fm) = (cT + parseIntValue(fm)) | |
997 | + | ||
998 | + | func fn (cT,fm) = { | |
999 | + | let bJ = cT._1 | |
1000 | + | let fo = (((parseIntValue(fm) + ao) - 1) / ao) | |
1001 | + | $Tuple2((bJ + 1), (cT._2 + (fo * bq))) | |
1002 | + | } | |
1003 | + | ||
1004 | + | let fp = { | |
1005 | + | let cV = split(fj[aq], "_") | |
1006 | + | let cW = size(cV) | |
1007 | + | let cX = 0 | |
1008 | + | func cY (cZ,da) = if ((da >= cW)) | |
1009 | + | then cZ | |
1010 | + | else fl(cZ, cV[da]) | |
1011 | + | ||
1012 | + | func db (cZ,da) = if ((da >= cW)) | |
1013 | + | then cZ | |
1028 | 1014 | else throw("List size exceeds 6") | |
1029 | 1015 | ||
1030 | - | | |
1031 | - | } | |
1032 | - | let | |
1033 | - | let | |
1034 | - | let | |
1035 | - | let | |
1036 | - | func | |
1037 | - | then | |
1038 | - | else | |
1039 | - | ||
1040 | - | func | |
1041 | - | then | |
1016 | + | db(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6) | |
1017 | + | } | |
1018 | + | let fq = { | |
1019 | + | let cV = split(fj[ar], "_") | |
1020 | + | let cW = size(cV) | |
1021 | + | let cX = 0 | |
1022 | + | func fr (cZ,da) = if ((da >= cW)) | |
1023 | + | then cZ | |
1024 | + | else fl(cZ, cV[da]) | |
1025 | + | ||
1026 | + | func fs (cZ,da) = if ((da >= cW)) | |
1027 | + | then cZ | |
1042 | 1028 | else throw("List size exceeds 6") | |
1043 | 1029 | ||
1044 | - | | |
1045 | - | } | |
1046 | - | let | |
1030 | + | fs(fr(fr(fr(fr(fr(fr(cX, 0), 1), 2), 3), 4), 5), 6) | |
1031 | + | } | |
1032 | + | let ft = if ((fk == "")) | |
1047 | 1033 | then 0 | |
1048 | - | else ( let | |
1049 | - | let | |
1050 | - | let | |
1051 | - | func | |
1052 | - | then | |
1053 | - | else | |
1054 | - | ||
1055 | - | func | |
1056 | - | then | |
1034 | + | else ( let cV = split_4C(fk, "_") | |
1035 | + | let cW = size(cV) | |
1036 | + | let cX = $Tuple2(0, 0) | |
1037 | + | func fu (cZ,da) = if ((da >= cW)) | |
1038 | + | then cZ | |
1039 | + | else fn(cZ, cV[da]) | |
1040 | + | ||
1041 | + | func fv (cZ,da) = if ((da >= cW)) | |
1042 | + | then cZ | |
1057 | 1043 | else throw("List size exceeds 50") | |
1058 | 1044 | ||
1059 | - | | |
1060 | - | (( | |
1061 | - | } | |
1062 | - | ||
1063 | - | ||
1064 | - | func | |
1065 | - | let | |
1066 | - | let | |
1067 | - | let | |
1068 | - | let | |
1069 | - | let | |
1070 | - | let | |
1071 | - | then makeString(["0", toString( | |
1072 | - | else { | |
1073 | - | let | |
1074 | - | let | |
1075 | - | let | |
1076 | - | then parseIntValue( | |
1077 | - | else | |
1078 | - | makeString([toString( | |
1079 | - | } | |
1080 | - | [ | |
1081 | - | then | |
1082 | - | else "0_0_0_0_0_0", if ((size(split( | |
1083 | - | then | |
1084 | - | else "0_0_0_0_0_0", | |
1085 | - | } | |
1086 | - | ||
1087 | - | ||
1088 | - | func | |
1089 | - | let | |
1090 | - | let | |
1091 | - | (( | |
1092 | - | } | |
1093 | - | ||
1094 | - | ||
1095 | - | func | |
1096 | - | let | |
1097 | - | then ((( | |
1098 | - | else -((((-( | |
1099 | - | ( | |
1100 | - | } | |
1101 | - | ||
1102 | - | ||
1103 | - | func | |
1045 | + | fv(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(cX, 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 | |
1046 | + | ((fp + fq) + ft) | |
1047 | + | } | |
1048 | + | ||
1049 | + | ||
1050 | + | func fw (fx,fy,fz) = { | |
1051 | + | let fh = ((toString(fy) + "_") + toString(fz)) | |
1052 | + | let fA = fg(fh) | |
1053 | + | let fB = valueOrElse(getString(fx), (fh + ":0_0_0_0_0_0:0_0_0_0_0_0::0")) | |
1054 | + | let fC = split_4C(fB, ":") | |
1055 | + | let fD = fi(fC) | |
1056 | + | let fE = if ((5 > size(fC))) | |
1057 | + | then makeString(["0", toString(fD), toString((fA - fD)), toString(fA)], "_") | |
1058 | + | else { | |
1059 | + | let fF = split(fC[at], "_") | |
1060 | + | let fG = parseIntValue(fF[au]) | |
1061 | + | let fH = if ((size(fF) > 1)) | |
1062 | + | then parseIntValue(fF[av]) | |
1063 | + | else fD | |
1064 | + | makeString([toString(fG), toString(fH), toString(((fA - fG) - fH)), toString(fA)], "_") | |
1065 | + | } | |
1066 | + | [fC[ap], if ((size(split(fC[aq], "_")) == aa)) | |
1067 | + | then fC[aq] | |
1068 | + | else "0_0_0_0_0_0", if ((size(split(fC[ar], "_")) == aa)) | |
1069 | + | then fC[ar] | |
1070 | + | else "0_0_0_0_0_0", fC[as], fE] | |
1071 | + | } | |
1072 | + | ||
1073 | + | ||
1074 | + | func fI (fj) = { | |
1075 | + | let fJ = fi(fj) | |
1076 | + | let fK = parseIntValue(split(fj[at], "_")[au]) | |
1077 | + | ((fg(fj[ap]) - fJ) - fK) | |
1078 | + | } | |
1079 | + | ||
1080 | + | ||
1081 | + | func fL (fM,fN) = { | |
1082 | + | let fo = if ((fM >= 0)) | |
1083 | + | then (((fM + fN) - 1) / fN) | |
1084 | + | else -((((-(fM) + fN) - 1) / fN)) | |
1085 | + | (fo * bq) | |
1086 | + | } | |
1087 | + | ||
1088 | + | ||
1089 | + | func fO (fP,fj,fQ) = if ((size(fP) != 3)) | |
1104 | 1090 | then throw("cargoListStr should contain exactly 2 ':' separators") | |
1105 | 1091 | else { | |
1106 | - | let | |
1107 | - | let | |
1108 | - | let | |
1092 | + | let fR = split(fP[0], "_") | |
1093 | + | let fS = split(fP[1], "_") | |
1094 | + | let fT = if ((fP[2] == "")) | |
1109 | 1095 | then nil | |
1110 | - | else split( | |
1111 | - | if ((size( | |
1096 | + | else split(fP[2], "_") | |
1097 | + | if ((size(fR) != aa)) | |
1112 | 1098 | then throw("All 6 resources should be passed") | |
1113 | - | else if ((size( | |
1099 | + | else if ((size(fS) != aa)) | |
1114 | 1100 | then throw("All 6 materials should be passed") | |
1115 | 1101 | else { | |
1116 | - | let | |
1117 | - | let | |
1118 | - | let | |
1119 | - | let | |
1102 | + | let eK = fI(fj) | |
1103 | + | let fU = split(fj[aq], "_") | |
1104 | + | let fV = split(fj[ar], "_") | |
1105 | + | let fW = if ((fj[as] == "")) | |
1120 | 1106 | then nil | |
1121 | - | else split( | |
1122 | - | let | |
1123 | - | let | |
1124 | - | let | |
1107 | + | else split(fj[as], "_") | |
1108 | + | let eI = split(fQ[az], "_") | |
1109 | + | let fX = split(fQ[aA], "_") | |
1110 | + | let fY = if ((fQ[aB] == "")) | |
1125 | 1111 | then nil | |
1126 | - | else split( | |
1127 | - | func | |
1128 | - | let | |
1129 | - | let | |
1130 | - | let | |
1131 | - | let | |
1132 | - | if (( | |
1133 | - | then $Tuple4(( | |
1134 | - | else if (( | |
1135 | - | then if (( | |
1136 | - | then throw((((("Attempt to take " + | |
1137 | - | else $Tuple4(( | |
1138 | - | else if ((-( | |
1139 | - | then throw((((("Attempt to take " + toString(-( | |
1140 | - | else $Tuple4(( | |
1112 | + | else split(fQ[aB], "_") | |
1113 | + | func fZ (cT,fm) = { | |
1114 | + | let ev = cT._1 | |
1115 | + | let ga = parseIntValue(fm) | |
1116 | + | let gb = parseIntValue(fU[ev]) | |
1117 | + | let gc = parseIntValue(eI[ev]) | |
1118 | + | if ((ga == 0)) | |
1119 | + | then $Tuple4((ev + 1), (cT._2 :+ fU[ev]), (cT._3 :+ eI[ev]), cT._4) | |
1120 | + | else if ((ga > 0)) | |
1121 | + | then if ((ga > gc)) | |
1122 | + | then throw((((("Attempt to take " + fm) + " from backpack, but only ") + toString(gc)) + " available")) | |
1123 | + | else $Tuple4((ev + 1), (cT._2 :+ toString((gb + ga))), (cT._3 :+ toString((gc - ga))), (cT._4 + ga)) | |
1124 | + | else if ((-(ga) > gb)) | |
1125 | + | then throw((((("Attempt to take " + toString(-(ga))) + " from warehouse, but only ") + toString(gb)) + " available")) | |
1126 | + | else $Tuple4((ev + 1), (cT._2 :+ toString((gb + ga))), (cT._3 :+ toString((gc - ga))), (cT._4 + ga)) | |
1141 | 1127 | } | |
1142 | 1128 | ||
1143 | - | let | |
1144 | - | let | |
1145 | - | let | |
1146 | - | let | |
1147 | - | func | |
1148 | - | then | |
1149 | - | else | |
1150 | - | ||
1151 | - | func | |
1152 | - | then | |
1129 | + | let de = { | |
1130 | + | let cV = fR | |
1131 | + | let cW = size(cV) | |
1132 | + | let cX = $Tuple4(0, nil, nil, 0) | |
1133 | + | func cY (cZ,da) = if ((da >= cW)) | |
1134 | + | then cZ | |
1135 | + | else fZ(cZ, cV[da]) | |
1136 | + | ||
1137 | + | func db (cZ,da) = if ((da >= cW)) | |
1138 | + | then cZ | |
1153 | 1139 | else throw("List size exceeds 6") | |
1154 | 1140 | ||
1155 | - | | |
1141 | + | db(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6) | |
1156 | 1142 | } | |
1157 | - | func | |
1158 | - | let | |
1159 | - | let | |
1160 | - | let | |
1161 | - | let | |
1162 | - | if (( | |
1163 | - | then $Tuple4(( | |
1164 | - | else if (( | |
1165 | - | then if (( | |
1166 | - | then throw((((("Attempt to take " + | |
1167 | - | else $Tuple4(( | |
1168 | - | else if ((-( | |
1169 | - | then throw((((("Attempt to take " + toString(-( | |
1170 | - | else $Tuple4(( | |
1143 | + | func gd (cT,fm) = { | |
1144 | + | let ev = cT._1 | |
1145 | + | let ga = parseIntValue(fm) | |
1146 | + | let ge = parseIntValue(fV[ev]) | |
1147 | + | let gf = parseIntValue(fX[ev]) | |
1148 | + | if ((ga == 0)) | |
1149 | + | then $Tuple4((ev + 1), (cT._2 :+ fV[ev]), (cT._3 :+ fX[ev]), cT._4) | |
1150 | + | else if ((ga > 0)) | |
1151 | + | then if ((ga > gf)) | |
1152 | + | then throw((((("Attempt to take " + fm) + " from backpack, but only ") + toString(gf)) + " available")) | |
1153 | + | else $Tuple4((ev + 1), (cT._2 :+ toString((ge + ga))), (cT._3 :+ toString((gf - ga))), (cT._4 + ga)) | |
1154 | + | else if ((-(ga) > ge)) | |
1155 | + | then throw((((("Attempt to take " + toString(-(ga))) + " from warehouse, but only ") + toString(ge)) + " available")) | |
1156 | + | else $Tuple4((ev + 1), (cT._2 :+ toString((ge + ga))), (cT._3 :+ toString((gf - ga))), (cT._4 + ga)) | |
1171 | 1157 | } | |
1172 | 1158 | ||
1173 | 1159 | let em = { | |
1174 | - | let | |
1175 | - | let | |
1176 | - | let | |
1177 | - | func | |
1178 | - | then | |
1179 | - | else | |
1180 | - | ||
1181 | - | func | |
1182 | - | then | |
1160 | + | let cV = fS | |
1161 | + | let cW = size(cV) | |
1162 | + | let cX = $Tuple4(0, nil, nil, de._4) | |
1163 | + | func fr (cZ,da) = if ((da >= cW)) | |
1164 | + | then cZ | |
1165 | + | else gd(cZ, cV[da]) | |
1166 | + | ||
1167 | + | func fs (cZ,da) = if ((da >= cW)) | |
1168 | + | then cZ | |
1183 | 1169 | else throw("List size exceeds 6") | |
1184 | 1170 | ||
1185 | - | | |
1171 | + | fs(fr(fr(fr(fr(fr(fr(cX, 0), 1), 2), 3), 4), 5), 6) | |
1186 | 1172 | } | |
1187 | - | func | |
1188 | - | let | |
1189 | - | let | |
1190 | - | let | |
1191 | - | then parseIntValue( | |
1173 | + | func gg (cT,fm) = { | |
1174 | + | let ev = cT._1 | |
1175 | + | let ga = parseIntValue(fm) | |
1176 | + | let gh = if ((size(fW) > ev)) | |
1177 | + | then parseIntValue(fW[ev]) | |
1192 | 1178 | else 0 | |
1193 | - | let | |
1194 | - | then parseIntValue( | |
1179 | + | let gi = if ((size(fY) > ev)) | |
1180 | + | then parseIntValue(fY[ev]) | |
1195 | 1181 | else 0 | |
1196 | - | if (( | |
1197 | - | then $Tuple4(( | |
1198 | - | else if (( | |
1199 | - | then if (( | |
1200 | - | then throw((((("Attempt to take " + | |
1182 | + | if ((ga == 0)) | |
1183 | + | then $Tuple4((ev + 1), (cT._2 :+ toString(gh)), (cT._3 :+ toString(gi)), cT._4) | |
1184 | + | else if ((ga > 0)) | |
1185 | + | then if ((ga > gi)) | |
1186 | + | then throw((((("Attempt to take " + fm) + " from backpack, but only ") + toString(gi)) + " available")) | |
1201 | 1187 | else { | |
1202 | - | let | |
1203 | - | $Tuple4(( | |
1188 | + | let gj = (fL((gh + ga), ao) - fL(gh, ao)) | |
1189 | + | $Tuple4((ev + 1), (cT._2 :+ toString((gh + ga))), (cT._3 :+ toString((gi - ga))), (cT._4 + gj)) | |
1204 | 1190 | } | |
1205 | - | else if ((-( | |
1206 | - | then throw((((("Attempt to take " + toString(-( | |
1191 | + | else if ((-(ga) > gh)) | |
1192 | + | then throw((((("Attempt to take " + toString(-(ga))) + " from warehouse, but only ") + toString(gh)) + " available")) | |
1207 | 1193 | else { | |
1208 | - | let | |
1209 | - | $Tuple4(( | |
1194 | + | let gj = (fL((gh + ga), ao) - fL(gh, ao)) | |
1195 | + | $Tuple4((ev + 1), (cT._2 :+ toString((gh + ga))), (cT._3 :+ toString((gi - ga))), (cT._4 + gj)) | |
1210 | 1196 | } | |
1211 | 1197 | } | |
1212 | 1198 | ||
1213 | - | let | |
1199 | + | let ff = if ((size(fT) != 0)) | |
1214 | 1200 | then { | |
1215 | - | let | |
1216 | - | let | |
1217 | - | let | |
1218 | - | func | |
1219 | - | then | |
1220 | - | else | |
1221 | - | ||
1222 | - | func | |
1223 | - | then | |
1201 | + | let cV = fT | |
1202 | + | let cW = size(cV) | |
1203 | + | let cX = $Tuple4(0, nil, nil, em._4) | |
1204 | + | func fu (cZ,da) = if ((da >= cW)) | |
1205 | + | then cZ | |
1206 | + | else gg(cZ, cV[da]) | |
1207 | + | ||
1208 | + | func fv (cZ,da) = if ((da >= cW)) | |
1209 | + | then cZ | |
1224 | 1210 | else throw("List size exceeds 50") | |
1225 | 1211 | ||
1226 | - | | |
1212 | + | fv(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(cX, 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) | |
1227 | 1213 | } | |
1228 | - | else $Tuple4(0, | |
1229 | - | let | |
1230 | - | if (( | |
1231 | - | then throw((((("Attempt to put total " + toString( | |
1232 | - | else $Tuple7(makeString( | |
1214 | + | else $Tuple4(0, fW, fY, em._4) | |
1215 | + | let gk = ff._4 | |
1216 | + | if ((gk > eK)) | |
1217 | + | then throw((((("Attempt to put total " + toString(gk)) + " stuff, but only ") + toString(eK)) + " warehouse space left")) | |
1218 | + | else $Tuple7(makeString(de._2, "_"), makeString(em._2, "_"), makeString(ff._2, "_"), makeString(de._3, "_"), makeString(em._3, "_"), makeString(ff._3, "_"), gk) | |
1233 | 1219 | } | |
1234 | 1220 | } | |
1235 | 1221 | ||
1236 | 1222 | ||
1237 | - | func | |
1238 | - | let | |
1239 | - | let | |
1240 | - | let | |
1241 | - | let | |
1242 | - | let | |
1243 | - | let | |
1244 | - | let | |
1245 | - | let | |
1246 | - | let | |
1247 | - | let | |
1248 | - | $Tuple2([IntegerEntry( | |
1249 | - | } | |
1250 | - | ||
1251 | - | ||
1252 | - | func | |
1223 | + | func gl (gm,gn) = { | |
1224 | + | let bb = toString(gm) | |
1225 | + | let go = eQ(toBigInt(gn)) | |
1226 | + | let gp = valueOrElse(getInteger(cu()), (ct + 1)) | |
1227 | + | let cw = toString(gp) | |
1228 | + | let eZ = toInt((go % cn)) | |
1229 | + | let ey = eX(go, eZ) | |
1230 | + | let gq = ai[eZ] | |
1231 | + | let gr = Issue(cM(cw, "S"), makeString([cw, "S", ey, gq], "_"), 1, 0, false) | |
1232 | + | let aE = calculateAssetId(gr) | |
1233 | + | let gs = toBase58String(aE) | |
1234 | + | $Tuple2([IntegerEntry(cu(), (gp + 1)), gr, StringEntry(cv(cw), gs), StringEntry(aD(gs), bb), StringEntry(cB(cw), bb), IntegerEntry(aH(gs), 0), IntegerEntry(cz(gs, bb), 0), ScriptTransfer(gm, 1, aE)], $Tuple2(gs, gq)) | |
1235 | + | } | |
1236 | + | ||
1237 | + | ||
1238 | + | func gt (bb,gu,gv) = if (!(sigVerify_8Kb(gu, gv, cf))) | |
1253 | 1239 | then throw("signature does not match") | |
1254 | 1240 | else { | |
1255 | - | let | |
1256 | - | let | |
1257 | - | let | |
1258 | - | let | |
1259 | - | let | |
1260 | - | let | |
1261 | - | let | |
1262 | - | let | |
1263 | - | if (if (( | |
1241 | + | let dr = split(toUtf8String(gu), ";") | |
1242 | + | let gw = split(dr[0], "|") | |
1243 | + | let gx = split(gw[cI], "_") | |
1244 | + | let gy = parseIntValue(gx[0]) | |
1245 | + | let gz = parseIntValue(gx[1]) | |
1246 | + | let gA = split(dr[1], ":") | |
1247 | + | let gB = gA[0] | |
1248 | + | let gC = parseIntValue(gw[cJ]) | |
1249 | + | if (if ((gC > (lastBlock.timestamp + ch))) | |
1264 | 1250 | then true | |
1265 | - | else ((lastBlock.timestamp - | |
1266 | - | then throw(((("signature outdated: logTime=" + toString( | |
1251 | + | else ((lastBlock.timestamp - ch) > gC)) | |
1252 | + | then throw(((("signature outdated: logTime=" + toString(gC)) + ", bcTime=") + toString(lastBlock.timestamp))) | |
1267 | 1253 | else { | |
1268 | - | let | |
1269 | - | let | |
1270 | - | if (( | |
1271 | - | then throw(((("Tx ids don't match! In state: " + | |
1254 | + | let gD = gA[1] | |
1255 | + | let gE = valueOrElse(getString(aC(bb)), "") | |
1256 | + | if ((gE != gD)) | |
1257 | + | then throw(((("Tx ids don't match! In state: " + gE) + ", in msg: ") + gD)) | |
1272 | 1258 | else { | |
1273 | - | let | |
1274 | - | let | |
1275 | - | let | |
1276 | - | let | |
1277 | - | if (( | |
1278 | - | then throw(((("oldHealth=" + toString( | |
1279 | - | else if ((0 >= | |
1259 | + | let r = valueOrErrorMessage(getString(aW(bb)), "You don't have a duck staked") | |
1260 | + | let gF = q(r) | |
1261 | + | let gG = M(valueOrElse(getInteger(u(r)), 0)) | |
1262 | + | let gH = valueOrElse(getInteger(gF), gG) | |
1263 | + | if ((gH != gy)) | |
1264 | + | then throw(((("oldHealth=" + toString(gH)) + " from state does not match one from flight log=") + toString(gy))) | |
1265 | + | else if ((0 >= gy)) | |
1280 | 1266 | then throw("You can't fly with zero health") | |
1281 | 1267 | else { | |
1282 | - | let | |
1283 | - | then | |
1268 | + | let gI = if ((size(gw) > cK)) | |
1269 | + | then gw[cK] | |
1284 | 1270 | else "" | |
1285 | - | let | |
1286 | - | then | |
1271 | + | let gJ = if ((size(gw) > cL)) | |
1272 | + | then gw[cL] | |
1287 | 1273 | else "" | |
1288 | - | let | |
1289 | - | then ( | |
1274 | + | let gK = if (if ((gz > 0)) | |
1275 | + | then (gI == "$") | |
1290 | 1276 | else false) | |
1291 | - | then | |
1277 | + | then bY(invoke(bK, "sendUsdtPrize", [bb], nil)) | |
1292 | 1278 | else 0 | |
1293 | - | $Tuple5( | |
1279 | + | $Tuple5(gz, r, gK, gB, gJ) | |
1294 | 1280 | } | |
1295 | 1281 | } | |
1296 | 1282 | } | |
1297 | 1283 | } | |
1298 | 1284 | ||
1299 | 1285 | ||
1300 | - | func gJ (gk,gl,gs,gt) = { | |
1301 | - | let ba = toString(gk) | |
1302 | - | let eZ = gr(ba, gs, gt) | |
1303 | - | let gD = p(eZ._2) | |
1304 | - | let fd = aW(eZ._2) | |
1305 | - | let fO = fc(fd) | |
1306 | - | let gK = split(fO[az], "_") | |
1307 | - | let gL = makeString(dd(true, gK, cj), "_") | |
1308 | - | let dz = dk(fO[aA], eZ._5) | |
1309 | - | if ((0 >= eZ._1)) | |
1310 | - | then $Tuple3([IntegerEntry(gD, 0), StringEntry(fd, makeString([fO[ax], fO[ay], fO[az], dz], ":"))], "", 0) | |
1311 | - | else { | |
1312 | - | let gM = gj(gk, gl) | |
1313 | - | let gq = gM._2._1 | |
1314 | - | $Tuple3((((gM._1 :+ StringEntry(aX(eZ._2), makeString([gM._2._2, "L", gq], "_"))) :+ IntegerEntry(gD, eZ._1)) :+ StringEntry(fd, makeString([fO[ax], fO[ay], gL, dz], ":"))), gq, eZ._3) | |
1315 | - | } | |
1316 | - | } | |
1317 | - | ||
1318 | - | ||
1319 | - | func gN (aN,gO) = { | |
1320 | - | let fx = valueOrElse(getInteger(aG(aN)), 0) | |
1321 | - | let gP = valueOrElse(getInteger(aH(Y, aN)), 0) | |
1322 | - | let gQ = (fx / 6) | |
1323 | - | let gR = (fx / 7) | |
1324 | - | ((aa + fraction(aa, ((fx + gQ) + (2 * gR)), 5)) + fraction(aa, gP, (gO * 5))) | |
1325 | - | } | |
1326 | - | ||
1327 | - | ||
1328 | - | func gS (b,gT,gU) = { | |
1329 | - | let gV = if ((gT == cD)) | |
1330 | - | then $Tuple2(gU, valueOrElse(getString(aV(b)), "")) | |
1331 | - | else { | |
1332 | - | let q = valueOrErrorMessage(getString(aV(b)), "You don't have a duck staked") | |
1333 | - | let gW = valueOrElse(getString(aX(q)), ad) | |
1334 | - | let gX = split(value(gW), "_") | |
1335 | - | if ((gX[bc] != "L")) | |
1336 | - | then throw((("Duck location type is " + gX[bc]) + ", but should be L")) | |
1337 | - | else $Tuple2(gX[bd], q) | |
1338 | - | } | |
1339 | - | let aN = gV._1 | |
1340 | - | let gY = gV._2 | |
1341 | - | let gZ = value(assetInfo(fromBase58String(aN))) | |
1342 | - | let ha = aF(aN) | |
1343 | - | let hb = valueOrErrorMessage(getInteger(ha), (("Land " + gZ.name) + " is not staked")) | |
1344 | - | let hc = valueOrErrorMessage(getString(aC(aN)), (("NFT " + gZ.name) + " is orphaned")) | |
1345 | - | if ((hc != b)) | |
1346 | - | then throw((W + " is not yours")) | |
1347 | - | else { | |
1348 | - | let hd = split(gZ.description, "_") | |
1349 | - | $Tuple4(gY, aN, hd, hb) | |
1350 | - | } | |
1351 | - | } | |
1352 | - | ||
1353 | - | ||
1354 | - | func he (b,fK,gT,gU) = if ((0 > fK)) | |
1286 | + | func gL (gm,gn,gu,gv) = { | |
1287 | + | let bb = toString(gm) | |
1288 | + | let fa = gt(bb, gu, gv) | |
1289 | + | let r = fa._2 | |
1290 | + | let gF = q(r) | |
1291 | + | let fe = aX(r) | |
1292 | + | let fQ = fd(fe) | |
1293 | + | let gM = split(fQ[aA], "_") | |
1294 | + | let gN = makeString(df(true, gM, cl), "_") | |
1295 | + | let gO = w(r) | |
1296 | + | let gP = valueOrElse(getString(gO), ",;,_,;,_,;,_,;,_,;,_,;,") | |
1297 | + | let gQ = dm(gP, fa._5) | |
1298 | + | if ((0 >= fa._1)) | |
1299 | + | then $Tuple3([IntegerEntry(gF, 0), StringEntry(gO, gQ)], "", 0) | |
1300 | + | else { | |
1301 | + | let gR = gl(gm, gn) | |
1302 | + | let gs = gR._2._1 | |
1303 | + | $Tuple3(((((gR._1 :+ StringEntry(aY(r), makeString([gR._2._2, "L", gs], "_"))) :+ IntegerEntry(gF, fa._1)) :+ StringEntry(gO, gQ)) :+ StringEntry(fe, makeString([fQ[ay], fQ[az], gN, fQ[aB]], ":"))), gs, fa._3) | |
1304 | + | } | |
1305 | + | } | |
1306 | + | ||
1307 | + | ||
1308 | + | func gS (aO,gT) = { | |
1309 | + | let fz = valueOrElse(getInteger(aH(aO)), 0) | |
1310 | + | let gU = valueOrElse(getInteger(aI(Z, aO)), 0) | |
1311 | + | let gV = (fz / 6) | |
1312 | + | let gW = (fz / 7) | |
1313 | + | ((ab + fraction(ab, ((fz + gV) + (2 * gW)), 5)) + fraction(ab, gU, (gT * 5))) | |
1314 | + | } | |
1315 | + | ||
1316 | + | ||
1317 | + | func gX (b,gY,gZ) = { | |
1318 | + | let ha = if ((gY == cF)) | |
1319 | + | then $Tuple2(gZ, valueOrElse(getString(aW(b)), "")) | |
1320 | + | else { | |
1321 | + | let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked") | |
1322 | + | let hb = valueOrElse(getString(aY(r)), ae) | |
1323 | + | let hc = split(value(hb), "_") | |
1324 | + | if ((hc[bd] != "L")) | |
1325 | + | then throw((("Duck location type is " + hc[bd]) + ", but should be L")) | |
1326 | + | else $Tuple2(hc[be], r) | |
1327 | + | } | |
1328 | + | let aO = ha._1 | |
1329 | + | let hd = ha._2 | |
1330 | + | let he = value(assetInfo(fromBase58String(aO))) | |
1331 | + | let hf = aG(aO) | |
1332 | + | let hg = valueOrErrorMessage(getInteger(hf), (("Land " + he.name) + " is not staked")) | |
1333 | + | let hh = valueOrErrorMessage(getString(aD(aO)), (("NFT " + he.name) + " is orphaned")) | |
1334 | + | if ((hh != b)) | |
1335 | + | then throw((X + " is not yours")) | |
1336 | + | else { | |
1337 | + | let hi = split(he.description, "_") | |
1338 | + | $Tuple4(hd, aO, hi, hg) | |
1339 | + | } | |
1340 | + | } | |
1341 | + | ||
1342 | + | ||
1343 | + | func hj (b,fM,gY,gZ) = if ((0 > fM)) | |
1355 | 1344 | then throw("Negative amount") | |
1356 | 1345 | else { | |
1357 | - | let dX = | |
1358 | - | let | |
1359 | - | let | |
1360 | - | let | |
1361 | - | if ((0 > | |
1346 | + | let dX = gX(b, gY, gZ) | |
1347 | + | let cb = dX._3[bP] | |
1348 | + | let er = ex(dX._3[bQ]) | |
1349 | + | let eB = (lastBlock.timestamp - dX._4) | |
1350 | + | if ((0 > eB)) | |
1362 | 1351 | then throw(((("Saved timestamp is in future, saved = " + toString(dX._4)) + ", current = ") + toString(lastBlock.timestamp))) | |
1363 | 1352 | else { | |
1364 | - | let | |
1365 | - | let | |
1366 | - | let | |
1367 | - | if (( | |
1368 | - | then throw(((("Not enough resources, available = " + toString( | |
1353 | + | let gT = ca(cb) | |
1354 | + | let hk = gS(dX._2, gT) | |
1355 | + | let hl = fraction(eB, (hk * gT), ac) | |
1356 | + | if ((fM > hl)) | |
1357 | + | then throw(((("Not enough resources, available = " + toString(hl)) + ", requested = ") + toString(fM))) | |
1369 | 1358 | else { | |
1370 | - | let | |
1371 | - | let | |
1372 | - | let | |
1373 | - | let | |
1374 | - | let | |
1375 | - | let | |
1376 | - | let | |
1377 | - | let | |
1378 | - | let | |
1379 | - | if (if (( | |
1380 | - | then ( | |
1359 | + | let hm = fraction((hl - fM), ac, (hk * gT)) | |
1360 | + | let hn = (lastBlock.timestamp - hm) | |
1361 | + | let fy = (gT / br) | |
1362 | + | let eJ = eF(er, (eB - hm), fy, hk) | |
1363 | + | let fx = aN(dX._2) | |
1364 | + | let fz = valueOrElse(getInteger(aH(dX._2)), 0) | |
1365 | + | let fj = fw(fx, fy, fz) | |
1366 | + | let fF = split(fj[at], "_") | |
1367 | + | let eK = parseIntValue(fF[aw]) | |
1368 | + | if (if ((gY == cF)) | |
1369 | + | then (fM > eK) | |
1381 | 1370 | else false) | |
1382 | - | then throw((("Only " + toString( | |
1371 | + | then throw((("Only " + toString(eK)) + " space left in warehouse")) | |
1383 | 1372 | else { | |
1384 | - | let | |
1385 | - | let | |
1386 | - | let | |
1387 | - | let | |
1388 | - | let | |
1389 | - | then $Tuple4( | |
1390 | - | else if (( | |
1391 | - | then $Tuple4( | |
1373 | + | let fe = aX(dX._1) | |
1374 | + | let fQ = fd(fe) | |
1375 | + | let eI = split(fQ[az], "_") | |
1376 | + | let eH = split(fj[aq], "_") | |
1377 | + | let ho = if ((gY == cF)) | |
1378 | + | then $Tuple4(ez(eH, er, (eB - hm), fy, hk), fQ[az], (parseIntValue(fF[av]) + eJ._2), (parseIntValue(fF[aw]) - eJ._2)) | |
1379 | + | else if ((gY == cG)) | |
1380 | + | then $Tuple4(fj[aq], ez(eI, er, (eB - hm), fy, hk), parseIntValue(fF[av]), parseIntValue(fF[aw])) | |
1392 | 1381 | else { | |
1393 | - | let | |
1394 | - | let | |
1395 | - | $Tuple4( | |
1382 | + | let hp = eG(eH, eI, eJ, eK) | |
1383 | + | let hq = min([parseIntValue(fF[aw]), eJ._2]) | |
1384 | + | $Tuple4(hp._1, hp._2, (parseIntValue(fF[av]) + hq), (parseIntValue(fF[aw]) - hq)) | |
1396 | 1385 | } | |
1397 | - | let | |
1398 | - | let | |
1399 | - | let | |
1400 | - | let | |
1401 | - | $Tuple5([IntegerEntry( | |
1386 | + | let hr = ho._1 | |
1387 | + | let hs = ho._2 | |
1388 | + | let ht = ho._3 | |
1389 | + | let hu = ho._4 | |
1390 | + | $Tuple5([IntegerEntry(aG(dX._2), hn), IntegerEntry(aK(X, dX._2, b), hn)], fe, [fQ[ay], hs, fQ[aA], fQ[aB]], fx, [fj[ap], hr, fj[ar], fj[as], makeString([fF[au], toString(ht), toString(hu), fF[ax]], "_")]) | |
1402 | 1391 | } | |
1403 | 1392 | } | |
1404 | 1393 | } | |
1405 | 1394 | } | |
1406 | 1395 | ||
1407 | 1396 | ||
1408 | - | func | |
1409 | - | let | |
1410 | - | let | |
1411 | - | let | |
1412 | - | | |
1413 | - | } | |
1414 | - | ||
1415 | - | ||
1416 | - | func | |
1417 | - | let b = toString( | |
1418 | - | let dX = | |
1419 | - | let | |
1420 | - | let | |
1421 | - | let | |
1422 | - | if (( | |
1397 | + | func hv (b,aO,gT,gY) = { | |
1398 | + | let hf = aG(aO) | |
1399 | + | let hg = value(getInteger(hf)) | |
1400 | + | let hl = (fraction((lastBlock.timestamp - hg), gS(aO, gT), ac) * gT) | |
1401 | + | hj(b, hl, gY, aO) | |
1402 | + | } | |
1403 | + | ||
1404 | + | ||
1405 | + | func hw (dg,gm,hx,aO) = { | |
1406 | + | let b = toString(gm) | |
1407 | + | let dX = gX(b, cH, aO) | |
1408 | + | let gT = ca(dX._3[bP]) | |
1409 | + | let hy = aH(dX._2) | |
1410 | + | let hz = valueOrElse(getInteger(hy), 0) | |
1411 | + | if ((hz >= 3)) | |
1423 | 1412 | then throw("Currently max infrastructure level = 3") | |
1424 | 1413 | else { | |
1425 | - | let | |
1426 | - | let | |
1427 | - | if (if (!( | |
1428 | - | then ( | |
1414 | + | let R = (hz + 1) | |
1415 | + | let hA = fraction(ck, (gT * R), br) | |
1416 | + | if (if (!(dg)) | |
1417 | + | then (hx != hA) | |
1429 | 1418 | else false) | |
1430 | - | then throw(("Payment attached should be " + toString( | |
1419 | + | then throw(("Payment attached should be " + toString(hA))) | |
1431 | 1420 | else { | |
1432 | - | let | |
1433 | - | let | |
1434 | - | let | |
1435 | - | let | |
1436 | - | let | |
1437 | - | let | |
1438 | - | let | |
1439 | - | let | |
1440 | - | let | |
1441 | - | let | |
1442 | - | let | |
1443 | - | let | |
1444 | - | $Tuple3(([IntegerEntry( | |
1421 | + | let fe = aX(dX._1) | |
1422 | + | let fQ = fd(fe) | |
1423 | + | let gM = split(fQ[aA], "_") | |
1424 | + | let hB = fraction(bm, (gT * R), br) | |
1425 | + | let gN = makeString(df(dg, gM, hB), "_") | |
1426 | + | let hC = hv(b, dX._2, gT, cH) | |
1427 | + | let hD = hC._5 | |
1428 | + | let hE = fg(hD[ap]) | |
1429 | + | let hF = makeString([split(hD[ap], "_")[0], toString(R)], "_") | |
1430 | + | let hG = fg(hF) | |
1431 | + | let fF = split(hD[at], "_") | |
1432 | + | let hH = makeString([fF[au], fF[av], toString(((parseIntValue(fF[aw]) + hG) - hE)), toString(hG)], "_") | |
1433 | + | $Tuple3(([IntegerEntry(hy, R), IntegerEntry(cz(dX._2, b), R), StringEntry(fe, makeString([fQ[ay], hC._3[az], gN, fQ[aB]], ":")), StringEntry(hC._4, makeString([hF, hD[aq], hD[ar], hD[as], hH], ":"))] ++ hC._1), R, hB) | |
1445 | 1434 | } | |
1446 | 1435 | } | |
1447 | 1436 | } | |
1448 | 1437 | ||
1449 | 1438 | ||
1450 | - | func | |
1439 | + | func hI (r,hJ) = if (!(bh)) | |
1451 | 1440 | then $Tuple2(nil, 0) | |
1452 | 1441 | else { | |
1453 | - | let | |
1454 | - | let | |
1455 | - | let | |
1456 | - | let | |
1457 | - | let | |
1458 | - | let | |
1459 | - | $Tuple2([IntegerEntry( | |
1460 | - | } | |
1461 | - | ||
1462 | - | ||
1463 | - | func | |
1442 | + | let hK = u(r) | |
1443 | + | let hL = t(r) | |
1444 | + | let L = valueOrElse(getInteger(T, hL), 0) | |
1445 | + | let Q = (L + hJ) | |
1446 | + | let hM = O(valueOrElse(getInteger(T, hK), 0), Q) | |
1447 | + | let hN = v(r) | |
1448 | + | $Tuple2([IntegerEntry(hK, hM[0]), IntegerEntry(hL, Q), IntegerEntry(hN, (valueOrElse(getInteger(hN), 0) + hM[1]))], Q) | |
1449 | + | } | |
1450 | + | ||
1451 | + | ||
1452 | + | func hO (b,hJ) = if (!(bh)) | |
1464 | 1453 | then $Tuple2(nil, 0) | |
1465 | 1454 | else { | |
1466 | - | let | |
1467 | - | let | |
1468 | - | let | |
1469 | - | let | |
1470 | - | let | |
1471 | - | let | |
1472 | - | $Tuple2([IntegerEntry( | |
1473 | - | } | |
1474 | - | ||
1475 | - | ||
1476 | - | func | |
1477 | - | let | |
1478 | - | let | |
1479 | - | let | |
1480 | - | if (!(isDefined( | |
1455 | + | let hK = y(b) | |
1456 | + | let hL = x(b) | |
1457 | + | let L = valueOrElse(getInteger(T, hL), 0) | |
1458 | + | let Q = (L + hJ) | |
1459 | + | let hM = O(valueOrElse(getInteger(T, hK), 0), Q) | |
1460 | + | let hN = z(b) | |
1461 | + | $Tuple2([IntegerEntry(hK, hM[0]), IntegerEntry(hL, Q), IntegerEntry(hN, (valueOrElse(getInteger(hN), 0) + hM[1]))], Q) | |
1462 | + | } | |
1463 | + | ||
1464 | + | ||
1465 | + | func hP (b) = { | |
1466 | + | let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked") | |
1467 | + | let hQ = aR(b) | |
1468 | + | let hR = getString(hQ) | |
1469 | + | if (!(isDefined(hR))) | |
1481 | 1470 | then throw("You are not eligible for ONBOARD artifact") | |
1482 | 1471 | else { | |
1483 | - | let | |
1484 | - | let | |
1485 | - | if (isDefined( | |
1486 | - | then throw(("You already used your ONBOARD artifact on duck " + value( | |
1472 | + | let hS = aT(b) | |
1473 | + | let hT = getString(hS) | |
1474 | + | if (isDefined(hT)) | |
1475 | + | then throw(("You already used your ONBOARD artifact on duck " + value(hT))) | |
1487 | 1476 | else { | |
1488 | - | let | |
1489 | - | let | |
1490 | - | if (isDefined( | |
1491 | - | then throw(((("The duck " + | |
1492 | - | else ([StringEntry( | |
1477 | + | let hU = aS(r) | |
1478 | + | let hV = getString(hU) | |
1479 | + | if (isDefined(hV)) | |
1480 | + | then throw(((("The duck " + r) + " already got points from ONBOARD artifact from user ") + value(hV))) | |
1481 | + | else ([StringEntry(hS, r), StringEntry(hU, b)] ++ hI(r, I)._1) | |
1493 | 1482 | } | |
1494 | 1483 | } | |
1495 | 1484 | } | |
1496 | 1485 | ||
1497 | 1486 | ||
1498 | - | func | |
1499 | - | let dX = | |
1500 | - | let | |
1501 | - | let | |
1502 | - | let | |
1503 | - | if ((valueOrElse(getInteger( | |
1487 | + | func hW (b,gZ) = { | |
1488 | + | let dX = gX(b, cH, gZ) | |
1489 | + | let aO = dX._2 | |
1490 | + | let gT = ca(dX._3[bP]) | |
1491 | + | let hX = aI(Z, aO) | |
1492 | + | if ((valueOrElse(getInteger(hX), 0) > 0)) | |
1504 | 1493 | then throw("Presale artifact is already activated") | |
1505 | - | else if ((parseIntValue(dX._3[ | |
1506 | - | then throw(((( | |
1494 | + | else if ((parseIntValue(dX._3[bO]) > ct)) | |
1495 | + | then throw((((X + " ") + aO) + " is not eligible for presale artifact")) | |
1507 | 1496 | else { | |
1508 | - | let | |
1509 | - | (((( | |
1497 | + | let hC = hv(b, aO, gT, cH) | |
1498 | + | ((((hC._1 :+ IntegerEntry(hX, gT)) :+ IntegerEntry(cA(Z, aO, b), gT)) :+ StringEntry(hC._2, makeString(hC._3, ":"))) :+ StringEntry(hC._4, makeString(hC._5, ":"))) | |
1510 | 1499 | } | |
1511 | 1500 | } | |
1512 | 1501 | ||
1513 | 1502 | ||
1514 | - | func | |
1515 | - | let | |
1516 | - | func | |
1517 | - | let | |
1518 | - | let | |
1519 | - | let | |
1520 | - | let | |
1521 | - | if (( | |
1522 | - | then throw(( | |
1503 | + | func hY (hZ,R,ia,b,ib,gn,ic) = { | |
1504 | + | let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked") | |
1505 | + | func id (cT,aO) = { | |
1506 | + | let he = value(assetInfo(fromBase58String(aO))) | |
1507 | + | let hf = aG(aO) | |
1508 | + | let hg = valueOrErrorMessage(getInteger(hf), (("NFT " + he.name) + " is not staked")) | |
1509 | + | let hh = valueOrErrorMessage(getString(aD(aO)), (("NFT " + he.name) + " is orphaned")) | |
1510 | + | if ((hh != b)) | |
1511 | + | then throw((X + " is not yours")) | |
1523 | 1512 | else { | |
1524 | - | let | |
1525 | - | let | |
1526 | - | if (if (( | |
1527 | - | then ( | |
1513 | + | let hi = split(he.description, "_") | |
1514 | + | let gq = hi[bR] | |
1515 | + | if (if ((cT._3 != "")) | |
1516 | + | then (cT._3 != gq) | |
1528 | 1517 | else false) | |
1529 | 1518 | then throw("Lands should be on the same continent to merge") | |
1530 | 1519 | else { | |
1531 | - | let | |
1532 | - | let | |
1533 | - | let | |
1534 | - | let | |
1535 | - | let | |
1536 | - | let | |
1537 | - | let | |
1538 | - | let | |
1539 | - | let | |
1540 | - | if (("S" == | |
1520 | + | let cb = hi[bP] | |
1521 | + | let ie = cT._1 | |
1522 | + | let ev = valueOrErrorMessage(indexOf(ie, cb), "You haven't passed all the lands needed") | |
1523 | + | let if = (take(ie, ev) + drop(ie, (ev + 1))) | |
1524 | + | let gT = ca(cb) | |
1525 | + | let ig = (cT._2 + valueOrElse(getInteger(aI(Z, aO)), 0)) | |
1526 | + | let fz = valueOrElse(getInteger(aH(aO)), 0) | |
1527 | + | let ih = { | |
1528 | + | let bk = cb | |
1529 | + | if (("S" == bk)) | |
1541 | 1530 | then 3 | |
1542 | - | else if (("M" == | |
1531 | + | else if (("M" == bk)) | |
1543 | 1532 | then 4 | |
1544 | - | else if (("L" == | |
1533 | + | else if (("L" == bk)) | |
1545 | 1534 | then 5 | |
1546 | - | else if (("XL" == | |
1535 | + | else if (("XL" == bk)) | |
1547 | 1536 | then 6 | |
1548 | 1537 | else throw("Only S, M, L, XL can merge") | |
1549 | 1538 | } | |
1550 | - | if (( | |
1539 | + | if ((fz != ih)) | |
1551 | 1540 | then throw("All lands should be maxed to merge") | |
1552 | 1541 | else { | |
1553 | - | let | |
1554 | - | let | |
1555 | - | let | |
1556 | - | if ((0 > | |
1557 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
1542 | + | let cw = hi[bO] | |
1543 | + | let er = ex(hi[bQ]) | |
1544 | + | let eB = (lastBlock.timestamp - hg) | |
1545 | + | if ((0 > eB)) | |
1546 | + | then throw(((("Saved timestamp is in future, saved = " + toString(hg)) + ", current = ") + toString(lastBlock.timestamp))) | |
1558 | 1547 | else { | |
1559 | - | let | |
1560 | - | let | |
1561 | - | let | |
1562 | - | let | |
1563 | - | let | |
1564 | - | let | |
1565 | - | if (!(isDefined( | |
1566 | - | then throw(("Your staked lands don't contain " + | |
1548 | + | let hk = gS(aO, gT) | |
1549 | + | let fy = (gT / br) | |
1550 | + | let hs = ez(split(cT._4, "_"), er, eB, fy, hk) | |
1551 | + | let dd = ep(split(cT._6, "_"), er, fy, -1) | |
1552 | + | let ii = cT._7 | |
1553 | + | let bJ = indexOf(ii, aO) | |
1554 | + | if (!(isDefined(bJ))) | |
1555 | + | then throw(("Your staked lands don't contain " + aO)) | |
1567 | 1556 | else { | |
1568 | - | let | |
1569 | - | let | |
1570 | - | $Tuple8( | |
1557 | + | let ij = aF(aO) | |
1558 | + | let ik = valueOrElse(getString(ij), "") | |
1559 | + | $Tuple8(if, ig, gq, hs, (((((((((((((cT._5 :+ DeleteEntry(aG(aO))) :+ DeleteEntry(aK(X, aO, b))) :+ DeleteEntry(cv(cw))) :+ DeleteEntry(aD(aO))) :+ DeleteEntry(aH(aO))) :+ DeleteEntry(cz(aO, b))) :+ DeleteEntry(aI(Z, aO))) :+ DeleteEntry(cA(Z, aO, b))) :+ DeleteEntry(cB(cw))) :+ DeleteEntry(aN(aO))) :+ DeleteEntry(ij)) :+ DeleteEntry(cx(ik))) :+ Burn(fromBase58String(aO), 1)), dd, removeByIndex(ii, value(bJ)), (cT._8 + gT)) | |
1571 | 1560 | } | |
1572 | 1561 | } | |
1573 | 1562 | } | |
1575 | 1564 | } | |
1576 | 1565 | } | |
1577 | 1566 | ||
1578 | - | let | |
1579 | - | let | |
1580 | - | let | |
1581 | - | let | |
1582 | - | let | |
1583 | - | let | |
1584 | - | then split_51C(value( | |
1567 | + | let fe = aX(r) | |
1568 | + | let fQ = fd(fe) | |
1569 | + | let il = valueOrElse(getString(bS()), "0_0_0_0_0_0") | |
1570 | + | let im = bT(b) | |
1571 | + | let in = getString(im) | |
1572 | + | let io = if (isDefined(in)) | |
1573 | + | then split_51C(value(in), "_") | |
1585 | 1574 | else nil | |
1586 | - | let | |
1587 | - | let | |
1588 | - | let | |
1589 | - | let | |
1590 | - | func | |
1591 | - | then | |
1592 | - | else | |
1593 | - | ||
1594 | - | func | |
1595 | - | then | |
1575 | + | let de = { | |
1576 | + | let cV = ib | |
1577 | + | let cW = size(cV) | |
1578 | + | let cX = $Tuple8(ia, 0, "", fQ[az], nil, il, io, 0) | |
1579 | + | func cY (cZ,da) = if ((da >= cW)) | |
1580 | + | then cZ | |
1581 | + | else id(cZ, cV[da]) | |
1582 | + | ||
1583 | + | func db (cZ,da) = if ((da >= cW)) | |
1584 | + | then cZ | |
1596 | 1585 | else throw("List size exceeds 5") | |
1597 | 1586 | ||
1598 | - | | |
1599 | - | } | |
1600 | - | let | |
1601 | - | let | |
1602 | - | let | |
1603 | - | let | |
1604 | - | let | |
1605 | - | let | |
1606 | - | let | |
1607 | - | let | |
1608 | - | let | |
1609 | - | let | |
1610 | - | let | |
1611 | - | $Tuple2(((((((((((((((( | |
1612 | - | then StringEntry( | |
1613 | - | else DeleteEntry( | |
1587 | + | db(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5) | |
1588 | + | } | |
1589 | + | let gq = de._3 | |
1590 | + | let eZ = valueOrErrorMessage(indexOf(ai, gq), ("Unknown continent: " + gq)) | |
1591 | + | let ey = eX(eQ(toBigInt(gn)), eZ) | |
1592 | + | let gp = valueOrElse(getInteger(cu()), (ct + 1)) | |
1593 | + | let ip = toString(gp) | |
1594 | + | let gr = Issue(cM(ip, hZ), makeString([ip, hZ, ey, gq], "_"), 1, 0, false) | |
1595 | + | let aE = calculateAssetId(gr) | |
1596 | + | let iq = toBase58String(aE) | |
1597 | + | let gN = makeString(df((ic > 0), split(fQ[aA], "_"), ic), "_") | |
1598 | + | let ir = bU(b) | |
1599 | + | let is = valueOrElse(getInteger(ir), 0) | |
1600 | + | $Tuple2((((((((((((((((de._5 :+ (if ((size(de._7) > 0)) | |
1601 | + | then StringEntry(im, makeString_11C(de._7, "_")) | |
1602 | + | else DeleteEntry(im))) :+ IntegerEntry(ir, if ((de._8 > is)) | |
1614 | 1603 | then 0 | |
1615 | - | else ( | |
1616 | - | } | |
1617 | - | ||
1618 | - | ||
1619 | - | func | |
1620 | - | ||
1621 | - | ||
1622 | - | func | |
1623 | - | let | |
1624 | - | if (if (!( | |
1625 | - | then ( | |
1604 | + | else (is - de._8))) :+ IntegerEntry(cu(), (gp + 1))) :+ gr) :+ StringEntry(cv(ip), iq)) :+ StringEntry(aD(iq), b)) :+ StringEntry(cB(ip), b)) :+ IntegerEntry(aI(Z, iq), de._2)) :+ IntegerEntry(cA(Z, iq, b), de._2)) :+ IntegerEntry(aH(iq), R)) :+ IntegerEntry(cz(iq, b), R)) :+ StringEntry(fe, makeString([fQ[ay], de._4, gN, fQ[aB]], ":"))) :+ StringEntry(bS(), de._6)) :+ StringEntry(aY(r), makeString([gq, "L", iq], "_"))) :+ ScriptTransfer(addressFromStringValue(b), 1, aE)), iq) | |
1605 | + | } | |
1606 | + | ||
1607 | + | ||
1608 | + | func it (b,ib,gn) = hY("M", 3, "SSSS", b, ib, gn, 0) | |
1609 | + | ||
1610 | + | ||
1611 | + | func iu (b,ib,gn,dg,hx) = { | |
1612 | + | let hA = (ck * 4) | |
1613 | + | if (if (!(dg)) | |
1614 | + | then (hx != hA) | |
1626 | 1615 | else false) | |
1627 | - | then throw(("Payment attached should be " + toString( | |
1628 | - | else | |
1629 | - | } | |
1630 | - | ||
1631 | - | ||
1632 | - | func | |
1633 | - | let | |
1634 | - | if (if (!( | |
1635 | - | then ( | |
1616 | + | then throw(("Payment attached should be " + toString(hA))) | |
1617 | + | else hY("L", 4, "SMM", b, ib, gn, (bm * 4)) | |
1618 | + | } | |
1619 | + | ||
1620 | + | ||
1621 | + | func iv (b,ib,gn,dg,hx) = { | |
1622 | + | let hA = (ck * 47) | |
1623 | + | if (if (!(dg)) | |
1624 | + | then (hx != hA) | |
1636 | 1625 | else false) | |
1637 | - | then throw(("Payment attached should be " + toString( | |
1638 | - | else | |
1639 | - | } | |
1640 | - | ||
1641 | - | ||
1642 | - | func | |
1643 | - | let | |
1644 | - | if (if (!( | |
1645 | - | then ( | |
1626 | + | then throw(("Payment attached should be " + toString(hA))) | |
1627 | + | else hY("XL", 5, "SSSML", b, ib, gn, (bm * 47)) | |
1628 | + | } | |
1629 | + | ||
1630 | + | ||
1631 | + | func iw (b,ib,gn,dg,hx) = { | |
1632 | + | let hA = (ck * 54) | |
1633 | + | if (if (!(dg)) | |
1634 | + | then (hx != hA) | |
1646 | 1635 | else false) | |
1647 | - | then throw(("Payment attached should be " + toString( | |
1648 | - | else | |
1649 | - | } | |
1650 | - | ||
1651 | - | ||
1652 | - | func | |
1653 | - | let | |
1654 | - | let | |
1655 | - | if ((4 == | |
1656 | - | then | |
1657 | - | else if ((3 == | |
1658 | - | then | |
1659 | - | else if ((5 == | |
1660 | - | then | |
1661 | - | else if ((2 == | |
1662 | - | then | |
1636 | + | then throw(("Payment attached should be " + toString(hA))) | |
1637 | + | else hY("XXL", 6, "LXL", b, ib, gn, (bm * 54)) | |
1638 | + | } | |
1639 | + | ||
1640 | + | ||
1641 | + | func ix (dg,b,hx,ib,gn) = { | |
1642 | + | let iy = { | |
1643 | + | let bk = size(ib) | |
1644 | + | if ((4 == bk)) | |
1645 | + | then it(b, ib, gn) | |
1646 | + | else if ((3 == bk)) | |
1647 | + | then iu(b, ib, gn, dg, hx) | |
1648 | + | else if ((5 == bk)) | |
1649 | + | then iv(b, ib, gn, dg, hx) | |
1650 | + | else if ((2 == bk)) | |
1651 | + | then iw(b, ib, gn, dg, hx) | |
1663 | 1652 | else throw("Unknown merge") | |
1664 | 1653 | } | |
1665 | - | | |
1666 | - | } | |
1667 | - | ||
1668 | - | ||
1669 | - | func | |
1670 | - | then valueOrElse(getBoolean( | |
1654 | + | iy | |
1655 | + | } | |
1656 | + | ||
1657 | + | ||
1658 | + | func iz (ev) = if (if ((ev.originCaller != bK)) | |
1659 | + | then valueOrElse(getBoolean(aZ()), false) | |
1671 | 1660 | else false) | |
1672 | 1661 | then throw("Contracts are under maintenance") | |
1673 | - | else StringEntry( | |
1674 | - | ||
1675 | - | ||
1676 | - | @Callable( | |
1677 | - | func constructorV1 ( | |
1662 | + | else StringEntry(aC(toString(ev.originCaller)), toBase58String(ev.transactionId)) | |
1663 | + | ||
1664 | + | ||
1665 | + | @Callable(ev) | |
1666 | + | func constructorV1 (iA) = if ((ev.caller != this)) | |
1678 | 1667 | then throw("Permission denied") | |
1679 | - | else [StringEntry( | |
1680 | - | ||
1681 | - | ||
1682 | - | ||
1683 | - | @Callable( | |
1684 | - | func setBlocked ( | |
1668 | + | else [StringEntry(bE(), iA)] | |
1669 | + | ||
1670 | + | ||
1671 | + | ||
1672 | + | @Callable(ev) | |
1673 | + | func setBlocked (iB) = if ((ev.caller != this)) | |
1685 | 1674 | then throw("permission denied") | |
1686 | - | else [BooleanEntry( | |
1687 | - | ||
1688 | - | ||
1689 | - | ||
1690 | - | @Callable( | |
1675 | + | else [BooleanEntry(aZ(), iB)] | |
1676 | + | ||
1677 | + | ||
1678 | + | ||
1679 | + | @Callable(ev) | |
1691 | 1680 | func stakeLand () = { | |
1692 | - | let | |
1693 | - | if ((size( | |
1681 | + | let iC = iz(ev) | |
1682 | + | if ((size(ev.payments) != 1)) | |
1694 | 1683 | then throw("Exactly one payment required") | |
1695 | 1684 | else { | |
1696 | - | let | |
1697 | - | let | |
1698 | - | let | |
1699 | - | if (( | |
1700 | - | then throw((("NFT " + | |
1685 | + | let iD = value(ev.payments[0]) | |
1686 | + | let aE = value(iD.assetId) | |
1687 | + | let bx = toString(ev.caller) | |
1688 | + | if ((iD.amount != 1)) | |
1689 | + | then throw((("NFT " + X) + " token should be attached as payment")) | |
1701 | 1690 | else { | |
1702 | - | let | |
1703 | - | if (( | |
1691 | + | let he = value(assetInfo(aE)) | |
1692 | + | if ((he.issuer != this)) | |
1704 | 1693 | then throw("Unknown issuer of token") | |
1705 | - | else if (!(contains( | |
1706 | - | then throw((("Only NFT " + | |
1694 | + | else if (!(contains(he.name, X))) | |
1695 | + | then throw((("Only NFT " + X) + " tokens are accepted")) | |
1707 | 1696 | else { | |
1708 | - | let | |
1709 | - | let | |
1710 | - | then dropRight( | |
1711 | - | else if (contains( | |
1712 | - | then dropRight( | |
1713 | - | else dropRight( | |
1714 | - | if (!(isDefined(parseInt( | |
1715 | - | then throw(("Cannot parse land number from " + | |
1697 | + | let iE = drop(he.name, 4) | |
1698 | + | let cw = if (contains(iE, "XXL")) | |
1699 | + | then dropRight(iE, 3) | |
1700 | + | else if (contains(iE, "XL")) | |
1701 | + | then dropRight(iE, 2) | |
1702 | + | else dropRight(iE, 1) | |
1703 | + | if (!(isDefined(parseInt(cw)))) | |
1704 | + | then throw(("Cannot parse land number from " + he.name)) | |
1716 | 1705 | else { | |
1717 | - | let | |
1718 | - | let | |
1719 | - | if (isDefined(getInteger( | |
1720 | - | then throw((("NFT " + | |
1706 | + | let aO = toBase58String(aE) | |
1707 | + | let hf = aG(aO) | |
1708 | + | if (isDefined(getInteger(hf))) | |
1709 | + | then throw((("NFT " + he.name) + " is already staked")) | |
1721 | 1710 | else { | |
1722 | - | let | |
1723 | - | let | |
1724 | - | let | |
1725 | - | let | |
1726 | - | let | |
1727 | - | let | |
1728 | - | let | |
1729 | - | let | |
1730 | - | then split_51C(value( | |
1711 | + | let hi = split(he.description, "_") | |
1712 | + | let er = ex(hi[bQ]) | |
1713 | + | let gT = ca(hi[bP]) | |
1714 | + | let dd = ew(er, (gT / br), 1) | |
1715 | + | let gU = valueOrElse(getInteger(aI(Z, aO)), 0) | |
1716 | + | let im = bT(bx) | |
1717 | + | let in = getString(im) | |
1718 | + | let ii = if (isDefined(in)) | |
1719 | + | then split_51C(value(in), "_") | |
1731 | 1720 | else nil | |
1732 | - | if (containsElement( | |
1733 | - | then throw(("Your staked lands already contain " + | |
1721 | + | if (containsElement(ii, aO)) | |
1722 | + | then throw(("Your staked lands already contain " + aO)) | |
1734 | 1723 | else { | |
1735 | - | let | |
1736 | - | let | |
1737 | - | let | |
1738 | - | let | |
1739 | - | $Tuple2([IntegerEntry( | |
1724 | + | let fz = valueOrElse(getInteger(aH(aO)), 0) | |
1725 | + | let ir = bU(bx) | |
1726 | + | let iF = valueOrElse(getInteger(ir), 0) | |
1727 | + | let iG = bY(invoke(bN, "onStakeUnstakeLand", [bx], nil)) | |
1728 | + | $Tuple2([IntegerEntry(hf, lastBlock.timestamp), IntegerEntry(aK(X, aO, bx), lastBlock.timestamp), StringEntry(im, makeString_11C((ii :+ aO), "_")), IntegerEntry(ir, (iF + gT)), StringEntry(aD(aO), bx), StringEntry(cB(cw), bx), IntegerEntry(cA(Z, aO, bx), gU), IntegerEntry(cz(aO, bx), fz), StringEntry(bS(), dd), iC], iG) | |
1740 | 1729 | } | |
1741 | 1730 | } | |
1742 | 1731 | } | |
1747 | 1736 | ||
1748 | 1737 | ||
1749 | 1738 | ||
1750 | - | @Callable( | |
1751 | - | func unstakeLand ( | |
1752 | - | let | |
1753 | - | if ((size( | |
1739 | + | @Callable(ev) | |
1740 | + | func unstakeLand (gZ) = { | |
1741 | + | let iC = iz(ev) | |
1742 | + | if ((size(ev.payments) != 0)) | |
1754 | 1743 | then throw("No payments required") | |
1755 | 1744 | else { | |
1756 | - | let b = toString( | |
1757 | - | let dX = | |
1758 | - | let | |
1759 | - | let | |
1760 | - | let | |
1761 | - | let | |
1762 | - | let | |
1763 | - | let | |
1764 | - | let | |
1765 | - | let | |
1766 | - | if (!(isDefined( | |
1767 | - | then throw(("Your staked lands don't contain " + | |
1745 | + | let b = toString(ev.caller) | |
1746 | + | let dX = gX(b, cG, gZ) | |
1747 | + | let aO = dX._2 | |
1748 | + | let im = bT(b) | |
1749 | + | let er = ex(dX._3[bQ]) | |
1750 | + | let gT = ca(dX._3[bP]) | |
1751 | + | let dd = ew(er, (gT / br), -1) | |
1752 | + | let hC = hv(b, aO, gT, cG) | |
1753 | + | let ii = split_51C(valueOrElse(getString(im), ""), "_") | |
1754 | + | let bJ = indexOf(ii, aO) | |
1755 | + | if (!(isDefined(bJ))) | |
1756 | + | then throw(("Your staked lands don't contain " + aO)) | |
1768 | 1757 | else { | |
1769 | - | let | |
1770 | - | let | |
1771 | - | if (( | |
1772 | - | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString( | |
1758 | + | let iH = lastBlock.timestamp | |
1759 | + | let iI = valueOrElse(getInteger(bM, ba(b)), 0) | |
1760 | + | if ((iI >= iH)) | |
1761 | + | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(iI))) | |
1773 | 1762 | else { | |
1774 | - | let | |
1775 | - | if (( | |
1776 | - | then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString( | |
1763 | + | let iJ = (valueOrElse(getInteger(bN, a(b)), 0) + bn) | |
1764 | + | if ((iJ > iH)) | |
1765 | + | then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(iJ))) | |
1777 | 1766 | else { | |
1778 | - | let | |
1779 | - | let | |
1780 | - | let | |
1767 | + | let ir = bU(b) | |
1768 | + | let is = valueOrElse(getInteger(ir), 0) | |
1769 | + | let iK = if ((gT > is)) | |
1781 | 1770 | then 0 | |
1782 | - | else ( | |
1783 | - | let | |
1784 | - | $Tuple2([ScriptTransfer( | |
1785 | - | then StringEntry( | |
1786 | - | else DeleteEntry( | |
1771 | + | else (is - gT) | |
1772 | + | let iG = bY(invoke(bN, "onStakeUnstakeLand", [b], nil)) | |
1773 | + | $Tuple2([ScriptTransfer(ev.caller, 1, fromBase58String(aO)), DeleteEntry(aG(aO)), DeleteEntry(aK(X, aO, b)), StringEntry(bS(), dd), StringEntry(hC._2, makeString(hC._3, ":")), if ((size(ii) > 1)) | |
1774 | + | then StringEntry(im, makeString_11C(removeByIndex(ii, value(bJ)), "_")) | |
1775 | + | else DeleteEntry(im), IntegerEntry(ir, iK), iC], iG) | |
1787 | 1776 | } | |
1788 | 1777 | } | |
1789 | 1778 | } | |
1792 | 1781 | ||
1793 | 1782 | ||
1794 | 1783 | ||
1795 | - | @Callable( | |
1784 | + | @Callable(ev) | |
1796 | 1785 | func stakeDuck () = { | |
1797 | - | let | |
1798 | - | if ((size( | |
1786 | + | let iC = iz(ev) | |
1787 | + | if ((size(ev.payments) != 1)) | |
1799 | 1788 | then throw("Exactly one payment required") | |
1800 | 1789 | else { | |
1801 | - | let | |
1802 | - | let | |
1803 | - | let | |
1804 | - | if (( | |
1805 | - | then throw((("NFT " + | |
1790 | + | let iD = value(ev.payments[0]) | |
1791 | + | let aE = value(iD.assetId) | |
1792 | + | let bx = toString(ev.caller) | |
1793 | + | if ((iD.amount != 1)) | |
1794 | + | then throw((("NFT " + Y) + " token should be attached as payment")) | |
1806 | 1795 | else { | |
1807 | - | let | |
1808 | - | if (if (( | |
1809 | - | then ( | |
1796 | + | let he = value(assetInfo(aE)) | |
1797 | + | if (if ((he.issuer != cd)) | |
1798 | + | then (he.issuer != ce) | |
1810 | 1799 | else false) | |
1811 | - | then throw((("Unknown issuer of " + | |
1812 | - | else if (!(contains( | |
1813 | - | then throw((("Only NFT " + | |
1800 | + | then throw((("Unknown issuer of " + Y) + " token")) | |
1801 | + | else if (!(contains(he.name, Y))) | |
1802 | + | then throw((("Only NFT " + Y) + " tokens are accepted")) | |
1814 | 1803 | else { | |
1815 | - | let | |
1816 | - | let | |
1817 | - | if (isDefined(getInteger( | |
1818 | - | then throw((("NFT " + | |
1819 | - | else if (isDefined(getString( | |
1820 | - | then throw(("You already staked one duck: " + | |
1804 | + | let iL = toBase58String(aE) | |
1805 | + | let hf = aG(iL) | |
1806 | + | if (isDefined(getInteger(hf))) | |
1807 | + | then throw((("NFT " + he.name) + " is already staked")) | |
1808 | + | else if (isDefined(getString(aW(bx)))) | |
1809 | + | then throw(("You already staked one duck: " + he.name)) | |
1821 | 1810 | else { | |
1822 | - | let | |
1823 | - | let | |
1824 | - | let | |
1825 | - | let | |
1826 | - | let | |
1827 | - | let | |
1828 | - | let | |
1829 | - | ([IntegerEntry( | |
1811 | + | let iM = aY(iL) | |
1812 | + | let iN = getString(iM) | |
1813 | + | let fe = aX(iL) | |
1814 | + | let iO = getString(fe) | |
1815 | + | let gF = q(iL) | |
1816 | + | let gG = M(valueOrElse(getInteger(u(iL)), 0)) | |
1817 | + | let iP = valueOrElse(getInteger(gF), gG) | |
1818 | + | ([IntegerEntry(hf, lastBlock.timestamp), IntegerEntry(aK(Y, toBase58String(aE), bx), lastBlock.timestamp), StringEntry(aV(iL), bx), StringEntry(aW(bx), iL)] ++ (if (isDefined(iN)) | |
1830 | 1819 | then nil | |
1831 | - | else ([StringEntry( | |
1820 | + | else ([StringEntry(iM, ae)] ++ (if (isDefined(iO)) | |
1832 | 1821 | then nil | |
1833 | - | else (([StringEntry( | |
1822 | + | else (([StringEntry(fe, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(gF, iP)) :+ iC))))) | |
1834 | 1823 | } | |
1835 | 1824 | } | |
1836 | 1825 | } | |
1839 | 1828 | ||
1840 | 1829 | ||
1841 | 1830 | ||
1842 | - | @Callable( | |
1843 | - | func unstakeDuck ( | |
1844 | - | let | |
1845 | - | if ((size( | |
1831 | + | @Callable(ev) | |
1832 | + | func unstakeDuck (iL) = { | |
1833 | + | let iC = iz(ev) | |
1834 | + | if ((size(ev.payments) != 0)) | |
1846 | 1835 | then throw("No payments required") | |
1847 | 1836 | else { | |
1848 | - | let | |
1849 | - | let | |
1850 | - | let | |
1851 | - | let | |
1852 | - | if (!(isDefined(getInteger( | |
1853 | - | then throw((("NFT " + | |
1854 | - | else if (!(isDefined(getString( | |
1855 | - | then throw((("The duck " + | |
1837 | + | let aE = fromBase58String(iL) | |
1838 | + | let bx = toString(ev.caller) | |
1839 | + | let he = value(assetInfo(aE)) | |
1840 | + | let hf = aG(toBase58String(aE)) | |
1841 | + | if (!(isDefined(getInteger(hf)))) | |
1842 | + | then throw((("NFT " + he.name) + " is not staked")) | |
1843 | + | else if (!(isDefined(getString(aW(bx))))) | |
1844 | + | then throw((("The duck " + he.name) + " is not staked")) | |
1856 | 1845 | else { | |
1857 | - | let | |
1858 | - | if (( | |
1846 | + | let hh = valueOrErrorMessage(getString(aV(toBase58String(aE))), (("NFT " + he.name) + " is orphaned")) | |
1847 | + | if ((hh != bx)) | |
1859 | 1848 | then throw("Staked NFT is not yours") | |
1860 | 1849 | else { | |
1861 | - | let | |
1862 | - | let | |
1863 | - | let | |
1864 | - | if (( | |
1865 | - | then throw((("Please heal your duck to " + toString( | |
1866 | - | else [ScriptTransfer( | |
1850 | + | let gF = q(iL) | |
1851 | + | let gG = M(valueOrElse(getInteger(u(iL)), 0)) | |
1852 | + | let W = valueOrElse(getInteger(gF), gG) | |
1853 | + | if ((gG > W)) | |
1854 | + | then throw((("Please heal your duck to " + toString(gG)) + "hp before unstaking")) | |
1855 | + | else [ScriptTransfer(ev.caller, 1, aE), DeleteEntry(hf), DeleteEntry(gF), DeleteEntry(aY(iL)), DeleteEntry(aV(iL)), DeleteEntry(aK(Y, iL, bx)), DeleteEntry(aW(bx)), iC] | |
1867 | 1856 | } | |
1868 | 1857 | } | |
1869 | 1858 | } | |
1871 | 1860 | ||
1872 | 1861 | ||
1873 | 1862 | ||
1874 | - | @Callable( | |
1875 | - | func claimRes ( | |
1876 | - | let | |
1877 | - | if ((size( | |
1863 | + | @Callable(ev) | |
1864 | + | func claimRes (fM,iQ) = { | |
1865 | + | let iC = iz(ev) | |
1866 | + | if ((size(ev.payments) != 0)) | |
1878 | 1867 | then throw("No payments required") | |
1879 | 1868 | else { | |
1880 | - | let b = toString( | |
1881 | - | let | |
1882 | - | let | |
1883 | - | $Tuple2((((( | |
1884 | - | } | |
1885 | - | } | |
1886 | - | ||
1887 | - | ||
1888 | - | ||
1889 | - | @Callable( | |
1890 | - | func claimResToWH ( | |
1891 | - | let | |
1892 | - | if ((size( | |
1869 | + | let b = toString(ev.originCaller) | |
1870 | + | let dl = hj(b, fM, cG, iQ) | |
1871 | + | let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked") | |
1872 | + | $Tuple2(((((dl._1 ++ hI(r, fraction(A, fM, bq))._1) :+ StringEntry(dl._2, makeString(dl._3, ":"))) :+ StringEntry(dl._4, makeString(dl._5, ":"))) :+ iC), dl._3[az]) | |
1873 | + | } | |
1874 | + | } | |
1875 | + | ||
1876 | + | ||
1877 | + | ||
1878 | + | @Callable(ev) | |
1879 | + | func claimResToWH (fM,iQ) = { | |
1880 | + | let iC = iz(ev) | |
1881 | + | if ((size(ev.payments) != 0)) | |
1893 | 1882 | then throw("No payments required") | |
1894 | 1883 | else { | |
1895 | - | let b = toString( | |
1896 | - | let | |
1897 | - | $Tuple2((((( | |
1898 | - | } | |
1899 | - | } | |
1900 | - | ||
1901 | - | ||
1902 | - | ||
1903 | - | @Callable( | |
1904 | - | func flight ( | |
1905 | - | let | |
1906 | - | if ((size( | |
1884 | + | let b = toString(ev.originCaller) | |
1885 | + | let dl = hj(b, fM, cF, iQ) | |
1886 | + | $Tuple2(((((dl._1 ++ hO(b, fraction(A, fM, bq))._1) :+ StringEntry(dl._2, makeString(dl._3, ":"))) :+ StringEntry(dl._4, makeString(dl._5, ":"))) :+ iC), dl._5[aq]) | |
1887 | + | } | |
1888 | + | } | |
1889 | + | ||
1890 | + | ||
1891 | + | ||
1892 | + | @Callable(ev) | |
1893 | + | func flight (gu,gv) = { | |
1894 | + | let iC = iz(ev) | |
1895 | + | if ((size(ev.payments) != 0)) | |
1907 | 1896 | then throw("No payments required") | |
1908 | 1897 | else { | |
1909 | - | let | |
1910 | - | let | |
1911 | - | let | |
1912 | - | let | |
1913 | - | let | |
1914 | - | if (( | |
1898 | + | let bb = toString(ev.caller) | |
1899 | + | let fa = gt(bb, gu, gv) | |
1900 | + | let r = fa._2 | |
1901 | + | let iM = aY(r) | |
1902 | + | let hb = valueOrElse(getString(iM), ae) | |
1903 | + | if ((fa._4 == hb)) | |
1915 | 1904 | then throw("You can't fly to the same location") | |
1916 | 1905 | else { | |
1917 | - | let | |
1918 | - | let | |
1919 | - | let | |
1920 | - | $Tuple2(([StringEntry( | |
1921 | - | then | |
1922 | - | else | |
1923 | - | then | |
1924 | - | else | |
1906 | + | let gO = w(r) | |
1907 | + | let gP = valueOrElse(getString(gO), ",;,_,;,_,;,_,;,_,;,_,;,") | |
1908 | + | let gQ = dm(gP, fa._5) | |
1909 | + | $Tuple2(([StringEntry(iM, if ((fa._1 > 0)) | |
1910 | + | then fa._4 | |
1911 | + | else hb), StringEntry(gO, gQ), IntegerEntry(q(r), fa._1), iC] ++ hI(r, if ((fa._1 > 0)) | |
1912 | + | then B | |
1913 | + | else C)._1), fa._3) | |
1925 | 1914 | } | |
1926 | 1915 | } | |
1927 | 1916 | } | |
1928 | 1917 | ||
1929 | 1918 | ||
1930 | 1919 | ||
1931 | - | @Callable( | |
1932 | - | func heal ( | |
1933 | - | let | |
1934 | - | if (if (if ((0 > | |
1920 | + | @Callable(ev) | |
1921 | + | func heal (iR,iS,iT) = { | |
1922 | + | let iC = iz(ev) | |
1923 | + | if (if (if ((0 > iR)) | |
1935 | 1924 | then true | |
1936 | - | else (0 > | |
1925 | + | else (0 > iS)) | |
1937 | 1926 | then true | |
1938 | - | else (0 > | |
1927 | + | else (0 > iT)) | |
1939 | 1928 | then throw("Quantity cannot be negative") | |
1940 | 1929 | else { | |
1941 | - | let | |
1942 | - | let | |
1943 | - | let | |
1944 | - | let | |
1945 | - | let | |
1946 | - | if (( | |
1947 | - | then throw((("HP should be < " + toString( | |
1930 | + | let r = valueOrErrorMessage(getString(aW(toString(ev.caller))), "You don't have a duck staked") | |
1931 | + | let iU = [iR, iS, iT] | |
1932 | + | let gF = q(r) | |
1933 | + | let gG = M(valueOrElse(getInteger(u(r)), 0)) | |
1934 | + | let iV = valueOrElse(getInteger(gF), gG) | |
1935 | + | if ((iV >= gG)) | |
1936 | + | then throw((("HP should be < " + toString(gG)) + " to heal")) | |
1948 | 1937 | else { | |
1949 | - | let | |
1950 | - | let | |
1951 | - | let | |
1938 | + | let fe = aX(r) | |
1939 | + | let fQ = fd(fe) | |
1940 | + | let iW = if ((fQ[aB] == "")) | |
1952 | 1941 | then nil | |
1953 | - | else split( | |
1954 | - | func | |
1955 | - | let | |
1956 | - | let | |
1957 | - | then parseIntValue( | |
1942 | + | else split(fQ[aB], "_") | |
1943 | + | func iX (cT,iY) = { | |
1944 | + | let bZ = cT._2 | |
1945 | + | let eR = if ((size(iW) > bZ)) | |
1946 | + | then parseIntValue(iW[bZ]) | |
1958 | 1947 | else 0 | |
1959 | - | if ((3 > | |
1948 | + | if ((3 > bZ)) | |
1960 | 1949 | then { | |
1961 | - | let | |
1962 | - | if (( | |
1963 | - | then throw(((("You have only " + toString( | |
1964 | - | else $Tuple3(( | |
1950 | + | let iZ = iU[bZ] | |
1951 | + | if ((iZ > eR)) | |
1952 | + | then throw(((("You have only " + toString(eR)) + " of ") + ah[bZ])) | |
1953 | + | else $Tuple3((cT._1 :+ toString((eR - iZ))), (bZ + 1), (cT._3 + (cg[bZ] * iZ))) | |
1965 | 1954 | } | |
1966 | - | else $Tuple3(( | |
1955 | + | else $Tuple3((cT._1 :+ toString(eR)), (bZ + 1), cT._3) | |
1967 | 1956 | } | |
1968 | 1957 | ||
1969 | - | let | |
1970 | - | let | |
1971 | - | let | |
1972 | - | let | |
1973 | - | func | |
1974 | - | then | |
1975 | - | else | |
1976 | - | ||
1977 | - | func | |
1978 | - | then | |
1958 | + | let dl = { | |
1959 | + | let cV = ak | |
1960 | + | let cW = size(cV) | |
1961 | + | let cX = $Tuple3(nil, 0, 0) | |
1962 | + | func cY (cZ,da) = if ((da >= cW)) | |
1963 | + | then cZ | |
1964 | + | else iX(cZ, cV[da]) | |
1965 | + | ||
1966 | + | func db (cZ,da) = if ((da >= cW)) | |
1967 | + | then cZ | |
1979 | 1968 | else throw("List size exceeds 50") | |
1980 | 1969 | ||
1981 | - | | |
1970 | + | db(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cX, 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) | |
1982 | 1971 | } | |
1983 | - | let | |
1984 | - | $Tuple2(([IntegerEntry( | |
1972 | + | let ja = min([gG, (iV + dl._3)]) | |
1973 | + | $Tuple2(([IntegerEntry(gF, ja), StringEntry(fe, makeString_2C([fQ[ay], fQ[az], fQ[aA], makeString(dl._1, "_")], ":")), iC] ++ hI(r, (J * ((iR + iS) + iT)))._1), ja) | |
1985 | 1974 | } | |
1986 | 1975 | } | |
1987 | 1976 | } | |
1988 | 1977 | ||
1989 | 1978 | ||
1990 | 1979 | ||
1991 | - | @Callable( | |
1980 | + | @Callable(ev) | |
1992 | 1981 | func healES () = { | |
1993 | - | let | |
1994 | - | if ((size( | |
1982 | + | let iC = iz(ev) | |
1983 | + | if ((size(ev.payments) != 1)) | |
1995 | 1984 | then throw("Exactly one payment required") | |
1996 | 1985 | else { | |
1997 | - | let | |
1998 | - | if (( | |
1986 | + | let iD = value(ev.payments[0]) | |
1987 | + | if ((iD.assetId != bj)) | |
1999 | 1988 | then throw("Allowed USDT payment only!") | |
2000 | 1989 | else { | |
2001 | - | let | |
2002 | - | let | |
2003 | - | let | |
2004 | - | let | |
2005 | - | if (( | |
1990 | + | let r = valueOrErrorMessage(getString(aW(toString(ev.caller))), "You don't have a duck staked") | |
1991 | + | let gF = q(r) | |
1992 | + | let gG = M(valueOrElse(getInteger(u(r)), 0)) | |
1993 | + | let iV = valueOrElse(getInteger(gF), gG) | |
1994 | + | if ((iV > 0)) | |
2006 | 1995 | then throw("HP should be 0 to call Emergency Service") | |
2007 | 1996 | else { | |
2008 | - | let | |
2009 | - | let | |
2010 | - | let | |
1997 | + | let fe = aX(r) | |
1998 | + | let fQ = fd(fe) | |
1999 | + | let iW = if ((fQ[aB] == "")) | |
2011 | 2000 | then nil | |
2012 | - | else split( | |
2013 | - | let | |
2014 | - | then parseIntValue( | |
2001 | + | else split(fQ[aB], "_") | |
2002 | + | let jb = if ((size(iW) > 0)) | |
2003 | + | then parseIntValue(iW[0]) | |
2015 | 2004 | else 0 | |
2016 | - | let | |
2017 | - | then parseIntValue( | |
2005 | + | let jc = if ((size(iW) > 1)) | |
2006 | + | then parseIntValue(iW[1]) | |
2018 | 2007 | else 0 | |
2019 | - | let | |
2020 | - | then parseIntValue( | |
2008 | + | let jd = if ((size(iW) > 2)) | |
2009 | + | then parseIntValue(iW[2]) | |
2021 | 2010 | else 0 | |
2022 | - | if (if (if (( | |
2011 | + | if (if (if ((jb > 0)) | |
2023 | 2012 | then true | |
2024 | - | else ( | |
2013 | + | else (jc > 0)) | |
2025 | 2014 | then true | |
2026 | - | else ( | |
2015 | + | else (jd > 0)) | |
2027 | 2016 | then throw("You have to use own Medical Kit") | |
2028 | 2017 | else { | |
2029 | - | let | |
2030 | - | let | |
2031 | - | then split(value( | |
2018 | + | let je = getString(bL, bc()) | |
2019 | + | let jf = if (isDefined(je)) | |
2020 | + | then split(value(je), "_") | |
2032 | 2021 | else nil | |
2033 | - | let | |
2034 | - | then parseIntValue( | |
2022 | + | let jg = if ((size(jf) > 0)) | |
2023 | + | then parseIntValue(jf[0]) | |
2035 | 2024 | else 0 | |
2036 | - | if ((0 >= | |
2025 | + | if ((0 >= jg)) | |
2037 | 2026 | then throw("There are no Medical Kits L1 at Emergency Service storage") | |
2038 | 2027 | else { | |
2039 | - | let | |
2040 | - | let | |
2041 | - | let | |
2042 | - | let | |
2043 | - | let | |
2044 | - | if (( | |
2045 | - | then throw(("Payment attached should be " + toString( | |
2028 | + | let ja = (iV + cg[0]) | |
2029 | + | let jh = makeString([toString((jg - 1)), removeByIndex(jf, 0)], "_") | |
2030 | + | let bg = split(ak[0], "_") | |
2031 | + | let ji = bf(bg) | |
2032 | + | let jj = fraction((ji * ag), af, (10 * ao)) | |
2033 | + | if ((iD.amount != jj)) | |
2034 | + | then throw(("Payment attached should be " + toString(jj))) | |
2046 | 2035 | else { | |
2047 | - | let | |
2048 | - | $Tuple2(([IntegerEntry( | |
2036 | + | let dl = bV(invoke(bL, "updateEsStorage", [jh], [AttachedPayment(bj, jj)])) | |
2037 | + | $Tuple2(([IntegerEntry(gF, ja), iC] ++ hI(r, D)._1), dl) | |
2049 | 2038 | } | |
2050 | 2039 | } | |
2051 | 2040 | } | |
2056 | 2045 | ||
2057 | 2046 | ||
2058 | 2047 | ||
2059 | - | @Callable( | |
2060 | - | func updateBackpack ( | |
2048 | + | @Callable(ev) | |
2049 | + | func updateBackpack (r,jk) = if ((ev.caller != bL)) | |
2061 | 2050 | then throw("permission denied") | |
2062 | - | else $Tuple2([StringEntry( | |
2063 | - | ||
2064 | - | ||
2065 | - | ||
2066 | - | @Callable( | |
2051 | + | else $Tuple2([StringEntry(aX(r), jk)], jk) | |
2052 | + | ||
2053 | + | ||
2054 | + | ||
2055 | + | @Callable(ev) | |
2067 | 2056 | func buySLand () = { | |
2068 | - | let | |
2069 | - | if ((size( | |
2057 | + | let iC = iz(ev) | |
2058 | + | if ((size(ev.payments) != 1)) | |
2070 | 2059 | then throw("Exactly one payment required") | |
2071 | 2060 | else { | |
2072 | - | let | |
2073 | - | if (( | |
2061 | + | let iD = value(ev.payments[0]) | |
2062 | + | if ((iD.assetId != bj)) | |
2074 | 2063 | then throw("Allowed USDT payment only!") | |
2075 | - | else if (( | |
2076 | - | then throw(("Payment attached should be " + toString( | |
2064 | + | else if ((iD.amount != cm)) | |
2065 | + | then throw(("Payment attached should be " + toString(cm))) | |
2077 | 2066 | else { | |
2078 | - | let | |
2079 | - | $Tuple2(((( | |
2067 | + | let dl = gl(ev.caller, ev.transactionId) | |
2068 | + | $Tuple2((((dl._1 :+ ScriptTransfer(bL, iD.amount, bj)) ++ hO(toString(ev.caller), F)._1) :+ iC), dl._2._1) | |
2080 | 2069 | } | |
2081 | 2070 | } | |
2082 | 2071 | } | |
2083 | 2072 | ||
2084 | 2073 | ||
2085 | 2074 | ||
2086 | - | @Callable( | |
2087 | - | func expedition ( | |
2088 | - | let | |
2089 | - | if ((size( | |
2075 | + | @Callable(ev) | |
2076 | + | func expedition (gu,gv) = { | |
2077 | + | let iC = iz(ev) | |
2078 | + | if ((size(ev.payments) != 0)) | |
2090 | 2079 | then throw("No payments required") | |
2091 | 2080 | else { | |
2092 | - | let | |
2093 | - | let | |
2094 | - | $Tuple2((( | |
2095 | - | } | |
2096 | - | } | |
2097 | - | ||
2098 | - | ||
2099 | - | ||
2100 | - | @Callable( | |
2101 | - | func upgradeInfra ( | |
2102 | - | let | |
2103 | - | if ((size( | |
2081 | + | let dl = gL(ev.caller, ev.transactionId, gu, gv) | |
2082 | + | let r = valueOrErrorMessage(getString(aW(toString(ev.caller))), "You don't have a duck staked") | |
2083 | + | $Tuple2(((dl._1 ++ hI(r, F)._1) :+ iC), $Tuple2(dl._2, dl._3)) | |
2084 | + | } | |
2085 | + | } | |
2086 | + | ||
2087 | + | ||
2088 | + | ||
2089 | + | @Callable(ev) | |
2090 | + | func upgradeInfra (aO) = { | |
2091 | + | let iC = iz(ev) | |
2092 | + | if ((size(ev.payments) != 0)) | |
2104 | 2093 | then throw("No payments required") | |
2105 | 2094 | else { | |
2106 | - | let | |
2107 | - | let | |
2108 | - | $Tuple2((( | |
2109 | - | } | |
2110 | - | } | |
2111 | - | ||
2112 | - | ||
2113 | - | ||
2114 | - | @Callable( | |
2115 | - | func upgradeInfraUsdt ( | |
2095 | + | let dl = hw(true, ev.caller, 0, aO) | |
2096 | + | let r = valueOrErrorMessage(getString(aW(toString(ev.caller))), "You don't have a duck staked") | |
2097 | + | $Tuple2(((dl._1 :+ iC) ++ hI(r, fraction(G, dl._3, bq))._1), dl._2) | |
2098 | + | } | |
2099 | + | } | |
2100 | + | ||
2101 | + | ||
2102 | + | ||
2103 | + | @Callable(ev) | |
2104 | + | func upgradeInfraUsdt (aO) = if ((ev.caller != this)) | |
2116 | 2105 | then throw("Permission denied") | |
2117 | 2106 | else { | |
2118 | - | let | |
2119 | - | if ((size( | |
2107 | + | let iC = iz(ev) | |
2108 | + | if ((size(ev.payments) != 1)) | |
2120 | 2109 | then throw("Exactly one payment required") | |
2121 | 2110 | else { | |
2122 | - | let | |
2123 | - | if (( | |
2111 | + | let iD = value(ev.payments[0]) | |
2112 | + | if ((iD.assetId != bj)) | |
2124 | 2113 | then throw("Allowed USDT payment only!") | |
2125 | 2114 | else { | |
2126 | - | let | |
2127 | - | $Tuple2((( | |
2115 | + | let dl = hw(false, ev.caller, iD.amount, aO) | |
2116 | + | $Tuple2(((dl._1 :+ ScriptTransfer(bL, iD.amount, bj)) :+ iC), dl._2) | |
2128 | 2117 | } | |
2129 | 2118 | } | |
2130 | 2119 | } | |
2131 | 2120 | ||
2132 | 2121 | ||
2133 | 2122 | ||
2134 | - | @Callable( | |
2135 | - | func activateArtifact ( | |
2136 | - | let | |
2137 | - | if ((size( | |
2123 | + | @Callable(ev) | |
2124 | + | func activateArtifact (jl,jm) = { | |
2125 | + | let iC = iz(ev) | |
2126 | + | if ((size(ev.payments) != 0)) | |
2138 | 2127 | then throw("No payments required") | |
2139 | 2128 | else { | |
2140 | - | let b = toString( | |
2141 | - | let | |
2142 | - | let | |
2143 | - | if (("PRESALE" == | |
2144 | - | then | |
2145 | - | else if (("ONBOARD" == | |
2146 | - | then | |
2129 | + | let b = toString(ev.caller) | |
2130 | + | let dl = { | |
2131 | + | let bk = jl | |
2132 | + | if (("PRESALE" == bk)) | |
2133 | + | then hW(b, jm) | |
2134 | + | else if (("ONBOARD" == bk)) | |
2135 | + | then hP(b) | |
2147 | 2136 | else throw("Unknown artifact") | |
2148 | 2137 | } | |
2149 | - | ( | |
2150 | - | } | |
2151 | - | } | |
2152 | - | ||
2153 | - | ||
2154 | - | ||
2155 | - | @Callable( | |
2156 | - | func mergeLands ( | |
2157 | - | let | |
2158 | - | if ((size( | |
2138 | + | (dl :+ iC) | |
2139 | + | } | |
2140 | + | } | |
2141 | + | ||
2142 | + | ||
2143 | + | ||
2144 | + | @Callable(ev) | |
2145 | + | func mergeLands (ib) = { | |
2146 | + | let iC = iz(ev) | |
2147 | + | if ((size(ev.payments) != 0)) | |
2159 | 2148 | then throw("No payments required") | |
2160 | 2149 | else { | |
2161 | - | let | |
2162 | - | $Tuple2((( | |
2163 | - | } | |
2164 | - | } | |
2165 | - | ||
2166 | - | ||
2167 | - | ||
2168 | - | @Callable( | |
2169 | - | func mergeLandsUsdt ( | |
2170 | - | let | |
2171 | - | if ((size( | |
2150 | + | let dl = ix(true, toString(ev.caller), 0, ib, ev.transactionId) | |
2151 | + | $Tuple2(((dl._1 :+ iC) ++ hO(toString(ev.caller), H)._1), dl._2) | |
2152 | + | } | |
2153 | + | } | |
2154 | + | ||
2155 | + | ||
2156 | + | ||
2157 | + | @Callable(ev) | |
2158 | + | func mergeLandsUsdt (ib) = { | |
2159 | + | let iC = iz(ev) | |
2160 | + | if ((size(ev.payments) != 1)) | |
2172 | 2161 | then throw("Exactly one payment required") | |
2173 | 2162 | else { | |
2174 | - | let | |
2175 | - | if (( | |
2163 | + | let iD = value(ev.payments[0]) | |
2164 | + | if ((iD.assetId != bj)) | |
2176 | 2165 | then throw("Allowed USDT payment only!") | |
2177 | 2166 | else { | |
2178 | - | let | |
2179 | - | $Tuple2((( | |
2167 | + | let dl = ix(false, toString(ev.caller), iD.amount, ib, ev.transactionId) | |
2168 | + | $Tuple2(((dl._1 :+ ScriptTransfer(bL, iD.amount, bj)) :+ iC), dl._2) | |
2180 | 2169 | } | |
2181 | 2170 | } | |
2182 | 2171 | } | |
2183 | 2172 | ||
2184 | 2173 | ||
2185 | 2174 | ||
2186 | - | @Callable( | |
2187 | - | func cargoExchange ( | |
2188 | - | let | |
2189 | - | if ((size( | |
2175 | + | @Callable(ev) | |
2176 | + | func cargoExchange (jn,aO) = { | |
2177 | + | let iC = iz(ev) | |
2178 | + | if ((size(ev.payments) != 0)) | |
2190 | 2179 | then throw("No payments required") | |
2191 | 2180 | else { | |
2192 | - | let | |
2193 | - | let b = toString( | |
2194 | - | let | |
2195 | - | let | |
2196 | - | if (!(isDefined(getInteger( | |
2197 | - | then throw(( | |
2181 | + | let fP = split_4C(jn, ":") | |
2182 | + | let b = toString(ev.originCaller) | |
2183 | + | let he = value(assetInfo(fromBase58String(aO))) | |
2184 | + | let hf = aG(aO) | |
2185 | + | if (!(isDefined(getInteger(hf)))) | |
2186 | + | then throw((he.name + " is not staked")) | |
2198 | 2187 | else { | |
2199 | - | let | |
2200 | - | if (( | |
2201 | - | then throw(( | |
2188 | + | let hh = valueOrErrorMessage(getString(aD(aO)), (("NFT " + he.name) + " is orphaned")) | |
2189 | + | if ((hh != b)) | |
2190 | + | then throw((X + " is not yours")) | |
2202 | 2191 | else { | |
2203 | - | let | |
2204 | - | let | |
2205 | - | let | |
2206 | - | let | |
2207 | - | let | |
2208 | - | if (( | |
2209 | - | then throw((("Duck location type is " + | |
2210 | - | else if (( | |
2211 | - | then throw(("Duck should be on the land " + | |
2192 | + | let fy = (ca(split(he.description, "_")[bP]) / br) | |
2193 | + | let fz = valueOrElse(getInteger(aH(aO)), 0) | |
2194 | + | let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked") | |
2195 | + | let hb = valueOrElse(getString(aY(r)), ae) | |
2196 | + | let hc = split(value(hb), "_") | |
2197 | + | if ((hc[bd] != "L")) | |
2198 | + | then throw((("Duck location type is " + hc[bd]) + ", but should be L")) | |
2199 | + | else if ((hc[be] != aO)) | |
2200 | + | then throw(("Duck should be on the land " + aO)) | |
2212 | 2201 | else { | |
2213 | - | let | |
2214 | - | let | |
2215 | - | let | |
2216 | - | let | |
2217 | - | let | |
2218 | - | let | |
2219 | - | let | |
2220 | - | let | |
2221 | - | [StringEntry( | |
2202 | + | let fx = aN(aO) | |
2203 | + | let fj = fw(fx, fy, fz) | |
2204 | + | let fe = aX(r) | |
2205 | + | let fQ = fd(fe) | |
2206 | + | let dl = fO(fP, fj, fQ) | |
2207 | + | let fF = split(fj[at], "_") | |
2208 | + | let ht = (parseIntValue(fF[av]) + dl._7) | |
2209 | + | let hu = (parseIntValue(fF[aw]) - dl._7) | |
2210 | + | [StringEntry(fe, makeString_2C([fQ[ay], dl._4, dl._5, dl._6], ":")), StringEntry(fx, makeString_2C([fj[ap], dl._1, dl._2, dl._3, makeString([fF[au], toString(ht), toString(hu), fF[ax]], "_")], ":")), iC] | |
2222 | 2211 | } | |
2223 | 2212 | } | |
2224 | 2213 | } | |
2227 | 2216 | ||
2228 | 2217 | ||
2229 | 2218 | ||
2230 | - | @Callable( | |
2231 | - | func saveWarehouse ( | |
2219 | + | @Callable(ev) | |
2220 | + | func saveWarehouse (fB,aO) = if ((ev.caller != bL)) | |
2232 | 2221 | then throw("Access denied") | |
2233 | 2222 | else { | |
2234 | - | let | |
2235 | - | let | |
2236 | - | if ((size( | |
2223 | + | let fx = aN(aO) | |
2224 | + | let fC = split_4C(fB, ":") | |
2225 | + | if ((size(fC) != 5)) | |
2237 | 2226 | then throw("warehouse string should contain 4 ':' separators") | |
2238 | 2227 | else { | |
2239 | - | let | |
2240 | - | let | |
2241 | - | let | |
2242 | - | let | |
2243 | - | let | |
2244 | - | $Tuple2([StringEntry( | |
2228 | + | let jo = split(fC[at], "_")[au] | |
2229 | + | let ht = fi(fC) | |
2230 | + | let jp = fg(fC[ap]) | |
2231 | + | let hu = ((jp - parseIntValue(jo)) - ht) | |
2232 | + | let jq = makeString_2C([fC[ap], fC[aq], fC[ar], fC[as], makeString([jo, toString(ht), toString(hu), toString(jp)], "_")], ":") | |
2233 | + | $Tuple2([StringEntry(fx, jq)], jq) | |
2245 | 2234 | } | |
2246 | 2235 | } | |
2247 | 2236 | ||
2248 | 2237 | ||
2249 | 2238 | ||
2250 | - | @Callable( | |
2251 | - | func fixWarehouseFormat ( | |
2239 | + | @Callable(ev) | |
2240 | + | func fixWarehouseFormat (aO) = if ((ev.caller != bK)) | |
2252 | 2241 | then throw("Access denied") | |
2253 | 2242 | else { | |
2254 | - | let | |
2255 | - | let | |
2256 | - | let | |
2257 | - | let | |
2258 | - | let | |
2259 | - | let | |
2260 | - | let | |
2261 | - | let | |
2262 | - | let | |
2263 | - | let | |
2264 | - | $Tuple2([StringEntry( | |
2265 | - | } | |
2266 | - | ||
2267 | - | ||
2268 | - | ||
2269 | - | @Callable( | |
2270 | - | func fixStakedPieces ( | |
2243 | + | let fx = aN(aO) | |
2244 | + | let he = value(assetInfo(fromBase58String(aO))) | |
2245 | + | let fy = (ca(split(he.description, "_")[bP]) / br) | |
2246 | + | let fz = valueOrElse(getInteger(aH(aO)), 0) | |
2247 | + | let fC = fw(fx, fy, fz) | |
2248 | + | let jo = bY(invoke(bL, "recalcLockedVolumeREADONLY", [aO, fC], nil)) | |
2249 | + | let ht = fi(fC) | |
2250 | + | let jp = fg(fC[ap]) | |
2251 | + | let hu = ((jp - jo) - ht) | |
2252 | + | let jq = makeString_2C([fC[ap], fC[aq], fC[ar], fC[as], makeString([toString(jo), toString(ht), toString(hu), toString(jp)], "_")], ":") | |
2253 | + | $Tuple2([StringEntry(fx, jq)], jq) | |
2254 | + | } | |
2255 | + | ||
2256 | + | ||
2257 | + | ||
2258 | + | @Callable(ev) | |
2259 | + | func fixStakedPieces (bx) = if ((ev.caller != bK)) | |
2271 | 2260 | then throw("Access denied") | |
2272 | 2261 | else { | |
2273 | - | let | |
2262 | + | let is = if ((bx == "")) | |
2274 | 2263 | then 0 | |
2275 | 2264 | else { | |
2276 | - | let | |
2277 | - | let | |
2278 | - | then split_51C(value( | |
2265 | + | let in = getString(T, bT(bx)) | |
2266 | + | let ii = if (isDefined(in)) | |
2267 | + | then split_51C(value(in), "_") | |
2279 | 2268 | else nil | |
2280 | - | func | |
2281 | - | let | |
2282 | - | let | |
2283 | - | ( | |
2269 | + | func jr (cT,aO) = { | |
2270 | + | let he = value(assetInfo(fromBase58String(aO))) | |
2271 | + | let cb = split(he.description, "_")[bP] | |
2272 | + | (cT + ca(cb)) | |
2284 | 2273 | } | |
2285 | 2274 | ||
2286 | - | let | |
2287 | - | let | |
2288 | - | let | |
2289 | - | func | |
2290 | - | then | |
2291 | - | else | |
2292 | - | ||
2293 | - | func | |
2294 | - | then | |
2275 | + | let cV = ii | |
2276 | + | let cW = size(cV) | |
2277 | + | let cX = 0 | |
2278 | + | func cY (cZ,da) = if ((da >= cW)) | |
2279 | + | then cZ | |
2280 | + | else jr(cZ, cV[da]) | |
2281 | + | ||
2282 | + | func db (cZ,da) = if ((da >= cW)) | |
2283 | + | then cZ | |
2295 | 2284 | else throw("List size exceeds 100") | |
2296 | 2285 | ||
2297 | - | | |
2286 | + | db(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100) | |
2298 | 2287 | } | |
2299 | - | $Tuple2([IntegerEntry( | |
2300 | - | } | |
2301 | - | ||
2302 | - | ||
2303 | - | ||
2304 | - | @Callable( | |
2305 | - | func setCustomName ( | |
2306 | - | let | |
2307 | - | if ((size( | |
2288 | + | $Tuple2([IntegerEntry(bU(bx), is)], is) | |
2289 | + | } | |
2290 | + | ||
2291 | + | ||
2292 | + | ||
2293 | + | @Callable(ev) | |
2294 | + | func setCustomName (aE,ik,aJ) = { | |
2295 | + | let iC = iz(ev) | |
2296 | + | if ((size(ev.payments) != 1)) | |
2308 | 2297 | then throw("Exactly one payment required") | |
2309 | 2298 | else { | |
2310 | - | let | |
2311 | - | if (( | |
2299 | + | let iD = value(ev.payments[0]) | |
2300 | + | if ((iD.assetId != bj)) | |
2312 | 2301 | then throw("Allowed USDT payment only!") | |
2313 | - | else if (( | |
2314 | - | then throw(("Payment should be " + toString( | |
2315 | - | else if (contains( | |
2316 | - | then throw(("Name should not contain '__': " + | |
2317 | - | else if ((size( | |
2318 | - | then throw(("Name too long, maxLength=" + toString( | |
2302 | + | else if ((iD.amount != ci)) | |
2303 | + | then throw(("Payment should be " + toString(ci))) | |
2304 | + | else if (contains(ik, "__")) | |
2305 | + | then throw(("Name should not contain '__': " + ik)) | |
2306 | + | else if ((size(ik) > cj)) | |
2307 | + | then throw(("Name too long, maxLength=" + toString(cj))) | |
2319 | 2308 | else { | |
2320 | - | let b = toString( | |
2321 | - | let | |
2322 | - | let | |
2323 | - | if (("ACCOUNT" == | |
2309 | + | let b = toString(ev.originCaller) | |
2310 | + | let js = { | |
2311 | + | let bk = aJ | |
2312 | + | if (("ACCOUNT" == bk)) | |
2324 | 2313 | then { | |
2325 | - | let | |
2326 | - | let | |
2327 | - | if (isDefined( | |
2328 | - | then throw(("Name already registered: " + | |
2314 | + | let jt = cD(ik) | |
2315 | + | let ju = getString(jt) | |
2316 | + | if (isDefined(ju)) | |
2317 | + | then throw(("Name already registered: " + ik)) | |
2329 | 2318 | else { | |
2330 | - | let | |
2331 | - | let | |
2332 | - | let | |
2333 | - | then [DeleteEntry( | |
2319 | + | let jv = aQ(b) | |
2320 | + | let jw = getString(jv) | |
2321 | + | let jx = if (isDefined(jw)) | |
2322 | + | then [DeleteEntry(cD(value(jw)))] | |
2334 | 2323 | else nil | |
2335 | - | ((( | |
2324 | + | (((jx :+ StringEntry(jv, ik)) :+ StringEntry(jt, b)) ++ hO(b, E)._1) | |
2336 | 2325 | } | |
2337 | 2326 | } | |
2338 | - | else if (("LAND" == | |
2327 | + | else if (("LAND" == bk)) | |
2339 | 2328 | then { | |
2340 | - | let | |
2341 | - | let | |
2342 | - | if (!(isDefined(getInteger( | |
2343 | - | then throw(( | |
2329 | + | let he = value(assetInfo(fromBase58String(aE))) | |
2330 | + | let hf = aG(aE) | |
2331 | + | if (!(isDefined(getInteger(hf)))) | |
2332 | + | then throw((he.name + " is not staked")) | |
2344 | 2333 | else { | |
2345 | - | let | |
2346 | - | if (( | |
2347 | - | then throw(( | |
2334 | + | let hh = valueOrErrorMessage(getString(aD(aE)), (("NFT " + he.name) + " is orphaned")) | |
2335 | + | if ((hh != b)) | |
2336 | + | then throw((X + " is not yours")) | |
2348 | 2337 | else { | |
2349 | - | let | |
2350 | - | let | |
2351 | - | if (isDefined( | |
2352 | - | then throw(("Name already registered: " + | |
2338 | + | let jt = cx(ik) | |
2339 | + | let ju = getString(jt) | |
2340 | + | if (isDefined(ju)) | |
2341 | + | then throw(("Name already registered: " + ik)) | |
2353 | 2342 | else { | |
2354 | - | let | |
2355 | - | let | |
2356 | - | let | |
2357 | - | then [DeleteEntry( | |
2343 | + | let jy = aF(aE) | |
2344 | + | let jw = getString(jy) | |
2345 | + | let jx = if (isDefined(jw)) | |
2346 | + | then [DeleteEntry(cx(value(jw)))] | |
2358 | 2347 | else nil | |
2359 | - | ((( | |
2348 | + | (((jx :+ StringEntry(jy, ik)) :+ StringEntry(jt, aE)) ++ hO(b, E)._1) | |
2360 | 2349 | } | |
2361 | 2350 | } | |
2362 | 2351 | } | |
2363 | 2352 | } | |
2364 | - | else if (("DUCK" == | |
2353 | + | else if (("DUCK" == bk)) | |
2365 | 2354 | then { | |
2366 | - | let | |
2367 | - | let | |
2368 | - | if (if (!(isDefined(getInteger( | |
2355 | + | let he = value(assetInfo(fromBase58String(aE))) | |
2356 | + | let hf = aG(aE) | |
2357 | + | if (if (!(isDefined(getInteger(hf)))) | |
2369 | 2358 | then true | |
2370 | - | else !(isDefined(getString( | |
2371 | - | then throw(( | |
2359 | + | else !(isDefined(getString(aW(b))))) | |
2360 | + | then throw((he.name + " is not staked")) | |
2372 | 2361 | else { | |
2373 | - | let | |
2374 | - | if (( | |
2375 | - | then throw(( | |
2362 | + | let hh = valueOrErrorMessage(getString(aV(aE)), (("NFT " + he.name) + " is orphaned")) | |
2363 | + | if ((hh != b)) | |
2364 | + | then throw((Y + " is not yours")) | |
2376 | 2365 | else { | |
2377 | - | let | |
2378 | - | let | |
2379 | - | if (isDefined( | |
2380 | - | then throw(("Name already registered: " + | |
2366 | + | let jt = cC(ik) | |
2367 | + | let ju = getString(jt) | |
2368 | + | if (isDefined(ju)) | |
2369 | + | then throw(("Name already registered: " + ik)) | |
2381 | 2370 | else { | |
2382 | - | let | |
2383 | - | let | |
2384 | - | let | |
2385 | - | then [DeleteEntry( | |
2371 | + | let jy = aP(aE) | |
2372 | + | let jw = getString(jy) | |
2373 | + | let jx = if (isDefined(jw)) | |
2374 | + | then [DeleteEntry(cC(value(jw)))] | |
2386 | 2375 | else nil | |
2387 | - | ((( | |
2376 | + | (((jx :+ StringEntry(jy, ik)) :+ StringEntry(jt, aE)) ++ hI(aE, E)._1) | |
2388 | 2377 | } | |
2389 | 2378 | } | |
2390 | 2379 | } | |
2391 | 2380 | } | |
2392 | 2381 | else throw("Unknown entity type") | |
2393 | 2382 | } | |
2394 | - | $Tuple2((( | |
2383 | + | $Tuple2(((js :+ ScriptTransfer(bL, iD.amount, bj)) :+ iC), 0) | |
2395 | 2384 | } | |
2396 | 2385 | } | |
2397 | 2386 | } | |
2398 | 2387 | ||
2399 | 2388 | ||
2400 | 2389 | ||
2401 | - | @Callable( | |
2402 | - | func setReferrals ( | |
2390 | + | @Callable(ev) | |
2391 | + | func setReferrals (jz,jA) = if ((ev.callerPublicKey != cf)) | |
2403 | 2392 | then throw("Permission denied") | |
2404 | 2393 | else { | |
2405 | - | let | |
2406 | - | if ((size( | |
2394 | + | let iC = iz(ev) | |
2395 | + | if ((size(ev.payments) != 0)) | |
2407 | 2396 | then throw("No payments required") | |
2408 | - | else if (!(isDefined(addressFromString( | |
2409 | - | then throw(("Invalid address: " + | |
2410 | - | else if (!(isDefined(addressFromString( | |
2411 | - | then throw(("Invalid address: " + | |
2397 | + | else if (!(isDefined(addressFromString(jz)))) | |
2398 | + | then throw(("Invalid address: " + jz)) | |
2399 | + | else if (!(isDefined(addressFromString(jA)))) | |
2400 | + | then throw(("Invalid address: " + jA)) | |
2412 | 2401 | else { | |
2413 | - | let | |
2414 | - | let | |
2415 | - | let | |
2416 | - | then split_4C(value( | |
2402 | + | let jB = cE() | |
2403 | + | let jC = getString(jB) | |
2404 | + | let jD = if (isDefined(jC)) | |
2405 | + | then split_4C(value(jC), "_") | |
2417 | 2406 | else nil | |
2418 | - | if (containsElement( | |
2419 | - | then throw(( | |
2407 | + | if (containsElement(jD, jA)) | |
2408 | + | then throw((jA + " is not newbie (already has referrals)")) | |
2420 | 2409 | else { | |
2421 | - | let | |
2422 | - | let | |
2423 | - | if (if (isDefined( | |
2424 | - | then isDefined(addressFromString(value( | |
2410 | + | let hQ = aR(jA) | |
2411 | + | let hR = getString(hQ) | |
2412 | + | if (if (isDefined(hR)) | |
2413 | + | then isDefined(addressFromString(value(hR))) | |
2425 | 2414 | else false) | |
2426 | - | then throw((( | |
2415 | + | then throw(((jA + " already has refBy: ") + value(hR))) | |
2427 | 2416 | else { | |
2428 | - | let | |
2429 | - | let | |
2430 | - | let | |
2431 | - | then split_4C(value( | |
2417 | + | let jE = aU(jz) | |
2418 | + | let jF = getString(jE) | |
2419 | + | let jG = if (isDefined(jF)) | |
2420 | + | then split_4C(value(jF), "_") | |
2432 | 2421 | else nil | |
2433 | - | if (containsElement( | |
2434 | - | then throw(((( | |
2422 | + | if (containsElement(jG, jA)) | |
2423 | + | then throw((((jz + " already contains ") + jA) + " within referrals")) | |
2435 | 2424 | else { | |
2436 | - | let | |
2437 | - | let | |
2438 | - | then value( | |
2439 | - | else makeString_2C(( | |
2440 | - | $Tuple2([StringEntry( | |
2425 | + | let jH = makeString_2C((jG :+ jA), "_") | |
2426 | + | let jI = if (containsElement(jD, jz)) | |
2427 | + | then value(jC) | |
2428 | + | else makeString_2C((jD :+ jz), "_") | |
2429 | + | $Tuple2([StringEntry(hQ, jz), StringEntry(jE, jH), StringEntry(jB, jI), iC], 0) | |
2441 | 2430 | } | |
2442 | 2431 | } | |
2443 | 2432 | } | |
2446 | 2435 | ||
2447 | 2436 | ||
2448 | 2437 | ||
2449 | - | @Callable( | |
2450 | - | func distributePoints ( | |
2451 | - | let | |
2452 | - | if ((size( | |
2438 | + | @Callable(ev) | |
2439 | + | func distributePoints (jJ,jK,jL,jM,jN) = { | |
2440 | + | let iC = iz(ev) | |
2441 | + | if ((size(ev.payments) != 0)) | |
2453 | 2442 | then throw("No payments required") | |
2454 | 2443 | else { | |
2455 | - | let b = toString( | |
2456 | - | let | |
2457 | - | let | |
2458 | - | let | |
2459 | - | let | |
2460 | - | let | |
2461 | - | let | |
2462 | - | let | |
2463 | - | if (( | |
2464 | - | then throw((("There are only " + toString( | |
2444 | + | let b = toString(ev.originCaller) | |
2445 | + | let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked") | |
2446 | + | let jO = z(b) | |
2447 | + | let jP = valueOrElse(getInteger(T, jO), 0) | |
2448 | + | let jQ = v(r) | |
2449 | + | let jR = valueOrElse(getInteger(T, jQ), 0) | |
2450 | + | let jS = (jP + jR) | |
2451 | + | let jT = ((((jJ + jK) + jL) + jM) + jN) | |
2452 | + | if ((jT > jS)) | |
2453 | + | then throw((("There are only " + toString(jS)) + " free points to distribute")) | |
2465 | 2454 | else { | |
2466 | - | let | |
2467 | - | let | |
2468 | - | let | |
2469 | - | $Tuple2([IntegerEntry( | |
2455 | + | let jU = s(r) | |
2456 | + | let U = split(valueOrElse(getString(T, jU), "0_0_0_0_0"), "_") | |
2457 | + | let jV = (jP - jT) | |
2458 | + | $Tuple2([IntegerEntry(jO, if ((0 > jV)) | |
2470 | 2459 | then 0 | |
2471 | - | else | |
2472 | - | then ( | |
2473 | - | else | |
2460 | + | else jV), IntegerEntry(jQ, if ((0 > jV)) | |
2461 | + | then (jR + jV) | |
2462 | + | else jR), StringEntry(jU, makeString([toString((parseIntValue(U[h]) + jJ)), toString((parseIntValue(U[i]) + jK)), toString((parseIntValue(U[j]) + jL)), toString((parseIntValue(U[k]) + jM)), toString((parseIntValue(U[l]) + jN))], "_")), iC], 0) | |
2474 | 2463 | } | |
2475 | 2464 | } | |
2476 | 2465 | } | |
2477 | 2466 | ||
2478 | 2467 | ||
2479 | 2468 | ||
2480 | - | @Callable( | |
2481 | - | func splitByGlobalWeightsREADONLY ( | |
2482 | - | ||
2483 | - | ||
2484 | - | ||
2485 | - | @Callable( | |
2486 | - | func splitByGlobalAndLocalWeightsREADONLY ( | |
2487 | - | let | |
2488 | - | $Tuple2(nil, $Tuple2( | |
2489 | - | } | |
2490 | - | ||
2491 | - | ||
2492 | - | ||
2493 | - | @Callable( | |
2494 | - | func getBackpackREADONLY ( | |
2495 | - | ||
2496 | - | ||
2497 | - | ||
2498 | - | @Callable( | |
2499 | - | func getWarehouseREADONLY ( | |
2500 | - | let | |
2501 | - | let | |
2502 | - | let | |
2503 | - | $Tuple2(nil, makeString_2C( | |
2504 | - | } | |
2505 | - | ||
2506 | - | ||
2507 | - | ||
2508 | - | @Callable( | |
2509 | - | func saveLastTx () = if (if (( | |
2510 | - | then ( | |
2469 | + | @Callable(ev) | |
2470 | + | func splitByGlobalWeightsREADONLY (fM) = $Tuple2(nil, dc(fM)) | |
2471 | + | ||
2472 | + | ||
2473 | + | ||
2474 | + | @Callable(ev) | |
2475 | + | func splitByGlobalAndLocalWeightsREADONLY (jW,jX,ey) = { | |
2476 | + | let er = ex(ey) | |
2477 | + | $Tuple2(nil, $Tuple2(dc(jW), cN(jX, er))) | |
2478 | + | } | |
2479 | + | ||
2480 | + | ||
2481 | + | ||
2482 | + | @Callable(ev) | |
2483 | + | func getBackpackREADONLY (r) = $Tuple2(nil, makeString(fd(aX(r)), ":")) | |
2484 | + | ||
2485 | + | ||
2486 | + | ||
2487 | + | @Callable(ev) | |
2488 | + | func getWarehouseREADONLY (aO) = { | |
2489 | + | let he = value(assetInfo(fromBase58String(aO))) | |
2490 | + | let fy = (ca(split(he.description, "_")[bP]) / br) | |
2491 | + | let fz = valueOrElse(getInteger(aH(aO)), 0) | |
2492 | + | $Tuple2(nil, makeString_2C(fw(aN(aO), fy, fz), ":")) | |
2493 | + | } | |
2494 | + | ||
2495 | + | ||
2496 | + | ||
2497 | + | @Callable(ev) | |
2498 | + | func saveLastTx () = if (if ((ev.caller != bN)) | |
2499 | + | then (ev.caller != bL) | |
2511 | 2500 | else false) | |
2512 | 2501 | then throw("Access denied") | |
2513 | - | else $Tuple2([ | |
2514 | - | ||
2515 | - | ||
2516 | - | ||
2517 | - | @Callable( | |
2518 | - | func updateDuckStats ( | |
2502 | + | else $Tuple2([iz(ev)], 42) | |
2503 | + | ||
2504 | + | ||
2505 | + | ||
2506 | + | @Callable(ev) | |
2507 | + | func updateDuckStats (r,hJ) = if ((ev.caller != bL)) | |
2519 | 2508 | then throw("Access denied") | |
2520 | - | else | |
2521 | - | ||
2522 | - | ||
2523 | - | ||
2524 | - | @Callable( | |
2525 | - | func updateAccStats (b, | |
2509 | + | else hI(r, hJ) | |
2510 | + | ||
2511 | + | ||
2512 | + | ||
2513 | + | @Callable(ev) | |
2514 | + | func updateAccStats (b,hJ) = if ((ev.caller != bL)) | |
2526 | 2515 | then throw("Access denied") | |
2527 | - | else | |
2528 | - | ||
2529 | - | ||
2530 | - | ||
2531 | - | @Callable( | |
2532 | - | func equipDuck ( | |
2533 | - | let | |
2534 | - | if ((size( | |
2516 | + | else hO(b, hJ) | |
2517 | + | ||
2518 | + | ||
2519 | + | ||
2520 | + | @Callable(ev) | |
2521 | + | func equipDuck (jY) = { | |
2522 | + | let iC = iz(ev) | |
2523 | + | if ((size(ev.payments) != 0)) | |
2535 | 2524 | then throw("No payments required") | |
2536 | 2525 | else { | |
2537 | - | let b = toString( | |
2538 | - | let | |
2539 | - | let | |
2540 | - | let | |
2541 | - | let | |
2542 | - | let | |
2543 | - | let | |
2544 | - | if ((size( | |
2526 | + | let b = toString(ev.originCaller) | |
2527 | + | let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked") | |
2528 | + | let gO = w(r) | |
2529 | + | let jZ = split(valueOrElse(getString(gO), ",;,_,;,_,;,_,;,_,;,_,;,"), "_") | |
2530 | + | let fe = aX(r) | |
2531 | + | let fQ = fd(fe) | |
2532 | + | let gQ = split(jY, "_") | |
2533 | + | if ((size(gQ) != m)) | |
2545 | 2534 | then throw("Wrong equipment string") | |
2546 | 2535 | else { | |
2547 | - | let | |
2548 | - | let | |
2549 | - | let | |
2550 | - | let | |
2551 | - | $Tuple2([StringEntry( | |
2536 | + | let dK = S(this, r) | |
2537 | + | let ka = ei(jZ, dz(fQ[aB]), true, dK) | |
2538 | + | let kb = ei(gQ, ka, false, dK) | |
2539 | + | let kc = dE(kb) | |
2540 | + | $Tuple2([StringEntry(gO, jY), StringEntry(fe, makeString_2C([fQ[ay], fQ[az], fQ[aA], kc], ":")), iC], 0) | |
2552 | 2541 | } | |
2553 | 2542 | } | |
2554 | 2543 | } |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | func a (b) = ("lastArbTimeUser_" + b) | |
5 | 5 | ||
6 | 6 | ||
7 | 7 | let c = 100000000 | |
8 | 8 | ||
9 | 9 | let d = 3200 | |
10 | 10 | ||
11 | 11 | let e = 4000 | |
12 | 12 | ||
13 | 13 | let f = 3 | |
14 | 14 | ||
15 | 15 | let g = ["Strength", "Accuracy", "Intellect", "Endurance", "Dexterity", "Level", "Health"] | |
16 | 16 | ||
17 | 17 | let h = 0 | |
18 | 18 | ||
19 | 19 | let i = 1 | |
20 | 20 | ||
21 | 21 | let j = 2 | |
22 | 22 | ||
23 | 23 | let k = 3 | |
24 | 24 | ||
25 | 25 | let l = 4 | |
26 | 26 | ||
27 | 27 | let m = 6 | |
28 | 28 | ||
29 | 29 | let n = 2 | |
30 | 30 | ||
31 | 31 | let o = 2 | |
32 | 32 | ||
33 | - | ||
34 | - | ||
35 | - | ||
36 | - | ||
37 | - | ||
38 | - | ||
39 | - | ||
40 | - | ||
41 | - | ||
42 | - | ||
43 | - | ||
44 | - | ||
45 | - | ||
46 | - | ||
47 | - | ||
48 | - | ||
49 | - | ||
50 | - | ||
51 | - | ||
52 | - | ||
53 | - | ||
54 | - | ||
55 | - | ||
56 | - | ||
57 | - | ||
58 | - | ||
59 | - | ||
60 | - | ||
61 | - | ||
62 | - | let A = | |
63 | - | ||
64 | - | let B = | |
65 | - | ||
66 | - | let C = | |
67 | - | ||
68 | - | let D = | |
69 | - | ||
70 | - | let E = | |
71 | - | ||
72 | - | let F = | |
73 | - | ||
74 | - | let G = | |
33 | + | let p = 30 | |
34 | + | ||
35 | + | func q (r) = ("duckHealth_" + r) | |
36 | + | ||
37 | + | ||
38 | + | func s (r) = ("duckChars_" + r) | |
39 | + | ||
40 | + | ||
41 | + | func t (r) = ("duckXP_" + r) | |
42 | + | ||
43 | + | ||
44 | + | func u (r) = ("duckLevel_" + r) | |
45 | + | ||
46 | + | ||
47 | + | func v (r) = ("duckFreePoints_" + r) | |
48 | + | ||
49 | + | ||
50 | + | func w (r) = ("duckEquipment_" + r) | |
51 | + | ||
52 | + | ||
53 | + | func x (b) = ("userXP_" + b) | |
54 | + | ||
55 | + | ||
56 | + | func y (b) = ("userLevel_" + b) | |
57 | + | ||
58 | + | ||
59 | + | func z (b) = ("userFreePoints_" + b) | |
60 | + | ||
61 | + | ||
62 | + | let A = 100000 | |
63 | + | ||
64 | + | let B = 50000 | |
65 | + | ||
66 | + | let C = 10000 | |
67 | + | ||
68 | + | let D = 100000 | |
69 | + | ||
70 | + | let E = 5000000 | |
71 | + | ||
72 | + | let F = 50000000 | |
73 | + | ||
74 | + | let G = 100000 | |
75 | 75 | ||
76 | 76 | let H = 10000000 | |
77 | 77 | ||
78 | - | let I = | |
79 | - | ||
80 | - | ||
81 | - | ||
82 | - | ||
83 | - | ||
84 | - | ||
85 | - | ||
86 | - | ||
87 | - | ||
88 | - | ||
89 | - | | |
90 | - | ||
91 | - | ||
92 | - | ||
93 | - | ||
94 | - | ||
95 | - | let | |
96 | - | ||
97 | - | | |
98 | - | ||
99 | - | ||
100 | - | ||
101 | - | ||
102 | - | let X = " | |
103 | - | ||
104 | - | let Y = " | |
105 | - | ||
106 | - | let Z = | |
107 | - | ||
108 | - | let aa = | |
109 | - | ||
110 | - | let ab = | |
111 | - | ||
112 | - | let ac = | |
113 | - | ||
114 | - | let ad = | |
115 | - | ||
116 | - | let ae = | |
117 | - | ||
118 | - | let af = | |
119 | - | ||
120 | - | let ag = | |
121 | - | ||
122 | - | let ah = [" | |
123 | - | ||
124 | - | let ai = | |
125 | - | ||
126 | - | let aj = | |
127 | - | ||
128 | - | let ak = | |
129 | - | ||
130 | - | let al = | |
131 | - | ||
132 | - | let am = | |
78 | + | let I = 10000000 | |
79 | + | ||
80 | + | let J = 10000 | |
81 | + | ||
82 | + | func K (L) = fraction(d, pow(L, 4, e, 4, 4, DOWN), c) | |
83 | + | ||
84 | + | ||
85 | + | func M (N) = (100 + N) | |
86 | + | ||
87 | + | ||
88 | + | func O (P,Q) = { | |
89 | + | let R = K(Q) | |
90 | + | [R, (f * (R - P))] | |
91 | + | } | |
92 | + | ||
93 | + | ||
94 | + | func S (T,r) = { | |
95 | + | let U = split(valueOrElse(getString(T, s(r)), "0_0_0_0_0"), "_") | |
96 | + | let V = valueOrElse(getInteger(T, u(r)), 0) | |
97 | + | let W = valueOrElse(getInteger(T, q(r)), M(V)) | |
98 | + | [parseIntValue(U[h]), parseIntValue(U[i]), parseIntValue(U[j]), parseIntValue(U[k]), parseIntValue(U[l]), V, W] | |
99 | + | } | |
100 | + | ||
101 | + | ||
102 | + | let X = "LAND" | |
103 | + | ||
104 | + | let Y = "DUCK" | |
105 | + | ||
106 | + | let Z = "PRESALE" | |
107 | + | ||
108 | + | let aa = 6 | |
109 | + | ||
110 | + | let ab = 3456000 | |
111 | + | ||
112 | + | let ac = 86400000 | |
113 | + | ||
114 | + | let ad = 10000000000 | |
115 | + | ||
116 | + | let ae = "Africa_F_Africa" | |
117 | + | ||
118 | + | let af = 39637 | |
119 | + | ||
120 | + | let ag = 10 | |
121 | + | ||
122 | + | let ah = ["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"] | |
123 | + | ||
124 | + | let ai = ["Americas", "Europe", "Asia", "Africa", "Oceania"] | |
125 | + | ||
126 | + | let aj = 10000000 | |
127 | + | ||
128 | + | let ak = ["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_", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_", "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_30_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_50_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_70_0,0,0,0,0,0,0_201"] | |
129 | + | ||
130 | + | let al = 6 | |
131 | + | ||
132 | + | let am = 9 | |
133 | 133 | ||
134 | 134 | let an = 10 | |
135 | 135 | ||
136 | - | let ao = 0 | |
137 | - | ||
138 | - | let ap = 1 | |
139 | - | ||
140 | - | let aq = 2 | |
141 | - | ||
142 | - | let ar = 3 | |
143 | - | ||
144 | - | let as = 4 | |
145 | - | ||
146 | - | let at = 0 | |
147 | - | ||
148 | - | let au = 1 | |
149 | - | ||
150 | - | let av = 2 | |
151 | - | ||
152 | - | let aw = 3 | |
153 | - | ||
154 | - | let ax = 0 | |
155 | - | ||
156 | - | let ay = 1 | |
157 | - | ||
158 | - | let az = 2 | |
159 | - | ||
160 | - | let aA = 3 | |
161 | - | ||
162 | - | func aB (b) = ("lastTxIdByUser_" + b) | |
163 | - | ||
164 | - | ||
165 | - | func aC (aD) = ("nftOwner_" + aD) | |
166 | - | ||
167 | - | ||
168 | - | func aE (aD) = ("landCustomNameByAssetId_" + aD) | |
169 | - | ||
170 | - | ||
171 | - | func aF (aD) = ("stakedTime_" + aD) | |
172 | - | ||
173 | - | ||
174 | - | func aG (aD) = ("infraLevel_" + aD) | |
175 | - | ||
176 | - | ||
177 | - | func aH (aI,aD) = makeString(["landArtStatus", aI, aD], "_") | |
178 | - | ||
179 | - | ||
180 | - | func aJ (aK,aD,aL) = ((((("stakedTimeByTypeAssetIdAndOwner_" + aK) + "_") + aD) + "_") + aL) | |
181 | - | ||
182 | - | ||
183 | - | func aM (aN) = ("wareHouse_" + aN) | |
184 | - | ||
185 | - | ||
186 | - | func aO (aD) = ("duckCustomNameByAssetId_" + aD) | |
187 | - | ||
188 | - | ||
189 | - | func aP (b) = ("accountCustomNameByAddr_" + b) | |
190 | - | ||
191 | - | ||
192 | - | func aQ (b) = ("accRefBy_" + b) | |
193 | - | ||
194 | - | ||
195 | - | func aR (q) = ("onboardArtActivatedOnDuck_" + q) | |
196 | - | ||
197 | - | ||
198 | - | func aS (b) = ("onboardArtActivatedDuckBy_" + b) | |
199 | - | ||
200 | - | ||
201 | - | func aT (b) = ("accReferrals_" + b) | |
202 | - | ||
203 | - | ||
204 | - | func aU (aD) = ("duckOwner_" + aD) | |
205 | - | ||
206 | - | ||
207 | - | func aV (aL) = ("stakedDuckByOwner_" + aL) | |
208 | - | ||
209 | - | ||
210 | - | func aW (q) = ("backPack_" + q) | |
211 | - | ||
212 | - | ||
213 | - | func aX (q) = ("duckLocation_" + q) | |
214 | - | ||
215 | - | ||
216 | - | func aY () = "contractsBlocked" | |
217 | - | ||
218 | - | ||
219 | - | func aZ (ba) = ("%s%s__userGwlReleaseTime__" + ba) | |
220 | - | ||
221 | - | ||
222 | - | func bb () = "emergencyWarehouseProducts" | |
223 | - | ||
224 | - | ||
225 | - | let bc = 1 | |
226 | - | ||
227 | - | let bd = 2 | |
228 | - | ||
229 | - | func be (bf) = (parseIntValue(bf[ak]) * ai) | |
230 | - | ||
231 | - | ||
232 | - | let bg = true | |
233 | - | ||
234 | - | let bh = take(drop(this.bytes, 1), 1) | |
235 | - | ||
236 | - | let bi = { | |
237 | - | let bj = bh | |
238 | - | if ((base58'2W' == bj)) | |
136 | + | let ao = 10 | |
137 | + | ||
138 | + | let ap = 0 | |
139 | + | ||
140 | + | let aq = 1 | |
141 | + | ||
142 | + | let ar = 2 | |
143 | + | ||
144 | + | let as = 3 | |
145 | + | ||
146 | + | let at = 4 | |
147 | + | ||
148 | + | let au = 0 | |
149 | + | ||
150 | + | let av = 1 | |
151 | + | ||
152 | + | let aw = 2 | |
153 | + | ||
154 | + | let ax = 3 | |
155 | + | ||
156 | + | let ay = 0 | |
157 | + | ||
158 | + | let az = 1 | |
159 | + | ||
160 | + | let aA = 2 | |
161 | + | ||
162 | + | let aB = 3 | |
163 | + | ||
164 | + | func aC (b) = ("lastTxIdByUser_" + b) | |
165 | + | ||
166 | + | ||
167 | + | func aD (aE) = ("nftOwner_" + aE) | |
168 | + | ||
169 | + | ||
170 | + | func aF (aE) = ("landCustomNameByAssetId_" + aE) | |
171 | + | ||
172 | + | ||
173 | + | func aG (aE) = ("stakedTime_" + aE) | |
174 | + | ||
175 | + | ||
176 | + | func aH (aE) = ("infraLevel_" + aE) | |
177 | + | ||
178 | + | ||
179 | + | func aI (aJ,aE) = makeString(["landArtStatus", aJ, aE], "_") | |
180 | + | ||
181 | + | ||
182 | + | func aK (aL,aE,aM) = ((((("stakedTimeByTypeAssetIdAndOwner_" + aL) + "_") + aE) + "_") + aM) | |
183 | + | ||
184 | + | ||
185 | + | func aN (aO) = ("wareHouse_" + aO) | |
186 | + | ||
187 | + | ||
188 | + | func aP (aE) = ("duckCustomNameByAssetId_" + aE) | |
189 | + | ||
190 | + | ||
191 | + | func aQ (b) = ("accountCustomNameByAddr_" + b) | |
192 | + | ||
193 | + | ||
194 | + | func aR (b) = ("accRefBy_" + b) | |
195 | + | ||
196 | + | ||
197 | + | func aS (r) = ("onboardArtActivatedOnDuck_" + r) | |
198 | + | ||
199 | + | ||
200 | + | func aT (b) = ("onboardArtActivatedDuckBy_" + b) | |
201 | + | ||
202 | + | ||
203 | + | func aU (b) = ("accReferrals_" + b) | |
204 | + | ||
205 | + | ||
206 | + | func aV (aE) = ("duckOwner_" + aE) | |
207 | + | ||
208 | + | ||
209 | + | func aW (aM) = ("stakedDuckByOwner_" + aM) | |
210 | + | ||
211 | + | ||
212 | + | func aX (r) = ("backPack_" + r) | |
213 | + | ||
214 | + | ||
215 | + | func aY (r) = ("duckLocation_" + r) | |
216 | + | ||
217 | + | ||
218 | + | func aZ () = "contractsBlocked" | |
219 | + | ||
220 | + | ||
221 | + | func ba (bb) = ("%s%s__userGwlReleaseTime__" + bb) | |
222 | + | ||
223 | + | ||
224 | + | func bc () = "emergencyWarehouseProducts" | |
225 | + | ||
226 | + | ||
227 | + | let bd = 1 | |
228 | + | ||
229 | + | let be = 2 | |
230 | + | ||
231 | + | func bf (bg) = (parseIntValue(bg[al]) * aj) | |
232 | + | ||
233 | + | ||
234 | + | let bh = true | |
235 | + | ||
236 | + | let bi = take(drop(this.bytes, 1), 1) | |
237 | + | ||
238 | + | let bj = { | |
239 | + | let bk = bi | |
240 | + | if ((base58'2W' == bk)) | |
239 | 241 | then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi' | |
240 | - | else if ((base58'2T' == | |
242 | + | else if ((base58'2T' == bk)) | |
241 | 243 | then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63' | |
242 | 244 | else throw("Unknown chain") | |
243 | 245 | } | |
244 | 246 | ||
245 | - | let | |
246 | - | let | |
247 | - | if ((base58'2W' == | |
247 | + | let bl = { | |
248 | + | let bk = bi | |
249 | + | if ((base58'2W' == bk)) | |
248 | 250 | then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv" | |
249 | - | else if ((base58'2T' == | |
251 | + | else if ((base58'2T' == bk)) | |
250 | 252 | then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy" | |
251 | 253 | else throw("Unknown chain") | |
252 | 254 | } | |
253 | 255 | ||
254 | - | let | |
255 | - | let | |
256 | - | if ((base58'2W' == | |
256 | + | let bm = { | |
257 | + | let bk = bi | |
258 | + | if ((base58'2W' == bk)) | |
257 | 259 | then 10000000000 | |
258 | - | else if ((base58'2T' == | |
260 | + | else if ((base58'2T' == bk)) | |
259 | 261 | then 100000000 | |
260 | 262 | else throw("Unknown chain") | |
261 | 263 | } | |
262 | 264 | ||
263 | - | let | |
264 | - | let | |
265 | - | if ((base58'2W' == | |
265 | + | let bn = { | |
266 | + | let bk = bi | |
267 | + | if ((base58'2W' == bk)) | |
266 | 268 | then 600000 | |
267 | - | else if ((base58'2T' == | |
269 | + | else if ((base58'2T' == bk)) | |
268 | 270 | then 60000 | |
269 | 271 | else throw("Unknown chain") | |
270 | 272 | } | |
271 | 273 | ||
272 | - | let | |
273 | - | ||
274 | - | let | |
275 | - | ||
276 | - | let | |
277 | - | ||
278 | - | let | |
279 | - | ||
280 | - | let | |
281 | - | ||
282 | - | let | |
283 | - | ||
284 | - | let | |
285 | - | ||
286 | - | let | |
287 | - | ||
288 | - | func | |
289 | - | ||
290 | - | ||
291 | - | let | |
292 | - | ||
293 | - | let | |
294 | - | ||
295 | - | let | |
296 | - | ||
297 | - | let | |
298 | - | ||
299 | - | func | |
300 | - | ||
301 | - | ||
302 | - | func | |
303 | - | ||
304 | - | ||
305 | - | func | |
306 | - | ||
307 | - | ||
308 | - | func | |
309 | - | ||
310 | - | ||
311 | - | let | |
312 | - | ||
313 | - | let | |
314 | - | ||
315 | - | let | |
316 | - | ||
317 | - | let | |
318 | - | ||
319 | - | let | |
320 | - | ||
321 | - | let | |
322 | - | ||
323 | - | let | |
324 | - | ||
325 | - | let | |
326 | - | ||
327 | - | let | |
328 | - | ||
329 | - | let | |
330 | - | ||
331 | - | func | |
332 | - | ||
333 | - | ||
334 | - | func | |
335 | - | ||
336 | - | ||
337 | - | func | |
338 | - | ||
339 | - | ||
340 | - | func | |
341 | - | let | |
342 | - | if ($isInstanceOf( | |
274 | + | let bo = "__" | |
275 | + | ||
276 | + | let bp = 1000000 | |
277 | + | ||
278 | + | let bq = 100000000 | |
279 | + | ||
280 | + | let br = 25 | |
281 | + | ||
282 | + | let bs = 100 | |
283 | + | ||
284 | + | let bt = 225 | |
285 | + | ||
286 | + | let bu = 400 | |
287 | + | ||
288 | + | let bv = 625 | |
289 | + | ||
290 | + | func bw (bx,by) = valueOrErrorMessage(getString(bx, by), makeString(["mandatory ", toString(bx), ".", by, " is not defined"], "")) | |
291 | + | ||
292 | + | ||
293 | + | let bz = 1 | |
294 | + | ||
295 | + | let bA = 2 | |
296 | + | ||
297 | + | let bB = 3 | |
298 | + | ||
299 | + | let bC = 4 | |
300 | + | ||
301 | + | func bD () = "%s__restConfig" | |
302 | + | ||
303 | + | ||
304 | + | func bE () = "%s__restAddr" | |
305 | + | ||
306 | + | ||
307 | + | func bF (bG) = split_4C(bw(bG, bD()), bo) | |
308 | + | ||
309 | + | ||
310 | + | func bH (bI,bJ) = valueOrErrorMessage(addressFromString(bI[bJ]), ("Rest cfg doesn't contain address at index " + toString(bJ))) | |
311 | + | ||
312 | + | ||
313 | + | let bK = addressFromStringValue(valueOrElse(getString(this, bE()), bl)) | |
314 | + | ||
315 | + | let bI = bF(bK) | |
316 | + | ||
317 | + | let T = bH(bI, bz) | |
318 | + | ||
319 | + | let bL = bH(bI, bA) | |
320 | + | ||
321 | + | let bM = bH(bI, bB) | |
322 | + | ||
323 | + | let bN = bH(bI, bC) | |
324 | + | ||
325 | + | let bO = 0 | |
326 | + | ||
327 | + | let bP = 1 | |
328 | + | ||
329 | + | let bQ = 2 | |
330 | + | ||
331 | + | let bR = 3 | |
332 | + | ||
333 | + | func bS () = "resTypesProportions" | |
334 | + | ||
335 | + | ||
336 | + | func bT (aM) = ("stakedLandsByOwner_" + aM) | |
337 | + | ||
338 | + | ||
339 | + | func bU (aM) = ("stakedPiecesByOwner_" + aM) | |
340 | + | ||
341 | + | ||
342 | + | func bV (bW) = { | |
343 | + | let bk = bW | |
344 | + | if ($isInstanceOf(bk, "String")) | |
343 | 345 | then { | |
344 | - | let | |
345 | - | | |
346 | + | let bX = bk | |
347 | + | bX | |
346 | 348 | } | |
347 | 349 | else throw("fail to cast into String") | |
348 | 350 | } | |
349 | 351 | ||
350 | 352 | ||
351 | - | func | |
352 | - | let | |
353 | - | if ($isInstanceOf( | |
353 | + | func bY (bW) = { | |
354 | + | let bk = bW | |
355 | + | if ($isInstanceOf(bk, "Int")) | |
354 | 356 | then { | |
355 | - | let | |
356 | - | | |
357 | + | let bZ = bk | |
358 | + | bZ | |
357 | 359 | } | |
358 | 360 | else throw("fail to cast into Int") | |
359 | 361 | } | |
360 | 362 | ||
361 | 363 | ||
362 | - | func | |
363 | - | let | |
364 | - | if (("S" == | |
365 | - | then | |
366 | - | else if (("M" == | |
367 | - | then | |
368 | - | else if (("L" == | |
369 | - | then | |
370 | - | else if (("XL" == | |
371 | - | then | |
372 | - | else if (("XXL" == | |
373 | - | then | |
364 | + | func ca (cb) = { | |
365 | + | let bk = cb | |
366 | + | if (("S" == bk)) | |
367 | + | then br | |
368 | + | else if (("M" == bk)) | |
369 | + | then bs | |
370 | + | else if (("L" == bk)) | |
371 | + | then bt | |
372 | + | else if (("XL" == bk)) | |
373 | + | then bu | |
374 | + | else if (("XXL" == bk)) | |
375 | + | then bv | |
374 | 376 | else throw("Unknown land size") | |
375 | 377 | } | |
376 | 378 | ||
377 | 379 | ||
378 | - | let cb = { | |
379 | - | let bj = bh | |
380 | - | if ((base58'2W' == bj)) | |
380 | + | func cc (bX) = isDefined(parseInt(bX)) | |
381 | + | ||
382 | + | ||
383 | + | let cd = { | |
384 | + | let bk = bi | |
385 | + | if ((base58'2W' == bk)) | |
381 | 386 | then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv") | |
382 | - | else if ((base58'2T' == | |
387 | + | else if ((base58'2T' == bk)) | |
383 | 388 | then this | |
384 | 389 | else throw("Unknown chain") | |
385 | 390 | } | |
386 | 391 | ||
387 | - | let | |
388 | - | let | |
389 | - | if ((base58'2W' == | |
392 | + | let ce = { | |
393 | + | let bk = bi | |
394 | + | if ((base58'2W' == bk)) | |
390 | 395 | then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb") | |
391 | - | else if ((base58'2T' == | |
396 | + | else if ((base58'2T' == bk)) | |
392 | 397 | then this | |
393 | 398 | else throw("Unknown chain") | |
394 | 399 | } | |
395 | 400 | ||
396 | - | let | |
397 | - | ||
398 | - | let | |
399 | - | ||
400 | - | let | |
401 | - | ||
402 | - | let | |
403 | - | ||
404 | - | let | |
405 | - | ||
406 | - | let | |
407 | - | ||
408 | - | let | |
409 | - | let | |
410 | - | if ((base58'2W' == | |
401 | + | let cf = base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD' | |
402 | + | ||
403 | + | let cg = [30, 60, 120] | |
404 | + | ||
405 | + | let ch = 300000 | |
406 | + | ||
407 | + | let ci = 5000000 | |
408 | + | ||
409 | + | let cj = 50 | |
410 | + | ||
411 | + | let ck = 10000000 | |
412 | + | ||
413 | + | let cl = { | |
414 | + | let bk = bi | |
415 | + | if ((base58'2W' == bk)) | |
411 | 416 | then 252289527462 | |
412 | - | else if ((base58'2T' == | |
417 | + | else if ((base58'2T' == bk)) | |
413 | 418 | then 2522895274 | |
414 | 419 | else throw("Unknown chain") | |
415 | 420 | } | |
416 | 421 | ||
417 | - | let | |
418 | - | let | |
419 | - | if ((base58'2W' == | |
422 | + | let cm = { | |
423 | + | let bk = bi | |
424 | + | if ((base58'2W' == bk)) | |
420 | 425 | then 250000000 | |
421 | - | else if ((base58'2T' == | |
426 | + | else if ((base58'2T' == bk)) | |
422 | 427 | then 250000000 | |
423 | 428 | else throw("Unknown chain") | |
424 | 429 | } | |
425 | 430 | ||
426 | - | let | |
427 | - | ||
428 | - | let | |
429 | - | ||
430 | - | let | |
431 | - | ||
432 | - | let | |
433 | - | ||
434 | - | let | |
435 | - | ||
436 | - | let | |
437 | - | ||
438 | - | let | |
439 | - | ||
440 | - | func | |
441 | - | ||
442 | - | ||
443 | - | func | |
444 | - | ||
445 | - | ||
446 | - | func | |
447 | - | ||
448 | - | ||
449 | - | func | |
450 | - | ||
451 | - | ||
452 | - | func | |
453 | - | ||
454 | - | ||
455 | - | func | |
456 | - | ||
457 | - | ||
458 | - | func | |
459 | - | ||
460 | - | ||
461 | - | func | |
462 | - | ||
463 | - | ||
464 | - | func | |
465 | - | ||
466 | - | ||
467 | - | let | |
468 | - | ||
469 | - | let | |
470 | - | ||
471 | - | let | |
472 | - | ||
473 | - | let | |
474 | - | ||
475 | - | let | |
476 | - | ||
477 | - | let | |
478 | - | ||
479 | - | let | |
480 | - | ||
481 | - | func | |
482 | - | ||
483 | - | ||
484 | - | func | |
485 | - | let | |
486 | - | if ((0 >= | |
431 | + | let cn = toBigInt(5) | |
432 | + | ||
433 | + | let co = toBigInt(20) | |
434 | + | ||
435 | + | let cp = toBigInt((20 * 20)) | |
436 | + | ||
437 | + | let cq = toBigInt(((20 * 20) * 20)) | |
438 | + | ||
439 | + | let cr = toBigInt((((20 * 20) * 20) * 20)) | |
440 | + | ||
441 | + | let cs = toBigInt(((((20 * 20) * 20) * 20) * 20)) | |
442 | + | ||
443 | + | let ct = 500 | |
444 | + | ||
445 | + | func cu () = "nextLandNum" | |
446 | + | ||
447 | + | ||
448 | + | func cv (cw) = ("landToAsset_" + cw) | |
449 | + | ||
450 | + | ||
451 | + | func cx (cy) = ("landByCustomName_" + cy) | |
452 | + | ||
453 | + | ||
454 | + | func cz (aE,aM) = ((("infraLevelByAssetIdAndOwner_" + aE) + "_") + aM) | |
455 | + | ||
456 | + | ||
457 | + | func cA (aJ,aE,aM) = makeString(["landArtStatusByTypeAssetIdAndOwner", aJ, aE, aM], "_") | |
458 | + | ||
459 | + | ||
460 | + | func cB (cw) = ("landOwner_" + cw) | |
461 | + | ||
462 | + | ||
463 | + | func cC (cy) = ("duckByCustomName_" + cy) | |
464 | + | ||
465 | + | ||
466 | + | func cD (cy) = ("accountByCustomName_" + cy) | |
467 | + | ||
468 | + | ||
469 | + | func cE () = "oldiesList" | |
470 | + | ||
471 | + | ||
472 | + | let cF = 0 | |
473 | + | ||
474 | + | let cG = 1 | |
475 | + | ||
476 | + | let cH = 2 | |
477 | + | ||
478 | + | let cI = 0 | |
479 | + | ||
480 | + | let cJ = 5 | |
481 | + | ||
482 | + | let cK = 6 | |
483 | + | ||
484 | + | let cL = 7 | |
485 | + | ||
486 | + | func cM (cw,cb) = ((X + cw) + cb) | |
487 | + | ||
488 | + | ||
489 | + | func cN (cO,cP) = { | |
490 | + | let cQ = (((((cP[0] + cP[1]) + cP[2]) + cP[3]) + cP[4]) + cP[5]) | |
491 | + | if ((0 >= cQ)) | |
487 | 492 | then throw("Zero weights sum") | |
488 | 493 | else { | |
489 | - | let | |
490 | - | func | |
491 | - | ||
492 | - | let | |
493 | - | let | |
494 | - | let | |
495 | - | func | |
496 | - | then | |
497 | - | else | |
498 | - | ||
499 | - | func | |
500 | - | then | |
494 | + | let cR = fraction(cO, bp, cQ) | |
495 | + | func cS (cT,cU) = (cT :+ fraction(cU, cR, bp)) | |
496 | + | ||
497 | + | let cV = cP | |
498 | + | let cW = size(cV) | |
499 | + | let cX = nil | |
500 | + | func cY (cZ,da) = if ((da >= cW)) | |
501 | + | then cZ | |
502 | + | else cS(cZ, cV[da]) | |
503 | + | ||
504 | + | func db (cZ,da) = if ((da >= cW)) | |
505 | + | then cZ | |
501 | 506 | else throw("List size exceeds 6") | |
502 | 507 | ||
503 | - | | |
504 | - | } | |
505 | - | } | |
506 | - | ||
507 | - | ||
508 | - | func | |
509 | - | let | |
510 | - | if ((size( | |
508 | + | db(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6) | |
509 | + | } | |
510 | + | } | |
511 | + | ||
512 | + | ||
513 | + | func dc (cO) = { | |
514 | + | let dd = split(value(getString(bS())), "_") | |
515 | + | if ((size(dd) != aa)) | |
511 | 516 | then throw("Wrong proportions data") | |
512 | 517 | else { | |
513 | - | let | |
514 | - | | |
515 | - | } | |
516 | - | } | |
517 | - | ||
518 | - | ||
519 | - | func | |
520 | - | let | |
521 | - | func | |
522 | - | let | |
523 | - | if ((0 > | |
524 | - | then throw(((((("Not enough material idx=" + toString( | |
525 | - | else ( | |
526 | - | } | |
527 | - | ||
528 | - | if ( | |
518 | + | let de = [parseIntValue(dd[0]), parseIntValue(dd[1]), parseIntValue(dd[2]), parseIntValue(dd[3]), parseIntValue(dd[4]), parseIntValue(dd[5])] | |
519 | + | cN(cO, de) | |
520 | + | } | |
521 | + | } | |
522 | + | ||
523 | + | ||
524 | + | func df (dg,dh,di) = { | |
525 | + | let dj = dc(di) | |
526 | + | func dk (cT,bJ) = { | |
527 | + | let dl = (parseIntValue(dh[bJ]) - dj[bJ]) | |
528 | + | if ((0 > dl)) | |
529 | + | then throw(((((("Not enough material idx=" + toString(bJ)) + ", you have ") + dh[bJ]) + ", but need ") + toString(dj[bJ]))) | |
530 | + | else (cT :+ toString(dl)) | |
531 | + | } | |
532 | + | ||
533 | + | if (dg) | |
529 | 534 | then { | |
530 | - | let | |
531 | - | let | |
532 | - | let | |
533 | - | func | |
534 | - | then | |
535 | - | else | |
536 | - | ||
537 | - | func | |
538 | - | then | |
535 | + | let cV = [0, 1, 2, 3, 4, 5] | |
536 | + | let cW = size(cV) | |
537 | + | let cX = nil | |
538 | + | func cY (cZ,da) = if ((da >= cW)) | |
539 | + | then cZ | |
540 | + | else dk(cZ, cV[da]) | |
541 | + | ||
542 | + | func db (cZ,da) = if ((da >= cW)) | |
543 | + | then cZ | |
539 | 544 | else throw("List size exceeds 6") | |
540 | 545 | ||
541 | - | cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6) | |
542 | - | } | |
543 | - | else df | |
544 | - | } | |
545 | - | ||
546 | - | ||
547 | - | func dk (dl,dm) = if ((dm == "")) | |
548 | - | then dl | |
549 | - | else { | |
550 | - | let dn = if ((dl == "")) | |
551 | - | then nil | |
552 | - | else split(dl, "_") | |
553 | - | func do (cR,dp) = { | |
554 | - | let dq = cR._1 | |
555 | - | func dr (ds,dt) = { | |
556 | - | let du = split(dt, ",") | |
557 | - | if ((size(du) != 2)) | |
558 | - | then throw("Incorrect format, should be index,amount") | |
546 | + | db(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6) | |
547 | + | } | |
548 | + | else dh | |
549 | + | } | |
550 | + | ||
551 | + | ||
552 | + | func dm (dn,do) = { | |
553 | + | func dp (cT,dq) = { | |
554 | + | let dr = split(dq, ",") | |
555 | + | if ((size(dr) != 2)) | |
556 | + | then throw("Incorrect format, should be index,amount") | |
557 | + | else { | |
558 | + | let bJ = parseIntValue(dr[0]) | |
559 | + | if (if ((0 > bJ)) | |
560 | + | then true | |
561 | + | else (bJ >= size(ak))) | |
562 | + | then throw("Unknown product idx") | |
559 | 563 | else { | |
560 | - | let bI = parseIntValue(du[0]) | |
561 | - | if (if ((0 > bI)) | |
562 | - | then true | |
563 | - | else (bI >= size(aj))) | |
564 | - | then throw("Unknown product idx") | |
565 | - | else if ((bI != dq)) | |
566 | - | then ds | |
567 | - | else { | |
568 | - | let dv = parseIntValue(du[1]) | |
569 | - | if ((0 >= dv)) | |
570 | - | then throw("Pass only positive amounts") | |
571 | - | else (ds + dv) | |
572 | - | } | |
564 | + | let ds = parseIntValue(dr[1]) | |
565 | + | let dt = split(cT, (dr[0] + ":")) | |
566 | + | if ((size(dt) != 2)) | |
567 | + | then throw((("You don't have " + ah[bJ]) + " equipped")) | |
568 | + | else { | |
569 | + | let du = dt[1] | |
570 | + | let dv = if (cc(take(drop(du, 1), 1))) | |
571 | + | then 2 | |
572 | + | else 1 | |
573 | + | let dw = parseIntValue(take(du, dv)) | |
574 | + | let dx = drop(du, dv) | |
575 | + | let dy = if ((dw >= ds)) | |
576 | + | then (dw - ds) | |
577 | + | else throw(((((("You equipped " + toString(dw)) + " of ") + ah[bJ]) + ", but tried to use ") + toString(ds))) | |
578 | + | ((((dt[0] + dr[0]) + ":") + toString(dy)) + dx) | |
579 | + | } | |
573 | 580 | } | |
574 | 581 | } | |
575 | - | ||
576 | - | let dw = { | |
577 | - | let cT = split(dm, "_") | |
578 | - | let cU = size(cT) | |
579 | - | let cV = 0 | |
580 | - | func cW (cX,cY) = if ((cY >= cU)) | |
581 | - | then cX | |
582 | - | else dr(cX, cT[cY]) | |
583 | - | ||
584 | - | func cZ (cX,cY) = if ((cY >= cU)) | |
585 | - | then cX | |
586 | - | else throw("List size exceeds 10") | |
587 | - | ||
588 | - | cZ(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
589 | - | } | |
590 | - | let dx = if ((size(dn) > dq)) | |
591 | - | then parseIntValue(dn[dq]) | |
592 | - | else 0 | |
593 | - | let dy = if ((dx >= dw)) | |
594 | - | then (dx - dw) | |
595 | - | else throw(((((("You have " + toString(dx)) + " of ") + ag[dq]) + ", but tried to use ") + toString(dw))) | |
596 | - | $Tuple2((dq + 1), (cR._2 :+ toString(dy))) | |
597 | - | } | |
598 | - | ||
599 | - | let dz = { | |
600 | - | let cT = aj | |
601 | - | let cU = size(cT) | |
602 | - | let cV = $Tuple2(0, nil) | |
603 | - | func cW (cX,cY) = if ((cY >= cU)) | |
604 | - | then cX | |
605 | - | else do(cX, cT[cY]) | |
606 | - | ||
607 | - | func cZ (cX,cY) = if ((cY >= cU)) | |
608 | - | then cX | |
609 | - | else throw("List size exceeds 50") | |
610 | - | ||
611 | - | cZ(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cV, 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) | |
612 | - | } | |
613 | - | makeString(dz._2, "_") | |
614 | - | } | |
615 | - | ||
616 | - | ||
617 | - | func dA (dB) = { | |
618 | - | let dn = if ((dB == "")) | |
582 | + | } | |
583 | + | ||
584 | + | let cV = split(do, "_") | |
585 | + | let cW = size(cV) | |
586 | + | let cX = dn | |
587 | + | func cY (cZ,da) = if ((da >= cW)) | |
588 | + | then cZ | |
589 | + | else dp(cZ, cV[da]) | |
590 | + | ||
591 | + | func db (cZ,da) = if ((da >= cW)) | |
592 | + | then cZ | |
593 | + | else throw("List size exceeds 10") | |
594 | + | ||
595 | + | db(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
596 | + | } | |
597 | + | ||
598 | + | ||
599 | + | func dz (dA) = { | |
600 | + | let dB = if ((dA == "")) | |
619 | 601 | then nil | |
620 | - | else split( | |
621 | - | func dC ( | |
622 | - | let | |
623 | - | let | |
624 | - | then parseIntValue( | |
602 | + | else split(dA, "_") | |
603 | + | func dC (cT,bg) = { | |
604 | + | let dD = (size(cT) / 8) | |
605 | + | let dw = if ((size(dB) > dD)) | |
606 | + | then parseIntValue(dB[dD]) | |
625 | 607 | else 0 | |
626 | - | ( | |
627 | - | } | |
628 | - | ||
629 | - | let | |
630 | - | let | |
631 | - | let | |
632 | - | func | |
633 | - | then | |
634 | - | else dC( | |
635 | - | ||
636 | - | func | |
637 | - | then | |
608 | + | (cT + toBytes(dw)) | |
609 | + | } | |
610 | + | ||
611 | + | let cV = ak | |
612 | + | let cW = size(cV) | |
613 | + | let cX = base58'' | |
614 | + | func cY (cZ,da) = if ((da >= cW)) | |
615 | + | then cZ | |
616 | + | else dC(cZ, cV[da]) | |
617 | + | ||
618 | + | func db (cZ,da) = if ((da >= cW)) | |
619 | + | then cZ | |
638 | 620 | else throw("List size exceeds 50") | |
639 | 621 | ||
640 | - | | |
641 | - | } | |
642 | - | ||
643 | - | ||
644 | - | func | |
645 | - | func | |
646 | - | let | |
647 | - | let | |
648 | - | ( | |
622 | + | db(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cX, 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) | |
623 | + | } | |
624 | + | ||
625 | + | ||
626 | + | func dE (dF) = { | |
627 | + | func dG (cT,bg) = { | |
628 | + | let dD = size(cT) | |
629 | + | let dH = take(drop(dF, (8 * dD)), 8) | |
630 | + | (cT :+ toString(toInt(dH))) | |
649 | 631 | } | |
650 | 632 | ||
651 | 633 | makeString({ | |
652 | - | let | |
653 | - | let | |
654 | - | let | |
655 | - | func | |
656 | - | then | |
657 | - | else | |
658 | - | ||
659 | - | func | |
660 | - | then | |
634 | + | let cV = ak | |
635 | + | let cW = size(cV) | |
636 | + | let cX = nil | |
637 | + | func cY (cZ,da) = if ((da >= cW)) | |
638 | + | then cZ | |
639 | + | else dG(cZ, cV[da]) | |
640 | + | ||
641 | + | func db (cZ,da) = if ((da >= cW)) | |
642 | + | then cZ | |
661 | 643 | else throw("List size exceeds 50") | |
662 | 644 | ||
663 | - | | |
645 | + | db(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cX, 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) | |
664 | 646 | }, "_") | |
665 | 647 | } | |
666 | 648 | ||
667 | 649 | ||
668 | - | func | |
669 | - | func | |
670 | - | then throw(("Requirement not satisfied: " + g[ | |
650 | + | func dI (dJ,dK) = { | |
651 | + | func dL (cT,dD) = if ((parseIntValue(dK[dD]) > dJ[dD])) | |
652 | + | then throw(("Requirement not satisfied: " + g[dD])) | |
671 | 653 | else true | |
672 | 654 | ||
673 | - | let | |
674 | - | let | |
675 | - | let | |
676 | - | func | |
677 | - | then | |
678 | - | else | |
679 | - | ||
680 | - | func | |
681 | - | then | |
655 | + | let cV = [0, 1, 2, 3, 4, 5, 6] | |
656 | + | let cW = size(cV) | |
657 | + | let cX = false | |
658 | + | func cY (cZ,da) = if ((da >= cW)) | |
659 | + | then cZ | |
660 | + | else dL(cZ, cV[da]) | |
661 | + | ||
662 | + | func db (cZ,da) = if ((da >= cW)) | |
663 | + | then cZ | |
682 | 664 | else throw("List size exceeds 7") | |
683 | 665 | ||
684 | - | | |
685 | - | } | |
686 | - | ||
687 | - | ||
688 | - | func | |
689 | - | let | |
690 | - | if ((size( | |
666 | + | db(cY(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6), 7) | |
667 | + | } | |
668 | + | ||
669 | + | ||
670 | + | func dM (dN,dB,dO,dP,dQ,dR,dJ) = { | |
671 | + | let dr = split(dN, ":") | |
672 | + | if ((size(dr) != 2)) | |
691 | 673 | then throw("Incorrect format, should be index:amount") | |
692 | - | else { | |
693 | - | let dR = parseIntValue(du[0]) | |
694 | - | let dS = parseIntValue(du[1]) | |
695 | - | if (if ((0 > dR)) | |
696 | - | then true | |
697 | - | else (dR >= size(aj))) | |
698 | - | then throw("Unknown product idx") | |
699 | - | else if ((0 > dS)) | |
700 | - | then throw("Count can't be negative") | |
701 | - | else if ((dS == 0)) | |
702 | - | then $Tuple2(dn, false) | |
703 | - | else { | |
704 | - | let dT = take(dn, (8 * dR)) | |
705 | - | let dx = toInt(take(drop(dn, (8 * dR)), 8)) | |
706 | - | let dU = drop(dn, (8 * (dR + 1))) | |
707 | - | let bf = split(aj[dR], "_") | |
708 | - | if (if (!(dN)) | |
709 | - | then (dS > dx) | |
710 | - | else false) | |
711 | - | then throw(((((("You have " + toString(dx)) + " of ") + ag[dR]) + ", but tried to use ") + toString(dS))) | |
674 | + | else if ((size(dr[0]) != 2)) | |
675 | + | then throw("Product idx should be 2 digits, zero padded") | |
676 | + | else { | |
677 | + | let dS = parseIntValue(dr[0]) | |
678 | + | let dT = parseIntValue(dr[1]) | |
679 | + | if (if ((0 > dS)) | |
680 | + | then true | |
681 | + | else (dS >= size(ak))) | |
682 | + | then throw("Unknown product idx") | |
683 | + | else if ((0 > dT)) | |
684 | + | then throw("Count can't be negative") | |
685 | + | else if ((dT > p)) | |
686 | + | then throw(((("Can't put more than " + toString(p)) + " of ") + ah[dS])) | |
687 | + | else if ((dT == 0)) | |
688 | + | then $Tuple2(dB, false) | |
712 | 689 | else { | |
713 | - | let dV = if (if (!(dN)) | |
714 | - | then dH(dI, split(bf[al], ",")) | |
690 | + | let dU = take(dB, (8 * dS)) | |
691 | + | let dw = toInt(take(drop(dB, (8 * dS)), 8)) | |
692 | + | let dx = drop(dB, (8 * (dS + 1))) | |
693 | + | let bg = split(ak[dS], "_") | |
694 | + | if (if (!(dO)) | |
695 | + | then (dT > dw) | |
715 | 696 | else false) | |
716 | - | then | |
717 | - | | |
718 | - | if (( | |
719 | - | then | |
720 | - | else | |
721 | - | | |
722 | - | let | |
723 | - | if (( | |
724 | - | then throw(" | |
697 | + | then throw(((((("You have " + toString(dw)) + " of ") + ah[dS]) + ", but tried to use ") + toString(dT))) | |
698 | + | else { | |
699 | + | let dV = if (if (!(dO)) | |
700 | + | then dI(dJ, split(bg[am], ",")) | |
701 | + | else false) | |
702 | + | then { | |
703 | + | let dW = bg[an] | |
704 | + | if ((dW == "")) | |
705 | + | then throw("Item cannot be equipped") | |
725 | 706 | else { | |
726 | - | let dZ = ((dX % 100) / 10) | |
727 | - | if ((dP != dZ)) | |
728 | - | then throw("Slot incompatible") | |
707 | + | let dX = parseIntValue(dW) | |
708 | + | let dY = (dX / 100) | |
709 | + | if ((dP != dY)) | |
710 | + | then throw("Segment incompatible") | |
729 | 711 | else { | |
730 | - | let ea = (dX % 10) | |
731 | - | if (if ((dQ != 0)) | |
732 | - | then (ea > 1) | |
733 | - | else false) | |
734 | - | then throw("Big items should occupy slot 0") | |
735 | - | else (ea > 1) | |
712 | + | let dZ = ((dX % 100) / 10) | |
713 | + | if ((dQ != dZ)) | |
714 | + | then throw("Slot incompatible") | |
715 | + | else { | |
716 | + | let ea = (dX % 10) | |
717 | + | if (if ((dR != 0)) | |
718 | + | then (ea > 1) | |
719 | + | else false) | |
720 | + | then throw("Big items should occupy slot 0") | |
721 | + | else (ea > 1) | |
722 | + | } | |
736 | 723 | } | |
737 | 724 | } | |
738 | 725 | } | |
726 | + | else false | |
727 | + | $Tuple2(((dU + toBytes((dw + (if (dO) | |
728 | + | then dT | |
729 | + | else -(dT))))) + dx), dV) | |
739 | 730 | } | |
740 | - | else false | |
741 | - | $Tuple2(((dT + toBytes((dx + (if (dN) | |
742 | - | then dS | |
743 | - | else -(dS))))) + dU), dV) | |
744 | 731 | } | |
745 | - | } | |
746 | - | } | |
747 | - | } | |
748 | - | ||
749 | - | ||
750 | - | func eb (ec,ed,dN,dO,dP,dJ) = if ((ec != "")) | |
732 | + | } | |
733 | + | } | |
734 | + | ||
735 | + | ||
736 | + | func eb (ec,ed,dO,dP,dQ,dK) = if ((ec != "")) | |
751 | 737 | then { | |
752 | 738 | let ee = split(ec, ",") | |
753 | 739 | if ((size(ee) > o)) | |
754 | 740 | then throw("Wrong slots format") | |
755 | 741 | else { | |
756 | 742 | let ef = ee[0] | |
757 | 743 | let eg = if ((size(ee) > 1)) | |
758 | 744 | then ee[1] | |
759 | 745 | else "" | |
760 | 746 | if (if ((ef == "")) | |
761 | 747 | then (eg == "") | |
762 | 748 | else false) | |
763 | 749 | then ed | |
764 | 750 | else { | |
765 | 751 | let eh = if ((ef != "")) | |
766 | - | then | |
752 | + | then dM(ef, ed, dO, dP, dQ, 0, dK) | |
767 | 753 | else $Tuple2(ed, false) | |
768 | 754 | if ((eg != "")) | |
769 | 755 | then if (eh._2) | |
770 | 756 | then throw("Big item already occupies slot") | |
771 | - | else | |
757 | + | else dM(eg, eh._1, dO, dP, dQ, 1, dK)._1 | |
772 | 758 | else eh._1 | |
773 | 759 | } | |
774 | 760 | } | |
775 | 761 | } | |
776 | 762 | else ed | |
777 | 763 | ||
778 | 764 | ||
779 | - | func ei (ej,ek, | |
780 | - | func | |
781 | - | let | |
782 | - | let | |
783 | - | if ((size( | |
765 | + | func ei (ej,ek,dO,dK) = { | |
766 | + | func dP (cT,el) = { | |
767 | + | let dD = cT._1 | |
768 | + | let dQ = split(el, ";") | |
769 | + | if ((size(dQ) != n)) | |
784 | 770 | then throw("Wrong segment format") | |
785 | 771 | else { | |
786 | - | let em = | |
787 | - | let | |
772 | + | let em = dQ[0] | |
773 | + | let en = dQ[1] | |
788 | 774 | if (if ((em == "")) | |
789 | - | then ( | |
775 | + | then (en == "") | |
790 | 776 | else false) | |
791 | - | then $Tuple2(( | |
777 | + | then $Tuple2((dD + 1), cT._2) | |
792 | 778 | else { | |
793 | - | let | |
794 | - | $Tuple2(( | |
779 | + | let eo = eb(em, cT._2, dO, dD, 0, dK) | |
780 | + | $Tuple2((dD + 1), eb(en, eo, dO, dD, 1, dK)) | |
795 | 781 | } | |
796 | 782 | } | |
797 | 783 | } | |
798 | 784 | ||
799 | - | ( let | |
800 | - | let | |
801 | - | let | |
802 | - | func | |
803 | - | then | |
804 | - | else | |
805 | - | ||
806 | - | func | |
807 | - | then | |
785 | + | ( let cV = ej | |
786 | + | let cW = size(cV) | |
787 | + | let cX = $Tuple2(0, ek) | |
788 | + | func cY (cZ,da) = if ((da >= cW)) | |
789 | + | then cZ | |
790 | + | else dP(cZ, cV[da]) | |
791 | + | ||
792 | + | func db (cZ,da) = if ((da >= cW)) | |
793 | + | then cZ | |
808 | 794 | else throw("List size exceeds 6") | |
809 | 795 | ||
810 | - | | |
811 | - | } | |
812 | - | ||
813 | - | ||
814 | - | func | |
796 | + | db(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6))._2 | |
797 | + | } | |
798 | + | ||
799 | + | ||
800 | + | func ep (eq,er,es,et) = if ((size(eq) != aa)) | |
815 | 801 | then throw("Wrong proportions data") | |
816 | 802 | else { | |
817 | - | func | |
818 | - | let | |
819 | - | if ((0 > | |
820 | - | then throw(((((((("Panic! Pieces of type=" + toString( | |
821 | - | else ( | |
822 | - | } | |
823 | - | ||
824 | - | let | |
825 | - | let | |
826 | - | let | |
827 | - | let | |
828 | - | func | |
829 | - | then | |
830 | - | else | |
831 | - | ||
832 | - | func | |
833 | - | then | |
803 | + | func eu (cT,ev) = { | |
804 | + | let dl = (parseIntValue(eq[ev]) + ((et * er[ev]) * es)) | |
805 | + | if ((0 > dl)) | |
806 | + | then throw(((((((("Panic! Pieces of type=" + toString(ev)) + ", sign=") + toString(et)) + ", terrainCounts[i]=") + toString(er[ev])) + ", landSizeIndex=") + toString(es))) | |
807 | + | else (cT :+ toString(dl)) | |
808 | + | } | |
809 | + | ||
810 | + | let de = { | |
811 | + | let cV = [0, 1, 2, 3, 4, 5] | |
812 | + | let cW = size(cV) | |
813 | + | let cX = nil | |
814 | + | func cY (cZ,da) = if ((da >= cW)) | |
815 | + | then cZ | |
816 | + | else eu(cZ, cV[da]) | |
817 | + | ||
818 | + | func db (cZ,da) = if ((da >= cW)) | |
819 | + | then cZ | |
834 | 820 | else throw("List size exceeds 6") | |
835 | 821 | ||
836 | - | | |
837 | - | } | |
838 | - | makeString( | |
839 | - | } | |
840 | - | ||
841 | - | ||
842 | - | func | |
843 | - | let | |
844 | - | | |
845 | - | } | |
846 | - | ||
847 | - | ||
848 | - | func | |
849 | - | ||
850 | - | ||
851 | - | func | |
852 | - | func | |
853 | - | let | |
854 | - | ( | |
855 | - | } | |
856 | - | ||
857 | - | let | |
858 | - | let | |
859 | - | let | |
860 | - | let | |
861 | - | func | |
862 | - | then | |
863 | - | else | |
864 | - | ||
865 | - | func | |
866 | - | then | |
822 | + | db(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6) | |
823 | + | } | |
824 | + | makeString(de, "_") | |
825 | + | } | |
826 | + | ||
827 | + | ||
828 | + | func ew (er,es,et) = { | |
829 | + | let eq = split(valueOrElse(getString(bS()), "0_0_0_0_0_0"), "_") | |
830 | + | ep(eq, er, es, et) | |
831 | + | } | |
832 | + | ||
833 | + | ||
834 | + | func ex (ey) = [(size(split(ey, "A")) - 1), (size(split(ey, "B")) - 1), (size(split(ey, "C")) - 1), (size(split(ey, "D")) - 1), (size(split(ey, "E")) - 1), (size(split(ey, "F")) - 1)] | |
835 | + | ||
836 | + | ||
837 | + | func ez (eA,er,eB,es,eC) = { | |
838 | + | func eD (cT,ev) = { | |
839 | + | let eE = ((fraction(eB, eC, ac) * er[ev]) * es) | |
840 | + | (cT :+ toString((parseIntValue(eA[ev]) + eE))) | |
841 | + | } | |
842 | + | ||
843 | + | let de = { | |
844 | + | let cV = [0, 1, 2, 3, 4, 5] | |
845 | + | let cW = size(cV) | |
846 | + | let cX = nil | |
847 | + | func cY (cZ,da) = if ((da >= cW)) | |
848 | + | then cZ | |
849 | + | else eD(cZ, cV[da]) | |
850 | + | ||
851 | + | func db (cZ,da) = if ((da >= cW)) | |
852 | + | then cZ | |
867 | 853 | else throw("List size exceeds 6") | |
868 | 854 | ||
869 | - | | |
870 | - | } | |
871 | - | makeString( | |
872 | - | } | |
873 | - | ||
874 | - | ||
875 | - | func | |
876 | - | func | |
877 | - | let | |
878 | - | $Tuple2(( | |
879 | - | } | |
880 | - | ||
881 | - | let | |
882 | - | let | |
883 | - | let | |
884 | - | func | |
885 | - | then | |
886 | - | else | |
887 | - | ||
888 | - | func | |
889 | - | then | |
855 | + | db(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6) | |
856 | + | } | |
857 | + | makeString(de, "_") | |
858 | + | } | |
859 | + | ||
860 | + | ||
861 | + | func eF (er,eB,es,eC) = { | |
862 | + | func eD (cT,ev) = { | |
863 | + | let eE = ((fraction(eB, eC, ac) * er[ev]) * es) | |
864 | + | $Tuple2((cT._1 :+ eE), (cT._2 + eE)) | |
865 | + | } | |
866 | + | ||
867 | + | let cV = [0, 1, 2, 3, 4, 5] | |
868 | + | let cW = size(cV) | |
869 | + | let cX = $Tuple2(nil, 0) | |
870 | + | func cY (cZ,da) = if ((da >= cW)) | |
871 | + | then cZ | |
872 | + | else eD(cZ, cV[da]) | |
873 | + | ||
874 | + | func db (cZ,da) = if ((da >= cW)) | |
875 | + | then cZ | |
890 | 876 | else throw("List size exceeds 6") | |
891 | 877 | ||
892 | - | | |
893 | - | } | |
894 | - | ||
895 | - | ||
896 | - | func | |
897 | - | let | |
898 | - | let | |
899 | - | if (( | |
900 | - | then $Tuple2(makeString( | |
901 | - | else if (( | |
878 | + | db(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6) | |
879 | + | } | |
880 | + | ||
881 | + | ||
882 | + | func eG (eH,eI,eJ,eK) = { | |
883 | + | let eL = eJ._1 | |
884 | + | let eM = eJ._2 | |
885 | + | if ((eM == 0)) | |
886 | + | then $Tuple2(makeString(eH, "_"), makeString(eI, "_")) | |
887 | + | else if ((eK >= eM)) | |
902 | 888 | then { | |
903 | - | func | |
904 | - | ||
905 | - | let | |
906 | - | let | |
907 | - | let | |
908 | - | let | |
909 | - | func | |
910 | - | then | |
911 | - | else | |
912 | - | ||
913 | - | func | |
914 | - | then | |
889 | + | func eN (cT,ev) = (cT :+ toString((parseIntValue(eH[ev]) + eL[ev]))) | |
890 | + | ||
891 | + | let de = { | |
892 | + | let cV = [0, 1, 2, 3, 4, 5] | |
893 | + | let cW = size(cV) | |
894 | + | let cX = nil | |
895 | + | func cY (cZ,da) = if ((da >= cW)) | |
896 | + | then cZ | |
897 | + | else eN(cZ, cV[da]) | |
898 | + | ||
899 | + | func db (cZ,da) = if ((da >= cW)) | |
900 | + | then cZ | |
915 | 901 | else throw("List size exceeds 6") | |
916 | 902 | ||
917 | - | | |
903 | + | db(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6) | |
918 | 904 | } | |
919 | - | $Tuple2(makeString( | |
905 | + | $Tuple2(makeString(de, "_"), makeString(eI, "_")) | |
920 | 906 | } | |
921 | 907 | else { | |
922 | - | func | |
923 | - | let | |
924 | - | $Tuple2(( | |
908 | + | func eO (cT,ev) = { | |
909 | + | let eP = fraction(eL[ev], eK, eM) | |
910 | + | $Tuple2((cT._1 :+ toString((parseIntValue(eH[ev]) + eP))), (cT._2 :+ toString(((parseIntValue(eI[ev]) + eL[ev]) - eP)))) | |
925 | 911 | } | |
926 | 912 | ||
927 | - | let | |
928 | - | let | |
929 | - | let | |
930 | - | let | |
931 | - | func | |
932 | - | then | |
933 | - | else | |
934 | - | ||
935 | - | func | |
936 | - | then | |
913 | + | let de = { | |
914 | + | let cV = [0, 1, 2, 3, 4, 5] | |
915 | + | let cW = size(cV) | |
916 | + | let cX = $Tuple2(nil, nil) | |
917 | + | func cY (cZ,da) = if ((da >= cW)) | |
918 | + | then cZ | |
919 | + | else eO(cZ, cV[da]) | |
920 | + | ||
921 | + | func db (cZ,da) = if ((da >= cW)) | |
922 | + | then cZ | |
937 | 923 | else throw("List size exceeds 6") | |
938 | 924 | ||
939 | - | | |
925 | + | db(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6) | |
940 | 926 | } | |
941 | - | $Tuple2(makeString( | |
927 | + | $Tuple2(makeString(de._1, "_"), makeString(de._2, "_")) | |
942 | 928 | } | |
943 | 929 | } | |
944 | 930 | ||
945 | 931 | ||
946 | - | func | |
947 | - | then | |
948 | - | else -( | |
949 | - | ||
950 | - | ||
951 | - | let | |
952 | - | ||
953 | - | func | |
954 | - | let | |
955 | - | let | |
932 | + | func eQ (eR) = if ((eR >= toBigInt(0))) | |
933 | + | then eR | |
934 | + | else -(eR) | |
935 | + | ||
936 | + | ||
937 | + | let eS = [[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]] | |
938 | + | ||
939 | + | func eT (bZ,eU) = { | |
940 | + | let eV = toInt((bZ % co)) | |
941 | + | let eW = if ((eU[0] > eV)) | |
956 | 942 | then "A" | |
957 | - | else if (( | |
943 | + | else if ((eU[1] > eV)) | |
958 | 944 | then "B" | |
959 | - | else if (( | |
945 | + | else if ((eU[2] > eV)) | |
960 | 946 | then "C" | |
961 | - | else if (( | |
947 | + | else if ((eU[3] > eV)) | |
962 | 948 | then "D" | |
963 | - | else if (( | |
949 | + | else if ((eU[4] > eV)) | |
964 | 950 | then "E" | |
965 | 951 | else "F" | |
966 | - | | |
967 | - | } | |
968 | - | ||
969 | - | ||
970 | - | func | |
971 | - | let | |
972 | - | func | |
973 | - | ||
974 | - | let | |
975 | - | let | |
976 | - | let | |
977 | - | let | |
978 | - | func | |
979 | - | then | |
980 | - | else | |
981 | - | ||
982 | - | func | |
983 | - | then | |
952 | + | eW | |
953 | + | } | |
954 | + | ||
955 | + | ||
956 | + | func eX (eY,eZ) = { | |
957 | + | let fa = eS[eZ] | |
958 | + | func fb (cT,cU) = $Tuple2((((((cT._1 + eT(cT._2, fa)) + eT((cT._2 / co), fa)) + eT((cT._2 / cp), fa)) + eT((cT._2 / cq), fa)) + eT((cT._2 / cr), fa)), (cT._2 / cs)) | |
959 | + | ||
960 | + | let fc = { | |
961 | + | let cV = [1, 2, 3, 4, 5] | |
962 | + | let cW = size(cV) | |
963 | + | let cX = $Tuple2("", (eY / cn)) | |
964 | + | func cY (cZ,da) = if ((da >= cW)) | |
965 | + | then cZ | |
966 | + | else fb(cZ, cV[da]) | |
967 | + | ||
968 | + | func db (cZ,da) = if ((da >= cW)) | |
969 | + | then cZ | |
984 | 970 | else throw("List size exceeds 5") | |
985 | 971 | ||
986 | - | | |
987 | - | } | |
988 | - | | |
989 | - | } | |
990 | - | ||
991 | - | ||
992 | - | func | |
993 | - | let | |
994 | - | [toString(valueOrElse(parseInt( | |
995 | - | then | |
996 | - | else "0_0_0_0_0_0", if ((size(split( | |
997 | - | then | |
998 | - | else "0_0_0_0_0_0", | |
999 | - | } | |
1000 | - | ||
1001 | - | ||
1002 | - | func | |
1003 | - | let | |
1004 | - | (( | |
1005 | - | } | |
1006 | - | ||
1007 | - | ||
1008 | - | func | |
1009 | - | let | |
1010 | - | func | |
1011 | - | ||
1012 | - | func | |
1013 | - | let | |
1014 | - | let | |
1015 | - | $Tuple2(( | |
1016 | - | } | |
1017 | - | ||
1018 | - | let | |
1019 | - | let | |
1020 | - | let | |
1021 | - | let | |
1022 | - | func | |
1023 | - | then | |
1024 | - | else | |
1025 | - | ||
1026 | - | func | |
1027 | - | then | |
972 | + | db(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5) | |
973 | + | } | |
974 | + | fc._1 | |
975 | + | } | |
976 | + | ||
977 | + | ||
978 | + | func fd (fe) = { | |
979 | + | let ff = split(valueOrElse(getString(fe), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":") | |
980 | + | [toString(valueOrElse(parseInt(ff[ay]), 0)), if ((size(split(ff[az], "_")) == aa)) | |
981 | + | then ff[az] | |
982 | + | else "0_0_0_0_0_0", if ((size(split(ff[aA], "_")) == aa)) | |
983 | + | then ff[aA] | |
984 | + | else "0_0_0_0_0_0", ff[aB]] | |
985 | + | } | |
986 | + | ||
987 | + | ||
988 | + | func fg (fh) = { | |
989 | + | let dr = split(fh, "_") | |
990 | + | ((ad * (parseIntValue(dr[1]) + 1)) * parseIntValue(dr[0])) | |
991 | + | } | |
992 | + | ||
993 | + | ||
994 | + | func fi (fj) = { | |
995 | + | let fk = fj[as] | |
996 | + | func fl (cT,fm) = (cT + parseIntValue(fm)) | |
997 | + | ||
998 | + | func fn (cT,fm) = { | |
999 | + | let bJ = cT._1 | |
1000 | + | let fo = (((parseIntValue(fm) + ao) - 1) / ao) | |
1001 | + | $Tuple2((bJ + 1), (cT._2 + (fo * bq))) | |
1002 | + | } | |
1003 | + | ||
1004 | + | let fp = { | |
1005 | + | let cV = split(fj[aq], "_") | |
1006 | + | let cW = size(cV) | |
1007 | + | let cX = 0 | |
1008 | + | func cY (cZ,da) = if ((da >= cW)) | |
1009 | + | then cZ | |
1010 | + | else fl(cZ, cV[da]) | |
1011 | + | ||
1012 | + | func db (cZ,da) = if ((da >= cW)) | |
1013 | + | then cZ | |
1028 | 1014 | else throw("List size exceeds 6") | |
1029 | 1015 | ||
1030 | - | | |
1031 | - | } | |
1032 | - | let | |
1033 | - | let | |
1034 | - | let | |
1035 | - | let | |
1036 | - | func | |
1037 | - | then | |
1038 | - | else | |
1039 | - | ||
1040 | - | func | |
1041 | - | then | |
1016 | + | db(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6) | |
1017 | + | } | |
1018 | + | let fq = { | |
1019 | + | let cV = split(fj[ar], "_") | |
1020 | + | let cW = size(cV) | |
1021 | + | let cX = 0 | |
1022 | + | func fr (cZ,da) = if ((da >= cW)) | |
1023 | + | then cZ | |
1024 | + | else fl(cZ, cV[da]) | |
1025 | + | ||
1026 | + | func fs (cZ,da) = if ((da >= cW)) | |
1027 | + | then cZ | |
1042 | 1028 | else throw("List size exceeds 6") | |
1043 | 1029 | ||
1044 | - | | |
1045 | - | } | |
1046 | - | let | |
1030 | + | fs(fr(fr(fr(fr(fr(fr(cX, 0), 1), 2), 3), 4), 5), 6) | |
1031 | + | } | |
1032 | + | let ft = if ((fk == "")) | |
1047 | 1033 | then 0 | |
1048 | - | else ( let | |
1049 | - | let | |
1050 | - | let | |
1051 | - | func | |
1052 | - | then | |
1053 | - | else | |
1054 | - | ||
1055 | - | func | |
1056 | - | then | |
1034 | + | else ( let cV = split_4C(fk, "_") | |
1035 | + | let cW = size(cV) | |
1036 | + | let cX = $Tuple2(0, 0) | |
1037 | + | func fu (cZ,da) = if ((da >= cW)) | |
1038 | + | then cZ | |
1039 | + | else fn(cZ, cV[da]) | |
1040 | + | ||
1041 | + | func fv (cZ,da) = if ((da >= cW)) | |
1042 | + | then cZ | |
1057 | 1043 | else throw("List size exceeds 50") | |
1058 | 1044 | ||
1059 | - | | |
1060 | - | (( | |
1061 | - | } | |
1062 | - | ||
1063 | - | ||
1064 | - | func | |
1065 | - | let | |
1066 | - | let | |
1067 | - | let | |
1068 | - | let | |
1069 | - | let | |
1070 | - | let | |
1071 | - | then makeString(["0", toString( | |
1072 | - | else { | |
1073 | - | let | |
1074 | - | let | |
1075 | - | let | |
1076 | - | then parseIntValue( | |
1077 | - | else | |
1078 | - | makeString([toString( | |
1079 | - | } | |
1080 | - | [ | |
1081 | - | then | |
1082 | - | else "0_0_0_0_0_0", if ((size(split( | |
1083 | - | then | |
1084 | - | else "0_0_0_0_0_0", | |
1085 | - | } | |
1086 | - | ||
1087 | - | ||
1088 | - | func | |
1089 | - | let | |
1090 | - | let | |
1091 | - | (( | |
1092 | - | } | |
1093 | - | ||
1094 | - | ||
1095 | - | func | |
1096 | - | let | |
1097 | - | then ((( | |
1098 | - | else -((((-( | |
1099 | - | ( | |
1100 | - | } | |
1101 | - | ||
1102 | - | ||
1103 | - | func | |
1045 | + | fv(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(cX, 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 | |
1046 | + | ((fp + fq) + ft) | |
1047 | + | } | |
1048 | + | ||
1049 | + | ||
1050 | + | func fw (fx,fy,fz) = { | |
1051 | + | let fh = ((toString(fy) + "_") + toString(fz)) | |
1052 | + | let fA = fg(fh) | |
1053 | + | let fB = valueOrElse(getString(fx), (fh + ":0_0_0_0_0_0:0_0_0_0_0_0::0")) | |
1054 | + | let fC = split_4C(fB, ":") | |
1055 | + | let fD = fi(fC) | |
1056 | + | let fE = if ((5 > size(fC))) | |
1057 | + | then makeString(["0", toString(fD), toString((fA - fD)), toString(fA)], "_") | |
1058 | + | else { | |
1059 | + | let fF = split(fC[at], "_") | |
1060 | + | let fG = parseIntValue(fF[au]) | |
1061 | + | let fH = if ((size(fF) > 1)) | |
1062 | + | then parseIntValue(fF[av]) | |
1063 | + | else fD | |
1064 | + | makeString([toString(fG), toString(fH), toString(((fA - fG) - fH)), toString(fA)], "_") | |
1065 | + | } | |
1066 | + | [fC[ap], if ((size(split(fC[aq], "_")) == aa)) | |
1067 | + | then fC[aq] | |
1068 | + | else "0_0_0_0_0_0", if ((size(split(fC[ar], "_")) == aa)) | |
1069 | + | then fC[ar] | |
1070 | + | else "0_0_0_0_0_0", fC[as], fE] | |
1071 | + | } | |
1072 | + | ||
1073 | + | ||
1074 | + | func fI (fj) = { | |
1075 | + | let fJ = fi(fj) | |
1076 | + | let fK = parseIntValue(split(fj[at], "_")[au]) | |
1077 | + | ((fg(fj[ap]) - fJ) - fK) | |
1078 | + | } | |
1079 | + | ||
1080 | + | ||
1081 | + | func fL (fM,fN) = { | |
1082 | + | let fo = if ((fM >= 0)) | |
1083 | + | then (((fM + fN) - 1) / fN) | |
1084 | + | else -((((-(fM) + fN) - 1) / fN)) | |
1085 | + | (fo * bq) | |
1086 | + | } | |
1087 | + | ||
1088 | + | ||
1089 | + | func fO (fP,fj,fQ) = if ((size(fP) != 3)) | |
1104 | 1090 | then throw("cargoListStr should contain exactly 2 ':' separators") | |
1105 | 1091 | else { | |
1106 | - | let | |
1107 | - | let | |
1108 | - | let | |
1092 | + | let fR = split(fP[0], "_") | |
1093 | + | let fS = split(fP[1], "_") | |
1094 | + | let fT = if ((fP[2] == "")) | |
1109 | 1095 | then nil | |
1110 | - | else split( | |
1111 | - | if ((size( | |
1096 | + | else split(fP[2], "_") | |
1097 | + | if ((size(fR) != aa)) | |
1112 | 1098 | then throw("All 6 resources should be passed") | |
1113 | - | else if ((size( | |
1099 | + | else if ((size(fS) != aa)) | |
1114 | 1100 | then throw("All 6 materials should be passed") | |
1115 | 1101 | else { | |
1116 | - | let | |
1117 | - | let | |
1118 | - | let | |
1119 | - | let | |
1102 | + | let eK = fI(fj) | |
1103 | + | let fU = split(fj[aq], "_") | |
1104 | + | let fV = split(fj[ar], "_") | |
1105 | + | let fW = if ((fj[as] == "")) | |
1120 | 1106 | then nil | |
1121 | - | else split( | |
1122 | - | let | |
1123 | - | let | |
1124 | - | let | |
1107 | + | else split(fj[as], "_") | |
1108 | + | let eI = split(fQ[az], "_") | |
1109 | + | let fX = split(fQ[aA], "_") | |
1110 | + | let fY = if ((fQ[aB] == "")) | |
1125 | 1111 | then nil | |
1126 | - | else split( | |
1127 | - | func | |
1128 | - | let | |
1129 | - | let | |
1130 | - | let | |
1131 | - | let | |
1132 | - | if (( | |
1133 | - | then $Tuple4(( | |
1134 | - | else if (( | |
1135 | - | then if (( | |
1136 | - | then throw((((("Attempt to take " + | |
1137 | - | else $Tuple4(( | |
1138 | - | else if ((-( | |
1139 | - | then throw((((("Attempt to take " + toString(-( | |
1140 | - | else $Tuple4(( | |
1112 | + | else split(fQ[aB], "_") | |
1113 | + | func fZ (cT,fm) = { | |
1114 | + | let ev = cT._1 | |
1115 | + | let ga = parseIntValue(fm) | |
1116 | + | let gb = parseIntValue(fU[ev]) | |
1117 | + | let gc = parseIntValue(eI[ev]) | |
1118 | + | if ((ga == 0)) | |
1119 | + | then $Tuple4((ev + 1), (cT._2 :+ fU[ev]), (cT._3 :+ eI[ev]), cT._4) | |
1120 | + | else if ((ga > 0)) | |
1121 | + | then if ((ga > gc)) | |
1122 | + | then throw((((("Attempt to take " + fm) + " from backpack, but only ") + toString(gc)) + " available")) | |
1123 | + | else $Tuple4((ev + 1), (cT._2 :+ toString((gb + ga))), (cT._3 :+ toString((gc - ga))), (cT._4 + ga)) | |
1124 | + | else if ((-(ga) > gb)) | |
1125 | + | then throw((((("Attempt to take " + toString(-(ga))) + " from warehouse, but only ") + toString(gb)) + " available")) | |
1126 | + | else $Tuple4((ev + 1), (cT._2 :+ toString((gb + ga))), (cT._3 :+ toString((gc - ga))), (cT._4 + ga)) | |
1141 | 1127 | } | |
1142 | 1128 | ||
1143 | - | let | |
1144 | - | let | |
1145 | - | let | |
1146 | - | let | |
1147 | - | func | |
1148 | - | then | |
1149 | - | else | |
1150 | - | ||
1151 | - | func | |
1152 | - | then | |
1129 | + | let de = { | |
1130 | + | let cV = fR | |
1131 | + | let cW = size(cV) | |
1132 | + | let cX = $Tuple4(0, nil, nil, 0) | |
1133 | + | func cY (cZ,da) = if ((da >= cW)) | |
1134 | + | then cZ | |
1135 | + | else fZ(cZ, cV[da]) | |
1136 | + | ||
1137 | + | func db (cZ,da) = if ((da >= cW)) | |
1138 | + | then cZ | |
1153 | 1139 | else throw("List size exceeds 6") | |
1154 | 1140 | ||
1155 | - | | |
1141 | + | db(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6) | |
1156 | 1142 | } | |
1157 | - | func | |
1158 | - | let | |
1159 | - | let | |
1160 | - | let | |
1161 | - | let | |
1162 | - | if (( | |
1163 | - | then $Tuple4(( | |
1164 | - | else if (( | |
1165 | - | then if (( | |
1166 | - | then throw((((("Attempt to take " + | |
1167 | - | else $Tuple4(( | |
1168 | - | else if ((-( | |
1169 | - | then throw((((("Attempt to take " + toString(-( | |
1170 | - | else $Tuple4(( | |
1143 | + | func gd (cT,fm) = { | |
1144 | + | let ev = cT._1 | |
1145 | + | let ga = parseIntValue(fm) | |
1146 | + | let ge = parseIntValue(fV[ev]) | |
1147 | + | let gf = parseIntValue(fX[ev]) | |
1148 | + | if ((ga == 0)) | |
1149 | + | then $Tuple4((ev + 1), (cT._2 :+ fV[ev]), (cT._3 :+ fX[ev]), cT._4) | |
1150 | + | else if ((ga > 0)) | |
1151 | + | then if ((ga > gf)) | |
1152 | + | then throw((((("Attempt to take " + fm) + " from backpack, but only ") + toString(gf)) + " available")) | |
1153 | + | else $Tuple4((ev + 1), (cT._2 :+ toString((ge + ga))), (cT._3 :+ toString((gf - ga))), (cT._4 + ga)) | |
1154 | + | else if ((-(ga) > ge)) | |
1155 | + | then throw((((("Attempt to take " + toString(-(ga))) + " from warehouse, but only ") + toString(ge)) + " available")) | |
1156 | + | else $Tuple4((ev + 1), (cT._2 :+ toString((ge + ga))), (cT._3 :+ toString((gf - ga))), (cT._4 + ga)) | |
1171 | 1157 | } | |
1172 | 1158 | ||
1173 | 1159 | let em = { | |
1174 | - | let | |
1175 | - | let | |
1176 | - | let | |
1177 | - | func | |
1178 | - | then | |
1179 | - | else | |
1180 | - | ||
1181 | - | func | |
1182 | - | then | |
1160 | + | let cV = fS | |
1161 | + | let cW = size(cV) | |
1162 | + | let cX = $Tuple4(0, nil, nil, de._4) | |
1163 | + | func fr (cZ,da) = if ((da >= cW)) | |
1164 | + | then cZ | |
1165 | + | else gd(cZ, cV[da]) | |
1166 | + | ||
1167 | + | func fs (cZ,da) = if ((da >= cW)) | |
1168 | + | then cZ | |
1183 | 1169 | else throw("List size exceeds 6") | |
1184 | 1170 | ||
1185 | - | | |
1171 | + | fs(fr(fr(fr(fr(fr(fr(cX, 0), 1), 2), 3), 4), 5), 6) | |
1186 | 1172 | } | |
1187 | - | func | |
1188 | - | let | |
1189 | - | let | |
1190 | - | let | |
1191 | - | then parseIntValue( | |
1173 | + | func gg (cT,fm) = { | |
1174 | + | let ev = cT._1 | |
1175 | + | let ga = parseIntValue(fm) | |
1176 | + | let gh = if ((size(fW) > ev)) | |
1177 | + | then parseIntValue(fW[ev]) | |
1192 | 1178 | else 0 | |
1193 | - | let | |
1194 | - | then parseIntValue( | |
1179 | + | let gi = if ((size(fY) > ev)) | |
1180 | + | then parseIntValue(fY[ev]) | |
1195 | 1181 | else 0 | |
1196 | - | if (( | |
1197 | - | then $Tuple4(( | |
1198 | - | else if (( | |
1199 | - | then if (( | |
1200 | - | then throw((((("Attempt to take " + | |
1182 | + | if ((ga == 0)) | |
1183 | + | then $Tuple4((ev + 1), (cT._2 :+ toString(gh)), (cT._3 :+ toString(gi)), cT._4) | |
1184 | + | else if ((ga > 0)) | |
1185 | + | then if ((ga > gi)) | |
1186 | + | then throw((((("Attempt to take " + fm) + " from backpack, but only ") + toString(gi)) + " available")) | |
1201 | 1187 | else { | |
1202 | - | let | |
1203 | - | $Tuple4(( | |
1188 | + | let gj = (fL((gh + ga), ao) - fL(gh, ao)) | |
1189 | + | $Tuple4((ev + 1), (cT._2 :+ toString((gh + ga))), (cT._3 :+ toString((gi - ga))), (cT._4 + gj)) | |
1204 | 1190 | } | |
1205 | - | else if ((-( | |
1206 | - | then throw((((("Attempt to take " + toString(-( | |
1191 | + | else if ((-(ga) > gh)) | |
1192 | + | then throw((((("Attempt to take " + toString(-(ga))) + " from warehouse, but only ") + toString(gh)) + " available")) | |
1207 | 1193 | else { | |
1208 | - | let | |
1209 | - | $Tuple4(( | |
1194 | + | let gj = (fL((gh + ga), ao) - fL(gh, ao)) | |
1195 | + | $Tuple4((ev + 1), (cT._2 :+ toString((gh + ga))), (cT._3 :+ toString((gi - ga))), (cT._4 + gj)) | |
1210 | 1196 | } | |
1211 | 1197 | } | |
1212 | 1198 | ||
1213 | - | let | |
1199 | + | let ff = if ((size(fT) != 0)) | |
1214 | 1200 | then { | |
1215 | - | let | |
1216 | - | let | |
1217 | - | let | |
1218 | - | func | |
1219 | - | then | |
1220 | - | else | |
1221 | - | ||
1222 | - | func | |
1223 | - | then | |
1201 | + | let cV = fT | |
1202 | + | let cW = size(cV) | |
1203 | + | let cX = $Tuple4(0, nil, nil, em._4) | |
1204 | + | func fu (cZ,da) = if ((da >= cW)) | |
1205 | + | then cZ | |
1206 | + | else gg(cZ, cV[da]) | |
1207 | + | ||
1208 | + | func fv (cZ,da) = if ((da >= cW)) | |
1209 | + | then cZ | |
1224 | 1210 | else throw("List size exceeds 50") | |
1225 | 1211 | ||
1226 | - | | |
1212 | + | fv(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(cX, 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) | |
1227 | 1213 | } | |
1228 | - | else $Tuple4(0, | |
1229 | - | let | |
1230 | - | if (( | |
1231 | - | then throw((((("Attempt to put total " + toString( | |
1232 | - | else $Tuple7(makeString( | |
1214 | + | else $Tuple4(0, fW, fY, em._4) | |
1215 | + | let gk = ff._4 | |
1216 | + | if ((gk > eK)) | |
1217 | + | then throw((((("Attempt to put total " + toString(gk)) + " stuff, but only ") + toString(eK)) + " warehouse space left")) | |
1218 | + | else $Tuple7(makeString(de._2, "_"), makeString(em._2, "_"), makeString(ff._2, "_"), makeString(de._3, "_"), makeString(em._3, "_"), makeString(ff._3, "_"), gk) | |
1233 | 1219 | } | |
1234 | 1220 | } | |
1235 | 1221 | ||
1236 | 1222 | ||
1237 | - | func | |
1238 | - | let | |
1239 | - | let | |
1240 | - | let | |
1241 | - | let | |
1242 | - | let | |
1243 | - | let | |
1244 | - | let | |
1245 | - | let | |
1246 | - | let | |
1247 | - | let | |
1248 | - | $Tuple2([IntegerEntry( | |
1249 | - | } | |
1250 | - | ||
1251 | - | ||
1252 | - | func | |
1223 | + | func gl (gm,gn) = { | |
1224 | + | let bb = toString(gm) | |
1225 | + | let go = eQ(toBigInt(gn)) | |
1226 | + | let gp = valueOrElse(getInteger(cu()), (ct + 1)) | |
1227 | + | let cw = toString(gp) | |
1228 | + | let eZ = toInt((go % cn)) | |
1229 | + | let ey = eX(go, eZ) | |
1230 | + | let gq = ai[eZ] | |
1231 | + | let gr = Issue(cM(cw, "S"), makeString([cw, "S", ey, gq], "_"), 1, 0, false) | |
1232 | + | let aE = calculateAssetId(gr) | |
1233 | + | let gs = toBase58String(aE) | |
1234 | + | $Tuple2([IntegerEntry(cu(), (gp + 1)), gr, StringEntry(cv(cw), gs), StringEntry(aD(gs), bb), StringEntry(cB(cw), bb), IntegerEntry(aH(gs), 0), IntegerEntry(cz(gs, bb), 0), ScriptTransfer(gm, 1, aE)], $Tuple2(gs, gq)) | |
1235 | + | } | |
1236 | + | ||
1237 | + | ||
1238 | + | func gt (bb,gu,gv) = if (!(sigVerify_8Kb(gu, gv, cf))) | |
1253 | 1239 | then throw("signature does not match") | |
1254 | 1240 | else { | |
1255 | - | let | |
1256 | - | let | |
1257 | - | let | |
1258 | - | let | |
1259 | - | let | |
1260 | - | let | |
1261 | - | let | |
1262 | - | let | |
1263 | - | if (if (( | |
1241 | + | let dr = split(toUtf8String(gu), ";") | |
1242 | + | let gw = split(dr[0], "|") | |
1243 | + | let gx = split(gw[cI], "_") | |
1244 | + | let gy = parseIntValue(gx[0]) | |
1245 | + | let gz = parseIntValue(gx[1]) | |
1246 | + | let gA = split(dr[1], ":") | |
1247 | + | let gB = gA[0] | |
1248 | + | let gC = parseIntValue(gw[cJ]) | |
1249 | + | if (if ((gC > (lastBlock.timestamp + ch))) | |
1264 | 1250 | then true | |
1265 | - | else ((lastBlock.timestamp - | |
1266 | - | then throw(((("signature outdated: logTime=" + toString( | |
1251 | + | else ((lastBlock.timestamp - ch) > gC)) | |
1252 | + | then throw(((("signature outdated: logTime=" + toString(gC)) + ", bcTime=") + toString(lastBlock.timestamp))) | |
1267 | 1253 | else { | |
1268 | - | let | |
1269 | - | let | |
1270 | - | if (( | |
1271 | - | then throw(((("Tx ids don't match! In state: " + | |
1254 | + | let gD = gA[1] | |
1255 | + | let gE = valueOrElse(getString(aC(bb)), "") | |
1256 | + | if ((gE != gD)) | |
1257 | + | then throw(((("Tx ids don't match! In state: " + gE) + ", in msg: ") + gD)) | |
1272 | 1258 | else { | |
1273 | - | let | |
1274 | - | let | |
1275 | - | let | |
1276 | - | let | |
1277 | - | if (( | |
1278 | - | then throw(((("oldHealth=" + toString( | |
1279 | - | else if ((0 >= | |
1259 | + | let r = valueOrErrorMessage(getString(aW(bb)), "You don't have a duck staked") | |
1260 | + | let gF = q(r) | |
1261 | + | let gG = M(valueOrElse(getInteger(u(r)), 0)) | |
1262 | + | let gH = valueOrElse(getInteger(gF), gG) | |
1263 | + | if ((gH != gy)) | |
1264 | + | then throw(((("oldHealth=" + toString(gH)) + " from state does not match one from flight log=") + toString(gy))) | |
1265 | + | else if ((0 >= gy)) | |
1280 | 1266 | then throw("You can't fly with zero health") | |
1281 | 1267 | else { | |
1282 | - | let | |
1283 | - | then | |
1268 | + | let gI = if ((size(gw) > cK)) | |
1269 | + | then gw[cK] | |
1284 | 1270 | else "" | |
1285 | - | let | |
1286 | - | then | |
1271 | + | let gJ = if ((size(gw) > cL)) | |
1272 | + | then gw[cL] | |
1287 | 1273 | else "" | |
1288 | - | let | |
1289 | - | then ( | |
1274 | + | let gK = if (if ((gz > 0)) | |
1275 | + | then (gI == "$") | |
1290 | 1276 | else false) | |
1291 | - | then | |
1277 | + | then bY(invoke(bK, "sendUsdtPrize", [bb], nil)) | |
1292 | 1278 | else 0 | |
1293 | - | $Tuple5( | |
1279 | + | $Tuple5(gz, r, gK, gB, gJ) | |
1294 | 1280 | } | |
1295 | 1281 | } | |
1296 | 1282 | } | |
1297 | 1283 | } | |
1298 | 1284 | ||
1299 | 1285 | ||
1300 | - | func gJ (gk,gl,gs,gt) = { | |
1301 | - | let ba = toString(gk) | |
1302 | - | let eZ = gr(ba, gs, gt) | |
1303 | - | let gD = p(eZ._2) | |
1304 | - | let fd = aW(eZ._2) | |
1305 | - | let fO = fc(fd) | |
1306 | - | let gK = split(fO[az], "_") | |
1307 | - | let gL = makeString(dd(true, gK, cj), "_") | |
1308 | - | let dz = dk(fO[aA], eZ._5) | |
1309 | - | if ((0 >= eZ._1)) | |
1310 | - | then $Tuple3([IntegerEntry(gD, 0), StringEntry(fd, makeString([fO[ax], fO[ay], fO[az], dz], ":"))], "", 0) | |
1311 | - | else { | |
1312 | - | let gM = gj(gk, gl) | |
1313 | - | let gq = gM._2._1 | |
1314 | - | $Tuple3((((gM._1 :+ StringEntry(aX(eZ._2), makeString([gM._2._2, "L", gq], "_"))) :+ IntegerEntry(gD, eZ._1)) :+ StringEntry(fd, makeString([fO[ax], fO[ay], gL, dz], ":"))), gq, eZ._3) | |
1315 | - | } | |
1316 | - | } | |
1317 | - | ||
1318 | - | ||
1319 | - | func gN (aN,gO) = { | |
1320 | - | let fx = valueOrElse(getInteger(aG(aN)), 0) | |
1321 | - | let gP = valueOrElse(getInteger(aH(Y, aN)), 0) | |
1322 | - | let gQ = (fx / 6) | |
1323 | - | let gR = (fx / 7) | |
1324 | - | ((aa + fraction(aa, ((fx + gQ) + (2 * gR)), 5)) + fraction(aa, gP, (gO * 5))) | |
1325 | - | } | |
1326 | - | ||
1327 | - | ||
1328 | - | func gS (b,gT,gU) = { | |
1329 | - | let gV = if ((gT == cD)) | |
1330 | - | then $Tuple2(gU, valueOrElse(getString(aV(b)), "")) | |
1331 | - | else { | |
1332 | - | let q = valueOrErrorMessage(getString(aV(b)), "You don't have a duck staked") | |
1333 | - | let gW = valueOrElse(getString(aX(q)), ad) | |
1334 | - | let gX = split(value(gW), "_") | |
1335 | - | if ((gX[bc] != "L")) | |
1336 | - | then throw((("Duck location type is " + gX[bc]) + ", but should be L")) | |
1337 | - | else $Tuple2(gX[bd], q) | |
1338 | - | } | |
1339 | - | let aN = gV._1 | |
1340 | - | let gY = gV._2 | |
1341 | - | let gZ = value(assetInfo(fromBase58String(aN))) | |
1342 | - | let ha = aF(aN) | |
1343 | - | let hb = valueOrErrorMessage(getInteger(ha), (("Land " + gZ.name) + " is not staked")) | |
1344 | - | let hc = valueOrErrorMessage(getString(aC(aN)), (("NFT " + gZ.name) + " is orphaned")) | |
1345 | - | if ((hc != b)) | |
1346 | - | then throw((W + " is not yours")) | |
1347 | - | else { | |
1348 | - | let hd = split(gZ.description, "_") | |
1349 | - | $Tuple4(gY, aN, hd, hb) | |
1350 | - | } | |
1351 | - | } | |
1352 | - | ||
1353 | - | ||
1354 | - | func he (b,fK,gT,gU) = if ((0 > fK)) | |
1286 | + | func gL (gm,gn,gu,gv) = { | |
1287 | + | let bb = toString(gm) | |
1288 | + | let fa = gt(bb, gu, gv) | |
1289 | + | let r = fa._2 | |
1290 | + | let gF = q(r) | |
1291 | + | let fe = aX(r) | |
1292 | + | let fQ = fd(fe) | |
1293 | + | let gM = split(fQ[aA], "_") | |
1294 | + | let gN = makeString(df(true, gM, cl), "_") | |
1295 | + | let gO = w(r) | |
1296 | + | let gP = valueOrElse(getString(gO), ",;,_,;,_,;,_,;,_,;,_,;,") | |
1297 | + | let gQ = dm(gP, fa._5) | |
1298 | + | if ((0 >= fa._1)) | |
1299 | + | then $Tuple3([IntegerEntry(gF, 0), StringEntry(gO, gQ)], "", 0) | |
1300 | + | else { | |
1301 | + | let gR = gl(gm, gn) | |
1302 | + | let gs = gR._2._1 | |
1303 | + | $Tuple3(((((gR._1 :+ StringEntry(aY(r), makeString([gR._2._2, "L", gs], "_"))) :+ IntegerEntry(gF, fa._1)) :+ StringEntry(gO, gQ)) :+ StringEntry(fe, makeString([fQ[ay], fQ[az], gN, fQ[aB]], ":"))), gs, fa._3) | |
1304 | + | } | |
1305 | + | } | |
1306 | + | ||
1307 | + | ||
1308 | + | func gS (aO,gT) = { | |
1309 | + | let fz = valueOrElse(getInteger(aH(aO)), 0) | |
1310 | + | let gU = valueOrElse(getInteger(aI(Z, aO)), 0) | |
1311 | + | let gV = (fz / 6) | |
1312 | + | let gW = (fz / 7) | |
1313 | + | ((ab + fraction(ab, ((fz + gV) + (2 * gW)), 5)) + fraction(ab, gU, (gT * 5))) | |
1314 | + | } | |
1315 | + | ||
1316 | + | ||
1317 | + | func gX (b,gY,gZ) = { | |
1318 | + | let ha = if ((gY == cF)) | |
1319 | + | then $Tuple2(gZ, valueOrElse(getString(aW(b)), "")) | |
1320 | + | else { | |
1321 | + | let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked") | |
1322 | + | let hb = valueOrElse(getString(aY(r)), ae) | |
1323 | + | let hc = split(value(hb), "_") | |
1324 | + | if ((hc[bd] != "L")) | |
1325 | + | then throw((("Duck location type is " + hc[bd]) + ", but should be L")) | |
1326 | + | else $Tuple2(hc[be], r) | |
1327 | + | } | |
1328 | + | let aO = ha._1 | |
1329 | + | let hd = ha._2 | |
1330 | + | let he = value(assetInfo(fromBase58String(aO))) | |
1331 | + | let hf = aG(aO) | |
1332 | + | let hg = valueOrErrorMessage(getInteger(hf), (("Land " + he.name) + " is not staked")) | |
1333 | + | let hh = valueOrErrorMessage(getString(aD(aO)), (("NFT " + he.name) + " is orphaned")) | |
1334 | + | if ((hh != b)) | |
1335 | + | then throw((X + " is not yours")) | |
1336 | + | else { | |
1337 | + | let hi = split(he.description, "_") | |
1338 | + | $Tuple4(hd, aO, hi, hg) | |
1339 | + | } | |
1340 | + | } | |
1341 | + | ||
1342 | + | ||
1343 | + | func hj (b,fM,gY,gZ) = if ((0 > fM)) | |
1355 | 1344 | then throw("Negative amount") | |
1356 | 1345 | else { | |
1357 | - | let dX = | |
1358 | - | let | |
1359 | - | let | |
1360 | - | let | |
1361 | - | if ((0 > | |
1346 | + | let dX = gX(b, gY, gZ) | |
1347 | + | let cb = dX._3[bP] | |
1348 | + | let er = ex(dX._3[bQ]) | |
1349 | + | let eB = (lastBlock.timestamp - dX._4) | |
1350 | + | if ((0 > eB)) | |
1362 | 1351 | then throw(((("Saved timestamp is in future, saved = " + toString(dX._4)) + ", current = ") + toString(lastBlock.timestamp))) | |
1363 | 1352 | else { | |
1364 | - | let | |
1365 | - | let | |
1366 | - | let | |
1367 | - | if (( | |
1368 | - | then throw(((("Not enough resources, available = " + toString( | |
1353 | + | let gT = ca(cb) | |
1354 | + | let hk = gS(dX._2, gT) | |
1355 | + | let hl = fraction(eB, (hk * gT), ac) | |
1356 | + | if ((fM > hl)) | |
1357 | + | then throw(((("Not enough resources, available = " + toString(hl)) + ", requested = ") + toString(fM))) | |
1369 | 1358 | else { | |
1370 | - | let | |
1371 | - | let | |
1372 | - | let | |
1373 | - | let | |
1374 | - | let | |
1375 | - | let | |
1376 | - | let | |
1377 | - | let | |
1378 | - | let | |
1379 | - | if (if (( | |
1380 | - | then ( | |
1359 | + | let hm = fraction((hl - fM), ac, (hk * gT)) | |
1360 | + | let hn = (lastBlock.timestamp - hm) | |
1361 | + | let fy = (gT / br) | |
1362 | + | let eJ = eF(er, (eB - hm), fy, hk) | |
1363 | + | let fx = aN(dX._2) | |
1364 | + | let fz = valueOrElse(getInteger(aH(dX._2)), 0) | |
1365 | + | let fj = fw(fx, fy, fz) | |
1366 | + | let fF = split(fj[at], "_") | |
1367 | + | let eK = parseIntValue(fF[aw]) | |
1368 | + | if (if ((gY == cF)) | |
1369 | + | then (fM > eK) | |
1381 | 1370 | else false) | |
1382 | - | then throw((("Only " + toString( | |
1371 | + | then throw((("Only " + toString(eK)) + " space left in warehouse")) | |
1383 | 1372 | else { | |
1384 | - | let | |
1385 | - | let | |
1386 | - | let | |
1387 | - | let | |
1388 | - | let | |
1389 | - | then $Tuple4( | |
1390 | - | else if (( | |
1391 | - | then $Tuple4( | |
1373 | + | let fe = aX(dX._1) | |
1374 | + | let fQ = fd(fe) | |
1375 | + | let eI = split(fQ[az], "_") | |
1376 | + | let eH = split(fj[aq], "_") | |
1377 | + | let ho = if ((gY == cF)) | |
1378 | + | then $Tuple4(ez(eH, er, (eB - hm), fy, hk), fQ[az], (parseIntValue(fF[av]) + eJ._2), (parseIntValue(fF[aw]) - eJ._2)) | |
1379 | + | else if ((gY == cG)) | |
1380 | + | then $Tuple4(fj[aq], ez(eI, er, (eB - hm), fy, hk), parseIntValue(fF[av]), parseIntValue(fF[aw])) | |
1392 | 1381 | else { | |
1393 | - | let | |
1394 | - | let | |
1395 | - | $Tuple4( | |
1382 | + | let hp = eG(eH, eI, eJ, eK) | |
1383 | + | let hq = min([parseIntValue(fF[aw]), eJ._2]) | |
1384 | + | $Tuple4(hp._1, hp._2, (parseIntValue(fF[av]) + hq), (parseIntValue(fF[aw]) - hq)) | |
1396 | 1385 | } | |
1397 | - | let | |
1398 | - | let | |
1399 | - | let | |
1400 | - | let | |
1401 | - | $Tuple5([IntegerEntry( | |
1386 | + | let hr = ho._1 | |
1387 | + | let hs = ho._2 | |
1388 | + | let ht = ho._3 | |
1389 | + | let hu = ho._4 | |
1390 | + | $Tuple5([IntegerEntry(aG(dX._2), hn), IntegerEntry(aK(X, dX._2, b), hn)], fe, [fQ[ay], hs, fQ[aA], fQ[aB]], fx, [fj[ap], hr, fj[ar], fj[as], makeString([fF[au], toString(ht), toString(hu), fF[ax]], "_")]) | |
1402 | 1391 | } | |
1403 | 1392 | } | |
1404 | 1393 | } | |
1405 | 1394 | } | |
1406 | 1395 | ||
1407 | 1396 | ||
1408 | - | func | |
1409 | - | let | |
1410 | - | let | |
1411 | - | let | |
1412 | - | | |
1413 | - | } | |
1414 | - | ||
1415 | - | ||
1416 | - | func | |
1417 | - | let b = toString( | |
1418 | - | let dX = | |
1419 | - | let | |
1420 | - | let | |
1421 | - | let | |
1422 | - | if (( | |
1397 | + | func hv (b,aO,gT,gY) = { | |
1398 | + | let hf = aG(aO) | |
1399 | + | let hg = value(getInteger(hf)) | |
1400 | + | let hl = (fraction((lastBlock.timestamp - hg), gS(aO, gT), ac) * gT) | |
1401 | + | hj(b, hl, gY, aO) | |
1402 | + | } | |
1403 | + | ||
1404 | + | ||
1405 | + | func hw (dg,gm,hx,aO) = { | |
1406 | + | let b = toString(gm) | |
1407 | + | let dX = gX(b, cH, aO) | |
1408 | + | let gT = ca(dX._3[bP]) | |
1409 | + | let hy = aH(dX._2) | |
1410 | + | let hz = valueOrElse(getInteger(hy), 0) | |
1411 | + | if ((hz >= 3)) | |
1423 | 1412 | then throw("Currently max infrastructure level = 3") | |
1424 | 1413 | else { | |
1425 | - | let | |
1426 | - | let | |
1427 | - | if (if (!( | |
1428 | - | then ( | |
1414 | + | let R = (hz + 1) | |
1415 | + | let hA = fraction(ck, (gT * R), br) | |
1416 | + | if (if (!(dg)) | |
1417 | + | then (hx != hA) | |
1429 | 1418 | else false) | |
1430 | - | then throw(("Payment attached should be " + toString( | |
1419 | + | then throw(("Payment attached should be " + toString(hA))) | |
1431 | 1420 | else { | |
1432 | - | let | |
1433 | - | let | |
1434 | - | let | |
1435 | - | let | |
1436 | - | let | |
1437 | - | let | |
1438 | - | let | |
1439 | - | let | |
1440 | - | let | |
1441 | - | let | |
1442 | - | let | |
1443 | - | let | |
1444 | - | $Tuple3(([IntegerEntry( | |
1421 | + | let fe = aX(dX._1) | |
1422 | + | let fQ = fd(fe) | |
1423 | + | let gM = split(fQ[aA], "_") | |
1424 | + | let hB = fraction(bm, (gT * R), br) | |
1425 | + | let gN = makeString(df(dg, gM, hB), "_") | |
1426 | + | let hC = hv(b, dX._2, gT, cH) | |
1427 | + | let hD = hC._5 | |
1428 | + | let hE = fg(hD[ap]) | |
1429 | + | let hF = makeString([split(hD[ap], "_")[0], toString(R)], "_") | |
1430 | + | let hG = fg(hF) | |
1431 | + | let fF = split(hD[at], "_") | |
1432 | + | let hH = makeString([fF[au], fF[av], toString(((parseIntValue(fF[aw]) + hG) - hE)), toString(hG)], "_") | |
1433 | + | $Tuple3(([IntegerEntry(hy, R), IntegerEntry(cz(dX._2, b), R), StringEntry(fe, makeString([fQ[ay], hC._3[az], gN, fQ[aB]], ":")), StringEntry(hC._4, makeString([hF, hD[aq], hD[ar], hD[as], hH], ":"))] ++ hC._1), R, hB) | |
1445 | 1434 | } | |
1446 | 1435 | } | |
1447 | 1436 | } | |
1448 | 1437 | ||
1449 | 1438 | ||
1450 | - | func | |
1439 | + | func hI (r,hJ) = if (!(bh)) | |
1451 | 1440 | then $Tuple2(nil, 0) | |
1452 | 1441 | else { | |
1453 | - | let | |
1454 | - | let | |
1455 | - | let | |
1456 | - | let | |
1457 | - | let | |
1458 | - | let | |
1459 | - | $Tuple2([IntegerEntry( | |
1460 | - | } | |
1461 | - | ||
1462 | - | ||
1463 | - | func | |
1442 | + | let hK = u(r) | |
1443 | + | let hL = t(r) | |
1444 | + | let L = valueOrElse(getInteger(T, hL), 0) | |
1445 | + | let Q = (L + hJ) | |
1446 | + | let hM = O(valueOrElse(getInteger(T, hK), 0), Q) | |
1447 | + | let hN = v(r) | |
1448 | + | $Tuple2([IntegerEntry(hK, hM[0]), IntegerEntry(hL, Q), IntegerEntry(hN, (valueOrElse(getInteger(hN), 0) + hM[1]))], Q) | |
1449 | + | } | |
1450 | + | ||
1451 | + | ||
1452 | + | func hO (b,hJ) = if (!(bh)) | |
1464 | 1453 | then $Tuple2(nil, 0) | |
1465 | 1454 | else { | |
1466 | - | let | |
1467 | - | let | |
1468 | - | let | |
1469 | - | let | |
1470 | - | let | |
1471 | - | let | |
1472 | - | $Tuple2([IntegerEntry( | |
1473 | - | } | |
1474 | - | ||
1475 | - | ||
1476 | - | func | |
1477 | - | let | |
1478 | - | let | |
1479 | - | let | |
1480 | - | if (!(isDefined( | |
1455 | + | let hK = y(b) | |
1456 | + | let hL = x(b) | |
1457 | + | let L = valueOrElse(getInteger(T, hL), 0) | |
1458 | + | let Q = (L + hJ) | |
1459 | + | let hM = O(valueOrElse(getInteger(T, hK), 0), Q) | |
1460 | + | let hN = z(b) | |
1461 | + | $Tuple2([IntegerEntry(hK, hM[0]), IntegerEntry(hL, Q), IntegerEntry(hN, (valueOrElse(getInteger(hN), 0) + hM[1]))], Q) | |
1462 | + | } | |
1463 | + | ||
1464 | + | ||
1465 | + | func hP (b) = { | |
1466 | + | let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked") | |
1467 | + | let hQ = aR(b) | |
1468 | + | let hR = getString(hQ) | |
1469 | + | if (!(isDefined(hR))) | |
1481 | 1470 | then throw("You are not eligible for ONBOARD artifact") | |
1482 | 1471 | else { | |
1483 | - | let | |
1484 | - | let | |
1485 | - | if (isDefined( | |
1486 | - | then throw(("You already used your ONBOARD artifact on duck " + value( | |
1472 | + | let hS = aT(b) | |
1473 | + | let hT = getString(hS) | |
1474 | + | if (isDefined(hT)) | |
1475 | + | then throw(("You already used your ONBOARD artifact on duck " + value(hT))) | |
1487 | 1476 | else { | |
1488 | - | let | |
1489 | - | let | |
1490 | - | if (isDefined( | |
1491 | - | then throw(((("The duck " + | |
1492 | - | else ([StringEntry( | |
1477 | + | let hU = aS(r) | |
1478 | + | let hV = getString(hU) | |
1479 | + | if (isDefined(hV)) | |
1480 | + | then throw(((("The duck " + r) + " already got points from ONBOARD artifact from user ") + value(hV))) | |
1481 | + | else ([StringEntry(hS, r), StringEntry(hU, b)] ++ hI(r, I)._1) | |
1493 | 1482 | } | |
1494 | 1483 | } | |
1495 | 1484 | } | |
1496 | 1485 | ||
1497 | 1486 | ||
1498 | - | func | |
1499 | - | let dX = | |
1500 | - | let | |
1501 | - | let | |
1502 | - | let | |
1503 | - | if ((valueOrElse(getInteger( | |
1487 | + | func hW (b,gZ) = { | |
1488 | + | let dX = gX(b, cH, gZ) | |
1489 | + | let aO = dX._2 | |
1490 | + | let gT = ca(dX._3[bP]) | |
1491 | + | let hX = aI(Z, aO) | |
1492 | + | if ((valueOrElse(getInteger(hX), 0) > 0)) | |
1504 | 1493 | then throw("Presale artifact is already activated") | |
1505 | - | else if ((parseIntValue(dX._3[ | |
1506 | - | then throw(((( | |
1494 | + | else if ((parseIntValue(dX._3[bO]) > ct)) | |
1495 | + | then throw((((X + " ") + aO) + " is not eligible for presale artifact")) | |
1507 | 1496 | else { | |
1508 | - | let | |
1509 | - | (((( | |
1497 | + | let hC = hv(b, aO, gT, cH) | |
1498 | + | ((((hC._1 :+ IntegerEntry(hX, gT)) :+ IntegerEntry(cA(Z, aO, b), gT)) :+ StringEntry(hC._2, makeString(hC._3, ":"))) :+ StringEntry(hC._4, makeString(hC._5, ":"))) | |
1510 | 1499 | } | |
1511 | 1500 | } | |
1512 | 1501 | ||
1513 | 1502 | ||
1514 | - | func | |
1515 | - | let | |
1516 | - | func | |
1517 | - | let | |
1518 | - | let | |
1519 | - | let | |
1520 | - | let | |
1521 | - | if (( | |
1522 | - | then throw(( | |
1503 | + | func hY (hZ,R,ia,b,ib,gn,ic) = { | |
1504 | + | let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked") | |
1505 | + | func id (cT,aO) = { | |
1506 | + | let he = value(assetInfo(fromBase58String(aO))) | |
1507 | + | let hf = aG(aO) | |
1508 | + | let hg = valueOrErrorMessage(getInteger(hf), (("NFT " + he.name) + " is not staked")) | |
1509 | + | let hh = valueOrErrorMessage(getString(aD(aO)), (("NFT " + he.name) + " is orphaned")) | |
1510 | + | if ((hh != b)) | |
1511 | + | then throw((X + " is not yours")) | |
1523 | 1512 | else { | |
1524 | - | let | |
1525 | - | let | |
1526 | - | if (if (( | |
1527 | - | then ( | |
1513 | + | let hi = split(he.description, "_") | |
1514 | + | let gq = hi[bR] | |
1515 | + | if (if ((cT._3 != "")) | |
1516 | + | then (cT._3 != gq) | |
1528 | 1517 | else false) | |
1529 | 1518 | then throw("Lands should be on the same continent to merge") | |
1530 | 1519 | else { | |
1531 | - | let | |
1532 | - | let | |
1533 | - | let | |
1534 | - | let | |
1535 | - | let | |
1536 | - | let | |
1537 | - | let | |
1538 | - | let | |
1539 | - | let | |
1540 | - | if (("S" == | |
1520 | + | let cb = hi[bP] | |
1521 | + | let ie = cT._1 | |
1522 | + | let ev = valueOrErrorMessage(indexOf(ie, cb), "You haven't passed all the lands needed") | |
1523 | + | let if = (take(ie, ev) + drop(ie, (ev + 1))) | |
1524 | + | let gT = ca(cb) | |
1525 | + | let ig = (cT._2 + valueOrElse(getInteger(aI(Z, aO)), 0)) | |
1526 | + | let fz = valueOrElse(getInteger(aH(aO)), 0) | |
1527 | + | let ih = { | |
1528 | + | let bk = cb | |
1529 | + | if (("S" == bk)) | |
1541 | 1530 | then 3 | |
1542 | - | else if (("M" == | |
1531 | + | else if (("M" == bk)) | |
1543 | 1532 | then 4 | |
1544 | - | else if (("L" == | |
1533 | + | else if (("L" == bk)) | |
1545 | 1534 | then 5 | |
1546 | - | else if (("XL" == | |
1535 | + | else if (("XL" == bk)) | |
1547 | 1536 | then 6 | |
1548 | 1537 | else throw("Only S, M, L, XL can merge") | |
1549 | 1538 | } | |
1550 | - | if (( | |
1539 | + | if ((fz != ih)) | |
1551 | 1540 | then throw("All lands should be maxed to merge") | |
1552 | 1541 | else { | |
1553 | - | let | |
1554 | - | let | |
1555 | - | let | |
1556 | - | if ((0 > | |
1557 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
1542 | + | let cw = hi[bO] | |
1543 | + | let er = ex(hi[bQ]) | |
1544 | + | let eB = (lastBlock.timestamp - hg) | |
1545 | + | if ((0 > eB)) | |
1546 | + | then throw(((("Saved timestamp is in future, saved = " + toString(hg)) + ", current = ") + toString(lastBlock.timestamp))) | |
1558 | 1547 | else { | |
1559 | - | let | |
1560 | - | let | |
1561 | - | let | |
1562 | - | let | |
1563 | - | let | |
1564 | - | let | |
1565 | - | if (!(isDefined( | |
1566 | - | then throw(("Your staked lands don't contain " + | |
1548 | + | let hk = gS(aO, gT) | |
1549 | + | let fy = (gT / br) | |
1550 | + | let hs = ez(split(cT._4, "_"), er, eB, fy, hk) | |
1551 | + | let dd = ep(split(cT._6, "_"), er, fy, -1) | |
1552 | + | let ii = cT._7 | |
1553 | + | let bJ = indexOf(ii, aO) | |
1554 | + | if (!(isDefined(bJ))) | |
1555 | + | then throw(("Your staked lands don't contain " + aO)) | |
1567 | 1556 | else { | |
1568 | - | let | |
1569 | - | let | |
1570 | - | $Tuple8( | |
1557 | + | let ij = aF(aO) | |
1558 | + | let ik = valueOrElse(getString(ij), "") | |
1559 | + | $Tuple8(if, ig, gq, hs, (((((((((((((cT._5 :+ DeleteEntry(aG(aO))) :+ DeleteEntry(aK(X, aO, b))) :+ DeleteEntry(cv(cw))) :+ DeleteEntry(aD(aO))) :+ DeleteEntry(aH(aO))) :+ DeleteEntry(cz(aO, b))) :+ DeleteEntry(aI(Z, aO))) :+ DeleteEntry(cA(Z, aO, b))) :+ DeleteEntry(cB(cw))) :+ DeleteEntry(aN(aO))) :+ DeleteEntry(ij)) :+ DeleteEntry(cx(ik))) :+ Burn(fromBase58String(aO), 1)), dd, removeByIndex(ii, value(bJ)), (cT._8 + gT)) | |
1571 | 1560 | } | |
1572 | 1561 | } | |
1573 | 1562 | } | |
1574 | 1563 | } | |
1575 | 1564 | } | |
1576 | 1565 | } | |
1577 | 1566 | ||
1578 | - | let | |
1579 | - | let | |
1580 | - | let | |
1581 | - | let | |
1582 | - | let | |
1583 | - | let | |
1584 | - | then split_51C(value( | |
1567 | + | let fe = aX(r) | |
1568 | + | let fQ = fd(fe) | |
1569 | + | let il = valueOrElse(getString(bS()), "0_0_0_0_0_0") | |
1570 | + | let im = bT(b) | |
1571 | + | let in = getString(im) | |
1572 | + | let io = if (isDefined(in)) | |
1573 | + | then split_51C(value(in), "_") | |
1585 | 1574 | else nil | |
1586 | - | let | |
1587 | - | let | |
1588 | - | let | |
1589 | - | let | |
1590 | - | func | |
1591 | - | then | |
1592 | - | else | |
1593 | - | ||
1594 | - | func | |
1595 | - | then | |
1575 | + | let de = { | |
1576 | + | let cV = ib | |
1577 | + | let cW = size(cV) | |
1578 | + | let cX = $Tuple8(ia, 0, "", fQ[az], nil, il, io, 0) | |
1579 | + | func cY (cZ,da) = if ((da >= cW)) | |
1580 | + | then cZ | |
1581 | + | else id(cZ, cV[da]) | |
1582 | + | ||
1583 | + | func db (cZ,da) = if ((da >= cW)) | |
1584 | + | then cZ | |
1596 | 1585 | else throw("List size exceeds 5") | |
1597 | 1586 | ||
1598 | - | | |
1599 | - | } | |
1600 | - | let | |
1601 | - | let | |
1602 | - | let | |
1603 | - | let | |
1604 | - | let | |
1605 | - | let | |
1606 | - | let | |
1607 | - | let | |
1608 | - | let | |
1609 | - | let | |
1610 | - | let | |
1611 | - | $Tuple2(((((((((((((((( | |
1612 | - | then StringEntry( | |
1613 | - | else DeleteEntry( | |
1587 | + | db(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5) | |
1588 | + | } | |
1589 | + | let gq = de._3 | |
1590 | + | let eZ = valueOrErrorMessage(indexOf(ai, gq), ("Unknown continent: " + gq)) | |
1591 | + | let ey = eX(eQ(toBigInt(gn)), eZ) | |
1592 | + | let gp = valueOrElse(getInteger(cu()), (ct + 1)) | |
1593 | + | let ip = toString(gp) | |
1594 | + | let gr = Issue(cM(ip, hZ), makeString([ip, hZ, ey, gq], "_"), 1, 0, false) | |
1595 | + | let aE = calculateAssetId(gr) | |
1596 | + | let iq = toBase58String(aE) | |
1597 | + | let gN = makeString(df((ic > 0), split(fQ[aA], "_"), ic), "_") | |
1598 | + | let ir = bU(b) | |
1599 | + | let is = valueOrElse(getInteger(ir), 0) | |
1600 | + | $Tuple2((((((((((((((((de._5 :+ (if ((size(de._7) > 0)) | |
1601 | + | then StringEntry(im, makeString_11C(de._7, "_")) | |
1602 | + | else DeleteEntry(im))) :+ IntegerEntry(ir, if ((de._8 > is)) | |
1614 | 1603 | then 0 | |
1615 | - | else ( | |
1616 | - | } | |
1617 | - | ||
1618 | - | ||
1619 | - | func | |
1620 | - | ||
1621 | - | ||
1622 | - | func | |
1623 | - | let | |
1624 | - | if (if (!( | |
1625 | - | then ( | |
1604 | + | else (is - de._8))) :+ IntegerEntry(cu(), (gp + 1))) :+ gr) :+ StringEntry(cv(ip), iq)) :+ StringEntry(aD(iq), b)) :+ StringEntry(cB(ip), b)) :+ IntegerEntry(aI(Z, iq), de._2)) :+ IntegerEntry(cA(Z, iq, b), de._2)) :+ IntegerEntry(aH(iq), R)) :+ IntegerEntry(cz(iq, b), R)) :+ StringEntry(fe, makeString([fQ[ay], de._4, gN, fQ[aB]], ":"))) :+ StringEntry(bS(), de._6)) :+ StringEntry(aY(r), makeString([gq, "L", iq], "_"))) :+ ScriptTransfer(addressFromStringValue(b), 1, aE)), iq) | |
1605 | + | } | |
1606 | + | ||
1607 | + | ||
1608 | + | func it (b,ib,gn) = hY("M", 3, "SSSS", b, ib, gn, 0) | |
1609 | + | ||
1610 | + | ||
1611 | + | func iu (b,ib,gn,dg,hx) = { | |
1612 | + | let hA = (ck * 4) | |
1613 | + | if (if (!(dg)) | |
1614 | + | then (hx != hA) | |
1626 | 1615 | else false) | |
1627 | - | then throw(("Payment attached should be " + toString( | |
1628 | - | else | |
1629 | - | } | |
1630 | - | ||
1631 | - | ||
1632 | - | func | |
1633 | - | let | |
1634 | - | if (if (!( | |
1635 | - | then ( | |
1616 | + | then throw(("Payment attached should be " + toString(hA))) | |
1617 | + | else hY("L", 4, "SMM", b, ib, gn, (bm * 4)) | |
1618 | + | } | |
1619 | + | ||
1620 | + | ||
1621 | + | func iv (b,ib,gn,dg,hx) = { | |
1622 | + | let hA = (ck * 47) | |
1623 | + | if (if (!(dg)) | |
1624 | + | then (hx != hA) | |
1636 | 1625 | else false) | |
1637 | - | then throw(("Payment attached should be " + toString( | |
1638 | - | else | |
1639 | - | } | |
1640 | - | ||
1641 | - | ||
1642 | - | func | |
1643 | - | let | |
1644 | - | if (if (!( | |
1645 | - | then ( | |
1626 | + | then throw(("Payment attached should be " + toString(hA))) | |
1627 | + | else hY("XL", 5, "SSSML", b, ib, gn, (bm * 47)) | |
1628 | + | } | |
1629 | + | ||
1630 | + | ||
1631 | + | func iw (b,ib,gn,dg,hx) = { | |
1632 | + | let hA = (ck * 54) | |
1633 | + | if (if (!(dg)) | |
1634 | + | then (hx != hA) | |
1646 | 1635 | else false) | |
1647 | - | then throw(("Payment attached should be " + toString( | |
1648 | - | else | |
1649 | - | } | |
1650 | - | ||
1651 | - | ||
1652 | - | func | |
1653 | - | let | |
1654 | - | let | |
1655 | - | if ((4 == | |
1656 | - | then | |
1657 | - | else if ((3 == | |
1658 | - | then | |
1659 | - | else if ((5 == | |
1660 | - | then | |
1661 | - | else if ((2 == | |
1662 | - | then | |
1636 | + | then throw(("Payment attached should be " + toString(hA))) | |
1637 | + | else hY("XXL", 6, "LXL", b, ib, gn, (bm * 54)) | |
1638 | + | } | |
1639 | + | ||
1640 | + | ||
1641 | + | func ix (dg,b,hx,ib,gn) = { | |
1642 | + | let iy = { | |
1643 | + | let bk = size(ib) | |
1644 | + | if ((4 == bk)) | |
1645 | + | then it(b, ib, gn) | |
1646 | + | else if ((3 == bk)) | |
1647 | + | then iu(b, ib, gn, dg, hx) | |
1648 | + | else if ((5 == bk)) | |
1649 | + | then iv(b, ib, gn, dg, hx) | |
1650 | + | else if ((2 == bk)) | |
1651 | + | then iw(b, ib, gn, dg, hx) | |
1663 | 1652 | else throw("Unknown merge") | |
1664 | 1653 | } | |
1665 | - | | |
1666 | - | } | |
1667 | - | ||
1668 | - | ||
1669 | - | func | |
1670 | - | then valueOrElse(getBoolean( | |
1654 | + | iy | |
1655 | + | } | |
1656 | + | ||
1657 | + | ||
1658 | + | func iz (ev) = if (if ((ev.originCaller != bK)) | |
1659 | + | then valueOrElse(getBoolean(aZ()), false) | |
1671 | 1660 | else false) | |
1672 | 1661 | then throw("Contracts are under maintenance") | |
1673 | - | else StringEntry( | |
1674 | - | ||
1675 | - | ||
1676 | - | @Callable( | |
1677 | - | func constructorV1 ( | |
1662 | + | else StringEntry(aC(toString(ev.originCaller)), toBase58String(ev.transactionId)) | |
1663 | + | ||
1664 | + | ||
1665 | + | @Callable(ev) | |
1666 | + | func constructorV1 (iA) = if ((ev.caller != this)) | |
1678 | 1667 | then throw("Permission denied") | |
1679 | - | else [StringEntry( | |
1680 | - | ||
1681 | - | ||
1682 | - | ||
1683 | - | @Callable( | |
1684 | - | func setBlocked ( | |
1668 | + | else [StringEntry(bE(), iA)] | |
1669 | + | ||
1670 | + | ||
1671 | + | ||
1672 | + | @Callable(ev) | |
1673 | + | func setBlocked (iB) = if ((ev.caller != this)) | |
1685 | 1674 | then throw("permission denied") | |
1686 | - | else [BooleanEntry( | |
1687 | - | ||
1688 | - | ||
1689 | - | ||
1690 | - | @Callable( | |
1675 | + | else [BooleanEntry(aZ(), iB)] | |
1676 | + | ||
1677 | + | ||
1678 | + | ||
1679 | + | @Callable(ev) | |
1691 | 1680 | func stakeLand () = { | |
1692 | - | let | |
1693 | - | if ((size( | |
1681 | + | let iC = iz(ev) | |
1682 | + | if ((size(ev.payments) != 1)) | |
1694 | 1683 | then throw("Exactly one payment required") | |
1695 | 1684 | else { | |
1696 | - | let | |
1697 | - | let | |
1698 | - | let | |
1699 | - | if (( | |
1700 | - | then throw((("NFT " + | |
1685 | + | let iD = value(ev.payments[0]) | |
1686 | + | let aE = value(iD.assetId) | |
1687 | + | let bx = toString(ev.caller) | |
1688 | + | if ((iD.amount != 1)) | |
1689 | + | then throw((("NFT " + X) + " token should be attached as payment")) | |
1701 | 1690 | else { | |
1702 | - | let | |
1703 | - | if (( | |
1691 | + | let he = value(assetInfo(aE)) | |
1692 | + | if ((he.issuer != this)) | |
1704 | 1693 | then throw("Unknown issuer of token") | |
1705 | - | else if (!(contains( | |
1706 | - | then throw((("Only NFT " + | |
1694 | + | else if (!(contains(he.name, X))) | |
1695 | + | then throw((("Only NFT " + X) + " tokens are accepted")) | |
1707 | 1696 | else { | |
1708 | - | let | |
1709 | - | let | |
1710 | - | then dropRight( | |
1711 | - | else if (contains( | |
1712 | - | then dropRight( | |
1713 | - | else dropRight( | |
1714 | - | if (!(isDefined(parseInt( | |
1715 | - | then throw(("Cannot parse land number from " + | |
1697 | + | let iE = drop(he.name, 4) | |
1698 | + | let cw = if (contains(iE, "XXL")) | |
1699 | + | then dropRight(iE, 3) | |
1700 | + | else if (contains(iE, "XL")) | |
1701 | + | then dropRight(iE, 2) | |
1702 | + | else dropRight(iE, 1) | |
1703 | + | if (!(isDefined(parseInt(cw)))) | |
1704 | + | then throw(("Cannot parse land number from " + he.name)) | |
1716 | 1705 | else { | |
1717 | - | let | |
1718 | - | let | |
1719 | - | if (isDefined(getInteger( | |
1720 | - | then throw((("NFT " + | |
1706 | + | let aO = toBase58String(aE) | |
1707 | + | let hf = aG(aO) | |
1708 | + | if (isDefined(getInteger(hf))) | |
1709 | + | then throw((("NFT " + he.name) + " is already staked")) | |
1721 | 1710 | else { | |
1722 | - | let | |
1723 | - | let | |
1724 | - | let | |
1725 | - | let | |
1726 | - | let | |
1727 | - | let | |
1728 | - | let | |
1729 | - | let | |
1730 | - | then split_51C(value( | |
1711 | + | let hi = split(he.description, "_") | |
1712 | + | let er = ex(hi[bQ]) | |
1713 | + | let gT = ca(hi[bP]) | |
1714 | + | let dd = ew(er, (gT / br), 1) | |
1715 | + | let gU = valueOrElse(getInteger(aI(Z, aO)), 0) | |
1716 | + | let im = bT(bx) | |
1717 | + | let in = getString(im) | |
1718 | + | let ii = if (isDefined(in)) | |
1719 | + | then split_51C(value(in), "_") | |
1731 | 1720 | else nil | |
1732 | - | if (containsElement( | |
1733 | - | then throw(("Your staked lands already contain " + | |
1721 | + | if (containsElement(ii, aO)) | |
1722 | + | then throw(("Your staked lands already contain " + aO)) | |
1734 | 1723 | else { | |
1735 | - | let | |
1736 | - | let | |
1737 | - | let | |
1738 | - | let | |
1739 | - | $Tuple2([IntegerEntry( | |
1724 | + | let fz = valueOrElse(getInteger(aH(aO)), 0) | |
1725 | + | let ir = bU(bx) | |
1726 | + | let iF = valueOrElse(getInteger(ir), 0) | |
1727 | + | let iG = bY(invoke(bN, "onStakeUnstakeLand", [bx], nil)) | |
1728 | + | $Tuple2([IntegerEntry(hf, lastBlock.timestamp), IntegerEntry(aK(X, aO, bx), lastBlock.timestamp), StringEntry(im, makeString_11C((ii :+ aO), "_")), IntegerEntry(ir, (iF + gT)), StringEntry(aD(aO), bx), StringEntry(cB(cw), bx), IntegerEntry(cA(Z, aO, bx), gU), IntegerEntry(cz(aO, bx), fz), StringEntry(bS(), dd), iC], iG) | |
1740 | 1729 | } | |
1741 | 1730 | } | |
1742 | 1731 | } | |
1743 | 1732 | } | |
1744 | 1733 | } | |
1745 | 1734 | } | |
1746 | 1735 | } | |
1747 | 1736 | ||
1748 | 1737 | ||
1749 | 1738 | ||
1750 | - | @Callable( | |
1751 | - | func unstakeLand ( | |
1752 | - | let | |
1753 | - | if ((size( | |
1739 | + | @Callable(ev) | |
1740 | + | func unstakeLand (gZ) = { | |
1741 | + | let iC = iz(ev) | |
1742 | + | if ((size(ev.payments) != 0)) | |
1754 | 1743 | then throw("No payments required") | |
1755 | 1744 | else { | |
1756 | - | let b = toString( | |
1757 | - | let dX = | |
1758 | - | let | |
1759 | - | let | |
1760 | - | let | |
1761 | - | let | |
1762 | - | let | |
1763 | - | let | |
1764 | - | let | |
1765 | - | let | |
1766 | - | if (!(isDefined( | |
1767 | - | then throw(("Your staked lands don't contain " + | |
1745 | + | let b = toString(ev.caller) | |
1746 | + | let dX = gX(b, cG, gZ) | |
1747 | + | let aO = dX._2 | |
1748 | + | let im = bT(b) | |
1749 | + | let er = ex(dX._3[bQ]) | |
1750 | + | let gT = ca(dX._3[bP]) | |
1751 | + | let dd = ew(er, (gT / br), -1) | |
1752 | + | let hC = hv(b, aO, gT, cG) | |
1753 | + | let ii = split_51C(valueOrElse(getString(im), ""), "_") | |
1754 | + | let bJ = indexOf(ii, aO) | |
1755 | + | if (!(isDefined(bJ))) | |
1756 | + | then throw(("Your staked lands don't contain " + aO)) | |
1768 | 1757 | else { | |
1769 | - | let | |
1770 | - | let | |
1771 | - | if (( | |
1772 | - | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString( | |
1758 | + | let iH = lastBlock.timestamp | |
1759 | + | let iI = valueOrElse(getInteger(bM, ba(b)), 0) | |
1760 | + | if ((iI >= iH)) | |
1761 | + | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(iI))) | |
1773 | 1762 | else { | |
1774 | - | let | |
1775 | - | if (( | |
1776 | - | then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString( | |
1763 | + | let iJ = (valueOrElse(getInteger(bN, a(b)), 0) + bn) | |
1764 | + | if ((iJ > iH)) | |
1765 | + | then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(iJ))) | |
1777 | 1766 | else { | |
1778 | - | let | |
1779 | - | let | |
1780 | - | let | |
1767 | + | let ir = bU(b) | |
1768 | + | let is = valueOrElse(getInteger(ir), 0) | |
1769 | + | let iK = if ((gT > is)) | |
1781 | 1770 | then 0 | |
1782 | - | else ( | |
1783 | - | let | |
1784 | - | $Tuple2([ScriptTransfer( | |
1785 | - | then StringEntry( | |
1786 | - | else DeleteEntry( | |
1771 | + | else (is - gT) | |
1772 | + | let iG = bY(invoke(bN, "onStakeUnstakeLand", [b], nil)) | |
1773 | + | $Tuple2([ScriptTransfer(ev.caller, 1, fromBase58String(aO)), DeleteEntry(aG(aO)), DeleteEntry(aK(X, aO, b)), StringEntry(bS(), dd), StringEntry(hC._2, makeString(hC._3, ":")), if ((size(ii) > 1)) | |
1774 | + | then StringEntry(im, makeString_11C(removeByIndex(ii, value(bJ)), "_")) | |
1775 | + | else DeleteEntry(im), IntegerEntry(ir, iK), iC], iG) | |
1787 | 1776 | } | |
1788 | 1777 | } | |
1789 | 1778 | } | |
1790 | 1779 | } | |
1791 | 1780 | } | |
1792 | 1781 | ||
1793 | 1782 | ||
1794 | 1783 | ||
1795 | - | @Callable( | |
1784 | + | @Callable(ev) | |
1796 | 1785 | func stakeDuck () = { | |
1797 | - | let | |
1798 | - | if ((size( | |
1786 | + | let iC = iz(ev) | |
1787 | + | if ((size(ev.payments) != 1)) | |
1799 | 1788 | then throw("Exactly one payment required") | |
1800 | 1789 | else { | |
1801 | - | let | |
1802 | - | let | |
1803 | - | let | |
1804 | - | if (( | |
1805 | - | then throw((("NFT " + | |
1790 | + | let iD = value(ev.payments[0]) | |
1791 | + | let aE = value(iD.assetId) | |
1792 | + | let bx = toString(ev.caller) | |
1793 | + | if ((iD.amount != 1)) | |
1794 | + | then throw((("NFT " + Y) + " token should be attached as payment")) | |
1806 | 1795 | else { | |
1807 | - | let | |
1808 | - | if (if (( | |
1809 | - | then ( | |
1796 | + | let he = value(assetInfo(aE)) | |
1797 | + | if (if ((he.issuer != cd)) | |
1798 | + | then (he.issuer != ce) | |
1810 | 1799 | else false) | |
1811 | - | then throw((("Unknown issuer of " + | |
1812 | - | else if (!(contains( | |
1813 | - | then throw((("Only NFT " + | |
1800 | + | then throw((("Unknown issuer of " + Y) + " token")) | |
1801 | + | else if (!(contains(he.name, Y))) | |
1802 | + | then throw((("Only NFT " + Y) + " tokens are accepted")) | |
1814 | 1803 | else { | |
1815 | - | let | |
1816 | - | let | |
1817 | - | if (isDefined(getInteger( | |
1818 | - | then throw((("NFT " + | |
1819 | - | else if (isDefined(getString( | |
1820 | - | then throw(("You already staked one duck: " + | |
1804 | + | let iL = toBase58String(aE) | |
1805 | + | let hf = aG(iL) | |
1806 | + | if (isDefined(getInteger(hf))) | |
1807 | + | then throw((("NFT " + he.name) + " is already staked")) | |
1808 | + | else if (isDefined(getString(aW(bx)))) | |
1809 | + | then throw(("You already staked one duck: " + he.name)) | |
1821 | 1810 | else { | |
1822 | - | let | |
1823 | - | let | |
1824 | - | let | |
1825 | - | let | |
1826 | - | let | |
1827 | - | let | |
1828 | - | let | |
1829 | - | ([IntegerEntry( | |
1811 | + | let iM = aY(iL) | |
1812 | + | let iN = getString(iM) | |
1813 | + | let fe = aX(iL) | |
1814 | + | let iO = getString(fe) | |
1815 | + | let gF = q(iL) | |
1816 | + | let gG = M(valueOrElse(getInteger(u(iL)), 0)) | |
1817 | + | let iP = valueOrElse(getInteger(gF), gG) | |
1818 | + | ([IntegerEntry(hf, lastBlock.timestamp), IntegerEntry(aK(Y, toBase58String(aE), bx), lastBlock.timestamp), StringEntry(aV(iL), bx), StringEntry(aW(bx), iL)] ++ (if (isDefined(iN)) | |
1830 | 1819 | then nil | |
1831 | - | else ([StringEntry( | |
1820 | + | else ([StringEntry(iM, ae)] ++ (if (isDefined(iO)) | |
1832 | 1821 | then nil | |
1833 | - | else (([StringEntry( | |
1822 | + | else (([StringEntry(fe, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(gF, iP)) :+ iC))))) | |
1834 | 1823 | } | |
1835 | 1824 | } | |
1836 | 1825 | } | |
1837 | 1826 | } | |
1838 | 1827 | } | |
1839 | 1828 | ||
1840 | 1829 | ||
1841 | 1830 | ||
1842 | - | @Callable( | |
1843 | - | func unstakeDuck ( | |
1844 | - | let | |
1845 | - | if ((size( | |
1831 | + | @Callable(ev) | |
1832 | + | func unstakeDuck (iL) = { | |
1833 | + | let iC = iz(ev) | |
1834 | + | if ((size(ev.payments) != 0)) | |
1846 | 1835 | then throw("No payments required") | |
1847 | 1836 | else { | |
1848 | - | let | |
1849 | - | let | |
1850 | - | let | |
1851 | - | let | |
1852 | - | if (!(isDefined(getInteger( | |
1853 | - | then throw((("NFT " + | |
1854 | - | else if (!(isDefined(getString( | |
1855 | - | then throw((("The duck " + | |
1837 | + | let aE = fromBase58String(iL) | |
1838 | + | let bx = toString(ev.caller) | |
1839 | + | let he = value(assetInfo(aE)) | |
1840 | + | let hf = aG(toBase58String(aE)) | |
1841 | + | if (!(isDefined(getInteger(hf)))) | |
1842 | + | then throw((("NFT " + he.name) + " is not staked")) | |
1843 | + | else if (!(isDefined(getString(aW(bx))))) | |
1844 | + | then throw((("The duck " + he.name) + " is not staked")) | |
1856 | 1845 | else { | |
1857 | - | let | |
1858 | - | if (( | |
1846 | + | let hh = valueOrErrorMessage(getString(aV(toBase58String(aE))), (("NFT " + he.name) + " is orphaned")) | |
1847 | + | if ((hh != bx)) | |
1859 | 1848 | then throw("Staked NFT is not yours") | |
1860 | 1849 | else { | |
1861 | - | let | |
1862 | - | let | |
1863 | - | let | |
1864 | - | if (( | |
1865 | - | then throw((("Please heal your duck to " + toString( | |
1866 | - | else [ScriptTransfer( | |
1850 | + | let gF = q(iL) | |
1851 | + | let gG = M(valueOrElse(getInteger(u(iL)), 0)) | |
1852 | + | let W = valueOrElse(getInteger(gF), gG) | |
1853 | + | if ((gG > W)) | |
1854 | + | then throw((("Please heal your duck to " + toString(gG)) + "hp before unstaking")) | |
1855 | + | else [ScriptTransfer(ev.caller, 1, aE), DeleteEntry(hf), DeleteEntry(gF), DeleteEntry(aY(iL)), DeleteEntry(aV(iL)), DeleteEntry(aK(Y, iL, bx)), DeleteEntry(aW(bx)), iC] | |
1867 | 1856 | } | |
1868 | 1857 | } | |
1869 | 1858 | } | |
1870 | 1859 | } | |
1871 | 1860 | ||
1872 | 1861 | ||
1873 | 1862 | ||
1874 | - | @Callable( | |
1875 | - | func claimRes ( | |
1876 | - | let | |
1877 | - | if ((size( | |
1863 | + | @Callable(ev) | |
1864 | + | func claimRes (fM,iQ) = { | |
1865 | + | let iC = iz(ev) | |
1866 | + | if ((size(ev.payments) != 0)) | |
1878 | 1867 | then throw("No payments required") | |
1879 | 1868 | else { | |
1880 | - | let b = toString( | |
1881 | - | let | |
1882 | - | let | |
1883 | - | $Tuple2((((( | |
1884 | - | } | |
1885 | - | } | |
1886 | - | ||
1887 | - | ||
1888 | - | ||
1889 | - | @Callable( | |
1890 | - | func claimResToWH ( | |
1891 | - | let | |
1892 | - | if ((size( | |
1869 | + | let b = toString(ev.originCaller) | |
1870 | + | let dl = hj(b, fM, cG, iQ) | |
1871 | + | let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked") | |
1872 | + | $Tuple2(((((dl._1 ++ hI(r, fraction(A, fM, bq))._1) :+ StringEntry(dl._2, makeString(dl._3, ":"))) :+ StringEntry(dl._4, makeString(dl._5, ":"))) :+ iC), dl._3[az]) | |
1873 | + | } | |
1874 | + | } | |
1875 | + | ||
1876 | + | ||
1877 | + | ||
1878 | + | @Callable(ev) | |
1879 | + | func claimResToWH (fM,iQ) = { | |
1880 | + | let iC = iz(ev) | |
1881 | + | if ((size(ev.payments) != 0)) | |
1893 | 1882 | then throw("No payments required") | |
1894 | 1883 | else { | |
1895 | - | let b = toString( | |
1896 | - | let | |
1897 | - | $Tuple2((((( | |
1898 | - | } | |
1899 | - | } | |
1900 | - | ||
1901 | - | ||
1902 | - | ||
1903 | - | @Callable( | |
1904 | - | func flight ( | |
1905 | - | let | |
1906 | - | if ((size( | |
1884 | + | let b = toString(ev.originCaller) | |
1885 | + | let dl = hj(b, fM, cF, iQ) | |
1886 | + | $Tuple2(((((dl._1 ++ hO(b, fraction(A, fM, bq))._1) :+ StringEntry(dl._2, makeString(dl._3, ":"))) :+ StringEntry(dl._4, makeString(dl._5, ":"))) :+ iC), dl._5[aq]) | |
1887 | + | } | |
1888 | + | } | |
1889 | + | ||
1890 | + | ||
1891 | + | ||
1892 | + | @Callable(ev) | |
1893 | + | func flight (gu,gv) = { | |
1894 | + | let iC = iz(ev) | |
1895 | + | if ((size(ev.payments) != 0)) | |
1907 | 1896 | then throw("No payments required") | |
1908 | 1897 | else { | |
1909 | - | let | |
1910 | - | let | |
1911 | - | let | |
1912 | - | let | |
1913 | - | let | |
1914 | - | if (( | |
1898 | + | let bb = toString(ev.caller) | |
1899 | + | let fa = gt(bb, gu, gv) | |
1900 | + | let r = fa._2 | |
1901 | + | let iM = aY(r) | |
1902 | + | let hb = valueOrElse(getString(iM), ae) | |
1903 | + | if ((fa._4 == hb)) | |
1915 | 1904 | then throw("You can't fly to the same location") | |
1916 | 1905 | else { | |
1917 | - | let | |
1918 | - | let | |
1919 | - | let | |
1920 | - | $Tuple2(([StringEntry( | |
1921 | - | then | |
1922 | - | else | |
1923 | - | then | |
1924 | - | else | |
1906 | + | let gO = w(r) | |
1907 | + | let gP = valueOrElse(getString(gO), ",;,_,;,_,;,_,;,_,;,_,;,") | |
1908 | + | let gQ = dm(gP, fa._5) | |
1909 | + | $Tuple2(([StringEntry(iM, if ((fa._1 > 0)) | |
1910 | + | then fa._4 | |
1911 | + | else hb), StringEntry(gO, gQ), IntegerEntry(q(r), fa._1), iC] ++ hI(r, if ((fa._1 > 0)) | |
1912 | + | then B | |
1913 | + | else C)._1), fa._3) | |
1925 | 1914 | } | |
1926 | 1915 | } | |
1927 | 1916 | } | |
1928 | 1917 | ||
1929 | 1918 | ||
1930 | 1919 | ||
1931 | - | @Callable( | |
1932 | - | func heal ( | |
1933 | - | let | |
1934 | - | if (if (if ((0 > | |
1920 | + | @Callable(ev) | |
1921 | + | func heal (iR,iS,iT) = { | |
1922 | + | let iC = iz(ev) | |
1923 | + | if (if (if ((0 > iR)) | |
1935 | 1924 | then true | |
1936 | - | else (0 > | |
1925 | + | else (0 > iS)) | |
1937 | 1926 | then true | |
1938 | - | else (0 > | |
1927 | + | else (0 > iT)) | |
1939 | 1928 | then throw("Quantity cannot be negative") | |
1940 | 1929 | else { | |
1941 | - | let | |
1942 | - | let | |
1943 | - | let | |
1944 | - | let | |
1945 | - | let | |
1946 | - | if (( | |
1947 | - | then throw((("HP should be < " + toString( | |
1930 | + | let r = valueOrErrorMessage(getString(aW(toString(ev.caller))), "You don't have a duck staked") | |
1931 | + | let iU = [iR, iS, iT] | |
1932 | + | let gF = q(r) | |
1933 | + | let gG = M(valueOrElse(getInteger(u(r)), 0)) | |
1934 | + | let iV = valueOrElse(getInteger(gF), gG) | |
1935 | + | if ((iV >= gG)) | |
1936 | + | then throw((("HP should be < " + toString(gG)) + " to heal")) | |
1948 | 1937 | else { | |
1949 | - | let | |
1950 | - | let | |
1951 | - | let | |
1938 | + | let fe = aX(r) | |
1939 | + | let fQ = fd(fe) | |
1940 | + | let iW = if ((fQ[aB] == "")) | |
1952 | 1941 | then nil | |
1953 | - | else split( | |
1954 | - | func | |
1955 | - | let | |
1956 | - | let | |
1957 | - | then parseIntValue( | |
1942 | + | else split(fQ[aB], "_") | |
1943 | + | func iX (cT,iY) = { | |
1944 | + | let bZ = cT._2 | |
1945 | + | let eR = if ((size(iW) > bZ)) | |
1946 | + | then parseIntValue(iW[bZ]) | |
1958 | 1947 | else 0 | |
1959 | - | if ((3 > | |
1948 | + | if ((3 > bZ)) | |
1960 | 1949 | then { | |
1961 | - | let | |
1962 | - | if (( | |
1963 | - | then throw(((("You have only " + toString( | |
1964 | - | else $Tuple3(( | |
1950 | + | let iZ = iU[bZ] | |
1951 | + | if ((iZ > eR)) | |
1952 | + | then throw(((("You have only " + toString(eR)) + " of ") + ah[bZ])) | |
1953 | + | else $Tuple3((cT._1 :+ toString((eR - iZ))), (bZ + 1), (cT._3 + (cg[bZ] * iZ))) | |
1965 | 1954 | } | |
1966 | - | else $Tuple3(( | |
1955 | + | else $Tuple3((cT._1 :+ toString(eR)), (bZ + 1), cT._3) | |
1967 | 1956 | } | |
1968 | 1957 | ||
1969 | - | let | |
1970 | - | let | |
1971 | - | let | |
1972 | - | let | |
1973 | - | func | |
1974 | - | then | |
1975 | - | else | |
1976 | - | ||
1977 | - | func | |
1978 | - | then | |
1958 | + | let dl = { | |
1959 | + | let cV = ak | |
1960 | + | let cW = size(cV) | |
1961 | + | let cX = $Tuple3(nil, 0, 0) | |
1962 | + | func cY (cZ,da) = if ((da >= cW)) | |
1963 | + | then cZ | |
1964 | + | else iX(cZ, cV[da]) | |
1965 | + | ||
1966 | + | func db (cZ,da) = if ((da >= cW)) | |
1967 | + | then cZ | |
1979 | 1968 | else throw("List size exceeds 50") | |
1980 | 1969 | ||
1981 | - | | |
1970 | + | db(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cX, 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) | |
1982 | 1971 | } | |
1983 | - | let | |
1984 | - | $Tuple2(([IntegerEntry( | |
1972 | + | let ja = min([gG, (iV + dl._3)]) | |
1973 | + | $Tuple2(([IntegerEntry(gF, ja), StringEntry(fe, makeString_2C([fQ[ay], fQ[az], fQ[aA], makeString(dl._1, "_")], ":")), iC] ++ hI(r, (J * ((iR + iS) + iT)))._1), ja) | |
1985 | 1974 | } | |
1986 | 1975 | } | |
1987 | 1976 | } | |
1988 | 1977 | ||
1989 | 1978 | ||
1990 | 1979 | ||
1991 | - | @Callable( | |
1980 | + | @Callable(ev) | |
1992 | 1981 | func healES () = { | |
1993 | - | let | |
1994 | - | if ((size( | |
1982 | + | let iC = iz(ev) | |
1983 | + | if ((size(ev.payments) != 1)) | |
1995 | 1984 | then throw("Exactly one payment required") | |
1996 | 1985 | else { | |
1997 | - | let | |
1998 | - | if (( | |
1986 | + | let iD = value(ev.payments[0]) | |
1987 | + | if ((iD.assetId != bj)) | |
1999 | 1988 | then throw("Allowed USDT payment only!") | |
2000 | 1989 | else { | |
2001 | - | let | |
2002 | - | let | |
2003 | - | let | |
2004 | - | let | |
2005 | - | if (( | |
1990 | + | let r = valueOrErrorMessage(getString(aW(toString(ev.caller))), "You don't have a duck staked") | |
1991 | + | let gF = q(r) | |
1992 | + | let gG = M(valueOrElse(getInteger(u(r)), 0)) | |
1993 | + | let iV = valueOrElse(getInteger(gF), gG) | |
1994 | + | if ((iV > 0)) | |
2006 | 1995 | then throw("HP should be 0 to call Emergency Service") | |
2007 | 1996 | else { | |
2008 | - | let | |
2009 | - | let | |
2010 | - | let | |
1997 | + | let fe = aX(r) | |
1998 | + | let fQ = fd(fe) | |
1999 | + | let iW = if ((fQ[aB] == "")) | |
2011 | 2000 | then nil | |
2012 | - | else split( | |
2013 | - | let | |
2014 | - | then parseIntValue( | |
2001 | + | else split(fQ[aB], "_") | |
2002 | + | let jb = if ((size(iW) > 0)) | |
2003 | + | then parseIntValue(iW[0]) | |
2015 | 2004 | else 0 | |
2016 | - | let | |
2017 | - | then parseIntValue( | |
2005 | + | let jc = if ((size(iW) > 1)) | |
2006 | + | then parseIntValue(iW[1]) | |
2018 | 2007 | else 0 | |
2019 | - | let | |
2020 | - | then parseIntValue( | |
2008 | + | let jd = if ((size(iW) > 2)) | |
2009 | + | then parseIntValue(iW[2]) | |
2021 | 2010 | else 0 | |
2022 | - | if (if (if (( | |
2011 | + | if (if (if ((jb > 0)) | |
2023 | 2012 | then true | |
2024 | - | else ( | |
2013 | + | else (jc > 0)) | |
2025 | 2014 | then true | |
2026 | - | else ( | |
2015 | + | else (jd > 0)) | |
2027 | 2016 | then throw("You have to use own Medical Kit") | |
2028 | 2017 | else { | |
2029 | - | let | |
2030 | - | let | |
2031 | - | then split(value( | |
2018 | + | let je = getString(bL, bc()) | |
2019 | + | let jf = if (isDefined(je)) | |
2020 | + | then split(value(je), "_") | |
2032 | 2021 | else nil | |
2033 | - | let | |
2034 | - | then parseIntValue( | |
2022 | + | let jg = if ((size(jf) > 0)) | |
2023 | + | then parseIntValue(jf[0]) | |
2035 | 2024 | else 0 | |
2036 | - | if ((0 >= | |
2025 | + | if ((0 >= jg)) | |
2037 | 2026 | then throw("There are no Medical Kits L1 at Emergency Service storage") | |
2038 | 2027 | else { | |
2039 | - | let | |
2040 | - | let | |
2041 | - | let | |
2042 | - | let | |
2043 | - | let | |
2044 | - | if (( | |
2045 | - | then throw(("Payment attached should be " + toString( | |
2028 | + | let ja = (iV + cg[0]) | |
2029 | + | let jh = makeString([toString((jg - 1)), removeByIndex(jf, 0)], "_") | |
2030 | + | let bg = split(ak[0], "_") | |
2031 | + | let ji = bf(bg) | |
2032 | + | let jj = fraction((ji * ag), af, (10 * ao)) | |
2033 | + | if ((iD.amount != jj)) | |
2034 | + | then throw(("Payment attached should be " + toString(jj))) | |
2046 | 2035 | else { | |
2047 | - | let | |
2048 | - | $Tuple2(([IntegerEntry( | |
2036 | + | let dl = bV(invoke(bL, "updateEsStorage", [jh], [AttachedPayment(bj, jj)])) | |
2037 | + | $Tuple2(([IntegerEntry(gF, ja), iC] ++ hI(r, D)._1), dl) | |
2049 | 2038 | } | |
2050 | 2039 | } | |
2051 | 2040 | } | |
2052 | 2041 | } | |
2053 | 2042 | } | |
2054 | 2043 | } | |
2055 | 2044 | } | |
2056 | 2045 | ||
2057 | 2046 | ||
2058 | 2047 | ||
2059 | - | @Callable( | |
2060 | - | func updateBackpack ( | |
2048 | + | @Callable(ev) | |
2049 | + | func updateBackpack (r,jk) = if ((ev.caller != bL)) | |
2061 | 2050 | then throw("permission denied") | |
2062 | - | else $Tuple2([StringEntry( | |
2063 | - | ||
2064 | - | ||
2065 | - | ||
2066 | - | @Callable( | |
2051 | + | else $Tuple2([StringEntry(aX(r), jk)], jk) | |
2052 | + | ||
2053 | + | ||
2054 | + | ||
2055 | + | @Callable(ev) | |
2067 | 2056 | func buySLand () = { | |
2068 | - | let | |
2069 | - | if ((size( | |
2057 | + | let iC = iz(ev) | |
2058 | + | if ((size(ev.payments) != 1)) | |
2070 | 2059 | then throw("Exactly one payment required") | |
2071 | 2060 | else { | |
2072 | - | let | |
2073 | - | if (( | |
2061 | + | let iD = value(ev.payments[0]) | |
2062 | + | if ((iD.assetId != bj)) | |
2074 | 2063 | then throw("Allowed USDT payment only!") | |
2075 | - | else if (( | |
2076 | - | then throw(("Payment attached should be " + toString( | |
2064 | + | else if ((iD.amount != cm)) | |
2065 | + | then throw(("Payment attached should be " + toString(cm))) | |
2077 | 2066 | else { | |
2078 | - | let | |
2079 | - | $Tuple2(((( | |
2067 | + | let dl = gl(ev.caller, ev.transactionId) | |
2068 | + | $Tuple2((((dl._1 :+ ScriptTransfer(bL, iD.amount, bj)) ++ hO(toString(ev.caller), F)._1) :+ iC), dl._2._1) | |
2080 | 2069 | } | |
2081 | 2070 | } | |
2082 | 2071 | } | |
2083 | 2072 | ||
2084 | 2073 | ||
2085 | 2074 | ||
2086 | - | @Callable( | |
2087 | - | func expedition ( | |
2088 | - | let | |
2089 | - | if ((size( | |
2075 | + | @Callable(ev) | |
2076 | + | func expedition (gu,gv) = { | |
2077 | + | let iC = iz(ev) | |
2078 | + | if ((size(ev.payments) != 0)) | |
2090 | 2079 | then throw("No payments required") | |
2091 | 2080 | else { | |
2092 | - | let | |
2093 | - | let | |
2094 | - | $Tuple2((( | |
2095 | - | } | |
2096 | - | } | |
2097 | - | ||
2098 | - | ||
2099 | - | ||
2100 | - | @Callable( | |
2101 | - | func upgradeInfra ( | |
2102 | - | let | |
2103 | - | if ((size( | |
2081 | + | let dl = gL(ev.caller, ev.transactionId, gu, gv) | |
2082 | + | let r = valueOrErrorMessage(getString(aW(toString(ev.caller))), "You don't have a duck staked") | |
2083 | + | $Tuple2(((dl._1 ++ hI(r, F)._1) :+ iC), $Tuple2(dl._2, dl._3)) | |
2084 | + | } | |
2085 | + | } | |
2086 | + | ||
2087 | + | ||
2088 | + | ||
2089 | + | @Callable(ev) | |
2090 | + | func upgradeInfra (aO) = { | |
2091 | + | let iC = iz(ev) | |
2092 | + | if ((size(ev.payments) != 0)) | |
2104 | 2093 | then throw("No payments required") | |
2105 | 2094 | else { | |
2106 | - | let | |
2107 | - | let | |
2108 | - | $Tuple2((( | |
2109 | - | } | |
2110 | - | } | |
2111 | - | ||
2112 | - | ||
2113 | - | ||
2114 | - | @Callable( | |
2115 | - | func upgradeInfraUsdt ( | |
2095 | + | let dl = hw(true, ev.caller, 0, aO) | |
2096 | + | let r = valueOrErrorMessage(getString(aW(toString(ev.caller))), "You don't have a duck staked") | |
2097 | + | $Tuple2(((dl._1 :+ iC) ++ hI(r, fraction(G, dl._3, bq))._1), dl._2) | |
2098 | + | } | |
2099 | + | } | |
2100 | + | ||
2101 | + | ||
2102 | + | ||
2103 | + | @Callable(ev) | |
2104 | + | func upgradeInfraUsdt (aO) = if ((ev.caller != this)) | |
2116 | 2105 | then throw("Permission denied") | |
2117 | 2106 | else { | |
2118 | - | let | |
2119 | - | if ((size( | |
2107 | + | let iC = iz(ev) | |
2108 | + | if ((size(ev.payments) != 1)) | |
2120 | 2109 | then throw("Exactly one payment required") | |
2121 | 2110 | else { | |
2122 | - | let | |
2123 | - | if (( | |
2111 | + | let iD = value(ev.payments[0]) | |
2112 | + | if ((iD.assetId != bj)) | |
2124 | 2113 | then throw("Allowed USDT payment only!") | |
2125 | 2114 | else { | |
2126 | - | let | |
2127 | - | $Tuple2((( | |
2115 | + | let dl = hw(false, ev.caller, iD.amount, aO) | |
2116 | + | $Tuple2(((dl._1 :+ ScriptTransfer(bL, iD.amount, bj)) :+ iC), dl._2) | |
2128 | 2117 | } | |
2129 | 2118 | } | |
2130 | 2119 | } | |
2131 | 2120 | ||
2132 | 2121 | ||
2133 | 2122 | ||
2134 | - | @Callable( | |
2135 | - | func activateArtifact ( | |
2136 | - | let | |
2137 | - | if ((size( | |
2123 | + | @Callable(ev) | |
2124 | + | func activateArtifact (jl,jm) = { | |
2125 | + | let iC = iz(ev) | |
2126 | + | if ((size(ev.payments) != 0)) | |
2138 | 2127 | then throw("No payments required") | |
2139 | 2128 | else { | |
2140 | - | let b = toString( | |
2141 | - | let | |
2142 | - | let | |
2143 | - | if (("PRESALE" == | |
2144 | - | then | |
2145 | - | else if (("ONBOARD" == | |
2146 | - | then | |
2129 | + | let b = toString(ev.caller) | |
2130 | + | let dl = { | |
2131 | + | let bk = jl | |
2132 | + | if (("PRESALE" == bk)) | |
2133 | + | then hW(b, jm) | |
2134 | + | else if (("ONBOARD" == bk)) | |
2135 | + | then hP(b) | |
2147 | 2136 | else throw("Unknown artifact") | |
2148 | 2137 | } | |
2149 | - | ( | |
2150 | - | } | |
2151 | - | } | |
2152 | - | ||
2153 | - | ||
2154 | - | ||
2155 | - | @Callable( | |
2156 | - | func mergeLands ( | |
2157 | - | let | |
2158 | - | if ((size( | |
2138 | + | (dl :+ iC) | |
2139 | + | } | |
2140 | + | } | |
2141 | + | ||
2142 | + | ||
2143 | + | ||
2144 | + | @Callable(ev) | |
2145 | + | func mergeLands (ib) = { | |
2146 | + | let iC = iz(ev) | |
2147 | + | if ((size(ev.payments) != 0)) | |
2159 | 2148 | then throw("No payments required") | |
2160 | 2149 | else { | |
2161 | - | let | |
2162 | - | $Tuple2((( | |
2163 | - | } | |
2164 | - | } | |
2165 | - | ||
2166 | - | ||
2167 | - | ||
2168 | - | @Callable( | |
2169 | - | func mergeLandsUsdt ( | |
2170 | - | let | |
2171 | - | if ((size( | |
2150 | + | let dl = ix(true, toString(ev.caller), 0, ib, ev.transactionId) | |
2151 | + | $Tuple2(((dl._1 :+ iC) ++ hO(toString(ev.caller), H)._1), dl._2) | |
2152 | + | } | |
2153 | + | } | |
2154 | + | ||
2155 | + | ||
2156 | + | ||
2157 | + | @Callable(ev) | |
2158 | + | func mergeLandsUsdt (ib) = { | |
2159 | + | let iC = iz(ev) | |
2160 | + | if ((size(ev.payments) != 1)) | |
2172 | 2161 | then throw("Exactly one payment required") | |
2173 | 2162 | else { | |
2174 | - | let | |
2175 | - | if (( | |
2163 | + | let iD = value(ev.payments[0]) | |
2164 | + | if ((iD.assetId != bj)) | |
2176 | 2165 | then throw("Allowed USDT payment only!") | |
2177 | 2166 | else { | |
2178 | - | let | |
2179 | - | $Tuple2((( | |
2167 | + | let dl = ix(false, toString(ev.caller), iD.amount, ib, ev.transactionId) | |
2168 | + | $Tuple2(((dl._1 :+ ScriptTransfer(bL, iD.amount, bj)) :+ iC), dl._2) | |
2180 | 2169 | } | |
2181 | 2170 | } | |
2182 | 2171 | } | |
2183 | 2172 | ||
2184 | 2173 | ||
2185 | 2174 | ||
2186 | - | @Callable( | |
2187 | - | func cargoExchange ( | |
2188 | - | let | |
2189 | - | if ((size( | |
2175 | + | @Callable(ev) | |
2176 | + | func cargoExchange (jn,aO) = { | |
2177 | + | let iC = iz(ev) | |
2178 | + | if ((size(ev.payments) != 0)) | |
2190 | 2179 | then throw("No payments required") | |
2191 | 2180 | else { | |
2192 | - | let | |
2193 | - | let b = toString( | |
2194 | - | let | |
2195 | - | let | |
2196 | - | if (!(isDefined(getInteger( | |
2197 | - | then throw(( | |
2181 | + | let fP = split_4C(jn, ":") | |
2182 | + | let b = toString(ev.originCaller) | |
2183 | + | let he = value(assetInfo(fromBase58String(aO))) | |
2184 | + | let hf = aG(aO) | |
2185 | + | if (!(isDefined(getInteger(hf)))) | |
2186 | + | then throw((he.name + " is not staked")) | |
2198 | 2187 | else { | |
2199 | - | let | |
2200 | - | if (( | |
2201 | - | then throw(( | |
2188 | + | let hh = valueOrErrorMessage(getString(aD(aO)), (("NFT " + he.name) + " is orphaned")) | |
2189 | + | if ((hh != b)) | |
2190 | + | then throw((X + " is not yours")) | |
2202 | 2191 | else { | |
2203 | - | let | |
2204 | - | let | |
2205 | - | let | |
2206 | - | let | |
2207 | - | let | |
2208 | - | if (( | |
2209 | - | then throw((("Duck location type is " + | |
2210 | - | else if (( | |
2211 | - | then throw(("Duck should be on the land " + | |
2192 | + | let fy = (ca(split(he.description, "_")[bP]) / br) | |
2193 | + | let fz = valueOrElse(getInteger(aH(aO)), 0) | |
2194 | + | let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked") | |
2195 | + | let hb = valueOrElse(getString(aY(r)), ae) | |
2196 | + | let hc = split(value(hb), "_") | |
2197 | + | if ((hc[bd] != "L")) | |
2198 | + | then throw((("Duck location type is " + hc[bd]) + ", but should be L")) | |
2199 | + | else if ((hc[be] != aO)) | |
2200 | + | then throw(("Duck should be on the land " + aO)) | |
2212 | 2201 | else { | |
2213 | - | let | |
2214 | - | let | |
2215 | - | let | |
2216 | - | let | |
2217 | - | let | |
2218 | - | let | |
2219 | - | let | |
2220 | - | let | |
2221 | - | [StringEntry( | |
2202 | + | let fx = aN(aO) | |
2203 | + | let fj = fw(fx, fy, fz) | |
2204 | + | let fe = aX(r) | |
2205 | + | let fQ = fd(fe) | |
2206 | + | let dl = fO(fP, fj, fQ) | |
2207 | + | let fF = split(fj[at], "_") | |
2208 | + | let ht = (parseIntValue(fF[av]) + dl._7) | |
2209 | + | let hu = (parseIntValue(fF[aw]) - dl._7) | |
2210 | + | [StringEntry(fe, makeString_2C([fQ[ay], dl._4, dl._5, dl._6], ":")), StringEntry(fx, makeString_2C([fj[ap], dl._1, dl._2, dl._3, makeString([fF[au], toString(ht), toString(hu), fF[ax]], "_")], ":")), iC] | |
2222 | 2211 | } | |
2223 | 2212 | } | |
2224 | 2213 | } | |
2225 | 2214 | } | |
2226 | 2215 | } | |
2227 | 2216 | ||
2228 | 2217 | ||
2229 | 2218 | ||
2230 | - | @Callable( | |
2231 | - | func saveWarehouse ( | |
2219 | + | @Callable(ev) | |
2220 | + | func saveWarehouse (fB,aO) = if ((ev.caller != bL)) | |
2232 | 2221 | then throw("Access denied") | |
2233 | 2222 | else { | |
2234 | - | let | |
2235 | - | let | |
2236 | - | if ((size( | |
2223 | + | let fx = aN(aO) | |
2224 | + | let fC = split_4C(fB, ":") | |
2225 | + | if ((size(fC) != 5)) | |
2237 | 2226 | then throw("warehouse string should contain 4 ':' separators") | |
2238 | 2227 | else { | |
2239 | - | let | |
2240 | - | let | |
2241 | - | let | |
2242 | - | let | |
2243 | - | let | |
2244 | - | $Tuple2([StringEntry( | |
2228 | + | let jo = split(fC[at], "_")[au] | |
2229 | + | let ht = fi(fC) | |
2230 | + | let jp = fg(fC[ap]) | |
2231 | + | let hu = ((jp - parseIntValue(jo)) - ht) | |
2232 | + | let jq = makeString_2C([fC[ap], fC[aq], fC[ar], fC[as], makeString([jo, toString(ht), toString(hu), toString(jp)], "_")], ":") | |
2233 | + | $Tuple2([StringEntry(fx, jq)], jq) | |
2245 | 2234 | } | |
2246 | 2235 | } | |
2247 | 2236 | ||
2248 | 2237 | ||
2249 | 2238 | ||
2250 | - | @Callable( | |
2251 | - | func fixWarehouseFormat ( | |
2239 | + | @Callable(ev) | |
2240 | + | func fixWarehouseFormat (aO) = if ((ev.caller != bK)) | |
2252 | 2241 | then throw("Access denied") | |
2253 | 2242 | else { | |
2254 | - | let | |
2255 | - | let | |
2256 | - | let | |
2257 | - | let | |
2258 | - | let | |
2259 | - | let | |
2260 | - | let | |
2261 | - | let | |
2262 | - | let | |
2263 | - | let | |
2264 | - | $Tuple2([StringEntry( | |
2265 | - | } | |
2266 | - | ||
2267 | - | ||
2268 | - | ||
2269 | - | @Callable( | |
2270 | - | func fixStakedPieces ( | |
2243 | + | let fx = aN(aO) | |
2244 | + | let he = value(assetInfo(fromBase58String(aO))) | |
2245 | + | let fy = (ca(split(he.description, "_")[bP]) / br) | |
2246 | + | let fz = valueOrElse(getInteger(aH(aO)), 0) | |
2247 | + | let fC = fw(fx, fy, fz) | |
2248 | + | let jo = bY(invoke(bL, "recalcLockedVolumeREADONLY", [aO, fC], nil)) | |
2249 | + | let ht = fi(fC) | |
2250 | + | let jp = fg(fC[ap]) | |
2251 | + | let hu = ((jp - jo) - ht) | |
2252 | + | let jq = makeString_2C([fC[ap], fC[aq], fC[ar], fC[as], makeString([toString(jo), toString(ht), toString(hu), toString(jp)], "_")], ":") | |
2253 | + | $Tuple2([StringEntry(fx, jq)], jq) | |
2254 | + | } | |
2255 | + | ||
2256 | + | ||
2257 | + | ||
2258 | + | @Callable(ev) | |
2259 | + | func fixStakedPieces (bx) = if ((ev.caller != bK)) | |
2271 | 2260 | then throw("Access denied") | |
2272 | 2261 | else { | |
2273 | - | let | |
2262 | + | let is = if ((bx == "")) | |
2274 | 2263 | then 0 | |
2275 | 2264 | else { | |
2276 | - | let | |
2277 | - | let | |
2278 | - | then split_51C(value( | |
2265 | + | let in = getString(T, bT(bx)) | |
2266 | + | let ii = if (isDefined(in)) | |
2267 | + | then split_51C(value(in), "_") | |
2279 | 2268 | else nil | |
2280 | - | func | |
2281 | - | let | |
2282 | - | let | |
2283 | - | ( | |
2269 | + | func jr (cT,aO) = { | |
2270 | + | let he = value(assetInfo(fromBase58String(aO))) | |
2271 | + | let cb = split(he.description, "_")[bP] | |
2272 | + | (cT + ca(cb)) | |
2284 | 2273 | } | |
2285 | 2274 | ||
2286 | - | let | |
2287 | - | let | |
2288 | - | let | |
2289 | - | func | |
2290 | - | then | |
2291 | - | else | |
2292 | - | ||
2293 | - | func | |
2294 | - | then | |
2275 | + | let cV = ii | |
2276 | + | let cW = size(cV) | |
2277 | + | let cX = 0 | |
2278 | + | func cY (cZ,da) = if ((da >= cW)) | |
2279 | + | then cZ | |
2280 | + | else jr(cZ, cV[da]) | |
2281 | + | ||
2282 | + | func db (cZ,da) = if ((da >= cW)) | |
2283 | + | then cZ | |
2295 | 2284 | else throw("List size exceeds 100") | |
2296 | 2285 | ||
2297 | - | | |
2286 | + | db(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100) | |
2298 | 2287 | } | |
2299 | - | $Tuple2([IntegerEntry( | |
2300 | - | } | |
2301 | - | ||
2302 | - | ||
2303 | - | ||
2304 | - | @Callable( | |
2305 | - | func setCustomName ( | |
2306 | - | let | |
2307 | - | if ((size( | |
2288 | + | $Tuple2([IntegerEntry(bU(bx), is)], is) | |
2289 | + | } | |
2290 | + | ||
2291 | + | ||
2292 | + | ||
2293 | + | @Callable(ev) | |
2294 | + | func setCustomName (aE,ik,aJ) = { | |
2295 | + | let iC = iz(ev) | |
2296 | + | if ((size(ev.payments) != 1)) | |
2308 | 2297 | then throw("Exactly one payment required") | |
2309 | 2298 | else { | |
2310 | - | let | |
2311 | - | if (( | |
2299 | + | let iD = value(ev.payments[0]) | |
2300 | + | if ((iD.assetId != bj)) | |
2312 | 2301 | then throw("Allowed USDT payment only!") | |
2313 | - | else if (( | |
2314 | - | then throw(("Payment should be " + toString( | |
2315 | - | else if (contains( | |
2316 | - | then throw(("Name should not contain '__': " + | |
2317 | - | else if ((size( | |
2318 | - | then throw(("Name too long, maxLength=" + toString( | |
2302 | + | else if ((iD.amount != ci)) | |
2303 | + | then throw(("Payment should be " + toString(ci))) | |
2304 | + | else if (contains(ik, "__")) | |
2305 | + | then throw(("Name should not contain '__': " + ik)) | |
2306 | + | else if ((size(ik) > cj)) | |
2307 | + | then throw(("Name too long, maxLength=" + toString(cj))) | |
2319 | 2308 | else { | |
2320 | - | let b = toString( | |
2321 | - | let | |
2322 | - | let | |
2323 | - | if (("ACCOUNT" == | |
2309 | + | let b = toString(ev.originCaller) | |
2310 | + | let js = { | |
2311 | + | let bk = aJ | |
2312 | + | if (("ACCOUNT" == bk)) | |
2324 | 2313 | then { | |
2325 | - | let | |
2326 | - | let | |
2327 | - | if (isDefined( | |
2328 | - | then throw(("Name already registered: " + | |
2314 | + | let jt = cD(ik) | |
2315 | + | let ju = getString(jt) | |
2316 | + | if (isDefined(ju)) | |
2317 | + | then throw(("Name already registered: " + ik)) | |
2329 | 2318 | else { | |
2330 | - | let | |
2331 | - | let | |
2332 | - | let | |
2333 | - | then [DeleteEntry( | |
2319 | + | let jv = aQ(b) | |
2320 | + | let jw = getString(jv) | |
2321 | + | let jx = if (isDefined(jw)) | |
2322 | + | then [DeleteEntry(cD(value(jw)))] | |
2334 | 2323 | else nil | |
2335 | - | ((( | |
2324 | + | (((jx :+ StringEntry(jv, ik)) :+ StringEntry(jt, b)) ++ hO(b, E)._1) | |
2336 | 2325 | } | |
2337 | 2326 | } | |
2338 | - | else if (("LAND" == | |
2327 | + | else if (("LAND" == bk)) | |
2339 | 2328 | then { | |
2340 | - | let | |
2341 | - | let | |
2342 | - | if (!(isDefined(getInteger( | |
2343 | - | then throw(( | |
2329 | + | let he = value(assetInfo(fromBase58String(aE))) | |
2330 | + | let hf = aG(aE) | |
2331 | + | if (!(isDefined(getInteger(hf)))) | |
2332 | + | then throw((he.name + " is not staked")) | |
2344 | 2333 | else { | |
2345 | - | let | |
2346 | - | if (( | |
2347 | - | then throw(( | |
2334 | + | let hh = valueOrErrorMessage(getString(aD(aE)), (("NFT " + he.name) + " is orphaned")) | |
2335 | + | if ((hh != b)) | |
2336 | + | then throw((X + " is not yours")) | |
2348 | 2337 | else { | |
2349 | - | let | |
2350 | - | let | |
2351 | - | if (isDefined( | |
2352 | - | then throw(("Name already registered: " + | |
2338 | + | let jt = cx(ik) | |
2339 | + | let ju = getString(jt) | |
2340 | + | if (isDefined(ju)) | |
2341 | + | then throw(("Name already registered: " + ik)) | |
2353 | 2342 | else { | |
2354 | - | let | |
2355 | - | let | |
2356 | - | let | |
2357 | - | then [DeleteEntry( | |
2343 | + | let jy = aF(aE) | |
2344 | + | let jw = getString(jy) | |
2345 | + | let jx = if (isDefined(jw)) | |
2346 | + | then [DeleteEntry(cx(value(jw)))] | |
2358 | 2347 | else nil | |
2359 | - | ((( | |
2348 | + | (((jx :+ StringEntry(jy, ik)) :+ StringEntry(jt, aE)) ++ hO(b, E)._1) | |
2360 | 2349 | } | |
2361 | 2350 | } | |
2362 | 2351 | } | |
2363 | 2352 | } | |
2364 | - | else if (("DUCK" == | |
2353 | + | else if (("DUCK" == bk)) | |
2365 | 2354 | then { | |
2366 | - | let | |
2367 | - | let | |
2368 | - | if (if (!(isDefined(getInteger( | |
2355 | + | let he = value(assetInfo(fromBase58String(aE))) | |
2356 | + | let hf = aG(aE) | |
2357 | + | if (if (!(isDefined(getInteger(hf)))) | |
2369 | 2358 | then true | |
2370 | - | else !(isDefined(getString( | |
2371 | - | then throw(( | |
2359 | + | else !(isDefined(getString(aW(b))))) | |
2360 | + | then throw((he.name + " is not staked")) | |
2372 | 2361 | else { | |
2373 | - | let | |
2374 | - | if (( | |
2375 | - | then throw(( | |
2362 | + | let hh = valueOrErrorMessage(getString(aV(aE)), (("NFT " + he.name) + " is orphaned")) | |
2363 | + | if ((hh != b)) | |
2364 | + | then throw((Y + " is not yours")) | |
2376 | 2365 | else { | |
2377 | - | let | |
2378 | - | let | |
2379 | - | if (isDefined( | |
2380 | - | then throw(("Name already registered: " + | |
2366 | + | let jt = cC(ik) | |
2367 | + | let ju = getString(jt) | |
2368 | + | if (isDefined(ju)) | |
2369 | + | then throw(("Name already registered: " + ik)) | |
2381 | 2370 | else { | |
2382 | - | let | |
2383 | - | let | |
2384 | - | let | |
2385 | - | then [DeleteEntry( | |
2371 | + | let jy = aP(aE) | |
2372 | + | let jw = getString(jy) | |
2373 | + | let jx = if (isDefined(jw)) | |
2374 | + | then [DeleteEntry(cC(value(jw)))] | |
2386 | 2375 | else nil | |
2387 | - | ((( | |
2376 | + | (((jx :+ StringEntry(jy, ik)) :+ StringEntry(jt, aE)) ++ hI(aE, E)._1) | |
2388 | 2377 | } | |
2389 | 2378 | } | |
2390 | 2379 | } | |
2391 | 2380 | } | |
2392 | 2381 | else throw("Unknown entity type") | |
2393 | 2382 | } | |
2394 | - | $Tuple2((( | |
2383 | + | $Tuple2(((js :+ ScriptTransfer(bL, iD.amount, bj)) :+ iC), 0) | |
2395 | 2384 | } | |
2396 | 2385 | } | |
2397 | 2386 | } | |
2398 | 2387 | ||
2399 | 2388 | ||
2400 | 2389 | ||
2401 | - | @Callable( | |
2402 | - | func setReferrals ( | |
2390 | + | @Callable(ev) | |
2391 | + | func setReferrals (jz,jA) = if ((ev.callerPublicKey != cf)) | |
2403 | 2392 | then throw("Permission denied") | |
2404 | 2393 | else { | |
2405 | - | let | |
2406 | - | if ((size( | |
2394 | + | let iC = iz(ev) | |
2395 | + | if ((size(ev.payments) != 0)) | |
2407 | 2396 | then throw("No payments required") | |
2408 | - | else if (!(isDefined(addressFromString( | |
2409 | - | then throw(("Invalid address: " + | |
2410 | - | else if (!(isDefined(addressFromString( | |
2411 | - | then throw(("Invalid address: " + | |
2397 | + | else if (!(isDefined(addressFromString(jz)))) | |
2398 | + | then throw(("Invalid address: " + jz)) | |
2399 | + | else if (!(isDefined(addressFromString(jA)))) | |
2400 | + | then throw(("Invalid address: " + jA)) | |
2412 | 2401 | else { | |
2413 | - | let | |
2414 | - | let | |
2415 | - | let | |
2416 | - | then split_4C(value( | |
2402 | + | let jB = cE() | |
2403 | + | let jC = getString(jB) | |
2404 | + | let jD = if (isDefined(jC)) | |
2405 | + | then split_4C(value(jC), "_") | |
2417 | 2406 | else nil | |
2418 | - | if (containsElement( | |
2419 | - | then throw(( | |
2407 | + | if (containsElement(jD, jA)) | |
2408 | + | then throw((jA + " is not newbie (already has referrals)")) | |
2420 | 2409 | else { | |
2421 | - | let | |
2422 | - | let | |
2423 | - | if (if (isDefined( | |
2424 | - | then isDefined(addressFromString(value( | |
2410 | + | let hQ = aR(jA) | |
2411 | + | let hR = getString(hQ) | |
2412 | + | if (if (isDefined(hR)) | |
2413 | + | then isDefined(addressFromString(value(hR))) | |
2425 | 2414 | else false) | |
2426 | - | then throw((( | |
2415 | + | then throw(((jA + " already has refBy: ") + value(hR))) | |
2427 | 2416 | else { | |
2428 | - | let | |
2429 | - | let | |
2430 | - | let | |
2431 | - | then split_4C(value( | |
2417 | + | let jE = aU(jz) | |
2418 | + | let jF = getString(jE) | |
2419 | + | let jG = if (isDefined(jF)) | |
2420 | + | then split_4C(value(jF), "_") | |
2432 | 2421 | else nil | |
2433 | - | if (containsElement( | |
2434 | - | then throw(((( | |
2422 | + | if (containsElement(jG, jA)) | |
2423 | + | then throw((((jz + " already contains ") + jA) + " within referrals")) | |
2435 | 2424 | else { | |
2436 | - | let | |
2437 | - | let | |
2438 | - | then value( | |
2439 | - | else makeString_2C(( | |
2440 | - | $Tuple2([StringEntry( | |
2425 | + | let jH = makeString_2C((jG :+ jA), "_") | |
2426 | + | let jI = if (containsElement(jD, jz)) | |
2427 | + | then value(jC) | |
2428 | + | else makeString_2C((jD :+ jz), "_") | |
2429 | + | $Tuple2([StringEntry(hQ, jz), StringEntry(jE, jH), StringEntry(jB, jI), iC], 0) | |
2441 | 2430 | } | |
2442 | 2431 | } | |
2443 | 2432 | } | |
2444 | 2433 | } | |
2445 | 2434 | } | |
2446 | 2435 | ||
2447 | 2436 | ||
2448 | 2437 | ||
2449 | - | @Callable( | |
2450 | - | func distributePoints ( | |
2451 | - | let | |
2452 | - | if ((size( | |
2438 | + | @Callable(ev) | |
2439 | + | func distributePoints (jJ,jK,jL,jM,jN) = { | |
2440 | + | let iC = iz(ev) | |
2441 | + | if ((size(ev.payments) != 0)) | |
2453 | 2442 | then throw("No payments required") | |
2454 | 2443 | else { | |
2455 | - | let b = toString( | |
2456 | - | let | |
2457 | - | let | |
2458 | - | let | |
2459 | - | let | |
2460 | - | let | |
2461 | - | let | |
2462 | - | let | |
2463 | - | if (( | |
2464 | - | then throw((("There are only " + toString( | |
2444 | + | let b = toString(ev.originCaller) | |
2445 | + | let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked") | |
2446 | + | let jO = z(b) | |
2447 | + | let jP = valueOrElse(getInteger(T, jO), 0) | |
2448 | + | let jQ = v(r) | |
2449 | + | let jR = valueOrElse(getInteger(T, jQ), 0) | |
2450 | + | let jS = (jP + jR) | |
2451 | + | let jT = ((((jJ + jK) + jL) + jM) + jN) | |
2452 | + | if ((jT > jS)) | |
2453 | + | then throw((("There are only " + toString(jS)) + " free points to distribute")) | |
2465 | 2454 | else { | |
2466 | - | let | |
2467 | - | let | |
2468 | - | let | |
2469 | - | $Tuple2([IntegerEntry( | |
2455 | + | let jU = s(r) | |
2456 | + | let U = split(valueOrElse(getString(T, jU), "0_0_0_0_0"), "_") | |
2457 | + | let jV = (jP - jT) | |
2458 | + | $Tuple2([IntegerEntry(jO, if ((0 > jV)) | |
2470 | 2459 | then 0 | |
2471 | - | else | |
2472 | - | then ( | |
2473 | - | else | |
2460 | + | else jV), IntegerEntry(jQ, if ((0 > jV)) | |
2461 | + | then (jR + jV) | |
2462 | + | else jR), StringEntry(jU, makeString([toString((parseIntValue(U[h]) + jJ)), toString((parseIntValue(U[i]) + jK)), toString((parseIntValue(U[j]) + jL)), toString((parseIntValue(U[k]) + jM)), toString((parseIntValue(U[l]) + jN))], "_")), iC], 0) | |
2474 | 2463 | } | |
2475 | 2464 | } | |
2476 | 2465 | } | |
2477 | 2466 | ||
2478 | 2467 | ||
2479 | 2468 | ||
2480 | - | @Callable( | |
2481 | - | func splitByGlobalWeightsREADONLY ( | |
2482 | - | ||
2483 | - | ||
2484 | - | ||
2485 | - | @Callable( | |
2486 | - | func splitByGlobalAndLocalWeightsREADONLY ( | |
2487 | - | let | |
2488 | - | $Tuple2(nil, $Tuple2( | |
2489 | - | } | |
2490 | - | ||
2491 | - | ||
2492 | - | ||
2493 | - | @Callable( | |
2494 | - | func getBackpackREADONLY ( | |
2495 | - | ||
2496 | - | ||
2497 | - | ||
2498 | - | @Callable( | |
2499 | - | func getWarehouseREADONLY ( | |
2500 | - | let | |
2501 | - | let | |
2502 | - | let | |
2503 | - | $Tuple2(nil, makeString_2C( | |
2504 | - | } | |
2505 | - | ||
2506 | - | ||
2507 | - | ||
2508 | - | @Callable( | |
2509 | - | func saveLastTx () = if (if (( | |
2510 | - | then ( | |
2469 | + | @Callable(ev) | |
2470 | + | func splitByGlobalWeightsREADONLY (fM) = $Tuple2(nil, dc(fM)) | |
2471 | + | ||
2472 | + | ||
2473 | + | ||
2474 | + | @Callable(ev) | |
2475 | + | func splitByGlobalAndLocalWeightsREADONLY (jW,jX,ey) = { | |
2476 | + | let er = ex(ey) | |
2477 | + | $Tuple2(nil, $Tuple2(dc(jW), cN(jX, er))) | |
2478 | + | } | |
2479 | + | ||
2480 | + | ||
2481 | + | ||
2482 | + | @Callable(ev) | |
2483 | + | func getBackpackREADONLY (r) = $Tuple2(nil, makeString(fd(aX(r)), ":")) | |
2484 | + | ||
2485 | + | ||
2486 | + | ||
2487 | + | @Callable(ev) | |
2488 | + | func getWarehouseREADONLY (aO) = { | |
2489 | + | let he = value(assetInfo(fromBase58String(aO))) | |
2490 | + | let fy = (ca(split(he.description, "_")[bP]) / br) | |
2491 | + | let fz = valueOrElse(getInteger(aH(aO)), 0) | |
2492 | + | $Tuple2(nil, makeString_2C(fw(aN(aO), fy, fz), ":")) | |
2493 | + | } | |
2494 | + | ||
2495 | + | ||
2496 | + | ||
2497 | + | @Callable(ev) | |
2498 | + | func saveLastTx () = if (if ((ev.caller != bN)) | |
2499 | + | then (ev.caller != bL) | |
2511 | 2500 | else false) | |
2512 | 2501 | then throw("Access denied") | |
2513 | - | else $Tuple2([ | |
2514 | - | ||
2515 | - | ||
2516 | - | ||
2517 | - | @Callable( | |
2518 | - | func updateDuckStats ( | |
2502 | + | else $Tuple2([iz(ev)], 42) | |
2503 | + | ||
2504 | + | ||
2505 | + | ||
2506 | + | @Callable(ev) | |
2507 | + | func updateDuckStats (r,hJ) = if ((ev.caller != bL)) | |
2519 | 2508 | then throw("Access denied") | |
2520 | - | else | |
2521 | - | ||
2522 | - | ||
2523 | - | ||
2524 | - | @Callable( | |
2525 | - | func updateAccStats (b, | |
2509 | + | else hI(r, hJ) | |
2510 | + | ||
2511 | + | ||
2512 | + | ||
2513 | + | @Callable(ev) | |
2514 | + | func updateAccStats (b,hJ) = if ((ev.caller != bL)) | |
2526 | 2515 | then throw("Access denied") | |
2527 | - | else | |
2528 | - | ||
2529 | - | ||
2530 | - | ||
2531 | - | @Callable( | |
2532 | - | func equipDuck ( | |
2533 | - | let | |
2534 | - | if ((size( | |
2516 | + | else hO(b, hJ) | |
2517 | + | ||
2518 | + | ||
2519 | + | ||
2520 | + | @Callable(ev) | |
2521 | + | func equipDuck (jY) = { | |
2522 | + | let iC = iz(ev) | |
2523 | + | if ((size(ev.payments) != 0)) | |
2535 | 2524 | then throw("No payments required") | |
2536 | 2525 | else { | |
2537 | - | let b = toString( | |
2538 | - | let | |
2539 | - | let | |
2540 | - | let | |
2541 | - | let | |
2542 | - | let | |
2543 | - | let | |
2544 | - | if ((size( | |
2526 | + | let b = toString(ev.originCaller) | |
2527 | + | let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked") | |
2528 | + | let gO = w(r) | |
2529 | + | let jZ = split(valueOrElse(getString(gO), ",;,_,;,_,;,_,;,_,;,_,;,"), "_") | |
2530 | + | let fe = aX(r) | |
2531 | + | let fQ = fd(fe) | |
2532 | + | let gQ = split(jY, "_") | |
2533 | + | if ((size(gQ) != m)) | |
2545 | 2534 | then throw("Wrong equipment string") | |
2546 | 2535 | else { | |
2547 | - | let | |
2548 | - | let | |
2549 | - | let | |
2550 | - | let | |
2551 | - | $Tuple2([StringEntry( | |
2536 | + | let dK = S(this, r) | |
2537 | + | let ka = ei(jZ, dz(fQ[aB]), true, dK) | |
2538 | + | let kb = ei(gQ, ka, false, dK) | |
2539 | + | let kc = dE(kb) | |
2540 | + | $Tuple2([StringEntry(gO, jY), StringEntry(fe, makeString_2C([fQ[ay], fQ[az], fQ[aA], kc], ":")), iC], 0) | |
2552 | 2541 | } | |
2553 | 2542 | } | |
2554 | 2543 | } | |
2555 | 2544 | ||
2556 | 2545 |
github/deemru/w8io/169f3d6 1637.36 ms ◑