tx · 8eSJCWgEJfRnCYctmbGMCRkmqG78RysEbLFcwPJsKuQE

3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep:  -0.05700000 Waves

2023.10.09 01:16 [2790248] smart account 3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep > SELF 0.00000000 Waves

{ "type": 13, "id": "8eSJCWgEJfRnCYctmbGMCRkmqG78RysEbLFcwPJsKuQE", "fee": 5700000, "feeAssetId": null, "timestamp": 1696803421734, "version": 2, "chainId": 84, "sender": "3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep", "senderPublicKey": "7v5L7QkXxfkirALdyqmox38QCsa9jtfAtgUfHTh34eWq", "proofs": [ "2Xd95K16bbkJDtSDNa8Ns2b25pn9emxzx7y9dno5sWDGvxE7dWu1qyeoYQij4TT6NdhavpSo5TjpiuvHxgVF5oHh" ], "script": "base64:BgKGAQgCEgQKAggYEgMKAQgSBAoCERESBAoCCAESAwoBARIFCgMREQgSBgoEEREICBIECgIRERIFCgMREQgSBgoEEREICBIDCgEREgMKARESBAoCEQgSBAoCAQESBAoCCAgSBQoDCAgIEgQKAggIEgUKAwgICBIDCgEREgMKAQgSAwoBARIDCgEIZwAHeHBUcmFkZQCQTgAHeHBDcmFmdACQTgAKeHBTZWxsVG9FcwCQTgAGeHBTaG9wAJBOAApMQU5EUFJFRklYAgRMQU5EAAZOVU1SRVMABgAPREVGQVVMVExPQ0FUSU9OAg9BZnJpY2FfRl9BZnJpY2EAEFJFU09VUkNFUFJJQ0VNSU4A1bUCAA1FU01BWFBBQ0tBR0VTAAoACUVTQlVZQ09FRgAEABVNSU5fVVNEVF9GRUVfREVMSVZFUlkA0IYDABdNSU5fVVNEVF9GRUVfREVMSVZFUlkxNQD4yQQAFVVTRFQyQUNSRVNfTVVMVElQTElFUgAKAAhyZXNUeXBlcwkAzAgCAgNPaWwJAMwIAgIDT3JlCQDMCAICBFdvb2QJAMwIAgIEU2FuZAkAzAgCAgRDbGF5CQDMCAICB09yZ2FuaWMFA25pbAAIbWF0VHlwZXMJAMwIAgIERnVlbAkAzAgCAgVNZXRhbAkAzAgCAgVQbGFuawkAzAgCAgVHbGFzcwkAzAgCAgdQbGFzdGljCQDMCAICB1Byb3RlaW4FA25pbAAJcHJvZFR5cGVzCQDMCAICEEZpcnN0IEFpZCBLaXQgTDEJAMwIAgIQRmlyc3QgQWlkIEtpdCBMMgkAzAgCAhBGaXJzdCBBaWQgS2l0IEwzCQDMCAICC0JhY2twYWNrIEwxCQDMCAICC0JhY2twYWNrIEwyCQDMCAICC0JhY2twYWNrIEwzCQDMCAICDkZvb2QgUmF0aW9uIEwxCQDMCAICDkZvb2QgUmF0aW9uIEwyCQDMCAICDkZvb2QgUmF0aW9uIEwzCQDMCAICC0pldCBQYWNrIEwxCQDMCAICC0pldCBQYWNrIEwyCQDMCAICC0pldCBQYWNrIEwzCQDMCAICCVNoaWVsZCBMMQkAzAgCAglTaGllbGQgTDIJAMwIAgIJU2hpZWxkIEwzCQDMCAICB01pbmUgTDEJAMwIAgIHTWluZSBMMgkAzAgCAgdNaW5lIEwzCQDMCAICB1RyYXAgTDEJAMwIAgIHVHJhcCBMMgkAzAgCAgdUcmFwIEwzBQNuaWwACmNvbnRpbmVudHMJAMwIAgIIQW1lcmljYXMJAMwIAgIGRXVyb3BlCQDMCAICBEFzaWEJAMwIAgIGQWZyaWNhCQDMCAICB09jZWFuaWEFA25pbAAJQ09FRkYyTUFUAICt4gQAEHByb2R1Y3Rpb25NYXRyaXgJAMwIAgIlOF84XzhfMTdfMTdfNDJfMTJfMF8zMF8wLDAsMCwwLDAsMCwwXwkAzAgCAiU4XzhfOF8xN18xN180Ml8yNF8wXzYwXzAsMCw1LDIsMCwwLDBfCQDMCAICJzhfOF84XzE3XzE3XzQyXzM2XzBfMTIwXzAsMCwxMCw0LDAsMCwwXwkAzAgCAik4XzE5XzE5XzhfMjdfMTlfMjZfMV8yMF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAik4XzE5XzE5XzhfMjdfMTlfNTJfMV80MF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAik4XzE5XzE5XzhfMjdfMTlfNzhfMV84MF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAiU4XzhfOF84XzhfNjBfMTNfMl8yXzAsMCwwLDAsMCwwLDBfMDExCQDMCAICJThfOF84XzhfOF82MF8yNl8yXzRfMCwwLDAsMCwwLDAsMF8wMTEJAMwIAgIlOF84XzhfOF84XzYwXzM5XzJfOF8wLDAsMCwwLDAsMCwwXzAxMQkAzAgCAikzMF8zMF8zXzE3XzE3XzNfMzBfM18zMF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAikzMF8zMF8zXzE3XzE3XzNfNjBfM181MF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAikzMF8zMF8zXzE3XzE3XzNfOTBfM183MF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAisxOF8xOF8xMF8xOF8xOF8xOF8xMV80XzEwXzAsMCwwLDAsMCwwLDBfMjAxCQDMCAICKzE4XzE4XzEwXzE4XzE4XzE4XzIyXzRfMjBfMCwwLDAsMCwwLDAsMF8yMDEJAMwIAgIrMThfMThfMTBfMThfMThfMThfMzNfNF8zMF8wLDAsMCwwLDAsMCwwXzIwMQkAzAgCAio0XzEzXzIyXzRfMzVfMjJfMjNfMF81MCwxLDBfMCwwLDAsMCwwLDAsMF8JAMwIAgIqNF8xM18yMl80XzM1XzIyXzQ2XzBfNTAsMSwxXzAsMiw1LDAsMCwwLDBfCQDMCAICKzRfMTNfMjJfNF8zNV8yMl82OV8wXzUwLDIsMV8wLDUsMTAsMCwwLDAsMF8JAMwIAgIqNV8yNV80MF81XzEwXzE1XzIwXzFfMzAsMSwxXzAsMCwwLDAsMCwwLDBfCQDMCAICKjVfMjVfNDBfNV8xMF8xNV80MF8xXzMwLDEsMl8yLDEsMywwLDAsMCwwXwkAzAgCAio1XzI1XzQwXzVfMTBfMTVfNjBfMV8zMCwxLDNfNSwyLDgsMCwwLDAsMF8FA25pbAAJcklkeENvZWZmAAYADXJJZHhDb250aW5lbnQABwAKUkVDSVBFU0laRQALAA5QUk9EVUNUUEtHU0laRQAKAAt3aElkeExldmVscwAAAAh3aElkeFJlcwABAAh3aElkeE1hdAACAAl3aElkeFByb2QAAwAJd2hJZHhMT0ZUAAQACXZvbExvY2tlZAAAAAh2b2xUb3RhbAADAApicElkeExldmVsAAAACGJwSWR4UmVzAAEACGJwSWR4TWF0AAIACWJwSWR4UHJvZAADAA9sb2NJZHhDb250aW5lbnQAAAAKbG9jSWR4VHlwZQABAAhsb2NJZHhJZAACARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBB2Fzc2V0SWQJAKwCAgIDbm9fBQdhc3NldElkARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQdhc3NldElkCQCsAgICA3N0XwUHYXNzZXRJZAEPa2V5QWRkcmVzc1JlZkJ5AQRhZGRyCQCsAgICCWFjY1JlZkJ5XwUEYWRkcgEUa2V5U3Rha2VkRHVja0J5T3duZXIBCW93bmVyQWRkcgkArAICAhJzdGFrZWREdWNrQnlPd25lcl8FCW93bmVyQWRkcgERa2V5QmFja3BhY2tCeUR1Y2sBC2R1Y2tBc3NldElkCQCsAgICCWJhY2tQYWNrXwULZHVja0Fzc2V0SWQBD2tleUR1Y2tMb2NhdGlvbgELZHVja0Fzc2V0SWQJAKwCAgINZHVja0xvY2F0aW9uXwULZHVja0Fzc2V0SWQBDmtleU9yZGVyQnlMYW5kAQtsYW5kQXNzZXRJZAkArAICAgpsYW5kT3JkZXJfBQtsYW5kQXNzZXRJZAEOa2V5RXNXYXJlaG91c2UAAhplbWVyZ2VuY3lXYXJlaG91c2VQcm9kdWN0cwAPZGVsaXZlcnlGdW5kS2V5AgxkZWxpdmVyeUZ1bmQAEWRlbGl2ZXJ5TG9ja2VkS2V5Ag5kZWxpdmVyeUxvY2tlZAESZ2V0UmVjaXBlTWF0ZXJpYWxzAQZyZWNpcGUJAGgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGcmVjaXBlBQlySWR4Q29lZmYFCUNPRUZGMk1BVAARS1NfQUxMT1dfREVMSVZFUlkGAAVjaGFpbgkAyQECCQDKAQIIBQR0aGlzBWJ5dGVzAAEAAQALdXNkdEFzc2V0SWQEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDABIITaerIIAz9O0bvKju6Lk7zJgt0LXfoHlqjUI/moD/+5AwkAAAIBAVQFByRtYXRjaDABIFWx2J9yh4Lv5eNbjawFq2XemkOhLxa7BfMat4el8cUYCQACAQINVW5rbm93biBjaGFpbgAVZGVmYXVsdFJlc3RBZGRyZXNzU3RyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAiMzUFFDdXZGYnZoNExrUFVucm5VMXozam5iQTFwOW0zV05odgMJAAACAQFUBQckbWF0Y2gwAiMzTXVta0dHenRDS0FYcFdEcXhrZGRvZnFYU1VicVFrdlNKeQkAAgECDVVua25vd24gY2hhaW4AA1NFUAICX18ABU1VTFQ1AKCNBgAFTVVMVDYAwIQ9AAVNVUxUOACAwtcvAAZNVUxUMTAAgMivoCUADk1JTlNIT1BQQVlNRU5UAKCNBgAFSVRFUjYJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAEPZ2V0U3RyaW5nT3JGYWlsAgdhZGRyZXNzA2tleQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFB2FkZHJlc3MFA2tleQkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQdhZGRyZXNzCQDMCAICAS4JAMwIAgUDa2V5CQDMCAICDyBpcyBub3QgZGVmaW5lZAUDbmlsAgAAEUlkeENmZ1N0YWtpbmdEYXBwAAEAFElkeENmZ0ludmVzdEZ1bmREYXBwAAYAD0lkeENmZ0FjcmVzRGFwcAAIAQprZXlSZXN0Q2ZnAAIOJXNfX3Jlc3RDb25maWcBDmtleVJlc3RBZGRyZXNzAAIMJXNfX3Jlc3RBZGRyARFyZWFkUmVzdENmZ09yRmFpbAEEcmVzdAkAvAkCCQEPZ2V0U3RyaW5nT3JGYWlsAgUEcmVzdAkBCmtleVJlc3RDZmcABQNTRVABGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIHcmVzdENmZwNpZHgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFB3Jlc3RDZmcFA2lkeAkArAICAipSZXN0IGNmZyBkb2Vzbid0IGNvbnRhaW4gYWRkcmVzcyBhdCBpbmRleCAJAKQDAQUDaWR4AAxyZXN0Q29udHJhY3QJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkBDmtleVJlc3RBZGRyZXNzAAUVZGVmYXVsdFJlc3RBZGRyZXNzU3RyAAdyZXN0Q2ZnCQERcmVhZFJlc3RDZmdPckZhaWwBBQxyZXN0Q29udHJhY3QAD3N0YWtpbmdDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFEUlkeENmZ1N0YWtpbmdEYXBwABJpbnZlc3RGdW5kQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRRJZHhDZmdJbnZlc3RGdW5kRGFwcAANYWNyZXNDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFD0lkeENmZ0FjcmVzRGFwcAEIYXNTdHJpbmcBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwBQFzCQACAQIYZmFpbCB0byBjYXN0IGludG8gU3RyaW5nAQVhc0ludAEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAgNJbnQEAW4FByRtYXRjaDAFAW4JAAIBAhVmYWlsIHRvIGNhc3QgaW50byBJbnQBCmtleUJsb2NrZWQAAhBjb250cmFjdHNCbG9ja2VkAQpmaXhlZFBvaW50AgN2YWwIZGVjaW1hbHMEBnRlblBvdwkAbAYACgAABQhkZWNpbWFscwAAAAAFBERPV04EB2xvd1BhcnQJAKQDAQkAagIFA3ZhbAUGdGVuUG93BAZ6ZXJvZXMJALACAgkApAMBBQZ0ZW5Qb3cJAGQCAAEJALECAQUHbG93UGFydAkArAICCQCsAgIJAKwCAgkApAMBCQBpAgUDdmFsBQZ0ZW5Qb3cCAS4FBnplcm9lcwUHbG93UGFydAATRkFDVE9SWU1BWFdBUkVIT1VTRQCAyK+gJQAOU0VMTE1VTFRJUExJRVIAyAEADUJVWU1VTFRJUExJRVIArAIACkFVQ1RJT05GRUUAkE4ADERFTElWRVJZX0ZFRQCQTgAOREVMSVZFUllfRkVFMTUAmHUBHmtleUZhY3RvcnlXYXJlaG91c2VCeUlkQW5kVHlwZQIJZmFjdG9yeUlkB3Jlc1R5cGUJAKwCAgkArAICCQCsAgICG2ZhY3RvcnlXaEJ5Q29udGluZW50QW5kUmVzXwUJZmFjdG9yeUlkAgFfCQCkAwEFB3Jlc1R5cGUACW9yZElkeFJlcwAAAAlvcmRJZHhNYXQAAQAKb3JkSWR4UHJvZAACAQhnZXRPcmRlcgEGb3JkS2V5BAFwCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUGb3JkS2V5AjAwQDBfMEAwXzBAMF8wQDBfMEAwXzBAMDowQDBfMEAwXzBAMF8wQDBfMEAwXzBAMDoCAToJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQFwBQlvcmRJZHhSZXMCAV8FBk5VTVJFUwkAkQMCBQFwBQlvcmRJZHhSZXMCFzBAMF8wQDBfMEAwXzBAMF8wQDBfMEAwCQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUBcAUJb3JkSWR4TWF0AgFfBQZOVU1SRVMJAJEDAgUBcAUJb3JkSWR4TWF0AhcwQDBfMEAwXzBAMF8wQDBfMEAwXzBAMAkAzAgCCQCRAwIFAXAFCm9yZElkeFByb2QFA25pbAEIdG9Wb2x1bWUDBmFtb3VudAdwa2dTaXplCWlzUHJvZHVjdAMFCWlzUHJvZHVjdAQEcGtncwMJAGcCBQZhbW91bnQAAAkAaQIJAGUCCQBkAgUGYW1vdW50BQdwa2dTaXplAAEFB3BrZ1NpemUJAQEtAQkAaQIJAGUCCQBkAgkBAS0BBQZhbW91bnQFB3BrZ1NpemUAAQUHcGtnU2l6ZQkAaAIFBHBrZ3MFBU1VTFQ4BQZhbW91bnQBDHNlbGxJbnRlcm5hbAQFbG9jSWQHcmVzVHlwZQZhbW91bnQIbWluUHJpY2UEBXdoS2V5CQEea2V5RmFjdG9yeVdhcmVob3VzZUJ5SWRBbmRUeXBlAgUFbG9jSWQFB3Jlc1R5cGUEAncwCQELdmFsdWVPckVsc2UCCQCfCAEFBXdoS2V5AAAEAnIwAwkAZgIFAncwBRNGQUNUT1JZTUFYV0FSRUhPVVNFAAADCQBmAgkAZAIFAncwBQZhbW91bnQFE0ZBQ1RPUllNQVhXQVJFSE9VU0UJAGUCBRNGQUNUT1JZTUFYV0FSRUhPVVNFBQJ3MAUGYW1vdW50BAx1c2R0UmVjZWl2ZWQJAGQCCQBrAwUCcjAJAGUCCQBoAgUOU0VMTE1VTFRJUExJRVIFEFJFU09VUkNFUFJJQ0VNSU4JAGsDCQBkAgkAaAIAZAUCdzAJAGgCADIFAnIwBRBSRVNPVVJDRVBSSUNFTUlOBRNGQUNUT1JZTUFYV0FSRUhPVVNFBQZNVUxUMTAJAGsDCQBlAgUGYW1vdW50BQJyMAUQUkVTT1VSQ0VQUklDRU1JTgUFTVVMVDgEBW1pbjk5CQBlAgUIbWluUHJpY2UJAGkCBQhtaW5QcmljZQBkAwkAZgIJAGgCBQVtaW45OQUGYW1vdW50CQBoAgUMdXNkdFJlY2VpdmVkBQVNVUxUOAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIPQWN0dWFsIHByaWNlID0gCQCkAwEFDHVzZHRSZWNlaXZlZAIDIC8gCQCkAwEFBmFtb3VudAIOIDwgbWluUHJpY2UgPSAJAKQDAQUIbWluUHJpY2UCAywgKAUFbG9jSWQCAiwgCQCRAwIFCHJlc1R5cGVzBQdyZXNUeXBlAgEpCQCUCgIJAQxJbnRlZ2VyRW50cnkCBQV3aEtleQkAZAIFAncwBQZhbW91bnQFDHVzZHRSZWNlaXZlZAELYnV5SW50ZXJuYWwEBWxvY0lkB21hdFR5cGUGYW1vdW50CG1heFByaWNlBAV3aEtleQkBHmtleUZhY3RvcnlXYXJlaG91c2VCeUlkQW5kVHlwZQIFBWxvY0lkBQdtYXRUeXBlBAJ3MAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQV3aEtleQAABAJtMQMJAGYCBQJ3MAUTRkFDVE9SWU1BWFdBUkVIT1VTRQkAlwMBCQDMCAIFBmFtb3VudAkAzAgCCQBlAgUCdzAFE0ZBQ1RPUllNQVhXQVJFSE9VU0UFA25pbAAABAJtMAkAlwMBCQDMCAIFAncwCQDMCAIJAGUCBQZhbW91bnQFAm0xBQNuaWwEAW0JAGQCBQJtMAUCbTEEBXcwbWluCQCXAwEJAMwIAgUCdzAJAMwIAgUTRkFDVE9SWU1BWFdBUkVIT1VTRQUDbmlsBAl1c2R0U3BlbnQJAGQCCQBrAwUCbTAJAGUCCQBoAgUNQlVZTVVMVElQTElFUgUQUkVTT1VSQ0VQUklDRU1JTgkAawMJAGUCCQBoAgBkBQV3MG1pbgkAaAIAMgUCbTAFEFJFU09VUkNFUFJJQ0VNSU4FE0ZBQ1RPUllNQVhXQVJFSE9VU0UFBk1VTFQxMAkAawMFAm0xCQBoAgACBRBSRVNPVVJDRVBSSUNFTUlOBQVNVUxUOAQGbWF4MTAxCQBkAgUIbWF4UHJpY2UJAGkCBQhtYXhQcmljZQBkAwkAZgIJAGgCBQl1c2R0U3BlbnQFBU1VTFQ4CQBoAgUGbWF4MTAxBQFtCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg9BY3R1YWwgcHJpY2UgPSAJAKQDAQUJdXNkdFNwZW50AgMgLyAJAKQDAQUBbQIOID4gbWF4UHJpY2UgPSAJAKQDAQUIbWF4UHJpY2UCAywgKAUFbG9jSWQCAiwgCQCRAwIFCG1hdFR5cGVzBQdtYXRUeXBlAgEpCQCVCgMJAQxJbnRlZ2VyRW50cnkCBQV3aEtleQkAZQIFAncwBQFtBQl1c2R0U3BlbnQFAW0BC2dldEJhY2twYWNrAQVicEtleQQBcAkAvAkCCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAUFYnBLZXkCGjA6MF8wXzBfMF8wXzA6MF8wXzBfMF8wXzA6AgE6CQDMCAIJAKQDAQkBC3ZhbHVlT3JFbHNlAgkAtgkBCQCRAwIFAXAFCmJwSWR4TGV2ZWwAAAkAzAgCAwkAAAIJAJADAQkAtQkCCQCRAwIFAXAFCGJwSWR4UmVzAgFfBQZOVU1SRVMJAJEDAgUBcAUIYnBJZHhSZXMCCzBfMF8wXzBfMF8wCQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUBcAUIYnBJZHhNYXQCAV8FBk5VTVJFUwkAkQMCBQFwBQhicElkeE1hdAILMF8wXzBfMF8wXzAJAMwIAgkAkQMCBQFwBQlicElkeFByb2QFA25pbAEMY2hlY2tCbG9ja2VkAAMJAQt2YWx1ZU9yRWxzZQIJAJsIAgUPc3Rha2luZ0NvbnRyYWN0CQEKa2V5QmxvY2tlZAAHCQACAQIfQ29udHJhY3RzIGFyZSB1bmRlciBtYWludGVuYW5jZQUEdW5pdAEGcHJvbG9nAAkBBWFzSW50AQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCCnNhdmVMYXN0VHgFA25pbAUDbmlsAQlzZXRDb21tb24CA2FjYw9pZ25vcmVkSXRlcmF0b3IEAWoIBQNhY2MCXzEEBGl0ZW0DCQBmAgkAkAMBCAUDYWNjA18xMAUBagkAkQMCCAUDYWNjA18xMAUBagIDMEAwBAZpc1Byb2QIBQNhY2MCXzgECWl0ZW1QYXJ0cwkAtQkCBQRpdGVtAgFAAwkBAiE9AgkAkAMBBQlpdGVtUGFydHMAAgkAAgECLkluY29ycmVjdCBvcmRlciBmb3JtYXQsIHNob3VsZCBiZSBhbW91bnRAcHJpY2UECG5ld09yZEFtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJaXRlbVBhcnRzAAAECG5ld09yZFByCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJaXRlbVBhcnRzAAEECW5ld09yZFVzZAMFBmlzUHJvZAkAaAIFCG5ld09yZEFtBQhuZXdPcmRQcgkAawMFCG5ld09yZEFtBQhuZXdPcmRQcgUFTVVMVDgECW5ld09yZFZvbAkBCHRvVm9sdW1lAwUIbmV3T3JkQW0FDlBST0RVQ1RQS0dTSVpFBQZpc1Byb2QEBndoSW5pdAMJAGYCCQCQAwEIBQNhY2MCXzYFAWoJAQ1wYXJzZUludFZhbHVlAQkAkQMCCAUDYWNjAl82BQFqAAAEC2N1ck9yZFBhcnRzCQC1CQIDCQBmAgkAkAMBCAUDYWNjAl83BQFqCQCRAwIIBQNhY2MCXzcFAWoCAzBAMAIBQAQIY3VyT3JkQW0JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQtjdXJPcmRQYXJ0cwAABAhjdXJPcmRQcgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFC2N1ck9yZFBhcnRzAAEDAwkAZgIAAAUIY3VyT3JkUHIGCQBmAgAABQhuZXdPcmRQcgkAAgECF1ByaWNlIGNhbid0IGJlIG5lZ2F0aXZlBAljdXJPcmRVc2QDBQZpc1Byb2QJAGgCBQhjdXJPcmRBbQUIY3VyT3JkUHIJAGsDBQhjdXJPcmRBbQUIY3VyT3JkUHIFBU1VTFQ4AwkAAAIFCG5ld09yZEFtAAADCQBmAgUIY3VyT3JkQW0AAAkAnAoKCQBkAgUBagABCQDNCAIIBQNhY2MCXzIJAKQDAQUGd2hJbml0CAUDYWNjAl8zCAUDYWNjAl80CQBlAggFA2FjYwJfNQUJY3VyT3JkVXNkCAUDYWNjAl82CAUDYWNjAl83BQZpc1Byb2QJAGQCCAUDYWNjAl85CQEIdG9Wb2x1bWUDBQZ3aEluaXQFDlBST0RVQ1RQS0dTSVpFBQZpc1Byb2QIBQNhY2MDXzEwCQCcCgoJAGQCBQFqAAEJAM0IAggFA2FjYwJfMgkApAMBCQBlAgUGd2hJbml0BQhjdXJPcmRBbQgFA2FjYwJfMwgFA2FjYwJfNAgFA2FjYwJfNQgFA2FjYwJfNggFA2FjYwJfNwUGaXNQcm9kCQBkAggFA2FjYwJfOQkBCHRvVm9sdW1lAwkAZQIFBndoSW5pdAUIY3VyT3JkQW0FDlBST0RVQ1RQS0dTSVpFBQZpc1Byb2QIBQNhY2MDXzEwAwkAZgIFCG5ld09yZEFtAAADCQBmAgAABQhjdXJPcmRBbQkAnAoKCQBkAgUBagABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZQIFBndoSW5pdAUIY3VyT3JkQW0JAGQCCAUDYWNjAl8zBQluZXdPcmRWb2wIBQNhY2MCXzQJAGQCCAUDYWNjAl81BQluZXdPcmRVc2QIBQNhY2MCXzYIBQNhY2MCXzcFBmlzUHJvZAkBCHRvVm9sdW1lAwkAZQIFBndoSW5pdAUIY3VyT3JkQW0FDlBST0RVQ1RQS0dTSVpFBQZpc1Byb2QIBQNhY2MDXzEwCQCcCgoJAGQCBQFqAAEJAM0IAggFA2FjYwJfMgkApAMBBQZ3aEluaXQJAGQCCAUDYWNjAl8zBQluZXdPcmRWb2wIBQNhY2MCXzQJAGUCCQBkAggFA2FjYwJfNQUJbmV3T3JkVXNkBQljdXJPcmRVc2QIBQNhY2MCXzYIBQNhY2MCXzcFBmlzUHJvZAkBCHRvVm9sdW1lAwUGd2hJbml0BQ5QUk9EVUNUUEtHU0laRQUGaXNQcm9kCAUDYWNjA18xMAMJAGYCAAAFCGN1ck9yZEFtBAZhbURpZmYJAGUCBQhjdXJPcmRBbQUIbmV3T3JkQW0DCQBmAgAACQBlAgUGd2hJbml0BQZhbURpZmYJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAJAKQDAQUGYW1EaWZmAhogZnJvbSB3YXJlaG91c2UsIGJ1dCBvbmx5IAkApAMBBQZ3aEluaXQCCiBhdmFpbGFibGUJAJwKCgkAZAIFAWoAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGUCBQZ3aEluaXQFBmFtRGlmZggFA2FjYwJfMwkAZQIIBQNhY2MCXzQFCW5ld09yZFZvbAgFA2FjYwJfNQgFA2FjYwJfNggFA2FjYwJfNwUGaXNQcm9kCQEIdG9Wb2x1bWUDCQBlAgUGd2hJbml0BQZhbURpZmYFDlBST0RVQ1RQS0dTSVpFBQZpc1Byb2QIBQNhY2MDXzEwAwkAZgIAAAkAZAIFBndoSW5pdAUIbmV3T3JkQW0JAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAJAKQDAQkBAS0BBQhuZXdPcmRBbQIaIGZyb20gd2FyZWhvdXNlLCBidXQgb25seSAJAKQDAQUGd2hJbml0AgogYXZhaWxhYmxlCQCcCgoJAGQCBQFqAAEJAM0IAggFA2FjYwJfMgkApAMBCQBkAgUGd2hJbml0BQhuZXdPcmRBbQgFA2FjYwJfMwkAZQIIBQNhY2MCXzQFCW5ld09yZFZvbAkAZQIIBQNhY2MCXzUFCWN1ck9yZFVzZAgFA2FjYwJfNggFA2FjYwJfNwUGaXNQcm9kCQEIdG9Wb2x1bWUDCQBkAgUGd2hJbml0BQhuZXdPcmRBbQUOUFJPRFVDVFBLR1NJWkUFBmlzUHJvZAgFA2FjYwNfMTABC3NldEludGVybmFsAwljdXJyZW50V2gKY3VycmVudE9yZAZuZXdPcmQECWN1cnJXaFJlcwkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8ECWN1cnJXaE1hdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhNYXQCAV8ECmN1cnJXaFByb2QDCQAAAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAIABQNuaWwJALwJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAIBXwQNY3VycmVudE9yZFJlcwkAtQkCCQCRAwIFCmN1cnJlbnRPcmQFCW9yZElkeFJlcwIBXwQNY3VycmVudE9yZE1hdAkAtQkCCQCRAwIFCmN1cnJlbnRPcmQFCW9yZElkeE1hdAIBXwQOY3VycmVudE9yZFByb2QDCQAAAgkAkQMCBQpjdXJyZW50T3JkBQpvcmRJZHhQcm9kAgAFA25pbAkAvAkCCQCRAwIFCmN1cnJlbnRPcmQFCm9yZElkeFByb2QCAV8DCQECIT0CCQCQAwEFBm5ld09yZAADCQACAQIzbmV3T3JkZXJTdHIgc2hvdWxkIGNvbnRhaW4gZXhhY3RseSAyICc6JyBzZXBhcmF0b3JzBAhyZXNQYXJ0cwkAtQkCCQCRAwIFBm5ld09yZAAAAgFfBAhtYXRQYXJ0cwkAtQkCCQCRAwIFBm5ld09yZAABAgFfBAlwcm9kUGFydHMDCQAAAgkAkQMCBQZuZXdPcmQAAgIABQNuaWwJALwJAgkAkQMCBQZuZXdPcmQAAgIBXwMJAQIhPQIJAJADAQUIcmVzUGFydHMFBk5VTVJFUwkAAgECIEFsbCA2IHJlc291cmNlcyBzaG91bGQgYmUgcGFzc2VkAwkBAiE9AgkAkAMBBQhtYXRQYXJ0cwUGTlVNUkVTCQACAQIgQWxsIDYgbWF0ZXJpYWxzIHNob3VsZCBiZSBwYXNzZWQEAXIKAAIkbAUIcmVzVHlwZXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCcCgoAAAUDbmlsAAAAAAAABQljdXJyV2hSZXMFDWN1cnJlbnRPcmRSZXMHAAAFCHJlc1BhcnRzCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQlzZXRDb21tb24CBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYEAW0KAAIkbAUIbWF0VHlwZXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCcCgoAAAUDbmlsCAUBcgJfMwgFAXICXzQIBQFyAl81BQljdXJyV2hNYXQFDWN1cnJlbnRPcmRNYXQHCAUBcgJfOQUIbWF0UGFydHMKAQUkZjFfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCXNldENvbW1vbgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMV8yAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgQBcAoAAiRsBQlwcm9kVHlwZXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCcCgoAAAUDbmlsCAUBbQJfMwgFAW0CXzQIBQFtAl81BQpjdXJyV2hQcm9kBQ5jdXJyZW50T3JkUHJvZAYIBQFtAl85BQlwcm9kUGFydHMKAQUkZjJfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCXNldENvbW1vbgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMl8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgNTAJAQUkZjJfMgIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyCQCZCgcIBQFyAl8yCAUBbQJfMggFAXACXzIIBQFwAl8zCAUBcAJfNAgFAXACXzUIBQFwAl85AQxhY2NlcHRDb21tb24CA2FjYwlicE9yZEl0ZW0EAWoIBQNhY2MCXzcEBmlzUHJvZAgFA2FjYwNfMTIECmJwT3JkUGFydHMJALUJAgUJYnBPcmRJdGVtAgFAAwkBAiE9AgkAkAMBBQpicE9yZFBhcnRzAAIJAAIBAi5JbmNvcnJlY3Qgb3JkZXIgZm9ybWF0LCBzaG91bGQgYmUgYW1vdW50QHByaWNlBAdicE9yZEFtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKYnBPcmRQYXJ0cwAABAdicE9yZFByCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKYnBPcmRQYXJ0cwABAwkAZgIAAAUHYnBPcmRQcgkAAgECF1ByaWNlIGNhbid0IGJlIG5lZ2F0aXZlBAhicE9yZFVzZAMFBmlzUHJvZAkAaAIFB2JwT3JkQW0FB2JwT3JkUHIJAGsDBQdicE9yZEFtBQdicE9yZFByBQVNVUxUOAQGYnBJbml0AwkAZgIJAJADAQgFA2FjYwJfOAUBagkBDXBhcnNlSW50VmFsdWUBCQCRAwIIBQNhY2MCXzgFAWoAAAQGd2hJbml0AwkAZgIJAJADAQgFA2FjYwJfOQUBagkBDXBhcnNlSW50VmFsdWUBCQCRAwIIBQNhY2MCXzkFAWoAAAQJd2hPcmRJbml0AwkAZgIJAJADAQgFA2FjYwNfMTAFAWoJAJEDAggFA2FjYwNfMTAFAWoCAzBAMAQKd2hPcmRQYXJ0cwkAtQkCBQl3aE9yZEluaXQCAUAEB3doT3JkQW0JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQp3aE9yZFBhcnRzAAAEB3doT3JkUHIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQp3aE9yZFBhcnRzAAEDAwkBAiE9AgUHYnBPcmRBbQAACQECIT0CBQdicE9yZFByBQd3aE9yZFByBwkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgpQcmljZXMgb2YgCQCRAwIIBQNhY2MDXzExBQFqAhcgZG9uJ3QgbWF0Y2ghIFdIIHByaWNlPQkApAMBBQd3aE9yZFByAg0sIHlvdXIgcHJpY2U9CQCkAwEFB2JwT3JkUHIECHdoT3JkVXNkAwUGaXNQcm9kCQBoAgUHd2hPcmRBbQUHd2hPcmRQcgkAawMFB3doT3JkQW0FB3doT3JkUHIFBU1VTFQ4BAhkZWx0YVZvbAkBCHRvVm9sdW1lAwUHYnBPcmRBbQUOUFJPRFVDVFBLR1NJWkUFBmlzUHJvZAMJAAACBQdicE9yZEFtAAAJAJ8KDQkAzQgCCAUDYWNjAl8xCQCkAwEFBndoSW5pdAkAzQgCCAUDYWNjAl8yBQl3aE9yZEluaXQJAM0IAggFA2FjYwJfMwkApAMBBQZicEluaXQIBQNhY2MCXzQIBQNhY2MCXzUIBQNhY2MCXzYJAGQCCAUDYWNjAl83AAEIBQNhY2MCXzgIBQNhY2MCXzkIBQNhY2MDXzEwCAUDYWNjA18xMQUGaXNQcm9kCAUDYWNjA18xMwMJAGYCBQdicE9yZEFtAAADCQBmAgAABQd3aE9yZEFtAwkAZgIFB2JwT3JkQW0JAQEtAQUHd2hPcmRBbQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg9BdHRlbXB0IHRvIGJ1eSAJAKQDAQUHYnBPcmRBbQIEIG9mIAkAkQMCCAUDYWNjA18xMQUBagIbLCBidXQgd2FyZWhvdXNlIG9ubHkgc2VsbHMgCQCkAwEJAQEtAQUHd2hPcmRBbQkAnwoNCQDNCAIIBQNhY2MCXzEJAKQDAQUGd2hJbml0CQDNCAIIBQNhY2MCXzIJAKwCAgkArAICCQCkAwEJAGQCBQd3aE9yZEFtBQdicE9yZEFtAgFACQCkAwEFB3doT3JkUHIJAM0IAggFA2FjYwJfMwkApAMBCQBkAgUGYnBJbml0BQdicE9yZEFtCQBkAggFA2FjYwJfNAUIZGVsdGFWb2wIBQNhY2MCXzUJAGQCCAUDYWNjAl82BQhicE9yZFVzZAkAZAIIBQNhY2MCXzcAAQgFA2FjYwJfOAgFA2FjYwJfOQgFA2FjYwNfMTAIBQNhY2MDXzExBQZpc1Byb2QJAGQCCAUDYWNjA18xMwMFBmlzUHJvZAkAaAIFB2JwT3JkQW0FBU1VTFQ4BQdicE9yZEFtCQACAQkArAICCQCsAgICD0F0dGVtcHQgdG8gYnV5IAkAkQMCCAUDYWNjA18xMQUBagIgIHdoaWxlIHdhcmVob3VzZSBkb2Vzbid0IHNlbGwgaXQDCQBmAgUHd2hPcmRBbQAAAwkAZgIJAQEtAQUHYnBPcmRBbQUHd2hPcmRBbQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHNlbGwgCQCkAwEJAQEtAQUHYnBPcmRBbQIEIG9mIAkAkQMCCAUDYWNjA18xMQUBagIaLCBidXQgd2FyZWhvdXNlIG9ubHkgYnV5cyAJAKQDAQUHd2hPcmRBbQMJAGYCCQEBLQEFB2JwT3JkQW0FBmJwSW5pdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHNlbGwgCQCkAwEJAQEtAQUHYnBPcmRBbQIULCBidXQgeW91IG9ubHkgaGF2ZSAJAKQDAQUGYnBJbml0AgQgb2YgCQCRAwIIBQNhY2MDXzExBQFqCQCfCg0JAM0IAggFA2FjYwJfMQkApAMBCQBlAgUGd2hJbml0BQdicE9yZEFtCQDNCAIIBQNhY2MCXzIJAKwCAgkArAICCQCkAwEJAGQCBQd3aE9yZEFtBQdicE9yZEFtAgFACQCkAwEFB3doT3JkUHIJAM0IAggFA2FjYwJfMwkApAMBCQBkAgUGYnBJbml0BQdicE9yZEFtCQBlAggFA2FjYwJfNAUIZGVsdGFWb2wJAGUCCAUDYWNjAl81BQhicE9yZFVzZAgFA2FjYwJfNgkAZAIIBQNhY2MCXzcAAQgFA2FjYwJfOAgFA2FjYwJfOQgFA2FjYwNfMTAIBQNhY2MDXzExBQZpc1Byb2QJAGUCCAUDYWNjA18xMwMFBmlzUHJvZAkAaAIFB2JwT3JkQW0FBU1VTFQ4BQdicE9yZEFtCQACAQkArAICCQCsAgICEEF0dGVtcHQgdG8gc2VsbCAJAJEDAggFA2FjYwNfMTEFAWoCHyB3aGlsZSB3YXJlaG91c2UgZG9lc24ndCBidXkgaXQBE3NlbGxSZXNvdXJjZXNDb21tb24EB3Jlc0xpc3QMZmFjdG9yeUxvY0lkB2Ftb3VudHMJbWluUHJpY2VzCgEFYWRkZXICA2FjYwFqAwkAZgIJAJEDAgUHYW1vdW50cwUBagkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3Jlc0xpc3QFAWoJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIJWW91IGhhdmUgCQCRAwIFB3Jlc0xpc3QFAWoCBCBvZiAJAJEDAgUIcmVzVHlwZXMFAWoCFCwgYnV0IHRyaWVkIHRvIHNlbGwgCQCkAwEJAJEDAgUHYW1vdW50cwUBagMJAGYCAAAJAJEDAgUHYW1vdW50cwUBagkAAgEJAKwCAgkArAICCQCsAgICJVlvdSB0cmllZCB0byBzZWxsIG5lZ2F0aXZlIGFtb3VudCBvZiAJAJEDAgUIcmVzVHlwZXMFAWoCAjogCQCkAwEJAJEDAgUHYW1vdW50cwUBagMJAGYCCQCRAwIFB2Ftb3VudHMFAWoAAAQBYgkBDHNlbGxJbnRlcm5hbAQFDGZhY3RvcnlMb2NJZAUBagkAkQMCBQdhbW91bnRzBQFqCQCRAwIFCW1pblByaWNlcwUBagkAlgoECQDNCAIIBQNhY2MCXzEIBQFiAl8xCQDNCAIIBQNhY2MCXzIJAKQDAQkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdyZXNMaXN0BQFqCQCRAwIFB2Ftb3VudHMFAWoJAGQCCAUDYWNjAl8zCAUBYgJfMgkAZAIIBQNhY2MCXzQJAJEDAgUHYW1vdW50cwUBagkAlgoECAUDYWNjAl8xCQDNCAIIBQNhY2MCXzIJAJEDAgUHcmVzTGlzdAUBaggFA2FjYwJfMwgFA2FjYwJfNAoAAiRsBQVJVEVSNgoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJYKBAUDbmlsBQNuaWwAAAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQVhZGRlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgESYnV5TWF0ZXJpYWxzQ29tbW9uBAdtYXRMaXN0DGZhY3RvcnlMb2NJZAdhbW91bnRzCW1heFByaWNlcwoBCG1VcGRhdGVyAgNhY2MBagMJAGYCAAAJAJEDAgUHYW1vdW50cwUBagkAAgEJAKwCAgkArAICCQCsAgICJFlvdSB0cmllZCB0byBidXkgbmVnYXRpdmUgYW1vdW50IG9mIAkAkQMCBQhtYXRUeXBlcwUBagICOiAJAKQDAQkAkQMCBQdhbW91bnRzBQFqAwkAZgIJAJEDAgUHYW1vdW50cwUBagAABAFiCQELYnV5SW50ZXJuYWwEBQxmYWN0b3J5TG9jSWQFAWoJAJEDAgUHYW1vdW50cwUBagkAkQMCBQltYXhQcmljZXMFAWoJAJYKBAkAzQgCCAUDYWNjAl8xCAUBYgJfMQkAzQgCCAUDYWNjAl8yCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHbWF0TGlzdAUBaggFAWICXzMJAGQCCAUDYWNjAl8zCAUBYgJfMgkAZAIIBQNhY2MCXzQJAJEDAgUHYW1vdW50cwUBagkAlgoECAUDYWNjAl8xCQDNCAIIBQNhY2MCXzIJAJEDAgUHbWF0TGlzdAUBaggFA2FjYwJfMwgFA2FjYwJfNAoAAiRsBQVJVEVSNgoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJYKBAUDbmlsBQNuaWwAAAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQhtVXBkYXRlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgEXZXhjaGFuZ2VSZXNvdXJjZXNDb21tb24DB3Jlc0xpc3QHbWF0TGlzdAdhbW91bnRzCgEJZXhjaGFuZ2VyAgNhY2MBagQDYW1qCQCRAwIFB2Ftb3VudHMFAWoDCQBmAgUDYW1qCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHcmVzTGlzdAUBagkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAglZb3UgaGF2ZSAJAJEDAgUHcmVzTGlzdAUBagIEIG9mIAkAkQMCBQhyZXNUeXBlcwUBagIYLCBidXQgdHJpZWQgdG8gZXhjaGFuZ2UgCQCkAwEFA2FtagMJAGYCAAAFA2FtagkAAgEJAKwCAgkArAICCQCsAgICKVlvdSB0cmllZCB0byBleGNoYW5nZSBuZWdhdGl2ZSBhbW91bnQgb2YgCQCRAwIFCHJlc1R5cGVzBQFqAgI6IAkApAMBBQNhbWoDCQBmAgUDYW1qAAAJAJYKBAkAzQgCCAUDYWNjAl8xCQCkAwEJAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHcmVzTGlzdAUBagUDYW1qCQDNCAIIBQNhY2MCXzIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdtYXRMaXN0BQFqBQNhbWoJAGQCCAUDYWNjAl8zCQBrAwUDYW1qBRBSRVNPVVJDRVBSSUNFTUlOBQVNVUxUOAkAZAIIBQNhY2MCXzQFA2FtagkAlgoECQDNCAIIBQNhY2MCXzEJAJEDAgUHcmVzTGlzdAUBagkAzQgCCAUDYWNjAl8yCQCRAwIFB21hdExpc3QFAWoIBQNhY2MCXzMIBQNhY2MCXzQKAAIkbAUFSVRFUjYKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCWCgQFA25pbAUDbmlsAAAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEJZXhjaGFuZ2VyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGARBzaG9wMnVzZXJBY3Rpb25zAw11c2RXaDJCcFNhbGRvCmNhbGxlckFkZHILcmVjZWl2ZWRGZWUDCQBmAgUNdXNkV2gyQnBTYWxkbwAABAt1c2RXaDJCcEZlZQkAawMFDXVzZFdoMkJwU2FsZG8FCkFVQ1RJT05GRUUFBU1VTFQ2AwkAZwIFC3JlY2VpdmVkRmVlCQBlAgUNdXNkV2gyQnBTYWxkbwkAaAIAAwULdXNkV2gyQnBGZWUJAAIBCQCsAgICK1RoaXMgdHJhZGUgZG9lcyBub3QgY292ZXIgZGVsaXZlcnkgY29zdCBvZiAJAQpmaXhlZFBvaW50AgULcmVjZWl2ZWRGZWUABgQIcmVmQnlLZXkJAQ9rZXlBZGRyZXNzUmVmQnkBBQpjYWxsZXJBZGRyBAVyZWZCeQkAnQgCBQ9zdGFraW5nQ29udHJhY3QFCHJlZkJ5S2V5BAZjYWxsZXIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCmNhbGxlckFkZHIJAM0IAgkAzQgCAwkBCWlzRGVmaW5lZAEFBXJlZkJ5CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQV2YWx1ZQEFBXJlZkJ5BQt1c2RXaDJCcEZlZQULdXNkdEFzc2V0SWQFA25pbAUDbmlsCQEOU2NyaXB0VHJhbnNmZXIDBQZjYWxsZXIJAGUCCQBlAgUNdXNkV2gyQnBTYWxkbwkAaAIAAwULdXNkV2gyQnBGZWUFC3JlY2VpdmVkRmVlBQt1c2R0QXNzZXRJZAkBDlNjcmlwdFRyYW5zZmVyAwUMcmVzdENvbnRyYWN0BQt1c2RXaDJCcEZlZQULdXNkdEFzc2V0SWQFA25pbAEQdXNlcjJzaG9wQWN0aW9ucwQNdXNkQnAyV2hTYWxkbwRwbXRzDXNob3BMYW5kT3duZXIIc3BlbnRGZWUDCQBmAgUNdXNkQnAyV2hTYWxkbwAAAwkBAiE9AgkAkAMBBQRwbXRzAAEJAAIBAiJleGFjdGx5IDEgcGF5bWVudCBtdXN0IGJlIGF0dGFjaGVkBANwbXQJAJEDAgUEcG10cwAABANhbXQIBQNwbXQGYW1vdW50AwMJAQEhAQkBCWlzRGVmaW5lZAEIBQNwbXQHYXNzZXRJZAYJAQIhPQIJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhNVU0RUIHBheW1lbnRzIG9ubHkhBBB1c2R0U3BlbnRXaXRoRmVlCQBkAgUNdXNkQnAyV2hTYWxkbwUIc3BlbnRGZWUDCQECIT0CBQNhbXQFEHVzZHRTcGVudFdpdGhGZWUJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAh9JbnN1ZmZpY2llbnQgcGF5bWVudCEgQXR0YWNoZWQ9CQEKZml4ZWRQb2ludAIFA2FtdAAGAgssIHJlcXVpcmVkPQkBCmZpeGVkUG9pbnQCBQ11c2RCcDJXaFNhbGRvAAYCASsJAQpmaXhlZFBvaW50AgUIc3BlbnRGZWUABgIOKGRlbGl2ZXJ5IGZlZSkDCQBmAgUOTUlOU0hPUFBBWU1FTlQFDXVzZEJwMldoU2FsZG8JAAIBCQCsAgICEk1pbiBzaG9wIHRyYWRlIGlzIAkBCmZpeGVkUG9pbnQCBQ5NSU5TSE9QUEFZTUVOVAAGBAt1c2RCcDJXaEZlZQkAawMFDXVzZEJwMldoU2FsZG8FCkFVQ1RJT05GRUUFBU1VTFQ2BAhyZWZCeUtleQkBD2tleUFkZHJlc3NSZWZCeQEFDXNob3BMYW5kT3duZXIEBXJlZkJ5CQCdCAIFD3N0YWtpbmdDb250cmFjdAUIcmVmQnlLZXkJAM0IAgkAzQgCAwkBCWlzRGVmaW5lZAEFBXJlZkJ5CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQV2YWx1ZQEFBXJlZkJ5BQt1c2RCcDJXaEZlZQULdXNkdEFzc2V0SWQFA25pbAUDbmlsCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQ1zaG9wTGFuZE93bmVyCQBlAgUNdXNkQnAyV2hTYWxkbwkAaAIAAwULdXNkQnAyV2hGZWUFC3VzZHRBc3NldElkCQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFC3VzZEJwMldoRmVlBQt1c2R0QXNzZXRJZAMJAQIhPQIJAJADAQUEcG10cwAACQACAQISTm8gcGF5bWVudHMgbmVlZGVkBQNuaWwBFWFjY2VwdFNob3BPcmRlckNvbW1vbgYPc2hvcExhbmRBc3NldElkCmNhbGxlckFkZHIKYnBPcmRlclN0cglicFJlc0xpc3QJYnBNYXRMaXN0CmJwUHJvZExpc3QECWxhbmRBc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFD3Nob3BMYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFD3Nob3BMYW5kQXNzZXRJZAkAAgEJAKwCAgkArAICAgRORlQgCAUJbGFuZEFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBA1zaG9wTGFuZE93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQUPc2hvcExhbmRBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFCWxhbmRBc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQAAAgUNc2hvcExhbmRPd25lcgUKY2FsbGVyQWRkcgkAAgECHllvdSBjYW5ub3QgdHJhZGUgd2l0aCB5b3Vyc2VsZgQMYnBPcmRlclBhcnRzCQC8CQIFCmJwT3JkZXJTdHICAToDCQECIT0CCQCQAwEFDGJwT3JkZXJQYXJ0cwADCQACAQIyYnBPcmRlclN0ciBzaG91bGQgY29udGFpbiBleGFjdGx5IDIgJzonIHNlcGFyYXRvcnMECGJwT3JkUmVzCQC1CQIJAJEDAgUMYnBPcmRlclBhcnRzAAACAV8ECGJwT3JkTWF0CQC1CQIJAJEDAgUMYnBPcmRlclBhcnRzAAECAV8ECWJwT3JkUHJvZAMJAAACCQCRAwIFDGJwT3JkZXJQYXJ0cwACAgAFA25pbAkAvAkCCQCRAwIFDGJwT3JkZXJQYXJ0cwACAgFfAwkBAiE9AgkAkAMBBQhicE9yZFJlcwUGTlVNUkVTCQACAQIgQWxsIDYgcmVzb3VyY2VzIHNob3VsZCBiZSBwYXNzZWQDCQECIT0CCQCQAwEFCGJwT3JkTWF0BQZOVU1SRVMJAAIBAiBBbGwgNiBtYXRlcmlhbHMgc2hvdWxkIGJlIHBhc3NlZAQCd2gJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0AhRnZXRXYXJlaG91c2VSRUFET05MWQkAzAgCBQ9zaG9wTGFuZEFzc2V0SWQFA25pbAUDbmlsBAljdXJyZW50V2gJALwJAgUCd2gCAToECWN1cnJXaFJlcwkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8ECWN1cnJXaE1hdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhNYXQCAV8ECmN1cnJXaFByb2QDCQAAAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAIABQNuaWwJALwJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAIBXwQPY3VycldoTG9ja2VkVm9sCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUAgFfBQl2b2xMb2NrZWQEBm9yZEtleQkBDmtleU9yZGVyQnlMYW5kAQUPc2hvcExhbmRBc3NldElkBAV3aE9yZAkBCGdldE9yZGVyAQUGb3JkS2V5BAh3aE9yZFJlcwkAtQkCCQCRAwIFBXdoT3JkBQlvcmRJZHhSZXMCAV8ECHdoT3JkTWF0CQC1CQIJAJEDAgUFd2hPcmQFCW9yZElkeE1hdAIBXwQJd2hPcmRQcm9kAwkAAAIJAJEDAgUFd2hPcmQFCm9yZElkeFByb2QCAAUDbmlsCQC8CQIJAJEDAgUFd2hPcmQFCm9yZElkeFByb2QCAV8EAXIKAAIkbAUIYnBPcmRSZXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCfCg0FA25pbAUDbmlsBQNuaWwAAAAAAAAAAAUJYnBSZXNMaXN0BQljdXJyV2hSZXMFCHdoT3JkUmVzBQhyZXNUeXBlcwcAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEMYWNjZXB0Q29tbW9uAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGBAFtCgACJGwFCGJwT3JkTWF0CgACJHMJAJADAQUCJGwKAAUkYWNjMAkAnwoNBQNuaWwFA25pbAUDbmlsCAUBcgJfNAgFAXICXzUIBQFyAl82AAAFCWJwTWF0TGlzdAUJY3VycldoTWF0BQh3aE9yZE1hdAUIbWF0VHlwZXMHCAUBcgNfMTMKAQUkZjFfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDGFjY2VwdENvbW1vbgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMV8yAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgQBcAMJAQIhPQIJAJADAQUJYnBPcmRQcm9kAAAKAAIkbAUJYnBPcmRQcm9kCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAnwoNBQNuaWwFA25pbAUDbmlsCAUBbQJfNAgFAW0CXzUIBQFtAl82AAAFCmJwUHJvZExpc3QFCmN1cnJXaFByb2QFCXdoT3JkUHJvZAUJcHJvZFR5cGVzBggFAW0DXzEzCgEFJGYyXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQxhY2NlcHRDb21tb24CBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjJfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDUwCQEFJGYyXzICCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgkAnwoNBQpjdXJyV2hQcm9kBQl3aE9yZFByb2QFCmJwUHJvZExpc3QIBQFtAl80CAUBbQJfNQgFAW0CXzYAAAUKYnBQcm9kTGlzdAUKY3VycldoUHJvZAUJd2hPcmRQcm9kBQlwcm9kVHlwZXMGCAUBbQNfMTMECHZvbFNhbGRvCAUBcAJfNAQMbmV3TG9ja2VkVm9sAwkAZgIAAAkAZQIFD2N1cnJXaExvY2tlZFZvbAUIdm9sU2FsZG8AAAkAZQIFD2N1cnJXaExvY2tlZFZvbAUIdm9sU2FsZG8EBXdoU3RyCQC6CQIJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIJALkJAggFAXICXzECAV8JAMwIAgkAuQkCCAUBbQJfMQIBXwkAzAgCCQC6CQIIBQFwAl8xAgFfCQDMCAIJAKQDAQUMbmV3TG9ja2VkVm9sBQNuaWwCAToEC25ld1doT3JkU3RyCQC6CQIJAMwIAgkAuQkCCAUBcgJfMgIBXwkAzAgCCQC5CQIIBQFtAl8yAgFfCQDMCAIJALoJAggFAXACXzICAV8FA25pbAIBOgQGd2hTYXZlCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAINc2F2ZVdhcmVob3VzZQkAzAgCBQV3aFN0cgkAzAgCBQ9zaG9wTGFuZEFzc2V0SWQFA25pbAUDbmlsBA5hY2NTdGF0c1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUFjY1N0YXRzCQDMCAIFDXNob3BMYW5kT3duZXIJAMwIAgkAawMFBnhwU2hvcAgFAXADXzEzBQVNVUxUOAUDbmlsBQNuaWwJAJwKCgkBC1N0cmluZ0VudHJ5AgUGb3JkS2V5BQtuZXdXaE9yZFN0cggFAXICXzMIBQFtAl8zCAUBcAJfMwgFAXACXzUIBQFwAl82CAUBcANfMTMFDXNob3BMYW5kT3duZXIFBndoU2F2ZQUOYWNjU3RhdHNSZXN1bHQBGnNlbGxSZXNvdXJjZXNXb3JsZEludGVybmFsAQZhbW91bnQEBm9uZVJlcwkAaQIFBmFtb3VudAAeBBFvbmVGYWN0b3J5QW1vdW50cwkAzAgCBQZvbmVSZXMJAMwIAgUGb25lUmVzCQDMCAIFBm9uZVJlcwkAzAgCBQZvbmVSZXMJAMwIAgUGb25lUmVzCQDMCAIFBm9uZVJlcwUDbmlsBAFzCQCkAwEFBm9uZVJlcwQHcmVzTGlzdAkAzAgCBQFzCQDMCAIFAXMJAMwIAgUBcwkAzAgCBQFzCQDMCAIFAXMJAMwIAgUBcwUDbmlsBAltaW5QcmljZXMJAMwIAgAACQDMCAIAAAkAzAgCAAAJAMwIAgAACQDMCAIAAAkAzAgCAAAFA25pbAoBCm9uZUZhY3RvcnkCA2FjYwljb250aW5lbnQEAXgJARNzZWxsUmVzb3VyY2VzQ29tbW9uBAUHcmVzTGlzdAUJY29udGluZW50BRFvbmVGYWN0b3J5QW1vdW50cwUJbWluUHJpY2VzCQCVCgMJAM4IAggFA2FjYwJfMQgFAXgCXzEJAGQCCAUDYWNjAl8yCAUBeAJfMwkAZAIIBQNhY2MCXzMIBQF4Al80BA0kdDAyNTI2MTI1MzUxCgACJGwFCmNvbnRpbmVudHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCVCgMFA25pbAAAAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCm9uZUZhY3RvcnkCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDUJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFBA5mYWN0b3J5QWN0aW9ucwgFDSR0MDI1MjYxMjUzNTECXzEEDHVzZHRSZWNlaXZlZAgFDSR0MDI1MjYxMjUzNTECXzIECHRvdGFsUmVzCAUNJHQwMjUyNjEyNTM1MQJfMwQDZmVlCQBrAwUMdXNkdFJlY2VpdmVkBQxERUxJVkVSWV9GRUUFBU1VTFQ2BBBhY3Rpdml0aWVzQW1vdW50CQBpAgUMdXNkdFJlY2VpdmVkAGQECHVzZHRMZWZ0CQBlAgkAZQIFDHVzZHRSZWNlaXZlZAUQYWN0aXZpdGllc0Ftb3VudAUDZmVlCQCXCgUFDmZhY3RvcnlBY3Rpb25zBQh1c2R0TGVmdAUDZmVlBRBhY3Rpdml0aWVzQW1vdW50BQh0b3RhbFJlcxYBaQEacmVjYWxjTG9ja2VkVm9sdW1lUkVBRE9OTFkCC2xhbmRBc3NldElkAndoBApjdXJyZW50T3JkCQEIZ2V0T3JkZXIBCQEOa2V5T3JkZXJCeUxhbmQBBQtsYW5kQXNzZXRJZAQBegkBC3NldEludGVybmFsAwUCd2gFCmN1cnJlbnRPcmQFCmN1cnJlbnRPcmQJAJQKAgUDbmlsCQBkAggFAXoCXzQIBQF6Al81AWkBDWNvbnN0cnVjdG9yVjEBCHJlc3RBZGRyAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRUGVybWlzc2lvbiBkZW5pZWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDmtleVJlc3RBZGRyZXNzAAUIcmVzdEFkZHIFA25pbAFpAQ1zZWxsUmVzb3VyY2VzAgdhbW91bnRzCW1pblByaWNlcwQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIqc2VsbFJlc291cmNlcyBkb2Vzbid0IHJlcXVpcmUgYW55IHBheW1lbnRzBAtjdXJMb2NhdGlvbgkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04CAV8DCQECIT0CCQCRAwIFC2N1ckxvY2F0aW9uBQpsb2NJZHhUeXBlAgFGCQACAQkArAICAi1EdWNrIGxvY2F0aW9uIHR5cGUgc2hvdWxkIGJlIEZhY3RvcnksIGJ1dCBpcyAJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQHcmVzTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwIBXwQNJHQwMjY4MDMyNjkyOQkBE3NlbGxSZXNvdXJjZXNDb21tb24EBQdyZXNMaXN0CQCRAwIFC2N1ckxvY2F0aW9uBQhsb2NJZHhJZAUHYW1vdW50cwUJbWluUHJpY2VzBA5mYWN0b3J5QWN0aW9ucwgFDSR0MDI2ODAzMjY5MjkCXzEEBm5ld1JlcwgFDSR0MDI2ODAzMjY5MjkCXzIEDHVzZHRSZWNlaXZlZAgFDSR0MDI2ODAzMjY5MjkCXzMECHRvdGFsUmVzCAUNJHQwMjY4MDMyNjkyOQJfNAQQYWN0aXZpdGllc0Ftb3VudAkAaQIFDHVzZHRSZWNlaXZlZABkBAduZXdQYWNrCQC6CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQC5CQIFBm5ld1JlcwIBXwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgQOYmFja3BhY2tSZXN1bHQJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVCYWNrcGFjawkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQduZXdQYWNrBQNuaWwFA25pbAQLc3RhdHNSZXN1bHQJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag91cGRhdGVEdWNrU3RhdHMJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgkAawMFB3hwVHJhZGUFCHRvdGFsUmVzBQVNVUxUOAUDbmlsBQNuaWwJAJQKAgkAzQgCCQDNCAIFDmZhY3RvcnlBY3Rpb25zCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIJAGUCBQx1c2R0UmVjZWl2ZWQFEGFjdGl2aXRpZXNBbW91bnQFC3VzZHRBc3NldElkCQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFEGFjdGl2aXRpZXNBbW91bnQFC3VzZHRBc3NldElkCQCVCgMFDmJhY2twYWNrUmVzdWx0BQxwcm9sb2dSZXN1bHQFC3N0YXRzUmVzdWx0AWkBEnNlbGxSZXNvdXJjZXNXb3JsZAIEYWRkcgZhbW91bnQDCQECIT0CCAUBaQZjYWxsZXIFDWFjcmVzQ29udHJhY3QJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAQNJHQwMjc3MjEyNzg3OAkBGnNlbGxSZXNvdXJjZXNXb3JsZEludGVybmFsAQUGYW1vdW50BA5mYWN0b3J5QWN0aW9ucwgFDSR0MDI3NzIxMjc4NzgCXzEECHVzZHRMZWZ0CAUNJHQwMjc3MjEyNzg3OAJfMgQDZmVlCAUNJHQwMjc3MjEyNzg3OAJfMwQQYWN0aXZpdGllc0Ftb3VudAgFDSR0MDI3NzIxMjc4NzgCXzQECHRvdGFsUmVzCAUNJHQwMjc3MjEyNzg3OAJfNQMJAGcCAAAFCHVzZHRMZWZ0CQACAQkArAICAitUaGlzIHRyYWRlIGRvZXMgbm90IGNvdmVyIGRlbGl2ZXJ5IGNvc3Qgb2YgCQEKZml4ZWRQb2ludAIFA2ZlZQAGBAtzdGF0c1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUFjY1N0YXRzCQDMCAIFBGFkZHIJAMwIAgkAawMFB3hwVHJhZGUFCHRvdGFsUmVzBQVNVUxUOAUDbmlsBQNuaWwJAJQKAgkAzQgCCQDNCAIJAM0IAgUOZmFjdG9yeUFjdGlvbnMJAQxJbnRlZ2VyRW50cnkCBQ9kZWxpdmVyeUZ1bmRLZXkJAGQCCQELdmFsdWVPckVsc2UCCQCfCAEFD2RlbGl2ZXJ5RnVuZEtleQAABQNmZWUJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAUQYWN0aXZpdGllc0Ftb3VudAULdXNkdEFzc2V0SWQJAQ5TY3JpcHRUcmFuc2ZlcgMFEmludmVzdEZ1bmRDb250cmFjdAUIdXNkdExlZnQFC3VzZHRBc3NldElkCQCUCgIFCHVzZHRMZWZ0BQtzdGF0c1Jlc3VsdAFpARpzZWxsUmVzb3VyY2VzV29ybGRSRUFET05MWQEGYW1vdW50BAh1c2R0TGVmdAgJARpzZWxsUmVzb3VyY2VzV29ybGRJbnRlcm5hbAEFBmFtb3VudAJfMgkAlAoCBQNuaWwFCHVzZHRMZWZ0AWkBGXNlbGxSZXNvdXJjZXNEdWNrRGVsaXZlcnkDB2Ftb3VudHMJbWluUHJpY2VzEGZhY3RvcnlDb250aW5lbnQDCQEBIQEFEUtTX0FMTE9XX0RFTElWRVJZCQACAQIfRGVsaXZlcnkgZmVhdHVyZSBpcyB0dXJuZWQgb2ZmIQQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIqc2VsbFJlc291cmNlcyBkb2Vzbid0IHJlcXVpcmUgYW55IHBheW1lbnRzBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEB3Jlc0xpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMCAV8EDSR0MDI5MTExMjkyMzIJARNzZWxsUmVzb3VyY2VzQ29tbW9uBAUHcmVzTGlzdAUQZmFjdG9yeUNvbnRpbmVudAUHYW1vdW50cwUJbWluUHJpY2VzBA5mYWN0b3J5QWN0aW9ucwgFDSR0MDI5MTExMjkyMzICXzEEBm5ld1JlcwgFDSR0MDI5MTExMjkyMzICXzIEDHVzZHRSZWNlaXZlZAgFDSR0MDI5MTExMjkyMzICXzMECHRvdGFsUmVzCAUNJHQwMjkxMTEyOTIzMgJfNAQHbmV3UGFjawkAugkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAuQkCBQZuZXdSZXMCAV8JAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwCAToEDmJhY2twYWNrUmVzdWx0CQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQmFja3BhY2sJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUHbmV3UGFjawUDbmlsBQNuaWwEC3N0YXRzUmVzdWx0CQEFYXNJbnQBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIPdXBkYXRlRHVja1N0YXRzCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIJAGsDBQd4cFRyYWRlBQh0b3RhbFJlcwUFTVVMVDgFA25pbAUDbmlsBAdmZWVQYXJ0CQBrAwUMdXNkdFJlY2VpdmVkBQxERUxJVkVSWV9GRUUFBU1VTFQ2BANmZWUDCQBmAgUVTUlOX1VTRFRfRkVFX0RFTElWRVJZBQdmZWVQYXJ0BRVNSU5fVVNEVF9GRUVfREVMSVZFUlkFB2ZlZVBhcnQEEGFjdGl2aXRpZXNBbW91bnQJAGkCBQx1c2R0UmVjZWl2ZWQAZAMJAGcCBQNmZWUJAGUCBQx1c2R0UmVjZWl2ZWQFEGFjdGl2aXRpZXNBbW91bnQJAAIBCQCsAgICK1RoaXMgdHJhZGUgZG9lcyBub3QgY292ZXIgZGVsaXZlcnkgY29zdCBvZiAJAQpmaXhlZFBvaW50AgUDZmVlAAYECWZ1bmRUb3RhbAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ9kZWxpdmVyeUZ1bmRLZXkAAAkAlAoCCQDNCAIJAM0IAgkAzQgCBQ5mYWN0b3J5QWN0aW9ucwkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQBlAgkAZQIFDHVzZHRSZWNlaXZlZAUQYWN0aXZpdGllc0Ftb3VudAUDZmVlBQt1c2R0QXNzZXRJZAkBDEludGVnZXJFbnRyeQIFD2RlbGl2ZXJ5RnVuZEtleQkAZAIFCWZ1bmRUb3RhbAUDZmVlCQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFEGFjdGl2aXRpZXNBbW91bnQFC3VzZHRBc3NldElkCQCVCgMFDmJhY2twYWNrUmVzdWx0BQxwcm9sb2dSZXN1bHQFC3N0YXRzUmVzdWx0AWkBGXNlbGxSZXNvdXJjZXNMYW5kRGVsaXZlcnkEB2Ftb3VudHMJbWluUHJpY2VzC2xhbmRBc3NldElkEGZhY3RvcnlDb250aW5lbnQDCQEBIQEFEUtTX0FMTE9XX0RFTElWRVJZCQACAQIfRGVsaXZlcnkgZmVhdHVyZSBpcyB0dXJuZWQgb2ZmIQQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECKnNlbGxSZXNvdXJjZXMgZG9lc24ndCByZXF1aXJlIGFueSBwYXltZW50cwQEdXNlcggFAWkGY2FsbGVyBARhZGRyCQClCAEFBHVzZXIEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMEAndoCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIUZ2V0V2FyZWhvdXNlUkVBRE9OTFkJAMwIAgULbGFuZEFzc2V0SWQFA25pbAUDbmlsBAljdXJyZW50V2gJALwJAgUCd2gCAToEB3Jlc0xpc3QJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfBA0kdDAzMTI1OTMxMzgwCQETc2VsbFJlc291cmNlc0NvbW1vbgQFB3Jlc0xpc3QFEGZhY3RvcnlDb250aW5lbnQFB2Ftb3VudHMFCW1pblByaWNlcwQOZmFjdG9yeUFjdGlvbnMIBQ0kdDAzMTI1OTMxMzgwAl8xBAZuZXdSZXMIBQ0kdDAzMTI1OTMxMzgwAl8yBAx1c2R0UmVjZWl2ZWQIBQ0kdDAzMTI1OTMxMzgwAl8zBAh0b3RhbFJlcwgFDSR0MDMxMjU5MzEzODACXzQEBXdoU3RyCQC6CQIJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIJALkJAgUGbmV3UmVzAgFfCQDMCAIJAJEDAgUJY3VycmVudFdoBQh3aElkeE1hdAkAzAgCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kCQDMCAIJAJEDAgUJY3VycmVudFdoBQl3aElkeExPRlQFA25pbAIBOgQGd2hTYXZlCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAINc2F2ZVdhcmVob3VzZQkAzAgCBQV3aFN0cgkAzAgCBQtsYW5kQXNzZXRJZAUDbmlsBQNuaWwEC3N0YXRzUmVzdWx0CQEFYXNJbnQBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQWNjU3RhdHMJAMwIAgUEYWRkcgkAzAgCCQBrAwUHeHBUcmFkZQUIdG90YWxSZXMFBU1VTFQ4BQNuaWwFA25pbAQHZmVlUGFydAkAawMFDHVzZHRSZWNlaXZlZAUMREVMSVZFUllfRkVFBQVNVUxUNgQDZmVlAwkAZgIFFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQUHZmVlUGFydAUVTUlOX1VTRFRfRkVFX0RFTElWRVJZBQdmZWVQYXJ0BBBhY3Rpdml0aWVzQW1vdW50CQBpAgUMdXNkdFJlY2VpdmVkAGQDCQBnAgUDZmVlCQBlAgUMdXNkdFJlY2VpdmVkBRBhY3Rpdml0aWVzQW1vdW50CQACAQkArAICAitUaGlzIHRyYWRlIGRvZXMgbm90IGNvdmVyIGRlbGl2ZXJ5IGNvc3Qgb2YgCQEKZml4ZWRQb2ludAIFA2ZlZQAGBAlmdW5kVG90YWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUPZGVsaXZlcnlGdW5kS2V5AAAJAJQKAgkAzQgCCQDNCAIJAM0IAgUOZmFjdG9yeUFjdGlvbnMJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkAZQIJAGUCBQx1c2R0UmVjZWl2ZWQFEGFjdGl2aXRpZXNBbW91bnQFA2ZlZQULdXNkdEFzc2V0SWQJAQxJbnRlZ2VyRW50cnkCBQ9kZWxpdmVyeUZ1bmRLZXkJAGQCBQlmdW5kVG90YWwFA2ZlZQkBDlNjcmlwdFRyYW5zZmVyAwUMcmVzdENvbnRyYWN0BRBhY3Rpdml0aWVzQW1vdW50BQt1c2R0QXNzZXRJZAkAlQoDBQZ3aFNhdmUFDHByb2xvZ1Jlc3VsdAULc3RhdHNSZXN1bHQBaQEMYnV5TWF0ZXJpYWxzAgdhbW91bnRzCW1heFByaWNlcwQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQDAwkBASEBCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBgkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEEC2N1ckxvY2F0aW9uCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgIBXwMJAQIhPQIJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUCAUYJAAIBCQCsAgICLUR1Y2sgbG9jYXRpb24gdHlwZSBzaG91bGQgYmUgRmFjdG9yeSwgYnV0IGlzIAkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAdtYXRMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBA0kdDAzMzI0MDMzMzYyCQESYnV5TWF0ZXJpYWxzQ29tbW9uBAUHbWF0TGlzdAkAkQMCBQtjdXJMb2NhdGlvbgUIbG9jSWR4SWQFB2Ftb3VudHMFCW1heFByaWNlcwQOZmFjdG9yeUFjdGlvbnMIBQ0kdDAzMzI0MDMzMzYyAl8xBAZuZXdNYXQIBQ0kdDAzMzI0MDMzMzYyAl8yBAl1c2R0U3BlbnQIBQ0kdDAzMzI0MDMzMzYyAl8zBAh0b3RhbE1hdAgFDSR0MDMzMjQwMzMzNjICXzQDCQBmAgUJdXNkdFNwZW50BQNhbXQJAAIBCQCsAgIJAKwCAgkArAICAh9JbnN1ZmZpY2llbnQgcGF5bWVudCEgQXR0YWNoZWQ9CQEKZml4ZWRQb2ludAIFA2FtdAAGAgssIHJlcXVpcmVkPQkBCmZpeGVkUG9pbnQCBQl1c2R0U3BlbnQABgQHbmV3UGFjawkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgkAuQkCBQZuZXdNYXQCAV8JAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwCAToEDmJhY2twYWNrUmVzdWx0CQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQmFja3BhY2sJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUHbmV3UGFjawUDbmlsBQNuaWwEBHJlc3QDCQBmAgkAZQIFA2FtdAUJdXNkdFNwZW50AAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQBlAgUDYW10BQl1c2R0U3BlbnQFC3VzZHRBc3NldElkBQNuaWwFA25pbAQQYWN0aXZpdGllc0Ftb3VudAkAaQIFCXVzZHRTcGVudABkBAtzdGF0c1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCD3VwZGF0ZUR1Y2tTdGF0cwkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCCQBrAwUHeHBUcmFkZQUIdG90YWxNYXQFBU1VTFQ4BQNuaWwFA25pbAkAlAoCCQDNCAIJAM4IAgUOZmFjdG9yeUFjdGlvbnMFBHJlc3QJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAUQYWN0aXZpdGllc0Ftb3VudAULdXNkdEFzc2V0SWQJAJUKAwUOYmFja3BhY2tSZXN1bHQFDHByb2xvZ1Jlc3VsdAULc3RhdHNSZXN1bHQBaQEYYnV5TWF0ZXJpYWxzRHVja0RlbGl2ZXJ5AwdhbW91bnRzCW1heFByaWNlcxBmYWN0b3J5Q29udGluZW50AwkBASEBBRFLU19BTExPV19ERUxJVkVSWQkAAgECH0RlbGl2ZXJ5IGZlYXR1cmUgaXMgdHVybmVkIG9mZiEEDHByb2xvZ1Jlc3VsdAkBBnByb2xvZwAEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABANhbXQIBQNwbXQGYW1vdW50AwMJAQEhAQkBCWlzRGVmaW5lZAEIBQNwbXQHYXNzZXRJZAYJAQIhPQIJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhNVU0RUIHBheW1lbnRzIG9ubHkhBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEB21hdExpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8EDSR0MDM0ODgwMzQ5OTcJARJidXlNYXRlcmlhbHNDb21tb24EBQdtYXRMaXN0BRBmYWN0b3J5Q29udGluZW50BQdhbW91bnRzBQltYXhQcmljZXMEDmZhY3RvcnlBY3Rpb25zCAUNJHQwMzQ4ODAzNDk5NwJfMQQGbmV3TWF0CAUNJHQwMzQ4ODAzNDk5NwJfMgQJdXNkdFNwZW50CAUNJHQwMzQ4ODAzNDk5NwJfMwQIdG90YWxNYXQIBQ0kdDAzNDg4MDM0OTk3Al80BAduZXdQYWNrCQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAzAgCCQC5CQIFBm5ld01hdAIBXwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgQOYmFja3BhY2tSZXN1bHQJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVCYWNrcGFjawkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQduZXdQYWNrBQNuaWwFA25pbAQLc3RhdHNSZXN1bHQJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag91cGRhdGVEdWNrU3RhdHMJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgkAawMFB3hwVHJhZGUFCHRvdGFsTWF0BQVNVUxUOAUDbmlsBQNuaWwEB2ZlZVBhcnQJAGsDBQl1c2R0U3BlbnQFDERFTElWRVJZX0ZFRQUFTVVMVDYEA2ZlZQMJAGYCBRVNSU5fVVNEVF9GRUVfREVMSVZFUlkFB2ZlZVBhcnQFFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQUHZmVlUGFydAQQdXNkdFNwZW50V2l0aEZlZQkAZAIFCXVzZHRTcGVudAUDZmVlAwkAZgIFEHVzZHRTcGVudFdpdGhGZWUFA2FtdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICH0luc3VmZmljaWVudCBwYXltZW50ISBBdHRhY2hlZD0JAQpmaXhlZFBvaW50AgUDYW10AAYCCywgcmVxdWlyZWQ9CQEKZml4ZWRQb2ludAIFCXVzZHRTcGVudAAGAgErCQEKZml4ZWRQb2ludAIFA2ZlZQAGAg4oZGVsaXZlcnkgZmVlKQQEcmVzdAMJAGYCCQBlAgUDYW10BRB1c2R0U3BlbnRXaXRoRmVlAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQBlAgUDYW10BRB1c2R0U3BlbnRXaXRoRmVlBQt1c2R0QXNzZXRJZAUDbmlsBQNuaWwEEGFjdGl2aXRpZXNBbW91bnQJAGkCBQl1c2R0U3BlbnQAZAQJZnVuZFRvdGFsCQELdmFsdWVPckVsc2UCCQCfCAEFD2RlbGl2ZXJ5RnVuZEtleQAACQCUCgIJAM0IAgkAzQgCCQDOCAIFDmZhY3RvcnlBY3Rpb25zBQRyZXN0CQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFEGFjdGl2aXRpZXNBbW91bnQFC3VzZHRBc3NldElkCQEMSW50ZWdlckVudHJ5AgUPZGVsaXZlcnlGdW5kS2V5CQBkAgUJZnVuZFRvdGFsBQNmZWUJAJUKAwUOYmFja3BhY2tSZXN1bHQFDHByb2xvZ1Jlc3VsdAULc3RhdHNSZXN1bHQBaQEYYnV5TWF0ZXJpYWxzTGFuZERlbGl2ZXJ5BAdhbW91bnRzCW1heFByaWNlcwtsYW5kQXNzZXRJZBBmYWN0b3J5Q29udGluZW50AwkBASEBBRFLU19BTExPV19ERUxJVkVSWQkAAgECH0RlbGl2ZXJ5IGZlYXR1cmUgaXMgdHVybmVkIG9mZiEEDHByb2xvZ1Jlc3VsdAkBBnByb2xvZwADCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAiJleGFjdGx5IDEgcGF5bWVudCBtdXN0IGJlIGF0dGFjaGVkBANwbXQJAJEDAggFAWkIcGF5bWVudHMAAAQDYW10CAUDcG10BmFtb3VudAMDCQEBIQEJAQlpc0RlZmluZWQBCAUDcG10B2Fzc2V0SWQGCQECIT0CCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQITVVNEVCBwYXltZW50cyBvbmx5IQQEdXNlcggFAWkGY2FsbGVyBARhZGRyCQClCAEFBHVzZXIEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMEAndoCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIUZ2V0V2FyZWhvdXNlUkVBRE9OTFkJAMwIAgULbGFuZEFzc2V0SWQFA25pbAUDbmlsBAljdXJyZW50V2gJALwJAgUCd2gCAToEB21hdExpc3QJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0AgFfBA0kdDAzNzI3NTM3MzkyCQESYnV5TWF0ZXJpYWxzQ29tbW9uBAUHbWF0TGlzdAUQZmFjdG9yeUNvbnRpbmVudAUHYW1vdW50cwUJbWF4UHJpY2VzBA5mYWN0b3J5QWN0aW9ucwgFDSR0MDM3Mjc1MzczOTICXzEEBm5ld01hdAgFDSR0MDM3Mjc1MzczOTICXzIECXVzZHRTcGVudAgFDSR0MDM3Mjc1MzczOTICXzMECHRvdGFsTWF0CAUNJHQwMzcyNzUzNzM5MgJfNAQFd2hTdHIJALoJAgkAzAgCCQCRAwIFCWN1cnJlbnRXaAULd2hJZHhMZXZlbHMJAMwIAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzCQDMCAIJALkJAgUGbmV3TWF0AgFfCQDMCAIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QJAMwIAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4TE9GVAUDbmlsAgE6BAZ3aFNhdmUJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag1zYXZlV2FyZWhvdXNlCQDMCAIFBXdoU3RyCQDMCAIFC2xhbmRBc3NldElkBQNuaWwFA25pbAQLc3RhdHNSZXN1bHQJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVBY2NTdGF0cwkAzAgCBQRhZGRyCQDMCAIJAGsDBQd4cFRyYWRlBQh0b3RhbE1hdAUFTVVMVDgFA25pbAUDbmlsBAdmZWVQYXJ0CQBrAwUJdXNkdFNwZW50BQxERUxJVkVSWV9GRUUFBU1VTFQ2BANmZWUDCQBmAgUVTUlOX1VTRFRfRkVFX0RFTElWRVJZBQdmZWVQYXJ0BRVNSU5fVVNEVF9GRUVfREVMSVZFUlkFB2ZlZVBhcnQEEHVzZHRTcGVudFdpdGhGZWUJAGQCBQl1c2R0U3BlbnQFA2ZlZQMJAGYCBRB1c2R0U3BlbnRXaXRoRmVlBQNhbXQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAh9JbnN1ZmZpY2llbnQgcGF5bWVudCEgQXR0YWNoZWQ9CQEKZml4ZWRQb2ludAIFA2FtdAAGAgssIHJlcXVpcmVkPQkBCmZpeGVkUG9pbnQCBQl1c2R0U3BlbnQABgIBKwkBCmZpeGVkUG9pbnQCBQNmZWUABgIOKGRlbGl2ZXJ5IGZlZSkEBHJlc3QDCQBmAgkAZQIFA2FtdAUQdXNkdFNwZW50V2l0aEZlZQAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkAZQIFA2FtdAUQdXNkdFNwZW50V2l0aEZlZQULdXNkdEFzc2V0SWQFA25pbAUDbmlsBBBhY3Rpdml0aWVzQW1vdW50CQBpAgUJdXNkdFNwZW50AGQECWZ1bmRUb3RhbAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ9kZWxpdmVyeUZ1bmRLZXkAAAkAlAoCCQDNCAIJAM0IAgkAzggCBQ5mYWN0b3J5QWN0aW9ucwUEcmVzdAkBDlNjcmlwdFRyYW5zZmVyAwUMcmVzdENvbnRyYWN0BRBhY3Rpdml0aWVzQW1vdW50BQt1c2R0QXNzZXRJZAkBDEludGVnZXJFbnRyeQIFD2RlbGl2ZXJ5RnVuZEtleQkAZAIFCWZ1bmRUb3RhbAUDZmVlCQCVCgMFBndoU2F2ZQUMcHJvbG9nUmVzdWx0BQtzdGF0c1Jlc3VsdAFpARFleGNoYW5nZVJlc291cmNlcwEHYW1vdW50cwQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQDAwkBASEBCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBgkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEEC2N1ckxvY2F0aW9uCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgIBXwMJAQIhPQIJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUCAUYJAAIBCQCsAgICLUR1Y2sgbG9jYXRpb24gdHlwZSBzaG91bGQgYmUgRmFjdG9yeSwgYnV0IGlzIAkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAdyZXNMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfBAdtYXRMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBA0kdDAzOTUwNjM5NjEyCQEXZXhjaGFuZ2VSZXNvdXJjZXNDb21tb24DBQdyZXNMaXN0BQdtYXRMaXN0BQdhbW91bnRzBAZuZXdSZXMIBQ0kdDAzOTUwNjM5NjEyAl8xBAZuZXdNYXQIBQ0kdDAzOTUwNjM5NjEyAl8yBAl1c2R0U3BlbnQIBQ0kdDAzOTUwNjM5NjEyAl8zBBR0b3RhbEFtb3VudENvbnZlcnRlZAgFDSR0MDM5NTA2Mzk2MTICXzQDCQBmAgUJdXNkdFNwZW50BQNhbXQJAAIBCQCsAgIJAKwCAgkArAICAh9JbnN1ZmZpY2llbnQgcGF5bWVudCEgQXR0YWNoZWQ9CQEKZml4ZWRQb2ludAIFA2FtdAAGAgssIHJlcXVpcmVkPQkBCmZpeGVkUG9pbnQCBQl1c2R0U3BlbnQABgQHbmV3UGFjawkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAuQkCBQZuZXdSZXMCAV8JAMwIAgkAuQkCBQZuZXdNYXQCAV8JAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwCAToEDmJhY2twYWNrUmVzdWx0CQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQmFja3BhY2sJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUHbmV3UGFjawUDbmlsBQNuaWwEBHJlc3QDCQBmAgkAZQIFA2FtdAUJdXNkdFNwZW50AAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQBlAgUDYW10BQl1c2R0U3BlbnQFC3VzZHRBc3NldElkBQNuaWwFA25pbAQQYWN0aXZpdGllc0Ftb3VudAkAaQIFCXVzZHRTcGVudABkBAtzdGF0c1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCD3VwZGF0ZUR1Y2tTdGF0cwkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCCQBrAwUHeHBUcmFkZQUUdG90YWxBbW91bnRDb252ZXJ0ZWQFBU1VTFQ4BQNuaWwFA25pbAkAlAoCCQDNCAIFBHJlc3QJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAUQYWN0aXZpdGllc0Ftb3VudAULdXNkdEFzc2V0SWQJAJUKAwUOYmFja3BhY2tSZXN1bHQFDHByb2xvZ1Jlc3VsdAULc3RhdHNSZXN1bHQBaQEdZXhjaGFuZ2VSZXNvdXJjZXNEdWNrRGVsaXZlcnkBB2Ftb3VudHMDCQEBIQEFEUtTX0FMTE9XX0RFTElWRVJZCQACAQIfRGVsaXZlcnkgZmVhdHVyZSBpcyB0dXJuZWQgb2ZmIQQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQDAwkBASEBCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBgkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQHcmVzTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwIBXwQHbWF0TGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQNJHQwNDExMjQ0MTIzMAkBF2V4Y2hhbmdlUmVzb3VyY2VzQ29tbW9uAwUHcmVzTGlzdAUHbWF0TGlzdAUHYW1vdW50cwQGbmV3UmVzCAUNJHQwNDExMjQ0MTIzMAJfMQQGbmV3TWF0CAUNJHQwNDExMjQ0MTIzMAJfMgQJdXNkdFNwZW50CAUNJHQwNDExMjQ0MTIzMAJfMwQUdG90YWxBbW91bnRDb252ZXJ0ZWQIBQ0kdDA0MTEyNDQxMjMwAl80BAdmZWVQYXJ0CQBrAwUJdXNkdFNwZW50BQ5ERUxJVkVSWV9GRUUxNQUFTVVMVDYEA2ZlZQMJAGYCBRdNSU5fVVNEVF9GRUVfREVMSVZFUlkxNQUHZmVlUGFydAUXTUlOX1VTRFRfRkVFX0RFTElWRVJZMTUFB2ZlZVBhcnQEEHVzZHRTcGVudFdpdGhGZWUJAGQCBQl1c2R0U3BlbnQFA2ZlZQMJAGYCBRB1c2R0U3BlbnRXaXRoRmVlBQNhbXQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAh9JbnN1ZmZpY2llbnQgcGF5bWVudCEgQXR0YWNoZWQ9CQEKZml4ZWRQb2ludAIFA2FtdAAGAgssIHJlcXVpcmVkPQkBCmZpeGVkUG9pbnQCBQl1c2R0U3BlbnQABgIBKwkBCmZpeGVkUG9pbnQCBQNmZWUABgIOKGRlbGl2ZXJ5IGZlZSkEB25ld1BhY2sJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJALkJAgUGbmV3UmVzAgFfCQDMCAIJALkJAgUGbmV3TWF0AgFfCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6BA5iYWNrcGFja1Jlc3VsdAkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUJhY2twYWNrCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIFB25ld1BhY2sFA25pbAUDbmlsBARyZXN0AwkAZgIJAGUCBQNhbXQFEHVzZHRTcGVudFdpdGhGZWUAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIJAGUCBQNhbXQFEHVzZHRTcGVudFdpdGhGZWUFC3VzZHRBc3NldElkBQNuaWwFA25pbAQQYWN0aXZpdGllc0Ftb3VudAkAaQIFCXVzZHRTcGVudABkBAtzdGF0c1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCD3VwZGF0ZUR1Y2tTdGF0cwkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCCQBrAwUHeHBUcmFkZQUUdG90YWxBbW91bnRDb252ZXJ0ZWQFBU1VTFQ4BQNuaWwFA25pbAQJZnVuZFRvdGFsCQELdmFsdWVPckVsc2UCCQCfCAEFD2RlbGl2ZXJ5RnVuZEtleQAACQCUCgIJAM0IAgkAzQgCBQRyZXN0CQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFEGFjdGl2aXRpZXNBbW91bnQFC3VzZHRBc3NldElkCQEMSW50ZWdlckVudHJ5AgUPZGVsaXZlcnlGdW5kS2V5CQBkAgUJZnVuZFRvdGFsBQNmZWUJAJUKAwUOYmFja3BhY2tSZXN1bHQFDHByb2xvZ1Jlc3VsdAULc3RhdHNSZXN1bHQBaQEdZXhjaGFuZ2VSZXNvdXJjZXNMYW5kRGVsaXZlcnkCB2Ftb3VudHMLbGFuZEFzc2V0SWQDCQEBIQEFEUtTX0FMTE9XX0RFTElWRVJZCQACAQIfRGVsaXZlcnkgZmVhdHVyZSBpcyB0dXJuZWQgb2ZmIQQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABANhbXQIBQNwbXQGYW1vdW50AwMJAQEhAQkBCWlzRGVmaW5lZAEIBQNwbXQHYXNzZXRJZAYJAQIhPQIJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhNVU0RUIHBheW1lbnRzIG9ubHkhBAR1c2VyCAUBaQZjYWxsZXIEBGFkZHIJAKUIAQUEdXNlcgQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQACAQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQCd2gJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0AhRnZXRXYXJlaG91c2VSRUFET05MWQkAzAgCBQtsYW5kQXNzZXRJZAUDbmlsBQNuaWwECWN1cnJlbnRXaAkAvAkCBQJ3aAIBOgQHcmVzTGlzdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8EB21hdExpc3QJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0AgFfBA0kdDA0MzUzMDQzNjM2CQEXZXhjaGFuZ2VSZXNvdXJjZXNDb21tb24DBQdyZXNMaXN0BQdtYXRMaXN0BQdhbW91bnRzBAZuZXdSZXMIBQ0kdDA0MzUzMDQzNjM2Al8xBAZuZXdNYXQIBQ0kdDA0MzUzMDQzNjM2Al8yBAl1c2R0U3BlbnQIBQ0kdDA0MzUzMDQzNjM2Al8zBBR0b3RhbEFtb3VudENvbnZlcnRlZAgFDSR0MDQzNTMwNDM2MzYCXzQEBXdoU3RyCQC6CQIJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIJALkJAgUGbmV3UmVzAgFfCQDMCAIJALkJAgUGbmV3TWF0AgFfCQDMCAIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QJAMwIAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4TE9GVAUDbmlsAgE6BAZ3aFNhdmUJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag1zYXZlV2FyZWhvdXNlCQDMCAIFBXdoU3RyCQDMCAIFC2xhbmRBc3NldElkBQNuaWwFA25pbAQLc3RhdHNSZXN1bHQJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVBY2NTdGF0cwkAzAgCBQRhZGRyCQDMCAIJAGsDBQd4cFRyYWRlBRR0b3RhbEFtb3VudENvbnZlcnRlZAUFTVVMVDgFA25pbAUDbmlsBAdmZWVQYXJ0CQBrAwUJdXNkdFNwZW50BQ5ERUxJVkVSWV9GRUUxNQUFTVVMVDYEA2ZlZQMJAGYCBRdNSU5fVVNEVF9GRUVfREVMSVZFUlkxNQUHZmVlUGFydAUXTUlOX1VTRFRfRkVFX0RFTElWRVJZMTUFB2ZlZVBhcnQEEHVzZHRTcGVudFdpdGhGZWUJAGQCBQl1c2R0U3BlbnQFA2ZlZQMJAGYCBRB1c2R0U3BlbnRXaXRoRmVlBQNhbXQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAh9JbnN1ZmZpY2llbnQgcGF5bWVudCEgQXR0YWNoZWQ9CQEKZml4ZWRQb2ludAIFA2FtdAAGAgssIHJlcXVpcmVkPQkBCmZpeGVkUG9pbnQCBQl1c2R0U3BlbnQABgIBKwkBCmZpeGVkUG9pbnQCBQNmZWUABgIOKGRlbGl2ZXJ5IGZlZSkEBHJlc3QDCQBmAgkAZQIFA2FtdAUQdXNkdFNwZW50V2l0aEZlZQAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkAZQIFA2FtdAUQdXNkdFNwZW50V2l0aEZlZQULdXNkdEFzc2V0SWQFA25pbAUDbmlsBBBhY3Rpdml0aWVzQW1vdW50CQBpAgUJdXNkdFNwZW50AGQECWZ1bmRUb3RhbAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ9kZWxpdmVyeUZ1bmRLZXkAAAkAlAoCCQDNCAIJAM0IAgUEcmVzdAkBDlNjcmlwdFRyYW5zZmVyAwUMcmVzdENvbnRyYWN0BRBhY3Rpdml0aWVzQW1vdW50BQt1c2R0QXNzZXRJZAkBDEludGVnZXJFbnRyeQIFD2RlbGl2ZXJ5RnVuZEtleQkAZAIFCWZ1bmRUb3RhbAUDZmVlCQCVCgMFBndoU2F2ZQUMcHJvbG9nUmVzdWx0BQtzdGF0c1Jlc3VsdAFpAQpjcmFmdEdvb2RzAgpwcm9kdWN0SWR4CHF1YW50aXR5BAxwcm9sb2dSZXN1bHQJAQZwcm9sb2cAAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQECnBtdEFzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAggFA3BtdAdhc3NldElkAh5XQVZFUyBjYW4ndCBiZSB1c2VkIGFzIHBheW1lbnQDCQECIT0CBQpwbXRBc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEDCQECIT0CBQNhbXQFBU1VTFQ2CQACAQIqZXhhY3RseSAxIFVTRFQgbXVzdCBiZSBhdHRhY2hlZCBhcyBwYXltZW50AwkAZwIAAAUIcXVhbnRpdHkJAAIBAhtRdWFudGl0eSBzaG91bGQgYmUgcG9zaXRpdmUEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQLY3VyTG9jYXRpb24JALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OAgFfAwkBAiE9AgkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQIBTQkAAgEJAKwCAgIxRHVjayBsb2NhdGlvbiB0eXBlIHNob3VsZCBiZSBNYW51ZmFjdG9yeSwgYnV0IGlzIAkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQQEY29udAkAkQMCBQtjdXJMb2NhdGlvbgUPbG9jSWR4Q29udGluZW50BAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEB21hdExpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8DAwkAZgIAAAUKcHJvZHVjdElkeAYJAGcCBQpwcm9kdWN0SWR4CQCQAwEFEHByb2R1Y3Rpb25NYXRyaXgJAAIBCQCsAgICFFVua25vd24gcHJvZHVjdCBpZHg9CQCkAwEFCnByb2R1Y3RJZHgEBnJlY2lwZQkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgFCnByb2R1Y3RJZHgCAV8DCQECIT0CCQCQAwEFBnJlY2lwZQUKUkVDSVBFU0laRQkAAgEJAKwCAgIXRmF0YWw6IHVua25vd24gcmVjaXBlOiAJAJEDAgUQcHJvZHVjdGlvbk1hdHJpeAUKcHJvZHVjdElkeAQOcHJvZHVjdENvbnRJZHgJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZyZWNpcGUFDXJJZHhDb250aW5lbnQDCQECIT0CCQCRAwIFCmNvbnRpbmVudHMFDnByb2R1Y3RDb250SWR4BQRjb250CQACAQkArAICCQCsAgIJAKwCAgIdVGhpcyBwcm9kdWN0IGlzIGF2YWlsYWJsZSBpbiAJAJEDAgUKY29udGluZW50cwUOcHJvZHVjdENvbnRJZHgCESwgYnV0IHlvdSBhcmUgaW4gBQRjb250BAhwcm9kTGlzdAMJAAACCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAAUDbmlsCQC8CQIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIBXwoBBmZpbGxlcgIDYWNjC2lnbm9yZWRJdGVtBAFuCAUDYWNjAl8yBAJ4cwMJAGYCCQCQAwEFCHByb2RMaXN0BQFuCQCRAwIFCHByb2RMaXN0BQFuAgEwBAF4CQENcGFyc2VJbnRWYWx1ZQEFAnhzBAZhbW91bnQJAGgCBQhxdWFudGl0eQUOUFJPRFVDVFBLR1NJWkUEAXkDCQAAAgUBbgUKcHJvZHVjdElkeAkApAMBCQBkAgUBeAUGYW1vdW50BQJ4cwkAlAoCCQDNCAIIBQNhY2MCXzEFAXkJAGQCBQFuAAEEBmJwUHJvZAgKAAIkbAUQcHJvZHVjdGlvbk1hdHJpeAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBmZpbGxlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgNTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyAl8xCgEIcHJvZHVjZXICA2FjYwFqBAduZWVkTWF0CQBoAgkAaAIJAGgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGcmVjaXBlBQFqBQVNVUxUNQUIcXVhbnRpdHkJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZyZWNpcGUFCXJJZHhDb2VmZgQHaGF2ZU1hdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB21hdExpc3QFAWoDCQBmAgUHbmVlZE1hdAUHaGF2ZU1hdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIJWW91IGhhdmUgCQEKZml4ZWRQb2ludAIFB2hhdmVNYXQACAIEIG9mIAkAkQMCBQhtYXRUeXBlcwUBagIWLCBidXQgcmVjaXBlIHJlcXVpcmVzIAkBCmZpeGVkUG9pbnQCBQduZWVkTWF0AAgCDiBmb3IgcXVhbnRpdHkgCQCkAwEFCHF1YW50aXR5AwkAZgIFB25lZWRNYXQAAAkAlAoCCQDNCAIIBQNhY2MCXzEJAKQDAQkAZQIFB2hhdmVNYXQFB25lZWRNYXQJAGQCCAUDYWNjAl8yBQduZWVkTWF0CQCUCgIJAM0IAggFA2FjYwJfMQkAkQMCBQdtYXRMaXN0BQFqCAUDYWNjAl8yBAZtZXJnZWQKAAIkbAUFSVRFUjYKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIFA25pbAAACgEFJGYxXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQhwcm9kdWNlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMV8yAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgQHbmV3UGFjawkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgkAuQkCCAUGbWVyZ2VkAl8xAgFfCQDMCAIJALoJAgUGYnBQcm9kAgFfBQNuaWwCAToEBnJlc3VsdAkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUJhY2twYWNrCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIFB25ld1BhY2sFA25pbAUDbmlsBAtzdGF0c1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCD3VwZGF0ZUR1Y2tTdGF0cwkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCCQBrAwUHeHBDcmFmdAgFBm1lcmdlZAJfMgUFTVVMVDgFA25pbAUDbmlsCQCUCgIFA25pbAkAlQoDBQZyZXN1bHQFDHByb2xvZ1Jlc3VsdAULc3RhdHNSZXN1bHQBaQERc2V0V2FyZWhvdXNlT3JkZXICC25ld09yZGVyU3RyC2xhbmRBc3NldElkBAR1c2VyCAUBaQxvcmlnaW5DYWxsZXIEBGFkZHIJAKUIAQUEdXNlcgQGcmVzdWx0AwkBAiE9AgUEdXNlcgUMcmVzdENvbnRyYWN0CQEMY2hlY2tCbG9ja2VkAAcEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwMJAQIhPQIFBHVzZXIFDHJlc3RDb250cmFjdAkBAiE9AgUFb3duZXIFBGFkZHIHCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBAhuZXdPcmRlcgkAvAkCBQtuZXdPcmRlclN0cgIBOgQCd2gJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0AhRnZXRXYXJlaG91c2VSRUFET05MWQkAzAgCBQtsYW5kQXNzZXRJZAUDbmlsBQNuaWwECWN1cnJlbnRXaAkAvAkCBQJ3aAIBOgQEbG9mdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUAgFfBAd3aFRvdGFsCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUIdm9sVG90YWwEBm9yZEtleQkBDmtleU9yZGVyQnlMYW5kAQULbGFuZEFzc2V0SWQECmN1cnJlbnRPcmQJAQhnZXRPcmRlcgEFBm9yZEtleQQBegkBC3NldEludGVybmFsAwUJY3VycmVudFdoBQpjdXJyZW50T3JkBQhuZXdPcmRlcgQLYnV5Vm9sU2FsZG8IBQF6Al80BAxzZWxsVm9sU2FsZG8IBQF6Al81BAp3aE9jY3VwaWVkCAUBegJfNwQId2hMb2NrZWQJAGQCBQtidXlWb2xTYWxkbwUMc2VsbFZvbFNhbGRvBAZ3aEZyZWUJAGUCCQBlAgUHd2hUb3RhbAUKd2hPY2N1cGllZAUId2hMb2NrZWQDCQBmAgAABQZ3aEZyZWUJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhNBdHRlbXB0IHRvIHJlc2VydmUgCQCkAwEFC2J1eVZvbFNhbGRvAhsgc3BhY2UgZm9yIGJ1eSBvcmRlcnMsIGFuZCAJAKQDAQUMc2VsbFZvbFNhbGRvAiUgc3BhY2UgZm9yIHNlbGwgb3JkZXJzIChhbmQgb2NjdXBpZWQ9CQCkAwEFCndoT2NjdXBpZWQCHyksIGxlYWRzIHRvIG5lZ2F0aXZlIGZyZWUgc3BhY2UEBXdoU3RyCQC6CQIJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIJALkJAggFAXoCXzECAV8JAMwIAgkAuQkCCAUBegJfMgIBXwkAzAgCCQC6CQIIBQF6Al8zAgFfCQDMCAIJAKQDAQUId2hMb2NrZWQFA25pbAIBOgQGd2hTYXZlCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAINc2F2ZVdhcmVob3VzZQkAzAgCBQV3aFN0cgkAzAgCBQtsYW5kQXNzZXRJZAUDbmlsBQNuaWwECHVzZFNhbGRvCAUBegJfNgQHYWN0aW9ucwMJAGYCBQh1c2RTYWxkbwAAAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQECnBtdEFzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAggFA3BtdAdhc3NldElkAh5XQVZFUyBjYW4ndCBiZSB1c2VkIGFzIHBheW1lbnQDCQECIT0CBQpwbXRBc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEDCQECIT0CBQNhbXQFCHVzZFNhbGRvCQACAQkArAICAhJQYXltZW50IG5lZWRlZCBpcyAJAKQDAQUIdXNkU2FsZG8JAMwIAgkBC1N0cmluZ0VudHJ5AgUGb3JkS2V5BQtuZXdPcmRlclN0cgUDbmlsAwkAAAIFCHVzZFNhbGRvAAADCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhJObyBwYXltZW50cyBuZWVkZWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUGb3JkS2V5BQtuZXdPcmRlclN0cgUDbmlsAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQISTm8gcGF5bWVudHMgbmVlZGVkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBW93bmVyCQEBLQEFCHVzZFNhbGRvBQt1c2R0QXNzZXRJZAkAzAgCCQELU3RyaW5nRW50cnkCBQZvcmRLZXkFC25ld09yZGVyU3RyBQNuaWwJAJQKAgUHYWN0aW9ucwkAlAoCBQZyZXN1bHQFBndoU2F2ZQFpARRhY2NlcHRXYXJlaG91c2VPcmRlcgMKYnBPcmRlclN0cg9zaG9wTGFuZEFzc2V0SWQLZHVja0Fzc2V0SWQEDHByb2xvZ1Jlc3VsdAkBBnByb2xvZwAEBmNhbGxlcggFAWkMb3JpZ2luQ2FsbGVyBApjYWxsZXJBZGRyCQClCAEFBmNhbGxlcgQRc3Rha2VkRHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFCmNhbGxlckFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEC2N1ckxvY2F0aW9uCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBD2tleUR1Y2tMb2NhdGlvbgEFEXN0YWtlZER1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04EA2xvYwkAtQkCCQEFdmFsdWUBBQtjdXJMb2NhdGlvbgIBXwMJAQIhPQIJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAgFMCQACAQkArAICCQCsAgICFkR1Y2sgbG9jYXRpb24gdHlwZSBpcyAJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAhEsIGJ1dCBzaG91bGQgYmUgTAMJAQIhPQIFEXN0YWtlZER1Y2tBc3NldElkBQtkdWNrQXNzZXRJZAkAAgEJAKwCAgkArAICCQCsAgICFFlvdXIgc3Rha2VkIGR1Y2sgaXMgBRFzdGFrZWREdWNrQXNzZXRJZAINLCBidXQgcGFzc2VkIAULZHVja0Fzc2V0SWQEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAlicFJlc0xpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMCAV8ECWJwTWF0TGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQKYnBQcm9kTGlzdAMJAAACCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAAUDbmlsCQC8CQIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIBXwQNJHQwNTMxNDg1MzM4OAkBFWFjY2VwdFNob3BPcmRlckNvbW1vbgYFD3Nob3BMYW5kQXNzZXRJZAUKY2FsbGVyQWRkcgUKYnBPcmRlclN0cgUJYnBSZXNMaXN0BQlicE1hdExpc3QFCmJwUHJvZExpc3QECnNob3BBY3Rpb24IBQ0kdDA1MzE0ODUzMzg4Al8xBApuZXdVc2VyUmVzCAUNJHQwNTMxNDg1MzM4OAJfMgQKbmV3VXNlck1hdAgFDSR0MDUzMTQ4NTMzODgCXzMEC25ld1VzZXJQcm9kCAUNJHQwNTMxNDg1MzM4OAJfNAQNdXNkV2gyQnBTYWxkbwgFDSR0MDUzMTQ4NTMzODgCXzUEDXVzZEJwMldoU2FsZG8IBQ0kdDA1MzE0ODUzMzg4Al82BAh4cEFtb3VudAgFDSR0MDUzMTQ4NTMzODgCXzcEDXNob3BMYW5kT3duZXIIBQ0kdDA1MzE0ODUzMzg4Al84BApzaG9wV2hTYXZlCAUNJHQwNTMxNDg1MzM4OAJfOQQOYWNjU3RhdHNSZXN1bHQIBQ0kdDA1MzE0ODUzMzg4A18xMAQIYWN0aW9uczEJAMwIAgUKc2hvcEFjdGlvbgkBEHNob3AydXNlckFjdGlvbnMDBQ11c2RXaDJCcFNhbGRvBQpjYWxsZXJBZGRyAAAECGFjdGlvbnMyCQEQdXNlcjJzaG9wQWN0aW9ucwQFDXVzZEJwMldoU2FsZG8IBQFpCHBheW1lbnRzBQ1zaG9wTGFuZE93bmVyAAAECG5ld0JwU3RyCQC6CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQC5CQIFCm5ld1VzZXJSZXMCAV8JAMwIAgkAuQkCBQpuZXdVc2VyTWF0AgFfCQDMCAIJALoJAgULbmV3VXNlclByb2QCAV8FA25pbAIBOgQGYnBTYXZlCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQmFja3BhY2sJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUIbmV3QnBTdHIFA25pbAUDbmlsBA9kdWNrU3RhdHNSZXN1bHQJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag91cGRhdGVEdWNrU3RhdHMJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgkAawMFBnhwU2hvcAUIeHBBbW91bnQFBU1VTFQ4BQNuaWwFA25pbAkAlAoCCQDOCAIFCGFjdGlvbnMxBQhhY3Rpb25zMgkAlwoFBQxwcm9sb2dSZXN1bHQFCnNob3BXaFNhdmUFBmJwU2F2ZQUPZHVja1N0YXRzUmVzdWx0BQ5hY2NTdGF0c1Jlc3VsdAFpARthY2NlcHRTaG9wT3JkZXJEdWNrRGVsaXZlcnkCCG9yZGVyU3RyD3Nob3BMYW5kQXNzZXRJZAMJAQEhAQURS1NfQUxMT1dfREVMSVZFUlkJAAIBAh9EZWxpdmVyeSBmZWF0dXJlIGlzIHR1cm5lZCBvZmYhBAxwcm9sb2dSZXN1bHQJAQZwcm9sb2cABAZjYWxsZXIIBQFpDG9yaWdpbkNhbGxlcgQKY2FsbGVyQWRkcgkApQgBBQZjYWxsZXIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQpjYWxsZXJBZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQJYnBSZXNMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfBAlicE1hdExpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8ECmJwUHJvZExpc3QDCQAAAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgAFA25pbAkAvAkCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAV8EDSR0MDU0ODI3NTUwNjUJARVhY2NlcHRTaG9wT3JkZXJDb21tb24GBQ9zaG9wTGFuZEFzc2V0SWQFCmNhbGxlckFkZHIFCG9yZGVyU3RyBQlicFJlc0xpc3QFCWJwTWF0TGlzdAUKYnBQcm9kTGlzdAQKc2hvcEFjdGlvbggFDSR0MDU0ODI3NTUwNjUCXzEECm5ld1VzZXJSZXMIBQ0kdDA1NDgyNzU1MDY1Al8yBApuZXdVc2VyTWF0CAUNJHQwNTQ4Mjc1NTA2NQJfMwQLbmV3VXNlclByb2QIBQ0kdDA1NDgyNzU1MDY1Al80BA11c2RXaDJCcFNhbGRvCAUNJHQwNTQ4Mjc1NTA2NQJfNQQNdXNkQnAyV2hTYWxkbwgFDSR0MDU0ODI3NTUwNjUCXzYECHhwQW1vdW50CAUNJHQwNTQ4Mjc1NTA2NQJfNwQNc2hvcExhbmRPd25lcggFDSR0MDU0ODI3NTUwNjUCXzgECnNob3BXaFNhdmUIBQ0kdDA1NDgyNzU1MDY1Al85BA5hY2NTdGF0c1Jlc3VsdAgFDSR0MDU0ODI3NTUwNjUDXzEwBA9kZWxpdmVyeUZlZVBhcnQJAGsDCQBkAgUNdXNkQnAyV2hTYWxkbwUNdXNkV2gyQnBTYWxkbwUMREVMSVZFUllfRkVFBQVNVUxUNgQLZGVsaXZlcnlGZWUDCQBmAgUVTUlOX1VTRFRfRkVFX0RFTElWRVJZBQ9kZWxpdmVyeUZlZVBhcnQFFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQUPZGVsaXZlcnlGZWVQYXJ0BAhzcGVudEZlZQkAawMFC2RlbGl2ZXJ5RmVlBQ11c2RCcDJXaFNhbGRvCQBkAgUNdXNkQnAyV2hTYWxkbwUNdXNkV2gyQnBTYWxkbwQLcmVjZWl2ZWRGZWUJAGUCBQtkZWxpdmVyeUZlZQUIc3BlbnRGZWUECWZ1bmRUb3RhbAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ9kZWxpdmVyeUZ1bmRLZXkAAAQIYWN0aW9uczEJAMwIAgUKc2hvcEFjdGlvbgkBEHNob3AydXNlckFjdGlvbnMDBQ11c2RXaDJCcFNhbGRvBQpjYWxsZXJBZGRyBQtyZWNlaXZlZEZlZQQIYWN0aW9uczIJARB1c2VyMnNob3BBY3Rpb25zBAUNdXNkQnAyV2hTYWxkbwgFAWkIcGF5bWVudHMFDXNob3BMYW5kT3duZXIFCHNwZW50RmVlBAhuZXdCcFN0cgkAugkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAuQkCBQpuZXdVc2VyUmVzAgFfCQDMCAIJALkJAgUKbmV3VXNlck1hdAIBXwkAzAgCCQC6CQIFC25ld1VzZXJQcm9kAgFfBQNuaWwCAToEBmJwU2F2ZQkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUJhY2twYWNrCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIFCG5ld0JwU3RyBQNuaWwFA25pbAQPZHVja1N0YXRzUmVzdWx0CQEFYXNJbnQBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIPdXBkYXRlRHVja1N0YXRzCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIJAGsDBQZ4cFNob3AFCHhwQW1vdW50BQVNVUxUOAUDbmlsBQNuaWwJAJQKAgkAzQgCCQDOCAIFCGFjdGlvbnMxBQhhY3Rpb25zMgkBDEludGVnZXJFbnRyeQIFD2RlbGl2ZXJ5RnVuZEtleQkAZAIFCWZ1bmRUb3RhbAULZGVsaXZlcnlGZWUJAJcKBQUMcHJvbG9nUmVzdWx0BQpzaG9wV2hTYXZlBQZicFNhdmUFD2R1Y2tTdGF0c1Jlc3VsdAUOYWNjU3RhdHNSZXN1bHQBaQEbYWNjZXB0U2hvcE9yZGVyTGFuZERlbGl2ZXJ5AwhvcmRlclN0cg9zaG9wTGFuZEFzc2V0SWQNbXlMYW5kQXNzZXRJZAMJAQEhAQURS1NfQUxMT1dfREVMSVZFUlkJAAIBAh9EZWxpdmVyeSBmZWF0dXJlIGlzIHR1cm5lZCBvZmYhBAxwcm9sb2dSZXN1bHQJAQZwcm9sb2cABAZjYWxsZXIIBQFpDG9yaWdpbkNhbGxlcgQKY2FsbGVyQWRkcgkApQgBBQZjYWxsZXIEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQUNbXlMYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFDW15TGFuZEFzc2V0SWQJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFDW15TGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFCmNhbGxlckFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMEAndoCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIUZ2V0V2FyZWhvdXNlUkVBRE9OTFkJAMwIAgUNbXlMYW5kQXNzZXRJZAUDbmlsBQNuaWwECWN1cnJlbnRXaAkAvAkCBQJ3aAIBOgQHcmVzTGlzdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8EB21hdExpc3QJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0AgFfBAhwcm9kTGlzdAMJAAACCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAgAFA25pbAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAgFfBA0kdDA1NzMwNDU3NTM2CQEVYWNjZXB0U2hvcE9yZGVyQ29tbW9uBgUPc2hvcExhbmRBc3NldElkBQpjYWxsZXJBZGRyBQhvcmRlclN0cgUHcmVzTGlzdAUHbWF0TGlzdAUIcHJvZExpc3QECnNob3BBY3Rpb24IBQ0kdDA1NzMwNDU3NTM2Al8xBApuZXdVc2VyUmVzCAUNJHQwNTczMDQ1NzUzNgJfMgQKbmV3VXNlck1hdAgFDSR0MDU3MzA0NTc1MzYCXzMEC25ld1VzZXJQcm9kCAUNJHQwNTczMDQ1NzUzNgJfNAQNdXNkV2gyQnBTYWxkbwgFDSR0MDU3MzA0NTc1MzYCXzUEDXVzZEJwMldoU2FsZG8IBQ0kdDA1NzMwNDU3NTM2Al82BAh4cEFtb3VudAgFDSR0MDU3MzA0NTc1MzYCXzcEDXNob3BMYW5kT3duZXIIBQ0kdDA1NzMwNDU3NTM2Al84BApzaG9wV2hTYXZlCAUNJHQwNTczMDQ1NzUzNgJfOQQOYWNjU3RhdHNSZXN1bHQIBQ0kdDA1NzMwNDU3NTM2A18xMAQPZGVsaXZlcnlGZWVQYXJ0CQBrAwkAZAIFDXVzZEJwMldoU2FsZG8FDXVzZFdoMkJwU2FsZG8FDERFTElWRVJZX0ZFRQUFTVVMVDYEC2RlbGl2ZXJ5RmVlAwkAZgIFFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQUPZGVsaXZlcnlGZWVQYXJ0BRVNSU5fVVNEVF9GRUVfREVMSVZFUlkFD2RlbGl2ZXJ5RmVlUGFydAQIc3BlbnRGZWUJAGsDBQtkZWxpdmVyeUZlZQUNdXNkQnAyV2hTYWxkbwkAZAIFDXVzZEJwMldoU2FsZG8FDXVzZFdoMkJwU2FsZG8EC3JlY2VpdmVkRmVlCQBlAgULZGVsaXZlcnlGZWUFCHNwZW50RmVlBAlmdW5kVG90YWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUPZGVsaXZlcnlGdW5kS2V5AAAECGFjdGlvbnMxCQDMCAIFCnNob3BBY3Rpb24JARBzaG9wMnVzZXJBY3Rpb25zAwUNdXNkV2gyQnBTYWxkbwUKY2FsbGVyQWRkcgULcmVjZWl2ZWRGZWUECGFjdGlvbnMyCQEQdXNlcjJzaG9wQWN0aW9ucwQFDXVzZEJwMldoU2FsZG8IBQFpCHBheW1lbnRzBQ1zaG9wTGFuZE93bmVyBQhzcGVudEZlZQQFd2hTdHIJALoJAgkAzAgCCQCRAwIFCWN1cnJlbnRXaAULd2hJZHhMZXZlbHMJAMwIAgkAuQkCBQpuZXdVc2VyUmVzAgFfCQDMCAIJALkJAgUKbmV3VXNlck1hdAIBXwkAzAgCCQC5CQIFC25ld1VzZXJQcm9kAgFfCQDMCAIJAJEDAgUJY3VycmVudFdoBQl3aElkeExPRlQFA25pbAIBOgQGd2hTYXZlCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAINc2F2ZVdhcmVob3VzZQkAzAgCBQV3aFN0cgkAzAgCBQ1teUxhbmRBc3NldElkBQNuaWwFA25pbAQLc3RhdHNSZXN1bHQJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVBY2NTdGF0cwkAzAgCBQpjYWxsZXJBZGRyCQDMCAIJAGsDBQZ4cFNob3AFCHhwQW1vdW50BQVNVUxUOAUDbmlsBQNuaWwJAJQKAgkAzQgCCQDOCAIFCGFjdGlvbnMxBQhhY3Rpb25zMgkBDEludGVnZXJFbnRyeQIFD2RlbGl2ZXJ5RnVuZEtleQkAZAIFCWZ1bmRUb3RhbAULZGVsaXZlcnlGZWUJAJcKBQUMcHJvbG9nUmVzdWx0BQpzaG9wV2hTYXZlBQZ3aFNhdmUFC3N0YXRzUmVzdWx0BQ5hY2NTdGF0c1Jlc3VsdAFpARBzZWxsUHJvZHVjdHNUb0VTAQdhbW91bnRzBAxwcm9sb2dSZXN1bHQJAQZwcm9sb2cAAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQISTm8gcGF5bWVudHMgbmVlZGVkBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEC2N1ckxvY2F0aW9uCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgIBXwMJAQIhPQIJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUCAUEJAAIBCQCsAgICLUR1Y2sgbG9jYXRpb24gdHlwZSBzaG91bGQgYmUgQWlycG9ydCwgYnV0IGlzIAkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAhwcm9kTGlzdAMJAAACCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAAUDbmlsCQC8CQIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIBXwQFZXNLZXkJAQ5rZXlFc1dhcmVob3VzZQAECGV4aXN0U3RyCQCiCAEFBWVzS2V5BAxleGlzdEFtb3VudHMDCQEJaXNEZWZpbmVkAQUIZXhpc3RTdHIJALwJAgkBBXZhbHVlAQUIZXhpc3RTdHICAV8FA25pbAoBCG1vdmVQcm9kAgNhY2MJcmVjaXBlU3RyBAFqCAUDYWNjAl8xBAhxdWFudGl0eQMJAGYCCQCQAwEFB2Ftb3VudHMFAWoJAJEDAgUHYW1vdW50cwUBagAAAwkAZgIAAAUIcXVhbnRpdHkJAAIBAhtRdWFudGl0eSBjYW5ub3QgYmUgbmVnYXRpdmUEBnJlY2lwZQkAtQkCBQlyZWNpcGVTdHICAV8DCQECIT0CCQCQAwEFBnJlY2lwZQUKUkVDSVBFU0laRQkAAgEJAKwCAgIXRmF0YWw6IHVua25vd24gcmVjaXBlOiAFCXJlY2lwZVN0cgQJbWF4QW1vdW50CQBoAgUNRVNNQVhQQUNLQUdFUwUOUFJPRFVDVFBLR1NJWkUEC2V4aXN0QW1vdW50AwkAZgIJAJADAQUMZXhpc3RBbW91bnRzBQFqCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUMZXhpc3RBbW91bnRzBQFqAAAEBmNhbkJ1eQkAZQIFCW1heEFtb3VudAULZXhpc3RBbW91bnQDCQBmAgUIcXVhbnRpdHkFBmNhbkJ1eQkAAgEJAKwCAgkArAICCQCsAgICF1dhcmVob3VzZSBjYW4gYnV5IG9ubHkgCQCkAwEFBmNhbkJ1eQIEIG9mIAkAkQMCBQlwcm9kVHlwZXMFAWoECHRvdGFsTWF0CQESZ2V0UmVjaXBlTWF0ZXJpYWxzAQUGcmVjaXBlBAl1bml0UHJpY2UJAGsDCQBoAgUIdG90YWxNYXQFCUVTQlVZQ09FRgUQUkVTT1VSQ0VQUklDRU1JTgkAaAIFBU1VTFQ4BQ5QUk9EVUNUUEtHU0laRQQMYnBQcm9kQW1vdW50AwkAZgIJAJADAQUIcHJvZExpc3QFAWoJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhwcm9kTGlzdAUBagAAAwkAZgIFCHF1YW50aXR5BQxicFByb2RBbW91bnQJAAIBCQCsAgIJAKwCAgkArAICAg5Zb3UgaGF2ZSBvbmx5IAkApAMBBQxicFByb2RBbW91bnQCBCBvZiAJAJEDAgUJcHJvZFR5cGVzBQFqCQCXCgUJAGQCBQFqAAEJAGQCCAUDYWNjAl8yCQBoAgUJdW5pdFByaWNlBQhxdWFudGl0eQkAzQgCCAUDYWNjAl8zCQCkAwEJAGUCBQxicFByb2RBbW91bnQFCHF1YW50aXR5CQDNCAIIBQNhY2MCXzQJAKQDAQkAZAIFC2V4aXN0QW1vdW50BQhxdWFudGl0eQkAZAIIBQNhY2MCXzUJAGgCBQh0b3RhbE1hdAUIcXVhbnRpdHkEBm1lcmdlZAoAAiRsBRBwcm9kdWN0aW9uTWF0cml4CgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlwoFAAAAAAUDbmlsBQNuaWwAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEIbW92ZVByb2QCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDUwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgQIbmV3QnBTdHIJALoJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0CQDMCAIJALoJAggFBm1lcmdlZAJfMwIBXwUDbmlsAgE6BAZicFNhdmUJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVCYWNrcGFjawkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQhuZXdCcFN0cgUDbmlsBQNuaWwEC3N0YXRzUmVzdWx0CQEFYXNJbnQBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIPdXBkYXRlRHVja1N0YXRzCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIJAGsDBQp4cFNlbGxUb0VzCAUGbWVyZ2VkAl81CQBoAgUFTVVMVDgACgUDbmlsBQNuaWwJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCBQVlc0tleQkAugkCCAUGbWVyZ2VkAl80AgFfCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcggFBm1lcmdlZAJfMgULdXNkdEFzc2V0SWQFA25pbAkAlQoDBQZicFNhdmUFDHByb2xvZ1Jlc3VsdAULc3RhdHNSZXN1bHQBaQEPdXBkYXRlRXNTdG9yYWdlAQpuZXdTdG9yYWdlAwkBAiE9AggFAWkGY2FsbGVyBQ9zdGFraW5nQ29udHJhY3QJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ5rZXlFc1dhcmVob3VzZQAFCm5ld1N0b3JhZ2UFA25pbAUKbmV3U3RvcmFnZQFpARR1cGRhdGVEZWxpdmVyeUxvY2tlZAEJbmV3QW1vdW50AwkBAiE9AggFAWkGY2FsbGVyBQ9zdGFraW5nQ29udHJhY3QJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFkZWxpdmVyeUxvY2tlZEtleQUJbmV3QW1vdW50BQNuaWwFCW5ld0Ftb3VudAFpARJzZW5kRGVsaXZlcnlSZXdhcmQBBGFkZHIDCQECIT0CCAUBaQZjYWxsZXIFD3N0YWtpbmdDb250cmFjdAkAAgECEVBlcm1pc3Npb24gZGVuaWVkBAlmdW5kVG90YWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUPZGVsaXZlcnlGdW5kS2V5AAAEC2xvY2tlZFRvdGFsCQELdmFsdWVPckVsc2UCCQCfCAEFEWRlbGl2ZXJ5TG9ja2VkS2V5AAAEC2FjcmVzQW1vdW50CQBoAgUVTUlOX1VTRFRfRkVFX0RFTElWRVJZBRVVU0RUMkFDUkVTX01VTFRJUExJRVIEC2FjcmVzUmVzdWx0CQD8BwQFDWFjcmVzQ29udHJhY3QCCXNlbmRBY3JlcwkAzAgCBQRhZGRyCQDMCAIFC2FjcmVzQW1vdW50BQNuaWwFA25pbAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ9kZWxpdmVyeUZ1bmRLZXkJAGUCBQlmdW5kVG90YWwFFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQkAzAgCCQEMSW50ZWdlckVudHJ5AgURZGVsaXZlcnlMb2NrZWRLZXkJAGUCBQtsb2NrZWRUb3RhbAUVTUlOX1VTRFRfRkVFX0RFTElWRVJZBQNuaWwFC2FjcmVzUmVzdWx0AGaSC64=", "height": 2790248, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: CFCvr7Be2F22wqM8hoaisFpj9fxdubE8Kyu98mxqVrAB Next: 7ULUxtdwr4y9e2TFrzHWyK3ibTrU538Y1pBkwpGNRwpy Diff:
OldNewDifferences
2525
2626 let l = 75000
2727
28-let m = ["Oil", "Ore", "Wood", "Sand", "Clay", "Organic"]
28+let m = 10
2929
30-let n = ["Fuel", "Metal", "Plank", "Glass", "Plastic", "Protein"]
30+let n = ["Oil", "Ore", "Wood", "Sand", "Clay", "Organic"]
3131
32-let o = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3", "Mine L1", "Mine L2", "Mine L3", "Trap L1", "Trap L2", "Trap L3"]
32+let o = ["Fuel", "Metal", "Plank", "Glass", "Plastic", "Protein"]
3333
34-let p = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
34+let p = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3", "Mine L1", "Mine L2", "Mine L3", "Trap L1", "Trap L2", "Trap L3"]
3535
36-let q = 10000000
36+let q = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
3737
38-let r = ["8_8_8_17_17_42_12_0_30_0,0,0,0,0,0,0_", "8_8_8_17_17_42_24_0_60_0,0,5,2,0,0,0_", "8_8_8_17_17_42_36_0_120_0,0,10,4,0,0,0_", "8_19_19_8_27_19_26_1_20_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_52_1_40_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_78_1_80_0,0,0,0,0,0,0_001", "8_8_8_8_8_60_13_2_2_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_011", "30_30_3_17_17_3_30_3_30_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_60_3_50_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_90_3_70_0,0,0,0,0,0,0_111", "18_18_10_18_18_18_11_4_10_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_20_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_30_0,0,0,0,0,0,0_201", "4_13_22_4_35_22_23_0_50,1,0_0,0,0,0,0,0,0_", "4_13_22_4_35_22_46_0_50,1,1_0,2,5,0,0,0,0_", "4_13_22_4_35_22_69_0_50,2,1_0,5,10,0,0,0,0_", "5_25_40_5_10_15_20_1_30,1,1_0,0,0,0,0,0,0_", "5_25_40_5_10_15_40_1_30,1,2_2,1,3,0,0,0,0_", "5_25_40_5_10_15_60_1_30,1,3_5,2,8,0,0,0,0_"]
38+let r = 10000000
3939
40-let s = 6
40+let s = ["8_8_8_17_17_42_12_0_30_0,0,0,0,0,0,0_", "8_8_8_17_17_42_24_0_60_0,0,5,2,0,0,0_", "8_8_8_17_17_42_36_0_120_0,0,10,4,0,0,0_", "8_19_19_8_27_19_26_1_20_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_52_1_40_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_78_1_80_0,0,0,0,0,0,0_001", "8_8_8_8_8_60_13_2_2_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_011", "30_30_3_17_17_3_30_3_30_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_60_3_50_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_90_3_70_0,0,0,0,0,0,0_111", "18_18_10_18_18_18_11_4_10_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_20_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_30_0,0,0,0,0,0,0_201", "4_13_22_4_35_22_23_0_50,1,0_0,0,0,0,0,0,0_", "4_13_22_4_35_22_46_0_50,1,1_0,2,5,0,0,0,0_", "4_13_22_4_35_22_69_0_50,2,1_0,5,10,0,0,0,0_", "5_25_40_5_10_15_20_1_30,1,1_0,0,0,0,0,0,0_", "5_25_40_5_10_15_40_1_30,1,2_2,1,3,0,0,0,0_", "5_25_40_5_10_15_60_1_30,1,3_5,2,8,0,0,0,0_"]
4141
42-let t = 7
42+let t = 6
4343
44-let u = 11
44+let u = 7
4545
46-let v = 10
46+let v = 11
4747
48-let w = 0
48+let w = 10
4949
50-let x = 1
50+let x = 0
5151
52-let y = 2
52+let y = 1
5353
54-let z = 3
54+let z = 2
5555
56-let A = 4
56+let A = 3
5757
58-let B = 0
58+let B = 4
5959
60-let C = 3
60+let C = 0
6161
62-let D = 0
62+let D = 3
6363
64-let E = 1
64+let E = 0
6565
66-let F = 2
66+let F = 1
6767
68-let G = 3
68+let G = 2
6969
70-let H = 0
70+let H = 3
7171
72-let I = 1
72+let I = 0
7373
74-let J = 2
74+let J = 1
7575
76-func K (L) = ("no_" + L)
76+let K = 2
77+
78+func L (M) = ("no_" + M)
7779
7880
79-func M (L) = ("st_" + L)
81+func N (M) = ("st_" + M)
8082
8183
82-func N (O) = ("accRefBy_" + O)
84+func O (P) = ("accRefBy_" + P)
8385
8486
85-func P (Q) = ("stakedDuckByOwner_" + Q)
87+func Q (R) = ("stakedDuckByOwner_" + R)
8688
8789
88-func R (S) = ("backPack_" + S)
90+func S (T) = ("backPack_" + T)
8991
9092
91-func T (S) = ("duckLocation_" + S)
93+func U (T) = ("duckLocation_" + T)
9294
9395
94-func U (V) = ("landOrder_" + V)
96+func V (W) = ("landOrder_" + W)
9597
9698
97-func W () = "emergencyWarehouseProducts"
99+func X () = "emergencyWarehouseProducts"
98100
99101
100-let X = "deliveryFund"
102+let Y = "deliveryFund"
101103
102-let Y = "deliveryLocked"
104+let Z = "deliveryLocked"
103105
104-func Z (aa) = (parseIntValue(aa[s]) * q)
106+func aa (ab) = (parseIntValue(ab[t]) * r)
105107
106108
107-let ab = true
109+let ac = true
108110
109-let ac = take(drop(this.bytes, 1), 1)
111+let ad = take(drop(this.bytes, 1), 1)
110112
111-let ad = {
112- let ae = ac
113- if ((base58'2W' == ae))
113+let ae = {
114+ let af = ad
115+ if ((base58'2W' == af))
114116 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
115- else if ((base58'2T' == ae))
117+ else if ((base58'2T' == af))
116118 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
117119 else throw("Unknown chain")
118120 }
119121
120-let af = {
121- let ae = ac
122- if ((base58'2W' == ae))
122+let ag = {
123+ let af = ad
124+ if ((base58'2W' == af))
123125 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
124- else if ((base58'2T' == ae))
126+ else if ((base58'2T' == af))
125127 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
126128 else throw("Unknown chain")
127129 }
128130
129-let ag = "__"
131+let ah = "__"
130132
131-let ah = 100000
133+let ai = 100000
132134
133-let ai = 1000000
135+let aj = 1000000
134136
135-let aj = 100000000
137+let ak = 100000000
136138
137-let ak = 10000000000
139+let al = 10000000000
138140
139-let al = 100000
141+let am = 100000
140142
141-let am = [0, 1, 2, 3, 4, 5]
143+let an = [0, 1, 2, 3, 4, 5]
142144
143-func an (ao,ap) = valueOrErrorMessage(getString(ao, ap), makeString(["mandatory ", toString(ao), ".", ap, " is not defined"], ""))
145+func ao (ap,aq) = valueOrErrorMessage(getString(ap, aq), makeString(["mandatory ", toString(ap), ".", aq, " is not defined"], ""))
144146
145147
146-let aq = 1
148+let ar = 1
147149
148-let ar = 6
150+let as = 6
149151
150-let as = 8
152+let at = 8
151153
152-func at () = "%s__restConfig"
154+func au () = "%s__restConfig"
153155
154156
155-func au () = "%s__restAddr"
157+func av () = "%s__restAddr"
156158
157159
158-func av (aw) = split_4C(an(aw, at()), ag)
160+func aw (ax) = split_4C(ao(ax, au()), ah)
159161
160162
161-func ax (ay,az) = valueOrErrorMessage(addressFromString(ay[az]), ("Rest cfg doesn't contain address at index " + toString(az)))
163+func ay (az,aA) = valueOrErrorMessage(addressFromString(az[aA]), ("Rest cfg doesn't contain address at index " + toString(aA)))
162164
163165
164-let aA = addressFromStringValue(valueOrElse(getString(this, au()), af))
166+let aB = addressFromStringValue(valueOrElse(getString(this, av()), ag))
165167
166-let ay = av(aA)
168+let az = aw(aB)
167169
168-let aB = ax(ay, aq)
170+let aC = ay(az, ar)
169171
170-let aC = ax(ay, ar)
172+let aD = ay(az, as)
171173
172-let aD = ax(ay, as)
174+let aE = ay(az, at)
173175
174-func aE (aF) = {
175- let ae = aF
176- if ($isInstanceOf(ae, "String"))
176+func aF (aG) = {
177+ let af = aG
178+ if ($isInstanceOf(af, "String"))
177179 then {
178- let aG = ae
179- aG
180+ let aH = af
181+ aH
180182 }
181183 else throw("fail to cast into String")
182184 }
183185
184186
185-func aH (aF) = {
186- let ae = aF
187- if ($isInstanceOf(ae, "Int"))
187+func aI (aG) = {
188+ let af = aG
189+ if ($isInstanceOf(af, "Int"))
188190 then {
189- let aI = ae
190- aI
191+ let aJ = af
192+ aJ
191193 }
192194 else throw("fail to cast into Int")
193195 }
194196
195197
196-func aJ () = "contractsBlocked"
198+func aK () = "contractsBlocked"
197199
198200
199-func aK (aL,aM) = {
200- let aN = pow(10, 0, aM, 0, 0, DOWN)
201- let aO = toString((aL % aN))
202- let aP = drop(toString(aN), (1 + size(aO)))
203- (((toString((aL / aN)) + ".") + aP) + aO)
201+func aL (aM,aN) = {
202+ let aO = pow(10, 0, aN, 0, 0, DOWN)
203+ let aP = toString((aM % aO))
204+ let aQ = drop(toString(aO), (1 + size(aP)))
205+ (((toString((aM / aO)) + ".") + aQ) + aP)
204206 }
205207
206208
207-let aQ = 10000000000
209+let aR = 10000000000
208210
209-let aR = 200
211+let aS = 200
210212
211-let aS = 300
212-
213-let aT = 10000
213+let aT = 300
214214
215215 let aU = 10000
216216
217-let aV = 15000
217+let aV = 10000
218218
219-func aW (aX,aY) = ((("factoryWhByContinentAndRes_" + aX) + "_") + toString(aY))
219+let aW = 15000
220+
221+func aX (aY,aZ) = ((("factoryWhByContinentAndRes_" + aY) + "_") + toString(aZ))
220222
221223
222-let aZ = 0
224+let ba = 0
223225
224-let ba = 1
226+let bb = 1
225227
226-let bb = 2
228+let bc = 2
227229
228-func bc (bd) = {
229- let be = split(valueOrElse(getString(bd), "0@0_0@0_0@0_0@0_0@0_0@0:0@0_0@0_0@0_0@0_0@0_0@0:"), ":")
230-[if ((size(split(be[aZ], "_")) == f))
231- then be[aZ]
232- else "0@0_0@0_0@0_0@0_0@0_0@0", if ((size(split(be[ba], "_")) == f))
233- then be[ba]
234- else "0@0_0@0_0@0_0@0_0@0_0@0", be[bb]]
230+func bd (be) = {
231+ let bf = split(valueOrElse(getString(be), "0@0_0@0_0@0_0@0_0@0_0@0:0@0_0@0_0@0_0@0_0@0_0@0:"), ":")
232+[if ((size(split(bf[ba], "_")) == f))
233+ then bf[ba]
234+ else "0@0_0@0_0@0_0@0_0@0_0@0", if ((size(split(bf[bb], "_")) == f))
235+ then bf[bb]
236+ else "0@0_0@0_0@0_0@0_0@0_0@0", bf[bc]]
235237 }
236238
237239
238-func bf (bg,bh,bi) = if (bi)
240+func bg (bh,bi,bj) = if (bj)
239241 then {
240- let bj = if ((bg >= 0))
241- then (((bg + bh) - 1) / bh)
242- else -((((-(bg) + bh) - 1) / bh))
243- (bj * aj)
242+ let bk = if ((bh >= 0))
243+ then (((bh + bi) - 1) / bi)
244+ else -((((-(bh) + bi) - 1) / bi))
245+ (bk * ak)
244246 }
245- else bg
247+ else bh
246248
247249
248-func bk (bl,aY,bg,bm) = {
249- let bn = aW(bl, aY)
250- let bo = valueOrElse(getInteger(bn), 0)
251- let bp = if ((bo > aQ))
250+func bl (bm,aZ,bh,bn) = {
251+ let bo = aX(bm, aZ)
252+ let bp = valueOrElse(getInteger(bo), 0)
253+ let bq = if ((bp > aR))
252254 then 0
253- else if (((bo + bg) > aQ))
254- then (aQ - bo)
255- else bg
256- let bq = (fraction(bp, ((aR * h) - fraction(((100 * bo) + (50 * bp)), h, aQ)), ak) + fraction((bg - bp), h, aj))
257- let br = (bm - (bm / 100))
258- if (((br * bg) > (bq * aj)))
259- then throw((((((((((("Actual price = " + toString(bq)) + " / ") + toString(bg)) + " < minPrice = ") + toString(bm)) + ", (") + bl) + ", ") + m[aY]) + ")"))
260- else $Tuple2(IntegerEntry(bn, (bo + bg)), bq)
255+ else if (((bp + bh) > aR))
256+ then (aR - bp)
257+ else bh
258+ let br = (fraction(bq, ((aS * h) - fraction(((100 * bp) + (50 * bq)), h, aR)), al) + fraction((bh - bq), h, ak))
259+ let bs = (bn - (bn / 100))
260+ if (((bs * bh) > (br * ak)))
261+ then throw((((((((((("Actual price = " + toString(br)) + " / ") + toString(bh)) + " < minPrice = ") + toString(bn)) + ", (") + bm) + ", ") + n[aZ]) + ")"))
262+ else $Tuple2(IntegerEntry(bo, (bp + bh)), br)
261263 }
262264
263265
264-func bs (bl,bt,bg,bu) = {
265- let bn = aW(bl, bt)
266- let bo = valueOrElse(getInteger(bn), 0)
267- let bv = if ((bo > aQ))
268- then min([bg, (bo - aQ)])
266+func bt (bm,bu,bh,bv) = {
267+ let bo = aX(bm, bu)
268+ let bp = valueOrElse(getInteger(bo), 0)
269+ let bw = if ((bp > aR))
270+ then min([bh, (bp - aR)])
269271 else 0
270- let bw = min([bo, (bg - bv)])
271- let bx = (bw + bv)
272- let by = min([bo, aQ])
273- let bz = (fraction(bw, ((aS * h) - fraction(((100 * by) - (50 * bw)), h, aQ)), ak) + fraction(bv, (2 * h), aj))
274- let bA = (bu + (bu / 100))
275- if (((bz * aj) > (bA * bx)))
276- then throw((((((((((("Actual price = " + toString(bz)) + " / ") + toString(bx)) + " > maxPrice = ") + toString(bu)) + ", (") + bl) + ", ") + n[bt]) + ")"))
277- else $Tuple3(IntegerEntry(bn, (bo - bx)), bz, bx)
272+ let bx = min([bp, (bh - bw)])
273+ let by = (bx + bw)
274+ let bz = min([bp, aR])
275+ let bA = (fraction(bx, ((aT * h) - fraction(((100 * bz) - (50 * bx)), h, aR)), al) + fraction(bw, (2 * h), ak))
276+ let bB = (bv + (bv / 100))
277+ if (((bA * ak) > (bB * by)))
278+ then throw((((((((((("Actual price = " + toString(bA)) + " / ") + toString(by)) + " > maxPrice = ") + toString(bv)) + ", (") + bm) + ", ") + o[bu]) + ")"))
279+ else $Tuple3(IntegerEntry(bo, (bp - by)), bA, by)
278280 }
279281
280282
281-func bB (bC) = {
282- let be = split_4C(valueOrElse(getString(aB, bC), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
283-[toString(valueOrElse(parseInt(be[D]), 0)), if ((size(split(be[E], "_")) == f))
284- then be[E]
285- else "0_0_0_0_0_0", if ((size(split(be[F], "_")) == f))
286- then be[F]
287- else "0_0_0_0_0_0", be[G]]
283+func bC (bD) = {
284+ let bf = split_4C(valueOrElse(getString(aC, bD), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
285+[toString(valueOrElse(parseInt(bf[E]), 0)), if ((size(split(bf[F], "_")) == f))
286+ then bf[F]
287+ else "0_0_0_0_0_0", if ((size(split(bf[G], "_")) == f))
288+ then bf[G]
289+ else "0_0_0_0_0_0", bf[H]]
288290 }
289291
290292
291-func bD () = if (valueOrElse(getBoolean(aB, aJ()), false))
293+func bE () = if (valueOrElse(getBoolean(aC, aK()), false))
292294 then throw("Contracts are under maintenance")
293295 else unit
294296
295297
296-func bE () = aH(invoke(aB, "saveLastTx", nil, nil))
298+func bF () = aI(invoke(aC, "saveLastTx", nil, nil))
297299
298300
299-func bF (bG,bH) = {
300- let bI = bG._1
301- let bJ = if ((size(bG._10) > bI))
302- then bG._10[bI]
301+func bG (bH,bI) = {
302+ let bJ = bH._1
303+ let bK = if ((size(bH._10) > bJ))
304+ then bH._10[bJ]
303305 else "0@0"
304- let bK = bG._8
305- let bL = split(bJ, "@")
306- if ((size(bL) != 2))
306+ let bL = bH._8
307+ let bM = split(bK, "@")
308+ if ((size(bM) != 2))
307309 then throw("Incorrect order format, should be amount@price")
308310 else {
309- let bM = parseIntValue(bL[0])
310- let bN = parseIntValue(bL[1])
311- let bO = if (bK)
312- then (bM * bN)
313- else fraction(bM, bN, aj)
314- let bP = bf(bM, v, bK)
315- let bQ = if ((size(bG._6) > bI))
316- then parseIntValue(bG._6[bI])
311+ let bN = parseIntValue(bM[0])
312+ let bO = parseIntValue(bM[1])
313+ let bP = if (bL)
314+ then (bN * bO)
315+ else fraction(bN, bO, ak)
316+ let bQ = bg(bN, w, bL)
317+ let bR = if ((size(bH._6) > bJ))
318+ then parseIntValue(bH._6[bJ])
317319 else 0
318- let bR = split(if ((size(bG._7) > bI))
319- then bG._7[bI]
320+ let bS = split(if ((size(bH._7) > bJ))
321+ then bH._7[bJ]
320322 else "0@0", "@")
321- let bS = parseIntValue(bR[0])
322- let bT = parseIntValue(bR[1])
323- if (if ((0 > bT))
323+ let bT = parseIntValue(bS[0])
324+ let bU = parseIntValue(bS[1])
325+ if (if ((0 > bU))
324326 then true
325- else (0 > bN))
327+ else (0 > bO))
326328 then throw("Price can't be negative")
327329 else {
328- let bU = if (bK)
329- then (bS * bT)
330- else fraction(bS, bT, aj)
331- if ((bM == 0))
332- then if ((bS > 0))
333- then $Tuple10((bI + 1), (bG._2 :+ toString(bQ)), bG._3, bG._4, (bG._5 - bU), bG._6, bG._7, bK, (bG._9 + bf(bQ, v, bK)), bG._10)
334- else $Tuple10((bI + 1), (bG._2 :+ toString((bQ - bS))), bG._3, bG._4, bG._5, bG._6, bG._7, bK, (bG._9 + bf((bQ - bS), v, bK)), bG._10)
335- else if ((bM > 0))
336- then if ((0 > bS))
337- then $Tuple10((bI + 1), (bG._2 :+ toString((bQ - bS))), (bG._3 + bP), bG._4, (bG._5 + bO), bG._6, bG._7, bK, bf((bQ - bS), v, bK), bG._10)
338- else $Tuple10((bI + 1), (bG._2 :+ toString(bQ)), (bG._3 + bP), bG._4, ((bG._5 + bO) - bU), bG._6, bG._7, bK, bf(bQ, v, bK), bG._10)
339- else if ((0 > bS))
330+ let bV = if (bL)
331+ then (bT * bU)
332+ else fraction(bT, bU, ak)
333+ if ((bN == 0))
334+ then if ((bT > 0))
335+ then $Tuple10((bJ + 1), (bH._2 :+ toString(bR)), bH._3, bH._4, (bH._5 - bV), bH._6, bH._7, bL, (bH._9 + bg(bR, w, bL)), bH._10)
336+ else $Tuple10((bJ + 1), (bH._2 :+ toString((bR - bT))), bH._3, bH._4, bH._5, bH._6, bH._7, bL, (bH._9 + bg((bR - bT), w, bL)), bH._10)
337+ else if ((bN > 0))
338+ then if ((0 > bT))
339+ then $Tuple10((bJ + 1), (bH._2 :+ toString((bR - bT))), (bH._3 + bQ), bH._4, (bH._5 + bP), bH._6, bH._7, bL, bg((bR - bT), w, bL), bH._10)
340+ else $Tuple10((bJ + 1), (bH._2 :+ toString(bR)), (bH._3 + bQ), bH._4, ((bH._5 + bP) - bV), bH._6, bH._7, bL, bg(bR, w, bL), bH._10)
341+ else if ((0 > bT))
340342 then {
341- let bV = (bS - bM)
342- if ((0 > (bQ - bV)))
343- then throw((((("Attempt to take " + toString(bV)) + " from warehouse, but only ") + toString(bQ)) + " available"))
344- else $Tuple10((bI + 1), (bG._2 :+ toString((bQ - bV))), bG._3, (bG._4 - bP), bG._5, bG._6, bG._7, bK, bf((bQ - bV), v, bK), bG._10)
343+ let bW = (bT - bN)
344+ if ((0 > (bR - bW)))
345+ then throw((((("Attempt to take " + toString(bW)) + " from warehouse, but only ") + toString(bR)) + " available"))
346+ else $Tuple10((bJ + 1), (bH._2 :+ toString((bR - bW))), bH._3, (bH._4 - bQ), bH._5, bH._6, bH._7, bL, bg((bR - bW), w, bL), bH._10)
345347 }
346- else if ((0 > (bQ + bM)))
347- then throw((((("Attempt to take " + toString(-(bM))) + " from warehouse, but only ") + toString(bQ)) + " available"))
348- else $Tuple10((bI + 1), (bG._2 :+ toString((bQ + bM))), bG._3, (bG._4 - bP), (bG._5 - bU), bG._6, bG._7, bK, bf((bQ + bM), v, bK), bG._10)
348+ else if ((0 > (bR + bN)))
349+ then throw((((("Attempt to take " + toString(-(bN))) + " from warehouse, but only ") + toString(bR)) + " available"))
350+ else $Tuple10((bJ + 1), (bH._2 :+ toString((bR + bN))), bH._3, (bH._4 - bQ), (bH._5 - bV), bH._6, bH._7, bL, bg((bR + bN), w, bL), bH._10)
349351 }
350352 }
351353 }
352354
353355
354-func bW (bX,bY,bZ) = {
355- let ca = split(bX[x], "_")
356- let cb = split(bX[y], "_")
357- let cc = if ((bX[z] == ""))
356+func bX (bY,bZ,ca) = {
357+ let cb = split(bY[y], "_")
358+ let cc = split(bY[z], "_")
359+ let cd = if ((bY[A] == ""))
358360 then nil
359- else split_4C(bX[z], "_")
360- let cd = split(bY[aZ], "_")
361- let ce = split(bY[ba], "_")
362- let cf = if ((bY[bb] == ""))
361+ else split_4C(bY[A], "_")
362+ let ce = split(bZ[ba], "_")
363+ let cf = split(bZ[bb], "_")
364+ let cg = if ((bZ[bc] == ""))
363365 then nil
364- else split_4C(bY[bb], "_")
365- if ((size(bZ) != 3))
366+ else split_4C(bZ[bc], "_")
367+ if ((size(ca) != 3))
366368 then throw("newOrderStr should contain exactly 2 ':' separators")
367369 else {
368- let cg = split(bZ[0], "_")
369- let ch = split(bZ[1], "_")
370- let ci = if ((bZ[2] == ""))
370+ let ch = split(ca[0], "_")
371+ let ci = split(ca[1], "_")
372+ let cj = if ((ca[2] == ""))
371373 then nil
372- else split_4C(bZ[2], "_")
373- if ((size(cg) != f))
374+ else split_4C(ca[2], "_")
375+ if ((size(ch) != f))
374376 then throw("All 6 resources should be passed")
375- else if ((size(ch) != f))
377+ else if ((size(ci) != f))
376378 then throw("All 6 materials should be passed")
377379 else {
378- let cj = {
379- let ck = m
380- let cl = size(ck)
381- let cm = $Tuple10(0, nil, 0, 0, 0, ca, cd, false, 0, cg)
382- func cn (co,cp) = if ((cp >= cl))
383- then co
384- else bF(co, ck[cp])
380+ let ck = {
381+ let cl = n
382+ let cm = size(cl)
383+ let cn = $Tuple10(0, nil, 0, 0, 0, cb, ce, false, 0, ch)
384+ func co (cp,cq) = if ((cq >= cm))
385+ then cp
386+ else bG(cp, cl[cq])
385387
386- func cq (co,cp) = if ((cp >= cl))
387- then co
388+ func cr (cp,cq) = if ((cq >= cm))
389+ then cp
388390 else throw("List size exceeds 6")
389391
390- cq(cn(cn(cn(cn(cn(cn(cm, 0), 1), 2), 3), 4), 5), 6)
392+ cr(co(co(co(co(co(co(cn, 0), 1), 2), 3), 4), 5), 6)
391393 }
392- let bx = {
393- let ck = n
394- let cl = size(ck)
395- let cm = $Tuple10(0, nil, cj._3, cj._4, cj._5, cb, ce, false, cj._9, ch)
396- func cr (co,cp) = if ((cp >= cl))
397- then co
398- else bF(co, ck[cp])
394+ let by = {
395+ let cl = o
396+ let cm = size(cl)
397+ let cn = $Tuple10(0, nil, ck._3, ck._4, ck._5, cc, cf, false, ck._9, ci)
398+ func cs (cp,cq) = if ((cq >= cm))
399+ then cp
400+ else bG(cp, cl[cq])
399401
400- func cs (co,cp) = if ((cp >= cl))
401- then co
402+ func ct (cp,cq) = if ((cq >= cm))
403+ then cp
402404 else throw("List size exceeds 6")
403405
404- cs(cr(cr(cr(cr(cr(cr(cm, 0), 1), 2), 3), 4), 5), 6)
406+ ct(cs(cs(cs(cs(cs(cs(cn, 0), 1), 2), 3), 4), 5), 6)
405407 }
406- let be = {
407- let ck = o
408- let cl = size(ck)
409- let cm = $Tuple10(0, nil, bx._3, bx._4, bx._5, cc, cf, true, bx._9, ci)
410- func ct (co,cp) = if ((cp >= cl))
411- then co
412- else bF(co, ck[cp])
408+ let bf = {
409+ let cl = p
410+ let cm = size(cl)
411+ let cn = $Tuple10(0, nil, by._3, by._4, by._5, cd, cg, true, by._9, cj)
412+ func cu (cp,cq) = if ((cq >= cm))
413+ then cp
414+ else bG(cp, cl[cq])
413415
414- func cu (co,cp) = if ((cp >= cl))
415- then co
416+ func cv (cp,cq) = if ((cq >= cm))
417+ then cp
416418 else throw("List size exceeds 50")
417419
418- cu(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(cm, 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)
420+ cv(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cn, 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)
419421 }
420- $Tuple7(cj._2, bx._2, be._2, be._3, be._4, be._5, be._9)
422+ $Tuple7(ck._2, by._2, bf._2, bf._3, bf._4, bf._5, bf._9)
421423 }
422424 }
423425 }
424426
425427
426-func cv (bG,cw) = {
427- let bI = bG._7
428- let bK = bG._12
429- let cx = split(cw, "@")
430- if ((size(cx) != 2))
428+func cw (bH,cx) = {
429+ let bJ = bH._7
430+ let bL = bH._12
431+ let cy = split(cx, "@")
432+ if ((size(cy) != 2))
431433 then throw("Incorrect order format, should be amount@price")
432434 else {
433- let cy = parseIntValue(cx[0])
434- let cz = parseIntValue(cx[1])
435- if ((0 > cz))
435+ let cz = parseIntValue(cy[0])
436+ let cA = parseIntValue(cy[1])
437+ if ((0 > cA))
436438 then throw("Price can't be negative")
437439 else {
438- let cA = if (bK)
439- then (cy * cz)
440- else fraction(cy, cz, aj)
441- let cB = if ((size(bG._8) > bI))
442- then parseIntValue(bG._8[bI])
440+ let cB = if (bL)
441+ then (cz * cA)
442+ else fraction(cz, cA, ak)
443+ let cC = if ((size(bH._8) > bJ))
444+ then parseIntValue(bH._8[bJ])
443445 else 0
444- let bQ = if ((size(bG._9) > bI))
445- then parseIntValue(bG._9[bI])
446+ let bR = if ((size(bH._9) > bJ))
447+ then parseIntValue(bH._9[bJ])
446448 else 0
447- let cC = if ((size(bG._10) > bI))
448- then bG._10[bI]
449+ let cD = if ((size(bH._10) > bJ))
450+ then bH._10[bJ]
449451 else "0@0"
450- let cD = split(cC, "@")
451- let cE = parseIntValue(cD[0])
452- let cF = parseIntValue(cD[1])
453- if (if ((cy != 0))
454- then (cz != cF)
452+ let cE = split(cD, "@")
453+ let cF = parseIntValue(cE[0])
454+ let cG = parseIntValue(cE[1])
455+ if (if ((cz != 0))
456+ then (cA != cG)
455457 else false)
456- then throw(((((("Prices of " + bG._11[bI]) + " don't match! WH price=") + toString(cF)) + ", your price=") + toString(cz)))
458+ then throw(((((("Prices of " + bH._11[bJ]) + " don't match! WH price=") + toString(cG)) + ", your price=") + toString(cA)))
457459 else {
458- let cG = if (bK)
459- then (cE * cF)
460- else fraction(cE, cF, aj)
461- let cH = bf(cy, v, bK)
462- if ((cy == 0))
463- then $Tuple13((bG._1 :+ toString(bQ)), (bG._2 :+ cC), (bG._3 :+ toString(cB)), bG._4, bG._5, bG._6, (bG._7 + 1), bG._8, bG._9, bG._10, bG._11, bK, bG._13)
464- else if ((cy > 0))
465- then if ((0 > cE))
466- then if ((cy > -(cE)))
467- then throw(((((("Attempt to buy " + toString(cy)) + " of ") + bG._11[bI]) + ", but warehouse only sells ") + toString(-(cE))))
468- else $Tuple13((bG._1 :+ toString(bQ)), (bG._2 :+ ((toString((cE + cy)) + "@") + toString(cF))), (bG._3 :+ toString((cB + cy))), (bG._4 + cH), bG._5, (bG._6 + cA), (bG._7 + 1), bG._8, bG._9, bG._10, bG._11, bK, (bG._13 + (if (bK)
469- then (cy * aj)
470- else cy)))
471- else throw((("Attempt to buy " + bG._11[bI]) + " while warehouse doesn't sell it"))
472- else if ((cE > 0))
473- then if ((-(cy) > cE))
474- then throw(((((("Attempt to sell " + toString(-(cy))) + " of ") + bG._11[bI]) + ", but warehouse only buys ") + toString(cE)))
475- else if ((-(cy) > cB))
476- then throw(((((("Attempt to sell " + toString(-(cy))) + ", but you only have ") + toString(cB)) + " of ") + bG._11[bI]))
477- else $Tuple13((bG._1 :+ toString((bQ - cy))), (bG._2 :+ ((toString((cE + cy)) + "@") + toString(cF))), (bG._3 :+ toString((cB + cy))), (bG._4 - cH), (bG._5 - cA), bG._6, (bG._7 + 1), bG._8, bG._9, bG._10, bG._11, bK, (bG._13 - (if (bK)
478- then (cy * aj)
479- else cy)))
480- else throw((("Attempt to sell " + bG._11[bI]) + " while warehouse doesn't buy it"))
460+ let cH = if (bL)
461+ then (cF * cG)
462+ else fraction(cF, cG, ak)
463+ let cI = bg(cz, w, bL)
464+ if ((cz == 0))
465+ then $Tuple13((bH._1 :+ toString(bR)), (bH._2 :+ cD), (bH._3 :+ toString(cC)), bH._4, bH._5, bH._6, (bH._7 + 1), bH._8, bH._9, bH._10, bH._11, bL, bH._13)
466+ else if ((cz > 0))
467+ then if ((0 > cF))
468+ then if ((cz > -(cF)))
469+ then throw(((((("Attempt to buy " + toString(cz)) + " of ") + bH._11[bJ]) + ", but warehouse only sells ") + toString(-(cF))))
470+ else $Tuple13((bH._1 :+ toString(bR)), (bH._2 :+ ((toString((cF + cz)) + "@") + toString(cG))), (bH._3 :+ toString((cC + cz))), (bH._4 + cI), bH._5, (bH._6 + cB), (bH._7 + 1), bH._8, bH._9, bH._10, bH._11, bL, (bH._13 + (if (bL)
471+ then (cz * ak)
472+ else cz)))
473+ else throw((("Attempt to buy " + bH._11[bJ]) + " while warehouse doesn't sell it"))
474+ else if ((cF > 0))
475+ then if ((-(cz) > cF))
476+ then throw(((((("Attempt to sell " + toString(-(cz))) + " of ") + bH._11[bJ]) + ", but warehouse only buys ") + toString(cF)))
477+ else if ((-(cz) > cC))
478+ then throw(((((("Attempt to sell " + toString(-(cz))) + ", but you only have ") + toString(cC)) + " of ") + bH._11[bJ]))
479+ else $Tuple13((bH._1 :+ toString((bR - cz))), (bH._2 :+ ((toString((cF + cz)) + "@") + toString(cG))), (bH._3 :+ toString((cC + cz))), (bH._4 - cI), (bH._5 - cB), bH._6, (bH._7 + 1), bH._8, bH._9, bH._10, bH._11, bL, (bH._13 - (if (bL)
480+ then (cz * ak)
481+ else cz)))
482+ else throw((("Attempt to sell " + bH._11[bJ]) + " while warehouse doesn't buy it"))
481483 }
482484 }
483485 }
484486 }
485487
486488
487-func cI (cJ,cK,cL,cM) = {
488- func cN (bG,bI) = if ((cL[bI] > parseIntValue(cJ[bI])))
489- then throw(((((("You have " + cJ[bI]) + " of ") + m[bI]) + ", but tried to sell ") + toString(cL[bI])))
490- else if ((0 > cL[bI]))
491- then throw(((("You tried to sell negative amount of " + m[bI]) + ": ") + toString(cL[bI])))
492- else if ((cL[bI] > 0))
489+func cJ (cK,cL,cM,cN) = {
490+ func cO (bH,bJ) = if ((cM[bJ] > parseIntValue(cK[bJ])))
491+ then throw(((((("You have " + cK[bJ]) + " of ") + n[bJ]) + ", but tried to sell ") + toString(cM[bJ])))
492+ else if ((0 > cM[bJ]))
493+ then throw(((("You tried to sell negative amount of " + n[bJ]) + ": ") + toString(cM[bJ])))
494+ else if ((cM[bJ] > 0))
493495 then {
494- let cO = bk(cK, bI, cL[bI], cM[bI])
495- $Tuple4((bG._1 :+ cO._1), (bG._2 :+ toString((parseIntValue(cJ[bI]) - cL[bI]))), (bG._3 + cO._2), (bG._4 + cL[bI]))
496+ let cP = bl(cL, bJ, cM[bJ], cN[bJ])
497+ $Tuple4((bH._1 :+ cP._1), (bH._2 :+ toString((parseIntValue(cK[bJ]) - cM[bJ]))), (bH._3 + cP._2), (bH._4 + cM[bJ]))
496498 }
497- else $Tuple4(bG._1, (bG._2 :+ cJ[bI]), bG._3, bG._4)
499+ else $Tuple4(bH._1, (bH._2 :+ cK[bJ]), bH._3, bH._4)
498500
499- let ck = am
500- let cl = size(ck)
501- let cm = $Tuple4(nil, nil, 0, 0)
502- func cn (co,cp) = if ((cp >= cl))
503- then co
504- else cN(co, ck[cp])
501+ let cl = an
502+ let cm = size(cl)
503+ let cn = $Tuple4(nil, nil, 0, 0)
504+ func co (cp,cq) = if ((cq >= cm))
505+ then cp
506+ else cO(cp, cl[cq])
505507
506- func cq (co,cp) = if ((cp >= cl))
507- then co
508+ func cr (cp,cq) = if ((cq >= cm))
509+ then cp
508510 else throw("List size exceeds 6")
509511
510- cq(cn(cn(cn(cn(cn(cn(cm, 0), 1), 2), 3), 4), 5), 6)
512+ cr(co(co(co(co(co(co(cn, 0), 1), 2), 3), 4), 5), 6)
511513 }
512514
513515
514-func cP (cQ,cK,cL,cR) = {
515- func cS (bG,bI) = if ((0 > cL[bI]))
516- then throw(((("You tried to buy negative amount of " + n[bI]) + ": ") + toString(cL[bI])))
517- else if ((cL[bI] > 0))
516+func cQ (cR,cL,cM,cS) = {
517+ func cT (bH,bJ) = if ((0 > cM[bJ]))
518+ then throw(((("You tried to buy negative amount of " + o[bJ]) + ": ") + toString(cM[bJ])))
519+ else if ((cM[bJ] > 0))
518520 then {
519- let cO = bs(cK, bI, cL[bI], cR[bI])
520- $Tuple4((bG._1 :+ cO._1), (bG._2 :+ toString((parseIntValue(cQ[bI]) + cO._3))), (bG._3 + cO._2), (bG._4 + cL[bI]))
521+ let cP = bt(cL, bJ, cM[bJ], cS[bJ])
522+ $Tuple4((bH._1 :+ cP._1), (bH._2 :+ toString((parseIntValue(cR[bJ]) + cP._3))), (bH._3 + cP._2), (bH._4 + cM[bJ]))
521523 }
522- else $Tuple4(bG._1, (bG._2 :+ cQ[bI]), bG._3, bG._4)
524+ else $Tuple4(bH._1, (bH._2 :+ cR[bJ]), bH._3, bH._4)
523525
524- let ck = am
525- let cl = size(ck)
526- let cm = $Tuple4(nil, nil, 0, 0)
527- func cn (co,cp) = if ((cp >= cl))
528- then co
529- else cS(co, ck[cp])
526+ let cl = an
527+ let cm = size(cl)
528+ let cn = $Tuple4(nil, nil, 0, 0)
529+ func co (cp,cq) = if ((cq >= cm))
530+ then cp
531+ else cT(cp, cl[cq])
530532
531- func cq (co,cp) = if ((cp >= cl))
532- then co
533+ func cr (cp,cq) = if ((cq >= cm))
534+ then cp
533535 else throw("List size exceeds 6")
534536
535- cq(cn(cn(cn(cn(cn(cn(cm, 0), 1), 2), 3), 4), 5), 6)
537+ cr(co(co(co(co(co(co(cn, 0), 1), 2), 3), 4), 5), 6)
536538 }
537539
538540
539-func cT (cJ,cQ,cL) = {
540- func cU (bG,bI) = {
541- let cV = cL[bI]
542- if ((cV > parseIntValue(cJ[bI])))
543- then throw(((((("You have " + cJ[bI]) + " of ") + m[bI]) + ", but tried to exchange ") + toString(cV)))
544- else if ((0 > cV))
545- then throw(((("You tried to exchange negative amount of " + m[bI]) + ": ") + toString(cV)))
546- else if ((cV > 0))
547- then $Tuple4((bG._1 :+ toString((parseIntValue(cJ[bI]) - cV))), (bG._2 :+ toString((parseIntValue(cQ[bI]) + cV))), (bG._3 + fraction(cV, h, aj)), (bG._4 + cV))
548- else $Tuple4((bG._1 :+ cJ[bI]), (bG._2 :+ cQ[bI]), bG._3, bG._4)
541+func cU (cK,cR,cM) = {
542+ func cV (bH,bJ) = {
543+ let cW = cM[bJ]
544+ if ((cW > parseIntValue(cK[bJ])))
545+ then throw(((((("You have " + cK[bJ]) + " of ") + n[bJ]) + ", but tried to exchange ") + toString(cW)))
546+ else if ((0 > cW))
547+ then throw(((("You tried to exchange negative amount of " + n[bJ]) + ": ") + toString(cW)))
548+ else if ((cW > 0))
549+ then $Tuple4((bH._1 :+ toString((parseIntValue(cK[bJ]) - cW))), (bH._2 :+ toString((parseIntValue(cR[bJ]) + cW))), (bH._3 + fraction(cW, h, ak)), (bH._4 + cW))
550+ else $Tuple4((bH._1 :+ cK[bJ]), (bH._2 :+ cR[bJ]), bH._3, bH._4)
549551 }
550552
551- let ck = am
552- let cl = size(ck)
553- let cm = $Tuple4(nil, nil, 0, 0)
554- func cn (co,cp) = if ((cp >= cl))
555- then co
556- else cU(co, ck[cp])
553+ let cl = an
554+ let cm = size(cl)
555+ let cn = $Tuple4(nil, nil, 0, 0)
556+ func co (cp,cq) = if ((cq >= cm))
557+ then cp
558+ else cV(cp, cl[cq])
557559
558- func cq (co,cp) = if ((cp >= cl))
559- then co
560+ func cr (cp,cq) = if ((cq >= cm))
561+ then cp
560562 else throw("List size exceeds 6")
561563
562- cq(cn(cn(cn(cn(cn(cn(cm, 0), 1), 2), 3), 4), 5), 6)
564+ cr(co(co(co(co(co(co(cn, 0), 1), 2), 3), 4), 5), 6)
563565 }
564566
565567
566-func cW (cX,cY,cZ) = if ((cX > 0))
568+func cX (cY,cZ,da) = if ((cY > 0))
567569 then {
568- let da = fraction(cX, aT, ai)
569- if ((cZ >= (cX - (3 * da))))
570- then throw(("This trade does not cover delivery cost of " + aK(cZ, 6)))
570+ let db = fraction(cY, aU, aj)
571+ if ((da >= (cY - (3 * db))))
572+ then throw(("This trade does not cover delivery cost of " + aL(da, 6)))
571573 else {
572- let db = N(cY)
573- let dc = getString(aB, db)
574- let dd = addressFromStringValue(cY)
575- (((if (isDefined(dc))
576- then [ScriptTransfer(addressFromStringValue(value(dc)), da, ad)]
577- else nil) :+ ScriptTransfer(dd, ((cX - (3 * da)) - cZ), ad)) :+ ScriptTransfer(aA, da, ad))
574+ let dc = O(cZ)
575+ let dd = getString(aC, dc)
576+ let de = addressFromStringValue(cZ)
577+ (((if (isDefined(dd))
578+ then [ScriptTransfer(addressFromStringValue(value(dd)), db, ae)]
579+ else nil) :+ ScriptTransfer(de, ((cY - (3 * db)) - da), ae)) :+ ScriptTransfer(aB, db, ae))
578580 }
579581 }
580582 else nil
581583
582584
583-func de (df,dg,dh,di) = if ((df > 0))
584- then if ((size(dg) != 1))
585+func df (dg,dh,di,dj) = if ((dg > 0))
586+ then if ((size(dh) != 1))
585587 then throw("exactly 1 payment must be attached")
586588 else {
587- let dj = dg[0]
588- let dk = dj.amount
589- if (if (!(isDefined(dj.assetId)))
589+ let dk = dh[0]
590+ let dl = dk.amount
591+ if (if (!(isDefined(dk.assetId)))
590592 then true
591- else (value(dj.assetId) != ad))
593+ else (value(dk.assetId) != ae))
592594 then throw("USDT payments only!")
593595 else {
594- let dl = (df + di)
595- if ((dk != dl))
596- then throw((((((("Insufficient payment! Attached=" + aK(dk, 6)) + ", required=") + aK(df, 6)) + "+") + aK(di, 6)) + "(delivery fee)"))
597- else if ((al > df))
598- then throw(("Min shop trade is " + aK(al, 6)))
596+ let dm = (dg + dj)
597+ if ((dl != dm))
598+ then throw((((((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(dg, 6)) + "+") + aL(dj, 6)) + "(delivery fee)"))
599+ else if ((am > dg))
600+ then throw(("Min shop trade is " + aL(am, 6)))
599601 else {
600- let dm = fraction(df, aT, ai)
601- let db = N(dh)
602- let dc = getString(aB, db)
603- (((if (isDefined(dc))
604- then [ScriptTransfer(addressFromStringValue(value(dc)), dm, ad)]
605- else nil) :+ ScriptTransfer(addressFromStringValue(dh), (df - (3 * dm)), ad)) :+ ScriptTransfer(aA, dm, ad))
602+ let dn = fraction(dg, aU, aj)
603+ let dc = O(di)
604+ let dd = getString(aC, dc)
605+ (((if (isDefined(dd))
606+ then [ScriptTransfer(addressFromStringValue(value(dd)), dn, ae)]
607+ else nil) :+ ScriptTransfer(addressFromStringValue(di), (dg - (3 * dn)), ae)) :+ ScriptTransfer(aB, dn, ae))
606608 }
607609 }
608610 }
609- else if ((size(dg) != 0))
611+ else if ((size(dh) != 0))
610612 then throw("No payments needed")
611613 else nil
612614
613615
614-func dn (do,cY,dp,dq,dr,ds) = {
615- let dt = value(assetInfo(fromBase58String(do)))
616- if (!(isDefined(getInteger(aB, M(do)))))
617- then throw((("NFT " + dt.name) + " is not staked"))
616+func do (dp,cZ,dq,dr,ds,dt) = {
617+ let du = value(assetInfo(fromBase58String(dp)))
618+ if (!(isDefined(getInteger(aC, N(dp)))))
619+ then throw((("NFT " + du.name) + " is not staked"))
618620 else {
619- let dh = valueOrErrorMessage(getString(aB, K(do)), (("NFT " + dt.name) + " is orphaned"))
620- if ((dh == cY))
621+ let di = valueOrErrorMessage(getString(aC, L(dp)), (("NFT " + du.name) + " is orphaned"))
622+ if ((di == cZ))
621623 then throw("You cannot trade with yourself")
622624 else {
623- let du = split_4C(dp, ":")
624- if ((size(du) != 3))
625+ let dv = split_4C(dq, ":")
626+ if ((size(dv) != 3))
625627 then throw("bpOrderStr should contain exactly 2 ':' separators")
626628 else {
627- let dv = split(du[0], "_")
628- let dw = split(du[1], "_")
629- let dx = if ((du[2] == ""))
629+ let dw = split(dv[0], "_")
630+ let dx = split(dv[1], "_")
631+ let dy = if ((dv[2] == ""))
630632 then nil
631- else split_4C(du[2], "_")
632- if ((size(dv) != f))
633+ else split_4C(dv[2], "_")
634+ if ((size(dw) != f))
633635 then throw("All 6 resources should be passed")
634- else if ((size(dw) != f))
636+ else if ((size(dx) != f))
635637 then throw("All 6 materials should be passed")
636638 else {
637- let dy = aE(invoke(aB, "getWarehouseREADONLY", [do], nil))
638- let bX = split_4C(dy, ":")
639- let ca = split(bX[x], "_")
640- let cb = split(bX[y], "_")
641- let cc = if ((bX[z] == ""))
639+ let dz = aF(invoke(aC, "getWarehouseREADONLY", [dp], nil))
640+ let bY = split_4C(dz, ":")
641+ let cb = split(bY[y], "_")
642+ let cc = split(bY[z], "_")
643+ let cd = if ((bY[A] == ""))
642644 then nil
643- else split_4C(bX[z], "_")
644- let dz = parseIntValue(split(bX[A], "_")[B])
645- let bd = U(do)
646- let dA = bc(bd)
647- let dB = split(dA[aZ], "_")
648- let dC = split(dA[ba], "_")
649- let dD = if ((dA[bb] == ""))
645+ else split_4C(bY[A], "_")
646+ let dA = parseIntValue(split(bY[B], "_")[C])
647+ let be = V(dp)
648+ let dB = bd(be)
649+ let dC = split(dB[ba], "_")
650+ let dD = split(dB[bb], "_")
651+ let dE = if ((dB[bc] == ""))
650652 then nil
651- else split_4C(dA[bb], "_")
652- let cj = {
653- let ck = dv
654- let cl = size(ck)
655- let cm = $Tuple13(nil, nil, nil, 0, 0, 0, 0, dq, ca, dB, m, false, 0)
656- func cn (co,cp) = if ((cp >= cl))
657- then co
658- else cv(co, ck[cp])
653+ else split_4C(dB[bc], "_")
654+ let ck = {
655+ let cl = dw
656+ let cm = size(cl)
657+ let cn = $Tuple13(nil, nil, nil, 0, 0, 0, 0, dr, cb, dC, n, false, 0)
658+ func co (cp,cq) = if ((cq >= cm))
659+ then cp
660+ else cw(cp, cl[cq])
659661
660- func cq (co,cp) = if ((cp >= cl))
661- then co
662+ func cr (cp,cq) = if ((cq >= cm))
663+ then cp
662664 else throw("List size exceeds 6")
663665
664- cq(cn(cn(cn(cn(cn(cn(cm, 0), 1), 2), 3), 4), 5), 6)
666+ cr(co(co(co(co(co(co(cn, 0), 1), 2), 3), 4), 5), 6)
665667 }
666- let bx = {
667- let ck = dw
668- let cl = size(ck)
669- let cm = $Tuple13(nil, nil, nil, cj._4, cj._5, cj._6, 0, dr, cb, dC, n, false, cj._13)
670- func cr (co,cp) = if ((cp >= cl))
671- then co
672- else cv(co, ck[cp])
668+ let by = {
669+ let cl = dx
670+ let cm = size(cl)
671+ let cn = $Tuple13(nil, nil, nil, ck._4, ck._5, ck._6, 0, ds, cc, dD, o, false, ck._13)
672+ func cs (cp,cq) = if ((cq >= cm))
673+ then cp
674+ else cw(cp, cl[cq])
673675
674- func cs (co,cp) = if ((cp >= cl))
675- then co
676+ func ct (cp,cq) = if ((cq >= cm))
677+ then cp
676678 else throw("List size exceeds 6")
677679
678- cs(cr(cr(cr(cr(cr(cr(cm, 0), 1), 2), 3), 4), 5), 6)
680+ ct(cs(cs(cs(cs(cs(cs(cn, 0), 1), 2), 3), 4), 5), 6)
679681 }
680- let be = if ((size(dx) != 0))
682+ let bf = if ((size(dy) != 0))
681683 then {
682- let ck = dx
683- let cl = size(ck)
684- let cm = $Tuple13(nil, nil, nil, bx._4, bx._5, bx._6, 0, ds, cc, dD, o, true, bx._13)
685- func ct (co,cp) = if ((cp >= cl))
686- then co
687- else cv(co, ck[cp])
684+ let cl = dy
685+ let cm = size(cl)
686+ let cn = $Tuple13(nil, nil, nil, by._4, by._5, by._6, 0, dt, cd, dE, p, true, by._13)
687+ func cu (cp,cq) = if ((cq >= cm))
688+ then cp
689+ else cw(cp, cl[cq])
688690
689- func cu (co,cp) = if ((cp >= cl))
690- then co
691+ func cv (cp,cq) = if ((cq >= cm))
692+ then cp
691693 else throw("List size exceeds 50")
692694
693- cu(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(cm, 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)
695+ cv(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cn, 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)
694696 }
695- else $Tuple13(cc, dD, ds, bx._4, bx._5, bx._6, 0, ds, cc, dD, o, true, bx._13)
696- let dE = be._4
697- let dF = if ((0 > (dz - dE)))
697+ else $Tuple13(cd, dE, dt, by._4, by._5, by._6, 0, dt, cd, dE, p, true, by._13)
698+ let dF = bf._4
699+ let dG = if ((0 > (dA - dF)))
698700 then 0
699- else (dz - dE)
700- let dG = makeString_2C([bX[w], makeString(cj._1, "_"), makeString(bx._1, "_"), makeString_2C(be._1, "_"), toString(dF)], ":")
701- let dH = makeString_2C([makeString(cj._2, "_"), makeString(bx._2, "_"), makeString_2C(be._2, "_")], ":")
702- let dI = aE(invoke(aB, "saveWarehouse", [dG, do], nil))
703- let dJ = aH(invoke(aB, "updateAccStats", [dh, fraction(d, be._13, aj)], nil))
704- $Tuple10(StringEntry(bd, dH), cj._3, bx._3, be._3, be._5, be._6, be._13, dh, dI, dJ)
701+ else (dA - dF)
702+ let dH = makeString_2C([bY[x], makeString(ck._1, "_"), makeString(by._1, "_"), makeString_2C(bf._1, "_"), toString(dG)], ":")
703+ let dI = makeString_2C([makeString(ck._2, "_"), makeString(by._2, "_"), makeString_2C(bf._2, "_")], ":")
704+ let dJ = aF(invoke(aC, "saveWarehouse", [dH, dp], nil))
705+ let dK = aI(invoke(aC, "updateAccStats", [di, fraction(d, bf._13, ak)], nil))
706+ $Tuple10(StringEntry(be, dI), ck._3, by._3, bf._3, bf._5, bf._6, bf._13, di, dJ, dK)
705707 }
706708 }
707709 }
709711 }
710712
711713
712-func dK (bg) = {
713- let dL = (bg / 30)
714- let dM = [dL, dL, dL, dL, dL, dL]
715- let aG = toString(dL)
716- let cJ = [aG, aG, aG, aG, aG, aG]
717- let cM = [0, 0, 0, 0, 0, 0]
718- func dN (bG,dO) = {
719- let dP = cI(cJ, dO, dM, cM)
720- $Tuple3((bG._1 ++ dP._1), (bG._2 + dP._3), (bG._3 + dP._4))
714+func dL (bh) = {
715+ let dM = (bh / 30)
716+ let dN = [dM, dM, dM, dM, dM, dM]
717+ let aH = toString(dM)
718+ let cK = [aH, aH, aH, aH, aH, aH]
719+ let cN = [0, 0, 0, 0, 0, 0]
720+ func dO (bH,dP) = {
721+ let dQ = cJ(cK, dP, dN, cN)
722+ $Tuple3((bH._1 ++ dQ._1), (bH._2 + dQ._3), (bH._3 + dQ._4))
721723 }
722724
723- let dQ = {
724- let ck = p
725- let cl = size(ck)
726- let cm = $Tuple3(nil, 0, 0)
727- func cn (co,cp) = if ((cp >= cl))
728- then co
729- else dN(co, ck[cp])
725+ let dR = {
726+ let cl = q
727+ let cm = size(cl)
728+ let cn = $Tuple3(nil, 0, 0)
729+ func co (cp,cq) = if ((cq >= cm))
730+ then cp
731+ else dO(cp, cl[cq])
730732
731- func cq (co,cp) = if ((cp >= cl))
732- then co
733+ func cr (cp,cq) = if ((cq >= cm))
734+ then cp
733735 else throw("List size exceeds 5")
734736
735- cq(cn(cn(cn(cn(cn(cm, 0), 1), 2), 3), 4), 5)
737+ cr(co(co(co(co(co(cn, 0), 1), 2), 3), 4), 5)
736738 }
737- let dR = dQ._1
738- let bq = dQ._2
739- let dS = dQ._3
740- let dT = fraction(bq, aU, ai)
741- let dU = (bq / 100)
742- let dV = ((bq - dU) - dT)
743- $Tuple5(dR, dV, dT, dU, dS)
739+ let dS = dR._1
740+ let br = dR._2
741+ let dT = dR._3
742+ let dU = fraction(br, aV, aj)
743+ let dV = (br / 100)
744+ let dW = ((br - dV) - dU)
745+ $Tuple5(dS, dW, dU, dV, dT)
744746 }
745747
746748
747-@Callable(dW)
748-func recalcLockedVolumeREADONLY (V,dy) = {
749- let bY = bc(U(V))
750- let dX = bW(dy, bY, bY)
751- $Tuple2(nil, (dX._4 + dX._5))
749+@Callable(dX)
750+func recalcLockedVolumeREADONLY (W,dz) = {
751+ let bZ = bd(V(W))
752+ let dY = bX(dz, bZ, bZ)
753+ $Tuple2(nil, (dY._4 + dY._5))
752754 }
753755
754756
755757
756-@Callable(dW)
757-func constructorV1 (dY) = if ((dW.caller != this))
758+@Callable(dX)
759+func constructorV1 (dZ) = if ((dX.caller != this))
758760 then throw("Permission denied")
759- else [StringEntry(au(), dY)]
761+ else [StringEntry(av(), dZ)]
760762
761763
762764
763-@Callable(dW)
764-func sellResources (cL,cM) = {
765- let dZ = bE()
766- let S = valueOrErrorMessage(getString(aB, P(toString(dW.caller))), "You don't have a duck staked")
767- if ((size(dW.payments) != 0))
765+@Callable(dX)
766+func sellResources (cM,cN) = {
767+ let ea = bF()
768+ let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
769+ if ((size(dX.payments) != 0))
768770 then throw("sellResources doesn't require any payments")
769771 else {
770- let ea = split(valueOrElse(getString(aB, T(S)), g), "_")
771- if ((ea[I] != "F"))
772- then throw(("Duck location type should be Factory, but is " + ea[I]))
772+ let eb = split(valueOrElse(getString(aC, U(T)), g), "_")
773+ if ((eb[J] != "F"))
774+ then throw(("Duck location type should be Factory, but is " + eb[J]))
773775 else {
774- let eb = bB(R(S))
775- let cJ = split(eb[E], "_")
776- let ec = cI(cJ, ea[J], cL, cM)
777- let dR = ec._1
778- let ed = ec._2
779- let bq = ec._3
780- let dS = ec._4
781- let dU = (bq / 100)
782- let ee = makeString_2C([eb[D], makeString(ed, "_"), eb[F], eb[G]], ":")
783- let ef = aE(invoke(aB, "updateBackpack", [S, ee], nil))
784- let eg = aH(invoke(aB, "updateDuckStats", [S, fraction(a, dS, aj)], nil))
785- $Tuple2(((dR :+ ScriptTransfer(dW.caller, (bq - dU), ad)) :+ ScriptTransfer(aA, dU, ad)), $Tuple3(ef, dZ, eg))
776+ let ec = bC(S(T))
777+ let cK = split(ec[F], "_")
778+ let ed = cJ(cK, eb[K], cM, cN)
779+ let dS = ed._1
780+ let ee = ed._2
781+ let br = ed._3
782+ let dT = ed._4
783+ let dV = (br / 100)
784+ let ef = makeString_2C([ec[E], makeString(ee, "_"), ec[G], ec[H]], ":")
785+ let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil))
786+ let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, dT, ak)], nil))
787+ $Tuple2(((dS :+ ScriptTransfer(dX.caller, (br - dV), ae)) :+ ScriptTransfer(aB, dV, ae)), $Tuple3(eg, ea, eh))
786788 }
787789 }
788790 }
789791
790792
791793
792-@Callable(dW)
793-func sellResourcesWorld (O,bg) = if ((dW.caller != aD))
794+@Callable(dX)
795+func sellResourcesWorld (P,bh) = if ((dX.caller != aE))
794796 then throw("Permission denied")
795797 else {
796- let eh = dK(bg)
797- let dR = eh._1
798- let dV = eh._2
799- let dT = eh._3
800- let dU = eh._4
801- let dS = eh._5
802- if ((0 >= dV))
803- then throw(("This trade does not cover delivery cost of " + aK(dT, 6)))
798+ let ei = dL(bh)
799+ let dS = ei._1
800+ let dW = ei._2
801+ let dU = ei._3
802+ let dV = ei._4
803+ let dT = ei._5
804+ if ((0 >= dW))
805+ then throw(("This trade does not cover delivery cost of " + aL(dU, 6)))
804806 else {
805- let eg = aH(invoke(aB, "updateAccStats", [O, fraction(a, dS, aj)], nil))
806- $Tuple2((((dR :+ IntegerEntry(X, (valueOrElse(getInteger(X), 0) + dT))) :+ ScriptTransfer(aA, dU, ad)) :+ ScriptTransfer(aC, dV, ad)), $Tuple2(dV, eg))
807+ let eh = aI(invoke(aC, "updateAccStats", [P, fraction(a, dT, ak)], nil))
808+ $Tuple2((((dS :+ IntegerEntry(Y, (valueOrElse(getInteger(Y), 0) + dU))) :+ ScriptTransfer(aB, dV, ae)) :+ ScriptTransfer(aD, dW, ae)), $Tuple2(dW, eh))
807809 }
808810 }
809811
810812
811813
812-@Callable(dW)
813-func sellResourcesWorldREADONLY (bg) = {
814- let dV = dK(bg)._2
815- $Tuple2(nil, dV)
814+@Callable(dX)
815+func sellResourcesWorldREADONLY (bh) = {
816+ let dW = dL(bh)._2
817+ $Tuple2(nil, dW)
816818 }
817819
818820
819821
820-@Callable(dW)
821-func sellResourcesDuckDelivery (cL,cM,ei) = if (!(ab))
822+@Callable(dX)
823+func sellResourcesDuckDelivery (cM,cN,ej) = if (!(ac))
822824 then throw("Delivery feature is turned off!")
823825 else {
824- let dZ = bE()
825- let S = valueOrErrorMessage(getString(aB, P(toString(dW.caller))), "You don't have a duck staked")
826- if ((size(dW.payments) != 0))
826+ let ea = bF()
827+ let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
828+ if ((size(dX.payments) != 0))
827829 then throw("sellResources doesn't require any payments")
828830 else {
829- let eb = bB(R(S))
830- let cJ = split(eb[E], "_")
831- let ej = cI(cJ, ei, cL, cM)
832- let dR = ej._1
833- let ed = ej._2
834- let bq = ej._3
835- let dS = ej._4
836- let ee = makeString_2C([eb[D], makeString(ed, "_"), eb[F], eb[G]], ":")
837- let ef = aE(invoke(aB, "updateBackpack", [S, ee], nil))
838- let eg = aH(invoke(aB, "updateDuckStats", [S, fraction(a, dS, aj)], nil))
839- let ek = fraction(bq, aU, ai)
840- let dT = if ((k > ek))
831+ let ec = bC(S(T))
832+ let cK = split(ec[F], "_")
833+ let ek = cJ(cK, ej, cM, cN)
834+ let dS = ek._1
835+ let ee = ek._2
836+ let br = ek._3
837+ let dT = ek._4
838+ let ef = makeString_2C([ec[E], makeString(ee, "_"), ec[G], ec[H]], ":")
839+ let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil))
840+ let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, dT, ak)], nil))
841+ let el = fraction(br, aV, aj)
842+ let dU = if ((k > el))
841843 then k
842- else ek
843- let dU = (bq / 100)
844- if ((dT >= (bq - dU)))
845- then throw(("This trade does not cover delivery cost of " + aK(dT, 6)))
844+ else el
845+ let dV = (br / 100)
846+ if ((dU >= (br - dV)))
847+ then throw(("This trade does not cover delivery cost of " + aL(dU, 6)))
846848 else {
847- let el = valueOrElse(getInteger(X), 0)
848- $Tuple2((((dR :+ ScriptTransfer(dW.caller, ((bq - dU) - dT), ad)) :+ IntegerEntry(X, (el + dT))) :+ ScriptTransfer(aA, dU, ad)), $Tuple3(ef, dZ, eg))
849+ let em = valueOrElse(getInteger(Y), 0)
850+ $Tuple2((((dS :+ ScriptTransfer(dX.caller, ((br - dV) - dU), ae)) :+ IntegerEntry(Y, (em + dU))) :+ ScriptTransfer(aB, dV, ae)), $Tuple3(eg, ea, eh))
849851 }
850852 }
851853 }
852854
853855
854856
855-@Callable(dW)
856-func sellResourcesLandDelivery (cL,cM,V,ei) = if (!(ab))
857+@Callable(dX)
858+func sellResourcesLandDelivery (cM,cN,W,ej) = if (!(ac))
857859 then throw("Delivery feature is turned off!")
858860 else {
859- let dZ = bE()
860- if ((size(dW.payments) != 0))
861+ let ea = bF()
862+ if ((size(dX.payments) != 0))
861863 then throw("sellResources doesn't require any payments")
862864 else {
863- let em = dW.caller
864- let O = toString(em)
865- let en = value(assetInfo(fromBase58String(V)))
866- if (!(isDefined(getInteger(aB, M(V)))))
867- then throw((("NFT " + en.name) + " is not staked"))
865+ let en = dX.caller
866+ let P = toString(en)
867+ let eo = value(assetInfo(fromBase58String(W)))
868+ if (!(isDefined(getInteger(aC, N(W)))))
869+ then throw((("NFT " + eo.name) + " is not staked"))
868870 else {
869- let eo = valueOrErrorMessage(getString(aB, K(V)), (("NFT " + en.name) + " is orphaned"))
870- if ((eo != O))
871+ let ep = valueOrErrorMessage(getString(aC, L(W)), (("NFT " + eo.name) + " is orphaned"))
872+ if ((ep != P))
871873 then throw((e + " is not yours"))
872874 else {
873- let dy = aE(invoke(aB, "getWarehouseREADONLY", [V], nil))
874- let bX = split_4C(dy, ":")
875- let cJ = split(bX[x], "_")
876- let ep = cI(cJ, ei, cL, cM)
877- let dR = ep._1
878- let ed = ep._2
879- let bq = ep._3
880- let dS = ep._4
881- let dG = makeString_2C([bX[w], makeString(ed, "_"), bX[y], bX[z], bX[A]], ":")
882- let dI = aE(invoke(aB, "saveWarehouse", [dG, V], nil))
883- let eg = aH(invoke(aB, "updateAccStats", [O, fraction(a, dS, aj)], nil))
884- let ek = fraction(bq, aU, ai)
885- let dT = if ((k > ek))
875+ let dz = aF(invoke(aC, "getWarehouseREADONLY", [W], nil))
876+ let bY = split_4C(dz, ":")
877+ let cK = split(bY[y], "_")
878+ let eq = cJ(cK, ej, cM, cN)
879+ let dS = eq._1
880+ let ee = eq._2
881+ let br = eq._3
882+ let dT = eq._4
883+ let dH = makeString_2C([bY[x], makeString(ee, "_"), bY[z], bY[A], bY[B]], ":")
884+ let dJ = aF(invoke(aC, "saveWarehouse", [dH, W], nil))
885+ let eh = aI(invoke(aC, "updateAccStats", [P, fraction(a, dT, ak)], nil))
886+ let el = fraction(br, aV, aj)
887+ let dU = if ((k > el))
886888 then k
887- else ek
888- let dU = (bq / 100)
889- if ((dT >= (bq - dU)))
890- then throw(("This trade does not cover delivery cost of " + aK(dT, 6)))
889+ else el
890+ let dV = (br / 100)
891+ if ((dU >= (br - dV)))
892+ then throw(("This trade does not cover delivery cost of " + aL(dU, 6)))
891893 else {
892- let el = valueOrElse(getInteger(X), 0)
893- $Tuple2((((dR :+ ScriptTransfer(dW.caller, ((bq - dU) - dT), ad)) :+ IntegerEntry(X, (el + dT))) :+ ScriptTransfer(aA, dU, ad)), $Tuple3(dI, dZ, eg))
894+ let em = valueOrElse(getInteger(Y), 0)
895+ $Tuple2((((dS :+ ScriptTransfer(dX.caller, ((br - dV) - dU), ae)) :+ IntegerEntry(Y, (em + dU))) :+ ScriptTransfer(aB, dV, ae)), $Tuple3(dJ, ea, eh))
894896 }
895897 }
896898 }
899901
900902
901903
902-@Callable(dW)
903-func buyMaterials (cL,cR) = {
904- let dZ = bE()
905- let S = valueOrErrorMessage(getString(aB, P(toString(dW.caller))), "You don't have a duck staked")
906- if ((size(dW.payments) != 1))
904+@Callable(dX)
905+func buyMaterials (cM,cS) = {
906+ let ea = bF()
907+ let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
908+ if ((size(dX.payments) != 1))
907909 then throw("exactly 1 payment must be attached")
908910 else {
909- let dj = dW.payments[0]
910- let dk = dj.amount
911- if (if (!(isDefined(dj.assetId)))
911+ let dk = dX.payments[0]
912+ let dl = dk.amount
913+ if (if (!(isDefined(dk.assetId)))
912914 then true
913- else (value(dj.assetId) != ad))
915+ else (value(dk.assetId) != ae))
914916 then throw("USDT payments only!")
915917 else {
916- let ea = split(valueOrElse(getString(aB, T(S)), g), "_")
917- if ((ea[I] != "F"))
918- then throw(("Duck location type should be Factory, but is " + ea[I]))
918+ let eb = split(valueOrElse(getString(aC, U(T)), g), "_")
919+ if ((eb[J] != "F"))
920+ then throw(("Duck location type should be Factory, but is " + eb[J]))
919921 else {
920- let eb = bB(R(S))
921- let cQ = split(eb[F], "_")
922- let eq = cP(cQ, ea[J], cL, cR)
923- let dR = eq._1
924- let er = eq._2
925- let bz = eq._3
926- let es = eq._4
927- if ((bz > dk))
928- then throw(((("Insufficient payment! Attached=" + aK(dk, 6)) + ", required=") + aK(bz, 6)))
922+ let ec = bC(S(T))
923+ let cR = split(ec[G], "_")
924+ let er = cQ(cR, eb[K], cM, cS)
925+ let dS = er._1
926+ let es = er._2
927+ let bA = er._3
928+ let et = er._4
929+ if ((bA > dl))
930+ then throw(((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)))
929931 else {
930- let ee = makeString([eb[D], eb[E], makeString(er, "_"), eb[G]], ":")
931- let ef = aE(invoke(aB, "updateBackpack", [S, ee], nil))
932- let aw = if (((dk - bz) > 0))
933- then [ScriptTransfer(dW.caller, (dk - bz), ad)]
932+ let ef = makeString([ec[E], ec[F], makeString(es, "_"), ec[H]], ":")
933+ let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil))
934+ let ax = if (((dl - bA) > 0))
935+ then [ScriptTransfer(dX.caller, (dl - bA), ae)]
934936 else nil
935- let dU = (bz / 100)
936- let eg = aH(invoke(aB, "updateDuckStats", [S, fraction(a, es, aj)], nil))
937- $Tuple2(((dR ++ aw) :+ ScriptTransfer(aA, dU, ad)), $Tuple3(ef, dZ, eg))
937+ let dV = (bA / 100)
938+ let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, et, ak)], nil))
939+ $Tuple2(((dS ++ ax) :+ ScriptTransfer(aB, dV, ae)), $Tuple3(eg, ea, eh))
938940 }
939941 }
940942 }
943945
944946
945947
946-@Callable(dW)
947-func buyMaterialsDuckDelivery (cL,cR,ei) = if (!(ab))
948+@Callable(dX)
949+func buyMaterialsDuckDelivery (cM,cS,ej) = if (!(ac))
948950 then throw("Delivery feature is turned off!")
949951 else {
950- let dZ = bE()
951- let S = valueOrErrorMessage(getString(aB, P(toString(dW.caller))), "You don't have a duck staked")
952- if ((size(dW.payments) != 1))
952+ let ea = bF()
953+ let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
954+ if ((size(dX.payments) != 1))
953955 then throw("exactly 1 payment must be attached")
954956 else {
955- let dj = dW.payments[0]
956- let dk = dj.amount
957- if (if (!(isDefined(dj.assetId)))
957+ let dk = dX.payments[0]
958+ let dl = dk.amount
959+ if (if (!(isDefined(dk.assetId)))
958960 then true
959- else (value(dj.assetId) != ad))
961+ else (value(dk.assetId) != ae))
960962 then throw("USDT payments only!")
961963 else {
962- let eb = bB(R(S))
963- let cQ = split(eb[F], "_")
964- let et = cP(cQ, ei, cL, cR)
965- let dR = et._1
966- let er = et._2
967- let bz = et._3
968- let es = et._4
969- let ee = makeString([eb[D], eb[E], makeString(er, "_"), eb[G]], ":")
970- let ef = aE(invoke(aB, "updateBackpack", [S, ee], nil))
971- let eg = aH(invoke(aB, "updateDuckStats", [S, fraction(a, es, aj)], nil))
972- let ek = fraction(bz, aU, ai)
973- let dT = if ((k > ek))
964+ let ec = bC(S(T))
965+ let cR = split(ec[G], "_")
966+ let eu = cQ(cR, ej, cM, cS)
967+ let dS = eu._1
968+ let es = eu._2
969+ let bA = eu._3
970+ let et = eu._4
971+ let ef = makeString([ec[E], ec[F], makeString(es, "_"), ec[H]], ":")
972+ let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil))
973+ let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, et, ak)], nil))
974+ let el = fraction(bA, aV, aj)
975+ let dU = if ((k > el))
974976 then k
975- else ek
976- let dl = (bz + dT)
977- if ((dl > dk))
978- then throw((((((("Insufficient payment! Attached=" + aK(dk, 6)) + ", required=") + aK(bz, 6)) + "+") + aK(dT, 6)) + "(delivery fee)"))
977+ else el
978+ let dm = (bA + dU)
979+ if ((dm > dl))
980+ then throw((((((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)) + "+") + aL(dU, 6)) + "(delivery fee)"))
979981 else {
980- let aw = if (((dk - dl) > 0))
981- then [ScriptTransfer(dW.caller, (dk - dl), ad)]
982+ let ax = if (((dl - dm) > 0))
983+ then [ScriptTransfer(dX.caller, (dl - dm), ae)]
982984 else nil
983- let dU = (bz / 100)
984- let el = valueOrElse(getInteger(X), 0)
985- $Tuple2((((dR ++ aw) :+ ScriptTransfer(aA, dU, ad)) :+ IntegerEntry(X, (el + dT))), $Tuple3(ef, dZ, eg))
985+ let dV = (bA / 100)
986+ let em = valueOrElse(getInteger(Y), 0)
987+ $Tuple2((((dS ++ ax) :+ ScriptTransfer(aB, dV, ae)) :+ IntegerEntry(Y, (em + dU))), $Tuple3(eg, ea, eh))
986988 }
987989 }
988990 }
990992
991993
992994
993-@Callable(dW)
994-func buyMaterialsLandDelivery (cL,cR,V,ei) = if (!(ab))
995+@Callable(dX)
996+func buyMaterialsLandDelivery (cM,cS,W,ej) = if (!(ac))
995997 then throw("Delivery feature is turned off!")
996998 else {
997- let dZ = bE()
998- if ((size(dW.payments) != 1))
999+ let ea = bF()
1000+ if ((size(dX.payments) != 1))
9991001 then throw("exactly 1 payment must be attached")
10001002 else {
1001- let dj = dW.payments[0]
1002- let dk = dj.amount
1003- if (if (!(isDefined(dj.assetId)))
1003+ let dk = dX.payments[0]
1004+ let dl = dk.amount
1005+ if (if (!(isDefined(dk.assetId)))
10041006 then true
1005- else (value(dj.assetId) != ad))
1007+ else (value(dk.assetId) != ae))
10061008 then throw("USDT payments only!")
10071009 else {
1008- let em = dW.caller
1009- let O = toString(em)
1010- let en = value(assetInfo(fromBase58String(V)))
1011- if (!(isDefined(getInteger(aB, M(V)))))
1012- then throw((("NFT " + en.name) + " is not staked"))
1010+ let en = dX.caller
1011+ let P = toString(en)
1012+ let eo = value(assetInfo(fromBase58String(W)))
1013+ if (!(isDefined(getInteger(aC, N(W)))))
1014+ then throw((("NFT " + eo.name) + " is not staked"))
10131015 else {
1014- let eo = valueOrErrorMessage(getString(aB, K(V)), (("NFT " + en.name) + " is orphaned"))
1015- if ((eo != O))
1016+ let ep = valueOrErrorMessage(getString(aC, L(W)), (("NFT " + eo.name) + " is orphaned"))
1017+ if ((ep != P))
10161018 then throw((e + " is not yours"))
10171019 else {
1018- let dy = aE(invoke(aB, "getWarehouseREADONLY", [V], nil))
1019- let bX = split_4C(dy, ":")
1020- let cQ = split(bX[y], "_")
1021- let eu = cP(cQ, ei, cL, cR)
1022- let dR = eu._1
1023- let er = eu._2
1024- let bz = eu._3
1025- let es = eu._4
1026- let dG = makeString_2C([bX[w], bX[x], makeString(er, "_"), bX[z], bX[A]], ":")
1027- let dI = aE(invoke(aB, "saveWarehouse", [dG, V], nil))
1028- let eg = aH(invoke(aB, "updateAccStats", [O, fraction(a, es, aj)], nil))
1029- let ek = fraction(bz, aU, ai)
1030- let dT = if ((k > ek))
1020+ let dz = aF(invoke(aC, "getWarehouseREADONLY", [W], nil))
1021+ let bY = split_4C(dz, ":")
1022+ let cR = split(bY[z], "_")
1023+ let ev = cQ(cR, ej, cM, cS)
1024+ let dS = ev._1
1025+ let es = ev._2
1026+ let bA = ev._3
1027+ let et = ev._4
1028+ let dH = makeString_2C([bY[x], bY[y], makeString(es, "_"), bY[A], bY[B]], ":")
1029+ let dJ = aF(invoke(aC, "saveWarehouse", [dH, W], nil))
1030+ let eh = aI(invoke(aC, "updateAccStats", [P, fraction(a, et, ak)], nil))
1031+ let el = fraction(bA, aV, aj)
1032+ let dU = if ((k > el))
10311033 then k
1032- else ek
1033- let dl = (bz + dT)
1034- if ((dl > dk))
1035- then throw((((((("Insufficient payment! Attached=" + aK(dk, 6)) + ", required=") + aK(bz, 6)) + "+") + aK(dT, 6)) + "(delivery fee)"))
1034+ else el
1035+ let dm = (bA + dU)
1036+ if ((dm > dl))
1037+ then throw((((((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)) + "+") + aL(dU, 6)) + "(delivery fee)"))
10361038 else {
1037- let aw = if (((dk - dl) > 0))
1038- then [ScriptTransfer(dW.caller, (dk - dl), ad)]
1039+ let ax = if (((dl - dm) > 0))
1040+ then [ScriptTransfer(dX.caller, (dl - dm), ae)]
10391041 else nil
1040- let dU = (bz / 100)
1041- let el = valueOrElse(getInteger(X), 0)
1042- $Tuple2((((dR ++ aw) :+ ScriptTransfer(aA, dU, ad)) :+ IntegerEntry(X, (el + dT))), $Tuple3(dI, dZ, eg))
1042+ let dV = (bA / 100)
1043+ let em = valueOrElse(getInteger(Y), 0)
1044+ $Tuple2((((dS ++ ax) :+ ScriptTransfer(aB, dV, ae)) :+ IntegerEntry(Y, (em + dU))), $Tuple3(dJ, ea, eh))
10431045 }
10441046 }
10451047 }
10491051
10501052
10511053
1052-@Callable(dW)
1053-func exchangeResources (cL) = {
1054- let dZ = bE()
1055- let S = valueOrErrorMessage(getString(aB, P(toString(dW.caller))), "You don't have a duck staked")
1056- if ((size(dW.payments) != 1))
1054+@Callable(dX)
1055+func exchangeResources (cM) = {
1056+ let ea = bF()
1057+ let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
1058+ if ((size(dX.payments) != 1))
10571059 then throw("exactly 1 payment must be attached")
10581060 else {
1059- let dj = dW.payments[0]
1060- let dk = dj.amount
1061- if (if (!(isDefined(dj.assetId)))
1061+ let dk = dX.payments[0]
1062+ let dl = dk.amount
1063+ if (if (!(isDefined(dk.assetId)))
10621064 then true
1063- else (value(dj.assetId) != ad))
1065+ else (value(dk.assetId) != ae))
10641066 then throw("USDT payments only!")
10651067 else {
1066- let ea = split(valueOrElse(getString(aB, T(S)), g), "_")
1067- if ((ea[I] != "F"))
1068- then throw(("Duck location type should be Factory, but is " + ea[I]))
1068+ let eb = split(valueOrElse(getString(aC, U(T)), g), "_")
1069+ if ((eb[J] != "F"))
1070+ then throw(("Duck location type should be Factory, but is " + eb[J]))
10691071 else {
1070- let eb = bB(R(S))
1071- let cJ = split(eb[E], "_")
1072- let cQ = split(eb[F], "_")
1073- let ev = cT(cJ, cQ, cL)
1074- let ed = ev._1
1075- let er = ev._2
1076- let bz = ev._3
1077- let ew = ev._4
1078- if ((bz > dk))
1079- then throw(((("Insufficient payment! Attached=" + aK(dk, 6)) + ", required=") + aK(bz, 6)))
1072+ let ec = bC(S(T))
1073+ let cK = split(ec[F], "_")
1074+ let cR = split(ec[G], "_")
1075+ let ew = cU(cK, cR, cM)
1076+ let ee = ew._1
1077+ let es = ew._2
1078+ let bA = ew._3
1079+ let ex = ew._4
1080+ if ((bA > dl))
1081+ then throw(((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)))
10801082 else {
1081- let ee = makeString([eb[D], makeString(ed, "_"), makeString(er, "_"), eb[G]], ":")
1082- let ef = aE(invoke(aB, "updateBackpack", [S, ee], nil))
1083- let aw = if (((dk - bz) > 0))
1084- then [ScriptTransfer(dW.caller, (dk - bz), ad)]
1083+ let ef = makeString([ec[E], makeString(ee, "_"), makeString(es, "_"), ec[H]], ":")
1084+ let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil))
1085+ let ax = if (((dl - bA) > 0))
1086+ then [ScriptTransfer(dX.caller, (dl - bA), ae)]
10851087 else nil
1086- let dU = (bz / 100)
1087- let eg = aH(invoke(aB, "updateDuckStats", [S, fraction(a, ew, aj)], nil))
1088- $Tuple2((aw :+ ScriptTransfer(aA, dU, ad)), $Tuple3(ef, dZ, eg))
1088+ let dV = (bA / 100)
1089+ let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, ex, ak)], nil))
1090+ $Tuple2((ax :+ ScriptTransfer(aB, dV, ae)), $Tuple3(eg, ea, eh))
10891091 }
10901092 }
10911093 }
10941096
10951097
10961098
1097-@Callable(dW)
1098-func exchangeResourcesDuckDelivery (cL) = if (!(ab))
1099+@Callable(dX)
1100+func exchangeResourcesDuckDelivery (cM) = if (!(ac))
10991101 then throw("Delivery feature is turned off!")
11001102 else {
1101- let dZ = bE()
1102- let S = valueOrErrorMessage(getString(aB, P(toString(dW.caller))), "You don't have a duck staked")
1103- if ((size(dW.payments) != 1))
1103+ let ea = bF()
1104+ let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
1105+ if ((size(dX.payments) != 1))
11041106 then throw("exactly 1 payment must be attached")
11051107 else {
1106- let dj = dW.payments[0]
1107- let dk = dj.amount
1108- if (if (!(isDefined(dj.assetId)))
1108+ let dk = dX.payments[0]
1109+ let dl = dk.amount
1110+ if (if (!(isDefined(dk.assetId)))
11091111 then true
1110- else (value(dj.assetId) != ad))
1112+ else (value(dk.assetId) != ae))
11111113 then throw("USDT payments only!")
11121114 else {
1113- let eb = bB(R(S))
1114- let cJ = split(eb[E], "_")
1115- let cQ = split(eb[F], "_")
1116- let ex = cT(cJ, cQ, cL)
1117- let ed = ex._1
1118- let er = ex._2
1119- let bz = ex._3
1120- let ew = ex._4
1121- let ek = fraction(bz, aV, ai)
1122- let dT = if ((l > ek))
1115+ let ec = bC(S(T))
1116+ let cK = split(ec[F], "_")
1117+ let cR = split(ec[G], "_")
1118+ let ey = cU(cK, cR, cM)
1119+ let ee = ey._1
1120+ let es = ey._2
1121+ let bA = ey._3
1122+ let ex = ey._4
1123+ let el = fraction(bA, aW, aj)
1124+ let dU = if ((l > el))
11231125 then l
1124- else ek
1125- let dl = (bz + dT)
1126- if ((dl > dk))
1127- then throw((((((("Insufficient payment! Attached=" + aK(dk, 6)) + ", required=") + aK(bz, 6)) + "+") + aK(dT, 6)) + "(delivery fee)"))
1126+ else el
1127+ let dm = (bA + dU)
1128+ if ((dm > dl))
1129+ then throw((((((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)) + "+") + aL(dU, 6)) + "(delivery fee)"))
11281130 else {
1129- let ee = makeString([eb[D], makeString(ed, "_"), makeString(er, "_"), eb[G]], ":")
1130- let ef = aE(invoke(aB, "updateBackpack", [S, ee], nil))
1131- let aw = if (((dk - dl) > 0))
1132- then [ScriptTransfer(dW.caller, (dk - dl), ad)]
1131+ let ef = makeString([ec[E], makeString(ee, "_"), makeString(es, "_"), ec[H]], ":")
1132+ let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil))
1133+ let ax = if (((dl - dm) > 0))
1134+ then [ScriptTransfer(dX.caller, (dl - dm), ae)]
11331135 else nil
1134- let dU = (bz / 100)
1135- let eg = aH(invoke(aB, "updateDuckStats", [S, fraction(a, ew, aj)], nil))
1136- let el = valueOrElse(getInteger(X), 0)
1137- $Tuple2(((aw :+ ScriptTransfer(aA, dU, ad)) :+ IntegerEntry(X, (el + dT))), $Tuple3(ef, dZ, eg))
1136+ let dV = (bA / 100)
1137+ let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, ex, ak)], nil))
1138+ let em = valueOrElse(getInteger(Y), 0)
1139+ $Tuple2(((ax :+ ScriptTransfer(aB, dV, ae)) :+ IntegerEntry(Y, (em + dU))), $Tuple3(eg, ea, eh))
11381140 }
11391141 }
11401142 }
11421144
11431145
11441146
1145-@Callable(dW)
1146-func exchangeResourcesLandDelivery (cL,V) = if (!(ab))
1147+@Callable(dX)
1148+func exchangeResourcesLandDelivery (cM,W) = if (!(ac))
11471149 then throw("Delivery feature is turned off!")
11481150 else {
1149- let dZ = bE()
1150- if ((size(dW.payments) != 1))
1151+ let ea = bF()
1152+ if ((size(dX.payments) != 1))
11511153 then throw("exactly 1 payment must be attached")
11521154 else {
1153- let dj = dW.payments[0]
1154- let dk = dj.amount
1155- if (if (!(isDefined(dj.assetId)))
1155+ let dk = dX.payments[0]
1156+ let dl = dk.amount
1157+ if (if (!(isDefined(dk.assetId)))
11561158 then true
1157- else (value(dj.assetId) != ad))
1159+ else (value(dk.assetId) != ae))
11581160 then throw("USDT payments only!")
11591161 else {
1160- let em = dW.caller
1161- let O = toString(em)
1162- let en = value(assetInfo(fromBase58String(V)))
1163- if (!(isDefined(getInteger(aB, M(V)))))
1164- then throw((("NFT " + en.name) + " is not staked"))
1162+ let en = dX.caller
1163+ let P = toString(en)
1164+ let eo = value(assetInfo(fromBase58String(W)))
1165+ if (!(isDefined(getInteger(aC, N(W)))))
1166+ then throw((("NFT " + eo.name) + " is not staked"))
11651167 else {
1166- let eo = valueOrErrorMessage(getString(aB, K(V)), (("NFT " + en.name) + " is orphaned"))
1167- if ((eo != O))
1168+ let ep = valueOrErrorMessage(getString(aC, L(W)), (("NFT " + eo.name) + " is orphaned"))
1169+ if ((ep != P))
11681170 then throw((e + " is not yours"))
11691171 else {
1170- let dy = aE(invoke(aB, "getWarehouseREADONLY", [V], nil))
1171- let bX = split_4C(dy, ":")
1172- let cJ = split(bX[x], "_")
1173- let cQ = split(bX[y], "_")
1174- let ey = cT(cJ, cQ, cL)
1175- let ed = ey._1
1176- let er = ey._2
1177- let bz = ey._3
1178- let ew = ey._4
1179- let dG = makeString_2C([bX[w], makeString(ed, "_"), makeString(er, "_"), bX[z], bX[A]], ":")
1180- let dI = aE(invoke(aB, "saveWarehouse", [dG, V], nil))
1181- let eg = aH(invoke(aB, "updateAccStats", [O, fraction(a, ew, aj)], nil))
1182- let ek = fraction(bz, aV, ai)
1183- let dT = if ((l > ek))
1172+ let dz = aF(invoke(aC, "getWarehouseREADONLY", [W], nil))
1173+ let bY = split_4C(dz, ":")
1174+ let cK = split(bY[y], "_")
1175+ let cR = split(bY[z], "_")
1176+ let ez = cU(cK, cR, cM)
1177+ let ee = ez._1
1178+ let es = ez._2
1179+ let bA = ez._3
1180+ let ex = ez._4
1181+ let dH = makeString_2C([bY[x], makeString(ee, "_"), makeString(es, "_"), bY[A], bY[B]], ":")
1182+ let dJ = aF(invoke(aC, "saveWarehouse", [dH, W], nil))
1183+ let eh = aI(invoke(aC, "updateAccStats", [P, fraction(a, ex, ak)], nil))
1184+ let el = fraction(bA, aW, aj)
1185+ let dU = if ((l > el))
11841186 then l
1185- else ek
1186- let dl = (bz + dT)
1187- if ((dl > dk))
1188- then throw((((((("Insufficient payment! Attached=" + aK(dk, 6)) + ", required=") + aK(bz, 6)) + "+") + aK(dT, 6)) + "(delivery fee)"))
1187+ else el
1188+ let dm = (bA + dU)
1189+ if ((dm > dl))
1190+ then throw((((((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)) + "+") + aL(dU, 6)) + "(delivery fee)"))
11891191 else {
1190- let aw = if (((dk - dl) > 0))
1191- then [ScriptTransfer(dW.caller, (dk - dl), ad)]
1192+ let ax = if (((dl - dm) > 0))
1193+ then [ScriptTransfer(dX.caller, (dl - dm), ae)]
11921194 else nil
1193- let dU = (bz / 100)
1194- let el = valueOrElse(getInteger(X), 0)
1195- $Tuple2(((aw :+ ScriptTransfer(aA, dU, ad)) :+ IntegerEntry(X, (el + dT))), $Tuple3(dI, dZ, eg))
1195+ let dV = (bA / 100)
1196+ let em = valueOrElse(getInteger(Y), 0)
1197+ $Tuple2(((ax :+ ScriptTransfer(aB, dV, ae)) :+ IntegerEntry(Y, (em + dU))), $Tuple3(dJ, ea, eh))
11961198 }
11971199 }
11981200 }
12021204
12031205
12041206
1205-@Callable(dW)
1206-func craftGoods (ez,eA) = {
1207- let dZ = bE()
1208- if ((size(dW.payments) != 1))
1207+@Callable(dX)
1208+func craftGoods (eA,eB) = {
1209+ let ea = bF()
1210+ if ((size(dX.payments) != 1))
12091211 then throw("exactly 1 payment must be attached")
12101212 else {
1211- let dj = dW.payments[0]
1212- let dk = dj.amount
1213- let eB = valueOrErrorMessage(dj.assetId, "WAVES can't be used as payment")
1214- if ((eB != ad))
1213+ let dk = dX.payments[0]
1214+ let dl = dk.amount
1215+ let eC = valueOrErrorMessage(dk.assetId, "WAVES can't be used as payment")
1216+ if ((eC != ae))
12151217 then throw("USDT payments only!")
1216- else if ((dk != ai))
1218+ else if ((dl != aj))
12171219 then throw("exactly 1 USDT must be attached as payment")
1218- else if ((0 >= eA))
1220+ else if ((0 >= eB))
12191221 then throw("Quantity should be positive")
12201222 else {
1221- let S = valueOrErrorMessage(getString(aB, P(toString(dW.caller))), "You don't have a duck staked")
1222- let ea = split(valueOrElse(getString(aB, T(S)), g), "_")
1223- if ((ea[I] != "M"))
1224- then throw(("Duck location type should be Manufactory, but is " + ea[I]))
1223+ let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
1224+ let eb = split(valueOrElse(getString(aC, U(T)), g), "_")
1225+ if ((eb[J] != "M"))
1226+ then throw(("Duck location type should be Manufactory, but is " + eb[J]))
12251227 else {
1226- let eC = ea[H]
1227- let eb = bB(R(S))
1228- let cQ = split(eb[F], "_")
1229- if (if ((0 > ez))
1228+ let eD = eb[I]
1229+ let ec = bC(S(T))
1230+ let cR = split(ec[G], "_")
1231+ if (if ((0 > eA))
12301232 then true
1231- else (ez >= size(r)))
1232- then throw(("Unknown product idx=" + toString(ez)))
1233+ else (eA >= size(s)))
1234+ then throw(("Unknown product idx=" + toString(eA)))
12331235 else {
1234- let aa = split(r[ez], "_")
1235- if ((size(aa) != u))
1236- then throw(("Fatal: unknown recipe: " + r[ez]))
1236+ let ab = split(s[eA], "_")
1237+ if ((size(ab) != v))
1238+ then throw(("Fatal: unknown recipe: " + s[eA]))
12371239 else {
1238- let eD = parseIntValue(aa[t])
1239- if ((p[eD] != eC))
1240- then throw(((("This product is available in " + p[eD]) + ", but you are in ") + eC))
1240+ let eE = parseIntValue(ab[u])
1241+ if ((q[eE] != eD))
1242+ then throw(((("This product is available in " + q[eE]) + ", but you are in ") + eD))
12411243 else {
1242- let eE = if ((eb[G] == ""))
1244+ let eF = if ((ec[H] == ""))
12431245 then nil
1244- else split_4C(eb[G], "_")
1245- func eF (bG,eG) = {
1246- let aI = bG._2
1247- let eH = if ((size(eE) > aI))
1248- then eE[aI]
1246+ else split_4C(ec[H], "_")
1247+ func eG (bH,eH) = {
1248+ let aJ = bH._2
1249+ let eI = if ((size(eF) > aJ))
1250+ then eF[aJ]
12491251 else "0"
1250- let dP = parseIntValue(eH)
1251- let bg = (eA * v)
1252- let eI = if ((aI == ez))
1253- then toString((dP + bg))
1254- else eH
1255- $Tuple2((bG._1 :+ eI), (aI + 1))
1252+ let dQ = parseIntValue(eI)
1253+ let bh = (eB * w)
1254+ let eJ = if ((aJ == eA))
1255+ then toString((dQ + bh))
1256+ else eI
1257+ $Tuple2((bH._1 :+ eJ), (aJ + 1))
12561258 }
12571259
1258- let eJ = ( let ck = r
1259- let cl = size(ck)
1260- let cm = $Tuple2(nil, 0)
1261- func cn (co,cp) = if ((cp >= cl))
1262- then co
1263- else eF(co, ck[cp])
1260+ let eK = ( let cl = s
1261+ let cm = size(cl)
1262+ let cn = $Tuple2(nil, 0)
1263+ func co (cp,cq) = if ((cq >= cm))
1264+ then cp
1265+ else eG(cp, cl[cq])
12641266
1265- func cq (co,cp) = if ((cp >= cl))
1266- then co
1267+ func cr (cp,cq) = if ((cq >= cm))
1268+ then cp
12671269 else throw("List size exceeds 50")
12681270
1269- cq(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cm, 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))._1
1270- func eK (bG,bI) = {
1271- let eL = (((parseIntValue(aa[bI]) * ah) * eA) * parseIntValue(aa[s]))
1272- let eM = parseIntValue(cQ[bI])
1273- if ((eL > eM))
1274- then throw(((((((("You have " + aK(eM, 8)) + " of ") + n[bI]) + ", but recipe requires ") + aK(eL, 8)) + " for quantity ") + toString(eA)))
1275- else if ((eL > 0))
1276- then $Tuple2((bG._1 :+ toString((eM - eL))), (bG._2 + eL))
1277- else $Tuple2((bG._1 :+ cQ[bI]), bG._2)
1271+ cr(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(cn, 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))._1
1272+ func eL (bH,bJ) = {
1273+ let eM = (((parseIntValue(ab[bJ]) * ai) * eB) * parseIntValue(ab[t]))
1274+ let eN = parseIntValue(cR[bJ])
1275+ if ((eM > eN))
1276+ then throw(((((((("You have " + aL(eN, 8)) + " of ") + o[bJ]) + ", but recipe requires ") + aL(eM, 8)) + " for quantity ") + toString(eB)))
1277+ else if ((eM > 0))
1278+ then $Tuple2((bH._1 :+ toString((eN - eM))), (bH._2 + eM))
1279+ else $Tuple2((bH._1 :+ cR[bJ]), bH._2)
12781280 }
12791281
1280- let eN = {
1281- let ck = am
1282- let cl = size(ck)
1283- let cm = $Tuple2(nil, 0)
1284- func cr (co,cp) = if ((cp >= cl))
1285- then co
1286- else eK(co, ck[cp])
1282+ let eO = {
1283+ let cl = an
1284+ let cm = size(cl)
1285+ let cn = $Tuple2(nil, 0)
1286+ func cs (cp,cq) = if ((cq >= cm))
1287+ then cp
1288+ else eL(cp, cl[cq])
12871289
1288- func cs (co,cp) = if ((cp >= cl))
1289- then co
1290+ func ct (cp,cq) = if ((cq >= cm))
1291+ then cp
12901292 else throw("List size exceeds 6")
12911293
1292- cs(cr(cr(cr(cr(cr(cr(cm, 0), 1), 2), 3), 4), 5), 6)
1294+ ct(cs(cs(cs(cs(cs(cs(cn, 0), 1), 2), 3), 4), 5), 6)
12931295 }
1294- let ee = makeString([eb[D], eb[E], makeString(eN._1, "_"), makeString_2C(eJ, "_")], ":")
1295- let eO = aE(invoke(aB, "updateBackpack", [S, ee], nil))
1296- let eg = aH(invoke(aB, "updateDuckStats", [S, fraction(b, eN._2, aj)], nil))
1297- $Tuple2(nil, $Tuple3(eO, dZ, eg))
1296+ let ef = makeString([ec[E], ec[F], makeString(eO._1, "_"), makeString_2C(eK, "_")], ":")
1297+ let eP = aF(invoke(aC, "updateBackpack", [T, ef], nil))
1298+ let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(b, eO._2, ak)], nil))
1299+ $Tuple2(nil, $Tuple3(eP, ea, eh))
12981300 }
12991301 }
13001302 }
13051307
13061308
13071309
1308-@Callable(dW)
1309-func setWarehouseOrder (eP,V) = {
1310- let em = dW.originCaller
1311- let O = toString(em)
1312- let eO = if ((em != aA))
1313- then bD()
1310+@Callable(dX)
1311+func setWarehouseOrder (eQ,W) = {
1312+ let en = dX.originCaller
1313+ let P = toString(en)
1314+ let eP = if ((en != aB))
1315+ then bE()
13141316 else false
1315- let en = value(assetInfo(fromBase58String(V)))
1316- if (!(isDefined(getInteger(aB, M(V)))))
1317- then throw((("NFT " + en.name) + " is not staked"))
1317+ let eo = value(assetInfo(fromBase58String(W)))
1318+ if (!(isDefined(getInteger(aC, N(W)))))
1319+ then throw((("NFT " + eo.name) + " is not staked"))
13181320 else {
1319- let eo = valueOrErrorMessage(getString(aB, K(V)), (("NFT " + en.name) + " is orphaned"))
1320- if (if ((em != aA))
1321- then (eo != O)
1321+ let ep = valueOrErrorMessage(getString(aC, L(W)), (("NFT " + eo.name) + " is orphaned"))
1322+ if (if ((en != aB))
1323+ then (ep != P)
13221324 else false)
13231325 then throw((e + " is not yours"))
13241326 else {
1325- let eQ = split_4C(eP, ":")
1326- let dy = aE(invoke(aB, "getWarehouseREADONLY", [V], nil))
1327- let bX = split_4C(dy, ":")
1328- let eR = split(bX[A], "_")
1329- let eS = parseIntValue(eR[C])
1330- let bd = U(V)
1331- let bY = bc(bd)
1332- let dX = bW(bX, bY, eQ)
1333- let eT = dX._4
1334- let eU = dX._5
1335- let eV = dX._7
1336- let eW = (eT + eU)
1337- let eX = ((eS - eV) - eW)
1338- if ((0 > eX))
1339- then throw((((((("Attempt to reserve " + toString(eT)) + " space for buy orders, and ") + toString(eU)) + " space for sell orders (and occupied=") + toString(eV)) + "), leads to negative free space"))
1327+ let eR = split_4C(eQ, ":")
1328+ let dz = aF(invoke(aC, "getWarehouseREADONLY", [W], nil))
1329+ let bY = split_4C(dz, ":")
1330+ let eS = split(bY[B], "_")
1331+ let eT = parseIntValue(eS[D])
1332+ let be = V(W)
1333+ let bZ = bd(be)
1334+ let dY = bX(bY, bZ, eR)
1335+ let eU = dY._4
1336+ let eV = dY._5
1337+ let eW = dY._7
1338+ let eX = (eU + eV)
1339+ let eY = ((eT - eW) - eX)
1340+ if ((0 > eY))
1341+ then throw((((((("Attempt to reserve " + toString(eU)) + " space for buy orders, and ") + toString(eV)) + " space for sell orders (and occupied=") + toString(eW)) + "), leads to negative free space"))
13401342 else {
1341- let dG = makeString_2C([bX[w], makeString(dX._1, "_"), makeString(dX._2, "_"), makeString_2C(dX._3, "_"), toString(eW)], ":")
1342- let dI = aE(invoke(aB, "saveWarehouse", [dG, V], nil))
1343- let eY = dX._6
1344- let eZ = if ((eY > 0))
1345- then if ((size(dW.payments) != 1))
1343+ let dH = makeString_2C([bY[x], makeString(dY._1, "_"), makeString(dY._2, "_"), makeString_2C(dY._3, "_"), toString(eX)], ":")
1344+ let dJ = aF(invoke(aC, "saveWarehouse", [dH, W], nil))
1345+ let eZ = dY._6
1346+ let fa = if ((eZ > 0))
1347+ then if ((size(dX.payments) != 1))
13461348 then throw("exactly 1 payment must be attached")
13471349 else {
1348- let dj = dW.payments[0]
1349- let dk = dj.amount
1350- let eB = valueOrErrorMessage(dj.assetId, "WAVES can't be used as payment")
1351- if ((eB != ad))
1350+ let dk = dX.payments[0]
1351+ let dl = dk.amount
1352+ let eC = valueOrErrorMessage(dk.assetId, "WAVES can't be used as payment")
1353+ if ((eC != ae))
13521354 then throw("USDT payments only!")
1353- else if ((dk != eY))
1354- then throw(("Payment needed is " + toString(eY)))
1355- else [StringEntry(bd, eP)]
1355+ else if ((dl != eZ))
1356+ then throw(("Payment needed is " + toString(eZ)))
1357+ else [StringEntry(be, eQ)]
13561358 }
1357- else if ((eY == 0))
1358- then if ((size(dW.payments) != 0))
1359+ else if ((eZ == 0))
1360+ then if ((size(dX.payments) != 0))
13591361 then throw("No payments needed")
1360- else [StringEntry(bd, eP)]
1361- else if ((size(dW.payments) != 0))
1362+ else [StringEntry(be, eQ)]
1363+ else if ((size(dX.payments) != 0))
13621364 then throw("No payments needed")
1363- else [ScriptTransfer(addressFromStringValue(eo), -(eY), ad), StringEntry(bd, eP)]
1364- $Tuple2(eZ, $Tuple2(eO, dI))
1365+ else [ScriptTransfer(addressFromStringValue(ep), -(eZ), ae), StringEntry(be, eQ)]
1366+ $Tuple2(fa, $Tuple2(eP, dJ))
13651367 }
13661368 }
13671369 }
13691371
13701372
13711373
1372-@Callable(dW)
1373-func acceptWarehouseOrder (dp,do,S) = {
1374- let dZ = bE()
1375- let dd = dW.originCaller
1376- let cY = toString(dd)
1377- let fa = valueOrErrorMessage(getString(aB, P(cY)), "You don't have a duck staked")
1378- let ea = valueOrElse(getString(aB, T(fa)), g)
1379- let fb = split(value(ea), "_")
1380- if ((fb[I] != "L"))
1381- then throw((("Duck location type is " + fb[I]) + ", but should be L"))
1382- else if ((fa != S))
1383- then throw(((("Your staked duck is " + fa) + ", but passed ") + S))
1374+@Callable(dX)
1375+func acceptWarehouseOrder (dq,dp,T) = {
1376+ let ea = bF()
1377+ let de = dX.originCaller
1378+ let cZ = toString(de)
1379+ let fb = valueOrErrorMessage(getString(aC, Q(cZ)), "You don't have a duck staked")
1380+ let eb = valueOrElse(getString(aC, U(fb)), g)
1381+ let fc = split(value(eb), "_")
1382+ if ((fc[J] != "L"))
1383+ then throw((("Duck location type is " + fc[J]) + ", but should be L"))
1384+ else if ((fb != T))
1385+ then throw(((("Your staked duck is " + fb) + ", but passed ") + T))
13841386 else {
1385- let bC = R(S)
1386- let eb = bB(bC)
1387- let dq = split(eb[E], "_")
1388- let dr = split(eb[F], "_")
1389- let ds = if ((eb[G] == ""))
1387+ let bD = S(T)
1388+ let ec = bC(bD)
1389+ let dr = split(ec[F], "_")
1390+ let ds = split(ec[G], "_")
1391+ let dt = if ((ec[H] == ""))
13901392 then nil
1391- else split_4C(eb[G], "_")
1392- let fc = dn(do, cY, dp, dq, dr, ds)
1393- let fd = fc._1
1394- let fe = fc._2
1395- let ff = fc._3
1396- let fg = fc._4
1397- let cX = fc._5
1398- let df = fc._6
1399- let fh = fc._7
1400- let dh = fc._8
1401- let fi = fc._9
1402- let dJ = fc._10
1403- let fj = [fd, cW(cX, cY, 0)]
1404- let fk = de(df, dW.payments, dh, 0)
1405- let fl = makeString_2C([eb[D], makeString(fe, "_"), makeString(ff, "_"), makeString_2C(fg, "_")], ":")
1406- let fm = aE(invoke(aB, "updateBackpack", [S, fl], nil))
1407- let fn = aH(invoke(aB, "updateDuckStats", [S, fraction(d, fh, aj)], nil))
1408- $Tuple2((fj ++ fk), $Tuple5(dZ, fi, fm, fn, dJ))
1393+ else split_4C(ec[H], "_")
1394+ let fd = do(dp, cZ, dq, dr, ds, dt)
1395+ let fe = fd._1
1396+ let ff = fd._2
1397+ let fg = fd._3
1398+ let fh = fd._4
1399+ let cY = fd._5
1400+ let dg = fd._6
1401+ let fi = fd._7
1402+ let di = fd._8
1403+ let fj = fd._9
1404+ let dK = fd._10
1405+ let fk = [fe, cX(cY, cZ, 0)]
1406+ let fl = df(dg, dX.payments, di, 0)
1407+ let fm = makeString_2C([ec[E], makeString(ff, "_"), makeString(fg, "_"), makeString_2C(fh, "_")], ":")
1408+ let fn = aF(invoke(aC, "updateBackpack", [T, fm], nil))
1409+ let fo = aI(invoke(aC, "updateDuckStats", [T, fraction(d, fi, ak)], nil))
1410+ $Tuple2((fk ++ fl), $Tuple5(ea, fj, fn, fo, dK))
14091411 }
14101412 }
14111413
14121414
14131415
1414-@Callable(dW)
1415-func acceptShopOrderDuckDelivery (fo,do) = if (!(ab))
1416+@Callable(dX)
1417+func acceptShopOrderDuckDelivery (fp,dp) = if (!(ac))
14161418 then throw("Delivery feature is turned off!")
14171419 else {
1418- let dZ = bE()
1419- let dd = dW.originCaller
1420- let cY = toString(dd)
1421- let S = valueOrErrorMessage(getString(aB, P(cY)), "You don't have a duck staked")
1422- let bC = R(S)
1423- let eb = bB(bC)
1424- let dq = split(eb[E], "_")
1425- let dr = split(eb[F], "_")
1426- let ds = if ((eb[G] == ""))
1420+ let ea = bF()
1421+ let de = dX.originCaller
1422+ let cZ = toString(de)
1423+ let T = valueOrErrorMessage(getString(aC, Q(cZ)), "You don't have a duck staked")
1424+ let bD = S(T)
1425+ let ec = bC(bD)
1426+ let dr = split(ec[F], "_")
1427+ let ds = split(ec[G], "_")
1428+ let dt = if ((ec[H] == ""))
14271429 then nil
1428- else split_4C(eb[G], "_")
1429- let fp = dn(do, cY, fo, dq, dr, ds)
1430- let fd = fp._1
1431- let fe = fp._2
1432- let ff = fp._3
1433- let fg = fp._4
1434- let cX = fp._5
1435- let df = fp._6
1436- let fh = fp._7
1437- let dh = fp._8
1438- let fi = fp._9
1439- let dJ = fp._10
1440- let fq = fraction((df + cX), aU, ai)
1441- let fr = if ((k > fq))
1430+ else split_4C(ec[H], "_")
1431+ let fq = do(dp, cZ, fp, dr, ds, dt)
1432+ let fe = fq._1
1433+ let ff = fq._2
1434+ let fg = fq._3
1435+ let fh = fq._4
1436+ let cY = fq._5
1437+ let dg = fq._6
1438+ let fi = fq._7
1439+ let di = fq._8
1440+ let fj = fq._9
1441+ let dK = fq._10
1442+ let fr = fraction((dg + cY), aV, aj)
1443+ let fs = if ((k > fr))
14421444 then k
1443- else fq
1444- let di = fraction(fr, df, (df + cX))
1445- let cZ = (fr - di)
1446- let el = valueOrElse(getInteger(X), 0)
1447- let fj = [fd, cW(cX, cY, cZ)]
1448- let fk = de(df, dW.payments, dh, di)
1449- let fl = makeString_2C([eb[D], makeString(fe, "_"), makeString(ff, "_"), makeString_2C(fg, "_")], ":")
1450- let fm = aE(invoke(aB, "updateBackpack", [S, fl], nil))
1451- let fn = aH(invoke(aB, "updateDuckStats", [S, fraction(d, fh, aj)], nil))
1452- $Tuple2(((fj ++ fk) :+ IntegerEntry(X, (el + fr))), $Tuple5(dZ, fi, fm, fn, dJ))
1445+ else fr
1446+ let dj = fraction(fs, dg, (dg + cY))
1447+ let da = (fs - dj)
1448+ let em = valueOrElse(getInteger(Y), 0)
1449+ let fk = [fe, cX(cY, cZ, da)]
1450+ let fl = df(dg, dX.payments, di, dj)
1451+ let fm = makeString_2C([ec[E], makeString(ff, "_"), makeString(fg, "_"), makeString_2C(fh, "_")], ":")
1452+ let fn = aF(invoke(aC, "updateBackpack", [T, fm], nil))
1453+ let fo = aI(invoke(aC, "updateDuckStats", [T, fraction(d, fi, ak)], nil))
1454+ $Tuple2(((fk ++ fl) :+ IntegerEntry(Y, (em + fs))), $Tuple5(ea, fj, fn, fo, dK))
14531455 }
14541456
14551457
14561458
1457-@Callable(dW)
1458-func acceptShopOrderLandDelivery (fo,do,fs) = if (!(ab))
1459+@Callable(dX)
1460+func acceptShopOrderLandDelivery (fp,dp,ft) = if (!(ac))
14591461 then throw("Delivery feature is turned off!")
14601462 else {
1461- let dZ = bE()
1462- let dd = dW.originCaller
1463- let cY = toString(dd)
1464- let en = value(assetInfo(fromBase58String(fs)))
1465- if (!(isDefined(getInteger(aB, M(fs)))))
1466- then throw((("NFT " + en.name) + " is not staked"))
1463+ let ea = bF()
1464+ let de = dX.originCaller
1465+ let cZ = toString(de)
1466+ let eo = value(assetInfo(fromBase58String(ft)))
1467+ if (!(isDefined(getInteger(aC, N(ft)))))
1468+ then throw((("NFT " + eo.name) + " is not staked"))
14671469 else {
1468- let eo = valueOrErrorMessage(getString(aB, K(fs)), (("NFT " + en.name) + " is orphaned"))
1469- if ((eo != cY))
1470+ let ep = valueOrErrorMessage(getString(aC, L(ft)), (("NFT " + eo.name) + " is orphaned"))
1471+ if ((ep != cZ))
14701472 then throw((e + " is not yours"))
14711473 else {
1472- let dy = aE(invoke(aB, "getWarehouseREADONLY", [fs], nil))
1473- let bX = split_4C(dy, ":")
1474- let cJ = split(bX[x], "_")
1475- let cQ = split(bX[y], "_")
1476- let eE = if ((bX[z] == ""))
1474+ let dz = aF(invoke(aC, "getWarehouseREADONLY", [ft], nil))
1475+ let bY = split_4C(dz, ":")
1476+ let cK = split(bY[y], "_")
1477+ let cR = split(bY[z], "_")
1478+ let eF = if ((bY[A] == ""))
14771479 then nil
1478- else split(bX[z], "_")
1479- let ft = dn(do, cY, fo, cJ, cQ, eE)
1480- let fd = ft._1
1481- let fe = ft._2
1482- let ff = ft._3
1483- let fg = ft._4
1484- let cX = ft._5
1485- let df = ft._6
1486- let fh = ft._7
1487- let dh = ft._8
1488- let fi = ft._9
1489- let dJ = ft._10
1490- let fq = fraction((df + cX), aU, ai)
1491- let fr = if ((k > fq))
1480+ else split(bY[A], "_")
1481+ let fu = do(dp, cZ, fp, cK, cR, eF)
1482+ let fe = fu._1
1483+ let ff = fu._2
1484+ let fg = fu._3
1485+ let fh = fu._4
1486+ let cY = fu._5
1487+ let dg = fu._6
1488+ let fi = fu._7
1489+ let di = fu._8
1490+ let fj = fu._9
1491+ let dK = fu._10
1492+ let fr = fraction((dg + cY), aV, aj)
1493+ let fs = if ((k > fr))
14921494 then k
1493- else fq
1494- let di = fraction(fr, df, (df + cX))
1495- let cZ = (fr - di)
1496- let el = valueOrElse(getInteger(X), 0)
1497- let fj = [fd, cW(cX, cY, cZ)]
1498- let fk = de(df, dW.payments, dh, di)
1499- let dG = makeString_2C([bX[w], makeString(fe, "_"), makeString(ff, "_"), makeString(fg, "_"), bX[A]], ":")
1500- let dI = aE(invoke(aB, "saveWarehouse", [dG, fs], nil))
1501- let eg = aH(invoke(aB, "updateAccStats", [cY, fraction(d, fh, aj)], nil))
1502- $Tuple2(((fj ++ fk) :+ IntegerEntry(X, (el + fr))), $Tuple5(dZ, fi, dI, eg, dJ))
1495+ else fr
1496+ let dj = fraction(fs, dg, (dg + cY))
1497+ let da = (fs - dj)
1498+ let em = valueOrElse(getInteger(Y), 0)
1499+ let fk = [fe, cX(cY, cZ, da)]
1500+ let fl = df(dg, dX.payments, di, dj)
1501+ let dH = makeString_2C([bY[x], makeString(ff, "_"), makeString(fg, "_"), makeString(fh, "_"), bY[B]], ":")
1502+ let dJ = aF(invoke(aC, "saveWarehouse", [dH, ft], nil))
1503+ let eh = aI(invoke(aC, "updateAccStats", [cZ, fraction(d, fi, ak)], nil))
1504+ $Tuple2(((fk ++ fl) :+ IntegerEntry(Y, (em + fs))), $Tuple5(ea, fj, dJ, eh, dK))
15031505 }
15041506 }
15051507 }
15061508
15071509
15081510
1509-@Callable(dW)
1510-func sellProductsToES (cL) = {
1511- let dZ = bE()
1512- if ((size(dW.payments) != 0))
1511+@Callable(dX)
1512+func sellProductsToES (cM) = {
1513+ let ea = bF()
1514+ if ((size(dX.payments) != 0))
15131515 then throw("No payments needed")
15141516 else {
1515- let S = valueOrErrorMessage(getString(aB, P(toString(dW.caller))), "You don't have a duck staked")
1516- let ea = split(valueOrElse(getString(aB, T(S)), g), "_")
1517- if ((ea[I] != "A"))
1518- then throw(("Duck location type should be Airport, but is " + ea[I]))
1517+ let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
1518+ let eb = split(valueOrElse(getString(aC, U(T)), g), "_")
1519+ if ((eb[J] != "A"))
1520+ then throw(("Duck location type should be Airport, but is " + eb[J]))
15191521 else {
1520- let eb = bB(R(S))
1521- let eE = if ((eb[G] == ""))
1522+ let ec = bC(S(T))
1523+ let eF = if ((ec[H] == ""))
15221524 then nil
1523- else split_4C(eb[G], "_")
1524- let fu = W()
1525- let fv = getString(fu)
1526- let fw = if (isDefined(fv))
1527- then split_4C(value(fv), "_")
1525+ else split_4C(ec[H], "_")
1526+ let fv = X()
1527+ let fw = getString(fv)
1528+ let fx = if (isDefined(fw))
1529+ then split_4C(value(fw), "_")
15281530 else nil
1529- func fx (bG,fy) = {
1530- let bI = bG._1
1531- let eA = if ((size(cL) > bI))
1532- then cL[bI]
1531+ func fy (bH,fz) = {
1532+ let bJ = bH._1
1533+ let eB = if ((size(cM) > bJ))
1534+ then cM[bJ]
15331535 else 0
1534- if ((0 > eA))
1536+ if ((0 > eB))
15351537 then throw("Quantity cannot be negative")
15361538 else {
1537- let aa = split(fy, "_")
1538- if ((size(aa) != u))
1539- then throw(("Fatal: unknown recipe: " + fy))
1539+ let ab = split(fz, "_")
1540+ if ((size(ab) != v))
1541+ then throw(("Fatal: unknown recipe: " + fz))
15401542 else {
1541- let fz = (i * v)
1542- let fA = if ((size(fw) > bI))
1543- then parseIntValue(fw[bI])
1543+ let fA = (i * w)
1544+ let fB = if ((size(fx) > bJ))
1545+ then parseIntValue(fx[bJ])
15441546 else 0
1545- let fB = (fz - fA)
1546- if ((eA > fB))
1547- then throw(((("Warehouse can buy only " + toString(fB)) + " of ") + o[bI]))
1547+ let fC = (fA - fB)
1548+ if ((eB > fC))
1549+ then throw(((("Warehouse can buy only " + toString(fC)) + " of ") + p[bJ]))
15481550 else {
1549- let es = Z(aa)
1550- let fC = fraction((es * j), h, (aj * v))
1551- let fD = if ((size(eE) > bI))
1552- then parseIntValue(eE[bI])
1551+ let et = aa(ab)
1552+ let fD = fraction((et * j), h, (ak * w))
1553+ let fE = if ((size(eF) > bJ))
1554+ then parseIntValue(eF[bJ])
15531555 else 0
1554- if ((eA > fD))
1555- then throw(((("You have only " + toString(fD)) + " of ") + o[bI]))
1556- else $Tuple5((bI + 1), (bG._2 + (fC * eA)), (bG._3 :+ toString((fD - eA))), (bG._4 :+ toString((fA + eA))), (bG._5 + (es * eA)))
1556+ if ((eB > fE))
1557+ then throw(((("You have only " + toString(fE)) + " of ") + p[bJ]))
1558+ else $Tuple5((bJ + 1), (bH._2 + (fD * eB)), (bH._3 :+ toString((fE - eB))), (bH._4 :+ toString((fB + eB))), (bH._5 + (et * eB)))
15571559 }
15581560 }
15591561 }
15601562 }
15611563
1562- let eN = {
1563- let ck = r
1564- let cl = size(ck)
1565- let cm = $Tuple5(0, 0, nil, nil, 0)
1566- func cn (co,cp) = if ((cp >= cl))
1567- then co
1568- else fx(co, ck[cp])
1564+ let eO = {
1565+ let cl = s
1566+ let cm = size(cl)
1567+ let cn = $Tuple5(0, 0, nil, nil, 0)
1568+ func co (cp,cq) = if ((cq >= cm))
1569+ then cp
1570+ else fy(cp, cl[cq])
15691571
1570- func cq (co,cp) = if ((cp >= cl))
1571- then co
1572+ func cr (cp,cq) = if ((cq >= cm))
1573+ then cp
15721574 else throw("List size exceeds 50")
15731575
1574- cq(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cm, 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)
1576+ cr(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(cn, 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)
15751577 }
1576- let fl = makeString_2C([eb[D], eb[E], eb[F], makeString_2C(eN._3, "_")], ":")
1577- let fm = aE(invoke(aB, "updateBackpack", [S, fl], nil))
1578- let eg = aH(invoke(aB, "updateDuckStats", [S, fraction(c, eN._5, (aj * 10))], nil))
1579- $Tuple2([StringEntry(fu, makeString_2C(eN._4, "_")), ScriptTransfer(dW.caller, eN._2, ad)], $Tuple3(fm, dZ, eg))
1578+ let fm = makeString_2C([ec[E], ec[F], ec[G], makeString_2C(eO._3, "_")], ":")
1579+ let fn = aF(invoke(aC, "updateBackpack", [T, fm], nil))
1580+ let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(c, eO._5, (ak * 10))], nil))
1581+ $Tuple2([StringEntry(fv, makeString_2C(eO._4, "_")), ScriptTransfer(dX.caller, eO._2, ae)], $Tuple3(fn, ea, eh))
15801582 }
15811583 }
15821584 }
15831585
15841586
15851587
1586-@Callable(dW)
1587-func updateEsStorage (fE) = if ((dW.caller != aB))
1588+@Callable(dX)
1589+func updateEsStorage (fF) = if ((dX.caller != aC))
15881590 then throw("Permission denied")
1589- else $Tuple2([StringEntry(W(), fE)], fE)
1591+ else $Tuple2([StringEntry(X(), fF)], fF)
15901592
15911593
15921594
1593-@Callable(dW)
1594-func updateDeliveryLocked (fF) = if ((dW.caller != aB))
1595+@Callable(dX)
1596+func updateDeliveryLocked (fG) = if ((dX.caller != aC))
15951597 then throw("Permission denied")
1596- else $Tuple2([IntegerEntry(Y, fF)], fF)
1598+ else $Tuple2([IntegerEntry(Z, fG)], fG)
15971599
15981600
15991601
1600-@Callable(dW)
1601-func sendDeliveryReward (O) = if ((dW.caller != aB))
1602+@Callable(dX)
1603+func sendDeliveryReward (P) = if ((dX.caller != aC))
16021604 then throw("Permission denied")
16031605 else {
1604- let el = valueOrElse(getInteger(X), 0)
1605- let fG = valueOrElse(getInteger(Y), 0)
1606- $Tuple2([ScriptTransfer(addressFromStringValue(O), k, ad), IntegerEntry(X, (el - k)), IntegerEntry(Y, (fG - k))], k)
1606+ let em = valueOrElse(getInteger(Y), 0)
1607+ let fH = valueOrElse(getInteger(Z), 0)
1608+ let fI = (k * m)
1609+ let fJ = invoke(aE, "sendAcres", [P, fI], nil)
1610+ $Tuple2([IntegerEntry(Y, (em - k)), IntegerEntry(Z, (fH - k))], fJ)
16071611 }
16081612
16091613
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = 10000
55
66 let b = 10000
77
88 let c = 10000
99
1010 let d = 10000
1111
1212 let e = "LAND"
1313
1414 let f = 6
1515
1616 let g = "Africa_F_Africa"
1717
1818 let h = 39637
1919
2020 let i = 10
2121
2222 let j = 4
2323
2424 let k = 50000
2525
2626 let l = 75000
2727
28-let m = ["Oil", "Ore", "Wood", "Sand", "Clay", "Organic"]
28+let m = 10
2929
30-let n = ["Fuel", "Metal", "Plank", "Glass", "Plastic", "Protein"]
30+let n = ["Oil", "Ore", "Wood", "Sand", "Clay", "Organic"]
3131
32-let o = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3", "Mine L1", "Mine L2", "Mine L3", "Trap L1", "Trap L2", "Trap L3"]
32+let o = ["Fuel", "Metal", "Plank", "Glass", "Plastic", "Protein"]
3333
34-let p = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
34+let p = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3", "Mine L1", "Mine L2", "Mine L3", "Trap L1", "Trap L2", "Trap L3"]
3535
36-let q = 10000000
36+let q = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
3737
38-let r = ["8_8_8_17_17_42_12_0_30_0,0,0,0,0,0,0_", "8_8_8_17_17_42_24_0_60_0,0,5,2,0,0,0_", "8_8_8_17_17_42_36_0_120_0,0,10,4,0,0,0_", "8_19_19_8_27_19_26_1_20_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_52_1_40_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_78_1_80_0,0,0,0,0,0,0_001", "8_8_8_8_8_60_13_2_2_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_011", "30_30_3_17_17_3_30_3_30_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_60_3_50_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_90_3_70_0,0,0,0,0,0,0_111", "18_18_10_18_18_18_11_4_10_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_20_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_30_0,0,0,0,0,0,0_201", "4_13_22_4_35_22_23_0_50,1,0_0,0,0,0,0,0,0_", "4_13_22_4_35_22_46_0_50,1,1_0,2,5,0,0,0,0_", "4_13_22_4_35_22_69_0_50,2,1_0,5,10,0,0,0,0_", "5_25_40_5_10_15_20_1_30,1,1_0,0,0,0,0,0,0_", "5_25_40_5_10_15_40_1_30,1,2_2,1,3,0,0,0,0_", "5_25_40_5_10_15_60_1_30,1,3_5,2,8,0,0,0,0_"]
38+let r = 10000000
3939
40-let s = 6
40+let s = ["8_8_8_17_17_42_12_0_30_0,0,0,0,0,0,0_", "8_8_8_17_17_42_24_0_60_0,0,5,2,0,0,0_", "8_8_8_17_17_42_36_0_120_0,0,10,4,0,0,0_", "8_19_19_8_27_19_26_1_20_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_52_1_40_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_78_1_80_0,0,0,0,0,0,0_001", "8_8_8_8_8_60_13_2_2_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_011", "30_30_3_17_17_3_30_3_30_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_60_3_50_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_90_3_70_0,0,0,0,0,0,0_111", "18_18_10_18_18_18_11_4_10_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_20_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_30_0,0,0,0,0,0,0_201", "4_13_22_4_35_22_23_0_50,1,0_0,0,0,0,0,0,0_", "4_13_22_4_35_22_46_0_50,1,1_0,2,5,0,0,0,0_", "4_13_22_4_35_22_69_0_50,2,1_0,5,10,0,0,0,0_", "5_25_40_5_10_15_20_1_30,1,1_0,0,0,0,0,0,0_", "5_25_40_5_10_15_40_1_30,1,2_2,1,3,0,0,0,0_", "5_25_40_5_10_15_60_1_30,1,3_5,2,8,0,0,0,0_"]
4141
42-let t = 7
42+let t = 6
4343
44-let u = 11
44+let u = 7
4545
46-let v = 10
46+let v = 11
4747
48-let w = 0
48+let w = 10
4949
50-let x = 1
50+let x = 0
5151
52-let y = 2
52+let y = 1
5353
54-let z = 3
54+let z = 2
5555
56-let A = 4
56+let A = 3
5757
58-let B = 0
58+let B = 4
5959
60-let C = 3
60+let C = 0
6161
62-let D = 0
62+let D = 3
6363
64-let E = 1
64+let E = 0
6565
66-let F = 2
66+let F = 1
6767
68-let G = 3
68+let G = 2
6969
70-let H = 0
70+let H = 3
7171
72-let I = 1
72+let I = 0
7373
74-let J = 2
74+let J = 1
7575
76-func K (L) = ("no_" + L)
76+let K = 2
77+
78+func L (M) = ("no_" + M)
7779
7880
79-func M (L) = ("st_" + L)
81+func N (M) = ("st_" + M)
8082
8183
82-func N (O) = ("accRefBy_" + O)
84+func O (P) = ("accRefBy_" + P)
8385
8486
85-func P (Q) = ("stakedDuckByOwner_" + Q)
87+func Q (R) = ("stakedDuckByOwner_" + R)
8688
8789
88-func R (S) = ("backPack_" + S)
90+func S (T) = ("backPack_" + T)
8991
9092
91-func T (S) = ("duckLocation_" + S)
93+func U (T) = ("duckLocation_" + T)
9294
9395
94-func U (V) = ("landOrder_" + V)
96+func V (W) = ("landOrder_" + W)
9597
9698
97-func W () = "emergencyWarehouseProducts"
99+func X () = "emergencyWarehouseProducts"
98100
99101
100-let X = "deliveryFund"
102+let Y = "deliveryFund"
101103
102-let Y = "deliveryLocked"
104+let Z = "deliveryLocked"
103105
104-func Z (aa) = (parseIntValue(aa[s]) * q)
106+func aa (ab) = (parseIntValue(ab[t]) * r)
105107
106108
107-let ab = true
109+let ac = true
108110
109-let ac = take(drop(this.bytes, 1), 1)
111+let ad = take(drop(this.bytes, 1), 1)
110112
111-let ad = {
112- let ae = ac
113- if ((base58'2W' == ae))
113+let ae = {
114+ let af = ad
115+ if ((base58'2W' == af))
114116 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
115- else if ((base58'2T' == ae))
117+ else if ((base58'2T' == af))
116118 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
117119 else throw("Unknown chain")
118120 }
119121
120-let af = {
121- let ae = ac
122- if ((base58'2W' == ae))
122+let ag = {
123+ let af = ad
124+ if ((base58'2W' == af))
123125 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
124- else if ((base58'2T' == ae))
126+ else if ((base58'2T' == af))
125127 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
126128 else throw("Unknown chain")
127129 }
128130
129-let ag = "__"
131+let ah = "__"
130132
131-let ah = 100000
133+let ai = 100000
132134
133-let ai = 1000000
135+let aj = 1000000
134136
135-let aj = 100000000
137+let ak = 100000000
136138
137-let ak = 10000000000
139+let al = 10000000000
138140
139-let al = 100000
141+let am = 100000
140142
141-let am = [0, 1, 2, 3, 4, 5]
143+let an = [0, 1, 2, 3, 4, 5]
142144
143-func an (ao,ap) = valueOrErrorMessage(getString(ao, ap), makeString(["mandatory ", toString(ao), ".", ap, " is not defined"], ""))
145+func ao (ap,aq) = valueOrErrorMessage(getString(ap, aq), makeString(["mandatory ", toString(ap), ".", aq, " is not defined"], ""))
144146
145147
146-let aq = 1
148+let ar = 1
147149
148-let ar = 6
150+let as = 6
149151
150-let as = 8
152+let at = 8
151153
152-func at () = "%s__restConfig"
154+func au () = "%s__restConfig"
153155
154156
155-func au () = "%s__restAddr"
157+func av () = "%s__restAddr"
156158
157159
158-func av (aw) = split_4C(an(aw, at()), ag)
160+func aw (ax) = split_4C(ao(ax, au()), ah)
159161
160162
161-func ax (ay,az) = valueOrErrorMessage(addressFromString(ay[az]), ("Rest cfg doesn't contain address at index " + toString(az)))
163+func ay (az,aA) = valueOrErrorMessage(addressFromString(az[aA]), ("Rest cfg doesn't contain address at index " + toString(aA)))
162164
163165
164-let aA = addressFromStringValue(valueOrElse(getString(this, au()), af))
166+let aB = addressFromStringValue(valueOrElse(getString(this, av()), ag))
165167
166-let ay = av(aA)
168+let az = aw(aB)
167169
168-let aB = ax(ay, aq)
170+let aC = ay(az, ar)
169171
170-let aC = ax(ay, ar)
172+let aD = ay(az, as)
171173
172-let aD = ax(ay, as)
174+let aE = ay(az, at)
173175
174-func aE (aF) = {
175- let ae = aF
176- if ($isInstanceOf(ae, "String"))
176+func aF (aG) = {
177+ let af = aG
178+ if ($isInstanceOf(af, "String"))
177179 then {
178- let aG = ae
179- aG
180+ let aH = af
181+ aH
180182 }
181183 else throw("fail to cast into String")
182184 }
183185
184186
185-func aH (aF) = {
186- let ae = aF
187- if ($isInstanceOf(ae, "Int"))
187+func aI (aG) = {
188+ let af = aG
189+ if ($isInstanceOf(af, "Int"))
188190 then {
189- let aI = ae
190- aI
191+ let aJ = af
192+ aJ
191193 }
192194 else throw("fail to cast into Int")
193195 }
194196
195197
196-func aJ () = "contractsBlocked"
198+func aK () = "contractsBlocked"
197199
198200
199-func aK (aL,aM) = {
200- let aN = pow(10, 0, aM, 0, 0, DOWN)
201- let aO = toString((aL % aN))
202- let aP = drop(toString(aN), (1 + size(aO)))
203- (((toString((aL / aN)) + ".") + aP) + aO)
201+func aL (aM,aN) = {
202+ let aO = pow(10, 0, aN, 0, 0, DOWN)
203+ let aP = toString((aM % aO))
204+ let aQ = drop(toString(aO), (1 + size(aP)))
205+ (((toString((aM / aO)) + ".") + aQ) + aP)
204206 }
205207
206208
207-let aQ = 10000000000
209+let aR = 10000000000
208210
209-let aR = 200
211+let aS = 200
210212
211-let aS = 300
212-
213-let aT = 10000
213+let aT = 300
214214
215215 let aU = 10000
216216
217-let aV = 15000
217+let aV = 10000
218218
219-func aW (aX,aY) = ((("factoryWhByContinentAndRes_" + aX) + "_") + toString(aY))
219+let aW = 15000
220+
221+func aX (aY,aZ) = ((("factoryWhByContinentAndRes_" + aY) + "_") + toString(aZ))
220222
221223
222-let aZ = 0
224+let ba = 0
223225
224-let ba = 1
226+let bb = 1
225227
226-let bb = 2
228+let bc = 2
227229
228-func bc (bd) = {
229- let be = split(valueOrElse(getString(bd), "0@0_0@0_0@0_0@0_0@0_0@0:0@0_0@0_0@0_0@0_0@0_0@0:"), ":")
230-[if ((size(split(be[aZ], "_")) == f))
231- then be[aZ]
232- else "0@0_0@0_0@0_0@0_0@0_0@0", if ((size(split(be[ba], "_")) == f))
233- then be[ba]
234- else "0@0_0@0_0@0_0@0_0@0_0@0", be[bb]]
230+func bd (be) = {
231+ let bf = split(valueOrElse(getString(be), "0@0_0@0_0@0_0@0_0@0_0@0:0@0_0@0_0@0_0@0_0@0_0@0:"), ":")
232+[if ((size(split(bf[ba], "_")) == f))
233+ then bf[ba]
234+ else "0@0_0@0_0@0_0@0_0@0_0@0", if ((size(split(bf[bb], "_")) == f))
235+ then bf[bb]
236+ else "0@0_0@0_0@0_0@0_0@0_0@0", bf[bc]]
235237 }
236238
237239
238-func bf (bg,bh,bi) = if (bi)
240+func bg (bh,bi,bj) = if (bj)
239241 then {
240- let bj = if ((bg >= 0))
241- then (((bg + bh) - 1) / bh)
242- else -((((-(bg) + bh) - 1) / bh))
243- (bj * aj)
242+ let bk = if ((bh >= 0))
243+ then (((bh + bi) - 1) / bi)
244+ else -((((-(bh) + bi) - 1) / bi))
245+ (bk * ak)
244246 }
245- else bg
247+ else bh
246248
247249
248-func bk (bl,aY,bg,bm) = {
249- let bn = aW(bl, aY)
250- let bo = valueOrElse(getInteger(bn), 0)
251- let bp = if ((bo > aQ))
250+func bl (bm,aZ,bh,bn) = {
251+ let bo = aX(bm, aZ)
252+ let bp = valueOrElse(getInteger(bo), 0)
253+ let bq = if ((bp > aR))
252254 then 0
253- else if (((bo + bg) > aQ))
254- then (aQ - bo)
255- else bg
256- let bq = (fraction(bp, ((aR * h) - fraction(((100 * bo) + (50 * bp)), h, aQ)), ak) + fraction((bg - bp), h, aj))
257- let br = (bm - (bm / 100))
258- if (((br * bg) > (bq * aj)))
259- then throw((((((((((("Actual price = " + toString(bq)) + " / ") + toString(bg)) + " < minPrice = ") + toString(bm)) + ", (") + bl) + ", ") + m[aY]) + ")"))
260- else $Tuple2(IntegerEntry(bn, (bo + bg)), bq)
255+ else if (((bp + bh) > aR))
256+ then (aR - bp)
257+ else bh
258+ let br = (fraction(bq, ((aS * h) - fraction(((100 * bp) + (50 * bq)), h, aR)), al) + fraction((bh - bq), h, ak))
259+ let bs = (bn - (bn / 100))
260+ if (((bs * bh) > (br * ak)))
261+ then throw((((((((((("Actual price = " + toString(br)) + " / ") + toString(bh)) + " < minPrice = ") + toString(bn)) + ", (") + bm) + ", ") + n[aZ]) + ")"))
262+ else $Tuple2(IntegerEntry(bo, (bp + bh)), br)
261263 }
262264
263265
264-func bs (bl,bt,bg,bu) = {
265- let bn = aW(bl, bt)
266- let bo = valueOrElse(getInteger(bn), 0)
267- let bv = if ((bo > aQ))
268- then min([bg, (bo - aQ)])
266+func bt (bm,bu,bh,bv) = {
267+ let bo = aX(bm, bu)
268+ let bp = valueOrElse(getInteger(bo), 0)
269+ let bw = if ((bp > aR))
270+ then min([bh, (bp - aR)])
269271 else 0
270- let bw = min([bo, (bg - bv)])
271- let bx = (bw + bv)
272- let by = min([bo, aQ])
273- let bz = (fraction(bw, ((aS * h) - fraction(((100 * by) - (50 * bw)), h, aQ)), ak) + fraction(bv, (2 * h), aj))
274- let bA = (bu + (bu / 100))
275- if (((bz * aj) > (bA * bx)))
276- then throw((((((((((("Actual price = " + toString(bz)) + " / ") + toString(bx)) + " > maxPrice = ") + toString(bu)) + ", (") + bl) + ", ") + n[bt]) + ")"))
277- else $Tuple3(IntegerEntry(bn, (bo - bx)), bz, bx)
272+ let bx = min([bp, (bh - bw)])
273+ let by = (bx + bw)
274+ let bz = min([bp, aR])
275+ let bA = (fraction(bx, ((aT * h) - fraction(((100 * bz) - (50 * bx)), h, aR)), al) + fraction(bw, (2 * h), ak))
276+ let bB = (bv + (bv / 100))
277+ if (((bA * ak) > (bB * by)))
278+ then throw((((((((((("Actual price = " + toString(bA)) + " / ") + toString(by)) + " > maxPrice = ") + toString(bv)) + ", (") + bm) + ", ") + o[bu]) + ")"))
279+ else $Tuple3(IntegerEntry(bo, (bp - by)), bA, by)
278280 }
279281
280282
281-func bB (bC) = {
282- let be = split_4C(valueOrElse(getString(aB, bC), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
283-[toString(valueOrElse(parseInt(be[D]), 0)), if ((size(split(be[E], "_")) == f))
284- then be[E]
285- else "0_0_0_0_0_0", if ((size(split(be[F], "_")) == f))
286- then be[F]
287- else "0_0_0_0_0_0", be[G]]
283+func bC (bD) = {
284+ let bf = split_4C(valueOrElse(getString(aC, bD), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
285+[toString(valueOrElse(parseInt(bf[E]), 0)), if ((size(split(bf[F], "_")) == f))
286+ then bf[F]
287+ else "0_0_0_0_0_0", if ((size(split(bf[G], "_")) == f))
288+ then bf[G]
289+ else "0_0_0_0_0_0", bf[H]]
288290 }
289291
290292
291-func bD () = if (valueOrElse(getBoolean(aB, aJ()), false))
293+func bE () = if (valueOrElse(getBoolean(aC, aK()), false))
292294 then throw("Contracts are under maintenance")
293295 else unit
294296
295297
296-func bE () = aH(invoke(aB, "saveLastTx", nil, nil))
298+func bF () = aI(invoke(aC, "saveLastTx", nil, nil))
297299
298300
299-func bF (bG,bH) = {
300- let bI = bG._1
301- let bJ = if ((size(bG._10) > bI))
302- then bG._10[bI]
301+func bG (bH,bI) = {
302+ let bJ = bH._1
303+ let bK = if ((size(bH._10) > bJ))
304+ then bH._10[bJ]
303305 else "0@0"
304- let bK = bG._8
305- let bL = split(bJ, "@")
306- if ((size(bL) != 2))
306+ let bL = bH._8
307+ let bM = split(bK, "@")
308+ if ((size(bM) != 2))
307309 then throw("Incorrect order format, should be amount@price")
308310 else {
309- let bM = parseIntValue(bL[0])
310- let bN = parseIntValue(bL[1])
311- let bO = if (bK)
312- then (bM * bN)
313- else fraction(bM, bN, aj)
314- let bP = bf(bM, v, bK)
315- let bQ = if ((size(bG._6) > bI))
316- then parseIntValue(bG._6[bI])
311+ let bN = parseIntValue(bM[0])
312+ let bO = parseIntValue(bM[1])
313+ let bP = if (bL)
314+ then (bN * bO)
315+ else fraction(bN, bO, ak)
316+ let bQ = bg(bN, w, bL)
317+ let bR = if ((size(bH._6) > bJ))
318+ then parseIntValue(bH._6[bJ])
317319 else 0
318- let bR = split(if ((size(bG._7) > bI))
319- then bG._7[bI]
320+ let bS = split(if ((size(bH._7) > bJ))
321+ then bH._7[bJ]
320322 else "0@0", "@")
321- let bS = parseIntValue(bR[0])
322- let bT = parseIntValue(bR[1])
323- if (if ((0 > bT))
323+ let bT = parseIntValue(bS[0])
324+ let bU = parseIntValue(bS[1])
325+ if (if ((0 > bU))
324326 then true
325- else (0 > bN))
327+ else (0 > bO))
326328 then throw("Price can't be negative")
327329 else {
328- let bU = if (bK)
329- then (bS * bT)
330- else fraction(bS, bT, aj)
331- if ((bM == 0))
332- then if ((bS > 0))
333- then $Tuple10((bI + 1), (bG._2 :+ toString(bQ)), bG._3, bG._4, (bG._5 - bU), bG._6, bG._7, bK, (bG._9 + bf(bQ, v, bK)), bG._10)
334- else $Tuple10((bI + 1), (bG._2 :+ toString((bQ - bS))), bG._3, bG._4, bG._5, bG._6, bG._7, bK, (bG._9 + bf((bQ - bS), v, bK)), bG._10)
335- else if ((bM > 0))
336- then if ((0 > bS))
337- then $Tuple10((bI + 1), (bG._2 :+ toString((bQ - bS))), (bG._3 + bP), bG._4, (bG._5 + bO), bG._6, bG._7, bK, bf((bQ - bS), v, bK), bG._10)
338- else $Tuple10((bI + 1), (bG._2 :+ toString(bQ)), (bG._3 + bP), bG._4, ((bG._5 + bO) - bU), bG._6, bG._7, bK, bf(bQ, v, bK), bG._10)
339- else if ((0 > bS))
330+ let bV = if (bL)
331+ then (bT * bU)
332+ else fraction(bT, bU, ak)
333+ if ((bN == 0))
334+ then if ((bT > 0))
335+ then $Tuple10((bJ + 1), (bH._2 :+ toString(bR)), bH._3, bH._4, (bH._5 - bV), bH._6, bH._7, bL, (bH._9 + bg(bR, w, bL)), bH._10)
336+ else $Tuple10((bJ + 1), (bH._2 :+ toString((bR - bT))), bH._3, bH._4, bH._5, bH._6, bH._7, bL, (bH._9 + bg((bR - bT), w, bL)), bH._10)
337+ else if ((bN > 0))
338+ then if ((0 > bT))
339+ then $Tuple10((bJ + 1), (bH._2 :+ toString((bR - bT))), (bH._3 + bQ), bH._4, (bH._5 + bP), bH._6, bH._7, bL, bg((bR - bT), w, bL), bH._10)
340+ else $Tuple10((bJ + 1), (bH._2 :+ toString(bR)), (bH._3 + bQ), bH._4, ((bH._5 + bP) - bV), bH._6, bH._7, bL, bg(bR, w, bL), bH._10)
341+ else if ((0 > bT))
340342 then {
341- let bV = (bS - bM)
342- if ((0 > (bQ - bV)))
343- then throw((((("Attempt to take " + toString(bV)) + " from warehouse, but only ") + toString(bQ)) + " available"))
344- else $Tuple10((bI + 1), (bG._2 :+ toString((bQ - bV))), bG._3, (bG._4 - bP), bG._5, bG._6, bG._7, bK, bf((bQ - bV), v, bK), bG._10)
343+ let bW = (bT - bN)
344+ if ((0 > (bR - bW)))
345+ then throw((((("Attempt to take " + toString(bW)) + " from warehouse, but only ") + toString(bR)) + " available"))
346+ else $Tuple10((bJ + 1), (bH._2 :+ toString((bR - bW))), bH._3, (bH._4 - bQ), bH._5, bH._6, bH._7, bL, bg((bR - bW), w, bL), bH._10)
345347 }
346- else if ((0 > (bQ + bM)))
347- then throw((((("Attempt to take " + toString(-(bM))) + " from warehouse, but only ") + toString(bQ)) + " available"))
348- else $Tuple10((bI + 1), (bG._2 :+ toString((bQ + bM))), bG._3, (bG._4 - bP), (bG._5 - bU), bG._6, bG._7, bK, bf((bQ + bM), v, bK), bG._10)
348+ else if ((0 > (bR + bN)))
349+ then throw((((("Attempt to take " + toString(-(bN))) + " from warehouse, but only ") + toString(bR)) + " available"))
350+ else $Tuple10((bJ + 1), (bH._2 :+ toString((bR + bN))), bH._3, (bH._4 - bQ), (bH._5 - bV), bH._6, bH._7, bL, bg((bR + bN), w, bL), bH._10)
349351 }
350352 }
351353 }
352354
353355
354-func bW (bX,bY,bZ) = {
355- let ca = split(bX[x], "_")
356- let cb = split(bX[y], "_")
357- let cc = if ((bX[z] == ""))
356+func bX (bY,bZ,ca) = {
357+ let cb = split(bY[y], "_")
358+ let cc = split(bY[z], "_")
359+ let cd = if ((bY[A] == ""))
358360 then nil
359- else split_4C(bX[z], "_")
360- let cd = split(bY[aZ], "_")
361- let ce = split(bY[ba], "_")
362- let cf = if ((bY[bb] == ""))
361+ else split_4C(bY[A], "_")
362+ let ce = split(bZ[ba], "_")
363+ let cf = split(bZ[bb], "_")
364+ let cg = if ((bZ[bc] == ""))
363365 then nil
364- else split_4C(bY[bb], "_")
365- if ((size(bZ) != 3))
366+ else split_4C(bZ[bc], "_")
367+ if ((size(ca) != 3))
366368 then throw("newOrderStr should contain exactly 2 ':' separators")
367369 else {
368- let cg = split(bZ[0], "_")
369- let ch = split(bZ[1], "_")
370- let ci = if ((bZ[2] == ""))
370+ let ch = split(ca[0], "_")
371+ let ci = split(ca[1], "_")
372+ let cj = if ((ca[2] == ""))
371373 then nil
372- else split_4C(bZ[2], "_")
373- if ((size(cg) != f))
374+ else split_4C(ca[2], "_")
375+ if ((size(ch) != f))
374376 then throw("All 6 resources should be passed")
375- else if ((size(ch) != f))
377+ else if ((size(ci) != f))
376378 then throw("All 6 materials should be passed")
377379 else {
378- let cj = {
379- let ck = m
380- let cl = size(ck)
381- let cm = $Tuple10(0, nil, 0, 0, 0, ca, cd, false, 0, cg)
382- func cn (co,cp) = if ((cp >= cl))
383- then co
384- else bF(co, ck[cp])
380+ let ck = {
381+ let cl = n
382+ let cm = size(cl)
383+ let cn = $Tuple10(0, nil, 0, 0, 0, cb, ce, false, 0, ch)
384+ func co (cp,cq) = if ((cq >= cm))
385+ then cp
386+ else bG(cp, cl[cq])
385387
386- func cq (co,cp) = if ((cp >= cl))
387- then co
388+ func cr (cp,cq) = if ((cq >= cm))
389+ then cp
388390 else throw("List size exceeds 6")
389391
390- cq(cn(cn(cn(cn(cn(cn(cm, 0), 1), 2), 3), 4), 5), 6)
392+ cr(co(co(co(co(co(co(cn, 0), 1), 2), 3), 4), 5), 6)
391393 }
392- let bx = {
393- let ck = n
394- let cl = size(ck)
395- let cm = $Tuple10(0, nil, cj._3, cj._4, cj._5, cb, ce, false, cj._9, ch)
396- func cr (co,cp) = if ((cp >= cl))
397- then co
398- else bF(co, ck[cp])
394+ let by = {
395+ let cl = o
396+ let cm = size(cl)
397+ let cn = $Tuple10(0, nil, ck._3, ck._4, ck._5, cc, cf, false, ck._9, ci)
398+ func cs (cp,cq) = if ((cq >= cm))
399+ then cp
400+ else bG(cp, cl[cq])
399401
400- func cs (co,cp) = if ((cp >= cl))
401- then co
402+ func ct (cp,cq) = if ((cq >= cm))
403+ then cp
402404 else throw("List size exceeds 6")
403405
404- cs(cr(cr(cr(cr(cr(cr(cm, 0), 1), 2), 3), 4), 5), 6)
406+ ct(cs(cs(cs(cs(cs(cs(cn, 0), 1), 2), 3), 4), 5), 6)
405407 }
406- let be = {
407- let ck = o
408- let cl = size(ck)
409- let cm = $Tuple10(0, nil, bx._3, bx._4, bx._5, cc, cf, true, bx._9, ci)
410- func ct (co,cp) = if ((cp >= cl))
411- then co
412- else bF(co, ck[cp])
408+ let bf = {
409+ let cl = p
410+ let cm = size(cl)
411+ let cn = $Tuple10(0, nil, by._3, by._4, by._5, cd, cg, true, by._9, cj)
412+ func cu (cp,cq) = if ((cq >= cm))
413+ then cp
414+ else bG(cp, cl[cq])
413415
414- func cu (co,cp) = if ((cp >= cl))
415- then co
416+ func cv (cp,cq) = if ((cq >= cm))
417+ then cp
416418 else throw("List size exceeds 50")
417419
418- cu(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(cm, 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)
420+ cv(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cn, 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)
419421 }
420- $Tuple7(cj._2, bx._2, be._2, be._3, be._4, be._5, be._9)
422+ $Tuple7(ck._2, by._2, bf._2, bf._3, bf._4, bf._5, bf._9)
421423 }
422424 }
423425 }
424426
425427
426-func cv (bG,cw) = {
427- let bI = bG._7
428- let bK = bG._12
429- let cx = split(cw, "@")
430- if ((size(cx) != 2))
428+func cw (bH,cx) = {
429+ let bJ = bH._7
430+ let bL = bH._12
431+ let cy = split(cx, "@")
432+ if ((size(cy) != 2))
431433 then throw("Incorrect order format, should be amount@price")
432434 else {
433- let cy = parseIntValue(cx[0])
434- let cz = parseIntValue(cx[1])
435- if ((0 > cz))
435+ let cz = parseIntValue(cy[0])
436+ let cA = parseIntValue(cy[1])
437+ if ((0 > cA))
436438 then throw("Price can't be negative")
437439 else {
438- let cA = if (bK)
439- then (cy * cz)
440- else fraction(cy, cz, aj)
441- let cB = if ((size(bG._8) > bI))
442- then parseIntValue(bG._8[bI])
440+ let cB = if (bL)
441+ then (cz * cA)
442+ else fraction(cz, cA, ak)
443+ let cC = if ((size(bH._8) > bJ))
444+ then parseIntValue(bH._8[bJ])
443445 else 0
444- let bQ = if ((size(bG._9) > bI))
445- then parseIntValue(bG._9[bI])
446+ let bR = if ((size(bH._9) > bJ))
447+ then parseIntValue(bH._9[bJ])
446448 else 0
447- let cC = if ((size(bG._10) > bI))
448- then bG._10[bI]
449+ let cD = if ((size(bH._10) > bJ))
450+ then bH._10[bJ]
449451 else "0@0"
450- let cD = split(cC, "@")
451- let cE = parseIntValue(cD[0])
452- let cF = parseIntValue(cD[1])
453- if (if ((cy != 0))
454- then (cz != cF)
452+ let cE = split(cD, "@")
453+ let cF = parseIntValue(cE[0])
454+ let cG = parseIntValue(cE[1])
455+ if (if ((cz != 0))
456+ then (cA != cG)
455457 else false)
456- then throw(((((("Prices of " + bG._11[bI]) + " don't match! WH price=") + toString(cF)) + ", your price=") + toString(cz)))
458+ then throw(((((("Prices of " + bH._11[bJ]) + " don't match! WH price=") + toString(cG)) + ", your price=") + toString(cA)))
457459 else {
458- let cG = if (bK)
459- then (cE * cF)
460- else fraction(cE, cF, aj)
461- let cH = bf(cy, v, bK)
462- if ((cy == 0))
463- then $Tuple13((bG._1 :+ toString(bQ)), (bG._2 :+ cC), (bG._3 :+ toString(cB)), bG._4, bG._5, bG._6, (bG._7 + 1), bG._8, bG._9, bG._10, bG._11, bK, bG._13)
464- else if ((cy > 0))
465- then if ((0 > cE))
466- then if ((cy > -(cE)))
467- then throw(((((("Attempt to buy " + toString(cy)) + " of ") + bG._11[bI]) + ", but warehouse only sells ") + toString(-(cE))))
468- else $Tuple13((bG._1 :+ toString(bQ)), (bG._2 :+ ((toString((cE + cy)) + "@") + toString(cF))), (bG._3 :+ toString((cB + cy))), (bG._4 + cH), bG._5, (bG._6 + cA), (bG._7 + 1), bG._8, bG._9, bG._10, bG._11, bK, (bG._13 + (if (bK)
469- then (cy * aj)
470- else cy)))
471- else throw((("Attempt to buy " + bG._11[bI]) + " while warehouse doesn't sell it"))
472- else if ((cE > 0))
473- then if ((-(cy) > cE))
474- then throw(((((("Attempt to sell " + toString(-(cy))) + " of ") + bG._11[bI]) + ", but warehouse only buys ") + toString(cE)))
475- else if ((-(cy) > cB))
476- then throw(((((("Attempt to sell " + toString(-(cy))) + ", but you only have ") + toString(cB)) + " of ") + bG._11[bI]))
477- else $Tuple13((bG._1 :+ toString((bQ - cy))), (bG._2 :+ ((toString((cE + cy)) + "@") + toString(cF))), (bG._3 :+ toString((cB + cy))), (bG._4 - cH), (bG._5 - cA), bG._6, (bG._7 + 1), bG._8, bG._9, bG._10, bG._11, bK, (bG._13 - (if (bK)
478- then (cy * aj)
479- else cy)))
480- else throw((("Attempt to sell " + bG._11[bI]) + " while warehouse doesn't buy it"))
460+ let cH = if (bL)
461+ then (cF * cG)
462+ else fraction(cF, cG, ak)
463+ let cI = bg(cz, w, bL)
464+ if ((cz == 0))
465+ then $Tuple13((bH._1 :+ toString(bR)), (bH._2 :+ cD), (bH._3 :+ toString(cC)), bH._4, bH._5, bH._6, (bH._7 + 1), bH._8, bH._9, bH._10, bH._11, bL, bH._13)
466+ else if ((cz > 0))
467+ then if ((0 > cF))
468+ then if ((cz > -(cF)))
469+ then throw(((((("Attempt to buy " + toString(cz)) + " of ") + bH._11[bJ]) + ", but warehouse only sells ") + toString(-(cF))))
470+ else $Tuple13((bH._1 :+ toString(bR)), (bH._2 :+ ((toString((cF + cz)) + "@") + toString(cG))), (bH._3 :+ toString((cC + cz))), (bH._4 + cI), bH._5, (bH._6 + cB), (bH._7 + 1), bH._8, bH._9, bH._10, bH._11, bL, (bH._13 + (if (bL)
471+ then (cz * ak)
472+ else cz)))
473+ else throw((("Attempt to buy " + bH._11[bJ]) + " while warehouse doesn't sell it"))
474+ else if ((cF > 0))
475+ then if ((-(cz) > cF))
476+ then throw(((((("Attempt to sell " + toString(-(cz))) + " of ") + bH._11[bJ]) + ", but warehouse only buys ") + toString(cF)))
477+ else if ((-(cz) > cC))
478+ then throw(((((("Attempt to sell " + toString(-(cz))) + ", but you only have ") + toString(cC)) + " of ") + bH._11[bJ]))
479+ else $Tuple13((bH._1 :+ toString((bR - cz))), (bH._2 :+ ((toString((cF + cz)) + "@") + toString(cG))), (bH._3 :+ toString((cC + cz))), (bH._4 - cI), (bH._5 - cB), bH._6, (bH._7 + 1), bH._8, bH._9, bH._10, bH._11, bL, (bH._13 - (if (bL)
480+ then (cz * ak)
481+ else cz)))
482+ else throw((("Attempt to sell " + bH._11[bJ]) + " while warehouse doesn't buy it"))
481483 }
482484 }
483485 }
484486 }
485487
486488
487-func cI (cJ,cK,cL,cM) = {
488- func cN (bG,bI) = if ((cL[bI] > parseIntValue(cJ[bI])))
489- then throw(((((("You have " + cJ[bI]) + " of ") + m[bI]) + ", but tried to sell ") + toString(cL[bI])))
490- else if ((0 > cL[bI]))
491- then throw(((("You tried to sell negative amount of " + m[bI]) + ": ") + toString(cL[bI])))
492- else if ((cL[bI] > 0))
489+func cJ (cK,cL,cM,cN) = {
490+ func cO (bH,bJ) = if ((cM[bJ] > parseIntValue(cK[bJ])))
491+ then throw(((((("You have " + cK[bJ]) + " of ") + n[bJ]) + ", but tried to sell ") + toString(cM[bJ])))
492+ else if ((0 > cM[bJ]))
493+ then throw(((("You tried to sell negative amount of " + n[bJ]) + ": ") + toString(cM[bJ])))
494+ else if ((cM[bJ] > 0))
493495 then {
494- let cO = bk(cK, bI, cL[bI], cM[bI])
495- $Tuple4((bG._1 :+ cO._1), (bG._2 :+ toString((parseIntValue(cJ[bI]) - cL[bI]))), (bG._3 + cO._2), (bG._4 + cL[bI]))
496+ let cP = bl(cL, bJ, cM[bJ], cN[bJ])
497+ $Tuple4((bH._1 :+ cP._1), (bH._2 :+ toString((parseIntValue(cK[bJ]) - cM[bJ]))), (bH._3 + cP._2), (bH._4 + cM[bJ]))
496498 }
497- else $Tuple4(bG._1, (bG._2 :+ cJ[bI]), bG._3, bG._4)
499+ else $Tuple4(bH._1, (bH._2 :+ cK[bJ]), bH._3, bH._4)
498500
499- let ck = am
500- let cl = size(ck)
501- let cm = $Tuple4(nil, nil, 0, 0)
502- func cn (co,cp) = if ((cp >= cl))
503- then co
504- else cN(co, ck[cp])
501+ let cl = an
502+ let cm = size(cl)
503+ let cn = $Tuple4(nil, nil, 0, 0)
504+ func co (cp,cq) = if ((cq >= cm))
505+ then cp
506+ else cO(cp, cl[cq])
505507
506- func cq (co,cp) = if ((cp >= cl))
507- then co
508+ func cr (cp,cq) = if ((cq >= cm))
509+ then cp
508510 else throw("List size exceeds 6")
509511
510- cq(cn(cn(cn(cn(cn(cn(cm, 0), 1), 2), 3), 4), 5), 6)
512+ cr(co(co(co(co(co(co(cn, 0), 1), 2), 3), 4), 5), 6)
511513 }
512514
513515
514-func cP (cQ,cK,cL,cR) = {
515- func cS (bG,bI) = if ((0 > cL[bI]))
516- then throw(((("You tried to buy negative amount of " + n[bI]) + ": ") + toString(cL[bI])))
517- else if ((cL[bI] > 0))
516+func cQ (cR,cL,cM,cS) = {
517+ func cT (bH,bJ) = if ((0 > cM[bJ]))
518+ then throw(((("You tried to buy negative amount of " + o[bJ]) + ": ") + toString(cM[bJ])))
519+ else if ((cM[bJ] > 0))
518520 then {
519- let cO = bs(cK, bI, cL[bI], cR[bI])
520- $Tuple4((bG._1 :+ cO._1), (bG._2 :+ toString((parseIntValue(cQ[bI]) + cO._3))), (bG._3 + cO._2), (bG._4 + cL[bI]))
521+ let cP = bt(cL, bJ, cM[bJ], cS[bJ])
522+ $Tuple4((bH._1 :+ cP._1), (bH._2 :+ toString((parseIntValue(cR[bJ]) + cP._3))), (bH._3 + cP._2), (bH._4 + cM[bJ]))
521523 }
522- else $Tuple4(bG._1, (bG._2 :+ cQ[bI]), bG._3, bG._4)
524+ else $Tuple4(bH._1, (bH._2 :+ cR[bJ]), bH._3, bH._4)
523525
524- let ck = am
525- let cl = size(ck)
526- let cm = $Tuple4(nil, nil, 0, 0)
527- func cn (co,cp) = if ((cp >= cl))
528- then co
529- else cS(co, ck[cp])
526+ let cl = an
527+ let cm = size(cl)
528+ let cn = $Tuple4(nil, nil, 0, 0)
529+ func co (cp,cq) = if ((cq >= cm))
530+ then cp
531+ else cT(cp, cl[cq])
530532
531- func cq (co,cp) = if ((cp >= cl))
532- then co
533+ func cr (cp,cq) = if ((cq >= cm))
534+ then cp
533535 else throw("List size exceeds 6")
534536
535- cq(cn(cn(cn(cn(cn(cn(cm, 0), 1), 2), 3), 4), 5), 6)
537+ cr(co(co(co(co(co(co(cn, 0), 1), 2), 3), 4), 5), 6)
536538 }
537539
538540
539-func cT (cJ,cQ,cL) = {
540- func cU (bG,bI) = {
541- let cV = cL[bI]
542- if ((cV > parseIntValue(cJ[bI])))
543- then throw(((((("You have " + cJ[bI]) + " of ") + m[bI]) + ", but tried to exchange ") + toString(cV)))
544- else if ((0 > cV))
545- then throw(((("You tried to exchange negative amount of " + m[bI]) + ": ") + toString(cV)))
546- else if ((cV > 0))
547- then $Tuple4((bG._1 :+ toString((parseIntValue(cJ[bI]) - cV))), (bG._2 :+ toString((parseIntValue(cQ[bI]) + cV))), (bG._3 + fraction(cV, h, aj)), (bG._4 + cV))
548- else $Tuple4((bG._1 :+ cJ[bI]), (bG._2 :+ cQ[bI]), bG._3, bG._4)
541+func cU (cK,cR,cM) = {
542+ func cV (bH,bJ) = {
543+ let cW = cM[bJ]
544+ if ((cW > parseIntValue(cK[bJ])))
545+ then throw(((((("You have " + cK[bJ]) + " of ") + n[bJ]) + ", but tried to exchange ") + toString(cW)))
546+ else if ((0 > cW))
547+ then throw(((("You tried to exchange negative amount of " + n[bJ]) + ": ") + toString(cW)))
548+ else if ((cW > 0))
549+ then $Tuple4((bH._1 :+ toString((parseIntValue(cK[bJ]) - cW))), (bH._2 :+ toString((parseIntValue(cR[bJ]) + cW))), (bH._3 + fraction(cW, h, ak)), (bH._4 + cW))
550+ else $Tuple4((bH._1 :+ cK[bJ]), (bH._2 :+ cR[bJ]), bH._3, bH._4)
549551 }
550552
551- let ck = am
552- let cl = size(ck)
553- let cm = $Tuple4(nil, nil, 0, 0)
554- func cn (co,cp) = if ((cp >= cl))
555- then co
556- else cU(co, ck[cp])
553+ let cl = an
554+ let cm = size(cl)
555+ let cn = $Tuple4(nil, nil, 0, 0)
556+ func co (cp,cq) = if ((cq >= cm))
557+ then cp
558+ else cV(cp, cl[cq])
557559
558- func cq (co,cp) = if ((cp >= cl))
559- then co
560+ func cr (cp,cq) = if ((cq >= cm))
561+ then cp
560562 else throw("List size exceeds 6")
561563
562- cq(cn(cn(cn(cn(cn(cn(cm, 0), 1), 2), 3), 4), 5), 6)
564+ cr(co(co(co(co(co(co(cn, 0), 1), 2), 3), 4), 5), 6)
563565 }
564566
565567
566-func cW (cX,cY,cZ) = if ((cX > 0))
568+func cX (cY,cZ,da) = if ((cY > 0))
567569 then {
568- let da = fraction(cX, aT, ai)
569- if ((cZ >= (cX - (3 * da))))
570- then throw(("This trade does not cover delivery cost of " + aK(cZ, 6)))
570+ let db = fraction(cY, aU, aj)
571+ if ((da >= (cY - (3 * db))))
572+ then throw(("This trade does not cover delivery cost of " + aL(da, 6)))
571573 else {
572- let db = N(cY)
573- let dc = getString(aB, db)
574- let dd = addressFromStringValue(cY)
575- (((if (isDefined(dc))
576- then [ScriptTransfer(addressFromStringValue(value(dc)), da, ad)]
577- else nil) :+ ScriptTransfer(dd, ((cX - (3 * da)) - cZ), ad)) :+ ScriptTransfer(aA, da, ad))
574+ let dc = O(cZ)
575+ let dd = getString(aC, dc)
576+ let de = addressFromStringValue(cZ)
577+ (((if (isDefined(dd))
578+ then [ScriptTransfer(addressFromStringValue(value(dd)), db, ae)]
579+ else nil) :+ ScriptTransfer(de, ((cY - (3 * db)) - da), ae)) :+ ScriptTransfer(aB, db, ae))
578580 }
579581 }
580582 else nil
581583
582584
583-func de (df,dg,dh,di) = if ((df > 0))
584- then if ((size(dg) != 1))
585+func df (dg,dh,di,dj) = if ((dg > 0))
586+ then if ((size(dh) != 1))
585587 then throw("exactly 1 payment must be attached")
586588 else {
587- let dj = dg[0]
588- let dk = dj.amount
589- if (if (!(isDefined(dj.assetId)))
589+ let dk = dh[0]
590+ let dl = dk.amount
591+ if (if (!(isDefined(dk.assetId)))
590592 then true
591- else (value(dj.assetId) != ad))
593+ else (value(dk.assetId) != ae))
592594 then throw("USDT payments only!")
593595 else {
594- let dl = (df + di)
595- if ((dk != dl))
596- then throw((((((("Insufficient payment! Attached=" + aK(dk, 6)) + ", required=") + aK(df, 6)) + "+") + aK(di, 6)) + "(delivery fee)"))
597- else if ((al > df))
598- then throw(("Min shop trade is " + aK(al, 6)))
596+ let dm = (dg + dj)
597+ if ((dl != dm))
598+ then throw((((((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(dg, 6)) + "+") + aL(dj, 6)) + "(delivery fee)"))
599+ else if ((am > dg))
600+ then throw(("Min shop trade is " + aL(am, 6)))
599601 else {
600- let dm = fraction(df, aT, ai)
601- let db = N(dh)
602- let dc = getString(aB, db)
603- (((if (isDefined(dc))
604- then [ScriptTransfer(addressFromStringValue(value(dc)), dm, ad)]
605- else nil) :+ ScriptTransfer(addressFromStringValue(dh), (df - (3 * dm)), ad)) :+ ScriptTransfer(aA, dm, ad))
602+ let dn = fraction(dg, aU, aj)
603+ let dc = O(di)
604+ let dd = getString(aC, dc)
605+ (((if (isDefined(dd))
606+ then [ScriptTransfer(addressFromStringValue(value(dd)), dn, ae)]
607+ else nil) :+ ScriptTransfer(addressFromStringValue(di), (dg - (3 * dn)), ae)) :+ ScriptTransfer(aB, dn, ae))
606608 }
607609 }
608610 }
609- else if ((size(dg) != 0))
611+ else if ((size(dh) != 0))
610612 then throw("No payments needed")
611613 else nil
612614
613615
614-func dn (do,cY,dp,dq,dr,ds) = {
615- let dt = value(assetInfo(fromBase58String(do)))
616- if (!(isDefined(getInteger(aB, M(do)))))
617- then throw((("NFT " + dt.name) + " is not staked"))
616+func do (dp,cZ,dq,dr,ds,dt) = {
617+ let du = value(assetInfo(fromBase58String(dp)))
618+ if (!(isDefined(getInteger(aC, N(dp)))))
619+ then throw((("NFT " + du.name) + " is not staked"))
618620 else {
619- let dh = valueOrErrorMessage(getString(aB, K(do)), (("NFT " + dt.name) + " is orphaned"))
620- if ((dh == cY))
621+ let di = valueOrErrorMessage(getString(aC, L(dp)), (("NFT " + du.name) + " is orphaned"))
622+ if ((di == cZ))
621623 then throw("You cannot trade with yourself")
622624 else {
623- let du = split_4C(dp, ":")
624- if ((size(du) != 3))
625+ let dv = split_4C(dq, ":")
626+ if ((size(dv) != 3))
625627 then throw("bpOrderStr should contain exactly 2 ':' separators")
626628 else {
627- let dv = split(du[0], "_")
628- let dw = split(du[1], "_")
629- let dx = if ((du[2] == ""))
629+ let dw = split(dv[0], "_")
630+ let dx = split(dv[1], "_")
631+ let dy = if ((dv[2] == ""))
630632 then nil
631- else split_4C(du[2], "_")
632- if ((size(dv) != f))
633+ else split_4C(dv[2], "_")
634+ if ((size(dw) != f))
633635 then throw("All 6 resources should be passed")
634- else if ((size(dw) != f))
636+ else if ((size(dx) != f))
635637 then throw("All 6 materials should be passed")
636638 else {
637- let dy = aE(invoke(aB, "getWarehouseREADONLY", [do], nil))
638- let bX = split_4C(dy, ":")
639- let ca = split(bX[x], "_")
640- let cb = split(bX[y], "_")
641- let cc = if ((bX[z] == ""))
639+ let dz = aF(invoke(aC, "getWarehouseREADONLY", [dp], nil))
640+ let bY = split_4C(dz, ":")
641+ let cb = split(bY[y], "_")
642+ let cc = split(bY[z], "_")
643+ let cd = if ((bY[A] == ""))
642644 then nil
643- else split_4C(bX[z], "_")
644- let dz = parseIntValue(split(bX[A], "_")[B])
645- let bd = U(do)
646- let dA = bc(bd)
647- let dB = split(dA[aZ], "_")
648- let dC = split(dA[ba], "_")
649- let dD = if ((dA[bb] == ""))
645+ else split_4C(bY[A], "_")
646+ let dA = parseIntValue(split(bY[B], "_")[C])
647+ let be = V(dp)
648+ let dB = bd(be)
649+ let dC = split(dB[ba], "_")
650+ let dD = split(dB[bb], "_")
651+ let dE = if ((dB[bc] == ""))
650652 then nil
651- else split_4C(dA[bb], "_")
652- let cj = {
653- let ck = dv
654- let cl = size(ck)
655- let cm = $Tuple13(nil, nil, nil, 0, 0, 0, 0, dq, ca, dB, m, false, 0)
656- func cn (co,cp) = if ((cp >= cl))
657- then co
658- else cv(co, ck[cp])
653+ else split_4C(dB[bc], "_")
654+ let ck = {
655+ let cl = dw
656+ let cm = size(cl)
657+ let cn = $Tuple13(nil, nil, nil, 0, 0, 0, 0, dr, cb, dC, n, false, 0)
658+ func co (cp,cq) = if ((cq >= cm))
659+ then cp
660+ else cw(cp, cl[cq])
659661
660- func cq (co,cp) = if ((cp >= cl))
661- then co
662+ func cr (cp,cq) = if ((cq >= cm))
663+ then cp
662664 else throw("List size exceeds 6")
663665
664- cq(cn(cn(cn(cn(cn(cn(cm, 0), 1), 2), 3), 4), 5), 6)
666+ cr(co(co(co(co(co(co(cn, 0), 1), 2), 3), 4), 5), 6)
665667 }
666- let bx = {
667- let ck = dw
668- let cl = size(ck)
669- let cm = $Tuple13(nil, nil, nil, cj._4, cj._5, cj._6, 0, dr, cb, dC, n, false, cj._13)
670- func cr (co,cp) = if ((cp >= cl))
671- then co
672- else cv(co, ck[cp])
668+ let by = {
669+ let cl = dx
670+ let cm = size(cl)
671+ let cn = $Tuple13(nil, nil, nil, ck._4, ck._5, ck._6, 0, ds, cc, dD, o, false, ck._13)
672+ func cs (cp,cq) = if ((cq >= cm))
673+ then cp
674+ else cw(cp, cl[cq])
673675
674- func cs (co,cp) = if ((cp >= cl))
675- then co
676+ func ct (cp,cq) = if ((cq >= cm))
677+ then cp
676678 else throw("List size exceeds 6")
677679
678- cs(cr(cr(cr(cr(cr(cr(cm, 0), 1), 2), 3), 4), 5), 6)
680+ ct(cs(cs(cs(cs(cs(cs(cn, 0), 1), 2), 3), 4), 5), 6)
679681 }
680- let be = if ((size(dx) != 0))
682+ let bf = if ((size(dy) != 0))
681683 then {
682- let ck = dx
683- let cl = size(ck)
684- let cm = $Tuple13(nil, nil, nil, bx._4, bx._5, bx._6, 0, ds, cc, dD, o, true, bx._13)
685- func ct (co,cp) = if ((cp >= cl))
686- then co
687- else cv(co, ck[cp])
684+ let cl = dy
685+ let cm = size(cl)
686+ let cn = $Tuple13(nil, nil, nil, by._4, by._5, by._6, 0, dt, cd, dE, p, true, by._13)
687+ func cu (cp,cq) = if ((cq >= cm))
688+ then cp
689+ else cw(cp, cl[cq])
688690
689- func cu (co,cp) = if ((cp >= cl))
690- then co
691+ func cv (cp,cq) = if ((cq >= cm))
692+ then cp
691693 else throw("List size exceeds 50")
692694
693- cu(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(ct(cm, 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)
695+ cv(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cn, 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)
694696 }
695- else $Tuple13(cc, dD, ds, bx._4, bx._5, bx._6, 0, ds, cc, dD, o, true, bx._13)
696- let dE = be._4
697- let dF = if ((0 > (dz - dE)))
697+ else $Tuple13(cd, dE, dt, by._4, by._5, by._6, 0, dt, cd, dE, p, true, by._13)
698+ let dF = bf._4
699+ let dG = if ((0 > (dA - dF)))
698700 then 0
699- else (dz - dE)
700- let dG = makeString_2C([bX[w], makeString(cj._1, "_"), makeString(bx._1, "_"), makeString_2C(be._1, "_"), toString(dF)], ":")
701- let dH = makeString_2C([makeString(cj._2, "_"), makeString(bx._2, "_"), makeString_2C(be._2, "_")], ":")
702- let dI = aE(invoke(aB, "saveWarehouse", [dG, do], nil))
703- let dJ = aH(invoke(aB, "updateAccStats", [dh, fraction(d, be._13, aj)], nil))
704- $Tuple10(StringEntry(bd, dH), cj._3, bx._3, be._3, be._5, be._6, be._13, dh, dI, dJ)
701+ else (dA - dF)
702+ let dH = makeString_2C([bY[x], makeString(ck._1, "_"), makeString(by._1, "_"), makeString_2C(bf._1, "_"), toString(dG)], ":")
703+ let dI = makeString_2C([makeString(ck._2, "_"), makeString(by._2, "_"), makeString_2C(bf._2, "_")], ":")
704+ let dJ = aF(invoke(aC, "saveWarehouse", [dH, dp], nil))
705+ let dK = aI(invoke(aC, "updateAccStats", [di, fraction(d, bf._13, ak)], nil))
706+ $Tuple10(StringEntry(be, dI), ck._3, by._3, bf._3, bf._5, bf._6, bf._13, di, dJ, dK)
705707 }
706708 }
707709 }
708710 }
709711 }
710712
711713
712-func dK (bg) = {
713- let dL = (bg / 30)
714- let dM = [dL, dL, dL, dL, dL, dL]
715- let aG = toString(dL)
716- let cJ = [aG, aG, aG, aG, aG, aG]
717- let cM = [0, 0, 0, 0, 0, 0]
718- func dN (bG,dO) = {
719- let dP = cI(cJ, dO, dM, cM)
720- $Tuple3((bG._1 ++ dP._1), (bG._2 + dP._3), (bG._3 + dP._4))
714+func dL (bh) = {
715+ let dM = (bh / 30)
716+ let dN = [dM, dM, dM, dM, dM, dM]
717+ let aH = toString(dM)
718+ let cK = [aH, aH, aH, aH, aH, aH]
719+ let cN = [0, 0, 0, 0, 0, 0]
720+ func dO (bH,dP) = {
721+ let dQ = cJ(cK, dP, dN, cN)
722+ $Tuple3((bH._1 ++ dQ._1), (bH._2 + dQ._3), (bH._3 + dQ._4))
721723 }
722724
723- let dQ = {
724- let ck = p
725- let cl = size(ck)
726- let cm = $Tuple3(nil, 0, 0)
727- func cn (co,cp) = if ((cp >= cl))
728- then co
729- else dN(co, ck[cp])
725+ let dR = {
726+ let cl = q
727+ let cm = size(cl)
728+ let cn = $Tuple3(nil, 0, 0)
729+ func co (cp,cq) = if ((cq >= cm))
730+ then cp
731+ else dO(cp, cl[cq])
730732
731- func cq (co,cp) = if ((cp >= cl))
732- then co
733+ func cr (cp,cq) = if ((cq >= cm))
734+ then cp
733735 else throw("List size exceeds 5")
734736
735- cq(cn(cn(cn(cn(cn(cm, 0), 1), 2), 3), 4), 5)
737+ cr(co(co(co(co(co(cn, 0), 1), 2), 3), 4), 5)
736738 }
737- let dR = dQ._1
738- let bq = dQ._2
739- let dS = dQ._3
740- let dT = fraction(bq, aU, ai)
741- let dU = (bq / 100)
742- let dV = ((bq - dU) - dT)
743- $Tuple5(dR, dV, dT, dU, dS)
739+ let dS = dR._1
740+ let br = dR._2
741+ let dT = dR._3
742+ let dU = fraction(br, aV, aj)
743+ let dV = (br / 100)
744+ let dW = ((br - dV) - dU)
745+ $Tuple5(dS, dW, dU, dV, dT)
744746 }
745747
746748
747-@Callable(dW)
748-func recalcLockedVolumeREADONLY (V,dy) = {
749- let bY = bc(U(V))
750- let dX = bW(dy, bY, bY)
751- $Tuple2(nil, (dX._4 + dX._5))
749+@Callable(dX)
750+func recalcLockedVolumeREADONLY (W,dz) = {
751+ let bZ = bd(V(W))
752+ let dY = bX(dz, bZ, bZ)
753+ $Tuple2(nil, (dY._4 + dY._5))
752754 }
753755
754756
755757
756-@Callable(dW)
757-func constructorV1 (dY) = if ((dW.caller != this))
758+@Callable(dX)
759+func constructorV1 (dZ) = if ((dX.caller != this))
758760 then throw("Permission denied")
759- else [StringEntry(au(), dY)]
761+ else [StringEntry(av(), dZ)]
760762
761763
762764
763-@Callable(dW)
764-func sellResources (cL,cM) = {
765- let dZ = bE()
766- let S = valueOrErrorMessage(getString(aB, P(toString(dW.caller))), "You don't have a duck staked")
767- if ((size(dW.payments) != 0))
765+@Callable(dX)
766+func sellResources (cM,cN) = {
767+ let ea = bF()
768+ let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
769+ if ((size(dX.payments) != 0))
768770 then throw("sellResources doesn't require any payments")
769771 else {
770- let ea = split(valueOrElse(getString(aB, T(S)), g), "_")
771- if ((ea[I] != "F"))
772- then throw(("Duck location type should be Factory, but is " + ea[I]))
772+ let eb = split(valueOrElse(getString(aC, U(T)), g), "_")
773+ if ((eb[J] != "F"))
774+ then throw(("Duck location type should be Factory, but is " + eb[J]))
773775 else {
774- let eb = bB(R(S))
775- let cJ = split(eb[E], "_")
776- let ec = cI(cJ, ea[J], cL, cM)
777- let dR = ec._1
778- let ed = ec._2
779- let bq = ec._3
780- let dS = ec._4
781- let dU = (bq / 100)
782- let ee = makeString_2C([eb[D], makeString(ed, "_"), eb[F], eb[G]], ":")
783- let ef = aE(invoke(aB, "updateBackpack", [S, ee], nil))
784- let eg = aH(invoke(aB, "updateDuckStats", [S, fraction(a, dS, aj)], nil))
785- $Tuple2(((dR :+ ScriptTransfer(dW.caller, (bq - dU), ad)) :+ ScriptTransfer(aA, dU, ad)), $Tuple3(ef, dZ, eg))
776+ let ec = bC(S(T))
777+ let cK = split(ec[F], "_")
778+ let ed = cJ(cK, eb[K], cM, cN)
779+ let dS = ed._1
780+ let ee = ed._2
781+ let br = ed._3
782+ let dT = ed._4
783+ let dV = (br / 100)
784+ let ef = makeString_2C([ec[E], makeString(ee, "_"), ec[G], ec[H]], ":")
785+ let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil))
786+ let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, dT, ak)], nil))
787+ $Tuple2(((dS :+ ScriptTransfer(dX.caller, (br - dV), ae)) :+ ScriptTransfer(aB, dV, ae)), $Tuple3(eg, ea, eh))
786788 }
787789 }
788790 }
789791
790792
791793
792-@Callable(dW)
793-func sellResourcesWorld (O,bg) = if ((dW.caller != aD))
794+@Callable(dX)
795+func sellResourcesWorld (P,bh) = if ((dX.caller != aE))
794796 then throw("Permission denied")
795797 else {
796- let eh = dK(bg)
797- let dR = eh._1
798- let dV = eh._2
799- let dT = eh._3
800- let dU = eh._4
801- let dS = eh._5
802- if ((0 >= dV))
803- then throw(("This trade does not cover delivery cost of " + aK(dT, 6)))
798+ let ei = dL(bh)
799+ let dS = ei._1
800+ let dW = ei._2
801+ let dU = ei._3
802+ let dV = ei._4
803+ let dT = ei._5
804+ if ((0 >= dW))
805+ then throw(("This trade does not cover delivery cost of " + aL(dU, 6)))
804806 else {
805- let eg = aH(invoke(aB, "updateAccStats", [O, fraction(a, dS, aj)], nil))
806- $Tuple2((((dR :+ IntegerEntry(X, (valueOrElse(getInteger(X), 0) + dT))) :+ ScriptTransfer(aA, dU, ad)) :+ ScriptTransfer(aC, dV, ad)), $Tuple2(dV, eg))
807+ let eh = aI(invoke(aC, "updateAccStats", [P, fraction(a, dT, ak)], nil))
808+ $Tuple2((((dS :+ IntegerEntry(Y, (valueOrElse(getInteger(Y), 0) + dU))) :+ ScriptTransfer(aB, dV, ae)) :+ ScriptTransfer(aD, dW, ae)), $Tuple2(dW, eh))
807809 }
808810 }
809811
810812
811813
812-@Callable(dW)
813-func sellResourcesWorldREADONLY (bg) = {
814- let dV = dK(bg)._2
815- $Tuple2(nil, dV)
814+@Callable(dX)
815+func sellResourcesWorldREADONLY (bh) = {
816+ let dW = dL(bh)._2
817+ $Tuple2(nil, dW)
816818 }
817819
818820
819821
820-@Callable(dW)
821-func sellResourcesDuckDelivery (cL,cM,ei) = if (!(ab))
822+@Callable(dX)
823+func sellResourcesDuckDelivery (cM,cN,ej) = if (!(ac))
822824 then throw("Delivery feature is turned off!")
823825 else {
824- let dZ = bE()
825- let S = valueOrErrorMessage(getString(aB, P(toString(dW.caller))), "You don't have a duck staked")
826- if ((size(dW.payments) != 0))
826+ let ea = bF()
827+ let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
828+ if ((size(dX.payments) != 0))
827829 then throw("sellResources doesn't require any payments")
828830 else {
829- let eb = bB(R(S))
830- let cJ = split(eb[E], "_")
831- let ej = cI(cJ, ei, cL, cM)
832- let dR = ej._1
833- let ed = ej._2
834- let bq = ej._3
835- let dS = ej._4
836- let ee = makeString_2C([eb[D], makeString(ed, "_"), eb[F], eb[G]], ":")
837- let ef = aE(invoke(aB, "updateBackpack", [S, ee], nil))
838- let eg = aH(invoke(aB, "updateDuckStats", [S, fraction(a, dS, aj)], nil))
839- let ek = fraction(bq, aU, ai)
840- let dT = if ((k > ek))
831+ let ec = bC(S(T))
832+ let cK = split(ec[F], "_")
833+ let ek = cJ(cK, ej, cM, cN)
834+ let dS = ek._1
835+ let ee = ek._2
836+ let br = ek._3
837+ let dT = ek._4
838+ let ef = makeString_2C([ec[E], makeString(ee, "_"), ec[G], ec[H]], ":")
839+ let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil))
840+ let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, dT, ak)], nil))
841+ let el = fraction(br, aV, aj)
842+ let dU = if ((k > el))
841843 then k
842- else ek
843- let dU = (bq / 100)
844- if ((dT >= (bq - dU)))
845- then throw(("This trade does not cover delivery cost of " + aK(dT, 6)))
844+ else el
845+ let dV = (br / 100)
846+ if ((dU >= (br - dV)))
847+ then throw(("This trade does not cover delivery cost of " + aL(dU, 6)))
846848 else {
847- let el = valueOrElse(getInteger(X), 0)
848- $Tuple2((((dR :+ ScriptTransfer(dW.caller, ((bq - dU) - dT), ad)) :+ IntegerEntry(X, (el + dT))) :+ ScriptTransfer(aA, dU, ad)), $Tuple3(ef, dZ, eg))
849+ let em = valueOrElse(getInteger(Y), 0)
850+ $Tuple2((((dS :+ ScriptTransfer(dX.caller, ((br - dV) - dU), ae)) :+ IntegerEntry(Y, (em + dU))) :+ ScriptTransfer(aB, dV, ae)), $Tuple3(eg, ea, eh))
849851 }
850852 }
851853 }
852854
853855
854856
855-@Callable(dW)
856-func sellResourcesLandDelivery (cL,cM,V,ei) = if (!(ab))
857+@Callable(dX)
858+func sellResourcesLandDelivery (cM,cN,W,ej) = if (!(ac))
857859 then throw("Delivery feature is turned off!")
858860 else {
859- let dZ = bE()
860- if ((size(dW.payments) != 0))
861+ let ea = bF()
862+ if ((size(dX.payments) != 0))
861863 then throw("sellResources doesn't require any payments")
862864 else {
863- let em = dW.caller
864- let O = toString(em)
865- let en = value(assetInfo(fromBase58String(V)))
866- if (!(isDefined(getInteger(aB, M(V)))))
867- then throw((("NFT " + en.name) + " is not staked"))
865+ let en = dX.caller
866+ let P = toString(en)
867+ let eo = value(assetInfo(fromBase58String(W)))
868+ if (!(isDefined(getInteger(aC, N(W)))))
869+ then throw((("NFT " + eo.name) + " is not staked"))
868870 else {
869- let eo = valueOrErrorMessage(getString(aB, K(V)), (("NFT " + en.name) + " is orphaned"))
870- if ((eo != O))
871+ let ep = valueOrErrorMessage(getString(aC, L(W)), (("NFT " + eo.name) + " is orphaned"))
872+ if ((ep != P))
871873 then throw((e + " is not yours"))
872874 else {
873- let dy = aE(invoke(aB, "getWarehouseREADONLY", [V], nil))
874- let bX = split_4C(dy, ":")
875- let cJ = split(bX[x], "_")
876- let ep = cI(cJ, ei, cL, cM)
877- let dR = ep._1
878- let ed = ep._2
879- let bq = ep._3
880- let dS = ep._4
881- let dG = makeString_2C([bX[w], makeString(ed, "_"), bX[y], bX[z], bX[A]], ":")
882- let dI = aE(invoke(aB, "saveWarehouse", [dG, V], nil))
883- let eg = aH(invoke(aB, "updateAccStats", [O, fraction(a, dS, aj)], nil))
884- let ek = fraction(bq, aU, ai)
885- let dT = if ((k > ek))
875+ let dz = aF(invoke(aC, "getWarehouseREADONLY", [W], nil))
876+ let bY = split_4C(dz, ":")
877+ let cK = split(bY[y], "_")
878+ let eq = cJ(cK, ej, cM, cN)
879+ let dS = eq._1
880+ let ee = eq._2
881+ let br = eq._3
882+ let dT = eq._4
883+ let dH = makeString_2C([bY[x], makeString(ee, "_"), bY[z], bY[A], bY[B]], ":")
884+ let dJ = aF(invoke(aC, "saveWarehouse", [dH, W], nil))
885+ let eh = aI(invoke(aC, "updateAccStats", [P, fraction(a, dT, ak)], nil))
886+ let el = fraction(br, aV, aj)
887+ let dU = if ((k > el))
886888 then k
887- else ek
888- let dU = (bq / 100)
889- if ((dT >= (bq - dU)))
890- then throw(("This trade does not cover delivery cost of " + aK(dT, 6)))
889+ else el
890+ let dV = (br / 100)
891+ if ((dU >= (br - dV)))
892+ then throw(("This trade does not cover delivery cost of " + aL(dU, 6)))
891893 else {
892- let el = valueOrElse(getInteger(X), 0)
893- $Tuple2((((dR :+ ScriptTransfer(dW.caller, ((bq - dU) - dT), ad)) :+ IntegerEntry(X, (el + dT))) :+ ScriptTransfer(aA, dU, ad)), $Tuple3(dI, dZ, eg))
894+ let em = valueOrElse(getInteger(Y), 0)
895+ $Tuple2((((dS :+ ScriptTransfer(dX.caller, ((br - dV) - dU), ae)) :+ IntegerEntry(Y, (em + dU))) :+ ScriptTransfer(aB, dV, ae)), $Tuple3(dJ, ea, eh))
894896 }
895897 }
896898 }
897899 }
898900 }
899901
900902
901903
902-@Callable(dW)
903-func buyMaterials (cL,cR) = {
904- let dZ = bE()
905- let S = valueOrErrorMessage(getString(aB, P(toString(dW.caller))), "You don't have a duck staked")
906- if ((size(dW.payments) != 1))
904+@Callable(dX)
905+func buyMaterials (cM,cS) = {
906+ let ea = bF()
907+ let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
908+ if ((size(dX.payments) != 1))
907909 then throw("exactly 1 payment must be attached")
908910 else {
909- let dj = dW.payments[0]
910- let dk = dj.amount
911- if (if (!(isDefined(dj.assetId)))
911+ let dk = dX.payments[0]
912+ let dl = dk.amount
913+ if (if (!(isDefined(dk.assetId)))
912914 then true
913- else (value(dj.assetId) != ad))
915+ else (value(dk.assetId) != ae))
914916 then throw("USDT payments only!")
915917 else {
916- let ea = split(valueOrElse(getString(aB, T(S)), g), "_")
917- if ((ea[I] != "F"))
918- then throw(("Duck location type should be Factory, but is " + ea[I]))
918+ let eb = split(valueOrElse(getString(aC, U(T)), g), "_")
919+ if ((eb[J] != "F"))
920+ then throw(("Duck location type should be Factory, but is " + eb[J]))
919921 else {
920- let eb = bB(R(S))
921- let cQ = split(eb[F], "_")
922- let eq = cP(cQ, ea[J], cL, cR)
923- let dR = eq._1
924- let er = eq._2
925- let bz = eq._3
926- let es = eq._4
927- if ((bz > dk))
928- then throw(((("Insufficient payment! Attached=" + aK(dk, 6)) + ", required=") + aK(bz, 6)))
922+ let ec = bC(S(T))
923+ let cR = split(ec[G], "_")
924+ let er = cQ(cR, eb[K], cM, cS)
925+ let dS = er._1
926+ let es = er._2
927+ let bA = er._3
928+ let et = er._4
929+ if ((bA > dl))
930+ then throw(((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)))
929931 else {
930- let ee = makeString([eb[D], eb[E], makeString(er, "_"), eb[G]], ":")
931- let ef = aE(invoke(aB, "updateBackpack", [S, ee], nil))
932- let aw = if (((dk - bz) > 0))
933- then [ScriptTransfer(dW.caller, (dk - bz), ad)]
932+ let ef = makeString([ec[E], ec[F], makeString(es, "_"), ec[H]], ":")
933+ let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil))
934+ let ax = if (((dl - bA) > 0))
935+ then [ScriptTransfer(dX.caller, (dl - bA), ae)]
934936 else nil
935- let dU = (bz / 100)
936- let eg = aH(invoke(aB, "updateDuckStats", [S, fraction(a, es, aj)], nil))
937- $Tuple2(((dR ++ aw) :+ ScriptTransfer(aA, dU, ad)), $Tuple3(ef, dZ, eg))
937+ let dV = (bA / 100)
938+ let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, et, ak)], nil))
939+ $Tuple2(((dS ++ ax) :+ ScriptTransfer(aB, dV, ae)), $Tuple3(eg, ea, eh))
938940 }
939941 }
940942 }
941943 }
942944 }
943945
944946
945947
946-@Callable(dW)
947-func buyMaterialsDuckDelivery (cL,cR,ei) = if (!(ab))
948+@Callable(dX)
949+func buyMaterialsDuckDelivery (cM,cS,ej) = if (!(ac))
948950 then throw("Delivery feature is turned off!")
949951 else {
950- let dZ = bE()
951- let S = valueOrErrorMessage(getString(aB, P(toString(dW.caller))), "You don't have a duck staked")
952- if ((size(dW.payments) != 1))
952+ let ea = bF()
953+ let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
954+ if ((size(dX.payments) != 1))
953955 then throw("exactly 1 payment must be attached")
954956 else {
955- let dj = dW.payments[0]
956- let dk = dj.amount
957- if (if (!(isDefined(dj.assetId)))
957+ let dk = dX.payments[0]
958+ let dl = dk.amount
959+ if (if (!(isDefined(dk.assetId)))
958960 then true
959- else (value(dj.assetId) != ad))
961+ else (value(dk.assetId) != ae))
960962 then throw("USDT payments only!")
961963 else {
962- let eb = bB(R(S))
963- let cQ = split(eb[F], "_")
964- let et = cP(cQ, ei, cL, cR)
965- let dR = et._1
966- let er = et._2
967- let bz = et._3
968- let es = et._4
969- let ee = makeString([eb[D], eb[E], makeString(er, "_"), eb[G]], ":")
970- let ef = aE(invoke(aB, "updateBackpack", [S, ee], nil))
971- let eg = aH(invoke(aB, "updateDuckStats", [S, fraction(a, es, aj)], nil))
972- let ek = fraction(bz, aU, ai)
973- let dT = if ((k > ek))
964+ let ec = bC(S(T))
965+ let cR = split(ec[G], "_")
966+ let eu = cQ(cR, ej, cM, cS)
967+ let dS = eu._1
968+ let es = eu._2
969+ let bA = eu._3
970+ let et = eu._4
971+ let ef = makeString([ec[E], ec[F], makeString(es, "_"), ec[H]], ":")
972+ let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil))
973+ let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, et, ak)], nil))
974+ let el = fraction(bA, aV, aj)
975+ let dU = if ((k > el))
974976 then k
975- else ek
976- let dl = (bz + dT)
977- if ((dl > dk))
978- then throw((((((("Insufficient payment! Attached=" + aK(dk, 6)) + ", required=") + aK(bz, 6)) + "+") + aK(dT, 6)) + "(delivery fee)"))
977+ else el
978+ let dm = (bA + dU)
979+ if ((dm > dl))
980+ then throw((((((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)) + "+") + aL(dU, 6)) + "(delivery fee)"))
979981 else {
980- let aw = if (((dk - dl) > 0))
981- then [ScriptTransfer(dW.caller, (dk - dl), ad)]
982+ let ax = if (((dl - dm) > 0))
983+ then [ScriptTransfer(dX.caller, (dl - dm), ae)]
982984 else nil
983- let dU = (bz / 100)
984- let el = valueOrElse(getInteger(X), 0)
985- $Tuple2((((dR ++ aw) :+ ScriptTransfer(aA, dU, ad)) :+ IntegerEntry(X, (el + dT))), $Tuple3(ef, dZ, eg))
985+ let dV = (bA / 100)
986+ let em = valueOrElse(getInteger(Y), 0)
987+ $Tuple2((((dS ++ ax) :+ ScriptTransfer(aB, dV, ae)) :+ IntegerEntry(Y, (em + dU))), $Tuple3(eg, ea, eh))
986988 }
987989 }
988990 }
989991 }
990992
991993
992994
993-@Callable(dW)
994-func buyMaterialsLandDelivery (cL,cR,V,ei) = if (!(ab))
995+@Callable(dX)
996+func buyMaterialsLandDelivery (cM,cS,W,ej) = if (!(ac))
995997 then throw("Delivery feature is turned off!")
996998 else {
997- let dZ = bE()
998- if ((size(dW.payments) != 1))
999+ let ea = bF()
1000+ if ((size(dX.payments) != 1))
9991001 then throw("exactly 1 payment must be attached")
10001002 else {
1001- let dj = dW.payments[0]
1002- let dk = dj.amount
1003- if (if (!(isDefined(dj.assetId)))
1003+ let dk = dX.payments[0]
1004+ let dl = dk.amount
1005+ if (if (!(isDefined(dk.assetId)))
10041006 then true
1005- else (value(dj.assetId) != ad))
1007+ else (value(dk.assetId) != ae))
10061008 then throw("USDT payments only!")
10071009 else {
1008- let em = dW.caller
1009- let O = toString(em)
1010- let en = value(assetInfo(fromBase58String(V)))
1011- if (!(isDefined(getInteger(aB, M(V)))))
1012- then throw((("NFT " + en.name) + " is not staked"))
1010+ let en = dX.caller
1011+ let P = toString(en)
1012+ let eo = value(assetInfo(fromBase58String(W)))
1013+ if (!(isDefined(getInteger(aC, N(W)))))
1014+ then throw((("NFT " + eo.name) + " is not staked"))
10131015 else {
1014- let eo = valueOrErrorMessage(getString(aB, K(V)), (("NFT " + en.name) + " is orphaned"))
1015- if ((eo != O))
1016+ let ep = valueOrErrorMessage(getString(aC, L(W)), (("NFT " + eo.name) + " is orphaned"))
1017+ if ((ep != P))
10161018 then throw((e + " is not yours"))
10171019 else {
1018- let dy = aE(invoke(aB, "getWarehouseREADONLY", [V], nil))
1019- let bX = split_4C(dy, ":")
1020- let cQ = split(bX[y], "_")
1021- let eu = cP(cQ, ei, cL, cR)
1022- let dR = eu._1
1023- let er = eu._2
1024- let bz = eu._3
1025- let es = eu._4
1026- let dG = makeString_2C([bX[w], bX[x], makeString(er, "_"), bX[z], bX[A]], ":")
1027- let dI = aE(invoke(aB, "saveWarehouse", [dG, V], nil))
1028- let eg = aH(invoke(aB, "updateAccStats", [O, fraction(a, es, aj)], nil))
1029- let ek = fraction(bz, aU, ai)
1030- let dT = if ((k > ek))
1020+ let dz = aF(invoke(aC, "getWarehouseREADONLY", [W], nil))
1021+ let bY = split_4C(dz, ":")
1022+ let cR = split(bY[z], "_")
1023+ let ev = cQ(cR, ej, cM, cS)
1024+ let dS = ev._1
1025+ let es = ev._2
1026+ let bA = ev._3
1027+ let et = ev._4
1028+ let dH = makeString_2C([bY[x], bY[y], makeString(es, "_"), bY[A], bY[B]], ":")
1029+ let dJ = aF(invoke(aC, "saveWarehouse", [dH, W], nil))
1030+ let eh = aI(invoke(aC, "updateAccStats", [P, fraction(a, et, ak)], nil))
1031+ let el = fraction(bA, aV, aj)
1032+ let dU = if ((k > el))
10311033 then k
1032- else ek
1033- let dl = (bz + dT)
1034- if ((dl > dk))
1035- then throw((((((("Insufficient payment! Attached=" + aK(dk, 6)) + ", required=") + aK(bz, 6)) + "+") + aK(dT, 6)) + "(delivery fee)"))
1034+ else el
1035+ let dm = (bA + dU)
1036+ if ((dm > dl))
1037+ then throw((((((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)) + "+") + aL(dU, 6)) + "(delivery fee)"))
10361038 else {
1037- let aw = if (((dk - dl) > 0))
1038- then [ScriptTransfer(dW.caller, (dk - dl), ad)]
1039+ let ax = if (((dl - dm) > 0))
1040+ then [ScriptTransfer(dX.caller, (dl - dm), ae)]
10391041 else nil
1040- let dU = (bz / 100)
1041- let el = valueOrElse(getInteger(X), 0)
1042- $Tuple2((((dR ++ aw) :+ ScriptTransfer(aA, dU, ad)) :+ IntegerEntry(X, (el + dT))), $Tuple3(dI, dZ, eg))
1042+ let dV = (bA / 100)
1043+ let em = valueOrElse(getInteger(Y), 0)
1044+ $Tuple2((((dS ++ ax) :+ ScriptTransfer(aB, dV, ae)) :+ IntegerEntry(Y, (em + dU))), $Tuple3(dJ, ea, eh))
10431045 }
10441046 }
10451047 }
10461048 }
10471049 }
10481050 }
10491051
10501052
10511053
1052-@Callable(dW)
1053-func exchangeResources (cL) = {
1054- let dZ = bE()
1055- let S = valueOrErrorMessage(getString(aB, P(toString(dW.caller))), "You don't have a duck staked")
1056- if ((size(dW.payments) != 1))
1054+@Callable(dX)
1055+func exchangeResources (cM) = {
1056+ let ea = bF()
1057+ let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
1058+ if ((size(dX.payments) != 1))
10571059 then throw("exactly 1 payment must be attached")
10581060 else {
1059- let dj = dW.payments[0]
1060- let dk = dj.amount
1061- if (if (!(isDefined(dj.assetId)))
1061+ let dk = dX.payments[0]
1062+ let dl = dk.amount
1063+ if (if (!(isDefined(dk.assetId)))
10621064 then true
1063- else (value(dj.assetId) != ad))
1065+ else (value(dk.assetId) != ae))
10641066 then throw("USDT payments only!")
10651067 else {
1066- let ea = split(valueOrElse(getString(aB, T(S)), g), "_")
1067- if ((ea[I] != "F"))
1068- then throw(("Duck location type should be Factory, but is " + ea[I]))
1068+ let eb = split(valueOrElse(getString(aC, U(T)), g), "_")
1069+ if ((eb[J] != "F"))
1070+ then throw(("Duck location type should be Factory, but is " + eb[J]))
10691071 else {
1070- let eb = bB(R(S))
1071- let cJ = split(eb[E], "_")
1072- let cQ = split(eb[F], "_")
1073- let ev = cT(cJ, cQ, cL)
1074- let ed = ev._1
1075- let er = ev._2
1076- let bz = ev._3
1077- let ew = ev._4
1078- if ((bz > dk))
1079- then throw(((("Insufficient payment! Attached=" + aK(dk, 6)) + ", required=") + aK(bz, 6)))
1072+ let ec = bC(S(T))
1073+ let cK = split(ec[F], "_")
1074+ let cR = split(ec[G], "_")
1075+ let ew = cU(cK, cR, cM)
1076+ let ee = ew._1
1077+ let es = ew._2
1078+ let bA = ew._3
1079+ let ex = ew._4
1080+ if ((bA > dl))
1081+ then throw(((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)))
10801082 else {
1081- let ee = makeString([eb[D], makeString(ed, "_"), makeString(er, "_"), eb[G]], ":")
1082- let ef = aE(invoke(aB, "updateBackpack", [S, ee], nil))
1083- let aw = if (((dk - bz) > 0))
1084- then [ScriptTransfer(dW.caller, (dk - bz), ad)]
1083+ let ef = makeString([ec[E], makeString(ee, "_"), makeString(es, "_"), ec[H]], ":")
1084+ let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil))
1085+ let ax = if (((dl - bA) > 0))
1086+ then [ScriptTransfer(dX.caller, (dl - bA), ae)]
10851087 else nil
1086- let dU = (bz / 100)
1087- let eg = aH(invoke(aB, "updateDuckStats", [S, fraction(a, ew, aj)], nil))
1088- $Tuple2((aw :+ ScriptTransfer(aA, dU, ad)), $Tuple3(ef, dZ, eg))
1088+ let dV = (bA / 100)
1089+ let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, ex, ak)], nil))
1090+ $Tuple2((ax :+ ScriptTransfer(aB, dV, ae)), $Tuple3(eg, ea, eh))
10891091 }
10901092 }
10911093 }
10921094 }
10931095 }
10941096
10951097
10961098
1097-@Callable(dW)
1098-func exchangeResourcesDuckDelivery (cL) = if (!(ab))
1099+@Callable(dX)
1100+func exchangeResourcesDuckDelivery (cM) = if (!(ac))
10991101 then throw("Delivery feature is turned off!")
11001102 else {
1101- let dZ = bE()
1102- let S = valueOrErrorMessage(getString(aB, P(toString(dW.caller))), "You don't have a duck staked")
1103- if ((size(dW.payments) != 1))
1103+ let ea = bF()
1104+ let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
1105+ if ((size(dX.payments) != 1))
11041106 then throw("exactly 1 payment must be attached")
11051107 else {
1106- let dj = dW.payments[0]
1107- let dk = dj.amount
1108- if (if (!(isDefined(dj.assetId)))
1108+ let dk = dX.payments[0]
1109+ let dl = dk.amount
1110+ if (if (!(isDefined(dk.assetId)))
11091111 then true
1110- else (value(dj.assetId) != ad))
1112+ else (value(dk.assetId) != ae))
11111113 then throw("USDT payments only!")
11121114 else {
1113- let eb = bB(R(S))
1114- let cJ = split(eb[E], "_")
1115- let cQ = split(eb[F], "_")
1116- let ex = cT(cJ, cQ, cL)
1117- let ed = ex._1
1118- let er = ex._2
1119- let bz = ex._3
1120- let ew = ex._4
1121- let ek = fraction(bz, aV, ai)
1122- let dT = if ((l > ek))
1115+ let ec = bC(S(T))
1116+ let cK = split(ec[F], "_")
1117+ let cR = split(ec[G], "_")
1118+ let ey = cU(cK, cR, cM)
1119+ let ee = ey._1
1120+ let es = ey._2
1121+ let bA = ey._3
1122+ let ex = ey._4
1123+ let el = fraction(bA, aW, aj)
1124+ let dU = if ((l > el))
11231125 then l
1124- else ek
1125- let dl = (bz + dT)
1126- if ((dl > dk))
1127- then throw((((((("Insufficient payment! Attached=" + aK(dk, 6)) + ", required=") + aK(bz, 6)) + "+") + aK(dT, 6)) + "(delivery fee)"))
1126+ else el
1127+ let dm = (bA + dU)
1128+ if ((dm > dl))
1129+ then throw((((((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)) + "+") + aL(dU, 6)) + "(delivery fee)"))
11281130 else {
1129- let ee = makeString([eb[D], makeString(ed, "_"), makeString(er, "_"), eb[G]], ":")
1130- let ef = aE(invoke(aB, "updateBackpack", [S, ee], nil))
1131- let aw = if (((dk - dl) > 0))
1132- then [ScriptTransfer(dW.caller, (dk - dl), ad)]
1131+ let ef = makeString([ec[E], makeString(ee, "_"), makeString(es, "_"), ec[H]], ":")
1132+ let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil))
1133+ let ax = if (((dl - dm) > 0))
1134+ then [ScriptTransfer(dX.caller, (dl - dm), ae)]
11331135 else nil
1134- let dU = (bz / 100)
1135- let eg = aH(invoke(aB, "updateDuckStats", [S, fraction(a, ew, aj)], nil))
1136- let el = valueOrElse(getInteger(X), 0)
1137- $Tuple2(((aw :+ ScriptTransfer(aA, dU, ad)) :+ IntegerEntry(X, (el + dT))), $Tuple3(ef, dZ, eg))
1136+ let dV = (bA / 100)
1137+ let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, ex, ak)], nil))
1138+ let em = valueOrElse(getInteger(Y), 0)
1139+ $Tuple2(((ax :+ ScriptTransfer(aB, dV, ae)) :+ IntegerEntry(Y, (em + dU))), $Tuple3(eg, ea, eh))
11381140 }
11391141 }
11401142 }
11411143 }
11421144
11431145
11441146
1145-@Callable(dW)
1146-func exchangeResourcesLandDelivery (cL,V) = if (!(ab))
1147+@Callable(dX)
1148+func exchangeResourcesLandDelivery (cM,W) = if (!(ac))
11471149 then throw("Delivery feature is turned off!")
11481150 else {
1149- let dZ = bE()
1150- if ((size(dW.payments) != 1))
1151+ let ea = bF()
1152+ if ((size(dX.payments) != 1))
11511153 then throw("exactly 1 payment must be attached")
11521154 else {
1153- let dj = dW.payments[0]
1154- let dk = dj.amount
1155- if (if (!(isDefined(dj.assetId)))
1155+ let dk = dX.payments[0]
1156+ let dl = dk.amount
1157+ if (if (!(isDefined(dk.assetId)))
11561158 then true
1157- else (value(dj.assetId) != ad))
1159+ else (value(dk.assetId) != ae))
11581160 then throw("USDT payments only!")
11591161 else {
1160- let em = dW.caller
1161- let O = toString(em)
1162- let en = value(assetInfo(fromBase58String(V)))
1163- if (!(isDefined(getInteger(aB, M(V)))))
1164- then throw((("NFT " + en.name) + " is not staked"))
1162+ let en = dX.caller
1163+ let P = toString(en)
1164+ let eo = value(assetInfo(fromBase58String(W)))
1165+ if (!(isDefined(getInteger(aC, N(W)))))
1166+ then throw((("NFT " + eo.name) + " is not staked"))
11651167 else {
1166- let eo = valueOrErrorMessage(getString(aB, K(V)), (("NFT " + en.name) + " is orphaned"))
1167- if ((eo != O))
1168+ let ep = valueOrErrorMessage(getString(aC, L(W)), (("NFT " + eo.name) + " is orphaned"))
1169+ if ((ep != P))
11681170 then throw((e + " is not yours"))
11691171 else {
1170- let dy = aE(invoke(aB, "getWarehouseREADONLY", [V], nil))
1171- let bX = split_4C(dy, ":")
1172- let cJ = split(bX[x], "_")
1173- let cQ = split(bX[y], "_")
1174- let ey = cT(cJ, cQ, cL)
1175- let ed = ey._1
1176- let er = ey._2
1177- let bz = ey._3
1178- let ew = ey._4
1179- let dG = makeString_2C([bX[w], makeString(ed, "_"), makeString(er, "_"), bX[z], bX[A]], ":")
1180- let dI = aE(invoke(aB, "saveWarehouse", [dG, V], nil))
1181- let eg = aH(invoke(aB, "updateAccStats", [O, fraction(a, ew, aj)], nil))
1182- let ek = fraction(bz, aV, ai)
1183- let dT = if ((l > ek))
1172+ let dz = aF(invoke(aC, "getWarehouseREADONLY", [W], nil))
1173+ let bY = split_4C(dz, ":")
1174+ let cK = split(bY[y], "_")
1175+ let cR = split(bY[z], "_")
1176+ let ez = cU(cK, cR, cM)
1177+ let ee = ez._1
1178+ let es = ez._2
1179+ let bA = ez._3
1180+ let ex = ez._4
1181+ let dH = makeString_2C([bY[x], makeString(ee, "_"), makeString(es, "_"), bY[A], bY[B]], ":")
1182+ let dJ = aF(invoke(aC, "saveWarehouse", [dH, W], nil))
1183+ let eh = aI(invoke(aC, "updateAccStats", [P, fraction(a, ex, ak)], nil))
1184+ let el = fraction(bA, aW, aj)
1185+ let dU = if ((l > el))
11841186 then l
1185- else ek
1186- let dl = (bz + dT)
1187- if ((dl > dk))
1188- then throw((((((("Insufficient payment! Attached=" + aK(dk, 6)) + ", required=") + aK(bz, 6)) + "+") + aK(dT, 6)) + "(delivery fee)"))
1187+ else el
1188+ let dm = (bA + dU)
1189+ if ((dm > dl))
1190+ then throw((((((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)) + "+") + aL(dU, 6)) + "(delivery fee)"))
11891191 else {
1190- let aw = if (((dk - dl) > 0))
1191- then [ScriptTransfer(dW.caller, (dk - dl), ad)]
1192+ let ax = if (((dl - dm) > 0))
1193+ then [ScriptTransfer(dX.caller, (dl - dm), ae)]
11921194 else nil
1193- let dU = (bz / 100)
1194- let el = valueOrElse(getInteger(X), 0)
1195- $Tuple2(((aw :+ ScriptTransfer(aA, dU, ad)) :+ IntegerEntry(X, (el + dT))), $Tuple3(dI, dZ, eg))
1195+ let dV = (bA / 100)
1196+ let em = valueOrElse(getInteger(Y), 0)
1197+ $Tuple2(((ax :+ ScriptTransfer(aB, dV, ae)) :+ IntegerEntry(Y, (em + dU))), $Tuple3(dJ, ea, eh))
11961198 }
11971199 }
11981200 }
11991201 }
12001202 }
12011203 }
12021204
12031205
12041206
1205-@Callable(dW)
1206-func craftGoods (ez,eA) = {
1207- let dZ = bE()
1208- if ((size(dW.payments) != 1))
1207+@Callable(dX)
1208+func craftGoods (eA,eB) = {
1209+ let ea = bF()
1210+ if ((size(dX.payments) != 1))
12091211 then throw("exactly 1 payment must be attached")
12101212 else {
1211- let dj = dW.payments[0]
1212- let dk = dj.amount
1213- let eB = valueOrErrorMessage(dj.assetId, "WAVES can't be used as payment")
1214- if ((eB != ad))
1213+ let dk = dX.payments[0]
1214+ let dl = dk.amount
1215+ let eC = valueOrErrorMessage(dk.assetId, "WAVES can't be used as payment")
1216+ if ((eC != ae))
12151217 then throw("USDT payments only!")
1216- else if ((dk != ai))
1218+ else if ((dl != aj))
12171219 then throw("exactly 1 USDT must be attached as payment")
1218- else if ((0 >= eA))
1220+ else if ((0 >= eB))
12191221 then throw("Quantity should be positive")
12201222 else {
1221- let S = valueOrErrorMessage(getString(aB, P(toString(dW.caller))), "You don't have a duck staked")
1222- let ea = split(valueOrElse(getString(aB, T(S)), g), "_")
1223- if ((ea[I] != "M"))
1224- then throw(("Duck location type should be Manufactory, but is " + ea[I]))
1223+ let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
1224+ let eb = split(valueOrElse(getString(aC, U(T)), g), "_")
1225+ if ((eb[J] != "M"))
1226+ then throw(("Duck location type should be Manufactory, but is " + eb[J]))
12251227 else {
1226- let eC = ea[H]
1227- let eb = bB(R(S))
1228- let cQ = split(eb[F], "_")
1229- if (if ((0 > ez))
1228+ let eD = eb[I]
1229+ let ec = bC(S(T))
1230+ let cR = split(ec[G], "_")
1231+ if (if ((0 > eA))
12301232 then true
1231- else (ez >= size(r)))
1232- then throw(("Unknown product idx=" + toString(ez)))
1233+ else (eA >= size(s)))
1234+ then throw(("Unknown product idx=" + toString(eA)))
12331235 else {
1234- let aa = split(r[ez], "_")
1235- if ((size(aa) != u))
1236- then throw(("Fatal: unknown recipe: " + r[ez]))
1236+ let ab = split(s[eA], "_")
1237+ if ((size(ab) != v))
1238+ then throw(("Fatal: unknown recipe: " + s[eA]))
12371239 else {
1238- let eD = parseIntValue(aa[t])
1239- if ((p[eD] != eC))
1240- then throw(((("This product is available in " + p[eD]) + ", but you are in ") + eC))
1240+ let eE = parseIntValue(ab[u])
1241+ if ((q[eE] != eD))
1242+ then throw(((("This product is available in " + q[eE]) + ", but you are in ") + eD))
12411243 else {
1242- let eE = if ((eb[G] == ""))
1244+ let eF = if ((ec[H] == ""))
12431245 then nil
1244- else split_4C(eb[G], "_")
1245- func eF (bG,eG) = {
1246- let aI = bG._2
1247- let eH = if ((size(eE) > aI))
1248- then eE[aI]
1246+ else split_4C(ec[H], "_")
1247+ func eG (bH,eH) = {
1248+ let aJ = bH._2
1249+ let eI = if ((size(eF) > aJ))
1250+ then eF[aJ]
12491251 else "0"
1250- let dP = parseIntValue(eH)
1251- let bg = (eA * v)
1252- let eI = if ((aI == ez))
1253- then toString((dP + bg))
1254- else eH
1255- $Tuple2((bG._1 :+ eI), (aI + 1))
1252+ let dQ = parseIntValue(eI)
1253+ let bh = (eB * w)
1254+ let eJ = if ((aJ == eA))
1255+ then toString((dQ + bh))
1256+ else eI
1257+ $Tuple2((bH._1 :+ eJ), (aJ + 1))
12561258 }
12571259
1258- let eJ = ( let ck = r
1259- let cl = size(ck)
1260- let cm = $Tuple2(nil, 0)
1261- func cn (co,cp) = if ((cp >= cl))
1262- then co
1263- else eF(co, ck[cp])
1260+ let eK = ( let cl = s
1261+ let cm = size(cl)
1262+ let cn = $Tuple2(nil, 0)
1263+ func co (cp,cq) = if ((cq >= cm))
1264+ then cp
1265+ else eG(cp, cl[cq])
12641266
1265- func cq (co,cp) = if ((cp >= cl))
1266- then co
1267+ func cr (cp,cq) = if ((cq >= cm))
1268+ then cp
12671269 else throw("List size exceeds 50")
12681270
1269- cq(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cm, 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))._1
1270- func eK (bG,bI) = {
1271- let eL = (((parseIntValue(aa[bI]) * ah) * eA) * parseIntValue(aa[s]))
1272- let eM = parseIntValue(cQ[bI])
1273- if ((eL > eM))
1274- then throw(((((((("You have " + aK(eM, 8)) + " of ") + n[bI]) + ", but recipe requires ") + aK(eL, 8)) + " for quantity ") + toString(eA)))
1275- else if ((eL > 0))
1276- then $Tuple2((bG._1 :+ toString((eM - eL))), (bG._2 + eL))
1277- else $Tuple2((bG._1 :+ cQ[bI]), bG._2)
1271+ cr(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(cn, 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))._1
1272+ func eL (bH,bJ) = {
1273+ let eM = (((parseIntValue(ab[bJ]) * ai) * eB) * parseIntValue(ab[t]))
1274+ let eN = parseIntValue(cR[bJ])
1275+ if ((eM > eN))
1276+ then throw(((((((("You have " + aL(eN, 8)) + " of ") + o[bJ]) + ", but recipe requires ") + aL(eM, 8)) + " for quantity ") + toString(eB)))
1277+ else if ((eM > 0))
1278+ then $Tuple2((bH._1 :+ toString((eN - eM))), (bH._2 + eM))
1279+ else $Tuple2((bH._1 :+ cR[bJ]), bH._2)
12781280 }
12791281
1280- let eN = {
1281- let ck = am
1282- let cl = size(ck)
1283- let cm = $Tuple2(nil, 0)
1284- func cr (co,cp) = if ((cp >= cl))
1285- then co
1286- else eK(co, ck[cp])
1282+ let eO = {
1283+ let cl = an
1284+ let cm = size(cl)
1285+ let cn = $Tuple2(nil, 0)
1286+ func cs (cp,cq) = if ((cq >= cm))
1287+ then cp
1288+ else eL(cp, cl[cq])
12871289
1288- func cs (co,cp) = if ((cp >= cl))
1289- then co
1290+ func ct (cp,cq) = if ((cq >= cm))
1291+ then cp
12901292 else throw("List size exceeds 6")
12911293
1292- cs(cr(cr(cr(cr(cr(cr(cm, 0), 1), 2), 3), 4), 5), 6)
1294+ ct(cs(cs(cs(cs(cs(cs(cn, 0), 1), 2), 3), 4), 5), 6)
12931295 }
1294- let ee = makeString([eb[D], eb[E], makeString(eN._1, "_"), makeString_2C(eJ, "_")], ":")
1295- let eO = aE(invoke(aB, "updateBackpack", [S, ee], nil))
1296- let eg = aH(invoke(aB, "updateDuckStats", [S, fraction(b, eN._2, aj)], nil))
1297- $Tuple2(nil, $Tuple3(eO, dZ, eg))
1296+ let ef = makeString([ec[E], ec[F], makeString(eO._1, "_"), makeString_2C(eK, "_")], ":")
1297+ let eP = aF(invoke(aC, "updateBackpack", [T, ef], nil))
1298+ let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(b, eO._2, ak)], nil))
1299+ $Tuple2(nil, $Tuple3(eP, ea, eh))
12981300 }
12991301 }
13001302 }
13011303 }
13021304 }
13031305 }
13041306 }
13051307
13061308
13071309
1308-@Callable(dW)
1309-func setWarehouseOrder (eP,V) = {
1310- let em = dW.originCaller
1311- let O = toString(em)
1312- let eO = if ((em != aA))
1313- then bD()
1310+@Callable(dX)
1311+func setWarehouseOrder (eQ,W) = {
1312+ let en = dX.originCaller
1313+ let P = toString(en)
1314+ let eP = if ((en != aB))
1315+ then bE()
13141316 else false
1315- let en = value(assetInfo(fromBase58String(V)))
1316- if (!(isDefined(getInteger(aB, M(V)))))
1317- then throw((("NFT " + en.name) + " is not staked"))
1317+ let eo = value(assetInfo(fromBase58String(W)))
1318+ if (!(isDefined(getInteger(aC, N(W)))))
1319+ then throw((("NFT " + eo.name) + " is not staked"))
13181320 else {
1319- let eo = valueOrErrorMessage(getString(aB, K(V)), (("NFT " + en.name) + " is orphaned"))
1320- if (if ((em != aA))
1321- then (eo != O)
1321+ let ep = valueOrErrorMessage(getString(aC, L(W)), (("NFT " + eo.name) + " is orphaned"))
1322+ if (if ((en != aB))
1323+ then (ep != P)
13221324 else false)
13231325 then throw((e + " is not yours"))
13241326 else {
1325- let eQ = split_4C(eP, ":")
1326- let dy = aE(invoke(aB, "getWarehouseREADONLY", [V], nil))
1327- let bX = split_4C(dy, ":")
1328- let eR = split(bX[A], "_")
1329- let eS = parseIntValue(eR[C])
1330- let bd = U(V)
1331- let bY = bc(bd)
1332- let dX = bW(bX, bY, eQ)
1333- let eT = dX._4
1334- let eU = dX._5
1335- let eV = dX._7
1336- let eW = (eT + eU)
1337- let eX = ((eS - eV) - eW)
1338- if ((0 > eX))
1339- then throw((((((("Attempt to reserve " + toString(eT)) + " space for buy orders, and ") + toString(eU)) + " space for sell orders (and occupied=") + toString(eV)) + "), leads to negative free space"))
1327+ let eR = split_4C(eQ, ":")
1328+ let dz = aF(invoke(aC, "getWarehouseREADONLY", [W], nil))
1329+ let bY = split_4C(dz, ":")
1330+ let eS = split(bY[B], "_")
1331+ let eT = parseIntValue(eS[D])
1332+ let be = V(W)
1333+ let bZ = bd(be)
1334+ let dY = bX(bY, bZ, eR)
1335+ let eU = dY._4
1336+ let eV = dY._5
1337+ let eW = dY._7
1338+ let eX = (eU + eV)
1339+ let eY = ((eT - eW) - eX)
1340+ if ((0 > eY))
1341+ then throw((((((("Attempt to reserve " + toString(eU)) + " space for buy orders, and ") + toString(eV)) + " space for sell orders (and occupied=") + toString(eW)) + "), leads to negative free space"))
13401342 else {
1341- let dG = makeString_2C([bX[w], makeString(dX._1, "_"), makeString(dX._2, "_"), makeString_2C(dX._3, "_"), toString(eW)], ":")
1342- let dI = aE(invoke(aB, "saveWarehouse", [dG, V], nil))
1343- let eY = dX._6
1344- let eZ = if ((eY > 0))
1345- then if ((size(dW.payments) != 1))
1343+ let dH = makeString_2C([bY[x], makeString(dY._1, "_"), makeString(dY._2, "_"), makeString_2C(dY._3, "_"), toString(eX)], ":")
1344+ let dJ = aF(invoke(aC, "saveWarehouse", [dH, W], nil))
1345+ let eZ = dY._6
1346+ let fa = if ((eZ > 0))
1347+ then if ((size(dX.payments) != 1))
13461348 then throw("exactly 1 payment must be attached")
13471349 else {
1348- let dj = dW.payments[0]
1349- let dk = dj.amount
1350- let eB = valueOrErrorMessage(dj.assetId, "WAVES can't be used as payment")
1351- if ((eB != ad))
1350+ let dk = dX.payments[0]
1351+ let dl = dk.amount
1352+ let eC = valueOrErrorMessage(dk.assetId, "WAVES can't be used as payment")
1353+ if ((eC != ae))
13521354 then throw("USDT payments only!")
1353- else if ((dk != eY))
1354- then throw(("Payment needed is " + toString(eY)))
1355- else [StringEntry(bd, eP)]
1355+ else if ((dl != eZ))
1356+ then throw(("Payment needed is " + toString(eZ)))
1357+ else [StringEntry(be, eQ)]
13561358 }
1357- else if ((eY == 0))
1358- then if ((size(dW.payments) != 0))
1359+ else if ((eZ == 0))
1360+ then if ((size(dX.payments) != 0))
13591361 then throw("No payments needed")
1360- else [StringEntry(bd, eP)]
1361- else if ((size(dW.payments) != 0))
1362+ else [StringEntry(be, eQ)]
1363+ else if ((size(dX.payments) != 0))
13621364 then throw("No payments needed")
1363- else [ScriptTransfer(addressFromStringValue(eo), -(eY), ad), StringEntry(bd, eP)]
1364- $Tuple2(eZ, $Tuple2(eO, dI))
1365+ else [ScriptTransfer(addressFromStringValue(ep), -(eZ), ae), StringEntry(be, eQ)]
1366+ $Tuple2(fa, $Tuple2(eP, dJ))
13651367 }
13661368 }
13671369 }
13681370 }
13691371
13701372
13711373
1372-@Callable(dW)
1373-func acceptWarehouseOrder (dp,do,S) = {
1374- let dZ = bE()
1375- let dd = dW.originCaller
1376- let cY = toString(dd)
1377- let fa = valueOrErrorMessage(getString(aB, P(cY)), "You don't have a duck staked")
1378- let ea = valueOrElse(getString(aB, T(fa)), g)
1379- let fb = split(value(ea), "_")
1380- if ((fb[I] != "L"))
1381- then throw((("Duck location type is " + fb[I]) + ", but should be L"))
1382- else if ((fa != S))
1383- then throw(((("Your staked duck is " + fa) + ", but passed ") + S))
1374+@Callable(dX)
1375+func acceptWarehouseOrder (dq,dp,T) = {
1376+ let ea = bF()
1377+ let de = dX.originCaller
1378+ let cZ = toString(de)
1379+ let fb = valueOrErrorMessage(getString(aC, Q(cZ)), "You don't have a duck staked")
1380+ let eb = valueOrElse(getString(aC, U(fb)), g)
1381+ let fc = split(value(eb), "_")
1382+ if ((fc[J] != "L"))
1383+ then throw((("Duck location type is " + fc[J]) + ", but should be L"))
1384+ else if ((fb != T))
1385+ then throw(((("Your staked duck is " + fb) + ", but passed ") + T))
13841386 else {
1385- let bC = R(S)
1386- let eb = bB(bC)
1387- let dq = split(eb[E], "_")
1388- let dr = split(eb[F], "_")
1389- let ds = if ((eb[G] == ""))
1387+ let bD = S(T)
1388+ let ec = bC(bD)
1389+ let dr = split(ec[F], "_")
1390+ let ds = split(ec[G], "_")
1391+ let dt = if ((ec[H] == ""))
13901392 then nil
1391- else split_4C(eb[G], "_")
1392- let fc = dn(do, cY, dp, dq, dr, ds)
1393- let fd = fc._1
1394- let fe = fc._2
1395- let ff = fc._3
1396- let fg = fc._4
1397- let cX = fc._5
1398- let df = fc._6
1399- let fh = fc._7
1400- let dh = fc._8
1401- let fi = fc._9
1402- let dJ = fc._10
1403- let fj = [fd, cW(cX, cY, 0)]
1404- let fk = de(df, dW.payments, dh, 0)
1405- let fl = makeString_2C([eb[D], makeString(fe, "_"), makeString(ff, "_"), makeString_2C(fg, "_")], ":")
1406- let fm = aE(invoke(aB, "updateBackpack", [S, fl], nil))
1407- let fn = aH(invoke(aB, "updateDuckStats", [S, fraction(d, fh, aj)], nil))
1408- $Tuple2((fj ++ fk), $Tuple5(dZ, fi, fm, fn, dJ))
1393+ else split_4C(ec[H], "_")
1394+ let fd = do(dp, cZ, dq, dr, ds, dt)
1395+ let fe = fd._1
1396+ let ff = fd._2
1397+ let fg = fd._3
1398+ let fh = fd._4
1399+ let cY = fd._5
1400+ let dg = fd._6
1401+ let fi = fd._7
1402+ let di = fd._8
1403+ let fj = fd._9
1404+ let dK = fd._10
1405+ let fk = [fe, cX(cY, cZ, 0)]
1406+ let fl = df(dg, dX.payments, di, 0)
1407+ let fm = makeString_2C([ec[E], makeString(ff, "_"), makeString(fg, "_"), makeString_2C(fh, "_")], ":")
1408+ let fn = aF(invoke(aC, "updateBackpack", [T, fm], nil))
1409+ let fo = aI(invoke(aC, "updateDuckStats", [T, fraction(d, fi, ak)], nil))
1410+ $Tuple2((fk ++ fl), $Tuple5(ea, fj, fn, fo, dK))
14091411 }
14101412 }
14111413
14121414
14131415
1414-@Callable(dW)
1415-func acceptShopOrderDuckDelivery (fo,do) = if (!(ab))
1416+@Callable(dX)
1417+func acceptShopOrderDuckDelivery (fp,dp) = if (!(ac))
14161418 then throw("Delivery feature is turned off!")
14171419 else {
1418- let dZ = bE()
1419- let dd = dW.originCaller
1420- let cY = toString(dd)
1421- let S = valueOrErrorMessage(getString(aB, P(cY)), "You don't have a duck staked")
1422- let bC = R(S)
1423- let eb = bB(bC)
1424- let dq = split(eb[E], "_")
1425- let dr = split(eb[F], "_")
1426- let ds = if ((eb[G] == ""))
1420+ let ea = bF()
1421+ let de = dX.originCaller
1422+ let cZ = toString(de)
1423+ let T = valueOrErrorMessage(getString(aC, Q(cZ)), "You don't have a duck staked")
1424+ let bD = S(T)
1425+ let ec = bC(bD)
1426+ let dr = split(ec[F], "_")
1427+ let ds = split(ec[G], "_")
1428+ let dt = if ((ec[H] == ""))
14271429 then nil
1428- else split_4C(eb[G], "_")
1429- let fp = dn(do, cY, fo, dq, dr, ds)
1430- let fd = fp._1
1431- let fe = fp._2
1432- let ff = fp._3
1433- let fg = fp._4
1434- let cX = fp._5
1435- let df = fp._6
1436- let fh = fp._7
1437- let dh = fp._8
1438- let fi = fp._9
1439- let dJ = fp._10
1440- let fq = fraction((df + cX), aU, ai)
1441- let fr = if ((k > fq))
1430+ else split_4C(ec[H], "_")
1431+ let fq = do(dp, cZ, fp, dr, ds, dt)
1432+ let fe = fq._1
1433+ let ff = fq._2
1434+ let fg = fq._3
1435+ let fh = fq._4
1436+ let cY = fq._5
1437+ let dg = fq._6
1438+ let fi = fq._7
1439+ let di = fq._8
1440+ let fj = fq._9
1441+ let dK = fq._10
1442+ let fr = fraction((dg + cY), aV, aj)
1443+ let fs = if ((k > fr))
14421444 then k
1443- else fq
1444- let di = fraction(fr, df, (df + cX))
1445- let cZ = (fr - di)
1446- let el = valueOrElse(getInteger(X), 0)
1447- let fj = [fd, cW(cX, cY, cZ)]
1448- let fk = de(df, dW.payments, dh, di)
1449- let fl = makeString_2C([eb[D], makeString(fe, "_"), makeString(ff, "_"), makeString_2C(fg, "_")], ":")
1450- let fm = aE(invoke(aB, "updateBackpack", [S, fl], nil))
1451- let fn = aH(invoke(aB, "updateDuckStats", [S, fraction(d, fh, aj)], nil))
1452- $Tuple2(((fj ++ fk) :+ IntegerEntry(X, (el + fr))), $Tuple5(dZ, fi, fm, fn, dJ))
1445+ else fr
1446+ let dj = fraction(fs, dg, (dg + cY))
1447+ let da = (fs - dj)
1448+ let em = valueOrElse(getInteger(Y), 0)
1449+ let fk = [fe, cX(cY, cZ, da)]
1450+ let fl = df(dg, dX.payments, di, dj)
1451+ let fm = makeString_2C([ec[E], makeString(ff, "_"), makeString(fg, "_"), makeString_2C(fh, "_")], ":")
1452+ let fn = aF(invoke(aC, "updateBackpack", [T, fm], nil))
1453+ let fo = aI(invoke(aC, "updateDuckStats", [T, fraction(d, fi, ak)], nil))
1454+ $Tuple2(((fk ++ fl) :+ IntegerEntry(Y, (em + fs))), $Tuple5(ea, fj, fn, fo, dK))
14531455 }
14541456
14551457
14561458
1457-@Callable(dW)
1458-func acceptShopOrderLandDelivery (fo,do,fs) = if (!(ab))
1459+@Callable(dX)
1460+func acceptShopOrderLandDelivery (fp,dp,ft) = if (!(ac))
14591461 then throw("Delivery feature is turned off!")
14601462 else {
1461- let dZ = bE()
1462- let dd = dW.originCaller
1463- let cY = toString(dd)
1464- let en = value(assetInfo(fromBase58String(fs)))
1465- if (!(isDefined(getInteger(aB, M(fs)))))
1466- then throw((("NFT " + en.name) + " is not staked"))
1463+ let ea = bF()
1464+ let de = dX.originCaller
1465+ let cZ = toString(de)
1466+ let eo = value(assetInfo(fromBase58String(ft)))
1467+ if (!(isDefined(getInteger(aC, N(ft)))))
1468+ then throw((("NFT " + eo.name) + " is not staked"))
14671469 else {
1468- let eo = valueOrErrorMessage(getString(aB, K(fs)), (("NFT " + en.name) + " is orphaned"))
1469- if ((eo != cY))
1470+ let ep = valueOrErrorMessage(getString(aC, L(ft)), (("NFT " + eo.name) + " is orphaned"))
1471+ if ((ep != cZ))
14701472 then throw((e + " is not yours"))
14711473 else {
1472- let dy = aE(invoke(aB, "getWarehouseREADONLY", [fs], nil))
1473- let bX = split_4C(dy, ":")
1474- let cJ = split(bX[x], "_")
1475- let cQ = split(bX[y], "_")
1476- let eE = if ((bX[z] == ""))
1474+ let dz = aF(invoke(aC, "getWarehouseREADONLY", [ft], nil))
1475+ let bY = split_4C(dz, ":")
1476+ let cK = split(bY[y], "_")
1477+ let cR = split(bY[z], "_")
1478+ let eF = if ((bY[A] == ""))
14771479 then nil
1478- else split(bX[z], "_")
1479- let ft = dn(do, cY, fo, cJ, cQ, eE)
1480- let fd = ft._1
1481- let fe = ft._2
1482- let ff = ft._3
1483- let fg = ft._4
1484- let cX = ft._5
1485- let df = ft._6
1486- let fh = ft._7
1487- let dh = ft._8
1488- let fi = ft._9
1489- let dJ = ft._10
1490- let fq = fraction((df + cX), aU, ai)
1491- let fr = if ((k > fq))
1480+ else split(bY[A], "_")
1481+ let fu = do(dp, cZ, fp, cK, cR, eF)
1482+ let fe = fu._1
1483+ let ff = fu._2
1484+ let fg = fu._3
1485+ let fh = fu._4
1486+ let cY = fu._5
1487+ let dg = fu._6
1488+ let fi = fu._7
1489+ let di = fu._8
1490+ let fj = fu._9
1491+ let dK = fu._10
1492+ let fr = fraction((dg + cY), aV, aj)
1493+ let fs = if ((k > fr))
14921494 then k
1493- else fq
1494- let di = fraction(fr, df, (df + cX))
1495- let cZ = (fr - di)
1496- let el = valueOrElse(getInteger(X), 0)
1497- let fj = [fd, cW(cX, cY, cZ)]
1498- let fk = de(df, dW.payments, dh, di)
1499- let dG = makeString_2C([bX[w], makeString(fe, "_"), makeString(ff, "_"), makeString(fg, "_"), bX[A]], ":")
1500- let dI = aE(invoke(aB, "saveWarehouse", [dG, fs], nil))
1501- let eg = aH(invoke(aB, "updateAccStats", [cY, fraction(d, fh, aj)], nil))
1502- $Tuple2(((fj ++ fk) :+ IntegerEntry(X, (el + fr))), $Tuple5(dZ, fi, dI, eg, dJ))
1495+ else fr
1496+ let dj = fraction(fs, dg, (dg + cY))
1497+ let da = (fs - dj)
1498+ let em = valueOrElse(getInteger(Y), 0)
1499+ let fk = [fe, cX(cY, cZ, da)]
1500+ let fl = df(dg, dX.payments, di, dj)
1501+ let dH = makeString_2C([bY[x], makeString(ff, "_"), makeString(fg, "_"), makeString(fh, "_"), bY[B]], ":")
1502+ let dJ = aF(invoke(aC, "saveWarehouse", [dH, ft], nil))
1503+ let eh = aI(invoke(aC, "updateAccStats", [cZ, fraction(d, fi, ak)], nil))
1504+ $Tuple2(((fk ++ fl) :+ IntegerEntry(Y, (em + fs))), $Tuple5(ea, fj, dJ, eh, dK))
15031505 }
15041506 }
15051507 }
15061508
15071509
15081510
1509-@Callable(dW)
1510-func sellProductsToES (cL) = {
1511- let dZ = bE()
1512- if ((size(dW.payments) != 0))
1511+@Callable(dX)
1512+func sellProductsToES (cM) = {
1513+ let ea = bF()
1514+ if ((size(dX.payments) != 0))
15131515 then throw("No payments needed")
15141516 else {
1515- let S = valueOrErrorMessage(getString(aB, P(toString(dW.caller))), "You don't have a duck staked")
1516- let ea = split(valueOrElse(getString(aB, T(S)), g), "_")
1517- if ((ea[I] != "A"))
1518- then throw(("Duck location type should be Airport, but is " + ea[I]))
1517+ let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
1518+ let eb = split(valueOrElse(getString(aC, U(T)), g), "_")
1519+ if ((eb[J] != "A"))
1520+ then throw(("Duck location type should be Airport, but is " + eb[J]))
15191521 else {
1520- let eb = bB(R(S))
1521- let eE = if ((eb[G] == ""))
1522+ let ec = bC(S(T))
1523+ let eF = if ((ec[H] == ""))
15221524 then nil
1523- else split_4C(eb[G], "_")
1524- let fu = W()
1525- let fv = getString(fu)
1526- let fw = if (isDefined(fv))
1527- then split_4C(value(fv), "_")
1525+ else split_4C(ec[H], "_")
1526+ let fv = X()
1527+ let fw = getString(fv)
1528+ let fx = if (isDefined(fw))
1529+ then split_4C(value(fw), "_")
15281530 else nil
1529- func fx (bG,fy) = {
1530- let bI = bG._1
1531- let eA = if ((size(cL) > bI))
1532- then cL[bI]
1531+ func fy (bH,fz) = {
1532+ let bJ = bH._1
1533+ let eB = if ((size(cM) > bJ))
1534+ then cM[bJ]
15331535 else 0
1534- if ((0 > eA))
1536+ if ((0 > eB))
15351537 then throw("Quantity cannot be negative")
15361538 else {
1537- let aa = split(fy, "_")
1538- if ((size(aa) != u))
1539- then throw(("Fatal: unknown recipe: " + fy))
1539+ let ab = split(fz, "_")
1540+ if ((size(ab) != v))
1541+ then throw(("Fatal: unknown recipe: " + fz))
15401542 else {
1541- let fz = (i * v)
1542- let fA = if ((size(fw) > bI))
1543- then parseIntValue(fw[bI])
1543+ let fA = (i * w)
1544+ let fB = if ((size(fx) > bJ))
1545+ then parseIntValue(fx[bJ])
15441546 else 0
1545- let fB = (fz - fA)
1546- if ((eA > fB))
1547- then throw(((("Warehouse can buy only " + toString(fB)) + " of ") + o[bI]))
1547+ let fC = (fA - fB)
1548+ if ((eB > fC))
1549+ then throw(((("Warehouse can buy only " + toString(fC)) + " of ") + p[bJ]))
15481550 else {
1549- let es = Z(aa)
1550- let fC = fraction((es * j), h, (aj * v))
1551- let fD = if ((size(eE) > bI))
1552- then parseIntValue(eE[bI])
1551+ let et = aa(ab)
1552+ let fD = fraction((et * j), h, (ak * w))
1553+ let fE = if ((size(eF) > bJ))
1554+ then parseIntValue(eF[bJ])
15531555 else 0
1554- if ((eA > fD))
1555- then throw(((("You have only " + toString(fD)) + " of ") + o[bI]))
1556- else $Tuple5((bI + 1), (bG._2 + (fC * eA)), (bG._3 :+ toString((fD - eA))), (bG._4 :+ toString((fA + eA))), (bG._5 + (es * eA)))
1556+ if ((eB > fE))
1557+ then throw(((("You have only " + toString(fE)) + " of ") + p[bJ]))
1558+ else $Tuple5((bJ + 1), (bH._2 + (fD * eB)), (bH._3 :+ toString((fE - eB))), (bH._4 :+ toString((fB + eB))), (bH._5 + (et * eB)))
15571559 }
15581560 }
15591561 }
15601562 }
15611563
1562- let eN = {
1563- let ck = r
1564- let cl = size(ck)
1565- let cm = $Tuple5(0, 0, nil, nil, 0)
1566- func cn (co,cp) = if ((cp >= cl))
1567- then co
1568- else fx(co, ck[cp])
1564+ let eO = {
1565+ let cl = s
1566+ let cm = size(cl)
1567+ let cn = $Tuple5(0, 0, nil, nil, 0)
1568+ func co (cp,cq) = if ((cq >= cm))
1569+ then cp
1570+ else fy(cp, cl[cq])
15691571
1570- func cq (co,cp) = if ((cp >= cl))
1571- then co
1572+ func cr (cp,cq) = if ((cq >= cm))
1573+ then cp
15721574 else throw("List size exceeds 50")
15731575
1574- cq(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cn(cm, 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)
1576+ cr(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(cn, 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)
15751577 }
1576- let fl = makeString_2C([eb[D], eb[E], eb[F], makeString_2C(eN._3, "_")], ":")
1577- let fm = aE(invoke(aB, "updateBackpack", [S, fl], nil))
1578- let eg = aH(invoke(aB, "updateDuckStats", [S, fraction(c, eN._5, (aj * 10))], nil))
1579- $Tuple2([StringEntry(fu, makeString_2C(eN._4, "_")), ScriptTransfer(dW.caller, eN._2, ad)], $Tuple3(fm, dZ, eg))
1578+ let fm = makeString_2C([ec[E], ec[F], ec[G], makeString_2C(eO._3, "_")], ":")
1579+ let fn = aF(invoke(aC, "updateBackpack", [T, fm], nil))
1580+ let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(c, eO._5, (ak * 10))], nil))
1581+ $Tuple2([StringEntry(fv, makeString_2C(eO._4, "_")), ScriptTransfer(dX.caller, eO._2, ae)], $Tuple3(fn, ea, eh))
15801582 }
15811583 }
15821584 }
15831585
15841586
15851587
1586-@Callable(dW)
1587-func updateEsStorage (fE) = if ((dW.caller != aB))
1588+@Callable(dX)
1589+func updateEsStorage (fF) = if ((dX.caller != aC))
15881590 then throw("Permission denied")
1589- else $Tuple2([StringEntry(W(), fE)], fE)
1591+ else $Tuple2([StringEntry(X(), fF)], fF)
15901592
15911593
15921594
1593-@Callable(dW)
1594-func updateDeliveryLocked (fF) = if ((dW.caller != aB))
1595+@Callable(dX)
1596+func updateDeliveryLocked (fG) = if ((dX.caller != aC))
15951597 then throw("Permission denied")
1596- else $Tuple2([IntegerEntry(Y, fF)], fF)
1598+ else $Tuple2([IntegerEntry(Z, fG)], fG)
15971599
15981600
15991601
1600-@Callable(dW)
1601-func sendDeliveryReward (O) = if ((dW.caller != aB))
1602+@Callable(dX)
1603+func sendDeliveryReward (P) = if ((dX.caller != aC))
16021604 then throw("Permission denied")
16031605 else {
1604- let el = valueOrElse(getInteger(X), 0)
1605- let fG = valueOrElse(getInteger(Y), 0)
1606- $Tuple2([ScriptTransfer(addressFromStringValue(O), k, ad), IntegerEntry(X, (el - k)), IntegerEntry(Y, (fG - k))], k)
1606+ let em = valueOrElse(getInteger(Y), 0)
1607+ let fH = valueOrElse(getInteger(Z), 0)
1608+ let fI = (k * m)
1609+ let fJ = invoke(aE, "sendAcres", [P, fI], nil)
1610+ $Tuple2([IntegerEntry(Y, (em - k)), IntegerEntry(Z, (fH - k))], fJ)
16071611 }
16081612
16091613

github/deemru/w8io/169f3d6 
963.41 ms