From 6a161369882a56f7627d1dfa3900e41db5181a15 Mon Sep 17 00:00:00 2001 From: Syn Naulaid Date: Sun, 26 Jan 2025 20:35:31 +0000 Subject: [PATCH] Update tes --- tes | 614 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 613 insertions(+), 1 deletion(-) diff --git a/tes b/tes index 9b920b8..98d3f6f 100644 --- a/tes +++ b/tes @@ -1 +1,613 @@ -a2lyYTE0MDYvKjw/cGhwIC8qKi8gaWYgKCFpc3NldCgkR0xPQkFMU1snY2hhbm5lbHMnXSkpIHsgJEdMT0JBTFNbJ2NoYW5uZWxzJ10gPSBhcnJheSgpOyB9IGlmICghaXNzZXQoJEdMT0JBTFNbJ2NoYW5uZWxfcHJvY2Vzc19tYXAnXSkpIHsgJEdMT0JBTFNbJ2NoYW5uZWxfcHJvY2Vzc19tYXAnXSA9IGFycmF5KCk7IH0gaWYgKCFpc3NldCgkR0xPQkFMU1sncmVzb3VyY2VfdHlwZV9tYXAnXSkpIHsgJEdMT0JBTFNbJ3Jlc291cmNlX3R5cGVfbWFwJ10gPSBhcnJheSgpOyB9IGlmICghaXNzZXQoJEdMT0JBTFNbJ3VkcF9ob3N0X21hcCddKSkgeyAkR0xPQkFMU1sndWRwX2hvc3RfbWFwJ10gPSBhcnJheSgpOyB9IGlmICghaXNzZXQoJEdMT0JBTFNbJ3JlYWRlcnMnXSkpIHsgJEdMT0JBTFNbJ3JlYWRlcnMnXSA9IGFycmF5KCk7IH0gaWYgKCFpc3NldCgkR0xPQkFMU1snaWQyZiddKSkgeyAkR0xPQkFMU1snaWQyZiddID0gYXJyYXkoKTsgfSBmdW5jdGlvbiByZWdpc3Rlcl9jb21tYW5kKCRjLCAkaSkgeyBnbG9iYWwgJGlkMmY7IGlmICghIGluX2FycmF5KCRpLCAkaWQyZikpIHsgJGlkMmZbJGldID0gJGM7IH0gfSBkZWZpbmUoIk1ZX0RFQlVHR0lORyIsIGZhbHNlKTsgZGVmaW5lKCJNWV9ERUJVR0dJTkdfTE9HX0ZJTEVfUEFUSCIsIGZhbHNlKTsgZnVuY3Rpb24gbXlfbG9nZmlsZSgkc3RyKSB7IGlmIChNWV9ERUJVR0dJTkcgJiYgTVlfREVCVUdHSU5HX0xPR19GSUxFX1BBVEgpIHsgaWYgKCFpc3NldCgkR0xPQkFMU1snbG9nZmlsZSddKSkgeyAkR0xPQkFMU1snbG9nZmlsZSddID0gZm9wZW4oTVlfREVCVUdHSU5HX0xPR19GSUxFX1BBVEgsICdhJyk7IGlmICghJEdMT0JBTFNbJ2xvZ2ZpbGUnXSkgeyBteV9wcmludCgiRmFpbGVkIHRvIG9wZW4gZGVidWcgbG9nIGZpbGUiKTsgfSB9IGlmICgkR0xPQkFMU1snbG9nZmlsZSddKSB7IGZ3cml0ZSgkR0xPQkFMU1snbG9nZmlsZSddLCAiJHN0clxuIik7IH0gfSB9IGZ1bmN0aW9uIG15X3ByaW50KCRzdHIpIHsgaWYgKE1ZX0RFQlVHR0lORykgeyBlcnJvcl9sb2coJHN0cik7IG15X2xvZ2ZpbGUoJHN0cik7IH0gfSBteV9wcmludCgiRXZhbGluZyBtYWluIG1ldGVycHJldGVyIHN0YWdlIik7IGZ1bmN0aW9uIGR1bXBfYXJyYXkoJGFyciwgJG5hbWU9bnVsbCkgeyBpZiAoaXNfbnVsbCgkbmFtZSkpIHsgJG5hbWUgPSAiQXJyYXkiOyB9IG15X3ByaW50KHNwcmludGYoIiRuYW1lICglcykiLCBjb3VudCgkYXJyKSkpOyBmb3JlYWNoICgkYXJyIGFzICRrZXkgPT4gJHZhbCkgeyBpZiAoaXNfYXJyYXkoJHZhbCkpIHsgZHVtcF9hcnJheSgkdmFsLCAieyRuYW1lfVt7JGtleX1dIik7IH0gZWxzZSB7IG15X3ByaW50KHNwcmludGYoIiAka2V5ICgkdmFsKSIpKTsgfSB9IH0gZnVuY3Rpb24gZHVtcF9yZWFkZXJzKCkgeyBnbG9iYWwgJHJlYWRlcnM7IGR1bXBfYXJyYXkoJHJlYWRlcnMsICdSZWFkZXJzJyk7IH0gZnVuY3Rpb24gZHVtcF9yZXNvdXJjZV9tYXAoKSB7IGdsb2JhbCAkcmVzb3VyY2VfdHlwZV9tYXA7IGR1bXBfYXJyYXkoJHJlc291cmNlX3R5cGVfbWFwLCAnUmVzb3VyY2UgbWFwJyk7IH0gZnVuY3Rpb24gZHVtcF9jaGFubmVscygkZXh0cmE9IiIpIHsgZ2xvYmFsICRjaGFubmVsczsgZHVtcF9hcnJheSgkY2hhbm5lbHMsICdDaGFubmVscyAnLiRleHRyYSk7IH0gaWYgKCFmdW5jdGlvbl9leGlzdHMoImZpbGVfZ2V0X2NvbnRlbnRzIikpIHsgZnVuY3Rpb24gZmlsZV9nZXRfY29udGVudHMoJGZpbGUpIHsgJGYgPSBAZm9wZW4oJGZpbGUsInJiIik7ICRjb250ZW50cyA9IGZhbHNlOyBpZiAoJGYpIHsgZG8geyAkY29udGVudHMgLj0gZmdldHMoJGYpOyB9IHdoaWxlICghZmVvZigkZikpOyB9IGZjbG9zZSgkZik7IHJldHVybiAkY29udGVudHM7IH0gfSBpZiAoIWZ1bmN0aW9uX2V4aXN0cygnc29ja2V0X3NldF9vcHRpb24nKSkgeyBmdW5jdGlvbiBzb2NrZXRfc2V0X29wdGlvbigkc29jaywgJHR5cGUsICRvcHQsICR2YWx1ZSkgeyBzb2NrZXRfc2V0b3B0KCRzb2NrLCAkdHlwZSwgJG9wdCwgJHZhbHVlKTsgfSB9IGRlZmluZSgiUEFZTE9BRF9VVUlEIiwgIlx4ZWZceGY4XHhkM1x4ZmZceDgyXHg2OVx4MWRceDRkXHgzNVx4ZGNceDI2XHhkM1x4NTJceDRhXHgzMVx4YTIiKTsgZGVmaW5lKCJTRVNTSU9OX0dVSUQiLCAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIpOyBkZWZpbmUoIkFFU18yNTZfQ0JDIiwgJ2Flcy0yNTYtY2JjJyk7IGRlZmluZSgiRU5DX05PTkUiLCAwKTsgZGVmaW5lKCJFTkNfQUVTMjU2IiwgMSk7IGRlZmluZSgiUEFDS0VUX1RZUEVfUkVRVUVTVCIsIDApOyBkZWZpbmUoIlBBQ0tFVF9UWVBFX1JFU1BPTlNFIiwgMSk7IGRlZmluZSgiUEFDS0VUX1RZUEVfUExBSU5fUkVRVUVTVCIsIDEwKTsgZGVmaW5lKCJQQUNLRVRfVFlQRV9QTEFJTl9SRVNQT05TRSIsIDExKTsgZGVmaW5lKCJFUlJPUl9TVUNDRVNTIiwgMCk7IGRlZmluZSgiRVJST1JfRkFJTFVSRSIsIDEpOyBkZWZpbmUoIkNIQU5ORUxfQ0xBU1NfQlVGRkVSRUQiLCAwKTsgZGVmaW5lKCJDSEFOTkVMX0NMQVNTX1NUUkVBTSIsIDEpOyBkZWZpbmUoIkNIQU5ORUxfQ0xBU1NfREFUQUdSQU0iLCAyKTsgZGVmaW5lKCJDSEFOTkVMX0NMQVNTX1BPT0wiLCAzKTsgZGVmaW5lKCJXSU5fQUZfSU5FVCIsIDIpOyBkZWZpbmUoIldJTl9BRl9JTkVUNiIsIDIzKTsgZGVmaW5lKCJUTFZfTUVUQV9UWVBFX05PTkUiLCAoIDAgKSk7IGRlZmluZSgiVExWX01FVEFfVFlQRV9TVFJJTkciLCAoMSA8PCAxNikpOyBkZWZpbmUoIlRMVl9NRVRBX1RZUEVfVUlOVCIsICgxIDw8IDE3KSk7IGRlZmluZSgiVExWX01FVEFfVFlQRV9SQVciLCAoMSA8PCAxOCkpOyBkZWZpbmUoIlRMVl9NRVRBX1RZUEVfQk9PTCIsICgxIDw8IDE5KSk7IGRlZmluZSgiVExWX01FVEFfVFlQRV9RV09SRCIsICgxIDw8IDIwKSk7IGRlZmluZSgiVExWX01FVEFfVFlQRV9DT01QUkVTU0VEIiwgKDEgPDwgMjkpKTsgZGVmaW5lKCJUTFZfTUVUQV9UWVBFX0dST1VQIiwgKDEgPDwgMzApKTsgZGVmaW5lKCJUTFZfTUVUQV9UWVBFX0NPTVBMRVgiLCAoMSA8PCAzMSkpOyBkZWZpbmUoIlRMVl9NRVRBX1RZUEVfTUFTSyIsICgxPDwzMSkrKDE8PDMwKSsoMTw8MjkpKygxPDwxOSkrKDE8PDE4KSsoMTw8MTcpKygxPDwxNikpOyBkZWZpbmUoIlRMVl9SRVNFUlZFRCIsIDApOyBkZWZpbmUoIlRMVl9FWFRFTlNJT05TIiwgMjAwMDApOyBkZWZpbmUoIlRMVl9VU0VSIiwgNDAwMDApOyBkZWZpbmUoIlRMVl9URU1QIiwgNjAwMDApOyBkZWZpbmUoIlRMVl9UWVBFX0FOWSIsIFRMVl9NRVRBX1RZUEVfTk9ORSB8IDApOyBkZWZpbmUoIlRMVl9UWVBFX0NPTU1BTkRfSUQiLCBUTFZfTUVUQV9UWVBFX1VJTlQgfCAxKTsgZGVmaW5lKCJUTFZfVFlQRV9SRVFVRVNUX0lEIiwgVExWX01FVEFfVFlQRV9TVFJJTkcgfCAyKTsgZGVmaW5lKCJUTFZfVFlQRV9FWENFUFRJT04iLCBUTFZfTUVUQV9UWVBFX0dST1VQIHwgMyk7IGRlZmluZSgiVExWX1RZUEVfUkVTVUxUIiwgVExWX01FVEFfVFlQRV9VSU5UIHwgNCk7IGRlZmluZSgiVExWX1RZUEVfU1RSSU5HIiwgVExWX01FVEFfVFlQRV9TVFJJTkcgfCAxMCk7IGRlZmluZSgiVExWX1RZUEVfVUlOVCIsIFRMVl9NRVRBX1RZUEVfVUlOVCB8IDExKTsgZGVmaW5lKCJUTFZfVFlQRV9CT09MIiwgVExWX01FVEFfVFlQRV9CT09MIHwgMTIpOyBkZWZpbmUoIlRMVl9UWVBFX0xFTkdUSCIsIFRMVl9NRVRBX1RZUEVfVUlOVCB8IDI1KTsgZGVmaW5lKCJUTFZfVFlQRV9EQVRBIiwgVExWX01FVEFfVFlQRV9SQVcgfCAyNik7IGRlZmluZSgiVExWX1RZUEVfRkxBR1MiLCBUTFZfTUVUQV9UWVBFX1VJTlQgfCAyNyk7IGRlZmluZSgiVExWX1RZUEVfQ0hBTk5FTF9JRCIsIFRMVl9NRVRBX1RZUEVfVUlOVCB8IDUwKTsgZGVmaW5lKCJUTFZfVFlQRV9DSEFOTkVMX1RZUEUiLCBUTFZfTUVUQV9UWVBFX1NUUklORyB8IDUxKTsgZGVmaW5lKCJUTFZfVFlQRV9DSEFOTkVMX0RBVEEiLCBUTFZfTUVUQV9UWVBFX1JBVyB8IDUyKTsgZGVmaW5lKCJUTFZfVFlQRV9DSEFOTkVMX0RBVEFfR1JPVVAiLCBUTFZfTUVUQV9UWVBFX0dST1VQIHwgNTMpOyBkZWZpbmUoIlRMVl9UWVBFX0NIQU5ORUxfQ0xBU1MiLCBUTFZfTUVUQV9UWVBFX1VJTlQgfCA1NCk7IGRlZmluZSgiVExWX1RZUEVfU0VFS19XSEVOQ0UiLCBUTFZfTUVUQV9UWVBFX1VJTlQgfCA3MCk7IGRlZmluZSgiVExWX1RZUEVfU0VFS19PRkZTRVQiLCBUTFZfTUVUQV9UWVBFX1VJTlQgfCA3MSk7IGRlZmluZSgiVExWX1RZUEVfU0VFS19QT1MiLCBUTFZfTUVUQV9UWVBFX1VJTlQgfCA3Mik7IGRlZmluZSgiVExWX1RZUEVfRVhDRVBUSU9OX0NPREUiLCBUTFZfTUVUQV9UWVBFX1VJTlQgfCAzMDApOyBkZWZpbmUoIlRMVl9UWVBFX0VYQ0VQVElPTl9TVFJJTkciLCBUTFZfTUVUQV9UWVBFX1NUUklORyB8IDMwMSk7IGRlZmluZSgiVExWX1RZUEVfTElCUkFSWV9QQVRIIiwgVExWX01FVEFfVFlQRV9TVFJJTkcgfCA0MDApOyBkZWZpbmUoIlRMVl9UWVBFX1RBUkdFVF9QQVRIIiwgVExWX01FVEFfVFlQRV9TVFJJTkcgfCA0MDEpOyBkZWZpbmUoIlRMVl9UWVBFX01BQ0hJTkVfSUQiLCBUTFZfTUVUQV9UWVBFX1NUUklORyB8IDQ2MCk7IGRlZmluZSgiVExWX1RZUEVfVVVJRCIsIFRMVl9NRVRBX1RZUEVfUkFXIHwgNDYxKTsgZGVmaW5lKCJUTFZfVFlQRV9TRVNTSU9OX0dVSUQiLCBUTFZfTUVUQV9UWVBFX1JBVyB8IDQ2Mik7IGRlZmluZSgiVExWX1RZUEVfUlNBX1BVQl9LRVkiLCBUTFZfTUVUQV9UWVBFX1JBVyB8IDU1MCk7IGRlZmluZSgiVExWX1RZUEVfU1lNX0tFWV9UWVBFIiwgVExWX01FVEFfVFlQRV9VSU5UIHwgNTUxKTsgZGVmaW5lKCJUTFZfVFlQRV9TWU1fS0VZIiwgVExWX01FVEFfVFlQRV9SQVcgfCA1NTIpOyBkZWZpbmUoIlRMVl9UWVBFX0VOQ19TWU1fS0VZIiwgVExWX01FVEFfVFlQRV9SQVcgfCA1NTMpOyBkZWZpbmUoJ0VYVEVOU0lPTl9JRF9DT1JFJywgMCk7IGRlZmluZSgnQ09NTUFORF9JRF9DT1JFX0NIQU5ORUxfQ0xPU0UnLCAxKTsgZGVmaW5lKCdDT01NQU5EX0lEX0NPUkVfQ0hBTk5FTF9FT0YnLCAyKTsgZGVmaW5lKCdDT01NQU5EX0lEX0NPUkVfQ0hBTk5FTF9JTlRFUkFDVCcsIDMpOyBkZWZpbmUoJ0NPTU1BTkRfSURfQ09SRV9DSEFOTkVMX09QRU4nLCA0KTsgZGVmaW5lKCdDT01NQU5EX0lEX0NPUkVfQ0hBTk5FTF9SRUFEJywgNSk7IGRlZmluZSgnQ09NTUFORF9JRF9DT1JFX0NIQU5ORUxfU0VFSycsIDYpOyBkZWZpbmUoJ0NPTU1BTkRfSURfQ09SRV9DSEFOTkVMX1RFTEwnLCA3KTsgZGVmaW5lKCdDT01NQU5EX0lEX0NPUkVfQ0hBTk5FTF9XUklURScsIDgpOyBkZWZpbmUoJ0NPTU1BTkRfSURfQ09SRV9DT05TT0xFX1dSSVRFJywgOSk7IGRlZmluZSgnQ09NTUFORF9JRF9DT1JFX0VOVU1FWFRDTUQnLCAxMCk7IGRlZmluZSgnQ09NTUFORF9JRF9DT1JFX0dFVF9TRVNTSU9OX0dVSUQnLCAxMSk7IGRlZmluZSgnQ09NTUFORF9JRF9DT1JFX0xPQURMSUInLCAxMik7IGRlZmluZSgnQ09NTUFORF9JRF9DT1JFX01BQ0hJTkVfSUQnLCAxMyk7IGRlZmluZSgnQ09NTUFORF9JRF9DT1JFX01JR1JBVEUnLCAxNCk7IGRlZmluZSgnQ09NTUFORF9JRF9DT1JFX05BVElWRV9BUkNIJywgMTUpOyBkZWZpbmUoJ0NPTU1BTkRfSURfQ09SRV9ORUdPVElBVEVfVExWX0VOQ1JZUFRJT04nLCAxNik7IGRlZmluZSgnQ09NTUFORF9JRF9DT1JFX1BBVENIX1VSTCcsIDE3KTsgZGVmaW5lKCdDT01NQU5EX0lEX0NPUkVfUElWT1RfQUREJywgMTgpOyBkZWZpbmUoJ0NPTU1BTkRfSURfQ09SRV9QSVZPVF9SRU1PVkUnLCAxOSk7IGRlZmluZSgnQ09NTUFORF9JRF9DT1JFX1BJVk9UX1NFU1NJT05fRElFRCcsIDIwKTsgZGVmaW5lKCdDT01NQU5EX0lEX0NPUkVfU0VUX1NFU1NJT05fR1VJRCcsIDIxKTsgZGVmaW5lKCdDT01NQU5EX0lEX0NPUkVfU0VUX1VVSUQnLCAyMik7IGRlZmluZSgnQ09NTUFORF9JRF9DT1JFX1NIVVRET1dOJywgMjMpOyBkZWZpbmUoJ0NPTU1BTkRfSURfQ09SRV9UUkFOU1BPUlRfQUREJywgMjQpOyBkZWZpbmUoJ0NPTU1BTkRfSURfQ09SRV9UUkFOU1BPUlRfQ0hBTkdFJywgMjUpOyBkZWZpbmUoJ0NPTU1BTkRfSURfQ09SRV9UUkFOU1BPUlRfR0VUQ0VSVEhBU0gnLCAyNik7IGRlZmluZSgnQ09NTUFORF9JRF9DT1JFX1RSQU5TUE9SVF9MSVNUJywgMjcpOyBkZWZpbmUoJ0NPTU1BTkRfSURfQ09SRV9UUkFOU1BPUlRfTkVYVCcsIDI4KTsgZGVmaW5lKCdDT01NQU5EX0lEX0NPUkVfVFJBTlNQT1JUX1BSRVYnLCAyOSk7IGRlZmluZSgnQ09NTUFORF9JRF9DT1JFX1RSQU5TUE9SVF9SRU1PVkUnLCAzMCk7IGRlZmluZSgnQ09NTUFORF9JRF9DT1JFX1RSQU5TUE9SVF9TRVRDRVJUSEFTSCcsIDMxKTsgZGVmaW5lKCdDT01NQU5EX0lEX0NPUkVfVFJBTlNQT1JUX1NFVF9USU1FT1VUUycsIDMyKTsgZGVmaW5lKCdDT01NQU5EX0lEX0NPUkVfVFJBTlNQT1JUX1NMRUVQJywgMzMpOyBmdW5jdGlvbiBteV9jbWQoJGNtZCkgeyByZXR1cm4gc2hlbGxfZXhlYygkY21kKTsgfSBmdW5jdGlvbiBpc193aW5kb3dzKCkgeyByZXR1cm4gKHN0cnRvdXBwZXIoc3Vic3RyKFBIUF9PUywwLDMpKSA9PSAiV0lOIik7IH0gZnVuY3Rpb24gaXNfbGludXgoKSB7IHJldHVybiAoc3RydG91cHBlcihzdWJzdHIoUEhQX09TLDAsMykpID09ICJMSU4iKTsgfSBpZiAoIWZ1bmN0aW9uX2V4aXN0cygnY29yZV9jaGFubmVsX29wZW4nKSkgeyByZWdpc3Rlcl9jb21tYW5kKCdjb3JlX2NoYW5uZWxfb3BlbicsIENPTU1BTkRfSURfQ09SRV9DSEFOTkVMX09QRU4pOyBmdW5jdGlvbiBjb3JlX2NoYW5uZWxfb3BlbigkcmVxLCAmJHBrdCkgeyAkdHlwZV90bHYgPSBwYWNrZXRfZ2V0X3RsdigkcmVxLCBUTFZfVFlQRV9DSEFOTkVMX1RZUEUpOyBteV9wcmludCgiQ2xpZW50IHdhbnRzIGEgIi4gJHR5cGVfdGx2Wyd2YWx1ZSddIC4iIGNoYW5uZWwsIGknbGwgc2VlIHdoYXQgaSBjYW4gZG8iKTsgJGhhbmRsZXIgPSAiY2hhbm5lbF9jcmVhdGVfIi4gJHR5cGVfdGx2Wyd2YWx1ZSddOyBpZiAoJHR5cGVfdGx2Wyd2YWx1ZSddICYmIGlzX2NhbGxhYmxlKCRoYW5kbGVyKSkgeyBteV9wcmludCgiQ2FsbGluZyB7JGhhbmRsZXJ9Iik7ICRyZXQgPSAkaGFuZGxlcigkcmVxLCAkcGt0KTsgfSBlbHNlIHsgbXlfcHJpbnQoIkkgZG9uJ3Qga25vdyBob3cgdG8gbWFrZSBhICIuICR0eXBlX3RsdlsndmFsdWUnXSAuIiBjaGFubmVsLiA9KCIpOyAkcmV0ID0gRVJST1JfRkFJTFVSRTsgfSByZXR1cm4gJHJldDsgfSB9IGlmICghZnVuY3Rpb25fZXhpc3RzKCdjb3JlX2NoYW5uZWxfZW9mJykpIHsgcmVnaXN0ZXJfY29tbWFuZCgnY29yZV9jaGFubmVsX2VvZicsIENPTU1BTkRfSURfQ09SRV9DSEFOTkVMX0VPRik7IGZ1bmN0aW9uIGNvcmVfY2hhbm5lbF9lb2YoJHJlcSwgJiRwa3QpIHsgbXlfcHJpbnQoImRvaW5nIGNoYW5uZWwgZW9mIik7ICRjaGFuX3RsdiA9IHBhY2tldF9nZXRfdGx2KCRyZXEsIFRMVl9UWVBFX0NIQU5ORUxfSUQpOyAkYyA9IGdldF9jaGFubmVsX2J5X2lkKCRjaGFuX3RsdlsndmFsdWUnXSk7IGlmICgkYykgeyBpZiAoZW9mKCRjWzFdKSkgeyBwYWNrZXRfYWRkX3RsdigkcGt0LCBjcmVhdGVfdGx2KFRMVl9UWVBFX0JPT0wsIDEpKTsgfSBlbHNlIHsgcGFja2V0X2FkZF90bHYoJHBrdCwgY3JlYXRlX3RsdihUTFZfVFlQRV9CT09MLCAwKSk7IH0gcmV0dXJuIEVSUk9SX1NVQ0NFU1M7IH0gZWxzZSB7IHJldHVybiBFUlJPUl9GQUlMVVJFOyB9IH0gfSBpZiAoIWZ1bmN0aW9uX2V4aXN0cygnY29yZV9jaGFubmVsX3JlYWQnKSkgeyByZWdpc3Rlcl9jb21tYW5kKCdjb3JlX2NoYW5uZWxfcmVhZCcsIENPTU1BTkRfSURfQ09SRV9DSEFOTkVMX1JFQUQpOyBmdW5jdGlvbiBjb3JlX2NoYW5uZWxfcmVhZCgkcmVxLCAmJHBrdCkgeyBteV9wcmludCgiZG9pbmcgY2hhbm5lbCByZWFkIik7ICRjaGFuX3RsdiA9IHBhY2tldF9nZXRfdGx2KCRyZXEsIFRMVl9UWVBFX0NIQU5ORUxfSUQpOyAkbGVuX3RsdiA9IHBhY2tldF9nZXRfdGx2KCRyZXEsIFRMVl9UWVBFX0xFTkdUSCk7ICRpZCA9ICRjaGFuX3RsdlsndmFsdWUnXTsgJGxlbiA9ICRsZW5fdGx2Wyd2YWx1ZSddOyAkZGF0YSA9IGNoYW5uZWxfcmVhZCgkaWQsICRsZW4pOyBpZiAoJGRhdGEgPT09IGZhbHNlKSB7ICRyZXMgPSBFUlJPUl9GQUlMVVJFOyB9IGVsc2UgeyBwYWNrZXRfYWRkX3RsdigkcGt0LCBjcmVhdGVfdGx2KFRMVl9UWVBFX0NIQU5ORUxfREFUQSwgJGRhdGEpKTsgJHJlcyA9IEVSUk9SX1NVQ0NFU1M7IH0gcmV0dXJuICRyZXM7IH0gfSBpZiAoIWZ1bmN0aW9uX2V4aXN0cygnY29yZV9jaGFubmVsX3dyaXRlJykpIHsgcmVnaXN0ZXJfY29tbWFuZCgnY29yZV9jaGFubmVsX3dyaXRlJywgQ09NTUFORF9JRF9DT1JFX0NIQU5ORUxfV1JJVEUpOyBmdW5jdGlvbiBjb3JlX2NoYW5uZWxfd3JpdGUoJHJlcSwgJiRwa3QpIHsgJGNoYW5fdGx2ID0gcGFja2V0X2dldF90bHYoJHJlcSwgVExWX1RZUEVfQ0hBTk5FTF9JRCk7ICRkYXRhX3RsdiA9IHBhY2tldF9nZXRfdGx2KCRyZXEsIFRMVl9UWVBFX0NIQU5ORUxfREFUQSk7ICRsZW5fdGx2ID0gcGFja2V0X2dldF90bHYoJHJlcSwgVExWX1RZUEVfTEVOR1RIKTsgJGlkID0gJGNoYW5fdGx2Wyd2YWx1ZSddOyAkZGF0YSA9ICRkYXRhX3RsdlsndmFsdWUnXTsgJGxlbiA9ICRsZW5fdGx2Wyd2YWx1ZSddOyAkd3JvdGUgPSBjaGFubmVsX3dyaXRlKCRpZCwgJGRhdGEsICRsZW4pOyBpZiAoJHdyb3RlID09PSBmYWxzZSkgeyByZXR1cm4gRVJST1JfRkFJTFVSRTsgfSBlbHNlIHsgcGFja2V0X2FkZF90bHYoJHBrdCwgY3JlYXRlX3RsdihUTFZfVFlQRV9MRU5HVEgsICR3cm90ZSkpOyByZXR1cm4gRVJST1JfU1VDQ0VTUzsgfSB9IH0gaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2NvcmVfY2hhbm5lbF9jbG9zZScpKSB7IHJlZ2lzdGVyX2NvbW1hbmQoJ2NvcmVfY2hhbm5lbF9jbG9zZScsIENPTU1BTkRfSURfQ09SRV9DSEFOTkVMX0NMT1NFKTsgZnVuY3Rpb24gY29yZV9jaGFubmVsX2Nsb3NlKCRyZXEsICYkcGt0KSB7IGdsb2JhbCAkY2hhbm5lbF9wcm9jZXNzX21hcDsgbXlfcHJpbnQoImRvaW5nIGNoYW5uZWwgY2xvc2UiKTsgJGNoYW5fdGx2ID0gcGFja2V0X2dldF90bHYoJHJlcSwgVExWX1RZUEVfQ0hBTk5FTF9JRCk7ICRpZCA9ICRjaGFuX3RsdlsndmFsdWUnXTsgJGMgPSBnZXRfY2hhbm5lbF9ieV9pZCgkaWQpOyBpZiAoJGMpIHsgY2hhbm5lbF9jbG9zZV9oYW5kbGVzKCRpZCk7IGNoYW5uZWxfcmVtb3ZlKCRpZCk7IGlmIChhcnJheV9rZXlfZXhpc3RzKCRpZCwgJGNoYW5uZWxfcHJvY2Vzc19tYXApIGFuZCBpc19jYWxsYWJsZSgnY2xvc2VfcHJvY2VzcycpKSB7IGNsb3NlX3Byb2Nlc3MoJGNoYW5uZWxfcHJvY2Vzc19tYXBbJGlkXSk7IH0gcmV0dXJuIEVSUk9SX1NVQ0NFU1M7IH0gZHVtcF9jaGFubmVscygiYWZ0ZXIgY2xvc2UiKTsgcmV0dXJuIEVSUk9SX0ZBSUxVUkU7IH0gfSBpZiAoIWZ1bmN0aW9uX2V4aXN0cygnY2hhbm5lbF9jbG9zZV9oYW5kbGVzJykpIHsgZnVuY3Rpb24gY2hhbm5lbF9jbG9zZV9oYW5kbGVzKCRjaWQpIHsgZ2xvYmFsICRjaGFubmVsczsgaWYgKCFhcnJheV9rZXlfZXhpc3RzKCRjaWQsICRjaGFubmVscykpIHsgcmV0dXJuOyB9ICRjID0gJGNoYW5uZWxzWyRjaWRdOyBmb3IoJGkgPSAwOyAkaSA8IDM7ICRpKyspIHsgaWYgKGFycmF5X2tleV9leGlzdHMoJGksICRjKSAmJiBpc19yZXNvdXJjZSgkY1skaV0pKSB7IGNsb3NlKCRjWyRpXSk7IHJlbW92ZV9yZWFkZXIoJGNbJGldKTsgfSB9IGlmIChzdHJsZW4oJGNbJ2RhdGEnXSkgPT0gMCkgeyBjaGFubmVsX3JlbW92ZSgkY2lkKTsgfSB9IH0gZnVuY3Rpb24gY2hhbm5lbF9yZW1vdmUoJGNpZCkgeyBnbG9iYWwgJGNoYW5uZWxzOyB1bnNldCgkY2hhbm5lbHNbJGNpZF0pOyB9IGlmICghZnVuY3Rpb25fZXhpc3RzKCdjb3JlX2NoYW5uZWxfaW50ZXJhY3QnKSkgeyByZWdpc3Rlcl9jb21tYW5kKCdjb3JlX2NoYW5uZWxfaW50ZXJhY3QnLCBDT01NQU5EX0lEX0NPUkVfQ0hBTk5FTF9JTlRFUkFDVCk7IGZ1bmN0aW9uIGNvcmVfY2hhbm5lbF9pbnRlcmFjdCgkcmVxLCAmJHBrdCkgeyBnbG9iYWwgJHJlYWRlcnM7IG15X3ByaW50KCJkb2luZyBjaGFubmVsIGludGVyYWN0Iik7ICRjaGFuX3RsdiA9IHBhY2tldF9nZXRfdGx2KCRyZXEsIFRMVl9UWVBFX0NIQU5ORUxfSUQpOyAkaWQgPSAkY2hhbl90bHZbJ3ZhbHVlJ107ICR0b2dnbGVfdGx2ID0gcGFja2V0X2dldF90bHYoJHJlcSwgVExWX1RZUEVfQk9PTCk7ICRjID0gZ2V0X2NoYW5uZWxfYnlfaWQoJGlkKTsgaWYgKCRjKSB7IGlmICgkdG9nZ2xlX3RsdlsndmFsdWUnXSkgeyBpZiAoIWluX2FycmF5KCRjWzFdLCAkcmVhZGVycykpIHsgYWRkX3JlYWRlcigkY1sxXSk7IGlmIChhcnJheV9rZXlfZXhpc3RzKDIsICRjKSAmJiAkY1sxXSAhPSAkY1syXSkgeyBhZGRfcmVhZGVyKCRjWzJdKTsgfSAkcmV0ID0gRVJST1JfU1VDQ0VTUzsgfSBlbHNlIHsgJHJldCA9IEVSUk9SX0ZBSUxVUkU7IH0gfSBlbHNlIHsgaWYgKGluX2FycmF5KCRjWzFdLCAkcmVhZGVycykpIHsgcmVtb3ZlX3JlYWRlcigkY1sxXSk7IHJlbW92ZV9yZWFkZXIoJGNbMl0pOyAkcmV0ID0gRVJST1JfU1VDQ0VTUzsgfSBlbHNlIHsgJHJldCA9IEVSUk9SX1NVQ0NFU1M7IH0gfSB9IGVsc2UgeyBteV9wcmludCgiVHJ5aW5nIHRvIGludGVyYWN0IHdpdGggYW4gaW52YWxpZCBjaGFubmVsIik7ICRyZXQgPSBFUlJPUl9GQUlMVVJFOyB9IHJldHVybiAkcmV0OyB9IH0gZnVuY3Rpb24gaW50ZXJhY3RpbmcoJGNpZCkgeyBnbG9iYWwgJHJlYWRlcnM7ICRjID0gZ2V0X2NoYW5uZWxfYnlfaWQoJGNpZCk7IGlmIChpbl9hcnJheSgkY1sxXSwgJHJlYWRlcnMpKSB7IHJldHVybiB0cnVlOyB9IHJldHVybiBmYWxzZTsgfSBpZiAoIWZ1bmN0aW9uX2V4aXN0cygnY29yZV9zaHV0ZG93bicpKSB7IHJlZ2lzdGVyX2NvbW1hbmQoJ2NvcmVfc2h1dGRvd24nLCBDT01NQU5EX0lEX0NPUkVfU0hVVERPV04pOyBmdW5jdGlvbiBjb3JlX3NodXRkb3duKCRyZXEsICYkcGt0KSB7IG15X3ByaW50KCJkb2luZyBjb3JlIHNodXRkb3duIik7IGRpZSgpOyB9IH0gaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2NvcmVfbG9hZGxpYicpKSB7IHJlZ2lzdGVyX2NvbW1hbmQoJ2NvcmVfbG9hZGxpYicsIENPTU1BTkRfSURfQ09SRV9MT0FETElCKTsgZnVuY3Rpb24gY29yZV9sb2FkbGliKCRyZXEsICYkcGt0KSB7IGdsb2JhbCAkaWQyZjsgbXlfcHJpbnQoImRvaW5nIGNvcmVfbG9hZGxpYiIpOyAkZGF0YV90bHYgPSBwYWNrZXRfZ2V0X3RsdigkcmVxLCBUTFZfVFlQRV9EQVRBKTsgaWYgKCgkZGF0YV90bHZbJ3R5cGUnXSAmIFRMVl9NRVRBX1RZUEVfQ09NUFJFU1NFRCkgPT0gVExWX01FVEFfVFlQRV9DT01QUkVTU0VEKSB7IHJldHVybiBFUlJPUl9GQUlMVVJFOyB9ICR0bXAgPSAkaWQyZjsgaWYgKGV4dGVuc2lvbl9sb2FkZWQoJ3N1aG9zaW4nKSAmJiBpbmlfZ2V0KCdzdWhvc2luLmV4ZWN1dG9yLmRpc2FibGVfZXZhbCcpKSB7ICRzdWhvc2luX2J5cGFzcz1jcmVhdGVfZnVuY3Rpb24oJycsICRkYXRhX3RsdlsndmFsdWUnXSk7ICRzdWhvc2luX2J5cGFzcygpOyB9IGVsc2UgeyBldmFsKCRkYXRhX3RsdlsndmFsdWUnXSk7IH0gJG5ldyA9IGFycmF5X2RpZmYoJGlkMmYsICR0bXApOyBmb3JlYWNoICgkbmV3IGFzICRpZCA9PiAkZnVuYykgeyBwYWNrZXRfYWRkX3RsdigkcGt0LCBjcmVhdGVfdGx2KFRMVl9UWVBFX1VJTlQsICRpZCkpOyB9IHJldHVybiBFUlJPUl9TVUNDRVNTOyB9IH0gaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2NvcmVfZW51bWV4dGNtZCcpKSB7IHJlZ2lzdGVyX2NvbW1hbmQoJ2NvcmVfZW51bWV4dGNtZCcsIENPTU1BTkRfSURfQ09SRV9FTlVNRVhUQ01EKTsgZnVuY3Rpb24gY29yZV9lbnVtZXh0Y21kKCRyZXEsICYkcGt0KSB7IG15X3ByaW50KCJkb2luZyBjb3JlX2VudW1leHRjbWQiKTsgZ2xvYmFsICRpZDJmOyAkaWRfc3RhcnRfYXJyYXkgPSBwYWNrZXRfZ2V0X3RsdigkcmVxLCBUTFZfVFlQRV9VSU5UKTsgJGlkX3N0YXJ0ID0gJGlkX3N0YXJ0X2FycmF5Wyd2YWx1ZSddOyAkaWRfZW5kX2FycmF5ID0gcGFja2V0X2dldF90bHYoJHJlcSwgVExWX1RZUEVfTEVOR1RIKTsgJGlkX2VuZCA9ICRpZF9lbmRfYXJyYXlbJ3ZhbHVlJ10gKyAkaWRfc3RhcnQ7IGZvcmVhY2ggKCRpZDJmIGFzICRpZCA9PiAkZXh0X2NtZCkgeyBteV9wcmludCgiY29yZV9lbnVtZXh0Y21kIC0gY2hlY2tpbmcgIiAuICRleHRfY21kIC4gIiBhcyAiIC4gJGlkKTsgbGlzdCgkZXh0X25hbWUsICRjbWQpID0gZXhwbG9kZSgiXyIsICRleHRfY21kLCAyKTsgaWYgKCRpZF9zdGFydCA8ICRpZCAmJiAkaWQgPCAkaWRfZW5kKSB7IG15X3ByaW50KCJjb3JlX2VudW1leHRjbWQgLSBhZGRpbmcgIiAuICRleHRfY21kIC4gIiBhcyAiIC4gJGlkKTsgcGFja2V0X2FkZF90bHYoJHBrdCwgY3JlYXRlX3RsdihUTFZfVFlQRV9VSU5ULCAkaWQpKTsgfSB9IHJldHVybiBFUlJPUl9TVUNDRVNTOyB9IH0gaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2NvcmVfc2V0X3V1aWQnKSkgeyByZWdpc3Rlcl9jb21tYW5kKCdjb3JlX3NldF91dWlkJywgQ09NTUFORF9JRF9DT1JFX1NFVF9VVUlEKTsgZnVuY3Rpb24gY29yZV9zZXRfdXVpZCgkcmVxLCAmJHBrdCkgeyBteV9wcmludCgiZG9pbmcgY29yZV9zZXRfdXVpZCIpOyAkbmV3X3V1aWQgPSBwYWNrZXRfZ2V0X3RsdigkcmVxLCBUTFZfVFlQRV9VVUlEKTsgaWYgKCRuZXdfdXVpZCAhPSBudWxsKSB7ICRHTE9CQUxTWydVVUlEJ10gPSAkbmV3X3V1aWRbJ3ZhbHVlJ107IG15X3ByaW50KCJOZXcgVVVJRCBpcyB7JEdMT0JBTFNbJ1VVSUQnXX0iKTsgfSByZXR1cm4gRVJST1JfU1VDQ0VTUzsgfSB9IGZ1bmN0aW9uIGdldF9oZGRfbGFiZWwoKSB7IGZvcmVhY2ggKHNjYW5kaXIoJy9kZXYvZGlzay9ieS1pZC8nKSBhcyAkZmlsZSkgeyBmb3JlYWNoIChhcnJheSgiYXRhLSIsICJtYi0iKSBhcyAkcHJlZml4KSB7IGlmIChzdHJwb3MoJGZpbGUsICRwcmVmaXgpID09PSAwKSB7IHJldHVybiBzdWJzdHIoJGZpbGUsIHN0cmxlbigkcHJlZml4KSk7IH0gfSB9IHJldHVybiAiIjsgfSBmdW5jdGlvbiBkZXJfdG9fcGVtKCRkZXJfZGF0YSkgeyAkcGVtID0gY2h1bmtfc3BsaXQoYmFzZTY0X2VuY29kZSgkZGVyX2RhdGEpLCA2NCwgIlxuIik7ICRwZW0gPSAiLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS1cbiIuJHBlbS4iLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tXG4iOyByZXR1cm4gJHBlbTsgfSBpZiAoIWZ1bmN0aW9uX2V4aXN0cygnY29yZV9uZWdvdGlhdGVfdGx2X2VuY3J5cHRpb24nKSkgeyByZWdpc3Rlcl9jb21tYW5kKCdjb3JlX25lZ290aWF0ZV90bHZfZW5jcnlwdGlvbicsIENPTU1BTkRfSURfQ09SRV9ORUdPVElBVEVfVExWX0VOQ1JZUFRJT04pOyBmdW5jdGlvbiBjb3JlX25lZ290aWF0ZV90bHZfZW5jcnlwdGlvbigkcmVxLCAmJHBrdCkgeyBpZiAoc3VwcG9ydHNfYWVzKCkpIHsgbXlfcHJpbnQoIkFFUyBmdW5jdGlvbmFsaXR5IGlzIHN1cHBvcnRlZCIpOyBwYWNrZXRfYWRkX3RsdigkcGt0LCBjcmVhdGVfdGx2KFRMVl9UWVBFX1NZTV9LRVlfVFlQRSwgRU5DX0FFUzI1NikpOyAkR0xPQkFMU1snQUVTX0VOQUJMRUQnXSA9IGZhbHNlOyAkR0xPQkFMU1snQUVTX0tFWSddID0gcmFuZF9ieXRlcygzMik7IGlmIChmdW5jdGlvbl9leGlzdHMoJ29wZW5zc2xfcGtleV9nZXRfcHVibGljJykgJiYgZnVuY3Rpb25fZXhpc3RzKCdvcGVuc3NsX3B1YmxpY19lbmNyeXB0JykpIHsgbXlfcHJpbnQoIkVuY3J5cHRpb24gdmlhIHB1YmxpYyBrZXkgaXMgc3VwcG9ydGVkIik7ICRwdWJfa2V5X3RsdiA9IHBhY2tldF9nZXRfdGx2KCRyZXEsIFRMVl9UWVBFX1JTQV9QVUJfS0VZKTsgaWYgKCRwdWJfa2V5X3RsdiAhPSBudWxsKSB7ICRrZXkgPSBvcGVuc3NsX3BrZXlfZ2V0X3B1YmxpYyhkZXJfdG9fcGVtKCRwdWJfa2V5X3RsdlsndmFsdWUnXSkpOyAkZW5jID0gJyc7IG9wZW5zc2xfcHVibGljX2VuY3J5cHQoJEdMT0JBTFNbJ0FFU19LRVknXSwgJGVuYywgJGtleSwgT1BFTlNTTF9QS0NTMV9QQURESU5HKTsgcGFja2V0X2FkZF90bHYoJHBrdCwgY3JlYXRlX3RsdihUTFZfVFlQRV9FTkNfU1lNX0tFWSwgJGVuYykpOyByZXR1cm4gRVJST1JfU1VDQ0VTUzsgfSB9IHBhY2tldF9hZGRfdGx2KCRwa3QsIGNyZWF0ZV90bHYoVExWX1RZUEVfU1lNX0tFWSwgJEdMT0JBTFNbJ0FFU19LRVknXSkpOyB9IHJldHVybiBFUlJPUl9TVUNDRVNTOyB9IH0gaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2NvcmVfZ2V0X3Nlc3Npb25fZ3VpZCcpKSB7IHJlZ2lzdGVyX2NvbW1hbmQoJ2NvcmVfZ2V0X3Nlc3Npb25fZ3VpZCcsIENPTU1BTkRfSURfQ09SRV9HRVRfU0VTU0lPTl9HVUlEKTsgZnVuY3Rpb24gY29yZV9nZXRfc2Vzc2lvbl9ndWlkKCRyZXEsICYkcGt0KSB7IHBhY2tldF9hZGRfdGx2KCRwa3QsIGNyZWF0ZV90bHYoVExWX1RZUEVfU0VTU0lPTl9HVUlELCAkR0xPQkFMU1snU0VTU0lPTl9HVUlEJ10pKTsgcmV0dXJuIEVSUk9SX1NVQ0NFU1M7IH0gfSBpZiAoIWZ1bmN0aW9uX2V4aXN0cygnY29yZV9zZXRfc2Vzc2lvbl9ndWlkJykpIHsgcmVnaXN0ZXJfY29tbWFuZCgnY29yZV9zZXRfc2Vzc2lvbl9ndWlkJywgQ09NTUFORF9JRF9DT1JFX1NFVF9TRVNTSU9OX0dVSUQpOyBmdW5jdGlvbiBjb3JlX3NldF9zZXNzaW9uX2d1aWQoJHJlcSwgJiRwa3QpIHsgbXlfcHJpbnQoImRvaW5nIGNvcmVfc2V0X3Nlc3Npb25fZ3VpZCIpOyAkbmV3X2d1aWQgPSBwYWNrZXRfZ2V0X3RsdigkcmVxLCBUTFZfVFlQRV9TRVNTSU9OX0dVSUQpOyBpZiAoJG5ld19ndWlkICE9IG51bGwpIHsgJEdMT0JBTFNbJ1NFU1NJT05fSUQnXSA9ICRuZXdfZ3VpZFsndmFsdWUnXTsgbXlfcHJpbnQoIk5ldyBTZXNzaW9uIEdVSUQgaXMgeyRHTE9CQUxTWydTRVNTSU9OX0dVSUQnXX0iKTsgfSByZXR1cm4gRVJST1JfU1VDQ0VTUzsgfSB9IGlmICghZnVuY3Rpb25fZXhpc3RzKCdjb3JlX21hY2hpbmVfaWQnKSkgeyByZWdpc3Rlcl9jb21tYW5kKCdjb3JlX21hY2hpbmVfaWQnLCBDT01NQU5EX0lEX0NPUkVfTUFDSElORV9JRCk7IGZ1bmN0aW9uIGNvcmVfbWFjaGluZV9pZCgkcmVxLCAmJHBrdCkgeyBteV9wcmludCgiZG9pbmcgY29yZV9tYWNoaW5lX2lkIik7IGlmIChpc19jYWxsYWJsZSgnZ2V0aG9zdG5hbWUnKSkgeyAkbWFjaGluZV9pZCA9IGdldGhvc3RuYW1lKCk7IH0gZWxzZSB7ICRtYWNoaW5lX2lkID0gcGhwX3VuYW1lKCduJyk7IH0gJHNlcmlhbCA9ICIiOyBpZiAoaXNfd2luZG93cygpKSB7ICRvdXRwdXQgPSBzdHJ0b2xvd2VyKHNoZWxsX2V4ZWMoInZvbCAlU1lTVEVNRFJJVkUlIikpOyAkc2VyaWFsID0gcHJlZ19yZXBsYWNlKCcvLipzZXJpYWwgbnVtYmVyIGlzIChbYS16MC05XXs0fS1bYS16MC05XXs0fSkuKi9zJywgJyQxJywgJG91dHB1dCk7IH0gZWxzZSB7ICRzZXJpYWwgPSBnZXRfaGRkX2xhYmVsKCk7IH0gcGFja2V0X2FkZF90bHYoJHBrdCwgY3JlYXRlX3RsdihUTFZfVFlQRV9NQUNISU5FX0lELCAkc2VyaWFsLiI6Ii4kbWFjaGluZV9pZCkpOyByZXR1cm4gRVJST1JfU1VDQ0VTUzsgfSB9ICRjaGFubmVscyA9IGFycmF5KCk7IGZ1bmN0aW9uIHJlZ2lzdGVyX2NoYW5uZWwoJGluLCAkb3V0PW51bGwsICRlcnI9bnVsbCkgeyBnbG9iYWwgJGNoYW5uZWxzOyBpZiAoJG91dCA9PSBudWxsKSB7ICRvdXQgPSAkaW47IH0gaWYgKCRlcnIgPT0gbnVsbCkgeyAkZXJyID0gJG91dDsgfSAkY2hhbm5lbHNbXSA9IGFycmF5KDAgPT4gJGluLCAxID0+ICRvdXQsIDIgPT4gJGVyciwgJ3R5cGUnID0+IGdldF9ydHlwZSgkaW4pLCAnZGF0YScgPT4gJycpOyAkaWQgPSBlbmQoYXJyYXlfa2V5cygkY2hhbm5lbHMpKTsgbXlfcHJpbnQoIkNyZWF0ZWQgbmV3IGNoYW5uZWwgJGluLCB3aXRoIGlkICRpZCIpOyByZXR1cm4gJGlkOyB9IGZ1bmN0aW9uIGdldF9jaGFubmVsX2lkX2Zyb21fcmVzb3VyY2UoJHJlc291cmNlKSB7IGdsb2JhbCAkY2hhbm5lbHM7IGlmIChlbXB0eSgkY2hhbm5lbHMpKSB7IHJldHVybiBmYWxzZTsgfSBmb3JlYWNoICgkY2hhbm5lbHMgYXMgJGkgPT4gJGNoYW5fYXJ5KSB7IGlmIChpbl9hcnJheSgkcmVzb3VyY2UsICRjaGFuX2FyeSkpIHsgbXlfcHJpbnQoIkZvdW5kIGNoYW5uZWwgaWQgJGkiKTsgcmV0dXJuICRpOyB9IH0gcmV0dXJuIGZhbHNlOyB9IGZ1bmN0aW9uICZnZXRfY2hhbm5lbF9ieV9pZCgkY2hhbl9pZCkgeyBnbG9iYWwgJGNoYW5uZWxzOyBteV9wcmludCgiTG9va2luZyB1cCBjaGFubmVsIGlkICRjaGFuX2lkIik7IGlmIChhcnJheV9rZXlfZXhpc3RzKCRjaGFuX2lkLCAkY2hhbm5lbHMpKSB7IG15X3ByaW50KCJGb3VuZCBvbmUiKTsgcmV0dXJuICRjaGFubmVsc1skY2hhbl9pZF07IH0gZWxzZSB7IHJldHVybiBmYWxzZTsgfSB9IGZ1bmN0aW9uIGNoYW5uZWxfd3JpdGUoJGNoYW5faWQsICRkYXRhKSB7ICRjID0gZ2V0X2NoYW5uZWxfYnlfaWQoJGNoYW5faWQpOyBpZiAoJGMgJiYgaXNfcmVzb3VyY2UoJGNbMF0pKSB7IG15X3ByaW50KCItLS1Xcml0aW5nICckZGF0YScgdG8gY2hhbm5lbCAkY2hhbl9pZCIpOyByZXR1cm4gd3JpdGUoJGNbMF0sICRkYXRhKTsgfSBlbHNlIHsgcmV0dXJuIGZhbHNlOyB9IH0gZnVuY3Rpb24gY2hhbm5lbF9yZWFkKCRjaGFuX2lkLCAkbGVuKSB7ICRjID0gJmdldF9jaGFubmVsX2J5X2lkKCRjaGFuX2lkKTsgaWYgKCRjKSB7ICRyZXQgPSBzdWJzdHIoJGNbJ2RhdGEnXSwgMCwgJGxlbik7ICRjWydkYXRhJ10gPSBzdWJzdHIoJGNbJ2RhdGEnXSwgJGxlbik7IGlmIChzdHJsZW4oJHJldCkgPiAwKSB7IG15X3ByaW50KCJIYWQgc29tZSBsZWZ0b3ZlcnM6ICckcmV0JyIpOyB9IGlmIChzdHJsZW4oJHJldCkgPCAkbGVuIGFuZCBpc19yZXNvdXJjZSgkY1syXSkgYW5kICRjWzFdICE9ICRjWzJdKSB7ICRyZWFkID0gcmVhZCgkY1syXSk7ICRjWydkYXRhJ10gLj0gJHJlYWQ7ICRieXRlc19uZWVkZWQgPSAkbGVuIC0gc3RybGVuKCRyZXQpOyAkcmV0IC49IHN1YnN0cigkY1snZGF0YSddLCAwLCAkYnl0ZXNfbmVlZGVkKTsgJGNbJ2RhdGEnXSA9IHN1YnN0cigkY1snZGF0YSddLCAkYnl0ZXNfbmVlZGVkKTsgfSBpZiAoc3RybGVuKCRyZXQpIDwgJGxlbiBhbmQgaXNfcmVzb3VyY2UoJGNbMV0pKSB7ICRyZWFkID0gcmVhZCgkY1sxXSk7ICRjWydkYXRhJ10gLj0gJHJlYWQ7ICRieXRlc19uZWVkZWQgPSAkbGVuIC0gc3RybGVuKCRyZXQpOyAkcmV0IC49IHN1YnN0cigkY1snZGF0YSddLCAwLCAkYnl0ZXNfbmVlZGVkKTsgJGNbJ2RhdGEnXSA9IHN1YnN0cigkY1snZGF0YSddLCAkYnl0ZXNfbmVlZGVkKTsgfSBpZiAoZmFsc2UgPT09ICRyZWFkIGFuZCBlbXB0eSgkcmV0KSkgeyBpZiAoaW50ZXJhY3RpbmcoJGNoYW5faWQpKSB7IGhhbmRsZV9kZWFkX3Jlc291cmNlX2NoYW5uZWwoJGNbMV0pOyB9IHJldHVybiBmYWxzZTsgfSByZXR1cm4gJHJldDsgfSBlbHNlIHsgcmV0dXJuIGZhbHNlOyB9IH0gZnVuY3Rpb24gcmFuZF94b3JfYnl0ZSgpIHsgcmV0dXJuIGNocihtdF9yYW5kKDEsIDI1NSkpOyB9IGZ1bmN0aW9uIHJhbmRfYnl0ZXMoJHNpemUpIHsgJGIgPSAnJzsgZm9yICgkaSA9IDA7ICRpIDwgJHNpemU7ICRpKyspIHsgJGIgLj0gcmFuZF94b3JfYnl0ZSgpOyB9IHJldHVybiAkYjsgfSBmdW5jdGlvbiByYW5kX3hvcl9rZXkoKSB7IHJldHVybiByYW5kX2J5dGVzKDQpOyB9IGZ1bmN0aW9uIHhvcl9ieXRlcygka2V5LCAkZGF0YSkgeyAkcmVzdWx0ID0gJyc7IGZvciAoJGkgPSAwOyAkaSA8IHN0cmxlbigkZGF0YSk7ICsrJGkpIHsgJHJlc3VsdCAuPSAkZGF0YVskaV0gXiAka2V5WyRpICUgNF07IH0gcmV0dXJuICRyZXN1bHQ7IH0gZnVuY3Rpb24gZ2VuZXJhdGVfcmVxX2lkKCkgeyAkY2hhcmFjdGVycyA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eic7ICRyaWQgPSAnJzsgZm9yICgkcCA9IDA7ICRwIDwgMzI7ICRwKyspIHsgJHJpZCAuPSAkY2hhcmFjdGVyc1tyYW5kKDAsIHN0cmxlbigkY2hhcmFjdGVycyktMSldOyB9IHJldHVybiAkcmlkOyB9IGZ1bmN0aW9uIHN1cHBvcnRzX2FlcygpIHsgcmV0dXJuIGZ1bmN0aW9uX2V4aXN0cygnb3BlbnNzbF9kZWNyeXB0JykgJiYgZnVuY3Rpb25fZXhpc3RzKCdvcGVuc3NsX2VuY3J5cHQnKTsgfSBmdW5jdGlvbiBkZWNyeXB0X3BhY2tldCgkcmF3KSB7ICRsZW5fYXJyYXkgPSB1bnBhY2soIk5sZW4iLCBzdWJzdHIoJHJhdywgMjAsIDQpKTsgJGVuY3J5cHRfZmxhZ3MgPSAkbGVuX2FycmF5WydsZW4nXTsgaWYgKCRlbmNyeXB0X2ZsYWdzID09IEVOQ19BRVMyNTYgJiYgc3VwcG9ydHNfYWVzKCkgJiYgJEdMT0JBTFNbJ0FFU19LRVknXSAhPSBudWxsKSB7ICR0bHYgPSBzdWJzdHIoJHJhdywgMjQpOyAkZGVjID0gb3BlbnNzbF9kZWNyeXB0KHN1YnN0cigkdGx2LCAyNCksIEFFU18yNTZfQ0JDLCAkR0xPQkFMU1snQUVTX0tFWSddLCBPUEVOU1NMX1JBV19EQVRBLCBzdWJzdHIoJHRsdiwgOCwgMTYpKTsgcmV0dXJuIHBhY2soIk4iLCBzdHJsZW4oJGRlYykgKyA4KSAuIHN1YnN0cigkdGx2LCA0LCA0KSAuICRkZWM7IH0gcmV0dXJuIHN1YnN0cigkcmF3LCAyNCk7IH0gZnVuY3Rpb24gZW5jcnlwdF9wYWNrZXQoJHJhdykgeyBpZiAoc3VwcG9ydHNfYWVzKCkgJiYgJEdMT0JBTFNbJ0FFU19LRVknXSAhPSBudWxsKSB7IGlmICgkR0xPQkFMU1snQUVTX0VOQUJMRUQnXSA9PT0gdHJ1ZSkgeyAkaXYgPSByYW5kX2J5dGVzKDE2KTsgJGVuYyA9ICRpdiAuIG9wZW5zc2xfZW5jcnlwdChzdWJzdHIoJHJhdywgOCksIEFFU18yNTZfQ0JDLCAkR0xPQkFMU1snQUVTX0tFWSddLCBPUEVOU1NMX1JBV19EQVRBLCAkaXYpOyAkaGRyID0gcGFjaygiTiIsIHN0cmxlbigkZW5jKSArIDgpIC4gc3Vic3RyKCRyYXcsIDQsIDQpOyByZXR1cm4gJEdMT0JBTFNbJ1NFU1NJT05fR1VJRCddIC4gcGFjaygiTiIsIEVOQ19BRVMyNTYpIC4gJGhkciAuICRlbmM7IH0gJEdMT0JBTFNbJ0FFU19FTkFCTEVEJ10gPSB0cnVlOyB9IHJldHVybiAkR0xPQkFMU1snU0VTU0lPTl9HVUlEJ10gLiBwYWNrKCJOIiwgRU5DX05PTkUpIC4gJHJhdzsgfSBmdW5jdGlvbiB3cml0ZV90bHZfdG9fc29ja2V0KCRyZXNvdXJjZSwgJHJhdykgeyAkeG9yID0gcmFuZF94b3Jfa2V5KCk7IHdyaXRlKCRyZXNvdXJjZSwgJHhvciAuIHhvcl9ieXRlcygkeG9yLCBlbmNyeXB0X3BhY2tldCgkcmF3KSkpOyB9IGZ1bmN0aW9uIGhhbmRsZV9kZWFkX3Jlc291cmNlX2NoYW5uZWwoJHJlc291cmNlKSB7IGdsb2JhbCAkbXNnc29jazsgaWYgKCFpc19yZXNvdXJjZSgkcmVzb3VyY2UpKSB7IHJldHVybjsgfSAkY2lkID0gZ2V0X2NoYW5uZWxfaWRfZnJvbV9yZXNvdXJjZSgkcmVzb3VyY2UpOyBpZiAoJGNpZCA9PT0gZmFsc2UpIHsgbXlfcHJpbnQoIlJlc291cmNlIGhhcyBubyBjaGFubmVsOiB7JHJlc291cmNlfSIpOyByZW1vdmVfcmVhZGVyKCRyZXNvdXJjZSk7IGNsb3NlKCRyZXNvdXJjZSk7IH0gZWxzZSB7IG15X3ByaW50KCJIYW5kbGluZyBkZWFkIHJlc291cmNlOiB7JHJlc291cmNlfSwgZm9yIGNoYW5uZWw6IHskY2lkfSIpOyBjaGFubmVsX2Nsb3NlX2hhbmRsZXMoJGNpZCk7ICRwa3QgPSBwYWNrKCJOIiwgUEFDS0VUX1RZUEVfUkVRVUVTVCk7IHBhY2tldF9hZGRfdGx2KCRwa3QsIGNyZWF0ZV90bHYoVExWX1RZUEVfQ09NTUFORF9JRCwgQ09NTUFORF9JRF9DT1JFX0NIQU5ORUxfQ0xPU0UpKTsgcGFja2V0X2FkZF90bHYoJHBrdCwgY3JlYXRlX3RsdihUTFZfVFlQRV9SRVFVRVNUX0lELCBnZW5lcmF0ZV9yZXFfaWQoKSkpOyBwYWNrZXRfYWRkX3RsdigkcGt0LCBjcmVhdGVfdGx2KFRMVl9UWVBFX0NIQU5ORUxfSUQsICRjaWQpKTsgcGFja2V0X2FkZF90bHYoJHBrdCwgY3JlYXRlX3RsdihUTFZfVFlQRV9VVUlELCAkR0xPQkFMU1snVVVJRCddKSk7ICRwa3QgPSBwYWNrKCJOIiwgc3RybGVuKCRwa3QpICsgNCkgLiAkcGt0OyB3cml0ZV90bHZfdG9fc29ja2V0KCRtc2dzb2NrLCAkcGt0KTsgfSB9IGZ1bmN0aW9uIGhhbmRsZV9yZXNvdXJjZV9yZWFkX2NoYW5uZWwoJHJlc291cmNlLCAkZGF0YSkgeyBnbG9iYWwgJHVkcF9ob3N0X21hcDsgJGNpZCA9IGdldF9jaGFubmVsX2lkX2Zyb21fcmVzb3VyY2UoJHJlc291cmNlKTsgbXlfcHJpbnQoIkhhbmRsaW5nIGRhdGEgZnJvbSAkcmVzb3VyY2UiKTsgJHBrdCA9IHBhY2soIk4iLCBQQUNLRVRfVFlQRV9SRVFVRVNUKTsgcGFja2V0X2FkZF90bHYoJHBrdCwgY3JlYXRlX3RsdihUTFZfVFlQRV9DT01NQU5EX0lELCBDT01NQU5EX0lEX0NPUkVfQ0hBTk5FTF9XUklURSkpOyBpZiAoYXJyYXlfa2V5X2V4aXN0cygoaW50KSRyZXNvdXJjZSwgJHVkcF9ob3N0X21hcCkpIHsgbGlzdCgkaCwkcCkgPSAkdWRwX2hvc3RfbWFwWyhpbnQpJHJlc291cmNlXTsgcGFja2V0X2FkZF90bHYoJHBrdCwgY3JlYXRlX3RsdihUTFZfVFlQRV9QRUVSX0hPU1QsICRoKSk7IHBhY2tldF9hZGRfdGx2KCRwa3QsIGNyZWF0ZV90bHYoVExWX1RZUEVfUEVFUl9QT1JULCAkcCkpOyB9IHBhY2tldF9hZGRfdGx2KCRwa3QsIGNyZWF0ZV90bHYoVExWX1RZUEVfQ0hBTk5FTF9JRCwgJGNpZCkpOyBwYWNrZXRfYWRkX3RsdigkcGt0LCBjcmVhdGVfdGx2KFRMVl9UWVBFX0NIQU5ORUxfREFUQSwgJGRhdGEpKTsgcGFja2V0X2FkZF90bHYoJHBrdCwgY3JlYXRlX3RsdihUTFZfVFlQRV9MRU5HVEgsIHN0cmxlbigkZGF0YSkpKTsgcGFja2V0X2FkZF90bHYoJHBrdCwgY3JlYXRlX3RsdihUTFZfVFlQRV9SRVFVRVNUX0lELCBnZW5lcmF0ZV9yZXFfaWQoKSkpOyBwYWNrZXRfYWRkX3RsdigkcGt0LCBjcmVhdGVfdGx2KFRMVl9UWVBFX1VVSUQsICRHTE9CQUxTWydVVUlEJ10pKTsgJHBrdCA9IHBhY2soIk4iLCBzdHJsZW4oJHBrdCkgKyA0KSAuICRwa3Q7IHJldHVybiAkcGt0OyB9IGZ1bmN0aW9uIGNyZWF0ZV9yZXNwb25zZSgkcmVxKSB7IGdsb2JhbCAkaWQyZjsgJHBrdCA9IHBhY2soIk4iLCBQQUNLRVRfVFlQRV9SRVNQT05TRSk7ICRjb21tYW5kX2lkX3RsdiA9IHBhY2tldF9nZXRfdGx2KCRyZXEsIFRMVl9UWVBFX0NPTU1BTkRfSUQpOyBteV9wcmludCgiY29tbWFuZCBpZCBpcyB7JGNvbW1hbmRfaWRfdGx2Wyd2YWx1ZSddfSIpOyBwYWNrZXRfYWRkX3RsdigkcGt0LCAkY29tbWFuZF9pZF90bHYpOyAkcmVxaWRfdGx2ID0gcGFja2V0X2dldF90bHYoJHJlcSwgVExWX1RZUEVfUkVRVUVTVF9JRCk7IHBhY2tldF9hZGRfdGx2KCRwa3QsICRyZXFpZF90bHYpOyAkY29tbWFuZF9oYW5kbGVyID0gJGlkMmZbJGNvbW1hbmRfaWRfdGx2Wyd2YWx1ZSddXTsgaWYgKGlzX2NhbGxhYmxlKCRjb21tYW5kX2hhbmRsZXIpKSB7ICRyZXN1bHQgPSAkY29tbWFuZF9oYW5kbGVyKCRyZXEsICRwa3QpOyB9IGVsc2UgeyBteV9wcmludCgiR290IGEgcmVxdWVzdCBmb3Igc29tZXRoaW5nIEkgZG9uJ3Qga25vdyBob3cgdG8gaGFuZGxlICgiIC4gJGNvbW1hbmRfaWRfdGx2Wyd2YWx1ZSddIC4gIiAvICIuICRjb21tYW5kX2hhbmRsZXIgLiIpLCByZXR1cm5pbmcgZmFpbHVyZSIpOyAkcmVzdWx0ID0gRVJST1JfRkFJTFVSRTsgfSBwYWNrZXRfYWRkX3RsdigkcGt0LCBjcmVhdGVfdGx2KFRMVl9UWVBFX1JFU1VMVCwgJHJlc3VsdCkpOyBwYWNrZXRfYWRkX3RsdigkcGt0LCBjcmVhdGVfdGx2KFRMVl9UWVBFX1VVSUQsICRHTE9CQUxTWydVVUlEJ10pKTsgJHBrdCA9IHBhY2soIk4iLCBzdHJsZW4oJHBrdCkgKyA0KSAuICRwa3Q7IHJldHVybiAkcGt0OyB9IGZ1bmN0aW9uIGNyZWF0ZV90bHYoJHR5cGUsICR2YWwpIHsgcmV0dXJuIGFycmF5KCAndHlwZScgPT4gJHR5cGUsICd2YWx1ZScgPT4gJHZhbCApOyB9IGZ1bmN0aW9uIHRsdl9wYWNrKCR0bHYpIHsgJHJldCA9ICIiOyBpZiAoKCR0bHZbJ3R5cGUnXSAmIFRMVl9NRVRBX1RZUEVfU1RSSU5HKSA9PSBUTFZfTUVUQV9UWVBFX1NUUklORykgeyAkcmV0ID0gcGFjaygiTk5hKiIsIDggKyBzdHJsZW4oJHRsdlsndmFsdWUnXSkrMSwgJHRsdlsndHlwZSddLCAkdGx2Wyd2YWx1ZSddIC4gIlwwIik7IH0gZWxzZWlmICgoJHRsdlsndHlwZSddICYgVExWX01FVEFfVFlQRV9RV09SRCkgPT0gVExWX01FVEFfVFlQRV9RV09SRCkgeyAkaGkgPSAoJHRsdlsndmFsdWUnXSA+PiAzMikgJiAweEZGRkZGRkZGOyAkbG8gPSAkdGx2Wyd2YWx1ZSddICYgMHhGRkZGRkZGRjsgJHJldCA9IHBhY2soIk5OTk4iLCA4ICsgOCwgJHRsdlsndHlwZSddLCAkaGksICRsbyk7IH0gZWxzZWlmICgoJHRsdlsndHlwZSddICYgVExWX01FVEFfVFlQRV9VSU5UKSA9PSBUTFZfTUVUQV9UWVBFX1VJTlQpIHsgJHJldCA9IHBhY2soIk5OTiIsIDggKyA0LCAkdGx2Wyd0eXBlJ10sICR0bHZbJ3ZhbHVlJ10pOyB9IGVsc2VpZiAoKCR0bHZbJ3R5cGUnXSAmIFRMVl9NRVRBX1RZUEVfQk9PTCkgPT0gVExWX01FVEFfVFlQRV9CT09MKSB7ICRyZXQgPSBwYWNrKCJOTiIsIDggKyAxLCAkdGx2Wyd0eXBlJ10pOyAkcmV0IC49ICR0bHZbJ3ZhbHVlJ10gPyAiXHgwMSIgOiAiXHgwMCI7IH0gZWxzZWlmICgoJHRsdlsndHlwZSddICYgVExWX01FVEFfVFlQRV9SQVcpID09IFRMVl9NRVRBX1RZUEVfUkFXKSB7ICRyZXQgPSBwYWNrKCJOTiIsIDggKyBzdHJsZW4oJHRsdlsndmFsdWUnXSksICR0bHZbJ3R5cGUnXSkgLiAkdGx2Wyd2YWx1ZSddOyB9IGVsc2VpZiAoKCR0bHZbJ3R5cGUnXSAmIFRMVl9NRVRBX1RZUEVfR1JPVVApID09IFRMVl9NRVRBX1RZUEVfR1JPVVApIHsgJHJldCA9IHBhY2soIk5OIiwgOCArIHN0cmxlbigkdGx2Wyd2YWx1ZSddKSwgJHRsdlsndHlwZSddKSAuICR0bHZbJ3ZhbHVlJ107IH0gZWxzZWlmICgoJHRsdlsndHlwZSddICYgVExWX01FVEFfVFlQRV9DT01QTEVYKSA9PSBUTFZfTUVUQV9UWVBFX0NPTVBMRVgpIHsgJHJldCA9IHBhY2soIk5OIiwgOCArIHN0cmxlbigkdGx2Wyd2YWx1ZSddKSwgJHRsdlsndHlwZSddKSAuICR0bHZbJ3ZhbHVlJ107IH0gZWxzZSB7IG15X3ByaW50KCJEb24ndCBrbm93IGhvdyB0byBtYWtlIGEgdGx2IG9mIHR5cGUgIi4gJHRsdlsndHlwZSddIC4gIiAobWV0YSB0eXBlICIuIHNwcmludGYoIiUwOHgiLCAkdGx2Wyd0eXBlJ10gJiBUTFZfTUVUQV9UWVBFX01BU0spIC4iKSwgd3RmIik7IH0gcmV0dXJuICRyZXQ7IH0gZnVuY3Rpb24gdGx2X3VucGFjaygkcmF3X3RsdikgeyAkdGx2ID0gdW5wYWNrKCJObGVuL050eXBlIiwgc3Vic3RyKCRyYXdfdGx2LCAwLCA4KSk7ICR0eXBlID0gJHRsdlsndHlwZSddOyBteV9wcmludCgibGVuOiB7JHRsdlsnbGVuJ119LCB0eXBlOiB7JHRsdlsndHlwZSddfSIpOyBpZiAoKCR0eXBlICYgVExWX01FVEFfVFlQRV9TVFJJTkcpID09IFRMVl9NRVRBX1RZUEVfU1RSSU5HKSB7ICR0bHYgPSB1bnBhY2soIk5sZW4vTnR5cGUvYSp2YWx1ZSIsIHN1YnN0cigkcmF3X3RsdiwgMCwgJHRsdlsnbGVuJ10pKTsgJHRsdlsndmFsdWUnXSA9IHN0cl9yZXBsYWNlKCJcMCIsICIiLCAkdGx2Wyd2YWx1ZSddKTsgfSBlbHNlaWYgKCgkdHlwZSAmIFRMVl9NRVRBX1RZUEVfVUlOVCkgPT0gVExWX01FVEFfVFlQRV9VSU5UKSB7ICR0bHYgPSB1bnBhY2soIk5sZW4vTnR5cGUvTnZhbHVlIiwgc3Vic3RyKCRyYXdfdGx2LCAwLCAkdGx2WydsZW4nXSkpOyB9IGVsc2VpZiAoKCR0eXBlICYgVExWX01FVEFfVFlQRV9RV09SRCkgPT0gVExWX01FVEFfVFlQRV9RV09SRCkgeyAkdGx2ID0gdW5wYWNrKCJObGVuL050eXBlL05oaS9ObG8iLCBzdWJzdHIoJHJhd190bHYsIDAsICR0bHZbJ2xlbiddKSk7ICR0bHZbJ3ZhbHVlJ10gPSAkdGx2WydoaSddIDw8IDMyIHwgJHRsdlsnbG8nXTsgfSBlbHNlaWYgKCgkdHlwZSAmIFRMVl9NRVRBX1RZUEVfQk9PTCkgPT0gVExWX01FVEFfVFlQRV9CT09MKSB7ICR0bHYgPSB1bnBhY2soIk5sZW4vTnR5cGUvY3ZhbHVlIiwgc3Vic3RyKCRyYXdfdGx2LCAwLCAkdGx2WydsZW4nXSkpOyB9IGVsc2VpZiAoKCR0eXBlICYgVExWX01FVEFfVFlQRV9SQVcpID09IFRMVl9NRVRBX1RZUEVfUkFXKSB7ICR0bHYgPSB1bnBhY2soIk5sZW4vTnR5cGUiLCAkcmF3X3Rsdik7ICR0bHZbJ3ZhbHVlJ10gPSBzdWJzdHIoJHJhd190bHYsIDgsICR0bHZbJ2xlbiddLTgpOyB9IGVsc2UgeyBteV9wcmludCgiV3RmIHR5cGUgaXMgdGhpcz8gJHR5cGUiKTsgJHRsdiA9IG51bGw7IH0gcmV0dXJuICR0bHY7IH0gZnVuY3Rpb24gcGFja2V0X2FkZF90bHYoJiRwa3QsICR0bHYpIHsgJHBrdCAuPSB0bHZfcGFjaygkdGx2KTsgfSBmdW5jdGlvbiBwYWNrZXRfZ2V0X3RsdigkcGt0LCAkdHlwZSkgeyAkb2Zmc2V0ID0gODsgd2hpbGUgKCRvZmZzZXQgPCBzdHJsZW4oJHBrdCkpIHsgJHRsdiA9IHRsdl91bnBhY2soc3Vic3RyKCRwa3QsICRvZmZzZXQpKTsgaWYgKCR0eXBlID09ICgkdGx2Wyd0eXBlJ10gJiB+VExWX01FVEFfVFlQRV9DT01QUkVTU0VEKSkgeyByZXR1cm4gJHRsdjsgfSAkb2Zmc2V0ICs9ICR0bHZbJ2xlbiddOyB9IHJldHVybiBudWxsOyB9IGZ1bmN0aW9uIHBhY2tldF9nZXRfYWxsX3RsdnMoJHBrdCwgJHR5cGUpIHsgbXlfcHJpbnQoIkxvb2tpbmcgZm9yIGFsbCB0bHZzIG9mIHR5cGUgJHR5cGUiKTsgJG9mZnNldCA9IDg7ICRhbGwgPSBhcnJheSgpOyB3aGlsZSAoJG9mZnNldCA8IHN0cmxlbigkcGt0KSkgeyAkdGx2ID0gdGx2X3VucGFjayhzdWJzdHIoJHBrdCwgJG9mZnNldCkpOyBpZiAoJHRsdiA9PSBOVUxMKSB7IGJyZWFrOyB9IG15X3ByaW50KCJsZW46IHskdGx2WydsZW4nXX0sIHR5cGU6IHskdGx2Wyd0eXBlJ119Iik7IGlmIChlbXB0eSgkdHlwZSkgfHwgJHR5cGUgPT0gKCR0bHZbJ3R5cGUnXSAmIH5UTFZfTUVUQV9UWVBFX0NPTVBSRVNTRUQpKSB7IG15X3ByaW50KCJGb3VuZCBvbmUgYXQgb2Zmc2V0ICRvZmZzZXQiKTsgYXJyYXlfcHVzaCgkYWxsLCAkdGx2KTsgfSAkb2Zmc2V0ICs9ICR0bHZbJ2xlbiddOyB9IHJldHVybiAkYWxsOyB9IGZ1bmN0aW9uIHJlZ2lzdGVyX3NvY2tldCgkc29jaywgJGlwYWRkcj1udWxsLCAkcG9ydD1udWxsKSB7IGdsb2JhbCAkcmVzb3VyY2VfdHlwZV9tYXAsICR1ZHBfaG9zdF9tYXA7IG15X3ByaW50KCJSZWdpc3RlcmluZyBzb2NrZXQgJHNvY2sgZm9yICgkaXBhZGRyOiRwb3J0KSIpOyAkcmVzb3VyY2VfdHlwZV9tYXBbKGludCkkc29ja10gPSAnc29ja2V0JzsgaWYgKCRpcGFkZHIpIHsgJHVkcF9ob3N0X21hcFsoaW50KSRzb2NrXSA9IGFycmF5KCRpcGFkZHIsICRwb3J0KTsgfSB9IGZ1bmN0aW9uIHJlZ2lzdGVyX3N0cmVhbSgkc3RyZWFtLCAkaXBhZGRyPW51bGwsICRwb3J0PW51bGwpIHsgZ2xvYmFsICRyZXNvdXJjZV90eXBlX21hcCwgJHVkcF9ob3N0X21hcDsgbXlfcHJpbnQoIlJlZ2lzdGVyaW5nIHN0cmVhbSAkc3RyZWFtIGZvciAoJGlwYWRkcjokcG9ydCkiKTsgJHJlc291cmNlX3R5cGVfbWFwWyhpbnQpJHN0cmVhbV0gPSAnc3RyZWFtJzsgaWYgKCRpcGFkZHIpIHsgJHVkcF9ob3N0X21hcFsoaW50KSRzdHJlYW1dID0gYXJyYXkoJGlwYWRkciwgJHBvcnQpOyB9IH0gZnVuY3Rpb24gY29ubmVjdCgkaXBhZGRyLCAkcG9ydCwgJHByb3RvPSd0Y3AnKSB7IG15X3ByaW50KCJEb2luZyBjb25uZWN0KCRpcGFkZHIsICRwb3J0KSIpOyAkc29jayA9IGZhbHNlOyAkaXBmID0gV0lOX0FGX0lORVQ7ICRyYXdfaXAgPSAkaXBhZGRyOyBpZiAoRkFMU0UgIT09IHN0cnBvcygkaXBhZGRyLCAiOiIpKSB7ICRpcGYgPSBXSU5fQUZfSU5FVDY7ICRpcGFkZHIgPSAiWyIuICRyYXdfaXAgLiJdIjsgfSBpZiAoaXNfY2FsbGFibGUoJ3N0cmVhbV9zb2NrZXRfY2xpZW50JykpIHsgbXlfcHJpbnQoInN0cmVhbV9zb2NrZXRfY2xpZW50KHskcHJvdG99Oi8veyRpcGFkZHJ9OnskcG9ydH0pIik7IGlmICgkcHJvdG8gPT0gJ3NzbCcpIHsgJHNvY2sgPSBzdHJlYW1fc29ja2V0X2NsaWVudCgic3NsOi8veyRpcGFkZHJ9OnskcG9ydH0iLCAkZXJybm8sICRlcnJzdHIsIDUsIFNUUkVBTV9DTElFTlRfQVNZTkNfQ09OTkVDVCk7IGlmICghJHNvY2spIHsgcmV0dXJuIGZhbHNlOyB9IHN0cmVhbV9zZXRfYmxvY2tpbmcoJHNvY2ssIDApOyByZWdpc3Rlcl9zdHJlYW0oJHNvY2spOyB9IGVsc2VpZiAoJHByb3RvID09ICd0Y3AnKSB7ICRzb2NrID0gc3RyZWFtX3NvY2tldF9jbGllbnQoInRjcDovL3skaXBhZGRyfTp7JHBvcnR9Iik7IGlmICghJHNvY2spIHsgcmV0dXJuIGZhbHNlOyB9IHJlZ2lzdGVyX3N0cmVhbSgkc29jayk7IH0gZWxzZWlmICgkcHJvdG8gPT0gJ3VkcCcpIHsgJHNvY2sgPSBzdHJlYW1fc29ja2V0X2NsaWVudCgidWRwOi8veyRpcGFkZHJ9OnskcG9ydH0iKTsgaWYgKCEkc29jaykgeyByZXR1cm4gZmFsc2U7IH0gcmVnaXN0ZXJfc3RyZWFtKCRzb2NrLCAkaXBhZGRyLCAkcG9ydCk7IH0gfSBlbHNlIGlmIChpc19jYWxsYWJsZSgnZnNvY2tvcGVuJykpIHsgbXlfcHJpbnQoImZzb2Nrb3BlbiIpOyBpZiAoJHByb3RvID09ICdzc2wnKSB7ICRzb2NrID0gZnNvY2tvcGVuKCJzc2w6Ly97JGlwYWRkcn06eyRwb3J0fSIpOyBzdHJlYW1fc2V0X2Jsb2NraW5nKCRzb2NrLCAwKTsgcmVnaXN0ZXJfc3RyZWFtKCRzb2NrKTsgfSBlbHNlaWYgKCRwcm90byA9PSAndGNwJykgeyAkc29jayA9IGZzb2Nrb3BlbigkaXBhZGRyLCAkcG9ydCk7IGlmICghJHNvY2spIHsgcmV0dXJuIGZhbHNlOyB9IGlmIChpc19jYWxsYWJsZSgnc29ja2V0X3NldF90aW1lb3V0JykpIHsgc29ja2V0X3NldF90aW1lb3V0KCRzb2NrLCAyKTsgfSByZWdpc3Rlcl9zdHJlYW0oJHNvY2spOyB9IGVsc2UgeyAkc29jayA9IGZzb2Nrb3BlbigkcHJvdG8uIjovLyIuJGlwYWRkciwkcG9ydCk7IGlmICghJHNvY2spIHsgcmV0dXJuIGZhbHNlOyB9IHJlZ2lzdGVyX3N0cmVhbSgkc29jaywgJGlwYWRkciwgJHBvcnQpOyB9IH0gZWxzZSBpZiAoaXNfY2FsbGFibGUoJ3NvY2tldF9jcmVhdGUnKSkgeyBteV9wcmludCgic29ja2V0X2NyZWF0ZSIpOyBpZiAoJHByb3RvID09ICd0Y3AnKSB7ICRzb2NrID0gc29ja2V0X2NyZWF0ZSgkaXBmLCBTT0NLX1NUUkVBTSwgU09MX1RDUCk7ICRyZXMgPSBzb2NrZXRfY29ubmVjdCgkc29jaywgJHJhd19pcCwgJHBvcnQpOyBpZiAoISRyZXMpIHsgcmV0dXJuIGZhbHNlOyB9IHJlZ2lzdGVyX3NvY2tldCgkc29jayk7IH0gZWxzZWlmICgkcHJvdG8gPT0gJ3VkcCcpIHsgJHNvY2sgPSBzb2NrZXRfY3JlYXRlKCRpcGYsIFNPQ0tfREdSQU0sIFNPTF9VRFApOyByZWdpc3Rlcl9zb2NrZXQoJHNvY2ssICRyYXdfaXAsICRwb3J0KTsgfSB9IHJldHVybiAkc29jazsgfSBmdW5jdGlvbiBlb2YoJHJlc291cmNlKSB7ICRyZXQgPSBmYWxzZTsgc3dpdGNoIChnZXRfcnR5cGUoJHJlc291cmNlKSkgeyBjYXNlICdzb2NrZXQnOiBicmVhazsgY2FzZSAnc3RyZWFtJzogJHJldCA9IGZlb2YoJHJlc291cmNlKTsgYnJlYWs7IH0gcmV0dXJuICRyZXQ7IH0gZnVuY3Rpb24gY2xvc2UoJHJlc291cmNlKSB7IG15X3ByaW50KCJDbG9zaW5nIHJlc291cmNlICRyZXNvdXJjZSIpOyBnbG9iYWwgJHJlc291cmNlX3R5cGVfbWFwLCAkdWRwX2hvc3RfbWFwOyByZW1vdmVfcmVhZGVyKCRyZXNvdXJjZSk7IHN3aXRjaCAoZ2V0X3J0eXBlKCRyZXNvdXJjZSkpIHsgY2FzZSAnc29ja2V0JzogJHJldCA9IHNvY2tldF9jbG9zZSgkcmVzb3VyY2UpOyBicmVhazsgY2FzZSAnc3RyZWFtJzogJHJldCA9IGZjbG9zZSgkcmVzb3VyY2UpOyBicmVhazsgfSBpZiAoYXJyYXlfa2V5X2V4aXN0cygoaW50KSRyZXNvdXJjZSwgJHJlc291cmNlX3R5cGVfbWFwKSkgeyB1bnNldCgkcmVzb3VyY2VfdHlwZV9tYXBbKGludCkkcmVzb3VyY2VdKTsgfSBpZiAoYXJyYXlfa2V5X2V4aXN0cygoaW50KSRyZXNvdXJjZSwgJHVkcF9ob3N0X21hcCkpIHsgbXlfcHJpbnQoIlJlbW92aW5nICRyZXNvdXJjZSBmcm9tIHVkcF9ob3N0X21hcCIpOyB1bnNldCgkdWRwX2hvc3RfbWFwWyhpbnQpJHJlc291cmNlXSk7IH0gcmV0dXJuICRyZXQ7IH0gZnVuY3Rpb24gcmVhZCgkcmVzb3VyY2UsICRsZW49bnVsbCkgeyBnbG9iYWwgJHVkcF9ob3N0X21hcDsgaWYgKGlzX251bGwoJGxlbikpIHsgJGxlbiA9IDgxOTI7IH0gJGJ1ZmYgPSAnJzsgc3dpdGNoIChnZXRfcnR5cGUoJHJlc291cmNlKSkgeyBjYXNlICdzb2NrZXQnOiBpZiAoYXJyYXlfa2V5X2V4aXN0cygoaW50KSRyZXNvdXJjZSwgJHVkcF9ob3N0X21hcCkpIHsgbXlfcHJpbnQoIlJlYWRpbmcgVURQIHNvY2tldCIpOyBsaXN0KCRob3N0LCRwb3J0KSA9ICR1ZHBfaG9zdF9tYXBbKGludCkkcmVzb3VyY2VdOyBzb2NrZXRfcmVjdmZyb20oJHJlc291cmNlLCAkYnVmZiwgJGxlbiwgUEhQX0JJTkFSWV9SRUFELCAkaG9zdCwgJHBvcnQpOyB9IGVsc2UgeyBteV9wcmludCgiUmVhZGluZyBUQ1Agc29ja2V0Iik7ICRidWZmIC49IHNvY2tldF9yZWFkKCRyZXNvdXJjZSwgJGxlbiwgUEhQX0JJTkFSWV9SRUFEKTsgfSBicmVhazsgY2FzZSAnc3RyZWFtJzogZ2xvYmFsICRtc2dzb2NrOyAkciA9IEFycmF5KCRyZXNvdXJjZSk7IG15X3ByaW50KCJDYWxsaW5nIHNlbGVjdCB0byBzZWUgaWYgdGhlcmUncyBkYXRhIG9uICRyZXNvdXJjZSIpOyAkbGFzdF9yZXF1ZXN0ZWRfbGVuID0gMDsgd2hpbGUgKHRydWUpIHsgJHc9TlVMTDskZT1OVUxMOyR0PTA7ICRjbnQgPSBzdHJlYW1fc2VsZWN0KCRyLCAkdywgJGUsICR0KTsgaWYgKCRjbnQgPT09IDApIHsgYnJlYWs7IH0gaWYgKCRjbnQgPT09IGZhbHNlIG9yIGZlb2YoJHJlc291cmNlKSkgeyBteV9wcmludCgiQ2hlY2tpbmcgZm9yIGZhaWxlZCByZWFkLi4uIik7IGlmIChlbXB0eSgkYnVmZikpIHsgbXlfcHJpbnQoIi0tLS0gRU9GIE9OICRyZXNvdXJjZSAtLS0tIik7ICRidWZmID0gZmFsc2U7IH0gYnJlYWs7IH0gJG1kID0gc3RyZWFtX2dldF9tZXRhX2RhdGEoJHJlc291cmNlKTsgZHVtcF9hcnJheSgkbWQsICJNZXRhZGF0YSBmb3IgeyRyZXNvdXJjZX0iKTsgaWYgKCRtZFsndW5yZWFkX2J5dGVzJ10gPiAwKSB7ICRsYXN0X3JlcXVlc3RlZF9sZW4gPSBtaW4oJGxlbiwgJG1kWyd1bnJlYWRfYnl0ZXMnXSk7ICRidWZmIC49IGZyZWFkKCRyZXNvdXJjZSwgJGxhc3RfcmVxdWVzdGVkX2xlbik7IGJyZWFrOyB9IGVsc2UgeyAkdG1wID0gZnJlYWQoJHJlc291cmNlLCAkbGVuKTsgJGxhc3RfcmVxdWVzdGVkX2xlbiA9ICRsZW47ICRidWZmIC49ICR0bXA7IGlmIChzdHJsZW4oJHRtcCkgPCAkbGVuKSB7IGJyZWFrOyB9IH0gaWYgKCRyZXNvdXJjZSAhPSAkbXNnc29jaykgeyBteV9wcmludCgiYnVmZjogJyRidWZmJyIpOyB9ICRyID0gQXJyYXkoJHJlc291cmNlKTsgfSBteV9wcmludChzcHJpbnRmKCJEb25lIHdpdGggdGhlIGJpZyByZWFkIGxvb3Agb24gJHJlc291cmNlLCBnb3QgJWQgYnl0ZXMsIGFza2VkIGZvciAlZCBieXRlcyIsIHN0cmxlbigkYnVmZiksICRsYXN0X3JlcXVlc3RlZF9sZW4pKTsgYnJlYWs7IGRlZmF1bHQ6ICRjaWQgPSBnZXRfY2hhbm5lbF9pZF9mcm9tX3Jlc291cmNlKCRyZXNvdXJjZSk7ICRjID0gZ2V0X2NoYW5uZWxfYnlfaWQoJGNpZCk7IGlmICgkYyBhbmQgJGNbJ2RhdGEnXSkgeyAkYnVmZiA9IHN1YnN0cigkY1snZGF0YSddLCAwLCAkbGVuKTsgJGNbJ2RhdGEnXSA9IHN1YnN0cigkY1snZGF0YSddLCAkbGVuKTsgbXlfcHJpbnQoIkFoYSEgZ290IHNvbWUgbGVmdG92ZXJzIik7IH0gZWxzZSB7IG15X3ByaW50KCJXdGYgZG9uJ3Qga25vdyBob3cgdG8gcmVhZCBmcm9tIHJlc291cmNlICRyZXNvdXJjZSwgYzogJGMiKTsgaWYgKGlzX2FycmF5KCRjKSkgeyBkdW1wX2FycmF5KCRjKTsgfSBicmVhazsgfSB9IG15X3ByaW50KHNwcmludGYoIlJlYWQgJWQgYnl0ZXMiLCBzdHJsZW4oJGJ1ZmYpKSk7IHJldHVybiAkYnVmZjsgfSBmdW5jdGlvbiB3cml0ZSgkcmVzb3VyY2UsICRidWZmLCAkbGVuPTApIHsgZ2xvYmFsICR1ZHBfaG9zdF9tYXA7IGlmICgkbGVuID09IDApIHsgJGxlbiA9IHN0cmxlbigkYnVmZik7IH0gJGNvdW50ID0gZmFsc2U7IHN3aXRjaCAoZ2V0X3J0eXBlKCRyZXNvdXJjZSkpIHsgY2FzZSAnc29ja2V0JzogaWYgKGFycmF5X2tleV9leGlzdHMoKGludCkkcmVzb3VyY2UsICR1ZHBfaG9zdF9tYXApKSB7IG15X3ByaW50KCJXcml0aW5nIFVEUCBzb2NrZXQiKTsgbGlzdCgkaG9zdCwkcG9ydCkgPSAkdWRwX2hvc3RfbWFwWyhpbnQpJHJlc291cmNlXTsgJGNvdW50ID0gc29ja2V0X3NlbmR0bygkcmVzb3VyY2UsICRidWZmLCAkbGVuLCAkaG9zdCwgJHBvcnQpOyB9IGVsc2UgeyAkY291bnQgPSBzb2NrZXRfd3JpdGUoJHJlc291cmNlLCAkYnVmZiwgJGxlbik7IH0gYnJlYWs7IGNhc2UgJ3N0cmVhbSc6ICRjb3VudCA9IGZ3cml0ZSgkcmVzb3VyY2UsICRidWZmLCAkbGVuKTsgZmZsdXNoKCRyZXNvdXJjZSk7IGJyZWFrOyBkZWZhdWx0OiBteV9wcmludCgiV3RmIGRvbid0IGtub3cgaG93IHRvIHdyaXRlIHRvIHJlc291cmNlICRyZXNvdXJjZSIpOyBicmVhazsgfSByZXR1cm4gJGNvdW50OyB9IGZ1bmN0aW9uIGdldF9ydHlwZSgkcmVzb3VyY2UpIHsgZ2xvYmFsICRyZXNvdXJjZV90eXBlX21hcDsgaWYgKGFycmF5X2tleV9leGlzdHMoKGludCkkcmVzb3VyY2UsICRyZXNvdXJjZV90eXBlX21hcCkpIHsgcmV0dXJuICRyZXNvdXJjZV90eXBlX21hcFsoaW50KSRyZXNvdXJjZV07IH0gcmV0dXJuIGZhbHNlOyB9IGZ1bmN0aW9uIHNlbGVjdCgmJHIsICYkdywgJiRlLCAkdHZfc2VjPTAsICR0dl91c2VjPTApIHsgJHN0cmVhbXNfciA9IGFycmF5KCk7ICRzdHJlYW1zX3cgPSBhcnJheSgpOyAkc3RyZWFtc19lID0gYXJyYXkoKTsgJHNvY2tldHNfciA9IGFycmF5KCk7ICRzb2NrZXRzX3cgPSBhcnJheSgpOyAkc29ja2V0c19lID0gYXJyYXkoKTsgaWYgKCRyKSB7IGZvcmVhY2ggKCRyIGFzICRyZXNvdXJjZSkgeyBzd2l0Y2ggKGdldF9ydHlwZSgkcmVzb3VyY2UpKSB7IGNhc2UgJ3NvY2tldCc6ICRzb2NrZXRzX3JbXSA9ICRyZXNvdXJjZTsgYnJlYWs7IGNhc2UgJ3N0cmVhbSc6ICRzdHJlYW1zX3JbXSA9ICRyZXNvdXJjZTsgYnJlYWs7IGRlZmF1bHQ6IG15X3ByaW50KCJVbmtub3duIHJlc291cmNlIHR5cGUiKTsgYnJlYWs7IH0gfSB9IGlmICgkdykgeyBmb3JlYWNoICgkdyBhcyAkcmVzb3VyY2UpIHsgc3dpdGNoIChnZXRfcnR5cGUoJHJlc291cmNlKSkgeyBjYXNlICdzb2NrZXQnOiAkc29ja2V0c193W10gPSAkcmVzb3VyY2U7IGJyZWFrOyBjYXNlICdzdHJlYW0nOiAkc3RyZWFtc193W10gPSAkcmVzb3VyY2U7IGJyZWFrOyBkZWZhdWx0OiBteV9wcmludCgiVW5rbm93biByZXNvdXJjZSB0eXBlIik7IGJyZWFrOyB9IH0gfSBpZiAoJGUpIHsgZm9yZWFjaCAoJGUgYXMgJHJlc291cmNlKSB7IHN3aXRjaCAoZ2V0X3J0eXBlKCRyZXNvdXJjZSkpIHsgY2FzZSAnc29ja2V0JzogJHNvY2tldHNfZVtdID0gJHJlc291cmNlOyBicmVhazsgY2FzZSAnc3RyZWFtJzogJHN0cmVhbXNfZVtdID0gJHJlc291cmNlOyBicmVhazsgZGVmYXVsdDogbXlfcHJpbnQoIlVua25vd24gcmVzb3VyY2UgdHlwZSIpOyBicmVhazsgfSB9IH0gJG5fc29ja2V0cyA9IGNvdW50KCRzb2NrZXRzX3IpICsgY291bnQoJHNvY2tldHNfdykgKyBjb3VudCgkc29ja2V0c19lKTsgJG5fc3RyZWFtcyA9IGNvdW50KCRzdHJlYW1zX3IpICsgY291bnQoJHN0cmVhbXNfdykgKyBjb3VudCgkc3RyZWFtc19lKTsgJHIgPSBhcnJheSgpOyAkdyA9IGFycmF5KCk7ICRlID0gYXJyYXkoKTsgaWYgKGNvdW50KCRzb2NrZXRzX3IpPT0wKSB7ICRzb2NrZXRzX3IgPSBudWxsOyB9IGlmIChjb3VudCgkc29ja2V0c193KT09MCkgeyAkc29ja2V0c193ID0gbnVsbDsgfSBpZiAoY291bnQoJHNvY2tldHNfZSk9PTApIHsgJHNvY2tldHNfZSA9IG51bGw7IH0gaWYgKGNvdW50KCRzdHJlYW1zX3IpPT0wKSB7ICRzdHJlYW1zX3IgPSBudWxsOyB9IGlmIChjb3VudCgkc3RyZWFtc193KT09MCkgeyAkc3RyZWFtc193ID0gbnVsbDsgfSBpZiAoY291bnQoJHN0cmVhbXNfZSk9PTApIHsgJHN0cmVhbXNfZSA9IG51bGw7IH0gJGNvdW50ID0gMDsgaWYgKCRuX3NvY2tldHMgPiAwKSB7ICRyZXMgPSBzb2NrZXRfc2VsZWN0KCRzb2NrZXRzX3IsICRzb2NrZXRzX3csICRzb2NrZXRzX2UsICR0dl9zZWMsICR0dl91c2VjKTsgaWYgKGZhbHNlID09PSAkcmVzKSB7IHJldHVybiBmYWxzZTsgfSBpZiAoaXNfYXJyYXkoJHIpICYmIGlzX2FycmF5KCRzb2NrZXRzX3IpKSB7ICRyID0gYXJyYXlfbWVyZ2UoJHIsICRzb2NrZXRzX3IpOyB9IGlmIChpc19hcnJheSgkdykgJiYgaXNfYXJyYXkoJHNvY2tldHNfdykpIHsgJHcgPSBhcnJheV9tZXJnZSgkdywgJHNvY2tldHNfdyk7IH0gaWYgKGlzX2FycmF5KCRlKSAmJiBpc19hcnJheSgkc29ja2V0c19lKSkgeyAkZSA9IGFycmF5X21lcmdlKCRlLCAkc29ja2V0c19lKTsgfSAkY291bnQgKz0gJHJlczsgfSBpZiAoJG5fc3RyZWFtcyA+IDApIHsgJHJlcyA9IHN0cmVhbV9zZWxlY3QoJHN0cmVhbXNfciwgJHN0cmVhbXNfdywgJHN0cmVhbXNfZSwgJHR2X3NlYywgJHR2X3VzZWMpOyBpZiAoZmFsc2UgPT09ICRyZXMpIHsgcmV0dXJuIGZhbHNlOyB9IGlmIChpc19hcnJheSgkcikgJiYgaXNfYXJyYXkoJHN0cmVhbXNfcikpIHsgJHIgPSBhcnJheV9tZXJnZSgkciwgJHN0cmVhbXNfcik7IH0gaWYgKGlzX2FycmF5KCR3KSAmJiBpc19hcnJheSgkc3RyZWFtc193KSkgeyAkdyA9IGFycmF5X21lcmdlKCR3LCAkc3RyZWFtc193KTsgfSBpZiAoaXNfYXJyYXkoJGUpICYmIGlzX2FycmF5KCRzdHJlYW1zX2UpKSB7ICRlID0gYXJyYXlfbWVyZ2UoJGUsICRzdHJlYW1zX2UpOyB9ICRjb3VudCArPSAkcmVzOyB9IHJldHVybiAkY291bnQ7IH0gZnVuY3Rpb24gYWRkX3JlYWRlcigkcmVzb3VyY2UpIHsgZ2xvYmFsICRyZWFkZXJzOyBpZiAoaXNfcmVzb3VyY2UoJHJlc291cmNlKSAmJiAhaW5fYXJyYXkoJHJlc291cmNlLCAkcmVhZGVycykpIHsgJHJlYWRlcnNbXSA9ICRyZXNvdXJjZTsgfSB9IGZ1bmN0aW9uIHJlbW92ZV9yZWFkZXIoJHJlc291cmNlKSB7IGdsb2JhbCAkcmVhZGVyczsgaWYgKGluX2FycmF5KCRyZXNvdXJjZSwgJHJlYWRlcnMpKSB7IGZvcmVhY2ggKCRyZWFkZXJzIGFzICRrZXkgPT4gJHIpIHsgaWYgKCRyID09ICRyZXNvdXJjZSkgeyB1bnNldCgkcmVhZGVyc1ska2V5XSk7IH0gfSB9IH0gb2JfaW1wbGljaXRfZmx1c2goKTsgaWYgKE1ZX0RFQlVHR0lORykgeyBlcnJvcl9yZXBvcnRpbmcoRV9BTEwpOyB9IGVsc2UgeyBlcnJvcl9yZXBvcnRpbmcoMCk7IH0gQGlnbm9yZV91c2VyX2Fib3J0KHRydWUpOyBAc2V0X3RpbWVfbGltaXQoMCk7IEBpZ25vcmVfdXNlcl9hYm9ydCgxKTsgQGluaV9zZXQoJ21heF9leGVjdXRpb25fdGltZScsMCk7ICRHTE9CQUxTWydVVUlEJ10gPSBQQVlMT0FEX1VVSUQ7ICRHTE9CQUxTWydTRVNTSU9OX0dVSUQnXSA9IFNFU1NJT05fR1VJRDsgJEdMT0JBTFNbJ0FFU19LRVknXSA9IG51bGw7ICRHTE9CQUxTWydBRVNfRU5BQkxFRCddID0gZmFsc2U7IGlmICghaXNzZXQoJEdMT0JBTFNbJ21zZ3NvY2snXSkpIHsgJGlwYWRkciA9ICcxMjcuMC4wLjEnOyAkcG9ydCA9IDQ0NDQ7IG15X3ByaW50KCJEb24ndCBoYXZlIGEgbXNnc29jaywgdHJ5aW5nIHRvIGNvbm5lY3QoJGlwYWRkciwgJHBvcnQpIik7ICRtc2dzb2NrID0gY29ubmVjdCgkaXBhZGRyLCAkcG9ydCk7IGlmICghJG1zZ3NvY2spIHsgZGllKCk7IH0gfSBlbHNlIHsgJG1zZ3NvY2sgPSAkR0xPQkFMU1snbXNnc29jayddOyAkbXNnc29ja190eXBlID0gJEdMT0JBTFNbJ21zZ3NvY2tfdHlwZSddOyBzd2l0Y2ggKCRtc2dzb2NrX3R5cGUpIHsgY2FzZSAnc29ja2V0JzogcmVnaXN0ZXJfc29ja2V0KCRtc2dzb2NrKTsgYnJlYWs7IGNhc2UgJ3N0cmVhbSc6IGRlZmF1bHQ6IHJlZ2lzdGVyX3N0cmVhbSgkbXNnc29jayk7IH0gfSBhZGRfcmVhZGVyKCRtc2dzb2NrKTsgJHI9JEdMT0JBTFNbJ3JlYWRlcnMnXTsgJHc9TlVMTDskZT1OVUxMOyR0PTE7IHdoaWxlIChmYWxzZSAhPT0gKCRjbnQgPSBzZWxlY3QoJHIsICR3LCAkZSwgJHQpKSkgeyAkcmVhZF9mYWlsZWQgPSBmYWxzZTsgZm9yICgkaSA9IDA7ICRpIDwgJGNudDsgJGkrKykgeyAkcmVhZHkgPSAkclskaV07IGlmICgkcmVhZHkgPT0gJG1zZ3NvY2spIHsgJHBhY2tldCA9IHJlYWQoJG1zZ3NvY2ssIDMyKTsgbXlfcHJpbnQoc3ByaW50ZigiUmVhZCByZXR1cm5lZCAlcyBieXRlcyIsIHN0cmxlbigkcGFja2V0KSkpOyBpZiAoZmFsc2U9PSRwYWNrZXQpIHsgbXlfcHJpbnQoIlJlYWQgZmFpbGVkIG9uIG1haW4gc29ja2V0LCBiYWlsaW5nIik7IGJyZWFrIDI7IH0gJHhvciA9IHN1YnN0cigkcGFja2V0LCAwLCA0KTsgJGhlYWRlciA9IHhvcl9ieXRlcygkeG9yLCBzdWJzdHIoJHBhY2tldCwgNCwgMjgpKTsgJGxlbl9hcnJheSA9IHVucGFjaygiTmxlbiIsIHN1YnN0cigkaGVhZGVyLCAyMCwgNCkpOyAkbGVuID0gJGxlbl9hcnJheVsnbGVuJ10gKyAzMiAtIDg7IHdoaWxlIChzdHJsZW4oJHBhY2tldCkgPCAkbGVuKSB7ICRwYWNrZXQgLj0gcmVhZCgkbXNnc29jaywgJGxlbi1zdHJsZW4oJHBhY2tldCkpOyB9ICRyZXNwb25zZSA9IGNyZWF0ZV9yZXNwb25zZShkZWNyeXB0X3BhY2tldCh4b3JfYnl0ZXMoJHhvciwgJHBhY2tldCkpKTsgd3JpdGVfdGx2X3RvX3NvY2tldCgkbXNnc29jaywgJHJlc3BvbnNlKTsgfSBlbHNlIHsgJGRhdGEgPSByZWFkKCRyZWFkeSk7IGlmIChmYWxzZSA9PT0gJGRhdGEpIHsgaGFuZGxlX2RlYWRfcmVzb3VyY2VfY2hhbm5lbCgkcmVhZHkpOyB9IGVsc2VpZiAoc3RybGVuKCRkYXRhKSA+IDApeyBteV9wcmludChzcHJpbnRmKCJSZWFkIHJldHVybmVkICVzIGJ5dGVzIiwgc3RybGVuKCRkYXRhKSkpOyAkcmVxdWVzdCA9IGhhbmRsZV9yZXNvdXJjZV9yZWFkX2NoYW5uZWwoJHJlYWR5LCAkZGF0YSk7IGlmICgkcmVxdWVzdCkgeyB3cml0ZV90bHZfdG9fc29ja2V0KCRtc2dzb2NrLCAkcmVxdWVzdCk7IH0gfSB9IH0gJHIgPSAkR0xPQkFMU1sncmVhZGVycyddOyB9IG15X3ByaW50KCJGaW5pc2hlZCIpOyBteV9wcmludCgiLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsgY2xvc2UoJG1zZ3NvY2spO2tpcmExNDA2 \ No newline at end of file +Lyo8P3BocCAvKiovIGlmICghaXNzZXQoJEdMT0JBTFNbJ2NoYW5uZWxzJ10pKSB7ICRHTE9CQUxT +WydjaGFubmVscyddID0gYXJyYXkoKTsgfSBpZiAoIWlzc2V0KCRHTE9CQUxTWydjaGFubmVsX3By +b2Nlc3NfbWFwJ10pKSB7ICRHTE9CQUxTWydjaGFubmVsX3Byb2Nlc3NfbWFwJ10gPSBhcnJheSgp +OyB9IGlmICghaXNzZXQoJEdMT0JBTFNbJ3Jlc291cmNlX3R5cGVfbWFwJ10pKSB7ICRHTE9CQUxT +WydyZXNvdXJjZV90eXBlX21hcCddID0gYXJyYXkoKTsgfSBpZiAoIWlzc2V0KCRHTE9CQUxTWyd1 +ZHBfaG9zdF9tYXAnXSkpIHsgJEdMT0JBTFNbJ3VkcF9ob3N0X21hcCddID0gYXJyYXkoKTsgfSBp +ZiAoIWlzc2V0KCRHTE9CQUxTWydyZWFkZXJzJ10pKSB7ICRHTE9CQUxTWydyZWFkZXJzJ10gPSBh +cnJheSgpOyB9IGlmICghaXNzZXQoJEdMT0JBTFNbJ2lkMmYnXSkpIHsgJEdMT0JBTFNbJ2lkMmYn +XSA9IGFycmF5KCk7IH0gZnVuY3Rpb24gcmVnaXN0ZXJfY29tbWFuZCgkYywgJGkpIHsgZ2xvYmFs +ICRpZDJmOyBpZiAoISBpbl9hcnJheSgkaSwgJGlkMmYpKSB7ICRpZDJmWyRpXSA9ICRjOyB9IH0g +ZGVmaW5lKCJNWV9ERUJVR0dJTkciLCBmYWxzZSk7IGRlZmluZSgiTVlfREVCVUdHSU5HX0xPR19G +SUxFX1BBVEgiLCBmYWxzZSk7IGZ1bmN0aW9uIG15X2xvZ2ZpbGUoJHN0cikgeyBpZiAoTVlfREVC +VUdHSU5HICYmIE1ZX0RFQlVHR0lOR19MT0dfRklMRV9QQVRIKSB7IGlmICghaXNzZXQoJEdMT0JB +TFNbJ2xvZ2ZpbGUnXSkpIHsgJEdMT0JBTFNbJ2xvZ2ZpbGUnXSA9IGZvcGVuKE1ZX0RFQlVHR0lO +R19MT0dfRklMRV9QQVRILCAnYScpOyBpZiAoISRHTE9CQUxTWydsb2dmaWxlJ10pIHsgbXlfcHJp +bnQoIkZhaWxlZCB0byBvcGVuIGRlYnVnIGxvZyBmaWxlIik7IH0gfSBpZiAoJEdMT0JBTFNbJ2xv +Z2ZpbGUnXSkgeyBmd3JpdGUoJEdMT0JBTFNbJ2xvZ2ZpbGUnXSwgIiRzdHJcbiIpOyB9IH0gfSBm +dW5jdGlvbiBteV9wcmludCgkc3RyKSB7IGlmIChNWV9ERUJVR0dJTkcpIHsgZXJyb3JfbG9nKCRz +dHIpOyBteV9sb2dmaWxlKCRzdHIpOyB9IH0gbXlfcHJpbnQoIkV2YWxpbmcgbWFpbiBtZXRlcnBy +ZXRlciBzdGFnZSIpOyBmdW5jdGlvbiBkdW1wX2FycmF5KCRhcnIsICRuYW1lPW51bGwpIHsgaWYg +KGlzX251bGwoJG5hbWUpKSB7ICRuYW1lID0gIkFycmF5IjsgfSBteV9wcmludChzcHJpbnRmKCIk +bmFtZSAoJXMpIiwgY291bnQoJGFycikpKTsgZm9yZWFjaCAoJGFyciBhcyAka2V5ID0+ICR2YWwp +IHsgaWYgKGlzX2FycmF5KCR2YWwpKSB7IGR1bXBfYXJyYXkoJHZhbCwgInskbmFtZX1beyRrZXl9 +XSIpOyB9IGVsc2UgeyBteV9wcmludChzcHJpbnRmKCIgJGtleSAoJHZhbCkiKSk7IH0gfSB9IGZ1 +bmN0aW9uIGR1bXBfcmVhZGVycygpIHsgZ2xvYmFsICRyZWFkZXJzOyBkdW1wX2FycmF5KCRyZWFk +ZXJzLCAnUmVhZGVycycpOyB9IGZ1bmN0aW9uIGR1bXBfcmVzb3VyY2VfbWFwKCkgeyBnbG9iYWwg +JHJlc291cmNlX3R5cGVfbWFwOyBkdW1wX2FycmF5KCRyZXNvdXJjZV90eXBlX21hcCwgJ1Jlc291 +cmNlIG1hcCcpOyB9IGZ1bmN0aW9uIGR1bXBfY2hhbm5lbHMoJGV4dHJhPSIiKSB7IGdsb2JhbCAk +Y2hhbm5lbHM7IGR1bXBfYXJyYXkoJGNoYW5uZWxzLCAnQ2hhbm5lbHMgJy4kZXh0cmEpOyB9IGlm +ICghZnVuY3Rpb25fZXhpc3RzKCJmaWxlX2dldF9jb250ZW50cyIpKSB7IGZ1bmN0aW9uIGZpbGVf +Z2V0X2NvbnRlbnRzKCRmaWxlKSB7ICRmID0gQGZvcGVuKCRmaWxlLCJyYiIpOyAkY29udGVudHMg +PSBmYWxzZTsgaWYgKCRmKSB7IGRvIHsgJGNvbnRlbnRzIC49IGZnZXRzKCRmKTsgfSB3aGlsZSAo +IWZlb2YoJGYpKTsgfSBmY2xvc2UoJGYpOyByZXR1cm4gJGNvbnRlbnRzOyB9IH0gaWYgKCFmdW5j +dGlvbl9leGlzdHMoJ3NvY2tldF9zZXRfb3B0aW9uJykpIHsgZnVuY3Rpb24gc29ja2V0X3NldF9v +cHRpb24oJHNvY2ssICR0eXBlLCAkb3B0LCAkdmFsdWUpIHsgc29ja2V0X3NldG9wdCgkc29jaywg +JHR5cGUsICRvcHQsICR2YWx1ZSk7IH0gfSBkZWZpbmUoIlBBWUxPQURfVVVJRCIsICJceGVmXHhm +OFx4ZDNceGZmXHg4Mlx4NjlceDFkXHg0ZFx4MzVceGRjXHgyNlx4ZDNceDUyXHg0YVx4MzFceGEy +Iik7IGRlZmluZSgiU0VTU0lPTl9HVUlEIiwgIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBc +eDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiKTsgZGVmaW5lKCJBRVNfMjU2X0NC +QyIsICdhZXMtMjU2LWNiYycpOyBkZWZpbmUoIkVOQ19OT05FIiwgMCk7IGRlZmluZSgiRU5DX0FF +UzI1NiIsIDEpOyBkZWZpbmUoIlBBQ0tFVF9UWVBFX1JFUVVFU1QiLCAwKTsgZGVmaW5lKCJQQUNL +RVRfVFlQRV9SRVNQT05TRSIsIDEpOyBkZWZpbmUoIlBBQ0tFVF9UWVBFX1BMQUlOX1JFUVVFU1Qi +LCAxMCk7IGRlZmluZSgiUEFDS0VUX1RZUEVfUExBSU5fUkVTUE9OU0UiLCAxMSk7IGRlZmluZSgi +RVJST1JfU1VDQ0VTUyIsIDApOyBkZWZpbmUoIkVSUk9SX0ZBSUxVUkUiLCAxKTsgZGVmaW5lKCJD +SEFOTkVMX0NMQVNTX0JVRkZFUkVEIiwgMCk7IGRlZmluZSgiQ0hBTk5FTF9DTEFTU19TVFJFQU0i +LCAxKTsgZGVmaW5lKCJDSEFOTkVMX0NMQVNTX0RBVEFHUkFNIiwgMik7IGRlZmluZSgiQ0hBTk5F +TF9DTEFTU19QT09MIiwgMyk7IGRlZmluZSgiV0lOX0FGX0lORVQiLCAyKTsgZGVmaW5lKCJXSU5f +QUZfSU5FVDYiLCAyMyk7IGRlZmluZSgiVExWX01FVEFfVFlQRV9OT05FIiwgKCAwICkpOyBkZWZp +bmUoIlRMVl9NRVRBX1RZUEVfU1RSSU5HIiwgKDEgPDwgMTYpKTsgZGVmaW5lKCJUTFZfTUVUQV9U +WVBFX1VJTlQiLCAoMSA8PCAxNykpOyBkZWZpbmUoIlRMVl9NRVRBX1RZUEVfUkFXIiwgKDEgPDwg +MTgpKTsgZGVmaW5lKCJUTFZfTUVUQV9UWVBFX0JPT0wiLCAoMSA8PCAxOSkpOyBkZWZpbmUoIlRM +Vl9NRVRBX1RZUEVfUVdPUkQiLCAoMSA8PCAyMCkpOyBkZWZpbmUoIlRMVl9NRVRBX1RZUEVfQ09N +UFJFU1NFRCIsICgxIDw8IDI5KSk7IGRlZmluZSgiVExWX01FVEFfVFlQRV9HUk9VUCIsICgxIDw8 +IDMwKSk7IGRlZmluZSgiVExWX01FVEFfVFlQRV9DT01QTEVYIiwgKDEgPDwgMzEpKTsgZGVmaW5l +KCJUTFZfTUVUQV9UWVBFX01BU0siLCAoMTw8MzEpKygxPDwzMCkrKDE8PDI5KSsoMTw8MTkpKygx +PDwxOCkrKDE8PDE3KSsoMTw8MTYpKTsgZGVmaW5lKCJUTFZfUkVTRVJWRUQiLCAwKTsgZGVmaW5l +KCJUTFZfRVhURU5TSU9OUyIsIDIwMDAwKTsgZGVmaW5lKCJUTFZfVVNFUiIsIDQwMDAwKTsgZGVm +aW5lKCJUTFZfVEVNUCIsIDYwMDAwKTsgZGVmaW5lKCJUTFZfVFlQRV9BTlkiLCBUTFZfTUVUQV9U +WVBFX05PTkUgfCAwKTsgZGVmaW5lKCJUTFZfVFlQRV9DT01NQU5EX0lEIiwgVExWX01FVEFfVFlQ +RV9VSU5UIHwgMSk7IGRlZmluZSgiVExWX1RZUEVfUkVRVUVTVF9JRCIsIFRMVl9NRVRBX1RZUEVf +U1RSSU5HIHwgMik7IGRlZmluZSgiVExWX1RZUEVfRVhDRVBUSU9OIiwgVExWX01FVEFfVFlQRV9H +Uk9VUCB8IDMpOyBkZWZpbmUoIlRMVl9UWVBFX1JFU1VMVCIsIFRMVl9NRVRBX1RZUEVfVUlOVCB8 +IDQpOyBkZWZpbmUoIlRMVl9UWVBFX1NUUklORyIsIFRMVl9NRVRBX1RZUEVfU1RSSU5HIHwgMTAp +OyBkZWZpbmUoIlRMVl9UWVBFX1VJTlQiLCBUTFZfTUVUQV9UWVBFX1VJTlQgfCAxMSk7IGRlZmlu +ZSgiVExWX1RZUEVfQk9PTCIsIFRMVl9NRVRBX1RZUEVfQk9PTCB8IDEyKTsgZGVmaW5lKCJUTFZf +VFlQRV9MRU5HVEgiLCBUTFZfTUVUQV9UWVBFX1VJTlQgfCAyNSk7IGRlZmluZSgiVExWX1RZUEVf +REFUQSIsIFRMVl9NRVRBX1RZUEVfUkFXIHwgMjYpOyBkZWZpbmUoIlRMVl9UWVBFX0ZMQUdTIiwg +VExWX01FVEFfVFlQRV9VSU5UIHwgMjcpOyBkZWZpbmUoIlRMVl9UWVBFX0NIQU5ORUxfSUQiLCBU +TFZfTUVUQV9UWVBFX1VJTlQgfCA1MCk7IGRlZmluZSgiVExWX1RZUEVfQ0hBTk5FTF9UWVBFIiwg +VExWX01FVEFfVFlQRV9TVFJJTkcgfCA1MSk7IGRlZmluZSgiVExWX1RZUEVfQ0hBTk5FTF9EQVRB +IiwgVExWX01FVEFfVFlQRV9SQVcgfCA1Mik7IGRlZmluZSgiVExWX1RZUEVfQ0hBTk5FTF9EQVRB +X0dST1VQIiwgVExWX01FVEFfVFlQRV9HUk9VUCB8IDUzKTsgZGVmaW5lKCJUTFZfVFlQRV9DSEFO +TkVMX0NMQVNTIiwgVExWX01FVEFfVFlQRV9VSU5UIHwgNTQpOyBkZWZpbmUoIlRMVl9UWVBFX1NF +RUtfV0hFTkNFIiwgVExWX01FVEFfVFlQRV9VSU5UIHwgNzApOyBkZWZpbmUoIlRMVl9UWVBFX1NF +RUtfT0ZGU0VUIiwgVExWX01FVEFfVFlQRV9VSU5UIHwgNzEpOyBkZWZpbmUoIlRMVl9UWVBFX1NF +RUtfUE9TIiwgVExWX01FVEFfVFlQRV9VSU5UIHwgNzIpOyBkZWZpbmUoIlRMVl9UWVBFX0VYQ0VQ +VElPTl9DT0RFIiwgVExWX01FVEFfVFlQRV9VSU5UIHwgMzAwKTsgZGVmaW5lKCJUTFZfVFlQRV9F +WENFUFRJT05fU1RSSU5HIiwgVExWX01FVEFfVFlQRV9TVFJJTkcgfCAzMDEpOyBkZWZpbmUoIlRM +Vl9UWVBFX0xJQlJBUllfUEFUSCIsIFRMVl9NRVRBX1RZUEVfU1RSSU5HIHwgNDAwKTsgZGVmaW5l +KCJUTFZfVFlQRV9UQVJHRVRfUEFUSCIsIFRMVl9NRVRBX1RZUEVfU1RSSU5HIHwgNDAxKTsgZGVm +aW5lKCJUTFZfVFlQRV9NQUNISU5FX0lEIiwgVExWX01FVEFfVFlQRV9TVFJJTkcgfCA0NjApOyBk +ZWZpbmUoIlRMVl9UWVBFX1VVSUQiLCBUTFZfTUVUQV9UWVBFX1JBVyB8IDQ2MSk7IGRlZmluZSgi +VExWX1RZUEVfU0VTU0lPTl9HVUlEIiwgVExWX01FVEFfVFlQRV9SQVcgfCA0NjIpOyBkZWZpbmUo +IlRMVl9UWVBFX1JTQV9QVUJfS0VZIiwgVExWX01FVEFfVFlQRV9SQVcgfCA1NTApOyBkZWZpbmUo +IlRMVl9UWVBFX1NZTV9LRVlfVFlQRSIsIFRMVl9NRVRBX1RZUEVfVUlOVCB8IDU1MSk7IGRlZmlu +ZSgiVExWX1RZUEVfU1lNX0tFWSIsIFRMVl9NRVRBX1RZUEVfUkFXIHwgNTUyKTsgZGVmaW5lKCJU +TFZfVFlQRV9FTkNfU1lNX0tFWSIsIFRMVl9NRVRBX1RZUEVfUkFXIHwgNTUzKTsgZGVmaW5lKCdF +WFRFTlNJT05fSURfQ09SRScsIDApOyBkZWZpbmUoJ0NPTU1BTkRfSURfQ09SRV9DSEFOTkVMX0NM +T1NFJywgMSk7IGRlZmluZSgnQ09NTUFORF9JRF9DT1JFX0NIQU5ORUxfRU9GJywgMik7IGRlZmlu +ZSgnQ09NTUFORF9JRF9DT1JFX0NIQU5ORUxfSU5URVJBQ1QnLCAzKTsgZGVmaW5lKCdDT01NQU5E +X0lEX0NPUkVfQ0hBTk5FTF9PUEVOJywgNCk7IGRlZmluZSgnQ09NTUFORF9JRF9DT1JFX0NIQU5O +RUxfUkVBRCcsIDUpOyBkZWZpbmUoJ0NPTU1BTkRfSURfQ09SRV9DSEFOTkVMX1NFRUsnLCA2KTsg +ZGVmaW5lKCdDT01NQU5EX0lEX0NPUkVfQ0hBTk5FTF9URUxMJywgNyk7IGRlZmluZSgnQ09NTUFO +RF9JRF9DT1JFX0NIQU5ORUxfV1JJVEUnLCA4KTsgZGVmaW5lKCdDT01NQU5EX0lEX0NPUkVfQ09O +U09MRV9XUklURScsIDkpOyBkZWZpbmUoJ0NPTU1BTkRfSURfQ09SRV9FTlVNRVhUQ01EJywgMTAp +OyBkZWZpbmUoJ0NPTU1BTkRfSURfQ09SRV9HRVRfU0VTU0lPTl9HVUlEJywgMTEpOyBkZWZpbmUo +J0NPTU1BTkRfSURfQ09SRV9MT0FETElCJywgMTIpOyBkZWZpbmUoJ0NPTU1BTkRfSURfQ09SRV9N +QUNISU5FX0lEJywgMTMpOyBkZWZpbmUoJ0NPTU1BTkRfSURfQ09SRV9NSUdSQVRFJywgMTQpOyBk +ZWZpbmUoJ0NPTU1BTkRfSURfQ09SRV9OQVRJVkVfQVJDSCcsIDE1KTsgZGVmaW5lKCdDT01NQU5E +X0lEX0NPUkVfTkVHT1RJQVRFX1RMVl9FTkNSWVBUSU9OJywgMTYpOyBkZWZpbmUoJ0NPTU1BTkRf +SURfQ09SRV9QQVRDSF9VUkwnLCAxNyk7IGRlZmluZSgnQ09NTUFORF9JRF9DT1JFX1BJVk9UX0FE +RCcsIDE4KTsgZGVmaW5lKCdDT01NQU5EX0lEX0NPUkVfUElWT1RfUkVNT1ZFJywgMTkpOyBkZWZp +bmUoJ0NPTU1BTkRfSURfQ09SRV9QSVZPVF9TRVNTSU9OX0RJRUQnLCAyMCk7IGRlZmluZSgnQ09N +TUFORF9JRF9DT1JFX1NFVF9TRVNTSU9OX0dVSUQnLCAyMSk7IGRlZmluZSgnQ09NTUFORF9JRF9D +T1JFX1NFVF9VVUlEJywgMjIpOyBkZWZpbmUoJ0NPTU1BTkRfSURfQ09SRV9TSFVURE9XTicsIDIz +KTsgZGVmaW5lKCdDT01NQU5EX0lEX0NPUkVfVFJBTlNQT1JUX0FERCcsIDI0KTsgZGVmaW5lKCdD +T01NQU5EX0lEX0NPUkVfVFJBTlNQT1JUX0NIQU5HRScsIDI1KTsgZGVmaW5lKCdDT01NQU5EX0lE +X0NPUkVfVFJBTlNQT1JUX0dFVENFUlRIQVNIJywgMjYpOyBkZWZpbmUoJ0NPTU1BTkRfSURfQ09S +RV9UUkFOU1BPUlRfTElTVCcsIDI3KTsgZGVmaW5lKCdDT01NQU5EX0lEX0NPUkVfVFJBTlNQT1JU +X05FWFQnLCAyOCk7IGRlZmluZSgnQ09NTUFORF9JRF9DT1JFX1RSQU5TUE9SVF9QUkVWJywgMjkp +OyBkZWZpbmUoJ0NPTU1BTkRfSURfQ09SRV9UUkFOU1BPUlRfUkVNT1ZFJywgMzApOyBkZWZpbmUo +J0NPTU1BTkRfSURfQ09SRV9UUkFOU1BPUlRfU0VUQ0VSVEhBU0gnLCAzMSk7IGRlZmluZSgnQ09N +TUFORF9JRF9DT1JFX1RSQU5TUE9SVF9TRVRfVElNRU9VVFMnLCAzMik7IGRlZmluZSgnQ09NTUFO +RF9JRF9DT1JFX1RSQU5TUE9SVF9TTEVFUCcsIDMzKTsgZnVuY3Rpb24gbXlfY21kKCRjbWQpIHsg +cmV0dXJuIHNoZWxsX2V4ZWMoJGNtZCk7IH0gZnVuY3Rpb24gaXNfd2luZG93cygpIHsgcmV0dXJu +IChzdHJ0b3VwcGVyKHN1YnN0cihQSFBfT1MsMCwzKSkgPT0gIldJTiIpOyB9IGZ1bmN0aW9uIGlz +X2xpbnV4KCkgeyByZXR1cm4gKHN0cnRvdXBwZXIoc3Vic3RyKFBIUF9PUywwLDMpKSA9PSAiTElO +Iik7IH0gaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2NvcmVfY2hhbm5lbF9vcGVuJykpIHsgcmVnaXN0 +ZXJfY29tbWFuZCgnY29yZV9jaGFubmVsX29wZW4nLCBDT01NQU5EX0lEX0NPUkVfQ0hBTk5FTF9P +UEVOKTsgZnVuY3Rpb24gY29yZV9jaGFubmVsX29wZW4oJHJlcSwgJiRwa3QpIHsgJHR5cGVfdGx2 +ID0gcGFja2V0X2dldF90bHYoJHJlcSwgVExWX1RZUEVfQ0hBTk5FTF9UWVBFKTsgbXlfcHJpbnQo +IkNsaWVudCB3YW50cyBhICIuICR0eXBlX3RsdlsndmFsdWUnXSAuIiBjaGFubmVsLCBpJ2xsIHNl +ZSB3aGF0IGkgY2FuIGRvIik7ICRoYW5kbGVyID0gImNoYW5uZWxfY3JlYXRlXyIuICR0eXBlX3Rs +dlsndmFsdWUnXTsgaWYgKCR0eXBlX3RsdlsndmFsdWUnXSAmJiBpc19jYWxsYWJsZSgkaGFuZGxl +cikpIHsgbXlfcHJpbnQoIkNhbGxpbmcgeyRoYW5kbGVyfSIpOyAkcmV0ID0gJGhhbmRsZXIoJHJl +cSwgJHBrdCk7IH0gZWxzZSB7IG15X3ByaW50KCJJIGRvbid0IGtub3cgaG93IHRvIG1ha2UgYSAi +LiAkdHlwZV90bHZbJ3ZhbHVlJ10gLiIgY2hhbm5lbC4gPSgiKTsgJHJldCA9IEVSUk9SX0ZBSUxV +UkU7IH0gcmV0dXJuICRyZXQ7IH0gfSBpZiAoIWZ1bmN0aW9uX2V4aXN0cygnY29yZV9jaGFubmVs +X2VvZicpKSB7IHJlZ2lzdGVyX2NvbW1hbmQoJ2NvcmVfY2hhbm5lbF9lb2YnLCBDT01NQU5EX0lE +X0NPUkVfQ0hBTk5FTF9FT0YpOyBmdW5jdGlvbiBjb3JlX2NoYW5uZWxfZW9mKCRyZXEsICYkcGt0 +KSB7IG15X3ByaW50KCJkb2luZyBjaGFubmVsIGVvZiIpOyAkY2hhbl90bHYgPSBwYWNrZXRfZ2V0 +X3RsdigkcmVxLCBUTFZfVFlQRV9DSEFOTkVMX0lEKTsgJGMgPSBnZXRfY2hhbm5lbF9ieV9pZCgk +Y2hhbl90bHZbJ3ZhbHVlJ10pOyBpZiAoJGMpIHsgaWYgKGVvZigkY1sxXSkpIHsgcGFja2V0X2Fk +ZF90bHYoJHBrdCwgY3JlYXRlX3RsdihUTFZfVFlQRV9CT09MLCAxKSk7IH0gZWxzZSB7IHBhY2tl +dF9hZGRfdGx2KCRwa3QsIGNyZWF0ZV90bHYoVExWX1RZUEVfQk9PTCwgMCkpOyB9IHJldHVybiBF +UlJPUl9TVUNDRVNTOyB9IGVsc2UgeyByZXR1cm4gRVJST1JfRkFJTFVSRTsgfSB9IH0gaWYgKCFm +dW5jdGlvbl9leGlzdHMoJ2NvcmVfY2hhbm5lbF9yZWFkJykpIHsgcmVnaXN0ZXJfY29tbWFuZCgn +Y29yZV9jaGFubmVsX3JlYWQnLCBDT01NQU5EX0lEX0NPUkVfQ0hBTk5FTF9SRUFEKTsgZnVuY3Rp +b24gY29yZV9jaGFubmVsX3JlYWQoJHJlcSwgJiRwa3QpIHsgbXlfcHJpbnQoImRvaW5nIGNoYW5u +ZWwgcmVhZCIpOyAkY2hhbl90bHYgPSBwYWNrZXRfZ2V0X3RsdigkcmVxLCBUTFZfVFlQRV9DSEFO +TkVMX0lEKTsgJGxlbl90bHYgPSBwYWNrZXRfZ2V0X3RsdigkcmVxLCBUTFZfVFlQRV9MRU5HVEgp +OyAkaWQgPSAkY2hhbl90bHZbJ3ZhbHVlJ107ICRsZW4gPSAkbGVuX3RsdlsndmFsdWUnXTsgJGRh +dGEgPSBjaGFubmVsX3JlYWQoJGlkLCAkbGVuKTsgaWYgKCRkYXRhID09PSBmYWxzZSkgeyAkcmVz +ID0gRVJST1JfRkFJTFVSRTsgfSBlbHNlIHsgcGFja2V0X2FkZF90bHYoJHBrdCwgY3JlYXRlX3Rs +dihUTFZfVFlQRV9DSEFOTkVMX0RBVEEsICRkYXRhKSk7ICRyZXMgPSBFUlJPUl9TVUNDRVNTOyB9 +IHJldHVybiAkcmVzOyB9IH0gaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2NvcmVfY2hhbm5lbF93cml0 +ZScpKSB7IHJlZ2lzdGVyX2NvbW1hbmQoJ2NvcmVfY2hhbm5lbF93cml0ZScsIENPTU1BTkRfSURf +Q09SRV9DSEFOTkVMX1dSSVRFKTsgZnVuY3Rpb24gY29yZV9jaGFubmVsX3dyaXRlKCRyZXEsICYk +cGt0KSB7ICRjaGFuX3RsdiA9IHBhY2tldF9nZXRfdGx2KCRyZXEsIFRMVl9UWVBFX0NIQU5ORUxf +SUQpOyAkZGF0YV90bHYgPSBwYWNrZXRfZ2V0X3RsdigkcmVxLCBUTFZfVFlQRV9DSEFOTkVMX0RB +VEEpOyAkbGVuX3RsdiA9IHBhY2tldF9nZXRfdGx2KCRyZXEsIFRMVl9UWVBFX0xFTkdUSCk7ICRp +ZCA9ICRjaGFuX3RsdlsndmFsdWUnXTsgJGRhdGEgPSAkZGF0YV90bHZbJ3ZhbHVlJ107ICRsZW4g +PSAkbGVuX3RsdlsndmFsdWUnXTsgJHdyb3RlID0gY2hhbm5lbF93cml0ZSgkaWQsICRkYXRhLCAk +bGVuKTsgaWYgKCR3cm90ZSA9PT0gZmFsc2UpIHsgcmV0dXJuIEVSUk9SX0ZBSUxVUkU7IH0gZWxz +ZSB7IHBhY2tldF9hZGRfdGx2KCRwa3QsIGNyZWF0ZV90bHYoVExWX1RZUEVfTEVOR1RILCAkd3Jv +dGUpKTsgcmV0dXJuIEVSUk9SX1NVQ0NFU1M7IH0gfSB9IGlmICghZnVuY3Rpb25fZXhpc3RzKCdj +b3JlX2NoYW5uZWxfY2xvc2UnKSkgeyByZWdpc3Rlcl9jb21tYW5kKCdjb3JlX2NoYW5uZWxfY2xv +c2UnLCBDT01NQU5EX0lEX0NPUkVfQ0hBTk5FTF9DTE9TRSk7IGZ1bmN0aW9uIGNvcmVfY2hhbm5l +bF9jbG9zZSgkcmVxLCAmJHBrdCkgeyBnbG9iYWwgJGNoYW5uZWxfcHJvY2Vzc19tYXA7IG15X3By +aW50KCJkb2luZyBjaGFubmVsIGNsb3NlIik7ICRjaGFuX3RsdiA9IHBhY2tldF9nZXRfdGx2KCRy +ZXEsIFRMVl9UWVBFX0NIQU5ORUxfSUQpOyAkaWQgPSAkY2hhbl90bHZbJ3ZhbHVlJ107ICRjID0g +Z2V0X2NoYW5uZWxfYnlfaWQoJGlkKTsgaWYgKCRjKSB7IGNoYW5uZWxfY2xvc2VfaGFuZGxlcygk +aWQpOyBjaGFubmVsX3JlbW92ZSgkaWQpOyBpZiAoYXJyYXlfa2V5X2V4aXN0cygkaWQsICRjaGFu +bmVsX3Byb2Nlc3NfbWFwKSBhbmQgaXNfY2FsbGFibGUoJ2Nsb3NlX3Byb2Nlc3MnKSkgeyBjbG9z +ZV9wcm9jZXNzKCRjaGFubmVsX3Byb2Nlc3NfbWFwWyRpZF0pOyB9IHJldHVybiBFUlJPUl9TVUND +RVNTOyB9IGR1bXBfY2hhbm5lbHMoImFmdGVyIGNsb3NlIik7IHJldHVybiBFUlJPUl9GQUlMVVJF +OyB9IH0gaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2NoYW5uZWxfY2xvc2VfaGFuZGxlcycpKSB7IGZ1 +bmN0aW9uIGNoYW5uZWxfY2xvc2VfaGFuZGxlcygkY2lkKSB7IGdsb2JhbCAkY2hhbm5lbHM7IGlm +ICghYXJyYXlfa2V5X2V4aXN0cygkY2lkLCAkY2hhbm5lbHMpKSB7IHJldHVybjsgfSAkYyA9ICRj +aGFubmVsc1skY2lkXTsgZm9yKCRpID0gMDsgJGkgPCAzOyAkaSsrKSB7IGlmIChhcnJheV9rZXlf +ZXhpc3RzKCRpLCAkYykgJiYgaXNfcmVzb3VyY2UoJGNbJGldKSkgeyBjbG9zZSgkY1skaV0pOyBy +ZW1vdmVfcmVhZGVyKCRjWyRpXSk7IH0gfSBpZiAoc3RybGVuKCRjWydkYXRhJ10pID09IDApIHsg +Y2hhbm5lbF9yZW1vdmUoJGNpZCk7IH0gfSB9IGZ1bmN0aW9uIGNoYW5uZWxfcmVtb3ZlKCRjaWQp +IHsgZ2xvYmFsICRjaGFubmVsczsgdW5zZXQoJGNoYW5uZWxzWyRjaWRdKTsgfSBpZiAoIWZ1bmN0 +aW9uX2V4aXN0cygnY29yZV9jaGFubmVsX2ludGVyYWN0JykpIHsgcmVnaXN0ZXJfY29tbWFuZCgn +Y29yZV9jaGFubmVsX2ludGVyYWN0JywgQ09NTUFORF9JRF9DT1JFX0NIQU5ORUxfSU5URVJBQ1Qp +OyBmdW5jdGlvbiBjb3JlX2NoYW5uZWxfaW50ZXJhY3QoJHJlcSwgJiRwa3QpIHsgZ2xvYmFsICRy +ZWFkZXJzOyBteV9wcmludCgiZG9pbmcgY2hhbm5lbCBpbnRlcmFjdCIpOyAkY2hhbl90bHYgPSBw +YWNrZXRfZ2V0X3RsdigkcmVxLCBUTFZfVFlQRV9DSEFOTkVMX0lEKTsgJGlkID0gJGNoYW5fdGx2 +Wyd2YWx1ZSddOyAkdG9nZ2xlX3RsdiA9IHBhY2tldF9nZXRfdGx2KCRyZXEsIFRMVl9UWVBFX0JP +T0wpOyAkYyA9IGdldF9jaGFubmVsX2J5X2lkKCRpZCk7IGlmICgkYykgeyBpZiAoJHRvZ2dsZV90 +bHZbJ3ZhbHVlJ10pIHsgaWYgKCFpbl9hcnJheSgkY1sxXSwgJHJlYWRlcnMpKSB7IGFkZF9yZWFk +ZXIoJGNbMV0pOyBpZiAoYXJyYXlfa2V5X2V4aXN0cygyLCAkYykgJiYgJGNbMV0gIT0gJGNbMl0p +IHsgYWRkX3JlYWRlcigkY1syXSk7IH0gJHJldCA9IEVSUk9SX1NVQ0NFU1M7IH0gZWxzZSB7ICRy +ZXQgPSBFUlJPUl9GQUlMVVJFOyB9IH0gZWxzZSB7IGlmIChpbl9hcnJheSgkY1sxXSwgJHJlYWRl +cnMpKSB7IHJlbW92ZV9yZWFkZXIoJGNbMV0pOyByZW1vdmVfcmVhZGVyKCRjWzJdKTsgJHJldCA9 +IEVSUk9SX1NVQ0NFU1M7IH0gZWxzZSB7ICRyZXQgPSBFUlJPUl9TVUNDRVNTOyB9IH0gfSBlbHNl +IHsgbXlfcHJpbnQoIlRyeWluZyB0byBpbnRlcmFjdCB3aXRoIGFuIGludmFsaWQgY2hhbm5lbCIp +OyAkcmV0ID0gRVJST1JfRkFJTFVSRTsgfSByZXR1cm4gJHJldDsgfSB9IGZ1bmN0aW9uIGludGVy +YWN0aW5nKCRjaWQpIHsgZ2xvYmFsICRyZWFkZXJzOyAkYyA9IGdldF9jaGFubmVsX2J5X2lkKCRj +aWQpOyBpZiAoaW5fYXJyYXkoJGNbMV0sICRyZWFkZXJzKSkgeyByZXR1cm4gdHJ1ZTsgfSByZXR1 +cm4gZmFsc2U7IH0gaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2NvcmVfc2h1dGRvd24nKSkgeyByZWdp +c3Rlcl9jb21tYW5kKCdjb3JlX3NodXRkb3duJywgQ09NTUFORF9JRF9DT1JFX1NIVVRET1dOKTsg +ZnVuY3Rpb24gY29yZV9zaHV0ZG93bigkcmVxLCAmJHBrdCkgeyBteV9wcmludCgiZG9pbmcgY29y +ZSBzaHV0ZG93biIpOyBkaWUoKTsgfSB9IGlmICghZnVuY3Rpb25fZXhpc3RzKCdjb3JlX2xvYWRs +aWInKSkgeyByZWdpc3Rlcl9jb21tYW5kKCdjb3JlX2xvYWRsaWInLCBDT01NQU5EX0lEX0NPUkVf +TE9BRExJQik7IGZ1bmN0aW9uIGNvcmVfbG9hZGxpYigkcmVxLCAmJHBrdCkgeyBnbG9iYWwgJGlk +MmY7IG15X3ByaW50KCJkb2luZyBjb3JlX2xvYWRsaWIiKTsgJGRhdGFfdGx2ID0gcGFja2V0X2dl +dF90bHYoJHJlcSwgVExWX1RZUEVfREFUQSk7IGlmICgoJGRhdGFfdGx2Wyd0eXBlJ10gJiBUTFZf +TUVUQV9UWVBFX0NPTVBSRVNTRUQpID09IFRMVl9NRVRBX1RZUEVfQ09NUFJFU1NFRCkgeyByZXR1 +cm4gRVJST1JfRkFJTFVSRTsgfSAkdG1wID0gJGlkMmY7IGlmIChleHRlbnNpb25fbG9hZGVkKCdz +dWhvc2luJykgJiYgaW5pX2dldCgnc3Vob3Npbi5leGVjdXRvci5kaXNhYmxlX2V2YWwnKSkgeyAk +c3Vob3Npbl9ieXBhc3M9Y3JlYXRlX2Z1bmN0aW9uKCcnLCAkZGF0YV90bHZbJ3ZhbHVlJ10pOyAk +c3Vob3Npbl9ieXBhc3MoKTsgfSBlbHNlIHsgZXZhbCgkZGF0YV90bHZbJ3ZhbHVlJ10pOyB9ICRu +ZXcgPSBhcnJheV9kaWZmKCRpZDJmLCAkdG1wKTsgZm9yZWFjaCAoJG5ldyBhcyAkaWQgPT4gJGZ1 +bmMpIHsgcGFja2V0X2FkZF90bHYoJHBrdCwgY3JlYXRlX3RsdihUTFZfVFlQRV9VSU5ULCAkaWQp +KTsgfSByZXR1cm4gRVJST1JfU1VDQ0VTUzsgfSB9IGlmICghZnVuY3Rpb25fZXhpc3RzKCdjb3Jl +X2VudW1leHRjbWQnKSkgeyByZWdpc3Rlcl9jb21tYW5kKCdjb3JlX2VudW1leHRjbWQnLCBDT01N +QU5EX0lEX0NPUkVfRU5VTUVYVENNRCk7IGZ1bmN0aW9uIGNvcmVfZW51bWV4dGNtZCgkcmVxLCAm +JHBrdCkgeyBteV9wcmludCgiZG9pbmcgY29yZV9lbnVtZXh0Y21kIik7IGdsb2JhbCAkaWQyZjsg +JGlkX3N0YXJ0X2FycmF5ID0gcGFja2V0X2dldF90bHYoJHJlcSwgVExWX1RZUEVfVUlOVCk7ICRp +ZF9zdGFydCA9ICRpZF9zdGFydF9hcnJheVsndmFsdWUnXTsgJGlkX2VuZF9hcnJheSA9IHBhY2tl +dF9nZXRfdGx2KCRyZXEsIFRMVl9UWVBFX0xFTkdUSCk7ICRpZF9lbmQgPSAkaWRfZW5kX2FycmF5 +Wyd2YWx1ZSddICsgJGlkX3N0YXJ0OyBmb3JlYWNoICgkaWQyZiBhcyAkaWQgPT4gJGV4dF9jbWQp +IHsgbXlfcHJpbnQoImNvcmVfZW51bWV4dGNtZCAtIGNoZWNraW5nICIgLiAkZXh0X2NtZCAuICIg +YXMgIiAuICRpZCk7IGxpc3QoJGV4dF9uYW1lLCAkY21kKSA9IGV4cGxvZGUoIl8iLCAkZXh0X2Nt +ZCwgMik7IGlmICgkaWRfc3RhcnQgPCAkaWQgJiYgJGlkIDwgJGlkX2VuZCkgeyBteV9wcmludCgi +Y29yZV9lbnVtZXh0Y21kIC0gYWRkaW5nICIgLiAkZXh0X2NtZCAuICIgYXMgIiAuICRpZCk7IHBh +Y2tldF9hZGRfdGx2KCRwa3QsIGNyZWF0ZV90bHYoVExWX1RZUEVfVUlOVCwgJGlkKSk7IH0gfSBy +ZXR1cm4gRVJST1JfU1VDQ0VTUzsgfSB9IGlmICghZnVuY3Rpb25fZXhpc3RzKCdjb3JlX3NldF91 +dWlkJykpIHsgcmVnaXN0ZXJfY29tbWFuZCgnY29yZV9zZXRfdXVpZCcsIENPTU1BTkRfSURfQ09S +RV9TRVRfVVVJRCk7IGZ1bmN0aW9uIGNvcmVfc2V0X3V1aWQoJHJlcSwgJiRwa3QpIHsgbXlfcHJp +bnQoImRvaW5nIGNvcmVfc2V0X3V1aWQiKTsgJG5ld191dWlkID0gcGFja2V0X2dldF90bHYoJHJl +cSwgVExWX1RZUEVfVVVJRCk7IGlmICgkbmV3X3V1aWQgIT0gbnVsbCkgeyAkR0xPQkFMU1snVVVJ +RCddID0gJG5ld191dWlkWyd2YWx1ZSddOyBteV9wcmludCgiTmV3IFVVSUQgaXMgeyRHTE9CQUxT +WydVVUlEJ119Iik7IH0gcmV0dXJuIEVSUk9SX1NVQ0NFU1M7IH0gfSBmdW5jdGlvbiBnZXRfaGRk +X2xhYmVsKCkgeyBmb3JlYWNoIChzY2FuZGlyKCcvZGV2L2Rpc2svYnktaWQvJykgYXMgJGZpbGUp +IHsgZm9yZWFjaCAoYXJyYXkoImF0YS0iLCAibWItIikgYXMgJHByZWZpeCkgeyBpZiAoc3RycG9z +KCRmaWxlLCAkcHJlZml4KSA9PT0gMCkgeyByZXR1cm4gc3Vic3RyKCRmaWxlLCBzdHJsZW4oJHBy +ZWZpeCkpOyB9IH0gfSByZXR1cm4gIiI7IH0gZnVuY3Rpb24gZGVyX3RvX3BlbSgkZGVyX2RhdGEp +IHsgJHBlbSA9IGNodW5rX3NwbGl0KGJhc2U2NF9lbmNvZGUoJGRlcl9kYXRhKSwgNjQsICJcbiIp +OyAkcGVtID0gIi0tLS0tQkVHSU4gUFVCTElDIEtFWS0tLS0tXG4iLiRwZW0uIi0tLS0tRU5EIFBV +QkxJQyBLRVktLS0tLVxuIjsgcmV0dXJuICRwZW07IH0gaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2Nv +cmVfbmVnb3RpYXRlX3Rsdl9lbmNyeXB0aW9uJykpIHsgcmVnaXN0ZXJfY29tbWFuZCgnY29yZV9u +ZWdvdGlhdGVfdGx2X2VuY3J5cHRpb24nLCBDT01NQU5EX0lEX0NPUkVfTkVHT1RJQVRFX1RMVl9F +TkNSWVBUSU9OKTsgZnVuY3Rpb24gY29yZV9uZWdvdGlhdGVfdGx2X2VuY3J5cHRpb24oJHJlcSwg +JiRwa3QpIHsgaWYgKHN1cHBvcnRzX2FlcygpKSB7IG15X3ByaW50KCJBRVMgZnVuY3Rpb25hbGl0 +eSBpcyBzdXBwb3J0ZWQiKTsgcGFja2V0X2FkZF90bHYoJHBrdCwgY3JlYXRlX3RsdihUTFZfVFlQ +RV9TWU1fS0VZX1RZUEUsIEVOQ19BRVMyNTYpKTsgJEdMT0JBTFNbJ0FFU19FTkFCTEVEJ10gPSBm +YWxzZTsgJEdMT0JBTFNbJ0FFU19LRVknXSA9IHJhbmRfYnl0ZXMoMzIpOyBpZiAoZnVuY3Rpb25f +ZXhpc3RzKCdvcGVuc3NsX3BrZXlfZ2V0X3B1YmxpYycpICYmIGZ1bmN0aW9uX2V4aXN0cygnb3Bl +bnNzbF9wdWJsaWNfZW5jcnlwdCcpKSB7IG15X3ByaW50KCJFbmNyeXB0aW9uIHZpYSBwdWJsaWMg +a2V5IGlzIHN1cHBvcnRlZCIpOyAkcHViX2tleV90bHYgPSBwYWNrZXRfZ2V0X3RsdigkcmVxLCBU +TFZfVFlQRV9SU0FfUFVCX0tFWSk7IGlmICgkcHViX2tleV90bHYgIT0gbnVsbCkgeyAka2V5ID0g +b3BlbnNzbF9wa2V5X2dldF9wdWJsaWMoZGVyX3RvX3BlbSgkcHViX2tleV90bHZbJ3ZhbHVlJ10p +KTsgJGVuYyA9ICcnOyBvcGVuc3NsX3B1YmxpY19lbmNyeXB0KCRHTE9CQUxTWydBRVNfS0VZJ10s +ICRlbmMsICRrZXksIE9QRU5TU0xfUEtDUzFfUEFERElORyk7IHBhY2tldF9hZGRfdGx2KCRwa3Qs +IGNyZWF0ZV90bHYoVExWX1RZUEVfRU5DX1NZTV9LRVksICRlbmMpKTsgcmV0dXJuIEVSUk9SX1NV +Q0NFU1M7IH0gfSBwYWNrZXRfYWRkX3RsdigkcGt0LCBjcmVhdGVfdGx2KFRMVl9UWVBFX1NZTV9L +RVksICRHTE9CQUxTWydBRVNfS0VZJ10pKTsgfSByZXR1cm4gRVJST1JfU1VDQ0VTUzsgfSB9IGlm +ICghZnVuY3Rpb25fZXhpc3RzKCdjb3JlX2dldF9zZXNzaW9uX2d1aWQnKSkgeyByZWdpc3Rlcl9j +b21tYW5kKCdjb3JlX2dldF9zZXNzaW9uX2d1aWQnLCBDT01NQU5EX0lEX0NPUkVfR0VUX1NFU1NJ +T05fR1VJRCk7IGZ1bmN0aW9uIGNvcmVfZ2V0X3Nlc3Npb25fZ3VpZCgkcmVxLCAmJHBrdCkgeyBw +YWNrZXRfYWRkX3RsdigkcGt0LCBjcmVhdGVfdGx2KFRMVl9UWVBFX1NFU1NJT05fR1VJRCwgJEdM +T0JBTFNbJ1NFU1NJT05fR1VJRCddKSk7IHJldHVybiBFUlJPUl9TVUNDRVNTOyB9IH0gaWYgKCFm +dW5jdGlvbl9leGlzdHMoJ2NvcmVfc2V0X3Nlc3Npb25fZ3VpZCcpKSB7IHJlZ2lzdGVyX2NvbW1h +bmQoJ2NvcmVfc2V0X3Nlc3Npb25fZ3VpZCcsIENPTU1BTkRfSURfQ09SRV9TRVRfU0VTU0lPTl9H +VUlEKTsgZnVuY3Rpb24gY29yZV9zZXRfc2Vzc2lvbl9ndWlkKCRyZXEsICYkcGt0KSB7IG15X3By +aW50KCJkb2luZyBjb3JlX3NldF9zZXNzaW9uX2d1aWQiKTsgJG5ld19ndWlkID0gcGFja2V0X2dl +dF90bHYoJHJlcSwgVExWX1RZUEVfU0VTU0lPTl9HVUlEKTsgaWYgKCRuZXdfZ3VpZCAhPSBudWxs +KSB7ICRHTE9CQUxTWydTRVNTSU9OX0lEJ10gPSAkbmV3X2d1aWRbJ3ZhbHVlJ107IG15X3ByaW50 +KCJOZXcgU2Vzc2lvbiBHVUlEIGlzIHskR0xPQkFMU1snU0VTU0lPTl9HVUlEJ119Iik7IH0gcmV0 +dXJuIEVSUk9SX1NVQ0NFU1M7IH0gfSBpZiAoIWZ1bmN0aW9uX2V4aXN0cygnY29yZV9tYWNoaW5l +X2lkJykpIHsgcmVnaXN0ZXJfY29tbWFuZCgnY29yZV9tYWNoaW5lX2lkJywgQ09NTUFORF9JRF9D +T1JFX01BQ0hJTkVfSUQpOyBmdW5jdGlvbiBjb3JlX21hY2hpbmVfaWQoJHJlcSwgJiRwa3QpIHsg +bXlfcHJpbnQoImRvaW5nIGNvcmVfbWFjaGluZV9pZCIpOyBpZiAoaXNfY2FsbGFibGUoJ2dldGhv +c3RuYW1lJykpIHsgJG1hY2hpbmVfaWQgPSBnZXRob3N0bmFtZSgpOyB9IGVsc2UgeyAkbWFjaGlu +ZV9pZCA9IHBocF91bmFtZSgnbicpOyB9ICRzZXJpYWwgPSAiIjsgaWYgKGlzX3dpbmRvd3MoKSkg +eyAkb3V0cHV0ID0gc3RydG9sb3dlcihzaGVsbF9leGVjKCJ2b2wgJVNZU1RFTURSSVZFJSIpKTsg +JHNlcmlhbCA9IHByZWdfcmVwbGFjZSgnLy4qc2VyaWFsIG51bWJlciBpcyAoW2EtejAtOV17NH0t +W2EtejAtOV17NH0pLiovcycsICckMScsICRvdXRwdXQpOyB9IGVsc2UgeyAkc2VyaWFsID0gZ2V0 +X2hkZF9sYWJlbCgpOyB9IHBhY2tldF9hZGRfdGx2KCRwa3QsIGNyZWF0ZV90bHYoVExWX1RZUEVf +TUFDSElORV9JRCwgJHNlcmlhbC4iOiIuJG1hY2hpbmVfaWQpKTsgcmV0dXJuIEVSUk9SX1NVQ0NF +U1M7IH0gfSAkY2hhbm5lbHMgPSBhcnJheSgpOyBmdW5jdGlvbiByZWdpc3Rlcl9jaGFubmVsKCRp +biwgJG91dD1udWxsLCAkZXJyPW51bGwpIHsgZ2xvYmFsICRjaGFubmVsczsgaWYgKCRvdXQgPT0g +bnVsbCkgeyAkb3V0ID0gJGluOyB9IGlmICgkZXJyID09IG51bGwpIHsgJGVyciA9ICRvdXQ7IH0g +JGNoYW5uZWxzW10gPSBhcnJheSgwID0+ICRpbiwgMSA9PiAkb3V0LCAyID0+ICRlcnIsICd0eXBl +JyA9PiBnZXRfcnR5cGUoJGluKSwgJ2RhdGEnID0+ICcnKTsgJGlkID0gZW5kKGFycmF5X2tleXMo +JGNoYW5uZWxzKSk7IG15X3ByaW50KCJDcmVhdGVkIG5ldyBjaGFubmVsICRpbiwgd2l0aCBpZCAk +aWQiKTsgcmV0dXJuICRpZDsgfSBmdW5jdGlvbiBnZXRfY2hhbm5lbF9pZF9mcm9tX3Jlc291cmNl +KCRyZXNvdXJjZSkgeyBnbG9iYWwgJGNoYW5uZWxzOyBpZiAoZW1wdHkoJGNoYW5uZWxzKSkgeyBy +ZXR1cm4gZmFsc2U7IH0gZm9yZWFjaCAoJGNoYW5uZWxzIGFzICRpID0+ICRjaGFuX2FyeSkgeyBp +ZiAoaW5fYXJyYXkoJHJlc291cmNlLCAkY2hhbl9hcnkpKSB7IG15X3ByaW50KCJGb3VuZCBjaGFu +bmVsIGlkICRpIik7IHJldHVybiAkaTsgfSB9IHJldHVybiBmYWxzZTsgfSBmdW5jdGlvbiAmZ2V0 +X2NoYW5uZWxfYnlfaWQoJGNoYW5faWQpIHsgZ2xvYmFsICRjaGFubmVsczsgbXlfcHJpbnQoIkxv +b2tpbmcgdXAgY2hhbm5lbCBpZCAkY2hhbl9pZCIpOyBpZiAoYXJyYXlfa2V5X2V4aXN0cygkY2hh +bl9pZCwgJGNoYW5uZWxzKSkgeyBteV9wcmludCgiRm91bmQgb25lIik7IHJldHVybiAkY2hhbm5l +bHNbJGNoYW5faWRdOyB9IGVsc2UgeyByZXR1cm4gZmFsc2U7IH0gfSBmdW5jdGlvbiBjaGFubmVs +X3dyaXRlKCRjaGFuX2lkLCAkZGF0YSkgeyAkYyA9IGdldF9jaGFubmVsX2J5X2lkKCRjaGFuX2lk +KTsgaWYgKCRjICYmIGlzX3Jlc291cmNlKCRjWzBdKSkgeyBteV9wcmludCgiLS0tV3JpdGluZyAn +JGRhdGEnIHRvIGNoYW5uZWwgJGNoYW5faWQiKTsgcmV0dXJuIHdyaXRlKCRjWzBdLCAkZGF0YSk7 +IH0gZWxzZSB7IHJldHVybiBmYWxzZTsgfSB9IGZ1bmN0aW9uIGNoYW5uZWxfcmVhZCgkY2hhbl9p +ZCwgJGxlbikgeyAkYyA9ICZnZXRfY2hhbm5lbF9ieV9pZCgkY2hhbl9pZCk7IGlmICgkYykgeyAk +cmV0ID0gc3Vic3RyKCRjWydkYXRhJ10sIDAsICRsZW4pOyAkY1snZGF0YSddID0gc3Vic3RyKCRj +WydkYXRhJ10sICRsZW4pOyBpZiAoc3RybGVuKCRyZXQpID4gMCkgeyBteV9wcmludCgiSGFkIHNv +bWUgbGVmdG92ZXJzOiAnJHJldCciKTsgfSBpZiAoc3RybGVuKCRyZXQpIDwgJGxlbiBhbmQgaXNf +cmVzb3VyY2UoJGNbMl0pIGFuZCAkY1sxXSAhPSAkY1syXSkgeyAkcmVhZCA9IHJlYWQoJGNbMl0p +OyAkY1snZGF0YSddIC49ICRyZWFkOyAkYnl0ZXNfbmVlZGVkID0gJGxlbiAtIHN0cmxlbigkcmV0 +KTsgJHJldCAuPSBzdWJzdHIoJGNbJ2RhdGEnXSwgMCwgJGJ5dGVzX25lZWRlZCk7ICRjWydkYXRh +J10gPSBzdWJzdHIoJGNbJ2RhdGEnXSwgJGJ5dGVzX25lZWRlZCk7IH0gaWYgKHN0cmxlbigkcmV0 +KSA8ICRsZW4gYW5kIGlzX3Jlc291cmNlKCRjWzFdKSkgeyAkcmVhZCA9IHJlYWQoJGNbMV0pOyAk +Y1snZGF0YSddIC49ICRyZWFkOyAkYnl0ZXNfbmVlZGVkID0gJGxlbiAtIHN0cmxlbigkcmV0KTsg +JHJldCAuPSBzdWJzdHIoJGNbJ2RhdGEnXSwgMCwgJGJ5dGVzX25lZWRlZCk7ICRjWydkYXRhJ10g +PSBzdWJzdHIoJGNbJ2RhdGEnXSwgJGJ5dGVzX25lZWRlZCk7IH0gaWYgKGZhbHNlID09PSAkcmVh +ZCBhbmQgZW1wdHkoJHJldCkpIHsgaWYgKGludGVyYWN0aW5nKCRjaGFuX2lkKSkgeyBoYW5kbGVf +ZGVhZF9yZXNvdXJjZV9jaGFubmVsKCRjWzFdKTsgfSByZXR1cm4gZmFsc2U7IH0gcmV0dXJuICRy +ZXQ7IH0gZWxzZSB7IHJldHVybiBmYWxzZTsgfSB9IGZ1bmN0aW9uIHJhbmRfeG9yX2J5dGUoKSB7 +IHJldHVybiBjaHIobXRfcmFuZCgxLCAyNTUpKTsgfSBmdW5jdGlvbiByYW5kX2J5dGVzKCRzaXpl +KSB7ICRiID0gJyc7IGZvciAoJGkgPSAwOyAkaSA8ICRzaXplOyAkaSsrKSB7ICRiIC49IHJhbmRf +eG9yX2J5dGUoKTsgfSByZXR1cm4gJGI7IH0gZnVuY3Rpb24gcmFuZF94b3Jfa2V5KCkgeyByZXR1 +cm4gcmFuZF9ieXRlcyg0KTsgfSBmdW5jdGlvbiB4b3JfYnl0ZXMoJGtleSwgJGRhdGEpIHsgJHJl +c3VsdCA9ICcnOyBmb3IgKCRpID0gMDsgJGkgPCBzdHJsZW4oJGRhdGEpOyArKyRpKSB7ICRyZXN1 +bHQgLj0gJGRhdGFbJGldIF4gJGtleVskaSAlIDRdOyB9IHJldHVybiAkcmVzdWx0OyB9IGZ1bmN0 +aW9uIGdlbmVyYXRlX3JlcV9pZCgpIHsgJGNoYXJhY3RlcnMgPSAnYWJjZGVmZ2hpamtsbW5vcHFy +c3R1dnd4eXonOyAkcmlkID0gJyc7IGZvciAoJHAgPSAwOyAkcCA8IDMyOyAkcCsrKSB7ICRyaWQg +Lj0gJGNoYXJhY3RlcnNbcmFuZCgwLCBzdHJsZW4oJGNoYXJhY3RlcnMpLTEpXTsgfSByZXR1cm4g +JHJpZDsgfSBmdW5jdGlvbiBzdXBwb3J0c19hZXMoKSB7IHJldHVybiBmdW5jdGlvbl9leGlzdHMo +J29wZW5zc2xfZGVjcnlwdCcpICYmIGZ1bmN0aW9uX2V4aXN0cygnb3BlbnNzbF9lbmNyeXB0Jyk7 +IH0gZnVuY3Rpb24gZGVjcnlwdF9wYWNrZXQoJHJhdykgeyAkbGVuX2FycmF5ID0gdW5wYWNrKCJO +bGVuIiwgc3Vic3RyKCRyYXcsIDIwLCA0KSk7ICRlbmNyeXB0X2ZsYWdzID0gJGxlbl9hcnJheVsn +bGVuJ107IGlmICgkZW5jcnlwdF9mbGFncyA9PSBFTkNfQUVTMjU2ICYmIHN1cHBvcnRzX2Flcygp +ICYmICRHTE9CQUxTWydBRVNfS0VZJ10gIT0gbnVsbCkgeyAkdGx2ID0gc3Vic3RyKCRyYXcsIDI0 +KTsgJGRlYyA9IG9wZW5zc2xfZGVjcnlwdChzdWJzdHIoJHRsdiwgMjQpLCBBRVNfMjU2X0NCQywg +JEdMT0JBTFNbJ0FFU19LRVknXSwgT1BFTlNTTF9SQVdfREFUQSwgc3Vic3RyKCR0bHYsIDgsIDE2 +KSk7IHJldHVybiBwYWNrKCJOIiwgc3RybGVuKCRkZWMpICsgOCkgLiBzdWJzdHIoJHRsdiwgNCwg +NCkgLiAkZGVjOyB9IHJldHVybiBzdWJzdHIoJHJhdywgMjQpOyB9IGZ1bmN0aW9uIGVuY3J5cHRf +cGFja2V0KCRyYXcpIHsgaWYgKHN1cHBvcnRzX2FlcygpICYmICRHTE9CQUxTWydBRVNfS0VZJ10g +IT0gbnVsbCkgeyBpZiAoJEdMT0JBTFNbJ0FFU19FTkFCTEVEJ10gPT09IHRydWUpIHsgJGl2ID0g +cmFuZF9ieXRlcygxNik7ICRlbmMgPSAkaXYgLiBvcGVuc3NsX2VuY3J5cHQoc3Vic3RyKCRyYXcs +IDgpLCBBRVNfMjU2X0NCQywgJEdMT0JBTFNbJ0FFU19LRVknXSwgT1BFTlNTTF9SQVdfREFUQSwg +JGl2KTsgJGhkciA9IHBhY2soIk4iLCBzdHJsZW4oJGVuYykgKyA4KSAuIHN1YnN0cigkcmF3LCA0 +LCA0KTsgcmV0dXJuICRHTE9CQUxTWydTRVNTSU9OX0dVSUQnXSAuIHBhY2soIk4iLCBFTkNfQUVT +MjU2KSAuICRoZHIgLiAkZW5jOyB9ICRHTE9CQUxTWydBRVNfRU5BQkxFRCddID0gdHJ1ZTsgfSBy +ZXR1cm4gJEdMT0JBTFNbJ1NFU1NJT05fR1VJRCddIC4gcGFjaygiTiIsIEVOQ19OT05FKSAuICRy +YXc7IH0gZnVuY3Rpb24gd3JpdGVfdGx2X3RvX3NvY2tldCgkcmVzb3VyY2UsICRyYXcpIHsgJHhv +ciA9IHJhbmRfeG9yX2tleSgpOyB3cml0ZSgkcmVzb3VyY2UsICR4b3IgLiB4b3JfYnl0ZXMoJHhv +ciwgZW5jcnlwdF9wYWNrZXQoJHJhdykpKTsgfSBmdW5jdGlvbiBoYW5kbGVfZGVhZF9yZXNvdXJj +ZV9jaGFubmVsKCRyZXNvdXJjZSkgeyBnbG9iYWwgJG1zZ3NvY2s7IGlmICghaXNfcmVzb3VyY2Uo +JHJlc291cmNlKSkgeyByZXR1cm47IH0gJGNpZCA9IGdldF9jaGFubmVsX2lkX2Zyb21fcmVzb3Vy +Y2UoJHJlc291cmNlKTsgaWYgKCRjaWQgPT09IGZhbHNlKSB7IG15X3ByaW50KCJSZXNvdXJjZSBo +YXMgbm8gY2hhbm5lbDogeyRyZXNvdXJjZX0iKTsgcmVtb3ZlX3JlYWRlcigkcmVzb3VyY2UpOyBj +bG9zZSgkcmVzb3VyY2UpOyB9IGVsc2UgeyBteV9wcmludCgiSGFuZGxpbmcgZGVhZCByZXNvdXJj +ZTogeyRyZXNvdXJjZX0sIGZvciBjaGFubmVsOiB7JGNpZH0iKTsgY2hhbm5lbF9jbG9zZV9oYW5k +bGVzKCRjaWQpOyAkcGt0ID0gcGFjaygiTiIsIFBBQ0tFVF9UWVBFX1JFUVVFU1QpOyBwYWNrZXRf +YWRkX3RsdigkcGt0LCBjcmVhdGVfdGx2KFRMVl9UWVBFX0NPTU1BTkRfSUQsIENPTU1BTkRfSURf +Q09SRV9DSEFOTkVMX0NMT1NFKSk7IHBhY2tldF9hZGRfdGx2KCRwa3QsIGNyZWF0ZV90bHYoVExW +X1RZUEVfUkVRVUVTVF9JRCwgZ2VuZXJhdGVfcmVxX2lkKCkpKTsgcGFja2V0X2FkZF90bHYoJHBr +dCwgY3JlYXRlX3RsdihUTFZfVFlQRV9DSEFOTkVMX0lELCAkY2lkKSk7IHBhY2tldF9hZGRfdGx2 +KCRwa3QsIGNyZWF0ZV90bHYoVExWX1RZUEVfVVVJRCwgJEdMT0JBTFNbJ1VVSUQnXSkpOyAkcGt0 +ID0gcGFjaygiTiIsIHN0cmxlbigkcGt0KSArIDQpIC4gJHBrdDsgd3JpdGVfdGx2X3RvX3NvY2tl +dCgkbXNnc29jaywgJHBrdCk7IH0gfSBmdW5jdGlvbiBoYW5kbGVfcmVzb3VyY2VfcmVhZF9jaGFu +bmVsKCRyZXNvdXJjZSwgJGRhdGEpIHsgZ2xvYmFsICR1ZHBfaG9zdF9tYXA7ICRjaWQgPSBnZXRf +Y2hhbm5lbF9pZF9mcm9tX3Jlc291cmNlKCRyZXNvdXJjZSk7IG15X3ByaW50KCJIYW5kbGluZyBk +YXRhIGZyb20gJHJlc291cmNlIik7ICRwa3QgPSBwYWNrKCJOIiwgUEFDS0VUX1RZUEVfUkVRVUVT +VCk7IHBhY2tldF9hZGRfdGx2KCRwa3QsIGNyZWF0ZV90bHYoVExWX1RZUEVfQ09NTUFORF9JRCwg +Q09NTUFORF9JRF9DT1JFX0NIQU5ORUxfV1JJVEUpKTsgaWYgKGFycmF5X2tleV9leGlzdHMoKGlu +dCkkcmVzb3VyY2UsICR1ZHBfaG9zdF9tYXApKSB7IGxpc3QoJGgsJHApID0gJHVkcF9ob3N0X21h +cFsoaW50KSRyZXNvdXJjZV07IHBhY2tldF9hZGRfdGx2KCRwa3QsIGNyZWF0ZV90bHYoVExWX1RZ +UEVfUEVFUl9IT1NULCAkaCkpOyBwYWNrZXRfYWRkX3RsdigkcGt0LCBjcmVhdGVfdGx2KFRMVl9U +WVBFX1BFRVJfUE9SVCwgJHApKTsgfSBwYWNrZXRfYWRkX3RsdigkcGt0LCBjcmVhdGVfdGx2KFRM +Vl9UWVBFX0NIQU5ORUxfSUQsICRjaWQpKTsgcGFja2V0X2FkZF90bHYoJHBrdCwgY3JlYXRlX3Rs +dihUTFZfVFlQRV9DSEFOTkVMX0RBVEEsICRkYXRhKSk7IHBhY2tldF9hZGRfdGx2KCRwa3QsIGNy +ZWF0ZV90bHYoVExWX1RZUEVfTEVOR1RILCBzdHJsZW4oJGRhdGEpKSk7IHBhY2tldF9hZGRfdGx2 +KCRwa3QsIGNyZWF0ZV90bHYoVExWX1RZUEVfUkVRVUVTVF9JRCwgZ2VuZXJhdGVfcmVxX2lkKCkp +KTsgcGFja2V0X2FkZF90bHYoJHBrdCwgY3JlYXRlX3RsdihUTFZfVFlQRV9VVUlELCAkR0xPQkFM +U1snVVVJRCddKSk7ICRwa3QgPSBwYWNrKCJOIiwgc3RybGVuKCRwa3QpICsgNCkgLiAkcGt0OyBy +ZXR1cm4gJHBrdDsgfSBmdW5jdGlvbiBjcmVhdGVfcmVzcG9uc2UoJHJlcSkgeyBnbG9iYWwgJGlk +MmY7ICRwa3QgPSBwYWNrKCJOIiwgUEFDS0VUX1RZUEVfUkVTUE9OU0UpOyAkY29tbWFuZF9pZF90 +bHYgPSBwYWNrZXRfZ2V0X3RsdigkcmVxLCBUTFZfVFlQRV9DT01NQU5EX0lEKTsgbXlfcHJpbnQo +ImNvbW1hbmQgaWQgaXMgeyRjb21tYW5kX2lkX3RsdlsndmFsdWUnXX0iKTsgcGFja2V0X2FkZF90 +bHYoJHBrdCwgJGNvbW1hbmRfaWRfdGx2KTsgJHJlcWlkX3RsdiA9IHBhY2tldF9nZXRfdGx2KCRy +ZXEsIFRMVl9UWVBFX1JFUVVFU1RfSUQpOyBwYWNrZXRfYWRkX3RsdigkcGt0LCAkcmVxaWRfdGx2 +KTsgJGNvbW1hbmRfaGFuZGxlciA9ICRpZDJmWyRjb21tYW5kX2lkX3RsdlsndmFsdWUnXV07IGlm +IChpc19jYWxsYWJsZSgkY29tbWFuZF9oYW5kbGVyKSkgeyAkcmVzdWx0ID0gJGNvbW1hbmRfaGFu +ZGxlcigkcmVxLCAkcGt0KTsgfSBlbHNlIHsgbXlfcHJpbnQoIkdvdCBhIHJlcXVlc3QgZm9yIHNv +bWV0aGluZyBJIGRvbid0IGtub3cgaG93IHRvIGhhbmRsZSAoIiAuICRjb21tYW5kX2lkX3Rsdlsn +dmFsdWUnXSAuICIgLyAiLiAkY29tbWFuZF9oYW5kbGVyIC4iKSwgcmV0dXJuaW5nIGZhaWx1cmUi +KTsgJHJlc3VsdCA9IEVSUk9SX0ZBSUxVUkU7IH0gcGFja2V0X2FkZF90bHYoJHBrdCwgY3JlYXRl +X3RsdihUTFZfVFlQRV9SRVNVTFQsICRyZXN1bHQpKTsgcGFja2V0X2FkZF90bHYoJHBrdCwgY3Jl +YXRlX3RsdihUTFZfVFlQRV9VVUlELCAkR0xPQkFMU1snVVVJRCddKSk7ICRwa3QgPSBwYWNrKCJO +Iiwgc3RybGVuKCRwa3QpICsgNCkgLiAkcGt0OyByZXR1cm4gJHBrdDsgfSBmdW5jdGlvbiBjcmVh +dGVfdGx2KCR0eXBlLCAkdmFsKSB7IHJldHVybiBhcnJheSggJ3R5cGUnID0+ICR0eXBlLCAndmFs +dWUnID0+ICR2YWwgKTsgfSBmdW5jdGlvbiB0bHZfcGFjaygkdGx2KSB7ICRyZXQgPSAiIjsgaWYg +KCgkdGx2Wyd0eXBlJ10gJiBUTFZfTUVUQV9UWVBFX1NUUklORykgPT0gVExWX01FVEFfVFlQRV9T +VFJJTkcpIHsgJHJldCA9IHBhY2soIk5OYSoiLCA4ICsgc3RybGVuKCR0bHZbJ3ZhbHVlJ10pKzEs +ICR0bHZbJ3R5cGUnXSwgJHRsdlsndmFsdWUnXSAuICJcMCIpOyB9IGVsc2VpZiAoKCR0bHZbJ3R5 +cGUnXSAmIFRMVl9NRVRBX1RZUEVfUVdPUkQpID09IFRMVl9NRVRBX1RZUEVfUVdPUkQpIHsgJGhp +ID0gKCR0bHZbJ3ZhbHVlJ10gPj4gMzIpICYgMHhGRkZGRkZGRjsgJGxvID0gJHRsdlsndmFsdWUn +XSAmIDB4RkZGRkZGRkY7ICRyZXQgPSBwYWNrKCJOTk5OIiwgOCArIDgsICR0bHZbJ3R5cGUnXSwg +JGhpLCAkbG8pOyB9IGVsc2VpZiAoKCR0bHZbJ3R5cGUnXSAmIFRMVl9NRVRBX1RZUEVfVUlOVCkg +PT0gVExWX01FVEFfVFlQRV9VSU5UKSB7ICRyZXQgPSBwYWNrKCJOTk4iLCA4ICsgNCwgJHRsdlsn +dHlwZSddLCAkdGx2Wyd2YWx1ZSddKTsgfSBlbHNlaWYgKCgkdGx2Wyd0eXBlJ10gJiBUTFZfTUVU +QV9UWVBFX0JPT0wpID09IFRMVl9NRVRBX1RZUEVfQk9PTCkgeyAkcmV0ID0gcGFjaygiTk4iLCA4 +ICsgMSwgJHRsdlsndHlwZSddKTsgJHJldCAuPSAkdGx2Wyd2YWx1ZSddID8gIlx4MDEiIDogIlx4 +MDAiOyB9IGVsc2VpZiAoKCR0bHZbJ3R5cGUnXSAmIFRMVl9NRVRBX1RZUEVfUkFXKSA9PSBUTFZf +TUVUQV9UWVBFX1JBVykgeyAkcmV0ID0gcGFjaygiTk4iLCA4ICsgc3RybGVuKCR0bHZbJ3ZhbHVl +J10pLCAkdGx2Wyd0eXBlJ10pIC4gJHRsdlsndmFsdWUnXTsgfSBlbHNlaWYgKCgkdGx2Wyd0eXBl +J10gJiBUTFZfTUVUQV9UWVBFX0dST1VQKSA9PSBUTFZfTUVUQV9UWVBFX0dST1VQKSB7ICRyZXQg +PSBwYWNrKCJOTiIsIDggKyBzdHJsZW4oJHRsdlsndmFsdWUnXSksICR0bHZbJ3R5cGUnXSkgLiAk +dGx2Wyd2YWx1ZSddOyB9IGVsc2VpZiAoKCR0bHZbJ3R5cGUnXSAmIFRMVl9NRVRBX1RZUEVfQ09N +UExFWCkgPT0gVExWX01FVEFfVFlQRV9DT01QTEVYKSB7ICRyZXQgPSBwYWNrKCJOTiIsIDggKyBz +dHJsZW4oJHRsdlsndmFsdWUnXSksICR0bHZbJ3R5cGUnXSkgLiAkdGx2Wyd2YWx1ZSddOyB9IGVs +c2UgeyBteV9wcmludCgiRG9uJ3Qga25vdyBob3cgdG8gbWFrZSBhIHRsdiBvZiB0eXBlICIuICR0 +bHZbJ3R5cGUnXSAuICIgKG1ldGEgdHlwZSAiLiBzcHJpbnRmKCIlMDh4IiwgJHRsdlsndHlwZSdd +ICYgVExWX01FVEFfVFlQRV9NQVNLKSAuIiksIHd0ZiIpOyB9IHJldHVybiAkcmV0OyB9IGZ1bmN0 +aW9uIHRsdl91bnBhY2soJHJhd190bHYpIHsgJHRsdiA9IHVucGFjaygiTmxlbi9OdHlwZSIsIHN1 +YnN0cigkcmF3X3RsdiwgMCwgOCkpOyAkdHlwZSA9ICR0bHZbJ3R5cGUnXTsgbXlfcHJpbnQoImxl +bjogeyR0bHZbJ2xlbiddfSwgdHlwZTogeyR0bHZbJ3R5cGUnXX0iKTsgaWYgKCgkdHlwZSAmIFRM +Vl9NRVRBX1RZUEVfU1RSSU5HKSA9PSBUTFZfTUVUQV9UWVBFX1NUUklORykgeyAkdGx2ID0gdW5w +YWNrKCJObGVuL050eXBlL2EqdmFsdWUiLCBzdWJzdHIoJHJhd190bHYsIDAsICR0bHZbJ2xlbidd +KSk7ICR0bHZbJ3ZhbHVlJ10gPSBzdHJfcmVwbGFjZSgiXDAiLCAiIiwgJHRsdlsndmFsdWUnXSk7 +IH0gZWxzZWlmICgoJHR5cGUgJiBUTFZfTUVUQV9UWVBFX1VJTlQpID09IFRMVl9NRVRBX1RZUEVf +VUlOVCkgeyAkdGx2ID0gdW5wYWNrKCJObGVuL050eXBlL052YWx1ZSIsIHN1YnN0cigkcmF3X3Rs +diwgMCwgJHRsdlsnbGVuJ10pKTsgfSBlbHNlaWYgKCgkdHlwZSAmIFRMVl9NRVRBX1RZUEVfUVdP +UkQpID09IFRMVl9NRVRBX1RZUEVfUVdPUkQpIHsgJHRsdiA9IHVucGFjaygiTmxlbi9OdHlwZS9O +aGkvTmxvIiwgc3Vic3RyKCRyYXdfdGx2LCAwLCAkdGx2WydsZW4nXSkpOyAkdGx2Wyd2YWx1ZSdd +ID0gJHRsdlsnaGknXSA8PCAzMiB8ICR0bHZbJ2xvJ107IH0gZWxzZWlmICgoJHR5cGUgJiBUTFZf +TUVUQV9UWVBFX0JPT0wpID09IFRMVl9NRVRBX1RZUEVfQk9PTCkgeyAkdGx2ID0gdW5wYWNrKCJO +bGVuL050eXBlL2N2YWx1ZSIsIHN1YnN0cigkcmF3X3RsdiwgMCwgJHRsdlsnbGVuJ10pKTsgfSBl +bHNlaWYgKCgkdHlwZSAmIFRMVl9NRVRBX1RZUEVfUkFXKSA9PSBUTFZfTUVUQV9UWVBFX1JBVykg +eyAkdGx2ID0gdW5wYWNrKCJObGVuL050eXBlIiwgJHJhd190bHYpOyAkdGx2Wyd2YWx1ZSddID0g +c3Vic3RyKCRyYXdfdGx2LCA4LCAkdGx2WydsZW4nXS04KTsgfSBlbHNlIHsgbXlfcHJpbnQoIld0 +ZiB0eXBlIGlzIHRoaXM/ICR0eXBlIik7ICR0bHYgPSBudWxsOyB9IHJldHVybiAkdGx2OyB9IGZ1 +bmN0aW9uIHBhY2tldF9hZGRfdGx2KCYkcGt0LCAkdGx2KSB7ICRwa3QgLj0gdGx2X3BhY2soJHRs +dik7IH0gZnVuY3Rpb24gcGFja2V0X2dldF90bHYoJHBrdCwgJHR5cGUpIHsgJG9mZnNldCA9IDg7 +IHdoaWxlICgkb2Zmc2V0IDwgc3RybGVuKCRwa3QpKSB7ICR0bHYgPSB0bHZfdW5wYWNrKHN1YnN0 +cigkcGt0LCAkb2Zmc2V0KSk7IGlmICgkdHlwZSA9PSAoJHRsdlsndHlwZSddICYgflRMVl9NRVRB +X1RZUEVfQ09NUFJFU1NFRCkpIHsgcmV0dXJuICR0bHY7IH0gJG9mZnNldCArPSAkdGx2WydsZW4n +XTsgfSByZXR1cm4gbnVsbDsgfSBmdW5jdGlvbiBwYWNrZXRfZ2V0X2FsbF90bHZzKCRwa3QsICR0 +eXBlKSB7IG15X3ByaW50KCJMb29raW5nIGZvciBhbGwgdGx2cyBvZiB0eXBlICR0eXBlIik7ICRv +ZmZzZXQgPSA4OyAkYWxsID0gYXJyYXkoKTsgd2hpbGUgKCRvZmZzZXQgPCBzdHJsZW4oJHBrdCkp +IHsgJHRsdiA9IHRsdl91bnBhY2soc3Vic3RyKCRwa3QsICRvZmZzZXQpKTsgaWYgKCR0bHYgPT0g +TlVMTCkgeyBicmVhazsgfSBteV9wcmludCgibGVuOiB7JHRsdlsnbGVuJ119LCB0eXBlOiB7JHRs +dlsndHlwZSddfSIpOyBpZiAoZW1wdHkoJHR5cGUpIHx8ICR0eXBlID09ICgkdGx2Wyd0eXBlJ10g +JiB+VExWX01FVEFfVFlQRV9DT01QUkVTU0VEKSkgeyBteV9wcmludCgiRm91bmQgb25lIGF0IG9m +ZnNldCAkb2Zmc2V0Iik7IGFycmF5X3B1c2goJGFsbCwgJHRsdik7IH0gJG9mZnNldCArPSAkdGx2 +WydsZW4nXTsgfSByZXR1cm4gJGFsbDsgfSBmdW5jdGlvbiByZWdpc3Rlcl9zb2NrZXQoJHNvY2ss +ICRpcGFkZHI9bnVsbCwgJHBvcnQ9bnVsbCkgeyBnbG9iYWwgJHJlc291cmNlX3R5cGVfbWFwLCAk +dWRwX2hvc3RfbWFwOyBteV9wcmludCgiUmVnaXN0ZXJpbmcgc29ja2V0ICRzb2NrIGZvciAoJGlw +YWRkcjokcG9ydCkiKTsgJHJlc291cmNlX3R5cGVfbWFwWyhpbnQpJHNvY2tdID0gJ3NvY2tldCc7 +IGlmICgkaXBhZGRyKSB7ICR1ZHBfaG9zdF9tYXBbKGludCkkc29ja10gPSBhcnJheSgkaXBhZGRy +LCAkcG9ydCk7IH0gfSBmdW5jdGlvbiByZWdpc3Rlcl9zdHJlYW0oJHN0cmVhbSwgJGlwYWRkcj1u +dWxsLCAkcG9ydD1udWxsKSB7IGdsb2JhbCAkcmVzb3VyY2VfdHlwZV9tYXAsICR1ZHBfaG9zdF9t +YXA7IG15X3ByaW50KCJSZWdpc3RlcmluZyBzdHJlYW0gJHN0cmVhbSBmb3IgKCRpcGFkZHI6JHBv +cnQpIik7ICRyZXNvdXJjZV90eXBlX21hcFsoaW50KSRzdHJlYW1dID0gJ3N0cmVhbSc7IGlmICgk +aXBhZGRyKSB7ICR1ZHBfaG9zdF9tYXBbKGludCkkc3RyZWFtXSA9IGFycmF5KCRpcGFkZHIsICRw +b3J0KTsgfSB9IGZ1bmN0aW9uIGNvbm5lY3QoJGlwYWRkciwgJHBvcnQsICRwcm90bz0ndGNwJykg +eyBteV9wcmludCgiRG9pbmcgY29ubmVjdCgkaXBhZGRyLCAkcG9ydCkiKTsgJHNvY2sgPSBmYWxz +ZTsgJGlwZiA9IFdJTl9BRl9JTkVUOyAkcmF3X2lwID0gJGlwYWRkcjsgaWYgKEZBTFNFICE9PSBz +dHJwb3MoJGlwYWRkciwgIjoiKSkgeyAkaXBmID0gV0lOX0FGX0lORVQ2OyAkaXBhZGRyID0gIlsi +LiAkcmF3X2lwIC4iXSI7IH0gaWYgKGlzX2NhbGxhYmxlKCdzdHJlYW1fc29ja2V0X2NsaWVudCcp +KSB7IG15X3ByaW50KCJzdHJlYW1fc29ja2V0X2NsaWVudCh7JHByb3RvfTovL3skaXBhZGRyfTp7 +JHBvcnR9KSIpOyBpZiAoJHByb3RvID09ICdzc2wnKSB7ICRzb2NrID0gc3RyZWFtX3NvY2tldF9j +bGllbnQoInNzbDovL3skaXBhZGRyfTp7JHBvcnR9IiwgJGVycm5vLCAkZXJyc3RyLCA1LCBTVFJF +QU1fQ0xJRU5UX0FTWU5DX0NPTk5FQ1QpOyBpZiAoISRzb2NrKSB7IHJldHVybiBmYWxzZTsgfSBz +dHJlYW1fc2V0X2Jsb2NraW5nKCRzb2NrLCAwKTsgcmVnaXN0ZXJfc3RyZWFtKCRzb2NrKTsgfSBl +bHNlaWYgKCRwcm90byA9PSAndGNwJykgeyAkc29jayA9IHN0cmVhbV9zb2NrZXRfY2xpZW50KCJ0 +Y3A6Ly97JGlwYWRkcn06eyRwb3J0fSIpOyBpZiAoISRzb2NrKSB7IHJldHVybiBmYWxzZTsgfSBy +ZWdpc3Rlcl9zdHJlYW0oJHNvY2spOyB9IGVsc2VpZiAoJHByb3RvID09ICd1ZHAnKSB7ICRzb2Nr +ID0gc3RyZWFtX3NvY2tldF9jbGllbnQoInVkcDovL3skaXBhZGRyfTp7JHBvcnR9Iik7IGlmICgh +JHNvY2spIHsgcmV0dXJuIGZhbHNlOyB9IHJlZ2lzdGVyX3N0cmVhbSgkc29jaywgJGlwYWRkciwg +JHBvcnQpOyB9IH0gZWxzZSBpZiAoaXNfY2FsbGFibGUoJ2Zzb2Nrb3BlbicpKSB7IG15X3ByaW50 +KCJmc29ja29wZW4iKTsgaWYgKCRwcm90byA9PSAnc3NsJykgeyAkc29jayA9IGZzb2Nrb3Blbigi +c3NsOi8veyRpcGFkZHJ9OnskcG9ydH0iKTsgc3RyZWFtX3NldF9ibG9ja2luZygkc29jaywgMCk7 +IHJlZ2lzdGVyX3N0cmVhbSgkc29jayk7IH0gZWxzZWlmICgkcHJvdG8gPT0gJ3RjcCcpIHsgJHNv +Y2sgPSBmc29ja29wZW4oJGlwYWRkciwgJHBvcnQpOyBpZiAoISRzb2NrKSB7IHJldHVybiBmYWxz +ZTsgfSBpZiAoaXNfY2FsbGFibGUoJ3NvY2tldF9zZXRfdGltZW91dCcpKSB7IHNvY2tldF9zZXRf +dGltZW91dCgkc29jaywgMik7IH0gcmVnaXN0ZXJfc3RyZWFtKCRzb2NrKTsgfSBlbHNlIHsgJHNv +Y2sgPSBmc29ja29wZW4oJHByb3RvLiI6Ly8iLiRpcGFkZHIsJHBvcnQpOyBpZiAoISRzb2NrKSB7 +IHJldHVybiBmYWxzZTsgfSByZWdpc3Rlcl9zdHJlYW0oJHNvY2ssICRpcGFkZHIsICRwb3J0KTsg +fSB9IGVsc2UgaWYgKGlzX2NhbGxhYmxlKCdzb2NrZXRfY3JlYXRlJykpIHsgbXlfcHJpbnQoInNv +Y2tldF9jcmVhdGUiKTsgaWYgKCRwcm90byA9PSAndGNwJykgeyAkc29jayA9IHNvY2tldF9jcmVh +dGUoJGlwZiwgU09DS19TVFJFQU0sIFNPTF9UQ1ApOyAkcmVzID0gc29ja2V0X2Nvbm5lY3QoJHNv +Y2ssICRyYXdfaXAsICRwb3J0KTsgaWYgKCEkcmVzKSB7IHJldHVybiBmYWxzZTsgfSByZWdpc3Rl +cl9zb2NrZXQoJHNvY2spOyB9IGVsc2VpZiAoJHByb3RvID09ICd1ZHAnKSB7ICRzb2NrID0gc29j +a2V0X2NyZWF0ZSgkaXBmLCBTT0NLX0RHUkFNLCBTT0xfVURQKTsgcmVnaXN0ZXJfc29ja2V0KCRz +b2NrLCAkcmF3X2lwLCAkcG9ydCk7IH0gfSByZXR1cm4gJHNvY2s7IH0gZnVuY3Rpb24gZW9mKCRy +ZXNvdXJjZSkgeyAkcmV0ID0gZmFsc2U7IHN3aXRjaCAoZ2V0X3J0eXBlKCRyZXNvdXJjZSkpIHsg +Y2FzZSAnc29ja2V0JzogYnJlYWs7IGNhc2UgJ3N0cmVhbSc6ICRyZXQgPSBmZW9mKCRyZXNvdXJj +ZSk7IGJyZWFrOyB9IHJldHVybiAkcmV0OyB9IGZ1bmN0aW9uIGNsb3NlKCRyZXNvdXJjZSkgeyBt +eV9wcmludCgiQ2xvc2luZyByZXNvdXJjZSAkcmVzb3VyY2UiKTsgZ2xvYmFsICRyZXNvdXJjZV90 +eXBlX21hcCwgJHVkcF9ob3N0X21hcDsgcmVtb3ZlX3JlYWRlcigkcmVzb3VyY2UpOyBzd2l0Y2gg +KGdldF9ydHlwZSgkcmVzb3VyY2UpKSB7IGNhc2UgJ3NvY2tldCc6ICRyZXQgPSBzb2NrZXRfY2xv +c2UoJHJlc291cmNlKTsgYnJlYWs7IGNhc2UgJ3N0cmVhbSc6ICRyZXQgPSBmY2xvc2UoJHJlc291 +cmNlKTsgYnJlYWs7IH0gaWYgKGFycmF5X2tleV9leGlzdHMoKGludCkkcmVzb3VyY2UsICRyZXNv +dXJjZV90eXBlX21hcCkpIHsgdW5zZXQoJHJlc291cmNlX3R5cGVfbWFwWyhpbnQpJHJlc291cmNl +XSk7IH0gaWYgKGFycmF5X2tleV9leGlzdHMoKGludCkkcmVzb3VyY2UsICR1ZHBfaG9zdF9tYXAp +KSB7IG15X3ByaW50KCJSZW1vdmluZyAkcmVzb3VyY2UgZnJvbSB1ZHBfaG9zdF9tYXAiKTsgdW5z +ZXQoJHVkcF9ob3N0X21hcFsoaW50KSRyZXNvdXJjZV0pOyB9IHJldHVybiAkcmV0OyB9IGZ1bmN0 +aW9uIHJlYWQoJHJlc291cmNlLCAkbGVuPW51bGwpIHsgZ2xvYmFsICR1ZHBfaG9zdF9tYXA7IGlm +IChpc19udWxsKCRsZW4pKSB7ICRsZW4gPSA4MTkyOyB9ICRidWZmID0gJyc7IHN3aXRjaCAoZ2V0 +X3J0eXBlKCRyZXNvdXJjZSkpIHsgY2FzZSAnc29ja2V0JzogaWYgKGFycmF5X2tleV9leGlzdHMo +KGludCkkcmVzb3VyY2UsICR1ZHBfaG9zdF9tYXApKSB7IG15X3ByaW50KCJSZWFkaW5nIFVEUCBz +b2NrZXQiKTsgbGlzdCgkaG9zdCwkcG9ydCkgPSAkdWRwX2hvc3RfbWFwWyhpbnQpJHJlc291cmNl +XTsgc29ja2V0X3JlY3Zmcm9tKCRyZXNvdXJjZSwgJGJ1ZmYsICRsZW4sIFBIUF9CSU5BUllfUkVB +RCwgJGhvc3QsICRwb3J0KTsgfSBlbHNlIHsgbXlfcHJpbnQoIlJlYWRpbmcgVENQIHNvY2tldCIp +OyAkYnVmZiAuPSBzb2NrZXRfcmVhZCgkcmVzb3VyY2UsICRsZW4sIFBIUF9CSU5BUllfUkVBRCk7 +IH0gYnJlYWs7IGNhc2UgJ3N0cmVhbSc6IGdsb2JhbCAkbXNnc29jazsgJHIgPSBBcnJheSgkcmVz +b3VyY2UpOyBteV9wcmludCgiQ2FsbGluZyBzZWxlY3QgdG8gc2VlIGlmIHRoZXJlJ3MgZGF0YSBv +biAkcmVzb3VyY2UiKTsgJGxhc3RfcmVxdWVzdGVkX2xlbiA9IDA7IHdoaWxlICh0cnVlKSB7ICR3 +PU5VTEw7JGU9TlVMTDskdD0wOyAkY250ID0gc3RyZWFtX3NlbGVjdCgkciwgJHcsICRlLCAkdCk7 +IGlmICgkY250ID09PSAwKSB7IGJyZWFrOyB9IGlmICgkY250ID09PSBmYWxzZSBvciBmZW9mKCRy +ZXNvdXJjZSkpIHsgbXlfcHJpbnQoIkNoZWNraW5nIGZvciBmYWlsZWQgcmVhZC4uLiIpOyBpZiAo +ZW1wdHkoJGJ1ZmYpKSB7IG15X3ByaW50KCItLS0tIEVPRiBPTiAkcmVzb3VyY2UgLS0tLSIpOyAk +YnVmZiA9IGZhbHNlOyB9IGJyZWFrOyB9ICRtZCA9IHN0cmVhbV9nZXRfbWV0YV9kYXRhKCRyZXNv +dXJjZSk7IGR1bXBfYXJyYXkoJG1kLCAiTWV0YWRhdGEgZm9yIHskcmVzb3VyY2V9Iik7IGlmICgk +bWRbJ3VucmVhZF9ieXRlcyddID4gMCkgeyAkbGFzdF9yZXF1ZXN0ZWRfbGVuID0gbWluKCRsZW4s +ICRtZFsndW5yZWFkX2J5dGVzJ10pOyAkYnVmZiAuPSBmcmVhZCgkcmVzb3VyY2UsICRsYXN0X3Jl +cXVlc3RlZF9sZW4pOyBicmVhazsgfSBlbHNlIHsgJHRtcCA9IGZyZWFkKCRyZXNvdXJjZSwgJGxl +bik7ICRsYXN0X3JlcXVlc3RlZF9sZW4gPSAkbGVuOyAkYnVmZiAuPSAkdG1wOyBpZiAoc3RybGVu +KCR0bXApIDwgJGxlbikgeyBicmVhazsgfSB9IGlmICgkcmVzb3VyY2UgIT0gJG1zZ3NvY2spIHsg +bXlfcHJpbnQoImJ1ZmY6ICckYnVmZiciKTsgfSAkciA9IEFycmF5KCRyZXNvdXJjZSk7IH0gbXlf +cHJpbnQoc3ByaW50ZigiRG9uZSB3aXRoIHRoZSBiaWcgcmVhZCBsb29wIG9uICRyZXNvdXJjZSwg +Z290ICVkIGJ5dGVzLCBhc2tlZCBmb3IgJWQgYnl0ZXMiLCBzdHJsZW4oJGJ1ZmYpLCAkbGFzdF9y +ZXF1ZXN0ZWRfbGVuKSk7IGJyZWFrOyBkZWZhdWx0OiAkY2lkID0gZ2V0X2NoYW5uZWxfaWRfZnJv +bV9yZXNvdXJjZSgkcmVzb3VyY2UpOyAkYyA9IGdldF9jaGFubmVsX2J5X2lkKCRjaWQpOyBpZiAo +JGMgYW5kICRjWydkYXRhJ10pIHsgJGJ1ZmYgPSBzdWJzdHIoJGNbJ2RhdGEnXSwgMCwgJGxlbik7 +ICRjWydkYXRhJ10gPSBzdWJzdHIoJGNbJ2RhdGEnXSwgJGxlbik7IG15X3ByaW50KCJBaGEhIGdv +dCBzb21lIGxlZnRvdmVycyIpOyB9IGVsc2UgeyBteV9wcmludCgiV3RmIGRvbid0IGtub3cgaG93 +IHRvIHJlYWQgZnJvbSByZXNvdXJjZSAkcmVzb3VyY2UsIGM6ICRjIik7IGlmIChpc19hcnJheSgk +YykpIHsgZHVtcF9hcnJheSgkYyk7IH0gYnJlYWs7IH0gfSBteV9wcmludChzcHJpbnRmKCJSZWFk +ICVkIGJ5dGVzIiwgc3RybGVuKCRidWZmKSkpOyByZXR1cm4gJGJ1ZmY7IH0gZnVuY3Rpb24gd3Jp +dGUoJHJlc291cmNlLCAkYnVmZiwgJGxlbj0wKSB7IGdsb2JhbCAkdWRwX2hvc3RfbWFwOyBpZiAo +JGxlbiA9PSAwKSB7ICRsZW4gPSBzdHJsZW4oJGJ1ZmYpOyB9ICRjb3VudCA9IGZhbHNlOyBzd2l0 +Y2ggKGdldF9ydHlwZSgkcmVzb3VyY2UpKSB7IGNhc2UgJ3NvY2tldCc6IGlmIChhcnJheV9rZXlf +ZXhpc3RzKChpbnQpJHJlc291cmNlLCAkdWRwX2hvc3RfbWFwKSkgeyBteV9wcmludCgiV3JpdGlu +ZyBVRFAgc29ja2V0Iik7IGxpc3QoJGhvc3QsJHBvcnQpID0gJHVkcF9ob3N0X21hcFsoaW50KSRy +ZXNvdXJjZV07ICRjb3VudCA9IHNvY2tldF9zZW5kdG8oJHJlc291cmNlLCAkYnVmZiwgJGxlbiwg +JGhvc3QsICRwb3J0KTsgfSBlbHNlIHsgJGNvdW50ID0gc29ja2V0X3dyaXRlKCRyZXNvdXJjZSwg +JGJ1ZmYsICRsZW4pOyB9IGJyZWFrOyBjYXNlICdzdHJlYW0nOiAkY291bnQgPSBmd3JpdGUoJHJl +c291cmNlLCAkYnVmZiwgJGxlbik7IGZmbHVzaCgkcmVzb3VyY2UpOyBicmVhazsgZGVmYXVsdDog +bXlfcHJpbnQoIld0ZiBkb24ndCBrbm93IGhvdyB0byB3cml0ZSB0byByZXNvdXJjZSAkcmVzb3Vy +Y2UiKTsgYnJlYWs7IH0gcmV0dXJuICRjb3VudDsgfSBmdW5jdGlvbiBnZXRfcnR5cGUoJHJlc291 +cmNlKSB7IGdsb2JhbCAkcmVzb3VyY2VfdHlwZV9tYXA7IGlmIChhcnJheV9rZXlfZXhpc3RzKChp +bnQpJHJlc291cmNlLCAkcmVzb3VyY2VfdHlwZV9tYXApKSB7IHJldHVybiAkcmVzb3VyY2VfdHlw +ZV9tYXBbKGludCkkcmVzb3VyY2VdOyB9IHJldHVybiBmYWxzZTsgfSBmdW5jdGlvbiBzZWxlY3Qo +JiRyLCAmJHcsICYkZSwgJHR2X3NlYz0wLCAkdHZfdXNlYz0wKSB7ICRzdHJlYW1zX3IgPSBhcnJh +eSgpOyAkc3RyZWFtc193ID0gYXJyYXkoKTsgJHN0cmVhbXNfZSA9IGFycmF5KCk7ICRzb2NrZXRz +X3IgPSBhcnJheSgpOyAkc29ja2V0c193ID0gYXJyYXkoKTsgJHNvY2tldHNfZSA9IGFycmF5KCk7 +IGlmICgkcikgeyBmb3JlYWNoICgkciBhcyAkcmVzb3VyY2UpIHsgc3dpdGNoIChnZXRfcnR5cGUo +JHJlc291cmNlKSkgeyBjYXNlICdzb2NrZXQnOiAkc29ja2V0c19yW10gPSAkcmVzb3VyY2U7IGJy +ZWFrOyBjYXNlICdzdHJlYW0nOiAkc3RyZWFtc19yW10gPSAkcmVzb3VyY2U7IGJyZWFrOyBkZWZh +dWx0OiBteV9wcmludCgiVW5rbm93biByZXNvdXJjZSB0eXBlIik7IGJyZWFrOyB9IH0gfSBpZiAo +JHcpIHsgZm9yZWFjaCAoJHcgYXMgJHJlc291cmNlKSB7IHN3aXRjaCAoZ2V0X3J0eXBlKCRyZXNv +dXJjZSkpIHsgY2FzZSAnc29ja2V0JzogJHNvY2tldHNfd1tdID0gJHJlc291cmNlOyBicmVhazsg +Y2FzZSAnc3RyZWFtJzogJHN0cmVhbXNfd1tdID0gJHJlc291cmNlOyBicmVhazsgZGVmYXVsdDog +bXlfcHJpbnQoIlVua25vd24gcmVzb3VyY2UgdHlwZSIpOyBicmVhazsgfSB9IH0gaWYgKCRlKSB7 +IGZvcmVhY2ggKCRlIGFzICRyZXNvdXJjZSkgeyBzd2l0Y2ggKGdldF9ydHlwZSgkcmVzb3VyY2Up +KSB7IGNhc2UgJ3NvY2tldCc6ICRzb2NrZXRzX2VbXSA9ICRyZXNvdXJjZTsgYnJlYWs7IGNhc2Ug +J3N0cmVhbSc6ICRzdHJlYW1zX2VbXSA9ICRyZXNvdXJjZTsgYnJlYWs7IGRlZmF1bHQ6IG15X3By +aW50KCJVbmtub3duIHJlc291cmNlIHR5cGUiKTsgYnJlYWs7IH0gfSB9ICRuX3NvY2tldHMgPSBj +b3VudCgkc29ja2V0c19yKSArIGNvdW50KCRzb2NrZXRzX3cpICsgY291bnQoJHNvY2tldHNfZSk7 +ICRuX3N0cmVhbXMgPSBjb3VudCgkc3RyZWFtc19yKSArIGNvdW50KCRzdHJlYW1zX3cpICsgY291 +bnQoJHN0cmVhbXNfZSk7ICRyID0gYXJyYXkoKTsgJHcgPSBhcnJheSgpOyAkZSA9IGFycmF5KCk7 +IGlmIChjb3VudCgkc29ja2V0c19yKT09MCkgeyAkc29ja2V0c19yID0gbnVsbDsgfSBpZiAoY291 +bnQoJHNvY2tldHNfdyk9PTApIHsgJHNvY2tldHNfdyA9IG51bGw7IH0gaWYgKGNvdW50KCRzb2Nr +ZXRzX2UpPT0wKSB7ICRzb2NrZXRzX2UgPSBudWxsOyB9IGlmIChjb3VudCgkc3RyZWFtc19yKT09 +MCkgeyAkc3RyZWFtc19yID0gbnVsbDsgfSBpZiAoY291bnQoJHN0cmVhbXNfdyk9PTApIHsgJHN0 +cmVhbXNfdyA9IG51bGw7IH0gaWYgKGNvdW50KCRzdHJlYW1zX2UpPT0wKSB7ICRzdHJlYW1zX2Ug +PSBudWxsOyB9ICRjb3VudCA9IDA7IGlmICgkbl9zb2NrZXRzID4gMCkgeyAkcmVzID0gc29ja2V0 +X3NlbGVjdCgkc29ja2V0c19yLCAkc29ja2V0c193LCAkc29ja2V0c19lLCAkdHZfc2VjLCAkdHZf +dXNlYyk7IGlmIChmYWxzZSA9PT0gJHJlcykgeyByZXR1cm4gZmFsc2U7IH0gaWYgKGlzX2FycmF5 +KCRyKSAmJiBpc19hcnJheSgkc29ja2V0c19yKSkgeyAkciA9IGFycmF5X21lcmdlKCRyLCAkc29j +a2V0c19yKTsgfSBpZiAoaXNfYXJyYXkoJHcpICYmIGlzX2FycmF5KCRzb2NrZXRzX3cpKSB7ICR3 +ID0gYXJyYXlfbWVyZ2UoJHcsICRzb2NrZXRzX3cpOyB9IGlmIChpc19hcnJheSgkZSkgJiYgaXNf +YXJyYXkoJHNvY2tldHNfZSkpIHsgJGUgPSBhcnJheV9tZXJnZSgkZSwgJHNvY2tldHNfZSk7IH0g +JGNvdW50ICs9ICRyZXM7IH0gaWYgKCRuX3N0cmVhbXMgPiAwKSB7ICRyZXMgPSBzdHJlYW1fc2Vs +ZWN0KCRzdHJlYW1zX3IsICRzdHJlYW1zX3csICRzdHJlYW1zX2UsICR0dl9zZWMsICR0dl91c2Vj +KTsgaWYgKGZhbHNlID09PSAkcmVzKSB7IHJldHVybiBmYWxzZTsgfSBpZiAoaXNfYXJyYXkoJHIp +ICYmIGlzX2FycmF5KCRzdHJlYW1zX3IpKSB7ICRyID0gYXJyYXlfbWVyZ2UoJHIsICRzdHJlYW1z +X3IpOyB9IGlmIChpc19hcnJheSgkdykgJiYgaXNfYXJyYXkoJHN0cmVhbXNfdykpIHsgJHcgPSBh +cnJheV9tZXJnZSgkdywgJHN0cmVhbXNfdyk7IH0gaWYgKGlzX2FycmF5KCRlKSAmJiBpc19hcnJh +eSgkc3RyZWFtc19lKSkgeyAkZSA9IGFycmF5X21lcmdlKCRlLCAkc3RyZWFtc19lKTsgfSAkY291 +bnQgKz0gJHJlczsgfSByZXR1cm4gJGNvdW50OyB9IGZ1bmN0aW9uIGFkZF9yZWFkZXIoJHJlc291 +cmNlKSB7IGdsb2JhbCAkcmVhZGVyczsgaWYgKGlzX3Jlc291cmNlKCRyZXNvdXJjZSkgJiYgIWlu +X2FycmF5KCRyZXNvdXJjZSwgJHJlYWRlcnMpKSB7ICRyZWFkZXJzW10gPSAkcmVzb3VyY2U7IH0g +fSBmdW5jdGlvbiByZW1vdmVfcmVhZGVyKCRyZXNvdXJjZSkgeyBnbG9iYWwgJHJlYWRlcnM7IGlm +IChpbl9hcnJheSgkcmVzb3VyY2UsICRyZWFkZXJzKSkgeyBmb3JlYWNoICgkcmVhZGVycyBhcyAk +a2V5ID0+ICRyKSB7IGlmICgkciA9PSAkcmVzb3VyY2UpIHsgdW5zZXQoJHJlYWRlcnNbJGtleV0p +OyB9IH0gfSB9IG9iX2ltcGxpY2l0X2ZsdXNoKCk7IGlmIChNWV9ERUJVR0dJTkcpIHsgZXJyb3Jf +cmVwb3J0aW5nKEVfQUxMKTsgfSBlbHNlIHsgZXJyb3JfcmVwb3J0aW5nKDApOyB9IEBpZ25vcmVf +dXNlcl9hYm9ydCh0cnVlKTsgQHNldF90aW1lX2xpbWl0KDApOyBAaWdub3JlX3VzZXJfYWJvcnQo +MSk7IEBpbmlfc2V0KCdtYXhfZXhlY3V0aW9uX3RpbWUnLDApOyAkR0xPQkFMU1snVVVJRCddID0g +UEFZTE9BRF9VVUlEOyAkR0xPQkFMU1snU0VTU0lPTl9HVUlEJ10gPSBTRVNTSU9OX0dVSUQ7ICRH +TE9CQUxTWydBRVNfS0VZJ10gPSBudWxsOyAkR0xPQkFMU1snQUVTX0VOQUJMRUQnXSA9IGZhbHNl +OyBpZiAoIWlzc2V0KCRHTE9CQUxTWydtc2dzb2NrJ10pKSB7ICRpcGFkZHIgPSAnMTI3LjAuMC4x +JzsgJHBvcnQgPSA0NDQ0OyBteV9wcmludCgiRG9uJ3QgaGF2ZSBhIG1zZ3NvY2ssIHRyeWluZyB0 +byBjb25uZWN0KCRpcGFkZHIsICRwb3J0KSIpOyAkbXNnc29jayA9IGNvbm5lY3QoJGlwYWRkciwg +JHBvcnQpOyBpZiAoISRtc2dzb2NrKSB7IGRpZSgpOyB9IH0gZWxzZSB7ICRtc2dzb2NrID0gJEdM +T0JBTFNbJ21zZ3NvY2snXTsgJG1zZ3NvY2tfdHlwZSA9ICRHTE9CQUxTWydtc2dzb2NrX3R5cGUn +XTsgc3dpdGNoICgkbXNnc29ja190eXBlKSB7IGNhc2UgJ3NvY2tldCc6IHJlZ2lzdGVyX3NvY2tl +dCgkbXNnc29jayk7IGJyZWFrOyBjYXNlICdzdHJlYW0nOiBkZWZhdWx0OiByZWdpc3Rlcl9zdHJl +YW0oJG1zZ3NvY2spOyB9IH0gYWRkX3JlYWRlcigkbXNnc29jayk7ICRyPSRHTE9CQUxTWydyZWFk +ZXJzJ107ICR3PU5VTEw7JGU9TlVMTDskdD0xOyB3aGlsZSAoZmFsc2UgIT09ICgkY250ID0gc2Vs +ZWN0KCRyLCAkdywgJGUsICR0KSkpIHsgJHJlYWRfZmFpbGVkID0gZmFsc2U7IGZvciAoJGkgPSAw +OyAkaSA8ICRjbnQ7ICRpKyspIHsgJHJlYWR5ID0gJHJbJGldOyBpZiAoJHJlYWR5ID09ICRtc2dz +b2NrKSB7ICRwYWNrZXQgPSByZWFkKCRtc2dzb2NrLCAzMik7IG15X3ByaW50KHNwcmludGYoIlJl +YWQgcmV0dXJuZWQgJXMgYnl0ZXMiLCBzdHJsZW4oJHBhY2tldCkpKTsgaWYgKGZhbHNlPT0kcGFj +a2V0KSB7IG15X3ByaW50KCJSZWFkIGZhaWxlZCBvbiBtYWluIHNvY2tldCwgYmFpbGluZyIpOyBi +cmVhayAyOyB9ICR4b3IgPSBzdWJzdHIoJHBhY2tldCwgMCwgNCk7ICRoZWFkZXIgPSB4b3JfYnl0 +ZXMoJHhvciwgc3Vic3RyKCRwYWNrZXQsIDQsIDI4KSk7ICRsZW5fYXJyYXkgPSB1bnBhY2soIk5s +ZW4iLCBzdWJzdHIoJGhlYWRlciwgMjAsIDQpKTsgJGxlbiA9ICRsZW5fYXJyYXlbJ2xlbiddICsg +MzIgLSA4OyB3aGlsZSAoc3RybGVuKCRwYWNrZXQpIDwgJGxlbikgeyAkcGFja2V0IC49IHJlYWQo +JG1zZ3NvY2ssICRsZW4tc3RybGVuKCRwYWNrZXQpKTsgfSAkcmVzcG9uc2UgPSBjcmVhdGVfcmVz +cG9uc2UoZGVjcnlwdF9wYWNrZXQoeG9yX2J5dGVzKCR4b3IsICRwYWNrZXQpKSk7IHdyaXRlX3Rs +dl90b19zb2NrZXQoJG1zZ3NvY2ssICRyZXNwb25zZSk7IH0gZWxzZSB7ICRkYXRhID0gcmVhZCgk +cmVhZHkpOyBpZiAoZmFsc2UgPT09ICRkYXRhKSB7IGhhbmRsZV9kZWFkX3Jlc291cmNlX2NoYW5u +ZWwoJHJlYWR5KTsgfSBlbHNlaWYgKHN0cmxlbigkZGF0YSkgPiAwKXsgbXlfcHJpbnQoc3ByaW50 +ZigiUmVhZCByZXR1cm5lZCAlcyBieXRlcyIsIHN0cmxlbigkZGF0YSkpKTsgJHJlcXVlc3QgPSBo +YW5kbGVfcmVzb3VyY2VfcmVhZF9jaGFubmVsKCRyZWFkeSwgJGRhdGEpOyBpZiAoJHJlcXVlc3Qp +IHsgd3JpdGVfdGx2X3RvX3NvY2tldCgkbXNnc29jaywgJHJlcXVlc3QpOyB9IH0gfSB9ICRyID0g +JEdMT0JBTFNbJ3JlYWRlcnMnXTsgfSBteV9wcmludCgiRmluaXNoZWQiKTsgbXlfcHJpbnQoIi0t +LS0tLS0tLS0tLS0tLS0tLS0tIik7IGNsb3NlKCRtc2dzb2NrKTs= \ No newline at end of file