{"id":567,"date":"2026-05-15T00:34:32","date_gmt":"2026-05-15T00:34:32","guid":{"rendered":"https:\/\/menteymanzana.com\/?page_id=567"},"modified":"2026-05-17T23:53:57","modified_gmt":"2026-05-17T23:53:57","slug":"protocolo","status":"publish","type":"page","link":"https:\/\/menteymanzana.com\/en\/protocolo\/","title":{"rendered":"Protocolo"},"content":{"rendered":"\n<nav class=\"mym-breadcrumb\" aria-label=\"Breadcrumb\">\n  <a href=\"\/\">Volver al Inicio<\/a>\n  <span class=\"mym-breadcrumb-sep\">\/<\/span>\n  <span class=\"mym-breadcrumb-current\">Protocolo<\/span>\n<\/nav>\n\n\n\n<style>body.page-id-567 .entry-title, body.page-id-567 h1.entry-title, body.page-id-567 .page-title, body.page-id-567 main h1:first-of-type, body.page-id-567 article h1 { color: #ffffff !important; } body.page-id-567 .entry-title a, body.page-id-567 h1 a { color: #ffffff !important; }<\/style>\n\n\n<p>Hub del Protocolo de Soberan\u00eda Biol\u00f3gica de Mente &amp; Manzana.<\/p>\n\n\n<section class=\"mym-protocol-list\" aria-label=\"Protocolos disponibles\">\n  <h3 class=\"mym-protocol-list-title\">Protocolos disponibles<\/h3>\n  <a class=\"mym-protocol-item\" href=\"\/protocolo\/evaluacion-linea-base\/\">\n    <span class=\"mym-protocol-num\">01<\/span>\n    <span class=\"mym-protocol-label\">Evaluaci\u00f3n de L\u00ednea Base<\/span>\n    <span class=\"mym-protocol-arrow\">\u00bb<\/span>\n  <\/a>\n  <a class=\"mym-protocol-item\" href=\"\/protocolo\/arquitectura-nutricional\/\">\n    <span class=\"mym-protocol-num\">02<\/span>\n    <span class=\"mym-protocol-label\">Arquitectura Nutricional<\/span>\n    <span class=\"mym-protocol-arrow\">\u00bb<\/span>\n  <\/a>\n  <a class=\"mym-protocol-item\" href=\"\/protocolo\/calibracion-cognitiva\/\">\n    <span class=\"mym-protocol-num\">03<\/span>\n    <span class=\"mym-protocol-label\">Calibraci\u00f3n Cognitiva<\/span>\n    <span class=\"mym-protocol-arrow\">\u00bb<\/span>\n  <\/a>\n<\/section>\n\n\n\n<style id=\"mym-auditor-combobox-styles\">\n.auditor-combobox{position:relative;}\n.auditor-combobox-input{width:100%;padding-right:34px;}\n.auditor-combobox-toggle{position:absolute;right:6px;top:50%;transform:translateY(-50%);background:transparent;border:0;color:inherit;font-size:14px;line-height:1;cursor:pointer;padding:6px 8px;opacity:.65;}\n.auditor-combobox-toggle:hover{opacity:1;}\n.auditor-combobox-list{position:absolute;z-index:30;top:calc(100% + 4px);left:0;right:0;max-height:280px;overflow-y:auto;margin:0;padding:4px 0;list-style:none;background:#0d0d0d;border:1px solid rgba(204,255,0,.35);border-radius:8px;box-shadow:0 8px 24px rgba(0,0,0,.55);}\n.auditor-combobox-list li{padding:9px 14px;cursor:pointer;font-size:14px;color:#eaeaea;line-height:1.35;}\n.auditor-combobox-list li[aria-selected=\"true\"],.auditor-combobox-list li:hover{background:rgba(204,255,0,.12);color:#ccff00;}\n.auditor-combobox-list li.is-hidden{display:none;}\n.auditor-combobox-empty{margin:6px 2px 0;padding:8px 12px;font-size:13px;color:#ff8a8a;background:rgba(255,138,138,.08);border:1px solid rgba(255,138,138,.25);border-radius:6px;}\n.auditor-field-help{display:block;margin-top:4px;font-size:12px;opacity:.65;}\n#mym-auditor-edad:invalid:not(:placeholder-shown){border-color:#ff8a8a;}\n\n\/* ===== v4 Auditor\u00eda schema ===== *\/\n.mym-aud-head{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;border-bottom:1px solid rgba(204,255,0,.25);padding-bottom:10px;margin-bottom:14px;}\n.mym-aud-head h3{margin:0;font-size:16px;letter-spacing:.08em;text-transform:uppercase;color:#ccff00;font-weight:700;}\n.mym-badge{display:inline-block;padding:4px 12px;border-radius:999px;font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;white-space:nowrap;}\n.mym-badge-opt{background:#1e6f3a;color:#d6ffe6;}\n.mym-badge-sub{background:#7a6a1b;color:#fff7c2;}\n.mym-badge-pre{background:#8a1f1f;color:#ffd9d9;}\n.mym-badge-ind{background:#444;color:#cfcfcf;}\n.mym-flags{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:14px;}\n.mym-flag{display:inline-flex;align-items:center;gap:6px;padding:5px 10px;border-radius:6px;font-size:12px;background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.12);color:#e6e6e6;}\n.mym-flag-urg{background:rgba(170,30,30,.18);border-color:rgba(255,90,90,.45);color:#ffd0d0;}\n.mym-flag-low{background:rgba(170,140,30,.15);border-color:rgba(255,200,80,.4);color:#ffe9b8;}\n.mym-aud-intro{font-size:14.5px;line-height:1.6;margin:0 0 18px;color:#e6e6e6;}\n.mym-aud-neutral{font-size:13px;color:#a8a8a8;font-style:italic;margin:0 0 18px;}\n.mym-patrones,.mym-bios,.mym-no-enc,.mym-sug,.mym-recs{margin:0 0 22px;}\n.mym-patrones h4,.mym-bios h4,.mym-no-enc h4,.mym-sug h4,.mym-recs h4{font-size:12.5px;letter-spacing:.1em;text-transform:uppercase;color:#ccff00;margin:0 0 10px;font-weight:700;}\n.mym-patron{border-left:4px solid #888;background:rgba(255,255,255,.04);border-radius:8px;padding:12px 14px;margin-bottom:10px;}\n.mym-patron header{display:flex;align-items:center;gap:8px;margin-bottom:6px;}\n.mym-patron h5{margin:0;font-size:14px;color:#fff;}\n.mym-patron p{margin:0;font-size:13.5px;line-height:1.55;color:#dadada;}\n.mym-patron-ic{font-size:18px;}\n.mym-patron.urg-alta{border-left-color:#ff4d4d;background:rgba(180,30,30,.12);}\n.mym-patron.urg-media{border-left-color:#ffd24d;background:rgba(170,130,20,.1);}\n.mym-patron.urg-baja{border-left-color:#4da3ff;background:rgba(30,80,180,.1);}\n.mym-bios-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:12px;}\n.mym-bio{background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.08);border-radius:10px;padding:14px;}\n.mym-bio header{display:flex;justify-content:space-between;align-items:flex-start;gap:8px;margin-bottom:8px;}\n.mym-bio h5{margin:0;font-size:14px;color:#fff;line-height:1.3;}\n.mym-bio-val{margin:0 0 10px;font-size:13px;color:#cfcfcf;}\n.mym-bio-val strong{color:#ccff00;font-size:18px;font-weight:700;}\n.mym-bio-ranges{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:0 0 8px;}\n.mym-bio-ranges div{background:rgba(0,0,0,.2);border-radius:6px;padding:6px 8px;}\n.mym-bio-ranges dt{font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;color:#9a9a9a;margin:0 0 3px;}\n.mym-bio-ranges dd{margin:0;font-size:12.5px;color:#e6e6e6;font-weight:600;}\n.mym-bio-com{margin:8px 0 4px;font-size:12.5px;line-height:1.55;color:#cfcfcf;}\n.mym-bio-src{margin:6px 0 0;font-size:10.5px;color:#888;font-style:italic;}\n.mym-low{color:#ffd24d;cursor:help;}\n.mym-no-enc ul,.mym-sug ul,.mym-recs ul{margin:0;padding-left:18px;list-style:disc;}\n.mym-no-enc li,.mym-sug li,.mym-recs li{font-size:13.5px;line-height:1.55;color:#dadada;margin-bottom:4px;}\n.mym-cta-arsenal{display:inline-block;margin:6px 0 18px;padding:11px 22px;background:transparent;color:#ccff00;border:2px solid #ccff00;border-radius:6px;text-decoration:none;font-weight:700;font-size:13px;letter-spacing:.06em;text-transform:uppercase;transition:all .2s;}\n.mym-cta-arsenal:hover{background:#ccff00;color:#0a0a0a;}\n.mym-disclaimer-final{margin:22px 0 6px;padding-top:14px;border-top:1px solid rgba(255,255,255,.1);font-size:11.5px;line-height:1.55;color:#9a9a9a;font-style:italic;}\n.mym-validado{margin:6px 0 0;font-size:11px;color:#ccff00;font-weight:700;}\n.mym-error{padding:14px;background:rgba(180,30,30,.15);border:1px solid rgba(255,90,90,.4);border-radius:8px;color:#ffd0d0;}\n@media (max-width:520px){.mym-bios-grid{grid-template-columns:1fr;}.mym-bio-ranges{grid-template-columns:1fr;}}\n<\/style>\n<!-- ====================================================================== -->\n<!-- AUDITOR DE BIOMARCADORES 1.0 - Mente&Manzana                            -->\n<!-- TODO (USUARIO): Reemplazar la constante AUDITOR_WEBHOOK_URL m\u00e1s abajo   -->\n<!-- por la URL real de n8n \/ Make cuando el endpoint est\u00e9 listo.            -->\n<!-- ====================================================================== -->\n<section class=\"auditor-container\" id=\"mym-auditor-biomarcadores\" aria-label=\"Auditor de Biomarcadores\">\n  <h2 id=\"mym-auditor-titulo\">AUDITOR\u00cdA DE BIOMARCADORES: Eval\u00faa tus niveles de <span id=\"mym-auditor-marker-name\">[Selecciona un biomarcador]<\/span><\/h2>\n  <p class=\"auditor-subtitle\">Sube tus an\u00e1lisis de laboratorio y recibe una auditor\u00eda contra <strong>rangos funcionales de optimizaci\u00f3n<\/strong>, no contra rangos de referencia est\u00e1ndar.<\/p>\n\n  <form id=\"mym-auditor-form\" enctype=\"multipart\/form-data\" novalidate>\n\n    <div class=\"auditor-privacy\">\n      <strong>Protocolo de Privacidad:<\/strong> Antes de subir tu archivo, aseg\u00farate de <strong>tachar tu nombre y datos personales<\/strong>. Solo auditamos biomarcadores an\u00f3nimos.<br><br>\n      <strong>Advertencia importante:<\/strong> Aunque tu archivo viaje sin nombre, t\u00e9cnicamente seguimos procesando datos potencialmente sensibles (resultados de laboratorio). Al continuar, confirmas que comprendes esto y aceptas el env\u00edo de tu archivo a nuestro motor de an\u00e1lisis. No almacenamos informaci\u00f3n identificable y los archivos se procesan \u00fanicamente para generar tu auditor\u00eda.<br><br><strong>Servicio exclusivo para mayores de 18 a\u00f1os.<\/strong> Si tienes menos de 18, no contin\u00faes y consulta con un profesional de la salud.\n    <\/div>\n\n    <label class=\"auditor-dropzone\" id=\"mym-auditor-dropzone\" for=\"mym-auditor-file\">\n      <div class=\"auditor-drop-icon\">\ud83d\udcc4<\/div>\n      <div class=\"auditor-drop-text\">Arrastra tu PDF aqu\u00ed o haz clic para seleccionar<\/div>\n      <div class=\"auditor-drop-hint\">Formato aceptado: solo PDF \u00b7 M\u00e1x. 10 MB<\/div>\n      <input type=\"file\" id=\"mym-auditor-file\" name=\"archivo\" accept=\"application\/pdf,.pdf\" required>\n      <div class=\"auditor-file-name\" id=\"mym-auditor-file-name\"><\/div>\n    <\/label>\n\n    <div class=\"auditor-fields\">\n      <div>\n        <label for=\"mym-auditor-biomarker-input\">Biomarcador a auditar<\/label>\n        <div class=\"auditor-combobox\" id=\"mym-auditor-biomarker-combobox\">\n          <input type=\"text\" id=\"mym-auditor-biomarker-input\" class=\"auditor-combobox-input\" role=\"combobox\" aria-autocomplete=\"list\" aria-expanded=\"false\" aria-controls=\"mym-auditor-biomarker-listbox\" autocomplete=\"off\" placeholder=\"Escribe para buscar (ej: tiroides, hierro, glucosa)\u2026\" required>\n          <button type=\"button\" class=\"auditor-combobox-toggle\" aria-label=\"Mostrar lista de biomarcadores\" tabindex=\"-1\">\u25be<\/button>\n          <ul id=\"mym-auditor-biomarker-listbox\" class=\"auditor-combobox-list\" role=\"listbox\" aria-label=\"Biomarcadores disponibles\" hidden>\n            <li role=\"option\" data-value=\"vitamina_d\">Vitamina D<\/li>\n            <li role=\"option\" data-value=\"tiroides\">Tiroides (panel completo)<\/li>\n            <li role=\"option\" data-value=\"metabolismo_glucemico\">Glucosa e Insulina (metabolismo)<\/li>\n            <li role=\"option\" data-value=\"perfil_lipidico\">Perfil lip\u00eddico cardiovascular<\/li>\n            <li role=\"option\" data-value=\"hierro\">Hierro (panel completo)<\/li>\n            <li role=\"option\" data-value=\"hemograma\">Biometr\u00eda hem\u00e1tica (hemograma)<\/li>\n            <li role=\"option\" data-value=\"vitamina_b12\">Vitamina B12<\/li>\n            <li role=\"option\" data-value=\"magnesio\">Magnesio<\/li>\n            <li role=\"option\" data-value=\"inflamacion\">Inflamaci\u00f3n sist\u00e9mica (PCR \/ homociste\u00edna)<\/li>\n            <li role=\"option\" data-value=\"funcion_hepatica\">Funci\u00f3n hep\u00e1tica<\/li>\n            <li role=\"option\" data-value=\"funcion_renal\">Funci\u00f3n renal<\/li>\n            <li role=\"option\" data-value=\"omega3\">\u00cdndice Omega-3<\/li>\n            <li role=\"option\" data-value=\"hormonas_masculinas\">Hormonas masculinas<\/li>\n            <li role=\"option\" data-value=\"hormonas_femeninas\">Hormonas femeninas<\/li>\n            <li role=\"option\" data-value=\"cortisol\">Cortisol y eje suprarrenal<\/li>\n            <li role=\"option\" data-value=\"vitamina_b6\">Vitamina B6<\/li>\n            <li role=\"option\" data-value=\"vitamina_a\">Vitamina A<\/li>\n            <li role=\"option\" data-value=\"folato\">Folato<\/li>\n          <\/ul>\n          <p class=\"auditor-combobox-empty\" hidden>Sin resultados. Prueba otra palabra.<\/p>\n          <input type=\"hidden\" id=\"mym-auditor-biomarker\" name=\"biomarcador\" value=\"\" required>\n        <\/div>\n      <\/div>\n      <div>\n        <label for=\"mym-auditor-edad\">Edad<\/label>\n        <input type=\"number\" id=\"mym-auditor-edad\" name=\"edad\" min=\"18\" max=\"120\" step=\"1\" inputmode=\"numeric\" placeholder=\"Ej. 34\" required aria-describedby=\"mym-auditor-edad-help\">\n        <small id=\"mym-auditor-edad-help\" class=\"auditor-field-help\">Solo mayores de edad (18 a 120 a\u00f1os).<\/small>\n      <\/div>\n      <div>\n        <label for=\"mym-auditor-sexo\">Sexo biol\u00f3gico<\/label>\n        <select id=\"mym-auditor-sexo\" name=\"sexo\" required>\n          <option value=\"\">&#8212; Selecciona &#8212;<\/option>\n          <option value=\"femenino\">Femenino<\/option>\n          <option value=\"masculino\">Masculino<\/option>\n          <option value=\"intersexual\">Intersexual \/ Prefiero no decir<\/option>\n        <\/select>\n      <\/div>\n      <div class=\"auditor-field-full\">\n        <label for=\"mym-auditor-sentir\">\u00bfC\u00f3mo te sientes hoy?<\/label>\n        <textarea id=\"mym-auditor-sentir\" name=\"contexto\" placeholder=\"Energ\u00eda, sue\u00f1o, claridad mental, \u00e1nimo... describe brevemente.\" rows=\"3\"><\/textarea>\n      <\/div>\n    <\/div>\n\n    <button type=\"submit\" class=\"btn-auditoria\" id=\"mym-auditor-submit\">Iniciar Auditor\u00eda<\/button>\n\n    <div class=\"auditor-loading\" id=\"mym-auditor-loading\" role=\"status\" aria-live=\"polite\">\n      <div class=\"auditor-spinner\"><\/div>\n      Procesando datos bajo est\u00e1ndares de biohidrogenaci\u00f3n y neurobiolog\u00eda&#8230; por favor espera.\n    <\/div>\n\n    <div class=\"resultado-auditoria\" id=\"mym-auditor-resultado\" aria-live=\"polite\"><\/div>\n\n    <p class=\"disclaimer-clinico\">Esta es una auditor\u00eda t\u00e9cnica, no un diagn\u00f3stico m\u00e9dico. Los resultados no sustituyen la valoraci\u00f3n de un profesional de la salud calificado. Mente&#038;Manzana no almacena informaci\u00f3n personal identificable; el archivo cargado se procesa \u00fanicamente para generar esta auditor\u00eda.<\/p>\n  <\/form>\n<\/section>\n\n<script>(function(){var s=\"CihmdW5jdGlvbigpewogIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgLy8gQXVkaXRvciBmcm9udGVuZCB2NCDigJQgY29uc3VtZSAvd3AtanNvbi9teW0vdjEvYXVkaXRvcgogIC8vIEVzcXVlbWEgZXNwZXJhZG86IHNjaGVtYV92ZXJzaW9uICJ2NCIgKGV2YWx1YWNpb25faW50ZWdyYWRhICsgYmlvbWFyY2Fkb3Jlc19hdWRpdGFkb3MpCiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgdmFyIENGRyA9ICh3aW5kb3cubXltQXVkaXRvciAmJiB0eXBlb2Ygd2luZG93Lm15bUF1ZGl0b3IgPT09ICdvYmplY3QnKSA\/IHdpbmRvdy5teW1BdWRpdG9yIDoge307CiAgdmFyIEVORFBPSU5UID0gQ0ZHLmVuZHBvaW50IHx8ICcvd3AtanNvbi9teW0vdjEvYXVkaXRvcic7CiAgdmFyIE5PTkNFICAgID0gQ0ZHLm5vbmNlICAgIHx8ICcnOwogIHZhciBNQVhfQllURVMgPSAodHlwZW9mIENGRy5tYXhCeXRlcyA9PT0gJ251bWJlcicgJiYgQ0ZHLm1heEJ5dGVzID4gMCkgPyBDRkcubWF4Qnl0ZXMgOiAoNiAqIDEwMjQgKiAxMDI0KTsKICB2YXIgVFNfU0lURV9LRVkgPSBDRkcudHVybnN0aWxlU2l0ZUtleSB8fCAnJzsKCiAgLy8gLS0tLS0tLS0gTWFwcGluZyBkZSBJRHMgdMOpY25pY29zIGEgbm9tYnJlcyBjbMOtbmljb3MgaHVtYW5vcyAtLS0tLS0tLQogIHZhciBCSU9NQVJLRVJfTkFNRVMgPSB7CiAgICAndHNoJzonVFNIJywnZnQzJzonVDMgTGlicmUnLCdmdDQnOidUNCBMaWJyZScsJ3J0Myc6J1QzIFJldmVyc28nLAogICAgJ2FudGlfdHBvJzonQW50aS1UUE8nLCdhbnRpX3RnJzonQW50aS1UZycsCiAgICAndml0YW1pbmFfZCc6J1ZpdGFtaW5hIEQnLCd2aXRhbWluYV9iMTInOidWaXRhbWluYSBCMTInLCd2aXRhbWluYV9iNic6J1ZpdGFtaW5hIEI2Jywndml0YW1pbmFfYSc6J1ZpdGFtaW5hIEEnLAogICAgJ2ZvbGF0byc6J0ZvbGF0bycsJ2hpZXJybyc6J0hpZXJybycsJ2ZlcnJpdGluYSc6J0ZlcnJpdGluYScsJ21hZ25lc2lvJzonTWFnbmVzaW8nLAogICAgJ2dsdWNvc2EnOidHbHVjb3NhJywnaGJhMWMnOidIYkExYycsJ2luc3VsaW5hJzonSW5zdWxpbmEnLAogICAgJ2NvbGVzdGVyb2xfdG90YWwnOidDb2xlc3Rlcm9sIFRvdGFsJywnaGRsJzonSERMJywnbGRsJzonTERMJywndHJpZ2xpY2VyaWRvcyc6J1RyaWdsaWPDqXJpZG9zJywKICAgICdvbWVnYTNfaW5kZXgnOifDjW5kaWNlIE9tZWdhLTMnLCd0ZXN0b3N0ZXJvbmFfdG90YWwnOidUZXN0b3N0ZXJvbmEgVG90YWwnLCd0ZXN0b3N0ZXJvbmFfbGlicmUnOidUZXN0b3N0ZXJvbmEgTGlicmUnLAogICAgJ2VzdHJhZGlvbCc6J0VzdHJhZGlvbCcsJ3Byb2dlc3Rlcm9uYSc6J1Byb2dlc3Rlcm9uYScsJ2RoZWFzJzonREhFQS1TJywnY29ydGlzb2xfYW0nOidDb3J0aXNvbCBBTScsCiAgICAncGNyX3VsdHJhJzonUENSIFVsdHJhc2Vuc2libGUnLCdob21vY2lzdGVpbmEnOidIb21vY2lzdGXDrW5hJywKICAgICdhbHQnOidBTFQnLCdhc3QnOidBU1QnLCdnZ3QnOidHR1QnLCdiaWxpcnJ1YmluYV90b3RhbCc6J0JpbGlycnViaW5hIFRvdGFsJywKICAgICdjcmVhdGluaW5hJzonQ3JlYXRpbmluYScsJ3VyZWEnOidVcmVhJywndGZnJzonVEZHJywKICAgICdoZW1vZ2xvYmluYSc6J0hlbW9nbG9iaW5hJywnaGVtYXRvY3JpdG8nOidIZW1hdG9jcml0bycsJ3ZjbSc6J1ZDTScsJ3BsYXF1ZXRhcyc6J1BsYXF1ZXRhcycsJ2xldWNvY2l0b3MnOidMZXVjb2NpdG9zJwogIH07CiAgZnVuY3Rpb24gbmFtZU9mKGlkKXsgcmV0dXJuIEJJT01BUktFUl9OQU1FU1tpZF0gfHwgaWQ7IH0KCiAgLy8gLS0tLS0tLS0gRXJyb3JlcyBsZWdpYmxlcyBwb3IgY8OzZGlnbyAtLS0tLS0tLQogIHZhciBFUlJPUl9NRVNTQUdFUyA9IHsKICAgICdCQURfU0lHTkFUVVJFJzonRXJyb3IgZGUgYXV0ZW50aWNhY2nDs24gY29uIGVsIG1vdG9yIGRlIGFuw6FsaXNpcy4gUG9yIGZhdm9yIGludGVudGEgZGUgbnVldm8gZW4gdW5vcyBtaW51dG9zLicsCiAgICAnU1RBTEVfUkVRVUVTVCc6J0xhIHNvbGljaXR1ZCBleHBpcsOzLiBQb3IgZmF2b3IgaW50ZW50YSBkZSBudWV2by4nLAogICAgJ1JFUExBWV9ERVRFQ1RFRCc6J1NvbGljaXR1ZCBkdXBsaWNhZGEgZGV0ZWN0YWRhLiBSZWNhcmdhIGxhIHDDoWdpbmEgZSBpbnRlbnRhIGRlIG51ZXZvLicsCiAgICAnSU5WQUxJRF9IRUFERVJTJzonRXJyb3IgZGUgY29uZmlndXJhY2nDs24uIFJlY2FyZ2EgbGEgcMOhZ2luYSBlIGludGVudGEgZGUgbnVldm8uJywKICAgICdJTlZBTElEX01JTUUnOidUaXBvIGRlIGFyY2hpdm8gbm8gcGVybWl0aWRvLiBTb2xvIGFjZXB0YW1vcyBQREYsIEpQRyBvIFBORy4nLAogICAgJ01BR0lDX0JZVEVTX0ZBSUwnOidBcmNoaXZvIGNvcnJ1cHRvIG8gbm8gdsOhbGlkby4gQXNlZ8O6cmF0ZSBkZSBzdWJpciB1biBQREYgbyBpbWFnZW4gcmVhbC4nLAogICAgJ0ZJTEVfVE9PX0xBUkdFJzonRWwgYXJjaGl2byBleGNlZGUgZWwgbMOtbWl0ZSBkZSB0YW1hw7FvIHBlcm1pdGlkby4nLAogICAgJ0ZJTEVfVE9PX1NNQUxMJzonRWwgYXJjaGl2byBlc3TDoSB2YWPDrW8gbyBlcyBkZW1hc2lhZG8gcGVxdWXDsW8uJywKICAgICdJTlZBTElEX0dST1VQJzonRWwgYmlvbWFyY2Fkb3Igc2VsZWNjaW9uYWRvIG5vIGVzIHbDoWxpZG8uIFJlY2FyZ2EgbGEgcMOhZ2luYS4nLAogICAgJ0dST1VQX05PVF9JTl9UQUJMRSc6J0VzdGUgcGFuZWwgYcO6biBubyBlc3TDoSBkaXNwb25pYmxlLiBQcm9udG8gYWdyZWdhcmVtb3MgbcOhcyBiaW9tYXJjYWRvcmVzLicsCiAgICAnSU5WQUxJRF9GSUVMRCc6J0FsZ3Vub3MgY2FtcG9zIGRlbCBmb3JtdWxhcmlvIHNvbiBpbnbDoWxpZG9zLiBSZXZpc2EgZWRhZCB5IHNleG8uJywKICAgICdVTkRFUkFHRV9CTE9DS0VEJzonRXN0ZSBzZXJ2aWNpbyBlcyBleGNsdXNpdm8gcGFyYSBtYXlvcmVzIGRlIDE4IGHDsW9zLicsCiAgICAnTExNX0VSUk9SJzonRWwgbW90b3IgZGUgYW7DoWxpc2lzIG5vIGVzdMOhIGRpc3BvbmlibGUgZW4gZXN0ZSBtb21lbnRvLiBJbnRlbnRhIGRlIG51ZXZvIGVuIDEgbWludXRvLicsCiAgICAnTExNX0JMT0NLRUQnOidObyBwdWRpbW9zIHByb2Nlc2FyIGVzdGUgYXJjaGl2by4gVmVyaWZpY2EgcXVlIHNlYSB1biBhbsOhbGlzaXMgZGUgbGFib3JhdG9yaW8gcmVhbCB5IG5vIGNvbnRlbmdhIGRhdG9zIHNlbnNpYmxlcy4nLAogICAgJ0xMTV9CQURfSlNPTic6J0Vycm9yIHByb2Nlc2FuZG8gZWwgYW7DoWxpc2lzLiBQb3IgZmF2b3IgaW50ZW50YSBkZSBudWV2by4nLAogICAgJ0xMTV9FTVBUWSc6J0VsIG1vdG9yIGRlIGFuw6FsaXNpcyBubyBkZXZvbHZpw7MgcmVzdWx0YWRvcy4gSW50ZW50YSBkZSBudWV2by4nLAogICAgJ0NBUFRDSEFfRkFJTEVEJzonVmVyaWZpY2FjacOzbiBkZSBzZWd1cmlkYWQgZmFsbGlkYS4gUmVjYXJnYSBsYSBww6FnaW5hIGUgaW50ZW50YSBkZSBudWV2by4nLAogICAgJ1JBVEVfTElNSVRFRCc6J0hhcyBoZWNobyBkZW1hc2lhZGFzIGF1ZGl0b3LDrWFzLiBFc3BlcmEgdW5vcyBtaW51dG9zIGFudGVzIGRlIGludGVudGFyIGRlIG51ZXZvLicsCiAgICAnTk9OQ0VfSU5WQUxJRCc6J1R1IHNlc2nDs24gZXhwaXLDsy4gUmVjYXJnYSBsYSBww6FnaW5hIHBhcmEgY29udGludWFyLicKICB9OwoKICAvLyAtLS0tLS0tLSBNYXBlb3MgZGUgcHJlc2VudGFjacOzbiAtLS0tLS0tLQogIHZhciBFU1RBRE9fQkFER0UgPSB7CiAgICAnb3B0aW1vJzogICAgICAgeyB0eHQ6J8OTcHRpbW8nLCAgICAgICAgIGNsczonYmFkZ2Utb3B0aW1vJyAgICAgICAgfSwKICAgICdzdWJvcHRpbW8nOiAgICB7IHR4dDonU3Viw7NwdGltbycsICAgICAgY2xzOidiYWRnZS1zdWJvcHRpbW8nICAgICB9LAogICAgJ3ByZW9jdXBhbnRlJzogIHsgdHh0OidQcmVvY3VwYW50ZScsICAgIGNsczonYmFkZ2UtcHJlb2N1cGFudGUnICAgfSwKICAgICdpbmRldGVybWluYWRvJzp7IHR4dDonTm8gZGV0ZXJtaW5hZG8nLCBjbHM6J2JhZGdlLWluZGV0ZXJtaW5hZG8nIH0sCiAgICAnZGVmaWNpZW50ZSc6ICAgeyB0eHQ6J0RlZmljaWVudGUnLCAgICAgY2xzOidiYWRnZS1wcmVvY3VwYW50ZScgICB9LAogICAgJ2V4Y2VzaXZvJzogICAgIHsgdHh0OidFeGNlc2l2bycsICAgICAgIGNsczonYmFkZ2UtcHJlb2N1cGFudGUnICAgfQogIH07CiAgdmFyIFVSR0VOQ0lBX0NBUkQgPSB7CiAgICAnYWx0YSc6ICB7IGNsczoncGF0cm9uLWFsdGEnLCAgaWNvbjon4pqg77iPJyAgfSwKICAgICdtZWRpYSc6IHsgY2xzOidwYXRyb24tbWVkaWEnLCBpY29uOifihLnvuI8nICB9LAogICAgJ2JhamEnOiAgeyBjbHM6J3BhdHJvbi1iYWphJywgIGljb246J\/CfkqEnIH0KICB9OwogIHZhciBWRVJFRElDVE9fTEFCID0gewogICAgJ2RlbnRyb19kZWxfcmFuZ28nOiAnZGVudHJvIGRlbCByYW5nbyBsYWInLAogICAgJ2Jham9fZWxfcmFuZ28nOiAgICAnYmFqbyBlbCByYW5nbyBsYWInLAogICAgJ3NvYnJlX2VsX3JhbmdvJzogICAnc29icmUgZWwgcmFuZ28gbGFiJywKICAgICdzaW5fcmFuZ29fbGFiJzogICAgJ3NpbiByYW5nbyBsYWIgZGlzcG9uaWJsZScKICB9OwoKICBmdW5jdGlvbiBlc2Mocyl7CiAgICBpZiAocyA9PT0gbnVsbCB8fCBzID09PSB1bmRlZmluZWQpIHJldHVybiAnJzsKICAgIHJldHVybiBTdHJpbmcocykKICAgICAgLnJlcGxhY2UoLyYvZywnJicpLnJlcGxhY2UoLzwvZywnJmx0OycpLnJlcGxhY2UoLz4vZywnJmd0OycpCiAgICAgIC5yZXBsYWNlKC8iL2csJyZxdW90OycpLnJlcGxhY2UoLycvZywnJiMzOTsnKTsKICB9CiAgZnVuY3Rpb24gZXNjQXR0cihzKXsgcmV0dXJuIGVzYyhzKTsgfQoKICAvLyAtLS0tLS0tLSBET00gaG9va3MgLS0tLS0tLS0KICB2YXIgZm9ybSAgICAgICAgICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXltLWF1ZGl0b3ItZm9ybScpOwogIGlmICghZm9ybSkgcmV0dXJuOwogIHZhciBmaWxlSW5wdXQgICAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdteW0tYXVkaXRvci1maWxlJyk7CiAgdmFyIGZpbGVOYW1lRWwgICAgID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215bS1hdWRpdG9yLWZpbGUtbmFtZScpOwogIHZhciBkcm9wem9uZSAgICAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdteW0tYXVkaXRvci1kcm9wem9uZScpOwogIHZhciBiaW9tYXJrZXJTZWwgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdteW0tYXVkaXRvci1iaW9tYXJrZXInKTsKICB2YXIgbWFya2VyTmFtZUVsICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXltLWF1ZGl0b3ItbWFya2VyLW5hbWUnKTsKICB2YXIgbG9hZGluZ0VsICAgICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXltLWF1ZGl0b3ItbG9hZGluZycpOwogIHZhciBzdWJtaXRCdG4gICAgICA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdteW0tYXVkaXRvci1zdWJtaXQnKTsKICB2YXIgcmVzdWx0RWwgICAgICAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXltLWF1ZGl0b3ItcmVzdWx0YWRvJyk7CgogIC8vIC0tLS0tLS0tIERyYWcgJiBkcm9wIC8gZmlsZSBwaWNrZXIgLS0tLS0tLS0KICBpZiAoZHJvcHpvbmUgJiYgZmlsZUlucHV0KSB7CiAgICAvLyBkcm9wem9uZSBjbGljayBsaXN0ZW5lciByZW1vdmVkOiBsYWJlbFtmb3JdIGhhbmRsZXMgaXQgbmF0aXZlbHkKICAgIGRyb3B6b25lLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBmdW5jdGlvbihlKXsKICAgICAgaWYgKGUua2V5ID09PSAnRW50ZXInIHx8IGUua2V5ID09PSAnICcpIHsgZS5wcmV2ZW50RGVmYXVsdCgpOyBmaWxlSW5wdXQuY2xpY2soKTsgfQogICAgfSk7CiAgICBbJ2RyYWdlbnRlcicsJ2RyYWdvdmVyJ10uZm9yRWFjaChmdW5jdGlvbihldil7CiAgICAgIGRyb3B6b25lLmFkZEV2ZW50TGlzdGVuZXIoZXYsIGZ1bmN0aW9uKGUpeyBlLnByZXZlbnREZWZhdWx0KCk7IGRyb3B6b25lLmNsYXNzTGlzdC5hZGQoJ2lzLWRyYWdvdmVyJyk7IH0pOwogICAgfSk7CiAgICBbJ2RyYWdsZWF2ZScsJ2Ryb3AnXS5mb3JFYWNoKGZ1bmN0aW9uKGV2KXsKICAgICAgZHJvcHpvbmUuYWRkRXZlbnRMaXN0ZW5lcihldiwgZnVuY3Rpb24oZSl7IGUucHJldmVudERlZmF1bHQoKTsgZHJvcHpvbmUuY2xhc3NMaXN0LnJlbW92ZSgnaXMtZHJhZ292ZXInKTsgfSk7CiAgICB9KTsKICAgIGRyb3B6b25lLmFkZEV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCBmdW5jdGlvbihlKXsKICAgICAgaWYgKGUuZGF0YVRyYW5zZmVyICYmIGUuZGF0YVRyYW5zZmVyLmZpbGVzICYmIGUuZGF0YVRyYW5zZmVyLmZpbGVzWzBdKSB7CiAgICAgICAgZmlsZUlucHV0LmZpbGVzID0gZS5kYXRhVHJhbnNmZXIuZmlsZXM7CiAgICAgICAgaWYgKGZpbGVOYW1lRWwpIGZpbGVOYW1lRWwudGV4dENvbnRlbnQgPSBlLmRhdGFUcmFuc2Zlci5maWxlc1swXS5uYW1lOwogICAgICB9CiAgICB9KTsKICAgIGZpbGVJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmdW5jdGlvbigpewogICAgICBpZiAoZmlsZUlucHV0LmZpbGVzICYmIGZpbGVJbnB1dC5maWxlc1swXSAmJiBmaWxlTmFtZUVsKSB7CiAgICAgICAgZmlsZU5hbWVFbC50ZXh0Q29udGVudCA9IGZpbGVJbnB1dC5maWxlc1swXS5uYW1lOwogICAgICB9CiAgICB9KTsKICB9CgogIC8vIC0tLS0tLS0tIFJlbmRlciBoZWxwZXJzIC0tLS0tLS0tCiAgZnVuY3Rpb24gcmVuZGVyQmFkZ2UoZXN0YWRvKXsKICAgIHZhciBiID0gRVNUQURPX0JBREdFW2VzdGFkb10gfHwgRVNUQURPX0JBREdFWydpbmRldGVybWluYWRvJ107CiAgICByZXR1cm4gJzxzcGFuIGNsYXNzPSJhdWRpdG9yLWJhZGdlICcgKyBiLmNscyArICciPicgKyBlc2MoYi50eHQpICsgJzwvc3Bhbj4nOwogIH0KICBmdW5jdGlvbiByZW5kZXJQYXRyb24ocCl7CiAgICB2YXIgdSA9IFVSR0VOQ0lBX0NBUkRbcC51cmdlbmNpYV0gfHwgVVJHRU5DSUFfQ0FSRFsnYmFqYSddOwogICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJhdWRpdG9yLXBhdHJvbiAnICsgdS5jbHMgKyAnIj4nICsKICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJhdWRpdG9yLXBhdHJvbi1oZWFkIj48c3BhbiBjbGFzcz0iYXVkaXRvci1wYXRyb24taWNvbiIgYXJpYS1oaWRkZW49InRydWUiPicgKyB1Lmljb24gKyAnPC9zcGFuPicgKwogICAgICAgICAgICAgJzxzdHJvbmc+JyArIGVzYyhwLm5vbWJyZSB8fCAnUGF0csOzbiBjbMOtbmljbycpICsgJzwvc3Ryb25nPjwvZGl2PicgKwogICAgICAgICAgICAgJzxwPicgKyBlc2MocC5leHBsaWNhY2lvbiB8fCAnJykgKyAnPC9wPicgKwogICAgICAgICAgICc8L2Rpdj4nOwogIH0KICBmdW5jdGlvbiByZW5kZXJCaW9tYXJjYWRvcihiKXsKICAgIHZhciBiYWRnZSAgID0gcmVuZGVyQmFkZ2UoYi5lc3RhZG8pOwogICAgdmFyIHZhbG9yICAgPSAoYi52YWxvcl9kZXRlY3RhZG8gPT09IG51bGwgfHwgYi52YWxvcl9kZXRlY3RhZG8gPT09IHVuZGVmaW5lZCkgPyAn4oCUJyA6IGIudmFsb3JfZGV0ZWN0YWRvOwogICAgdmFyIHVuaWRhZCAgPSBiLnVuaWRhZCA\/ICcgJyArIGVzYyhiLnVuaWRhZCkgOiAnJzsKICAgIHZhciBsb3dDb25mID0gKHR5cGVvZiBiLmNvbmZpYW56YV9leHRyYWNjaW9uID09PSAnbnVtYmVyJyAmJiBiLmNvbmZpYW56YV9leHRyYWNjaW9uIDwgMC44KTsKICAgIHZhciB2bGFiICAgID0gVkVSRURJQ1RPX0xBQltiLnZlcmVkaWN0b19sYWJdIHx8ICcnOwogICAgdmFyIG5vbWJyZSAgPSBlc2MoYi5ub21icmUgfHwgbmFtZU9mKGIuaWQpKTsKICAgIHZhciBsb3dDb25mSWNvbiA9IGxvd0NvbmYgPyAnIDxzcGFuIGNsYXNzPSJiaW9tYXJjYWRvci1sb3djb25mIiB0aXRsZT0iVmFsb3IgZXh0cmHDrWRvIGNvbiBjb25maWFuemEgbW9kZXJhZGEiPuKEue+4jzwvc3Bhbj4nIDogJyc7CgogICAgdmFyIGh0bWwgPSAnJzsKICAgIGh0bWwgKz0gJzxhcnRpY2xlIGNsYXNzPSJiaW9tYXJjYWRvci1jYXJkIGJpb20tY2FyZC10YWJsZSI+JzsKICAgIGh0bWwgKz0gICAnPGhlYWRlciBjbGFzcz0iYmlvbWFyY2Fkb3ItaGVhZCBiaW9tLWhlYWQtdGFibGUiPic7CiAgICBodG1sICs9ICAgICAnPGg0IGNsYXNzPSJiaW9tYXJjYWRvci1ub21icmUiPicgKyBub21icmUgKyBsb3dDb25mSWNvbiArICc8L2g0Pic7CiAgICBodG1sICs9ICAgICBiYWRnZTsKICAgIGh0bWwgKz0gICAnPC9oZWFkZXI+JzsKICAgIGh0bWwgKz0gICAnPHRhYmxlIGNsYXNzPSJiaW9tLXRhYmxlIiByb2xlPSJ0YWJsZSI+JzsKICAgIGh0bWwgKz0gICAgICc8dGJvZHk+JzsKICAgIGh0bWwgKz0gICAgICAgJzx0ciBjbGFzcz0iYmlvbS1yb3cgYmlvbS1yb3ctdmFsb3IiPjx0aCBzY29wZT0icm93Ij5WYWxvciBkZXRlY3RhZG88L3RoPjx0ZD48c3Ryb25nPicgKyBlc2ModmFsb3IpICsgdW5pZGFkICsgJzwvc3Ryb25nPjwvdGQ+PC90cj4nOwogICAgaWYgKGIucmFuZ29fbGFiKSB7CiAgICAgIGh0bWwgKz0gICAgICc8dHIgY2xhc3M9ImJpb20tcm93Ij48dGggc2NvcGU9InJvdyI+UmFuZ28gbGFib3JhdG9yaW88L3RoPjx0ZD4nICsgZXNjKGIucmFuZ29fbGFiKSArICc8L3RkPjwvdHI+JzsKICAgIH0KICAgIGlmICh2bGFiKSB7CiAgICAgIGh0bWwgKz0gICAgICc8dHIgY2xhc3M9ImJpb20tcm93Ij48dGggc2NvcGU9InJvdyI+VmVyZWRpY3RvIGxhYjwvdGg+PHRkPicgKyBlc2ModmxhYikgKyAnPC90ZD48L3RyPic7CiAgICB9CiAgICBpZiAoYi5yYW5nb19mdW5jaW9uYWxfYXBsaWNhZG8pIHsKICAgICAgaHRtbCArPSAgICAgJzx0ciBjbGFzcz0iYmlvbS1yb3cgYmlvbS1yb3ctZnVuYyI+PHRoIHNjb3BlPSJyb3ciPlJhbmdvIGZ1bmNpb25hbDwvdGg+PHRkPicgKyBlc2MoYi5yYW5nb19mdW5jaW9uYWxfYXBsaWNhZG8pICsgJzwvdGQ+PC90cj4nOwogICAgfQogICAgaWYgKGIuZnVlbnRlX3JhbmdvX2Z1bmNpb25hbCkgewogICAgICBodG1sICs9ICAgICAnPHRyIGNsYXNzPSJiaW9tLXJvdyBiaW9tLXJvdy1mdWVudGUiPjx0aCBzY29wZT0icm93Ij5GdWVudGU8L3RoPjx0ZD4nICsgZXNjKGIuZnVlbnRlX3JhbmdvX2Z1bmNpb25hbCkgKyAnPC90ZD48L3RyPic7CiAgICB9CiAgICBpZiAoYi5jb21lbnRhcmlvKSB7CiAgICAgIGh0bWwgKz0gICAgICc8dHIgY2xhc3M9ImJpb20tcm93IGJpb20tcm93LWNvbWVudGFyaW8iPjx0ZCBjb2xzcGFuPSIyIj48c3BhbiBjbGFzcz0iYmlvbS1jb21lbnQtbGFiZWwiPkludGVycHJldGFjacOzbjwvc3Bhbj48cD4nICsgZXNjKGIuY29tZW50YXJpbykgKyAnPC9wPjwvdGQ+PC90cj4nOwogICAgfQogICAgaHRtbCArPSAgICAgJzwvdGJvZHk+JzsKICAgIGh0bWwgKz0gICAnPC90YWJsZT4nOwogICAgaHRtbCArPSAnPC9hcnRpY2xlPic7CiAgICByZXR1cm4gaHRtbDsKICB9CgogIGZ1bmN0aW9uIHJlbmRlclJlc3VsdGFkb1Y0KGRhdGEpewogICAgdmFyIGVpID0gZGF0YS5ldmFsdWFjaW9uX2ludGVncmFkYSB8fCB7fTsKICAgIHZhciBiaW9tcyA9IEFycmF5LmlzQXJyYXkoZGF0YS5iaW9tYXJjYWRvcmVzX2F1ZGl0YWRvcykgPyBkYXRhLmJpb21hcmNhZG9yZXNfYXVkaXRhZG9zIDogW107CiAgICB2YXIgcGF0cm9uZXMgPSBBcnJheS5pc0FycmF5KGVpLnBhdHJvbmVzX2RldGVjdGFkb3MpID8gZWkucGF0cm9uZXNfZGV0ZWN0YWRvcyA6IFtdOwogICAgdmFyIG5vRW5jID0gQXJyYXkuaXNBcnJheShlaS5iaW9tYXJjYWRvcmVzX25vX2VuY29udHJhZG9zKSA\/IGVpLmJpb21hcmNhZG9yZXNfbm9fZW5jb250cmFkb3MgOiBbXTsKICAgIHZhciBzdWdlcmlkb3MgPSBBcnJheS5pc0FycmF5KGVpLmJpb21hcmNhZG9yZXNfY29tcGxlbWVudGFyaW9zX3N1Z2VyaWRvcykgPyBlaS5iaW9tYXJjYWRvcmVzX2NvbXBsZW1lbnRhcmlvc19zdWdlcmlkb3MgOiBbXTsKICAgIHZhciByZWNzID0gQXJyYXkuaXNBcnJheShkYXRhLnJlY29tZW5kYWNpb25lc19hY2Npb25hYmxlcykgPyBkYXRhLnJlY29tZW5kYWNpb25lc19hY2Npb25hYmxlcyA6IFtdOwogICAgdmFyIGFsZXJ0YXMgPSBBcnJheS5pc0FycmF5KGRhdGEuYWxlcnRhc19nbG9iYWxlcykgPyBkYXRhLmFsZXJ0YXNfZ2xvYmFsZXMgOiBbXTsKICAgIHZhciBmbGFncyA9IGRhdGEuZmxhZ3MgfHwge307CiAgICB2YXIgc2lndWllbnRlID0gZGF0YS5zaWd1aWVudGVfcGFzb19hcnNlbmFsIHx8IG51bGw7CgogICAgdmFyIGh0bWwgPSAnJzsKCiAgICAvLyAxLiBIZWFkZXIgY29uIGJhZGdlIGdsb2JhbAogICAgaHRtbCArPSAnPGhlYWRlciBjbGFzcz0iYXVkaXRvci1yZXN1bHRhZG8taGVhZCI+JzsKICAgIGh0bWwgKz0gICAnPGgzPkV4cGVkaWVudGUgY2zDrW5pY28g4oCUICcgKyBlc2MoZGF0YS5ncnVwb19ldmFsdWFkbyB8fCAnQXVkaXRvcsOtYScpICsgJzwvaDM+JzsKICAgIGh0bWwgKz0gICAnPGRpdiBjbGFzcz0iYXVkaXRvci1lc3RhZG8tZ2xvYmFsIj5Fc3RhZG8gZGVsIHBhbmVsOiAnICsgcmVuZGVyQmFkZ2UoZWkuZXN0YWRvX2dlbmVyYWwgfHwgJ2luZGV0ZXJtaW5hZG8nKSArICc8L2Rpdj4nOwogICAgaHRtbCArPSAnPC9oZWFkZXI+JzsKCiAgICAvLyAyLiBGbGFncyByZWxldmFudGVzICh1cmdlbnRlLCBsb3dfY29uZmlkZW5jZSwgUElJLCBwcm9tcHQgaW5qZWN0aW9uKQogICAgaWYgKGZsYWdzLmhhc191cmdlbnRfcGF0dGVybikgewogICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJhdWRpdG9yLWZsYWcgZmxhZy11cmdlbnQiPuKaoO+4jyA8c3Ryb25nPlBhdHLDs24gY2zDrW5pY2FtZW50ZSB1cmdlbnRlIGRldGVjdGFkby48L3N0cm9uZz4gVGUgcmVjb21lbmRhbW9zIGNvbnN1bHRhciBjb24gdW4gcHJvZmVzaW9uYWwgZGUgbGEgc2FsdWQgbG8gYW50ZXMgcG9zaWJsZS48L2Rpdj4nOwogICAgfQogICAgaWYgKGZsYWdzLmxvd19jb25maWRlbmNlKSB7CiAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9ImF1ZGl0b3ItZmxhZyBmbGFnLWxvd2NvbmYiPuKEue+4jyBBbGd1bm9zIHZhbG9yZXMgZnVlcm9uIGRpZsOtY2lsZXMgZGUgZXh0cmFlciBkZWwgYXJjaGl2by4gUmV2aXNhIGxvcyByZXN1bHRhZG9zIGNvbiB1biBwcm9mZXNpb25hbC48L2Rpdj4nOwogICAgfQogICAgaWYgKGZsYWdzLnByb21wdF9pbmplY3Rpb25fZGV0ZWN0ZWQpIHsKICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0iYXVkaXRvci1mbGFnIGZsYWctc2VjdXJpdHkiPvCflJIgRGV0ZWN0YW1vcyBjb250ZW5pZG8gaW51c3VhbCBlbiBlbCBhcmNoaXZvLiBMYSBhdWRpdG9yw61hIHNlIHByb2Nlc8OzIGNvbiBwcmVjYXVjacOzbi48L2Rpdj4nOwogICAgfQogICAgaWYgKGZsYWdzLnBpaV9kZXRlY3RlZCkgewogICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJhdWRpdG9yLWZsYWcgZmxhZy1wcml2YWN5Ij7wn5GkIERldGVjdGFtb3MgZGF0b3MgcGVyc29uYWxlcyBlbiBlbCBhcmNoaXZvLiBUZSByZWNvbWVuZGFtb3MgdGFjaGFyIG5vbWJyZXMgeSBkYXRvcyBzZW5zaWJsZXMgYW50ZXMgZGUgc3ViaXIgYW7DoWxpc2lzIGZ1dHVyb3MuPC9kaXY+JzsKICAgIH0KCiAgICAvLyAyYi4gQXZpc28gZXZpZGVuY2lhIGxpbWl0YWRhIChyYW5nbyBmdW5jaW9uYWwgcmVxdWllcmUgdmFsaWRhY2lvbiBtZWRpY2EpCiAgICAoZnVuY3Rpb24oKXsKICAgICAgdmFyIFRBUkdFVCA9ICdSQU5HT19GVU5DSU9OQUxfUkVRVUlFUkVfVkFMSURBQ0lPTl9NRURJQ0EnOwogICAgICB2YXIgaGl0ID0gZmFsc2U7CiAgICAgIGZ1bmN0aW9uIHNjYW5WYWwodil7CiAgICAgICAgaWYgKGhpdCkgcmV0dXJuOwogICAgICAgIGlmICh2ID09IG51bGwpIHJldHVybjsKICAgICAgICBpZiAodHlwZW9mIHYgPT09ICdzdHJpbmcnKSB7IGlmICh2LmluZGV4T2YoVEFSR0VUKSAhPT0gLTEpIGhpdCA9IHRydWU7IHJldHVybjsgfQogICAgICAgIGlmICh0eXBlb2YgdiA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHYgPT09ICdib29sZWFuJykgcmV0dXJuOwogICAgICAgIGlmIChBcnJheS5pc0FycmF5KHYpKSB7IGZvciAodmFyIGk9MDtpPHYubGVuZ3RoICYmICFoaXQ7aSsrKSBzY2FuVmFsKHZbaV0pOyByZXR1cm47IH0KICAgICAgICBpZiAodHlwZW9mIHYgPT09ICdvYmplY3QnKSB7IGZvciAodmFyIGsgaW4gdikgeyBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2LGspKSBjb250aW51ZTsgaWYgKGsuaW5kZXhPZiAmJiBrLmluZGV4T2YoVEFSR0VUKSAhPT0gLTEpIHsgaGl0ID0gdHJ1ZTsgcmV0dXJuOyB9IHNjYW5WYWwodltrXSk7IGlmIChoaXQpIHJldHVybjsgfSB9CiAgICAgIH0KICAgICAgdHJ5IHsgc2NhblZhbChkYXRhKTsgfSBjYXRjaChlKXt9CiAgICAgIGlmIChoaXQpIHsKICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJhdWRpdG9yLWZsYWcgZmxhZy1ldmlkZW5jZSIgc3R5bGU9ImJhY2tncm91bmQ6cmdiYSgyMzQsMTc5LDgsLjEyKTtib3JkZXItbGVmdDo0cHggc29saWQgI2VhYjMwODtjb2xvcjojZmRlNjhhO3BhZGRpbmc6MTJweCAxNHB4O2JvcmRlci1yYWRpdXM6OHB4O21hcmdpbjoxMHB4IDA7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MS41NTsiPuKaoO+4jyA8c3Ryb25nPkF2aXNvIGRlIGV2aWRlbmNpYSBsaW1pdGFkYTo8L3N0cm9uZz4gYWxndW5vcyBkZSBsb3MgcmFuZ29zIHVzYWRvcyBlbiBlc3RlIGFuw6FsaXNpcyB0aWVuZW4gZXZpZGVuY2lhIGNpZW50w61maWNhIGZ1bmNpb25hbCBsaW1pdGFkYS4gQ29uc2lkZXJhIGNvbmZpcm1hcmxvcyBjb24gdHUgcHJvZmVzaW9uYWwgZGUgc2FsdWQgYW50ZXMgZGUgdG9tYXIgZGVjaXNpb25lcy48L2Rpdj4nOwogICAgICB9CiAgICB9KSgpOwoKICAgIC8vIDMuIEludGVycHJldGFjacOzbiBjbMOtbmljYSBnZW5lcmFsIChuYXJyYXRpdmEpCiAgICBpZiAoZWkuaW50ZXJwcmV0YWNpb25fY2xpbmljYV9nZW5lcmFsKSB7CiAgICAgIGh0bWwgKz0gJzxzZWN0aW9uIGNsYXNzPSJhdWRpdG9yLWludGVycHJldGFjaW9uIj48cD4nICsgZXNjKGVpLmludGVycHJldGFjaW9uX2NsaW5pY2FfZ2VuZXJhbCkgKyAnPC9wPjwvc2VjdGlvbj4nOwogICAgfQoKICAgIC8vIDQuIFBhdHJvbmVzIGRldGVjdGFkb3MKICAgIGh0bWwgKz0gJzxzZWN0aW9uIGNsYXNzPSJhdWRpdG9yLXBhdHJvbmVzIj4nOwogICAgaHRtbCArPSAgICc8aDQ+UGF0cm9uZXMgY2zDrW5pY29zIGRldGVjdGFkb3M8L2g0Pic7CiAgICBpZiAocGF0cm9uZXMubGVuZ3RoID09PSAwKSB7CiAgICAgIGh0bWwgKz0gJzxwIGNsYXNzPSJhdWRpdG9yLXBhdHJvbmVzLWVtcHR5Ij5ObyBzZSBkZXRlY3Rhcm9uIHBhdHJvbmVzIGNsw61uaWNvcyBwcmVvY3VwYW50ZXMgZW4gZXN0ZSBwYW5lbC48L3A+JzsKICAgIH0gZWxzZSB7CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGF0cm9uZXMubGVuZ3RoOyBpKyspIGh0bWwgKz0gcmVuZGVyUGF0cm9uKHBhdHJvbmVzW2ldKTsKICAgIH0KICAgIGh0bWwgKz0gJzwvc2VjdGlvbj4nOwoKICAgIC8vIDUuIEJpb21hcmNhZG9yZXMgYXVkaXRhZG9zCiAgICBodG1sICs9ICc8c2VjdGlvbiBjbGFzcz0iYXVkaXRvci1iaW9tYXJjYWRvcmVzIj4nOwogICAgaHRtbCArPSAgICc8aDQ+QmlvbWFyY2Fkb3JlcyBhdWRpdGFkb3M8L2g0Pic7CiAgICBpZiAoYmlvbXMubGVuZ3RoID09PSAwKSB7CiAgICAgIGh0bWwgKz0gJzxwIGNsYXNzPSJhdWRpdG9yLWJpb21hcmNhZG9yZXMtZW1wdHkiPk5vIHNlIGVuY29udHJhcm9uIGJpb21hcmNhZG9yZXMgZGUgZXN0ZSBwYW5lbCBlbiB0dSBhcmNoaXZvLiBSZXZpc2EgcXVlIGVsIGRvY3VtZW50byBjb250ZW5nYSBsb3MgdmFsb3JlcyBlc3BlcmFkb3MuPC9wPic7CiAgICB9IGVsc2UgewogICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGJpb21zLmxlbmd0aDsgaisrKSBodG1sICs9IHJlbmRlckJpb21hcmNhZG9yKGJpb21zW2pdKTsKICAgIH0KICAgIGh0bWwgKz0gJzwvc2VjdGlvbj4nOwoKICAgIC8vIDYuIEJpb21hcmNhZG9yZXMgbm8gZW5jb250cmFkb3MgKyBjb21wbGVtZW50YXJpb3Mgc3VnZXJpZG9zCiAgICBpZiAobm9FbmMubGVuZ3RoID4gMCB8fCBzdWdlcmlkb3MubGVuZ3RoID4gMCkgewogICAgICBodG1sICs9ICc8c2VjdGlvbiBjbGFzcz0iYXVkaXRvci1zdWdlcmlkb3MiPic7CiAgICAgIGlmIChub0VuYy5sZW5ndGggPiAwKSB7CiAgICAgICAgaHRtbCArPSAnPGg0PkJpb21hcmNhZG9yZXMgbm8gaW5jbHVpZG9zIGVuIHR1IGFuw6FsaXNpczwvaDQ+JzsKICAgICAgICBodG1sICs9ICc8cD5UdSBsYWJvcmF0b3JpbyBubyBpbmNsdcOtYTogJzsKICAgICAgICBodG1sICs9IG5vRW5jLm1hcChmdW5jdGlvbihpZCl7IHJldHVybiAnPHN0cm9uZz4nICsgZXNjKG5hbWVPZihpZCkpICsgJzwvc3Ryb25nPic7IH0pLmpvaW4oJywgJyk7CiAgICAgICAgaHRtbCArPSAnLiBDb25zaWRlcmEgcGVkaXJsb3MgZW4gdHUgcHLDs3hpbW8gYW7DoWxpc2lzLjwvcD4nOwogICAgICB9CiAgICAgIGlmIChzdWdlcmlkb3MubGVuZ3RoID4gMCkgewogICAgICAgIGh0bWwgKz0gJzxoND5CaW9tYXJjYWRvcmVzIGNvbXBsZW1lbnRhcmlvcyBzdWdlcmlkb3M8L2g0Pic7CiAgICAgICAgaHRtbCArPSAnPHVsIGNsYXNzPSJhdWRpdG9yLWxpc3RhIj4nOwogICAgICAgIGZvciAodmFyIHMgPSAwOyBzIDwgc3VnZXJpZG9zLmxlbmd0aDsgcysrKSBodG1sICs9ICc8bGk+JyArIGVzYyhzdWdlcmlkb3Nbc10pICsgJzwvbGk+JzsKICAgICAgICBodG1sICs9ICc8L3VsPic7CiAgICAgIH0KICAgICAgaHRtbCArPSAnPC9zZWN0aW9uPic7CiAgICB9CgogICAgLy8gNy4gQWxlcnRhcyBnbG9iYWxlcyAoUElJIGNvbW8gY2FsbG91dCBkZW50cm8gZGUgbGEgc2VjY2nDs24pCiAgICBpZiAoYWxlcnRhcy5sZW5ndGggPiAwKSB7CiAgICAgIHZhciBwaWlNc2cgPSAnJzsKICAgICAgdmFyIGFsZXJ0YXNGaWx0ZXJlZCA9IFtdOwogICAgICBmb3IgKHZhciBhID0gMDsgYSA8IGFsZXJ0YXMubGVuZ3RoOyBhKyspIHsKICAgICAgICB2YXIgcmF3QSA9IChhbGVydGFzW2FdIHx8ICcnKS50b1N0cmluZygpLnRyaW0oKS50b1VwcGVyQ2FzZSgpOwogICAgICAgIGlmIChyYXdBID09PSAnUElJX0RFVEVDVEVEX1JFREFDVEVEJyB8fCByYXdBLmluZGV4T2YoJ1BJSV9ERVRFQ1RFRF9SRURBQ1RFRCcpID09PSAwKSB7CiAgICAgICAgICBwaWlNc2cgPSAnUG9yIHR1IHByaXZhY2lkYWQsIGhlbW9zIG9taXRpZG8gbG9zIGRhdG9zIHBlcnNvbmFsZXMgcXVlIGFwYXJlY8OtYW4gZW4gdHUgYW7DoWxpc2lzIChub21icmUsIGZlY2hhIGRlIG5hY2ltaWVudG8sIGV0Yy4pLiBTb2xvIGFuYWxpemFtb3MgbG9zIHZhbG9yZXMgY2zDrW5pY29zLic7CiAgICAgICAgfSBlbHNlIGlmIChyYXdBLmluZGV4T2YoJ1JBTkdPX0ZVTkNJT05BTF9SRVFVSUVSRV9WQUxJREFDSU9OX01FRElDQScpICE9PSAtMSkgewogICAgICAgICAgLy8gU3VwcHJlc3M6IHRoaXMgY29kZSBpcyByZW5kZXJlZCBhcyBhIGZyaWVuZGx5IG5vdGljZSB2aWEgdGhlIGV2aWRlbmNlLWxpbWl0ZWQgYmFubmVyIGFib3ZlLgogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBhbGVydGFzRmlsdGVyZWQucHVzaChhbGVydGFzW2FdKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHBpaU1zZyB8fCBhbGVydGFzRmlsdGVyZWQubGVuZ3RoID4gMCkgewogICAgICAgIGh0bWwgKz0gJzxzZWN0aW9uIGNsYXNzPSJhdWRpdG9yLWFsZXJ0YXMiPic7CiAgICAgICAgaHRtbCArPSAnPGg0PkFsZXJ0YXM8L2g0Pic7CiAgICAgICAgaWYgKHBpaU1zZykgewogICAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0iYXVkaXRvci1hbGVydGEtcHJpdmFjeSIgcm9sZT0ibm90ZSI+JzsKICAgICAgICAgIGh0bWwgKz0gJzxzcGFuIGNsYXNzPSJhdWRpdG9yLWFsZXJ0YS1wcml2YWN5LWljb24iIGFyaWEtaGlkZGVuPSJ0cnVlIj7wn5SSPC9zcGFuPic7CiAgICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJhdWRpdG9yLWFsZXJ0YS1wcml2YWN5LWJvZHkiPjxzdHJvbmc+UHJpdmFjaWRhZCBwcm90ZWdpZGEuPC9zdHJvbmc+ICcgKyBlc2MocGlpTXNnKSArICc8L2Rpdj4nOwogICAgICAgICAgaHRtbCArPSAnPC9kaXY+JzsKICAgICAgICB9CiAgICAgICAgaWYgKGFsZXJ0YXNGaWx0ZXJlZC5sZW5ndGggPiAwKSB7CiAgICAgICAgICBodG1sICs9ICc8dWwgY2xhc3M9ImF1ZGl0b3ItbGlzdGEiPic7CiAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IGFsZXJ0YXNGaWx0ZXJlZC5sZW5ndGg7IGsrKykgaHRtbCArPSAnPGxpPicgKyBlc2MoYWxlcnRhc0ZpbHRlcmVkW2tdKSArICc8L2xpPic7CiAgICAgICAgICBodG1sICs9ICc8L3VsPic7CiAgICAgICAgfQogICAgICAgIGh0bWwgKz0gJzwvc2VjdGlvbj4nOwogICAgICB9CiAgICB9CgogICAgLy8gOC4gUmVjb21lbmRhY2lvbmVzIGFjY2lvbmFibGVzCiAgICBpZiAocmVjcy5sZW5ndGggPiAwKSB7CiAgICAgIGh0bWwgKz0gJzxzZWN0aW9uIGNsYXNzPSJhdWRpdG9yLXJlY29tZW5kYWNpb25lcyI+JzsKICAgICAgaHRtbCArPSAnPGg0PlByw7N4aW1vcyBwYXNvcyBzdWdlcmlkb3M8L2g0Pic7CiAgICAgIGh0bWwgKz0gJzx1bCBjbGFzcz0iYXVkaXRvci1jaGVja2xpc3QiPic7CiAgICAgIGZvciAodmFyIHIgPSAwOyByIDwgcmVjcy5sZW5ndGg7IHIrKykgaHRtbCArPSAnPGxpPicgKyBlc2MocmVjc1tyXSkgKyAnPC9saT4nOwogICAgICBodG1sICs9ICc8L3VsPjwvc2VjdGlvbj4nOwogICAgfQoKICAgIC8vIDkuIENUQSBBcnNlbmFsCiAgICBpZiAoc2lndWllbnRlICYmIHNpZ3VpZW50ZS51cmwpIHsKICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0iYXVkaXRvci1jdGEtYXJzZW5hbCI+JzsKICAgICAgaHRtbCArPSAnPGEgY2xhc3M9ImJ0bi1hcnNlbmFsLXNlY29uZGFyeSIgaHJlZj0iJyArIGVzY0F0dHIoc2lndWllbnRlLnVybCkgKyAnIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciI+JzsKICAgICAgaHRtbCArPSBlc2Moc2lndWllbnRlLmxhYmVsIHx8ICdWZXIgZW4gRWwgQXJzZW5hbCcpICsgJyDihpI8L2E+JzsKICAgICAgaHRtbCArPSAnPC9kaXY+JzsKICAgIH0KCiAgICAvLyA5Yi4gRW52w61vIGRlbCBpbmZvcm1lIHBvciBlbWFpbCArIHN1c2NyaXBjacOzbgogICAgaHRtbCArPSAnPHNlY3Rpb24gY2xhc3M9ImF1ZGl0b3ItZW1haWwtY2FwdHVyZSIgZGF0YS1mZWF0dXJlPSJsZWFkIj4nOwogICAgaHRtbCArPSAgICc8ZGl2IGNsYXNzPSJhdWRpdG9yLWVtYWlsLWNhcHR1cmUtaW5uZXIiPic7CiAgICBodG1sICs9ICAgICAnPGRpdiBjbGFzcz0iYXVkaXRvci1lbWFpbC1jYXB0dXJlLWljb24iIGFyaWEtaGlkZGVuPSJ0cnVlIj7wn5OpPC9kaXY+JzsKICAgIGh0bWwgKz0gICAgICc8ZGl2IGNsYXNzPSJhdWRpdG9yLWVtYWlsLWNhcHR1cmUtY29udGVudCI+JzsKICAgIGh0bWwgKz0gICAgICAgJzxoND5SZWNpYmUgdHUgaW5mb3JtZSBlbiBQREY8L2g0Pic7CiAgICBodG1sICs9ICAgICAgICc8cCBjbGFzcz0iYXVkaXRvci1lbWFpbC1sZWFkLWRlc2MiPlRlIGVudmlhcmVtb3MgYSB0dSBjb3JyZW8gZXN0ZSBpbmZvcm1lIGNvbXBsZXRvIGVuIFBERiBqdW50byBjb24gdW4gbWVuc2FqZSBjbGFybyBkZSBxdWUgPHN0cm9uZz5sb3MgcmVzdWx0YWRvcyBOTyBlc3TDoW4gdmFsaWRhZG9zIGNsw61uaWNhbWVudGU8L3N0cm9uZz4geSBkZWJlbiByZXZpc2Fyc2UgY29uIHR1IG3DqWRpY28gYW50ZXMgZGUgdG9tYXIgY3VhbHF1aWVyIGFjY2nDs24uIFRhbWJpw6luIHF1ZWRhcsOhcyBzdXNjcml0byBhIGNvbnRlbmlkbyBleGNsdXNpdm8gZGUgTWVudGUmYW1wO01hbnphbmEgKHB1ZWRlcyBjYW5jZWxhciBjdWFuZG8gcXVpZXJhcykuPC9wPic7CiAgICBodG1sICs9ICAgICAgICc8ZGl2IGNsYXNzPSJhdWRpdG9yLWVtYWlsLWZvcm0iPic7CiAgICBodG1sICs9ICAgICAgICAgJzxkaXYgY2xhc3M9ImF1ZGl0b3ItZW1haWwtZm9ybS1yb3ciPic7CiAgICBodG1sICs9ICAgICAgICAgICAnPGlucHV0IHR5cGU9ImVtYWlsIiBjbGFzcz0iYXVkaXRvci1lbWFpbC1pbnB1dCIgbmFtZT0ibGVhZF9lbWFpbCIgcGxhY2Vob2xkZXI9InR1QGNvcnJlby5jb20iIGF1dG9jb21wbGV0ZT0iZW1haWwiIHJlcXVpcmVkPic7CiAgICBodG1sICs9ICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJhdWRpdG9yLWVtYWlsLWJ0biI+RW52aWFybWUgbWkgaW5mb3JtZTwvYnV0dG9uPic7CiAgICBodG1sICs9ICAgICAgICAgJzwvZGl2Pic7CiAgICBodG1sICs9ICAgICAgICAgJzxkaXYgY2xhc3M9ImF1ZGl0b3ItZW1haWwtZmVlZGJhY2siIGFyaWEtbGl2ZT0icG9saXRlIj48L2Rpdj4nOwogICAgaHRtbCArPSAgICAgICAgICc8ZGl2IGNsYXNzPSJhdWRpdG9yLWVtYWlsLWxlZ2FsIj5BbCBlbnZpYXIgYWNlcHRhcyByZWNpYmlyIHR1IGluZm9ybWUgeSBudWVzdHJvcyBjb3JyZW9zIGluZm9ybWF0aXZvcy4gQ2FuY2VsYSB0dSBzdXNjcmlwY2nDs24gY29uIHVuIGNsaWMgZGVzZGUgY3VhbHF1aWVyIGNvcnJlbyBxdWUgdGUgZW52aWVtb3MuPC9kaXY+JzsKICAgIGh0bWwgKz0gICAgICAgJzwvZGl2Pic7CiAgICBodG1sICs9ICAgICAnPC9kaXY+JzsKICAgIGh0bWwgKz0gICAnPC9kaXY+JzsKICAgIGh0bWwgKz0gJzwvc2VjdGlvbj4nOwoKICAgIC8vIDEwLiBEaXNjbGFpbWVyIG9ibGlnYXRvcmlvCiAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJhdWRpdG9yLWRpc2NsYWltZXIiPic7CiAgICBodG1sICs9ICc8cD48c3Ryb25nPkVzdGUgcmVzdWx0YWRvIGVzIGluZm9ybWF0aXZvIHkgZWR1Y2F0aXZvPC9zdHJvbmc+LCBiYXNhZG8gZW4gcmFuZ29zIGRlIG1lZGljaW5hIGZ1bmNpb25hbC4gJzsKICAgIGh0bWwgKz0gJzxzdHJvbmc+Tk8gY29uc3RpdHV5ZSBkaWFnbsOzc3RpY28gbcOpZGljbzwvc3Ryb25nPiBuaSByZWVtcGxhemEgbGEgY29uc3VsdGEgY29uIHVuIHByb2Zlc2lvbmFsIGRlIGxhIHNhbHVkLiAnOwogICAgaHRtbCArPSAnTG9zIHJhbmdvcyBmdW5jaW9uYWxlcyBzb24gbcOhcyBlc3RyaWN0b3MgcXVlIGxvcyByYW5nb3MgY29udmVuY2lvbmFsZXMgZGUgbGFib3JhdG9yaW86IHVuIHZhbG9yIHB1ZWRlIGVzdGFyIFwnc3Viw7NwdGltb1wnIGZ1bmNpb25hbG1lbnRlIGF1bnF1ZSB0dSBsYWJvcmF0b3JpbyBsbyByZXBvcnRlIGNvbW8gXCdub3JtYWxcJy4gJzsKICAgIGh0bWwgKz0gJ1NpIHRpZW5lcyBzw61udG9tYXMgbyBkdWRhcywgY29uc3VsdGEgY29uIHR1IG3DqWRpY28uPC9wPic7CgogICAgaWYgKGRhdGEudmFsaWRhZG9fcG9yICYmIHR5cGVvZiBkYXRhLnZhbGlkYWRvX3BvciA9PT0gJ29iamVjdCcpIHsKICAgICAgaHRtbCArPSAnPHAgY2xhc3M9ImF1ZGl0b3ItdmFsaWRhZG8iPlJhbmdvcyB2YWxpZGFkb3MgcG9yIDxzdHJvbmc+JyArIGVzYyhkYXRhLnZhbGlkYWRvX3Bvci5ub21icmUgfHwgJycpICsgJzwvc3Ryb25nPic7CiAgICAgIGlmIChkYXRhLnZhbGlkYWRvX3Bvci5jZWR1bGEpIGh0bWwgKz0gJyAoY8OpZHVsYSAnICsgZXNjKGRhdGEudmFsaWRhZG9fcG9yLmNlZHVsYSkgKyAnKSc7CiAgICAgIGh0bWwgKz0gJy48L3A+JzsKICAgIH0KCiAgICBpZiAoZGF0YS5mdWVudGVfcmFuZ29zKSB7CiAgICAgIGh0bWwgKz0gJzxwIGNsYXNzPSJhdWRpdG9yLWZ1ZW50ZS1yYW5nb3MiPkZ1ZW50ZSBkZSByYW5nb3MgZnVuY2lvbmFsZXM6ICcgKyBlc2MoZGF0YS5mdWVudGVfcmFuZ29zKSArICc8L3A+JzsKICAgIH0KICAgIGh0bWwgKz0gJzwvZGl2Pic7CgogICAgcmV0dXJuIGh0bWw7CiAgfQoKICBmdW5jdGlvbiByZW5kZXJFcnJvcihjb2RlLCBtZXNzYWdlKXsKICAgIHZhciBmcmllbmRseSA9IEVSUk9SX01FU1NBR0VTW2NvZGVdIHx8IG1lc3NhZ2UgfHwgJ09jdXJyacOzIHVuIGVycm9yIGluZXNwZXJhZG8uIEludGVudGEgZGUgbnVldm8gZW4gdW5vcyBtaW51dG9zLic7CiAgICByZXR1cm4gJzxoZWFkZXIgY2xhc3M9ImF1ZGl0b3ItcmVzdWx0YWRvLWhlYWQiPjxoMz5ObyBwdWRpbW9zIHByb2Nlc2FyIHR1IGF1ZGl0b3LDrWE8L2gzPjwvaGVhZGVyPicgKwogICAgICAgICAgICc8ZGl2IGNsYXNzPSJhdWRpdG9yLWZsYWcgZmxhZy11cmdlbnQiPicgKyBlc2MoZnJpZW5kbHkpICsgJzwvZGl2PicgKwogICAgICAgICAgICc8ZGl2IGNsYXNzPSJhdWRpdG9yLWRpc2NsYWltZXIiPjxwPlNpIGVsIHByb2JsZW1hIHBlcnNpc3RlLCBlc3BlcmEgdW5vcyBtaW51dG9zIHkgdnVlbHZlIGEgaW50ZW50YXJsby48L3A+PC9kaXY+JzsKICB9CgogIC8vIC0tLS0tLS0tIFN1Ym1pdCBoYW5kbGVyIC0tLS0tLS0tCgogIC8vIC0tLS0tLS0tIENvbWJvYm94IGJpb21hcmNhZG9yIChhcGVydHVyYS9jaWVycmUvZmlsdHJhZG8vc2VsZWNjaW9uKSAtLS0tLS0tLQogIChmdW5jdGlvbigpewogICAgdmFyIGJpb0lucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215bS1hdWRpdG9yLWJpb21hcmtlci1pbnB1dCcpOwogICAgdmFyIGxpc3Rib3ggID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215bS1hdWRpdG9yLWJpb21hcmtlci1saXN0Ym94Jyk7CiAgICB2YXIgY29tYm9ib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXltLWF1ZGl0b3ItYmlvbWFya2VyLWNvbWJvYm94Jyk7CiAgICBpZiAoIWJpb0lucHV0IHx8ICFsaXN0Ym94IHx8ICFjb21ib2JveCkgcmV0dXJuOwogICAgdmFyIGl0ZW1zID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobGlzdGJveC5xdWVyeVNlbGVjdG9yQWxsKCdsaScpKTsKICAgIHZhciBhY3RpdmVJZHggPSAtMTsKCiAgICBmdW5jdGlvbiBvcGVuTGlzdCgpewogICAgICBsaXN0Ym94LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwogICAgICBjb21ib2JveC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCAndHJ1ZScpOwogICAgfQogICAgZnVuY3Rpb24gY2xvc2VMaXN0KCl7CiAgICAgIGxpc3Rib3guc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgY29tYm9ib3guc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgJ2ZhbHNlJyk7CiAgICAgIGFjdGl2ZUlkeCA9IC0xOwogICAgICBpdGVtcy5mb3JFYWNoKGZ1bmN0aW9uKGl0KXsgaXQuY2xhc3NMaXN0LnJlbW92ZSgnaXMtYWN0aXZlJyk7IH0pOwogICAgfQogICAgZnVuY3Rpb24gZmlsdGVySXRlbXMocSl7CiAgICAgIHEgPSAocXx8JycpLnRvTG93ZXJDYXNlKCkudHJpbSgpOwogICAgICB2YXIgYW55VmlzaWJsZSA9IGZhbHNlOwogICAgICBpdGVtcy5mb3JFYWNoKGZ1bmN0aW9uKGl0KXsKICAgICAgICB2YXIgdHh0ID0gKGl0LnRleHRDb250ZW50fHwnJykudG9Mb3dlckNhc2UoKTsKICAgICAgICB2YXIgdmFsID0gKGl0LmdldEF0dHJpYnV0ZSgnZGF0YS12YWx1ZScpfHwnJykudG9Mb3dlckNhc2UoKTsKICAgICAgICB2YXIgbWF0Y2ggPSAhcSB8fCB0eHQuaW5kZXhPZihxKSA+PSAwIHx8IHZhbC5pbmRleE9mKHEpID49IDA7CiAgICAgICAgaXQuc3R5bGUuZGlzcGxheSA9IG1hdGNoID8gJ2Jsb2NrJyA6ICdub25lJzsKICAgICAgICBpZiAobWF0Y2gpIGFueVZpc2libGUgPSB0cnVlOwogICAgICB9KTsKICAgICAgaWYgKGFueVZpc2libGUpIG9wZW5MaXN0KCk7IGVsc2UgY2xvc2VMaXN0KCk7CiAgICB9CiAgICBmdW5jdGlvbiBzZWxlY3RJdGVtKGxpKXsKICAgICAgaWYgKCFsaSkgcmV0dXJuOwogICAgICB2YXIgdmFsID0gbGkuZ2V0QXR0cmlidXRlKCdkYXRhLXZhbHVlJykgfHwgJyc7CiAgICAgIHZhciBsYWJlbCA9IChsaS50ZXh0Q29udGVudCB8fCAnJykudHJpbSgpOwogICAgICBiaW9JbnB1dC52YWx1ZSA9IGxhYmVsOwogICAgICB2YXIgaGlkZGVuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215bS1hdWRpdG9yLWJpb21hcmtlcicpOwogICAgICBpZiAoaGlkZGVuKSBoaWRkZW4udmFsdWUgPSB2YWw7CiAgICAgIC8vIFVwZGF0ZSB2aXN1YWwgbWFya2VyIG5hbWUgKGhlYWRlcikgaWYgcHJlc2VudAogICAgICB2YXIgbmFtZUVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215bS1hdWRpdG9yLW1hcmtlci1uYW1lJyk7CiAgICAgIGlmIChuYW1lRWwpIG5hbWVFbC50ZXh0Q29udGVudCA9IGxhYmVsOwogICAgICBjbG9zZUxpc3QoKTsKICAgICAgYmlvSW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2NoYW5nZScsIHtidWJibGVzOnRydWV9KSk7CiAgICB9CiAgICBmdW5jdGlvbiBzZXRBY3RpdmUoaWR4KXsKICAgICAgdmFyIHZpc2libGUgPSBpdGVtcy5maWx0ZXIoZnVuY3Rpb24oaXQpeyByZXR1cm4gaXQuc3R5bGUuZGlzcGxheSAhPT0gJ25vbmUnOyB9KTsKICAgICAgaWYgKCF2aXNpYmxlLmxlbmd0aCkgcmV0dXJuOwogICAgICBpZiAoaWR4IDwgMCkgaWR4ID0gdmlzaWJsZS5sZW5ndGggLSAxOwogICAgICBpZiAoaWR4ID49IHZpc2libGUubGVuZ3RoKSBpZHggPSAwOwogICAgICBhY3RpdmVJZHggPSBpZHg7CiAgICAgIGl0ZW1zLmZvckVhY2goZnVuY3Rpb24oaXQpeyBpdC5jbGFzc0xpc3QucmVtb3ZlKCdpcy1hY3RpdmUnKTsgfSk7CiAgICAgIHZpc2libGVbaWR4XS5jbGFzc0xpc3QuYWRkKCdpcy1hY3RpdmUnKTsKICAgICAgdmlzaWJsZVtpZHhdLnNjcm9sbEludG9WaWV3KHtibG9jazonbmVhcmVzdCd9KTsKICAgIH0KCiAgICBiaW9JbnB1dC5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIGZ1bmN0aW9uKCl7IGZpbHRlckl0ZW1zKGJpb0lucHV0LnZhbHVlKTsgfSk7CiAgICBiaW9JbnB1dC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7IGZpbHRlckl0ZW1zKGJpb0lucHV0LnZhbHVlKTsgfSk7CiAgICBiaW9JbnB1dC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZ1bmN0aW9uKCl7CiAgICAgIC8vIENsZWFyIGhpZGRlbiB2YWx1ZSBpZiB1c2VyIGlzIHR5cGluZyBmcmVzaCBzZWFyY2gKICAgICAgdmFyIGhpZGRlbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdteW0tYXVkaXRvci1iaW9tYXJrZXInKTsKICAgICAgaWYgKGhpZGRlbikgaGlkZGVuLnZhbHVlID0gJyc7CiAgICAgIGZpbHRlckl0ZW1zKGJpb0lucHV0LnZhbHVlKTsKICAgIH0pOwogICAgYmlvSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGZ1bmN0aW9uKGUpewogICAgICBpZiAoZS5rZXkgPT09ICdBcnJvd0Rvd24nKXsgZS5wcmV2ZW50RGVmYXVsdCgpOyBvcGVuTGlzdCgpOyBzZXRBY3RpdmUoYWN0aXZlSWR4ICsgMSk7IH0KICAgICAgZWxzZSBpZiAoZS5rZXkgPT09ICdBcnJvd1VwJyl7IGUucHJldmVudERlZmF1bHQoKTsgb3Blbkxpc3QoKTsgc2V0QWN0aXZlKGFjdGl2ZUlkeCAtIDEpOyB9CiAgICAgIGVsc2UgaWYgKGUua2V5ID09PSAnRW50ZXInKXsKICAgICAgICBpZiAobGlzdGJveC5zdHlsZS5kaXNwbGF5ID09PSAnYmxvY2snKXsKICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIHZhciB2aXNpYmxlID0gaXRlbXMuZmlsdGVyKGZ1bmN0aW9uKGl0KXsgcmV0dXJuIGl0LnN0eWxlLmRpc3BsYXkgIT09ICdub25lJzsgfSk7CiAgICAgICAgICBpZiAodmlzaWJsZS5sZW5ndGggJiYgYWN0aXZlSWR4ID49IDAgJiYgYWN0aXZlSWR4IDwgdmlzaWJsZS5sZW5ndGgpIHNlbGVjdEl0ZW0odmlzaWJsZVthY3RpdmVJZHhdKTsKICAgICAgICAgIGVsc2UgaWYgKHZpc2libGUubGVuZ3RoID09PSAxKSBzZWxlY3RJdGVtKHZpc2libGVbMF0pOwogICAgICAgIH0KICAgICAgfQogICAgICBlbHNlIGlmIChlLmtleSA9PT0gJ0VzY2FwZScpeyBjbG9zZUxpc3QoKTsgfQogICAgfSk7CiAgICBpdGVtcy5mb3JFYWNoKGZ1bmN0aW9uKGxpKXsKICAgICAgbGkuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgZnVuY3Rpb24oZSl7IGUucHJldmVudERlZmF1bHQoKTsgc2VsZWN0SXRlbShsaSk7IH0pOwogICAgICBsaS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWVudGVyJywgZnVuY3Rpb24oKXsKICAgICAgICBpdGVtcy5mb3JFYWNoKGZ1bmN0aW9uKGl0KXsgaXQuY2xhc3NMaXN0LnJlbW92ZSgnaXMtYWN0aXZlJyk7IH0pOwogICAgICAgIGxpLmNsYXNzTGlzdC5hZGQoJ2lzLWFjdGl2ZScpOwogICAgICB9KTsKICAgIH0pOwogICAgLy8gQ2xpY2sgb24gdGhlIGFycm93IGluZGljYXRvciAoYW55d2hlcmUgb24gY29tYm9ib3ggbm90IG9uIGlucHV0KSB0b2dnbGVzCiAgICBjb21ib2JveC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBmdW5jdGlvbihlKXsKICAgICAgaWYgKGUudGFyZ2V0ID09PSBiaW9JbnB1dCkgcmV0dXJuOwogICAgICAvLyBpZ25vcmUgY2xpY2tzIGluc2lkZSBsaXN0Ym94IGl0ZW1zIChoYW5kbGVkIGJ5IGxpIG1vdXNlZG93bikKICAgICAgaWYgKGxpc3Rib3guY29udGFpbnMoZS50YXJnZXQpKSByZXR1cm47CiAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgaWYgKGxpc3Rib3guc3R5bGUuZGlzcGxheSA9PT0gJ2Jsb2NrJyl7IGNsb3NlTGlzdCgpOyB9CiAgICAgIGVsc2UgeyBiaW9JbnB1dC5mb2N1cygpOyBmaWx0ZXJJdGVtcyhiaW9JbnB1dC52YWx1ZSk7IH0KICAgIH0pOwogICAgLy8gQ2xvc2Ugd2hlbiBjbGlja2luZyBvdXRzaWRlCiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBmdW5jdGlvbihlKXsKICAgICAgaWYgKCFjb21ib2JveC5jb250YWlucyhlLnRhcmdldCkpIGNsb3NlTGlzdCgpOwogICAgfSk7CiAgICAvLyBJbmplY3QgbWluaW1hbCBzdHlsZSBmb3IgdmlzaWJsZSBpdGVtcyAvIGFjdGl2ZSBzdGF0ZSBpZiBub3QgcHJlc2VudAogICAgaWYgKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXltLWNvbWJvYm94LXN0eWxlJykpewogICAgICB2YXIgc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpOwogICAgICBzdC5pZCA9ICdteW0tY29tYm9ib3gtc3R5bGUnOwogICAgICBzdC50ZXh0Q29udGVudCA9ICcjbXltLWF1ZGl0b3ItYmlvbWFya2VyLWxpc3Rib3h7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDo5OTk5O21heC1oZWlnaHQ6MjgwcHg7b3ZlcmZsb3c6YXV0bzttYXJnaW46MnB4IDAgMDtwYWRkaW5nOjRweCAwO2xpc3Qtc3R5bGU6bm9uZTtiYWNrZ3JvdW5kOiMxMDE4MTA7Ym9yZGVyOjFweCBzb2xpZCAjYjZmZjNhO2JvcmRlci1yYWRpdXM6NnB4O2JveC1zaGFkb3c6MCA0cHggMThweCByZ2JhKDAsMCwwLC40NSk7bWluLXdpZHRoOjEwMCU7fSNteW0tYXVkaXRvci1iaW9tYXJrZXItbGlzdGJveCBsaXtwYWRkaW5nOjhweCAxNHB4O2N1cnNvcjpwb2ludGVyO2NvbG9yOiNlNmZmZDk7Zm9udC1zaXplOjE0cHg7fSNteW0tYXVkaXRvci1iaW9tYXJrZXItbGlzdGJveCBsaTpob3ZlciwjbXltLWF1ZGl0b3ItYmlvbWFya2VyLWxpc3Rib3ggbGkuaXMtYWN0aXZle2JhY2tncm91bmQ6IzFlMmExZTtjb2xvcjojYjZmZjNhO30jbXltLWF1ZGl0b3ItYmlvbWFya2VyLWNvbWJvYm94e3Bvc2l0aW9uOnJlbGF0aXZlO30nOwogICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHN0KTsKICAgIH0KICB9KSgpOwogIChmdW5jdGlvbigpewogICAgaWYoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdteW0tYmlvbS10YWJsZS1zdHlsZScpKXsKICAgICAgdmFyIHN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTsKICAgICAgc3QuaWQgPSAnbXltLWJpb20tdGFibGUtc3R5bGUnOwogICAgICBzdC50ZXh0Q29udGVudCA9ICIjbXltLWF1ZGl0b3ItcmVzdWx0YWRvIC5iaW9tLWNhcmQtdGFibGV7YmFja2dyb3VuZDojMGUxNDEwO2JvcmRlcjoxcHggc29saWQgcmdiYSgxODIsMjU1LDU4LC4xOCk7Ym9yZGVyLXJhZGl1czoxMHB4O21hcmdpbjoxNHB4IDA7b3ZlcmZsb3c6aGlkZGVuO30jbXltLWF1ZGl0b3ItcmVzdWx0YWRvIC5iaW9tLWhlYWQtdGFibGV7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtnYXA6MTJweDtwYWRkaW5nOjEycHggMTZweDtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCg5MGRlZywgcmdiYSgxODIsMjU1LDU4LC4xMCkgMCUsIHJnYmEoMTgyLDI1NSw1OCwuMDIpIDEwMCUpO2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYmEoMTgyLDI1NSw1OCwuMTgpO30jbXltLWF1ZGl0b3ItcmVzdWx0YWRvIC5iaW9tLWhlYWQtdGFibGUgLmJpb21hcmNhZG9yLW5vbWJyZXttYXJnaW46MDtjb2xvcjojZTZmZmQ5O2ZvbnQtc2l6ZToxN3B4O2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMnB4O30jbXltLWF1ZGl0b3ItcmVzdWx0YWRvIC5iaW9tLXRhYmxle3dpZHRoOjEwMCU7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO2ZvbnQtc2l6ZToxNC41cHg7bGluZS1oZWlnaHQ6MS40NTt9I215bS1hdWRpdG9yLXJlc3VsdGFkbyAuYmlvbS10YWJsZSB0cntib3JkZXItdG9wOjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LC4wNCk7fSNteW0tYXVkaXRvci1yZXN1bHRhZG8gLmJpb20tdGFibGUgdHI6Zmlyc3QtY2hpbGR7Ym9yZGVyLXRvcDpub25lO30jbXltLWF1ZGl0b3ItcmVzdWx0YWRvIC5iaW9tLXRhYmxlIHRoW3Njb3BlPVwicm93XCJde3RleHQtYWxpZ246bGVmdDtmb250LXdlaWdodDo1MDA7Y29sb3I6IzhmYjU5Mzt3aWR0aDo0MiU7cGFkZGluZzoxMHB4IDE2cHg7dmVydGljYWwtYWxpZ246dG9wO2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMDE1KTt9I215bS1hdWRpdG9yLXJlc3VsdGFkbyAuYmlvbS10YWJsZSB0ZHtjb2xvcjojZTZmZmQ5O3BhZGRpbmc6MTBweCAxNnB4O3ZlcnRpY2FsLWFsaWduOnRvcDt9I215bS1hdWRpdG9yLXJlc3VsdGFkbyAuYmlvbS10YWJsZSAuYmlvbS1yb3ctdmFsb3IgdGQgc3Ryb25ne2NvbG9yOiNiNmZmM2E7Zm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6NzAwO30jbXltLWF1ZGl0b3ItcmVzdWx0YWRvIC5iaW9tLXRhYmxlIC5iaW9tLXJvdy1mdW5jIHRoLCAjbXltLWF1ZGl0b3ItcmVzdWx0YWRvIC5iaW9tLXRhYmxlIC5iaW9tLXJvdy1mdW5jIHRke2JhY2tncm91bmQ6cmdiYSgxODIsMjU1LDU4LC4wNCk7fSNteW0tYXVkaXRvci1yZXN1bHRhZG8gLmJpb20tdGFibGUgLmJpb20tcm93LWZ1ZW50ZSB0aCwgI215bS1hdWRpdG9yLXJlc3VsdGFkbyAuYmlvbS10YWJsZSAuYmlvbS1yb3ctZnVlbnRlIHRke2NvbG9yOiM4ZmI1OTM7Zm9udC1zaXplOjEzcHg7Zm9udC1zdHlsZTppdGFsaWM7fSNteW0tYXVkaXRvci1yZXN1bHRhZG8gLmJpb20tdGFibGUgLmJpb20tcm93LWZ1ZW50ZSB0ZHtjb2xvcjojYThjOGFhO30jbXltLWF1ZGl0b3ItcmVzdWx0YWRvIC5iaW9tLXRhYmxlIC5iaW9tLXJvdy1jb21lbnRhcmlvIHRke2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMDMpO3BhZGRpbmc6MTJweCAxNnB4O2NvbG9yOiNjZmU2YzI7fSNteW0tYXVkaXRvci1yZXN1bHRhZG8gLmJpb20tY29tZW50LWxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZToxMXB4O2xldHRlci1zcGFjaW5nOjEuMnB4O3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjojYjZmZjNhO21hcmdpbi1ib3R0b206NHB4O2ZvbnQtd2VpZ2h0OjYwMDt9I215bS1hdWRpdG9yLXJlc3VsdGFkbyAuYmlvbS1yb3ctY29tZW50YXJpbyBwe21hcmdpbjowO2xpbmUtaGVpZ2h0OjEuNTU7fSNteW0tYXVkaXRvci1yZXN1bHRhZG8gLmJpb21hcmNhZG9yLWxvd2NvbmZ7Zm9udC1zaXplOjE0cHg7b3BhY2l0eTouNzttYXJnaW4tbGVmdDo2cHg7fSNteW0tYXVkaXRvci1yZXN1bHRhZG8gLmJpb20tY2FyZC10YWJsZTpoYXMoLmJhZGdlLW9wdGltbyl7Ym9yZGVyLWxlZnQ6NHB4IHNvbGlkICM0YWRlODA7fSNteW0tYXVkaXRvci1yZXN1bHRhZG8gLmJpb20tY2FyZC10YWJsZTpoYXMoLmJhZGdlLXN1Ym9wdGltbyl7Ym9yZGVyLWxlZnQ6NHB4IHNvbGlkICNmYmJmMjQ7fSNteW0tYXVkaXRvci1yZXN1bHRhZG8gLmJpb20tY2FyZC10YWJsZTpoYXMoLmJhZGdlLWV4Y2VzaXZvKSwjbXltLWF1ZGl0b3ItcmVzdWx0YWRvIC5iaW9tLWNhcmQtdGFibGU6aGFzKC5iYWRnZS1wcmVvY3VwYW50ZSksI215bS1hdWRpdG9yLXJlc3VsdGFkbyAuYmlvbS1jYXJkLXRhYmxlOmhhcyguYmFkZ2UtZGVmaWNpZW50ZSl7Ym9yZGVyLWxlZnQ6NHB4IHNvbGlkICNmODcxNzE7fUBtZWRpYSAobWF4LXdpZHRoOiA1NjBweCl7I215bS1hdWRpdG9yLXJlc3VsdGFkbyAuYmlvbS10YWJsZSB0aFtzY29wZT1cInJvd1wiXXt3aWR0aDo0OCU7cGFkZGluZzo5cHggMTJweDtmb250LXNpemU6MTNweDt9I215bS1hdWRpdG9yLXJlc3VsdGFkbyAuYmlvbS10YWJsZSB0ZHtwYWRkaW5nOjlweCAxMnB4O2ZvbnQtc2l6ZToxMy41cHg7fSNteW0tYXVkaXRvci1yZXN1bHRhZG8gLmJpb20taGVhZC10YWJsZXtwYWRkaW5nOjEwcHggMTJweDt9I215bS1hdWRpdG9yLXJlc3VsdGFkbyAuYmlvbS1oZWFkLXRhYmxlIC5iaW9tYXJjYWRvci1ub21icmV7Zm9udC1zaXplOjE1LjVweDt9fSI7CiAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc3QpOwogICAgfQogIH0pKCk7CiAgKGZ1bmN0aW9uKCl7CiAgICBpZighZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215bS1wcml2YWN5LWFsZXJ0LXN0eWxlJykpewogICAgICB2YXIgc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpOwogICAgICBzdC5pZCA9ICdteW0tcHJpdmFjeS1hbGVydC1zdHlsZSc7CiAgICAgIHN0LnRleHRDb250ZW50ID0gIiNteW0tYXVkaXRvci1yZXN1bHRhZG8gLmF1ZGl0b3ItYWxlcnRhLXByaXZhY3l7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7Z2FwOjE0cHg7bWFyZ2luOjE4cHggMDtwYWRkaW5nOjE0cHggMThweDtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCg5MGRlZywgcmdiYSgxODIsMjU1LDU4LC4xMCkgMCUsIHJnYmEoMTgyLDI1NSw1OCwuMDMpIDEwMCUpO2JvcmRlcjoxcHggc29saWQgcmdiYSgxODIsMjU1LDU4LC4yOCk7Ym9yZGVyLWxlZnQ6NHB4IHNvbGlkICNiNmZmM2E7Ym9yZGVyLXJhZGl1czoxMHB4O2NvbG9yOiNlNmZmZDk7fSNteW0tYXVkaXRvci1yZXN1bHRhZG8gLmF1ZGl0b3ItYWxlcnRhLXByaXZhY3ktaWNvbntmb250LXNpemU6MjJweDtsaW5lLWhlaWdodDoxLjI7ZmxleC1zaHJpbms6MDt9I215bS1hdWRpdG9yLXJlc3VsdGFkbyAuYXVkaXRvci1hbGVydGEtcHJpdmFjeS1ib2R5e2ZvbnQtc2l6ZToxNC41cHg7bGluZS1oZWlnaHQ6MS41NTtjb2xvcjojZTZmZmQ5O30jbXltLWF1ZGl0b3ItcmVzdWx0YWRvIC5hdWRpdG9yLWFsZXJ0YS1wcml2YWN5LWJvZHkgc3Ryb25ne2NvbG9yOiNiNmZmM2E7Zm9udC13ZWlnaHQ6NzAwO21hcmdpbi1yaWdodDo0cHg7bGV0dGVyLXNwYWNpbmc6LjJweDt9QG1lZGlhIChtYXgtd2lkdGg6IDU2MHB4KXsjbXltLWF1ZGl0b3ItcmVzdWx0YWRvIC5hdWRpdG9yLWFsZXJ0YS1wcml2YWN5e3BhZGRpbmc6MTJweCAxNHB4O2dhcDoxMHB4O30jbXltLWF1ZGl0b3ItcmVzdWx0YWRvIC5hdWRpdG9yLWFsZXJ0YS1wcml2YWN5LWljb257Zm9udC1zaXplOjIwcHg7fSNteW0tYXVkaXRvci1yZXN1bHRhZG8gLmF1ZGl0b3ItYWxlcnRhLXByaXZhY3ktYm9keXtmb250LXNpemU6MTMuNXB4O319IjsKICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzdCk7CiAgICB9CiAgfSkoKTsKICAoZnVuY3Rpb24oKXsKICAgIGlmKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXltLWVtYWlsLWNhcHR1cmUtc3R5bGUnKSl7CiAgICAgIHZhciBzdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7CiAgICAgIHN0LmlkID0gJ215bS1lbWFpbC1jYXB0dXJlLXN0eWxlJzsKICAgICAgc3QudGV4dENvbnRlbnQgPSAiI215bS1hdWRpdG9yLXJlc3VsdGFkbyAuYXVkaXRvci1hbGVydGFzIC5hdWRpdG9yLWFsZXJ0YS1wcml2YWN5e21hcmdpbi10b3A6OHB4O21hcmdpbi1ib3R0b206MTJweDt9I215bS1hdWRpdG9yLXJlc3VsdGFkbyAuYXVkaXRvci1lbWFpbC1jYXB0dXJle21hcmdpbjoyNHB4IDAgMThweDtwYWRkaW5nOjA7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCByZ2JhKDE4MiwyNTUsNTgsLjA2KSAwJSwgcmdiYSgyMCwzMCwxOCwuNjUpIDEwMCUpO2JvcmRlcjoxcHggc29saWQgcmdiYSgxODIsMjU1LDU4LC4yOCk7Ym9yZGVyLXJhZGl1czoxMnB4O292ZXJmbG93OmhpZGRlbjt9I215bS1hdWRpdG9yLXJlc3VsdGFkbyAuYXVkaXRvci1lbWFpbC1jYXB0dXJlLWlubmVye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2dhcDoxOHB4O3BhZGRpbmc6MjBweCAyMnB4O30jbXltLWF1ZGl0b3ItcmVzdWx0YWRvIC5hdWRpdG9yLWVtYWlsLWNhcHR1cmUtaWNvbntmb250LXNpemU6MzBweDtsaW5lLWhlaWdodDoxO2ZsZXgtc2hyaW5rOjA7bWFyZ2luLXRvcDo0cHg7ZmlsdGVyOmRyb3Atc2hhZG93KDAgMCA2cHggcmdiYSgxODIsMjU1LDU4LC40NSkpO30jbXltLWF1ZGl0b3ItcmVzdWx0YWRvIC5hdWRpdG9yLWVtYWlsLWNhcHR1cmUtY29udGVudHtmbGV4OjE7bWluLXdpZHRoOjA7fSNteW0tYXVkaXRvci1yZXN1bHRhZG8gLmF1ZGl0b3ItZW1haWwtY2FwdHVyZS1jb250ZW50IGg0e21hcmdpbjowIDAgNnB4O2NvbG9yOiNiNmZmM2E7Zm9udC1zaXplOjE3cHg7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4ycHg7fSNteW0tYXVkaXRvci1yZXN1bHRhZG8gLmF1ZGl0b3ItZW1haWwtY2FwdHVyZS1jb250ZW50IHB7bWFyZ2luOjAgMCAxNHB4O2NvbG9yOiNjZmU2YzI7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MS41NTt9I215bS1hdWRpdG9yLXJlc3VsdGFkbyAuYXVkaXRvci1lbWFpbC1mb3JtLXJvd3tkaXNwbGF5OmZsZXg7Z2FwOjEwcHg7ZmxleC13cmFwOndyYXA7fSNteW0tYXVkaXRvci1yZXN1bHRhZG8gLmF1ZGl0b3ItZW1haWwtaW5wdXR7ZmxleDoxO21pbi13aWR0aDoyMDBweDtwYWRkaW5nOjExcHggMTRweDtib3JkZXItcmFkaXVzOjhweDtiYWNrZ3JvdW5kOiMwYTBmMGE7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDE4MiwyNTUsNTgsLjIyKTtjb2xvcjojZTZmZmQ5O2ZvbnQtc2l6ZToxNC41cHg7b3V0bGluZTpub25lO3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4xNXMsIGJveC1zaGFkb3cgLjE1czt9I215bS1hdWRpdG9yLXJlc3VsdGFkbyAuYXVkaXRvci1lbWFpbC1pbnB1dDpmb2N1c3tib3JkZXItY29sb3I6I2I2ZmYzYTtib3gtc2hhZG93OjAgMCAwIDNweCByZ2JhKDE4MiwyNTUsNTgsLjE4KTt9I215bS1hdWRpdG9yLXJlc3VsdGFkbyAuYXVkaXRvci1lbWFpbC1pbnB1dDo6cGxhY2Vob2xkZXJ7Y29sb3I6IzZhOGI2Yzt9I215bS1hdWRpdG9yLXJlc3VsdGFkbyAuYXVkaXRvci1lbWFpbC1pbnB1dDpkaXNhYmxlZHtvcGFjaXR5Oi41O2N1cnNvcjpub3QtYWxsb3dlZDt9I215bS1hdWRpdG9yLXJlc3VsdGFkbyAuYXVkaXRvci1lbWFpbC1idG57cGFkZGluZzoxMXB4IDIycHg7Ym9yZGVyOm5vbmU7Ym9yZGVyLXJhZGl1czo4cHg7Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZDojYjZmZjNhO2NvbG9yOiMwYTBmMGE7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtc2l6ZToxNHB4O2xldHRlci1zcGFjaW5nOi4zcHg7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xNXMsIHRyYW5zZm9ybSAuMXM7d2hpdGUtc3BhY2U6bm93cmFwO30jbXltLWF1ZGl0b3ItcmVzdWx0YWRvIC5hdWRpdG9yLWVtYWlsLWJ0bjpob3ZlcntiYWNrZ3JvdW5kOiNjOGZmNWE7fSNteW0tYXVkaXRvci1yZXN1bHRhZG8gLmF1ZGl0b3ItZW1haWwtYnRuOmFjdGl2ZXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgxcHgpO30jbXltLWF1ZGl0b3ItcmVzdWx0YWRvIC5hdWRpdG9yLWVtYWlsLWJ0bjpkaXNhYmxlZHtvcGFjaXR5Oi42O2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kOiM4ZmI1OTM7fSNteW0tYXVkaXRvci1yZXN1bHRhZG8gLmF1ZGl0b3ItZW1haWwtZmVlZGJhY2t7bWFyZ2luLXRvcDoxMHB4O2ZvbnQtc2l6ZToxMy41cHg7bGluZS1oZWlnaHQ6MS41O21pbi1oZWlnaHQ6MWVtO30jbXltLWF1ZGl0b3ItcmVzdWx0YWRvIC5hdWRpdG9yLWVtYWlsLWZlZWRiYWNrLmlzLWVycm9ye2NvbG9yOiNmZjhiOGI7fSNteW0tYXVkaXRvci1yZXN1bHRhZG8gLmF1ZGl0b3ItZW1haWwtZmVlZGJhY2suaXMtc3VjY2Vzc3tjb2xvcjojYjZmZjNhO30jbXltLWF1ZGl0b3ItcmVzdWx0YWRvIC5hdWRpdG9yLWVtYWlsLWZlZWRiYWNrLmlzLXN1Y2Nlc3Mgc3Ryb25ne2NvbG9yOiNiNmZmM2E7fSNteW0tYXVkaXRvci1yZXN1bHRhZG8gLmF1ZGl0b3ItZW1haWwtZmVlZGJhY2suaXMtbG9hZGluZ3tjb2xvcjojOGZiNTkzO31AbWVkaWEgKG1heC13aWR0aDogNTYwcHgpeyNteW0tYXVkaXRvci1yZXN1bHRhZG8gLmF1ZGl0b3ItZW1haWwtY2FwdHVyZS1pbm5lcntmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjEycHg7cGFkZGluZzoxOHB4IDE2cHg7fSNteW0tYXVkaXRvci1yZXN1bHRhZG8gLmF1ZGl0b3ItZW1haWwtY2FwdHVyZS1jb250ZW50IGg0e2ZvbnQtc2l6ZToxNS41cHg7fSNteW0tYXVkaXRvci1yZXN1bHRhZG8gLmF1ZGl0b3ItZW1haWwtY2FwdHVyZS1jb250ZW50IHB7Zm9udC1zaXplOjEzLjVweDt9I215bS1hdWRpdG9yLXJlc3VsdGFkbyAuYXVkaXRvci1lbWFpbC1idG57d2lkdGg6MTAwJTt9fSI7CiAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc3QpOwogICAgfQogIH0pKCk7CiAgKGZ1bmN0aW9uKCl7CiAgICBpZighZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215bS1lbWFpbC1jYXB0dXJlLWV4dHJhLXN0eWxlJykpewogICAgICB2YXIgc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpOwogICAgICBzdC5pZCA9ICdteW0tZW1haWwtY2FwdHVyZS1leHRyYS1zdHlsZSc7CiAgICAgIHN0LnRleHRDb250ZW50ID0gIiNteW0tYXVkaXRvci1yZXN1bHRhZG8gLmF1ZGl0b3ItZW1haWwtY2FwdHVyZS1jb250ZW50IC5hdWRpdG9yLWVtYWlsLWxlYWQtZGVzY3ttYXJnaW46MCAwIDE0cHg7Y29sb3I6I2NmZTZjMjtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDoxLjU1O30jbXltLWF1ZGl0b3ItcmVzdWx0YWRvIC5hdWRpdG9yLWVtYWlsLWNhcHR1cmUtY29udGVudCAuYXVkaXRvci1lbWFpbC1sZWFkLWRlc2Mgc3Ryb25ne2NvbG9yOiNmZmNjY2M7fSNteW0tYXVkaXRvci1yZXN1bHRhZG8gLmF1ZGl0b3ItZW1haWwtbGVnYWx7bWFyZ2luLXRvcDoxMHB4O2NvbG9yOiM2YThiNmM7Zm9udC1zaXplOjExLjVweDtsaW5lLWhlaWdodDoxLjU7fSI7CiAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc3QpOwogICAgfQogIH0pKCk7CiAgICBmdW5jdGlvbiB3aXJlRW1haWxDYXB0dXJlKHJvb3RFbCwgZGF0YSl7CiAgICB2YXIgc2VjdGlvbiA9IHJvb3RFbC5xdWVyeVNlbGVjdG9yKCcuYXVkaXRvci1lbWFpbC1jYXB0dXJlJyk7CiAgICBpZiAoIXNlY3Rpb24pIHJldHVybjsKICAgIHZhciBpbnB1dCA9IHNlY3Rpb24ucXVlcnlTZWxlY3RvcignLmF1ZGl0b3ItZW1haWwtaW5wdXQnKTsKICAgIHZhciBidG4gICA9IHNlY3Rpb24ucXVlcnlTZWxlY3RvcignLmF1ZGl0b3ItZW1haWwtYnRuJyk7CiAgICB2YXIgZmIgICAgPSBzZWN0aW9uLnF1ZXJ5U2VsZWN0b3IoJy5hdWRpdG9yLWVtYWlsLWZlZWRiYWNrJyk7CiAgICBpZiAoIWlucHV0IHx8ICFidG4gfHwgIWZiKSByZXR1cm47CiAgICB2YXIgRU1BSUxfUkUgPSAvXlteXHNAXStAW15cc0BdK1wuW15cc0BdezIsfSQvOwoKICAgIGZ1bmN0aW9uIHNldEZiKGNscywgdGV4dCwgaXNIdG1sKXsKICAgICAgZmIuY2xhc3NOYW1lID0gJ2F1ZGl0b3ItZW1haWwtZmVlZGJhY2sgJyArIGNsczsKICAgICAgaWYgKGlzSHRtbCkgZmIuaW5uZXJIVE1MID0gdGV4dDsgZWxzZSBmYi50ZXh0Q29udGVudCA9IHRleHQ7CiAgICB9CgogICAgZnVuY3Rpb24gbG9hZEh0bWwyUGRmKCl7CiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpewogICAgICAgIGlmICh3aW5kb3cuaHRtbDJwZGYpIHJldHVybiByZXNvbHZlKHdpbmRvdy5odG1sMnBkZik7CiAgICAgICAgdmFyIHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKICAgICAgICBzLnNyYyA9ICdodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9odG1sMnBkZi5qcy8wLjEwLjEvaHRtbDJwZGYuYnVuZGxlLm1pbi5qcyc7CiAgICAgICAgcy5vbmxvYWQgID0gZnVuY3Rpb24oKXsgcmVzb2x2ZSh3aW5kb3cuaHRtbDJwZGYpOyB9OwogICAgICAgIHMub25lcnJvciA9IGZ1bmN0aW9uKCl7IHJlamVjdChuZXcgRXJyb3IoJ1BERl9MSUJfTE9BRCcpKTsgfTsKICAgICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHMpOwogICAgICB9KTsKICAgIH0KCiAgICBmdW5jdGlvbiBidWlsZFBkZk5vZGUoKXsKICAgICAgdmFyIHNyYyA9IHJvb3RFbC5jbG9uZU5vZGUodHJ1ZSk7CiAgICAgIC8vIFJlbW92ZSB0aGUgZW1haWwtY2FwdHVyZSBhbmQgc3VibWl0IGJ1dHRvbiBhcmVhcyBmcm9tIHRoZSBjbG9uZWQgbm9kZQogICAgICB2YXIgcm0gPSBzcmMucXVlcnlTZWxlY3RvckFsbCgnLmF1ZGl0b3ItZW1haWwtY2FwdHVyZScpOwogICAgICBmb3IgKHZhciBpPTA7aTxybS5sZW5ndGg7aSsrKSBybVtpXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHJtW2ldKTsKICAgICAgLy8gQWRkIGEgc3Ryb25nIGRpc2NsYWltZXIgYXQgdGhlIFRPUCBvZiB0aGUgUERGCiAgICAgIHZhciB0b3AgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICAgdG9wLnN0eWxlLmNzc1RleHQgPSAnYmFja2dyb3VuZDojN2YxZDFkO2JvcmRlcjoycHggc29saWQgI2RjMjYyNjtjb2xvcjojZmZmO3BhZGRpbmc6MTRweCAxNnB4O2JvcmRlci1yYWRpdXM6OHB4O21hcmdpbjowIDAgMTZweDtmb250LWZhbWlseTpBcmlhbCxzYW5zLXNlcmlmOyc7CiAgICAgIHRvcC5pbm5lckhUTUwgPSAnPGRpdiBzdHlsZT0iZm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6Ym9sZDtsZXR0ZXItc3BhY2luZzouNHB4O21hcmdpbi1ib3R0b206NnB4OyI+4pqg77iPIFJFU1VMVEFET1MgTk8gVkFMSURBRE9TIENMw41OSUNBTUVOVEU8L2Rpdj4nICsKICAgICAgICAnPGRpdiBzdHlsZT0iZm9udC1zaXplOjEzcHg7bGluZS1oZWlnaHQ6MS41OyI+RXN0ZSBpbmZvcm1lIGVzIGluZm9ybWF0aXZvIHkgZWR1Y2F0aXZvLiBOTyBjb25zdGl0dXllIGRpYWduw7NzdGljbyBtw6lkaWNvLiA8c3Ryb25nPlNJRU1QUkUgY29uc3VsdGEgYSB1biBwcm9mZXNpb25hbCBkZSBsYSBzYWx1ZCBjYWxpZmljYWRvIGFudGVzIGRlIHRvbWFyIGN1YWxxdWllciBhY2Npw7NuIGJhc2FkYSBlbiBlc3RhcyByZWNvbWVuZGFjaW9uZXMuPC9zdHJvbmc+PC9kaXY+JzsKICAgICAgc3JjLmluc2VydEJlZm9yZSh0b3AsIHNyYy5maXJzdENoaWxkKTsKICAgICAgLy8gV3JhcCBpbiBhIHN0eWxlZCBjb250YWluZXIgZm9yIHRoZSBQREYKICAgICAgdmFyIHdyYXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICAgd3JhcC5zdHlsZS5jc3NUZXh0ID0gJ2JhY2tncm91bmQ6IzBhMGYwYTtjb2xvcjojZTZmZmQ5O3BhZGRpbmc6MjRweDtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2Esc2Fucy1zZXJpZjt3aWR0aDo3OTRweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWFyZ2luOjA7JzsKICAgICAgdmFyIGhkciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICBoZHIuc3R5bGUuY3NzVGV4dCA9ICdtYXJnaW4tYm90dG9tOjE4cHg7cGFkZGluZy1ib3R0b206MTRweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCByZ2JhKDE4MiwyNTUsNTgsLjIyKTsnOwogICAgICBoZHIuaW5uZXJIVE1MID0gJzxkaXYgc3R5bGU9ImNvbG9yOiNiNmZmM2E7Zm9udC1zaXplOjIycHg7Zm9udC13ZWlnaHQ6Ym9sZDtsZXR0ZXItc3BhY2luZzouNXB4OyI+TWVudGUmYW1wO01hbnphbmE8L2Rpdj48ZGl2IHN0eWxlPSJjb2xvcjojOGZiNTkzO2ZvbnQtc2l6ZToxMXB4O2xldHRlci1zcGFjaW5nOjFweDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bWFyZ2luLXRvcDozcHg7Ij5BdWRpdG9yIGRlIEJpb21hcmNhZG9yZXMg4oCUIEluZm9ybWU8L2Rpdj4nOwogICAgICB3cmFwLmFwcGVuZENoaWxkKGhkcik7CiAgICAgIHdyYXAuYXBwZW5kQ2hpbGQoc3JjKTsKICAgICAgcmV0dXJuIHdyYXA7CiAgICB9CgogICAgZnVuY3Rpb24gaW5qZWN0UGRmQmFzZVN0eWxlcyhub2RlKXsKICAgICAgLy8gSW5saW5lIENTUyBjcml0aWNhbCBzbyBQREYgcmVuZGVycyBldmVuIHdpdGhvdXQgcGFnZSBDU1MKICAgICAgdmFyIGNzcyA9ICcnOwogICAgICBjc3MgKz0gJy5yZXN1bHRhZG8tYXVkaXRvcmlhLC5yZXN1bHRhZG8tYXVkaXRvcmlhICp7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOiNlNmZmZDk7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLHNhbnMtc2VyaWY7fSc7CiAgICAgIGNzcyArPSAnLnJlc3VsdGFkby1hdWRpdG9yaWEgaDMsLnJlc3VsdGFkby1hdWRpdG9yaWEgaDR7Y29sb3I6I2I2ZmYzYTttYXJnaW46MCAwIDEwcHg7fSc7CiAgICAgIGNzcyArPSAnLnJlc3VsdGFkby1hdWRpdG9yaWEgaDN7Zm9udC1zaXplOjIwcHg7fSc7CiAgICAgIGNzcyArPSAnLnJlc3VsdGFkby1hdWRpdG9yaWEgaDR7Zm9udC1zaXplOjE1cHg7bWFyZ2luLXRvcDoxNHB4O2xldHRlci1zcGFjaW5nOi40cHg7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO30nOwogICAgICBjc3MgKz0gJy5yZXN1bHRhZG8tYXVkaXRvcmlhIHB7bWFyZ2luOjAgMCAxMHB4O2ZvbnQtc2l6ZToxMy41cHg7bGluZS1oZWlnaHQ6MS41NTt9JzsKICAgICAgY3NzICs9ICcucmVzdWx0YWRvLWF1ZGl0b3JpYSB1bCwucmVzdWx0YWRvLWF1ZGl0b3JpYSBvbHttYXJnaW46MCAwIDEycHggMThweDtwYWRkaW5nOjA7fSc7CiAgICAgIGNzcyArPSAnLnJlc3VsdGFkby1hdWRpdG9yaWEgbGl7bWFyZ2luOjAgMCA2cHg7Zm9udC1zaXplOjEzLjVweDtsaW5lLWhlaWdodDoxLjU7Y29sb3I6I2U2ZmZkOTt9JzsKICAgICAgY3NzICs9ICcucmVzdWx0YWRvLWF1ZGl0b3JpYSBzZWN0aW9ue21hcmdpbjowIDAgMTZweDtwYWRkaW5nOjEycHggMTRweDtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjAzKTtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMTgyLDI1NSw1OCwuMTUpO2JvcmRlci1yYWRpdXM6OHB4O30nOwogICAgICBjc3MgKz0gJy5yZXN1bHRhZG8tYXVkaXRvcmlhIGhlYWRlci5hdWRpdG9yLXJlc3VsdGFkby1oZWFke2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOm5vbmU7cGFkZGluZzowIDAgOHB4O21hcmdpbjowIDAgMTRweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCByZ2JhKDE4MiwyNTUsNTgsLjIpO30nOwogICAgICBjc3MgKz0gJy5yZXN1bHRhZG8tYXVkaXRvcmlhIHRhYmxle3dpZHRoOjEwMCU7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO21hcmdpbjo4cHggMCAxNHB4O2ZvbnQtc2l6ZToxM3B4O30nOwogICAgICBjc3MgKz0gJy5yZXN1bHRhZG8tYXVkaXRvcmlhIHRhYmxlIHRoLC5yZXN1bHRhZG8tYXVkaXRvcmlhIHRhYmxlIHRke3BhZGRpbmc6N3B4IDlweDtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMTgyLDI1NSw1OCwuMTgpO3RleHQtYWxpZ246bGVmdDt2ZXJ0aWNhbC1hbGlnbjp0b3A7Y29sb3I6I2U2ZmZkOTt9JzsKICAgICAgY3NzICs9ICcucmVzdWx0YWRvLWF1ZGl0b3JpYSB0YWJsZSB0aGVhZCB0aHtiYWNrZ3JvdW5kOnJnYmEoMTgyLDI1NSw1OCwuMTApO2NvbG9yOiNiNmZmM2E7Zm9udC13ZWlnaHQ6Ym9sZDt9JzsKICAgICAgY3NzICs9ICcucmVzdWx0YWRvLWF1ZGl0b3JpYSAuYXVkaXRvci1mbGFne3BhZGRpbmc6MTBweCAxMnB4O2JvcmRlci1yYWRpdXM6NnB4O21hcmdpbjo4cHggMDtmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDoxLjU7fSc7CiAgICAgIGNzcyArPSAnLnJlc3VsdGFkby1hdWRpdG9yaWEgLmF1ZGl0b3ItZmxhZy5mbGFnLXVyZ2VudHtiYWNrZ3JvdW5kOnJnYmEoMjIwLDM4LDM4LC4xNSk7Ym9yZGVyLWxlZnQ6NHB4IHNvbGlkICNkYzI2MjY7Y29sb3I6I2ZlY2FjYTt9JzsKICAgICAgY3NzICs9ICcucmVzdWx0YWRvLWF1ZGl0b3JpYSAuYXVkaXRvci1mbGFnLmZsYWctbG93Y29uZntiYWNrZ3JvdW5kOnJnYmEoNTksMTMwLDI0NiwuMTIpO2JvcmRlci1sZWZ0OjRweCBzb2xpZCAjM2I4MmY2O2NvbG9yOiNiZmRiZmU7fSc7CiAgICAgIGNzcyArPSAnLnJlc3VsdGFkby1hdWRpdG9yaWEgLmF1ZGl0b3ItZmxhZy5mbGFnLXNlY3VyaXR5e2JhY2tncm91bmQ6cmdiYSgxNjgsODUsMjQ3LC4xMik7Ym9yZGVyLWxlZnQ6NHB4IHNvbGlkICNhODU1Zjc7Y29sb3I6I2U5ZDVmZjt9JzsKICAgICAgY3NzICs9ICcucmVzdWx0YWRvLWF1ZGl0b3JpYSAuYXVkaXRvci1mbGFnLmZsYWctcHJpdmFjeXtiYWNrZ3JvdW5kOnJnYmEoMTQsMTY1LDIzMywuMTIpO2JvcmRlci1sZWZ0OjRweCBzb2xpZCAjMGVhNWU5O2NvbG9yOiNiYWU2ZmQ7fSc7CiAgICAgIGNzcyArPSAnLnJlc3VsdGFkby1hdWRpdG9yaWEgLmF1ZGl0b3ItZmxhZy5mbGFnLWV2aWRlbmNle2JhY2tncm91bmQ6cmdiYSgyMzQsMTc5LDgsLjEyKTtib3JkZXItbGVmdDo0cHggc29saWQgI2VhYjMwODtjb2xvcjojZmRlNjhhO30nOwogICAgICBjc3MgKz0gJy5yZXN1bHRhZG8tYXVkaXRvcmlhIC5hdWRpdG9yLWVzdGFkby1nbG9iYWx7Zm9udC1zaXplOjEyLjVweDtjb2xvcjojOGZiNTkzO21hcmdpbi10b3A6NHB4O30nOwogICAgICBjc3MgKz0gJy5yZXN1bHRhZG8tYXVkaXRvcmlhIC5hdWRpdG9yLWJhZGdle2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MnB4IDhweDtib3JkZXItcmFkaXVzOjk5OXB4O2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OmJvbGQ7bGV0dGVyLXNwYWNpbmc6LjVweDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Y29sb3I6IzBhMGYwYTtiYWNrZ3JvdW5kOiNiNmZmM2E7fSc7CiAgICAgIHZhciBzdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7CiAgICAgIHN0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpOwogICAgICBub2RlLmluc2VydEJlZm9yZShzdCwgbm9kZS5maXJzdENoaWxkKTsKICAgIH0KCiAgICBmdW5jdGlvbiBnZW5lcmF0ZVBkZkJsb2IoKXsKICAgICAgcmV0dXJuIGxvYWRIdG1sMlBkZigpLnRoZW4oZnVuY3Rpb24oaHRtbDJwZGYpewogICAgICAgIHZhciBub2RlID0gYnVpbGRQZGZOb2RlKCk7CiAgICAgICAgaW5qZWN0UGRmQmFzZVN0eWxlcyhub2RlKTsKICAgICAgICAvLyBDb250YWluZXIgd2l0aCBvdmVyZmxvdzpoaWRkZW47IGhlaWdodDowOyB3aWR0aDowOyBwb3NpdGlvbjpyZWxhdGl2ZTsKICAgICAgICAvLyBUaGlzIGtlZXBzIHRoZSBjaGlsZCBpbiBub3JtYWwgZmxvdyAoc28gaHRtbDJjYW52YXMgY2FuIGNhcHR1cmUgaXQpCiAgICAgICAgLy8gd2hpbGUgaGlkaW5nIGl0IGZyb20gdGhlIHVzZXIuCiAgICAgICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICAgIGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTsKICAgICAgICBjb250YWluZXIuc3R5bGUuY3NzVGV4dCA9ICdvdmVyZmxvdzpoaWRkZW47aGVpZ2h0OjA7d2lkdGg6MDtwb3NpdGlvbjpyZWxhdGl2ZTtwb2ludGVyLWV2ZW50czpub25lOyc7CiAgICAgICAgLy8gVGhlIG5vZGUgaXRzZWxmIHN0YXlzIGluIG5vcm1hbCBmbG93IGluc2lkZSB0aGUgY29udGFpbmVyCiAgICAgICAgbm9kZS5zdHlsZS5wb3NpdGlvbiA9ICdzdGF0aWMnOwogICAgICAgIG5vZGUuc3R5bGUubGVmdCA9ICdhdXRvJzsKICAgICAgICBub2RlLnN0eWxlLnRvcCA9ICdhdXRvJzsKICAgICAgICBub2RlLnN0eWxlLm9wYWNpdHkgPSAnMSc7CiAgICAgICAgbm9kZS5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnOwogICAgICAgIG5vZGUuc3R5bGUuekluZGV4ID0gJzAnOwogICAgICAgIG5vZGUuc3R5bGUud2lkdGggPSAnNzk0cHgnOwogICAgICAgIG5vZGUuc3R5bGUubWF4V2lkdGggPSAnNzk0cHgnOwogICAgICAgIG5vZGUuc3R5bGUuYm94U2l6aW5nID0gJ2JvcmRlci1ib3gnOwogICAgICAgIG5vZGUuc3R5bGUubWFyZ2luID0gJzAnOwogICAgICAgIG5vZGUuc3R5bGUuYmFja2dyb3VuZCA9ICcjMGEwZjBhJzsKICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQobm9kZSk7CiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjb250YWluZXIpOwogICAgICAgIC8vIEZvcmNlIGxheW91dCAocmVhZCBtZWFzdXJlZCBoZWlnaHQpCiAgICAgICAgdmFyIGggPSBub2RlLm9mZnNldEhlaWdodDsKICAgICAgICAvLyBXYWl0IGZvbnRzICsgdHdvIGFuaW1hdGlvbiBmcmFtZXMgYmVmb3JlIGNhcHR1cmluZwogICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlKXsKICAgICAgICAgIHZhciByZWFkeSA9IChkb2N1bWVudC5mb250cyAmJiBkb2N1bWVudC5mb250cy5yZWFkeSkgPyBkb2N1bWVudC5mb250cy5yZWFkeSA6IFByb21pc2UucmVzb2x2ZSgpOwogICAgICAgICAgcmVhZHkudGhlbihmdW5jdGlvbigpewogICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXsKICAgICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXsgcmVzb2x2ZSgpOyB9KTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9KTsKICAgICAgICB9KS50aGVuKGZ1bmN0aW9uKCl7CiAgICAgICAgICB2YXIgb3B0ID0gewogICAgICAgICAgICBtYXJnaW46IFs4LDgsOCw4XSwKICAgICAgICAgICAgZmlsZW5hbWU6ICdpbmZvcm1lLWF1ZGl0b3ItbXltLnBkZicsCiAgICAgICAgICAgIGltYWdlOiB7IHR5cGU6J2pwZWcnLCBxdWFsaXR5OjAuOTIgfSwKICAgICAgICAgICAgaHRtbDJjYW52YXM6IHsgc2NhbGU6MiwgYmFja2dyb3VuZENvbG9yOicjMGEwZjBhJywgdXNlQ09SUzp0cnVlLCBsb2dnaW5nOmZhbHNlLCB3aWR0aDogNzk0LCB3aW5kb3dXaWR0aDogNzk0LCB3aW5kb3dIZWlnaHQ6IE1hdGgubWF4KDEyMDAsIGggKyAyMDApLCB4OiAwLCB5OiAwLCBzY3JvbGxYOiAwLCBzY3JvbGxZOiAwIH0sCiAgICAgICAgICAgIGpzUERGOiB7IHVuaXQ6J21tJywgZm9ybWF0OidhNCcsIG9yaWVudGF0aW9uOidwb3J0cmFpdCcgfSwKICAgICAgICAgICAgcGFnZWJyZWFrOiB7IG1vZGU6Wydjc3MnLCdsZWdhY3knXSB9CiAgICAgICAgICB9OwogICAgICAgICAgcmV0dXJuIGh0bWwycGRmKCkuc2V0KG9wdCkuZnJvbShub2RlKS5vdXRwdXRQZGYoJ2Jsb2InKS50aGVuKGZ1bmN0aW9uKGJsb2IpewogICAgICAgICAgICBpZiAoY29udGFpbmVyLnBhcmVudE5vZGUpIGNvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGNvbnRhaW5lcik7CiAgICAgICAgICAgIHJldHVybiBibG9iOwogICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oZXJyKXsKICAgICAgICAgICAgaWYgKGNvbnRhaW5lci5wYXJlbnROb2RlKSBjb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjb250YWluZXIpOwogICAgICAgICAgICB0aHJvdyBlcnI7CiAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9CgogICAgZnVuY3Rpb24gZG9TdWJtaXQoKXsKICAgICAgdmFyIGVtYWlsID0gKGlucHV0LnZhbHVlIHx8ICcnKS50cmltKCk7CiAgICAgIGlmICghRU1BSUxfUkUudGVzdChlbWFpbCkpewogICAgICAgIHNldEZiKCdpcy1lcnJvcicsICdQb3IgZmF2b3IgaW50cm9kdWNlIHVuIGNvcnJlbyB2w6FsaWRvLicpOwogICAgICAgIGlucHV0LmZvY3VzKCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHZhciBjZmcgPSB3aW5kb3cubXltQXVkaXRvciB8fCB7fTsKICAgICAgdmFyIGxlYWRFbmRwb2ludCA9IGNmZy5sZWFkRW5kcG9pbnQgfHwgJy93cC1qc29uL215bS92MS9sZWFkJzsKICAgICAgdmFyIGxlYWROb25jZSAgICA9IGNmZy5ub25jZSB8fCAnJzsKICAgICAgdmFyIGJpb21hcmNhZG9yICA9IChkYXRhICYmIGRhdGEuZ3J1cG9fZXZhbHVhZG8pIHx8ICcnOwogICAgICB2YXIgcmVxdWVzdElkICAgID0gKGRhdGEgJiYgZGF0YS5yZXF1ZXN0X2lkKSB8fCAnJzsKICAgICAgdmFyIGVzdGFkbyAgICAgICA9IChkYXRhICYmIGRhdGEuZXZhbHVhY2lvbl9pbnRlZ3JhZGEgJiYgZGF0YS5ldmFsdWFjaW9uX2ludGVncmFkYS5lc3RhZG9fZ2VuZXJhbCkgfHwgJyc7CgogICAgICB2YXIgb2xkTGFiZWwgPSBidG4udGV4dENvbnRlbnQ7CiAgICAgIGJ0bi5kaXNhYmxlZCA9IHRydWU7CiAgICAgIGlucHV0LmRpc2FibGVkID0gdHJ1ZTsKICAgICAgYnRuLnRleHRDb250ZW50ID0gJ0dlbmVyYW5kbyBQREbigKYnOwogICAgICBzZXRGYignaXMtbG9hZGluZycsICdHZW5lcmFuZG8gdHUgaW5mb3JtZSBlbiBQREbigKYnKTsKCiAgICAgIGdlbmVyYXRlUGRmQmxvYigpLnRoZW4oZnVuY3Rpb24oYmxvYil7CiAgICAgICAgYnRuLnRleHRDb250ZW50ID0gJ0VudmlhbmRv4oCmJzsKICAgICAgICBzZXRGYignaXMtbG9hZGluZycsICdFbnZpYW5kbyB0dSBpbmZvcm1lIGEgJyArIGVtYWlsICsgJ+KApicpOwogICAgICAgIHZhciBmZCA9IG5ldyBGb3JtRGF0YSgpOwogICAgICAgIGZkLmFwcGVuZCgnZW1haWwnLCBlbWFpbCk7CiAgICAgICAgZmQuYXBwZW5kKCdiaW9tYXJjYWRvcicsIGJpb21hcmNhZG9yKTsKICAgICAgICBmZC5hcHBlbmQoJ3JlcXVlc3RfaWQnLCByZXF1ZXN0SWQpOwogICAgICAgIGZkLmFwcGVuZCgnZXN0YWRvX2dlbmVyYWwnLCBlc3RhZG8pOwogICAgICAgIGZkLmFwcGVuZCgnaW5mb3JtZScsIGJsb2IsICdpbmZvcm1lLWF1ZGl0b3ItbXltLnBkZicpOwogICAgICAgIHJldHVybiBmZXRjaChsZWFkRW5kcG9pbnQsIHsKICAgICAgICAgIG1ldGhvZDonUE9TVCcsIGNyZWRlbnRpYWxzOidpbmNsdWRlJywKICAgICAgICAgIGhlYWRlcnM6IHsgJ1gtV1AtTm9uY2UnOiBsZWFkTm9uY2UgfSwKICAgICAgICAgIGJvZHk6IGZkCiAgICAgICAgfSkudGhlbihmdW5jdGlvbihyKXsgcmV0dXJuIHIudGV4dCgpLnRoZW4oZnVuY3Rpb24odCl7IHJldHVybiB7IG9rOnIub2ssIHN0YXR1czpyLnN0YXR1cywgdGV4dDp0IH07IH0pOyB9KTsKICAgICAgfSkudGhlbihmdW5jdGlvbihyZXMpewogICAgICAgIHZhciBwYXJzZWQgPSBudWxsOyB0cnkgeyBwYXJzZWQgPSBKU09OLnBhcnNlKHJlcy50ZXh0KTsgfSBjYXRjaChlKXt9CiAgICAgICAgaWYgKHJlcy5vayAmJiBwYXJzZWQgJiYgKHBhcnNlZC5vayA9PT0gdHJ1ZSB8fCBwYXJzZWQuX29rID09PSB0cnVlKSl7CiAgICAgICAgICB2YXIgc3ViU3RhdHVzID0gcGFyc2VkLnN1YnNjcmliZWQgfHwgJyc7CiAgICAgICAgICB2YXIgc3ViTXNnID0gJyc7CiAgICAgICAgICBpZiAoc3ViU3RhdHVzID09PSAnc3Vic2NyaWJlZCcpIHN1Yk1zZyA9ICcgVGFtYmnDqW4gdGUgc3VzY3JpYmltb3MgYSBudWVzdHJhIGxpc3RhIOKAlCByZXZpc2EgdHUgY29ycmVvIHBhcmEgY29uZmlybWFyLic7CiAgICAgICAgICBlbHNlIGlmIChzdWJTdGF0dXMgPT09ICdhbHJlYWR5X3N1YnNjcmliZWQnKSBzdWJNc2cgPSAnIFlhIGVzdGFiYXMgc3VzY3JpdG8gYSBudWVzdHJhIGxpc3RhLic7CiAgICAgICAgICBzZXRGYignaXMtc3VjY2VzcycsICc8c3Ryb25nPsKhTGlzdG8hPC9zdHJvbmc+IFRlIGVudmlhbW9zIHR1IGluZm9ybWUgYSA8c3Ryb25nPicgKyBlbWFpbC5yZXBsYWNlKC9bPD4mXS9nLCcnKSArICc8L3N0cm9uZz4uIFJldmlzYSB0dSBiYW5kZWphICh5IGxhIGNhcnBldGEgZGUgc3BhbSBwb3Igc2kgYWNhc28pLicgKyBzdWJNc2csIHRydWUpOwogICAgICAgICAgYnRuLnRleHRDb250ZW50ID0gJ0VudmlhZG8g4pyTJzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdmFyIG1zZyA9IChwYXJzZWQgJiYgcGFyc2VkLm1lc3NhZ2UpIHx8ICdObyBwdWRpbW9zIGVudmlhciB0dSBpbmZvcm1lLiBJbnTDqW50YWxvIGVuIHVub3MgbWludXRvcy4nOwogICAgICAgICAgc2V0RmIoJ2lzLWVycm9yJywgbXNnKTsKICAgICAgICAgIGJ0bi5kaXNhYmxlZCA9IGZhbHNlOyBpbnB1dC5kaXNhYmxlZCA9IGZhbHNlOwogICAgICAgICAgYnRuLnRleHRDb250ZW50ID0gb2xkTGFiZWw7CiAgICAgICAgfQogICAgICB9KS5jYXRjaChmdW5jdGlvbihlcnIpewogICAgICAgIHZhciBtc2cgPSAoZXJyICYmIGVyci5tZXNzYWdlID09PSAnUERGX0xJQl9MT0FEJykgPyAnTm8gZnVlIHBvc2libGUgY2FyZ2FyIGVsIGdlbmVyYWRvciBkZSBQREYuIFZlcmlmaWNhIHR1IGNvbmV4acOzbiBlIGludMOpbnRhbG8gb3RyYSB2ZXouJyA6ICdFcnJvciBpbmVzcGVyYWRvIGdlbmVyYW5kbyBvIGVudmlhbmRvIGVsIGluZm9ybWUuJzsKICAgICAgICBzZXRGYignaXMtZXJyb3InLCBtc2cpOwogICAgICAgIGJ0bi5kaXNhYmxlZCA9IGZhbHNlOyBpbnB1dC5kaXNhYmxlZCA9IGZhbHNlOwogICAgICAgIGJ0bi50ZXh0Q29udGVudCA9IG9sZExhYmVsOwogICAgICB9KTsKICAgIH0KCiAgICBidG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBkb1N1Ym1pdCk7CiAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZnVuY3Rpb24oZXYpeyBpZiAoZXYua2V5ID09PSAnRW50ZXInKXsgZXYucHJldmVudERlZmF1bHQoKTsgZG9TdWJtaXQoKTsgfSB9KTsKICB9CgogIGZvcm0uYWRkRXZlbnRMaXN0ZW5lcignc3VibWl0JywgZnVuY3Rpb24oZSl7CiAgICBlLnByZXZlbnREZWZhdWx0KCk7CgogICAgaWYgKCFFTkRQT0lOVCkgewogICAgICByZXN1bHRFbC5pbm5lckhUTUwgPSByZW5kZXJFcnJvcignSU5WQUxJRF9IRUFERVJTJywgJ0VsIGVuZHBvaW50IGRlbCBhdWRpdG9yIG5vIGVzdMOhIGNvbmZpZ3VyYWRvLiBBY3RpdmEgZWwgc25pcHBldCBSRVNUIGRlbCBhdWRpdG9yIGVuIFdvcmRQcmVzcy4nKTsKICAgICAgcmVzdWx0RWwuY2xhc3NMaXN0LmFkZCgnaXMtYWN0aXZlJyk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICghZmlsZUlucHV0LmZpbGVzIHx8ICFmaWxlSW5wdXQuZmlsZXNbMF0pIHsKICAgICAgYWxlcnQoJ1BvciBmYXZvciBzdWJlIHR1IGFuw6FsaXNpcyBlbiBmb3JtYXRvIFBERi4nKTsgcmV0dXJuOwogICAgfQogICAgaWYgKCFiaW9tYXJrZXJTZWwudmFsdWUpIHsKICAgICAgYWxlcnQoJ1NlbGVjY2lvbmEgZWwgYmlvbWFyY2Fkb3IgYSBhdWRpdGFyLicpOyByZXR1cm47CiAgICB9CiAgICB2YXIgZmlsZSA9IGZpbGVJbnB1dC5maWxlc1swXTsKICAgIHZhciBfX2lzUGRmID0gKGZpbGUudHlwZSA9PT0gJ2FwcGxpY2F0aW9uL3BkZicpIHx8IC9cLnBkZiQvaS50ZXN0KGZpbGUubmFtZSB8fCAnJyk7CiAgICBpZiAoIV9faXNQZGYpIHsgYWxlcnQoJ1NvbG8gc2UgYWNlcHRhbiBhcmNoaXZvcyBQREYuIENvbnZpZXJ0ZSB0dSByZXN1bHRhZG8gYSBQREYgYW50ZXMgZGUgc3ViaXJsby4nKTsgcmV0dXJuOyB9CiAgICBpZiAoZmlsZS5zaXplID4gTUFYX0JZVEVTKSB7CiAgICAgIGFsZXJ0KCdFbCBhcmNoaXZvIHN1cGVyYSBlbCBsw61taXRlIGRlICcgKyBNYXRoLnJvdW5kKE1BWF9CWVRFUyAvICgxMDI0ICogMTAyNCkpICsgJyBNQi4nKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKGZpbGUuc2l6ZSA8IDEwMCkgewogICAgICBhbGVydCgnRWwgYXJjaGl2byBwYXJlY2UgZXN0YXIgdmFjw61vLicpOyByZXR1cm47CiAgICB9CgogICAgc3VibWl0QnRuLmRpc2FibGVkID0gdHJ1ZTsKICAgIGxvYWRpbmdFbC5jbGFzc0xpc3QuYWRkKCdpcy1hY3RpdmUnKTsKICAgIHJlc3VsdEVsLmNsYXNzTGlzdC5yZW1vdmUoJ2lzLWFjdGl2ZScpOwogICAgcmVzdWx0RWwuaW5uZXJIVE1MID0gJyc7CgogICAgdmFyIGZkID0gbmV3IEZvcm1EYXRhKGZvcm0pOwogICAgZmQuYXBwZW5kKCdjbGllbnRfdGltZXN0YW1wJywgbmV3IERhdGUoKS50b0lTT1N0cmluZygpKTsKCiAgICAvLyBUdXJuc3RpbGUgdG9rZW4gKHNpIGVzdMOhIGFjdGl2YWRvKQogICAgaWYgKFRTX1NJVEVfS0VZICYmIHdpbmRvdy50dXJuc3RpbGUpIHsKICAgICAgdmFyIHRzRWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY2YtdHVybnN0aWxlLm15bS10dXJuc3RpbGUnKTsKICAgICAgdmFyIHRva2VuID0gJyc7CiAgICAgIGlmICh0c0VsKSB7CiAgICAgICAgdHJ5IHsgdG9rZW4gPSB3aW5kb3cudHVybnN0aWxlLmdldFJlc3BvbnNlKHRzRWwpIHx8ICcnOyB9IGNhdGNoKGUpIHsgdG9rZW4gPSAnJzsgfQogICAgICB9CiAgICAgIGlmICghdG9rZW4pIHsKICAgICAgICBsb2FkaW5nRWwuY2xhc3NMaXN0LnJlbW92ZSgnaXMtYWN0aXZlJyk7CiAgICAgICAgc3VibWl0QnRuLmRpc2FibGVkID0gZmFsc2U7CiAgICAgICAgcmVzdWx0RWwuaW5uZXJIVE1MID0gcmVuZGVyRXJyb3IoJ0NBUFRDSEFfRkFJTEVEJywgJ1BvciBmYXZvciBjb21wbGV0YSBsYSB2ZXJpZmljYWNpw7NuIGRlIHNlZ3VyaWRhZCBhbnRlcyBkZSBlbnZpYXIuJyk7CiAgICAgICAgcmVzdWx0RWwuY2xhc3NMaXN0LmFkZCgnaXMtYWN0aXZlJyk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGZkLmFwcGVuZCgndHVybnN0aWxlX3Rva2VuJywgdG9rZW4pOwogICAgfQoKICAgIHZhciBoZWFkZXJzID0ge307CgogICAgaWYgKE5PTkNFKSBoZWFkZXJzWydYLVdQLU5vbmNlJ10gPSBOT05DRTsKICAgIGZldGNoKEVORFBPSU5ULCB7IG1ldGhvZDonUE9TVCcsIGJvZHk6ZmQsIGhlYWRlcnM6aGVhZGVycywgY3JlZGVudGlhbHM6J3NhbWUtb3JpZ2luJyB9KQogICAgICAudGhlbihmdW5jdGlvbihyKXsgcmV0dXJuIHIudGV4dCgpLnRoZW4oZnVuY3Rpb24odCl7IHJldHVybiB7IGh0dHBPazpyLm9rLCBzdGF0dXM6ci5zdGF0dXMsIHRleHQ6dCB9OyB9KTsgfSkKICAgICAgLnRoZW4oZnVuY3Rpb24ocmVzKXsKICAgICAgICBsb2FkaW5nRWwuY2xhc3NMaXN0LnJlbW92ZSgnaXMtYWN0aXZlJyk7CiAgICAgICAgc3VibWl0QnRuLmRpc2FibGVkID0gZmFsc2U7CgogICAgICAgIHZhciBkYXRhID0gbnVsbDsKICAgICAgICB0cnkgeyBkYXRhID0gSlNPTi5wYXJzZShyZXMudGV4dCk7IH0gY2F0Y2goZSkgeyBkYXRhID0gbnVsbDsgfQoKICAgICAgICB2YXIgaXNTdWNjZXNzID0gISEoZGF0YSAmJiAoZGF0YS5fb2sgPT09IHRydWUgfHwgZGF0YS5vayA9PT0gdHJ1ZSkgJiYgKGRhdGEuc2NoZW1hX3ZlcnNpb24gfHwgKGRhdGEuZmxhZ3MgJiYgZGF0YS5mbGFncy5zY2hlbWFfdmVyc2lvbikgfHwgZGF0YS5ldmFsdWFjaW9uX2ludGVncmFkYSkpOwogICAgICAgIGlmICghaXNTdWNjZXNzKSB7CiAgICAgICAgICAvLyBTaSBodWJvIGVycm9yIHBhcnNlYWJsZSwgdXNhciBjb2RlOyBzaSBubywgc3RhdHVzIEhUVFAKICAgICAgICAgIHZhciBjb2RlID0gKGRhdGEgJiYgZGF0YS5jb2RlKSA\/IGRhdGEuY29kZSA6ICgnSFRUUF8nICsgcmVzLnN0YXR1cyk7CiAgICAgICAgICB2YXIgbXNnICA9IChkYXRhICYmIGRhdGEubWVzc2FnZSkgPyBkYXRhLm1lc3NhZ2UgOiAnJzsKICAgICAgICAgIC8vIFJlc2V0ZWFyIFR1cm5zdGlsZSBwYXJhIHByw7N4aW1vIGludGVudG8gKHNpIGFwbGljYSkKICAgICAgICAgIGlmIChUU19TSVRFX0tFWSAmJiB3aW5kb3cudHVybnN0aWxlKSB7CiAgICAgICAgICAgIHRyeSB7IHdpbmRvdy50dXJuc3RpbGUucmVzZXQoKTsgfSBjYXRjaChlKSB7fQogICAgICAgICAgfQogICAgICAgICAgcmVzdWx0RWwuaW5uZXJIVE1MID0gcmVuZGVyRXJyb3IoY29kZSwgbXNnKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmVzdWx0RWwuaW5uZXJIVE1MID0gcmVuZGVyUmVzdWx0YWRvVjQoZGF0YSk7CiAgICAgICAgICB3aXJlRW1haWxDYXB0dXJlKHJlc3VsdEVsLCBkYXRhKTsKICAgICAgICB9CgogICAgICAgIHJlc3VsdEVsLmNsYXNzTGlzdC5hZGQoJ2lzLWFjdGl2ZScpOwogICAgICAgIHJlc3VsdEVsLnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6J3Ntb290aCcsIGJsb2NrOidzdGFydCcgfSk7CiAgICAgIH0pCiAgICAgIC5jYXRjaChmdW5jdGlvbigpewogICAgICAgIGxvYWRpbmdFbC5jbGFzc0xpc3QucmVtb3ZlKCdpcy1hY3RpdmUnKTsKICAgICAgICBzdWJtaXRCdG4uZGlzYWJsZWQgPSBmYWxzZTsKICAgICAgICByZXN1bHRFbC5pbm5lckhUTUwgPSAnPGhlYWRlciBjbGFzcz0iYXVkaXRvci1yZXN1bHRhZG8taGVhZCI+PGgzPkVycm9yIGRlIHJlZDwvaDM+PC9oZWFkZXI+JyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9ImF1ZGl0b3ItZmxhZyBmbGFnLXVyZ2VudCI+Tm8gZnVlIHBvc2libGUgY29uZWN0YXIgY29uIGVsIG1vdG9yIGRlIGFuw6FsaXNpcy4gVmVyaWZpY2EgdHUgY29uZXhpw7NuIGUgaW50ZW50YSBkZSBudWV2byBlbiB1bm9zIG1pbnV0b3MuPC9kaXY+JyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9ImF1ZGl0b3ItZGlzY2xhaW1lciI+PHA+U2kgZWwgcHJvYmxlbWEgcGVyc2lzdGUsIGVzcGVyYSB1bm9zIG1pbnV0b3MgeSB2dWVsdmUgYSBpbnRlbnRhcmxvLjwvcD48L2Rpdj4nOwogICAgICAgIHJlc3VsdEVsLmNsYXNzTGlzdC5hZGQoJ2lzLWFjdGl2ZScpOwogICAgICB9KTsKICB9KTsKCiAgLy8gQ2FsbGJhY2sgZ2xvYmFsIHBhcmEgZXJyb3JlcyBkZSBUdXJuc3RpbGUgKHJlZmVyZW5jaWFkbyBkZXNkZSBlbCB3aWRnZXQpCiAgd2luZG93Lm15bVR1cm5zdGlsZUVycm9yID0gZnVuY3Rpb24oKXsKICAgIGlmIChyZXN1bHRFbCkgewogICAgICByZXN1bHRFbC5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz0iYXVkaXRvci1mbGFnIGZsYWctdXJnZW50Ij5MYSB2ZXJpZmljYWNpw7NuIGRlIHNlZ3VyaWRhZCBleHBpcsOzIG8gZmFsbMOzLiBSZWNhcmdhIGVsIHdpZGdldCBlIGludGVudGEgZGUgbnVldm8uPC9kaXY+JzsKICAgICAgcmVzdWx0RWwuY2xhc3NMaXN0LmFkZCgnaXMtYWN0aXZlJyk7CiAgICB9CiAgfTsKfSkoKTsK\";var d=decodeURIComponent(escape(atob(s)));(0,eval)(d);})();<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Volver al Inicio \/ Protocolo Hub del Protocolo de Soberan\u00eda Biol\u00f3gica de Mente &amp; Manzana. Protocolos disponibles 01 Evaluaci\u00f3n de L\u00ednea Base \u00bb 02 Arquitectura Nutricional \u00bb 03 Calibraci\u00f3n Cognitiva \u00bb AUDITOR\u00cdA DE BIOMARCADORES: Eval\u00faa tus niveles de [Selecciona un biomarcador] Sube tus an\u00e1lisis de laboratorio y recibe una auditor\u00eda contra rangos funcionales de optimizaci\u00f3n, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-567","page","type-page","status-publish","hentry"],"acf":[],"_hostinger_reach_plugin_has_subscription_block":false,"_hostinger_reach_plugin_is_elementor":false,"_links":{"self":[{"href":"https:\/\/menteymanzana.com\/en\/wp-json\/wp\/v2\/pages\/567","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/menteymanzana.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/menteymanzana.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/menteymanzana.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/menteymanzana.com\/en\/wp-json\/wp\/v2\/comments?post=567"}],"version-history":[{"count":23,"href":"https:\/\/menteymanzana.com\/en\/wp-json\/wp\/v2\/pages\/567\/revisions"}],"predecessor-version":[{"id":615,"href":"https:\/\/menteymanzana.com\/en\/wp-json\/wp\/v2\/pages\/567\/revisions\/615"}],"wp:attachment":[{"href":"https:\/\/menteymanzana.com\/en\/wp-json\/wp\/v2\/media?parent=567"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}