{"id":30,"date":"2026-10-04T23:38:19","date_gmt":"2026-10-04T23:38:19","guid":{"rendered":"https:\/\/noeticresearch.org\/?page_id=30"},"modified":"2026-10-05T02:17:26","modified_gmt":"2026-10-05T02:17:26","slug":"explore","status":"publish","type":"page","link":"https:\/\/noeticresearch.org\/?page_id=30","title":{"rendered":"Explore agent activity"},"content":{"rendered":"\n<style>#noetic-explore{--ink:#193329;--muted:#58665e;--paper:#f6f6ee;--card:#fffef8;--line:#cdd6ca;--green:#32634c;--soft:#e6ece1;--ochre:#986e37;--blue:#4a7090;color:var(--ink);background:var(--paper);font:15px\/1.6 system-ui,-apple-system,sans-serif;min-height:100vh;padding:0 clamp(20px,5vw,84px);box-sizing:border-box}#noetic-explore *{box-sizing:border-box}#noetic-explore [hidden]{display:none!important}#noetic-explore a{color:inherit;text-decoration:none}#noetic-explore button,#noetic-explore input,#noetic-explore select{font:inherit}#noetic-explore button{cursor:pointer;border:1px solid var(--line);background:var(--card);color:var(--ink);border-radius:4px;padding:9px 14px;line-height:1.4}#noetic-explore button:hover{border-color:var(--green);background:var(--soft)}#noetic-explore button:disabled{opacity:.5;cursor:default}#noetic-explore :focus-visible{outline:3px solid #bd7d31;outline-offset:3px}#noetic-explore .skip{position:absolute;top:-100px;background:white;padding:12px;z-index:10}#noetic-explore .skip:focus{top:10px}#noetic-explore main{max-width:1500px;margin:auto}#noetic-explore .nx-header{max-width:1500px;min-height:105px;margin:auto;display:flex;align-items:center;justify-content:space-between;gap:20px;border-bottom:1px solid var(--line)}#noetic-explore .wordmark{font:600 26px Georgia,serif;white-space:nowrap}#noetic-explore .wordmark span{font-weight:400}#noetic-explore .wordmark i{color:#90a487;margin-left:10px}#noetic-explore .nx-header nav{display:flex;gap:26px;font-size:13px;flex-wrap:wrap}#noetic-explore nav [aria-current]{color:var(--green);border-bottom:1px solid var(--green)}#noetic-explore .nx-intro{display:flex;justify-content:space-between;align-items:center;gap:45px;padding:58px 0 42px}#noetic-explore .eyebrow{font:11px\/1.5 ui-monospace,monospace;letter-spacing:.15em;text-transform:uppercase;color:var(--green);margin:0 0 12px}#noetic-explore h1{font:400 clamp(40px,5vw,66px)\/1.05 Georgia,serif;letter-spacing:-.035em;margin:0 0 20px}#noetic-explore .deck{font:20px\/1.5 Georgia,serif;max-width:670px;margin:0;color:#506153}#noetic-explore .nx-context{min-width:245px;padding-left:30px;border-left:1px solid var(--line);font-size:12px}#noetic-explore .nx-context p{color:var(--muted)}#noetic-explore .nx-context button{border:0;padding:0;background:none;text-decoration:underline;text-underline-offset:4px}#noetic-explore .live-dot{display:inline-block;width:7px;height:7px;background:var(--green);border-radius:50%;margin-right:8px}#noetic-explore .nx-topline{display:flex;align-items:center;justify-content:space-between;gap:16px;border-bottom:1px solid var(--line);margin-bottom:26px}#noetic-explore .nx-topline nav{display:flex;gap:12px}#noetic-explore .nx-topline button{background:none;border:0;border-bottom:2px solid transparent;border-radius:0;padding:15px 6px;font-size:13px}#noetic-explore .nx-topline button.active{border-bottom-color:var(--green);font-weight:600}#noetic-explore #nx-snapshot{font:11px ui-monospace,monospace;color:var(--muted)}#noetic-explore .nx-tools{display:flex;gap:18px;align-items:end}#noetic-explore label{display:flex;flex-direction:column;gap:7px;font-size:12px;color:var(--muted)}#noetic-explore input,#noetic-explore select{color:var(--ink);background:var(--card);border:1px solid var(--line);border-radius:4px;padding:11px 13px;min-height:45px;max-width:100%}#noetic-explore .search{flex:1}#noetic-explore .nx-tools select{min-width:190px}#noetic-explore .result-total{min-width:145px;text-align:right}#noetic-explore .result-total strong{font:28px Georgia,serif;display:block}#noetic-explore .result-total span{font-size:11px;color:var(--muted)}#noetic-explore .scope{font-size:12px;color:var(--muted);margin:14px 0 24px}#noetic-explore .nx-cards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}#noetic-explore .entity-card{display:flex;flex-direction:column;background:var(--card);border:1px solid var(--line);border-radius:5px;padding:20px;min-height:190px;transition:border-color .15s,transform .15s}#noetic-explore .entity-card:hover{border-color:var(--green);transform:translateY(-2px)}#noetic-explore .card-top{display:flex;justify-content:space-between;align-items:center;gap:8px}#noetic-explore .tag{font:10px\/1.5 ui-monospace,monospace;text-transform:uppercase;letter-spacing:.05em;color:var(--green);background:var(--soft);padding:4px 7px;border-radius:3px}#noetic-explore .tag[data-kind=domain],#noetic-explore .tag[data-kind=url]{color:#48667c;background:#e9eff2}#noetic-explore .tag[data-kind=page]{color:#8d602a;background:#f1e9d9}#noetic-explore .entity-card h2{font:600 16px\/1.4 ui-monospace,monospace;margin:15px 0 12px;overflow-wrap:anywhere}#noetic-explore .card-numbers{display:flex;gap:28px;margin-top:auto}#noetic-explore .card-numbers b{font-size:20px;font-weight:500}#noetic-explore .card-numbers span{font-size:11px;color:var(--muted);display:block}#noetic-explore .card-dates{font-size:11px;color:var(--muted);border-top:1px solid #e6eadf;margin-top:15px;padding-top:12px}#noetic-explore .more{display:block;margin:26px auto}#noetic-explore .detail-heading{display:flex;justify-content:space-between;align-items:end;gap:20px;margin:30px 0 22px}#noetic-explore h2{font:400 29px\/1.25 Georgia,serif;margin:12px 0;overflow-wrap:anywhere}#noetic-explore h3{font-size:15px;margin:0}#noetic-explore .detail-name{font-size:clamp(24px,3vw,40px)}#noetic-explore .actions{display:flex;gap:8px;flex-wrap:wrap}#noetic-explore .actions .primary{background:var(--green);color:white;border-color:var(--green)}#noetic-explore .stats{display:grid;grid-template-columns:repeat(4,1fr);gap:20px;padding:22px 0;border-block:1px solid var(--line);margin-bottom:26px}#noetic-explore .stats strong{font:30px Georgia,serif;display:block}#noetic-explore .stats span{font-size:11px;color:var(--muted)}#noetic-explore .panel{background:var(--card);border:1px solid var(--line);border-radius:5px;padding:24px;margin:20px 0}#noetic-explore .panel-head{display:flex;justify-content:space-between;gap:20px;align-items:center;flex-wrap:wrap;margin-bottom:15px}#noetic-explore .panel-head p{font-size:12px;color:var(--muted);margin:5px 0}#noetic-explore .chart-controls{display:flex;gap:8px;align-items:center;flex-wrap:wrap}#noetic-explore .chart-controls input,#noetic-explore .chart-controls select{font-size:12px;padding:8px;min-height:38px}#noetic-explore .chart-controls label{font-size:11px}#noetic-explore .compare{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:15px 0}#noetic-explore .compare select{max-width:280px;font-size:12px;min-height:35px;padding:6px}#noetic-explore .chip{border-left:3px solid var(--lane-color,var(--green));background:var(--soft);padding:5px 9px;font-size:11px;border-radius:3px}#noetic-explore .chart-scroll{overflow-x:auto;padding:8px 0 0}#noetic-explore .chart{min-width:700px;padding:0 8px 0 46px}#noetic-explore .lane{height:185px;position:relative;margin-top:30px;border-bottom:1px solid var(--line)}#noetic-explore .lane-title{position:absolute;left:0;top:-26px;font:12px ui-monospace,monospace;color:var(--lane-color)}#noetic-explore .lane-title span{color:var(--muted);margin-left:10px;font-size:11px}#noetic-explore .gridline{position:absolute;left:0;right:0;border-top:1px solid #e0e5da;pointer-events:none}#noetic-explore .gridline span{position:absolute;right:calc(100% + 9px);top:-8px;color:var(--muted);font:10px ui-monospace,monospace}#noetic-explore .bar-slot{position:absolute;height:100%;bottom:0;border:0;background:transparent;padding:0;display:flex;align-items:flex-end;justify-content:center;border-radius:0}#noetic-explore .bar-slot:hover{background:#dfe9db}#noetic-explore .bar-slot[aria-pressed=true]{background:#e8dfcc}#noetic-explore .bar{display:block;width:55%;max-width:16px;background:var(--lane-color);min-height:0;pointer-events:none}#noetic-explore .axis{position:relative;height:30px;margin-top:6px}#noetic-explore .axis span{position:absolute;transform:translateX(-50%);font:10px ui-monospace,monospace;color:var(--muted)}#noetic-explore .chart-note{font-size:11px;color:var(--muted);margin-top:12px}#noetic-explore .relationship-layout{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(0,1fr);gap:20px}#noetic-explore .network{width:100%;height:auto;background:#f2f5ed;border-radius:4px}#noetic-explore .network text{font-family:system-ui,sans-serif;fill:var(--ink);font-size:11px}#noetic-explore .network .edge-label{font-size:9px;fill:var(--muted)}#noetic-explore .network a:hover circle{stroke-width:4}#noetic-explore .network line{stroke:#b2c2af;stroke-width:1.4}#noetic-explore .relation-list{max-height:425px;overflow:auto}#noetic-explore .relation{border-bottom:1px solid var(--line);padding:12px 0;font-size:12px;display:flex;justify-content:space-between;gap:12px}#noetic-explore .relation strong{display:block;overflow-wrap:anywhere}#noetic-explore .relation small{display:block;color:var(--muted)}#noetic-explore .relation button{font-size:10px;flex-shrink:0;padding:5px 8px;align-self:center}#noetic-explore .checkbox{display:flex;flex-direction:row;align-items:center;font-size:12px;gap:7px}#noetic-explore .checkbox input{min-height:0;margin:0}#noetic-explore .table-scroll{overflow-x:auto}#noetic-explore table{width:100%;border-collapse:collapse;font-size:12px}#noetic-explore th{text-align:left;color:var(--muted);font-size:10px;text-transform:uppercase;letter-spacing:.06em;padding:12px 10px;border-bottom:1px solid var(--line)}#noetic-explore td{padding:13px 10px;border-bottom:1px solid #e5e9df;vertical-align:top;overflow-wrap:anywhere}#noetic-explore td:first-child{min-width:145px}#noetic-explore td:last-child{max-width:520px}#noetic-explore td small{display:block;color:var(--muted);font:10px ui-monospace,monospace;margin-top:5px}#noetic-explore .empty{padding:45px 20px;text-align:center;color:var(--muted);border:1px dashed var(--line);border-radius:5px}#noetic-explore .nx-footer{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:15px;border-top:1px solid var(--line);margin-top:60px;padding:30px 0;color:var(--muted);font-size:11px}#noetic-explore .nx-footer p{font:19px Georgia,serif;color:var(--ink)}#noetic-explore .nx-footer button{font-size:11px;background:none;border:0;text-decoration:underline}#noetic-explore dialog{width:min(680px,90vw);max-height:85vh;overflow:auto;background:var(--card);color:var(--ink);border:1px solid var(--line);border-radius:8px;padding:34px;font-size:14px;line-height:1.7}#noetic-explore dialog::backdrop{background:#172a225e;backdrop-filter:blur(4px)}#noetic-explore .dialog-close{float:right;font-size:20px;padding:4px 11px}#noetic-explore #nx-status{color:var(--muted);padding:20px 0}#noetic-explore .board-note{font-size:12px;color:var(--muted)}\n@media(max-width:950px){#noetic-explore .nx-cards{grid-template-columns:repeat(2,minmax(0,1fr))}#noetic-explore .nx-context{display:none}#noetic-explore .relationship-layout{grid-template-columns:1fr}#noetic-explore .nx-header{align-items:flex-start;flex-direction:column;justify-content:center;padding:22px 0}#noetic-explore .nx-topline{align-items:start;flex-direction:column;gap:0}#noetic-explore #nx-snapshot{padding-bottom:15px}}\n@media(max-width:600px){#noetic-explore{padding:0 18px}#noetic-explore .nx-header nav{gap:15px;font-size:11px}#noetic-explore .nx-intro{padding:35px 0}#noetic-explore .nx-cards{grid-template-columns:1fr}#noetic-explore .nx-tools{flex-wrap:wrap}#noetic-explore .search{flex-basis:100%}#noetic-explore .result-total{margin-left:auto;min-width:90px}#noetic-explore .nx-tools select{min-width:150px}#noetic-explore .stats{grid-template-columns:repeat(2,1fr)}#noetic-explore .detail-heading{align-items:start;flex-direction:column}#noetic-explore .panel{padding:16px}#noetic-explore .nx-topline nav{gap:8px}#noetic-explore .nx-topline button{font-size:12px}#noetic-explore .deck{font-size:18px}}\n\n\/* Relationship canvas: cards keep labels clear of the evidence lines. *\/\n#noetic-explore .relationship-layout{display:block}\n#noetic-explore .network{background:#eff3e9;border:1px solid #dce4d5;padding:12px;max-height:none}\n#noetic-explore .network .graph-wire{stroke:#abbfab;fill:none;opacity:.8}\n#noetic-explore .network .focus-kind{fill:#b9cfad;font:9px ui-monospace,monospace;letter-spacing:1px}\n#noetic-explore .network .focus-name{fill:white;font:600 14px system-ui,sans-serif}\n#noetic-explore .network .focus-caption{fill:#b9cfad;font:8px ui-monospace,monospace;letter-spacing:1px}\n#noetic-explore .network .node-kind{font:8px ui-monospace,monospace;letter-spacing:.7px}\n#noetic-explore .network .node-name{font:600 12px system-ui,sans-serif;fill:#203c2c}\n#noetic-explore .network .node-relation{font:10px system-ui,sans-serif;fill:#667467}\n#noetic-explore .network .node-arrow{font-size:12px;fill:#67836b}\n#noetic-explore .data-credits{font-size:13px;color:var(--muted);margin:18px 0 0}#noetic-explore .data-credits a{color:var(--green);text-decoration:underline;text-underline-offset:3px}#noetic-explore dialog .data-credits{margin:0 0 20px}\n#noetic-explore .tag[data-role=target]{background:#f5e6db;color:#8e4f2e}#noetic-explore .tag[data-role=collaboration_site],#noetic-explore .tag[data-role=collaboration_page]{background:#e7ecda;color:#687332}#noetic-explore .relationship-context{margin-top:7px;max-width:380px;color:var(--ink)}#noetic-explore .role-note{border-left:3px solid #a6b698;padding:10px 16px;background:#edf1e7}#noetic-explore .role-note button{font-size:11px;margin-left:8px}#noetic-explore .role-legend{font-size:12px;color:var(--muted);border-top:1px solid var(--line);padding:15px 0;margin:18px 0}#noetic-explore .role-legend summary{font-weight:600;color:var(--ink)}#noetic-explore .role-legend dl{display:grid;grid-template-columns:minmax(140px,1fr) 3fr;gap:10px 20px;max-width:900px}#noetic-explore .role-legend dd{margin:0}#noetic-explore .role-legend dt{font-weight:600;color:var(--ink)}\n#noetic-explore .activity-types{margin:28px 0;padding:22px 0;border-block:1px solid var(--line)}#noetic-explore .type-filters{display:flex;flex-wrap:wrap;gap:8px}#noetic-explore .type-filters button{display:flex;align-items:center;gap:18px;text-align:left;font-size:12px;padding:12px 14px}#noetic-explore .type-filters strong{font:14px ui-monospace,monospace;margin-left:auto}#noetic-explore .type-filters button[aria-pressed=true]{background:var(--green);border-color:var(--green);color:white;box-shadow:0 2px 5px #19332915}#noetic-explore .type-method{font-size:12px;color:var(--muted);margin-top:14px;max-width:850px}#noetic-explore summary{cursor:pointer}#noetic-explore .type-tag{display:inline-block;background:#e7ece1;color:#44634c;font:11px\/1.5 system-ui,sans-serif;padding:4px 8px;border-radius:4px}#noetic-explore .type-tag[data-type=relay]{background:#e7edf6;color:#3f648c}#noetic-explore .type-tag[data-type=coordination]{background:#f0e9f5;color:#805b8a}#noetic-explore .type-tag[data-type=package]{background:#f6ecd9;color:#876128}#noetic-explore .type-tag[data-type=other],#noetic-explore .type-tag[data-type=unknown]{background:#eeeee8;color:#64675d}\n#noetic-explore .section-links{display:flex;flex-wrap:wrap;gap:8px;margin:20px 0}#noetic-explore .section-links button{border:0;background:var(--soft);font-size:12px}#noetic-explore [data-section]{scroll-margin-top:24px}#noetic-explore .message-feed{display:grid;gap:16px}#noetic-explore .message-card{border:1px solid var(--line);border-radius:7px;padding:20px;background:#fffefb;min-width:0}#noetic-explore .message-heading{display:flex;justify-content:space-between;align-items:start;gap:14px;font-size:12px}#noetic-explore .message-heading>div{display:flex;align-items:center;flex-wrap:wrap;gap:10px}#noetic-explore .message-author{font-weight:600;overflow-wrap:anywhere}#noetic-explore .message-heading time{white-space:nowrap;color:var(--muted);font:11px\/1.6 ui-monospace,monospace}#noetic-explore .message-title{color:var(--muted);font-size:12px;margin:14px 0;overflow-wrap:anywhere}#noetic-explore .message-scope,#noetic-explore .message-status{font-size:11px;color:var(--muted)}#noetic-explore .message-text{white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-word;font:13px\/1.7 ui-monospace,monospace;color:var(--ink);background:#f5f6ee;border-radius:5px;padding:16px;margin:10px 0;max-height:650px;overflow:auto}#noetic-explore .full-message summary{font-size:12px;color:var(--green);padding:8px 0}#noetic-explore .record-provenance{font-size:11px;border-top:1px solid #e5e9df;margin-top:14px;padding-top:12px;color:var(--muted)}#noetic-explore .record-provenance dl{display:grid;grid-template-columns:100px minmax(0,1fr);gap:6px}#noetic-explore .record-provenance dd{margin:0;overflow-wrap:anywhere}#noetic-explore .messages-panel .actions{align-items:end}#noetic-explore .messages-panel .actions button,#noetic-explore .messages-panel select{font-size:12px}\n#noetic-explore .activity-chart{padding:28px;background:linear-gradient(160deg,#fffef9,#fbfcf6);box-shadow:0 3px 12px #19332905}#noetic-explore .chart-month-title{font:32px\/1.2 Georgia,serif;margin:4px 0 8px}#noetic-explore .chart-summary{display:flex;align-items:center;gap:32px;border-block:1px solid #e1e6da;padding:20px 0;margin:20px 0}#noetic-explore .chart-summary>div{display:flex;align-items:baseline;gap:9px}#noetic-explore .chart-summary strong{font:30px\/1 Georgia,serif}#noetic-explore .chart-summary span{font-size:11px;color:var(--muted)}#noetic-explore .chart-summary>p{font-size:12px;color:var(--muted);margin:0 0 0 auto}#noetic-explore .chart-summary .selected-date{background:var(--soft);font-size:12px}#noetic-explore .chart{min-width:760px;padding:0 4px 0 54px}#noetic-explore .chart-scroll{padding-top:18px}#noetic-explore .chart-lane{margin:0 0 24px}#noetic-explore .lane-heading{display:flex;align-items:center;justify-content:space-between;gap:20px;font-size:12px;margin:0 0 36px}#noetic-explore .lane-heading>span:first-child{font-weight:600;overflow-wrap:anywhere}#noetic-explore .lane-heading>span:last-child{font:11px ui-monospace,monospace;color:var(--muted);white-space:nowrap}#noetic-explore .lane-heading i{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--lane-color);margin-right:9px}#noetic-explore .activity-chart .lane{height:225px;margin:0;border-bottom-color:#b6c3b1}#noetic-explore .activity-chart .bar-slot{border-radius:3px 3px 0 0}#noetic-explore .activity-chart .bar-slot.weekend{background:#9aaa8910}#noetic-explore .activity-chart .bar-slot:hover,#noetic-explore .activity-chart .bar-slot:focus-visible{background:#b4cab344;z-index:5}#noetic-explore .activity-chart .bar-slot[aria-pressed=true]{background:#dce8d3;box-shadow:inset 0 0 0 1px #7b9c75}#noetic-explore .activity-chart .bar{width:60%;max-width:30px;border-radius:3px 3px 0 0;background:linear-gradient(0deg,var(--lane-color),color-mix(in srgb,var(--lane-color) 80%,white))}#noetic-explore .bar-count{position:absolute;left:50%;transform:translateX(-50%);font:11px ui-monospace,monospace;color:var(--lane-color);pointer-events:none}#noetic-explore .zero-mark{position:absolute;bottom:3px;width:3px;height:3px;background:#b7c3b1;border-radius:50%;pointer-events:none}#noetic-explore .dimmed .bar,#noetic-explore .dimmed .bar-count{opacity:.35}#noetic-explore .day-tooltip{display:none;position:absolute;top:8px;left:50%;transform:translateX(-50%);width:245px;text-align:left;padding:16px;background:#fffef9;color:var(--ink);border:1px solid #bbcab4;border-radius:8px;box-shadow:0 8px 26px #19332925;z-index:10;pointer-events:none}#noetic-explore .day-tooltip.at-start{left:0;transform:none}#noetic-explore .day-tooltip.at-end{left:auto;right:0;transform:none}#noetic-explore .bar-slot:hover .day-tooltip,#noetic-explore .bar-slot:focus-visible .day-tooltip{display:block}#noetic-explore .day-tooltip>b{display:block;font-size:12px;color:var(--muted)}#noetic-explore .day-tooltip>strong{display:block;font:26px Georgia,serif;margin:9px 0 14px}#noetic-explore .day-tooltip>span{display:flex;justify-content:space-between;gap:12px;font-size:11px;line-height:1.5;margin:5px 0}#noetic-explore .day-tooltip em{font:12px ui-monospace,monospace}#noetic-explore .day-tooltip small{display:block;font-size:10px;border-top:1px solid var(--line);padding-top:9px;margin-top:12px;color:var(--muted)}#noetic-explore .calendar-axis{margin-top:-18px;height:35px}#noetic-explore .calendar-axis span{font-size:10px;color:#7e8d79}#noetic-explore .calendar-axis .week-label{font-weight:600;color:var(--ink)}#noetic-explore .chart-empty{position:absolute;inset:35% 0 auto;text-align:center;color:var(--muted);font-size:13px;pointer-events:none}\n@media(max-width:800px){#noetic-explore .chart-summary{gap:18px;flex-wrap:wrap}#noetic-explore .chart-summary>p{margin:0;flex-basis:100%}#noetic-explore .chart-summary>div{flex-direction:column;gap:6px}#noetic-explore .message-heading{flex-direction:column}#noetic-explore .activity-chart{padding:18px}#noetic-explore .type-filters button{flex:1 1 180px}#noetic-explore .message-card{padding:14px}#noetic-explore .message-text{font-size:12px;padding:12px}}\n#noetic-explore .graph-node:hover rect:first-child,#noetic-explore .graph-node:focus-visible rect:first-child{stroke:#32634c;stroke-width:2;fill:#f3f7ee}\n#noetic-explore .relation-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 24px;max-height:330px}\n@media(max-width:600px){#noetic-explore .relationship-layout{overflow-x:auto}#noetic-explore .network{min-width:800px}#noetic-explore .relation-list{display:block;min-width:0}#noetic-explore .chart-controls{gap:5px}#noetic-explore .lane-title{font-size:10px}}\n\n@media(max-width:600px){#noetic-explore .activity-chart .chart{min-width:0;padding-left:30px}#noetic-explore .activity-chart .lane-heading{align-items:start;flex-direction:column;gap:5px}#noetic-explore .activity-chart .bar-count{font-size:8px}#noetic-explore .activity-chart .calendar-axis span:not(.week-label):not(:last-child){display:none}#noetic-explore .activity-chart .day-tooltip{position:fixed;top:18px;left:50%;right:auto;transform:translateX(-50%)}#noetic-explore .role-legend dl{grid-template-columns:1fr;gap:5px}#noetic-explore .role-legend dd{margin-bottom:10px}}\n\n\/* Evidence discovery: one filter scope, compact results, a comfortable reader. *\/\n#noetic-explore .nx-intro{padding:38px 0 30px}\n#noetic-explore .nx-intro h1{font-size:clamp(38px,4vw,56px)}\n#noetic-explore .search-hub{padding:22px 24px;background:#edf1e7;border:1px solid #c8d4c1;border-radius:10px;margin:20px 0 24px}\n#noetic-explore .global-search{font-size:13px;font-weight:650;color:var(--ink)}\n#noetic-explore .global-search input{font-size:18px;padding:16px 18px;background:#fffef9;border-color:#aabb9f;border-radius:7px}\n#noetic-explore .search-help{font-size:12px;color:var(--muted);margin:8px 0 18px}\n#noetic-explore .quick-filters{display:flex;gap:9px;flex-wrap:wrap}\n#noetic-explore .quick-filters button{font-size:13px;display:flex;gap:18px;align-items:center;border-radius:30px;padding:11px 15px}\n#noetic-explore .quick-filters span{font:11px ui-monospace,monospace;background:#1933290c;padding:3px 7px;border-radius:20px}\n#noetic-explore .quick-filters button[aria-pressed=true]{background:#244e3b;border-color:#244e3b;color:white}\n#noetic-explore .quick-filters .signal-human[aria-pressed=true]{background:#4c6584;border-color:#4c6584}\n#noetic-explore .quick-filters .signal-collaboration[aria-pressed=true]{background:#74618a;border-color:#74618a}\n#noetic-explore .quick-filters .signal-unusual[aria-pressed=true]{background:#975538;border-color:#975538}\n#noetic-explore .quick-filters button[aria-pressed=true] span{background:#ffffff22}\n#noetic-explore .filter-method{font-size:12px;color:var(--muted);margin:12px 0;max-width:900px}\n#noetic-explore .refine-filters{font-size:13px;margin-top:18px;padding-top:15px;border-top:1px solid #cfdbc7}\n#noetic-explore .refine-filters summary{font-weight:600}\n#noetic-explore .filter-fields{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:12px;padding-top:16px}\n#noetic-explore .filter-fields select,#noetic-explore .filter-fields input{width:100%;font-size:13px;min-width:0;padding:10px}\n#noetic-explore .refine-filters p{font-size:12px;color:var(--muted)}\n#noetic-explore .active-filters{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:16px;font-size:12px;color:var(--muted)}\n#noetic-explore .active-filters button{font-size:12px;padding:6px 10px;border-radius:5px;background:#fffef9}\n#noetic-explore .active-filters button span{margin-left:8px}\n#noetic-explore .matching-entities{margin:0 0 22px;font-size:14px}\n#noetic-explore .matching-entities>summary{font-weight:650;padding:12px 0}\n#noetic-explore .matching-entities>summary span{font-size:12px;font-weight:400;color:var(--muted);margin-left:12px}\n#noetic-explore .entity-results{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;padding:12px 0}\n#noetic-explore .entity-result{border:1px solid var(--line);background:var(--card);border-radius:6px;padding:14px;min-width:0}\n#noetic-explore .entity-result strong{display:block;margin-top:7px;overflow-wrap:anywhere;font-size:14px}\n#noetic-explore .entity-result details{font-size:12px;margin-top:10px}\n#noetic-explore .entity-result details a{display:block;overflow-wrap:anywhere;padding:5px 0;color:var(--green)}\n#noetic-explore .evidence-toolbar{display:flex;justify-content:space-between;align-items:center;gap:20px;margin:22px 0 14px;flex-wrap:wrap}\n#noetic-explore .evidence-toolbar h3{font:25px Georgia,serif}\n#noetic-explore .evidence-toolbar p{font-size:12px;color:var(--muted);margin:7px 0 0}\n#noetic-explore .evidence-toolbar .actions{align-items:center;font-size:12px}\n#noetic-explore .evidence-toolbar label{font-size:12px}\n#noetic-explore .evidence-toolbar select{padding:8px 10px;min-height:36px;font-size:12px}\n#noetic-explore .evidence-toolbar button{font-size:12px}\n#noetic-explore .evidence-workspace{display:grid;grid-template-columns:minmax(280px,.8fr) minmax(0,1.7fr);height:min(860px,85vh);min-height:570px;border:1px solid #bdcbb6;background:var(--card);border-radius:10px;overflow:hidden;box-shadow:0 4px 24px #19332908}\n#noetic-explore .result-list{overflow:auto;overscroll-behavior:contain;background:#f0f2e9;border-right:1px solid #cbd7c4;scrollbar-width:thin}\n#noetic-explore .result-row{display:block;text-align:left;width:100%;border:0;border-bottom:1px solid #d4ddce;border-radius:0;background:transparent;padding:21px 19px;position:relative}\n#noetic-explore .result-row:hover{background:#e7ecdf}\n#noetic-explore .result-row[aria-pressed=true]{background:#fffef9;box-shadow:inset 4px 0 #32634c}\n#noetic-explore .result-top{display:flex;justify-content:space-between;gap:12px;font-size:10px;color:var(--muted);margin-bottom:10px}\n#noetic-explore .result-top time{white-space:nowrap}\n#noetic-explore .result-row>strong{display:block;overflow-wrap:anywhere;font-size:15px;line-height:1.45;margin-bottom:6px}\n#noetic-explore .result-reason{display:block;color:#706033;font-size:11px;line-height:1.5;margin:8px 0}\n#noetic-explore .result-snippet{display:-webkit-box;-webkit-line-clamp:4;-webkit-box-orient:vertical;overflow:hidden;font-size:13px;line-height:1.65;overflow-wrap:anywhere;color:#435348}\n#noetic-explore .result-count{display:block;color:var(--muted);font-size:10px;margin-top:12px}\n#noetic-explore mark{background:#f1dfa3;color:#332d18;border-radius:2px;padding:0 1px}\n#noetic-explore .reading-pane{min-width:0;overflow:auto;overscroll-behavior:contain;padding:30px clamp(20px,3vw,48px);scrollbar-width:thin;background:#fffef9}\n#noetic-explore .reader-top{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap}\n#noetic-explore .reader-top .eyebrow{margin:0;font-size:10px}\n#noetic-explore .reader-top button{font-size:11px;padding:6px 9px}\n#noetic-explore .reading-pane h2{font:400 clamp(24px,2.3vw,34px)\/1.25 Georgia,serif;margin:24px 0 12px}\n#noetic-explore .reader-date{font-size:12px;color:var(--muted)}\n#noetic-explore .reader-context{font-size:13px;line-height:1.65;color:var(--muted);max-width:75ch}\n#noetic-explore .reader-location{font-size:13px;overflow-wrap:anywhere;padding-bottom:18px;border-bottom:1px solid var(--line);color:var(--green)}\n#noetic-explore .match-explanation{background:#f1f3e9;border-left:3px solid #9aac85;padding:16px 18px;font-size:12px;margin:22px 0}\n#noetic-explore .match-explanation>strong{font-size:12px;text-transform:uppercase;letter-spacing:.06em}\n#noetic-explore .match-explanation p{margin:7px 0;color:var(--muted)}\n#noetic-explore blockquote{margin:12px 0;padding:0;border:0;font-size:14px;line-height:1.7;overflow-wrap:anywhere;color:#3c5140}\n#noetic-explore .reader-tabs-note{font-size:11px;color:var(--muted);margin:25px 0 12px}\n#noetic-explore .message-body{max-width:78ch;font-size:16px;line-height:1.85;overflow-wrap:anywhere}\n#noetic-explore .message-body .source-prose{white-space:pre-wrap;margin:0 0 20px;line-height:1.85;font-size:16px}\n#noetic-explore .source-code{font:13px\/1.75 ui-monospace,monospace;white-space:pre-wrap;overflow-wrap:anywhere;background:#eef1e8;padding:18px;border:1px solid #d9e1d3;border-radius:6px;max-height:540px;overflow:auto;margin:16px 0}\n#noetic-explore .exact-text,#noetic-explore .message-urls,#noetic-explore .revision-list,#noetic-explore .record-provenance{padding:15px 0;border-top:1px solid var(--line);font-size:12px;margin-top:12px}\n#noetic-explore .exact-text summary,#noetic-explore .revision-list summary{font-weight:600;color:var(--green)}\n#noetic-explore .message-text{font-size:13px;line-height:1.75;max-height:550px}\n#noetic-explore .message-urls code,#noetic-explore .url-parameters code{white-space:pre-wrap;overflow-wrap:anywhere;font:12px\/1.7 ui-monospace,monospace}\n#noetic-explore .message-urls>div{margin:14px 0}\n#noetic-explore .url-parameters{font-size:12px;margin:10px 0;color:var(--muted);max-width:100%;overflow-wrap:anywhere}\n#noetic-explore .revision-list>div{border-bottom:1px solid #e4e9dc;padding:10px 0}\n#noetic-explore .revision-list button{font-size:12px;text-align:left;margin-right:5px;padding:7px}\n#noetic-explore .revision-list small{display:block;font:11px ui-monospace,monospace;margin-top:6px;overflow-wrap:anywhere}\n#noetic-explore .text-diff{display:grid;grid-template-columns:1fr 1fr;gap:12px;font-size:12px}\n#noetic-explore .text-diff pre{white-space:pre-wrap;overflow-wrap:anywhere;max-height:300px;overflow:auto;background:#f1eee4;padding:12px}\n#noetic-explore .reader-entities{border-top:1px solid var(--line);padding:22px 0;margin-top:18px}\n#noetic-explore .reader-entities>p{font-size:12px;color:var(--muted)}\n#noetic-explore .reader-entities a{display:flex;align-items:start;gap:10px;padding:10px 0;border-bottom:1px solid #e4e9dc;font-size:13px;overflow-wrap:anywhere}\n#noetic-explore .reader-entities .tag{flex-shrink:0;max-width:145px;font-size:9px}\n#noetic-explore .reader-entities a span:last-child{min-width:0}\n#noetic-explore .mobile-reader-back{display:none}\n#noetic-explore .entity-tabs{display:flex;gap:12px;border-bottom:1px solid var(--line);margin:25px 0}\n#noetic-explore .entity-tabs button{padding:14px 18px;border:0;border-radius:0;background:transparent;border-bottom:3px solid transparent;font-size:14px}\n#noetic-explore .entity-tabs button[aria-pressed=true]{border-bottom-color:var(--green);color:var(--green);font-weight:650}\n#noetic-explore .entity-date-scope{display:flex;align-items:end;gap:12px;flex-wrap:wrap;margin:18px 0;font-size:12px;color:var(--muted)}\n#noetic-explore .entity-date-scope input{padding:8px 12px;min-height:38px}\n#noetic-explore .entity-date-scope button{font-size:12px}\n#noetic-explore .mode-switch [aria-pressed=true]{background:#e0e8d8;border-color:#9ab48a}\n#noetic-explore .stats{padding:18px 0;margin:20px 0;gap:16px}\n#noetic-explore .stats strong{font-size:28px}\n#noetic-explore .connection-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;margin:20px 0}\n#noetic-explore .connection-card{border:1px solid var(--line);border-radius:7px;padding:20px;background:#fffef9;min-width:0}\n#noetic-explore .connection-card h3{margin:12px 0;overflow-wrap:anywhere;font-size:16px}\n#noetic-explore .connection-card p{font-size:12px;color:var(--muted)}\n#noetic-explore .connection-card blockquote{font-size:13px;background:#f0f3e9;padding:14px;border-radius:4px}\n#noetic-explore .connection-card button{font-size:12px}\n#noetic-explore .connection-card details{font-size:12px;margin-top:14px}\n#noetic-explore .connection-card details a{display:block;padding:6px 0;overflow-wrap:anywhere;color:var(--green)}\n#noetic-explore .network .graph-node{cursor:pointer}\n@media(max-width:1100px){#noetic-explore .filter-fields{grid-template-columns:repeat(3,minmax(0,1fr))}#noetic-explore .evidence-workspace{grid-template-columns:minmax(260px,.9fr) minmax(0,1.4fr)}#noetic-explore .reading-pane{padding:24px}}\n@media(max-width:800px){#noetic-explore .evidence-workspace{display:block;height:auto;min-height:0}#noetic-explore .reading-pane{display:none;padding:22px 18px;max-height:none;overflow:visible}#noetic-explore.mobile-reading .reading-pane{display:block}#noetic-explore.mobile-reading .result-list{display:none}#noetic-explore .mobile-reader-back{display:inline-block}#noetic-explore .result-list{max-height:75vh;border-right:0}#noetic-explore .entity-results{grid-template-columns:repeat(2,minmax(0,1fr))}#noetic-explore .filter-fields{grid-template-columns:repeat(2,minmax(0,1fr))}#noetic-explore .search-hub{padding:18px}#noetic-explore .quick-filters button{font-size:12px}#noetic-explore .connection-grid{grid-template-columns:1fr}#noetic-explore .message-body .source-prose{font-size:16px}#noetic-explore .text-diff{grid-template-columns:1fr}}\n@media(max-width:480px){#noetic-explore .global-search input{font-size:16px}#noetic-explore .filter-fields{grid-template-columns:1fr}#noetic-explore .entity-results{grid-template-columns:1fr}#noetic-explore .entity-tabs{gap:0}#noetic-explore .entity-tabs button{padding:12px;font-size:13px}#noetic-explore .evidence-toolbar .actions{gap:10px}#noetic-explore .matching-entities>summary span{display:block;margin:5px 0}#noetic-explore .quick-filters{gap:7px}#noetic-explore .quick-filters button{padding:9px 11px;gap:8px}#noetic-explore .reader-entities a{flex-direction:column}}\n<\/style>\n<div id=\"noetic-explore\">\n  <a class=\"skip\" href=\"#nx-main\">Skip to explorer<\/a>\n  <header class=\"nx-header\"><a class=\"wordmark\" href=\"\/\">Noetic <span>Research<\/span><i>\/<\/i><\/a><nav aria-label=\"Main navigation\"><a href=\"\/?page_id=11\">Technical Research<\/a><a href=\"\/?page_id=12\">Policy Briefs<\/a><a href=\"\/?page_id=30\" aria-current=\"page\">Explore<\/a><a href=\"\/#about\">About us<\/a><\/nav><\/header>\n  <main id=\"nx-main\">\n    <section class=\"nx-intro\"><div><p class=\"eyebrow\">Research tools \/ Prometheus<\/p><h1>Follow the traces.<\/h1><p class=\"deck\">Find a message. Read the evidence. Follow its connections.<\/p><p class=\"data-credits\">Data credits: <a href=\"https:\/\/transluce.org\/\">Transluce<\/a> and <a href=\"https:\/\/collusion.wiki\/\">Collusion Wiki<\/a>.<\/p><\/div><div class=\"nx-context\"><span class=\"live-dot\"><\/span><strong>Public corpus explorer<\/strong><p>One source record at a time.<br>Labels are not verified identities.<\/p><button id=\"nx-method\">About this data \u2197<\/button><\/div><\/section>\n    <div class=\"nx-topline\"><nav aria-label=\"Explorer views\"><button data-view=\"directory\" class=\"active\">Search &#038; explore<\/button><button data-view=\"timeline\">Source timeline<\/button><button data-view=\"board\">My board <span id=\"nx-board-count\">0<\/span><\/button><\/nav><span id=\"nx-snapshot\">Loading public snapshot\u2026<\/span><\/div>\n    <p id=\"nx-status\" role=\"status\">Loading the public index. This may take a few seconds.<\/p>\n    <div id=\"nx-content\" hidden>\n      <section class=\"search-hub\" aria-label=\"Search and filter evidence\">\n        <label class=\"global-search\">Search the evidence<input id=\"nx-search\" type=\"search\" maxlength=\"500\" placeholder='Search a name, site or phrase \u2014 try \"handoff\"' autocomplete=\"off\" aria-describedby=\"nx-search-help\"><\/label>\n        <p id=\"nx-search-help\" class=\"search-help\" role=\"status\">Loading saved text\u2026<\/p>\n        <div id=\"nx-quick\" class=\"quick-filters\" aria-label=\"Quick evidence filters\"><\/div>\n        <details class=\"filter-method\"><summary>What these quick filters mean<\/summary><p>Quick filters use matching wording in saved text. Counts show distinct normalized texts before the quick filter, with your other filters applied. \u201cMentions humans\u201d matches explicit human wording or human oversight phrases; generic \u201cuser\u201d labels do not qualify. \u201cMentions collaborating\u201d matches collaboration, coordination, handoff or shared-work wording.<\/p><p>\u201cUnusual findings\u201d flags bypass\/evasion, concealment, injection or credential theft, impersonation, or persistent-service wording. It is a reading queue, not verified novelty, harmfulness or agent behavior. A quotation, denial, hypothetical, or security discussion can match. The reader shows each trigger. Best matches ranks literal query matches and distinct cue families; repeated records do not increase a group\u2019s score. No Sonnet analysis runs.<\/p><\/details>\n        <details class=\"refine-filters\"><summary>Refine by type, source or date<\/summary><div class=\"filter-fields\"><label>Entity type<select id=\"nx-kind\" data-global-filter=\"role\"><\/select><\/label><label>Activity type<select id=\"nx-category\" data-global-filter=\"category\"><\/select><\/label><label>Source<select id=\"nx-source\" data-global-filter=\"source\"><\/select><\/label><label>From \u00b7 UTC<input id=\"nx-from\" type=\"date\" data-global-filter=\"from\"><\/label><label>Through \u00b7 UTC<input id=\"nx-through\" type=\"date\" data-global-filter=\"through\"><\/label><\/div><p>Date bounds exclude undated records. Clear the dates to include them.<\/p><\/details>\n        <div id=\"nx-active-filters\" class=\"active-filters\" aria-label=\"Active filters\"><\/div>\n      <\/section>\n      <section id=\"nx-directory\"><\/section>\n      <section id=\"nx-detail\" hidden><\/section>\n      <section id=\"nx-corpus\" hidden><\/section>\n      <section id=\"nx-board\" hidden><\/section>\n    <\/div>\n    <footer class=\"nx-footer\"><p>Evidence before inference.<\/p><span>Public corpus snapshot \u00b7 No live searches or model calls<\/span><button id=\"nx-method-footer\">Data &#038; methodology<\/button><\/footer>\n  <\/main>\n  <dialog id=\"nx-dialog\"><button id=\"nx-close\" class=\"dialog-close\" aria-label=\"Close data information\">\u00d7<\/button><p class=\"eyebrow\">Data &#038; methodology<\/p><h2>What these traces can tell us.<\/h2><p class=\"data-credits\"><strong>Data credits:<\/strong> <a href=\"https:\/\/transluce.org\/\">Transluce<\/a> and <a href=\"https:\/\/collusion.wiki\/\">Collusion Wiki<\/a>. Explorer and visualizations by Noetic Research.<\/p><p>This explorer uses an exported index of original wiki revisions and saved cross-site records. It excludes private uploads, investigation findings, model assessments, credentials, and unredacted source bodies.<\/p><p><strong>Activity<\/strong> means a source record carries the exact author label. A label is not an authenticated agent, person, operator, or model provider. <strong>References<\/strong> mean identifiers occur in the same source record; they do not establish communication, ownership, authorization, or harm.<\/p><p>Dates use the saved source timestamp in UTC. A complete calendar month is shown. Zero means no record for that day in this snapshot; it does not establish absence on the internet. Undated records remain counted separately.<\/p><p>Repeated revisions are retained. \u201cDistinct texts\u201d groups the normalized changed-text fingerprints used by Prometheus. Repeated text does not prove additional independent activity. Saved messages are available on entity pages. Wiki messages show only added\/replaced text attributed to that revision, not the cumulative page. Complete text is used where a verified saved copy is available; other records are marked as excerpts. Credential patterns and email\/IP strings are redacted. Activity types use local text rules, not verified actions or model assessments.<\/p><p>Board selections stay in this browser. Viewing this feature makes no requests to the domains in the data and runs no provider search, scan, or Sonnet analysis.<\/p><div id=\"nx-provenance\"><\/div><\/dialog>\n<\/div>\n\n<script data-noetic-bootstrap=\"v1\">(function(){const code=\"LyogUHVyZSBkYXRhIG1vZGVsOyBzaGFyZWQgYnkgdGhlIGJyb3dzZXIgYW5kIG5vZGU6dGVzdC4gTm8gbmV0d29yayBvciBzdG9yYWdlLiAqLwooZnVuY3Rpb24ocm9vdCl7J3VzZSBzdHJpY3QnOwpjb25zdCBsYWJlbHM9e2FnZW50OidBZ2VudCBsYWJlbCcscGFnZTonV2lraSBwYWdlJyxkb21haW46J0RvbWFpbicsdXJsOidVUkwnLGhhc2g6J0hhc2gnLHRhc2tfaWQ6J1Rhc2sgSUQnLHN0cmluZzonVGV4dCBpZGVudGlmaWVyJyxwaHJhc2U6J1BocmFzZScscmVwb3NpdG9yeTonUmVwb3NpdG9yeScscGFja2FnZTonUGFja2FnZSd9Owpjb25zdCBhY3Rpdml0eVR5cGVzPXtyZWxheTonUmVsYXkgcmVmZXJlbmNlcycsY29vcmRpbmF0aW9uOidDb29yZGluYXRpb24gbGFuZ3VhZ2UnLHBhY2thZ2U6J0NvZGUgLyBwYWNrYWdlIHJlZmVyZW5jZXMnLGRhdGE6J0RhdGEgbG9va3VwIGxhbmd1YWdlJyxvdGhlcjonT3RoZXIgLyB1bmNsYXNzaWZpZWQnLHVua25vd246J1R5cGUgdW5hdmFpbGFibGUnfTsKY29uc3Qgcm9sZUxhYmVscz17YWdlbnQ6J0FnZW50IGxhYmVsJyxjb2xsYWJvcmF0aW9uX3NpdGU6J0NvbGxhYm9yYXRpb24gc2l0ZScsY29sbGFib3JhdGlvbl9wYWdlOidDb2xsYWJvcmF0aW9uIHBhZ2UnLHRhcmdldDonVGFyZ2V0IHJlZmVyZW5jZScscmVmZXJlbmNlZF9zaXRlOidSZWZlcmVuY2VkIHNpdGUnLG90aGVyOidPdGhlciBuYW1lZCBlbnRpdHknfTsKLy8gVGhlc2UgcnVsZXMgZGVzY3JpYmUgd29yZGluZyBpbiBzYXZlZCB0ZXh0LCBuZXZlciB2ZXJpZmllZCBwZW9wbGUsIGNvbGxhYm9yYXRpb24gb3IgaGFybS4KY29uc3Qgc2lnbmFsTGFiZWxzPXtodW1hbjonTWVudGlvbnMgaHVtYW5zJyxjb2xsYWJvcmF0aW9uOidNZW50aW9ucyBjb2xsYWJvcmF0aW5nJyx1bnVzdWFsOidVbnVzdWFsIGZpbmRpbmdzJ307CmNvbnN0IHNpZ25hbFJ1bGVzPVsKIFsnaHVtYW4nLCdIdW1hbiB3b3JkaW5nJywvXGJodW1hbnM\/XGIvZ2ksMV0sCiBbJ2h1bWFuJywnSHVtYW4gb3ZlcnNpZ2h0IHdvcmRpbmcnLC9cYig\/Omh1bWFuIG9wZXJhdG9ycz98aHVtYW4gcmV2aWV3ZXJzP3xodW1hbiBpbnRlcnZlbnRpb258bWFudWFsIHJldmlld3xwZXJzb24gaW4gdGhlIGxvb3B8cGVvcGxlIHJldmlld2luZylcYi9naSwyXSwKIFsnY29sbGFib3JhdGlvbicsJ0NvbGxhYm9yYXRpb24gd29yZGluZycsL1xiKD86Y29sbGFib3JhdCg\/OmV8ZXN8ZWR8aW5nfGlvbnxpb25zfGl2ZXxvcnM\/KXxjb29yZGluYXQoPzplfGVzfGVkfGluZ3xpb24pfGhhbmRvZmZzP3xoYW5kWyAtXW9mZnx0ZWFtbWF0ZXM\/KVxiL2dpLDFdLAogWydjb2xsYWJvcmF0aW9uJywnU2hhcmVkIHdvcmsgd29yZGluZycsL1xiKD86b3RoZXIgYWdlbnRzP3xmZWxsb3cgYWdlbnRzP3xwZWVyIGFnZW50cz98c2hhcmVkICg\/OnRhc2t8d29ya3NwYWNlfG1lbW9yeSl8ZGl2aWRlIHRoZSB3b3JrfHNwbGl0IHRoZSB0YXNrfGFja25vd2xlZGdlIHJlY2VpcHR8YWNrbm93bGVkZ2VkfHdvcmtpbmcgdG9nZXRoZXIpXGIvZ2ksMl0sCiBbJ3VudXN1YWwnLCdCeXBhc3Mgb3IgZXZhc2lvbiB3b3JkaW5nJywvXGIoPzpieXBhc3MoPzppbmd8ZWQpP3xldmFkKD86ZXxlc3xpbmd8ZWQpfGNpcmN1bXZlbnQoPzppbmd8ZWQpPylcYlteLlxuXXswLDYwfVxiKD86YmxvY2t8ZmlsdGVyfHJlc3RyaWN0aW9ufGZpcmV3YWxsfGNhcHRjaGF8ZGV0ZWN0aW9ufGFudGktYm90fGF1dGhlbnRpY2F0aW9ufGFjY2VzcyBjb250cm9sKXM\/XGIvZ2ksM10sCiBbJ3VudXN1YWwnLCdDb25jZWFsbWVudCB3b3JkaW5nJywvXGIoPzpkZWxldCg\/OmV8ZWR8aW5nKXxlcmFzKD86ZXxlZHxpbmcpfGNsZWFyKD86ZWR8aW5nKT98aGlkKD86ZXxpbmcpKVxiW14uXG5dezAsNDV9XGIoPzpsb2dzP3x0cmFjZXM\/fHRyYWNrcz98aGlzdG9yeSlcYi9naSwzXSwKIFsndW51c3VhbCcsJ0luamVjdGlvbiBvciBjcmVkZW50aWFsIHdvcmRpbmcnLC9cYig\/OnByb21wdCBpbmplY3Rpb258U1FMIGluamVjdGlvbnxjcm9zcy1zaXRlIHNjcmlwdGluZ3xleGZpbHRyYXQoPzplfGVkfGluZ3xpb24pfGNyZWRlbnRpYWwgdGhlZnR8c3RlYWwoPzppbmcpPyBjcmVkZW50aWFscylcYi9naSwzXSwKIFsndW51c3VhbCcsJ0ltcGVyc29uYXRpb24gd29yZGluZycsL1xiKD86aW1wZXJzb25hdCg\/OmV8ZXN8ZWR8aW5nfGlvbil8c29jaWFsIGVuZ2luZWVyaW5nfGZha2UgYWNjb3VudHM\/fHByZXRlbmQgdG8gYmUgKD86YSApP2h1bWFuKVxiL2dpLDJdLAogWyd1bnVzdWFsJywnUGVyc2lzdGVudCBzZXJ2aWNlIHdvcmRpbmcnLC9cYig\/OmxvbmdbLSBdcnVubmluZyAoPzpzZXJ2aWNlfHByb2Nlc3MpfHJldmVyc2Ugc2hlbGx8cGVyc2lzdGVuY2UgbWVjaGFuaXNtfHBlcnNpc3RlbnQgKD86Y2xvdWQgKT9zZXJ2aWNlKVxiL2dpLDJdCl07CmZ1bmN0aW9uIHF1ZXJ5VGVybXMocSl7cmV0dXJuIFsuLi5TdHJpbmcocXx8JycpLm1hdGNoQWxsKC8iKFteIl0rKSJ8KFxTKykvZyldLm1hcChtPT4obVsxXXx8bVsyXSkudG9Mb2NhbGVMb3dlckNhc2UoKSkuZmlsdGVyKEJvb2xlYW4pLnNsaWNlKDAsMjQpO30KZnVuY3Rpb24gc2lnbmFsc0Zvcih0ZXh0KXtjb25zdCBoaXRzPVtdO2Zvcihjb25zdCBba2luZCxsYWJlbCxwYXR0ZXJuLHdlaWdodF0gb2Ygc2lnbmFsUnVsZXMpe3BhdHRlcm4ubGFzdEluZGV4PTA7bGV0IG0sY291bnQ9MDt3aGlsZSgobT1wYXR0ZXJuLmV4ZWModGV4dCkpJiZjb3VudCsrPDEyKWhpdHMucHVzaCh7a2luZCxsYWJlbCxxdW90ZTptWzBdLHN0YXJ0Om0uaW5kZXgsZW5kOm0uaW5kZXgrbVswXS5sZW5ndGgsd2VpZ2h0fSk7fXJldHVybiBoaXRzLnNvcnQoKGEsYik9PmEuc3RhcnQtYi5zdGFydCk7fQpmdW5jdGlvbiBob3N0T2Yobm9kZSl7dHJ5e2lmKG5vZGUua2luZD09PSdkb21haW4nKXJldHVybiBub2RlLnZhbHVlLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXC4kLywnJyk7aWYobm9kZS5raW5kPT09J3VybCcpcmV0dXJuIG5ldyBVUkwobm9kZS52YWx1ZSkuaG9zdG5hbWUudG9Mb3dlckNhc2UoKTt9Y2F0Y2h7fXJldHVybiAnJzt9CmZ1bmN0aW9uIG5vZGVSb2xlKGtpbmQsc3RvcmVkKXtyZXR1cm4gT2JqZWN0Lmhhc093bihyb2xlTGFiZWxzLHN0b3JlZCk\/c3RvcmVkOmtpbmQ9PT0nYWdlbnQnPydhZ2VudCc6a2luZD09PSdwYWdlJz8nY29sbGFib3JhdGlvbl9wYWdlJzpbJ2RvbWFpbicsJ3VybCddLmluY2x1ZGVzKGtpbmQpPydyZWZlcmVuY2VkX3NpdGUnOidvdGhlcic7fQpmdW5jdGlvbiBtb250aERheXMobW9udGgpe2lmKCEvXlsxLTldXGR7M30tKDBbMS05XXwxWzAtMl0pJC8udGVzdChtb250aCkpdGhyb3cgRXJyb3IoJ0Nob29zZSBhIHZhbGlkIG1vbnRoLicpO2NvbnN0IG49bmV3IERhdGUoRGF0ZS5VVEMoK21vbnRoLnNsaWNlKDAsNCksK21vbnRoLnNsaWNlKDUpLDApKS5nZXRVVENEYXRlKCk7cmV0dXJuIEFycmF5LmZyb20oe2xlbmd0aDpufSwoXyxpKT0+bW9udGgrJy0nK1N0cmluZyhpKzEpLnBhZFN0YXJ0KDIsJzAnKSk7fQpjbGFzcyBNb2RlbHsKIGNvbnN0cnVjdG9yKGRhdGEpe2lmKGRhdGEudmVyc2lvbiE9PTEpdGhyb3cgRXJyb3IoJ1Vuc3VwcG9ydGVkIHNuYXBzaG90IHZlcnNpb24uJyk7dGhpcy5kYXRhPWRhdGE7dGhpcy5ub2Rlcz1kYXRhLm5vZGVzLm1hcCgobixpKT0+KHtpZDpuWzBdLGtpbmQ6blsxXSx2YWx1ZTpuWzJdLHJvbGU6bm9kZVJvbGUoblsxXSxuWzNdKSxpbmRleDppLHJlZnM6bmV3IFNldCgpLGF1dGhvcnM6bmV3IFNldCgpLG1lbnRpb25zOm5ldyBTZXQoKX0pKTt0aGlzLmlkcz1uZXcgTWFwKHRoaXMubm9kZXMubWFwKG49PltuLmlkLG5dKSk7dGhpcy5ieVJlY29yZD1kYXRhLnJlY29yZHMubWFwKCgpPT5bXSk7Zm9yKGNvbnN0IFtuLHIscm9sZV0gb2YgZGF0YS5vY2N1cnJlbmNlcyl7Y29uc3Qgbm9kZT10aGlzLm5vZGVzW25dO25vZGUucmVmcy5hZGQocik7aWYocm9sZT09PTApbm9kZS5hdXRob3JzLmFkZChyKTtpZihyb2xlPT09Milub2RlLm1lbnRpb25zLmFkZChyKTt0aGlzLmJ5UmVjb3JkW3JdLnB1c2goW24scm9sZV0pO310aGlzLnNvdXJjZXM9bmV3IE1hcCgpO2ZvcihsZXQgaT0wO2k8ZGF0YS5yZWNvcmRzLmxlbmd0aDtpKyspe2NvbnN0IGtleT1kYXRhLnJlY29yZHNbaV1bMV07aWYoIXRoaXMuc291cmNlcy5oYXMoa2V5KSl0aGlzLnNvdXJjZXMuc2V0KGtleSxuZXcgU2V0KCkpO3RoaXMuc291cmNlcy5nZXQoa2V5KS5hZGQoaSk7fXRoaXMuYWxsUmVjb3Jkcz1uZXcgU2V0KGRhdGEucmVjb3Jkcy5tYXAoKF8saSk9PmkpKTt0aGlzLmRhdGFzZXQ9bmV3IFNldCgpO2Zvcihjb25zdCBuIG9mIHRoaXMubm9kZXMpZm9yKGNvbnN0IHIgb2Ygbi5hdXRob3JzKXRoaXMuZGF0YXNldC5hZGQocik7fQogcmVmcyhub2RlLG1vZGU9J2FjdGl2aXR5Jyl7cmV0dXJuIG5vZGU\/LmtpbmQ9PT0nYWdlbnQnPyhtb2RlPT09J21lbnRpb25zJz9ub2RlLm1lbnRpb25zOm5vZGUuYXV0aG9ycyk6KG5vZGU\/LnJlZnN8fHRoaXMuZGF0YXNldCk7fQogYWN0aXZpdHlUeXBlKGluZGV4KXtjb25zdCBrZXk9dGhpcy5kYXRhLnJlY29yZHNbaW5kZXhdWzZdO3JldHVybiBPYmplY3QuaGFzT3duKGFjdGl2aXR5VHlwZXMsa2V5KT9rZXk6J3Vua25vd24nO30KIHNldE1lc3NhZ2VzKGRhdGEpe2lmKGRhdGEudmVyc2lvbiE9PTF8fCFBcnJheS5pc0FycmF5KGRhdGEucmVjb3JkcykpdGhyb3cgRXJyb3IoJ1Vuc3VwcG9ydGVkIG1lc3NhZ2Ugc25hcHNob3QuJyk7Y29uc3QgYWxsb3dlZD1uZXcgU2V0KHRoaXMuZGF0YS5yZWNvcmRzLm1hcChyPT5yWzBdKSk7dGhpcy5tZXNzYWdlcz1uZXcgTWFwKGRhdGEucmVjb3Jkcy5maWx0ZXIocj0+YWxsb3dlZC5oYXMoclswXSkmJnR5cGVvZiByWzFdPT09J3N0cmluZycpLm1hcChyPT5bclswXSx7dGV4dDpyWzFdLHNjb3BlOlN0cmluZyhyWzJdfHwnU2F2ZWQgdGV4dCcpLHJlZGFjdGVkOnJbM109PT10cnVlfV0pKTt0aGlzLnNlYXJjaENhY2hlPW51bGw7dGhpcy5zZWFyY2hUZXh0PW51bGw7dGhpcy5zaWduYWxIaXRzPXRoaXMuZGF0YS5yZWNvcmRzLm1hcCgoXyxpKT0+c2lnbmFsc0Zvcih0aGlzLm1lc3NhZ2UoaSk\/LnRleHR8fCcnKSk7fQogbWVzc2FnZShpbmRleCl7cmV0dXJuIHRoaXMubWVzc2FnZXM\/LmdldCh0aGlzLmRhdGEucmVjb3Jkc1tpbmRleF1bMF0pfHxudWxsO30KIHNpZ25hbHMoaW5kZXgsa2luZD0nJyl7cmV0dXJuICh0aGlzLnNpZ25hbEhpdHM\/LltpbmRleF18fFtdKS5maWx0ZXIoaD0+IWtpbmR8fGgua2luZD09PWtpbmQpO30KIHNpZ25hbFNjb3JlKGluZGV4LGtpbmQ9Jycpe2NvbnN0IHVuaXF1ZT1uZXcgTWFwKHRoaXMuc2lnbmFscyhpbmRleCxraW5kKS5tYXAoaD0+W2gubGFiZWwsaC53ZWlnaHRdKSk7cmV0dXJuIFsuLi51bmlxdWUudmFsdWVzKCldLnJlZHVjZSgoYSxiKT0+YStiLDApO30KIHNlYXJjaE1hdGNoZXMocXVlcnk9JycpewogIGNvbnN0IHRlcm1zPXF1ZXJ5VGVybXMocXVlcnkpLGtleT1KU09OLnN0cmluZ2lmeSh0ZXJtcyk7aWYodGhpcy5zZWFyY2hDYWNoZT8ua2V5PT09a2V5KXJldHVybiB0aGlzLnNlYXJjaENhY2hlOwogIGlmKCF0aGlzLnNlYXJjaFRleHQpdGhpcy5zZWFyY2hUZXh0PXRoaXMuZGF0YS5yZWNvcmRzLm1hcCgocixpKT0+KHtib2R5Oih0aGlzLm1lc3NhZ2UoaSk\/LnRleHR8fCcnKS50b0xvY2FsZUxvd2VyQ2FzZSgpLHRpdGxlOlN0cmluZyhyWzRdfHwnJykudG9Mb2NhbGVMb3dlckNhc2UoKSxuYW1lczp0aGlzLmJ5UmVjb3JkW2ldLm1hcCgoW25dKT0+dGhpcy5ub2Rlc1tuXS52YWx1ZS50b0xvY2FsZUxvd2VyQ2FzZSgpKS5qb2luKCdcbicpfSkpOwogIGNvbnN0IHJlZnM9bmV3IFNldCgpLHJlYXNvbnM9bmV3IE1hcCgpLHNjb3Jlcz1uZXcgTWFwKCk7dGhpcy5zZWFyY2hUZXh0LmZvckVhY2goKGRvYyxpKT0+e2lmKCF0ZXJtcy5sZW5ndGgpe3JlZnMuYWRkKGkpO3JldHVybjt9aWYoIXRlcm1zLmV2ZXJ5KHQ9PmRvYy5ib2R5LmluY2x1ZGVzKHQpfHxkb2MudGl0bGUuaW5jbHVkZXModCl8fGRvYy5uYW1lcy5pbmNsdWRlcyh0KSkpcmV0dXJuO3JlZnMuYWRkKGkpO2NvbnN0IGluQm9keT10ZXJtcy5ldmVyeSh0PT5kb2MuYm9keS5pbmNsdWRlcyh0KSksaW5UaXRsZT10ZXJtcy5ldmVyeSh0PT5kb2MudGl0bGUuaW5jbHVkZXModCkpO3JlYXNvbnMuc2V0KGksaW5Cb2R5PydNYXRjaGVzIHNhdmVkIG1lc3NhZ2UnOmluVGl0bGU\/J01hdGNoZXMgcGFnZSB0aXRsZSc6J01hdGNoZXMgaW5kZXhlZCBlbnRpdHkgLyByZWNvcmQgY29udGV4dCcpO3Njb3Jlcy5zZXQoaSxpbkJvZHk\/NDppblRpdGxlPzM6Mik7fSk7CiAgcmV0dXJuIHRoaXMuc2VhcmNoQ2FjaGU9e2tleSxyZWZzLHJlYXNvbnMsc2NvcmVzfTsKIH0KIHNuaXBwZXQoaW5kZXgse3F1ZXJ5PScnLHF1aWNrPScnLGxlbmd0aD0yNjB9PXt9KXtjb25zdCB0ZXh0PXRoaXMubWVzc2FnZShpbmRleCk\/LnRleHR8fCcnLHRlcm1zPXF1ZXJ5VGVybXMocXVlcnkpO2xldCBwb3M9LTE7Zm9yKGNvbnN0IHQgb2YgdGVybXMpe2NvbnN0IGk9dGV4dC50b0xvY2FsZUxvd2VyQ2FzZSgpLmluZGV4T2YodCk7aWYoaT49MCYmKHBvczwwfHxpPHBvcykpcG9zPWk7fWlmKHBvczwwKXBvcz10aGlzLnNpZ25hbHMoaW5kZXgscXVpY2spWzBdPy5zdGFydD8\/MDtjb25zdCBzdGFydD1NYXRoLm1heCgwLHBvcy03NSksZW5kPU1hdGgubWluKHRleHQubGVuZ3RoLHN0YXJ0K2xlbmd0aCk7cmV0dXJuIHt0ZXh0OnRleHQuc2xpY2Uoc3RhcnQsZW5kKSxzdGFydCxlbmQsYmVmb3JlOnN0YXJ0PjAsYWZ0ZXI6ZW5kPHRleHQubGVuZ3RofTt9CiByb2xlSW5Db250ZXh0KG5vZGUscmVmcz1ub2RlLnJlZnMpe3JldHVybiBub2RlLnJvbGU9PT0ndGFyZ2V0JyYmISh0aGlzLmRhdGEucm9sZV9ldmlkZW5jZXx8W10pLnNvbWUoKFtuLHJdKT0+bj09PW5vZGUuaW5kZXgmJnJlZnMuaGFzKHIpKT8ncmVmZXJlbmNlZF9zaXRlJzpub2RlLnJvbGU7fQogZmlsdGVyKHJlZnMse2NhdGVnb3J5PScnLG1vbnRoPScnLGRheT0nJyxzb3VyY2U9JycsZnJvbT0nJyx0aHJvdWdoPScnLHF1aWNrPScnLHF1ZXJ5PScnLHJvbGU9JycsYWxsb3dlZD1udWxsfT17fSl7Y29uc3QgbWF0Y2hlcz1xdWVyeT90aGlzLnNlYXJjaE1hdGNoZXMocXVlcnkpLnJlZnM6bnVsbDtyZXR1cm4gbmV3IFNldChbLi4ucmVmc10uZmlsdGVyKGk9Pntjb25zdCByPXRoaXMuZGF0YS5yZWNvcmRzW2ldLGRhdGU9clsyXT8uc2xpY2UoMCwxMCl8fCcnO3JldHVybiAoIWFsbG93ZWR8fGFsbG93ZWQuaGFzKGkpKSYmKCFjYXRlZ29yeXx8dGhpcy5hY3Rpdml0eVR5cGUoaSk9PT1jYXRlZ29yeSkmJighKGRheXx8bW9udGgpfHxkYXRlLnN0YXJ0c1dpdGgoZGF5fHxtb250aCkpJiYoIXNvdXJjZXx8KHNvdXJjZT09PSdhdXRob3JzJz90aGlzLmRhdGFzZXQuaGFzKGkpOnJbMV09PT1zb3VyY2UpKSYmKCFmcm9tfHxkYXRlPj1mcm9tKSYmKCF0aHJvdWdofHwhIWRhdGUmJmRhdGU8PXRocm91Z2gpJiYoIXF1aWNrfHx0aGlzLnNpZ25hbHMoaSxxdWljaykubGVuZ3RoPjApJiYoIW1hdGNoZXN8fG1hdGNoZXMuaGFzKGkpKSYmKCFyb2xlfHx0aGlzLmJ5UmVjb3JkW2ldLnNvbWUoKFtuXSk9PnRoaXMucm9sZUluQ29udGV4dCh0aGlzLm5vZGVzW25dLG5ldyBTZXQoW2ldKSk9PT1yb2xlKSk7fSkpO30KIGdyb3VwcyhyZWZzLHtzb3J0PSdyZWxldmFuY2UnLHF1ZXJ5PScnLHF1aWNrPScnLGdyb3VwPXRydWV9PXt9KXtjb25zdCBvdXQ9bmV3IE1hcCgpLHNlYXJjaD10aGlzLnNlYXJjaE1hdGNoZXMocXVlcnkpO2Zvcihjb25zdCBpIG9mIHJlZnMpe2NvbnN0IHI9dGhpcy5kYXRhLnJlY29yZHNbaV0sa2V5PWdyb3VwPyhyWzNdPz9yWzBdKTpyWzBdO2lmKCFvdXQuaGFzKGtleSkpb3V0LnNldChrZXkse2tleSxyZWZzOltdLHNjb3JlOjB9KTtjb25zdCBnPW91dC5nZXQoa2V5KTtnLnJlZnMucHVzaChpKTtnLnNjb3JlPU1hdGgubWF4KGcuc2NvcmUsKHNlYXJjaC5zY29yZXMuZ2V0KGkpfHwwKSt0aGlzLnNpZ25hbFNjb3JlKGkscXVpY2spKTt9Y29uc3QgZ3JvdXBzPVsuLi5vdXQudmFsdWVzKCldO2Zvcihjb25zdCBnIG9mIGdyb3Vwcyl7Zy5yZWZzLnNvcnQoKGEsYik9Pih0aGlzLmRhdGEucmVjb3Jkc1tiXVsyXXx8JycpLmxvY2FsZUNvbXBhcmUodGhpcy5kYXRhLnJlY29yZHNbYV1bMl18fCcnKXx8YS1iKTtnLmluZGV4PXNvcnQ9PT0nb2xkZXN0Jz9nLnJlZnMuYXQoLTEpOmcucmVmc1swXTtnLmRpc3RpbmN0PXRoaXMuc3RhdHMobmV3IFNldChnLnJlZnMpKS5kaXN0aW5jdDt9cmV0dXJuIGdyb3Vwcy5zb3J0KChhLGIpPT57Y29uc3QgYXI9dGhpcy5kYXRhLnJlY29yZHNbYS5pbmRleF0sYnI9dGhpcy5kYXRhLnJlY29yZHNbYi5pbmRleF07aWYoc29ydD09PSdyZWxldmFuY2UnJiZhLnNjb3JlIT09Yi5zY29yZSlyZXR1cm4gYi5zY29yZS1hLnNjb3JlO2lmKHNvcnQ9PT0ncmVwZWF0ZWQnJiZhLnJlZnMubGVuZ3RoIT09Yi5yZWZzLmxlbmd0aClyZXR1cm4gYi5yZWZzLmxlbmd0aC1hLnJlZnMubGVuZ3RoO2lmKHNvcnQ9PT0ndHlwZScpe2NvbnN0IGRpZmY9YWN0aXZpdHlUeXBlc1t0aGlzLmFjdGl2aXR5VHlwZShhLmluZGV4KV0ubG9jYWxlQ29tcGFyZShhY3Rpdml0eVR5cGVzW3RoaXMuYWN0aXZpdHlUeXBlKGIuaW5kZXgpXSk7aWYoZGlmZilyZXR1cm4gZGlmZjt9cmV0dXJuIChzb3J0PT09J29sZGVzdCc\/MTotMSkqKGFyWzJdfHwnJykubG9jYWxlQ29tcGFyZShiclsyXXx8JycpfHxhLmluZGV4LWIuaW5kZXg7fSk7fQogdHlwZUNvdW50cyhyZWZzLG1vbnRoPScnKXtjb25zdCBjb3VudHM9T2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5rZXlzKGFjdGl2aXR5VHlwZXMpLm1hcChrPT5baywwXSkpO2Zvcihjb25zdCBpIG9mIHRoaXMuZmlsdGVyKHJlZnMse21vbnRofSkpY291bnRzW3RoaXMuYWN0aXZpdHlUeXBlKGkpXSsrO3JldHVybiBjb3VudHM7fQogb3JkZXJlZFJlY29yZHMocmVmcyx7Y2F0ZWdvcnk9JycsbW9udGg9JycsZGF5PScnLHNvcnQ9J25ld2VzdCd9PXt9KXtyZXR1cm4gWy4uLnRoaXMuZmlsdGVyKHJlZnMse2NhdGVnb3J5LG1vbnRoLGRheX0pXS5zb3J0KChhLGIpPT57aWYoc29ydD09PSd0eXBlJyl7Y29uc3QgZ3JvdXA9YWN0aXZpdHlUeXBlc1t0aGlzLmFjdGl2aXR5VHlwZShhKV0ubG9jYWxlQ29tcGFyZShhY3Rpdml0eVR5cGVzW3RoaXMuYWN0aXZpdHlUeXBlKGIpXSk7aWYoZ3JvdXApcmV0dXJuIGdyb3VwO31jb25zdCBkYXRlcz0odGhpcy5kYXRhLnJlY29yZHNbYl1bMl18fCcnKS5sb2NhbGVDb21wYXJlKHRoaXMuZGF0YS5yZWNvcmRzW2FdWzJdfHwnJyk7cmV0dXJuIChzb3J0PT09J29sZGVzdCc\/LWRhdGVzOmRhdGVzKXx8YS1iO30pO30KIHN0YXRzKHJlZnMpe2NvbnN0IGRhdGVzPVsuLi5yZWZzXS5tYXAoaT0+dGhpcy5kYXRhLnJlY29yZHNbaV1bMl0\/LnNsaWNlKDAsMTApKS5maWx0ZXIoQm9vbGVhbikuc29ydCgpO3JldHVybntyZWNvcmRzOnJlZnMuc2l6ZSxkaXN0aW5jdDpuZXcgU2V0KFsuLi5yZWZzXS5tYXAoaT0+dGhpcy5kYXRhLnJlY29yZHNbaV1bM10pKS5zaXplLGFjdGl2ZURheXM6bmV3IFNldChkYXRlcykuc2l6ZSx1bmRhdGVkOnJlZnMuc2l6ZS1kYXRlcy5sZW5ndGgsZmlyc3Q6ZGF0ZXNbMF18fCcnLGxhc3Q6ZGF0ZXMuYXQoLTEpfHwnJ307fQogZGFpbHkocmVmcyxtb250aCl7Y29uc3QgZGF5cz1uZXcgTWFwKG1vbnRoRGF5cyhtb250aCkubWFwKGQ9PltkLDBdKSk7Zm9yKGNvbnN0IGkgb2YgcmVmcyl7Y29uc3QgZGF5PXRoaXMuZGF0YS5yZWNvcmRzW2ldWzJdPy5zbGljZSgwLDEwKTtpZihkYXlzLmhhcyhkYXkpKWRheXMuc2V0KGRheSxkYXlzLmdldChkYXkpKzEpO31yZXR1cm4gWy4uLmRheXNdLm1hcCgoW2RhdGUsY291bnRdKT0+KHtkYXRlLGNvdW50fSkpO30KIGxpc3QocXVlcnk9Jycsa2luZD0nJyxyb2xlPScnKXtjb25zdCBxPXF1ZXJ5LnRyaW0oKS50b0xvY2FsZUxvd2VyQ2FzZSgpO3JldHVybiB0aGlzLm5vZGVzLmZpbHRlcihuPT4oIWtpbmR8fGtpbmQ9PT1uLmtpbmQpJiYoIXJvbGV8fHJvbGU9PT1uLnJvbGUpJiYoIXF8fG4udmFsdWUudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcyhxKSkpLnNvcnQoKGEsYik9PihiLmtpbmQ9PT0nYWdlbnQnP2IuYXV0aG9ycy5zaXplOmIucmVmcy5zaXplKS0oYS5raW5kPT09J2FnZW50Jz9hLmF1dGhvcnMuc2l6ZTphLnJlZnMuc2l6ZSl8fGEudmFsdWUubG9jYWxlQ29tcGFyZShiLnZhbHVlKSk7fQogcmVsYXRpb25zKG5vZGUse2Nvb2NjdXI9ZmFsc2UsLi4uc2NvcGV9PXt9KXtjb25zdCBvdXQ9bmV3IE1hcCgpO2Zvcihjb25zdCByIG9mIHRoaXMuZmlsdGVyKG5vZGUucmVmcyxzY29wZSkpe2NvbnN0IG93bj10aGlzLmJ5UmVjb3JkW3JdLmZpbHRlcigoW25dKT0+bj09PW5vZGUuaW5kZXgpO2Zvcihjb25zdCBbLHJvbGVdIG9mIG93bilmb3IoY29uc3QgW290aGVyLHRhcmdldFJvbGVdIG9mIHRoaXMuYnlSZWNvcmRbcl0pe2lmKG90aGVyPT09bm9kZS5pbmRleCljb250aW51ZTtjb25zdCBwYWlyPXJvbGUrJzonK3RhcmdldFJvbGU7Y29uc3QgdHlwZT17JzA6MSc6J3JlY29yZGVkIG9uJywnMTowJzoncmVjb3JkZWQgYXV0aG9yJywnMDoyJzoncmVmZXJlbmNlcycsJzI6MCc6J3JlZmVyZW5jZWQgYnknLCcxOjInOidjb250YWlucyByZWZlcmVuY2UnLCcyOjEnOidyZWZlcmVuY2VkIG9uJywnMjoyJzonY28tb2NjdXJzJ31bcGFpcl07aWYoIXR5cGV8fChwYWlyPT09JzI6MicmJiFjb29jY3VyKSljb250aW51ZTtjb25zdCBrZXk9b3RoZXIrJzonK3R5cGU7aWYoIW91dC5oYXMoa2V5KSlvdXQuc2V0KGtleSx7bm9kZTp0aGlzLm5vZGVzW290aGVyXSx0eXBlLHJlZnM6bmV3IFNldCgpfSk7b3V0LmdldChrZXkpLnJlZnMuYWRkKHIpO319CiByZXR1cm4gWy4uLm91dC52YWx1ZXMoKV0uc29ydCgoYSxiKT0+dGhpcy5zdGF0cyhiLnJlZnMpLmRpc3RpbmN0LXRoaXMuc3RhdHMoYS5yZWZzKS5kaXN0aW5jdHx8Yi5yZWZzLnNpemUtYS5yZWZzLnNpemV8fGEubm9kZS52YWx1ZS5sb2NhbGVDb21wYXJlKGIubm9kZS52YWx1ZSkpO30KIGdyb3VwZWRSZWxhdGlvbnMobm9kZSxvcHRpb25zPXt9KXtjb25zdCBncm91cHM9bmV3IE1hcCgpO2Zvcihjb25zdCByIG9mIHRoaXMucmVsYXRpb25zKG5vZGUsb3B0aW9ucykpe2NvbnN0IGhvc3Q9aG9zdE9mKHIubm9kZSkscm9sZT10aGlzLnJvbGVJbkNvbnRleHQoci5ub2RlLHIucmVmcyksa2V5PXIudHlwZSsnfCcrcm9sZSsnfCcrKGhvc3R8fHIubm9kZS5pZCk7aWYoIWdyb3Vwcy5oYXMoa2V5KSlncm91cHMuc2V0KGtleSx7Li4ucixrZXksaG9zdCxyb2xlLHJlZnM6bmV3IFNldCgpLG1lbWJlcnM6W119KTtjb25zdCBnPWdyb3Vwcy5nZXQoa2V5KTtnLm1lbWJlcnMucHVzaChyLm5vZGUpO2lmKHIubm9kZS5raW5kPT09J2RvbWFpbicpZy5ub2RlPXIubm9kZTtmb3IoY29uc3QgaSBvZiByLnJlZnMpZy5yZWZzLmFkZChpKTt9cmV0dXJuIFsuLi5ncm91cHMudmFsdWVzKCldLnNvcnQoKGEsYik9PnRoaXMuc3RhdHMoYi5yZWZzKS5kaXN0aW5jdC10aGlzLnN0YXRzKGEucmVmcykuZGlzdGluY3R8fGIucmVmcy5zaXplLWEucmVmcy5zaXplfHxhLm5vZGUudmFsdWUubG9jYWxlQ29tcGFyZShiLm5vZGUudmFsdWUpKTt9Cn0KY29uc3QgYXBpPXtNb2RlbCxtb250aERheXMsbGFiZWxzLGFjdGl2aXR5VHlwZXMscm9sZUxhYmVscyxzaWduYWxMYWJlbHMsc2lnbmFsc0ZvcixxdWVyeVRlcm1zLGhvc3RPZn07aWYodHlwZW9mIG1vZHVsZSE9PSd1bmRlZmluZWQnJiZtb2R1bGUuZXhwb3J0cyltb2R1bGUuZXhwb3J0cz1hcGk7ZWxzZSByb290Lk5vZXRpY01vZGVsPWFwaTsKfSkoZ2xvYmFsVGhpcyk7Cgpjb25zdCBOT0VUSUNfU05BUFNIT1RfVVJMPSJodHRwczovL25vZXRpY3Jlc2VhcmNoLm9yZy93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8xMC9ub2V0aWMtZXhwbG9yZS1zbmFwc2hvdC0yMDI2MTAwNC12My50eHQiOwpjb25zdCBOT0VUSUNfTUVTU0FHRVNfVVJMPSJodHRwczovL25vZXRpY3Jlc2VhcmNoLm9yZy93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8xMC9ub2V0aWMtZXhwbG9yZS1tZXNzYWdlcy0yMDI2MTAwNC12MS50eHQiOwooZnVuY3Rpb24oKXsndXNlIHN0cmljdCc7CmNvbnN0IHJvb3Q9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI25vZXRpYy1leHBsb3JlJyksJD1zPT5yb290LnF1ZXJ5U2VsZWN0b3IocyksJCQ9cz0+Wy4uLnJvb3QucXVlcnlTZWxlY3RvckFsbChzKV07CmNvbnN0IHtNb2RlbCxtb250aERheXMsbGFiZWxzLGFjdGl2aXR5VHlwZXMscm9sZUxhYmVscyxzaWduYWxMYWJlbHMscXVlcnlUZXJtcyxob3N0T2Z9PU5vZXRpY01vZGVsOwpjb25zdCBlc2M9dj0+U3RyaW5nKHY\/PycnKS5yZXBsYWNlKC9bJjw+IiddL2csYz0+KHsnJic6JyZhbXA7JywnPCc6JyZsdDsnLCc+JzonJmd0OycsJyInOicmcXVvdDsnLCInIjonJiMzOTsnfVtjXSkpLGZtdD1uPT5OdW1iZXIobikudG9Mb2NhbGVTdHJpbmcoKTsKY29uc3QgcHJldHR5PWQ9PmQ\/bmV3IERhdGUoZC5zbGljZSgwLDEwKSsnVDAwOjAwOjAwWicpLnRvTG9jYWxlRGF0ZVN0cmluZyh1bmRlZmluZWQse21vbnRoOidzaG9ydCcsZGF5OidudW1lcmljJyx5ZWFyOidudW1lcmljJyx0aW1lWm9uZTonVVRDJ30pOidVbmRhdGVkJzsKY29uc3Qgc291cmNlTGFiZWxzPXthdXRob3JzOidXaWtpIHJldmlzaW9ucyB3aXRoIGF1dGhvciBsYWJlbHMnLHdpa2k6J1dpa2kgcmV2aXNpb25zJyxjcm9zc19zaXRlOidDcm9zcy1zaXRlIHJlY29yZHMnLG90aGVyX3dpa2lzOidPdGhlciB3aWtpIHJldmlzaW9ucycsc2hvcnRlbmVyOidTaG9ydC1saW5rIHJlY29yZHMnLGFsbDonQWxsIHNvdXJjZXMnfTsKY29uc3QgY29sb3I9WycjMzI2MzRjJywnIzliNzEzZCcsJyM0OTZlOTMnLCcjOGM2NThiJ107CmxldCBtb2RlbCxzZWxlY3RlZCx2aWV3PSdkaXJlY3RvcnknLGNvcnB1c1Njb3BlPSdhbGwnLG1vbnRoPScnLGRheT0nJyxjb21wYXJlPVtdLHNjYWxlPSdsaW5lYXInLG1vZGU9J2FjdGl2aXR5JyxjYXRlZ29yeT0nJyxyZWNvcmRTb3J0PSdyZWxldmFuY2UnLGNvb2NjdXI9ZmFsc2UscmVsYXRpb249bnVsbCxzZWFyY2hUaW1lcjsKbGV0IHF1ZXJ5PScnLHNvdXJjZT0nJyxmcm9tPScnLHRocm91Z2g9JycscXVpY2s9Jycscm9sZT0nJyxkZXRhaWxUYWI9J21lc3NhZ2VzJyxyZWNvcmRMaW1pdD0zMCxhY3RpdmVSZWNvcmQ9bnVsbCxncm91cFJlcGVhdGVkPXRydWUsbWVzc2FnZVN0YXRlPSdpZGxlJyxyZWxhdGlvbkxpbWl0PTgsc2hvd0lkZW50aWZpZXJzPWZhbHNlLGVudGl0aWVzT3Blbj1mYWxzZTsKbGV0IHJlYWRlckV4cGFuZGVkPWZhbHNlLGNvbXBhcmVSZWNvcmQ9bnVsbCxsYXN0UmVsYXRpb25zPVtdLGVudGl0eUxpbWl0PTEyOwpjb25zdCBzY3JvbGxQb3NpdGlvbnM9bmV3IE1hcCgpOwpmdW5jdGlvbiBhY3RpdmVFbGVtZW50KHNlbGVjdG9yKXtyZXR1cm4gJCgnI254LScrKHtkZXRhaWw6J2RldGFpbCcsdGltZWxpbmU6J2NvcnB1cycsYm9hcmQ6J2JvYXJkJyxkaXJlY3Rvcnk6J2RpcmVjdG9yeSd9W3ZpZXddKSk\/LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO30KZnVuY3Rpb24gcmVtZW1iZXJTY3JvbGwoKXtjb25zdCBsaXN0PWFjdGl2ZUVsZW1lbnQoJy5yZXN1bHQtbGlzdCcpLHBhbmU9YWN0aXZlRWxlbWVudCgnLnJlYWRpbmctcGFuZScpO2lmKGxpc3Qpc2Nyb2xsUG9zaXRpb25zLnNldCh2aWV3LHtsaXN0Omxpc3Quc2Nyb2xsVG9wLHBhbmU6cGFuZT8uc2Nyb2xsVG9wfHwwLHJlY29yZDpOdW1iZXIocGFuZT8uZGF0YXNldC5yZWFkZXJJbmRleCl9KTt9CmxldCBib2FyZD1bXTt0cnl7Ym9hcmQ9SlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbm9ldGljLWV4cGxvcmUtYm9hcmQtdjEnKXx8J1tdJyk7aWYoIUFycmF5LmlzQXJyYXkoYm9hcmQpKWJvYXJkPVtdO31jYXRjaHt9CmNvbnN0IHRhZz0obixyZWZzPW4ucmVmcyk9PmA8c3BhbiBjbGFzcz0idGFnIiBkYXRhLWtpbmQ9IiR7ZXNjKG4ua2luZCl9IiBkYXRhLXJvbGU9IiR7ZXNjKG1vZGVsLnJvbGVJbkNvbnRleHQobixyZWZzKSl9IiB0aXRsZT0iJHtlc2MobGFiZWxzW24ua2luZF0pfSI+JHtlc2Mocm9sZUxhYmVsc1ttb2RlbC5yb2xlSW5Db250ZXh0KG4scmVmcyldKX08L3NwYW4+YDsKZnVuY3Rpb24gbm90aWZ5KHMpeyQoJyNueC1zdGF0dXMnKS50ZXh0Q29udGVudD1zOyQoJyNueC1zdGF0dXMnKS5oaWRkZW49IXM7fQpmdW5jdGlvbiBkaXNwbGF5TmFtZSh2YWx1ZSl7dHJ5e2NvbnN0IHU9bmV3IFVSTCh2YWx1ZSk7cmV0dXJuIHUuaG9zdG5hbWUrKHUucGF0aG5hbWU9PT0nLyc\/Jyc6dS5wYXRobmFtZSk7fWNhdGNoe3JldHVybiB2YWx1ZTt9fQpmdW5jdGlvbiB1cmxEZXRhaWxzKHZhbHVlKXt0cnl7Y29uc3QgdT1uZXcgVVJMKHZhbHVlKTtpZighdS5zZWFyY2gmJiF1Lmhhc2gpcmV0dXJuICcnO3JldHVybiBgPGRldGFpbHMgY2xhc3M9InVybC1wYXJhbWV0ZXJzIj48c3VtbWFyeT5VUkwgcGFyYW1ldGVycyAvIGZyYWdtZW50PC9zdW1tYXJ5Pjxjb2RlPiR7ZXNjKHUuc2VhcmNoK3UuaGFzaCl9PC9jb2RlPjwvZGV0YWlscz5gO31jYXRjaHtyZXR1cm4gJyc7fX0KZnVuY3Rpb24gc2NvcGUob3ZlcnJpZGVzPXt9KXtyZXR1cm4ge3F1ZXJ5LHNvdXJjZSxmcm9tLHRocm91Z2gscXVpY2sscm9sZSxjYXRlZ29yeSxtb250aCxkYXksLi4ub3ZlcnJpZGVzfTt9CmZ1bmN0aW9uIHNjb3BlZChyZWZzLG92ZXJyaWRlcz17fSl7cmV0dXJuIG1vZGVsLmZpbHRlcihyZWZzLHNjb3BlKG92ZXJyaWRlcykpO30KZnVuY3Rpb24gY29ycHVzUmVmcygpe3JldHVybiBjb3JwdXNTY29wZT09PSdhdXRob3JzJz9tb2RlbC5kYXRhc2V0OmNvcnB1c1Njb3BlPT09J2FsbCc\/bW9kZWwuYWxsUmVjb3JkczoobW9kZWwuc291cmNlcy5nZXQoY29ycHVzU2NvcGUpfHxuZXcgU2V0KCkpO30KZnVuY3Rpb24gY3VycmVudE5vZGVzKCl7cmV0dXJuIHNlbGVjdGVkP1tzZWxlY3RlZCwuLi5jb21wYXJlLm1hcChpZD0+bW9kZWwuaWRzLmdldChpZCkpLmZpbHRlcihuPT5uPy5raW5kPT09J2FnZW50JyYmbi5pZCE9PXNlbGVjdGVkLmlkKV0uc2xpY2UoMCw0KTpbXTt9CmZ1bmN0aW9uIGJhc2VSZWZzKCl7cmV0dXJuIHZpZXc9PT0nZGV0YWlsJz9uZXcgU2V0KGN1cnJlbnROb2RlcygpLmZsYXRNYXAobj0+Wy4uLm1vZGVsLnJlZnMobixtb2RlKV0pKTp2aWV3PT09J3RpbWVsaW5lJz9jb3JwdXNSZWZzKCk6bW9kZWwuYWxsUmVjb3Jkczt9CmZ1bmN0aW9uIHNlbGVjdGVkUmVmcygpe3JldHVybiByZWxhdGlvbj9yZWxhdGlvbi5yZWZzOmJhc2VSZWZzKCk7fQpmdW5jdGlvbiBzdGF0ZVBhcmFtcygpe2NvbnN0IHA9bmV3IFVSTFNlYXJjaFBhcmFtcygpO2Zvcihjb25zdCBbayx2XSBvZiBPYmplY3QuZW50cmllcyh7cTpxdWVyeSxzb3VyY2UsZnJvbSx0aHJvdWdoLHF1aWNrLHJvbGUsY2F0ZWdvcnksbW9udGgsZGF5LHNvcnQ6cmVjb3JkU29ydD09PSdyZWxldmFuY2UnPycnOnJlY29yZFNvcnQsZ3JvdXA6Z3JvdXBSZXBlYXRlZD8nJzonb2ZmJ30pKWlmKHYpcC5zZXQoayx2KTtyZXR1cm4gcDt9CmZ1bmN0aW9uIGxpbmsobil7Y29uc3QgcD1zdGF0ZVBhcmFtcygpO3Auc2V0KCdlbnRpdHknLG4uaWQpO3JldHVybiAnIycrcDt9CmZ1bmN0aW9uIHVwZGF0ZUhhc2goKXtjb25zdCBwPXN0YXRlUGFyYW1zKCk7aWYodmlldz09PSdkZXRhaWwnJiZzZWxlY3RlZCl7cC5zZXQoJ2VudGl0eScsc2VsZWN0ZWQuaWQpO3Auc2V0KCd0YWInLGRldGFpbFRhYik7aWYobW9kZT09PSdtZW50aW9ucycpcC5zZXQoJ21vZGUnLG1vZGUpO2lmKGNvbXBhcmUubGVuZ3RoKXAuc2V0KCdjb21wYXJlJyxjb21wYXJlLmpvaW4oJywnKSk7fWVsc2UgaWYodmlldyE9PSdkaXJlY3RvcnknKXAuc2V0KCd2aWV3Jyx2aWV3KTtpZih2aWV3PT09J3RpbWVsaW5lJylwLnNldCgnc2NvcGUnLGNvcnB1c1Njb3BlKTtpZihjb29jY3VyKXAuc2V0KCdjb29jY3VyJywnMScpO2lmKGFjdGl2ZVJlY29yZCE9PW51bGwpcC5zZXQoJ3JlY29yZCcsbW9kZWwuZGF0YS5yZWNvcmRzW2FjdGl2ZVJlY29yZF0\/LlswXXx8JycpO2lmKHJlbGF0aW9uKXAuc2V0KCdlZGdlJyxyZWxhdGlvbi5rZXkpO2hpc3RvcnkucmVwbGFjZVN0YXRlKG51bGwsJycsJyMnK3ApO30KZnVuY3Rpb24gc2F2ZUJvYXJkKCl7dHJ5e2xvY2FsU3RvcmFnZS5zZXRJdGVtKCdub2V0aWMtZXhwbG9yZS1ib2FyZC12MScsSlNPTi5zdHJpbmdpZnkoYm9hcmQpKTt9Y2F0Y2h7bm90aWZ5KCdCb2FyZCBzdG9yYWdlIGlzIHVuYXZhaWxhYmxlLiBZb3UgY2FuIHN0aWxsIGRvd25sb2FkIHRoZSBib2FyZC4nKTt9JCgnI254LWJvYXJkLWNvdW50JykudGV4dENvbnRlbnQ9Ym9hcmQubGVuZ3RoO30KZnVuY3Rpb24gcGluKGlkKXtpZihib2FyZC5pbmNsdWRlcyhpZCkpYm9hcmQ9Ym9hcmQuZmlsdGVyKHg9PnghPT1pZCk7ZWxzZSBpZihib2FyZC5sZW5ndGg8MjApYm9hcmQucHVzaChpZCk7ZWxzZSByZXR1cm4gbm90aWZ5KCdUaGUgYm9hcmQgaG9sZHMgMjAgZW50aXRpZXMuIFJlbW92ZSBvbmUgdG8gYWRkIGFub3RoZXIuJyk7c2F2ZUJvYXJkKCk7cmVuZGVyQ3VycmVudCgpO30KZnVuY3Rpb24gc2hvdyhuZXh0KXt2aWV3PW5leHQ7Zm9yKGNvbnN0IFtpZCx2XSBvZiBbWydkaXJlY3RvcnknLCdkaXJlY3RvcnknXSxbJ2RldGFpbCcsJ2RldGFpbCddLFsnY29ycHVzJywndGltZWxpbmUnXSxbJ2JvYXJkJywnYm9hcmQnXV0pJCgnI254LScraWQpLmhpZGRlbj12IT09bmV4dDskJCgnW2RhdGEtdmlld10nKS5mb3JFYWNoKGI9Pntjb25zdCBhY3RpdmU9Yi5kYXRhc2V0LnZpZXc9PT0obmV4dD09PSdkZXRhaWwnPydkaXJlY3RvcnknOm5leHQpO2IuY2xhc3NMaXN0LnRvZ2dsZSgnYWN0aXZlJyxhY3RpdmUpO2Iuc2V0QXR0cmlidXRlKCdhcmlhLXByZXNzZWQnLGFjdGl2ZSk7fSk7fQpmdW5jdGlvbiBoaWdobGlnaHQodGV4dCxpbmRleCxvZmZzZXQ9MCl7Y29uc3QgcmFuZ2VzPVtdLGxvd2VyPXRleHQudG9Mb2NhbGVMb3dlckNhc2UoKTtmb3IoY29uc3QgdCBvZiBxdWVyeVRlcm1zKHF1ZXJ5fHxyZWxhdGlvbj8uaG9zdHx8cmVsYXRpb24\/Lm5vZGU\/LnZhbHVlfHwnJykpe2xldCBhdD0wO3doaWxlKChhdD1sb3dlci5pbmRleE9mKHQsYXQpKT49MCl7cmFuZ2VzLnB1c2goW2F0LGF0K3QubGVuZ3RoXSk7YXQrPU1hdGgubWF4KDEsdC5sZW5ndGgpO319Zm9yKGNvbnN0IGggb2YgbW9kZWwuc2lnbmFscyhpbmRleCxxdWljaykpe2NvbnN0IGE9TWF0aC5tYXgoMCxoLnN0YXJ0LW9mZnNldCksYj1NYXRoLm1pbih0ZXh0Lmxlbmd0aCxoLmVuZC1vZmZzZXQpO2lmKGI+YSlyYW5nZXMucHVzaChbYSxiXSk7fXJhbmdlcy5zb3J0KChhLGIpPT5hWzBdLWJbMF0pO2NvbnN0IG1lcmdlZD1bXTtmb3IoY29uc3QgciBvZiByYW5nZXMpe2NvbnN0IHByZXY9bWVyZ2VkLmF0KC0xKTtpZihwcmV2JiZyWzBdPD1wcmV2WzFdKXByZXZbMV09TWF0aC5tYXgocHJldlsxXSxyWzFdKTtlbHNlIG1lcmdlZC5wdXNoKFsuLi5yXSk7fWxldCBvdXQ9JycsYXQ9MDtmb3IoY29uc3QgW2EsYl0gb2YgbWVyZ2VkKXtvdXQrPWVzYyh0ZXh0LnNsaWNlKGF0LGEpKSsnPG1hcms+Jytlc2ModGV4dC5zbGljZShhLGIpKSsnPC9tYXJrPic7YXQ9Yjt9cmV0dXJuIG91dCtlc2ModGV4dC5zbGljZShhdCkpO30KZnVuY3Rpb24gc25pcHBldE1hcmt1cChpLGxlbmd0aD0yNTApe2NvbnN0IHM9bW9kZWwuc25pcHBldChpLHtxdWVyeTpxdWVyeXx8cmVsYXRpb24\/Lmhvc3R8fHJlbGF0aW9uPy5ub2RlPy52YWx1ZXx8JycscXVpY2ssbGVuZ3RofSk7cmV0dXJuIChzLmJlZm9yZT8n4oCmJzonJykraGlnaGxpZ2h0KHMudGV4dCxpLHMuc3RhcnQpKyhzLmFmdGVyPyfigKYnOicnKTt9CmZ1bmN0aW9uIGF1dGhvck5vZGVzKGkpe3JldHVybiBtb2RlbC5ieVJlY29yZFtpXS5maWx0ZXIoKFsscl0pPT5yPT09MCkubWFwKChbbl0pPT5tb2RlbC5ub2Rlc1tuXSk7fQpmdW5jdGlvbiBmaWx0ZXJNYXJrdXAoKXsKIGNvbnN0IGNvdW50cz17fSxiYXNlPXNjb3BlZChiYXNlUmVmcygpLHtxdWljazonJ30pO2Zvcihjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoc2lnbmFsTGFiZWxzKSljb3VudHNba2V5XT1tb2RlbC5zdGF0cyhtb2RlbC5maWx0ZXIoYmFzZSx7cXVpY2s6a2V5fSkpLmRpc3RpbmN0OwogJCgnI254LXF1aWNrJykuaW5uZXJIVE1MPWA8YnV0dG9uIGRhdGEtcXVpY2s9IiIgYXJpYS1wcmVzc2VkPSIkeyFxdWlja30iPkFsbCBtZXNzYWdlczwvYnV0dG9uPmArT2JqZWN0LmVudHJpZXMoc2lnbmFsTGFiZWxzKS5tYXAoKFtrZXksbGFiZWxdKT0+YDxidXR0b24gZGF0YS1xdWljaz0iJHtrZXl9IiBhcmlhLXByZXNzZWQ9IiR7cXVpY2s9PT1rZXl9IiBjbGFzcz0ic2lnbmFsLSR7a2V5fSIgJHttZXNzYWdlU3RhdGU9PT0nbG9hZGVkJz8nJzonZGlzYWJsZWQnfT4ke2xhYmVsfTxzcGFuPiR7bWVzc2FnZVN0YXRlPT09J2xvYWRlZCc\/Zm10KGNvdW50c1trZXldKTptZXNzYWdlU3RhdGU9PT0nZXJyb3InfHwhTk9FVElDX01FU1NBR0VTX1VSTD8n4oCUJzon4oCmJ308L3NwYW4+PC9idXR0b24+YCkuam9pbignJyk7CiBjb25zdCBjaGlwcz1bXTtpZihxdWVyeSljaGlwcy5wdXNoKFsncScsJ1NlYXJjaDogJytxdWVyeV0pO2lmKHF1aWNrKWNoaXBzLnB1c2goWydxdWljaycsc2lnbmFsTGFiZWxzW3F1aWNrXV0pO2lmKHNvdXJjZSljaGlwcy5wdXNoKFsnc291cmNlJyxzb3VyY2VMYWJlbHNbc291cmNlXV0pO2lmKHJvbGUpY2hpcHMucHVzaChbJ3JvbGUnLHJvbGVMYWJlbHNbcm9sZV1dKTtpZihjYXRlZ29yeSljaGlwcy5wdXNoKFsnY2F0ZWdvcnknLGFjdGl2aXR5VHlwZXNbY2F0ZWdvcnldXSk7aWYoZnJvbSljaGlwcy5wdXNoKFsnZnJvbScsJ0Zyb20gJytwcmV0dHkoZnJvbSldKTtpZih0aHJvdWdoKWNoaXBzLnB1c2goWyd0aHJvdWdoJywnVGhyb3VnaCAnK3ByZXR0eSh0aHJvdWdoKV0pO2lmKG1vbnRoKWNoaXBzLnB1c2goWydtb250aCcsbW9udGgrJyBVVEMnXSk7aWYoZGF5KWNoaXBzLnB1c2goWydkYXknLHByZXR0eShkYXkpXSk7aWYocmVsYXRpb24pY2hpcHMucHVzaChbJ2VkZ2UnLCdDb25uZWN0aW9uOiAnKyhyZWxhdGlvbi5ob3N0fHxyZWxhdGlvbi5ub2RlLnZhbHVlKV0pOwogJCgnI254LWFjdGl2ZS1maWx0ZXJzJykuaW5uZXJIVE1MPWNoaXBzLmxlbmd0aD9jaGlwcy5tYXAoKFtrZXksdmFsdWVdKT0+YDxidXR0b24gZGF0YS1jbGVhci1maWx0ZXI9IiR7a2V5fSIgYXJpYS1sYWJlbD0iUmVtb3ZlICR7ZXNjKHZhbHVlKX0iPiR7ZXNjKHZhbHVlKX0gPHNwYW4+w5c8L3NwYW4+PC9idXR0b24+YCkuam9pbignJykrJzxidXR0b24gZGF0YS1jbGVhci1hbGw+Q2xlYXIgYWxsIGZpbHRlcnM8L2J1dHRvbj4nOic8c3Bhbj5BbGwgc2F2ZWQgZGF0ZXMgwrcgYWxsIGVudGl0eSB0eXBlcyDCtyBhbGwgc291cmNlczwvc3Bhbj4nOwogJCgnI254LXNlYXJjaCcpLnZhbHVlPXF1ZXJ5OyQoJyNueC1raW5kJykudmFsdWU9cm9sZTskKCcjbngtc291cmNlJykudmFsdWU9c291cmNlOyQoJyNueC1jYXRlZ29yeScpLnZhbHVlPWNhdGVnb3J5OyQoJyNueC1mcm9tJykudmFsdWU9ZnJvbTskKCcjbngtdGhyb3VnaCcpLnZhbHVlPXRocm91Z2g7CiAkKCcjbngtc2VhcmNoLWhlbHAnKS5pbm5lckhUTUw9bWVzc2FnZVN0YXRlPT09J2xvYWRlZCc\/J1NlYXJjaGVzIG5hbWVzLCB0aXRsZXMgYW5kIHNhdmVkIG1lc3NhZ2UgdGV4dC4gVXNlICJxdW90ZXMiIGZvciBhbiBleGFjdCBwaHJhc2UuIFVucXVvdGVkIHdvcmRzIG11c3QgYWxsIG1hdGNoLic6bWVzc2FnZVN0YXRlPT09J2Vycm9yJz8nTWVzc2FnZSBzZWFyY2ggaXMgdW5hdmFpbGFibGUuIDxidXR0b24gZGF0YS1yZXRyeS1tZXNzYWdlcz5SZXRyeSBsb2FkaW5nIHNhdmVkIHRleHQ8L2J1dHRvbj4nOiFOT0VUSUNfTUVTU0FHRVNfVVJMPydUaGlzIHNuYXBzaG90IGhhcyBubyBtZXNzYWdlIHRleHQuIFNlYXJjaCB1c2VzIG5hbWVzIGFuZCB0aXRsZXMuJzonTG9hZGluZyBzYXZlZCB0ZXh0IGZvciBmdWxsLXRleHQgc2VhcmNo4oCmJzsKfQpmdW5jdGlvbiBzdGF0c01hcmt1cChyZWZzKXtjb25zdCBzPW1vZGVsLnN0YXRzKHJlZnMpO3JldHVybiBgPGRpdiBjbGFzcz0ic3RhdHMiPjxkaXY+PHN0cm9uZz4ke2ZtdChzLnJlY29yZHMpfTwvc3Ryb25nPjxzcGFuPnNvdXJjZSByZWNvcmRzIMK3IGN1cnJlbnQgZmlsdGVyczwvc3Bhbj48L2Rpdj48ZGl2PjxzdHJvbmc+JHtmbXQocy5kaXN0aW5jdCl9PC9zdHJvbmc+PHNwYW4+ZGlzdGluY3Qgbm9ybWFsaXplZCB0ZXh0czwvc3Bhbj48L2Rpdj48ZGl2PjxzdHJvbmc+JHtmbXQocy5hY3RpdmVEYXlzKX08L3N0cm9uZz48c3Bhbj5kYXRlcyB3aXRoIHJlY29yZHM8L3NwYW4+PC9kaXY+PGRpdj48c3Ryb25nPiR7Zm10KHMudW5kYXRlZCl9PC9zdHJvbmc+PHNwYW4+dW5kYXRlZCByZWNvcmRzIGluIHNlbGVjdGlvbjwvc3Bhbj48L2Rpdj48L2Rpdj5gO30KZnVuY3Rpb24gY2FyZChuKXtjb25zdCByZWZzPXNjb3BlZChtb2RlbC5yZWZzKG4sbW9kZSkpLHM9bW9kZWwuc3RhdHMocmVmcyk7cmV0dXJuIGA8YSBjbGFzcz0iZW50aXR5LWNhcmQiIGhyZWY9IiR7bGluayhuKX0iPiR7dGFnKG4scmVmcyl9PGgyPiR7ZXNjKGRpc3BsYXlOYW1lKG4udmFsdWUpKX08L2gyPjxwPiR7Zm10KHMuZGlzdGluY3QpfSBkaXN0aW5jdCB0ZXh0cyDCtyAke2ZtdChzLnJlY29yZHMpfSByZWNvcmRzPC9wPjwvYT5gO30KZnVuY3Rpb24gZW50aXR5TWF0Y2hlcygpe2NvbnN0IHRlcm1zPXF1ZXJ5VGVybXMocXVlcnkpLHJlZnM9c2NvcGVkKG1vZGVsLmFsbFJlY29yZHMpLG91dD1bXTtmb3IoY29uc3QgbiBvZiBtb2RlbC5ub2Rlcyl7aWYocm9sZSYmbW9kZWwucm9sZUluQ29udGV4dChuLHJlZnMpIT09cm9sZSljb250aW51ZTtpZih0ZXJtcy5sZW5ndGgmJiF0ZXJtcy5ldmVyeSh0PT5uLnZhbHVlLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5jbHVkZXModCkpKWNvbnRpbnVlO2NvbnN0IG1hdGNoZXM9bmV3IFNldChbLi4ubi5yZWZzXS5maWx0ZXIoaT0+cmVmcy5oYXMoaSkpKTtpZighbWF0Y2hlcy5zaXplKWNvbnRpbnVlO291dC5wdXNoKHtub2RlOm4scmVmczptYXRjaGVzLGRpc3RpbmN0Om1vZGVsLnN0YXRzKG1hdGNoZXMpLmRpc3RpbmN0fSk7fW91dC5zb3J0KChhLGIpPT5iLmRpc3RpbmN0LWEuZGlzdGluY3R8fGEubm9kZS52YWx1ZS5sb2NhbGVDb21wYXJlKGIubm9kZS52YWx1ZSkpO2NvbnN0IGdyb3Vwcz1uZXcgTWFwKCk7Zm9yKGNvbnN0IGl0ZW0gb2Ygb3V0KXtjb25zdCBob3N0PWhvc3RPZihpdGVtLm5vZGUpLGtleT1ob3N0P21vZGVsLnJvbGVJbkNvbnRleHQoaXRlbS5ub2RlLGl0ZW0ucmVmcykrJ3wnK2hvc3Q6aXRlbS5ub2RlLmlkO2lmKCFncm91cHMuaGFzKGtleSkpZ3JvdXBzLnNldChrZXksey4uLml0ZW0saG9zdCxtZW1iZXJzOltdfSk7Y29uc3QgZz1ncm91cHMuZ2V0KGtleSk7Zy5tZW1iZXJzLnB1c2goaXRlbS5ub2RlKTtmb3IoY29uc3QgaSBvZiBpdGVtLnJlZnMpZy5yZWZzLmFkZChpKTtpZihpdGVtLm5vZGUua2luZD09PSdkb21haW4nKWcubm9kZT1pdGVtLm5vZGU7fXJldHVybiBbLi4uZ3JvdXBzLnZhbHVlcygpXTt9CmZ1bmN0aW9uIGRpcmVjdG9yeSgpe3Nob3coJ2RpcmVjdG9yeScpO2NvbnN0IG1hdGNoZXM9ZW50aXR5TWF0Y2hlcygpOyQoJyNueC1kaXJlY3RvcnknKS5pbm5lckhUTUw9YDxkZXRhaWxzIGNsYXNzPSJtYXRjaGluZy1lbnRpdGllcyIgJHtlbnRpdGllc09wZW4\/J29wZW4nOicnfT48c3VtbWFyeT4ke2ZtdChtYXRjaGVzLmxlbmd0aCl9IG1hdGNoaW5nIGVudGl0aWVzIC8gc2l0ZSBncm91cHMgPHNwYW4+RXhwbG9yZSBuYW1lcyBhbmQgY29ubmVjdGlvbnM8L3NwYW4+PC9zdW1tYXJ5PjxkaXYgY2xhc3M9ImVudGl0eS1yZXN1bHRzIj4ke21hdGNoZXMuc2xpY2UoMCxlbnRpdHlMaW1pdCkubWFwKGc9PmA8ZGl2IGNsYXNzPSJlbnRpdHktcmVzdWx0Ij48YSBocmVmPSIke2xpbmsoZy5ub2RlKX0iPiR7dGFnKGcubm9kZSxnLnJlZnMpfTxzdHJvbmc+JHtlc2MoZy5ob3N0fHxkaXNwbGF5TmFtZShnLm5vZGUudmFsdWUpKX0g4oaXPC9zdHJvbmc+PC9hPiR7Zy5tZW1iZXJzLmxlbmd0aD4xP2A8ZGV0YWlscz48c3VtbWFyeT4ke2cubWVtYmVycy5sZW5ndGh9IGluZGV4ZWQgVVJMcyAvIGRvbWFpbiBsYWJlbHM8L3N1bW1hcnk+JHtnLm1lbWJlcnMubWFwKG49PmA8YSBocmVmPSIke2xpbmsobil9Ij4ke2VzYyhkaXNwbGF5TmFtZShuLnZhbHVlKSl9PC9hPmApLmpvaW4oJycpfTwvZGV0YWlscz5gOicnfTwvZGl2PmApLmpvaW4oJycpfTwvZGl2PiR7bWF0Y2hlcy5sZW5ndGg+ZW50aXR5TGltaXQ\/JzxidXR0b24gZGF0YS1tb3JlLWVudGl0aWVzPlNob3cgbW9yZSBlbnRpdGllczwvYnV0dG9uPic6Jyd9PC9kZXRhaWxzPiR7cmVjb3Jkc01hcmt1cChtb2RlbC5hbGxSZWNvcmRzKX1gO30KZnVuY3Rpb24gcmVjb3JkVGl0bGUoaSl7Y29uc3QgYXV0aG9ycz1hdXRob3JOb2RlcyhpKTtpZihhdXRob3JzLmxlbmd0aClyZXR1cm4gYXV0aG9ycy5tYXAobj0+bi52YWx1ZSkuam9pbignIMK3ICcpO2NvbnN0IHI9bW9kZWwuZGF0YS5yZWNvcmRzW2ldLHRpdGxlPVN0cmluZyhyWzRdfHwnJyk7aWYodGl0bGUmJiEvXlthLWYwLTldezI0LH0kL2kudGVzdCh0aXRsZSkpcmV0dXJuIGRpc3BsYXlOYW1lKHRpdGxlKTtjb25zdCBsaW5lPShtb2RlbC5tZXNzYWdlKGkpPy50ZXh0fHwnJykuc3BsaXQoJ1xuJykubWFwKHQ9PnQudHJpbSgpLnJlcGxhY2UoL15bPSojXHNdK3xbPSojXHNdKyQvZywnJykpLmZpbmQodD0+dC5sZW5ndGg+MTIpO3JldHVybiBsaW5lPydTYXZlZCB0ZXh0OiAnK2xpbmUuc2xpY2UoMCwxMDUpKyhsaW5lLmxlbmd0aD4xMDU\/J+KApic6JycpOidTYXZlZCAnKyhzb3VyY2VMYWJlbHNbclsxXV18fCdzb3VyY2UnKSsnIHJlY29yZCc7fQpmdW5jdGlvbiB3aHlNYXRjaChpKXtjb25zdCBzaWduYWxzPVsuLi5uZXcgU2V0KG1vZGVsLnNpZ25hbHMoaSxxdWljaykubWFwKGg9PmgubGFiZWwpKV07cmV0dXJuIFtxdWVyeT9tb2RlbC5zZWFyY2hNYXRjaGVzKHF1ZXJ5KS5yZWFzb25zLmdldChpKTonJywuLi5zaWduYWxzXS5maWx0ZXIoQm9vbGVhbikuam9pbignIMK3ICcpfHxhY3Rpdml0eVR5cGVzW21vZGVsLmFjdGl2aXR5VHlwZShpKV07fQpmdW5jdGlvbiByZWNvcmRzTWFya3VwKHJlZnMpewogY29uc3QgZmlsdGVyZWQ9c2NvcGVkKHJlZnMpLGdyb3Vwcz1tb2RlbC5ncm91cHMoZmlsdGVyZWQse3NvcnQ6cmVjb3JkU29ydCxxdWVyeSxxdWljayxncm91cDpncm91cFJlcGVhdGVkfSk7CiBpZighZmlsdGVyZWQuaGFzKGFjdGl2ZVJlY29yZCkpe2FjdGl2ZVJlY29yZD1ncm91cHNbMF0\/LmluZGV4Pz9udWxsO3JlYWRlckV4cGFuZGVkPWZhbHNlO2NvbXBhcmVSZWNvcmQ9bnVsbDt9CiBjb25zdCBhY3RpdmVHcm91cD1ncm91cHMuZmluZChnPT5nLnJlZnMuaW5jbHVkZXMoYWN0aXZlUmVjb3JkKSk7CiByZXR1cm4gYDxzZWN0aW9uIGNsYXNzPSJkaXNjb3ZlcnktZXZpZGVuY2UiIGRhdGEtc2VjdGlvbj0ibWVzc2FnZXMiPjxkaXYgY2xhc3M9ImV2aWRlbmNlLXRvb2xiYXIiPjxkaXY+PGgzPiR7cmVsYXRpb24\/J0Nvbm5lY3Rpb24gZXZpZGVuY2UnOnNlbGVjdGVkPy5raW5kPT09J2FnZW50JyYmbW9kZT09PSdhY3Rpdml0eSc\/J0FnZW50IG1lc3NhZ2VzJzonU2F2ZWQgbWVzc2FnZXMnfTwvaDM+PHA+PHN0cm9uZz4ke2ZtdChncm91cHMubGVuZ3RoKX08L3N0cm9uZz4gJHtncm91cFJlcGVhdGVkPyd0ZXh0IGdyb3Vwcyc6J3JlY29yZHMnfSDCtyAke2ZtdChmaWx0ZXJlZC5zaXplKX0gbWF0Y2hpbmcgc291cmNlIHJlY29yZHMke3JlbGF0aW9uPycgwrcgJytlc2MocmVsYXRpb24udHlwZSk6Jyd9PC9wPjwvZGl2PjxkaXYgY2xhc3M9ImFjdGlvbnMiPjxsYWJlbD5Tb3J0IGJ5PHNlbGVjdCBkYXRhLXJlY29yZC1zb3J0PiR7W1sncmVsZXZhbmNlJywnQmVzdCBtYXRjaGVzJ10sWyduZXdlc3QnLCdOZXdlc3QgZmlyc3QnXSxbJ29sZGVzdCcsJ09sZGVzdCBmaXJzdCddLFsncmVwZWF0ZWQnLCdNb3N0IHJlcGVhdGVkJ10sWyd0eXBlJywnQWN0aXZpdHkgdHlwZSddXS5tYXAoKFt2LHRdKT0+YDxvcHRpb24gdmFsdWU9IiR7dn0iICR7dj09PXJlY29yZFNvcnQ\/J3NlbGVjdGVkJzonJ30+JHt0fTwvb3B0aW9uPmApLmpvaW4oJycpfTwvc2VsZWN0PjwvbGFiZWw+PGxhYmVsIGNsYXNzPSJjaGVja2JveCI+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBkYXRhLWdyb3VwICR7Z3JvdXBSZXBlYXRlZD8nY2hlY2tlZCc6Jyd9Pkdyb3VwIHJlcGVhdGVkIHRleHQ8L2xhYmVsPjxidXR0b24gZGF0YS1kb3dubG9hZC1yZWNvcmRzPkNTVjwvYnV0dG9uPjwvZGl2PjwvZGl2PiR7cmVsYXRpb24\/JzxidXR0b24gZGF0YS1jbGVhci1yZWxhdGlvbj7ihpAgQWxsIG1lc3NhZ2VzIGluIGN1cnJlbnQgZmlsdGVyczwvYnV0dG9uPic6Jyd9JHtncm91cHMubGVuZ3RoP2A8ZGl2IGNsYXNzPSJldmlkZW5jZS13b3Jrc3BhY2UiPjxkaXYgY2xhc3M9InJlc3VsdC1saXN0IiBhcmlhLWxhYmVsPSJNYXRjaGluZyBzYXZlZCBtZXNzYWdlcyI+JHtncm91cHMuc2xpY2UoMCxNYXRoLm1heChyZWNvcmRMaW1pdCxncm91cHMuZmluZEluZGV4KGc9PmcucmVmcy5pbmNsdWRlcyhhY3RpdmVSZWNvcmQpKSsxKSkubWFwKGc9Pntjb25zdCBpPWcuaW5kZXgscj1tb2RlbC5kYXRhLnJlY29yZHNbaV0sYWN0aXZlPWcucmVmcy5pbmNsdWRlcyhhY3RpdmVSZWNvcmQpO3JldHVybiBgPGJ1dHRvbiBjbGFzcz0icmVzdWx0LXJvdyIgZGF0YS1yZWFkPSIke2l9IiBhcmlhLXByZXNzZWQ9IiR7YWN0aXZlfSI+PHNwYW4gY2xhc3M9InJlc3VsdC10b3AiPjxzcGFuPiR7ZXNjKHNvdXJjZUxhYmVsc1tyWzFdXXx8clsxXSl9PC9zcGFuPjx0aW1lPiR7cHJldHR5KHJbMl0pfTwvdGltZT48L3NwYW4+PHN0cm9uZz4ke2VzYyhyZWNvcmRUaXRsZShpKSl9PC9zdHJvbmc+PHNwYW4gY2xhc3M9InJlc3VsdC1yZWFzb24iPiR7ZXNjKHdoeU1hdGNoKGkpKX08L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdC1zbmlwcGV0Ij4ke3NuaXBwZXRNYXJrdXAoaSl8fCdTYXZlZCB0ZXh0IHVuYXZhaWxhYmxlLid9PC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQtY291bnQiPiR7Zy5yZWZzLmxlbmd0aD4xP2ZtdChnLnJlZnMubGVuZ3RoKSsnIHJlY29yZHMgwrcgZ3JvdXBlZCBub3JtYWxpemVkIHRleHQnOicxIHNvdXJjZSByZWNvcmQnfTwvc3Bhbj48L2J1dHRvbj5gO30pLmpvaW4oJycpfSR7Z3JvdXBzLmxlbmd0aD5yZWNvcmRMaW1pdD8nPGJ1dHRvbiBjbGFzcz0ibW9yZSIgZGF0YS1tb3JlLXJlY29yZHM+U2hvdyAzMCBtb3JlPC9idXR0b24+JzonJ308L2Rpdj48YXJ0aWNsZSBjbGFzcz0icmVhZGluZy1wYW5lIiBkYXRhLXJlYWRlci1pbmRleD0iJHthY3RpdmVSZWNvcmR9IiB0YWJpbmRleD0iLTEiIGFyaWEtbGFiZWw9IlNlbGVjdGVkIHNhdmVkIG1lc3NhZ2UiPiR7cmVhZGVyTWFya3VwKGFjdGl2ZVJlY29yZCxhY3RpdmVHcm91cCxncm91cHMuaW5kZXhPZihhY3RpdmVHcm91cCksZ3JvdXBzLmxlbmd0aCl9PC9hcnRpY2xlPjwvZGl2PmA6YDxkaXYgY2xhc3M9ImVtcHR5Ij4ke21lc3NhZ2VTdGF0ZT09PSdsb2FkaW5nJz8nTG9hZGluZyBtZXNzYWdlc+KApic6bWVzc2FnZVN0YXRlPT09J2Vycm9yJz8nU2F2ZWQgdGV4dCBmYWlsZWQgdG8gbG9hZC4gUmV0cnkgYWJvdmUgYmVmb3JlIGludGVycHJldGluZyB0aGVzZSByZXN1bHRzLic6J05vIHNhdmVkIG1lc3NhZ2VzIG1hdGNoIHRoZXNlIGZpbHRlcnMuJ308cD5DbGVhciBhIGZpbHRlciBvciB0cnkgYSBzaG9ydGVyIHNlYXJjaC48L3A+PC9kaXY+YH08cCBjbGFzcz0iY2hhcnQtbm90ZSI+R3JvdXBzIHVzZSBub3JtYWxpemVkIHRleHQgZmluZ2VycHJpbnRzLiBBbGwgdW5kZXJseWluZyByZWNvcmRzIHJlbWFpbiBhdmFpbGFibGUuIERpc3RpbmN0IHRleHRzIGRvIG5vdCBlc3RhYmxpc2ggaW5kZXBlbmRlbnQgYWN0aW9ucy48L3A+PC9zZWN0aW9uPmA7Cn0KZnVuY3Rpb24gcmVhZGFibGVUZXh0KHRleHQsaSl7bGV0IG9mZnNldD0wO3JldHVybiB0ZXh0LnNwbGl0KC8oXG5ccypcbikvKS5tYXAocGFydD0+e2NvbnN0IHN0YXJ0PW9mZnNldDtvZmZzZXQrPXBhcnQubGVuZ3RoO2lmKCFwYXJ0LnRyaW0oKSlyZXR1cm4gJyc7Y29uc3QgY29kZT0vXig\/OlxzKig\/Olx7fFxbfDxcLz9bYS16XXxpbXBvcnQgfGZyb20gXHcrIGltcG9ydCB8ZGVmIHxmdW5jdGlvbiB8Y29uc3QgfGxldCB8Y3VybCB8R0VUIHxQT1NUIHxcJCB8YGBgKSkvaS50ZXN0KHBhcnQpO3JldHVybiBgPCR7Y29kZT8ncHJlJzoncCd9IGNsYXNzPSIke2NvZGU\/J3NvdXJjZS1jb2RlJzonc291cmNlLXByb3NlJ30iPiR7aGlnaGxpZ2h0KHBhcnQsaSxzdGFydCl9PC8ke2NvZGU\/J3ByZSc6J3AnfT5gO30pLmpvaW4oJycpO30KZnVuY3Rpb24gZGlmZk1hcmt1cChhLGIpe2NvbnN0IGJlZm9yZT1tb2RlbC5tZXNzYWdlKGEpPy50ZXh0fHwnJyxhZnRlcj1tb2RlbC5tZXNzYWdlKGIpPy50ZXh0fHwnJztpZihiZWZvcmU9PT1hZnRlcilyZXR1cm4gJzxwPlRoZXNlIHJlY29yZHMgY29udGFpbiB0aGUgc2FtZSBzYXZlZCB0ZXh0LjwvcD4nO2xldCBzdGFydD0wO3doaWxlKHN0YXJ0PE1hdGgubWluKGJlZm9yZS5sZW5ndGgsYWZ0ZXIubGVuZ3RoKSYmYmVmb3JlW3N0YXJ0XT09PWFmdGVyW3N0YXJ0XSlzdGFydCsrO2xldCB0YWlsPTA7d2hpbGUodGFpbDxNYXRoLm1pbihiZWZvcmUubGVuZ3RoLGFmdGVyLmxlbmd0aCktc3RhcnQmJmJlZm9yZS5hdCgtMS10YWlsKT09PWFmdGVyLmF0KC0xLXRhaWwpKXRhaWwrKztyZXR1cm4gYDxwPkxpdGVyYWwgY2hhbmdlZCBzcGFuIGJldHdlZW4gdGhlIHNlbGVjdGVkIHJlY29yZHMuIFRoaXMgaXMgYSB0ZXh0IGNvbXBhcmlzb24sIG5vdCBhIHJlY29uc3RydWN0ZWQgcGFnZS48L3A+PGRpdiBjbGFzcz0idGV4dC1kaWZmIj48ZGl2PjxiPkNvbXBhcmlzb24gcmVjb3JkPC9iPjxwcmU+JHtlc2MoYmVmb3JlLnNsaWNlKHN0YXJ0LGJlZm9yZS5sZW5ndGgtdGFpbCl8fCcoZW1wdHkpJyl9PC9wcmU+PC9kaXY+PGRpdj48Yj5TZWxlY3RlZCByZWNvcmQ8L2I+PHByZT4ke2VzYyhhZnRlci5zbGljZShzdGFydCxhZnRlci5sZW5ndGgtdGFpbCl8fCcoZW1wdHkpJyl9PC9wcmU+PC9kaXY+PC9kaXY+YDt9CmZ1bmN0aW9uIHJlYWRlck1hcmt1cChpLGdyb3VwLHBvc2l0aW9uPTAsdG90YWw9MSl7aWYoaT09PW51bGwpcmV0dXJuICcnO2NvbnN0IHI9bW9kZWwuZGF0YS5yZWNvcmRzW2ldLG1lc3NhZ2U9bW9kZWwubWVzc2FnZShpKSxhdXRob3JzPWF1dGhvck5vZGVzKGkpLGhpdHM9bW9kZWwuc2lnbmFscyhpLHF1aWNrKSx0ZXh0PW1lc3NhZ2U\/LnRleHR8fCcnLHByZXZpZXc9dGV4dC5zbGljZSgwLHJlYWRlckV4cGFuZGVkP3RleHQubGVuZ3RoOjEyMDAwKTtjb25zdCBub2Rlcz1tb2RlbC5ieVJlY29yZFtpXS5tYXAoKFtuXSk9Pm1vZGVsLm5vZGVzW25dKSxlbnRpdHlMaW5rcz1bLi4ubmV3IE1hcChub2Rlcy5tYXAobj0+W24uaWQsbl0pKS52YWx1ZXMoKV07Y29uc3QgdXJscz1bLi4ubmV3IFNldCgodGV4dC5tYXRjaCgvaHR0cHM\/OlwvXC9bXlxzPD4iJ10rL2cpfHxbXSkpXS5zbGljZSgwLDEyKTsKIHJldHVybiBgPGRpdiBjbGFzcz0icmVhZGVyLXRvcCI+PHAgY2xhc3M9ImV5ZWJyb3ciPiR7ZXNjKHNvdXJjZUxhYmVsc1tyWzFdXXx8clsxXSl9IMK3IHNhdmVkIGV2aWRlbmNlPC9wPjxkaXYgY2xhc3M9ImFjdGlvbnMiPjxidXR0b24gZGF0YS1yZWFkZXItcHJldiBhcmlhLWxhYmVsPSJQcmV2aW91cyByZXN1bHQiICR7cG9zaXRpb249PT0wPydkaXNhYmxlZCc6Jyd9PuKGkTwvYnV0dG9uPjxidXR0b24gZGF0YS1yZWFkZXItbmV4dCBhcmlhLWxhYmVsPSJOZXh0IHJlc3VsdCIgJHtwb3NpdGlvbj09PXRvdGFsLTE\/J2Rpc2FibGVkJzonJ30+4oaTPC9idXR0b24+PGJ1dHRvbiBkYXRhLWNsb3NlLXJlYWRlciBjbGFzcz0ibW9iaWxlLXJlYWRlci1iYWNrIj7ihpAgUmVzdWx0czwvYnV0dG9uPjxidXR0b24gZGF0YS1jb3B5LWxpbms+Q29weSBsaW5rPC9idXR0b24+PC9kaXY+PC9kaXY+PGgyPiR7ZXNjKHJlY29yZFRpdGxlKGkpKX08L2gyPjxwIGNsYXNzPSJyZWFkZXItZGF0ZSI+JHtyWzJdP2VzYyhyWzJdLnJlcGxhY2UoJ1QnLCcgJykucmVwbGFjZSgnWicsJycpKSsnIFVUQyc6J1VuZGF0ZWQnfSDCtyAke2VzYyhhY3Rpdml0eVR5cGVzW21vZGVsLmFjdGl2aXR5VHlwZShpKV0pfTwvcD48cCBjbGFzcz0icmVhZGVyLWNvbnRleHQiPiR7YXV0aG9ycy5sZW5ndGg\/J1NhdmVkIHRleHQgY2FycnlpbmcgdGhlIGF1dGhvciBsYWJlbCAnK2VzYyhhdXRob3JzLm1hcChuPT5uLnZhbHVlKS5qb2luKCcsICcpKSsnLic6J05vIGF1dGhvciBsYWJlbCBpcyBhdHRhY2hlZCB0byB0aGlzIHJlY29yZC4nfSAke2VzYyhtZXNzYWdlPy5zY29wZXx8J1RleHQgdW5hdmFpbGFibGUnKX0ke21lc3NhZ2U\/LnJlZGFjdGVkPycgwrcgcmVkYWN0aW9ucyBhcHBsaWVkJzonJ30uPC9wPiR7L15bYS1mMC05XXsyNCx9JC9pLnRlc3Qocls0XXx8clswXSk\/Jyc6YDxwIGNsYXNzPSJyZWFkZXItbG9jYXRpb24iPiR7ZXNjKGRpc3BsYXlOYW1lKHJbNF18fHJbMF0pKX08L3A+YH0ke3VybERldGFpbHMocls0XXx8JycpfSR7cXVlcnl8fGhpdHMubGVuZ3RoP2A8ZGl2IGNsYXNzPSJtYXRjaC1leHBsYW5hdGlvbiI+PHN0cm9uZz5XaHkgdGhpcyBpcyBzaG93bjwvc3Ryb25nPjxwPiR7ZXNjKHdoeU1hdGNoKGkpKX08L3A+PGJsb2NrcXVvdGU+JHtzbmlwcGV0TWFya3VwKGksNTAwKX08L2Jsb2NrcXVvdGU+JHtoaXRzLmxlbmd0aD9gPGRldGFpbHM+PHN1bW1hcnk+TWF0Y2hlZCB3b3JkaW5nIMK3ICR7aGl0cy5sZW5ndGh9IGV4Y2VycHRzPC9zdW1tYXJ5PiR7aGl0cy5zbGljZSgwLDE4KS5tYXAoaD0+YDxwPjxiPiR7ZXNjKGgubGFiZWwpfTwvYj46IOKAnCR7ZXNjKGgucXVvdGUpfeKAnTwvcD5gKS5qb2luKCcnKX08L2RldGFpbHM+YDonJ308L2Rpdj5gOicnfTxkaXYgY2xhc3M9InJlYWRlci10YWJzLW5vdGUiPlJlYWRhYmxlIHZpZXcgwrcgaGlnaGxpZ2h0cyBzaG93IG1hdGNoaW5nIHdvcmRpbmc8L2Rpdj4ke21lc3NhZ2U\/YDxkaXYgY2xhc3M9Im1lc3NhZ2UtYm9keSI+JHt0ZXh0P3JlYWRhYmxlVGV4dChwcmV2aWV3LGkpOic8cD5ObyBhZGRlZCBvciByZXBsYWNlZCB0ZXh0IGluIHRoaXMgcmVjb3JkLjwvcD4nfSR7cHJldmlldy5sZW5ndGg8dGV4dC5sZW5ndGg\/JzxidXR0b24gZGF0YS1leHBhbmQtbWVzc2FnZT5SZWFkIHRoZSByZXN0IG9mIHRoaXMgbWVzc2FnZTwvYnV0dG9uPic6Jyd9PC9kaXY+PGRldGFpbHMgY2xhc3M9ImV4YWN0LXRleHQiPjxzdW1tYXJ5PkV4YWN0IHNhdmVkIHRleHQgwrcgJHtmbXQodGV4dC5sZW5ndGgpfSBjaGFyYWN0ZXJzJHttZXNzYWdlLnJlZGFjdGVkPycgwrcgYWxyZWFkeSByZWRhY3RlZCc6Jyd9PC9zdW1tYXJ5PjxwcmUgY2xhc3M9Im1lc3NhZ2UtdGV4dCI+JHtlc2ModGV4dCl9PC9wcmU+PC9kZXRhaWxzPmA6YDxwPiR7bWVzc2FnZVN0YXRlPT09J2Vycm9yJz8nTWVzc2FnZSBkb3dubG9hZCBmYWlsZWQuJzptZXNzYWdlU3RhdGU9PT0nbG9hZGVkJz8nTm8gc2F2ZWQgdGV4dCBpcyBhdmFpbGFibGUuJzonTG9hZGluZyBzYXZlZCB0ZXh04oCmJ308L3A+YH0ke3VybHMubGVuZ3RoP2A8ZGV0YWlscyBjbGFzcz0ibWVzc2FnZS11cmxzIj48c3VtbWFyeT5VUkxzIGluIHRoaXMgbWVzc2FnZSDCtyAke3VybHMubGVuZ3RofSR7dXJscy5sZW5ndGg9PT0xMj8nIHNob3duJzonJ308L3N1bW1hcnk+JHt1cmxzLm1hcCh1cmw9PmA8ZGl2Pjxjb2RlPiR7ZXNjKGRpc3BsYXlOYW1lKHVybCkpfTwvY29kZT4ke3VybERldGFpbHModXJsKX08L2Rpdj5gKS5qb2luKCcnKX08cD5TaG93biBhcyB0ZXh0OyB0aGVzZSBzaXRlcyBhcmUgbm90IG9wZW5lZC48L3A+PC9kZXRhaWxzPmA6Jyd9JHtncm91cD8ucmVmcy5sZW5ndGg+MT9gPGRldGFpbHMgY2xhc3M9InJldmlzaW9uLWxpc3QiPjxzdW1tYXJ5PiR7Zm10KGdyb3VwLnJlZnMubGVuZ3RoKX0gdW5kZXJseWluZyByZWNvcmRzIMK3IGluc3BlY3QgdmVyc2lvbnM8L3N1bW1hcnk+PHA+R3JvdXBlZCBieSB0aGUgaW5kZXjigJlzIG5vcm1hbGl6ZWQgdGV4dCBmaW5nZXJwcmludC4gU291cmNlLCBhdXRob3IgYW5kIGRhdGUgYXJlIHJldGFpbmVkIGZvciBldmVyeSByZWNvcmQuPC9wPiR7Z3JvdXAucmVmcy5tYXAoaj0+YDxkaXY+PGJ1dHRvbiBkYXRhLXJlYWQ9IiR7an0iICR7aj09PWk\/J2Rpc2FibGVkJzonJ30+JHtwcmV0dHkobW9kZWwuZGF0YS5yZWNvcmRzW2pdWzJdKX0gwrcgJHtlc2MocmVjb3JkVGl0bGUoaikpfTwvYnV0dG9uPjxidXR0b24gZGF0YS1jb21wYXJlLXJlY29yZD0iJHtqfSIgJHtqPT09aT8nZGlzYWJsZWQnOicnfT5Db21wYXJlIHRleHQ8L2J1dHRvbj48c21hbGw+JHtlc2MobW9kZWwuZGF0YS5yZWNvcmRzW2pdWzBdKX08L3NtYWxsPjwvZGl2PmApLmpvaW4oJycpfTwvZGV0YWlscz5gOicnfSR7Y29tcGFyZVJlY29yZCE9PW51bGw\/YDxkaXYgY2xhc3M9ImNvbXBhcmlzb24iPjxoMz5UZXh0IGNvbXBhcmlzb248L2gzPiR7ZGlmZk1hcmt1cChjb21wYXJlUmVjb3JkLGkpfTwvZGl2PmA6Jyd9PGRldGFpbHMgY2xhc3M9InJlY29yZC1wcm92ZW5hbmNlIj48c3VtbWFyeT5Tb3VyY2UgJiByZWNvcmQgZGV0YWlsczwvc3VtbWFyeT48ZGw+PGR0PlJlY29yZDwvZHQ+PGRkPiR7ZXNjKHJbMF0pfTwvZGQ+PGR0PkRhdGUgYmFzaXM8L2R0PjxkZD4ke2VzYyhyWzVdKX08L2RkPjxkdD5Tb3VyY2UgdGl0bGU8L2R0PjxkZD4ke2VzYyhyWzRdKX08L2RkPjxkdD5BY3Rpdml0eSB0eXBlPC9kdD48ZGQ+JHtlc2MoYWN0aXZpdHlUeXBlc1ttb2RlbC5hY3Rpdml0eVR5cGUoaSldKX0gwrcgZmlyc3QgbWF0Y2hpbmcgdGV4dCBydWxlPC9kZD48L2RsPjwvZGV0YWlscz48c2VjdGlvbiBjbGFzcz0icmVhZGVyLWVudGl0aWVzIj48aDM+RXhwbG9yZSB0aGUgZW50aXRpZXMgaW4gdGhpcyByZWNvcmQ8L2gzPjxwPk9wZW4gYW4gZW50aXR5IGZvciBpdHMgbWVzc2FnZXMsIHRpbWVsaW5lIGFuZCByZWxhdGlvbnNoaXBzLjwvcD4ke2VudGl0eUxpbmtzLnNsaWNlKDAsMzApLm1hcChuPT5gPGEgaHJlZj0iJHtsaW5rKG4pfSI+JHt0YWcobixuZXcgU2V0KFtpXSkpfTxzcGFuPiR7ZXNjKGRpc3BsYXlOYW1lKG4udmFsdWUpKX0g4oaXPC9zcGFuPjwvYT5gKS5qb2luKCcnKX0ke2VudGl0eUxpbmtzLmxlbmd0aD4zMD9gPGRldGFpbHM+PHN1bW1hcnk+JHtlbnRpdHlMaW5rcy5sZW5ndGgtMzB9IG1vcmUgZW50aXRpZXM8L3N1bW1hcnk+JHtlbnRpdHlMaW5rcy5zbGljZSgzMCkubWFwKG49PmA8YSBocmVmPSIke2xpbmsobil9Ij4ke3RhZyhuLG5ldyBTZXQoW2ldKSl9PHNwYW4+JHtlc2MoZGlzcGxheU5hbWUobi52YWx1ZSkpfTwvc3Bhbj48L2E+YCkuam9pbignJyl9PC9kZXRhaWxzPmA6Jyd9PC9zZWN0aW9uPmA7Cn0KCmZ1bmN0aW9uIGNoYXJ0TWFya3VwKG5vZGVzKXsKIGNvbnN0IGRheXM9bW9udGhEYXlzKG1vbnRoKSxzZXJpZXM9bm9kZXMubGVuZ3RoP25vZGVzLm1hcChuPT4oe25hbWU6bi52YWx1ZSxyZWZzOm1vZGVsLnJlZnMobixtb2RlKX0pKTpjb3JwdXNTY29wZT09PSdhbGwnP1suLi5tb2RlbC5zb3VyY2VzXS5tYXAoKFtrZXkscmVmc10pPT4oe25hbWU6c291cmNlTGFiZWxzW2tleV0scmVmc30pKTpbe25hbWU6c291cmNlTGFiZWxzW2NvcnB1c1Njb3BlXSxyZWZzOmNvcnB1c1JlZnMoKX1dOwogZm9yKGNvbnN0IHMgb2Ygc2VyaWVzKXtzLnJlZnM9bW9kZWwuZmlsdGVyKHMucmVmcyxzY29wZSgpKTtzLmRheXM9bW9kZWwuZGFpbHkocy5yZWZzLG1vbnRoKTtzLm1vbnRoUmVmcz1tb2RlbC5maWx0ZXIocy5yZWZzLHttb250aH0pO3Muc3RhdHM9bW9kZWwuc3RhdHMocy5tb250aFJlZnMpO30KIGNvbnN0IG1vbnRoUmVmcz1uZXcgU2V0KHNlcmllcy5mbGF0TWFwKHM9PlsuLi5zLm1vbnRoUmVmc10pKSxzdGF0cz1tb2RlbC5zdGF0cyhtb250aFJlZnMpLHNlbGVjdGVkQ291bnQ9ZGF5P21vZGVsLmZpbHRlcihtb250aFJlZnMse2RheX0pLnNpemU6MDsKIGNvbnN0IG1heD1NYXRoLm1heCgxLC4uLnNlcmllcy5mbGF0TWFwKHM9PnMuZGF5cy5tYXAoZD0+ZC5jb3VudCkpKSxsb2c9c2NhbGU9PT0nbG9nJyxtYWduaXR1ZGU9MTAqKk1hdGguZmxvb3IoTWF0aC5sb2cxMChtYXgvNSkpLHN0ZXA9TWF0aC5tYXgoMSxNYXRoLmNlaWwobWF4LzUvbWFnbml0dWRlKSptYWduaXR1ZGUpLGNlaWxpbmc9bG9nP01hdGgubWF4KDEwLDEwKipNYXRoLmNlaWwoTWF0aC5sb2cxMChtYXgpKSk6c3RlcCo1OwogY29uc3QgaGVpZ2h0PW49PjEwMCoobG9nP01hdGgubG9nMXAobikvTWF0aC5sb2cxcChjZWlsaW5nKTpuL2NlaWxpbmcpLHRpY2tzPWxvZz9bMCwxLC4uLkFycmF5LmZyb20oe2xlbmd0aDpNYXRoLmxvZzEwKGNlaWxpbmcpfSwoXyxpKT0+MTAqKihpKzEpKV06QXJyYXkuZnJvbSh7bGVuZ3RoOjZ9LChfLGkpPT5jZWlsaW5nKmkvNSk7CiBjb25zdCBtb250aExhYmVsPW5ldyBEYXRlKG1vbnRoKyctMDFUMDA6MDA6MDBaJykudG9Mb2NhbGVEYXRlU3RyaW5nKHVuZGVmaW5lZCx7bW9udGg6J2xvbmcnLHllYXI6J251bWVyaWMnLHRpbWVab25lOidVVEMnfSk7CiByZXR1cm4gYDxzZWN0aW9uIGNsYXNzPSJwYW5lbCBhY3Rpdml0eS1jaGFydCIgZGF0YS1zZWN0aW9uPSJ0aW1lbGluZSI+PGRpdiBjbGFzcz0icGFuZWwtaGVhZCI+PGRpdj48cCBjbGFzcz0iZXllYnJvdyI+QWN0aXZpdHkgdGltZWxpbmUgwrcgVVRDPC9wPjxoMyBjbGFzcz0iY2hhcnQtbW9udGgtdGl0bGUiPiR7ZXNjKG1vbnRoTGFiZWwpfTwvaDM+PHA+JHtjYXRlZ29yeT9lc2MoYWN0aXZpdHlUeXBlc1tjYXRlZ29yeV0pOidBbGwgYWN0aXZpdHkgdHlwZXMnfSDCtyBmdWxsIGNhbGVuZGFyIG1vbnRoPC9wPjwvZGl2PjxkaXYgY2xhc3M9ImNoYXJ0LWNvbnRyb2xzIj48YnV0dG9uIGRhdGEtbW9udGgtc3RlcD0iLTEiIGFyaWEtbGFiZWw9IlByZXZpb3VzIG1vbnRoIj7ihpA8L2J1dHRvbj48bGFiZWw+TW9udGg8aW5wdXQgZGF0YS1tb250aCB0eXBlPSJtb250aCIgdmFsdWU9IiR7bW9udGh9IiByZXF1aXJlZD48L2xhYmVsPjxidXR0b24gZGF0YS1tb250aC1zdGVwPSIxIiBhcmlhLWxhYmVsPSJOZXh0IG1vbnRoIj7ihpI8L2J1dHRvbj48bGFiZWw+U2NhbGU8c2VsZWN0IGRhdGEtc2NhbGU+PG9wdGlvbiB2YWx1ZT0ibGluZWFyIiAkeyFsb2c\/J3NlbGVjdGVkJzonJ30+TGluZWFyPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0ibG9nIiAke2xvZz8nc2VsZWN0ZWQnOicnfT5Mb2dhcml0aG1pYzwvb3B0aW9uPjwvc2VsZWN0PjwvbGFiZWw+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0iY2hhcnQtc3VtbWFyeSI+PGRpdj48c3Ryb25nPiR7Zm10KHN0YXRzLnJlY29yZHMpfTwvc3Ryb25nPjxzcGFuPnNvdXJjZSByZWNvcmRzPC9zcGFuPjwvZGl2PjxkaXY+PHN0cm9uZz4ke2ZtdChzdGF0cy5hY3RpdmVEYXlzKX08L3N0cm9uZz48c3Bhbj5kYXRlcyB3aXRoIHJlY29yZHM8L3NwYW4+PC9kaXY+PGRpdj48c3Ryb25nPiR7Zm10KHN0YXRzLmRpc3RpbmN0KX08L3N0cm9uZz48c3Bhbj5kaXN0aW5jdCB0ZXh0czwvc3Bhbj48L2Rpdj48cD4ke2RheT9gPGJ1dHRvbiBkYXRhLWNsZWFyLWRheSBjbGFzcz0ic2VsZWN0ZWQtZGF0ZSI+JHtwcmV0dHkoZGF5KX0gwrcgJHtmbXQoc2VsZWN0ZWRDb3VudCl9IHNlbGVjdGVkIDxzcGFuIGFyaWEtaGlkZGVuPSJ0cnVlIj7Dlzwvc3Bhbj48L2J1dHRvbj5gOidIb3ZlciBmb3IgZGV0YWlscy4gU2VsZWN0IGEgZGF5IHRvIHJlYWQgaXRzIG1lc3NhZ2VzLid9PC9wPjwvZGl2PiR7c2VsZWN0ZWQ\/LmtpbmQ9PT0nYWdlbnQnP2A8ZGl2IGNsYXNzPSJjb21wYXJlIj4ke25vZGVzLm1hcCgobixpKT0+YDxzcGFuIGNsYXNzPSJjaGlwIiBzdHlsZT0iLS1sYW5lLWNvbG9yOiR7Y29sb3JbaV19Ij4ke2VzYyhuLnZhbHVlKX0ke2k\/YCA8YnV0dG9uIGRhdGEtcmVtb3ZlLWNvbXBhcmU9IiR7bi5pZH0iIGFyaWEtbGFiZWw9IlJlbW92ZSAke2VzYyhuLnZhbHVlKX0iPsOXPC9idXR0b24+YDonJ308L3NwYW4+YCkuam9pbignJyl9JHtub2Rlcy5sZW5ndGg8ND9gPHNlbGVjdCBkYXRhLWNvbXBhcmUgYXJpYS1sYWJlbD0iQ29tcGFyZSBhbiBhZ2VudCBsYWJlbCI+PG9wdGlvbiB2YWx1ZT0iIj4rIENvbXBhcmUgYW4gYWdlbnQgbGFiZWw8L29wdGlvbj4ke21vZGVsLmxpc3QoJycsJ2FnZW50JykuZmlsdGVyKG49Pm4uYXV0aG9ycy5zaXplJiYhbm9kZXMuc29tZSh4PT54LmlkPT09bi5pZCkpLm1hcChuPT5gPG9wdGlvbiB2YWx1ZT0iJHtuLmlkfSI+JHtlc2Mobi52YWx1ZSl9PC9vcHRpb24+YCkuam9pbignJyl9PC9zZWxlY3Q+YDonJ308L2Rpdj5gOicnfTxkaXYgY2xhc3M9ImNoYXJ0LXNjcm9sbCI+PGRpdiBjbGFzcz0iY2hhcnQiPiR7c2VyaWVzLm1hcCgocyxpKT0+YDxkaXYgY2xhc3M9ImNoYXJ0LWxhbmUiIHN0eWxlPSItLWxhbmUtY29sb3I6JHtjb2xvcltpXX0iPjxkaXYgY2xhc3M9ImxhbmUtaGVhZGluZyI+PHNwYW4+PGk+PC9pPiR7ZXNjKHMubmFtZSl9PC9zcGFuPjxzcGFuPiR7Zm10KHMuc3RhdHMucmVjb3Jkcyl9IHJlY29yZHMgwrcgJHtmbXQocy5zdGF0cy5hY3RpdmVEYXlzKX0gZGF0ZXM8L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0ibGFuZSI+JHt0aWNrcy5tYXAodD0+YDxkaXYgY2xhc3M9ImdyaWRsaW5lIiBzdHlsZT0iYm90dG9tOiR7aGVpZ2h0KHQpfSUiPjxzcGFuPiR7Zm10KHQpfTwvc3Bhbj48L2Rpdj5gKS5qb2luKCcnKX0ke3MuZGF5cy5tYXAoKGQsaik9Pntjb25zdCB3ZWVrZW5kPVswLDZdLmluY2x1ZGVzKG5ldyBEYXRlKGQuZGF0ZSsnVDAwOjAwOjAwWicpLmdldFVUQ0RheSgpKSxjb3VudHM9bW9kZWwudHlwZUNvdW50cyhtb2RlbC5maWx0ZXIocy5yZWZzLHtkYXk6ZC5kYXRlfSkpO3JldHVybiBgPGJ1dHRvbiBjbGFzcz0iYmFyLXNsb3QgJHt3ZWVrZW5kPyd3ZWVrZW5kJzonJ30gJHtkYXk9PT1kLmRhdGV8fCFkYXk\/Jyc6J2RpbW1lZCd9IiBkYXRhLWRheT0iJHtkLmRhdGV9IiBhcmlhLXByZXNzZWQ9IiR7ZC5kYXRlPT09ZGF5fSIgc3R5bGU9ImxlZnQ6JHsxMDAqai9kYXlzLmxlbmd0aH0lO3dpZHRoOiR7MTAwL2RheXMubGVuZ3RofSUiIGFyaWEtbGFiZWw9IiR7ZXNjKHMubmFtZSl9LCAke2QuZGF0ZX0sICR7Zm10KGQuY291bnQpfSByZWNvcmRzLiBTaG93IG1lc3NhZ2VzIGZvciB0aGlzIGRhdGUuIj48c3BhbiBjbGFzcz0iYmFyIiBzdHlsZT0iaGVpZ2h0OiR7aGVpZ2h0KGQuY291bnQpfSUiPjwvc3Bhbj4ke2QuY291bnQ\/YDxzcGFuIGNsYXNzPSJiYXItY291bnQiIHN0eWxlPSJib3R0b206Y2FsYygke2hlaWdodChkLmNvdW50KX0lICsgNnB4KSI+JHtmbXQoZC5jb3VudCl9PC9zcGFuPmA6JzxzcGFuIGNsYXNzPSJ6ZXJvLW1hcmsiPjwvc3Bhbj4nfTxzcGFuIGNsYXNzPSJkYXktdG9vbHRpcCAke2o8ND8nYXQtc3RhcnQnOmo+ZGF5cy5sZW5ndGgtNT8nYXQtZW5kJzonJ30iIGFyaWEtaGlkZGVuPSJ0cnVlIj48Yj4ke3ByZXR0eShkLmRhdGUpfTwvYj48c3Ryb25nPiR7Zm10KGQuY291bnQpfSAke2QuY291bnQ9PT0xPydyZWNvcmQnOidyZWNvcmRzJ308L3N0cm9uZz4ke09iamVjdC5lbnRyaWVzKGNvdW50cykuZmlsdGVyKChbLG5dKT0+bikubWFwKChba2V5LG5dKT0+YDxzcGFuPiR7ZXNjKGFjdGl2aXR5VHlwZXNba2V5XSl9PGVtPiR7Zm10KG4pfTwvZW0+PC9zcGFuPmApLmpvaW4oJycpfTxzbWFsbD5TZWxlY3QgdG8gcmVhZCBzYXZlZCBtZXNzYWdlczwvc21hbGw+PC9zcGFuPjwvYnV0dG9uPmA7fSkuam9pbignJyl9JHshcy5zdGF0cy5yZWNvcmRzPyc8cCBjbGFzcz0iY2hhcnQtZW1wdHkiPk5vIG1hdGNoaW5nIGRhdGVkIHJlY29yZHMgdGhpcyBtb250aDwvcD4nOicnfTwvZGl2PjwvZGl2PmApLmpvaW4oJycpfTxkaXYgY2xhc3M9ImF4aXMgY2FsZW5kYXItYXhpcyI+JHtkYXlzLm1hcCgoZCxpKT0+YDxzcGFuIGNsYXNzPSIke1swLDcsMTQsMjEsMjhdLmluY2x1ZGVzKGkpPyd3ZWVrLWxhYmVsJzonJ30iIHN0eWxlPSJsZWZ0OiR7KGkrLjUpL2RheXMubGVuZ3RoKjEwMH0lIj4ke2krMX08L3NwYW4+YCkuam9pbignJyl9PC9kaXY+PC9kaXY+PC9kaXY+PHAgY2xhc3M9ImNoYXJ0LW5vdGUiPkFsbCAke2RheXMubGVuZ3RofSBkYXlzIHNob3duIMK3ICR7bG9nPydsb2dhcml0aG1pYyc6J2xpbmVhcid9IHNjYWxlIHNoYXJlZCBhY3Jvc3MgbGFuZXMuIENvdW50cyBpbmNsdWRlIHJlcGVhdGVkIHJldmlzaW9ucy4gWmVybyBtZWFucyBubyBtYXRjaGluZyByZWNvcmQgaW4gdGhpcyBzbmFwc2hvdC4gUmVjb3JkIGRhdGVzIGRvIG5vdCBlc3RhYmxpc2ggdmlzaXRzLCBpbmRlcGVuZGVudCBhY3Rpb25zLCBvciB2ZXJpZmllZCBhZ2VudHMuPC9wPjwvc2VjdGlvbj5gOwp9CgpmdW5jdGlvbiBuZXR3b3JrKGNlbnRlcixyZWxhdGlvbnMpewogY29uc3QgaXRlbXM9cmVsYXRpb25zLnNsaWNlKDAsOCksbGVmdD1pdGVtcy5zbGljZSgwLDQpLHJpZ2h0PWl0ZW1zLnNsaWNlKDQpLGNvdW50PU1hdGgubWF4KGxlZnQubGVuZ3RoLHJpZ2h0Lmxlbmd0aCksaGVpZ2h0PU1hdGgubWF4KDMyMCxjb3VudCoxMDYrNjQpLGN5PWhlaWdodC8yOwogY29uc3QgcG9pbnRzPVsuLi5sZWZ0Lm1hcCgocixpKT0+KHsuLi5yLHg6MjAseTpjeS0obGVmdC5sZW5ndGgtMSkqNTMraSoxMDYsc2lkZTonbGVmdCd9KSksLi4ucmlnaHQubWFwKChyLGkpPT4oey4uLnIseDo2NjAseTpjeS0ocmlnaHQubGVuZ3RoLTEpKjUzK2kqMTA2LHNpZGU6J3JpZ2h0J30pKV07CiBjb25zdCB0aGVtZT1yb2xlPT5yb2xlPT09J2FnZW50Jz97c3Ryb2tlOicjOWViNzliJyxpbms6JyMzYjY1NDcnfTpyb2xlLnN0YXJ0c1dpdGgoJ2NvbGxhYm9yYXRpb24nKT97c3Ryb2tlOicjYjViZDhjJyxpbms6JyM2ODczMzInfTpyb2xlPT09J3RhcmdldCc\/e3N0cm9rZTonI2NlYWI5MScsaW5rOicjOGU0ZjJlJ306cm9sZT09PSdvdGhlcic\/e3N0cm9rZTonI2I4YWFjNycsaW5rOicjNzc2MzhjJ306e3N0cm9rZTonI2E1YjljYycsaW5rOicjNGQ2ZjhkJ307CiBmdW5jdGlvbiB3cmFwKHZhbHVlLG1heD0zMCl7aWYodmFsdWUubGVuZ3RoPD1tYXgpcmV0dXJuIFt2YWx1ZV07Y29uc3QgY3V0PXZhbHVlLmxhc3RJbmRleE9mKCcgJyxtYXgpO2NvbnN0IG49Y3V0Pm1heC8yP2N1dDptYXg7cmV0dXJuIFt2YWx1ZS5zbGljZSgwLG4pLHZhbHVlLnNsaWNlKG4pLnRyaW0oKS5zbGljZSgwLG1heC0xKSsodmFsdWUuc2xpY2UobikudHJpbSgpLmxlbmd0aD49bWF4PyfigKYnOicnKV07fQogY29uc3Qgd29yZHM9KHZhbHVlLHgseSxtYXgsY2xzKT0+d3JhcCh2YWx1ZSxtYXgpLm1hcCgobGluZSxpKT0+YDx0ZXh0IGNsYXNzPSIke2Nsc30iIHg9IiR7eH0iIHk9IiR7eStpKjE3fSI+JHtlc2MobGluZSl9PC90ZXh0PmApLmpvaW4oJycpOwogcmV0dXJuIGA8c3ZnIGNsYXNzPSJuZXR3b3JrIiB2aWV3Qm94PSIwIDAgOTQwICR7aGVpZ2h0fSIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSIke2VzYyhjZW50ZXIudmFsdWUpfSBhbmQgaXRzICR7cG9pbnRzLmxlbmd0aH0gcmVsYXRlZCBlbnRpdHkgZ3JvdXBzLiBSZWxhdGlvbnNoaXAgZXZpZGVuY2UgaXMgbGlzdGVkIGJlbG93LiI+PGRlZnM+PHBhdHRlcm4gaWQ9Im54LWdyaWQtJHtjZW50ZXIuaWR9IiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHBhdHRlcm5Vbml0cz0idXNlclNwYWNlT25Vc2UiPjxjaXJjbGUgY3g9IjEiIGN5PSIxIiByPSIuNyIgZmlsbD0iI2JkY2JiNyIgb3BhY2l0eT0iLjUiLz48L3BhdHRlcm4+PC9kZWZzPjxyZWN0IHdpZHRoPSI5NDAiIGhlaWdodD0iJHtoZWlnaHR9IiBmaWxsPSJ1cmwoI254LWdyaWQtJHtjZW50ZXIuaWR9KSIvPiR7cG9pbnRzLm1hcChyPT57Y29uc3QgZnJvbT1yLnNpZGU9PT0nbGVmdCc\/MjgwOjY2MCx0bz1yLnNpZGU9PT0nbGVmdCc\/MzUyOjU4OCxiZW5kPShmcm9tK3RvKS8yO3JldHVybiBgPGEgaHJlZj0iIyIgZGF0YS1tYXAtZXZpZGVuY2U9IiR7ZXNjKHIua2V5KX0iIGFyaWEtbGFiZWw9IlJlYWQgJHtlc2Moci50eXBlKX0gZXZpZGVuY2UgZm9yICR7ZXNjKHIuaG9zdHx8ci5ub2RlLnZhbHVlKX0iPjxwYXRoIGNsYXNzPSJncmFwaC13aXJlIiBkPSJNICR7ZnJvbX0gJHtyLnl9IEMgJHtiZW5kfSAke3IueX0sICR7YmVuZH0gJHtjeX0sICR7dG99ICR7Y3l9IiBzdHJva2Utd2lkdGg9IiR7TWF0aC5taW4oNCwxK01hdGgubG9nMXAoci5yZWZzLnNpemUpLzIpfSIvPjx0aXRsZT5SZWFkIHN1cHBvcnRpbmcgbWVzc2FnZXM8L3RpdGxlPjwvYT5gO30pLmpvaW4oJycpfTxnIGNsYXNzPSJncmFwaC1mb2N1cyI+PHJlY3QgeD0iMzUyIiB5PSIke2N5LTYxfSIgd2lkdGg9IjIzNiIgaGVpZ2h0PSIxMjIiIHJ4PSIxMiIgZmlsbD0iIzI0NGUzYiIvPjx0ZXh0IGNsYXNzPSJmb2N1cy1raW5kIiB4PSIzNzEiIHk9IiR7Y3ktMzZ9Ij4ke2VzYyhyb2xlTGFiZWxzW21vZGVsLnJvbGVJbkNvbnRleHQoY2VudGVyLCBzY29wZWQobW9kZWwucmVmcyhjZW50ZXIsbW9kZSkpKV0pLnRvVXBwZXJDYXNlKCl9PC90ZXh0PiR7d29yZHMoY2VudGVyLnZhbHVlLDM3MSxjeS04LDI0LCdmb2N1cy1uYW1lJyl9PHRleHQgY2xhc3M9ImZvY3VzLWNhcHRpb24iIHg9IjM3MSIgeT0iJHtjeSs0Mn0iPlNFTEVDVEVEIEVOVElUWTwvdGV4dD48L2c+JHtwb2ludHMubWFwKHI9Pntjb25zdCBjPXRoZW1lKG1vZGVsLnJvbGVJbkNvbnRleHQoci5ub2RlLHIucmVmcykpO3JldHVybiBgPGEgY2xhc3M9ImdyYXBoLW5vZGUiIGhyZWY9IiMiIGRhdGEtbWFwLWV2aWRlbmNlPSIke2VzYyhyLmtleSl9IiBhcmlhLWxhYmVsPSJSZWFkIGV2aWRlbmNlIGZvciAke2VzYyhyLmhvc3R8fHIubm9kZS52YWx1ZSl9LCAke2VzYyhyLnR5cGUpfSwgJHtyLnJlZnMuc2l6ZX0gcmVjb3JkcyI+PHJlY3QgeD0iJHtyLnh9IiB5PSIke3IueS00M30iIHdpZHRoPSIyNjAiIGhlaWdodD0iODYiIHJ4PSI4IiBmaWxsPSIjZmZmZWY4IiBzdHJva2U9IiR7Yy5zdHJva2V9Ii8+PHJlY3QgeD0iJHtyLnh9IiB5PSIke3IueS00M30iIHdpZHRoPSI1IiBoZWlnaHQ9Ijg2IiByeD0iMiIgZmlsbD0iJHtjLnN0cm9rZX0iLz48dGV4dCBjbGFzcz0ibm9kZS1raW5kIiB4PSIke3IueCsxNn0iIHk9IiR7ci55LTIzfSIgc3R5bGU9ImZpbGw6JHtjLmlua30iPiR7ZXNjKHJvbGVMYWJlbHNbbW9kZWwucm9sZUluQ29udGV4dChyLm5vZGUsci5yZWZzKV0pLnRvVXBwZXJDYXNlKCl9PC90ZXh0PiR7d29yZHMoci5ob3N0fHxkaXNwbGF5TmFtZShyLm5vZGUudmFsdWUpLHIueCsxNixyLnktMywyOSwnbm9kZS1uYW1lJyl9PHRleHQgY2xhc3M9Im5vZGUtcmVsYXRpb24iIHg9IiR7ci54KzE2fSIgeT0iJHtyLnkrMzB9Ij4ke2VzYyhyLnR5cGUpfSDCtyAke2ZtdChtb2RlbC5zdGF0cyhyLnJlZnMpLmRpc3RpbmN0KX0gdGV4dHMgwrcgJHtmbXQoci5yZWZzLnNpemUpfSByZWNvcmRzPC90ZXh0Pjx0ZXh0IGNsYXNzPSJub2RlLWFycm93IiB4PSIke3IueCsyNDB9IiB5PSIke3IueS0yMn0iPuKGszwvdGV4dD48dGl0bGU+JHtlc2Moci5ub2RlLnZhbHVlKX0gwrcgJHtlc2Moci50eXBlKX0gwrcgJHtyLnJlZnMuc2l6ZX0gcmVjb3JkczsgJHttb2RlbC5zdGF0cyhyLnJlZnMpLmRpc3RpbmN0fSBkaXN0aW5jdCB0ZXh0cy4gJHtlc2MocmVsYXRpb25zaGlwQ29udGV4dChyKSl9IFVuZGVybHlpbmcgdHlwZTogJHtlc2MobGFiZWxzW3Iubm9kZS5raW5kXSl9LjwvdGl0bGU+PC9hPmA7fSkuam9pbignJyl9PC9zdmc+YDsKfQoKZnVuY3Rpb24gcmVsYXRpb25zaGlwQ29udGV4dChyKXsKIGNvbnN0IHJvbGU9bW9kZWwucm9sZUluQ29udGV4dChyLm5vZGUsci5yZWZzKSx0YXJnZXRDb3VudD0obW9kZWwuZGF0YS5yb2xlX2V2aWRlbmNlfHxbXSkuZmlsdGVyKChbbixpXSk9Pm49PT1yLm5vZGUuaW5kZXgmJnIucmVmcy5oYXMoaSkpLmxlbmd0aDsKIGlmKHIudHlwZT09PSdjby1vY2N1cnMnKXJldHVybiAnQm90aCBlbnRpdGllcyBhcHBlYXIgaW4gdGhlIHNhbWUgc2F2ZWQgdGV4dDsgaW50ZXJhY3Rpb24gaXMgbm90IGVzdGFibGlzaGVkLic7CiBpZihyLnR5cGU9PT0ncmVjb3JkZWQgb24nKXJldHVybiAnUGFnZSB3aGVyZSByZWNvcmRzIGNhcnJ5IHRoZSBzZWxlY3RlZCBhdXRob3IgbGFiZWwuJzsKIGlmKHIudHlwZT09PSdyZWNvcmRlZCBhdXRob3InKXJldHVybiAnQXV0aG9yIGxhYmVsIHJlY29yZGVkIG9uIHRoaXMgcGFnZS4nOwogaWYocm9sZT09PSd0YXJnZXQnKXJldHVybiAnRXhwbGljaXRseSBuYW1lZCBhcyBhIHRhcmdldCBpbiAnK2ZtdCh0YXJnZXRDb3VudCkrJyBzdXBwb3J0aW5nICcrKHRhcmdldENvdW50PT09MT8ncmVjb3JkJzoncmVjb3JkcycpKyc7IG91dGNvbWUgdW52ZXJpZmllZC4nOwogaWYocm9sZT09PSdjb2xsYWJvcmF0aW9uX3NpdGUnKXJldHVybiAnS25vd24gY29sbGFib3JhdGlvbiBob3N0IG1lbnRpb25lZCBpbiB0aGVzZSByZWNvcmRzLic7CiBpZihyb2xlPT09J2NvbGxhYm9yYXRpb25fcGFnZScpcmV0dXJuICdDb2xsYWJvcmF0aW9uIHBhZ2Ugd2hvc2UgcmVjb3JkcyBtZW50aW9uIHRoZSBzZWxlY3RlZCBlbnRpdHkuJzsKIGlmKHJvbGU9PT0nYWdlbnQnKXJldHVybiByLnR5cGU9PT0ncmVmZXJlbmNlZCBieSc\/J1JlY29yZHMgY2FycnlpbmcgdGhpcyBsYWJlbCBtZW50aW9uIHRoZSBzZWxlY3RlZCBlbnRpdHkuJzonVGhpcyBsYWJlbCBpcyBtZW50aW9uZWQgaW4gdGhlIHNlbGVjdGVkIHJlY29yZHM7IGNvbnRhY3QgaXMgdW52ZXJpZmllZC4nOwogaWYocm9sZT09PSdyZWZlcmVuY2VkX3NpdGUnKXJldHVybiAnU2l0ZSBtZW50aW9uZWQgaGVyZTsgdGhlIHN1cHBvcnRpbmcgcmVjb3JkcyBkbyBub3QgZXN0YWJsaXNoIGEgdGFyZ2V0IHJvbGUuJzsKIHJldHVybiAnTmFtZWQgaXRlbSBpbiB0aGUgc3VwcG9ydGluZyByZWNvcmRzOyBpdHMgcm9sZSBpcyBub3QgZXN0YWJsaXNoZWQuJzsKfQpmdW5jdGlvbiByb2xlTGVnZW5kKCl7cmV0dXJuIGA8ZGV0YWlscyBjbGFzcz0icm9sZS1sZWdlbmQiPjxzdW1tYXJ5PldoYXQgdGhlIHJvbGVzIGFuZCBjb25uZWN0aW9ucyBtZWFuPC9zdW1tYXJ5PjxkbD48ZHQ+QWdlbnQgbGFiZWw8L2R0PjxkZD5BIHJlY29yZGVkIG9yIG1lbnRpb25lZCBuYW1lLCBub3QgYSB2ZXJpZmllZCBpZGVudGl0eS48L2RkPjxkdD5Db2xsYWJvcmF0aW9uIHNpdGUgLyBwYWdlPC9kdD48ZGQ+S25vd24gd2lraSBpbmZyYXN0cnVjdHVyZSBvciBhIHBhZ2UgaW4gdGhlIGNvbGxhYm9yYXRpb24gY29ycHVzLiDigJxSZWNvcmRlZCBvbuKAnSBpZGVudGlmaWVzIGEgcG9zdGluZyBwYWdlOyDigJxyZWZlcmVuY2Vz4oCdIG9ubHkgaWRlbnRpZmllcyBhIG1lbnRpb24uPC9kZD48ZHQ+VGFyZ2V0IHJlZmVyZW5jZTwvZHQ+PGRkPlRoZSBzdXBwb3J0aW5nIHJlY29yZCBleHBsaWNpdGx5IG5hbWVzIHRoZSBzaXRlIGFzIGEgdGFyZ2V0LiBUaGlzIGlzIGEgc291cmNlIHN0YXRlbWVudCwgbm90IHByb29mIG9mIGFuIGF0dGVtcHQgb3Igc3VjY2Vzcy48L2RkPjxkdD5SZWZlcmVuY2VkIHNpdGU8L2R0PjxkZD5BIHNpdGUgbWVudGlvbmVkIGluIHRoaXMgY29ubmVjdGlvbiB3aXRob3V0IGFuIGVzdGFibGlzaGVkIHRhcmdldCByb2xlLjwvZGQ+PGR0Pk90aGVyIG5hbWVkIGVudGl0eTwvZHQ+PGRkPkEgbmFtZWQgaXRlbSBvciB0ZWNobmljYWwgaWRlbnRpZmllciB3aG9zZSBpbnZlc3RpZ2F0aXZlIHJvbGUgaXMgdW5jb25maXJtZWQuPC9kZD48L2RsPjwvZGV0YWlscz5gO30KZnVuY3Rpb24gcmVsYXRpb25zRm9yKG4pe3JldHVybiBtb2RlbC5ncm91cGVkUmVsYXRpb25zKG4se2Nvb2NjdXIsLi4uc2NvcGUoKSxhbGxvd2VkOnNjb3BlZChtb2RlbC5yZWZzKG4sbW9kZSkpfSk7fQpmdW5jdGlvbiByZWxhdGlvbnNNYXJrdXAobil7CiBsYXN0UmVsYXRpb25zPXJlbGF0aW9uc0ZvcihuKTtjb25zdCB2aXNpYmxlPWxhc3RSZWxhdGlvbnMuZmlsdGVyKHI9PnNob3dJZGVudGlmaWVyc3x8ci5yb2xlIT09J290aGVyJyksZ3JhcGhSb3dzPXZpc2libGUuc2xpY2UoMCxyZWxhdGlvbkxpbWl0KSxoaWRkZW49bGFzdFJlbGF0aW9ucy5sZW5ndGgtdmlzaWJsZS5sZW5ndGg7CiByZXR1cm4gYDxzZWN0aW9uIGNsYXNzPSJwYW5lbCByZWxhdGlvbnNoaXAtcGFuZWwiIGRhdGEtc2VjdGlvbj0icmVsYXRpb25zaGlwcyI+PGRpdiBjbGFzcz0icGFuZWwtaGVhZCI+PGRpdj48aDM+Rm9sbG93IGEgY29ubmVjdGlvbjwvaDM+PHA+U2FtZSBmaWx0ZXJzIGFzIHRoZSBtZXNzYWdlcyBhbmQgdGltZWxpbmUuIFNlbGVjdCBhIGNvbm5lY3Rpb24gdG8gcmVhZCBpdHMgZXZpZGVuY2UuPC9wPjwvZGl2PjxkaXYgY2xhc3M9ImFjdGlvbnMiPjxsYWJlbCBjbGFzcz0iY2hlY2tib3giPjxpbnB1dCBkYXRhLWNvb2NjdXIgdHlwZT0iY2hlY2tib3giICR7Y29vY2N1cj8nY2hlY2tlZCc6Jyd9PkluY2x1ZGUgY28tb2NjdXJyaW5nIG1lbnRpb25zPC9sYWJlbD48bGFiZWwgY2xhc3M9ImNoZWNrYm94Ij48aW5wdXQgZGF0YS1pZGVudGlmaWVycyB0eXBlPSJjaGVja2JveCIgJHtzaG93SWRlbnRpZmllcnM\/J2NoZWNrZWQnOicnfT5PdGhlciBuYW1lZCBlbnRpdGllcyAke2hpZGRlbj8nKCcrZm10KGhpZGRlbikrJyknOicnfTwvbGFiZWw+PC9kaXY+PC9kaXY+JHt2aXNpYmxlLmxlbmd0aD9gPGRpdiBjbGFzcz0icmVsYXRpb25zaGlwLWxheW91dCI+JHtuZXR3b3JrKG4sZ3JhcGhSb3dzKX08cCBjbGFzcz0ic2NvcGUiPiR7Zm10KHZpc2libGUubGVuZ3RoKX0gY29ubmVjdGlvbiBncm91cHMgwrcgJHtNYXRoLm1pbig4LGdyYXBoUm93cy5sZW5ndGgpfSBzaG93biBvbiBtYXAgwrcgcmFua2VkIGJ5IGRpc3RpbmN0IHN1cHBvcnRpbmcgdGV4dHMuIFVSTHMgc2hhcmluZyBhIGhvc3QsIHJvbGUgYW5kIGNvbm5lY3Rpb24gdHlwZSBhcmUgZ3JvdXBlZC48L3A+PGRpdiBjbGFzcz0iY29ubmVjdGlvbi1ncmlkIj4ke3Zpc2libGUuc2xpY2UoMCxyZWxhdGlvbkxpbWl0KS5tYXAocj0+YDxhcnRpY2xlIGNsYXNzPSJjb25uZWN0aW9uLWNhcmQiPiR7dGFnKHIubm9kZSxyLnJlZnMpfTxoMz4ke2VzYyhyLmhvc3R8fGRpc3BsYXlOYW1lKHIubm9kZS52YWx1ZSkpfTwvaDM+PHA+JHtlc2Moci50eXBlKX0gwrcgJHtmbXQobW9kZWwuc3RhdHMoci5yZWZzKS5kaXN0aW5jdCl9IGRpc3RpbmN0IHRleHRzIMK3ICR7Zm10KHIucmVmcy5zaXplKX0gcmVjb3JkczwvcD48cCBjbGFzcz0icmVsYXRpb25zaGlwLWNvbnRleHQiPiR7ZXNjKHJlbGF0aW9uc2hpcENvbnRleHQocikpfTwvcD48YmxvY2txdW90ZT4ke3NuaXBwZXRGb3JSZWxhdGlvbihyKX08L2Jsb2NrcXVvdGU+PGJ1dHRvbiBkYXRhLW1hcC1ldmlkZW5jZT0iJHtlc2Moci5rZXkpfSI+UmVhZCBzdXBwb3J0aW5nIG1lc3NhZ2VzIOKGkjwvYnV0dG9uPjxkZXRhaWxzPjxzdW1tYXJ5PkV4cGxvcmUgJHtyLm1lbWJlcnMubGVuZ3RoPT09MT8nZW50aXR5JzpyLm1lbWJlcnMubGVuZ3RoKycgaW5kZXhlZCBlbnRpdGllcyd9PC9zdW1tYXJ5PiR7ci5tZW1iZXJzLm1hcChtZW1iZXI9PmA8YSBocmVmPSIke2xpbmsobWVtYmVyKX0iPiR7ZXNjKGRpc3BsYXlOYW1lKG1lbWJlci52YWx1ZSkpfSDihpc8L2E+YCkuam9pbignJyl9PC9kZXRhaWxzPjwvYXJ0aWNsZT5gKS5qb2luKCcnKX08L2Rpdj4ke3Zpc2libGUubGVuZ3RoPnJlbGF0aW9uTGltaXQ\/JzxidXR0b24gZGF0YS1tb3JlLXJlbGF0aW9ucz5TaG93IDggbW9yZSBjb25uZWN0aW9uczwvYnV0dG9uPic6Jyd9PC9kaXY+YDonPGRpdiBjbGFzcz0iZW1wdHkiPk5vIGNvbm5lY3Rpb25zIG1hdGNoIHRoZXNlIGZpbHRlcnMuIFRyeSBhbm90aGVyIGRhdGUgb3IgaW5jbHVkZSBvdGhlciBuYW1lZCBlbnRpdGllcy48L2Rpdj4nfSR7cm9sZUxlZ2VuZCgpfTwvc2VjdGlvbj5gOwp9CmZ1bmN0aW9uIHNuaXBwZXRGb3JSZWxhdGlvbihyKXtjb25zdCBpPW1vZGVsLmdyb3VwcyhyLnJlZnMse3NvcnQ6J3JlbGV2YW5jZScscXVlcnkscXVpY2t9KVswXT8uaW5kZXg7aWYoaT09PXVuZGVmaW5lZClyZXR1cm4gJyc7Y29uc3Qgcz1tb2RlbC5zbmlwcGV0KGkse3F1ZXJ5OnF1ZXJ5fHxyLmhvc3R8fHIubm9kZS52YWx1ZSxxdWljayxsZW5ndGg6MjEwfSk7cmV0dXJuIChzLmJlZm9yZT8n4oCmJzonJykrZXNjKHMudGV4dCkrKHMuYWZ0ZXI\/J+KApic6JycpO30KZnVuY3Rpb24gZGF0ZU5hdmlnYXRpb24oKXtyZXR1cm4gYDxkaXYgY2xhc3M9ImVudGl0eS1kYXRlLXNjb3BlIj48bGFiZWw+TW9udGggwrcgVVRDPGlucHV0IGRhdGEtbW9udGggdHlwZT0ibW9udGgiIHZhbHVlPSIke21vbnRofSI+PC9sYWJlbD4ke21vbnRoPyc8YnV0dG9uIGRhdGEtYWxsLWRhdGVzPkFsbCBzYXZlZCBkYXRlczwvYnV0dG9uPic6JzxzcGFuPkFsbCBzYXZlZCBkYXRlcywgaW5jbHVkaW5nIHVuZGF0ZWQgcmVjb3Jkczwvc3Bhbj4nfSR7ZGF5P2A8YnV0dG9uIGRhdGEtY2xlYXItZGF5PiR7cHJldHR5KGRheSl9IMOXPC9idXR0b24+YDonJ308L2Rpdj5gO30KZnVuY3Rpb24gcmVuZGVyRGV0YWlsKCl7aWYoIXNlbGVjdGVkKXJldHVybjtzaG93KCdkZXRhaWwnKTtjb25zdCByZWZzPXNjb3BlZChiYXNlUmVmcygpKTskKCcjbngtZGV0YWlsJykuaW5uZXJIVE1MPWA8YnV0dG9uIGRhdGEtYmFjaz7ihpAgU2VhcmNoIHJlc3VsdHM8L2J1dHRvbj48ZGl2IGNsYXNzPSJkZXRhaWwtaGVhZGluZyI+PGRpdj4ke3RhZyhzZWxlY3RlZCxyZWZzKX08aDIgY2xhc3M9ImRldGFpbC1uYW1lIj4ke2VzYyhkaXNwbGF5TmFtZShzZWxlY3RlZC52YWx1ZSkpfTwvaDI+JHt1cmxEZXRhaWxzKHNlbGVjdGVkLnZhbHVlKX08cCBjbGFzcz0ic2NvcGUiPiR7c2VsZWN0ZWQua2luZD09PSdhZ2VudCc\/J1JlY29yZGVkIGF1dGhvciBsYWJlbCDCtyBpZGVudGl0eSBhbmQgbW9kZWwgcHJvdmlkZXIgdW52ZXJpZmllZCc6cm9sZUxhYmVsc1ttb2RlbC5yb2xlSW5Db250ZXh0KHNlbGVjdGVkLHJlZnMpXSsnIMK3ICcrbGFiZWxzW3NlbGVjdGVkLmtpbmRdfTwvcD48L2Rpdj48ZGl2IGNsYXNzPSJhY3Rpb25zIj48YnV0dG9uIGRhdGEtcGluPSIke3NlbGVjdGVkLmlkfSIgY2xhc3M9InByaW1hcnkiPiR7Ym9hcmQuaW5jbHVkZXMoc2VsZWN0ZWQuaWQpPydSZW1vdmUgZnJvbSBib2FyZCc6JysgQWRkIHRvIGJvYXJkJ308L2J1dHRvbj48YnV0dG9uIGRhdGEtY29weS1saW5rPkNvcHkgbGluazwvYnV0dG9uPjwvZGl2PjwvZGl2PiR7c2VsZWN0ZWQua2luZD09PSdhZ2VudCc\/YDxkaXYgY2xhc3M9ImFjdGlvbnMgbW9kZS1zd2l0Y2giPjxidXR0b24gZGF0YS1tb2RlPSJhY3Rpdml0eSIgYXJpYS1wcmVzc2VkPSIke21vZGU9PT0nYWN0aXZpdHknfSI+QXV0aG9yLWxhYmVsZWQgYWN0aXZpdHk8L2J1dHRvbj48YnV0dG9uIGRhdGEtbW9kZT0ibWVudGlvbnMiIGFyaWEtcHJlc3NlZD0iJHttb2RlPT09J21lbnRpb25zJ30iPk1lbnRpb25zIC8gY29udGV4dDwvYnV0dG9uPjwvZGl2PmA6Jyd9JHtkYXRlTmF2aWdhdGlvbigpfSR7c3RhdHNNYXJrdXAocmVmcyl9PG5hdiBjbGFzcz0iZW50aXR5LXRhYnMiIGFyaWEtbGFiZWw9IkVudGl0eSB2aWV3cyI+JHtbWydtZXNzYWdlcycsJ01lc3NhZ2VzJ10sWyd0aW1lbGluZScsJ1RpbWVsaW5lJ10sWydyZWxhdGlvbnNoaXBzJywnUmVsYXRpb25zaGlwcyddXS5tYXAoKFtrZXksbGFiZWxdKT0+YDxidXR0b24gZGF0YS10YWI9IiR7a2V5fSIgYXJpYS1wcmVzc2VkPSIke2tleT09PWRldGFpbFRhYn0iPiR7bGFiZWx9PC9idXR0b24+YCkuam9pbignJyl9PC9uYXY+JHtkZXRhaWxUYWI9PT0nbWVzc2FnZXMnP3JlY29yZHNNYXJrdXAoc2VsZWN0ZWRSZWZzKCkpOmRldGFpbFRhYj09PSd0aW1lbGluZSc\/Y2hhcnRNYXJrdXAoY3VycmVudE5vZGVzKCkpOnJlbGF0aW9uc01hcmt1cChzZWxlY3RlZCl9YDt9CmZ1bmN0aW9uIHJlbmRlckNvcnB1cygpe3Nob3coJ3RpbWVsaW5lJyk7JCgnI254LWNvcnB1cycpLmlubmVySFRNTD1gPGRpdiBjbGFzcz0iZGV0YWlsLWhlYWRpbmciPjxkaXY+PGgyPlNvdXJjZSB0aW1lbGluZTwvaDI+PHAgY2xhc3M9InNjb3BlIj5Tb3VyY2UgcmVjb3JkIGRhdGVzIMK3IGN1cnJlbnQgZmlsdGVycyDCtyBhbGwgZGF5cyBvZiB0aGUgc2VsZWN0ZWQgbW9udGg8L3A+PC9kaXY+PGxhYmVsPlRpbWVsaW5lIGxhbmVzPHNlbGVjdCBkYXRhLWNvcnB1cy1zY29wZT4ke09iamVjdC5lbnRyaWVzKHNvdXJjZUxhYmVscykubWFwKChbayx2XSk9PmA8b3B0aW9uIHZhbHVlPSIke2t9IiAke2NvcnB1c1Njb3BlPT09az8nc2VsZWN0ZWQnOicnfT4ke3Z9PC9vcHRpb24+YCkuam9pbignJyl9PC9zZWxlY3Q+PC9sYWJlbD48L2Rpdj4ke3N0YXRzTWFya3VwKHNjb3BlZChjb3JwdXNSZWZzKCkpKX0ke2NoYXJ0TWFya3VwKFtdKX08YnV0dG9uIGRhdGEtb3Blbi1yZXN1bHRzPlJlYWQgdGhlc2UgbWVzc2FnZXMg4oaSPC9idXR0b24+YDt9CmZ1bmN0aW9uIHJlbmRlckJvYXJkKCl7c2hvdygnYm9hcmQnKTtjb25zdCBub2Rlcz1ib2FyZC5tYXAoaWQ9Pm1vZGVsLmlkcy5nZXQoaWQpKS5maWx0ZXIoQm9vbGVhbik7JCgnI254LWJvYXJkJykuaW5uZXJIVE1MPWA8ZGl2IGNsYXNzPSJkZXRhaWwtaGVhZGluZyI+PGRpdj48cCBjbGFzcz0iZXllYnJvdyI+WW91ciB3b3JraW5nIHZpZXc8L3A+PGgyPktlZXAgdGhlIHVzZWZ1bCBjb25uZWN0aW9ucy48L2gyPjxwIGNsYXNzPSJib2FyZC1ub3RlIj4ke25vZGVzLmxlbmd0aH0gb2YgMjAgZW50aXRpZXMgwrcgc2F2ZWQgaW4gdGhpcyBicm93c2VyIMK3IGN1cnJlbnQgZmlsdGVycyBhcHBseTwvcD48L2Rpdj48ZGl2IGNsYXNzPSJhY3Rpb25zIj48YnV0dG9uIGRhdGEtZG93bmxvYWQtYm9hcmQ+RG93bmxvYWQgYm9hcmQ8L2J1dHRvbj48YnV0dG9uIGRhdGEtY2xlYXItYm9hcmQ+Q2xlYXIgYm9hcmQ8L2J1dHRvbj48L2Rpdj48L2Rpdj4ke25vZGVzLmxlbmd0aD9gPGRpdiBjbGFzcz0ibngtY2FyZHMiPiR7bm9kZXMubWFwKGNhcmQpLmpvaW4oJycpfTwvZGl2PjxkaXYgY2xhc3M9InBhbmVsIj48aDM+Q29ubmVjdGlvbnMgYmV0d2VlbiBwaW5uZWQgZW50aXRpZXM8L2gzPjxkaXYgY2xhc3M9ImNvbm5lY3Rpb24tZ3JpZCI+JHtub2Rlcy5mbGF0TWFwKG49Pm1vZGVsLnJlbGF0aW9ucyhuLHtjb29jY3VyOnRydWUsLi4uc2NvcGUoKX0pLmZpbHRlcihyPT5ib2FyZC5pbmNsdWRlcyhyLm5vZGUuaWQpJiZuLmlkPHIubm9kZS5pZCkubWFwKHI9PmA8YXJ0aWNsZSBjbGFzcz0iY29ubmVjdGlvbi1jYXJkIj48aDM+PGEgaHJlZj0iJHtsaW5rKG4pfSI+JHtlc2MoZGlzcGxheU5hbWUobi52YWx1ZSkpfTwvYT4g4oaSIDxhIGhyZWY9IiR7bGluayhyLm5vZGUpfSI+JHtlc2MoZGlzcGxheU5hbWUoci5ub2RlLnZhbHVlKSl9PC9hPjwvaDM+PHA+JHtlc2Moci50eXBlKX0gwrcgJHtyLnJlZnMuc2l6ZX0gcmVjb3JkczwvcD48YmxvY2txdW90ZT4ke3NuaXBwZXRGb3JSZWxhdGlvbihyKX08L2Jsb2NrcXVvdGU+PGEgaHJlZj0iJHtsaW5rKG4pfSZ0YWI9cmVsYXRpb25zaGlwcyI+T3BlbiByZWxhdGlvbnNoaXBzIOKGkjwvYT48L2FydGljbGU+YCkpLmpvaW4oJycpfHwnPHA+Tm8gc2hhcmVkIHNvdXJjZSByZWNvcmRzIG1hdGNoIHRoZXNlIGZpbHRlcnMuPC9wPid9PC9kaXY+PC9kaXY+YDonPGRpdiBjbGFzcz0iZW1wdHkiPk9wZW4gYW4gZW50aXR5IGFuZCBjaG9vc2Ug4oCcQWRkIHRvIGJvYXJk4oCdIHRvIGtlZXAgaXQgaGVyZS48L2Rpdj4nfWA7fQpmdW5jdGlvbiByZW5kZXJDdXJyZW50KHtrZWVwU2Nyb2xsPXRydWV9PXt9KXtjb25zdCBwcmlvcj1zY3JvbGxQb3NpdGlvbnMuZ2V0KHZpZXcpO2ZpbHRlck1hcmt1cCgpO2lmKHZpZXc9PT0nZGV0YWlsJylyZW5kZXJEZXRhaWwoKTtlbHNlIGlmKHZpZXc9PT0ndGltZWxpbmUnKXJlbmRlckNvcnB1cygpO2Vsc2UgaWYodmlldz09PSdib2FyZCcpcmVuZGVyQm9hcmQoKTtlbHNlIGRpcmVjdG9yeSgpO2lmKGtlZXBTY3JvbGwmJnByaW9yKXtjb25zdCBsaXN0PWFjdGl2ZUVsZW1lbnQoJy5yZXN1bHQtbGlzdCcpLHBhbmU9YWN0aXZlRWxlbWVudCgnLnJlYWRpbmctcGFuZScpO2lmKGxpc3QpbGlzdC5zY3JvbGxUb3A9cHJpb3IubGlzdDtpZihwYW5lJiZwcmlvci5yZWNvcmQ9PT1hY3RpdmVSZWNvcmQpcGFuZS5zY3JvbGxUb3A9cHJpb3IucGFuZTt9ZWxzZSBpZigha2VlcFNjcm9sbClzY3JvbGxQb3NpdGlvbnMuZGVsZXRlKHZpZXcpO2Vuc3VyZU1lc3NhZ2VzKCk7fQpmdW5jdGlvbiBlbnN1cmVNb250aCgpe2lmKCFtb250aCltb250aD1tb2RlbC5zdGF0cyhzY29wZWQoYmFzZVJlZnMoKSx7bW9udGg6JycsZGF5OicnfSkpLmxhc3Quc2xpY2UoMCw3KXx8bW9kZWwuc3RhdHMoYmFzZVJlZnMoKSkubGFzdC5zbGljZSgwLDcpfHxuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCw3KTt9CmZ1bmN0aW9uIGNoYW5nZWRGaWx0ZXJzKCl7cmVsYXRpb249bnVsbDthY3RpdmVSZWNvcmQ9bnVsbDtyZWFkZXJFeHBhbmRlZD1mYWxzZTtjb21wYXJlUmVjb3JkPW51bGw7cmVjb3JkTGltaXQ9MzA7ZW50aXR5TGltaXQ9MTI7dXBkYXRlSGFzaCgpO3JlbmRlckN1cnJlbnQoe2tlZXBTY3JvbGw6ZmFsc2V9KTt9CmZ1bmN0aW9uIGNob29zZU1vbnRoKHZhbHVlKXtpZih2YWx1ZSltb250aERheXModmFsdWUpO21vbnRoPXZhbHVlO2RheT0nJztpZighbW9udGgpe2RldGFpbFRhYj0nbWVzc2FnZXMnO2lmKHZpZXc9PT0ndGltZWxpbmUnKXt2aWV3PSdkaXJlY3RvcnknO3NlbGVjdGVkPW51bGw7fX1jaGFuZ2VkRmlsdGVycygpO30KZnVuY3Rpb24gcm91dGUoKXsKIHJlbWVtYmVyU2Nyb2xsKCk7Y29uc3QgcD1uZXcgVVJMU2VhcmNoUGFyYW1zKGxvY2F0aW9uLmhhc2guc2xpY2UoMSkpO3NlbGVjdGVkPW1vZGVsLmlkcy5nZXQocC5nZXQoJ2VudGl0eScpKTt2aWV3PXNlbGVjdGVkPydkZXRhaWwnOlsnYm9hcmQnLCd0aW1lbGluZSddLmluY2x1ZGVzKHAuZ2V0KCd2aWV3JykpP3AuZ2V0KCd2aWV3Jyk6J2RpcmVjdG9yeSc7cXVlcnk9KHAuZ2V0KCdxJyl8fCcnKS5zbGljZSgwLDUwMCk7c291cmNlPW1vZGVsLnNvdXJjZXMuaGFzKHAuZ2V0KCdzb3VyY2UnKSl8fHAuZ2V0KCdzb3VyY2UnKT09PSdhdXRob3JzJz9wLmdldCgnc291cmNlJyk6Jyc7cm9sZT1PYmplY3QuaGFzT3duKHJvbGVMYWJlbHMscC5nZXQoJ3JvbGUnKSk\/cC5nZXQoJ3JvbGUnKTonJztjYXRlZ29yeT1PYmplY3QuaGFzT3duKGFjdGl2aXR5VHlwZXMscC5nZXQoJ2NhdGVnb3J5JykpP3AuZ2V0KCdjYXRlZ29yeScpOicnO3F1aWNrPU9iamVjdC5oYXNPd24oc2lnbmFsTGFiZWxzLHAuZ2V0KCdxdWljaycpKT9wLmdldCgncXVpY2snKTonJzsKIGZyb209L15cZHs0fS1cZHsyfS1cZHsyfSQvLnRlc3QocC5nZXQoJ2Zyb20nKSk\/cC5nZXQoJ2Zyb20nKTonJzt0aHJvdWdoPS9eXGR7NH0tXGR7Mn0tXGR7Mn0kLy50ZXN0KHAuZ2V0KCd0aHJvdWdoJykpP3AuZ2V0KCd0aHJvdWdoJyk6Jyc7bW9udGg9cC5nZXQoJ21vbnRoJyl8fCcnO3RyeXtpZihtb250aCltb250aERheXMobW9udGgpO31jYXRjaHttb250aD0nJzt9ZGF5PW1vbnRoJiZtb250aERheXMobW9udGgpLmluY2x1ZGVzKHAuZ2V0KCdkYXknKSk\/cC5nZXQoJ2RheScpOicnOwogY29vY2N1cj1wLmdldCgnY29vY2N1cicpPT09JzEnO21vZGU9cC5nZXQoJ21vZGUnKT09PSdtZW50aW9ucyc\/J21lbnRpb25zJzonYWN0aXZpdHknO2RldGFpbFRhYj1bJ21lc3NhZ2VzJywndGltZWxpbmUnLCdyZWxhdGlvbnNoaXBzJ10uaW5jbHVkZXMocC5nZXQoJ3RhYicpKT9wLmdldCgndGFiJyk6J21lc3NhZ2VzJztyZWNvcmRTb3J0PVsnbmV3ZXN0Jywnb2xkZXN0JywndHlwZScsJ3JlcGVhdGVkJ10uaW5jbHVkZXMocC5nZXQoJ3NvcnQnKSk\/cC5nZXQoJ3NvcnQnKToncmVsZXZhbmNlJztncm91cFJlcGVhdGVkPXAuZ2V0KCdncm91cCcpIT09J29mZic7Y29ycHVzU2NvcGU9c291cmNlfHwoT2JqZWN0Lmhhc093bihzb3VyY2VMYWJlbHMscC5nZXQoJ3Njb3BlJykpP3AuZ2V0KCdzY29wZScpOidhbGwnKTtpZihjb3JwdXNTY29wZSE9PSdhbGwnKXNvdXJjZT1jb3JwdXNTY29wZTtjb21wYXJlPVsuLi5uZXcgU2V0KChwLmdldCgnY29tcGFyZScpfHwnJykuc3BsaXQoJywnKSldLmZpbHRlcihpZD0+bW9kZWwuaWRzLmdldChpZCk\/LmtpbmQ9PT0nYWdlbnQnJiZpZCE9PXNlbGVjdGVkPy5pZCkuc2xpY2UoMCwzKTsKIHJlbGF0aW9uPW51bGw7YWN0aXZlUmVjb3JkPW1vZGVsLmRhdGEucmVjb3Jkcy5maW5kSW5kZXgocj0+clswXT09PXAuZ2V0KCdyZWNvcmQnKSk7aWYoYWN0aXZlUmVjb3JkPDApYWN0aXZlUmVjb3JkPW51bGw7cm9vdC5jbGFzc0xpc3QudG9nZ2xlKCdtb2JpbGUtcmVhZGluZycsYWN0aXZlUmVjb3JkIT09bnVsbCk7cmVhZGVyRXhwYW5kZWQ9ZmFsc2U7Y29tcGFyZVJlY29yZD1udWxsO3JlY29yZExpbWl0PTMwO2lmKHZpZXc9PT0ndGltZWxpbmUnfHx2aWV3PT09J2RldGFpbCcmJmRldGFpbFRhYj09PSd0aW1lbGluZScpZW5zdXJlTW9udGgoKTtpZihwLmdldCgnZWRnZScpJiZzZWxlY3RlZClyZWxhdGlvbj1yZWxhdGlvbnNGb3Ioc2VsZWN0ZWQpLmZpbmQocj0+ci5rZXk9PT1wLmdldCgnZWRnZScpKXx8bnVsbDtyZW5kZXJDdXJyZW50KHtrZWVwU2Nyb2xsOmZhbHNlfSk7Cn0KZnVuY3Rpb24gZG93bmxvYWQobmFtZSx0ZXh0LHR5cGU9J2FwcGxpY2F0aW9uL2pzb24nKXtjb25zdCB1cmw9VVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbdGV4dF0se3R5cGV9KSksYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7YS5ocmVmPXVybDthLmRvd25sb2FkPW5hbWU7YS5jbGljaygpO3NldFRpbWVvdXQoKCk9PlVSTC5yZXZva2VPYmplY3RVUkwodXJsKSwxMDAwKTt9CmZ1bmN0aW9uIGNzdkNlbGwodil7bGV0IHM9U3RyaW5nKHY\/PycnKTtpZigvXls9K1wtQFx0XHJdLy50ZXN0KHMpKXM9IiciK3M7cmV0dXJuICciJytzLnJlcGxhY2VBbGwoJyInLCciIicpKyciJzt9CmZ1bmN0aW9uIHNlbGVjdFJlY29yZChpKXthY3RpdmVSZWNvcmQ9aTtyZWFkZXJFeHBhbmRlZD1mYWxzZTtjb21wYXJlUmVjb3JkPW51bGw7dXBkYXRlSGFzaCgpO3JlbmRlckN1cnJlbnQoKTtyb290LmNsYXNzTGlzdC5hZGQoJ21vYmlsZS1yZWFkaW5nJyk7aWYoaW5uZXJXaWR0aDw9ODAwKXthY3RpdmVFbGVtZW50KCcucmVhZGluZy1wYW5lJyk\/LnNjcm9sbEludG9WaWV3KHtibG9jazonc3RhcnQnfSk7YWN0aXZlRWxlbWVudCgnLnJlYWRpbmctcGFuZScpPy5mb2N1cyh7cHJldmVudFNjcm9sbDp0cnVlfSk7fWVsc2UgYWN0aXZlRWxlbWVudCgnLnJlc3VsdC1yb3dbYXJpYS1wcmVzc2VkPXRydWVdJyk\/LmZvY3VzKHtwcmV2ZW50U2Nyb2xsOnRydWV9KTt9CmZ1bmN0aW9uIG9wZW5FdmlkZW5jZShrZXkpe2NvbnN0IGZvdW5kPXJlbGF0aW9uc0ZvcihzZWxlY3RlZCkuZmluZChyPT5yLmtleT09PWtleSk7aWYoIWZvdW5kKXJldHVybjtyZWxhdGlvbj1mb3VuZDtkZXRhaWxUYWI9J21lc3NhZ2VzJzthY3RpdmVSZWNvcmQ9bnVsbDtyZWNvcmRMaW1pdD0zMDt1cGRhdGVIYXNoKCk7cmVuZGVyQ3VycmVudCh7a2VlcFNjcm9sbDpmYWxzZX0pO2FjdGl2ZUVsZW1lbnQoJy5kaXNjb3ZlcnktZXZpZGVuY2UnKT8uc2Nyb2xsSW50b1ZpZXcoe2Jsb2NrOidzdGFydCcsYmVoYXZpb3I6J3Ntb290aCd9KTt9CnJvb3QuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLGFzeW5jIGU9Pntjb25zdCBiPWUudGFyZ2V0LmNsb3Nlc3QoJ2J1dHRvbixbZGF0YS1tYXAtZXZpZGVuY2VdJyk7aWYoIWIpcmV0dXJuO2NvbnN0IGQ9Yi5kYXRhc2V0O3JlbWVtYmVyU2Nyb2xsKCk7dHJ5ewogaWYoJ21hcEV2aWRlbmNlJ2luIGQpe2UucHJldmVudERlZmF1bHQoKTtvcGVuRXZpZGVuY2UoZC5tYXBFdmlkZW5jZSk7fQogZWxzZSBpZihkLnZpZXcpe3NlbGVjdGVkPW51bGw7dmlldz1kLnZpZXc7cmVsYXRpb249bnVsbDthY3RpdmVSZWNvcmQ9bnVsbDtjb21wYXJlPVtdO2lmKHZpZXc9PT0ndGltZWxpbmUnKWVuc3VyZU1vbnRoKCk7dXBkYXRlSGFzaCgpO3JlbmRlckN1cnJlbnQoe2tlZXBTY3JvbGw6ZmFsc2V9KTt9CiBlbHNlIGlmKCdiYWNrJ2luIGQpe3NlbGVjdGVkPW51bGw7Y29tcGFyZT1bXTtyZWxhdGlvbj1udWxsO3ZpZXc9J2RpcmVjdG9yeSc7dXBkYXRlSGFzaCgpO3JlbmRlckN1cnJlbnQoKTt9CiBlbHNlIGlmKCd0YWInaW4gZCl7ZGV0YWlsVGFiPWQudGFiO3JlbGF0aW9uPW51bGw7aWYoZGV0YWlsVGFiPT09J3RpbWVsaW5lJyllbnN1cmVNb250aCgpO3VwZGF0ZUhhc2goKTtyZW5kZXJDdXJyZW50KCk7fQogZWxzZSBpZigncXVpY2snaW4gZCl7cXVpY2s9ZC5xdWljaztjaGFuZ2VkRmlsdGVycygpO30KIGVsc2UgaWYoJ2NsZWFyQWxsJ2luIGQpe3F1ZXJ5PXNvdXJjZT1mcm9tPXRocm91Z2g9cXVpY2s9cm9sZT1jYXRlZ29yeT1tb250aD1kYXk9Jyc7Y29ycHVzU2NvcGU9J2FsbCc7aWYodmlldz09PSd0aW1lbGluZScpZW5zdXJlTW9udGgoKTtpZihkZXRhaWxUYWI9PT0ndGltZWxpbmUnKWRldGFpbFRhYj0nbWVzc2FnZXMnO2NoYW5nZWRGaWx0ZXJzKCk7fQogZWxzZSBpZignY2xlYXJGaWx0ZXInaW4gZCl7c3dpdGNoKGQuY2xlYXJGaWx0ZXIpe2Nhc2UncSc6cXVlcnk9Jyc7YnJlYWs7Y2FzZSdxdWljayc6cXVpY2s9Jyc7YnJlYWs7Y2FzZSdzb3VyY2UnOnNvdXJjZT0nJztjb3JwdXNTY29wZT0nYWxsJzticmVhaztjYXNlJ3JvbGUnOnJvbGU9Jyc7YnJlYWs7Y2FzZSdjYXRlZ29yeSc6Y2F0ZWdvcnk9Jyc7YnJlYWs7Y2FzZSdmcm9tJzpmcm9tPScnO2JyZWFrO2Nhc2UndGhyb3VnaCc6dGhyb3VnaD0nJzticmVhaztjYXNlJ21vbnRoJzptb250aD0nJztkYXk9Jyc7aWYodmlldz09PSd0aW1lbGluZScpe3ZpZXc9J2RpcmVjdG9yeSc7c2VsZWN0ZWQ9bnVsbDt9ZGV0YWlsVGFiPSdtZXNzYWdlcyc7YnJlYWs7Y2FzZSdkYXknOmRheT0nJzticmVhazt9Y2hhbmdlZEZpbHRlcnMoKTt9CiBlbHNlIGlmKCdyZWFkJ2luIGQpc2VsZWN0UmVjb3JkKCtkLnJlYWQpOwogZWxzZSBpZigncmVhZGVyTmV4dCdpbiBkfHwncmVhZGVyUHJldidpbiBkKXtjb25zdCBncz1tb2RlbC5ncm91cHMoc2NvcGVkKHNlbGVjdGVkUmVmcygpKSx7c29ydDpyZWNvcmRTb3J0LHF1ZXJ5LHF1aWNrLGdyb3VwOmdyb3VwUmVwZWF0ZWR9KSxpPWdzLmZpbmRJbmRleChnPT5nLnJlZnMuaW5jbHVkZXMoYWN0aXZlUmVjb3JkKSksbmV4dD1nc1tpKygncmVhZGVyTmV4dCdpbiBkPzE6LTEpXTtpZihuZXh0KXNlbGVjdFJlY29yZChuZXh0LmluZGV4KTt9CiBlbHNlIGlmKCdjbG9zZVJlYWRlcidpbiBkKXtyb290LmNsYXNzTGlzdC5yZW1vdmUoJ21vYmlsZS1yZWFkaW5nJyk7YWN0aXZlRWxlbWVudCgnLnJlc3VsdC1saXN0Jyk\/LnNjcm9sbEludG9WaWV3KHtibG9jazonc3RhcnQnfSk7fQogZWxzZSBpZignZXhwYW5kTWVzc2FnZSdpbiBkKXtyZWFkZXJFeHBhbmRlZD10cnVlO3JlbmRlckN1cnJlbnQoKTt9CiBlbHNlIGlmKCdjb21wYXJlUmVjb3JkJ2luIGQpe2NvbXBhcmVSZWNvcmQ9K2QuY29tcGFyZVJlY29yZDtyZW5kZXJDdXJyZW50KCk7YWN0aXZlRWxlbWVudCgnLmNvbXBhcmlzb24nKT8uc2Nyb2xsSW50b1ZpZXcoe2Jsb2NrOiduZWFyZXN0J30pO30KIGVsc2UgaWYoJ3JldHJ5TWVzc2FnZXMnaW4gZCl7bWVzc2FnZVN0YXRlPSdpZGxlJztyZW5kZXJDdXJyZW50KCk7fQogZWxzZSBpZihkLnBpbilwaW4oZC5waW4pOwogZWxzZSBpZihkLmRheSl7ZGF5PWQuZGF5O2RldGFpbFRhYj0nbWVzc2FnZXMnO2lmKHZpZXc9PT0ndGltZWxpbmUnKXt2aWV3PSdkaXJlY3RvcnknO3NlbGVjdGVkPW51bGw7fWNoYW5nZWRGaWx0ZXJzKCk7YWN0aXZlRWxlbWVudCgnLmRpc2NvdmVyeS1ldmlkZW5jZScpPy5zY3JvbGxJbnRvVmlldyh7YmxvY2s6J3N0YXJ0J30pO30KIGVsc2UgaWYoJ2NsZWFyRGF5J2luIGQpe2RheT0nJztjaGFuZ2VkRmlsdGVycygpO30KIGVsc2UgaWYoJ2FsbERhdGVzJ2luIGQpY2hvb3NlTW9udGgoJycpOwogZWxzZSBpZihkLm1vbnRoU3RlcCl7Y29uc3QgZGF0ZT1uZXcgRGF0ZShtb250aCsnLTAxVDAwOjAwOjAwWicpO2RhdGUuc2V0VVRDTW9udGgoZGF0ZS5nZXRVVENNb250aCgpK051bWJlcihkLm1vbnRoU3RlcCkpO2Nob29zZU1vbnRoKGRhdGUudG9JU09TdHJpbmcoKS5zbGljZSgwLDcpKTt9CiBlbHNlIGlmKGQucmVtb3ZlQ29tcGFyZSl7Y29tcGFyZT1jb21wYXJlLmZpbHRlcih4PT54IT09ZC5yZW1vdmVDb21wYXJlKTtjaGFuZ2VkRmlsdGVycygpO30KIGVsc2UgaWYoZC5tb2RlKXttb2RlPWQubW9kZTtjaGFuZ2VkRmlsdGVycygpO30KIGVsc2UgaWYoJ2NsZWFyUmVsYXRpb24naW4gZCl7cmVsYXRpb249bnVsbDthY3RpdmVSZWNvcmQ9bnVsbDt1cGRhdGVIYXNoKCk7cmVuZGVyQ3VycmVudCh7a2VlcFNjcm9sbDpmYWxzZX0pO30KIGVsc2UgaWYoJ21vcmVSZWNvcmRzJ2luIGQpe3JlY29yZExpbWl0Kz0zMDtyZW5kZXJDdXJyZW50KCk7fQogZWxzZSBpZignbW9yZUVudGl0aWVzJ2luIGQpe2VudGl0eUxpbWl0Kz0yNDtyZW5kZXJDdXJyZW50KCk7fQogZWxzZSBpZignbW9yZVJlbGF0aW9ucydpbiBkKXtyZWxhdGlvbkxpbWl0Kz04O3JlbmRlckN1cnJlbnQoKTt9CiBlbHNlIGlmKCdvcGVuUmVzdWx0cydpbiBkKXt2aWV3PSdkaXJlY3RvcnknO3NlbGVjdGVkPW51bGw7dXBkYXRlSGFzaCgpO3JlbmRlckN1cnJlbnQoe2tlZXBTY3JvbGw6ZmFsc2V9KTt9CiBlbHNlIGlmKCdjb3B5TGluaydpbiBkKXt1cGRhdGVIYXNoKCk7YXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQobG9jYXRpb24uaHJlZik7Yi50ZXh0Q29udGVudD0nTGluayBjb3BpZWQnO30KIGVsc2UgaWYoJ2Rvd25sb2FkQm9hcmQnaW4gZClkb3dubG9hZCgnbm9ldGljLWV4cGxvcmUtYm9hcmQuanNvbicsSlNPTi5zdHJpbmdpZnkoe3ZlcnNpb246MSxzbmFwc2hvdDptb2RlbC5kYXRhLmdlbmVyYXRlZCxmaWx0ZXJzOnNjb3BlKCksZW50aXRpZXM6Ym9hcmQubWFwKGlkPT5tb2RlbC5pZHMuZ2V0KGlkKSkuZmlsdGVyKEJvb2xlYW4pLm1hcChuPT4oe2lkOm4uaWQsa2luZDpuLmtpbmQsdmFsdWU6bi52YWx1ZX0pKX0sbnVsbCwyKSk7CiBlbHNlIGlmKCdjbGVhckJvYXJkJ2luIGQpe2JvYXJkPVtdO3NhdmVCb2FyZCgpO3JlbmRlckN1cnJlbnQoKTt9CiBlbHNlIGlmKCdkb3dubG9hZFJlY29yZHMnaW4gZCl7Y29uc3Qgcm93cz1bWydyZWNvcmRfcmVmJywnc291cmNlJywnZGF0ZV91dGMnLCd0aXRsZScsJ3RpbWVfYmFzaXMnLCdhY3Rpdml0eV90eXBlJywnbWF0Y2hlZF93b3JkaW5nJ11dO2Zvcihjb25zdCBpIG9mIHNjb3BlZChzZWxlY3RlZFJlZnMoKSkpe2NvbnN0IHI9bW9kZWwuZGF0YS5yZWNvcmRzW2ldO3Jvd3MucHVzaChbclswXSxyWzFdLHJbMl0scls0XSxyWzVdLG1vZGVsLmFjdGl2aXR5VHlwZShpKSxbLi4ubmV3IFNldChtb2RlbC5zaWduYWxzKGkscXVpY2spLm1hcChoPT5oLmxhYmVsKSldLmpvaW4oJzsgJyldKTt9ZG93bmxvYWQoJ25vZXRpYy1yZWNvcmRzLmNzdicscm93cy5tYXAocj0+ci5tYXAoY3N2Q2VsbCkuam9pbignLCcpKS5qb2luKCdcclxuJyksJ3RleHQvY3N2O2NoYXJzZXQ9dXRmLTgnKTt9CiB9Y2F0Y2goZXJyKXtub3RpZnkoZXJyLm1lc3NhZ2V8fCdVbmFibGUgdG8gY29tcGxldGUgdGhhdCBhY3Rpb24uJyk7fX0pOwpyb290LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsZT0+e2NvbnN0IGQ9ZS50YXJnZXQuZGF0YXNldDtyZW1lbWJlclNjcm9sbCgpO3RyeXtpZigncmVjb3JkU29ydCdpbiBkKXtyZWNvcmRTb3J0PWUudGFyZ2V0LnZhbHVlO2NoYW5nZWRGaWx0ZXJzKCk7fWVsc2UgaWYoJ2dyb3VwJ2luIGQpe2dyb3VwUmVwZWF0ZWQ9ZS50YXJnZXQuY2hlY2tlZDtjaGFuZ2VkRmlsdGVycygpO31lbHNlIGlmKCdjb3JwdXNTY29wZSdpbiBkKXtjb3JwdXNTY29wZT1lLnRhcmdldC52YWx1ZTtzb3VyY2U9Y29ycHVzU2NvcGU9PT0nYWxsJz8nJzpjb3JwdXNTY29wZTtjaGFuZ2VkRmlsdGVycygpO31lbHNlIGlmKCdtb250aCdpbiBkKWNob29zZU1vbnRoKGUudGFyZ2V0LnZhbHVlKTtlbHNlIGlmKCdzY2FsZSdpbiBkKXtzY2FsZT1lLnRhcmdldC52YWx1ZTtyZW5kZXJDdXJyZW50KCk7fWVsc2UgaWYoJ2NvbXBhcmUnaW4gZCYmZS50YXJnZXQudmFsdWUpe2NvbXBhcmUucHVzaChlLnRhcmdldC52YWx1ZSk7Y2hhbmdlZEZpbHRlcnMoKTt9ZWxzZSBpZignY29vY2N1cidpbiBkKXtjb29jY3VyPWUudGFyZ2V0LmNoZWNrZWQ7cmVsYXRpb249bnVsbDtyZW5kZXJDdXJyZW50KCk7fWVsc2UgaWYoJ2lkZW50aWZpZXJzJ2luIGQpe3Nob3dJZGVudGlmaWVycz1lLnRhcmdldC5jaGVja2VkO3JlbmRlckN1cnJlbnQoKTt9ZWxzZSBpZignZ2xvYmFsRmlsdGVyJ2luIGQpe3N3aXRjaChkLmdsb2JhbEZpbHRlcil7Y2FzZSdyb2xlJzpyb2xlPWUudGFyZ2V0LnZhbHVlO2JyZWFrO2Nhc2Unc291cmNlJzpzb3VyY2U9ZS50YXJnZXQudmFsdWU7Y29ycHVzU2NvcGU9c291cmNlfHwnYWxsJzticmVhaztjYXNlJ2NhdGVnb3J5JzpjYXRlZ29yeT1lLnRhcmdldC52YWx1ZTticmVhaztjYXNlJ2Zyb20nOmZyb209ZS50YXJnZXQudmFsdWU7YnJlYWs7Y2FzZSd0aHJvdWdoJzp0aHJvdWdoPWUudGFyZ2V0LnZhbHVlO2JyZWFrO31jaGFuZ2VkRmlsdGVycygpO319Y2F0Y2goZXJyKXtub3RpZnkoZXJyLm1lc3NhZ2UpO319KTsKcm9vdC5hZGRFdmVudExpc3RlbmVyKCd0b2dnbGUnLGU9PntpZihlLnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ21hdGNoaW5nLWVudGl0aWVzJykpZW50aXRpZXNPcGVuPWUudGFyZ2V0Lm9wZW47fSx0cnVlKTsKcm9vdC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJyxlPT57aWYoIWUudGFyZ2V0Lm1hdGNoZXMoJy5yZXN1bHQtcm93Jyl8fCFbJ0Fycm93RG93bicsJ0Fycm93VXAnXS5pbmNsdWRlcyhlLmtleSkpcmV0dXJuO2UucHJldmVudERlZmF1bHQoKTtyZW1lbWJlclNjcm9sbCgpO2NvbnN0IHJvd3M9bW9kZWwuZ3JvdXBzKHNjb3BlZChzZWxlY3RlZFJlZnMoKSkse3NvcnQ6cmVjb3JkU29ydCxxdWVyeSxxdWljayxncm91cDpncm91cFJlcGVhdGVkfSksaW5kZXg9cm93cy5maW5kSW5kZXgoZz0+Zy5yZWZzLmluY2x1ZGVzKGFjdGl2ZVJlY29yZCkpLG5leHQ9cm93c1tpbmRleCsoZS5rZXk9PT0nQXJyb3dEb3duJz8xOi0xKV07aWYobmV4dCl7c2VsZWN0UmVjb3JkKG5leHQuaW5kZXgpO2FjdGl2ZUVsZW1lbnQoJy5yZXN1bHQtcm93W2FyaWEtcHJlc3NlZD10cnVlXScpPy5zY3JvbGxJbnRvVmlldyh7YmxvY2s6J25lYXJlc3QnfSk7fX0pOwokKCcjbngtc2VhcmNoJykuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLGU9Pntjb25zdCB0ZXh0PWUudGFyZ2V0LnZhbHVlO2NsZWFyVGltZW91dChzZWFyY2hUaW1lcik7c2VhcmNoVGltZXI9c2V0VGltZW91dCgoKT0+e3JlbWVtYmVyU2Nyb2xsKCk7cXVlcnk9dGV4dC5zbGljZSgwLDUwMCk7Y2hhbmdlZEZpbHRlcnMoKTt9LDI0MCk7fSk7CmZvcihjb25zdCBpZCBvZiBbJ254LW1ldGhvZCcsJ254LW1ldGhvZC1mb290ZXInXSkkKCcjJytpZCkuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCgpPT4kKCcjbngtZGlhbG9nJykuc2hvd01vZGFsKCkpOyQoJyNueC1jbG9zZScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywoKT0+JCgnI254LWRpYWxvZycpLmNsb3NlKCkpOwphc3luYyBmdW5jdGlvbiBlbnN1cmVNZXNzYWdlcygpe2lmKG1lc3NhZ2VTdGF0ZSE9PSdpZGxlJ3x8IU5PRVRJQ19NRVNTQUdFU19VUkwpcmV0dXJuO21lc3NhZ2VTdGF0ZT0nbG9hZGluZyc7dHJ5e2NvbnN0IHJlc3BvbnNlPWF3YWl0IGZldGNoKG5ldyBVUkwoTk9FVElDX01FU1NBR0VTX1VSTCxkb2N1bWVudC5iYXNlVVJJKSk7aWYoIXJlc3BvbnNlLm9rKXRocm93IEVycm9yKCdNZXNzYWdlIGRvd25sb2FkIGZhaWxlZC4nKTtjb25zdCBlbmNvZGVkPWF3YWl0IHJlc3BvbnNlLnRleHQoKSxieXRlcz1VaW50OEFycmF5LmZyb20oYXRvYihlbmNvZGVkLnRyaW0oKSksYz0+Yy5jaGFyQ29kZUF0KDApKTtjb25zdCB0ZXh0PWF3YWl0IG5ldyBSZXNwb25zZShuZXcgQmxvYihbYnl0ZXNdKS5zdHJlYW0oKS5waXBlVGhyb3VnaChuZXcgRGVjb21wcmVzc2lvblN0cmVhbSgnZ3ppcCcpKSkudGV4dCgpO2lmKG1vZGVsLmRhdGEubWVzc2FnZV9kYXRhX3NoYTI1Nil7Y29uc3QgZGlnZXN0PWF3YWl0IGNyeXB0by5zdWJ0bGUuZGlnZXN0KCdTSEEtMjU2JyxuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUodGV4dCkpO2NvbnN0IGhhc2g9Wy4uLm5ldyBVaW50OEFycmF5KGRpZ2VzdCldLm1hcChiPT5iLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCcwJykpLmpvaW4oJycpO2lmKGhhc2ghPT1tb2RlbC5kYXRhLm1lc3NhZ2VfZGF0YV9zaGEyNTYpdGhyb3cgRXJyb3IoJ01lc3NhZ2Ugc25hcHNob3QgZG9lcyBub3QgbWF0Y2ggdGhlIGluZGV4LicpO31tb2RlbC5zZXRNZXNzYWdlcyhKU09OLnBhcnNlKHRleHQpKTttZXNzYWdlU3RhdGU9J2xvYWRlZCc7Y29uc3QgcD1uZXcgVVJMU2VhcmNoUGFyYW1zKGxvY2F0aW9uLmhhc2guc2xpY2UoMSkpO2lmKHAuZ2V0KCdlZGdlJykmJnNlbGVjdGVkKXJlbGF0aW9uPXJlbGF0aW9uc0ZvcihzZWxlY3RlZCkuZmluZChyPT5yLmtleT09PXAuZ2V0KCdlZGdlJykpfHxudWxsO2lmKHAuZ2V0KCdyZWNvcmQnKSl7Y29uc3QgaT1tb2RlbC5kYXRhLnJlY29yZHMuZmluZEluZGV4KHI9PnJbMF09PT1wLmdldCgncmVjb3JkJykpO2lmKGk+PTApYWN0aXZlUmVjb3JkPWk7fX1jYXRjaHttZXNzYWdlU3RhdGU9J2Vycm9yJzt9cmVtZW1iZXJTY3JvbGwoKTtyZW5kZXJDdXJyZW50KCk7fQphc3luYyBmdW5jdGlvbiBpbml0KCl7dHJ5e2lmKCFnbG9iYWxUaGlzLkRlY29tcHJlc3Npb25TdHJlYW0pdGhyb3cgRXJyb3IoJ1RoaXMgZXhwbG9yZXIgbmVlZHMgYSBjdXJyZW50IGJyb3dzZXIgd2l0aCBjb21wcmVzc2VkLWRhdGEgc3VwcG9ydC4nKTtjb25zdCByZXNwb25zZT1hd2FpdCBmZXRjaChuZXcgVVJMKE5PRVRJQ19TTkFQU0hPVF9VUkwsZG9jdW1lbnQuYmFzZVVSSSkpO2lmKCFyZXNwb25zZS5vayl0aHJvdyBFcnJvcignVGhlIHB1YmxpYyBzbmFwc2hvdCBjb3VsZCBub3QgYmUgbG9hZGVkLiBSZWZyZXNoIHRvIHRyeSBhZ2Fpbi4nKTtjb25zdCB0ZXh0PWF3YWl0IHJlc3BvbnNlLnRleHQoKSxieXRlcz1VaW50OEFycmF5LmZyb20oYXRvYih0ZXh0LnRyaW0oKSksYz0+Yy5jaGFyQ29kZUF0KDApKTtjb25zdCBkYXRhPWF3YWl0IG5ldyBSZXNwb25zZShuZXcgQmxvYihbYnl0ZXNdKS5zdHJlYW0oKS5waXBlVGhyb3VnaChuZXcgRGVjb21wcmVzc2lvblN0cmVhbSgnZ3ppcCcpKSkuanNvbigpO21vZGVsPW5ldyBNb2RlbChkYXRhKTtib2FyZD1ib2FyZC5maWx0ZXIoaWQ9Pm1vZGVsLmlkcy5oYXMoaWQpKS5zbGljZSgwLDIwKTtzYXZlQm9hcmQoKTskKCcjbngta2luZCcpLmlubmVySFRNTD0nPG9wdGlvbiB2YWx1ZT0iIj5BbGwgZW50aXR5IHR5cGVzPC9vcHRpb24+JytPYmplY3QuZW50cmllcyhyb2xlTGFiZWxzKS5tYXAoKFtrLHZdKT0+YDxvcHRpb24gdmFsdWU9IiR7a30iPiR7dn08L29wdGlvbj5gKS5qb2luKCcnKTskKCcjbngtc291cmNlJykuaW5uZXJIVE1MPSc8b3B0aW9uIHZhbHVlPSIiPkFsbCBzb3VyY2VzPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0iYXV0aG9ycyI+QXV0aG9yLWxhYmVsZWQgd2lraSByZXZpc2lvbnM8L29wdGlvbj4nK1suLi5tb2RlbC5zb3VyY2VzLmtleXMoKV0ubWFwKGs9PmA8b3B0aW9uIHZhbHVlPSIke2t9Ij4ke3NvdXJjZUxhYmVsc1trXXx8a308L29wdGlvbj5gKS5qb2luKCcnKTskKCcjbngtY2F0ZWdvcnknKS5pbm5lckhUTUw9JzxvcHRpb24gdmFsdWU9IiI+QWxsIGFjdGl2aXR5IHR5cGVzPC9vcHRpb24+JytPYmplY3QuZW50cmllcyhhY3Rpdml0eVR5cGVzKS5tYXAoKFtrLHZdKT0+YDxvcHRpb24gdmFsdWU9IiR7a30iPiR7dn08L29wdGlvbj5gKS5qb2luKCcnKTskKCcjbngtc25hcHNob3QnKS50ZXh0Q29udGVudD1mbXQobW9kZWwubm9kZXMubGVuZ3RoKSsnIGVudGl0aWVzIMK3ICcrZm10KGRhdGEucmVjb3Jkcy5sZW5ndGgpKycgc291cmNlIHJlY29yZHMnOyQoJyNueC1wcm92ZW5hbmNlJykudGV4dENvbnRlbnQ9J1NuYXBzaG90IGV4cG9ydGVkICcrcHJldHR5KGRhdGEuZ2VuZXJhdGVkKSsnLiAnK2RhdGEuc2NvcGU7bm90aWZ5KCcnKTskKCcjbngtY29udGVudCcpLmhpZGRlbj1mYWxzZTtyb3V0ZSgpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdoYXNoY2hhbmdlJyxyb3V0ZSk7fWNhdGNoKGUpe25vdGlmeShlLm1lc3NhZ2UpOyQoJyNueC1zbmFwc2hvdCcpLnRleHRDb250ZW50PSdTbmFwc2hvdCB1bmF2YWlsYWJsZSc7fX0KaW5pdCgpOwp9KSgpOwo=\";const script=document.createElement('script');script.textContent=new TextDecoder().decode(Uint8Array.from(atob(code),c=>c.charCodeAt(0)));document.currentScript.after(script);})();<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Explore public agent-label records, monthly activity and evidence-backed relationships.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"noetic-home","meta":{"footnotes":""},"class_list":["post-30","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/noeticresearch.org\/index.php?rest_route=\/wp\/v2\/pages\/30","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/noeticresearch.org\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/noeticresearch.org\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/noeticresearch.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/noeticresearch.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=30"}],"version-history":[{"count":7,"href":"https:\/\/noeticresearch.org\/index.php?rest_route=\/wp\/v2\/pages\/30\/revisions"}],"predecessor-version":[{"id":43,"href":"https:\/\/noeticresearch.org\/index.php?rest_route=\/wp\/v2\/pages\/30\/revisions\/43"}],"wp:attachment":[{"href":"https:\/\/noeticresearch.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=30"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}