tx · 8Ksi41wfrTN38gFSJgqWddFTM3gFj5L87qdQQ11pwKvc

3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep:  -0.03700000 Waves

2023.04.04 14:36 [2519768] smart account 3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep > SELF 0.00000000 Waves

{ "type": 13, "id": "8Ksi41wfrTN38gFSJgqWddFTM3gFj5L87qdQQ11pwKvc", "fee": 3700000, "feeAssetId": null, "timestamp": 1680608284254, "version": 2, "chainId": 84, "sender": "3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep", "senderPublicKey": "7v5L7QkXxfkirALdyqmox38QCsa9jtfAtgUfHTh34eWq", "proofs": [ "5vvmJ3YW5M8LuwbcFFUEBuDSaHDDVt1hat6Mhn8hkifNeuuUnXvADc8D6pZMMVefcC4129TRgpdXuXMH41XhRDZQ" ], "script": "base64:BgIxCAISAwoBCBIECgIRERIECgIRERIDCgEREgUKAwEBARIDCgEIEgQKAggIEgUKAwgICEkAA1NFUAICX18ABU1VTFQ2AMCEPQAFTVVMVDgAgMLXLwAGTVVMVDEwAIDIr6AlAAVjaGFpbgkAyQECCQDKAQIIBQR0aGlzBWJ5dGVzAAEAAQALdXNkbkFzc2V0SWQEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDABILYmKcME9c5TkaQOS3UkL2SMUbH6369UKb1I0h0qsqrRAwkAAAIBAVQFByRtYXRjaDABIPd26vf3g8pl224T7gI7z1gplanB0Y3yS9ps2B1igMjeCQACAQINVW5rbm93biBjaGFpbgAVZGVmYXVsdFJlc3RBZGRyZXNzU3RyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAiMzUFFDdXZGYnZoNExrUFVucm5VMXozam5iQTFwOW0zV05odgMJAAACAQFUBQckbWF0Y2gwAiMzTXVta0dHenRDS0FYcFdEcXhrZGRvZnFYU1VicVFrdlNKeQkAAgECDVVua25vd24gY2hhaW4BD2dldFN0cmluZ09yRmFpbAIHYWRkcmVzcwNrZXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQdhZGRyZXNzBQNrZXkJALkJAgkAzAgCAgptYW5kYXRvcnkgCQDMCAIJAKUIAQUHYWRkcmVzcwkAzAgCAgEuCQDMCAIFA2tleQkAzAgCAg8gaXMgbm90IGRlZmluZWQFA25pbAIAAQxnZXRJbnRPckVsc2UCA2tleQpkZWZhdWx0VmFsCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFA2tleQUKZGVmYXVsdFZhbAARSWR4Q2ZnU3Rha2luZ0RhcHAAAQARSWR4Q2ZnRWNvbm9teURhcHAAAgAUSWR4Q2ZnR292ZXJuYW5jZURhcHAAAwEKa2V5UmVzdENmZwACDiVzX19yZXN0Q29uZmlnAQ5rZXlSZXN0QWRkcmVzcwACDCVzX19yZXN0QWRkcgERcmVhZFJlc3RDZmdPckZhaWwBBHJlc3QJALwJAgkBD2dldFN0cmluZ09yRmFpbAIFBHJlc3QJAQprZXlSZXN0Q2ZnAAUDU0VQARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCB3Jlc3RDZmcDaWR4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQdyZXN0Q2ZnBQNpZHgJAKwCAgIqUmVzdCBjZmcgZG9lc24ndCBjb250YWluIGFkZHJlc3MgYXQgaW5kZXggCQCkAwEFA2lkeAAMcmVzdENvbnRyYWN0CQERQGV4dHJOYXRpdmUoMTA2MikBCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMJAQ5rZXlSZXN0QWRkcmVzcwAFFWRlZmF1bHRSZXN0QWRkcmVzc1N0cgAHcmVzdENmZwkBEXJlYWRSZXN0Q2ZnT3JGYWlsAQUMcmVzdENvbnRyYWN0AA9zdGFraW5nQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRFJZHhDZmdTdGFraW5nRGFwcAAPREVGQVVMVExPQ0FUSU9OAg9BZnJpY2FfRl9BZnJpY2EABk5VTVJFUwAGABNGQUNUT1JZTUFYV0FSRUhPVVNFAIDIr6AlABBSRVNPVVJDRVBSSUNFTUlOANXWCQAKTUlOUEFZTUVOVACQTgAOU0VMTE1VTFRJUExJRVIAyAEADUJVWU1VTFRJUExJRVIArAIACkxBTkRQUkVGSVgCBExBTkQACkRVQ0tQUkVGSVgCBERVQ0sADFdITVVMVElQTElFUgCAyK+gJQAKQVVDVElPTkZFRQCQTgAIcmVzVHlwZXMJAMwIAgIDT2lsCQDMCAICA09yZQkAzAgCAgRXb29kCQDMCAICBFNhbmQJAMwIAgIEQ2xheQkAzAgCAgdPcmdhbmljBQNuaWwACG1hdFR5cGVzCQDMCAICBEZ1ZWwJAMwIAgIFTWV0YWwJAMwIAgIFUGxhbmsJAMwIAgIFR2xhc3MJAMwIAgIHUGxhc3RpYwkAzAgCAgdQcm90ZWluBQNuaWwACXByb2RUeXBlcwkAzAgCAg1GaXJzdCBBaWQgS2l0CQDMCAICCEJhY2twYWNrCQDMCAICC0Zvb2QgUmF0aW9uCQDMCAICCEpldCBQYWNrCQDMCAICBVJhZGFyBQNuaWwACmNvbnRpbmVudHMJAMwIAgIIQW1lcmljYXMJAMwIAgIGRXVyb3BlCQDMCAICBEFzaWEJAMwIAgIGQWZyaWNhCQDMCAICB09jZWFuaWEFA25pbAAQcHJvZHVjdGlvbk1hdHJpeAkAzAgCAhAxXzFfMV8yXzJfNV8xXzEwCQDMCAICETJfNV81XzJfN181XzJfMTAwCQDMCAICEDFfMV8xXzJfMl81XzFfMTAJAMwIAgIROV85XzFfNV81XzFfNV8xMDAJAMwIAgIRMV81XzFfNV81XzFfMV8xMDAFA25pbAAPY29udElkeEFtZXJpY2FzAAAADWNvbnRJZHhFdXJvcGUAAQALY29udElkeEFzaWEAAgANY29udElkeEFmcmljYQADAA5jb250SWR4T2NlYW5pYQAEAR5rZXlGYWN0b3J5V2FyZWhvdXNlQnlJZEFuZFR5cGUCCWZhY3RvcnlJZAdyZXNUeXBlCQCsAgIJAKwCAgkArAICAhtmYWN0b3J5V2hCeUNvbnRpbmVudEFuZFJlc18FCWZhY3RvcnlJZAIBXwkApAMBBQdyZXNUeXBlAQ5rZXlPcmRlckJ5TGFuZAELbGFuZEFzc2V0SWQJAKwCAgIKbGFuZE9yZGVyXwULbGFuZEFzc2V0SWQBFGtleVN0YWtlZER1Y2tCeU93bmVyAQlvd25lckFkZHIJAKwCAgISc3Rha2VkRHVja0J5T3duZXJfBQlvd25lckFkZHIBEWtleUJhY2twYWNrQnlEdWNrAQtkdWNrQXNzZXRJZAkArAICAgliYWNrUGFja18FC2R1Y2tBc3NldElkAQ9rZXlEdWNrTG9jYXRpb24BC2R1Y2tBc3NldElkCQCsAgICDWR1Y2tMb2NhdGlvbl8FC2R1Y2tBc3NldElkAQprZXlCbG9ja2VkAAIQY29udHJhY3RzQmxvY2tlZAEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQdhc3NldElkCQCsAgICCW5mdE93bmVyXwUHYXNzZXRJZAEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEHYXNzZXRJZAkArAICAgtzdGFrZWRUaW1lXwUHYXNzZXRJZAAPbG9jSWR4Q29udGluZW50AAAACmxvY0lkeFR5cGUAAQAIbG9jSWR4SWQAAgAKYnBJZHhMZXZlbAAAAAhicElkeFJlcwABAAhicElkeE1hdAACAAlicElkeFByb2QAAwAId2hJZHhWb2wAAAAId2hJZHhSZXMAAQAId2hJZHhNYXQAAgAJd2hJZHhQcm9kAAMADndoSWR4TG9ja2VkVm9sAAQACW9yZElkeFJlcwAAAAlvcmRJZHhNYXQAAQAKb3JkSWR4UHJvZAACAQhhc1N0cmluZwEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAFAXMJAAIBAhhmYWlsIHRvIGNhc3QgaW50byBTdHJpbmcBCGdldE9yZGVyAQZvcmRLZXkEAXAJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQZvcmRLZXkCMDBAMF8wQDBfMEAwXzBAMF8wQDBfMEAwOjBAMF8wQDBfMEAwXzBAMF8wQDBfMEAwOgIBOgkAzAgCAwkAAAIJAJADAQkAtQkCCQCRAwIFAXAFCW9yZElkeFJlcwIBXwUGTlVNUkVTCQCRAwIFAXAFCW9yZElkeFJlcwIXMEAwXzBAMF8wQDBfMEAwXzBAMF8wQDAJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQFwBQlvcmRJZHhNYXQCAV8FBk5VTVJFUwkAkQMCBQFwBQlvcmRJZHhNYXQCFzBAMF8wQDBfMEAwXzBAMF8wQDBfMEAwCQDMCAIJAJEDAgUBcAUKb3JkSWR4UHJvZAUDbmlsARJnZXRXYXJlaG91c2VWb2x1bWUBCXZvbFByZWZpeAQFcGFydHMJALUJAgUJdm9sUHJlZml4AgFfCQBoAgkAaAIFDFdITVVMVElQTElFUgkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwYXJ0cwABAAEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwYXJ0cwAAARlnZXRXYXJlaG91c2VDdXJyUmVzVm9sdW1lAQljdXJyZW50V2gKAQNzdW0CA2FjYwRpdGVtCQBkAgUDYWNjCQENcGFyc2VJbnRWYWx1ZQEFBGl0ZW0KAAIkbAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8KAAIkcwkAkAMBBQIkbAoABSRhY2MwAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBA3N1bQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgEZZ2V0V2FyZWhvdXNlQ3Vyck1hdFZvbHVtZQEJY3VycmVudFdoCgEDc3VtAgNhY2MEaXRlbQkAZAIFA2FjYwkBDXBhcnNlSW50VmFsdWUBBQRpdGVtCgACJGwJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0AgFfCgACJHMJAJADAQUCJGwKAAUkYWNjMAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQNzdW0CBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYBG2dldFdhcmVob3VzZUN1cnJHb29kc1ZvbHVtZQEJY3VycmVudFdoBAVnb29kcwkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAMJAAACBQVnb29kcwIAAAAKAQNzdW0CA2FjYwRpdGVtCQBkAgUDYWNjCQENcGFyc2VJbnRWYWx1ZQEFBGl0ZW0KAAIkbAkAvAkCBQVnb29kcwIBXwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEDc3VtAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyA1MAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIBDHNlbGxJbnRlcm5hbAQFbG9jSWQHcmVzVHlwZQZhbW91bnQIbWluUHJpY2UEBXdoS2V5CQEea2V5RmFjdG9yeVdhcmVob3VzZUJ5SWRBbmRUeXBlAgUFbG9jSWQFB3Jlc1R5cGUEAncwCQELdmFsdWVPckVsc2UCCQCfCAEFBXdoS2V5AAAEAnIwAwkAZgIFAncwBRNGQUNUT1JZTUFYV0FSRUhPVVNFAAADCQBmAgkAZAIFAncwBQZhbW91bnQFE0ZBQ1RPUllNQVhXQVJFSE9VU0UJAGUCBRNGQUNUT1JZTUFYV0FSRUhPVVNFBQJ3MAUGYW1vdW50BAx1c2RuUmVjZWl2ZWQJAGQCCQBrAwUCcjAJAGUCCQBoAgUOU0VMTE1VTFRJUExJRVIFEFJFU09VUkNFUFJJQ0VNSU4JAGsDCQBkAgkAaAIAZAUCdzAJAGgCADIFAnIwBRBSRVNPVVJDRVBSSUNFTUlOBRNGQUNUT1JZTUFYV0FSRUhPVVNFBQZNVUxUMTAJAGsDCQBlAgUGYW1vdW50BQJyMAUQUkVTT1VSQ0VQUklDRU1JTgUFTVVMVDgEBW1pbjk5CQBlAgUIbWluUHJpY2UJAGkCBQhtaW5QcmljZQBkAwkAZgIJAGgCBQVtaW45OQUGYW1vdW50CQBoAgUMdXNkblJlY2VpdmVkBQVNVUxUOAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIPQWN0dWFsIHByaWNlID0gCQCkAwEFDHVzZG5SZWNlaXZlZAIDIC8gCQCkAwEFBmFtb3VudAIOIDwgbWluUHJpY2UgPSAJAKQDAQUIbWluUHJpY2UCAywgKAUFbG9jSWQCAiwgCQCRAwIFCHJlc1R5cGVzBQdyZXNUeXBlAgEpCQCUCgIJAQxJbnRlZ2VyRW50cnkCBQV3aEtleQkAZAIFAncwBQZhbW91bnQFDHVzZG5SZWNlaXZlZAELYnV5SW50ZXJuYWwEBWxvY0lkB21hdFR5cGUGYW1vdW50CG1heFByaWNlBAV3aEtleQkBHmtleUZhY3RvcnlXYXJlaG91c2VCeUlkQW5kVHlwZQIFBWxvY0lkBQdtYXRUeXBlBAJ3MAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQV3aEtleQAABAJtMQMJAGYCBQJ3MAUTRkFDVE9SWU1BWFdBUkVIT1VTRQkAlwMBCQDMCAIFBmFtb3VudAkAzAgCCQBlAgUCdzAFE0ZBQ1RPUllNQVhXQVJFSE9VU0UFA25pbAAABAJtMAkAlwMBCQDMCAIFAncwCQDMCAIJAGUCBQZhbW91bnQFAm0xBQNuaWwEAW0JAGQCBQJtMAUCbTEECXVzZG5TcGVudAkAZAIJAGsDBQJtMAkAZQIJAGgCBQ1CVVlNVUxUSVBMSUVSBRBSRVNPVVJDRVBSSUNFTUlOCQBrAwkAZQIJAGgCAGQFAncwCQBoAgAyBQJtMAUQUkVTT1VSQ0VQUklDRU1JTgUTRkFDVE9SWU1BWFdBUkVIT1VTRQUGTVVMVDEwCQBrAwUCbTEJAGgCAAIFEFJFU09VUkNFUFJJQ0VNSU4FBU1VTFQ4BAZtYXgxMDEJAGQCBQhtYXhQcmljZQkAaQIFCG1heFByaWNlAGQDCQBmAgkAaAIFCXVzZG5TcGVudAUFTVVMVDgJAGgCBQZtYXgxMDEFAW0JAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICD0FjdHVhbCBwcmljZSA9IAkApAMBBQl1c2RuU3BlbnQCAyAvIAkApAMBBQFtAg4gPiBtYXhQcmljZSA9IAkApAMBBQhtYXhQcmljZQIDLCAoBQVsb2NJZAICLCAJAJEDAgUIbWF0VHlwZXMFB21hdFR5cGUCASkJAJUKAwkBDEludGVnZXJFbnRyeQIFBXdoS2V5CQBlAgUCdzAFAW0FCXVzZG5TcGVudAUBbQELZ2V0QmFja3BhY2sBBWJwS2V5BAFwCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0BQVicEtleQIaMDowXzBfMF8wXzBfMDowXzBfMF8wXzBfMDoCAToJAMwIAgkApAMBCQELdmFsdWVPckVsc2UCCQC2CQEJAJEDAgUBcAUKYnBJZHhMZXZlbAAACQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUBcAUIYnBJZHhSZXMCAV8FBk5VTVJFUwkAkQMCBQFwBQhicElkeFJlcwILMF8wXzBfMF8wXzAJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQFwBQhicElkeE1hdAIBXwUGTlVNUkVTCQCRAwIFAXAFCGJwSWR4TWF0AgswXzBfMF8wXzBfMAkAzAgCCQCRAwIFAXAFCWJwSWR4UHJvZAUDbmlsAQxjaGVja0Jsb2NrZWQAAwkBC3ZhbHVlT3JFbHNlAgkAmwgCBQ9zdGFraW5nQ29udHJhY3QJAQprZXlCbG9ja2VkAAcJAAIBAh9Db250cmFjdHMgYXJlIHVuZGVyIG1haW50ZW5hbmNlBQR1bml0CAFpAQ1jb25zdHJ1Y3RvclYxAQhyZXN0QWRkcgMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEVBlcm1pc3Npb24gZGVuaWVkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ5rZXlSZXN0QWRkcmVzcwAFCHJlc3RBZGRyBQNuaWwBaQENc2VsbFJlc291cmNlcwIHYW1vdW50cwltaW5QcmljZXMEB2Jsb2NrZWQJAQxjaGVja0Jsb2NrZWQAAwkAAAIFB2Jsb2NrZWQFB2Jsb2NrZWQEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECKnNlbGxSZXNvdXJjZXMgZG9lc24ndCByZXF1aXJlIGFueSBwYXltZW50cwQLY3VyTG9jYXRpb24JALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OAgFfAwkBAiE9AgkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQIBRgkAAgEJAKwCAgItRHVjayBsb2NhdGlvbiB0eXBlIHNob3VsZCBiZSBGYWN0b3J5LCBidXQgaXMgCQCRAwIFC2N1ckxvY2F0aW9uBQpsb2NJZHhUeXBlBAVsb2NJZAkAkQMCBQtjdXJMb2NhdGlvbgUIbG9jSWR4SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQHcmVzTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwIBXwoBBWFkZGVyAgNhY2MBagMJAGYCCQCRAwIFB2Ftb3VudHMFAWoJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdyZXNMaXN0BQFqCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICCVlvdSBoYXZlIAkAkQMCBQdyZXNMaXN0BQFqAgQgb2YgCQCRAwIFCHJlc1R5cGVzBQFqAhQsIGJ1dCB0cmllZCB0byBzZWxsIAkApAMBCQCRAwIFB2Ftb3VudHMFAWoDCQBmAgAACQCRAwIFB2Ftb3VudHMFAWoJAAIBCQCsAgIJAKwCAgkArAICAiVZb3UgdHJpZWQgdG8gc2VsbCBuZWdhdGl2ZSBhbW91bnQgb2YgCQCRAwIFCHJlc1R5cGVzBQFqAgI6IAkApAMBCQCRAwIFB2Ftb3VudHMFAWoDCQBmAgkAkQMCBQdhbW91bnRzBQFqAAAEAWIJAQxzZWxsSW50ZXJuYWwEBQVsb2NJZAUBagkAkQMCBQdhbW91bnRzBQFqCQCRAwIFCW1pblByaWNlcwUBagkAlQoDCQDNCAIIBQNhY2MCXzEIBQFiAl8xCQDNCAIIBQNhY2MCXzIJAKQDAQkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdyZXNMaXN0BQFqCQCRAwIFB2Ftb3VudHMFAWoJAGQCCAUDYWNjAl8zCAUBYgJfMgkAlQoDCAUDYWNjAl8xCQDNCAIIBQNhY2MCXzIJAJEDAgUHcmVzTGlzdAUBaggFA2FjYwJfMwQGbWVyZ2VkCgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJUKAwUDbmlsBQNuaWwAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEFYWRkZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYEB25ld1BhY2sJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJALkJAggFBm1lcmdlZAJfMgIBXwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgQGcmVzdWx0CQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQmFja3BhY2sJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUHbmV3UGFjawUDbmlsBQNuaWwJAJQKAgkAzQgCCAUGbWVyZ2VkAl8xCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIIBQZtZXJnZWQCXzMFC3VzZG5Bc3NldElkBQZyZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEMYnV5TWF0ZXJpYWxzAgdhbW91bnRzCW1heFByaWNlcwQHYmxvY2tlZAkBDGNoZWNrQmxvY2tlZAADCQAAAgUHYmxvY2tlZAUHYmxvY2tlZAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQECnBtdEFzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAggFA3BtdAdhc3NldElkAh5XQVZFUyBjYW4ndCBiZSB1c2VkIGFzIHBheW1lbnQDCQECIT0CBQpwbXRBc3NldElkBQt1c2RuQXNzZXRJZAkAAgECE1VTRE4gcGF5bWVudHMgb25seSEEC2N1ckxvY2F0aW9uCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgIBXwMJAQIhPQIJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUCAUYJAAIBCQCsAgICLUR1Y2sgbG9jYXRpb24gdHlwZSBzaG91bGQgYmUgRmFjdG9yeSwgYnV0IGlzIAkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQQFbG9jSWQJAJEDAgULY3VyTG9jYXRpb24FCGxvY0lkeElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEB21hdExpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8KAQhtVXBkYXRlcgIDYWNjAWoDCQBmAgAACQCRAwIFB2Ftb3VudHMFAWoJAAIBCQCsAgIJAKwCAgkArAICAiRZb3UgdHJpZWQgdG8gYnV5IG5lZ2F0aXZlIGFtb3VudCBvZiAJAJEDAgUIbWF0VHlwZXMFAWoCAjogCQCkAwEJAJEDAgUHYW1vdW50cwUBagMJAGYCCQCRAwIFB2Ftb3VudHMFAWoAAAQBYgkBC2J1eUludGVybmFsBAUFbG9jSWQFAWoJAJEDAgUHYW1vdW50cwUBagkAkQMCBQltYXhQcmljZXMFAWoJAJUKAwkAzQgCCAUDYWNjAl8xCAUBYgJfMQkAzQgCCAUDYWNjAl8yCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHbWF0TGlzdAUBaggFAWICXzMJAGQCCAUDYWNjAl8zCAUBYgJfMgkAlQoDCAUDYWNjAl8xCQDNCAIIBQNhY2MCXzIJAJEDAgUHbWF0TGlzdAUBaggFA2FjYwJfMwQGbWVyZ2VkCgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJUKAwUDbmlsBQNuaWwAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEIbVVwZGF0ZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYDCQBmAggFBm1lcmdlZAJfMwUDYW10CQACAQkArAICCQCsAgIJAKwCAgIfSW5zdWZmaWNpZW50IHBheW1lbnQhIEF0dGFjaGVkPQkApAMBBQNhbXQCCywgcmVxdWlyZWQ9CQCkAwEIBQZtZXJnZWQCXzMEB25ld1BhY2sJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQDMCAIJALkJAggFBm1lcmdlZAJfMgIBXwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgQGcmVzdWx0CQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQmFja3BhY2sJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUHbmV3UGFjawUDbmlsBQNuaWwEBHJlc3QDCQBmAgkAZQIFA2FtdAgFBm1lcmdlZAJfMwAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkAZQIFA2FtdAgFBm1lcmdlZAJfMwULdXNkbkFzc2V0SWQFA25pbAUDbmlsCQCUCgIJAM4IAggFBm1lcmdlZAJfMQUEcmVzdAUGcmVzdWx0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEWV4Y2hhbmdlUmVzb3VyY2VzAQdhbW91bnRzBAdibG9ja2VkCQEMY2hlY2tCbG9ja2VkAAMJAAACBQdibG9ja2VkBQdibG9ja2VkBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAiJleGFjdGx5IDEgcGF5bWVudCBtdXN0IGJlIGF0dGFjaGVkBANwbXQJAJEDAggFAWkIcGF5bWVudHMAAAQDYW10CAUDcG10BmFtb3VudAQKcG10QXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCAUDcG10B2Fzc2V0SWQCHldBVkVTIGNhbid0IGJlIHVzZWQgYXMgcGF5bWVudAMJAQIhPQIFCnBtdEFzc2V0SWQFC3VzZG5Bc3NldElkCQACAQITVVNETiBwYXltZW50cyBvbmx5IQQLY3VyTG9jYXRpb24JALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OAgFfAwkBAiE9AgkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQIBRgkAAgEJAKwCAgItRHVjayBsb2NhdGlvbiB0eXBlIHNob3VsZCBiZSBGYWN0b3J5LCBidXQgaXMgCQCRAwIFC2N1ckxvY2F0aW9uBQpsb2NJZHhUeXBlBAVsb2NJZAkAkQMCBQtjdXJMb2NhdGlvbgUIbG9jSWR4SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQHcmVzTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwIBXwQHbWF0TGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwoBCWV4Y2hhbmdlcgIDYWNjAWoEBXdoS2V5CQEea2V5RmFjdG9yeVdhcmVob3VzZUJ5SWRBbmRUeXBlAgUFbG9jSWQFAWoEAncwCQELdmFsdWVPckVsc2UCCQCfCAEFBXdoS2V5AAAEA2FtagkAkQMCBQdhbW91bnRzBQFqAwkAZgIFA2FtagkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3Jlc0xpc3QFAWoJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIJWW91IGhhdmUgCQCRAwIFB3Jlc0xpc3QFAWoCBCBvZiAJAJEDAgUIcmVzVHlwZXMFAWoCGCwgYnV0IHRyaWVkIHRvIGV4Y2hhbmdlIAkApAMBBQNhbWoDCQBmAgAABQNhbWoJAAIBCQCsAgIJAKwCAgkArAICAilZb3UgdHJpZWQgdG8gZXhjaGFuZ2UgbmVnYXRpdmUgYW1vdW50IG9mIAkAkQMCBQhyZXNUeXBlcwUBagICOiAJAKQDAQUDYW1qAwkAZgIFA2FtagAACQCWCgQJAM0IAggFA2FjYwJfMQkApAMBCQBlAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3Jlc0xpc3QFAWoFA2FtagkAzQgCCAUDYWNjAl8yCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHbWF0TGlzdAUBagUDYW1qCQBkAggFA2FjYwJfMwkAawMFA2FtagUQUkVTT1VSQ0VQUklDRU1JTgUFTVVMVDgJAM0IAggFA2FjYwJfNAkBDEludGVnZXJFbnRyeQIFBXdoS2V5BQJ3MAkAlgoECQDNCAIIBQNhY2MCXzEJAJEDAgUHcmVzTGlzdAUBagkAzQgCCAUDYWNjAl8yCQCRAwIFB21hdExpc3QFAWoIBQNhY2MCXzMIBQNhY2MCXzQEBm1lcmdlZAoAAiRsCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFBQNuaWwKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCWCgQFA25pbAUDbmlsAAAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEJZXhjaGFuZ2VyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAwkAZgIIBQZtZXJnZWQCXzMFA2FtdAkAAgEJAKwCAgkArAICCQCsAgICH0luc3VmZmljaWVudCBwYXltZW50ISBBdHRhY2hlZD0JAKQDAQUDYW10AgssIHJlcXVpcmVkPQkApAMBCAUGbWVyZ2VkAl8zBAduZXdQYWNrCQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQC5CQIIBQZtZXJnZWQCXzECAV8JAMwIAgkAuQkCCAUGbWVyZ2VkAl8yAgFfCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6BAZyZXN1bHQJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVCYWNrcGFjawkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQduZXdQYWNrBQNuaWwFA25pbAQEcmVzdAMJAGYCCQBlAgUDYW10CAUGbWVyZ2VkAl8zAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQBlAgUDYW10CAUGbWVyZ2VkAl8zBQt1c2RuQXNzZXRJZAUDbmlsBQNuaWwJAJQKAgkAzggCBQRyZXN0CAUGbWVyZ2VkAl80BQZyZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEIYnV5R29vZHMDCnByb2R1Y3RJZHgFbGV2ZWwIcXVhbnRpdHkEB2Jsb2NrZWQJAQxjaGVja0Jsb2NrZWQAAwkAAAIFB2Jsb2NrZWQFB2Jsb2NrZWQDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAiVidXlHb29kcyBkb2Vzbid0IHJlcXVpcmUgYW55IHBheW1lbnRzAwkAZgIAAAUIcXVhbnRpdHkJAAIBAhtRdWFudGl0eSBzaG91bGQgYmUgcG9zaXRpdmUEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQLY3VyTG9jYXRpb24JALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OAgFfAwkBAiE9AgkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQIBTQkAAgEJAKwCAgIxRHVjayBsb2NhdGlvbiB0eXBlIHNob3VsZCBiZSBNYW51ZmFjdG9yeSwgYnV0IGlzIAkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQQEY29udAkAkQMCBQtjdXJMb2NhdGlvbgUPbG9jSWR4Q29udGluZW50BAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEB21hdExpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8DAwkAZgIAAAUKcHJvZHVjdElkeAYJAGcCBQpwcm9kdWN0SWR4CQCQAwEFEHByb2R1Y3Rpb25NYXRyaXgJAAIBCQCsAgICFFVua25vd24gcHJvZHVjdCBpZHg9CQCkAwEFCnByb2R1Y3RJZHgEDnByb2R1Y3RDb250SWR4CQBqAgUKcHJvZHVjdElkeAkAkAMBBQpjb250aW5lbnRzAwkBAiE9AgkAkQMCBQpjb250aW5lbnRzBQ5wcm9kdWN0Q29udElkeAUEY29udAkAAgEJAKwCAgkArAICCQCsAgICHVRoaXMgcHJvZHVjdCBpcyBhdmFpbGFibGUgaW4gCQCRAwIFCmNvbnRpbmVudHMFDnByb2R1Y3RDb250SWR4AhEsIGJ1dCB5b3UgYXJlIGluIAUEY29udAQGcmVjaXBlCQC1CQIJAJEDAgUQcHJvZHVjdGlvbk1hdHJpeAUKcHJvZHVjdElkeAIBXwMJAQIhPQIJAJADAQUGcmVjaXBlCQBkAgUGTlVNUkVTAAIJAAIBCQCsAgICF0ZhdGFsOiB1bmtub3duIHJlY2lwZTogCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgFCnByb2R1Y3RJZHgECHByb2RMaXN0AwkAAAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIABQNuaWwJALUJAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgFfCgEGZmlsbGVyAgNhY2MLaWdub3JlZEl0ZW0EAW4IBQNhY2MCXzIEAXgDCQBmAgkAkAMBBQhwcm9kTGlzdAUBbgkAtQkCCQCRAwIFCHByb2RMaXN0BQFuAgEsCQDMCAICATAJAMwIAgIBMAkAzAgCAgEwBQNuaWwEA3gxcwkAkQMCBQF4AAAEAngxCQENcGFyc2VJbnRWYWx1ZQEFA3gxcwQDeDJzCQCRAwIFAXgAAQQCeDIJAQ1wYXJzZUludFZhbHVlAQUDeDJzBAN4M3MJAJEDAgUBeAACBAJ4MwkBDXBhcnNlSW50VmFsdWUBBQN4M3MEBmFtb3VudAkAaAIFCHF1YW50aXR5CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGcmVjaXBlAAcEAXkDCQAAAgUBbgUKcHJvZHVjdElkeAQHJG1hdGNoMAUFbGV2ZWwDCQAAAgABBQckbWF0Y2gwCQCsAgIJAKwCAgkArAICCQCsAgIJAKQDAQkAZAIFAngxBQZhbW91bnQCASwFA3gycwIBLAUDeDNzAwkAAAIAAgUHJG1hdGNoMAkArAICCQCsAgIJAKwCAgkArAICBQN4MXMCASwJAKQDAQkAZAIFAngyBQZhbW91bnQCASwFA3gzcwMJAAACAAMFByRtYXRjaDAJAKwCAgkArAICCQCsAgIJAKwCAgUDeDFzAgEsBQN4MnMCASwJAKQDAQkAZAIFAngzBQZhbW91bnQJAAIBCQCsAgICIlByb2R1Y3QgbGV2ZWwgc2hvdWxkIGJl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dG8gaXRzZWxmLgFpARRhY2NlcHRTZXJ2aWNlUGF5bWVudAEHc2VydmljZQQHYmxvY2tlZAkBDGNoZWNrQmxvY2tlZAADCQAAAgUHYmxvY2tlZAUHYmxvY2tlZAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABANhbXQIBQNwbXQGYW1vdW50BApwbXRBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIIBQNwbXQHYXNzZXRJZAIeV0FWRVMgY2FuJ3QgYmUgdXNlZCBhcyBwYXltZW50AwkBAiE9AgUKcG10QXNzZXRJZAULdXNkbkFzc2V0SWQJAAIBAhNVU0ROIHBheW1lbnRzIG9ubHkhBARuZWVkBAckbWF0Y2gwBQdzZXJ2aWNlAwkAAAICC0xBTkRfUkVOQU1FBQckbWF0Y2gwAICt4gQJAAIBAhBVbmtub3duIHNlcnZpY2UhAwkBAiE9AgUDYW10BQRuZWVkCQACAQkArAICCQCsAgIJAKwCAgUHc2VydmljZQIHIGNvc3RzIAkApAMBBQRuZWVkAgUgVVNETgkAlAoCBQNuaWwFA2FtdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARFzZXRXYXJlaG91c2VPcmRlcgIMY2FyZ29MaXN0U3RyC2xhbmRBc3NldElkBAR1c2VyCAUBaQxvcmlnaW5DYWxsZXIEBGFkZHIJAKUIAQUEdXNlcgQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQACAQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQKY2FyZ29QYXJ0cwkAvAkCBQxjYXJnb0xpc3RTdHICAToDCQECIT0CCQCQAwEFCmNhcmdvUGFydHMAAwkAAgECNGNhcmdvTGlzdFN0ciBzaG91bGQgY29udGFpbiBleGFjdGx5IDIgJzonIHNlcGFyYXRvcnMECHJlc1BhcnRzCQC1CQIJAJEDAgUKY2FyZ29QYXJ0cwAAAgFfBAhtYXRQYXJ0cwkAtQkCCQCRAwIFCmNhcmdvUGFydHMAAQIBXwQJcHJvZFBhcnRzAwkAAAIJAJEDAgUKY2FyZ29QYXJ0cwACAgAFA25pbAkAtQkCCQCRAwIFCmNhcmdvUGFydHMAAgIBXwMJAQIhPQIJAJADAQUIcmVzUGFydHMFBk5VTVJFUwkAAgECIEFsbCA2IHJlc291cmNlcyBzaG91bGQgYmUgcGFzc2VkAwkBAiE9AgkAkAMBBQhtYXRQYXJ0cwUGTlVNUkVTCQACAQIgQWxsIDYgbWF0ZXJpYWxzIHNob3VsZCBiZSBwYXNzZWQEAndoCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIUZ2V0V2FyZWhvdXNlUkVBRE9OTFkJAMwIAgULbGFuZEFzc2V0SWQFA25pbAUDbmlsBAljdXJyZW50V2gJALwJAgUCd2gCAToECWN1cnJXaFJlcwkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8ECWN1cnJXaE1hdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhNYXQCAV8ECmN1cnJXaFByb2QDCQAAAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAIABQNuaWwJALUJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAIBXwQMY3VycldoUmVzVm9sCQEZZ2V0V2FyZWhvdXNlQ3VyclJlc1ZvbHVtZQEFCWN1cnJlbnRXaAQMY3VycldoTWF0Vm9sCQEZZ2V0V2FyZWhvdXNlQ3Vyck1hdFZvbHVtZQEFCWN1cnJlbnRXaAQOY3VycldoR29vZHNWb2wJARtnZXRXYXJlaG91c2VDdXJyR29vZHNWb2x1bWUBBQljdXJyZW50V2gED2N1cnJXaExvY2tlZFZvbAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWN1cnJlbnRXaAUOd2hJZHhMb2NrZWRWb2wEC3doU3BhY2VMZWZ0CQBlAgkAZQIJAGUCCQBlAgkBEmdldFdhcmVob3VzZVZvbHVtZQEJAJEDAgUJY3VycmVudFdoBQh3aElkeFZvbAUMY3VycldoUmVzVm9sBQxjdXJyV2hNYXRWb2wFDmN1cnJXaEdvb2RzVm9sBQ9jdXJyV2hMb2NrZWRWb2wEBm9yZEtleQkBDmtleU9yZGVyQnlMYW5kAQULbGFuZEFzc2V0SWQECmN1cnJlbnRPcmQJAQhnZXRPcmRlcgEFBm9yZEtleQQNY3VycmVudE9yZFJlcwkAtQkCCQCRAwIFCmN1cnJlbnRPcmQFCW9yZElkeFJlcwIBXwQNY3VycmVudE9yZE1hdAkAtQkCCQCRAwIFCmN1cnJlbnRPcmQFCW9yZElkeE1hdAIBXwQOY3VycmVudE9yZFByb2QDCQAAAgkAkQMCBQpjdXJyZW50T3JkBQpvcmRJZHhQcm9kAgAFA25pbAkAtQkCCQCRAwIFCmN1cnJlbnRPcmQFCm9yZElkeFByb2QCAV8EDXVzZG5OZWVkMkxvY2sAAAoBBG9yZFICA2FjYwRpdGVtBAFqCAUDYWNjAl8xBAlpdGVtUGFydHMJALUJAgUEaXRlbQIBQAMJAQIhPQIJAJADAQUJaXRlbVBhcnRzAAIJAAIBAi5JbmNvcnJlY3Qgb3JkZXIgZm9ybWF0LCBzaG91bGQgYmUgYW1vdW50QHByaWNlBAhuZXdPcmRBbQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWl0ZW1QYXJ0cwAABAhuZXdPcmRQcgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWl0ZW1QYXJ0cwABBAluZXdPcmRVc2QJAGsDBQhuZXdPcmRBbQUIbmV3T3JkUHIFBU1VTFQ4BAN3aHIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQljdXJyV2hSZXMFAWoEC2N1ck9yZFBhcnRzCQC1CQIJAJEDAgUNY3VycmVudE9yZFJlcwUBagIBQAQIY3VyT3JkQW0JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQtjdXJPcmRQYXJ0cwAABAhjdXJPcmRQcgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFC2N1ck9yZFBhcnRzAAEDCQBmAgAABQhjdXJPcmRQcgkAAgECF1ByaWNlIGNhbid0IGJlIG5lZ2F0aXZlBAljdXJPcmRVc2QJAGsDBQhjdXJPcmRBbQUIY3VyT3JkUHIFBU1VTFQ4AwkAAAIFCG5ld09yZEFtAAADCQBmAgUIY3VyT3JkQW0AAAkAlgoECQBkAgUBagABCQDNCAIIBQNhY2MCXzIJAKQDAQUDd2hyCQBlAggFA2FjYwJfMwUIY3VyT3JkQW0JAGUCCAUDYWNjAl80BQljdXJPcmRVc2QJAJYKBAkAZAIFAWoAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGUCBQN3aHIFCGN1ck9yZEFtCQBkAggFA2FjYwJfMwUIY3VyT3JkQW0IBQNhY2MCXzQDCQBmAgUIbmV3T3JkQW0AAAMJAGYCAAAFCGN1ck9yZEFtBAZhbURpZmYJAGQCBQhuZXdPcmRBbQUIY3VyT3JkQW0JAJYKBAkAZAIFAWoAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGUCBQN3aHIFCGN1ck9yZEFtCQBkAggFA2FjYwJfMwUGYW1EaWZmCQBkAggFA2FjYwJfNAUJbmV3T3JkVXNkCQCWCgQJAGQCBQFqAAEJAM0IAggFA2FjYwJfMgkApAMBBQN3aHIJAGUCCQBkAggFA2FjYwJfMwUIbmV3T3JkQW0FCGN1ck9yZEFtCQBlAgkAZAIIBQNhY2MCXzQFCW5ld09yZFVzZAUJY3VyT3JkVXNkAwkAZgIAAAUIY3VyT3JkQW0EBmFtRGlmZgkAZQIFCGN1ck9yZEFtBQhuZXdPcmRBbQMJAGYCAAAJAGUCBQN3aHIFBmFtRGlmZgkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byB0YWtlIAkApAMBBQZhbURpZmYCGiBmcm9tIHdhcmVob3VzZSwgYnV0IG9ubHkgCQCkAwEFA3docgIKIGF2YWlsYWJsZQkAlgoECQBkAgUBagABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZQIFA3docgUGYW1EaWZmCQBkAggFA2FjYwJfMwUGYW1EaWZmCAUDYWNjAl80AwkAZgIAAAkAZAIFA3docgUIbmV3T3JkQW0JAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAJAKQDAQkBAS0BBQhuZXdPcmRBbQIaIGZyb20gd2FyZWhvdXNlLCBidXQgb25seSAJAKQDAQUDd2hyAgogYXZhaWxhYmxlCQCWCgQJAGQCBQFqAAEJAM0IAggFA2FjYwJfMgkApAMBCQBkAgUDd2hyBQhuZXdPcmRBbQkAZQIJAGUCCAUDYWNjAl8zBQhuZXdPcmRBbQUIY3VyT3JkQW0JAGUCCAUDYWNjAl80BQljdXJPcmRVc2QEAXIKAAIkbAUIcmVzUGFydHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCWCgQAAAUDbmlsAAAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEEb3JkUgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgoBBG9yZE0CA2FjYwRpdGVtBAFqCAUDYWNjAl8xBAlpdGVtUGFydHMJALUJAgUEaXRlbQIBQAMJAQIhPQIJAJADAQUJaXRlbVBhcnRzAAIJAAIBAi5JbmNvcnJlY3Qgb3JkZXIgZm9ybWF0LCBzaG91bGQgYmUgYW1vdW50QHByaWNlBAhuZXdPcmRBbQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWl0ZW1QYXJ0cwAABAhuZXdPcmRQcgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWl0ZW1QYXJ0cwABBAluZXdPcmRVc2QJAGsDBQhuZXdPcmRBbQUIbmV3T3JkUHIFBU1VTFQ4BAN3aG0JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQljdXJyV2hNYXQFAWoEC2N1ck9yZFBhcnRzCQC1CQIJAJEDAgUNY3VycmVudE9yZE1hdAUBagIBQAQIY3VyT3JkQW0JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQtjdXJPcmRQYXJ0cwAABAhjdXJPcmRQcgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFC2N1ck9yZFBhcnRzAAEDCQBmAgAABQhjdXJPcmRQcgkAAgECF1ByaWNlIGNhbid0IGJlIG5lZ2F0aXZlBAljdXJPcmRVc2QJAGsDBQhjdXJPcmRBbQUIY3VyT3JkUHIFBU1VTFQ4AwkAAAIFCG5ld09yZEFtAAADCQBmAgUIY3VyT3JkQW0AAAkAlgoECQBkAgUBagABCQDNCAIIBQNhY2MCXzIJAKQDAQUDd2htCQBlAggFA2FjYwJfMwUIY3VyT3JkQW0JAGUCCAUDYWNjAl80BQljdXJPcmRVc2QJAJYKBAkAZAIFAWoAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGUCBQN3aG0FCGN1ck9yZEFtCQBkAggFA2FjYwJfMwUIY3VyT3JkQW0IBQNhY2MCXzQDCQBmAgUIbmV3T3JkQW0AAAMJAGYCAAAFCGN1ck9yZEFtBAZhbURpZmYJAGQCBQhuZXdPcmRBbQUIY3VyT3JkQW0JAJYKBAkAZAIFAWoAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGUCBQN3aG0FCGN1ck9yZEFtCQBkAggFA2FjYwJfMwUGYW1EaWZmCQBkAggFA2FjYwJfNAUJbmV3T3JkVXNkCQCWCgQJAGQCBQFqAAEJAM0IAggFA2FjYwJfMgkApAMBBQN3aG0JAGUCCQBkAggFA2FjYwJfMwUIbmV3T3JkQW0FCGN1ck9yZEFtCQBlAgkAZAIIBQNhY2MCXzQFCW5ld09yZFVzZAUJY3VyT3JkVXNkAwkAZgIAAAUIY3VyT3JkQW0EBmFtRGlmZgkAZQIFCGN1ck9yZEFtBQhuZXdPcmRBbQMJAGYCAAAJAGUCBQN3aG0FBmFtRGlmZgkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byB0YWtlIAkApAMBBQZhbURpZmYCGiBmcm9tIHdhcmVob3VzZSwgYnV0IG9ubHkgCQCkAwEFA3dobQIKIGF2YWlsYWJsZQkAlgoECQBkAgUBagABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZQIFA3dobQUGYW1EaWZmCQBkAggFA2FjYwJfMwUGYW1EaWZmCAUDYWNjAl80AwkAZgIAAAkAZAIFA3dobQUIbmV3T3JkQW0JAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAJAKQDAQkBAS0BBQhuZXdPcmRBbQIaIGZyb20gd2FyZWhvdXNlLCBidXQgb25seSAJAKQDAQUDd2htAgogYXZhaWxhYmxlCQCWCgQJAGQCBQFqAAEJAM0IAggFA2FjYwJfMgkApAMBCQBkAgUDd2htBQhuZXdPcmRBbQkAZQIJAGUCCAUDYWNjAl8zBQhuZXdPcmRBbQUIY3VyT3JkQW0JAGUCCAUDYWNjAl80BQljdXJPcmRVc2QEAW0KAAIkbAUIbWF0UGFydHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCWCgQAAAUDbmlsCAUBcgJfMwgFAXICXzQKAQUkZjFfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBG9yZE0CBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjFfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjFfMgIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYKAQRvcmRQAgNhY2MEaXRlbQQBaggFA2FjYwJfMQQJaXRlbVBhcnRzCQC1CQIFBGl0ZW0CAUADCQECIT0CCQCQAwEFCWl0ZW1QYXJ0cwACCQACAQIuSW5jb3JyZWN0IG9yZGVyIGZvcm1hdCwgc2hvdWxkIGJlIGFtb3VudEBwcmljZQQIbmV3T3JkQW0JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQlpdGVtUGFydHMAAAQIbmV3T3JkUHIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQlpdGVtUGFydHMAAQQJbmV3T3JkVXNkCQBrAwUIbmV3T3JkQW0FCG5ld09yZFByBQVNVUxUOAQDd2hwCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKY3VycldoUHJvZAUBagQLY3VyT3JkUGFydHMJALUJAgkAkQMCBQ5jdXJyZW50T3JkUHJvZAUBagIBQAQIY3VyT3JkQW0JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQtjdXJPcmRQYXJ0cwAABAhjdXJPcmRQcgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFC2N1ck9yZFBhcnRzAAEDCQBmAgAABQhjdXJPcmRQcgkAAgECF1ByaWNlIGNhbid0IGJlIG5lZ2F0aXZlBAljdXJPcmRVc2QJAGsDBQhjdXJPcmRBbQUIY3VyT3JkUHIFBU1VTFQ4AwkAAAIFCG5ld09yZEFtAAADCQBmAgUIY3VyT3JkQW0AAAkAlgoECQBkAgUBagABCQDNCAIIBQNhY2MCXzIJAKQDAQUDd2hwCQBlAggFA2FjYwJfMwUIY3VyT3JkQW0JAGUCCAUDYWNjAl80BQljdXJPcmRVc2QJAJYKBAkAZAIFAWoAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGUCBQN3aHAFCGN1ck9yZEFtCQBkAggFA2FjYwJfMwUIY3VyT3JkQW0IBQNhY2MCXzQDCQBmAgUIbmV3T3JkQW0AAAMJAGYCAAAFCGN1ck9yZEFtBAZhbURpZmYJAGQCBQhuZXdPcmRBbQUIY3VyT3JkQW0JAJYKBAkAZAIFAWoAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGUCBQN3aHAFCGN1ck9yZEFtCQBkAggFA2FjYwJfMwUGYW1EaWZmCQBkAggFA2FjYwJfNAUJbmV3T3JkVXNkCQCWCgQJAGQCBQFqAAEJAM0IAggFA2FjYwJfMgkApAMBBQN3aHAJAGUCCQBkAggFA2FjYwJfMwUIbmV3T3JkQW0FCGN1ck9yZEFtCQBlAgkAZAIIBQNhY2MCXzQFCW5ld09yZFVzZAUJY3VyT3JkVXNkAwkAZgIAAAUIY3VyT3JkQW0EBmFtRGlmZgkAZQIFCGN1ck9yZEFtBQhuZXdPcmRBbQMJAGYCAAAJAGUCBQN3aHAFBmFtRGlmZgkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byB0YWtlIAkApAMBBQZhbURpZmYCGiBmcm9tIHdhcmVob3VzZSwgYnV0IG9ubHkgCQCkAwEFA3docAIKIGF2YWlsYWJsZQkAlgoECQBkAgUBagABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZQIFA3docAUGYW1EaWZmCQBkAggFA2FjYwJfMwUGYW1EaWZmCAUDYWNjAl8zAwkAZgIAAAkAZAIFA3docAUIbmV3T3JkQW0JAAIBCQCsAgIJAKwCAgkArAIC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AQISTm8gcGF5bWVudHMgbmVlZGVkCQDMCAIJAQtTdHJpbmdFbnRyeQIFBm9yZEtleQUMY2FyZ29MaXN0U3RyBQNuaWwDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhJObyBwYXltZW50cyBuZWVkZWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUEdXNlcgkBAS0BBQh1c2RTYWxkbwULdXNkbkFzc2V0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUGb3JkS2V5BQxjYXJnb0xpc3RTdHIFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARRhY2NlcHRXYXJlaG91c2VPcmRlcgMKYnBPcmRlclN0cgtsYW5kQXNzZXRJZAtkdWNrQXNzZXRJZAQGY2FsbGVyCAUBaQxvcmlnaW5DYWxsZXIECmNhbGxlckFkZHIJAKUIAQUGY2FsbGVyBBFzdGFrZWREdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUKY2FsbGVyQWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEPa2V5RHVja0xvY2F0aW9uAQURc3Rha2VkRHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgQDbG9jCQC1CQIJAQV2YWx1ZQEFC2N1ckxvY2F0aW9uAgFfAwkBAiE9AgkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCAUwJAAIBCQCsAgIJAKwCAgIWRHVjayBsb2NhdGlvbiB0eXBlIGlzIAkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCESwgYnV0IHNob3VsZCBiZSBMAwkBAiE9AgURc3Rha2VkRHVja0Fzc2V0SWQFC2R1Y2tBc3NldElkCQACAQkArAICCQCsAgIJAKwCAgIUWW91ciBzdGFrZWQgZHVjayBpcyAFEXN0YWtlZER1Y2tBc3NldElkAg0sIGJ1dCBwYXNzZWQgBQtkdWNrQXNzZXRJZAQJbGFuZEFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgkArAICAgRORlQgCAUJbGFuZEFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAlsYW5kT3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQlsYW5kQXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkAAAIFCWxhbmRPd25lcgUKY2FsbGVyQWRkcgkAAgECHllvdSBjYW5ub3QgdHJhZGUgd2l0aCB5b3Vyc2VsZgQMYnBPcmRlclBhcnRzCQC8CQIFCmJwT3JkZXJTdHICAToDCQECIT0CCQCQAwEFDGJwT3JkZXJQYXJ0cwADCQACAQIyYnBPcmRlclN0ciBzaG91bGQgY29udGFpbiBleGFjdGx5IDIgJzonIHNlcGFyYXRvcnMECGJwT3JkUmVzCQC1CQIJAJEDAgUMYnBPcmRlclBhcnRzAAACAV8ECGJwT3JkTWF0CQC1CQIJAJEDAgUMYnBPcmRlclBhcnRzAAECAV8ECWJwT3JkUHJvZAMJAAACCQCRAwIFDGJwT3JkZXJQYXJ0cwACAgAFA25pbAkAtQkCCQCRAwIFDGJwT3JkZXJQYXJ0cwACAgFfAwkBAiE9AgkAkAMBBQhicE9yZFJlcwUGTlVNUkVTCQACAQIgQWxsIDYgcmVzb3VyY2VzIHNob3VsZCBiZSBwYXNzZWQDCQECIT0CCQCQAwEFCGJwT3JkTWF0BQZOVU1SRVMJAAIBAiBBbGwgNiBtYXRlcmlhbHMgc2hvdWxkIGJlIHBhc3NlZAQCd2gJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0AhRnZXRXYXJlaG91c2VSRUFET05MWQkAzAgCBQtsYW5kQXNzZXRJZAUDbmlsBQNuaWwECWN1cnJlbnRXaAkAvAkCBQJ3aAIBOgQJY3VycldoUmVzCQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeFJlcwIBXwQJY3VycldoTWF0CQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeE1hdAIBXwQKY3VycldoUHJvZAMJAAACCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAgAFA25pbAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAgFfBAxjdXJyV2hSZXNWb2wJARlnZXRXYXJlaG91c2VDdXJyUmVzVm9sdW1lAQUJY3VycmVudFdoBAxjdXJyV2hNYXRWb2wJARlnZXRXYXJlaG91c2VDdXJyTWF0Vm9sdW1lAQUJY3VycmVudFdoBA5jdXJyV2hHb29kc1ZvbAkBG2dldFdhcmVob3VzZUN1cnJHb29kc1ZvbHVtZQEFCWN1cnJlbnRXaAQPY3VycldoTG9ja2VkVm9sCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJY3VycmVudFdoBQ53aElkeExvY2tlZFZvbAQLd2hTcGFjZUxlZnQJAGUCCQBlAgkAZQIJAGUCCQESZ2V0V2FyZWhvdXNlVm9sdW1lAQkAkQMCBQljdXJyZW50V2gFCHdoSWR4Vm9sBQxjdXJyV2hSZXNWb2wFDGN1cnJXaE1hdFZvbAUOY3VycldoR29vZHNWb2wFD2N1cnJXaExvY2tlZFZvbAQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkECWJwUmVzTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwIBXwQJYnBNYXRMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBApicFByb2RMaXN0AwkAAAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIABQNuaWwJALUJAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgFfBAZvcmRLZXkJAQ5rZXlPcmRlckJ5TGFuZAEFC2xhbmRBc3NldElkBAV3aE9yZAkBCGdldE9yZGVyAQUGb3JkS2V5BAh3aE9yZFJlcwkAtQkCCQCRAwIFBXdoT3JkBQlvcmRJZHhSZXMCAV8ECHdoT3JkTWF0CQC1CQIJAJEDAgUFd2hPcmQFCW9yZElkeE1hdAIBXwQJd2hPcmRQcm9kAwkAAAIJAJEDAgUFd2hPcmQFCm9yZElkeFByb2QCAAUDbmlsCQC1CQIJAJEDAgUFd2hPcmQFCm9yZElkeFByb2QCAV8EDXVzZG5OZWVkMkxvY2sAAAoBBG9yZFICA2FjYwFqBA1icE9yZFJlc1BhcnRzCQC1CQIJAJEDAgUIYnBPcmRSZXMFAWoCAUADCQECIT0CCQCQAwEFDWJwT3JkUmVzUGFydHMAAgkAAgECLkluY29ycmVjdCBvcmRlciBmb3JtYXQsIHNob3VsZCBiZSBhbW91bnRAcHJpY2UEB2JwT3JkQW0JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ1icE9yZFJlc1BhcnRzAAAEB2JwT3JkUHIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ1icE9yZFJlc1BhcnRzAAEDCQBmAgAABQdicE9yZFByCQACAQIXUHJpY2UgY2FuJ3QgYmUgbmVnYXRpdmUECGJwT3JkVXNkCQBrAwUHYnBPcmRBbQUHYnBPcmRQcgUFTVVMVDgEA2JwcgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWJwUmVzTGlzdAUBagQDd2hyCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJY3VycldoUmVzBQFqBAp3aE9yZFBhcnRzCQC1CQIJAJEDAgUId2hPcmRSZXMFAWoCAUAEB3doT3JkQW0JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQp3aE9yZFBhcnRzAAAEB3doT3JkUHIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQp3aE9yZFBhcnRzAAEDAwkBAiE9AgUHYnBPcmRBbQAACQECIT0CBQdicE9yZFByBQd3aE9yZFByBwkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgpQcmljZXMgb2YgCQCRAwIFCHJlc1R5cGVzBQFqAhcgZG9uJ3QgbWF0Y2ghIFdIIHByaWNlPQkApAMBBQd3aE9yZFByAg0sIHlvdXIgcHJpY2U9CQCkAwEFB2JwT3JkUHIECHdoT3JkVXNkCQBrAwUHd2hPcmRBbQUHd2hPcmRQcgUFTVVMVDgDCQAAAgUHYnBPcmRBbQAACQCYCgYJAM0IAggFA2FjYwJfMQkAkQMCBQljdXJyV2hSZXMFAWoJAM0IAggFA2FjYwJfMgkAkQMCBQh3aE9yZFJlcwUBagkAzQgCCAUDYWNjAl8zCQCRAwIFCWJwUmVzTGlzdAUBaggFA2FjYwJfNAgFA2FjYwJfNQgFA2FjYwJfNgMJAGYCBQdicE9yZEFtAAADCQBmAgAABQd3aE9yZEFtAwkAZgIFB2JwT3JkQW0JAQEtAQUHd2hPcmRBbQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg9BdHRlbXB0IHRvIGJ1eSAJAKQDAQUHYnBPcmRBbQIEIG9mIAkAkQMCBQhyZXNUeXBlcwUBagIbLCBidXQgd2FyZWhvdXNlIG9ubHkgc2VsbHMgCQCkAwEJAQEtAQUHd2hPcmRBbQkAmAoGCQDNCAIIBQNhY2MCXzEJAJEDAgUJY3VycldoUmVzBQFqCQDNCAIIBQNhY2MCXzIJAKwCAgkArAICCQCkAwEJAGQCBQd3aE9yZEFtBQdicE9yZEFtAgFACQCkAwEFB3doT3JkUHIJAM0IAggFA2FjYwJfMwkApAMBCQBkAgUDYnByBQdicE9yZEFtCQBkAggFA2FjYwJfNAUHYnBPcmRBbQgFA2FjYwJfNQkAZAIIBQNhY2MCXzYFCGJwT3JkVXNkCQACAQkArAICCQCsAgICD0F0dGVtcHQgdG8gYnV5IAkAkQMCBQhyZXNUeXBlcwUBagIgIHdoaWxlIHdhcmVob3VzZSBkb2Vzbid0IHNlbGwgaXQDCQBmAgUHd2hPcmRBbQAAAwkAZgIJAQEtAQUHYnBPcmRBbQUHd2hPcmRBbQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHNlbGwgCQCkAwEJAQEtAQUHYnBPcmRBbQIEIG9mIAkAkQMCBQhyZXNUeXBlcwUBagIaLCBidXQgd2FyZWhvdXNlIG9ubHkgYnV5cyAJAKQDAQUHd2hPcmRBbQMJAGYCCQEBLQEFB2JwT3JkQW0FA2JwcgkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHNlbGwgCQCkAwEJAQEtAQUHYnBPcmRBbQIULCBidXQgeW91IG9ubHkgaGF2ZSAJAJEDAgUJYnBSZXNMaXN0BQFqAgQgb2YgCQCRAwIFCHJlc1R5cGVzBQFqCQCYCgYJAM0IAggFA2FjYwJfMQkApAMBCQBlAgUDd2hyBQdicE9yZEFtCQDNCAIIBQNhY2MCXzIJAKwCAgkArAICCQCkAwEJAGQCBQd3aE9yZEFtBQdicE9yZEFtAgFACQCkAwEFB3doT3JkUHIJAM0IAggFA2FjYwJfMwIBMAkAZQIIBQNhY2MCXzQFB2JwT3JkQW0JAGUCCAUDYWNjAl81BQhicE9yZFVzZAgFA2FjYwJfNgkAAgEJAKwCAgkArAICAhBBdHRlbXB0IHRvIHNlbGwgCQCRAwIFCHJlc1R5cGVzBQFqAh8gd2hpbGUgd2FyZWhvdXNlIGRvZXNuJ3QgYnV5IGl0BAFyCgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJgKBgUDbmlsBQNuaWwFA25pbAAAAAAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEEb3JkUgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgoBBG9yZE0CA2FjYwFqBA1icE9yZE1hdFBhcnRzCQC1CQIJAJEDAgUIYnBPcmRNYXQFAWoCAUADCQECIT0CCQCQAwEFDWJwT3JkTWF0UGFydHMAAgkAAgECLkluY29ycmVjdCBvcmRlciBmb3JtYXQsIHNob3VsZCBiZSBhbW91bnRAcHJpY2UEB2JwT3JkQW0JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ1icE9yZE1hdFBhcnRzAAAEB2JwT3JkUHIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ1icE9yZE1hdFBhcnRzAAEDCQBmAgAABQdicE9yZFByCQACAQIXUHJpY2UgY2FuJ3QgYmUgbmVnYXRpdmUECGJwT3JkVXNkCQBrAwUHYnBPcmRBbQUHYnBPcmRQcgUFTVVMVDgEA2JwcgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWJwTWF0TGlzdAUBagQDd2hyCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJY3VycldoTWF0BQFqBAp3aE9yZFBhcnRzCQC1CQIJAJEDAgUId2hPcmRNYXQFAWoCAUAEB3doT3JkQW0JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQp3aE9yZFBhcnRzAAAEB3doT3JkUHIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQp3aE9yZFBhcnRzAAEDAwkBAiE9AgUHYnBPcmRBbQAACQECIT0CBQdicE9yZFByBQd3aE9yZFByBwkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgpQcmljZXMgb2YgCQCRAwIFCG1hdFR5cGVzBQFqAhcgZG9uJ3QgbWF0Y2ghIFdIIHByaWNlPQkApAMBBQd3aE9yZFByAg0sIHlvdXIgcHJpY2U9CQCkAwEFB2JwT3JkUHIECHdoT3JkVXNkCQBrAwUHd2hPcmRBbQUHd2hPcmRQcgUFTVVMVDgDCQAAAgUHYnBPcmRBbQAACQCYCgYJAM0IAggFA2FjYwJfMQkAkQMCBQljdXJyV2hNYXQFAWoJAM0IAggFA2FjYwJfMgkAkQMCBQh3aE9yZE1hdAUBagkAzQgCCAUDYWNjAl8zCQCRAwIFCWJwTWF0TGlzdAUBaggFA2FjYwJfNAgFA2FjYwJfNQgFA2FjYwJfNgMJAGYCBQdicE9yZEFtAAADCQBmAgAABQd3aE9yZEFtAwkAZgIFB2JwT3JkQW0JAQEtAQUHd2hPcmRBbQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg9BdHRlbXB0IHRvIGJ1eSAJAKQDAQUHYnBPcmRBbQIEIG9mIAkAkQMCBQhtYXRUeXBlcwUBagIbLCBidXQgd2FyZWhvdXNlIG9ubHkgc2VsbHMgCQCkAwEJAQEtAQUHd2hPcmRBbQkAmAoGCQDNCAIIBQNhY2MCXzEJAJEDAgUJY3VycldoTWF0BQFqCQDNCAIIBQNhY2MCXzIJAKwCAgkArAICCQCkAwEJAGQCBQd3aE9yZEFtBQdicE9yZEFtAgFACQCkAwEFB3doT3JkUHIJAM0IAggFA2FjYwJfMwkApAMBCQBkAgUDYnByBQdicE9yZEFtCQBkAggFA2FjYwJfNAUHYnBPcmRBbQgFA2FjYwJfNQkAZAIIBQNhY2MCXzYFCGJwT3JkVXNkCQACAQkArAICCQCsAgICD0F0dGVtcHQgdG8gYnV5IAkAkQMCBQhtYXRUeXBlcwUBagIgIHdoaWxlIHdhcmVob3VzZSBkb2Vzbid0IHNlbGwgaXQDCQBmAgUHd2hPcmRBbQAAAwkAZgIJAQEtAQUHYnBPcmRBbQUHd2hPcmRBbQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHNlbGwgCQCkAwEJAQEtAQUHYnBPcmRBbQIEIG9mIAkAkQMCBQhtYXRUeXBlcwUBagIaLCBidXQgd2FyZWhvdXNlIG9ubHkgYnV5cyAJAKQDAQUHd2hPcmRBbQMJAGYCCQEBLQEFB2JwT3JkQW0FA2JwcgkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHNlbGwgCQCkAwEJAQEtAQUHYnBPcmRBbQIULCBidXQgeW91IG9ubHkgaGF2ZSAJAJEDAgUJYnBNYXRMaXN0BQFqAgQgb2YgCQCRAwIFCG1hdFR5cGVzBQFqCQCYCgYJAM0IAggFA2FjYwJfMQkApAMBCQBlAgUDd2hyBQdicE9yZEFtCQDNCAIIBQNhY2MCXzIJAKwCAgkArAICCQCkAwEJAGQCBQd3aE9yZEFtBQdicE9yZEFtAgFACQCkAwEFB3doT3JkUHIJAM0IAggFA2FjYwJfMwIBMAkAZQIIBQNhY2MCXzQFB2JwT3JkQW0JAGUCCAUDYWNjAl81BQhicE9yZFVzZAgFA2FjYwJfNgkAAgEJAKwCAgkArAICAhBBdHRlbXB0IHRvIHNlbGwgCQCRAwIFCG1hdFR5cGVzBQFqAh8gd2hpbGUgd2FyZWhvdXNlIGRvZXNuJ3QgYnV5IGl0BAFtCgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJgKBgUDbmlsBQNuaWwFA25pbAgFAXICXzQIBQFyAl81CAUBcgJfNgoBBSRmMV8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEEb3JkTQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMV8yAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgoBBG9yZFACA2FjYw1icE9yZFByb2RJdGVtBAFqCAUDYWNjAl83BA5icE9yZFByb2RQYXJ0cwkAtQkCBQ1icE9yZFByb2RJdGVtAgFAAwkBAiE9AgkAkAMBBQ5icE9yZFByb2RQYXJ0cwACCQACAQIuSW5jb3JyZWN0IG9yZGVyIGZvcm1hdCwgc2hvdWxkIGJlIGFtb3VudEBwcmljZQQHYnBPcmRBbQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmJwT3JkUHJvZFBhcnRzAAAEB2JwT3JkUHIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5icE9yZFByb2RQYXJ0cwABAwkAZgIAAAUHYnBPcmRQcgkAAgECF1ByaWNlIGNhbid0IGJlIG5lZ2F0aXZlBAhicE9yZFVzZAkAawMFB2JwT3JkQW0FB2JwT3JkUHIFBU1VTFQ4BANicHIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpicFByb2RMaXN0BQFqBAN3aHIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpjdXJyV2hQcm9kBQFqBAp3aE9yZFBhcnRzCQC1CQIJAJEDAgUJd2hPcmRQcm9kBQFqAgFABAd3aE9yZEFtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKd2hPcmRQYXJ0cwAABAd3aE9yZFByCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKd2hPcmRQYXJ0cwABAwMJAQIhPQIFB2JwT3JkQW0AAAkBAiE9AgUHYnBPcmRQcgUHd2hPcmRQcgcJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIKUHJpY2VzIG9mIAkAkQMCBQlwcm9kVHlwZXMFAWoCFyBkb24ndCBtYXRjaCEgV0ggcHJpY2U9CQCkAwEFB3doT3JkUHICDSwgeW91ciBwcmljZT0JAKQDAQUHYnBPcmRQcgQId2hPcmRVc2QJAGsDBQd3aE9yZEFtBQd3aE9yZFByBQVNVUxUOAMJAAACBQdicE9yZEFtAAAJAJkKBwkAzQgCCAUDYWNjAl8xCQCRAwIFCmN1cnJXaFByb2QFAWoJAM0IAggFA2FjYwJfMgkAkQMCBQl3aE9yZFByb2QFAWoJAM0IAggFA2FjYwJfMwkAkQMCBQpicFByb2RMaXN0BQFqCAUDYWNjAl80CAUDYWNjAl81CAUDYWNjAl82CQBkAggFA2FjYwJfNwABAwkAZgIFB2JwT3JkQW0AAAMJAGYCAAAFB3doT3JkQW0DCQBmAgUHYnBPcmRBbQkBAS0BBQd3aE9yZEFtCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICD0F0dGVtcHQgdG8gYnV5IAkApAMBBQdicE9yZEFtAgQgb2YgCQCRAwIFCXByb2RUeXBlcwUBagIbLCBidXQgd2FyZWhvdXNlIG9ubHkgc2VsbHMgCQCkAwEJAQEtAQUHd2hPcmRBbQkAmQoHCQDNCAIIBQNhY2MCXzEJAJEDAgUKY3VycldoUHJvZAUBagkAzQgCCAUDYWNjAl8yCQCsAgIJAKwCAgkApAMBCQBkAgUHd2hPcmRBbQUHYnBPcmRBbQIBQAkApAMBBQd3aE9yZFByCQDNCAIIBQNhY2MCXzMJAKQDAQkAZAIFA2JwcgUHYnBPcmRBbQkAZAIIBQNhY2MCXzQFB2JwT3JkQW0IBQNhY2MCXzUJAGQCCAUDYWNjAl82BQhicE9yZFVzZAkAZAIIBQNhY2MCXzcAAQkAAgEJAKwCAgkArAICAg9BdHRlbXB0IHRvIGJ1eSAJAJEDAgUJcHJvZFR5cGVzBQFqAiAgd2hpbGUgd2FyZWhvdXNlIGRvZXNuJ3Qgc2VsbCBpdAMJAGYCBQd3aE9yZEFtAAADCQBmAgkBAS0BBQdicE9yZEFtBQd3aE9yZEFtCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gc2VsbCAJAKQDAQkBAS0BBQdicE9yZEFtAgQgb2YgCQCRAwIFCXByb2RUeXBlcwUBagIaLCBidXQgd2FyZWhvdXNlIG9ubHkgYnV5cyAJAKQDAQUHd2hPcmRBbQMJAGYCCQEBLQEFB2JwT3JkQW0FA2JwcgkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHNlbGwgCQCkAwEJAQEtAQUHYnBPcmRBbQIULCBidXQgeW91IG9ubHkgaGF2ZSAJAJEDAgUKYnBQcm9kTGlzdAUBagIEIG9mIAkAkQMCBQlwcm9kVHlwZXMFAWoJAJkKBwkAzQgCCAUDYWNjAl8xCQCkAwEJAGUCBQN3aHIFB2JwT3JkQW0JAM0IAggFA2FjYwJfMgkArAICCQCsAgIJAKQDAQkAZAIFB3doT3JkQW0FB2JwT3JkQW0CAUAJAKQDAQUHd2hPcmRQcgkAzQgCCAUDYWNjAl8zAgEwCQBlAggFA2FjYwJfNAUHYnBPcmRBbQkAZQIIBQNhY2MCXzUFCGJwT3JkVXNkCAUDYWNjAl82CQBkAggFA2FjYwJfNwABCQACAQkArAICCQCsAgICEEF0dGVtcHQgdG8gc2VsbCAJAJEDAgUJcHJvZFR5cGVzBQFqAh8gd2hpbGUgd2FyZWhvdXNlIGRvZXNuJ3QgYnV5IGl0BAFwCgACJGwFCWJwT3JkUHJvZAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJkKBwUDbmlsBQNuaWwFA25pbAgFAW0CXzQIBQFtAl81CAUBbQJfNgAACgEFJGYyXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQRvcmRQAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYyXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyA1MAkBBSRmMl8yAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIECHZvbFNhbGRvCAUBcAJfNAQFd2hTdHIJALoJAgkAzAgCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhWb2wJAMwIAgkAuQkCCAUBcgJfMQIBXwkAzAgCCQC5CQIIBQFtAl8xAgFfCQDMCAIJALkJAggFAXACXzECAV8JAMwIAgkApAMBBQh2b2xTYWxkbwUDbmlsAgE6BAtuZXdXaE9yZFN0cgkAugkCCQDMCAIJALkJAggFAXICXzICAV8JAMwIAgkAuQkCCAUBbQJfMgIBXwkAzAgCCQC5CQIIBQFwAl8yAgFfBQNuaWwCAToECG5ld0JwU3RyCQC6CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQC5CQIIBQFyAl8zAgFfCQDMCAIJALkJAggFAW0CXzMCAV8JAMwIAgkAuQkCCAUBcAJfMwIBXwUDbmlsAgE6BAZ3aFNhdmUJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag1zYXZlV2FyZWhvdXNlCQDMCAIFBXdoU3RyCQDMCAIFC2xhbmRBc3NldElkBQNuaWwFA25pbAMJAAACBQZ3aFNhdmUFBndoU2F2ZQQGYnBTYXZlCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQmFja3BhY2sJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUIbmV3QnBTdHIFA25pbAUDbmlsAwkAAAIFBmJwU2F2ZQUGYnBTYXZlBAdhY3Rpb25zCQDMCAIJAQtTdHJpbmdFbnRyeQIFBm9yZEtleQULbmV3V2hPcmRTdHIFA25pbAQLdXNkV2gyQnBGZWUJAGsDCAUBcAJfNQUKQVVDVElPTkZFRQUFTVVMVDYEDXVzZFdoMkJwU2FsZG8IBQFwAl81BAhhY3Rpb25zMQMJAGYCBQ11c2RXaDJCcFNhbGRvAAAJAM0IAgUHYWN0aW9ucwkBDlNjcmlwdFRyYW5zZmVyAwUGY2FsbGVyCQBlAggFAXACXzUFC3VzZFdoMkJwRmVlBQt1c2RuQXNzZXRJZAUHYWN0aW9ucwQLdXNkQnAyV2hGZWUJAGsDCAUBcAJfNgUKQVVDVElPTkZFRQUFTVVMVDYEDXVzZEJwMldoU2FsZG8IBQFwAl82AwkAZgIFDXVzZEJwMldoU2FsZG8AAAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABANhbXQIBQNwbXQGYW1vdW50BApwbXRBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIIBQNwbXQHYXNzZXRJZAIeV0FWRVMgY2FuJ3QgYmUgdXNlZCBhcyBwYXltZW50AwkBAiE9AgUKcG10QXNzZXRJZAULdXNkbkFzc2V0SWQJAAIBAhNVU0ROIHBheW1lbnRzIG9ubHkhAwkBAiE9AgUDYW10BQ11c2RCcDJXaFNhbGRvCQACAQkArAICAhJQYXltZW50IG5lZWRlZCBpcyAJAKQDAQUNdXNkQnAyV2hTYWxkbwkAzQgCBQhhY3Rpb25zMQkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUJbGFuZE93bmVyCQBlAggFAXACXzYFC3VzZEJwMldoRmVlBQt1c2RuQXNzZXRJZAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECEk5vIHBheW1lbnRzIG5lZWRlZAUIYWN0aW9uczEJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AUd/DAg==", "height": 2519768, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: EvF1KUv7Nuwf1uCKFpFtaARnebs1qPPP3iuPt38J29ne Next: 3shi6okZxpcX53FyJLAF2pi4qu7ndVDoRFnu54RvBMts Diff:
OldNewDifferences
10451045
10461046 ci(ch(ch(ch(ch(ch(ch(aN, 0), 1), 2), 3), 4), 5), 6)
10471047 }
1048- func cW (aJ,by) = {
1049- let dG = split(do[by], "@")
1050- if ((size(dG) != 2))
1048+ func cW (aJ,dG) = {
1049+ let by = aJ._7
1050+ let dH = split(dG, "@")
1051+ if ((size(dH) != 2))
10511052 then throw("Incorrect order format, should be amount@price")
10521053 else {
1053- let dx = parseIntValue(dG[0])
1054- let dy = parseIntValue(dG[1])
1054+ let dx = parseIntValue(dH[0])
1055+ let dy = parseIntValue(dH[1])
10551056 if ((0 > dy))
10561057 then throw("Price can't be negative")
10571058 else {
10681069 else {
10691070 let dE = fraction(dC, dD, c)
10701071 if ((dx == 0))
1071- then $Tuple6((aJ._1 :+ cx[by]), (aJ._2 :+ dv[by]), (aJ._3 :+ dr[by]), aJ._4, aJ._5, aJ._6)
1072+ then $Tuple7((aJ._1 :+ cx[by]), (aJ._2 :+ dv[by]), (aJ._3 :+ dr[by]), aJ._4, aJ._5, aJ._6, (aJ._7 + 1))
10721073 else if ((dx > 0))
10731074 then if ((0 > dC))
10741075 then if ((dx > -(dC)))
10751076 then throw(((((("Attempt to buy " + toString(dx)) + " of ") + M[by]) + ", but warehouse only sells ") + toString(-(dC))))
1076- else $Tuple6((aJ._1 :+ cx[by]), (aJ._2 :+ ((toString((dC + dx)) + "@") + toString(dD))), (aJ._3 :+ toString((dA + dx))), (aJ._4 + dx), aJ._5, (aJ._6 + dz))
1077+ else $Tuple7((aJ._1 :+ cx[by]), (aJ._2 :+ ((toString((dC + dx)) + "@") + toString(dD))), (aJ._3 :+ toString((dA + dx))), (aJ._4 + dx), aJ._5, (aJ._6 + dz), (aJ._7 + 1))
10771078 else throw((("Attempt to buy " + M[by]) + " while warehouse doesn't sell it"))
10781079 else if ((dC > 0))
10791080 then if ((-(dx) > dC))
10801081 then throw(((((("Attempt to sell " + toString(-(dx))) + " of ") + M[by]) + ", but warehouse only buys ") + toString(dC)))
10811082 else if ((-(dx) > dA))
10821083 then throw(((((("Attempt to sell " + toString(-(dx))) + ", but you only have ") + dr[by]) + " of ") + M[by]))
1083- else $Tuple6((aJ._1 :+ toString((cN - dx))), (aJ._2 :+ ((toString((dC + dx)) + "@") + toString(dD))), (aJ._3 :+ "0"), (aJ._4 - dx), (aJ._5 - dz), aJ._6)
1084+ else $Tuple7((aJ._1 :+ toString((cN - dx))), (aJ._2 :+ ((toString((dC + dx)) + "@") + toString(dD))), (aJ._3 :+ "0"), (aJ._4 - dx), (aJ._5 - dz), aJ._6, (aJ._7 + 1))
10841085 else throw((("Attempt to sell " + M[by]) + " while warehouse doesn't buy it"))
10851086 }
10861087 }
10881089 }
10891090
10901091 let aC = {
1091- let aL = [0, 1, 2, 3, 4, 5]
1092+ let aL = do
10921093 let aM = size(aL)
1093- let aN = $Tuple6(nil, nil, nil, bj._4, bj._5, bj._6)
1094+ let aN = $Tuple7(nil, nil, nil, bj._4, bj._5, bj._6, 0)
10941095 func cY (aP,aQ) = if ((aQ >= aM))
10951096 then aP
10961097 else cW(aP, aL[aQ])
11031104 }
11041105 let da = aC._4
11051106 let db = makeString_2C([aH[ap], makeString(cT._1, "_"), makeString(bj._1, "_"), makeString(aC._1, "_"), toString(da)], ":")
1106- let dH = makeString_2C([makeString(cT._2, "_"), makeString(bj._2, "_"), makeString(aC._2, "_")], ":")
1107- let dI = makeString_2C([bv[al], makeString(cT._3, "_"), makeString(bj._3, "_"), makeString(aC._3, "_")], ":")
1107+ let dI = makeString_2C([makeString(cT._2, "_"), makeString(bj._2, "_"), makeString(aC._2, "_")], ":")
1108+ let dJ = makeString_2C([bv[al], makeString(cT._3, "_"), makeString(bj._3, "_"), makeString(aC._3, "_")], ":")
11081109 let dc = invoke(y, "saveWarehouse", [db, Y], nil)
11091110 if ((dc == dc))
11101111 then {
1111- let dJ = invoke(y, "updateBackpack", [ac, dI], nil)
1112- if ((dJ == dJ))
1112+ let dK = invoke(y, "updateBackpack", [ac, dJ], nil)
1113+ if ((dK == dK))
11131114 then {
1114- let dK = [StringEntry(aB, dH)]
1115- let dL = fraction(aC._5, J, b)
1116- let dM = aC._5
1117- let dN = if ((dM > 0))
1118- then (dK :+ ScriptTransfer(df, (aC._5 - dL), f))
1119- else dK
1120- let dO = fraction(aC._6, J, b)
1121- let dP = aC._6
1122- if ((dP > 0))
1115+ let dL = [StringEntry(aB, dI)]
1116+ let dM = fraction(aC._5, J, b)
1117+ let dN = aC._5
1118+ let dO = if ((dN > 0))
1119+ then (dL :+ ScriptTransfer(df, (aC._5 - dM), f))
1120+ else dL
1121+ let dP = fraction(aC._6, J, b)
1122+ let dQ = aC._6
1123+ if ((dQ > 0))
11231124 then if ((size(bp.payments) != 1))
11241125 then throw("exactly 1 payment must be attached")
11251126 else {
11281129 let bG = valueOrErrorMessage(bE.assetId, "WAVES can't be used as payment")
11291130 if ((bG != f))
11301131 then throw("USDN payments only!")
1131- else if ((bF != dP))
1132- then throw(("Payment needed is " + toString(dP)))
1133- else (dN :+ ScriptTransfer(addressFromStringValue(dk), (aC._6 - dO), f))
1132+ else if ((bF != dQ))
1133+ then throw(("Payment needed is " + toString(dQ)))
1134+ else (dO :+ ScriptTransfer(addressFromStringValue(dk), (aC._6 - dP), f))
11341135 }
11351136 else if ((size(bp.payments) != 0))
11361137 then throw("No payments needed")
1137- else dN
1138+ else dO
11381139 }
11391140 else throw("Strict value is not equal to itself.")
11401141 }
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 = 100000000
99
1010 let d = 10000000000
1111
1212 let e = take(drop(this.bytes, 1), 1)
1313
1414 let f = {
1515 let g = e
1616 if ((base58'2W' == g))
1717 then base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
1818 else if ((base58'2T' == g))
1919 then base58'HezsdQuRDtzksAYUy97gfhKy7Z1NW2uXYSHA3bgqenNZ'
2020 else throw("Unknown chain")
2121 }
2222
2323 let h = {
2424 let g = e
2525 if ((base58'2W' == g))
2626 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
2727 else if ((base58'2T' == g))
2828 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
2929 else throw("Unknown chain")
3030 }
3131
3232 func i (j,k) = valueOrErrorMessage(getString(j, k), makeString(["mandatory ", toString(j), ".", k, " is not defined"], ""))
3333
3434
3535 func l (k,m) = valueOrElse(getInteger(this, k), m)
3636
3737
3838 let n = 1
3939
4040 let o = 2
4141
4242 let p = 3
4343
4444 func q () = "%s__restConfig"
4545
4646
4747 func r () = "%s__restAddr"
4848
4949
5050 func s (t) = split_4C(i(t, q()), a)
5151
5252
5353 func u (v,w) = valueOrErrorMessage(addressFromString(v[w]), ("Rest cfg doesn't contain address at index " + toString(w)))
5454
5555
5656 let x = addressFromStringValue(valueOrElse(getString(this, r()), h))
5757
5858 let v = s(x)
5959
6060 let y = u(v, n)
6161
6262 let z = "Africa_F_Africa"
6363
6464 let A = 6
6565
6666 let B = 10000000000
6767
6868 let C = 158549
6969
7070 let D = 10000
7171
7272 let E = 200
7373
7474 let F = 300
7575
7676 let G = "LAND"
7777
7878 let H = "DUCK"
7979
8080 let I = 10000000000
8181
8282 let J = 10000
8383
8484 let K = ["Oil", "Ore", "Wood", "Sand", "Clay", "Organic"]
8585
8686 let L = ["Fuel", "Metal", "Plank", "Glass", "Plastic", "Protein"]
8787
8888 let M = ["First Aid Kit", "Backpack", "Food Ration", "Jet Pack", "Radar"]
8989
9090 let N = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
9191
9292 let O = ["1_1_1_2_2_5_1_10", "2_5_5_2_7_5_2_100", "1_1_1_2_2_5_1_10", "9_9_1_5_5_1_5_100", "1_5_1_5_5_1_1_100"]
9393
9494 let P = 0
9595
9696 let Q = 1
9797
9898 let R = 2
9999
100100 let S = 3
101101
102102 let T = 4
103103
104104 func U (V,W) = ((("factoryWhByContinentAndRes_" + V) + "_") + toString(W))
105105
106106
107107 func X (Y) = ("landOrder_" + Y)
108108
109109
110110 func Z (aa) = ("stakedDuckByOwner_" + aa)
111111
112112
113113 func ab (ac) = ("backPack_" + ac)
114114
115115
116116 func ad (ac) = ("duckLocation_" + ac)
117117
118118
119119 func ae () = "contractsBlocked"
120120
121121
122122 func af (ag) = ("nftOwner_" + ag)
123123
124124
125125 func ah (ag) = ("stakedTime_" + ag)
126126
127127
128128 let ai = 0
129129
130130 let aj = 1
131131
132132 let ak = 2
133133
134134 let al = 0
135135
136136 let am = 1
137137
138138 let an = 2
139139
140140 let ao = 3
141141
142142 let ap = 0
143143
144144 let aq = 1
145145
146146 let ar = 2
147147
148148 let as = 3
149149
150150 let at = 4
151151
152152 let au = 0
153153
154154 let av = 1
155155
156156 let aw = 2
157157
158158 func ax (ay) = {
159159 let g = ay
160160 if ($isInstanceOf(g, "String"))
161161 then {
162162 let az = g
163163 az
164164 }
165165 else throw("fail to cast into String")
166166 }
167167
168168
169169 func aA (aB) = {
170170 let aC = split(valueOrElse(getString(aB), "0@0_0@0_0@0_0@0_0@0_0@0:0@0_0@0_0@0_0@0_0@0_0@0:"), ":")
171171 [if ((size(split(aC[au], "_")) == A))
172172 then aC[au]
173173 else "0@0_0@0_0@0_0@0_0@0_0@0", if ((size(split(aC[av], "_")) == A))
174174 then aC[av]
175175 else "0@0_0@0_0@0_0@0_0@0_0@0", aC[aw]]
176176 }
177177
178178
179179 func aD (aE) = {
180180 let aF = split(aE, "_")
181181 ((I * (parseIntValue(aF[1]) + 1)) * parseIntValue(aF[0]))
182182 }
183183
184184
185185 func aG (aH) = {
186186 func aI (aJ,aK) = (aJ + parseIntValue(aK))
187187
188188 let aL = split(aH[aq], "_")
189189 let aM = size(aL)
190190 let aN = 0
191191 func aO (aP,aQ) = if ((aQ >= aM))
192192 then aP
193193 else aI(aP, aL[aQ])
194194
195195 func aR (aP,aQ) = if ((aQ >= aM))
196196 then aP
197197 else throw("List size exceeds 6")
198198
199199 aR(aO(aO(aO(aO(aO(aO(aN, 0), 1), 2), 3), 4), 5), 6)
200200 }
201201
202202
203203 func aS (aH) = {
204204 func aI (aJ,aK) = (aJ + parseIntValue(aK))
205205
206206 let aL = split(aH[ar], "_")
207207 let aM = size(aL)
208208 let aN = 0
209209 func aO (aP,aQ) = if ((aQ >= aM))
210210 then aP
211211 else aI(aP, aL[aQ])
212212
213213 func aR (aP,aQ) = if ((aQ >= aM))
214214 then aP
215215 else throw("List size exceeds 6")
216216
217217 aR(aO(aO(aO(aO(aO(aO(aN, 0), 1), 2), 3), 4), 5), 6)
218218 }
219219
220220
221221 func aT (aH) = {
222222 let aU = aH[as]
223223 if ((aU == ""))
224224 then 0
225225 else {
226226 func aI (aJ,aK) = (aJ + parseIntValue(aK))
227227
228228 let aL = split_4C(aU, "_")
229229 let aM = size(aL)
230230 let aN = 0
231231 func aO (aP,aQ) = if ((aQ >= aM))
232232 then aP
233233 else aI(aP, aL[aQ])
234234
235235 func aR (aP,aQ) = if ((aQ >= aM))
236236 then aP
237237 else throw("List size exceeds 50")
238238
239239 aR(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aN, 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)
240240 }
241241 }
242242
243243
244244 func aV (aW,W,aX,aY) = {
245245 let aZ = U(aW, W)
246246 let ba = valueOrElse(getInteger(aZ), 0)
247247 let bb = if ((ba > B))
248248 then 0
249249 else if (((ba + aX) > B))
250250 then (B - ba)
251251 else aX
252252 let bc = (fraction(bb, ((E * C) - fraction(((100 * ba) + (50 * bb)), C, B)), d) + fraction((aX - bb), C, c))
253253 let bd = (aY - (aY / 100))
254254 if (((bd * aX) > (bc * c)))
255255 then throw((((((((((("Actual price = " + toString(bc)) + " / ") + toString(aX)) + " < minPrice = ") + toString(aY)) + ", (") + aW) + ", ") + K[W]) + ")"))
256256 else $Tuple2(IntegerEntry(aZ, (ba + aX)), bc)
257257 }
258258
259259
260260 func be (aW,bf,aX,bg) = {
261261 let aZ = U(aW, bf)
262262 let ba = valueOrElse(getInteger(aZ), 0)
263263 let bh = if ((ba > B))
264264 then min([aX, (ba - B)])
265265 else 0
266266 let bi = min([ba, (aX - bh)])
267267 let bj = (bi + bh)
268268 let bk = (fraction(bi, ((F * C) - fraction(((100 * ba) - (50 * bi)), C, B)), d) + fraction(bh, (2 * C), c))
269269 let bl = (bg + (bg / 100))
270270 if (((bk * c) > (bl * bj)))
271271 then throw((((((((((("Actual price = " + toString(bk)) + " / ") + toString(bj)) + " > maxPrice = ") + toString(bg)) + ", (") + aW) + ", ") + L[bf]) + ")"))
272272 else $Tuple3(IntegerEntry(aZ, (ba - bj)), bk, bj)
273273 }
274274
275275
276276 func bm (bn) = {
277277 let aC = split(valueOrElse(getString(y, bn), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
278278 [toString(valueOrElse(parseInt(aC[al]), 0)), if ((size(split(aC[am], "_")) == A))
279279 then aC[am]
280280 else "0_0_0_0_0_0", if ((size(split(aC[an], "_")) == A))
281281 then aC[an]
282282 else "0_0_0_0_0_0", aC[ao]]
283283 }
284284
285285
286286 func bo () = if (valueOrElse(getBoolean(y, ae()), false))
287287 then throw("Contracts are under maintenance")
288288 else unit
289289
290290
291291 @Callable(bp)
292292 func constructorV1 (bq) = if ((bp.caller != this))
293293 then throw("Permission denied")
294294 else [StringEntry(r(), bq)]
295295
296296
297297
298298 @Callable(bp)
299299 func sellResources (br,bs) = {
300300 let bt = bo()
301301 if ((bt == bt))
302302 then {
303303 let ac = valueOrErrorMessage(getString(y, Z(toString(bp.caller))), "You don't have a duck staked")
304304 if ((size(bp.payments) != 0))
305305 then throw("sellResources doesn't require any payments")
306306 else {
307307 let bu = split(valueOrElse(getString(y, ad(ac)), z), "_")
308308 if ((bu[aj] != "F"))
309309 then throw(("Duck location type should be Factory, but is " + bu[aj]))
310310 else {
311311 let aW = bu[ak]
312312 let bv = bm(ab(ac))
313313 let bw = split(bv[am], "_")
314314 func bx (aJ,by) = if ((br[by] > parseIntValue(bw[by])))
315315 then throw(((((("You have " + bw[by]) + " of ") + K[by]) + ", but tried to sell ") + toString(br[by])))
316316 else if ((0 > br[by]))
317317 then throw(((("You tried to sell negative amount of " + K[by]) + ": ") + toString(br[by])))
318318 else if ((br[by] > 0))
319319 then {
320320 let bz = aV(aW, by, br[by], bs[by])
321321 $Tuple3((aJ._1 :+ bz._1), (aJ._2 :+ toString((parseIntValue(bw[by]) - br[by]))), (aJ._3 + bz._2))
322322 }
323323 else $Tuple3(aJ._1, (aJ._2 :+ bw[by]), aJ._3)
324324
325325 let bA = {
326326 let aL = [0, 1, 2, 3, 4, 5]
327327 let aM = size(aL)
328328 let aN = $Tuple3(nil, nil, 0)
329329 func aO (aP,aQ) = if ((aQ >= aM))
330330 then aP
331331 else bx(aP, aL[aQ])
332332
333333 func aR (aP,aQ) = if ((aQ >= aM))
334334 then aP
335335 else throw("List size exceeds 6")
336336
337337 aR(aO(aO(aO(aO(aO(aO(aN, 0), 1), 2), 3), 4), 5), 6)
338338 }
339339 let bB = makeString([bv[al], makeString(bA._2, "_"), bv[an], bv[ao]], ":")
340340 let bC = ax(invoke(y, "updateBackpack", [ac, bB], nil))
341341 $Tuple2((bA._1 :+ ScriptTransfer(bp.caller, bA._3, f)), bC)
342342 }
343343 }
344344 }
345345 else throw("Strict value is not equal to itself.")
346346 }
347347
348348
349349
350350 @Callable(bp)
351351 func buyMaterials (br,bD) = {
352352 let bt = bo()
353353 if ((bt == bt))
354354 then {
355355 let ac = valueOrErrorMessage(getString(y, Z(toString(bp.caller))), "You don't have a duck staked")
356356 if ((size(bp.payments) != 1))
357357 then throw("exactly 1 payment must be attached")
358358 else {
359359 let bE = bp.payments[0]
360360 let bF = bE.amount
361361 let bG = valueOrErrorMessage(bE.assetId, "WAVES can't be used as payment")
362362 if ((bG != f))
363363 then throw("USDN payments only!")
364364 else {
365365 let bu = split(valueOrElse(getString(y, ad(ac)), z), "_")
366366 if ((bu[aj] != "F"))
367367 then throw(("Duck location type should be Factory, but is " + bu[aj]))
368368 else {
369369 let aW = bu[ak]
370370 let bv = bm(ab(ac))
371371 let bH = split(bv[an], "_")
372372 func bI (aJ,by) = if ((0 > br[by]))
373373 then throw(((("You tried to buy negative amount of " + L[by]) + ": ") + toString(br[by])))
374374 else if ((br[by] > 0))
375375 then {
376376 let bz = be(aW, by, br[by], bD[by])
377377 $Tuple3((aJ._1 :+ bz._1), (aJ._2 :+ toString((parseIntValue(bH[by]) + bz._3))), (aJ._3 + bz._2))
378378 }
379379 else $Tuple3(aJ._1, (aJ._2 :+ bH[by]), aJ._3)
380380
381381 let bA = {
382382 let aL = [0, 1, 2, 3, 4, 5]
383383 let aM = size(aL)
384384 let aN = $Tuple3(nil, nil, 0)
385385 func aO (aP,aQ) = if ((aQ >= aM))
386386 then aP
387387 else bI(aP, aL[aQ])
388388
389389 func aR (aP,aQ) = if ((aQ >= aM))
390390 then aP
391391 else throw("List size exceeds 6")
392392
393393 aR(aO(aO(aO(aO(aO(aO(aN, 0), 1), 2), 3), 4), 5), 6)
394394 }
395395 if ((bA._3 > bF))
396396 then throw(((("Insufficient payment! Attached=" + toString(bF)) + ", required=") + toString(bA._3)))
397397 else {
398398 let bB = makeString([bv[al], bv[am], makeString(bA._2, "_"), bv[ao]], ":")
399399 let bC = ax(invoke(y, "updateBackpack", [ac, bB], nil))
400400 let t = if (((bF - bA._3) > 0))
401401 then [ScriptTransfer(bp.caller, (bF - bA._3), f)]
402402 else nil
403403 $Tuple2((bA._1 ++ t), bC)
404404 }
405405 }
406406 }
407407 }
408408 }
409409 else throw("Strict value is not equal to itself.")
410410 }
411411
412412
413413
414414 @Callable(bp)
415415 func exchangeResources (br) = {
416416 let bt = bo()
417417 if ((bt == bt))
418418 then {
419419 let ac = valueOrErrorMessage(getString(y, Z(toString(bp.caller))), "You don't have a duck staked")
420420 if ((size(bp.payments) != 1))
421421 then throw("exactly 1 payment must be attached")
422422 else {
423423 let bE = bp.payments[0]
424424 let bF = bE.amount
425425 let bG = valueOrErrorMessage(bE.assetId, "WAVES can't be used as payment")
426426 if ((bG != f))
427427 then throw("USDN payments only!")
428428 else {
429429 let bu = split(valueOrElse(getString(y, ad(ac)), z), "_")
430430 if ((bu[aj] != "F"))
431431 then throw(("Duck location type should be Factory, but is " + bu[aj]))
432432 else {
433433 let aW = bu[ak]
434434 let bv = bm(ab(ac))
435435 let bw = split(bv[am], "_")
436436 let bH = split(bv[an], "_")
437437 func bJ (aJ,by) = {
438438 let aZ = U(aW, by)
439439 let ba = valueOrElse(getInteger(aZ), 0)
440440 let bK = br[by]
441441 if ((bK > parseIntValue(bw[by])))
442442 then throw(((((("You have " + bw[by]) + " of ") + K[by]) + ", but tried to exchange ") + toString(bK)))
443443 else if ((0 > bK))
444444 then throw(((("You tried to exchange negative amount of " + K[by]) + ": ") + toString(bK)))
445445 else if ((bK > 0))
446446 then $Tuple4((aJ._1 :+ toString((parseIntValue(bw[by]) - bK))), (aJ._2 :+ toString((parseIntValue(bH[by]) + bK))), (aJ._3 + fraction(bK, C, c)), (aJ._4 :+ IntegerEntry(aZ, ba)))
447447 else $Tuple4((aJ._1 :+ bw[by]), (aJ._2 :+ bH[by]), aJ._3, aJ._4)
448448 }
449449
450450 let bA = {
451451 let aL = [0, 1, 2, 3, 4, 5]
452452 let aM = size(aL)
453453 let aN = $Tuple4(nil, nil, 0, nil)
454454 func aO (aP,aQ) = if ((aQ >= aM))
455455 then aP
456456 else bJ(aP, aL[aQ])
457457
458458 func aR (aP,aQ) = if ((aQ >= aM))
459459 then aP
460460 else throw("List size exceeds 6")
461461
462462 aR(aO(aO(aO(aO(aO(aO(aN, 0), 1), 2), 3), 4), 5), 6)
463463 }
464464 if ((bA._3 > bF))
465465 then throw(((("Insufficient payment! Attached=" + toString(bF)) + ", required=") + toString(bA._3)))
466466 else {
467467 let bB = makeString([bv[al], makeString(bA._1, "_"), makeString(bA._2, "_"), bv[ao]], ":")
468468 let bC = ax(invoke(y, "updateBackpack", [ac, bB], nil))
469469 let t = if (((bF - bA._3) > 0))
470470 then [ScriptTransfer(bp.caller, (bF - bA._3), f)]
471471 else nil
472472 $Tuple2((t ++ bA._4), bC)
473473 }
474474 }
475475 }
476476 }
477477 }
478478 else throw("Strict value is not equal to itself.")
479479 }
480480
481481
482482
483483 @Callable(bp)
484484 func buyGoods (bL,bM,bN) = {
485485 let bt = bo()
486486 if ((bt == bt))
487487 then if ((size(bp.payments) != 0))
488488 then throw("buyGoods doesn't require any payments")
489489 else if ((0 > bN))
490490 then throw("Quantity should be positive")
491491 else {
492492 let ac = valueOrErrorMessage(getString(y, Z(toString(bp.caller))), "You don't have a duck staked")
493493 let bu = split(valueOrElse(getString(y, ad(ac)), z), "_")
494494 if ((bu[aj] != "M"))
495495 then throw(("Duck location type should be Manufactory, but is " + bu[aj]))
496496 else {
497497 let bO = bu[ai]
498498 let bv = bm(ab(ac))
499499 let bH = split(bv[an], "_")
500500 if (if ((0 > bL))
501501 then true
502502 else (bL >= size(O)))
503503 then throw(("Unknown product idx=" + toString(bL)))
504504 else {
505505 let bP = (bL % size(N))
506506 if ((N[bP] != bO))
507507 then throw(((("This product is available in " + N[bP]) + ", but you are in ") + bO))
508508 else {
509509 let bQ = split(O[bL], "_")
510510 if ((size(bQ) != (A + 2)))
511511 then throw(("Fatal: unknown recipe: " + O[bL]))
512512 else {
513513 let bR = if ((bv[ao] == ""))
514514 then nil
515515 else split(bv[ao], "_")
516516 func bS (aJ,bT) = {
517517 let bU = aJ._2
518518 let bV = if ((size(bR) > bU))
519519 then split(bR[bU], ",")
520520 else ["0", "0", "0"]
521521 let bW = bV[0]
522522 let bX = parseIntValue(bW)
523523 let bY = bV[1]
524524 let bZ = parseIntValue(bY)
525525 let ca = bV[2]
526526 let cb = parseIntValue(ca)
527527 let aX = (bN * parseIntValue(bQ[7]))
528528 let cc = if ((bU == bL))
529529 then {
530530 let g = bM
531531 if ((1 == g))
532532 then ((((toString((bX + aX)) + ",") + bY) + ",") + ca)
533533 else if ((2 == g))
534534 then ((((bW + ",") + toString((bZ + aX))) + ",") + ca)
535535 else if ((3 == g))
536536 then ((((bW + ",") + bY) + ",") + toString((cb + aX)))
537537 else throw(("Product level should be 1..3, not " + toString(bM)))
538538 }
539539 else ((((bW + ",") + bY) + ",") + ca)
540540 $Tuple2((aJ._1 :+ cc), (bU + 1))
541541 }
542542
543543 let cd = ( let aL = O
544544 let aM = size(aL)
545545 let aN = $Tuple2(nil, 0)
546546 func aO (aP,aQ) = if ((aQ >= aM))
547547 then aP
548548 else bS(aP, aL[aQ])
549549
550550 func aR (aP,aQ) = if ((aQ >= aM))
551551 then aP
552552 else throw("List size exceeds 50")
553553
554554 aR(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aO(aN, 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
555555 func ce (aJ,by) = {
556556 let cf = (parseIntValue(bQ[by]) * bN)
557557 let cg = parseIntValue(bH[by])
558558 if ((cf > cg))
559559 then throw(((((((("You have " + bH[by]) + " of ") + L[by]) + ", but recipe requires ") + toString(cf)) + " for quantity ") + toString(bN)))
560560 else if ((cf > 0))
561561 then (aJ :+ toString((cg - cf)))
562562 else (aJ :+ bH[by])
563563 }
564564
565565 let bA = {
566566 let aL = [0, 1, 2, 3, 4, 5]
567567 let aM = size(aL)
568568 let aN = nil
569569 func ch (aP,aQ) = if ((aQ >= aM))
570570 then aP
571571 else ce(aP, aL[aQ])
572572
573573 func ci (aP,aQ) = if ((aQ >= aM))
574574 then aP
575575 else throw("List size exceeds 6")
576576
577577 ci(ch(ch(ch(ch(ch(ch(aN, 0), 1), 2), 3), 4), 5), 6)
578578 }
579579 let bB = makeString([bv[al], bv[am], makeString(bA, "_"), makeString(cd, "_")], ":")
580580 let bC = ax(invoke(y, "updateBackpack", [ac, bB], nil))
581581 $Tuple2(nil, bC)
582582 }
583583 }
584584 }
585585 }
586586 }
587587 else throw("Strict value is not equal to itself.")
588588 }
589589
590590
591591
592592 @Callable(bp)
593593 func acceptServicePayment (cj) = {
594594 let bt = bo()
595595 if ((bt == bt))
596596 then if ((size(bp.payments) != 1))
597597 then throw("exactly 1 payment must be attached")
598598 else {
599599 let bE = bp.payments[0]
600600 let bF = bE.amount
601601 let bG = valueOrErrorMessage(bE.assetId, "WAVES can't be used as payment")
602602 if ((bG != f))
603603 then throw("USDN payments only!")
604604 else {
605605 let ck = {
606606 let g = cj
607607 if (("LAND_RENAME" == g))
608608 then 10000000
609609 else throw("Unknown service!")
610610 }
611611 if ((bF != ck))
612612 then throw((((cj + " costs ") + toString(ck)) + " USDN"))
613613 else $Tuple2(nil, bF)
614614 }
615615 }
616616 else throw("Strict value is not equal to itself.")
617617 }
618618
619619
620620
621621 @Callable(bp)
622622 func setWarehouseOrder (cl,Y) = {
623623 let cm = bp.originCaller
624624 let cn = toString(cm)
625625 let co = value(assetInfo(fromBase58String(Y)))
626626 if (!(isDefined(getInteger(y, ah(Y)))))
627627 then throw((("NFT " + co.name) + " is not staked"))
628628 else {
629629 let cp = valueOrErrorMessage(getString(y, af(Y)), (("NFT " + co.name) + " is orphaned"))
630630 if ((cp != cn))
631631 then throw((G + " is not yours"))
632632 else {
633633 let cq = split_4C(cl, ":")
634634 if ((size(cq) != 3))
635635 then throw("cargoListStr should contain exactly 2 ':' separators")
636636 else {
637637 let cr = split(cq[0], "_")
638638 let cs = split(cq[1], "_")
639639 let ct = if ((cq[2] == ""))
640640 then nil
641641 else split(cq[2], "_")
642642 if ((size(cr) != A))
643643 then throw("All 6 resources should be passed")
644644 else if ((size(cs) != A))
645645 then throw("All 6 materials should be passed")
646646 else {
647647 let cu = ax(invoke(y, "getWarehouseREADONLY", [Y], nil))
648648 let aH = split_4C(cu, ":")
649649 let cv = split(aH[aq], "_")
650650 let cw = split(aH[ar], "_")
651651 let cx = if ((aH[as] == ""))
652652 then nil
653653 else split(aH[as], "_")
654654 let cy = aG(aH)
655655 let cz = aS(aH)
656656 let cA = aT(aH)
657657 let cB = parseIntValue(aH[at])
658658 let cC = ((((aD(aH[ap]) - cy) - cz) - cA) - cB)
659659 let aB = X(Y)
660660 let cD = aA(aB)
661661 let cE = split(cD[au], "_")
662662 let cF = split(cD[av], "_")
663663 let cG = if ((cD[aw] == ""))
664664 then nil
665665 else split(cD[aw], "_")
666666 let cH = 0
667667 func cI (aJ,aK) = {
668668 let by = aJ._1
669669 let cJ = split(aK, "@")
670670 if ((size(cJ) != 2))
671671 then throw("Incorrect order format, should be amount@price")
672672 else {
673673 let cK = parseIntValue(cJ[0])
674674 let cL = parseIntValue(cJ[1])
675675 let cM = fraction(cK, cL, c)
676676 let cN = parseIntValue(cv[by])
677677 let cO = split(cE[by], "@")
678678 let cP = parseIntValue(cO[0])
679679 let cQ = parseIntValue(cO[1])
680680 if ((0 > cQ))
681681 then throw("Price can't be negative")
682682 else {
683683 let cR = fraction(cP, cQ, c)
684684 if ((cK == 0))
685685 then if ((cP > 0))
686686 then $Tuple4((by + 1), (aJ._2 :+ toString(cN)), (aJ._3 - cP), (aJ._4 - cR))
687687 else $Tuple4((by + 1), (aJ._2 :+ toString((cN - cP))), (aJ._3 + cP), aJ._4)
688688 else if ((cK > 0))
689689 then if ((0 > cP))
690690 then {
691691 let cS = (cK + cP)
692692 $Tuple4((by + 1), (aJ._2 :+ toString((cN - cP))), (aJ._3 + cS), (aJ._4 + cM))
693693 }
694694 else $Tuple4((by + 1), (aJ._2 :+ toString(cN)), ((aJ._3 + cK) - cP), ((aJ._4 + cM) - cR))
695695 else if ((0 > cP))
696696 then {
697697 let cS = (cP - cK)
698698 if ((0 > (cN - cS)))
699699 then throw((((("Attempt to take " + toString(cS)) + " from warehouse, but only ") + toString(cN)) + " available"))
700700 else $Tuple4((by + 1), (aJ._2 :+ toString((cN - cS))), (aJ._3 + cS), aJ._4)
701701 }
702702 else if ((0 > (cN + cK)))
703703 then throw((((("Attempt to take " + toString(-(cK))) + " from warehouse, but only ") + toString(cN)) + " available"))
704704 else $Tuple4((by + 1), (aJ._2 :+ toString((cN + cK))), ((aJ._3 - cK) - cP), (aJ._4 - cR))
705705 }
706706 }
707707 }
708708
709709 let cT = {
710710 let aL = cr
711711 let aM = size(aL)
712712 let aN = $Tuple4(0, nil, 0, 0)
713713 func aO (aP,aQ) = if ((aQ >= aM))
714714 then aP
715715 else cI(aP, aL[aQ])
716716
717717 func aR (aP,aQ) = if ((aQ >= aM))
718718 then aP
719719 else throw("List size exceeds 6")
720720
721721 aR(aO(aO(aO(aO(aO(aO(aN, 0), 1), 2), 3), 4), 5), 6)
722722 }
723723 func cU (aJ,aK) = {
724724 let by = aJ._1
725725 let cJ = split(aK, "@")
726726 if ((size(cJ) != 2))
727727 then throw("Incorrect order format, should be amount@price")
728728 else {
729729 let cK = parseIntValue(cJ[0])
730730 let cL = parseIntValue(cJ[1])
731731 let cM = fraction(cK, cL, c)
732732 let cV = parseIntValue(cw[by])
733733 let cO = split(cF[by], "@")
734734 let cP = parseIntValue(cO[0])
735735 let cQ = parseIntValue(cO[1])
736736 if ((0 > cQ))
737737 then throw("Price can't be negative")
738738 else {
739739 let cR = fraction(cP, cQ, c)
740740 if ((cK == 0))
741741 then if ((cP > 0))
742742 then $Tuple4((by + 1), (aJ._2 :+ toString(cV)), (aJ._3 - cP), (aJ._4 - cR))
743743 else $Tuple4((by + 1), (aJ._2 :+ toString((cV - cP))), (aJ._3 + cP), aJ._4)
744744 else if ((cK > 0))
745745 then if ((0 > cP))
746746 then {
747747 let cS = (cK + cP)
748748 $Tuple4((by + 1), (aJ._2 :+ toString((cV - cP))), (aJ._3 + cS), (aJ._4 + cM))
749749 }
750750 else $Tuple4((by + 1), (aJ._2 :+ toString(cV)), ((aJ._3 + cK) - cP), ((aJ._4 + cM) - cR))
751751 else if ((0 > cP))
752752 then {
753753 let cS = (cP - cK)
754754 if ((0 > (cV - cS)))
755755 then throw((((("Attempt to take " + toString(cS)) + " from warehouse, but only ") + toString(cV)) + " available"))
756756 else $Tuple4((by + 1), (aJ._2 :+ toString((cV - cS))), (aJ._3 + cS), aJ._4)
757757 }
758758 else if ((0 > (cV + cK)))
759759 then throw((((("Attempt to take " + toString(-(cK))) + " from warehouse, but only ") + toString(cV)) + " available"))
760760 else $Tuple4((by + 1), (aJ._2 :+ toString((cV + cK))), ((aJ._3 - cK) - cP), (aJ._4 - cR))
761761 }
762762 }
763763 }
764764
765765 let bj = {
766766 let aL = cs
767767 let aM = size(aL)
768768 let aN = $Tuple4(0, nil, cT._3, cT._4)
769769 func ch (aP,aQ) = if ((aQ >= aM))
770770 then aP
771771 else cU(aP, aL[aQ])
772772
773773 func ci (aP,aQ) = if ((aQ >= aM))
774774 then aP
775775 else throw("List size exceeds 6")
776776
777777 ci(ch(ch(ch(ch(ch(ch(aN, 0), 1), 2), 3), 4), 5), 6)
778778 }
779779 func cW (aJ,aK) = {
780780 let by = aJ._1
781781 let cJ = split(aK, "@")
782782 if ((size(cJ) != 2))
783783 then throw("Incorrect order format, should be amount@price")
784784 else {
785785 let cK = parseIntValue(cJ[0])
786786 let cL = parseIntValue(cJ[1])
787787 let cM = fraction(cK, cL, c)
788788 let cX = parseIntValue(cx[by])
789789 let cO = split(cG[by], "@")
790790 let cP = parseIntValue(cO[0])
791791 let cQ = parseIntValue(cO[1])
792792 if ((0 > cQ))
793793 then throw("Price can't be negative")
794794 else {
795795 let cR = fraction(cP, cQ, c)
796796 if ((cK == 0))
797797 then if ((cP > 0))
798798 then $Tuple4((by + 1), (aJ._2 :+ toString(cX)), (aJ._3 - cP), (aJ._4 - cR))
799799 else $Tuple4((by + 1), (aJ._2 :+ toString((cX - cP))), (aJ._3 + cP), aJ._4)
800800 else if ((cK > 0))
801801 then if ((0 > cP))
802802 then {
803803 let cS = (cK + cP)
804804 $Tuple4((by + 1), (aJ._2 :+ toString((cX - cP))), (aJ._3 + cS), (aJ._4 + cM))
805805 }
806806 else $Tuple4((by + 1), (aJ._2 :+ toString(cX)), ((aJ._3 + cK) - cP), ((aJ._4 + cM) - cR))
807807 else if ((0 > cP))
808808 then {
809809 let cS = (cP - cK)
810810 if ((0 > (cX - cS)))
811811 then throw((((("Attempt to take " + toString(cS)) + " from warehouse, but only ") + toString(cX)) + " available"))
812812 else $Tuple4((by + 1), (aJ._2 :+ toString((cX - cS))), (aJ._3 + cS), aJ._3)
813813 }
814814 else if ((0 > (cX + cK)))
815815 then throw((((("Attempt to take " + toString(-(cK))) + " from warehouse, but only ") + toString(cX)) + " available"))
816816 else $Tuple4((by + 1), (aJ._2 :+ toString((cX + cK))), ((aJ._3 - cK) - cP), (aJ._4 - cR))
817817 }
818818 }
819819 }
820820
821821 let aC = {
822822 let aL = ct
823823 let aM = size(aL)
824824 let aN = $Tuple4(0, nil, bj._3, bj._4)
825825 func cY (aP,aQ) = if ((aQ >= aM))
826826 then aP
827827 else cW(aP, aL[aQ])
828828
829829 func cZ (aP,aQ) = if ((aQ >= aM))
830830 then aP
831831 else throw("List size exceeds 50")
832832
833833 cZ(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(aN, 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)
834834 }
835835 let da = aC._3
836836 if ((da > cC))
837837 then throw((((("Attempt to reserve " + toString(da)) + " space, but only ") + toString(cC)) + " warehouse space left"))
838838 else {
839839 let db = makeString_2C([aH[ap], makeString(cT._2, "_"), makeString(bj._2, "_"), makeString(aC._2, "_"), toString(da)], ":")
840840 let dc = invoke(y, "saveWarehouse", [db, Y], nil)
841841 if ((dc == dc))
842842 then {
843843 let dd = aC._4
844844 if ((dd > 0))
845845 then if ((size(bp.payments) != 1))
846846 then throw("exactly 1 payment must be attached")
847847 else {
848848 let bE = bp.payments[0]
849849 let bF = bE.amount
850850 let bG = valueOrErrorMessage(bE.assetId, "WAVES can't be used as payment")
851851 if ((bG != f))
852852 then throw("USDN payments only!")
853853 else if ((bF != dd))
854854 then throw(("Payment needed is " + toString(dd)))
855855 else [StringEntry(aB, cl)]
856856 }
857857 else if ((dd == 0))
858858 then if ((size(bp.payments) != 0))
859859 then throw("No payments needed")
860860 else [StringEntry(aB, cl)]
861861 else if ((size(bp.payments) != 0))
862862 then throw("No payments needed")
863863 else [ScriptTransfer(cm, -(dd), f), StringEntry(aB, cl)]
864864 }
865865 else throw("Strict value is not equal to itself.")
866866 }
867867 }
868868 }
869869 }
870870 }
871871 }
872872
873873
874874
875875 @Callable(bp)
876876 func acceptWarehouseOrder (de,Y,ac) = {
877877 let df = bp.originCaller
878878 let dg = toString(df)
879879 let dh = valueOrErrorMessage(getString(y, Z(dg)), "You don't have a duck staked")
880880 let bu = valueOrElse(getString(y, ad(dh)), z)
881881 let di = split(value(bu), "_")
882882 if ((di[aj] != "L"))
883883 then throw((("Duck location type is " + di[aj]) + ", but should be L"))
884884 else if ((dh != ac))
885885 then throw(((("Your staked duck is " + dh) + ", but passed ") + ac))
886886 else {
887887 let dj = value(assetInfo(fromBase58String(Y)))
888888 if (!(isDefined(getInteger(y, ah(Y)))))
889889 then throw((("NFT " + dj.name) + " is not staked"))
890890 else {
891891 let dk = valueOrErrorMessage(getString(y, af(Y)), (("NFT " + dj.name) + " is orphaned"))
892892 if ((dk == dg))
893893 then throw("You cannot trade with yourself")
894894 else {
895895 let dl = split_4C(de, ":")
896896 if ((size(dl) != 3))
897897 then throw("bpOrderStr should contain exactly 2 ':' separators")
898898 else {
899899 let dm = split(dl[0], "_")
900900 let dn = split(dl[1], "_")
901901 let do = if ((dl[2] == ""))
902902 then nil
903903 else split(dl[2], "_")
904904 if ((size(dm) != A))
905905 then throw("All 6 resources should be passed")
906906 else if ((size(dn) != A))
907907 then throw("All 6 materials should be passed")
908908 else {
909909 let cu = ax(invoke(y, "getWarehouseREADONLY", [Y], nil))
910910 let aH = split_4C(cu, ":")
911911 let cv = split(aH[aq], "_")
912912 let cw = split(aH[ar], "_")
913913 let cx = if ((aH[as] == ""))
914914 then nil
915915 else split(aH[as], "_")
916916 let cy = aG(aH)
917917 let cz = aS(aH)
918918 let cA = aT(aH)
919919 let cB = parseIntValue(aH[at])
920920 let cC = ((((aD(aH[ap]) - cy) - cz) - cA) - cB)
921921 let bn = ab(ac)
922922 let bv = bm(bn)
923923 let dp = split(bv[am], "_")
924924 let dq = split(bv[an], "_")
925925 let dr = if ((bv[ao] == ""))
926926 then nil
927927 else split(bv[ao], "_")
928928 let aB = X(Y)
929929 let ds = aA(aB)
930930 let dt = split(ds[au], "_")
931931 let du = split(ds[av], "_")
932932 let dv = if ((ds[aw] == ""))
933933 then nil
934934 else split(ds[aw], "_")
935935 let cH = 0
936936 func cI (aJ,by) = {
937937 let dw = split(dm[by], "@")
938938 if ((size(dw) != 2))
939939 then throw("Incorrect order format, should be amount@price")
940940 else {
941941 let dx = parseIntValue(dw[0])
942942 let dy = parseIntValue(dw[1])
943943 if ((0 > dy))
944944 then throw("Price can't be negative")
945945 else {
946946 let dz = fraction(dx, dy, c)
947947 let dA = parseIntValue(dp[by])
948948 let cN = parseIntValue(cv[by])
949949 let dB = split(dt[by], "@")
950950 let dC = parseIntValue(dB[0])
951951 let dD = parseIntValue(dB[1])
952952 if (if ((dx != 0))
953953 then (dy != dD)
954954 else false)
955955 then throw(((((("Prices of " + K[by]) + " don't match! WH price=") + toString(dD)) + ", your price=") + toString(dy)))
956956 else {
957957 let dE = fraction(dC, dD, c)
958958 if ((dx == 0))
959959 then $Tuple6((aJ._1 :+ cv[by]), (aJ._2 :+ dt[by]), (aJ._3 :+ dp[by]), aJ._4, aJ._5, aJ._6)
960960 else if ((dx > 0))
961961 then if ((0 > dC))
962962 then if ((dx > -(dC)))
963963 then throw(((((("Attempt to buy " + toString(dx)) + " of ") + K[by]) + ", but warehouse only sells ") + toString(-(dC))))
964964 else $Tuple6((aJ._1 :+ cv[by]), (aJ._2 :+ ((toString((dC + dx)) + "@") + toString(dD))), (aJ._3 :+ toString((dA + dx))), (aJ._4 + dx), aJ._5, (aJ._6 + dz))
965965 else throw((("Attempt to buy " + K[by]) + " while warehouse doesn't sell it"))
966966 else if ((dC > 0))
967967 then if ((-(dx) > dC))
968968 then throw(((((("Attempt to sell " + toString(-(dx))) + " of ") + K[by]) + ", but warehouse only buys ") + toString(dC)))
969969 else if ((-(dx) > dA))
970970 then throw(((((("Attempt to sell " + toString(-(dx))) + ", but you only have ") + dp[by]) + " of ") + K[by]))
971971 else $Tuple6((aJ._1 :+ toString((cN - dx))), (aJ._2 :+ ((toString((dC + dx)) + "@") + toString(dD))), (aJ._3 :+ "0"), (aJ._4 - dx), (aJ._5 - dz), aJ._6)
972972 else throw((("Attempt to sell " + K[by]) + " while warehouse doesn't buy it"))
973973 }
974974 }
975975 }
976976 }
977977
978978 let cT = {
979979 let aL = [0, 1, 2, 3, 4, 5]
980980 let aM = size(aL)
981981 let aN = $Tuple6(nil, nil, nil, 0, 0, 0)
982982 func aO (aP,aQ) = if ((aQ >= aM))
983983 then aP
984984 else cI(aP, aL[aQ])
985985
986986 func aR (aP,aQ) = if ((aQ >= aM))
987987 then aP
988988 else throw("List size exceeds 6")
989989
990990 aR(aO(aO(aO(aO(aO(aO(aN, 0), 1), 2), 3), 4), 5), 6)
991991 }
992992 func cU (aJ,by) = {
993993 let dF = split(dn[by], "@")
994994 if ((size(dF) != 2))
995995 then throw("Incorrect order format, should be amount@price")
996996 else {
997997 let dx = parseIntValue(dF[0])
998998 let dy = parseIntValue(dF[1])
999999 if ((0 > dy))
10001000 then throw("Price can't be negative")
10011001 else {
10021002 let dz = fraction(dx, dy, c)
10031003 let dA = parseIntValue(dq[by])
10041004 let cN = parseIntValue(cw[by])
10051005 let dB = split(du[by], "@")
10061006 let dC = parseIntValue(dB[0])
10071007 let dD = parseIntValue(dB[1])
10081008 if (if ((dx != 0))
10091009 then (dy != dD)
10101010 else false)
10111011 then throw(((((("Prices of " + L[by]) + " don't match! WH price=") + toString(dD)) + ", your price=") + toString(dy)))
10121012 else {
10131013 let dE = fraction(dC, dD, c)
10141014 if ((dx == 0))
10151015 then $Tuple6((aJ._1 :+ cw[by]), (aJ._2 :+ du[by]), (aJ._3 :+ dq[by]), aJ._4, aJ._5, aJ._6)
10161016 else if ((dx > 0))
10171017 then if ((0 > dC))
10181018 then if ((dx > -(dC)))
10191019 then throw(((((("Attempt to buy " + toString(dx)) + " of ") + L[by]) + ", but warehouse only sells ") + toString(-(dC))))
10201020 else $Tuple6((aJ._1 :+ cw[by]), (aJ._2 :+ ((toString((dC + dx)) + "@") + toString(dD))), (aJ._3 :+ toString((dA + dx))), (aJ._4 + dx), aJ._5, (aJ._6 + dz))
10211021 else throw((("Attempt to buy " + L[by]) + " while warehouse doesn't sell it"))
10221022 else if ((dC > 0))
10231023 then if ((-(dx) > dC))
10241024 then throw(((((("Attempt to sell " + toString(-(dx))) + " of ") + L[by]) + ", but warehouse only buys ") + toString(dC)))
10251025 else if ((-(dx) > dA))
10261026 then throw(((((("Attempt to sell " + toString(-(dx))) + ", but you only have ") + dq[by]) + " of ") + L[by]))
10271027 else $Tuple6((aJ._1 :+ toString((cN - dx))), (aJ._2 :+ ((toString((dC + dx)) + "@") + toString(dD))), (aJ._3 :+ "0"), (aJ._4 - dx), (aJ._5 - dz), aJ._6)
10281028 else throw((("Attempt to sell " + L[by]) + " while warehouse doesn't buy it"))
10291029 }
10301030 }
10311031 }
10321032 }
10331033
10341034 let bj = {
10351035 let aL = [0, 1, 2, 3, 4, 5]
10361036 let aM = size(aL)
10371037 let aN = $Tuple6(nil, nil, nil, cT._4, cT._5, cT._6)
10381038 func ch (aP,aQ) = if ((aQ >= aM))
10391039 then aP
10401040 else cU(aP, aL[aQ])
10411041
10421042 func ci (aP,aQ) = if ((aQ >= aM))
10431043 then aP
10441044 else throw("List size exceeds 6")
10451045
10461046 ci(ch(ch(ch(ch(ch(ch(aN, 0), 1), 2), 3), 4), 5), 6)
10471047 }
1048- func cW (aJ,by) = {
1049- let dG = split(do[by], "@")
1050- if ((size(dG) != 2))
1048+ func cW (aJ,dG) = {
1049+ let by = aJ._7
1050+ let dH = split(dG, "@")
1051+ if ((size(dH) != 2))
10511052 then throw("Incorrect order format, should be amount@price")
10521053 else {
1053- let dx = parseIntValue(dG[0])
1054- let dy = parseIntValue(dG[1])
1054+ let dx = parseIntValue(dH[0])
1055+ let dy = parseIntValue(dH[1])
10551056 if ((0 > dy))
10561057 then throw("Price can't be negative")
10571058 else {
10581059 let dz = fraction(dx, dy, c)
10591060 let dA = parseIntValue(dr[by])
10601061 let cN = parseIntValue(cx[by])
10611062 let dB = split(dv[by], "@")
10621063 let dC = parseIntValue(dB[0])
10631064 let dD = parseIntValue(dB[1])
10641065 if (if ((dx != 0))
10651066 then (dy != dD)
10661067 else false)
10671068 then throw(((((("Prices of " + M[by]) + " don't match! WH price=") + toString(dD)) + ", your price=") + toString(dy)))
10681069 else {
10691070 let dE = fraction(dC, dD, c)
10701071 if ((dx == 0))
1071- then $Tuple6((aJ._1 :+ cx[by]), (aJ._2 :+ dv[by]), (aJ._3 :+ dr[by]), aJ._4, aJ._5, aJ._6)
1072+ then $Tuple7((aJ._1 :+ cx[by]), (aJ._2 :+ dv[by]), (aJ._3 :+ dr[by]), aJ._4, aJ._5, aJ._6, (aJ._7 + 1))
10721073 else if ((dx > 0))
10731074 then if ((0 > dC))
10741075 then if ((dx > -(dC)))
10751076 then throw(((((("Attempt to buy " + toString(dx)) + " of ") + M[by]) + ", but warehouse only sells ") + toString(-(dC))))
1076- else $Tuple6((aJ._1 :+ cx[by]), (aJ._2 :+ ((toString((dC + dx)) + "@") + toString(dD))), (aJ._3 :+ toString((dA + dx))), (aJ._4 + dx), aJ._5, (aJ._6 + dz))
1077+ else $Tuple7((aJ._1 :+ cx[by]), (aJ._2 :+ ((toString((dC + dx)) + "@") + toString(dD))), (aJ._3 :+ toString((dA + dx))), (aJ._4 + dx), aJ._5, (aJ._6 + dz), (aJ._7 + 1))
10771078 else throw((("Attempt to buy " + M[by]) + " while warehouse doesn't sell it"))
10781079 else if ((dC > 0))
10791080 then if ((-(dx) > dC))
10801081 then throw(((((("Attempt to sell " + toString(-(dx))) + " of ") + M[by]) + ", but warehouse only buys ") + toString(dC)))
10811082 else if ((-(dx) > dA))
10821083 then throw(((((("Attempt to sell " + toString(-(dx))) + ", but you only have ") + dr[by]) + " of ") + M[by]))
1083- else $Tuple6((aJ._1 :+ toString((cN - dx))), (aJ._2 :+ ((toString((dC + dx)) + "@") + toString(dD))), (aJ._3 :+ "0"), (aJ._4 - dx), (aJ._5 - dz), aJ._6)
1084+ else $Tuple7((aJ._1 :+ toString((cN - dx))), (aJ._2 :+ ((toString((dC + dx)) + "@") + toString(dD))), (aJ._3 :+ "0"), (aJ._4 - dx), (aJ._5 - dz), aJ._6, (aJ._7 + 1))
10841085 else throw((("Attempt to sell " + M[by]) + " while warehouse doesn't buy it"))
10851086 }
10861087 }
10871088 }
10881089 }
10891090
10901091 let aC = {
1091- let aL = [0, 1, 2, 3, 4, 5]
1092+ let aL = do
10921093 let aM = size(aL)
1093- let aN = $Tuple6(nil, nil, nil, bj._4, bj._5, bj._6)
1094+ let aN = $Tuple7(nil, nil, nil, bj._4, bj._5, bj._6, 0)
10941095 func cY (aP,aQ) = if ((aQ >= aM))
10951096 then aP
10961097 else cW(aP, aL[aQ])
10971098
10981099 func cZ (aP,aQ) = if ((aQ >= aM))
10991100 then aP
11001101 else throw("List size exceeds 50")
11011102
11021103 cZ(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(aN, 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)
11031104 }
11041105 let da = aC._4
11051106 let db = makeString_2C([aH[ap], makeString(cT._1, "_"), makeString(bj._1, "_"), makeString(aC._1, "_"), toString(da)], ":")
1106- let dH = makeString_2C([makeString(cT._2, "_"), makeString(bj._2, "_"), makeString(aC._2, "_")], ":")
1107- let dI = makeString_2C([bv[al], makeString(cT._3, "_"), makeString(bj._3, "_"), makeString(aC._3, "_")], ":")
1107+ let dI = makeString_2C([makeString(cT._2, "_"), makeString(bj._2, "_"), makeString(aC._2, "_")], ":")
1108+ let dJ = makeString_2C([bv[al], makeString(cT._3, "_"), makeString(bj._3, "_"), makeString(aC._3, "_")], ":")
11081109 let dc = invoke(y, "saveWarehouse", [db, Y], nil)
11091110 if ((dc == dc))
11101111 then {
1111- let dJ = invoke(y, "updateBackpack", [ac, dI], nil)
1112- if ((dJ == dJ))
1112+ let dK = invoke(y, "updateBackpack", [ac, dJ], nil)
1113+ if ((dK == dK))
11131114 then {
1114- let dK = [StringEntry(aB, dH)]
1115- let dL = fraction(aC._5, J, b)
1116- let dM = aC._5
1117- let dN = if ((dM > 0))
1118- then (dK :+ ScriptTransfer(df, (aC._5 - dL), f))
1119- else dK
1120- let dO = fraction(aC._6, J, b)
1121- let dP = aC._6
1122- if ((dP > 0))
1115+ let dL = [StringEntry(aB, dI)]
1116+ let dM = fraction(aC._5, J, b)
1117+ let dN = aC._5
1118+ let dO = if ((dN > 0))
1119+ then (dL :+ ScriptTransfer(df, (aC._5 - dM), f))
1120+ else dL
1121+ let dP = fraction(aC._6, J, b)
1122+ let dQ = aC._6
1123+ if ((dQ > 0))
11231124 then if ((size(bp.payments) != 1))
11241125 then throw("exactly 1 payment must be attached")
11251126 else {
11261127 let bE = bp.payments[0]
11271128 let bF = bE.amount
11281129 let bG = valueOrErrorMessage(bE.assetId, "WAVES can't be used as payment")
11291130 if ((bG != f))
11301131 then throw("USDN payments only!")
1131- else if ((bF != dP))
1132- then throw(("Payment needed is " + toString(dP)))
1133- else (dN :+ ScriptTransfer(addressFromStringValue(dk), (aC._6 - dO), f))
1132+ else if ((bF != dQ))
1133+ then throw(("Payment needed is " + toString(dQ)))
1134+ else (dO :+ ScriptTransfer(addressFromStringValue(dk), (aC._6 - dP), f))
11341135 }
11351136 else if ((size(bp.payments) != 0))
11361137 then throw("No payments needed")
1137- else dN
1138+ else dO
11381139 }
11391140 else throw("Strict value is not equal to itself.")
11401141 }
11411142 else throw("Strict value is not equal to itself.")
11421143 }
11431144 }
11441145 }
11451146 }
11461147 }
11471148 }
11481149
11491150

github/deemru/w8io/169f3d6 
187.45 ms