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