tx · 6Ht9SJk9iSqC6y2sMfiq1w1BV91zoHCUyvyzySfmaA3E

3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep:  -0.03200000 Waves

2023.05.29 23:38 [2599756] smart account 3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep > SELF 0.00000000 Waves

{ "type": 13, "id": "6Ht9SJk9iSqC6y2sMfiq1w1BV91zoHCUyvyzySfmaA3E", "fee": 3200000, "feeAssetId": null, "timestamp": 1685392728923, "version": 2, "chainId": 84, "sender": "3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep", "senderPublicKey": "7v5L7QkXxfkirALdyqmox38QCsa9jtfAtgUfHTh34eWq", "proofs": [ "4uTY3CVvjLQUDvBd3daK9DvJYP89B8ducAwpAtmPgKzMjr6uMWjYBECXskfMtSVbQMZyo7FWiPzamX6uuWpwv1rn" ], "script": "base64:BgIrCAISAwoBCBIECgIRERIECgIRERIDCgEREgQKAgEBEgQKAggIEgUKAwgICFoAA1NFUAICX18ABU1VTFQ2AMCEPQAFTVVMVDcAgK3iBAAFTVVMVDgAgMLXLwAGTVVMVDEwAIDIr6AlAAVjaGFpbgkAyQECCQDKAQIIBQR0aGlzBWJ5dGVzAAEAAQALdXNkdEFzc2V0SWQEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDABIITaerIIAz9O0bvKju6Lk7zJgt0LXfoHlqjUI/moD/+5AwkAAAIBAVQFByRtYXRjaDABIFWx2J9yh4Lv5eNbjawFq2XemkOhLxa7BfMat4el8cUYCQACAQINVW5rbm93biBjaGFpbgAVZGVmYXVsdFJlc3RBZGRyZXNzU3RyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAiMzUFFDdXZGYnZoNExrUFVucm5VMXozam5iQTFwOW0zV05odgMJAAACAQFUBQckbWF0Y2gwAiMzTXVta0dHenRDS0FYcFdEcXhrZGRvZnFYU1VicVFrdlNKeQkAAgECDVVua25vd24gY2hhaW4BD2dldFN0cmluZ09yRmFpbAIHYWRkcmVzcwNrZXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQdhZGRyZXNzBQNrZXkJALkJAgkAzAgCAgptYW5kYXRvcnkgCQDMCAIJAKUIAQUHYWRkcmVzcwkAzAgCAgEuCQDMCAIFA2tleQkAzAgCAg8gaXMgbm90IGRlZmluZWQFA25pbAIAAQxnZXRJbnRPckVsc2UCA2tleQpkZWZhdWx0VmFsCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFA2tleQUKZGVmYXVsdFZhbAARSWR4Q2ZnU3Rha2luZ0RhcHAAAQARSWR4Q2ZnRWNvbm9teURhcHAAAgAUSWR4Q2ZnR292ZXJuYW5jZURhcHAAAwEKa2V5UmVzdENmZwACDiVzX19yZXN0Q29uZmlnAQ5rZXlSZXN0QWRkcmVzcwACDCVzX19yZXN0QWRkcgERcmVhZFJlc3RDZmdPckZhaWwBBHJlc3QJALwJAgkBD2dldFN0cmluZ09yRmFpbAIFBHJlc3QJAQprZXlSZXN0Q2ZnAAUDU0VQARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCB3Jlc3RDZmcDaWR4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQdyZXN0Q2ZnBQNpZHgJAKwCAgIqUmVzdCBjZmcgZG9lc24ndCBjb250YWluIGFkZHJlc3MgYXQgaW5kZXggCQCkAwEFA2lkeAAMcmVzdENvbnRyYWN0CQERQGV4dHJOYXRpdmUoMTA2MikBCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMJAQ5rZXlSZXN0QWRkcmVzcwAFFWRlZmF1bHRSZXN0QWRkcmVzc1N0cgAHcmVzdENmZwkBEXJlYWRSZXN0Q2ZnT3JGYWlsAQUMcmVzdENvbnRyYWN0AA9zdGFraW5nQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRFJZHhDZmdTdGFraW5nRGFwcAAPREVGQVVMVExPQ0FUSU9OAg9BZnJpY2FfRl9BZnJpY2EABk5VTVJFUwAGABNGQUNUT1JZTUFYV0FSRUhPVVNFAIDIr6AlABBSRVNPVVJDRVBSSUNFTUlOANW1AgAKTUlOUEFZTUVOVACQTgAOU0VMTE1VTFRJUExJRVIAyAEADUJVWU1VTFRJUExJRVIArAIACkxBTkRQUkVGSVgCBExBTkQACkRVQ0tQUkVGSVgCBERVQ0sADFdITVVMVElQTElFUgCAyK+gJQAKQVVDVElPTkZFRQCQTgAOTUlOU0hPUFBBWU1FTlQAoI0GAAhyZXNUeXBlcwkAzAgCAgNPaWwJAMwIAgIDT3JlCQDMCAICBFdvb2QJAMwIAgIEU2FuZAkAzAgCAgRDbGF5CQDMCAICB09yZ2FuaWMFA25pbAAIbWF0VHlwZXMJAMwIAgIERnVlbAkAzAgCAgVNZXRhbAkAzAgCAgVQbGFuawkAzAgCAgVHbGFzcwkAzAgCAgdQbGFzdGljCQDMCAICB1Byb3RlaW4FA25pbAAJcHJvZFR5cGVzCQDMCAICDUZpcnN0IEFpZCBLaXQJAMwIAgIIQmFja3BhY2sJAMwIAgILRm9vZCBSYXRpb24JAMwIAgIISmV0IFBhY2sJAMwIAgIGU2hpZWxkBQNuaWwACmNvbnRpbmVudHMJAMwIAgIIQW1lcmljYXMJAMwIAgIGRXVyb3BlCQDMCAICBEFzaWEJAMwIAgIGQWZyaWNhCQDMCAICB09jZWFuaWEFA25pbAAQcHJvZHVjdGlvbk1hdHJpeAkAzAgCAhIxXzFfMV8yXzJfNV8xXzEwXzAJAMwIAgITMl8yXzJfNF80XzEwXzFfMTBfMAkAzAgCAhMzXzNfM182XzZfMTVfMV8xMF8wCQDMCAICEzJfNV81XzJfN181XzJfMTAwXzEJAMwIAgIXNF8xMF8xMF80XzE0XzEwXzJfMTAwXzEJAMwIAgIXNl8xNV8xNV82XzIxXzE1XzJfMTAwXzEJAMwIAgISMV8xXzFfMV8xXzhfMV8xMF8yCQDMCAICEzJfMl8yXzJfMl8xNl8xXzEwXzIJAMwIAgITM18zXzNfM18zXzI0XzFfMTBfMgkAzAgCAhM5XzlfMV81XzVfMV81XzEwMF8zCQDMCAICFzE4XzE4XzJfMTBfMTBfMl81XzEwMF8zCQDMCAICFzI3XzI3XzNfMTVfMTVfM181XzEwMF8zCQDMCAICEjJfMl8xXzJfMl8yXzFfMTBfNAkAzAgCAhI0XzRfMl80XzRfNF8xXzEwXzQJAMwIAgISNl82XzNfNl82XzZfMV8xMF80BQNuaWwAD2NvbnRJZHhBbWVyaWNhcwAAAA1jb250SWR4RXVyb3BlAAEAC2NvbnRJZHhBc2lhAAIADWNvbnRJZHhBZnJpY2EAAwAOY29udElkeE9jZWFuaWEABAANcmVjaXBlSWR4RnVlbAAAAA5yZWNpcGVJZHhNZXRhbAABAA5yZWNpcGVJZHhQbGFuawACAA5yZWNpcGVJZHhHbGFzcwADABByZWNpcGVJZHhQbGFzdGljAAQAEHJlY2lwZUlkeFByb3RlaW4ABQAPcmVjaXBlSWR4V2VpZ2h0AAYAEXJlY2lwZUlkeFBhY2tzaXplAAcAEnJlY2lwZUlkeENvbnRpbmVudAAIAR5rZXlGYWN0b3J5V2FyZWhvdXNlQnlJZEFuZFR5cGUCCWZhY3RvcnlJZAdyZXNUeXBlCQCsAgIJAKwCAgkArAICAhtmYWN0b3J5V2hCeUNvbnRpbmVudEFuZFJlc18FCWZhY3RvcnlJZAIBXwkApAMBBQdyZXNUeXBlAQ5rZXlPcmRlckJ5TGFuZAELbGFuZEFzc2V0SWQJAKwCAgIKbGFuZE9yZGVyXwULbGFuZEFzc2V0SWQBFGtleVN0YWtlZER1Y2tCeU93bmVyAQlvd25lckFkZHIJAKwCAgISc3Rha2VkRHVja0J5T3duZXJfBQlvd25lckFkZHIBEWtleUJhY2twYWNrQnlEdWNrAQtkdWNrQXNzZXRJZAkArAICAgliYWNrUGFja18FC2R1Y2tBc3NldElkAQ9rZXlEdWNrTG9jYXRpb24BC2R1Y2tBc3NldElkCQCsAgICDWR1Y2tMb2NhdGlvbl8FC2R1Y2tBc3NldElkAQprZXlCbG9ja2VkAAIQY29udHJhY3RzQmxvY2tlZAEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQdhc3NldElkCQCsAgICCW5mdE93bmVyXwUHYXNzZXRJZAEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEHYXNzZXRJZAkArAICAgtzdGFrZWRUaW1lXwUHYXNzZXRJZAEPa2V5QWRkcmVzc1JlZkJ5AQRhZGRyCQCsAgICCWFjY1JlZkJ5XwUEYWRkcgAPbG9jSWR4Q29udGluZW50AAAACmxvY0lkeFR5cGUAAQAIbG9jSWR4SWQAAgAKYnBJZHhMZXZlbAAAAAhicElkeFJlcwABAAhicElkeE1hdAACAAlicElkeFByb2QAAwALd2hJZHhMZXZlbHMAAAAId2hJZHhSZXMAAQAId2hJZHhNYXQAAgAJd2hJZHhQcm9kAAMACXdoSWR4TE9GVAAEAAl2b2xMb2NrZWQAAAALdm9sT2NjdXBpZWQAAQAHdm9sRnJlZQACAAh2b2xUb3RhbAADAAlvcmRJZHhSZXMAAAAJb3JkSWR4TWF0AAEACm9yZElkeFByb2QAAgEIYXNTdHJpbmcBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwBQFzCQACAQIYZmFpbCB0byBjYXN0IGludG8gU3RyaW5nAQhnZXRPcmRlcgEGb3JkS2V5BAFwCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUGb3JkS2V5AjAwQDBfMEAwXzBAMF8wQDBfMEAwXzBAMDowQDBfMEAwXzBAMF8wQDBfMEAwXzBAMDoCAToJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQFwBQlvcmRJZHhSZXMCAV8FBk5VTVJFUwkAkQMCBQFwBQlvcmRJZHhSZXMCFzBAMF8wQDBfMEAwXzBAMF8wQDBfMEAwCQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUBcAUJb3JkSWR4TWF0AgFfBQZOVU1SRVMJAJEDAgUBcAUJb3JkSWR4TWF0AhcwQDBfMEAwXzBAMF8wQDBfMEAwXzBAMAkAzAgCCQCRAwIFAXAFCm9yZElkeFByb2QFA25pbAEIdG9Wb2x1bWUDBmFtb3VudAdwa2dTaXplCWlzUHJvZHVjdAMFCWlzUHJvZHVjdAQEcGtncwMJAGcCBQZhbW91bnQAAAkAaQIJAGUCCQBkAgUGYW1vdW50BQdwa2dTaXplAAEFB3BrZ1NpemUJAQEtAQkAaQIJAGUCCQBkAgkBAS0BBQZhbW91bnQFB3BrZ1NpemUAAQUHcGtnU2l6ZQkAaAIFBHBrZ3MFBU1VTFQ4BQZhbW91bnQBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQl2b2xQcmVmaXgEBXBhcnRzCQC1CQIFCXZvbFByZWZpeAIBXwkAaAIJAGgCBQxXSE1VTFRJUExJRVIJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcGFydHMAAQABCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcGFydHMAAAEbZ2V0V2FyZWhvdXNlQ3Vyckdvb2RzVm9sdW1lAQljdXJyZW50V2gEBWdvb2RzCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAwkAAAIFBWdvb2RzAgAAAAoBA3N1bQIDYWNjBGl0ZW0EA2lkeAgFA2FjYwJfMQQHcGtnU2l6ZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4BQNpZHgCAV8FEXJlY2lwZUlkeFBhY2tzaXplCQCUCgIJAGQCBQNpZHgAAQkAZAIIBQNhY2MCXzIJAQh0b1ZvbHVtZQMJAQ1wYXJzZUludFZhbHVlAQUEaXRlbQUHcGtnU2l6ZQYICgACJGwJALwJAgUFZ29vZHMCAV8KAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIAAAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQNzdW0CBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDUwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgJfMgEMc2VsbEludGVybmFsBAVsb2NJZAdyZXNUeXBlBmFtb3VudAhtaW5QcmljZQQFd2hLZXkJAR5rZXlGYWN0b3J5V2FyZWhvdXNlQnlJZEFuZFR5cGUCBQVsb2NJZAUHcmVzVHlwZQQCdzAJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUFd2hLZXkAAAQCcjADCQBmAgUCdzAFE0ZBQ1RPUllNQVhXQVJFSE9VU0UAAAMJAGYCCQBkAgUCdzAFBmFtb3VudAUTRkFDVE9SWU1BWFdBUkVIT1VTRQkAZQIFE0ZBQ1RPUllNQVhXQVJFSE9VU0UFAncwBQZhbW91bnQEDHVzZHRSZWNlaXZlZAkAZAIJAGsDBQJyMAkAZQIJAGgCBQ5TRUxMTVVMVElQTElFUgUQUkVTT1VSQ0VQUklDRU1JTgkAawMJAGQCCQBoAgBkBQJ3MAkAaAIAMgUCcjAFEFJFU09VUkNFUFJJQ0VNSU4FE0ZBQ1RPUllNQVhXQVJFSE9VU0UFBk1VTFQxMAkAawMJAGUCBQZhbW91bnQFAnIwBRBSRVNPVVJDRVBSSUNFTUlOBQVNVUxUOAQFbWluOTkJAGUCBQhtaW5QcmljZQkAaQIFCG1pblByaWNlAGQDCQBmAgkAaAIFBW1pbjk5BQZhbW91bnQJAGgCBQx1c2R0UmVjZWl2ZWQFBU1VTFQ4CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg9BY3R1YWwgcHJpY2UgPSAJAKQDAQUMdXNkdFJlY2VpdmVkAgMgLyAJAKQDAQUGYW1vdW50Ag4gPCBtaW5QcmljZSA9IAkApAMBBQhtaW5QcmljZQIDLCAoBQVsb2NJZAICLCAJAJEDAgUIcmVzVHlwZXMFB3Jlc1R5cGUCASkJAJQKAgkBDEludGVnZXJFbnRyeQIFBXdoS2V5CQBkAgUCdzAFBmFtb3VudAUMdXNkdFJlY2VpdmVkAQtidXlJbnRlcm5hbAQFbG9jSWQHbWF0VHlwZQZhbW91bnQIbWF4UHJpY2UEBXdoS2V5CQEea2V5RmFjdG9yeVdhcmVob3VzZUJ5SWRBbmRUeXBlAgUFbG9jSWQFB21hdFR5cGUEAncwCQELdmFsdWVPckVsc2UCCQCfCAEFBXdoS2V5AAAEAm0xAwkAZgIFAncwBRNGQUNUT1JZTUFYV0FSRUhPVVNFCQCXAwEJAMwIAgUGYW1vdW50CQDMCAIJAGUCBQJ3MAUTRkFDVE9SWU1BWFdBUkVIT1VTRQUDbmlsAAAEAm0wCQCXAwEJAMwIAgUCdzAJAMwIAgkAZQIFBmFtb3VudAUCbTEFA25pbAQBbQkAZAIFAm0wBQJtMQQJdXNkdFNwZW50CQBkAgkAawMFAm0wCQBlAgkAaAIFDUJVWU1VTFRJUExJRVIFEFJFU09VUkNFUFJJQ0VNSU4JAGsDCQBlAgkAaAIAZAUCdzAJAGgCADIFAm0wBRBSRVNPVVJDRVBSSUNFTUlOBRNGQUNUT1JZTUFYV0FSRUhPVVNFBQZNVUxUMTAJAGsDBQJtMQkAaAIAAgUQUkVTT1VSQ0VQUklDRU1JTgUFTVVMVDgEBm1heDEwMQkAZAIFCG1heFByaWNlCQBpAgUIbWF4UHJpY2UAZAMJAGYCCQBoAgUJdXNkdFNwZW50BQVNVUxUOAkAaAIFBm1heDEwMQUBbQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIPQWN0dWFsIHByaWNlID0gCQCkAwEFCXVzZHRTcGVudAIDIC8gCQCkAwEFAW0CDiA+IG1heFByaWNlID0gCQCkAwEFCG1heFByaWNlAgMsICgFBWxvY0lkAgIsIAkAkQMCBQhtYXRUeXBlcwUHbWF0VHlwZQIBKQkAlQoDCQEMSW50ZWdlckVudHJ5AgUFd2hLZXkJAGUCBQJ3MAUBbQUJdXNkdFNwZW50BQFtAQtnZXRCYWNrcGFjawEFYnBLZXkEAXAJALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QFBWJwS2V5AhowOjBfMF8wXzBfMF8wOjBfMF8wXzBfMF8wOgIBOgkAzAgCCQCkAwEJAQt2YWx1ZU9yRWxzZQIJALYJAQkAkQMCBQFwBQpicElkeExldmVsAAAJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQFwBQhicElkeFJlcwIBXwUGTlVNUkVTCQCRAwIFAXAFCGJwSWR4UmVzAgswXzBfMF8wXzBfMAkAzAgCAwkAAAIJAJADAQkAtQkCCQCRAwIFAXAFCGJwSWR4TWF0AgFfBQZOVU1SRVMJAJEDAgUBcAUIYnBJZHhNYXQCCzBfMF8wXzBfMF8wCQDMCAIJAJEDAgUBcAUJYnBJZHhQcm9kBQNuaWwBDGNoZWNrQmxvY2tlZAADCQELdmFsdWVPckVsc2UCCQCbCAIFD3N0YWtpbmdDb250cmFjdAkBCmtleUJsb2NrZWQABwkAAgECH0NvbnRyYWN0cyBhcmUgdW5kZXIgbWFpbnRlbmFuY2UFBHVuaXQBCXNldENvbW1vbgIDYWNjBGl0ZW0EAWoIBQNhY2MCXzEEBmlzUHJvZAgFA2FjYwJfOAQHcGtnU2l6ZQMFBmlzUHJvZAkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4BQFqAgFfBRFyZWNpcGVJZHhQYWNrc2l6ZQAABAlpdGVtUGFydHMJALUJAgUEaXRlbQIBQAMJAQIhPQIJAJADAQUJaXRlbVBhcnRzAAIJAAIBAi5JbmNvcnJlY3Qgb3JkZXIgZm9ybWF0LCBzaG91bGQgYmUgYW1vdW50QHByaWNlBAhuZXdPcmRBbQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWl0ZW1QYXJ0cwAABAhuZXdPcmRQcgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWl0ZW1QYXJ0cwABBAluZXdPcmRVc2QJAGsDBQhuZXdPcmRBbQUIbmV3T3JkUHIFBU1VTFQ4BAluZXdPcmRWb2wJAQh0b1ZvbHVtZQMFCG5ld09yZEFtBQdwa2dTaXplBQZpc1Byb2QEBndoSW5pdAMJAGYCCQCQAwEIBQNhY2MCXzYFAWoJAQ1wYXJzZUludFZhbHVlAQkAkQMCCAUDYWNjAl82BQFqAAAEC2N1ck9yZFBhcnRzCQC1CQIDCQBmAgkAkAMBCAUDYWNjAl83BQFqCQCRAwIIBQNhY2MCXzcFAWoCAzBAMAIBQAQIY3VyT3JkQW0JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQtjdXJPcmRQYXJ0cwAABAhjdXJPcmRQcgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFC2N1ck9yZFBhcnRzAAEDAwkAZgIAAAUIY3VyT3JkUHIGCQBmAgAABQhuZXdPcmRQcgkAAgECF1ByaWNlIGNhbid0IGJlIG5lZ2F0aXZlBAljdXJPcmRVc2QJAGsDBQhjdXJPcmRBbQUIY3VyT3JkUHIFBU1VTFQ4BAljdXJPcmRWb2wJAQh0b1ZvbHVtZQMFCGN1ck9yZEFtBQdwa2dTaXplBQZpc1Byb2QDCQAAAgUIbmV3T3JkQW0AAAMJAGYCBQhjdXJPcmRBbQAACQCaCggJAGQCBQFqAAEJAM0IAggFA2FjYwJfMgkApAMBBQZ3aEluaXQIBQNhY2MCXzMIBQNhY2MCXzQJAGUCCAUDYWNjAl81BQljdXJPcmRVc2QIBQNhY2MCXzYIBQNhY2MCXzcFBmlzUHJvZAkAmgoICQBkAgUBagABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZQIFBndoSW5pdAUIY3VyT3JkQW0IBQNhY2MCXzMIBQNhY2MCXzQIBQNhY2MCXzUIBQNhY2MCXzYIBQNhY2MCXzcFBmlzUHJvZAMJAGYCBQhuZXdPcmRBbQAAAwkAZgIAAAUIY3VyT3JkQW0JAJoKCAkAZAIFAWoAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGUCBQZ3aEluaXQFCGN1ck9yZEFtCQBkAggFA2FjYwJfMwUJbmV3T3JkVm9sCAUDYWNjAl80CQBkAggFA2FjYwJfNQUJbmV3T3JkVXNkCAUDYWNjAl82CAUDYWNjAl83BQZpc1Byb2QJAJoKCAkAZAIFAWoAAQkAzQgCCAUDYWNjAl8yCQCkAwEFBndoSW5pdAkAZAIIBQNhY2MCXzMFCW5ld09yZFZvbAgFA2FjYwJfNAkAZQIJAGQCCAUDYWNjAl81BQluZXdPcmRVc2QFCWN1ck9yZFVzZAgFA2FjYwJfNggFA2FjYwJfNwUGaXNQcm9kAwkAZgIAAAUIY3VyT3JkQW0EBmFtRGlmZgkAZQIFCGN1ck9yZEFtBQhuZXdPcmRBbQMJAGYCAAAJAGUCBQZ3aEluaXQFBmFtRGlmZgkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byB0YWtlIAkApAMBBQZhbURpZmYCGiBmcm9tIHdhcmVob3VzZSwgYnV0IG9ubHkgCQCkAwEFBndoSW5pdAIKIGF2YWlsYWJsZQkAmgoICQBkAgUBagABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZQIFBndoSW5pdAUGYW1EaWZmCAUDYWNjAl8zCQBlAggFA2FjYwJfNAUJbmV3T3JkVm9sCAUDYWNjAl81CAUDYWNjAl82CAUDYWNjAl83BQZpc1Byb2QDCQBmAgAACQBkAgUGd2hJbml0BQhuZXdPcmRBbQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byB0YWtlIAkApAMBCQEBLQEFCG5ld09yZEFtAhogZnJvbSB3YXJlaG91c2UsIGJ1dCBvbmx5IAkApAMBBQZ3aEluaXQCCiBhdmFpbGFibGUJAJoKCAkAZAIFAWoAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGQCBQZ3aEluaXQFCG5ld09yZEFtCAUDYWNjAl8zCQBlAggFA2FjYwJfNAUJbmV3T3JkVm9sCQBlAggFA2FjYwJfNQUJY3VyT3JkVXNkCAUDYWNjAl82CAUDYWNjAl83BQZpc1Byb2QBDGFjY2VwdENvbW1vbgIDYWNjCWJwT3JkSXRlbQQBaggFA2FjYwJfNwQGaXNQcm9kCAUDYWNjA18xMgQHcGtnU2l6ZQMFBmlzUHJvZAkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4BQFqAgFfBRFyZWNpcGVJZHhQYWNrc2l6ZQAABApicE9yZFBhcnRzCQC1CQIFCWJwT3JkSXRlbQIBQAMJAQIhPQIJAJADAQUKYnBPcmRQYXJ0cwACCQACAQIuSW5jb3JyZWN0IG9yZGVyIGZvcm1hdCwgc2hvdWxkIGJlIGFtb3VudEBwcmljZQQHYnBPcmRBbQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCmJwT3JkUGFydHMAAAQHYnBPcmRQcgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCmJwT3JkUGFydHMAAQMJAGYCAAAFB2JwT3JkUHIJAAIBAhdQcmljZSBjYW4ndCBiZSBuZWdhdGl2ZQQIYnBPcmRVc2QJAGsDBQdicE9yZEFtBQdicE9yZFByBQVNVUxUOAQGYnBJbml0CQENcGFyc2VJbnRWYWx1ZQEJAJEDAggFA2FjYwJfOAUBagQGd2hJbml0CQENcGFyc2VJbnRWYWx1ZQEJAJEDAggFA2FjYwJfOQUBagQKd2hPcmRQYXJ0cwkAtQkCCQCRAwIIBQNhY2MDXzEwBQFqAgFABAd3aE9yZEFtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKd2hPcmRQYXJ0cwAABAd3aE9yZFByCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKd2hPcmRQYXJ0cwABAwMJAQIhPQIFB2JwT3JkQW0AAAkBAiE9AgUHYnBPcmRQcgUHd2hPcmRQcgcJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIKUHJpY2VzIG9mIAkAkQMCCAUDYWNjA18xMQUBagIXIGRvbid0IG1hdGNoISBXSCBwcmljZT0JAKQDAQUHd2hPcmRQcgINLCB5b3VyIHByaWNlPQkApAMBBQdicE9yZFByBAh3aE9yZFVzZAkAawMFB3doT3JkQW0FB3doT3JkUHIFBU1VTFQ4BAhkZWx0YVZvbAkBCHRvVm9sdW1lAwUHYnBPcmRBbQUHcGtnU2l6ZQUGaXNQcm9kAwkAAAIFB2JwT3JkQW0AAAkAnQoLCQDNCAIIBQNhY2MCXzEJAKQDAQUGd2hJbml0CQDNCAIIBQNhY2MCXzIJAJEDAggFA2FjYwNfMTAFAWoJAM0IAggFA2FjYwJfMwkApAMBBQZicEluaXQIBQNhY2MCXzQIBQNhY2MCXzUIBQNhY2MCXzYJAGQCCAUDYWNjAl83AAEIBQNhY2MCXzgIBQNhY2MCXzkIBQNhY2MDXzEwCAUDYWNjA18xMQMJAGYCBQdicE9yZEFtAAADCQBmAgAABQd3aE9yZEFtAwkAZgIFB2JwT3JkQW0JAQEtAQUHd2hPcmRBbQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg9BdHRlbXB0IHRvIGJ1eSAJAKQDAQUHYnBPcmRBbQIEIG9mIAkAkQMCCAUDYWNjA18xMQUBagIbLCBidXQgd2FyZWhvdXNlIG9ubHkgc2VsbHMgCQCkAwEJAQEtAQUHd2hPcmRBbQkAnQoLCQDNCAIIBQNhY2MCXzEJAKQDAQUGd2hJbml0CQDNCAIIBQNhY2MCXzIJAKwCAgkArAICCQCkAwEJAGQCBQd3aE9yZEFtBQdicE9yZEFtAgFACQCkAwEFB3doT3JkUHIJAM0IAggFA2FjYwJfMwkApAMBCQBkAgUGYnBJbml0BQdicE9yZEFtCQBkAggFA2FjYwJfNAUIZGVsdGFWb2wIBQNhY2MCXzUJAGQCCAUDYWNjAl82BQhicE9yZFVzZAkAZAIIBQNhY2MCXzcAAQgFA2FjYwJfOAgFA2FjYwJfOQgFA2FjYwNfMTAIBQNhY2MDXzExCQACAQkArAICCQCsAgICD0F0dGVtcHQgdG8gYnV5IAkAkQMCCAUDYWNjA18xMQUBagIgIHdoaWxlIHdhcmVob3VzZSBkb2Vzbid0IHNlbGwgaXQDCQBmAgUHd2hPcmRBbQAAAwkAZgIJAQEtAQUHYnBPcmRBbQUHd2hPcmRBbQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHNlbGwgCQCkAwEJAQEtAQUHYnBPcmRBbQIEIG9mIAkAkQMCCAUDYWNjA18xMQUBagIaLCBidXQgd2FyZWhvdXNlIG9ubHkgYnV5cyAJAKQDAQUHd2hPcmRBbQMJAGYCCQEBLQEFB2JwT3JkQW0FBmJwSW5pdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHNlbGwgCQCkAwEJAQEtAQUHYnBPcmRBbQIULCBidXQgeW91IG9ubHkgaGF2ZSAJAKQDAQUGYnBJbml0AgQgb2YgCQCRAwIIBQNhY2MDXzExBQFqCQCdCgsJAM0IAggFA2FjYwJfMQkApAMBCQBlAgUGd2hJbml0BQdicE9yZEFtCQDNCAIIBQNhY2MCXzIJAKwCAgkArAICCQCkAwEJAGQCBQd3aE9yZEFtBQdicE9yZEFtAgFACQCkAwEFB3doT3JkUHIJAM0IAggFA2FjYwJfMwkApAMBCQBkAgUGYnBJbml0BQdicE9yZEFtCQBlAggFA2FjYwJfNAUIZGVsdGFWb2wJAGUCCAUDYWNjAl81BQhicE9yZFVzZAgFA2FjYwJfNgkAZAIIBQNhY2MCXzcAAQgFA2FjYwJfOAgFA2FjYwJfOQgFA2FjYwNfMTAIBQNhY2MDXzExCQACAQkArAICCQCsAgICEEF0dGVtcHQgdG8gc2VsbCAJAJEDAggFA2FjYwNfMTEFAWoCHyB3aGlsZSB3YXJlaG91c2UgZG9lc24ndCBidXkgaXQHAWkBDWNvbnN0cnVjdG9yVjEBCHJlc3RBZGRyAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRUGVybWlzc2lvbiBkZW5pZWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDmtleVJlc3RBZGRyZXNzAAUIcmVzdEFkZHIFA25pbAFpAQ1zZWxsUmVzb3VyY2VzAgdhbW91bnRzCW1pblByaWNlcwQHYmxvY2tlZAkBDGNoZWNrQmxvY2tlZAADCQAAAgUHYmxvY2tlZAUHYmxvY2tlZAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIqc2VsbFJlc291cmNlcyBkb2Vzbid0IHJlcXVpcmUgYW55IHBheW1lbnRzBAtjdXJMb2NhdGlvbgkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04CAV8DCQECIT0CCQCRAwIFC2N1ckxvY2F0aW9uBQpsb2NJZHhUeXBlAgFGCQACAQkArAICAi1EdWNrIGxvY2F0aW9uIHR5cGUgc2hvdWxkIGJlIEZhY3RvcnksIGJ1dCBpcyAJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUEBWxvY0lkCQCRAwIFC2N1ckxvY2F0aW9uBQhsb2NJZHhJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAdyZXNMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfCgEFYWRkZXICA2FjYwFqAwkAZgIJAJEDAgUHYW1vdW50cwUBagkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3Jlc0xpc3QFAWoJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIJWW91IGhhdmUgCQCRAwIFB3Jlc0xpc3QFAWoCBCBvZiAJAJEDAgUIcmVzVHlwZXMFAWoCFCwgYnV0IHRyaWVkIHRvIHNlbGwgCQCkAwEJAJEDAgUHYW1vdW50cwUBagMJAGYCAAAJAJEDAgUHYW1vdW50cwUBagkAAgEJAKwCAgkArAICCQCsAgICJVlvdSB0cmllZCB0byBzZWxsIG5lZ2F0aXZlIGFtb3VudCBvZiAJAJEDAgUIcmVzVHlwZXMFAWoCAjogCQCkAwEJAJEDAgUHYW1vdW50cwUBagMJAGYCCQCRAwIFB2Ftb3VudHMFAWoAAAQBYgkBDHNlbGxJbnRlcm5hbAQFBWxvY0lkBQFqCQCRAwIFB2Ftb3VudHMFAWoJAJEDAgUJbWluUHJpY2VzBQFqCQCVCgMJAM0IAggFA2FjYwJfMQgFAWICXzEJAM0IAggFA2FjYwJfMgkApAMBCQBlAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3Jlc0xpc3QFAWoJAJEDAgUHYW1vdW50cwUBagkAZAIIBQNhY2MCXzMIBQFiAl8yCQCVCgMIBQNhY2MCXzEJAM0IAggFA2FjYwJfMgkAkQMCBQdyZXNMaXN0BQFqCAUDYWNjAl8zBAZtZXJnZWQKAAIkbAkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlQoDBQNuaWwFA25pbAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQVhZGRlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgQHbmV3UGFjawkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAuQkCCAUGbWVyZ2VkAl8yAgFfCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6BAZyZXN1bHQJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVCYWNrcGFjawkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQduZXdQYWNrBQNuaWwFA25pbAkAlAoCCQDNCAIIBQZtZXJnZWQCXzEJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcggFBm1lcmdlZAJfMwULdXNkdEFzc2V0SWQFBnJlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQxidXlNYXRlcmlhbHMCB2Ftb3VudHMJbWF4UHJpY2VzBAdibG9ja2VkCQEMY2hlY2tCbG9ja2VkAAMJAAACBQdibG9ja2VkBQdibG9ja2VkBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAiJleGFjdGx5IDEgcGF5bWVudCBtdXN0IGJlIGF0dGFjaGVkBANwbXQJAJEDAggFAWkIcGF5bWVudHMAAAQDYW10CAUDcG10BmFtb3VudAQKcG10QXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCAUDcG10B2Fzc2V0SWQCHldBVkVTIGNhbid0IGJlIHVzZWQgYXMgcGF5bWVudAMJAQIhPQIFCnBtdEFzc2V0SWQFC3VzZHRBc3NldElkCQACAQITVVNEVCBwYXltZW50cyBvbmx5IQQLY3VyTG9jYXRpb24JALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OAgFfAwkBAiE9AgkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQIBRgkAAgEJAKwCAgItRHVjayBsb2NhdGlvbiB0eXBlIHNob3VsZCBiZSBGYWN0b3J5LCBidXQgaXMgCQCRAwIFC2N1ckxvY2F0aW9uBQpsb2NJZHhUeXBlBAVsb2NJZAkAkQMCBQtjdXJMb2NhdGlvbgUIbG9jSWR4SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQHbWF0TGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwoBCG1VcGRhdGVyAgNhY2MBagMJAGYCAAAJAJEDAgUHYW1vdW50cwUBagkAAgEJAKwCAgkArAICCQCsAgICJFlvdSB0cmllZCB0byBidXkgbmVnYXRpdmUgYW1vdW50IG9mIAkAkQMCBQhtYXRUeXBlcwUBagICOiAJAKQDAQkAkQMCBQdhbW91bnRzBQFqAwkAZgIJAJEDAgUHYW1vdW50cwUBagAABAFiCQELYnV5SW50ZXJuYWwEBQVsb2NJZAUBagkAkQMCBQdhbW91bnRzBQFqCQCRAwIFCW1heFByaWNlcwUBagkAlQoDCQDNCAIIBQNhY2MCXzEIBQFiAl8xCQDNCAIIBQNhY2MCXzIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdtYXRMaXN0BQFqCAUBYgJfMwkAZAIIBQNhY2MCXzMIBQFiAl8yCQCVCgMIBQNhY2MCXzEJAM0IAggFA2FjYwJfMgkAkQMCBQdtYXRMaXN0BQFqCAUDYWNjAl8zBAZtZXJnZWQKAAIkbAkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlQoDBQNuaWwFA25pbAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQhtVXBkYXRlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgMJAGYCCAUGbWVyZ2VkAl8zBQNhbXQJAAIBCQCsAgIJAKwCAgkArAICAh9JbnN1ZmZpY2llbnQgcGF5bWVudCEgQXR0YWNoZWQ9CQCkAwEFA2FtdAILLCByZXF1aXJlZD0JAKQDAQgFBm1lcmdlZAJfMwQHbmV3UGFjawkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgkAuQkCCAUGbWVyZ2VkAl8yAgFfCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6BAZyZXN1bHQJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVCYWNrcGFjawkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQduZXdQYWNrBQNuaWwFA25pbAQEcmVzdAMJAGYCCQBlAgUDYW10CAUGbWVyZ2VkAl8zAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQBlAgUDYW10CAUGbWVyZ2VkAl8zBQt1c2R0QXNzZXRJZAUDbmlsBQNuaWwEEGFjdGl2aXRpZXNBbW91bnQJAGkCCAUGbWVyZ2VkAl8zAGQJAJQKAgkAzQgCCQDOCAIIBQZtZXJnZWQCXzEFBHJlc3QJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAUQYWN0aXZpdGllc0Ftb3VudAULdXNkdEFzc2V0SWQFBnJlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARFleGNoYW5nZVJlc291cmNlcwEHYW1vdW50cwQHYmxvY2tlZAkBDGNoZWNrQmxvY2tlZAADCQAAAgUHYmxvY2tlZAUHYmxvY2tlZAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQECnBtdEFzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAggFA3BtdAdhc3NldElkAh5XQVZFUyBjYW4ndCBiZSB1c2VkIGFzIHBheW1lbnQDCQECIT0CBQpwbXRBc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEEC2N1ckxvY2F0aW9uCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgIBXwMJAQIhPQIJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUCAUYJAAIBCQCsAgICLUR1Y2sgbG9jYXRpb24gdHlwZSBzaG91bGQgYmUgRmFjdG9yeSwgYnV0IGlzIAkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQQFbG9jSWQJAJEDAgULY3VyTG9jYXRpb24FCGxvY0lkeElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEB3Jlc0xpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMCAV8EB21hdExpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8KAQlleGNoYW5nZXICA2FjYwFqBAV3aEtleQkBHmtleUZhY3RvcnlXYXJlaG91c2VCeUlkQW5kVHlwZQIFBWxvY0lkBQFqBAJ3MAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQV3aEtleQAABANhbWoJAJEDAgUHYW1vdW50cwUBagMJAGYCBQNhbWoJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdyZXNMaXN0BQFqCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICCVlvdSBoYXZlIAkAkQMCBQdyZXNMaXN0BQFqAgQgb2YgCQCRAwIFCHJlc1R5cGVzBQFqAhgsIGJ1dCB0cmllZCB0byBleGNoYW5nZSAJAKQDAQUDYW1qAwkAZgIAAAUDYW1qCQACAQkArAICCQCsAgIJAKwCAgIpWW91IHRyaWVkIHRvIGV4Y2hhbmdlIG5lZ2F0aXZlIGFtb3VudCBvZiAJAJEDAgUIcmVzVHlwZXMFAWoCAjogCQCkAwEFA2FtagMJAGYCBQNhbWoAAAkAlgoECQDNCAIIBQNhY2MCXzEJAKQDAQkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdyZXNMaXN0BQFqBQNhbWoJAM0IAggFA2FjYwJfMgkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB21hdExpc3QFAWoFA2FtagkAZAIIBQNhY2MCXzMJAGsDBQNhbWoFEFJFU09VUkNFUFJJQ0VNSU4FBU1VTFQ4CQDNCAIIBQNhY2MCXzQJAQxJbnRlZ2VyRW50cnkCBQV3aEtleQUCdzAJAJYKBAkAzQgCCAUDYWNjAl8xCQCRAwIFB3Jlc0xpc3QFAWoJAM0IAggFA2FjYwJfMgkAkQMCBQdtYXRMaXN0BQFqCAUDYWNjAl8zCAUDYWNjAl80BAZtZXJnZWQKAAIkbAkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlgoEBQNuaWwFA25pbAAABQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCWV4Y2hhbmdlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgMJAGYCCAUGbWVyZ2VkAl8zBQNhbXQJAAIBCQCsAgIJAKwCAgkArAICAh9JbnN1ZmZpY2llbnQgcGF5bWVudCEgQXR0YWNoZWQ9CQCkAwEFA2FtdAILLCByZXF1aXJlZD0JAKQDAQgFBm1lcmdlZAJfMwQHbmV3UGFjawkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAuQkCCAUGbWVyZ2VkAl8xAgFfCQDMCAIJALkJAggFBm1lcmdlZAJfMgIBXwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgQGcmVzdWx0CQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQmFja3BhY2sJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUHbmV3UGFjawUDbmlsBQNuaWwEBHJlc3QDCQBmAgkAZQIFA2FtdAgFBm1lcmdlZAJfMwAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkAZQIFA2FtdAgFBm1lcmdlZAJfMwULdXNkdEFzc2V0SWQFA25pbAUDbmlsBBBhY3Rpdml0aWVzQW1vdW50CQBpAggFBm1lcmdlZAJfMwBkCQCUCgIJAM0IAgkAzggCBQRyZXN0CAUGbWVyZ2VkAl80CQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFEGFjdGl2aXRpZXNBbW91bnQFC3VzZHRBc3NldElkBQZyZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEKY3JhZnRHb29kcwIKcHJvZHVjdElkeAhxdWFudGl0eQQHYmxvY2tlZAkBDGNoZWNrQmxvY2tlZAADCQAAAgUHYmxvY2tlZAUHYmxvY2tlZAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABANhbXQIBQNwbXQGYW1vdW50BApwbXRBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIIBQNwbXQHYXNzZXRJZAIeV0FWRVMgY2FuJ3QgYmUgdXNlZCBhcyBwYXltZW50AwkBAiE9AgUKcG10QXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhNVU0RUIHBheW1lbnRzIG9ubHkhAwkBAiE9AgUDYW10BQVNVUxUNgkAAgECKmV4YWN0bHkgMSBVU0RUIG11c3QgYmUgYXR0YWNoZWQgYXMgcGF5bWVudAMJAGcCAAAFCHF1YW50aXR5CQACAQIbUXVhbnRpdHkgc2hvdWxkIGJlIHBvc2l0aXZlBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEC2N1ckxvY2F0aW9uCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgIBXwMJAQIhPQIJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUCAU0JAAIBCQCsAgICMUR1Y2sgbG9jYXRpb24gdHlwZSBzaG91bGQgYmUgTWFudWZhY3RvcnksIGJ1dCBpcyAJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUEBGNvbnQJAJEDAgULY3VyTG9jYXRpb24FD2xvY0lkeENvbnRpbmVudAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAdtYXRMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfAwMJAGYCAAAFCnByb2R1Y3RJZHgGCQBnAgUKcHJvZHVjdElkeAkAkAMBBRBwcm9kdWN0aW9uTWF0cml4CQACAQkArAICAhRVbmtub3duIHByb2R1Y3QgaWR4PQkApAMBBQpwcm9kdWN0SWR4BAZyZWNpcGUJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4BQpwcm9kdWN0SWR4AgFfAwkBAiE9AgkAkAMBBQZyZWNpcGUJAGQCBQZOVU1SRVMAAwkAAgEJAKwCAgIXRmF0YWw6IHVua25vd24gcmVjaXBlOiAJAJEDAgUQcHJvZHVjdGlvbk1hdHJpeAUKcHJvZHVjdElkeAQOcHJvZHVjdENvbnRJZHgJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZyZWNpcGUFEnJlY2lwZUlkeENvbnRpbmVudAMJAQIhPQIJAJEDAgUKY29udGluZW50cwUOcHJvZHVjdENvbnRJZHgFBGNvbnQJAAIBCQCsAgIJAKwCAgkArAICAh1UaGlzIHByb2R1Y3QgaXMgYXZhaWxhYmxlIGluIAkAkQMCBQpjb250aW5lbnRzBQ5wcm9kdWN0Q29udElkeAIRLCBidXQgeW91IGFyZSBpbiAFBGNvbnQECHByb2RMaXN0AwkAAAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIABQNuaWwJALUJAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgFfCgEGZmlsbGVyAgNhY2MLaWdub3JlZEl0ZW0EAW4IBQNhY2MCXzIEAnhzAwkAZgIJAJADAQUIcHJvZExpc3QFAW4JAJEDAgUIcHJvZExpc3QFAW4CATAEAXgJAQ1wYXJzZUludFZhbHVlAQUCeHMEBmFtb3VudAkAaAIFCHF1YW50aXR5CQENcGFyc2VJbnRWYWx1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AiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQERc2V0V2FyZWhvdXNlT3JkZXICDGNhcmdvTGlzdFN0cgtsYW5kQXNzZXRJZAQEdXNlcggFAWkMb3JpZ2luQ2FsbGVyBARhZGRyCQClCAEFBHVzZXIEBnJlc3VsdAMJAQIhPQIFBHVzZXIFDHJlc3RDb250cmFjdAkBDGNoZWNrQmxvY2tlZAAHBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQkAmggCBQ9zdGFraW5nQ29udHJhY3QJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMDCQECIT0CBQR1c2VyBQxyZXN0Q29udHJhY3QJAQIhPQIFBW93bmVyBQRhZGRyBwkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQKY2FyZ29QYXJ0cwkAvAkCBQxjYXJnb0xpc3RTdHICAToDCQECIT0CCQCQAwEFCmNhcmdvUGFydHMAAwkAAgECNGNhcmdvTGlzdFN0ciBzaG91bGQgY29udGFpbiBleGFjdGx5IDIgJzonIHNlcGFyYXRvcnMECHJlc1BhcnRzCQC1CQIJAJEDAgUKY2FyZ29QYXJ0cwAAAgFfBAhtYXRQYXJ0cwkAtQkCCQCRAwIFCmNhcmdvUGFydHMAAQIBXwQJcHJvZFBhcnRzAwkAAAIJAJEDAgUKY2FyZ29QYXJ0cwACAgAFA25pbAkAtQkCCQCRAwIFCmNhcmdvUGFydHMAAgIBXwMJAQIhPQIJAJADAQUIcmVzUGFydHMFBk5VTVJFUwkAAgECIEFsbCA2IHJlc291cmNlcyBzaG91bGQgYmUgcGFzc2VkAwkBAiE9AgkAkAMBBQhtYXRQYXJ0cwUGTlVNUkVTCQACAQIgQWxsIDYgbWF0ZXJpYWxzIHNob3VsZCBiZSBwYXNzZWQEAndoCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIUZ2V0V2FyZWhvdXNlUkVBRE9OTFkJAMwIAgULbGFuZEFzc2V0SWQFA25pbAUDbmlsBAljdXJyZW50V2gJALwJAgUCd2gCAToECWN1cnJXaFJlcwkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8ECWN1cnJXaE1hdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhNYXQCAV8ECmN1cnJXaFByb2QDCQAAAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAIABQNuaWwJALUJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAIBXwQEbG9mdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUAgFfBAp3aE9jY3VwaWVkCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQEBndoRnJlZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUEBm9yZEtleQkBDmtleU9yZGVyQnlMYW5kAQULbGFuZEFzc2V0SWQECmN1cnJlbnRPcmQJAQhnZXRPcmRlcgEFBm9yZEtleQQNY3VycmVudE9yZFJlcwkAtQkCCQCRAwIFCmN1cnJlbnRPcmQFCW9yZElkeFJlcwIBXwQNY3VycmVudE9yZE1hdAkAtQkCCQCRAwIFCmN1cnJlbnRPcmQFCW9yZElkeE1hdAIBXwQOY3VycmVudE9yZFByb2QDCQAAAgkAkQMCBQpjdXJyZW50T3JkBQpvcmRJZHhQcm9kAgAFA25pbAkAtQkCCQCRAwIFCmN1cnJlbnRPcmQFCm9yZElkeFByb2QCAV8EDXVzZHROZWVkMkxvY2sAAAQBcgoAAiRsBQhyZXNQYXJ0cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJoKCAAABQNuaWwAAAAAAAAFCWN1cnJXaFJlcwUNY3VycmVudE9yZFJlcwcKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCXNldENvbW1vbgIF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AW0CXzICAV8JAMwIAgkAuQkCCAUBcAJfMgIBXwkAzAgCCQCkAwEJAGQCBQtidXlWb2xTYWxkbwUMc2VsbFZvbFNhbGRvBQNuaWwCAToEBndoU2F2ZQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDXNhdmVXYXJlaG91c2UJAMwIAgUFd2hTdHIJAMwIAgULbGFuZEFzc2V0SWQFA25pbAUDbmlsAwkAAAIFBndoU2F2ZQUGd2hTYXZlBAh1c2RTYWxkbwgFAXACXzUEB2FjdGlvbnMDCQBmAgUIdXNkU2FsZG8AAAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABANhbXQIBQNwbXQGYW1vdW50BApwbXRBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIIBQNwbXQHYXNzZXRJZAIeV0FWRVMgY2FuJ3QgYmUgdXNlZCBhcyBwYXltZW50AwkBAiE9AgUKcG10QXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhNVU0RUIHBheW1lbnRzIG9ubHkhAwkBAiE9AgUDYW10BQh1c2RTYWxkbwkAAgEJAKwCAgISUGF5bWVudCBuZWVkZWQgaXMgCQCkAwEFCHVzZFNhbGRvCQDMCAIJAQtTdHJpbmdFbnRyeQIFBm9yZEtleQUMY2FyZ29MaXN0U3RyBQNuaWwDCQAAAgUIdXNkU2FsZG8AAAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECEk5vIHBheW1lbnRzIG5lZWRlZAkAzAgCCQELU3RyaW5nRW50cnkCBQZvcmRLZXkFDGNhcmdvTGlzdFN0cgUDbmlsAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQISTm8gcGF5bWVudHMgbmVlZGVkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBW93bmVyCQEBLQEFCHVzZFNhbGRvBQt1c2R0QXNzZXRJZAkAzAgCCQELU3RyaW5nRW50cnkCBQZvcmRLZXkFDGNhcmdvTGlzdFN0cgUDbmlsCQCUCgIFB2FjdGlvbnMFBnJlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARRhY2NlcHRXYXJlaG91c2VPcmRlcgMKYnBPcmRlclN0cgtsYW5kQXNzZXRJZAtkdWNrQXNzZXRJZAQHYmxvY2tlZAkBDGNoZWNrQmxvY2tlZAADCQAAAgUHYmxvY2tlZAUHYmxvY2tlZAQGY2FsbGVyCAUBaQxvcmlnaW5DYWxsZXIECmNhbGxlckFkZHIJAKUIAQUGY2FsbGVyBBFzdGFrZWREdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUKY2FsbGVyQWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEPa2V5RHVja0xvY2F0aW9uAQURc3Rha2VkRHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgQDbG9jCQC1CQIJAQV2YWx1ZQEFC2N1ckxvY2F0aW9uAgFfAwkBAiE9AgkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCAUwJAAIBCQCsAgIJAKwCAgIWRHVjayBsb2NhdGlvbiB0eXBlIGlzIAkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCESwgYnV0IHNob3VsZCBiZSBMAwkBAiE9AgURc3Rha2VkRHVja0Fzc2V0SWQFC2R1Y2tBc3NldElkCQACAQkArAICCQCsAgIJAKwCAgIUWW91ciBzdGFrZWQgZHVjayBpcyAFEXN0YWtlZER1Y2tBc3NldElkAg0sIGJ1dCBwYXNzZWQgBQtkdWNrQXNzZXRJZAQJbGFuZEFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgkArAICAgRORlQgCAUJbGFuZEFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAlsYW5kT3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQlsYW5kQXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkAAAIFCWxhbmRPd25lcgUKY2FsbGVyQWRkcgkAAgECHllvdSBjYW5ub3QgdHJhZGUgd2l0aCB5b3Vyc2VsZgQMYnBPcmRlclBhcnRzCQC8CQIFCmJwT3JkZXJTdHICAToDCQECIT0CCQCQAwEFDGJwT3JkZXJQYXJ0cwADCQACAQIyYnBPcmRlclN0ciBzaG91bGQgY29udGFpbiBleGFjdGx5IDIgJzonIHNlcGFyYXRvcnMECGJwT3JkUmVzCQC1CQIJAJEDAgUMYnBPcmRlclBhcnRzAAACAV8ECGJwT3JkTWF0CQC1CQIJAJEDAgUMYnBPcmRlclBhcnRzAAECAV8ECWJwT3JkUHJvZAMJAAACCQCRAwIFDGJwT3JkZXJQYXJ0cwACAgAFA25pbAkAtQkCCQCRAwIFDGJwT3JkZXJQYXJ0cwACAgFfAwkBAiE9AgkAkAMBBQhicE9yZFJlcwUGTlVNUkVTCQACAQIgQWxsIDYgcmVzb3VyY2VzIHNob3VsZCBiZSBwYXNzZWQDCQECIT0CCQCQAwEFCGJwT3JkTWF0BQZOVU1SRVMJAAIBAiBBbGwgNiBtYXRlcmlhbHMgc2hvdWxkIGJlIHBhc3NlZAQCd2gJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0AhRnZXRXYXJlaG91c2VSRUFET05MWQkAzAgCBQtsYW5kQXNzZXRJZAUDbmlsBQNuaWwECWN1cnJlbnRXaAkAvAkCBQJ3aAIBOgQJY3VycldoUmVzCQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeFJlcwIBXwQJY3VycldoTWF0CQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeE1hdAIBXwQKY3VycldoUHJvZAMJAAACCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAgAFA25pbAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAgFfBA9jdXJyV2hMb2NrZWRWb2wJAQ1wYXJzZUludFZhbHVlAQkAkQMCCQC1CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeExPRlQCAV8FCXZvbExvY2tlZAQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkECWJwUmVzTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwIBXwQJYnBNYXRMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBApicFByb2RMaXN0AwkAAAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIABQNuaWwJALUJAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgFfBAZvcmRLZXkJAQ5rZXlPcmRlckJ5TGFuZAEFC2xhbmRBc3NldElkBAV3aE9yZAkBCGdldE9yZGVyAQUGb3JkS2V5BAh3aE9yZFJlcwkAtQkCCQCRAwIFBXdoT3JkBQlvcmRJZHhSZXMCAV8ECHdoT3JkTWF0CQC1CQIJAJEDAgUFd2hPcmQFCW9yZElkeE1hdAIBXwQJd2hPcmRQcm9kAwkAAAIJAJEDAgUFd2hPcmQFCm9yZElkeFByb2QCAAUDbmlsCQC1CQIJAJEDAgUFd2hPcmQFCm9yZElkeFByb2QCAV8EDXVzZHROZWVkMkxvY2sAAAQBcgoAAiRsBQhicE9yZFJlcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJ4KDAUDbmlsBQNuaWwFA25pbAAAAAAAAAAABQlicFJlc0xpc3QFCWN1cnJXaFJlcwUId2hPcmRSZXMFCHJlc1R5cGVzBwoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEMYWNjZXB0Q29tbW9uAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGBAFtCgACJGwFCGJw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bAUDbmlsAwkAAAIFBndoU2F2ZQUGd2hTYXZlBAZicFNhdmUJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVCYWNrcGFjawkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQhuZXdCcFN0cgUDbmlsBQNuaWwDCQAAAgUGYnBTYXZlBQZicFNhdmUEB2FjdGlvbnMJAMwIAgkBC1N0cmluZ0VudHJ5AgUGb3JkS2V5BQtuZXdXaE9yZFN0cgUDbmlsBA11c2RXaDJCcFNhbGRvCAUBcAJfNQQIYWN0aW9uczEDCQBmAgUNdXNkV2gyQnBTYWxkbwAABAt1c2RXaDJCcEZlZQkAawMIBQFwAl81BQpBVUNUSU9ORkVFBQVNVUxUNgQIcmVmQnlLZXkJAQ9rZXlBZGRyZXNzUmVmQnkBBQpjYWxsZXJBZGRyBAVyZWZCeQkAnQgCBQ9zdGFraW5nQ29udHJhY3QFCHJlZkJ5S2V5AwkBCWlzRGVmaW5lZAEFBXJlZkJ5CQDNCAIJAM0IAgkAzQgCBQdhY3Rpb25zCQEOU2NyaXB0VHJhbnNmZXIDBQZjYWxsZXIJAGUCCAUBcAJfNQkAaAIAAwULdXNkV2gyQnBGZWUFC3VzZHRBc3NldElkCQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFC3VzZFdoMkJwRmVlBQt1c2R0QXNzZXRJZAkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBBXZhbHVlAQUFcmVmQnkFC3VzZFdoMkJwRmVlBQt1c2R0QXNzZXRJZAkAzQgCCQDNCAIFB2FjdGlvbnMJAQ5TY3JpcHRUcmFuc2ZlcgMFBmNhbGxlcgkAZQIIBQFwAl81CQBoAgADBQt1c2RXaDJCcEZlZQULdXNkdEFzc2V0SWQJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAULdXNkV2gyQnBGZWUFC3VzZHRBc3NldElkBQdhY3Rpb25zBA11c2RCcDJXaFNhbGRvCAUBcAJfNgMJAGYCBQ11c2RCcDJXaFNhbGRvAAADCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAiJleGFjdGx5IDEgcGF5bWVudCBtdXN0IGJlIGF0dGFjaGVkBANwbXQJAJEDAggFAWkIcGF5bWVudHMAAAQDYW10CAUDcG10BmFtb3VudAQKcG10QXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCAUDcG10B2Fzc2V0SWQCHldBVkVTIGNhbid0IGJlIHVzZWQgYXMgcGF5bWVudAMJAQIhPQIFCnBtdEFzc2V0SWQFC3VzZHRBc3NldElkCQACAQITVVNEVCBwYXltZW50cyBvbmx5IQMJAQIhPQIFA2FtdAUNdXNkQnAyV2hTYWxkbwkAAgEJAKwCAgISUGF5bWVudCBuZWVkZWQgaXMgCQCkAwEFDXVzZEJwMldoU2FsZG8DCQBmAgUOTUlOU0hPUFBBWU1FTlQFA2FtdAkAAgEJAKwCAgIbUGF5bWVudCBzaG91bGQgYmUgYXQgbGVhc3QgCQCkAwEFDk1JTlNIT1BQQVlNRU5UBAt1c2RCcDJXaEZlZQkAawMIBQFwAl82BQpBVUNUSU9ORkVFBQVNVUxUNgQIcmVmQnlLZXkJAQ9rZXlBZGRyZXNzUmVmQnkBBQlsYW5kT3duZXIEBXJlZkJ5CQCdCAIFD3N0YWtpbmdDb250cmFjdAUIcmVmQnlLZXkDCQEJaXNEZWZpbmVkAQUFcmVmQnkJAM0IAgkAzQgCCQDNCAIFCGFjdGlvbnMxCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQlsYW5kT3duZXIJAGUCCAUBcAJfNgkAaAIAAwULdXNkQnAyV2hGZWUFC3VzZHRBc3NldElkCQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFC3VzZEJwMldoRmVlBQt1c2R0QXNzZXRJZAkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBBXZhbHVlAQUFcmVmQnkFC3VzZEJwMldoRmVlBQt1c2R0QXNzZXRJZAkAzQgCCQDNCAIFCGFjdGlvbnMxCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQlsYW5kT3duZXIJAGUCCAUBcAJfNgkAaAIAAwULdXNkQnAyV2hGZWUFC3VzZHRBc3NldElkCQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFC3VzZEJwMldoRmVlBQt1c2R0QXNzZXRJZAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECEk5vIHBheW1lbnRzIG5lZWRlZAUIYWN0aW9uczEJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AHvXgGw==", "height": 2599756, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: FNoUAhR4Jd6Cws7YJJBDr7LWhpyYMhcU75PUQFudZJ6X Next: yxPxYAHG7h93UE5ZkToYGHvWfp98aqYk4x4zVAqjBDi Diff:
OldNewDifferences
301301
302302 func bI (bg,bh) = {
303303 let bJ = bg._1
304- let bK = bg._7
304+ let bK = bg._8
305305 let aW = if (bK)
306306 then parseIntValue(split(Q[bJ], "_")[ad])
307307 else 0
313313 let bN = parseIntValue(bL[1])
314314 let bO = fraction(bM, bN, d)
315315 let bP = aU(bM, aW, bK)
316- let bQ = if ((size(bg._5) > bJ))
317- then parseIntValue(bg._5[bJ])
316+ let bQ = if ((size(bg._6) > bJ))
317+ then parseIntValue(bg._6[bJ])
318318 else 0
319- let bR = split(if ((size(bg._6) > bJ))
320- then bg._6[bJ]
319+ let bR = split(if ((size(bg._7) > bJ))
320+ then bg._7[bJ]
321321 else "0@0", "@")
322322 let bS = parseIntValue(bR[0])
323323 let bT = parseIntValue(bR[1])
330330 let bV = aU(bS, aW, bK)
331331 if ((bM == 0))
332332 then if ((bS > 0))
333- then $Tuple7((bJ + 1), (bg._2 :+ toString(bQ)), (bg._3 - bV), (bg._4 - bU), bg._5, bg._6, bK)
334- else $Tuple7((bJ + 1), (bg._2 :+ toString((bQ - bS))), (bg._3 + bV), bg._4, bg._5, bg._6, bK)
333+ then $Tuple8((bJ + 1), (bg._2 :+ toString(bQ)), bg._3, bg._4, (bg._5 - bU), bg._6, bg._7, bK)
334+ else $Tuple8((bJ + 1), (bg._2 :+ toString((bQ - bS))), bg._3, bg._4, bg._5, bg._6, bg._7, bK)
335335 else if ((bM > 0))
336336 then if ((0 > bS))
337- then $Tuple7((bJ + 1), (bg._2 :+ toString((bQ - bS))), ((bg._3 + bP) + bV), (bg._4 + bO), bg._5, bg._6, bK)
338- else $Tuple7((bJ + 1), (bg._2 :+ toString(bQ)), ((bg._3 + bP) - bV), ((bg._4 + bO) - bU), bg._5, bg._6, bK)
337+ then $Tuple8((bJ + 1), (bg._2 :+ toString((bQ - bS))), (bg._3 + bP), bg._4, (bg._5 + bO), bg._6, bg._7, bK)
338+ else $Tuple8((bJ + 1), (bg._2 :+ toString(bQ)), (bg._3 + bP), bg._4, ((bg._5 + bO) - bU), bg._6, bg._7, bK)
339339 else if ((0 > bS))
340340 then {
341341 let bW = (bS - bM)
342342 if ((0 > (bQ - bW)))
343343 then throw((((("Attempt to take " + toString(bW)) + " from warehouse, but only ") + toString(bQ)) + " available"))
344- else $Tuple7((bJ + 1), (bg._2 :+ toString((bQ - bW))), ((bg._3 + bV) - bP), bg._4, bg._5, bg._6, bK)
344+ else $Tuple8((bJ + 1), (bg._2 :+ toString((bQ - bW))), bg._3, (bg._4 - bP), bg._5, bg._6, bg._7, bK)
345345 }
346346 else if ((0 > (bQ + bM)))
347347 then throw((((("Attempt to take " + toString(-(bM))) + " from warehouse, but only ") + toString(bQ)) + " available"))
348- else $Tuple7((bJ + 1), (bg._2 :+ toString((bQ + bM))), ((bg._3 - bP) - bV), (bg._4 - bU), bg._5, bg._6, bK)
348+ else $Tuple8((bJ + 1), (bg._2 :+ toString((bQ + bM))), bg._3, (bg._4 - bP), (bg._5 - bU), bg._6, bg._7, bK)
349349 }
350350 }
351351 }
736736 let di = if ((bd[aF] == ""))
737737 then nil
738738 else split(bd[aF], "_")
739- let dj = aZ(bd[aC])
739+ let dj = split(bd[aG], "_")
740+ let dk = parseIntValue(dj[aI])
741+ let dl = parseIntValue(dj[aJ])
740742 let aS = ai(aj)
741- let dk = aR(aS)
742- let dl = split(dk[aL], "_")
743- let dm = split(dk[aM], "_")
744- let dn = if ((dk[aN] == ""))
743+ let dm = aR(aS)
744+ let dn = split(dm[aL], "_")
745+ let do = split(dm[aM], "_")
746+ let dp = if ((dm[aN] == ""))
745747 then nil
746- else split(dk[aN], "_")
747- let do = 0
748- let dp = {
748+ else split(dm[aN], "_")
749+ let dq = 0
750+ let dr = {
749751 let bi = dc
750752 let bj = size(bi)
751- let bk = $Tuple7(0, nil, 0, 0, dg, dl, false)
753+ let bk = $Tuple8(0, nil, 0, 0, 0, dg, dn, false)
752754 func bl (bm,bn) = if ((bn >= bj))
753755 then bm
754756 else bI(bm, bi[bn])
762764 let bC = {
763765 let bi = dd
764766 let bj = size(bi)
765- let bk = $Tuple7(0, nil, dp._3, dp._4, dh, dm, false)
767+ let bk = $Tuple8(0, nil, dr._3, dr._4, dr._5, dh, do, false)
766768 func cV (bm,bn) = if ((bn >= bj))
767769 then bm
768770 else bI(bm, bi[bn])
777779 then {
778780 let bi = de
779781 let bj = size(bi)
780- let bk = $Tuple7(0, nil, bC._3, bC._4, di, dn, true)
781- func dq (bm,bn) = if ((bn >= bj))
782+ let bk = $Tuple8(0, nil, bC._3, bC._4, bC._5, di, dp, true)
783+ func ds (bm,bn) = if ((bn >= bj))
782784 then bm
783785 else bI(bm, bi[bn])
784786
785- func dr (bm,bn) = if ((bn >= bj))
787+ func dt (bm,bn) = if ((bn >= bj))
786788 then bm
787789 else throw("List size exceeds 50")
788790
789- dr(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(bk, 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)
791+ dt(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(bk, 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)
790792 }
791- else $Tuple7(0, di, bC._3, bC._4, di, dn, true)
792- let ds = aT._3
793- if ((ds > dj))
794- then throw((((("Attempt to reserve " + toString(ds)) + " space, but only ") + toString(dj)) + " warehouse space left"))
795- else {
796- let dt = makeString_2C([bd[aC], makeString(dp._2, "_"), makeString(bC._2, "_"), makeString(aT._2, "_"), toString(ds)], ":")
797- let du = invoke(z, "saveWarehouse", [dt, aj], nil)
798- if ((du == du))
799- then {
800- let dv = aT._4
801- let dw = if ((dv > 0))
802- then if ((size(cj.payments) != 1))
803- then throw("exactly 1 payment must be attached")
804- else {
805- let cx = cj.payments[0]
806- let cy = cx.amount
807- let cz = valueOrErrorMessage(cx.assetId, "WAVES can't be used as payment")
808- if ((cz != g))
809- then throw("USDT payments only!")
810- else if ((cy != dv))
811- then throw(("Payment needed is " + toString(dv)))
812- else [StringEntry(aS, cX)]
813- }
814- else if ((dv == 0))
815- then if ((size(cj.payments) != 0))
816- then throw("No payments needed")
817- else [StringEntry(aS, cX)]
818- else if ((size(cj.payments) != 0))
819- then throw("No payments needed")
820- else [ScriptTransfer(addressFromStringValue(da), -(dv), g), StringEntry(aS, cX)]
821- $Tuple2(dw, cv)
822- }
823- else throw("Strict value is not equal to itself.")
824- }
793+ else $Tuple8(0, di, bC._3, bC._4, bC._5, di, dp, true)
794+ let du = aT._3
795+ let dv = aT._4
796+ if ((du > dl))
797+ then throw((((("Attempt to reserve " + toString(du)) + " space for buy orders, but only ") + toString(dl)) + " warehouse empty space left"))
798+ else if ((dv > dk))
799+ then throw((((("Attempt to lock " + toString(dv)) + " space for sell orders, but only ") + toString(dk)) + " warehouse space occupied"))
800+ else {
801+ let dw = makeString_2C([bd[aC], makeString(dr._2, "_"), makeString(bC._2, "_"), makeString(aT._2, "_"), toString((du + dv))], ":")
802+ let dx = invoke(z, "saveWarehouse", [dw, aj], nil)
803+ if ((dx == dx))
804+ then {
805+ let dy = aT._5
806+ let dz = if ((dy > 0))
807+ then if ((size(cj.payments) != 1))
808+ then throw("exactly 1 payment must be attached")
809+ else {
810+ let cx = cj.payments[0]
811+ let cy = cx.amount
812+ let cz = valueOrErrorMessage(cx.assetId, "WAVES can't be used as payment")
813+ if ((cz != g))
814+ then throw("USDT payments only!")
815+ else if ((cy != dy))
816+ then throw(("Payment needed is " + toString(dy)))
817+ else [StringEntry(aS, cX)]
818+ }
819+ else if ((dy == 0))
820+ then if ((size(cj.payments) != 0))
821+ then throw("No payments needed")
822+ else [StringEntry(aS, cX)]
823+ else if ((size(cj.payments) != 0))
824+ then throw("No payments needed")
825+ else [ScriptTransfer(addressFromStringValue(da), -(dy), g), StringEntry(aS, cX)]
826+ $Tuple2(dz, cv)
827+ }
828+ else throw("Strict value is not equal to itself.")
829+ }
825830 }
826831 }
827832 }
831836
832837
833838 @Callable(cj)
834-func acceptWarehouseOrder (dx,aj,an) = {
839+func acceptWarehouseOrder (dA,aj,an) = {
835840 let cn = bH()
836841 if ((cn == cn))
837842 then {
838- let dy = cj.originCaller
839- let dz = toString(dy)
840- let dA = valueOrErrorMessage(getString(z, ak(dz)), "You don't have a duck staked")
841- let co = valueOrElse(getString(z, ao(dA)), A)
842- let dB = split(value(co), "_")
843- if ((dB[aw] != "L"))
844- then throw((("Duck location type is " + dB[aw]) + ", but should be L"))
845- else if ((dA != an))
846- then throw(((("Your staked duck is " + dA) + ", but passed ") + an))
843+ let dB = cj.originCaller
844+ let dC = toString(dB)
845+ let dD = valueOrErrorMessage(getString(z, ak(dC)), "You don't have a duck staked")
846+ let co = valueOrElse(getString(z, ao(dD)), A)
847+ let dE = split(value(co), "_")
848+ if ((dE[aw] != "L"))
849+ then throw((("Duck location type is " + dE[aw]) + ", but should be L"))
850+ else if ((dD != an))
851+ then throw(((("Your staked duck is " + dD) + ", but passed ") + an))
847852 else {
848- let dC = value(assetInfo(fromBase58String(aj)))
853+ let dF = value(assetInfo(fromBase58String(aj)))
849854 if (!(isDefined(getInteger(z, as(aj)))))
850- then throw((("NFT " + dC.name) + " is not staked"))
855+ then throw((("NFT " + dF.name) + " is not staked"))
851856 else {
852- let dD = valueOrErrorMessage(getString(z, aq(aj)), (("NFT " + dC.name) + " is orphaned"))
853- if ((dD == dz))
857+ let dG = valueOrErrorMessage(getString(z, aq(aj)), (("NFT " + dF.name) + " is orphaned"))
858+ if ((dG == dC))
854859 then throw("You cannot trade with yourself")
855860 else {
856- let dE = split_4C(dx, ":")
857- if ((size(dE) != 3))
861+ let dH = split_4C(dA, ":")
862+ if ((size(dH) != 3))
858863 then throw("bpOrderStr should contain exactly 2 ':' separators")
859864 else {
860- let dF = split(dE[0], "_")
861- let dG = split(dE[1], "_")
862- let dH = if ((dE[2] == ""))
865+ let dI = split(dH[0], "_")
866+ let dJ = split(dH[1], "_")
867+ let dK = if ((dH[2] == ""))
863868 then nil
864- else split(dE[2], "_")
865- if ((size(dF) != B))
869+ else split(dH[2], "_")
870+ if ((size(dI) != B))
866871 then throw("All 6 resources should be passed")
867- else if ((size(dG) != B))
872+ else if ((size(dJ) != B))
868873 then throw("All 6 materials should be passed")
869874 else {
870875 let df = aO(invoke(z, "getWarehouseREADONLY", [aj], nil))
874879 let di = if ((bd[aF] == ""))
875880 then nil
876881 else split(bd[aF], "_")
877- let dI = parseIntValue(split(bd[aG], "_")[aH])
882+ let dL = parseIntValue(split(bd[aG], "_")[aH])
878883 let bG = am(an)
879884 let cp = bF(bG)
880- let dJ = split(cp[az], "_")
881- let dK = split(cp[aA], "_")
882- let dL = if ((cp[aB] == ""))
885+ let dM = split(cp[az], "_")
886+ let dN = split(cp[aA], "_")
887+ let dO = if ((cp[aB] == ""))
883888 then nil
884889 else split(cp[aB], "_")
885890 let aS = ai(aj)
886- let dM = aR(aS)
887- let dN = split(dM[aL], "_")
888- let dO = split(dM[aM], "_")
889- let dP = if ((dM[aN] == ""))
891+ let dP = aR(aS)
892+ let dQ = split(dP[aL], "_")
893+ let dR = split(dP[aM], "_")
894+ let dS = if ((dP[aN] == ""))
890895 then nil
891- else split(dM[aN], "_")
892- let do = 0
893- let dp = {
894- let bi = dF
896+ else split(dP[aN], "_")
897+ let dq = 0
898+ let dr = {
899+ let bi = dI
895900 let bj = size(bi)
896- let bk = $Tuple12(nil, nil, nil, 0, 0, 0, 0, dJ, dg, dN, M, false)
901+ let bk = $Tuple12(nil, nil, nil, 0, 0, 0, 0, dM, dg, dQ, M, false)
897902 func bl (bm,bn) = if ((bn >= bj))
898903 then bm
899904 else bX(bm, bi[bn])
905910 bo(bl(bl(bl(bl(bl(bl(bk, 0), 1), 2), 3), 4), 5), 6)
906911 }
907912 let bC = {
908- let bi = dG
913+ let bi = dJ
909914 let bj = size(bi)
910- let bk = $Tuple12(nil, nil, nil, dp._4, dp._5, dp._6, 0, dK, dh, dO, N, false)
915+ let bk = $Tuple12(nil, nil, nil, dr._4, dr._5, dr._6, 0, dN, dh, dR, N, false)
911916 func cV (bm,bn) = if ((bn >= bj))
912917 then bm
913918 else bX(bm, bi[bn])
918923
919924 cW(cV(cV(cV(cV(cV(cV(bk, 0), 1), 2), 3), 4), 5), 6)
920925 }
921- let aT = if ((size(dH) != 0))
926+ let aT = if ((size(dK) != 0))
922927 then {
923- let bi = dH
928+ let bi = dK
924929 let bj = size(bi)
925- let bk = $Tuple12(nil, nil, nil, bC._4, bC._5, bC._6, 0, dL, di, dP, O, true)
926- func dq (bm,bn) = if ((bn >= bj))
930+ let bk = $Tuple12(nil, nil, nil, bC._4, bC._5, bC._6, 0, dO, di, dS, O, true)
931+ func ds (bm,bn) = if ((bn >= bj))
927932 then bm
928933 else bX(bm, bi[bn])
929934
930- func dr (bm,bn) = if ((bn >= bj))
935+ func dt (bm,bn) = if ((bn >= bj))
931936 then bm
932937 else throw("List size exceeds 50")
933938
934- dr(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(bk, 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)
939+ dt(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(bk, 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)
935940 }
936- else $Tuple12(di, dP, dL, bC._4, bC._5, bC._6, 0, dL, di, dP, O, true)
937- let ds = aT._4
938- let dQ = if ((0 > (dI - ds)))
941+ else $Tuple12(di, dS, dO, bC._4, bC._5, bC._6, 0, dO, di, dS, O, true)
942+ let dT = aT._4
943+ let dU = if ((0 > (dL - dT)))
939944 then 0
940- else (dI - ds)
941- let dt = makeString_2C([bd[aC], makeString(dp._1, "_"), makeString(bC._1, "_"), makeString(aT._1, "_"), toString(dQ)], ":")
942- let dR = makeString_2C([makeString(dp._2, "_"), makeString(bC._2, "_"), makeString(aT._2, "_")], ":")
943- let dS = makeString_2C([cp[ay], makeString(dp._3, "_"), makeString(bC._3, "_"), makeString(aT._3, "_")], ":")
944- let du = invoke(z, "saveWarehouse", [dt, aj], nil)
945- if ((du == du))
945+ else (dL - dT)
946+ let dw = makeString_2C([bd[aC], makeString(dr._1, "_"), makeString(bC._1, "_"), makeString(aT._1, "_"), toString(dU)], ":")
947+ let dV = makeString_2C([makeString(dr._2, "_"), makeString(bC._2, "_"), makeString(aT._2, "_")], ":")
948+ let dW = makeString_2C([cp[ay], makeString(dr._3, "_"), makeString(bC._3, "_"), makeString(aT._3, "_")], ":")
949+ let dx = invoke(z, "saveWarehouse", [dw, aj], nil)
950+ if ((dx == dx))
946951 then {
947- let dT = invoke(z, "updateBackpack", [an, dS], nil)
948- if ((dT == dT))
952+ let dX = invoke(z, "updateBackpack", [an, dW], nil)
953+ if ((dX == dX))
949954 then {
950- let dw = [StringEntry(aS, dR)]
951- let dU = aT._5
952- let dV = if ((dU > 0))
955+ let dz = [StringEntry(aS, dV)]
956+ let dY = aT._5
957+ let dZ = if ((dY > 0))
953958 then {
954- let dW = fraction(aT._5, K, b)
955- let dX = at(dz)
956- let dY = getString(z, dX)
957- if (isDefined(dY))
958- then (((dw :+ ScriptTransfer(dy, (aT._5 - (3 * dW)), g)) :+ ScriptTransfer(y, dW, g)) :+ ScriptTransfer(addressFromStringValue(value(dY)), dW, g))
959- else ((dw :+ ScriptTransfer(dy, (aT._5 - (3 * dW)), g)) :+ ScriptTransfer(y, dW, g))
959+ let ea = fraction(aT._5, K, b)
960+ let eb = at(dC)
961+ let ec = getString(z, eb)
962+ if (isDefined(ec))
963+ then (((dz :+ ScriptTransfer(dB, (aT._5 - (3 * ea)), g)) :+ ScriptTransfer(y, ea, g)) :+ ScriptTransfer(addressFromStringValue(value(ec)), ea, g))
964+ else ((dz :+ ScriptTransfer(dB, (aT._5 - (3 * ea)), g)) :+ ScriptTransfer(y, ea, g))
960965 }
961- else dw
962- let dZ = aT._6
963- if ((dZ > 0))
966+ else dz
967+ let ed = aT._6
968+ if ((ed > 0))
964969 then if ((size(cj.payments) != 1))
965970 then throw("exactly 1 payment must be attached")
966971 else {
969974 let cz = valueOrErrorMessage(cx.assetId, "WAVES can't be used as payment")
970975 if ((cz != g))
971976 then throw("USDT payments only!")
972- else if ((cy != dZ))
973- then throw(("Payment needed is " + toString(dZ)))
977+ else if ((cy != ed))
978+ then throw(("Payment needed is " + toString(ed)))
974979 else if ((L > cy))
975980 then throw(("Payment should be at least " + toString(L)))
976981 else {
977- let ea = fraction(aT._6, K, b)
978- let dX = at(dD)
979- let dY = getString(z, dX)
980- if (isDefined(dY))
981- then (((dV :+ ScriptTransfer(addressFromStringValue(dD), (aT._6 - (3 * ea)), g)) :+ ScriptTransfer(y, ea, g)) :+ ScriptTransfer(addressFromStringValue(value(dY)), ea, g))
982- else ((dV :+ ScriptTransfer(addressFromStringValue(dD), (aT._6 - (3 * ea)), g)) :+ ScriptTransfer(y, ea, g))
982+ let ee = fraction(aT._6, K, b)
983+ let eb = at(dG)
984+ let ec = getString(z, eb)
985+ if (isDefined(ec))
986+ then (((dZ :+ ScriptTransfer(addressFromStringValue(dG), (aT._6 - (3 * ee)), g)) :+ ScriptTransfer(y, ee, g)) :+ ScriptTransfer(addressFromStringValue(value(ec)), ee, g))
987+ else ((dZ :+ ScriptTransfer(addressFromStringValue(dG), (aT._6 - (3 * ee)), g)) :+ ScriptTransfer(y, ee, g))
983988 }
984989 }
985990 else if ((size(cj.payments) != 0))
986991 then throw("No payments needed")
987- else dV
992+ else dZ
988993 }
989994 else throw("Strict value is not equal to itself.")
990995 }
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 let aK = 3
184184
185185 let aL = 0
186186
187187 let aM = 1
188188
189189 let aN = 2
190190
191191 func aO (aP) = {
192192 let h = aP
193193 if ($isInstanceOf(h, "String"))
194194 then {
195195 let aQ = h
196196 aQ
197197 }
198198 else throw("fail to cast into String")
199199 }
200200
201201
202202 func aR (aS) = {
203203 let aT = split(valueOrElse(getString(aS), "0@0_0@0_0@0_0@0_0@0_0@0:0@0_0@0_0@0_0@0_0@0_0@0:"), ":")
204204 [if ((size(split(aT[aL], "_")) == B))
205205 then aT[aL]
206206 else "0@0_0@0_0@0_0@0_0@0_0@0", if ((size(split(aT[aM], "_")) == B))
207207 then aT[aM]
208208 else "0@0_0@0_0@0_0@0_0@0_0@0", aT[aN]]
209209 }
210210
211211
212212 func aU (aV,aW,aX) = if (aX)
213213 then {
214214 let aY = if ((aV >= 0))
215215 then (((aV + aW) - 1) / aW)
216216 else -((((-(aV) + aW) - 1) / aW))
217217 (aY * d)
218218 }
219219 else aV
220220
221221
222222 func aZ (ba) = {
223223 let bb = split(ba, "_")
224224 ((J * (parseIntValue(bb[1]) + 1)) * parseIntValue(bb[0]))
225225 }
226226
227227
228228 func bc (bd) = {
229229 let be = bd[aF]
230230 if ((be == ""))
231231 then 0
232232 else {
233233 func bf (bg,bh) = {
234234 let x = bg._1
235235 let aW = parseIntValue(split(Q[x], "_")[ad])
236236 $Tuple2((x + 1), (bg._2 + aU(parseIntValue(bh), aW, true)))
237237 }
238238
239239 ( let bi = split_4C(be, "_")
240240 let bj = size(bi)
241241 let bk = $Tuple2(0, 0)
242242 func bl (bm,bn) = if ((bn >= bj))
243243 then bm
244244 else bf(bm, bi[bn])
245245
246246 func bo (bm,bn) = if ((bn >= bj))
247247 then bm
248248 else throw("List size exceeds 50")
249249
250250 bo(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bk, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50))._2
251251 }
252252 }
253253
254254
255255 func bp (bq,ah,aV,br) = {
256256 let bs = af(bq, ah)
257257 let bt = valueOrElse(getInteger(bs), 0)
258258 let bu = if ((bt > C))
259259 then 0
260260 else if (((bt + aV) > C))
261261 then (C - bt)
262262 else aV
263263 let bv = (fraction(bu, ((F * D) - fraction(((100 * bt) + (50 * bu)), D, C)), e) + fraction((aV - bu), D, d))
264264 let bw = (br - (br / 100))
265265 if (((bw * aV) > (bv * d)))
266266 then throw((((((((((("Actual price = " + toString(bv)) + " / ") + toString(aV)) + " < minPrice = ") + toString(br)) + ", (") + bq) + ", ") + M[ah]) + ")"))
267267 else $Tuple2(IntegerEntry(bs, (bt + aV)), bv)
268268 }
269269
270270
271271 func bx (bq,by,aV,bz) = {
272272 let bs = af(bq, by)
273273 let bt = valueOrElse(getInteger(bs), 0)
274274 let bA = if ((bt > C))
275275 then min([aV, (bt - C)])
276276 else 0
277277 let bB = min([bt, (aV - bA)])
278278 let bC = (bB + bA)
279279 let bD = (fraction(bB, ((G * D) - fraction(((100 * bt) - (50 * bB)), D, C)), e) + fraction(bA, (2 * D), d))
280280 let bE = (bz + (bz / 100))
281281 if (((bD * d) > (bE * bC)))
282282 then throw((((((((((("Actual price = " + toString(bD)) + " / ") + toString(bC)) + " > maxPrice = ") + toString(bz)) + ", (") + bq) + ", ") + N[by]) + ")"))
283283 else $Tuple3(IntegerEntry(bs, (bt - bC)), bD, bC)
284284 }
285285
286286
287287 func bF (bG) = {
288288 let aT = split(valueOrElse(getString(z, bG), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
289289 [toString(valueOrElse(parseInt(aT[ay]), 0)), if ((size(split(aT[az], "_")) == B))
290290 then aT[az]
291291 else "0_0_0_0_0_0", if ((size(split(aT[aA], "_")) == B))
292292 then aT[aA]
293293 else "0_0_0_0_0_0", aT[aB]]
294294 }
295295
296296
297297 func bH () = if (valueOrElse(getBoolean(z, ap()), false))
298298 then throw("Contracts are under maintenance")
299299 else unit
300300
301301
302302 func bI (bg,bh) = {
303303 let bJ = bg._1
304- let bK = bg._7
304+ let bK = bg._8
305305 let aW = if (bK)
306306 then parseIntValue(split(Q[bJ], "_")[ad])
307307 else 0
308308 let bL = split(bh, "@")
309309 if ((size(bL) != 2))
310310 then throw("Incorrect order format, should be amount@price")
311311 else {
312312 let bM = parseIntValue(bL[0])
313313 let bN = parseIntValue(bL[1])
314314 let bO = fraction(bM, bN, d)
315315 let bP = aU(bM, aW, bK)
316- let bQ = if ((size(bg._5) > bJ))
317- then parseIntValue(bg._5[bJ])
316+ let bQ = if ((size(bg._6) > bJ))
317+ then parseIntValue(bg._6[bJ])
318318 else 0
319- let bR = split(if ((size(bg._6) > bJ))
320- then bg._6[bJ]
319+ let bR = split(if ((size(bg._7) > bJ))
320+ then bg._7[bJ]
321321 else "0@0", "@")
322322 let bS = parseIntValue(bR[0])
323323 let bT = parseIntValue(bR[1])
324324 if (if ((0 > bT))
325325 then true
326326 else (0 > bN))
327327 then throw("Price can't be negative")
328328 else {
329329 let bU = fraction(bS, bT, d)
330330 let bV = aU(bS, aW, bK)
331331 if ((bM == 0))
332332 then if ((bS > 0))
333- then $Tuple7((bJ + 1), (bg._2 :+ toString(bQ)), (bg._3 - bV), (bg._4 - bU), bg._5, bg._6, bK)
334- else $Tuple7((bJ + 1), (bg._2 :+ toString((bQ - bS))), (bg._3 + bV), bg._4, bg._5, bg._6, bK)
333+ then $Tuple8((bJ + 1), (bg._2 :+ toString(bQ)), bg._3, bg._4, (bg._5 - bU), bg._6, bg._7, bK)
334+ else $Tuple8((bJ + 1), (bg._2 :+ toString((bQ - bS))), bg._3, bg._4, bg._5, bg._6, bg._7, bK)
335335 else if ((bM > 0))
336336 then if ((0 > bS))
337- then $Tuple7((bJ + 1), (bg._2 :+ toString((bQ - bS))), ((bg._3 + bP) + bV), (bg._4 + bO), bg._5, bg._6, bK)
338- else $Tuple7((bJ + 1), (bg._2 :+ toString(bQ)), ((bg._3 + bP) - bV), ((bg._4 + bO) - bU), bg._5, bg._6, bK)
337+ then $Tuple8((bJ + 1), (bg._2 :+ toString((bQ - bS))), (bg._3 + bP), bg._4, (bg._5 + bO), bg._6, bg._7, bK)
338+ else $Tuple8((bJ + 1), (bg._2 :+ toString(bQ)), (bg._3 + bP), bg._4, ((bg._5 + bO) - bU), bg._6, bg._7, bK)
339339 else if ((0 > bS))
340340 then {
341341 let bW = (bS - bM)
342342 if ((0 > (bQ - bW)))
343343 then throw((((("Attempt to take " + toString(bW)) + " from warehouse, but only ") + toString(bQ)) + " available"))
344- else $Tuple7((bJ + 1), (bg._2 :+ toString((bQ - bW))), ((bg._3 + bV) - bP), bg._4, bg._5, bg._6, bK)
344+ else $Tuple8((bJ + 1), (bg._2 :+ toString((bQ - bW))), bg._3, (bg._4 - bP), bg._5, bg._6, bg._7, bK)
345345 }
346346 else if ((0 > (bQ + bM)))
347347 then throw((((("Attempt to take " + toString(-(bM))) + " from warehouse, but only ") + toString(bQ)) + " available"))
348- else $Tuple7((bJ + 1), (bg._2 :+ toString((bQ + bM))), ((bg._3 - bP) - bV), (bg._4 - bU), bg._5, bg._6, bK)
348+ else $Tuple8((bJ + 1), (bg._2 :+ toString((bQ + bM))), bg._3, (bg._4 - bP), (bg._5 - bU), bg._6, bg._7, bK)
349349 }
350350 }
351351 }
352352
353353
354354 func bX (bg,bY) = {
355355 let bJ = bg._7
356356 let bK = bg._12
357357 let aW = if (bK)
358358 then parseIntValue(split(Q[bJ], "_")[ad])
359359 else 0
360360 let bZ = split(bY, "@")
361361 if ((size(bZ) != 2))
362362 then throw("Incorrect order format, should be amount@price")
363363 else {
364364 let ca = parseIntValue(bZ[0])
365365 let cb = parseIntValue(bZ[1])
366366 if ((0 > cb))
367367 then throw("Price can't be negative")
368368 else {
369369 let cc = fraction(ca, cb, d)
370370 let cd = parseIntValue(bg._8[bJ])
371371 let bQ = parseIntValue(bg._9[bJ])
372372 let ce = split(bg._10[bJ], "@")
373373 let cf = parseIntValue(ce[0])
374374 let cg = parseIntValue(ce[1])
375375 if (if ((ca != 0))
376376 then (cb != cg)
377377 else false)
378378 then throw(((((("Prices of " + bg._11[bJ]) + " don't match! WH price=") + toString(cg)) + ", your price=") + toString(cb)))
379379 else {
380380 let ch = fraction(cf, cg, d)
381381 let ci = aU(ca, aW, bK)
382382 if ((ca == 0))
383383 then $Tuple11((bg._1 :+ toString(bQ)), (bg._2 :+ bg._10[bJ]), (bg._3 :+ toString(cd)), bg._4, bg._5, bg._6, (bg._7 + 1), bg._8, bg._9, bg._10, bg._11)
384384 else if ((ca > 0))
385385 then if ((0 > cf))
386386 then if ((ca > -(cf)))
387387 then throw(((((("Attempt to buy " + toString(ca)) + " of ") + bg._11[bJ]) + ", but warehouse only sells ") + toString(-(cf))))
388388 else $Tuple11((bg._1 :+ toString(bQ)), (bg._2 :+ ((toString((cf + ca)) + "@") + toString(cg))), (bg._3 :+ toString((cd + ca))), (bg._4 + ci), bg._5, (bg._6 + cc), (bg._7 + 1), bg._8, bg._9, bg._10, bg._11)
389389 else throw((("Attempt to buy " + bg._11[bJ]) + " while warehouse doesn't sell it"))
390390 else if ((cf > 0))
391391 then if ((-(ca) > cf))
392392 then throw(((((("Attempt to sell " + toString(-(ca))) + " of ") + bg._11[bJ]) + ", but warehouse only buys ") + toString(cf)))
393393 else if ((-(ca) > cd))
394394 then throw(((((("Attempt to sell " + toString(-(ca))) + ", but you only have ") + toString(cd)) + " of ") + bg._11[bJ]))
395395 else $Tuple11((bg._1 :+ toString((bQ - ca))), (bg._2 :+ ((toString((cf + ca)) + "@") + toString(cg))), (bg._3 :+ toString((cd + ca))), (bg._4 - ci), (bg._5 - cc), bg._6, (bg._7 + 1), bg._8, bg._9, bg._10, bg._11)
396396 else throw((("Attempt to sell " + bg._11[bJ]) + " while warehouse doesn't buy it"))
397397 }
398398 }
399399 }
400400 }
401401
402402
403403 @Callable(cj)
404404 func constructorV1 (ck) = if ((cj.caller != this))
405405 then throw("Permission denied")
406406 else [StringEntry(s(), ck)]
407407
408408
409409
410410 @Callable(cj)
411411 func sellResources (cl,cm) = {
412412 let cn = bH()
413413 if ((cn == cn))
414414 then {
415415 let an = valueOrErrorMessage(getString(z, ak(toString(cj.caller))), "You don't have a duck staked")
416416 if ((size(cj.payments) != 0))
417417 then throw("sellResources doesn't require any payments")
418418 else {
419419 let co = split(valueOrElse(getString(z, ao(an)), A), "_")
420420 if ((co[aw] != "F"))
421421 then throw(("Duck location type should be Factory, but is " + co[aw]))
422422 else {
423423 let bq = co[ax]
424424 let cp = bF(am(an))
425425 let cq = split(cp[az], "_")
426426 func cr (bg,bJ) = if ((cl[bJ] > parseIntValue(cq[bJ])))
427427 then throw(((((("You have " + cq[bJ]) + " of ") + M[bJ]) + ", but tried to sell ") + toString(cl[bJ])))
428428 else if ((0 > cl[bJ]))
429429 then throw(((("You tried to sell negative amount of " + M[bJ]) + ": ") + toString(cl[bJ])))
430430 else if ((cl[bJ] > 0))
431431 then {
432432 let cs = bp(bq, bJ, cl[bJ], cm[bJ])
433433 $Tuple3((bg._1 :+ cs._1), (bg._2 :+ toString((parseIntValue(cq[bJ]) - cl[bJ]))), (bg._3 + cs._2))
434434 }
435435 else $Tuple3(bg._1, (bg._2 :+ cq[bJ]), bg._3)
436436
437437 let ct = {
438438 let bi = [0, 1, 2, 3, 4, 5]
439439 let bj = size(bi)
440440 let bk = $Tuple3(nil, nil, 0)
441441 func bl (bm,bn) = if ((bn >= bj))
442442 then bm
443443 else cr(bm, bi[bn])
444444
445445 func bo (bm,bn) = if ((bn >= bj))
446446 then bm
447447 else throw("List size exceeds 6")
448448
449449 bo(bl(bl(bl(bl(bl(bl(bk, 0), 1), 2), 3), 4), 5), 6)
450450 }
451451 let cu = makeString([cp[ay], makeString(ct._2, "_"), cp[aA], cp[aB]], ":")
452452 let cv = aO(invoke(z, "updateBackpack", [an, cu], nil))
453453 $Tuple2((ct._1 :+ ScriptTransfer(cj.caller, ct._3, g)), cv)
454454 }
455455 }
456456 }
457457 else throw("Strict value is not equal to itself.")
458458 }
459459
460460
461461
462462 @Callable(cj)
463463 func buyMaterials (cl,cw) = {
464464 let cn = bH()
465465 if ((cn == cn))
466466 then {
467467 let an = valueOrErrorMessage(getString(z, ak(toString(cj.caller))), "You don't have a duck staked")
468468 if ((size(cj.payments) != 1))
469469 then throw("exactly 1 payment must be attached")
470470 else {
471471 let cx = cj.payments[0]
472472 let cy = cx.amount
473473 let cz = valueOrErrorMessage(cx.assetId, "WAVES can't be used as payment")
474474 if ((cz != g))
475475 then throw("USDT payments only!")
476476 else {
477477 let co = split(valueOrElse(getString(z, ao(an)), A), "_")
478478 if ((co[aw] != "F"))
479479 then throw(("Duck location type should be Factory, but is " + co[aw]))
480480 else {
481481 let bq = co[ax]
482482 let cp = bF(am(an))
483483 let cA = split(cp[aA], "_")
484484 func cB (bg,bJ) = if ((0 > cl[bJ]))
485485 then throw(((("You tried to buy negative amount of " + N[bJ]) + ": ") + toString(cl[bJ])))
486486 else if ((cl[bJ] > 0))
487487 then {
488488 let cs = bx(bq, bJ, cl[bJ], cw[bJ])
489489 $Tuple3((bg._1 :+ cs._1), (bg._2 :+ toString((parseIntValue(cA[bJ]) + cs._3))), (bg._3 + cs._2))
490490 }
491491 else $Tuple3(bg._1, (bg._2 :+ cA[bJ]), bg._3)
492492
493493 let ct = {
494494 let bi = [0, 1, 2, 3, 4, 5]
495495 let bj = size(bi)
496496 let bk = $Tuple3(nil, nil, 0)
497497 func bl (bm,bn) = if ((bn >= bj))
498498 then bm
499499 else cB(bm, bi[bn])
500500
501501 func bo (bm,bn) = if ((bn >= bj))
502502 then bm
503503 else throw("List size exceeds 6")
504504
505505 bo(bl(bl(bl(bl(bl(bl(bk, 0), 1), 2), 3), 4), 5), 6)
506506 }
507507 if ((ct._3 > cy))
508508 then throw(((("Insufficient payment! Attached=" + toString(cy)) + ", required=") + toString(ct._3)))
509509 else {
510510 let cu = makeString([cp[ay], cp[az], makeString(ct._2, "_"), cp[aB]], ":")
511511 let cv = aO(invoke(z, "updateBackpack", [an, cu], nil))
512512 let u = if (((cy - ct._3) > 0))
513513 then [ScriptTransfer(cj.caller, (cy - ct._3), g)]
514514 else nil
515515 let cC = (ct._3 / 100)
516516 $Tuple2(((ct._1 ++ u) :+ ScriptTransfer(y, cC, g)), cv)
517517 }
518518 }
519519 }
520520 }
521521 }
522522 else throw("Strict value is not equal to itself.")
523523 }
524524
525525
526526
527527 @Callable(cj)
528528 func exchangeResources (cl) = {
529529 let cn = bH()
530530 if ((cn == cn))
531531 then {
532532 let an = valueOrErrorMessage(getString(z, ak(toString(cj.caller))), "You don't have a duck staked")
533533 if ((size(cj.payments) != 1))
534534 then throw("exactly 1 payment must be attached")
535535 else {
536536 let cx = cj.payments[0]
537537 let cy = cx.amount
538538 let cz = valueOrErrorMessage(cx.assetId, "WAVES can't be used as payment")
539539 if ((cz != g))
540540 then throw("USDT payments only!")
541541 else {
542542 let co = split(valueOrElse(getString(z, ao(an)), A), "_")
543543 if ((co[aw] != "F"))
544544 then throw(("Duck location type should be Factory, but is " + co[aw]))
545545 else {
546546 let bq = co[ax]
547547 let cp = bF(am(an))
548548 let cq = split(cp[az], "_")
549549 let cA = split(cp[aA], "_")
550550 func cD (bg,bJ) = {
551551 let bs = af(bq, bJ)
552552 let bt = valueOrElse(getInteger(bs), 0)
553553 let cE = cl[bJ]
554554 if ((cE > parseIntValue(cq[bJ])))
555555 then throw(((((("You have " + cq[bJ]) + " of ") + M[bJ]) + ", but tried to exchange ") + toString(cE)))
556556 else if ((0 > cE))
557557 then throw(((("You tried to exchange negative amount of " + M[bJ]) + ": ") + toString(cE)))
558558 else if ((cE > 0))
559559 then $Tuple4((bg._1 :+ toString((parseIntValue(cq[bJ]) - cE))), (bg._2 :+ toString((parseIntValue(cA[bJ]) + cE))), (bg._3 + fraction(cE, D, d)), (bg._4 :+ IntegerEntry(bs, bt)))
560560 else $Tuple4((bg._1 :+ cq[bJ]), (bg._2 :+ cA[bJ]), bg._3, bg._4)
561561 }
562562
563563 let ct = {
564564 let bi = [0, 1, 2, 3, 4, 5]
565565 let bj = size(bi)
566566 let bk = $Tuple4(nil, nil, 0, nil)
567567 func bl (bm,bn) = if ((bn >= bj))
568568 then bm
569569 else cD(bm, bi[bn])
570570
571571 func bo (bm,bn) = if ((bn >= bj))
572572 then bm
573573 else throw("List size exceeds 6")
574574
575575 bo(bl(bl(bl(bl(bl(bl(bk, 0), 1), 2), 3), 4), 5), 6)
576576 }
577577 if ((ct._3 > cy))
578578 then throw(((("Insufficient payment! Attached=" + toString(cy)) + ", required=") + toString(ct._3)))
579579 else {
580580 let cu = makeString([cp[ay], makeString(ct._1, "_"), makeString(ct._2, "_"), cp[aB]], ":")
581581 let cv = aO(invoke(z, "updateBackpack", [an, cu], nil))
582582 let u = if (((cy - ct._3) > 0))
583583 then [ScriptTransfer(cj.caller, (cy - ct._3), g)]
584584 else nil
585585 let cC = (ct._3 / 100)
586586 $Tuple2(((u ++ ct._4) :+ ScriptTransfer(y, cC, g)), cv)
587587 }
588588 }
589589 }
590590 }
591591 }
592592 else throw("Strict value is not equal to itself.")
593593 }
594594
595595
596596
597597 @Callable(cj)
598598 func craftGoods (cF,cG) = {
599599 let cn = bH()
600600 if ((cn == cn))
601601 then if ((size(cj.payments) != 1))
602602 then throw("exactly 1 payment must be attached")
603603 else {
604604 let cx = cj.payments[0]
605605 let cy = cx.amount
606606 let cz = valueOrErrorMessage(cx.assetId, "WAVES can't be used as payment")
607607 if ((cz != g))
608608 then throw("USDT payments only!")
609609 else if ((cy != b))
610610 then throw("exactly 1 USDT must be attached as payment")
611611 else if ((0 >= cG))
612612 then throw("Quantity should be positive")
613613 else {
614614 let an = valueOrErrorMessage(getString(z, ak(toString(cj.caller))), "You don't have a duck staked")
615615 let co = split(valueOrElse(getString(z, ao(an)), A), "_")
616616 if ((co[aw] != "M"))
617617 then throw(("Duck location type should be Manufactory, but is " + co[aw]))
618618 else {
619619 let cH = co[av]
620620 let cp = bF(am(an))
621621 let cA = split(cp[aA], "_")
622622 if (if ((0 > cF))
623623 then true
624624 else (cF >= size(Q)))
625625 then throw(("Unknown product idx=" + toString(cF)))
626626 else {
627627 let cI = split(Q[cF], "_")
628628 if ((size(cI) != (B + 3)))
629629 then throw(("Fatal: unknown recipe: " + Q[cF]))
630630 else {
631631 let cJ = parseIntValue(cI[ae])
632632 if ((P[cJ] != cH))
633633 then throw(((("This product is available in " + P[cJ]) + ", but you are in ") + cH))
634634 else {
635635 let cK = if ((cp[aB] == ""))
636636 then nil
637637 else split(cp[aB], "_")
638638 func cL (bg,cM) = {
639639 let cN = bg._2
640640 let cO = if ((size(cK) > cN))
641641 then cK[cN]
642642 else "0"
643643 let cP = parseIntValue(cO)
644644 let aV = (cG * parseIntValue(cI[ad]))
645645 let cQ = if ((cN == cF))
646646 then toString((cP + aV))
647647 else cO
648648 $Tuple2((bg._1 :+ cQ), (cN + 1))
649649 }
650650
651651 let cR = ( let bi = Q
652652 let bj = size(bi)
653653 let bk = $Tuple2(nil, 0)
654654 func bl (bm,bn) = if ((bn >= bj))
655655 then bm
656656 else cL(bm, bi[bn])
657657
658658 func bo (bm,bn) = if ((bn >= bj))
659659 then bm
660660 else throw("List size exceeds 50")
661661
662662 bo(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bk, 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
663663 func cS (bg,bJ) = {
664664 let cT = ((parseIntValue(cI[bJ]) * c) * cG)
665665 let cU = parseIntValue(cA[bJ])
666666 if ((cT > cU))
667667 then throw(((((((("You have " + cA[bJ]) + " of ") + N[bJ]) + ", but recipe requires ") + toString(cT)) + " for quantity ") + toString(cG)))
668668 else if ((cT > 0))
669669 then (bg :+ toString((cU - cT)))
670670 else (bg :+ cA[bJ])
671671 }
672672
673673 let ct = {
674674 let bi = [0, 1, 2, 3, 4, 5]
675675 let bj = size(bi)
676676 let bk = nil
677677 func cV (bm,bn) = if ((bn >= bj))
678678 then bm
679679 else cS(bm, bi[bn])
680680
681681 func cW (bm,bn) = if ((bn >= bj))
682682 then bm
683683 else throw("List size exceeds 6")
684684
685685 cW(cV(cV(cV(cV(cV(cV(bk, 0), 1), 2), 3), 4), 5), 6)
686686 }
687687 let cu = makeString([cp[ay], cp[az], makeString(ct, "_"), makeString(cR, "_")], ":")
688688 let cv = aO(invoke(z, "updateBackpack", [an, cu], nil))
689689 $Tuple2(nil, cv)
690690 }
691691 }
692692 }
693693 }
694694 }
695695 }
696696 else throw("Strict value is not equal to itself.")
697697 }
698698
699699
700700
701701 @Callable(cj)
702702 func setWarehouseOrder (cX,aj) = {
703703 let cY = cj.originCaller
704704 let au = toString(cY)
705705 let cv = if ((cY != y))
706706 then bH()
707707 else false
708708 let cZ = value(assetInfo(fromBase58String(aj)))
709709 if (!(isDefined(getInteger(z, as(aj)))))
710710 then throw((("NFT " + cZ.name) + " is not staked"))
711711 else {
712712 let da = valueOrErrorMessage(getString(z, aq(aj)), (("NFT " + cZ.name) + " is orphaned"))
713713 if (if ((cY != y))
714714 then (da != au)
715715 else false)
716716 then throw((H + " is not yours"))
717717 else {
718718 let db = split_4C(cX, ":")
719719 if ((size(db) != 3))
720720 then throw("cargoListStr should contain exactly 2 ':' separators")
721721 else {
722722 let dc = split(db[0], "_")
723723 let dd = split(db[1], "_")
724724 let de = if ((db[2] == ""))
725725 then nil
726726 else split(db[2], "_")
727727 if ((size(dc) != B))
728728 then throw("All 6 resources should be passed")
729729 else if ((size(dd) != B))
730730 then throw("All 6 materials should be passed")
731731 else {
732732 let df = aO(invoke(z, "getWarehouseREADONLY", [aj], nil))
733733 let bd = split_4C(df, ":")
734734 let dg = split(bd[aD], "_")
735735 let dh = split(bd[aE], "_")
736736 let di = if ((bd[aF] == ""))
737737 then nil
738738 else split(bd[aF], "_")
739- let dj = aZ(bd[aC])
739+ let dj = split(bd[aG], "_")
740+ let dk = parseIntValue(dj[aI])
741+ let dl = parseIntValue(dj[aJ])
740742 let aS = ai(aj)
741- let dk = aR(aS)
742- let dl = split(dk[aL], "_")
743- let dm = split(dk[aM], "_")
744- let dn = if ((dk[aN] == ""))
743+ let dm = aR(aS)
744+ let dn = split(dm[aL], "_")
745+ let do = split(dm[aM], "_")
746+ let dp = if ((dm[aN] == ""))
745747 then nil
746- else split(dk[aN], "_")
747- let do = 0
748- let dp = {
748+ else split(dm[aN], "_")
749+ let dq = 0
750+ let dr = {
749751 let bi = dc
750752 let bj = size(bi)
751- let bk = $Tuple7(0, nil, 0, 0, dg, dl, false)
753+ let bk = $Tuple8(0, nil, 0, 0, 0, dg, dn, false)
752754 func bl (bm,bn) = if ((bn >= bj))
753755 then bm
754756 else bI(bm, bi[bn])
755757
756758 func bo (bm,bn) = if ((bn >= bj))
757759 then bm
758760 else throw("List size exceeds 6")
759761
760762 bo(bl(bl(bl(bl(bl(bl(bk, 0), 1), 2), 3), 4), 5), 6)
761763 }
762764 let bC = {
763765 let bi = dd
764766 let bj = size(bi)
765- let bk = $Tuple7(0, nil, dp._3, dp._4, dh, dm, false)
767+ let bk = $Tuple8(0, nil, dr._3, dr._4, dr._5, dh, do, false)
766768 func cV (bm,bn) = if ((bn >= bj))
767769 then bm
768770 else bI(bm, bi[bn])
769771
770772 func cW (bm,bn) = if ((bn >= bj))
771773 then bm
772774 else throw("List size exceeds 6")
773775
774776 cW(cV(cV(cV(cV(cV(cV(bk, 0), 1), 2), 3), 4), 5), 6)
775777 }
776778 let aT = if ((size(de) != 0))
777779 then {
778780 let bi = de
779781 let bj = size(bi)
780- let bk = $Tuple7(0, nil, bC._3, bC._4, di, dn, true)
781- func dq (bm,bn) = if ((bn >= bj))
782+ let bk = $Tuple8(0, nil, bC._3, bC._4, bC._5, di, dp, true)
783+ func ds (bm,bn) = if ((bn >= bj))
782784 then bm
783785 else bI(bm, bi[bn])
784786
785- func dr (bm,bn) = if ((bn >= bj))
787+ func dt (bm,bn) = if ((bn >= bj))
786788 then bm
787789 else throw("List size exceeds 50")
788790
789- dr(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(bk, 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)
791+ dt(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(bk, 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)
790792 }
791- else $Tuple7(0, di, bC._3, bC._4, di, dn, true)
792- let ds = aT._3
793- if ((ds > dj))
794- then throw((((("Attempt to reserve " + toString(ds)) + " space, but only ") + toString(dj)) + " warehouse space left"))
795- else {
796- let dt = makeString_2C([bd[aC], makeString(dp._2, "_"), makeString(bC._2, "_"), makeString(aT._2, "_"), toString(ds)], ":")
797- let du = invoke(z, "saveWarehouse", [dt, aj], nil)
798- if ((du == du))
799- then {
800- let dv = aT._4
801- let dw = if ((dv > 0))
802- then if ((size(cj.payments) != 1))
803- then throw("exactly 1 payment must be attached")
804- else {
805- let cx = cj.payments[0]
806- let cy = cx.amount
807- let cz = valueOrErrorMessage(cx.assetId, "WAVES can't be used as payment")
808- if ((cz != g))
809- then throw("USDT payments only!")
810- else if ((cy != dv))
811- then throw(("Payment needed is " + toString(dv)))
812- else [StringEntry(aS, cX)]
813- }
814- else if ((dv == 0))
815- then if ((size(cj.payments) != 0))
816- then throw("No payments needed")
817- else [StringEntry(aS, cX)]
818- else if ((size(cj.payments) != 0))
819- then throw("No payments needed")
820- else [ScriptTransfer(addressFromStringValue(da), -(dv), g), StringEntry(aS, cX)]
821- $Tuple2(dw, cv)
822- }
823- else throw("Strict value is not equal to itself.")
824- }
793+ else $Tuple8(0, di, bC._3, bC._4, bC._5, di, dp, true)
794+ let du = aT._3
795+ let dv = aT._4
796+ if ((du > dl))
797+ then throw((((("Attempt to reserve " + toString(du)) + " space for buy orders, but only ") + toString(dl)) + " warehouse empty space left"))
798+ else if ((dv > dk))
799+ then throw((((("Attempt to lock " + toString(dv)) + " space for sell orders, but only ") + toString(dk)) + " warehouse space occupied"))
800+ else {
801+ let dw = makeString_2C([bd[aC], makeString(dr._2, "_"), makeString(bC._2, "_"), makeString(aT._2, "_"), toString((du + dv))], ":")
802+ let dx = invoke(z, "saveWarehouse", [dw, aj], nil)
803+ if ((dx == dx))
804+ then {
805+ let dy = aT._5
806+ let dz = if ((dy > 0))
807+ then if ((size(cj.payments) != 1))
808+ then throw("exactly 1 payment must be attached")
809+ else {
810+ let cx = cj.payments[0]
811+ let cy = cx.amount
812+ let cz = valueOrErrorMessage(cx.assetId, "WAVES can't be used as payment")
813+ if ((cz != g))
814+ then throw("USDT payments only!")
815+ else if ((cy != dy))
816+ then throw(("Payment needed is " + toString(dy)))
817+ else [StringEntry(aS, cX)]
818+ }
819+ else if ((dy == 0))
820+ then if ((size(cj.payments) != 0))
821+ then throw("No payments needed")
822+ else [StringEntry(aS, cX)]
823+ else if ((size(cj.payments) != 0))
824+ then throw("No payments needed")
825+ else [ScriptTransfer(addressFromStringValue(da), -(dy), g), StringEntry(aS, cX)]
826+ $Tuple2(dz, cv)
827+ }
828+ else throw("Strict value is not equal to itself.")
829+ }
825830 }
826831 }
827832 }
828833 }
829834 }
830835
831836
832837
833838 @Callable(cj)
834-func acceptWarehouseOrder (dx,aj,an) = {
839+func acceptWarehouseOrder (dA,aj,an) = {
835840 let cn = bH()
836841 if ((cn == cn))
837842 then {
838- let dy = cj.originCaller
839- let dz = toString(dy)
840- let dA = valueOrErrorMessage(getString(z, ak(dz)), "You don't have a duck staked")
841- let co = valueOrElse(getString(z, ao(dA)), A)
842- let dB = split(value(co), "_")
843- if ((dB[aw] != "L"))
844- then throw((("Duck location type is " + dB[aw]) + ", but should be L"))
845- else if ((dA != an))
846- then throw(((("Your staked duck is " + dA) + ", but passed ") + an))
843+ let dB = cj.originCaller
844+ let dC = toString(dB)
845+ let dD = valueOrErrorMessage(getString(z, ak(dC)), "You don't have a duck staked")
846+ let co = valueOrElse(getString(z, ao(dD)), A)
847+ let dE = split(value(co), "_")
848+ if ((dE[aw] != "L"))
849+ then throw((("Duck location type is " + dE[aw]) + ", but should be L"))
850+ else if ((dD != an))
851+ then throw(((("Your staked duck is " + dD) + ", but passed ") + an))
847852 else {
848- let dC = value(assetInfo(fromBase58String(aj)))
853+ let dF = value(assetInfo(fromBase58String(aj)))
849854 if (!(isDefined(getInteger(z, as(aj)))))
850- then throw((("NFT " + dC.name) + " is not staked"))
855+ then throw((("NFT " + dF.name) + " is not staked"))
851856 else {
852- let dD = valueOrErrorMessage(getString(z, aq(aj)), (("NFT " + dC.name) + " is orphaned"))
853- if ((dD == dz))
857+ let dG = valueOrErrorMessage(getString(z, aq(aj)), (("NFT " + dF.name) + " is orphaned"))
858+ if ((dG == dC))
854859 then throw("You cannot trade with yourself")
855860 else {
856- let dE = split_4C(dx, ":")
857- if ((size(dE) != 3))
861+ let dH = split_4C(dA, ":")
862+ if ((size(dH) != 3))
858863 then throw("bpOrderStr should contain exactly 2 ':' separators")
859864 else {
860- let dF = split(dE[0], "_")
861- let dG = split(dE[1], "_")
862- let dH = if ((dE[2] == ""))
865+ let dI = split(dH[0], "_")
866+ let dJ = split(dH[1], "_")
867+ let dK = if ((dH[2] == ""))
863868 then nil
864- else split(dE[2], "_")
865- if ((size(dF) != B))
869+ else split(dH[2], "_")
870+ if ((size(dI) != B))
866871 then throw("All 6 resources should be passed")
867- else if ((size(dG) != B))
872+ else if ((size(dJ) != B))
868873 then throw("All 6 materials should be passed")
869874 else {
870875 let df = aO(invoke(z, "getWarehouseREADONLY", [aj], nil))
871876 let bd = split_4C(df, ":")
872877 let dg = split(bd[aD], "_")
873878 let dh = split(bd[aE], "_")
874879 let di = if ((bd[aF] == ""))
875880 then nil
876881 else split(bd[aF], "_")
877- let dI = parseIntValue(split(bd[aG], "_")[aH])
882+ let dL = parseIntValue(split(bd[aG], "_")[aH])
878883 let bG = am(an)
879884 let cp = bF(bG)
880- let dJ = split(cp[az], "_")
881- let dK = split(cp[aA], "_")
882- let dL = if ((cp[aB] == ""))
885+ let dM = split(cp[az], "_")
886+ let dN = split(cp[aA], "_")
887+ let dO = if ((cp[aB] == ""))
883888 then nil
884889 else split(cp[aB], "_")
885890 let aS = ai(aj)
886- let dM = aR(aS)
887- let dN = split(dM[aL], "_")
888- let dO = split(dM[aM], "_")
889- let dP = if ((dM[aN] == ""))
891+ let dP = aR(aS)
892+ let dQ = split(dP[aL], "_")
893+ let dR = split(dP[aM], "_")
894+ let dS = if ((dP[aN] == ""))
890895 then nil
891- else split(dM[aN], "_")
892- let do = 0
893- let dp = {
894- let bi = dF
896+ else split(dP[aN], "_")
897+ let dq = 0
898+ let dr = {
899+ let bi = dI
895900 let bj = size(bi)
896- let bk = $Tuple12(nil, nil, nil, 0, 0, 0, 0, dJ, dg, dN, M, false)
901+ let bk = $Tuple12(nil, nil, nil, 0, 0, 0, 0, dM, dg, dQ, M, false)
897902 func bl (bm,bn) = if ((bn >= bj))
898903 then bm
899904 else bX(bm, bi[bn])
900905
901906 func bo (bm,bn) = if ((bn >= bj))
902907 then bm
903908 else throw("List size exceeds 6")
904909
905910 bo(bl(bl(bl(bl(bl(bl(bk, 0), 1), 2), 3), 4), 5), 6)
906911 }
907912 let bC = {
908- let bi = dG
913+ let bi = dJ
909914 let bj = size(bi)
910- let bk = $Tuple12(nil, nil, nil, dp._4, dp._5, dp._6, 0, dK, dh, dO, N, false)
915+ let bk = $Tuple12(nil, nil, nil, dr._4, dr._5, dr._6, 0, dN, dh, dR, N, false)
911916 func cV (bm,bn) = if ((bn >= bj))
912917 then bm
913918 else bX(bm, bi[bn])
914919
915920 func cW (bm,bn) = if ((bn >= bj))
916921 then bm
917922 else throw("List size exceeds 6")
918923
919924 cW(cV(cV(cV(cV(cV(cV(bk, 0), 1), 2), 3), 4), 5), 6)
920925 }
921- let aT = if ((size(dH) != 0))
926+ let aT = if ((size(dK) != 0))
922927 then {
923- let bi = dH
928+ let bi = dK
924929 let bj = size(bi)
925- let bk = $Tuple12(nil, nil, nil, bC._4, bC._5, bC._6, 0, dL, di, dP, O, true)
926- func dq (bm,bn) = if ((bn >= bj))
930+ let bk = $Tuple12(nil, nil, nil, bC._4, bC._5, bC._6, 0, dO, di, dS, O, true)
931+ func ds (bm,bn) = if ((bn >= bj))
927932 then bm
928933 else bX(bm, bi[bn])
929934
930- func dr (bm,bn) = if ((bn >= bj))
935+ func dt (bm,bn) = if ((bn >= bj))
931936 then bm
932937 else throw("List size exceeds 50")
933938
934- dr(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(dq(bk, 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)
939+ dt(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(ds(bk, 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)
935940 }
936- else $Tuple12(di, dP, dL, bC._4, bC._5, bC._6, 0, dL, di, dP, O, true)
937- let ds = aT._4
938- let dQ = if ((0 > (dI - ds)))
941+ else $Tuple12(di, dS, dO, bC._4, bC._5, bC._6, 0, dO, di, dS, O, true)
942+ let dT = aT._4
943+ let dU = if ((0 > (dL - dT)))
939944 then 0
940- else (dI - ds)
941- let dt = makeString_2C([bd[aC], makeString(dp._1, "_"), makeString(bC._1, "_"), makeString(aT._1, "_"), toString(dQ)], ":")
942- let dR = makeString_2C([makeString(dp._2, "_"), makeString(bC._2, "_"), makeString(aT._2, "_")], ":")
943- let dS = makeString_2C([cp[ay], makeString(dp._3, "_"), makeString(bC._3, "_"), makeString(aT._3, "_")], ":")
944- let du = invoke(z, "saveWarehouse", [dt, aj], nil)
945- if ((du == du))
945+ else (dL - dT)
946+ let dw = makeString_2C([bd[aC], makeString(dr._1, "_"), makeString(bC._1, "_"), makeString(aT._1, "_"), toString(dU)], ":")
947+ let dV = makeString_2C([makeString(dr._2, "_"), makeString(bC._2, "_"), makeString(aT._2, "_")], ":")
948+ let dW = makeString_2C([cp[ay], makeString(dr._3, "_"), makeString(bC._3, "_"), makeString(aT._3, "_")], ":")
949+ let dx = invoke(z, "saveWarehouse", [dw, aj], nil)
950+ if ((dx == dx))
946951 then {
947- let dT = invoke(z, "updateBackpack", [an, dS], nil)
948- if ((dT == dT))
952+ let dX = invoke(z, "updateBackpack", [an, dW], nil)
953+ if ((dX == dX))
949954 then {
950- let dw = [StringEntry(aS, dR)]
951- let dU = aT._5
952- let dV = if ((dU > 0))
955+ let dz = [StringEntry(aS, dV)]
956+ let dY = aT._5
957+ let dZ = if ((dY > 0))
953958 then {
954- let dW = fraction(aT._5, K, b)
955- let dX = at(dz)
956- let dY = getString(z, dX)
957- if (isDefined(dY))
958- then (((dw :+ ScriptTransfer(dy, (aT._5 - (3 * dW)), g)) :+ ScriptTransfer(y, dW, g)) :+ ScriptTransfer(addressFromStringValue(value(dY)), dW, g))
959- else ((dw :+ ScriptTransfer(dy, (aT._5 - (3 * dW)), g)) :+ ScriptTransfer(y, dW, g))
959+ let ea = fraction(aT._5, K, b)
960+ let eb = at(dC)
961+ let ec = getString(z, eb)
962+ if (isDefined(ec))
963+ then (((dz :+ ScriptTransfer(dB, (aT._5 - (3 * ea)), g)) :+ ScriptTransfer(y, ea, g)) :+ ScriptTransfer(addressFromStringValue(value(ec)), ea, g))
964+ else ((dz :+ ScriptTransfer(dB, (aT._5 - (3 * ea)), g)) :+ ScriptTransfer(y, ea, g))
960965 }
961- else dw
962- let dZ = aT._6
963- if ((dZ > 0))
966+ else dz
967+ let ed = aT._6
968+ if ((ed > 0))
964969 then if ((size(cj.payments) != 1))
965970 then throw("exactly 1 payment must be attached")
966971 else {
967972 let cx = cj.payments[0]
968973 let cy = cx.amount
969974 let cz = valueOrErrorMessage(cx.assetId, "WAVES can't be used as payment")
970975 if ((cz != g))
971976 then throw("USDT payments only!")
972- else if ((cy != dZ))
973- then throw(("Payment needed is " + toString(dZ)))
977+ else if ((cy != ed))
978+ then throw(("Payment needed is " + toString(ed)))
974979 else if ((L > cy))
975980 then throw(("Payment should be at least " + toString(L)))
976981 else {
977- let ea = fraction(aT._6, K, b)
978- let dX = at(dD)
979- let dY = getString(z, dX)
980- if (isDefined(dY))
981- then (((dV :+ ScriptTransfer(addressFromStringValue(dD), (aT._6 - (3 * ea)), g)) :+ ScriptTransfer(y, ea, g)) :+ ScriptTransfer(addressFromStringValue(value(dY)), ea, g))
982- else ((dV :+ ScriptTransfer(addressFromStringValue(dD), (aT._6 - (3 * ea)), g)) :+ ScriptTransfer(y, ea, g))
982+ let ee = fraction(aT._6, K, b)
983+ let eb = at(dG)
984+ let ec = getString(z, eb)
985+ if (isDefined(ec))
986+ then (((dZ :+ ScriptTransfer(addressFromStringValue(dG), (aT._6 - (3 * ee)), g)) :+ ScriptTransfer(y, ee, g)) :+ ScriptTransfer(addressFromStringValue(value(ec)), ee, g))
987+ else ((dZ :+ ScriptTransfer(addressFromStringValue(dG), (aT._6 - (3 * ee)), g)) :+ ScriptTransfer(y, ee, g))
983988 }
984989 }
985990 else if ((size(cj.payments) != 0))
986991 then throw("No payments needed")
987- else dV
992+ else dZ
988993 }
989994 else throw("Strict value is not equal to itself.")
990995 }
991996 else throw("Strict value is not equal to itself.")
992997 }
993998 }
994999 }
9951000 }
9961001 }
9971002 }
9981003 else throw("Strict value is not equal to itself.")
9991004 }
10001005
10011006

github/deemru/w8io/026f985 
299.32 ms