tx · Ehsz59tFRahrbrmvuUU6tyHrXcS3kaT9CAFX8f4kfMsT

3MrRa3KaEgRyyjQdMLuU78m5GkJLvP5DZLj:  -0.05100000 Waves

2022.08.24 17:42 [2198697] smart account 3MrRa3KaEgRyyjQdMLuU78m5GkJLvP5DZLj > SELF 0.00000000 Waves

{ "type": 13, "id": "Ehsz59tFRahrbrmvuUU6tyHrXcS3kaT9CAFX8f4kfMsT", "fee": 5100000, "feeAssetId": null, "timestamp": 1661352204691, "version": 2, "chainId": 84, "sender": "3MrRa3KaEgRyyjQdMLuU78m5GkJLvP5DZLj", "senderPublicKey": "AJNTN7EtP9dsAmPzcKRp9bRMvzZL4uwkmVxQuFuar3Qr", "proofs": [ "4dhdHV1mKsTTPG9skVEo9ET4fUAtbcpXWdygpJhsFXSWqZk3CRMibPgZtkVTvmmGPB6XXEP4pkXxVM3Vgo7D4GLi" ], "script": "base64:BgJjCAISABIAEgMKAQESAwoBARIJCgcBAQEBAQEBEg4KDAEBAQEBAQEICAgBARIDCgEBEgMKAQESBQoDAQEBEgUKAwEBARIAEgMKAQESABIDCgEIEgASAwoBCBIDCgEIEgQKAggBdwAJa19vcmFfa2V5AglrX29yYV9rZXkAD2tfb3JhX2Jsb2NrX2tleQIPa19vcmFfYmxvY2tfa2V5AAVrX29yYQIFa19vcmEACWtfYmFsYW5jZQIJa19iYWxhbmNlAA5rX3Bvc2l0aW9uU2l6ZQIOa19wb3NpdGlvblNpemUAEGtfcG9zaXRpb25NYXJnaW4CEGtfcG9zaXRpb25NYXJnaW4AFmtfcG9zaXRpb25PcGVuTm90aW9uYWwCFmtfcG9zaXRpb25PcGVuTm90aW9uYWwALmtfcG9zaXRpb25MYXN0VXBkYXRlZEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24CEmtfcG9zaXRpb25GcmFjdGlvbgANa19pbml0aWFsaXplZAINa19pbml0aWFsaXplZAAIa19wYXVzZWQCCGtfcGF1c2VkAAVrX2ZlZQIFa19mZWUAD2tfZnVuZGluZ1BlcmlvZAIPa19mdW5kaW5nUGVyaW9kABFrX2luaXRNYXJnaW5SYXRpbwIRa19pbml0TWFyZ2luUmF0aW8AGGtfbWFpbnRlbmFuY2VNYXJnaW5SYXRpbwIFa19tbXIAFWtfbGlxdWlkYXRpb25GZWVSYXRpbwIVa19saXF1aWRhdGlvbkZlZVJhdGlvAA1rX3NwcmVhZExpbWl0Ag1rX3NwcmVhZExpbWl0ABBrX21heFByaWNlSW1wYWN0AhBrX21heFByaWNlSW1wYWN0AA1rX2xhc3REYXRhU3RyAg1rX2xhc3REYXRhU3RyAA5rX2xhc3RNaW51dGVJZAIOa19sYXN0TWludXRlSWQAHWtfdHdhcERhdGFMYXN0Q3VtdWxhdGl2ZVByaWNlAh1rX3R3YXBEYXRhTGFzdEN1bXVsYXRpdmVQcmljZQATa190d2FwRGF0YUxhc3RQcmljZQITa190d2FwRGF0YUxhc3RQcmljZQAaa190d2FwRGF0YVByZXZpb3VzTWludXRlSWQCGmtfdHdhcERhdGFQcmV2aW91c01pbnV0ZUlkACVrX2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAhtrX2xhdGVzdExvbmdQcmVtaXVtRnJhY3Rpb24AJmtfbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAhxrX2xhdGVzdFNob3J0UHJlbWl1bUZyYWN0aW9uABJrX25leHRGdW5kaW5nQmxvY2sCHmtfbmV4dEZ1bmRpbmdCbG9ja01pblRpbWVzdGFtcAARa19sb25nRnVuZGluZ1JhdGUCEWtfbG9uZ0Z1bmRpbmdSYXRlABJrX3Nob3J0RnVuZGluZ1JhdGUCEmtfc2hvcnRGdW5kaW5nUmF0ZQATa19xdW90ZUFzc2V0UmVzZXJ2ZQIIa19xdEFzdFIAEmtfYmFzZUFzc2V0UmVzZXJ2ZQIIa19ic0FzdFIAE2tfdG90YWxQb3NpdGlvblNpemUCE2tfdG90YWxQb3NpdGlvblNpemUAF2tfdG90YWxMb25nUG9zaXRpb25TaXplAhdrX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQAYa190b3RhbFNob3J0UG9zaXRpb25TaXplAhhrX3RvdGFsU2hvcnRQb3NpdGlvblNpemUAFGtfY3VtdWxhdGl2ZU5vdGlvbmFsAhRrX2N1bXVsYXRpdmVOb3Rpb25hbAAWa19vcGVuSW50ZXJlc3ROb3Rpb25hbAIWa19vcGVuSW50ZXJlc3ROb3Rpb25hbAAUa19jb29yZGluYXRvckFkZHJlc3MCFGtfY29vcmRpbmF0b3JBZGRyZXNzABNrX2luc3VyYW5jZV9hZGRyZXNzAhNrX2luc3VyYW5jZV9hZGRyZXNzAA9rX2FkbWluX2FkZHJlc3MCD2tfYWRtaW5fYWRkcmVzcwASa19hZG1pbl9wdWJsaWNfa2V5AhJrX2FkbWluX3B1YmxpY19rZXkADWtfcXVvdGVfYXNzZXQCDWtfcXVvdGVfYXNzZXQAD2tfcXVvdGVfc3Rha2luZwIPa19xdW90ZV9zdGFraW5nABFrX3N0YWtpbmdfYWRkcmVzcwIRa19zdGFraW5nX2FkZHJlc3MAD2tfbWluZXJfYWRkcmVzcwIPa19taW5lcl9hZGRyZXNzAQtjb29yZGluYXRvcgAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBRRrX2Nvb3JkaW5hdG9yQWRkcmVzcwITQ29vcmRpbmF0b3Igbm90IHNldAEMYWRtaW5BZGRyZXNzAAkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABQ9rX2FkbWluX2FkZHJlc3MBDmFkbWluUHVibGljS2V5AAkA2QQBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABRJrX2FkbWluX3B1YmxpY19rZXkBCnF1b3RlQXNzZXQACQDZBAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFDWtfcXVvdGVfYXNzZXQBEXF1b3RlQXNzZXRTdGFraW5nAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFD2tfcXVvdGVfc3Rha2luZwIbUXVvdGUgYXNzZXQgc3Rha2luZyBub3Qgc2V0AQ5zdGFraW5nQWRkcmVzcwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABRFrX3N0YWtpbmdfYWRkcmVzcwIRSW5zdXJhbmNlIG5vdCBzZXQBEGluc3VyYW5jZUFkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUTa19pbnN1cmFuY2VfYWRkcmVzcwIRSW5zdXJhbmNlIG5vdCBzZXQBDG1pbmVyQWRkcmVzcwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABQ9rX21pbmVyX2FkZHJlc3MCEUluc3VyYW5jZSBub3Qgc2V0AAhESVJfTE9ORwABAAlESVJfU0hPUlQAAgANVFdBUF9JTlRFUlZBTAAPAA9PUkFDTEVfSU5URVJWQUwADwAHU0VDT05EUwDoBwAMREVDSU1BTF9VTklUCQBoAgABCQBoAgkAaAIJAGgCCQBoAgkAaAIACgAKAAoACgAKAAoAB09ORV9EQVkJAGgCAICjBQUMREVDSU1BTF9VTklUAAhBTExfRkVFUwBkAA9QTkxfT1BUSU9OX1NQT1QAAQARUE5MX09QVElPTl9PUkFDTEUAAgEBcwECX3gJAKwCAgkApAMBBQJfeAIBLAEEZGl2ZAICX3gCX3kJAG4EBQJfeAUMREVDSU1BTF9VTklUBQJfeQUISEFMRkVWRU4BBG11bGQCAl94Al95CQBuBAUCX3gFAl95BQxERUNJTUFMX1VOSVQFCEhBTEZFVkVOAQNhYnMBAl94AwkAZgIFAl94AAAFAl94CQEBLQEFAl94AQR2bWF4AgJfeAJfeQMJAGcCBQJfeAUCX3kFAl94BQJfeQEOdG9Db21wb3NpdGVLZXkCBF9rZXkIX2FkZHJlc3MJAKwCAgkArAICBQRfa2V5AgFfBQhfYWRkcmVzcwEJbGlzdFRvU3RyAQVfbGlzdAoBBV9qb2luAgthY2N1bXVsYXRvcgN2YWwJAKwCAgkArAICBQthY2N1bXVsYXRvcgUDdmFsAgEsBApuZXdMaXN0U3RyCgACJGwFBV9saXN0CgACJHMJAJADAQUCJGwKAAUkYWNjMAIACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQVfam9pbgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMjAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUBAtuZXdMaXN0U3RyVQkAswICBQpuZXdMaXN0U3RyAAEEC25ld0xpc3RTdHJSAwkAAAIJAK8CAgULbmV3TGlzdFN0clUAAQIBLAkAsAICBQtuZXdMaXN0U3RyVQABBQtuZXdMaXN0U3RyVQULbmV3TGlzdFN0clIBCXN0clRvTGlzdAEEX3N0cgkAtQkCBQRfc3RyAgEsAQtwdXNoVG9RdWV1ZQMFX2xpc3QIX21heFNpemUGX3ZhbHVlAwkAZgIJAJADAQUFX2xpc3QFCF9tYXhTaXplCQDNCAIJANEIAgUFX2xpc3QAAAUGX3ZhbHVlCQDNCAIFBV9saXN0BQZfdmFsdWUBA2ludAEBawkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFBHRoaXMFAWsJAKwCAgINbm8gdmFsdWUgZm9yIAUBawEIY2JhbGFuY2UACQEDaW50AQUJa19iYWxhbmNlAQNmZWUACQEDaW50AQUFa19mZWUBD2luaXRNYXJnaW5SYXRpbwAJAQNpbnQBBRFrX2luaXRNYXJnaW5SYXRpbwEGcXRBc3RSAAkBA2ludAEFE2tfcXVvdGVBc3NldFJlc2VydmUBBmJzQXN0UgAJAQNpbnQBBRJrX2Jhc2VBc3NldFJlc2VydmUBEXRvdGFsUG9zaXRpb25TaXplAAkBA2ludAEFE2tfdG90YWxQb3NpdGlvblNpemUBEmN1bXVsYXRpdmVOb3Rpb25hbAAJAQNpbnQBBRRrX2N1bXVsYXRpdmVOb3Rpb25hbAEUb3BlbkludGVyZXN0Tm90aW9uYWwACQEDaW50AQUWa19vcGVuSW50ZXJlc3ROb3Rpb25hbAEZbmV4dEZ1bmRpbmdCbG9ja1RpbWVzdGFtcAAJAQNpbnQBBRJrX25leHRGdW5kaW5nQmxvY2sBEGZ1bmRpbmdQZXJpb2RSYXcACQEDaW50AQUPa19mdW5kaW5nUGVyaW9kARRmdW5kaW5nUGVyaW9kRGVjaW1hbAAJAGgCCQEQZnVuZGluZ1BlcmlvZFJhdwAFDERFQ0lNQUxfVU5JVAEUZnVuZGluZ1BlcmlvZFNlY29uZHMACQBoAgkBEGZ1bmRpbmdQZXJpb2RSYXcABQdTRUNPTkRTARZtYWludGVuYW5jZU1hcmdpblJhdGlvAAkBA2ludAEFGGtfbWFpbnRlbmFuY2VNYXJnaW5SYXRpbwETbGlxdWlkYXRpb25GZWVSYXRpbwAJAQNpbnQBBRVrX2xpcXVpZGF0aW9uRmVlUmF0aW8BC3NwcmVhZExpbWl0AAkBA2ludAEFDWtfc3ByZWFkTGltaXQBDm1heFByaWNlSW1wYWN0AAkBA2ludAEFEGtfbWF4UHJpY2VJbXBhY3QBI2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAkBA2ludAEFJWtfbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BJGxhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgAJAQNpbnQBBSZrX2xhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQAJAQNpbnQBBRhrX3RvdGFsU2hvcnRQb3NpdGlvblNpemUBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQAJAQNpbnQBBRdrX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQEWcmVxdWlyZU1vcmVNYXJnaW5SYXRpbwMMX21hcmdpblJhdGlvEF9iYXNlTWFyZ2luUmF0aW8UX2xhcmdlclRoYW5PckVxdWFsVG8EFHJlbWFpbmluZ01hcmdpblJhdGlvCQBlAgUMX21hcmdpblJhdGlvBRBfYmFzZU1hcmdpblJhdGlvAwMFFF9sYXJnZXJUaGFuT3JFcXVhbFRvCQBmAgAABRRyZW1haW5pbmdNYXJnaW5SYXRpbwcJAAIBAg5JbnZhbGlkIG1hcmdpbgMDCQEBIQEFFF9sYXJnZXJUaGFuT3JFcXVhbFRvCQBnAgUUcmVtYWluaW5nTWFyZ2luUmF0aW8AAAcJAAIBAg5JbnZhbGlkIG1hcmdpbgYBH2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BDV9wb3NpdGlvblNpemUDCQAAAgUNX3Bvc2l0aW9uU2l6ZQAACQACAQIsU2hvdWxkIG5vdCBiZSBjYWxsZWQgd2l0aCBfcG9zaXRpb25TaXplID09IDADCQBmAgUNX3Bvc2l0aW9uU2l6ZQAACQEjbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24ACQEkbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAELZ2V0UG9zaXRpb24BB190cmFkZXIED3Bvc2l0aW9uU2l6ZU9wdAkAmggCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBQ5rX3Bvc2l0aW9uU2l6ZQUHX3RyYWRlcgQHJG1hdGNoMAUPcG9zaXRpb25TaXplT3B0AwkAAQIFByRtYXRjaDACA0ludAQMcG9zaXRpb25TaXplBQckbWF0Y2gwCQCWCgQFDHBvc2l0aW9uU2l6ZQkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUQa19wb3NpdGlvbk1hcmdpbgUHX3RyYWRlcgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUWa19wb3NpdGlvbk9wZW5Ob3Rpb25hbAUHX3RyYWRlcgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUua19wb3NpdGlvbkxhc3RVcGRhdGVkQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUHX3RyYWRlcgkAlgoEAAAAAAAAAAABE3JlcXVpcmVPcGVuUG9zaXRpb24BB190cmFkZXIDCQAAAggJAQtnZXRQb3NpdGlvbgEFB190cmFkZXICXzEAAAkAAgECEE5vIG9wZW4gcG9zaXRpb24GAQtpbml0aWFsaXplZAAJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwUNa19pbml0aWFsaXplZAcBBnBhdXNlZAAJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwUIa19wYXVzZWQHAQ11cGRhdGVSZXNlcnZlAwZfaXNBZGQRX3F1b3RlQXNzZXRBbW91bnQQX2Jhc2VBc3NldEFtb3VudAMFBl9pc0FkZAQHbmV3QmFzZQkAZQIJAQZic0FzdFIABRBfYmFzZUFzc2V0QW1vdW50AwkAZwIAAAUHbmV3QmFzZQkAAgECKlR4IGxlYWQgdG8gYmFzZSBhc3NldCByZXNlcnZlIDw9IDAsIHJldmVydAkAlgoECQBkAgkBBnF0QXN0UgAFEV9xdW90ZUFzc2V0QW1vdW50BQduZXdCYXNlCQBkAgkBEXRvdGFsUG9zaXRpb25TaXplAAUQX2Jhc2VBc3NldEFtb3VudAkAZAIJARJjdW11bGF0aXZlTm90aW9uYWwABRFfcXVvdGVBc3NldEFtb3VudAQIbmV3UXVvdGUJAGUCCQEGcXRBc3RSAAURX3F1b3RlQXNzZXRBbW91bnQDCQBnAgAABQhuZXdRdW90ZQkAAgECKlR4IGxlYWQgdG8gYmFzZSBxdW90ZSByZXNlcnZlIDw9IDAsIHJldmVydAkAlgoEBQhuZXdRdW90ZQkAZAIJAQZic0FzdFIABRBfYmFzZUFzc2V0QW1vdW50CQBlAgkBEXRvdGFsUG9zaXRpb25TaXplAAUQX2Jhc2VBc3NldEFtb3VudAkAZQIJARJjdW11bGF0aXZlTm90aW9uYWwABRFfcXVvdGVBc3NldEFtb3VudAEJc3dhcElucHV0AgZfaXNBZGQRX3F1b3RlQXNzZXRBbW91bnQEB19xdEFzdFIJAQZxdEFzdFIABAdfYnNBc3RSCQEGYnNBc3RSAAQBawkBBG11bGQCBQdfcXRBc3RSBQdfYnNBc3RSBBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyAwUGX2lzQWRkCQBkAgUHX3F0QXN0UgURX3F1b3RlQXNzZXRBbW91bnQJAGUCBQdfcXRBc3RSBRFfcXVvdGVBc3NldEFtb3VudAQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCQEEZGl2ZAIFAWsFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIEGGFtb3VudEJhc2VBc3NldEJvdWdodEFicwkBA2FicwEJAGUCBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFB19ic0FzdFIEFWFtb3VudEJhc2VBc3NldEJvdWdodAMFBl9pc0FkZAUYYW1vdW50QmFzZUFzc2V0Qm91Z2h0QWJzCQEBLQEFGGFtb3VudEJhc2VBc3NldEJvdWdodEFicwQNJHQwMTE4MzcxMjAzMAkBDXVwZGF0ZVJlc2VydmUDBQZfaXNBZGQFEV9xdW90ZUFzc2V0QW1vdW50BRhhbW91bnRCYXNlQXNzZXRCb3VnaHRBYnMEF3F1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIxCAUNJHQwMTE4MzcxMjAzMAJfMQQWYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyMQgFDSR0MDExODM3MTIwMzACXzIEF3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIxCAUNJHQwMTE4MzcxMjAzMAJfMwQYY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIxCAUNJHQwMTE4MzcxMjAzMAJfNAQLcHJpY2VCZWZvcmUJAQRkaXZkAgUHX3F0QXN0UgUHX2JzQXN0UgQLbWFya2V0UHJpY2UJAQRkaXZkAgURX3F1b3RlQXNzZXRBbW91bnQFGGFtb3VudEJhc2VBc3NldEJvdWdodEFicwQJcHJpY2VEaWZmCQEDYWJzAQkAZQIFC3ByaWNlQmVmb3JlBQttYXJrZXRQcmljZQQLcHJpY2VJbXBhY3QJAGUCBQxERUNJTUFMX1VOSVQJAQRkaXZkAgULcHJpY2VCZWZvcmUJAGQCBQtwcmljZUJlZm9yZQUJcHJpY2VEaWZmBBNtYXhQcmljZUltcGFjdFZhbHVlCQEObWF4UHJpY2VJbXBhY3QAAwkAZgIFC3ByaWNlSW1wYWN0BRNtYXhQcmljZUltcGFjdFZhbHVlCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg1QcmljZSBpbXBhY3QgCQCkAwEFC3ByaWNlSW1wYWN0AhQgPiBtYXggcHJpY2UgaW1wYWN0IAkApAMBBRNtYXhQcmljZUltcGFjdFZhbHVlAhUgYmVmb3JlIHF1b3RlIGFzc2V0OiAJAKQDAQUHX3F0QXN0UgIUIGJlZm9yZSBiYXNlIGFzc2V0OiAJAKQDAQUHX2JzQXN0UgIhIHF1b3RlIGFzc2V0IGFtb3VudCB0byBleGNoYW5nZTogCQCkAwEFEV9xdW90ZUFzc2V0QW1vdW50Ag8gcHJpY2UgYmVmb3JlOiAJAKQDAQULcHJpY2VCZWZvcmUCDiBtYXJrZXRQcmljZTogCQCkAwEFC21hcmtldFByaWNlCQCXCgUFFWFtb3VudEJhc2VBc3NldEJvdWdodAUXcXVvdGVBc3NldFJlc2VydmVBZnRlcjEFFmJhc2VBc3NldFJlc2VydmVBZnRlcjEFF3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIxBRhjdW11bGF0aXZlTm90aW9uYWxBZnRlcjEBImNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnQEEF9vbGRQb3NpdGlvblNpemUSX29sZFBvc2l0aW9uTWFyZ2luJV9vbGRQb3NpdGlvbkN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24MX21hcmdpbkRlbHRhBA5mdW5kaW5nUGF5bWVudAMJAQIhPQIFEF9vbGRQb3NpdGlvblNpemUAAAQgX2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24JAR9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAQUQX29sZFBvc2l0aW9uU2l6ZQkBBG11bGQCCQBlAgUgX2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FJV9vbGRQb3NpdGlvbkN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FEF9vbGRQb3NpdGlvblNpemUAAAQMc2lnbmVkTWFyZ2luCQBkAgkAZQIFDF9tYXJnaW5EZWx0YQUOZnVuZGluZ1BheW1lbnQFEl9vbGRQb3NpdGlvbk1hcmdpbgQNJHQwMTM1MjExMzY0OAMJAGYCAAAFDHNpZ25lZE1hcmdpbgkAlAoCAAAJAQNhYnMBBQxzaWduZWRNYXJnaW4JAJQKAgkBA2FicwEFDHNpZ25lZE1hcmdpbgAABAxyZW1haW5NYXJnaW4IBQ0kdDAxMzUyMTEzNjQ4Al8xBAdiYWREZWJ0CAUNJHQwMTM1MjExMzY0OAJfMgkAlQoDBQxyZW1haW5NYXJnaW4FB2JhZERlYnQFDmZ1bmRpbmdQYXltZW50AQpzd2FwT3V0cHV0AwZfaXNBZGQQX2Jhc2VBc3NldEFtb3VudBRfY2hlY2tNYXhQcmljZUltcGFjdAQSX3F1b3RlQXNzZXRSZXNlcnZlCQEGcXRBc3RSAAQRX2Jhc2VBc3NldFJlc2VydmUJAQZic0FzdFIABAtwcmljZUJlZm9yZQkBBGRpdmQCBRJfcXVvdGVBc3NldFJlc2VydmUFEV9iYXNlQXNzZXRSZXNlcnZlAwkAAAIFEF9iYXNlQXNzZXRBbW91bnQAAAkAAgECGUludmFsaWQgYmFzZSBhc3NldCBhbW91bnQEAWsJAQRtdWxkAgUSX3F1b3RlQXNzZXRSZXNlcnZlBRFfYmFzZUFzc2V0UmVzZXJ2ZQQYYmFzZUFzc2V0UG9vbEFtb3VudEFmdGVyAwUGX2lzQWRkCQBkAgURX2Jhc2VBc3NldFJlc2VydmUFEF9iYXNlQXNzZXRBbW91bnQJAGUCBRFfYmFzZUFzc2V0UmVzZXJ2ZQUQX2Jhc2VBc3NldEFtb3VudAQPcXVvdGVBc3NldEFmdGVyCQEEZGl2ZAIFAWsFGGJhc2VBc3NldFBvb2xBbW91bnRBZnRlcgQOcXVvdGVBc3NldFNvbGQJAQNhYnMBCQBlAgUPcXVvdGVBc3NldEFmdGVyBRJfcXVvdGVBc3NldFJlc2VydmUEE21heFByaWNlSW1wYWN0VmFsdWUJAQ5tYXhQcmljZUltcGFjdAAEDSR0MDE0NjMyMTQ4MjUJAQ11cGRhdGVSZXNlcnZlAwkBASEBBQZfaXNBZGQFDnF1b3RlQXNzZXRTb2xkBRBfYmFzZUFzc2V0QW1vdW50BBdxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyMQgFDSR0MDE0NjMyMTQ4MjUCXzEEFmJhc2VBc3NldFJlc2VydmVBZnRlcjEIBQ0kdDAxNDYzMjE0ODI1Al8yBBd0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyMQgFDSR0MDE0NjMyMTQ4MjUCXzMEGGN1bXVsYXRpdmVOb3Rpb25hbEFmdGVyMQgFDSR0MDE0NjMyMTQ4MjUCXzQEC21hcmtldFByaWNlCQEEZGl2ZAIFDnF1b3RlQXNzZXRTb2xkBRBfYmFzZUFzc2V0QW1vdW50BAlwcmljZURpZmYJAQNhYnMBCQBlAgULcHJpY2VCZWZvcmUFC21hcmtldFByaWNlBAtwcmljZUltcGFjdAkAZQIFDERFQ0lNQUxfVU5JVAkBBGRpdmQCBQtwcmljZUJlZm9yZQkAZAIFC3ByaWNlQmVmb3JlBQlwcmljZURpZmYDAwkAZgIFC3ByaWNlSW1wYWN0BRNtYXhQcmljZUltcGFjdFZhbHVlBRRfY2hlY2tNYXhQcmljZUltcGFjdAcJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICDVByaWNlIGltcGFjdCAJAKQDAQULcHJpY2VJbXBhY3QCFCA+IG1heCBwcmljZSBpbXBhY3QgCQCkAwEFE21heFByaWNlSW1wYWN0VmFsdWUCFSBiZWZvcmUgcXVvdGUgYXNzZXQ6IAkApAMBBRJfcXVvdGVBc3NldFJlc2VydmUCFCBiZWZvcmUgYmFzZSBhc3NldDogCQCkAwEFEV9iYXNlQXNzZXRSZXNlcnZlAiAgYmFzZSBhc3NldCBhbW91bnQgdG8gZXhjaGFuZ2U6IAkApAMBBRBfYmFzZUFzc2V0QW1vdW50Ag8gcHJpY2UgYmVmb3JlOiAJAKQDAQULcHJpY2VCZWZvcmUCDyBtYXJrZXQgcHJpY2U6IAkApAMBBQttYXJrZXRQcmljZQkAmQoHBQ5xdW90ZUFzc2V0U29sZAUXcXVvdGVBc3NldFJlc2VydmVBZnRlcjEFFmJhc2VBc3NldFJlc2VydmVBZnRlcjEFF3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIxBRhjdW11bGF0aXZlTm90aW9uYWxBZnRlcjEJAGUCCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAMFBl9pc0FkZAkBA2FicwEFEF9iYXNlQXNzZXRBbW91bnQAAAkAZQIJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAMJAQEhAQUGX2lzQWRkCQEDYWJzAQUQX2Jhc2VBc3NldEFtb3VudAAAARJnZXRPcmFjbGVUd2FwUHJpY2UABAZvcmFjbGUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBQVrX29yYQIABAhwcmljZUtleQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUJa19vcmFfa2V5BAhibG9ja0tleQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUPa19vcmFfYmxvY2tfa2V5BAlsYXN0VmFsdWUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQZvcmFjbGUFCHByaWNlS2V5CQCsAgIJAKwCAgkArAICAiJDYW4gbm90IGdldCBvcmFjbGUgcHJpY2UuIE9yYWNsZTogCQClCAEFBm9yYWNsZQIGIGtleTogBQhwcmljZUtleQUJbGFzdFZhbHVlAQxnZXRTcG90UHJpY2UABBJfcXVvdGVBc3NldFJlc2VydmUJAQZxdEFzdFIABBFfYmFzZUFzc2V0UmVzZXJ2ZQkBBmJzQXN0UgAJAQRkaXZkAgUSX3F1b3RlQXNzZXRSZXNlcnZlBRFfYmFzZUFzc2V0UmVzZXJ2ZQEWaXNPdmVyRmx1Y3R1YXRpb25MaW1pdAAEC29yYWNsZVByaWNlCQESZ2V0T3JhY2xlVHdhcFByaWNlAAQMY3VycmVudFByaWNlCQEMZ2V0U3BvdFByaWNlAAkAZgIJAQRkaXZkAgkBA2FicwEJAGUCBQtvcmFjbGVQcmljZQUMY3VycmVudFByaWNlBQtvcmFjbGVQcmljZQkBC3NwcmVhZExpbWl0AAEjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwCB190cmFkZXIHX29wdGlvbgQNJHQwMTcyOTMxNzQyMQkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgQMcG9zaXRpb25TaXplCAUNJHQwMTcyOTMxNzQyMQJfMQQOcG9zaXRpb25NYXJnaW4IBQ0kdDAxNzI5MzE3NDIxAl8yBBRwb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDE3MjkzMTc0MjECXzMEEXBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwMTcyOTMxNzQyMQJfNAQPcG9zaXRpb25TaXplQWJzCQEDYWJzAQUMcG9zaXRpb25TaXplAwkAAAIFD3Bvc2l0aW9uU2l6ZUFicwAACQACAQIVSW52YWxpZCBwb3NpdGlvbiBzaXplBAdpc1Nob3J0CQBmAgAABQxwb3NpdGlvblNpemUEEHBvc2l0aW9uTm90aW9uYWwDCQAAAgUHX29wdGlvbgUPUE5MX09QVElPTl9TUE9UBA0kdDAxNzY2ODE3NzkyCQEKc3dhcE91dHB1dAMJAQEhAQUHaXNTaG9ydAUPcG9zaXRpb25TaXplQWJzBwQTb3V0UG9zaXRpb25Ob3Rpb25hbAgFDSR0MDE3NjY4MTc3OTICXzEEAngxCAUNJHQwMTc2NjgxNzc5MgJfMgQCeDIIBQ0kdDAxNzY2ODE3NzkyAl8zBAJ4MwgFDSR0MDE3NjY4MTc3OTICXzQFE291dFBvc2l0aW9uTm90aW9uYWwJAQRtdWxkAgUPcG9zaXRpb25TaXplQWJzCQESZ2V0T3JhY2xlVHdhcFByaWNlAAQNdW5yZWFsaXplZFBubAMFB2lzU2hvcnQJAGUCBRRwb3NpdGlvbk9wZW5Ob3Rpb25hbAUQcG9zaXRpb25Ob3Rpb25hbAkAZQIFEHBvc2l0aW9uTm90aW9uYWwFFHBvc2l0aW9uT3Blbk5vdGlvbmFsCQCUCgIFEHBvc2l0aW9uTm90aW9uYWwFDXVucmVhbGl6ZWRQbmwBD2NhbGNNYXJnaW5SYXRpbwMNX3JlbWFpbk1hcmdpbghfYmFkRGVidBFfcG9zaXRpb25Ob3Rpb25hbAkBBGRpdmQCCQBlAgUNX3JlbWFpbk1hcmdpbgUIX2JhZERlYnQFEV9wb3NpdGlvbk5vdGlvbmFsARZnZXRNYXJnaW5SYXRpb0J5T3B0aW9uAgdfdHJhZGVyB19vcHRpb24EDSR0MDE4NDYyMTg1NzMJAQtnZXRQb3NpdGlvbgEFB190cmFkZXIEDHBvc2l0aW9uU2l6ZQgFDSR0MDE4NDYyMTg1NzMCXzEEDnBvc2l0aW9uTWFyZ2luCAUNJHQwMTg0NjIxODU3MwJfMgQDcG9uCAUNJHQwMTg0NjIxODU3MwJfMwQRcG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDAxODQ2MjE4NTczAl80BA0kdDAxODU3OTE4NjcyCQEjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwCBQdfdHJhZGVyBQdfb3B0aW9uBBBwb3NpdGlvbk5vdGlvbmFsCAUNJHQwMTg1NzkxODY3MgJfMQQNdW5yZWFsaXplZFBubAgFDSR0MDE4NTc5MTg2NzICXzIEDSR0MDE4Njc3MTg4NDMJASJjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50BAUMcG9zaXRpb25TaXplBQ5wb3NpdGlvbk1hcmdpbgURcG9zaXRpb25Mc3RVcGRDUEYFDXVucmVhbGl6ZWRQbmwEDHJlbWFpbk1hcmdpbggFDSR0MDE4Njc3MTg4NDMCXzEEB2JhZERlYnQIBQ0kdDAxODY3NzE4ODQzAl8yCQEPY2FsY01hcmdpblJhdGlvAwUMcmVtYWluTWFyZ2luBQdiYWREZWJ0BRBwb3NpdGlvbk5vdGlvbmFsAQ5nZXRNYXJnaW5SYXRpbwEHX3RyYWRlcgkBFmdldE1hcmdpblJhdGlvQnlPcHRpb24CBQdfdHJhZGVyBQ9QTkxfT1BUSU9OX1NQT1QBFWludGVybmFsQ2xvc2VQb3NpdGlvbgIHX3RyYWRlchRfY2hlY2tNYXhQcmljZUltcGFjdAQNJHQwMTkxOTAxOTMxOAkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgQMcG9zaXRpb25TaXplCAUNJHQwMTkxOTAxOTMxOAJfMQQOcG9zaXRpb25NYXJnaW4IBQ0kdDAxOTE5MDE5MzE4Al8yBBRwb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDE5MTkwMTkzMTgCXzMEEXBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwMTkxOTAxOTMxOAJfNAQNJHQwMTkzMjQxOTQxMQkBI2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sAgUHX3RyYWRlcgUPUE5MX09QVElPTl9TUE9UBAJ4MQgFDSR0MDE5MzI0MTk0MTECXzEEDXVucmVhbGl6ZWRQbmwIBQ0kdDAxOTMyNDE5NDExAl8yBA0kdDAxOTQxNjE5NTg0CQEiY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudAQFDHBvc2l0aW9uU2l6ZQUOcG9zaXRpb25NYXJnaW4FEXBvc2l0aW9uTHN0VXBkQ1BGBQ11bnJlYWxpemVkUG5sBAxyZW1haW5NYXJnaW4IBQ0kdDAxOTQxNjE5NTg0Al8xBAdiYWREZWJ0CAUNJHQwMTk0MTYxOTU4NAJfMgQVZXhjaGFuZ2VkUG9zaXRpb25TaXplCQEBLQEFDHBvc2l0aW9uU2l6ZQQLcmVhbGl6ZWRQbmwFDXVucmVhbGl6ZWRQbmwEDW1hcmdpblRvVmF1bHQJAQEtAQUMcmVtYWluTWFyZ2luBA0kdDAxOTcxMTIwMDIyCQEKc3dhcE91dHB1dAMJAGYCBQxwb3NpdGlvblNpemUAAAkBA2FicwEFDHBvc2l0aW9uU2l6ZQUUX2NoZWNrTWF4UHJpY2VJbXBhY3QEGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQIBQ0kdDAxOTcxMTIwMDIyAl8xBBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwMTk3MTEyMDAyMgJfMgQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwMTk3MTEyMDAyMgJfMwQWdG90YWxQb3NpdGlvblNpemVBZnRlcggFDSR0MDE5NzExMjAwMjICXzQEF2N1bXVsYXRpdmVOb3Rpb25hbEFmdGVyCAUNJHQwMTk3MTEyMDAyMgJfNQQOdG90YWxMb25nQWZ0ZXIIBQ0kdDAxOTcxMTIwMDIyAl82BA90b3RhbFNob3J0QWZ0ZXIIBQ0kdDAxOTcxMTIwMDIyAl83BBlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyCQBlAgkBFG9wZW5JbnRlcmVzdE5vdGlvbmFsAAUUcG9zaXRpb25PcGVuTm90aW9uYWwJAJ4KDAUVZXhjaGFuZ2VkUG9zaXRpb25TaXplBQdiYWREZWJ0BQtyZWFsaXplZFBubAUNbWFyZ2luVG9WYXVsdAUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBRdjdW11bGF0aXZlTm90aW9uYWxBZnRlcgUZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcgUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAUOdG90YWxMb25nQWZ0ZXIFD3RvdGFsU2hvcnRBZnRlcgEQZ2V0VHdhcFNwb3RQcmljZQAECG1pbnV0ZUlkCQBpAgkAaQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wAOgHADwEDXN0YXJ0TWludXRlSWQJAGUCBQhtaW51dGVJZAUNVFdBUF9JTlRFUlZBTAQHbGlzdFN0cgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQ1rX2xhc3REYXRhU3RyAgAEBGxpc3QJALUJAgUHbGlzdFN0cgIBLAoBCGZpbHRlckZuAgthY2N1bXVsYXRvcgRuZXh0AwkAZwIFDXN0YXJ0TWludXRlSWQJAQ1wYXJzZUludFZhbHVlAQUEbmV4dAkAzQgCBQthY2N1bXVsYXRvcgkBDXBhcnNlSW50VmFsdWUBBQRuZXh0BQthY2N1bXVsYXRvcgQFbGlzdEYKAAIkbAUEbGlzdAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEIZmlsdGVyRm4CBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDIwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAQIbWF4SW5kZXgDCQBmAgkAkAMBBQVsaXN0RgAACQCWAwEFBWxpc3RGCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbGlzdAAABAxsYXN0TWludXRlSWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUOa19sYXN0TWludXRlSWQAAAQWZW5kTGFzdEN1bXVsYXRpdmVQcmljZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgUda190d2FwRGF0YUxhc3RDdW11bGF0aXZlUHJpY2UCAV8JAKQDAQUMbGFzdE1pbnV0ZUlkAAAEDGVuZExhc3RQcmljZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgUTa190d2FwRGF0YUxhc3RQcmljZQIBXwkApAMBBQxsYXN0TWludXRlSWQAAAQSbm93Q3VtdWxhdGl2ZVByaWNlCQBkAgUWZW5kTGFzdEN1bXVsYXRpdmVQcmljZQkAaAIJAGUCBQhtaW51dGVJZAUMbGFzdE1pbnV0ZUlkBQxlbmRMYXN0UHJpY2UEGHN0YXJ0TGFzdEN1bXVsYXRpdmVQcmljZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgUda190d2FwRGF0YUxhc3RDdW11bGF0aXZlUHJpY2UCAV8JAKQDAQUIbWF4SW5kZXgAAAQOc3RhcnRMYXN0UHJpY2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIFE2tfdHdhcERhdGFMYXN0UHJpY2UCAV8JAKQDAQUIbWF4SW5kZXgAAAQUc3RhcnRDdW11bGF0aXZlUHJpY2UJAGQCBRhzdGFydExhc3RDdW11bGF0aXZlUHJpY2UJAGgCCQBlAgUNc3RhcnRNaW51dGVJZAUIbWF4SW5kZXgFDnN0YXJ0TGFzdFByaWNlCQBpAgkAZQIFEm5vd0N1bXVsYXRpdmVQcmljZQUUc3RhcnRDdW11bGF0aXZlUHJpY2UFDVRXQVBfSU5URVJWQUwBDnVwZGF0ZVNldHRpbmdzBxBfaW5pdE1hcmdpblJhdGlvBF9tbXIUX2xpcXVpZGF0aW9uRmVlUmF0aW8OX2Z1bmRpbmdQZXJpb2QEX2ZlZQxfc3ByZWFkTGltaXQPX21heFByaWNlSW1wYWN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrX2luaXRNYXJnaW5SYXRpbwUQX2luaXRNYXJnaW5SYXRpbwkAzAgCCQEMSW50ZWdlckVudHJ5AgUYa19tYWludGVuYW5jZU1hcmdpblJhdGlvBQRfbW1yCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRVrX2xpcXVpZGF0aW9uRmVlUmF0aW8FFF9saXF1aWRhdGlvbkZlZVJhdGlvCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ9rX2Z1bmRpbmdQZXJpb2QFDl9mdW5kaW5nUGVyaW9kCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQVrX2ZlZQUEX2ZlZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUNa19zcHJlYWRMaW1pdAUMX3NwcmVhZExpbWl0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRBrX21heFByaWNlSW1wYWN0BQ9fbWF4UHJpY2VJbXBhY3QFA25pbAENdXBkYXRlRnVuZGluZwURX25leHRGdW5kaW5nQmxvY2skX2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uJV9sYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24QX2xvbmdGdW5kaW5nUmF0ZRFfc2hvcnRGdW5kaW5nUmF0ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUSa19uZXh0RnVuZGluZ0Jsb2NrBRFfbmV4dEZ1bmRpbmdCbG9jawkAzAgCCQEMSW50ZWdlckVudHJ5AgUla19sYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUkX2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uCQDMCAIJAQxJbnRlZ2VyRW50cnkCBSZrX2xhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUlX2xhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgURa19sb25nRnVuZGluZ1JhdGUFEF9sb25nRnVuZGluZ1JhdGUJAMwIAgkBDEludGVnZXJFbnRyeQIFEmtfc2hvcnRGdW5kaW5nUmF0ZQURX3Nob3J0RnVuZGluZ1JhdGUFA25pbAEOdXBkYXRlUG9zaXRpb24FCF9hZGRyZXNzBV9zaXplB19tYXJnaW4NX29wZW5Ob3Rpb25hbCBfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUOa19wb3NpdGlvblNpemUFCF9hZGRyZXNzBQVfc2l6ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUQa19wb3NpdGlvbk1hcmdpbgUIX2FkZHJlc3MFB19tYXJnaW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFFmtfcG9zaXRpb25PcGVuTm90aW9uYWwFCF9hZGRyZXNzBQ1fb3Blbk5vdGlvbmFsCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBS5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBQhfYWRkcmVzcwUgX2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FA25pbAEKYXBwZW5kVHdhcAEFcHJpY2UECG1pbnV0ZUlkCQBpAgkAaQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wAOgHADwEEHByZXZpb3VzTWludXRlSWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUOa19sYXN0TWludXRlSWQAAAMJAGYCBRBwcmV2aW91c01pbnV0ZUlkBQhtaW51dGVJZAkAAgECEVRXQVAgb3V0LW9mLW9yZGVyBAxsYXN0TWludXRlSWQDCQAAAgUQcHJldmlvdXNNaW51dGVJZAAABQhtaW51dGVJZAUQcHJldmlvdXNNaW51dGVJZAMJAGYCBQhtaW51dGVJZAUQcHJldmlvdXNNaW51dGVJZAQTcHJldkN1bXVsYXRpdmVQcmljZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgUda190d2FwRGF0YUxhc3RDdW11bGF0aXZlUHJpY2UCAV8JAKQDAQUQcHJldmlvdXNNaW51dGVJZAAABAlwcmV2UHJpY2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIFE2tfdHdhcERhdGFMYXN0UHJpY2UCAV8JAKQDAQUQcHJldmlvdXNNaW51dGVJZAUFcHJpY2UEE2xhc3RDdW11bGF0aXZlUHJpY2UJAGQCBRNwcmV2Q3VtdWxhdGl2ZVByaWNlCQBoAgkAZQIFCG1pbnV0ZUlkBQxsYXN0TWludXRlSWQFCXByZXZQcmljZQQEbGlzdAkBC3B1c2hUb1F1ZXVlAwkBCXN0clRvTGlzdAEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUNa19sYXN0RGF0YVN0cgIABQ1UV0FQX0lOVEVSVkFMCQCkAwEFCG1pbnV0ZUlkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBR1rX3R3YXBEYXRhTGFzdEN1bXVsYXRpdmVQcmljZQkApAMBBQhtaW51dGVJZAUTbGFzdEN1bXVsYXRpdmVQcmljZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUTa190d2FwRGF0YUxhc3RQcmljZQkApAMBBQhtaW51dGVJZAUFcHJpY2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFGmtfdHdhcERhdGFQcmV2aW91c01pbnV0ZUlkCQCkAwEFCG1pbnV0ZUlkBRBwcmV2aW91c01pbnV0ZUlkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ5rX2xhc3RNaW51dGVJZAUIbWludXRlSWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUNa19sYXN0RGF0YVN0cgkBCWxpc3RUb1N0cgEFBGxpc3QFA25pbAQYdHdhcERhdGFQcmV2aW91c01pbnV0ZUlkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFGmtfdHdhcERhdGFQcmV2aW91c01pbnV0ZUlkCQCkAwEFCG1pbnV0ZUlkAAAEE3ByZXZDdW11bGF0aXZlUHJpY2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUda190d2FwRGF0YUxhc3RDdW11bGF0aXZlUHJpY2UJAKQDAQUYdHdhcERhdGFQcmV2aW91c01pbnV0ZUlkAAAECXByZXZQcmljZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBRNrX3R3YXBEYXRhTGFzdFByaWNlCQCkAwEFGHR3YXBEYXRhUHJldmlvdXNNaW51dGVJZAUFcHJpY2UEE2xhc3RDdW11bGF0aXZlUHJpY2UJAGQCBRNwcmV2Q3VtdWxhdGl2ZVByaWNlCQBoAgkAZQIFCG1pbnV0ZUlkBRh0d2FwRGF0YVByZXZpb3VzTWludXRlSWQFCXByZXZQcmljZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUda190d2FwRGF0YUxhc3RDdW11bGF0aXZlUHJpY2UJAKQDAQUIbWludXRlSWQFE2xhc3RDdW11bGF0aXZlUHJpY2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFE2tfdHdhcERhdGFMYXN0UHJpY2UJAKQDAQUIbWludXRlSWQFBXByaWNlBQNuaWwBEXVwZGF0ZUFtbVJlc2VydmVzAgdfcXRBc3RSB19ic0FzdFIJAMwIAgkBDEludGVnZXJFbnRyeQIFE2tfcXVvdGVBc3NldFJlc2VydmUFB19xdEFzdFIJAMwIAgkBDEludGVnZXJFbnRyeQIFEmtfYmFzZUFzc2V0UmVzZXJ2ZQUHX2JzQXN0UgUDbmlsAQl1cGRhdGVBbW0HB19xdEFzdFIHX2JzQXN0UhdfdG90YWxQb3NpdGlvblNpemVBZnRlchhfY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIVX29wZW5JbnRlcmVzdE5vdGlvbmFsFl90b3RhbExvbmdQb3NpdGlvblNpemUXX3RvdGFsU2hvcnRQb3NpdGlvblNpemUDCQECIT0CCQBlAgUWX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQUXX3RvdGFsU2hvcnRQb3NpdGlvblNpemUFF190b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICGEludmFsaWQgQU1NIHN0YXRlIGRhdGE6IAkApAMBBRZfdG90YWxMb25nUG9zaXRpb25TaXplAgQgKyAgCQCkAwEFF190b3RhbFNob3J0UG9zaXRpb25TaXplAgQgIT0gCQCkAwEFF190b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCQDOCAIJAM4IAgkBEXVwZGF0ZUFtbVJlc2VydmVzAgUHX3F0QXN0UgUHX2JzQXN0UgkAzAgCCQEMSW50ZWdlckVudHJ5AgUTa190b3RhbFBvc2l0aW9uU2l6ZQUXX3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIJAMwIAgkBDEludGVnZXJFbnRyeQIFFGtfY3VtdWxhdGl2ZU5vdGlvbmFsBRhfY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIJAMwIAgkBDEludGVnZXJFbnRyeQIFFmtfb3BlbkludGVyZXN0Tm90aW9uYWwFFV9vcGVuSW50ZXJlc3ROb3Rpb25hbAkAzAgCCQEMSW50ZWdlckVudHJ5AgUXa190b3RhbExvbmdQb3NpdGlvblNpemUFFl90b3RhbExvbmdQb3NpdGlvblNpemUJAMwIAgkBDEludGVnZXJFbnRyeQIFGGtfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQUXX3RvdGFsU2hvcnRQb3NpdGlvblNpemUFA25pbAkBCmFwcGVuZFR3YXABCQEEZGl2ZAIFB19xdEFzdFIFB19ic0FzdFIBDmRlbGV0ZVBvc2l0aW9uAQhfYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBQ5rX3Bvc2l0aW9uU2l6ZQUIX2FkZHJlc3MJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDnRvQ29tcG9zaXRlS2V5AgUQa19wb3NpdGlvbk1hcmdpbgUIX2FkZHJlc3MJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDnRvQ29tcG9zaXRlS2V5AgUWa19wb3NpdGlvbk9wZW5Ob3Rpb25hbAUIX2FkZHJlc3MJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDnRvQ29tcG9zaXRlS2V5AgUua19wb3NpdGlvbkxhc3RVcGRhdGVkQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUIX2FkZHJlc3MFA25pbAEId2l0aGRyYXcCCF9hZGRyZXNzB19hbW91bnQEB2JhbGFuY2UJAPAHAgUEdGhpcwkBCnF1b3RlQXNzZXQAAwkAZgIFB19hbW91bnQFB2JhbGFuY2UJAAIBCQCsAgIJAKwCAgkArAICAhNVbmFibGUgdG8gd2l0aGRyYXcgCQCkAwEFB19hbW91bnQCFyBmcm9tIGNvbnRyYWN0IGJhbGFuY2UgCQCkAwEFB2JhbGFuY2UJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUIX2FkZHJlc3MFB19hbW91bnQJAQpxdW90ZUFzc2V0AAUDbmlsAQ11cGRhdGVCYWxhbmNlAQFpAwkAZgIAAAUBaQkAAgECB0JhbGFuY2UJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtfYmFsYW5jZQUBaQUDbmlsAQt0cmFuc2ZlckZlZQEBaQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEOc3Rha2luZ0FkZHJlc3MABQFpCQEKcXVvdGVBc3NldAAFA25pbBIBaQEFcGF1c2UAAwkBAiE9AggFAWkGY2FsbGVyCQEMYWRtaW5BZGRyZXNzAAkAAgECGkludmFsaWQgdG9nZ2xlUGF1c2UgcGFyYW1zCQDMCAIJAQxCb29sZWFuRW50cnkCBQhrX3BhdXNlZAYFA25pbAFpAQd1bnBhdXNlAAMJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAJAAIBAhpJbnZhbGlkIHRvZ2dsZVBhdXNlIHBhcmFtcwkAzAgCCQEMQm9vbGVhbkVudHJ5AgUIa19wYXVzZWQHBQNuaWwBaQEMYWRkTGlxdWlkaXR5ARFfcXVvdGVBc3NldEFtb3VudAMDCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MABgkAZwIAAAURX3F1b3RlQXNzZXRBbW91bnQJAAIBAhtJbnZhbGlkIGFkZExpcXVpZGl0eSBwYXJhbXMEB19xdEFzdFIJAQZxdEFzdFIABAdfYnNBc3RSCQEGYnNBc3RSAAQFcHJpY2UJAQRkaXZkAgUHX3F0QXN0UgUHX2JzQXN0UgQUYmFzZUFzc2V0QW1vdW50VG9BZGQJAQRkaXZkAgURX3F1b3RlQXNzZXRBbW91bnQFBXByaWNlBAtxdEFzdFJBZnRlcgkAZAIFB19xdEFzdFIFEV9xdW90ZUFzc2V0QW1vdW50BAtic0FzdFJBZnRlcgkAZAIFB19ic0FzdFIFFGJhc2VBc3NldEFtb3VudFRvQWRkCQERdXBkYXRlQW1tUmVzZXJ2ZXMCBQtxdEFzdFJBZnRlcgULYnNBc3RSQWZ0ZXIBaQEPcmVtb3ZlTGlxdWlkaXR5ARFfcXVvdGVBc3NldEFtb3VudAMDCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MABgkAZwIAAAURX3F1b3RlQXNzZXRBbW91bnQJAAIBAh5JbnZhbGlkIHJlbW92ZUxpcXVpZGl0eSBwYXJhbXMEB19xdEFzdFIJAQZxdEFzdFIABAdfYnNBc3RSCQEGYnNBc3RSAAQFcHJpY2UJAQRkaXZkAgUHX3F0QXN0UgUHX2JzQXN0UgQXYmFzZUFzc2V0QW1vdW50VG9SZW1vdmUJAQRkaXZkAgURX3F1b3RlQXNzZXRBbW91bnQFBXByaWNlBAtxdEFzdFJBZnRlcgkAZQIFB19xdEFzdFIFEV9xdW90ZUFzc2V0QW1vdW50BAtic0FzdFJBZnRlcgkAZQIFB19ic0FzdFIFF2Jhc2VBc3NldEFtb3VudFRvUmVtb3ZlCQERdXBkYXRlQW1tUmVzZXJ2ZXMCBQtxdEFzdFJBZnRlcgULYnNBc3RSQWZ0ZXIBaQEOY2hhbmdlU2V0dGluZ3MHEF9pbml0TWFyZ2luUmF0aW8EX21tchRfbGlxdWlkYXRpb25GZWVSYXRpbw5fZnVuZGluZ1BlcmlvZARfZmVlDF9zcHJlYWRMaW1pdA9fbWF4UHJpY2VJbXBhY3QDCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MACQACAQIdSW52YWxpZCBjaGFuZ2VTZXR0aW5ncyBwYXJhbXMJAQ51cGRhdGVTZXR0aW5ncwcFEF9pbml0TWFyZ2luUmF0aW8FBF9tbXIFFF9saXF1aWRhdGlvbkZlZVJhdGlvBQ5fZnVuZGluZ1BlcmlvZAUEX2ZlZQUMX3NwcmVhZExpbWl0BQ9fbWF4UHJpY2VJbXBhY3QBaQEKaW5pdGlhbGl6ZQwHX3F0QXN0UgdfYnNBc3RSDl9mdW5kaW5nUGVyaW9kEF9pbml0TWFyZ2luUmF0aW8EX21tchRfbGlxdWlkYXRpb25GZWVSYXRpbwRfZmVlB19vcmFjbGUKX29yYWNsZUtleQxfY29vcmRpbmF0b3IMX3NwcmVhZExpbWl0D19tYXhQcmljZUltcGFjdAMDAwMDAwMDAwMJAGcCAAAFB19xdEFzdFIGCQBnAgAABQdfYnNBc3RSBgkAZwIAAAUOX2Z1bmRpbmdQZXJpb2QGCQBnAgAABRBfaW5pdE1hcmdpblJhdGlvBgkAZwIAAAUEX21tcgYJAGcCAAAFFF9saXF1aWRhdGlvbkZlZVJhdGlvBgkAZwIAAAUEX2ZlZQYJAGcCAAAFDF9zcHJlYWRMaW1pdAYJAGcCAAAFD19tYXhQcmljZUltcGFjdAYJAQtpbml0aWFsaXplZAAJAAIBAh1JbnZhbGlkIGluaXRpYWxpemUgcGFyYW1ldGVycwkAzggCCQDOCAIJAM4IAgkAzggCCQEJdXBkYXRlQW1tBwUHX3F0QXN0UgUHX2JzQXN0UgAAAAAAAAAAAAAJAQ51cGRhdGVTZXR0aW5ncwcFEF9pbml0TWFyZ2luUmF0aW8FBF9tbXIFFF9saXF1aWRhdGlvbkZlZVJhdGlvBQ5fZnVuZGluZ1BlcmlvZAUEX2ZlZQUMX3NwcmVhZExpbWl0BQ9fbWF4UHJpY2VJbXBhY3QJAQ11cGRhdGVGdW5kaW5nBQkAZAIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQ5fZnVuZGluZ1BlcmlvZAAAAAAAAAAACQENdXBkYXRlQmFsYW5jZQEAAAkAzAgCCQEMQm9vbGVhbkVudHJ5AgUNa19pbml0aWFsaXplZAYJAMwIAgkBC1N0cmluZ0VudHJ5AgUFa19vcmEFB19vcmFjbGUJAMwIAgkBC1N0cmluZ0VudHJ5AgUJa19vcmFfa2V5BQpfb3JhY2xlS2V5CQDMCAIJAQtTdHJpbmdFbnRyeQIFFGtfY29vcmRpbmF0b3JBZGRyZXNzBQxfY29vcmRpbmF0b3IFA25pbAFpARFzZXRNYXhQcmljZUltcGFjdAEPX21heFByaWNlSW1wYWN0AwMJAGcCAAAFD19tYXhQcmljZUltcGFjdAYJAQEhAQkBC2luaXRpYWxpemVkAAkAAgECIkludmFsaWQgX21heFByaWNlSW1wYWN0IHBhcmFtZXRlcnMJAQ51cGRhdGVTZXR0aW5ncwcJAQ9pbml0TWFyZ2luUmF0aW8ACQEWbWFpbnRlbmFuY2VNYXJnaW5SYXRpbwAJARNsaXF1aWRhdGlvbkZlZVJhdGlvAAkBEGZ1bmRpbmdQZXJpb2RSYXcACQEDZmVlAAkBC3NwcmVhZExpbWl0AAUPX21heFByaWNlSW1wYWN0AWkBEnNldEluaXRNYXJnaW5SYXRpbwEQX2luaXRNYXJnaW5SYXRpbwMDCQBnAgAABRBfaW5pdE1hcmdpblJhdGlvBgkBASEBCQELaW5pdGlhbGl6ZWQACQACAQIlSW52YWxpZCBzZXRJbml0TWFyZ2luUmF0aW8gcGFyYW1ldGVycwkBDnVwZGF0ZVNldHRpbmdzBwUQX2luaXRNYXJnaW5SYXRpbwkBFm1haW50ZW5hbmNlTWFyZ2luUmF0aW8ACQETbGlxdWlkYXRpb25GZWVSYXRpbwAJARBmdW5kaW5nUGVyaW9kUmF3AAkBA2ZlZQAJAQtzcHJlYWRMaW1pdAAJAQ5tYXhQcmljZUltcGFjdAABaQEQZGVjcmVhc2VQb3NpdGlvbgMHX2Ftb3VudAlfbGV2ZXJhZ2UTX21pbkJhc2VBc3NldEFtb3VudAMDAwMDCQBnAgAABQdfYW1vdW50BgkBASEBCQELaW5pdGlhbGl6ZWQABgkBASEBCQEWcmVxdWlyZU1vcmVNYXJnaW5SYXRpbwMJAQRkaXZkAgUMREVDSU1BTF9VTklUBQlfbGV2ZXJhZ2UJAQ9pbml0TWFyZ2luUmF0aW8ABgYJAQEhAQkBE3JlcXVpcmVPcGVuUG9zaXRpb24BCQClCAEIBQFpBmNhbGxlcgYJAQZwYXVzZWQACQACAQIjSW52YWxpZCBkZWNyZWFzZVBvc2l0aW9uIHBhcmFtZXRlcnMEDSR0MDMxNzMxMzE4ODMJAQtnZXRQb3NpdGlvbgEJAKUIAQgFAWkGY2FsbGVyBA9vbGRQb3NpdGlvblNpemUIBQ0kdDAzMTczMTMxODgzAl8xBBFvbGRQb3NpdGlvbk1hcmdpbggFDSR0MDMxNzMxMzE4ODMCXzIEF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwMzE3MzEzMTg4MwJfMwQUb2xkUG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDAzMTczMTMxODgzAl80BApfZGlyZWN0aW9uAwkAZgIFD29sZFBvc2l0aW9uU2l6ZQAABQlESVJfU0hPUlQFCERJUl9MT05HBAVpc0FkZAkAAAIFCl9kaXJlY3Rpb24FCERJUl9MT05HBAxvcGVuTm90aW9uYWwJAQRtdWxkAgUHX2Ftb3VudAUJX2xldmVyYWdlBA0kdDAzMjA1NjMyMTcyCQEjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwCCQClCAEIBQFpBmNhbGxlcgUPUE5MX09QVElPTl9TUE9UBBNvbGRQb3NpdGlvbk5vdGlvbmFsCAUNJHQwMzIwNTYzMjE3MgJfMQQNdW5yZWFsaXplZFBubAgFDSR0MDMyMDU2MzIxNzICXzIEDSR0MDMyMTc4MzQ3MjcDCQBmAgUTb2xkUG9zaXRpb25Ob3Rpb25hbAUMb3Blbk5vdGlvbmFsBA0kdDAzMjU1NTMyNzc0CQEJc3dhcElucHV0AgUFaXNBZGQFDG9wZW5Ob3Rpb25hbAQVZXhjaGFuZ2VkUG9zaXRpb25TaXplCAUNJHQwMzI1NTUzMjc3NAJfMQQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDMyNTU1MzI3NzQCXzIEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDMyNTU1MzI3NzQCXzMEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDAzMjU1NTMyNzc0Al80BBdjdW11bGF0aXZlTm90aW9uYWxBZnRlcggFDSR0MDMyNTU1MzI3NzQCXzUEGGV4Y2hhbmdlZFBvc2l0aW9uU2l6ZUFicwkBA2FicwEFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQMDCQECIT0CBRNfbWluQmFzZUFzc2V0QW1vdW50AAAJAGYCBRNfbWluQmFzZUFzc2V0QW1vdW50BRhleGNoYW5nZWRQb3NpdGlvblNpemVBYnMHCQACAQkArAICCQCsAgIJAKwCAgIlVG9vIGxpdHRsZSBiYXNlIGFzc2V0IGV4Y2hhbmdlZCwgZ290IAkApAMBBRhleGNoYW5nZWRQb3NpdGlvblNpemVBYnMCCiBleHBlY3RlZCAJAKQDAQUTX21pbkJhc2VBc3NldEFtb3VudAQLcmVhbGl6ZWRQbmwJAQRkaXZkAgkBBG11bGQCBQ11bnJlYWxpemVkUG5sBRhleGNoYW5nZWRQb3NpdGlvblNpemVBYnMJAQNhYnMBBQ9vbGRQb3NpdGlvblNpemUEDSR0MDMzMjExMzM0NTYJASJjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50BAUPb2xkUG9zaXRpb25TaXplBRFvbGRQb3NpdGlvbk1hcmdpbgUUb2xkUG9zaXRpb25Mc3RVcGRDUEYFC3JlYWxpemVkUG5sBAxyZW1haW5NYXJnaW4IBQ0kdDAzMzIxMTMzNDU2Al8xBAdiYWREZWJ0CAUNJHQwMzMyMTEzMzQ1NgJfMgQOZnVuZGluZ1BheW1lbnQIBQ0kdDAzMzIxMTMzNDU2Al8zBBlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BQxvcGVuTm90aW9uYWwEEnVucmVhbGl6ZWRQbmxBZnRlcgkAZQIFDXVucmVhbGl6ZWRQbmwFC3JlYWxpemVkUG5sBBJyZW1haW5PcGVuTm90aW9uYWwDCQBmAgUPb2xkUG9zaXRpb25TaXplAAAJAGUCCQBlAgUTb2xkUG9zaXRpb25Ob3Rpb25hbAUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAUSdW5yZWFsaXplZFBubEFmdGVyCQBlAgkAZAIFEnVucmVhbGl6ZWRQbmxBZnRlcgUTb2xkUG9zaXRpb25Ob3Rpb25hbAUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAQPbmV3UG9zaXRpb25TaXplCQBkAgUPb2xkUG9zaXRpb25TaXplBRVleGNoYW5nZWRQb3NpdGlvblNpemUJAJ0KCwUPbmV3UG9zaXRpb25TaXplBQxyZW1haW5NYXJnaW4JAQNhYnMBBRJyZW1haW5PcGVuTm90aW9uYWwJAR9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAQUPbmV3UG9zaXRpb25TaXplBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIFF2N1bXVsYXRpdmVOb3Rpb25hbEFmdGVyCQBlAgkBFG9wZW5JbnRlcmVzdE5vdGlvbmFsAAUMb3Blbk5vdGlvbmFsCQBlAgkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQADCQBmAgUPbmV3UG9zaXRpb25TaXplAAAJAQNhYnMBBRVleGNoYW5nZWRQb3NpdGlvblNpemUAAAkAZQIJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAMJAGYCAAAFD25ld1Bvc2l0aW9uU2l6ZQkBA2FicwEFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQAACQACAQIUQ2xvc2UgcG9zaXRpb24gZmlyc3QED25ld1Bvc2l0aW9uU2l6ZQgFDSR0MDMyMTc4MzQ3MjcCXzEEF25ld1Bvc2l0aW9uUmVtYWluTWFyZ2luCAUNJHQwMzIxNzgzNDcyNwJfMgQXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDAzMjE3ODM0NzI3Al8zBBRuZXdQb3NpdGlvbkxhdGVzdENQRggFDSR0MDMyMTc4MzQ3MjcCXzQEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDMyMTc4MzQ3MjcCXzUEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDAzMjE3ODM0NzI3Al82BBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwMzIxNzgzNDcyNwJfNwQXY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIIBQ0kdDAzMjE3ODM0NzI3Al84BBlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyCAUNJHQwMzIxNzgzNDcyNwJfOQQOdG90YWxMb25nQWZ0ZXIIBQ0kdDAzMjE3ODM0NzI3A18xMAQPdG90YWxTaG9ydEFmdGVyCAUNJHQwMzIxNzgzNDcyNwNfMTEEDm5vdGlmeU5vdGlvbmFsCQD8BwQJAQxtaW5lckFkZHJlc3MAAg5ub3RpZnlOb3Rpb25hbAkAzAgCCQClCAEIBQFpBmNhbGxlcgkAzAgCBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAUDbmlsBQNuaWwDCQAAAgUObm90aWZ5Tm90aW9uYWwFDm5vdGlmeU5vdGlvbmFsCQDOCAIJAQ51cGRhdGVQb3NpdGlvbgUJAKUIAQgFAWkGY2FsbGVyBQ9uZXdQb3NpdGlvblNpemUFF25ld1Bvc2l0aW9uUmVtYWluTWFyZ2luBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAUUbmV3UG9zaXRpb25MYXRlc3RDUEYJAQl1cGRhdGVBbW0HBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIFF2N1bXVsYXRpdmVOb3Rpb25hbEFmdGVyBRlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyBQ50b3RhbExvbmdBZnRlcgUPdG90YWxTaG9ydEFmdGVyCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEGluY3JlYXNlUG9zaXRpb24DCl9kaXJlY3Rpb24JX2xldmVyYWdlE19taW5CYXNlQXNzZXRBbW91bnQECl9yYXdBbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50AwMDAwMDAwkBAiE9AgUKX2RpcmVjdGlvbgUIRElSX0xPTkcJAQIhPQIFCl9kaXJlY3Rpb24FCURJUl9TSE9SVAcGCQBnAgAABQpfcmF3QW1vdW50BgkBASEBCQELaW5pdGlhbGl6ZWQABgkBAiE9AggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkCQEKcXVvdGVBc3NldAAGCQEBIQEJARZyZXF1aXJlTW9yZU1hcmdpblJhdGlvAwkBBGRpdmQCBQxERUNJTUFMX1VOSVQFCV9sZXZlcmFnZQkBD2luaXRNYXJnaW5SYXRpbwAGBgkBBnBhdXNlZAAJAAIBAiNJbnZhbGlkIGluY3JlYXNlUG9zaXRpb24gcGFyYW1ldGVycwQJZmVlQW1vdW50CQEEbXVsZAIFCl9yYXdBbW91bnQJAQNmZWUABAdfYW1vdW50CQBlAgUKX3Jhd0Ftb3VudAUJZmVlQW1vdW50BA0kdDAzNTg0NTM1OTk3CQELZ2V0UG9zaXRpb24BCQClCAEIBQFpBmNhbGxlcgQPb2xkUG9zaXRpb25TaXplCAUNJHQwMzU4NDUzNTk5NwJfMQQRb2xkUG9zaXRpb25NYXJnaW4IBQ0kdDAzNTg0NTM1OTk3Al8yBBdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDM1ODQ1MzU5OTcCXzMEFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwMzU4NDUzNTk5NwJfNAQNaXNOZXdQb3NpdGlvbgkAAAIFD29sZFBvc2l0aW9uU2l6ZQAABA9pc1NhbWVEaXJlY3Rpb24DCQBmAgUPb2xkUG9zaXRpb25TaXplAAAJAAACBQpfZGlyZWN0aW9uBQhESVJfTE9ORwkAAAIFCl9kaXJlY3Rpb24FCURJUl9TSE9SVAQOZXhwYW5kRXhpc3RpbmcDCQEBIQEFDWlzTmV3UG9zaXRpb24FD2lzU2FtZURpcmVjdGlvbgcEBWlzQWRkCQAAAgUKX2RpcmVjdGlvbgUIRElSX0xPTkcEDSR0MDM2Mjg2Mzg2NzUDAwUNaXNOZXdQb3NpdGlvbgYFDmV4cGFuZEV4aXN0aW5nBAxvcGVuTm90aW9uYWwJAQRtdWxkAgUHX2Ftb3VudAUJX2xldmVyYWdlBA0kdDAzNjcxMDM2OTE2CQEJc3dhcElucHV0AgUFaXNBZGQFDG9wZW5Ob3Rpb25hbAQVYW1vdW50QmFzZUFzc2V0Qm91Z2h0CAUNJHQwMzY3MTAzNjkxNgJfMQQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDM2NzEwMzY5MTYCXzIEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDM2NzEwMzY5MTYCXzMEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDAzNjcxMDM2OTE2Al80BBdjdW11bGF0aXZlTm90aW9uYWxBZnRlcggFDSR0MDM2NzEwMzY5MTYCXzUDAwkBAiE9AgUTX21pbkJhc2VBc3NldEFtb3VudAAACQBmAgUTX21pbkJhc2VBc3NldEFtb3VudAkBA2FicwEFFWFtb3VudEJhc2VBc3NldEJvdWdodAcJAAIBCQCsAgIJAKwCAgkArAICAg1MaW1pdCBlcnJvcjogCQCkAwEJAQNhYnMBBRVhbW91bnRCYXNlQXNzZXRCb3VnaHQCAyA8IAkApAMBBRNfbWluQmFzZUFzc2V0QW1vdW50BA9uZXdQb3NpdGlvblNpemUJAGQCBQ9vbGRQb3NpdGlvblNpemUFFWFtb3VudEJhc2VBc3NldEJvdWdodAQZaW5jcmVhc2VNYXJnaW5SZXF1aXJlbWVudAkBBGRpdmQCBQxvcGVuTm90aW9uYWwFCV9sZXZlcmFnZQQNJHQwMzcyOTczNzUzNgkBImNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnQEBQ9vbGRQb3NpdGlvblNpemUFEW9sZFBvc2l0aW9uTWFyZ2luBRRvbGRQb3NpdGlvbkxzdFVwZENQRgUZaW5jcmVhc2VNYXJnaW5SZXF1aXJlbWVudAQMcmVtYWluTWFyZ2luCAUNJHQwMzcyOTczNzUzNgJfMQQCeDEIBQ0kdDAzNzI5NzM3NTM2Al8yBAJ4MggFDSR0MDM3Mjk3Mzc1MzYCXzMJAJ0KCwUPbmV3UG9zaXRpb25TaXplBQxyZW1haW5NYXJnaW4JAGQCBRdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAUMb3Blbk5vdGlvbmFsCQEfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEFD25ld1Bvc2l0aW9uU2l6ZQUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBRdjdW11bGF0aXZlTm90aW9uYWxBZnRlcgkAZAIJARRvcGVuSW50ZXJlc3ROb3Rpb25hbAAFDG9wZW5Ob3Rpb25hbAkAZAIJARV0b3RhbExvbmdQb3NpdGlvblNpemUAAwkAZgIFD25ld1Bvc2l0aW9uU2l6ZQAACQEDYWJzAQUVYW1vdW50QmFzZUFzc2V0Qm91Z2h0AAAJAGQCCQEWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQADCQBmAgAABQ9uZXdQb3NpdGlvblNpemUJAQNhYnMBBRVhbW91bnRCYXNlQXNzZXRCb3VnaHQAAAQMb3Blbk5vdGlvbmFsCQEEbXVsZAIFB19hbW91bnQFCV9sZXZlcmFnZQQNJHQwMzgzNjgzODQ4NAkBI2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sAgkApQgBCAUBaQZjYWxsZXIFD1BOTF9PUFRJT05fU1BPVAQTb2xkUG9zaXRpb25Ob3Rpb25hbAgFDSR0MDM4MzY4Mzg0ODQCXzEEDXVucmVhbGl6ZWRQbmwIBQ0kdDAzODM2ODM4NDg0Al8yAwkAZgIFE29sZFBvc2l0aW9uTm90aW9uYWwFDG9wZW5Ob3Rpb25hbAkAAgECLlVzZSBkZWNyZWFzZVBvc2l0aW9uIHRvIGRlY3JlYXNlIHBvc2l0aW9uIHNpemUJAAIBAhRDbG9zZSBwb3NpdGlvbiBmaXJzdAQPbmV3UG9zaXRpb25TaXplCAUNJHQwMzYyODYzODY3NQJfMQQXbmV3UG9zaXRpb25SZW1haW5NYXJnaW4IBQ0kdDAzNjI4NjM4Njc1Al8yBBduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDM2Mjg2Mzg2NzUCXzMEFG5ld1Bvc2l0aW9uTGF0ZXN0Q1BGCAUNJHQwMzYyODYzODY3NQJfNAQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwMzYyODYzODY3NQJfNQQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDM2Mjg2Mzg2NzUCXzYEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDAzNjI4NjM4Njc1Al83BBdjdW11bGF0aXZlTm90aW9uYWxBZnRlcggFDSR0MDM2Mjg2Mzg2NzUCXzgEGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIIBQ0kdDAzNjI4NjM4Njc1Al85BA50b3RhbExvbmdBZnRlcggFDSR0MDM2Mjg2Mzg2NzUDXzEwBA90b3RhbFNob3J0QWZ0ZXIIBQ0kdDAzNjI4NjM4Njc1A18xMQQMZmVlVG9TdGFrZXJzCQBpAgUJZmVlQW1vdW50AAIEDmZlZVRvSW5zdXJhbmNlCQBlAgUJZmVlQW1vdW50BQxmZWVUb1N0YWtlcnMEBXN0YWtlCQD8BwQJARFxdW90ZUFzc2V0U3Rha2luZwACDmxvY2tOZXV0cmlub1NQCQDMCAIJAKUIAQkBDnN0YWtpbmdBZGRyZXNzAAkAzAgCBQhBTExfRkVFUwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAFB19hbW91bnQFA25pbAMJAAACBQVzdGFrZQUFc3Rha2UEEGRlcG9zaXRJbnN1cmFuY2UJAPwHBAkBEGluc3VyYW5jZUFkZHJlc3MAAgdkZXBvc2l0BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAUOZmVlVG9JbnN1cmFuY2UFA25pbAMJAAACBRBkZXBvc2l0SW5zdXJhbmNlBRBkZXBvc2l0SW5zdXJhbmNlBAlub3RpZnlGZWUJAPwHBAkBDG1pbmVyQWRkcmVzcwACCm5vdGlmeUZlZXMJAMwIAgkApQgBCAUBaQZjYWxsZXIJAMwIAgUJZmVlQW1vdW50BQNuaWwFA25pbAMJAAACBQlub3RpZnlGZWUFCW5vdGlmeUZlZQQObm90aWZ5Tm90aW9uYWwJAPwHBAkBDG1pbmVyQWRkcmVzcwACDm5vdGlmeU5vdGlvbmFsCQDMCAIJAKUIAQgFAWkGY2FsbGVyCQDMCAIFF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBQNuaWwFA25pbAMJAAACBQ5ub3RpZnlOb3Rpb25hbAUObm90aWZ5Tm90aW9uYWwJAM4IAgkAzggCCQDOCAIJAQ51cGRhdGVQb3NpdGlvbgUJAKUIAQgFAWkGY2FsbGVyBQ9uZXdQb3NpdGlvblNpemUFF25ld1Bvc2l0aW9uUmVtYWluTWFyZ2luBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAUUbmV3UG9zaXRpb25MYXRlc3RDUEYJAQl1cGRhdGVBbW0HBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIFF2N1bXVsYXRpdmVOb3Rpb25hbEFmdGVyBRlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyBQ50b3RhbExvbmdBZnRlcgUPdG90YWxTaG9ydEFmdGVyCQELdHJhbnNmZXJGZWUBBQxmZWVUb1N0YWtlcnMJAQ11cGRhdGVCYWxhbmNlAQkAZAIJAQhjYmFsYW5jZQAFB19hbW91bnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEJYWRkTWFyZ2luAAQKX3Jhd0Ftb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQDAwMDCQECIT0CCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQJAQpxdW90ZUFzc2V0AAYJAQEhAQkBE3JlcXVpcmVPcGVuUG9zaXRpb24BCQClCAEIBQFpBmNhbGxlcgYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQZwYXVzZWQACQACAQIcSW52YWxpZCBhZGRNYXJnaW4gcGFyYW1ldGVycwQJZmVlQW1vdW50CQEEbXVsZAIFCl9yYXdBbW91bnQJAQNmZWUABAdfYW1vdW50CQBlAgUKX3Jhd0Ftb3VudAUJZmVlQW1vdW50BA0kdDA0MDIzMTQwMzgzCQELZ2V0UG9zaXRpb24BCQClCAEIBQFpBmNhbGxlcgQPb2xkUG9zaXRpb25TaXplCAUNJHQwNDAyMzE0MDM4MwJfMQQRb2xkUG9zaXRpb25NYXJnaW4IBQ0kdDA0MDIzMTQwMzgzAl8yBBdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDQwMjMxNDAzODMCXzMEFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwNDAyMzE0MDM4MwJfNAQMZmVlVG9TdGFrZXJzCQBpAgUJZmVlQW1vdW50AAIEDmZlZVRvSW5zdXJhbmNlCQBlAgUJZmVlQW1vdW50BQxmZWVUb1N0YWtlcnMEBXN0YWtlCQD8BwQJARFxdW90ZUFzc2V0U3Rha2luZwACDmxvY2tOZXV0cmlub1NQCQDMCAIJAKUIAQkBDnN0YWtpbmdBZGRyZXNzAAkAzAgCBQhBTExfRkVFUwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAFB19hbW91bnQFA25pbAMJAAACBQVzdGFrZQUFc3Rha2UEEGRlcG9zaXRJbnN1cmFuY2UJAPwHBAkBEGluc3VyYW5jZUFkZHJlc3MAAgdkZXBvc2l0BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAUOZmVlVG9JbnN1cmFuY2UFA25pbAMJAAACBRBkZXBvc2l0SW5zdXJhbmNlBRBkZXBvc2l0SW5zdXJhbmNlBAlub3RpZnlGZWUJAPwHBAkBDG1pbmVyQWRkcmVzcwACCm5vdGlmeUZlZXMJAMwIAgkApQgBCAUBaQZjYWxsZXIJAMwIAgUJZmVlQW1vdW50BQNuaWwFA25pbAMJAAACBQlub3RpZnlGZWUFCW5vdGlmeUZlZQkAzggCCQDOCAIJAQ51cGRhdGVQb3NpdGlvbgUJAKUIAQgFAWkGY2FsbGVyBQ9vbGRQb3NpdGlvblNpemUJAGQCBRFvbGRQb3NpdGlvbk1hcmdpbgUHX2Ftb3VudAUXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwFFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCQELdHJhbnNmZXJGZWUBBQxmZWVUb1N0YWtlcnMJAQ11cGRhdGVCYWxhbmNlAQkAZAIJAQhjYmFsYW5jZQAFB19hbW91bnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEMcmVtb3ZlTWFyZ2luAQdfYW1vdW50AwMDAwkAZwIAAAUHX2Ftb3VudAYJAQEhAQkBE3JlcXVpcmVPcGVuUG9zaXRpb24BCQClCAEIBQFpBmNhbGxlcgYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQZwYXVzZWQACQACAQIfSW52YWxpZCByZW1vdmVNYXJnaW4gcGFyYW1ldGVycwQNJHQwNDE0MzI0MTU4NAkBC2dldFBvc2l0aW9uAQkApQgBCAUBaQZjYWxsZXIED29sZFBvc2l0aW9uU2l6ZQgFDSR0MDQxNDMyNDE1ODQCXzEEEW9sZFBvc2l0aW9uTWFyZ2luCAUNJHQwNDE0MzI0MTU4NAJfMgQXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDA0MTQzMjQxNTg0Al8zBBRvbGRQb3NpdGlvbkxzdFVwZENQRggFDSR0MDQxNDMyNDE1ODQCXzQEC21hcmdpbkRlbHRhCQEBLQEFB19hbW91bnQEDSR0MDQxNjIxNDE4MDAJASJjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50BAUPb2xkUG9zaXRpb25TaXplBRFvbGRQb3NpdGlvbk1hcmdpbgUUb2xkUG9zaXRpb25Mc3RVcGRDUEYFC21hcmdpbkRlbHRhBAxyZW1haW5NYXJnaW4IBQ0kdDA0MTYyMTQxODAwAl8xBAdiYWREZWJ0CAUNJHQwNDE2MjE0MTgwMAJfMgMJAQIhPQIFB2JhZERlYnQAAAkAAgECHUludmFsaWQgcmVtb3ZlZCBtYXJnaW4gYW1vdW50BAttYXJnaW5SYXRpbwkBD2NhbGNNYXJnaW5SYXRpbwMFDHJlbWFpbk1hcmdpbgUHYmFkRGVidAUXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwDCQEBIQEJARZyZXF1aXJlTW9yZU1hcmdpblJhdGlvAwULbWFyZ2luUmF0aW8JAQ9pbml0TWFyZ2luUmF0aW8ABgkAAgEJAKwCAgkArAICCQCsAgICGVRvbyBtdWNoIG1hcmdpbiByZW1vdmVkOiAJAKQDAQULbWFyZ2luUmF0aW8CAyA8IAkApAMBCQEPaW5pdE1hcmdpblJhdGlvAAQHdW5zdGFrZQkA/AcECQERcXVvdGVBc3NldFN0YWtpbmcAAg51bmxvY2tOZXV0cmlubwkAzAgCBQdfYW1vdW50CQDMCAIJANgEAQkBCnF1b3RlQXNzZXQABQNuaWwFA25pbAMJAAACBQd1bnN0YWtlBQd1bnN0YWtlCQDOCAIJAM4IAgkBDnVwZGF0ZVBvc2l0aW9uBQkApQgBCAUBaQZjYWxsZXIFD29sZFBvc2l0aW9uU2l6ZQUMcmVtYWluTWFyZ2luBRdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAkBH2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BBQ9vbGRQb3NpdGlvblNpemUJAQh3aXRoZHJhdwIIBQFpBmNhbGxlcgUHX2Ftb3VudAkBDXVwZGF0ZUJhbGFuY2UBCQBlAgkBCGNiYWxhbmNlAAUHX2Ftb3VudAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ1jbG9zZVBvc2l0aW9uAAMDAwkBASEBCQETcmVxdWlyZU9wZW5Qb3NpdGlvbgEJAKUIAQgFAWkGY2FsbGVyBgkBASEBCQELaW5pdGlhbGl6ZWQABgkBBnBhdXNlZAAJAAIBAiBJbnZhbGlkIGNsb3NlUG9zaXRpb24gcGFyYW1ldGVycwQNJHQwNDI4OTY0MzI4NgkBFWludGVybmFsQ2xvc2VQb3NpdGlvbgIJAKUIAQgFAWkGY2FsbGVyBgQCeDEIBQ0kdDA0Mjg5NjQzMjg2Al8xBA9wb3NpdGlvbkJhZERlYnQIBQ0kdDA0Mjg5NjQzMjg2Al8yBAtyZWFsaXplZFBubAgFDSR0MDQyODk2NDMyODYCXzMEDW1hcmdpblRvVmF1bHQIBQ0kdDA0Mjg5NjQzMjg2Al80BBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNDI4OTY0MzI4NgJfNQQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNDI4OTY0MzI4NgJfNgQWdG90YWxQb3NpdGlvblNpemVBZnRlcggFDSR0MDQyODk2NDMyODYCXzcEF2N1bXVsYXRpdmVOb3Rpb25hbEFmdGVyCAUNJHQwNDI4OTY0MzI4NgJfOAQZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcggFDSR0MDQyODk2NDMyODYCXzkEAngyCAUNJHQwNDI4OTY0MzI4NgNfMTAEDnRvdGFsTG9uZ0FmdGVyCAUNJHQwNDI4OTY0MzI4NgNfMTEED3RvdGFsU2hvcnRBZnRlcggFDSR0MDQyODk2NDMyODYDXzEyAwkAZgIFD3Bvc2l0aW9uQmFkRGVidAAACQACAQImVW5hYmxlIHRvIGNsb3NlIHBvc2l0aW9uIHdpdGggYmFkIGRlYnQEDndpdGhkcmF3QW1vdW50CQEDYWJzAQUNbWFyZ2luVG9WYXVsdAQKYW1tQmFsYW5jZQkAZQIJAQhjYmFsYW5jZQAFDndpdGhkcmF3QW1vdW50BA0kdDA0MzQ5NTQzNjM3AwkAZgIAAAUKYW1tQmFsYW5jZQkAlAoCAAAJAQNhYnMBBQphbW1CYWxhbmNlCQCUCgIFCmFtbUJhbGFuY2UAAAQNYW1tTmV3QmFsYW5jZQgFDSR0MDQzNDk1NDM2MzcCXzEEEGdldEZyb21JbnN1cmFuY2UIBQ0kdDA0MzQ5NTQzNjM3Al8yBAF4AwkAZgIFEGdldEZyb21JbnN1cmFuY2UAAAQRd2l0aGRyYXdJbnN1cmFuY2UJAPwHBAkBEGluc3VyYW5jZUFkZHJlc3MAAgh3aXRoZHJhdwkAzAgCBRBnZXRGcm9tSW5zdXJhbmNlBQNuaWwFA25pbAMJAAACBRF3aXRoZHJhd0luc3VyYW5jZQURd2l0aGRyYXdJbnN1cmFuY2UFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFAXgFAXgEB3Vuc3Rha2UJAPwHBAkBEXF1b3RlQXNzZXRTdGFraW5nAAIOdW5sb2NrTmV1dHJpbm8JAMwIAgkAZQIFDndpdGhkcmF3QW1vdW50BRBnZXRGcm9tSW5zdXJhbmNlCQDMCAIJANgEAQkBCnF1b3RlQXNzZXQABQNuaWwFA25pbAMJAAACBQd1bnN0YWtlBQd1bnN0YWtlBA5ub3RpZnlOb3Rpb25hbAkA/AcECQEMbWluZXJBZGRyZXNzAAIObm90aWZ5Tm90aW9uYWwJAMwIAgkApQgBCAUBaQZjYWxsZXIJAMwIAgAABQNuaWwFA25pbAMJAAACBQ5ub3RpZnlOb3Rpb25hbAUObm90aWZ5Tm90aW9uYWwJAM4IAgkAzggCCQDOCAIJAQ5kZWxldGVQb3NpdGlvbgEJAKUIAQgFAWkGY2FsbGVyCQEJdXBkYXRlQW1tBwUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBRdjdW11bGF0aXZlTm90aW9uYWxBZnRlcgUZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcgUOdG90YWxMb25nQWZ0ZXIFD3RvdGFsU2hvcnRBZnRlcgkBCHdpdGhkcmF3AggFAWkGY2FsbGVyBQ53aXRoZHJhd0Ftb3VudAkBDXVwZGF0ZUJhbGFuY2UBBQ1hbW1OZXdCYWxhbmNlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCWxpcXVpZGF0ZQEHX3RyYWRlcgQPc3BvdE1hcmdpblJhdGlvCQEWZ2V0TWFyZ2luUmF0aW9CeU9wdGlvbgIFB190cmFkZXIFD1BOTF9PUFRJT05fU1BPVAQLbWFyZ2luUmF0aW8DCQEWaXNPdmVyRmx1Y3R1YXRpb25MaW1pdAAEEW9yYWNsZU1hcmdpblJhdGlvCQEWZ2V0TWFyZ2luUmF0aW9CeU9wdGlvbgIFB190cmFkZXIFEVBOTF9PUFRJT05fT1JBQ0xFCQEEdm1heAIFD3Nwb3RNYXJnaW5SYXRpbwURb3JhY2xlTWFyZ2luUmF0aW8FD3Nwb3RNYXJnaW5SYXRpbwMDAwMJAQEhAQkBFnJlcXVpcmVNb3JlTWFyZ2luUmF0aW8DBQttYXJnaW5SYXRpbwkBFm1haW50ZW5hbmNlTWFyZ2luUmF0aW8ABwYJAQEhAQkBE3JlcXVpcmVPcGVuUG9zaXRpb24BBQdfdHJhZGVyBgkBASEBCQELaW5pdGlhbGl6ZWQABgkBBnBhdXNlZAAJAAIBAhNVbmFibGUgdG8gbGlxdWlkYXRlBA0kdDA0NTMyNzQ1NzUwCQEVaW50ZXJuYWxDbG9zZVBvc2l0aW9uAgUHX3RyYWRlcgcEAngxCAUNJHQwNDUzMjc0NTc1MAJfMQQHYmFkRGVidAgFDSR0MDQ1MzI3NDU3NTACXzIEAngyCAUNJHQwNDUzMjc0NTc1MAJfMwQCeDMIBQ0kdDA0NTMyNzQ1NzUwAl80BBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNDUzMjc0NTc1MAJfNQQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNDUzMjc0NTc1MAJfNgQWdG90YWxQb3NpdGlvblNpemVBZnRlcggFDSR0MDQ1MzI3NDU3NTACXzcEF2N1bXVsYXRpdmVOb3Rpb25hbEFmdGVyCAUNJHQwNDUzMjc0NTc1MAJfOAQZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcggFDSR0MDQ1MzI3NDU3NTACXzkEGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQIBQ0kdDA0NTMyNzQ1NzUwA18xMAQOdG90YWxMb25nQWZ0ZXIIBQ0kdDA0NTMyNzQ1NzUwA18xMQQPdG90YWxTaG9ydEFmdGVyCAUNJHQwNDUzMjc0NTc1MANfMTIEEmxpcXVpZGF0aW9uUGVuYWx0eQkBBG11bGQCBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50CQETbGlxdWlkYXRpb25GZWVSYXRpbwAED2ZlZVRvTGlxdWlkYXRvcgkAaQIFEmxpcXVpZGF0aW9uUGVuYWx0eQACBA5mZWVUb0luc3VyYW5jZQkAZQIFEmxpcXVpZGF0aW9uUGVuYWx0eQUPZmVlVG9MaXF1aWRhdG9yBAphbW1CYWxhbmNlCQBlAgkBCGNiYWxhbmNlAAUSbGlxdWlkYXRpb25QZW5hbHR5BA0kdDA0NjE0ODQ2MjgzAwkAZgIAAAUKYW1tQmFsYW5jZQkAlAoCAAAJAQNhYnMBBQphbW1CYWxhbmNlCQCUCgIFCmFtbUJhbGFuY2UAAAQNbmV3QW1tQmFsYW5jZQgFDSR0MDQ2MTQ4NDYyODMCXzEEEXRha2VGcm9tSW5zdXJhbmNlCAUNJHQwNDYxNDg0NjI4MwJfMgQBeAMJAGYCBRF0YWtlRnJvbUluc3VyYW5jZQAABBF3aXRoZHJhd0luc3VyYW5jZQkA/AcECQEQaW5zdXJhbmNlQWRkcmVzcwACCHdpdGhkcmF3CQDMCAIFEXRha2VGcm9tSW5zdXJhbmNlBQNuaWwFA25pbAMJAAACBRF3aXRoZHJhd0luc3VyYW5jZQURd2l0aGRyYXdJbnN1cmFuY2UFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFAXgFAXgEB3Vuc3Rha2UJAPwHBAkBEXF1b3RlQXNzZXRTdGFraW5nAAIOdW5sb2NrTmV1dHJpbm8JAMwIAgkAZQIFEmxpcXVpZGF0aW9uUGVuYWx0eQURdGFrZUZyb21JbnN1cmFuY2UJAMwIAgkA2AQBCQEKcXVvdGVBc3NldAAFA25pbAUDbmlsAwkAAAIFB3Vuc3Rha2UFB3Vuc3Rha2UEEGRlcG9zaXRJbnN1cmFuY2UJAPwHBAkBEGluc3VyYW5jZUFkZHJlc3MAAgdkZXBvc2l0BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAUOZmVlVG9JbnN1cmFuY2UFA25pbAMJAAACBRBkZXBvc2l0SW5zdXJhbmNlBRBkZXBvc2l0SW5zdXJhbmNlBA5ub3RpZnlOb3Rpb25hbAkA/AcECQEMbWluZXJBZGRyZXNzAAIObm90aWZ5Tm90aW9uYWwJAMwIAgUHX3RyYWRlcgkAzAgCAAAFA25pbAUDbmlsAwkAAAIFDm5vdGlmeU5vdGlvbmFsBQ5ub3RpZnlOb3Rpb25hbAkAzggCCQDOCAIJAM4IAgkBDmRlbGV0ZVBvc2l0aW9uAQUHX3RyYWRlcgkBCXVwZGF0ZUFtbQcFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUWdG90YWxQb3NpdGlvblNpemVBZnRlcgUXY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIFGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIFDnRvdGFsTG9uZ0FmdGVyBQ90b3RhbFNob3J0QWZ0ZXIJAQh3aXRoZHJhdwIIBQFpBmNhbGxlcgUPZmVlVG9MaXF1aWRhdG9yCQENdXBkYXRlQmFsYW5jZQEFDW5ld0FtbUJhbGFuY2UJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEKcGF5RnVuZGluZwAEFWZ1bmRpbmdCbG9ja1RpbWVzdGFtcAkBGW5leHRGdW5kaW5nQmxvY2tUaW1lc3RhbXAAAwMDCQBmAgUVZnVuZGluZ0Jsb2NrVGltZXN0YW1wCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQZwYXVzZWQACQACAQkArAICCQCsAgIJAKwCAgIhSW52YWxpZCBmdW5kaW5nIGJsb2NrIHRpbWVzdGFtcDogCQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wAgMgPCAJAKQDAQUVZnVuZGluZ0Jsb2NrVGltZXN0YW1wBA91bmRlcmx5aW5nUHJpY2UJARJnZXRPcmFjbGVUd2FwUHJpY2UABA1zcG90VHdhcFByaWNlCQEQZ2V0VHdhcFNwb3RQcmljZQAEB3ByZW1pdW0JAGUCBQ1zcG90VHdhcFByaWNlBQ91bmRlcmx5aW5nUHJpY2UEDSR0MDQ3Nzc3NDkxMTIDAwkAAAIJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAAABgkAAAIJARV0b3RhbExvbmdQb3NpdGlvblNpemUAAAAJAJQKAgAAAAADCQBmAgAABQdwcmVtaXVtBBRzaG9ydFByZW1pdW1GcmFjdGlvbgkBBGRpdmQCCQEEbXVsZAIFB3ByZW1pdW0JARRmdW5kaW5nUGVyaW9kRGVjaW1hbAAFB09ORV9EQVkEE2xvbmdQcmVtaXVtRnJhY3Rpb24JAQRkaXZkAgkBBG11bGQCBRRzaG9ydFByZW1pdW1GcmFjdGlvbgkBFnRvdGFsU2hvcnRQb3NpdGlvblNpemUACQEVdG90YWxMb25nUG9zaXRpb25TaXplAAkAlAoCBRRzaG9ydFByZW1pdW1GcmFjdGlvbgUTbG9uZ1ByZW1pdW1GcmFjdGlvbgQTbG9uZ1ByZW1pdW1GcmFjdGlvbgkBBGRpdmQCCQEEbXVsZAIFB3ByZW1pdW0JARRmdW5kaW5nUGVyaW9kRGVjaW1hbAAFB09ORV9EQVkEFHNob3J0UHJlbWl1bUZyYWN0aW9uCQEEZGl2ZAIJAQRtdWxkAgUTbG9uZ1ByZW1pdW1GcmFjdGlvbgkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQAJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAkAlAoCBRRzaG9ydFByZW1pdW1GcmFjdGlvbgUTbG9uZ1ByZW1pdW1GcmFjdGlvbgQUc2hvcnRQcmVtaXVtRnJhY3Rpb24IBQ0kdDA0Nzc3NzQ5MTEyAl8xBBNsb25nUHJlbWl1bUZyYWN0aW9uCAUNJHQwNDc3Nzc0OTExMgJfMgkBDXVwZGF0ZUZ1bmRpbmcFCQBkAgUVZnVuZGluZ0Jsb2NrVGltZXN0YW1wCQEUZnVuZGluZ1BlcmlvZFNlY29uZHMACQBkAgkBI2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAUTbG9uZ1ByZW1pdW1GcmFjdGlvbgkAZAIJASRsYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24ABRRzaG9ydFByZW1pdW1GcmFjdGlvbgkBBGRpdmQCBRNsb25nUHJlbWl1bUZyYWN0aW9uBQ91bmRlcmx5aW5nUHJpY2UJAQRkaXZkAgUUc2hvcnRQcmVtaXVtRnJhY3Rpb24FD3VuZGVybHlpbmdQcmljZQFpAQV2X2dldAEHX3RyYWRlcgQNJHQwNDk0ODc0OTU0NwkBFWludGVybmFsQ2xvc2VQb3NpdGlvbgIFB190cmFkZXIHBAJ4MQgFDSR0MDQ5NDg3NDk1NDcCXzEEAngyCAUNJHQwNDk0ODc0OTU0NwJfMgQCeDMIBQ0kdDA0OTQ4NzQ5NTQ3Al8zBAJ4NAgFDSR0MDQ5NDg3NDk1NDcCXzQJAAIBCQCsAgIJAKwCAgkArAICCQEBcwEFAngyCQEBcwEFAngzCQEBcwEFAng0CQEBcwEJAQ5nZXRNYXJnaW5SYXRpbwEFB190cmFkZXIBaQEndmlld19jYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50AQdfdHJhZGVyBA0kdDA0OTY5NDQ5ODA1CQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyBAxwb3NpdGlvblNpemUIBQ0kdDA0OTY5NDQ5ODA1Al8xBA5wb3NpdGlvbk1hcmdpbggFDSR0MDQ5Njk0NDk4MDUCXzIEA3BvbggFDSR0MDQ5Njk0NDk4MDUCXzMEEXBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwNDk2OTQ0OTgwNQJfNAQNJHQwNDk4MTA0OTkxMQkBI2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sAgUHX3RyYWRlcgUPUE5MX09QVElPTl9TUE9UBBBwb3NpdGlvbk5vdGlvbmFsCAUNJHQwNDk4MTA0OTkxMQJfMQQNdW5yZWFsaXplZFBubAgFDSR0MDQ5ODEwNDk5MTECXzIEDSR0MDQ5OTE2NTAwOTgJASJjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50BAUMcG9zaXRpb25TaXplBQ5wb3NpdGlvbk1hcmdpbgURcG9zaXRpb25Mc3RVcGRDUEYFDXVucmVhbGl6ZWRQbmwEDHJlbWFpbk1hcmdpbggFDSR0MDQ5OTE2NTAwOTgCXzEEB2JhZERlYnQIBQ0kdDA0OTkxNjUwMDk4Al8yBA5mdW5kaW5nUGF5bWVudAgFDSR0MDQ5OTE2NTAwOTgCXzMJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAQFzAQUMcmVtYWluTWFyZ2luCQEBcwEFDmZ1bmRpbmdQYXltZW50CQEBcwEJAQ5nZXRNYXJnaW5SYXRpbwEFB190cmFkZXIJAQFzAQUNdW5yZWFsaXplZFBubAkBAXMBBQdiYWREZWJ0AWkBDmZvcmNlTW92ZUFzc2V0AgdfdHJhZGVyB19hbW91bnQDAwkBAiE9AgkApwgBCQEOYWRtaW5QdWJsaWNLZXkACAUBaQZjYWxsZXIGCQBmAgAABQdfYW1vdW50CQACAQIhSW52YWxpZCBmb3JjZU1vdmVBc3NldCBwYXJhbWV0ZXJzBAd1bnN0YWtlCQD8BwQJARFxdW90ZUFzc2V0U3Rha2luZwACDnVubG9ja05ldXRyaW5vCQDMCAIFB19hbW91bnQJAMwIAgkA2AQBCQEKcXVvdGVBc3NldAAFA25pbAUDbmlsAwkAAAIFB3Vuc3Rha2UFB3Vuc3Rha2UJAM4IAgkBCHdpdGhkcmF3AgkBEUBleHRyTmF0aXZlKDEwNjIpAQUHX3RyYWRlcgUHX2Ftb3VudAkBDXVwZGF0ZUJhbGFuY2UBCQBlAgkBCGNiYWxhbmNlAAUHX2Ftb3VudAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECdHgBBnZlcmlmeQAJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAJAQ5hZG1pblB1YmxpY0tleQD2Kwit", "height": 2198697, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 6jA3yWbKPoHCx6LkM23kJrgaTaJtHUB2dD1erLLMTd3U Next: none Diff:
OldNewDifferences
670670
671671
672672 @Callable(ek)
673+func setMaxPriceImpact (dG) = if (if ((0 >= dG))
674+ then true
675+ else !(bv()))
676+ then throw("Invalid _maxPriceImpact parameters")
677+ else dz(aQ(), ba(), bb(), aX(), aP(), bc(), dG)
678+
679+
680+
681+@Callable(ek)
682+func setInitMarginRatio (dA) = if (if ((0 >= dA))
683+ then true
684+ else !(bv()))
685+ then throw("Invalid setInitMarginRatio parameters")
686+ else dz(dA, ba(), bb(), aX(), aP(), bc(), bd())
687+
688+
689+
690+@Callable(ek)
673691 func decreasePosition (eh,et,eu) = if (if (if (if (if ((0 >= eh))
674692 then true
675693 else !(bv()))
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "k_ora_key"
55
66 let b = "k_ora_block_key"
77
88 let c = "k_ora"
99
1010 let d = "k_balance"
1111
1212 let e = "k_positionSize"
1313
1414 let f = "k_positionMargin"
1515
1616 let g = "k_positionOpenNotional"
1717
1818 let h = "k_positionFraction"
1919
2020 let i = "k_initialized"
2121
2222 let j = "k_paused"
2323
2424 let k = "k_fee"
2525
2626 let l = "k_fundingPeriod"
2727
2828 let m = "k_initMarginRatio"
2929
3030 let n = "k_mmr"
3131
3232 let o = "k_liquidationFeeRatio"
3333
3434 let p = "k_spreadLimit"
3535
3636 let q = "k_maxPriceImpact"
3737
3838 let r = "k_lastDataStr"
3939
4040 let s = "k_lastMinuteId"
4141
4242 let t = "k_twapDataLastCumulativePrice"
4343
4444 let u = "k_twapDataLastPrice"
4545
4646 let v = "k_twapDataPreviousMinuteId"
4747
4848 let w = "k_latestLongPremiumFraction"
4949
5050 let x = "k_latestShortPremiumFraction"
5151
5252 let y = "k_nextFundingBlockMinTimestamp"
5353
5454 let z = "k_longFundingRate"
5555
5656 let A = "k_shortFundingRate"
5757
5858 let B = "k_qtAstR"
5959
6060 let C = "k_bsAstR"
6161
6262 let D = "k_totalPositionSize"
6363
6464 let E = "k_totalLongPositionSize"
6565
6666 let F = "k_totalShortPositionSize"
6767
6868 let G = "k_cumulativeNotional"
6969
7070 let H = "k_openInterestNotional"
7171
7272 let I = "k_coordinatorAddress"
7373
7474 let J = "k_insurance_address"
7575
7676 let K = "k_admin_address"
7777
7878 let L = "k_admin_public_key"
7979
8080 let M = "k_quote_asset"
8181
8282 let N = "k_quote_staking"
8383
8484 let O = "k_staking_address"
8585
8686 let P = "k_miner_address"
8787
8888 func Q () = valueOrErrorMessage(addressFromString(getStringValue(this, I)), "Coordinator not set")
8989
9090
9191 func R () = addressFromString(getStringValue(Q(), K))
9292
9393
9494 func S () = fromBase58String(getStringValue(Q(), L))
9595
9696
9797 func T () = fromBase58String(getStringValue(Q(), M))
9898
9999
100100 func U () = valueOrErrorMessage(addressFromString(getStringValue(Q(), N)), "Quote asset staking not set")
101101
102102
103103 func V () = valueOrErrorMessage(addressFromString(getStringValue(Q(), O)), "Insurance not set")
104104
105105
106106 func W () = valueOrErrorMessage(addressFromString(getStringValue(Q(), J)), "Insurance not set")
107107
108108
109109 func X () = valueOrErrorMessage(addressFromString(getStringValue(Q(), P)), "Insurance not set")
110110
111111
112112 let Y = 1
113113
114114 let Z = 2
115115
116116 let aa = 15
117117
118118 let ab = 15
119119
120120 let ac = 1000
121121
122122 let ad = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
123123
124124 let ae = (86400 * ad)
125125
126126 let af = 100
127127
128128 let ag = 1
129129
130130 let ah = 2
131131
132132 func ai (aj) = (toString(aj) + ",")
133133
134134
135135 func ak (aj,al) = fraction(aj, ad, al, HALFEVEN)
136136
137137
138138 func am (aj,al) = fraction(aj, al, ad, HALFEVEN)
139139
140140
141141 func an (aj) = if ((aj > 0))
142142 then aj
143143 else -(aj)
144144
145145
146146 func ao (aj,al) = if ((aj >= al))
147147 then aj
148148 else al
149149
150150
151151 func ap (aq,ar) = ((aq + "_") + ar)
152152
153153
154154 func as (at) = {
155155 func au (av,aw) = ((av + aw) + ",")
156156
157157 let ax = {
158158 let ay = at
159159 let az = size(ay)
160160 let aA = ""
161161 func aB (aC,aD) = if ((aD >= az))
162162 then aC
163163 else au(aC, ay[aD])
164164
165165 func aE (aC,aD) = if ((aD >= az))
166166 then aC
167167 else throw("List size exceeds 20")
168168
169169 aE(aB(aB(aB(aB(aB(aB(aB(aB(aB(aB(aB(aB(aB(aB(aB(aB(aB(aB(aB(aB(aA, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
170170 }
171171 let aF = dropRight(ax, 1)
172172 let aG = if ((take(aF, 1) == ","))
173173 then drop(aF, 1)
174174 else aF
175175 aG
176176 }
177177
178178
179179 func aH (aI) = split(aI, ",")
180180
181181
182182 func aJ (at,aK,aL) = if ((size(at) > aK))
183183 then (removeByIndex(at, 0) :+ aL)
184184 else (at :+ aL)
185185
186186
187187 func aM (aN) = valueOrErrorMessage(getInteger(this, aN), ("no value for " + aN))
188188
189189
190190 func aO () = aM(d)
191191
192192
193193 func aP () = aM(k)
194194
195195
196196 func aQ () = aM(m)
197197
198198
199199 func aR () = aM(B)
200200
201201
202202 func aS () = aM(C)
203203
204204
205205 func aT () = aM(D)
206206
207207
208208 func aU () = aM(G)
209209
210210
211211 func aV () = aM(H)
212212
213213
214214 func aW () = aM(y)
215215
216216
217217 func aX () = aM(l)
218218
219219
220220 func aY () = (aX() * ad)
221221
222222
223223 func aZ () = (aX() * ac)
224224
225225
226226 func ba () = aM(n)
227227
228228
229229 func bb () = aM(o)
230230
231231
232232 func bc () = aM(p)
233233
234234
235235 func bd () = aM(q)
236236
237237
238238 func be () = aM(w)
239239
240240
241241 func bf () = aM(x)
242242
243243
244244 func bg () = aM(F)
245245
246246
247247 func bh () = aM(E)
248248
249249
250250 func bi (bj,bk,bl) = {
251251 let bm = (bj - bk)
252252 if (if (bl)
253253 then (0 > bm)
254254 else false)
255255 then throw("Invalid margin")
256256 else if (if (!(bl))
257257 then (bm >= 0)
258258 else false)
259259 then throw("Invalid margin")
260260 else true
261261 }
262262
263263
264264 func bn (bo) = if ((bo == 0))
265265 then throw("Should not be called with _positionSize == 0")
266266 else if ((bo > 0))
267267 then be()
268268 else bf()
269269
270270
271271 func bp (bq) = {
272272 let br = getInteger(this, ap(e, bq))
273273 let bs = br
274274 if ($isInstanceOf(bs, "Int"))
275275 then {
276276 let bt = bs
277277 $Tuple4(bt, getIntegerValue(this, ap(f, bq)), getIntegerValue(this, ap(g, bq)), getIntegerValue(this, ap(h, bq)))
278278 }
279279 else $Tuple4(0, 0, 0, 0)
280280 }
281281
282282
283283 func bu (bq) = if ((bp(bq)._1 == 0))
284284 then throw("No open position")
285285 else true
286286
287287
288288 func bv () = valueOrElse(getBoolean(this, i), false)
289289
290290
291291 func bw () = valueOrElse(getBoolean(this, j), false)
292292
293293
294294 func bx (by,bz,bA) = if (by)
295295 then {
296296 let bB = (aS() - bA)
297297 if ((0 >= bB))
298298 then throw("Tx lead to base asset reserve <= 0, revert")
299299 else $Tuple4((aR() + bz), bB, (aT() + bA), (aU() + bz))
300300 }
301301 else {
302302 let bC = (aR() - bz)
303303 if ((0 >= bC))
304304 then throw("Tx lead to base quote reserve <= 0, revert")
305305 else $Tuple4(bC, (aS() + bA), (aT() - bA), (aU() - bz))
306306 }
307307
308308
309309 func bD (by,bz) = {
310310 let bE = aR()
311311 let bF = aS()
312312 let aN = am(bE, bF)
313313 let bG = if (by)
314314 then (bE + bz)
315315 else (bE - bz)
316316 let bH = ak(aN, bG)
317317 let bI = an((bH - bF))
318318 let bJ = if (by)
319319 then bI
320320 else -(bI)
321321 let bK = bx(by, bz, bI)
322322 let bL = bK._1
323323 let bM = bK._2
324324 let bN = bK._3
325325 let bO = bK._4
326326 let bP = ak(bE, bF)
327327 let bQ = ak(bz, bI)
328328 let bR = an((bP - bQ))
329329 let bS = (ad - ak(bP, (bP + bR)))
330330 let bT = bd()
331331 if ((bS > bT))
332332 then throw(((((((((((((("Price impact " + toString(bS)) + " > max price impact ") + toString(bT)) + " before quote asset: ") + toString(bE)) + " before base asset: ") + toString(bF)) + " quote asset amount to exchange: ") + toString(bz)) + " price before: ") + toString(bP)) + " marketPrice: ") + toString(bQ)))
333333 else $Tuple5(bJ, bL, bM, bN, bO)
334334 }
335335
336336
337337 func bU (bV,bW,bX,bY) = {
338338 let bZ = if ((bV != 0))
339339 then {
340340 let ca = bn(bV)
341341 am((ca - bX), bV)
342342 }
343343 else 0
344344 let cb = ((bY - bZ) + bW)
345345 let cc = if ((0 > cb))
346346 then $Tuple2(0, an(cb))
347347 else $Tuple2(an(cb), 0)
348348 let cd = cc._1
349349 let ce = cc._2
350350 $Tuple3(cd, ce, bZ)
351351 }
352352
353353
354354 func cf (by,bA,cg) = {
355355 let ch = aR()
356356 let ci = aS()
357357 let bP = ak(ch, ci)
358358 if ((bA == 0))
359359 then throw("Invalid base asset amount")
360360 else {
361361 let aN = am(ch, ci)
362362 let cj = if (by)
363363 then (ci + bA)
364364 else (ci - bA)
365365 let ck = ak(aN, cj)
366366 let cl = an((ck - ch))
367367 let bT = bd()
368368 let cm = bx(!(by), cl, bA)
369369 let bL = cm._1
370370 let bM = cm._2
371371 let bN = cm._3
372372 let bO = cm._4
373373 let bQ = ak(cl, bA)
374374 let bR = an((bP - bQ))
375375 let bS = (ad - ak(bP, (bP + bR)))
376376 if (if ((bS > bT))
377377 then cg
378378 else false)
379379 then throw(((((((((((((("Price impact " + toString(bS)) + " > max price impact ") + toString(bT)) + " before quote asset: ") + toString(ch)) + " before base asset: ") + toString(ci)) + " base asset amount to exchange: ") + toString(bA)) + " price before: ") + toString(bP)) + " market price: ") + toString(bQ)))
380380 else $Tuple7(cl, bL, bM, bN, bO, (bh() - (if (by)
381381 then an(bA)
382382 else 0)), (bg() - (if (!(by))
383383 then an(bA)
384384 else 0)))
385385 }
386386 }
387387
388388
389389 func cn () = {
390390 let co = valueOrErrorMessage(addressFromString(getStringValue(this, c)), "")
391391 let cp = getStringValue(this, a)
392392 let cq = getStringValue(this, b)
393393 let cr = valueOrErrorMessage(getInteger(co, cp), ((("Can not get oracle price. Oracle: " + toString(co)) + " key: ") + cp))
394394 cr
395395 }
396396
397397
398398 func cs () = {
399399 let ch = aR()
400400 let ci = aS()
401401 ak(ch, ci)
402402 }
403403
404404
405405 func ct () = {
406406 let cu = cn()
407407 let cv = cs()
408408 (ak(an((cu - cv)), cu) > bc())
409409 }
410410
411411
412412 func cw (bq,cx) = {
413413 let cy = bp(bq)
414414 let bt = cy._1
415415 let cz = cy._2
416416 let cA = cy._3
417417 let cB = cy._4
418418 let cC = an(bt)
419419 if ((cC == 0))
420420 then throw("Invalid position size")
421421 else {
422422 let cD = (0 > bt)
423423 let cE = if ((cx == ag))
424424 then {
425425 let cF = cf(!(cD), cC, false)
426426 let cG = cF._1
427427 let cH = cF._2
428428 let cI = cF._3
429429 let cJ = cF._4
430430 cG
431431 }
432432 else am(cC, cn())
433433 let cK = if (cD)
434434 then (cA - cE)
435435 else (cE - cA)
436436 $Tuple2(cE, cK)
437437 }
438438 }
439439
440440
441441 func cL (cM,cN,cO) = ak((cM - cN), cO)
442442
443443
444444 func cP (bq,cx) = {
445445 let cQ = bp(bq)
446446 let bt = cQ._1
447447 let cz = cQ._2
448448 let cR = cQ._3
449449 let cB = cQ._4
450450 let cS = cw(bq, cx)
451451 let cE = cS._1
452452 let cK = cS._2
453453 let cT = bU(bt, cz, cB, cK)
454454 let cd = cT._1
455455 let ce = cT._2
456456 cL(cd, ce, cE)
457457 }
458458
459459
460460 func cU (bq) = cP(bq, ag)
461461
462462
463463 func cV (bq,cg) = {
464464 let cW = bp(bq)
465465 let bt = cW._1
466466 let cz = cW._2
467467 let cA = cW._3
468468 let cB = cW._4
469469 let cX = cw(bq, ag)
470470 let cH = cX._1
471471 let cK = cX._2
472472 let cY = bU(bt, cz, cB, cK)
473473 let cd = cY._1
474474 let ce = cY._2
475475 let cZ = -(bt)
476476 let da = cK
477477 let db = -(cd)
478478 let dc = cf((bt > 0), an(bt), cg)
479479 let dd = dc._1
480480 let bG = dc._2
481481 let bH = dc._3
482482 let de = dc._4
483483 let df = dc._5
484484 let dg = dc._6
485485 let dh = dc._7
486486 let di = (aV() - cA)
487487 $Tuple12(cZ, ce, da, db, bG, bH, de, df, di, dd, dg, dh)
488488 }
489489
490490
491491 func dj () = {
492492 let dk = ((lastBlock.timestamp / 1000) / 60)
493493 let dl = (dk - aa)
494494 let dm = valueOrElse(getString(this, r), "")
495495 let dn = split(dm, ",")
496496 func do (av,dp) = if ((dl >= parseIntValue(dp)))
497497 then (av :+ parseIntValue(dp))
498498 else av
499499
500500 let dq = {
501501 let ay = dn
502502 let az = size(ay)
503503 let aA = nil
504504 func aB (aC,aD) = if ((aD >= az))
505505 then aC
506506 else do(aC, ay[aD])
507507
508508 func aE (aC,aD) = if ((aD >= az))
509509 then aC
510510 else throw("List size exceeds 20")
511511
512512 aE(aB(aB(aB(aB(aB(aB(aB(aB(aB(aB(aB(aB(aB(aB(aB(aB(aB(aB(aB(aB(aA, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
513513 }
514514 let dr = if ((size(dq) > 0))
515515 then max(dq)
516516 else parseIntValue(dn[0])
517517 let ds = valueOrElse(getInteger(this, s), 0)
518518 let dt = valueOrElse(getInteger(this, ((t + "_") + toString(ds))), 0)
519519 let du = valueOrElse(getInteger(this, ((u + "_") + toString(ds))), 0)
520520 let dv = (dt + ((dk - ds) * du))
521521 let dw = valueOrElse(getInteger(this, ((t + "_") + toString(dr))), 0)
522522 let dx = valueOrElse(getInteger(this, ((u + "_") + toString(dr))), 0)
523523 let dy = (dw + ((dl - dr) * dx))
524524 ((dv - dy) / aa)
525525 }
526526
527527
528528 func dz (dA,dB,dC,dD,dE,dF,dG) = [IntegerEntry(m, dA), IntegerEntry(n, dB), IntegerEntry(o, dC), IntegerEntry(l, dD), IntegerEntry(k, dE), IntegerEntry(p, dF), IntegerEntry(q, dG)]
529529
530530
531531 func dH (dI,dJ,dK,dL,dM) = [IntegerEntry(y, dI), IntegerEntry(w, dJ), IntegerEntry(x, dK), IntegerEntry(z, dL), IntegerEntry(A, dM)]
532532
533533
534534 func dN (ar,dO,dP,dQ,ca) = [IntegerEntry(ap(e, ar), dO), IntegerEntry(ap(f, ar), dP), IntegerEntry(ap(g, ar), dQ), IntegerEntry(ap(h, ar), ca)]
535535
536536
537537 func dR (dS) = {
538538 let dk = ((lastBlock.timestamp / 1000) / 60)
539539 let dT = valueOrElse(getInteger(this, s), 0)
540540 if ((dT > dk))
541541 then throw("TWAP out-of-order")
542542 else {
543543 let ds = if ((dT == 0))
544544 then dk
545545 else dT
546546 if ((dk > dT))
547547 then {
548548 let dU = valueOrElse(getInteger(this, ((t + "_") + toString(dT))), 0)
549549 let dV = valueOrElse(getInteger(this, ((u + "_") + toString(dT))), dS)
550550 let dW = (dU + ((dk - ds) * dV))
551551 let dn = aJ(aH(valueOrElse(getString(this, r), "")), aa, toString(dk))
552552 [IntegerEntry(ap(t, toString(dk)), dW), IntegerEntry(ap(u, toString(dk)), dS), IntegerEntry(ap(v, toString(dk)), dT), IntegerEntry(s, dk), StringEntry(r, as(dn))]
553553 }
554554 else {
555555 let dX = valueOrElse(getInteger(this, ap(v, toString(dk))), 0)
556556 let dU = valueOrElse(getInteger(this, ap(t, toString(dX))), 0)
557557 let dV = valueOrElse(getInteger(this, ap(u, toString(dX))), dS)
558558 let dW = (dU + ((dk - dX) * dV))
559559 [IntegerEntry(ap(t, toString(dk)), dW), IntegerEntry(ap(u, toString(dk)), dS)]
560560 }
561561 }
562562 }
563563
564564
565565 func dY (bE,bF) = [IntegerEntry(B, bE), IntegerEntry(C, bF)]
566566
567567
568568 func dZ (bE,bF,ea,eb,ec,ed,ee) = if (((ed - ee) != ea))
569569 then throw(((((("Invalid AMM state data: " + toString(ed)) + " + ") + toString(ee)) + " != ") + toString(ea)))
570570 else ((dY(bE, bF) ++ [IntegerEntry(D, ea), IntegerEntry(G, eb), IntegerEntry(H, ec), IntegerEntry(E, ed), IntegerEntry(F, ee)]) ++ dR(ak(bE, bF)))
571571
572572
573573 func ef (ar) = [DeleteEntry(ap(e, ar)), DeleteEntry(ap(f, ar)), DeleteEntry(ap(g, ar)), DeleteEntry(ap(h, ar))]
574574
575575
576576 func eg (ar,eh) = {
577577 let ei = assetBalance(this, T())
578578 if ((eh > ei))
579579 then throw(((("Unable to withdraw " + toString(eh)) + " from contract balance ") + toString(ei)))
580580 else [ScriptTransfer(ar, eh, T())]
581581 }
582582
583583
584584 func ej (ek) = if ((0 > ek))
585585 then throw("Balance")
586586 else [IntegerEntry(d, ek)]
587587
588588
589589 func el (ek) = [ScriptTransfer(V(), ek, T())]
590590
591591
592592 @Callable(ek)
593593 func pause () = if ((ek.caller != R()))
594594 then throw("Invalid togglePause params")
595595 else [BooleanEntry(j, true)]
596596
597597
598598
599599 @Callable(ek)
600600 func unpause () = if ((ek.caller != R()))
601601 then throw("Invalid togglePause params")
602602 else [BooleanEntry(j, false)]
603603
604604
605605
606606 @Callable(ek)
607607 func addLiquidity (bz) = if (if ((ek.caller != R()))
608608 then true
609609 else (0 >= bz))
610610 then throw("Invalid addLiquidity params")
611611 else {
612612 let bE = aR()
613613 let bF = aS()
614614 let dS = ak(bE, bF)
615615 let em = ak(bz, dS)
616616 let en = (bE + bz)
617617 let eo = (bF + em)
618618 dY(en, eo)
619619 }
620620
621621
622622
623623 @Callable(ek)
624624 func removeLiquidity (bz) = if (if ((ek.caller != R()))
625625 then true
626626 else (0 >= bz))
627627 then throw("Invalid removeLiquidity params")
628628 else {
629629 let bE = aR()
630630 let bF = aS()
631631 let dS = ak(bE, bF)
632632 let ep = ak(bz, dS)
633633 let en = (bE - bz)
634634 let eo = (bF - ep)
635635 dY(en, eo)
636636 }
637637
638638
639639
640640 @Callable(ek)
641641 func changeSettings (dA,dB,dC,dD,dE,dF,dG) = if ((ek.caller != R()))
642642 then throw("Invalid changeSettings params")
643643 else dz(dA, dB, dC, dD, dE, dF, dG)
644644
645645
646646
647647 @Callable(ek)
648648 func initialize (bE,bF,dD,dA,dB,dC,dE,eq,er,es,dF,dG) = if (if (if (if (if (if (if (if (if (if ((0 >= bE))
649649 then true
650650 else (0 >= bF))
651651 then true
652652 else (0 >= dD))
653653 then true
654654 else (0 >= dA))
655655 then true
656656 else (0 >= dB))
657657 then true
658658 else (0 >= dC))
659659 then true
660660 else (0 >= dE))
661661 then true
662662 else (0 >= dF))
663663 then true
664664 else (0 >= dG))
665665 then true
666666 else bv())
667667 then throw("Invalid initialize parameters")
668668 else ((((dZ(bE, bF, 0, 0, 0, 0, 0) ++ dz(dA, dB, dC, dD, dE, dF, dG)) ++ dH((lastBlock.timestamp + dD), 0, 0, 0, 0)) ++ ej(0)) ++ [BooleanEntry(i, true), StringEntry(c, eq), StringEntry(a, er), StringEntry(I, es)])
669669
670670
671671
672672 @Callable(ek)
673+func setMaxPriceImpact (dG) = if (if ((0 >= dG))
674+ then true
675+ else !(bv()))
676+ then throw("Invalid _maxPriceImpact parameters")
677+ else dz(aQ(), ba(), bb(), aX(), aP(), bc(), dG)
678+
679+
680+
681+@Callable(ek)
682+func setInitMarginRatio (dA) = if (if ((0 >= dA))
683+ then true
684+ else !(bv()))
685+ then throw("Invalid setInitMarginRatio parameters")
686+ else dz(dA, ba(), bb(), aX(), aP(), bc(), bd())
687+
688+
689+
690+@Callable(ek)
673691 func decreasePosition (eh,et,eu) = if (if (if (if (if ((0 >= eh))
674692 then true
675693 else !(bv()))
676694 then true
677695 else !(bi(ak(ad, et), aQ(), true)))
678696 then true
679697 else !(bu(toString(ek.caller))))
680698 then true
681699 else bw())
682700 then throw("Invalid decreasePosition parameters")
683701 else {
684702 let ev = bp(toString(ek.caller))
685703 let ew = ev._1
686704 let ex = ev._2
687705 let ey = ev._3
688706 let ez = ev._4
689707 let eA = if ((ew > 0))
690708 then Z
691709 else Y
692710 let eB = (eA == Y)
693711 let eC = am(eh, et)
694712 let eD = cw(toString(ek.caller), ag)
695713 let eE = eD._1
696714 let cK = eD._2
697715 let eF = if ((eE > eC))
698716 then {
699717 let eG = bD(eB, eC)
700718 let cZ = eG._1
701719 let bG = eG._2
702720 let bH = eG._3
703721 let de = eG._4
704722 let df = eG._5
705723 let eH = an(cZ)
706724 if (if ((eu != 0))
707725 then (eu > eH)
708726 else false)
709727 then throw(((("Too little base asset exchanged, got " + toString(eH)) + " expected ") + toString(eu)))
710728 else {
711729 let da = ak(am(cK, eH), an(ew))
712730 let eI = bU(ew, ex, ez, da)
713731 let cd = eI._1
714732 let ce = eI._2
715733 let bZ = eI._3
716734 let dd = eC
717735 let eJ = (cK - da)
718736 let eK = if ((ew > 0))
719737 then ((eE - dd) - eJ)
720738 else ((eJ + eE) - dd)
721739 let eL = (ew + cZ)
722740 $Tuple11(eL, cd, an(eK), bn(eL), bH, bG, de, df, (aV() - eC), (bh() - (if ((eL > 0))
723741 then an(cZ)
724742 else 0)), (bg() - (if ((0 > eL))
725743 then an(cZ)
726744 else 0)))
727745 }
728746 }
729747 else throw("Close position first")
730748 let eL = eF._1
731749 let eM = eF._2
732750 let eN = eF._3
733751 let eO = eF._4
734752 let bH = eF._5
735753 let bG = eF._6
736754 let de = eF._7
737755 let df = eF._8
738756 let di = eF._9
739757 let dg = eF._10
740758 let dh = eF._11
741759 let eP = invoke(X(), "notifyNotional", [toString(ek.caller), eN], nil)
742760 if ((eP == eP))
743761 then (dN(toString(ek.caller), eL, eM, eN, eO) ++ dZ(bG, bH, de, df, di, dg, dh))
744762 else throw("Strict value is not equal to itself.")
745763 }
746764
747765
748766
749767 @Callable(ek)
750768 func increasePosition (eA,et,eu) = {
751769 let eQ = ek.payments[0].amount
752770 if (if (if (if (if (if (if ((eA != Y))
753771 then (eA != Z)
754772 else false)
755773 then true
756774 else (0 >= eQ))
757775 then true
758776 else !(bv()))
759777 then true
760778 else (ek.payments[0].assetId != T()))
761779 then true
762780 else !(bi(ak(ad, et), aQ(), true)))
763781 then true
764782 else bw())
765783 then throw("Invalid increasePosition parameters")
766784 else {
767785 let eR = am(eQ, aP())
768786 let eh = (eQ - eR)
769787 let eS = bp(toString(ek.caller))
770788 let ew = eS._1
771789 let ex = eS._2
772790 let ey = eS._3
773791 let ez = eS._4
774792 let eT = (ew == 0)
775793 let eU = if ((ew > 0))
776794 then (eA == Y)
777795 else (eA == Z)
778796 let eV = if (!(eT))
779797 then eU
780798 else false
781799 let eB = (eA == Y)
782800 let eW = if (if (eT)
783801 then true
784802 else eV)
785803 then {
786804 let eC = am(eh, et)
787805 let eX = bD(eB, eC)
788806 let bJ = eX._1
789807 let bG = eX._2
790808 let bH = eX._3
791809 let de = eX._4
792810 let df = eX._5
793811 if (if ((eu != 0))
794812 then (eu > an(bJ))
795813 else false)
796814 then throw(((("Limit error: " + toString(an(bJ))) + " < ") + toString(eu)))
797815 else {
798816 let eL = (ew + bJ)
799817 let eY = ak(eC, et)
800818 let eZ = bU(ew, ex, ez, eY)
801819 let cd = eZ._1
802820 let cH = eZ._2
803821 let cI = eZ._3
804822 $Tuple11(eL, cd, (ey + eC), bn(eL), bH, bG, de, df, (aV() + eC), (bh() + (if ((eL > 0))
805823 then an(bJ)
806824 else 0)), (bg() + (if ((0 > eL))
807825 then an(bJ)
808826 else 0)))
809827 }
810828 }
811829 else {
812830 let eC = am(eh, et)
813831 let fa = cw(toString(ek.caller), ag)
814832 let eE = fa._1
815833 let cK = fa._2
816834 if ((eE > eC))
817835 then throw("Use decreasePosition to decrease position size")
818836 else throw("Close position first")
819837 }
820838 let eL = eW._1
821839 let eM = eW._2
822840 let eN = eW._3
823841 let eO = eW._4
824842 let bH = eW._5
825843 let bG = eW._6
826844 let de = eW._7
827845 let df = eW._8
828846 let di = eW._9
829847 let dg = eW._10
830848 let dh = eW._11
831849 let fb = (eR / 2)
832850 let fc = (eR - fb)
833851 let fd = invoke(U(), "lockNeutrinoSP", [toString(V()), af], [AttachedPayment(T(), eh)])
834852 if ((fd == fd))
835853 then {
836854 let fe = invoke(W(), "deposit", nil, [AttachedPayment(T(), fc)])
837855 if ((fe == fe))
838856 then {
839857 let ff = invoke(X(), "notifyFees", [toString(ek.caller), eR], nil)
840858 if ((ff == ff))
841859 then {
842860 let eP = invoke(X(), "notifyNotional", [toString(ek.caller), eN], nil)
843861 if ((eP == eP))
844862 then (((dN(toString(ek.caller), eL, eM, eN, eO) ++ dZ(bG, bH, de, df, di, dg, dh)) ++ el(fb)) ++ ej((aO() + eh)))
845863 else throw("Strict value is not equal to itself.")
846864 }
847865 else throw("Strict value is not equal to itself.")
848866 }
849867 else throw("Strict value is not equal to itself.")
850868 }
851869 else throw("Strict value is not equal to itself.")
852870 }
853871 }
854872
855873
856874
857875 @Callable(ek)
858876 func addMargin () = {
859877 let eQ = ek.payments[0].amount
860878 if (if (if (if ((ek.payments[0].assetId != T()))
861879 then true
862880 else !(bu(toString(ek.caller))))
863881 then true
864882 else !(bv()))
865883 then true
866884 else bw())
867885 then throw("Invalid addMargin parameters")
868886 else {
869887 let eR = am(eQ, aP())
870888 let eh = (eQ - eR)
871889 let fg = bp(toString(ek.caller))
872890 let ew = fg._1
873891 let ex = fg._2
874892 let ey = fg._3
875893 let ez = fg._4
876894 let fb = (eR / 2)
877895 let fc = (eR - fb)
878896 let fd = invoke(U(), "lockNeutrinoSP", [toString(V()), af], [AttachedPayment(T(), eh)])
879897 if ((fd == fd))
880898 then {
881899 let fe = invoke(W(), "deposit", nil, [AttachedPayment(T(), fc)])
882900 if ((fe == fe))
883901 then {
884902 let ff = invoke(X(), "notifyFees", [toString(ek.caller), eR], nil)
885903 if ((ff == ff))
886904 then ((dN(toString(ek.caller), ew, (ex + eh), ey, ez) ++ el(fb)) ++ ej((aO() + eh)))
887905 else throw("Strict value is not equal to itself.")
888906 }
889907 else throw("Strict value is not equal to itself.")
890908 }
891909 else throw("Strict value is not equal to itself.")
892910 }
893911 }
894912
895913
896914
897915 @Callable(ek)
898916 func removeMargin (eh) = if (if (if (if ((0 >= eh))
899917 then true
900918 else !(bu(toString(ek.caller))))
901919 then true
902920 else !(bv()))
903921 then true
904922 else bw())
905923 then throw("Invalid removeMargin parameters")
906924 else {
907925 let fh = bp(toString(ek.caller))
908926 let ew = fh._1
909927 let ex = fh._2
910928 let ey = fh._3
911929 let ez = fh._4
912930 let fi = -(eh)
913931 let fj = bU(ew, ex, ez, fi)
914932 let cd = fj._1
915933 let ce = fj._2
916934 if ((ce != 0))
917935 then throw("Invalid removed margin amount")
918936 else {
919937 let fk = cL(cd, ce, ey)
920938 if (!(bi(fk, aQ(), true)))
921939 then throw(((("Too much margin removed: " + toString(fk)) + " < ") + toString(aQ())))
922940 else {
923941 let fl = invoke(U(), "unlockNeutrino", [eh, toBase58String(T())], nil)
924942 if ((fl == fl))
925943 then ((dN(toString(ek.caller), ew, cd, ey, bn(ew)) ++ eg(ek.caller, eh)) ++ ej((aO() - eh)))
926944 else throw("Strict value is not equal to itself.")
927945 }
928946 }
929947 }
930948
931949
932950
933951 @Callable(ek)
934952 func closePosition () = if (if (if (!(bu(toString(ek.caller))))
935953 then true
936954 else !(bv()))
937955 then true
938956 else bw())
939957 then throw("Invalid closePosition parameters")
940958 else {
941959 let fm = cV(toString(ek.caller), true)
942960 let cH = fm._1
943961 let fn = fm._2
944962 let da = fm._3
945963 let db = fm._4
946964 let bG = fm._5
947965 let bH = fm._6
948966 let de = fm._7
949967 let df = fm._8
950968 let di = fm._9
951969 let cI = fm._10
952970 let dg = fm._11
953971 let dh = fm._12
954972 if ((fn > 0))
955973 then throw("Unable to close position with bad debt")
956974 else {
957975 let fo = an(db)
958976 let fp = (aO() - fo)
959977 let fq = if ((0 > fp))
960978 then $Tuple2(0, an(fp))
961979 else $Tuple2(fp, 0)
962980 let fr = fq._1
963981 let fs = fq._2
964982 let ft = if ((fs > 0))
965983 then {
966984 let fu = invoke(W(), "withdraw", [fs], nil)
967985 if ((fu == fu))
968986 then nil
969987 else throw("Strict value is not equal to itself.")
970988 }
971989 else nil
972990 if ((ft == ft))
973991 then {
974992 let fl = invoke(U(), "unlockNeutrino", [(fo - fs), toBase58String(T())], nil)
975993 if ((fl == fl))
976994 then {
977995 let eP = invoke(X(), "notifyNotional", [toString(ek.caller), 0], nil)
978996 if ((eP == eP))
979997 then (((ef(toString(ek.caller)) ++ dZ(bG, bH, de, df, di, dg, dh)) ++ eg(ek.caller, fo)) ++ ej(fr))
980998 else throw("Strict value is not equal to itself.")
981999 }
9821000 else throw("Strict value is not equal to itself.")
9831001 }
9841002 else throw("Strict value is not equal to itself.")
9851003 }
9861004 }
9871005
9881006
9891007
9901008 @Callable(ek)
9911009 func liquidate (bq) = {
9921010 let fv = cP(bq, ag)
9931011 let fk = if (ct())
9941012 then {
9951013 let fw = cP(bq, ah)
9961014 ao(fv, fw)
9971015 }
9981016 else fv
9991017 if (if (if (if (!(bi(fk, ba(), false)))
10001018 then true
10011019 else !(bu(bq)))
10021020 then true
10031021 else !(bv()))
10041022 then true
10051023 else bw())
10061024 then throw("Unable to liquidate")
10071025 else {
10081026 let fx = cV(bq, false)
10091027 let cH = fx._1
10101028 let ce = fx._2
10111029 let cI = fx._3
10121030 let cJ = fx._4
10131031 let bG = fx._5
10141032 let bH = fx._6
10151033 let de = fx._7
10161034 let df = fx._8
10171035 let di = fx._9
10181036 let dd = fx._10
10191037 let dg = fx._11
10201038 let dh = fx._12
10211039 let fy = am(dd, bb())
10221040 let fz = (fy / 2)
10231041 let fc = (fy - fz)
10241042 let fp = (aO() - fy)
10251043 let fA = if ((0 > fp))
10261044 then $Tuple2(0, an(fp))
10271045 else $Tuple2(fp, 0)
10281046 let fB = fA._1
10291047 let fC = fA._2
10301048 let ft = if ((fC > 0))
10311049 then {
10321050 let fu = invoke(W(), "withdraw", [fC], nil)
10331051 if ((fu == fu))
10341052 then nil
10351053 else throw("Strict value is not equal to itself.")
10361054 }
10371055 else nil
10381056 if ((ft == ft))
10391057 then {
10401058 let fl = invoke(U(), "unlockNeutrino", [(fy - fC), toBase58String(T())], nil)
10411059 if ((fl == fl))
10421060 then {
10431061 let fe = invoke(W(), "deposit", nil, [AttachedPayment(T(), fc)])
10441062 if ((fe == fe))
10451063 then {
10461064 let eP = invoke(X(), "notifyNotional", [bq, 0], nil)
10471065 if ((eP == eP))
10481066 then (((ef(bq) ++ dZ(bG, bH, de, df, di, dg, dh)) ++ eg(ek.caller, fz)) ++ ej(fB))
10491067 else throw("Strict value is not equal to itself.")
10501068 }
10511069 else throw("Strict value is not equal to itself.")
10521070 }
10531071 else throw("Strict value is not equal to itself.")
10541072 }
10551073 else throw("Strict value is not equal to itself.")
10561074 }
10571075 }
10581076
10591077
10601078
10611079 @Callable(ek)
10621080 func payFunding () = {
10631081 let fD = aW()
10641082 if (if (if ((fD > lastBlock.timestamp))
10651083 then true
10661084 else !(bv()))
10671085 then true
10681086 else bw())
10691087 then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(fD)))
10701088 else {
10711089 let fE = cn()
10721090 let fF = dj()
10731091 let fG = (fF - fE)
10741092 let fH = if (if ((bg() == 0))
10751093 then true
10761094 else (bh() == 0))
10771095 then $Tuple2(0, 0)
10781096 else if ((0 > fG))
10791097 then {
10801098 let fI = ak(am(fG, aY()), ae)
10811099 let fJ = ak(am(fI, bg()), bh())
10821100 $Tuple2(fI, fJ)
10831101 }
10841102 else {
10851103 let fJ = ak(am(fG, aY()), ae)
10861104 let fI = ak(am(fJ, bh()), bg())
10871105 $Tuple2(fI, fJ)
10881106 }
10891107 let fI = fH._1
10901108 let fJ = fH._2
10911109 dH((fD + aZ()), (be() + fJ), (bf() + fI), ak(fJ, fE), ak(fI, fE))
10921110 }
10931111 }
10941112
10951113
10961114
10971115 @Callable(ek)
10981116 func v_get (bq) = {
10991117 let fK = cV(bq, false)
11001118 let cH = fK._1
11011119 let cI = fK._2
11021120 let cJ = fK._3
11031121 let fL = fK._4
11041122 throw((((ai(cI) + ai(cJ)) + ai(fL)) + ai(cU(bq))))
11051123 }
11061124
11071125
11081126
11091127 @Callable(ek)
11101128 func view_calcRemainMarginWithFundingPayment (bq) = {
11111129 let fM = bp(bq)
11121130 let bt = fM._1
11131131 let cz = fM._2
11141132 let cR = fM._3
11151133 let cB = fM._4
11161134 let fN = cw(bq, ag)
11171135 let cE = fN._1
11181136 let cK = fN._2
11191137 let fO = bU(bt, cz, cB, cK)
11201138 let cd = fO._1
11211139 let ce = fO._2
11221140 let bZ = fO._3
11231141 throw(((((ai(cd) + ai(bZ)) + ai(cU(bq))) + ai(cK)) + ai(ce)))
11241142 }
11251143
11261144
11271145
11281146 @Callable(ek)
11291147 func forceMoveAsset (bq,eh) = if (if ((addressFromPublicKey(S()) != ek.caller))
11301148 then true
11311149 else (0 > eh))
11321150 then throw("Invalid forceMoveAsset parameters")
11331151 else {
11341152 let fl = invoke(U(), "unlockNeutrino", [eh, toBase58String(T())], nil)
11351153 if ((fl == fl))
11361154 then (eg(addressFromStringValue(bq), eh) ++ ej((aO() - eh)))
11371155 else throw("Strict value is not equal to itself.")
11381156 }
11391157
11401158
11411159 @Verifier(fP)
11421160 func fQ () = sigVerify(fP.bodyBytes, fP.proofs[0], S())
11431161

github/deemru/w8io/c3f4982 
93.46 ms