{"id":5026,"date":"2026-11-06T10:08:58","date_gmt":"2026-11-06T10:08:58","guid":{"rendered":"https:\/\/lagrafica.com\/servicios-de-publicidad-marketing-y-diseno-multimedia\/asesoramiento-inteligencia-artificial-lleida\/oficina-agentes-ia\/"},"modified":"2026-11-09T12:30:53","modified_gmt":"2026-11-09T12:30:53","slug":"oficina-agentes-ia","status":"publish","type":"page","link":"https:\/\/lagrafica.com\/es\/servicios-de-publicidad-marketing-y-diseno-multimedia\/asesoramiento-inteligencia-artificial-lleida\/oficina-agentes-ia\/","title":{"rendered":"Oficina de agentes de IA en 3D"},"content":{"rendered":"<p>[et_pb_section fb_built=&#8221;1&#8243; admin_label=&#8221;Oficina 3D&#8221; _builder_version=&#8221;4.14.7&#8243; global_colors_info=&#8221;{}&#8221; custom_padding=&#8221;0px||0px||false|false&#8221;][et_pb_row _builder_version=&#8221;4.14.7&#8243; global_colors_info=&#8221;{}&#8221; width=&#8221;100%&#8221; max_width=&#8221;100%&#8221; custom_padding=&#8221;0px||0px||false|false&#8221; custom_margin=&#8221;0px||0px||false|false&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.14.7&#8243; global_colors_info=&#8221;{}&#8221;][et_pb_code _builder_version=&#8221;4.14.7&#8243; global_colors_info=&#8221;{}&#8221;]<\/p>\n<style>.lgofi{--negro:#000;--blanco:#fff;--texto:#000;--acento:#ff6142;--acento-hover:#e8502f;--acento-texto:#e2401f;--fondo:#f5f5f5;--linea:#e6e6e6;--linea-2:#d0d0d0;--gris:#666;--ok:#0e7c66;--fuente-mono:'Open Sans',Helvetica,Arial,sans-serif;font-family:'Open Sans',Helvetica,Arial,sans-serif;font-size:15px;line-height:1.55;color:#000;background:#fff;padding-bottom:4vw}.lgofi *,.lgofi *::before,.lgofi *::after{box-sizing:border-box}.lgofi p{padding-bottom:0}.lgofi ul,.lgofi ol{list-style:none;margin:0;padding:0}.lgofi button,.lgofi select{font-family:inherit}.lgofi .sr{position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0px, 0px, 0px, 0px); white-space: nowrap;}.lgofi .btn{display: inline-flex; align-items: center; justify-content: center; gap: 8px; min-height: 44px; padding: 0px 22px; font-family: inherit; font-size: 13px; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; text-decoration: none; border: 1px solid var(--negro); background: var(--negro); color: var(--blanco); cursor: pointer;}.lgofi .btn:hover{background: rgb(0, 0, 0);}.lgofi .btn.acento{background: var(--acento); border-color: var(--acento); color: var(--negro);}.lgofi .btn.acento:hover{background: var(--acento-hover); border-color: var(--acento-hover); color: var(--negro);}.lgofi .btn.peq{min-height: 34px; padding: 0px 14px; font-size: 11px;}.lgofi .lbl .tag{font-weight: 500; letter-spacing: 0.02em; text-transform: none; color: var(--gris); font-size: 12px;}.lgofi .inp, .lgofi textarea.inp, .lgofi select.inp{width: 100%; font-family: inherit; font-size: 15px; letter-spacing: 0px; text-transform: none; font-weight: 400; color: var(--texto); padding: 12px 14px; border: 1px solid var(--linea-2); background: var(--blanco); border-radius: 0px;}.lgofi .inp:focus{border-color: var(--negro); outline: none; box-shadow: 0 0 0 2px var(--negro);}.lgofi .interruptor{display: inline-flex; align-items: center; gap: 12px; cursor: pointer; font-size: 14px;}.lgofi .interruptor input{width: 20px; height: 20px; accent-color: var(--negro);}.lgofi .p-in{max-width: 1200px; margin: 0px auto; padding: 0px 32px;}.lgofi .p-kicker{text-align: center; font-family: var(--fuente-mono); font-size: 12px; font-weight: 500; letter-spacing: 0.08em; text-transform: uppercase; color: var(--acento-texto); margin-bottom: 14px;}.lgofi .p-kicker::before{content: \"[ \";}.lgofi .p-kicker::after{content: \" ]\";}.lgofi .p-h2{text-align: center; font-size: 52px; font-weight: 800; line-height: 0.98; letter-spacing: -0.02em; text-transform: uppercase;}.lgofi .p-sub{text-align: center; color: var(--gris); max-width: 640px; margin: 16px auto 0px; font-size: 15px;}.lgofi .p-sub.p-sub-grande{max-width: 860px; font-size: 19px; line-height: 1.55;}@media (max-width: 1000px){.lgofi .p-h2{font-size: 40px;}}@media (max-width: 640px){.lgofi .p-in{padding-left: 16px; padding-right: 16px;}}@media (max-width: 640px){.lgofi .p-h2{font-size: 32px;}}@media (max-width: 640px){.lgofi .p-in{padding: 0px 16px;}}@media (max-width: 640px){.lgofi .p-h2{font-size: 32px;}}.lgofi .ofi-cab{padding: 48px 0px 20px; text-align: center;}.lgofi .ofi-mandos{display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 10px; margin: 18px auto 0px; padding: 10px 14px; background: var(--blanco); border: 1px solid var(--linea); max-width: max-content;}.lgofi .ofi-reloj{font-family: var(--fuente-mono); font-weight: 600; font-size: 26px; font-variant-numeric: tabular-nums;}.lgofi .ofi-dia{display: block; font-size: 11px; font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; color: var(--gris);}.lgofi .ofi-chips{display: flex; gap: 4px; flex-wrap: wrap;}.lgofi .ofi-chip{border: 1px solid var(--linea-2); background: var(--blanco); padding: 5px 10px; font-size: 12px; font-weight: 600; cursor: pointer;}.lgofi .ofi-chip[aria-pressed=\"true\"]{background: var(--negro); color: var(--blanco); border-color: var(--negro);}.lgofi .ofi-escena{display: grid; grid-template-columns: minmax(0px, 1fr) 340px; gap: 16px; align-items: start; padding-bottom: 56px;}.lgofi .ofi-maqueta{position: relative; height: min(76vh, 760px); min-height: 460px; overflow: hidden; border: 1px solid var(--linea); background: radial-gradient(120% 90% at 50% 10%, rgb(255, 246, 236), rgb(233, 225, 212)); touch-action: none;}.lgofi .ofi-maqueta canvas{display: block; width: 100%; height: 100%; cursor: grab;}.lgofi .ofi-maqueta canvas:active{cursor: grabbing;}.lgofi .ofi-etiquetas{position: absolute; inset: 0px; pointer-events: none; overflow: hidden;}.lgofi .ofi-et{position: absolute; left: 0px; top: 0px; white-space: nowrap; font-size: 10px; font-weight: 700; background: rgba(255, 255, 255, 0.92); color: var(--negro); padding: 2px 7px; box-shadow: rgba(0, 0, 0, 0.12) 0px 1px 4px;}.lgofi .ofi-et.ofi-dir{background: var(--acento); color: var(--negro); font-size: 12px;}.lgofi .ofi-et.ofi-sel{outline: 2px solid var(--acento);}.lgofi .ofi-baf{position: absolute; left: 0px; top: 0px; background: var(--negro); color: var(--blanco); font-size: 11px; font-weight: 600; padding: 4px 9px; white-space: nowrap;}.lgofi .ofi-vistas{position: absolute; right: 12px; top: 12px; display: flex; gap: 6px; flex-wrap: wrap; justify-content: flex-end;}.lgofi .ofi-ayuda{position: absolute; left: 12px; bottom: 12px; font-size: 11px; font-weight: 600; color: var(--gris); background: rgba(255, 255, 255, 0.9); padding: 5px 9px; pointer-events: none;}.lgofi .ofi-sin3d{position: absolute; inset: 0px; display: flex; align-items: center; justify-content: center; padding: 24px; text-align: center; color: var(--gris);}.lgofi .ofi-panel{display: flex; flex-direction: column; gap: 12px; min-width: 0px;}.lgofi .ofi-caja{background: var(--blanco); border: 1px solid var(--linea); padding: 14px; display: flex; flex-direction: column; gap: 10px;}.lgofi .ofi-caja h2{margin: 0px; font-size: 14px; letter-spacing: 0.06em; text-transform: uppercase; display: flex; justify-content: space-between; align-items: center; gap: 8px;}.lgofi .ofi-marcador{display: grid; grid-template-columns: 1fr 1fr; gap: 8px;}.lgofi .ofi-marcador div{background: var(--fondo); padding: 8px; text-align: center;}.lgofi .ofi-marcador strong{display: block; font-family: var(--fuente-mono); font-size: 20px; font-variant-numeric: tabular-nums;}.lgofi .ofi-marcador span{font-size: 10px; font-weight: 600; color: var(--gris); text-transform: uppercase; letter-spacing: 0.06em;}.lgofi .ofi-lista{list-style: none; margin: 0px; padding: 0px; display: flex; flex-direction: column; gap: 6px; max-height: 220px; overflow-y: auto;}.lgofi .ofi-lista li{display: flex; align-items: center; gap: 8px; padding: 8px; background: var(--fondo); font-size: 12.5px;}.lgofi .ofi-lista li span{flex: 1 1 0%; min-width: 0px;}.lgofi .ofi-lista li small{display: block; color: var(--gris); font-size: 11px;}.lgofi .ofi-lista .ofi-vacio{background: none; color: var(--gris); padding: 4px 0px;}.lgofi .ofi-encarga{display: flex; gap: 6px; flex-wrap: wrap;}.lgofi .ofi-encarga select{flex: 1 1 180px; min-width: 0px;}.lgofi .ofi-ficha-tit{margin: 0px; font-weight: 700; font-size: 15px;}.lgofi #ofi-ficha dl{margin: 0px; display: grid; grid-template-columns: 96px minmax(0px, 1fr); gap: 6px 10px; font-size: 12.5px;}.lgofi #ofi-ficha dt{color: var(--gris); font-weight: 600;}.lgofi #ofi-ficha dd{margin: 0px;}.lgofi #ofi-ficha p{margin: 0px; font-size: 13px;}.lgofi .ofi-diario{list-style: none; margin: 0px; padding: 0px; font-family: var(--fuente-mono); font-size: 11.5px; max-height: 180px; overflow-y: auto; display: flex; flex-direction: column; gap: 3px;}.lgofi .ofi-diario li{display: grid; grid-template-columns: 44px minmax(0px, 1fr); gap: 6px;}.lgofi .ofi-diario time{color: var(--gris);}.lgofi .ofi-bien{color: var(--ok);}.lgofi .ofi-claves{display: grid; grid-template-columns: repeat(3, minmax(0px, 1fr)); gap: 16px; margin: 0px 0px 24px;}.lgofi .ofi-claves div{padding: 18px; background: rgb(255, 247, 236);}.lgofi .ofi-claves strong{display: block; font-size: 16px; margin-bottom: 4px;}.lgofi .ofi-claves span{font-size: 14px; color: var(--gris);}@media (max-width: 1100px){.lgofi .ofi-escena{grid-template-columns: minmax(0px, 1fr);}}@media (max-width: 720px){.lgofi .ofi-claves{grid-template-columns: minmax(0px, 1fr);}.lgofi .ofi-maqueta{height: 70vh; min-height: 420px;}.lgofi .ofi-et{font-size: 9px;}}.lgofi .ofi-franja{background: var(--negro); color: var(--blanco); padding-block: 72px;}.lgofi .ofi-franja-in{display: grid; grid-template-columns: minmax(0px, 5fr) minmax(0px, 7fr); gap: 40px; align-items: center;}.lgofi .ofi-franja .p-kicker, .lgofi .ofi-franja .p-h2{text-align: left;}.lgofi .ofi-franja .p-h2{color: var(--blanco);}.lgofi .ofi-franja-txt > p:not(.p-kicker):not(.ag-botones){font-size: 17px; line-height: 1.6; color: rgb(214, 214, 214); margin: 18px 0px 0px;}.lgofi .ofi-franja-txt ul{margin: 18px 0px 0px; padding-left: 20px; display: flex; flex-direction: column; gap: 8px; font-size: 15px; color: rgb(230, 230, 230);}.lgofi .ofi-franja-txt li::marker{color: var(--acento);}.lgofi .ofi-franja .btn.sec{color: var(--blanco); border-color: rgb(90, 90, 90); background: transparent;}.lgofi .ofi-maqueta.ofi-mini{height: 460px; min-height: 0px; cursor: pointer; border-color: rgb(58, 58, 58); touch-action: pan-y;}.lgofi .ofi-maqueta.ofi-mini canvas{cursor: pointer; touch-action: pan-y;}@media (max-width: 900px){.lgofi .ofi-franja-in{grid-template-columns: minmax(0px, 1fr);}.lgofi .ofi-maqueta.ofi-mini{height: 380px;}}.lgofi .p-in{max-width:1280px;width:89%;margin:0 auto;padding:0}.lgofi .ofi-cab{padding:4vw 0 24px}.lgofi h1.p-h2{font-family:'paralucent',sans-serif;font-weight:700;letter-spacing:1px;color:#ff6142;font-size:44px;line-height:1.1;margin:0 auto 16px;max-width:900px;padding:0}@media (max-width:767px){.lgofi h1.p-h2{font-size:30px}}.lgofi .p-sub{color:#222;font-size:17px;line-height:1.65;max-width:780px;margin:0 auto}.lgofi .btn{border-radius:0;letter-spacing:1px;font-weight:700;line-height:1.2}.lgofi .btn.acento{background:#ff6142;border:2px solid #ff6142;color:#fff}.lgofi .btn.acento:hover{background:#000;border-color:#000;color:#fff}.lgofi .ofi-reloj{font-family:'paralucent',sans-serif}.lgofi .ofi-caja h2{line-height:1.35}<\/style>\n<div class=\"lgofi\">\n<div class=\"p-in\">\n<div class=\"ofi-cab\">\n<h1 class=\"p-h2 ag-h2\">As\u00ed trabajan los agentes de IA en una empresa<\/h1>\n<pee class=\"p-sub p-sub-grande\">Un ejemplo: un d\u00eda en la oficina de una empresa de dise\u00f1o y marketing con 17 agentes de IA. El trabajo baja de arriba abajo: entra, se organiza, se reparte, se revisa y se cobra. La direcci\u00f3n aprueba todo lo que sale hacia un cliente.<\/pee>\n<div class=\"ofi-mandos\" role=\"group\" aria-label=\"Control del d\u00eda\">\n<div><span class=\"ofi-dia\" id=\"ofi-dia\">Lunes<\/span><span class=\"ofi-reloj\" id=\"ofi-reloj\">07:57<\/span><\/div>\n<p> <button class=\"btn acento peq\" id=\"ofi-play\" type=\"button\" aria-pressed=\"true\">Pausa<\/button> <\/p>\n<div class=\"ofi-chips\" role=\"group\" aria-label=\"Velocidad\"> <button class=\"ofi-chip\" data-ofi-vel=\"1\" type=\"button\" aria-pressed=\"false\">1\u00d7<\/button> <button class=\"ofi-chip\" data-ofi-vel=\"4\" type=\"button\" aria-pressed=\"true\">4\u00d7<\/button> <button class=\"ofi-chip\" data-ofi-vel=\"12\" type=\"button\" aria-pressed=\"false\">12\u00d7<\/button> <\/div>\n<div class=\"ofi-chips\" role=\"group\" aria-label=\"D\u00eda de la semana\" id=\"ofi-dias\"><\/div>\n<p> <label class=\"interruptor\"><input type=\"checkbox\" id=\"ofi-factura\"> D\u00eda de facturaci\u00f3n<\/label> <\/div>\n<\/p><\/div>\n<div class=\"ofi-claves\">\n<div><strong>Cada agente, su horario<\/strong><span>Reuniones a las 8:00, correos cada hora, control de calidad a las 18:00 e informe del d\u00eda a las 20:00.<\/span><\/div>\n<div><strong>Nada sale sin aprobar<\/strong><span>Las respuestas y los recordatorios esperan en la bandeja de direcci\u00f3n hasta que alguien da el visto bueno.<\/span><\/div>\n<div><strong>P\u00eddeles lo que quieras<\/strong><span>Un encargo pasa por el agente de entrada, que se lo da al agente que corresponde.<\/span><\/div>\n<\/p><\/div>\n<div class=\"ofi-escena\">\n<section class=\"ofi-maqueta\" id=\"ofi-maqueta\" aria-label=\"Oficina en 3D: arrastra para girar, rueda o pellizco para acercar, haz clic en un personaje para ver qu\u00e9 hace\">\n<div class=\"ofi-etiquetas\" id=\"ofi-etiquetas\"><\/div>\n<div class=\"ofi-vistas\"> <button class=\"ofi-chip\" type=\"button\" data-ofi-vista=\"general\">Vista general<\/button> <button class=\"ofi-chip\" type=\"button\" data-ofi-vista=\"direccion\">Direcci\u00f3n<\/button> <button class=\"ofi-chip\" type=\"button\" data-ofi-vista=\"arriba\">Desde arriba<\/button> <\/div>\n<p> <span class=\"ofi-ayuda\">Arrastra para girar \u00b7 rueda o pellizco para acercar \u00b7 haz clic en un personaje<\/span> <\/section>\n<aside class=\"ofi-panel\">\n<section class=\"ofi-caja\" aria-labelledby=\"ofi-t-hoy\">\n<h2 id=\"ofi-t-hoy\">Hoy<\/h2>\n<div class=\"ofi-marcador\">\n<div><strong id=\"ofi-n-tareas\">0<\/strong><span>Tareas hechas<\/span><\/div>\n<div><strong id=\"ofi-n-ok\">0<\/strong><span>Aprobaciones<\/span><\/div>\n<\/p><\/div>\n<\/section>\n<section class=\"ofi-caja\" aria-labelledby=\"ofi-t-bandeja\">\n<h2 id=\"ofi-t-bandeja\">Bandeja de direcci\u00f3n <span class=\"tag\" id=\"ofi-n-bandeja\">0<\/span><\/h2>\n<ul class=\"ofi-lista\" id=\"ofi-bandeja\"><\/ul>\n<\/section>\n<section class=\"ofi-caja\" aria-labelledby=\"ofi-t-enc\">\n<h2 id=\"ofi-t-enc\">Encarga una tarea<\/h2>\n<div class=\"ofi-encarga\"> <label for=\"ofi-tarea\" class=\"sr\">Tarea<\/label> <select class=\"inp\" id=\"ofi-tarea\"><\/select> <button class=\"btn acento peq\" id=\"ofi-encarga\" type=\"button\">Encargar<\/button> <\/div>\n<\/section>\n<section class=\"ofi-caja\" aria-labelledby=\"ofi-t-ficha\" aria-live=\"polite\">\n<h2 id=\"ofi-t-ficha\">Ficha<\/h2>\n<div id=\"ofi-ficha\"><\/div>\n<\/section>\n<section class=\"ofi-caja\" aria-labelledby=\"ofi-t-diario\">\n<h2 id=\"ofi-t-diario\">Diario de la oficina<\/h2>\n<ol class=\"ofi-diario\" id=\"ofi-diario\"><\/ol>\n<\/section>\n<p> <a class=\"btn acento\" href=\"https:\/\/lagrafica.com\/es\/contacta-con-lagrafica-creative-experience\/\">Quiero esto para mi empresa<\/a> <\/aside>\n<\/p><\/div>\n<\/p><\/div>\n<\/div>\n<p><script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/three.js\/r128\/three.min.js\"><\/script><script src=\"https:\/\/cdn.jsdelivr.net\/npm\/three@0.128.0\/examples\/js\/controls\/OrbitControls.js\"><\/script><script>(function(){if(!window.THREE){return;}var b=\"LyogT2ZpY2luYSAzRCBk4oCZYWdlbnRzIGTigJlJQSAobGFHcsOgZmljYSkuIEV4ZW1wbGUgZGUgY29tIHRyZWJhbGxlbiBlbHMgYWdlbnRzIGVuIHVuYSBlbXByZXNhLiAqLwooKCkgPT4gewogICd1c2Ugc3RyaWN0JzsKICBjb25zdCBjb250ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ29maS1tYXF1ZXRhJyk7CiAgaWYgKCFjb250KSByZXR1cm47CiAgY29uc3QgcmVkdWl0ID0gbWF0Y2hNZWRpYSgnKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSknKS5tYXRjaGVzOwogIC8vIE1vZG8gbWluaSAocG9ydGFkYSB5IEhlcnJhbWllbnRhcyk6IHNvbG8gbGEgbWFxdWV0YSwgZ2lyYW5kbyBzb2xhOyBkaXJlY2Npw7NuIGFwcnVlYmEgc29sYSB5IHVuIGNsaWMgbGxldmEgYSBsYSBww6FnaW5hIGNvbXBsZXRhLgogIC8vIFNpbiBwYW5lbCwgbG9zIGVsZW1lbnRvcyBxdWUgZmFsdGFuIHNlIHN1c3RpdHV5ZW4gcG9yIHVubyBzdWVsdG8gcXVlIG5vIHNlIHBpbnRhLgogIGNvbnN0IG1pbmkgPSBjb250LmRhdGFzZXQubW9kbyA9PT0gJ21pbmknOwogIGNvbnN0IHN1ZWx0byA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogIGNvbnN0ICQgPSAocykgPT4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzKSB8fCBzdWVsdG87CgogIC8vIC0tLS0tLS0tLS0gTG9zIGFnZW50ZXMgeSBlbCBlcXVpcG8gLS0tLS0tLS0tLQogIGNvbnN0IERFUCA9IHsgZGlyOiAweDIzMjMyMywgb3A6IDB4NEE1QjdBLCBjbGk6IDB4MTM4QThBLCBjcmU6IDB4ZmY2MTQyLCBuZWc6IDB4N0E0RkIwIH07CiAgY29uc3QgQSA9IHsKICAgIGRpcmVjY2lvbjogeyB0aXB1czogJ2RpcmVjdG9yYScsIG5vbTogJ0RpcmVjY2nDs24nLCBzdWI6ICdBcHJ1ZWJhIHkgZGVjaWRlJywgcm9sOiAnUmVjaWJlIGxvcyBpbmZvcm1lcywgZGVjaWRlIGxhcyBwcmlvcmlkYWRlcyB5IGRhIGVsIHZpc3RvIGJ1ZW5vIGFudGVzIGRlIHF1ZSBzYWxnYSBuYWRhIGhhY2lhIHVuIGNsaWVudGUuJyB9LAogICAgY29vcmRpbmFkb3I6IHsgdGlwdXM6ICdib3QnLCBub206ICdDb29yZGluYWRvcicsIGluaTogJ0NPJywgZGVwOiAnZGlyJywgcm9sOiAnTGVlIGVsIGluZm9ybWUgZGVsIGTDrWEgeSBwcm9wb25lIGEgZGlyZWNjacOzbiBsYXMgcHJpb3JpZGFkZXMgZGUgbWHDsWFuYS4nLCBydXRpbmFzOiAnQ2FkYSBkw61hIGEgbGFzIDIwOjA1JywgcmVnbGFzOiAnU29sbyBwcm9wb25lOiBkZWNpZGUgZGlyZWNjacOzbicsIHBhc2E6ICdEaXJlY2Npw7NuJyB9LAogICAgZW5ydXRhZG9yOiB7IHRpcHVzOiAnYm90Jywgbm9tOiAnQWdlbnRlIGRlIGVudHJhZGEnLCBpbmk6ICdBRScsIGRlcDogJ2RpcicsIHJvbDogJ1JlY2liZSBjdWFscXVpZXIgZW5jYXJnbyB5IGxvIHBhc2EgYWwgYWdlbnRlIHF1ZSBjb3JyZXNwb25kZS4nLCBydXRpbmFzOiAnU2llbXByZSBhY3Rpdm8nLCByZWdsYXM6ICdDYWRhIHRhcmVhIGFsIGFnZW50ZSBhZGVjdWFkbycsIHBhc2E6ICdUb2RvcyBsb3MgYWdlbnRlcycgfSwKICAgIHdoYXRzYXBwOiB7IHRpcHVzOiAnYm90Jywgbm9tOiAnV2hhdHNBcHAnLCBpbmk6ICdXQScsIGRlcDogJ2NsaScsIHJvbDogJ0F0aWVuZGUgbG9zIG1lbnNhamVzIG51ZXZvcyBkZSBjbGllbnRlcyBjb24gZWwgZmx1am8gZGUgYWNvZ2lkYS4nLCBydXRpbmFzOiAnQ2FkYSA1IG1pbiwgZGUgbHVuZXMgYSBzw6FiYWRvIGRlIDg6MDAgYSAyMTowMCcsIHJlZ2xhczogJ1NvbG8gYXZpc2EgYSBkaXJlY2Npw7NuIHNpIGFsZ28gc2UgYXRhc2NhJywgcGFzYTogJ0NsaWVudGVzJyB9LAogICAgcmV1bmlvbmVzOiB7IHRpcHVzOiAnYm90Jywgbm9tOiAnUmV1bmlvbmVzJywgaW5pOiAnUkUnLCBkZXA6ICdjbGknLCByb2w6ICdQcmVwYXJhIGxhIGFnZW5kYSBkZWwgZMOtYSwgbG9zIHJlY29yZGF0b3Jpb3MgeSBlbCBpbmZvcm1lIGRlIGNhZGEgcmV1bmnDs24uJywgcnV0aW5hczogJ0RlIGx1bmVzIGEgdmllcm5lcyBhIGxhcyA4OjAwJywgcmVnbGFzOiAnUmVjb3JkYXRvcmlvcyBwcmVwYXJhZG9zLCBubyBzZSBlbnbDrWFuIHNpbiB2aXN0byBidWVubycsIHBhc2E6ICdEaXJlY2Npw7NuOyB0YWJsZXJvIGRlbCBjbGllbnRlJyB9LAogICAgdGFibGVybzogeyB0aXB1czogJ2JvdCcsIG5vbTogJ0NvcnJlbyBhIHRhYmxlcm8nLCBpbmk6ICdDVCcsIGRlcDogJ2NsaScsIHJvbDogJ0NvbnZpZXJ0ZSBlbCBjb3JyZW8gZW4gdGFyamV0YXMgZGVsIHRhYmxlcm8gZGUgcHJveWVjdG9zIHkgZGV0ZWN0YSBsbyBxdWUgZmFsdGEuJywgcnV0aW5hczogJ0luZm9ybWUgZGlhcmlvIGEgbGFzIDE3OjQ1JywgcmVnbGFzOiAnQXZpc2EgZGUgbG9zIGNvcnJlb3MgZGUgbcOhcyBkZSAyNCBoIHNpbiByZXNwdWVzdGEnLCBwYXNhOiAnVGFibGVybzsgZGlyZWNjacOzbicgfSwKICAgIGdlc3Rpb246IHsgdGlwdXM6ICdib3QnLCBub206ICdHZXN0acOzbicsIGluaTogJ0dFJywgZGVwOiAnb3AnLCByb2w6ICdSZWNvZ2UgbGEgYWN0aXZpZGFkIGRlIHRvZG9zIGxvcyBhZ2VudGVzIHkgZGVqYSBlbCBpbmZvcm1lIGRpYXJpbyBlbiBlbCBhcmNoaXZvLicsIHJ1dGluYXM6ICdDYWRhIGTDrWEgYSBsYXMgMjA6MDAnLCByZWdsYXM6ICdNYXJjYSBlbiByb2pvIGxvIHF1ZSB2ZW5jZSBob3knLCBwYXNhOiAnRGlyZWNjacOzbicgfSwKICAgIGNvcnJlb3M6IHsgdGlwdXM6ICdib3QnLCBub206ICdSZXNwdWVzdGEgZGUgY29ycmVvcycsIGluaTogJ1JDJywgZGVwOiAnY2xpJywgcm9sOiAnUHJvcG9uZSByZXNwdWVzdGFzIGEgbG9zIGNvcnJlb3MgZGUgY2xpZW50ZXMgcXVlIGHDum4gbm8gc2UgaGFuIGNvbnRlc3RhZG8uJywgcnV0aW5hczogJ0NhZGEgaG9yYSBkZSA5OjE3IGEgMTk6MTcnLCByZWdsYXM6ICdObyBlbnbDrWEgbmFkYSBzaW4gZWwgdmlzdG8gYnVlbm8gZGUgZGlyZWNjacOzbicsIHBhc2E6ICdEaXJlY2Npw7NuJyB9LAogICAgZGlzZW5vOiB7IHRpcHVzOiAnYm90Jywgbm9tOiAnRGlzZcOxbycsIGluaTogJ0RJJywgZGVwOiAnY3JlJywgcm9sOiAnRG9jdW1lbnRhIGVsIHRyYWJham8gZGlhcmlvIGRlbCBlcXVpcG8gZGUgZGlzZcOxbyBlbiBlbCB0YWJsZXJvLCBjb24gcHJvbXB0cyBwYXJhIGxhIElBLicsIHJ1dGluYXM6ICdEZSBsdW5lcyBhIHZpZXJuZXMgYSBsYXMgMTg6MzAnLCByZWdsYXM6ICdEZXNwdcOpcyBkZSBsYSByZXZpc2nDs24gZGUgY2FsaWRhZCcsIHBhc2E6ICdUYWJsZXJvOyBkaXJlY2Npw7NuJyB9LAogICAgd2ViOiB7IHRpcHVzOiAnYm90Jywgbm9tOiAnRGlzZcOxbyB3ZWInLCBpbmk6ICdEVycsIGRlcDogJ2NyZScsIHJvbDogJ0xsZXZhIGxhcyB0YXJlYXMgd2ViIGRlbCB0YWJsZXJvIHkgcHJlcGFyYSBsb3MgY2FtYmlvcy4nLCBydXRpbmFzOiAnQSBkZW1hbmRhJywgcmVnbGFzOiAnVHJhYmFqYSBjb24gZWwgZXF1aXBvIHdlYicsIHBhc2E6ICdFcXVpcG8gd2ViJyB9LAogICAgcmVkZXM6IHsgdGlwdXM6ICdib3QnLCBub206ICdSZWRlcyBzb2NpYWxlcycsIGluaTogJ1JTJywgZGVwOiAnY3JlJywgcm9sOiAnUHJlcGFyYSBsYXMgcHVibGljYWNpb25lcyBkZSBjYWRhIG1hcmNhIGVuIGVsIHBsYW5pZmljYWRvciBkZSByZWRlcy4nLCBydXRpbmFzOiAnQSBkZW1hbmRhJywgcmVnbGFzOiAnTm8gc2UgcHVibGljYSBuYWRhIHNpbiBhcHJvYmFyJywgcGFzYTogJ0NvbW11bml0eSBtYW5hZ2VyJyB9LAogICAgaWE6IHsgdGlwdXM6ICdib3QnLCBub206ICdBc2Vzb3LDrWEgSUEnLCBpbmk6ICdJQScsIGRlcDogJ2NyZScsIHJvbDogJ1Jlc3VlbHZlIGR1ZGFzIHNvYnJlIHF1w6kgSUEgdXRpbGl6YXIgeSBjw7NtbywgY29uIGVqZW1wbG9zIGRlIGxhIGVtcHJlc2EuJywgcnV0aW5hczogJ0EgZGVtYW5kYScsIHJlZ2xhczogJ01hcmNhIGxvIHF1ZSBubyBlcyBzZWd1cm8nLCBwYXNhOiAnRGlyZWNjacOzbicgfSwKICAgIGNhbGlkYWQ6IHsgdGlwdXM6ICdib3QnLCBub206ICdDb250cm9sIGRlIGNhbGlkYWQnLCBpbmk6ICdDUScsIGRlcDogJ29wJywgcm9sOiAnUmV2aXNhIGxvcyBkaXNlw7FvcyBlbnZpYWRvcyBjb24gbG8gcXVlIHBpZGnDsyBlbCBjbGllbnRlLicsIHJ1dGluYXM6ICdEZSBsdW5lcyBhIHZpZXJuZXMgYSBsYXMgMTg6MDAnLCByZWdsYXM6ICdTb2xvIGluZm9ybWEsIG5vIGNvcnJpZ2UnLCBwYXNhOiAnRGlyZWNjacOzbicgfSwKICAgIGZhY3R1cmFjaW9uOiB7IHRpcHVzOiAnYm90Jywgbm9tOiAnRmFjdHVyYWNpw7NuJywgaW5pOiAnRkEnLCBkZXA6ICdvcCcsIHJvbDogJ0NydXphIGxhcyBmYWN0dXJhcyBlbWl0aWRhcyBjb24gbG9zIGNvYnJvcyBkZWwgYmFuY28uJywgcnV0aW5hczogJ0xvcyBkw61hcyBkZSBmYWN0dXJhY2nDs24gYSBsYXMgODowMCcsIHJlZ2xhczogJ1NvbG8gbGVjdHVyYScsIHBhc2E6ICdEaXJlY2Npw7NuJyB9LAogICAgaW50ZXJuYTogeyB0aXB1czogJ2JvdCcsIG5vbTogJ0NvbXVuaWNhY2nDs24gaW50ZXJuYScsIGluaTogJ0NJJywgZGVwOiAnbmVnJywgcm9sOiAnRW52w61hIGVsIGJvbGV0w61uIHNlbWFuYWwgeSBlbCByZXN1bWVuIGRlIGxhIHNlbWFuYSBhIHRvZG8gZWwgZXF1aXBvLicsIHJ1dGluYXM6ICdMb3MgbHVuZXMgYSBsYXMgOTowMCcsIHJlZ2xhczogJ1VuYSBzb2xhIHZleiBwb3Igc2VtYW5hJywgcGFzYTogJ1RvZG8gZWwgZXF1aXBvJyB9LAogICAgbWVqb3JhOiB7IHRpcHVzOiAnYm90Jywgbm9tOiAnTWVqb3JhIGNvbnRpbnVhJywgaW5pOiAnTUMnLCBkZXA6ICduZWcnLCByb2w6ICdMZWUgYWwgcmVzdG8gZGUgYWdlbnRlcyB5IHByb3BvbmUgbWVqb3JhcyBkZWwgc2lzdGVtYS4nLCBydXRpbmFzOiAnQSBkZW1hbmRhJywgcmVnbGFzOiAnTm8gc2UgaW52ZW50YSBuYWRhOiBtYXJjYSBsbyBxdWUgZXMgaW5jaWVydG8nLCBwYXNhOiAnRGlyZWNjacOzbicgfSwKICAgIGxpY2l0YWNpb25lczogeyB0aXB1czogJ2JvdCcsIG5vbTogJ0xpY2l0YWNpb25lcycsIGluaTogJ0xJJywgZGVwOiAnbmVnJywgcm9sOiAnQXZpc29zLCByZXF1ZXJpbWllbnRvcyB5IGNvbmN1cnNvcyBlbiBjdXJzbywgeSByZXZpc2nDs24gZGUgcGxpZWdvcy4nLCBydXRpbmFzOiAnQ2FkYSBkw61hIGEgbGFzIDk6MDAnLCByZWdsYXM6ICdBdmlzYSBjb24gbG9zIHBsYXpvcycsIHBhc2E6ICdFcXVpcG8gZGUgbGljaXRhY2lvbmVzJyB9LAogICAgc29wb3J0ZTogeyB0aXB1czogJ2JvdCcsIG5vbTogJ1NvcG9ydGUgaW5mb3Jtw6F0aWNvJywgaW5pOiAnSVQnLCBkZXA6ICduZWcnLCByb2w6ICdNYW50aWVuZSBsb3MgZXF1aXBvcyB5IGxhcyBjYXJwZXRhcyBjb21wYXJ0aWRhcyBlbiBvcmRlbi4nLCBydXRpbmFzOiAnQSBkZW1hbmRhJywgcmVnbGFzOiAnUGlkZSBwZXJtaXNvIGFudGVzIGRlIGJvcnJhcicsIHBhc2E6ICdEaXJlY2Npw7NuJyB9LAogICAgY2xpZW50ZXM6IHsgdGlwdXM6ICdwZXJzb25hJywgbm9tOiAnQ2xpZW50ZXMnLCBzdWI6ICdFc2NyaWJlbiB5IHBpZGVuJywgcm9sOiAnRXNjcmliZW4gcG9yIFdoYXRzQXBwIHkgY29ycmVvLCB5IHBpZGVuIHJldW5pb25lcy4nLCBuOiAyLCBjbGllbnQ6IHRydWUgfSwKICAgIGVxZGlzZW5vOiB7IHRpcHVzOiAncGVyc29uYScsIG5vbTogJ0VxdWlwbyBkZSBkaXNlw7FvJywgc3ViOiAnRGlzZcOxbyBncsOhZmljbycsIHJvbDogJ0Rpc2XDsWEgeSBlbnbDrWEgbGFzIHBpZXphcywgcXVlIHJldmlzYSBDb250cm9sIGRlIGNhbGlkYWQuJywgbjogMyB9LAogICAgZXF3ZWI6IHsgdGlwdXM6ICdwZXJzb25hJywgbm9tOiAnRXF1aXBvIHdlYicsIHN1YjogJ1dlYicsIHJvbDogJ0Rlc2Fycm9sbGEgbGFzIHdlYnMgY29uIGVsIGFnZW50ZSBkZSBEaXNlw7FvIHdlYi4nLCBuOiAxIH0sCiAgICBjbTogeyB0aXB1czogJ3BlcnNvbmEnLCBub206ICdDb21tdW5pdHkgbWFuYWdlcicsIHN1YjogJ1JlZGVzJywgcm9sOiAnQXBydWViYSB5IHB1YmxpY2EgbG8gcXVlIHByZXBhcmEgZWwgYWdlbnRlIGRlIFJlZGVzIHNvY2lhbGVzLicsIG46IDEgfSwKICAgIGVxbGljaXRhOiB7IHRpcHVzOiAncGVyc29uYScsIG5vbTogJ0VxdWlwbyBkZSBsaWNpdGFjaW9uZXMnLCBzdWI6ICdMaWNpdGFjaW9uZXMnLCByb2w6ICdQcmVwYXJhIGxhcyBvZmVydGFzIGNvbiBsb3MgYXZpc29zIGRlbCBhZ2VudGUuJywgbjogMiB9LAogICAgY29ycmVvOiB7IHRpcHVzOiAnb2JqZWN0ZScsIG5vbTogJ0NvcnJlbycsIG9iajogJ2J1c3RpYScsIHJvbDogJ0VsIGJ1esOzbiBjb21wYXJ0aWRvIHBvciBkb25kZSBlbnRyYSBlbCB0cmFiYWpvLicgfSwKICAgIHBhbmVsOiB7IHRpcHVzOiAnb2JqZWN0ZScsIG5vbTogJ1RhYmxlcm8nLCBvYmo6ICd0YXVsZXInLCByb2w6ICdFbCB0YWJsZXJvIGRlIHByb3llY3RvczogdW5hIHRhcmpldGEgcG9yIHRyYWJham8uJyB9LAogICAgYXJjaGl2bzogeyB0aXB1czogJ29iamVjdGUnLCBub206ICdBcmNoaXZvJywgb2JqOiAnZHJpdmUnLCByb2w6ICdMYSBjYXJwZXRhIGNvbXBhcnRpZGEgY29uIGxvcyBpbmZvcm1lcyBkaWFyaW9zLicgfSwKICAgIGJhbmNvOiB7IHRpcHVzOiAnb2JqZWN0ZScsIG5vbTogJ0JhbmNvJywgb2JqOiAnYmFuYycsIHJvbDogJ0xvcyBjb2Jyb3MgcXVlIEZhY3R1cmFjacOzbiBjcnV6YSBjb24gbGFzIGZhY3R1cmFzLicgfSwKICB9OwoKICBjb25zdCBTQUxFUyA9IFsKICAgIFsnZGlyZWNjaW9uJywgJ0RpcmVjY2nDs24nLCBbJ2Nvb3JkaW5hZG9yJywgJ2RpcmVjY2lvbicsICdlbnJ1dGFkb3InXSwgMCwgMCwgNF0sCiAgICBbJ2NsaWVudGVzJywgJ0NsaWVudGVzJywgWydjbGllbnRlcyddLCAwLCAxXSwKICAgIFsnY29ycmVvJywgJ0NvcnJlbycsIFsnY29ycmVvJ10sIDEsIDFdLAogICAgWyd3aGF0c2FwcCcsICdXaGF0c0FwcCcsIFsnd2hhdHNhcHAnXSwgMiwgMV0sCiAgICBbJ3JldW5pb25lcycsICdSZXVuaW9uZXMnLCBbJ3JldW5pb25lcyddLCAzLCAxXSwKICAgIFsndGFibGVybycsICdUYWJsZXJvIGRlIHByb3llY3RvcycsIFsndGFibGVybycsICdwYW5lbCddLCAwLCAyLCAyXSwKICAgIFsnZ2VzdGlvbicsICdHZXN0acOzbiB5IGFyY2hpdm8nLCBbJ2dlc3Rpb24nLCAnYXJjaGl2byddLCAyLCAyXSwKICAgIFsnY29ycmVvcycsICdSZXNwdWVzdGEgZGUgY29ycmVvcycsIFsnY29ycmVvcyddLCAzLCAyXSwKICAgIFsnZGlzZW5vJywgJ0Rpc2XDsW8gZ3LDoWZpY28nLCBbJ2Rpc2VubycsICdlcWRpc2VubyddLCAwLCAzXSwKICAgIFsnd2ViJywgJ1dlYicsIFsnd2ViJywgJ2Vxd2ViJ10sIDEsIDNdLAogICAgWydyZWRlcycsICdSZWRlcyBzb2NpYWxlcycsIFsncmVkZXMnLCAnY20nXSwgMiwgM10sCiAgICBbJ2lhJywgJ0FzZXNvcsOtYSBJQScsIFsnaWEnXSwgMywgM10sCiAgICBbJ2NhbGlkYWQnLCAnQ29udHJvbCBkZSBjYWxpZGFkJywgWydjYWxpZGFkJ10sIDAsIDQsIDJdLAogICAgWydmYWN0dXJhY2lvbicsICdGYWN0dXJhY2nDs24geSBiYW5jbycsIFsnZmFjdHVyYWNpb24nLCAnYmFuY28nXSwgMiwgNCwgMl0sCiAgICBbJ2ludGVybmEnLCAnQ29tdW5pY2FjacOzbiBpbnRlcm5hJywgWydpbnRlcm5hJ10sIDQsIDBdLAogICAgWydtZWpvcmEnLCAnTWVqb3JhIGNvbnRpbnVhJywgWydtZWpvcmEnXSwgNCwgMV0sCiAgICBbJ2xpY2l0YWNpb25lcycsICdMaWNpdGFjaW9uZXMnLCBbJ2xpY2l0YWNpb25lcycsICdlcWxpY2l0YSddLCA0LCAyXSwKICAgIFsnc29wb3J0ZScsICdTb3BvcnRlIGluZm9ybcOhdGljbycsIFsnc29wb3J0ZSddLCA0LCAzXSwKICBdOwogIGNvbnN0IFBBU09TID0gWycxIMK3IERpcmVjY2nDs24nLCAnMiDCtyBFbnRyYSBlbCB0cmFiYWpvJywgJzMgwrcgU2Ugb3JnYW5pemEnLCAnNCDCtyBTZSByZXBhcnRlIHkgc2UgaGFjZScsICc1IMK3IFNlIHJldmlzYSB5IHNlIGNvYnJhJ107CgogIGNvbnN0IFRBUkVBUyA9IFsKICAgIFsnbGljaXRhY2lvbmVzJywgJ1Jlc3VtZW4gZGUgbG9zIGNvbmN1cnNvcyBhYmllcnRvcycsICdlcWxpY2l0YSddLAogICAgWydjYWxpZGFkJywgJ1JldmlzYSBlc3RlIGRpc2XDsW8gYW50ZXMgZGUgZW52aWFybG8nLCAnZGlyZWNjaW9uJ10sCiAgICBbJ3JlZGVzJywgJ1ByZXBhcmEgbGFzIHB1YmxpY2FjaW9uZXMgZGUgbGEgc2VtYW5hJywgJ2NtJ10sCiAgICBbJ3dlYicsICdDYW1iaW9zIGVuIGxhIHdlYiBkZSB1biBjbGllbnRlJywgJ2Vxd2ViJ10sCiAgICBbJ2lhJywgJ8K\/UXXDqSBJQSB1dGlsaXphbW9zIHBhcmEgZWwgdsOtZGVvPycsICdkaXJlY2Npb24nXSwKICAgIFsnbWVqb3JhJywgJ8K\/Q8OzbW8gbWVqb3JhbW9zIGVsIHNpc3RlbWE\/JywgJ2RpcmVjY2lvbiddLAogIF07CgogIC8vIC0tLS0tLS0tLS0gRXNjZW5hIC0tLS0tLS0tLS0KICBpZiAoIXdpbmRvdy5USFJFRSB8fCAhVEhSRUUuT3JiaXRDb250cm9scykgeyBjb250Lmluc2VydEFkamFjZW50SFRNTCgnYmVmb3JlZW5kJywgJzxwIGNsYXNzPSJvZmktc2luM2QiPlR1IG5hdmVnYWRvciBubyBwdWVkZSBtb3N0cmFyIGxhIG9maWNpbmEgZW4gM0QuPC9wPicpOyByZXR1cm47IH0KICBsZXQgcmVuZGVyZXI7CiAgdHJ5IHsgcmVuZGVyZXIgPSBuZXcgVEhSRUUuV2ViR0xSZW5kZXJlcih7IGFudGlhbGlhczogdHJ1ZSwgYWxwaGE6IHRydWUgfSk7IH0gY2F0Y2ggKGUpIHsgY29udC5pbnNlcnRBZGphY2VudEhUTUwoJ2JlZm9yZWVuZCcsICc8cCBjbGFzcz0ib2ZpLXNpbjNkIj5UdSBuYXZlZ2Fkb3Igbm8gcHVlZGUgbW9zdHJhciBsYSBvZmljaW5hIGVuIDNELjwvcD4nKTsgcmV0dXJuOyB9CiAgcmVuZGVyZXIuc2V0UGl4ZWxSYXRpbyhNYXRoLm1pbigyLCB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxKSk7CiAgcmVuZGVyZXIuc2hhZG93TWFwLmVuYWJsZWQgPSB0cnVlOwogIHJlbmRlcmVyLnNoYWRvd01hcC50eXBlID0gVEhSRUUuUENGU29mdFNoYWRvd01hcDsKICBjb250LnByZXBlbmQocmVuZGVyZXIuZG9tRWxlbWVudCk7CiAgY29uc3Qgc2NlbmUgPSBuZXcgVEhSRUUuU2NlbmUoKTsKICBjb25zdCBjYW1lcmEgPSBuZXcgVEhSRUUuUGVyc3BlY3RpdmVDYW1lcmEoMzgsIDEsIC4xLCA1MDApOwogIGNvbnN0IGNvbnRyb2xzID0gbmV3IFRIUkVFLk9yYml0Q29udHJvbHMoY2FtZXJhLCByZW5kZXJlci5kb21FbGVtZW50KTsKICBjb250cm9scy5lbmFibGVEYW1waW5nID0gdHJ1ZTsgY29udHJvbHMuZGFtcGluZ0ZhY3RvciA9IC4wODsKICBjb250cm9scy5taW5EaXN0YW5jZSA9IDEwOyBjb250cm9scy5tYXhEaXN0YW5jZSA9IDkwOyBjb250cm9scy5tYXhQb2xhckFuZ2xlID0gTWF0aC5QSSAqIC40NjsKICBpZiAobWluaSkgewogICAgT2JqZWN0LmFzc2lnbihjb250cm9scywgeyBlbmFibGVab29tOiBmYWxzZSwgZW5hYmxlUGFuOiBmYWxzZSwgZW5hYmxlUm90YXRlOiBmYWxzZSwgYXV0b1JvdGF0ZTogIXJlZHVpdCwgYXV0b1JvdGF0ZVNwZWVkOiAuNDUgfSk7CiAgICByZW5kZXJlci5kb21FbGVtZW50LnN0eWxlLnRvdWNoQWN0aW9uID0gJ3Bhbi15JzsgLy8gZW4gZWwgbcOzdmlsLCBsYSBww6FnaW5hIHNpZ3VlIGJhamFuZG8gYWwgZGVzbGl6YXIgc29icmUgbGEgbWFxdWV0YQogIH0KICBzY2VuZS5hZGQobmV3IFRIUkVFLkhlbWlzcGhlcmVMaWdodCgweEZGRjRFOCwgMHg4QTdGNzAsIC44NSkpOwogIGNvbnN0IHNvbCA9IG5ldyBUSFJFRS5EaXJlY3Rpb25hbExpZ2h0KDB4RkZGRkZGLCAuNzUpOwogIHNvbC5wb3NpdGlvbi5zZXQoLTE0LCAzMCwgMTgpOyBzb2wuY2FzdFNoYWRvdyA9IHRydWU7IHNvbC5zaGFkb3cubWFwU2l6ZS5zZXQoMjA0OCwgMjA0OCk7CiAgT2JqZWN0LmFzc2lnbihzb2wuc2hhZG93LmNhbWVyYSwgeyBsZWZ0OiAtMzQsIHJpZ2h0OiAzNCwgdG9wOiAzNCwgYm90dG9tOiAtMzQsIG5lYXI6IDEsIGZhcjogMTAwIH0pOwogIHNjZW5lLmFkZChzb2wpOwoKICBjb25zdCBtYXQgPSAoYywgbyA9IHt9KSA9PiBuZXcgVEhSRUUuTWVzaFN0YW5kYXJkTWF0ZXJpYWwoeyBjb2xvcjogYywgcm91Z2huZXNzOiAuNzUsIG1ldGFsbmVzczogLjA1LCAuLi5vIH0pOwogIGNvbnN0IGNhaXhhID0gKHcsIGgsIGQsIG0sIHggPSAwLCB5ID0gMCwgeiA9IDApID0+IHsgY29uc3QgYiA9IG5ldyBUSFJFRS5NZXNoKG5ldyBUSFJFRS5Cb3hHZW9tZXRyeSh3LCBoLCBkKSwgbSk7IGIucG9zaXRpb24uc2V0KHgsIHksIHopOyBiLmNhc3RTaGFkb3cgPSB0cnVlOyBiLnJlY2VpdmVTaGFkb3cgPSB0cnVlOyByZXR1cm4gYjsgfTsKICBmdW5jdGlvbiB0ZXh0dXJhKHRleHQsIHsgdyA9IDI1NiwgaCA9IDEyOCwgbWlkYSA9IDY0LCBjb2xvciA9ICcjMjMyMzIzJywgZm9ucyA9IG51bGwsIHBlcyA9IDcwMCwgZm9udCA9ICdBcmNoaXZvJyB9ID0ge30pIHsKICAgIGNvbnN0IGMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTsgYy53aWR0aCA9IHc7IGMuaGVpZ2h0ID0gaDsKICAgIGNvbnN0IHggPSBjLmdldENvbnRleHQoJzJkJyk7CiAgICBpZiAoZm9ucykgeyB4LmZpbGxTdHlsZSA9IGZvbnM7IHguZmlsbFJlY3QoMCwgMCwgdywgaCk7IH0KICAgIHguZmlsbFN0eWxlID0gY29sb3I7IHguZm9udCA9IGAke3Blc30gJHttaWRhfXB4ICR7Zm9udH0sIHN5c3RlbS11aSwgc2Fucy1zZXJpZmA7IHgudGV4dEFsaWduID0gJ2NlbnRlcic7IHgudGV4dEJhc2VsaW5lID0gJ21pZGRsZSc7CiAgICB4LmZpbGxUZXh0KHRleHQsIHcgLyAyLCBoIC8gMiArIDIpOwogICAgY29uc3QgdCA9IG5ldyBUSFJFRS5DYW52YXNUZXh0dXJlKGMpOyB0LmFuaXNvdHJvcHkgPSA0OyByZXR1cm4gdDsKICB9CgogIGNvbnN0IENXID0gNy40LCBDRCA9IDUuMiwgR0FQID0gLjUsIFBBUyA9IDIsIENPTFMgPSA0LCBTT1BPUlRFID0gMS42OwogIGNvbnN0IHNhbGVzID0ge30sIHBvcyA9IHt9LCBhY3RvcnMgPSB7fTsKICBjb25zdCBtYWluVyA9IENPTFMgKiBDVyArIChDT0xTIC0gMSkgKiBHQVAsIHRvdGFsVyA9IG1haW5XICsgU09QT1JURSArIENXLCB0b3RhbEQgPSA1ICogQ0QgKyA0ICogUEFTOwogIGNvbnN0IHgwID0gLXRvdGFsVyAvIDIsIHowID0gLXRvdGFsRCAvIDI7CiAgY29uc3QgeENvbCA9IChjKSA9PiAoYyA8IENPTFMgPyB4MCArIGMgKiAoQ1cgKyBHQVApIDogeDAgKyBtYWluVyArIFNPUE9SVEUpOwogIGNvbnN0IHpGaWxhID0gKGYpID0+IHowICsgZiAqIChDRCArIFBBUyk7CiAgY29uc3QgdGVycmEgPSBjYWl4YSh0b3RhbFcgKyA0LCAuNCwgdG90YWxEICsgNCwgbWF0KDB4RTdERkQyKSwgMCwgLS4yNSwgMCk7IHRlcnJhLmNhc3RTaGFkb3cgPSBmYWxzZTsgc2NlbmUuYWRkKHRlcnJhKTsKICBjb25zdCBzb2JyZVRlcnJhID0gKHRleHQsIHcsIHgsIHosIGNvbG9yLCBtaWRhKSA9PiB7CiAgICBjb25zdCBtID0gbmV3IFRIUkVFLk1lc2gobmV3IFRIUkVFLlBsYW5lR2VvbWV0cnkodywgdyAvIDgpLCBuZXcgVEhSRUUuTWVzaEJhc2ljTWF0ZXJpYWwoeyBtYXA6IHRleHR1cmEodGV4dCwgeyB3OiAxMDI0LCBoOiAxMjgsIG1pZGEsIGNvbG9yLCBwZXM6IDkwMCB9KSwgdHJhbnNwYXJlbnQ6IHRydWUgfSkpOwogICAgbS5yb3RhdGlvbi54ID0gLU1hdGguUEkgLyAyOyBtLnBvc2l0aW9uLnNldCh4LCAuMDIsIHopOyBzY2VuZS5hZGQobSk7CiAgfTsKICBQQVNPUy5mb3JFYWNoKCh0LCBmKSA9PiB7CiAgICBpZiAoIWYpIHJldHVybjsKICAgIHNvYnJlVGVycmEodC50b1VwcGVyQ2FzZSgpLCAxNiwgeDAgKyA4LCB6RmlsYShmKSAtIFBBUyAvIDIsICcjZmY2MTQyJywgNDYpOwogICAgWzIuNSwgMy41XS5mb3JFYWNoKChjKSA9PiB7CiAgICAgIGNvbnN0IGZsID0gbmV3IFRIUkVFLk1lc2gobmV3IFRIUkVFLkNvbmVHZW9tZXRyeSguNDUsIC45LCAzKSwgbWF0KDB4ZmY2MTQyLCB7IGVtaXNzaXZlOiAweGZmNjE0MiwgZW1pc3NpdmVJbnRlbnNpdHk6IC4zIH0pKTsKICAgICAgZmwucm90YXRpb24ueCA9IE1hdGguUEkgLyAyOyBmbC5wb3NpdGlvbi5zZXQoeDAgKyBjICogKENXICsgR0FQKSwgLjMsIHpGaWxhKGYpIC0gUEFTIC8gMik7IHNjZW5lLmFkZChmbCk7CiAgICB9KTsKICB9KTsKICBzb2JyZVRlcnJhKCdTT1BPUlRFJywgNiwgeENvbCg0KSArIENXIC8gMiwgejAgLSAuNywgJyM3QTRGQjAnLCA1Mik7CgogIGZvciAoY29uc3QgW2lkLCBub20sIGxsaXN0YSwgYywgZiwgc3Bhbl0gb2YgU0FMRVMpIHsKICAgIGNvbnN0IHNwID0gc3BhbiB8fCAxLCB3ID0gQ1cgKiBzcCArIEdBUCAqIChzcCAtIDEpOwogICAgY29uc3QgeCA9IHhDb2woYykgKyB3IC8gMiwgeiA9IHpGaWxhKGYpICsgQ0QgLyAyOwogICAgY29uc3QgZyA9IG5ldyBUSFJFRS5Hcm91cCgpOyBnLnBvc2l0aW9uLnNldCh4LCAwLCB6KTsKICAgIGNvbnN0IGVzRGlyID0gaWQgPT09ICdkaXJlY2Npb24nLCBlc1NvcCA9IGMgPT09IENPTFM7CiAgICBjb25zdCBjb2xvclBpcyA9IGVzRGlyID8gMHhGRkUzRDIgOiBlc1NvcCA\/IDB4RjFFQUY4IDogMHhGRkZGRkY7CiAgICBjb25zdCBwaXMgPSBjYWl4YSh3LCAuMiwgQ0QsIG1hdChjb2xvclBpcykpOyBwaXMuY2FzdFNoYWRvdyA9IGZhbHNlOyBnLmFkZChwaXMpOwogICAgY29uc3QgcGFyZXQgPSBtYXQoZXNEaXIgPyAweGZmNjE0MiA6IGVzU29wID8gMHhCNzlBRDYgOiAweEQ5RDJDNik7CiAgICBnLmFkZChjYWl4YSh3LCAuOSwgLjE0LCBwYXJldCwgMCwgLjU1LCAtQ0QgLyAyICsgLjA3KSk7CiAgICBnLmFkZChjYWl4YSguMTQsIC45LCBDRCwgcGFyZXQsIC13IC8gMiArIC4wNywgLjU1LCAwKSk7CiAgICBjb25zdCBydyA9IE1hdGgubWluKHcgLSAuNiwgNC42KTsKICAgIGNvbnN0IHJvdCA9IG5ldyBUSFJFRS5NZXNoKG5ldyBUSFJFRS5QbGFuZUdlb21ldHJ5KHJ3LCAuNTUpLCBuZXcgVEhSRUUuTWVzaEJhc2ljTWF0ZXJpYWwoeyBtYXA6IHRleHR1cmEobm9tLnRvVXBwZXJDYXNlKCksIHsgdzogNTEyLCBoOiA2NCwgbWlkYTogMzAsIGNvbG9yOiBlc0RpciA\/ICcjZmY2MTQyJyA6IGVzU29wID8gJyM3QTRGQjAnIDogJyM4QTgyNzgnLCBwZXM6IDgwMCB9KSwgdHJhbnNwYXJlbnQ6IHRydWUgfSkpOwogICAgcm90LnJvdGF0aW9uLnggPSAtTWF0aC5QSSAvIDI7IHJvdC5wb3NpdGlvbi5zZXQoLXcgLyAyICsgcncgLyAyICsgLjM1LCAuMTIsIENEIC8gMiAtIC40NSk7IGcuYWRkKHJvdCk7CiAgICBzY2VuZS5hZGQoZyk7CiAgICBzYWxlc1tpZF0gPSB7IGcsIHBpcywgbGxpc3RhIH07CiAgICBsbGlzdGEuZm9yRWFjaCgoYSwgaSkgPT4geyBwb3NbYV0gPSBuZXcgVEhSRUUuVmVjdG9yMyh4IC0gdyAvIDIgKyAodyAvIChsbGlzdGEubGVuZ3RoICsgMSkpICogKGkgKyAxKSwgLjEsIHogLSAuMik7IH0pOwogIH0KCiAgLy8gLS0tLS0tLS0tLSBQZXJzb25hamVzIC0tLS0tLS0tLS0KICBmdW5jdGlvbiBmZXNCb3QoaWQpIHsKICAgIGNvbnN0IGEgPSBBW2lkXSwgZyA9IG5ldyBUSFJFRS5Hcm91cCgpLCBjID0gREVQW2EuZGVwXSwgY29zID0gbWF0KGMpOwogICAgZy5hZGQoY2FpeGEoMS4xLCAuOSwgLjgsIGNvcywgMCwgLjc1LCAwKSk7CiAgICBnLmFkZChjYWl4YSguMjUsIC4zLCAuMjUsIGNvcywgLS4zLCAuMTUsIDApKTsgZy5hZGQoY2FpeGEoLjI1LCAuMywgLjI1LCBjb3MsIC4zLCAuMTUsIDApKTsKICAgIGcuYWRkKGNhaXhhKDEuMiwgLjk1LCAuOTUsIGNvcywgMCwgMS43NSwgMCkpOwogICAgY29uc3QgcGFudCA9IG5ldyBUSFJFRS5NZXNoKG5ldyBUSFJFRS5QbGFuZUdlb21ldHJ5KC45NSwgLjYyKSwgbmV3IFRIUkVFLk1lc2hCYXNpY01hdGVyaWFsKHsgbWFwOiB0ZXh0dXJhKGEuaW5pLCB7IHc6IDEyOCwgaDogODQsIG1pZGE6IDQ0LCBjb2xvcjogJyMnICsgYy50b1N0cmluZygxNikucGFkU3RhcnQoNiwgJzAnKSwgZm9uczogJyNGRkZGRkYnLCBmb250OiAnSUJNIFBsZXggTW9ubycsIHBlczogNjAwIH0pIH0pKTsKICAgIHBhbnQucG9zaXRpb24uc2V0KDAsIDEuNzUsIC40OCk7IGcuYWRkKHBhbnQpOwogICAgZy5hZGQoY2FpeGEoLjA2LCAuNCwgLjA2LCBjb3MsIDAsIDIuNCwgMCkpOwogICAgY29uc3QgYm9sYSA9IG5ldyBUSFJFRS5NZXNoKG5ldyBUSFJFRS5TcGhlcmVHZW9tZXRyeSguMTMsIDE2LCAxMiksIG1hdCgweGZmNjE0MiwgeyBlbWlzc2l2ZTogMHhmZjYxNDIsIGVtaXNzaXZlSW50ZW5zaXR5OiAuNCB9KSk7IGJvbGEucG9zaXRpb24ueSA9IDIuNjU7IGcuYWRkKGJvbGEpOwogICAgY29uc3QgbGx1bSA9IG5ldyBUSFJFRS5NZXNoKG5ldyBUSFJFRS5TcGhlcmVHZW9tZXRyeSguMTUsIDE2LCAxMiksIG1hdCgweDFFOEE1QiwgeyBlbWlzc2l2ZTogMHgxRThBNUIsIGVtaXNzaXZlSW50ZW5zaXR5OiAuOCB9KSk7IGxsdW0ucG9zaXRpb24uc2V0KC42MiwgMi4yNSwgLjMpOyBnLmFkZChsbHVtKTsKICAgIGcuYWRkKGNhaXhhKC44LCAuMSwgLjEsIG1hdCgweEZGRkZGRiksIDAsIC45NSwgLjQxKSk7CiAgICByZXR1cm4geyBnLCBhbHQ6IDIuOSB9OwogIH0KICBmdW5jdGlvbiBmZXNQZXJzb25hKGNvbG9yLCBhbHQgPSAxLCBlc2MgPSAxKSB7CiAgICBjb25zdCBnID0gbmV3IFRIUkVFLkdyb3VwKCk7CiAgICBjb25zdCBjb3MgPSBuZXcgVEhSRUUuTWVzaChuZXcgVEhSRUUuQ3lsaW5kZXJHZW9tZXRyeSguMzIgKiBlc2MsIC40MiAqIGVzYywgMS4xICogYWx0LCAyMCksIG1hdChjb2xvcikpOyBjb3MucG9zaXRpb24ueSA9IC42ICogYWx0OwogICAgY29uc3QgY2FwID0gbmV3IFRIUkVFLk1lc2gobmV3IFRIUkVFLlNwaGVyZUdlb21ldHJ5KC4zICogZXNjLCAyMCwgMTYpLCBtYXQoMHhGMkM3QTUpKTsgY2FwLnBvc2l0aW9uLnkgPSAxLjQ1ICogYWx0OwogICAgZy5hZGQoY29zLCBjYXApOyByZXR1cm4gZzsKICB9CiAgZnVuY3Rpb24gZmVzR3J1cChpZCkgewogICAgY29uc3QgYSA9IEFbaWRdLCBnID0gbmV3IFRIUkVFLkdyb3VwKCk7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEubjsgaSsrKSB7IGNvbnN0IHAgPSBmZXNQZXJzb25hKGEuY2xpZW50ID8gMHg4QTgyNzggOiAweDJFOUU4MywgLjkgKyAoaSAlIDIpICogLjA4KTsgcC5wb3NpdGlvbi5zZXQoKGkgLSAoYS5uIC0gMSkgLyAyKSAqIC44LCAwLCAoaSAlIDIpICogLjI1KTsgZy5hZGQocCk7IH0KICAgIHJldHVybiB7IGcsIGFsdDogMS45IH07CiAgfQogIGZ1bmN0aW9uIGZlc0RpcmVjY2lvbigpIHsKICAgIGNvbnN0IGcgPSBuZXcgVEhSRUUuR3JvdXAoKTsKICAgIGNvbnN0IHRhcmltYSA9IG5ldyBUSFJFRS5NZXNoKG5ldyBUSFJFRS5DeWxpbmRlckdlb21ldHJ5KDEuMzUsIDEuNDUsIC4xNiwgNDApLCBtYXQoMHhmZjYxNDIsIHsgZW1pc3NpdmU6IDB4ZmY2MTQyLCBlbWlzc2l2ZUludGVuc2l0eTogLjI1IH0pKTsgdGFyaW1hLnBvc2l0aW9uLnkgPSAuMDg7IGcuYWRkKHRhcmltYSk7CiAgICBjb25zdCBwID0gZmVzUGVyc29uYSgweDIzMjMyMywgMS4yNSwgMS4xNSk7IHAucG9zaXRpb24ueSA9IC4xNTsgZy5hZGQocCk7CiAgICBjb25zdCBjb3JvbmEgPSBuZXcgVEhSRUUuR3JvdXAoKTsKICAgIGNvcm9uYS5hZGQobmV3IFRIUkVFLk1lc2gobmV3IFRIUkVFLkN5bGluZGVyR2VvbWV0cnkoLjMsIC4zLCAuMTIsIDI0LCAxLCB0cnVlKSwgbWF0KDB4RkZEMjNGLCB7IG1ldGFsbmVzczogLjUsIHJvdWdobmVzczogLjM1LCBzaWRlOiBUSFJFRS5Eb3VibGVTaWRlIH0pKSk7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDU7IGkrKykgeyBjb25zdCBwdW4gPSBuZXcgVEhSRUUuTWVzaChuZXcgVEhSRUUuQ29uZUdlb21ldHJ5KC4wNywgLjIsIDgpLCBtYXQoMHhGRkQyM0YsIHsgbWV0YWxuZXNzOiAuNSwgcm91Z2huZXNzOiAuMzUgfSkpOyBjb25zdCBhbiA9IChpIC8gNSkgKiBNYXRoLlBJICogMjsgcHVuLnBvc2l0aW9uLnNldChNYXRoLmNvcyhhbikgKiAuMywgLjE1LCBNYXRoLnNpbihhbikgKiAuMyk7IGNvcm9uYS5hZGQocHVuKTsgfQogICAgY29yb25hLnBvc2l0aW9uLnkgPSAyLjE1OyBnLmFkZChjb3JvbmEpOwogICAgZy5hZGQoY2FpeGEoMi4yLCAuMTIsIDEsIG1hdCgweDIzMjMyMyksIDAsIC45NSwgLjk1KSk7CiAgICBnLmFkZChjYWl4YSguMTIsIC45LCAuOSwgbWF0KDB4MjMyMzIzKSwgLTEsIC41LCAuOTUpKTsgZy5hZGQoY2FpeGEoLjEyLCAuOSwgLjksIG1hdCgweDIzMjMyMyksIDEsIC41LCAuOTUpKTsKICAgIGNvbnN0IHBpbGEgPSBuZXcgVEhSRUUuR3JvdXAoKTsgcGlsYS5wb3NpdGlvbi5zZXQoLjYsIDEuMDUsIC45NSk7IGcuYWRkKHBpbGEpOwogICAgcmV0dXJuIHsgZywgYWx0OiAyLjYsIGNvcm9uYSwgcGlsYSB9OwogIH0KICBmdW5jdGlvbiBmZXNPYmplY3RlKGlkKSB7CiAgICBjb25zdCBhID0gQVtpZF0sIGcgPSBuZXcgVEhSRUUuR3JvdXAoKTsKICAgIGlmIChhLm9iaiA9PT0gJ2J1c3RpYScpIHsKICAgICAgZy5hZGQoY2FpeGEoLjE4LCAuOSwgLjE4LCBtYXQoMHg1NTU1NTUpLCAwLCAuNDUsIDApKTsgZy5hZGQoY2FpeGEoMSwgLjcsIC42LCBtYXQoMHhmZjYxNDIpLCAwLCAxLjIsIDApKTsgZy5hZGQoY2FpeGEoLjA4LCAuNSwgLjMsIG1hdCgweEM4MTAyRSksIC41NSwgMS40NSwgMCkpOwogICAgfSBlbHNlIGlmIChhLm9iaiA9PT0gJ3RhdWxlcicpIHsKICAgICAgZy5hZGQoY2FpeGEoMi4yLCAxLjUsIC4xLCBtYXQoMHgyMzIzMjMpLCAwLCAxLjIsIDApKTsKICAgICAgW1stLjY1LCAuMywgMHhGRkZGRkZdLCBbLS42NSwgLS4wNSwgMHhGRkZGRkZdLCBbMCwgLjMsIDB4RkZGRkZGXSwgWy42NSwgLjMsIDB4RkZGRkZGXSwgWy42NSwgLS4wNSwgMHhmZjYxNDJdXS5mb3JFYWNoKChbeCwgeSwgY10pID0+IGcuYWRkKGNhaXhhKC41NSwgLjI4LCAuMDQsIG1hdChjKSwgeCwgMS4yICsgeSwgLjA3KSkpOwogICAgICBnLmFkZChjYWl4YSguMSwgLjUsIC4xLCBtYXQoMHg1NTU1NTUpLCAtLjksIC4yNSwgMCkpOyBnLmFkZChjYWl4YSguMSwgLjUsIC4xLCBtYXQoMHg1NTU1NTUpLCAuOSwgLjI1LCAwKSk7CiAgICB9IGVsc2UgaWYgKGEub2JqID09PSAnZHJpdmUnKSB7CiAgICAgIGcuYWRkKGNhaXhhKDEuMywgLjEyLCAxLjEsIG1hdCgweEQ5RDJDNiksIDAsIC4wNiwgMCkpOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDM7IGkrKykgZy5hZGQoY2FpeGEoLjksIC4xNCwgLjcsIG1hdChbMHhmZjYxNDIsIDB4NEE1QjdBLCAweEZGRDIzRl1baV0pLCAwLCAuMjUgKyBpICogLjE2LCAwKSk7CiAgICB9IGVsc2UgaWYgKGEub2JqID09PSAnYmFuYycpIHsKICAgICAgZy5hZGQoY2FpeGEoMS42LCAuMTUsIDEsIG1hdCgweEQ5RDJDNiksIDAsIC4wOCwgMCkpOwogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQ7IGkrKykgZy5hZGQoY2FpeGEoLjE2LCAuOSwgLjE2LCBtYXQoMHhGNEYxRUMpLCAtLjYgKyBpICogLjQsIC42LCAuMikpOwogICAgICBnLmFkZChjYWl4YSgxLjYsIC4xNSwgMSwgbWF0KDB4RDlEMkM2KSwgMCwgMS4xMiwgMCkpOwogICAgICBjb25zdCB0ID0gbmV3IFRIUkVFLk1lc2gobmV3IFRIUkVFLkNvbmVHZW9tZXRyeSgxLjA1LCAuNSwgNCksIG1hdCgweDRBNUI3QSkpOyB0LnBvc2l0aW9uLnkgPSAxLjQ1OyB0LnJvdGF0aW9uLnkgPSBNYXRoLlBJIC8gNDsgdC5zY2FsZS56ID0gLjY1OyBnLmFkZCh0KTsKICAgIH0KICAgIHJldHVybiB7IGcsIGFsdDogYS5vYmogPT09ICd0YXVsZXInID8gMi4yIDogMS45IH07CiAgfQogIGZvciAoY29uc3QgaWQgb2YgT2JqZWN0LmtleXMoQSkpIHsKICAgIGNvbnN0IGEgPSBBW2lkXTsKICAgIGNvbnN0IG8gPSBpZCA9PT0gJ2RpcmVjY2lvbicgPyBmZXNEaXJlY2Npb24oKSA6IGEudGlwdXMgPT09ICdib3QnID8gZmVzQm90KGlkKSA6IGEudGlwdXMgPT09ICdwZXJzb25hJyA\/IGZlc0dydXAoaWQpIDogZmVzT2JqZWN0ZShpZCk7CiAgICBvLmcucG9zaXRpb24uY29weShwb3NbaWRdKTsKICAgIG8uZy50cmF2ZXJzZSgobSkgPT4geyBpZiAobS5pc01lc2gpIHsgbS5jYXN0U2hhZG93ID0gdHJ1ZTsgbS51c2VyRGF0YS5pZCA9IGlkOyB9IH0pOwogICAgby5iYXNlID0gby5nLnBvc2l0aW9uLnk7IG8uZmFzZSA9IE1hdGgucmFuZG9tKCkgKiBNYXRoLlBJICogMjsKICAgIGNvbnN0IGFuZWxsID0gbmV3IFRIUkVFLk1lc2gobmV3IFRIUkVFLlRvcnVzR2VvbWV0cnkoLjk1LCAuMDcsIDEwLCA0MCwgTWF0aC5QSSAqIDEuNSksIG1hdCgweGZmNjE0MiwgeyBlbWlzc2l2ZTogMHhmZjYxNDIsIGVtaXNzaXZlSW50ZW5zaXR5OiAuNyB9KSk7CiAgICBhbmVsbC5yb3RhdGlvbi54ID0gLU1hdGguUEkgLyAyOyBhbmVsbC5wb3NpdGlvbi55ID0gLjI1OyBhbmVsbC52aXNpYmxlID0gZmFsc2U7IG8uZy5hZGQoYW5lbGwpOyBvLmFuZWxsID0gYW5lbGw7CiAgICBzY2VuZS5hZGQoby5nKTsgYWN0b3JzW2lkXSA9IG87CiAgfQoKICAvLyAtLS0tLS0tLS0tIEV0aXF1ZXRhcyBIVE1MIC0tLS0tLS0tLS0KICBjb25zdCBjYXBhRXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb2ZpLWV0aXF1ZXRhcycpOwogIGZvciAoY29uc3QgaWQgb2YgT2JqZWN0LmtleXMoQSkpIHsKICAgIGNvbnN0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgIGQuY2xhc3NOYW1lID0gYG9maS1ldCR7aWQgPT09ICdkaXJlY2Npb24nID8gJyBvZmktZGlyJyA6ICcnfWA7CiAgICBkLnRleHRDb250ZW50ID0gQVtpZF0ubm9tOwogICAgY2FwYUV0LmFwcGVuZENoaWxkKGQpOyBhY3RvcnNbaWRdLmV0ID0gZDsKICB9CiAgY29uc3QgdiA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7CiAgZnVuY3Rpb24gcHJvamVjdGEocDMsIGVsLCBleHRyYSA9ICcnKSB7CiAgICB2LmNvcHkocDMpLnByb2plY3QoY2FtZXJhKTsKICAgIGNvbnN0IHZpcyA9IHYueiA8IDEgJiYgdi54ID4gLTEuMTUgJiYgdi54IDwgMS4xNSAmJiB2LnkgPiAtMS4xNSAmJiB2LnkgPCAxLjE1OwogICAgZWwuc3R5bGUuZGlzcGxheSA9IHZpcyA\/ICcnIDogJ25vbmUnOwogICAgaWYgKHZpcykgZWwuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZSgkeyh2LnggKiAuNSArIC41KSAqIGNvbnQuY2xpZW50V2lkdGh9cHgsICR7KC12LnkgKiAuNSArIC41KSAqIGNvbnQuY2xpZW50SGVpZ2h0fXB4KSB0cmFuc2xhdGUoLTUwJSwgMCkke2V4dHJhfWA7CiAgfQoKICAvLyAtLS0tLS0tLS0tIEPDoW1hcmEgLS0tLS0tLS0tLQogIGNvbnN0IFZJU1RBUyA9IHsKICAgIGdlbmVyYWw6IFtuZXcgVEhSRUUuVmVjdG9yMygwLCA0MCwgMzYpLCBuZXcgVEhSRUUuVmVjdG9yMygwLCAwLCAzKV0sCiAgICBkaXJlY2Npb246IFtuZXcgVEhSRUUuVmVjdG9yMyhwb3MuZGlyZWNjaW9uLnggKyAyLCA5LCBwb3MuZGlyZWNjaW9uLnogKyAxMSksIHBvcy5kaXJlY2Npb24uY2xvbmUoKS5hZGQobmV3IFRIUkVFLlZlY3RvcjMoMS41LCAxLCAxKSldLAogICAgYXJyaWJhOiBbbmV3IFRIUkVFLlZlY3RvcjMoMCwgNTYsIDIpLCBuZXcgVEhSRUUuVmVjdG9yMygwLCAwLCAwKV0sCiAgfTsKICBsZXQgdm9sID0gbnVsbDsKICAvLyBFbiBwYW50YWxsYXMgZXN0cmVjaGFzIGxhIHZpc3RhIGdlbmVyYWwgc2UgYWxlamEgcGFyYSBxdWUgcXVlcGEgdG9kYSBsYSBwbGFudGEKICBjb25zdCBnZW5lcmFsID0gKCkgPT4geyBjb25zdCBrID0gTWF0aC5tYXgoMSwgMS4yNSAvIE1hdGgubWF4KC40LCBjYW1lcmEuYXNwZWN0KSk7IHJldHVybiBbbmV3IFRIUkVFLlZlY3RvcjMoMCwgNDAgKiBrLCAzNiAqIGspLCBWSVNUQVMuZ2VuZXJhbFsxXV07IH07CiAgbGV0IHRvY2FkYSA9IGZhbHNlOwogIGNvbnRyb2xzLmFkZEV2ZW50TGlzdGVuZXIoJ3N0YXJ0JywgKCkgPT4geyB0b2NhZGEgPSB0cnVlOyB9KTsKICBmdW5jdGlvbiB2ZXNBKG5vbSkgewogICAgY29uc3QgW3AsIHRdID0gbm9tID09PSAnZ2VuZXJhbCcgPyBnZW5lcmFsKCkgOiBWSVNUQVNbbm9tXTsKICAgIGlmIChyZWR1aXQpIHsgY2FtZXJhLnBvc2l0aW9uLmNvcHkocCk7IGNvbnRyb2xzLnRhcmdldC5jb3B5KHQpOyByZXR1cm47IH0KICAgIHZvbCA9IHsgcDA6IGNhbWVyYS5wb3NpdGlvbi5jbG9uZSgpLCB0MDogY29udHJvbHMudGFyZ2V0LmNsb25lKCksIHAsIHQsIGluaTogcGVyZm9ybWFuY2Uubm93KCksIGR1cjogMTEwMCB9OwogIH0KICBjYW1lcmEucG9zaXRpb24uY29weShWSVNUQVMuZ2VuZXJhbFswXSk7IGNvbnRyb2xzLnRhcmdldC5jb3B5KFZJU1RBUy5nZW5lcmFsWzFdKTsKICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1vZmktdmlzdGFdJykuZm9yRWFjaCgoYikgPT4gYi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHZlc0EoYi5kYXRhc2V0Lm9maVZpc3RhKSkpOwoKICBjb25zdCByYXkgPSBuZXcgVEhSRUUuUmF5Y2FzdGVyKCksIHB0ciA9IG5ldyBUSFJFRS5WZWN0b3IyKCk7CiAgbGV0IGJhaXggPSBudWxsOwogIHJlbmRlcmVyLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcmRvd24nLCAoZSkgPT4geyBiYWl4ID0gW2UuY2xpZW50WCwgZS5jbGllbnRZXTsgfSk7CiAgcmVuZGVyZXIuZG9tRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVydXAnLCAoZSkgPT4gewogICAgaWYgKCFiYWl4IHx8IE1hdGguaHlwb3QoZS5jbGllbnRYIC0gYmFpeFswXSwgZS5jbGllbnRZIC0gYmFpeFsxXSkgPiA2KSByZXR1cm47CiAgICBjb25zdCByID0gcmVuZGVyZXIuZG9tRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgIHB0ci5zZXQoKChlLmNsaWVudFggLSByLmxlZnQpIC8gci53aWR0aCkgKiAyIC0gMSwgLSgoZS5jbGllbnRZIC0gci50b3ApIC8gci5oZWlnaHQpICogMiArIDEpOwogICAgcmF5LnNldEZyb21DYW1lcmEocHRyLCBjYW1lcmEpOwogICAgaWYgKG1pbmkpIHsgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAnL2FnZW5jaWFzL29maWNpbmEnOyByZXR1cm47IH0KICAgIGNvbnN0IGhpdCA9IHJheS5pbnRlcnNlY3RPYmplY3RzKE9iamVjdC52YWx1ZXMoYWN0b3JzKS5tYXAoKG8pID0+IG8uZyksIHRydWUpLmZpbmQoKGgpID0+IGgub2JqZWN0LnVzZXJEYXRhLmlkKTsKICAgIGlmIChoaXQpIGZpY2hhKGhpdC5vYmplY3QudXNlckRhdGEuaWQpOwogIH0pOwoKICAvLyAtLS0tLS0tLS0tIEZpY2hhcyBxdWUgdnVlbGFuIC0tLS0tLS0tLS0KICBjb25zdCBDT0xPUiA9IHsgbWFpbDogMHhmZjYxNDIsIGRvYzogMHhGRkZGRkYsIGNoYXQ6IDB4MTM4QThBLCBjYXJ0YTogMHhGRkQyM0YsIG9rOiAweDFFOEE1QiwgYWxlcnRhOiAweEQxMTMyRiwgaW5mb3JtZTogMHg0QTVCN0EgfTsKICBjb25zdCB2b2xzID0gW107CiAgbGV0IHZlbG9jaXRhdCA9IDQ7CiAgY29uc3QgZHVyYWRhID0gKG1zKSA9PiAocmVkdWl0ID8gMCA6IG1zIC8gTWF0aC5tYXgoMSwgdmVsb2NpdGF0IC8gMikpOwogIGNvbnN0IHB1bnREZSA9IChpZCkgPT4gYWN0b3JzW2lkXS5nLnBvc2l0aW9uLmNsb25lKCkuYWRkKG5ldyBUSFJFRS5WZWN0b3IzKDAsIGFjdG9yc1tpZF0uYWx0ICogLjc1LCAwKSk7CiAgZnVuY3Rpb24gZW52aWEoZGUsIGEsIHRpcHVzID0gJ2RvYycpIHsKICAgIHJldHVybiBuZXcgUHJvbWlzZSgoZmkpID0+IHsKICAgICAgY29uc3QgcDEgPSBwdW50RGUoZGUpLCBwMiA9IHB1bnREZShhKSwgbXMgPSBkdXJhZGEoOTAwICsgcDEuZGlzdGFuY2VUbyhwMikgKiA3MCk7CiAgICAgIGlmICghbXMpIHJldHVybiBmaSgpOwogICAgICBjb25zdCBtID0gbmV3IFRIUkVFLk1lc2godGlwdXMgPT09ICdjaGF0JyA\/IG5ldyBUSFJFRS5TcGhlcmVHZW9tZXRyeSguMjgsIDE2LCAxMikgOiBuZXcgVEhSRUUuQm94R2VvbWV0cnkoLjU1LCAuMzgsIC4xKSwgbWF0KENPTE9SW3RpcHVzXSwgeyBlbWlzc2l2ZTogQ09MT1JbdGlwdXNdLCBlbWlzc2l2ZUludGVuc2l0eTogLjQ1IH0pKTsKICAgICAgc2NlbmUuYWRkKG0pOwogICAgICBjb25zdCBhbHQgPSAyICsgcDEuZGlzdGFuY2VUbyhwMikgKiAuMTgsIHB1bnRzID0gW107CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IDI0OyBpKyspIHsgY29uc3QgdCA9IGkgLyAyNDsgcHVudHMucHVzaChuZXcgVEhSRUUuVmVjdG9yMygpLmxlcnBWZWN0b3JzKHAxLCBwMiwgdCkuYWRkKG5ldyBUSFJFRS5WZWN0b3IzKDAsIE1hdGguc2luKE1hdGguUEkgKiB0KSAqIGFsdCwgMCkpKTsgfQogICAgICBjb25zdCBsaW5pYSA9IG5ldyBUSFJFRS5MaW5lKG5ldyBUSFJFRS5CdWZmZXJHZW9tZXRyeSgpLnNldEZyb21Qb2ludHMocHVudHMpLCBuZXcgVEhSRUUuTGluZURhc2hlZE1hdGVyaWFsKHsgY29sb3I6IDB4ZmY2MTQyLCBkYXNoU2l6ZTogLjM1LCBnYXBTaXplOiAuMjUsIHRyYW5zcGFyZW50OiB0cnVlLCBvcGFjaXR5OiAuNTUgfSkpOwogICAgICBsaW5pYS5jb21wdXRlTGluZURpc3RhbmNlcygpOyBzY2VuZS5hZGQobGluaWEpOwogICAgICB2b2xzLnB1c2goeyBtLCBsaW5pYSwgcDEsIHAyLCBhbHQsIGluaTogcGVyZm9ybWFuY2Uubm93KCksIG1zLCBmaSB9KTsKICAgIH0pOwogIH0KICBjb25zdCBlc3BlcmEgPSAobXMpID0+IG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIGR1cmFkYShtcykpKTsKICBjb25zdCBiYWZzID0gW107CiAgZnVuY3Rpb24gZGl1KGlkLCB0ZXh0LCBtcyA9IDIyMDApIHsKICAgIGNvbnN0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsgZC5jbGFzc05hbWUgPSAnb2ZpLWJhZic7IGQudGV4dENvbnRlbnQgPSB0ZXh0OyBjYXBhRXQuYXBwZW5kQ2hpbGQoZCk7CiAgICBiYWZzLnB1c2goeyBpZCwgZCwgZmluczogcGVyZm9ybWFuY2Uubm93KCkgKyAocmVkdWl0ID8gMjAwMCA6IE1hdGgubWF4KDEzMDAsIG1zIC8gTWF0aC5tYXgoMSwgdmVsb2NpdGF0IC8gMykpKSB9KTsKICB9CiAgYXN5bmMgZnVuY3Rpb24gdHJlYmFsbGEoaWQsIG1zID0gMTQwMCwgdGV4dCkgewogICAgY29uc3QgbyA9IGFjdG9yc1tpZF07IG8udHJlYmFsbGEgPSB0cnVlOyBvLmFuZWxsLnZpc2libGUgPSB0cnVlOwogICAgaWYgKHRleHQpIGRpdShpZCwgdGV4dCwgbXMgKyA0MDApOwogICAgYXdhaXQgZXNwZXJhKG1zKTsKICAgIG8udHJlYmFsbGEgPSBmYWxzZTsgby5hbmVsbC52aXNpYmxlID0gZmFsc2U7CiAgfQoKICAvLyAtLS0tLS0tLS0tIE1hcmNhZG9yIHkgZGlhcmlvIC0tLS0tLS0tLS0KICBjb25zdCBuID0geyBvazogMCwgdGFyZWFzOiAwIH07CiAgY29uc3QgY29tcHRhID0gKGspID0+IHsgbltrXSsrOyAkKGAjb2ZpLW4tJHtrfWApLnRleHRDb250ZW50ID0gbltrXTsgfTsKICBjb25zdCBob3JhID0gKG0pID0+IGAke1N0cmluZyhNYXRoLmZsb29yKG0gLyA2MCkpLnBhZFN0YXJ0KDIsICcwJyl9OiR7U3RyaW5nKG0gJSA2MCkucGFkU3RhcnQoMiwgJzAnKX1gOwogIGZ1bmN0aW9uIGFwdW50YSh0ZXh0LCBjbHMgPSAnJykgewogICAgY29uc3QgbGkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaScpOwogICAgbGkuaW5uZXJIVE1MID0gYDx0aW1lPiR7aG9yYShtaW51dCl9PC90aW1lPjxzcGFuIGNsYXNzPSIke2Nsc30iPjwvc3Bhbj5gOwogICAgbGkucXVlcnlTZWxlY3Rvcignc3BhbicpLnRleHRDb250ZW50ID0gdGV4dDsKICAgIGNvbnN0IGQgPSAkKCcjb2ZpLWRpYXJpbycpOyBkLnByZXBlbmQobGkpOwogICAgd2hpbGUgKGQuY2hpbGRyZW4ubGVuZ3RoID4gNDApIGQubGFzdENoaWxkLnJlbW92ZSgpOwogIH0KCiAgLy8gLS0tLS0tLS0tLSBCYW5kZWphIGRlIGFwcm9iYWNpw7NuIC0tLS0tLS0tLS0KICBjb25zdCBiYW5kZWphID0gW107CiAgZnVuY3Rpb24gYUJhbmRlamEoZGUsIHRleHQsIGRldGFsbCwgZW52aWFyKSB7CiAgICBjb25zdCBpdCA9IHsgZGUsIHRleHQsIGRldGFsbCwgZW52aWFyIH07CiAgICBiYW5kZWphLnB1c2goaXQpOyBwaW50YUJhbmRlamEoKTsKICAgIC8vIEVuIGVsIG1vZG8gbWluaSwgZGlyZWNjacOzbiBhcHJ1ZWJhIHNvbGEgYWwgY2FibyBkZSB1biBtb21lbnRvCiAgICBpZiAobWluaSkgc2V0VGltZW91dChhc3luYyAoKSA9PiB7IGJhbmRlamEuc3BsaWNlKGJhbmRlamEuaW5kZXhPZihpdCksIDEpOyBwaW50YUJhbmRlamEoKTsgZGl1KCdkaXJlY2Npb24nLCAnwqFBcHJvYmFkbyEnLCAxNjAwKTsgYXdhaXQgZW52aWEoJ2RpcmVjY2lvbicsIGRlLCAnb2snKTsgYXdhaXQgZW52aWFyKCk7IH0sIGR1cmFkYSgzMDAwKSB8fCAwKTsKICB9CiAgZnVuY3Rpb24gcGludGFCYW5kZWphKCkgewogICAgJCgnI29maS1uLWJhbmRlamEnKS50ZXh0Q29udGVudCA9IGJhbmRlamEubGVuZ3RoOwogICAgY29uc3QgcGlsYSA9IGFjdG9ycy5kaXJlY2Npb24ucGlsYTsKICAgIHdoaWxlIChwaWxhLmNoaWxkcmVuLmxlbmd0aCA+IGJhbmRlamEubGVuZ3RoKSBwaWxhLnJlbW92ZShwaWxhLmNoaWxkcmVuW3BpbGEuY2hpbGRyZW4ubGVuZ3RoIC0gMV0pOwogICAgd2hpbGUgKHBpbGEuY2hpbGRyZW4ubGVuZ3RoIDwgTWF0aC5taW4oYmFuZGVqYS5sZW5ndGgsIDgpKSB7IGNvbnN0IGYgPSBjYWl4YSguNSwgLjA1LCAuMzgsIG1hdCgweEZGRkZGRiksIDAsIHBpbGEuY2hpbGRyZW4ubGVuZ3RoICogLjA2LCAwKTsgZi5yb3RhdGlvbi55ID0gKE1hdGgucmFuZG9tKCkgLSAuNSkgKiAuNDsgcGlsYS5hZGQoZik7IH0KICAgIGNvbnN0IHVsID0gJCgnI29maS1iYW5kZWphJyk7CiAgICBpZiAoIWJhbmRlamEubGVuZ3RoKSB7IHVsLmlubmVySFRNTCA9ICc8bGkgY2xhc3M9Im9maS12YWNpbyI+TmFkYSBwZW5kaWVudGUuIExvIHF1ZSBuZWNlc2l0ZSBlbCB2aXN0byBidWVubyBkZSBkaXJlY2Npw7NuIGxsZWdhcsOhIGFxdcOtLjwvbGk+JzsgcmV0dXJuOyB9CiAgICB1bC5pbm5lckhUTUwgPSAnJzsKICAgIGZvciAoY29uc3QgaXQgb2YgYmFuZGVqYSkgewogICAgICBjb25zdCBsaSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpJyk7CiAgICAgIGxpLmlubmVySFRNTCA9ICc8c3Bhbj48c3Ryb25nPjwvc3Ryb25nPjxzbWFsbD48L3NtYWxsPjwvc3Bhbj48YnV0dG9uIGNsYXNzPSJidG4gcGVxIiB0eXBlPSJidXR0b24iPkFwcm9iYXI8L2J1dHRvbj4nOwogICAgICBsaS5xdWVyeVNlbGVjdG9yKCdzdHJvbmcnKS50ZXh0Q29udGVudCA9IGl0LnRleHQ7CiAgICAgIGxpLnF1ZXJ5U2VsZWN0b3IoJ3NtYWxsJykudGV4dENvbnRlbnQgPSBgJHtBW2l0LmRlXS5ub219IMK3ICR7aXQuZGV0YWxsfWA7CiAgICAgIGxpLnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvbicpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYXN5bmMgKCkgPT4gewogICAgICAgIGJhbmRlamEuc3BsaWNlKGJhbmRlamEuaW5kZXhPZihpdCksIDEpOyBwaW50YUJhbmRlamEoKTsKICAgICAgICBjb21wdGEoJ29rJyk7IGFwdW50YShgRGlyZWNjacOzbiBhcHJ1ZWJhOiAke2l0LnRleHR9YCwgJ29maS1iaWVuJyk7CiAgICAgICAgZGl1KCdkaXJlY2Npb24nLCAnwqFBZGVsYW50ZSEnLCAxNjAwKTsKICAgICAgICBhd2FpdCBlbnZpYSgnZGlyZWNjaW9uJywgaXQuZGUsICdvaycpOwogICAgICAgIGF3YWl0IGl0LmVudmlhcigpOwogICAgICB9KTsKICAgICAgdWwuYXBwZW5kQ2hpbGQobGkpOwogICAgfQogIH0KCiAgLy8gLS0tLS0tLS0tLSBSdXRpbmFzIGRlbCBkw61hIC0tLS0tLS0tLS0KICBhc3luYyBmdW5jdGlvbiByZXNwdWVzdGFDb3JyZW9zKCkgewogICAgYXdhaXQgZW52aWEoJ2NvcnJlbycsICdjb3JyZW9zJywgJ21haWwnKTsKICAgIGNvbnN0IGsgPSAxICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMyk7CiAgICBhd2FpdCB0cmViYWxsYSgnY29ycmVvcycsIDEyMDAsIGAke2t9ICR7ayA9PT0gMSA\/ICdjb3JyZW8nIDogJ2NvcnJlb3MnfSBzaW4gcmVzcG9uZGVyYCk7CiAgICBhd2FpdCBlbnZpYSgnY29ycmVvcycsICdkaXJlY2Npb24nLCAnZG9jJyk7IGNvbXB0YSgndGFyZWFzJyk7CiAgICBhQmFuZGVqYSgnY29ycmVvcycsIGAke2t9ICR7ayA9PT0gMSA\/ICdyZXNwdWVzdGEgcHJvcHVlc3RhJyA6ICdyZXNwdWVzdGFzIHByb3B1ZXN0YXMnfWAsICdjb3JyZW9zIGRlIGNsaWVudGVzJywgYXN5bmMgKCkgPT4geyBhd2FpdCBlbnZpYSgnY29ycmVvcycsICdjb3JyZW8nLCAnbWFpbCcpOyBhd2FpdCBlbnZpYSgnY29ycmVvJywgJ2NsaWVudGVzJywgJ21haWwnKTsgYXB1bnRhKGBSZXNwdWVzdGEgZGUgY29ycmVvczogJHtrfSAke2sgPT09IDEgPyAncmVzcHVlc3RhIGVudmlhZGEnIDogJ3Jlc3B1ZXN0YXMgZW52aWFkYXMnfWApOyB9KTsKICB9CiAgYXN5bmMgZnVuY3Rpb24gcmV1bmlvbmVzKCkgewogICAgYXdhaXQgdHJlYmFsbGEoJ3JldW5pb25lcycsIDE0MDAsICdBZ2VuZGEgZGUgaG95Jyk7CiAgICBhd2FpdCBlbnZpYSgncmV1bmlvbmVzJywgJ2RpcmVjY2lvbicsICdpbmZvcm1lJyk7IGNvbXB0YSgndGFyZWFzJyk7IGFwdW50YSgnUmV1bmlvbmVzOiByZXN1bWVuIGRlbCBkw61hJyk7CiAgICBhQmFuZGVqYSgncmV1bmlvbmVzJywgJzIgcmVjb3JkYXRvcmlvcyBkZSByZXVuacOzbicsICdwcmVwYXJhZG9zLCBzaW4gZW52aWFyJywgYXN5bmMgKCkgPT4geyBhd2FpdCBlbnZpYSgncmV1bmlvbmVzJywgJ2NsaWVudGVzJywgJ21haWwnKTsgYXdhaXQgZW52aWEoJ3JldW5pb25lcycsICdwYW5lbCcsICdjYXJ0YScpOyBhcHVudGEoJ1JldW5pb25lczogcmVjb3JkYXRvcmlvcyBlbnZpYWRvcyBlIGluZm9ybWUgZW4gbGEgdGFyamV0YSBkZWwgY2xpZW50ZScpOyB9KTsKICB9CiAgYXN5bmMgZnVuY3Rpb24gd2hhdHNhcHAoKSB7CiAgICBhd2FpdCBlbnZpYSgnY2xpZW50ZXMnLCAnd2hhdHNhcHAnLCAnY2hhdCcpOwogICAgYXdhaXQgdHJlYmFsbGEoJ3doYXRzYXBwJywgNTAwKTsKICAgIGF3YWl0IGVudmlhKCd3aGF0c2FwcCcsICdjbGllbnRlcycsICdjaGF0Jyk7IGNvbXB0YSgndGFyZWFzJyk7CiAgfQogIGFzeW5jIGZ1bmN0aW9uIGZhY3R1cmFjaW9uKCkgewogICAgYXdhaXQgZW52aWEoJ2JhbmNvJywgJ2ZhY3R1cmFjaW9uJywgJ2RvYycpOwogICAgYXdhaXQgdHJlYmFsbGEoJ2ZhY3R1cmFjaW9uJywgMTYwMCwgJ0ZhY3R1cmFzIHkgY29icm9zJyk7CiAgICBhd2FpdCBlbnZpYSgnZmFjdHVyYWNpb24nLCAnZGlyZWNjaW9uJywgJ2luZm9ybWUnKTsgY29tcHRhKCd0YXJlYXMnKTsgYXB1bnRhKCdGYWN0dXJhY2nDs246IHZlbmNpZGFzIHkgY29icm9zIHNpbiBmYWN0dXJhJyk7CiAgfQogIGFzeW5jIGZ1bmN0aW9uIGludGVybmEoKSB7CiAgICBhd2FpdCB0cmViYWxsYSgnaW50ZXJuYScsIDEyMDAsICdCb2xldMOtbiBkZSBsYSBzZW1hbmEnKTsKICAgIGF3YWl0IFByb21pc2UuYWxsKFsnZXFkaXNlbm8nLCAnZXF3ZWInLCAnY20nLCAnZXFsaWNpdGEnXS5tYXAoKHApID0+IGVudmlhKCdpbnRlcm5hJywgcCwgJ21haWwnKSkpOwogICAgY29tcHRhKCd0YXJlYXMnKTsgYXB1bnRhKCdDb211bmljYWNpw7NuIGludGVybmE6IGJvbGV0w61uIGVudmlhZG8gYSB0b2RvIGVsIGVxdWlwbycpOwogIH0KICBhc3luYyBmdW5jdGlvbiBjb3JyZW9UYWJsZXJvKCkgewogICAgYXdhaXQgZW52aWEoJ2NvcnJlbycsICd0YWJsZXJvJywgJ21haWwnKTsKICAgIGF3YWl0IHRyZWJhbGxhKCd0YWJsZXJvJywgMTIwMCwgJ0NvcnJlbyDihpIgdGFyamV0YXMnKTsKICAgIGF3YWl0IGVudmlhKCd0YWJsZXJvJywgJ3BhbmVsJywgJ2NhcnRhJyk7IGF3YWl0IGVudmlhKCd0YWJsZXJvJywgJ3BhbmVsJywgJ2NhcnRhJyk7CiAgICBhd2FpdCBlbnZpYSgndGFibGVybycsICdkaXJlY2Npb24nLCAnaW5mb3JtZScpOyBjb21wdGEoJ3RhcmVhcycpOyBhcHVudGEoJ0NvcnJlbyBhIHRhYmxlcm86IHRhcmpldGFzIGNyZWFkYXMgeSBhdmlzbyBkZSBjb3JyZW9zIGRlIG3DoXMgZGUgMjQgaCcpOwogIH0KICBhc3luYyBmdW5jdGlvbiBjYWxpZGFkKCkgewogICAgYXdhaXQgZW52aWEoJ2VxZGlzZW5vJywgJ2NvcnJlbycsICdtYWlsJyk7IGF3YWl0IGVudmlhKCdjb3JyZW8nLCAnY2FsaWRhZCcsICdtYWlsJyk7CiAgICBhd2FpdCB0cmViYWxsYSgnY2FsaWRhZCcsIDEzMDAsICdEaXNlw7FvIHZzLiBwZXRpY2nDs24nKTsKICAgIGF3YWl0IGVudmlhKCdjYWxpZGFkJywgJ2RpcmVjY2lvbicsICdpbmZvcm1lJyk7IGNvbXB0YSgndGFyZWFzJyk7IGFwdW50YSgnQ29udHJvbCBkZSBjYWxpZGFkOiBpbmZvcm1lIGRlIGNhZGEgZW52w61vJyk7CiAgfQogIGFzeW5jIGZ1bmN0aW9uIGRpc2VubygpIHsKICAgIGF3YWl0IGVudmlhKCdwYW5lbCcsICdkaXNlbm8nLCAnY2FydGEnKTsKICAgIGF3YWl0IHRyZWJhbGxhKCdkaXNlbm8nLCAxMzAwLCAnUHJvbXB0cyBwYXJhIGxhIElBJyk7CiAgICBhd2FpdCBlbnZpYSgnZGlzZW5vJywgJ3BhbmVsJywgJ2RvYycpOyBhd2FpdCBlbnZpYSgnZGlzZW5vJywgJ2RpcmVjY2lvbicsICdpbmZvcm1lJyk7CiAgICBjb21wdGEoJ3RhcmVhcycpOyBhcHVudGEoJ0Rpc2XDsW86IHRyYWJham8gZGVsIGTDrWEgZG9jdW1lbnRhZG8gZW4gZWwgdGFibGVybycpOwogIH0KICBhc3luYyBmdW5jdGlvbiBnZXN0aW9uKCkgewogICAgY29uc3QgYm90cyA9IE9iamVjdC5rZXlzKEEpLmZpbHRlcigoaWQpID0+IEFbaWRdLnRpcHVzID09PSAnYm90JyAmJiBpZCAhPT0gJ2dlc3Rpb24nKTsKICAgIGFwdW50YSgnR2VzdGnDs24gcmVjb2dlIGxhIGFjdGl2aWRhZCBkZSB0b2RvcyBsb3MgYWdlbnRlcycpOwogICAgYXdhaXQgUHJvbWlzZS5hbGwoYm90cy5tYXAoKGlkLCBpKSA9PiBlc3BlcmEoaSAqIDExMCkudGhlbigoKSA9PiBlbnZpYShpZCwgJ2dlc3Rpb24nLCAnZG9jJykpKSk7CiAgICBhd2FpdCB0cmViYWxsYSgnZ2VzdGlvbicsIDE0MDAsICdJbmZvcm1lIGRlbCBkw61hJyk7CiAgICBhd2FpdCBlbnZpYSgnZ2VzdGlvbicsICdhcmNoaXZvJywgJ2RvYycpOyBhd2FpdCBlbnZpYSgnZ2VzdGlvbicsICdkaXJlY2Npb24nLCAnaW5mb3JtZScpOwogICAgY29tcHRhKCd0YXJlYXMnKTsgYXB1bnRhKCdHZXN0acOzbjogaW5mb3JtZSBkaWFyaW8gZW4gZWwgYXJjaGl2bycpOwogIH0KICBhc3luYyBmdW5jdGlvbiBjb29yZGluYWRvcigpIHsKICAgIGF3YWl0IGVudmlhKCdnZXN0aW9uJywgJ2Nvb3JkaW5hZG9yJywgJ2RvYycpOwogICAgYXdhaXQgdHJlYmFsbGEoJ2Nvb3JkaW5hZG9yJywgMTIwMCwgJ1ByaW9yaWRhZGVzIGRlIG1hw7FhbmEnKTsKICAgIGF3YWl0IGVudmlhKCdjb29yZGluYWRvcicsICdkaXJlY2Npb24nLCAnaW5mb3JtZScpOyBjb21wdGEoJ3RhcmVhcycpOyBhcHVudGEoJ0Nvb3JkaW5hZG9yOiBwcmlvcmlkYWRlcyBwYXJhIG1hw7FhbmEnKTsKICB9CiAgYXN5bmMgZnVuY3Rpb24gbGljaXRhY2lvbmVzKCkgewogICAgYXdhaXQgdHJlYmFsbGEoJ2xpY2l0YWNpb25lcycsIDEyMDAsICdDb25jdXJzb3MgbnVldm9zJyk7CiAgICBhd2FpdCBlbnZpYSgnbGljaXRhY2lvbmVzJywgJ2VxbGljaXRhJywgJ2RvYycpOyBjb21wdGEoJ3RhcmVhcycpOyBhcHVudGEoJ0xpY2l0YWNpb25lczogYXZpc29zIHkgcGxhem9zIGFsIGVxdWlwbycpOwogIH0KCiAgY29uc3QgRElBUyA9IFsnTHUnLCAnTWEnLCAnTWknLCAnSnUnLCAnVmknLCAnU8OhJywgJ0RvJ107CiAgY29uc3QgTk9NQlJFUyA9IFsnTHVuZXMnLCAnTWFydGVzJywgJ01pw6lyY29sZXMnLCAnSnVldmVzJywgJ1ZpZXJuZXMnLCAnU8OhYmFkbycsICdEb21pbmdvJ107CiAgbGV0IG1pbnV0ID0gNyAqIDYwICsgNTcsIGRpYSA9IDAsIGVuTWFyeGEgPSB0cnVlLCBhY3VtdWxhdCA9IDAsIHVsdGltID0gcGVyZm9ybWFuY2Uubm93KCk7CiAgZnVuY3Rpb24gcnV0aW5hc0RlKG0pIHsKICAgIGNvbnN0IHIgPSBbXSwgaCA9IE1hdGguZmxvb3IobSAvIDYwKSwgbWkgPSBtICUgNjAsIGxhYm9yYWJsZSA9IGRpYSA8IDU7CiAgICBpZiAoZGlhIDw9IDUgJiYgbSA+PSA0ODAgJiYgbSA8PSAxMjU1ICYmIG1pICUgNSA9PT0gMCkgci5wdXNoKHdoYXRzYXBwKTsKICAgIGlmIChsYWJvcmFibGUpIHsKICAgICAgaWYgKG0gPT09IDQ4MCkgci5wdXNoKHJldW5pb25lcyk7CiAgICAgIGlmIChtID09PSA1NDApIHIucHVzaChsaWNpdGFjaW9uZXMpOwogICAgICBpZiAoZGlhID09PSAwICYmIG0gPT09IDU0NSkgci5wdXNoKGludGVybmEpOwogICAgICBpZiAobWkgPT09IDE3ICYmIGggPj0gOSAmJiBoIDw9IDE5KSByLnB1c2gocmVzcHVlc3RhQ29ycmVvcyk7CiAgICAgIGlmIChtID09PSAxMDY1KSByLnB1c2goY29ycmVvVGFibGVybyk7CiAgICAgIGlmIChtID09PSAxMDgwKSByLnB1c2goY2FsaWRhZCk7CiAgICAgIGlmIChtID09PSAxMTEwKSByLnB1c2goZGlzZW5vKTsKICAgIH0KICAgIGlmIChtID09PSA0ODUgJiYgJCgnI29maS1mYWN0dXJhJykuY2hlY2tlZCkgci5wdXNoKGZhY3R1cmFjaW9uKTsKICAgIGlmIChtID09PSAxMjAwKSByLnB1c2goZ2VzdGlvbik7CiAgICBpZiAobSA9PT0gMTIwNSkgci5wdXNoKGNvb3JkaW5hZG9yKTsKICAgIHJldHVybiByOwogIH0KCiAgLy8gLS0tLS0tLS0tLSBFbmNhcmdvcyAtLS0tLS0tLS0tCiAgYXN5bmMgZnVuY3Rpb24gZW5jYXJnYSgpIHsKICAgIGNvbnN0IFtib3QsIHRleHQsIGRlc3RpXSA9IFRBUkVBU1skKCcjb2ZpLXRhcmVhJykuc2VsZWN0ZWRJbmRleF07CiAgICBhcHVudGEoYEVuY2FyZ28gZGUgZGlyZWNjacOzbjogJHt0ZXh0fWApOwogICAgZGl1KCdkaXJlY2Npb24nLCAnVGUgcGFzbyBlc3RvJywgMTgwMCk7CiAgICBhd2FpdCBlbnZpYSgnZGlyZWNjaW9uJywgJ2VucnV0YWRvcicsICdjYXJ0YScpOwogICAgYXdhaXQgdHJlYmFsbGEoJ2VucnV0YWRvcicsIDcwMCwgJ0xvIGxsZXZhICcgKyBBW2JvdF0ubm9tKTsKICAgIGF3YWl0IGVudmlhKCdlbnJ1dGFkb3InLCBib3QsICdjYXJ0YScpOwogICAgYXdhaXQgdHJlYmFsbGEoYm90LCAxNjAwLCAnVHJhYmFqYW5kbycpOwogICAgYXdhaXQgZW52aWEoYm90LCBkZXN0aSwgZGVzdGkgPT09ICdkaXJlY2Npb24nID8gJ2luZm9ybWUnIDogJ2RvYycpOwogICAgY29tcHRhKCd0YXJlYXMnKTsgYXB1bnRhKGAke0FbYm90XS5ub219OiBoZWNobywgbG8gcmVjaWJlICR7QVtkZXN0aV0ubm9tfWAsICdvZmktYmllbicpOwogIH0KCiAgLy8gLS0tLS0tLS0tLSBGaWNoYSAtLS0tLS0tLS0tCiAgbGV0IHNlbCA9ICdkaXJlY2Npb24nOwogIGZ1bmN0aW9uIGZpY2hhKGlkKSB7CiAgICBhY3RvcnNbc2VsXT8uZXQuY2xhc3NMaXN0LnJlbW92ZSgnb2ZpLXNlbCcpOwogICAgc2VsID0gaWQ7IGFjdG9yc1tpZF0uZXQuY2xhc3NMaXN0LmFkZCgnb2ZpLXNlbCcpOwogICAgY29uc3QgYSA9IEFbaWRdLCBmID0gJCgnI29maS1maWNoYScpOwogICAgZi5pbm5lckhUTUwgPSAnJzsKICAgIGNvbnN0IHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwJyk7IHQuY2xhc3NOYW1lID0gJ29maS1maWNoYS10aXQnOyB0LnRleHRDb250ZW50ID0gYS5ub207IGYuYXBwZW5kQ2hpbGQodCk7CiAgICBpZiAoYS50aXB1cyA9PT0gJ2JvdCcpIHsKICAgICAgY29uc3QgZGwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkbCcpOwogICAgICBbWydRdcOpIGhhY2UnLCBhLnJvbF0sIFsnQ3XDoW5kbycsIGEucnV0aW5hc10sIFsnUmVnbGEnLCBhLnJlZ2xhc10sIFsnUGFzYSBlbCB0cmFiYWpvIGEnLCBhLnBhc2FdXS5mb3JFYWNoKChbaywgdmFsXSkgPT4gewogICAgICAgIGNvbnN0IGR0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZHQnKTsgZHQudGV4dENvbnRlbnQgPSBrOyBjb25zdCBkZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RkJyk7IGRkLnRleHRDb250ZW50ID0gdmFsOyBkbC5hcHBlbmQoZHQsIGRkKTsKICAgICAgfSk7CiAgICAgIGYuYXBwZW5kQ2hpbGQoZGwpOwogICAgfSBlbHNlIHsgY29uc3QgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3AnKTsgcC50ZXh0Q29udGVudCA9IGEucm9sOyBmLmFwcGVuZENoaWxkKHApOyB9CiAgfQoKICAvLyAtLS0tLS0tLS0tIEJ1Y2xlIC0tLS0tLS0tLS0KICBmdW5jdGlvbiBwaW50YURpYXMoKSB7CiAgICBjb25zdCBnID0gJCgnI29maS1kaWFzJyk7IGcuaW5uZXJIVE1MID0gJyc7CiAgICBESUFTLmZvckVhY2goKGQsIGkpID0+IHsKICAgICAgY29uc3QgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOwogICAgICBiLnR5cGUgPSAnYnV0dG9uJzsgYi5jbGFzc05hbWUgPSAnb2ZpLWNoaXAnOyBiLnRleHRDb250ZW50ID0gZDsgYi5zZXRBdHRyaWJ1dGUoJ2FyaWEtcHJlc3NlZCcsIGkgPT09IGRpYSk7IGIuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgTk9NQlJFU1tpXSk7CiAgICAgIGIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7IGRpYSA9IGk7IG1pbnV0ID0gNyAqIDYwICsgNTc7IHBpbnRhRGlhcygpOyBhcHVudGEoYEVtcGllemEgZWwgJHtOT01CUkVTW2ldLnRvTG93ZXJDYXNlKCl9YCk7IH0pOwogICAgICBnLmFwcGVuZENoaWxkKGIpOwogICAgfSk7CiAgICAkKCcjb2ZpLWRpYScpLnRleHRDb250ZW50ID0gTk9NQlJFU1tkaWFdOwogIH0KICBmdW5jdGlvbiBtaWRhKCkgewogICAgY29uc3QgdyA9IGNvbnQuY2xpZW50V2lkdGgsIGggPSBjb250LmNsaWVudEhlaWdodDsKICAgIHJlbmRlcmVyLnNldFNpemUodywgaCwgZmFsc2UpOyBjYW1lcmEuYXNwZWN0ID0gdyAvIGg7IGNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7CiAgICBpZiAoIXRvY2FkYSAmJiAhdm9sKSB7IGNvbnN0IFtwLCB0XSA9IGdlbmVyYWwoKTsgY2FtZXJhLnBvc2l0aW9uLmNvcHkocCk7IGNvbnRyb2xzLnRhcmdldC5jb3B5KHQpOyB9CiAgfQogIG5ldyBSZXNpemVPYnNlcnZlcihtaWRhKS5vYnNlcnZlKGNvbnQpOyBtaWRhKCk7CgogIGZ1bmN0aW9uIGJ1Y2xlKGFyYSkgewogICAgY29uc3QgZHQgPSBNYXRoLm1pbigxMDAsIGFyYSAtIHVsdGltKTsgdWx0aW0gPSBhcmE7CiAgICBpZiAoZW5NYXJ4YSkgewogICAgICBhY3VtdWxhdCArPSBkdCAqIHZlbG9jaXRhdDsKICAgICAgd2hpbGUgKGFjdW11bGF0ID49IDI1MCkgewogICAgICAgIGFjdW11bGF0IC09IDI1MDsgbWludXQrKzsKICAgICAgICBpZiAobWludXQgPiAyMSAqIDYwKSB7IG1pbnV0ID0gNyAqIDYwOyBkaWEgPSAoZGlhICsgMSkgJSA3OyBwaW50YURpYXMoKTsgYXB1bnRhKGBFbXBpZXphIGVsICR7Tk9NQlJFU1tkaWFdLnRvTG93ZXJDYXNlKCl9YCk7IH0KICAgICAgICBmb3IgKGNvbnN0IHIgb2YgcnV0aW5hc0RlKG1pbnV0KSkgcigpOwogICAgICB9CiAgICAgICQoJyNvZmktcmVsb2onKS50ZXh0Q29udGVudCA9IGhvcmEobWludXQpOwogICAgfQogICAgaWYgKHZvbCkgewogICAgICBjb25zdCB0ID0gTWF0aC5taW4oMSwgKGFyYSAtIHZvbC5pbmkpIC8gdm9sLmR1ciksIGUgPSB0IDwgLjUgPyAyICogdCAqIHQgOiAxIC0gTWF0aC5wb3coLTIgKiB0ICsgMiwgMikgLyAyOwogICAgICBjYW1lcmEucG9zaXRpb24ubGVycFZlY3RvcnModm9sLnAwLCB2b2wucCwgZSk7IGNvbnRyb2xzLnRhcmdldC5sZXJwVmVjdG9ycyh2b2wudDAsIHZvbC50LCBlKTsKICAgICAgaWYgKHQgPj0gMSkgdm9sID0gbnVsbDsKICAgIH0KICAgIGNvbnRyb2xzLnVwZGF0ZSgpOwogICAgY29uc3QgcyA9IGFyYSAvIDEwMDA7CiAgICBmb3IgKGNvbnN0IFtpZCwgb10gb2YgT2JqZWN0LmVudHJpZXMoYWN0b3JzKSkgewogICAgICBpZiAoIXJlZHVpdCAmJiBBW2lkXS50aXB1cyA9PT0gJ2JvdCcpIG8uZy5wb3NpdGlvbi55ID0gby5iYXNlICsgTWF0aC5zaW4ocyAqIDEuOCArIG8uZmFzZSkgKiAuMDcgKyAoby50cmViYWxsYSA\/IE1hdGguYWJzKE1hdGguc2luKHMgKiA5KSkgKiAuMTIgOiAwKTsKICAgICAgaWYgKG8uYW5lbGwudmlzaWJsZSkgby5hbmVsbC5yb3RhdGlvbi56ID0gcyAqIDU7CiAgICB9CiAgICBpZiAoIXJlZHVpdCkgYWN0b3JzLmRpcmVjY2lvbi5jb3JvbmEucm90YXRpb24ueSA9IHMgKiAuNjsKICAgIGZvciAobGV0IGkgPSB2b2xzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgIGNvbnN0IGYgPSB2b2xzW2ldLCB0ID0gTWF0aC5taW4oMSwgKGFyYSAtIGYuaW5pKSAvIGYubXMpOwogICAgICBmLm0ucG9zaXRpb24ubGVycFZlY3RvcnMoZi5wMSwgZi5wMiwgdCk7IGYubS5wb3NpdGlvbi55ICs9IE1hdGguc2luKE1hdGguUEkgKiB0KSAqIGYuYWx0OwogICAgICBmLm0ucm90YXRpb24ueSA9IHQgKiA2OwogICAgICBmLmxpbmlhLm1hdGVyaWFsLm9wYWNpdHkgPSAuNTUgKiAoMSAtIE1hdGgubWF4KDAsIHQgLSAuNykgLyAuMyk7CiAgICAgIGlmICh0ID49IDEpIHsgc2NlbmUucmVtb3ZlKGYubSk7IHNjZW5lLnJlbW92ZShmLmxpbmlhKTsgZi5tLmdlb21ldHJ5LmRpc3Bvc2UoKTsgZi5saW5pYS5nZW9tZXRyeS5kaXNwb3NlKCk7IHZvbHMuc3BsaWNlKGksIDEpOyBmLmZpKCk7IH0KICAgIH0KICAgIHJlbmRlcmVyLnJlbmRlcihzY2VuZSwgY2FtZXJhKTsKICAgIGZvciAoY29uc3QgbyBvZiBPYmplY3QudmFsdWVzKGFjdG9ycykpIHByb2plY3RhKG8uZy5wb3NpdGlvbi5jbG9uZSgpLmFkZChuZXcgVEhSRUUuVmVjdG9yMygwLCAtLjE1LCAuOSkpLCBvLmV0KTsKICAgIGZvciAobGV0IGkgPSBiYWZzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgIGNvbnN0IGIgPSBiYWZzW2ldOwogICAgICBpZiAoYXJhID4gYi5maW5zKSB7IGIuZC5yZW1vdmUoKTsgYmFmcy5zcGxpY2UoaSwgMSk7IGNvbnRpbnVlOyB9CiAgICAgIHByb2plY3RhKGFjdG9yc1tiLmlkXS5nLnBvc2l0aW9uLmNsb25lKCkuYWRkKG5ldyBUSFJFRS5WZWN0b3IzKDAsIGFjdG9yc1tiLmlkXS5hbHQgKyAuNSwgMCkpLCBiLmQsICcgdHJhbnNsYXRlKDAsIC0xMDAlKScpOwogICAgfQogICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGJ1Y2xlKTsKICB9CgogIHBpbnRhRGlhcygpOyBwaW50YUJhbmRlamEoKTsgZmljaGEoJ2RpcmVjY2lvbicpOwogICQoJyNvZmktdGFyZWEnKS5pbm5lckhUTUwgPSBUQVJFQVMubWFwKChbLCB0XSkgPT4gYDxvcHRpb24+JHt0fTwvb3B0aW9uPmApLmpvaW4oJycpOwogIGFwdW50YSgnRW1waWV6YSBlbCBkw61hIGVuIGxhIG9maWNpbmEnKTsKICAkKCcjb2ZpLXBsYXknKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7IGVuTWFyeGEgPSAhZW5NYXJ4YTsgZS5jdXJyZW50VGFyZ2V0LnRleHRDb250ZW50ID0gZW5NYXJ4YSA\/ICdQYXVzYScgOiAnQ29udGludWFyJzsgZS5jdXJyZW50VGFyZ2V0LnNldEF0dHJpYnV0ZSgnYXJpYS1wcmVzc2VkJywgZW5NYXJ4YSk7IH0pOwogIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLW9maS12ZWxdJykuZm9yRWFjaCgoYikgPT4gYi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHsgdmVsb2NpdGF0ID0gTnVtYmVyKGIuZGF0YXNldC5vZmlWZWwpOyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1vZmktdmVsXScpLmZvckVhY2goKHgpID0+IHguc2V0QXR0cmlidXRlKCdhcmlhLXByZXNzZWQnLCB4ID09PSBiKSk7IH0pKTsKICAkKCcjb2ZpLWVuY2FyZ2EnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGVuY2FyZ2EpOwogIHJlcXVlc3RBbmltYXRpb25GcmFtZSgodCkgPT4geyB1bHRpbSA9IHQ7IHJlcXVlc3RBbmltYXRpb25GcmFtZShidWNsZSk7IH0pOwp9KSgpOwo=\";var u=Uint8Array.from(atob(b),function(c){return c.charCodeAt(0);});(new Function(new TextDecoder().decode(u)))();})();<\/script>[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section]<\/p>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":8,"featured_media":4874,"parent":4905,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_et_pb_use_builder":"on","_et_pb_old_content":"","_et_gb_content_width":"","footnotes":""},"class_list":["post-5026","page","type-page","status-publish","has-post-thumbnail","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Oficina de agentes de IA en 3D &#8211; laGr\u00e0fica<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/lagrafica.com\/es\/servicios-de-publicidad-marketing-y-diseno-multimedia\/asesoramiento-inteligencia-artificial-lleida\/oficina-agentes-ia\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Oficina de agentes de IA en 3D &#8211; laGr\u00e0fica\" \/>\n<meta property=\"og:url\" content=\"https:\/\/lagrafica.com\/es\/servicios-de-publicidad-marketing-y-diseno-multimedia\/asesoramiento-inteligencia-artificial-lleida\/oficina-agentes-ia\/\" \/>\n<meta property=\"og:site_name\" content=\"laGr\u00e0fica\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/agencialagrafica\/\" \/>\n<meta property=\"article:modified_time\" content=\"2026-11-09T12:30:53+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/lagrafica.com\/wp-content\/uploads\/2026\/11\/lagrafica-oficina-agents-ia-3d-1.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1394\" \/>\n\t<meta property=\"og:image:height\" content=\"1000\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/lagrafica.com\\\/es\\\/servicios-de-publicidad-marketing-y-diseno-multimedia\\\/asesoramiento-inteligencia-artificial-lleida\\\/oficina-agentes-ia\\\/\",\"url\":\"https:\\\/\\\/lagrafica.com\\\/es\\\/servicios-de-publicidad-marketing-y-diseno-multimedia\\\/asesoramiento-inteligencia-artificial-lleida\\\/oficina-agentes-ia\\\/\",\"name\":\"Oficina de agentes de IA en 3D &#8211; laGr\u00e0fica\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/lagrafica.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/lagrafica.com\\\/es\\\/servicios-de-publicidad-marketing-y-diseno-multimedia\\\/asesoramiento-inteligencia-artificial-lleida\\\/oficina-agentes-ia\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/lagrafica.com\\\/es\\\/servicios-de-publicidad-marketing-y-diseno-multimedia\\\/asesoramiento-inteligencia-artificial-lleida\\\/oficina-agentes-ia\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/lagrafica.com\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/lagrafica-oficina-agents-ia-3d-1.jpg\",\"datePublished\":\"2026-11-06T10:08:58+00:00\",\"dateModified\":\"2026-11-09T12:30:53+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/lagrafica.com\\\/es\\\/servicios-de-publicidad-marketing-y-diseno-multimedia\\\/asesoramiento-inteligencia-artificial-lleida\\\/oficina-agentes-ia\\\/#breadcrumb\"},\"inLanguage\":\"es-ES\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/lagrafica.com\\\/es\\\/servicios-de-publicidad-marketing-y-diseno-multimedia\\\/asesoramiento-inteligencia-artificial-lleida\\\/oficina-agentes-ia\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es-ES\",\"@id\":\"https:\\\/\\\/lagrafica.com\\\/es\\\/servicios-de-publicidad-marketing-y-diseno-multimedia\\\/asesoramiento-inteligencia-artificial-lleida\\\/oficina-agentes-ia\\\/#primaryimage\",\"url\":\"https:\\\/\\\/lagrafica.com\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/lagrafica-oficina-agents-ia-3d-1.jpg\",\"contentUrl\":\"https:\\\/\\\/lagrafica.com\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/lagrafica-oficina-agents-ia-3d-1.jpg\",\"width\":1394,\"height\":1000,\"caption\":\"Oficina en 3D amb els agents d\u2019IA d\u2019una empresa de disseny i m\u00e0rqueting\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/lagrafica.com\\\/es\\\/servicios-de-publicidad-marketing-y-diseno-multimedia\\\/asesoramiento-inteligencia-artificial-lleida\\\/oficina-agentes-ia\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/lagrafica.com\\\/es\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Servicios de publicidad, marketing y dise\u00f1o multimedia\",\"item\":\"https:\\\/\\\/lagrafica.com\\\/es\\\/servicios-de-publicidad-marketing-y-diseno-multimedia\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Asesoramiento en IA | Inteligencia artificial Lleida\",\"item\":\"https:\\\/\\\/lagrafica.com\\\/es\\\/servicios-de-publicidad-marketing-y-diseno-multimedia\\\/asesoramiento-inteligencia-artificial-lleida\\\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Oficina de agentes de IA en 3D\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/lagrafica.com\\\/#website\",\"url\":\"https:\\\/\\\/lagrafica.com\\\/\",\"name\":\"laGr\u00e0fica\",\"description\":\"Ag\u00e8ncia de publicitat: identitat corporativa, disseny gr\u00e0fic, disseny web, m\u00e0rqueting i xarxes socials\",\"publisher\":{\"@id\":\"https:\\\/\\\/lagrafica.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/lagrafica.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es-ES\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/lagrafica.com\\\/#organization\",\"name\":\"laGr\u00e0fica\",\"url\":\"https:\\\/\\\/lagrafica.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es-ES\",\"@id\":\"https:\\\/\\\/lagrafica.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/lagrafica.com\\\/wp-content\\\/uploads\\\/logo-lagrafica.png\",\"contentUrl\":\"https:\\\/\\\/lagrafica.com\\\/wp-content\\\/uploads\\\/logo-lagrafica.png\",\"width\":500,\"height\":126,\"caption\":\"laGr\u00e0fica\"},\"image\":{\"@id\":\"https:\\\/\\\/lagrafica.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/agencialagrafica\\\/\",\"https:\\\/\\\/www.instagram.com\\\/agencialagrafica\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/agencialagrafica\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Oficina de agentes de IA en 3D &#8211; laGr\u00e0fica","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/lagrafica.com\/es\/servicios-de-publicidad-marketing-y-diseno-multimedia\/asesoramiento-inteligencia-artificial-lleida\/oficina-agentes-ia\/","og_locale":"es_ES","og_type":"article","og_title":"Oficina de agentes de IA en 3D &#8211; laGr\u00e0fica","og_url":"https:\/\/lagrafica.com\/es\/servicios-de-publicidad-marketing-y-diseno-multimedia\/asesoramiento-inteligencia-artificial-lleida\/oficina-agentes-ia\/","og_site_name":"laGr\u00e0fica","article_publisher":"https:\/\/www.facebook.com\/agencialagrafica\/","article_modified_time":"2026-11-09T12:30:53+00:00","og_image":[{"width":1394,"height":1000,"url":"https:\/\/lagrafica.com\/wp-content\/uploads\/2026\/11\/lagrafica-oficina-agents-ia-3d-1.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/lagrafica.com\/es\/servicios-de-publicidad-marketing-y-diseno-multimedia\/asesoramiento-inteligencia-artificial-lleida\/oficina-agentes-ia\/","url":"https:\/\/lagrafica.com\/es\/servicios-de-publicidad-marketing-y-diseno-multimedia\/asesoramiento-inteligencia-artificial-lleida\/oficina-agentes-ia\/","name":"Oficina de agentes de IA en 3D &#8211; laGr\u00e0fica","isPartOf":{"@id":"https:\/\/lagrafica.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/lagrafica.com\/es\/servicios-de-publicidad-marketing-y-diseno-multimedia\/asesoramiento-inteligencia-artificial-lleida\/oficina-agentes-ia\/#primaryimage"},"image":{"@id":"https:\/\/lagrafica.com\/es\/servicios-de-publicidad-marketing-y-diseno-multimedia\/asesoramiento-inteligencia-artificial-lleida\/oficina-agentes-ia\/#primaryimage"},"thumbnailUrl":"https:\/\/lagrafica.com\/wp-content\/uploads\/2026\/11\/lagrafica-oficina-agents-ia-3d-1.jpg","datePublished":"2026-11-06T10:08:58+00:00","dateModified":"2026-11-09T12:30:53+00:00","breadcrumb":{"@id":"https:\/\/lagrafica.com\/es\/servicios-de-publicidad-marketing-y-diseno-multimedia\/asesoramiento-inteligencia-artificial-lleida\/oficina-agentes-ia\/#breadcrumb"},"inLanguage":"es-ES","potentialAction":[{"@type":"ReadAction","target":["https:\/\/lagrafica.com\/es\/servicios-de-publicidad-marketing-y-diseno-multimedia\/asesoramiento-inteligencia-artificial-lleida\/oficina-agentes-ia\/"]}]},{"@type":"ImageObject","inLanguage":"es-ES","@id":"https:\/\/lagrafica.com\/es\/servicios-de-publicidad-marketing-y-diseno-multimedia\/asesoramiento-inteligencia-artificial-lleida\/oficina-agentes-ia\/#primaryimage","url":"https:\/\/lagrafica.com\/wp-content\/uploads\/2026\/11\/lagrafica-oficina-agents-ia-3d-1.jpg","contentUrl":"https:\/\/lagrafica.com\/wp-content\/uploads\/2026\/11\/lagrafica-oficina-agents-ia-3d-1.jpg","width":1394,"height":1000,"caption":"Oficina en 3D amb els agents d\u2019IA d\u2019una empresa de disseny i m\u00e0rqueting"},{"@type":"BreadcrumbList","@id":"https:\/\/lagrafica.com\/es\/servicios-de-publicidad-marketing-y-diseno-multimedia\/asesoramiento-inteligencia-artificial-lleida\/oficina-agentes-ia\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/lagrafica.com\/es\/"},{"@type":"ListItem","position":2,"name":"Servicios de publicidad, marketing y dise\u00f1o multimedia","item":"https:\/\/lagrafica.com\/es\/servicios-de-publicidad-marketing-y-diseno-multimedia\/"},{"@type":"ListItem","position":3,"name":"Asesoramiento en IA | Inteligencia artificial Lleida","item":"https:\/\/lagrafica.com\/es\/servicios-de-publicidad-marketing-y-diseno-multimedia\/asesoramiento-inteligencia-artificial-lleida\/"},{"@type":"ListItem","position":4,"name":"Oficina de agentes de IA en 3D"}]},{"@type":"WebSite","@id":"https:\/\/lagrafica.com\/#website","url":"https:\/\/lagrafica.com\/","name":"laGr\u00e0fica","description":"Ag\u00e8ncia de publicitat: identitat corporativa, disseny gr\u00e0fic, disseny web, m\u00e0rqueting i xarxes socials","publisher":{"@id":"https:\/\/lagrafica.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/lagrafica.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es-ES"},{"@type":"Organization","@id":"https:\/\/lagrafica.com\/#organization","name":"laGr\u00e0fica","url":"https:\/\/lagrafica.com\/","logo":{"@type":"ImageObject","inLanguage":"es-ES","@id":"https:\/\/lagrafica.com\/#\/schema\/logo\/image\/","url":"https:\/\/lagrafica.com\/wp-content\/uploads\/logo-lagrafica.png","contentUrl":"https:\/\/lagrafica.com\/wp-content\/uploads\/logo-lagrafica.png","width":500,"height":126,"caption":"laGr\u00e0fica"},"image":{"@id":"https:\/\/lagrafica.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/agencialagrafica\/","https:\/\/www.instagram.com\/agencialagrafica\/","https:\/\/www.linkedin.com\/company\/agencialagrafica"]}]}},"_links":{"self":[{"href":"https:\/\/lagrafica.com\/es\/wp-json\/wp\/v2\/pages\/5026","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lagrafica.com\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/lagrafica.com\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/lagrafica.com\/es\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/lagrafica.com\/es\/wp-json\/wp\/v2\/comments?post=5026"}],"version-history":[{"count":1,"href":"https:\/\/lagrafica.com\/es\/wp-json\/wp\/v2\/pages\/5026\/revisions"}],"predecessor-version":[{"id":5034,"href":"https:\/\/lagrafica.com\/es\/wp-json\/wp\/v2\/pages\/5026\/revisions\/5034"}],"up":[{"embeddable":true,"href":"https:\/\/lagrafica.com\/es\/wp-json\/wp\/v2\/pages\/4905"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/lagrafica.com\/es\/wp-json\/wp\/v2\/media\/4874"}],"wp:attachment":[{"href":"https:\/\/lagrafica.com\/es\/wp-json\/wp\/v2\/media?parent=5026"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}