tx · 3kdaZ5sHGDHH1LJEs8F2ULn5UyAp38iW61jJoZBE9ybX

3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep:  -0.06200000 Waves

2023.10.25 21:02 [2814490] smart account 3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep > SELF 0.00000000 Waves

{ "type": 13, "id": "3kdaZ5sHGDHH1LJEs8F2ULn5UyAp38iW61jJoZBE9ybX", "fee": 6200000, "feeAssetId": null, "timestamp": 1698257000770, "version": 2, "chainId": 84, "sender": "3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep", "senderPublicKey": "7v5L7QkXxfkirALdyqmox38QCsa9jtfAtgUfHTh34eWq", "proofs": [ "2d8gog22qgUbLUhFJKTb6cDZtevzG5pLL88TryC1839qczNKPicTBTvBJZqgQsCAXkGWbkHNt3kU2PcybuNAoQLU" ], "script": "base64:BgKVAQgCEgQKAggYEgMKAQgSBAoCERESBAoCCAESAwoBARIFCgMREQgSBgoEEREICBIECgIRERIFCgMREQgSBgoEEREICBIDCgEREgMKARESBAoCEQgSBAoCAQESBQoDAQEIEgYKBAEBCAgSBAoCCAgSBQoDCAgIEgQKAggIEgUKAwgICBIDCgEREgMKAQgSAwoBARIDCgEIaQAHeHBUcmFkZQCQTgAHeHBDcmFmdACQTgAKeHBTZWxsVG9FcwCQTgAGeHBTaG9wAJBOAApMQU5EUFJFRklYAgRMQU5EAAZOVU1SRVMABgAPREVGQVVMVExPQ0FUSU9OAg9BZnJpY2FfRl9BZnJpY2EAEFJFU09VUkNFUFJJQ0VNSU4A1bUCAA1FU01BWFBBQ0tBR0VTAAoACUVTQlVZQ09FRgAEABVNSU5fVVNEVF9GRUVfREVMSVZFUlkA0IYDABdNSU5fVVNEVF9GRUVfREVMSVZFUlkxNQD4yQQAD0NSQUZUX1VTRFRfQ09TVADAhD0AFENSQUZUX0RFTElWRVJZX0NPRUZGAAoAFVVTRFQyQUNSRVNfTVVMVElQTElFUgAKAAhyZXNUeXBlcwkAzAgCAgNPaWwJAMwIAgIDT3JlCQDMCAICBFdvb2QJAMwIAgIEU2FuZAkAzAgCAgRDbGF5CQDMCAICB09yZ2FuaWMFA25pbAAIbWF0VHlwZXMJAMwIAgIERnVlbAkAzAgCAgVNZXRhbAkAzAgCAgVQbGFuawkAzAgCAgVHbGFzcwkAzAgCAgdQbGFzdGljCQDMCAICB1Byb3RlaW4FA25pbAAJcHJvZFR5cGVzCQDMCAICEEZpcnN0IEFpZCBLaXQgTDEJAMwIAgIQRmlyc3QgQWlkIEtpdCBMMgkAzAgCAhBGaXJzdCBBaWQgS2l0IEwzCQDMCAICC0JhY2twYWNrIEwxCQDMCAICC0JhY2twYWNrIEwyCQDMCAICC0JhY2twYWNrIEwzCQDMCAICDkZvb2QgUmF0aW9uIEwxCQDMCAICDkZvb2QgUmF0aW9uIEwyCQDMCAICDkZvb2QgUmF0aW9uIEwzCQDMCAICC0pldCBQYWNrIEwxCQDMCAICC0pldCBQYWNrIEwyCQDMCAICC0pldCBQYWNrIEwzCQDMCAICCVNoaWVsZCBMMQkAzAgCAglTaGllbGQgTDIJAMwIAgIJU2hpZWxkIEwzCQDMCAICB01pbmUgTDEJAMwIAgIHTWluZSBMMgkAzAgCAgdNaW5lIEwzCQDMCAICB1RyYXAgTDEJAMwIAgIHVHJhcCBMMgkAzAgCAgdUcmFwIEwzBQNuaWwACmNvbnRpbmVudHMJAMwIAgIIQW1lcmljYXMJAMwIAgIGRXVyb3BlCQDMCAICBEFzaWEJAMwIAgIGQWZyaWNhCQDMCAICB09jZWFuaWEFA25pbAAJQ09FRkYyTUFUAICt4gQAEHByb2R1Y3Rpb25NYXRyaXgJAMwIAgIlOF84XzhfMTdfMTdfNDJfMTJfMF8zMF8wLDAsMCwwLDAsMCwwXwkAzAgCAiU4XzhfOF8xN18xN180Ml8yNF8wXzYwXzAsMCw1LDIsMCwwLDBfCQDMCAICJzhfOF84XzE3XzE3XzQyXzM2XzBfMTIwXzAsMCwxMCw0LDAsMCwwXwkAzAgCAik4XzE5XzE5XzhfMjdfMTlfMjZfMV8yMF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAik4XzE5XzE5XzhfMjdfMTlfNTJfMV80MF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAik4XzE5XzE5XzhfMjdfMTlfNzhfMV84MF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAiU4XzhfOF84XzhfNjBfMTNfMl8yXzAsMCwwLDAsMCwwLDBfMDExCQDMCAICJThfOF84XzhfOF82MF8yNl8yXzRfMCwwLDAsMCwwLDAsMF8wMTEJAMwIAgIlOF84XzhfOF84XzYwXzM5XzJfOF8wLDAsMCwwLDAsMCwwXzAxMQkAzAgCAikzMF8zMF8zXzE3XzE3XzNfMzBfM18zMF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAikzMF8zMF8zXzE3XzE3XzNfNjBfM181MF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAikzMF8zMF8zXzE3XzE3XzNfOTBfM183MF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAisxOF8xOF8xMF8xOF8xOF8xOF8xMV80XzEwXzAsMCwwLDAsMCwwLDBfMjAxCQDMCAICKzE4XzE4XzEwXzE4XzE4XzE4XzIyXzRfMjBfMCwwLDAsMCwwLDAsMF8yMDEJAMwIAgIrMThfMThfMTBfMThfMThfMThfMzNfNF8zMF8wLDAsMCwwLDAsMCwwXzIwMQkAzAgCAio0XzEzXzIyXzRfMzVfMjJfMjNfMF81MCwxLDBfMCwwLDAsMCwwLDAsMF8JAMwIAgIqNF8xM18yMl80XzM1XzIyXzQ2XzBfNTAsMSwxXzAsMiw1LDAsMCwwLDBfCQDMCAICKzRfMTNfMjJfNF8zNV8yMl82OV8wXzUwLDIsMV8wLDUsMTAsMCwwLDAsMF8JAMwIAgIqNV8yNV80MF81XzEwXzE1XzIwXzFfMzAsMSwxXzAsMCwwLDAsMCwwLDBfCQDMCAICKjVfMjVfNDBfNV8xMF8xNV80MF8xXzMwLDEsMl8yLDEsMywwLDAsMCwwXwkAzAgCAio1XzI1XzQwXzVfMTBfMTVfNjBfMV8zMCwxLDNfNSwyLDgsMCwwLDAsMF8FA25pbAAJcklkeENvZWZmAAYADXJJZHhDb250aW5lbnQABwAKUkVDSVBFU0laRQALAA5QUk9EVUNUUEtHU0laRQAKAAt3aElkeExldmVscwAAAAh3aElkeFJlcwABAAh3aElkeE1hdAACAAl3aElkeFByb2QAAwAJd2hJZHhMT0ZUAAQACXZvbExvY2tlZAAAAAh2b2xUb3RhbAADAApicElkeExldmVsAAAACGJwSWR4UmVzAAEACGJwSWR4TWF0AAIACWJwSWR4UHJvZAADAA9sb2NJZHhDb250aW5lbnQAAAAKbG9jSWR4VHlwZQABAAhsb2NJZHhJZAACARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBB2Fzc2V0SWQJAKwCAgIDbm9fBQdhc3NldElkARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQdhc3NldElkCQCsAgICA3N0XwUHYXNzZXRJZAEPa2V5QWRkcmVzc1JlZkJ5AQRhZGRyCQCsAgICCWFjY1JlZkJ5XwUEYWRkcgEUa2V5U3Rha2VkRHVja0J5T3duZXIBCW93bmVyQWRkcgkArAICAhJzdGFrZWREdWNrQnlPd25lcl8FCW93bmVyQWRkcgERa2V5QmFja3BhY2tCeUR1Y2sBC2R1Y2tBc3NldElkCQCsAgICCWJhY2tQYWNrXwULZHVja0Fzc2V0SWQBD2tleUR1Y2tMb2NhdGlvbgELZHVja0Fzc2V0SWQJAKwCAgINZHVja0xvY2F0aW9uXwULZHVja0Fzc2V0SWQBDmtleU9yZGVyQnlMYW5kAQtsYW5kQXNzZXRJZAkArAICAgpsYW5kT3JkZXJfBQtsYW5kQXNzZXRJZAEOa2V5RXNXYXJlaG91c2UAAhplbWVyZ2VuY3lXYXJlaG91c2VQcm9kdWN0cwAPZGVsaXZlcnlGdW5kS2V5AgxkZWxpdmVyeUZ1bmQAEWRlbGl2ZXJ5TG9ja2VkS2V5Ag5kZWxpdmVyeUxvY2tlZAESZ2V0UmVjaXBlTWF0ZXJpYWxzAQZyZWNpcGUJAGgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGcmVjaXBlBQlySWR4Q29lZmYFCUNPRUZGMk1BVAAFY2hhaW4JAMkBAgkAygECCAUEdGhpcwVieXRlcwABAAEAC3VzZHRBc3NldElkBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwASCE2nqyCAM/TtG7yo7ui5O8yYLdC136B5ao1CP5qA//uQMJAAACAQFUBQckbWF0Y2gwASBVsdifcoeC7+XjW42sBatl3ppDoS8WuwXzGreHpfHFGAkAAgECDVVua25vd24gY2hhaW4AFWRlZmF1bHRSZXN0QWRkcmVzc1N0cgQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAIjM1BRQ3V2RmJ2aDRMa1BVbnJuVTF6M2puYkExcDltM1dOaHYDCQAAAgEBVAUHJG1hdGNoMAIjM011bWtHR3p0Q0tBWHBXRHF4a2Rkb2ZxWFNVYnFRa3ZTSnkJAAIBAg1Vbmtub3duIGNoYWluAANTRVACAl9fAAVNVUxUNQCgjQYABU1VTFQ2AMCEPQAFTVVMVDgAgMLXLwAGTVVMVDEwAIDIr6AlAA5NSU5TSE9QUEFZTUVOVACgjQYABUlURVI2CQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFBQNuaWwBD2dldFN0cmluZ09yRmFpbAIHYWRkcmVzcwNrZXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQdhZGRyZXNzBQNrZXkJALkJAgkAzAgCAgptYW5kYXRvcnkgCQDMCAIJAKUIAQUHYWRkcmVzcwkAzAgCAgEuCQDMCAIFA2tleQkAzAgCAg8gaXMgbm90IGRlZmluZWQFA25pbAIAABFJZHhDZmdTdGFraW5nRGFwcAABABRJZHhDZmdJbnZlc3RGdW5kRGFwcAAGAA9JZHhDZmdBY3Jlc0RhcHAACAEKa2V5UmVzdENmZwACDiVzX19yZXN0Q29uZmlnAQ5rZXlSZXN0QWRkcmVzcwACDCVzX19yZXN0QWRkcgERcmVhZFJlc3RDZmdPckZhaWwBBHJlc3QJALwJAgkBD2dldFN0cmluZ09yRmFpbAIFBHJlc3QJAQprZXlSZXN0Q2ZnAAUDU0VQARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCB3Jlc3RDZmcDaWR4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQdyZXN0Q2ZnBQNpZHgJAKwCAgIqUmVzdCBjZmcgZG9lc24ndCBjb250YWluIGFkZHJlc3MgYXQgaW5kZXggCQCkAwEFA2lkeAAMcmVzdENvbnRyYWN0CQERQGV4dHJOYXRpdmUoMTA2MikBCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMJAQ5rZXlSZXN0QWRkcmVzcwAFFWRlZmF1bHRSZXN0QWRkcmVzc1N0cgAHcmVzdENmZwkBEXJlYWRSZXN0Q2ZnT3JGYWlsAQUMcmVzdENvbnRyYWN0AA9zdGFraW5nQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRFJZHhDZmdTdGFraW5nRGFwcAASaW52ZXN0RnVuZENvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwUUSWR4Q2ZnSW52ZXN0RnVuZERhcHAADWFjcmVzQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBQ9JZHhDZmdBY3Jlc0RhcHABCGFzU3RyaW5nAQF2BAckbWF0Y2gwBQF2AwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAUBcwkAAgECGGZhaWwgdG8gY2FzdCBpbnRvIFN0cmluZwEFYXNJbnQBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIDSW50BAFuBQckbWF0Y2gwBQFuCQACAQIVZmFpbCB0byBjYXN0IGludG8gSW50AQprZXlCbG9ja2VkAAIQY29udHJhY3RzQmxvY2tlZAEKZml4ZWRQb2ludAIDdmFsCGRlY2ltYWxzBAZ0ZW5Qb3cJAGwGAAoAAAUIZGVjaW1hbHMAAAAABQRET1dOBAdsb3dQYXJ0CQCkAwEJAGoCBQN2YWwFBnRlblBvdwQGemVyb2VzCQCwAgIJAKQDAQUGdGVuUG93CQBkAgABCQCxAgEFB2xvd1BhcnQJAKwCAgkArAICCQCsAgIJAKQDAQkAaQIFA3ZhbAUGdGVuUG93AgEuBQZ6ZXJvZXMFB2xvd1BhcnQAE0ZBQ1RPUllNQVhXQVJFSE9VU0UAgMivoCUADlNFTExNVUxUSVBMSUVSAMgBAA1CVVlNVUxUSVBMSUVSAKwCAApBVUNUSU9ORkVFAJBOAAxERUxJVkVSWV9GRUUAkE4ADkRFTElWRVJZX0ZFRTE1AJh1AR5rZXlGYWN0b3J5V2FyZWhvdXNlQnlJZEFuZFR5cGUCCWZhY3RvcnlJZAdyZXNUeXBlCQCsAgIJAKwCAgkArAICAhtmYWN0b3J5V2hCeUNvbnRpbmVudEFuZFJlc18FCWZhY3RvcnlJZAIBXwkApAMBBQdyZXNUeXBlAAlvcmRJZHhSZXMAAAAJb3JkSWR4TWF0AAEACm9yZElkeFByb2QAAgEIZ2V0T3JkZXIBBm9yZEtleQQBcAkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEFBm9yZEtleQIwMEAwXzBAMF8wQDBfMEAwXzBAMF8wQDA6MEAwXzBAMF8wQDBfMEAwXzBAMF8wQDA6AgE6CQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUBcAUJb3JkSWR4UmVzAgFfBQZOVU1SRVMJAJEDAgUBcAUJb3JkSWR4UmVzAhcwQDBfMEAwXzBAMF8wQDBfMEAwXzBAMAkAzAgCAwkAAAIJAJADAQkAtQkCCQCRAwIFAXAFCW9yZElkeE1hdAIBXwUGTlVNUkVTCQCRAwIFAXAFCW9yZElkeE1hdAIXMEAwXzBAMF8wQDBfMEAwXzBAMF8wQDAJAMwIAgkAkQMCBQFwBQpvcmRJZHhQcm9kBQNuaWwBCHRvVm9sdW1lAwZhbW91bnQHcGtnU2l6ZQlpc1Byb2R1Y3QDBQlpc1Byb2R1Y3QEBHBrZ3MDCQBnAgUGYW1vdW50AAAJAGkCCQBlAgkAZAIFBmFtb3VudAUHcGtnU2l6ZQABBQdwa2dTaXplCQEBLQEJAGkCCQBlAgkAZAIJAQEtAQUGYW1vdW50BQdwa2dTaXplAAEFB3BrZ1NpemUJAGgCBQRwa2dzBQVNVUxUOAUGYW1vdW50AQxzZWxsSW50ZXJuYWwEBWxvY0lkB3Jlc1R5cGUGYW1vdW50CG1pblByaWNlBAV3aEtleQkBHmtleUZhY3RvcnlXYXJlaG91c2VCeUlkQW5kVHlwZQIFBWxvY0lkBQdyZXNUeXBlBAJ3MAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQV3aEtleQAABAJyMAMJAGYCBQJ3MAUTRkFDVE9SWU1BWFdBUkVIT1VTRQAAAwkAZgIJAGQCBQJ3MAUGYW1vdW50BRNGQUNUT1JZTUFYV0FSRUhPVVNFCQBlAgUTRkFDVE9SWU1BWFdBUkVIT1VTRQUCdzAFBmFtb3VudAQMdXNkdFJlY2VpdmVkCQBkAgkAawMFAnIwCQBlAgkAaAIFDlNFTExNVUxUSVBMSUVSBRBSRVNPVVJDRVBSSUNFTUlOCQBrAwkAZAIJAGgCAGQFAncwCQBoAgAyBQJyMAUQUkVTT1VSQ0VQUklDRU1JTgUTRkFDVE9SWU1BWFdBUkVIT1VTRQUGTVVMVDEwCQBrAwkAZQIFBmFtb3VudAUCcjAFEFJFU09VUkNFUFJJQ0VNSU4FBU1VTFQ4BAVtaW45OQkAZQIFCG1pblByaWNlCQBpAgUIbWluUHJpY2UAZAMJAGYCCQBoAgUFbWluOTkFBmFtb3VudAkAaAIFDHVzZHRSZWNlaXZlZAUFTVVMVDgJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICD0FjdHVhbCBwcmljZSA9IAkApAMBBQx1c2R0UmVjZWl2ZWQCAyAvIAkApAMBBQZhbW91bnQCDiA8IG1pblByaWNlID0gCQCkAwEFCG1pblByaWNlAgMsICgFBWxvY0lkAgIsIAkAkQMCBQhyZXNUeXBlcwUHcmVzVHlwZQIBKQkAlAoCCQEMSW50ZWdlckVudHJ5AgUFd2hLZXkJAGQCBQJ3MAUGYW1vdW50BQx1c2R0UmVjZWl2ZWQBC2J1eUludGVybmFsBAVsb2NJZAdtYXRUeXBlBmFtb3VudAhtYXhQcmljZQQFd2hLZXkJAR5rZXlGYWN0b3J5V2FyZWhvdXNlQnlJZEFuZFR5cGUCBQVsb2NJZAUHbWF0VHlwZQQCdzAJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUFd2hLZXkAAAQCbTEDCQBmAgUCdzAFE0ZBQ1RPUllNQVhXQVJFSE9VU0UJAJcDAQkAzAgCBQZhbW91bnQJAMwIAgkAZQIFAncwBRNGQUNUT1JZTUFYV0FSRUhPVVNFBQNuaWwAAAQCbTAJAJcDAQkAzAgCBQJ3MAkAzAgCCQBlAgUGYW1vdW50BQJtMQUDbmlsBAFtCQBkAgUCbTAFAm0xBAV3MG1pbgkAlwMBCQDMCAIFAncwCQDMCAIFE0ZBQ1RPUllNQVhXQVJFSE9VU0UFA25pbAQJdXNkdFNwZW50CQBkAgkAawMFAm0wCQBlAgkAaAIFDUJVWU1VTFRJUExJRVIFEFJFU09VUkNFUFJJQ0VNSU4JAGsDCQBlAgkAaAIAZAUFdzBtaW4JAGgCADIFAm0wBRBSRVNPVVJDRVBSSUNFTUlOBRNGQUNUT1JZTUFYV0FSRUhPVVNFBQZNVUxUMTAJAGsDBQJtMQkAaAIAAgUQUkVTT1VSQ0VQUklDRU1JTgUFTVVMVDgEBm1heDEwMQkAZAIFCG1heFByaWNlCQBpAgUIbWF4UHJpY2UAZAMJAGYCCQBoAgUJdXNkdFNwZW50BQVNVUxUOAkAaAIFBm1heDEwMQUBbQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIPQWN0dWFsIHByaWNlID0gCQCkAwEFCXVzZHRTcGVudAIDIC8gCQCkAwEFAW0CDiA+IG1heFByaWNlID0gCQCkAwEFCG1heFByaWNlAgMsICgFBWxvY0lkAgIsIAkAkQMCBQhtYXRUeXBlcwUHbWF0VHlwZQIBKQkAlQoDCQEMSW50ZWdlckVudHJ5AgUFd2hLZXkJAGUCBQJ3MAUBbQUJdXNkdFNwZW50BQFtAQtnZXRCYWNrcGFjawEFYnBLZXkEAXAJALwJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QFBWJwS2V5AhowOjBfMF8wXzBfMF8wOjBfMF8wXzBfMF8wOgIBOgkAzAgCCQCkAwEJAQt2YWx1ZU9yRWxzZQIJALYJAQkAkQMCBQFwBQpicElkeExldmVsAAAJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQFwBQhicElkeFJlcwIBXwUGTlVNUkVTCQCRAwIFAXAFCGJwSWR4UmVzAgswXzBfMF8wXzBfMAkAzAgCAwkAAAIJAJADAQkAtQkCCQCRAwIFAXAFCGJwSWR4TWF0AgFfBQZOVU1SRVMJAJEDAgUBcAUIYnBJZHhNYXQCCzBfMF8wXzBfMF8wCQDMCAIJAJEDAgUBcAUJYnBJZHhQcm9kBQNuaWwBDGNoZWNrQmxvY2tlZAADCQELdmFsdWVPckVsc2UCCQCbCAIFD3N0YWtpbmdDb250cmFjdAkBCmtleUJsb2NrZWQABwkAAgECH0NvbnRyYWN0cyBhcmUgdW5kZXIgbWFpbnRlbmFuY2UFBHVuaXQBBnByb2xvZwAJAQVhc0ludAEJAP0HBAUPc3Rha2luZ0NvbnRyYWN0AgpzYXZlTGFzdFR4BQNuaWwFA25pbAEJc2V0Q29tbW9uAgNhY2MPaWdub3JlZEl0ZXJhdG9yBAFqCAUDYWNjAl8xBARpdGVtAwkAZgIJAJADAQgFA2FjYwNfMTAFAWoJAJEDAggFA2FjYwNfMTAFAWoCAzBAMAQGaXNQcm9kCAUDYWNjAl84BAlpdGVtUGFydHMJALUJAgUEaXRlbQIBQAMJAQIhPQIJAJADAQUJaXRlbVBhcnRzAAIJAAIBAi5JbmNvcnJlY3Qgb3JkZXIgZm9ybWF0LCBzaG91bGQgYmUgYW1vdW50QHByaWNlBAhuZXdPcmRBbQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWl0ZW1QYXJ0cwAABAhuZXdPcmRQcgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWl0ZW1QYXJ0cwABBAluZXdPcmRVc2QDBQZpc1Byb2QJAGgCBQhuZXdPcmRBbQUIbmV3T3JkUHIJAGsDBQhuZXdPcmRBbQUIbmV3T3JkUHIFBU1VTFQ4BAluZXdPcmRWb2wJAQh0b1ZvbHVtZQMFCG5ld09yZEFtBQ5QUk9EVUNUUEtHU0laRQUGaXNQcm9kBAZ3aEluaXQDCQBmAgkAkAMBCAUDYWNjAl82BQFqCQENcGFyc2VJbnRWYWx1ZQEJAJEDAggFA2FjYwJfNgUBagAABAtjdXJPcmRQYXJ0cwkAtQkCAwkAZgIJAJADAQgFA2FjYwJfNwUBagkAkQMCCAUDYWNjAl83BQFqAgMwQDACAUAECGN1ck9yZEFtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgULY3VyT3JkUGFydHMAAAQIY3VyT3JkUHIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQtjdXJPcmRQYXJ0cwABAwMJAGYCAAAFCGN1ck9yZFByBgkAZgIAAAUIbmV3T3JkUHIJAAIBAhdQcmljZSBjYW4ndCBiZSBuZWdhdGl2ZQQJY3VyT3JkVXNkAwUGaXNQcm9kCQBoAgUIY3VyT3JkQW0FCGN1ck9yZFByCQBrAwUIY3VyT3JkQW0FCGN1ck9yZFByBQVNVUxUOAMJAAACBQhuZXdPcmRBbQAAAwkAZgIFCGN1ck9yZEFtAAAJAJwKCgkAZAIFAWoAAQkAzQgCCAUDYWNjAl8yCQCkAwEFBndoSW5pdAgFA2FjYwJfMwgFA2FjYwJfNAkAZQIIBQNhY2MCXzUFCWN1ck9yZFVzZAgFA2FjYwJfNggFA2FjYwJfNwUGaXNQcm9kCQBkAggFA2FjYwJfOQkBCHRvVm9sdW1lAwUGd2hJbml0BQ5QUk9EVUNUUEtHU0laRQUGaXNQcm9kCAUDYWNjA18xMAkAnAoKCQBkAgUBagABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZQIFBndoSW5pdAUIY3VyT3JkQW0IBQNhY2MCXzMIBQNhY2MCXzQIBQNhY2MCXzUIBQNhY2MCXzYIBQNhY2MCXzcFBmlzUHJvZAkAZAIIBQNhY2MCXzkJAQh0b1ZvbHVtZQMJAGUCBQZ3aEluaXQFCGN1ck9yZEFtBQ5QUk9EVUNUUEtHU0laRQUGaXNQcm9kCAUDYWNjA18xMAMJAGYCBQhuZXdPcmRBbQAAAwkAZgIAAAUIY3VyT3JkQW0JAJwKCgkAZAIFAWoAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGUCBQZ3aEluaXQFCGN1ck9yZEFtCQBkAggFA2FjYwJfMwUJbmV3T3JkVm9sCAUDYWNjAl80CQBkAggFA2FjYwJfNQUJbmV3T3JkVXNkCAUDYWNjAl82CAUDYWNjAl83BQZpc1Byb2QJAQh0b1ZvbHVtZQMJAGUCBQZ3aEluaXQFCGN1ck9yZEFtBQ5QUk9EVUNUUEtHU0laRQUGaXNQcm9kCAUDYWNjA18xMAkAnAoKCQBkAgUBagABCQDNCAIIBQNhY2MCXzIJAKQDAQUGd2hJbml0CQBkAggFA2FjYwJfMwUJbmV3T3JkVm9sCAUDYWNjAl80CQBlAgkAZAIIBQNhY2MCXzUFCW5ld09yZFVzZAUJY3VyT3JkVXNkCAUDYWNjAl82CAUDYWNjAl83BQZpc1Byb2QJAQh0b1ZvbHVtZQMFBndoSW5pdAUOUFJPRFVDVFBLR1NJWkUFBmlzUHJvZAgFA2FjYwNfMTADCQBmAgAABQhjdXJPcmRBbQQGYW1EaWZmCQBlAgUIY3VyT3JkQW0FCG5ld09yZEFtAwkAZgIAAAkAZQIFBndoSW5pdAUGYW1EaWZmCQACAQkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHRha2UgCQCkAwEFBmFtRGlmZgIaIGZyb20gd2FyZWhvdXNlLCBidXQgb25seSAJAKQDAQUGd2hJbml0AgogYXZhaWxhYmxlCQCcCgoJAGQCBQFqAAEJAM0IAggFA2FjYwJfMgkApAMBCQBlAgUGd2hJbml0BQZhbURpZmYIBQNhY2MCXzMJAGUCCAUDYWNjAl80BQluZXdPcmRWb2wIBQNhY2MCXzUIBQNhY2MCXzYIBQNhY2MCXzcFBmlzUHJvZAkBCHRvVm9sdW1lAwkAZQIFBndoSW5pdAUGYW1EaWZmBQ5QUk9EVUNUUEtHU0laRQUGaXNQcm9kCAUDYWNjA18xMAMJAGYCAAAJAGQCBQZ3aEluaXQFCG5ld09yZEFtCQACAQkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHRha2UgCQCkAwEJAQEtAQUIbmV3T3JkQW0CGiBmcm9tIHdhcmVob3VzZSwgYnV0IG9ubHkgCQCkAwEFBndoSW5pdAIKIGF2YWlsYWJsZQkAnAoKCQBkAgUBagABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZAIFBndoSW5pdAUIbmV3T3JkQW0IBQNhY2MCXzMJAGUCCAUDYWNjAl80BQluZXdPcmRWb2wJAGUCCAUDYWNjAl81BQljdXJPcmRVc2QIBQNhY2MCXzYIBQNhY2MCXzcFBmlzUHJvZAkBCHRvVm9sdW1lAwkAZAIFBndoSW5pdAUIbmV3T3JkQW0FDlBST0RVQ1RQS0dTSVpFBQZpc1Byb2QIBQNhY2MDXzEwAQtzZXRJbnRlcm5hbAMJY3VycmVudFdoCmN1cnJlbnRPcmQGbmV3T3JkBAljdXJyV2hSZXMJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfBAljdXJyV2hNYXQJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0AgFfBApjdXJyV2hQcm9kAwkAAAIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAAUDbmlsCQC8CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAV8EDWN1cnJlbnRPcmRSZXMJALUJAgkAkQMCBQpjdXJyZW50T3JkBQlvcmRJZHhSZXMCAV8EDWN1cnJlbnRPcmRNYXQJALUJAgkAkQMCBQpjdXJyZW50T3JkBQlvcmRJZHhNYXQCAV8EDmN1cnJlbnRPcmRQcm9kAwkAAAIJAJEDAgUKY3VycmVudE9yZAUKb3JkSWR4UHJvZAIABQNuaWwJALwJAgkAkQMCBQpjdXJyZW50T3JkBQpvcmRJZHhQcm9kAgFfAwkBAiE9AgkAkAMBBQZuZXdPcmQAAwkAAgECM25ld09yZGVyU3RyIHNob3VsZCBjb250YWluIGV4YWN0bHkgMiAnOicgc2VwYXJhdG9ycwQIcmVzUGFydHMJALUJAgkAkQMCBQZuZXdPcmQAAAIBXwQIbWF0UGFydHMJALUJAgkAkQMCBQZuZXdPcmQAAQIBXwQJcHJvZFBhcnRzAwkAAAIJAJEDAgUGbmV3T3JkAAICAAUDbmlsCQC8CQIJAJEDAgUGbmV3T3JkAAICAV8DCQECIT0CCQCQAwEFCHJlc1BhcnRzBQZOVU1SRVMJAAIBAiBBbGwgNiByZXNvdXJjZXMgc2hvdWxkIGJlIHBhc3NlZAMJAQIhPQIJAJADAQUIbWF0UGFydHMFBk5VTVJFUwkAAgECIEFsbCA2IG1hdGVyaWFscyBzaG91bGQgYmUgcGFzc2VkBAFyCgACJGwFCHJlc1R5cGVzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAnAoKAAAFA25pbAAAAAAAAAUJY3VycldoUmVzBQ1jdXJy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BQNhY2MCXzgFAWoJAQ1wYXJzZUludFZhbHVlAQkAkQMCCAUDYWNjAl84BQFqAAAEBndoSW5pdAMJAGYCCQCQAwEIBQNhY2MCXzkFAWoJAQ1wYXJzZUludFZhbHVlAQkAkQMCCAUDYWNjAl85BQFqAAAECXdoT3JkSW5pdAMJAGYCCQCQAwEIBQNhY2MDXzEwBQFqCQCRAwIIBQNhY2MDXzEwBQFqAgMwQDAECndoT3JkUGFydHMJALUJAgUJd2hPcmRJbml0AgFABAd3aE9yZEFtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKd2hPcmRQYXJ0cwAABAd3aE9yZFByCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKd2hPcmRQYXJ0cwABAwMJAQIhPQIFB2JwT3JkQW0AAAkBAiE9AgUHYnBPcmRQcgUHd2hPcmRQcgcJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIKUHJpY2VzIG9mIAkAkQMCCAUDYWNjA18xMQUBagIXIGRvbid0IG1hdGNoISBXSCBwcmljZT0JAKQDAQUHd2hPcmRQcgINLCB5b3VyIHByaWNlPQkApAMBBQdicE9yZFByBAh3aE9yZFVzZAMFBmlzUHJvZAkAaAIFB3doT3JkQW0FB3doT3JkUHIJAGsDBQd3aE9yZEFtBQd3aE9yZFByBQVNVUxUOAQIZGVsdGFWb2wJAQh0b1ZvbHVtZQMFB2JwT3JkQW0FDlBST0RVQ1RQS0dTSVpFBQZpc1Byb2QDCQAAAgUHYnBPcmRBbQAACQCfCg0JAM0IAggFA2FjYwJfMQkApAMBBQZ3aEluaXQJAM0IAggFA2FjYwJfMgUJd2hPcmRJbml0CQDNCAIIBQNhY2MCXzMJAKQDAQUGYnBJbml0CAUDYWNjAl80CAUDYWNjAl81CAUDYWNjAl82CQBkAggFA2FjYwJfNwABCAUDYWNjAl84CAUDYWNjAl85CAUDYWNjA18xMAgFA2FjYwNfMTEFBmlzUHJvZAgFA2FjYwNfMTMDCQBmAgUHYnBPcmRBbQAAAwkAZgIAAAUHd2hPcmRBbQMJAGYCBQdicE9yZEFtCQEBLQEFB3doT3JkQW0JAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIPQXR0ZW1wdCB0byBidXkgCQCkAwEFB2JwT3JkQW0CBCBvZiAJAJEDAggFA2FjYwNfMTEFAWoCGywgYnV0IHdhcmVob3VzZSBvbmx5IHNlbGxzIAkApAMBCQEBLQEFB3doT3JkQW0JAJ8KDQkAzQgCCAUDYWNjAl8xCQCkAwEFBndoSW5pdAkAzQgCCAUDYWNjAl8yCQCsAgIJAKwCAgkApAMBCQBkAgUHd2hPcmRBbQUHYnBPcmRBbQIBQAkApAMBBQd3aE9yZFByCQDNCAIIBQNhY2MCXzMJAKQDAQkAZAIFBmJwSW5pdAUHYnBPcmRBbQkAZAIIBQNhY2MCXzQFCGRlbHRhVm9sCAUDYWNjAl81CQBkAggFA2FjYwJfNgUIYnBPcmRVc2QJAGQCCAUDYWNjAl83AAEIBQNhY2MCXzgIBQNhY2MCXzkIBQNhY2MDXzEwCAUDYWNjA18xMQUGaXNQcm9kCQBkAggFA2FjYwNfMTMDBQZpc1Byb2QJAGgCBQdicE9yZEFtBQVNVUxUOAUHYnBPcmRBbQkAAgEJAKwCAgkArAICAg9BdHRlbXB0IHRvIGJ1eSAJAJEDAggFA2FjYwNfMTEFAWoCICB3aGlsZSB3YXJlaG91c2UgZG9lc24ndCBzZWxsIGl0AwkAZgIFB3doT3JkQW0AAAMJAGYCCQEBLQEFB2JwT3JkQW0FB3doT3JkQW0JAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byBzZWxsIAkApAMBCQEBLQEFB2JwT3JkQW0CBCBvZiAJAJEDAggFA2FjYwNfMTEFAWoCGiwgYnV0IHdhcmVob3VzZSBvbmx5IGJ1eXMgCQCkAwEFB3doT3JkQW0DCQBmAgkBAS0BBQdicE9yZEFtBQZicEluaXQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byBzZWxsIAkApAMBCQEBLQEFB2JwT3JkQW0CFCwgYnV0IHlvdSBvbmx5IGhhdmUgCQCkAwEFBmJwSW5pdAIEIG9mIAkAkQMCCAUDYWNjA18xMQUBagkAnwoNCQDNCAIIBQNhY2MCXzEJAKQDAQkAZQIFBndoSW5pdAUHYnBPcmRBbQkAzQgCCAUDYWNjAl8yCQCsAgIJAKwCAgkApAMBCQBkAgUHd2hPcmRBbQUHYnBPcmRBbQIBQAkApAMBBQd3aE9yZFByCQDNCAIIBQNhY2MCXzMJAKQDAQkAZAIFBmJwSW5pdAUHYnBPcmRBbQkAZQIIBQNhY2MCXzQFCGRlbHRhVm9sCQBlAggFA2FjYwJfNQUIYnBPcmRVc2QIBQNhY2MCXzYJAGQCCAUDYWNjAl83AAEIBQNhY2MCXzgIBQNhY2MCXzkIBQNhY2MDXzEwCAUDYWNjA18xMQUGaXNQcm9kCQBlAggFA2FjYwNfMTMDBQZpc1Byb2QJAGgCBQdicE9yZEFtBQVNVUxUOAUHYnBPcmRBbQkAAgEJAKwCAgkArAICAhBBdHRlbXB0IHRvIHNlbGwgCQCRAwIIBQNhY2MDXzExBQFqAh8gd2hpbGUgd2FyZWhvdXNlIGRvZXNuJ3QgYnV5IGl0ARNzZWxsUmVzb3VyY2VzQ29tbW9uBAdyZXNMaXN0DGZhY3RvcnlMb2NJZAdhbW91bnRzCW1pblByaWNlcwoBBWFkZGVyAgNhY2MBagMJAGYCCQCRAwIFB2Ftb3VudHMFAWoJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdyZXNMaXN0BQFqCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICCVlvdSBoYXZlIAkAkQMCBQdyZXNMaXN0BQFqAgQgb2YgCQCRAwIFCHJlc1R5cGVzBQFqAhQsIGJ1dCB0cmllZCB0byBzZWxsIAkApAMBCQCRAwIFB2Ftb3VudHMFAWoDCQBmAgAACQCRAwIFB2Ftb3VudHMFAWoJAAIBCQCsAgIJAKwCAgkArAICAiVZb3UgdHJpZWQgdG8gc2VsbCBuZWdhdGl2ZSBhbW91bnQgb2YgCQCRAwIFCHJlc1R5cGVzBQFqAgI6IAkApAMBCQCRAwIFB2Ftb3VudHMFAWoDCQBmAgkAkQMCBQdhbW91bnRzBQFqAAAEAWIJAQxzZWxsSW50ZXJuYWwEBQxmYWN0b3J5TG9jSWQFAWoJAJEDAgUHYW1vdW50cwUBagkAkQMCBQltaW5QcmljZXMFAWoJAJYKBAkAzQgCCAUDYWNjAl8xCAUBYgJfMQkAzQgCCAUDYWNjAl8yCQCkAwEJAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHcmVzTGlzdAUBagkAkQMCBQdhbW91bnRzBQFqCQBkAggFA2FjYwJfMwgFAWICXzIJ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AAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCWV4Y2hhbmdlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgEQc2hvcDJ1c2VyQWN0aW9ucwMNdXNkV2gyQnBTYWxkbwpjYWxsZXJBZGRyC3JlY2VpdmVkRmVlAwkAZgIFDXVzZFdoMkJwU2FsZG8AAAQLdXNkV2gyQnBGZWUJAGsDBQ11c2RXaDJCcFNhbGRvBQpBVUNUSU9ORkVFBQVNVUxUNgMJAGcCBQtyZWNlaXZlZEZlZQkAZQIFDXVzZFdoMkJwU2FsZG8JAGgCAAMFC3VzZFdoMkJwRmVlCQACAQkArAICAitUaGlzIHRyYWRlIGRvZXMgbm90IGNvdmVyIGRlbGl2ZXJ5IGNvc3Qgb2YgCQEKZml4ZWRQb2ludAIFC3JlY2VpdmVkRmVlAAYECHJlZkJ5S2V5CQEPa2V5QWRkcmVzc1JlZkJ5AQUKY2FsbGVyQWRkcgQFcmVmQnkJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0BQhyZWZCeUtleQQGY2FsbGVyCQERQGV4dHJOYXRpdmUoMTA2MikBBQpjYWxsZXJBZGRyCQDNCAIJAM0IAgMJAQlpc0RlZmluZWQBBQVyZWZCeQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBCQEFdmFsdWUBBQVyZWZCeQULdXNkV2gyQnBGZWUFC3VzZHRBc3NldElkBQNuaWwFA25pbAkBDlNjcmlwdFRyYW5zZmVyAwUGY2FsbGVyCQBlAgkAZQIFDXVzZFdoMkJwU2FsZG8JAGgCAAMFC3VzZFdoMkJwRmVlBQtyZWNlaXZlZEZlZQULdXNkdEFzc2V0SWQJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAULdXNkV2gyQnBGZWUFC3VzZHRBc3NldElkBQNuaWwBEHVzZXIyc2hvcEFjdGlvbnMEDXVzZEJwMldoU2FsZG8EcG10cw1zaG9wTGFuZE93bmVyCHNwZW50RmVlAwkAZgIFDXVzZEJwMldoU2FsZG8AAAMJAQIhPQIJAJADAQUEcG10cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIFBHBtdHMAAAQDYW10CAUDcG10BmFtb3VudAMDCQEBIQEJAQlpc0RlZmluZWQBCAUDcG10B2Fzc2V0SWQGCQECIT0CCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQITVVNEVCBwYXltZW50cyBvbmx5IQQQdXNkdFNwZW50V2l0aEZlZQkAZAIFDXVzZEJwMldoU2FsZG8FCHNwZW50RmVlAwkBAiE9AgUDYW10BRB1c2R0U3BlbnRXaXRoRmVlCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIfSW5zdWZmaWNpZW50IHBheW1lbnQhIEF0dGFjaGVkPQkBCmZpeGVkUG9pbnQCBQNhbXQABgILLCByZXF1aXJlZD0JAQpmaXhlZFBvaW50AgUNdXNkQnAyV2hTYWxkbwAGAgErCQEKZml4ZWRQb2ludAIFCHNwZW50RmVlAAYCDihkZWxpdmVyeSBmZWUpAwkAZgIFDk1JTlNIT1BQQVlNRU5UBQ11c2RCcDJXaFNhbGRvCQACAQkArAICAhJNaW4gc2hvcCB0cmFkZSBpcyAJAQpmaXhlZFBvaW50AgUOTUlOU0hPUFBBWU1FTlQABgQLdXNkQnAyV2hGZWUJAGsDBQ11c2RCcDJXaFNhbGRvBQpBVUNUSU9ORkVFBQVNVUxUNgQIcmVmQnlLZXkJAQ9rZXlBZGRyZXNzUmVmQnkBBQ1zaG9wTGFuZE93bmVyBAVyZWZCeQkAnQgCBQ9zdGFraW5nQ29udHJhY3QFCHJlZkJ5S2V5CQDNCAIJAM0IAgMJAQlpc0RlZmluZWQBBQVyZWZCeQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBCQEFdmFsdWUBBQVyZWZCeQULdXNkQnAyV2hGZWUFC3VzZHRBc3NldElkBQNuaWwFA25pbAkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUNc2hvcExhbmRPd25lcgkAZQIFDXVzZEJwMldoU2FsZG8JAGgCAAMFC3VzZEJwMldoRmVlBQt1c2R0QXNzZXRJZAkBDlNjcmlwdFRyYW5zZmVyAwUMcmVzdENvbnRyYWN0BQt1c2RCcDJXaEZlZQULdXNkdEFzc2V0SWQDCQECIT0CCQCQAwEFBHBtdHMAAAkAAgECEk5vIHBheW1lbnRzIG5lZWRlZAUDbmlsARVhY2NlcHRTaG9wT3JkZXJDb21tb24GD3Nob3BMYW5kQXNzZXRJZApjYWxsZXJBZGRyCmJwT3JkZXJTdHIJYnBSZXNMaXN0CWJwTWF0TGlzdApicFByb2RMaXN0BAlsYW5kQXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQ9zaG9wTGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQ9zaG9wTGFuZEFzc2V0SWQJAAIBCQCsAgIJAKwCAgIETkZUIAgFCWxhbmRBc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQNc2hvcExhbmRPd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFD3Nob3BMYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQlsYW5kQXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkAAAIFDXNob3BMYW5kT3duZXIFCmNhbGxlckFkZHIJAAIBAh5Zb3UgY2Fubm90IHRyYWRlIHdpdGggeW91cnNlbGYEDGJwT3JkZXJQYXJ0cwkAvAkCBQpicE9yZGVyU3RyAgE6AwkBAiE9AgkAkAMBBQxicE9yZGVyUGFydHMAAwkAAgECMmJwT3JkZXJTdHIgc2hvdWxkIGNvbnRhaW4gZXhhY3RseSAyICc6JyBzZXBhcmF0b3JzBAhicE9yZFJlcwkAtQkCCQCRAwIFDGJwT3JkZXJQYXJ0cwAAAgFfBAhicE9yZE1hdAkAtQkCCQCRAwIFDGJwT3JkZXJQYXJ0cwABAgFfBAlicE9yZFByb2QDCQAAAgkAkQMCBQxicE9yZGVyUGFydHMAAgIABQNuaWwJALwJAgkAkQMCBQxicE9yZGVyUGFydHMAAgIBXwMJAQIhPQIJAJADAQUIYnBPcmRSZXMFBk5VTVJFUwkAAgECIEFsbCA2IHJlc291cmNlcyBzaG91bGQgYmUgcGFzc2VkAwkBAiE9AgkAkAMBBQhicE9yZE1hdAUGTlVNUkVTCQACAQIgQWxsIDYgbWF0ZXJpYWxzIHNob3VsZCBiZSBwYXNzZWQEAndoCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIUZ2V0V2FyZWhvdXNlUkVBRE9OTFkJAMwIAgUPc2hvcExhbmRBc3NldElkBQNuaWwFA25pbAQJY3VycmVudFdoCQC8CQIFAndoAgE6BAljdXJyV2hSZXMJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfBAljdXJyV2hNYXQJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0AgFfBApjdXJyV2hQcm9kAwkAAAIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAAUDbmlsCQC8CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAV8ED2N1cnJXaExvY2tlZFZvbAkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4TE9GVAIBXwUJdm9sTG9ja2VkBAZvcmRLZXkJAQ5rZXlPcmRlckJ5TGFuZAEFD3Nob3BMYW5kQXNzZXRJZAQFd2hPcmQJAQhnZXRPcmRlcgEFBm9yZEtleQQId2hPcmRSZXMJALUJAgkAkQMCBQV3aE9yZAUJb3JkSWR4UmVzAgFfBAh3aE9yZE1hdAkAtQkCCQCRAwIFBXdoT3JkBQlvcmRJZHhNYXQCAV8ECXdoT3JkUHJvZAMJAAACCQCRAwIFBXdoT3JkBQpvcmRJZHhQcm9kAgAFA25pbAkAvAkCCQCRAwIFBXdoT3JkBQpvcmRJZHhQcm9kAgFfBAFyCgACJGwFCGJwT3JkUmVzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAnwoNBQNuaWwFA25pbAUDbmlsAAAAAAAAAAAFCWJwUmVzTGlzdAUJY3VycldoUmVzBQh3aE9yZFJlcwUIcmVzVHlwZXMH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AMwIAgkAuQkCCAUBbQJfMgIBXwkAzAgCCQC6CQIIBQFwAl8yAgFfBQNuaWwCAToEBndoU2F2ZQkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDXNhdmVXYXJlaG91c2UJAMwIAgUFd2hTdHIJAMwIAgUPc2hvcExhbmRBc3NldElkBQNuaWwFA25pbAQOYWNjU3RhdHNSZXN1bHQJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVBY2NTdGF0cwkAzAgCBQ1zaG9wTGFuZE93bmVyCQDMCAIJAGsDBQZ4cFNob3AIBQFwA18xMwUFTVVMVDgFA25pbAUDbmlsCQCcCgoJAQtTdHJpbmdFbnRyeQIFBm9yZEtleQULbmV3V2hPcmRTdHIIBQFyAl8zCAUBbQJfMwgFAXACXzMIBQFwAl81CAUBcAJfNggFAXADXzEzBQ1zaG9wTGFuZE93bmVyBQZ3aFNhdmUFDmFjY1N0YXRzUmVzdWx0ARpzZWxsUmVzb3VyY2VzV29ybGRJbnRlcm5hbAEGYW1vdW50BAZvbmVSZXMJAGkCBQZhbW91bnQAHgQRb25lRmFjdG9yeUFtb3VudHMJAMwIAgUGb25lUmVzCQDMCAIFBm9uZVJlcwkAzAgCBQZvbmVSZXMJAMwIAgUGb25lUmVzCQDMCAIFBm9uZVJlcwkAzAgCBQZvbmVSZXMFA25pbAQBcwkApAMBBQZvbmVSZXMEB3Jlc0xpc3QJAMwIAgUBcwkAzAgCBQFzCQDMCAIFAXMJAMwIAgUBcwkAzAgCBQFzCQDMCAIFAXMFA25pbAQJbWluUHJpY2VzCQDMCAIAAAkAzAgCAAAJAMwIAgAACQDMCAIAAAkAzAgCAAAJAMwIAgAABQNuaWwKAQpvbmVGYWN0b3J5AgNhY2MJY29udGluZW50BAF4CQETc2VsbFJlc291cmNlc0NvbW1vbgQFB3Jlc0xpc3QFCWNvbnRpbmVudAURb25lRmFjdG9yeUFtb3VudHMFCW1pblByaWNlcwkAlQoDCQDOCAIIBQNhY2MCXzEIBQF4Al8xCQBkAggFA2FjYwJfMggFAXgCXzMJAGQCCAUDYWNjAl8zCAUBeAJfNAQNJHQwMjUyOTIyNTM4MgoAAiRsBQpjb250aW5lbnRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlQoDBQNuaWwAAAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQpvbmVGYWN0b3J5AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQQOZmFjdG9yeUFjdGlvbnMIBQ0kdDAyNTI5MjI1MzgyAl8xBAx1c2R0UmVjZWl2ZWQIBQ0kdDAyNTI5MjI1MzgyAl8yBAh0b3RhbFJlcwgFDSR0MDI1MjkyMjUzODICXzMEA2ZlZQkAawMFDHVzZHRSZWNlaXZlZAUMREVMSVZFUllfRkVFBQVNVUxUNgQQYWN0aXZpdGllc0Ftb3VudAkAaQIFDHVzZHRSZWNlaXZlZABkBAh1c2R0TGVmdAkAZQIJAGUCBQx1c2R0UmVjZWl2ZWQFEGFjdGl2aXRpZXNBbW91bnQFA2ZlZQkAlwoFBQ5mYWN0b3J5QWN0aW9ucwUIdXNkdExlZnQFA2ZlZQUQYWN0aXZpdGllc0Ftb3VudAUIdG90YWxSZXMBEGNyYWZ0R29vZHNDb21tb24FB21hdExpc3QIcHJvZExpc3QUbWFudWZhY3RvcnlDb250aW5lbnQKcHJvZHVjdElkeAhxdWFudGl0eQMJAGcCAAAFCHF1YW50aXR5CQACAQIbUXVhbnRpdHkgc2hvdWxkIGJlIHBvc2l0aXZlAwMJAGYCAAAFCnByb2R1Y3RJZHgGCQBnAgUKcHJvZHVjdElkeAkAkAMBBRBwcm9kdWN0aW9uTWF0cml4CQACAQkArAICAhRVbmtub3duIHByb2R1Y3QgaWR4PQkApAMBBQpwcm9kdWN0SWR4BAZyZWNpcGUJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4BQpwcm9kdWN0SWR4AgFfAwkBAiE9AgkAkAMBBQZyZWNpcGUFClJFQ0lQRVNJWkUJAAIBCQCsAgICF0ZhdGFsOiB1bmtub3duIHJlY2lwZTogCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgFCnBy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aQMJAGcCBQIkaQUCJHMFAiRhCQEIcHJvZHVjZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjFfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjFfMgIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYJAJUKAwgFBm1lcmdlZAJfMQUHbmV3UHJvZAgFBm1lcmdlZAJfMhgBaQEacmVjYWxjTG9ja2VkVm9sdW1lUkVBRE9OTFkCC2xhbmRBc3NldElkAndoBApjdXJyZW50T3JkCQEIZ2V0T3JkZXIBCQEOa2V5T3JkZXJCeUxhbmQBBQtsYW5kQXNzZXRJZAQBegkBC3NldEludGVybmFsAwUCd2gFCmN1cnJlbnRPcmQFCmN1cnJlbnRPcmQJAJQKAgUDbmlsCQBkAggFAXoCXzQIBQF6Al81AWkBDWNvbnN0cnVjdG9yVjEBCHJlc3RBZGRyAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRUGVybWlzc2lvbiBkZW5pZWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDmtleVJlc3RBZGRyZXNzAAUIcmVzdEFkZHIFA25pbAFpAQ1zZWxsUmVzb3VyY2VzAgdhbW91bnRzCW1pblByaWNlcwQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAMJAAACBQxwcm9sb2dSZXN1bHQFDHByb2xvZ1Jlc3VsdAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIqc2VsbFJlc291cmNlcyBkb2Vzbid0IHJlcXVpcmUgYW55IHBheW1lbnRzBAtjdXJMb2NhdGlvbgkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04CAV8DCQECIT0CCQCRAwIFC2N1ckxvY2F0aW9uBQpsb2NJZHhUeXBlAgFGCQACAQkArAICAi1EdWNrIGxvY2F0aW9uIHR5cGUgc2hvdWxkIGJlIEZhY3RvcnksIGJ1dCBpcyAJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQHcmVzTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwIBXwQNJHQwMjg5MTUyOTA0MQkBE3NlbGxSZXNvdXJjZXNDb21tb24EBQdyZXNMaXN0CQCRAwIFC2N1ckxvY2F0aW9uBQhsb2NJZHhJZAUHYW1vdW50cwUJbWluUHJpY2VzBA5mYWN0b3J5QWN0aW9ucwgFDSR0MDI4OTE1MjkwNDECXzEEBm5ld1JlcwgFDSR0MDI4OTE1MjkwNDECXzIEDHVzZHRSZWNlaXZlZAgFDSR0MDI4OTE1MjkwNDECXzMECHRvdGFsUmVzCAUNJHQwMjg5MTUyOTA0MQJfNAQQYWN0aXZpdGllc0Ftb3VudAkAaQIFDHVzZHRSZWNlaXZlZABkBAduZXdQYWNrCQC6CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQC5CQIFBm5ld1JlcwIBXwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgQOYmFja3BhY2tSZXN1bHQJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVCYWNrcGFjawkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQduZXdQYWNrBQNuaWwFA25pbAQLc3RhdHNSZXN1bHQJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag91cGRhdGVEdWNrU3RhdHMJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgkAawMFB3hwVHJhZGUFCHRvdGFsUmVzBQVNVUxUOAUDbmlsBQNuaWwJAJQKAgkAzQgCCQDNCAIFDmZhY3RvcnlBY3Rpb25zCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIJAGUCBQx1c2R0UmVjZWl2ZWQFEGFjdGl2aXRpZXNBbW91bnQFC3VzZHRBc3NldElkCQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFEGFjdGl2aXRpZXNBbW91bnQFC3VzZHRBc3NldElkCQCVCgMFDmJhY2twYWNrUmVzdWx0BQxwcm9sb2dSZXN1bHQFC3N0YXRzUmVzdWx0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEnNlbGxSZXNvdXJjZXNXb3JsZAIEYWRkcgZhbW91bnQDCQECIT0CCAUBaQZjYWxsZXIFDWFjcmVzQ29udHJhY3QJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAQNJHQwMjk4MzMyOTk5MAkBGnNlbGxSZXNvdXJjZXNXb3JsZEludGVybmFsAQUGYW1vdW50BA5mYWN0b3J5QWN0aW9ucwgFDSR0MDI5ODMzMjk5OTACXzEECHVzZHRMZWZ0CAUNJHQwMjk4MzMyOTk5MAJfMgQDZmVlCAUNJHQwMjk4MzMyOTk5MAJfMwQQYWN0aXZpdGllc0Ftb3VudAgFDSR0MDI5ODMzMjk5OTACXzQECHRvdGFsUmVzCAUNJHQwMjk4MzMyOTk5MAJfNQMJAGcCAAAFCHVzZHRMZWZ0CQACAQkArAICAitUaGlzIHRyYWRlIGRvZXMgbm90IGNvdmVyIGRlbGl2ZXJ5IGNvc3Qgb2YgCQEKZml4ZWRQb2ludAIFA2ZlZQAGBAtzdGF0c1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUFjY1N0YXRzCQDMCAIFBGFkZHIJAMwIAgkAawMFB3hwVHJhZGUFCHRvdGFsUmVzBQVNVUxUOAUDbmlsBQNuaWwJAJQKAgkAzQgCCQDNCAIJAM0IAgUOZmFjdG9yeUFjdGlvbnMJAQxJbnRlZ2VyRW50cnkCBQ9kZWxpdmVyeUZ1bmRLZXkJAGQCCQELdmFsdWVPckVsc2UCCQCfCAEFD2RlbGl2ZXJ5RnVuZEtleQAABQNmZWUJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAUQYWN0aXZpdGllc0Ftb3VudAULdXNkdEFzc2V0SWQJAQ5TY3JpcHRUcmFuc2ZlcgMFEmludmVzdEZ1bmRDb250cmFjdAUIdXNkdExlZnQFC3VzZHRBc3NldElkCQCUCgIFCHVzZHRMZWZ0BQtzdGF0c1Jlc3VsdAFpARpzZWxsUmVzb3VyY2VzV29ybGRSRUFET05MWQEGYW1vdW50BAh1c2R0TGVmdAgJARpzZWxsUmVzb3VyY2VzV29ybGRJbnRlcm5hbAEFBmFtb3VudAJfMgkAlAoCBQNuaWwFCHVzZHRMZWZ0AWkBGXNlbGxSZXNvdXJjZXNEdWNrRGVsaXZlcnkDB2Ftb3VudHMJbWluUHJpY2VzEGZhY3RvcnlDb250aW5lbnQEDHByb2xvZ1Jlc3VsdAkBBnByb2xvZwADCQAAAgUMcHJvbG9nUmVzdWx0BQxwcm9sb2dSZXN1bHQEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECKnNlbGxSZXNvdXJjZXMgZG9lc24ndCByZXF1aXJlIGFueSBwYXltZW50cwQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAdyZXNMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfBA0kdDAzMTE0OTMxMjcwCQETc2VsbFJlc291cmNlc0NvbW1vbgQFB3Jlc0xpc3QFEGZhY3RvcnlDb250aW5lbnQFB2Ftb3VudHMFCW1pblByaWNlcwQOZmFjdG9yeUFjdGlvbnMIBQ0kdDAzMTE0OTMxMjcwAl8xBAZuZXdSZXMIBQ0kdDAzMTE0OTMxMjcwAl8yBAx1c2R0UmVjZWl2ZWQIBQ0kdDAzMTE0OTMxMjcwAl8zBAh0b3RhbFJlcwgFDSR0MDMxMTQ5MzEyNzACXzQEB25ld1BhY2sJALoJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJALkJAgUGbmV3UmVzAgFfCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6BA5iYWNrcGFja1Jlc3VsdAkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUJhY2twYWNrCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIFB25ld1BhY2sFA25pbAUDbmlsBAtzdGF0c1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCD3VwZGF0ZUR1Y2tTdGF0cwkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCCQBrAwUHeHBUcmFkZQUIdG90YWxSZXMFBU1VTFQ4BQNuaWwFA25pbAQHZmVlUGFydAkAawMFDHVzZHRSZWNlaXZlZAUMREVMSVZFUllfRkVFBQVNVUxUNgQDZmVlCQCWAwEJAMwIAgUHZmVlUGFydAkAzAgCBRVNSU5fVVNEVF9GRUVfREVMSVZFUlkFA25pbAQQYWN0aXZpdGllc0Ftb3VudAkAaQIFDHVzZHRSZWNlaXZlZABkAwkAZwIFA2ZlZQkAZQIFDHVzZHRSZWNlaXZlZAUQYWN0aXZpdGllc0Ftb3VudAkAAgEJAKwCAgIrVGhpcyB0cmFkZSBkb2VzIG5vdCBjb3ZlciBkZWxpdmVyeSBjb3N0IG9mIAkBCmZpeGVkUG9pbnQCBQNmZWUABgQJZnVuZFRvdGFsCQELdmFsdWVPckVsc2UCCQCfCAEFD2RlbGl2ZXJ5RnVuZEtleQAACQCUCgIJAM0IAgkAzQgCCQDNCAIFDmZhY3RvcnlBY3Rpb25zCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIJAGUCCQBlAgUMdXNkdFJlY2VpdmVkBRBhY3Rpdml0aWVzQW1vdW50BQNmZWUFC3VzZHRBc3NldElkCQEMSW50ZWdlckVudHJ5AgUPZGVsaXZlcnlGdW5kS2V5CQBkAgUJZnVuZFRvdGFsBQNmZWUJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAUQYWN0aXZpdGllc0Ftb3VudAULdXNkdEFzc2V0SWQJAJUKAwUOYmFja3BhY2tSZXN1bHQFDHByb2xvZ1Jlc3VsdAULc3RhdHNSZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEZc2VsbFJlc291cmNlc0xhbmREZWxpdmVyeQQHYW1vdW50cwltaW5QcmljZXMLbGFuZEFzc2V0SWQQZmFjdG9yeUNvbnRpbmVudAQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAMJAAACBQxwcm9sb2dSZXN1bHQFDHByb2xvZ1Jlc3VsdAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECKnNlbGxSZXNvdXJjZXMgZG9lc24ndCByZXF1aXJlIGFueSBwYXltZW50cwQEdXNlcggFAWkGY2FsbGVyBARhZGRyCQClCAEFBHVzZXIEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMEAndoCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIUZ2V0V2FyZWhvdXNlUkVBRE9OTFkJAMwIAgULbGFuZEFzc2V0SWQFA25pbAUDbmlsBAljdXJyZW50V2gJALwJAgUCd2gCAToEB3Jlc0xpc3QJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfBA0kdDAzMzE4NDMzMzA1CQETc2VsbFJlc291cmNlc0NvbW1vbgQFB3Jlc0xpc3QFEGZhY3RvcnlDb250aW5lbnQFB2Ftb3VudHMFCW1pblByaWNlcwQOZmFjdG9yeUFjdGlvbnMIBQ0kdDAzMzE4NDMzMzA1Al8xBAZuZXdSZXMIBQ0kdDAzMzE4NDMzMzA1Al8yBAx1c2R0UmVjZWl2ZWQIBQ0kdDAzMzE4NDMzMzA1Al8zBAh0b3RhbFJlcwgFDSR0MDMzMTg0MzMzMDUCXzQEBXdoU3RyCQC6CQIJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIJALkJAgUGbmV3UmVzAgFfCQDMCAIJAJEDAgUJY3VycmVudFdoBQh3aElkeE1hdAkAzAgCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kCQDMCAIJAJEDAgUJY3VycmVudFdoBQl3aElkeExPRlQFA25pbAIBOgQGd2hTYXZlCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAINc2F2ZVdhcmVob3VzZQkAzAgCBQV3aFN0cgkAzAgCBQtsYW5kQXNzZXRJZAUDbmlsBQNuaWwEC3N0YXRzUmVzdWx0CQEFYXNJbnQBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQWNjU3RhdHMJAMwIAgUEYWRkcgkAzAgCCQBrAwUHeHBUcmFkZQUIdG90YWxSZXMFBU1VTFQ4BQNuaWwFA25pbAQHZmVlUGFydAkAawMFDHVzZHRSZWNlaXZlZAUMREVMSVZFUllfRkVFBQVNVUxUNgQDZmVlCQCWAwEJAMwIAgUHZmVlUGFydAkAzAgCBRVNSU5fVVNEVF9GRUVfREVMSVZFUlkFA25pbAQQYWN0aXZpdGllc0Ftb3VudAkAaQIFDHVzZHRSZWNlaXZlZABkAwkAZwIFA2ZlZQkAZQIFDHVzZHRSZWNlaXZlZAUQYWN0aXZpdGllc0Ftb3VudAkAAgEJAKwCAgIrVGhpcyB0cmFkZSBkb2VzIG5vdCBjb3ZlciBkZWxpdmVyeSBjb3N0IG9mIAkBCmZpeGVkUG9pbnQCBQNmZWUABgQJZnVuZFRvdGFsCQELdmFsdWVPckVsc2UCCQCfCAEFD2RlbGl2ZXJ5RnVuZEtleQAACQCUCgIJAM0IAgkAzQgCCQDNCAIFDmZhY3RvcnlBY3Rpb25zCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIJAGUCCQBlAgUMdXNkdFJlY2VpdmVkBRBhY3Rpdml0aWVzQW1vdW50BQNmZWUFC3VzZHRBc3NldElkCQEMSW50ZWdlckVudHJ5AgUPZGVsaXZlcnlGdW5kS2V5CQBkAgUJZnVuZFRvdGFsBQNmZWUJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAUQYWN0aXZpdGllc0Ftb3VudAULdXNkdEFzc2V0SWQJAJUKAwUGd2hTYXZlBQxwcm9sb2dSZXN1bHQFC3N0YXRzUmVzdWx0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDGJ1eU1hdGVyaWFscwIHYW1vdW50cwltYXhQcmljZXMEDHByb2xvZ1Jlc3VsdAkBBnByb2xvZwADCQAAAgUMcHJvbG9nUmVzdWx0BQxwcm9sb2dSZXN1bHQEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABANhbXQIBQNwbXQGYW1vdW50AwMJAQEhAQkBCWlzRGVmaW5lZAEIBQNwbXQHYXNzZXRJZAYJAQIhPQIJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhNVU0RUIHBheW1lbnRzIG9ubHkhBAtjdXJMb2NhdGlvbgkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04CAV8DCQECIT0CCQCRAwIFC2N1ckxvY2F0aW9uBQpsb2NJZHhUeXBlAgFGCQACAQkArAICAi1EdWNrIGxvY2F0aW9uIHR5cGUgc2hvdWxkIGJlIEZhY3RvcnksIGJ1dCBpcyAJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQHbWF0TGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQNJHQwMzUxMjkzNTI1MQkBEmJ1eU1hdGVyaWFsc0NvbW1vbgQFB21hdExpc3QJAJEDAgULY3VyTG9jYXRpb24FCGxvY0lkeElkBQdhbW91bnRzBQltYXhQcmljZXMEDmZhY3RvcnlBY3Rpb25zCAUNJHQwMzUxMjkzNTI1MQJfMQQGbmV3TWF0CAUNJHQwMzUxMjkzNTI1MQJfMgQJdXNkdFNwZW50CAUNJHQwMzUxMjkzNTI1MQJfMwQIdG90YWxNYXQIBQ0kdDAzNTEyOTM1MjUxAl80AwkAZgIFCXVzZHRTcGVudAUDYW10CQACAQkArAICCQCsAgIJAKwCAgIfSW5zdWZmaWNpZW50IHBheW1lbnQhIEF0dGFjaGVkPQkBCmZpeGVkUG9pbnQCBQNhbXQABgILLCByZXF1aXJlZD0JAQpmaXhlZFBvaW50AgUJdXNkdFNwZW50AAYEB25ld1BhY2sJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQDMCAIJALkJAgUGbmV3TWF0AgFfCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6BA5iYWNrcGFja1Jlc3VsdAkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUJhY2twYWNrCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIFB25ld1BhY2sFA25pbAUDbmlsBARyZXN0AwkAZgIJAGUCBQNhbXQFCXVzZHRTcGVudAAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkAZQIFA2FtdAUJdXNkdFNwZW50BQt1c2R0QXNzZXRJZAUDbmlsBQNuaWwEEGFjdGl2aXRpZXNBbW91bnQJAGkCBQl1c2R0U3BlbnQAZAQLc3RhdHNSZXN1bHQJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag91cGRhdGVEdWNrU3RhdHMJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgkAawMFB3hwVHJhZGUFCHRvdGFsTWF0BQVNVUxUOAUDbmlsBQNuaWwJAJQKAgkAzQgCCQDOCAIFDmZhY3RvcnlBY3Rpb25zBQRyZXN0CQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFEGFjdGl2aXRpZXNBbW91bnQFC3VzZHRBc3NldElkCQCVCgMFDmJhY2twYWNrUmVzdWx0BQxwcm9sb2dSZXN1bHQFC3N0YXRzUmVzdWx0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBGGJ1eU1hdGVyaWFsc0R1Y2tEZWxpdmVyeQMHYW1vdW50cwltYXhQcmljZXMQZmFjdG9yeUNvbnRpbmVudAQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAMJAAACBQxwcm9sb2dSZXN1bHQFDHByb2xvZ1Jlc3VsdAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQDAwkBASEBCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBgkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQHbWF0TGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQNJHQwMzY2OTUzNjgxMgkBEmJ1eU1hdGVyaWFsc0NvbW1vbgQFB21hdExpc3QFEGZhY3RvcnlDb250aW5lbnQFB2Ftb3VudHMFCW1heFByaWNlcwQOZmFjdG9yeUFjdGlvbnMIBQ0kdDAzNjY5NTM2ODEyAl8xBAZuZXdNYXQIBQ0kdDAzNjY5NTM2ODEyAl8yBAl1c2R0U3BlbnQIBQ0kdDAzNjY5NTM2ODEyAl8zBAh0b3RhbE1hdAgFDSR0MDM2Njk1MzY4MTICXzQEB25ld1BhY2sJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQDMCAIJALkJAgUGbmV3TWF0AgFfCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6BA5iYWNrcGFja1Jlc3VsdAkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUJhY2twYWNrCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIFB25ld1BhY2sFA25pbAUDbmlsBAtzdGF0c1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCD3VwZGF0ZUR1Y2tTdGF0cwkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCCQBrAwUHeHBUcmFkZQUIdG90YWxNYXQFBU1VTFQ4BQNuaWwFA25pbAQHZmVlUGFydAkAawMFCXVzZHRTcGVudAUMREVMSVZFUllfRkVFBQVNVUxUNgQDZmVlCQCWAwEJAMwIAgUHZmVlUGFydAkAzAgCBRVNSU5fVVNEVF9GRUVfREVMSVZFUlkFA25pbAQQdXNkdFNwZW50V2l0aEZlZQkAZAIFCXVzZHRTcGVudAUDZmVlAwkAZgIFEHVzZHRTcGVudFdpdGhGZWUFA2FtdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICH0luc3VmZmljaWVudCBwYXltZW50ISBBdHRhY2hlZD0JAQpmaXhlZFBvaW50AgUDYW10AAYCCywgcmVxdWlyZWQ9CQEKZml4ZWRQb2ludAIFCXVzZHRTcGVudAAGAgErCQEKZml4ZWRQb2ludAIFA2ZlZQAGAg4oZGVsaXZlcnkgZmVlKQQEcmVzdAMJAGYCCQBlAgUDYW10BRB1c2R0U3BlbnRXaXRoRmVlAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQBlAgUDYW10BRB1c2R0U3BlbnRXaXRoRmVlBQt1c2R0QXNzZXRJZAUDbmlsBQNuaWwEEGFjdGl2aXRpZXNBbW91bnQJAGkCBQl1c2R0U3BlbnQAZAQJZnVuZFRvdGFsCQELdmFsdWVPckVsc2UCCQCfCAEFD2RlbGl2ZXJ5RnVuZEtleQAACQCUCgIJAM0IAgkAzQgCCQDOCAIFDmZhY3RvcnlBY3Rpb25zBQRyZXN0CQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFEGFjdGl2aXRpZXNBbW91bnQFC3VzZHRBc3NldElkCQEMSW50ZWdlckVudHJ5AgUPZGVsaXZlcnlGdW5kS2V5CQBkAgUJZnVuZFRvdGFsBQNmZWUJAJUKAwUOYmFja3BhY2tSZXN1bHQFDHByb2xvZ1Jlc3VsdAULc3RhdHNSZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEYYnV5TWF0ZXJpYWxzTGFuZERlbGl2ZXJ5BAdhbW91bnRzCW1heFByaWNlcwtsYW5kQXNzZXRJZBBmYWN0b3J5Q29udGluZW50BAxwcm9sb2dSZXN1bHQJAQZwcm9sb2cAAwkAAAIFDHByb2xvZ1Jlc3VsdAUMcHJvbG9nUmVzdWx0AwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQDAwkBASEBCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBgkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEEBHVzZXIIBQFpBmNhbGxlcgQEYWRkcgkApQgBBQR1c2VyBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQkAmggCBQ9zdGFraW5nQ29udHJhY3QJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBAJ3aAkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCFGdldFdhcmVob3VzZVJFQURPTkxZCQDMCAIFC2xhbmRBc3NldElkBQNuaWwFA25pbAQJY3VycmVudFdoCQC8CQIFAndoAgE6BAdtYXRMaXN0CQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeE1hdAIBXwQNJHQwMzg5NzczOTA5NAkBEmJ1eU1hdGVyaWFsc0NvbW1vbgQFB21hdExpc3QFEGZhY3RvcnlDb250aW5lbnQFB2Ftb3VudHMFCW1heFByaWNlcwQOZmFjdG9yeUFjdGlvbnMIBQ0kdDAzODk3NzM5MDk0Al8xBAZuZXdNYXQIBQ0kdDAzODk3NzM5MDk0Al8yBAl1c2R0U3BlbnQIBQ0kdDAzODk3NzM5MDk0Al8zBAh0b3RhbE1hdAgFDSR0MDM4OTc3MzkwOTQCXzQEBXdoU3RyCQC6CQIJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIJAJEDAgUJY3VycmVudFdoBQh3aElkeFJlcwkAzAgCCQC5CQIFBm5ld01hdAIBXwkAzAgCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kCQDMCAIJAJEDAgUJY3VycmVudFdoBQl3aElkeExPRlQFA25pbAIBOgQGd2hTYXZlCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAINc2F2ZVdhcmVob3VzZQkAzAgCBQV3aFN0cgkAzAgCBQtsYW5kQXNzZXRJZAUDbmlsBQNuaWwEC3N0YXRzUmVzdWx0CQEFYXNJbnQBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQWNjU3RhdHMJAMwIAgUEYWRkcgkAzAgCCQBrAwUHeHBUcmFkZQUIdG90YWxNYXQFBU1VTFQ4BQNuaWwFA25pbAQHZmVlUGFydAkAawMFCXVzZHRTcGVudAUMREVMSVZFUllfRkVFBQVNVUxUNgQDZmVlCQCWAwEJAMwIAgUHZmVlUGFydAkAzAgCBRVNSU5fVVNEVF9GRUVfREVMSVZFUlkFA25pbAQQdXNkdFNwZW50V2l0aEZlZQkAZAIFCXVzZHRTcGVudAUDZmVlAwkAZgIFEHVzZHRTcGVudFdpdGhGZWUFA2FtdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICH0luc3VmZmljaWVudCBwYXltZW50ISBBdHRhY2hlZD0JAQpmaXhlZFBvaW50AgUDYW10AAYCCywgcmVxdWlyZWQ9CQEKZml4ZWRQb2ludAIFCXVzZHRTcGVudAAGAgErCQEKZml4ZWRQb2ludAIFA2ZlZQAGAg4oZGVsaXZlcnkgZmVlKQQEcmVzdAMJAGYCCQBlAgUDYW10BRB1c2R0U3BlbnRXaXRoRmVlAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQBlAgUDYW10BRB1c2R0U3BlbnRXaXRoRmVlBQt1c2R0QXNzZXRJZAUDbmlsBQNuaWwEEGFjdGl2aXRpZXNBbW91bnQJAGkCBQl1c2R0U3BlbnQAZAQJZnVuZFRvdGFsCQELdmFsdWVPckVsc2UCCQCfCAEFD2RlbGl2ZXJ5RnVuZEtleQAACQCUCgIJAM0IAgkAzQgCCQDOCAIFDmZhY3RvcnlBY3Rpb25zBQRyZXN0CQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFEGFjdGl2aXRpZXNBbW91bnQFC3VzZHRBc3NldElkCQEMSW50ZWdlckVudHJ5AgUPZGVsaXZlcnlGdW5kS2V5CQBkAgUJZnVuZFRvdGFsBQNmZWUJAJUKAwUGd2hTYXZlBQxwcm9sb2dSZXN1bHQFC3N0YXRzUmVzdWx0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEWV4Y2hhbmdlUmVzb3VyY2VzAQdhbW91bnRzBAxwcm9sb2dSZXN1bHQJAQZwcm9sb2cAAwkAAAIFDHByb2xvZ1Jlc3VsdAUMcHJvbG9nUmVzdWx0BAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAiJleGFjdGx5IDEgcGF5bWVudCBtdXN0IGJlIGF0dGFjaGVkBANwbXQJAJEDAggFAWkIcGF5bWVudHMAAAQDYW10CAUDcG10BmFtb3VudAMDCQEBIQEJAQlpc0RlZmluZWQBCAUDcG10B2Fzc2V0SWQGCQECIT0CCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQITVVNEVCBwYXltZW50cyBvbmx5IQQLY3VyTG9jYXRpb24JALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OAgFfAwkBAiE9AgkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQIBRgkAAgEJAKwCAgItRHVjayBsb2NhdGlvbiB0eXBlIHNob3VsZCBiZSBGYWN0b3J5LCBidXQgaXMgCQCRAwIFC2N1ckxvY2F0aW9uBQpsb2NJZHhUeXBlBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEB3Jlc0xpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMCAV8EB21hdExpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8EDSR0MDQxMTcyNDEyNzgJARdleGNoYW5nZVJlc291cmNlc0NvbW1vbgMFB3Jlc0xpc3QFB21hdExpc3QFB2Ftb3VudHMEBm5ld1JlcwgFDSR0MDQxMTcyNDEyNzgCXzEEBm5ld01hdAgFDSR0MDQxMTcyNDEyNzgCXzIECXVzZHRTcGVudAgFDSR0MDQxMTcyNDEyNzgCXzMEFHRvdGFsQW1vdW50Q29udmVydGVkCAUNJHQwNDExNzI0MTI3OAJfNAMJAGYCBQl1c2R0U3BlbnQFA2FtdAkAAgEJAKwCAgkArAICCQCsAgICH0luc3VmZmljaWVudCBwYXltZW50ISBBdHRhY2hlZD0JAQpmaXhlZFBvaW50AgUDYW10AAYCCywgcmVxdWlyZWQ9CQEKZml4ZWRQb2ludAIFCXVzZHRTcGVudAAGBAduZXdQYWNrCQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQC5CQIFBm5ld1JlcwIBXwkAzAgCCQC5CQIFBm5ld01hdAIBXwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgQOYmFja3BhY2tSZXN1bHQJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVCYWNrcGFjawkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQduZXdQYWNrBQNuaWwFA25pbAQEcmVzdAMJAGYCCQBlAgUDYW10BQl1c2R0U3BlbnQAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIJAGUCBQNhbXQFCXVzZHRTcGVudAULdXNkdEFzc2V0SWQFA25pbAUDbmlsBBBhY3Rpdml0aWVzQW1vdW50CQBpAgUJdXNkdFNwZW50AGQEC3N0YXRzUmVzdWx0CQEFYXNJbnQBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIPdXBkYXRlRHVja1N0YXRzCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIJAGsDBQd4cFRyYWRlBRR0b3RhbEFtb3VudENvbnZlcnRlZAUFTVVMVDgFA25pbAUDbmlsCQCUCgIJAM0IAgUEcmVzdAkBDlNjcmlwdFRyYW5zZmVyAwUMcmVzdENvbnRyYWN0BRBhY3Rpdml0aWVzQW1vdW50BQt1c2R0QXNzZXRJZAkAlQoDBQ5iYWNrcGFja1Jlc3VsdAUMcHJvbG9nUmVzdWx0BQtzdGF0c1Jlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAR1leGNoYW5nZVJlc291cmNlc0R1Y2tEZWxpdmVyeQEHYW1vdW50cwQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAMJAAACBQxwcm9sb2dSZXN1bHQFDHByb2xvZ1Jlc3VsdAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQDAwkBASEBCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBgkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQHcmVzTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwIBXwQHbWF0TGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQNJHQwNDI3MTY0MjgyMgkBF2V4Y2hhbmdlUmVzb3VyY2VzQ29tbW9uAwUHcmVzTGlzdAUHbWF0TGlzdAUHYW1vdW50cwQGbmV3UmVzCAUNJHQwNDI3MTY0MjgyMgJfMQQGbmV3TWF0CAUNJHQwNDI3MTY0MjgyMgJfMgQJdXNkdFNwZW50CAUNJHQwNDI3MTY0MjgyMgJfMwQUdG90YWxBbW91bnRDb252ZXJ0ZWQIBQ0kdDA0MjcxNjQyODIyAl80BAdmZWVQYXJ0CQBrAwUJdXNkdFNwZW50BQ5ERUxJVkVSWV9GRUUxNQUFTVVMVDYEA2ZlZQkAlgMBCQDMCAIFB2ZlZVBhcnQJAMwIAgUXTUlOX1VTRFRfRkVFX0RFTElWRVJZMTUFA25pbAQQdXNkdFNwZW50V2l0aEZlZQkAZAIFCXVzZHRTcGVudAUDZmVlAwkAZgIFEHVzZHRTcGVudFdpdGhGZWUFA2FtdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICH0luc3VmZmljaWVudCBwYXltZW50ISBBdHRhY2hlZD0JAQpmaXhlZFBvaW50AgUDYW10AAYCCywgcmVxdWlyZWQ9CQEKZml4ZWRQb2ludAIFCXVzZHRTcGVudAAGAgErCQEKZml4ZWRQb2ludAIFA2ZlZQAGAg4oZGVsaXZlcnkgZmVlKQQHbmV3UGFjawkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAuQkCBQZuZXdSZXMCAV8JAMwIAgkAuQkCBQZuZXdNYXQCAV8JAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwCAToEDmJhY2twYWNrUmVzdWx0CQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQmFja3BhY2sJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUHbmV3UGFjawUDbmlsBQNuaWwEBHJlc3QDCQBmAgkAZQIFA2FtdAUQdXNkdFNwZW50V2l0aEZlZQAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkAZQIFA2FtdAUQdXNkdFNwZW50V2l0aEZlZQULdXNkdEFzc2V0SWQFA25pbAUDbmlsBBBhY3Rpdml0aWVzQW1vdW50CQBpAgUJdXNkdFNwZW50AGQEC3N0YXRzUmVzdWx0CQEFYXNJbnQBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIPdXBkYXRlRHVja1N0YXRzCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIJAGsDBQd4cFRyYWRlBRR0b3RhbEFtb3VudENvbnZlcnRlZAUFTVVMVDgFA25pbAUDbmlsBAlmdW5kVG90YWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUPZGVsaXZlcnlGdW5kS2V5AAAJAJQKAgkAzQgCCQDNCAIFBHJlc3QJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAUQYWN0aXZpdGllc0Ftb3VudAULdXNkdEFzc2V0SWQJAQxJbnRlZ2VyRW50cnkCBQ9kZWxpdmVyeUZ1bmRLZXkJAGQCBQlmdW5kVG90YWwFA2ZlZQkAlQoDBQ5iYWNrcGFja1Jlc3VsdAUMcHJvbG9nUmVzdWx0BQtzdGF0c1Jlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAR1leGNoYW5nZVJlc291cmNlc0xhbmREZWxpdmVyeQIHYW1vdW50cwtsYW5kQXNzZXRJZAQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAMJAAACBQxwcm9sb2dSZXN1bHQFDHByb2xvZ1Jlc3VsdAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABANhbXQIBQNwbXQGYW1vdW50AwMJAQEhAQkBCWlzRGVmaW5lZAEIBQNwbXQHYXNzZXRJZAYJAQIhPQIJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhNVU0RUIHBheW1lbnRzIG9ubHkhBAR1c2VyCAUBaQZjYWxsZXIEBGFkZHIJAKUIAQUEdXNlcgQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQACAQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQCd2gJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0AhRnZXRXYXJlaG91c2VSRUFET05MWQkAzAgCBQtsYW5kQXNzZXRJZAUDbmlsBQNuaWwECWN1cnJlbnRXaAkAvAkCBQJ3aAIBOgQHcmVzTGlzdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8EB21hdExpc3QJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0AgFfBA0kdDA0NTAwNzQ1MTEzCQEXZXhjaGFuZ2VSZXNvdXJjZXNDb21tb24DBQdyZXNMaXN0BQdtYXRMaXN0BQdhbW91bnRzBAZuZXdSZXMIBQ0kdDA0NTAwNzQ1MTEzAl8xBAZuZXdNYXQIBQ0kdDA0NTAwNzQ1MTEzAl8yBAl1c2R0U3BlbnQIBQ0kdDA0NTAwNzQ1MTEzAl8zBBR0b3RhbEFtb3VudENvbnZlcnRlZAgFDSR0MDQ1MDA3NDUxMTMCXzQEBXdoU3RyCQC6CQIJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIJALkJAgUGbmV3UmVzAgFfCQDMCAIJALkJAgUGbmV3TWF0AgFfCQDMCAIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QJAMwIAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4TE9GVAUDbmlsAgE6BAZ3aFNhdmUJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag1zYXZlV2FyZWhvdXNlCQDMCAIFBXdoU3RyCQDMCAIFC2xhbmRBc3NldElkBQNuaWwFA25pbAQLc3RhdHNSZXN1bHQJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVBY2NTdGF0cwkAzAgCBQRhZGRyCQDMCAIJAGsDBQd4cFRyYWRlBRR0b3RhbEFtb3VudENvbnZlcnRlZAUFTVVMVDgFA25pbAUDbmlsBAdmZWVQYXJ0CQBrAwUJdXNkdFNwZW50BQ5ERUxJVkVSWV9GRUUxNQUFTVVMVDYEA2ZlZQkAlgMBCQDMCAIFB2ZlZVBhcnQJAMwIAgUXTUlOX1VTRFRfRkVFX0RFTElWRVJZMTUFA25pbAQQdXNkdFNwZW50V2l0aEZlZQkAZAIFCXVzZHRTcGVudAUDZmVlAwkAZgIFEHVzZHRTcGVudFdpdGhGZWUFA2FtdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICH0luc3VmZmljaWVudCBwYXltZW50ISBBdHRhY2hlZD0JAQpmaXhlZFBvaW50AgUDYW10AAYCCywgcmVxdWlyZWQ9CQEKZml4ZWRQb2ludAIFCXVzZHRTcGVudAAGAgErCQEKZml4ZWRQb2ludAIFA2ZlZQAGAg4oZGVsaXZlcnkgZmVlKQQEcmVzdAMJAGYCCQBlAgUDYW10BRB1c2R0U3BlbnRXaXRoRmVlAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQBlAgUDYW10BRB1c2R0U3BlbnRXaXRoRmVlBQt1c2R0QXNzZXRJZAUDbmlsBQNuaWwEEGFjdGl2aXRpZXNBbW91bnQJAGkCBQl1c2R0U3BlbnQAZAQJZnVuZFRvdGFsCQELdmFsdWVPckVsc2UCCQCfCAEFD2RlbGl2ZXJ5RnVuZEtleQAACQCUCgIJAM0IAgkAzQgCBQRyZXN0CQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFEGFjdGl2aXRpZXNBbW91bnQFC3VzZHRBc3NldElkCQEMSW50ZWdlckVudHJ5AgUPZGVsaXZlcnlGdW5kS2V5CQBkAgUJZnVuZFRvdGFsBQNmZWUJAJUKAwUGd2hTYXZlBQxwcm9sb2dSZXN1bHQFC3N0YXRzUmVzdWx0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCmNyYWZ0R29vZHMCCnByb2R1Y3RJZHgIcXVhbnRpdHkEDHByb2xvZ1Jlc3VsdAkBBnByb2xvZwADCQAAAgUMcHJvbG9nUmVzdWx0BQxwcm9sb2dSZXN1bHQDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAiJleGFjdGx5IDEgcGF5bWVudCBtdXN0IGJlIGF0dGFjaGVkBANwbXQJAJEDAggFAWkIcGF5bWVudHMAAAQDYW10CAUDcG10BmFtb3VudAMDCQEBIQEJAQlpc0RlZmluZWQBCAUDcG10B2Fzc2V0SWQGCQECIT0CCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQITVVNEVCBwYXltZW50cyBvbmx5IQMJAQIhPQIFA2FtdAUFTVVMVDYJAAIBCQCsAgIJAKwCAgIIZXhhY3RseSAJAQpmaXhlZFBvaW50AgUPQ1JBRlRfVVNEVF9DT1NUAAYCISBVU0RUIG11c3QgYmUgYXR0YWNoZWQgYXMgcGF5bWVudAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAtjdXJMb2NhdGlvbgkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04CAV8DCQECIT0CCQCRAwIFC2N1ckxvY2F0aW9uBQpsb2NJZHhUeXBlAgFNCQACAQkArAICAjFEdWNrIGxvY2F0aW9uIHR5cGUgc2hvdWxkIGJlIE1hbnVmYWN0b3J5LCBidXQgaXMgCQCRAwIFC2N1ckxvY2F0aW9uBQpsb2NJZHhUeXBlBARjb250CQCRAwIFC2N1ckxvY2F0aW9uBQ9sb2NJZHhDb250aW5lbnQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQHbWF0TGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQIcHJvZExpc3QDCQAAAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgAFA25pbAkAvAkCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAV8EDSR0MDQ3NDM4NDc1MzUJARBjcmFmdEdvb2RzQ29tbW9uBQUHbWF0TGlzdAUIcHJvZExpc3QFBGNvbnQFCnByb2R1Y3RJZHgFCHF1YW50aXR5BAZuZXdNYXQIBQ0kdDA0NzQzODQ3NTM1Al8xBAduZXdQcm9kCAUNJHQwNDc0Mzg0NzUzNQJfMgQIbWF0U3BlbnQIBQ0kdDA0NzQzODQ3NTM1Al8zBAduZXdQYWNrCQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAzAgCCQC5CQIFBm5ld01hdAIBXwkAzAgCCQC6CQIFB25ld1Byb2QCAV8FA25pbAIBOgQGcmVzdWx0CQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQmFja3BhY2sJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUHbmV3UGFjawUDbmlsBQNuaWwEC3N0YXRzUmVzdWx0CQEFYXNJbnQBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIPdXBkYXRlRHVja1N0YXRzCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIJAGsDBQd4cENyYWZ0BQhtYXRTcGVudAUFTVVMVDgFA25pbAUDbmlsCQCUCgIFA25pbAkAlQoDBQZyZXN1bHQFDHByb2xvZ1Jlc3VsdAULc3RhdHNSZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEWY3JhZnRHb29kc0R1Y2tEZWxpdmVyeQMKcHJvZHVjdElkeAhxdWFudGl0eRRtYW51ZmFjdG9yeUNvbnRpbmVudAQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAMJAAACBQxwcm9sb2dSZXN1bHQFDHByb2xvZ1Jlc3VsdAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQDAwkBASEBCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBgkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQHbWF0TGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQIcHJvZExpc3QDCQAAAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgAFA25pbAkAvAkCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAV8EDSR0MDQ4NjgzNDg3OTYJARBjcmFmdEdvb2RzQ29tbW9uBQUHbWF0TGlzdAUIcHJvZExpc3QFFG1hbnVmYWN0b3J5Q29udGluZW50BQpwcm9kdWN0SWR4BQhxdWFudGl0eQQGbmV3TWF0CAUNJHQwNDg2ODM0ODc5NgJfMQQHbmV3UHJvZAgFDSR0MDQ4NjgzNDg3OTYCXzIECG1hdFNwZW50CAUNJHQwNDg2ODM0ODc5NgJfMwQHbmV3UGFjawkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgkAuQkCBQZuZXdNYXQCAV8JAMwIAgkAugkCBQduZXdQcm9kAgFfBQNuaWwCAToEDmJhY2twYWNrUmVzdWx0CQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQmFja3BhY2sJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUHbmV3UGFjawUDbmlsBQNuaWwEC3N0YXRzUmVzdWx0CQEFYXNJbnQBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIPdXBkYXRlRHVja1N0YXRzCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIJAGsDBQd4cENyYWZ0BQhtYXRTcGVudAUFTVVMVDgFA25pbAUDbmlsBAdmZWVQYXJ0CQBrAwUIcXVhbnRpdHkFFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQUUQ1JBRlRfREVMSVZFUllfQ09FRkYEA2ZlZQkAlgMBCQDMCAIFB2ZlZVBhcnQJAMwIAgUVTUlOX1VTRFRfRkVFX0RFTElWRVJZBQNuaWwEEHVzZHRTcGVudFdpdGhGZWUJAGQCBQ9DUkFGVF9VU0RUX0NPU1QFA2ZlZQMJAGYCBRB1c2R0U3BlbnRXaXRoRmVlBQNhbXQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAh9JbnN1ZmZpY2llbnQgcGF5bWVudCEgQXR0YWNoZWQ9CQEKZml4ZWRQb2ludAIFA2FtdAAGAgssIHJlcXVpcmVkPQkBCmZpeGVkUG9pbnQCBQ9DUkFGVF9VU0RUX0NPU1QABgIBKwkBCmZpeGVkUG9pbnQCBQNmZWUABgIOKGRlbGl2ZXJ5IGZlZSkEBHJlc3QDCQBmAgkAZQIFA2FtdAUQdXNkdFNwZW50V2l0aEZlZQAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkAZQIFA2FtdAUQdXNkdFNwZW50V2l0aEZlZQULdXNkdEFzc2V0SWQFA25pbAUDbmlsBAlmdW5kVG90YWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUPZGVsaXZlcnlGdW5kS2V5AAAJAJQKAgkAzQgCBQRyZXN0CQEMSW50ZWdlckVudHJ5AgUPZGVsaXZlcnlGdW5kS2V5CQBkAgUJZnVuZFRvdGFsBQNmZWUJAJUKAwUOYmFja3BhY2tSZXN1bHQFDHByb2xvZ1Jlc3VsdAULc3RhdHNSZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEWY3JhZnRHb29kc0xhbmREZWxpdmVyeQQKcHJvZHVjdElkeAhxdWFudGl0eQtsYW5kQXNzZXRJZBRtYW51ZmFjdG9yeUNvbnRpbmVudAQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAMJAAACBQxwcm9sb2dSZXN1bHQFDHByb2xvZ1Jlc3VsdAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABANhbXQIBQNwbXQGYW1vdW50AwMJAQEhAQkBCWlzRGVmaW5lZAEIBQNwbXQHYXNzZXRJZAYJAQIhPQIJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhNVU0RUIHBheW1lbnRzIG9ubHkhBAR1c2VyCAUBaQZjYWxsZXIEBGFkZHIJAKUIAQUEdXNlcgQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQACAQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQCd2gJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0AhRnZXRXYXJlaG91c2VSRUFET05MWQkAzAgCBQtsYW5kQXNzZXRJZAUDbmlsBQNuaWwECWN1cnJlbnRXaAkAvAkCBQJ3aAIBOgQHbWF0TGlzdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhNYXQCAV8ECHByb2RMaXN0AwkAAAIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAAUDbmlsCQC8CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAV8EDSR0MDUwOTYyNTEwNzUJARBjcmFmdEdvb2RzQ29tbW9uBQUHbWF0TGlzdAUIcHJvZExpc3QFFG1hbnVmYWN0b3J5Q29udGluZW50BQpwcm9kdWN0SWR4BQhxdWFudGl0eQQGbmV3TWF0CAUNJHQwNTA5NjI1MTA3NQJfMQQHbmV3UHJvZAgFDSR0MDUwOTYyNTEwNzUCXzIECG1hdFNwZW50CAUNJHQwNTA5NjI1MTA3NQJfMwQFd2hTdHIJALoJAgkAzAgCCQCRAwIFCWN1cnJlbnRXaAULd2hJZHhMZXZlbHMJAMwIAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzCQDMCAIJALkJAgUGbmV3TWF0AgFfCQDMCAIJALoJAgUHbmV3UHJvZAIBXwkAzAgCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUBQNuaWwCAToEBndoU2F2ZQkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDXNhdmVXYXJlaG91c2UJAMwIAgUFd2hTdHIJAMwIAgULbGFuZEFzc2V0SWQFA25pbAUDbmlsBAtzdGF0c1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUFjY1N0YXRzCQDMCAIFBGFkZHIJAMwIAgkAawMFB3hwQ3JhZnQFCG1hdFNwZW50BQVNVUxUOAUDbmlsBQNuaWwEB2ZlZVBhcnQJAGsDBQhxdWFudGl0eQUVTUlOX1VTRFRfRkVFX0RFTElWRVJZBRRDUkFGVF9ERUxJVkVSWV9DT0VGRgQDZmVlCQCWAwEJAMwIAgUHZmVlUGFydAkAzAgCBRVNSU5fVVNEVF9GRUVfREVMSVZFUlkFA25pbAQQdXNkdFNwZW50V2l0aEZlZQkAZAIFD0NSQUZUX1VTRFRfQ09TVAUDZmVlAwkAZgIFEHVzZHRTcGVudFdpdGhGZWUFA2FtdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICH0luc3VmZmljaWVudCBwYXltZW50ISBBdHRhY2hlZD0JAQpmaXhlZFBvaW50AgUDYW10AAYCCywgcmVxdWlyZWQ9CQEKZml4ZWRQb2ludAIFD0NSQUZUX1VTRFRfQ09TVAAGAgErCQEKZml4ZWRQb2ludAIFA2ZlZQAGAg4oZGVsaXZlcnkgZmVlKQQEcmVzdAMJAGYCCQBlAgUDYW10BRB1c2R0U3BlbnRXaXRoRmVlAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQBlAgUDYW10BRB1c2R0U3BlbnRXaXRoRmVlBQt1c2R0QXNzZXRJZAUDbmlsBQNuaWwECWZ1bmRUb3RhbAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ9kZWxpdmVyeUZ1bmRLZXkAAAkAlAoCCQDNCAIFBHJlc3QJAQxJbnRlZ2VyRW50cnkCBQ9kZWxpdmVyeUZ1bmRLZXkJAGQCBQlmdW5kVG90YWwFA2ZlZQkAlQoDBQZ3aFNhdmUFDHByb2xvZ1Jlc3VsdAULc3RhdHNSZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQERc2V0V2FyZWhvdXNlT3JkZXICC25ld09yZGVyU3RyC2xhbmRBc3NldElkBAR1c2VyCAUBaQxvcmlnaW5DYWxsZXIEBGFkZHIJAKUIAQUEdXNlcgQGcmVzdWx0AwkBAiE9AgUEdXNlcgUMcmVzdENvbnRyYWN0CQEMY2hlY2tCbG9ja2VkAAcEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwMJAQIhPQIFBHVzZXIFDHJlc3RDb250cmFjdAkBAiE9AgUFb3duZXIFBGFkZHIHCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBAhuZXdPcmRlcgkAvAkCBQtuZXdPcmRlclN0cgIBOgQCd2gJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0AhRnZXRXYXJlaG91c2VSRUFET05MWQkAzAgCBQtsYW5kQXNzZXRJZAUDbmlsBQNuaWwECWN1cnJlbnRXaAkAvAkCBQJ3aAIBOgQEbG9mdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUAgFfBAd3aFRvdGFsCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUIdm9sVG90YWwEBm9yZEtleQkBDmtleU9yZGVyQnlMYW5kAQULbGFuZEFzc2V0SWQECmN1cnJlbnRPcmQJAQhnZXRPcmRlcgEFBm9yZEtleQQBegkBC3NldEludGVybmFsAwUJY3VycmVudFdoBQpjdXJyZW50T3JkBQhuZXdPcmRlcgQLYnV5Vm9sU2FsZG8IBQF6Al80BAxzZWxsVm9sU2FsZG8IBQF6Al81BAp3aE9jY3VwaWVkCAUBegJfNwQId2hMb2NrZWQJAGQCBQtidXlWb2xTYWxkbwUMc2VsbFZvbFNhbGRvBAZ3aEZyZWUJAGUCCQBlAgUHd2hUb3RhbAUKd2hPY2N1cGllZAUId2hMb2NrZWQDCQBmAgAABQZ3aEZyZWUJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhNBdHRlbXB0IHRvIHJlc2VydmUgCQCkAwEFC2J1eVZvbFNhbGRvAhsgc3BhY2UgZm9yIGJ1eSBvcmRlcnMsIGFuZCAJAKQDAQUMc2VsbFZvbFNhbGRvAiUgc3BhY2UgZm9yIHNlbGwgb3JkZXJzIChhbmQgb2NjdXBpZWQ9CQCkAwEFCndoT2NjdXBpZWQCHyksIGxlYWRzIHRvIG5lZ2F0aXZlIGZyZWUgc3BhY2UEBXdoU3RyCQC6CQIJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIJALkJAggFAXoCXzECAV8JAMwIAgkAuQkCCAUBegJfMgIBXwkAzAgCCQC6CQIIBQF6Al8zAgFfCQDMCAIJAKQDAQUId2hMb2NrZWQFA25pbAIBOgQGd2hTYXZlCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAINc2F2ZVdhcmVob3VzZQkAzAgCBQV3aFN0cgkAzAgCBQtsYW5kQXNzZXRJZAUDbmlsBQNuaWwECHVzZFNhbGRvCAUBegJfNgQHYWN0aW9ucwMJAGYCBQh1c2RTYWxkbwAAAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQECnBtdEFzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAggFA3BtdAdhc3NldElkAh5XQVZFUyBjYW4ndCBiZSB1c2VkIGFzIHBheW1lbnQDCQECIT0CBQpwbXRBc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEDCQECIT0CBQNhbXQFCHVzZFNhbGRvCQACAQkArAICAhJQYXltZW50IG5lZWRlZCBpcyAJAKQDAQUIdXNkU2FsZG8JAMwIAgkBC1N0cmluZ0VudHJ5AgUGb3JkS2V5BQtuZXdPcmRlclN0cgUDbmlsAwkAAAIFCHVzZFNhbGRvAAADCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhJObyBwYXltZW50cyBuZWVkZWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUGb3JkS2V5BQtuZXdPcmRlclN0cgUDbmlsAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQISTm8gcGF5bWVudHMgbmVlZGVkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBW93bmVyCQEBLQEFCHVzZFNhbGRvBQt1c2R0QXNzZXRJZAkAzAgCCQELU3RyaW5nRW50cnkCBQZvcmRLZXkFC25ld09yZGVyU3RyBQNuaWwJAJQKAgUHYWN0aW9ucwkAlAoCBQZyZXN1bHQFBndoU2F2ZQFpARRhY2NlcHRXYXJlaG91c2VPcmRlcgMKYnBPcmRlclN0cg9zaG9wTGFuZEFzc2V0SWQLZHVja0Fzc2V0SWQEDHByb2xvZ1Jlc3VsdAkBBnByb2xvZwADCQAAAgUMcHJvbG9nUmVzdWx0BQxwcm9sb2dSZXN1bHQEBmNhbGxlcggFAWkMb3JpZ2luQ2FsbGVyBApjYWxsZXJBZGRyCQClCAEFBmNhbGxlcgQRc3Rha2VkRHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFCmNhbGxlckFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEC2N1ckxvY2F0aW9uCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBD2tleUR1Y2tMb2NhdGlvbgEFEXN0YWtlZER1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04EA2xvYwkAtQkCCQEFdmFsdWUBBQtjdXJMb2NhdGlvbgIBXwMJAQIhPQIJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAgFMCQACAQkArAICCQCsAgICFkR1Y2sgbG9jYXRpb24gdHlwZSBpcyAJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAhEsIGJ1dCBzaG91bGQgYmUgTAMJAQIhPQIFEXN0YWtlZER1Y2tBc3NldElkBQtkdWNrQXNzZXRJZAkAAgEJAKwCAgkArAICCQCsAgICFFlvdXIgc3Rha2VkIGR1Y2sgaXMgBRFzdGFrZWREdWNrQXNzZXRJZAINLCBidXQgcGFzc2VkIAULZHVja0Fzc2V0SWQEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAlicFJlc0xpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMCAV8ECWJwTWF0TGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQKYnBQcm9kTGlzdAMJAAACCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAAUDbmlsCQC8CQIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIBXwQNJHQwNTY5ODg1NzIyOAkBFWFjY2VwdFNob3BPcmRlckNvbW1vbgYFD3Nob3BMYW5kQXNzZXRJZAUKY2FsbGVyQWRkcgUKYnBPcmRlclN0cgUJYnBSZXNMaXN0BQlicE1hdExpc3QFCmJwUHJvZExpc3QECnNob3BBY3Rpb24IBQ0kdDA1Njk4ODU3MjI4Al8xBApuZXdVc2VyUmVzCAUNJHQwNTY5ODg1NzIyOAJfMgQKbmV3VXNlck1hdAgFDSR0MDU2OTg4NTcyMjgCXzMEC25ld1VzZXJQcm9kCAUNJHQwNTY5ODg1NzIyOAJfNAQNdXNkV2gyQnBTYWxkbwgFDSR0MDU2OTg4NTcyMjgCXzUEDXVzZEJwMldoU2FsZG8IBQ0kdDA1Njk4ODU3MjI4Al82BAh4cEFtb3VudAgFDSR0MDU2OTg4NTcyMjgCXzcEDXNob3BMYW5kT3duZXIIBQ0kdDA1Njk4ODU3MjI4Al84BApzaG9wV2hTYXZlCAUNJHQwNTY5ODg1NzIyOAJfOQQOYWNjU3RhdHNSZXN1bHQIBQ0kdDA1Njk4ODU3MjI4A18xMAQIYWN0aW9uczEJAMwIAgUKc2hvcEFjdGlvbgkBEHNob3AydXNlckFjdGlvbnMDBQ11c2RXaDJCcFNhbGRvBQpjYWxsZXJBZGRyAAAECGFjdGlvbnMyCQEQdXNlcjJzaG9wQWN0aW9ucwQFDXVzZEJwMldoU2FsZG8IBQFpCHBheW1lbnRzBQ1zaG9wTGFuZE93bmVyAAAECG5ld0JwU3RyCQC6CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQC5CQIFCm5ld1VzZXJSZXMCAV8JAMwIAgkAuQkCBQpuZXdVc2VyTWF0AgFfCQDMCAIJALoJAgULbmV3VXNlclByb2QCAV8FA25pbAIBOgQGYnBTYXZlCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQmFja3BhY2sJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUIbmV3QnBTdHIFA25pbAUDbmlsBA9kdWNrU3RhdHNSZXN1bHQJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag91cGRhdGVEdWNrU3RhdHMJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgkAawMFBnhwU2hvcAUIeHBBbW91bnQFBU1VTFQ4BQNuaWwFA25pbAkAlAoCCQDOCAIFCGFjdGlvbnMxBQhhY3Rpb25zMgkAlwoFBQxwcm9sb2dSZXN1bHQFCnNob3BXaFNhdmUFBmJwU2F2ZQUPZHVja1N0YXRzUmVzdWx0BQ5hY2NTdGF0c1Jlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARthY2NlcHRTaG9wT3JkZXJEdWNrRGVsaXZlcnkCCG9yZGVyU3RyD3Nob3BMYW5kQXNzZXRJZAQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAMJAAACBQxwcm9sb2dSZXN1bHQFDHByb2xvZ1Jlc3VsdAQGY2FsbGVyCAUBaQxvcmlnaW5DYWxsZXIECmNhbGxlckFkZHIJAKUIAQUGY2FsbGVyBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUKY2FsbGVyQWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkECWJwUmVzTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwIBXwQJYnBNYXRMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBApicFByb2RMaXN0AwkAAAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIABQNuaWwJALwJAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgFfBA0kdDA1ODU5MzU4ODMxCQEVYWNjZXB0U2hvcE9yZGVyQ29tbW9uBgUPc2hvcExhbmRBc3NldElkBQpjYWxsZXJBZGRyBQhvcmRlclN0cgUJYnBSZXNMaXN0BQlicE1hdExpc3QFCmJwUHJvZExpc3QECnNob3BBY3Rpb24IBQ0kdDA1ODU5MzU4ODMxAl8xBApuZXdVc2VyUmVzCAUNJHQwNTg1OTM1ODgzMQJfMgQKbmV3VXNlck1hdAgFDSR0MDU4NTkzNTg4MzECXzMEC25ld1VzZXJQcm9kCAUNJHQwNTg1OTM1ODgzMQJfNAQNdXNkV2gyQnBTYWxkbwgFDSR0MDU4NTkzNTg4MzECXzUEDXVzZEJwMldoU2FsZG8IBQ0kdDA1ODU5MzU4ODMxAl82BAh4cEFtb3VudAgFDSR0MDU4NTkzNTg4MzECXzcEDXNob3BMYW5kT3duZXIIBQ0kdDA1ODU5MzU4ODMxAl84BApzaG9wV2hTYXZlCAUNJHQwNTg1OTM1ODgzMQJfOQQOYWNjU3RhdHNSZXN1bHQIBQ0kdDA1ODU5MzU4ODMxA18xMAQPZGVsaXZlcnlGZWVQYXJ0CQBrAwkAZAIFDXVzZEJwMldoU2FsZG8FDXVzZFdoMkJwU2FsZG8FDERFTElWRVJZX0ZFRQUFTVVMVDYEC2RlbGl2ZXJ5RmVlCQCWAwEJAMwIAgUPZGVsaXZlcnlGZWVQYXJ0CQDMCAIFFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQUDbmlsBAhzcGVudEZlZQkAawMFC2RlbGl2ZXJ5RmVlBQ11c2RCcDJXaFNhbGRvCQBkAgUNdXNkQnAyV2hTYWxkbwUNdXNkV2gyQnBTYWxkbwQLcmVjZWl2ZWRGZWUJAGUCBQtkZWxpdmVyeUZlZQUIc3BlbnRGZWUECWZ1bmRUb3RhbAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ9kZWxpdmVyeUZ1bmRLZXkAAAQIYWN0aW9uczEJAMwIAgUKc2hvcEFjdGlvbgkBEHNob3AydXNlckFjdGlvbnMDBQ11c2RXaDJCcFNhbGRvBQpjYWxsZXJBZGRyBQtyZWNlaXZlZEZlZQQIYWN0aW9uczIJARB1c2VyMnNob3BBY3Rpb25zBAUNdXNkQnAyV2hTYWxkbwgFAWkIcGF5bWVudHMFDXNob3BMYW5kT3duZXIFCHNwZW50RmVlBAhuZXdCcFN0cgkAugkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAuQkCBQpuZXdVc2VyUmVzAgFfCQDMCAIJALkJAgUKbmV3VXNlck1hdAIBXwkAzAgCCQC6CQIFC25ld1VzZXJQcm9kAgFfBQNuaWwCAToEBmJwU2F2ZQkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUJhY2twYWNrCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIFCG5ld0JwU3RyBQNuaWwFA25pbAQPZHVja1N0YXRzUmVzdWx0CQEFYXNJbnQBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIPdXBkYXRlRHVja1N0YXRzCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIJAGsDBQZ4cFNob3AFCHhwQW1vdW50BQVNVUxUOAUDbmlsBQNuaWwJAJQKAgkAzQgCCQDOCAIFCGFjdGlvbnMxBQhhY3Rpb25zMgkBDEludGVnZXJFbnRyeQIFD2RlbGl2ZXJ5RnVuZEtleQkAZAIFCWZ1bmRUb3RhbAULZGVsaXZlcnlGZWUJAJcKBQUMcHJvbG9nUmVzdWx0BQpzaG9wV2hTYXZlBQZicFNhdmUFD2R1Y2tTdGF0c1Jlc3VsdAUOYWNjU3RhdHNSZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEbYWNjZXB0U2hvcE9yZGVyTGFuZERlbGl2ZXJ5AwhvcmRlclN0cg9zaG9wTGFuZEFzc2V0SWQNbXlMYW5kQXNzZXRJZAQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAMJAAACBQxwcm9sb2dSZXN1bHQFDHByb2xvZ1Jlc3VsdAQGY2FsbGVyCAUBaQxvcmlnaW5DYWxsZXIECmNhbGxlckFkZHIJAKUIAQUGY2FsbGVyBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFDW15TGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQ1teUxhbmRBc3NldElkCQACAQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQ1teUxhbmRBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQpjYWxsZXJBZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBAJ3aAkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCFGdldFdhcmVob3VzZVJFQURPTkxZCQDMCAIFDW15TGFuZEFzc2V0SWQFA25pbAUDbmlsBAljdXJyZW50V2gJALwJAgUCd2gCAToEB3Jlc0xpc3QJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfBAdtYXRMaXN0CQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeE1hdAIBXwQIcHJvZExpc3QDCQAAAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAIABQNuaWwJALwJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAIBXwQNJHQwNjA5NTI2MTE4NAkBFWFjY2VwdFNob3BPcmRlckNvbW1vbgYFD3Nob3BMYW5kQXNzZXRJZAUKY2FsbGVyQWRkcgUIb3JkZXJTdHIFB3Jlc0xpc3QFB21hdExpc3QFCHByb2RMaXN0BApzaG9wQWN0aW9uCAUNJHQwNjA5NTI2MTE4NAJfMQQKbmV3VXNlclJlcwgFDSR0MDYwOTUyNjExODQCXzIECm5ld1VzZXJNYXQIBQ0kdDA2MDk1MjYxMTg0Al8zBAtuZXdVc2VyUHJvZAgFDSR0MDYwOTUyNjExODQCXzQEDXVzZFdoMkJwU2FsZG8IBQ0kdDA2MDk1MjYxMTg0Al81BA11c2RCcDJXaFNhbGRvCAUNJHQwNjA5NTI2MTE4NAJfNgQIeHBBbW91bnQIBQ0kdDA2MDk1MjYxMTg0Al83BA1zaG9wTGFuZE93bmVyCAUNJHQwNjA5NTI2MTE4NAJfOAQKc2hvcFdoU2F2ZQgFDSR0MDYwOTUyNjExODQCXzkEDmFjY1N0YXRzUmVzdWx0CAUNJHQwNjA5NTI2MTE4NANfMTAED2RlbGl2ZXJ5RmVlUGFydAkAawMJAGQCBQ11c2RCcDJXaFNhbGRvBQ11c2RXaDJCcFNhbGRvBQxERUxJVkVSWV9GRUUFBU1VTFQ2BAtkZWxpdmVyeUZlZQkAlgMBCQDMCAIFD2RlbGl2ZXJ5RmVlUGFydAkAzAgCBRVNSU5fVVNEVF9GRUVfREVMSVZFUlkFA25pbAQIc3BlbnRGZWUJAGsDBQtkZWxpdmVyeUZlZQUNdXNkQnAyV2hTYWxkbwkAZAIFDXVzZEJwMldoU2FsZG8FDXVzZFdoMkJwU2FsZG8EC3JlY2VpdmVkRmVlCQBlAgULZGVsaXZlcnlGZWUFCHNwZW50RmVlBAlmdW5kVG90YWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUPZGVsaXZlcnlGdW5kS2V5AAAECGFjdGlvbnMxCQDMCAIFCnNob3BBY3Rpb24JARBzaG9wMnVzZXJBY3Rpb25zAwUNdXNkV2gyQnBTYWxkbwUKY2FsbGVyQWRkcgULcmVjZWl2ZWRGZWUECGFjdGlvbnMyCQEQdXNlcjJzaG9wQWN0aW9ucwQFDXVzZEJwMldoU2FsZG8IBQFpCHBheW1lbnRzBQ1zaG9wTGFuZE93bmVyBQhzcGVudEZlZQQFd2hTdHIJALoJAgkAzAgCCQCRAwIFCWN1cnJlbnRXaAULd2hJZHhMZXZlbHMJAMwIAgkAuQkCBQpuZXdVc2VyUmVzAgFfCQDMCAIJALkJAgUKbmV3VXNlck1hdAIBXwkAzAgCCQC5CQIFC25ld1VzZXJQcm9kAgFfCQDMCAIJAJEDAgUJY3VycmVudFdoBQl3aElkeExPRlQFA25pbAIBOgQGd2hTYXZlCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAINc2F2ZVdhcmVob3VzZQkAzAgCBQV3aFN0cgkAzAgCBQ1teUxhbmRBc3NldElkBQNuaWwFA25pbAQLc3RhdHNSZXN1bHQJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVBY2NTdGF0cwkAzAgCBQpjYWxsZXJBZGRyCQDMCAIJAGsDBQZ4cFNob3AFCHhwQW1vdW50BQVNVUxUOAUDbmlsBQNuaWwJAJQKAgkAzQgCCQDOCAIFCGFjdGlvbnMxBQhhY3Rpb25zMgkBDEludGVnZXJFbnRyeQIFD2RlbGl2ZXJ5RnVuZEtleQkAZAIFCWZ1bmRUb3RhbAULZGVsaXZlcnlGZWUJAJcKBQUMcHJvbG9nUmVzdWx0BQpzaG9wV2hTYXZlBQZ3aFNhdmUFC3N0YXRzUmVzdWx0BQ5hY2NTdGF0c1Jlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARBzZWxsUHJvZHVjdHNUb0VTAQdhbW91bnRzBAxwcm9sb2dSZXN1bHQJAQZwcm9sb2cAAwkAAAIFDHByb2xvZ1Jlc3VsdAUMcHJvbG9nUmVzdWx0AwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQISTm8gcGF5bWVudHMgbmVlZGVkBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEC2N1ckxvY2F0aW9uCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgIBXwMJAQIhPQIJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUCAUEJAAIBCQCsAgICLUR1Y2sgbG9jYXRpb24gdHlwZSBzaG91bGQgYmUgQWlycG9ydCwgYnV0IGlzIAkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAhwcm9kTGlzdAMJAAACCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAAUDbmlsCQC8CQIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIBXwQFZXNLZXkJAQ5rZXlFc1dhcmVob3VzZQAECGV4aXN0U3RyCQCiCAEFBWVzS2V5BAxleGlzdEFtb3VudHMDCQEJaXNEZWZpbmVkAQUIZXhpc3RTdHIJALwJAgkBBXZhbHVlAQUIZXhpc3RTdHICAV8FA25pbAoBCG1vdmVQcm9kAgNhY2MJcmVjaXBlU3RyBAFqCAUDYWNjAl8xBAhxdWFudGl0eQMJAGYCCQCQAwEFB2Ftb3VudHMFAWoJAJEDAgUHYW1vdW50cwUBagAAAwkAZgIAAAUIcXVhbnRpdHkJAAIBAhtRdWFudGl0eSBjYW5ub3QgYmUgbmVnYXRpdmUEBnJlY2lwZQkAtQkCBQlyZWNpcGVTdHICAV8DCQECIT0CCQCQAwEFBnJlY2lwZQUKUkVDSVBFU0laRQkAAgEJAKwCAgIXRmF0YWw6IHVua25vd24gcmVjaXBlOiAFCXJlY2lwZVN0cgQJbWF4QW1vdW50CQBoAgUNRVNNQVhQQUNLQUdFUwUOUFJPRFVDVFBLR1NJWkUEC2V4aXN0QW1vdW50AwkAZgIJAJADAQUMZXhpc3RBbW91bnRzBQFqCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUMZXhpc3RBbW91bnRzBQFqAAAEBmNhbkJ1eQkAZQIFCW1heEFtb3VudAUL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AgFfCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcggFBm1lcmdlZAJfMgULdXNkdEFzc2V0SWQFA25pbAkAlQoDBQZicFNhdmUFDHByb2xvZ1Jlc3VsdAULc3RhdHNSZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEPdXBkYXRlRXNTdG9yYWdlAQpuZXdTdG9yYWdlAwkBAiE9AggFAWkGY2FsbGVyBQ9zdGFraW5nQ29udHJhY3QJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ5rZXlFc1dhcmVob3VzZQAFCm5ld1N0b3JhZ2UFA25pbAUKbmV3U3RvcmFnZQFpARR1cGRhdGVEZWxpdmVyeUxvY2tlZAEJbmV3QW1vdW50AwkBAiE9AggFAWkGY2FsbGVyBQ9zdGFraW5nQ29udHJhY3QJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFkZWxpdmVyeUxvY2tlZEtleQUJbmV3QW1vdW50BQNuaWwFCW5ld0Ftb3VudAFpARJzZW5kRGVsaXZlcnlSZXdhcmQBBGFkZHIDCQECIT0CCAUBaQZjYWxsZXIFD3N0YWtpbmdDb250cmFjdAkAAgECEVBlcm1pc3Npb24gZGVuaWVkBAlmdW5kVG90YWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUPZGVsaXZlcnlGdW5kS2V5AAAEC2xvY2tlZFRvdGFsCQELdmFsdWVPckVsc2UCCQCfCAEFEWRlbGl2ZXJ5TG9ja2VkS2V5AAAEC2FjcmVzQW1vdW50CQBoAgUVTUlOX1VTRFRfRkVFX0RFTElWRVJZBRVVU0RUMkFDUkVTX01VTFRJUExJRVIEC2FjcmVzUmVzdWx0CQD8BwQFDWFjcmVzQ29udHJhY3QCCXNlbmRBY3JlcwkAzAgCBQRhZGRyCQDMCAIFC2FjcmVzQW1vdW50BQNuaWwFA25pbAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ9kZWxpdmVyeUZ1bmRLZXkJAGUCBQlmdW5kVG90YWwFFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQkAzAgCCQEMSW50ZWdlckVudHJ5AgURZGVsaXZlcnlMb2NrZWRLZXkJAGUCBQtsb2NrZWRUb3RhbAUVTUlOX1VTRFRfRkVFX0RFTElWRVJZBQNuaWwFC2FjcmVzUmVzdWx0AAiBl3E=", "height": 2814490, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 7ALzi2wC8GDNAAek1dKHzwo6FJH5MbWWw29m4W4GqJKg Next: 6mkTN5Top9xkhR4PSRPWV9P8hhpuYd1s4G1FZSvkfBZz Diff:
OldNewDifferences
110110 func ac (ad) = (parseIntValue(ad[v]) * t)
111111
112112
113-let ae = true
113+let ae = take(drop(this.bytes, 1), 1)
114114
115-let af = take(drop(this.bytes, 1), 1)
116-
117-let ag = {
118- let ah = af
119- if ((base58'2W' == ah))
115+let af = {
116+ let ag = ae
117+ if ((base58'2W' == ag))
120118 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
121- else if ((base58'2T' == ah))
119+ else if ((base58'2T' == ag))
122120 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
123121 else throw("Unknown chain")
124122 }
125123
126-let ai = {
127- let ah = af
128- if ((base58'2W' == ah))
124+let ah = {
125+ let ag = ae
126+ if ((base58'2W' == ag))
129127 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
130- else if ((base58'2T' == ah))
128+ else if ((base58'2T' == ag))
131129 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
132130 else throw("Unknown chain")
133131 }
134132
135-let aj = "__"
133+let ai = "__"
136134
137-let ak = 100000
135+let aj = 100000
138136
139-let al = 1000000
137+let ak = 1000000
140138
141-let am = 100000000
139+let al = 100000000
142140
143-let an = 10000000000
141+let am = 10000000000
144142
145-let ao = 100000
143+let an = 100000
146144
147-let ap = [0, 1, 2, 3, 4, 5]
145+let ao = [0, 1, 2, 3, 4, 5]
148146
149-func aq (ar,as) = valueOrErrorMessage(getString(ar, as), makeString(["mandatory ", toString(ar), ".", as, " is not defined"], ""))
147+func ap (aq,ar) = valueOrErrorMessage(getString(aq, ar), makeString(["mandatory ", toString(aq), ".", ar, " is not defined"], ""))
150148
151149
152-let at = 1
150+let as = 1
153151
154-let au = 6
152+let at = 6
155153
156-let av = 8
154+let au = 8
157155
158-func aw () = "%s__restConfig"
156+func av () = "%s__restConfig"
159157
160158
161-func ax () = "%s__restAddr"
159+func aw () = "%s__restAddr"
162160
163161
164-func ay (az) = split_4C(aq(az, aw()), aj)
162+func ax (ay) = split_4C(ap(ay, av()), ai)
165163
166164
167-func aA (aB,aC) = valueOrErrorMessage(addressFromString(aB[aC]), ("Rest cfg doesn't contain address at index " + toString(aC)))
165+func az (aA,aB) = valueOrErrorMessage(addressFromString(aA[aB]), ("Rest cfg doesn't contain address at index " + toString(aB)))
168166
169167
170-let aD = addressFromStringValue(valueOrElse(getString(this, ax()), ai))
168+let aC = addressFromStringValue(valueOrElse(getString(this, aw()), ah))
171169
172-let aB = ay(aD)
170+let aA = ax(aC)
173171
174-let aE = aA(aB, at)
172+let aD = az(aA, as)
175173
176-let aF = aA(aB, au)
174+let aE = az(aA, at)
177175
178-let aG = aA(aB, av)
176+let aF = az(aA, au)
179177
180-func aH (aI) = {
181- let ah = aI
182- if ($isInstanceOf(ah, "String"))
178+func aG (aH) = {
179+ let ag = aH
180+ if ($isInstanceOf(ag, "String"))
183181 then {
184- let aJ = ah
185- aJ
182+ let aI = ag
183+ aI
186184 }
187185 else throw("fail to cast into String")
188186 }
189187
190188
191-func aK (aI) = {
192- let ah = aI
193- if ($isInstanceOf(ah, "Int"))
189+func aJ (aH) = {
190+ let ag = aH
191+ if ($isInstanceOf(ag, "Int"))
194192 then {
195- let aL = ah
196- aL
193+ let aK = ag
194+ aK
197195 }
198196 else throw("fail to cast into Int")
199197 }
200198
201199
202-func aM () = "contractsBlocked"
200+func aL () = "contractsBlocked"
203201
204202
205-func aN (aO,aP) = {
206- let aQ = pow(10, 0, aP, 0, 0, DOWN)
207- let aR = toString((aO % aQ))
208- let aS = drop(toString(aQ), (1 + size(aR)))
209- (((toString((aO / aQ)) + ".") + aS) + aR)
203+func aM (aN,aO) = {
204+ let aP = pow(10, 0, aO, 0, 0, DOWN)
205+ let aQ = toString((aN % aP))
206+ let aR = drop(toString(aP), (1 + size(aQ)))
207+ (((toString((aN / aP)) + ".") + aR) + aQ)
210208 }
211209
212210
213-let aT = 10000000000
211+let aS = 10000000000
214212
215-let aU = 200
213+let aT = 200
216214
217-let aV = 300
215+let aU = 300
216+
217+let aV = 10000
218218
219219 let aW = 10000
220220
221-let aX = 10000
221+let aX = 15000
222222
223-let aY = 15000
224-
225-func aZ (ba,bb) = ((("factoryWhByContinentAndRes_" + ba) + "_") + toString(bb))
223+func aY (aZ,ba) = ((("factoryWhByContinentAndRes_" + aZ) + "_") + toString(ba))
226224
227225
228-let bc = 0
226+let bb = 0
229227
230-let bd = 1
228+let bc = 1
231229
232-let be = 2
230+let bd = 2
233231
234-func bf (bg) = {
235- let bh = split(valueOrElse(getString(bg), "0@0_0@0_0@0_0@0_0@0_0@0:0@0_0@0_0@0_0@0_0@0_0@0:"), ":")
236-[if ((size(split(bh[bc], "_")) == f))
237- then bh[bc]
238- else "0@0_0@0_0@0_0@0_0@0_0@0", if ((size(split(bh[bd], "_")) == f))
239- then bh[bd]
240- else "0@0_0@0_0@0_0@0_0@0_0@0", bh[be]]
232+func be (bf) = {
233+ let bg = split(valueOrElse(getString(bf), "0@0_0@0_0@0_0@0_0@0_0@0:0@0_0@0_0@0_0@0_0@0_0@0:"), ":")
234+[if ((size(split(bg[bb], "_")) == f))
235+ then bg[bb]
236+ else "0@0_0@0_0@0_0@0_0@0_0@0", if ((size(split(bg[bc], "_")) == f))
237+ then bg[bc]
238+ else "0@0_0@0_0@0_0@0_0@0_0@0", bg[bd]]
241239 }
242240
243241
244-func bi (bj,bk,bl) = if (bl)
242+func bh (bi,bj,bk) = if (bk)
245243 then {
246- let bm = if ((bj >= 0))
247- then (((bj + bk) - 1) / bk)
248- else -((((-(bj) + bk) - 1) / bk))
249- (bm * am)
244+ let bl = if ((bi >= 0))
245+ then (((bi + bj) - 1) / bj)
246+ else -((((-(bi) + bj) - 1) / bj))
247+ (bl * al)
250248 }
251- else bj
249+ else bi
252250
253251
254-func bn (bo,bb,bj,bp) = {
255- let bq = aZ(bo, bb)
256- let br = valueOrElse(getInteger(bq), 0)
257- let bs = if ((br > aT))
252+func bm (bn,ba,bi,bo) = {
253+ let bp = aY(bn, ba)
254+ let bq = valueOrElse(getInteger(bp), 0)
255+ let br = if ((bq > aS))
258256 then 0
259- else if (((br + bj) > aT))
260- then (aT - br)
261- else bj
262- let bt = (fraction(bs, ((aU * h) - fraction(((100 * br) + (50 * bs)), h, aT)), an) + fraction((bj - bs), h, am))
263- let bu = (bp - (bp / 100))
264- if (((bu * bj) > (bt * am)))
265- then throw((((((((((("Actual price = " + toString(bt)) + " / ") + toString(bj)) + " < minPrice = ") + toString(bp)) + ", (") + bo) + ", ") + p[bb]) + ")"))
266- else $Tuple2(IntegerEntry(bq, (br + bj)), bt)
257+ else if (((bq + bi) > aS))
258+ then (aS - bq)
259+ else bi
260+ let bs = (fraction(br, ((aT * h) - fraction(((100 * bq) + (50 * br)), h, aS)), am) + fraction((bi - br), h, al))
261+ let bt = (bo - (bo / 100))
262+ if (((bt * bi) > (bs * al)))
263+ then throw((((((((((("Actual price = " + toString(bs)) + " / ") + toString(bi)) + " < minPrice = ") + toString(bo)) + ", (") + bn) + ", ") + p[ba]) + ")"))
264+ else $Tuple2(IntegerEntry(bp, (bq + bi)), bs)
267265 }
268266
269267
270-func bv (bo,bw,bj,bx) = {
271- let bq = aZ(bo, bw)
272- let br = valueOrElse(getInteger(bq), 0)
273- let by = if ((br > aT))
274- then min([bj, (br - aT)])
268+func bu (bn,bv,bi,bw) = {
269+ let bp = aY(bn, bv)
270+ let bq = valueOrElse(getInteger(bp), 0)
271+ let bx = if ((bq > aS))
272+ then min([bi, (bq - aS)])
275273 else 0
276- let bz = min([br, (bj - by)])
277- let bA = (bz + by)
278- let bB = min([br, aT])
279- let bC = (fraction(bz, ((aV * h) - fraction(((100 * bB) - (50 * bz)), h, aT)), an) + fraction(by, (2 * h), am))
280- let bD = (bx + (bx / 100))
281- if (((bC * am) > (bD * bA)))
282- then throw((((((((((("Actual price = " + toString(bC)) + " / ") + toString(bA)) + " > maxPrice = ") + toString(bx)) + ", (") + bo) + ", ") + q[bw]) + ")"))
283- else $Tuple3(IntegerEntry(bq, (br - bA)), bC, bA)
274+ let by = min([bq, (bi - bx)])
275+ let bz = (by + bx)
276+ let bA = min([bq, aS])
277+ let bB = (fraction(by, ((aU * h) - fraction(((100 * bA) - (50 * by)), h, aS)), am) + fraction(bx, (2 * h), al))
278+ let bC = (bw + (bw / 100))
279+ if (((bB * al) > (bC * bz)))
280+ then throw((((((((((("Actual price = " + toString(bB)) + " / ") + toString(bz)) + " > maxPrice = ") + toString(bw)) + ", (") + bn) + ", ") + q[bv]) + ")"))
281+ else $Tuple3(IntegerEntry(bp, (bq - bz)), bB, bz)
284282 }
285283
286284
287-func bE (bF) = {
288- let bh = split_4C(valueOrElse(getString(aE, bF), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
289-[toString(valueOrElse(parseInt(bh[G]), 0)), if ((size(split(bh[H], "_")) == f))
290- then bh[H]
291- else "0_0_0_0_0_0", if ((size(split(bh[I], "_")) == f))
292- then bh[I]
293- else "0_0_0_0_0_0", bh[J]]
285+func bD (bE) = {
286+ let bg = split_4C(valueOrElse(getString(aD, bE), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
287+[toString(valueOrElse(parseInt(bg[G]), 0)), if ((size(split(bg[H], "_")) == f))
288+ then bg[H]
289+ else "0_0_0_0_0_0", if ((size(split(bg[I], "_")) == f))
290+ then bg[I]
291+ else "0_0_0_0_0_0", bg[J]]
294292 }
295293
296294
297-func bG () = if (valueOrElse(getBoolean(aE, aM()), false))
295+func bF () = if (valueOrElse(getBoolean(aD, aL()), false))
298296 then throw("Contracts are under maintenance")
299297 else unit
300298
301299
302-func bH () = aK(reentrantInvoke(aE, "saveLastTx", nil, nil))
300+func bG () = aJ(reentrantInvoke(aD, "saveLastTx", nil, nil))
303301
304302
305-func bI (bJ,bK) = {
306- let bL = bJ._1
307- let bM = if ((size(bJ._10) > bL))
308- then bJ._10[bL]
303+func bH (bI,bJ) = {
304+ let bK = bI._1
305+ let bL = if ((size(bI._10) > bK))
306+ then bI._10[bK]
309307 else "0@0"
310- let bN = bJ._8
311- let bO = split(bM, "@")
312- if ((size(bO) != 2))
308+ let bM = bI._8
309+ let bN = split(bL, "@")
310+ if ((size(bN) != 2))
313311 then throw("Incorrect order format, should be amount@price")
314312 else {
315- let bP = parseIntValue(bO[0])
316- let bQ = parseIntValue(bO[1])
317- let bR = if (bN)
318- then (bP * bQ)
319- else fraction(bP, bQ, am)
320- let bS = bi(bP, y, bN)
321- let bT = if ((size(bJ._6) > bL))
322- then parseIntValue(bJ._6[bL])
313+ let bO = parseIntValue(bN[0])
314+ let bP = parseIntValue(bN[1])
315+ let bQ = if (bM)
316+ then (bO * bP)
317+ else fraction(bO, bP, al)
318+ let bR = bh(bO, y, bM)
319+ let bS = if ((size(bI._6) > bK))
320+ then parseIntValue(bI._6[bK])
323321 else 0
324- let bU = split(if ((size(bJ._7) > bL))
325- then bJ._7[bL]
322+ let bT = split(if ((size(bI._7) > bK))
323+ then bI._7[bK]
326324 else "0@0", "@")
327- let bV = parseIntValue(bU[0])
328- let bW = parseIntValue(bU[1])
329- if (if ((0 > bW))
325+ let bU = parseIntValue(bT[0])
326+ let bV = parseIntValue(bT[1])
327+ if (if ((0 > bV))
330328 then true
331- else (0 > bQ))
329+ else (0 > bP))
332330 then throw("Price can't be negative")
333331 else {
334- let bX = if (bN)
335- then (bV * bW)
336- else fraction(bV, bW, am)
337- if ((bP == 0))
338- then if ((bV > 0))
339- then $Tuple10((bL + 1), (bJ._2 :+ toString(bT)), bJ._3, bJ._4, (bJ._5 - bX), bJ._6, bJ._7, bN, (bJ._9 + bi(bT, y, bN)), bJ._10)
340- else $Tuple10((bL + 1), (bJ._2 :+ toString((bT - bV))), bJ._3, bJ._4, bJ._5, bJ._6, bJ._7, bN, (bJ._9 + bi((bT - bV), y, bN)), bJ._10)
341- else if ((bP > 0))
342- then if ((0 > bV))
343- then $Tuple10((bL + 1), (bJ._2 :+ toString((bT - bV))), (bJ._3 + bS), bJ._4, (bJ._5 + bR), bJ._6, bJ._7, bN, bi((bT - bV), y, bN), bJ._10)
344- else $Tuple10((bL + 1), (bJ._2 :+ toString(bT)), (bJ._3 + bS), bJ._4, ((bJ._5 + bR) - bX), bJ._6, bJ._7, bN, bi(bT, y, bN), bJ._10)
345- else if ((0 > bV))
332+ let bW = if (bM)
333+ then (bU * bV)
334+ else fraction(bU, bV, al)
335+ if ((bO == 0))
336+ then if ((bU > 0))
337+ then $Tuple10((bK + 1), (bI._2 :+ toString(bS)), bI._3, bI._4, (bI._5 - bW), bI._6, bI._7, bM, (bI._9 + bh(bS, y, bM)), bI._10)
338+ else $Tuple10((bK + 1), (bI._2 :+ toString((bS - bU))), bI._3, bI._4, bI._5, bI._6, bI._7, bM, (bI._9 + bh((bS - bU), y, bM)), bI._10)
339+ else if ((bO > 0))
340+ then if ((0 > bU))
341+ then $Tuple10((bK + 1), (bI._2 :+ toString((bS - bU))), (bI._3 + bR), bI._4, (bI._5 + bQ), bI._6, bI._7, bM, bh((bS - bU), y, bM), bI._10)
342+ else $Tuple10((bK + 1), (bI._2 :+ toString(bS)), (bI._3 + bR), bI._4, ((bI._5 + bQ) - bW), bI._6, bI._7, bM, bh(bS, y, bM), bI._10)
343+ else if ((0 > bU))
346344 then {
347- let bY = (bV - bP)
348- if ((0 > (bT - bY)))
349- then throw((((("Attempt to take " + toString(bY)) + " from warehouse, but only ") + toString(bT)) + " available"))
350- else $Tuple10((bL + 1), (bJ._2 :+ toString((bT - bY))), bJ._3, (bJ._4 - bS), bJ._5, bJ._6, bJ._7, bN, bi((bT - bY), y, bN), bJ._10)
345+ let bX = (bU - bO)
346+ if ((0 > (bS - bX)))
347+ then throw((((("Attempt to take " + toString(bX)) + " from warehouse, but only ") + toString(bS)) + " available"))
348+ else $Tuple10((bK + 1), (bI._2 :+ toString((bS - bX))), bI._3, (bI._4 - bR), bI._5, bI._6, bI._7, bM, bh((bS - bX), y, bM), bI._10)
351349 }
352- else if ((0 > (bT + bP)))
353- then throw((((("Attempt to take " + toString(-(bP))) + " from warehouse, but only ") + toString(bT)) + " available"))
354- else $Tuple10((bL + 1), (bJ._2 :+ toString((bT + bP))), bJ._3, (bJ._4 - bS), (bJ._5 - bX), bJ._6, bJ._7, bN, bi((bT + bP), y, bN), bJ._10)
350+ else if ((0 > (bS + bO)))
351+ then throw((((("Attempt to take " + toString(-(bO))) + " from warehouse, but only ") + toString(bS)) + " available"))
352+ else $Tuple10((bK + 1), (bI._2 :+ toString((bS + bO))), bI._3, (bI._4 - bR), (bI._5 - bW), bI._6, bI._7, bM, bh((bS + bO), y, bM), bI._10)
355353 }
356354 }
357355 }
358356
359357
360-func bZ (ca,cb,cc) = {
361- let cd = split(ca[A], "_")
362- let ce = split(ca[B], "_")
363- let cf = if ((ca[C] == ""))
358+func bY (bZ,ca,cb) = {
359+ let cc = split(bZ[A], "_")
360+ let cd = split(bZ[B], "_")
361+ let ce = if ((bZ[C] == ""))
364362 then nil
365- else split_4C(ca[C], "_")
366- let cg = split(cb[bc], "_")
367- let ch = split(cb[bd], "_")
368- let ci = if ((cb[be] == ""))
363+ else split_4C(bZ[C], "_")
364+ let cf = split(ca[bb], "_")
365+ let cg = split(ca[bc], "_")
366+ let ch = if ((ca[bd] == ""))
369367 then nil
370- else split_4C(cb[be], "_")
371- if ((size(cc) != 3))
368+ else split_4C(ca[bd], "_")
369+ if ((size(cb) != 3))
372370 then throw("newOrderStr should contain exactly 2 ':' separators")
373371 else {
374- let cj = split(cc[0], "_")
375- let ck = split(cc[1], "_")
376- let cl = if ((cc[2] == ""))
372+ let ci = split(cb[0], "_")
373+ let cj = split(cb[1], "_")
374+ let ck = if ((cb[2] == ""))
377375 then nil
378- else split_4C(cc[2], "_")
379- if ((size(cj) != f))
376+ else split_4C(cb[2], "_")
377+ if ((size(ci) != f))
380378 then throw("All 6 resources should be passed")
381- else if ((size(ck) != f))
379+ else if ((size(cj) != f))
382380 then throw("All 6 materials should be passed")
383381 else {
384- let cm = {
385- let cn = p
386- let co = size(cn)
387- let cp = $Tuple10(0, nil, 0, 0, 0, cd, cg, false, 0, cj)
388- func cq (cr,cs) = if ((cs >= co))
389- then cr
390- else bI(cr, cn[cs])
382+ let cl = {
383+ let cm = p
384+ let cn = size(cm)
385+ let co = $Tuple10(0, nil, 0, 0, 0, cc, cf, false, 0, ci)
386+ func cp (cq,cr) = if ((cr >= cn))
387+ then cq
388+ else bH(cq, cm[cr])
391389
392- func ct (cr,cs) = if ((cs >= co))
393- then cr
390+ func cs (cq,cr) = if ((cr >= cn))
391+ then cq
394392 else throw("List size exceeds 6")
395393
396- ct(cq(cq(cq(cq(cq(cq(cp, 0), 1), 2), 3), 4), 5), 6)
394+ cs(cp(cp(cp(cp(cp(cp(co, 0), 1), 2), 3), 4), 5), 6)
397395 }
398- let bA = {
399- let cn = q
400- let co = size(cn)
401- let cp = $Tuple10(0, nil, cm._3, cm._4, cm._5, ce, ch, false, cm._9, ck)
402- func cu (cr,cs) = if ((cs >= co))
403- then cr
404- else bI(cr, cn[cs])
396+ let bz = {
397+ let cm = q
398+ let cn = size(cm)
399+ let co = $Tuple10(0, nil, cl._3, cl._4, cl._5, cd, cg, false, cl._9, cj)
400+ func ct (cq,cr) = if ((cr >= cn))
401+ then cq
402+ else bH(cq, cm[cr])
405403
406- func cv (cr,cs) = if ((cs >= co))
407- then cr
404+ func cu (cq,cr) = if ((cr >= cn))
405+ then cq
408406 else throw("List size exceeds 6")
409407
410- cv(cu(cu(cu(cu(cu(cu(cp, 0), 1), 2), 3), 4), 5), 6)
408+ cu(ct(ct(ct(ct(ct(ct(co, 0), 1), 2), 3), 4), 5), 6)
411409 }
412- let bh = {
413- let cn = r
414- let co = size(cn)
415- let cp = $Tuple10(0, nil, bA._3, bA._4, bA._5, cf, ci, true, bA._9, cl)
416- func cw (cr,cs) = if ((cs >= co))
417- then cr
418- else bI(cr, cn[cs])
410+ let bg = {
411+ let cm = r
412+ let cn = size(cm)
413+ let co = $Tuple10(0, nil, bz._3, bz._4, bz._5, ce, ch, true, bz._9, ck)
414+ func cv (cq,cr) = if ((cr >= cn))
415+ then cq
416+ else bH(cq, cm[cr])
419417
420- func cx (cr,cs) = if ((cs >= co))
421- then cr
418+ func cw (cq,cr) = if ((cr >= cn))
419+ then cq
422420 else throw("List size exceeds 50")
423421
424- cx(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cp, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
422+ cw(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(co, 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)
425423 }
426- $Tuple7(cm._2, bA._2, bh._2, bh._3, bh._4, bh._5, bh._9)
424+ $Tuple7(cl._2, bz._2, bg._2, bg._3, bg._4, bg._5, bg._9)
427425 }
428426 }
429427 }
430428
431429
432-func cy (bJ,cz) = {
433- let bL = bJ._7
434- let bN = bJ._12
435- let cA = split(cz, "@")
436- if ((size(cA) != 2))
430+func cx (bI,cy) = {
431+ let bK = bI._7
432+ let bM = bI._12
433+ let cz = split(cy, "@")
434+ if ((size(cz) != 2))
437435 then throw("Incorrect order format, should be amount@price")
438436 else {
439- let cB = parseIntValue(cA[0])
440- let cC = parseIntValue(cA[1])
441- if ((0 > cC))
437+ let cA = parseIntValue(cz[0])
438+ let cB = parseIntValue(cz[1])
439+ if ((0 > cB))
442440 then throw("Price can't be negative")
443441 else {
444- let cD = if (bN)
445- then (cB * cC)
446- else fraction(cB, cC, am)
447- let cE = if ((size(bJ._8) > bL))
448- then parseIntValue(bJ._8[bL])
442+ let cC = if (bM)
443+ then (cA * cB)
444+ else fraction(cA, cB, al)
445+ let cD = if ((size(bI._8) > bK))
446+ then parseIntValue(bI._8[bK])
449447 else 0
450- let bT = if ((size(bJ._9) > bL))
451- then parseIntValue(bJ._9[bL])
448+ let bS = if ((size(bI._9) > bK))
449+ then parseIntValue(bI._9[bK])
452450 else 0
453- let cF = if ((size(bJ._10) > bL))
454- then bJ._10[bL]
451+ let cE = if ((size(bI._10) > bK))
452+ then bI._10[bK]
455453 else "0@0"
456- let cG = split(cF, "@")
457- let cH = parseIntValue(cG[0])
458- let cI = parseIntValue(cG[1])
459- if (if ((cB != 0))
460- then (cC != cI)
454+ let cF = split(cE, "@")
455+ let cG = parseIntValue(cF[0])
456+ let cH = parseIntValue(cF[1])
457+ if (if ((cA != 0))
458+ then (cB != cH)
461459 else false)
462- then throw(((((("Prices of " + bJ._11[bL]) + " don't match! WH price=") + toString(cI)) + ", your price=") + toString(cC)))
460+ then throw(((((("Prices of " + bI._11[bK]) + " don't match! WH price=") + toString(cH)) + ", your price=") + toString(cB)))
463461 else {
464- let cJ = if (bN)
465- then (cH * cI)
466- else fraction(cH, cI, am)
467- let cK = bi(cB, y, bN)
468- if ((cB == 0))
469- then $Tuple13((bJ._1 :+ toString(bT)), (bJ._2 :+ cF), (bJ._3 :+ toString(cE)), bJ._4, bJ._5, bJ._6, (bJ._7 + 1), bJ._8, bJ._9, bJ._10, bJ._11, bN, bJ._13)
470- else if ((cB > 0))
471- then if ((0 > cH))
472- then if ((cB > -(cH)))
473- then throw(((((("Attempt to buy " + toString(cB)) + " of ") + bJ._11[bL]) + ", but warehouse only sells ") + toString(-(cH))))
474- else $Tuple13((bJ._1 :+ toString(bT)), (bJ._2 :+ ((toString((cH + cB)) + "@") + toString(cI))), (bJ._3 :+ toString((cE + cB))), (bJ._4 + cK), bJ._5, (bJ._6 + cD), (bJ._7 + 1), bJ._8, bJ._9, bJ._10, bJ._11, bN, (bJ._13 + (if (bN)
475- then (cB * am)
476- else cB)))
477- else throw((("Attempt to buy " + bJ._11[bL]) + " while warehouse doesn't sell it"))
478- else if ((cH > 0))
479- then if ((-(cB) > cH))
480- then throw(((((("Attempt to sell " + toString(-(cB))) + " of ") + bJ._11[bL]) + ", but warehouse only buys ") + toString(cH)))
481- else if ((-(cB) > cE))
482- then throw(((((("Attempt to sell " + toString(-(cB))) + ", but you only have ") + toString(cE)) + " of ") + bJ._11[bL]))
483- else $Tuple13((bJ._1 :+ toString((bT - cB))), (bJ._2 :+ ((toString((cH + cB)) + "@") + toString(cI))), (bJ._3 :+ toString((cE + cB))), (bJ._4 - cK), (bJ._5 - cD), bJ._6, (bJ._7 + 1), bJ._8, bJ._9, bJ._10, bJ._11, bN, (bJ._13 - (if (bN)
484- then (cB * am)
485- else cB)))
486- else throw((("Attempt to sell " + bJ._11[bL]) + " while warehouse doesn't buy it"))
462+ let cI = if (bM)
463+ then (cG * cH)
464+ else fraction(cG, cH, al)
465+ let cJ = bh(cA, y, bM)
466+ if ((cA == 0))
467+ then $Tuple13((bI._1 :+ toString(bS)), (bI._2 :+ cE), (bI._3 :+ toString(cD)), bI._4, bI._5, bI._6, (bI._7 + 1), bI._8, bI._9, bI._10, bI._11, bM, bI._13)
468+ else if ((cA > 0))
469+ then if ((0 > cG))
470+ then if ((cA > -(cG)))
471+ then throw(((((("Attempt to buy " + toString(cA)) + " of ") + bI._11[bK]) + ", but warehouse only sells ") + toString(-(cG))))
472+ else $Tuple13((bI._1 :+ toString(bS)), (bI._2 :+ ((toString((cG + cA)) + "@") + toString(cH))), (bI._3 :+ toString((cD + cA))), (bI._4 + cJ), bI._5, (bI._6 + cC), (bI._7 + 1), bI._8, bI._9, bI._10, bI._11, bM, (bI._13 + (if (bM)
473+ then (cA * al)
474+ else cA)))
475+ else throw((("Attempt to buy " + bI._11[bK]) + " while warehouse doesn't sell it"))
476+ else if ((cG > 0))
477+ then if ((-(cA) > cG))
478+ then throw(((((("Attempt to sell " + toString(-(cA))) + " of ") + bI._11[bK]) + ", but warehouse only buys ") + toString(cG)))
479+ else if ((-(cA) > cD))
480+ then throw(((((("Attempt to sell " + toString(-(cA))) + ", but you only have ") + toString(cD)) + " of ") + bI._11[bK]))
481+ else $Tuple13((bI._1 :+ toString((bS - cA))), (bI._2 :+ ((toString((cG + cA)) + "@") + toString(cH))), (bI._3 :+ toString((cD + cA))), (bI._4 - cJ), (bI._5 - cC), bI._6, (bI._7 + 1), bI._8, bI._9, bI._10, bI._11, bM, (bI._13 - (if (bM)
482+ then (cA * al)
483+ else cA)))
484+ else throw((("Attempt to sell " + bI._11[bK]) + " while warehouse doesn't buy it"))
487485 }
488486 }
489487 }
490488 }
491489
492490
493-func cL (cM,cN,cO,cP) = {
494- func cQ (bJ,bL) = if ((cO[bL] > parseIntValue(cM[bL])))
495- then throw(((((("You have " + cM[bL]) + " of ") + p[bL]) + ", but tried to sell ") + toString(cO[bL])))
496- else if ((0 > cO[bL]))
497- then throw(((("You tried to sell negative amount of " + p[bL]) + ": ") + toString(cO[bL])))
498- else if ((cO[bL] > 0))
491+func cK (cL,cM,cN,cO) = {
492+ func cP (bI,bK) = if ((cN[bK] > parseIntValue(cL[bK])))
493+ then throw(((((("You have " + cL[bK]) + " of ") + p[bK]) + ", but tried to sell ") + toString(cN[bK])))
494+ else if ((0 > cN[bK]))
495+ then throw(((("You tried to sell negative amount of " + p[bK]) + ": ") + toString(cN[bK])))
496+ else if ((cN[bK] > 0))
499497 then {
500- let cR = bn(cN, bL, cO[bL], cP[bL])
501- $Tuple4((bJ._1 :+ cR._1), (bJ._2 :+ toString((parseIntValue(cM[bL]) - cO[bL]))), (bJ._3 + cR._2), (bJ._4 + cO[bL]))
498+ let cQ = bm(cM, bK, cN[bK], cO[bK])
499+ $Tuple4((bI._1 :+ cQ._1), (bI._2 :+ toString((parseIntValue(cL[bK]) - cN[bK]))), (bI._3 + cQ._2), (bI._4 + cN[bK]))
502500 }
503- else $Tuple4(bJ._1, (bJ._2 :+ cM[bL]), bJ._3, bJ._4)
501+ else $Tuple4(bI._1, (bI._2 :+ cL[bK]), bI._3, bI._4)
504502
505- let cn = ap
506- let co = size(cn)
507- let cp = $Tuple4(nil, nil, 0, 0)
508- func cq (cr,cs) = if ((cs >= co))
509- then cr
510- else cQ(cr, cn[cs])
503+ let cm = ao
504+ let cn = size(cm)
505+ let co = $Tuple4(nil, nil, 0, 0)
506+ func cp (cq,cr) = if ((cr >= cn))
507+ then cq
508+ else cP(cq, cm[cr])
511509
512- func ct (cr,cs) = if ((cs >= co))
513- then cr
510+ func cs (cq,cr) = if ((cr >= cn))
511+ then cq
514512 else throw("List size exceeds 6")
515513
516- ct(cq(cq(cq(cq(cq(cq(cp, 0), 1), 2), 3), 4), 5), 6)
514+ cs(cp(cp(cp(cp(cp(cp(co, 0), 1), 2), 3), 4), 5), 6)
517515 }
518516
519517
520-func cS (cT,cN,cO,cU) = {
521- func cV (bJ,bL) = if ((0 > cO[bL]))
522- then throw(((("You tried to buy negative amount of " + q[bL]) + ": ") + toString(cO[bL])))
523- else if ((cO[bL] > 0))
518+func cR (cS,cM,cN,cT) = {
519+ func cU (bI,bK) = if ((0 > cN[bK]))
520+ then throw(((("You tried to buy negative amount of " + q[bK]) + ": ") + toString(cN[bK])))
521+ else if ((cN[bK] > 0))
524522 then {
525- let cR = bv(cN, bL, cO[bL], cU[bL])
526- $Tuple4((bJ._1 :+ cR._1), (bJ._2 :+ toString((parseIntValue(cT[bL]) + cR._3))), (bJ._3 + cR._2), (bJ._4 + cO[bL]))
523+ let cQ = bu(cM, bK, cN[bK], cT[bK])
524+ $Tuple4((bI._1 :+ cQ._1), (bI._2 :+ toString((parseIntValue(cS[bK]) + cQ._3))), (bI._3 + cQ._2), (bI._4 + cN[bK]))
527525 }
528- else $Tuple4(bJ._1, (bJ._2 :+ cT[bL]), bJ._3, bJ._4)
526+ else $Tuple4(bI._1, (bI._2 :+ cS[bK]), bI._3, bI._4)
529527
530- let cn = ap
531- let co = size(cn)
532- let cp = $Tuple4(nil, nil, 0, 0)
533- func cq (cr,cs) = if ((cs >= co))
534- then cr
535- else cV(cr, cn[cs])
528+ let cm = ao
529+ let cn = size(cm)
530+ let co = $Tuple4(nil, nil, 0, 0)
531+ func cp (cq,cr) = if ((cr >= cn))
532+ then cq
533+ else cU(cq, cm[cr])
536534
537- func ct (cr,cs) = if ((cs >= co))
538- then cr
535+ func cs (cq,cr) = if ((cr >= cn))
536+ then cq
539537 else throw("List size exceeds 6")
540538
541- ct(cq(cq(cq(cq(cq(cq(cp, 0), 1), 2), 3), 4), 5), 6)
539+ cs(cp(cp(cp(cp(cp(cp(co, 0), 1), 2), 3), 4), 5), 6)
542540 }
543541
544542
545-func cW (cM,cT,cO) = {
546- func cX (bJ,bL) = {
547- let cY = cO[bL]
548- if ((cY > parseIntValue(cM[bL])))
549- then throw(((((("You have " + cM[bL]) + " of ") + p[bL]) + ", but tried to exchange ") + toString(cY)))
550- else if ((0 > cY))
551- then throw(((("You tried to exchange negative amount of " + p[bL]) + ": ") + toString(cY)))
552- else if ((cY > 0))
553- then $Tuple4((bJ._1 :+ toString((parseIntValue(cM[bL]) - cY))), (bJ._2 :+ toString((parseIntValue(cT[bL]) + cY))), (bJ._3 + fraction(cY, h, am)), (bJ._4 + cY))
554- else $Tuple4((bJ._1 :+ cM[bL]), (bJ._2 :+ cT[bL]), bJ._3, bJ._4)
543+func cV (cL,cS,cN) = {
544+ func cW (bI,bK) = {
545+ let cX = cN[bK]
546+ if ((cX > parseIntValue(cL[bK])))
547+ then throw(((((("You have " + cL[bK]) + " of ") + p[bK]) + ", but tried to exchange ") + toString(cX)))
548+ else if ((0 > cX))
549+ then throw(((("You tried to exchange negative amount of " + p[bK]) + ": ") + toString(cX)))
550+ else if ((cX > 0))
551+ then $Tuple4((bI._1 :+ toString((parseIntValue(cL[bK]) - cX))), (bI._2 :+ toString((parseIntValue(cS[bK]) + cX))), (bI._3 + fraction(cX, h, al)), (bI._4 + cX))
552+ else $Tuple4((bI._1 :+ cL[bK]), (bI._2 :+ cS[bK]), bI._3, bI._4)
555553 }
556554
557- let cn = ap
558- let co = size(cn)
559- let cp = $Tuple4(nil, nil, 0, 0)
560- func cq (cr,cs) = if ((cs >= co))
561- then cr
562- else cX(cr, cn[cs])
555+ let cm = ao
556+ let cn = size(cm)
557+ let co = $Tuple4(nil, nil, 0, 0)
558+ func cp (cq,cr) = if ((cr >= cn))
559+ then cq
560+ else cW(cq, cm[cr])
563561
564- func ct (cr,cs) = if ((cs >= co))
565- then cr
562+ func cs (cq,cr) = if ((cr >= cn))
563+ then cq
566564 else throw("List size exceeds 6")
567565
568- ct(cq(cq(cq(cq(cq(cq(cp, 0), 1), 2), 3), 4), 5), 6)
566+ cs(cp(cp(cp(cp(cp(cp(co, 0), 1), 2), 3), 4), 5), 6)
569567 }
570568
571569
572-func cZ (da,db,dc) = if ((da > 0))
570+func cY (cZ,da,db) = if ((cZ > 0))
573571 then {
574- let dd = fraction(da, aW, al)
575- if ((dc >= (da - (3 * dd))))
576- then throw(("This trade does not cover delivery cost of " + aN(dc, 6)))
572+ let dc = fraction(cZ, aV, ak)
573+ if ((db >= (cZ - (3 * dc))))
574+ then throw(("This trade does not cover delivery cost of " + aM(db, 6)))
577575 else {
578- let de = Q(db)
579- let df = getString(aE, de)
580- let dg = addressFromStringValue(db)
581- (((if (isDefined(df))
582- then [ScriptTransfer(addressFromStringValue(value(df)), dd, ag)]
583- else nil) :+ ScriptTransfer(dg, ((da - (3 * dd)) - dc), ag)) :+ ScriptTransfer(aD, dd, ag))
576+ let dd = Q(da)
577+ let de = getString(aD, dd)
578+ let df = addressFromStringValue(da)
579+ (((if (isDefined(de))
580+ then [ScriptTransfer(addressFromStringValue(value(de)), dc, af)]
581+ else nil) :+ ScriptTransfer(df, ((cZ - (3 * dc)) - db), af)) :+ ScriptTransfer(aC, dc, af))
584582 }
585583 }
586584 else nil
587585
588586
589-func dh (di,dj,dk,dl) = if ((di > 0))
590- then if ((size(dj) != 1))
587+func dg (dh,di,dj,dk) = if ((dh > 0))
588+ then if ((size(di) != 1))
591589 then throw("exactly 1 payment must be attached")
592590 else {
593- let dm = dj[0]
594- let dn = dm.amount
595- if (if (!(isDefined(dm.assetId)))
591+ let dl = di[0]
592+ let dm = dl.amount
593+ if (if (!(isDefined(dl.assetId)))
596594 then true
597- else (value(dm.assetId) != ag))
595+ else (value(dl.assetId) != af))
598596 then throw("USDT payments only!")
599597 else {
600- let do = (di + dl)
601- if ((dn != do))
602- then throw((((((("Insufficient payment! Attached=" + aN(dn, 6)) + ", required=") + aN(di, 6)) + "+") + aN(dl, 6)) + "(delivery fee)"))
603- else if ((ao > di))
604- then throw(("Min shop trade is " + aN(ao, 6)))
598+ let dn = (dh + dk)
599+ if ((dm != dn))
600+ then throw((((((("Insufficient payment! Attached=" + aM(dm, 6)) + ", required=") + aM(dh, 6)) + "+") + aM(dk, 6)) + "(delivery fee)"))
601+ else if ((an > dh))
602+ then throw(("Min shop trade is " + aM(an, 6)))
605603 else {
606- let dp = fraction(di, aW, al)
607- let de = Q(dk)
608- let df = getString(aE, de)
609- (((if (isDefined(df))
610- then [ScriptTransfer(addressFromStringValue(value(df)), dp, ag)]
611- else nil) :+ ScriptTransfer(addressFromStringValue(dk), (di - (3 * dp)), ag)) :+ ScriptTransfer(aD, dp, ag))
604+ let do = fraction(dh, aV, ak)
605+ let dd = Q(dj)
606+ let de = getString(aD, dd)
607+ (((if (isDefined(de))
608+ then [ScriptTransfer(addressFromStringValue(value(de)), do, af)]
609+ else nil) :+ ScriptTransfer(addressFromStringValue(dj), (dh - (3 * do)), af)) :+ ScriptTransfer(aC, do, af))
612610 }
613611 }
614612 }
615- else if ((size(dj) != 0))
613+ else if ((size(di) != 0))
616614 then throw("No payments needed")
617615 else nil
618616
619617
620-func dq (dr,db,ds,dt,du,dv) = {
621- let dw = value(assetInfo(fromBase58String(dr)))
622- if (!(isDefined(getInteger(aE, P(dr)))))
623- then throw((("NFT " + dw.name) + " is not staked"))
618+func dp (dq,da,dr,ds,dt,du) = {
619+ let dv = value(assetInfo(fromBase58String(dq)))
620+ if (!(isDefined(getInteger(aD, P(dq)))))
621+ then throw((("NFT " + dv.name) + " is not staked"))
624622 else {
625- let dk = valueOrErrorMessage(getString(aE, N(dr)), (("NFT " + dw.name) + " is orphaned"))
626- if ((dk == db))
623+ let dj = valueOrErrorMessage(getString(aD, N(dq)), (("NFT " + dv.name) + " is orphaned"))
624+ if ((dj == da))
627625 then throw("You cannot trade with yourself")
628626 else {
629- let dx = split_4C(ds, ":")
630- if ((size(dx) != 3))
627+ let dw = split_4C(dr, ":")
628+ if ((size(dw) != 3))
631629 then throw("bpOrderStr should contain exactly 2 ':' separators")
632630 else {
633- let dy = split(dx[0], "_")
634- let dz = split(dx[1], "_")
635- let dA = if ((dx[2] == ""))
631+ let dx = split(dw[0], "_")
632+ let dy = split(dw[1], "_")
633+ let dz = if ((dw[2] == ""))
636634 then nil
637- else split_4C(dx[2], "_")
638- if ((size(dy) != f))
635+ else split_4C(dw[2], "_")
636+ if ((size(dx) != f))
639637 then throw("All 6 resources should be passed")
640- else if ((size(dz) != f))
638+ else if ((size(dy) != f))
641639 then throw("All 6 materials should be passed")
642640 else {
643- let dB = aH(invoke(aE, "getWarehouseREADONLY", [dr], nil))
644- let ca = split_4C(dB, ":")
645- let cd = split(ca[A], "_")
646- let ce = split(ca[B], "_")
647- let cf = if ((ca[C] == ""))
641+ let dA = aG(invoke(aD, "getWarehouseREADONLY", [dq], nil))
642+ let bZ = split_4C(dA, ":")
643+ let cc = split(bZ[A], "_")
644+ let cd = split(bZ[B], "_")
645+ let ce = if ((bZ[C] == ""))
648646 then nil
649- else split_4C(ca[C], "_")
650- let dC = parseIntValue(split(ca[D], "_")[E])
651- let bg = X(dr)
652- let dD = bf(bg)
653- let dE = split(dD[bc], "_")
654- let dF = split(dD[bd], "_")
655- let dG = if ((dD[be] == ""))
647+ else split_4C(bZ[C], "_")
648+ let dB = parseIntValue(split(bZ[D], "_")[E])
649+ let bf = X(dq)
650+ let dC = be(bf)
651+ let dD = split(dC[bb], "_")
652+ let dE = split(dC[bc], "_")
653+ let dF = if ((dC[bd] == ""))
656654 then nil
657- else split_4C(dD[be], "_")
658- let cm = {
659- let cn = dy
660- let co = size(cn)
661- let cp = $Tuple13(nil, nil, nil, 0, 0, 0, 0, dt, cd, dE, p, false, 0)
662- func cq (cr,cs) = if ((cs >= co))
663- then cr
664- else cy(cr, cn[cs])
655+ else split_4C(dC[bd], "_")
656+ let cl = {
657+ let cm = dx
658+ let cn = size(cm)
659+ let co = $Tuple13(nil, nil, nil, 0, 0, 0, 0, ds, cc, dD, p, false, 0)
660+ func cp (cq,cr) = if ((cr >= cn))
661+ then cq
662+ else cx(cq, cm[cr])
665663
666- func ct (cr,cs) = if ((cs >= co))
667- then cr
664+ func cs (cq,cr) = if ((cr >= cn))
665+ then cq
668666 else throw("List size exceeds 6")
669667
670- ct(cq(cq(cq(cq(cq(cq(cp, 0), 1), 2), 3), 4), 5), 6)
668+ cs(cp(cp(cp(cp(cp(cp(co, 0), 1), 2), 3), 4), 5), 6)
671669 }
672- let bA = {
673- let cn = dz
674- let co = size(cn)
675- let cp = $Tuple13(nil, nil, nil, cm._4, cm._5, cm._6, 0, du, ce, dF, q, false, cm._13)
676- func cu (cr,cs) = if ((cs >= co))
677- then cr
678- else cy(cr, cn[cs])
670+ let bz = {
671+ let cm = dy
672+ let cn = size(cm)
673+ let co = $Tuple13(nil, nil, nil, cl._4, cl._5, cl._6, 0, dt, cd, dE, q, false, cl._13)
674+ func ct (cq,cr) = if ((cr >= cn))
675+ then cq
676+ else cx(cq, cm[cr])
679677
680- func cv (cr,cs) = if ((cs >= co))
681- then cr
678+ func cu (cq,cr) = if ((cr >= cn))
679+ then cq
682680 else throw("List size exceeds 6")
683681
684- cv(cu(cu(cu(cu(cu(cu(cp, 0), 1), 2), 3), 4), 5), 6)
682+ cu(ct(ct(ct(ct(ct(ct(co, 0), 1), 2), 3), 4), 5), 6)
685683 }
686- let bh = if ((size(dA) != 0))
684+ let bg = if ((size(dz) != 0))
687685 then {
688- let cn = dA
689- let co = size(cn)
690- let cp = $Tuple13(nil, nil, nil, bA._4, bA._5, bA._6, 0, dv, cf, dG, r, true, bA._13)
691- func cw (cr,cs) = if ((cs >= co))
692- then cr
693- else cy(cr, cn[cs])
686+ let cm = dz
687+ let cn = size(cm)
688+ let co = $Tuple13(nil, nil, nil, bz._4, bz._5, bz._6, 0, du, ce, dF, r, true, bz._13)
689+ func cv (cq,cr) = if ((cr >= cn))
690+ then cq
691+ else cx(cq, cm[cr])
694692
695- func cx (cr,cs) = if ((cs >= co))
696- then cr
693+ func cw (cq,cr) = if ((cr >= cn))
694+ then cq
697695 else throw("List size exceeds 50")
698696
699- cx(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cp, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
697+ cw(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(co, 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)
700698 }
701- else $Tuple13(cf, dG, dv, bA._4, bA._5, bA._6, 0, dv, cf, dG, r, true, bA._13)
702- let dH = bh._4
703- let dI = if ((0 > (dC - dH)))
699+ else $Tuple13(ce, dF, du, bz._4, bz._5, bz._6, 0, du, ce, dF, r, true, bz._13)
700+ let dG = bg._4
701+ let dH = if ((0 > (dB - dG)))
704702 then 0
705- else (dC - dH)
706- let dJ = makeString_2C([ca[z], makeString(cm._1, "_"), makeString(bA._1, "_"), makeString_2C(bh._1, "_"), toString(dI)], ":")
707- let dK = makeString_2C([makeString(cm._2, "_"), makeString(bA._2, "_"), makeString_2C(bh._2, "_")], ":")
708- let dL = aH(invoke(aE, "saveWarehouse", [dJ, dr], nil))
709- let dM = aK(invoke(aE, "updateAccStats", [dk, fraction(d, bh._13, am)], nil))
710- $Tuple10(StringEntry(bg, dK), cm._3, bA._3, bh._3, bh._5, bh._6, bh._13, dk, dL, dM)
703+ else (dB - dG)
704+ let dI = makeString_2C([bZ[z], makeString(cl._1, "_"), makeString(bz._1, "_"), makeString_2C(bg._1, "_"), toString(dH)], ":")
705+ let dJ = makeString_2C([makeString(cl._2, "_"), makeString(bz._2, "_"), makeString_2C(bg._2, "_")], ":")
706+ let dK = aG(invoke(aD, "saveWarehouse", [dI, dq], nil))
707+ let dL = aJ(invoke(aD, "updateAccStats", [dj, fraction(d, bg._13, al)], nil))
708+ $Tuple10(StringEntry(bf, dJ), cl._3, bz._3, bg._3, bg._5, bg._6, bg._13, dj, dK, dL)
711709 }
712710 }
713711 }
715713 }
716714
717715
718-func dN (bj) = {
719- let dO = (bj / 30)
720- let dP = [dO, dO, dO, dO, dO, dO]
721- let aJ = toString(dO)
722- let cM = [aJ, aJ, aJ, aJ, aJ, aJ]
723- let cP = [0, 0, 0, 0, 0, 0]
724- func dQ (bJ,dR) = {
725- let dS = cL(cM, dR, dP, cP)
726- $Tuple3((bJ._1 ++ dS._1), (bJ._2 + dS._3), (bJ._3 + dS._4))
716+func dM (bi) = {
717+ let dN = (bi / 30)
718+ let dO = [dN, dN, dN, dN, dN, dN]
719+ let aI = toString(dN)
720+ let cL = [aI, aI, aI, aI, aI, aI]
721+ let cO = [0, 0, 0, 0, 0, 0]
722+ func dP (bI,dQ) = {
723+ let dR = cK(cL, dQ, dO, cO)
724+ $Tuple3((bI._1 ++ dR._1), (bI._2 + dR._3), (bI._3 + dR._4))
727725 }
728726
729- let dT = {
730- let cn = s
731- let co = size(cn)
732- let cp = $Tuple3(nil, 0, 0)
733- func cq (cr,cs) = if ((cs >= co))
734- then cr
735- else dQ(cr, cn[cs])
727+ let dS = {
728+ let cm = s
729+ let cn = size(cm)
730+ let co = $Tuple3(nil, 0, 0)
731+ func cp (cq,cr) = if ((cr >= cn))
732+ then cq
733+ else dP(cq, cm[cr])
736734
737- func ct (cr,cs) = if ((cs >= co))
738- then cr
735+ func cs (cq,cr) = if ((cr >= cn))
736+ then cq
739737 else throw("List size exceeds 5")
740738
741- ct(cq(cq(cq(cq(cq(cp, 0), 1), 2), 3), 4), 5)
739+ cs(cp(cp(cp(cp(cp(co, 0), 1), 2), 3), 4), 5)
742740 }
743- let dU = dT._1
744- let bt = dT._2
745- let dV = dT._3
746- let dW = fraction(bt, aX, al)
747- let dX = (bt / 100)
748- let dY = ((bt - dX) - dW)
749- $Tuple5(dU, dY, dW, dX, dV)
741+ let dT = dS._1
742+ let bs = dS._2
743+ let dU = dS._3
744+ let dV = fraction(bs, aW, ak)
745+ let dW = (bs / 100)
746+ let dX = ((bs - dW) - dV)
747+ $Tuple5(dT, dX, dV, dW, dU)
750748 }
751749
752750
753-func dZ (cT,ea,eb,ec,ed) = if ((0 >= ed))
751+func dY (cS,dZ,ea,eb,ec) = if ((0 >= ec))
754752 then throw("Quantity should be positive")
755- else if (if ((0 > ec))
753+ else if (if ((0 > eb))
756754 then true
757- else (ec >= size(u)))
758- then throw(("Unknown product idx=" + toString(ec)))
755+ else (eb >= size(u)))
756+ then throw(("Unknown product idx=" + toString(eb)))
759757 else {
760- let ad = split(u[ec], "_")
758+ let ad = split(u[eb], "_")
761759 if ((size(ad) != x))
762- then throw(("Fatal: unknown recipe: " + u[ec]))
760+ then throw(("Fatal: unknown recipe: " + u[eb]))
763761 else {
764- let ee = parseIntValue(ad[w])
765- if ((s[ee] != eb))
766- then throw(((("This product is available in " + s[ee]) + ", not in ") + eb))
762+ let ed = parseIntValue(ad[w])
763+ if ((s[ed] != ea))
764+ then throw(((("This product is available in " + s[ed]) + ", not in ") + ea))
767765 else {
768- func ef (bJ,eg) = {
769- let aL = bJ._2
770- let eh = if ((size(ea) > aL))
771- then ea[aL]
766+ func ee (bI,ef) = {
767+ let aK = bI._2
768+ let eg = if ((size(dZ) > aK))
769+ then dZ[aK]
772770 else "0"
773- let dS = parseIntValue(eh)
774- let bj = (ed * y)
775- let ei = if ((aL == ec))
776- then toString((dS + bj))
777- else eh
778- $Tuple2((bJ._1 :+ ei), (aL + 1))
771+ let dR = parseIntValue(eg)
772+ let bi = (ec * y)
773+ let eh = if ((aK == eb))
774+ then toString((dR + bi))
775+ else eg
776+ $Tuple2((bI._1 :+ eh), (aK + 1))
779777 }
780778
781- let ej = ( let cn = u
782- let co = size(cn)
783- let cp = $Tuple2(nil, 0)
784- func cq (cr,cs) = if ((cs >= co))
785- then cr
786- else ef(cr, cn[cs])
779+ let ei = ( let cm = u
780+ let cn = size(cm)
781+ let co = $Tuple2(nil, 0)
782+ func cp (cq,cr) = if ((cr >= cn))
783+ then cq
784+ else ee(cq, cm[cr])
787785
788- func ct (cr,cs) = if ((cs >= co))
789- then cr
786+ func cs (cq,cr) = if ((cr >= cn))
787+ then cq
790788 else throw("List size exceeds 50")
791789
792- ct(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cp, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50))._1
793- func ek (bJ,bL) = {
794- let el = (((parseIntValue(ad[bL]) * ak) * ed) * parseIntValue(ad[v]))
795- let em = parseIntValue(cT[bL])
796- if ((el > em))
797- then throw(((((((("You have " + aN(em, 8)) + " of ") + q[bL]) + ", but recipe requires ") + aN(el, 8)) + " for quantity ") + toString(ed)))
798- else if ((el > 0))
799- then $Tuple2((bJ._1 :+ toString((em - el))), (bJ._2 + el))
800- else $Tuple2((bJ._1 :+ cT[bL]), bJ._2)
790+ cs(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(co, 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
791+ func ej (bI,bK) = {
792+ let ek = (((parseIntValue(ad[bK]) * aj) * ec) * parseIntValue(ad[v]))
793+ let el = parseIntValue(cS[bK])
794+ if ((ek > el))
795+ then throw(((((((("You have " + aM(el, 8)) + " of ") + q[bK]) + ", but recipe requires ") + aM(ek, 8)) + " for quantity ") + toString(ec)))
796+ else if ((ek > 0))
797+ then $Tuple2((bI._1 :+ toString((el - ek))), (bI._2 + ek))
798+ else $Tuple2((bI._1 :+ cS[bK]), bI._2)
801799 }
802800
803- let en = {
804- let cn = ap
805- let co = size(cn)
806- let cp = $Tuple2(nil, 0)
807- func cu (cr,cs) = if ((cs >= co))
808- then cr
809- else ek(cr, cn[cs])
801+ let em = {
802+ let cm = ao
803+ let cn = size(cm)
804+ let co = $Tuple2(nil, 0)
805+ func ct (cq,cr) = if ((cr >= cn))
806+ then cq
807+ else ej(cq, cm[cr])
810808
811- func cv (cr,cs) = if ((cs >= co))
812- then cr
809+ func cu (cq,cr) = if ((cr >= cn))
810+ then cq
813811 else throw("List size exceeds 6")
814812
815- cv(cu(cu(cu(cu(cu(cu(cp, 0), 1), 2), 3), 4), 5), 6)
813+ cu(ct(ct(ct(ct(ct(ct(co, 0), 1), 2), 3), 4), 5), 6)
816814 }
817- $Tuple3(en._1, ej, en._2)
815+ $Tuple3(em._1, ei, em._2)
818816 }
819817 }
820818 }
821819
822820
823-@Callable(eo)
824-func recalcLockedVolumeREADONLY (Y,dB) = {
825- let cb = bf(X(Y))
826- let ep = bZ(dB, cb, cb)
827- $Tuple2(nil, (ep._4 + ep._5))
821+@Callable(en)
822+func recalcLockedVolumeREADONLY (Y,dA) = {
823+ let ca = be(X(Y))
824+ let eo = bY(dA, ca, ca)
825+ $Tuple2(nil, (eo._4 + eo._5))
828826 }
829827
830828
831829
832-@Callable(eo)
833-func constructorV1 (eq) = if ((eo.caller != this))
830+@Callable(en)
831+func constructorV1 (ep) = if ((en.caller != this))
834832 then throw("Permission denied")
835- else [StringEntry(ax(), eq)]
833+ else [StringEntry(aw(), ep)]
836834
837835
838836
839-@Callable(eo)
840-func sellResources (cO,cP) = {
841- let er = bH()
842- if ((er == er))
837+@Callable(en)
838+func sellResources (cN,cO) = {
839+ let eq = bG()
840+ if ((eq == eq))
843841 then {
844- let V = valueOrErrorMessage(getString(aE, S(toString(eo.caller))), "You don't have a duck staked")
845- if ((size(eo.payments) != 0))
842+ let V = valueOrErrorMessage(getString(aD, S(toString(en.caller))), "You don't have a duck staked")
843+ if ((size(en.payments) != 0))
846844 then throw("sellResources doesn't require any payments")
847845 else {
848- let es = split(valueOrElse(getString(aE, W(V)), g), "_")
849- if ((es[L] != "F"))
850- then throw(("Duck location type should be Factory, but is " + es[L]))
846+ let er = split(valueOrElse(getString(aD, W(V)), g), "_")
847+ if ((er[L] != "F"))
848+ then throw(("Duck location type should be Factory, but is " + er[L]))
851849 else {
852- let et = bE(U(V))
853- let cM = split(et[H], "_")
854- let eu = cL(cM, es[M], cO, cP)
855- let dU = eu._1
856- let ev = eu._2
857- let bt = eu._3
858- let dV = eu._4
859- let dX = (bt / 100)
860- let ew = makeString_2C([et[G], makeString(ev, "_"), et[I], et[J]], ":")
861- let ex = aH(invoke(aE, "updateBackpack", [V, ew], nil))
862- let ey = aK(invoke(aE, "updateDuckStats", [V, fraction(a, dV, am)], nil))
863- $Tuple2(((dU :+ ScriptTransfer(eo.caller, (bt - dX), ag)) :+ ScriptTransfer(aD, dX, ag)), $Tuple3(ex, er, ey))
850+ let es = bD(U(V))
851+ let cL = split(es[H], "_")
852+ let et = cK(cL, er[M], cN, cO)
853+ let dT = et._1
854+ let eu = et._2
855+ let bs = et._3
856+ let dU = et._4
857+ let dW = (bs / 100)
858+ let ev = makeString_2C([es[G], makeString(eu, "_"), es[I], es[J]], ":")
859+ let ew = aG(invoke(aD, "updateBackpack", [V, ev], nil))
860+ let ex = aJ(invoke(aD, "updateDuckStats", [V, fraction(a, dU, al)], nil))
861+ $Tuple2(((dT :+ ScriptTransfer(en.caller, (bs - dW), af)) :+ ScriptTransfer(aC, dW, af)), $Tuple3(ew, eq, ex))
864862 }
865863 }
866864 }
869867
870868
871869
872-@Callable(eo)
873-func sellResourcesWorld (R,bj) = if ((eo.caller != aG))
870+@Callable(en)
871+func sellResourcesWorld (R,bi) = if ((en.caller != aF))
874872 then throw("Permission denied")
875873 else {
876- let ez = dN(bj)
877- let dU = ez._1
878- let dY = ez._2
879- let dW = ez._3
880- let dX = ez._4
881- let dV = ez._5
882- if ((0 >= dY))
883- then throw(("This trade does not cover delivery cost of " + aN(dW, 6)))
874+ let ey = dM(bi)
875+ let dT = ey._1
876+ let dX = ey._2
877+ let dV = ey._3
878+ let dW = ey._4
879+ let dU = ey._5
880+ if ((0 >= dX))
881+ then throw(("This trade does not cover delivery cost of " + aM(dV, 6)))
884882 else {
885- let ey = aK(invoke(aE, "updateAccStats", [R, fraction(a, dV, am)], nil))
886- $Tuple2((((dU :+ IntegerEntry(aa, (valueOrElse(getInteger(aa), 0) + dW))) :+ ScriptTransfer(aD, dX, ag)) :+ ScriptTransfer(aF, dY, ag)), $Tuple2(dY, ey))
883+ let ex = aJ(invoke(aD, "updateAccStats", [R, fraction(a, dU, al)], nil))
884+ $Tuple2((((dT :+ IntegerEntry(aa, (valueOrElse(getInteger(aa), 0) + dV))) :+ ScriptTransfer(aC, dW, af)) :+ ScriptTransfer(aE, dX, af)), $Tuple2(dX, ex))
887885 }
888886 }
889887
890888
891889
892-@Callable(eo)
893-func sellResourcesWorldREADONLY (bj) = {
894- let dY = dN(bj)._2
895- $Tuple2(nil, dY)
890+@Callable(en)
891+func sellResourcesWorldREADONLY (bi) = {
892+ let dX = dM(bi)._2
893+ $Tuple2(nil, dX)
896894 }
897895
898896
899897
900-@Callable(eo)
901-func sellResourcesDuckDelivery (cO,cP,eA) = if (!(ae))
902- then throw("Delivery feature is turned off!")
903- else {
904- let er = bH()
905- if ((er == er))
906- then {
907- let V = valueOrErrorMessage(getString(aE, S(toString(eo.caller))), "You don't have a duck staked")
908- if ((size(eo.payments) != 0))
909- then throw("sellResources doesn't require any payments")
898+@Callable(en)
899+func sellResourcesDuckDelivery (cN,cO,ez) = {
900+ let eq = bG()
901+ if ((eq == eq))
902+ then {
903+ let V = valueOrErrorMessage(getString(aD, S(toString(en.caller))), "You don't have a duck staked")
904+ if ((size(en.payments) != 0))
905+ then throw("sellResources doesn't require any payments")
906+ else {
907+ let es = bD(U(V))
908+ let cL = split(es[H], "_")
909+ let eA = cK(cL, ez, cN, cO)
910+ let dT = eA._1
911+ let eu = eA._2
912+ let bs = eA._3
913+ let dU = eA._4
914+ let ev = makeString_2C([es[G], makeString(eu, "_"), es[I], es[J]], ":")
915+ let ew = aG(invoke(aD, "updateBackpack", [V, ev], nil))
916+ let ex = aJ(invoke(aD, "updateDuckStats", [V, fraction(a, dU, al)], nil))
917+ let eB = fraction(bs, aW, ak)
918+ let dV = max([eB, k])
919+ let dW = (bs / 100)
920+ if ((dV >= (bs - dW)))
921+ then throw(("This trade does not cover delivery cost of " + aM(dV, 6)))
922+ else {
923+ let eC = valueOrElse(getInteger(aa), 0)
924+ $Tuple2((((dT :+ ScriptTransfer(en.caller, ((bs - dW) - dV), af)) :+ IntegerEntry(aa, (eC + dV))) :+ ScriptTransfer(aC, dW, af)), $Tuple3(ew, eq, ex))
925+ }
926+ }
927+ }
928+ else throw("Strict value is not equal to itself.")
929+ }
930+
931+
932+
933+@Callable(en)
934+func sellResourcesLandDelivery (cN,cO,Y,ez) = {
935+ let eq = bG()
936+ if ((eq == eq))
937+ then if ((size(en.payments) != 0))
938+ then throw("sellResources doesn't require any payments")
939+ else {
940+ let eD = en.caller
941+ let R = toString(eD)
942+ let eE = value(assetInfo(fromBase58String(Y)))
943+ if (!(isDefined(getInteger(aD, P(Y)))))
944+ then throw((("NFT " + eE.name) + " is not staked"))
910945 else {
911- let et = bE(U(V))
912- let cM = split(et[H], "_")
913- let eB = cL(cM, eA, cO, cP)
914- let dU = eB._1
915- let ev = eB._2
916- let bt = eB._3
917- let dV = eB._4
918- let ew = makeString_2C([et[G], makeString(ev, "_"), et[I], et[J]], ":")
919- let ex = aH(invoke(aE, "updateBackpack", [V, ew], nil))
920- let ey = aK(invoke(aE, "updateDuckStats", [V, fraction(a, dV, am)], nil))
921- let eC = fraction(bt, aX, al)
922- let dW = max([eC, k])
923- let dX = (bt / 100)
924- if ((dW >= (bt - dX)))
925- then throw(("This trade does not cover delivery cost of " + aN(dW, 6)))
946+ let eF = valueOrErrorMessage(getString(aD, N(Y)), (("NFT " + eE.name) + " is orphaned"))
947+ if ((eF != R))
948+ then throw((e + " is not yours"))
926949 else {
927- let eD = valueOrElse(getInteger(aa), 0)
928- $Tuple2((((dU :+ ScriptTransfer(eo.caller, ((bt - dX) - dW), ag)) :+ IntegerEntry(aa, (eD + dW))) :+ ScriptTransfer(aD, dX, ag)), $Tuple3(ex, er, ey))
950+ let dA = aG(invoke(aD, "getWarehouseREADONLY", [Y], nil))
951+ let bZ = split_4C(dA, ":")
952+ let cL = split(bZ[A], "_")
953+ let eG = cK(cL, ez, cN, cO)
954+ let dT = eG._1
955+ let eu = eG._2
956+ let bs = eG._3
957+ let dU = eG._4
958+ let dI = makeString_2C([bZ[z], makeString(eu, "_"), bZ[B], bZ[C], bZ[D]], ":")
959+ let dK = aG(invoke(aD, "saveWarehouse", [dI, Y], nil))
960+ let ex = aJ(invoke(aD, "updateAccStats", [R, fraction(a, dU, al)], nil))
961+ let eB = fraction(bs, aW, ak)
962+ let dV = max([eB, k])
963+ let dW = (bs / 100)
964+ if ((dV >= (bs - dW)))
965+ then throw(("This trade does not cover delivery cost of " + aM(dV, 6)))
966+ else {
967+ let eC = valueOrElse(getInteger(aa), 0)
968+ $Tuple2((((dT :+ ScriptTransfer(en.caller, ((bs - dW) - dV), af)) :+ IntegerEntry(aa, (eC + dV))) :+ ScriptTransfer(aC, dW, af)), $Tuple3(dK, eq, ex))
969+ }
929970 }
930971 }
931972 }
932- else throw("Strict value is not equal to itself.")
933- }
973+ else throw("Strict value is not equal to itself.")
974+ }
934975
935976
936977
937-@Callable(eo)
938-func sellResourcesLandDelivery (cO,cP,Y,eA) = if (!(ae))
939- then throw("Delivery feature is turned off!")
940- else {
941- let er = bH()
942- if ((er == er))
943- then if ((size(eo.payments) != 0))
944- then throw("sellResources doesn't require any payments")
945- else {
946- let eE = eo.caller
947- let R = toString(eE)
948- let eF = value(assetInfo(fromBase58String(Y)))
949- if (!(isDefined(getInteger(aE, P(Y)))))
950- then throw((("NFT " + eF.name) + " is not staked"))
951- else {
952- let eG = valueOrErrorMessage(getString(aE, N(Y)), (("NFT " + eF.name) + " is orphaned"))
953- if ((eG != R))
954- then throw((e + " is not yours"))
955- else {
956- let dB = aH(invoke(aE, "getWarehouseREADONLY", [Y], nil))
957- let ca = split_4C(dB, ":")
958- let cM = split(ca[A], "_")
959- let eH = cL(cM, eA, cO, cP)
960- let dU = eH._1
961- let ev = eH._2
962- let bt = eH._3
963- let dV = eH._4
964- let dJ = makeString_2C([ca[z], makeString(ev, "_"), ca[B], ca[C], ca[D]], ":")
965- let dL = aH(invoke(aE, "saveWarehouse", [dJ, Y], nil))
966- let ey = aK(invoke(aE, "updateAccStats", [R, fraction(a, dV, am)], nil))
967- let eC = fraction(bt, aX, al)
968- let dW = max([eC, k])
969- let dX = (bt / 100)
970- if ((dW >= (bt - dX)))
971- then throw(("This trade does not cover delivery cost of " + aN(dW, 6)))
972- else {
973- let eD = valueOrElse(getInteger(aa), 0)
974- $Tuple2((((dU :+ ScriptTransfer(eo.caller, ((bt - dX) - dW), ag)) :+ IntegerEntry(aa, (eD + dW))) :+ ScriptTransfer(aD, dX, ag)), $Tuple3(dL, er, ey))
975- }
976- }
977- }
978- }
979- else throw("Strict value is not equal to itself.")
980- }
981-
982-
983-
984-@Callable(eo)
985-func buyMaterials (cO,cU) = {
986- let er = bH()
987- if ((er == er))
978+@Callable(en)
979+func buyMaterials (cN,cT) = {
980+ let eq = bG()
981+ if ((eq == eq))
988982 then {
989- let V = valueOrErrorMessage(getString(aE, S(toString(eo.caller))), "You don't have a duck staked")
990- if ((size(eo.payments) != 1))
983+ let V = valueOrErrorMessage(getString(aD, S(toString(en.caller))), "You don't have a duck staked")
984+ if ((size(en.payments) != 1))
991985 then throw("exactly 1 payment must be attached")
992986 else {
993- let dm = eo.payments[0]
994- let dn = dm.amount
995- if (if (!(isDefined(dm.assetId)))
987+ let dl = en.payments[0]
988+ let dm = dl.amount
989+ if (if (!(isDefined(dl.assetId)))
996990 then true
997- else (value(dm.assetId) != ag))
991+ else (value(dl.assetId) != af))
998992 then throw("USDT payments only!")
999993 else {
1000- let es = split(valueOrElse(getString(aE, W(V)), g), "_")
1001- if ((es[L] != "F"))
1002- then throw(("Duck location type should be Factory, but is " + es[L]))
994+ let er = split(valueOrElse(getString(aD, W(V)), g), "_")
995+ if ((er[L] != "F"))
996+ then throw(("Duck location type should be Factory, but is " + er[L]))
1003997 else {
1004- let et = bE(U(V))
1005- let cT = split(et[I], "_")
1006- let eI = cS(cT, es[M], cO, cU)
1007- let dU = eI._1
1008- let eJ = eI._2
1009- let bC = eI._3
1010- let eK = eI._4
1011- if ((bC > dn))
1012- then throw(((("Insufficient payment! Attached=" + aN(dn, 6)) + ", required=") + aN(bC, 6)))
998+ let es = bD(U(V))
999+ let cS = split(es[I], "_")
1000+ let eH = cR(cS, er[M], cN, cT)
1001+ let dT = eH._1
1002+ let eI = eH._2
1003+ let bB = eH._3
1004+ let eJ = eH._4
1005+ if ((bB > dm))
1006+ then throw(((("Insufficient payment! Attached=" + aM(dm, 6)) + ", required=") + aM(bB, 6)))
10131007 else {
1014- let ew = makeString([et[G], et[H], makeString(eJ, "_"), et[J]], ":")
1015- let ex = aH(invoke(aE, "updateBackpack", [V, ew], nil))
1016- let az = if (((dn - bC) > 0))
1017- then [ScriptTransfer(eo.caller, (dn - bC), ag)]
1008+ let ev = makeString([es[G], es[H], makeString(eI, "_"), es[J]], ":")
1009+ let ew = aG(invoke(aD, "updateBackpack", [V, ev], nil))
1010+ let ay = if (((dm - bB) > 0))
1011+ then [ScriptTransfer(en.caller, (dm - bB), af)]
10181012 else nil
1019- let dX = (bC / 100)
1020- let ey = aK(invoke(aE, "updateDuckStats", [V, fraction(a, eK, am)], nil))
1021- $Tuple2(((dU ++ az) :+ ScriptTransfer(aD, dX, ag)), $Tuple3(ex, er, ey))
1013+ let dW = (bB / 100)
1014+ let ex = aJ(invoke(aD, "updateDuckStats", [V, fraction(a, eJ, al)], nil))
1015+ $Tuple2(((dT ++ ay) :+ ScriptTransfer(aC, dW, af)), $Tuple3(ew, eq, ex))
10221016 }
10231017 }
10241018 }
10291023
10301024
10311025
1032-@Callable(eo)
1033-func buyMaterialsDuckDelivery (cO,cU,eA) = if (!(ae))
1034- then throw("Delivery feature is turned off!")
1035- else {
1036- let er = bH()
1037- if ((er == er))
1038- then {
1039- let V = valueOrErrorMessage(getString(aE, S(toString(eo.caller))), "You don't have a duck staked")
1040- if ((size(eo.payments) != 1))
1041- then throw("exactly 1 payment must be attached")
1026+@Callable(en)
1027+func buyMaterialsDuckDelivery (cN,cT,ez) = {
1028+ let eq = bG()
1029+ if ((eq == eq))
1030+ then {
1031+ let V = valueOrErrorMessage(getString(aD, S(toString(en.caller))), "You don't have a duck staked")
1032+ if ((size(en.payments) != 1))
1033+ then throw("exactly 1 payment must be attached")
1034+ else {
1035+ let dl = en.payments[0]
1036+ let dm = dl.amount
1037+ if (if (!(isDefined(dl.assetId)))
1038+ then true
1039+ else (value(dl.assetId) != af))
1040+ then throw("USDT payments only!")
1041+ else {
1042+ let es = bD(U(V))
1043+ let cS = split(es[I], "_")
1044+ let eK = cR(cS, ez, cN, cT)
1045+ let dT = eK._1
1046+ let eI = eK._2
1047+ let bB = eK._3
1048+ let eJ = eK._4
1049+ let ev = makeString([es[G], es[H], makeString(eI, "_"), es[J]], ":")
1050+ let ew = aG(invoke(aD, "updateBackpack", [V, ev], nil))
1051+ let ex = aJ(invoke(aD, "updateDuckStats", [V, fraction(a, eJ, al)], nil))
1052+ let eB = fraction(bB, aW, ak)
1053+ let dV = max([eB, k])
1054+ let dn = (bB + dV)
1055+ if ((dn > dm))
1056+ then throw((((((("Insufficient payment! Attached=" + aM(dm, 6)) + ", required=") + aM(bB, 6)) + "+") + aM(dV, 6)) + "(delivery fee)"))
1057+ else {
1058+ let ay = if (((dm - dn) > 0))
1059+ then [ScriptTransfer(en.caller, (dm - dn), af)]
1060+ else nil
1061+ let dW = (bB / 100)
1062+ let eC = valueOrElse(getInteger(aa), 0)
1063+ $Tuple2((((dT ++ ay) :+ ScriptTransfer(aC, dW, af)) :+ IntegerEntry(aa, (eC + dV))), $Tuple3(ew, eq, ex))
1064+ }
1065+ }
1066+ }
1067+ }
1068+ else throw("Strict value is not equal to itself.")
1069+ }
1070+
1071+
1072+
1073+@Callable(en)
1074+func buyMaterialsLandDelivery (cN,cT,Y,ez) = {
1075+ let eq = bG()
1076+ if ((eq == eq))
1077+ then if ((size(en.payments) != 1))
1078+ then throw("exactly 1 payment must be attached")
1079+ else {
1080+ let dl = en.payments[0]
1081+ let dm = dl.amount
1082+ if (if (!(isDefined(dl.assetId)))
1083+ then true
1084+ else (value(dl.assetId) != af))
1085+ then throw("USDT payments only!")
10421086 else {
1043- let dm = eo.payments[0]
1044- let dn = dm.amount
1045- if (if (!(isDefined(dm.assetId)))
1046- then true
1047- else (value(dm.assetId) != ag))
1048- then throw("USDT payments only!")
1087+ let eD = en.caller
1088+ let R = toString(eD)
1089+ let eE = value(assetInfo(fromBase58String(Y)))
1090+ if (!(isDefined(getInteger(aD, P(Y)))))
1091+ then throw((("NFT " + eE.name) + " is not staked"))
10491092 else {
1050- let et = bE(U(V))
1051- let cT = split(et[I], "_")
1052- let eL = cS(cT, eA, cO, cU)
1053- let dU = eL._1
1054- let eJ = eL._2
1055- let bC = eL._3
1056- let eK = eL._4
1057- let ew = makeString([et[G], et[H], makeString(eJ, "_"), et[J]], ":")
1058- let ex = aH(invoke(aE, "updateBackpack", [V, ew], nil))
1059- let ey = aK(invoke(aE, "updateDuckStats", [V, fraction(a, eK, am)], nil))
1060- let eC = fraction(bC, aX, al)
1061- let dW = max([eC, k])
1062- let do = (bC + dW)
1063- if ((do > dn))
1064- then throw((((((("Insufficient payment! Attached=" + aN(dn, 6)) + ", required=") + aN(bC, 6)) + "+") + aN(dW, 6)) + "(delivery fee)"))
1093+ let eF = valueOrErrorMessage(getString(aD, N(Y)), (("NFT " + eE.name) + " is orphaned"))
1094+ if ((eF != R))
1095+ then throw((e + " is not yours"))
10651096 else {
1066- let az = if (((dn - do) > 0))
1067- then [ScriptTransfer(eo.caller, (dn - do), ag)]
1068- else nil
1069- let dX = (bC / 100)
1070- let eD = valueOrElse(getInteger(aa), 0)
1071- $Tuple2((((dU ++ az) :+ ScriptTransfer(aD, dX, ag)) :+ IntegerEntry(aa, (eD + dW))), $Tuple3(ex, er, ey))
1097+ let dA = aG(invoke(aD, "getWarehouseREADONLY", [Y], nil))
1098+ let bZ = split_4C(dA, ":")
1099+ let cS = split(bZ[B], "_")
1100+ let eL = cR(cS, ez, cN, cT)
1101+ let dT = eL._1
1102+ let eI = eL._2
1103+ let bB = eL._3
1104+ let eJ = eL._4
1105+ let dI = makeString_2C([bZ[z], bZ[A], makeString(eI, "_"), bZ[C], bZ[D]], ":")
1106+ let dK = aG(invoke(aD, "saveWarehouse", [dI, Y], nil))
1107+ let ex = aJ(invoke(aD, "updateAccStats", [R, fraction(a, eJ, al)], nil))
1108+ let eB = fraction(bB, aW, ak)
1109+ let dV = max([eB, k])
1110+ let dn = (bB + dV)
1111+ if ((dn > dm))
1112+ then throw((((((("Insufficient payment! Attached=" + aM(dm, 6)) + ", required=") + aM(bB, 6)) + "+") + aM(dV, 6)) + "(delivery fee)"))
1113+ else {
1114+ let ay = if (((dm - dn) > 0))
1115+ then [ScriptTransfer(en.caller, (dm - dn), af)]
1116+ else nil
1117+ let dW = (bB / 100)
1118+ let eC = valueOrElse(getInteger(aa), 0)
1119+ $Tuple2((((dT ++ ay) :+ ScriptTransfer(aC, dW, af)) :+ IntegerEntry(aa, (eC + dV))), $Tuple3(dK, eq, ex))
1120+ }
10721121 }
10731122 }
10741123 }
10751124 }
1076- else throw("Strict value is not equal to itself.")
1077- }
1125+ else throw("Strict value is not equal to itself.")
1126+ }
10781127
10791128
10801129
1081-@Callable(eo)
1082-func buyMaterialsLandDelivery (cO,cU,Y,eA) = if (!(ae))
1083- then throw("Delivery feature is turned off!")
1084- else {
1085- let er = bH()
1086- if ((er == er))
1087- then if ((size(eo.payments) != 1))
1130+@Callable(en)
1131+func exchangeResources (cN) = {
1132+ let eq = bG()
1133+ if ((eq == eq))
1134+ then {
1135+ let V = valueOrErrorMessage(getString(aD, S(toString(en.caller))), "You don't have a duck staked")
1136+ if ((size(en.payments) != 1))
10881137 then throw("exactly 1 payment must be attached")
10891138 else {
1090- let dm = eo.payments[0]
1091- let dn = dm.amount
1092- if (if (!(isDefined(dm.assetId)))
1139+ let dl = en.payments[0]
1140+ let dm = dl.amount
1141+ if (if (!(isDefined(dl.assetId)))
10931142 then true
1094- else (value(dm.assetId) != ag))
1143+ else (value(dl.assetId) != af))
10951144 then throw("USDT payments only!")
10961145 else {
1097- let eE = eo.caller
1098- let R = toString(eE)
1099- let eF = value(assetInfo(fromBase58String(Y)))
1100- if (!(isDefined(getInteger(aE, P(Y)))))
1101- then throw((("NFT " + eF.name) + " is not staked"))
1146+ let er = split(valueOrElse(getString(aD, W(V)), g), "_")
1147+ if ((er[L] != "F"))
1148+ then throw(("Duck location type should be Factory, but is " + er[L]))
11021149 else {
1103- let eG = valueOrErrorMessage(getString(aE, N(Y)), (("NFT " + eF.name) + " is orphaned"))
1104- if ((eG != R))
1105- then throw((e + " is not yours"))
1150+ let es = bD(U(V))
1151+ let cL = split(es[H], "_")
1152+ let cS = split(es[I], "_")
1153+ let eM = cV(cL, cS, cN)
1154+ let eu = eM._1
1155+ let eI = eM._2
1156+ let bB = eM._3
1157+ let eN = eM._4
1158+ if ((bB > dm))
1159+ then throw(((("Insufficient payment! Attached=" + aM(dm, 6)) + ", required=") + aM(bB, 6)))
11061160 else {
1107- let dB = aH(invoke(aE, "getWarehouseREADONLY", [Y], nil))
1108- let ca = split_4C(dB, ":")
1109- let cT = split(ca[B], "_")
1110- let eM = cS(cT, eA, cO, cU)
1111- let dU = eM._1
1112- let eJ = eM._2
1113- let bC = eM._3
1114- let eK = eM._4
1115- let dJ = makeString_2C([ca[z], ca[A], makeString(eJ, "_"), ca[C], ca[D]], ":")
1116- let dL = aH(invoke(aE, "saveWarehouse", [dJ, Y], nil))
1117- let ey = aK(invoke(aE, "updateAccStats", [R, fraction(a, eK, am)], nil))
1118- let eC = fraction(bC, aX, al)
1119- let dW = max([eC, k])
1120- let do = (bC + dW)
1121- if ((do > dn))
1122- then throw((((((("Insufficient payment! Attached=" + aN(dn, 6)) + ", required=") + aN(bC, 6)) + "+") + aN(dW, 6)) + "(delivery fee)"))
1123- else {
1124- let az = if (((dn - do) > 0))
1125- then [ScriptTransfer(eo.caller, (dn - do), ag)]
1126- else nil
1127- let dX = (bC / 100)
1128- let eD = valueOrElse(getInteger(aa), 0)
1129- $Tuple2((((dU ++ az) :+ ScriptTransfer(aD, dX, ag)) :+ IntegerEntry(aa, (eD + dW))), $Tuple3(dL, er, ey))
1130- }
1131- }
1132- }
1133- }
1134- }
1135- else throw("Strict value is not equal to itself.")
1136- }
1137-
1138-
1139-
1140-@Callable(eo)
1141-func exchangeResources (cO) = {
1142- let er = bH()
1143- if ((er == er))
1144- then {
1145- let V = valueOrErrorMessage(getString(aE, S(toString(eo.caller))), "You don't have a duck staked")
1146- if ((size(eo.payments) != 1))
1147- then throw("exactly 1 payment must be attached")
1148- else {
1149- let dm = eo.payments[0]
1150- let dn = dm.amount
1151- if (if (!(isDefined(dm.assetId)))
1152- then true
1153- else (value(dm.assetId) != ag))
1154- then throw("USDT payments only!")
1155- else {
1156- let es = split(valueOrElse(getString(aE, W(V)), g), "_")
1157- if ((es[L] != "F"))
1158- then throw(("Duck location type should be Factory, but is " + es[L]))
1159- else {
1160- let et = bE(U(V))
1161- let cM = split(et[H], "_")
1162- let cT = split(et[I], "_")
1163- let eN = cW(cM, cT, cO)
1164- let ev = eN._1
1165- let eJ = eN._2
1166- let bC = eN._3
1167- let eO = eN._4
1168- if ((bC > dn))
1169- then throw(((("Insufficient payment! Attached=" + aN(dn, 6)) + ", required=") + aN(bC, 6)))
1170- else {
1171- let ew = makeString([et[G], makeString(ev, "_"), makeString(eJ, "_"), et[J]], ":")
1172- let ex = aH(invoke(aE, "updateBackpack", [V, ew], nil))
1173- let az = if (((dn - bC) > 0))
1174- then [ScriptTransfer(eo.caller, (dn - bC), ag)]
1161+ let ev = makeString([es[G], makeString(eu, "_"), makeString(eI, "_"), es[J]], ":")
1162+ let ew = aG(invoke(aD, "updateBackpack", [V, ev], nil))
1163+ let ay = if (((dm - bB) > 0))
1164+ then [ScriptTransfer(en.caller, (dm - bB), af)]
11751165 else nil
1176- let dX = (bC / 100)
1177- let ey = aK(invoke(aE, "updateDuckStats", [V, fraction(a, eO, am)], nil))
1178- $Tuple2((az :+ ScriptTransfer(aD, dX, ag)), $Tuple3(ex, er, ey))
1166+ let dW = (bB / 100)
1167+ let ex = aJ(invoke(aD, "updateDuckStats", [V, fraction(a, eN, al)], nil))
1168+ $Tuple2((ay :+ ScriptTransfer(aC, dW, af)), $Tuple3(ew, eq, ex))
11791169 }
11801170 }
11811171 }
11861176
11871177
11881178
1189-@Callable(eo)
1190-func exchangeResourcesDuckDelivery (cO) = if (!(ae))
1191- then throw("Delivery feature is turned off!")
1192- else {
1193- let er = bH()
1194- if ((er == er))
1195- then {
1196- let V = valueOrErrorMessage(getString(aE, S(toString(eo.caller))), "You don't have a duck staked")
1197- if ((size(eo.payments) != 1))
1198- then throw("exactly 1 payment must be attached")
1179+@Callable(en)
1180+func exchangeResourcesDuckDelivery (cN) = {
1181+ let eq = bG()
1182+ if ((eq == eq))
1183+ then {
1184+ let V = valueOrErrorMessage(getString(aD, S(toString(en.caller))), "You don't have a duck staked")
1185+ if ((size(en.payments) != 1))
1186+ then throw("exactly 1 payment must be attached")
1187+ else {
1188+ let dl = en.payments[0]
1189+ let dm = dl.amount
1190+ if (if (!(isDefined(dl.assetId)))
1191+ then true
1192+ else (value(dl.assetId) != af))
1193+ then throw("USDT payments only!")
1194+ else {
1195+ let es = bD(U(V))
1196+ let cL = split(es[H], "_")
1197+ let cS = split(es[I], "_")
1198+ let eO = cV(cL, cS, cN)
1199+ let eu = eO._1
1200+ let eI = eO._2
1201+ let bB = eO._3
1202+ let eN = eO._4
1203+ let eB = fraction(bB, aX, ak)
1204+ let dV = max([eB, l])
1205+ let dn = (bB + dV)
1206+ if ((dn > dm))
1207+ then throw((((((("Insufficient payment! Attached=" + aM(dm, 6)) + ", required=") + aM(bB, 6)) + "+") + aM(dV, 6)) + "(delivery fee)"))
1208+ else {
1209+ let ev = makeString([es[G], makeString(eu, "_"), makeString(eI, "_"), es[J]], ":")
1210+ let ew = aG(invoke(aD, "updateBackpack", [V, ev], nil))
1211+ let ay = if (((dm - dn) > 0))
1212+ then [ScriptTransfer(en.caller, (dm - dn), af)]
1213+ else nil
1214+ let dW = (bB / 100)
1215+ let ex = aJ(invoke(aD, "updateDuckStats", [V, fraction(a, eN, al)], nil))
1216+ let eC = valueOrElse(getInteger(aa), 0)
1217+ $Tuple2(((ay :+ ScriptTransfer(aC, dW, af)) :+ IntegerEntry(aa, (eC + dV))), $Tuple3(ew, eq, ex))
1218+ }
1219+ }
1220+ }
1221+ }
1222+ else throw("Strict value is not equal to itself.")
1223+ }
1224+
1225+
1226+
1227+@Callable(en)
1228+func exchangeResourcesLandDelivery (cN,Y) = {
1229+ let eq = bG()
1230+ if ((eq == eq))
1231+ then if ((size(en.payments) != 1))
1232+ then throw("exactly 1 payment must be attached")
1233+ else {
1234+ let dl = en.payments[0]
1235+ let dm = dl.amount
1236+ if (if (!(isDefined(dl.assetId)))
1237+ then true
1238+ else (value(dl.assetId) != af))
1239+ then throw("USDT payments only!")
11991240 else {
1200- let dm = eo.payments[0]
1201- let dn = dm.amount
1202- if (if (!(isDefined(dm.assetId)))
1203- then true
1204- else (value(dm.assetId) != ag))
1205- then throw("USDT payments only!")
1241+ let eD = en.caller
1242+ let R = toString(eD)
1243+ let eE = value(assetInfo(fromBase58String(Y)))
1244+ if (!(isDefined(getInteger(aD, P(Y)))))
1245+ then throw((("NFT " + eE.name) + " is not staked"))
12061246 else {
1207- let et = bE(U(V))
1208- let cM = split(et[H], "_")
1209- let cT = split(et[I], "_")
1210- let eP = cW(cM, cT, cO)
1211- let ev = eP._1
1212- let eJ = eP._2
1213- let bC = eP._3
1214- let eO = eP._4
1215- let eC = fraction(bC, aY, al)
1216- let dW = max([eC, l])
1217- let do = (bC + dW)
1218- if ((do > dn))
1219- then throw((((((("Insufficient payment! Attached=" + aN(dn, 6)) + ", required=") + aN(bC, 6)) + "+") + aN(dW, 6)) + "(delivery fee)"))
1247+ let eF = valueOrErrorMessage(getString(aD, N(Y)), (("NFT " + eE.name) + " is orphaned"))
1248+ if ((eF != R))
1249+ then throw((e + " is not yours"))
12201250 else {
1221- let ew = makeString([et[G], makeString(ev, "_"), makeString(eJ, "_"), et[J]], ":")
1222- let ex = aH(invoke(aE, "updateBackpack", [V, ew], nil))
1223- let az = if (((dn - do) > 0))
1224- then [ScriptTransfer(eo.caller, (dn - do), ag)]
1225- else nil
1226- let dX = (bC / 100)
1227- let ey = aK(invoke(aE, "updateDuckStats", [V, fraction(a, eO, am)], nil))
1228- let eD = valueOrElse(getInteger(aa), 0)
1229- $Tuple2(((az :+ ScriptTransfer(aD, dX, ag)) :+ IntegerEntry(aa, (eD + dW))), $Tuple3(ex, er, ey))
1251+ let dA = aG(invoke(aD, "getWarehouseREADONLY", [Y], nil))
1252+ let bZ = split_4C(dA, ":")
1253+ let cL = split(bZ[A], "_")
1254+ let cS = split(bZ[B], "_")
1255+ let eP = cV(cL, cS, cN)
1256+ let eu = eP._1
1257+ let eI = eP._2
1258+ let bB = eP._3
1259+ let eN = eP._4
1260+ let dI = makeString_2C([bZ[z], makeString(eu, "_"), makeString(eI, "_"), bZ[C], bZ[D]], ":")
1261+ let dK = aG(invoke(aD, "saveWarehouse", [dI, Y], nil))
1262+ let ex = aJ(invoke(aD, "updateAccStats", [R, fraction(a, eN, al)], nil))
1263+ let eB = fraction(bB, aX, ak)
1264+ let dV = max([eB, l])
1265+ let dn = (bB + dV)
1266+ if ((dn > dm))
1267+ then throw((((((("Insufficient payment! Attached=" + aM(dm, 6)) + ", required=") + aM(bB, 6)) + "+") + aM(dV, 6)) + "(delivery fee)"))
1268+ else {
1269+ let ay = if (((dm - dn) > 0))
1270+ then [ScriptTransfer(en.caller, (dm - dn), af)]
1271+ else nil
1272+ let dW = (bB / 100)
1273+ let eC = valueOrElse(getInteger(aa), 0)
1274+ $Tuple2(((ay :+ ScriptTransfer(aC, dW, af)) :+ IntegerEntry(aa, (eC + dV))), $Tuple3(dK, eq, ex))
1275+ }
12301276 }
12311277 }
12321278 }
12331279 }
1234- else throw("Strict value is not equal to itself.")
1235- }
1280+ else throw("Strict value is not equal to itself.")
1281+ }
12361282
12371283
12381284
1239-@Callable(eo)
1240-func exchangeResourcesLandDelivery (cO,Y) = if (!(ae))
1241- then throw("Delivery feature is turned off!")
1242- else {
1243- let er = bH()
1244- if ((er == er))
1245- then if ((size(eo.payments) != 1))
1246- then throw("exactly 1 payment must be attached")
1247- else {
1248- let dm = eo.payments[0]
1249- let dn = dm.amount
1250- if (if (!(isDefined(dm.assetId)))
1251- then true
1252- else (value(dm.assetId) != ag))
1253- then throw("USDT payments only!")
1254- else {
1255- let eE = eo.caller
1256- let R = toString(eE)
1257- let eF = value(assetInfo(fromBase58String(Y)))
1258- if (!(isDefined(getInteger(aE, P(Y)))))
1259- then throw((("NFT " + eF.name) + " is not staked"))
1260- else {
1261- let eG = valueOrErrorMessage(getString(aE, N(Y)), (("NFT " + eF.name) + " is orphaned"))
1262- if ((eG != R))
1263- then throw((e + " is not yours"))
1264- else {
1265- let dB = aH(invoke(aE, "getWarehouseREADONLY", [Y], nil))
1266- let ca = split_4C(dB, ":")
1267- let cM = split(ca[A], "_")
1268- let cT = split(ca[B], "_")
1269- let eQ = cW(cM, cT, cO)
1270- let ev = eQ._1
1271- let eJ = eQ._2
1272- let bC = eQ._3
1273- let eO = eQ._4
1274- let dJ = makeString_2C([ca[z], makeString(ev, "_"), makeString(eJ, "_"), ca[C], ca[D]], ":")
1275- let dL = aH(invoke(aE, "saveWarehouse", [dJ, Y], nil))
1276- let ey = aK(invoke(aE, "updateAccStats", [R, fraction(a, eO, am)], nil))
1277- let eC = fraction(bC, aY, al)
1278- let dW = max([eC, l])
1279- let do = (bC + dW)
1280- if ((do > dn))
1281- then throw((((((("Insufficient payment! Attached=" + aN(dn, 6)) + ", required=") + aN(bC, 6)) + "+") + aN(dW, 6)) + "(delivery fee)"))
1282- else {
1283- let az = if (((dn - do) > 0))
1284- then [ScriptTransfer(eo.caller, (dn - do), ag)]
1285- else nil
1286- let dX = (bC / 100)
1287- let eD = valueOrElse(getInteger(aa), 0)
1288- $Tuple2(((az :+ ScriptTransfer(aD, dX, ag)) :+ IntegerEntry(aa, (eD + dW))), $Tuple3(dL, er, ey))
1289- }
1290- }
1291- }
1292- }
1293- }
1294- else throw("Strict value is not equal to itself.")
1295- }
1296-
1297-
1298-
1299-@Callable(eo)
1300-func craftGoods (ec,ed) = {
1301- let er = bH()
1302- if ((er == er))
1303- then if ((size(eo.payments) != 1))
1285+@Callable(en)
1286+func craftGoods (eb,ec) = {
1287+ let eq = bG()
1288+ if ((eq == eq))
1289+ then if ((size(en.payments) != 1))
13041290 then throw("exactly 1 payment must be attached")
13051291 else {
1306- let dm = eo.payments[0]
1307- let dn = dm.amount
1308- if (if (!(isDefined(dm.assetId)))
1292+ let dl = en.payments[0]
1293+ let dm = dl.amount
1294+ if (if (!(isDefined(dl.assetId)))
13091295 then true
1310- else (value(dm.assetId) != ag))
1296+ else (value(dl.assetId) != af))
13111297 then throw("USDT payments only!")
1312- else if ((dn != al))
1313- then throw((("exactly " + aN(m, 6)) + " USDT must be attached as payment"))
1298+ else if ((dm != ak))
1299+ then throw((("exactly " + aM(m, 6)) + " USDT must be attached as payment"))
13141300 else {
1315- let V = valueOrErrorMessage(getString(aE, S(toString(eo.caller))), "You don't have a duck staked")
1316- let es = split(valueOrElse(getString(aE, W(V)), g), "_")
1317- if ((es[L] != "M"))
1318- then throw(("Duck location type should be Manufactory, but is " + es[L]))
1301+ let V = valueOrErrorMessage(getString(aD, S(toString(en.caller))), "You don't have a duck staked")
1302+ let er = split(valueOrElse(getString(aD, W(V)), g), "_")
1303+ if ((er[L] != "M"))
1304+ then throw(("Duck location type should be Manufactory, but is " + er[L]))
13191305 else {
1320- let eR = es[K]
1321- let et = bE(U(V))
1322- let cT = split(et[I], "_")
1323- let ea = if ((et[J] == ""))
1306+ let eQ = er[K]
1307+ let es = bD(U(V))
1308+ let cS = split(es[I], "_")
1309+ let dZ = if ((es[J] == ""))
13241310 then nil
1325- else split_4C(et[J], "_")
1326- let eS = dZ(cT, ea, eR, ec, ed)
1327- let eJ = eS._1
1328- let ej = eS._2
1329- let eT = eS._3
1330- let ew = makeString([et[G], et[H], makeString(eJ, "_"), makeString_2C(ej, "_")], ":")
1331- let eU = aH(invoke(aE, "updateBackpack", [V, ew], nil))
1332- let ey = aK(invoke(aE, "updateDuckStats", [V, fraction(b, eT, am)], nil))
1333- $Tuple2(nil, $Tuple3(eU, er, ey))
1311+ else split_4C(es[J], "_")
1312+ let eR = dY(cS, dZ, eQ, eb, ec)
1313+ let eI = eR._1
1314+ let ei = eR._2
1315+ let eS = eR._3
1316+ let ev = makeString([es[G], es[H], makeString(eI, "_"), makeString_2C(ei, "_")], ":")
1317+ let eT = aG(invoke(aD, "updateBackpack", [V, ev], nil))
1318+ let ex = aJ(invoke(aD, "updateDuckStats", [V, fraction(b, eS, al)], nil))
1319+ $Tuple2(nil, $Tuple3(eT, eq, ex))
13341320 }
13351321 }
13361322 }
13391325
13401326
13411327
1342-@Callable(eo)
1343-func craftGoodsDuckDelivery (ec,ed,eb) = if (!(ae))
1344- then throw("Delivery feature is turned off!")
1345- else {
1346- let er = bH()
1347- if ((er == er))
1348- then {
1349- let V = valueOrErrorMessage(getString(aE, S(toString(eo.caller))), "You don't have a duck staked")
1350- if ((size(eo.payments) != 1))
1351- then throw("exactly 1 payment must be attached")
1328+@Callable(en)
1329+func craftGoodsDuckDelivery (eb,ec,ea) = {
1330+ let eq = bG()
1331+ if ((eq == eq))
1332+ then {
1333+ let V = valueOrErrorMessage(getString(aD, S(toString(en.caller))), "You don't have a duck staked")
1334+ if ((size(en.payments) != 1))
1335+ then throw("exactly 1 payment must be attached")
1336+ else {
1337+ let dl = en.payments[0]
1338+ let dm = dl.amount
1339+ if (if (!(isDefined(dl.assetId)))
1340+ then true
1341+ else (value(dl.assetId) != af))
1342+ then throw("USDT payments only!")
1343+ else {
1344+ let es = bD(U(V))
1345+ let cS = split(es[I], "_")
1346+ let dZ = if ((es[J] == ""))
1347+ then nil
1348+ else split_4C(es[J], "_")
1349+ let eU = dY(cS, dZ, ea, eb, ec)
1350+ let eI = eU._1
1351+ let ei = eU._2
1352+ let eS = eU._3
1353+ let ev = makeString([es[G], es[H], makeString(eI, "_"), makeString_2C(ei, "_")], ":")
1354+ let ew = aG(invoke(aD, "updateBackpack", [V, ev], nil))
1355+ let ex = aJ(invoke(aD, "updateDuckStats", [V, fraction(b, eS, al)], nil))
1356+ let eB = fraction(ec, k, n)
1357+ let dV = max([eB, k])
1358+ let dn = (m + dV)
1359+ if ((dn > dm))
1360+ then throw((((((("Insufficient payment! Attached=" + aM(dm, 6)) + ", required=") + aM(m, 6)) + "+") + aM(dV, 6)) + "(delivery fee)"))
1361+ else {
1362+ let ay = if (((dm - dn) > 0))
1363+ then [ScriptTransfer(en.caller, (dm - dn), af)]
1364+ else nil
1365+ let eC = valueOrElse(getInteger(aa), 0)
1366+ $Tuple2((ay :+ IntegerEntry(aa, (eC + dV))), $Tuple3(ew, eq, ex))
1367+ }
1368+ }
1369+ }
1370+ }
1371+ else throw("Strict value is not equal to itself.")
1372+ }
1373+
1374+
1375+
1376+@Callable(en)
1377+func craftGoodsLandDelivery (eb,ec,Y,ea) = {
1378+ let eq = bG()
1379+ if ((eq == eq))
1380+ then if ((size(en.payments) != 1))
1381+ then throw("exactly 1 payment must be attached")
1382+ else {
1383+ let dl = en.payments[0]
1384+ let dm = dl.amount
1385+ if (if (!(isDefined(dl.assetId)))
1386+ then true
1387+ else (value(dl.assetId) != af))
1388+ then throw("USDT payments only!")
13521389 else {
1353- let dm = eo.payments[0]
1354- let dn = dm.amount
1355- if (if (!(isDefined(dm.assetId)))
1356- then true
1357- else (value(dm.assetId) != ag))
1358- then throw("USDT payments only!")
1390+ let eD = en.caller
1391+ let R = toString(eD)
1392+ let eE = value(assetInfo(fromBase58String(Y)))
1393+ if (!(isDefined(getInteger(aD, P(Y)))))
1394+ then throw((("NFT " + eE.name) + " is not staked"))
13591395 else {
1360- let et = bE(U(V))
1361- let cT = split(et[I], "_")
1362- let ea = if ((et[J] == ""))
1363- then nil
1364- else split_4C(et[J], "_")
1365- let eV = dZ(cT, ea, eb, ec, ed)
1366- let eJ = eV._1
1367- let ej = eV._2
1368- let eT = eV._3
1369- let ew = makeString([et[G], et[H], makeString(eJ, "_"), makeString_2C(ej, "_")], ":")
1370- let ex = aH(invoke(aE, "updateBackpack", [V, ew], nil))
1371- let ey = aK(invoke(aE, "updateDuckStats", [V, fraction(b, eT, am)], nil))
1372- let eC = fraction(ed, k, n)
1373- let dW = max([eC, k])
1374- let do = (m + dW)
1375- if ((do > dn))
1376- then throw((((((("Insufficient payment! Attached=" + aN(dn, 6)) + ", required=") + aN(m, 6)) + "+") + aN(dW, 6)) + "(delivery fee)"))
1396+ let eF = valueOrErrorMessage(getString(aD, N(Y)), (("NFT " + eE.name) + " is orphaned"))
1397+ if ((eF != R))
1398+ then throw((e + " is not yours"))
13771399 else {
1378- let az = if (((dn - do) > 0))
1379- then [ScriptTransfer(eo.caller, (dn - do), ag)]
1380- else nil
1381- let eD = valueOrElse(getInteger(aa), 0)
1382- $Tuple2((az :+ IntegerEntry(aa, (eD + dW))), $Tuple3(ex, er, ey))
1400+ let dA = aG(invoke(aD, "getWarehouseREADONLY", [Y], nil))
1401+ let bZ = split_4C(dA, ":")
1402+ let cS = split(bZ[B], "_")
1403+ let dZ = if ((bZ[C] == ""))
1404+ then nil
1405+ else split_4C(bZ[C], "_")
1406+ let eV = dY(cS, dZ, ea, eb, ec)
1407+ let eI = eV._1
1408+ let ei = eV._2
1409+ let eS = eV._3
1410+ let dI = makeString_2C([bZ[z], bZ[A], makeString(eI, "_"), makeString_2C(ei, "_"), bZ[D]], ":")
1411+ let dK = aG(invoke(aD, "saveWarehouse", [dI, Y], nil))
1412+ let ex = aJ(invoke(aD, "updateAccStats", [R, fraction(b, eS, al)], nil))
1413+ let eB = fraction(ec, k, n)
1414+ let dV = max([eB, k])
1415+ let dn = (m + dV)
1416+ if ((dn > dm))
1417+ then throw((((((("Insufficient payment! Attached=" + aM(dm, 6)) + ", required=") + aM(m, 6)) + "+") + aM(dV, 6)) + "(delivery fee)"))
1418+ else {
1419+ let ay = if (((dm - dn) > 0))
1420+ then [ScriptTransfer(en.caller, (dm - dn), af)]
1421+ else nil
1422+ let eC = valueOrElse(getInteger(aa), 0)
1423+ $Tuple2((ay :+ IntegerEntry(aa, (eC + dV))), $Tuple3(dK, eq, ex))
1424+ }
13831425 }
13841426 }
13851427 }
13861428 }
1387- else throw("Strict value is not equal to itself.")
1388- }
1429+ else throw("Strict value is not equal to itself.")
1430+ }
13891431
13901432
13911433
1392-@Callable(eo)
1393-func craftGoodsLandDelivery (ec,ed,Y,eb) = if (!(ae))
1394- then throw("Delivery feature is turned off!")
1395- else {
1396- let er = bH()
1397- if ((er == er))
1398- then if ((size(eo.payments) != 1))
1399- then throw("exactly 1 payment must be attached")
1400- else {
1401- let dm = eo.payments[0]
1402- let dn = dm.amount
1403- if (if (!(isDefined(dm.assetId)))
1404- then true
1405- else (value(dm.assetId) != ag))
1406- then throw("USDT payments only!")
1407- else {
1408- let eE = eo.caller
1409- let R = toString(eE)
1410- let eF = value(assetInfo(fromBase58String(Y)))
1411- if (!(isDefined(getInteger(aE, P(Y)))))
1412- then throw((("NFT " + eF.name) + " is not staked"))
1413- else {
1414- let eG = valueOrErrorMessage(getString(aE, N(Y)), (("NFT " + eF.name) + " is orphaned"))
1415- if ((eG != R))
1416- then throw((e + " is not yours"))
1417- else {
1418- let dB = aH(invoke(aE, "getWarehouseREADONLY", [Y], nil))
1419- let ca = split_4C(dB, ":")
1420- let cT = split(ca[B], "_")
1421- let ea = if ((ca[C] == ""))
1422- then nil
1423- else split_4C(ca[C], "_")
1424- let eW = dZ(cT, ea, eb, ec, ed)
1425- let eJ = eW._1
1426- let ej = eW._2
1427- let eT = eW._3
1428- let dJ = makeString_2C([ca[z], ca[A], makeString(eJ, "_"), makeString_2C(ej, "_"), ca[D]], ":")
1429- let dL = aH(invoke(aE, "saveWarehouse", [dJ, Y], nil))
1430- let ey = aK(invoke(aE, "updateAccStats", [R, fraction(b, eT, am)], nil))
1431- let eC = fraction(ed, k, n)
1432- let dW = max([eC, k])
1433- let do = (m + dW)
1434- if ((do > dn))
1435- then throw((((((("Insufficient payment! Attached=" + aN(dn, 6)) + ", required=") + aN(m, 6)) + "+") + aN(dW, 6)) + "(delivery fee)"))
1436- else {
1437- let az = if (((dn - do) > 0))
1438- then [ScriptTransfer(eo.caller, (dn - do), ag)]
1439- else nil
1440- let eD = valueOrElse(getInteger(aa), 0)
1441- $Tuple2((az :+ IntegerEntry(aa, (eD + dW))), $Tuple3(dL, er, ey))
1442- }
1443- }
1444- }
1445- }
1446- }
1447- else throw("Strict value is not equal to itself.")
1448- }
1449-
1450-
1451-
1452-@Callable(eo)
1453-func setWarehouseOrder (eX,Y) = {
1454- let eE = eo.originCaller
1455- let R = toString(eE)
1456- let eU = if ((eE != aD))
1457- then bG()
1434+@Callable(en)
1435+func setWarehouseOrder (eW,Y) = {
1436+ let eD = en.originCaller
1437+ let R = toString(eD)
1438+ let eT = if ((eD != aC))
1439+ then bF()
14581440 else false
1459- let eF = value(assetInfo(fromBase58String(Y)))
1460- if (!(isDefined(getInteger(aE, P(Y)))))
1461- then throw((("NFT " + eF.name) + " is not staked"))
1441+ let eE = value(assetInfo(fromBase58String(Y)))
1442+ if (!(isDefined(getInteger(aD, P(Y)))))
1443+ then throw((("NFT " + eE.name) + " is not staked"))
14621444 else {
1463- let eG = valueOrErrorMessage(getString(aE, N(Y)), (("NFT " + eF.name) + " is orphaned"))
1464- if (if ((eE != aD))
1465- then (eG != R)
1445+ let eF = valueOrErrorMessage(getString(aD, N(Y)), (("NFT " + eE.name) + " is orphaned"))
1446+ if (if ((eD != aC))
1447+ then (eF != R)
14661448 else false)
14671449 then throw((e + " is not yours"))
14681450 else {
1469- let eY = split_4C(eX, ":")
1470- let dB = aH(invoke(aE, "getWarehouseREADONLY", [Y], nil))
1471- let ca = split_4C(dB, ":")
1472- let eZ = split(ca[D], "_")
1473- let fa = parseIntValue(eZ[F])
1474- let bg = X(Y)
1475- let cb = bf(bg)
1476- let ep = bZ(ca, cb, eY)
1477- let fb = ep._4
1478- let fc = ep._5
1479- let fd = ep._7
1480- let fe = (fb + fc)
1481- let ff = ((fa - fd) - fe)
1482- if ((0 > ff))
1483- then throw((((((("Attempt to reserve " + toString(fb)) + " space for buy orders, and ") + toString(fc)) + " space for sell orders (and occupied=") + toString(fd)) + "), leads to negative free space"))
1451+ let eX = split_4C(eW, ":")
1452+ let dA = aG(invoke(aD, "getWarehouseREADONLY", [Y], nil))
1453+ let bZ = split_4C(dA, ":")
1454+ let eY = split(bZ[D], "_")
1455+ let eZ = parseIntValue(eY[F])
1456+ let bf = X(Y)
1457+ let ca = be(bf)
1458+ let eo = bY(bZ, ca, eX)
1459+ let fa = eo._4
1460+ let fb = eo._5
1461+ let fc = eo._7
1462+ let fd = (fa + fb)
1463+ let fe = ((eZ - fc) - fd)
1464+ if ((0 > fe))
1465+ then throw((((((("Attempt to reserve " + toString(fa)) + " space for buy orders, and ") + toString(fb)) + " space for sell orders (and occupied=") + toString(fc)) + "), leads to negative free space"))
14841466 else {
1485- let dJ = makeString_2C([ca[z], makeString(ep._1, "_"), makeString(ep._2, "_"), makeString_2C(ep._3, "_"), toString(fe)], ":")
1486- let dL = aH(invoke(aE, "saveWarehouse", [dJ, Y], nil))
1487- let fg = ep._6
1488- let fh = if ((fg > 0))
1489- then if ((size(eo.payments) != 1))
1467+ let dI = makeString_2C([bZ[z], makeString(eo._1, "_"), makeString(eo._2, "_"), makeString_2C(eo._3, "_"), toString(fd)], ":")
1468+ let dK = aG(invoke(aD, "saveWarehouse", [dI, Y], nil))
1469+ let ff = eo._6
1470+ let fg = if ((ff > 0))
1471+ then if ((size(en.payments) != 1))
14901472 then throw("exactly 1 payment must be attached")
14911473 else {
1492- let dm = eo.payments[0]
1493- let dn = dm.amount
1494- let fi = valueOrErrorMessage(dm.assetId, "WAVES can't be used as payment")
1495- if ((fi != ag))
1474+ let dl = en.payments[0]
1475+ let dm = dl.amount
1476+ let fh = valueOrErrorMessage(dl.assetId, "WAVES can't be used as payment")
1477+ if ((fh != af))
14961478 then throw("USDT payments only!")
1497- else if ((dn != fg))
1498- then throw(("Payment needed is " + toString(fg)))
1499- else [StringEntry(bg, eX)]
1479+ else if ((dm != ff))
1480+ then throw(("Payment needed is " + toString(ff)))
1481+ else [StringEntry(bf, eW)]
15001482 }
1501- else if ((fg == 0))
1502- then if ((size(eo.payments) != 0))
1483+ else if ((ff == 0))
1484+ then if ((size(en.payments) != 0))
15031485 then throw("No payments needed")
1504- else [StringEntry(bg, eX)]
1505- else if ((size(eo.payments) != 0))
1486+ else [StringEntry(bf, eW)]
1487+ else if ((size(en.payments) != 0))
15061488 then throw("No payments needed")
1507- else [ScriptTransfer(addressFromStringValue(eG), -(fg), ag), StringEntry(bg, eX)]
1508- $Tuple2(fh, $Tuple2(eU, dL))
1489+ else [ScriptTransfer(addressFromStringValue(eF), -(ff), af), StringEntry(bf, eW)]
1490+ $Tuple2(fg, $Tuple2(eT, dK))
15091491 }
15101492 }
15111493 }
15131495
15141496
15151497
1516-@Callable(eo)
1517-func acceptWarehouseOrder (ds,dr,V) = {
1518- let er = bH()
1519- if ((er == er))
1498+@Callable(en)
1499+func acceptWarehouseOrder (dr,dq,V) = {
1500+ let eq = bG()
1501+ if ((eq == eq))
15201502 then {
1521- let dg = eo.originCaller
1522- let db = toString(dg)
1523- let fj = valueOrErrorMessage(getString(aE, S(db)), "You don't have a duck staked")
1524- let es = valueOrElse(getString(aE, W(fj)), g)
1525- let fk = split(value(es), "_")
1526- if ((fk[L] != "L"))
1527- then throw((("Duck location type is " + fk[L]) + ", but should be L"))
1528- else if ((fj != V))
1529- then throw(((("Your staked duck is " + fj) + ", but passed ") + V))
1503+ let df = en.originCaller
1504+ let da = toString(df)
1505+ let fi = valueOrErrorMessage(getString(aD, S(da)), "You don't have a duck staked")
1506+ let er = valueOrElse(getString(aD, W(fi)), g)
1507+ let fj = split(value(er), "_")
1508+ if ((fj[L] != "L"))
1509+ then throw((("Duck location type is " + fj[L]) + ", but should be L"))
1510+ else if ((fi != V))
1511+ then throw(((("Your staked duck is " + fi) + ", but passed ") + V))
15301512 else {
1531- let bF = U(V)
1532- let et = bE(bF)
1533- let dt = split(et[H], "_")
1534- let du = split(et[I], "_")
1535- let dv = if ((et[J] == ""))
1513+ let bE = U(V)
1514+ let es = bD(bE)
1515+ let ds = split(es[H], "_")
1516+ let dt = split(es[I], "_")
1517+ let du = if ((es[J] == ""))
15361518 then nil
1537- else split_4C(et[J], "_")
1538- let fl = dq(dr, db, ds, dt, du, dv)
1539- let fm = fl._1
1540- let fn = fl._2
1541- let fo = fl._3
1542- let fp = fl._4
1543- let da = fl._5
1544- let di = fl._6
1545- let fq = fl._7
1546- let dk = fl._8
1547- let fr = fl._9
1548- let dM = fl._10
1549- let fs = [fm, cZ(da, db, 0)]
1550- let ft = dh(di, eo.payments, dk, 0)
1551- let fu = makeString_2C([et[G], makeString(fn, "_"), makeString(fo, "_"), makeString_2C(fp, "_")], ":")
1552- let fv = aH(invoke(aE, "updateBackpack", [V, fu], nil))
1553- let fw = aK(invoke(aE, "updateDuckStats", [V, fraction(d, fq, am)], nil))
1554- $Tuple2((fs ++ ft), $Tuple5(er, fr, fv, fw, dM))
1519+ else split_4C(es[J], "_")
1520+ let fk = dp(dq, da, dr, ds, dt, du)
1521+ let fl = fk._1
1522+ let fm = fk._2
1523+ let fn = fk._3
1524+ let fo = fk._4
1525+ let cZ = fk._5
1526+ let dh = fk._6
1527+ let fp = fk._7
1528+ let dj = fk._8
1529+ let fq = fk._9
1530+ let dL = fk._10
1531+ let fr = [fl, cY(cZ, da, 0)]
1532+ let fs = dg(dh, en.payments, dj, 0)
1533+ let ft = makeString_2C([es[G], makeString(fm, "_"), makeString(fn, "_"), makeString_2C(fo, "_")], ":")
1534+ let fu = aG(invoke(aD, "updateBackpack", [V, ft], nil))
1535+ let fv = aJ(invoke(aD, "updateDuckStats", [V, fraction(d, fp, al)], nil))
1536+ $Tuple2((fr ++ fs), $Tuple5(eq, fq, fu, fv, dL))
15551537 }
15561538 }
15571539 else throw("Strict value is not equal to itself.")
15591541
15601542
15611543
1562-@Callable(eo)
1563-func acceptShopOrderDuckDelivery (fx,dr) = if (!(ae))
1564- then throw("Delivery feature is turned off!")
1565- else {
1566- let er = bH()
1567- if ((er == er))
1568- then {
1569- let dg = eo.originCaller
1570- let db = toString(dg)
1571- let V = valueOrErrorMessage(getString(aE, S(db)), "You don't have a duck staked")
1572- let bF = U(V)
1573- let et = bE(bF)
1574- let dt = split(et[H], "_")
1575- let du = split(et[I], "_")
1576- let dv = if ((et[J] == ""))
1577- then nil
1578- else split_4C(et[J], "_")
1579- let fy = dq(dr, db, fx, dt, du, dv)
1580- let fm = fy._1
1581- let fn = fy._2
1582- let fo = fy._3
1583- let fp = fy._4
1584- let da = fy._5
1585- let di = fy._6
1586- let fq = fy._7
1587- let dk = fy._8
1588- let fr = fy._9
1589- let dM = fy._10
1590- let fz = fraction((di + da), aX, al)
1591- let fA = max([fz, k])
1592- let dl = fraction(fA, di, (di + da))
1593- let dc = (fA - dl)
1594- let eD = valueOrElse(getInteger(aa), 0)
1595- let fs = [fm, cZ(da, db, dc)]
1596- let ft = dh(di, eo.payments, dk, dl)
1597- let fu = makeString_2C([et[G], makeString(fn, "_"), makeString(fo, "_"), makeString_2C(fp, "_")], ":")
1598- let fv = aH(invoke(aE, "updateBackpack", [V, fu], nil))
1599- let fw = aK(invoke(aE, "updateDuckStats", [V, fraction(d, fq, am)], nil))
1600- $Tuple2(((fs ++ ft) :+ IntegerEntry(aa, (eD + fA))), $Tuple5(er, fr, fv, fw, dM))
1601- }
1602- else throw("Strict value is not equal to itself.")
1603- }
1544+@Callable(en)
1545+func acceptShopOrderDuckDelivery (fw,dq) = {
1546+ let eq = bG()
1547+ if ((eq == eq))
1548+ then {
1549+ let df = en.originCaller
1550+ let da = toString(df)
1551+ let V = valueOrErrorMessage(getString(aD, S(da)), "You don't have a duck staked")
1552+ let bE = U(V)
1553+ let es = bD(bE)
1554+ let ds = split(es[H], "_")
1555+ let dt = split(es[I], "_")
1556+ let du = if ((es[J] == ""))
1557+ then nil
1558+ else split_4C(es[J], "_")
1559+ let fx = dp(dq, da, fw, ds, dt, du)
1560+ let fl = fx._1
1561+ let fm = fx._2
1562+ let fn = fx._3
1563+ let fo = fx._4
1564+ let cZ = fx._5
1565+ let dh = fx._6
1566+ let fp = fx._7
1567+ let dj = fx._8
1568+ let fq = fx._9
1569+ let dL = fx._10
1570+ let fy = fraction((dh + cZ), aW, ak)
1571+ let fz = max([fy, k])
1572+ let dk = fraction(fz, dh, (dh + cZ))
1573+ let db = (fz - dk)
1574+ let eC = valueOrElse(getInteger(aa), 0)
1575+ let fr = [fl, cY(cZ, da, db)]
1576+ let fs = dg(dh, en.payments, dj, dk)
1577+ let ft = makeString_2C([es[G], makeString(fm, "_"), makeString(fn, "_"), makeString_2C(fo, "_")], ":")
1578+ let fu = aG(invoke(aD, "updateBackpack", [V, ft], nil))
1579+ let fv = aJ(invoke(aD, "updateDuckStats", [V, fraction(d, fp, al)], nil))
1580+ $Tuple2(((fr ++ fs) :+ IntegerEntry(aa, (eC + fz))), $Tuple5(eq, fq, fu, fv, dL))
1581+ }
1582+ else throw("Strict value is not equal to itself.")
1583+ }
16041584
16051585
16061586
1607-@Callable(eo)
1608-func acceptShopOrderLandDelivery (fx,dr,fB) = if (!(ae))
1609- then throw("Delivery feature is turned off!")
1610- else {
1611- let er = bH()
1612- if ((er == er))
1613- then {
1614- let dg = eo.originCaller
1615- let db = toString(dg)
1616- let eF = value(assetInfo(fromBase58String(fB)))
1617- if (!(isDefined(getInteger(aE, P(fB)))))
1618- then throw((("NFT " + eF.name) + " is not staked"))
1619- else {
1620- let eG = valueOrErrorMessage(getString(aE, N(fB)), (("NFT " + eF.name) + " is orphaned"))
1621- if ((eG != db))
1622- then throw((e + " is not yours"))
1623- else {
1624- let dB = aH(invoke(aE, "getWarehouseREADONLY", [fB], nil))
1625- let ca = split_4C(dB, ":")
1626- let cM = split(ca[A], "_")
1627- let cT = split(ca[B], "_")
1628- let ea = if ((ca[C] == ""))
1629- then nil
1630- else split_4C(ca[C], "_")
1631- let fC = dq(dr, db, fx, cM, cT, ea)
1632- let fm = fC._1
1633- let fn = fC._2
1634- let fo = fC._3
1635- let fp = fC._4
1636- let da = fC._5
1637- let di = fC._6
1638- let fq = fC._7
1639- let dk = fC._8
1640- let fr = fC._9
1641- let dM = fC._10
1642- let fz = fraction((di + da), aX, al)
1643- let fA = max([fz, k])
1644- let dl = fraction(fA, di, (di + da))
1645- let dc = (fA - dl)
1646- let eD = valueOrElse(getInteger(aa), 0)
1647- let fs = [fm, cZ(da, db, dc)]
1648- let ft = dh(di, eo.payments, dk, dl)
1649- let dJ = makeString_2C([ca[z], makeString(fn, "_"), makeString(fo, "_"), makeString(fp, "_"), ca[D]], ":")
1650- let dL = aH(invoke(aE, "saveWarehouse", [dJ, fB], nil))
1651- let ey = aK(invoke(aE, "updateAccStats", [db, fraction(d, fq, am)], nil))
1652- $Tuple2(((fs ++ ft) :+ IntegerEntry(aa, (eD + fA))), $Tuple5(er, fr, dL, ey, dM))
1653- }
1654- }
1655- }
1656- else throw("Strict value is not equal to itself.")
1657- }
1587+@Callable(en)
1588+func acceptShopOrderLandDelivery (fw,dq,fA) = {
1589+ let eq = bG()
1590+ if ((eq == eq))
1591+ then {
1592+ let df = en.originCaller
1593+ let da = toString(df)
1594+ let eE = value(assetInfo(fromBase58String(fA)))
1595+ if (!(isDefined(getInteger(aD, P(fA)))))
1596+ then throw((("NFT " + eE.name) + " is not staked"))
1597+ else {
1598+ let eF = valueOrErrorMessage(getString(aD, N(fA)), (("NFT " + eE.name) + " is orphaned"))
1599+ if ((eF != da))
1600+ then throw((e + " is not yours"))
1601+ else {
1602+ let dA = aG(invoke(aD, "getWarehouseREADONLY", [fA], nil))
1603+ let bZ = split_4C(dA, ":")
1604+ let cL = split(bZ[A], "_")
1605+ let cS = split(bZ[B], "_")
1606+ let dZ = if ((bZ[C] == ""))
1607+ then nil
1608+ else split_4C(bZ[C], "_")
1609+ let fB = dp(dq, da, fw, cL, cS, dZ)
1610+ let fl = fB._1
1611+ let fm = fB._2
1612+ let fn = fB._3
1613+ let fo = fB._4
1614+ let cZ = fB._5
1615+ let dh = fB._6
1616+ let fp = fB._7
1617+ let dj = fB._8
1618+ let fq = fB._9
1619+ let dL = fB._10
1620+ let fy = fraction((dh + cZ), aW, ak)
1621+ let fz = max([fy, k])
1622+ let dk = fraction(fz, dh, (dh + cZ))
1623+ let db = (fz - dk)
1624+ let eC = valueOrElse(getInteger(aa), 0)
1625+ let fr = [fl, cY(cZ, da, db)]
1626+ let fs = dg(dh, en.payments, dj, dk)
1627+ let dI = makeString_2C([bZ[z], makeString(fm, "_"), makeString(fn, "_"), makeString(fo, "_"), bZ[D]], ":")
1628+ let dK = aG(invoke(aD, "saveWarehouse", [dI, fA], nil))
1629+ let ex = aJ(invoke(aD, "updateAccStats", [da, fraction(d, fp, al)], nil))
1630+ $Tuple2(((fr ++ fs) :+ IntegerEntry(aa, (eC + fz))), $Tuple5(eq, fq, dK, ex, dL))
1631+ }
1632+ }
1633+ }
1634+ else throw("Strict value is not equal to itself.")
1635+ }
16581636
16591637
16601638
1661-@Callable(eo)
1662-func sellProductsToES (cO) = {
1663- let er = bH()
1664- if ((er == er))
1665- then if ((size(eo.payments) != 0))
1639+@Callable(en)
1640+func sellProductsToES (cN) = {
1641+ let eq = bG()
1642+ if ((eq == eq))
1643+ then if ((size(en.payments) != 0))
16661644 then throw("No payments needed")
16671645 else {
1668- let V = valueOrErrorMessage(getString(aE, S(toString(eo.caller))), "You don't have a duck staked")
1669- let es = split(valueOrElse(getString(aE, W(V)), g), "_")
1670- if ((es[L] != "A"))
1671- then throw(("Duck location type should be Airport, but is " + es[L]))
1646+ let V = valueOrErrorMessage(getString(aD, S(toString(en.caller))), "You don't have a duck staked")
1647+ let er = split(valueOrElse(getString(aD, W(V)), g), "_")
1648+ if ((er[L] != "A"))
1649+ then throw(("Duck location type should be Airport, but is " + er[L]))
16721650 else {
1673- let et = bE(U(V))
1674- let ea = if ((et[J] == ""))
1651+ let es = bD(U(V))
1652+ let dZ = if ((es[J] == ""))
16751653 then nil
1676- else split_4C(et[J], "_")
1677- let fD = Z()
1678- let fE = getString(fD)
1679- let fF = if (isDefined(fE))
1680- then split_4C(value(fE), "_")
1654+ else split_4C(es[J], "_")
1655+ let fC = Z()
1656+ let fD = getString(fC)
1657+ let fE = if (isDefined(fD))
1658+ then split_4C(value(fD), "_")
16811659 else nil
1682- func fG (bJ,fH) = {
1683- let bL = bJ._1
1684- let ed = if ((size(cO) > bL))
1685- then cO[bL]
1660+ func fF (bI,fG) = {
1661+ let bK = bI._1
1662+ let ec = if ((size(cN) > bK))
1663+ then cN[bK]
16861664 else 0
1687- if ((0 > ed))
1665+ if ((0 > ec))
16881666 then throw("Quantity cannot be negative")
16891667 else {
1690- let ad = split(fH, "_")
1668+ let ad = split(fG, "_")
16911669 if ((size(ad) != x))
1692- then throw(("Fatal: unknown recipe: " + fH))
1670+ then throw(("Fatal: unknown recipe: " + fG))
16931671 else {
1694- let fI = (i * y)
1695- let fJ = if ((size(fF) > bL))
1696- then parseIntValue(fF[bL])
1672+ let fH = (i * y)
1673+ let fI = if ((size(fE) > bK))
1674+ then parseIntValue(fE[bK])
16971675 else 0
1698- let fK = (fI - fJ)
1699- if ((ed > fK))
1700- then throw(((("Warehouse can buy only " + toString(fK)) + " of ") + r[bL]))
1676+ let fJ = (fH - fI)
1677+ if ((ec > fJ))
1678+ then throw(((("Warehouse can buy only " + toString(fJ)) + " of ") + r[bK]))
17011679 else {
1702- let eK = ac(ad)
1703- let fL = fraction((eK * j), h, (am * y))
1704- let fM = if ((size(ea) > bL))
1705- then parseIntValue(ea[bL])
1680+ let eJ = ac(ad)
1681+ let fK = fraction((eJ * j), h, (al * y))
1682+ let fL = if ((size(dZ) > bK))
1683+ then parseIntValue(dZ[bK])
17061684 else 0
1707- if ((ed > fM))
1708- then throw(((("You have only " + toString(fM)) + " of ") + r[bL]))
1709- else $Tuple5((bL + 1), (bJ._2 + (fL * ed)), (bJ._3 :+ toString((fM - ed))), (bJ._4 :+ toString((fJ + ed))), (bJ._5 + (eK * ed)))
1685+ if ((ec > fL))
1686+ then throw(((("You have only " + toString(fL)) + " of ") + r[bK]))
1687+ else $Tuple5((bK + 1), (bI._2 + (fK * ec)), (bI._3 :+ toString((fL - ec))), (bI._4 :+ toString((fI + ec))), (bI._5 + (eJ * ec)))
17101688 }
17111689 }
17121690 }
17131691 }
17141692
1715- let en = {
1716- let cn = u
1717- let co = size(cn)
1718- let cp = $Tuple5(0, 0, nil, nil, 0)
1719- func cq (cr,cs) = if ((cs >= co))
1720- then cr
1721- else fG(cr, cn[cs])
1693+ let em = {
1694+ let cm = u
1695+ let cn = size(cm)
1696+ let co = $Tuple5(0, 0, nil, nil, 0)
1697+ func cp (cq,cr) = if ((cr >= cn))
1698+ then cq
1699+ else fF(cq, cm[cr])
17221700
1723- func ct (cr,cs) = if ((cs >= co))
1724- then cr
1701+ func cs (cq,cr) = if ((cr >= cn))
1702+ then cq
17251703 else throw("List size exceeds 50")
17261704
1727- ct(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cp, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
1705+ cs(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(co, 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)
17281706 }
1729- let fu = makeString_2C([et[G], et[H], et[I], makeString_2C(en._3, "_")], ":")
1730- let fv = aH(invoke(aE, "updateBackpack", [V, fu], nil))
1731- let ey = aK(invoke(aE, "updateDuckStats", [V, fraction(c, en._5, (am * 10))], nil))
1732- $Tuple2([StringEntry(fD, makeString_2C(en._4, "_")), ScriptTransfer(eo.caller, en._2, ag)], $Tuple3(fv, er, ey))
1707+ let ft = makeString_2C([es[G], es[H], es[I], makeString_2C(em._3, "_")], ":")
1708+ let fu = aG(invoke(aD, "updateBackpack", [V, ft], nil))
1709+ let ex = aJ(invoke(aD, "updateDuckStats", [V, fraction(c, em._5, (al * 10))], nil))
1710+ $Tuple2([StringEntry(fC, makeString_2C(em._4, "_")), ScriptTransfer(en.caller, em._2, af)], $Tuple3(fu, eq, ex))
17331711 }
17341712 }
17351713 else throw("Strict value is not equal to itself.")
17371715
17381716
17391717
1740-@Callable(eo)
1741-func updateEsStorage (fN) = if ((eo.caller != aE))
1718+@Callable(en)
1719+func updateEsStorage (fM) = if ((en.caller != aD))
17421720 then throw("Permission denied")
1743- else $Tuple2([StringEntry(Z(), fN)], fN)
1721+ else $Tuple2([StringEntry(Z(), fM)], fM)
17441722
17451723
17461724
1747-@Callable(eo)
1748-func updateDeliveryLocked (fO) = if ((eo.caller != aE))
1725+@Callable(en)
1726+func updateDeliveryLocked (fN) = if ((en.caller != aD))
17491727 then throw("Permission denied")
1750- else $Tuple2([IntegerEntry(ab, fO)], fO)
1728+ else $Tuple2([IntegerEntry(ab, fN)], fN)
17511729
17521730
17531731
1754-@Callable(eo)
1755-func sendDeliveryReward (R) = if ((eo.caller != aE))
1732+@Callable(en)
1733+func sendDeliveryReward (R) = if ((en.caller != aD))
17561734 then throw("Permission denied")
17571735 else {
1758- let eD = valueOrElse(getInteger(aa), 0)
1759- let fP = valueOrElse(getInteger(ab), 0)
1760- let fQ = (k * o)
1761- let fR = invoke(aG, "sendAcres", [R, fQ], nil)
1762- $Tuple2([IntegerEntry(aa, (eD - k)), IntegerEntry(ab, (fP - k))], fR)
1736+ let eC = valueOrElse(getInteger(aa), 0)
1737+ let fO = valueOrElse(getInteger(ab), 0)
1738+ let fP = (k * o)
1739+ let fQ = invoke(aF, "sendAcres", [R, fP], nil)
1740+ $Tuple2([IntegerEntry(aa, (eC - k)), IntegerEntry(ab, (fO - k))], fQ)
17631741 }
17641742
17651743
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = 10000
55
66 let b = 10000
77
88 let c = 10000
99
1010 let d = 10000
1111
1212 let e = "LAND"
1313
1414 let f = 6
1515
1616 let g = "Africa_F_Africa"
1717
1818 let h = 39637
1919
2020 let i = 10
2121
2222 let j = 4
2323
2424 let k = 50000
2525
2626 let l = 75000
2727
2828 let m = 1000000
2929
3030 let n = 10
3131
3232 let o = 10
3333
3434 let p = ["Oil", "Ore", "Wood", "Sand", "Clay", "Organic"]
3535
3636 let q = ["Fuel", "Metal", "Plank", "Glass", "Plastic", "Protein"]
3737
3838 let r = ["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"]
3939
4040 let s = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
4141
4242 let t = 10000000
4343
4444 let u = ["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_"]
4545
4646 let v = 6
4747
4848 let w = 7
4949
5050 let x = 11
5151
5252 let y = 10
5353
5454 let z = 0
5555
5656 let A = 1
5757
5858 let B = 2
5959
6060 let C = 3
6161
6262 let D = 4
6363
6464 let E = 0
6565
6666 let F = 3
6767
6868 let G = 0
6969
7070 let H = 1
7171
7272 let I = 2
7373
7474 let J = 3
7575
7676 let K = 0
7777
7878 let L = 1
7979
8080 let M = 2
8181
8282 func N (O) = ("no_" + O)
8383
8484
8585 func P (O) = ("st_" + O)
8686
8787
8888 func Q (R) = ("accRefBy_" + R)
8989
9090
9191 func S (T) = ("stakedDuckByOwner_" + T)
9292
9393
9494 func U (V) = ("backPack_" + V)
9595
9696
9797 func W (V) = ("duckLocation_" + V)
9898
9999
100100 func X (Y) = ("landOrder_" + Y)
101101
102102
103103 func Z () = "emergencyWarehouseProducts"
104104
105105
106106 let aa = "deliveryFund"
107107
108108 let ab = "deliveryLocked"
109109
110110 func ac (ad) = (parseIntValue(ad[v]) * t)
111111
112112
113-let ae = true
113+let ae = take(drop(this.bytes, 1), 1)
114114
115-let af = take(drop(this.bytes, 1), 1)
116-
117-let ag = {
118- let ah = af
119- if ((base58'2W' == ah))
115+let af = {
116+ let ag = ae
117+ if ((base58'2W' == ag))
120118 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
121- else if ((base58'2T' == ah))
119+ else if ((base58'2T' == ag))
122120 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
123121 else throw("Unknown chain")
124122 }
125123
126-let ai = {
127- let ah = af
128- if ((base58'2W' == ah))
124+let ah = {
125+ let ag = ae
126+ if ((base58'2W' == ag))
129127 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
130- else if ((base58'2T' == ah))
128+ else if ((base58'2T' == ag))
131129 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
132130 else throw("Unknown chain")
133131 }
134132
135-let aj = "__"
133+let ai = "__"
136134
137-let ak = 100000
135+let aj = 100000
138136
139-let al = 1000000
137+let ak = 1000000
140138
141-let am = 100000000
139+let al = 100000000
142140
143-let an = 10000000000
141+let am = 10000000000
144142
145-let ao = 100000
143+let an = 100000
146144
147-let ap = [0, 1, 2, 3, 4, 5]
145+let ao = [0, 1, 2, 3, 4, 5]
148146
149-func aq (ar,as) = valueOrErrorMessage(getString(ar, as), makeString(["mandatory ", toString(ar), ".", as, " is not defined"], ""))
147+func ap (aq,ar) = valueOrErrorMessage(getString(aq, ar), makeString(["mandatory ", toString(aq), ".", ar, " is not defined"], ""))
150148
151149
152-let at = 1
150+let as = 1
153151
154-let au = 6
152+let at = 6
155153
156-let av = 8
154+let au = 8
157155
158-func aw () = "%s__restConfig"
156+func av () = "%s__restConfig"
159157
160158
161-func ax () = "%s__restAddr"
159+func aw () = "%s__restAddr"
162160
163161
164-func ay (az) = split_4C(aq(az, aw()), aj)
162+func ax (ay) = split_4C(ap(ay, av()), ai)
165163
166164
167-func aA (aB,aC) = valueOrErrorMessage(addressFromString(aB[aC]), ("Rest cfg doesn't contain address at index " + toString(aC)))
165+func az (aA,aB) = valueOrErrorMessage(addressFromString(aA[aB]), ("Rest cfg doesn't contain address at index " + toString(aB)))
168166
169167
170-let aD = addressFromStringValue(valueOrElse(getString(this, ax()), ai))
168+let aC = addressFromStringValue(valueOrElse(getString(this, aw()), ah))
171169
172-let aB = ay(aD)
170+let aA = ax(aC)
173171
174-let aE = aA(aB, at)
172+let aD = az(aA, as)
175173
176-let aF = aA(aB, au)
174+let aE = az(aA, at)
177175
178-let aG = aA(aB, av)
176+let aF = az(aA, au)
179177
180-func aH (aI) = {
181- let ah = aI
182- if ($isInstanceOf(ah, "String"))
178+func aG (aH) = {
179+ let ag = aH
180+ if ($isInstanceOf(ag, "String"))
183181 then {
184- let aJ = ah
185- aJ
182+ let aI = ag
183+ aI
186184 }
187185 else throw("fail to cast into String")
188186 }
189187
190188
191-func aK (aI) = {
192- let ah = aI
193- if ($isInstanceOf(ah, "Int"))
189+func aJ (aH) = {
190+ let ag = aH
191+ if ($isInstanceOf(ag, "Int"))
194192 then {
195- let aL = ah
196- aL
193+ let aK = ag
194+ aK
197195 }
198196 else throw("fail to cast into Int")
199197 }
200198
201199
202-func aM () = "contractsBlocked"
200+func aL () = "contractsBlocked"
203201
204202
205-func aN (aO,aP) = {
206- let aQ = pow(10, 0, aP, 0, 0, DOWN)
207- let aR = toString((aO % aQ))
208- let aS = drop(toString(aQ), (1 + size(aR)))
209- (((toString((aO / aQ)) + ".") + aS) + aR)
203+func aM (aN,aO) = {
204+ let aP = pow(10, 0, aO, 0, 0, DOWN)
205+ let aQ = toString((aN % aP))
206+ let aR = drop(toString(aP), (1 + size(aQ)))
207+ (((toString((aN / aP)) + ".") + aR) + aQ)
210208 }
211209
212210
213-let aT = 10000000000
211+let aS = 10000000000
214212
215-let aU = 200
213+let aT = 200
216214
217-let aV = 300
215+let aU = 300
216+
217+let aV = 10000
218218
219219 let aW = 10000
220220
221-let aX = 10000
221+let aX = 15000
222222
223-let aY = 15000
224-
225-func aZ (ba,bb) = ((("factoryWhByContinentAndRes_" + ba) + "_") + toString(bb))
223+func aY (aZ,ba) = ((("factoryWhByContinentAndRes_" + aZ) + "_") + toString(ba))
226224
227225
228-let bc = 0
226+let bb = 0
229227
230-let bd = 1
228+let bc = 1
231229
232-let be = 2
230+let bd = 2
233231
234-func bf (bg) = {
235- let bh = split(valueOrElse(getString(bg), "0@0_0@0_0@0_0@0_0@0_0@0:0@0_0@0_0@0_0@0_0@0_0@0:"), ":")
236-[if ((size(split(bh[bc], "_")) == f))
237- then bh[bc]
238- else "0@0_0@0_0@0_0@0_0@0_0@0", if ((size(split(bh[bd], "_")) == f))
239- then bh[bd]
240- else "0@0_0@0_0@0_0@0_0@0_0@0", bh[be]]
232+func be (bf) = {
233+ let bg = split(valueOrElse(getString(bf), "0@0_0@0_0@0_0@0_0@0_0@0:0@0_0@0_0@0_0@0_0@0_0@0:"), ":")
234+[if ((size(split(bg[bb], "_")) == f))
235+ then bg[bb]
236+ else "0@0_0@0_0@0_0@0_0@0_0@0", if ((size(split(bg[bc], "_")) == f))
237+ then bg[bc]
238+ else "0@0_0@0_0@0_0@0_0@0_0@0", bg[bd]]
241239 }
242240
243241
244-func bi (bj,bk,bl) = if (bl)
242+func bh (bi,bj,bk) = if (bk)
245243 then {
246- let bm = if ((bj >= 0))
247- then (((bj + bk) - 1) / bk)
248- else -((((-(bj) + bk) - 1) / bk))
249- (bm * am)
244+ let bl = if ((bi >= 0))
245+ then (((bi + bj) - 1) / bj)
246+ else -((((-(bi) + bj) - 1) / bj))
247+ (bl * al)
250248 }
251- else bj
249+ else bi
252250
253251
254-func bn (bo,bb,bj,bp) = {
255- let bq = aZ(bo, bb)
256- let br = valueOrElse(getInteger(bq), 0)
257- let bs = if ((br > aT))
252+func bm (bn,ba,bi,bo) = {
253+ let bp = aY(bn, ba)
254+ let bq = valueOrElse(getInteger(bp), 0)
255+ let br = if ((bq > aS))
258256 then 0
259- else if (((br + bj) > aT))
260- then (aT - br)
261- else bj
262- let bt = (fraction(bs, ((aU * h) - fraction(((100 * br) + (50 * bs)), h, aT)), an) + fraction((bj - bs), h, am))
263- let bu = (bp - (bp / 100))
264- if (((bu * bj) > (bt * am)))
265- then throw((((((((((("Actual price = " + toString(bt)) + " / ") + toString(bj)) + " < minPrice = ") + toString(bp)) + ", (") + bo) + ", ") + p[bb]) + ")"))
266- else $Tuple2(IntegerEntry(bq, (br + bj)), bt)
257+ else if (((bq + bi) > aS))
258+ then (aS - bq)
259+ else bi
260+ let bs = (fraction(br, ((aT * h) - fraction(((100 * bq) + (50 * br)), h, aS)), am) + fraction((bi - br), h, al))
261+ let bt = (bo - (bo / 100))
262+ if (((bt * bi) > (bs * al)))
263+ then throw((((((((((("Actual price = " + toString(bs)) + " / ") + toString(bi)) + " < minPrice = ") + toString(bo)) + ", (") + bn) + ", ") + p[ba]) + ")"))
264+ else $Tuple2(IntegerEntry(bp, (bq + bi)), bs)
267265 }
268266
269267
270-func bv (bo,bw,bj,bx) = {
271- let bq = aZ(bo, bw)
272- let br = valueOrElse(getInteger(bq), 0)
273- let by = if ((br > aT))
274- then min([bj, (br - aT)])
268+func bu (bn,bv,bi,bw) = {
269+ let bp = aY(bn, bv)
270+ let bq = valueOrElse(getInteger(bp), 0)
271+ let bx = if ((bq > aS))
272+ then min([bi, (bq - aS)])
275273 else 0
276- let bz = min([br, (bj - by)])
277- let bA = (bz + by)
278- let bB = min([br, aT])
279- let bC = (fraction(bz, ((aV * h) - fraction(((100 * bB) - (50 * bz)), h, aT)), an) + fraction(by, (2 * h), am))
280- let bD = (bx + (bx / 100))
281- if (((bC * am) > (bD * bA)))
282- then throw((((((((((("Actual price = " + toString(bC)) + " / ") + toString(bA)) + " > maxPrice = ") + toString(bx)) + ", (") + bo) + ", ") + q[bw]) + ")"))
283- else $Tuple3(IntegerEntry(bq, (br - bA)), bC, bA)
274+ let by = min([bq, (bi - bx)])
275+ let bz = (by + bx)
276+ let bA = min([bq, aS])
277+ let bB = (fraction(by, ((aU * h) - fraction(((100 * bA) - (50 * by)), h, aS)), am) + fraction(bx, (2 * h), al))
278+ let bC = (bw + (bw / 100))
279+ if (((bB * al) > (bC * bz)))
280+ then throw((((((((((("Actual price = " + toString(bB)) + " / ") + toString(bz)) + " > maxPrice = ") + toString(bw)) + ", (") + bn) + ", ") + q[bv]) + ")"))
281+ else $Tuple3(IntegerEntry(bp, (bq - bz)), bB, bz)
284282 }
285283
286284
287-func bE (bF) = {
288- let bh = split_4C(valueOrElse(getString(aE, bF), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
289-[toString(valueOrElse(parseInt(bh[G]), 0)), if ((size(split(bh[H], "_")) == f))
290- then bh[H]
291- else "0_0_0_0_0_0", if ((size(split(bh[I], "_")) == f))
292- then bh[I]
293- else "0_0_0_0_0_0", bh[J]]
285+func bD (bE) = {
286+ let bg = split_4C(valueOrElse(getString(aD, bE), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
287+[toString(valueOrElse(parseInt(bg[G]), 0)), if ((size(split(bg[H], "_")) == f))
288+ then bg[H]
289+ else "0_0_0_0_0_0", if ((size(split(bg[I], "_")) == f))
290+ then bg[I]
291+ else "0_0_0_0_0_0", bg[J]]
294292 }
295293
296294
297-func bG () = if (valueOrElse(getBoolean(aE, aM()), false))
295+func bF () = if (valueOrElse(getBoolean(aD, aL()), false))
298296 then throw("Contracts are under maintenance")
299297 else unit
300298
301299
302-func bH () = aK(reentrantInvoke(aE, "saveLastTx", nil, nil))
300+func bG () = aJ(reentrantInvoke(aD, "saveLastTx", nil, nil))
303301
304302
305-func bI (bJ,bK) = {
306- let bL = bJ._1
307- let bM = if ((size(bJ._10) > bL))
308- then bJ._10[bL]
303+func bH (bI,bJ) = {
304+ let bK = bI._1
305+ let bL = if ((size(bI._10) > bK))
306+ then bI._10[bK]
309307 else "0@0"
310- let bN = bJ._8
311- let bO = split(bM, "@")
312- if ((size(bO) != 2))
308+ let bM = bI._8
309+ let bN = split(bL, "@")
310+ if ((size(bN) != 2))
313311 then throw("Incorrect order format, should be amount@price")
314312 else {
315- let bP = parseIntValue(bO[0])
316- let bQ = parseIntValue(bO[1])
317- let bR = if (bN)
318- then (bP * bQ)
319- else fraction(bP, bQ, am)
320- let bS = bi(bP, y, bN)
321- let bT = if ((size(bJ._6) > bL))
322- then parseIntValue(bJ._6[bL])
313+ let bO = parseIntValue(bN[0])
314+ let bP = parseIntValue(bN[1])
315+ let bQ = if (bM)
316+ then (bO * bP)
317+ else fraction(bO, bP, al)
318+ let bR = bh(bO, y, bM)
319+ let bS = if ((size(bI._6) > bK))
320+ then parseIntValue(bI._6[bK])
323321 else 0
324- let bU = split(if ((size(bJ._7) > bL))
325- then bJ._7[bL]
322+ let bT = split(if ((size(bI._7) > bK))
323+ then bI._7[bK]
326324 else "0@0", "@")
327- let bV = parseIntValue(bU[0])
328- let bW = parseIntValue(bU[1])
329- if (if ((0 > bW))
325+ let bU = parseIntValue(bT[0])
326+ let bV = parseIntValue(bT[1])
327+ if (if ((0 > bV))
330328 then true
331- else (0 > bQ))
329+ else (0 > bP))
332330 then throw("Price can't be negative")
333331 else {
334- let bX = if (bN)
335- then (bV * bW)
336- else fraction(bV, bW, am)
337- if ((bP == 0))
338- then if ((bV > 0))
339- then $Tuple10((bL + 1), (bJ._2 :+ toString(bT)), bJ._3, bJ._4, (bJ._5 - bX), bJ._6, bJ._7, bN, (bJ._9 + bi(bT, y, bN)), bJ._10)
340- else $Tuple10((bL + 1), (bJ._2 :+ toString((bT - bV))), bJ._3, bJ._4, bJ._5, bJ._6, bJ._7, bN, (bJ._9 + bi((bT - bV), y, bN)), bJ._10)
341- else if ((bP > 0))
342- then if ((0 > bV))
343- then $Tuple10((bL + 1), (bJ._2 :+ toString((bT - bV))), (bJ._3 + bS), bJ._4, (bJ._5 + bR), bJ._6, bJ._7, bN, bi((bT - bV), y, bN), bJ._10)
344- else $Tuple10((bL + 1), (bJ._2 :+ toString(bT)), (bJ._3 + bS), bJ._4, ((bJ._5 + bR) - bX), bJ._6, bJ._7, bN, bi(bT, y, bN), bJ._10)
345- else if ((0 > bV))
332+ let bW = if (bM)
333+ then (bU * bV)
334+ else fraction(bU, bV, al)
335+ if ((bO == 0))
336+ then if ((bU > 0))
337+ then $Tuple10((bK + 1), (bI._2 :+ toString(bS)), bI._3, bI._4, (bI._5 - bW), bI._6, bI._7, bM, (bI._9 + bh(bS, y, bM)), bI._10)
338+ else $Tuple10((bK + 1), (bI._2 :+ toString((bS - bU))), bI._3, bI._4, bI._5, bI._6, bI._7, bM, (bI._9 + bh((bS - bU), y, bM)), bI._10)
339+ else if ((bO > 0))
340+ then if ((0 > bU))
341+ then $Tuple10((bK + 1), (bI._2 :+ toString((bS - bU))), (bI._3 + bR), bI._4, (bI._5 + bQ), bI._6, bI._7, bM, bh((bS - bU), y, bM), bI._10)
342+ else $Tuple10((bK + 1), (bI._2 :+ toString(bS)), (bI._3 + bR), bI._4, ((bI._5 + bQ) - bW), bI._6, bI._7, bM, bh(bS, y, bM), bI._10)
343+ else if ((0 > bU))
346344 then {
347- let bY = (bV - bP)
348- if ((0 > (bT - bY)))
349- then throw((((("Attempt to take " + toString(bY)) + " from warehouse, but only ") + toString(bT)) + " available"))
350- else $Tuple10((bL + 1), (bJ._2 :+ toString((bT - bY))), bJ._3, (bJ._4 - bS), bJ._5, bJ._6, bJ._7, bN, bi((bT - bY), y, bN), bJ._10)
345+ let bX = (bU - bO)
346+ if ((0 > (bS - bX)))
347+ then throw((((("Attempt to take " + toString(bX)) + " from warehouse, but only ") + toString(bS)) + " available"))
348+ else $Tuple10((bK + 1), (bI._2 :+ toString((bS - bX))), bI._3, (bI._4 - bR), bI._5, bI._6, bI._7, bM, bh((bS - bX), y, bM), bI._10)
351349 }
352- else if ((0 > (bT + bP)))
353- then throw((((("Attempt to take " + toString(-(bP))) + " from warehouse, but only ") + toString(bT)) + " available"))
354- else $Tuple10((bL + 1), (bJ._2 :+ toString((bT + bP))), bJ._3, (bJ._4 - bS), (bJ._5 - bX), bJ._6, bJ._7, bN, bi((bT + bP), y, bN), bJ._10)
350+ else if ((0 > (bS + bO)))
351+ then throw((((("Attempt to take " + toString(-(bO))) + " from warehouse, but only ") + toString(bS)) + " available"))
352+ else $Tuple10((bK + 1), (bI._2 :+ toString((bS + bO))), bI._3, (bI._4 - bR), (bI._5 - bW), bI._6, bI._7, bM, bh((bS + bO), y, bM), bI._10)
355353 }
356354 }
357355 }
358356
359357
360-func bZ (ca,cb,cc) = {
361- let cd = split(ca[A], "_")
362- let ce = split(ca[B], "_")
363- let cf = if ((ca[C] == ""))
358+func bY (bZ,ca,cb) = {
359+ let cc = split(bZ[A], "_")
360+ let cd = split(bZ[B], "_")
361+ let ce = if ((bZ[C] == ""))
364362 then nil
365- else split_4C(ca[C], "_")
366- let cg = split(cb[bc], "_")
367- let ch = split(cb[bd], "_")
368- let ci = if ((cb[be] == ""))
363+ else split_4C(bZ[C], "_")
364+ let cf = split(ca[bb], "_")
365+ let cg = split(ca[bc], "_")
366+ let ch = if ((ca[bd] == ""))
369367 then nil
370- else split_4C(cb[be], "_")
371- if ((size(cc) != 3))
368+ else split_4C(ca[bd], "_")
369+ if ((size(cb) != 3))
372370 then throw("newOrderStr should contain exactly 2 ':' separators")
373371 else {
374- let cj = split(cc[0], "_")
375- let ck = split(cc[1], "_")
376- let cl = if ((cc[2] == ""))
372+ let ci = split(cb[0], "_")
373+ let cj = split(cb[1], "_")
374+ let ck = if ((cb[2] == ""))
377375 then nil
378- else split_4C(cc[2], "_")
379- if ((size(cj) != f))
376+ else split_4C(cb[2], "_")
377+ if ((size(ci) != f))
380378 then throw("All 6 resources should be passed")
381- else if ((size(ck) != f))
379+ else if ((size(cj) != f))
382380 then throw("All 6 materials should be passed")
383381 else {
384- let cm = {
385- let cn = p
386- let co = size(cn)
387- let cp = $Tuple10(0, nil, 0, 0, 0, cd, cg, false, 0, cj)
388- func cq (cr,cs) = if ((cs >= co))
389- then cr
390- else bI(cr, cn[cs])
382+ let cl = {
383+ let cm = p
384+ let cn = size(cm)
385+ let co = $Tuple10(0, nil, 0, 0, 0, cc, cf, false, 0, ci)
386+ func cp (cq,cr) = if ((cr >= cn))
387+ then cq
388+ else bH(cq, cm[cr])
391389
392- func ct (cr,cs) = if ((cs >= co))
393- then cr
390+ func cs (cq,cr) = if ((cr >= cn))
391+ then cq
394392 else throw("List size exceeds 6")
395393
396- ct(cq(cq(cq(cq(cq(cq(cp, 0), 1), 2), 3), 4), 5), 6)
394+ cs(cp(cp(cp(cp(cp(cp(co, 0), 1), 2), 3), 4), 5), 6)
397395 }
398- let bA = {
399- let cn = q
400- let co = size(cn)
401- let cp = $Tuple10(0, nil, cm._3, cm._4, cm._5, ce, ch, false, cm._9, ck)
402- func cu (cr,cs) = if ((cs >= co))
403- then cr
404- else bI(cr, cn[cs])
396+ let bz = {
397+ let cm = q
398+ let cn = size(cm)
399+ let co = $Tuple10(0, nil, cl._3, cl._4, cl._5, cd, cg, false, cl._9, cj)
400+ func ct (cq,cr) = if ((cr >= cn))
401+ then cq
402+ else bH(cq, cm[cr])
405403
406- func cv (cr,cs) = if ((cs >= co))
407- then cr
404+ func cu (cq,cr) = if ((cr >= cn))
405+ then cq
408406 else throw("List size exceeds 6")
409407
410- cv(cu(cu(cu(cu(cu(cu(cp, 0), 1), 2), 3), 4), 5), 6)
408+ cu(ct(ct(ct(ct(ct(ct(co, 0), 1), 2), 3), 4), 5), 6)
411409 }
412- let bh = {
413- let cn = r
414- let co = size(cn)
415- let cp = $Tuple10(0, nil, bA._3, bA._4, bA._5, cf, ci, true, bA._9, cl)
416- func cw (cr,cs) = if ((cs >= co))
417- then cr
418- else bI(cr, cn[cs])
410+ let bg = {
411+ let cm = r
412+ let cn = size(cm)
413+ let co = $Tuple10(0, nil, bz._3, bz._4, bz._5, ce, ch, true, bz._9, ck)
414+ func cv (cq,cr) = if ((cr >= cn))
415+ then cq
416+ else bH(cq, cm[cr])
419417
420- func cx (cr,cs) = if ((cs >= co))
421- then cr
418+ func cw (cq,cr) = if ((cr >= cn))
419+ then cq
422420 else throw("List size exceeds 50")
423421
424- cx(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cp, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
422+ cw(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(co, 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)
425423 }
426- $Tuple7(cm._2, bA._2, bh._2, bh._3, bh._4, bh._5, bh._9)
424+ $Tuple7(cl._2, bz._2, bg._2, bg._3, bg._4, bg._5, bg._9)
427425 }
428426 }
429427 }
430428
431429
432-func cy (bJ,cz) = {
433- let bL = bJ._7
434- let bN = bJ._12
435- let cA = split(cz, "@")
436- if ((size(cA) != 2))
430+func cx (bI,cy) = {
431+ let bK = bI._7
432+ let bM = bI._12
433+ let cz = split(cy, "@")
434+ if ((size(cz) != 2))
437435 then throw("Incorrect order format, should be amount@price")
438436 else {
439- let cB = parseIntValue(cA[0])
440- let cC = parseIntValue(cA[1])
441- if ((0 > cC))
437+ let cA = parseIntValue(cz[0])
438+ let cB = parseIntValue(cz[1])
439+ if ((0 > cB))
442440 then throw("Price can't be negative")
443441 else {
444- let cD = if (bN)
445- then (cB * cC)
446- else fraction(cB, cC, am)
447- let cE = if ((size(bJ._8) > bL))
448- then parseIntValue(bJ._8[bL])
442+ let cC = if (bM)
443+ then (cA * cB)
444+ else fraction(cA, cB, al)
445+ let cD = if ((size(bI._8) > bK))
446+ then parseIntValue(bI._8[bK])
449447 else 0
450- let bT = if ((size(bJ._9) > bL))
451- then parseIntValue(bJ._9[bL])
448+ let bS = if ((size(bI._9) > bK))
449+ then parseIntValue(bI._9[bK])
452450 else 0
453- let cF = if ((size(bJ._10) > bL))
454- then bJ._10[bL]
451+ let cE = if ((size(bI._10) > bK))
452+ then bI._10[bK]
455453 else "0@0"
456- let cG = split(cF, "@")
457- let cH = parseIntValue(cG[0])
458- let cI = parseIntValue(cG[1])
459- if (if ((cB != 0))
460- then (cC != cI)
454+ let cF = split(cE, "@")
455+ let cG = parseIntValue(cF[0])
456+ let cH = parseIntValue(cF[1])
457+ if (if ((cA != 0))
458+ then (cB != cH)
461459 else false)
462- then throw(((((("Prices of " + bJ._11[bL]) + " don't match! WH price=") + toString(cI)) + ", your price=") + toString(cC)))
460+ then throw(((((("Prices of " + bI._11[bK]) + " don't match! WH price=") + toString(cH)) + ", your price=") + toString(cB)))
463461 else {
464- let cJ = if (bN)
465- then (cH * cI)
466- else fraction(cH, cI, am)
467- let cK = bi(cB, y, bN)
468- if ((cB == 0))
469- then $Tuple13((bJ._1 :+ toString(bT)), (bJ._2 :+ cF), (bJ._3 :+ toString(cE)), bJ._4, bJ._5, bJ._6, (bJ._7 + 1), bJ._8, bJ._9, bJ._10, bJ._11, bN, bJ._13)
470- else if ((cB > 0))
471- then if ((0 > cH))
472- then if ((cB > -(cH)))
473- then throw(((((("Attempt to buy " + toString(cB)) + " of ") + bJ._11[bL]) + ", but warehouse only sells ") + toString(-(cH))))
474- else $Tuple13((bJ._1 :+ toString(bT)), (bJ._2 :+ ((toString((cH + cB)) + "@") + toString(cI))), (bJ._3 :+ toString((cE + cB))), (bJ._4 + cK), bJ._5, (bJ._6 + cD), (bJ._7 + 1), bJ._8, bJ._9, bJ._10, bJ._11, bN, (bJ._13 + (if (bN)
475- then (cB * am)
476- else cB)))
477- else throw((("Attempt to buy " + bJ._11[bL]) + " while warehouse doesn't sell it"))
478- else if ((cH > 0))
479- then if ((-(cB) > cH))
480- then throw(((((("Attempt to sell " + toString(-(cB))) + " of ") + bJ._11[bL]) + ", but warehouse only buys ") + toString(cH)))
481- else if ((-(cB) > cE))
482- then throw(((((("Attempt to sell " + toString(-(cB))) + ", but you only have ") + toString(cE)) + " of ") + bJ._11[bL]))
483- else $Tuple13((bJ._1 :+ toString((bT - cB))), (bJ._2 :+ ((toString((cH + cB)) + "@") + toString(cI))), (bJ._3 :+ toString((cE + cB))), (bJ._4 - cK), (bJ._5 - cD), bJ._6, (bJ._7 + 1), bJ._8, bJ._9, bJ._10, bJ._11, bN, (bJ._13 - (if (bN)
484- then (cB * am)
485- else cB)))
486- else throw((("Attempt to sell " + bJ._11[bL]) + " while warehouse doesn't buy it"))
462+ let cI = if (bM)
463+ then (cG * cH)
464+ else fraction(cG, cH, al)
465+ let cJ = bh(cA, y, bM)
466+ if ((cA == 0))
467+ then $Tuple13((bI._1 :+ toString(bS)), (bI._2 :+ cE), (bI._3 :+ toString(cD)), bI._4, bI._5, bI._6, (bI._7 + 1), bI._8, bI._9, bI._10, bI._11, bM, bI._13)
468+ else if ((cA > 0))
469+ then if ((0 > cG))
470+ then if ((cA > -(cG)))
471+ then throw(((((("Attempt to buy " + toString(cA)) + " of ") + bI._11[bK]) + ", but warehouse only sells ") + toString(-(cG))))
472+ else $Tuple13((bI._1 :+ toString(bS)), (bI._2 :+ ((toString((cG + cA)) + "@") + toString(cH))), (bI._3 :+ toString((cD + cA))), (bI._4 + cJ), bI._5, (bI._6 + cC), (bI._7 + 1), bI._8, bI._9, bI._10, bI._11, bM, (bI._13 + (if (bM)
473+ then (cA * al)
474+ else cA)))
475+ else throw((("Attempt to buy " + bI._11[bK]) + " while warehouse doesn't sell it"))
476+ else if ((cG > 0))
477+ then if ((-(cA) > cG))
478+ then throw(((((("Attempt to sell " + toString(-(cA))) + " of ") + bI._11[bK]) + ", but warehouse only buys ") + toString(cG)))
479+ else if ((-(cA) > cD))
480+ then throw(((((("Attempt to sell " + toString(-(cA))) + ", but you only have ") + toString(cD)) + " of ") + bI._11[bK]))
481+ else $Tuple13((bI._1 :+ toString((bS - cA))), (bI._2 :+ ((toString((cG + cA)) + "@") + toString(cH))), (bI._3 :+ toString((cD + cA))), (bI._4 - cJ), (bI._5 - cC), bI._6, (bI._7 + 1), bI._8, bI._9, bI._10, bI._11, bM, (bI._13 - (if (bM)
482+ then (cA * al)
483+ else cA)))
484+ else throw((("Attempt to sell " + bI._11[bK]) + " while warehouse doesn't buy it"))
487485 }
488486 }
489487 }
490488 }
491489
492490
493-func cL (cM,cN,cO,cP) = {
494- func cQ (bJ,bL) = if ((cO[bL] > parseIntValue(cM[bL])))
495- then throw(((((("You have " + cM[bL]) + " of ") + p[bL]) + ", but tried to sell ") + toString(cO[bL])))
496- else if ((0 > cO[bL]))
497- then throw(((("You tried to sell negative amount of " + p[bL]) + ": ") + toString(cO[bL])))
498- else if ((cO[bL] > 0))
491+func cK (cL,cM,cN,cO) = {
492+ func cP (bI,bK) = if ((cN[bK] > parseIntValue(cL[bK])))
493+ then throw(((((("You have " + cL[bK]) + " of ") + p[bK]) + ", but tried to sell ") + toString(cN[bK])))
494+ else if ((0 > cN[bK]))
495+ then throw(((("You tried to sell negative amount of " + p[bK]) + ": ") + toString(cN[bK])))
496+ else if ((cN[bK] > 0))
499497 then {
500- let cR = bn(cN, bL, cO[bL], cP[bL])
501- $Tuple4((bJ._1 :+ cR._1), (bJ._2 :+ toString((parseIntValue(cM[bL]) - cO[bL]))), (bJ._3 + cR._2), (bJ._4 + cO[bL]))
498+ let cQ = bm(cM, bK, cN[bK], cO[bK])
499+ $Tuple4((bI._1 :+ cQ._1), (bI._2 :+ toString((parseIntValue(cL[bK]) - cN[bK]))), (bI._3 + cQ._2), (bI._4 + cN[bK]))
502500 }
503- else $Tuple4(bJ._1, (bJ._2 :+ cM[bL]), bJ._3, bJ._4)
501+ else $Tuple4(bI._1, (bI._2 :+ cL[bK]), bI._3, bI._4)
504502
505- let cn = ap
506- let co = size(cn)
507- let cp = $Tuple4(nil, nil, 0, 0)
508- func cq (cr,cs) = if ((cs >= co))
509- then cr
510- else cQ(cr, cn[cs])
503+ let cm = ao
504+ let cn = size(cm)
505+ let co = $Tuple4(nil, nil, 0, 0)
506+ func cp (cq,cr) = if ((cr >= cn))
507+ then cq
508+ else cP(cq, cm[cr])
511509
512- func ct (cr,cs) = if ((cs >= co))
513- then cr
510+ func cs (cq,cr) = if ((cr >= cn))
511+ then cq
514512 else throw("List size exceeds 6")
515513
516- ct(cq(cq(cq(cq(cq(cq(cp, 0), 1), 2), 3), 4), 5), 6)
514+ cs(cp(cp(cp(cp(cp(cp(co, 0), 1), 2), 3), 4), 5), 6)
517515 }
518516
519517
520-func cS (cT,cN,cO,cU) = {
521- func cV (bJ,bL) = if ((0 > cO[bL]))
522- then throw(((("You tried to buy negative amount of " + q[bL]) + ": ") + toString(cO[bL])))
523- else if ((cO[bL] > 0))
518+func cR (cS,cM,cN,cT) = {
519+ func cU (bI,bK) = if ((0 > cN[bK]))
520+ then throw(((("You tried to buy negative amount of " + q[bK]) + ": ") + toString(cN[bK])))
521+ else if ((cN[bK] > 0))
524522 then {
525- let cR = bv(cN, bL, cO[bL], cU[bL])
526- $Tuple4((bJ._1 :+ cR._1), (bJ._2 :+ toString((parseIntValue(cT[bL]) + cR._3))), (bJ._3 + cR._2), (bJ._4 + cO[bL]))
523+ let cQ = bu(cM, bK, cN[bK], cT[bK])
524+ $Tuple4((bI._1 :+ cQ._1), (bI._2 :+ toString((parseIntValue(cS[bK]) + cQ._3))), (bI._3 + cQ._2), (bI._4 + cN[bK]))
527525 }
528- else $Tuple4(bJ._1, (bJ._2 :+ cT[bL]), bJ._3, bJ._4)
526+ else $Tuple4(bI._1, (bI._2 :+ cS[bK]), bI._3, bI._4)
529527
530- let cn = ap
531- let co = size(cn)
532- let cp = $Tuple4(nil, nil, 0, 0)
533- func cq (cr,cs) = if ((cs >= co))
534- then cr
535- else cV(cr, cn[cs])
528+ let cm = ao
529+ let cn = size(cm)
530+ let co = $Tuple4(nil, nil, 0, 0)
531+ func cp (cq,cr) = if ((cr >= cn))
532+ then cq
533+ else cU(cq, cm[cr])
536534
537- func ct (cr,cs) = if ((cs >= co))
538- then cr
535+ func cs (cq,cr) = if ((cr >= cn))
536+ then cq
539537 else throw("List size exceeds 6")
540538
541- ct(cq(cq(cq(cq(cq(cq(cp, 0), 1), 2), 3), 4), 5), 6)
539+ cs(cp(cp(cp(cp(cp(cp(co, 0), 1), 2), 3), 4), 5), 6)
542540 }
543541
544542
545-func cW (cM,cT,cO) = {
546- func cX (bJ,bL) = {
547- let cY = cO[bL]
548- if ((cY > parseIntValue(cM[bL])))
549- then throw(((((("You have " + cM[bL]) + " of ") + p[bL]) + ", but tried to exchange ") + toString(cY)))
550- else if ((0 > cY))
551- then throw(((("You tried to exchange negative amount of " + p[bL]) + ": ") + toString(cY)))
552- else if ((cY > 0))
553- then $Tuple4((bJ._1 :+ toString((parseIntValue(cM[bL]) - cY))), (bJ._2 :+ toString((parseIntValue(cT[bL]) + cY))), (bJ._3 + fraction(cY, h, am)), (bJ._4 + cY))
554- else $Tuple4((bJ._1 :+ cM[bL]), (bJ._2 :+ cT[bL]), bJ._3, bJ._4)
543+func cV (cL,cS,cN) = {
544+ func cW (bI,bK) = {
545+ let cX = cN[bK]
546+ if ((cX > parseIntValue(cL[bK])))
547+ then throw(((((("You have " + cL[bK]) + " of ") + p[bK]) + ", but tried to exchange ") + toString(cX)))
548+ else if ((0 > cX))
549+ then throw(((("You tried to exchange negative amount of " + p[bK]) + ": ") + toString(cX)))
550+ else if ((cX > 0))
551+ then $Tuple4((bI._1 :+ toString((parseIntValue(cL[bK]) - cX))), (bI._2 :+ toString((parseIntValue(cS[bK]) + cX))), (bI._3 + fraction(cX, h, al)), (bI._4 + cX))
552+ else $Tuple4((bI._1 :+ cL[bK]), (bI._2 :+ cS[bK]), bI._3, bI._4)
555553 }
556554
557- let cn = ap
558- let co = size(cn)
559- let cp = $Tuple4(nil, nil, 0, 0)
560- func cq (cr,cs) = if ((cs >= co))
561- then cr
562- else cX(cr, cn[cs])
555+ let cm = ao
556+ let cn = size(cm)
557+ let co = $Tuple4(nil, nil, 0, 0)
558+ func cp (cq,cr) = if ((cr >= cn))
559+ then cq
560+ else cW(cq, cm[cr])
563561
564- func ct (cr,cs) = if ((cs >= co))
565- then cr
562+ func cs (cq,cr) = if ((cr >= cn))
563+ then cq
566564 else throw("List size exceeds 6")
567565
568- ct(cq(cq(cq(cq(cq(cq(cp, 0), 1), 2), 3), 4), 5), 6)
566+ cs(cp(cp(cp(cp(cp(cp(co, 0), 1), 2), 3), 4), 5), 6)
569567 }
570568
571569
572-func cZ (da,db,dc) = if ((da > 0))
570+func cY (cZ,da,db) = if ((cZ > 0))
573571 then {
574- let dd = fraction(da, aW, al)
575- if ((dc >= (da - (3 * dd))))
576- then throw(("This trade does not cover delivery cost of " + aN(dc, 6)))
572+ let dc = fraction(cZ, aV, ak)
573+ if ((db >= (cZ - (3 * dc))))
574+ then throw(("This trade does not cover delivery cost of " + aM(db, 6)))
577575 else {
578- let de = Q(db)
579- let df = getString(aE, de)
580- let dg = addressFromStringValue(db)
581- (((if (isDefined(df))
582- then [ScriptTransfer(addressFromStringValue(value(df)), dd, ag)]
583- else nil) :+ ScriptTransfer(dg, ((da - (3 * dd)) - dc), ag)) :+ ScriptTransfer(aD, dd, ag))
576+ let dd = Q(da)
577+ let de = getString(aD, dd)
578+ let df = addressFromStringValue(da)
579+ (((if (isDefined(de))
580+ then [ScriptTransfer(addressFromStringValue(value(de)), dc, af)]
581+ else nil) :+ ScriptTransfer(df, ((cZ - (3 * dc)) - db), af)) :+ ScriptTransfer(aC, dc, af))
584582 }
585583 }
586584 else nil
587585
588586
589-func dh (di,dj,dk,dl) = if ((di > 0))
590- then if ((size(dj) != 1))
587+func dg (dh,di,dj,dk) = if ((dh > 0))
588+ then if ((size(di) != 1))
591589 then throw("exactly 1 payment must be attached")
592590 else {
593- let dm = dj[0]
594- let dn = dm.amount
595- if (if (!(isDefined(dm.assetId)))
591+ let dl = di[0]
592+ let dm = dl.amount
593+ if (if (!(isDefined(dl.assetId)))
596594 then true
597- else (value(dm.assetId) != ag))
595+ else (value(dl.assetId) != af))
598596 then throw("USDT payments only!")
599597 else {
600- let do = (di + dl)
601- if ((dn != do))
602- then throw((((((("Insufficient payment! Attached=" + aN(dn, 6)) + ", required=") + aN(di, 6)) + "+") + aN(dl, 6)) + "(delivery fee)"))
603- else if ((ao > di))
604- then throw(("Min shop trade is " + aN(ao, 6)))
598+ let dn = (dh + dk)
599+ if ((dm != dn))
600+ then throw((((((("Insufficient payment! Attached=" + aM(dm, 6)) + ", required=") + aM(dh, 6)) + "+") + aM(dk, 6)) + "(delivery fee)"))
601+ else if ((an > dh))
602+ then throw(("Min shop trade is " + aM(an, 6)))
605603 else {
606- let dp = fraction(di, aW, al)
607- let de = Q(dk)
608- let df = getString(aE, de)
609- (((if (isDefined(df))
610- then [ScriptTransfer(addressFromStringValue(value(df)), dp, ag)]
611- else nil) :+ ScriptTransfer(addressFromStringValue(dk), (di - (3 * dp)), ag)) :+ ScriptTransfer(aD, dp, ag))
604+ let do = fraction(dh, aV, ak)
605+ let dd = Q(dj)
606+ let de = getString(aD, dd)
607+ (((if (isDefined(de))
608+ then [ScriptTransfer(addressFromStringValue(value(de)), do, af)]
609+ else nil) :+ ScriptTransfer(addressFromStringValue(dj), (dh - (3 * do)), af)) :+ ScriptTransfer(aC, do, af))
612610 }
613611 }
614612 }
615- else if ((size(dj) != 0))
613+ else if ((size(di) != 0))
616614 then throw("No payments needed")
617615 else nil
618616
619617
620-func dq (dr,db,ds,dt,du,dv) = {
621- let dw = value(assetInfo(fromBase58String(dr)))
622- if (!(isDefined(getInteger(aE, P(dr)))))
623- then throw((("NFT " + dw.name) + " is not staked"))
618+func dp (dq,da,dr,ds,dt,du) = {
619+ let dv = value(assetInfo(fromBase58String(dq)))
620+ if (!(isDefined(getInteger(aD, P(dq)))))
621+ then throw((("NFT " + dv.name) + " is not staked"))
624622 else {
625- let dk = valueOrErrorMessage(getString(aE, N(dr)), (("NFT " + dw.name) + " is orphaned"))
626- if ((dk == db))
623+ let dj = valueOrErrorMessage(getString(aD, N(dq)), (("NFT " + dv.name) + " is orphaned"))
624+ if ((dj == da))
627625 then throw("You cannot trade with yourself")
628626 else {
629- let dx = split_4C(ds, ":")
630- if ((size(dx) != 3))
627+ let dw = split_4C(dr, ":")
628+ if ((size(dw) != 3))
631629 then throw("bpOrderStr should contain exactly 2 ':' separators")
632630 else {
633- let dy = split(dx[0], "_")
634- let dz = split(dx[1], "_")
635- let dA = if ((dx[2] == ""))
631+ let dx = split(dw[0], "_")
632+ let dy = split(dw[1], "_")
633+ let dz = if ((dw[2] == ""))
636634 then nil
637- else split_4C(dx[2], "_")
638- if ((size(dy) != f))
635+ else split_4C(dw[2], "_")
636+ if ((size(dx) != f))
639637 then throw("All 6 resources should be passed")
640- else if ((size(dz) != f))
638+ else if ((size(dy) != f))
641639 then throw("All 6 materials should be passed")
642640 else {
643- let dB = aH(invoke(aE, "getWarehouseREADONLY", [dr], nil))
644- let ca = split_4C(dB, ":")
645- let cd = split(ca[A], "_")
646- let ce = split(ca[B], "_")
647- let cf = if ((ca[C] == ""))
641+ let dA = aG(invoke(aD, "getWarehouseREADONLY", [dq], nil))
642+ let bZ = split_4C(dA, ":")
643+ let cc = split(bZ[A], "_")
644+ let cd = split(bZ[B], "_")
645+ let ce = if ((bZ[C] == ""))
648646 then nil
649- else split_4C(ca[C], "_")
650- let dC = parseIntValue(split(ca[D], "_")[E])
651- let bg = X(dr)
652- let dD = bf(bg)
653- let dE = split(dD[bc], "_")
654- let dF = split(dD[bd], "_")
655- let dG = if ((dD[be] == ""))
647+ else split_4C(bZ[C], "_")
648+ let dB = parseIntValue(split(bZ[D], "_")[E])
649+ let bf = X(dq)
650+ let dC = be(bf)
651+ let dD = split(dC[bb], "_")
652+ let dE = split(dC[bc], "_")
653+ let dF = if ((dC[bd] == ""))
656654 then nil
657- else split_4C(dD[be], "_")
658- let cm = {
659- let cn = dy
660- let co = size(cn)
661- let cp = $Tuple13(nil, nil, nil, 0, 0, 0, 0, dt, cd, dE, p, false, 0)
662- func cq (cr,cs) = if ((cs >= co))
663- then cr
664- else cy(cr, cn[cs])
655+ else split_4C(dC[bd], "_")
656+ let cl = {
657+ let cm = dx
658+ let cn = size(cm)
659+ let co = $Tuple13(nil, nil, nil, 0, 0, 0, 0, ds, cc, dD, p, false, 0)
660+ func cp (cq,cr) = if ((cr >= cn))
661+ then cq
662+ else cx(cq, cm[cr])
665663
666- func ct (cr,cs) = if ((cs >= co))
667- then cr
664+ func cs (cq,cr) = if ((cr >= cn))
665+ then cq
668666 else throw("List size exceeds 6")
669667
670- ct(cq(cq(cq(cq(cq(cq(cp, 0), 1), 2), 3), 4), 5), 6)
668+ cs(cp(cp(cp(cp(cp(cp(co, 0), 1), 2), 3), 4), 5), 6)
671669 }
672- let bA = {
673- let cn = dz
674- let co = size(cn)
675- let cp = $Tuple13(nil, nil, nil, cm._4, cm._5, cm._6, 0, du, ce, dF, q, false, cm._13)
676- func cu (cr,cs) = if ((cs >= co))
677- then cr
678- else cy(cr, cn[cs])
670+ let bz = {
671+ let cm = dy
672+ let cn = size(cm)
673+ let co = $Tuple13(nil, nil, nil, cl._4, cl._5, cl._6, 0, dt, cd, dE, q, false, cl._13)
674+ func ct (cq,cr) = if ((cr >= cn))
675+ then cq
676+ else cx(cq, cm[cr])
679677
680- func cv (cr,cs) = if ((cs >= co))
681- then cr
678+ func cu (cq,cr) = if ((cr >= cn))
679+ then cq
682680 else throw("List size exceeds 6")
683681
684- cv(cu(cu(cu(cu(cu(cu(cp, 0), 1), 2), 3), 4), 5), 6)
682+ cu(ct(ct(ct(ct(ct(ct(co, 0), 1), 2), 3), 4), 5), 6)
685683 }
686- let bh = if ((size(dA) != 0))
684+ let bg = if ((size(dz) != 0))
687685 then {
688- let cn = dA
689- let co = size(cn)
690- let cp = $Tuple13(nil, nil, nil, bA._4, bA._5, bA._6, 0, dv, cf, dG, r, true, bA._13)
691- func cw (cr,cs) = if ((cs >= co))
692- then cr
693- else cy(cr, cn[cs])
686+ let cm = dz
687+ let cn = size(cm)
688+ let co = $Tuple13(nil, nil, nil, bz._4, bz._5, bz._6, 0, du, ce, dF, r, true, bz._13)
689+ func cv (cq,cr) = if ((cr >= cn))
690+ then cq
691+ else cx(cq, cm[cr])
694692
695- func cx (cr,cs) = if ((cs >= co))
696- then cr
693+ func cw (cq,cr) = if ((cr >= cn))
694+ then cq
697695 else throw("List size exceeds 50")
698696
699- cx(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cw(cp, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
697+ cw(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(cv(co, 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)
700698 }
701- else $Tuple13(cf, dG, dv, bA._4, bA._5, bA._6, 0, dv, cf, dG, r, true, bA._13)
702- let dH = bh._4
703- let dI = if ((0 > (dC - dH)))
699+ else $Tuple13(ce, dF, du, bz._4, bz._5, bz._6, 0, du, ce, dF, r, true, bz._13)
700+ let dG = bg._4
701+ let dH = if ((0 > (dB - dG)))
704702 then 0
705- else (dC - dH)
706- let dJ = makeString_2C([ca[z], makeString(cm._1, "_"), makeString(bA._1, "_"), makeString_2C(bh._1, "_"), toString(dI)], ":")
707- let dK = makeString_2C([makeString(cm._2, "_"), makeString(bA._2, "_"), makeString_2C(bh._2, "_")], ":")
708- let dL = aH(invoke(aE, "saveWarehouse", [dJ, dr], nil))
709- let dM = aK(invoke(aE, "updateAccStats", [dk, fraction(d, bh._13, am)], nil))
710- $Tuple10(StringEntry(bg, dK), cm._3, bA._3, bh._3, bh._5, bh._6, bh._13, dk, dL, dM)
703+ else (dB - dG)
704+ let dI = makeString_2C([bZ[z], makeString(cl._1, "_"), makeString(bz._1, "_"), makeString_2C(bg._1, "_"), toString(dH)], ":")
705+ let dJ = makeString_2C([makeString(cl._2, "_"), makeString(bz._2, "_"), makeString_2C(bg._2, "_")], ":")
706+ let dK = aG(invoke(aD, "saveWarehouse", [dI, dq], nil))
707+ let dL = aJ(invoke(aD, "updateAccStats", [dj, fraction(d, bg._13, al)], nil))
708+ $Tuple10(StringEntry(bf, dJ), cl._3, bz._3, bg._3, bg._5, bg._6, bg._13, dj, dK, dL)
711709 }
712710 }
713711 }
714712 }
715713 }
716714
717715
718-func dN (bj) = {
719- let dO = (bj / 30)
720- let dP = [dO, dO, dO, dO, dO, dO]
721- let aJ = toString(dO)
722- let cM = [aJ, aJ, aJ, aJ, aJ, aJ]
723- let cP = [0, 0, 0, 0, 0, 0]
724- func dQ (bJ,dR) = {
725- let dS = cL(cM, dR, dP, cP)
726- $Tuple3((bJ._1 ++ dS._1), (bJ._2 + dS._3), (bJ._3 + dS._4))
716+func dM (bi) = {
717+ let dN = (bi / 30)
718+ let dO = [dN, dN, dN, dN, dN, dN]
719+ let aI = toString(dN)
720+ let cL = [aI, aI, aI, aI, aI, aI]
721+ let cO = [0, 0, 0, 0, 0, 0]
722+ func dP (bI,dQ) = {
723+ let dR = cK(cL, dQ, dO, cO)
724+ $Tuple3((bI._1 ++ dR._1), (bI._2 + dR._3), (bI._3 + dR._4))
727725 }
728726
729- let dT = {
730- let cn = s
731- let co = size(cn)
732- let cp = $Tuple3(nil, 0, 0)
733- func cq (cr,cs) = if ((cs >= co))
734- then cr
735- else dQ(cr, cn[cs])
727+ let dS = {
728+ let cm = s
729+ let cn = size(cm)
730+ let co = $Tuple3(nil, 0, 0)
731+ func cp (cq,cr) = if ((cr >= cn))
732+ then cq
733+ else dP(cq, cm[cr])
736734
737- func ct (cr,cs) = if ((cs >= co))
738- then cr
735+ func cs (cq,cr) = if ((cr >= cn))
736+ then cq
739737 else throw("List size exceeds 5")
740738
741- ct(cq(cq(cq(cq(cq(cp, 0), 1), 2), 3), 4), 5)
739+ cs(cp(cp(cp(cp(cp(co, 0), 1), 2), 3), 4), 5)
742740 }
743- let dU = dT._1
744- let bt = dT._2
745- let dV = dT._3
746- let dW = fraction(bt, aX, al)
747- let dX = (bt / 100)
748- let dY = ((bt - dX) - dW)
749- $Tuple5(dU, dY, dW, dX, dV)
741+ let dT = dS._1
742+ let bs = dS._2
743+ let dU = dS._3
744+ let dV = fraction(bs, aW, ak)
745+ let dW = (bs / 100)
746+ let dX = ((bs - dW) - dV)
747+ $Tuple5(dT, dX, dV, dW, dU)
750748 }
751749
752750
753-func dZ (cT,ea,eb,ec,ed) = if ((0 >= ed))
751+func dY (cS,dZ,ea,eb,ec) = if ((0 >= ec))
754752 then throw("Quantity should be positive")
755- else if (if ((0 > ec))
753+ else if (if ((0 > eb))
756754 then true
757- else (ec >= size(u)))
758- then throw(("Unknown product idx=" + toString(ec)))
755+ else (eb >= size(u)))
756+ then throw(("Unknown product idx=" + toString(eb)))
759757 else {
760- let ad = split(u[ec], "_")
758+ let ad = split(u[eb], "_")
761759 if ((size(ad) != x))
762- then throw(("Fatal: unknown recipe: " + u[ec]))
760+ then throw(("Fatal: unknown recipe: " + u[eb]))
763761 else {
764- let ee = parseIntValue(ad[w])
765- if ((s[ee] != eb))
766- then throw(((("This product is available in " + s[ee]) + ", not in ") + eb))
762+ let ed = parseIntValue(ad[w])
763+ if ((s[ed] != ea))
764+ then throw(((("This product is available in " + s[ed]) + ", not in ") + ea))
767765 else {
768- func ef (bJ,eg) = {
769- let aL = bJ._2
770- let eh = if ((size(ea) > aL))
771- then ea[aL]
766+ func ee (bI,ef) = {
767+ let aK = bI._2
768+ let eg = if ((size(dZ) > aK))
769+ then dZ[aK]
772770 else "0"
773- let dS = parseIntValue(eh)
774- let bj = (ed * y)
775- let ei = if ((aL == ec))
776- then toString((dS + bj))
777- else eh
778- $Tuple2((bJ._1 :+ ei), (aL + 1))
771+ let dR = parseIntValue(eg)
772+ let bi = (ec * y)
773+ let eh = if ((aK == eb))
774+ then toString((dR + bi))
775+ else eg
776+ $Tuple2((bI._1 :+ eh), (aK + 1))
779777 }
780778
781- let ej = ( let cn = u
782- let co = size(cn)
783- let cp = $Tuple2(nil, 0)
784- func cq (cr,cs) = if ((cs >= co))
785- then cr
786- else ef(cr, cn[cs])
779+ let ei = ( let cm = u
780+ let cn = size(cm)
781+ let co = $Tuple2(nil, 0)
782+ func cp (cq,cr) = if ((cr >= cn))
783+ then cq
784+ else ee(cq, cm[cr])
787785
788- func ct (cr,cs) = if ((cs >= co))
789- then cr
786+ func cs (cq,cr) = if ((cr >= cn))
787+ then cq
790788 else throw("List size exceeds 50")
791789
792- ct(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cp, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50))._1
793- func ek (bJ,bL) = {
794- let el = (((parseIntValue(ad[bL]) * ak) * ed) * parseIntValue(ad[v]))
795- let em = parseIntValue(cT[bL])
796- if ((el > em))
797- then throw(((((((("You have " + aN(em, 8)) + " of ") + q[bL]) + ", but recipe requires ") + aN(el, 8)) + " for quantity ") + toString(ed)))
798- else if ((el > 0))
799- then $Tuple2((bJ._1 :+ toString((em - el))), (bJ._2 + el))
800- else $Tuple2((bJ._1 :+ cT[bL]), bJ._2)
790+ cs(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(co, 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
791+ func ej (bI,bK) = {
792+ let ek = (((parseIntValue(ad[bK]) * aj) * ec) * parseIntValue(ad[v]))
793+ let el = parseIntValue(cS[bK])
794+ if ((ek > el))
795+ then throw(((((((("You have " + aM(el, 8)) + " of ") + q[bK]) + ", but recipe requires ") + aM(ek, 8)) + " for quantity ") + toString(ec)))
796+ else if ((ek > 0))
797+ then $Tuple2((bI._1 :+ toString((el - ek))), (bI._2 + ek))
798+ else $Tuple2((bI._1 :+ cS[bK]), bI._2)
801799 }
802800
803- let en = {
804- let cn = ap
805- let co = size(cn)
806- let cp = $Tuple2(nil, 0)
807- func cu (cr,cs) = if ((cs >= co))
808- then cr
809- else ek(cr, cn[cs])
801+ let em = {
802+ let cm = ao
803+ let cn = size(cm)
804+ let co = $Tuple2(nil, 0)
805+ func ct (cq,cr) = if ((cr >= cn))
806+ then cq
807+ else ej(cq, cm[cr])
810808
811- func cv (cr,cs) = if ((cs >= co))
812- then cr
809+ func cu (cq,cr) = if ((cr >= cn))
810+ then cq
813811 else throw("List size exceeds 6")
814812
815- cv(cu(cu(cu(cu(cu(cu(cp, 0), 1), 2), 3), 4), 5), 6)
813+ cu(ct(ct(ct(ct(ct(ct(co, 0), 1), 2), 3), 4), 5), 6)
816814 }
817- $Tuple3(en._1, ej, en._2)
815+ $Tuple3(em._1, ei, em._2)
818816 }
819817 }
820818 }
821819
822820
823-@Callable(eo)
824-func recalcLockedVolumeREADONLY (Y,dB) = {
825- let cb = bf(X(Y))
826- let ep = bZ(dB, cb, cb)
827- $Tuple2(nil, (ep._4 + ep._5))
821+@Callable(en)
822+func recalcLockedVolumeREADONLY (Y,dA) = {
823+ let ca = be(X(Y))
824+ let eo = bY(dA, ca, ca)
825+ $Tuple2(nil, (eo._4 + eo._5))
828826 }
829827
830828
831829
832-@Callable(eo)
833-func constructorV1 (eq) = if ((eo.caller != this))
830+@Callable(en)
831+func constructorV1 (ep) = if ((en.caller != this))
834832 then throw("Permission denied")
835- else [StringEntry(ax(), eq)]
833+ else [StringEntry(aw(), ep)]
836834
837835
838836
839-@Callable(eo)
840-func sellResources (cO,cP) = {
841- let er = bH()
842- if ((er == er))
837+@Callable(en)
838+func sellResources (cN,cO) = {
839+ let eq = bG()
840+ if ((eq == eq))
843841 then {
844- let V = valueOrErrorMessage(getString(aE, S(toString(eo.caller))), "You don't have a duck staked")
845- if ((size(eo.payments) != 0))
842+ let V = valueOrErrorMessage(getString(aD, S(toString(en.caller))), "You don't have a duck staked")
843+ if ((size(en.payments) != 0))
846844 then throw("sellResources doesn't require any payments")
847845 else {
848- let es = split(valueOrElse(getString(aE, W(V)), g), "_")
849- if ((es[L] != "F"))
850- then throw(("Duck location type should be Factory, but is " + es[L]))
846+ let er = split(valueOrElse(getString(aD, W(V)), g), "_")
847+ if ((er[L] != "F"))
848+ then throw(("Duck location type should be Factory, but is " + er[L]))
851849 else {
852- let et = bE(U(V))
853- let cM = split(et[H], "_")
854- let eu = cL(cM, es[M], cO, cP)
855- let dU = eu._1
856- let ev = eu._2
857- let bt = eu._3
858- let dV = eu._4
859- let dX = (bt / 100)
860- let ew = makeString_2C([et[G], makeString(ev, "_"), et[I], et[J]], ":")
861- let ex = aH(invoke(aE, "updateBackpack", [V, ew], nil))
862- let ey = aK(invoke(aE, "updateDuckStats", [V, fraction(a, dV, am)], nil))
863- $Tuple2(((dU :+ ScriptTransfer(eo.caller, (bt - dX), ag)) :+ ScriptTransfer(aD, dX, ag)), $Tuple3(ex, er, ey))
850+ let es = bD(U(V))
851+ let cL = split(es[H], "_")
852+ let et = cK(cL, er[M], cN, cO)
853+ let dT = et._1
854+ let eu = et._2
855+ let bs = et._3
856+ let dU = et._4
857+ let dW = (bs / 100)
858+ let ev = makeString_2C([es[G], makeString(eu, "_"), es[I], es[J]], ":")
859+ let ew = aG(invoke(aD, "updateBackpack", [V, ev], nil))
860+ let ex = aJ(invoke(aD, "updateDuckStats", [V, fraction(a, dU, al)], nil))
861+ $Tuple2(((dT :+ ScriptTransfer(en.caller, (bs - dW), af)) :+ ScriptTransfer(aC, dW, af)), $Tuple3(ew, eq, ex))
864862 }
865863 }
866864 }
867865 else throw("Strict value is not equal to itself.")
868866 }
869867
870868
871869
872-@Callable(eo)
873-func sellResourcesWorld (R,bj) = if ((eo.caller != aG))
870+@Callable(en)
871+func sellResourcesWorld (R,bi) = if ((en.caller != aF))
874872 then throw("Permission denied")
875873 else {
876- let ez = dN(bj)
877- let dU = ez._1
878- let dY = ez._2
879- let dW = ez._3
880- let dX = ez._4
881- let dV = ez._5
882- if ((0 >= dY))
883- then throw(("This trade does not cover delivery cost of " + aN(dW, 6)))
874+ let ey = dM(bi)
875+ let dT = ey._1
876+ let dX = ey._2
877+ let dV = ey._3
878+ let dW = ey._4
879+ let dU = ey._5
880+ if ((0 >= dX))
881+ then throw(("This trade does not cover delivery cost of " + aM(dV, 6)))
884882 else {
885- let ey = aK(invoke(aE, "updateAccStats", [R, fraction(a, dV, am)], nil))
886- $Tuple2((((dU :+ IntegerEntry(aa, (valueOrElse(getInteger(aa), 0) + dW))) :+ ScriptTransfer(aD, dX, ag)) :+ ScriptTransfer(aF, dY, ag)), $Tuple2(dY, ey))
883+ let ex = aJ(invoke(aD, "updateAccStats", [R, fraction(a, dU, al)], nil))
884+ $Tuple2((((dT :+ IntegerEntry(aa, (valueOrElse(getInteger(aa), 0) + dV))) :+ ScriptTransfer(aC, dW, af)) :+ ScriptTransfer(aE, dX, af)), $Tuple2(dX, ex))
887885 }
888886 }
889887
890888
891889
892-@Callable(eo)
893-func sellResourcesWorldREADONLY (bj) = {
894- let dY = dN(bj)._2
895- $Tuple2(nil, dY)
890+@Callable(en)
891+func sellResourcesWorldREADONLY (bi) = {
892+ let dX = dM(bi)._2
893+ $Tuple2(nil, dX)
896894 }
897895
898896
899897
900-@Callable(eo)
901-func sellResourcesDuckDelivery (cO,cP,eA) = if (!(ae))
902- then throw("Delivery feature is turned off!")
903- else {
904- let er = bH()
905- if ((er == er))
906- then {
907- let V = valueOrErrorMessage(getString(aE, S(toString(eo.caller))), "You don't have a duck staked")
908- if ((size(eo.payments) != 0))
909- then throw("sellResources doesn't require any payments")
898+@Callable(en)
899+func sellResourcesDuckDelivery (cN,cO,ez) = {
900+ let eq = bG()
901+ if ((eq == eq))
902+ then {
903+ let V = valueOrErrorMessage(getString(aD, S(toString(en.caller))), "You don't have a duck staked")
904+ if ((size(en.payments) != 0))
905+ then throw("sellResources doesn't require any payments")
906+ else {
907+ let es = bD(U(V))
908+ let cL = split(es[H], "_")
909+ let eA = cK(cL, ez, cN, cO)
910+ let dT = eA._1
911+ let eu = eA._2
912+ let bs = eA._3
913+ let dU = eA._4
914+ let ev = makeString_2C([es[G], makeString(eu, "_"), es[I], es[J]], ":")
915+ let ew = aG(invoke(aD, "updateBackpack", [V, ev], nil))
916+ let ex = aJ(invoke(aD, "updateDuckStats", [V, fraction(a, dU, al)], nil))
917+ let eB = fraction(bs, aW, ak)
918+ let dV = max([eB, k])
919+ let dW = (bs / 100)
920+ if ((dV >= (bs - dW)))
921+ then throw(("This trade does not cover delivery cost of " + aM(dV, 6)))
922+ else {
923+ let eC = valueOrElse(getInteger(aa), 0)
924+ $Tuple2((((dT :+ ScriptTransfer(en.caller, ((bs - dW) - dV), af)) :+ IntegerEntry(aa, (eC + dV))) :+ ScriptTransfer(aC, dW, af)), $Tuple3(ew, eq, ex))
925+ }
926+ }
927+ }
928+ else throw("Strict value is not equal to itself.")
929+ }
930+
931+
932+
933+@Callable(en)
934+func sellResourcesLandDelivery (cN,cO,Y,ez) = {
935+ let eq = bG()
936+ if ((eq == eq))
937+ then if ((size(en.payments) != 0))
938+ then throw("sellResources doesn't require any payments")
939+ else {
940+ let eD = en.caller
941+ let R = toString(eD)
942+ let eE = value(assetInfo(fromBase58String(Y)))
943+ if (!(isDefined(getInteger(aD, P(Y)))))
944+ then throw((("NFT " + eE.name) + " is not staked"))
910945 else {
911- let et = bE(U(V))
912- let cM = split(et[H], "_")
913- let eB = cL(cM, eA, cO, cP)
914- let dU = eB._1
915- let ev = eB._2
916- let bt = eB._3
917- let dV = eB._4
918- let ew = makeString_2C([et[G], makeString(ev, "_"), et[I], et[J]], ":")
919- let ex = aH(invoke(aE, "updateBackpack", [V, ew], nil))
920- let ey = aK(invoke(aE, "updateDuckStats", [V, fraction(a, dV, am)], nil))
921- let eC = fraction(bt, aX, al)
922- let dW = max([eC, k])
923- let dX = (bt / 100)
924- if ((dW >= (bt - dX)))
925- then throw(("This trade does not cover delivery cost of " + aN(dW, 6)))
946+ let eF = valueOrErrorMessage(getString(aD, N(Y)), (("NFT " + eE.name) + " is orphaned"))
947+ if ((eF != R))
948+ then throw((e + " is not yours"))
926949 else {
927- let eD = valueOrElse(getInteger(aa), 0)
928- $Tuple2((((dU :+ ScriptTransfer(eo.caller, ((bt - dX) - dW), ag)) :+ IntegerEntry(aa, (eD + dW))) :+ ScriptTransfer(aD, dX, ag)), $Tuple3(ex, er, ey))
950+ let dA = aG(invoke(aD, "getWarehouseREADONLY", [Y], nil))
951+ let bZ = split_4C(dA, ":")
952+ let cL = split(bZ[A], "_")
953+ let eG = cK(cL, ez, cN, cO)
954+ let dT = eG._1
955+ let eu = eG._2
956+ let bs = eG._3
957+ let dU = eG._4
958+ let dI = makeString_2C([bZ[z], makeString(eu, "_"), bZ[B], bZ[C], bZ[D]], ":")
959+ let dK = aG(invoke(aD, "saveWarehouse", [dI, Y], nil))
960+ let ex = aJ(invoke(aD, "updateAccStats", [R, fraction(a, dU, al)], nil))
961+ let eB = fraction(bs, aW, ak)
962+ let dV = max([eB, k])
963+ let dW = (bs / 100)
964+ if ((dV >= (bs - dW)))
965+ then throw(("This trade does not cover delivery cost of " + aM(dV, 6)))
966+ else {
967+ let eC = valueOrElse(getInteger(aa), 0)
968+ $Tuple2((((dT :+ ScriptTransfer(en.caller, ((bs - dW) - dV), af)) :+ IntegerEntry(aa, (eC + dV))) :+ ScriptTransfer(aC, dW, af)), $Tuple3(dK, eq, ex))
969+ }
929970 }
930971 }
931972 }
932- else throw("Strict value is not equal to itself.")
933- }
973+ else throw("Strict value is not equal to itself.")
974+ }
934975
935976
936977
937-@Callable(eo)
938-func sellResourcesLandDelivery (cO,cP,Y,eA) = if (!(ae))
939- then throw("Delivery feature is turned off!")
940- else {
941- let er = bH()
942- if ((er == er))
943- then if ((size(eo.payments) != 0))
944- then throw("sellResources doesn't require any payments")
945- else {
946- let eE = eo.caller
947- let R = toString(eE)
948- let eF = value(assetInfo(fromBase58String(Y)))
949- if (!(isDefined(getInteger(aE, P(Y)))))
950- then throw((("NFT " + eF.name) + " is not staked"))
951- else {
952- let eG = valueOrErrorMessage(getString(aE, N(Y)), (("NFT " + eF.name) + " is orphaned"))
953- if ((eG != R))
954- then throw((e + " is not yours"))
955- else {
956- let dB = aH(invoke(aE, "getWarehouseREADONLY", [Y], nil))
957- let ca = split_4C(dB, ":")
958- let cM = split(ca[A], "_")
959- let eH = cL(cM, eA, cO, cP)
960- let dU = eH._1
961- let ev = eH._2
962- let bt = eH._3
963- let dV = eH._4
964- let dJ = makeString_2C([ca[z], makeString(ev, "_"), ca[B], ca[C], ca[D]], ":")
965- let dL = aH(invoke(aE, "saveWarehouse", [dJ, Y], nil))
966- let ey = aK(invoke(aE, "updateAccStats", [R, fraction(a, dV, am)], nil))
967- let eC = fraction(bt, aX, al)
968- let dW = max([eC, k])
969- let dX = (bt / 100)
970- if ((dW >= (bt - dX)))
971- then throw(("This trade does not cover delivery cost of " + aN(dW, 6)))
972- else {
973- let eD = valueOrElse(getInteger(aa), 0)
974- $Tuple2((((dU :+ ScriptTransfer(eo.caller, ((bt - dX) - dW), ag)) :+ IntegerEntry(aa, (eD + dW))) :+ ScriptTransfer(aD, dX, ag)), $Tuple3(dL, er, ey))
975- }
976- }
977- }
978- }
979- else throw("Strict value is not equal to itself.")
980- }
981-
982-
983-
984-@Callable(eo)
985-func buyMaterials (cO,cU) = {
986- let er = bH()
987- if ((er == er))
978+@Callable(en)
979+func buyMaterials (cN,cT) = {
980+ let eq = bG()
981+ if ((eq == eq))
988982 then {
989- let V = valueOrErrorMessage(getString(aE, S(toString(eo.caller))), "You don't have a duck staked")
990- if ((size(eo.payments) != 1))
983+ let V = valueOrErrorMessage(getString(aD, S(toString(en.caller))), "You don't have a duck staked")
984+ if ((size(en.payments) != 1))
991985 then throw("exactly 1 payment must be attached")
992986 else {
993- let dm = eo.payments[0]
994- let dn = dm.amount
995- if (if (!(isDefined(dm.assetId)))
987+ let dl = en.payments[0]
988+ let dm = dl.amount
989+ if (if (!(isDefined(dl.assetId)))
996990 then true
997- else (value(dm.assetId) != ag))
991+ else (value(dl.assetId) != af))
998992 then throw("USDT payments only!")
999993 else {
1000- let es = split(valueOrElse(getString(aE, W(V)), g), "_")
1001- if ((es[L] != "F"))
1002- then throw(("Duck location type should be Factory, but is " + es[L]))
994+ let er = split(valueOrElse(getString(aD, W(V)), g), "_")
995+ if ((er[L] != "F"))
996+ then throw(("Duck location type should be Factory, but is " + er[L]))
1003997 else {
1004- let et = bE(U(V))
1005- let cT = split(et[I], "_")
1006- let eI = cS(cT, es[M], cO, cU)
1007- let dU = eI._1
1008- let eJ = eI._2
1009- let bC = eI._3
1010- let eK = eI._4
1011- if ((bC > dn))
1012- then throw(((("Insufficient payment! Attached=" + aN(dn, 6)) + ", required=") + aN(bC, 6)))
998+ let es = bD(U(V))
999+ let cS = split(es[I], "_")
1000+ let eH = cR(cS, er[M], cN, cT)
1001+ let dT = eH._1
1002+ let eI = eH._2
1003+ let bB = eH._3
1004+ let eJ = eH._4
1005+ if ((bB > dm))
1006+ then throw(((("Insufficient payment! Attached=" + aM(dm, 6)) + ", required=") + aM(bB, 6)))
10131007 else {
1014- let ew = makeString([et[G], et[H], makeString(eJ, "_"), et[J]], ":")
1015- let ex = aH(invoke(aE, "updateBackpack", [V, ew], nil))
1016- let az = if (((dn - bC) > 0))
1017- then [ScriptTransfer(eo.caller, (dn - bC), ag)]
1008+ let ev = makeString([es[G], es[H], makeString(eI, "_"), es[J]], ":")
1009+ let ew = aG(invoke(aD, "updateBackpack", [V, ev], nil))
1010+ let ay = if (((dm - bB) > 0))
1011+ then [ScriptTransfer(en.caller, (dm - bB), af)]
10181012 else nil
1019- let dX = (bC / 100)
1020- let ey = aK(invoke(aE, "updateDuckStats", [V, fraction(a, eK, am)], nil))
1021- $Tuple2(((dU ++ az) :+ ScriptTransfer(aD, dX, ag)), $Tuple3(ex, er, ey))
1013+ let dW = (bB / 100)
1014+ let ex = aJ(invoke(aD, "updateDuckStats", [V, fraction(a, eJ, al)], nil))
1015+ $Tuple2(((dT ++ ay) :+ ScriptTransfer(aC, dW, af)), $Tuple3(ew, eq, ex))
10221016 }
10231017 }
10241018 }
10251019 }
10261020 }
10271021 else throw("Strict value is not equal to itself.")
10281022 }
10291023
10301024
10311025
1032-@Callable(eo)
1033-func buyMaterialsDuckDelivery (cO,cU,eA) = if (!(ae))
1034- then throw("Delivery feature is turned off!")
1035- else {
1036- let er = bH()
1037- if ((er == er))
1038- then {
1039- let V = valueOrErrorMessage(getString(aE, S(toString(eo.caller))), "You don't have a duck staked")
1040- if ((size(eo.payments) != 1))
1041- then throw("exactly 1 payment must be attached")
1026+@Callable(en)
1027+func buyMaterialsDuckDelivery (cN,cT,ez) = {
1028+ let eq = bG()
1029+ if ((eq == eq))
1030+ then {
1031+ let V = valueOrErrorMessage(getString(aD, S(toString(en.caller))), "You don't have a duck staked")
1032+ if ((size(en.payments) != 1))
1033+ then throw("exactly 1 payment must be attached")
1034+ else {
1035+ let dl = en.payments[0]
1036+ let dm = dl.amount
1037+ if (if (!(isDefined(dl.assetId)))
1038+ then true
1039+ else (value(dl.assetId) != af))
1040+ then throw("USDT payments only!")
1041+ else {
1042+ let es = bD(U(V))
1043+ let cS = split(es[I], "_")
1044+ let eK = cR(cS, ez, cN, cT)
1045+ let dT = eK._1
1046+ let eI = eK._2
1047+ let bB = eK._3
1048+ let eJ = eK._4
1049+ let ev = makeString([es[G], es[H], makeString(eI, "_"), es[J]], ":")
1050+ let ew = aG(invoke(aD, "updateBackpack", [V, ev], nil))
1051+ let ex = aJ(invoke(aD, "updateDuckStats", [V, fraction(a, eJ, al)], nil))
1052+ let eB = fraction(bB, aW, ak)
1053+ let dV = max([eB, k])
1054+ let dn = (bB + dV)
1055+ if ((dn > dm))
1056+ then throw((((((("Insufficient payment! Attached=" + aM(dm, 6)) + ", required=") + aM(bB, 6)) + "+") + aM(dV, 6)) + "(delivery fee)"))
1057+ else {
1058+ let ay = if (((dm - dn) > 0))
1059+ then [ScriptTransfer(en.caller, (dm - dn), af)]
1060+ else nil
1061+ let dW = (bB / 100)
1062+ let eC = valueOrElse(getInteger(aa), 0)
1063+ $Tuple2((((dT ++ ay) :+ ScriptTransfer(aC, dW, af)) :+ IntegerEntry(aa, (eC + dV))), $Tuple3(ew, eq, ex))
1064+ }
1065+ }
1066+ }
1067+ }
1068+ else throw("Strict value is not equal to itself.")
1069+ }
1070+
1071+
1072+
1073+@Callable(en)
1074+func buyMaterialsLandDelivery (cN,cT,Y,ez) = {
1075+ let eq = bG()
1076+ if ((eq == eq))
1077+ then if ((size(en.payments) != 1))
1078+ then throw("exactly 1 payment must be attached")
1079+ else {
1080+ let dl = en.payments[0]
1081+ let dm = dl.amount
1082+ if (if (!(isDefined(dl.assetId)))
1083+ then true
1084+ else (value(dl.assetId) != af))
1085+ then throw("USDT payments only!")
10421086 else {
1043- let dm = eo.payments[0]
1044- let dn = dm.amount
1045- if (if (!(isDefined(dm.assetId)))
1046- then true
1047- else (value(dm.assetId) != ag))
1048- then throw("USDT payments only!")
1087+ let eD = en.caller
1088+ let R = toString(eD)
1089+ let eE = value(assetInfo(fromBase58String(Y)))
1090+ if (!(isDefined(getInteger(aD, P(Y)))))
1091+ then throw((("NFT " + eE.name) + " is not staked"))
10491092 else {
1050- let et = bE(U(V))
1051- let cT = split(et[I], "_")
1052- let eL = cS(cT, eA, cO, cU)
1053- let dU = eL._1
1054- let eJ = eL._2
1055- let bC = eL._3
1056- let eK = eL._4
1057- let ew = makeString([et[G], et[H], makeString(eJ, "_"), et[J]], ":")
1058- let ex = aH(invoke(aE, "updateBackpack", [V, ew], nil))
1059- let ey = aK(invoke(aE, "updateDuckStats", [V, fraction(a, eK, am)], nil))
1060- let eC = fraction(bC, aX, al)
1061- let dW = max([eC, k])
1062- let do = (bC + dW)
1063- if ((do > dn))
1064- then throw((((((("Insufficient payment! Attached=" + aN(dn, 6)) + ", required=") + aN(bC, 6)) + "+") + aN(dW, 6)) + "(delivery fee)"))
1093+ let eF = valueOrErrorMessage(getString(aD, N(Y)), (("NFT " + eE.name) + " is orphaned"))
1094+ if ((eF != R))
1095+ then throw((e + " is not yours"))
10651096 else {
1066- let az = if (((dn - do) > 0))
1067- then [ScriptTransfer(eo.caller, (dn - do), ag)]
1068- else nil
1069- let dX = (bC / 100)
1070- let eD = valueOrElse(getInteger(aa), 0)
1071- $Tuple2((((dU ++ az) :+ ScriptTransfer(aD, dX, ag)) :+ IntegerEntry(aa, (eD + dW))), $Tuple3(ex, er, ey))
1097+ let dA = aG(invoke(aD, "getWarehouseREADONLY", [Y], nil))
1098+ let bZ = split_4C(dA, ":")
1099+ let cS = split(bZ[B], "_")
1100+ let eL = cR(cS, ez, cN, cT)
1101+ let dT = eL._1
1102+ let eI = eL._2
1103+ let bB = eL._3
1104+ let eJ = eL._4
1105+ let dI = makeString_2C([bZ[z], bZ[A], makeString(eI, "_"), bZ[C], bZ[D]], ":")
1106+ let dK = aG(invoke(aD, "saveWarehouse", [dI, Y], nil))
1107+ let ex = aJ(invoke(aD, "updateAccStats", [R, fraction(a, eJ, al)], nil))
1108+ let eB = fraction(bB, aW, ak)
1109+ let dV = max([eB, k])
1110+ let dn = (bB + dV)
1111+ if ((dn > dm))
1112+ then throw((((((("Insufficient payment! Attached=" + aM(dm, 6)) + ", required=") + aM(bB, 6)) + "+") + aM(dV, 6)) + "(delivery fee)"))
1113+ else {
1114+ let ay = if (((dm - dn) > 0))
1115+ then [ScriptTransfer(en.caller, (dm - dn), af)]
1116+ else nil
1117+ let dW = (bB / 100)
1118+ let eC = valueOrElse(getInteger(aa), 0)
1119+ $Tuple2((((dT ++ ay) :+ ScriptTransfer(aC, dW, af)) :+ IntegerEntry(aa, (eC + dV))), $Tuple3(dK, eq, ex))
1120+ }
10721121 }
10731122 }
10741123 }
10751124 }
1076- else throw("Strict value is not equal to itself.")
1077- }
1125+ else throw("Strict value is not equal to itself.")
1126+ }
10781127
10791128
10801129
1081-@Callable(eo)
1082-func buyMaterialsLandDelivery (cO,cU,Y,eA) = if (!(ae))
1083- then throw("Delivery feature is turned off!")
1084- else {
1085- let er = bH()
1086- if ((er == er))
1087- then if ((size(eo.payments) != 1))
1130+@Callable(en)
1131+func exchangeResources (cN) = {
1132+ let eq = bG()
1133+ if ((eq == eq))
1134+ then {
1135+ let V = valueOrErrorMessage(getString(aD, S(toString(en.caller))), "You don't have a duck staked")
1136+ if ((size(en.payments) != 1))
10881137 then throw("exactly 1 payment must be attached")
10891138 else {
1090- let dm = eo.payments[0]
1091- let dn = dm.amount
1092- if (if (!(isDefined(dm.assetId)))
1139+ let dl = en.payments[0]
1140+ let dm = dl.amount
1141+ if (if (!(isDefined(dl.assetId)))
10931142 then true
1094- else (value(dm.assetId) != ag))
1143+ else (value(dl.assetId) != af))
10951144 then throw("USDT payments only!")
10961145 else {
1097- let eE = eo.caller
1098- let R = toString(eE)
1099- let eF = value(assetInfo(fromBase58String(Y)))
1100- if (!(isDefined(getInteger(aE, P(Y)))))
1101- then throw((("NFT " + eF.name) + " is not staked"))
1146+ let er = split(valueOrElse(getString(aD, W(V)), g), "_")
1147+ if ((er[L] != "F"))
1148+ then throw(("Duck location type should be Factory, but is " + er[L]))
11021149 else {
1103- let eG = valueOrErrorMessage(getString(aE, N(Y)), (("NFT " + eF.name) + " is orphaned"))
1104- if ((eG != R))
1105- then throw((e + " is not yours"))
1150+ let es = bD(U(V))
1151+ let cL = split(es[H], "_")
1152+ let cS = split(es[I], "_")
1153+ let eM = cV(cL, cS, cN)
1154+ let eu = eM._1
1155+ let eI = eM._2
1156+ let bB = eM._3
1157+ let eN = eM._4
1158+ if ((bB > dm))
1159+ then throw(((("Insufficient payment! Attached=" + aM(dm, 6)) + ", required=") + aM(bB, 6)))
11061160 else {
1107- let dB = aH(invoke(aE, "getWarehouseREADONLY", [Y], nil))
1108- let ca = split_4C(dB, ":")
1109- let cT = split(ca[B], "_")
1110- let eM = cS(cT, eA, cO, cU)
1111- let dU = eM._1
1112- let eJ = eM._2
1113- let bC = eM._3
1114- let eK = eM._4
1115- let dJ = makeString_2C([ca[z], ca[A], makeString(eJ, "_"), ca[C], ca[D]], ":")
1116- let dL = aH(invoke(aE, "saveWarehouse", [dJ, Y], nil))
1117- let ey = aK(invoke(aE, "updateAccStats", [R, fraction(a, eK, am)], nil))
1118- let eC = fraction(bC, aX, al)
1119- let dW = max([eC, k])
1120- let do = (bC + dW)
1121- if ((do > dn))
1122- then throw((((((("Insufficient payment! Attached=" + aN(dn, 6)) + ", required=") + aN(bC, 6)) + "+") + aN(dW, 6)) + "(delivery fee)"))
1123- else {
1124- let az = if (((dn - do) > 0))
1125- then [ScriptTransfer(eo.caller, (dn - do), ag)]
1126- else nil
1127- let dX = (bC / 100)
1128- let eD = valueOrElse(getInteger(aa), 0)
1129- $Tuple2((((dU ++ az) :+ ScriptTransfer(aD, dX, ag)) :+ IntegerEntry(aa, (eD + dW))), $Tuple3(dL, er, ey))
1130- }
1131- }
1132- }
1133- }
1134- }
1135- else throw("Strict value is not equal to itself.")
1136- }
1137-
1138-
1139-
1140-@Callable(eo)
1141-func exchangeResources (cO) = {
1142- let er = bH()
1143- if ((er == er))
1144- then {
1145- let V = valueOrErrorMessage(getString(aE, S(toString(eo.caller))), "You don't have a duck staked")
1146- if ((size(eo.payments) != 1))
1147- then throw("exactly 1 payment must be attached")
1148- else {
1149- let dm = eo.payments[0]
1150- let dn = dm.amount
1151- if (if (!(isDefined(dm.assetId)))
1152- then true
1153- else (value(dm.assetId) != ag))
1154- then throw("USDT payments only!")
1155- else {
1156- let es = split(valueOrElse(getString(aE, W(V)), g), "_")
1157- if ((es[L] != "F"))
1158- then throw(("Duck location type should be Factory, but is " + es[L]))
1159- else {
1160- let et = bE(U(V))
1161- let cM = split(et[H], "_")
1162- let cT = split(et[I], "_")
1163- let eN = cW(cM, cT, cO)
1164- let ev = eN._1
1165- let eJ = eN._2
1166- let bC = eN._3
1167- let eO = eN._4
1168- if ((bC > dn))
1169- then throw(((("Insufficient payment! Attached=" + aN(dn, 6)) + ", required=") + aN(bC, 6)))
1170- else {
1171- let ew = makeString([et[G], makeString(ev, "_"), makeString(eJ, "_"), et[J]], ":")
1172- let ex = aH(invoke(aE, "updateBackpack", [V, ew], nil))
1173- let az = if (((dn - bC) > 0))
1174- then [ScriptTransfer(eo.caller, (dn - bC), ag)]
1161+ let ev = makeString([es[G], makeString(eu, "_"), makeString(eI, "_"), es[J]], ":")
1162+ let ew = aG(invoke(aD, "updateBackpack", [V, ev], nil))
1163+ let ay = if (((dm - bB) > 0))
1164+ then [ScriptTransfer(en.caller, (dm - bB), af)]
11751165 else nil
1176- let dX = (bC / 100)
1177- let ey = aK(invoke(aE, "updateDuckStats", [V, fraction(a, eO, am)], nil))
1178- $Tuple2((az :+ ScriptTransfer(aD, dX, ag)), $Tuple3(ex, er, ey))
1166+ let dW = (bB / 100)
1167+ let ex = aJ(invoke(aD, "updateDuckStats", [V, fraction(a, eN, al)], nil))
1168+ $Tuple2((ay :+ ScriptTransfer(aC, dW, af)), $Tuple3(ew, eq, ex))
11791169 }
11801170 }
11811171 }
11821172 }
11831173 }
11841174 else throw("Strict value is not equal to itself.")
11851175 }
11861176
11871177
11881178
1189-@Callable(eo)
1190-func exchangeResourcesDuckDelivery (cO) = if (!(ae))
1191- then throw("Delivery feature is turned off!")
1192- else {
1193- let er = bH()
1194- if ((er == er))
1195- then {
1196- let V = valueOrErrorMessage(getString(aE, S(toString(eo.caller))), "You don't have a duck staked")
1197- if ((size(eo.payments) != 1))
1198- then throw("exactly 1 payment must be attached")
1179+@Callable(en)
1180+func exchangeResourcesDuckDelivery (cN) = {
1181+ let eq = bG()
1182+ if ((eq == eq))
1183+ then {
1184+ let V = valueOrErrorMessage(getString(aD, S(toString(en.caller))), "You don't have a duck staked")
1185+ if ((size(en.payments) != 1))
1186+ then throw("exactly 1 payment must be attached")
1187+ else {
1188+ let dl = en.payments[0]
1189+ let dm = dl.amount
1190+ if (if (!(isDefined(dl.assetId)))
1191+ then true
1192+ else (value(dl.assetId) != af))
1193+ then throw("USDT payments only!")
1194+ else {
1195+ let es = bD(U(V))
1196+ let cL = split(es[H], "_")
1197+ let cS = split(es[I], "_")
1198+ let eO = cV(cL, cS, cN)
1199+ let eu = eO._1
1200+ let eI = eO._2
1201+ let bB = eO._3
1202+ let eN = eO._4
1203+ let eB = fraction(bB, aX, ak)
1204+ let dV = max([eB, l])
1205+ let dn = (bB + dV)
1206+ if ((dn > dm))
1207+ then throw((((((("Insufficient payment! Attached=" + aM(dm, 6)) + ", required=") + aM(bB, 6)) + "+") + aM(dV, 6)) + "(delivery fee)"))
1208+ else {
1209+ let ev = makeString([es[G], makeString(eu, "_"), makeString(eI, "_"), es[J]], ":")
1210+ let ew = aG(invoke(aD, "updateBackpack", [V, ev], nil))
1211+ let ay = if (((dm - dn) > 0))
1212+ then [ScriptTransfer(en.caller, (dm - dn), af)]
1213+ else nil
1214+ let dW = (bB / 100)
1215+ let ex = aJ(invoke(aD, "updateDuckStats", [V, fraction(a, eN, al)], nil))
1216+ let eC = valueOrElse(getInteger(aa), 0)
1217+ $Tuple2(((ay :+ ScriptTransfer(aC, dW, af)) :+ IntegerEntry(aa, (eC + dV))), $Tuple3(ew, eq, ex))
1218+ }
1219+ }
1220+ }
1221+ }
1222+ else throw("Strict value is not equal to itself.")
1223+ }
1224+
1225+
1226+
1227+@Callable(en)
1228+func exchangeResourcesLandDelivery (cN,Y) = {
1229+ let eq = bG()
1230+ if ((eq == eq))
1231+ then if ((size(en.payments) != 1))
1232+ then throw("exactly 1 payment must be attached")
1233+ else {
1234+ let dl = en.payments[0]
1235+ let dm = dl.amount
1236+ if (if (!(isDefined(dl.assetId)))
1237+ then true
1238+ else (value(dl.assetId) != af))
1239+ then throw("USDT payments only!")
11991240 else {
1200- let dm = eo.payments[0]
1201- let dn = dm.amount
1202- if (if (!(isDefined(dm.assetId)))
1203- then true
1204- else (value(dm.assetId) != ag))
1205- then throw("USDT payments only!")
1241+ let eD = en.caller
1242+ let R = toString(eD)
1243+ let eE = value(assetInfo(fromBase58String(Y)))
1244+ if (!(isDefined(getInteger(aD, P(Y)))))
1245+ then throw((("NFT " + eE.name) + " is not staked"))
12061246 else {
1207- let et = bE(U(V))
1208- let cM = split(et[H], "_")
1209- let cT = split(et[I], "_")
1210- let eP = cW(cM, cT, cO)
1211- let ev = eP._1
1212- let eJ = eP._2
1213- let bC = eP._3
1214- let eO = eP._4
1215- let eC = fraction(bC, aY, al)
1216- let dW = max([eC, l])
1217- let do = (bC + dW)
1218- if ((do > dn))
1219- then throw((((((("Insufficient payment! Attached=" + aN(dn, 6)) + ", required=") + aN(bC, 6)) + "+") + aN(dW, 6)) + "(delivery fee)"))
1247+ let eF = valueOrErrorMessage(getString(aD, N(Y)), (("NFT " + eE.name) + " is orphaned"))
1248+ if ((eF != R))
1249+ then throw((e + " is not yours"))
12201250 else {
1221- let ew = makeString([et[G], makeString(ev, "_"), makeString(eJ, "_"), et[J]], ":")
1222- let ex = aH(invoke(aE, "updateBackpack", [V, ew], nil))
1223- let az = if (((dn - do) > 0))
1224- then [ScriptTransfer(eo.caller, (dn - do), ag)]
1225- else nil
1226- let dX = (bC / 100)
1227- let ey = aK(invoke(aE, "updateDuckStats", [V, fraction(a, eO, am)], nil))
1228- let eD = valueOrElse(getInteger(aa), 0)
1229- $Tuple2(((az :+ ScriptTransfer(aD, dX, ag)) :+ IntegerEntry(aa, (eD + dW))), $Tuple3(ex, er, ey))
1251+ let dA = aG(invoke(aD, "getWarehouseREADONLY", [Y], nil))
1252+ let bZ = split_4C(dA, ":")
1253+ let cL = split(bZ[A], "_")
1254+ let cS = split(bZ[B], "_")
1255+ let eP = cV(cL, cS, cN)
1256+ let eu = eP._1
1257+ let eI = eP._2
1258+ let bB = eP._3
1259+ let eN = eP._4
1260+ let dI = makeString_2C([bZ[z], makeString(eu, "_"), makeString(eI, "_"), bZ[C], bZ[D]], ":")
1261+ let dK = aG(invoke(aD, "saveWarehouse", [dI, Y], nil))
1262+ let ex = aJ(invoke(aD, "updateAccStats", [R, fraction(a, eN, al)], nil))
1263+ let eB = fraction(bB, aX, ak)
1264+ let dV = max([eB, l])
1265+ let dn = (bB + dV)
1266+ if ((dn > dm))
1267+ then throw((((((("Insufficient payment! Attached=" + aM(dm, 6)) + ", required=") + aM(bB, 6)) + "+") + aM(dV, 6)) + "(delivery fee)"))
1268+ else {
1269+ let ay = if (((dm - dn) > 0))
1270+ then [ScriptTransfer(en.caller, (dm - dn), af)]
1271+ else nil
1272+ let dW = (bB / 100)
1273+ let eC = valueOrElse(getInteger(aa), 0)
1274+ $Tuple2(((ay :+ ScriptTransfer(aC, dW, af)) :+ IntegerEntry(aa, (eC + dV))), $Tuple3(dK, eq, ex))
1275+ }
12301276 }
12311277 }
12321278 }
12331279 }
1234- else throw("Strict value is not equal to itself.")
1235- }
1280+ else throw("Strict value is not equal to itself.")
1281+ }
12361282
12371283
12381284
1239-@Callable(eo)
1240-func exchangeResourcesLandDelivery (cO,Y) = if (!(ae))
1241- then throw("Delivery feature is turned off!")
1242- else {
1243- let er = bH()
1244- if ((er == er))
1245- then if ((size(eo.payments) != 1))
1246- then throw("exactly 1 payment must be attached")
1247- else {
1248- let dm = eo.payments[0]
1249- let dn = dm.amount
1250- if (if (!(isDefined(dm.assetId)))
1251- then true
1252- else (value(dm.assetId) != ag))
1253- then throw("USDT payments only!")
1254- else {
1255- let eE = eo.caller
1256- let R = toString(eE)
1257- let eF = value(assetInfo(fromBase58String(Y)))
1258- if (!(isDefined(getInteger(aE, P(Y)))))
1259- then throw((("NFT " + eF.name) + " is not staked"))
1260- else {
1261- let eG = valueOrErrorMessage(getString(aE, N(Y)), (("NFT " + eF.name) + " is orphaned"))
1262- if ((eG != R))
1263- then throw((e + " is not yours"))
1264- else {
1265- let dB = aH(invoke(aE, "getWarehouseREADONLY", [Y], nil))
1266- let ca = split_4C(dB, ":")
1267- let cM = split(ca[A], "_")
1268- let cT = split(ca[B], "_")
1269- let eQ = cW(cM, cT, cO)
1270- let ev = eQ._1
1271- let eJ = eQ._2
1272- let bC = eQ._3
1273- let eO = eQ._4
1274- let dJ = makeString_2C([ca[z], makeString(ev, "_"), makeString(eJ, "_"), ca[C], ca[D]], ":")
1275- let dL = aH(invoke(aE, "saveWarehouse", [dJ, Y], nil))
1276- let ey = aK(invoke(aE, "updateAccStats", [R, fraction(a, eO, am)], nil))
1277- let eC = fraction(bC, aY, al)
1278- let dW = max([eC, l])
1279- let do = (bC + dW)
1280- if ((do > dn))
1281- then throw((((((("Insufficient payment! Attached=" + aN(dn, 6)) + ", required=") + aN(bC, 6)) + "+") + aN(dW, 6)) + "(delivery fee)"))
1282- else {
1283- let az = if (((dn - do) > 0))
1284- then [ScriptTransfer(eo.caller, (dn - do), ag)]
1285- else nil
1286- let dX = (bC / 100)
1287- let eD = valueOrElse(getInteger(aa), 0)
1288- $Tuple2(((az :+ ScriptTransfer(aD, dX, ag)) :+ IntegerEntry(aa, (eD + dW))), $Tuple3(dL, er, ey))
1289- }
1290- }
1291- }
1292- }
1293- }
1294- else throw("Strict value is not equal to itself.")
1295- }
1296-
1297-
1298-
1299-@Callable(eo)
1300-func craftGoods (ec,ed) = {
1301- let er = bH()
1302- if ((er == er))
1303- then if ((size(eo.payments) != 1))
1285+@Callable(en)
1286+func craftGoods (eb,ec) = {
1287+ let eq = bG()
1288+ if ((eq == eq))
1289+ then if ((size(en.payments) != 1))
13041290 then throw("exactly 1 payment must be attached")
13051291 else {
1306- let dm = eo.payments[0]
1307- let dn = dm.amount
1308- if (if (!(isDefined(dm.assetId)))
1292+ let dl = en.payments[0]
1293+ let dm = dl.amount
1294+ if (if (!(isDefined(dl.assetId)))
13091295 then true
1310- else (value(dm.assetId) != ag))
1296+ else (value(dl.assetId) != af))
13111297 then throw("USDT payments only!")
1312- else if ((dn != al))
1313- then throw((("exactly " + aN(m, 6)) + " USDT must be attached as payment"))
1298+ else if ((dm != ak))
1299+ then throw((("exactly " + aM(m, 6)) + " USDT must be attached as payment"))
13141300 else {
1315- let V = valueOrErrorMessage(getString(aE, S(toString(eo.caller))), "You don't have a duck staked")
1316- let es = split(valueOrElse(getString(aE, W(V)), g), "_")
1317- if ((es[L] != "M"))
1318- then throw(("Duck location type should be Manufactory, but is " + es[L]))
1301+ let V = valueOrErrorMessage(getString(aD, S(toString(en.caller))), "You don't have a duck staked")
1302+ let er = split(valueOrElse(getString(aD, W(V)), g), "_")
1303+ if ((er[L] != "M"))
1304+ then throw(("Duck location type should be Manufactory, but is " + er[L]))
13191305 else {
1320- let eR = es[K]
1321- let et = bE(U(V))
1322- let cT = split(et[I], "_")
1323- let ea = if ((et[J] == ""))
1306+ let eQ = er[K]
1307+ let es = bD(U(V))
1308+ let cS = split(es[I], "_")
1309+ let dZ = if ((es[J] == ""))
13241310 then nil
1325- else split_4C(et[J], "_")
1326- let eS = dZ(cT, ea, eR, ec, ed)
1327- let eJ = eS._1
1328- let ej = eS._2
1329- let eT = eS._3
1330- let ew = makeString([et[G], et[H], makeString(eJ, "_"), makeString_2C(ej, "_")], ":")
1331- let eU = aH(invoke(aE, "updateBackpack", [V, ew], nil))
1332- let ey = aK(invoke(aE, "updateDuckStats", [V, fraction(b, eT, am)], nil))
1333- $Tuple2(nil, $Tuple3(eU, er, ey))
1311+ else split_4C(es[J], "_")
1312+ let eR = dY(cS, dZ, eQ, eb, ec)
1313+ let eI = eR._1
1314+ let ei = eR._2
1315+ let eS = eR._3
1316+ let ev = makeString([es[G], es[H], makeString(eI, "_"), makeString_2C(ei, "_")], ":")
1317+ let eT = aG(invoke(aD, "updateBackpack", [V, ev], nil))
1318+ let ex = aJ(invoke(aD, "updateDuckStats", [V, fraction(b, eS, al)], nil))
1319+ $Tuple2(nil, $Tuple3(eT, eq, ex))
13341320 }
13351321 }
13361322 }
13371323 else throw("Strict value is not equal to itself.")
13381324 }
13391325
13401326
13411327
1342-@Callable(eo)
1343-func craftGoodsDuckDelivery (ec,ed,eb) = if (!(ae))
1344- then throw("Delivery feature is turned off!")
1345- else {
1346- let er = bH()
1347- if ((er == er))
1348- then {
1349- let V = valueOrErrorMessage(getString(aE, S(toString(eo.caller))), "You don't have a duck staked")
1350- if ((size(eo.payments) != 1))
1351- then throw("exactly 1 payment must be attached")
1328+@Callable(en)
1329+func craftGoodsDuckDelivery (eb,ec,ea) = {
1330+ let eq = bG()
1331+ if ((eq == eq))
1332+ then {
1333+ let V = valueOrErrorMessage(getString(aD, S(toString(en.caller))), "You don't have a duck staked")
1334+ if ((size(en.payments) != 1))
1335+ then throw("exactly 1 payment must be attached")
1336+ else {
1337+ let dl = en.payments[0]
1338+ let dm = dl.amount
1339+ if (if (!(isDefined(dl.assetId)))
1340+ then true
1341+ else (value(dl.assetId) != af))
1342+ then throw("USDT payments only!")
1343+ else {
1344+ let es = bD(U(V))
1345+ let cS = split(es[I], "_")
1346+ let dZ = if ((es[J] == ""))
1347+ then nil
1348+ else split_4C(es[J], "_")
1349+ let eU = dY(cS, dZ, ea, eb, ec)
1350+ let eI = eU._1
1351+ let ei = eU._2
1352+ let eS = eU._3
1353+ let ev = makeString([es[G], es[H], makeString(eI, "_"), makeString_2C(ei, "_")], ":")
1354+ let ew = aG(invoke(aD, "updateBackpack", [V, ev], nil))
1355+ let ex = aJ(invoke(aD, "updateDuckStats", [V, fraction(b, eS, al)], nil))
1356+ let eB = fraction(ec, k, n)
1357+ let dV = max([eB, k])
1358+ let dn = (m + dV)
1359+ if ((dn > dm))
1360+ then throw((((((("Insufficient payment! Attached=" + aM(dm, 6)) + ", required=") + aM(m, 6)) + "+") + aM(dV, 6)) + "(delivery fee)"))
1361+ else {
1362+ let ay = if (((dm - dn) > 0))
1363+ then [ScriptTransfer(en.caller, (dm - dn), af)]
1364+ else nil
1365+ let eC = valueOrElse(getInteger(aa), 0)
1366+ $Tuple2((ay :+ IntegerEntry(aa, (eC + dV))), $Tuple3(ew, eq, ex))
1367+ }
1368+ }
1369+ }
1370+ }
1371+ else throw("Strict value is not equal to itself.")
1372+ }
1373+
1374+
1375+
1376+@Callable(en)
1377+func craftGoodsLandDelivery (eb,ec,Y,ea) = {
1378+ let eq = bG()
1379+ if ((eq == eq))
1380+ then if ((size(en.payments) != 1))
1381+ then throw("exactly 1 payment must be attached")
1382+ else {
1383+ let dl = en.payments[0]
1384+ let dm = dl.amount
1385+ if (if (!(isDefined(dl.assetId)))
1386+ then true
1387+ else (value(dl.assetId) != af))
1388+ then throw("USDT payments only!")
13521389 else {
1353- let dm = eo.payments[0]
1354- let dn = dm.amount
1355- if (if (!(isDefined(dm.assetId)))
1356- then true
1357- else (value(dm.assetId) != ag))
1358- then throw("USDT payments only!")
1390+ let eD = en.caller
1391+ let R = toString(eD)
1392+ let eE = value(assetInfo(fromBase58String(Y)))
1393+ if (!(isDefined(getInteger(aD, P(Y)))))
1394+ then throw((("NFT " + eE.name) + " is not staked"))
13591395 else {
1360- let et = bE(U(V))
1361- let cT = split(et[I], "_")
1362- let ea = if ((et[J] == ""))
1363- then nil
1364- else split_4C(et[J], "_")
1365- let eV = dZ(cT, ea, eb, ec, ed)
1366- let eJ = eV._1
1367- let ej = eV._2
1368- let eT = eV._3
1369- let ew = makeString([et[G], et[H], makeString(eJ, "_"), makeString_2C(ej, "_")], ":")
1370- let ex = aH(invoke(aE, "updateBackpack", [V, ew], nil))
1371- let ey = aK(invoke(aE, "updateDuckStats", [V, fraction(b, eT, am)], nil))
1372- let eC = fraction(ed, k, n)
1373- let dW = max([eC, k])
1374- let do = (m + dW)
1375- if ((do > dn))
1376- then throw((((((("Insufficient payment! Attached=" + aN(dn, 6)) + ", required=") + aN(m, 6)) + "+") + aN(dW, 6)) + "(delivery fee)"))
1396+ let eF = valueOrErrorMessage(getString(aD, N(Y)), (("NFT " + eE.name) + " is orphaned"))
1397+ if ((eF != R))
1398+ then throw((e + " is not yours"))
13771399 else {
1378- let az = if (((dn - do) > 0))
1379- then [ScriptTransfer(eo.caller, (dn - do), ag)]
1380- else nil
1381- let eD = valueOrElse(getInteger(aa), 0)
1382- $Tuple2((az :+ IntegerEntry(aa, (eD + dW))), $Tuple3(ex, er, ey))
1400+ let dA = aG(invoke(aD, "getWarehouseREADONLY", [Y], nil))
1401+ let bZ = split_4C(dA, ":")
1402+ let cS = split(bZ[B], "_")
1403+ let dZ = if ((bZ[C] == ""))
1404+ then nil
1405+ else split_4C(bZ[C], "_")
1406+ let eV = dY(cS, dZ, ea, eb, ec)
1407+ let eI = eV._1
1408+ let ei = eV._2
1409+ let eS = eV._3
1410+ let dI = makeString_2C([bZ[z], bZ[A], makeString(eI, "_"), makeString_2C(ei, "_"), bZ[D]], ":")
1411+ let dK = aG(invoke(aD, "saveWarehouse", [dI, Y], nil))
1412+ let ex = aJ(invoke(aD, "updateAccStats", [R, fraction(b, eS, al)], nil))
1413+ let eB = fraction(ec, k, n)
1414+ let dV = max([eB, k])
1415+ let dn = (m + dV)
1416+ if ((dn > dm))
1417+ then throw((((((("Insufficient payment! Attached=" + aM(dm, 6)) + ", required=") + aM(m, 6)) + "+") + aM(dV, 6)) + "(delivery fee)"))
1418+ else {
1419+ let ay = if (((dm - dn) > 0))
1420+ then [ScriptTransfer(en.caller, (dm - dn), af)]
1421+ else nil
1422+ let eC = valueOrElse(getInteger(aa), 0)
1423+ $Tuple2((ay :+ IntegerEntry(aa, (eC + dV))), $Tuple3(dK, eq, ex))
1424+ }
13831425 }
13841426 }
13851427 }
13861428 }
1387- else throw("Strict value is not equal to itself.")
1388- }
1429+ else throw("Strict value is not equal to itself.")
1430+ }
13891431
13901432
13911433
1392-@Callable(eo)
1393-func craftGoodsLandDelivery (ec,ed,Y,eb) = if (!(ae))
1394- then throw("Delivery feature is turned off!")
1395- else {
1396- let er = bH()
1397- if ((er == er))
1398- then if ((size(eo.payments) != 1))
1399- then throw("exactly 1 payment must be attached")
1400- else {
1401- let dm = eo.payments[0]
1402- let dn = dm.amount
1403- if (if (!(isDefined(dm.assetId)))
1404- then true
1405- else (value(dm.assetId) != ag))
1406- then throw("USDT payments only!")
1407- else {
1408- let eE = eo.caller
1409- let R = toString(eE)
1410- let eF = value(assetInfo(fromBase58String(Y)))
1411- if (!(isDefined(getInteger(aE, P(Y)))))
1412- then throw((("NFT " + eF.name) + " is not staked"))
1413- else {
1414- let eG = valueOrErrorMessage(getString(aE, N(Y)), (("NFT " + eF.name) + " is orphaned"))
1415- if ((eG != R))
1416- then throw((e + " is not yours"))
1417- else {
1418- let dB = aH(invoke(aE, "getWarehouseREADONLY", [Y], nil))
1419- let ca = split_4C(dB, ":")
1420- let cT = split(ca[B], "_")
1421- let ea = if ((ca[C] == ""))
1422- then nil
1423- else split_4C(ca[C], "_")
1424- let eW = dZ(cT, ea, eb, ec, ed)
1425- let eJ = eW._1
1426- let ej = eW._2
1427- let eT = eW._3
1428- let dJ = makeString_2C([ca[z], ca[A], makeString(eJ, "_"), makeString_2C(ej, "_"), ca[D]], ":")
1429- let dL = aH(invoke(aE, "saveWarehouse", [dJ, Y], nil))
1430- let ey = aK(invoke(aE, "updateAccStats", [R, fraction(b, eT, am)], nil))
1431- let eC = fraction(ed, k, n)
1432- let dW = max([eC, k])
1433- let do = (m + dW)
1434- if ((do > dn))
1435- then throw((((((("Insufficient payment! Attached=" + aN(dn, 6)) + ", required=") + aN(m, 6)) + "+") + aN(dW, 6)) + "(delivery fee)"))
1436- else {
1437- let az = if (((dn - do) > 0))
1438- then [ScriptTransfer(eo.caller, (dn - do), ag)]
1439- else nil
1440- let eD = valueOrElse(getInteger(aa), 0)
1441- $Tuple2((az :+ IntegerEntry(aa, (eD + dW))), $Tuple3(dL, er, ey))
1442- }
1443- }
1444- }
1445- }
1446- }
1447- else throw("Strict value is not equal to itself.")
1448- }
1449-
1450-
1451-
1452-@Callable(eo)
1453-func setWarehouseOrder (eX,Y) = {
1454- let eE = eo.originCaller
1455- let R = toString(eE)
1456- let eU = if ((eE != aD))
1457- then bG()
1434+@Callable(en)
1435+func setWarehouseOrder (eW,Y) = {
1436+ let eD = en.originCaller
1437+ let R = toString(eD)
1438+ let eT = if ((eD != aC))
1439+ then bF()
14581440 else false
1459- let eF = value(assetInfo(fromBase58String(Y)))
1460- if (!(isDefined(getInteger(aE, P(Y)))))
1461- then throw((("NFT " + eF.name) + " is not staked"))
1441+ let eE = value(assetInfo(fromBase58String(Y)))
1442+ if (!(isDefined(getInteger(aD, P(Y)))))
1443+ then throw((("NFT " + eE.name) + " is not staked"))
14621444 else {
1463- let eG = valueOrErrorMessage(getString(aE, N(Y)), (("NFT " + eF.name) + " is orphaned"))
1464- if (if ((eE != aD))
1465- then (eG != R)
1445+ let eF = valueOrErrorMessage(getString(aD, N(Y)), (("NFT " + eE.name) + " is orphaned"))
1446+ if (if ((eD != aC))
1447+ then (eF != R)
14661448 else false)
14671449 then throw((e + " is not yours"))
14681450 else {
1469- let eY = split_4C(eX, ":")
1470- let dB = aH(invoke(aE, "getWarehouseREADONLY", [Y], nil))
1471- let ca = split_4C(dB, ":")
1472- let eZ = split(ca[D], "_")
1473- let fa = parseIntValue(eZ[F])
1474- let bg = X(Y)
1475- let cb = bf(bg)
1476- let ep = bZ(ca, cb, eY)
1477- let fb = ep._4
1478- let fc = ep._5
1479- let fd = ep._7
1480- let fe = (fb + fc)
1481- let ff = ((fa - fd) - fe)
1482- if ((0 > ff))
1483- then throw((((((("Attempt to reserve " + toString(fb)) + " space for buy orders, and ") + toString(fc)) + " space for sell orders (and occupied=") + toString(fd)) + "), leads to negative free space"))
1451+ let eX = split_4C(eW, ":")
1452+ let dA = aG(invoke(aD, "getWarehouseREADONLY", [Y], nil))
1453+ let bZ = split_4C(dA, ":")
1454+ let eY = split(bZ[D], "_")
1455+ let eZ = parseIntValue(eY[F])
1456+ let bf = X(Y)
1457+ let ca = be(bf)
1458+ let eo = bY(bZ, ca, eX)
1459+ let fa = eo._4
1460+ let fb = eo._5
1461+ let fc = eo._7
1462+ let fd = (fa + fb)
1463+ let fe = ((eZ - fc) - fd)
1464+ if ((0 > fe))
1465+ then throw((((((("Attempt to reserve " + toString(fa)) + " space for buy orders, and ") + toString(fb)) + " space for sell orders (and occupied=") + toString(fc)) + "), leads to negative free space"))
14841466 else {
1485- let dJ = makeString_2C([ca[z], makeString(ep._1, "_"), makeString(ep._2, "_"), makeString_2C(ep._3, "_"), toString(fe)], ":")
1486- let dL = aH(invoke(aE, "saveWarehouse", [dJ, Y], nil))
1487- let fg = ep._6
1488- let fh = if ((fg > 0))
1489- then if ((size(eo.payments) != 1))
1467+ let dI = makeString_2C([bZ[z], makeString(eo._1, "_"), makeString(eo._2, "_"), makeString_2C(eo._3, "_"), toString(fd)], ":")
1468+ let dK = aG(invoke(aD, "saveWarehouse", [dI, Y], nil))
1469+ let ff = eo._6
1470+ let fg = if ((ff > 0))
1471+ then if ((size(en.payments) != 1))
14901472 then throw("exactly 1 payment must be attached")
14911473 else {
1492- let dm = eo.payments[0]
1493- let dn = dm.amount
1494- let fi = valueOrErrorMessage(dm.assetId, "WAVES can't be used as payment")
1495- if ((fi != ag))
1474+ let dl = en.payments[0]
1475+ let dm = dl.amount
1476+ let fh = valueOrErrorMessage(dl.assetId, "WAVES can't be used as payment")
1477+ if ((fh != af))
14961478 then throw("USDT payments only!")
1497- else if ((dn != fg))
1498- then throw(("Payment needed is " + toString(fg)))
1499- else [StringEntry(bg, eX)]
1479+ else if ((dm != ff))
1480+ then throw(("Payment needed is " + toString(ff)))
1481+ else [StringEntry(bf, eW)]
15001482 }
1501- else if ((fg == 0))
1502- then if ((size(eo.payments) != 0))
1483+ else if ((ff == 0))
1484+ then if ((size(en.payments) != 0))
15031485 then throw("No payments needed")
1504- else [StringEntry(bg, eX)]
1505- else if ((size(eo.payments) != 0))
1486+ else [StringEntry(bf, eW)]
1487+ else if ((size(en.payments) != 0))
15061488 then throw("No payments needed")
1507- else [ScriptTransfer(addressFromStringValue(eG), -(fg), ag), StringEntry(bg, eX)]
1508- $Tuple2(fh, $Tuple2(eU, dL))
1489+ else [ScriptTransfer(addressFromStringValue(eF), -(ff), af), StringEntry(bf, eW)]
1490+ $Tuple2(fg, $Tuple2(eT, dK))
15091491 }
15101492 }
15111493 }
15121494 }
15131495
15141496
15151497
1516-@Callable(eo)
1517-func acceptWarehouseOrder (ds,dr,V) = {
1518- let er = bH()
1519- if ((er == er))
1498+@Callable(en)
1499+func acceptWarehouseOrder (dr,dq,V) = {
1500+ let eq = bG()
1501+ if ((eq == eq))
15201502 then {
1521- let dg = eo.originCaller
1522- let db = toString(dg)
1523- let fj = valueOrErrorMessage(getString(aE, S(db)), "You don't have a duck staked")
1524- let es = valueOrElse(getString(aE, W(fj)), g)
1525- let fk = split(value(es), "_")
1526- if ((fk[L] != "L"))
1527- then throw((("Duck location type is " + fk[L]) + ", but should be L"))
1528- else if ((fj != V))
1529- then throw(((("Your staked duck is " + fj) + ", but passed ") + V))
1503+ let df = en.originCaller
1504+ let da = toString(df)
1505+ let fi = valueOrErrorMessage(getString(aD, S(da)), "You don't have a duck staked")
1506+ let er = valueOrElse(getString(aD, W(fi)), g)
1507+ let fj = split(value(er), "_")
1508+ if ((fj[L] != "L"))
1509+ then throw((("Duck location type is " + fj[L]) + ", but should be L"))
1510+ else if ((fi != V))
1511+ then throw(((("Your staked duck is " + fi) + ", but passed ") + V))
15301512 else {
1531- let bF = U(V)
1532- let et = bE(bF)
1533- let dt = split(et[H], "_")
1534- let du = split(et[I], "_")
1535- let dv = if ((et[J] == ""))
1513+ let bE = U(V)
1514+ let es = bD(bE)
1515+ let ds = split(es[H], "_")
1516+ let dt = split(es[I], "_")
1517+ let du = if ((es[J] == ""))
15361518 then nil
1537- else split_4C(et[J], "_")
1538- let fl = dq(dr, db, ds, dt, du, dv)
1539- let fm = fl._1
1540- let fn = fl._2
1541- let fo = fl._3
1542- let fp = fl._4
1543- let da = fl._5
1544- let di = fl._6
1545- let fq = fl._7
1546- let dk = fl._8
1547- let fr = fl._9
1548- let dM = fl._10
1549- let fs = [fm, cZ(da, db, 0)]
1550- let ft = dh(di, eo.payments, dk, 0)
1551- let fu = makeString_2C([et[G], makeString(fn, "_"), makeString(fo, "_"), makeString_2C(fp, "_")], ":")
1552- let fv = aH(invoke(aE, "updateBackpack", [V, fu], nil))
1553- let fw = aK(invoke(aE, "updateDuckStats", [V, fraction(d, fq, am)], nil))
1554- $Tuple2((fs ++ ft), $Tuple5(er, fr, fv, fw, dM))
1519+ else split_4C(es[J], "_")
1520+ let fk = dp(dq, da, dr, ds, dt, du)
1521+ let fl = fk._1
1522+ let fm = fk._2
1523+ let fn = fk._3
1524+ let fo = fk._4
1525+ let cZ = fk._5
1526+ let dh = fk._6
1527+ let fp = fk._7
1528+ let dj = fk._8
1529+ let fq = fk._9
1530+ let dL = fk._10
1531+ let fr = [fl, cY(cZ, da, 0)]
1532+ let fs = dg(dh, en.payments, dj, 0)
1533+ let ft = makeString_2C([es[G], makeString(fm, "_"), makeString(fn, "_"), makeString_2C(fo, "_")], ":")
1534+ let fu = aG(invoke(aD, "updateBackpack", [V, ft], nil))
1535+ let fv = aJ(invoke(aD, "updateDuckStats", [V, fraction(d, fp, al)], nil))
1536+ $Tuple2((fr ++ fs), $Tuple5(eq, fq, fu, fv, dL))
15551537 }
15561538 }
15571539 else throw("Strict value is not equal to itself.")
15581540 }
15591541
15601542
15611543
1562-@Callable(eo)
1563-func acceptShopOrderDuckDelivery (fx,dr) = if (!(ae))
1564- then throw("Delivery feature is turned off!")
1565- else {
1566- let er = bH()
1567- if ((er == er))
1568- then {
1569- let dg = eo.originCaller
1570- let db = toString(dg)
1571- let V = valueOrErrorMessage(getString(aE, S(db)), "You don't have a duck staked")
1572- let bF = U(V)
1573- let et = bE(bF)
1574- let dt = split(et[H], "_")
1575- let du = split(et[I], "_")
1576- let dv = if ((et[J] == ""))
1577- then nil
1578- else split_4C(et[J], "_")
1579- let fy = dq(dr, db, fx, dt, du, dv)
1580- let fm = fy._1
1581- let fn = fy._2
1582- let fo = fy._3
1583- let fp = fy._4
1584- let da = fy._5
1585- let di = fy._6
1586- let fq = fy._7
1587- let dk = fy._8
1588- let fr = fy._9
1589- let dM = fy._10
1590- let fz = fraction((di + da), aX, al)
1591- let fA = max([fz, k])
1592- let dl = fraction(fA, di, (di + da))
1593- let dc = (fA - dl)
1594- let eD = valueOrElse(getInteger(aa), 0)
1595- let fs = [fm, cZ(da, db, dc)]
1596- let ft = dh(di, eo.payments, dk, dl)
1597- let fu = makeString_2C([et[G], makeString(fn, "_"), makeString(fo, "_"), makeString_2C(fp, "_")], ":")
1598- let fv = aH(invoke(aE, "updateBackpack", [V, fu], nil))
1599- let fw = aK(invoke(aE, "updateDuckStats", [V, fraction(d, fq, am)], nil))
1600- $Tuple2(((fs ++ ft) :+ IntegerEntry(aa, (eD + fA))), $Tuple5(er, fr, fv, fw, dM))
1601- }
1602- else throw("Strict value is not equal to itself.")
1603- }
1544+@Callable(en)
1545+func acceptShopOrderDuckDelivery (fw,dq) = {
1546+ let eq = bG()
1547+ if ((eq == eq))
1548+ then {
1549+ let df = en.originCaller
1550+ let da = toString(df)
1551+ let V = valueOrErrorMessage(getString(aD, S(da)), "You don't have a duck staked")
1552+ let bE = U(V)
1553+ let es = bD(bE)
1554+ let ds = split(es[H], "_")
1555+ let dt = split(es[I], "_")
1556+ let du = if ((es[J] == ""))
1557+ then nil
1558+ else split_4C(es[J], "_")
1559+ let fx = dp(dq, da, fw, ds, dt, du)
1560+ let fl = fx._1
1561+ let fm = fx._2
1562+ let fn = fx._3
1563+ let fo = fx._4
1564+ let cZ = fx._5
1565+ let dh = fx._6
1566+ let fp = fx._7
1567+ let dj = fx._8
1568+ let fq = fx._9
1569+ let dL = fx._10
1570+ let fy = fraction((dh + cZ), aW, ak)
1571+ let fz = max([fy, k])
1572+ let dk = fraction(fz, dh, (dh + cZ))
1573+ let db = (fz - dk)
1574+ let eC = valueOrElse(getInteger(aa), 0)
1575+ let fr = [fl, cY(cZ, da, db)]
1576+ let fs = dg(dh, en.payments, dj, dk)
1577+ let ft = makeString_2C([es[G], makeString(fm, "_"), makeString(fn, "_"), makeString_2C(fo, "_")], ":")
1578+ let fu = aG(invoke(aD, "updateBackpack", [V, ft], nil))
1579+ let fv = aJ(invoke(aD, "updateDuckStats", [V, fraction(d, fp, al)], nil))
1580+ $Tuple2(((fr ++ fs) :+ IntegerEntry(aa, (eC + fz))), $Tuple5(eq, fq, fu, fv, dL))
1581+ }
1582+ else throw("Strict value is not equal to itself.")
1583+ }
16041584
16051585
16061586
1607-@Callable(eo)
1608-func acceptShopOrderLandDelivery (fx,dr,fB) = if (!(ae))
1609- then throw("Delivery feature is turned off!")
1610- else {
1611- let er = bH()
1612- if ((er == er))
1613- then {
1614- let dg = eo.originCaller
1615- let db = toString(dg)
1616- let eF = value(assetInfo(fromBase58String(fB)))
1617- if (!(isDefined(getInteger(aE, P(fB)))))
1618- then throw((("NFT " + eF.name) + " is not staked"))
1619- else {
1620- let eG = valueOrErrorMessage(getString(aE, N(fB)), (("NFT " + eF.name) + " is orphaned"))
1621- if ((eG != db))
1622- then throw((e + " is not yours"))
1623- else {
1624- let dB = aH(invoke(aE, "getWarehouseREADONLY", [fB], nil))
1625- let ca = split_4C(dB, ":")
1626- let cM = split(ca[A], "_")
1627- let cT = split(ca[B], "_")
1628- let ea = if ((ca[C] == ""))
1629- then nil
1630- else split_4C(ca[C], "_")
1631- let fC = dq(dr, db, fx, cM, cT, ea)
1632- let fm = fC._1
1633- let fn = fC._2
1634- let fo = fC._3
1635- let fp = fC._4
1636- let da = fC._5
1637- let di = fC._6
1638- let fq = fC._7
1639- let dk = fC._8
1640- let fr = fC._9
1641- let dM = fC._10
1642- let fz = fraction((di + da), aX, al)
1643- let fA = max([fz, k])
1644- let dl = fraction(fA, di, (di + da))
1645- let dc = (fA - dl)
1646- let eD = valueOrElse(getInteger(aa), 0)
1647- let fs = [fm, cZ(da, db, dc)]
1648- let ft = dh(di, eo.payments, dk, dl)
1649- let dJ = makeString_2C([ca[z], makeString(fn, "_"), makeString(fo, "_"), makeString(fp, "_"), ca[D]], ":")
1650- let dL = aH(invoke(aE, "saveWarehouse", [dJ, fB], nil))
1651- let ey = aK(invoke(aE, "updateAccStats", [db, fraction(d, fq, am)], nil))
1652- $Tuple2(((fs ++ ft) :+ IntegerEntry(aa, (eD + fA))), $Tuple5(er, fr, dL, ey, dM))
1653- }
1654- }
1655- }
1656- else throw("Strict value is not equal to itself.")
1657- }
1587+@Callable(en)
1588+func acceptShopOrderLandDelivery (fw,dq,fA) = {
1589+ let eq = bG()
1590+ if ((eq == eq))
1591+ then {
1592+ let df = en.originCaller
1593+ let da = toString(df)
1594+ let eE = value(assetInfo(fromBase58String(fA)))
1595+ if (!(isDefined(getInteger(aD, P(fA)))))
1596+ then throw((("NFT " + eE.name) + " is not staked"))
1597+ else {
1598+ let eF = valueOrErrorMessage(getString(aD, N(fA)), (("NFT " + eE.name) + " is orphaned"))
1599+ if ((eF != da))
1600+ then throw((e + " is not yours"))
1601+ else {
1602+ let dA = aG(invoke(aD, "getWarehouseREADONLY", [fA], nil))
1603+ let bZ = split_4C(dA, ":")
1604+ let cL = split(bZ[A], "_")
1605+ let cS = split(bZ[B], "_")
1606+ let dZ = if ((bZ[C] == ""))
1607+ then nil
1608+ else split_4C(bZ[C], "_")
1609+ let fB = dp(dq, da, fw, cL, cS, dZ)
1610+ let fl = fB._1
1611+ let fm = fB._2
1612+ let fn = fB._3
1613+ let fo = fB._4
1614+ let cZ = fB._5
1615+ let dh = fB._6
1616+ let fp = fB._7
1617+ let dj = fB._8
1618+ let fq = fB._9
1619+ let dL = fB._10
1620+ let fy = fraction((dh + cZ), aW, ak)
1621+ let fz = max([fy, k])
1622+ let dk = fraction(fz, dh, (dh + cZ))
1623+ let db = (fz - dk)
1624+ let eC = valueOrElse(getInteger(aa), 0)
1625+ let fr = [fl, cY(cZ, da, db)]
1626+ let fs = dg(dh, en.payments, dj, dk)
1627+ let dI = makeString_2C([bZ[z], makeString(fm, "_"), makeString(fn, "_"), makeString(fo, "_"), bZ[D]], ":")
1628+ let dK = aG(invoke(aD, "saveWarehouse", [dI, fA], nil))
1629+ let ex = aJ(invoke(aD, "updateAccStats", [da, fraction(d, fp, al)], nil))
1630+ $Tuple2(((fr ++ fs) :+ IntegerEntry(aa, (eC + fz))), $Tuple5(eq, fq, dK, ex, dL))
1631+ }
1632+ }
1633+ }
1634+ else throw("Strict value is not equal to itself.")
1635+ }
16581636
16591637
16601638
1661-@Callable(eo)
1662-func sellProductsToES (cO) = {
1663- let er = bH()
1664- if ((er == er))
1665- then if ((size(eo.payments) != 0))
1639+@Callable(en)
1640+func sellProductsToES (cN) = {
1641+ let eq = bG()
1642+ if ((eq == eq))
1643+ then if ((size(en.payments) != 0))
16661644 then throw("No payments needed")
16671645 else {
1668- let V = valueOrErrorMessage(getString(aE, S(toString(eo.caller))), "You don't have a duck staked")
1669- let es = split(valueOrElse(getString(aE, W(V)), g), "_")
1670- if ((es[L] != "A"))
1671- then throw(("Duck location type should be Airport, but is " + es[L]))
1646+ let V = valueOrErrorMessage(getString(aD, S(toString(en.caller))), "You don't have a duck staked")
1647+ let er = split(valueOrElse(getString(aD, W(V)), g), "_")
1648+ if ((er[L] != "A"))
1649+ then throw(("Duck location type should be Airport, but is " + er[L]))
16721650 else {
1673- let et = bE(U(V))
1674- let ea = if ((et[J] == ""))
1651+ let es = bD(U(V))
1652+ let dZ = if ((es[J] == ""))
16751653 then nil
1676- else split_4C(et[J], "_")
1677- let fD = Z()
1678- let fE = getString(fD)
1679- let fF = if (isDefined(fE))
1680- then split_4C(value(fE), "_")
1654+ else split_4C(es[J], "_")
1655+ let fC = Z()
1656+ let fD = getString(fC)
1657+ let fE = if (isDefined(fD))
1658+ then split_4C(value(fD), "_")
16811659 else nil
1682- func fG (bJ,fH) = {
1683- let bL = bJ._1
1684- let ed = if ((size(cO) > bL))
1685- then cO[bL]
1660+ func fF (bI,fG) = {
1661+ let bK = bI._1
1662+ let ec = if ((size(cN) > bK))
1663+ then cN[bK]
16861664 else 0
1687- if ((0 > ed))
1665+ if ((0 > ec))
16881666 then throw("Quantity cannot be negative")
16891667 else {
1690- let ad = split(fH, "_")
1668+ let ad = split(fG, "_")
16911669 if ((size(ad) != x))
1692- then throw(("Fatal: unknown recipe: " + fH))
1670+ then throw(("Fatal: unknown recipe: " + fG))
16931671 else {
1694- let fI = (i * y)
1695- let fJ = if ((size(fF) > bL))
1696- then parseIntValue(fF[bL])
1672+ let fH = (i * y)
1673+ let fI = if ((size(fE) > bK))
1674+ then parseIntValue(fE[bK])
16971675 else 0
1698- let fK = (fI - fJ)
1699- if ((ed > fK))
1700- then throw(((("Warehouse can buy only " + toString(fK)) + " of ") + r[bL]))
1676+ let fJ = (fH - fI)
1677+ if ((ec > fJ))
1678+ then throw(((("Warehouse can buy only " + toString(fJ)) + " of ") + r[bK]))
17011679 else {
1702- let eK = ac(ad)
1703- let fL = fraction((eK * j), h, (am * y))
1704- let fM = if ((size(ea) > bL))
1705- then parseIntValue(ea[bL])
1680+ let eJ = ac(ad)
1681+ let fK = fraction((eJ * j), h, (al * y))
1682+ let fL = if ((size(dZ) > bK))
1683+ then parseIntValue(dZ[bK])
17061684 else 0
1707- if ((ed > fM))
1708- then throw(((("You have only " + toString(fM)) + " of ") + r[bL]))
1709- else $Tuple5((bL + 1), (bJ._2 + (fL * ed)), (bJ._3 :+ toString((fM - ed))), (bJ._4 :+ toString((fJ + ed))), (bJ._5 + (eK * ed)))
1685+ if ((ec > fL))
1686+ then throw(((("You have only " + toString(fL)) + " of ") + r[bK]))
1687+ else $Tuple5((bK + 1), (bI._2 + (fK * ec)), (bI._3 :+ toString((fL - ec))), (bI._4 :+ toString((fI + ec))), (bI._5 + (eJ * ec)))
17101688 }
17111689 }
17121690 }
17131691 }
17141692
1715- let en = {
1716- let cn = u
1717- let co = size(cn)
1718- let cp = $Tuple5(0, 0, nil, nil, 0)
1719- func cq (cr,cs) = if ((cs >= co))
1720- then cr
1721- else fG(cr, cn[cs])
1693+ let em = {
1694+ let cm = u
1695+ let cn = size(cm)
1696+ let co = $Tuple5(0, 0, nil, nil, 0)
1697+ func cp (cq,cr) = if ((cr >= cn))
1698+ then cq
1699+ else fF(cq, cm[cr])
17221700
1723- func ct (cr,cs) = if ((cs >= co))
1724- then cr
1701+ func cs (cq,cr) = if ((cr >= cn))
1702+ then cq
17251703 else throw("List size exceeds 50")
17261704
1727- ct(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cq(cp, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
1705+ cs(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(cp(co, 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)
17281706 }
1729- let fu = makeString_2C([et[G], et[H], et[I], makeString_2C(en._3, "_")], ":")
1730- let fv = aH(invoke(aE, "updateBackpack", [V, fu], nil))
1731- let ey = aK(invoke(aE, "updateDuckStats", [V, fraction(c, en._5, (am * 10))], nil))
1732- $Tuple2([StringEntry(fD, makeString_2C(en._4, "_")), ScriptTransfer(eo.caller, en._2, ag)], $Tuple3(fv, er, ey))
1707+ let ft = makeString_2C([es[G], es[H], es[I], makeString_2C(em._3, "_")], ":")
1708+ let fu = aG(invoke(aD, "updateBackpack", [V, ft], nil))
1709+ let ex = aJ(invoke(aD, "updateDuckStats", [V, fraction(c, em._5, (al * 10))], nil))
1710+ $Tuple2([StringEntry(fC, makeString_2C(em._4, "_")), ScriptTransfer(en.caller, em._2, af)], $Tuple3(fu, eq, ex))
17331711 }
17341712 }
17351713 else throw("Strict value is not equal to itself.")
17361714 }
17371715
17381716
17391717
1740-@Callable(eo)
1741-func updateEsStorage (fN) = if ((eo.caller != aE))
1718+@Callable(en)
1719+func updateEsStorage (fM) = if ((en.caller != aD))
17421720 then throw("Permission denied")
1743- else $Tuple2([StringEntry(Z(), fN)], fN)
1721+ else $Tuple2([StringEntry(Z(), fM)], fM)
17441722
17451723
17461724
1747-@Callable(eo)
1748-func updateDeliveryLocked (fO) = if ((eo.caller != aE))
1725+@Callable(en)
1726+func updateDeliveryLocked (fN) = if ((en.caller != aD))
17491727 then throw("Permission denied")
1750- else $Tuple2([IntegerEntry(ab, fO)], fO)
1728+ else $Tuple2([IntegerEntry(ab, fN)], fN)
17511729
17521730
17531731
1754-@Callable(eo)
1755-func sendDeliveryReward (R) = if ((eo.caller != aE))
1732+@Callable(en)
1733+func sendDeliveryReward (R) = if ((en.caller != aD))
17561734 then throw("Permission denied")
17571735 else {
1758- let eD = valueOrElse(getInteger(aa), 0)
1759- let fP = valueOrElse(getInteger(ab), 0)
1760- let fQ = (k * o)
1761- let fR = invoke(aG, "sendAcres", [R, fQ], nil)
1762- $Tuple2([IntegerEntry(aa, (eD - k)), IntegerEntry(ab, (fP - k))], fR)
1736+ let eC = valueOrElse(getInteger(aa), 0)
1737+ let fO = valueOrElse(getInteger(ab), 0)
1738+ let fP = (k * o)
1739+ let fQ = invoke(aF, "sendAcres", [R, fP], nil)
1740+ $Tuple2([IntegerEntry(aa, (eC - k)), IntegerEntry(ab, (fO - k))], fQ)
17631741 }
17641742
17651743

github/deemru/w8io/169f3d6 
1169.70 ms