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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OgQKd2hPY2N1cGllZAkBF2dldFdhcmVob3VzZU9jY3VwaWVkVm9sAQUCd2gEBndoTG9mdAMJAGYCAAUJAJADAQUCd2gJALkJAgkAzAgCAgEwCQDMCAIJAKQDAQUKd2hPY2N1cGllZAkAzAgCCQCkAwEJAGUCBQd3aFRvdGFsBQp3aE9jY3VwaWVkCQDMCAIJAKQDAQUHd2hUb3RhbAUDbmlsAgFfBARsb2Z0CQC1CQIJAJEDAgUCd2gFCXdoSWR4TE9GVAIBXwQId2hMb2NrZWQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQl2b2xMb2NrZWQEA29jYwMJAGYCCQCQAwEFBGxvZnQAAQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkBQp3aE9jY3VwaWVkCQC5CQIJAMwIAgkApAMBBQh3aExvY2tlZAkAzAgCCQCkAwEFA29jYwkAzAgCCQCkAwEJAGUCCQBlAgUHd2hUb3RhbAUId2hMb2NrZWQFA29jYwkAzAgCCQCkAwEFB3doVG90YWwFA25pbAIBXwkAzAgCCQCRAwIFAndoBQt3aElkeExldmVscwkAzAgCAwkAAAIJAJADAQkAtQkCCQCRAwIFAndoBQh3aElkeFJlcwIBXwUGTlVNUkVTCQCRAwIFAndoBQh3aElkeFJlcwILMF8wXzBfMF8wXzAJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQJ3aAUId2hJZHhNYXQCAV8FBk5VTVJFUwkAkQMCBQJ3aAUId2hJZHhNYXQCCzBfMF8wXzBfMF8wCQDMCAIJAJEDAgUCd2gFCXdoSWR4UHJvZAkAzAgCBQZ3aExvZnQFA25pbAEVZ2V0V2FyZWhvdXNlU3BhY2VMZWZ0AQljdXJyZW50V2gEC29jY3VwaWVkVm9sCQEXZ2V0V2FyZWhvdXNlT2NjdXBpZWRWb2wBBQljdXJyZW50V2gED2N1cnJXaExvY2tlZFZvbAkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4TE9GVAIBXwUJdm9sTG9ja2VkCQBlAgkAZQIJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEJAJEDAgUJY3VycmVudFdoBQt3aElkeExldmVscwULb2NjdXBpZWRWb2wFD2N1cnJXaExvY2tlZFZvbAEIdG9Wb2x1bWUCBmFtb3VudAdwa2dTaXplBARwa2dzAwkAZwIFBmFtb3VudAAACQBpAgkAZQIJAGQCBQZhbW91bnQFB3BrZ1NpemUAAQUHcGtnU2l6ZQkBAS0BCQBpAgkAZQIJAGQCCQEBLQEFBmFtb3VudAUHcGtnU2l6ZQABBQdwa2dTaXplCQBoAgUEcGtncwUFTVVMVDgBCW1vdmVTdHVmZgMKY2FyZ29QYXJ0cwljdXJyZW50V2gLY3VycmVudFBhY2sDCQECIT0CCQCQAwEFCmNhcmdvUGFydHMAAwkAAgECNGNhcmdvTGlzdFN0ciBzaG91bGQgY29udGFpbiBleGFjdGx5IDIgJzonIHNlcGFyYXRvcnMECHJlc1BhcnRzCQC1CQIJAJEDAgUKY2FyZ29QYXJ0cwAAAgFfBAhtYXRQYXJ0cwkAtQkCCQCRAwIFCmNhcmdvUGFydHMAAQIBXwQJcHJvZFBhcnRzAwkAAAIJAJEDAgUKY2FyZ29QYXJ0cwACAgAFA25pbAkAtQkCCQCRAwIFCmNhcmdvUGFydHMAAgIBXwMJAQIhPQIJAJADAQUIcmVzUGFydHMFBk5VTVJFUwkAAgECIEFsbCA2IHJlc291cmNlcyBzaG91bGQgYmUgcGFzc2VkAwkBAiE9AgkAkAMBBQhtYXRQYXJ0cwUGTlVNUkVTCQACAQIgQWxsIDYgbWF0ZXJpYWxzIHNob3VsZCBiZSBwYXNzZWQEC3doU3BhY2VMZWZ0CQEVZ2V0V2FyZWhvdXNlU3BhY2VMZWZ0AQUJY3VycmVudFdoBAljdXJyV2hSZXMJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfBAljdXJyV2hNYXQJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0AgFfBApjdXJyV2hQcm9kAwkAAAIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAAUDbmlsCQC1CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAV8EDmN1cnJlbnRQYWNrUmVzCQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfBA5jdXJyZW50UGFja01hdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQPY3VycmVudFBhY2tQcm9kAwkAAAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIABQNuaWwJALUJAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgFfCgEDbXZSAgNhY2MEaXRlbQQBaQgFA2FjYwJfMQQCYW0JAQ1wYXJzZUludFZhbHVlAQUEaXRlbQQDd2hyCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJY3VycldoUmVzBQFpBANicHIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5jdXJyZW50UGFja1JlcwUBaQMJAAACBQJhbQAACQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkAkQMCBQljdXJyV2hSZXMFAWkJAM0IAggFA2FjYwJfMwkAkQMCBQ5jdXJyZW50UGFja1JlcwUBaQgFA2FjYwJfNAMJAGYCBQJhbQAAAwkAZgIFAmFtBQNicHIJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAFBGl0ZW0CGSBmcm9tIGJhY2twYWNrLCBidXQgb25seSAJAKQDAQUDYnByAgogYXZhaWxhYmxlCQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkApAMBCQBkAgUDd2hyBQJhbQkAzQgCCAUDYWNjAl8zCQCkAwEJAGUCBQNicHIFAmFtCQBkAggFA2FjYwJfNAUCYW0DCQBmAgkBAS0BBQJhbQUDd2hyCQACAQkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHRha2UgCQCkAwEJAQEtAQUCYW0CGiBmcm9tIHdhcmVob3VzZSwgYnV0IG9ubHkgCQCkAwEFA3docgIKIGF2YWlsYWJsZQkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZAIFA3docgUCYW0JAM0IAggFA2FjYwJfMwkApAMBCQBlAgUDYnByBQJhbQkAZAIIBQNhY2MCXzQFAmFtBAFyCgACJGwFCHJlc1BhcnRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlgoEAAAFA25pbAUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBA212UgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgoBA212TQIDYWNjBGl0ZW0EAWkIBQNhY2MCXzEEAmFtCQENcGFyc2VJbnRWYWx1ZQEFBGl0ZW0EA3dobQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWN1cnJXaE1hdAUBaQQDYnBtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOY3VycmVudFBhY2tNYXQFAWkDCQAAAgUCYW0AAAkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAJEDAgUJY3VycldoTWF0BQFpCQDNCAIIBQNhY2MCXzMJAJEDAgUOY3VycmVudFBhY2tNYXQFAWkIBQNhY2MCXzQDCQBmAgUCYW0AAAMJAGYCBQJhbQUDYnBtCQACAQkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHRha2UgBQRpdGVtAhkgZnJvbSBiYWNrcGFjaywgYnV0IG9ubHkgCQCkAwEFA2JwbQIKIGF2YWlsYWJsZQkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZAIFA3dobQUCYW0JAM0IAggFA2FjYwJfMwkApAMBCQBlAgUDYnBtBQJhbQkAZAIIBQNhY2MCXzQFAmFtAwkAZgIJAQEtAQUCYW0FA3dobQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byB0YWtlIAkApAMBCQEBLQEFAmFtAhogZnJvbSB3YXJlaG91c2UsIGJ1dCBvbmx5IAkApAMBBQN3aG0CCiBhdmFpbGFibGUJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGQCBQN3aG0FAmFtCQDNCAIIBQNhY2MCXzMJAKQDAQkAZQIFA2JwbQUCYW0JAGQCCAUDYWNjAl80BQJhbQQBbQoAAiRsBQhtYXRQYXJ0cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJYKBAAABQNuaWwFA25pbAgFAXICXzQKAQUkZjFfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBA212TQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMV8yAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgoBA212UAIDYWNjBGl0ZW0EAWkIBQNhY2MCXzEEAmFtCQENcGFyc2VJbnRWYWx1ZQEFBGl0ZW0EA3docAMJAGYCCQCQAwEFCmN1cnJXaFByb2QFAWkJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpjdXJyV2hQcm9kBQFpAAAEA2JwcAMJAGYCCQCQAwEFD2N1cnJlbnRQYWNrUHJvZAUBaQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFD2N1cnJlbnRQYWNrUHJvZAUBaQAAAwkAAAIFAmFtAAAJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCkAwEFA3docAkAzQgCCAUDYWNjAl8zCQCkAwEFA2JwcAgFA2FjYwJfNAMJAGYCBQJhbQAAAwkAZgIFAmFtBQNicHAJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAFBGl0ZW0CGSBmcm9tIGJhY2twYWNrLCBidXQgb25seSAJAKQDAQUDYnBwAgogYXZhaWxhYmxlBAhkZWx0YVZvbAkAZQIJAQh0b1ZvbHVtZQIJAGQCBQN3aHAFAmFtBQ5QUk9EVUNUUEtHU0laRQkBCHRvVm9sdW1lAgUDd2hwBQ5QUk9EVUNUUEtHU0laRQkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZAIFA3docAUCYW0JAM0IAggFA2FjYwJfMwkApAMBCQBlAgUDYnBwBQJhbQkAZAIIBQNhY2MCXzQFCGRlbHRhVm9sAwkAZgIJAQEtAQUCYW0FA3docAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byB0YWtlIAkApAMBCQEBLQEFAmFtAhogZnJvbSB3YXJlaG91c2UsIGJ1dCBvbmx5IAkApAMBBQN3aHACCiBhdmFpbGFibGUECGRlbHRhVm9sCQBlAgkBCHRvVm9sdW1lAgkAZAIFA3docAUCYW0FDlBST0RVQ1RQS0dTSVpFCQEIdG9Wb2x1bWUCBQN3aHAFDlBST0RVQ1RQS0dTSVpFCQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkApAMBCQBkAgUDd2hwBQJhbQkAzQgCCAUDYWNjAl8zCQCkAwEJAGUCBQNicHAFAmFtCQBkAggFA2FjYwJfNAUIZGVsdGFWb2wEAXADCQECIT0CCQCQAwEFCXByb2RQYXJ0cwAACgACJGwFCXByb2RQYXJ0cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJYKBAAABQNuaWwFA25pbAgFAW0CXzQKAQUkZjJfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBA212UAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMl8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgNTAJAQUkZjJfMgIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyCQCWCgQAAAUKY3VycldoUHJvZAUPY3VycmVudFBhY2tQcm9kCAUBbQJfNAQIdm9sU2FsZG8IBQFwAl80AwkAZgIFCHZvbFNhbGRvBQt3aFNwYWNlTGVmdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIVQXR0ZW1wdCB0byBwdXQgdG90YWwgCQCkAwEFCHZvbFNhbGRvAhEgc3R1ZmYsIGJ1dCBvbmx5IAkApAMBBQt3aFNwYWNlTGVmdAIVIHdhcmVob3VzZSBzcGFjZSBsZWZ0CQCZCgcJALkJAggFAXICXzICAV8JALkJAggFAW0CXzICAV8JALkJAggFAXACXzICAV8JALkJAggFAXICXzMCAV8JALkJAggFAW0CXzMCAV8JALkJAggFAXACXzMCAV8FCHZvbFNhbGRvARJleHBlZGl0aW9uSW50ZXJuYWwCBmNhbGxlcgR0eElkBAh1c2VyQWRkcgkApQgBBQZjYWxsZXIEBmJpZ051bQkBA2FicwEJAJ4DAQUEdHhJZAQHZnJlZU51bQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQESa2V5TmV4dEZyZWVMYW5kTnVtAAkAZAIFD1BSRVNBTEVOVU1MQU5EUwABBAdsYW5kTnVtCQCkAwEFB2ZyZWVOdW0EDGNvbnRpbmVudElkeAkAoAMBCQC7AgIFBmJpZ051bQUFRklWRVgECHRlcnJhaW5zCQELZ2VuVGVycmFpbnMCBQZiaWdOdW0FDGNvbnRpbmVudElkeAQJY29udGluZW50CQCRAwIFCmNvbnRpbmVudHMFDGNvbnRpbmVudElkeAQFaXNzdWUJAMIIBQkBB25mdE5hbWUCBQdsYW5kTnVtAgFTCQC5CQIJAMwIAgUHbGFuZE51bQkAzAgCAgFTCQDMCAIFCHRlcnJhaW5zCQDMCAIFCWNvbnRpbmVudAUDbmlsAgFfAAEAAAcEB2Fzc2V0SWQJALgIAQUFaXNzdWUEAmlkCQDYBAEFB2Fzc2V0SWQJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEmtleU5leHRGcmVlTGFuZE51bQAJAGQCBQdmcmVlTnVtAAEJAMwIAgUFaXNzdWUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEGtleUxhbmRUb0Fzc2V0SWQBBQdsYW5kTnVtBQJpZAkAzAgCCQELU3RyaW5nRW50cnkCCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQUCaWQFCHVzZXJBZGRyCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlMYW5kTnVtVG9Pd25lcgEFB2xhbmROdW0FCHVzZXJBZGRyCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFAmlkAAAJAMwIAgkBDEludGVnZXJFbnRyeQIJAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICBQJpZAUIdXNlckFkZHIAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQZjYWxsZXIAAQUHYXNzZXRJZAUDbmlsCQCUCgIFAmlkBQljb250aW5lbnQBDGZsaWdodENvbW1vbgMIdXNlckFkZHIHbWVzc2FnZQNzaWcDCQEBIQEJAMQTAwUHbWVzc2FnZQUDc2lnBQNwdWIJAAIBAhhzaWduYXR1cmUgZG9lcyBub3QgbWF0Y2gEBXBhcnRzCQC1CQIJALAJAQUHbWVzc2FnZQIBOwQJZmxpZ2h0TG9nCQC1CQIJAJEDAgUFcGFydHMAAAIBfAQCaHAJALUJAgkAkQMCBQlmbGlnaHRMb2cFCGZsSGVhbHRoAgFfBAVjdXJIUAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmhwAAAEBW5ld0hQCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCaHAAAQQLbmV3TG9jVHhWZXIJALUJAgkAkQMCBQVwYXJ0cwABAgE6BAtuZXdMb2NhdGlvbgkAkQMCBQtuZXdMb2NUeFZlcgAABAR0aW1lCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJZmxpZ2h0TG9nBQtmbFRpbWVzdGFtcAMDCQBmAgUEdGltZQkAZAIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBRFGSVZFTUlOVVRFU01JTExJUwYJAGYCCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFEUZJVkVNSU5VVEVTTUlMTElTBQR0aW1lCQACAQkArAICCQCsAgIJAKwCAgIcc2lnbmF0dXJlIG91dGRhdGVkOiBsb2dUaW1lPQkApAMBBQR0aW1lAgksIGJjVGltZT0JAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXAECXR4RnJvbU1zZwkAkQMCBQtuZXdMb2NUeFZlcgABBAZsYXN0VHgJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBEWtleUxhc3RUeElkQnlVc2VyAQUIdXNlckFkZHICAAMJAQIhPQIFBmxhc3RUeAUJdHhGcm9tTXNnCQACAQkArAICCQCsAgIJAKwCAgIeVHggaWRzIGRvbid0IG1hdGNoISBJbiBzdGF0ZTogBQZsYXN0VHgCCiwgaW4gbXNnOiAFCXR4RnJvbU1zZwQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQh1c2VyQWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAVtYXhIUAkBCW1heEhlYWx0aAEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDGtleUR1Y2tMZXZlbAEFC2R1Y2tBc3NldElkAAAEDG9sZEZyb21TdGF0ZQkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQAwkBAiE9AgUMb2xkRnJvbVN0YXRlBQVjdXJIUAkAAgEJAKwCAgkArAICCQCsAgICCm9sZEhlYWx0aD0JAKQDAQUMb2xkRnJvbVN0YXRlAi8gZnJvbSBzdGF0ZSBkb2VzIG5vdCBtYXRjaCBvbmUgZnJvbSBmbGlnaHQgbG9nPQkApAMBBQVjdXJIUAMJAGcCAAAFBWN1ckhQCQACAQIeWW91IGNhbid0IGZseSB3aXRoIHplcm8gaGVhbHRoBAVib251cwMJAGYCCQCQAwEFCWZsaWdodExvZwUHZmxCb251cwkAkQMCBQlmbGlnaHRMb2cFB2ZsQm9udXMCAAQIcHJvZFVzZWQDCQBmAgkAkAMBBQlmbGlnaHRMb2cFC2ZsUHJvZHNVc2VkCQCRAwIFCWZsaWdodExvZwULZmxQcm9kc1VzZWQCAAQKc2VudEFtb3VudAMDCQBmAgUFbmV3SFAAAAkAAAIFBWJvbnVzAgEkBwkBBWFzSW50AQkA/AcEBQxyZXN0Q29udHJhY3QCDXNlbmRVc2R0UHJpemUJAMwIAgUIdXNlckFkZHIFA25pbAUDbmlsAAAJAJcKBQUFbmV3SFAFC2R1Y2tBc3NldElkBQpzZW50QW1vdW50BQtuZXdMb2NhdGlvbgUIcHJvZFVzZWQBEGV4cGVkaXRpb25Db21tb24EBmNhbGxlcgR0eElkB21lc3NhZ2UDc2lnBAh1c2VyQWRkcgkApQgBBQZjYWxsZXIEAWYJAQxmbGlnaHRDb21tb24DBQh1c2VyQWRkcgUHbWVzc2FnZQUDc2lnBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQgFAWYCXzIEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBCAUBZgJfMgQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAVtTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQGbmV3TWF0CQC5CQIJARFzdWJ0cmFjdE1hdGVyaWFscwMGBQVtTGlzdAUMRVhQTUFURVJJQUxTAgFfBAduZXdQcm9kCQEQc3VidHJhY3RQcm9kdWN0cwIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAgFAWYCXzUDCQBnAgAACAUBZgJfMQkAlQoDCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgAAAkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQJAMwIAgUHbmV3UHJvZAUDbmlsAgE6BQNuaWwCAAAABAFlCQESZXhwZWRpdGlvbkludGVybmFsAgUGY2FsbGVyBQR0eElkBAJpZAgIBQFlAl8yAl8xCQCVCgMJAM0IAgkAzQgCCQDNCAIIBQFlAl8xCQELU3RyaW5nRW50cnkCCQEPa2V5RHVja0xvY2F0aW9uAQgFAWYCXzIJALkJAgkAzAgCCAgFAWUCXzICXzIJAMwIAgIBTAkAzAgCBQJpZAUDbmlsAgFfCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoCAUBZgJfMQkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQDMCAIFBm5ld01hdAkAzAgCBQduZXdQcm9kBQNuaWwCAToFAmlkCAUBZgJfMwEMYXBwbHlCb251c2VzAgtsYW5kQXNzZXRJZAZwaWVjZXMECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAlhcnRQaWVjZXMJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQAAAQEYWRkNgkAaQIFCmluZnJhTGV2ZWwABgQEYWRkNwkAaQIFCmluZnJhTGV2ZWwABwkAZAIJAGQCBQ9EQUlMWVJFU0JZUElFQ0UJAGsDBQ9EQUlMWVJFU0JZUElFQ0UJAGQCCQBkAgUKaW5mcmFMZXZlbAUEYWRkNgkAaAIAAgUEYWRkNwAFCQBrAwUPREFJTFlSRVNCWVBJRUNFBQlhcnRQaWVjZXMJAGgCBQZwaWVjZXMABQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBGFkZHIJY2xhaW1Nb2RlDWxhbmRBc3NldElkSW4EDSR0MDMxNTg4MzIxMjcDCQAAAgUJY2xhaW1Nb2RlBQtjbGFpbU1vZGVXaAkAlAoCBQ1sYW5kQXNzZXRJZEluCQELdmFsdWVPckVsc2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICAAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAoggBCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgQDbG9jCQC1CQIJAQV2YWx1ZQEFC2N1ckxvY2F0aW9uAgFfAwkBAiE9AgkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCAUwJAAIBCQCsAgIJAKwCAgIWRHVjayBsb2NhdGlvbiB0eXBlIGlzIAkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCESwgYnV0IHNob3VsZCBiZSBMCQCUCgIJAJEDAgUDbG9jBQhsb2NJZHhJZAULZHVja0Fzc2V0SWQEC2xhbmRBc3NldElkCAUNJHQwMzE1ODgzMjEyNwJfMQQGZHVja0lkCAUNJHQwMzE1ODgzMjEyNwJfMgQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAQJc2F2ZWRUaW1lCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQUHdGltZUtleQkArAICCQCsAgICBUxhbmQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBAFkCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwkAlgoEBQZkdWNrSWQFC2xhbmRBc3NldElkBQFkBQlzYXZlZFRpbWUBEGNsYWltUmVzSW50ZXJuYWwEBGFkZHIGYW1vdW50CWNsYWltTW9kZQ1sYW5kQXNzZXRJZEluAwkAZgIAAAUGYW1vdW50CQACAQIPTmVnYXRpdmUgYW1vdW50BAFjCQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBQRhZGRyBQljbGFpbU1vZGUFDWxhbmRBc3NldElkSW4ECGxhbmRTaXplCQCRAwIIBQFjAl8zBQtyZWNMYW5kU2l6ZQQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIIBQFjAl8zBQtyZWNUZXJyYWlucwQJZGVsdGFUaW1lCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAIBQFjAl80AwkAZgIAAAUJZGVsdGFUaW1lCQACAQkArAICCQCsAgIJAKwCAgImU2F2ZWQgdGltZXN0YW1wIGlzIGluIGZ1dHVyZSwgc2F2ZWQgPSAJAKQDAQgFAWMCXzQCDCwgY3VycmVudCA9IAkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQUIbGFuZFNpemUEFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UJAQxhcHBseUJvbnVzZXMCCAUBYwJfMgUGcGllY2VzBAhhdmFpbFJlcwkAawMFCWRlbHRhVGltZQkAaAIFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UFBnBpZWNlcwUJREFZTUlMTElTAwkAZgIFBmFtb3VudAUIYXZhaWxSZXMJAAIBCQCsAgIJAKwCAgkArAICAiJOb3QgZW5vdWdoIHJlc291cmNlcywgYXZhaWxhYmxlID0gCQCkAwEFCGF2YWlsUmVzAg4sIHJlcXVlc3RlZCA9IAkApAMBBQZhbW91bnQEDG5ld0RlbHRhVGltZQkAawMJAGUCBQhhdmFpbFJlcwUGYW1vdW50BQlEQVlNSUxMSVMJAGgCBRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlBQZwaWVjZXMEDG5ld1RpbWVzdGFtcAkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQxuZXdEZWx0YVRpbWUECWxhbmRJbmRleAkAaQIFBnBpZWNlcwUFU1NJWkUECnJlc1RvQ2xhaW0JAQl2aXJ0Q2xhaW0EBQ10ZXJyYWluQ291bnRzCQBlAgUJZGVsdGFUaW1lBQxuZXdEZWx0YVRpbWUFCWxhbmRJbmRleAUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQQFd2hLZXkJARJrZXlXYXJlaG91c2VCeUxhbmQBCAUBYwJfMgQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEIBQFjAl8yAAAECWN1cnJlbnRXaAkBDGdldFdhcmVob3VzZQMFBXdoS2V5BQlsYW5kSW5kZXgFCmluZnJhTGV2ZWwEBGxvZnQJALUJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4TE9GVAIBXwQLd2hTcGFjZUxlZnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlAwMJAAACBQljbGFpbU1vZGUFC2NsYWltTW9kZVdoCQBmAgUGYW1vdW50BQt3aFNwYWNlTGVmdAcJAAIBCQCsAgIJAKwCAgIFT25seSAJAKQDAQULd2hTcGFjZUxlZnQCGCBzcGFjZSBsZWZ0IGluIHdhcmVob3VzZQQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEIBQFjAl8xBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEDmN1cnJlbnRQYWNrUmVzCQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfBAxjdXJyZW50V2hSZXMJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfBA0kdDAzNDUwMTM1MzcyAwkAAAIFCWNsYWltTW9kZQULY2xhaW1Nb2RlV2gJAJYKBAkBBmFkZFJlcwUFDGN1cnJlbnRXaFJlcwUNdGVycmFpbkNvdW50cwkAZQIFCWRlbHRhVGltZQUMbmV3RGVsdGFUaW1lBQlsYW5kSW5kZXgFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkCAUKcmVzVG9DbGFpbQJfMgkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlCAUKcmVzVG9DbGFpbQJfMgMJAAACBQljbGFpbU1vZGUFDWNsYWltTW9kZUR1Y2sJAJYKBAkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzCQEGYWRkUmVzBQUOY3VycmVudFBhY2tSZXMFDXRlcnJhaW5Db3VudHMJAGUCBQlkZWx0YVRpbWUFDG5ld0RlbHRhVGltZQUJbGFuZEluZGV4BRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlBAVkaXN0cgkBDWRpc3RyaWJ1dGVSZXMEBQxjdXJyZW50V2hSZXMFDmN1cnJlbnRQYWNrUmVzBQpyZXNUb0NsYWltBQt3aFNwYWNlTGVmdAQEd2hBbQkAlwMBCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlCQDMCAIIBQpyZXNUb0NsYWltAl8yBQNuaWwJAJYKBAgFBWRpc3RyAl8xCAUFZGlzdHICXzIJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQFBHdoQW0JAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQUEd2hBbQQFd2hSZXMIBQ0kdDAzNDUwMTM1MzcyAl8xBAVicFJlcwgFDSR0MDM0NTAxMzUzNzICXzIEBWxvZnRPCAUNJHQwMzQ1MDEzNTM3MgJfMwQFbG9mdEYIBQ0kdDAzNDUwMTM1MzcyAl80CQCXCgUJAMwIAgkBDEludGVnZXJFbnRyeQIJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQgFAWMCXzIFDG5ld1RpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYCAUBYwJfMgUEYWRkcgUMbmV3VGltZXN0YW1wBQNuaWwFBWJwS2V5CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgUFYnBSZXMJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwFBXdoS2V5CQDMCAIJAJEDAgUJY3VycmVudFdoBQt3aElkeExldmVscwkAzAgCBQV3aFJlcwkAzAgCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhNYXQJAMwIAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAkAzAgCCQC5CQIJAMwIAgkAkQMCBQRsb2Z0BQl2b2xMb2NrZWQJAMwIAgkApAMBBQVsb2Z0TwkAzAgCCQCkAwEFBWxvZnRGCQDMCAIJAJEDAgUEbG9mdAUIdm9sVG90YWwFA25pbAIBXwUDbmlsAQhjbGFpbUFsbAQEYWRkcgtsYW5kQXNzZXRJZAZwaWVjZXMJY2xhaW1Nb2RlBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkBAlzYXZlZFRpbWUJAQV2YWx1ZQEJAJ8IAQUHdGltZUtleQQIYXZhaWxSZXMJAGgCCQBrAwkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQlzYXZlZFRpbWUJAQxhcHBseUJvbnVzZXMCBQtsYW5kQXNzZXRJZAUGcGllY2VzBQlEQVlNSUxMSVMFBnBpZWNlcwkBEGNsYWltUmVzSW50ZXJuYWwEBQRhZGRyBQhhdmFpbFJlcwUJY2xhaW1Nb2RlBQtsYW5kQXNzZXRJZAENdXBJbmZyYUNvbW1vbgQMc2hvdWxkVXNlTWF0BmNhbGxlcg1wYXltZW50QW1vdW50C2xhbmRBc3NldElkBARhZGRyCQClCAEFBmNhbGxlcgQBYwkBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwUEYWRkcgUTY2xhaW1Nb2RlV2hUaGVuRHVjawULbGFuZEFzc2V0SWQEBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAggFAWMCXzMFC3JlY0xhbmRTaXplBAhpbmZyYUtleQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBCAUBYwJfMgQIY3VyTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUIaW5mcmFLZXkAAAMJAGcCBQhjdXJMZXZlbAADCQACAQImQ3VycmVudGx5IG1heCBpbmZyYXN0cnVjdHVyZSBsZXZlbCA9IDMECG5ld0xldmVsCQBkAgUIY3VyTGV2ZWwAAQQEY29zdAkAawMFFUluZnJhVXBncmFkZUNvc3RTVXNkdAkAaAIFBnBpZWNlcwUIbmV3TGV2ZWwFBVNTSVpFAwMJAQEhAQUMc2hvdWxkVXNlTWF0CQECIT0CBQ1wYXltZW50QW1vdW50BQRjb3N0BwkAAgEJAKwCAgIbUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgCQCkAwEFBGNvc3QEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBCAUBYwJfMQQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAVtTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQHbWF0VXNlZAkAawMFEUluZnJhVXBncmFkZUNvc3RTCQBoAgUGcGllY2VzBQhuZXdMZXZlbAUFU1NJWkUEBm5ld01hdAkAuQkCCQERc3VidHJhY3RNYXRlcmlhbHMDBQxzaG91bGRVc2VNYXQFBW1MaXN0BQdtYXRVc2VkAgFfBAtjbGFpbVJlc3VsdAkBCGNsYWltQWxsBAUEYWRkcggFAWMCXzIFBnBpZWNlcwUTY2xhaW1Nb2RlV2hUaGVuRHVjawQGd2hEYXRhCAULY2xhaW1SZXN1bHQCXzUEBm9sZFZvbAkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQkAkQMCBQZ3aERhdGEFC3doSWR4TGV2ZWxzBApuZXdWb2xEYXRhCQC5CQIJAMwIAgkAkQMCCQC1CQIJAJEDAgUGd2hEYXRhBQt3aElkeExldmVscwIBXwAACQDMCAIJAKQDAQUIbmV3TGV2ZWwFA25pbAIBXwQGbmV3Vm9sCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBBQpuZXdWb2xEYXRhBARsb2Z0CQC1CQIJAJEDAgUGd2hEYXRhBQl3aElkeExPRlQCAV8ECm5ld0xvZnRTdHIJALkJAgkAzAgCCQCRAwIFBGxvZnQFCXZvbExvY2tlZAkAzAgCCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkCQDMCAIJAKQDAQkAZQIJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQUGbmV3Vm9sBQZvbGRWb2wJAMwIAgkApAMBBQZuZXdWb2wFA25pbAIBXwkAlQoDCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFCGluZnJhS2V5BQhuZXdMZXZlbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIIBQFjAl8yBQRhZGRyBQhuZXdMZXZlbAkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCCAULY2xhaW1SZXN1bHQCXzMFCGJwSWR4UmVzCQDMCAIFBm5ld01hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgkAzAgCCQELU3RyaW5nRW50cnkCCAULY2xhaW1SZXN1bHQCXzQJALkJAgkAzAgCBQpuZXdWb2xEYXRhCQDMCAIJAJEDAgUGd2hEYXRhBQh3aElkeFJlcwkAzAgCCQCRAwIFBndoRGF0YQUId2hJZHhNYXQJAMwIAgkAkQMCBQZ3aERhdGEFCXdoSWR4UHJvZAkAzAgCBQpuZXdMb2Z0U3RyBQNuaWwCAToFA25pbAgFC2NsYWltUmVzdWx0Al8xBQhuZXdMZXZlbAUHbWF0VXNlZAEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCC2R1Y2tBc3NldElkB2RlbHRhWFADCQEBIQEFD0tTQUxMT1dYUExFVkVMUwkAlAoCBQNuaWwAAAQGbHZsS2V5CQEMa2V5RHVja0xldmVsAQULZHVja0Fzc2V0SWQEBXhwS2V5CQEJa2V5RHVja1hQAQULZHVja0Fzc2V0SWQEAnhwCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAUFeHBLZXkAAAQFbmV3WFAJAGQCBQJ4cAUHZGVsdGFYUAQJbHZsUG9pbnRzCQEHbGV2ZWxVcAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0BQZsdmxLZXkAAAUFbmV3WFAECWtleVBvaW50cwkBEWtleUR1Y2tGcmVlUG9pbnRzAQULZHVja0Fzc2V0SWQJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUGbHZsS2V5CQCRAwIFCWx2bFBvaW50cwAACQDMCAIJAQxJbnRlZ2VyRW50cnkCBQV4cEtleQUFbmV3WFAJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtleVBvaW50cwkAZAIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5UG9pbnRzAAAJAJEDAgUJbHZsUG9pbnRzAAEFA25pbAUFbmV3WFABFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCBGFkZHIHZGVsdGFYUAMJAQEhAQUPS1NBTExPV1hQTEVWRUxTCQCUCgIFA25pbAAABAZsdmxLZXkJAQxrZXlVc2VyTGV2ZWwBBQRhZGRyBAV4cEtleQkBCWtleVVzZXJYUAEFBGFkZHIEAnhwCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAUFeHBLZXkAAAQFbmV3WFAJAGQCBQJ4cAUHZGVsdGFYUAQJbHZsUG9pbnRzCQEHbGV2ZWxVcAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0BQZsdmxLZXkAAAUFbmV3WFAECWtleVBvaW50cwkBEWtleVVzZXJGcmVlUG9pbnRzAQUEYWRkcgkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQZsdmxLZXkJAJEDAgUJbHZsUG9pbnRzAAAJAMwIAgkBDEludGVnZXJFbnRyeQIFBXhwS2V5BQVuZXdYUAkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa2V5UG9pbnRzCQBkAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlQb2ludHMAAAkAkQMCBQlsdmxQb2ludHMAAQUDbmlsBQVuZXdYUAESYWN0aXZhdGVPbmJvYXJkQXJ0AQRhZGRyBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQECHJlZkJ5S2V5CQEPa2V5QWRkcmVzc1JlZkJ5AQUEYWRkcgQFcmVmQnkJAKIIAQUIcmVmQnlLZXkDCQEBIQEJAQlpc0RlZmluZWQBBQVyZWZCeQkAAgECKVlvdSBhcmUgbm90IGVsaWdpYmxlIGZvciBPTkJPQVJEIGFydGlmYWN0BAZhcnRLZXkJARxrZXlPbmJvYXJkQXJ0RHVja0FjdGl2YXRlZEJ5AQUEYWRkcgQHYXJ0RHVjawkAoggBBQZhcnRLZXkDCQEJaXNEZWZpbmVkAQUHYXJ0RHVjawkAAgEJAKwCAgIvWW91IGFscmVhZHkgdXNlZCB5b3VyIE9OQk9BUkQgYXJ0aWZhY3Qgb24gZHVjayAJAQV2YWx1ZQEFB2FydER1Y2sEEGR1Y2tBY3RpdmF0b3JLZXkJARxrZXlPbmJvYXJkQXJ0QWN0aXZhdGVkT25EdWNrAQULZHVja0Fzc2V0SWQEDWR1Y2tBY3RpdmF0b3IJAKIIAQUQZHVja0FjdGl2YXRvcktleQMJAQlpc0RlZmluZWQBBQ1kdWNrQWN0aXZhdG9yCQACAQkArAICCQCsAgIJAKwCAgIJVGhlIGR1Y2sgBQtkdWNrQXNzZXRJZAI0IGFscmVhZHkgZ290IHBvaW50cyBmcm9tIE9OQk9BUkQgYXJ0aWZhY3QgZnJvbSB1c2VyIAkBBXZhbHVlAQUNZHVja0FjdGl2YXRvcgkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBmFydEtleQULZHVja0Fzc2V0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUQZHVja0FjdGl2YXRvcktleQUEYWRkcgUDbmlsCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQFCXhwT25ib2FyZAJfMQESYWN0aXZhdGVQcmVzYWxlQXJ0AgRhZGRyDWxhbmRBc3NldElkSW4EAWMJARRjaGVja0NsYWltQ29uZGl0aW9ucwMFBGFkZHIFE2NsYWltTW9kZVdoVGhlbkR1Y2sFDWxhbmRBc3NldElkSW4EC2xhbmRBc3NldElkCAUBYwJfMgQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCAUBYwJfMwULcmVjTGFuZFNpemUEDWFjdGl2YXRpb25LZXkJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkAwkAZgIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUNYWN0aXZhdGlvbktleQAAAAAJAAIBAiVQcmVzYWxlIGFydGlmYWN0IGlzIGFscmVhZHkgYWN0aXZhdGVkAwkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCCAUBYwJfMwUKcmVjTGFuZE51bQUPUFJFU0FMRU5VTUxBTkRTCQACAQkArAICCQCsAgIJAKwCAgUKTEFORFBSRUZJWAIBIAULbGFuZEFzc2V0SWQCJSBpcyBub3QgZWxpZ2libGUgZm9yIHByZXNhbGUgYXJ0aWZhY3QEC2NsYWltUmVzdWx0CQEIY2xhaW1BbGwEBQRhZGRyBQtsYW5kQXNzZXRJZAUGcGllY2VzBRNjbGFpbU1vZGVXaFRoZW5EdWNrCQDNCAIJAM0IAgkAzQgCCQDNCAIIBQtjbGFpbVJlc3VsdAJfMQkBDEludGVnZXJFbnRyeQIFDWFjdGl2YXRpb25LZXkFBnBpZWNlcwkBDEludGVnZXJFbnRyeQIJASVrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQFBGFkZHIFBnBpZWNlcwkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al8yCQC5CQIIBQtjbGFpbVJlc3VsdAJfMwIBOgkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al80CQC5CQIIBQtjbGFpbVJlc3VsdAJfNQIBOgENbWVyZ2VJbnRlcm5hbAcLbmV3TGFuZFNpemUIbmV3TGV2ZWwHZm9ybXVsYQRhZGRyDGxhbmRBc3NldElkcwR0eElkB25lZWRNYXQEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAoBCmNoZWNrTWVyZ2UCA2FjYwtsYW5kQXNzZXRJZAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAQJc2F2ZWRUaW1lCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQUHdGltZUtleQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMEAWQJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfBAljb250aW5lbnQJAJEDAgUBZAUMcmVjQ29udGluZW50AwMJAQIhPQIIBQNhY2MCXzMCAAkBAiE9AggFA2FjYwJfMwUJY29udGluZW50BwkAAgECLkxhbmRzIHNob3VsZCBiZSBvbiB0aGUgc2FtZSBjb250aW5lbnQgdG8gbWVyZ2UECGxhbmRTaXplCQCRAwIFAWQFC3JlY0xhbmRTaXplBAdzaXplc0luCAUDYWNjAl8xBAFpCQETdmFsdWVPckVycm9yTWVzc2FnZQIJALMJAgUHc2l6ZXNJbgUIbGFuZFNpemUCJ1lvdSBoYXZlbid0IHBhc3NlZCBhbGwgdGhlIGxhbmRzIG5lZWRlZAQIc2l6ZXNPdXQJAKwCAgkArwICBQdzaXplc0luBQFpCQCwAgIFB3NpemVzSW4JAGQCBQFpAAEEBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEFCGxhbmRTaXplBARhcnRzCQBkAggFA2FjYwJfMgkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAAABAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAQIcmVxTGV2ZWwEByRtYXRjaDAFCGxhbmRTaXplAwkAAAICAVMFByRtYXRjaDAAAwMJAAACAgFNBQckbWF0Y2gwAAQDCQAAAgIBTAUHJG1hdGNoMAAFAwkAAAICAlhMBQckbWF0Y2gwAAYJAAIBAhpPbmx5IFMsIE0sIEwsIFhMIGNhbiBtZXJnZQMJAQIhPQIFCmluZnJhTGV2ZWwFCHJlcUxldmVsCQACAQIiQWxsIGxhbmRzIHNob3VsZCBiZSBtYXhlZCB0byBtZXJnZQQHbGFuZE51bQkAkQMCBQFkBQpyZWNMYW5kTnVtBA10ZXJyYWluQ291bnRzCQENY291bnRUZXJyYWlucwEJAJEDAgUBZAULcmVjVGVycmFpbnMECWRlbHRhVGltZQkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQlzYXZlZFRpbWUDCQBmAgAABQlkZWx0YVRpbWUJAAIBCQCsAgIJAKwCAgkArAICAiZTYXZlZCB0aW1lc3RhbXAgaXMgaW4gZnV0dXJlLCBzYXZlZCA9IAkApAMBBQlzYXZlZFRpbWUCDCwgY3VycmVudCA9IAkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQkBDGFwcGx5Qm9udXNlcwIFC2xhbmRBc3NldElkBQZwaWVjZXMECWxhbmRJbmRleAkAaQIFBnBpZWNlcwUFU1NJWkUEBWJwUmVzCQEGYWRkUmVzBQkAtQkCCAUDYWNjAl80AgFfBQ10ZXJyYWluQ291bnRzBQlkZWx0YVRpbWUFCWxhbmRJbmRleAUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQQFcHJvcHMJARl1cGRhdGVQcm9wb3J0aW9uc0ludGVybmFsBAkAtQkCCAUDYWNjAl82AgFfBQ10ZXJyYWluQ291bnRzBQlsYW5kSW5kZXgA////////////AQQFbGFuZHMIBQNhY2MCXzcEA2lkeAkAzwgCBQVsYW5kcwULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBBQNpZHgJAAIBCQCsAgICIFlvdXIgc3Rha2VkIGxhbmRzIGRvbid0IGNvbnRhaW4gBQtsYW5kQXNzZXRJZAQJY3VzdG9tS2V5CQEaa2V5TGFuZEFzc2V0SWRUb0N1c3RvbU5hbWUBBQtsYW5kQXNzZXRJZAQKY3VzdG9tTmFtZQkBC3ZhbHVlT3JFbHNlAgkAoggBBQljdXN0b21LZXkCAAkAmgoIBQhzaXplc091dAUEYXJ0cwUJY29udGluZW50BQVicFJlcwkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCAUDYWNjAl81CQELRGVsZXRlRW50cnkBCQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkxBTkRQUkVGSVgFC2xhbmRBc3NldElkBQRhZGRyCQELRGVsZXRlRW50cnkBCQEQa2V5TGFuZFRvQXNzZXRJZAEFB2xhbmROdW0JAQtEZWxldGVFbnRyeQEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIFC2xhbmRBc3NldElkBQRhZGRyCQELRGVsZXRlRW50cnkBCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQkBJWtleUxhbmRBcnRTdGF0dXNCeVR5cGVBc3NldElkQW5kT3duZXIDBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAUEYWRkcgkBC0RlbGV0ZUVudHJ5AQkBEWtleUxhbmROdW1Ub093bmVyAQUHbGFuZE51bQkBC0RlbGV0ZUVudHJ5AQkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBBQljdXN0b21LZXkJAQtEZWxldGVFbnRyeQEJARprZXlMYW5kQ3VzdG9tTmFtZVRvQXNzZXRJZAEFCmN1c3RvbU5hbWUJAQRCdXJuAgkA2QQBBQtsYW5kQXNzZXRJZAABBQVwcm9wcwkA0QgCBQVsYW5kcwkBBXZhbHVlAQUDaWR4CQBkAggFA2FjYwJfOAUGcGllY2VzBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQHcHJvcFN0cgkBC3ZhbHVlT3JFbHNlAgkAoggBCQERa2V5UmVzUHJvcG9ydGlvbnMAAgswXzBfMF8wXzBfMAQIbGFuZHNLZXkJARVrZXlTdGFrZWRMYW5kc0J5T3duZXIBBQRhZGRyBAhsYW5kc1N0cgkAoggBBQhsYW5kc0tleQQHbGFuZHNJbgMJAQlpc0RlZmluZWQBBQhsYW5kc1N0cgkAvQkCCQEFdmFsdWUBBQhsYW5kc1N0cgIBXwUDbmlsBAFyCgACJGwFDGxhbmRBc3NldElkcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJoKCAUHZm9ybXVsYQAAAgAJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzBQNuaWwFB3Byb3BTdHIFB2xhbmRzSW4AAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKY2hlY2tNZXJnZQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUECWNvbnRpbmVudAgFAXICXzMEDGNvbnRpbmVudElkeAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDPCAIFCmNvbnRpbmVudHMFCWNvbnRpbmVudAkArAICAhNVbmtub3duIGNvbnRpbmVudDogBQljb250aW5lbnQECHRlcnJhaW5zCQELZ2VuVGVycmFpbnMCCQEDYWJzAQkAngMBBQR0eElkBQxjb250aW5lbnRJZHgEB2ZyZWVOdW0JAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBEmtleU5leHRGcmVlTGFuZE51bQAJAGQCBQ9QUkVTQUxFTlVNTEFORFMAAQQKbmV3TGFuZE51bQkApAMBBQdmcmVlTnVtBAVpc3N1ZQkAwggFCQEHbmZ0TmFtZQIFCm5ld0xhbmROdW0FC25ld0xhbmRTaXplCQC5CQIJAMwIAgUKbmV3TGFuZE51bQkAzAgCBQtuZXdMYW5kU2l6ZQkAzAgCBQh0ZXJyYWlucwkAzAgCBQljb250aW5lbnQFA25pbAIBXwABAAAHBAdhc3NldElkCQC4CAEFBWlzc3VlBA5uZXdMYW5kQXNzZXRJZAkA2AQBBQdhc3NldElkBAZuZXdNYXQJALkJAgkBEXN1YnRyYWN0TWF0ZXJpYWxzAwkAZgIFB25lZWRNYXQAAAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwUHbmVlZE1hdAIBXwQJcGllY2VzS2V5CQEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEFBGFkZHIEDHN0YWtlZFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlwaWVjZXNLZXkAAAkAlAoCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCAUBcgJfNQMJAGYCCQCQAwEIBQFyAl83AAAJAQtTdHJpbmdFbnRyeQIFCGxhbmRzS2V5CQC7CQIIBQFyAl83AgFfCQELRGVsZXRlRW50cnkBBQhsYW5kc0tleQkBDEludGVnZXJFbnRyeQIFCXBpZWNlc0tleQMJAGYCCAUBcgJfOAUMc3Rha2VkUGllY2VzAAAJAGUCBQxzdGFrZWRQaWVjZXMIBQFyAl84CQEMSW50ZWdlckVudHJ5AgkBEmtleU5leHRGcmVlTGFuZE51bQAJAGQCBQdmcmVlTnVtAAEFBWlzc3VlCQELU3RyaW5nRW50cnkCCQEQa2V5TGFuZFRvQXNzZXRJZAEFCm5ld0xhbmROdW0FDm5ld0xhbmRBc3NldElkCQELU3RyaW5nRW50cnkCCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQUObmV3TGFuZEFzc2V0SWQFBGFkZHIJAQtTdHJpbmdFbnRyeQIJARFrZXlMYW5kTnVtVG9Pd25lcgEFCm5ld0xhbmROdW0FBGFkZHIJAQxJbnRlZ2VyRW50cnkCCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQ5uZXdMYW5kQXNzZXRJZAgFAXICXzIJAQxJbnRlZ2VyRW50cnkCCQEla2V5TGFuZEFydFN0YXR1c0J5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkFSVFBSRVNBTEUFDm5ld0xhbmRBc3NldElkBQRhZGRyCAUBcgJfMgkBDEludGVnZXJFbnRyeQIJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQUObmV3TGFuZEFzc2V0SWQFCG5ld0xldmVsCQEMSW50ZWdlckVudHJ5AgkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIFDm5ld0xhbmRBc3NldElkBQRhZGRyBQhuZXdMZXZlbAkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIIBQFyAl80CQDMCAIFBm5ld01hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgkBC1N0cmluZ0VudHJ5AgkBEWtleVJlc1Byb3BvcnRpb25zAAgFAXICXzYJAQtTdHJpbmdFbnRyeQIJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAkAuQkCCQDMCAIFCWNvbnRpbmVudAkAzAgCAgFMCQDMCAIFDm5ld0xhbmRBc3NldElkBQNuaWwCAV8JAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBGFkZHIAAQUHYXNzZXRJZAUObmV3TGFuZEFzc2V0SWQBA3MybQMEYWRkcgxsYW5kQXNzZXRJZHMEdHhJZAkBDW1lcmdlSW50ZXJuYWwHAgFNAAMCBFNTU1MFBGFkZHIFDGxhbmRBc3NldElkcwUEdHhJZAAAAQNtMmwFBGFkZHIMbGFuZEFzc2V0SWRzBHR4SWQMc2hvdWxkVXNlTWF0DXBheW1lbnRBbW91bnQEBGNvc3QJAGgCBRVJbmZyYVVwZ3JhZGVDb3N0U1VzZHQABAMDCQEBIQEFDHNob3VsZFVzZU1hdAkBAiE9AgUNcGF5bWVudEFtb3VudAUEY29zdAcJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQRjb3N0CQENbWVyZ2VJbnRlcm5hbAcCAUwABAIDU01NBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQJAGgCBRFJbmZyYVVwZ3JhZGVDb3N0UwAEAQRsMnhsBQRhZGRyDGxhbmRBc3NldElkcwR0eElkDHNob3VsZFVzZU1hdA1wYXltZW50QW1vdW50BARjb3N0CQBoAgUVSW5mcmFVcGdyYWRlQ29zdFNVc2R0AC8DAwkBASEBBQxzaG91bGRVc2VNYXQJAQIhPQIFDXBheW1lbnRBbW91bnQFBGNvc3QHCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUEY29zdAkBDW1lcmdlSW50ZXJuYWwHAgJYTAAFAgVTU1NNTAUEYWRkcgUMbGFuZEFzc2V0SWRzBQR0eElkCQBoAgURSW5mcmFVcGdyYWRlQ29zdFMALwEGeGwyeHhsBQRhZGRyDGxhbmRBc3NldElkcwR0eElkDHNob3VsZFVzZU1hdA1wYXltZW50QW1vdW50BARjb3N0CQBoAgUVSW5mcmFVcGdyYWRlQ29zdFNVc2R0ADYDAwkBASEBBQxzaG91bGRVc2VNYXQJAQIhPQIFDXBheW1lbnRBbW91bnQFBGNvc3QHCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUEY29zdAkBDW1lcmdlSW50ZXJuYWwHAgNYWEwABgIDTFhMBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQJAGgCBRFJbmZyYVVwZ3JhZGVDb3N0UwA2AQttZXJnZUNvbW1vbgUMc2hvdWxkVXNlTWF0BGFkZHINcGF5bWVudEFtb3VudAxsYW5kQXNzZXRJZHMEdHhJZAQLbWVyZ2VSZXN1bHQEByRtYXRjaDAJAJADAQUMbGFuZEFzc2V0SWRzAwkAAAIABAUHJG1hdGNoMAkBA3MybQMFBGFkZHIFDGxhbmRBc3NldElkcwUEdHhJZAMJAAACAAMFByRtYXRjaDAJAQNtMmwFBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQFDHNob3VsZFVzZU1hdAUNcGF5bWVudEFtb3VudAMJAAACAAUFByRtYXRjaDAJAQRsMnhsBQUEYWRkcgUMbGFuZEFzc2V0SWRzBQR0eElkBQxzaG91bGRVc2VNYXQFDXBheW1lbnRBbW91bnQDCQAAAgACBQckbWF0Y2gwCQEGeGwyeHhsBQUEYWRkcgUMbGFuZEFzc2V0SWRzBQR0eElkBQxzaG91bGRVc2VNYXQFDXBheW1lbnRBbW91bnQJAAIBAg1Vbmtub3duIG1lcmdlBQttZXJnZVJlc3VsdAEGcHJvbG9nAQFpAwMJAQIhPQIIBQFpDG9yaWdpbkNhbGxlcgUMcmVzdENvbnRyYWN0CQELdmFsdWVPckVsc2UCCQCgCAEJAQprZXlCbG9ja2VkAAcHCQACAQIfQ29udHJhY3RzIGFyZSB1bmRlciBtYWludGVuYW5jZQkBC1N0cmluZ0VudHJ5AgkBEWtleUxhc3RUeElkQnlVc2VyAQkApQgBCAUBaQxvcmlnaW5DYWxsZXIJANgEAQgFAWkNdHJhbnNhY3Rpb25JZCMBaQENY29uc3RydWN0b3JWMQEIcmVzdEFkZHIDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAkAzAgCCQELU3RyaW5nRW50cnkCCQEOa2V5UmVzdEFkZHJlc3MABQhyZXN0QWRkcgUDbmlsAWkBCnNldEJsb2NrZWQBCWlzQmxvY2tlZAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEXBlcm1pc3Npb24gZGVuaWVkCQDMCAIJAQxCb29sZWFuRW50cnkCCQEKa2V5QmxvY2tlZAAFCWlzQmxvY2tlZAUDbmlsAWkBCXN0YWtlTGFuZAAEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQHYXNzZXRJZAkBBXZhbHVlAQgFA3BtdAdhc3NldElkBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgMJAQIhPQIIBQNwbXQGYW1vdW50AAEJAAIBCQCsAgIJAKwCAgIETkZUIAUKTEFORFBSRUZJWAIkIHRva2VuIHNob3VsZCBiZSBhdHRhY2hlZCBhcyBwYXltZW50BAVhc3NldAkBBXZhbHVlAQkA7AcBBQdhc3NldElkAwkBAiE9AggFBWFzc2V0Bmlzc3VlcgUEdGhpcwkAAgECF1Vua25vd24gaXNzdWVyIG9mIHRva2VuAwkBASEBCQEIY29udGFpbnMCCAUFYXNzZXQEbmFtZQUKTEFORFBSRUZJWAkAAgEJAKwCAgkArAICAglPbmx5IE5GVCAFCkxBTkRQUkVGSVgCFCB0b2tlbnMgYXJlIGFjY2VwdGVkBAtsYW5kTnVtU2l6ZQkAsAICCAUFYXNzZXQEbmFtZQAEBAdsYW5kTnVtAwkBCGNvbnRhaW5zAgULbGFuZE51bVNpemUCA1hYTAkAswICBQtsYW5kTnVtU2l6ZQADAwkBCGNvbnRhaW5zAgULbGFuZE51bVNpemUCAlhMCQCzAgIFC2xhbmROdW1TaXplAAIJALMCAgULbGFuZE51bVNpemUAAQMJAQEhAQkBCWlzRGVmaW5lZAEJALYJAQUHbGFuZE51bQkAAgEJAKwCAgIeQ2Fubm90IHBhcnNlIGxhbmQgbnVtYmVyIGZyb20gCAUFYXNzZXQEbmFtZQQLbGFuZEFzc2V0SWQJANgEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAMJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCEiBpcyBhbHJlYWR5IHN0YWtlZAQBZAkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8EDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCBQFkBQtyZWNUZXJyYWlucwQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCBQFkBQtyZWNMYW5kU2l6ZQQFcHJvcHMJARF1cGRhdGVQcm9wb3J0aW9ucwMFDXRlcnJhaW5Db3VudHMJAGkCBQZwaWVjZXMFBVNTSVpFAAEECWFydFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAAABAhsYW5kc0tleQkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFB2FkZHJlc3MECGxhbmRzU3RyCQCiCAEFCGxhbmRzS2V5BAVsYW5kcwMJAQlpc0RlZmluZWQBBQhsYW5kc1N0cgkAvQkCCQEFdmFsdWUBBQhsYW5kc1N0cgIBXwUDbmlsAwkBD2NvbnRhaW5zRWxlbWVudAIFBWxhbmRzBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgIiWW91ciBzdGFrZWQgbGFuZHMgYWxyZWFkeSBjb250YWluIAULbGFuZEFzc2V0SWQECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAlwaWVjZXNLZXkJARZrZXlTdGFrZWRQaWVjZXNCeU93bmVyAQUHYWRkcmVzcwQJb2xkUGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEFCXBpZWNlc0tleQAABAl3bGdSZXN1bHQJAQVhc0ludAEJAPwHBAULd2xnQ29udHJhY3QCEm9uU3Rha2VVbnN0YWtlTGFuZAkAzAgCBQdhZGRyZXNzBQNuaWwFA25pbAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQd0aW1lS2V5CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBC1N0cmluZ0VudHJ5AgUIbGFuZHNLZXkJALsJAgkAzQgCBQVsYW5kcwULbGFuZEFzc2V0SWQCAV8JAMwIAgkBDEludGVnZXJFbnRyeQIFCXBpZWNlc0tleQkAZAIFCW9sZFBpZWNlcwUGcGllY2VzCQDMCAIJAQtTdHJpbmdFbnRyeQIJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5TGFuZE51bVRvT3duZXIBBQdsYW5kTnVtBQdhZGRyZXNzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEla2V5TGFuZEFydFN0YXR1c0J5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkBQdhZGRyZXNzBQlhcnRQaWVjZXMJAMwIAgkBDEludGVnZXJFbnRyeQIJAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwUKaW5mcmFMZXZlbAkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5UmVzUHJvcG9ydGlvbnMABQVwcm9wcwkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAUJd2xnUmVzdWx0AWkBC3Vuc3Rha2VMYW5kAQ1sYW5kQXNzZXRJZEluBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkGY2FsbGVyBAFjCQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBQRhZGRyBQ1jbGFpbU1vZGVEdWNrBQ1sYW5kQXNzZXRJZEluBAtsYW5kQXNzZXRJZAgFAWMCXzIECGxhbmRzS2V5CQEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQUEYWRkcgQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIIBQFjAl8zBQtyZWNUZXJyYWlucwQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCAUBYwJfMwULcmVjTGFuZFNpemUEBXByb3BzCQERdXBkYXRlUHJvcG9ydGlvbnMDBQ10ZXJyYWluQ291bnRzCQBpAgUGcGllY2VzBQVTU0laRQD///////////8BBAtjbGFpbVJlc3VsdAkBCGNsYWltQWxsBAUEYWRkcgULbGFuZEFzc2V0SWQFBnBpZWNlcwUNY2xhaW1Nb2RlRHVjawQFbGFuZHMJAL0JAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQhsYW5kc0tleQIAAgFfBANpZHgJAM8IAgUFbGFuZHMFC2xhbmRBc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQUDaWR4CQACAQkArAICAiBZb3VyIHN0YWtlZCBsYW5kcyBkb24ndCBjb250YWluIAULbGFuZEFzc2V0SWQEA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAEDmdvdlJlbGVhc2VUaW1lCQELdmFsdWVPckVsc2UCCQCaCAIFC2dvdkNvbnRyYWN0CQEVa2V5VXNlckd3bFJlbGVhc2VUaW1lAQUEYWRkcgAAAwkAZwIFDmdvdlJlbGVhc2VUaW1lBQNub3cJAAIBCQCsAgICOVlvdXIgZ1dMIGFyZSB0YWtpbmcgcGFydCBpbiB2b3RpbmcsIGNhbm5vdCB1bnN0YWtlIHVudGlsIAkApAMBBQ5nb3ZSZWxlYXNlVGltZQQOYXJiUmVsZWFzZVRpbWUJAGQCCQELdmFsdWVPckVsc2UCCQCaCAIFC3dsZ0NvbnRyYWN0CQEUa2V5TGFzdEFyYlRpbWVCeVVzZXIBBQRhZGRyAAAFDmFyYml0cmFnZURlbGF5AwkAZgIFDmFyYlJlbGVhc2VUaW1lBQNub3cJAAIBCQCsAgICP1lvdXIgc3Rha2VkIGxhbmRzIHRvb2sgcGFydCBpbiBhcmJpdHJhZ2UsIGNhbm5vdCB1bnN0YWtlIHVudGlsIAkApAMBBQ5hcmJSZWxlYXNlVGltZQQJcGllY2VzS2V5CQEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEFBGFkZHIEDHN0YWtlZFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlwaWVjZXNLZXkAAAQJbmV3UGllY2VzAwkAZgIFBnBpZWNlcwUMc3Rha2VkUGllY2VzAAAJAGUCBQxzdGFrZWRQaWVjZXMFBnBpZWNlcwQJd2xnUmVzdWx0CQEFYXNJbnQBCQD8BwQFC3dsZ0NvbnRyYWN0AhJvblN0YWtlVW5zdGFrZUxhbmQJAMwIAgUEYWRkcgUDbmlsBQNuaWwJAJQKAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQkA2QQBBQtsYW5kQXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKTEFORFBSRUZJWAULbGFuZEFzc2V0SWQFBGFkZHIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleVJlc1Byb3BvcnRpb25zAAUFcHJvcHMJAMwIAgkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al8yCQC5CQIIBQtjbGFpbVJlc3VsdAJfMwIBOgkAzAgCAwkAZgIJAJADAQUFbGFuZHMAAQkBC1N0cmluZ0VudHJ5AgUIbGFuZHNLZXkJALsJAgkA0QgCBQVsYW5kcwkBBXZhbHVlAQUDaWR4AgFfCQELRGVsZXRlRW50cnkBBQhsYW5kc0tleQkAzAgCCQEMSW50ZWdlckVudHJ5AgUJcGllY2VzS2V5BQluZXdQaWVjZXMJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwFCXdsZ1Jlc3VsdAFpAQlzdGFrZUR1Y2sABAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAEB2Fzc2V0SWQJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIDCQECIT0CCAUDcG10BmFtb3VudAABCQACAQkArAICCQCsAgICBE5GVCAFCkRVQ0tQUkVGSVgCJCB0b2tlbiBzaG91bGQgYmUgYXR0YWNoZWQgYXMgcGF5bWVudAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQUHYXNzZXRJZAMDCQECIT0CCAUFYXNzZXQGaXNzdWVyBQ1pbmN1YmF0b3JBZGRyCQECIT0CCAUFYXNzZXQGaXNzdWVyBQticmVlZGVyQWRkcgcJAAIBCQCsAgIJAKwCAgISVW5rbm93biBpc3N1ZXIgb2YgBQpEVUNLUFJFRklYAgYgdG9rZW4DCQEBIQEJAQhjb250YWlucwIIBQVhc3NldARuYW1lBQpEVUNLUFJFRklYCQACAQkArAICCQCsAgICCU9ubHkgTkZUIAUKRFVDS1BSRUZJWAIUIHRva2VucyBhcmUgYWNjZXB0ZWQECmFzc2V0SWRTdHIJANgEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQphc3NldElkU3RyAwkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQISIGlzIGFscmVhZHkgc3Rha2VkAwkBCWlzRGVmaW5lZAEJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUHYWRkcmVzcwkAAgEJAKwCAgIdWW91IGFscmVhZHkgc3Rha2VkIG9uZSBkdWNrOiAIBQVhc3NldARuYW1lBAZsb2NLZXkJAQ9rZXlEdWNrTG9jYXRpb24BBQphc3NldElkU3RyBAhsb2NhdGlvbgkAoggBBQZsb2NLZXkEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQphc3NldElkU3RyBAhiYWNrcGFjawkAoggBBQVicEtleQQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFCmFzc2V0SWRTdHIEBW1heEhQCQEJbWF4SGVhbHRoAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMa2V5RHVja0xldmVsAQUKYXNzZXRJZFN0cgAABAljdXJIZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoBQVtYXhIUAkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQd0aW1lS2V5CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpEVUNLUFJFRklYCQDYBAEFB2Fzc2V0SWQFB2FkZHJlc3MIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQtTdHJpbmdFbnRyeQIJARBrZXlEdWNrSWRUb093bmVyAQUKYXNzZXRJZFN0cgUHYWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQdhZGRyZXNzBQphc3NldElkU3RyBQNuaWwDCQEJaXNEZWZpbmVkAQUIbG9jYXRpb24FA25pbAkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBmxvY0tleQUPREVGQVVMVExPQ0FUSU9OBQNuaWwDCQEJaXNEZWZpbmVkAQUIYmFja3BhY2sFA25pbAkAzQgCCQDNCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkCGjA6MF8wXzBfMF8wXzA6MF8wXzBfMF8wXzA6BQNuaWwJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgFCWN1ckhlYWx0aAUMcHJvbG9nQWN0aW9uAWkBC3Vuc3Rha2VEdWNrAQphc3NldElkU3RyBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEB2Fzc2V0SWQJANkEAQUKYXNzZXRJZFN0cgQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIEBWFzc2V0CQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQkA2AQBBQdhc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5CQACAQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAMJAQEhAQkBCWlzRGVmaW5lZAEJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUHYWRkcmVzcwkAAgEJAKwCAgkArAICAglUaGUgZHVjayAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEQa2V5RHVja0lkVG9Pd25lcgEJANgEAQUHYXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUHYWRkcmVzcwkAAgECF1N0YWtlZCBORlQgaXMgbm90IHlvdXJzBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQUKYXNzZXRJZFN0cgQFbWF4SFAJAQltYXhIZWFsdGgBCQELdmFsdWVPckVsc2UCCQCfCAEJAQxrZXlEdWNrTGV2ZWwBBQphc3NldElkU3RyAAAEBmhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQAwkAZgIFBW1heEhQBQZoZWFsdGgJAAIBCQCsAgIJAKwCAgIZUGxlYXNlIGhlYWwgeW91ciBkdWNrIHRvIAkApAMBBQVtYXhIUAITaHAgYmVmb3JlIHVuc3Rha2luZwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQUHYXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBBQd0aW1lS2V5CQDMCAIJAQtEZWxldGVFbnRyeQEFCWtleUhlYWx0aAkAzAgCCQELRGVsZXRlRW50cnkBCQEPa2V5RHVja0xvY2F0aW9uAQUKYXNzZXRJZFN0cgkAzAgCCQELRGVsZXRlRW50cnkBCQEQa2V5RHVja0lkVG9Pd25lcgEFCmFzc2V0SWRTdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpEVUNLUFJFRklYBQphc3NldElkU3RyBQdhZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFB2FkZHJlc3MJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwBaQEIY2xhaW1SZXMCBmFtb3VudA5sYW5kQXNzZXRJZFN0cgQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQGcmVzdWx0CQEQY2xhaW1SZXNJbnRlcm5hbAQFBGFkZHIFBmFtb3VudAUNY2xhaW1Nb2RlRHVjawUObGFuZEFzc2V0SWRTdHIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAkAlAoCCQDNCAIJAM0IAgkAzQgCCQDOCAIIBQZyZXN1bHQCXzEICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAkAawMFB3hwQ2xhaW0FBmFtb3VudAUFTVVMVDgCXzEJAQtTdHJpbmdFbnRyeQIIBQZyZXN1bHQCXzIJALkJAggFBnJlc3VsdAJfMwIBOgkBC1N0cmluZ0VudHJ5AggFBnJlc3VsdAJfNAkAuQkCCAUGcmVzdWx0Al81AgE6BQxwcm9sb2dBY3Rpb24JAJEDAggFBnJlc3VsdAJfMwUIYnBJZHhSZXMBaQEMY2xhaW1SZXNUb1dIAgZhbW91bnQObGFuZEFzc2V0SWRTdHIEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEBnJlc3VsdAkBEGNsYWltUmVzSW50ZXJuYWwEBQRhZGRyBQZhbW91bnQFC2NsYWltTW9kZVdoBQ5sYW5kQXNzZXRJZFN0cgkAlAoCCQDNCAIJAM0IAgkAzQgCCQDOCAIIBQZyZXN1bHQCXzEICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIFBGFkZHIJAGsDBQd4cENsYWltBQZhbW91bnQFBU1VTFQ4Al8xCQELU3RyaW5nRW50cnkCCAUGcmVzdWx0Al8yCQC5CQIIBQZyZXN1bHQCXzMCAToJAQtTdHJpbmdFbnRyeQIIBQZyZXN1bHQCXzQJALkJAggFBnJlc3VsdAJfNQIBOgUMcHJvbG9nQWN0aW9uCQCRAwIIBQZyZXN1bHQCXzUFCHdoSWR4UmVzAWkBBmZsaWdodAIHbWVzc2FnZQNzaWcEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQIdXNlckFkZHIJAKUIAQgFAWkGY2FsbGVyBAFmCQEMZmxpZ2h0Q29tbW9uAwUIdXNlckFkZHIFB21lc3NhZ2UFA3NpZwQLZHVja0Fzc2V0SWQIBQFmAl8yBAZsb2NLZXkJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQUGbG9jS2V5BQ9ERUZBVUxUTE9DQVRJT04DCQAAAggFAWYCXzQFC2N1ckxvY2F0aW9uCQACAQIiWW91IGNhbid0IGZseSB0byB0aGUgc2FtZSBsb2NhdGlvbgQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEB25ld1Byb2QJARBzdWJ0cmFjdFByb2R1Y3RzAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kCAUBZgJfNQkAlAoCCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUGbG9jS2V5AwkAZgIIBQFmAl8xAAAIBQFmAl80BQtjdXJMb2NhdGlvbgkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQJAMwIAgUHbmV3UHJvZAUDbmlsAgE6CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkCAUBZgJfMQkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkAwkAZgIIBQFmAl8xAAAFD3hwU3VjY2Vzc0ZsaWdodAUMeHBGYWlsRmxpZ2h0Al8xCAUBZgJfMwFpAQRoZWFsAwpxdWFudGl0eUwxCnF1YW50aXR5TDIKcXVhbnRpdHlMMwQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMDAwkAZgIAAAUKcXVhbnRpdHlMMQYJAGYCAAAFCnF1YW50aXR5TDIGCQBmAgAABQpxdWFudGl0eUwzCQACAQIbUXVhbnRpdHkgY2Fubm90IGJlIG5lZ2F0aXZlBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBANxdHMJAMwIAgUKcXVhbnRpdHlMMQkAzAgCBQpxdWFudGl0eUwyCQDMCAIFCnF1YW50aXR5TDMFA25pbAQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAVtYXhIUAkBCW1heEhlYWx0aAEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDGtleUR1Y2tMZXZlbAEFC2R1Y2tBc3NldElkAAAECW9sZEhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQAwkAZwIFCW9sZEhlYWx0aAUFbWF4SFAJAAIBCQCsAgIJAKwCAgIPSFAgc2hvdWxkIGJlIDwgCQCkAwEFBW1heEhQAgggdG8gaGVhbAQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2tw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eW1lbnQgb25seSEEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAQFbWF4SFAJAQltYXhIZWFsdGgBCQELdmFsdWVPckVsc2UCCQCfCAEJAQxrZXlEdWNrTGV2ZWwBBQtkdWNrQXNzZXRJZAAABAlvbGRIZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoBQVtYXhIUAMJAGYCBQlvbGRIZWFsdGgAAAkAAgECKEhQIHNob3VsZCBiZSAwIHRvIGNhbGwgRW1lcmdlbmN5IFNlcnZpY2UEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAhwcm9kTGlzdAMJAAACCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAAUDbmlsCQC1CQIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIBXwQNbWVkS2l0QW1vdW50MQMJAGYCCQCQAwEFCHByb2RMaXN0AAAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhwcm9kTGlzdAAAAAAEDW1lZEtpdEFtb3VudDIDCQBmAgkAkAMBBQhwcm9kTGlzdAABCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvZExpc3QAAQAABA1tZWRLaXRBbW91bnQzAwkAZgIJAJADAQUIcHJvZExpc3QAAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb2RMaXN0AAIAAAMDAwkAZgIFDW1lZEtpdEFtb3VudDEAAAYJAGYCBQ1tZWRLaXRBbW91bnQyAAAGCQBmAgUNbWVkS2l0QW1vdW50MwAACQACAQIfWW91IGhhdmUgdG8gdXNlIG93biBNZWRpY2FsIEtpdAQIZXhpc3RTdHIJAJ0IAgUPZWNvbm9teUNvbnRyYWN0CQEOa2V5RXNXYXJlaG91c2UABAxleGlzdEFtb3VudHMDCQEJaXNEZWZpbmVkAQUIZXhpc3RTdHIJALUJAgkBBXZhbHVlAQUIZXhpc3RTdHICAV8FA25pbAQLZXhpc3RBbW91bnQDCQBmAgkAkAMBBQxleGlzdEFtb3VudHMAAAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDGV4aXN0QW1vdW50cwAAAAADCQBnAgAABQtleGlzdEFtb3VudAkAAgECOVRoZXJlIGFyZSBubyBNZWRpY2FsIEtpdHMgTDEgYXQgRW1lcmdlbmN5IFNlcnZpY2Ugc3RvcmFnZQQJbmV3SGVhbHRoCQBkAgUJb2xkSGVhbHRoCQCRAwIFCG1lZEtpdEhwAAAEBW5ld0VTCQC5CQIJAMwIAgkApAMBCQBlAgULZXhpc3RBbW91bnQAAQkA0QgCBQxleGlzdEFtb3VudHMAAAIBXwQGcmVjaXBlCQC1CQIJAJEDAgUQcHJvZHVjdGlvbk1hdHJpeAAAAgFfBAh0b3RhbE1hdAkBEmdldFJlY2lwZU1hdGVyaWFscwEFBnJlY2lwZQQJc2VsbFByaWNlCQBrAwkAaAIFCHRvdGFsTWF0BQpFU1NFTExDT0VGBRBSRVNPVVJDRVBSSUNFTUlOCQBoAgAKBQ5QUk9EVUNUUEtHU0laRQMJAQIhPQIIBQNwbXQGYW1vdW50BQlzZWxsUHJpY2UJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQlzZWxsUHJpY2UEBnJlc3VsdAkBCGFzU3RyaW5nAQkA/AcEBQ9lY29ub215Q29udHJhY3QCD3VwZGF0ZUVzU3RvcmFnZQkAzAgCBQVuZXdFUwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQt1c2R0QXNzZXRJZAUJc2VsbFByaWNlBQNuaWwJAJQKAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgFCW5ld0hlYWx0aAkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkBQh4cENhbGxFUwJfMQUGcmVzdWx0AWkBDnVwZGF0ZUJhY2twYWNrAgtkdWNrQXNzZXRJZAduZXdQYWNrAwkBAiE9AggFAWkGY2FsbGVyBQ9lY29ub215Q29udHJhY3QJAAIBAhFwZXJtaXNzaW9uIGRlbmllZAkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBQduZXdQYWNrBQNuaWwFB25ld1BhY2sBaQEIYnV5U0xhbmQABAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQIaQWxsb3dlZCBVU0RUIHBheW1lbnQgb25seSEDCQECIT0CCAUDcG10BmFtb3VudAUHRVhQVVNEVAkAAgEJAKwCAgIbUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgCQCkAwEFB0VYUFVTRFQEBnJlc3VsdAkBEmV4cGVkaXRpb25JbnRlcm5hbAIIBQFpBmNhbGxlcggFAWkNdHJhbnNhY3Rpb25JZAkAlAoCCQDNCAIJAM4IAgkAzQgCCAUGcmVzdWx0Al8xCQEOU2NyaXB0VHJhbnNmZXIDBQ9lY29ub215Q29udHJhY3QIBQNwbXQGYW1vdW50BQt1c2R0QXNzZXRJZAgJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgkApQgBCAUBaQZjYWxsZXIFCnhwTmV3U0xhbmQCXzEFDHByb2xvZ0FjdGlvbggIBQZyZXN1bHQCXzICXzEBaQEKZXhwZWRpdGlvbgIHbWVzc2FnZQNzaWcEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQGcmVzdWx0CQEQZXhwZWRpdGlvbkNvbW1vbgQIBQFpBmNhbGxlcggFAWkNdHJhbnNhY3Rpb25JZAUHbWVzc2FnZQUDc2lnBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkCQCUCgIJAM0IAgkAzggCCAUGcmVzdWx0Al8xCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQFCnhwTmV3U0xhbmQCXzEFDHByb2xvZ0FjdGlvbgkAlAoCCAUGcmVzdWx0Al8yCAUGcmVzdWx0Al8zAWkBDHVwZ3JhZGVJbmZyYQELbGFuZEFzc2V0SWQEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQGcmVzdWx0CQENdXBJbmZyYUNvbW1vbgQGCAUBaQZjYWxsZXIAAAULbGFuZEFzc2V0SWQEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQJAJQKAgkAzggCCQDNCAIIBQZyZXN1bHQCXzEFDHByb2xvZ0FjdGlvbggJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkCQBrAwUOeHBVcGdyYWRlSW5mcmEIBQZyZXN1bHQCXzMFBU1VTFQ4Al8xCAUGcmVzdWx0Al8yAWkBEHVwZ3JhZGVJbmZyYVVzZHQBC2xhbmRBc3NldElkAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRUGVybWlzc2lvbiBkZW5pZWQEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhpBbGxvd2VkIFVTRFQgcGF5bWVudCBvbmx5IQQGcmVzdWx0CQENdXBJbmZyYUNvbW1vbgQHCAUBaQZjYWxsZXIIBQNwbXQGYW1vdW50BQtsYW5kQXNzZXRJZAkAlAoCCQDNCAIJAM0IAggFBnJlc3VsdAJfMQkBDlNjcmlwdFRyYW5zZmVyAwUPZWNvbm9teUNvbnRyYWN0CAUDcG10BmFtb3VudAULdXNkdEFzc2V0SWQFDHByb2xvZ0FjdGlvbggFBnJlc3VsdAJfMgFpARBhY3RpdmF0ZUFydGlmYWN0AgdhcnROYW1lDmxhbmRBc3NldElkT3B0BAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkGY2FsbGVyBAZyZXN1bHQEByRtYXRjaDAFB2FydE5hbWUDCQAAAgIHUFJFU0FMRQUHJG1hdGNoMAkBEmFjdGl2YXRlUHJlc2FsZUFydAIFBGFkZHIFDmxhbmRBc3NldElkT3B0AwkAAAICB09OQk9BUkQFByRtYXRjaDAJARJhY3RpdmF0ZU9uYm9hcmRBcnQBBQRhZGRyCQACAQIQVW5rbm93biBhcnRpZmFjdAkAzQgCBQZyZXN1bHQFDHByb2xvZ0FjdGlvbgFpAQptZXJnZUxhbmRzAQxsYW5kQXNzZXRJZHMEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQGcmVzdWx0CQELbWVyZ2VDb21tb24FBgkApQgBCAUBaQZjYWxsZXIAAAUMbGFuZEFzc2V0SWRzCAUBaQ10cmFuc2FjdGlvbklkCQCUCgIJAM4IAgkAzQgCCAUGcmVzdWx0Al8xBQxwcm9sb2dBY3Rpb24ICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIJAKUIAQgFAWkGY2FsbGVyBQd4cE1lcmdlAl8xCAUGcmVzdWx0Al8yAWkBDm1lcmdlTGFuZHNVc2R0AQxsYW5kQXNzZXRJZHMEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhpBbGxvd2VkIFVTRFQgcGF5bWVudCBvbmx5IQQGcmVzdWx0CQELbWVyZ2VDb21tb24FBwkApQgBCAUBaQZjYWxsZXIIBQNwbXQGYW1vdW50BQxsYW5kQXNzZXRJZHMIBQFpDXRyYW5zYWN0aW9uSWQJAJQKAgkAzQgCCQDNCAIIBQZyZXN1bHQCXzEJAQ5TY3JpcHRUcmFuc2ZlcgMFD2Vjb25vbXlDb250cmFjdAgFA3BtdAZhbW91bnQFC3VzZHRBc3NldElkBQxwcm9sb2dBY3Rpb24IBQZyZXN1bHQCXzIBaQENY2FyZ29FeGNoYW5nZQIMY2FyZ29MaXN0U3RyC2xhbmRBc3NldElkBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQECmNhcmdvUGFydHMJALwJAgUMY2FyZ29MaXN0U3RyAgE6BARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAggFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQJbGFuZEluZGV4CQBpAgkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAgkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8FC3JlY0xhbmRTaXplBQVTU0laRQQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04EA2xvYwkAtQkCCQEFdmFsdWUBBQtjdXJMb2NhdGlvbgIBXwMJAQIhPQIJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAgFMCQACAQkArAICCQCsAgICFkR1Y2sgbG9jYXRpb24gdHlwZSBpcyAJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAhEsIGJ1dCBzaG91bGQgYmUgTAMJAQIhPQIJAJEDAgUDbG9jBQhsb2NJZHhJZAULbGFuZEFzc2V0SWQJAAIBCQCsAgICG0R1Y2sgc2hvdWxkIGJlIG9uIHRoZSBsYW5kIAULbGFuZEFzc2V0SWQEBXdoS2V5CQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQECWN1cnJlbnRXaAkBDGdldFdhcmVob3VzZQMFBXdoS2V5BQlsYW5kSW5kZXgFCmluZnJhTGV2ZWwEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAZyZXN1bHQJAQltb3ZlU3R1ZmYDBQpjYXJnb1BhcnRzBQljdXJyZW50V2gFC2N1cnJlbnRQYWNrBARsb2Z0CQC1CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeExPRlQCAV8EBWxvZnRPCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkCAUGcmVzdWx0Al83BAVsb2Z0RgkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlCAUGcmVzdWx0Al83CQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC6CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCAUGcmVzdWx0Al80CQDMCAIIBQZyZXN1bHQCXzUJAMwIAggFBnJlc3VsdAJfNgUDbmlsAgE6CQDMCAIJAQtTdHJpbmdFbnRyeQIFBXdoS2V5CQC6CQIJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIIBQZyZXN1bHQCXzEJAMwIAggFBnJlc3VsdAJfMgkAzAgCCAUGcmVzdWx0Al8zCQDMCAIJALkJAgkAzAgCCQCRAwIFBGxvZnQFCXZvbExvY2tlZAkAzAgCCQCkAwEFBWxvZnRPCQDMCAIJAKQDAQUFbG9mdEYJAMwIAgkAkQMCBQRsb2Z0BQh2b2xUb3RhbAUDbmlsAgFfBQNuaWwCAToJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwBaQENc2F2ZVdhcmVob3VzZQIFd2hTdHILbGFuZEFzc2V0SWQDCQECIT0CCAUBaQZjYWxsZXIFD2Vjb25vbXlDb250cmFjdAkAAgECDUFjY2VzcyBkZW5pZWQEBXdoS2V5CQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQEAndoCQC8CQIFBXdoU3RyAgE6AwkBAiE9AgkAkAMBBQJ3aAAFCQACAQIwd2FyZWhvdXNlIHN0cmluZyBzaG91bGQgY29udGFpbiA0ICc6JyBzZXBhcmF0b3JzBAVsb2Z0TAkAkQMCCQC1CQIJAJEDAgUCd2gFCXdoSWR4TE9GVAIBXwUJdm9sTG9ja2VkBAVsb2Z0TwkBF2dldFdhcmVob3VzZU9jY3VwaWVkVm9sAQUCd2gEBWxvZnRUCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBCQCRAwIFAndoBQt3aElkeExldmVscwQFbG9mdEYJAGUCCQBlAgUFbG9mdFQJAQ1wYXJzZUludFZhbHVlAQUFbG9mdEwFBWxvZnRPBAhuZXdXaFN0cgkAugkCCQDMCAIJAJEDAgUCd2gFC3doSWR4TGV2ZWxzCQDMCAIJAJEDAgUCd2gFCHdoSWR4UmVzCQDMCAIJAJEDAgUCd2gFCHdoSWR4TWF0CQDMCAIJAJEDAgUCd2gFCXdoSWR4UHJvZAkAzAgCCQC5CQIJAMwIAgUFbG9mdEwJAMwIAgkApAMBBQVsb2Z0TwkAzAgCCQCkAwEFBWxvZnRGCQDMCAIJAKQDAQUFbG9mdFQFA25pbAIBXwUDbmlsAgE6CQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFd2hLZXkFCG5ld1doU3RyBQNuaWwFCG5ld1doU3RyAWkBEmZpeFdhcmVob3VzZUZvcm1hdAELbGFuZEFzc2V0SWQDCQECIT0CCAUBaQZjYWxsZXIFDHJlc3RDb250cmFjdAkAAgECDUFjY2VzcyBkZW5pZWQEBXdoS2V5CQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQECWxhbmRJbmRleAkAaQIJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfBQtyZWNMYW5kU2l6ZQUFU1NJWkUECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAJ3aAkBDGdldFdhcmVob3VzZQMFBXdoS2V5BQlsYW5kSW5kZXgFCmluZnJhTGV2ZWwEBWxvZnRMCQEFYXNJbnQBCQD8BwQFD2Vjb25vbXlDb250cmFjdAIacmVjYWxjTG9ja2VkVm9sdW1lUkVBRE9OTFkJAMwIAgULbGFuZEFzc2V0SWQJAMwIAgUCd2gFA25pbAUDbmlsBAVsb2Z0TwkBF2dldFdhcmVob3VzZU9jY3VwaWVkVm9sAQUCd2gEBWxvZnRUCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBCQCRAwIFAndoBQt3aElkeExldmVscwQFbG9mdEYJAGUCCQBlAgUFbG9mdFQFBWxvZnRMBQVsb2Z0TwQIbmV3V2hTdHIJALoJAgkAzAgCCQCRAwIFAndoBQt3aElkeExldmVscwkAzAgCCQCRAwIFAndoBQh3aElkeFJlcwkAzAgCCQCRAwIFAndoBQh3aElkeE1hdAkAzAgCCQCRAwIFAndoBQl3aElkeFByb2QJAMwIAgkAuQkCCQDMCAIJAKQDAQUFbG9mdEwJAMwIAgkApAMBBQVsb2Z0TwkAzAgCCQCkAwEFBWxvZnRGCQDMCAIJAKQDAQUFbG9mdFQFA25pbAIBXwUDbmlsAgE6CQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFd2hLZXkFCG5ld1doU3RyBQNuaWwFCG5ld1doU3RyAWkBD2ZpeFN0YWtlZFBpZWNlcwEHYWRkcmVzcwMJAQIhPQIIBQFpBmNhbGxlcgUMcmVzdENvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAQMc3Rha2VkUGllY2VzAwkAAAIFB2FkZHJlc3MCAAAABAhsYW5kc1N0cgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARVrZXlTdGFrZWRMYW5kc0J5T3duZXIBBQdhZGRyZXNzBAVsYW5kcwMJAQlpc0RlZmluZWQBBQhsYW5kc1N0cgkAvQkCCQEFdmFsdWUBBQhsYW5kc1N0cgIBXwUDbmlsCgEHb25lTGFuZAIDYWNjC2xhbmRBc3NldElkBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAhsYW5kU2l6ZQkAkQMCCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwULcmVjTGFuZFNpemUJAGQCBQNhY2MJAQ9udW1QaWVjZXNCeVNpemUBBQhsYW5kU2l6ZQoAAiRsBQVsYW5kcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEHb25lTGFuZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIVTGlzdCBzaXplIGV4Y2VlZHMgMTAwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0APgA/AEAAQQBCAEMARABFAEYARwBIAEkASgBLAEwATQBOAE8AUABRAFIAUwBUAFUAVgBXAFgAWQBaAFsAXABdAF4AXwBgAGEAYgBjAGQJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFmtleVN0YWtlZFBpZWNlc0J5T3duZXIBBQdhZGRyZXNzBQxzdGFrZWRQaWVjZXMFA25pbAUMc3Rha2VkUGllY2VzAWkBDXNldEN1c3RvbU5hbWUDB2Fzc2V0SWQKY3VzdG9tTmFtZQR0eXBlBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQIaQWxsb3dlZCBVU0RUIHBheW1lbnQgb25seSEDCQECIT0CCAUDcG10BmFtb3VudAUMUkVOQU1JTkdDT1NUCQACAQkArAICAhJQYXltZW50IHNob3VsZCBiZSAJAKQDAQUMUkVOQU1JTkdDT1NUAwkBCGNvbnRhaW5zAgUKY3VzdG9tTmFtZQICX18JAAIBCQCsAgICHk5hbWUgc2hvdWxkIG5vdCBjb250YWluICdfXyc6IAUKY3VzdG9tTmFtZQMJAGYCCQCxAgEFCmN1c3RvbU5hbWUFCk1BWE5BTUVMRU4JAAIBCQCsAgICGU5hbWUgdG9vIGxvbmcsIG1heExlbmd0aD0JAKQDAQUKTUFYTkFNRUxFTgQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEB2FjdGlvbnMEByRtYXRjaDAFBHR5cGUDCQAAAgIHQUNDT1VOVAUHJG1hdGNoMAQKcmV2ZXJzZUtleQkBFmtleUN1c3RvbU5hbWVUb0FkZHJlc3MBBQpjdXN0b21OYW1lBAluYW1lT3duZXIJAKIIAQUKcmV2ZXJzZUtleQMJAQlpc0RlZmluZWQBBQluYW1lT3duZXIJAAIBCQCsAgICGU5hbWUgYWxyZWFkeSByZWdpc3RlcmVkOiAFCmN1c3RvbU5hbWUEDWFkZHJUb05hbWVLZXkJARZrZXlBZGRyZXNzVG9DdXN0b21OYW1lAQUEYWRkcgQHb2xkTmFtZQkAoggBBQ1hZGRyVG9OYW1lS2V5BAdmcmVlT2xkAwkBCWlzRGVmaW5lZAEFB29sZE5hbWUJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBFmtleUN1c3RvbU5hbWVUb0FkZHJlc3MBCQEFdmFsdWUBBQdvbGROYW1lBQNuaWwFA25pbAkAzggCCQDNCAIJAM0IAgUHZnJlZU9sZAkBC1N0cmluZ0VudHJ5AgUNYWRkclRvTmFtZUtleQUKY3VzdG9tTmFtZQkBC1N0cmluZ0VudHJ5AgUKcmV2ZXJzZUtleQUEYWRkcggJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgUEYWRkcgUMeHBDdXN0b21OYW1lAl8xAwkAAAICBExBTkQFByRtYXRjaDAEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQdhc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5CQACAQkArAICCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFB2Fzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMECnJldmVyc2VLZXkJARprZXlMYW5kQ3VzdG9tTmFtZVRvQXNzZXRJZAEFCmN1c3RvbU5hbWUECW5hbWVPd25lcgkAoggBBQpyZXZlcnNlS2V5AwkBCWlzRGVmaW5lZAEFCW5hbWVPd25lcgkAAgEJAKwCAgIZTmFtZSBhbHJlYWR5IHJlZ2lzdGVyZWQ6IAUKY3VzdG9tTmFtZQQOYXNzZXRUb05hbWVLZXkJARprZXlMYW5kQXNzZXRJZFRvQ3VzdG9tTmFtZQEFB2Fzc2V0SWQEB29sZE5hbWUJAKIIAQUOYXNzZXRUb05hbWVLZXkEB2ZyZWVPbGQDCQEJaXNEZWZpbmVkAQUHb2xkTmFtZQkAzAgCCQELRGVsZXRlRW50cnkBCQEaa2V5TGFuZEN1c3RvbU5hbWVUb0Fzc2V0SWQBCQEFdmFsdWUBBQdvbGROYW1lBQNuaWwFA25pbAkAzggCCQDNCAIJAM0IAgUHZnJlZU9sZAkBC1N0cmluZ0VudHJ5AgUOYXNzZXRUb05hbWVLZXkFCmN1c3RvbU5hbWUJAQtTdHJpbmdFbnRyeQIFCnJldmVyc2VLZXkFB2Fzc2V0SWQICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIFBGFkZHIFDHhwQ3VzdG9tTmFtZQJfMQMJAAACAgREVUNLBQckbWF0Y2gwBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQUHYXNzZXRJZAMDCQEBIQEJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkGCQEBIQEJAQlpc0RlZmluZWQBCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHIJAAIBCQCsAgIIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEQa2V5RHVja0lkVG9Pd25lcgEFB2Fzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkRVQ0tQUkVGSVgCDSBpcyBub3QgeW91cnMECnJldmVyc2VLZXkJARprZXlEdWNrQ3VzdG9tTmFtZVRvQXNzZXRJZAEFCmN1c3RvbU5hbWUECW5hbWVPd25lcgkAoggBBQpyZXZlcnNlS2V5AwkBCWlzRGVmaW5lZAEFCW5hbWVPd25lcgkAAgEJAKwCAgIZTmFtZSBhbHJlYWR5IHJlZ2lzdGVyZWQ6IAUKY3VzdG9tTmFtZQQOYXNzZXRUb05hbWVLZXkJARprZXlEdWNrQXNzZXRJZFRvQ3VzdG9tTmFtZQEFB2Fzc2V0SWQEB29sZE5hbWUJAKIIAQUOYXNzZXRUb05hbWVLZXkEB2ZyZWVPbGQDCQEJaXNEZWZpbmVkAQUHb2xkTmFtZQkAzAgCCQELRGVsZXRlRW50cnkBCQEaa2V5RHVja0N1c3RvbU5hbWVUb0Fzc2V0SWQBCQEFdmFsdWUBBQdvbGROYW1lBQNuaWwFA25pbAkAzggCCQDNCAIJAM0IAgUHZnJlZU9sZAkBC1N0cmluZ0VudHJ5AgUOYXNzZXRUb05hbWVLZXkFCmN1c3RvbU5hbWUJAQtTdHJpbmdFbnRyeQIFCnJldmVyc2VLZXkFB2Fzc2V0SWQICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQdhc3NldElkBQx4cEN1c3RvbU5hbWUCXzEJAAIBAhNVbmtub3duIGVudGl0eSB0eXBlCQCUCgIJAM0IAgkAzQgCBQdhY3Rpb25zCQEOU2NyaXB0VHJhbnNmZXIDBQ9lY29ub215Q29udHJhY3QIBQNwbXQGYW1vdW50BQt1c2R0QXNzZXRJZAUMcHJvbG9nQWN0aW9uAAABaQEMc2V0UmVmZXJyYWxzAglvbGRQbGF5ZXIJbmV3UGxheWVyAwkBAiE9AggFAWkPY2FsbGVyUHVibGljS2V5BQNwdWIJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkAwkBASEBCQEJaXNEZWZpbmVkAQkApggBBQlvbGRQbGF5ZXIJAAIBCQCsAgICEUludmFsaWQgYWRkcmVzczogBQlvbGRQbGF5ZXIDCQEBIQEJAQlpc0RlZmluZWQBCQCmCAEFCW5ld1BsYXllcgkAAgEJAKwCAgIRSW52YWxpZCBhZGRyZXNzOiAFCW5ld1BsYXllcgQHb2xkc0tleQkBCWtleU9sZGllcwAEBG9sZHMJAKIIAQUHb2xkc0tleQQGb2xkaWVzAwkBCWlzRGVmaW5lZAEFBG9sZHMJALwJAgkBBXZhbHVlAQUEb2xkcwIBXwUDbmlsAwkBD2NvbnRhaW5zRWxlbWVudAIFBm9sZGllcwUJbmV3UGxheWVyCQACAQkArAICBQluZXdQbGF5ZXICJiBpcyBub3QgbmV3YmllIChhbHJlYWR5IGhhcyByZWZlcnJhbHMpBAhyZWZCeUtleQkBD2tleUFkZHJlc3NSZWZCeQEFCW5ld1BsYXllcgQFcmVmQnkJAKIIAQUIcmVmQnlLZXkDAwkBCWlzRGVmaW5lZAEFBXJlZkJ5CQEJaXNEZWZpbmVkAQkApggBCQEFdmFsdWUBBQVyZWZCeQcJAAIBCQCsAgIJAKwCAgUJbmV3UGxheWVyAhQgYWxyZWFkeSBoYXMgcmVmQnk6IAkBBXZhbHVlAQUFcmVmQnkEB3JlZnNLZXkJARNrZXlBZGRyZXNzUmVmZXJyYWxzAQUJb2xkUGxheWVyBARyZWZzCQCiCAEFB3JlZnNLZXkECXJlZnNBcnJheQMJAQlpc0RlZmluZWQBBQRyZWZzCQC8CQIJAQV2YWx1ZQEFBHJlZnMCAV8FA25pbAMJAQ9jb250YWluc0VsZW1lbnQCBQlyZWZzQXJyYXkFCW5ld1BsYXllcgkAAgEJAKwCAgkArAICCQCsAgIFCW9sZFBsYXllcgISIGFscmVhZHkgY29udGFpbnMgBQluZXdQbGF5ZXICESB3aXRoaW4gcmVmZXJyYWxzBAduZXdSZWZzCQC6CQIJAM0IAgUJcmVmc0FycmF5BQluZXdQbGF5ZXICAV8EB25ld09sZHMDCQEPY29udGFpbnNFbGVtZW50AgUGb2xkaWVzBQlvbGRQbGF5ZXIJAQV2YWx1ZQEFBG9sZHMJALoJAgkAzQgCBQZvbGRpZXMFCW9sZFBsYXllcgIBXwkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIFCHJlZkJ5S2V5BQlvbGRQbGF5ZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgUHcmVmc0tleQUHbmV3UmVmcwkAzAgCCQELU3RyaW5nRW50cnkCBQdvbGRzS2V5BQduZXdPbGRzCQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsAAABaQEQZGlzdHJpYnV0ZVBvaW50cwUIc3RyZW5ndGgIYWNjdXJhY3kJaW50ZWxsZWN0CWVuZHVyYW5jZQlkZXh0ZXJpdHkEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQKZnJlZUtleUFjYwkBEWtleVVzZXJGcmVlUG9pbnRzAQUEYWRkcgQNZnJlZVBvaW50c0FjYwkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QFCmZyZWVLZXlBY2MAAAQLZnJlZUtleUR1Y2sJARFrZXlEdWNrRnJlZVBvaW50cwEFC2R1Y2tBc3NldElkBA5mcmVlUG9pbnRzRHVjawkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QFC2ZyZWVLZXlEdWNrAAAEB3N1bUZyZWUJAGQCBQ1mcmVlUG9pbnRzQWNjBQ5mcmVlUG9pbnRzRHVjawQPc3VtVG9EaXN0cmlidXRlCQBkAgkAZAIJAGQCCQBkAgUIc3RyZW5ndGgFCGFjY3VyYWN5BQlpbnRlbGxlY3QFCWVuZHVyYW5jZQUJZGV4dGVyaXR5AwkAZgIFD3N1bVRvRGlzdHJpYnV0ZQUHc3VtRnJlZQkAAgEJAKwCAgkArAICAg9UaGVyZSBhcmUgb25seSAJAKQDAQUHc3VtRnJlZQIaIGZyZWUgcG9pbnRzIHRvIGRpc3RyaWJ1dGUECGNoYXJzS2V5CQEMa2V5RHVja0NoYXJzAQULZHVja0Fzc2V0SWQEBWNoYXJzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0BQhjaGFyc0tleQIJMF8wXzBfMF8wAgFfBAZuZXdBY2MJAGUCBQ1mcmVlUG9pbnRzQWNjBQ9zdW1Ub0Rpc3RyaWJ1dGUJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUKZnJlZUtleUFjYwMJAGYCAAAFBm5ld0FjYwAABQZuZXdBY2MJAMwIAgkBDEludGVnZXJFbnRyeQIFC2ZyZWVLZXlEdWNrAwkAZgIAAAUGbmV3QWNjCQBkAgUOZnJlZVBvaW50c0R1Y2sFBm5ld0FjYwUOZnJlZVBvaW50c0R1Y2sJAMwIAgkBC1N0cmluZ0VudHJ5AgUIY2hhcnNLZXkJALkJAgkAzAgCCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDGNoYXJTdHJlbmd0aAUIc3RyZW5ndGgJAMwIAgkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQxjaGFyQWNjdXJhY3kFCGFjY3VyYWN5CQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckludGVsbGVjdAUJaW50ZWxsZWN0CQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckVuZHVyYW5jZQUJZW5kdXJhbmNlCQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckRleHRlcml0eQUJZGV4dGVyaXR5BQNuaWwCAV8JAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwAAAFpARxzcGxpdEJ5R2xvYmFsV2VpZ2h0c1JFQURPTkxZAQZhbW91bnQJAJQKAgUDbmlsCQESZ2V0TmVlZGVkTWF0ZXJpYWxzAQUGYW1vdW50AWkBJHNwbGl0QnlHbG9iYWxBbmRMb2NhbFdlaWdodHNSRUFET05MWQMJbWF0QW1vdW50CXJlc0Ftb3VudAh0ZXJyYWlucwQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBBQh0ZXJyYWlucwkAlAoCBQNuaWwJAJQKAgkBEmdldE5lZWRlZE1hdGVyaWFscwEFCW1hdEFtb3VudAkBE2Rpc3RyaWJ1dGVCeVdlaWdodHMCBQlyZXNBbW91bnQFDXRlcnJhaW5Db3VudHMBaQETZ2V0QmFja3BhY2tSRUFET05MWQELZHVja0Fzc2V0SWQJAJQKAgUDbmlsCQC5CQIJAQtnZXRCYWNrcGFjawEJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkAgE6AWkBFGdldFdhcmVob3VzZVJFQURPTkxZAQtsYW5kQXNzZXRJZAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQJbGFuZEluZGV4CQBpAgkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAgkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8FC3JlY0xhbmRTaXplBQVTU0laRQQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAJAJQKAgUDbmlsCQC6CQIJAQxnZXRXYXJlaG91c2UDCQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQFCWxhbmRJbmRleAUKaW5mcmFMZXZlbAIBOgFpAQpzYXZlTGFzdFR4AAMDCQECIT0CCAUBaQZjYWxsZXIFC3dsZ0NvbnRyYWN0CQECIT0CCAUBaQZjYWxsZXIFD2Vjb25vbXlDb250cmFjdAcJAAIBAg1BY2Nlc3MgZGVuaWVkCQCUCgIJAMwIAgkBBnByb2xvZwEFAWkFA25pbAAqAWkBD3VwZGF0ZUR1Y2tTdGF0cwILZHVja0Fzc2V0SWQHZGVsdGFYUAMJAQIhPQIIBQFpBmNhbGxlcgUPZWNvbm9teUNvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQFB2RlbHRhWFABaQEOdXBkYXRlQWNjU3RhdHMCBGFkZHIHZGVsdGFYUAMJAQIhPQIIBQFpBmNhbGxlcgUPZWNvbm9teUNvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCBQRhZGRyBQdkZWx0YVhQAWkBCWVxdWlwRHVjawEJZXF1aXBtZW50BAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEBWVxS2V5CQEQa2V5RHVja0VxdWlwbWVudAEFC2R1Y2tBc3NldElkBAtjdXJyZW50U2VncwkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEFBWVxS2V5AhcsOyxfLDssXyw7LF8sOyxfLDssXyw7LAIBXwQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEBW5ld0VxCQC1CQIFCWVxdWlwbWVudAIBXwMJAQIhPQIJAJADAQUFbmV3RXEFC05VTVNFR01FTlRTCQACAQIWV3JvbmcgZXF1aXBtZW50IHN0cmluZwQGYnBQcm9kCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QECXRlbXBQcm9kQgkBBmRyZXNzQgMFC2N1cnJlbnRTZWdzCQEOcHJvZFN0clRvQnl0ZXMBBQZicFByb2QGBAhuZXdQcm9kQgkBBmRyZXNzQgMFBW5ld0VxBQl0ZW1wUHJvZEIHBApuZXdQcm9kU3RyCQEOYnl0ZXNUb1Byb2RTdHIBBQhuZXdQcm9kQgkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWVxS2V5BQllcXVpcG1lbnQJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALoJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0CQDMCAIFCm5ld1Byb2RTdHIFA25pbAIBOgkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAAAAWkBBHRlc3QAAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQINQWNjZXNzIGRlbmllZAQBYQkBDnByb2RTdHJUb0J5dGVzAQIABAFiCQEOYnl0ZXNUb1Byb2RTdHIBBQFhCQCUCgIFA25pbAUBYgCeIGo0", "height": 2673331, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: EyTKrE58J62gwb1rYThaJsTaTe2KW4RFKpdV84SFua7J Next: 7WCNFt8rezTWy1WF1PHrrtFLfSxLU2uzi7M5mhHG4QAa Diff:
OldNewDifferences
669669 else if ((dI == 0))
670670 then $Tuple2(dh, false)
671671 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")
689690 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")
694694 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)
706701 }
707702 }
708703 }
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)
715704 }
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+ }
733710 }
734711 }
735712 }
736713
737714
738-func dQ (dR,dS,dD,dE,dF) = if ((dR != ""))
715+func dR (dS,dT,dD,dE,dF) = if ((dS != ""))
739716 then {
740- let dT = split(dR, ",")
741- if ((size(dT) > n))
717+ let dU = split(dS, ",")
718+ if ((size(dU) > n))
742719 then throw("Wrong slots format")
743720 else {
744- let dU = dT[0]
745- let dV = if ((size(dT) > 1))
746- then dT[1]
721+ let dV = dU[0]
722+ let dW = if ((size(dU) > 1))
723+ then dU[1]
747724 else ""
748- if (if ((dU == ""))
749- then (dV == "")
725+ if (if ((dV == ""))
726+ then (dW == "")
750727 else false)
751- then dS
728+ then dT
752729 else {
753- let dW = if ((dU != ""))
754- then dB(dU, dS, dD, dE, dF, 0)
755- else $Tuple2(dS, false)
756- if ((dV != ""))
757- then if (dW._2)
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)
758735 then throw("Big item already occupies slot")
759- else dB(dV, dW._1, dD, dE, dF, 1)._1
760- else dW._1
736+ else dB(dW, dX._1, dD, dE, dF, 1)._1
737+ else dX._1
761738 }
762739 }
763740 }
764- else dS
765-
766-
767-func dX (dY,dh,dD) = {
768- func dE (cL,dZ) = {
741+ else dT
742+
743+
744+func dY (dZ,ea,dD) = {
745+ func dE (cL,eb) = {
769746 let dk = cL._1
770- let dF = split(dZ, ";")
747+ let dF = split(eb, ";")
771748 if ((size(dF) != m))
772749 then throw("Wrong segment format")
773750 else {
774- let ea = dF[0]
751+ let ec = dF[0]
775752 let dq = dF[1]
776- if (if ((ea == ""))
753+ if (if ((ec == ""))
777754 then (dq == "")
778755 else false)
779756 then $Tuple2((dk + 1), cL._2)
780757 else {
781- let eb = dQ(ea, cL._2, dD, dk, 0)
782- $Tuple2((dk + 1), dQ(dq, eb, dD, dk, 1))
758+ let ed = dR(ec, cL._2, dD, dk, 0)
759+ $Tuple2((dk + 1), dR(dq, ed, dD, dk, 1))
783760 }
784761 }
785762 }
786763
787-( let cN = dY
764+( let cN = dZ
788765 let cO = size(cN)
789- let cP = $Tuple2(0, dh)
766+ let cP = $Tuple2(0, ea)
790767 func cQ (cR,cS) = if ((cS >= cO))
791768 then cR
792769 else dE(cR, cN[cS])
799776 }
800777
801778
802-func ec (ed,ee,ef,eg) = if ((size(ed) != S))
779+func ee (ef,eg,eh,ei) = if ((size(ef) != S))
803780 then throw("Wrong proportions data")
804781 else {
805- func eh (cL,ei) = {
806- let dd = (parseIntValue(ed[ei]) + ((eg * ee[ei]) * ef))
782+ func ej (cL,ek) = {
783+ let dd = (parseIntValue(ef[ek]) + ((ei * eg[ek]) * eh))
807784 if ((0 > dd))
808- then throw(((((((("Panic! Pieces of type=" + toString(ei)) + ", sign=") + toString(eg)) + ", terrainCounts[i]=") + toString(ee[ei])) + ", landSizeIndex=") + toString(ef)))
785+ then throw(((((((("Panic! Pieces of type=" + toString(ek)) + ", sign=") + toString(ei)) + ", terrainCounts[i]=") + toString(eg[ek])) + ", landSizeIndex=") + toString(eh)))
809786 else (cL :+ toString(dd))
810787 }
811788
815792 let cP = nil
816793 func cQ (cR,cS) = if ((cS >= cO))
817794 then cR
818- else eh(cR, cN[cS])
795+ else ej(cR, cN[cS])
819796
820797 func cT (cR,cS) = if ((cS >= cO))
821798 then cR
827804 }
828805
829806
830-func ej (ee,ef,eg) = {
831- let ed = split(valueOrElse(getString(bL()), "0_0_0_0_0_0"), "_")
832- ec(ed, ee, ef, eg)
833- }
834-
835-
836-func ek (el) = [(size(split(el, "A")) - 1), (size(split(el, "B")) - 1), (size(split(el, "C")) - 1), (size(split(el, "D")) - 1), (size(split(el, "E")) - 1), (size(split(el, "F")) - 1)]
837-
838-
839-func em (en,ee,eo,ef,ep) = {
840- func eq (cL,ei) = {
841- let er = ((fraction(eo, ep, U) * ee[ei]) * ef)
842- (cL :+ toString((parseIntValue(en[ei]) + er)))
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)))
843820 }
844821
845822 let cW = {
848825 let cP = nil
849826 func cQ (cR,cS) = if ((cS >= cO))
850827 then cR
851- else eq(cR, cN[cS])
828+ else es(cR, cN[cS])
852829
853830 func cT (cR,cS) = if ((cS >= cO))
854831 then cR
860837 }
861838
862839
863-func es (ee,eo,ef,ep) = {
864- func eq (cL,ei) = {
865- let er = ((fraction(eo, ep, U) * ee[ei]) * ef)
866- $Tuple2((cL._1 :+ er), (cL._2 + er))
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))
867844 }
868845
869846 let cN = [0, 1, 2, 3, 4, 5]
871848 let cP = $Tuple2(nil, 0)
872849 func cQ (cR,cS) = if ((cS >= cO))
873850 then cR
874- else eq(cR, cN[cS])
851+ else es(cR, cN[cS])
875852
876853 func cT (cR,cS) = if ((cS >= cO))
877854 then cR
881858 }
882859
883860
884-func et (eu,ev,ew,ex) = {
885- let ey = ew._1
886- let ez = ew._2
887- if ((ez == 0))
888- then $Tuple2(makeString(eu, "_"), makeString(ev, "_"))
889- else if ((ex >= ez))
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))
890867 then {
891- func eA (cL,ei) = (cL :+ toString((parseIntValue(eu[ei]) + ey[ei])))
868+ func eC (cL,ek) = (cL :+ toString((parseIntValue(ew[ek]) + eA[ek])))
892869
893870 let cW = {
894871 let cN = [0, 1, 2, 3, 4, 5]
896873 let cP = nil
897874 func cQ (cR,cS) = if ((cS >= cO))
898875 then cR
899- else eA(cR, cN[cS])
876+ else eC(cR, cN[cS])
900877
901878 func cT (cR,cS) = if ((cS >= cO))
902879 then cR
904881
905882 cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
906883 }
907- $Tuple2(makeString(cW, "_"), makeString(ev, "_"))
884+ $Tuple2(makeString(cW, "_"), makeString(ex, "_"))
908885 }
909886 else {
910- func eB (cL,ei) = {
911- let eC = fraction(ey[ei], ex, ez)
912- $Tuple2((cL._1 :+ toString((parseIntValue(eu[ei]) + eC))), (cL._2 :+ toString(((parseIntValue(ev[ei]) + ey[ei]) - eC))))
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))))
913890 }
914891
915892 let cW = {
918895 let cP = $Tuple2(nil, nil)
919896 func cQ (cR,cS) = if ((cS >= cO))
920897 then cR
921- else eB(cR, cN[cS])
898+ else eD(cR, cN[cS])
922899
923900 func cT (cR,cS) = if ((cS >= cO))
924901 then cR
931908 }
932909
933910
934-func eD (eE) = if ((eE >= toBigInt(0)))
935- then eE
936- else -(eE)
937-
938-
939-let eF = [[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]]
940-
941-func eG (bS,eH) = {
942- let eI = toInt((bS % cg))
943- let eJ = if ((eH[0] > eI))
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))
944921 then "A"
945- else if ((eH[1] > eI))
922+ else if ((eJ[1] > eK))
946923 then "B"
947- else if ((eH[2] > eI))
924+ else if ((eJ[2] > eK))
948925 then "C"
949- else if ((eH[3] > eI))
926+ else if ((eJ[3] > eK))
950927 then "D"
951- else if ((eH[4] > eI))
928+ else if ((eJ[4] > eK))
952929 then "E"
953930 else "F"
954- eJ
955- }
956-
957-
958-func eK (eL,eM) = {
959- let eN = eF[eM]
960- func eO (cL,cM) = $Tuple2((((((cL._1 + eG(cL._2, eN)) + eG((cL._2 / cg), eN)) + eG((cL._2 / ch), eN)) + eG((cL._2 / ci), eN)) + eG((cL._2 / cj), eN)), (cL._2 / ck))
961-
962- let eP = {
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 = {
963940 let cN = [1, 2, 3, 4, 5]
964941 let cO = size(cN)
965- let cP = $Tuple2("", (eL / cf))
942+ let cP = $Tuple2("", (eN / cf))
966943 func cQ (cR,cS) = if ((cS >= cO))
967944 then cR
968- else eO(cR, cN[cS])
945+ else eQ(cR, cN[cS])
969946
970947 func cT (cR,cS) = if ((cS >= cO))
971948 then cR
973950
974951 cT(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5)
975952 }
976- eP._1
977- }
978-
979-
980-func eQ (eR) = {
981- let eS = split(valueOrElse(getString(eR), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
982-[toString(valueOrElse(parseInt(eS[ap]), 0)), if ((size(split(eS[aq], "_")) == S))
983- then eS[aq]
984- else "0_0_0_0_0_0", if ((size(split(eS[ar], "_")) == S))
985- then eS[ar]
986- else "0_0_0_0_0_0", eS[as]]
987- }
988-
989-
990-func eT (eU) = {
991- let do = split(eU, "_")
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, "_")
992969 ((V * (parseIntValue(do[1]) + 1)) * parseIntValue(do[0]))
993970 }
994971
995972
996-func eV (eW) = {
997- let eX = eW[aj]
998- func eY (cL,dj) = (cL + parseIntValue(dj))
999-
1000- func eZ (cL,dj) = {
973+func eX (eY) = {
974+ let eZ = eY[aj]
975+ func fa (cL,dj) = (cL + parseIntValue(dj))
976+
977+ func fb (cL,dj) = {
1001978 let bB = cL._1
1002- let fa = (((parseIntValue(dj) + af) - 1) / af)
1003- $Tuple2((bB + 1), (cL._2 + (fa * bi)))
1004- }
1005-
1006- let fb = {
1007- let cN = split(eW[ah], "_")
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], "_")
1008985 let cO = size(cN)
1009986 let cP = 0
1010987 func cQ (cR,cS) = if ((cS >= cO))
1011988 then cR
1012- else eY(cR, cN[cS])
989+ else fa(cR, cN[cS])
1013990
1014991 func cT (cR,cS) = if ((cS >= cO))
1015992 then cR
1017994
1018995 cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
1019996 }
1020- let fc = {
1021- let cN = split(eW[ai], "_")
997+ let fe = {
998+ let cN = split(eY[ai], "_")
1022999 let cO = size(cN)
10231000 let cP = 0
1024- func fd (cR,cS) = if ((cS >= cO))
1001+ func ff (cR,cS) = if ((cS >= cO))
10251002 then cR
1026- else eY(cR, cN[cS])
1027-
1028- func fe (cR,cS) = if ((cS >= cO))
1003+ else fa(cR, cN[cS])
1004+
1005+ func fg (cR,cS) = if ((cS >= cO))
10291006 then cR
10301007 else throw("List size exceeds 6")
10311008
1032- fe(fd(fd(fd(fd(fd(fd(cP, 0), 1), 2), 3), 4), 5), 6)
1033- }
1034- let ff = if ((eX == ""))
1009+ fg(ff(ff(ff(ff(ff(ff(cP, 0), 1), 2), 3), 4), 5), 6)
1010+ }
1011+ let fh = if ((eZ == ""))
10351012 then 0
1036- else ( let cN = split_4C(eX, "_")
1013+ else ( let cN = split_4C(eZ, "_")
10371014 let cO = size(cN)
10381015 let cP = $Tuple2(0, 0)
1039- func fg (cR,cS) = if ((cS >= cO))
1016+ func fi (cR,cS) = if ((cS >= cO))
10401017 then cR
1041- else eZ(cR, cN[cS])
1042-
1043- func fh (cR,cS) = if ((cS >= cO))
1018+ else fb(cR, cN[cS])
1019+
1020+ func fj (cR,cS) = if ((cS >= cO))
10441021 then cR
10451022 else throw("List size exceeds 50")
10461023
1047- fh(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(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
1048- ((fb + fc) + ff)
1049- }
1050-
1051-
1052-func fi (fj,fk,fl) = {
1053- let eU = ((toString(fk) + "_") + toString(fl))
1054- let fm = eT(eU)
1055- let fn = valueOrElse(getString(fj), (eU + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
1056- let fo = split_4C(fn, ":")
1057- let fp = eV(fo)
1058- let fq = if ((5 > size(fo)))
1059- then makeString(["0", toString(fp), toString((fm - fp)), toString(fm)], "_")
1060- else {
1061- let fr = split(fo[ak], "_")
1062- let fs = parseIntValue(fr[al])
1063- let ft = if ((size(fr) > 1))
1064- then parseIntValue(fr[am])
1065- else fp
1066- makeString([toString(fs), toString(ft), toString(((fm - fs) - ft)), toString(fm)], "_")
1067- }
1068-[fo[ag], if ((size(split(fo[ah], "_")) == S))
1069- then fo[ah]
1070- else "0_0_0_0_0_0", if ((size(split(fo[ai], "_")) == S))
1071- then fo[ai]
1072- else "0_0_0_0_0_0", fo[aj], fq]
1073- }
1074-
1075-
1076-func fu (eW) = {
1077- let fv = eV(eW)
1078- let fw = parseIntValue(split(eW[ak], "_")[al])
1079- ((eT(eW[ag]) - fv) - fw)
1080- }
1081-
1082-
1083-func fx (fy,fz) = {
1084- let fa = if ((fy >= 0))
1085- then (((fy + fz) - 1) / fz)
1086- else -((((-(fy) + fz) - 1) / fz))
1087- (fa * bi)
1088- }
1089-
1090-
1091-func fA (fB,eW,fC) = if ((size(fB) != 3))
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))
10921069 then throw("cargoListStr should contain exactly 2 ':' separators")
10931070 else {
1094- let fD = split(fB[0], "_")
1095- let fE = split(fB[1], "_")
1096- let fF = if ((fB[2] == ""))
1071+ let fF = split(fD[0], "_")
1072+ let fG = split(fD[1], "_")
1073+ let fH = if ((fD[2] == ""))
10971074 then nil
1098- else split(fB[2], "_")
1099- if ((size(fD) != S))
1075+ else split(fD[2], "_")
1076+ if ((size(fF) != S))
11001077 then throw("All 6 resources should be passed")
1101- else if ((size(fE) != S))
1078+ else if ((size(fG) != S))
11021079 then throw("All 6 materials should be passed")
11031080 else {
1104- let ex = fu(eW)
1105- let fG = split(eW[ah], "_")
1106- let fH = split(eW[ai], "_")
1107- let fI = if ((eW[aj] == ""))
1081+ let ez = fw(eY)
1082+ let fI = split(eY[ah], "_")
1083+ let fJ = split(eY[ai], "_")
1084+ let fK = if ((eY[aj] == ""))
11081085 then nil
1109- else split(eW[aj], "_")
1110- let ev = split(fC[aq], "_")
1111- let fJ = split(fC[ar], "_")
1112- let fK = if ((fC[as] == ""))
1086+ else split(eY[aj], "_")
1087+ let ex = split(fE[aq], "_")
1088+ let fL = split(fE[ar], "_")
1089+ let fM = if ((fE[as] == ""))
11131090 then nil
1114- else split(fC[as], "_")
1115- func fL (cL,dj) = {
1116- let ei = cL._1
1117- let fM = parseIntValue(dj)
1118- let fN = parseIntValue(fG[ei])
1119- let fO = parseIntValue(ev[ei])
1120- if ((fM == 0))
1121- then $Tuple4((ei + 1), (cL._2 :+ fG[ei]), (cL._3 :+ ev[ei]), cL._4)
1122- else if ((fM > 0))
1123- then if ((fM > fO))
1124- then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString(fO)) + " available"))
1125- else $Tuple4((ei + 1), (cL._2 :+ toString((fN + fM))), (cL._3 :+ toString((fO - fM))), (cL._4 + fM))
1126- else if ((-(fM) > fN))
1127- then throw((((("Attempt to take " + toString(-(fM))) + " from warehouse, but only ") + toString(fN)) + " available"))
1128- else $Tuple4((ei + 1), (cL._2 :+ toString((fN + fM))), (cL._3 :+ toString((fO - fM))), (cL._4 + fM))
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))
11291106 }
11301107
11311108 let cW = {
1132- let cN = fD
1109+ let cN = fF
11331110 let cO = size(cN)
11341111 let cP = $Tuple4(0, nil, nil, 0)
11351112 func cQ (cR,cS) = if ((cS >= cO))
11361113 then cR
1137- else fL(cR, cN[cS])
1114+ else fN(cR, cN[cS])
11381115
11391116 func cT (cR,cS) = if ((cS >= cO))
11401117 then cR
11421119
11431120 cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
11441121 }
1145- func fP (cL,dj) = {
1146- let ei = cL._1
1147- let fM = parseIntValue(dj)
1148- let fQ = parseIntValue(fH[ei])
1149- let fR = parseIntValue(fJ[ei])
1150- if ((fM == 0))
1151- then $Tuple4((ei + 1), (cL._2 :+ fH[ei]), (cL._3 :+ fJ[ei]), cL._4)
1152- else if ((fM > 0))
1153- then if ((fM > fR))
1154- then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString(fR)) + " available"))
1155- else $Tuple4((ei + 1), (cL._2 :+ toString((fQ + fM))), (cL._3 :+ toString((fR - fM))), (cL._4 + fM))
1156- else if ((-(fM) > fQ))
1157- then throw((((("Attempt to take " + toString(-(fM))) + " from warehouse, but only ") + toString(fQ)) + " available"))
1158- else $Tuple4((ei + 1), (cL._2 :+ toString((fQ + fM))), (cL._3 :+ toString((fR - fM))), (cL._4 + fM))
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))
11591136 }
11601137
1161- let ea = {
1162- let cN = fE
1138+ let ec = {
1139+ let cN = fG
11631140 let cO = size(cN)
11641141 let cP = $Tuple4(0, nil, nil, cW._4)
1165- func fd (cR,cS) = if ((cS >= cO))
1142+ func ff (cR,cS) = if ((cS >= cO))
11661143 then cR
1167- else fP(cR, cN[cS])
1168-
1169- func fe (cR,cS) = if ((cS >= cO))
1144+ else fR(cR, cN[cS])
1145+
1146+ func fg (cR,cS) = if ((cS >= cO))
11701147 then cR
11711148 else throw("List size exceeds 6")
11721149
1173- fe(fd(fd(fd(fd(fd(fd(cP, 0), 1), 2), 3), 4), 5), 6)
1150+ fg(ff(ff(ff(ff(ff(ff(cP, 0), 1), 2), 3), 4), 5), 6)
11741151 }
1175- func fS (cL,dj) = {
1176- let ei = cL._1
1177- let fM = parseIntValue(dj)
1178- let fT = if ((size(fI) > ei))
1179- then parseIntValue(fI[ei])
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])
11801157 else 0
1181- let fU = if ((size(fK) > ei))
1182- then parseIntValue(fK[ei])
1158+ let fW = if ((size(fM) > ek))
1159+ then parseIntValue(fM[ek])
11831160 else 0
1184- if ((fM == 0))
1185- then $Tuple4((ei + 1), (cL._2 :+ toString(fT)), (cL._3 :+ toString(fU)), cL._4)
1186- else if ((fM > 0))
1187- then if ((fM > fU))
1188- then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString(fU)) + " available"))
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"))
11891166 else {
1190- let fV = (fx((fT + fM), af) - fx(fT, af))
1191- $Tuple4((ei + 1), (cL._2 :+ toString((fT + fM))), (cL._3 :+ toString((fU - fM))), (cL._4 + fV))
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))
11921169 }
1193- else if ((-(fM) > fT))
1194- then throw((((("Attempt to take " + toString(-(fM))) + " from warehouse, but only ") + toString(fT)) + " available"))
1170+ else if ((-(fO) > fV))
1171+ then throw((((("Attempt to take " + toString(-(fO))) + " from warehouse, but only ") + toString(fV)) + " available"))
11951172 else {
1196- let fV = (fx((fT + fM), af) - fx(fT, af))
1197- $Tuple4((ei + 1), (cL._2 :+ toString((fT + fM))), (cL._3 :+ toString((fU - fM))), (cL._4 + fV))
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))
11981175 }
11991176 }
12001177
1201- let eS = if ((size(fF) != 0))
1178+ let eU = if ((size(fH) != 0))
12021179 then {
1203- let cN = fF
1180+ let cN = fH
12041181 let cO = size(cN)
1205- let cP = $Tuple4(0, nil, nil, ea._4)
1206- func fg (cR,cS) = if ((cS >= cO))
1182+ let cP = $Tuple4(0, nil, nil, ec._4)
1183+ func fi (cR,cS) = if ((cS >= cO))
12071184 then cR
1208- else fS(cR, cN[cS])
1209-
1210- func fh (cR,cS) = if ((cS >= cO))
1185+ else fU(cR, cN[cS])
1186+
1187+ func fj (cR,cS) = if ((cS >= cO))
12111188 then cR
12121189 else throw("List size exceeds 50")
12131190
1214- fh(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(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)
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)
12151192 }
1216- else $Tuple4(0, fI, fK, ea._4)
1217- let fW = eS._4
1218- if ((fW > ex))
1219- then throw((((("Attempt to put total " + toString(fW)) + " stuff, but only ") + toString(ex)) + " warehouse space left"))
1220- else $Tuple7(makeString(cW._2, "_"), makeString(ea._2, "_"), makeString(eS._2, "_"), makeString(cW._3, "_"), makeString(ea._3, "_"), makeString(eS._3, "_"), fW)
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)
12211198 }
12221199 }
12231200
12241201
1225-func fX (fY,fZ) = {
1226- let aT = toString(fY)
1227- let ga = eD(toBigInt(fZ))
1228- let gb = valueOrElse(getInteger(cm()), (cl + 1))
1229- let co = toString(gb)
1230- let eM = toInt((ga % cf))
1231- let el = eK(ga, eM)
1232- let gc = aa[eM]
1233- let gd = Issue(cE(co, "S"), makeString([co, "S", el, gc], "_"), 1, 0, false)
1234- let av = calculateAssetId(gd)
1235- let ge = toBase58String(av)
1236- $Tuple2([IntegerEntry(cm(), (gb + 1)), gd, StringEntry(cn(co), ge), StringEntry(au(ge), aT), StringEntry(ct(co), aT), IntegerEntry(ay(ge), 0), IntegerEntry(cr(ge, aT), 0), ScriptTransfer(fY, 1, av)], $Tuple2(ge, gc))
1237- }
1238-
1239-
1240-func gf (aT,gg,gh) = if (!(sigVerify_8Kb(gg, gh, bX)))
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)))
12411218 then throw("signature does not match")
12421219 else {
1243- let do = split(toUtf8String(gg), ";")
1244- let gi = split(do[0], "|")
1245- let gj = split(gi[cA], "_")
1246- let gk = parseIntValue(gj[0])
1247- let gl = parseIntValue(gj[1])
1248- let gm = split(do[1], ":")
1249- let gn = gm[0]
1250- let go = parseIntValue(gi[cB])
1251- if (if ((go > (lastBlock.timestamp + bZ)))
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)))
12521229 then true
1253- else ((lastBlock.timestamp - bZ) > go))
1254- then throw(((("signature outdated: logTime=" + toString(go)) + ", bcTime=") + toString(lastBlock.timestamp)))
1230+ else ((lastBlock.timestamp - bZ) > gq))
1231+ then throw(((("signature outdated: logTime=" + toString(gq)) + ", bcTime=") + toString(lastBlock.timestamp)))
12551232 else {
1256- let gp = gm[1]
1257- let gq = valueOrElse(getString(at(aT)), "")
1258- if ((gq != gp))
1259- then throw(((("Tx ids don't match! In state: " + gq) + ", in msg: ") + gp))
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))
12601237 else {
12611238 let p = valueOrErrorMessage(getString(aN(aT)), "You don't have a duck staked")
1262- let gr = aQ(p)
1263- let gs = J(valueOrElse(getInteger(r(p)), 0))
1264- let gt = valueOrElse(getInteger(gr), gs)
1265- if ((gt != gk))
1266- then throw(((("oldHealth=" + toString(gt)) + " from state does not match one from flight log=") + toString(gk)))
1267- else if ((0 >= gk))
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))
12681245 then throw("You can't fly with zero health")
12691246 else {
1270- let gu = if ((size(gi) > cC))
1271- then gi[cC]
1247+ let gw = if ((size(gk) > cC))
1248+ then gk[cC]
12721249 else ""
1273- let gv = if ((size(gi) > cD))
1274- then gi[cD]
1250+ let gx = if ((size(gk) > cD))
1251+ then gk[cD]
12751252 else ""
1276- let gw = if (if ((gl > 0))
1277- then (gu == "$")
1253+ let gy = if (if ((gn > 0))
1254+ then (gw == "$")
12781255 else false)
12791256 then bR(invoke(bC, "sendUsdtPrize", [aT], nil))
12801257 else 0
1281- $Tuple5(gl, p, gw, gn, gv)
1258+ $Tuple5(gn, p, gy, gp, gx)
12821259 }
12831260 }
12841261 }
12851262 }
12861263
12871264
1288-func gx (fY,fZ,gg,gh) = {
1289- let aT = toString(fY)
1290- let eN = gf(aT, gg, gh)
1291- let gr = aQ(eN._2)
1292- let eR = aO(eN._2)
1293- let fC = eQ(eR)
1294- let gy = split(fC[ar], "_")
1295- let gz = makeString(cX(true, gy, cd), "_")
1296- let dt = de(fC[as], eN._5)
1297- if ((0 >= eN._1))
1298- then $Tuple3([IntegerEntry(gr, 0), StringEntry(eR, makeString([fC[ap], fC[aq], fC[ar], dt], ":"))], "", 0)
1299- else {
1300- let gA = fX(fY, fZ)
1301- let ge = gA._2._1
1302- $Tuple3((((gA._1 :+ StringEntry(aP(eN._2), makeString([gA._2._2, "L", ge], "_"))) :+ IntegerEntry(gr, eN._1)) :+ StringEntry(eR, makeString([fC[ap], fC[aq], gz, dt], ":"))), ge, eN._3)
1303- }
1304- }
1305-
1306-
1307-func gB (aF,gC) = {
1308- let fl = valueOrElse(getInteger(ay(aF)), 0)
1309- let gD = valueOrElse(getInteger(az(R, aF)), 0)
1310- let gE = (fl / 6)
1311- let gF = (fl / 7)
1312- ((T + fraction(T, ((fl + gE) + (2 * gF)), 5)) + fraction(T, gD, (gC * 5)))
1313- }
1314-
1315-
1316-func gG (b,gH,gI) = {
1317- let gJ = if ((gH == cx))
1318- then $Tuple2(gI, valueOrElse(getString(aN(b)), ""))
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)), ""))
13191296 else {
13201297 let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
1321- let gK = valueOrElse(getString(aP(p)), W)
1322- let gL = split(value(gK), "_")
1323- if ((gL[aV] != "L"))
1324- then throw((("Duck location type is " + gL[aV]) + ", but should be L"))
1325- else $Tuple2(gL[aW], p)
1326- }
1327- let aF = gJ._1
1328- let gM = gJ._2
1329- let gN = value(assetInfo(fromBase58String(aF)))
1330- let gO = ax(aF)
1331- let gP = valueOrErrorMessage(getInteger(gO), (("Land " + gN.name) + " is not staked"))
1332- let gQ = valueOrErrorMessage(getString(au(aF)), (("NFT " + gN.name) + " is orphaned"))
1333- if ((gQ != b))
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))
13341311 then throw((P + " is not yours"))
13351312 else {
1336- let gR = split(gN.description, "_")
1337- $Tuple4(gM, aF, gR, gP)
1338- }
1339- }
1340-
1341-
1342-func gS (b,fy,gH,gI) = if ((0 > fy))
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))
13431320 then throw("Negative amount")
13441321 else {
1345- let dM = gG(b, gH, gI)
1346- let bU = dM._3[bI]
1347- let ee = ek(dM._3[bJ])
1348- let eo = (lastBlock.timestamp - dM._4)
1349- if ((0 > eo))
1350- then throw(((("Saved timestamp is in future, saved = " + toString(dM._4)) + ", current = ") + toString(lastBlock.timestamp)))
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)))
13511328 else {
1352- let gC = bT(bU)
1353- let gT = gB(dM._2, gC)
1354- let gU = fraction(eo, (gT * gC), U)
1355- if ((fy > gU))
1356- then throw(((("Not enough resources, available = " + toString(gU)) + ", requested = ") + toString(fy)))
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)))
13571334 else {
1358- let gV = fraction((gU - fy), U, (gT * gC))
1359- let gW = (lastBlock.timestamp - gV)
1360- let fk = (gC / bj)
1361- let ew = es(ee, (eo - gV), fk, gT)
1362- let fj = aE(dM._2)
1363- let fl = valueOrElse(getInteger(ay(dM._2)), 0)
1364- let eW = fi(fj, fk, fl)
1365- let fr = split(eW[ak], "_")
1366- let ex = parseIntValue(fr[an])
1367- if (if ((gH == cx))
1368- then (fy > ex)
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)
13691346 else false)
1370- then throw((("Only " + toString(ex)) + " space left in warehouse"))
1347+ then throw((("Only " + toString(ez)) + " space left in warehouse"))
13711348 else {
1372- let eR = aO(dM._1)
1373- let fC = eQ(eR)
1374- let ev = split(fC[aq], "_")
1375- let eu = split(eW[ah], "_")
1376- let gX = if ((gH == cx))
1377- then $Tuple4(em(eu, ee, (eo - gV), fk, gT), fC[aq], (parseIntValue(fr[am]) + ew._2), (parseIntValue(fr[an]) - ew._2))
1378- else if ((gH == cy))
1379- then $Tuple4(eW[ah], em(ev, ee, (eo - gV), fk, gT), parseIntValue(fr[am]), parseIntValue(fr[an]))
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]))
13801357 else {
1381- let gY = et(eu, ev, ew, ex)
1382- let gZ = min([parseIntValue(fr[an]), ew._2])
1383- $Tuple4(gY._1, gY._2, (parseIntValue(fr[am]) + gZ), (parseIntValue(fr[an]) - gZ))
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))
13841361 }
1385- let ha = gX._1
1386- let hb = gX._2
1387- let hc = gX._3
1388- let hd = gX._4
1389- $Tuple5([IntegerEntry(ax(dM._2), gW), IntegerEntry(aB(P, dM._2, b), gW)], eR, [fC[ap], hb, fC[ar], fC[as]], fj, [eW[ag], ha, eW[ai], eW[aj], makeString([fr[al], toString(hc), toString(hd), fr[ao]], "_")])
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]], "_")])
13901367 }
13911368 }
13921369 }
13931370 }
13941371
13951372
1396-func he (b,aF,gC,gH) = {
1397- let gO = ax(aF)
1398- let gP = value(getInteger(gO))
1399- let gU = (fraction((lastBlock.timestamp - gP), gB(aF, gC), U) * gC)
1400- gS(b, gU, gH, aF)
1401- }
1402-
1403-
1404-func hf (cY,fY,hg,aF) = {
1405- let b = toString(fY)
1406- let dM = gG(b, cz, aF)
1407- let gC = bT(dM._3[bI])
1408- let hh = ay(dM._2)
1409- let hi = valueOrElse(getInteger(hh), 0)
1410- if ((hi >= 3))
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))
14111388 then throw("Currently max infrastructure level = 3")
14121389 else {
1413- let O = (hi + 1)
1414- let hj = fraction(cc, (gC * O), bj)
1390+ let O = (hk + 1)
1391+ let hl = fraction(cc, (gE * O), bj)
14151392 if (if (!(cY))
1416- then (hg != hj)
1393+ then (hi != hl)
14171394 else false)
1418- then throw(("Payment attached should be " + toString(hj)))
1395+ then throw(("Payment attached should be " + toString(hl)))
14191396 else {
1420- let eR = aO(dM._1)
1421- let fC = eQ(eR)
1422- let gy = split(fC[ar], "_")
1423- let hk = fraction(be, (gC * O), bj)
1424- let gz = makeString(cX(cY, gy, hk), "_")
1425- let hl = he(b, dM._2, gC, cz)
1426- let hm = hl._5
1427- let hn = eT(hm[ag])
1428- let ho = makeString([split(hm[ag], "_")[0], toString(O)], "_")
1429- let hp = eT(ho)
1430- let fr = split(hm[ak], "_")
1431- let hq = makeString([fr[al], fr[am], toString(((parseIntValue(fr[an]) + hp) - hn)), toString(hp)], "_")
1432- $Tuple3(([IntegerEntry(hh, O), IntegerEntry(cr(dM._2, b), O), StringEntry(eR, makeString([fC[ap], hl._3[aq], gz, fC[as]], ":")), StringEntry(hl._4, makeString([ho, hm[ah], hm[ai], hm[aj], hq], ":"))] ++ hl._1), O, hk)
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)
14331410 }
14341411 }
14351412 }
14361413
14371414
1438-func hr (p,hs) = if (!(aZ))
1415+func ht (p,hu) = if (!(aZ))
14391416 then $Tuple2(nil, 0)
14401417 else {
1441- let ht = r(p)
1442- let hu = q(p)
1443- let I = valueOrElse(getInteger(bD, hu), 0)
1444- let N = (I + hs)
1445- let hv = L(valueOrElse(getInteger(bD, ht), 0), N)
1446- let hw = s(p)
1447- $Tuple2([IntegerEntry(ht, hv[0]), IntegerEntry(hu, N), IntegerEntry(hw, (valueOrElse(getInteger(hw), 0) + hv[1]))], N)
1448- }
1449-
1450-
1451-func hx (b,hs) = if (!(aZ))
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))
14521429 then $Tuple2(nil, 0)
14531430 else {
1454- let ht = v(b)
1455- let hu = u(b)
1456- let I = valueOrElse(getInteger(bD, hu), 0)
1457- let N = (I + hs)
1458- let hv = L(valueOrElse(getInteger(bD, ht), 0), N)
1459- let hw = w(b)
1460- $Tuple2([IntegerEntry(ht, hv[0]), IntegerEntry(hu, N), IntegerEntry(hw, (valueOrElse(getInteger(hw), 0) + hv[1]))], N)
1461- }
1462-
1463-
1464-func hy (b) = {
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) = {
14651442 let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
1466- let hz = aI(b)
1467- let hA = getString(hz)
1468- if (!(isDefined(hA)))
1443+ let hB = aI(b)
1444+ let hC = getString(hB)
1445+ if (!(isDefined(hC)))
14691446 then throw("You are not eligible for ONBOARD artifact")
14701447 else {
1471- let hB = aK(b)
1472- let hC = getString(hB)
1473- if (isDefined(hC))
1474- then throw(("You already used your ONBOARD artifact on duck " + value(hC)))
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)))
14751452 else {
1476- let hD = aJ(p)
1477- let hE = getString(hD)
1478- if (isDefined(hE))
1479- then throw(((("The duck " + p) + " already got points from ONBOARD artifact from user ") + value(hE)))
1480- else ([StringEntry(hB, p), StringEntry(hD, b)] ++ hr(p, F)._1)
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)
14811458 }
14821459 }
14831460 }
14841461
14851462
1486-func hF (b,gI) = {
1487- let dM = gG(b, cz, gI)
1488- let aF = dM._2
1489- let gC = bT(dM._3[bI])
1490- let hG = az(R, aF)
1491- if ((valueOrElse(getInteger(hG), 0) > 0))
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))
14921469 then throw("Presale artifact is already activated")
1493- else if ((parseIntValue(dM._3[bH]) > cl))
1470+ else if ((parseIntValue(dN._3[bH]) > cl))
14941471 then throw((((P + " ") + aF) + " is not eligible for presale artifact"))
14951472 else {
1496- let hl = he(b, aF, gC, cz)
1497- ((((hl._1 :+ IntegerEntry(hG, gC)) :+ IntegerEntry(cs(R, aF, b), gC)) :+ StringEntry(hl._2, makeString(hl._3, ":"))) :+ StringEntry(hl._4, makeString(hl._5, ":")))
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, ":")))
14981475 }
14991476 }
15001477
15011478
1502-func hH (hI,O,hJ,b,hK,fZ,hL) = {
1479+func hJ (hK,O,hL,b,hM,gb,hN) = {
15031480 let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
1504- func hM (cL,aF) = {
1505- let gN = value(assetInfo(fromBase58String(aF)))
1506- let gO = ax(aF)
1507- let gP = valueOrErrorMessage(getInteger(gO), (("NFT " + gN.name) + " is not staked"))
1508- let gQ = valueOrErrorMessage(getString(au(aF)), (("NFT " + gN.name) + " is orphaned"))
1509- if ((gQ != b))
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))
15101487 then throw((P + " is not yours"))
15111488 else {
1512- let gR = split(gN.description, "_")
1513- let gc = gR[bK]
1489+ let gT = split(gP.description, "_")
1490+ let ge = gT[bK]
15141491 if (if ((cL._3 != ""))
1515- then (cL._3 != gc)
1492+ then (cL._3 != ge)
15161493 else false)
15171494 then throw("Lands should be on the same continent to merge")
15181495 else {
1519- let bU = gR[bI]
1520- let hN = cL._1
1521- let ei = valueOrErrorMessage(indexOf(hN, bU), "You haven't passed all the lands needed")
1522- let hO = (take(hN, ei) + drop(hN, (ei + 1)))
1523- let gC = bT(bU)
1524- let hP = (cL._2 + valueOrElse(getInteger(az(R, aF)), 0))
1525- let fl = valueOrElse(getInteger(ay(aF)), 0)
1526- let hQ = {
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 = {
15271504 let bc = bU
15281505 if (("S" == bc))
15291506 then 3
15351512 then 6
15361513 else throw("Only S, M, L, XL can merge")
15371514 }
1538- if ((fl != hQ))
1515+ if ((fn != hS))
15391516 then throw("All lands should be maxed to merge")
15401517 else {
1541- let co = gR[bH]
1542- let ee = ek(gR[bJ])
1543- let eo = (lastBlock.timestamp - gP)
1544- if ((0 > eo))
1545- then throw(((("Saved timestamp is in future, saved = " + toString(gP)) + ", current = ") + toString(lastBlock.timestamp)))
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)))
15461523 else {
1547- let gT = gB(aF, gC)
1548- let fk = (gC / bj)
1549- let hb = em(split(cL._4, "_"), ee, eo, fk, gT)
1550- let cV = ec(split(cL._6, "_"), ee, fk, -1)
1551- let hR = cL._7
1552- let bB = indexOf(hR, aF)
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)
15531530 if (!(isDefined(bB)))
15541531 then throw(("Your staked lands don't contain " + aF))
15551532 else {
1556- let hS = aw(aF)
1557- let hT = valueOrElse(getString(hS), "")
1558- $Tuple8(hO, hP, gc, hb, (((((((((((((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(hS)) :+ DeleteEntry(cp(hT))) :+ Burn(fromBase58String(aF), 1)), cV, removeByIndex(hR, value(bB)), (cL._8 + gC))
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))
15591536 }
15601537 }
15611538 }
15631540 }
15641541 }
15651542
1566- let eR = aO(p)
1567- let fC = eQ(eR)
1568- let hU = valueOrElse(getString(bL()), "0_0_0_0_0_0")
1569- let hV = bM(b)
1570- let hW = getString(hV)
1571- let hX = if (isDefined(hW))
1572- then split_51C(value(hW), "_")
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), "_")
15731550 else nil
15741551 let cW = {
1575- let cN = hK
1552+ let cN = hM
15761553 let cO = size(cN)
1577- let cP = $Tuple8(hJ, 0, "", fC[aq], nil, hU, hX, 0)
1554+ let cP = $Tuple8(hL, 0, "", fE[aq], nil, hW, hZ, 0)
15781555 func cQ (cR,cS) = if ((cS >= cO))
15791556 then cR
1580- else hM(cR, cN[cS])
1557+ else hO(cR, cN[cS])
15811558
15821559 func cT (cR,cS) = if ((cS >= cO))
15831560 then cR
15851562
15861563 cT(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5)
15871564 }
1588- let gc = cW._3
1589- let eM = valueOrErrorMessage(indexOf(aa, gc), ("Unknown continent: " + gc))
1590- let el = eK(eD(toBigInt(fZ)), eM)
1591- let gb = valueOrElse(getInteger(cm()), (cl + 1))
1592- let hY = toString(gb)
1593- let gd = Issue(cE(hY, hI), makeString([hY, hI, el, gc], "_"), 1, 0, false)
1594- let av = calculateAssetId(gd)
1595- let hZ = toBase58String(av)
1596- let gz = makeString(cX((hL > 0), split(fC[ar], "_"), hL), "_")
1597- let ia = bN(b)
1598- let ib = valueOrElse(getInteger(ia), 0)
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)
15991576 $Tuple2((((((((((((((((cW._5 :+ (if ((size(cW._7) > 0))
1600- then StringEntry(hV, makeString_11C(cW._7, "_"))
1601- else DeleteEntry(hV))) :+ IntegerEntry(ia, if ((cW._8 > ib))
1577+ then StringEntry(hX, makeString_11C(cW._7, "_"))
1578+ else DeleteEntry(hX))) :+ IntegerEntry(ic, if ((cW._8 > id))
16021579 then 0
1603- else (ib - cW._8))) :+ IntegerEntry(cm(), (gb + 1))) :+ gd) :+ StringEntry(cn(hY), hZ)) :+ StringEntry(au(hZ), b)) :+ StringEntry(ct(hY), b)) :+ IntegerEntry(az(R, hZ), cW._2)) :+ IntegerEntry(cs(R, hZ, b), cW._2)) :+ IntegerEntry(ay(hZ), O)) :+ IntegerEntry(cr(hZ, b), O)) :+ StringEntry(eR, makeString([fC[ap], cW._4, gz, fC[as]], ":"))) :+ StringEntry(bL(), cW._6)) :+ StringEntry(aP(p), makeString([gc, "L", hZ], "_"))) :+ ScriptTransfer(addressFromStringValue(b), 1, av)), hZ)
1604- }
1605-
1606-
1607-func ic (b,hK,fZ) = hH("M", 3, "SSSS", b, hK, fZ, 0)
1608-
1609-
1610-func id (b,hK,fZ,cY,hg) = {
1611- let hj = (cc * 4)
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)
16121589 if (if (!(cY))
1613- then (hg != hj)
1590+ then (hi != hl)
16141591 else false)
1615- then throw(("Payment attached should be " + toString(hj)))
1616- else hH("L", 4, "SMM", b, hK, fZ, (be * 4))
1617- }
1618-
1619-
1620-func ie (b,hK,fZ,cY,hg) = {
1621- let hj = (cc * 47)
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)
16221599 if (if (!(cY))
1623- then (hg != hj)
1600+ then (hi != hl)
16241601 else false)
1625- then throw(("Payment attached should be " + toString(hj)))
1626- else hH("XL", 5, "SSSML", b, hK, fZ, (be * 47))
1627- }
1628-
1629-
1630-func if (b,hK,fZ,cY,hg) = {
1631- let hj = (cc * 54)
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)
16321609 if (if (!(cY))
1633- then (hg != hj)
1610+ then (hi != hl)
16341611 else false)
1635- then throw(("Payment attached should be " + toString(hj)))
1636- else hH("XXL", 6, "LXL", b, hK, fZ, (be * 54))
1637- }
1638-
1639-
1640-func ig (cY,b,hg,hK,fZ) = {
1641- let ih = {
1642- let bc = size(hK)
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)
16431620 if ((4 == bc))
1644- then ic(b, hK, fZ)
1621+ then ie(b, hM, gb)
16451622 else if ((3 == bc))
1646- then id(b, hK, fZ, cY, hg)
1623+ then if(b, hM, gb, cY, hi)
16471624 else if ((5 == bc))
1648- then ie(b, hK, fZ, cY, hg)
1625+ then ig(b, hM, gb, cY, hi)
16491626 else if ((2 == bc))
1650- then if(b, hK, fZ, cY, hg)
1627+ then ih(b, hM, gb, cY, hi)
16511628 else throw("Unknown merge")
16521629 }
1653- ih
1654- }
1655-
1656-
1657-func ii (ei) = if (if ((ei.originCaller != bC))
1630+ ij
1631+ }
1632+
1633+
1634+func ik (ek) = if (if ((ek.originCaller != bC))
16581635 then valueOrElse(getBoolean(aR()), false)
16591636 else false)
16601637 then throw("Contracts are under maintenance")
1661- else StringEntry(at(toString(ei.originCaller)), toBase58String(ei.transactionId))
1662-
1663-
1664-@Callable(ei)
1665-func constructorV1 (ij) = if ((ei.caller != this))
1638+ else StringEntry(at(toString(ek.originCaller)), toBase58String(ek.transactionId))
1639+
1640+
1641+@Callable(ek)
1642+func constructorV1 (il) = if ((ek.caller != this))
16661643 then throw("Permission denied")
1667- else [StringEntry(bw(), ij)]
1668-
1669-
1670-
1671-@Callable(ei)
1672-func setBlocked (ik) = if ((ei.caller != this))
1644+ else [StringEntry(bw(), il)]
1645+
1646+
1647+
1648+@Callable(ek)
1649+func setBlocked (im) = if ((ek.caller != this))
16731650 then throw("permission denied")
1674- else [BooleanEntry(aR(), ik)]
1675-
1676-
1677-
1678-@Callable(ei)
1651+ else [BooleanEntry(aR(), im)]
1652+
1653+
1654+
1655+@Callable(ek)
16791656 func stakeLand () = {
1680- let il = ii(ei)
1681- if ((size(ei.payments) != 1))
1657+ let in = ik(ek)
1658+ if ((size(ek.payments) != 1))
16821659 then throw("Exactly one payment required")
16831660 else {
1684- let im = value(ei.payments[0])
1685- let av = value(im.assetId)
1686- let bp = toString(ei.caller)
1687- if ((im.amount != 1))
1661+ let io = value(ek.payments[0])
1662+ let av = value(io.assetId)
1663+ let bp = toString(ek.caller)
1664+ if ((io.amount != 1))
16881665 then throw((("NFT " + P) + " token should be attached as payment"))
16891666 else {
1690- let gN = value(assetInfo(av))
1691- if ((gN.issuer != this))
1667+ let gP = value(assetInfo(av))
1668+ if ((gP.issuer != this))
16921669 then throw("Unknown issuer of token")
1693- else if (!(contains(gN.name, P)))
1670+ else if (!(contains(gP.name, P)))
16941671 then throw((("Only NFT " + P) + " tokens are accepted"))
16951672 else {
1696- let in = drop(gN.name, 4)
1697- let co = if (contains(in, "XXL"))
1698- then dropRight(in, 3)
1699- else if (contains(in, "XL"))
1700- then dropRight(in, 2)
1701- else dropRight(in, 1)
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)
17021679 if (!(isDefined(parseInt(co))))
1703- then throw(("Cannot parse land number from " + gN.name))
1680+ then throw(("Cannot parse land number from " + gP.name))
17041681 else {
17051682 let aF = toBase58String(av)
1706- let gO = ax(aF)
1707- if (isDefined(getInteger(gO)))
1708- then throw((("NFT " + gN.name) + " is already staked"))
1683+ let gQ = ax(aF)
1684+ if (isDefined(getInteger(gQ)))
1685+ then throw((("NFT " + gP.name) + " is already staked"))
17091686 else {
1710- let gR = split(gN.description, "_")
1711- let ee = ek(gR[bJ])
1712- let gC = bT(gR[bI])
1713- let cV = ej(ee, (gC / bj), 1)
1714- let gD = valueOrElse(getInteger(az(R, aF)), 0)
1715- let hV = bM(bp)
1716- let hW = getString(hV)
1717- let hR = if (isDefined(hW))
1718- then split_51C(value(hW), "_")
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), "_")
17191696 else nil
1720- if (containsElement(hR, aF))
1697+ if (containsElement(hT, aF))
17211698 then throw(("Your staked lands already contain " + aF))
17221699 else {
1723- let fl = valueOrElse(getInteger(ay(aF)), 0)
1724- let ia = bN(bp)
1725- let io = valueOrElse(getInteger(ia), 0)
1726- let ip = bR(invoke(bG, "onStakeUnstakeLand", [bp], nil))
1727- $Tuple2([IntegerEntry(gO, lastBlock.timestamp), IntegerEntry(aB(P, aF, bp), lastBlock.timestamp), StringEntry(hV, makeString_11C((hR :+ aF), "_")), IntegerEntry(ia, (io + gC)), StringEntry(au(aF), bp), StringEntry(ct(co), bp), IntegerEntry(cs(R, aF, bp), gD), IntegerEntry(cr(aF, bp), fl), StringEntry(bL(), cV), il], ip)
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)
17281705 }
17291706 }
17301707 }
17351712
17361713
17371714
1738-@Callable(ei)
1739-func unstakeLand (gI) = {
1740- let il = ii(ei)
1741- if ((size(ei.payments) != 0))
1715+@Callable(ek)
1716+func unstakeLand (gK) = {
1717+ let in = ik(ek)
1718+ if ((size(ek.payments) != 0))
17421719 then throw("No payments required")
17431720 else {
1744- let b = toString(ei.caller)
1745- let dM = gG(b, cy, gI)
1746- let aF = dM._2
1747- let hV = bM(b)
1748- let ee = ek(dM._3[bJ])
1749- let gC = bT(dM._3[bI])
1750- let cV = ej(ee, (gC / bj), -1)
1751- let hl = he(b, aF, gC, cy)
1752- let hR = split_51C(valueOrElse(getString(hV), ""), "_")
1753- let bB = indexOf(hR, aF)
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)
17541731 if (!(isDefined(bB)))
17551732 then throw(("Your staked lands don't contain " + aF))
17561733 else {
1757- let iq = lastBlock.timestamp
1758- let ir = valueOrElse(getInteger(bF, aS(b)), 0)
1759- if ((ir >= iq))
1760- then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(ir)))
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)))
17611738 else {
1762- let is = (valueOrElse(getInteger(bG, a(b)), 0) + bf)
1763- if ((is > iq))
1764- then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(is)))
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)))
17651742 else {
1766- let ia = bN(b)
1767- let ib = valueOrElse(getInteger(ia), 0)
1768- let it = if ((gC > ib))
1743+ let ic = bN(b)
1744+ let id = valueOrElse(getInteger(ic), 0)
1745+ let iv = if ((gE > id))
17691746 then 0
1770- else (ib - gC)
1771- let ip = bR(invoke(bG, "onStakeUnstakeLand", [b], nil))
1772- $Tuple2([ScriptTransfer(ei.caller, 1, fromBase58String(aF)), DeleteEntry(ax(aF)), DeleteEntry(aB(P, aF, b)), StringEntry(bL(), cV), StringEntry(hl._2, makeString(hl._3, ":")), if ((size(hR) > 1))
1773- then StringEntry(hV, makeString_11C(removeByIndex(hR, value(bB)), "_"))
1774- else DeleteEntry(hV), IntegerEntry(ia, it), il], ip)
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)
17751752 }
17761753 }
17771754 }
17801757
17811758
17821759
1783-@Callable(ei)
1760+@Callable(ek)
17841761 func stakeDuck () = {
1785- let il = ii(ei)
1786- if ((size(ei.payments) != 1))
1762+ let in = ik(ek)
1763+ if ((size(ek.payments) != 1))
17871764 then throw("Exactly one payment required")
17881765 else {
1789- let im = value(ei.payments[0])
1790- let av = value(im.assetId)
1791- let bp = toString(ei.caller)
1792- if ((im.amount != 1))
1766+ let io = value(ek.payments[0])
1767+ let av = value(io.assetId)
1768+ let bp = toString(ek.caller)
1769+ if ((io.amount != 1))
17931770 then throw((("NFT " + Q) + " token should be attached as payment"))
17941771 else {
1795- let gN = value(assetInfo(av))
1796- if (if ((gN.issuer != bV))
1797- then (gN.issuer != bW)
1772+ let gP = value(assetInfo(av))
1773+ if (if ((gP.issuer != bV))
1774+ then (gP.issuer != bW)
17981775 else false)
17991776 then throw((("Unknown issuer of " + Q) + " token"))
1800- else if (!(contains(gN.name, Q)))
1777+ else if (!(contains(gP.name, Q)))
18011778 then throw((("Only NFT " + Q) + " tokens are accepted"))
18021779 else {
1803- let iu = toBase58String(av)
1804- let gO = ax(iu)
1805- if (isDefined(getInteger(gO)))
1806- then throw((("NFT " + gN.name) + " is already staked"))
1780+ let iw = toBase58String(av)
1781+ let gQ = ax(iw)
1782+ if (isDefined(getInteger(gQ)))
1783+ then throw((("NFT " + gP.name) + " is already staked"))
18071784 else if (isDefined(getString(aN(bp))))
1808- then throw(("You already staked one duck: " + gN.name))
1785+ then throw(("You already staked one duck: " + gP.name))
18091786 else {
1810- let iv = aP(iu)
1811- let iw = getString(iv)
1812- let eR = aO(iu)
1813- let ix = getString(eR)
1814- let gr = aQ(iu)
1815- let gs = J(valueOrElse(getInteger(r(iu)), 0))
1816- let iy = valueOrElse(getInteger(gr), gs)
1817- ([IntegerEntry(gO, lastBlock.timestamp), IntegerEntry(aB(Q, toBase58String(av), bp), lastBlock.timestamp), StringEntry(aM(iu), bp), StringEntry(aN(bp), iu)] ++ (if (isDefined(iw))
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))
18181795 then nil
1819- else ([StringEntry(iv, W)] ++ (if (isDefined(ix))
1796+ else ([StringEntry(ix, W)] ++ (if (isDefined(iz))
18201797 then nil
1821- else (([StringEntry(eR, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(gr, iy)) :+ il)))))
1798+ else (([StringEntry(eT, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(gt, iA)) :+ in)))))
18221799 }
18231800 }
18241801 }
18271804
18281805
18291806
1830-@Callable(ei)
1831-func unstakeDuck (iu) = {
1832- let il = ii(ei)
1833- if ((size(ei.payments) != 0))
1807+@Callable(ek)
1808+func unstakeDuck (iw) = {
1809+ let in = ik(ek)
1810+ if ((size(ek.payments) != 0))
18341811 then throw("No payments required")
18351812 else {
1836- let av = fromBase58String(iu)
1837- let bp = toString(ei.caller)
1838- let gN = value(assetInfo(av))
1839- let gO = ax(toBase58String(av))
1840- if (!(isDefined(getInteger(gO))))
1841- then throw((("NFT " + gN.name) + " is not staked"))
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"))
18421819 else if (!(isDefined(getString(aN(bp)))))
1843- then throw((("The duck " + gN.name) + " is not staked"))
1820+ then throw((("The duck " + gP.name) + " is not staked"))
18441821 else {
1845- let gQ = valueOrErrorMessage(getString(aM(toBase58String(av))), (("NFT " + gN.name) + " is orphaned"))
1846- if ((gQ != bp))
1822+ let gS = valueOrErrorMessage(getString(aM(toBase58String(av))), (("NFT " + gP.name) + " is orphaned"))
1823+ if ((gS != bp))
18471824 then throw("Staked NFT is not yours")
18481825 else {
1849- let gr = aQ(iu)
1850- let gs = J(valueOrElse(getInteger(r(iu)), 0))
1851- let iz = valueOrElse(getInteger(gr), gs)
1852- if ((gs > iz))
1853- then throw((("Please heal your duck to " + toString(gs)) + "hp before unstaking"))
1854- else [ScriptTransfer(ei.caller, 1, av), DeleteEntry(gO), DeleteEntry(gr), DeleteEntry(aP(iu)), DeleteEntry(aM(iu)), DeleteEntry(aB(Q, iu, bp)), DeleteEntry(aN(bp)), il]
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]
18551832 }
18561833 }
18571834 }
18591836
18601837
18611838
1862-@Callable(ei)
1863-func claimRes (fy,iA) = {
1864- let il = ii(ei)
1865- if ((size(ei.payments) != 0))
1839+@Callable(ek)
1840+func claimRes (fA,iC) = {
1841+ let in = ik(ek)
1842+ if ((size(ek.payments) != 0))
18661843 then throw("No payments required")
18671844 else {
1868- let b = toString(ei.originCaller)
1869- let dd = gS(b, fy, cy, iA)
1845+ let b = toString(ek.originCaller)
1846+ let dd = gU(b, fA, cy, iC)
18701847 let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
1871- $Tuple2(((((dd._1 ++ hr(p, fraction(x, fy, bi))._1) :+ StringEntry(dd._2, makeString(dd._3, ":"))) :+ StringEntry(dd._4, makeString(dd._5, ":"))) :+ il), dd._3[aq])
1872- }
1873- }
1874-
1875-
1876-
1877-@Callable(ei)
1878-func claimResToWH (fy,iA) = {
1879- let il = ii(ei)
1880- if ((size(ei.payments) != 0))
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))
18811858 then throw("No payments required")
18821859 else {
1883- let b = toString(ei.originCaller)
1884- let dd = gS(b, fy, cx, iA)
1885- $Tuple2(((((dd._1 ++ hx(b, fraction(x, fy, bi))._1) :+ StringEntry(dd._2, makeString(dd._3, ":"))) :+ StringEntry(dd._4, makeString(dd._5, ":"))) :+ il), dd._5[ah])
1886- }
1887- }
1888-
1889-
1890-
1891-@Callable(ei)
1892-func flight (gg,gh) = {
1893- let il = ii(ei)
1894- if ((size(ei.payments) != 0))
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))
18951872 then throw("No payments required")
18961873 else {
1897- let aT = toString(ei.caller)
1898- let eN = gf(aT, gg, gh)
1899- let p = eN._2
1900- let iv = aP(p)
1901- let gK = valueOrElse(getString(iv), W)
1902- if ((eN._4 == gK))
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))
19031880 then throw("You can't fly to the same location")
19041881 else {
1905- let eR = aO(p)
1906- let fC = eQ(eR)
1907- let dt = de(fC[as], eN._5)
1908- $Tuple2(([StringEntry(iv, if ((eN._1 > 0))
1909- then eN._4
1910- else gK), StringEntry(eR, makeString([fC[ap], fC[aq], fC[ar], dt], ":")), IntegerEntry(aQ(p), eN._1), il] ++ hr(p, if ((eN._1 > 0))
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))
19111888 then y
1912- else z)._1), eN._3)
1889+ else z)._1), eP._3)
19131890 }
19141891 }
19151892 }
19161893
19171894
19181895
1919-@Callable(ei)
1920-func heal (iB,iC,iD) = {
1921- let il = ii(ei)
1922- if (if (if ((0 > iB))
1896+@Callable(ek)
1897+func heal (iD,iE,iF) = {
1898+ let in = ik(ek)
1899+ if (if (if ((0 > iD))
19231900 then true
1924- else (0 > iC))
1901+ else (0 > iE))
19251902 then true
1926- else (0 > iD))
1903+ else (0 > iF))
19271904 then throw("Quantity cannot be negative")
19281905 else {
1929- let p = valueOrErrorMessage(getString(aN(toString(ei.caller))), "You don't have a duck staked")
1930- let iE = [iB, iC, iD]
1931- let gr = aQ(p)
1932- let gs = J(valueOrElse(getInteger(r(p)), 0))
1933- let iF = valueOrElse(getInteger(gr), gs)
1934- if ((iF >= gs))
1935- then throw((("HP should be < " + toString(gs)) + " to heal"))
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"))
19361913 else {
1937- let eR = aO(p)
1938- let fC = eQ(eR)
1939- let iG = if ((fC[as] == ""))
1914+ let eT = aO(p)
1915+ let fE = eS(eT)
1916+ let iI = if ((fE[as] == ""))
19401917 then nil
1941- else split(fC[as], "_")
1942- func iH (cL,iI) = {
1918+ else split(fE[as], "_")
1919+ func iJ (cL,iK) = {
19431920 let bS = cL._2
1944- let eE = if ((size(iG) > bS))
1945- then parseIntValue(iG[bS])
1921+ let eG = if ((size(iI) > bS))
1922+ then parseIntValue(iI[bS])
19461923 else 0
19471924 if ((3 > bS))
19481925 then {
1949- let iJ = iE[bS]
1950- if ((iJ > eE))
1951- then throw(((("You have only " + toString(eE)) + " of ") + Z[bS]))
1952- else $Tuple3((cL._1 :+ toString((eE - iJ))), (bS + 1), (cL._3 + (bY[bS] * iJ)))
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)))
19531930 }
1954- else $Tuple3((cL._1 :+ toString(eE)), (bS + 1), cL._3)
1931+ else $Tuple3((cL._1 :+ toString(eG)), (bS + 1), cL._3)
19551932 }
19561933
19571934 let dd = {
19601937 let cP = $Tuple3(nil, 0, 0)
19611938 func cQ (cR,cS) = if ((cS >= cO))
19621939 then cR
1963- else iH(cR, cN[cS])
1940+ else iJ(cR, cN[cS])
19641941
19651942 func cT (cR,cS) = if ((cS >= cO))
19661943 then cR
19681945
19691946 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)
19701947 }
1971- let iK = min([gs, (iF + dd._3)])
1972- $Tuple2(([IntegerEntry(gr, iK), StringEntry(eR, makeString_2C([fC[ap], fC[aq], fC[ar], makeString(dd._1, "_")], ":")), il] ++ hr(p, (G * ((iB + iC) + iD)))._1), iK)
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)
19731950 }
19741951 }
19751952 }
19761953
19771954
19781955
1979-@Callable(ei)
1956+@Callable(ek)
19801957 func healES () = {
1981- let il = ii(ei)
1982- if ((size(ei.payments) != 1))
1958+ let in = ik(ek)
1959+ if ((size(ek.payments) != 1))
19831960 then throw("Exactly one payment required")
19841961 else {
1985- let im = value(ei.payments[0])
1986- if ((im.assetId != bb))
1962+ let io = value(ek.payments[0])
1963+ if ((io.assetId != bb))
19871964 then throw("Allowed USDT payment only!")
19881965 else {
1989- let p = valueOrErrorMessage(getString(aN(toString(ei.caller))), "You don't have a duck staked")
1990- let gr = aQ(p)
1991- let gs = J(valueOrElse(getInteger(r(p)), 0))
1992- let iF = valueOrElse(getInteger(gr), gs)
1993- if ((iF > 0))
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))
19941971 then throw("HP should be 0 to call Emergency Service")
19951972 else {
1996- let eR = aO(p)
1997- let fC = eQ(eR)
1998- let iG = if ((fC[as] == ""))
1973+ let eT = aO(p)
1974+ let fE = eS(eT)
1975+ let iI = if ((fE[as] == ""))
19991976 then nil
2000- else split(fC[as], "_")
2001- let iL = if ((size(iG) > 0))
2002- then parseIntValue(iG[0])
1977+ else split(fE[as], "_")
1978+ let iN = if ((size(iI) > 0))
1979+ then parseIntValue(iI[0])
20031980 else 0
2004- let iM = if ((size(iG) > 1))
2005- then parseIntValue(iG[1])
1981+ let iO = if ((size(iI) > 1))
1982+ then parseIntValue(iI[1])
20061983 else 0
2007- let iN = if ((size(iG) > 2))
2008- then parseIntValue(iG[2])
1984+ let iP = if ((size(iI) > 2))
1985+ then parseIntValue(iI[2])
20091986 else 0
2010- if (if (if ((iL > 0))
1987+ if (if (if ((iN > 0))
20111988 then true
2012- else (iM > 0))
1989+ else (iO > 0))
20131990 then true
2014- else (iN > 0))
1991+ else (iP > 0))
20151992 then throw("You have to use own Medical Kit")
20161993 else {
2017- let iO = getString(bE, aU())
2018- let iP = if (isDefined(iO))
2019- then split(value(iO), "_")
1994+ let iQ = getString(bE, aU())
1995+ let iR = if (isDefined(iQ))
1996+ then split(value(iQ), "_")
20201997 else nil
2021- let iQ = if ((size(iP) > 0))
2022- then parseIntValue(iP[0])
1998+ let iS = if ((size(iR) > 0))
1999+ then parseIntValue(iR[0])
20232000 else 0
2024- if ((0 >= iQ))
2001+ if ((0 >= iS))
20252002 then throw("There are no Medical Kits L1 at Emergency Service storage")
20262003 else {
2027- let iK = (iF + bY[0])
2028- let iR = makeString([toString((iQ - 1)), removeByIndex(iP, 0)], "_")
2004+ let iM = (iH + bY[0])
2005+ let iT = makeString([toString((iS - 1)), removeByIndex(iR, 0)], "_")
20292006 let aY = split(ac[0], "_")
2030- let iS = aX(aY)
2031- let iT = fraction((iS * Y), X, (10 * af))
2032- if ((im.amount != iT))
2033- then throw(("Payment attached should be " + toString(iT)))
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)))
20342011 else {
2035- let dd = bO(invoke(bE, "updateEsStorage", [iR], [AttachedPayment(bb, iT)]))
2036- $Tuple2(([IntegerEntry(gr, iK), il] ++ hr(p, A)._1), dd)
2012+ let dd = bO(invoke(bE, "updateEsStorage", [iT], [AttachedPayment(bb, iV)]))
2013+ $Tuple2(([IntegerEntry(gt, iM), in] ++ ht(p, A)._1), dd)
20372014 }
20382015 }
20392016 }
20442021
20452022
20462023
2047-@Callable(ei)
2048-func updateBackpack (p,iU) = if ((ei.caller != bE))
2024+@Callable(ek)
2025+func updateBackpack (p,iW) = if ((ek.caller != bE))
20492026 then throw("permission denied")
2050- else $Tuple2([StringEntry(aO(p), iU)], iU)
2051-
2052-
2053-
2054-@Callable(ei)
2027+ else $Tuple2([StringEntry(aO(p), iW)], iW)
2028+
2029+
2030+
2031+@Callable(ek)
20552032 func buySLand () = {
2056- let il = ii(ei)
2057- if ((size(ei.payments) != 1))
2033+ let in = ik(ek)
2034+ if ((size(ek.payments) != 1))
20582035 then throw("Exactly one payment required")
20592036 else {
2060- let im = value(ei.payments[0])
2061- if ((im.assetId != bb))
2037+ let io = value(ek.payments[0])
2038+ if ((io.assetId != bb))
20622039 then throw("Allowed USDT payment only!")
2063- else if ((im.amount != ce))
2040+ else if ((io.amount != ce))
20642041 then throw(("Payment attached should be " + toString(ce)))
20652042 else {
2066- let dd = fX(ei.caller, ei.transactionId)
2067- $Tuple2((((dd._1 :+ ScriptTransfer(bE, im.amount, bb)) ++ hx(toString(ei.caller), C)._1) :+ il), dd._2._1)
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)
20682045 }
20692046 }
20702047 }
20712048
20722049
20732050
2074-@Callable(ei)
2075-func expedition (gg,gh) = {
2076- let il = ii(ei)
2077- if ((size(ei.payments) != 0))
2051+@Callable(ek)
2052+func expedition (gi,gj) = {
2053+ let in = ik(ek)
2054+ if ((size(ek.payments) != 0))
20782055 then throw("No payments required")
20792056 else {
2080- let dd = gx(ei.caller, ei.transactionId, gg, gh)
2081- let p = valueOrErrorMessage(getString(aN(toString(ei.caller))), "You don't have a duck staked")
2082- $Tuple2(((dd._1 ++ hr(p, C)._1) :+ il), $Tuple2(dd._2, dd._3))
2083- }
2084- }
2085-
2086-
2087-
2088-@Callable(ei)
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)
20892066 func upgradeInfra (aF) = {
2090- let il = ii(ei)
2091- if ((size(ei.payments) != 0))
2067+ let in = ik(ek)
2068+ if ((size(ek.payments) != 0))
20922069 then throw("No payments required")
20932070 else {
2094- let dd = hf(true, ei.caller, 0, aF)
2095- let p = valueOrErrorMessage(getString(aN(toString(ei.caller))), "You don't have a duck staked")
2096- $Tuple2(((dd._1 :+ il) ++ hr(p, fraction(D, dd._3, bi))._1), dd._2)
2097- }
2098- }
2099-
2100-
2101-
2102-@Callable(ei)
2103-func upgradeInfraUsdt (aF) = if ((ei.caller != this))
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))
21042081 then throw("Permission denied")
21052082 else {
2106- let il = ii(ei)
2107- if ((size(ei.payments) != 1))
2083+ let in = ik(ek)
2084+ if ((size(ek.payments) != 1))
21082085 then throw("Exactly one payment required")
21092086 else {
2110- let im = value(ei.payments[0])
2111- if ((im.assetId != bb))
2087+ let io = value(ek.payments[0])
2088+ if ((io.assetId != bb))
21122089 then throw("Allowed USDT payment only!")
21132090 else {
2114- let dd = hf(false, ei.caller, im.amount, aF)
2115- $Tuple2(((dd._1 :+ ScriptTransfer(bE, im.amount, bb)) :+ il), dd._2)
2091+ let dd = hh(false, ek.caller, io.amount, aF)
2092+ $Tuple2(((dd._1 :+ ScriptTransfer(bE, io.amount, bb)) :+ in), dd._2)
21162093 }
21172094 }
21182095 }
21192096
21202097
21212098
2122-@Callable(ei)
2123-func activateArtifact (iV,iW) = {
2124- let il = ii(ei)
2125- if ((size(ei.payments) != 0))
2099+@Callable(ek)
2100+func activateArtifact (iX,iY) = {
2101+ let in = ik(ek)
2102+ if ((size(ek.payments) != 0))
21262103 then throw("No payments required")
21272104 else {
2128- let b = toString(ei.caller)
2105+ let b = toString(ek.caller)
21292106 let dd = {
2130- let bc = iV
2107+ let bc = iX
21312108 if (("PRESALE" == bc))
2132- then hF(b, iW)
2109+ then hH(b, iY)
21332110 else if (("ONBOARD" == bc))
2134- then hy(b)
2111+ then hA(b)
21352112 else throw("Unknown artifact")
21362113 }
2137- (dd :+ il)
2138- }
2139- }
2140-
2141-
2142-
2143-@Callable(ei)
2144-func mergeLands (hK) = {
2145- let il = ii(ei)
2146- if ((size(ei.payments) != 0))
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))
21472124 then throw("No payments required")
21482125 else {
2149- let dd = ig(true, toString(ei.caller), 0, hK, ei.transactionId)
2150- $Tuple2(((dd._1 :+ il) ++ hx(toString(ei.caller), E)._1), dd._2)
2151- }
2152- }
2153-
2154-
2155-
2156-@Callable(ei)
2157-func mergeLandsUsdt (hK) = {
2158- let il = ii(ei)
2159- if ((size(ei.payments) != 1))
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))
21602137 then throw("Exactly one payment required")
21612138 else {
2162- let im = value(ei.payments[0])
2163- if ((im.assetId != bb))
2139+ let io = value(ek.payments[0])
2140+ if ((io.assetId != bb))
21642141 then throw("Allowed USDT payment only!")
21652142 else {
2166- let dd = ig(false, toString(ei.caller), im.amount, hK, ei.transactionId)
2167- $Tuple2(((dd._1 :+ ScriptTransfer(bE, im.amount, bb)) :+ il), dd._2)
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)
21682145 }
21692146 }
21702147 }
21712148
21722149
21732150
2174-@Callable(ei)
2175-func cargoExchange (iX,aF) = {
2176- let il = ii(ei)
2177- if ((size(ei.payments) != 0))
2151+@Callable(ek)
2152+func cargoExchange (iZ,aF) = {
2153+ let in = ik(ek)
2154+ if ((size(ek.payments) != 0))
21782155 then throw("No payments required")
21792156 else {
2180- let fB = split_4C(iX, ":")
2181- let b = toString(ei.originCaller)
2182- let gN = value(assetInfo(fromBase58String(aF)))
2183- let gO = ax(aF)
2184- if (!(isDefined(getInteger(gO))))
2185- then throw((gN.name + " is not staked"))
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"))
21862163 else {
2187- let gQ = valueOrErrorMessage(getString(au(aF)), (("NFT " + gN.name) + " is orphaned"))
2188- if ((gQ != b))
2164+ let gS = valueOrErrorMessage(getString(au(aF)), (("NFT " + gP.name) + " is orphaned"))
2165+ if ((gS != b))
21892166 then throw((P + " is not yours"))
21902167 else {
2191- let fk = (bT(split(gN.description, "_")[bI]) / bj)
2192- let fl = valueOrElse(getInteger(ay(aF)), 0)
2168+ let fm = (bT(split(gP.description, "_")[bI]) / bj)
2169+ let fn = valueOrElse(getInteger(ay(aF)), 0)
21932170 let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
2194- let gK = valueOrElse(getString(aP(p)), W)
2195- let gL = split(value(gK), "_")
2196- if ((gL[aV] != "L"))
2197- then throw((("Duck location type is " + gL[aV]) + ", but should be L"))
2198- else if ((gL[aW] != aF))
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))
21992176 then throw(("Duck should be on the land " + aF))
22002177 else {
2201- let fj = aE(aF)
2202- let eW = fi(fj, fk, fl)
2203- let eR = aO(p)
2204- let fC = eQ(eR)
2205- let dd = fA(fB, eW, fC)
2206- let fr = split(eW[ak], "_")
2207- let hc = (parseIntValue(fr[am]) + dd._7)
2208- let hd = (parseIntValue(fr[an]) - dd._7)
2209-[StringEntry(eR, makeString_2C([fC[ap], dd._4, dd._5, dd._6], ":")), StringEntry(fj, makeString_2C([eW[ag], dd._1, dd._2, dd._3, makeString([fr[al], toString(hc), toString(hd), fr[ao]], "_")], ":")), il]
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]
22102187 }
22112188 }
22122189 }
22152192
22162193
22172194
2218-@Callable(ei)
2219-func saveWarehouse (fn,aF) = if ((ei.caller != bE))
2195+@Callable(ek)
2196+func saveWarehouse (fp,aF) = if ((ek.caller != bE))
22202197 then throw("Access denied")
22212198 else {
2222- let fj = aE(aF)
2223- let fo = split_4C(fn, ":")
2224- if ((size(fo) != 5))
2199+ let fl = aE(aF)
2200+ let fq = split_4C(fp, ":")
2201+ if ((size(fq) != 5))
22252202 then throw("warehouse string should contain 4 ':' separators")
22262203 else {
2227- let iY = split(fo[ak], "_")[al]
2228- let hc = eV(fo)
2229- let iZ = eT(fo[ag])
2230- let hd = ((iZ - parseIntValue(iY)) - hc)
2231- let ja = makeString_2C([fo[ag], fo[ah], fo[ai], fo[aj], makeString([iY, toString(hc), toString(hd), toString(iZ)], "_")], ":")
2232- $Tuple2([StringEntry(fj, ja)], ja)
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)
22332210 }
22342211 }
22352212
22362213
22372214
2238-@Callable(ei)
2239-func fixWarehouseFormat (aF) = if ((ei.caller != bC))
2215+@Callable(ek)
2216+func fixWarehouseFormat (aF) = if ((ek.caller != bC))
22402217 then throw("Access denied")
22412218 else {
2242- let fj = aE(aF)
2243- let gN = value(assetInfo(fromBase58String(aF)))
2244- let fk = (bT(split(gN.description, "_")[bI]) / bj)
2245- let fl = valueOrElse(getInteger(ay(aF)), 0)
2246- let fo = fi(fj, fk, fl)
2247- let iY = bR(invoke(bE, "recalcLockedVolumeREADONLY", [aF, fo], nil))
2248- let hc = eV(fo)
2249- let iZ = eT(fo[ag])
2250- let hd = ((iZ - iY) - hc)
2251- let ja = makeString_2C([fo[ag], fo[ah], fo[ai], fo[aj], makeString([toString(iY), toString(hc), toString(hd), toString(iZ)], "_")], ":")
2252- $Tuple2([StringEntry(fj, ja)], ja)
2253- }
2254-
2255-
2256-
2257-@Callable(ei)
2258-func fixStakedPieces (bp) = if ((ei.caller != bC))
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))
22592236 then throw("Access denied")
22602237 else {
2261- let ib = if ((bp == ""))
2238+ let id = if ((bp == ""))
22622239 then 0
22632240 else {
2264- let hW = getString(bD, bM(bp))
2265- let hR = if (isDefined(hW))
2266- then split_51C(value(hW), "_")
2241+ let hY = getString(bD, bM(bp))
2242+ let hT = if (isDefined(hY))
2243+ then split_51C(value(hY), "_")
22672244 else nil
2268- func jb (cL,aF) = {
2269- let gN = value(assetInfo(fromBase58String(aF)))
2270- let bU = split(gN.description, "_")[bI]
2245+ func jd (cL,aF) = {
2246+ let gP = value(assetInfo(fromBase58String(aF)))
2247+ let bU = split(gP.description, "_")[bI]
22712248 (cL + bT(bU))
22722249 }
22732250
2274- let cN = hR
2251+ let cN = hT
22752252 let cO = size(cN)
22762253 let cP = 0
22772254 func cQ (cR,cS) = if ((cS >= cO))
22782255 then cR
2279- else jb(cR, cN[cS])
2256+ else jd(cR, cN[cS])
22802257
22812258 func cT (cR,cS) = if ((cS >= cO))
22822259 then cR
22842261
22852262 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)
22862263 }
2287- $Tuple2([IntegerEntry(bN(bp), ib)], ib)
2288- }
2289-
2290-
2291-
2292-@Callable(ei)
2293-func setCustomName (av,hT,aA) = {
2294- let il = ii(ei)
2295- if ((size(ei.payments) != 1))
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))
22962273 then throw("Exactly one payment required")
22972274 else {
2298- let im = value(ei.payments[0])
2299- if ((im.assetId != bb))
2275+ let io = value(ek.payments[0])
2276+ if ((io.assetId != bb))
23002277 then throw("Allowed USDT payment only!")
2301- else if ((im.amount != ca))
2278+ else if ((io.amount != ca))
23022279 then throw(("Payment should be " + toString(ca)))
2303- else if (contains(hT, "__"))
2304- then throw(("Name should not contain '__': " + hT))
2305- else if ((size(hT) > cb))
2280+ else if (contains(hV, "__"))
2281+ then throw(("Name should not contain '__': " + hV))
2282+ else if ((size(hV) > cb))
23062283 then throw(("Name too long, maxLength=" + toString(cb)))
23072284 else {
2308- let b = toString(ei.originCaller)
2309- let jc = {
2285+ let b = toString(ek.originCaller)
2286+ let je = {
23102287 let bc = aA
23112288 if (("ACCOUNT" == bc))
23122289 then {
2313- let jd = cv(hT)
2314- let je = getString(jd)
2315- if (isDefined(je))
2316- then throw(("Name already registered: " + hT))
2290+ let jf = cv(hV)
2291+ let jg = getString(jf)
2292+ if (isDefined(jg))
2293+ then throw(("Name already registered: " + hV))
23172294 else {
2318- let jf = aH(b)
2319- let jg = getString(jf)
2320- let jh = if (isDefined(jg))
2321- then [DeleteEntry(cv(value(jg)))]
2295+ let jh = aH(b)
2296+ let ji = getString(jh)
2297+ let jj = if (isDefined(ji))
2298+ then [DeleteEntry(cv(value(ji)))]
23222299 else nil
2323- (((jh :+ StringEntry(jf, hT)) :+ StringEntry(jd, b)) ++ hx(b, B)._1)
2300+ (((jj :+ StringEntry(jh, hV)) :+ StringEntry(jf, b)) ++ hz(b, B)._1)
23242301 }
23252302 }
23262303 else if (("LAND" == bc))
23272304 then {
2328- let gN = value(assetInfo(fromBase58String(av)))
2329- let gO = ax(av)
2330- if (!(isDefined(getInteger(gO))))
2331- then throw((gN.name + " is not staked"))
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"))
23322309 else {
2333- let gQ = valueOrErrorMessage(getString(au(av)), (("NFT " + gN.name) + " is orphaned"))
2334- if ((gQ != b))
2310+ let gS = valueOrErrorMessage(getString(au(av)), (("NFT " + gP.name) + " is orphaned"))
2311+ if ((gS != b))
23352312 then throw((P + " is not yours"))
23362313 else {
2337- let jd = cp(hT)
2338- let je = getString(jd)
2339- if (isDefined(je))
2340- then throw(("Name already registered: " + hT))
2314+ let jf = cp(hV)
2315+ let jg = getString(jf)
2316+ if (isDefined(jg))
2317+ then throw(("Name already registered: " + hV))
23412318 else {
2342- let ji = aw(av)
2343- let jg = getString(ji)
2344- let jh = if (isDefined(jg))
2345- then [DeleteEntry(cp(value(jg)))]
2319+ let jk = aw(av)
2320+ let ji = getString(jk)
2321+ let jj = if (isDefined(ji))
2322+ then [DeleteEntry(cp(value(ji)))]
23462323 else nil
2347- (((jh :+ StringEntry(ji, hT)) :+ StringEntry(jd, av)) ++ hx(b, B)._1)
2324+ (((jj :+ StringEntry(jk, hV)) :+ StringEntry(jf, av)) ++ hz(b, B)._1)
23482325 }
23492326 }
23502327 }
23512328 }
23522329 else if (("DUCK" == bc))
23532330 then {
2354- let gN = value(assetInfo(fromBase58String(av)))
2355- let gO = ax(av)
2356- if (if (!(isDefined(getInteger(gO))))
2331+ let gP = value(assetInfo(fromBase58String(av)))
2332+ let gQ = ax(av)
2333+ if (if (!(isDefined(getInteger(gQ))))
23572334 then true
23582335 else !(isDefined(getString(aN(b)))))
2359- then throw((gN.name + " is not staked"))
2336+ then throw((gP.name + " is not staked"))
23602337 else {
2361- let gQ = valueOrErrorMessage(getString(aM(av)), (("NFT " + gN.name) + " is orphaned"))
2362- if ((gQ != b))
2338+ let gS = valueOrErrorMessage(getString(aM(av)), (("NFT " + gP.name) + " is orphaned"))
2339+ if ((gS != b))
23632340 then throw((Q + " is not yours"))
23642341 else {
2365- let jd = cu(hT)
2366- let je = getString(jd)
2367- if (isDefined(je))
2368- then throw(("Name already registered: " + hT))
2342+ let jf = cu(hV)
2343+ let jg = getString(jf)
2344+ if (isDefined(jg))
2345+ then throw(("Name already registered: " + hV))
23692346 else {
2370- let ji = aG(av)
2371- let jg = getString(ji)
2372- let jh = if (isDefined(jg))
2373- then [DeleteEntry(cu(value(jg)))]
2347+ let jk = aG(av)
2348+ let ji = getString(jk)
2349+ let jj = if (isDefined(ji))
2350+ then [DeleteEntry(cu(value(ji)))]
23742351 else nil
2375- (((jh :+ StringEntry(ji, hT)) :+ StringEntry(jd, av)) ++ hr(av, B)._1)
2352+ (((jj :+ StringEntry(jk, hV)) :+ StringEntry(jf, av)) ++ ht(av, B)._1)
23762353 }
23772354 }
23782355 }
23792356 }
23802357 else throw("Unknown entity type")
23812358 }
2382- $Tuple2(((jc :+ ScriptTransfer(bE, im.amount, bb)) :+ il), 0)
2359+ $Tuple2(((je :+ ScriptTransfer(bE, io.amount, bb)) :+ in), 0)
23832360 }
23842361 }
23852362 }
23862363
23872364
23882365
2389-@Callable(ei)
2390-func setReferrals (jj,jk) = if ((ei.callerPublicKey != bX))
2366+@Callable(ek)
2367+func setReferrals (jl,jm) = if ((ek.callerPublicKey != bX))
23912368 then throw("Permission denied")
23922369 else {
2393- let il = ii(ei)
2394- if ((size(ei.payments) != 0))
2370+ let in = ik(ek)
2371+ if ((size(ek.payments) != 0))
23952372 then throw("No payments required")
2396- else if (!(isDefined(addressFromString(jj))))
2397- then throw(("Invalid address: " + jj))
2398- else if (!(isDefined(addressFromString(jk))))
2399- then throw(("Invalid address: " + jk))
2373+ else if (!(isDefined(addressFromString(jl))))
2374+ then throw(("Invalid address: " + jl))
2375+ else if (!(isDefined(addressFromString(jm))))
2376+ then throw(("Invalid address: " + jm))
24002377 else {
2401- let jl = cw()
2402- let jm = getString(jl)
2403- let jn = if (isDefined(jm))
2404- then split_4C(value(jm), "_")
2378+ let jn = cw()
2379+ let jo = getString(jn)
2380+ let jp = if (isDefined(jo))
2381+ then split_4C(value(jo), "_")
24052382 else nil
2406- if (containsElement(jn, jk))
2407- then throw((jk + " is not newbie (already has referrals)"))
2383+ if (containsElement(jp, jm))
2384+ then throw((jm + " is not newbie (already has referrals)"))
24082385 else {
2409- let hz = aI(jk)
2410- let hA = getString(hz)
2411- if (if (isDefined(hA))
2412- then isDefined(addressFromString(value(hA)))
2386+ let hB = aI(jm)
2387+ let hC = getString(hB)
2388+ if (if (isDefined(hC))
2389+ then isDefined(addressFromString(value(hC)))
24132390 else false)
2414- then throw(((jk + " already has refBy: ") + value(hA)))
2391+ then throw(((jm + " already has refBy: ") + value(hC)))
24152392 else {
2416- let jo = aL(jj)
2417- let jp = getString(jo)
2418- let jq = if (isDefined(jp))
2419- then split_4C(value(jp), "_")
2393+ let jq = aL(jl)
2394+ let jr = getString(jq)
2395+ let js = if (isDefined(jr))
2396+ then split_4C(value(jr), "_")
24202397 else nil
2421- if (containsElement(jq, jk))
2422- then throw((((jj + " already contains ") + jk) + " within referrals"))
2398+ if (containsElement(js, jm))
2399+ then throw((((jl + " already contains ") + jm) + " within referrals"))
24232400 else {
2424- let jr = makeString_2C((jq :+ jk), "_")
2425- let js = if (containsElement(jn, jj))
2426- then value(jm)
2427- else makeString_2C((jn :+ jj), "_")
2428- $Tuple2([StringEntry(hz, jj), StringEntry(jo, jr), StringEntry(jl, js), il], 0)
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)
24292406 }
24302407 }
24312408 }
24342411
24352412
24362413
2437-@Callable(ei)
2438-func distributePoints (jt,ju,jv,jw,jx) = {
2439- let il = ii(ei)
2440- if ((size(ei.payments) != 0))
2414+@Callable(ek)
2415+func distributePoints (jv,jw,jx,jy,jz) = {
2416+ let in = ik(ek)
2417+ if ((size(ek.payments) != 0))
24412418 then throw("No payments required")
24422419 else {
2443- let b = toString(ei.originCaller)
2420+ let b = toString(ek.originCaller)
24442421 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)
24482423 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"))
24532430 else {
2454- let jE = o(p)
2455- let jF = split(valueOrElse(getString(bD, jE), "0_0_0_0_0"), "_")
2456- let jG = (jz - jD)
2457- $Tuple2([IntegerEntry(jy, if ((0 > jG))
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))
24582435 then 0
2459- else jG), IntegerEntry(jA, if ((0 > jG))
2460- then (jB + jG)
2461- else jB), StringEntry(jE, makeString([toString((parseIntValue(jF[g]) + jt)), toString((parseIntValue(jF[h]) + ju)), toString((parseIntValue(jF[i]) + jv)), toString((parseIntValue(jF[j]) + jw)), toString((parseIntValue(jF[k]) + jx))], "_")), il], 0)
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)
24622439 }
24632440 }
24642441 }
24652442
24662443
24672444
2468-@Callable(ei)
2469-func splitByGlobalWeightsREADONLY (fy) = $Tuple2(nil, cU(fy))
2470-
2471-
2472-
2473-@Callable(ei)
2474-func splitByGlobalAndLocalWeightsREADONLY (jH,jI,el) = {
2475- let ee = ek(el)
2476- $Tuple2(nil, $Tuple2(cU(jH), cF(jI, ee)))
2477- }
2478-
2479-
2480-
2481-@Callable(ei)
2482-func getBackpackREADONLY (p) = $Tuple2(nil, makeString(eQ(aO(p)), ":"))
2483-
2484-
2485-
2486-@Callable(ei)
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)
24872464 func getWarehouseREADONLY (aF) = {
2488- let gN = value(assetInfo(fromBase58String(aF)))
2489- let fk = (bT(split(gN.description, "_")[bI]) / bj)
2490- let fl = valueOrElse(getInteger(ay(aF)), 0)
2491- $Tuple2(nil, makeString_2C(fi(aE(aF), fk, fl), ":"))
2492- }
2493-
2494-
2495-
2496-@Callable(ei)
2497-func saveLastTx () = if (if ((ei.caller != bG))
2498- then (ei.caller != bE)
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)
24992476 else false)
25002477 then throw("Access denied")
2501- else $Tuple2([ii(ei)], 42)
2502-
2503-
2504-
2505-@Callable(ei)
2506-func updateDuckStats (p,hs) = if ((ei.caller != bE))
2478+ else $Tuple2([ik(ek)], 42)
2479+
2480+
2481+
2482+@Callable(ek)
2483+func updateDuckStats (p,hu) = if ((ek.caller != bE))
25072484 then throw("Access denied")
2508- else hr(p, hs)
2509-
2510-
2511-
2512-@Callable(ei)
2513-func updateAccStats (b,hs) = if ((ei.caller != bE))
2485+ else ht(p, hu)
2486+
2487+
2488+
2489+@Callable(ek)
2490+func updateAccStats (b,hu) = if ((ek.caller != bE))
25142491 then throw("Access denied")
2515- else hx(b, hs)
2516-
2517-
2518-
2519-@Callable(ei)
2520-func equipDuck (jJ) = {
2521- let il = ii(ei)
2522- if ((size(ei.payments) != 0))
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))
25232500 then throw("No payments required")
25242501 else {
2525- let b = toString(ei.originCaller)
2502+ let b = toString(ek.originCaller)
25262503 let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
2527- let jK = t(p)
2528- let jL = split(valueOrElse(getString(jK), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
2529- let eR = aO(p)
2530- let fC = eQ(eR)
2531- let jM = split(jJ, "_")
2532- if ((size(jM) != l))
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))
25332510 then throw("Wrong equipment string")
25342511 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)
25422517 }
25432518 }
25442519 }
25452520
25462521
25472522
2548-@Callable(ei)
2549-func test () = if ((ei.caller != this))
2523+@Callable(ek)
2524+func test () = if ((ek.caller != this))
25502525 then throw("Access denied")
25512526 else {
25522527 let dq = du("")
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func a (b) = ("lastArbTimeUser_" + b)
55
66
77 let c = 100000000
88
99 let d = 3200
1010
1111 let e = 4000
1212
1313 let f = 3
1414
1515 let g = 0
1616
1717 let h = 1
1818
1919 let i = 2
2020
2121 let j = 3
2222
2323 let k = 4
2424
2525 let l = 6
2626
2727 let m = 2
2828
2929 let n = 2
3030
3131 func o (p) = ("duckChars_" + p)
3232
3333
3434 func q (p) = ("duckXP_" + p)
3535
3636
3737 func r (p) = ("duckLevel_" + p)
3838
3939
4040 func s (p) = ("duckFreePoints_" + p)
4141
4242
4343 func t (p) = ("duckEquipment_" + p)
4444
4545
4646 func u (b) = ("userXP_" + b)
4747
4848
4949 func v (b) = ("userLevel_" + b)
5050
5151
5252 func w (b) = ("userFreePoints_" + b)
5353
5454
5555 let x = 100000
5656
5757 let y = 50000
5858
5959 let z = 10000
6060
6161 let A = 100000
6262
6363 let B = 5000000
6464
6565 let C = 50000000
6666
6767 let D = 100000
6868
6969 let E = 10000000
7070
7171 let F = 10000000
7272
7373 let G = 10000
7474
7575 func H (I) = fraction(d, pow(I, 4, e, 4, 4, DOWN), c)
7676
7777
7878 func J (K) = (100 + K)
7979
8080
8181 func L (M,N) = {
8282 let O = H(N)
8383 [O, (f * (O - M))]
8484 }
8585
8686
8787 let P = "LAND"
8888
8989 let Q = "DUCK"
9090
9191 let R = "PRESALE"
9292
9393 let S = 6
9494
9595 let T = 3456000
9696
9797 let U = 86400000
9898
9999 let V = 10000000000
100100
101101 let W = "Africa_F_Africa"
102102
103103 let X = 39637
104104
105105 let Y = 10
106106
107107 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"]
108108
109109 let aa = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
110110
111111 let ab = 10000000
112112
113113 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"]
114114
115115 let ad = 6
116116
117117 let ae = 10
118118
119119 let af = 10
120120
121121 let ag = 0
122122
123123 let ah = 1
124124
125125 let ai = 2
126126
127127 let aj = 3
128128
129129 let ak = 4
130130
131131 let al = 0
132132
133133 let am = 1
134134
135135 let an = 2
136136
137137 let ao = 3
138138
139139 let ap = 0
140140
141141 let aq = 1
142142
143143 let ar = 2
144144
145145 let as = 3
146146
147147 func at (b) = ("lastTxIdByUser_" + b)
148148
149149
150150 func au (av) = ("nftOwner_" + av)
151151
152152
153153 func aw (av) = ("landCustomNameByAssetId_" + av)
154154
155155
156156 func ax (av) = ("stakedTime_" + av)
157157
158158
159159 func ay (av) = ("infraLevel_" + av)
160160
161161
162162 func az (aA,av) = makeString(["landArtStatus", aA, av], "_")
163163
164164
165165 func aB (aC,av,aD) = ((((("stakedTimeByTypeAssetIdAndOwner_" + aC) + "_") + av) + "_") + aD)
166166
167167
168168 func aE (aF) = ("wareHouse_" + aF)
169169
170170
171171 func aG (av) = ("duckCustomNameByAssetId_" + av)
172172
173173
174174 func aH (b) = ("accountCustomNameByAddr_" + b)
175175
176176
177177 func aI (b) = ("accRefBy_" + b)
178178
179179
180180 func aJ (p) = ("onboardArtActivatedOnDuck_" + p)
181181
182182
183183 func aK (b) = ("onboardArtActivatedDuckBy_" + b)
184184
185185
186186 func aL (b) = ("accReferrals_" + b)
187187
188188
189189 func aM (av) = ("duckOwner_" + av)
190190
191191
192192 func aN (aD) = ("stakedDuckByOwner_" + aD)
193193
194194
195195 func aO (p) = ("backPack_" + p)
196196
197197
198198 func aP (p) = ("duckLocation_" + p)
199199
200200
201201 func aQ (p) = ("duckHealth_" + p)
202202
203203
204204 func aR () = "contractsBlocked"
205205
206206
207207 func aS (aT) = ("%s%s__userGwlReleaseTime__" + aT)
208208
209209
210210 func aU () = "emergencyWarehouseProducts"
211211
212212
213213 let aV = 1
214214
215215 let aW = 2
216216
217217 func aX (aY) = (parseIntValue(aY[ad]) * ab)
218218
219219
220220 let aZ = true
221221
222222 let ba = take(drop(this.bytes, 1), 1)
223223
224224 let bb = {
225225 let bc = ba
226226 if ((base58'2W' == bc))
227227 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
228228 else if ((base58'2T' == bc))
229229 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
230230 else throw("Unknown chain")
231231 }
232232
233233 let bd = {
234234 let bc = ba
235235 if ((base58'2W' == bc))
236236 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
237237 else if ((base58'2T' == bc))
238238 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
239239 else throw("Unknown chain")
240240 }
241241
242242 let be = {
243243 let bc = ba
244244 if ((base58'2W' == bc))
245245 then 10000000000
246246 else if ((base58'2T' == bc))
247247 then 100000000
248248 else throw("Unknown chain")
249249 }
250250
251251 let bf = {
252252 let bc = ba
253253 if ((base58'2W' == bc))
254254 then 600000
255255 else if ((base58'2T' == bc))
256256 then 60000
257257 else throw("Unknown chain")
258258 }
259259
260260 let bg = "__"
261261
262262 let bh = 1000000
263263
264264 let bi = 100000000
265265
266266 let bj = 25
267267
268268 let bk = 100
269269
270270 let bl = 225
271271
272272 let bm = 400
273273
274274 let bn = 625
275275
276276 func bo (bp,bq) = valueOrErrorMessage(getString(bp, bq), makeString(["mandatory ", toString(bp), ".", bq, " is not defined"], ""))
277277
278278
279279 let br = 1
280280
281281 let bs = 2
282282
283283 let bt = 3
284284
285285 let bu = 4
286286
287287 func bv () = "%s__restConfig"
288288
289289
290290 func bw () = "%s__restAddr"
291291
292292
293293 func bx (by) = split_4C(bo(by, bv()), bg)
294294
295295
296296 func bz (bA,bB) = valueOrErrorMessage(addressFromString(bA[bB]), ("Rest cfg doesn't contain address at index " + toString(bB)))
297297
298298
299299 let bC = addressFromStringValue(valueOrElse(getString(this, bw()), bd))
300300
301301 let bA = bx(bC)
302302
303303 let bD = bz(bA, br)
304304
305305 let bE = bz(bA, bs)
306306
307307 let bF = bz(bA, bt)
308308
309309 let bG = bz(bA, bu)
310310
311311 let bH = 0
312312
313313 let bI = 1
314314
315315 let bJ = 2
316316
317317 let bK = 3
318318
319319 func bL () = "resTypesProportions"
320320
321321
322322 func bM (aD) = ("stakedLandsByOwner_" + aD)
323323
324324
325325 func bN (aD) = ("stakedPiecesByOwner_" + aD)
326326
327327
328328 func bO (bP) = {
329329 let bc = bP
330330 if ($isInstanceOf(bc, "String"))
331331 then {
332332 let bQ = bc
333333 bQ
334334 }
335335 else throw("fail to cast into String")
336336 }
337337
338338
339339 func bR (bP) = {
340340 let bc = bP
341341 if ($isInstanceOf(bc, "Int"))
342342 then {
343343 let bS = bc
344344 bS
345345 }
346346 else throw("fail to cast into Int")
347347 }
348348
349349
350350 func bT (bU) = {
351351 let bc = bU
352352 if (("S" == bc))
353353 then bj
354354 else if (("M" == bc))
355355 then bk
356356 else if (("L" == bc))
357357 then bl
358358 else if (("XL" == bc))
359359 then bm
360360 else if (("XXL" == bc))
361361 then bn
362362 else throw("Unknown land size")
363363 }
364364
365365
366366 let bV = {
367367 let bc = ba
368368 if ((base58'2W' == bc))
369369 then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv")
370370 else if ((base58'2T' == bc))
371371 then this
372372 else throw("Unknown chain")
373373 }
374374
375375 let bW = {
376376 let bc = ba
377377 if ((base58'2W' == bc))
378378 then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb")
379379 else if ((base58'2T' == bc))
380380 then this
381381 else throw("Unknown chain")
382382 }
383383
384384 let bX = base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
385385
386386 let bY = [30, 60, 120]
387387
388388 let bZ = 300000
389389
390390 let ca = 5000000
391391
392392 let cb = 50
393393
394394 let cc = 10000000
395395
396396 let cd = {
397397 let bc = ba
398398 if ((base58'2W' == bc))
399399 then 252289527462
400400 else if ((base58'2T' == bc))
401401 then 2522895274
402402 else throw("Unknown chain")
403403 }
404404
405405 let ce = {
406406 let bc = ba
407407 if ((base58'2W' == bc))
408408 then 250000000
409409 else if ((base58'2T' == bc))
410410 then 250000000
411411 else throw("Unknown chain")
412412 }
413413
414414 let cf = toBigInt(5)
415415
416416 let cg = toBigInt(20)
417417
418418 let ch = toBigInt((20 * 20))
419419
420420 let ci = toBigInt(((20 * 20) * 20))
421421
422422 let cj = toBigInt((((20 * 20) * 20) * 20))
423423
424424 let ck = toBigInt(((((20 * 20) * 20) * 20) * 20))
425425
426426 let cl = 500
427427
428428 func cm () = "nextLandNum"
429429
430430
431431 func cn (co) = ("landToAsset_" + co)
432432
433433
434434 func cp (cq) = ("landByCustomName_" + cq)
435435
436436
437437 func cr (av,aD) = ((("infraLevelByAssetIdAndOwner_" + av) + "_") + aD)
438438
439439
440440 func cs (aA,av,aD) = makeString(["landArtStatusByTypeAssetIdAndOwner", aA, av, aD], "_")
441441
442442
443443 func ct (co) = ("landOwner_" + co)
444444
445445
446446 func cu (cq) = ("duckByCustomName_" + cq)
447447
448448
449449 func cv (cq) = ("accountByCustomName_" + cq)
450450
451451
452452 func cw () = "oldiesList"
453453
454454
455455 let cx = 0
456456
457457 let cy = 1
458458
459459 let cz = 2
460460
461461 let cA = 0
462462
463463 let cB = 5
464464
465465 let cC = 6
466466
467467 let cD = 7
468468
469469 func cE (co,bU) = ((P + co) + bU)
470470
471471
472472 func cF (cG,cH) = {
473473 let cI = (((((cH[0] + cH[1]) + cH[2]) + cH[3]) + cH[4]) + cH[5])
474474 if ((0 >= cI))
475475 then throw("Zero weights sum")
476476 else {
477477 let cJ = fraction(cG, bh, cI)
478478 func cK (cL,cM) = (cL :+ fraction(cM, cJ, bh))
479479
480480 let cN = cH
481481 let cO = size(cN)
482482 let cP = nil
483483 func cQ (cR,cS) = if ((cS >= cO))
484484 then cR
485485 else cK(cR, cN[cS])
486486
487487 func cT (cR,cS) = if ((cS >= cO))
488488 then cR
489489 else throw("List size exceeds 6")
490490
491491 cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
492492 }
493493 }
494494
495495
496496 func cU (cG) = {
497497 let cV = split(value(getString(bL())), "_")
498498 if ((size(cV) != S))
499499 then throw("Wrong proportions data")
500500 else {
501501 let cW = [parseIntValue(cV[0]), parseIntValue(cV[1]), parseIntValue(cV[2]), parseIntValue(cV[3]), parseIntValue(cV[4]), parseIntValue(cV[5])]
502502 cF(cG, cW)
503503 }
504504 }
505505
506506
507507 func cX (cY,cZ,da) = {
508508 let db = cU(da)
509509 func dc (cL,bB) = {
510510 let dd = (parseIntValue(cZ[bB]) - db[bB])
511511 if ((0 > dd))
512512 then throw(((((("Not enough material idx=" + toString(bB)) + ", you have ") + cZ[bB]) + ", but need ") + toString(db[bB])))
513513 else (cL :+ toString(dd))
514514 }
515515
516516 if (cY)
517517 then {
518518 let cN = [0, 1, 2, 3, 4, 5]
519519 let cO = size(cN)
520520 let cP = nil
521521 func cQ (cR,cS) = if ((cS >= cO))
522522 then cR
523523 else dc(cR, cN[cS])
524524
525525 func cT (cR,cS) = if ((cS >= cO))
526526 then cR
527527 else throw("List size exceeds 6")
528528
529529 cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
530530 }
531531 else cZ
532532 }
533533
534534
535535 func de (df,dg) = if ((dg == ""))
536536 then df
537537 else {
538538 let dh = if ((df == ""))
539539 then nil
540540 else split(df, "_")
541541 func di (cL,dj) = {
542542 let dk = cL._1
543543 func dl (dm,dn) = {
544544 let do = split(dn, ",")
545545 if ((size(do) != 2))
546546 then throw("Incorrect format, should be index,amount")
547547 else {
548548 let bB = parseIntValue(do[0])
549549 if (if ((0 > bB))
550550 then true
551551 else (bB >= size(ac)))
552552 then throw("Unknown product idx")
553553 else if ((bB != dk))
554554 then dm
555555 else {
556556 let dp = parseIntValue(do[1])
557557 if ((0 >= dp))
558558 then throw("Pass only positive amounts")
559559 else (dm + dp)
560560 }
561561 }
562562 }
563563
564564 let dq = {
565565 let cN = split(dg, "_")
566566 let cO = size(cN)
567567 let cP = 0
568568 func cQ (cR,cS) = if ((cS >= cO))
569569 then cR
570570 else dl(cR, cN[cS])
571571
572572 func cT (cR,cS) = if ((cS >= cO))
573573 then cR
574574 else throw("List size exceeds 10")
575575
576576 cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
577577 }
578578 let dr = if ((size(dh) > dk))
579579 then parseIntValue(dh[dk])
580580 else 0
581581 let ds = if ((dr >= dq))
582582 then (dr - dq)
583583 else throw(((((("You have " + toString(dr)) + " of ") + Z[dk]) + ", but tried to use ") + toString(dq)))
584584 $Tuple2((dk + 1), (cL._2 :+ toString(ds)))
585585 }
586586
587587 let dt = {
588588 let cN = ac
589589 let cO = size(cN)
590590 let cP = $Tuple2(0, nil)
591591 func cQ (cR,cS) = if ((cS >= cO))
592592 then cR
593593 else di(cR, cN[cS])
594594
595595 func cT (cR,cS) = if ((cS >= cO))
596596 then cR
597597 else throw("List size exceeds 50")
598598
599599 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)
600600 }
601601 makeString(dt._2, "_")
602602 }
603603
604604
605605 func du (dv) = {
606606 let dh = if ((dv == ""))
607607 then nil
608608 else split(dv, "_")
609609 func dw (cL,aY) = {
610610 let dk = (size(cL) / 8)
611611 let dr = if ((size(dh) > dk))
612612 then parseIntValue(dh[dk])
613613 else 0
614614 (cL + toBytes(dr))
615615 }
616616
617617 let cN = ac
618618 let cO = size(cN)
619619 let cP = base58''
620620 func cQ (cR,cS) = if ((cS >= cO))
621621 then cR
622622 else dw(cR, cN[cS])
623623
624624 func cT (cR,cS) = if ((cS >= cO))
625625 then cR
626626 else throw("List size exceeds 50")
627627
628628 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)
629629 }
630630
631631
632632 func dx (dy) = {
633633 func dz (cL,aY) = {
634634 let dk = size(cL)
635635 let dA = take(drop(dy, (8 * dk)), 8)
636636 (cL :+ toString(toInt(dA)))
637637 }
638638
639639 makeString({
640640 let cN = ac
641641 let cO = size(cN)
642642 let cP = nil
643643 func cQ (cR,cS) = if ((cS >= cO))
644644 then cR
645645 else dz(cR, cN[cS])
646646
647647 func cT (cR,cS) = if ((cS >= cO))
648648 then cR
649649 else throw("List size exceeds 50")
650650
651651 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)
652652 }, "_")
653653 }
654654
655655
656656 func dB (dC,dh,dD,dE,dF,dG) = {
657657 let do = split(dC, ":")
658658 if ((size(do) != 2))
659659 then throw("Incorrect format, should be index:amount")
660660 else {
661661 let dH = parseIntValue(do[0])
662662 let dI = parseIntValue(do[1])
663663 if (if ((0 > dH))
664664 then true
665665 else (dH >= size(ac)))
666666 then throw("Unknown product idx")
667667 else if ((0 > dI))
668668 then throw("Count can't be negative")
669669 else if ((dI == 0))
670670 then $Tuple2(dh, false)
671671 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")
689690 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")
694694 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)
706701 }
707702 }
708703 }
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)
715704 }
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+ }
733710 }
734711 }
735712 }
736713
737714
738-func dQ (dR,dS,dD,dE,dF) = if ((dR != ""))
715+func dR (dS,dT,dD,dE,dF) = if ((dS != ""))
739716 then {
740- let dT = split(dR, ",")
741- if ((size(dT) > n))
717+ let dU = split(dS, ",")
718+ if ((size(dU) > n))
742719 then throw("Wrong slots format")
743720 else {
744- let dU = dT[0]
745- let dV = if ((size(dT) > 1))
746- then dT[1]
721+ let dV = dU[0]
722+ let dW = if ((size(dU) > 1))
723+ then dU[1]
747724 else ""
748- if (if ((dU == ""))
749- then (dV == "")
725+ if (if ((dV == ""))
726+ then (dW == "")
750727 else false)
751- then dS
728+ then dT
752729 else {
753- let dW = if ((dU != ""))
754- then dB(dU, dS, dD, dE, dF, 0)
755- else $Tuple2(dS, false)
756- if ((dV != ""))
757- then if (dW._2)
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)
758735 then throw("Big item already occupies slot")
759- else dB(dV, dW._1, dD, dE, dF, 1)._1
760- else dW._1
736+ else dB(dW, dX._1, dD, dE, dF, 1)._1
737+ else dX._1
761738 }
762739 }
763740 }
764- else dS
765-
766-
767-func dX (dY,dh,dD) = {
768- func dE (cL,dZ) = {
741+ else dT
742+
743+
744+func dY (dZ,ea,dD) = {
745+ func dE (cL,eb) = {
769746 let dk = cL._1
770- let dF = split(dZ, ";")
747+ let dF = split(eb, ";")
771748 if ((size(dF) != m))
772749 then throw("Wrong segment format")
773750 else {
774- let ea = dF[0]
751+ let ec = dF[0]
775752 let dq = dF[1]
776- if (if ((ea == ""))
753+ if (if ((ec == ""))
777754 then (dq == "")
778755 else false)
779756 then $Tuple2((dk + 1), cL._2)
780757 else {
781- let eb = dQ(ea, cL._2, dD, dk, 0)
782- $Tuple2((dk + 1), dQ(dq, eb, dD, dk, 1))
758+ let ed = dR(ec, cL._2, dD, dk, 0)
759+ $Tuple2((dk + 1), dR(dq, ed, dD, dk, 1))
783760 }
784761 }
785762 }
786763
787-( let cN = dY
764+( let cN = dZ
788765 let cO = size(cN)
789- let cP = $Tuple2(0, dh)
766+ let cP = $Tuple2(0, ea)
790767 func cQ (cR,cS) = if ((cS >= cO))
791768 then cR
792769 else dE(cR, cN[cS])
793770
794771 func cT (cR,cS) = if ((cS >= cO))
795772 then cR
796773 else throw("List size exceeds 6")
797774
798775 cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6))._2
799776 }
800777
801778
802-func ec (ed,ee,ef,eg) = if ((size(ed) != S))
779+func ee (ef,eg,eh,ei) = if ((size(ef) != S))
803780 then throw("Wrong proportions data")
804781 else {
805- func eh (cL,ei) = {
806- let dd = (parseIntValue(ed[ei]) + ((eg * ee[ei]) * ef))
782+ func ej (cL,ek) = {
783+ let dd = (parseIntValue(ef[ek]) + ((ei * eg[ek]) * eh))
807784 if ((0 > dd))
808- then throw(((((((("Panic! Pieces of type=" + toString(ei)) + ", sign=") + toString(eg)) + ", terrainCounts[i]=") + toString(ee[ei])) + ", landSizeIndex=") + toString(ef)))
785+ then throw(((((((("Panic! Pieces of type=" + toString(ek)) + ", sign=") + toString(ei)) + ", terrainCounts[i]=") + toString(eg[ek])) + ", landSizeIndex=") + toString(eh)))
809786 else (cL :+ toString(dd))
810787 }
811788
812789 let cW = {
813790 let cN = [0, 1, 2, 3, 4, 5]
814791 let cO = size(cN)
815792 let cP = nil
816793 func cQ (cR,cS) = if ((cS >= cO))
817794 then cR
818- else eh(cR, cN[cS])
795+ else ej(cR, cN[cS])
819796
820797 func cT (cR,cS) = if ((cS >= cO))
821798 then cR
822799 else throw("List size exceeds 6")
823800
824801 cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
825802 }
826803 makeString(cW, "_")
827804 }
828805
829806
830-func ej (ee,ef,eg) = {
831- let ed = split(valueOrElse(getString(bL()), "0_0_0_0_0_0"), "_")
832- ec(ed, ee, ef, eg)
833- }
834-
835-
836-func ek (el) = [(size(split(el, "A")) - 1), (size(split(el, "B")) - 1), (size(split(el, "C")) - 1), (size(split(el, "D")) - 1), (size(split(el, "E")) - 1), (size(split(el, "F")) - 1)]
837-
838-
839-func em (en,ee,eo,ef,ep) = {
840- func eq (cL,ei) = {
841- let er = ((fraction(eo, ep, U) * ee[ei]) * ef)
842- (cL :+ toString((parseIntValue(en[ei]) + er)))
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)))
843820 }
844821
845822 let cW = {
846823 let cN = [0, 1, 2, 3, 4, 5]
847824 let cO = size(cN)
848825 let cP = nil
849826 func cQ (cR,cS) = if ((cS >= cO))
850827 then cR
851- else eq(cR, cN[cS])
828+ else es(cR, cN[cS])
852829
853830 func cT (cR,cS) = if ((cS >= cO))
854831 then cR
855832 else throw("List size exceeds 6")
856833
857834 cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
858835 }
859836 makeString(cW, "_")
860837 }
861838
862839
863-func es (ee,eo,ef,ep) = {
864- func eq (cL,ei) = {
865- let er = ((fraction(eo, ep, U) * ee[ei]) * ef)
866- $Tuple2((cL._1 :+ er), (cL._2 + er))
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))
867844 }
868845
869846 let cN = [0, 1, 2, 3, 4, 5]
870847 let cO = size(cN)
871848 let cP = $Tuple2(nil, 0)
872849 func cQ (cR,cS) = if ((cS >= cO))
873850 then cR
874- else eq(cR, cN[cS])
851+ else es(cR, cN[cS])
875852
876853 func cT (cR,cS) = if ((cS >= cO))
877854 then cR
878855 else throw("List size exceeds 6")
879856
880857 cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
881858 }
882859
883860
884-func et (eu,ev,ew,ex) = {
885- let ey = ew._1
886- let ez = ew._2
887- if ((ez == 0))
888- then $Tuple2(makeString(eu, "_"), makeString(ev, "_"))
889- else if ((ex >= ez))
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))
890867 then {
891- func eA (cL,ei) = (cL :+ toString((parseIntValue(eu[ei]) + ey[ei])))
868+ func eC (cL,ek) = (cL :+ toString((parseIntValue(ew[ek]) + eA[ek])))
892869
893870 let cW = {
894871 let cN = [0, 1, 2, 3, 4, 5]
895872 let cO = size(cN)
896873 let cP = nil
897874 func cQ (cR,cS) = if ((cS >= cO))
898875 then cR
899- else eA(cR, cN[cS])
876+ else eC(cR, cN[cS])
900877
901878 func cT (cR,cS) = if ((cS >= cO))
902879 then cR
903880 else throw("List size exceeds 6")
904881
905882 cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
906883 }
907- $Tuple2(makeString(cW, "_"), makeString(ev, "_"))
884+ $Tuple2(makeString(cW, "_"), makeString(ex, "_"))
908885 }
909886 else {
910- func eB (cL,ei) = {
911- let eC = fraction(ey[ei], ex, ez)
912- $Tuple2((cL._1 :+ toString((parseIntValue(eu[ei]) + eC))), (cL._2 :+ toString(((parseIntValue(ev[ei]) + ey[ei]) - eC))))
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))))
913890 }
914891
915892 let cW = {
916893 let cN = [0, 1, 2, 3, 4, 5]
917894 let cO = size(cN)
918895 let cP = $Tuple2(nil, nil)
919896 func cQ (cR,cS) = if ((cS >= cO))
920897 then cR
921- else eB(cR, cN[cS])
898+ else eD(cR, cN[cS])
922899
923900 func cT (cR,cS) = if ((cS >= cO))
924901 then cR
925902 else throw("List size exceeds 6")
926903
927904 cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
928905 }
929906 $Tuple2(makeString(cW._1, "_"), makeString(cW._2, "_"))
930907 }
931908 }
932909
933910
934-func eD (eE) = if ((eE >= toBigInt(0)))
935- then eE
936- else -(eE)
937-
938-
939-let eF = [[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]]
940-
941-func eG (bS,eH) = {
942- let eI = toInt((bS % cg))
943- let eJ = if ((eH[0] > eI))
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))
944921 then "A"
945- else if ((eH[1] > eI))
922+ else if ((eJ[1] > eK))
946923 then "B"
947- else if ((eH[2] > eI))
924+ else if ((eJ[2] > eK))
948925 then "C"
949- else if ((eH[3] > eI))
926+ else if ((eJ[3] > eK))
950927 then "D"
951- else if ((eH[4] > eI))
928+ else if ((eJ[4] > eK))
952929 then "E"
953930 else "F"
954- eJ
955- }
956-
957-
958-func eK (eL,eM) = {
959- let eN = eF[eM]
960- func eO (cL,cM) = $Tuple2((((((cL._1 + eG(cL._2, eN)) + eG((cL._2 / cg), eN)) + eG((cL._2 / ch), eN)) + eG((cL._2 / ci), eN)) + eG((cL._2 / cj), eN)), (cL._2 / ck))
961-
962- let eP = {
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 = {
963940 let cN = [1, 2, 3, 4, 5]
964941 let cO = size(cN)
965- let cP = $Tuple2("", (eL / cf))
942+ let cP = $Tuple2("", (eN / cf))
966943 func cQ (cR,cS) = if ((cS >= cO))
967944 then cR
968- else eO(cR, cN[cS])
945+ else eQ(cR, cN[cS])
969946
970947 func cT (cR,cS) = if ((cS >= cO))
971948 then cR
972949 else throw("List size exceeds 5")
973950
974951 cT(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5)
975952 }
976- eP._1
977- }
978-
979-
980-func eQ (eR) = {
981- let eS = split(valueOrElse(getString(eR), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
982-[toString(valueOrElse(parseInt(eS[ap]), 0)), if ((size(split(eS[aq], "_")) == S))
983- then eS[aq]
984- else "0_0_0_0_0_0", if ((size(split(eS[ar], "_")) == S))
985- then eS[ar]
986- else "0_0_0_0_0_0", eS[as]]
987- }
988-
989-
990-func eT (eU) = {
991- let do = split(eU, "_")
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, "_")
992969 ((V * (parseIntValue(do[1]) + 1)) * parseIntValue(do[0]))
993970 }
994971
995972
996-func eV (eW) = {
997- let eX = eW[aj]
998- func eY (cL,dj) = (cL + parseIntValue(dj))
999-
1000- func eZ (cL,dj) = {
973+func eX (eY) = {
974+ let eZ = eY[aj]
975+ func fa (cL,dj) = (cL + parseIntValue(dj))
976+
977+ func fb (cL,dj) = {
1001978 let bB = cL._1
1002- let fa = (((parseIntValue(dj) + af) - 1) / af)
1003- $Tuple2((bB + 1), (cL._2 + (fa * bi)))
1004- }
1005-
1006- let fb = {
1007- let cN = split(eW[ah], "_")
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], "_")
1008985 let cO = size(cN)
1009986 let cP = 0
1010987 func cQ (cR,cS) = if ((cS >= cO))
1011988 then cR
1012- else eY(cR, cN[cS])
989+ else fa(cR, cN[cS])
1013990
1014991 func cT (cR,cS) = if ((cS >= cO))
1015992 then cR
1016993 else throw("List size exceeds 6")
1017994
1018995 cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
1019996 }
1020- let fc = {
1021- let cN = split(eW[ai], "_")
997+ let fe = {
998+ let cN = split(eY[ai], "_")
1022999 let cO = size(cN)
10231000 let cP = 0
1024- func fd (cR,cS) = if ((cS >= cO))
1001+ func ff (cR,cS) = if ((cS >= cO))
10251002 then cR
1026- else eY(cR, cN[cS])
1027-
1028- func fe (cR,cS) = if ((cS >= cO))
1003+ else fa(cR, cN[cS])
1004+
1005+ func fg (cR,cS) = if ((cS >= cO))
10291006 then cR
10301007 else throw("List size exceeds 6")
10311008
1032- fe(fd(fd(fd(fd(fd(fd(cP, 0), 1), 2), 3), 4), 5), 6)
1033- }
1034- let ff = if ((eX == ""))
1009+ fg(ff(ff(ff(ff(ff(ff(cP, 0), 1), 2), 3), 4), 5), 6)
1010+ }
1011+ let fh = if ((eZ == ""))
10351012 then 0
1036- else ( let cN = split_4C(eX, "_")
1013+ else ( let cN = split_4C(eZ, "_")
10371014 let cO = size(cN)
10381015 let cP = $Tuple2(0, 0)
1039- func fg (cR,cS) = if ((cS >= cO))
1016+ func fi (cR,cS) = if ((cS >= cO))
10401017 then cR
1041- else eZ(cR, cN[cS])
1042-
1043- func fh (cR,cS) = if ((cS >= cO))
1018+ else fb(cR, cN[cS])
1019+
1020+ func fj (cR,cS) = if ((cS >= cO))
10441021 then cR
10451022 else throw("List size exceeds 50")
10461023
1047- fh(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(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
1048- ((fb + fc) + ff)
1049- }
1050-
1051-
1052-func fi (fj,fk,fl) = {
1053- let eU = ((toString(fk) + "_") + toString(fl))
1054- let fm = eT(eU)
1055- let fn = valueOrElse(getString(fj), (eU + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
1056- let fo = split_4C(fn, ":")
1057- let fp = eV(fo)
1058- let fq = if ((5 > size(fo)))
1059- then makeString(["0", toString(fp), toString((fm - fp)), toString(fm)], "_")
1060- else {
1061- let fr = split(fo[ak], "_")
1062- let fs = parseIntValue(fr[al])
1063- let ft = if ((size(fr) > 1))
1064- then parseIntValue(fr[am])
1065- else fp
1066- makeString([toString(fs), toString(ft), toString(((fm - fs) - ft)), toString(fm)], "_")
1067- }
1068-[fo[ag], if ((size(split(fo[ah], "_")) == S))
1069- then fo[ah]
1070- else "0_0_0_0_0_0", if ((size(split(fo[ai], "_")) == S))
1071- then fo[ai]
1072- else "0_0_0_0_0_0", fo[aj], fq]
1073- }
1074-
1075-
1076-func fu (eW) = {
1077- let fv = eV(eW)
1078- let fw = parseIntValue(split(eW[ak], "_")[al])
1079- ((eT(eW[ag]) - fv) - fw)
1080- }
1081-
1082-
1083-func fx (fy,fz) = {
1084- let fa = if ((fy >= 0))
1085- then (((fy + fz) - 1) / fz)
1086- else -((((-(fy) + fz) - 1) / fz))
1087- (fa * bi)
1088- }
1089-
1090-
1091-func fA (fB,eW,fC) = if ((size(fB) != 3))
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))
10921069 then throw("cargoListStr should contain exactly 2 ':' separators")
10931070 else {
1094- let fD = split(fB[0], "_")
1095- let fE = split(fB[1], "_")
1096- let fF = if ((fB[2] == ""))
1071+ let fF = split(fD[0], "_")
1072+ let fG = split(fD[1], "_")
1073+ let fH = if ((fD[2] == ""))
10971074 then nil
1098- else split(fB[2], "_")
1099- if ((size(fD) != S))
1075+ else split(fD[2], "_")
1076+ if ((size(fF) != S))
11001077 then throw("All 6 resources should be passed")
1101- else if ((size(fE) != S))
1078+ else if ((size(fG) != S))
11021079 then throw("All 6 materials should be passed")
11031080 else {
1104- let ex = fu(eW)
1105- let fG = split(eW[ah], "_")
1106- let fH = split(eW[ai], "_")
1107- let fI = if ((eW[aj] == ""))
1081+ let ez = fw(eY)
1082+ let fI = split(eY[ah], "_")
1083+ let fJ = split(eY[ai], "_")
1084+ let fK = if ((eY[aj] == ""))
11081085 then nil
1109- else split(eW[aj], "_")
1110- let ev = split(fC[aq], "_")
1111- let fJ = split(fC[ar], "_")
1112- let fK = if ((fC[as] == ""))
1086+ else split(eY[aj], "_")
1087+ let ex = split(fE[aq], "_")
1088+ let fL = split(fE[ar], "_")
1089+ let fM = if ((fE[as] == ""))
11131090 then nil
1114- else split(fC[as], "_")
1115- func fL (cL,dj) = {
1116- let ei = cL._1
1117- let fM = parseIntValue(dj)
1118- let fN = parseIntValue(fG[ei])
1119- let fO = parseIntValue(ev[ei])
1120- if ((fM == 0))
1121- then $Tuple4((ei + 1), (cL._2 :+ fG[ei]), (cL._3 :+ ev[ei]), cL._4)
1122- else if ((fM > 0))
1123- then if ((fM > fO))
1124- then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString(fO)) + " available"))
1125- else $Tuple4((ei + 1), (cL._2 :+ toString((fN + fM))), (cL._3 :+ toString((fO - fM))), (cL._4 + fM))
1126- else if ((-(fM) > fN))
1127- then throw((((("Attempt to take " + toString(-(fM))) + " from warehouse, but only ") + toString(fN)) + " available"))
1128- else $Tuple4((ei + 1), (cL._2 :+ toString((fN + fM))), (cL._3 :+ toString((fO - fM))), (cL._4 + fM))
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))
11291106 }
11301107
11311108 let cW = {
1132- let cN = fD
1109+ let cN = fF
11331110 let cO = size(cN)
11341111 let cP = $Tuple4(0, nil, nil, 0)
11351112 func cQ (cR,cS) = if ((cS >= cO))
11361113 then cR
1137- else fL(cR, cN[cS])
1114+ else fN(cR, cN[cS])
11381115
11391116 func cT (cR,cS) = if ((cS >= cO))
11401117 then cR
11411118 else throw("List size exceeds 6")
11421119
11431120 cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
11441121 }
1145- func fP (cL,dj) = {
1146- let ei = cL._1
1147- let fM = parseIntValue(dj)
1148- let fQ = parseIntValue(fH[ei])
1149- let fR = parseIntValue(fJ[ei])
1150- if ((fM == 0))
1151- then $Tuple4((ei + 1), (cL._2 :+ fH[ei]), (cL._3 :+ fJ[ei]), cL._4)
1152- else if ((fM > 0))
1153- then if ((fM > fR))
1154- then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString(fR)) + " available"))
1155- else $Tuple4((ei + 1), (cL._2 :+ toString((fQ + fM))), (cL._3 :+ toString((fR - fM))), (cL._4 + fM))
1156- else if ((-(fM) > fQ))
1157- then throw((((("Attempt to take " + toString(-(fM))) + " from warehouse, but only ") + toString(fQ)) + " available"))
1158- else $Tuple4((ei + 1), (cL._2 :+ toString((fQ + fM))), (cL._3 :+ toString((fR - fM))), (cL._4 + fM))
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))
11591136 }
11601137
1161- let ea = {
1162- let cN = fE
1138+ let ec = {
1139+ let cN = fG
11631140 let cO = size(cN)
11641141 let cP = $Tuple4(0, nil, nil, cW._4)
1165- func fd (cR,cS) = if ((cS >= cO))
1142+ func ff (cR,cS) = if ((cS >= cO))
11661143 then cR
1167- else fP(cR, cN[cS])
1168-
1169- func fe (cR,cS) = if ((cS >= cO))
1144+ else fR(cR, cN[cS])
1145+
1146+ func fg (cR,cS) = if ((cS >= cO))
11701147 then cR
11711148 else throw("List size exceeds 6")
11721149
1173- fe(fd(fd(fd(fd(fd(fd(cP, 0), 1), 2), 3), 4), 5), 6)
1150+ fg(ff(ff(ff(ff(ff(ff(cP, 0), 1), 2), 3), 4), 5), 6)
11741151 }
1175- func fS (cL,dj) = {
1176- let ei = cL._1
1177- let fM = parseIntValue(dj)
1178- let fT = if ((size(fI) > ei))
1179- then parseIntValue(fI[ei])
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])
11801157 else 0
1181- let fU = if ((size(fK) > ei))
1182- then parseIntValue(fK[ei])
1158+ let fW = if ((size(fM) > ek))
1159+ then parseIntValue(fM[ek])
11831160 else 0
1184- if ((fM == 0))
1185- then $Tuple4((ei + 1), (cL._2 :+ toString(fT)), (cL._3 :+ toString(fU)), cL._4)
1186- else if ((fM > 0))
1187- then if ((fM > fU))
1188- then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString(fU)) + " available"))
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"))
11891166 else {
1190- let fV = (fx((fT + fM), af) - fx(fT, af))
1191- $Tuple4((ei + 1), (cL._2 :+ toString((fT + fM))), (cL._3 :+ toString((fU - fM))), (cL._4 + fV))
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))
11921169 }
1193- else if ((-(fM) > fT))
1194- then throw((((("Attempt to take " + toString(-(fM))) + " from warehouse, but only ") + toString(fT)) + " available"))
1170+ else if ((-(fO) > fV))
1171+ then throw((((("Attempt to take " + toString(-(fO))) + " from warehouse, but only ") + toString(fV)) + " available"))
11951172 else {
1196- let fV = (fx((fT + fM), af) - fx(fT, af))
1197- $Tuple4((ei + 1), (cL._2 :+ toString((fT + fM))), (cL._3 :+ toString((fU - fM))), (cL._4 + fV))
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))
11981175 }
11991176 }
12001177
1201- let eS = if ((size(fF) != 0))
1178+ let eU = if ((size(fH) != 0))
12021179 then {
1203- let cN = fF
1180+ let cN = fH
12041181 let cO = size(cN)
1205- let cP = $Tuple4(0, nil, nil, ea._4)
1206- func fg (cR,cS) = if ((cS >= cO))
1182+ let cP = $Tuple4(0, nil, nil, ec._4)
1183+ func fi (cR,cS) = if ((cS >= cO))
12071184 then cR
1208- else fS(cR, cN[cS])
1209-
1210- func fh (cR,cS) = if ((cS >= cO))
1185+ else fU(cR, cN[cS])
1186+
1187+ func fj (cR,cS) = if ((cS >= cO))
12111188 then cR
12121189 else throw("List size exceeds 50")
12131190
1214- fh(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(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)
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)
12151192 }
1216- else $Tuple4(0, fI, fK, ea._4)
1217- let fW = eS._4
1218- if ((fW > ex))
1219- then throw((((("Attempt to put total " + toString(fW)) + " stuff, but only ") + toString(ex)) + " warehouse space left"))
1220- else $Tuple7(makeString(cW._2, "_"), makeString(ea._2, "_"), makeString(eS._2, "_"), makeString(cW._3, "_"), makeString(ea._3, "_"), makeString(eS._3, "_"), fW)
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)
12211198 }
12221199 }
12231200
12241201
1225-func fX (fY,fZ) = {
1226- let aT = toString(fY)
1227- let ga = eD(toBigInt(fZ))
1228- let gb = valueOrElse(getInteger(cm()), (cl + 1))
1229- let co = toString(gb)
1230- let eM = toInt((ga % cf))
1231- let el = eK(ga, eM)
1232- let gc = aa[eM]
1233- let gd = Issue(cE(co, "S"), makeString([co, "S", el, gc], "_"), 1, 0, false)
1234- let av = calculateAssetId(gd)
1235- let ge = toBase58String(av)
1236- $Tuple2([IntegerEntry(cm(), (gb + 1)), gd, StringEntry(cn(co), ge), StringEntry(au(ge), aT), StringEntry(ct(co), aT), IntegerEntry(ay(ge), 0), IntegerEntry(cr(ge, aT), 0), ScriptTransfer(fY, 1, av)], $Tuple2(ge, gc))
1237- }
1238-
1239-
1240-func gf (aT,gg,gh) = if (!(sigVerify_8Kb(gg, gh, bX)))
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)))
12411218 then throw("signature does not match")
12421219 else {
1243- let do = split(toUtf8String(gg), ";")
1244- let gi = split(do[0], "|")
1245- let gj = split(gi[cA], "_")
1246- let gk = parseIntValue(gj[0])
1247- let gl = parseIntValue(gj[1])
1248- let gm = split(do[1], ":")
1249- let gn = gm[0]
1250- let go = parseIntValue(gi[cB])
1251- if (if ((go > (lastBlock.timestamp + bZ)))
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)))
12521229 then true
1253- else ((lastBlock.timestamp - bZ) > go))
1254- then throw(((("signature outdated: logTime=" + toString(go)) + ", bcTime=") + toString(lastBlock.timestamp)))
1230+ else ((lastBlock.timestamp - bZ) > gq))
1231+ then throw(((("signature outdated: logTime=" + toString(gq)) + ", bcTime=") + toString(lastBlock.timestamp)))
12551232 else {
1256- let gp = gm[1]
1257- let gq = valueOrElse(getString(at(aT)), "")
1258- if ((gq != gp))
1259- then throw(((("Tx ids don't match! In state: " + gq) + ", in msg: ") + gp))
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))
12601237 else {
12611238 let p = valueOrErrorMessage(getString(aN(aT)), "You don't have a duck staked")
1262- let gr = aQ(p)
1263- let gs = J(valueOrElse(getInteger(r(p)), 0))
1264- let gt = valueOrElse(getInteger(gr), gs)
1265- if ((gt != gk))
1266- then throw(((("oldHealth=" + toString(gt)) + " from state does not match one from flight log=") + toString(gk)))
1267- else if ((0 >= gk))
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))
12681245 then throw("You can't fly with zero health")
12691246 else {
1270- let gu = if ((size(gi) > cC))
1271- then gi[cC]
1247+ let gw = if ((size(gk) > cC))
1248+ then gk[cC]
12721249 else ""
1273- let gv = if ((size(gi) > cD))
1274- then gi[cD]
1250+ let gx = if ((size(gk) > cD))
1251+ then gk[cD]
12751252 else ""
1276- let gw = if (if ((gl > 0))
1277- then (gu == "$")
1253+ let gy = if (if ((gn > 0))
1254+ then (gw == "$")
12781255 else false)
12791256 then bR(invoke(bC, "sendUsdtPrize", [aT], nil))
12801257 else 0
1281- $Tuple5(gl, p, gw, gn, gv)
1258+ $Tuple5(gn, p, gy, gp, gx)
12821259 }
12831260 }
12841261 }
12851262 }
12861263
12871264
1288-func gx (fY,fZ,gg,gh) = {
1289- let aT = toString(fY)
1290- let eN = gf(aT, gg, gh)
1291- let gr = aQ(eN._2)
1292- let eR = aO(eN._2)
1293- let fC = eQ(eR)
1294- let gy = split(fC[ar], "_")
1295- let gz = makeString(cX(true, gy, cd), "_")
1296- let dt = de(fC[as], eN._5)
1297- if ((0 >= eN._1))
1298- then $Tuple3([IntegerEntry(gr, 0), StringEntry(eR, makeString([fC[ap], fC[aq], fC[ar], dt], ":"))], "", 0)
1299- else {
1300- let gA = fX(fY, fZ)
1301- let ge = gA._2._1
1302- $Tuple3((((gA._1 :+ StringEntry(aP(eN._2), makeString([gA._2._2, "L", ge], "_"))) :+ IntegerEntry(gr, eN._1)) :+ StringEntry(eR, makeString([fC[ap], fC[aq], gz, dt], ":"))), ge, eN._3)
1303- }
1304- }
1305-
1306-
1307-func gB (aF,gC) = {
1308- let fl = valueOrElse(getInteger(ay(aF)), 0)
1309- let gD = valueOrElse(getInteger(az(R, aF)), 0)
1310- let gE = (fl / 6)
1311- let gF = (fl / 7)
1312- ((T + fraction(T, ((fl + gE) + (2 * gF)), 5)) + fraction(T, gD, (gC * 5)))
1313- }
1314-
1315-
1316-func gG (b,gH,gI) = {
1317- let gJ = if ((gH == cx))
1318- then $Tuple2(gI, valueOrElse(getString(aN(b)), ""))
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)), ""))
13191296 else {
13201297 let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
1321- let gK = valueOrElse(getString(aP(p)), W)
1322- let gL = split(value(gK), "_")
1323- if ((gL[aV] != "L"))
1324- then throw((("Duck location type is " + gL[aV]) + ", but should be L"))
1325- else $Tuple2(gL[aW], p)
1326- }
1327- let aF = gJ._1
1328- let gM = gJ._2
1329- let gN = value(assetInfo(fromBase58String(aF)))
1330- let gO = ax(aF)
1331- let gP = valueOrErrorMessage(getInteger(gO), (("Land " + gN.name) + " is not staked"))
1332- let gQ = valueOrErrorMessage(getString(au(aF)), (("NFT " + gN.name) + " is orphaned"))
1333- if ((gQ != b))
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))
13341311 then throw((P + " is not yours"))
13351312 else {
1336- let gR = split(gN.description, "_")
1337- $Tuple4(gM, aF, gR, gP)
1338- }
1339- }
1340-
1341-
1342-func gS (b,fy,gH,gI) = if ((0 > fy))
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))
13431320 then throw("Negative amount")
13441321 else {
1345- let dM = gG(b, gH, gI)
1346- let bU = dM._3[bI]
1347- let ee = ek(dM._3[bJ])
1348- let eo = (lastBlock.timestamp - dM._4)
1349- if ((0 > eo))
1350- then throw(((("Saved timestamp is in future, saved = " + toString(dM._4)) + ", current = ") + toString(lastBlock.timestamp)))
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)))
13511328 else {
1352- let gC = bT(bU)
1353- let gT = gB(dM._2, gC)
1354- let gU = fraction(eo, (gT * gC), U)
1355- if ((fy > gU))
1356- then throw(((("Not enough resources, available = " + toString(gU)) + ", requested = ") + toString(fy)))
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)))
13571334 else {
1358- let gV = fraction((gU - fy), U, (gT * gC))
1359- let gW = (lastBlock.timestamp - gV)
1360- let fk = (gC / bj)
1361- let ew = es(ee, (eo - gV), fk, gT)
1362- let fj = aE(dM._2)
1363- let fl = valueOrElse(getInteger(ay(dM._2)), 0)
1364- let eW = fi(fj, fk, fl)
1365- let fr = split(eW[ak], "_")
1366- let ex = parseIntValue(fr[an])
1367- if (if ((gH == cx))
1368- then (fy > ex)
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)
13691346 else false)
1370- then throw((("Only " + toString(ex)) + " space left in warehouse"))
1347+ then throw((("Only " + toString(ez)) + " space left in warehouse"))
13711348 else {
1372- let eR = aO(dM._1)
1373- let fC = eQ(eR)
1374- let ev = split(fC[aq], "_")
1375- let eu = split(eW[ah], "_")
1376- let gX = if ((gH == cx))
1377- then $Tuple4(em(eu, ee, (eo - gV), fk, gT), fC[aq], (parseIntValue(fr[am]) + ew._2), (parseIntValue(fr[an]) - ew._2))
1378- else if ((gH == cy))
1379- then $Tuple4(eW[ah], em(ev, ee, (eo - gV), fk, gT), parseIntValue(fr[am]), parseIntValue(fr[an]))
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]))
13801357 else {
1381- let gY = et(eu, ev, ew, ex)
1382- let gZ = min([parseIntValue(fr[an]), ew._2])
1383- $Tuple4(gY._1, gY._2, (parseIntValue(fr[am]) + gZ), (parseIntValue(fr[an]) - gZ))
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))
13841361 }
1385- let ha = gX._1
1386- let hb = gX._2
1387- let hc = gX._3
1388- let hd = gX._4
1389- $Tuple5([IntegerEntry(ax(dM._2), gW), IntegerEntry(aB(P, dM._2, b), gW)], eR, [fC[ap], hb, fC[ar], fC[as]], fj, [eW[ag], ha, eW[ai], eW[aj], makeString([fr[al], toString(hc), toString(hd), fr[ao]], "_")])
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]], "_")])
13901367 }
13911368 }
13921369 }
13931370 }
13941371
13951372
1396-func he (b,aF,gC,gH) = {
1397- let gO = ax(aF)
1398- let gP = value(getInteger(gO))
1399- let gU = (fraction((lastBlock.timestamp - gP), gB(aF, gC), U) * gC)
1400- gS(b, gU, gH, aF)
1401- }
1402-
1403-
1404-func hf (cY,fY,hg,aF) = {
1405- let b = toString(fY)
1406- let dM = gG(b, cz, aF)
1407- let gC = bT(dM._3[bI])
1408- let hh = ay(dM._2)
1409- let hi = valueOrElse(getInteger(hh), 0)
1410- if ((hi >= 3))
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))
14111388 then throw("Currently max infrastructure level = 3")
14121389 else {
1413- let O = (hi + 1)
1414- let hj = fraction(cc, (gC * O), bj)
1390+ let O = (hk + 1)
1391+ let hl = fraction(cc, (gE * O), bj)
14151392 if (if (!(cY))
1416- then (hg != hj)
1393+ then (hi != hl)
14171394 else false)
1418- then throw(("Payment attached should be " + toString(hj)))
1395+ then throw(("Payment attached should be " + toString(hl)))
14191396 else {
1420- let eR = aO(dM._1)
1421- let fC = eQ(eR)
1422- let gy = split(fC[ar], "_")
1423- let hk = fraction(be, (gC * O), bj)
1424- let gz = makeString(cX(cY, gy, hk), "_")
1425- let hl = he(b, dM._2, gC, cz)
1426- let hm = hl._5
1427- let hn = eT(hm[ag])
1428- let ho = makeString([split(hm[ag], "_")[0], toString(O)], "_")
1429- let hp = eT(ho)
1430- let fr = split(hm[ak], "_")
1431- let hq = makeString([fr[al], fr[am], toString(((parseIntValue(fr[an]) + hp) - hn)), toString(hp)], "_")
1432- $Tuple3(([IntegerEntry(hh, O), IntegerEntry(cr(dM._2, b), O), StringEntry(eR, makeString([fC[ap], hl._3[aq], gz, fC[as]], ":")), StringEntry(hl._4, makeString([ho, hm[ah], hm[ai], hm[aj], hq], ":"))] ++ hl._1), O, hk)
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)
14331410 }
14341411 }
14351412 }
14361413
14371414
1438-func hr (p,hs) = if (!(aZ))
1415+func ht (p,hu) = if (!(aZ))
14391416 then $Tuple2(nil, 0)
14401417 else {
1441- let ht = r(p)
1442- let hu = q(p)
1443- let I = valueOrElse(getInteger(bD, hu), 0)
1444- let N = (I + hs)
1445- let hv = L(valueOrElse(getInteger(bD, ht), 0), N)
1446- let hw = s(p)
1447- $Tuple2([IntegerEntry(ht, hv[0]), IntegerEntry(hu, N), IntegerEntry(hw, (valueOrElse(getInteger(hw), 0) + hv[1]))], N)
1448- }
1449-
1450-
1451-func hx (b,hs) = if (!(aZ))
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))
14521429 then $Tuple2(nil, 0)
14531430 else {
1454- let ht = v(b)
1455- let hu = u(b)
1456- let I = valueOrElse(getInteger(bD, hu), 0)
1457- let N = (I + hs)
1458- let hv = L(valueOrElse(getInteger(bD, ht), 0), N)
1459- let hw = w(b)
1460- $Tuple2([IntegerEntry(ht, hv[0]), IntegerEntry(hu, N), IntegerEntry(hw, (valueOrElse(getInteger(hw), 0) + hv[1]))], N)
1461- }
1462-
1463-
1464-func hy (b) = {
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) = {
14651442 let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
1466- let hz = aI(b)
1467- let hA = getString(hz)
1468- if (!(isDefined(hA)))
1443+ let hB = aI(b)
1444+ let hC = getString(hB)
1445+ if (!(isDefined(hC)))
14691446 then throw("You are not eligible for ONBOARD artifact")
14701447 else {
1471- let hB = aK(b)
1472- let hC = getString(hB)
1473- if (isDefined(hC))
1474- then throw(("You already used your ONBOARD artifact on duck " + value(hC)))
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)))
14751452 else {
1476- let hD = aJ(p)
1477- let hE = getString(hD)
1478- if (isDefined(hE))
1479- then throw(((("The duck " + p) + " already got points from ONBOARD artifact from user ") + value(hE)))
1480- else ([StringEntry(hB, p), StringEntry(hD, b)] ++ hr(p, F)._1)
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)
14811458 }
14821459 }
14831460 }
14841461
14851462
1486-func hF (b,gI) = {
1487- let dM = gG(b, cz, gI)
1488- let aF = dM._2
1489- let gC = bT(dM._3[bI])
1490- let hG = az(R, aF)
1491- if ((valueOrElse(getInteger(hG), 0) > 0))
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))
14921469 then throw("Presale artifact is already activated")
1493- else if ((parseIntValue(dM._3[bH]) > cl))
1470+ else if ((parseIntValue(dN._3[bH]) > cl))
14941471 then throw((((P + " ") + aF) + " is not eligible for presale artifact"))
14951472 else {
1496- let hl = he(b, aF, gC, cz)
1497- ((((hl._1 :+ IntegerEntry(hG, gC)) :+ IntegerEntry(cs(R, aF, b), gC)) :+ StringEntry(hl._2, makeString(hl._3, ":"))) :+ StringEntry(hl._4, makeString(hl._5, ":")))
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, ":")))
14981475 }
14991476 }
15001477
15011478
1502-func hH (hI,O,hJ,b,hK,fZ,hL) = {
1479+func hJ (hK,O,hL,b,hM,gb,hN) = {
15031480 let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
1504- func hM (cL,aF) = {
1505- let gN = value(assetInfo(fromBase58String(aF)))
1506- let gO = ax(aF)
1507- let gP = valueOrErrorMessage(getInteger(gO), (("NFT " + gN.name) + " is not staked"))
1508- let gQ = valueOrErrorMessage(getString(au(aF)), (("NFT " + gN.name) + " is orphaned"))
1509- if ((gQ != b))
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))
15101487 then throw((P + " is not yours"))
15111488 else {
1512- let gR = split(gN.description, "_")
1513- let gc = gR[bK]
1489+ let gT = split(gP.description, "_")
1490+ let ge = gT[bK]
15141491 if (if ((cL._3 != ""))
1515- then (cL._3 != gc)
1492+ then (cL._3 != ge)
15161493 else false)
15171494 then throw("Lands should be on the same continent to merge")
15181495 else {
1519- let bU = gR[bI]
1520- let hN = cL._1
1521- let ei = valueOrErrorMessage(indexOf(hN, bU), "You haven't passed all the lands needed")
1522- let hO = (take(hN, ei) + drop(hN, (ei + 1)))
1523- let gC = bT(bU)
1524- let hP = (cL._2 + valueOrElse(getInteger(az(R, aF)), 0))
1525- let fl = valueOrElse(getInteger(ay(aF)), 0)
1526- let hQ = {
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 = {
15271504 let bc = bU
15281505 if (("S" == bc))
15291506 then 3
15301507 else if (("M" == bc))
15311508 then 4
15321509 else if (("L" == bc))
15331510 then 5
15341511 else if (("XL" == bc))
15351512 then 6
15361513 else throw("Only S, M, L, XL can merge")
15371514 }
1538- if ((fl != hQ))
1515+ if ((fn != hS))
15391516 then throw("All lands should be maxed to merge")
15401517 else {
1541- let co = gR[bH]
1542- let ee = ek(gR[bJ])
1543- let eo = (lastBlock.timestamp - gP)
1544- if ((0 > eo))
1545- then throw(((("Saved timestamp is in future, saved = " + toString(gP)) + ", current = ") + toString(lastBlock.timestamp)))
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)))
15461523 else {
1547- let gT = gB(aF, gC)
1548- let fk = (gC / bj)
1549- let hb = em(split(cL._4, "_"), ee, eo, fk, gT)
1550- let cV = ec(split(cL._6, "_"), ee, fk, -1)
1551- let hR = cL._7
1552- let bB = indexOf(hR, aF)
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)
15531530 if (!(isDefined(bB)))
15541531 then throw(("Your staked lands don't contain " + aF))
15551532 else {
1556- let hS = aw(aF)
1557- let hT = valueOrElse(getString(hS), "")
1558- $Tuple8(hO, hP, gc, hb, (((((((((((((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(hS)) :+ DeleteEntry(cp(hT))) :+ Burn(fromBase58String(aF), 1)), cV, removeByIndex(hR, value(bB)), (cL._8 + gC))
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))
15591536 }
15601537 }
15611538 }
15621539 }
15631540 }
15641541 }
15651542
1566- let eR = aO(p)
1567- let fC = eQ(eR)
1568- let hU = valueOrElse(getString(bL()), "0_0_0_0_0_0")
1569- let hV = bM(b)
1570- let hW = getString(hV)
1571- let hX = if (isDefined(hW))
1572- then split_51C(value(hW), "_")
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), "_")
15731550 else nil
15741551 let cW = {
1575- let cN = hK
1552+ let cN = hM
15761553 let cO = size(cN)
1577- let cP = $Tuple8(hJ, 0, "", fC[aq], nil, hU, hX, 0)
1554+ let cP = $Tuple8(hL, 0, "", fE[aq], nil, hW, hZ, 0)
15781555 func cQ (cR,cS) = if ((cS >= cO))
15791556 then cR
1580- else hM(cR, cN[cS])
1557+ else hO(cR, cN[cS])
15811558
15821559 func cT (cR,cS) = if ((cS >= cO))
15831560 then cR
15841561 else throw("List size exceeds 5")
15851562
15861563 cT(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5)
15871564 }
1588- let gc = cW._3
1589- let eM = valueOrErrorMessage(indexOf(aa, gc), ("Unknown continent: " + gc))
1590- let el = eK(eD(toBigInt(fZ)), eM)
1591- let gb = valueOrElse(getInteger(cm()), (cl + 1))
1592- let hY = toString(gb)
1593- let gd = Issue(cE(hY, hI), makeString([hY, hI, el, gc], "_"), 1, 0, false)
1594- let av = calculateAssetId(gd)
1595- let hZ = toBase58String(av)
1596- let gz = makeString(cX((hL > 0), split(fC[ar], "_"), hL), "_")
1597- let ia = bN(b)
1598- let ib = valueOrElse(getInteger(ia), 0)
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)
15991576 $Tuple2((((((((((((((((cW._5 :+ (if ((size(cW._7) > 0))
1600- then StringEntry(hV, makeString_11C(cW._7, "_"))
1601- else DeleteEntry(hV))) :+ IntegerEntry(ia, if ((cW._8 > ib))
1577+ then StringEntry(hX, makeString_11C(cW._7, "_"))
1578+ else DeleteEntry(hX))) :+ IntegerEntry(ic, if ((cW._8 > id))
16021579 then 0
1603- else (ib - cW._8))) :+ IntegerEntry(cm(), (gb + 1))) :+ gd) :+ StringEntry(cn(hY), hZ)) :+ StringEntry(au(hZ), b)) :+ StringEntry(ct(hY), b)) :+ IntegerEntry(az(R, hZ), cW._2)) :+ IntegerEntry(cs(R, hZ, b), cW._2)) :+ IntegerEntry(ay(hZ), O)) :+ IntegerEntry(cr(hZ, b), O)) :+ StringEntry(eR, makeString([fC[ap], cW._4, gz, fC[as]], ":"))) :+ StringEntry(bL(), cW._6)) :+ StringEntry(aP(p), makeString([gc, "L", hZ], "_"))) :+ ScriptTransfer(addressFromStringValue(b), 1, av)), hZ)
1604- }
1605-
1606-
1607-func ic (b,hK,fZ) = hH("M", 3, "SSSS", b, hK, fZ, 0)
1608-
1609-
1610-func id (b,hK,fZ,cY,hg) = {
1611- let hj = (cc * 4)
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)
16121589 if (if (!(cY))
1613- then (hg != hj)
1590+ then (hi != hl)
16141591 else false)
1615- then throw(("Payment attached should be " + toString(hj)))
1616- else hH("L", 4, "SMM", b, hK, fZ, (be * 4))
1617- }
1618-
1619-
1620-func ie (b,hK,fZ,cY,hg) = {
1621- let hj = (cc * 47)
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)
16221599 if (if (!(cY))
1623- then (hg != hj)
1600+ then (hi != hl)
16241601 else false)
1625- then throw(("Payment attached should be " + toString(hj)))
1626- else hH("XL", 5, "SSSML", b, hK, fZ, (be * 47))
1627- }
1628-
1629-
1630-func if (b,hK,fZ,cY,hg) = {
1631- let hj = (cc * 54)
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)
16321609 if (if (!(cY))
1633- then (hg != hj)
1610+ then (hi != hl)
16341611 else false)
1635- then throw(("Payment attached should be " + toString(hj)))
1636- else hH("XXL", 6, "LXL", b, hK, fZ, (be * 54))
1637- }
1638-
1639-
1640-func ig (cY,b,hg,hK,fZ) = {
1641- let ih = {
1642- let bc = size(hK)
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)
16431620 if ((4 == bc))
1644- then ic(b, hK, fZ)
1621+ then ie(b, hM, gb)
16451622 else if ((3 == bc))
1646- then id(b, hK, fZ, cY, hg)
1623+ then if(b, hM, gb, cY, hi)
16471624 else if ((5 == bc))
1648- then ie(b, hK, fZ, cY, hg)
1625+ then ig(b, hM, gb, cY, hi)
16491626 else if ((2 == bc))
1650- then if(b, hK, fZ, cY, hg)
1627+ then ih(b, hM, gb, cY, hi)
16511628 else throw("Unknown merge")
16521629 }
1653- ih
1654- }
1655-
1656-
1657-func ii (ei) = if (if ((ei.originCaller != bC))
1630+ ij
1631+ }
1632+
1633+
1634+func ik (ek) = if (if ((ek.originCaller != bC))
16581635 then valueOrElse(getBoolean(aR()), false)
16591636 else false)
16601637 then throw("Contracts are under maintenance")
1661- else StringEntry(at(toString(ei.originCaller)), toBase58String(ei.transactionId))
1662-
1663-
1664-@Callable(ei)
1665-func constructorV1 (ij) = if ((ei.caller != this))
1638+ else StringEntry(at(toString(ek.originCaller)), toBase58String(ek.transactionId))
1639+
1640+
1641+@Callable(ek)
1642+func constructorV1 (il) = if ((ek.caller != this))
16661643 then throw("Permission denied")
1667- else [StringEntry(bw(), ij)]
1668-
1669-
1670-
1671-@Callable(ei)
1672-func setBlocked (ik) = if ((ei.caller != this))
1644+ else [StringEntry(bw(), il)]
1645+
1646+
1647+
1648+@Callable(ek)
1649+func setBlocked (im) = if ((ek.caller != this))
16731650 then throw("permission denied")
1674- else [BooleanEntry(aR(), ik)]
1675-
1676-
1677-
1678-@Callable(ei)
1651+ else [BooleanEntry(aR(), im)]
1652+
1653+
1654+
1655+@Callable(ek)
16791656 func stakeLand () = {
1680- let il = ii(ei)
1681- if ((size(ei.payments) != 1))
1657+ let in = ik(ek)
1658+ if ((size(ek.payments) != 1))
16821659 then throw("Exactly one payment required")
16831660 else {
1684- let im = value(ei.payments[0])
1685- let av = value(im.assetId)
1686- let bp = toString(ei.caller)
1687- if ((im.amount != 1))
1661+ let io = value(ek.payments[0])
1662+ let av = value(io.assetId)
1663+ let bp = toString(ek.caller)
1664+ if ((io.amount != 1))
16881665 then throw((("NFT " + P) + " token should be attached as payment"))
16891666 else {
1690- let gN = value(assetInfo(av))
1691- if ((gN.issuer != this))
1667+ let gP = value(assetInfo(av))
1668+ if ((gP.issuer != this))
16921669 then throw("Unknown issuer of token")
1693- else if (!(contains(gN.name, P)))
1670+ else if (!(contains(gP.name, P)))
16941671 then throw((("Only NFT " + P) + " tokens are accepted"))
16951672 else {
1696- let in = drop(gN.name, 4)
1697- let co = if (contains(in, "XXL"))
1698- then dropRight(in, 3)
1699- else if (contains(in, "XL"))
1700- then dropRight(in, 2)
1701- else dropRight(in, 1)
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)
17021679 if (!(isDefined(parseInt(co))))
1703- then throw(("Cannot parse land number from " + gN.name))
1680+ then throw(("Cannot parse land number from " + gP.name))
17041681 else {
17051682 let aF = toBase58String(av)
1706- let gO = ax(aF)
1707- if (isDefined(getInteger(gO)))
1708- then throw((("NFT " + gN.name) + " is already staked"))
1683+ let gQ = ax(aF)
1684+ if (isDefined(getInteger(gQ)))
1685+ then throw((("NFT " + gP.name) + " is already staked"))
17091686 else {
1710- let gR = split(gN.description, "_")
1711- let ee = ek(gR[bJ])
1712- let gC = bT(gR[bI])
1713- let cV = ej(ee, (gC / bj), 1)
1714- let gD = valueOrElse(getInteger(az(R, aF)), 0)
1715- let hV = bM(bp)
1716- let hW = getString(hV)
1717- let hR = if (isDefined(hW))
1718- then split_51C(value(hW), "_")
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), "_")
17191696 else nil
1720- if (containsElement(hR, aF))
1697+ if (containsElement(hT, aF))
17211698 then throw(("Your staked lands already contain " + aF))
17221699 else {
1723- let fl = valueOrElse(getInteger(ay(aF)), 0)
1724- let ia = bN(bp)
1725- let io = valueOrElse(getInteger(ia), 0)
1726- let ip = bR(invoke(bG, "onStakeUnstakeLand", [bp], nil))
1727- $Tuple2([IntegerEntry(gO, lastBlock.timestamp), IntegerEntry(aB(P, aF, bp), lastBlock.timestamp), StringEntry(hV, makeString_11C((hR :+ aF), "_")), IntegerEntry(ia, (io + gC)), StringEntry(au(aF), bp), StringEntry(ct(co), bp), IntegerEntry(cs(R, aF, bp), gD), IntegerEntry(cr(aF, bp), fl), StringEntry(bL(), cV), il], ip)
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)
17281705 }
17291706 }
17301707 }
17311708 }
17321709 }
17331710 }
17341711 }
17351712
17361713
17371714
1738-@Callable(ei)
1739-func unstakeLand (gI) = {
1740- let il = ii(ei)
1741- if ((size(ei.payments) != 0))
1715+@Callable(ek)
1716+func unstakeLand (gK) = {
1717+ let in = ik(ek)
1718+ if ((size(ek.payments) != 0))
17421719 then throw("No payments required")
17431720 else {
1744- let b = toString(ei.caller)
1745- let dM = gG(b, cy, gI)
1746- let aF = dM._2
1747- let hV = bM(b)
1748- let ee = ek(dM._3[bJ])
1749- let gC = bT(dM._3[bI])
1750- let cV = ej(ee, (gC / bj), -1)
1751- let hl = he(b, aF, gC, cy)
1752- let hR = split_51C(valueOrElse(getString(hV), ""), "_")
1753- let bB = indexOf(hR, aF)
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)
17541731 if (!(isDefined(bB)))
17551732 then throw(("Your staked lands don't contain " + aF))
17561733 else {
1757- let iq = lastBlock.timestamp
1758- let ir = valueOrElse(getInteger(bF, aS(b)), 0)
1759- if ((ir >= iq))
1760- then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(ir)))
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)))
17611738 else {
1762- let is = (valueOrElse(getInteger(bG, a(b)), 0) + bf)
1763- if ((is > iq))
1764- then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(is)))
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)))
17651742 else {
1766- let ia = bN(b)
1767- let ib = valueOrElse(getInteger(ia), 0)
1768- let it = if ((gC > ib))
1743+ let ic = bN(b)
1744+ let id = valueOrElse(getInteger(ic), 0)
1745+ let iv = if ((gE > id))
17691746 then 0
1770- else (ib - gC)
1771- let ip = bR(invoke(bG, "onStakeUnstakeLand", [b], nil))
1772- $Tuple2([ScriptTransfer(ei.caller, 1, fromBase58String(aF)), DeleteEntry(ax(aF)), DeleteEntry(aB(P, aF, b)), StringEntry(bL(), cV), StringEntry(hl._2, makeString(hl._3, ":")), if ((size(hR) > 1))
1773- then StringEntry(hV, makeString_11C(removeByIndex(hR, value(bB)), "_"))
1774- else DeleteEntry(hV), IntegerEntry(ia, it), il], ip)
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)
17751752 }
17761753 }
17771754 }
17781755 }
17791756 }
17801757
17811758
17821759
1783-@Callable(ei)
1760+@Callable(ek)
17841761 func stakeDuck () = {
1785- let il = ii(ei)
1786- if ((size(ei.payments) != 1))
1762+ let in = ik(ek)
1763+ if ((size(ek.payments) != 1))
17871764 then throw("Exactly one payment required")
17881765 else {
1789- let im = value(ei.payments[0])
1790- let av = value(im.assetId)
1791- let bp = toString(ei.caller)
1792- if ((im.amount != 1))
1766+ let io = value(ek.payments[0])
1767+ let av = value(io.assetId)
1768+ let bp = toString(ek.caller)
1769+ if ((io.amount != 1))
17931770 then throw((("NFT " + Q) + " token should be attached as payment"))
17941771 else {
1795- let gN = value(assetInfo(av))
1796- if (if ((gN.issuer != bV))
1797- then (gN.issuer != bW)
1772+ let gP = value(assetInfo(av))
1773+ if (if ((gP.issuer != bV))
1774+ then (gP.issuer != bW)
17981775 else false)
17991776 then throw((("Unknown issuer of " + Q) + " token"))
1800- else if (!(contains(gN.name, Q)))
1777+ else if (!(contains(gP.name, Q)))
18011778 then throw((("Only NFT " + Q) + " tokens are accepted"))
18021779 else {
1803- let iu = toBase58String(av)
1804- let gO = ax(iu)
1805- if (isDefined(getInteger(gO)))
1806- then throw((("NFT " + gN.name) + " is already staked"))
1780+ let iw = toBase58String(av)
1781+ let gQ = ax(iw)
1782+ if (isDefined(getInteger(gQ)))
1783+ then throw((("NFT " + gP.name) + " is already staked"))
18071784 else if (isDefined(getString(aN(bp))))
1808- then throw(("You already staked one duck: " + gN.name))
1785+ then throw(("You already staked one duck: " + gP.name))
18091786 else {
1810- let iv = aP(iu)
1811- let iw = getString(iv)
1812- let eR = aO(iu)
1813- let ix = getString(eR)
1814- let gr = aQ(iu)
1815- let gs = J(valueOrElse(getInteger(r(iu)), 0))
1816- let iy = valueOrElse(getInteger(gr), gs)
1817- ([IntegerEntry(gO, lastBlock.timestamp), IntegerEntry(aB(Q, toBase58String(av), bp), lastBlock.timestamp), StringEntry(aM(iu), bp), StringEntry(aN(bp), iu)] ++ (if (isDefined(iw))
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))
18181795 then nil
1819- else ([StringEntry(iv, W)] ++ (if (isDefined(ix))
1796+ else ([StringEntry(ix, W)] ++ (if (isDefined(iz))
18201797 then nil
1821- else (([StringEntry(eR, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(gr, iy)) :+ il)))))
1798+ else (([StringEntry(eT, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(gt, iA)) :+ in)))))
18221799 }
18231800 }
18241801 }
18251802 }
18261803 }
18271804
18281805
18291806
1830-@Callable(ei)
1831-func unstakeDuck (iu) = {
1832- let il = ii(ei)
1833- if ((size(ei.payments) != 0))
1807+@Callable(ek)
1808+func unstakeDuck (iw) = {
1809+ let in = ik(ek)
1810+ if ((size(ek.payments) != 0))
18341811 then throw("No payments required")
18351812 else {
1836- let av = fromBase58String(iu)
1837- let bp = toString(ei.caller)
1838- let gN = value(assetInfo(av))
1839- let gO = ax(toBase58String(av))
1840- if (!(isDefined(getInteger(gO))))
1841- then throw((("NFT " + gN.name) + " is not staked"))
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"))
18421819 else if (!(isDefined(getString(aN(bp)))))
1843- then throw((("The duck " + gN.name) + " is not staked"))
1820+ then throw((("The duck " + gP.name) + " is not staked"))
18441821 else {
1845- let gQ = valueOrErrorMessage(getString(aM(toBase58String(av))), (("NFT " + gN.name) + " is orphaned"))
1846- if ((gQ != bp))
1822+ let gS = valueOrErrorMessage(getString(aM(toBase58String(av))), (("NFT " + gP.name) + " is orphaned"))
1823+ if ((gS != bp))
18471824 then throw("Staked NFT is not yours")
18481825 else {
1849- let gr = aQ(iu)
1850- let gs = J(valueOrElse(getInteger(r(iu)), 0))
1851- let iz = valueOrElse(getInteger(gr), gs)
1852- if ((gs > iz))
1853- then throw((("Please heal your duck to " + toString(gs)) + "hp before unstaking"))
1854- else [ScriptTransfer(ei.caller, 1, av), DeleteEntry(gO), DeleteEntry(gr), DeleteEntry(aP(iu)), DeleteEntry(aM(iu)), DeleteEntry(aB(Q, iu, bp)), DeleteEntry(aN(bp)), il]
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]
18551832 }
18561833 }
18571834 }
18581835 }
18591836
18601837
18611838
1862-@Callable(ei)
1863-func claimRes (fy,iA) = {
1864- let il = ii(ei)
1865- if ((size(ei.payments) != 0))
1839+@Callable(ek)
1840+func claimRes (fA,iC) = {
1841+ let in = ik(ek)
1842+ if ((size(ek.payments) != 0))
18661843 then throw("No payments required")
18671844 else {
1868- let b = toString(ei.originCaller)
1869- let dd = gS(b, fy, cy, iA)
1845+ let b = toString(ek.originCaller)
1846+ let dd = gU(b, fA, cy, iC)
18701847 let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
1871- $Tuple2(((((dd._1 ++ hr(p, fraction(x, fy, bi))._1) :+ StringEntry(dd._2, makeString(dd._3, ":"))) :+ StringEntry(dd._4, makeString(dd._5, ":"))) :+ il), dd._3[aq])
1872- }
1873- }
1874-
1875-
1876-
1877-@Callable(ei)
1878-func claimResToWH (fy,iA) = {
1879- let il = ii(ei)
1880- if ((size(ei.payments) != 0))
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))
18811858 then throw("No payments required")
18821859 else {
1883- let b = toString(ei.originCaller)
1884- let dd = gS(b, fy, cx, iA)
1885- $Tuple2(((((dd._1 ++ hx(b, fraction(x, fy, bi))._1) :+ StringEntry(dd._2, makeString(dd._3, ":"))) :+ StringEntry(dd._4, makeString(dd._5, ":"))) :+ il), dd._5[ah])
1886- }
1887- }
1888-
1889-
1890-
1891-@Callable(ei)
1892-func flight (gg,gh) = {
1893- let il = ii(ei)
1894- if ((size(ei.payments) != 0))
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))
18951872 then throw("No payments required")
18961873 else {
1897- let aT = toString(ei.caller)
1898- let eN = gf(aT, gg, gh)
1899- let p = eN._2
1900- let iv = aP(p)
1901- let gK = valueOrElse(getString(iv), W)
1902- if ((eN._4 == gK))
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))
19031880 then throw("You can't fly to the same location")
19041881 else {
1905- let eR = aO(p)
1906- let fC = eQ(eR)
1907- let dt = de(fC[as], eN._5)
1908- $Tuple2(([StringEntry(iv, if ((eN._1 > 0))
1909- then eN._4
1910- else gK), StringEntry(eR, makeString([fC[ap], fC[aq], fC[ar], dt], ":")), IntegerEntry(aQ(p), eN._1), il] ++ hr(p, if ((eN._1 > 0))
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))
19111888 then y
1912- else z)._1), eN._3)
1889+ else z)._1), eP._3)
19131890 }
19141891 }
19151892 }
19161893
19171894
19181895
1919-@Callable(ei)
1920-func heal (iB,iC,iD) = {
1921- let il = ii(ei)
1922- if (if (if ((0 > iB))
1896+@Callable(ek)
1897+func heal (iD,iE,iF) = {
1898+ let in = ik(ek)
1899+ if (if (if ((0 > iD))
19231900 then true
1924- else (0 > iC))
1901+ else (0 > iE))
19251902 then true
1926- else (0 > iD))
1903+ else (0 > iF))
19271904 then throw("Quantity cannot be negative")
19281905 else {
1929- let p = valueOrErrorMessage(getString(aN(toString(ei.caller))), "You don't have a duck staked")
1930- let iE = [iB, iC, iD]
1931- let gr = aQ(p)
1932- let gs = J(valueOrElse(getInteger(r(p)), 0))
1933- let iF = valueOrElse(getInteger(gr), gs)
1934- if ((iF >= gs))
1935- then throw((("HP should be < " + toString(gs)) + " to heal"))
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"))
19361913 else {
1937- let eR = aO(p)
1938- let fC = eQ(eR)
1939- let iG = if ((fC[as] == ""))
1914+ let eT = aO(p)
1915+ let fE = eS(eT)
1916+ let iI = if ((fE[as] == ""))
19401917 then nil
1941- else split(fC[as], "_")
1942- func iH (cL,iI) = {
1918+ else split(fE[as], "_")
1919+ func iJ (cL,iK) = {
19431920 let bS = cL._2
1944- let eE = if ((size(iG) > bS))
1945- then parseIntValue(iG[bS])
1921+ let eG = if ((size(iI) > bS))
1922+ then parseIntValue(iI[bS])
19461923 else 0
19471924 if ((3 > bS))
19481925 then {
1949- let iJ = iE[bS]
1950- if ((iJ > eE))
1951- then throw(((("You have only " + toString(eE)) + " of ") + Z[bS]))
1952- else $Tuple3((cL._1 :+ toString((eE - iJ))), (bS + 1), (cL._3 + (bY[bS] * iJ)))
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)))
19531930 }
1954- else $Tuple3((cL._1 :+ toString(eE)), (bS + 1), cL._3)
1931+ else $Tuple3((cL._1 :+ toString(eG)), (bS + 1), cL._3)
19551932 }
19561933
19571934 let dd = {
19581935 let cN = ac
19591936 let cO = size(cN)
19601937 let cP = $Tuple3(nil, 0, 0)
19611938 func cQ (cR,cS) = if ((cS >= cO))
19621939 then cR
1963- else iH(cR, cN[cS])
1940+ else iJ(cR, cN[cS])
19641941
19651942 func cT (cR,cS) = if ((cS >= cO))
19661943 then cR
19671944 else throw("List size exceeds 50")
19681945
19691946 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)
19701947 }
1971- let iK = min([gs, (iF + dd._3)])
1972- $Tuple2(([IntegerEntry(gr, iK), StringEntry(eR, makeString_2C([fC[ap], fC[aq], fC[ar], makeString(dd._1, "_")], ":")), il] ++ hr(p, (G * ((iB + iC) + iD)))._1), iK)
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)
19731950 }
19741951 }
19751952 }
19761953
19771954
19781955
1979-@Callable(ei)
1956+@Callable(ek)
19801957 func healES () = {
1981- let il = ii(ei)
1982- if ((size(ei.payments) != 1))
1958+ let in = ik(ek)
1959+ if ((size(ek.payments) != 1))
19831960 then throw("Exactly one payment required")
19841961 else {
1985- let im = value(ei.payments[0])
1986- if ((im.assetId != bb))
1962+ let io = value(ek.payments[0])
1963+ if ((io.assetId != bb))
19871964 then throw("Allowed USDT payment only!")
19881965 else {
1989- let p = valueOrErrorMessage(getString(aN(toString(ei.caller))), "You don't have a duck staked")
1990- let gr = aQ(p)
1991- let gs = J(valueOrElse(getInteger(r(p)), 0))
1992- let iF = valueOrElse(getInteger(gr), gs)
1993- if ((iF > 0))
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))
19941971 then throw("HP should be 0 to call Emergency Service")
19951972 else {
1996- let eR = aO(p)
1997- let fC = eQ(eR)
1998- let iG = if ((fC[as] == ""))
1973+ let eT = aO(p)
1974+ let fE = eS(eT)
1975+ let iI = if ((fE[as] == ""))
19991976 then nil
2000- else split(fC[as], "_")
2001- let iL = if ((size(iG) > 0))
2002- then parseIntValue(iG[0])
1977+ else split(fE[as], "_")
1978+ let iN = if ((size(iI) > 0))
1979+ then parseIntValue(iI[0])
20031980 else 0
2004- let iM = if ((size(iG) > 1))
2005- then parseIntValue(iG[1])
1981+ let iO = if ((size(iI) > 1))
1982+ then parseIntValue(iI[1])
20061983 else 0
2007- let iN = if ((size(iG) > 2))
2008- then parseIntValue(iG[2])
1984+ let iP = if ((size(iI) > 2))
1985+ then parseIntValue(iI[2])
20091986 else 0
2010- if (if (if ((iL > 0))
1987+ if (if (if ((iN > 0))
20111988 then true
2012- else (iM > 0))
1989+ else (iO > 0))
20131990 then true
2014- else (iN > 0))
1991+ else (iP > 0))
20151992 then throw("You have to use own Medical Kit")
20161993 else {
2017- let iO = getString(bE, aU())
2018- let iP = if (isDefined(iO))
2019- then split(value(iO), "_")
1994+ let iQ = getString(bE, aU())
1995+ let iR = if (isDefined(iQ))
1996+ then split(value(iQ), "_")
20201997 else nil
2021- let iQ = if ((size(iP) > 0))
2022- then parseIntValue(iP[0])
1998+ let iS = if ((size(iR) > 0))
1999+ then parseIntValue(iR[0])
20232000 else 0
2024- if ((0 >= iQ))
2001+ if ((0 >= iS))
20252002 then throw("There are no Medical Kits L1 at Emergency Service storage")
20262003 else {
2027- let iK = (iF + bY[0])
2028- let iR = makeString([toString((iQ - 1)), removeByIndex(iP, 0)], "_")
2004+ let iM = (iH + bY[0])
2005+ let iT = makeString([toString((iS - 1)), removeByIndex(iR, 0)], "_")
20292006 let aY = split(ac[0], "_")
2030- let iS = aX(aY)
2031- let iT = fraction((iS * Y), X, (10 * af))
2032- if ((im.amount != iT))
2033- then throw(("Payment attached should be " + toString(iT)))
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)))
20342011 else {
2035- let dd = bO(invoke(bE, "updateEsStorage", [iR], [AttachedPayment(bb, iT)]))
2036- $Tuple2(([IntegerEntry(gr, iK), il] ++ hr(p, A)._1), dd)
2012+ let dd = bO(invoke(bE, "updateEsStorage", [iT], [AttachedPayment(bb, iV)]))
2013+ $Tuple2(([IntegerEntry(gt, iM), in] ++ ht(p, A)._1), dd)
20372014 }
20382015 }
20392016 }
20402017 }
20412018 }
20422019 }
20432020 }
20442021
20452022
20462023
2047-@Callable(ei)
2048-func updateBackpack (p,iU) = if ((ei.caller != bE))
2024+@Callable(ek)
2025+func updateBackpack (p,iW) = if ((ek.caller != bE))
20492026 then throw("permission denied")
2050- else $Tuple2([StringEntry(aO(p), iU)], iU)
2051-
2052-
2053-
2054-@Callable(ei)
2027+ else $Tuple2([StringEntry(aO(p), iW)], iW)
2028+
2029+
2030+
2031+@Callable(ek)
20552032 func buySLand () = {
2056- let il = ii(ei)
2057- if ((size(ei.payments) != 1))
2033+ let in = ik(ek)
2034+ if ((size(ek.payments) != 1))
20582035 then throw("Exactly one payment required")
20592036 else {
2060- let im = value(ei.payments[0])
2061- if ((im.assetId != bb))
2037+ let io = value(ek.payments[0])
2038+ if ((io.assetId != bb))
20622039 then throw("Allowed USDT payment only!")
2063- else if ((im.amount != ce))
2040+ else if ((io.amount != ce))
20642041 then throw(("Payment attached should be " + toString(ce)))
20652042 else {
2066- let dd = fX(ei.caller, ei.transactionId)
2067- $Tuple2((((dd._1 :+ ScriptTransfer(bE, im.amount, bb)) ++ hx(toString(ei.caller), C)._1) :+ il), dd._2._1)
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)
20682045 }
20692046 }
20702047 }
20712048
20722049
20732050
2074-@Callable(ei)
2075-func expedition (gg,gh) = {
2076- let il = ii(ei)
2077- if ((size(ei.payments) != 0))
2051+@Callable(ek)
2052+func expedition (gi,gj) = {
2053+ let in = ik(ek)
2054+ if ((size(ek.payments) != 0))
20782055 then throw("No payments required")
20792056 else {
2080- let dd = gx(ei.caller, ei.transactionId, gg, gh)
2081- let p = valueOrErrorMessage(getString(aN(toString(ei.caller))), "You don't have a duck staked")
2082- $Tuple2(((dd._1 ++ hr(p, C)._1) :+ il), $Tuple2(dd._2, dd._3))
2083- }
2084- }
2085-
2086-
2087-
2088-@Callable(ei)
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)
20892066 func upgradeInfra (aF) = {
2090- let il = ii(ei)
2091- if ((size(ei.payments) != 0))
2067+ let in = ik(ek)
2068+ if ((size(ek.payments) != 0))
20922069 then throw("No payments required")
20932070 else {
2094- let dd = hf(true, ei.caller, 0, aF)
2095- let p = valueOrErrorMessage(getString(aN(toString(ei.caller))), "You don't have a duck staked")
2096- $Tuple2(((dd._1 :+ il) ++ hr(p, fraction(D, dd._3, bi))._1), dd._2)
2097- }
2098- }
2099-
2100-
2101-
2102-@Callable(ei)
2103-func upgradeInfraUsdt (aF) = if ((ei.caller != this))
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))
21042081 then throw("Permission denied")
21052082 else {
2106- let il = ii(ei)
2107- if ((size(ei.payments) != 1))
2083+ let in = ik(ek)
2084+ if ((size(ek.payments) != 1))
21082085 then throw("Exactly one payment required")
21092086 else {
2110- let im = value(ei.payments[0])
2111- if ((im.assetId != bb))
2087+ let io = value(ek.payments[0])
2088+ if ((io.assetId != bb))
21122089 then throw("Allowed USDT payment only!")
21132090 else {
2114- let dd = hf(false, ei.caller, im.amount, aF)
2115- $Tuple2(((dd._1 :+ ScriptTransfer(bE, im.amount, bb)) :+ il), dd._2)
2091+ let dd = hh(false, ek.caller, io.amount, aF)
2092+ $Tuple2(((dd._1 :+ ScriptTransfer(bE, io.amount, bb)) :+ in), dd._2)
21162093 }
21172094 }
21182095 }
21192096
21202097
21212098
2122-@Callable(ei)
2123-func activateArtifact (iV,iW) = {
2124- let il = ii(ei)
2125- if ((size(ei.payments) != 0))
2099+@Callable(ek)
2100+func activateArtifact (iX,iY) = {
2101+ let in = ik(ek)
2102+ if ((size(ek.payments) != 0))
21262103 then throw("No payments required")
21272104 else {
2128- let b = toString(ei.caller)
2105+ let b = toString(ek.caller)
21292106 let dd = {
2130- let bc = iV
2107+ let bc = iX
21312108 if (("PRESALE" == bc))
2132- then hF(b, iW)
2109+ then hH(b, iY)
21332110 else if (("ONBOARD" == bc))
2134- then hy(b)
2111+ then hA(b)
21352112 else throw("Unknown artifact")
21362113 }
2137- (dd :+ il)
2138- }
2139- }
2140-
2141-
2142-
2143-@Callable(ei)
2144-func mergeLands (hK) = {
2145- let il = ii(ei)
2146- if ((size(ei.payments) != 0))
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))
21472124 then throw("No payments required")
21482125 else {
2149- let dd = ig(true, toString(ei.caller), 0, hK, ei.transactionId)
2150- $Tuple2(((dd._1 :+ il) ++ hx(toString(ei.caller), E)._1), dd._2)
2151- }
2152- }
2153-
2154-
2155-
2156-@Callable(ei)
2157-func mergeLandsUsdt (hK) = {
2158- let il = ii(ei)
2159- if ((size(ei.payments) != 1))
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))
21602137 then throw("Exactly one payment required")
21612138 else {
2162- let im = value(ei.payments[0])
2163- if ((im.assetId != bb))
2139+ let io = value(ek.payments[0])
2140+ if ((io.assetId != bb))
21642141 then throw("Allowed USDT payment only!")
21652142 else {
2166- let dd = ig(false, toString(ei.caller), im.amount, hK, ei.transactionId)
2167- $Tuple2(((dd._1 :+ ScriptTransfer(bE, im.amount, bb)) :+ il), dd._2)
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)
21682145 }
21692146 }
21702147 }
21712148
21722149
21732150
2174-@Callable(ei)
2175-func cargoExchange (iX,aF) = {
2176- let il = ii(ei)
2177- if ((size(ei.payments) != 0))
2151+@Callable(ek)
2152+func cargoExchange (iZ,aF) = {
2153+ let in = ik(ek)
2154+ if ((size(ek.payments) != 0))
21782155 then throw("No payments required")
21792156 else {
2180- let fB = split_4C(iX, ":")
2181- let b = toString(ei.originCaller)
2182- let gN = value(assetInfo(fromBase58String(aF)))
2183- let gO = ax(aF)
2184- if (!(isDefined(getInteger(gO))))
2185- then throw((gN.name + " is not staked"))
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"))
21862163 else {
2187- let gQ = valueOrErrorMessage(getString(au(aF)), (("NFT " + gN.name) + " is orphaned"))
2188- if ((gQ != b))
2164+ let gS = valueOrErrorMessage(getString(au(aF)), (("NFT " + gP.name) + " is orphaned"))
2165+ if ((gS != b))
21892166 then throw((P + " is not yours"))
21902167 else {
2191- let fk = (bT(split(gN.description, "_")[bI]) / bj)
2192- let fl = valueOrElse(getInteger(ay(aF)), 0)
2168+ let fm = (bT(split(gP.description, "_")[bI]) / bj)
2169+ let fn = valueOrElse(getInteger(ay(aF)), 0)
21932170 let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
2194- let gK = valueOrElse(getString(aP(p)), W)
2195- let gL = split(value(gK), "_")
2196- if ((gL[aV] != "L"))
2197- then throw((("Duck location type is " + gL[aV]) + ", but should be L"))
2198- else if ((gL[aW] != aF))
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))
21992176 then throw(("Duck should be on the land " + aF))
22002177 else {
2201- let fj = aE(aF)
2202- let eW = fi(fj, fk, fl)
2203- let eR = aO(p)
2204- let fC = eQ(eR)
2205- let dd = fA(fB, eW, fC)
2206- let fr = split(eW[ak], "_")
2207- let hc = (parseIntValue(fr[am]) + dd._7)
2208- let hd = (parseIntValue(fr[an]) - dd._7)
2209-[StringEntry(eR, makeString_2C([fC[ap], dd._4, dd._5, dd._6], ":")), StringEntry(fj, makeString_2C([eW[ag], dd._1, dd._2, dd._3, makeString([fr[al], toString(hc), toString(hd), fr[ao]], "_")], ":")), il]
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]
22102187 }
22112188 }
22122189 }
22132190 }
22142191 }
22152192
22162193
22172194
2218-@Callable(ei)
2219-func saveWarehouse (fn,aF) = if ((ei.caller != bE))
2195+@Callable(ek)
2196+func saveWarehouse (fp,aF) = if ((ek.caller != bE))
22202197 then throw("Access denied")
22212198 else {
2222- let fj = aE(aF)
2223- let fo = split_4C(fn, ":")
2224- if ((size(fo) != 5))
2199+ let fl = aE(aF)
2200+ let fq = split_4C(fp, ":")
2201+ if ((size(fq) != 5))
22252202 then throw("warehouse string should contain 4 ':' separators")
22262203 else {
2227- let iY = split(fo[ak], "_")[al]
2228- let hc = eV(fo)
2229- let iZ = eT(fo[ag])
2230- let hd = ((iZ - parseIntValue(iY)) - hc)
2231- let ja = makeString_2C([fo[ag], fo[ah], fo[ai], fo[aj], makeString([iY, toString(hc), toString(hd), toString(iZ)], "_")], ":")
2232- $Tuple2([StringEntry(fj, ja)], ja)
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)
22332210 }
22342211 }
22352212
22362213
22372214
2238-@Callable(ei)
2239-func fixWarehouseFormat (aF) = if ((ei.caller != bC))
2215+@Callable(ek)
2216+func fixWarehouseFormat (aF) = if ((ek.caller != bC))
22402217 then throw("Access denied")
22412218 else {
2242- let fj = aE(aF)
2243- let gN = value(assetInfo(fromBase58String(aF)))
2244- let fk = (bT(split(gN.description, "_")[bI]) / bj)
2245- let fl = valueOrElse(getInteger(ay(aF)), 0)
2246- let fo = fi(fj, fk, fl)
2247- let iY = bR(invoke(bE, "recalcLockedVolumeREADONLY", [aF, fo], nil))
2248- let hc = eV(fo)
2249- let iZ = eT(fo[ag])
2250- let hd = ((iZ - iY) - hc)
2251- let ja = makeString_2C([fo[ag], fo[ah], fo[ai], fo[aj], makeString([toString(iY), toString(hc), toString(hd), toString(iZ)], "_")], ":")
2252- $Tuple2([StringEntry(fj, ja)], ja)
2253- }
2254-
2255-
2256-
2257-@Callable(ei)
2258-func fixStakedPieces (bp) = if ((ei.caller != bC))
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))
22592236 then throw("Access denied")
22602237 else {
2261- let ib = if ((bp == ""))
2238+ let id = if ((bp == ""))
22622239 then 0
22632240 else {
2264- let hW = getString(bD, bM(bp))
2265- let hR = if (isDefined(hW))
2266- then split_51C(value(hW), "_")
2241+ let hY = getString(bD, bM(bp))
2242+ let hT = if (isDefined(hY))
2243+ then split_51C(value(hY), "_")
22672244 else nil
2268- func jb (cL,aF) = {
2269- let gN = value(assetInfo(fromBase58String(aF)))
2270- let bU = split(gN.description, "_")[bI]
2245+ func jd (cL,aF) = {
2246+ let gP = value(assetInfo(fromBase58String(aF)))
2247+ let bU = split(gP.description, "_")[bI]
22712248 (cL + bT(bU))
22722249 }
22732250
2274- let cN = hR
2251+ let cN = hT
22752252 let cO = size(cN)
22762253 let cP = 0
22772254 func cQ (cR,cS) = if ((cS >= cO))
22782255 then cR
2279- else jb(cR, cN[cS])
2256+ else jd(cR, cN[cS])
22802257
22812258 func cT (cR,cS) = if ((cS >= cO))
22822259 then cR
22832260 else throw("List size exceeds 100")
22842261
22852262 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)
22862263 }
2287- $Tuple2([IntegerEntry(bN(bp), ib)], ib)
2288- }
2289-
2290-
2291-
2292-@Callable(ei)
2293-func setCustomName (av,hT,aA) = {
2294- let il = ii(ei)
2295- if ((size(ei.payments) != 1))
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))
22962273 then throw("Exactly one payment required")
22972274 else {
2298- let im = value(ei.payments[0])
2299- if ((im.assetId != bb))
2275+ let io = value(ek.payments[0])
2276+ if ((io.assetId != bb))
23002277 then throw("Allowed USDT payment only!")
2301- else if ((im.amount != ca))
2278+ else if ((io.amount != ca))
23022279 then throw(("Payment should be " + toString(ca)))
2303- else if (contains(hT, "__"))
2304- then throw(("Name should not contain '__': " + hT))
2305- else if ((size(hT) > cb))
2280+ else if (contains(hV, "__"))
2281+ then throw(("Name should not contain '__': " + hV))
2282+ else if ((size(hV) > cb))
23062283 then throw(("Name too long, maxLength=" + toString(cb)))
23072284 else {
2308- let b = toString(ei.originCaller)
2309- let jc = {
2285+ let b = toString(ek.originCaller)
2286+ let je = {
23102287 let bc = aA
23112288 if (("ACCOUNT" == bc))
23122289 then {
2313- let jd = cv(hT)
2314- let je = getString(jd)
2315- if (isDefined(je))
2316- then throw(("Name already registered: " + hT))
2290+ let jf = cv(hV)
2291+ let jg = getString(jf)
2292+ if (isDefined(jg))
2293+ then throw(("Name already registered: " + hV))
23172294 else {
2318- let jf = aH(b)
2319- let jg = getString(jf)
2320- let jh = if (isDefined(jg))
2321- then [DeleteEntry(cv(value(jg)))]
2295+ let jh = aH(b)
2296+ let ji = getString(jh)
2297+ let jj = if (isDefined(ji))
2298+ then [DeleteEntry(cv(value(ji)))]
23222299 else nil
2323- (((jh :+ StringEntry(jf, hT)) :+ StringEntry(jd, b)) ++ hx(b, B)._1)
2300+ (((jj :+ StringEntry(jh, hV)) :+ StringEntry(jf, b)) ++ hz(b, B)._1)
23242301 }
23252302 }
23262303 else if (("LAND" == bc))
23272304 then {
2328- let gN = value(assetInfo(fromBase58String(av)))
2329- let gO = ax(av)
2330- if (!(isDefined(getInteger(gO))))
2331- then throw((gN.name + " is not staked"))
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"))
23322309 else {
2333- let gQ = valueOrErrorMessage(getString(au(av)), (("NFT " + gN.name) + " is orphaned"))
2334- if ((gQ != b))
2310+ let gS = valueOrErrorMessage(getString(au(av)), (("NFT " + gP.name) + " is orphaned"))
2311+ if ((gS != b))
23352312 then throw((P + " is not yours"))
23362313 else {
2337- let jd = cp(hT)
2338- let je = getString(jd)
2339- if (isDefined(je))
2340- then throw(("Name already registered: " + hT))
2314+ let jf = cp(hV)
2315+ let jg = getString(jf)
2316+ if (isDefined(jg))
2317+ then throw(("Name already registered: " + hV))
23412318 else {
2342- let ji = aw(av)
2343- let jg = getString(ji)
2344- let jh = if (isDefined(jg))
2345- then [DeleteEntry(cp(value(jg)))]
2319+ let jk = aw(av)
2320+ let ji = getString(jk)
2321+ let jj = if (isDefined(ji))
2322+ then [DeleteEntry(cp(value(ji)))]
23462323 else nil
2347- (((jh :+ StringEntry(ji, hT)) :+ StringEntry(jd, av)) ++ hx(b, B)._1)
2324+ (((jj :+ StringEntry(jk, hV)) :+ StringEntry(jf, av)) ++ hz(b, B)._1)
23482325 }
23492326 }
23502327 }
23512328 }
23522329 else if (("DUCK" == bc))
23532330 then {
2354- let gN = value(assetInfo(fromBase58String(av)))
2355- let gO = ax(av)
2356- if (if (!(isDefined(getInteger(gO))))
2331+ let gP = value(assetInfo(fromBase58String(av)))
2332+ let gQ = ax(av)
2333+ if (if (!(isDefined(getInteger(gQ))))
23572334 then true
23582335 else !(isDefined(getString(aN(b)))))
2359- then throw((gN.name + " is not staked"))
2336+ then throw((gP.name + " is not staked"))
23602337 else {
2361- let gQ = valueOrErrorMessage(getString(aM(av)), (("NFT " + gN.name) + " is orphaned"))
2362- if ((gQ != b))
2338+ let gS = valueOrErrorMessage(getString(aM(av)), (("NFT " + gP.name) + " is orphaned"))
2339+ if ((gS != b))
23632340 then throw((Q + " is not yours"))
23642341 else {
2365- let jd = cu(hT)
2366- let je = getString(jd)
2367- if (isDefined(je))
2368- then throw(("Name already registered: " + hT))
2342+ let jf = cu(hV)
2343+ let jg = getString(jf)
2344+ if (isDefined(jg))
2345+ then throw(("Name already registered: " + hV))
23692346 else {
2370- let ji = aG(av)
2371- let jg = getString(ji)
2372- let jh = if (isDefined(jg))
2373- then [DeleteEntry(cu(value(jg)))]
2347+ let jk = aG(av)
2348+ let ji = getString(jk)
2349+ let jj = if (isDefined(ji))
2350+ then [DeleteEntry(cu(value(ji)))]
23742351 else nil
2375- (((jh :+ StringEntry(ji, hT)) :+ StringEntry(jd, av)) ++ hr(av, B)._1)
2352+ (((jj :+ StringEntry(jk, hV)) :+ StringEntry(jf, av)) ++ ht(av, B)._1)
23762353 }
23772354 }
23782355 }
23792356 }
23802357 else throw("Unknown entity type")
23812358 }
2382- $Tuple2(((jc :+ ScriptTransfer(bE, im.amount, bb)) :+ il), 0)
2359+ $Tuple2(((je :+ ScriptTransfer(bE, io.amount, bb)) :+ in), 0)
23832360 }
23842361 }
23852362 }
23862363
23872364
23882365
2389-@Callable(ei)
2390-func setReferrals (jj,jk) = if ((ei.callerPublicKey != bX))
2366+@Callable(ek)
2367+func setReferrals (jl,jm) = if ((ek.callerPublicKey != bX))
23912368 then throw("Permission denied")
23922369 else {
2393- let il = ii(ei)
2394- if ((size(ei.payments) != 0))
2370+ let in = ik(ek)
2371+ if ((size(ek.payments) != 0))
23952372 then throw("No payments required")
2396- else if (!(isDefined(addressFromString(jj))))
2397- then throw(("Invalid address: " + jj))
2398- else if (!(isDefined(addressFromString(jk))))
2399- then throw(("Invalid address: " + jk))
2373+ else if (!(isDefined(addressFromString(jl))))
2374+ then throw(("Invalid address: " + jl))
2375+ else if (!(isDefined(addressFromString(jm))))
2376+ then throw(("Invalid address: " + jm))
24002377 else {
2401- let jl = cw()
2402- let jm = getString(jl)
2403- let jn = if (isDefined(jm))
2404- then split_4C(value(jm), "_")
2378+ let jn = cw()
2379+ let jo = getString(jn)
2380+ let jp = if (isDefined(jo))
2381+ then split_4C(value(jo), "_")
24052382 else nil
2406- if (containsElement(jn, jk))
2407- then throw((jk + " is not newbie (already has referrals)"))
2383+ if (containsElement(jp, jm))
2384+ then throw((jm + " is not newbie (already has referrals)"))
24082385 else {
2409- let hz = aI(jk)
2410- let hA = getString(hz)
2411- if (if (isDefined(hA))
2412- then isDefined(addressFromString(value(hA)))
2386+ let hB = aI(jm)
2387+ let hC = getString(hB)
2388+ if (if (isDefined(hC))
2389+ then isDefined(addressFromString(value(hC)))
24132390 else false)
2414- then throw(((jk + " already has refBy: ") + value(hA)))
2391+ then throw(((jm + " already has refBy: ") + value(hC)))
24152392 else {
2416- let jo = aL(jj)
2417- let jp = getString(jo)
2418- let jq = if (isDefined(jp))
2419- then split_4C(value(jp), "_")
2393+ let jq = aL(jl)
2394+ let jr = getString(jq)
2395+ let js = if (isDefined(jr))
2396+ then split_4C(value(jr), "_")
24202397 else nil
2421- if (containsElement(jq, jk))
2422- then throw((((jj + " already contains ") + jk) + " within referrals"))
2398+ if (containsElement(js, jm))
2399+ then throw((((jl + " already contains ") + jm) + " within referrals"))
24232400 else {
2424- let jr = makeString_2C((jq :+ jk), "_")
2425- let js = if (containsElement(jn, jj))
2426- then value(jm)
2427- else makeString_2C((jn :+ jj), "_")
2428- $Tuple2([StringEntry(hz, jj), StringEntry(jo, jr), StringEntry(jl, js), il], 0)
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)
24292406 }
24302407 }
24312408 }
24322409 }
24332410 }
24342411
24352412
24362413
2437-@Callable(ei)
2438-func distributePoints (jt,ju,jv,jw,jx) = {
2439- let il = ii(ei)
2440- if ((size(ei.payments) != 0))
2414+@Callable(ek)
2415+func distributePoints (jv,jw,jx,jy,jz) = {
2416+ let in = ik(ek)
2417+ if ((size(ek.payments) != 0))
24412418 then throw("No payments required")
24422419 else {
2443- let b = toString(ei.originCaller)
2420+ let b = toString(ek.originCaller)
24442421 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)
24482423 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"))
24532430 else {
2454- let jE = o(p)
2455- let jF = split(valueOrElse(getString(bD, jE), "0_0_0_0_0"), "_")
2456- let jG = (jz - jD)
2457- $Tuple2([IntegerEntry(jy, if ((0 > jG))
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))
24582435 then 0
2459- else jG), IntegerEntry(jA, if ((0 > jG))
2460- then (jB + jG)
2461- else jB), StringEntry(jE, makeString([toString((parseIntValue(jF[g]) + jt)), toString((parseIntValue(jF[h]) + ju)), toString((parseIntValue(jF[i]) + jv)), toString((parseIntValue(jF[j]) + jw)), toString((parseIntValue(jF[k]) + jx))], "_")), il], 0)
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)
24622439 }
24632440 }
24642441 }
24652442
24662443
24672444
2468-@Callable(ei)
2469-func splitByGlobalWeightsREADONLY (fy) = $Tuple2(nil, cU(fy))
2470-
2471-
2472-
2473-@Callable(ei)
2474-func splitByGlobalAndLocalWeightsREADONLY (jH,jI,el) = {
2475- let ee = ek(el)
2476- $Tuple2(nil, $Tuple2(cU(jH), cF(jI, ee)))
2477- }
2478-
2479-
2480-
2481-@Callable(ei)
2482-func getBackpackREADONLY (p) = $Tuple2(nil, makeString(eQ(aO(p)), ":"))
2483-
2484-
2485-
2486-@Callable(ei)
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)
24872464 func getWarehouseREADONLY (aF) = {
2488- let gN = value(assetInfo(fromBase58String(aF)))
2489- let fk = (bT(split(gN.description, "_")[bI]) / bj)
2490- let fl = valueOrElse(getInteger(ay(aF)), 0)
2491- $Tuple2(nil, makeString_2C(fi(aE(aF), fk, fl), ":"))
2492- }
2493-
2494-
2495-
2496-@Callable(ei)
2497-func saveLastTx () = if (if ((ei.caller != bG))
2498- then (ei.caller != bE)
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)
24992476 else false)
25002477 then throw("Access denied")
2501- else $Tuple2([ii(ei)], 42)
2502-
2503-
2504-
2505-@Callable(ei)
2506-func updateDuckStats (p,hs) = if ((ei.caller != bE))
2478+ else $Tuple2([ik(ek)], 42)
2479+
2480+
2481+
2482+@Callable(ek)
2483+func updateDuckStats (p,hu) = if ((ek.caller != bE))
25072484 then throw("Access denied")
2508- else hr(p, hs)
2509-
2510-
2511-
2512-@Callable(ei)
2513-func updateAccStats (b,hs) = if ((ei.caller != bE))
2485+ else ht(p, hu)
2486+
2487+
2488+
2489+@Callable(ek)
2490+func updateAccStats (b,hu) = if ((ek.caller != bE))
25142491 then throw("Access denied")
2515- else hx(b, hs)
2516-
2517-
2518-
2519-@Callable(ei)
2520-func equipDuck (jJ) = {
2521- let il = ii(ei)
2522- if ((size(ei.payments) != 0))
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))
25232500 then throw("No payments required")
25242501 else {
2525- let b = toString(ei.originCaller)
2502+ let b = toString(ek.originCaller)
25262503 let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
2527- let jK = t(p)
2528- let jL = split(valueOrElse(getString(jK), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
2529- let eR = aO(p)
2530- let fC = eQ(eR)
2531- let jM = split(jJ, "_")
2532- if ((size(jM) != l))
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))
25332510 then throw("Wrong equipment string")
25342511 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)
25422517 }
25432518 }
25442519 }
25452520
25462521
25472522
2548-@Callable(ei)
2549-func test () = if ((ei.caller != this))
2523+@Callable(ek)
2524+func test () = if ((ek.caller != this))
25502525 then throw("Access denied")
25512526 else {
25522527 let dq = du("")
25532528 let dA = dx(dq)
25542529 $Tuple2(nil, dA)
25552530 }
25562531
25572532

github/deemru/w8io/03bedc9 
833.59 ms