// ==UserScript==
// @name Sniffies Tools Userscript
// @namespace https://sniffies.com
// @author Beam
// @version 0.1.0
// @description Recreating and expanding features on top of Sniffies.com
// @match https://sniffies.com/*
// @match https://*.sniffies.com/*
// @run-at document-start
// @grant none
// ==/UserScript==
"use strict";(()=>{var k=(t,s)=>{let o=navigator.geolocation;if(!o||o.__sniffiesPatched)return null;let a=o.getCurrentPosition.bind(o),l=o.watchPosition.bind(o),f=o.clearWatch.bind(o),d=new Map,i=r=>{let e=t();if(!e?.enabled)return console.log("[sniffies-geo] override disabled, passing real coords",r.coords),r;let u={coords:{latitude:e.latitude,longitude:e.longitude,accuracy:10,altitude:null,altitudeAccuracy:null,heading:null,speed:null},timestamp:Date.now()};return console.log("[sniffies-geo] applying override",u.coords),u},n=r=>e=>{s?.({latitude:e.coords.latitude,longitude:e.coords.longitude}),r(i(e))};o.getCurrentPosition=(r,e,u)=>{console.log("[sniffies-geo] getCurrentPosition intercepted"),a(n(r),e,u)},o.watchPosition=(r,e,u)=>{console.log("[sniffies-geo] watchPosition intercepted");let g=n(r),v=l(g,e,u);return d.set(v,g),v},o.clearWatch=r=>{d.delete(r),f(r)};let c=()=>{d.size!==0&&a(r=>{for(let e of d.values())e(r)},void 0,{maximumAge:0})};return o.__sniffiesPatched=!0,{nativeGetCurrentPosition:a,nativeWatchPosition:l,refreshWatches:c}};var E=`
Location Spoofing
`;var O=`/* Section shell \u2014 lifted from popup.css .section, details.collapsible, .collapsible-body */
#snp-geo-root .section {
background: #0e1825;
border: 1px solid #1c2b3a;
border-radius: 8px;
padding: 14px;
display: flex;
flex-direction: column;
gap: 10px;
}
#snp-geo-root .section h2 {
margin: 0;
font-size: 10px;
font-weight: 700;
letter-spacing: 0.1em;
text-transform: uppercase;
color: #7a90a4;
}
#snp-geo-root details.collapsible {
padding: 0;
display: block;
}
#snp-geo-root details.collapsible summary {
list-style: none;
cursor: pointer;
padding: 14px;
display: flex;
align-items: center;
gap: 6px;
user-select: none;
}
#snp-geo-root details.collapsible summary::-webkit-details-marker {
display: none;
}
#snp-geo-root details.collapsible summary::after {
content: "\u203A";
margin-left: auto;
font-size: 16px;
line-height: 1;
color: #7a90a4;
transform: rotate(90deg);
transition: transform 0.15s;
}
#snp-geo-root details.collapsible[open] summary::after {
transform: rotate(270deg);
}
#snp-geo-root details.collapsible summary h2 {
margin: 0;
}
#snp-geo-root .collapsible-body {
padding: 0 14px 14px;
display: flex;
flex-direction: column;
gap: 10px;
}
/* Form fields \u2014 lifted from popup.css .row, .hint, .field, button.primary/secondary, .actions */
#snp-geo-root .row {
display: flex;
align-items: center;
gap: 8px;
font-size: 13px;
cursor: pointer;
color: #ffffff;
}
#snp-geo-root .row input[type="checkbox"] {
accent-color: #ff5500;
width: 14px;
height: 14px;
}
#snp-geo-root .hint {
font-size: 11px;
color: #7a90a4;
margin: 0;
}
#snp-geo-root button.primary {
font-size: 12px;
font-weight: 700;
padding: 7px 16px;
border-radius: 20px;
border: none;
background: #ff5500;
color: #fff;
cursor: pointer;
letter-spacing: 0.02em;
transition: background 0.15s;
}
#snp-geo-root button.primary:hover:not(:disabled) {
background: #e04a00;
}
#snp-geo-root button.primary:disabled {
background: #1c2b3a;
color: #7a90a4;
cursor: not-allowed;
}
#snp-geo-root button.secondary {
font-size: 12px;
font-weight: 600;
padding: 7px 16px;
border-radius: 20px;
border: 1px solid #1c2b3a;
background: transparent;
color: #7a90a4;
cursor: pointer;
transition:
border-color 0.15s,
color 0.15s;
}
#snp-geo-root button.secondary:hover:not(:disabled) {
border-color: #7a90a4;
color: #ffffff;
}
#snp-geo-root button.secondary:disabled {
color: #1c2b3a;
border-color: #1c2b3a;
cursor: not-allowed;
}
#snp-geo-root .field {
display: flex;
flex-direction: column;
gap: 4px;
font-size: 11px;
color: #7a90a4;
}
#snp-geo-root .field input {
font-size: 13px;
padding: 7px 10px;
border-radius: 6px;
border: 1px solid #1c2b3a;
background: #080e18;
color: #ffffff;
outline: none;
transition: border-color 0.15s;
}
#snp-geo-root .field input::placeholder {
color: #3a4f62;
}
#snp-geo-root .field input:focus {
border-color: #ff5500;
}
#snp-geo-root .actions {
display: flex;
gap: 8px;
align-items: center;
}
#snp-geo-root #geo-fields {
display: flex;
flex-direction: column;
gap: 10px;
}
`;var L=(t,s)=>{let o=p=>t.querySelector(`#${p}`),a=t.querySelector("#geo-details"),l=o("geo-enabled"),f=o("geo-fields"),d=o("geo-lat"),i=o("geo-lng"),n=o("geo-fill-current"),c=o("geo-save"),r=o("geo-status");if(a&&(s.initialOpen!==void 0&&(a.open=s.initialOpen),s.onToggle)){let p=s.onToggle;a.addEventListener("toggle",()=>p(a.open))}let e=p=>{r.textContent=p},u=()=>({enabled:l.checked,latitude:parseFloat(d.value)||0,longitude:parseFloat(i.value)||0}),g=null,v=p=>{let S={aborted:!1};g=S,e("Getting location\u2026"),s.getNativePosition(h=>{S.aborted||(g=null,d.value=String(h.coords.latitude),i.value=String(h.coords.longitude),y(),p())},h=>{S.aborted||(g=null,e(`Could not get location: ${h.message} (code ${h.code})`))},{timeout:1e4})},{initial:b}=s,x={...b},_=()=>{let p=u();return p.enabled===x.enabled&&p.latitude===x.latitude&&p.longitude===x.longitude},y=()=>{let p=d.value.trim()!==""&&i.value.trim()!=="";c.style.display=p&&!_()?"":"none"},G=()=>Promise.resolve(s.onSave(u())).then(()=>{x=u(),e("Saved."),y()});l.checked=b.enabled,f.style.display=b.enabled?"":"none",d.value=b.latitude!==0?String(b.latitude):"",i.value=b.longitude!==0?String(b.longitude):"",y(),l.addEventListener("change",()=>{f.style.display=l.checked?"":"none",y(),l.checked?g&&(g.aborted=!0,g=null,e("")):(G(),v(()=>{G()}))});for(let p of[d,i])p.addEventListener("input",y);n.addEventListener("click",()=>{v(()=>e(""))}),c.addEventListener("click",()=>{G()})};var m={enabled:!1,latitude:0,longitude:0};var w=`#snp-fab {
position: fixed;
bottom: 80px;
right: 16px;
z-index: 2147483646;
background: rgba(14, 24, 37, 0.85);
border: 1px solid #1c2b3a;
border-radius: 50%;
cursor: pointer;
font-size: 20px;
line-height: 1;
width: 44px;
height: 44px;
display: flex;
align-items: center;
justify-content: center;
opacity: 0.9;
transition: opacity 0.15s;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.4);
}
#snp-fab:hover {
opacity: 1;
}
#snp-panel {
position: fixed;
top: 60px;
right: 12px;
z-index: 2147483647;
width: 280px;
background: #0e1825;
border: 1px solid #1c2b3a;
border-radius: 8px;
box-shadow: 0 4px 24px rgba(0, 0, 0, 0.5);
font-family:
system-ui,
-apple-system,
"Segoe UI",
sans-serif;
color: #ffffff;
padding: 14px 16px;
display: flex;
flex-direction: column;
gap: 12px;
}
.snp-header {
display: flex;
align-items: center;
justify-content: space-between;
}
.snp-header h1 {
font-size: 14px;
font-weight: 700;
margin: 0;
letter-spacing: 0.01em;
}
.snp-close {
background: transparent;
border: none;
color: #7a90a4;
font-size: 18px;
cursor: pointer;
line-height: 1;
padding: 2px 4px;
transition: color 0.15s;
}
.snp-close:hover {
color: #fff;
}
`;var C=`
`;var T="sniffies-geo",F=()=>{try{let t=localStorage.getItem(T);return t?{...m,...JSON.parse(t)}:{...m}}catch{return{...m}}},D=t=>{localStorage.setItem(T,JSON.stringify(t))},z=t=>{let s=()=>{let a=document.querySelector('[title="Sitelinks"]');return a?.parentElement?(a.parentElement.insertBefore(t,a.nextSibling),!0):!1};if(s())return;let o=new MutationObserver(()=>{s()&&o.disconnect()});o.observe(document.body,{childList:!0,subtree:!0})};function j(){let t=F(),s=k(()=>t),o=s?.nativeGetCurrentPosition??navigator.geolocation.getCurrentPosition.bind(navigator.geolocation),a=window.fetch.bind(window),l=null,f=null,d=i=>{let n={lat:i.latitude,lng:i.longitude};if(l)try{let c=JSON.parse(l.init.body??"{}");c.virtualLocation=n,c.physicalLocation=n,a(l.url,{...l.init,body:JSON.stringify(c)});return}catch{}f&&a(`${f}/api/visitor/current/location?state=loaded`,{method:"PUT",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({virtualLocation:n,physicalLocation:n,homeDistanceInMiles:null})})};return window.fetch=async(i,n)=>{let c=typeof i=="string"?i:i instanceof URL?i.href:i.url,r=c.match(/^(https?:\/\/[^/]*sniffies\.com)/);if(r&&!f&&(f=r[1]??null),c.includes("/api/visitor/current/location")&&(l={url:c,init:{...n}},t.enabled))try{let e=JSON.parse(n?.body??"{}"),u={lat:t.latitude,lng:t.longitude};e.virtualLocation=u,e.physicalLocation=u,n={...n,body:JSON.stringify(e)}}catch{}return a(i,n)},{currentOverride:t,hook:s,nativeGetCurrentPosition:o,sendLocationUpdate:d}}function P(t){let s=t?.hook??null,o=t?.nativeGetCurrentPosition??(()=>{throw new Error("geolocation unavailable")}),a=t?.sendLocationUpdate??(()=>{}),l=t?.currentOverride??{...m},f=document.createElement("style");f.textContent=w,document.head.appendChild(f);let d=document.createElement("style");d.textContent=O,document.head.appendChild(d);let i=document.createElement("button");i.id="snp-fab",i.title="Sniffies Tools",i.textContent="\u{1F4CD}",z(i);let n=document.createElement("div");n.id="snp-panel",n.style.display="none",n.innerHTML=C,document.body.appendChild(n);let c=n.querySelector("#snp-geo-root");c.innerHTML=E,L(c,{initial:l,onSave:e=>{D(e),l=e,s?.refreshWatches(),e.enabled&&a(e)},getNativePosition:o});let r=n.querySelector("#snp-close");i.addEventListener("click",()=>{n.style.display=n.style.display==="none"?"block":"none"}),r.addEventListener("click",()=>{n.style.display="none"})}if(!window.__sniffiesInjected){window.__sniffiesInjected=!0;let t=null;try{t=j()}catch(s){console.error("[sniffies-tools] hook install failed:",s)}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>P(t),{once:!0}):P(t)}})();
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vY29yZS9zcmMvZ2VvLWhvb2sudHMiLCAiLi4vLi4vY29yZS9zcmMvZ2VvLW92ZXJyaWRlLmh0bWwiLCAiLi4vLi4vY29yZS9zcmMvZ2VvLW92ZXJyaWRlLmNzcyIsICIuLi8uLi9jb3JlL3NyYy9nZW8tb3ZlcnJpZGUtdWkudHMiLCAiLi4vLi4vY29yZS9zcmMvc2V0dGluZ3MudHMiLCAiLi4vc3JjL3BhbmVsLmNzcyIsICIuLi9zcmMvcGFuZWwuaHRtbCIsICIuLi9zcmMvdXNlcnNjcmlwdC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHR5cGUgeyBHZW9PdmVycmlkZSB9IGZyb20gXCIuL3NldHRpbmdzLmpzXCI7XG5cbnR5cGUgUGF0Y2hlZEdlbyA9IEdlb2xvY2F0aW9uICYgeyBfX3NuaWZmaWVzUGF0Y2hlZD86IGJvb2xlYW4gfTtcblxuZXhwb3J0IGludGVyZmFjZSBHZW9Ib29rUmVzdWx0IHtcbiAgbmF0aXZlR2V0Q3VycmVudFBvc2l0aW9uOiBHZW9sb2NhdGlvbltcImdldEN1cnJlbnRQb3NpdGlvblwiXTtcbiAgbmF0aXZlV2F0Y2hQb3NpdGlvbjogR2VvbG9jYXRpb25bXCJ3YXRjaFBvc2l0aW9uXCJdO1xuICAvKiogUmUtZmlyZXMgYWxsIGFjdGl2ZSB3YXRjaFBvc2l0aW9uIHN1YnNjcmliZXJzIHdpdGggdGhlIGN1cnJlbnQgcmVhbCBwb3NpdGlvbi4gQ2FsbCB0aGlzIHdoZW5ldmVyIHRoZSBvdmVycmlkZSBjaGFuZ2VzIHNvIGFjdGl2ZSB3YXRjaGVzIHJlZmxlY3QgdGhlIG5ldyBzdGF0ZSBpbW1lZGlhdGVseS4gKi9cbiAgcmVmcmVzaFdhdGNoZXM6ICgpID0+IHZvaWQ7XG59XG5cbi8qKlxuICogV3JhcHMgbmF2aWdhdG9yLmdlb2xvY2F0aW9uIHRvIGludGVyY2VwdCBwb3NpdGlvbiBjYWxscy5cbiAqXG4gKiBAcGFyYW0gZ2V0T3ZlcnJpZGUgLSBDYWxsZWQgb24gZXZlcnkgcG9zaXRpb24gcmVxdWVzdDsgcmV0dXJuIG51bGwgdG8gcGFzcyB0aHJvdWdoIHJlYWwgY29vcmRzLlxuICogQHBhcmFtIG9uUG9zaXRpb24gIC0gT3B0aW9uYWwgY2FsbGJhY2sgZmlyZWQgd2l0aCB0aGUgcmVhbCAocHJlLXNwb29mKSBjb29yZHMsIHVzZWZ1bCBmb3JcbiAqICAgICAgICAgICAgICAgICAgICAgIHJlbGF5aW5nIG9ic2VydmVkIHBvc2l0aW9ucyBiYWNrIHRvIGEgc3RvcmFnZSBsYXllci5cbiAqIEByZXR1cm5zIE5hdGl2ZSBnZW8gbWV0aG9kcyAobmVlZGVkIGJ5IGNhbGxlcnMgdGhhdCBtdXN0IGJ5cGFzcyB0aGUgaG9vaywgZS5nLiBcImZpbGwgd2l0aFxuICogICAgICAgICAgY3VycmVudFwiIGluIGEgVUkgcnVubmluZyBvbiB0aGUgc2FtZSBwYWdlKSwgb3IgbnVsbCBpZiBhbHJlYWR5IHBhdGNoZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBpbnN0YWxsR2VvSG9vayA9IChcbiAgZ2V0T3ZlcnJpZGU6ICgpID0+IEdlb092ZXJyaWRlIHwgbnVsbCxcbiAgb25Qb3NpdGlvbj86IChjb29yZHM6IHsgbGF0aXR1ZGU6IG51bWJlcjsgbG9uZ2l0dWRlOiBudW1iZXIgfSkgPT4gdm9pZCxcbik6IEdlb0hvb2tSZXN1bHQgfCBudWxsID0+IHtcbiAgY29uc3QgZ2VvID0gbmF2aWdhdG9yLmdlb2xvY2F0aW9uIGFzIFBhdGNoZWRHZW8gfCB1bmRlZmluZWQ7XG4gIGlmICghZ2VvIHx8IGdlby5fX3NuaWZmaWVzUGF0Y2hlZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgbmF0aXZlR2V0Q3VycmVudFBvc2l0aW9uID0gZ2VvLmdldEN1cnJlbnRQb3NpdGlvbi5iaW5kKGdlbyk7XG4gIGNvbnN0IG5hdGl2ZVdhdGNoUG9zaXRpb24gPSBnZW8ud2F0Y2hQb3NpdGlvbi5iaW5kKGdlbyk7XG4gIGNvbnN0IG5hdGl2ZUNsZWFyV2F0Y2ggPSBnZW8uY2xlYXJXYXRjaC5iaW5kKGdlbyk7XG5cbiAgY29uc3QgYWN0aXZlV2F0Y2hlcnMgPSBuZXcgTWFwPG51bWJlciwgUG9zaXRpb25DYWxsYmFjaz4oKTtcblxuICBjb25zdCBhcHBseU92ZXJyaWRlID0gKHBvc2l0aW9uOiBHZW9sb2NhdGlvblBvc2l0aW9uKTogR2VvbG9jYXRpb25Qb3NpdGlvbiA9PiB7XG4gICAgY29uc3Qgb3YgPSBnZXRPdmVycmlkZSgpO1xuICAgIGlmICghb3Y/LmVuYWJsZWQpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiW3NuaWZmaWVzLWdlb10gb3ZlcnJpZGUgZGlzYWJsZWQsIHBhc3NpbmcgcmVhbCBjb29yZHNcIiwgcG9zaXRpb24uY29vcmRzKTtcbiAgICAgIHJldHVybiBwb3NpdGlvbjtcbiAgICB9XG4gICAgY29uc3Qgc3Bvb2ZlZCA9IHtcbiAgICAgIGNvb3Jkczoge1xuICAgICAgICBsYXRpdHVkZTogb3YubGF0aXR1ZGUsXG4gICAgICAgIGxvbmdpdHVkZTogb3YubG9uZ2l0dWRlLFxuICAgICAgICBhY2N1cmFjeTogMTAsXG4gICAgICAgIGFsdGl0dWRlOiBudWxsLFxuICAgICAgICBhbHRpdHVkZUFjY3VyYWN5OiBudWxsLFxuICAgICAgICBoZWFkaW5nOiBudWxsLFxuICAgICAgICBzcGVlZDogbnVsbCxcbiAgICAgIH0sXG4gICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgfSBhcyBHZW9sb2NhdGlvblBvc2l0aW9uO1xuICAgIGNvbnNvbGUubG9nKFwiW3NuaWZmaWVzLWdlb10gYXBwbHlpbmcgb3ZlcnJpZGVcIiwgc3Bvb2ZlZC5jb29yZHMpO1xuICAgIHJldHVybiBzcG9vZmVkO1xuICB9O1xuXG4gIGNvbnN0IHdyYXBTdWNjZXNzID1cbiAgICAoY2FsbGJhY2s6IFBvc2l0aW9uQ2FsbGJhY2spOiBQb3NpdGlvbkNhbGxiYWNrID0+XG4gICAgKHBvc2l0aW9uKSA9PiB7XG4gICAgICBvblBvc2l0aW9uPy4oe1xuICAgICAgICBsYXRpdHVkZTogcG9zaXRpb24uY29vcmRzLmxhdGl0dWRlLFxuICAgICAgICBsb25naXR1ZGU6IHBvc2l0aW9uLmNvb3Jkcy5sb25naXR1ZGUsXG4gICAgICB9KTtcbiAgICAgIGNhbGxiYWNrKGFwcGx5T3ZlcnJpZGUocG9zaXRpb24pKTtcbiAgICB9O1xuXG4gIGdlby5nZXRDdXJyZW50UG9zaXRpb24gPSAoc3VjY2VzcywgZXJyb3IsIG9wdGlvbnMpID0+IHtcbiAgICBjb25zb2xlLmxvZyhcIltzbmlmZmllcy1nZW9dIGdldEN1cnJlbnRQb3NpdGlvbiBpbnRlcmNlcHRlZFwiKTtcbiAgICBuYXRpdmVHZXRDdXJyZW50UG9zaXRpb24od3JhcFN1Y2Nlc3Moc3VjY2VzcyksIGVycm9yLCBvcHRpb25zKTtcbiAgfTtcblxuICBnZW8ud2F0Y2hQb3NpdGlvbiA9IChzdWNjZXNzLCBlcnJvciwgb3B0aW9ucykgPT4ge1xuICAgIGNvbnNvbGUubG9nKFwiW3NuaWZmaWVzLWdlb10gd2F0Y2hQb3NpdGlvbiBpbnRlcmNlcHRlZFwiKTtcbiAgICBjb25zdCB3cmFwcGVkID0gd3JhcFN1Y2Nlc3Moc3VjY2Vzcyk7XG4gICAgY29uc3QgaWQgPSBuYXRpdmVXYXRjaFBvc2l0aW9uKHdyYXBwZWQsIGVycm9yLCBvcHRpb25zKTtcbiAgICBhY3RpdmVXYXRjaGVycy5zZXQoaWQsIHdyYXBwZWQpO1xuICAgIHJldHVybiBpZDtcbiAgfTtcblxuICBnZW8uY2xlYXJXYXRjaCA9IChpZCkgPT4ge1xuICAgIGFjdGl2ZVdhdGNoZXJzLmRlbGV0ZShpZCk7XG4gICAgbmF0aXZlQ2xlYXJXYXRjaChpZCk7XG4gIH07XG5cbiAgY29uc3QgcmVmcmVzaFdhdGNoZXMgPSAoKTogdm9pZCA9PiB7XG4gICAgaWYgKGFjdGl2ZVdhdGNoZXJzLnNpemUgPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbmF0aXZlR2V0Q3VycmVudFBvc2l0aW9uKFxuICAgICAgKHBvcykgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGNiIG9mIGFjdGl2ZVdhdGNoZXJzLnZhbHVlcygpKSB7XG4gICAgICAgICAgY2IocG9zKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHsgbWF4aW11bUFnZTogMCB9LFxuICAgICk7XG4gIH07XG5cbiAgZ2VvLl9fc25pZmZpZXNQYXRjaGVkID0gdHJ1ZTtcblxuICByZXR1cm4geyBuYXRpdmVHZXRDdXJyZW50UG9zaXRpb24sIG5hdGl2ZVdhdGNoUG9zaXRpb24sIHJlZnJlc2hXYXRjaGVzIH07XG59O1xuIiwgIjxkZXRhaWxzIGNsYXNzPVwic2VjdGlvbiBjb2xsYXBzaWJsZVwiIGlkPVwiZ2VvLWRldGFpbHNcIj5cbiAgPHN1bW1hcnk+PGgyPkxvY2F0aW9uIFNwb29maW5nPC9oMj48L3N1bW1hcnk+XG4gIDxkaXYgY2xhc3M9XCJjb2xsYXBzaWJsZS1ib2R5XCI+XG4gICAgPHAgY2xhc3M9XCJoaW50XCI+U3Bvb2YgdGhlIGNvb3JkaW5hdGVzIFNuaWZmaWVzIHNlZXMuPC9wPlxuICAgIDxsYWJlbCBjbGFzcz1cInJvd1wiPlxuICAgICAgPGlucHV0IGlkPVwiZ2VvLWVuYWJsZWRcIiB0eXBlPVwiY2hlY2tib3hcIiAvPlxuICAgICAgPHNwYW4+RW5hYmxlPC9zcGFuPlxuICAgIDwvbGFiZWw+XG4gICAgPGRpdiBpZD1cImdlby1maWVsZHNcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImZpZWxkXCI+XG4gICAgICAgIDxzcGFuPkxhdGl0dWRlPC9zcGFuPlxuICAgICAgICA8aW5wdXQgaWQ9XCJnZW8tbGF0XCIgdHlwZT1cIm51bWJlclwiIHN0ZXA9XCJhbnlcIiBwbGFjZWhvbGRlcj1cIjQ3LjYxNDc3XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgLz5cbiAgICAgIDwvbGFiZWw+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJmaWVsZFwiPlxuICAgICAgICA8c3Bhbj5Mb25naXR1ZGU8L3NwYW4+XG4gICAgICAgIDxpbnB1dCBpZD1cImdlby1sbmdcIiB0eXBlPVwibnVtYmVyXCIgc3RlcD1cImFueVwiIHBsYWNlaG9sZGVyPVwiLTEyMi4zMjUyNVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIC8+XG4gICAgICA8L2xhYmVsPlxuICAgICAgPGJ1dHRvbiBpZD1cImdlby1maWxsLWN1cnJlbnRcIiBjbGFzcz1cInNlY29uZGFyeVwiIHR5cGU9XCJidXR0b25cIj5GaWxsIHdpdGggY3VycmVudDwvYnV0dG9uPlxuICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbnNcIj5cbiAgICAgICAgPGJ1dHRvbiBpZD1cImdlby1zYXZlXCIgY2xhc3M9XCJwcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiPlNhdmU8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHAgaWQ9XCJnZW8tc3RhdHVzXCIgY2xhc3M9XCJoaW50XCIgYXJpYS1saXZlPVwicG9saXRlXCI+PC9wPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGV0YWlscz5cbiIsICIvKiBTZWN0aW9uIHNoZWxsIFx1MjAxNCBsaWZ0ZWQgZnJvbSBwb3B1cC5jc3MgLnNlY3Rpb24sIGRldGFpbHMuY29sbGFwc2libGUsIC5jb2xsYXBzaWJsZS1ib2R5ICovXG5cbiNzbnAtZ2VvLXJvb3QgLnNlY3Rpb24ge1xuICBiYWNrZ3JvdW5kOiAjMGUxODI1O1xuICBib3JkZXI6IDFweCBzb2xpZCAjMWMyYjNhO1xuICBib3JkZXItcmFkaXVzOiA4cHg7XG4gIHBhZGRpbmc6IDE0cHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGdhcDogMTBweDtcbn1cblxuI3NucC1nZW8tcm9vdCAuc2VjdGlvbiBoMiB7XG4gIG1hcmdpbjogMDtcbiAgZm9udC1zaXplOiAxMHB4O1xuICBmb250LXdlaWdodDogNzAwO1xuICBsZXR0ZXItc3BhY2luZzogMC4xZW07XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIGNvbG9yOiAjN2E5MGE0O1xufVxuXG4jc25wLWdlby1yb290IGRldGFpbHMuY29sbGFwc2libGUge1xuICBwYWRkaW5nOiAwO1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuI3NucC1nZW8tcm9vdCBkZXRhaWxzLmNvbGxhcHNpYmxlIHN1bW1hcnkge1xuICBsaXN0LXN0eWxlOiBub25lO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHBhZGRpbmc6IDE0cHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogNnB4O1xuICB1c2VyLXNlbGVjdDogbm9uZTtcbn1cblxuI3NucC1nZW8tcm9vdCBkZXRhaWxzLmNvbGxhcHNpYmxlIHN1bW1hcnk6Oi13ZWJraXQtZGV0YWlscy1tYXJrZXIge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4jc25wLWdlby1yb290IGRldGFpbHMuY29sbGFwc2libGUgc3VtbWFyeTo6YWZ0ZXIge1xuICBjb250ZW50OiBcIlx1MjAzQVwiO1xuICBtYXJnaW4tbGVmdDogYXV0bztcbiAgZm9udC1zaXplOiAxNnB4O1xuICBsaW5lLWhlaWdodDogMTtcbiAgY29sb3I6ICM3YTkwYTQ7XG4gIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMTVzO1xufVxuXG4jc25wLWdlby1yb290IGRldGFpbHMuY29sbGFwc2libGVbb3Blbl0gc3VtbWFyeTo6YWZ0ZXIge1xuICB0cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpO1xufVxuXG4jc25wLWdlby1yb290IGRldGFpbHMuY29sbGFwc2libGUgc3VtbWFyeSBoMiB7XG4gIG1hcmdpbjogMDtcbn1cblxuI3NucC1nZW8tcm9vdCAuY29sbGFwc2libGUtYm9keSB7XG4gIHBhZGRpbmc6IDAgMTRweCAxNHB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBnYXA6IDEwcHg7XG59XG5cbi8qIEZvcm0gZmllbGRzIFx1MjAxNCBsaWZ0ZWQgZnJvbSBwb3B1cC5jc3MgLnJvdywgLmhpbnQsIC5maWVsZCwgYnV0dG9uLnByaW1hcnkvc2Vjb25kYXJ5LCAuYWN0aW9ucyAqL1xuXG4jc25wLWdlby1yb290IC5yb3cge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDhweDtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGNvbG9yOiAjZmZmZmZmO1xufVxuXG4jc25wLWdlby1yb290IC5yb3cgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdIHtcbiAgYWNjZW50LWNvbG9yOiAjZmY1NTAwO1xuICB3aWR0aDogMTRweDtcbiAgaGVpZ2h0OiAxNHB4O1xufVxuXG4jc25wLWdlby1yb290IC5oaW50IHtcbiAgZm9udC1zaXplOiAxMXB4O1xuICBjb2xvcjogIzdhOTBhNDtcbiAgbWFyZ2luOiAwO1xufVxuXG4jc25wLWdlby1yb290IGJ1dHRvbi5wcmltYXJ5IHtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBmb250LXdlaWdodDogNzAwO1xuICBwYWRkaW5nOiA3cHggMTZweDtcbiAgYm9yZGVyLXJhZGl1czogMjBweDtcbiAgYm9yZGVyOiBub25lO1xuICBiYWNrZ3JvdW5kOiAjZmY1NTAwO1xuICBjb2xvcjogI2ZmZjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBsZXR0ZXItc3BhY2luZzogMC4wMmVtO1xuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzO1xufVxuXG4jc25wLWdlby1yb290IGJ1dHRvbi5wcmltYXJ5OmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHtcbiAgYmFja2dyb3VuZDogI2UwNGEwMDtcbn1cblxuI3NucC1nZW8tcm9vdCBidXR0b24ucHJpbWFyeTpkaXNhYmxlZCB7XG4gIGJhY2tncm91bmQ6ICMxYzJiM2E7XG4gIGNvbG9yOiAjN2E5MGE0O1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuXG4jc25wLWdlby1yb290IGJ1dHRvbi5zZWNvbmRhcnkge1xuICBmb250LXNpemU6IDEycHg7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIHBhZGRpbmc6IDdweCAxNnB4O1xuICBib3JkZXItcmFkaXVzOiAyMHB4O1xuICBib3JkZXI6IDFweCBzb2xpZCAjMWMyYjNhO1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgY29sb3I6ICM3YTkwYTQ7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdHJhbnNpdGlvbjpcbiAgICBib3JkZXItY29sb3IgMC4xNXMsXG4gICAgY29sb3IgMC4xNXM7XG59XG5cbiNzbnAtZ2VvLXJvb3QgYnV0dG9uLnNlY29uZGFyeTpob3Zlcjpub3QoOmRpc2FibGVkKSB7XG4gIGJvcmRlci1jb2xvcjogIzdhOTBhNDtcbiAgY29sb3I6ICNmZmZmZmY7XG59XG5cbiNzbnAtZ2VvLXJvb3QgYnV0dG9uLnNlY29uZGFyeTpkaXNhYmxlZCB7XG4gIGNvbG9yOiAjMWMyYjNhO1xuICBib3JkZXItY29sb3I6ICMxYzJiM2E7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG5cbiNzbnAtZ2VvLXJvb3QgLmZpZWxkIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZ2FwOiA0cHg7XG4gIGZvbnQtc2l6ZTogMTFweDtcbiAgY29sb3I6ICM3YTkwYTQ7XG59XG5cbiNzbnAtZ2VvLXJvb3QgLmZpZWxkIGlucHV0IHtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBwYWRkaW5nOiA3cHggMTBweDtcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xuICBib3JkZXI6IDFweCBzb2xpZCAjMWMyYjNhO1xuICBiYWNrZ3JvdW5kOiAjMDgwZTE4O1xuICBjb2xvcjogI2ZmZmZmZjtcbiAgb3V0bGluZTogbm9uZTtcbiAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMTVzO1xufVxuXG4jc25wLWdlby1yb290IC5maWVsZCBpbnB1dDo6cGxhY2Vob2xkZXIge1xuICBjb2xvcjogIzNhNGY2Mjtcbn1cblxuI3NucC1nZW8tcm9vdCAuZmllbGQgaW5wdXQ6Zm9jdXMge1xuICBib3JkZXItY29sb3I6ICNmZjU1MDA7XG59XG5cbiNzbnAtZ2VvLXJvb3QgLmFjdGlvbnMge1xuICBkaXNwbGF5OiBmbGV4O1xuICBnYXA6IDhweDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuI3NucC1nZW8tcm9vdCAjZ2VvLWZpZWxkcyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGdhcDogMTBweDtcbn1cbiIsICJpbXBvcnQgR0VPX09WRVJSSURFX0hUTUwgZnJvbSBcIi4vZ2VvLW92ZXJyaWRlLmh0bWxcIjtcbmltcG9ydCBHRU9fT1ZFUlJJREVfQ1NTIGZyb20gXCIuL2dlby1vdmVycmlkZS5jc3NcIjtcbmltcG9ydCB0eXBlIHsgR2VvT3ZlcnJpZGUgfSBmcm9tIFwiLi9zZXR0aW5ncy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBHZW9PdmVycmlkZUZvcm1Db250cmFjdCB9IGZyb20gXCIuL2dlby1vdmVycmlkZS1mb3JtLWNvbnRyYWN0LmpzXCI7XG5cbmV4cG9ydCB7IEdFT19PVkVSUklERV9IVE1MLCBHRU9fT1ZFUlJJREVfQ1NTIH07XG5leHBvcnQgdHlwZSB7IEdlb092ZXJyaWRlRm9ybUNvbnRyYWN0IH07XG5cbmV4cG9ydCBjb25zdCB3aXJlR2VvT3ZlcnJpZGVGb3JtID0gKGNvbnRhaW5lcjogRWxlbWVudCwgb3B0aW9uczogR2VvT3ZlcnJpZGVGb3JtQ29udHJhY3QpOiB2b2lkID0+IHtcbiAgY29uc3QgZWwgPSA8VCBleHRlbmRzIEVsZW1lbnQ+KGlkOiBzdHJpbmcpOiBUID0+IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yPFQ+KGAjJHtpZH1gKSBhcyBUO1xuXG4gIGNvbnN0IGRldGFpbHMgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcjxIVE1MRGV0YWlsc0VsZW1lbnQ+KFwiI2dlby1kZXRhaWxzXCIpO1xuICBjb25zdCBnZW9FbmFibGVkID0gZWw8SFRNTElucHV0RWxlbWVudD4oXCJnZW8tZW5hYmxlZFwiKTtcbiAgY29uc3QgZ2VvRmllbGRzID0gZWw8SFRNTEVsZW1lbnQ+KFwiZ2VvLWZpZWxkc1wiKTtcbiAgY29uc3QgZ2VvTGF0ID0gZWw8SFRNTElucHV0RWxlbWVudD4oXCJnZW8tbGF0XCIpO1xuICBjb25zdCBnZW9MbmcgPSBlbDxIVE1MSW5wdXRFbGVtZW50PihcImdlby1sbmdcIik7XG4gIGNvbnN0IGZpbGxDdXJyZW50ID0gZWw8SFRNTEJ1dHRvbkVsZW1lbnQ+KFwiZ2VvLWZpbGwtY3VycmVudFwiKTtcbiAgY29uc3Qgc2F2ZUJ0biA9IGVsPEhUTUxCdXR0b25FbGVtZW50PihcImdlby1zYXZlXCIpO1xuICBjb25zdCBzdGF0dXNFbCA9IGVsPEhUTUxFbGVtZW50PihcImdlby1zdGF0dXNcIik7XG5cbiAgLy8gV2lyZSBjb2xsYXBzaWJsZVxuICBpZiAoZGV0YWlscykge1xuICAgIGlmIChvcHRpb25zLmluaXRpYWxPcGVuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGRldGFpbHMub3BlbiA9IG9wdGlvbnMuaW5pdGlhbE9wZW47XG4gICAgfVxuICAgIGlmIChvcHRpb25zLm9uVG9nZ2xlKSB7XG4gICAgICBjb25zdCBvblRvZ2dsZSA9IG9wdGlvbnMub25Ub2dnbGU7XG4gICAgICBkZXRhaWxzLmFkZEV2ZW50TGlzdGVuZXIoXCJ0b2dnbGVcIiwgKCkgPT4gb25Ub2dnbGUoZGV0YWlscy5vcGVuKSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc2V0U3RhdHVzID0gKHRleHQ6IHN0cmluZyk6IHZvaWQgPT4ge1xuICAgIHN0YXR1c0VsLnRleHRDb250ZW50ID0gdGV4dDtcbiAgfTtcblxuICBjb25zdCByZWFkRm9ybSA9ICgpOiBHZW9PdmVycmlkZSA9PiAoe1xuICAgIGVuYWJsZWQ6IGdlb0VuYWJsZWQuY2hlY2tlZCxcbiAgICBsYXRpdHVkZTogcGFyc2VGbG9hdChnZW9MYXQudmFsdWUpIHx8IDAsXG4gICAgbG9uZ2l0dWRlOiBwYXJzZUZsb2F0KGdlb0xuZy52YWx1ZSkgfHwgMCxcbiAgfSk7XG5cbiAgLy8gVHJhY2tzIHRoZSBpbi1mbGlnaHQgZ2V0TmF0aXZlUG9zaXRpb24gY2FsbCB0cmlnZ2VyZWQgYnkgZGlzYWJsaW5nLiBBIG5ld1xuICAvLyBvYmplY3QgaXMgY3JlYXRlZCBlYWNoIHRpbWU7IG1hcmtpbmcgaXQgYWJvcnRlZCBwcmV2ZW50cyBzdGFsZSBjYWxsYmFja3NcbiAgLy8gZnJvbSBtdXRhdGluZyBzdGF0ZSBhZnRlciB0aGUgdXNlciBoYXMgcmUtZW5hYmxlZCBzcG9vZmluZy5cbiAgbGV0IHBlbmRpbmdGZXRjaDogeyBhYm9ydGVkOiBib29sZWFuIH0gfCBudWxsID0gbnVsbDtcblxuICBjb25zdCBmaWxsV2l0aEN1cnJlbnRQb3NpdGlvbiA9IChvblN1Y2Nlc3M6ICgpID0+IHZvaWQpOiB2b2lkID0+IHtcbiAgICBjb25zdCB0b2tlbiA9IHsgYWJvcnRlZDogZmFsc2UgfTtcbiAgICBwZW5kaW5nRmV0Y2ggPSB0b2tlbjtcbiAgICBzZXRTdGF0dXMoXCJHZXR0aW5nIGxvY2F0aW9uXHUyMDI2XCIpO1xuICAgIG9wdGlvbnMuZ2V0TmF0aXZlUG9zaXRpb24oXG4gICAgICAocG9zKSA9PiB7XG4gICAgICAgIGlmICh0b2tlbi5hYm9ydGVkKSB7IHJldHVybjsgfVxuICAgICAgICBwZW5kaW5nRmV0Y2ggPSBudWxsO1xuICAgICAgICBnZW9MYXQudmFsdWUgPSBTdHJpbmcocG9zLmNvb3Jkcy5sYXRpdHVkZSk7XG4gICAgICAgIGdlb0xuZy52YWx1ZSA9IFN0cmluZyhwb3MuY29vcmRzLmxvbmdpdHVkZSk7XG4gICAgICAgIHVwZGF0ZVNhdmVWaXNpYmlsaXR5KCk7XG4gICAgICAgIG9uU3VjY2VzcygpO1xuICAgICAgfSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgaWYgKHRva2VuLmFib3J0ZWQpIHsgcmV0dXJuOyB9XG4gICAgICAgIHBlbmRpbmdGZXRjaCA9IG51bGw7XG4gICAgICAgIHNldFN0YXR1cyhgQ291bGQgbm90IGdldCBsb2NhdGlvbjogJHtlcnIubWVzc2FnZX0gKGNvZGUgJHtlcnIuY29kZX0pYCk7XG4gICAgICB9LFxuICAgICAgeyB0aW1lb3V0OiAxMDAwMCB9LFxuICAgICk7XG4gIH07XG5cbiAgLy8gUG9wdWxhdGUgaW5pdGlhbCB2YWx1ZXNcbiAgY29uc3QgeyBpbml0aWFsIH0gPSBvcHRpb25zO1xuICBsZXQgbGFzdFNhdmVkOiBHZW9PdmVycmlkZSA9IHsgLi4uaW5pdGlhbCB9O1xuXG4gIGNvbnN0IGZvcm1NYXRjaGVzU2F2ZWQgPSAoKTogYm9vbGVhbiA9PiB7XG4gICAgY29uc3QgZm9ybSA9IHJlYWRGb3JtKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIGZvcm0uZW5hYmxlZCA9PT0gbGFzdFNhdmVkLmVuYWJsZWQgJiZcbiAgICAgIGZvcm0ubGF0aXR1ZGUgPT09IGxhc3RTYXZlZC5sYXRpdHVkZSAmJlxuICAgICAgZm9ybS5sb25naXR1ZGUgPT09IGxhc3RTYXZlZC5sb25naXR1ZGVcbiAgICApO1xuICB9O1xuXG4gIGNvbnN0IHVwZGF0ZVNhdmVWaXNpYmlsaXR5ID0gKCk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IGhhc0Nvb3JkcyA9IGdlb0xhdC52YWx1ZS50cmltKCkgIT09IFwiXCIgJiYgZ2VvTG5nLnZhbHVlLnRyaW0oKSAhPT0gXCJcIjtcbiAgICBzYXZlQnRuLnN0eWxlLmRpc3BsYXkgPSBoYXNDb29yZHMgJiYgIWZvcm1NYXRjaGVzU2F2ZWQoKSA/IFwiXCIgOiBcIm5vbmVcIjtcbiAgfTtcblxuICBjb25zdCBjb21taXRTYXZlID0gKCk6IFByb21pc2U8dm9pZD4gPT5cbiAgICBQcm9taXNlLnJlc29sdmUob3B0aW9ucy5vblNhdmUocmVhZEZvcm0oKSkpLnRoZW4oKCkgPT4ge1xuICAgICAgbGFzdFNhdmVkID0gcmVhZEZvcm0oKTtcbiAgICAgIHNldFN0YXR1cyhcIlNhdmVkLlwiKTtcbiAgICAgIHVwZGF0ZVNhdmVWaXNpYmlsaXR5KCk7XG4gICAgfSk7XG4gIGdlb0VuYWJsZWQuY2hlY2tlZCA9IGluaXRpYWwuZW5hYmxlZDtcbiAgZ2VvRmllbGRzLnN0eWxlLmRpc3BsYXkgPSBpbml0aWFsLmVuYWJsZWQgPyBcIlwiIDogXCJub25lXCI7XG4gIGdlb0xhdC52YWx1ZSA9IGluaXRpYWwubGF0aXR1ZGUgIT09IDAgPyBTdHJpbmcoaW5pdGlhbC5sYXRpdHVkZSkgOiBcIlwiO1xuICBnZW9MbmcudmFsdWUgPSBpbml0aWFsLmxvbmdpdHVkZSAhPT0gMCA/IFN0cmluZyhpbml0aWFsLmxvbmdpdHVkZSkgOiBcIlwiO1xuICB1cGRhdGVTYXZlVmlzaWJpbGl0eSgpO1xuXG4gIGdlb0VuYWJsZWQuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCAoKSA9PiB7XG4gICAgZ2VvRmllbGRzLnN0eWxlLmRpc3BsYXkgPSBnZW9FbmFibGVkLmNoZWNrZWQgPyBcIlwiIDogXCJub25lXCI7XG4gICAgdXBkYXRlU2F2ZVZpc2liaWxpdHkoKTtcbiAgICBpZiAoZ2VvRW5hYmxlZC5jaGVja2VkKSB7XG4gICAgICBpZiAocGVuZGluZ0ZldGNoKSB7XG4gICAgICAgIHBlbmRpbmdGZXRjaC5hYm9ydGVkID0gdHJ1ZTtcbiAgICAgICAgcGVuZGluZ0ZldGNoID0gbnVsbDtcbiAgICAgICAgc2V0U3RhdHVzKFwiXCIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2b2lkIGNvbW1pdFNhdmUoKTtcbiAgICAgIGZpbGxXaXRoQ3VycmVudFBvc2l0aW9uKCgpID0+IHtcbiAgICAgICAgdm9pZCBjb21taXRTYXZlKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIGZvciAoY29uc3QgZmllbGQgb2YgW2dlb0xhdCwgZ2VvTG5nXSkge1xuICAgIGZpZWxkLmFkZEV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLCB1cGRhdGVTYXZlVmlzaWJpbGl0eSk7XG4gIH1cblxuICBmaWxsQ3VycmVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgIGZpbGxXaXRoQ3VycmVudFBvc2l0aW9uKCgpID0+IHNldFN0YXR1cyhcIlwiKSk7XG4gIH0pO1xuXG4gIHNhdmVCdG4uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICB2b2lkIGNvbW1pdFNhdmUoKTtcbiAgfSk7XG59O1xuIiwgImV4cG9ydCBpbnRlcmZhY2UgR2VvT3ZlcnJpZGUge1xuICBlbmFibGVkOiBib29sZWFuO1xuICBsYXRpdHVkZTogbnVtYmVyO1xuICBsb25naXR1ZGU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfR0VPX09WRVJSSURFOiBHZW9PdmVycmlkZSA9IHtcbiAgZW5hYmxlZDogZmFsc2UsXG4gIGxhdGl0dWRlOiAwLFxuICBsb25naXR1ZGU6IDAsXG59O1xuIiwgIiNzbnAtZmFiIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBib3R0b206IDgwcHg7XG4gIHJpZ2h0OiAxNnB4O1xuICB6LWluZGV4OiAyMTQ3NDgzNjQ2O1xuICBiYWNrZ3JvdW5kOiByZ2JhKDE0LCAyNCwgMzcsIDAuODUpO1xuICBib3JkZXI6IDFweCBzb2xpZCAjMWMyYjNhO1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgZm9udC1zaXplOiAyMHB4O1xuICBsaW5lLWhlaWdodDogMTtcbiAgd2lkdGg6IDQ0cHg7XG4gIGhlaWdodDogNDRweDtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIG9wYWNpdHk6IDAuOTtcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cztcbiAgYm94LXNoYWRvdzogMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC40KTtcbn1cbiNzbnAtZmFiOmhvdmVyIHtcbiAgb3BhY2l0eTogMTtcbn1cblxuI3NucC1wYW5lbCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiA2MHB4O1xuICByaWdodDogMTJweDtcbiAgei1pbmRleDogMjE0NzQ4MzY0NztcbiAgd2lkdGg6IDI4MHB4O1xuICBiYWNrZ3JvdW5kOiAjMGUxODI1O1xuICBib3JkZXI6IDFweCBzb2xpZCAjMWMyYjNhO1xuICBib3JkZXItcmFkaXVzOiA4cHg7XG4gIGJveC1zaGFkb3c6IDAgNHB4IDI0cHggcmdiYSgwLCAwLCAwLCAwLjUpO1xuICBmb250LWZhbWlseTpcbiAgICBzeXN0ZW0tdWksXG4gICAgLWFwcGxlLXN5c3RlbSxcbiAgICBcIlNlZ29lIFVJXCIsXG4gICAgc2Fucy1zZXJpZjtcbiAgY29sb3I6ICNmZmZmZmY7XG4gIHBhZGRpbmc6IDE0cHggMTZweDtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZ2FwOiAxMnB4O1xufVxuXG4uc25wLWhlYWRlciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2Vlbjtcbn1cbi5zbnAtaGVhZGVyIGgxIHtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBmb250LXdlaWdodDogNzAwO1xuICBtYXJnaW46IDA7XG4gIGxldHRlci1zcGFjaW5nOiAwLjAxZW07XG59XG5cbi5zbnAtY2xvc2Uge1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyOiBub25lO1xuICBjb2xvcjogIzdhOTBhNDtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICBwYWRkaW5nOiAycHggNHB4O1xuICB0cmFuc2l0aW9uOiBjb2xvciAwLjE1cztcbn1cbi5zbnAtY2xvc2U6aG92ZXIge1xuICBjb2xvcjogI2ZmZjtcbn1cbiIsICI8ZGl2IGNsYXNzPVwic25wLWhlYWRlclwiPlxuICA8aDE+U25pZmZpZXMgUGx1Zy1pbnM8L2gxPlxuICA8YnV0dG9uIGNsYXNzPVwic25wLWNsb3NlXCIgaWQ9XCJzbnAtY2xvc2VcIiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+XHUyNzE1PC9idXR0b24+XG48L2Rpdj5cbjxkaXYgaWQ9XCJzbnAtZ2VvLXJvb3RcIj48L2Rpdj5cbiIsICIvLyBTbmlmZmllcyBUb29scyBcdTIwMTQgaU9TIHVzZXJzY3JpcHRcbi8vIEluc3RhbGwgdmlhIGEgdXNlcnNjcmlwdCBtYW5hZ2VyIGFwcCAoZS5nLiBVc2Vyc2NyaXB0cywgU3RheSkgdGhhdCBzdXBwb3J0c1xuLy8gdGhlID09VXNlclNjcmlwdD09IG1ldGFkYXRhIGZvcm1hdC4gVGhlIG1ldGFkYXRhIGhlYWRlciBpcyBwcmVwZW5kZWQgYnkgdGhlXG4vLyBidWlsZCBzY3JpcHQ7IHRoaXMgZmlsZSBjb250YWlucyBvbmx5IHRoZSBydW50aW1lIGxvZ2ljLlxuXG5pbXBvcnQge1xuICBpbnN0YWxsR2VvSG9vayxcbiAgdHlwZSBHZW9PdmVycmlkZSxcbiAgREVGQVVMVF9HRU9fT1ZFUlJJREUsXG4gIEdFT19PVkVSUklERV9IVE1MLFxuICBHRU9fT1ZFUlJJREVfQ1NTLFxuICB3aXJlR2VvT3ZlcnJpZGVGb3JtLFxufSBmcm9tIFwiQHNuaWZmaWVzLXByb2plY3RzL2NvcmVcIjtcbmltcG9ydCBQQU5FTF9DU1MgZnJvbSBcIi4vcGFuZWwuY3NzXCI7XG5pbXBvcnQgUEFORUxfSFRNTCBmcm9tIFwiLi9wYW5lbC5odG1sXCI7XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgX19zbmlmZmllc0luamVjdGVkPzogYm9vbGVhbjtcbiAgfVxufVxuXG4vLyBcdTI1MDBcdTI1MDAgU3RvcmFnZSBcdTIwMTQgbG9jYWxTdG9yYWdlIGFkYXB0ZXIgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmNvbnN0IFNUT1JBR0VfS0VZID0gXCJzbmlmZmllcy1nZW9cIjtcblxuY29uc3QgbG9hZEdlb092ZXJyaWRlID0gKCk6IEdlb092ZXJyaWRlID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCByYXcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShTVE9SQUdFX0tFWSk7XG4gICAgcmV0dXJuIHJhdyA/IHsgLi4uREVGQVVMVF9HRU9fT1ZFUlJJREUsIC4uLkpTT04ucGFyc2UocmF3KSB9IDogeyAuLi5ERUZBVUxUX0dFT19PVkVSUklERSB9O1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4geyAuLi5ERUZBVUxUX0dFT19PVkVSUklERSB9O1xuICB9XG59O1xuXG5jb25zdCBzYXZlR2VvT3ZlcnJpZGUgPSAob3ZlcnJpZGU6IEdlb092ZXJyaWRlKTogdm9pZCA9PiB7XG4gIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFNUT1JBR0VfS0VZLCBKU09OLnN0cmluZ2lmeShvdmVycmlkZSkpO1xufTtcblxuLy8gXHUyNTAwXHUyNTAwIEZBQiBtb3VudCBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuY29uc3QgbW91bnRGYWIgPSAoZmFiOiBIVE1MQnV0dG9uRWxlbWVudCk6IHZvaWQgPT4ge1xuICBjb25zdCB0cnlJbnNlcnQgPSAoKTogYm9vbGVhbiA9PiB7XG4gICAgY29uc3QgbmF2VGFyZ2V0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oJ1t0aXRsZT1cIlNpdGVsaW5rc1wiXScpO1xuICAgIGlmIChuYXZUYXJnZXQ/LnBhcmVudEVsZW1lbnQpIHtcbiAgICAgIG5hdlRhcmdldC5wYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZShmYWIsIG5hdlRhcmdldC5uZXh0U2libGluZyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4gIGlmICh0cnlJbnNlcnQoKSkgcmV0dXJuO1xuXG4gIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4ge1xuICAgIGlmICh0cnlJbnNlcnQoKSkgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICB9KTtcbiAgb2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5ib2R5LCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9KTtcbn07XG5cbi8vIFx1MjUwMFx1MjUwMCBIb29rcyAocnVucyBhdCBkb2N1bWVudC1zdGFydCwgYmVmb3JlIHBhZ2Ugc2NyaXB0cykgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmludGVyZmFjZSBIb29rU3RhdGUge1xuICBjdXJyZW50T3ZlcnJpZGU6IEdlb092ZXJyaWRlO1xuICBob29rOiBSZXR1cm5UeXBlPHR5cGVvZiBpbnN0YWxsR2VvSG9vaz47XG4gIG5hdGl2ZUdldEN1cnJlbnRQb3NpdGlvbjogR2VvbG9jYXRpb25bXCJnZXRDdXJyZW50UG9zaXRpb25cIl07XG4gIHNlbmRMb2NhdGlvblVwZGF0ZTogKG92ZXJyaWRlOiBHZW9PdmVycmlkZSkgPT4gdm9pZDtcbn1cblxuZnVuY3Rpb24gaW5zdGFsbEhvb2tzKCk6IEhvb2tTdGF0ZSB7XG4gIGxldCBjdXJyZW50T3ZlcnJpZGU6IEdlb092ZXJyaWRlID0gbG9hZEdlb092ZXJyaWRlKCk7XG4gIGNvbnN0IGhvb2sgPSBpbnN0YWxsR2VvSG9vaygoKSA9PiBjdXJyZW50T3ZlcnJpZGUpO1xuICBjb25zdCBuYXRpdmVHZXRDdXJyZW50UG9zaXRpb24gPVxuICAgIGhvb2s/Lm5hdGl2ZUdldEN1cnJlbnRQb3NpdGlvbiA/P1xuICAgIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24uYmluZChuYXZpZ2F0b3IuZ2VvbG9jYXRpb24pO1xuXG4gIGNvbnN0IG5hdGl2ZUZldGNoID0gd2luZG93LmZldGNoLmJpbmQod2luZG93KTtcbiAgbGV0IGxhc3RMb2NhdGlvblJlcXVlc3Q6IHsgdXJsOiBzdHJpbmc7IGluaXQ6IFJlcXVlc3RJbml0IH0gfCBudWxsID0gbnVsbDtcbiAgbGV0IGFwaUJhc2U6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0IHNlbmRMb2NhdGlvblVwZGF0ZSA9IChvdmVycmlkZTogR2VvT3ZlcnJpZGUpOiB2b2lkID0+IHtcbiAgICBjb25zdCBzcG9vZmVkID0geyBsYXQ6IG92ZXJyaWRlLmxhdGl0dWRlLCBsbmc6IG92ZXJyaWRlLmxvbmdpdHVkZSB9O1xuICAgIGlmIChsYXN0TG9jYXRpb25SZXF1ZXN0KSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5wYXJzZSgobGFzdExvY2F0aW9uUmVxdWVzdC5pbml0LmJvZHkgYXMgc3RyaW5nKSA/PyBcInt9XCIpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgICBib2R5LnZpcnR1YWxMb2NhdGlvbiA9IHNwb29mZWQ7XG4gICAgICAgIGJvZHkucGh5c2ljYWxMb2NhdGlvbiA9IHNwb29mZWQ7XG4gICAgICAgIHZvaWQgbmF0aXZlRmV0Y2gobGFzdExvY2F0aW9uUmVxdWVzdC51cmwsIHsgLi4ubGFzdExvY2F0aW9uUmVxdWVzdC5pbml0LCBib2R5OiBKU09OLnN0cmluZ2lmeShib2R5KSB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIGZhbGwgdGhyb3VnaCB0byBwcm9hY3RpdmUgcmVxdWVzdFxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoYXBpQmFzZSkge1xuICAgICAgdm9pZCBuYXRpdmVGZXRjaChgJHthcGlCYXNlfS9hcGkvdmlzaXRvci9jdXJyZW50L2xvY2F0aW9uP3N0YXRlPWxvYWRlZGAsIHtcbiAgICAgICAgbWV0aG9kOiBcIlBVVFwiLFxuICAgICAgICBjcmVkZW50aWFsczogXCJpbmNsdWRlXCIsXG4gICAgICAgIGhlYWRlcnM6IHsgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIHZpcnR1YWxMb2NhdGlvbjogc3Bvb2ZlZCxcbiAgICAgICAgICBwaHlzaWNhbExvY2F0aW9uOiBzcG9vZmVkLFxuICAgICAgICAgIGhvbWVEaXN0YW5jZUluTWlsZXM6IG51bGwsXG4gICAgICAgIH0pLFxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIHdpbmRvdy5mZXRjaCA9IGFzeW5jIChpbnB1dCwgaW5pdCkgPT4ge1xuICAgIGNvbnN0IHVybCA9IHR5cGVvZiBpbnB1dCA9PT0gXCJzdHJpbmdcIiA/IGlucHV0IDogaW5wdXQgaW5zdGFuY2VvZiBVUkwgPyBpbnB1dC5ocmVmIDogKGlucHV0IGFzIFJlcXVlc3QpLnVybDtcbiAgICBjb25zdCBiYXNlTWF0Y2ggPSB1cmwubWF0Y2goL14oaHR0cHM/OlxcL1xcL1teL10qc25pZmZpZXNcXC5jb20pLyk7XG4gICAgaWYgKGJhc2VNYXRjaCAmJiAhYXBpQmFzZSkge1xuICAgICAgYXBpQmFzZSA9IGJhc2VNYXRjaFsxXSA/PyBudWxsO1xuICAgIH1cbiAgICBpZiAodXJsLmluY2x1ZGVzKFwiL2FwaS92aXNpdG9yL2N1cnJlbnQvbG9jYXRpb25cIikpIHtcbiAgICAgIGxhc3RMb2NhdGlvblJlcXVlc3QgPSB7IHVybCwgaW5pdDogeyAuLi5pbml0IH0gfTtcbiAgICAgIGlmIChjdXJyZW50T3ZlcnJpZGUuZW5hYmxlZCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnBhcnNlKChpbml0Py5ib2R5IGFzIHN0cmluZykgPz8gXCJ7fVwiKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgICBjb25zdCBzcG9vZmVkID0geyBsYXQ6IGN1cnJlbnRPdmVycmlkZS5sYXRpdHVkZSwgbG5nOiBjdXJyZW50T3ZlcnJpZGUubG9uZ2l0dWRlIH07XG4gICAgICAgICAgYm9keS52aXJ0dWFsTG9jYXRpb24gPSBzcG9vZmVkO1xuICAgICAgICAgIGJvZHkucGh5c2ljYWxMb2NhdGlvbiA9IHNwb29mZWQ7XG4gICAgICAgICAgaW5pdCA9IHsgLi4uaW5pdCwgYm9keTogSlNPTi5zdHJpbmdpZnkoYm9keSkgfTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLy8gbGVhdmUgdW5tb2RpZmllZCBpZiBwYXJzaW5nIGZhaWxzXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5hdGl2ZUZldGNoKGlucHV0LCBpbml0KTtcbiAgfTtcblxuICByZXR1cm4geyBjdXJyZW50T3ZlcnJpZGUsIGhvb2ssIG5hdGl2ZUdldEN1cnJlbnRQb3NpdGlvbiwgc2VuZExvY2F0aW9uVXBkYXRlIH07XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBVSSAocnVucyBhZnRlciBET01Db250ZW50TG9hZGVkKSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZnVuY3Rpb24gbW91bnRVSShzdGF0ZTogSG9va1N0YXRlIHwgbnVsbCk6IHZvaWQge1xuICBjb25zdCBob29rID0gc3RhdGU/Lmhvb2sgPz8gbnVsbDtcbiAgY29uc3QgbmF0aXZlR2V0Q3VycmVudFBvc2l0aW9uID0gc3RhdGU/Lm5hdGl2ZUdldEN1cnJlbnRQb3NpdGlvbiA/P1xuICAgICgoKSA9PiB7IHRocm93IG5ldyBFcnJvcihcImdlb2xvY2F0aW9uIHVuYXZhaWxhYmxlXCIpOyB9KTtcbiAgY29uc3Qgc2VuZExvY2F0aW9uVXBkYXRlID0gc3RhdGU/LnNlbmRMb2NhdGlvblVwZGF0ZSA/PyAoKCkgPT4ge30pO1xuICBsZXQgY3VycmVudE92ZXJyaWRlID0gc3RhdGU/LmN1cnJlbnRPdmVycmlkZSA/PyB7IC4uLkRFRkFVTFRfR0VPX09WRVJSSURFIH07XG5cbiAgY29uc3Qgc2hlbGxTdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgc2hlbGxTdHlsZS50ZXh0Q29udGVudCA9IFBBTkVMX0NTUztcbiAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzaGVsbFN0eWxlKTtcblxuICBjb25zdCBnZW9TdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgZ2VvU3R5bGUudGV4dENvbnRlbnQgPSBHRU9fT1ZFUlJJREVfQ1NTO1xuICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGdlb1N0eWxlKTtcblxuICBjb25zdCBmYWIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIpO1xuICBmYWIuaWQgPSBcInNucC1mYWJcIjtcbiAgZmFiLnRpdGxlID0gXCJTbmlmZmllcyBUb29sc1wiO1xuICBmYWIudGV4dENvbnRlbnQgPSBcIlx1RDgzRFx1RENDRFwiO1xuICBtb3VudEZhYihmYWIpO1xuXG4gIGNvbnN0IHBhbmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgcGFuZWwuaWQgPSBcInNucC1wYW5lbFwiO1xuICBwYW5lbC5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gIHBhbmVsLmlubmVySFRNTCA9IFBBTkVMX0hUTUw7XG4gIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocGFuZWwpO1xuXG4gIGNvbnN0IGdlb1Jvb3QgPSBwYW5lbC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PihcIiNzbnAtZ2VvLXJvb3RcIikhO1xuICBnZW9Sb290LmlubmVySFRNTCA9IEdFT19PVkVSUklERV9IVE1MO1xuXG4gIHdpcmVHZW9PdmVycmlkZUZvcm0oZ2VvUm9vdCwge1xuICAgIGluaXRpYWw6IGN1cnJlbnRPdmVycmlkZSxcbiAgICBvblNhdmU6IChuZXh0KSA9PiB7XG4gICAgICBzYXZlR2VvT3ZlcnJpZGUobmV4dCk7XG4gICAgICBjdXJyZW50T3ZlcnJpZGUgPSBuZXh0O1xuICAgICAgaG9vaz8ucmVmcmVzaFdhdGNoZXMoKTtcbiAgICAgIGlmIChuZXh0LmVuYWJsZWQpIHtcbiAgICAgICAgc2VuZExvY2F0aW9uVXBkYXRlKG5leHQpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZ2V0TmF0aXZlUG9zaXRpb246IG5hdGl2ZUdldEN1cnJlbnRQb3NpdGlvbixcbiAgfSk7XG5cbiAgY29uc3QgY2xvc2VCdG4gPSBwYW5lbC5xdWVyeVNlbGVjdG9yPEhUTUxCdXR0b25FbGVtZW50PihcIiNzbnAtY2xvc2VcIikhO1xuICBmYWIuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICBwYW5lbC5zdHlsZS5kaXNwbGF5ID0gcGFuZWwuc3R5bGUuZGlzcGxheSA9PT0gXCJub25lXCIgPyBcImJsb2NrXCIgOiBcIm5vbmVcIjtcbiAgfSk7XG4gIGNsb3NlQnRuLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgcGFuZWwuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICB9KTtcbn1cblxuLy8gXHUyNTAwXHUyNTAwIEVudHJ5IHBvaW50IFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuLy8gTXVzdCBydW4gYWZ0ZXIgYWxsIGNvbnN0IGRlY2xhcmF0aW9ucyBhYm92ZSBhcmUgaW5pdGlhbGl6ZWQuXG5cbmlmICh3aW5kb3cuX19zbmlmZmllc0luamVjdGVkKSB7XG4gIC8vIEFscmVhZHkgaW5zdGFsbGVkIFx1MjAxNCBub3RoaW5nIHRvIGRvLlxufSBlbHNlIHtcbiAgd2luZG93Ll9fc25pZmZpZXNJbmplY3RlZCA9IHRydWU7XG4gIGxldCBob29rU3RhdGU6IEhvb2tTdGF0ZSB8IG51bGwgPSBudWxsO1xuICB0cnkge1xuICAgIGhvb2tTdGF0ZSA9IGluc3RhbGxIb29rcygpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiW3NuaWZmaWVzLXRvb2xzXSBob29rIGluc3RhbGwgZmFpbGVkOlwiLCBlcnIpO1xuICB9XG4gIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSBcImxvYWRpbmdcIikge1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsICgpID0+IG1vdW50VUkoaG9va1N0YXRlKSwgeyBvbmNlOiB0cnVlIH0pO1xuICB9IGVsc2Uge1xuICAgIG1vdW50VUkoaG9va1N0YXRlKTtcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIm1CQW9CTyxJQUFNQSxFQUFpQixDQUM1QkMsRUFDQUMsSUFDeUIsQ0FDekIsSUFBTUMsRUFBTSxVQUFVLFlBQ3RCLEdBQUksQ0FBQ0EsR0FBT0EsRUFBSSxrQkFDZCxPQUFPLEtBR1QsSUFBTUMsRUFBMkJELEVBQUksbUJBQW1CLEtBQUtBLENBQUcsRUFDMURFLEVBQXNCRixFQUFJLGNBQWMsS0FBS0EsQ0FBRyxFQUNoREcsRUFBbUJILEVBQUksV0FBVyxLQUFLQSxDQUFHLEVBRTFDSSxFQUFpQixJQUFJLElBRXJCQyxFQUFpQkMsR0FBdUQsQ0FDNUUsSUFBTUMsRUFBS1QsRUFBWSxFQUN2QixHQUFJLENBQUNTLEdBQUksUUFDUCxlQUFRLElBQUksd0RBQXlERCxFQUFTLE1BQU0sRUFDN0VBLEVBRVQsSUFBTUUsRUFBVSxDQUNkLE9BQVEsQ0FDTixTQUFVRCxFQUFHLFNBQ2IsVUFBV0EsRUFBRyxVQUNkLFNBQVUsR0FDVixTQUFVLEtBQ1YsaUJBQWtCLEtBQ2xCLFFBQVMsS0FDVCxNQUFPLElBQ1QsRUFDQSxVQUFXLEtBQUssSUFBSSxDQUN0QixFQUNBLGVBQVEsSUFBSSxtQ0FBb0NDLEVBQVEsTUFBTSxFQUN2REEsQ0FDVCxFQUVNQyxFQUNIQyxHQUNBSixHQUFhLENBQ1pQLElBQWEsQ0FDWCxTQUFVTyxFQUFTLE9BQU8sU0FDMUIsVUFBV0EsRUFBUyxPQUFPLFNBQzdCLENBQUMsRUFDREksRUFBU0wsRUFBY0MsQ0FBUSxDQUFDLENBQ2xDLEVBRUZOLEVBQUksbUJBQXFCLENBQUNX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QWMsS0FBSyxFQUMxQ0EsRUFBTSxHQUFLLFlBQ1hBLEVBQU0sTUFBTSxRQUFVLE9BQ3RCQSxFQUFNLFVBQVlILEVBQ2xCLFNBQVMsS0FBSyxZQUFZRyxDQUFLLEVBRS9CLElBQU1DLEVBQVVELEVBQU0sY0FBMkIsZUFBZSxFQUNoRUMsRUFBUSxVQUFZRixFQUVwQkcsRUFBb0JELEVBQVMsQ0FDM0IsUUFBU3JCLEVBQ1QsT0FBU3VCLEdBQVMsQ0FDaEIvQixFQUFnQitCLENBQUksRUFDcEJ2QixFQUFrQnVCLEVBQ2xCdEIsR0FBTSxlQUFlLEVBQ2pCc0IsRUFBSyxTQUNQaEIsRUFBbUJnQixDQUFJLENBRTNCLEVBQ0Esa0JBQW1CcEIsQ0FDckIsQ0FBQyxFQUVELElBQU1xQixFQUFXSixFQUFNLGNBQWlDLFlBQVksRUFDcEV6QixFQUFJLGlCQUFpQixRQUFTLElBQU0sQ0FDbEN5QixFQUFNLE1BQU0sUUFBVUEsRUFBTSxNQUFNLFVBQVksT0FBUyxRQUFVLE1BQ25FLENBQUMsRUFDREksRUFBUyxpQkFBaUIsUUFBUyxJQUFNLENBQ3ZDSixFQUFNLE1BQU0sUUFBVSxNQUN4QixDQUFDLENBQ0gsQ0FLQSxHQUFJLFFBQU8sbUJBRUosQ0FDTCxPQUFPLG1CQUFxQixHQUM1QixJQUFJSyxFQUE4QixLQUNsQyxHQUFJLENBQ0ZBLEVBQVkxQixFQUFhLENBQzNCLE9BQVMyQixFQUFLLENBQ1osUUFBUSxNQUFNLHdDQUF5Q0EsQ0FBRyxDQUM1RCxDQUNJLFNBQVMsYUFBZSxVQUMxQixTQUFTLGlCQUFpQixtQkFBb0IsSUFBTVosRUFBUVcsQ0FBUyxFQUFHLENBQUUsS0FBTSxFQUFLLENBQUMsRUFFdEZYLEVBQVFXLENBQVMsQ0FFckIiLAogICJuYW1lcyI6IFsiaW5zdGFsbEdlb0hvb2siLCAiZ2V0T3ZlcnJpZGUiLCAib25Qb3NpdGlvbiIsICJnZW8iLCAibmF0aXZlR2V0Q3VycmVudFBvc2l0aW9uIiwgIm5hdGl2ZVdhdGNoUG9zaXRpb24iLCAibmF0aXZlQ2xlYXJXYXRjaCIsICJhY3RpdmVXYXRjaGVycyIsICJhcHBseU92ZXJyaWRlIiwgInBvc2l0aW9uIiwgIm92IiwgInNwb29mZWQiLCAid3JhcFN1Y2Nlc3MiLCAiY2FsbGJhY2siLCAic3VjY2VzcyIsICJlcnJvciIsICJvcHRpb25zIiwgIndyYXBwZWQiLCAiaWQiLCAicmVmcmVzaFdhdGNoZXMiLCAicG9zIiwgImNiIiwgImdlb19vdmVycmlkZV9kZWZhdWx0IiwgImdlb19vdmVycmlkZV9kZWZhdWx0IiwgIndpcmVHZW9PdmVycmlkZUZvcm0iLCAiY29udGFpbmVyIiwgIm9wdGlvbnMiLCAiZWwiLCAiaWQiLCAiZGV0YWlscyIsICJnZW9FbmFibGVkIiwgImdlb0ZpZWxkcyIsICJnZW9MYXQiLCAiZ2VvTG5nIiwgImZpbGxDdXJyZW50IiwgInNhdmVCdG4iLCAic3RhdHVzRWwiLCAib25Ub2dnbGUiLCAic2V0U3RhdHVzIiwgInRleHQiLCAicmVhZEZvcm0iLCAicGVuZGluZ0ZldGNoIiwgImZpbGxXaXRoQ3VycmVudFBvc2l0aW9uIiwgIm9uU3VjY2VzcyIsICJ0b2tlbiIsICJwb3MiLCAidXBkYXRlU2F2ZVZpc2liaWxpdHkiLCAiZXJyIiwgImluaXRpYWwiLCAibGFzdFNhdmVkIiwgImZvcm1NYXRjaGVzU2F2ZWQiLCAiZm9ybSIsICJoYXNDb29yZHMiLCAiY29tbWl0U2F2ZSIsICJmaWVsZCIsICJERUZBVUxUX0dFT19PVkVSUklERSIsICJwYW5lbF9kZWZhdWx0IiwgInBhbmVsX2RlZmF1bHQiLCAiU1RPUkFHRV9LRVkiLCAibG9hZEdlb092ZXJyaWRlIiwgInJhdyIsICJERUZBVUxUX0dFT19PVkVSUklERSIsICJzYXZlR2VvT3ZlcnJpZGUiLCAib3ZlcnJpZGUiLCAibW91bnRGYWIiLCAiZmFiIiwgInRyeUluc2VydCIsICJuYXZUYXJnZXQiLCAib2JzZXJ2ZXIiLCAiaW5zdGFsbEhvb2tzIiwgImN1cnJlbnRPdmVycmlkZSIsICJob29rIiwgImluc3RhbGxHZW9Ib29rIiwgIm5hdGl2ZUdldEN1cnJlbnRQb3NpdGlvbiIsICJuYXRpdmVGZXRjaCIsICJsYXN0TG9jYXRpb25SZXF1ZXN0IiwgImFwaUJhc2UiLCAic2VuZExvY2F0aW9uVXBkYXRlIiwgInNwb29mZWQiLCAiYm9keSIsICJpbnB1dCIsICJpbml0IiwgInVybCIsICJiYXNlTWF0Y2giLCAibW91bnRVSSIsICJzdGF0ZSIsICJzaGVsbFN0eWxlIiwgInBhbmVsX2RlZmF1bHQiLCAiZ2VvU3R5bGUiLCAiZ2VvX292ZXJyaWRlX2RlZmF1bHQiLCAicGFuZWwiLCAiZ2VvUm9vdCIsICJ3aXJlR2VvT3ZlcnJpZGVGb3JtIiwgIm5leHQiLCAiY2xvc2VCdG4iLCAiaG9va1N0YXRlIiwgImVyciJdCn0K