tx · 7ULUxtdwr4y9e2TFrzHWyK3ibTrU538Y1pBkwpGNRwpy 3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep: -0.05800000 Waves 2023.10.14 19:34 [2798535] smart account 3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep > SELF 0.00000000 Waves
{ "type": 13, "id": "7ULUxtdwr4y9e2TFrzHWyK3ibTrU538Y1pBkwpGNRwpy", "fee": 5800000, "feeAssetId": null, "timestamp": 1697301309353, "version": 2, "chainId": 84, "sender": "3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep", "senderPublicKey": "7v5L7QkXxfkirALdyqmox38QCsa9jtfAtgUfHTh34eWq", "proofs": [ "2qXxbVxbdshJAihYrgFU6yWT161yYvzaL7DvEmRhFGcn1RB4vMkkE6G2J5sSmZFZXLWBpfQh2er9pZKDSgSXGoXo" ], "script": "base64:BgKGAQgCEgQKAggYEgMKAQgSBAoCERESBAoCCAESAwoBARIFCgMREQgSBgoEEREICBIECgIRERIFCgMREQgSBgoEEREICBIDCgEREgMKARESBAoCEQgSBAoCAQESBAoCCAgSBQoDCAgIEgQKAggIEgUKAwgICBIDCgEREgMKAQgSAwoBARIDCgEIZwAHeHBUcmFkZQCQTgAHeHBDcmFmdACQTgAKeHBTZWxsVG9FcwCQTgAGeHBTaG9wAJBOAApMQU5EUFJFRklYAgRMQU5EAAZOVU1SRVMABgAPREVGQVVMVExPQ0FUSU9OAg9BZnJpY2FfRl9BZnJpY2EAEFJFU09VUkNFUFJJQ0VNSU4A1bUCAA1FU01BWFBBQ0tBR0VTAAoACUVTQlVZQ09FRgAEABVNSU5fVVNEVF9GRUVfREVMSVZFUlkA0IYDABdNSU5fVVNEVF9GRUVfREVMSVZFUlkxNQD4yQQAFVVTRFQyQUNSRVNfTVVMVElQTElFUgAKAAhyZXNUeXBlcwkAzAgCAgNPaWwJAMwIAgIDT3JlCQDMCAICBFdvb2QJAMwIAgIEU2FuZAkAzAgCAgRDbGF5CQDMCAICB09yZ2FuaWMFA25pbAAIbWF0VHlwZXMJAMwIAgIERnVlbAkAzAgCAgVNZXRhbAkAzAgCAgVQbGFuawkAzAgCAgVHbGFzcwkAzAgCAgdQbGFzdGljCQDMCAICB1Byb3RlaW4FA25pbAAJcHJvZFR5cGVzCQDMCAICEEZpcnN0IEFpZCBLaXQgTDEJAMwIAgIQRmlyc3QgQWlkIEtpdCBMMgkAzAgCAhBGaXJzdCBBaWQgS2l0IEwzCQDMCAICC0JhY2twYWNrIEwxCQDMCAICC0JhY2twYWNrIEwyCQDMCAICC0JhY2twYWNrIEwzCQDMCAICDkZvb2QgUmF0aW9uIEwxCQDMCAICDkZvb2QgUmF0aW9uIEwyCQDMCAICDkZvb2QgUmF0aW9uIEwzCQDMCAICC0pldCBQYWNrIEwxCQDMCAICC0pldCBQYWNrIEwyCQDMCAICC0pldCBQYWNrIEwzCQDMCAICCVNoaWVsZCBMMQkAzAgCAglTaGllbGQgTDIJAMwIAgIJU2hpZWxkIEwzCQDMCAICB01pbmUgTDEJAMwIAgIHTWluZSBMMgkAzAgCAgdNaW5lIEwzCQDMCAICB1RyYXAgTDEJAMwIAgIHVHJhcCBMMgkAzAgCAgdUcmFwIEwzBQNuaWwACmNvbnRpbmVudHMJAMwIAgIIQW1lcmljYXMJAMwIAgIGRXVyb3BlCQDMCAICBEFzaWEJAMwIAgIGQWZyaWNhCQDMCAICB09jZWFuaWEFA25pbAAJQ09FRkYyTUFUAICt4gQAEHByb2R1Y3Rpb25NYXRyaXgJAMwIAgIlOF84XzhfMTdfMTdfNDJfMTJfMF8zMF8wLDAsMCwwLDAsMCwwXwkAzAgCAiU4XzhfOF8xN18xN180Ml8yNF8wXzYwXzAsMCw1LDIsMCwwLDBfCQDMCAICJzhfOF84XzE3XzE3XzQyXzM2XzBfMTIwXzAsMCwxMCw0LDAsMCwwXwkAzAgCAik4XzE5XzE5XzhfMjdfMTlfMjZfMV8yMF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAik4XzE5XzE5XzhfMjdfMTlfNTJfMV80MF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAik4XzE5XzE5XzhfMjdfMTlfNzhfMV84MF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAiU4XzhfOF84XzhfNjBfMTNfMl8yXzAsMCwwLDAsMCwwLDBfMDExCQDMCAICJThfOF84XzhfOF82MF8yNl8yXzRfMCwwLDAsMCwwLDAsMF8wMTEJAMwIAgIlOF84XzhfOF84XzYwXzM5XzJfOF8wLDAsMCwwLDAsMCwwXzAxMQkAzAgCAikzMF8zMF8zXzE3XzE3XzNfMzBfM18zMF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAikzMF8zMF8zXzE3XzE3XzNfNjBfM181MF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAikzMF8zMF8zXzE3XzE3XzNfOTBfM183MF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAisxOF8xOF8xMF8xOF8xOF8xOF8xMV80XzEwXzAsMCwwLDAsMCwwLDBfMjAxCQDMCAICKzE4XzE4XzEwXzE4XzE4XzE4XzIyXzRfMjBfMCwwLDAsMCwwLDAsMF8yMDEJAMwIAgIrMThfMThfMTBfMThfMThfMThfMzNfNF8zMF8wLDAsMCwwLDAsMCwwXzIwMQkAzAgCAio0XzEzXzIyXzRfMzVfMjJfMjNfMF81MCwxLDBfMCwwLDAsMCwwLDAsMF8JAMwIAgIqNF8xM18yMl80XzM1XzIyXzQ2XzBfNTAsMSwxXzAsMiw1LDAsMCwwLDBfCQDMCAICKzRfMTNfMjJfNF8zNV8yMl82OV8wXzUwLDIsMV8wLDUsMTAsMCwwLDAsMF8JAMwIAgIqNV8yNV80MF81XzEwXzE1XzIwXzFfMzAsMSwxXzAsMCwwLDAsMCwwLDBfCQDMCAICKjVfMjVfNDBfNV8xMF8xNV80MF8xXzMwLDEsMl8yLDEsMywwLDAsMCwwXwkAzAgCAio1XzI1XzQwXzVfMTBfMTVfNjBfMV8zMCwxLDNfNSwyLDgsMCwwLDAsMF8FA25pbAAJcklkeENvZWZmAAYADXJJZHhDb250aW5lbnQABwAKUkVDSVBFU0laRQALAA5QUk9EVUNUUEtHU0laRQAKAAt3aElkeExldmVscwAAAAh3aElkeFJlcwABAAh3aElkeE1hdAACAAl3aElkeFByb2QAAwAJd2hJZHhMT0ZUAAQACXZvbExvY2tlZAAAAAh2b2xUb3RhbAADAApicElkeExldmVsAAAACGJwSWR4UmVzAAEACGJwSWR4TWF0AAIACWJwSWR4UHJvZAADAA9sb2NJZHhDb250aW5lbnQAAAAKbG9jSWR4VHlwZQABAAhsb2NJZHhJZAACARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBB2Fzc2V0SWQJAKwCAgIDbm9fBQdhc3NldElkARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQdhc3NldElkCQCsAgICA3N0XwUHYXNzZXRJZAEPa2V5QWRkcmVzc1JlZkJ5AQRhZGRyCQCsAgICCWFjY1JlZkJ5XwUEYWRkcgEUa2V5U3Rha2VkRHVja0J5T3duZXIBCW93bmVyQWRkcgkArAICAhJzdGFrZWREdWNrQnlPd25lcl8FCW93bmVyQWRkcgERa2V5QmFja3BhY2tCeUR1Y2sBC2R1Y2tBc3NldElkCQCsAgICCWJhY2tQYWNrXwULZHVja0Fzc2V0SWQBD2tleUR1Y2tMb2NhdGlvbgELZHVja0Fzc2V0SWQJAKwCAgINZHVja0xvY2F0aW9uXwULZHVja0Fzc2V0SWQBDmtleU9yZGVyQnlMYW5kAQtsYW5kQXNzZXRJZAkArAICAgpsYW5kT3JkZXJfBQtsYW5kQXNzZXRJZAEOa2V5RXNXYXJlaG91c2UAAhplbWVyZ2VuY3lXYXJlaG91c2VQcm9kdWN0cwAPZGVsaXZlcnlGdW5kS2V5AgxkZWxpdmVyeUZ1bmQAEWRlbGl2ZXJ5TG9ja2VkS2V5Ag5kZWxpdmVyeUxvY2tlZAESZ2V0UmVjaXBlTWF0ZXJpYWxzAQZyZWNpcGUJAGgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGcmVjaXBlBQlySWR4Q29lZmYFCUNPRUZGMk1BVAARS1NfQUxMT1dfREVMSVZFUlkGAAVjaGFpbgkAyQECCQDKAQIIBQR0aGlzBWJ5dGVzAAEAAQALdXNkdEFzc2V0SWQEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDABIITaerIIAz9O0bvKju6Lk7zJgt0LXfoHlqjUI/moD/+5AwkAAAIBAVQFByRtYXRjaDABIFWx2J9yh4Lv5eNbjawFq2XemkOhLxa7BfMat4el8cUYCQACAQINVW5rbm93biBjaGFpbgAVZGVmYXVsdFJlc3RBZGRyZXNzU3RyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAiMzUFFDdXZGYnZoNExrUFVucm5VMXozam5iQTFwOW0zV05odgMJAAACAQFUBQckbWF0Y2gwAiMzTXVta0dHenRDS0FYcFdEcXhrZGRvZnFYU1VicVFrdlNKeQkAAgECDVVua25vd24gY2hhaW4AA1NFUAICX18ABU1VTFQ1AKCNBgAFTVVMVDYAwIQ9AAVNVUxUOACAwtcvAAZNVUxUMTAAgMivoCUADk1JTlNIT1BQQVlNRU5UAKCNBgAFSVRFUjYJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAEPZ2V0U3RyaW5nT3JGYWlsAgdhZGRyZXNzA2tleQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFB2FkZHJlc3MFA2tleQkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQdhZGRyZXNzCQDMCAICAS4JAMwIAgUDa2V5CQDMCAICDyBpcyBub3QgZGVmaW5lZAUDbmlsAgAAEUlkeENmZ1N0YWtpbmdEYXBwAAEAFElkeENmZ0ludmVzdEZ1bmREYXBwAAYAD0lkeENmZ0FjcmVzRGFwcAAIAQprZXlSZXN0Q2ZnAAIOJXNfX3Jlc3RDb25maWcBDmtleVJlc3RBZGRyZXNzAAIMJXNfX3Jlc3RBZGRyARFyZWFkUmVzdENmZ09yRmFpbAEEcmVzdAkAvAkCCQEPZ2V0U3RyaW5nT3JGYWlsAgUEcmVzdAkBCmtleVJlc3RDZmcABQNTRVABGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIHcmVzdENmZwNpZHgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFB3Jlc3RDZmcFA2lkeAkArAICAipSZXN0IGNmZyBkb2Vzbid0IGNvbnRhaW4gYWRkcmVzcyBhdCBpbmRleCAJAKQDAQUDaWR4AAxyZXN0Q29udHJhY3QJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkBDmtleVJlc3RBZGRyZXNzAAUVZGVmYXVsdFJlc3RBZGRyZXNzU3RyAAdyZXN0Q2ZnCQERcmVhZFJlc3RDZmdPckZhaWwBBQxyZXN0Q29udHJhY3QAD3N0YWtpbmdDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFEUlkeENmZ1N0YWtpbmdEYXBwABJpbnZlc3RGdW5kQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRRJZHhDZmdJbnZlc3RGdW5kRGFwcAANYWNyZXNDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFD0lkeENmZ0FjcmVzRGFwcAEIYXNTdHJpbmcBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwBQFzCQACAQIYZmFpbCB0byBjYXN0IGludG8gU3RyaW5nAQVhc0ludAEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAgNJbnQEAW4FByRtYXRjaDAFAW4JAAIBAhVmYWlsIHRvIGNhc3QgaW50byBJbnQBCmtleUJsb2NrZWQAAhBjb250cmFjdHNCbG9ja2VkAQpmaXhlZFBvaW50AgN2YWwIZGVjaW1hbHMEBnRlblBvdwkAbAYACgAABQhkZWNpbWFscwAAAAAFBERPV04EB2xvd1BhcnQJAKQDAQkAagIFA3ZhbAUGdGVuUG93BAZ6ZXJvZXMJALACAgkApAMBBQZ0ZW5Qb3cJAGQCAAEJALECAQUHbG93UGFydAkArAICCQCsAgIJAKwCAgkApAMBCQBpAgUDdmFsBQZ0ZW5Qb3cCAS4FBnplcm9lcwUHbG93UGFydAATRkFDVE9SWU1BWFdBUkVIT1VTRQCAyK+gJQAOU0VMTE1VTFRJUExJRVIAyAEADUJVWU1VTFRJUExJRVIArAIACkFVQ1RJT05GRUUAkE4ADERFTElWRVJZX0ZFRQCQTgAOREVMSVZFUllfRkVFMTUAmHUBHmtleUZhY3RvcnlXYXJlaG91c2VCeUlkQW5kVHlwZQIJZmFjdG9yeUlkB3Jlc1R5cGUJAKwCAgkArAICCQCsAgICG2ZhY3RvcnlXaEJ5Q29udGluZW50QW5kUmVzXwUJZmFjdG9yeUlkAgFfCQCkAwEFB3Jlc1R5cGUACW9yZElkeFJlcwAAAAlvcmRJZHhNYXQAAQAKb3JkSWR4UHJvZAACAQhnZXRPcmRlcgEGb3JkS2V5BAFwCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUGb3JkS2V5AjAwQDBfMEAwXzBAMF8wQDBfMEAwXzBAMDowQDBfMEAwXzBAMF8wQDBfMEAwXzBAMDoCAToJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQFwBQlvcmRJZHhSZXMCAV8FBk5VTVJFUwkAkQMCBQFwBQlvcmRJZHhSZXMCFzBAMF8wQDBfMEAwXzBAMF8wQDBfMEAwCQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUBcAUJb3JkSWR4TWF0AgFfBQZOVU1SRVMJAJEDAgUBcAUJb3JkSWR4TWF0AhcwQDBfMEAwXzBAMF8wQDBfMEAwXzBAMAkAzAgCCQCRAwIFAXAFCm9yZElkeFByb2QFA25pbAEIdG9Wb2x1bWUDBmFtb3VudAdwa2dTaXplCWlzUHJvZHVjdAMFCWlzUHJvZHVjdAQEcGtncwMJAGcCBQZhbW91bnQAAAkAaQIJAGUCCQBkAgUGYW1vdW50BQdwa2dTaXplAAEFB3BrZ1NpemUJAQEtAQkAaQIJAGUCCQBkAgkBAS0BBQZhbW91bnQFB3BrZ1NpemUAAQUHcGtnU2l6ZQkAaAIFBHBrZ3MFBU1VTFQ4BQZhbW91bnQBDHNlbGxJbnRlcm5hbAQFbG9jSWQHcmVzVHlwZQZhbW91bnQIbWluUHJpY2UEBXdoS2V5CQEea2V5RmFjdG9yeVdhcmVob3VzZUJ5SWRBbmRUeXBlAgUFbG9jSWQFB3Jlc1R5cGUEAncwCQELdmFsdWVPckVsc2UCCQCfCAEFBXdoS2V5AAAEAnIwAwkAZgIFAncwBRNGQUNUT1JZTUFYV0FSRUhPVVNFAAADCQBmAgkAZAIFAncwBQZhbW91bnQFE0ZBQ1RPUllNQVhXQVJFSE9VU0UJAGUCBRNGQUNUT1JZTUFYV0FSRUhPVVNFBQJ3MAUGYW1vdW50BAx1c2R0UmVjZWl2ZWQJAGQCCQBrAwUCcjAJAGUCCQBoAgUOU0VMTE1VTFRJUExJRVIFEFJFU09VUkNFUFJJQ0VNSU4JAGsDCQBkAgkAaAIAZAUCdzAJAGgCADIFAnIwBRBSRVNPVVJDRVBSSUNFTUlOBRNGQUNUT1JZTUFYV0FSRUhPVVNFBQZNVUxUMTAJAGsDCQBlAgUGYW1vdW50BQJyMAUQUkVTT1VSQ0VQUklDRU1JTgUFTVVMVDgEBW1pbjk5CQBlAgUIbWluUHJpY2UJAGkCBQhtaW5QcmljZQBkAwkAZgIJAGgCBQVtaW45OQUGYW1vdW50CQBoAgUMdXNkdFJlY2VpdmVkBQVNVUxUOAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIPQWN0dWFsIHByaWNlID0gCQCkAwEFDHVzZHRSZWNlaXZlZAIDIC8gCQCkAwEFBmFtb3VudAIOIDwgbWluUHJpY2UgPSAJAKQDAQUIbWluUHJpY2UCAywgKAUFbG9jSWQCAiwgCQCRAwIFCHJlc1R5cGVzBQdyZXNUeXBlAgEpCQCUCgIJAQxJbnRlZ2VyRW50cnkCBQV3aEtleQkAZAIFAncwBQZhbW91bnQFDHVzZHRSZWNlaXZlZAELYnV5SW50ZXJuYWwEBWxvY0lkB21hdFR5cGUGYW1vdW50CG1heFByaWNlBAV3aEtleQkBHmtleUZhY3RvcnlXYXJlaG91c2VCeUlkQW5kVHlwZQIFBWxvY0lkBQdtYXRUeXBlBAJ3MAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQV3aEtleQAABAJtMQMJAGYCBQJ3MAUTRkFDVE9SWU1BWFdBUkVIT1VTRQkAlwMBCQDMCAIFBmFtb3VudAkAzAgCCQBlAgUCdzAFE0ZBQ1RPUllNQVhXQVJFSE9VU0UFA25pbAAABAJtMAkAlwMBCQDMCAIFAncwCQDMCAIJAGUCBQZhbW91bnQFAm0xBQNuaWwEAW0JAGQCBQJtMAUCbTEEBXcwbWluCQCXAwEJAMwIAgUCdzAJAMwIAgUTRkFDVE9SWU1BWFdBUkVIT1VTRQUDbmlsBAl1c2R0U3BlbnQJAGQCCQBrAwUCbTAJAGUCCQBoAgUNQlVZTVVMVElQTElFUgUQUkVTT1VSQ0VQUklDRU1JTgkAawMJAGUCCQBoAgBkBQV3MG1pbgkAaAIAMgUCbTAFEFJFU09VUkNFUFJJQ0VNSU4FE0ZBQ1RPUllNQVhXQVJFSE9VU0UFBk1VTFQxMAkAawMFAm0xCQBoAgACBRBSRVNPVVJDRVBSSUNFTUlOBQVNVUxUOAQGbWF4MTAxCQBkAgUIbWF4UHJpY2UJAGkCBQhtYXhQcmljZQBkAwkAZgIJAGgCBQl1c2R0U3BlbnQFBU1VTFQ4CQBoAgUGbWF4MTAxBQFtCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg9BY3R1YWwgcHJpY2UgPSAJAKQDAQUJdXNkdFNwZW50AgMgLyAJAKQDAQUBbQIOID4gbWF4UHJpY2UgPSAJAKQDAQUIbWF4UHJpY2UCAywgKAUFbG9jSWQCAiwgCQCRAwIFCG1hdFR5cGVzBQdtYXRUeXBlAgEpCQCVCgMJAQxJbnRlZ2VyRW50cnkCBQV3aEtleQkAZQIFAncwBQFtBQl1c2R0U3BlbnQFAW0BC2dldEJhY2twYWNrAQVicEtleQQBcAkAvAkCCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAUFYnBLZXkCGjA6MF8wXzBfMF8wXzA6MF8wXzBfMF8wXzA6AgE6CQDMCAIJAKQDAQkBC3ZhbHVlT3JFbHNlAgkAtgkBCQCRAwIFAXAFCmJwSWR4TGV2ZWwAAAkAzAgCAwkAAAIJAJADAQkAtQkCCQCRAwIFAXAFCGJwSWR4UmVzAgFfBQZOVU1SRVMJAJEDAgUBcAUIYnBJZHhSZXMCCzBfMF8wXzBfMF8wCQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUBcAUIYnBJZHhNYXQCAV8FBk5VTVJFUwkAkQMCBQFwBQhicElkeE1hdAILMF8wXzBfMF8wXzAJAMwIAgkAkQMCBQFwBQlicElkeFByb2QFA25pbAEMY2hlY2tCbG9ja2VkAAMJAQt2YWx1ZU9yRWxzZQIJAJsIAgUPc3Rha2luZ0NvbnRyYWN0CQEKa2V5QmxvY2tlZAAHCQACAQIfQ29udHJhY3RzIGFyZSB1bmRlciBtYWludGVuYW5jZQUEdW5pdAEGcHJvbG9nAAkBBWFzSW50AQkA/QcEBQ9zdGFraW5nQ29udHJhY3QCCnNhdmVMYXN0VHgFA25pbAUDbmlsAQlzZXRDb21tb24CA2FjYw9pZ25vcmVkSXRlcmF0b3IEAWoIBQNhY2MCXzEEBGl0ZW0DCQBmAgkAkAMBCAUDYWNjA18xMAUBagkAkQMCCAUDYWNjA18xMAUBagIDMEAwBAZpc1Byb2QIBQNhY2MCXzgECWl0ZW1QYXJ0cwkAtQkCBQRpdGVtAgFAAwkBAiE9AgkAkAMBBQlpdGVtUGFydHMAAgkAAgECLkluY29ycmVjdCBvcmRlciBmb3JtYXQsIHNob3VsZCBiZSBhbW91bnRAcHJpY2UECG5ld09yZEFtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJaXRlbVBhcnRzAAAECG5ld09yZFByCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJaXRlbVBhcnRzAAEECW5ld09yZFVzZAMFBmlzUHJvZAkAaAIFCG5ld09yZEFtBQhuZXdPcmRQcgkAawMFCG5ld09yZEFtBQhuZXdPcmRQcgUFTVVMVDgECW5ld09yZFZvbAkBCHRvVm9sdW1lAwUIbmV3T3JkQW0FDlBST0RVQ1RQS0dTSVpFBQZpc1Byb2QEBndoSW5pdAMJAGYCCQCQAwEIBQNhY2MCXzYFAWoJAQ1wYXJzZUludFZhbHVlAQkAkQMCCAUDYWNjAl82BQFqAAAEC2N1ck9yZFBhcnRzCQC1CQIDCQBmAgkAkAMBCAUDYWNjAl83BQFqCQCRAwIIBQNhY2MCXzcFAWoCAzBAMAIBQAQIY3VyT3JkQW0JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQtjdXJPcmRQYXJ0cwAABAhjdXJPcmRQcgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFC2N1ck9yZFBhcnRzAAEDAwkAZgIAAAUIY3VyT3JkUHIGCQBmAgAABQhuZXdPcmRQcgkAAgECF1ByaWNlIGNhbid0IGJlIG5lZ2F0aXZlBAljdXJPcmRVc2QDBQZpc1Byb2QJAGgCBQhjdXJPcmRBbQUIY3VyT3JkUHIJAGsDBQhjdXJPcmRBbQUIY3VyT3JkUHIFBU1VTFQ4AwkAAAIFCG5ld09yZEFtAAADCQBmAgUIY3VyT3JkQW0AAAkAnAoKCQBkAgUBagABCQDNCAIIBQNhY2MCXzIJAKQDAQUGd2hJbml0CAUDYWNjAl8zCAUDYWNjAl80CQBlAggFA2FjYwJfNQUJY3VyT3JkVXNkCAUDYWNjAl82CAUDYWNjAl83BQZpc1Byb2QJAGQCCAUDYWNjAl85CQEIdG9Wb2x1bWUDBQZ3aEluaXQFDlBST0RVQ1RQS0dTSVpFBQZpc1Byb2QIBQNhY2MDXzEwCQCcCgoJAGQCBQFqAAEJAM0IAggFA2FjYwJfMgkApAMBCQBlAgUGd2hJbml0BQhjdXJPcmRBbQgFA2FjYwJfMwgFA2FjYwJfNAgFA2FjYwJfNQgFA2FjYwJfNggFA2FjYwJfNwUGaXNQcm9kCQBkAggFA2FjYwJfOQkBCHRvVm9sdW1lAwkAZQIFBndoSW5pdAUIY3VyT3JkQW0FDlBST0RVQ1RQS0dTSVpFBQZpc1Byb2QIBQNhY2MDXzEwAwkAZgIFCG5ld09yZEFtAAADCQBmAgAABQhjdXJPcmRBbQkAnAoKCQBkAgUBagABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZQIFBndoSW5pdAUIY3VyT3JkQW0JAGQCCAUDYWNjAl8zBQluZXdPcmRWb2wIBQNhY2MCXzQJAGQCCAUDYWNjAl81BQluZXdPcmRVc2QIBQNhY2MCXzYIBQNhY2MCXzcFBmlzUHJvZAkBCHRvVm9sdW1lAwkAZQIFBndoSW5pdAUIY3VyT3JkQW0FDlBST0RVQ1RQS0dTSVpFBQZpc1Byb2QIBQNhY2MDXzEwCQCcCgoJAGQCBQFqAAEJAM0IAggFA2FjYwJfMgkApAMBBQZ3aEluaXQJAGQCCAUDYWNjAl8zBQluZXdPcmRWb2wIBQNhY2MCXzQJAGUCCQBkAggFA2FjYwJfNQUJbmV3T3JkVXNkBQljdXJPcmRVc2QIBQNhY2MCXzYIBQNhY2MCXzcFBmlzUHJvZAkBCHRvVm9sdW1lAwUGd2hJbml0BQ5QUk9EVUNUUEtHU0laRQUGaXNQcm9kCAUDYWNjA18xMAMJAGYCAAAFCGN1ck9yZEFtBAZhbURpZmYJAGUCBQhjdXJPcmRBbQUIbmV3T3JkQW0DCQBmAgAACQBlAgUGd2hJbml0BQZhbURpZmYJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAJAKQDAQUGYW1EaWZmAhogZnJvbSB3YXJlaG91c2UsIGJ1dCBvbmx5IAkApAMBBQZ3aEluaXQCCiBhdmFpbGFibGUJAJwKCgkAZAIFAWoAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGUCBQZ3aEluaXQFBmFtRGlmZggFA2FjYwJfMwkAZQIIBQNhY2MCXzQFCW5ld09yZFZvbAgFA2FjYwJfNQgFA2FjYwJfNggFA2FjYwJfNwUGaXNQcm9kCQEIdG9Wb2x1bWUDCQBlAgUGd2hJbml0BQZhbURpZmYFDlBST0RVQ1RQS0dTSVpFBQZpc1Byb2QIBQNhY2MDXzEwAwkAZgIAAAkAZAIFBndoSW5pdAUIbmV3T3JkQW0JAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAJAKQDAQkBAS0BBQhuZXdPcmRBbQIaIGZyb20gd2FyZWhvdXNlLCBidXQgb25seSAJAKQDAQUGd2hJbml0AgogYXZhaWxhYmxlCQCcCgoJAGQCBQFqAAEJAM0IAggFA2FjYwJfMgkApAMBCQBkAgUGd2hJbml0BQhuZXdPcmRBbQgFA2FjYwJfMwkAZQIIBQNhY2MCXzQFCW5ld09yZFZvbAkAZQIIBQNhY2MCXzUFCWN1ck9yZFVzZAgFA2FjYwJfNggFA2FjYwJfNwUGaXNQcm9kCQEIdG9Wb2x1bWUDCQBkAgUGd2hJbml0BQhuZXdPcmRBbQUOUFJPRFVDVFBLR1NJWkUFBmlzUHJvZAgFA2FjYwNfMTABC3NldEludGVybmFsAwljdXJyZW50V2gKY3VycmVudE9yZAZuZXdPcmQECWN1cnJXaFJlcwkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8ECWN1cnJXaE1hdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhNYXQCAV8ECmN1cnJXaFByb2QDCQAAAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAIABQNuaWwJALwJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAIBXwQNY3VycmVudE9yZFJlcwkAtQkCCQCRAwIFCmN1cnJlbnRPcmQFCW9yZElkeFJlcwIBXwQNY3VycmVudE9yZE1hdAkAtQkCCQCRAwIFCmN1cnJlbnRPcmQFCW9yZElkeE1hdAIBXwQOY3VycmVudE9yZFByb2QDCQAAAgkAkQMCBQpjdXJyZW50T3JkBQpvcmRJZHhQcm9kAgAFA25pbAkAvAkCCQCRAwIFCmN1cnJlbnRPcmQFCm9yZElkeFByb2QCAV8DCQECIT0CCQCQAwEFBm5ld09yZAADCQACAQIzbmV3T3JkZXJTdHIgc2hvdWxkIGNvbnRhaW4gZXhhY3RseSAyICc6JyBzZXBhcmF0b3JzBAhyZXNQYXJ0cwkAtQkCCQCRAwIFBm5ld09yZAAAAgFfBAhtYXRQYXJ0cwkAtQkCCQCRAwIFBm5ld09yZAABAgFfBAlwcm9kUGFydHMDCQAAAgkAkQMCBQZuZXdPcmQAAgIABQNuaWwJALwJAgkAkQMCBQZuZXdPcmQAAgIBXwMJAQIhPQIJAJADAQUIcmVzUGFydHMFBk5VTVJFUwkAAgECIEFsbCA2IHJlc291cmNlcyBzaG91bGQgYmUgcGFzc2VkAwkBAiE9AgkAkAMBBQhtYXRQYXJ0cwUGTlVNUkVTCQACAQIgQWxsIDYgbWF0ZXJpYWxzIHNob3VsZCBiZSBwYXNzZWQEAXIKAAIkbAUIcmVzVHlwZXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCcCgoAAAUDbmlsAAAAAAAABQljdXJyV2hSZXMFDWN1cnJlbnRPcmRSZXMHAAAFCHJlc1BhcnRzCgEFJGYwXzECAiRhAiRpAwkA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XzgFAWoAAAQGd2hJbml0AwkAZgIJAJADAQgFA2FjYwJfOQUBagkBDXBhcnNlSW50VmFsdWUBCQCRAwIIBQNhY2MCXzkFAWoAAAQJd2hPcmRJbml0AwkAZgIJAJADAQgFA2FjYwNfMTAFAWoJAJEDAggFA2FjYwNfMTAFAWoCAzBAMAQKd2hPcmRQYXJ0cwkAtQkCBQl3aE9yZEluaXQCAUAEB3doT3JkQW0JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQp3aE9yZFBhcnRzAAAEB3doT3JkUHIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQp3aE9yZFBhcnRzAAEDAwkBAiE9AgUHYnBPcmRBbQAACQECIT0CBQdicE9yZFByBQd3aE9yZFByBwkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgpQcmljZXMgb2YgCQCRAwIIBQNhY2MDXzExBQFqAhcgZG9uJ3QgbWF0Y2ghIFdIIHByaWNlPQkApAMBBQd3aE9yZFByAg0sIHlvdXIgcHJpY2U9CQCkAwEFB2JwT3JkUHIECHdoT3JkVXNkAwUGaXNQcm9kCQBoAgUHd2hPcmRBbQUHd2hPcmRQcgkAawMFB3doT3JkQW0FB3doT3JkUHIFBU1VTFQ4BAhkZWx0YVZvbAkBCHRvVm9sdW1lAwUHYnBPcmRBbQUOUFJPRFVDVFBLR1NJWkUFBmlzUHJvZAMJAAACBQdicE9yZEFtAAAJAJ8KDQkAzQgCCAUDYWNjAl8xCQCkAwEFBndoSW5pdAkAzQgCCAUDYWNjAl8yBQl3aE9yZEluaXQJAM0IAggFA2FjYwJfMwkApAMBBQZicEluaXQIBQNhY2MCXzQIBQNhY2MCXzUIBQNhY2MCXzYJAGQCCAUDYWNjAl83AAEIBQNhY2MCXzgIBQNhY2MCXzkIBQNhY2MDXzEwCAUDYWNjA18xMQUGaXNQcm9kCAUDYWNjA18xMwMJAGYCBQdicE9yZEFtAAADCQBmAgAABQd3aE9yZEFtAwkAZgIFB2JwT3JkQW0JAQEtAQUHd2hPcmRBbQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg9BdHRlbXB0IHRvIGJ1eSAJAKQDAQUHYnBPcmRBbQIEIG9mIAkAkQMCCAUDYWNjA18xMQUBagIbLCBidXQgd2FyZWhvdXNlIG9ubHkgc2VsbHMgCQCkAwEJAQEtAQUHd2hPcmRBbQkAnwoNCQDNCAIIBQNhY2MCXzEJAKQDAQUGd2hJbml0CQDNCAIIBQNhY2MCXzIJAKwCAgkArAICCQCkAwEJAGQCBQd3aE9yZEFtBQdicE9yZEFtAgFACQCkAwEFB3doT3JkUHIJAM0IAggFA2FjYwJfMwkApAMBCQBkAgUGYnBJbml0BQdicE9yZEFtCQBkAggFA2FjYwJfNAUIZGVsdGFWb2wIBQNhY2MCXzUJAGQCCAUDYWNjAl82BQhicE9yZFVzZAkAZAIIBQNhY2MCXzcAAQgFA2FjYwJfOAgFA2FjYwJfOQgFA2FjYwNfMTAIBQNhY2MDXzExBQZpc1Byb2QJAGQCCAUDYWNjA18xMwMFBmlzUHJvZAkAaAIFB2JwT3JkQW0FBU1VTFQ4BQdicE9yZEFtCQACAQkArAICCQCsAgICD0F0dGVtcHQgdG8gYnV5IAkAkQMCCAUDYWNjA18xMQUBagIgIHdoaWxlIHdhcmVob3VzZSBkb2Vzbid0IHNlbGwgaXQDCQBmAgUHd2hPcmRBbQAAAwkAZgIJAQEtAQUHYnBPcmRBbQUHd2hPcmRBbQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHNlbGwgCQCkAwEJAQEtAQUHYnBPcmRBbQIEIG9mIAkAkQMCCAUDYWNjA18xMQUBagIaLCBidXQgd2FyZWhvdXNlIG9ubHkgYnV5cyAJAKQDAQUHd2hPcmRBbQMJAGYCCQEBLQEFB2JwT3JkQW0FBmJwSW5pdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHNlbGwgCQCkAwEJAQEtAQUHYnBPcmRBbQIULCBidXQgeW91IG9ubHkgaGF2ZSAJAKQDAQUGYnBJbml0AgQgb2YgCQCRAwIIBQNhY2MDXzExBQFqCQCfCg0JAM0IAggFA2FjYwJfMQkApAMBCQBlAgUGd2hJbml0BQdicE9yZEFtCQDNCAIIBQNhY2MCXzIJAKwCAgkArAICCQCkAwEJAGQCBQd3aE9yZEFtBQdicE9yZEFtAgFACQCkAwEFB3doT3JkUHIJAM0IAggFA2FjYwJfMwkApAMBCQBkAgUGYnBJbml0BQdicE9yZEFtCQBlAggFA2FjYwJfNAUIZGVsdGFWb2wJAGUCCAUDYWNjAl81BQhicE9yZFVzZAgFA2FjYwJfNgkAZAIIBQNhY2MCXzcAAQgFA2FjYwJfOAgFA2FjYwJfOQgFA2FjYwNfMTAIBQNhY2MDXzExBQZpc1Byb2QJAGUCCAUDYWNjA18xMwMFBmlzUHJvZAkAaAIFB2JwT3JkQW0FBU1VTFQ4BQdicE9yZEFtCQACAQkArAICCQCsAgICEEF0dGVtcHQgdG8gc2VsbCAJAJEDAggFA2FjYwNfMTEFAWoCHyB3aGlsZSB3YXJlaG91c2UgZG9lc24ndCBidXkgaXQBE3NlbGxSZXNvdXJjZXNDb21tb24EB3Jlc0xpc3QMZmFjdG9yeUxvY0lkB2Ftb3VudHMJbWluUHJpY2VzCgEFYWRkZXICA2FjYwFqAwkAZgIJAJEDAgUHYW1vdW50cwUBagkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3Jlc0xpc3QFAWoJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIJWW91IGhhdmUgCQCRAwIFB3Jlc0xpc3QFAWoCBCBvZiAJAJEDAgUIcmVzVHlwZXMFAWoCFCwgYnV0IHRyaWVkIHRvIHNlbGwgCQCkAwEJAJEDAgUHYW1vdW50cwUBagMJAGYCAAAJAJEDAgUHYW1vdW50cwUBagkAAgEJAKwCAgkArAICCQCsAgICJVlvdSB0cmllZCB0byBzZWxsIG5lZ2F0aXZlIGFtb3VudCBvZiAJAJEDAgUIcmVzVHlwZXMFAWoCAjogCQCkAwEJAJEDAgUHYW1vdW50cwUBagMJAGYCCQCRAwIFB2Ftb3VudHMFAWoAAAQBYgkBDHNlbGxJbnRlcm5hbAQFDGZhY3RvcnlMb2NJZAUBagkAkQMCBQdhbW91bnRzBQFqCQCRAwIFCW1pblByaWNlcwUBagkAlgoECQDNCAIIBQNhY2MCXzEIBQFiAl8xCQDNCAIIBQNhY2MCXzIJAKQDAQkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdyZXNMaXN0BQFqCQCRAwIFB2Ftb3VudHMFAWoJAGQCCAUDYWNjAl8zCAUBYgJfMgkAZAIIBQNhY2MCXzQJAJEDAgUHYW1vdW50cwUBagkAlgoECAUDYWNj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aGFuZ2VyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGARBzaG9wMnVzZXJBY3Rpb25zAw11c2RXaDJCcFNhbGRvCmNhbGxlckFkZHILcmVjZWl2ZWRGZWUDCQBmAgUNdXNkV2gyQnBTYWxkbwAABAt1c2RXaDJCcEZlZQkAawMFDXVzZFdoMkJwU2FsZG8FCkFVQ1RJT05GRUUFBU1VTFQ2AwkAZwIFC3JlY2VpdmVkRmVlCQBlAgUNdXNkV2gyQnBTYWxkbwkAaAIAAwULdXNkV2gyQnBGZWUJAAIBCQCsAgICK1RoaXMgdHJhZGUgZG9lcyBub3QgY292ZXIgZGVsaXZlcnkgY29zdCBvZiAJAQpmaXhlZFBvaW50AgULcmVjZWl2ZWRGZWUABgQIcmVmQnlLZXkJAQ9rZXlBZGRyZXNzUmVmQnkBBQpjYWxsZXJBZGRyBAVyZWZCeQkAnQgCBQ9zdGFraW5nQ29udHJhY3QFCHJlZkJ5S2V5BAZjYWxsZXIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCmNhbGxlckFkZHIJAM0IAgkAzQgCAwkBCWlzRGVmaW5lZAEFBXJlZkJ5CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQV2YWx1ZQEFBXJlZkJ5BQt1c2RXaDJCcEZlZQULdXNkdEFzc2V0SWQFA25pbAUDbmlsCQEOU2NyaXB0VHJhbnNmZXIDBQZjYWxsZXIJAGUCCQBlAgUNdXNkV2gyQnBTYWxkbwkAaAIAAwULdXNkV2gyQnBGZWUFC3JlY2VpdmVkRmVlBQt1c2R0QXNzZXRJZAkBDlNjcmlwdFRyYW5zZmVyAwUMcmVzdENvbnRyYWN0BQt1c2RXaDJCcEZlZQULdXNkdEFzc2V0SWQFA25pbAEQdXNlcjJzaG9wQWN0aW9ucwQNdXNkQnAyV2hTYWxkbwRwbXRzDXNob3BMYW5kT3duZXIIc3BlbnRGZWUDCQBmAgUNdXNkQnAyV2hTYWxkbwAAAwkBAiE9AgkAkAMBBQRwbXRzAAEJAAIBAiJleGFjdGx5IDEgcGF5bWVudCBtdXN0IGJlIGF0dGFjaGVkBANwbXQJAJEDAgUEcG10cwAABANhbXQIBQNwbXQGYW1vdW50AwMJAQEhAQkBCWlzRGVmaW5lZAEIBQNwbXQHYXNzZXRJZAYJAQIhPQIJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhNVU0RUIHBheW1lbnRzIG9ubHkhBBB1c2R0U3BlbnRXaXRoRmVlCQBkAgUNdXNkQnAyV2hTYWxkbwUIc3BlbnRGZWUDCQECIT0CBQNhbXQFEHVzZHRTcGVudFdpdGhGZWUJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAh9JbnN1ZmZpY2llbnQgcGF5bWVudCEgQXR0YWNoZWQ9CQEKZml4ZWRQb2ludAIFA2FtdAAGAgssIHJlcXVpcmVkPQkBCmZpeGVkUG9pbnQCBQ11c2RCcDJXaFNhbGRvAAYCASsJAQpmaXhlZFBvaW50AgUIc3BlbnRGZWUABgIOKGRlbGl2ZXJ5IGZlZSkDCQBmAgUOTUlOU0hPUFBBWU1FTlQFDXVzZEJwMldoU2FsZG8JAAIBCQCsAgICEk1pbiBzaG9wIHRyYWRlIGlzIAkBCmZpeGVkUG9pbnQCBQ5NSU5TSE9QUEFZTUVOVAAGBAt1c2RCcDJXaEZlZQkAawMFDXVzZEJwMldoU2FsZG8FCkFVQ1RJT05GRUUFBU1VTFQ2BAhyZWZCeUtleQkBD2tleUFkZHJlc3NSZWZCeQEFDXNob3BMYW5kT3duZXIEBXJlZkJ5CQCdCAIFD3N0YWtpbmdDb250cmFjdAUIcmVmQnlLZXkJAM0IAgkAzQgCAwkBCWlzRGVmaW5lZAEFBXJlZkJ5CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQV2YWx1ZQEFBXJlZkJ5BQt1c2RCcDJXaEZlZQULdXNkdEFzc2V0SWQFA25pbAUDbmlsCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQ1zaG9wTGFuZE93bmVyCQBlAgUNdXNkQnAyV2hTYWxkbwkAaAIAAwULdXNkQnAyV2hGZWUFC3VzZHRBc3NldElkCQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFC3VzZEJwMldoRmVlBQt1c2R0QXNzZXRJZAMJAQIhPQIJAJADAQUEcG10cwAACQACAQISTm8gcGF5bWVudHMgbmVlZGVkBQNuaWwBFWFjY2VwdFNob3BPcmRlckNvbW1vbgYPc2hvcExhbmRBc3NldElkCmNhbGxlckFkZHIKYnBPcmRlclN0cglicFJlc0xpc3QJYnBNYXRMaXN0CmJwUHJvZExpc3QECWxhbmRBc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFD3Nob3BMYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFD3Nob3BMYW5kQXNzZXRJZAkAAgEJAKwCAgkArAICAgRORlQgCAUJbGFuZEFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBA1zaG9wTGFuZE93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQUPc2hvcExhbmRBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFCWxhbmRBc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQAAAgUNc2hvcExhbmRPd25lcgUKY2FsbGVyQWRkcgkAAgECHllvdSBjYW5ub3QgdHJhZGUgd2l0aCB5b3Vyc2VsZgQMYnBPcmRlclBhcnRzCQC8CQIFCmJwT3JkZXJTdHICAToDCQECIT0CCQCQAwEFDGJwT3JkZXJQYXJ0cwADCQACAQIyYnBPcmRlclN0ciBzaG91bGQgY29udGFpbiBleGFjdGx5IDIgJzonIHNlcGFyYXRvcnMECGJwT3JkUmVzCQC1CQIJAJEDAgUMYnBPcmRlclBhcnRzAAACAV8ECGJwT3JkTWF0CQC1CQIJAJEDAgUMYnBPcmRlclBhcnRzAAECAV8ECWJwT3JkUHJvZAMJAAACCQCRAwIFDGJwT3JkZXJQYXJ0cwACAgAFA25pbAkAvAkCCQCRAwIFDGJwT3JkZXJQYXJ0cwACAgFfAwkBAiE9AgkAkAMBBQhicE9yZFJlcwUGTlVNUkVTCQACAQIgQWxsIDYgcmVzb3VyY2VzIHNob3VsZCBiZSBwYXNzZWQDCQECIT0CCQCQAwEFCGJwT3JkTWF0BQZOVU1SRVMJAAIBAiBBbGwgNiBtYXRlcmlhbHMgc2hvdWxkIGJlIHBhc3NlZAQCd2gJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0AhRnZXRXYXJlaG91c2VSRUFET05MWQkAzAgCBQ9zaG9wTGFuZEFzc2V0SWQFA25pbAUDbmlsBAljdXJyZW50V2gJALwJAgUCd2gCAToECWN1cnJXaFJlcwkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8ECWN1cnJXaE1hdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhNYXQCAV8ECmN1cnJXaFByb2QDCQAAAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAIABQNuaWwJALwJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAIBXwQPY3VycldoTG9ja2VkVm9sCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUAgFfBQl2b2xMb2NrZWQEBm9yZEtleQkBDmtleU9yZGVyQnlMYW5kAQUPc2hvcExhbmRBc3NldElkBAV3aE9yZAkBCGdldE9yZGVyAQUGb3JkS2V5BAh3aE9yZFJlcwkAtQkCCQCRAwIFBXdoT3JkBQlvcmRJZHhSZXMCAV8ECHdoT3JkTWF0CQC1CQIJAJEDAgUFd2hPcmQFCW9yZElkeE1hdAIBXwQJd2hPcmRQcm9kAwkAAAIJAJEDAgUFd2hPcmQFCm9yZElkeFByb2QCAAUDbmlsCQC8CQIJAJEDAgUFd2hPcmQFCm9yZElkeFByb2QCAV8EAXIKAAIkbAUIYnBPcmRSZXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCfCg0FA25pbAUDbmlsBQNuaWwAAAAAAAAAAAUJYnBSZXNMaXN0BQljdXJyV2hSZXMFCHdoT3JkUmVzBQhyZXNUeXBlcwcAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEMYWNj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A25pbAIBOgQGd2hTYXZlCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAINc2F2ZVdhcmVob3VzZQkAzAgCBQV3aFN0cgkAzAgCBQ9zaG9wTGFuZEFzc2V0SWQFA25pbAUDbmlsBA5hY2NTdGF0c1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUFjY1N0YXRzCQDMCAIFDXNob3BMYW5kT3duZXIJAMwIAgkAawMFBnhwU2hvcAgFAXADXzEzBQVNVUxUOAUDbmlsBQNuaWwJAJwKCgkBC1N0cmluZ0VudHJ5AgUGb3JkS2V5BQtuZXdXaE9yZFN0cggFAXICXzMIBQFtAl8zCAUBcAJfMwgFAXACXzUIBQFwAl82CAUBcANfMTMFDXNob3BMYW5kT3duZXIFBndoU2F2ZQUOYWNjU3RhdHNSZXN1bHQBGnNlbGxSZXNvdXJjZXNXb3JsZEludGVybmFsAQZhbW91bnQEBm9uZVJlcwkAaQIFBmFtb3VudAAeBBFvbmVGYWN0b3J5QW1vdW50cwkAzAgCBQZvbmVSZXMJAMwIAgUGb25lUmVzCQDMCAIFBm9uZVJlcwkAzAgCBQZvbmVSZXMJAMwIAgUGb25lUmVzCQDMCAIFBm9uZVJlcwUDbmlsBAFzCQCkAwEFBm9uZVJlcwQHcmVzTGlzdAkAzAgCBQFzCQDMCAIFAXMJAMwIAgUBcwkAzAgCBQFzCQDMCAIFAXMJAMwIAgUBcwUDbmlsBAltaW5QcmljZXMJAMwIAgAACQDMCAIAAAkAzAgCAAAJAMwIAgAACQDMCAIAAAkAzAgCAAAFA25pbAoBCm9uZUZhY3RvcnkCA2FjYwljb250aW5lbnQEAXgJARNzZWxsUmVzb3VyY2VzQ29tbW9uBAUHcmVzTGlzdAUJY29udGluZW50BRFvbmVGYWN0b3J5QW1vdW50cwUJbWluUHJpY2VzCQCVCgMJAM4IAggFA2FjYwJfMQgFAXgCXzEJAGQCCAUDYWNjAl8yCAUBeAJfMwkAZAIIBQNhY2MCXzMIBQF4Al80BA0kdDAyNTI3MDI1MzYwCgACJGwFCmNvbnRpbmVudHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCVCgMFA25pbAAAAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCm9uZUZhY3RvcnkCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDUJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFBA5mYWN0b3J5QWN0aW9ucwgFDSR0MDI1MjcwMjUzNjACXzEEDHVzZHRSZWNlaXZlZAgFDSR0MDI1MjcwMjUzNjACXzIECHRvdGFsUmVzCAUNJHQwMjUyNzAyNTM2MAJfMwQDZmVlCQBrAwUMdXNkdFJlY2VpdmVkBQxERUxJVkVSWV9GRUUFBU1VTFQ2BBBhY3Rpdml0aWVzQW1vdW50CQBpAgUMdXNkdFJlY2VpdmVkAGQECHVzZHRMZWZ0CQBlAgkAZQIFDHVzZHRSZWNlaXZlZAUQYWN0aXZpdGllc0Ftb3VudAUDZmVlCQCXCgUFDmZhY3RvcnlBY3Rpb25zBQh1c2R0TGVmdAUDZmVlBRBhY3Rpdml0aWVzQW1vdW50BQh0b3RhbFJlcxYBaQEacmVjYWxjTG9ja2VkVm9sdW1lUkVBRE9OTFkCC2xhbmRBc3NldElkAndoBApjdXJyZW50T3JkCQEIZ2V0T3JkZXIBCQEOa2V5T3JkZXJCeUxhbmQBBQtsYW5kQXNzZXRJZAQBegkBC3NldEludGVybmFsAwUCd2gFCmN1cnJlbnRPcmQFCmN1cnJlbnRPcmQJAJQKAgUDbmlsCQBkAggFAXoCXzQIBQF6Al81AWkBDWNvbnN0cnVjdG9yVjEBCHJlc3RBZGRyAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRUGVybWlzc2lvbiBkZW5pZWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDmtleVJlc3RBZGRyZXNzAAUIcmVzdEFkZHIFA25pbAFpAQ1zZWxsUmVzb3VyY2VzAgdhbW91bnRzCW1pblByaWNlcwQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAMJAAACBQxwcm9sb2dSZXN1bHQFDHByb2xvZ1Jlc3VsdAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIqc2VsbFJlc291cmNlcyBkb2Vzbid0IHJlcXVpcmUgYW55IHBheW1lbnRzBAtjdXJMb2NhdGlvbgkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04CAV8DCQECIT0CCQCRAwIFC2N1ckxvY2F0aW9uBQpsb2NJZHhUeXBlAgFGCQACAQkArAICAi1EdWNrIGxvY2F0aW9uIHR5cGUgc2hvdWxkIGJlIEZhY3RvcnksIGJ1dCBpcyAJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQHcmVzTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwIBXwQNJHQwMjY4MTUyNjk0MQkBE3NlbGxSZXNvdXJjZXNDb21tb24EBQdyZXNMaXN0CQCRAwIFC2N1ckxvY2F0aW9uBQhsb2NJZHhJZAUHYW1vdW50cwUJbWluUHJpY2VzBA5mYWN0b3J5QWN0aW9ucwgFDSR0MDI2ODE1MjY5NDECXzEEBm5ld1JlcwgFDSR0MDI2ODE1MjY5NDECXzIEDHVzZHRSZWNlaXZlZAgFDSR0MDI2ODE1MjY5NDECXzMECHRvdGFsUmVzCAUNJHQwMjY4MTUyNjk0MQJfNAQQYWN0aXZpdGllc0Ftb3VudAkAaQIFDHVzZHRSZWNlaXZlZABkBAduZXdQYWNrCQC6CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQC5CQIFBm5ld1JlcwIBXwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgQOYmFja3BhY2tSZXN1bHQJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVCYWNrcGFjawkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQduZXdQYWNrBQNuaWwFA25pbAQLc3RhdHNSZXN1bHQJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag91cGRhdGVEdWNrU3RhdHMJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgkAawMFB3hwVHJhZGUFCHRvdGFsUmVzBQVNVUxUOAUDbmlsBQNuaWwJAJQKAgkAzQgCCQDNCAIFDmZhY3RvcnlBY3Rpb25zCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIJAGUCBQx1c2R0UmVjZWl2ZWQFEGFjdGl2aXRpZXNBbW91bnQFC3VzZHRBc3NldElkCQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFEGFjdGl2aXRpZXNBbW91bnQFC3VzZHRBc3NldElkCQCVCgMFDmJhY2twYWNrUmVzdWx0BQxwcm9sb2dSZXN1bHQFC3N0YXRzUmVzdWx0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEnNlbGxSZXNvdXJjZXNXb3JsZAIEYWRkcgZhbW91bnQDCQECIT0CCAUBaQZjYWxsZXIFDWFjcmVzQ29udHJhY3QJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAQNJHQwMjc3MzMyNzg5MAkBGnNlbGxSZXNvdXJjZXNXb3JsZEludGVybmFsAQUGYW1vdW50BA5mYWN0b3J5QWN0aW9ucwgFDSR0MDI3NzMzMjc4OTACXzEECHVzZHRMZWZ0CAUNJHQwMjc3MzMyNzg5MAJfMgQDZmVlCAUNJHQwMjc3MzMyNzg5MAJfMwQQYWN0aXZpdGllc0Ftb3VudAgFDSR0MDI3NzMzMjc4OTACXzQECHRvdGFsUmVzCAUNJHQwMjc3MzMyNzg5MAJfNQMJAGcCAAAFCHVzZHRMZWZ0CQACAQkArAICAitUaGlzIHRyYWRlIGRvZXMgbm90IGNvdmVyIGRlbGl2ZXJ5IGNvc3Qgb2YgCQEKZml4ZWRQb2ludAIFA2ZlZQAGBAtzdGF0c1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUFjY1N0YXRzCQDMCAIFBGFkZHIJAMwIAgkAawMFB3hwVHJhZGUFCHRvdGFsUmVzBQVNVUxUOAUDbmlsBQNuaWwJAJQKAgkAzQgCCQDNCAIJAM0IAgUOZmFjdG9yeUFjdGlvbnMJAQxJbnRlZ2VyRW50cnkCBQ9kZWxpdmVyeUZ1bmRLZXkJAGQCCQELdmFsdWVPckVsc2UCCQCfCAEFD2RlbGl2ZXJ5RnVuZEtleQAABQNmZWUJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAUQYWN0aXZpdGllc0Ftb3VudAULdXNkdEFzc2V0SWQJAQ5TY3JpcHRUcmFuc2ZlcgMFEmludmVzdEZ1bmRDb250cmFjdAUIdXNkdExlZnQFC3VzZHRBc3NldElkCQCUCgIFCHVzZHRMZWZ0BQtzdGF0c1Jlc3VsdAFpARpzZWxsUmVzb3VyY2VzV29ybGRSRUFET05MWQEGYW1vdW50BAh1c2R0TGVmdAgJARpzZWxsUmVzb3VyY2VzV29ybGRJbnRlcm5hbAEFBmFtb3VudAJfMgkAlAoCBQNuaWwFCHVzZHRMZWZ0AWkBGXNlbGxSZXNvdXJjZXNEdWNrRGVsaXZlcnkDB2Ftb3VudHMJbWluUHJpY2VzEGZhY3RvcnlDb250aW5lbnQDCQEBIQEFEUtTX0FMTE9XX0RFTElWRVJZCQACAQIfRGVsaXZlcnkgZmVhdHVyZSBpcyB0dXJuZWQgb2ZmIQQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAMJAAACBQxwcm9sb2dSZXN1bHQFDHByb2xvZ1Jlc3VsdAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIqc2VsbFJlc291cmNlcyBkb2Vzbid0IHJlcXVpcmUgYW55IHBheW1lbnRzBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEB3Jlc0xpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMCAV8EDSR0MDI5MTI2MjkyNDcJARNzZWxsUmVzb3VyY2VzQ29tbW9uBAUHcmVzTGlzdAUQZmFjdG9yeUNvbnRpbmVudAUHYW1vdW50cwUJbWluUHJpY2VzBA5mYWN0b3J5QWN0aW9ucwgFDSR0MDI5MTI2MjkyNDcCXzEEBm5ld1JlcwgFDSR0MDI5MTI2MjkyNDcCXzIEDHVzZHRSZWNlaXZlZAgFDSR0MDI5MTI2MjkyNDcCXzMECHRvdGFsUmVzCAUNJHQwMjkxMjYyOTI0NwJfNAQHbmV3UGFjawkAugkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAuQkCBQZuZXdSZXMCAV8JAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwCAToEDmJhY2twYWNrUmVzdWx0CQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQmFja3BhY2sJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUHbmV3UGFjawUDbmlsBQNuaWwEC3N0YXRzUmVzdWx0CQEFYXNJbnQBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIPdXBkYXRlRHVja1N0YXRzCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIJAGsDBQd4cFRyYWRlBQh0b3RhbFJlcwUFTVVMVDgFA25pbAUDbmlsBAdmZWVQYXJ0CQBrAwUMdXNkdFJlY2VpdmVkBQxERUxJVkVSWV9GRUUFBU1VTFQ2BANmZWUDCQBmAgUVTUlOX1VTRFRfRkVFX0RFTElWRVJZBQdmZWVQYXJ0BRVNSU5fVVNEVF9GRUVfREVMSVZFUlkFB2ZlZVBhcnQEEGFjdGl2aXRpZXNBbW91bnQJAGkCBQx1c2R0UmVjZWl2ZWQAZAMJAGcCBQNmZWUJAGUCBQx1c2R0UmVjZWl2ZWQFEGFjdGl2aXRpZXNBbW91bnQJAAIBCQCsAgICK1RoaXMgdHJhZGUgZG9lcyBub3QgY292ZXIgZGVsaXZlcnkgY29zdCBvZiAJAQpmaXhlZFBvaW50AgUDZmVlAAYECWZ1bmRUb3RhbAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ9kZWxpdmVyeUZ1bmRLZXkAAAkAlAoCCQDNCAIJAM0IAgkAzQgCBQ5mYWN0b3J5QWN0aW9ucwkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQBlAgkAZQIFDHVzZHRSZWNlaXZlZAUQYWN0aXZpdGllc0Ftb3VudAUDZmVlBQt1c2R0QXNzZXRJZAkBDEludGVnZXJFbnRyeQIFD2RlbGl2ZXJ5RnVuZEtleQkAZAIFCWZ1bmRUb3RhbAUDZmVlCQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFEGFjdGl2aXRpZXNBbW91bnQFC3VzZHRBc3NldElkCQCVCgMFDmJhY2twYWNrUmVzdWx0BQxwcm9sb2dSZXN1bHQFC3N0YXRzUmVzdWx0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBGXNlbGxSZXNvdXJjZXNMYW5kRGVsaXZlcnkEB2Ftb3VudHMJbWluUHJpY2VzC2xhbmRBc3NldElkEGZhY3RvcnlDb250aW5lbnQDCQEBIQEFEUtTX0FMTE9XX0RFTElWRVJZCQACAQIfRGVsaXZlcnkgZmVhdHVyZSBpcyB0dXJuZWQgb2ZmIQQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAMJAAACBQxwcm9sb2dSZXN1bHQFDHByb2xvZ1Jlc3VsdAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECKnNlbGxSZXNvdXJjZXMgZG9lc24ndCByZXF1aXJlIGFueSBwYXltZW50cwQEdXNlcggFAWkGY2FsbGVyBARhZGRyCQClCAEFBHVzZXIEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMEAndoCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIUZ2V0V2FyZWhvdXNlUkVBRE9OTFkJAMwIAgULbGFuZEFzc2V0SWQFA25pbAUDbmlsBAljdXJyZW50V2gJALwJAgUCd2gCAToEB3Jlc0xpc3QJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfBA0kdDAzMTI3NzMxMzk4CQETc2VsbFJlc291cmNlc0NvbW1vbgQFB3Jlc0xpc3QFEGZhY3RvcnlDb250aW5lbnQFB2Ftb3VudHMFCW1pblByaWNlcwQOZmFjdG9yeUFjdGlvbnMIBQ0kdDAzMTI3NzMxMzk4Al8xBAZuZXdSZXMIBQ0kdDAzMTI3NzMxMzk4Al8yBAx1c2R0UmVjZWl2ZWQIBQ0kdDAzMTI3NzMxMzk4Al8zBAh0b3RhbFJlcwgFDSR0MDMxMjc3MzEzOTgCXzQEBXdoU3RyCQC6CQIJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIJALkJAgUGbmV3UmVzAgFfCQDMCAIJAJEDAgUJY3VycmVudFdoBQh3aElkeE1hdAkAzAgCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kCQDMCAIJAJEDAgUJY3VycmVudFdoBQl3aElkeExPRlQFA25pbAIBOgQGd2hTYXZlCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAINc2F2ZVdhcmVob3VzZQkAzAgCBQV3aFN0cgkAzAgCBQtsYW5kQXNzZXRJZAUDbmlsBQNuaWwEC3N0YXRzUmVzdWx0CQEFYXNJbnQBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQWNjU3RhdHMJAMwIAgUEYWRkcgkAzAgCCQBrAwUHeHBUcmFkZQUIdG90YWxSZXMFBU1VTFQ4BQNuaWwFA25pbAQHZmVlUGFydAkAawMFDHVzZHRSZWNlaXZlZAUMREVMSVZFUllfRkVFBQVNVUxUNgQDZmVlAwkAZgIFFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQUHZmVlUGFydAUVTUlOX1VTRFRfRkVFX0RFTElWRVJZBQdmZWVQYXJ0BBBhY3Rpdml0aWVzQW1vdW50CQBpAgUMdXNkdFJlY2VpdmVkAGQDCQBnAgUDZmVlCQBlAgUMdXNkdFJlY2VpdmVkBRBhY3Rpdml0aWVzQW1vdW50CQACAQkArAICAitUaGlzIHRyYWRlIGRvZXMgbm90IGNvdmVyIGRlbGl2ZXJ5IGNvc3Qgb2YgCQEKZml4ZWRQb2ludAIFA2ZlZQAGBAlmdW5kVG90YWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUPZGVsaXZlcnlGdW5kS2V5AAAJAJQKAgkAzQgCCQDNCAIJAM0IAgUOZmFjdG9yeUFjdGlvbnMJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkAZQIJAGUCBQx1c2R0UmVjZWl2ZWQFEGFjdGl2aXRpZXNBbW91bnQFA2ZlZQULdXNkdEFzc2V0SWQJAQxJbnRlZ2VyRW50cnkCBQ9kZWxpdmVyeUZ1bmRLZXkJAGQCBQlmdW5kVG90YWwFA2ZlZQkBDlNjcmlwdFRyYW5zZmVyAwUMcmVzdENvbnRyYWN0BRBhY3Rpdml0aWVzQW1vdW50BQt1c2R0QXNzZXRJZAkAlQoDBQZ3aFNhdmUFDHByb2xvZ1Jlc3VsdAULc3RhdHNSZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEMYnV5TWF0ZXJpYWxzAgdhbW91bnRzCW1heFByaWNlcwQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAMJAAACBQxwcm9sb2dSZXN1bHQFDHByb2xvZ1Jlc3VsdAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQDAwkBASEBCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBgkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEEC2N1ckxvY2F0aW9uCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgIBXwMJAQIhPQIJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUCAUYJAAIBCQCsAgICLUR1Y2sgbG9jYXRpb24gdHlwZSBzaG91bGQgYmUgRmFjdG9yeSwgYnV0IGlzIAkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAdtYXRMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBA0kdDAzMzI2MTMzMzgzCQESYnV5TWF0ZXJpYWxzQ29tbW9uBAUHbWF0TGlzdAkAkQMCBQtjdXJMb2NhdGlvbgUIbG9jSWR4SWQFB2Ftb3VudHMFCW1heFByaWNlcwQOZmFjdG9yeUFjdGlvbnMIBQ0kdDAzMzI2MTMzMzgzAl8xBAZuZXdNYXQIBQ0kdDAzMzI2MTMzMzgzAl8yBAl1c2R0U3BlbnQIBQ0kdDAzMzI2MTMzMzgzAl8zBAh0b3RhbE1hdAgFDSR0MDMzMjYxMzMzODMCXzQDCQBmAgUJdXNkdFNwZW50BQNhbXQJAAIBCQCsAgIJAKwCAgkArAICAh9JbnN1ZmZpY2llbnQgcGF5bWVudCEgQXR0YWNoZWQ9CQEKZml4ZWRQb2ludAIFA2FtdAAGAgssIHJlcXVpcmVkPQkBCmZpeGVkUG9pbnQCBQl1c2R0U3BlbnQABgQHbmV3UGFjawkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgkAuQkCBQZuZXdNYXQCAV8JAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwCAToEDmJhY2twYWNrUmVzdWx0CQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQmFja3BhY2sJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUHbmV3UGFjawUDbmlsBQNuaWwEBHJlc3QDCQBmAgkAZQIFA2FtdAUJdXNkdFNwZW50AAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQBlAgUDYW10BQl1c2R0U3BlbnQFC3VzZHRBc3NldElkBQNuaWwFA25pbAQQYWN0aXZpdGllc0Ftb3VudAkAaQIFCXVzZHRTcGVudABkBAtzdGF0c1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCD3VwZGF0ZUR1Y2tTdGF0cwkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCCQBrAwUHeHBUcmFkZQUIdG90YWxNYXQFBU1VTFQ4BQNuaWwFA25pbAkAlAoCCQDNCAIJAM4IAgUOZmFjdG9yeUFjdGlvbnMFBHJlc3QJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAUQYWN0aXZpdGllc0Ftb3VudAULdXNkdEFzc2V0SWQJAJUKAwUOYmFja3BhY2tSZXN1bHQFDHByb2xvZ1Jlc3VsdAULc3RhdHNSZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEYYnV5TWF0ZXJpYWxzRHVja0RlbGl2ZXJ5AwdhbW91bnRzCW1heFByaWNlcxBmYWN0b3J5Q29udGluZW50AwkBASEBBRFLU19BTExPV19ERUxJVkVSWQkAAgECH0RlbGl2ZXJ5IGZlYXR1cmUgaXMgdHVybmVkIG9mZiEEDHByb2xvZ1Jlc3VsdAkBBnByb2xvZwADCQAAAgUMcHJvbG9nUmVzdWx0BQxwcm9sb2dSZXN1bHQEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABANhbXQIBQNwbXQGYW1vdW50AwMJAQEhAQkBCWlzRGVmaW5lZAEIBQNwbXQHYXNzZXRJZAYJAQIhPQIJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhNVU0RUIHBheW1lbnRzIG9ubHkhBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEB21hdExpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8EDSR0MDM0OTA0MzUwMjEJARJidXlNYXRlcmlhbHNDb21tb24EBQdtYXRMaXN0BRBmYWN0b3J5Q29udGluZW50BQdhbW91bnRzBQltYXhQcmljZXMEDmZhY3RvcnlBY3Rpb25zCAUNJHQwMzQ5MDQzNTAyMQJfMQQGbmV3TWF0CAUNJHQwMzQ5MDQzNTAyMQJfMgQJdXNkdFNwZW50CAUNJHQwMzQ5MDQzNTAyMQJfMwQIdG90YWxNYXQIBQ0kdDAzNDkwNDM1MDIxAl80BAduZXdQYWNrCQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAzAgCCQC5CQIFBm5ld01hdAIBXwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgQOYmFja3BhY2tSZXN1bHQJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVCYWNrcGFjawkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQduZXdQYWNrBQNuaWwFA25pbAQLc3RhdHNSZXN1bHQJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag91cGRhdGVEdWNrU3RhdHMJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgkAawMFB3hwVHJhZGUFCHRvdGFsTWF0BQVNVUxUOAUDbmlsBQNuaWwEB2ZlZVBhcnQJAGsDBQl1c2R0U3BlbnQFDERFTElWRVJZX0ZFRQUFTVVMVDYEA2ZlZQMJAGYCBRVNSU5fVVNEVF9GRUVfREVMSVZFUlkFB2ZlZVBhcnQFFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQUHZmVlUGFydAQQdXNkdFNwZW50V2l0aEZlZQkAZAIFCXVzZHRTcGVudAUDZmVlAwkAZgIFEHVzZHRTcGVudFdpdGhGZWUFA2FtdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICH0luc3VmZmljaWVudCBwYXltZW50ISBBdHRhY2hlZD0JAQpmaXhlZFBvaW50AgUDYW10AAYCCywgcmVxdWlyZWQ9CQEKZml4ZWRQb2ludAIFCXVzZHRTcGVudAAGAgErCQEKZml4ZWRQb2ludAIFA2ZlZQAGAg4oZGVsaXZlcnkgZmVlKQQEcmVzdAMJAGYCCQBlAgUDYW10BRB1c2R0U3BlbnRXaXRoRmVlAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQBlAgUDYW10BRB1c2R0U3BlbnRXaXRoRmVlBQt1c2R0QXNzZXRJZAUDbmlsBQNuaWwEEGFjdGl2aXRpZXNBbW91bnQJAGkCBQl1c2R0U3BlbnQAZAQJZnVuZFRvdGFsCQELdmFsdWVPckVsc2UCCQCfCAEFD2RlbGl2ZXJ5RnVuZEtleQAACQCUCgIJAM0IAgkAzQgCCQDOCAIFDmZhY3RvcnlBY3Rpb25zBQRyZXN0CQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFEGFjdGl2aXRpZXNBbW91bnQFC3VzZHRBc3NldElkCQEMSW50ZWdlckVudHJ5AgUPZGVsaXZlcnlGdW5kS2V5CQBkAgUJZnVuZFRvdGFsBQNmZWUJAJUKAwUOYmFja3BhY2tSZXN1bHQFDHByb2xvZ1Jlc3VsdAULc3RhdHNSZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEYYnV5TWF0ZXJpYWxzTGFuZERlbGl2ZXJ5BAdhbW91bnRzCW1heFByaWNlcwtsYW5kQXNzZXRJZBBmYWN0b3J5Q29udGluZW50AwkBASEBBRFLU19BTExPV19ERUxJVkVSWQkAAgECH0RlbGl2ZXJ5IGZlYXR1cmUgaXMgdHVybmVkIG9mZiEEDHByb2xvZ1Jlc3VsdAkBBnByb2xvZwADCQAAAgUMcHJvbG9nUmVzdWx0BQxwcm9sb2dSZXN1bHQDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAiJleGFjdGx5IDEgcGF5bWVudCBtdXN0IGJlIGF0dGFjaGVkBANwbXQJAJEDAggFAWkIcGF5bWVudHMAAAQDYW10CAUDcG10BmFtb3VudAMDCQEBIQEJAQlpc0RlZmluZWQBCAUDcG10B2Fzc2V0SWQGCQECIT0CCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQITVVNEVCBwYXltZW50cyBvbmx5IQQEdXNlcggFAWkGY2FsbGVyBARhZGRyCQClCAEFBHVzZXIEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMEAndoCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIUZ2V0V2FyZWhvdXNlUkVBRE9OTFkJAMwIAgULbGFuZEFzc2V0SWQFA25pbAUDbmlsBAljdXJyZW50V2gJALwJAgUCd2gCAToEB21hdExpc3QJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0AgFfBA0kdDAzNzMwMjM3NDE5CQESYnV5TWF0ZXJpYWxzQ29tbW9uBAUHbWF0TGlzdAUQZmFjdG9yeUNvbnRpbmVudAUHYW1vdW50cwUJbWF4UHJpY2VzBA5mYWN0b3J5QWN0aW9ucwgFDSR0MDM3MzAyMzc0MTkCXzEEBm5ld01hdAgFDSR0MDM3MzAyMzc0MTkCXzIECXVzZHRTcGVudAgFDSR0MDM3MzAyMzc0MTkCXzMECHRvdGFsTWF0CAUNJHQwMzczMDIzNzQxOQJfNAQFd2hTdHIJALoJAgkAzAgCCQCRAwIFCWN1cnJlbnRXaAULd2hJZHhMZXZlbHMJAMwIAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzCQDMCAIJALkJAgUGbmV3TWF0AgFfCQDMCAIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QJAMwIAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4TE9GVAUDbmlsAgE6BAZ3aFNhdmUJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag1zYXZlV2FyZWhvdXNlCQDMCAIFBXdoU3RyCQDMCAIFC2xhbmRBc3NldElkBQNuaWwFA25pbAQLc3RhdHNSZXN1bHQJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVBY2NTdGF0cwkAzAgCBQRhZGRyCQDMCAIJAGsDBQd4cFRyYWRlBQh0b3RhbE1hdAUFTVVMVDgFA25pbAUDbmlsBAdmZWVQYXJ0CQBrAwUJdXNkdFNwZW50BQxERUxJVkVSWV9GRUUFBU1VTFQ2BANmZWUDCQBmAgUVTUlOX1VTRFRfRkVFX0RFTElWRVJZBQdmZWVQYXJ0BRVNSU5fVVNEVF9GRUVfREVMSVZFUlkFB2ZlZVBhcnQEEHVzZHRTcGVudFdpdGhGZWUJAGQCBQl1c2R0U3BlbnQFA2ZlZQMJAGYCBRB1c2R0U3BlbnRXaXRoRmVlBQNhbXQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAh9JbnN1ZmZpY2llbnQgcGF5bWVudCEgQXR0YWNoZWQ9CQEKZml4ZWRQb2ludAIFA2FtdAAGAgssIHJlcXVpcmVkPQkBCmZpeGVkUG9pbnQCBQl1c2R0U3BlbnQABgIBKwkBCmZpeGVkUG9pbnQCBQNmZWUABgIOKGRlbGl2ZXJ5IGZlZSkEBHJlc3QDCQBmAgkAZQIFA2FtdAUQdXNkdFNwZW50V2l0aEZlZQAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkAZQIFA2FtdAUQdXNkdFNwZW50V2l0aEZlZQULdXNkdEFzc2V0SWQFA25pbAUDbmlsBBBhY3Rpdml0aWVzQW1vdW50CQBpAgUJdXNkdFNwZW50AGQECWZ1bmRUb3RhbAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ9kZWxpdmVyeUZ1bmRLZXkAAAkAlAoCCQDNCAIJAM0IAgkAzggCBQ5mYWN0b3J5QWN0aW9ucwUEcmVzdAkBDlNjcmlwdFRyYW5zZmVyAwUMcmVzdENvbnRyYWN0BRBhY3Rpdml0aWVzQW1vdW50BQt1c2R0QXNzZXRJZAkBDEludGVnZXJFbnRyeQIFD2RlbGl2ZXJ5RnVuZEtleQkAZAIFCWZ1bmRUb3RhbAUDZmVlCQCVCgMFBndoU2F2ZQUMcHJvbG9nUmVzdWx0BQtzdGF0c1Jlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARFleGNoYW5nZVJlc291cmNlcwEHYW1vdW50cwQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAMJAAACBQxwcm9sb2dSZXN1bHQFDHByb2xvZ1Jlc3VsdAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQDAwkBASEBCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBgkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEEC2N1ckxvY2F0aW9uCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgIBXwMJAQIhPQIJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUCAUYJAAIBCQCsAgICLUR1Y2sgbG9jYXRpb24gdHlwZSBzaG91bGQgYmUgRmFjdG9yeSwgYnV0IGlzIAkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAdyZXNMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfBAdtYXRMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBA0kdDAzOTUzNjM5NjQyCQEXZXhjaGFuZ2VSZXNvdXJjZXNDb21tb24DBQdyZXNMaXN0BQdtYXRMaXN0BQdhbW91bnRzBAZuZXdSZXMIBQ0kdDAzOTUzNjM5NjQyAl8xBAZuZXdNYXQIBQ0kdDAzOTUzNjM5NjQyAl8yBAl1c2R0U3BlbnQIBQ0kdDAzOTUzNjM5NjQyAl8zBBR0b3RhbEFtb3VudENvbnZlcnRlZAgFDSR0MDM5NTM2Mzk2NDICXzQDCQBmAgUJdXNkdFNwZW50BQNhbXQJAAIBCQCsAgIJAKwCAgkArAICAh9JbnN1ZmZpY2llbnQgcGF5bWVudCEgQXR0YWNoZWQ9CQEKZml4ZWRQb2ludAIFA2FtdAAGAgssIHJlcXVpcmVkPQkBCmZpeGVkUG9pbnQCBQl1c2R0U3BlbnQABgQHbmV3UGFjawkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAuQkCBQZuZXdSZXMCAV8JAMwIAgkAuQkCBQZuZXdNYXQCAV8JAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwCAToEDmJhY2twYWNrUmVzdWx0CQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQmFja3BhY2sJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUHbmV3UGFjawUDbmlsBQNuaWwEBHJlc3QDCQBmAgkAZQIFA2FtdAUJdXNkdFNwZW50AAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQBlAgUDYW10BQl1c2R0U3BlbnQFC3VzZHRBc3NldElkBQNuaWwFA25pbAQQYWN0aXZpdGllc0Ftb3VudAkAaQIFCXVzZHRTcGVudABkBAtzdGF0c1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCD3VwZGF0ZUR1Y2tTdGF0cwkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCCQBrAwUHeHBUcmFkZQUUdG90YWxBbW91bnRDb252ZXJ0ZWQFBU1VTFQ4BQNuaWwFA25pbAkAlAoCCQDNCAIFBHJlc3QJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAUQYWN0aXZpdGllc0Ftb3VudAULdXNkdEFzc2V0SWQJAJUKAwUOYmFja3BhY2tSZXN1bHQFDHByb2xvZ1Jlc3VsdAULc3RhdHNSZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEdZXhjaGFuZ2VSZXNvdXJjZXNEdWNrRGVsaXZlcnkBB2Ftb3VudHMDCQEBIQEFEUtTX0FMTE9XX0RFTElWRVJZCQACAQIfRGVsaXZlcnkgZmVhdHVyZSBpcyB0dXJuZWQgb2ZmIQQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAMJAAACBQxwcm9sb2dSZXN1bHQFDHByb2xvZ1Jlc3VsdAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQDAwkBASEBCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBgkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQHcmVzTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwIBXwQHbWF0TGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQNJHQwNDExNTc0MTI2MwkBF2V4Y2hhbmdlUmVzb3VyY2VzQ29tbW9uAwUHcmVzTGlzdAUHbWF0TGlzdAUHYW1vdW50cwQGbmV3UmVzCAUNJHQwNDExNTc0MTI2MwJfMQQGbmV3TWF0CAUNJHQwNDExNTc0MTI2MwJfMgQJdXNkdFNwZW50CAUNJHQwNDExNTc0MTI2MwJfMwQUdG90YWxBbW91bnRDb252ZXJ0ZWQIBQ0kdDA0MTE1NzQxMjYzAl80BAdmZWVQYXJ0CQBrAwUJdXNkdFNwZW50BQ5ERUxJVkVSWV9GRUUxNQUFTVVMVDYEA2ZlZQMJAGYCBRdNSU5fVVNEVF9GRUVfREVMSVZFUlkxNQUHZmVlUGFydAUXTUlOX1VTRFRfRkVFX0RFTElWRVJZMTUFB2ZlZVBhcnQEEHVzZHRTcGVudFdpdGhGZWUJAGQCBQl1c2R0U3BlbnQFA2ZlZQMJAGYCBRB1c2R0U3BlbnRXaXRoRmVlBQNhbXQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAh9JbnN1ZmZpY2llbnQgcGF5bWVudCEgQXR0YWNoZWQ9CQEKZml4ZWRQb2ludAIFA2FtdAAGAgssIHJlcXVpcmVkPQkBCmZpeGVkUG9pbnQCBQl1c2R0U3BlbnQABgIBKwkBCmZpeGVkUG9pbnQCBQNmZWUABgIOKGRlbGl2ZXJ5IGZlZSkEB25ld1BhY2sJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJALkJAgUGbmV3UmVzAgFfCQDMCAIJALkJAgUGbmV3TWF0AgFfCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6BA5iYWNrcGFja1Jlc3VsdAkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUJhY2twYWNrCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIFB25ld1BhY2sFA25pbAUDbmlsBARyZXN0AwkAZgIJAGUCBQNhbXQFEHVzZHRTcGVudFdpdGhGZWUAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIJAGUCBQNhbXQFEHVzZHRTcGVudFdpdGhGZWUFC3VzZHRBc3NldElkBQNuaWwFA25pbAQQYWN0aXZpdGllc0Ftb3VudAkAaQIFCXVzZHRTcGVudABkBAtzdGF0c1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCD3VwZGF0ZUR1Y2tTdGF0cwkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCCQBrAwUHeHBUcmFkZQUUdG90YWxBbW91bnRDb252ZXJ0ZWQFBU1VTFQ4BQNuaWwFA25pbAQJZnVuZFRvdGFsCQELdmFsdWVPckVsc2UCCQCfCAEFD2RlbGl2ZXJ5RnVuZEtleQAACQCUCgIJAM0IAgkAzQgCBQRyZXN0CQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFEGFjdGl2aXRpZXNBbW91bnQFC3VzZHRBc3NldElkCQEMSW50ZWdlckVudHJ5AgUPZGVsaXZlcnlGdW5kS2V5CQBkAgUJZnVuZFRvdGFsBQNmZWUJAJUKAwUOYmFja3BhY2tSZXN1bHQFDHByb2xvZ1Jlc3VsdAULc3RhdHNSZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEdZXhjaGFuZ2VSZXNvdXJjZXNMYW5kRGVsaXZlcnkCB2Ftb3VudHMLbGFuZEFzc2V0SWQDCQEBIQEFEUtTX0FMTE9XX0RFTElWRVJZCQACAQIfRGVsaXZlcnkgZmVhdHVyZSBpcyB0dXJuZWQgb2ZmIQQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAMJAAACBQxwcm9sb2dSZXN1bHQFDHByb2xvZ1Jlc3VsdAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABANhbXQIBQNwbXQGYW1vdW50AwMJAQEhAQkBCWlzRGVmaW5lZAEIBQNwbXQHYXNzZXRJZAYJAQIhPQIJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhNVU0RUIHBheW1lbnRzIG9ubHkhBAR1c2VyCAUBaQZjYWxsZXIEBGFkZHIJAKUIAQUEdXNlcgQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQACAQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQCd2gJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0AhRnZXRXYXJlaG91c2VSRUFET05MWQkAzAgCBQtsYW5kQXNzZXRJZAUDbmlsBQNuaWwECWN1cnJlbnRXaAkAvAkCBQJ3aAIBOgQHcmVzTGlzdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8EB21hdExpc3QJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0AgFfBA0kdDA0MzU2NjQzNjcyCQEXZXhjaGFuZ2VSZXNvdXJjZXNDb21tb24DBQdyZXNMaXN0BQdtYXRMaXN0BQdhbW91bnRzBAZuZXdSZXMIBQ0kdDA0MzU2NjQzNjcyAl8xBAZuZXdNYXQIBQ0kdDA0MzU2NjQzNjcyAl8yBAl1c2R0U3BlbnQIBQ0kdDA0MzU2NjQzNjcyAl8zBBR0b3RhbEFtb3VudENvbnZlcnRlZAgFDSR0MDQzNTY2NDM2NzICXzQEBXdoU3RyCQC6CQIJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIJALkJAgUGbmV3UmVzAgFfCQDMCAIJALkJAgUGbmV3TWF0AgFfCQDMCAIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QJAMwIAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4TE9GVAUDbmlsAgE6BAZ3aFNhdmUJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag1zYXZlV2FyZWhvdXNlCQDMCAIFBXdoU3RyCQDMCAIFC2xhbmRBc3NldElkBQNuaWwFA25pbAQLc3RhdHNSZXN1bHQJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVBY2NTdGF0cwkAzAgCBQRhZGRyCQDMCAIJAGsDBQd4cFRyYWRlBRR0b3RhbEFtb3VudENvbnZlcnRlZAUFTVVMVDgFA25pbAUDbmlsBAdmZWVQYXJ0CQBrAwUJdXNkdFNwZW50BQ5ERUxJVkVSWV9GRUUxNQUFTVVMVDYEA2ZlZQMJAGYCBRdNSU5fVVNEVF9GRUVfREVMSVZFUlkxNQUHZmVlUGFydAUXTUlOX1VTRFRfRkVFX0RFTElWRVJZMTUFB2ZlZVBhcnQEEHVzZHRTcGVudFdpdGhGZWUJAGQCBQl1c2R0U3BlbnQFA2ZlZQMJAGYCBRB1c2R0U3BlbnRXaXRoRmVlBQNhbXQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAh9JbnN1ZmZpY2llbnQgcGF5bWVudCEgQXR0YWNoZWQ9CQEKZml4ZWRQb2ludAIFA2FtdAAGAgssIHJlcXVpcmVkPQkBCmZpeGVkUG9pbnQCBQl1c2R0U3BlbnQABgIBKwkBCmZpeGVkUG9pbnQCBQNmZWUABgIOKGRlbGl2ZXJ5IGZlZSkEBHJlc3QDCQBmAgkAZQIFA2FtdAUQdXNkdFNwZW50V2l0aEZlZQAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkAZQIFA2FtdAUQdXNkdFNwZW50V2l0aEZlZQULdXNkdEFzc2V0SWQFA25pbAUDbmlsBBBhY3Rpdml0aWVzQW1vdW50CQBpAgUJdXNkdFNwZW50AGQECWZ1bmRUb3RhbAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ9kZWxpdmVyeUZ1bmRLZXkAAAkAlAoCCQDNCAIJAM0IAgUEcmVzdAkBDlNjcmlwdFRyYW5zZmVyAwUMcmVzdENvbnRyYWN0BRBhY3Rpdml0aWVzQW1vdW50BQt1c2R0QXNzZXRJZAkBDEludGVnZXJFbnRyeQIFD2RlbGl2ZXJ5RnVuZEtleQkAZAIFCWZ1bmRUb3RhbAUDZmVlCQCVCgMFBndoU2F2ZQUMcHJvbG9nUmVzdWx0BQtzdGF0c1Jlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQpjcmFmdEdvb2RzAgpwcm9kdWN0SWR4CHF1YW50aXR5BAxwcm9sb2dSZXN1bHQJAQZwcm9sb2cAAwkAAAIFDHByb2xvZ1Jlc3VsdAUMcHJvbG9nUmVzdWx0AwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQECnBtdEFzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAggFA3BtdAdhc3NldElkAh5XQVZFUyBjYW4ndCBiZSB1c2VkIGFzIHBheW1lbnQDCQECIT0CBQpwbXRBc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEDCQECIT0CBQNhbXQFBU1VTFQ2CQACAQIqZXhhY3RseSAxIFVTRFQgbXVzdCBiZSBhdHRhY2hlZCBhcyBwYXltZW50AwkAZwIAAAUIcXVhbnRpdHkJAAIBAhtRdWFudGl0eSBzaG91bGQgYmUgcG9zaXRpdmUEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQLY3VyTG9jYXRpb24JALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OAgFfAwkBAiE9AgkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQIBTQkAAgEJAKwCAgIxRHVjayBsb2NhdGlvbiB0eXBlIHNob3VsZCBiZSBNYW51ZmFjdG9yeSwgYnV0IGlzIAkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQQEY29udAkAkQMCBQtjdXJMb2NhdGlvbgUPbG9jSWR4Q29udGluZW50BAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEB21hdExpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8DAwkAZgIAAAUKcHJvZHVjdElkeAYJAGcCBQpwcm9kdWN0SWR4CQCQAwEFEHByb2R1Y3Rpb25NYXRyaXgJAAIBCQCsAgICFFVua25vd24gcHJvZHVjdCBpZHg9CQCkAwEFCnByb2R1Y3RJZHgEBnJlY2lwZQkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgFCnByb2R1Y3RJZHgCAV8DCQECIT0CCQCQAwEFBnJlY2lwZQUKUkVDSVBFU0laRQkAAgEJAKwCAgIXRmF0YWw6IHVua25vd24gcmVjaXBlOiAJAJEDAgUQcHJvZHVjdGlvbk1hdHJpeAUKcHJvZHVjdElkeAQOcHJvZHVjdENvbnRJZHgJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZyZWNpcGUFDXJJZHhDb250aW5lbnQDCQECIT0CCQCRAwIFCmNvbnRpbmVu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cgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMV8yAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgQHbmV3UGFjawkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgkAuQkCCAUGbWVyZ2VkAl8xAgFfCQDMCAIJALoJAgUGYnBQcm9kAgFfBQNuaWwCAToEBnJlc3VsdAkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUJhY2twYWNrCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIFB25ld1BhY2sFA25pbAUDbmlsBAtzdGF0c1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCD3VwZGF0ZUR1Y2tTdGF0cwkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCCQBrAwUHeHBDcmFmdAgFBm1lcmdlZAJfMgUFTVVMVDgFA25pbAUDbmlsCQCUCgIFA25pbAkAlQoDBQZyZXN1bHQFDHByb2xvZ1Jlc3VsdAULc3RhdHNSZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQERc2V0V2FyZWhvdXNlT3JkZXICC25ld09yZGVyU3RyC2xhbmRBc3NldElkBAR1c2VyCAUBaQxvcmlnaW5DYWxsZXIEBGFkZHIJAKUIAQUEdXNlcgQGcmVzdWx0AwkBAiE9AgUEdXNlcgUMcmVzdENvbnRyYWN0CQEMY2hlY2tCbG9ja2VkAAcEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwMJAQIhPQIFBHVzZXIFDHJlc3RDb250cmFjdAkBAiE9AgUFb3duZXIFBGFkZHIHCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBAhuZXdPcmRlcgkAvAkCBQtuZXdPcmRlclN0cgIBOgQCd2gJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0AhRnZXRXYXJlaG91c2VSRUFET05MWQkAzAgCBQtsYW5kQXNzZXRJZAUDbmlsBQNuaWwECWN1cnJlbnRXaAkAvAkCBQJ3aAIBOgQEbG9mdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUAgFfBAd3aFRvdGFsCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUIdm9sVG90YWwEBm9yZEtleQkBDmtleU9yZGVyQnlMYW5kAQULbGFuZEFzc2V0SWQECmN1cnJlbnRPcmQJAQhnZXRPcmRlcgEFBm9yZEtleQQBegkBC3NldEludGVybmFsAwUJY3VycmVudFdoBQpjdXJyZW50T3JkBQhuZXdPcmRlcgQLYnV5Vm9sU2FsZG8IBQF6Al80BAxzZWxsVm9sU2FsZG8IBQF6Al81BAp3aE9jY3VwaWVkCAUBegJfNwQId2hMb2NrZWQJAGQCBQtidXlWb2xTYWxkbwUMc2VsbFZvbFNhbGRvBAZ3aEZyZWUJAGUCCQBlAgUHd2hUb3RhbAUKd2hPY2N1cGllZAUId2hMb2NrZWQDCQBmAgAABQZ3aEZyZWUJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhNBdHRlbXB0IHRvIHJlc2VydmUgCQCkAwEFC2J1eVZvbFNhbGRvAhsgc3BhY2UgZm9yIGJ1eSBvcmRlcnMsIGFuZCAJAKQDAQUMc2VsbFZvbFNhbGRvAiUgc3BhY2UgZm9yIHNlbGwgb3JkZXJzIChhbmQgb2NjdXBpZWQ9CQCkAwEFCndoT2NjdXBpZWQCHyksIGxlYWRzIHRvIG5lZ2F0aXZlIGZyZWUgc3BhY2UEBXdoU3RyCQC6CQIJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIJALkJAggFAXoCXzECAV8JAMwIAgkAuQkCCAUBegJfMgIBXwkAzAgCCQC6CQIIBQF6Al8zAgFfCQDMCAIJAKQDAQUId2hMb2NrZWQFA25pbAIBOgQGd2hTYXZlCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAINc2F2ZVdhcmVob3VzZQkAzAgCBQV3aFN0cgkAzAgCBQtsYW5kQXNzZXRJZAUDbmlsBQNuaWwECHVzZFNhbGRvCAUBegJfNgQHYWN0aW9ucwMJAGYCBQh1c2RTYWxkbwAAAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQECnBtdEFzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAggFA3BtdAdhc3NldElkAh5XQVZFUyBjYW4ndCBiZSB1c2VkIGFzIHBheW1lbnQDCQECIT0CBQpwbXRBc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEDCQECIT0CBQNhbXQFCHVzZFNhbGRvCQACAQkArAICAhJQYXltZW50IG5lZWRlZCBpcyAJAKQDAQUIdXNkU2FsZG8JAMwIAgkBC1N0cmluZ0VudHJ5AgUGb3JkS2V5BQtuZXdPcmRlclN0cgUDbmlsAwkAAAIFCHVzZFNhbGRvAAADCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhJObyBwYXltZW50cyBuZWVkZWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUGb3JkS2V5BQtuZXdPcmRlclN0cgUDbmlsAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQISTm8gcGF5bWVudHMgbmVlZGVkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBW93bmVyCQEBLQEFCHVzZFNhbGRvBQt1c2R0QXNzZXRJZAkAzAgCCQELU3RyaW5nRW50cnkCBQZvcmRLZXkFC25ld09yZGVyU3RyBQNuaWwJAJQKAgUHYWN0aW9ucwkAlAoCBQZyZXN1bHQFBndoU2F2ZQFpARRhY2NlcHRXYXJlaG91c2VPcmRlcgMKYnBPcmRlclN0cg9zaG9wTGFuZEFzc2V0SWQLZHVja0Fzc2V0SWQEDHByb2xvZ1Jlc3VsdAkBBnByb2xvZwADCQAAAgUMcHJvbG9nUmVzdWx0BQxwcm9sb2dSZXN1bHQEBmNhbGxlcggFAWkMb3JpZ2luQ2FsbGVyBApjYWxsZXJBZGRyCQClCAEFBmNhbGxlcgQRc3Rha2VkRHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFCmNhbGxlckFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEC2N1ckxvY2F0aW9uCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBD2tleUR1Y2tMb2NhdGlvbgEFEXN0YWtlZER1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04EA2xvYwkAtQkCCQEFdmFsdWUBBQtjdXJMb2NhdGlvbgIBXwMJAQIhPQIJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAgFMCQACAQkArAICCQCsAgICFkR1Y2sgbG9jYXRpb24gdHlwZSBpcyAJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAhEsIGJ1dCBzaG91bGQgYmUgTAMJAQIhPQIFEXN0YWtlZER1Y2tBc3NldElkBQtkdWNrQXNzZXRJZAkAAgEJAKwCAgkArAICCQCsAgICFFlvdXIgc3Rha2VkIGR1Y2sgaXMgBRFzdGFrZWREdWNrQXNzZXRJZAINLCBidXQgcGFzc2VkIAULZHVja0Fzc2V0SWQEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAlicFJlc0xpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMCAV8ECWJwTWF0TGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQKYnBQcm9kTGlzdAMJAAACCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAAUDbmlsCQC8CQIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIBXwQNJHQwNTMxOTA1MzQzMAkBFWFjY2VwdFNob3BPcmRlckNvbW1vbgYFD3Nob3BMYW5kQXNzZXRJZAUKY2FsbGVyQWRkcgUKYnBPcmRlclN0cgUJYnBSZXNMaXN0BQlicE1hdExpc3QFCmJwUHJvZExpc3QECnNob3BBY3Rpb24IBQ0kdDA1MzE5MDUzNDMwAl8xBApuZXdVc2VyUmVzCAUNJHQwNTMxOTA1MzQzMAJfMgQKbmV3VXNlck1hdAgFDSR0MDUzMTkwNTM0MzACXzMEC25ld1VzZXJQcm9kCAUNJHQwNTMxOTA1MzQzMAJfNAQNdXNkV2gyQnBTYWxkbwgFDSR0MDUzMTkwNTM0MzACXzUEDXVzZEJwMldoU2FsZG8IBQ0kdDA1MzE5MDUzNDMwAl82BAh4cEFtb3VudAgFDSR0MDUzMTkwNTM0MzACXzcEDXNob3BMYW5kT3duZXIIBQ0kdDA1MzE5MDUzNDMwAl84BApzaG9wV2hTYXZlCAUNJHQwNTMxOTA1MzQzMAJfOQQOYWNjU3RhdHNSZXN1bHQIBQ0kdDA1MzE5MDUzNDMwA18xMAQIYWN0aW9uczEJAMwIAgUKc2hvcEFjdGlvbgkBEHNob3AydXNlckFjdGlvbnMDBQ11c2RXaDJCcFNhbGRvBQpjYWxsZXJBZGRyAAAECGFjdGlvbnMyCQEQdXNlcjJzaG9wQWN0aW9ucwQFDXVzZEJwMldoU2FsZG8IBQFpCHBheW1lbnRzBQ1zaG9wTGFuZE93bmVyAAAECG5ld0JwU3RyCQC6CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQC5CQIFCm5ld1VzZXJSZXMCAV8JAMwIAgkAuQkCBQpuZXdVc2VyTWF0AgFfCQDMCAIJALoJAgULbmV3VXNlclByb2QCAV8FA25pbAIBOgQGYnBTYXZlCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQmFja3BhY2sJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUIbmV3QnBTdHIFA25pbAUDbmlsBA9kdWNrU3RhdHNSZXN1bHQJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag91cGRhdGVEdWNrU3RhdHMJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgkAawMFBnhwU2hvcAUIeHBBbW91bnQFBU1VTFQ4BQNuaWwFA25pbAkAlAoCCQDOCAIFCGFjdGlvbnMxBQhhY3Rpb25zMgkAlwoFBQxwcm9sb2dSZXN1bHQFCnNob3BXaFNhdmUFBmJwU2F2ZQUPZHVja1N0YXRzUmVzdWx0BQ5hY2NTdGF0c1Jlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARthY2NlcHRTaG9wT3JkZXJEdWNrRGVsaXZlcnkCCG9yZGVyU3RyD3Nob3BMYW5kQXNzZXRJZAMJAQEhAQURS1NfQUxMT1dfREVMSVZFUlkJAAIBAh9EZWxpdmVyeSBmZWF0dXJlIGlzIHR1cm5lZCBvZmYhBAxwcm9sb2dSZXN1bHQJAQZwcm9sb2cAAwkAAAIFDHByb2xvZ1Jlc3VsdAUMcHJvbG9nUmVzdWx0BAZjYWxsZXIIBQFpDG9yaWdpbkNhbGxlcgQKY2FsbGVyQWRkcgkApQgBBQZjYWxsZXIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQpjYWxsZXJBZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQJYnBSZXNMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfBAlicE1hdExpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8ECmJwUHJvZExpc3QDCQAAAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgAFA25pbAkAvAkCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAV8EDSR0MDU0ODcyNTUxMTAJARVhY2NlcHRTaG9wT3JkZXJDb21tb24GBQ9zaG9wTGFuZEFzc2V0SWQFCmNhbGxlckFkZHIFCG9yZGVyU3RyBQlicFJlc0xpc3QFCWJwTWF0TGlzdAUKYnBQcm9kTGlzdAQKc2hvcEFjdGlvbggFDSR0MDU0ODcyNTUxMTACXzEECm5ld1VzZXJSZXMIBQ0kdDA1NDg3MjU1MTEwAl8yBApuZXdVc2VyTWF0CAUNJHQwNTQ4NzI1NTExMAJfMwQLbmV3VXNlclByb2QIBQ0kdDA1NDg3MjU1MTEwAl80BA11c2RXaDJCcFNhbGRvCAUNJHQwNTQ4NzI1NTExMAJfNQQNdXNkQnAyV2hTYWxkbwgFDSR0MDU0ODcyNTUxMTACXzYECHhwQW1vdW50CAUNJHQwNTQ4NzI1NTExMAJfNwQNc2hvcExhbmRPd25lcggFDSR0MDU0ODcyNTUxMTACXzgECnNob3BXaFNhdmUIBQ0kdDA1NDg3MjU1MTEwAl85BA5hY2NTdGF0c1Jlc3VsdAgFDSR0MDU0ODcyNTUxMTADXzEwBA9kZWxpdmVyeUZlZVBhcnQJAGsDCQBkAgUNdXNkQnAyV2hTYWxkbwUNdXNkV2gyQnBTYWxkbwUMREVMSVZFUllfRkVFBQVNVUxUNgQLZGVsaXZlcnlGZWUDCQBmAgUVTUlOX1VTRFRfRkVFX0RFTElWRVJZBQ9kZWxpdmVyeUZlZVBhcnQFFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQUPZGVsaXZlcnlGZWVQYXJ0BAhzcGVudEZlZQkAawMFC2RlbGl2ZXJ5RmVlBQ11c2RCcDJXaFNhbGRvCQBkAgUNdXNkQnAyV2hTYWxkbwUNdXNkV2gyQnBTYWxkbwQLcmVjZWl2ZWRGZWUJAGUCBQtkZWxpdmVyeUZlZQUIc3BlbnRGZWUECWZ1bmRUb3RhbAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ9kZWxpdmVyeUZ1bmRLZXkAAAQIYWN0aW9uczEJAMwIAgUKc2hvcEFjdGlvbgkBEHNob3AydXNlckFjdGlvbnMDBQ11c2RXaDJCcFNhbGRvBQpjYWxsZXJBZGRyBQtyZWNlaXZlZEZlZQQIYWN0aW9uczIJARB1c2VyMnNob3BBY3Rpb25zBAUNdXNkQnAyV2hTYWxkbwgFAWkIcGF5bWVudHMFDXNob3BMYW5kT3duZXIFCHNwZW50RmVlBAhuZXdCcFN0cgkAugkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAuQkCBQpuZXdVc2VyUmVzAgFfCQDMCAIJALkJAgUKbmV3VXNlck1hdAIBXwkAzAgCCQC6CQIFC25ld1VzZXJQcm9kAgFfBQNuaWwCAToEBmJwU2F2ZQkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUJhY2twYWNrCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIFCG5ld0JwU3RyBQNuaWwFA25pbAQPZHVja1N0YXRzUmVzdWx0CQEFYXNJbnQBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIPdXBkYXRlRHVja1N0YXRzCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIJAGsDBQZ4cFNob3AFCHhwQW1vdW50BQVNVUxUOAUDbmlsBQNuaWwJAJQKAgkAzQgCCQDOCAIFCGFjdGlvbnMxBQhhY3Rpb25zMgkBDEludGVnZXJFbnRyeQIFD2RlbGl2ZXJ5RnVuZEtleQkAZAIFCWZ1bmRUb3RhbAULZGVsaXZlcnlGZWUJAJcKBQUMcHJvbG9nUmVzdWx0BQpzaG9wV2hTYXZlBQZicFNhdmUFD2R1Y2tTdGF0c1Jlc3VsdAUOYWNjU3RhdHNSZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEbYWNjZXB0U2hvcE9yZGVyTGFuZERlbGl2ZXJ5AwhvcmRlclN0cg9zaG9wTGFuZEFzc2V0SWQNbXlMYW5kQXNzZXRJZAMJAQEhAQURS1NfQUxMT1dfREVMSVZFUlkJAAIBAh9EZWxpdmVyeSBmZWF0dXJlIGlzIHR1cm5lZCBvZmYhBAxwcm9sb2dSZXN1bHQJAQZwcm9sb2cAAwkAAAIFDHByb2xvZ1Jlc3VsdAUMcHJvbG9nUmVzdWx0BAZjYWxsZXIIBQFpDG9yaWdpbkNhbGxlcgQKY2FsbGVyQWRkcgkApQgBBQZjYWxsZXIEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQUNbXlMYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFDW15TGFuZEFzc2V0SWQJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFDW15TGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFCmNhbGxlckFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMEAndoCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIUZ2V0V2FyZWhvdXNlUkVBRE9OTFkJAMwIAgUNbXlMYW5kQXNzZXRJZAUDbmlsBQNuaWwECWN1cnJlbnRXaAkAvAkCBQJ3aAIBOgQHcmVzTGlzdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8EB21hdExpc3QJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0AgFfBAhwcm9kTGlzdAMJAAACCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAgAFA25pbAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAgFfBA0kdDA1NzM1MjU3NTg0CQEVYWNjZXB0U2hvcE9yZGVyQ29tbW9uBgUPc2hvcExhbmRBc3NldElkBQpjYWxsZXJBZGRyBQhvcmRlclN0cgUHcmVzTGlzdAUHbWF0TGlzdAUIcHJvZExpc3QECnNob3BBY3Rpb24IBQ0kdDA1NzM1MjU3NTg0Al8xBApuZXdVc2VyUmVzCAUNJHQwNTczNTI1NzU4NAJfMgQKbmV3VXNlck1hdAgFDSR0MDU3MzUyNTc1ODQCXzMEC25ld1VzZXJQcm9kCAUNJHQwNTczNTI1NzU4NAJfNAQNdXNkV2gyQnBTYWxkbwgFDSR0MDU3MzUyNTc1ODQCXzUEDXVzZEJwMldoU2FsZG8IBQ0kdDA1NzM1MjU3NTg0Al82BAh4cEFtb3VudAgFDSR0MDU3MzUyNTc1ODQCXzcEDXNob3BMYW5kT3duZXIIBQ0kdDA1NzM1MjU3NTg0Al84BApzaG9wV2hTYXZlCAUNJHQwNTczNTI1NzU4NAJfOQQOYWNjU3RhdHNSZXN1bHQIBQ0kdDA1NzM1MjU3NTg0A18xMAQPZGVsaXZlcnlGZWVQYXJ0CQBrAwkAZAIFDXVzZEJwMldoU2FsZG8FDXVzZFdoMkJwU2FsZG8FDERFTElWRVJZX0ZFRQUFTVVMVDYEC2RlbGl2ZXJ5RmVlAwkAZgIFFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQUPZGVsaXZlcnlGZWVQYXJ0BRVNSU5fVVNEVF9GRUVfREVMSVZFUlkFD2RlbGl2ZXJ5RmVlUGFydAQIc3BlbnRGZWUJAGsDBQtkZWxpdmVyeUZlZQUNdXNkQnAyV2hTYWxkbwkAZAIFDXVzZEJwMldoU2FsZG8FDXVzZFdoMkJwU2FsZG8EC3JlY2VpdmVkRmVlCQBlAgULZGVsaXZlcnlGZWUFCHNwZW50RmVlBAlmdW5kVG90YWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUPZGVsaXZlcnlGdW5kS2V5AAAECGFjdGlvbnMxCQDMCAIFCnNob3BBY3Rpb24JARBzaG9wMnVzZXJBY3Rpb25zAwUNdXNkV2gyQnBTYWxkbwUKY2FsbGVyQWRkcgULcmVjZWl2ZWRGZWUECGFjdGlvbnMyCQEQdXNlcjJzaG9wQWN0aW9ucwQFDXVzZEJwMldoU2FsZG8IBQFpCHBheW1lbnRzBQ1zaG9wTGFuZE93bmVyBQhzcGVudEZlZQQFd2hTdHIJALoJAgkAzAgCCQCRAwIFCWN1cnJlbnRXaAULd2hJZHhMZXZlbHMJAMwIAgkAuQkCBQpuZXdVc2VyUmVzAgFfCQDMCAIJALkJAgUKbmV3VXNlck1hdAIBXwkAzAgCCQC5CQIFC25ld1VzZXJQcm9kAgFfCQDMCAIJAJEDAgUJY3VycmVudFdoBQl3aElkeExPRlQFA25pbAIBOgQGd2hTYXZlCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAINc2F2ZVdhcmVob3VzZQkAzAgCBQV3aFN0cgkAzAgCBQ1teUxhbmRBc3NldElkBQNuaWwFA25pbAQLc3RhdHNSZXN1bHQJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVBY2NTdGF0cwkAzAgCBQpjYWxsZXJBZGRyCQDMCAIJAGsDBQZ4cFNob3AFCHhwQW1vdW50BQVNVUxUOAUDbmlsBQNuaWwJAJQKAgkAzQgCCQDOCAIFCGFjdGlvbnMxBQhhY3Rpb25zMgkBDEludGVnZXJFbnRyeQIFD2RlbGl2ZXJ5RnVuZEtleQkAZAIFCWZ1bmRUb3RhbAULZGVsaXZlcnlGZWUJAJcKBQUMcHJvbG9nUmVzdWx0BQpzaG9wV2hTYXZlBQZ3aFNhdmUFC3N0YXRzUmVzdWx0BQ5hY2NTdGF0c1Jlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARBzZWxsUHJvZHVjdHNUb0VTAQdhbW91bnRzBAxwcm9sb2dSZXN1bHQJAQZwcm9sb2cAAwkAAAIFDHByb2xvZ1Jlc3VsdAUMcHJvbG9nUmVzdWx0AwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQISTm8gcGF5bWVudHMgbmVlZGVkBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEC2N1ckxvY2F0aW9uCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgIBXwMJAQIhPQIJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUCAUEJAAIBCQCsAgICLUR1Y2sgbG9jYXRpb24gdHlwZSBzaG91bGQgYmUgQWlycG9ydCwgYnV0IGlzIAkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAhwcm9kTGlzdAMJAAACCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAAUDbmlsCQC8CQIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIBXwQFZXNLZXkJAQ5rZXlFc1dhcmVob3VzZQAECGV4aXN0U3RyCQCiCAEFBWVzS2V5BAxleGlzdEFtb3VudHMDCQEJaXNEZWZpbmVkAQUIZXhpc3RTdHIJALwJAgkBBXZhbHVlAQUIZXhpc3RTdHICAV8FA25pbAoBCG1vdmVQcm9kAgNhY2MJcmVjaXBlU3RyBAFqCAUDYWNjAl8xBAhxdWFudGl0eQMJAGYCCQCQAwEFB2Ftb3VudHMFAWoJAJEDAgUHYW1vdW50cwUBagAAAwkAZgIAAAUIcXVhbnRpdHkJAAIBAhtRdWFudGl0eSBjYW5ub3QgYmUgbmVnYXRpdmUEBnJlY2lwZQkAtQkCBQlyZWNpcGVTdHICAV8DCQECIT0CCQCQAwEFBnJlY2lwZQUKUkVDSVBFU0laRQkAAgEJAKwCAgIXRmF0YWw6IHVua25vd24gcmVjaXBlOiAFCXJlY2lwZVN0cgQJbWF4QW1vdW50CQBoAgUNRVNNQVhQQUNLQUdFUwUOUFJPRFVDVFBLR1NJWkUEC2V4aXN0QW1vdW50AwkAZgIJAJADAQUMZXhpc3RBbW91bnRzBQFqCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUMZXhpc3RBbW91bnRzBQFqAAAEBmNhbkJ1eQkAZQIFCW1heEFtb3VudAULZXhpc3RBbW91bnQDCQBmAgUIcXVhbnRpdHkFBmNhbkJ1eQkAAgEJAKwCAgkArAICCQCsAgICF1dhcmVob3VzZSBjYW4gYnV5IG9ubHkgCQCkAwEFBmNhbkJ1eQIEIG9mIAkAkQMCBQlwcm9kVHlwZXMFAWoECHRvdGFsTWF0CQESZ2V0UmVjaXBlTWF0ZXJpYWxzAQUGcmVjaXBlBAl1bml0UHJpY2UJAGsDCQBoAgUIdG90YWxNYXQFCUVTQlVZQ09FRgUQUkVTT1VSQ0VQUklDRU1JTgkAaAIFBU1VTFQ4BQ5QUk9EVUNUUEtH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ZAkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ5rZXlFc1dhcmVob3VzZQAFCm5ld1N0b3JhZ2UFA25pbAUKbmV3U3RvcmFnZQFpARR1cGRhdGVEZWxpdmVyeUxvY2tlZAEJbmV3QW1vdW50AwkBAiE9AggFAWkGY2FsbGVyBQ9zdGFraW5nQ29udHJhY3QJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFkZWxpdmVyeUxvY2tlZEtleQUJbmV3QW1vdW50BQNuaWwFCW5ld0Ftb3VudAFpARJzZW5kRGVsaXZlcnlSZXdhcmQBBGFkZHIDCQECIT0CCAUBaQZjYWxsZXIFD3N0YWtpbmdDb250cmFjdAkAAgECEVBlcm1pc3Npb24gZGVuaWVkBAlmdW5kVG90YWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUPZGVsaXZlcnlGdW5kS2V5AAAEC2xvY2tlZFRvdGFsCQELdmFsdWVPckVsc2UCCQCfCAEFEWRlbGl2ZXJ5TG9ja2VkS2V5AAAEC2FjcmVzQW1vdW50CQBoAgUVTUlOX1VTRFRfRkVFX0RFTElWRVJZBRVVU0RUMkFDUkVTX01VTFRJUExJRVIEC2FjcmVzUmVzdWx0CQD8BwQFDWFjcmVzQ29udHJhY3QCCXNlbmRBY3JlcwkAzAgCBQRhZGRyCQDMCAIFC2FjcmVzQW1vdW50BQNuaWwFA25pbAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ9kZWxpdmVyeUZ1bmRLZXkJAGUCBQlmdW5kVG90YWwFFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQkAzAgCCQEMSW50ZWdlckVudHJ5AgURZGVsaXZlcnlMb2NrZWRLZXkJAGUCBQtsb2NrZWRUb3RhbAUVTUlOX1VTRFRfRkVFX0RFTElWRVJZBQNuaWwFC2FjcmVzUmVzdWx0AAuPkRQ=", "height": 2798535, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 8eSJCWgEJfRnCYctmbGMCRkmqG78RysEbLFcwPJsKuQE Next: 7ALzi2wC8GDNAAek1dKHzwo6FJH5MbWWw29m4W4GqJKg Diff:
Old | New | Differences | |
---|---|---|---|
295 | 295 | else unit | |
296 | 296 | ||
297 | 297 | ||
298 | - | func bF () = aI( | |
298 | + | func bF () = aI(reentrantInvoke(aC, "saveLastTx", nil, nil)) | |
299 | 299 | ||
300 | 300 | ||
301 | 301 | func bG (bH,bI) = { | |
765 | 765 | @Callable(dX) | |
766 | 766 | func sellResources (cM,cN) = { | |
767 | 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)) | |
770 | - | then throw("sellResources doesn't require any payments") | |
771 | - | else { | |
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])) | |
768 | + | if ((ea == ea)) | |
769 | + | then { | |
770 | + | let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked") | |
771 | + | if ((size(dX.payments) != 0)) | |
772 | + | then throw("sellResources doesn't require any payments") | |
775 | 773 | else { | |
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)) | |
774 | + | let eb = split(valueOrElse(getString(aC, U(T)), g), "_") | |
775 | + | if ((eb[J] != "F")) | |
776 | + | then throw(("Duck location type should be Factory, but is " + eb[J])) | |
777 | + | else { | |
778 | + | let ec = bC(S(T)) | |
779 | + | let cK = split(ec[F], "_") | |
780 | + | let ed = cJ(cK, eb[K], cM, cN) | |
781 | + | let dS = ed._1 | |
782 | + | let ee = ed._2 | |
783 | + | let br = ed._3 | |
784 | + | let dT = ed._4 | |
785 | + | let dV = (br / 100) | |
786 | + | let ef = makeString_2C([ec[E], makeString(ee, "_"), ec[G], ec[H]], ":") | |
787 | + | let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil)) | |
788 | + | let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, dT, ak)], nil)) | |
789 | + | $Tuple2(((dS :+ ScriptTransfer(dX.caller, (br - dV), ae)) :+ ScriptTransfer(aB, dV, ae)), $Tuple3(eg, ea, eh)) | |
790 | + | } | |
788 | 791 | } | |
789 | 792 | } | |
793 | + | else throw("Strict value is not equal to itself.") | |
790 | 794 | } | |
791 | 795 | ||
792 | 796 | ||
824 | 828 | then throw("Delivery feature is turned off!") | |
825 | 829 | else { | |
826 | 830 | 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)) | |
829 | - | then throw("sellResources doesn't require any payments") | |
830 | - | else { | |
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)) | |
843 | - | then k | |
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))) | |
831 | + | if ((ea == ea)) | |
832 | + | then { | |
833 | + | let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked") | |
834 | + | if ((size(dX.payments) != 0)) | |
835 | + | then throw("sellResources doesn't require any payments") | |
848 | 836 | else { | |
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)) | |
837 | + | let ec = bC(S(T)) | |
838 | + | let cK = split(ec[F], "_") | |
839 | + | let ek = cJ(cK, ej, cM, cN) | |
840 | + | let dS = ek._1 | |
841 | + | let ee = ek._2 | |
842 | + | let br = ek._3 | |
843 | + | let dT = ek._4 | |
844 | + | let ef = makeString_2C([ec[E], makeString(ee, "_"), ec[G], ec[H]], ":") | |
845 | + | let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil)) | |
846 | + | let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, dT, ak)], nil)) | |
847 | + | let el = fraction(br, aV, aj) | |
848 | + | let dU = if ((k > el)) | |
849 | + | then k | |
850 | + | else el | |
851 | + | let dV = (br / 100) | |
852 | + | if ((dU >= (br - dV))) | |
853 | + | then throw(("This trade does not cover delivery cost of " + aL(dU, 6))) | |
854 | + | else { | |
855 | + | let em = valueOrElse(getInteger(Y), 0) | |
856 | + | $Tuple2((((dS :+ ScriptTransfer(dX.caller, ((br - dV) - dU), ae)) :+ IntegerEntry(Y, (em + dU))) :+ ScriptTransfer(aB, dV, ae)), $Tuple3(eg, ea, eh)) | |
857 | + | } | |
851 | 858 | } | |
852 | 859 | } | |
860 | + | else throw("Strict value is not equal to itself.") | |
853 | 861 | } | |
854 | 862 | ||
855 | 863 | ||
859 | 867 | then throw("Delivery feature is turned off!") | |
860 | 868 | else { | |
861 | 869 | let ea = bF() | |
862 | - | if ((size(dX.payments) != 0)) | |
863 | - | then throw("sellResources doesn't require any payments") | |
864 | - | else { | |
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")) | |
870 | - | else { | |
871 | - | let ep = valueOrErrorMessage(getString(aC, L(W)), (("NFT " + eo.name) + " is orphaned")) | |
872 | - | if ((ep != P)) | |
873 | - | then throw((e + " is not yours")) | |
874 | - | else { | |
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)) | |
888 | - | then k | |
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))) | |
893 | - | else { | |
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)) | |
896 | - | } | |
897 | - | } | |
898 | - | } | |
899 | - | } | |
870 | + | if ((ea == ea)) | |
871 | + | then if ((size(dX.payments) != 0)) | |
872 | + | then throw("sellResources doesn't require any payments") | |
873 | + | else { | |
874 | + | let en = dX.caller | |
875 | + | let P = toString(en) | |
876 | + | let eo = value(assetInfo(fromBase58String(W))) | |
877 | + | if (!(isDefined(getInteger(aC, N(W))))) | |
878 | + | then throw((("NFT " + eo.name) + " is not staked")) | |
879 | + | else { | |
880 | + | let ep = valueOrErrorMessage(getString(aC, L(W)), (("NFT " + eo.name) + " is orphaned")) | |
881 | + | if ((ep != P)) | |
882 | + | then throw((e + " is not yours")) | |
883 | + | else { | |
884 | + | let dz = aF(invoke(aC, "getWarehouseREADONLY", [W], nil)) | |
885 | + | let bY = split_4C(dz, ":") | |
886 | + | let cK = split(bY[y], "_") | |
887 | + | let eq = cJ(cK, ej, cM, cN) | |
888 | + | let dS = eq._1 | |
889 | + | let ee = eq._2 | |
890 | + | let br = eq._3 | |
891 | + | let dT = eq._4 | |
892 | + | let dH = makeString_2C([bY[x], makeString(ee, "_"), bY[z], bY[A], bY[B]], ":") | |
893 | + | let dJ = aF(invoke(aC, "saveWarehouse", [dH, W], nil)) | |
894 | + | let eh = aI(invoke(aC, "updateAccStats", [P, fraction(a, dT, ak)], nil)) | |
895 | + | let el = fraction(br, aV, aj) | |
896 | + | let dU = if ((k > el)) | |
897 | + | then k | |
898 | + | else el | |
899 | + | let dV = (br / 100) | |
900 | + | if ((dU >= (br - dV))) | |
901 | + | then throw(("This trade does not cover delivery cost of " + aL(dU, 6))) | |
902 | + | else { | |
903 | + | let em = valueOrElse(getInteger(Y), 0) | |
904 | + | $Tuple2((((dS :+ ScriptTransfer(dX.caller, ((br - dV) - dU), ae)) :+ IntegerEntry(Y, (em + dU))) :+ ScriptTransfer(aB, dV, ae)), $Tuple3(dJ, ea, eh)) | |
905 | + | } | |
906 | + | } | |
907 | + | } | |
908 | + | } | |
909 | + | else throw("Strict value is not equal to itself.") | |
900 | 910 | } | |
901 | 911 | ||
902 | 912 | ||
904 | 914 | @Callable(dX) | |
905 | 915 | func buyMaterials (cM,cS) = { | |
906 | 916 | 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)) | |
909 | - | then throw("exactly 1 payment must be attached") | |
910 | - | else { | |
911 | - | let dk = dX.payments[0] | |
912 | - | let dl = dk.amount | |
913 | - | if (if (!(isDefined(dk.assetId))) | |
914 | - | then true | |
915 | - | else (value(dk.assetId) != ae)) | |
916 | - | then throw("USDT payments only!") | |
917 | + | if ((ea == ea)) | |
918 | + | then { | |
919 | + | let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked") | |
920 | + | if ((size(dX.payments) != 1)) | |
921 | + | then throw("exactly 1 payment must be attached") | |
917 | 922 | else { | |
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])) | |
923 | + | let dk = dX.payments[0] | |
924 | + | let dl = dk.amount | |
925 | + | if (if (!(isDefined(dk.assetId))) | |
926 | + | then true | |
927 | + | else (value(dk.assetId) != ae)) | |
928 | + | then throw("USDT payments only!") | |
921 | 929 | else { | |
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))) | |
930 | + | let eb = split(valueOrElse(getString(aC, U(T)), g), "_") | |
931 | + | if ((eb[J] != "F")) | |
932 | + | then throw(("Duck location type should be Factory, but is " + eb[J])) | |
931 | 933 | else { | |
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)] | |
936 | - | else nil | |
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)) | |
934 | + | let ec = bC(S(T)) | |
935 | + | let cR = split(ec[G], "_") | |
936 | + | let er = cQ(cR, eb[K], cM, cS) | |
937 | + | let dS = er._1 | |
938 | + | let es = er._2 | |
939 | + | let bA = er._3 | |
940 | + | let et = er._4 | |
941 | + | if ((bA > dl)) | |
942 | + | then throw(((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6))) | |
943 | + | else { | |
944 | + | let ef = makeString([ec[E], ec[F], makeString(es, "_"), ec[H]], ":") | |
945 | + | let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil)) | |
946 | + | let ax = if (((dl - bA) > 0)) | |
947 | + | then [ScriptTransfer(dX.caller, (dl - bA), ae)] | |
948 | + | else nil | |
949 | + | let dV = (bA / 100) | |
950 | + | let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, et, ak)], nil)) | |
951 | + | $Tuple2(((dS ++ ax) :+ ScriptTransfer(aB, dV, ae)), $Tuple3(eg, ea, eh)) | |
952 | + | } | |
940 | 953 | } | |
941 | 954 | } | |
942 | 955 | } | |
943 | 956 | } | |
957 | + | else throw("Strict value is not equal to itself.") | |
944 | 958 | } | |
945 | 959 | ||
946 | 960 | ||
950 | 964 | then throw("Delivery feature is turned off!") | |
951 | 965 | else { | |
952 | 966 | 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)) | |
955 | - | then throw("exactly 1 payment must be attached") | |
956 | - | else { | |
957 | - | let dk = dX.payments[0] | |
958 | - | let dl = dk.amount | |
959 | - | if (if (!(isDefined(dk.assetId))) | |
960 | - | then true | |
961 | - | else (value(dk.assetId) != ae)) | |
962 | - | then throw("USDT payments only!") | |
967 | + | if ((ea == ea)) | |
968 | + | then { | |
969 | + | let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked") | |
970 | + | if ((size(dX.payments) != 1)) | |
971 | + | then throw("exactly 1 payment must be attached") | |
963 | 972 | else { | |
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)) | |
976 | - | then k | |
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)")) | |
973 | + | let dk = dX.payments[0] | |
974 | + | let dl = dk.amount | |
975 | + | if (if (!(isDefined(dk.assetId))) | |
976 | + | then true | |
977 | + | else (value(dk.assetId) != ae)) | |
978 | + | then throw("USDT payments only!") | |
981 | 979 | else { | |
982 | - | let ax = if (((dl - dm) > 0)) | |
983 | - | then [ScriptTransfer(dX.caller, (dl - dm), ae)] | |
984 | - | else nil | |
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)) | |
980 | + | let ec = bC(S(T)) | |
981 | + | let cR = split(ec[G], "_") | |
982 | + | let eu = cQ(cR, ej, cM, cS) | |
983 | + | let dS = eu._1 | |
984 | + | let es = eu._2 | |
985 | + | let bA = eu._3 | |
986 | + | let et = eu._4 | |
987 | + | let ef = makeString([ec[E], ec[F], makeString(es, "_"), ec[H]], ":") | |
988 | + | let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil)) | |
989 | + | let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, et, ak)], nil)) | |
990 | + | let el = fraction(bA, aV, aj) | |
991 | + | let dU = if ((k > el)) | |
992 | + | then k | |
993 | + | else el | |
994 | + | let dm = (bA + dU) | |
995 | + | if ((dm > dl)) | |
996 | + | then throw((((((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)) + "+") + aL(dU, 6)) + "(delivery fee)")) | |
997 | + | else { | |
998 | + | let ax = if (((dl - dm) > 0)) | |
999 | + | then [ScriptTransfer(dX.caller, (dl - dm), ae)] | |
1000 | + | else nil | |
1001 | + | let dV = (bA / 100) | |
1002 | + | let em = valueOrElse(getInteger(Y), 0) | |
1003 | + | $Tuple2((((dS ++ ax) :+ ScriptTransfer(aB, dV, ae)) :+ IntegerEntry(Y, (em + dU))), $Tuple3(eg, ea, eh)) | |
1004 | + | } | |
988 | 1005 | } | |
989 | 1006 | } | |
990 | 1007 | } | |
1008 | + | else throw("Strict value is not equal to itself.") | |
991 | 1009 | } | |
992 | 1010 | ||
993 | 1011 | ||
997 | 1015 | then throw("Delivery feature is turned off!") | |
998 | 1016 | else { | |
999 | 1017 | let ea = bF() | |
1000 | - | if ((size(dX.payments) != 1)) | |
1001 | - | then throw("exactly 1 payment must be attached") | |
1002 | - | else { | |
1003 | - | let dk = dX.payments[0] | |
1004 | - | let dl = dk.amount | |
1005 | - | if (if (!(isDefined(dk.assetId))) | |
1006 | - | then true | |
1007 | - | else (value(dk.assetId) != ae)) | |
1008 | - | then throw("USDT payments only!") | |
1009 | - | else { | |
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")) | |
1015 | - | else { | |
1016 | - | let ep = valueOrErrorMessage(getString(aC, L(W)), (("NFT " + eo.name) + " is orphaned")) | |
1017 | - | if ((ep != P)) | |
1018 | - | then throw((e + " is not yours")) | |
1019 | - | else { | |
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)) | |
1033 | - | then k | |
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)")) | |
1038 | - | else { | |
1039 | - | let ax = if (((dl - dm) > 0)) | |
1040 | - | then [ScriptTransfer(dX.caller, (dl - dm), ae)] | |
1041 | - | else nil | |
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)) | |
1045 | - | } | |
1046 | - | } | |
1047 | - | } | |
1048 | - | } | |
1049 | - | } | |
1018 | + | if ((ea == ea)) | |
1019 | + | then if ((size(dX.payments) != 1)) | |
1020 | + | then throw("exactly 1 payment must be attached") | |
1021 | + | else { | |
1022 | + | let dk = dX.payments[0] | |
1023 | + | let dl = dk.amount | |
1024 | + | if (if (!(isDefined(dk.assetId))) | |
1025 | + | then true | |
1026 | + | else (value(dk.assetId) != ae)) | |
1027 | + | then throw("USDT payments only!") | |
1028 | + | else { | |
1029 | + | let en = dX.caller | |
1030 | + | let P = toString(en) | |
1031 | + | let eo = value(assetInfo(fromBase58String(W))) | |
1032 | + | if (!(isDefined(getInteger(aC, N(W))))) | |
1033 | + | then throw((("NFT " + eo.name) + " is not staked")) | |
1034 | + | else { | |
1035 | + | let ep = valueOrErrorMessage(getString(aC, L(W)), (("NFT " + eo.name) + " is orphaned")) | |
1036 | + | if ((ep != P)) | |
1037 | + | then throw((e + " is not yours")) | |
1038 | + | else { | |
1039 | + | let dz = aF(invoke(aC, "getWarehouseREADONLY", [W], nil)) | |
1040 | + | let bY = split_4C(dz, ":") | |
1041 | + | let cR = split(bY[z], "_") | |
1042 | + | let ev = cQ(cR, ej, cM, cS) | |
1043 | + | let dS = ev._1 | |
1044 | + | let es = ev._2 | |
1045 | + | let bA = ev._3 | |
1046 | + | let et = ev._4 | |
1047 | + | let dH = makeString_2C([bY[x], bY[y], makeString(es, "_"), bY[A], bY[B]], ":") | |
1048 | + | let dJ = aF(invoke(aC, "saveWarehouse", [dH, W], nil)) | |
1049 | + | let eh = aI(invoke(aC, "updateAccStats", [P, fraction(a, et, ak)], nil)) | |
1050 | + | let el = fraction(bA, aV, aj) | |
1051 | + | let dU = if ((k > el)) | |
1052 | + | then k | |
1053 | + | else el | |
1054 | + | let dm = (bA + dU) | |
1055 | + | if ((dm > dl)) | |
1056 | + | then throw((((((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)) + "+") + aL(dU, 6)) + "(delivery fee)")) | |
1057 | + | else { | |
1058 | + | let ax = if (((dl - dm) > 0)) | |
1059 | + | then [ScriptTransfer(dX.caller, (dl - dm), ae)] | |
1060 | + | else nil | |
1061 | + | let dV = (bA / 100) | |
1062 | + | let em = valueOrElse(getInteger(Y), 0) | |
1063 | + | $Tuple2((((dS ++ ax) :+ ScriptTransfer(aB, dV, ae)) :+ IntegerEntry(Y, (em + dU))), $Tuple3(dJ, ea, eh)) | |
1064 | + | } | |
1065 | + | } | |
1066 | + | } | |
1067 | + | } | |
1068 | + | } | |
1069 | + | else throw("Strict value is not equal to itself.") | |
1050 | 1070 | } | |
1051 | 1071 | ||
1052 | 1072 | ||
1054 | 1074 | @Callable(dX) | |
1055 | 1075 | func exchangeResources (cM) = { | |
1056 | 1076 | 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)) | |
1059 | - | then throw("exactly 1 payment must be attached") | |
1060 | - | else { | |
1061 | - | let dk = dX.payments[0] | |
1062 | - | let dl = dk.amount | |
1063 | - | if (if (!(isDefined(dk.assetId))) | |
1064 | - | then true | |
1065 | - | else (value(dk.assetId) != ae)) | |
1066 | - | then throw("USDT payments only!") | |
1077 | + | if ((ea == ea)) | |
1078 | + | then { | |
1079 | + | let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked") | |
1080 | + | if ((size(dX.payments) != 1)) | |
1081 | + | then throw("exactly 1 payment must be attached") | |
1067 | 1082 | else { | |
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])) | |
1083 | + | let dk = dX.payments[0] | |
1084 | + | let dl = dk.amount | |
1085 | + | if (if (!(isDefined(dk.assetId))) | |
1086 | + | then true | |
1087 | + | else (value(dk.assetId) != ae)) | |
1088 | + | then throw("USDT payments only!") | |
1071 | 1089 | else { | |
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))) | |
1090 | + | let eb = split(valueOrElse(getString(aC, U(T)), g), "_") | |
1091 | + | if ((eb[J] != "F")) | |
1092 | + | then throw(("Duck location type should be Factory, but is " + eb[J])) | |
1082 | 1093 | else { | |
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)] | |
1087 | - | else nil | |
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)) | |
1094 | + | let ec = bC(S(T)) | |
1095 | + | let cK = split(ec[F], "_") | |
1096 | + | let cR = split(ec[G], "_") | |
1097 | + | let ew = cU(cK, cR, cM) | |
1098 | + | let ee = ew._1 | |
1099 | + | let es = ew._2 | |
1100 | + | let bA = ew._3 | |
1101 | + | let ex = ew._4 | |
1102 | + | if ((bA > dl)) | |
1103 | + | then throw(((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6))) | |
1104 | + | else { | |
1105 | + | let ef = makeString([ec[E], makeString(ee, "_"), makeString(es, "_"), ec[H]], ":") | |
1106 | + | let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil)) | |
1107 | + | let ax = if (((dl - bA) > 0)) | |
1108 | + | then [ScriptTransfer(dX.caller, (dl - bA), ae)] | |
1109 | + | else nil | |
1110 | + | let dV = (bA / 100) | |
1111 | + | let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, ex, ak)], nil)) | |
1112 | + | $Tuple2((ax :+ ScriptTransfer(aB, dV, ae)), $Tuple3(eg, ea, eh)) | |
1113 | + | } | |
1091 | 1114 | } | |
1092 | 1115 | } | |
1093 | 1116 | } | |
1094 | 1117 | } | |
1118 | + | else throw("Strict value is not equal to itself.") | |
1095 | 1119 | } | |
1096 | 1120 | ||
1097 | 1121 | ||
1101 | 1125 | then throw("Delivery feature is turned off!") | |
1102 | 1126 | else { | |
1103 | 1127 | 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)) | |
1106 | - | then throw("exactly 1 payment must be attached") | |
1107 | - | else { | |
1108 | - | let dk = dX.payments[0] | |
1109 | - | let dl = dk.amount | |
1110 | - | if (if (!(isDefined(dk.assetId))) | |
1111 | - | then true | |
1112 | - | else (value(dk.assetId) != ae)) | |
1113 | - | then throw("USDT payments only!") | |
1128 | + | if ((ea == ea)) | |
1129 | + | then { | |
1130 | + | let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked") | |
1131 | + | if ((size(dX.payments) != 1)) | |
1132 | + | then throw("exactly 1 payment must be attached") | |
1114 | 1133 | else { | |
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)) | |
1125 | - | then l | |
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)")) | |
1134 | + | let dk = dX.payments[0] | |
1135 | + | let dl = dk.amount | |
1136 | + | if (if (!(isDefined(dk.assetId))) | |
1137 | + | then true | |
1138 | + | else (value(dk.assetId) != ae)) | |
1139 | + | then throw("USDT payments only!") | |
1130 | 1140 | else { | |
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)] | |
1135 | - | else nil | |
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)) | |
1141 | + | let ec = bC(S(T)) | |
1142 | + | let cK = split(ec[F], "_") | |
1143 | + | let cR = split(ec[G], "_") | |
1144 | + | let ey = cU(cK, cR, cM) | |
1145 | + | let ee = ey._1 | |
1146 | + | let es = ey._2 | |
1147 | + | let bA = ey._3 | |
1148 | + | let ex = ey._4 | |
1149 | + | let el = fraction(bA, aW, aj) | |
1150 | + | let dU = if ((l > el)) | |
1151 | + | then l | |
1152 | + | else el | |
1153 | + | let dm = (bA + dU) | |
1154 | + | if ((dm > dl)) | |
1155 | + | then throw((((((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)) + "+") + aL(dU, 6)) + "(delivery fee)")) | |
1156 | + | else { | |
1157 | + | let ef = makeString([ec[E], makeString(ee, "_"), makeString(es, "_"), ec[H]], ":") | |
1158 | + | let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil)) | |
1159 | + | let ax = if (((dl - dm) > 0)) | |
1160 | + | then [ScriptTransfer(dX.caller, (dl - dm), ae)] | |
1161 | + | else nil | |
1162 | + | let dV = (bA / 100) | |
1163 | + | let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, ex, ak)], nil)) | |
1164 | + | let em = valueOrElse(getInteger(Y), 0) | |
1165 | + | $Tuple2(((ax :+ ScriptTransfer(aB, dV, ae)) :+ IntegerEntry(Y, (em + dU))), $Tuple3(eg, ea, eh)) | |
1166 | + | } | |
1140 | 1167 | } | |
1141 | 1168 | } | |
1142 | 1169 | } | |
1170 | + | else throw("Strict value is not equal to itself.") | |
1143 | 1171 | } | |
1144 | 1172 | ||
1145 | 1173 | ||
1149 | 1177 | then throw("Delivery feature is turned off!") | |
1150 | 1178 | else { | |
1151 | 1179 | let ea = bF() | |
1152 | - | if ((size(dX.payments) != 1)) | |
1153 | - | then throw("exactly 1 payment must be attached") | |
1154 | - | else { | |
1155 | - | let dk = dX.payments[0] | |
1156 | - | let dl = dk.amount | |
1157 | - | if (if (!(isDefined(dk.assetId))) | |
1158 | - | then true | |
1159 | - | else (value(dk.assetId) != ae)) | |
1160 | - | then throw("USDT payments only!") | |
1161 | - | else { | |
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")) | |
1167 | - | else { | |
1168 | - | let ep = valueOrErrorMessage(getString(aC, L(W)), (("NFT " + eo.name) + " is orphaned")) | |
1169 | - | if ((ep != P)) | |
1170 | - | then throw((e + " is not yours")) | |
1171 | - | else { | |
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)) | |
1186 | - | then l | |
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)")) | |
1191 | - | else { | |
1192 | - | let ax = if (((dl - dm) > 0)) | |
1193 | - | then [ScriptTransfer(dX.caller, (dl - dm), ae)] | |
1194 | - | else nil | |
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)) | |
1198 | - | } | |
1199 | - | } | |
1200 | - | } | |
1201 | - | } | |
1202 | - | } | |
1180 | + | if ((ea == ea)) | |
1181 | + | then if ((size(dX.payments) != 1)) | |
1182 | + | then throw("exactly 1 payment must be attached") | |
1183 | + | else { | |
1184 | + | let dk = dX.payments[0] | |
1185 | + | let dl = dk.amount | |
1186 | + | if (if (!(isDefined(dk.assetId))) | |
1187 | + | then true | |
1188 | + | else (value(dk.assetId) != ae)) | |
1189 | + | then throw("USDT payments only!") | |
1190 | + | else { | |
1191 | + | let en = dX.caller | |
1192 | + | let P = toString(en) | |
1193 | + | let eo = value(assetInfo(fromBase58String(W))) | |
1194 | + | if (!(isDefined(getInteger(aC, N(W))))) | |
1195 | + | then throw((("NFT " + eo.name) + " is not staked")) | |
1196 | + | else { | |
1197 | + | let ep = valueOrErrorMessage(getString(aC, L(W)), (("NFT " + eo.name) + " is orphaned")) | |
1198 | + | if ((ep != P)) | |
1199 | + | then throw((e + " is not yours")) | |
1200 | + | else { | |
1201 | + | let dz = aF(invoke(aC, "getWarehouseREADONLY", [W], nil)) | |
1202 | + | let bY = split_4C(dz, ":") | |
1203 | + | let cK = split(bY[y], "_") | |
1204 | + | let cR = split(bY[z], "_") | |
1205 | + | let ez = cU(cK, cR, cM) | |
1206 | + | let ee = ez._1 | |
1207 | + | let es = ez._2 | |
1208 | + | let bA = ez._3 | |
1209 | + | let ex = ez._4 | |
1210 | + | let dH = makeString_2C([bY[x], makeString(ee, "_"), makeString(es, "_"), bY[A], bY[B]], ":") | |
1211 | + | let dJ = aF(invoke(aC, "saveWarehouse", [dH, W], nil)) | |
1212 | + | let eh = aI(invoke(aC, "updateAccStats", [P, fraction(a, ex, ak)], nil)) | |
1213 | + | let el = fraction(bA, aW, aj) | |
1214 | + | let dU = if ((l > el)) | |
1215 | + | then l | |
1216 | + | else el | |
1217 | + | let dm = (bA + dU) | |
1218 | + | if ((dm > dl)) | |
1219 | + | then throw((((((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)) + "+") + aL(dU, 6)) + "(delivery fee)")) | |
1220 | + | else { | |
1221 | + | let ax = if (((dl - dm) > 0)) | |
1222 | + | then [ScriptTransfer(dX.caller, (dl - dm), ae)] | |
1223 | + | else nil | |
1224 | + | let dV = (bA / 100) | |
1225 | + | let em = valueOrElse(getInteger(Y), 0) | |
1226 | + | $Tuple2(((ax :+ ScriptTransfer(aB, dV, ae)) :+ IntegerEntry(Y, (em + dU))), $Tuple3(dJ, ea, eh)) | |
1227 | + | } | |
1228 | + | } | |
1229 | + | } | |
1230 | + | } | |
1231 | + | } | |
1232 | + | else throw("Strict value is not equal to itself.") | |
1203 | 1233 | } | |
1204 | 1234 | ||
1205 | 1235 | ||
1207 | 1237 | @Callable(dX) | |
1208 | 1238 | func craftGoods (eA,eB) = { | |
1209 | 1239 | let ea = bF() | |
1210 | - | if ((size(dX.payments) != 1)) | |
1211 | - | then throw("exactly 1 payment must be attached") | |
1212 | - | else { | |
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)) | |
1217 | - | then throw("USDT payments only!") | |
1218 | - | else if ((dl != aj)) | |
1219 | - | then throw("exactly 1 USDT must be attached as payment") | |
1220 | - | else if ((0 >= eB)) | |
1221 | - | then throw("Quantity should be positive") | |
1222 | - | else { | |
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])) | |
1227 | - | else { | |
1228 | - | let eD = eb[I] | |
1229 | - | let ec = bC(S(T)) | |
1230 | - | let cR = split(ec[G], "_") | |
1231 | - | if (if ((0 > eA)) | |
1232 | - | then true | |
1233 | - | else (eA >= size(s))) | |
1234 | - | then throw(("Unknown product idx=" + toString(eA))) | |
1235 | - | else { | |
1236 | - | let ab = split(s[eA], "_") | |
1237 | - | if ((size(ab) != v)) | |
1238 | - | then throw(("Fatal: unknown recipe: " + s[eA])) | |
1239 | - | else { | |
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)) | |
1243 | - | else { | |
1244 | - | let eF = if ((ec[H] == "")) | |
1245 | - | then nil | |
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] | |
1251 | - | else "0" | |
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)) | |
1258 | - | } | |
1240 | + | if ((ea == ea)) | |
1241 | + | then if ((size(dX.payments) != 1)) | |
1242 | + | then throw("exactly 1 payment must be attached") | |
1243 | + | else { | |
1244 | + | let dk = dX.payments[0] | |
1245 | + | let dl = dk.amount | |
1246 | + | let eC = valueOrErrorMessage(dk.assetId, "WAVES can't be used as payment") | |
1247 | + | if ((eC != ae)) | |
1248 | + | then throw("USDT payments only!") | |
1249 | + | else if ((dl != aj)) | |
1250 | + | then throw("exactly 1 USDT must be attached as payment") | |
1251 | + | else if ((0 >= eB)) | |
1252 | + | then throw("Quantity should be positive") | |
1253 | + | else { | |
1254 | + | let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked") | |
1255 | + | let eb = split(valueOrElse(getString(aC, U(T)), g), "_") | |
1256 | + | if ((eb[J] != "M")) | |
1257 | + | then throw(("Duck location type should be Manufactory, but is " + eb[J])) | |
1258 | + | else { | |
1259 | + | let eD = eb[I] | |
1260 | + | let ec = bC(S(T)) | |
1261 | + | let cR = split(ec[G], "_") | |
1262 | + | if (if ((0 > eA)) | |
1263 | + | then true | |
1264 | + | else (eA >= size(s))) | |
1265 | + | then throw(("Unknown product idx=" + toString(eA))) | |
1266 | + | else { | |
1267 | + | let ab = split(s[eA], "_") | |
1268 | + | if ((size(ab) != v)) | |
1269 | + | then throw(("Fatal: unknown recipe: " + s[eA])) | |
1270 | + | else { | |
1271 | + | let eE = parseIntValue(ab[u]) | |
1272 | + | if ((q[eE] != eD)) | |
1273 | + | then throw(((("This product is available in " + q[eE]) + ", but you are in ") + eD)) | |
1274 | + | else { | |
1275 | + | let eF = if ((ec[H] == "")) | |
1276 | + | then nil | |
1277 | + | else split_4C(ec[H], "_") | |
1278 | + | func eG (bH,eH) = { | |
1279 | + | let aJ = bH._2 | |
1280 | + | let eI = if ((size(eF) > aJ)) | |
1281 | + | then eF[aJ] | |
1282 | + | else "0" | |
1283 | + | let dQ = parseIntValue(eI) | |
1284 | + | let bh = (eB * w) | |
1285 | + | let eJ = if ((aJ == eA)) | |
1286 | + | then toString((dQ + bh)) | |
1287 | + | else eI | |
1288 | + | $Tuple2((bH._1 :+ eJ), (aJ + 1)) | |
1289 | + | } | |
1259 | 1290 | ||
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]) | |
1266 | - | ||
1267 | - | func cr (cp,cq) = if ((cq >= cm)) | |
1268 | - | then cp | |
1269 | - | else throw("List size exceeds 50") | |
1270 | - | ||
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) | |
1280 | - | } | |
1281 | - | ||
1282 | - | let eO = { | |
1283 | - | let cl = an | |
1291 | + | let eK = ( let cl = s | |
1284 | 1292 | let cm = size(cl) | |
1285 | 1293 | let cn = $Tuple2(nil, 0) | |
1286 | - | func | |
1294 | + | func co (cp,cq) = if ((cq >= cm)) | |
1287 | 1295 | then cp | |
1288 | - | else | |
1296 | + | else eG(cp, cl[cq]) | |
1289 | 1297 | ||
1290 | - | func | |
1298 | + | func cr (cp,cq) = if ((cq >= cm)) | |
1291 | 1299 | then cp | |
1292 | - | else throw("List size exceeds | |
1300 | + | else throw("List size exceeds 50") | |
1293 | 1301 | ||
1294 | - | ct(cs(cs(cs(cs(cs(cs(cn, 0), 1), 2), 3), 4), 5), 6) | |
1302 | + | 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 | |
1303 | + | func eL (bH,bJ) = { | |
1304 | + | let eM = (((parseIntValue(ab[bJ]) * ai) * eB) * parseIntValue(ab[t])) | |
1305 | + | let eN = parseIntValue(cR[bJ]) | |
1306 | + | if ((eM > eN)) | |
1307 | + | then throw(((((((("You have " + aL(eN, 8)) + " of ") + o[bJ]) + ", but recipe requires ") + aL(eM, 8)) + " for quantity ") + toString(eB))) | |
1308 | + | else if ((eM > 0)) | |
1309 | + | then $Tuple2((bH._1 :+ toString((eN - eM))), (bH._2 + eM)) | |
1310 | + | else $Tuple2((bH._1 :+ cR[bJ]), bH._2) | |
1311 | + | } | |
1312 | + | ||
1313 | + | let eO = { | |
1314 | + | let cl = an | |
1315 | + | let cm = size(cl) | |
1316 | + | let cn = $Tuple2(nil, 0) | |
1317 | + | func cs (cp,cq) = if ((cq >= cm)) | |
1318 | + | then cp | |
1319 | + | else eL(cp, cl[cq]) | |
1320 | + | ||
1321 | + | func ct (cp,cq) = if ((cq >= cm)) | |
1322 | + | then cp | |
1323 | + | else throw("List size exceeds 6") | |
1324 | + | ||
1325 | + | ct(cs(cs(cs(cs(cs(cs(cn, 0), 1), 2), 3), 4), 5), 6) | |
1326 | + | } | |
1327 | + | let ef = makeString([ec[E], ec[F], makeString(eO._1, "_"), makeString_2C(eK, "_")], ":") | |
1328 | + | let eP = aF(invoke(aC, "updateBackpack", [T, ef], nil)) | |
1329 | + | let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(b, eO._2, ak)], nil)) | |
1330 | + | $Tuple2(nil, $Tuple3(eP, ea, eh)) | |
1295 | 1331 | } | |
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)) | |
1300 | - | } | |
1301 | - | } | |
1302 | - | } | |
1303 | - | } | |
1304 | - | } | |
1305 | - | } | |
1332 | + | } | |
1333 | + | } | |
1334 | + | } | |
1335 | + | } | |
1336 | + | } | |
1337 | + | else throw("Strict value is not equal to itself.") | |
1306 | 1338 | } | |
1307 | 1339 | ||
1308 | 1340 | ||
1374 | 1406 | @Callable(dX) | |
1375 | 1407 | func acceptWarehouseOrder (dq,dp,T) = { | |
1376 | 1408 | 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)) | |
1386 | - | else { | |
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] == "")) | |
1392 | - | then nil | |
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)) | |
1411 | - | } | |
1409 | + | if ((ea == ea)) | |
1410 | + | then { | |
1411 | + | let de = dX.originCaller | |
1412 | + | let cZ = toString(de) | |
1413 | + | let fb = valueOrErrorMessage(getString(aC, Q(cZ)), "You don't have a duck staked") | |
1414 | + | let eb = valueOrElse(getString(aC, U(fb)), g) | |
1415 | + | let fc = split(value(eb), "_") | |
1416 | + | if ((fc[J] != "L")) | |
1417 | + | then throw((("Duck location type is " + fc[J]) + ", but should be L")) | |
1418 | + | else if ((fb != T)) | |
1419 | + | then throw(((("Your staked duck is " + fb) + ", but passed ") + T)) | |
1420 | + | else { | |
1421 | + | let bD = S(T) | |
1422 | + | let ec = bC(bD) | |
1423 | + | let dr = split(ec[F], "_") | |
1424 | + | let ds = split(ec[G], "_") | |
1425 | + | let dt = if ((ec[H] == "")) | |
1426 | + | then nil | |
1427 | + | else split_4C(ec[H], "_") | |
1428 | + | let fd = do(dp, cZ, dq, dr, ds, dt) | |
1429 | + | let fe = fd._1 | |
1430 | + | let ff = fd._2 | |
1431 | + | let fg = fd._3 | |
1432 | + | let fh = fd._4 | |
1433 | + | let cY = fd._5 | |
1434 | + | let dg = fd._6 | |
1435 | + | let fi = fd._7 | |
1436 | + | let di = fd._8 | |
1437 | + | let fj = fd._9 | |
1438 | + | let dK = fd._10 | |
1439 | + | let fk = [fe, cX(cY, cZ, 0)] | |
1440 | + | let fl = df(dg, dX.payments, di, 0) | |
1441 | + | let fm = makeString_2C([ec[E], makeString(ff, "_"), makeString(fg, "_"), makeString_2C(fh, "_")], ":") | |
1442 | + | let fn = aF(invoke(aC, "updateBackpack", [T, fm], nil)) | |
1443 | + | let fo = aI(invoke(aC, "updateDuckStats", [T, fraction(d, fi, ak)], nil)) | |
1444 | + | $Tuple2((fk ++ fl), $Tuple5(ea, fj, fn, fo, dK)) | |
1445 | + | } | |
1446 | + | } | |
1447 | + | else throw("Strict value is not equal to itself.") | |
1412 | 1448 | } | |
1413 | 1449 | ||
1414 | 1450 | ||
1418 | 1454 | then throw("Delivery feature is turned off!") | |
1419 | 1455 | else { | |
1420 | 1456 | 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] == "")) | |
1429 | - | then nil | |
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)) | |
1444 | - | then k | |
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)) | |
1457 | + | if ((ea == ea)) | |
1458 | + | then { | |
1459 | + | let de = dX.originCaller | |
1460 | + | let cZ = toString(de) | |
1461 | + | let T = valueOrErrorMessage(getString(aC, Q(cZ)), "You don't have a duck staked") | |
1462 | + | let bD = S(T) | |
1463 | + | let ec = bC(bD) | |
1464 | + | let dr = split(ec[F], "_") | |
1465 | + | let ds = split(ec[G], "_") | |
1466 | + | let dt = if ((ec[H] == "")) | |
1467 | + | then nil | |
1468 | + | else split_4C(ec[H], "_") | |
1469 | + | let fq = do(dp, cZ, fp, dr, ds, dt) | |
1470 | + | let fe = fq._1 | |
1471 | + | let ff = fq._2 | |
1472 | + | let fg = fq._3 | |
1473 | + | let fh = fq._4 | |
1474 | + | let cY = fq._5 | |
1475 | + | let dg = fq._6 | |
1476 | + | let fi = fq._7 | |
1477 | + | let di = fq._8 | |
1478 | + | let fj = fq._9 | |
1479 | + | let dK = fq._10 | |
1480 | + | let fr = fraction((dg + cY), aV, aj) | |
1481 | + | let fs = if ((k > fr)) | |
1482 | + | then k | |
1483 | + | else fr | |
1484 | + | let dj = fraction(fs, dg, (dg + cY)) | |
1485 | + | let da = (fs - dj) | |
1486 | + | let em = valueOrElse(getInteger(Y), 0) | |
1487 | + | let fk = [fe, cX(cY, cZ, da)] | |
1488 | + | let fl = df(dg, dX.payments, di, dj) | |
1489 | + | let fm = makeString_2C([ec[E], makeString(ff, "_"), makeString(fg, "_"), makeString_2C(fh, "_")], ":") | |
1490 | + | let fn = aF(invoke(aC, "updateBackpack", [T, fm], nil)) | |
1491 | + | let fo = aI(invoke(aC, "updateDuckStats", [T, fraction(d, fi, ak)], nil)) | |
1492 | + | $Tuple2(((fk ++ fl) :+ IntegerEntry(Y, (em + fs))), $Tuple5(ea, fj, fn, fo, dK)) | |
1493 | + | } | |
1494 | + | else throw("Strict value is not equal to itself.") | |
1455 | 1495 | } | |
1456 | 1496 | ||
1457 | 1497 | ||
1461 | 1501 | then throw("Delivery feature is turned off!") | |
1462 | 1502 | else { | |
1463 | 1503 | 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")) | |
1469 | - | else { | |
1470 | - | let ep = valueOrErrorMessage(getString(aC, L(ft)), (("NFT " + eo.name) + " is orphaned")) | |
1471 | - | if ((ep != cZ)) | |
1472 | - | then throw((e + " is not yours")) | |
1504 | + | if ((ea == ea)) | |
1505 | + | then { | |
1506 | + | let de = dX.originCaller | |
1507 | + | let cZ = toString(de) | |
1508 | + | let eo = value(assetInfo(fromBase58String(ft))) | |
1509 | + | if (!(isDefined(getInteger(aC, N(ft))))) | |
1510 | + | then throw((("NFT " + eo.name) + " is not staked")) | |
1473 | 1511 | else { | |
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] == "")) | |
1479 | - | then nil | |
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)) | |
1494 | - | then k | |
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)) | |
1512 | + | let ep = valueOrErrorMessage(getString(aC, L(ft)), (("NFT " + eo.name) + " is orphaned")) | |
1513 | + | if ((ep != cZ)) | |
1514 | + | then throw((e + " is not yours")) | |
1515 | + | else { | |
1516 | + | let dz = aF(invoke(aC, "getWarehouseREADONLY", [ft], nil)) | |
1517 | + | let bY = split_4C(dz, ":") | |
1518 | + | let cK = split(bY[y], "_") | |
1519 | + | let cR = split(bY[z], "_") | |
1520 | + | let eF = if ((bY[A] == "")) | |
1521 | + | then nil | |
1522 | + | else split(bY[A], "_") | |
1523 | + | let fu = do(dp, cZ, fp, cK, cR, eF) | |
1524 | + | let fe = fu._1 | |
1525 | + | let ff = fu._2 | |
1526 | + | let fg = fu._3 | |
1527 | + | let fh = fu._4 | |
1528 | + | let cY = fu._5 | |
1529 | + | let dg = fu._6 | |
1530 | + | let fi = fu._7 | |
1531 | + | let di = fu._8 | |
1532 | + | let fj = fu._9 | |
1533 | + | let dK = fu._10 | |
1534 | + | let fr = fraction((dg + cY), aV, aj) | |
1535 | + | let fs = if ((k > fr)) | |
1536 | + | then k | |
1537 | + | else fr | |
1538 | + | let dj = fraction(fs, dg, (dg + cY)) | |
1539 | + | let da = (fs - dj) | |
1540 | + | let em = valueOrElse(getInteger(Y), 0) | |
1541 | + | let fk = [fe, cX(cY, cZ, da)] | |
1542 | + | let fl = df(dg, dX.payments, di, dj) | |
1543 | + | let dH = makeString_2C([bY[x], makeString(ff, "_"), makeString(fg, "_"), makeString(fh, "_"), bY[B]], ":") | |
1544 | + | let dJ = aF(invoke(aC, "saveWarehouse", [dH, ft], nil)) | |
1545 | + | let eh = aI(invoke(aC, "updateAccStats", [cZ, fraction(d, fi, ak)], nil)) | |
1546 | + | $Tuple2(((fk ++ fl) :+ IntegerEntry(Y, (em + fs))), $Tuple5(ea, fj, dJ, eh, dK)) | |
1547 | + | } | |
1505 | 1548 | } | |
1506 | 1549 | } | |
1550 | + | else throw("Strict value is not equal to itself.") | |
1507 | 1551 | } | |
1508 | 1552 | ||
1509 | 1553 | ||
1511 | 1555 | @Callable(dX) | |
1512 | 1556 | func sellProductsToES (cM) = { | |
1513 | 1557 | let ea = bF() | |
1514 | - | if ((size(dX.payments) != 0)) | |
1515 | - | then throw("No payments needed") | |
1516 | - | else { | |
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])) | |
1521 | - | else { | |
1522 | - | let ec = bC(S(T)) | |
1523 | - | let eF = if ((ec[H] == "")) | |
1524 | - | then nil | |
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), "_") | |
1530 | - | else nil | |
1531 | - | func fy (bH,fz) = { | |
1532 | - | let bJ = bH._1 | |
1533 | - | let eB = if ((size(cM) > bJ)) | |
1534 | - | then cM[bJ] | |
1535 | - | else 0 | |
1536 | - | if ((0 > eB)) | |
1537 | - | then throw("Quantity cannot be negative") | |
1538 | - | else { | |
1539 | - | let ab = split(fz, "_") | |
1540 | - | if ((size(ab) != v)) | |
1541 | - | then throw(("Fatal: unknown recipe: " + fz)) | |
1542 | - | else { | |
1543 | - | let fA = (i * w) | |
1544 | - | let fB = if ((size(fx) > bJ)) | |
1545 | - | then parseIntValue(fx[bJ]) | |
1546 | - | else 0 | |
1547 | - | let fC = (fA - fB) | |
1548 | - | if ((eB > fC)) | |
1549 | - | then throw(((("Warehouse can buy only " + toString(fC)) + " of ") + p[bJ])) | |
1550 | - | else { | |
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]) | |
1555 | - | else 0 | |
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))) | |
1559 | - | } | |
1560 | - | } | |
1561 | - | } | |
1558 | + | if ((ea == ea)) | |
1559 | + | then if ((size(dX.payments) != 0)) | |
1560 | + | then throw("No payments needed") | |
1561 | + | else { | |
1562 | + | let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked") | |
1563 | + | let eb = split(valueOrElse(getString(aC, U(T)), g), "_") | |
1564 | + | if ((eb[J] != "A")) | |
1565 | + | then throw(("Duck location type should be Airport, but is " + eb[J])) | |
1566 | + | else { | |
1567 | + | let ec = bC(S(T)) | |
1568 | + | let eF = if ((ec[H] == "")) | |
1569 | + | then nil | |
1570 | + | else split_4C(ec[H], "_") | |
1571 | + | let fv = X() | |
1572 | + | let fw = getString(fv) | |
1573 | + | let fx = if (isDefined(fw)) | |
1574 | + | then split_4C(value(fw), "_") | |
1575 | + | else nil | |
1576 | + | func fy (bH,fz) = { | |
1577 | + | let bJ = bH._1 | |
1578 | + | let eB = if ((size(cM) > bJ)) | |
1579 | + | then cM[bJ] | |
1580 | + | else 0 | |
1581 | + | if ((0 > eB)) | |
1582 | + | then throw("Quantity cannot be negative") | |
1583 | + | else { | |
1584 | + | let ab = split(fz, "_") | |
1585 | + | if ((size(ab) != v)) | |
1586 | + | then throw(("Fatal: unknown recipe: " + fz)) | |
1587 | + | else { | |
1588 | + | let fA = (i * w) | |
1589 | + | let fB = if ((size(fx) > bJ)) | |
1590 | + | then parseIntValue(fx[bJ]) | |
1591 | + | else 0 | |
1592 | + | let fC = (fA - fB) | |
1593 | + | if ((eB > fC)) | |
1594 | + | then throw(((("Warehouse can buy only " + toString(fC)) + " of ") + p[bJ])) | |
1595 | + | else { | |
1596 | + | let et = aa(ab) | |
1597 | + | let fD = fraction((et * j), h, (ak * w)) | |
1598 | + | let fE = if ((size(eF) > bJ)) | |
1599 | + | then parseIntValue(eF[bJ]) | |
1600 | + | else 0 | |
1601 | + | if ((eB > fE)) | |
1602 | + | then throw(((("You have only " + toString(fE)) + " of ") + p[bJ])) | |
1603 | + | else $Tuple5((bJ + 1), (bH._2 + (fD * eB)), (bH._3 :+ toString((fE - eB))), (bH._4 :+ toString((fB + eB))), (bH._5 + (et * eB))) | |
1604 | + | } | |
1605 | + | } | |
1606 | + | } | |
1607 | + | } | |
1608 | + | ||
1609 | + | let eO = { | |
1610 | + | let cl = s | |
1611 | + | let cm = size(cl) | |
1612 | + | let cn = $Tuple5(0, 0, nil, nil, 0) | |
1613 | + | func co (cp,cq) = if ((cq >= cm)) | |
1614 | + | then cp | |
1615 | + | else fy(cp, cl[cq]) | |
1616 | + | ||
1617 | + | func cr (cp,cq) = if ((cq >= cm)) | |
1618 | + | then cp | |
1619 | + | else throw("List size exceeds 50") | |
1620 | + | ||
1621 | + | 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) | |
1622 | + | } | |
1623 | + | let fm = makeString_2C([ec[E], ec[F], ec[G], makeString_2C(eO._3, "_")], ":") | |
1624 | + | let fn = aF(invoke(aC, "updateBackpack", [T, fm], nil)) | |
1625 | + | let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(c, eO._5, (ak * 10))], nil)) | |
1626 | + | $Tuple2([StringEntry(fv, makeString_2C(eO._4, "_")), ScriptTransfer(dX.caller, eO._2, ae)], $Tuple3(fn, ea, eh)) | |
1562 | 1627 | } | |
1563 | - | ||
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]) | |
1571 | - | ||
1572 | - | func cr (cp,cq) = if ((cq >= cm)) | |
1573 | - | then cp | |
1574 | - | else throw("List size exceeds 50") | |
1575 | - | ||
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) | |
1577 | - | } | |
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)) | |
1582 | - | } | |
1583 | - | } | |
1628 | + | } | |
1629 | + | else throw("Strict value is not equal to itself.") | |
1584 | 1630 | } | |
1585 | 1631 | ||
1586 | 1632 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = 10000 | |
5 | 5 | ||
6 | 6 | let b = 10000 | |
7 | 7 | ||
8 | 8 | let c = 10000 | |
9 | 9 | ||
10 | 10 | let d = 10000 | |
11 | 11 | ||
12 | 12 | let e = "LAND" | |
13 | 13 | ||
14 | 14 | let f = 6 | |
15 | 15 | ||
16 | 16 | let g = "Africa_F_Africa" | |
17 | 17 | ||
18 | 18 | let h = 39637 | |
19 | 19 | ||
20 | 20 | let i = 10 | |
21 | 21 | ||
22 | 22 | let j = 4 | |
23 | 23 | ||
24 | 24 | let k = 50000 | |
25 | 25 | ||
26 | 26 | let l = 75000 | |
27 | 27 | ||
28 | 28 | let m = 10 | |
29 | 29 | ||
30 | 30 | let n = ["Oil", "Ore", "Wood", "Sand", "Clay", "Organic"] | |
31 | 31 | ||
32 | 32 | let o = ["Fuel", "Metal", "Plank", "Glass", "Plastic", "Protein"] | |
33 | 33 | ||
34 | 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"] | |
35 | 35 | ||
36 | 36 | let q = ["Americas", "Europe", "Asia", "Africa", "Oceania"] | |
37 | 37 | ||
38 | 38 | let r = 10000000 | |
39 | 39 | ||
40 | 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_"] | |
41 | 41 | ||
42 | 42 | let t = 6 | |
43 | 43 | ||
44 | 44 | let u = 7 | |
45 | 45 | ||
46 | 46 | let v = 11 | |
47 | 47 | ||
48 | 48 | let w = 10 | |
49 | 49 | ||
50 | 50 | let x = 0 | |
51 | 51 | ||
52 | 52 | let y = 1 | |
53 | 53 | ||
54 | 54 | let z = 2 | |
55 | 55 | ||
56 | 56 | let A = 3 | |
57 | 57 | ||
58 | 58 | let B = 4 | |
59 | 59 | ||
60 | 60 | let C = 0 | |
61 | 61 | ||
62 | 62 | let D = 3 | |
63 | 63 | ||
64 | 64 | let E = 0 | |
65 | 65 | ||
66 | 66 | let F = 1 | |
67 | 67 | ||
68 | 68 | let G = 2 | |
69 | 69 | ||
70 | 70 | let H = 3 | |
71 | 71 | ||
72 | 72 | let I = 0 | |
73 | 73 | ||
74 | 74 | let J = 1 | |
75 | 75 | ||
76 | 76 | let K = 2 | |
77 | 77 | ||
78 | 78 | func L (M) = ("no_" + M) | |
79 | 79 | ||
80 | 80 | ||
81 | 81 | func N (M) = ("st_" + M) | |
82 | 82 | ||
83 | 83 | ||
84 | 84 | func O (P) = ("accRefBy_" + P) | |
85 | 85 | ||
86 | 86 | ||
87 | 87 | func Q (R) = ("stakedDuckByOwner_" + R) | |
88 | 88 | ||
89 | 89 | ||
90 | 90 | func S (T) = ("backPack_" + T) | |
91 | 91 | ||
92 | 92 | ||
93 | 93 | func U (T) = ("duckLocation_" + T) | |
94 | 94 | ||
95 | 95 | ||
96 | 96 | func V (W) = ("landOrder_" + W) | |
97 | 97 | ||
98 | 98 | ||
99 | 99 | func X () = "emergencyWarehouseProducts" | |
100 | 100 | ||
101 | 101 | ||
102 | 102 | let Y = "deliveryFund" | |
103 | 103 | ||
104 | 104 | let Z = "deliveryLocked" | |
105 | 105 | ||
106 | 106 | func aa (ab) = (parseIntValue(ab[t]) * r) | |
107 | 107 | ||
108 | 108 | ||
109 | 109 | let ac = true | |
110 | 110 | ||
111 | 111 | let ad = take(drop(this.bytes, 1), 1) | |
112 | 112 | ||
113 | 113 | let ae = { | |
114 | 114 | let af = ad | |
115 | 115 | if ((base58'2W' == af)) | |
116 | 116 | then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi' | |
117 | 117 | else if ((base58'2T' == af)) | |
118 | 118 | then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63' | |
119 | 119 | else throw("Unknown chain") | |
120 | 120 | } | |
121 | 121 | ||
122 | 122 | let ag = { | |
123 | 123 | let af = ad | |
124 | 124 | if ((base58'2W' == af)) | |
125 | 125 | then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv" | |
126 | 126 | else if ((base58'2T' == af)) | |
127 | 127 | then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy" | |
128 | 128 | else throw("Unknown chain") | |
129 | 129 | } | |
130 | 130 | ||
131 | 131 | let ah = "__" | |
132 | 132 | ||
133 | 133 | let ai = 100000 | |
134 | 134 | ||
135 | 135 | let aj = 1000000 | |
136 | 136 | ||
137 | 137 | let ak = 100000000 | |
138 | 138 | ||
139 | 139 | let al = 10000000000 | |
140 | 140 | ||
141 | 141 | let am = 100000 | |
142 | 142 | ||
143 | 143 | let an = [0, 1, 2, 3, 4, 5] | |
144 | 144 | ||
145 | 145 | func ao (ap,aq) = valueOrErrorMessage(getString(ap, aq), makeString(["mandatory ", toString(ap), ".", aq, " is not defined"], "")) | |
146 | 146 | ||
147 | 147 | ||
148 | 148 | let ar = 1 | |
149 | 149 | ||
150 | 150 | let as = 6 | |
151 | 151 | ||
152 | 152 | let at = 8 | |
153 | 153 | ||
154 | 154 | func au () = "%s__restConfig" | |
155 | 155 | ||
156 | 156 | ||
157 | 157 | func av () = "%s__restAddr" | |
158 | 158 | ||
159 | 159 | ||
160 | 160 | func aw (ax) = split_4C(ao(ax, au()), ah) | |
161 | 161 | ||
162 | 162 | ||
163 | 163 | func ay (az,aA) = valueOrErrorMessage(addressFromString(az[aA]), ("Rest cfg doesn't contain address at index " + toString(aA))) | |
164 | 164 | ||
165 | 165 | ||
166 | 166 | let aB = addressFromStringValue(valueOrElse(getString(this, av()), ag)) | |
167 | 167 | ||
168 | 168 | let az = aw(aB) | |
169 | 169 | ||
170 | 170 | let aC = ay(az, ar) | |
171 | 171 | ||
172 | 172 | let aD = ay(az, as) | |
173 | 173 | ||
174 | 174 | let aE = ay(az, at) | |
175 | 175 | ||
176 | 176 | func aF (aG) = { | |
177 | 177 | let af = aG | |
178 | 178 | if ($isInstanceOf(af, "String")) | |
179 | 179 | then { | |
180 | 180 | let aH = af | |
181 | 181 | aH | |
182 | 182 | } | |
183 | 183 | else throw("fail to cast into String") | |
184 | 184 | } | |
185 | 185 | ||
186 | 186 | ||
187 | 187 | func aI (aG) = { | |
188 | 188 | let af = aG | |
189 | 189 | if ($isInstanceOf(af, "Int")) | |
190 | 190 | then { | |
191 | 191 | let aJ = af | |
192 | 192 | aJ | |
193 | 193 | } | |
194 | 194 | else throw("fail to cast into Int") | |
195 | 195 | } | |
196 | 196 | ||
197 | 197 | ||
198 | 198 | func aK () = "contractsBlocked" | |
199 | 199 | ||
200 | 200 | ||
201 | 201 | func aL (aM,aN) = { | |
202 | 202 | let aO = pow(10, 0, aN, 0, 0, DOWN) | |
203 | 203 | let aP = toString((aM % aO)) | |
204 | 204 | let aQ = drop(toString(aO), (1 + size(aP))) | |
205 | 205 | (((toString((aM / aO)) + ".") + aQ) + aP) | |
206 | 206 | } | |
207 | 207 | ||
208 | 208 | ||
209 | 209 | let aR = 10000000000 | |
210 | 210 | ||
211 | 211 | let aS = 200 | |
212 | 212 | ||
213 | 213 | let aT = 300 | |
214 | 214 | ||
215 | 215 | let aU = 10000 | |
216 | 216 | ||
217 | 217 | let aV = 10000 | |
218 | 218 | ||
219 | 219 | let aW = 15000 | |
220 | 220 | ||
221 | 221 | func aX (aY,aZ) = ((("factoryWhByContinentAndRes_" + aY) + "_") + toString(aZ)) | |
222 | 222 | ||
223 | 223 | ||
224 | 224 | let ba = 0 | |
225 | 225 | ||
226 | 226 | let bb = 1 | |
227 | 227 | ||
228 | 228 | let bc = 2 | |
229 | 229 | ||
230 | 230 | func bd (be) = { | |
231 | 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 | 232 | [if ((size(split(bf[ba], "_")) == f)) | |
233 | 233 | then bf[ba] | |
234 | 234 | else "0@0_0@0_0@0_0@0_0@0_0@0", if ((size(split(bf[bb], "_")) == f)) | |
235 | 235 | then bf[bb] | |
236 | 236 | else "0@0_0@0_0@0_0@0_0@0_0@0", bf[bc]] | |
237 | 237 | } | |
238 | 238 | ||
239 | 239 | ||
240 | 240 | func bg (bh,bi,bj) = if (bj) | |
241 | 241 | then { | |
242 | 242 | let bk = if ((bh >= 0)) | |
243 | 243 | then (((bh + bi) - 1) / bi) | |
244 | 244 | else -((((-(bh) + bi) - 1) / bi)) | |
245 | 245 | (bk * ak) | |
246 | 246 | } | |
247 | 247 | else bh | |
248 | 248 | ||
249 | 249 | ||
250 | 250 | func bl (bm,aZ,bh,bn) = { | |
251 | 251 | let bo = aX(bm, aZ) | |
252 | 252 | let bp = valueOrElse(getInteger(bo), 0) | |
253 | 253 | let bq = if ((bp > aR)) | |
254 | 254 | then 0 | |
255 | 255 | else if (((bp + bh) > aR)) | |
256 | 256 | then (aR - bp) | |
257 | 257 | else bh | |
258 | 258 | let br = (fraction(bq, ((aS * h) - fraction(((100 * bp) + (50 * bq)), h, aR)), al) + fraction((bh - bq), h, ak)) | |
259 | 259 | let bs = (bn - (bn / 100)) | |
260 | 260 | if (((bs * bh) > (br * ak))) | |
261 | 261 | then throw((((((((((("Actual price = " + toString(br)) + " / ") + toString(bh)) + " < minPrice = ") + toString(bn)) + ", (") + bm) + ", ") + n[aZ]) + ")")) | |
262 | 262 | else $Tuple2(IntegerEntry(bo, (bp + bh)), br) | |
263 | 263 | } | |
264 | 264 | ||
265 | 265 | ||
266 | 266 | func bt (bm,bu,bh,bv) = { | |
267 | 267 | let bo = aX(bm, bu) | |
268 | 268 | let bp = valueOrElse(getInteger(bo), 0) | |
269 | 269 | let bw = if ((bp > aR)) | |
270 | 270 | then min([bh, (bp - aR)]) | |
271 | 271 | else 0 | |
272 | 272 | let bx = min([bp, (bh - bw)]) | |
273 | 273 | let by = (bx + bw) | |
274 | 274 | let bz = min([bp, aR]) | |
275 | 275 | let bA = (fraction(bx, ((aT * h) - fraction(((100 * bz) - (50 * bx)), h, aR)), al) + fraction(bw, (2 * h), ak)) | |
276 | 276 | let bB = (bv + (bv / 100)) | |
277 | 277 | if (((bA * ak) > (bB * by))) | |
278 | 278 | then throw((((((((((("Actual price = " + toString(bA)) + " / ") + toString(by)) + " > maxPrice = ") + toString(bv)) + ", (") + bm) + ", ") + o[bu]) + ")")) | |
279 | 279 | else $Tuple3(IntegerEntry(bo, (bp - by)), bA, by) | |
280 | 280 | } | |
281 | 281 | ||
282 | 282 | ||
283 | 283 | func bC (bD) = { | |
284 | 284 | let bf = split_4C(valueOrElse(getString(aC, bD), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":") | |
285 | 285 | [toString(valueOrElse(parseInt(bf[E]), 0)), if ((size(split(bf[F], "_")) == f)) | |
286 | 286 | then bf[F] | |
287 | 287 | else "0_0_0_0_0_0", if ((size(split(bf[G], "_")) == f)) | |
288 | 288 | then bf[G] | |
289 | 289 | else "0_0_0_0_0_0", bf[H]] | |
290 | 290 | } | |
291 | 291 | ||
292 | 292 | ||
293 | 293 | func bE () = if (valueOrElse(getBoolean(aC, aK()), false)) | |
294 | 294 | then throw("Contracts are under maintenance") | |
295 | 295 | else unit | |
296 | 296 | ||
297 | 297 | ||
298 | - | func bF () = aI( | |
298 | + | func bF () = aI(reentrantInvoke(aC, "saveLastTx", nil, nil)) | |
299 | 299 | ||
300 | 300 | ||
301 | 301 | func bG (bH,bI) = { | |
302 | 302 | let bJ = bH._1 | |
303 | 303 | let bK = if ((size(bH._10) > bJ)) | |
304 | 304 | then bH._10[bJ] | |
305 | 305 | else "0@0" | |
306 | 306 | let bL = bH._8 | |
307 | 307 | let bM = split(bK, "@") | |
308 | 308 | if ((size(bM) != 2)) | |
309 | 309 | then throw("Incorrect order format, should be amount@price") | |
310 | 310 | else { | |
311 | 311 | let bN = parseIntValue(bM[0]) | |
312 | 312 | let bO = parseIntValue(bM[1]) | |
313 | 313 | let bP = if (bL) | |
314 | 314 | then (bN * bO) | |
315 | 315 | else fraction(bN, bO, ak) | |
316 | 316 | let bQ = bg(bN, w, bL) | |
317 | 317 | let bR = if ((size(bH._6) > bJ)) | |
318 | 318 | then parseIntValue(bH._6[bJ]) | |
319 | 319 | else 0 | |
320 | 320 | let bS = split(if ((size(bH._7) > bJ)) | |
321 | 321 | then bH._7[bJ] | |
322 | 322 | else "0@0", "@") | |
323 | 323 | let bT = parseIntValue(bS[0]) | |
324 | 324 | let bU = parseIntValue(bS[1]) | |
325 | 325 | if (if ((0 > bU)) | |
326 | 326 | then true | |
327 | 327 | else (0 > bO)) | |
328 | 328 | then throw("Price can't be negative") | |
329 | 329 | else { | |
330 | 330 | let bV = if (bL) | |
331 | 331 | then (bT * bU) | |
332 | 332 | else fraction(bT, bU, ak) | |
333 | 333 | if ((bN == 0)) | |
334 | 334 | then if ((bT > 0)) | |
335 | 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 | 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 | 337 | else if ((bN > 0)) | |
338 | 338 | then if ((0 > bT)) | |
339 | 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 | 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 | 341 | else if ((0 > bT)) | |
342 | 342 | then { | |
343 | 343 | let bW = (bT - bN) | |
344 | 344 | if ((0 > (bR - bW))) | |
345 | 345 | then throw((((("Attempt to take " + toString(bW)) + " from warehouse, but only ") + toString(bR)) + " available")) | |
346 | 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) | |
347 | 347 | } | |
348 | 348 | else if ((0 > (bR + bN))) | |
349 | 349 | then throw((((("Attempt to take " + toString(-(bN))) + " from warehouse, but only ") + toString(bR)) + " available")) | |
350 | 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) | |
351 | 351 | } | |
352 | 352 | } | |
353 | 353 | } | |
354 | 354 | ||
355 | 355 | ||
356 | 356 | func bX (bY,bZ,ca) = { | |
357 | 357 | let cb = split(bY[y], "_") | |
358 | 358 | let cc = split(bY[z], "_") | |
359 | 359 | let cd = if ((bY[A] == "")) | |
360 | 360 | then nil | |
361 | 361 | else split_4C(bY[A], "_") | |
362 | 362 | let ce = split(bZ[ba], "_") | |
363 | 363 | let cf = split(bZ[bb], "_") | |
364 | 364 | let cg = if ((bZ[bc] == "")) | |
365 | 365 | then nil | |
366 | 366 | else split_4C(bZ[bc], "_") | |
367 | 367 | if ((size(ca) != 3)) | |
368 | 368 | then throw("newOrderStr should contain exactly 2 ':' separators") | |
369 | 369 | else { | |
370 | 370 | let ch = split(ca[0], "_") | |
371 | 371 | let ci = split(ca[1], "_") | |
372 | 372 | let cj = if ((ca[2] == "")) | |
373 | 373 | then nil | |
374 | 374 | else split_4C(ca[2], "_") | |
375 | 375 | if ((size(ch) != f)) | |
376 | 376 | then throw("All 6 resources should be passed") | |
377 | 377 | else if ((size(ci) != f)) | |
378 | 378 | then throw("All 6 materials should be passed") | |
379 | 379 | else { | |
380 | 380 | let ck = { | |
381 | 381 | let cl = n | |
382 | 382 | let cm = size(cl) | |
383 | 383 | let cn = $Tuple10(0, nil, 0, 0, 0, cb, ce, false, 0, ch) | |
384 | 384 | func co (cp,cq) = if ((cq >= cm)) | |
385 | 385 | then cp | |
386 | 386 | else bG(cp, cl[cq]) | |
387 | 387 | ||
388 | 388 | func cr (cp,cq) = if ((cq >= cm)) | |
389 | 389 | then cp | |
390 | 390 | else throw("List size exceeds 6") | |
391 | 391 | ||
392 | 392 | cr(co(co(co(co(co(co(cn, 0), 1), 2), 3), 4), 5), 6) | |
393 | 393 | } | |
394 | 394 | let by = { | |
395 | 395 | let cl = o | |
396 | 396 | let cm = size(cl) | |
397 | 397 | let cn = $Tuple10(0, nil, ck._3, ck._4, ck._5, cc, cf, false, ck._9, ci) | |
398 | 398 | func cs (cp,cq) = if ((cq >= cm)) | |
399 | 399 | then cp | |
400 | 400 | else bG(cp, cl[cq]) | |
401 | 401 | ||
402 | 402 | func ct (cp,cq) = if ((cq >= cm)) | |
403 | 403 | then cp | |
404 | 404 | else throw("List size exceeds 6") | |
405 | 405 | ||
406 | 406 | ct(cs(cs(cs(cs(cs(cs(cn, 0), 1), 2), 3), 4), 5), 6) | |
407 | 407 | } | |
408 | 408 | let bf = { | |
409 | 409 | let cl = p | |
410 | 410 | let cm = size(cl) | |
411 | 411 | let cn = $Tuple10(0, nil, by._3, by._4, by._5, cd, cg, true, by._9, cj) | |
412 | 412 | func cu (cp,cq) = if ((cq >= cm)) | |
413 | 413 | then cp | |
414 | 414 | else bG(cp, cl[cq]) | |
415 | 415 | ||
416 | 416 | func cv (cp,cq) = if ((cq >= cm)) | |
417 | 417 | then cp | |
418 | 418 | else throw("List size exceeds 50") | |
419 | 419 | ||
420 | 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) | |
421 | 421 | } | |
422 | 422 | $Tuple7(ck._2, by._2, bf._2, bf._3, bf._4, bf._5, bf._9) | |
423 | 423 | } | |
424 | 424 | } | |
425 | 425 | } | |
426 | 426 | ||
427 | 427 | ||
428 | 428 | func cw (bH,cx) = { | |
429 | 429 | let bJ = bH._7 | |
430 | 430 | let bL = bH._12 | |
431 | 431 | let cy = split(cx, "@") | |
432 | 432 | if ((size(cy) != 2)) | |
433 | 433 | then throw("Incorrect order format, should be amount@price") | |
434 | 434 | else { | |
435 | 435 | let cz = parseIntValue(cy[0]) | |
436 | 436 | let cA = parseIntValue(cy[1]) | |
437 | 437 | if ((0 > cA)) | |
438 | 438 | then throw("Price can't be negative") | |
439 | 439 | else { | |
440 | 440 | let cB = if (bL) | |
441 | 441 | then (cz * cA) | |
442 | 442 | else fraction(cz, cA, ak) | |
443 | 443 | let cC = if ((size(bH._8) > bJ)) | |
444 | 444 | then parseIntValue(bH._8[bJ]) | |
445 | 445 | else 0 | |
446 | 446 | let bR = if ((size(bH._9) > bJ)) | |
447 | 447 | then parseIntValue(bH._9[bJ]) | |
448 | 448 | else 0 | |
449 | 449 | let cD = if ((size(bH._10) > bJ)) | |
450 | 450 | then bH._10[bJ] | |
451 | 451 | else "0@0" | |
452 | 452 | let cE = split(cD, "@") | |
453 | 453 | let cF = parseIntValue(cE[0]) | |
454 | 454 | let cG = parseIntValue(cE[1]) | |
455 | 455 | if (if ((cz != 0)) | |
456 | 456 | then (cA != cG) | |
457 | 457 | else false) | |
458 | 458 | then throw(((((("Prices of " + bH._11[bJ]) + " don't match! WH price=") + toString(cG)) + ", your price=") + toString(cA))) | |
459 | 459 | else { | |
460 | 460 | let cH = if (bL) | |
461 | 461 | then (cF * cG) | |
462 | 462 | else fraction(cF, cG, ak) | |
463 | 463 | let cI = bg(cz, w, bL) | |
464 | 464 | if ((cz == 0)) | |
465 | 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 | 466 | else if ((cz > 0)) | |
467 | 467 | then if ((0 > cF)) | |
468 | 468 | then if ((cz > -(cF))) | |
469 | 469 | then throw(((((("Attempt to buy " + toString(cz)) + " of ") + bH._11[bJ]) + ", but warehouse only sells ") + toString(-(cF)))) | |
470 | 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 | 471 | then (cz * ak) | |
472 | 472 | else cz))) | |
473 | 473 | else throw((("Attempt to buy " + bH._11[bJ]) + " while warehouse doesn't sell it")) | |
474 | 474 | else if ((cF > 0)) | |
475 | 475 | then if ((-(cz) > cF)) | |
476 | 476 | then throw(((((("Attempt to sell " + toString(-(cz))) + " of ") + bH._11[bJ]) + ", but warehouse only buys ") + toString(cF))) | |
477 | 477 | else if ((-(cz) > cC)) | |
478 | 478 | then throw(((((("Attempt to sell " + toString(-(cz))) + ", but you only have ") + toString(cC)) + " of ") + bH._11[bJ])) | |
479 | 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 | 480 | then (cz * ak) | |
481 | 481 | else cz))) | |
482 | 482 | else throw((("Attempt to sell " + bH._11[bJ]) + " while warehouse doesn't buy it")) | |
483 | 483 | } | |
484 | 484 | } | |
485 | 485 | } | |
486 | 486 | } | |
487 | 487 | ||
488 | 488 | ||
489 | 489 | func cJ (cK,cL,cM,cN) = { | |
490 | 490 | func cO (bH,bJ) = if ((cM[bJ] > parseIntValue(cK[bJ]))) | |
491 | 491 | then throw(((((("You have " + cK[bJ]) + " of ") + n[bJ]) + ", but tried to sell ") + toString(cM[bJ]))) | |
492 | 492 | else if ((0 > cM[bJ])) | |
493 | 493 | then throw(((("You tried to sell negative amount of " + n[bJ]) + ": ") + toString(cM[bJ]))) | |
494 | 494 | else if ((cM[bJ] > 0)) | |
495 | 495 | then { | |
496 | 496 | let cP = bl(cL, bJ, cM[bJ], cN[bJ]) | |
497 | 497 | $Tuple4((bH._1 :+ cP._1), (bH._2 :+ toString((parseIntValue(cK[bJ]) - cM[bJ]))), (bH._3 + cP._2), (bH._4 + cM[bJ])) | |
498 | 498 | } | |
499 | 499 | else $Tuple4(bH._1, (bH._2 :+ cK[bJ]), bH._3, bH._4) | |
500 | 500 | ||
501 | 501 | let cl = an | |
502 | 502 | let cm = size(cl) | |
503 | 503 | let cn = $Tuple4(nil, nil, 0, 0) | |
504 | 504 | func co (cp,cq) = if ((cq >= cm)) | |
505 | 505 | then cp | |
506 | 506 | else cO(cp, cl[cq]) | |
507 | 507 | ||
508 | 508 | func cr (cp,cq) = if ((cq >= cm)) | |
509 | 509 | then cp | |
510 | 510 | else throw("List size exceeds 6") | |
511 | 511 | ||
512 | 512 | cr(co(co(co(co(co(co(cn, 0), 1), 2), 3), 4), 5), 6) | |
513 | 513 | } | |
514 | 514 | ||
515 | 515 | ||
516 | 516 | func cQ (cR,cL,cM,cS) = { | |
517 | 517 | func cT (bH,bJ) = if ((0 > cM[bJ])) | |
518 | 518 | then throw(((("You tried to buy negative amount of " + o[bJ]) + ": ") + toString(cM[bJ]))) | |
519 | 519 | else if ((cM[bJ] > 0)) | |
520 | 520 | then { | |
521 | 521 | let cP = bt(cL, bJ, cM[bJ], cS[bJ]) | |
522 | 522 | $Tuple4((bH._1 :+ cP._1), (bH._2 :+ toString((parseIntValue(cR[bJ]) + cP._3))), (bH._3 + cP._2), (bH._4 + cM[bJ])) | |
523 | 523 | } | |
524 | 524 | else $Tuple4(bH._1, (bH._2 :+ cR[bJ]), bH._3, bH._4) | |
525 | 525 | ||
526 | 526 | let cl = an | |
527 | 527 | let cm = size(cl) | |
528 | 528 | let cn = $Tuple4(nil, nil, 0, 0) | |
529 | 529 | func co (cp,cq) = if ((cq >= cm)) | |
530 | 530 | then cp | |
531 | 531 | else cT(cp, cl[cq]) | |
532 | 532 | ||
533 | 533 | func cr (cp,cq) = if ((cq >= cm)) | |
534 | 534 | then cp | |
535 | 535 | else throw("List size exceeds 6") | |
536 | 536 | ||
537 | 537 | cr(co(co(co(co(co(co(cn, 0), 1), 2), 3), 4), 5), 6) | |
538 | 538 | } | |
539 | 539 | ||
540 | 540 | ||
541 | 541 | func cU (cK,cR,cM) = { | |
542 | 542 | func cV (bH,bJ) = { | |
543 | 543 | let cW = cM[bJ] | |
544 | 544 | if ((cW > parseIntValue(cK[bJ]))) | |
545 | 545 | then throw(((((("You have " + cK[bJ]) + " of ") + n[bJ]) + ", but tried to exchange ") + toString(cW))) | |
546 | 546 | else if ((0 > cW)) | |
547 | 547 | then throw(((("You tried to exchange negative amount of " + n[bJ]) + ": ") + toString(cW))) | |
548 | 548 | else if ((cW > 0)) | |
549 | 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 | 550 | else $Tuple4((bH._1 :+ cK[bJ]), (bH._2 :+ cR[bJ]), bH._3, bH._4) | |
551 | 551 | } | |
552 | 552 | ||
553 | 553 | let cl = an | |
554 | 554 | let cm = size(cl) | |
555 | 555 | let cn = $Tuple4(nil, nil, 0, 0) | |
556 | 556 | func co (cp,cq) = if ((cq >= cm)) | |
557 | 557 | then cp | |
558 | 558 | else cV(cp, cl[cq]) | |
559 | 559 | ||
560 | 560 | func cr (cp,cq) = if ((cq >= cm)) | |
561 | 561 | then cp | |
562 | 562 | else throw("List size exceeds 6") | |
563 | 563 | ||
564 | 564 | cr(co(co(co(co(co(co(cn, 0), 1), 2), 3), 4), 5), 6) | |
565 | 565 | } | |
566 | 566 | ||
567 | 567 | ||
568 | 568 | func cX (cY,cZ,da) = if ((cY > 0)) | |
569 | 569 | then { | |
570 | 570 | let db = fraction(cY, aU, aj) | |
571 | 571 | if ((da >= (cY - (3 * db)))) | |
572 | 572 | then throw(("This trade does not cover delivery cost of " + aL(da, 6))) | |
573 | 573 | else { | |
574 | 574 | let dc = O(cZ) | |
575 | 575 | let dd = getString(aC, dc) | |
576 | 576 | let de = addressFromStringValue(cZ) | |
577 | 577 | (((if (isDefined(dd)) | |
578 | 578 | then [ScriptTransfer(addressFromStringValue(value(dd)), db, ae)] | |
579 | 579 | else nil) :+ ScriptTransfer(de, ((cY - (3 * db)) - da), ae)) :+ ScriptTransfer(aB, db, ae)) | |
580 | 580 | } | |
581 | 581 | } | |
582 | 582 | else nil | |
583 | 583 | ||
584 | 584 | ||
585 | 585 | func df (dg,dh,di,dj) = if ((dg > 0)) | |
586 | 586 | then if ((size(dh) != 1)) | |
587 | 587 | then throw("exactly 1 payment must be attached") | |
588 | 588 | else { | |
589 | 589 | let dk = dh[0] | |
590 | 590 | let dl = dk.amount | |
591 | 591 | if (if (!(isDefined(dk.assetId))) | |
592 | 592 | then true | |
593 | 593 | else (value(dk.assetId) != ae)) | |
594 | 594 | then throw("USDT payments only!") | |
595 | 595 | else { | |
596 | 596 | let dm = (dg + dj) | |
597 | 597 | if ((dl != dm)) | |
598 | 598 | then throw((((((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(dg, 6)) + "+") + aL(dj, 6)) + "(delivery fee)")) | |
599 | 599 | else if ((am > dg)) | |
600 | 600 | then throw(("Min shop trade is " + aL(am, 6))) | |
601 | 601 | else { | |
602 | 602 | let dn = fraction(dg, aU, aj) | |
603 | 603 | let dc = O(di) | |
604 | 604 | let dd = getString(aC, dc) | |
605 | 605 | (((if (isDefined(dd)) | |
606 | 606 | then [ScriptTransfer(addressFromStringValue(value(dd)), dn, ae)] | |
607 | 607 | else nil) :+ ScriptTransfer(addressFromStringValue(di), (dg - (3 * dn)), ae)) :+ ScriptTransfer(aB, dn, ae)) | |
608 | 608 | } | |
609 | 609 | } | |
610 | 610 | } | |
611 | 611 | else if ((size(dh) != 0)) | |
612 | 612 | then throw("No payments needed") | |
613 | 613 | else nil | |
614 | 614 | ||
615 | 615 | ||
616 | 616 | func do (dp,cZ,dq,dr,ds,dt) = { | |
617 | 617 | let du = value(assetInfo(fromBase58String(dp))) | |
618 | 618 | if (!(isDefined(getInteger(aC, N(dp))))) | |
619 | 619 | then throw((("NFT " + du.name) + " is not staked")) | |
620 | 620 | else { | |
621 | 621 | let di = valueOrErrorMessage(getString(aC, L(dp)), (("NFT " + du.name) + " is orphaned")) | |
622 | 622 | if ((di == cZ)) | |
623 | 623 | then throw("You cannot trade with yourself") | |
624 | 624 | else { | |
625 | 625 | let dv = split_4C(dq, ":") | |
626 | 626 | if ((size(dv) != 3)) | |
627 | 627 | then throw("bpOrderStr should contain exactly 2 ':' separators") | |
628 | 628 | else { | |
629 | 629 | let dw = split(dv[0], "_") | |
630 | 630 | let dx = split(dv[1], "_") | |
631 | 631 | let dy = if ((dv[2] == "")) | |
632 | 632 | then nil | |
633 | 633 | else split_4C(dv[2], "_") | |
634 | 634 | if ((size(dw) != f)) | |
635 | 635 | then throw("All 6 resources should be passed") | |
636 | 636 | else if ((size(dx) != f)) | |
637 | 637 | then throw("All 6 materials should be passed") | |
638 | 638 | else { | |
639 | 639 | let dz = aF(invoke(aC, "getWarehouseREADONLY", [dp], nil)) | |
640 | 640 | let bY = split_4C(dz, ":") | |
641 | 641 | let cb = split(bY[y], "_") | |
642 | 642 | let cc = split(bY[z], "_") | |
643 | 643 | let cd = if ((bY[A] == "")) | |
644 | 644 | then nil | |
645 | 645 | else split_4C(bY[A], "_") | |
646 | 646 | let dA = parseIntValue(split(bY[B], "_")[C]) | |
647 | 647 | let be = V(dp) | |
648 | 648 | let dB = bd(be) | |
649 | 649 | let dC = split(dB[ba], "_") | |
650 | 650 | let dD = split(dB[bb], "_") | |
651 | 651 | let dE = if ((dB[bc] == "")) | |
652 | 652 | then nil | |
653 | 653 | else split_4C(dB[bc], "_") | |
654 | 654 | let ck = { | |
655 | 655 | let cl = dw | |
656 | 656 | let cm = size(cl) | |
657 | 657 | let cn = $Tuple13(nil, nil, nil, 0, 0, 0, 0, dr, cb, dC, n, false, 0) | |
658 | 658 | func co (cp,cq) = if ((cq >= cm)) | |
659 | 659 | then cp | |
660 | 660 | else cw(cp, cl[cq]) | |
661 | 661 | ||
662 | 662 | func cr (cp,cq) = if ((cq >= cm)) | |
663 | 663 | then cp | |
664 | 664 | else throw("List size exceeds 6") | |
665 | 665 | ||
666 | 666 | cr(co(co(co(co(co(co(cn, 0), 1), 2), 3), 4), 5), 6) | |
667 | 667 | } | |
668 | 668 | let by = { | |
669 | 669 | let cl = dx | |
670 | 670 | let cm = size(cl) | |
671 | 671 | let cn = $Tuple13(nil, nil, nil, ck._4, ck._5, ck._6, 0, ds, cc, dD, o, false, ck._13) | |
672 | 672 | func cs (cp,cq) = if ((cq >= cm)) | |
673 | 673 | then cp | |
674 | 674 | else cw(cp, cl[cq]) | |
675 | 675 | ||
676 | 676 | func ct (cp,cq) = if ((cq >= cm)) | |
677 | 677 | then cp | |
678 | 678 | else throw("List size exceeds 6") | |
679 | 679 | ||
680 | 680 | ct(cs(cs(cs(cs(cs(cs(cn, 0), 1), 2), 3), 4), 5), 6) | |
681 | 681 | } | |
682 | 682 | let bf = if ((size(dy) != 0)) | |
683 | 683 | then { | |
684 | 684 | let cl = dy | |
685 | 685 | let cm = size(cl) | |
686 | 686 | let cn = $Tuple13(nil, nil, nil, by._4, by._5, by._6, 0, dt, cd, dE, p, true, by._13) | |
687 | 687 | func cu (cp,cq) = if ((cq >= cm)) | |
688 | 688 | then cp | |
689 | 689 | else cw(cp, cl[cq]) | |
690 | 690 | ||
691 | 691 | func cv (cp,cq) = if ((cq >= cm)) | |
692 | 692 | then cp | |
693 | 693 | else throw("List size exceeds 50") | |
694 | 694 | ||
695 | 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) | |
696 | 696 | } | |
697 | 697 | else $Tuple13(cd, dE, dt, by._4, by._5, by._6, 0, dt, cd, dE, p, true, by._13) | |
698 | 698 | let dF = bf._4 | |
699 | 699 | let dG = if ((0 > (dA - dF))) | |
700 | 700 | then 0 | |
701 | 701 | else (dA - dF) | |
702 | 702 | let dH = makeString_2C([bY[x], makeString(ck._1, "_"), makeString(by._1, "_"), makeString_2C(bf._1, "_"), toString(dG)], ":") | |
703 | 703 | let dI = makeString_2C([makeString(ck._2, "_"), makeString(by._2, "_"), makeString_2C(bf._2, "_")], ":") | |
704 | 704 | let dJ = aF(invoke(aC, "saveWarehouse", [dH, dp], nil)) | |
705 | 705 | let dK = aI(invoke(aC, "updateAccStats", [di, fraction(d, bf._13, ak)], nil)) | |
706 | 706 | $Tuple10(StringEntry(be, dI), ck._3, by._3, bf._3, bf._5, bf._6, bf._13, di, dJ, dK) | |
707 | 707 | } | |
708 | 708 | } | |
709 | 709 | } | |
710 | 710 | } | |
711 | 711 | } | |
712 | 712 | ||
713 | 713 | ||
714 | 714 | func dL (bh) = { | |
715 | 715 | let dM = (bh / 30) | |
716 | 716 | let dN = [dM, dM, dM, dM, dM, dM] | |
717 | 717 | let aH = toString(dM) | |
718 | 718 | let cK = [aH, aH, aH, aH, aH, aH] | |
719 | 719 | let cN = [0, 0, 0, 0, 0, 0] | |
720 | 720 | func dO (bH,dP) = { | |
721 | 721 | let dQ = cJ(cK, dP, dN, cN) | |
722 | 722 | $Tuple3((bH._1 ++ dQ._1), (bH._2 + dQ._3), (bH._3 + dQ._4)) | |
723 | 723 | } | |
724 | 724 | ||
725 | 725 | let dR = { | |
726 | 726 | let cl = q | |
727 | 727 | let cm = size(cl) | |
728 | 728 | let cn = $Tuple3(nil, 0, 0) | |
729 | 729 | func co (cp,cq) = if ((cq >= cm)) | |
730 | 730 | then cp | |
731 | 731 | else dO(cp, cl[cq]) | |
732 | 732 | ||
733 | 733 | func cr (cp,cq) = if ((cq >= cm)) | |
734 | 734 | then cp | |
735 | 735 | else throw("List size exceeds 5") | |
736 | 736 | ||
737 | 737 | cr(co(co(co(co(co(cn, 0), 1), 2), 3), 4), 5) | |
738 | 738 | } | |
739 | 739 | let dS = dR._1 | |
740 | 740 | let br = dR._2 | |
741 | 741 | let dT = dR._3 | |
742 | 742 | let dU = fraction(br, aV, aj) | |
743 | 743 | let dV = (br / 100) | |
744 | 744 | let dW = ((br - dV) - dU) | |
745 | 745 | $Tuple5(dS, dW, dU, dV, dT) | |
746 | 746 | } | |
747 | 747 | ||
748 | 748 | ||
749 | 749 | @Callable(dX) | |
750 | 750 | func recalcLockedVolumeREADONLY (W,dz) = { | |
751 | 751 | let bZ = bd(V(W)) | |
752 | 752 | let dY = bX(dz, bZ, bZ) | |
753 | 753 | $Tuple2(nil, (dY._4 + dY._5)) | |
754 | 754 | } | |
755 | 755 | ||
756 | 756 | ||
757 | 757 | ||
758 | 758 | @Callable(dX) | |
759 | 759 | func constructorV1 (dZ) = if ((dX.caller != this)) | |
760 | 760 | then throw("Permission denied") | |
761 | 761 | else [StringEntry(av(), dZ)] | |
762 | 762 | ||
763 | 763 | ||
764 | 764 | ||
765 | 765 | @Callable(dX) | |
766 | 766 | func sellResources (cM,cN) = { | |
767 | 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)) | |
770 | - | then throw("sellResources doesn't require any payments") | |
771 | - | else { | |
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])) | |
768 | + | if ((ea == ea)) | |
769 | + | then { | |
770 | + | let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked") | |
771 | + | if ((size(dX.payments) != 0)) | |
772 | + | then throw("sellResources doesn't require any payments") | |
775 | 773 | else { | |
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)) | |
774 | + | let eb = split(valueOrElse(getString(aC, U(T)), g), "_") | |
775 | + | if ((eb[J] != "F")) | |
776 | + | then throw(("Duck location type should be Factory, but is " + eb[J])) | |
777 | + | else { | |
778 | + | let ec = bC(S(T)) | |
779 | + | let cK = split(ec[F], "_") | |
780 | + | let ed = cJ(cK, eb[K], cM, cN) | |
781 | + | let dS = ed._1 | |
782 | + | let ee = ed._2 | |
783 | + | let br = ed._3 | |
784 | + | let dT = ed._4 | |
785 | + | let dV = (br / 100) | |
786 | + | let ef = makeString_2C([ec[E], makeString(ee, "_"), ec[G], ec[H]], ":") | |
787 | + | let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil)) | |
788 | + | let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, dT, ak)], nil)) | |
789 | + | $Tuple2(((dS :+ ScriptTransfer(dX.caller, (br - dV), ae)) :+ ScriptTransfer(aB, dV, ae)), $Tuple3(eg, ea, eh)) | |
790 | + | } | |
788 | 791 | } | |
789 | 792 | } | |
793 | + | else throw("Strict value is not equal to itself.") | |
790 | 794 | } | |
791 | 795 | ||
792 | 796 | ||
793 | 797 | ||
794 | 798 | @Callable(dX) | |
795 | 799 | func sellResourcesWorld (P,bh) = if ((dX.caller != aE)) | |
796 | 800 | then throw("Permission denied") | |
797 | 801 | else { | |
798 | 802 | let ei = dL(bh) | |
799 | 803 | let dS = ei._1 | |
800 | 804 | let dW = ei._2 | |
801 | 805 | let dU = ei._3 | |
802 | 806 | let dV = ei._4 | |
803 | 807 | let dT = ei._5 | |
804 | 808 | if ((0 >= dW)) | |
805 | 809 | then throw(("This trade does not cover delivery cost of " + aL(dU, 6))) | |
806 | 810 | else { | |
807 | 811 | let eh = aI(invoke(aC, "updateAccStats", [P, fraction(a, dT, ak)], nil)) | |
808 | 812 | $Tuple2((((dS :+ IntegerEntry(Y, (valueOrElse(getInteger(Y), 0) + dU))) :+ ScriptTransfer(aB, dV, ae)) :+ ScriptTransfer(aD, dW, ae)), $Tuple2(dW, eh)) | |
809 | 813 | } | |
810 | 814 | } | |
811 | 815 | ||
812 | 816 | ||
813 | 817 | ||
814 | 818 | @Callable(dX) | |
815 | 819 | func sellResourcesWorldREADONLY (bh) = { | |
816 | 820 | let dW = dL(bh)._2 | |
817 | 821 | $Tuple2(nil, dW) | |
818 | 822 | } | |
819 | 823 | ||
820 | 824 | ||
821 | 825 | ||
822 | 826 | @Callable(dX) | |
823 | 827 | func sellResourcesDuckDelivery (cM,cN,ej) = if (!(ac)) | |
824 | 828 | then throw("Delivery feature is turned off!") | |
825 | 829 | else { | |
826 | 830 | 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)) | |
829 | - | then throw("sellResources doesn't require any payments") | |
830 | - | else { | |
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)) | |
843 | - | then k | |
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))) | |
831 | + | if ((ea == ea)) | |
832 | + | then { | |
833 | + | let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked") | |
834 | + | if ((size(dX.payments) != 0)) | |
835 | + | then throw("sellResources doesn't require any payments") | |
848 | 836 | else { | |
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)) | |
837 | + | let ec = bC(S(T)) | |
838 | + | let cK = split(ec[F], "_") | |
839 | + | let ek = cJ(cK, ej, cM, cN) | |
840 | + | let dS = ek._1 | |
841 | + | let ee = ek._2 | |
842 | + | let br = ek._3 | |
843 | + | let dT = ek._4 | |
844 | + | let ef = makeString_2C([ec[E], makeString(ee, "_"), ec[G], ec[H]], ":") | |
845 | + | let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil)) | |
846 | + | let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, dT, ak)], nil)) | |
847 | + | let el = fraction(br, aV, aj) | |
848 | + | let dU = if ((k > el)) | |
849 | + | then k | |
850 | + | else el | |
851 | + | let dV = (br / 100) | |
852 | + | if ((dU >= (br - dV))) | |
853 | + | then throw(("This trade does not cover delivery cost of " + aL(dU, 6))) | |
854 | + | else { | |
855 | + | let em = valueOrElse(getInteger(Y), 0) | |
856 | + | $Tuple2((((dS :+ ScriptTransfer(dX.caller, ((br - dV) - dU), ae)) :+ IntegerEntry(Y, (em + dU))) :+ ScriptTransfer(aB, dV, ae)), $Tuple3(eg, ea, eh)) | |
857 | + | } | |
851 | 858 | } | |
852 | 859 | } | |
860 | + | else throw("Strict value is not equal to itself.") | |
853 | 861 | } | |
854 | 862 | ||
855 | 863 | ||
856 | 864 | ||
857 | 865 | @Callable(dX) | |
858 | 866 | func sellResourcesLandDelivery (cM,cN,W,ej) = if (!(ac)) | |
859 | 867 | then throw("Delivery feature is turned off!") | |
860 | 868 | else { | |
861 | 869 | let ea = bF() | |
862 | - | if ((size(dX.payments) != 0)) | |
863 | - | then throw("sellResources doesn't require any payments") | |
864 | - | else { | |
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")) | |
870 | - | else { | |
871 | - | let ep = valueOrErrorMessage(getString(aC, L(W)), (("NFT " + eo.name) + " is orphaned")) | |
872 | - | if ((ep != P)) | |
873 | - | then throw((e + " is not yours")) | |
874 | - | else { | |
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)) | |
888 | - | then k | |
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))) | |
893 | - | else { | |
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)) | |
896 | - | } | |
897 | - | } | |
898 | - | } | |
899 | - | } | |
870 | + | if ((ea == ea)) | |
871 | + | then if ((size(dX.payments) != 0)) | |
872 | + | then throw("sellResources doesn't require any payments") | |
873 | + | else { | |
874 | + | let en = dX.caller | |
875 | + | let P = toString(en) | |
876 | + | let eo = value(assetInfo(fromBase58String(W))) | |
877 | + | if (!(isDefined(getInteger(aC, N(W))))) | |
878 | + | then throw((("NFT " + eo.name) + " is not staked")) | |
879 | + | else { | |
880 | + | let ep = valueOrErrorMessage(getString(aC, L(W)), (("NFT " + eo.name) + " is orphaned")) | |
881 | + | if ((ep != P)) | |
882 | + | then throw((e + " is not yours")) | |
883 | + | else { | |
884 | + | let dz = aF(invoke(aC, "getWarehouseREADONLY", [W], nil)) | |
885 | + | let bY = split_4C(dz, ":") | |
886 | + | let cK = split(bY[y], "_") | |
887 | + | let eq = cJ(cK, ej, cM, cN) | |
888 | + | let dS = eq._1 | |
889 | + | let ee = eq._2 | |
890 | + | let br = eq._3 | |
891 | + | let dT = eq._4 | |
892 | + | let dH = makeString_2C([bY[x], makeString(ee, "_"), bY[z], bY[A], bY[B]], ":") | |
893 | + | let dJ = aF(invoke(aC, "saveWarehouse", [dH, W], nil)) | |
894 | + | let eh = aI(invoke(aC, "updateAccStats", [P, fraction(a, dT, ak)], nil)) | |
895 | + | let el = fraction(br, aV, aj) | |
896 | + | let dU = if ((k > el)) | |
897 | + | then k | |
898 | + | else el | |
899 | + | let dV = (br / 100) | |
900 | + | if ((dU >= (br - dV))) | |
901 | + | then throw(("This trade does not cover delivery cost of " + aL(dU, 6))) | |
902 | + | else { | |
903 | + | let em = valueOrElse(getInteger(Y), 0) | |
904 | + | $Tuple2((((dS :+ ScriptTransfer(dX.caller, ((br - dV) - dU), ae)) :+ IntegerEntry(Y, (em + dU))) :+ ScriptTransfer(aB, dV, ae)), $Tuple3(dJ, ea, eh)) | |
905 | + | } | |
906 | + | } | |
907 | + | } | |
908 | + | } | |
909 | + | else throw("Strict value is not equal to itself.") | |
900 | 910 | } | |
901 | 911 | ||
902 | 912 | ||
903 | 913 | ||
904 | 914 | @Callable(dX) | |
905 | 915 | func buyMaterials (cM,cS) = { | |
906 | 916 | 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)) | |
909 | - | then throw("exactly 1 payment must be attached") | |
910 | - | else { | |
911 | - | let dk = dX.payments[0] | |
912 | - | let dl = dk.amount | |
913 | - | if (if (!(isDefined(dk.assetId))) | |
914 | - | then true | |
915 | - | else (value(dk.assetId) != ae)) | |
916 | - | then throw("USDT payments only!") | |
917 | + | if ((ea == ea)) | |
918 | + | then { | |
919 | + | let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked") | |
920 | + | if ((size(dX.payments) != 1)) | |
921 | + | then throw("exactly 1 payment must be attached") | |
917 | 922 | else { | |
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])) | |
923 | + | let dk = dX.payments[0] | |
924 | + | let dl = dk.amount | |
925 | + | if (if (!(isDefined(dk.assetId))) | |
926 | + | then true | |
927 | + | else (value(dk.assetId) != ae)) | |
928 | + | then throw("USDT payments only!") | |
921 | 929 | else { | |
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))) | |
930 | + | let eb = split(valueOrElse(getString(aC, U(T)), g), "_") | |
931 | + | if ((eb[J] != "F")) | |
932 | + | then throw(("Duck location type should be Factory, but is " + eb[J])) | |
931 | 933 | else { | |
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)] | |
936 | - | else nil | |
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)) | |
934 | + | let ec = bC(S(T)) | |
935 | + | let cR = split(ec[G], "_") | |
936 | + | let er = cQ(cR, eb[K], cM, cS) | |
937 | + | let dS = er._1 | |
938 | + | let es = er._2 | |
939 | + | let bA = er._3 | |
940 | + | let et = er._4 | |
941 | + | if ((bA > dl)) | |
942 | + | then throw(((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6))) | |
943 | + | else { | |
944 | + | let ef = makeString([ec[E], ec[F], makeString(es, "_"), ec[H]], ":") | |
945 | + | let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil)) | |
946 | + | let ax = if (((dl - bA) > 0)) | |
947 | + | then [ScriptTransfer(dX.caller, (dl - bA), ae)] | |
948 | + | else nil | |
949 | + | let dV = (bA / 100) | |
950 | + | let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, et, ak)], nil)) | |
951 | + | $Tuple2(((dS ++ ax) :+ ScriptTransfer(aB, dV, ae)), $Tuple3(eg, ea, eh)) | |
952 | + | } | |
940 | 953 | } | |
941 | 954 | } | |
942 | 955 | } | |
943 | 956 | } | |
957 | + | else throw("Strict value is not equal to itself.") | |
944 | 958 | } | |
945 | 959 | ||
946 | 960 | ||
947 | 961 | ||
948 | 962 | @Callable(dX) | |
949 | 963 | func buyMaterialsDuckDelivery (cM,cS,ej) = if (!(ac)) | |
950 | 964 | then throw("Delivery feature is turned off!") | |
951 | 965 | else { | |
952 | 966 | 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)) | |
955 | - | then throw("exactly 1 payment must be attached") | |
956 | - | else { | |
957 | - | let dk = dX.payments[0] | |
958 | - | let dl = dk.amount | |
959 | - | if (if (!(isDefined(dk.assetId))) | |
960 | - | then true | |
961 | - | else (value(dk.assetId) != ae)) | |
962 | - | then throw("USDT payments only!") | |
967 | + | if ((ea == ea)) | |
968 | + | then { | |
969 | + | let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked") | |
970 | + | if ((size(dX.payments) != 1)) | |
971 | + | then throw("exactly 1 payment must be attached") | |
963 | 972 | else { | |
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)) | |
976 | - | then k | |
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)")) | |
973 | + | let dk = dX.payments[0] | |
974 | + | let dl = dk.amount | |
975 | + | if (if (!(isDefined(dk.assetId))) | |
976 | + | then true | |
977 | + | else (value(dk.assetId) != ae)) | |
978 | + | then throw("USDT payments only!") | |
981 | 979 | else { | |
982 | - | let ax = if (((dl - dm) > 0)) | |
983 | - | then [ScriptTransfer(dX.caller, (dl - dm), ae)] | |
984 | - | else nil | |
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)) | |
980 | + | let ec = bC(S(T)) | |
981 | + | let cR = split(ec[G], "_") | |
982 | + | let eu = cQ(cR, ej, cM, cS) | |
983 | + | let dS = eu._1 | |
984 | + | let es = eu._2 | |
985 | + | let bA = eu._3 | |
986 | + | let et = eu._4 | |
987 | + | let ef = makeString([ec[E], ec[F], makeString(es, "_"), ec[H]], ":") | |
988 | + | let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil)) | |
989 | + | let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, et, ak)], nil)) | |
990 | + | let el = fraction(bA, aV, aj) | |
991 | + | let dU = if ((k > el)) | |
992 | + | then k | |
993 | + | else el | |
994 | + | let dm = (bA + dU) | |
995 | + | if ((dm > dl)) | |
996 | + | then throw((((((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)) + "+") + aL(dU, 6)) + "(delivery fee)")) | |
997 | + | else { | |
998 | + | let ax = if (((dl - dm) > 0)) | |
999 | + | then [ScriptTransfer(dX.caller, (dl - dm), ae)] | |
1000 | + | else nil | |
1001 | + | let dV = (bA / 100) | |
1002 | + | let em = valueOrElse(getInteger(Y), 0) | |
1003 | + | $Tuple2((((dS ++ ax) :+ ScriptTransfer(aB, dV, ae)) :+ IntegerEntry(Y, (em + dU))), $Tuple3(eg, ea, eh)) | |
1004 | + | } | |
988 | 1005 | } | |
989 | 1006 | } | |
990 | 1007 | } | |
1008 | + | else throw("Strict value is not equal to itself.") | |
991 | 1009 | } | |
992 | 1010 | ||
993 | 1011 | ||
994 | 1012 | ||
995 | 1013 | @Callable(dX) | |
996 | 1014 | func buyMaterialsLandDelivery (cM,cS,W,ej) = if (!(ac)) | |
997 | 1015 | then throw("Delivery feature is turned off!") | |
998 | 1016 | else { | |
999 | 1017 | let ea = bF() | |
1000 | - | if ((size(dX.payments) != 1)) | |
1001 | - | then throw("exactly 1 payment must be attached") | |
1002 | - | else { | |
1003 | - | let dk = dX.payments[0] | |
1004 | - | let dl = dk.amount | |
1005 | - | if (if (!(isDefined(dk.assetId))) | |
1006 | - | then true | |
1007 | - | else (value(dk.assetId) != ae)) | |
1008 | - | then throw("USDT payments only!") | |
1009 | - | else { | |
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")) | |
1015 | - | else { | |
1016 | - | let ep = valueOrErrorMessage(getString(aC, L(W)), (("NFT " + eo.name) + " is orphaned")) | |
1017 | - | if ((ep != P)) | |
1018 | - | then throw((e + " is not yours")) | |
1019 | - | else { | |
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)) | |
1033 | - | then k | |
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)")) | |
1038 | - | else { | |
1039 | - | let ax = if (((dl - dm) > 0)) | |
1040 | - | then [ScriptTransfer(dX.caller, (dl - dm), ae)] | |
1041 | - | else nil | |
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)) | |
1045 | - | } | |
1046 | - | } | |
1047 | - | } | |
1048 | - | } | |
1049 | - | } | |
1018 | + | if ((ea == ea)) | |
1019 | + | then if ((size(dX.payments) != 1)) | |
1020 | + | then throw("exactly 1 payment must be attached") | |
1021 | + | else { | |
1022 | + | let dk = dX.payments[0] | |
1023 | + | let dl = dk.amount | |
1024 | + | if (if (!(isDefined(dk.assetId))) | |
1025 | + | then true | |
1026 | + | else (value(dk.assetId) != ae)) | |
1027 | + | then throw("USDT payments only!") | |
1028 | + | else { | |
1029 | + | let en = dX.caller | |
1030 | + | let P = toString(en) | |
1031 | + | let eo = value(assetInfo(fromBase58String(W))) | |
1032 | + | if (!(isDefined(getInteger(aC, N(W))))) | |
1033 | + | then throw((("NFT " + eo.name) + " is not staked")) | |
1034 | + | else { | |
1035 | + | let ep = valueOrErrorMessage(getString(aC, L(W)), (("NFT " + eo.name) + " is orphaned")) | |
1036 | + | if ((ep != P)) | |
1037 | + | then throw((e + " is not yours")) | |
1038 | + | else { | |
1039 | + | let dz = aF(invoke(aC, "getWarehouseREADONLY", [W], nil)) | |
1040 | + | let bY = split_4C(dz, ":") | |
1041 | + | let cR = split(bY[z], "_") | |
1042 | + | let ev = cQ(cR, ej, cM, cS) | |
1043 | + | let dS = ev._1 | |
1044 | + | let es = ev._2 | |
1045 | + | let bA = ev._3 | |
1046 | + | let et = ev._4 | |
1047 | + | let dH = makeString_2C([bY[x], bY[y], makeString(es, "_"), bY[A], bY[B]], ":") | |
1048 | + | let dJ = aF(invoke(aC, "saveWarehouse", [dH, W], nil)) | |
1049 | + | let eh = aI(invoke(aC, "updateAccStats", [P, fraction(a, et, ak)], nil)) | |
1050 | + | let el = fraction(bA, aV, aj) | |
1051 | + | let dU = if ((k > el)) | |
1052 | + | then k | |
1053 | + | else el | |
1054 | + | let dm = (bA + dU) | |
1055 | + | if ((dm > dl)) | |
1056 | + | then throw((((((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)) + "+") + aL(dU, 6)) + "(delivery fee)")) | |
1057 | + | else { | |
1058 | + | let ax = if (((dl - dm) > 0)) | |
1059 | + | then [ScriptTransfer(dX.caller, (dl - dm), ae)] | |
1060 | + | else nil | |
1061 | + | let dV = (bA / 100) | |
1062 | + | let em = valueOrElse(getInteger(Y), 0) | |
1063 | + | $Tuple2((((dS ++ ax) :+ ScriptTransfer(aB, dV, ae)) :+ IntegerEntry(Y, (em + dU))), $Tuple3(dJ, ea, eh)) | |
1064 | + | } | |
1065 | + | } | |
1066 | + | } | |
1067 | + | } | |
1068 | + | } | |
1069 | + | else throw("Strict value is not equal to itself.") | |
1050 | 1070 | } | |
1051 | 1071 | ||
1052 | 1072 | ||
1053 | 1073 | ||
1054 | 1074 | @Callable(dX) | |
1055 | 1075 | func exchangeResources (cM) = { | |
1056 | 1076 | 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)) | |
1059 | - | then throw("exactly 1 payment must be attached") | |
1060 | - | else { | |
1061 | - | let dk = dX.payments[0] | |
1062 | - | let dl = dk.amount | |
1063 | - | if (if (!(isDefined(dk.assetId))) | |
1064 | - | then true | |
1065 | - | else (value(dk.assetId) != ae)) | |
1066 | - | then throw("USDT payments only!") | |
1077 | + | if ((ea == ea)) | |
1078 | + | then { | |
1079 | + | let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked") | |
1080 | + | if ((size(dX.payments) != 1)) | |
1081 | + | then throw("exactly 1 payment must be attached") | |
1067 | 1082 | else { | |
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])) | |
1083 | + | let dk = dX.payments[0] | |
1084 | + | let dl = dk.amount | |
1085 | + | if (if (!(isDefined(dk.assetId))) | |
1086 | + | then true | |
1087 | + | else (value(dk.assetId) != ae)) | |
1088 | + | then throw("USDT payments only!") | |
1071 | 1089 | else { | |
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))) | |
1090 | + | let eb = split(valueOrElse(getString(aC, U(T)), g), "_") | |
1091 | + | if ((eb[J] != "F")) | |
1092 | + | then throw(("Duck location type should be Factory, but is " + eb[J])) | |
1082 | 1093 | else { | |
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)] | |
1087 | - | else nil | |
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)) | |
1094 | + | let ec = bC(S(T)) | |
1095 | + | let cK = split(ec[F], "_") | |
1096 | + | let cR = split(ec[G], "_") | |
1097 | + | let ew = cU(cK, cR, cM) | |
1098 | + | let ee = ew._1 | |
1099 | + | let es = ew._2 | |
1100 | + | let bA = ew._3 | |
1101 | + | let ex = ew._4 | |
1102 | + | if ((bA > dl)) | |
1103 | + | then throw(((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6))) | |
1104 | + | else { | |
1105 | + | let ef = makeString([ec[E], makeString(ee, "_"), makeString(es, "_"), ec[H]], ":") | |
1106 | + | let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil)) | |
1107 | + | let ax = if (((dl - bA) > 0)) | |
1108 | + | then [ScriptTransfer(dX.caller, (dl - bA), ae)] | |
1109 | + | else nil | |
1110 | + | let dV = (bA / 100) | |
1111 | + | let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, ex, ak)], nil)) | |
1112 | + | $Tuple2((ax :+ ScriptTransfer(aB, dV, ae)), $Tuple3(eg, ea, eh)) | |
1113 | + | } | |
1091 | 1114 | } | |
1092 | 1115 | } | |
1093 | 1116 | } | |
1094 | 1117 | } | |
1118 | + | else throw("Strict value is not equal to itself.") | |
1095 | 1119 | } | |
1096 | 1120 | ||
1097 | 1121 | ||
1098 | 1122 | ||
1099 | 1123 | @Callable(dX) | |
1100 | 1124 | func exchangeResourcesDuckDelivery (cM) = if (!(ac)) | |
1101 | 1125 | then throw("Delivery feature is turned off!") | |
1102 | 1126 | else { | |
1103 | 1127 | 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)) | |
1106 | - | then throw("exactly 1 payment must be attached") | |
1107 | - | else { | |
1108 | - | let dk = dX.payments[0] | |
1109 | - | let dl = dk.amount | |
1110 | - | if (if (!(isDefined(dk.assetId))) | |
1111 | - | then true | |
1112 | - | else (value(dk.assetId) != ae)) | |
1113 | - | then throw("USDT payments only!") | |
1128 | + | if ((ea == ea)) | |
1129 | + | then { | |
1130 | + | let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked") | |
1131 | + | if ((size(dX.payments) != 1)) | |
1132 | + | then throw("exactly 1 payment must be attached") | |
1114 | 1133 | else { | |
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)) | |
1125 | - | then l | |
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)")) | |
1134 | + | let dk = dX.payments[0] | |
1135 | + | let dl = dk.amount | |
1136 | + | if (if (!(isDefined(dk.assetId))) | |
1137 | + | then true | |
1138 | + | else (value(dk.assetId) != ae)) | |
1139 | + | then throw("USDT payments only!") | |
1130 | 1140 | else { | |
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)] | |
1135 | - | else nil | |
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)) | |
1141 | + | let ec = bC(S(T)) | |
1142 | + | let cK = split(ec[F], "_") | |
1143 | + | let cR = split(ec[G], "_") | |
1144 | + | let ey = cU(cK, cR, cM) | |
1145 | + | let ee = ey._1 | |
1146 | + | let es = ey._2 | |
1147 | + | let bA = ey._3 | |
1148 | + | let ex = ey._4 | |
1149 | + | let el = fraction(bA, aW, aj) | |
1150 | + | let dU = if ((l > el)) | |
1151 | + | then l | |
1152 | + | else el | |
1153 | + | let dm = (bA + dU) | |
1154 | + | if ((dm > dl)) | |
1155 | + | then throw((((((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)) + "+") + aL(dU, 6)) + "(delivery fee)")) | |
1156 | + | else { | |
1157 | + | let ef = makeString([ec[E], makeString(ee, "_"), makeString(es, "_"), ec[H]], ":") | |
1158 | + | let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil)) | |
1159 | + | let ax = if (((dl - dm) > 0)) | |
1160 | + | then [ScriptTransfer(dX.caller, (dl - dm), ae)] | |
1161 | + | else nil | |
1162 | + | let dV = (bA / 100) | |
1163 | + | let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, ex, ak)], nil)) | |
1164 | + | let em = valueOrElse(getInteger(Y), 0) | |
1165 | + | $Tuple2(((ax :+ ScriptTransfer(aB, dV, ae)) :+ IntegerEntry(Y, (em + dU))), $Tuple3(eg, ea, eh)) | |
1166 | + | } | |
1140 | 1167 | } | |
1141 | 1168 | } | |
1142 | 1169 | } | |
1170 | + | else throw("Strict value is not equal to itself.") | |
1143 | 1171 | } | |
1144 | 1172 | ||
1145 | 1173 | ||
1146 | 1174 | ||
1147 | 1175 | @Callable(dX) | |
1148 | 1176 | func exchangeResourcesLandDelivery (cM,W) = if (!(ac)) | |
1149 | 1177 | then throw("Delivery feature is turned off!") | |
1150 | 1178 | else { | |
1151 | 1179 | let ea = bF() | |
1152 | - | if ((size(dX.payments) != 1)) | |
1153 | - | then throw("exactly 1 payment must be attached") | |
1154 | - | else { | |
1155 | - | let dk = dX.payments[0] | |
1156 | - | let dl = dk.amount | |
1157 | - | if (if (!(isDefined(dk.assetId))) | |
1158 | - | then true | |
1159 | - | else (value(dk.assetId) != ae)) | |
1160 | - | then throw("USDT payments only!") | |
1161 | - | else { | |
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")) | |
1167 | - | else { | |
1168 | - | let ep = valueOrErrorMessage(getString(aC, L(W)), (("NFT " + eo.name) + " is orphaned")) | |
1169 | - | if ((ep != P)) | |
1170 | - | then throw((e + " is not yours")) | |
1171 | - | else { | |
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)) | |
1186 | - | then l | |
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)")) | |
1191 | - | else { | |
1192 | - | let ax = if (((dl - dm) > 0)) | |
1193 | - | then [ScriptTransfer(dX.caller, (dl - dm), ae)] | |
1194 | - | else nil | |
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)) | |
1198 | - | } | |
1199 | - | } | |
1200 | - | } | |
1201 | - | } | |
1202 | - | } | |
1180 | + | if ((ea == ea)) | |
1181 | + | then if ((size(dX.payments) != 1)) | |
1182 | + | then throw("exactly 1 payment must be attached") | |
1183 | + | else { | |
1184 | + | let dk = dX.payments[0] | |
1185 | + | let dl = dk.amount | |
1186 | + | if (if (!(isDefined(dk.assetId))) | |
1187 | + | then true | |
1188 | + | else (value(dk.assetId) != ae)) | |
1189 | + | then throw("USDT payments only!") | |
1190 | + | else { | |
1191 | + | let en = dX.caller | |
1192 | + | let P = toString(en) | |
1193 | + | let eo = value(assetInfo(fromBase58String(W))) | |
1194 | + | if (!(isDefined(getInteger(aC, N(W))))) | |
1195 | + | then throw((("NFT " + eo.name) + " is not staked")) | |
1196 | + | else { | |
1197 | + | let ep = valueOrErrorMessage(getString(aC, L(W)), (("NFT " + eo.name) + " is orphaned")) | |
1198 | + | if ((ep != P)) | |
1199 | + | then throw((e + " is not yours")) | |
1200 | + | else { | |
1201 | + | let dz = aF(invoke(aC, "getWarehouseREADONLY", [W], nil)) | |
1202 | + | let bY = split_4C(dz, ":") | |
1203 | + | let cK = split(bY[y], "_") | |
1204 | + | let cR = split(bY[z], "_") | |
1205 | + | let ez = cU(cK, cR, cM) | |
1206 | + | let ee = ez._1 | |
1207 | + | let es = ez._2 | |
1208 | + | let bA = ez._3 | |
1209 | + | let ex = ez._4 | |
1210 | + | let dH = makeString_2C([bY[x], makeString(ee, "_"), makeString(es, "_"), bY[A], bY[B]], ":") | |
1211 | + | let dJ = aF(invoke(aC, "saveWarehouse", [dH, W], nil)) | |
1212 | + | let eh = aI(invoke(aC, "updateAccStats", [P, fraction(a, ex, ak)], nil)) | |
1213 | + | let el = fraction(bA, aW, aj) | |
1214 | + | let dU = if ((l > el)) | |
1215 | + | then l | |
1216 | + | else el | |
1217 | + | let dm = (bA + dU) | |
1218 | + | if ((dm > dl)) | |
1219 | + | then throw((((((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)) + "+") + aL(dU, 6)) + "(delivery fee)")) | |
1220 | + | else { | |
1221 | + | let ax = if (((dl - dm) > 0)) | |
1222 | + | then [ScriptTransfer(dX.caller, (dl - dm), ae)] | |
1223 | + | else nil | |
1224 | + | let dV = (bA / 100) | |
1225 | + | let em = valueOrElse(getInteger(Y), 0) | |
1226 | + | $Tuple2(((ax :+ ScriptTransfer(aB, dV, ae)) :+ IntegerEntry(Y, (em + dU))), $Tuple3(dJ, ea, eh)) | |
1227 | + | } | |
1228 | + | } | |
1229 | + | } | |
1230 | + | } | |
1231 | + | } | |
1232 | + | else throw("Strict value is not equal to itself.") | |
1203 | 1233 | } | |
1204 | 1234 | ||
1205 | 1235 | ||
1206 | 1236 | ||
1207 | 1237 | @Callable(dX) | |
1208 | 1238 | func craftGoods (eA,eB) = { | |
1209 | 1239 | let ea = bF() | |
1210 | - | if ((size(dX.payments) != 1)) | |
1211 | - | then throw("exactly 1 payment must be attached") | |
1212 | - | else { | |
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)) | |
1217 | - | then throw("USDT payments only!") | |
1218 | - | else if ((dl != aj)) | |
1219 | - | then throw("exactly 1 USDT must be attached as payment") | |
1220 | - | else if ((0 >= eB)) | |
1221 | - | then throw("Quantity should be positive") | |
1222 | - | else { | |
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])) | |
1227 | - | else { | |
1228 | - | let eD = eb[I] | |
1229 | - | let ec = bC(S(T)) | |
1230 | - | let cR = split(ec[G], "_") | |
1231 | - | if (if ((0 > eA)) | |
1232 | - | then true | |
1233 | - | else (eA >= size(s))) | |
1234 | - | then throw(("Unknown product idx=" + toString(eA))) | |
1235 | - | else { | |
1236 | - | let ab = split(s[eA], "_") | |
1237 | - | if ((size(ab) != v)) | |
1238 | - | then throw(("Fatal: unknown recipe: " + s[eA])) | |
1239 | - | else { | |
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)) | |
1243 | - | else { | |
1244 | - | let eF = if ((ec[H] == "")) | |
1245 | - | then nil | |
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] | |
1251 | - | else "0" | |
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)) | |
1258 | - | } | |
1240 | + | if ((ea == ea)) | |
1241 | + | then if ((size(dX.payments) != 1)) | |
1242 | + | then throw("exactly 1 payment must be attached") | |
1243 | + | else { | |
1244 | + | let dk = dX.payments[0] | |
1245 | + | let dl = dk.amount | |
1246 | + | let eC = valueOrErrorMessage(dk.assetId, "WAVES can't be used as payment") | |
1247 | + | if ((eC != ae)) | |
1248 | + | then throw("USDT payments only!") | |
1249 | + | else if ((dl != aj)) | |
1250 | + | then throw("exactly 1 USDT must be attached as payment") | |
1251 | + | else if ((0 >= eB)) | |
1252 | + | then throw("Quantity should be positive") | |
1253 | + | else { | |
1254 | + | let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked") | |
1255 | + | let eb = split(valueOrElse(getString(aC, U(T)), g), "_") | |
1256 | + | if ((eb[J] != "M")) | |
1257 | + | then throw(("Duck location type should be Manufactory, but is " + eb[J])) | |
1258 | + | else { | |
1259 | + | let eD = eb[I] | |
1260 | + | let ec = bC(S(T)) | |
1261 | + | let cR = split(ec[G], "_") | |
1262 | + | if (if ((0 > eA)) | |
1263 | + | then true | |
1264 | + | else (eA >= size(s))) | |
1265 | + | then throw(("Unknown product idx=" + toString(eA))) | |
1266 | + | else { | |
1267 | + | let ab = split(s[eA], "_") | |
1268 | + | if ((size(ab) != v)) | |
1269 | + | then throw(("Fatal: unknown recipe: " + s[eA])) | |
1270 | + | else { | |
1271 | + | let eE = parseIntValue(ab[u]) | |
1272 | + | if ((q[eE] != eD)) | |
1273 | + | then throw(((("This product is available in " + q[eE]) + ", but you are in ") + eD)) | |
1274 | + | else { | |
1275 | + | let eF = if ((ec[H] == "")) | |
1276 | + | then nil | |
1277 | + | else split_4C(ec[H], "_") | |
1278 | + | func eG (bH,eH) = { | |
1279 | + | let aJ = bH._2 | |
1280 | + | let eI = if ((size(eF) > aJ)) | |
1281 | + | then eF[aJ] | |
1282 | + | else "0" | |
1283 | + | let dQ = parseIntValue(eI) | |
1284 | + | let bh = (eB * w) | |
1285 | + | let eJ = if ((aJ == eA)) | |
1286 | + | then toString((dQ + bh)) | |
1287 | + | else eI | |
1288 | + | $Tuple2((bH._1 :+ eJ), (aJ + 1)) | |
1289 | + | } | |
1259 | 1290 | ||
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]) | |
1266 | - | ||
1267 | - | func cr (cp,cq) = if ((cq >= cm)) | |
1268 | - | then cp | |
1269 | - | else throw("List size exceeds 50") | |
1270 | - | ||
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) | |
1280 | - | } | |
1281 | - | ||
1282 | - | let eO = { | |
1283 | - | let cl = an | |
1291 | + | let eK = ( let cl = s | |
1284 | 1292 | let cm = size(cl) | |
1285 | 1293 | let cn = $Tuple2(nil, 0) | |
1286 | - | func | |
1294 | + | func co (cp,cq) = if ((cq >= cm)) | |
1287 | 1295 | then cp | |
1288 | - | else | |
1296 | + | else eG(cp, cl[cq]) | |
1289 | 1297 | ||
1290 | - | func | |
1298 | + | func cr (cp,cq) = if ((cq >= cm)) | |
1291 | 1299 | then cp | |
1292 | - | else throw("List size exceeds | |
1300 | + | else throw("List size exceeds 50") | |
1293 | 1301 | ||
1294 | - | ct(cs(cs(cs(cs(cs(cs(cn, 0), 1), 2), 3), 4), 5), 6) | |
1302 | + | 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 | |
1303 | + | func eL (bH,bJ) = { | |
1304 | + | let eM = (((parseIntValue(ab[bJ]) * ai) * eB) * parseIntValue(ab[t])) | |
1305 | + | let eN = parseIntValue(cR[bJ]) | |
1306 | + | if ((eM > eN)) | |
1307 | + | then throw(((((((("You have " + aL(eN, 8)) + " of ") + o[bJ]) + ", but recipe requires ") + aL(eM, 8)) + " for quantity ") + toString(eB))) | |
1308 | + | else if ((eM > 0)) | |
1309 | + | then $Tuple2((bH._1 :+ toString((eN - eM))), (bH._2 + eM)) | |
1310 | + | else $Tuple2((bH._1 :+ cR[bJ]), bH._2) | |
1311 | + | } | |
1312 | + | ||
1313 | + | let eO = { | |
1314 | + | let cl = an | |
1315 | + | let cm = size(cl) | |
1316 | + | let cn = $Tuple2(nil, 0) | |
1317 | + | func cs (cp,cq) = if ((cq >= cm)) | |
1318 | + | then cp | |
1319 | + | else eL(cp, cl[cq]) | |
1320 | + | ||
1321 | + | func ct (cp,cq) = if ((cq >= cm)) | |
1322 | + | then cp | |
1323 | + | else throw("List size exceeds 6") | |
1324 | + | ||
1325 | + | ct(cs(cs(cs(cs(cs(cs(cn, 0), 1), 2), 3), 4), 5), 6) | |
1326 | + | } | |
1327 | + | let ef = makeString([ec[E], ec[F], makeString(eO._1, "_"), makeString_2C(eK, "_")], ":") | |
1328 | + | let eP = aF(invoke(aC, "updateBackpack", [T, ef], nil)) | |
1329 | + | let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(b, eO._2, ak)], nil)) | |
1330 | + | $Tuple2(nil, $Tuple3(eP, ea, eh)) | |
1295 | 1331 | } | |
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)) | |
1300 | - | } | |
1301 | - | } | |
1302 | - | } | |
1303 | - | } | |
1304 | - | } | |
1305 | - | } | |
1332 | + | } | |
1333 | + | } | |
1334 | + | } | |
1335 | + | } | |
1336 | + | } | |
1337 | + | else throw("Strict value is not equal to itself.") | |
1306 | 1338 | } | |
1307 | 1339 | ||
1308 | 1340 | ||
1309 | 1341 | ||
1310 | 1342 | @Callable(dX) | |
1311 | 1343 | func setWarehouseOrder (eQ,W) = { | |
1312 | 1344 | let en = dX.originCaller | |
1313 | 1345 | let P = toString(en) | |
1314 | 1346 | let eP = if ((en != aB)) | |
1315 | 1347 | then bE() | |
1316 | 1348 | else false | |
1317 | 1349 | let eo = value(assetInfo(fromBase58String(W))) | |
1318 | 1350 | if (!(isDefined(getInteger(aC, N(W))))) | |
1319 | 1351 | then throw((("NFT " + eo.name) + " is not staked")) | |
1320 | 1352 | else { | |
1321 | 1353 | let ep = valueOrErrorMessage(getString(aC, L(W)), (("NFT " + eo.name) + " is orphaned")) | |
1322 | 1354 | if (if ((en != aB)) | |
1323 | 1355 | then (ep != P) | |
1324 | 1356 | else false) | |
1325 | 1357 | then throw((e + " is not yours")) | |
1326 | 1358 | else { | |
1327 | 1359 | let eR = split_4C(eQ, ":") | |
1328 | 1360 | let dz = aF(invoke(aC, "getWarehouseREADONLY", [W], nil)) | |
1329 | 1361 | let bY = split_4C(dz, ":") | |
1330 | 1362 | let eS = split(bY[B], "_") | |
1331 | 1363 | let eT = parseIntValue(eS[D]) | |
1332 | 1364 | let be = V(W) | |
1333 | 1365 | let bZ = bd(be) | |
1334 | 1366 | let dY = bX(bY, bZ, eR) | |
1335 | 1367 | let eU = dY._4 | |
1336 | 1368 | let eV = dY._5 | |
1337 | 1369 | let eW = dY._7 | |
1338 | 1370 | let eX = (eU + eV) | |
1339 | 1371 | let eY = ((eT - eW) - eX) | |
1340 | 1372 | if ((0 > eY)) | |
1341 | 1373 | 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")) | |
1342 | 1374 | else { | |
1343 | 1375 | let dH = makeString_2C([bY[x], makeString(dY._1, "_"), makeString(dY._2, "_"), makeString_2C(dY._3, "_"), toString(eX)], ":") | |
1344 | 1376 | let dJ = aF(invoke(aC, "saveWarehouse", [dH, W], nil)) | |
1345 | 1377 | let eZ = dY._6 | |
1346 | 1378 | let fa = if ((eZ > 0)) | |
1347 | 1379 | then if ((size(dX.payments) != 1)) | |
1348 | 1380 | then throw("exactly 1 payment must be attached") | |
1349 | 1381 | else { | |
1350 | 1382 | let dk = dX.payments[0] | |
1351 | 1383 | let dl = dk.amount | |
1352 | 1384 | let eC = valueOrErrorMessage(dk.assetId, "WAVES can't be used as payment") | |
1353 | 1385 | if ((eC != ae)) | |
1354 | 1386 | then throw("USDT payments only!") | |
1355 | 1387 | else if ((dl != eZ)) | |
1356 | 1388 | then throw(("Payment needed is " + toString(eZ))) | |
1357 | 1389 | else [StringEntry(be, eQ)] | |
1358 | 1390 | } | |
1359 | 1391 | else if ((eZ == 0)) | |
1360 | 1392 | then if ((size(dX.payments) != 0)) | |
1361 | 1393 | then throw("No payments needed") | |
1362 | 1394 | else [StringEntry(be, eQ)] | |
1363 | 1395 | else if ((size(dX.payments) != 0)) | |
1364 | 1396 | then throw("No payments needed") | |
1365 | 1397 | else [ScriptTransfer(addressFromStringValue(ep), -(eZ), ae), StringEntry(be, eQ)] | |
1366 | 1398 | $Tuple2(fa, $Tuple2(eP, dJ)) | |
1367 | 1399 | } | |
1368 | 1400 | } | |
1369 | 1401 | } | |
1370 | 1402 | } | |
1371 | 1403 | ||
1372 | 1404 | ||
1373 | 1405 | ||
1374 | 1406 | @Callable(dX) | |
1375 | 1407 | func acceptWarehouseOrder (dq,dp,T) = { | |
1376 | 1408 | 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)) | |
1386 | - | else { | |
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] == "")) | |
1392 | - | then nil | |
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)) | |
1411 | - | } | |
1409 | + | if ((ea == ea)) | |
1410 | + | then { | |
1411 | + | let de = dX.originCaller | |
1412 | + | let cZ = toString(de) | |
1413 | + | let fb = valueOrErrorMessage(getString(aC, Q(cZ)), "You don't have a duck staked") | |
1414 | + | let eb = valueOrElse(getString(aC, U(fb)), g) | |
1415 | + | let fc = split(value(eb), "_") | |
1416 | + | if ((fc[J] != "L")) | |
1417 | + | then throw((("Duck location type is " + fc[J]) + ", but should be L")) | |
1418 | + | else if ((fb != T)) | |
1419 | + | then throw(((("Your staked duck is " + fb) + ", but passed ") + T)) | |
1420 | + | else { | |
1421 | + | let bD = S(T) | |
1422 | + | let ec = bC(bD) | |
1423 | + | let dr = split(ec[F], "_") | |
1424 | + | let ds = split(ec[G], "_") | |
1425 | + | let dt = if ((ec[H] == "")) | |
1426 | + | then nil | |
1427 | + | else split_4C(ec[H], "_") | |
1428 | + | let fd = do(dp, cZ, dq, dr, ds, dt) | |
1429 | + | let fe = fd._1 | |
1430 | + | let ff = fd._2 | |
1431 | + | let fg = fd._3 | |
1432 | + | let fh = fd._4 | |
1433 | + | let cY = fd._5 | |
1434 | + | let dg = fd._6 | |
1435 | + | let fi = fd._7 | |
1436 | + | let di = fd._8 | |
1437 | + | let fj = fd._9 | |
1438 | + | let dK = fd._10 | |
1439 | + | let fk = [fe, cX(cY, cZ, 0)] | |
1440 | + | let fl = df(dg, dX.payments, di, 0) | |
1441 | + | let fm = makeString_2C([ec[E], makeString(ff, "_"), makeString(fg, "_"), makeString_2C(fh, "_")], ":") | |
1442 | + | let fn = aF(invoke(aC, "updateBackpack", [T, fm], nil)) | |
1443 | + | let fo = aI(invoke(aC, "updateDuckStats", [T, fraction(d, fi, ak)], nil)) | |
1444 | + | $Tuple2((fk ++ fl), $Tuple5(ea, fj, fn, fo, dK)) | |
1445 | + | } | |
1446 | + | } | |
1447 | + | else throw("Strict value is not equal to itself.") | |
1412 | 1448 | } | |
1413 | 1449 | ||
1414 | 1450 | ||
1415 | 1451 | ||
1416 | 1452 | @Callable(dX) | |
1417 | 1453 | func acceptShopOrderDuckDelivery (fp,dp) = if (!(ac)) | |
1418 | 1454 | then throw("Delivery feature is turned off!") | |
1419 | 1455 | else { | |
1420 | 1456 | 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] == "")) | |
1429 | - | then nil | |
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)) | |
1444 | - | then k | |
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)) | |
1457 | + | if ((ea == ea)) | |
1458 | + | then { | |
1459 | + | let de = dX.originCaller | |
1460 | + | let cZ = toString(de) | |
1461 | + | let T = valueOrErrorMessage(getString(aC, Q(cZ)), "You don't have a duck staked") | |
1462 | + | let bD = S(T) | |
1463 | + | let ec = bC(bD) | |
1464 | + | let dr = split(ec[F], "_") | |
1465 | + | let ds = split(ec[G], "_") | |
1466 | + | let dt = if ((ec[H] == "")) | |
1467 | + | then nil | |
1468 | + | else split_4C(ec[H], "_") | |
1469 | + | let fq = do(dp, cZ, fp, dr, ds, dt) | |
1470 | + | let fe = fq._1 | |
1471 | + | let ff = fq._2 | |
1472 | + | let fg = fq._3 | |
1473 | + | let fh = fq._4 | |
1474 | + | let cY = fq._5 | |
1475 | + | let dg = fq._6 | |
1476 | + | let fi = fq._7 | |
1477 | + | let di = fq._8 | |
1478 | + | let fj = fq._9 | |
1479 | + | let dK = fq._10 | |
1480 | + | let fr = fraction((dg + cY), aV, aj) | |
1481 | + | let fs = if ((k > fr)) | |
1482 | + | then k | |
1483 | + | else fr | |
1484 | + | let dj = fraction(fs, dg, (dg + cY)) | |
1485 | + | let da = (fs - dj) | |
1486 | + | let em = valueOrElse(getInteger(Y), 0) | |
1487 | + | let fk = [fe, cX(cY, cZ, da)] | |
1488 | + | let fl = df(dg, dX.payments, di, dj) | |
1489 | + | let fm = makeString_2C([ec[E], makeString(ff, "_"), makeString(fg, "_"), makeString_2C(fh, "_")], ":") | |
1490 | + | let fn = aF(invoke(aC, "updateBackpack", [T, fm], nil)) | |
1491 | + | let fo = aI(invoke(aC, "updateDuckStats", [T, fraction(d, fi, ak)], nil)) | |
1492 | + | $Tuple2(((fk ++ fl) :+ IntegerEntry(Y, (em + fs))), $Tuple5(ea, fj, fn, fo, dK)) | |
1493 | + | } | |
1494 | + | else throw("Strict value is not equal to itself.") | |
1455 | 1495 | } | |
1456 | 1496 | ||
1457 | 1497 | ||
1458 | 1498 | ||
1459 | 1499 | @Callable(dX) | |
1460 | 1500 | func acceptShopOrderLandDelivery (fp,dp,ft) = if (!(ac)) | |
1461 | 1501 | then throw("Delivery feature is turned off!") | |
1462 | 1502 | else { | |
1463 | 1503 | 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")) | |
1469 | - | else { | |
1470 | - | let ep = valueOrErrorMessage(getString(aC, L(ft)), (("NFT " + eo.name) + " is orphaned")) | |
1471 | - | if ((ep != cZ)) | |
1472 | - | then throw((e + " is not yours")) | |
1504 | + | if ((ea == ea)) | |
1505 | + | then { | |
1506 | + | let de = dX.originCaller | |
1507 | + | let cZ = toString(de) | |
1508 | + | let eo = value(assetInfo(fromBase58String(ft))) | |
1509 | + | if (!(isDefined(getInteger(aC, N(ft))))) | |
1510 | + | then throw((("NFT " + eo.name) + " is not staked")) | |
1473 | 1511 | else { | |
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] == "")) | |
1479 | - | then nil | |
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)) | |
1494 | - | then k | |
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)) | |
1512 | + | let ep = valueOrErrorMessage(getString(aC, L(ft)), (("NFT " + eo.name) + " is orphaned")) | |
1513 | + | if ((ep != cZ)) | |
1514 | + | then throw((e + " is not yours")) | |
1515 | + | else { | |
1516 | + | let dz = aF(invoke(aC, "getWarehouseREADONLY", [ft], nil)) | |
1517 | + | let bY = split_4C(dz, ":") | |
1518 | + | let cK = split(bY[y], "_") | |
1519 | + | let cR = split(bY[z], "_") | |
1520 | + | let eF = if ((bY[A] == "")) | |
1521 | + | then nil | |
1522 | + | else split(bY[A], "_") | |
1523 | + | let fu = do(dp, cZ, fp, cK, cR, eF) | |
1524 | + | let fe = fu._1 | |
1525 | + | let ff = fu._2 | |
1526 | + | let fg = fu._3 | |
1527 | + | let fh = fu._4 | |
1528 | + | let cY = fu._5 | |
1529 | + | let dg = fu._6 | |
1530 | + | let fi = fu._7 | |
1531 | + | let di = fu._8 | |
1532 | + | let fj = fu._9 | |
1533 | + | let dK = fu._10 | |
1534 | + | let fr = fraction((dg + cY), aV, aj) | |
1535 | + | let fs = if ((k > fr)) | |
1536 | + | then k | |
1537 | + | else fr | |
1538 | + | let dj = fraction(fs, dg, (dg + cY)) | |
1539 | + | let da = (fs - dj) | |
1540 | + | let em = valueOrElse(getInteger(Y), 0) | |
1541 | + | let fk = [fe, cX(cY, cZ, da)] | |
1542 | + | let fl = df(dg, dX.payments, di, dj) | |
1543 | + | let dH = makeString_2C([bY[x], makeString(ff, "_"), makeString(fg, "_"), makeString(fh, "_"), bY[B]], ":") | |
1544 | + | let dJ = aF(invoke(aC, "saveWarehouse", [dH, ft], nil)) | |
1545 | + | let eh = aI(invoke(aC, "updateAccStats", [cZ, fraction(d, fi, ak)], nil)) | |
1546 | + | $Tuple2(((fk ++ fl) :+ IntegerEntry(Y, (em + fs))), $Tuple5(ea, fj, dJ, eh, dK)) | |
1547 | + | } | |
1505 | 1548 | } | |
1506 | 1549 | } | |
1550 | + | else throw("Strict value is not equal to itself.") | |
1507 | 1551 | } | |
1508 | 1552 | ||
1509 | 1553 | ||
1510 | 1554 | ||
1511 | 1555 | @Callable(dX) | |
1512 | 1556 | func sellProductsToES (cM) = { | |
1513 | 1557 | let ea = bF() | |
1514 | - | if ((size(dX.payments) != 0)) | |
1515 | - | then throw("No payments needed") | |
1516 | - | else { | |
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])) | |
1521 | - | else { | |
1522 | - | let ec = bC(S(T)) | |
1523 | - | let eF = if ((ec[H] == "")) | |
1524 | - | then nil | |
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), "_") | |
1530 | - | else nil | |
1531 | - | func fy (bH,fz) = { | |
1532 | - | let bJ = bH._1 | |
1533 | - | let eB = if ((size(cM) > bJ)) | |
1534 | - | then cM[bJ] | |
1535 | - | else 0 | |
1536 | - | if ((0 > eB)) | |
1537 | - | then throw("Quantity cannot be negative") | |
1538 | - | else { | |
1539 | - | let ab = split(fz, "_") | |
1540 | - | if ((size(ab) != v)) | |
1541 | - | then throw(("Fatal: unknown recipe: " + fz)) | |
1542 | - | else { | |
1543 | - | let fA = (i * w) | |
1544 | - | let fB = if ((size(fx) > bJ)) | |
1545 | - | then parseIntValue(fx[bJ]) | |
1546 | - | else 0 | |
1547 | - | let fC = (fA - fB) | |
1548 | - | if ((eB > fC)) | |
1549 | - | then throw(((("Warehouse can buy only " + toString(fC)) + " of ") + p[bJ])) | |
1550 | - | else { | |
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]) | |
1555 | - | else 0 | |
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))) | |
1559 | - | } | |
1560 | - | } | |
1561 | - | } | |
1558 | + | if ((ea == ea)) | |
1559 | + | then if ((size(dX.payments) != 0)) | |
1560 | + | then throw("No payments needed") | |
1561 | + | else { | |
1562 | + | let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked") | |
1563 | + | let eb = split(valueOrElse(getString(aC, U(T)), g), "_") | |
1564 | + | if ((eb[J] != "A")) | |
1565 | + | then throw(("Duck location type should be Airport, but is " + eb[J])) | |
1566 | + | else { | |
1567 | + | let ec = bC(S(T)) | |
1568 | + | let eF = if ((ec[H] == "")) | |
1569 | + | then nil | |
1570 | + | else split_4C(ec[H], "_") | |
1571 | + | let fv = X() | |
1572 | + | let fw = getString(fv) | |
1573 | + | let fx = if (isDefined(fw)) | |
1574 | + | then split_4C(value(fw), "_") | |
1575 | + | else nil | |
1576 | + | func fy (bH,fz) = { | |
1577 | + | let bJ = bH._1 | |
1578 | + | let eB = if ((size(cM) > bJ)) | |
1579 | + | then cM[bJ] | |
1580 | + | else 0 | |
1581 | + | if ((0 > eB)) | |
1582 | + | then throw("Quantity cannot be negative") | |
1583 | + | else { | |
1584 | + | let ab = split(fz, "_") | |
1585 | + | if ((size(ab) != v)) | |
1586 | + | then throw(("Fatal: unknown recipe: " + fz)) | |
1587 | + | else { | |
1588 | + | let fA = (i * w) | |
1589 | + | let fB = if ((size(fx) > bJ)) | |
1590 | + | then parseIntValue(fx[bJ]) | |
1591 | + | else 0 | |
1592 | + | let fC = (fA - fB) | |
1593 | + | if ((eB > fC)) | |
1594 | + | then throw(((("Warehouse can buy only " + toString(fC)) + " of ") + p[bJ])) | |
1595 | + | else { | |
1596 | + | let et = aa(ab) | |
1597 | + | let fD = fraction((et * j), h, (ak * w)) | |
1598 | + | let fE = if ((size(eF) > bJ)) | |
1599 | + | then parseIntValue(eF[bJ]) | |
1600 | + | else 0 | |
1601 | + | if ((eB > fE)) | |
1602 | + | then throw(((("You have only " + toString(fE)) + " of ") + p[bJ])) | |
1603 | + | else $Tuple5((bJ + 1), (bH._2 + (fD * eB)), (bH._3 :+ toString((fE - eB))), (bH._4 :+ toString((fB + eB))), (bH._5 + (et * eB))) | |
1604 | + | } | |
1605 | + | } | |
1606 | + | } | |
1607 | + | } | |
1608 | + | ||
1609 | + | let eO = { | |
1610 | + | let cl = s | |
1611 | + | let cm = size(cl) | |
1612 | + | let cn = $Tuple5(0, 0, nil, nil, 0) | |
1613 | + | func co (cp,cq) = if ((cq >= cm)) | |
1614 | + | then cp | |
1615 | + | else fy(cp, cl[cq]) | |
1616 | + | ||
1617 | + | func cr (cp,cq) = if ((cq >= cm)) | |
1618 | + | then cp | |
1619 | + | else throw("List size exceeds 50") | |
1620 | + | ||
1621 | + | 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) | |
1622 | + | } | |
1623 | + | let fm = makeString_2C([ec[E], ec[F], ec[G], makeString_2C(eO._3, "_")], ":") | |
1624 | + | let fn = aF(invoke(aC, "updateBackpack", [T, fm], nil)) | |
1625 | + | let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(c, eO._5, (ak * 10))], nil)) | |
1626 | + | $Tuple2([StringEntry(fv, makeString_2C(eO._4, "_")), ScriptTransfer(dX.caller, eO._2, ae)], $Tuple3(fn, ea, eh)) | |
1562 | 1627 | } | |
1563 | - | ||
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]) | |
1571 | - | ||
1572 | - | func cr (cp,cq) = if ((cq >= cm)) | |
1573 | - | then cp | |
1574 | - | else throw("List size exceeds 50") | |
1575 | - | ||
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) | |
1577 | - | } | |
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)) | |
1582 | - | } | |
1583 | - | } | |
1628 | + | } | |
1629 | + | else throw("Strict value is not equal to itself.") | |
1584 | 1630 | } | |
1585 | 1631 | ||
1586 | 1632 | ||
1587 | 1633 | ||
1588 | 1634 | @Callable(dX) | |
1589 | 1635 | func updateEsStorage (fF) = if ((dX.caller != aC)) | |
1590 | 1636 | then throw("Permission denied") | |
1591 | 1637 | else $Tuple2([StringEntry(X(), fF)], fF) | |
1592 | 1638 | ||
1593 | 1639 | ||
1594 | 1640 | ||
1595 | 1641 | @Callable(dX) | |
1596 | 1642 | func updateDeliveryLocked (fG) = if ((dX.caller != aC)) | |
1597 | 1643 | then throw("Permission denied") | |
1598 | 1644 | else $Tuple2([IntegerEntry(Z, fG)], fG) | |
1599 | 1645 | ||
1600 | 1646 | ||
1601 | 1647 | ||
1602 | 1648 | @Callable(dX) | |
1603 | 1649 | func sendDeliveryReward (P) = if ((dX.caller != aC)) | |
1604 | 1650 | then throw("Permission denied") | |
1605 | 1651 | else { | |
1606 | 1652 | let em = valueOrElse(getInteger(Y), 0) | |
1607 | 1653 | let fH = valueOrElse(getInteger(Z), 0) | |
1608 | 1654 | let fI = (k * m) | |
1609 | 1655 | let fJ = invoke(aE, "sendAcres", [P, fI], nil) | |
1610 | 1656 | $Tuple2([IntegerEntry(Y, (em - k)), IntegerEntry(Z, (fH - k))], fJ) | |
1611 | 1657 | } | |
1612 | 1658 | ||
1613 | 1659 |
github/deemru/w8io/169f3d6 194.53 ms ◑