tx · GFTGUCahAmALQBRV8K1MaokuD6f2jUHs51CXC35oECyD

3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep:  -0.03200000 Waves

2023.05.23 13:17 [2590488] smart account 3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep > SELF 0.00000000 Waves

{ "type": 13, "id": "GFTGUCahAmALQBRV8K1MaokuD6f2jUHs51CXC35oECyD", "fee": 3200000, "feeAssetId": null, "timestamp": 1684837081348, "version": 2, "chainId": 84, "sender": "3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep", "senderPublicKey": "7v5L7QkXxfkirALdyqmox38QCsa9jtfAtgUfHTh34eWq", "proofs": [ "56NqaqxXGP3Spd8nusztRC28oFoY8hptmN65rW7wzEbfFqzgCn4WbcuG73Bp94nnqk8wTq4Q4PU7TR9xCV2wEmNG" ], "script": "base64:BgIrCAISAwoBCBIECgIRERIECgIRERIDCgEREgQKAgEBEgQKAggIEgUKAwgICFcAA1NFUAICX18ABU1VTFQ2AMCEPQAFTVVMVDcAgK3iBAAFTVVMVDgAgMLXLwAGTVVMVDEwAIDIr6AlAAVjaGFpbgkAyQECCQDKAQIIBQR0aGlzBWJ5dGVzAAEAAQALdXNkdEFzc2V0SWQEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDABIITaerIIAz9O0bvKju6Lk7zJgt0LXfoHlqjUI/moD/+5AwkAAAIBAVQFByRtYXRjaDABIFWx2J9yh4Lv5eNbjawFq2XemkOhLxa7BfMat4el8cUYCQACAQINVW5rbm93biBjaGFpbgAVZGVmYXVsdFJlc3RBZGRyZXNzU3RyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAiMzUFFDdXZGYnZoNExrUFVucm5VMXozam5iQTFwOW0zV05odgMJAAACAQFUBQckbWF0Y2gwAiMzTXVta0dHenRDS0FYcFdEcXhrZGRvZnFYU1VicVFrdlNKeQkAAgECDVVua25vd24gY2hhaW4BD2dldFN0cmluZ09yRmFpbAIHYWRkcmVzcwNrZXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQdhZGRyZXNzBQNrZXkJALkJAgkAzAgCAgptYW5kYXRvcnkgCQDMCAIJAKUIAQUHYWRkcmVzcwkAzAgCAgEuCQDMCAIFA2tleQkAzAgCAg8gaXMgbm90IGRlZmluZWQFA25pbAIAAQxnZXRJbnRPckVsc2UCA2tleQpkZWZhdWx0VmFsCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFA2tleQUKZGVmYXVsdFZhbAARSWR4Q2ZnU3Rha2luZ0RhcHAAAQARSWR4Q2ZnRWNvbm9teURhcHAAAgAUSWR4Q2ZnR292ZXJuYW5jZURhcHAAAwEKa2V5UmVzdENmZwACDiVzX19yZXN0Q29uZmlnAQ5rZXlSZXN0QWRkcmVzcwACDCVzX19yZXN0QWRkcgERcmVhZFJlc3RDZmdPckZhaWwBBHJlc3QJALwJAgkBD2dldFN0cmluZ09yRmFpbAIFBHJlc3QJAQprZXlSZXN0Q2ZnAAUDU0VQARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCB3Jlc3RDZmcDaWR4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQdyZXN0Q2ZnBQNpZHgJAKwCAgIqUmVzdCBjZmcgZG9lc24ndCBjb250YWluIGFkZHJlc3MgYXQgaW5kZXggCQCkAwEFA2lkeAAMcmVzdENvbnRyYWN0CQERQGV4dHJOYXRpdmUoMTA2MikBCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMJAQ5rZXlSZXN0QWRkcmVzcwAFFWRlZmF1bHRSZXN0QWRkcmVzc1N0cgAHcmVzdENmZwkBEXJlYWRSZXN0Q2ZnT3JGYWlsAQUMcmVzdENvbnRyYWN0AA9zdGFraW5nQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRFJZHhDZmdTdGFraW5nRGFwcAAPREVGQVVMVExPQ0FUSU9OAg9BZnJpY2FfRl9BZnJpY2EABk5VTVJFUwAGABNGQUNUT1JZTUFYV0FSRUhPVVNFAIDIr6AlABBSRVNPVVJDRVBSSUNFTUlOANW1AgAKTUlOUEFZTUVOVACQTgAOU0VMTE1VTFRJUExJRVIAyAEADUJVWU1VTFRJUExJRVIArAIACkxBTkRQUkVGSVgCBExBTkQACkRVQ0tQUkVGSVgCBERVQ0sADFdITVVMVElQTElFUgCAyK+gJQAKQVVDVElPTkZFRQCQTgAOTUlOU0hPUFBBWU1FTlQAoI0GAAhyZXNUeXBlcwkAzAgCAgNPaWwJAMwIAgIDT3JlCQDMCAICBFdvb2QJAMwIAgIEU2FuZAkAzAgCAgRDbGF5CQDMCAICB09yZ2FuaWMFA25pbAAIbWF0VHlwZXMJAMwIAgIERnVlbAkAzAgCAgVNZXRhbAkAzAgCAgVQbGFuawkAzAgCAgVHbGFzcwkAzAgCAgdQbGFzdGljCQDMCAICB1Byb3RlaW4FA25pbAAJcHJvZFR5cGVzCQDMCAICDUZpcnN0IEFpZCBLaXQJAMwIAgIIQmFja3BhY2sJAMwIAgILRm9vZCBSYXRpb24JAMwIAgIISmV0IFBhY2sJAMwIAgIGU2hpZWxkBQNuaWwACmNvbnRpbmVudHMJAMwIAgIIQW1lcmljYXMJAMwIAgIGRXVyb3BlCQDMCAICBEFzaWEJAMwIAgIGQWZyaWNhCQDMCAICB09jZWFuaWEFA25pbAAQcHJvZHVjdGlvbk1hdHJpeAkAzAgCAhIxXzFfMV8yXzJfNV8xXzEwXzAJAMwIAgITMl8yXzJfNF80XzEwXzFfMTBfMAkAzAgCAhMzXzNfM182XzZfMTVfMV8xMF8wCQDMCAICEzJfNV81XzJfN181XzJfMTAwXzEJAMwIAgIXNF8xMF8xMF80XzE0XzEwXzJfMTAwXzEJAMwIAgIXNl8xNV8xNV82XzIxXzE1XzJfMTAwXzEJAMwIAgISMV8xXzFfMV8xXzhfMV8xMF8yCQDMCAICEzJfMl8yXzJfMl8xNl8xXzEwXzIJAMwIAgITM18zXzNfM18zXzI0XzFfMTBfMgkAzAgCAhM5XzlfMV81XzVfMV81XzEwMF8zCQDMCAICFzE4XzE4XzJfMTBfMTBfMl81XzEwMF8zCQDMCAICFzI3XzI3XzNfMTVfMTVfM181XzEwMF8zCQDMCAICEjJfMl8xXzJfMl8yXzFfMTBfNAkAzAgCAhI0XzRfMl80XzRfNF8xXzEwXzQJAMwIAgISNl82XzNfNl82XzZfMV8xMF80BQNuaWwAD2NvbnRJZHhBbWVyaWNhcwAAAA1jb250SWR4RXVyb3BlAAEAC2NvbnRJZHhBc2lhAAIADWNvbnRJZHhBZnJpY2EAAwAOY29udElkeE9jZWFuaWEABAANcmVjaXBlSWR4RnVlbAAAAA5yZWNpcGVJZHhNZXRhbAABAA5yZWNpcGVJZHhQbGFuawACAA5yZWNpcGVJZHhHbGFzcwADABByZWNpcGVJZHhQbGFzdGljAAQAEHJlY2lwZUlkeFByb3RlaW4ABQAPcmVjaXBlSWR4V2VpZ2h0AAYAEXJlY2lwZUlkeFBhY2tzaXplAAcAEnJlY2lwZUlkeENvbnRpbmVudAAIAR5rZXlGYWN0b3J5V2FyZWhvdXNlQnlJZEFuZFR5cGUCCWZhY3RvcnlJZAdyZXNUeXBlCQCsAgIJAKwCAgkArAICAhtmYWN0b3J5V2hCeUNvbnRpbmVudEFuZFJlc18FCWZhY3RvcnlJZAIBXwkApAMBBQdyZXNUeXBlAQ5rZXlPcmRlckJ5TGFuZAELbGFuZEFzc2V0SWQJAKwCAgIKbGFuZE9yZGVyXwULbGFuZEFzc2V0SWQBFGtleVN0YWtlZER1Y2tCeU93bmVyAQlvd25lckFkZHIJAKwCAgISc3Rha2VkRHVja0J5T3duZXJfBQlvd25lckFkZHIBEWtleUJhY2twYWNrQnlEdWNrAQtkdWNrQXNzZXRJZAkArAICAgliYWNrUGFja18FC2R1Y2tBc3NldElkAQ9rZXlEdWNrTG9jYXRpb24BC2R1Y2tBc3NldElkCQCsAgICDWR1Y2tMb2NhdGlvbl8FC2R1Y2tBc3NldElkAQprZXlCbG9ja2VkAAIQY29udHJhY3RzQmxvY2tlZAEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQdhc3NldElkCQCsAgICCW5mdE93bmVyXwUHYXNzZXRJZAEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEHYXNzZXRJZAkArAICAgtzdGFrZWRUaW1lXwUHYXNzZXRJZAEPa2V5QWRkcmVzc1JlZkJ5AQRhZGRyCQCsAgICCWFjY1JlZkJ5XwUEYWRkcgAPbG9jSWR4Q29udGluZW50AAAACmxvY0lkeFR5cGUAAQAIbG9jSWR4SWQAAgAKYnBJZHhMZXZlbAAAAAhicElkeFJlcwABAAhicElkeE1hdAACAAlicElkeFByb2QAAwAId2hJZHhWb2wAAAAId2hJZHhSZXMAAQAId2hJZHhNYXQAAgAJd2hJZHhQcm9kAAMADndoSWR4TG9ja2VkVm9sAAQACW9yZElkeFJlcwAAAAlvcmRJZHhNYXQAAQAKb3JkSWR4UHJvZAACAQhhc1N0cmluZwEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAFAXMJAAIBAhhmYWlsIHRvIGNhc3QgaW50byBTdHJpbmcBCGdldE9yZGVyAQZvcmRLZXkEAXAJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQZvcmRLZXkCMDBAMF8wQDBfMEAwXzBAMF8wQDBfMEAwOjBAMF8wQDBfMEAwXzBAMF8wQDBfMEAwOgIBOgkAzAgCAwkAAAIJAJADAQkAtQkCCQCRAwIFAXAFCW9yZElkeFJlcwIBXwUGTlVNUkVTCQCRAwIFAXAFCW9yZElkeFJlcwIXMEAwXzBAMF8wQDBfMEAwXzBAMF8wQDAJAMwIAgMJAAACCQCQ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ACwALQAuAC8AMAAxADIBDHNlbGxJbnRlcm5hbAQFbG9jSWQHcmVzVHlwZQZhbW91bnQIbWluUHJpY2UEBXdoS2V5CQEea2V5RmFjdG9yeVdhcmVob3VzZUJ5SWRBbmRUeXBlAgUFbG9jSWQFB3Jlc1R5cGUEAncwCQELdmFsdWVPckVsc2UCCQCfCAEFBXdoS2V5AAAEAnIwAwkAZgIFAncwBRNGQUNUT1JZTUFYV0FSRUhPVVNFAAADCQBmAgkAZAIFAncwBQZhbW91bnQFE0ZBQ1RPUllNQVhXQVJFSE9VU0UJAGUCBRNGQUNUT1JZTUFYV0FSRUhPVVNFBQJ3MAUGYW1vdW50BAx1c2R0UmVjZWl2ZWQJAGQCCQBrAwUCcjAJAGUCCQBoAgUOU0VMTE1VTFRJUExJRVIFEFJFU09VUkNFUFJJQ0VNSU4JAGsDCQBkAgkAaAIAZAUCdzAJAGgCADIFAnIwBRBSRVNPVVJDRVBSSUNFTUlOBRNGQUNUT1JZTUFYV0FSRUhPVVNFBQZNVUxUMTAJAGsDCQBlAgUGYW1vdW50BQJyMAUQUkVTT1VSQ0VQUklDRU1JTgUFTVVMVDgEBW1pbjk5CQBlAgUIbWluUHJpY2UJAGkCBQhtaW5QcmljZQBkAwkAZgIJAGgCBQVtaW45OQUGYW1vdW50CQBoAgUMdXNkdFJlY2VpdmVkBQVNVUxUOAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIPQWN0dWFsIHByaWNlID0gCQCkAwEFDHVzZHRSZWNlaXZlZAIDIC8gCQCkAwEFBmFtb3VudAIOIDwgbWluUHJpY2UgPSAJAKQDAQUIbWluUHJpY2UCAywgKAUFbG9jSWQCAiwgCQCRAwIFCHJlc1R5cGVzBQdyZXNUeXBlAgEpCQCUCgIJAQxJbnRlZ2VyRW50cnkCBQV3aEtleQkAZAIFAncwBQZhbW91bnQFDHVzZHRSZWNlaXZlZAELYnV5SW50ZXJuYWwEBWxvY0lkB21hdFR5cGUGYW1vdW50CG1heFByaWNlBAV3aEtleQkBHmtleUZhY3RvcnlXYXJlaG91c2VCeUlkQW5kVHlwZQIFBWxvY0lkBQdtYXRUeXBlBAJ3MAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQV3aEtleQAABAJtMQMJAGYCBQJ3MAUTRkFDVE9SWU1BWFdBUkVIT1VTRQkAlwMBCQDMCAIFBmFtb3VudAkAzAgCCQBlAgUCdzAFE0ZBQ1RPUllNQVhXQVJFSE9VU0UFA25pbAAABAJtMAkAlwMBCQDMCAIFAncwCQDMCAIJAGUCBQZhbW91bnQFAm0xBQNuaWwEAW0JAGQCBQJtMAUCbTEECXVzZHRTcGVudAkAZAIJAGsDBQJtMAkAZQIJAGgCBQ1CVVlNVUxUSVBMSUVSBRBSRVNPVVJDRVBSSUNFTUlOCQBrAwkAZQIJAGgCAGQFAncwCQBoAgAyBQJtMAUQUkVTT1VSQ0VQUklDRU1JTgUTRkFDVE9SWU1BWFdBUkVIT1VTRQUGTVVMVDEwCQBrAwUCbTEJAGgCAAIFEFJFU09VUkNFUFJJQ0VNSU4FBU1VTFQ4BAZtYXgxMDEJAGQCBQhtYXhQcmljZQkAaQIFCG1heFByaWNlAGQDCQBmAgkAaAIFCXVzZHRTcGVudAUFTVVMVDgJAGgCBQZtYXgxMDEFAW0JAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICD0FjdHVhbCBwcmljZSA9IAkApAMBBQl1c2R0U3BlbnQCAyAvIAkApAMBBQFtAg4gPiBtYXhQcmljZSA9IAkApAMBBQhtYXhQcmljZQIDLCAoBQVsb2NJZAICLCAJAJEDAgUIbWF0VHlwZXMFB21hdFR5cGUCASkJAJUKAwkBDEludGVnZXJFbnRyeQIFBXdoS2V5CQBlAgUCdzAFAW0FCXVzZHRTcGVudAUBbQELZ2V0QmFja3BhY2sBBWJwS2V5BAFwCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0BQVicEtleQIaMDowXzBfMF8wXzBfMDowXzBfMF8wXzBfMDoCAToJAMwIAgkApAMBCQELdmFsdWVPckVsc2UCCQC2CQEJAJEDAgUBcAUKYnBJZHhMZXZlbAAACQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUBcAUIYnBJZHhSZXMCAV8FBk5VTVJFUwkAkQMCBQFwBQhicElkeFJlcwILMF8wXzBfMF8wXzAJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQFwBQhicElkeE1hdAIBXwUGTlVNUkVTCQCRAwIFAXAFCGJwSWR4TWF0AgswXzBfMF8wXzBfMAkAzAgCCQCRAwIFAXAFCWJwSWR4UHJvZAUDbmlsAQxjaGVja0Jsb2NrZWQAAwkBC3ZhbHVlT3JFbHNlAgkAmwgCBQ9zdGFraW5nQ29udHJhY3QJAQprZXlCbG9ja2VkAAcJAAIBAh9Db250cmFjdHMgYXJlIHVuZGVyIG1haW50ZW5hbmNlBQR1bml0AQlzZXRDb21tb24CA2FjYwRpdGVtBAFqCAUDYWNjAl8xBAlpdGVtUGFydHMJALUJAgUEaXRlbQIBQAMJAQIhPQIJAJADAQUJaXRlbVBhcnRzAAIJAAIBAi5JbmNvcnJlY3Qgb3JkZXIgZm9ybWF0LCBzaG91bGQgYmUgYW1vdW50QHByaWNlBAhuZXdPcmRBbQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWl0ZW1QYXJ0cwAABAhuZXdPcmRQcgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWl0ZW1QYXJ0cwABBAluZXdPcmRVc2QJAGsDBQhuZXdPcmRBbQUIbmV3T3JkUHIFBU1VTFQ4BAN3aHAJAQ1wYXJzZUludFZhbHVlAQkAkQMCCAUDYWNjAl81BQFqBAtjdXJPcmRQYXJ0cwkAtQkCCQCRAwIIBQNhY2MCXzYFAWoCAUAECGN1ck9yZEFtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgULY3VyT3JkUGFydHMAAAQIY3VyT3JkUHIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQtjdXJPcmRQYXJ0cwABAwkAZgIAAAUIY3VyT3JkUHIJAAIBAhdQcmljZSBjYW4ndCBiZSBuZWdhdGl2ZQQJY3VyT3JkVXNkCQBrAwUIY3VyT3JkQW0FCGN1ck9yZFByBQVNVUxUOAMJAAACBQhuZXdPcmRBbQAAAwkAZgIFCGN1ck9yZEFtAAAJAJgKBgkAZAIFAWoAAQkAzQgCCAUDYWNjAl8yCQCkAwEFA3docAkAZQIIBQNhY2MCXzMFCGN1ck9yZEFtCQBlAggFA2FjYwJfNAUJY3VyT3JkVXNkCAUDYWNjAl81CAUDYWNjAl82CQCYCgYJAGQCBQFqAAEJAM0IAggFA2FjYwJfMgkApAMBCQBlAgUDd2hwBQhjdXJPcmRBbQkAZAIIBQNhY2MCXzMFCGN1ck9yZEFtCAUDYWNjAl80CAUDYWNjAl81CAUDYWNjAl82AwkAZgIFCG5ld09yZEFtAAADCQBmAgAABQhjdXJPcmRBbQQGYW1EaWZmCQBkAgUIbmV3T3JkQW0FCGN1ck9yZEFtCQCYCgYJAGQCBQFqAAEJAM0IAggFA2FjYwJfMgkApAMBCQBlAgUDd2hwBQhjdXJPcmRBbQkAZAIIBQNhY2MCXzMFBmFtRGlmZgkAZAIIBQNhY2MCXzQFCW5ld09yZFVzZAgFA2FjYwJfNQgFA2FjYwJfNgkAmAoGCQBkAgUBagABCQDNCAIIBQNhY2MCXzIJAKQDAQUDd2hwCQBlAgkAZAIIBQNhY2MCXzMFCG5ld09yZEFtBQhjdXJPcmRBbQkAZQIJAGQCCAUDYWNjAl80BQluZXdPcmRVc2QFCWN1ck9yZFVzZAgFA2FjYwJfNQgFA2FjYwJfNgMJAGYCAAAFCGN1ck9yZEFtBAZhbURpZmYJAGUCBQhjdXJPcmRBbQUIbmV3T3JkQW0DCQBmAgAACQBlAgUDd2hwBQZhbURpZmYJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAJAKQDAQUGYW1EaWZmAhogZnJvbSB3YXJlaG91c2UsIGJ1dCBvbmx5IAkApAMBBQN3aHACCiBhdmFpbGFibGUJAJgKBgkAZAIFAWoAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGUCBQN3aHAFBmFtRGlmZgkAZAIIBQNhY2MCXzMFBmFtRGlmZggFA2FjYwJfNAgFA2FjYwJfNQgFA2FjYwJfNgMJAGYCAAAJAGQCBQN3aHAFCG5ld09yZEFtCQACAQkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHRha2UgCQCkAwEJAQEtAQUIbmV3T3JkQW0CGiBmcm9tIHdhcmVob3VzZSwgYnV0IG9ubHkgCQCkAwEFA3docAIKIGF2YWlsYWJsZQkAmAoGCQBkAgUBagABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZAIFA3docAUIbmV3T3JkQW0JAGUCCQBlAggFA2FjYwJfMwUIbmV3T3JkQW0FCGN1ck9yZEFtCQBlAggFA2FjYwJfNAUJY3VyT3JkVXNkCAUDYWNjAl81CAUDYWNjAl82AQxhY2NlcHRDb21tb24CA2FjYw1icE9yZFByb2RJdGVtBAFqCAUDYWNjAl83BA5icE9yZFByb2RQYXJ0cwkAtQkCBQ1icE9yZFByb2RJdGVtAgFAAwkBAiE9AgkAkAMBBQ5icE9yZFByb2RQYXJ0cwACCQACAQIuSW5jb3JyZWN0IG9yZGVyIGZvcm1hdCwgc2hvdWxkIGJlIGFtb3VudEBwcmljZQQHYnBPcmRBbQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmJwT3JkUHJvZFBhcnRzAAAEB2JwT3JkUHIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5icE9yZFByb2RQYXJ0cwABAwkAZgIAAAUHYnBPcmRQcgkAAgECF1ByaWNlIGNhbid0IGJlIG5lZ2F0aXZlBAhicE9yZFVzZAkAawMFB2JwT3JkQW0FB2JwT3JkUHIFBU1VTFQ4BANicHAJAQ1wYXJzZUludFZhbHVlAQkAkQMCCAUDYWNjAl84BQFqBAN3aHAJAQ1wYXJzZUludFZhbHVlAQkAkQMCCAUDYWNjAl85BQFqBAp3aE9yZFBhcnRzCQC1CQIJAJEDAggFA2FjYwNfMTAFAWoCAUAEB3doT3JkQW0JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQp3aE9yZFBhcnRzAAAEB3doT3JkUHIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQp3aE9yZFBhcnRzAAEDAwkBAiE9AgUHYnBPcmRBbQAACQECIT0CBQdicE9yZFByBQd3aE9yZFByBwkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgpQcmljZXMgb2YgCQCRAwIIBQNhY2MDXzExBQFqAhcgZG9uJ3QgbWF0Y2ghIFdIIHByaWNlPQkApAMBBQd3aE9yZFByAg0sIHlvdXIgcHJpY2U9CQCkAwEFB2JwT3JkUHIECHdoT3JkVXNkCQBrAwUHd2hPcmRBbQUHd2hPcmRQcgUFTVVMVDgDCQAAAgUHYnBPcmRBbQAACQCdCgsJAM0IAggFA2FjYwJfMQkApAMBBQN3aHAJAM0IAggFA2FjYwJfMgkAkQMCCAUDYWNjA18xMAUBagkAzQgCCAUDYWNjAl8zCQCkAwEFA2JwcAgFA2FjYwJfNAgFA2FjYwJfNQgFA2FjYwJfNgkAZAIIBQNhY2MCXzcAAQgFA2FjYwJfOAgFA2FjYwJfOQgFA2FjYwNfMTAIBQNhY2MDXzExAwkAZgIFB2JwT3JkQW0AAAMJAGYCAAAFB3doT3JkQW0DCQBmAgUHYnBPcmRBbQkBAS0BBQd3aE9yZEFtCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICD0F0dGVtcHQgdG8gYnV5IAkApAMBBQdicE9yZEFtAgQgb2YgCQCRAwIIBQNhY2MDXzExBQFqAhssIGJ1dCB3YXJlaG91c2Ugb25seSBzZWxscyAJAKQDAQkBAS0BBQd3aE9yZEFtCQCdCgsJAM0IAggFA2FjYwJfMQkApAMBBQN3aHAJAM0IAggFA2FjYwJfMgkArAICCQCsAgIJAKQDAQkAZAIFB3doT3JkQW0FB2JwT3JkQW0CAUAJAKQDAQUHd2hPcmRQcgkAzQgCCAUDYWNjAl8zCQCkAwEJAGQCBQNicHAFB2JwT3JkQW0JAGQCCAUDYWNjAl80BQdicE9yZEFtCAUDYWNjAl81CQBkAggFA2FjYwJfNgUIYnBPcmRVc2QJAGQCCAUDYWNjAl83AAEIBQNhY2MCXzgIBQNhY2MCXzkIBQNhY2MDXzEwCAUDYWNjA18xMQkAAgEJAKwCAgkArAICAg9BdHRlbXB0IHRvIGJ1eSAJAJEDAggFA2FjYwNfMTEFAWoCICB3aGlsZSB3YXJlaG91c2UgZG9lc24ndCBzZWxsIGl0AwkAZgIFB3doT3JkQW0AAAMJAGYCCQEBLQEFB2JwT3JkQW0FB3doT3JkQW0JAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byBzZWxsIAkApAMBCQEBLQEFB2JwT3JkQW0CBCBvZiAJAJEDAggFA2FjYwNfMTEFAWoCGiwgYnV0IHdhcmVob3VzZSBvbmx5IGJ1eXMgCQCkAwEFB3doT3JkQW0DCQBmAgkBAS0BBQdicE9yZEFtBQNicHAJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byBzZWxsIAkApAMBCQEBLQEFB2JwT3JkQW0CFCwgYnV0IHlvdSBvbmx5IGhhdmUgCQCkAwEFA2JwcAIEIG9mIAkAkQMCCAUDYWNjA18xMQUBagkAnQoLCQDNCAIIBQNhY2MCXzEJAKQDAQkAZQIFA3docAUHYnBPcmRBbQkAzQgCCAUDYWNjAl8yCQCsAgIJAKwCAgkApAMBCQBkAgUHd2hPcmRBbQUHYnBPcmRBbQIBQAkApAMBBQd3aE9yZFByCQDNCAIIBQNhY2MCXzMJAKQDAQkAZAIFA2JwcAUHYnBPcmRBbQkAZQIIBQNhY2MCXzQFB2JwT3JkQW0JAGUCCAUDYWNjAl81BQhicE9yZFVzZAgFA2FjYwJfNgkAZAIIBQNhY2MCXzcAAQgFA2FjYwJfOAgFA2FjYwJfOQgFA2FjYwNfMTAIBQNhY2MDXzExCQACAQkArAICCQCsAgICEEF0dGVtcHQgdG8gc2VsbCAJAJEDAggFA2FjYwNfMTEFAWoCHyB3aGlsZSB3YXJlaG91c2UgZG9lc24ndCBidXkgaXQHAWkBDWNvbnN0cnVjdG9yVjEBCHJlc3RBZGRyAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRUGVybWlzc2lvbiBkZW5pZWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDmtleVJlc3RBZGRyZXNzAAUIcmVzdEFkZHIFA25pbAFpAQ1zZWxsUmVzb3VyY2VzAgdhbW91bnRzCW1pblByaWNlcwQHYmxvY2tlZAkBDGNoZWNrQmxvY2tlZAADCQAAAgUHYmxvY2tlZAUHYmxvY2tlZAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIqc2VsbFJlc291cmNlcyBkb2Vzbid0IHJlcXVpcmUgYW55IHBheW1lbnRzBAtjdXJMb2NhdGlvbgkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04CAV8DCQECIT0CCQCRAwIFC2N1ckxvY2F0aW9uBQpsb2NJZHhUeXBlAgFGCQACAQkArAICAi1EdWNrIGxvY2F0aW9uIHR5cGUgc2hvdWxkIGJlIEZhY3RvcnksIGJ1dCBpcyAJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUEBWxvY0lkCQCRAwIFC2N1ckxvY2F0aW9uBQhsb2NJZHhJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAdyZXNMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfCgEFYWRkZXICA2FjYwFqAwkAZgIJAJEDAgUHYW1vdW50cwUBagkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3Jlc0xpc3QFAWoJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIJWW91IGhhdmUgCQCRAwIFB3Jlc0xpc3QFAWoCBCBvZiAJAJEDAgUIcmVzVHlwZXMFAWoCFCwgYnV0IHRyaWVkIHRvIHNlbGwgCQCkAwEJAJEDAgUHYW1vdW50cwUBagMJAGYCAAAJAJEDAgUHYW1vdW50cwUBagkAAgEJAKwCAgkArAICCQCsAgICJVlvdSB0cmllZCB0byBzZWxsIG5lZ2F0aXZlIGFtb3VudCBvZiAJAJEDAgUIcmVzVHlwZXMFAWoCAjogCQCkAwEJAJEDAgUHYW1vdW50cwUBagMJAGYCCQCRAwIFB2Ftb3VudHMFAWoAAAQBYgkBDHNlbGxJbnRlcm5hbAQFBWxvY0lkBQFqCQCRAwIFB2Ftb3VudHMFAWoJAJEDAgUJbWluUHJpY2VzBQFqCQCVCgMJAM0IAggFA2FjYwJfMQgFAWICXzEJAM0IAggFA2FjYwJfMgkApAMBCQBlAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3Jlc0xpc3QFAWoJAJEDAgUHYW1vdW50cwUBagkAZAIIBQNhY2MCXzMIBQFiAl8yCQCVCgMIBQNhY2MCXzEJAM0IAggFA2FjYwJfMgkAkQMCBQdyZXNMaXN0BQFqCAUDYWNjAl8zBAZtZXJnZWQKAAIkbAkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlQoDBQNuaWwFA25pbAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQVhZGRlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgQHbmV3UGFjawkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAuQkCCAUGbWVyZ2VkAl8yAgFfCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6BAZyZXN1bHQJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVCYWNrcGFjawkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQduZXdQYWNrBQNuaWwFA25pbAkAlAoCCQDNCAIIBQZtZXJnZWQCXzEJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcggFBm1lcmdlZAJfMwULdXNkdEFzc2V0SWQFBnJlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQxidXlNYXRlcmlhbHMCB2Ftb3VudHMJbWF4UHJpY2VzBAdibG9ja2VkCQEMY2hlY2tCbG9ja2VkAAMJAAACBQdibG9ja2VkBQdibG9ja2VkBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAiJleGFjdGx5IDEgcGF5bWVudCBtdXN0IGJlIGF0dGFjaGVkBANwbXQJAJEDAggFAWkIcGF5bWVudHMAAAQDYW10CAUDcG10BmFtb3VudAQKcG10QXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCAUDcG10B2Fzc2V0SWQCHldBVkVTIGNhbid0IGJlIHVzZWQgYXMgcGF5bWVudAMJAQIhPQIFCnBtdEFzc2V0SWQFC3VzZHRBc3NldElkCQACAQITVVNEVCBwYXltZW50cyBvbmx5IQQLY3VyTG9jYXRpb24JALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OAgFfAwkBAiE9AgkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQIBRgkAAgEJAKwCAgItRHVjayBsb2NhdGlvbiB0eXBlIHNob3VsZCBiZSBGYWN0b3J5LCBidXQgaXMgCQCRAwIFC2N1ckxvY2F0aW9uBQpsb2NJZHhUeXBlBAVsb2NJZAkAkQMCBQtjdXJMb2NhdGlvbgUIbG9jSWR4SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQHbWF0TGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwoBCG1VcGRhdGVyAgNhY2MBagMJAGYCAAAJAJEDAgUHYW1vdW50cwUBagkAAgEJAKwCAgkArAICCQCsAgICJFlvdSB0cmllZCB0byBidXkgbmVnYXRpdmUgYW1vdW50IG9mIAkAkQMCBQhtYXRUeXBlcwUBagICOiAJAKQDAQkAkQMCBQdhbW91bnRzBQFqAwkAZgIJAJEDAgUHYW1vdW50cwUBagAABAFiCQELYnV5SW50ZXJuYWwEBQVsb2NJZAUBagkAkQMCBQdhbW91bnRzBQFqCQCRAwIFCW1heFByaWNlcwUBagkAlQoDCQDNCAIIBQNhY2MCXzEIBQFiAl8xCQDNCAIIBQNhY2MCXzIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdtYXRMaXN0BQFqCAUBYgJfMwkAZAIIBQNhY2MCXzMIBQFiAl8yCQCVCgMIBQNhY2MCXzEJAM0IAggFA2FjYwJfMgkAkQMCBQdtYXRMaXN0BQFqCAUDYWNjAl8zBAZtZXJnZWQKAAIkbAkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlQoDBQNuaWwFA25pbAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQhtVXBkYXRlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgMJAGYCCAUGbWVyZ2VkAl8zBQNhbXQJAAIBCQCsAgIJAKwCAgkArAICAh9JbnN1ZmZpY2llbnQgcGF5bWVudCEgQXR0YWNoZWQ9CQCkAwEFA2FtdAILLCByZXF1aXJlZD0JAKQDAQgFBm1lcmdlZAJfMwQHbmV3UGFjawkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgkAuQkCCAUGbWVyZ2VkAl8yAgFfCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6BAZyZXN1bHQJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVCYWNrcGFjawkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQduZXdQYWNrBQNuaWwFA25pbAQEcmVzdAMJAGYCCQBlAgUDYW10CAUGbWVyZ2VkAl8zAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQBlAgUDYW10CAUGbWVyZ2VkAl8zBQt1c2R0QXNzZXRJZAUDbmlsBQNuaWwEEGFjdGl2aXRpZXNBbW91bnQJAGkCCAUGbWVyZ2VkAl8zAGQJAJQKAgkAzQgCCQDOCAIIBQZtZXJnZWQCXzEFBHJlc3QJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAUQYWN0aXZpdGllc0Ftb3VudAULdXNkdEFzc2V0SWQFBnJlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARFleGNoYW5nZVJlc291cmNlcwEHYW1vdW50cwQHYmxvY2tlZAkBDGNoZWNrQmxvY2tlZAADCQAAAgUHYmxvY2tlZAUHYmxvY2tlZAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQECnBtdEFzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAggFA3BtdAdhc3NldElkAh5XQVZFUyBjYW4ndCBiZSB1c2VkIGFzIHBheW1lbnQDCQECIT0CBQpwbXRBc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEEC2N1ckxvY2F0aW9uCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgIBXwMJAQIhPQIJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUCAUYJAAIBCQCsAgICLUR1Y2sgbG9jYXRpb24gdHlwZSBzaG91bGQgYmUgRmFjdG9yeSwgYnV0IGlzIAkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQQFbG9jSWQJAJEDAgULY3VyTG9jYXRpb24FCGxvY0lkeElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEB3Jlc0xpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMCAV8EB21hdExpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8KAQlleGNoYW5nZXICA2FjYwFqBAV3aEtleQkBHmtleUZhY3RvcnlXYXJlaG91c2VCeUlkQW5kVHlwZQIFBWxvY0lkBQFqBAJ3MAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQV3aEtleQAABANhbWoJAJEDAgUHYW1vdW50cwUBagMJAGYCBQNhbWoJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdyZXNMaXN0BQFqCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICCVlvdSBoYXZlIAkAkQMCBQdyZXNMaXN0BQFqAgQgb2YgCQCRAwIFCHJlc1R5cGVzBQFqAhgsIGJ1dCB0cmllZCB0byBleGNoYW5nZSAJAKQDAQUDYW1qAwkAZgIAAAUDYW1qCQACAQkArAICCQCsAgIJAKwCAgIpWW91IHRyaWVkIHRvIGV4Y2hhbmdlIG5lZ2F0aXZlIGFtb3VudCBvZiAJAJEDAgUIcmVzVHlwZXMFAWoCAjogCQCkAwEFA2FtagMJAGYCBQNhbWoAAAkAlgoECQDNCAIIBQNhY2MCXzEJAKQDAQkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdyZXNMaXN0BQFqBQNhbWoJAM0IAggFA2FjYwJfMgkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB21hdExpc3QFAWoFA2FtagkAZAIIBQNhY2MCXzMJAGsDBQNhbWoFEFJFU09VUkNFUFJJQ0VNSU4FBU1VTFQ4CQDNCAIIBQNhY2MCXzQJAQxJbnRlZ2VyRW50cnkCBQV3aEtleQUCdzAJAJYKBAkAzQgCCAUDYWNjAl8xCQCRAwIFB3Jlc0xpc3QFAWoJAM0IAggFA2FjYwJfMgkAkQMCBQdtYXRMaXN0BQFqCAUDYWNjAl8zCAUDYWNjAl80BAZtZXJnZWQKAAIkbAkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlgoEBQNuaWwFA25pbAAABQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCWV4Y2hhbmdlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgMJAGYCCAUGbWVyZ2VkAl8zBQNhbXQJAAIBCQCsAgIJAKwCAgkArAICAh9JbnN1ZmZpY2llbnQgcGF5bWVudCEgQXR0YWNoZWQ9CQCkAwEFA2FtdAILLCByZXF1aXJlZD0JAKQDAQgFBm1lcmdlZAJfMwQHbmV3UGFjawkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAuQkCCAUGbWVyZ2VkAl8xAgFfCQDMCAIJALkJAggFBm1lcmdlZAJfMgIBXwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgQGcmVzdWx0CQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQmFja3BhY2sJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUHbmV3UGFjawUDbmlsBQNuaWwEBHJlc3QDCQBmAgkAZQIFA2FtdAgFBm1lcmdlZAJfMwAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkAZQIFA2FtdAgFBm1lcmdlZAJfMwULdXNkdEFzc2V0SWQFA25pbAUDbmlsBBBhY3Rpdml0aWVzQW1vdW50CQBpAggFBm1lcmdlZAJfMwBkCQCUCgIJAM0IAgkAzggCBQRyZXN0CAUGbWVyZ2VkAl80CQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFEGFjdGl2aXRpZXNBbW91bnQFC3VzZHRBc3NldElkBQZyZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEKY3JhZnRHb29kcwIKcHJvZHVjdElkeAhxdWFudGl0eQQHYmxvY2tlZAkBDGNoZWNrQmxvY2tlZAADCQAAAgUHYmxvY2tlZAUHYmxvY2tlZAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABANhbXQIBQNwbXQGYW1vdW50BApwbXRBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIIBQNwbXQHYXNzZXRJZAIeV0FWRVMgY2FuJ3QgYmUgdXNlZCBhcyBwYXltZW50AwkBAiE9AgUKcG10QXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhNVU0RUIHBheW1lbnRzIG9ubHkhAwkBAiE9AgUDYW10BQVNVUxUNgkAAgECKmV4YWN0bHkgMSBVU0RUIG11c3QgYmUgYXR0YWNoZWQgYXMgcGF5bWVudAMJAGcCAAAFCHF1YW50aXR5CQACAQIbUXVhbnRpdHkgc2hvdWxkIGJlIHBvc2l0aXZlBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEC2N1ckxvY2F0aW9uCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgIBXwMJAQIhPQIJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUCAU0JAAIBCQCsAgICMUR1Y2sgbG9jYXRpb24gdHlwZSBzaG91bGQgYmUgTWFudWZhY3RvcnksIGJ1dCBpcyAJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUEBGNvbnQJAJEDAgULY3VyTG9jYXRpb24FD2xvY0lkeENvbnRpbmVudAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAdtYXRMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfAwMJAGYCAAAFCnByb2R1Y3RJZHgGCQBnAgUKcHJvZHVjdElkeAkAkAMBBRBwcm9kdWN0aW9uTWF0cml4CQACAQkArAICAhRVbmtub3duIHByb2R1Y3QgaWR4PQkApAMBBQpwcm9kdWN0SWR4BAZyZWNpcGUJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4BQpwcm9kdWN0SWR4AgFfAwkBAiE9AgkAkAMBBQZyZWNpcGUJAGQCBQZOVU1SRVMAAwkAAgEJAKwCAgIXRmF0YWw6IHVua25vd24gcmVjaXBlOiAJAJEDAgUQcHJvZHVjdGlvbk1hdHJpeAUKcHJvZHVjdElkeAQOcHJvZHVjdENvbnRJZHgJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZyZWNpcGUFEnJlY2lwZUlkeENvbnRpbmVudAMJAQIhPQIJAJEDAgUKY29udGluZW50cwUOcHJvZHVjdENvbnRJZHgFBGNvbnQJAAIBCQCsAgIJAKwCAgkArAICAh1UaGlzIHByb2R1Y3QgaXMgYXZhaWxhYmxlIGluIAkAkQMCBQpjb250aW5lbnRzBQ5wcm9kdWN0Q29udElkeAIRLCBidXQgeW91IGFyZSBpbiAFBGNvbnQECHByb2RMaXN0AwkAAAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIABQNuaWwJALUJAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgFfCgEGZmlsbGVyAgNhY2MLaWdub3JlZEl0ZW0EAW4IBQNhY2MCXzIEAnhzAwkAZgIJAJADAQUIcHJvZExpc3QFAW4JAJEDAgUIcHJvZExpc3QFAW4CATAEAXgJAQ1wYXJzZUludFZhbHVlAQUCeHMEBmFtb3VudAkAaAIFCHF1YW50aXR5CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGcmVjaXBlBRFyZWNpcGVJZHhQYWNrc2l6ZQQBeQMJAAACBQFuBQpwcm9kdWN0SWR4CQCkAwEJAGQCBQF4BQZhbW91bnQFAnhzCQCUCgIJAM0IAggFA2FjYwJfMQUBeQkAZAIFAW4AAQQGYnBQcm9kCAoAAiRsBRBwcm9kdWN0aW9uTWF0cml4CgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUC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C2xhbmRBc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQkAmggCBQ9zdGFraW5nQ29udHJhY3QJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMDCQECIT0CBQR1c2VyBQxyZXN0Q29udHJhY3QJAQIhPQIFBW93bmVyBQRhZGRyBwkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQKY2FyZ29QYXJ0cwkAvAkCBQxjYXJnb0xpc3RTdHICAToDCQECIT0CCQCQAwEFCmNhcmdvUGFydHMAAwkAAgECNGNhcmdvTGlzdFN0ciBzaG91bGQgY29udGFpbiBleGFjdGx5IDIgJzonIHNlcGFyYXRvcnMECHJlc1BhcnRzCQC1CQIJAJEDAgUKY2FyZ29QYXJ0cwAAAgFfBAhtYXRQYXJ0cwkAtQkCCQCRAwIFCmNhcmdvUGFydHMAAQIBXwQJcHJvZFBhcnRzAwkAAAIJAJEDAgUKY2FyZ29QYXJ0cwACAgAFA25pbAkAtQkCCQCRAwIFCmNhcmdvUGFydHMAAgIBXwMJAQIhPQIJAJADAQUIcmVzUGFydHMFBk5VTVJFUwkAAgECIEFsbCA2IHJlc291cmNlcyBzaG91bGQgYmUgcGFzc2VkAwkBAiE9AgkAkAMBBQhtYXRQYXJ0cwUGTlVNUkVTCQACAQIgQWxsIDYgbWF0ZXJpYWxzIHNob3VsZCBiZSBwYXNzZWQEAndoCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIUZ2V0V2FyZWhvdXNlUkVBRE9OTFkJAMwIAgULbGFuZEFzc2V0SWQFA25pbAUDbmlsBAljdXJyZW50V2gJALwJAgUCd2gCAToECWN1cnJXaFJlcwkAtQkCCQCRAwIFCWN1cnJlbnRXaAUI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bmVlZGVkCQDMCAIJAQtTdHJpbmdFbnRyeQIFBm9yZEtleQUMY2FyZ29MaXN0U3RyBQNuaWwDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhJObyBwYXltZW50cyBuZWVkZWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUFb3duZXIJAQEtAQUIdXNkU2FsZG8FC3VzZHRBc3NldElkCQDMCAIJAQtTdHJpbmdFbnRyeQIFBm9yZEtleQUMY2FyZ29MaXN0U3RyBQNuaWwJAJQKAgUHYWN0aW9ucwUGcmVzdWx0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBFGFjY2VwdFdhcmVob3VzZU9yZGVyAwpicE9yZGVyU3RyC2xhbmRBc3NldElkC2R1Y2tBc3NldElkBAdibG9ja2VkCQEMY2hlY2tCbG9ja2VkAAMJAAACBQdibG9ja2VkBQdibG9ja2VkBAZjYWxsZXIIBQFpDG9yaWdpbkNhbGxlcgQKY2FsbGVyQWRkcgkApQgBBQZjYWxsZXIEEXN0YWtlZER1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQpjYWxsZXJBZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJAQ9rZXlEdWNrTG9jYXRpb24BBRFzdGFrZWREdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OBANsb2MJALUJAgkBBXZhbHVlAQULY3VyTG9jYXRpb24CAV8DCQECIT0CCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIBTAkAAgEJAKwCAgkArAICAhZEdWNrIGxvY2F0aW9uIHR5cGUgaXMgCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIRLCBidXQgc2hvdWxkIGJlIEwDCQECIT0CBRFzdGFrZWREdWNrQXNzZXRJZAULZHVja0Fzc2V0SWQJAAIBCQCsAgIJAKwCAgkArAICAhRZb3VyIHN0YWtlZCBkdWNrIGlzIAURc3Rha2VkRHVja0Fzc2V0SWQCDSwgYnV0IHBhc3NlZCAFC2R1Y2tBc3NldElkBAlsYW5kQXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQACAQkArAICCQCsAgICBE5GVCAIBQlsYW5kQXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQECWxhbmRPd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFCWxhbmRBc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQAAAgUJbGFuZE93bmVyBQpjYWxsZXJBZGRyCQACAQIeWW91IGNhbm5vdCB0cmFkZSB3aXRoIHlvdXJzZWxmBAxicE9yZGVyUGFydHMJALwJAgUKYnBPcmRlclN0cgIBOgMJAQIhPQIJAJADAQUMYnBPcmRlclBhcnRzAAMJAAIBAjJicE9yZGVyU3RyIHNob3VsZCBjb250YWluIGV4YWN0bHkgMiAnOicgc2VwYXJhdG9ycwQIYnBPcmRSZXMJALUJAgkAkQMCBQxicE9yZGVyUGFydHMAAAIBXwQIYnBPcmRNYXQJALUJAgkAkQMCBQxicE9yZGVyUGFydHMAAQIBXwQJYnBPcmRQcm9kAwkAAAIJAJEDAgUMYnBPcmRlclBhcnRzAAICAAUDbmlsCQC1CQIJAJEDAgUMYnBPcmRlclBhcnRzAAICAV8DCQECIT0CCQCQAwEFCGJwT3JkUmVzBQZOVU1SRVMJAAIBAiBBbGwgNiByZXNvdXJjZXMgc2hvdWxkIGJlIHBhc3NlZAMJAQIhPQIJAJADAQUIYnBPcmRNYXQFBk5VTVJFUwkAAgECIEFsbCA2IG1hdGVyaWFscyBzaG91bGQgYmUgcGFzc2VkBAJ3aAkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCFGdldFdhcmVob3VzZVJFQURPTkxZCQDMCAIFC2xhbmRBc3NldElkBQNuaWwFA25pbAQJY3VycmVudFdoCQC8CQIFAndoAgE6BAljdXJyV2hSZXMJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfBAljdXJyV2hNYXQJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0AgFfBApjdXJyV2hQcm9kAwkAAAIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAAUDbmlsCQC1CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAV8EDGN1cnJXaFJlc1ZvbAkBGWdldFdhcmVob3VzZUN1cnJSZXNWb2x1bWUBBQljdXJyZW50V2gEDGN1cnJXaE1hdFZvbAkBGWdldFdhcmVob3VzZUN1cnJNYXRWb2x1bWUBBQljdXJyZW50V2gEDmN1cnJXaEdvb2RzVm9sCQEbZ2V0V2FyZWhvdXNlQ3Vyckdvb2RzVm9sdW1lAQUJY3VycmVudFdoBA9jdXJyV2hMb2NrZWRWb2wJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQljdXJyZW50V2gFDndoSWR4TG9ja2VkVm9sBAt3aFNwYWNlTGVmdAkAZQIJAGUCCQBlAgkAZQIJARJnZXRXYXJlaG91c2VWb2x1bWUBCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhWb2wFDGN1cnJXaFJlc1ZvbAUMY3VycldoTWF0Vm9sBQ5jdXJyV2hHb29kc1ZvbAUPY3VycldoTG9ja2VkVm9sBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQJYnBSZXNMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfBAlicE1hdExpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8ECmJwUHJvZExpc3QDCQAAAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgAFA25pbAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAV8EBm9yZEtleQkBDmtleU9yZGVyQnlMYW5kAQULbGFuZEFzc2V0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cHJvZFR5cGVzBAh2b2xTYWxkbwgFAXACXzQEDG5ld0xvY2tlZFZvbAMJAGYCAAAJAGUCBQ9jdXJyV2hMb2NrZWRWb2wFCHZvbFNhbGRvAAAJAGUCBQ9jdXJyV2hMb2NrZWRWb2wFCHZvbFNhbGRvBAV3aFN0cgkAugkCCQDMCAIJAJEDAgUJY3VycmVudFdoBQh3aElkeFZvbAkAzAgCCQC5CQIIBQFyAl8xAgFfCQDMCAIJALkJAggFAW0CXzECAV8JAMwIAgkAuQkCCAUBcAJfMQIBXwkAzAgCCQCkAwEFDG5ld0xvY2tlZFZvbAUDbmlsAgE6BAtuZXdXaE9yZFN0cgkAugkCCQDMCAIJALkJAggFAXICXzICAV8JAMwIAgkAuQkCCAUBbQJfMgIBXwkAzAgCCQC5CQIIBQFwAl8yAgFfBQNuaWwCAToECG5ld0JwU3RyCQC6CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQC5CQIIBQFyAl8zAgFfCQDMCAIJALkJAggFAW0CXzMCAV8JAMwIAgkAuQkCCAUBcAJfMwIBXwUDbmlsAgE6BAZ3aFNhdmUJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag1zYXZlV2FyZWhvdXNlCQDMCAIFBXdoU3RyCQDMCAIFC2xhbmRBc3NldElkBQNuaWwFA25pbAMJAAACBQZ3aFNhdmUFBndoU2F2ZQQGYnBTYXZlCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQmFja3BhY2sJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUIbmV3QnBTdHIFA25pbAUDbmlsAwkAAAIFBmJwU2F2ZQUGYnBTYXZlBAdhY3Rpb25zCQDMCAIJAQtTdHJpbmdFbnRyeQIFBm9yZEtleQULbmV3V2hPcmRTdHIFA25pbAQNdXNkV2gyQnBTYWxkbwgFAXACXzUECGFjdGlvbnMxAwkAZgIFDXVzZFdoMkJwU2FsZG8AAAQLdXNkV2gyQnBGZWUJAGsDCAUBcAJfNQUKQVVDVElPTkZFRQUFTVVMVDYECHJlZkJ5S2V5CQEPa2V5QWRkcmVzc1JlZkJ5AQUKY2FsbGVyQWRkcgQFcmVmQnkJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0BQhyZWZCeUtleQMJAQlpc0RlZmluZWQBBQVyZWZCeQkAzQgCCQDNCAIJAM0IAgUHYWN0aW9ucwkBDlNjcmlwdFRyYW5zZmVyAwUGY2FsbGVyCQBlAggFAXACXzUJAGgCAAMFC3VzZFdoMkJwRmVlBQt1c2R0QXNzZXRJZAkBDlNjcmlwdFRyYW5zZmVyAwUMcmVzdENvbnRyYWN0BQt1c2RXaDJCcEZlZQULdXNkdEFzc2V0SWQJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQV2YWx1ZQEFBXJlZkJ5BQt1c2RXaDJCcEZlZQULdXNkdEFzc2V0SWQJAM0IAgkAzQgCBQdhY3Rpb25zCQEOU2NyaXB0VHJhbnNmZXIDBQZjYWxsZXIJAGUCCAUBcAJfNQkAaAIAAwULdXNkV2gyQnBGZWUFC3VzZHRBc3NldElkCQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFC3VzZFdoMkJwRmVlBQt1c2R0QXNzZXRJZAUHYWN0aW9ucwQNdXNkQnAyV2hTYWxkbwgFAXACXzYDCQBmAgUNdXNkQnAyV2hTYWxkbwAAAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQECnBtdEFzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAggFA3BtdAdhc3NldElkAh5XQVZFUyBjYW4ndCBiZSB1c2VkIGFzIHBheW1lbnQDCQECIT0CBQpwbXRBc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEDCQECIT0CBQNhbXQFDXVzZEJwMldoU2FsZG8JAAIBCQCsAgICElBheW1lbnQgbmVlZGVkIGlzIAkApAMBBQ11c2RCcDJXaFNhbGRvAwkAZgIFDk1JTlNIT1BQQVlNRU5UBQNhbXQJAAIBCQCsAgICG1BheW1lbnQgc2hvdWxkIGJlIGF0IGxlYXN0IAkApAMBBQ5NSU5TSE9QUEFZTUVOVAQLdXNkQnAyV2hGZWUJAGsDCAUBcAJfNgUKQVVDVElPTkZFRQUFTVVMVDYECHJlZkJ5S2V5CQEPa2V5QWRkcmVzc1JlZkJ5AQUJbGFuZE93bmVyBAVyZWZCeQkAnQgCBQ9zdGFraW5nQ29udHJhY3QFCHJlZkJ5S2V5AwkBCWlzRGVmaW5lZAEFBXJlZkJ5CQDNCAIJAM0IAgkAzQgCBQhhY3Rpb25zMQkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUJbGFuZE93bmVyCQBlAggFAXACXzYJAGgCAAMFC3VzZEJwMldoRmVlBQt1c2R0QXNzZXRJZAkBDlNjcmlwdFRyYW5zZmVyAwUMcmVzdENvbnRyYWN0BQt1c2RCcDJXaEZlZQULdXNkdEFzc2V0SWQJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQV2YWx1ZQEFBXJlZkJ5BQt1c2RCcDJXaEZlZQULdXNkdEFzc2V0SWQJAM0IAgkAzQgCBQhhY3Rpb25zMQkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUJbGFuZE93bmVyCQBlAggFAXACXzYJAGgCAAMFC3VzZEJwMldoRmVlBQt1c2R0QXNzZXRJZAkBDlNjcmlwdFRyYW5zZmVyAwUMcmVzdENvbnRyYWN0BQt1c2RCcDJXaEZlZQULdXNkdEFzc2V0SWQDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhJObyBwYXltZW50cyBuZWVkZWQFCGFjdGlvbnMxCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAEhqo9Q=", "height": 2590488, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 2xufPf213EMY9jHGXYMPp6Vqsg8jA4pbzmdDmJ6DDp1W Next: BFw3GrsqHpjMPjbPA57ur63We2yEsy1UiRaAmeg1vjW2 Diff:
OldNewDifferences
512512 let u = if (((co - cj._3) > 0))
513513 then [ScriptTransfer(bZ.caller, (co - cj._3), g)]
514514 else nil
515- $Tuple2((cj._1 ++ u), cl)
515+ let cs = (cj._3 / 100)
516+ $Tuple2(((cj._1 ++ u) :+ ScriptTransfer(y, cs, g)), cl)
516517 }
517518 }
518519 }
546547 let cf = bz(am(an))
547548 let cg = split(cf[az], "_")
548549 let cq = split(cf[aA], "_")
549- func cs (aW,bD) = {
550+ func ct (aW,bD) = {
550551 let bm = af(bj, bD)
551552 let bn = valueOrElse(getInteger(bm), 0)
552- let ct = cb[bD]
553- if ((ct > parseIntValue(cg[bD])))
554- then throw(((((("You have " + cg[bD]) + " of ") + M[bD]) + ", but tried to exchange ") + toString(ct)))
555- else if ((0 > ct))
556- then throw(((("You tried to exchange negative amount of " + M[bD]) + ": ") + toString(ct)))
557- else if ((ct > 0))
558- then $Tuple4((aW._1 :+ toString((parseIntValue(cg[bD]) - ct))), (aW._2 :+ toString((parseIntValue(cq[bD]) + ct))), (aW._3 + fraction(ct, D, d)), (aW._4 :+ IntegerEntry(bm, bn)))
553+ let cu = cb[bD]
554+ if ((cu > parseIntValue(cg[bD])))
555+ then throw(((((("You have " + cg[bD]) + " of ") + M[bD]) + ", but tried to exchange ") + toString(cu)))
556+ else if ((0 > cu))
557+ then throw(((("You tried to exchange negative amount of " + M[bD]) + ": ") + toString(cu)))
558+ else if ((cu > 0))
559+ then $Tuple4((aW._1 :+ toString((parseIntValue(cg[bD]) - cu))), (aW._2 :+ toString((parseIntValue(cq[bD]) + cu))), (aW._3 + fraction(cu, D, d)), (aW._4 :+ IntegerEntry(bm, bn)))
559560 else $Tuple4((aW._1 :+ cg[bD]), (aW._2 :+ cq[bD]), aW._3, aW._4)
560561 }
561562
565566 let ba = $Tuple4(nil, nil, 0, nil)
566567 func bb (bc,bd) = if ((bd >= aZ))
567568 then bc
568- else cs(bc, aY[bd])
569+ else ct(bc, aY[bd])
569570
570571 func be (bc,bd) = if ((bd >= aZ))
571572 then bc
581582 let u = if (((co - cj._3) > 0))
582583 then [ScriptTransfer(bZ.caller, (co - cj._3), g)]
583584 else nil
584- $Tuple2((u ++ cj._4), cl)
585+ let cs = (cj._3 / 100)
586+ $Tuple2(((u ++ cj._4) :+ ScriptTransfer(y, cs, g)), cl)
585587 }
586588 }
587589 }
593595
594596
595597 @Callable(bZ)
596-func craftGoods (cu,cv) = {
598+func craftGoods (cv,cw) = {
597599 let cd = bB()
598600 if ((cd == cd))
599601 then if ((size(bZ.payments) != 1))
606608 then throw("USDT payments only!")
607609 else if ((co != b))
608610 then throw("exactly 1 USDT must be attached as payment")
609- else if ((0 >= cv))
611+ else if ((0 >= cw))
610612 then throw("Quantity should be positive")
611613 else {
612614 let an = valueOrErrorMessage(getString(z, ak(toString(bZ.caller))), "You don't have a duck staked")
614616 if ((ce[aw] != "M"))
615617 then throw(("Duck location type should be Manufactory, but is " + ce[aw]))
616618 else {
617- let cw = ce[av]
619+ let cx = ce[av]
618620 let cf = bz(am(an))
619621 let cq = split(cf[aA], "_")
620- if (if ((0 > cu))
622+ if (if ((0 > cv))
621623 then true
622- else (cu >= size(Q)))
623- then throw(("Unknown product idx=" + toString(cu)))
624+ else (cv >= size(Q)))
625+ then throw(("Unknown product idx=" + toString(cv)))
624626 else {
625- let cx = split(Q[cu], "_")
626- if ((size(cx) != (B + 3)))
627- then throw(("Fatal: unknown recipe: " + Q[cu]))
627+ let cy = split(Q[cv], "_")
628+ if ((size(cy) != (B + 3)))
629+ then throw(("Fatal: unknown recipe: " + Q[cv]))
628630 else {
629- let cy = parseIntValue(cx[ae])
630- if ((P[cy] != cw))
631- then throw(((("This product is available in " + P[cy]) + ", but you are in ") + cw))
631+ let cz = parseIntValue(cy[ae])
632+ if ((P[cz] != cx))
633+ then throw(((("This product is available in " + P[cz]) + ", but you are in ") + cx))
632634 else {
633- let cz = if ((cf[aB] == ""))
635+ let cA = if ((cf[aB] == ""))
634636 then nil
635637 else split(cf[aB], "_")
636- func cA (aW,cB) = {
637- let cC = aW._2
638- let cD = if ((size(cz) > cC))
639- then cz[cC]
638+ func cB (aW,cC) = {
639+ let cD = aW._2
640+ let cE = if ((size(cA) > cD))
641+ then cA[cD]
640642 else "0"
641- let cE = parseIntValue(cD)
642- let bk = (cv * parseIntValue(cx[ad]))
643- let cF = if ((cC == cu))
644- then toString((cE + bk))
645- else cD
646- $Tuple2((aW._1 :+ cF), (cC + 1))
643+ let cF = parseIntValue(cE)
644+ let bk = (cw * parseIntValue(cy[ad]))
645+ let cG = if ((cD == cv))
646+ then toString((cF + bk))
647+ else cE
648+ $Tuple2((aW._1 :+ cG), (cD + 1))
647649 }
648650
649- let cG = ( let aY = Q
651+ let cH = ( let aY = Q
650652 let aZ = size(aY)
651653 let ba = $Tuple2(nil, 0)
652654 func bb (bc,bd) = if ((bd >= aZ))
653655 then bc
654- else cA(bc, aY[bd])
656+ else cB(bc, aY[bd])
655657
656658 func be (bc,bd) = if ((bd >= aZ))
657659 then bc
658660 else throw("List size exceeds 50")
659661
660662 be(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(ba, 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
661- func cH (aW,bD) = {
662- let cI = ((parseIntValue(cx[bD]) * c) * cv)
663- let cJ = parseIntValue(cq[bD])
664- if ((cI > cJ))
665- then throw(((((((("You have " + cq[bD]) + " of ") + N[bD]) + ", but recipe requires ") + toString(cI)) + " for quantity ") + toString(cv)))
666- else if ((cI > 0))
667- then (aW :+ toString((cJ - cI)))
663+ func cI (aW,bD) = {
664+ let cJ = ((parseIntValue(cy[bD]) * c) * cw)
665+ let cK = parseIntValue(cq[bD])
666+ if ((cJ > cK))
667+ then throw(((((((("You have " + cq[bD]) + " of ") + N[bD]) + ", but recipe requires ") + toString(cJ)) + " for quantity ") + toString(cw)))
668+ else if ((cJ > 0))
669+ then (aW :+ toString((cK - cJ)))
668670 else (aW :+ cq[bD])
669671 }
670672
672674 let aY = [0, 1, 2, 3, 4, 5]
673675 let aZ = size(aY)
674676 let ba = nil
675- func cK (bc,bd) = if ((bd >= aZ))
677+ func cL (bc,bd) = if ((bd >= aZ))
676678 then bc
677- else cH(bc, aY[bd])
679+ else cI(bc, aY[bd])
678680
679- func cL (bc,bd) = if ((bd >= aZ))
681+ func cM (bc,bd) = if ((bd >= aZ))
680682 then bc
681683 else throw("List size exceeds 6")
682684
683- cL(cK(cK(cK(cK(cK(cK(ba, 0), 1), 2), 3), 4), 5), 6)
685+ cM(cL(cL(cL(cL(cL(cL(ba, 0), 1), 2), 3), 4), 5), 6)
684686 }
685- let ck = makeString([cf[ay], cf[az], makeString(cj, "_"), makeString(cG, "_")], ":")
687+ let ck = makeString([cf[ay], cf[az], makeString(cj, "_"), makeString(cH, "_")], ":")
686688 let cl = aK(invoke(z, "updateBackpack", [an, ck], nil))
687689 $Tuple2(nil, cl)
688690 }
697699
698700
699701 @Callable(bZ)
700-func setWarehouseOrder (cM,aj) = {
701- let cN = bZ.originCaller
702- let au = toString(cN)
703- let cl = if ((cN != y))
702+func setWarehouseOrder (cN,aj) = {
703+ let cO = bZ.originCaller
704+ let au = toString(cO)
705+ let cl = if ((cO != y))
704706 then bB()
705707 else false
706- let cO = value(assetInfo(fromBase58String(aj)))
708+ let cP = value(assetInfo(fromBase58String(aj)))
707709 if (!(isDefined(getInteger(z, as(aj)))))
708- then throw((("NFT " + cO.name) + " is not staked"))
710+ then throw((("NFT " + cP.name) + " is not staked"))
709711 else {
710- let cP = valueOrErrorMessage(getString(z, aq(aj)), (("NFT " + cO.name) + " is orphaned"))
711- if (if ((cN != y))
712- then (cP != au)
712+ let cQ = valueOrErrorMessage(getString(z, aq(aj)), (("NFT " + cP.name) + " is orphaned"))
713+ if (if ((cO != y))
714+ then (cQ != au)
713715 else false)
714716 then throw((H + " is not yours"))
715717 else {
716- let cQ = split_4C(cM, ":")
717- if ((size(cQ) != 3))
718+ let cR = split_4C(cN, ":")
719+ if ((size(cR) != 3))
718720 then throw("cargoListStr should contain exactly 2 ':' separators")
719721 else {
720- let cR = split(cQ[0], "_")
721- let cS = split(cQ[1], "_")
722- let cT = if ((cQ[2] == ""))
722+ let cS = split(cR[0], "_")
723+ let cT = split(cR[1], "_")
724+ let cU = if ((cR[2] == ""))
723725 then nil
724- else split(cQ[2], "_")
725- if ((size(cR) != B))
726+ else split(cR[2], "_")
727+ if ((size(cS) != B))
726728 then throw("All 6 resources should be passed")
727- else if ((size(cS) != B))
729+ else if ((size(cT) != B))
728730 then throw("All 6 materials should be passed")
729731 else {
730- let cU = aK(invoke(z, "getWarehouseREADONLY", [aj], nil))
731- let aU = split_4C(cU, ":")
732- let cV = split(aU[aD], "_")
733- let cW = split(aU[aE], "_")
734- let cX = if ((aU[aF] == ""))
732+ let cV = aK(invoke(z, "getWarehouseREADONLY", [aj], nil))
733+ let aU = split_4C(cV, ":")
734+ let cW = split(aU[aD], "_")
735+ let cX = split(aU[aE], "_")
736+ let cY = if ((aU[aF] == ""))
735737 then nil
736738 else split(aU[aF], "_")
737- let cY = aQ(aU[aC])
739+ let cZ = aQ(aU[aC])
738740 let aO = ai(aj)
739- let cZ = aN(aO)
740- let da = split(cZ[aH], "_")
741- let db = split(cZ[aI], "_")
742- let dc = if ((cZ[aJ] == ""))
741+ let da = aN(aO)
742+ let db = split(da[aH], "_")
743+ let dc = split(da[aI], "_")
744+ let dd = if ((da[aJ] == ""))
743745 then nil
744- else split(cZ[aJ], "_")
745- let dd = 0
746- let de = {
747- let aY = cR
746+ else split(da[aJ], "_")
747+ let de = 0
748+ let df = {
749+ let aY = cS
748750 let aZ = size(aY)
749- let ba = $Tuple6(0, nil, 0, 0, cV, da)
751+ let ba = $Tuple6(0, nil, 0, 0, cW, db)
750752 func bb (bc,bd) = if ((bd >= aZ))
751753 then bc
752754 else bC(bc, aY[bd])
758760 be(bb(bb(bb(bb(bb(bb(ba, 0), 1), 2), 3), 4), 5), 6)
759761 }
760762 let bw = {
761- let aY = cS
763+ let aY = cT
762764 let aZ = size(aY)
763- let ba = $Tuple6(0, nil, de._3, de._4, cW, db)
764- func cK (bc,bd) = if ((bd >= aZ))
765+ let ba = $Tuple6(0, nil, df._3, df._4, cX, dc)
766+ func cL (bc,bd) = if ((bd >= aZ))
765767 then bc
766768 else bC(bc, aY[bd])
767769
768- func cL (bc,bd) = if ((bd >= aZ))
770+ func cM (bc,bd) = if ((bd >= aZ))
769771 then bc
770772 else throw("List size exceeds 6")
771773
772- cL(cK(cK(cK(cK(cK(cK(ba, 0), 1), 2), 3), 4), 5), 6)
774+ cM(cL(cL(cL(cL(cL(cL(ba, 0), 1), 2), 3), 4), 5), 6)
773775 }
774776 let aP = {
775- let aY = cT
777+ let aY = cU
776778 let aZ = size(aY)
777- let ba = $Tuple6(0, nil, bw._3, bw._4, cX, dc)
778- func df (bc,bd) = if ((bd >= aZ))
779+ let ba = $Tuple6(0, nil, bw._3, bw._4, cY, dd)
780+ func dg (bc,bd) = if ((bd >= aZ))
779781 then bc
780782 else bC(bc, aY[bd])
781783
782- func dg (bc,bd) = if ((bd >= aZ))
784+ func dh (bc,bd) = if ((bd >= aZ))
783785 then bc
784786 else throw("List size exceeds 50")
785787
786- dg(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(ba, 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)
788+ dh(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(ba, 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)
787789 }
788- let dh = aP._3
789- if ((dh > cY))
790- then throw((((("Attempt to reserve " + toString(dh)) + " space, but only ") + toString(cY)) + " warehouse space left"))
790+ let di = aP._3
791+ if ((di > cZ))
792+ then throw((((("Attempt to reserve " + toString(di)) + " space, but only ") + toString(cZ)) + " warehouse space left"))
791793 else {
792- let di = makeString_2C([aU[aC], makeString(de._2, "_"), makeString(bw._2, "_"), makeString(aP._2, "_"), toString(dh)], ":")
793- let dj = invoke(z, "saveWarehouse", [di, aj], nil)
794- if ((dj == dj))
794+ let dj = makeString_2C([aU[aC], makeString(df._2, "_"), makeString(bw._2, "_"), makeString(aP._2, "_"), toString(di)], ":")
795+ let dk = invoke(z, "saveWarehouse", [dj, aj], nil)
796+ if ((dk == dk))
795797 then {
796- let dk = aP._4
797- let dl = if ((dk > 0))
798+ let dl = aP._4
799+ let dm = if ((dl > 0))
798800 then if ((size(bZ.payments) != 1))
799801 then throw("exactly 1 payment must be attached")
800802 else {
803805 let cp = valueOrErrorMessage(cn.assetId, "WAVES can't be used as payment")
804806 if ((cp != g))
805807 then throw("USDT payments only!")
806- else if ((co != dk))
807- then throw(("Payment needed is " + toString(dk)))
808- else [StringEntry(aO, cM)]
808+ else if ((co != dl))
809+ then throw(("Payment needed is " + toString(dl)))
810+ else [StringEntry(aO, cN)]
809811 }
810- else if ((dk == 0))
812+ else if ((dl == 0))
811813 then if ((size(bZ.payments) != 0))
812814 then throw("No payments needed")
813- else [StringEntry(aO, cM)]
815+ else [StringEntry(aO, cN)]
814816 else if ((size(bZ.payments) != 0))
815817 then throw("No payments needed")
816- else [ScriptTransfer(addressFromStringValue(cP), -(dk), g), StringEntry(aO, cM)]
817- $Tuple2(dl, cl)
818+ else [ScriptTransfer(addressFromStringValue(cQ), -(dl), g), StringEntry(aO, cN)]
819+ $Tuple2(dm, cl)
818820 }
819821 else throw("Strict value is not equal to itself.")
820822 }
827829
828830
829831 @Callable(bZ)
830-func acceptWarehouseOrder (dm,aj,an) = {
832+func acceptWarehouseOrder (dn,aj,an) = {
831833 let cd = bB()
832834 if ((cd == cd))
833835 then {
834- let dn = bZ.originCaller
835- let do = toString(dn)
836- let dp = valueOrErrorMessage(getString(z, ak(do)), "You don't have a duck staked")
837- let ce = valueOrElse(getString(z, ao(dp)), A)
838- let dq = split(value(ce), "_")
839- if ((dq[aw] != "L"))
840- then throw((("Duck location type is " + dq[aw]) + ", but should be L"))
841- else if ((dp != an))
842- then throw(((("Your staked duck is " + dp) + ", but passed ") + an))
836+ let do = bZ.originCaller
837+ let dp = toString(do)
838+ let dq = valueOrErrorMessage(getString(z, ak(dp)), "You don't have a duck staked")
839+ let ce = valueOrElse(getString(z, ao(dq)), A)
840+ let dr = split(value(ce), "_")
841+ if ((dr[aw] != "L"))
842+ then throw((("Duck location type is " + dr[aw]) + ", but should be L"))
843+ else if ((dq != an))
844+ then throw(((("Your staked duck is " + dq) + ", but passed ") + an))
843845 else {
844- let dr = value(assetInfo(fromBase58String(aj)))
846+ let ds = value(assetInfo(fromBase58String(aj)))
845847 if (!(isDefined(getInteger(z, as(aj)))))
846- then throw((("NFT " + dr.name) + " is not staked"))
848+ then throw((("NFT " + ds.name) + " is not staked"))
847849 else {
848- let ds = valueOrErrorMessage(getString(z, aq(aj)), (("NFT " + dr.name) + " is orphaned"))
849- if ((ds == do))
850+ let dt = valueOrErrorMessage(getString(z, aq(aj)), (("NFT " + ds.name) + " is orphaned"))
851+ if ((dt == dp))
850852 then throw("You cannot trade with yourself")
851853 else {
852- let dt = split_4C(dm, ":")
853- if ((size(dt) != 3))
854+ let du = split_4C(dn, ":")
855+ if ((size(du) != 3))
854856 then throw("bpOrderStr should contain exactly 2 ':' separators")
855857 else {
856- let du = split(dt[0], "_")
857- let dv = split(dt[1], "_")
858- let dw = if ((dt[2] == ""))
858+ let dv = split(du[0], "_")
859+ let dw = split(du[1], "_")
860+ let dx = if ((du[2] == ""))
859861 then nil
860- else split(dt[2], "_")
861- if ((size(du) != B))
862+ else split(du[2], "_")
863+ if ((size(dv) != B))
862864 then throw("All 6 resources should be passed")
863- else if ((size(dv) != B))
865+ else if ((size(dw) != B))
864866 then throw("All 6 materials should be passed")
865867 else {
866- let cU = aK(invoke(z, "getWarehouseREADONLY", [aj], nil))
867- let aU = split_4C(cU, ":")
868- let cV = split(aU[aD], "_")
869- let cW = split(aU[aE], "_")
870- let cX = if ((aU[aF] == ""))
868+ let cV = aK(invoke(z, "getWarehouseREADONLY", [aj], nil))
869+ let aU = split_4C(cV, ":")
870+ let cW = split(aU[aD], "_")
871+ let cX = split(aU[aE], "_")
872+ let cY = if ((aU[aF] == ""))
871873 then nil
872874 else split(aU[aF], "_")
873- let dx = aT(aU)
874- let dy = bf(aU)
875- let dz = bg(aU)
876- let dA = parseIntValue(aU[aG])
877- let dB = ((((aQ(aU[aC]) - dx) - dy) - dz) - dA)
875+ let dy = aT(aU)
876+ let dz = bf(aU)
877+ let dA = bg(aU)
878+ let dB = parseIntValue(aU[aG])
879+ let dC = ((((aQ(aU[aC]) - dy) - dz) - dA) - dB)
878880 let bA = am(an)
879881 let cf = bz(bA)
880- let dC = split(cf[az], "_")
881- let dD = split(cf[aA], "_")
882- let dE = if ((cf[aB] == ""))
882+ let dD = split(cf[az], "_")
883+ let dE = split(cf[aA], "_")
884+ let dF = if ((cf[aB] == ""))
883885 then nil
884886 else split(cf[aB], "_")
885887 let aO = ai(aj)
886- let dF = aN(aO)
887- let dG = split(dF[aH], "_")
888- let dH = split(dF[aI], "_")
889- let dI = if ((dF[aJ] == ""))
888+ let dG = aN(aO)
889+ let dH = split(dG[aH], "_")
890+ let dI = split(dG[aI], "_")
891+ let dJ = if ((dG[aJ] == ""))
890892 then nil
891- else split(dF[aJ], "_")
892- let dd = 0
893- let de = {
894- let aY = du
893+ else split(dG[aJ], "_")
894+ let de = 0
895+ let df = {
896+ let aY = dv
895897 let aZ = size(aY)
896- let ba = $Tuple11(nil, nil, nil, 0, 0, 0, 0, dC, cV, dG, M)
898+ let ba = $Tuple11(nil, nil, nil, 0, 0, 0, 0, dD, cW, dH, M)
897899 func bb (bc,bd) = if ((bd >= aZ))
898900 then bc
899901 else bO(bc, aY[bd])
905907 be(bb(bb(bb(bb(bb(bb(ba, 0), 1), 2), 3), 4), 5), 6)
906908 }
907909 let bw = {
908- let aY = dv
910+ let aY = dw
909911 let aZ = size(aY)
910- let ba = $Tuple11(nil, nil, nil, de._4, de._5, de._6, 0, dD, cW, dH, N)
911- func cK (bc,bd) = if ((bd >= aZ))
912+ let ba = $Tuple11(nil, nil, nil, df._4, df._5, df._6, 0, dE, cX, dI, N)
913+ func cL (bc,bd) = if ((bd >= aZ))
912914 then bc
913915 else bO(bc, aY[bd])
914916
915- func cL (bc,bd) = if ((bd >= aZ))
917+ func cM (bc,bd) = if ((bd >= aZ))
916918 then bc
917919 else throw("List size exceeds 6")
918920
919- cL(cK(cK(cK(cK(cK(cK(ba, 0), 1), 2), 3), 4), 5), 6)
921+ cM(cL(cL(cL(cL(cL(cL(ba, 0), 1), 2), 3), 4), 5), 6)
920922 }
921- let aP = if ((size(dw) != 0))
923+ let aP = if ((size(dx) != 0))
922924 then {
923- let aY = dw
925+ let aY = dx
924926 let aZ = size(aY)
925- let ba = $Tuple11(nil, nil, nil, bw._4, bw._5, bw._6, 0, dE, cX, dI, O)
926- func df (bc,bd) = if ((bd >= aZ))
927+ let ba = $Tuple11(nil, nil, nil, bw._4, bw._5, bw._6, 0, dF, cY, dJ, O)
928+ func dg (bc,bd) = if ((bd >= aZ))
927929 then bc
928930 else bO(bc, aY[bd])
929931
930- func dg (bc,bd) = if ((bd >= aZ))
932+ func dh (bc,bd) = if ((bd >= aZ))
931933 then bc
932934 else throw("List size exceeds 50")
933935
934- dg(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(ba, 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)
936+ dh(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(ba, 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)
935937 }
936- else $Tuple11(cX, dI, dE, bw._4, bw._5, bw._6, 0, dE, cX, dI, O)
937- let dh = aP._4
938- let dJ = if ((0 > (dA - dh)))
938+ else $Tuple11(cY, dJ, dF, bw._4, bw._5, bw._6, 0, dF, cY, dJ, O)
939+ let di = aP._4
940+ let dK = if ((0 > (dB - di)))
939941 then 0
940- else (dA - dh)
941- let di = makeString_2C([aU[aC], makeString(de._1, "_"), makeString(bw._1, "_"), makeString(aP._1, "_"), toString(dJ)], ":")
942- let dK = makeString_2C([makeString(de._2, "_"), makeString(bw._2, "_"), makeString(aP._2, "_")], ":")
943- let dL = makeString_2C([cf[ay], makeString(de._3, "_"), makeString(bw._3, "_"), makeString(aP._3, "_")], ":")
944- let dj = invoke(z, "saveWarehouse", [di, aj], nil)
945- if ((dj == dj))
942+ else (dB - di)
943+ let dj = makeString_2C([aU[aC], makeString(df._1, "_"), makeString(bw._1, "_"), makeString(aP._1, "_"), toString(dK)], ":")
944+ let dL = makeString_2C([makeString(df._2, "_"), makeString(bw._2, "_"), makeString(aP._2, "_")], ":")
945+ let dM = makeString_2C([cf[ay], makeString(df._3, "_"), makeString(bw._3, "_"), makeString(aP._3, "_")], ":")
946+ let dk = invoke(z, "saveWarehouse", [dj, aj], nil)
947+ if ((dk == dk))
946948 then {
947- let dM = invoke(z, "updateBackpack", [an, dL], nil)
948- if ((dM == dM))
949+ let dN = invoke(z, "updateBackpack", [an, dM], nil)
950+ if ((dN == dN))
949951 then {
950- let dl = [StringEntry(aO, dK)]
951- let dN = aP._5
952- let dO = if ((dN > 0))
952+ let dm = [StringEntry(aO, dL)]
953+ let dO = aP._5
954+ let dP = if ((dO > 0))
953955 then {
954- let dP = fraction(aP._5, K, b)
955- let dQ = at(do)
956- let dR = getString(z, dQ)
957- if (isDefined(dR))
958- then (((dl :+ ScriptTransfer(dn, (aP._5 - (3 * dP)), g)) :+ ScriptTransfer(y, dP, g)) :+ ScriptTransfer(addressFromStringValue(value(dR)), dP, g))
959- else ((dl :+ ScriptTransfer(dn, (aP._5 - (3 * dP)), g)) :+ ScriptTransfer(y, dP, g))
956+ let dQ = fraction(aP._5, K, b)
957+ let dR = at(dp)
958+ let dS = getString(z, dR)
959+ if (isDefined(dS))
960+ then (((dm :+ ScriptTransfer(do, (aP._5 - (3 * dQ)), g)) :+ ScriptTransfer(y, dQ, g)) :+ ScriptTransfer(addressFromStringValue(value(dS)), dQ, g))
961+ else ((dm :+ ScriptTransfer(do, (aP._5 - (3 * dQ)), g)) :+ ScriptTransfer(y, dQ, g))
960962 }
961- else dl
962- let dS = aP._6
963- if ((dS > 0))
963+ else dm
964+ let dT = aP._6
965+ if ((dT > 0))
964966 then if ((size(bZ.payments) != 1))
965967 then throw("exactly 1 payment must be attached")
966968 else {
969971 let cp = valueOrErrorMessage(cn.assetId, "WAVES can't be used as payment")
970972 if ((cp != g))
971973 then throw("USDT payments only!")
972- else if ((co != dS))
973- then throw(("Payment needed is " + toString(dS)))
974+ else if ((co != dT))
975+ then throw(("Payment needed is " + toString(dT)))
974976 else if ((L > co))
975977 then throw(("Payment should be at least " + toString(L)))
976978 else {
977- let dT = fraction(aP._6, K, b)
978- let dQ = at(ds)
979- let dR = getString(z, dQ)
980- if (isDefined(dR))
981- then (((dO :+ ScriptTransfer(addressFromStringValue(ds), (aP._6 - (3 * dT)), g)) :+ ScriptTransfer(y, dT, g)) :+ ScriptTransfer(addressFromStringValue(value(dR)), dT, g))
982- else ((dO :+ ScriptTransfer(addressFromStringValue(ds), (aP._6 - (3 * dT)), g)) :+ ScriptTransfer(y, dT, g))
979+ let dU = fraction(aP._6, K, b)
980+ let dR = at(dt)
981+ let dS = getString(z, dR)
982+ if (isDefined(dS))
983+ then (((dP :+ ScriptTransfer(addressFromStringValue(dt), (aP._6 - (3 * dU)), g)) :+ ScriptTransfer(y, dU, g)) :+ ScriptTransfer(addressFromStringValue(value(dS)), dU, g))
984+ else ((dP :+ ScriptTransfer(addressFromStringValue(dt), (aP._6 - (3 * dU)), g)) :+ ScriptTransfer(y, dU, g))
983985 }
984986 }
985987 else if ((size(bZ.payments) != 0))
986988 then throw("No payments needed")
987- else dO
989+ else dP
988990 }
989991 else throw("Strict value is not equal to itself.")
990992 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "__"
55
66 let b = 1000000
77
88 let c = 10000000
99
1010 let d = 100000000
1111
1212 let e = 10000000000
1313
1414 let f = take(drop(this.bytes, 1), 1)
1515
1616 let g = {
1717 let h = f
1818 if ((base58'2W' == h))
1919 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
2020 else if ((base58'2T' == h))
2121 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
2222 else throw("Unknown chain")
2323 }
2424
2525 let i = {
2626 let h = f
2727 if ((base58'2W' == h))
2828 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
2929 else if ((base58'2T' == h))
3030 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
3131 else throw("Unknown chain")
3232 }
3333
3434 func j (k,l) = valueOrErrorMessage(getString(k, l), makeString(["mandatory ", toString(k), ".", l, " is not defined"], ""))
3535
3636
3737 func m (l,n) = valueOrElse(getInteger(this, l), n)
3838
3939
4040 let o = 1
4141
4242 let p = 2
4343
4444 let q = 3
4545
4646 func r () = "%s__restConfig"
4747
4848
4949 func s () = "%s__restAddr"
5050
5151
5252 func t (u) = split_4C(j(u, r()), a)
5353
5454
5555 func v (w,x) = valueOrErrorMessage(addressFromString(w[x]), ("Rest cfg doesn't contain address at index " + toString(x)))
5656
5757
5858 let y = addressFromStringValue(valueOrElse(getString(this, s()), i))
5959
6060 let w = t(y)
6161
6262 let z = v(w, o)
6363
6464 let A = "Africa_F_Africa"
6565
6666 let B = 6
6767
6868 let C = 10000000000
6969
7070 let D = 39637
7171
7272 let E = 10000
7373
7474 let F = 200
7575
7676 let G = 300
7777
7878 let H = "LAND"
7979
8080 let I = "DUCK"
8181
8282 let J = 10000000000
8383
8484 let K = 10000
8585
8686 let L = 100000
8787
8888 let M = ["Oil", "Ore", "Wood", "Sand", "Clay", "Organic"]
8989
9090 let N = ["Fuel", "Metal", "Plank", "Glass", "Plastic", "Protein"]
9191
9292 let O = ["First Aid Kit", "Backpack", "Food Ration", "Jet Pack", "Shield"]
9393
9494 let P = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
9595
9696 let Q = ["1_1_1_2_2_5_1_10_0", "2_2_2_4_4_10_1_10_0", "3_3_3_6_6_15_1_10_0", "2_5_5_2_7_5_2_100_1", "4_10_10_4_14_10_2_100_1", "6_15_15_6_21_15_2_100_1", "1_1_1_1_1_8_1_10_2", "2_2_2_2_2_16_1_10_2", "3_3_3_3_3_24_1_10_2", "9_9_1_5_5_1_5_100_3", "18_18_2_10_10_2_5_100_3", "27_27_3_15_15_3_5_100_3", "2_2_1_2_2_2_1_10_4", "4_4_2_4_4_4_1_10_4", "6_6_3_6_6_6_1_10_4"]
9797
9898 let R = 0
9999
100100 let S = 1
101101
102102 let T = 2
103103
104104 let U = 3
105105
106106 let V = 4
107107
108108 let W = 0
109109
110110 let X = 1
111111
112112 let Y = 2
113113
114114 let Z = 3
115115
116116 let aa = 4
117117
118118 let ab = 5
119119
120120 let ac = 6
121121
122122 let ad = 7
123123
124124 let ae = 8
125125
126126 func af (ag,ah) = ((("factoryWhByContinentAndRes_" + ag) + "_") + toString(ah))
127127
128128
129129 func ai (aj) = ("landOrder_" + aj)
130130
131131
132132 func ak (al) = ("stakedDuckByOwner_" + al)
133133
134134
135135 func am (an) = ("backPack_" + an)
136136
137137
138138 func ao (an) = ("duckLocation_" + an)
139139
140140
141141 func ap () = "contractsBlocked"
142142
143143
144144 func aq (ar) = ("nftOwner_" + ar)
145145
146146
147147 func as (ar) = ("stakedTime_" + ar)
148148
149149
150150 func at (au) = ("accRefBy_" + au)
151151
152152
153153 let av = 0
154154
155155 let aw = 1
156156
157157 let ax = 2
158158
159159 let ay = 0
160160
161161 let az = 1
162162
163163 let aA = 2
164164
165165 let aB = 3
166166
167167 let aC = 0
168168
169169 let aD = 1
170170
171171 let aE = 2
172172
173173 let aF = 3
174174
175175 let aG = 4
176176
177177 let aH = 0
178178
179179 let aI = 1
180180
181181 let aJ = 2
182182
183183 func aK (aL) = {
184184 let h = aL
185185 if ($isInstanceOf(h, "String"))
186186 then {
187187 let aM = h
188188 aM
189189 }
190190 else throw("fail to cast into String")
191191 }
192192
193193
194194 func aN (aO) = {
195195 let aP = split(valueOrElse(getString(aO), "0@0_0@0_0@0_0@0_0@0_0@0:0@0_0@0_0@0_0@0_0@0_0@0:"), ":")
196196 [if ((size(split(aP[aH], "_")) == B))
197197 then aP[aH]
198198 else "0@0_0@0_0@0_0@0_0@0_0@0", if ((size(split(aP[aI], "_")) == B))
199199 then aP[aI]
200200 else "0@0_0@0_0@0_0@0_0@0_0@0", aP[aJ]]
201201 }
202202
203203
204204 func aQ (aR) = {
205205 let aS = split(aR, "_")
206206 ((J * (parseIntValue(aS[1]) + 1)) * parseIntValue(aS[0]))
207207 }
208208
209209
210210 func aT (aU) = {
211211 func aV (aW,aX) = (aW + parseIntValue(aX))
212212
213213 let aY = split(aU[aD], "_")
214214 let aZ = size(aY)
215215 let ba = 0
216216 func bb (bc,bd) = if ((bd >= aZ))
217217 then bc
218218 else aV(bc, aY[bd])
219219
220220 func be (bc,bd) = if ((bd >= aZ))
221221 then bc
222222 else throw("List size exceeds 6")
223223
224224 be(bb(bb(bb(bb(bb(bb(ba, 0), 1), 2), 3), 4), 5), 6)
225225 }
226226
227227
228228 func bf (aU) = {
229229 func aV (aW,aX) = (aW + parseIntValue(aX))
230230
231231 let aY = split(aU[aE], "_")
232232 let aZ = size(aY)
233233 let ba = 0
234234 func bb (bc,bd) = if ((bd >= aZ))
235235 then bc
236236 else aV(bc, aY[bd])
237237
238238 func be (bc,bd) = if ((bd >= aZ))
239239 then bc
240240 else throw("List size exceeds 6")
241241
242242 be(bb(bb(bb(bb(bb(bb(ba, 0), 1), 2), 3), 4), 5), 6)
243243 }
244244
245245
246246 func bg (aU) = {
247247 let bh = aU[aF]
248248 if ((bh == ""))
249249 then 0
250250 else {
251251 func aV (aW,aX) = (aW + parseIntValue(aX))
252252
253253 let aY = split_4C(bh, "_")
254254 let aZ = size(aY)
255255 let ba = 0
256256 func bb (bc,bd) = if ((bd >= aZ))
257257 then bc
258258 else aV(bc, aY[bd])
259259
260260 func be (bc,bd) = if ((bd >= aZ))
261261 then bc
262262 else throw("List size exceeds 50")
263263
264264 be(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(ba, 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)
265265 }
266266 }
267267
268268
269269 func bi (bj,ah,bk,bl) = {
270270 let bm = af(bj, ah)
271271 let bn = valueOrElse(getInteger(bm), 0)
272272 let bo = if ((bn > C))
273273 then 0
274274 else if (((bn + bk) > C))
275275 then (C - bn)
276276 else bk
277277 let bp = (fraction(bo, ((F * D) - fraction(((100 * bn) + (50 * bo)), D, C)), e) + fraction((bk - bo), D, d))
278278 let bq = (bl - (bl / 100))
279279 if (((bq * bk) > (bp * d)))
280280 then throw((((((((((("Actual price = " + toString(bp)) + " / ") + toString(bk)) + " < minPrice = ") + toString(bl)) + ", (") + bj) + ", ") + M[ah]) + ")"))
281281 else $Tuple2(IntegerEntry(bm, (bn + bk)), bp)
282282 }
283283
284284
285285 func br (bj,bs,bk,bt) = {
286286 let bm = af(bj, bs)
287287 let bn = valueOrElse(getInteger(bm), 0)
288288 let bu = if ((bn > C))
289289 then min([bk, (bn - C)])
290290 else 0
291291 let bv = min([bn, (bk - bu)])
292292 let bw = (bv + bu)
293293 let bx = (fraction(bv, ((G * D) - fraction(((100 * bn) - (50 * bv)), D, C)), e) + fraction(bu, (2 * D), d))
294294 let by = (bt + (bt / 100))
295295 if (((bx * d) > (by * bw)))
296296 then throw((((((((((("Actual price = " + toString(bx)) + " / ") + toString(bw)) + " > maxPrice = ") + toString(bt)) + ", (") + bj) + ", ") + N[bs]) + ")"))
297297 else $Tuple3(IntegerEntry(bm, (bn - bw)), bx, bw)
298298 }
299299
300300
301301 func bz (bA) = {
302302 let aP = split(valueOrElse(getString(z, bA), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
303303 [toString(valueOrElse(parseInt(aP[ay]), 0)), if ((size(split(aP[az], "_")) == B))
304304 then aP[az]
305305 else "0_0_0_0_0_0", if ((size(split(aP[aA], "_")) == B))
306306 then aP[aA]
307307 else "0_0_0_0_0_0", aP[aB]]
308308 }
309309
310310
311311 func bB () = if (valueOrElse(getBoolean(z, ap()), false))
312312 then throw("Contracts are under maintenance")
313313 else unit
314314
315315
316316 func bC (aW,aX) = {
317317 let bD = aW._1
318318 let bE = split(aX, "@")
319319 if ((size(bE) != 2))
320320 then throw("Incorrect order format, should be amount@price")
321321 else {
322322 let bF = parseIntValue(bE[0])
323323 let bG = parseIntValue(bE[1])
324324 let bH = fraction(bF, bG, d)
325325 let bI = parseIntValue(aW._5[bD])
326326 let bJ = split(aW._6[bD], "@")
327327 let bK = parseIntValue(bJ[0])
328328 let bL = parseIntValue(bJ[1])
329329 if ((0 > bL))
330330 then throw("Price can't be negative")
331331 else {
332332 let bM = fraction(bK, bL, d)
333333 if ((bF == 0))
334334 then if ((bK > 0))
335335 then $Tuple6((bD + 1), (aW._2 :+ toString(bI)), (aW._3 - bK), (aW._4 - bM), aW._5, aW._6)
336336 else $Tuple6((bD + 1), (aW._2 :+ toString((bI - bK))), (aW._3 + bK), aW._4, aW._5, aW._6)
337337 else if ((bF > 0))
338338 then if ((0 > bK))
339339 then {
340340 let bN = (bF + bK)
341341 $Tuple6((bD + 1), (aW._2 :+ toString((bI - bK))), (aW._3 + bN), (aW._4 + bH), aW._5, aW._6)
342342 }
343343 else $Tuple6((bD + 1), (aW._2 :+ toString(bI)), ((aW._3 + bF) - bK), ((aW._4 + bH) - bM), aW._5, aW._6)
344344 else if ((0 > bK))
345345 then {
346346 let bN = (bK - bF)
347347 if ((0 > (bI - bN)))
348348 then throw((((("Attempt to take " + toString(bN)) + " from warehouse, but only ") + toString(bI)) + " available"))
349349 else $Tuple6((bD + 1), (aW._2 :+ toString((bI - bN))), (aW._3 + bN), aW._4, aW._5, aW._6)
350350 }
351351 else if ((0 > (bI + bF)))
352352 then throw((((("Attempt to take " + toString(-(bF))) + " from warehouse, but only ") + toString(bI)) + " available"))
353353 else $Tuple6((bD + 1), (aW._2 :+ toString((bI + bF))), ((aW._3 - bF) - bK), (aW._4 - bM), aW._5, aW._6)
354354 }
355355 }
356356 }
357357
358358
359359 func bO (aW,bP) = {
360360 let bD = aW._7
361361 let bQ = split(bP, "@")
362362 if ((size(bQ) != 2))
363363 then throw("Incorrect order format, should be amount@price")
364364 else {
365365 let bR = parseIntValue(bQ[0])
366366 let bS = parseIntValue(bQ[1])
367367 if ((0 > bS))
368368 then throw("Price can't be negative")
369369 else {
370370 let bT = fraction(bR, bS, d)
371371 let bU = parseIntValue(aW._8[bD])
372372 let bI = parseIntValue(aW._9[bD])
373373 let bV = split(aW._10[bD], "@")
374374 let bW = parseIntValue(bV[0])
375375 let bX = parseIntValue(bV[1])
376376 if (if ((bR != 0))
377377 then (bS != bX)
378378 else false)
379379 then throw(((((("Prices of " + aW._11[bD]) + " don't match! WH price=") + toString(bX)) + ", your price=") + toString(bS)))
380380 else {
381381 let bY = fraction(bW, bX, d)
382382 if ((bR == 0))
383383 then $Tuple11((aW._1 :+ toString(bI)), (aW._2 :+ aW._10[bD]), (aW._3 :+ toString(bU)), aW._4, aW._5, aW._6, (aW._7 + 1), aW._8, aW._9, aW._10, aW._11)
384384 else if ((bR > 0))
385385 then if ((0 > bW))
386386 then if ((bR > -(bW)))
387387 then throw(((((("Attempt to buy " + toString(bR)) + " of ") + aW._11[bD]) + ", but warehouse only sells ") + toString(-(bW))))
388388 else $Tuple11((aW._1 :+ toString(bI)), (aW._2 :+ ((toString((bW + bR)) + "@") + toString(bX))), (aW._3 :+ toString((bU + bR))), (aW._4 + bR), aW._5, (aW._6 + bT), (aW._7 + 1), aW._8, aW._9, aW._10, aW._11)
389389 else throw((("Attempt to buy " + aW._11[bD]) + " while warehouse doesn't sell it"))
390390 else if ((bW > 0))
391391 then if ((-(bR) > bW))
392392 then throw(((((("Attempt to sell " + toString(-(bR))) + " of ") + aW._11[bD]) + ", but warehouse only buys ") + toString(bW)))
393393 else if ((-(bR) > bU))
394394 then throw(((((("Attempt to sell " + toString(-(bR))) + ", but you only have ") + toString(bU)) + " of ") + aW._11[bD]))
395395 else $Tuple11((aW._1 :+ toString((bI - bR))), (aW._2 :+ ((toString((bW + bR)) + "@") + toString(bX))), (aW._3 :+ toString((bU + bR))), (aW._4 - bR), (aW._5 - bT), aW._6, (aW._7 + 1), aW._8, aW._9, aW._10, aW._11)
396396 else throw((("Attempt to sell " + aW._11[bD]) + " while warehouse doesn't buy it"))
397397 }
398398 }
399399 }
400400 }
401401
402402
403403 @Callable(bZ)
404404 func constructorV1 (ca) = if ((bZ.caller != this))
405405 then throw("Permission denied")
406406 else [StringEntry(s(), ca)]
407407
408408
409409
410410 @Callable(bZ)
411411 func sellResources (cb,cc) = {
412412 let cd = bB()
413413 if ((cd == cd))
414414 then {
415415 let an = valueOrErrorMessage(getString(z, ak(toString(bZ.caller))), "You don't have a duck staked")
416416 if ((size(bZ.payments) != 0))
417417 then throw("sellResources doesn't require any payments")
418418 else {
419419 let ce = split(valueOrElse(getString(z, ao(an)), A), "_")
420420 if ((ce[aw] != "F"))
421421 then throw(("Duck location type should be Factory, but is " + ce[aw]))
422422 else {
423423 let bj = ce[ax]
424424 let cf = bz(am(an))
425425 let cg = split(cf[az], "_")
426426 func ch (aW,bD) = if ((cb[bD] > parseIntValue(cg[bD])))
427427 then throw(((((("You have " + cg[bD]) + " of ") + M[bD]) + ", but tried to sell ") + toString(cb[bD])))
428428 else if ((0 > cb[bD]))
429429 then throw(((("You tried to sell negative amount of " + M[bD]) + ": ") + toString(cb[bD])))
430430 else if ((cb[bD] > 0))
431431 then {
432432 let ci = bi(bj, bD, cb[bD], cc[bD])
433433 $Tuple3((aW._1 :+ ci._1), (aW._2 :+ toString((parseIntValue(cg[bD]) - cb[bD]))), (aW._3 + ci._2))
434434 }
435435 else $Tuple3(aW._1, (aW._2 :+ cg[bD]), aW._3)
436436
437437 let cj = {
438438 let aY = [0, 1, 2, 3, 4, 5]
439439 let aZ = size(aY)
440440 let ba = $Tuple3(nil, nil, 0)
441441 func bb (bc,bd) = if ((bd >= aZ))
442442 then bc
443443 else ch(bc, aY[bd])
444444
445445 func be (bc,bd) = if ((bd >= aZ))
446446 then bc
447447 else throw("List size exceeds 6")
448448
449449 be(bb(bb(bb(bb(bb(bb(ba, 0), 1), 2), 3), 4), 5), 6)
450450 }
451451 let ck = makeString([cf[ay], makeString(cj._2, "_"), cf[aA], cf[aB]], ":")
452452 let cl = aK(invoke(z, "updateBackpack", [an, ck], nil))
453453 $Tuple2((cj._1 :+ ScriptTransfer(bZ.caller, cj._3, g)), cl)
454454 }
455455 }
456456 }
457457 else throw("Strict value is not equal to itself.")
458458 }
459459
460460
461461
462462 @Callable(bZ)
463463 func buyMaterials (cb,cm) = {
464464 let cd = bB()
465465 if ((cd == cd))
466466 then {
467467 let an = valueOrErrorMessage(getString(z, ak(toString(bZ.caller))), "You don't have a duck staked")
468468 if ((size(bZ.payments) != 1))
469469 then throw("exactly 1 payment must be attached")
470470 else {
471471 let cn = bZ.payments[0]
472472 let co = cn.amount
473473 let cp = valueOrErrorMessage(cn.assetId, "WAVES can't be used as payment")
474474 if ((cp != g))
475475 then throw("USDT payments only!")
476476 else {
477477 let ce = split(valueOrElse(getString(z, ao(an)), A), "_")
478478 if ((ce[aw] != "F"))
479479 then throw(("Duck location type should be Factory, but is " + ce[aw]))
480480 else {
481481 let bj = ce[ax]
482482 let cf = bz(am(an))
483483 let cq = split(cf[aA], "_")
484484 func cr (aW,bD) = if ((0 > cb[bD]))
485485 then throw(((("You tried to buy negative amount of " + N[bD]) + ": ") + toString(cb[bD])))
486486 else if ((cb[bD] > 0))
487487 then {
488488 let ci = br(bj, bD, cb[bD], cm[bD])
489489 $Tuple3((aW._1 :+ ci._1), (aW._2 :+ toString((parseIntValue(cq[bD]) + ci._3))), (aW._3 + ci._2))
490490 }
491491 else $Tuple3(aW._1, (aW._2 :+ cq[bD]), aW._3)
492492
493493 let cj = {
494494 let aY = [0, 1, 2, 3, 4, 5]
495495 let aZ = size(aY)
496496 let ba = $Tuple3(nil, nil, 0)
497497 func bb (bc,bd) = if ((bd >= aZ))
498498 then bc
499499 else cr(bc, aY[bd])
500500
501501 func be (bc,bd) = if ((bd >= aZ))
502502 then bc
503503 else throw("List size exceeds 6")
504504
505505 be(bb(bb(bb(bb(bb(bb(ba, 0), 1), 2), 3), 4), 5), 6)
506506 }
507507 if ((cj._3 > co))
508508 then throw(((("Insufficient payment! Attached=" + toString(co)) + ", required=") + toString(cj._3)))
509509 else {
510510 let ck = makeString([cf[ay], cf[az], makeString(cj._2, "_"), cf[aB]], ":")
511511 let cl = aK(invoke(z, "updateBackpack", [an, ck], nil))
512512 let u = if (((co - cj._3) > 0))
513513 then [ScriptTransfer(bZ.caller, (co - cj._3), g)]
514514 else nil
515- $Tuple2((cj._1 ++ u), cl)
515+ let cs = (cj._3 / 100)
516+ $Tuple2(((cj._1 ++ u) :+ ScriptTransfer(y, cs, g)), cl)
516517 }
517518 }
518519 }
519520 }
520521 }
521522 else throw("Strict value is not equal to itself.")
522523 }
523524
524525
525526
526527 @Callable(bZ)
527528 func exchangeResources (cb) = {
528529 let cd = bB()
529530 if ((cd == cd))
530531 then {
531532 let an = valueOrErrorMessage(getString(z, ak(toString(bZ.caller))), "You don't have a duck staked")
532533 if ((size(bZ.payments) != 1))
533534 then throw("exactly 1 payment must be attached")
534535 else {
535536 let cn = bZ.payments[0]
536537 let co = cn.amount
537538 let cp = valueOrErrorMessage(cn.assetId, "WAVES can't be used as payment")
538539 if ((cp != g))
539540 then throw("USDT payments only!")
540541 else {
541542 let ce = split(valueOrElse(getString(z, ao(an)), A), "_")
542543 if ((ce[aw] != "F"))
543544 then throw(("Duck location type should be Factory, but is " + ce[aw]))
544545 else {
545546 let bj = ce[ax]
546547 let cf = bz(am(an))
547548 let cg = split(cf[az], "_")
548549 let cq = split(cf[aA], "_")
549- func cs (aW,bD) = {
550+ func ct (aW,bD) = {
550551 let bm = af(bj, bD)
551552 let bn = valueOrElse(getInteger(bm), 0)
552- let ct = cb[bD]
553- if ((ct > parseIntValue(cg[bD])))
554- then throw(((((("You have " + cg[bD]) + " of ") + M[bD]) + ", but tried to exchange ") + toString(ct)))
555- else if ((0 > ct))
556- then throw(((("You tried to exchange negative amount of " + M[bD]) + ": ") + toString(ct)))
557- else if ((ct > 0))
558- then $Tuple4((aW._1 :+ toString((parseIntValue(cg[bD]) - ct))), (aW._2 :+ toString((parseIntValue(cq[bD]) + ct))), (aW._3 + fraction(ct, D, d)), (aW._4 :+ IntegerEntry(bm, bn)))
553+ let cu = cb[bD]
554+ if ((cu > parseIntValue(cg[bD])))
555+ then throw(((((("You have " + cg[bD]) + " of ") + M[bD]) + ", but tried to exchange ") + toString(cu)))
556+ else if ((0 > cu))
557+ then throw(((("You tried to exchange negative amount of " + M[bD]) + ": ") + toString(cu)))
558+ else if ((cu > 0))
559+ then $Tuple4((aW._1 :+ toString((parseIntValue(cg[bD]) - cu))), (aW._2 :+ toString((parseIntValue(cq[bD]) + cu))), (aW._3 + fraction(cu, D, d)), (aW._4 :+ IntegerEntry(bm, bn)))
559560 else $Tuple4((aW._1 :+ cg[bD]), (aW._2 :+ cq[bD]), aW._3, aW._4)
560561 }
561562
562563 let cj = {
563564 let aY = [0, 1, 2, 3, 4, 5]
564565 let aZ = size(aY)
565566 let ba = $Tuple4(nil, nil, 0, nil)
566567 func bb (bc,bd) = if ((bd >= aZ))
567568 then bc
568- else cs(bc, aY[bd])
569+ else ct(bc, aY[bd])
569570
570571 func be (bc,bd) = if ((bd >= aZ))
571572 then bc
572573 else throw("List size exceeds 6")
573574
574575 be(bb(bb(bb(bb(bb(bb(ba, 0), 1), 2), 3), 4), 5), 6)
575576 }
576577 if ((cj._3 > co))
577578 then throw(((("Insufficient payment! Attached=" + toString(co)) + ", required=") + toString(cj._3)))
578579 else {
579580 let ck = makeString([cf[ay], makeString(cj._1, "_"), makeString(cj._2, "_"), cf[aB]], ":")
580581 let cl = aK(invoke(z, "updateBackpack", [an, ck], nil))
581582 let u = if (((co - cj._3) > 0))
582583 then [ScriptTransfer(bZ.caller, (co - cj._3), g)]
583584 else nil
584- $Tuple2((u ++ cj._4), cl)
585+ let cs = (cj._3 / 100)
586+ $Tuple2(((u ++ cj._4) :+ ScriptTransfer(y, cs, g)), cl)
585587 }
586588 }
587589 }
588590 }
589591 }
590592 else throw("Strict value is not equal to itself.")
591593 }
592594
593595
594596
595597 @Callable(bZ)
596-func craftGoods (cu,cv) = {
598+func craftGoods (cv,cw) = {
597599 let cd = bB()
598600 if ((cd == cd))
599601 then if ((size(bZ.payments) != 1))
600602 then throw("exactly 1 payment must be attached")
601603 else {
602604 let cn = bZ.payments[0]
603605 let co = cn.amount
604606 let cp = valueOrErrorMessage(cn.assetId, "WAVES can't be used as payment")
605607 if ((cp != g))
606608 then throw("USDT payments only!")
607609 else if ((co != b))
608610 then throw("exactly 1 USDT must be attached as payment")
609- else if ((0 >= cv))
611+ else if ((0 >= cw))
610612 then throw("Quantity should be positive")
611613 else {
612614 let an = valueOrErrorMessage(getString(z, ak(toString(bZ.caller))), "You don't have a duck staked")
613615 let ce = split(valueOrElse(getString(z, ao(an)), A), "_")
614616 if ((ce[aw] != "M"))
615617 then throw(("Duck location type should be Manufactory, but is " + ce[aw]))
616618 else {
617- let cw = ce[av]
619+ let cx = ce[av]
618620 let cf = bz(am(an))
619621 let cq = split(cf[aA], "_")
620- if (if ((0 > cu))
622+ if (if ((0 > cv))
621623 then true
622- else (cu >= size(Q)))
623- then throw(("Unknown product idx=" + toString(cu)))
624+ else (cv >= size(Q)))
625+ then throw(("Unknown product idx=" + toString(cv)))
624626 else {
625- let cx = split(Q[cu], "_")
626- if ((size(cx) != (B + 3)))
627- then throw(("Fatal: unknown recipe: " + Q[cu]))
627+ let cy = split(Q[cv], "_")
628+ if ((size(cy) != (B + 3)))
629+ then throw(("Fatal: unknown recipe: " + Q[cv]))
628630 else {
629- let cy = parseIntValue(cx[ae])
630- if ((P[cy] != cw))
631- then throw(((("This product is available in " + P[cy]) + ", but you are in ") + cw))
631+ let cz = parseIntValue(cy[ae])
632+ if ((P[cz] != cx))
633+ then throw(((("This product is available in " + P[cz]) + ", but you are in ") + cx))
632634 else {
633- let cz = if ((cf[aB] == ""))
635+ let cA = if ((cf[aB] == ""))
634636 then nil
635637 else split(cf[aB], "_")
636- func cA (aW,cB) = {
637- let cC = aW._2
638- let cD = if ((size(cz) > cC))
639- then cz[cC]
638+ func cB (aW,cC) = {
639+ let cD = aW._2
640+ let cE = if ((size(cA) > cD))
641+ then cA[cD]
640642 else "0"
641- let cE = parseIntValue(cD)
642- let bk = (cv * parseIntValue(cx[ad]))
643- let cF = if ((cC == cu))
644- then toString((cE + bk))
645- else cD
646- $Tuple2((aW._1 :+ cF), (cC + 1))
643+ let cF = parseIntValue(cE)
644+ let bk = (cw * parseIntValue(cy[ad]))
645+ let cG = if ((cD == cv))
646+ then toString((cF + bk))
647+ else cE
648+ $Tuple2((aW._1 :+ cG), (cD + 1))
647649 }
648650
649- let cG = ( let aY = Q
651+ let cH = ( let aY = Q
650652 let aZ = size(aY)
651653 let ba = $Tuple2(nil, 0)
652654 func bb (bc,bd) = if ((bd >= aZ))
653655 then bc
654- else cA(bc, aY[bd])
656+ else cB(bc, aY[bd])
655657
656658 func be (bc,bd) = if ((bd >= aZ))
657659 then bc
658660 else throw("List size exceeds 50")
659661
660662 be(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(bb(ba, 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
661- func cH (aW,bD) = {
662- let cI = ((parseIntValue(cx[bD]) * c) * cv)
663- let cJ = parseIntValue(cq[bD])
664- if ((cI > cJ))
665- then throw(((((((("You have " + cq[bD]) + " of ") + N[bD]) + ", but recipe requires ") + toString(cI)) + " for quantity ") + toString(cv)))
666- else if ((cI > 0))
667- then (aW :+ toString((cJ - cI)))
663+ func cI (aW,bD) = {
664+ let cJ = ((parseIntValue(cy[bD]) * c) * cw)
665+ let cK = parseIntValue(cq[bD])
666+ if ((cJ > cK))
667+ then throw(((((((("You have " + cq[bD]) + " of ") + N[bD]) + ", but recipe requires ") + toString(cJ)) + " for quantity ") + toString(cw)))
668+ else if ((cJ > 0))
669+ then (aW :+ toString((cK - cJ)))
668670 else (aW :+ cq[bD])
669671 }
670672
671673 let cj = {
672674 let aY = [0, 1, 2, 3, 4, 5]
673675 let aZ = size(aY)
674676 let ba = nil
675- func cK (bc,bd) = if ((bd >= aZ))
677+ func cL (bc,bd) = if ((bd >= aZ))
676678 then bc
677- else cH(bc, aY[bd])
679+ else cI(bc, aY[bd])
678680
679- func cL (bc,bd) = if ((bd >= aZ))
681+ func cM (bc,bd) = if ((bd >= aZ))
680682 then bc
681683 else throw("List size exceeds 6")
682684
683- cL(cK(cK(cK(cK(cK(cK(ba, 0), 1), 2), 3), 4), 5), 6)
685+ cM(cL(cL(cL(cL(cL(cL(ba, 0), 1), 2), 3), 4), 5), 6)
684686 }
685- let ck = makeString([cf[ay], cf[az], makeString(cj, "_"), makeString(cG, "_")], ":")
687+ let ck = makeString([cf[ay], cf[az], makeString(cj, "_"), makeString(cH, "_")], ":")
686688 let cl = aK(invoke(z, "updateBackpack", [an, ck], nil))
687689 $Tuple2(nil, cl)
688690 }
689691 }
690692 }
691693 }
692694 }
693695 }
694696 else throw("Strict value is not equal to itself.")
695697 }
696698
697699
698700
699701 @Callable(bZ)
700-func setWarehouseOrder (cM,aj) = {
701- let cN = bZ.originCaller
702- let au = toString(cN)
703- let cl = if ((cN != y))
702+func setWarehouseOrder (cN,aj) = {
703+ let cO = bZ.originCaller
704+ let au = toString(cO)
705+ let cl = if ((cO != y))
704706 then bB()
705707 else false
706- let cO = value(assetInfo(fromBase58String(aj)))
708+ let cP = value(assetInfo(fromBase58String(aj)))
707709 if (!(isDefined(getInteger(z, as(aj)))))
708- then throw((("NFT " + cO.name) + " is not staked"))
710+ then throw((("NFT " + cP.name) + " is not staked"))
709711 else {
710- let cP = valueOrErrorMessage(getString(z, aq(aj)), (("NFT " + cO.name) + " is orphaned"))
711- if (if ((cN != y))
712- then (cP != au)
712+ let cQ = valueOrErrorMessage(getString(z, aq(aj)), (("NFT " + cP.name) + " is orphaned"))
713+ if (if ((cO != y))
714+ then (cQ != au)
713715 else false)
714716 then throw((H + " is not yours"))
715717 else {
716- let cQ = split_4C(cM, ":")
717- if ((size(cQ) != 3))
718+ let cR = split_4C(cN, ":")
719+ if ((size(cR) != 3))
718720 then throw("cargoListStr should contain exactly 2 ':' separators")
719721 else {
720- let cR = split(cQ[0], "_")
721- let cS = split(cQ[1], "_")
722- let cT = if ((cQ[2] == ""))
722+ let cS = split(cR[0], "_")
723+ let cT = split(cR[1], "_")
724+ let cU = if ((cR[2] == ""))
723725 then nil
724- else split(cQ[2], "_")
725- if ((size(cR) != B))
726+ else split(cR[2], "_")
727+ if ((size(cS) != B))
726728 then throw("All 6 resources should be passed")
727- else if ((size(cS) != B))
729+ else if ((size(cT) != B))
728730 then throw("All 6 materials should be passed")
729731 else {
730- let cU = aK(invoke(z, "getWarehouseREADONLY", [aj], nil))
731- let aU = split_4C(cU, ":")
732- let cV = split(aU[aD], "_")
733- let cW = split(aU[aE], "_")
734- let cX = if ((aU[aF] == ""))
732+ let cV = aK(invoke(z, "getWarehouseREADONLY", [aj], nil))
733+ let aU = split_4C(cV, ":")
734+ let cW = split(aU[aD], "_")
735+ let cX = split(aU[aE], "_")
736+ let cY = if ((aU[aF] == ""))
735737 then nil
736738 else split(aU[aF], "_")
737- let cY = aQ(aU[aC])
739+ let cZ = aQ(aU[aC])
738740 let aO = ai(aj)
739- let cZ = aN(aO)
740- let da = split(cZ[aH], "_")
741- let db = split(cZ[aI], "_")
742- let dc = if ((cZ[aJ] == ""))
741+ let da = aN(aO)
742+ let db = split(da[aH], "_")
743+ let dc = split(da[aI], "_")
744+ let dd = if ((da[aJ] == ""))
743745 then nil
744- else split(cZ[aJ], "_")
745- let dd = 0
746- let de = {
747- let aY = cR
746+ else split(da[aJ], "_")
747+ let de = 0
748+ let df = {
749+ let aY = cS
748750 let aZ = size(aY)
749- let ba = $Tuple6(0, nil, 0, 0, cV, da)
751+ let ba = $Tuple6(0, nil, 0, 0, cW, db)
750752 func bb (bc,bd) = if ((bd >= aZ))
751753 then bc
752754 else bC(bc, aY[bd])
753755
754756 func be (bc,bd) = if ((bd >= aZ))
755757 then bc
756758 else throw("List size exceeds 6")
757759
758760 be(bb(bb(bb(bb(bb(bb(ba, 0), 1), 2), 3), 4), 5), 6)
759761 }
760762 let bw = {
761- let aY = cS
763+ let aY = cT
762764 let aZ = size(aY)
763- let ba = $Tuple6(0, nil, de._3, de._4, cW, db)
764- func cK (bc,bd) = if ((bd >= aZ))
765+ let ba = $Tuple6(0, nil, df._3, df._4, cX, dc)
766+ func cL (bc,bd) = if ((bd >= aZ))
765767 then bc
766768 else bC(bc, aY[bd])
767769
768- func cL (bc,bd) = if ((bd >= aZ))
770+ func cM (bc,bd) = if ((bd >= aZ))
769771 then bc
770772 else throw("List size exceeds 6")
771773
772- cL(cK(cK(cK(cK(cK(cK(ba, 0), 1), 2), 3), 4), 5), 6)
774+ cM(cL(cL(cL(cL(cL(cL(ba, 0), 1), 2), 3), 4), 5), 6)
773775 }
774776 let aP = {
775- let aY = cT
777+ let aY = cU
776778 let aZ = size(aY)
777- let ba = $Tuple6(0, nil, bw._3, bw._4, cX, dc)
778- func df (bc,bd) = if ((bd >= aZ))
779+ let ba = $Tuple6(0, nil, bw._3, bw._4, cY, dd)
780+ func dg (bc,bd) = if ((bd >= aZ))
779781 then bc
780782 else bC(bc, aY[bd])
781783
782- func dg (bc,bd) = if ((bd >= aZ))
784+ func dh (bc,bd) = if ((bd >= aZ))
783785 then bc
784786 else throw("List size exceeds 50")
785787
786- dg(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(ba, 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)
788+ dh(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(ba, 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)
787789 }
788- let dh = aP._3
789- if ((dh > cY))
790- then throw((((("Attempt to reserve " + toString(dh)) + " space, but only ") + toString(cY)) + " warehouse space left"))
790+ let di = aP._3
791+ if ((di > cZ))
792+ then throw((((("Attempt to reserve " + toString(di)) + " space, but only ") + toString(cZ)) + " warehouse space left"))
791793 else {
792- let di = makeString_2C([aU[aC], makeString(de._2, "_"), makeString(bw._2, "_"), makeString(aP._2, "_"), toString(dh)], ":")
793- let dj = invoke(z, "saveWarehouse", [di, aj], nil)
794- if ((dj == dj))
794+ let dj = makeString_2C([aU[aC], makeString(df._2, "_"), makeString(bw._2, "_"), makeString(aP._2, "_"), toString(di)], ":")
795+ let dk = invoke(z, "saveWarehouse", [dj, aj], nil)
796+ if ((dk == dk))
795797 then {
796- let dk = aP._4
797- let dl = if ((dk > 0))
798+ let dl = aP._4
799+ let dm = if ((dl > 0))
798800 then if ((size(bZ.payments) != 1))
799801 then throw("exactly 1 payment must be attached")
800802 else {
801803 let cn = bZ.payments[0]
802804 let co = cn.amount
803805 let cp = valueOrErrorMessage(cn.assetId, "WAVES can't be used as payment")
804806 if ((cp != g))
805807 then throw("USDT payments only!")
806- else if ((co != dk))
807- then throw(("Payment needed is " + toString(dk)))
808- else [StringEntry(aO, cM)]
808+ else if ((co != dl))
809+ then throw(("Payment needed is " + toString(dl)))
810+ else [StringEntry(aO, cN)]
809811 }
810- else if ((dk == 0))
812+ else if ((dl == 0))
811813 then if ((size(bZ.payments) != 0))
812814 then throw("No payments needed")
813- else [StringEntry(aO, cM)]
815+ else [StringEntry(aO, cN)]
814816 else if ((size(bZ.payments) != 0))
815817 then throw("No payments needed")
816- else [ScriptTransfer(addressFromStringValue(cP), -(dk), g), StringEntry(aO, cM)]
817- $Tuple2(dl, cl)
818+ else [ScriptTransfer(addressFromStringValue(cQ), -(dl), g), StringEntry(aO, cN)]
819+ $Tuple2(dm, cl)
818820 }
819821 else throw("Strict value is not equal to itself.")
820822 }
821823 }
822824 }
823825 }
824826 }
825827 }
826828
827829
828830
829831 @Callable(bZ)
830-func acceptWarehouseOrder (dm,aj,an) = {
832+func acceptWarehouseOrder (dn,aj,an) = {
831833 let cd = bB()
832834 if ((cd == cd))
833835 then {
834- let dn = bZ.originCaller
835- let do = toString(dn)
836- let dp = valueOrErrorMessage(getString(z, ak(do)), "You don't have a duck staked")
837- let ce = valueOrElse(getString(z, ao(dp)), A)
838- let dq = split(value(ce), "_")
839- if ((dq[aw] != "L"))
840- then throw((("Duck location type is " + dq[aw]) + ", but should be L"))
841- else if ((dp != an))
842- then throw(((("Your staked duck is " + dp) + ", but passed ") + an))
836+ let do = bZ.originCaller
837+ let dp = toString(do)
838+ let dq = valueOrErrorMessage(getString(z, ak(dp)), "You don't have a duck staked")
839+ let ce = valueOrElse(getString(z, ao(dq)), A)
840+ let dr = split(value(ce), "_")
841+ if ((dr[aw] != "L"))
842+ then throw((("Duck location type is " + dr[aw]) + ", but should be L"))
843+ else if ((dq != an))
844+ then throw(((("Your staked duck is " + dq) + ", but passed ") + an))
843845 else {
844- let dr = value(assetInfo(fromBase58String(aj)))
846+ let ds = value(assetInfo(fromBase58String(aj)))
845847 if (!(isDefined(getInteger(z, as(aj)))))
846- then throw((("NFT " + dr.name) + " is not staked"))
848+ then throw((("NFT " + ds.name) + " is not staked"))
847849 else {
848- let ds = valueOrErrorMessage(getString(z, aq(aj)), (("NFT " + dr.name) + " is orphaned"))
849- if ((ds == do))
850+ let dt = valueOrErrorMessage(getString(z, aq(aj)), (("NFT " + ds.name) + " is orphaned"))
851+ if ((dt == dp))
850852 then throw("You cannot trade with yourself")
851853 else {
852- let dt = split_4C(dm, ":")
853- if ((size(dt) != 3))
854+ let du = split_4C(dn, ":")
855+ if ((size(du) != 3))
854856 then throw("bpOrderStr should contain exactly 2 ':' separators")
855857 else {
856- let du = split(dt[0], "_")
857- let dv = split(dt[1], "_")
858- let dw = if ((dt[2] == ""))
858+ let dv = split(du[0], "_")
859+ let dw = split(du[1], "_")
860+ let dx = if ((du[2] == ""))
859861 then nil
860- else split(dt[2], "_")
861- if ((size(du) != B))
862+ else split(du[2], "_")
863+ if ((size(dv) != B))
862864 then throw("All 6 resources should be passed")
863- else if ((size(dv) != B))
865+ else if ((size(dw) != B))
864866 then throw("All 6 materials should be passed")
865867 else {
866- let cU = aK(invoke(z, "getWarehouseREADONLY", [aj], nil))
867- let aU = split_4C(cU, ":")
868- let cV = split(aU[aD], "_")
869- let cW = split(aU[aE], "_")
870- let cX = if ((aU[aF] == ""))
868+ let cV = aK(invoke(z, "getWarehouseREADONLY", [aj], nil))
869+ let aU = split_4C(cV, ":")
870+ let cW = split(aU[aD], "_")
871+ let cX = split(aU[aE], "_")
872+ let cY = if ((aU[aF] == ""))
871873 then nil
872874 else split(aU[aF], "_")
873- let dx = aT(aU)
874- let dy = bf(aU)
875- let dz = bg(aU)
876- let dA = parseIntValue(aU[aG])
877- let dB = ((((aQ(aU[aC]) - dx) - dy) - dz) - dA)
875+ let dy = aT(aU)
876+ let dz = bf(aU)
877+ let dA = bg(aU)
878+ let dB = parseIntValue(aU[aG])
879+ let dC = ((((aQ(aU[aC]) - dy) - dz) - dA) - dB)
878880 let bA = am(an)
879881 let cf = bz(bA)
880- let dC = split(cf[az], "_")
881- let dD = split(cf[aA], "_")
882- let dE = if ((cf[aB] == ""))
882+ let dD = split(cf[az], "_")
883+ let dE = split(cf[aA], "_")
884+ let dF = if ((cf[aB] == ""))
883885 then nil
884886 else split(cf[aB], "_")
885887 let aO = ai(aj)
886- let dF = aN(aO)
887- let dG = split(dF[aH], "_")
888- let dH = split(dF[aI], "_")
889- let dI = if ((dF[aJ] == ""))
888+ let dG = aN(aO)
889+ let dH = split(dG[aH], "_")
890+ let dI = split(dG[aI], "_")
891+ let dJ = if ((dG[aJ] == ""))
890892 then nil
891- else split(dF[aJ], "_")
892- let dd = 0
893- let de = {
894- let aY = du
893+ else split(dG[aJ], "_")
894+ let de = 0
895+ let df = {
896+ let aY = dv
895897 let aZ = size(aY)
896- let ba = $Tuple11(nil, nil, nil, 0, 0, 0, 0, dC, cV, dG, M)
898+ let ba = $Tuple11(nil, nil, nil, 0, 0, 0, 0, dD, cW, dH, M)
897899 func bb (bc,bd) = if ((bd >= aZ))
898900 then bc
899901 else bO(bc, aY[bd])
900902
901903 func be (bc,bd) = if ((bd >= aZ))
902904 then bc
903905 else throw("List size exceeds 6")
904906
905907 be(bb(bb(bb(bb(bb(bb(ba, 0), 1), 2), 3), 4), 5), 6)
906908 }
907909 let bw = {
908- let aY = dv
910+ let aY = dw
909911 let aZ = size(aY)
910- let ba = $Tuple11(nil, nil, nil, de._4, de._5, de._6, 0, dD, cW, dH, N)
911- func cK (bc,bd) = if ((bd >= aZ))
912+ let ba = $Tuple11(nil, nil, nil, df._4, df._5, df._6, 0, dE, cX, dI, N)
913+ func cL (bc,bd) = if ((bd >= aZ))
912914 then bc
913915 else bO(bc, aY[bd])
914916
915- func cL (bc,bd) = if ((bd >= aZ))
917+ func cM (bc,bd) = if ((bd >= aZ))
916918 then bc
917919 else throw("List size exceeds 6")
918920
919- cL(cK(cK(cK(cK(cK(cK(ba, 0), 1), 2), 3), 4), 5), 6)
921+ cM(cL(cL(cL(cL(cL(cL(ba, 0), 1), 2), 3), 4), 5), 6)
920922 }
921- let aP = if ((size(dw) != 0))
923+ let aP = if ((size(dx) != 0))
922924 then {
923- let aY = dw
925+ let aY = dx
924926 let aZ = size(aY)
925- let ba = $Tuple11(nil, nil, nil, bw._4, bw._5, bw._6, 0, dE, cX, dI, O)
926- func df (bc,bd) = if ((bd >= aZ))
927+ let ba = $Tuple11(nil, nil, nil, bw._4, bw._5, bw._6, 0, dF, cY, dJ, O)
928+ func dg (bc,bd) = if ((bd >= aZ))
927929 then bc
928930 else bO(bc, aY[bd])
929931
930- func dg (bc,bd) = if ((bd >= aZ))
932+ func dh (bc,bd) = if ((bd >= aZ))
931933 then bc
932934 else throw("List size exceeds 50")
933935
934- dg(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(df(ba, 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)
936+ dh(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(dg(ba, 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)
935937 }
936- else $Tuple11(cX, dI, dE, bw._4, bw._5, bw._6, 0, dE, cX, dI, O)
937- let dh = aP._4
938- let dJ = if ((0 > (dA - dh)))
938+ else $Tuple11(cY, dJ, dF, bw._4, bw._5, bw._6, 0, dF, cY, dJ, O)
939+ let di = aP._4
940+ let dK = if ((0 > (dB - di)))
939941 then 0
940- else (dA - dh)
941- let di = makeString_2C([aU[aC], makeString(de._1, "_"), makeString(bw._1, "_"), makeString(aP._1, "_"), toString(dJ)], ":")
942- let dK = makeString_2C([makeString(de._2, "_"), makeString(bw._2, "_"), makeString(aP._2, "_")], ":")
943- let dL = makeString_2C([cf[ay], makeString(de._3, "_"), makeString(bw._3, "_"), makeString(aP._3, "_")], ":")
944- let dj = invoke(z, "saveWarehouse", [di, aj], nil)
945- if ((dj == dj))
942+ else (dB - di)
943+ let dj = makeString_2C([aU[aC], makeString(df._1, "_"), makeString(bw._1, "_"), makeString(aP._1, "_"), toString(dK)], ":")
944+ let dL = makeString_2C([makeString(df._2, "_"), makeString(bw._2, "_"), makeString(aP._2, "_")], ":")
945+ let dM = makeString_2C([cf[ay], makeString(df._3, "_"), makeString(bw._3, "_"), makeString(aP._3, "_")], ":")
946+ let dk = invoke(z, "saveWarehouse", [dj, aj], nil)
947+ if ((dk == dk))
946948 then {
947- let dM = invoke(z, "updateBackpack", [an, dL], nil)
948- if ((dM == dM))
949+ let dN = invoke(z, "updateBackpack", [an, dM], nil)
950+ if ((dN == dN))
949951 then {
950- let dl = [StringEntry(aO, dK)]
951- let dN = aP._5
952- let dO = if ((dN > 0))
952+ let dm = [StringEntry(aO, dL)]
953+ let dO = aP._5
954+ let dP = if ((dO > 0))
953955 then {
954- let dP = fraction(aP._5, K, b)
955- let dQ = at(do)
956- let dR = getString(z, dQ)
957- if (isDefined(dR))
958- then (((dl :+ ScriptTransfer(dn, (aP._5 - (3 * dP)), g)) :+ ScriptTransfer(y, dP, g)) :+ ScriptTransfer(addressFromStringValue(value(dR)), dP, g))
959- else ((dl :+ ScriptTransfer(dn, (aP._5 - (3 * dP)), g)) :+ ScriptTransfer(y, dP, g))
956+ let dQ = fraction(aP._5, K, b)
957+ let dR = at(dp)
958+ let dS = getString(z, dR)
959+ if (isDefined(dS))
960+ then (((dm :+ ScriptTransfer(do, (aP._5 - (3 * dQ)), g)) :+ ScriptTransfer(y, dQ, g)) :+ ScriptTransfer(addressFromStringValue(value(dS)), dQ, g))
961+ else ((dm :+ ScriptTransfer(do, (aP._5 - (3 * dQ)), g)) :+ ScriptTransfer(y, dQ, g))
960962 }
961- else dl
962- let dS = aP._6
963- if ((dS > 0))
963+ else dm
964+ let dT = aP._6
965+ if ((dT > 0))
964966 then if ((size(bZ.payments) != 1))
965967 then throw("exactly 1 payment must be attached")
966968 else {
967969 let cn = bZ.payments[0]
968970 let co = cn.amount
969971 let cp = valueOrErrorMessage(cn.assetId, "WAVES can't be used as payment")
970972 if ((cp != g))
971973 then throw("USDT payments only!")
972- else if ((co != dS))
973- then throw(("Payment needed is " + toString(dS)))
974+ else if ((co != dT))
975+ then throw(("Payment needed is " + toString(dT)))
974976 else if ((L > co))
975977 then throw(("Payment should be at least " + toString(L)))
976978 else {
977- let dT = fraction(aP._6, K, b)
978- let dQ = at(ds)
979- let dR = getString(z, dQ)
980- if (isDefined(dR))
981- then (((dO :+ ScriptTransfer(addressFromStringValue(ds), (aP._6 - (3 * dT)), g)) :+ ScriptTransfer(y, dT, g)) :+ ScriptTransfer(addressFromStringValue(value(dR)), dT, g))
982- else ((dO :+ ScriptTransfer(addressFromStringValue(ds), (aP._6 - (3 * dT)), g)) :+ ScriptTransfer(y, dT, g))
979+ let dU = fraction(aP._6, K, b)
980+ let dR = at(dt)
981+ let dS = getString(z, dR)
982+ if (isDefined(dS))
983+ then (((dP :+ ScriptTransfer(addressFromStringValue(dt), (aP._6 - (3 * dU)), g)) :+ ScriptTransfer(y, dU, g)) :+ ScriptTransfer(addressFromStringValue(value(dS)), dU, g))
984+ else ((dP :+ ScriptTransfer(addressFromStringValue(dt), (aP._6 - (3 * dU)), g)) :+ ScriptTransfer(y, dU, g))
983985 }
984986 }
985987 else if ((size(bZ.payments) != 0))
986988 then throw("No payments needed")
987- else dO
989+ else dP
988990 }
989991 else throw("Strict value is not equal to itself.")
990992 }
991993 else throw("Strict value is not equal to itself.")
992994 }
993995 }
994996 }
995997 }
996998 }
997999 }
9981000 else throw("Strict value is not equal to itself.")
9991001 }
10001002
10011003

github/deemru/w8io/873ac7e 
507.49 ms