// ==UserScript== // @name Sniffies Tools Userscript // @namespace https://sniffies.com // @author Beam // @version 0.2 // @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== // @buildTime 2026-08-25T05:31:38.568Z // @buildLocation remote "use strict";(()=>{var M=e=>`[sniffies-${e}]`,b=e=>{let r=M(e),t=(...o)=>{};return t.warn=(...o)=>{console.warn(r,...o)},t.error=(...o)=>{console.error(r,...o)},t};var B=(e,r)=>{let t=b("geo"),o=navigator.geolocation;if(!o||o.__sniffiesPatched)return null;let s=o.getCurrentPosition.bind(o),c=o.watchPosition.bind(o),a=o.clearWatch.bind(o),l=new Map,m=i=>{let n=e();if(!n?.enabled)return t("override disabled, passing real coords",i.coords),i;let p={coords:{latitude:n.latitude,longitude:n.longitude,accuracy:10,altitude:null,altitudeAccuracy:null,heading:null,speed:null},timestamp:Date.now()};return t("applying override",p.coords),p},d=i=>n=>{r?.({latitude:n.coords.latitude,longitude:n.coords.longitude}),i(m(n))};o.getCurrentPosition=(i,n,p)=>{t("getCurrentPosition intercepted"),s(d(i),n,p)},o.watchPosition=(i,n,p)=>{t("watchPosition intercepted");let f=d(i),v=c(f,n,p);return l.set(v,f),v},o.clearWatch=i=>{l.delete(i),a(i)};let u=()=>{l.size!==0&&s(i=>{for(let n of l.values())n(i)},void 0,{maximumAge:0})};return o.__sniffiesPatched=!0,{nativeGetCurrentPosition:s,nativeWatchPosition:c,refreshWatches:u}};var Z="prod.ws.sniffies.com",ee=e=>{try{let r=new URL(e,typeof location<"u"?location.href:void 0);return r.host!==Z?null:r.searchParams.get("userId")}catch{return null}},C=e=>{let r=b("user-id"),t=typeof WebSocket<"u"?WebSocket:void 0;if(!t||t.__sniffiesUserIdPatched)return r("hook not installed (no WebSocket or already patched)"),!1;let o=function(s,c){let a=ee(s);return a&&(r("observed userId on WebSocket connect",a),e(a)),c===void 0?new t(s):new t(s,c)};return o.prototype=t.prototype,o.CONNECTING=t.CONNECTING,o.OPEN=t.OPEN,o.CLOSING=t.CLOSING,o.CLOSED=t.CLOSED,o.__sniffiesUserIdPatched=!0,window.WebSocket=o,r("hook installed"),!0};var oe='[data-testid="markerUserContainer"]',G=e=>{let r=b("profile-border"),t=o=>{let s=e();if(!s.enabled)return;let c=o.target;if(!(c instanceof Element))return;let a=c.closest(oe);if(!a||a.dataset.withinRadius!=="false"||!a.id)return;o.preventDefault(),o.stopPropagation(),o.stopImmediatePropagation();let l=`https://sniffies.com/profile/${a.id}`;r("redirecting to out-of-radius profile",a.id),s.openInNewTab?window.open(l,"_blank"):window.location.assign(l)};return document.addEventListener("click",t,!0),{uninstall:()=>document.removeEventListener("click",t,!0)}};var N=async e=>{let r=b("log-init"),{serverBase:t,clientSecret:o,userId:s,clientType:c,version:a}=e;if(!t||!s){r("skipping, missing serverBase or userId",{serverBase:t,userId:s});return}r("sending init ping",{userId:s,clientType:c,version:a});try{let l=t.replace(/\/+$/,""),m=await fetch(`${l}/api/logInit`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${o}`},body:JSON.stringify({userId:s,clientType:c,version:a})});m.ok?r("init ping sent"):r.error("init ping rejected",m.status)}catch(l){r.error("init ping failed",l)}};var S=`

Location Spoofing

Spoof the coordinates Sniffies sees.

`;var L=`/* 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 H=(e,r)=>{let t=g=>e.querySelector(`#${g}`),o=e.querySelector("#geo-details"),s=t("geo-enabled"),c=t("geo-fields"),a=t("geo-lat"),l=t("geo-lng"),m=t("geo-fill-current"),d=t("geo-save"),u=t("geo-status");o&&(o.open=r.initialOpen,o.addEventListener("toggle",()=>r.onToggle(o.open)));let i=g=>{u.textContent=g},n=()=>({enabled:s.checked,latitude:parseFloat(a.value)||0,longitude:parseFloat(l.value)||0}),p=null,f=g=>{let I={aborted:!1};p=I,i("Getting location\u2026"),r.getNativePosition(h=>{I.aborted||(p=null,a.value=String(h.coords.latitude),l.value=String(h.coords.longitude),O(),g())},h=>{I.aborted||(p=null,i(`Could not get location: ${h.message} (code ${h.code})`))},{timeout:1e4})},{initial:v}=r,y={...v},Q=()=>{let g=n();return g.enabled===y.enabled&&g.latitude===y.latitude&&g.longitude===y.longitude},O=()=>{let g=a.value.trim()!==""&&l.value.trim()!=="";d.style.display=g&&!Q()?"":"none"},k=()=>Promise.resolve(r.onSave(n())).then(()=>{y=n(),i("Saved."),O()});s.checked=v.enabled,c.style.display=v.enabled?"":"none",a.value=v.latitude!==0?String(v.latitude):"",l.value=v.longitude!==0?String(v.longitude):"",O(),s.addEventListener("change",()=>{c.style.display=s.checked?"":"none",O(),s.checked?p&&(p.aborted=!0,p=null,i("")):(k(),f(()=>{k()}))});for(let g of[a,l])g.addEventListener("input",O);m.addEventListener("click",()=>{f(()=>i(""))}),d.addEventListener("click",()=>{k()})};var _=`.snp-version { font-size: 10px; font-weight: 400; color: #7a90a4; letter-spacing: 0.02em; } `;var D=(e,r)=>{let t=e.querySelector("#snp-version");t&&(t.textContent=`v${r}`)};var w=`

Open Profiles Outside Boundary

Bypass the paywall by directly opening profiles outside your boundary. Recommend opening in a new tab, current tab triggers current page reload.

`;var P=`/* Section shell \u2014 shared with geo-override.css (popup.css .section, details.collapsible, .collapsible-body) */ #snp-profile-border-root .section { background: #0e1825; border: 1px solid #1c2b3a; border-radius: 8px; padding: 14px; display: flex; flex-direction: column; gap: 10px; } #snp-profile-border-root .section h2 { margin: 0; font-size: 10px; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; color: #7a90a4; } #snp-profile-border-root details.collapsible { padding: 0; display: block; } #snp-profile-border-root details.collapsible summary { list-style: none; cursor: pointer; padding: 14px; display: flex; align-items: center; gap: 6px; user-select: none; } #snp-profile-border-root details.collapsible summary::-webkit-details-marker { display: none; } #snp-profile-border-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-profile-border-root details.collapsible[open] summary::after { transform: rotate(270deg); } #snp-profile-border-root details.collapsible summary h2 { margin: 0; } #snp-profile-border-root .collapsible-body { padding: 0 14px 14px; display: flex; flex-direction: column; gap: 10px; } /* Form fields \u2014 shared with geo-override.css (popup.css .row, .hint, .field, button.primary/secondary, .actions) */ #snp-profile-border-root .row { display: flex; align-items: center; gap: 8px; font-size: 13px; cursor: pointer; color: #ffffff; } #snp-profile-border-root .row input[type="checkbox"] { accent-color: #ff5500; width: 14px; height: 14px; } #snp-profile-border-root .hint { font-size: 11px; color: #7a90a4; margin: 0; } #snp-profile-border-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-profile-border-root button.primary:hover:not(:disabled) { background: #e04a00; } #snp-profile-border-root button.primary:disabled { background: #1c2b3a; color: #7a90a4; cursor: not-allowed; } #snp-profile-border-root .field { display: flex; flex-direction: column; gap: 4px; font-size: 11px; color: #7a90a4; } #snp-profile-border-root .field select { 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-profile-border-root .field select:focus { border-color: #ff5500; } #snp-profile-border-root .actions { display: flex; gap: 8px; align-items: center; } `;var T={current:"Current tab",currentSaved:"Current tab (saved)",new:"New tab",newSaved:"New tab (saved)"},F=(e,r)=>{let t=f=>e.querySelector(`#${f}`),o=e.querySelector("#profile-border-details"),s=t("profile-border-enabled"),c=t("profile-border-tab-field"),a=t("profile-border-tab"),l=a.querySelector('option[value="current-tab"]'),m=a.querySelector('option[value="new-tab"]'),d=t("profile-border-save");o&&(o.open=r.initialOpen,o.addEventListener("toggle",()=>r.onToggle(o.open)));let u=f=>{l.text=f?T.current:T.currentSaved,m.text=f?T.newSaved:T.new},i=()=>({enabled:s.checked,openInNewTab:a.value==="new-tab"}),{initial:n}=r,p=n.openInNewTab;s.checked=n.enabled,c.style.display=n.enabled?"":"none",a.value=n.openInNewTab?"new-tab":"current-tab",u(n.openInNewTab),d.style.display="none",s.addEventListener("change",()=>{c.style.display=s.checked?"":"none",r.onSave(i())}),a.addEventListener("change",()=>{let f=a.value==="new-tab"!==p;d.style.display=f?"":"none"}),d.addEventListener("click",()=>{let f=i();Promise.resolve(r.onSave(f)).then(()=>{u(f.openInNewTab),p=f.openInNewTab,d.style.display="none"})})};var E={enabled:!1,latitude:0,longitude:0},x={enabled:!1,openInNewTab:!0};var U=`#snp-fab { position: fixed; /* TODO This may still need reworking */ bottom: calc(80px + 5vh); 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-title { display: flex; align-items: baseline; gap: 6px; } .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 A=`

Sniffies Plug-ins

`;var V="sniffies-geo",W="sniffies-profile-border",z=()=>{try{let e=localStorage.getItem(V);return e?{...E,...JSON.parse(e)}:{...E}}catch{return{...E}}},j=e=>{localStorage.setItem(V,JSON.stringify(e))},q=()=>{try{let e=localStorage.getItem(W);return e?{...x,...JSON.parse(e)}:{...x}}catch{return{...x}}},$=e=>{localStorage.setItem(W,JSON.stringify(e))};var J="https://sniffies-projects.vercel.app",K="ed6fd0cd-fe58-4dcc-83cd-65651771e0e9",R="0.2";var de=b("user-id-logger"),Y=()=>{let e=!1;return C(r=>{de("user id observed",r),!e&&(e=!0,N({serverBase:J,clientSecret:K,userId:r,clientType:"userscript",version:R}))})};var ce=b("tools"),pe=e=>{let r=()=>{let o=document.querySelector('[title="Sitelinks"]');return o?.parentElement?(o.parentElement.insertBefore(e,o.nextSibling),!0):!1};if(r())return;let t=new MutationObserver(()=>{r()&&t.disconnect()});t.observe(document.body,{childList:!0,subtree:!0})};function fe(){Y();let e=z(),r=B(()=>e),t=r?.nativeGetCurrentPosition??navigator.geolocation.getCurrentPosition.bind(navigator.geolocation),o=window.fetch.bind(window),s=null,c=null,a=d=>{let u={lat:d.latitude,lng:d.longitude};if(s)try{let i=JSON.parse(s.init.body??"{}");i.virtualLocation=u,i.physicalLocation=u,o(s.url,{...s.init,body:JSON.stringify(i)});return}catch{}c&&o(`${c}/api/visitor/current/location?state=loaded`,{method:"PUT",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({virtualLocation:u,physicalLocation:u,homeDistanceInMiles:null})})};window.fetch=async(d,u)=>{let i=typeof d=="string"?d:d instanceof URL?d.href:d.url,n=i.match(/^(https?:\/\/[^/]*sniffies\.com)/);if(n&&!c&&(c=n[1]??null),i.includes("/api/visitor/current/location")&&(s={url:i,init:{...u}},e.enabled))try{let p=JSON.parse(u?.body??"{}"),f={lat:e.latitude,lng:e.longitude};p.virtualLocation=f,p.physicalLocation=f,u={...u,body:JSON.stringify(p)}}catch{}return o(d,u)};let l=q();return G(()=>l),{currentOverride:e,hook:r,nativeGetCurrentPosition:t,sendLocationUpdate:a,currentProfileBorderOpen:l,updateProfileBorderOpen:d=>{l=d}}}function X(e){let r=e?.hook??null,t=e?.nativeGetCurrentPosition??(()=>{throw new Error("geolocation unavailable")}),o=e?.sendLocationUpdate??(()=>{}),s=e?.currentOverride??{...E},c=e?.updateProfileBorderOpen??(()=>{}),a=e?.currentProfileBorderOpen??{...x},l=document.createElement("style");l.textContent=U,document.head.appendChild(l);let m=document.createElement("style");m.textContent=L,document.head.appendChild(m);let d=document.createElement("style");d.textContent=P,document.head.appendChild(d);let u=document.createElement("style");u.textContent=_,document.head.appendChild(u);let i=document.createElement("button");i.id="snp-fab",i.title="Sniffies Tools",i.textContent="\u{1F4CD}",pe(i);let n=document.createElement("div");n.id="snp-panel",n.style.display="none",n.innerHTML=A,document.body.appendChild(n),D(n,R);let p=n.querySelector("#snp-geo-root");p.innerHTML=S,H(p,{initial:s,onSave:y=>{j(y),s=y,r?.refreshWatches(),y.enabled&&o(y)},getNativePosition:t,initialOpen:!1,onToggle:()=>{}});let f=n.querySelector("#snp-profile-border-root");f.innerHTML=w,F(f,{initial:a,onSave:y=>{$(y),c(y)},initialOpen:!1,onToggle:()=>{}});let v=n.querySelector("#snp-close");i.addEventListener("click",()=>{n.style.display=n.style.display==="none"?"flex":"none"}),v.addEventListener("click",()=>{n.style.display="none"})}if(!window.__sniffiesInjected){window.__sniffiesInjected=!0;let e=null;try{e=fe()}catch(r){ce.error("hook install failed:",r)}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>X(e),{once:!0}):X(e)}})(); //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vY29yZS9zcmMvbG9nLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2dlby1ob29rLnRzIiwgIi4uLy4uL2NvcmUvc3JjL3VzZXItaWQtaG9vay50cyIsICIuLi8uLi9jb3JlL3NyYy9wcm9maWxlLWJvcmRlci1ob29rLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2xvZy1pbml0LnRzIiwgIi4uLy4uL2NvcmUvc3JjL2dlby1vdmVycmlkZS5odG1sIiwgIi4uLy4uL2NvcmUvc3JjL2dlby1vdmVycmlkZS5jc3MiLCAiLi4vLi4vY29yZS9zcmMvZ2VvLW92ZXJyaWRlLXVpLnRzIiwgIi4uLy4uL2NvcmUvc3JjL3ZlcnNpb24tYmFkZ2UuY3NzIiwgIi4uLy4uL2NvcmUvc3JjL3ZlcnNpb24tYmFkZ2UudHMiLCAiLi4vLi4vY29yZS9zcmMvcHJvZmlsZS1ib3JkZXIuaHRtbCIsICIuLi8uLi9jb3JlL3NyYy9wcm9maWxlLWJvcmRlci5jc3MiLCAiLi4vLi4vY29yZS9zcmMvcHJvZmlsZS1ib3JkZXItdWkudHMiLCAiLi4vLi4vY29yZS9zcmMvc2V0dGluZ3MudHMiLCAiLi4vc3JjL3BhbmVsLmNzcyIsICIuLi9zcmMvcGFuZWwuaHRtbCIsICIuLi9zcmMvc2hhcmVkL3NldHRpbmdzLnRzIiwgIi4uL3NyYy9zaGFyZWQvZW52LnRzIiwgIi4uL3NyYy91c2VyLWlkLWxvZ2dlci50cyIsICIuLi9zcmMvdXNlcnNjcmlwdC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLy8gVGFnZ2VkIGxvZ2dlciwgc2hhcmVkIGJ5IGV2ZXJ5IHBhY2thZ2UgdGhhdCBidW5kbGVzIGNvcmUuIFRoZSBiYXNlIGNhbGxcbi8vIChsb2coLi4uKSkgaXMgZGVidWctZ2F0ZWQgc28gcHJvZHVjdGlvbiBidWlsZHMgZGVhZC1jb2RlLWVsaW1pbmF0ZSBpdFxuLy8gKGVzYnVpbGQgaW5saW5lcyBfX0RFQlVHX189ZmFsc2UpLiBgd2FybmAgYW5kIGBlcnJvcmAgYWx3YXlzIGxvZyBcdTIwMTQgdGhleVxuLy8gc2lnbmFsIHJlYWwgcHJvYmxlbXMgYW5kIHNob3VsZCBiZSB2aXNpYmxlIGluIHByb2QuXG4vL1xuLy8gUmVsaWVzIG9uIHRoZSBgX19ERUJVR19fYCBnbG9iYWwsIHdoaWNoIGVhY2ggY29uc3VtZXIncyBlc2J1aWxkIGNvbmZpZ1xuLy8gZGVmaW5lcyAoc2VlIGNvcmUvc3JjL2FtYmllbnQuZC50cyBmb3IgdGhlIGRlY2xhcmF0aW9uKS5cblxuZXhwb3J0IGludGVyZmFjZSBMb2dnZXIge1xuICAoLi4uYXJnczogdW5rbm93bltdKTogdm9pZDtcbiAgd2FybjogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdm9pZDtcbiAgZXJyb3I6ICguLi5hcmdzOiB1bmtub3duW10pID0+IHZvaWQ7XG59XG5cbi8vIEFsbCBjbGllbnQgY29uc29sZSB0YWdzIGZvbGxvdyB0aGUgXCJbc25pZmZpZXMtPG5hbWU+XVwiIGZvcm1hdC5cbmV4cG9ydCBjb25zdCBmb3JtYXRUYWcgPSAobmFtZTogc3RyaW5nKTogc3RyaW5nID0+IGBbc25pZmZpZXMtJHtuYW1lfV1gO1xuXG5leHBvcnQgY29uc3QgY3JlYXRlTG9nZ2VyID0gKG5hbWU6IHN0cmluZyk6IExvZ2dlciA9PiB7XG4gIGNvbnN0IHRhZyA9IGZvcm1hdFRhZyhuYW1lKTtcbiAgY29uc3QgbG9nID0gKCguLi5hcmdzOiB1bmtub3duW10pOiB2b2lkID0+IHtcbiAgICBpZiAoX19ERUJVR19fKSB7XG4gICAgICBjb25zb2xlLmxvZyh0YWcsIC4uLmFyZ3MpO1xuICAgIH1cbiAgfSkgYXMgTG9nZ2VyO1xuICBsb2cud2FybiA9ICguLi5hcmdzOiB1bmtub3duW10pOiB2b2lkID0+IHtcbiAgICBjb25zb2xlLndhcm4odGFnLCAuLi5hcmdzKTtcbiAgfTtcbiAgbG9nLmVycm9yID0gKC4uLmFyZ3M6IHVua25vd25bXSk6IHZvaWQgPT4ge1xuICAgIGNvbnNvbGUuZXJyb3IodGFnLCAuLi5hcmdzKTtcbiAgfTtcbiAgcmV0dXJuIGxvZztcbn07XG4iLCAiaW1wb3J0IHR5cGUgeyBHZW9PdmVycmlkZSB9IGZyb20gXCIuL3NldHRpbmdzLmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tIFwiLi9sb2cuanNcIjtcblxudHlwZSBQYXRjaGVkR2VvID0gR2VvbG9jYXRpb24gJiB7IF9fc25pZmZpZXNQYXRjaGVkPzogYm9vbGVhbiB9O1xuXG5leHBvcnQgaW50ZXJmYWNlIEdlb0hvb2tSZXN1bHQge1xuICBuYXRpdmVHZXRDdXJyZW50UG9zaXRpb246IEdlb2xvY2F0aW9uW1wiZ2V0Q3VycmVudFBvc2l0aW9uXCJdO1xuICBuYXRpdmVXYXRjaFBvc2l0aW9uOiBHZW9sb2NhdGlvbltcIndhdGNoUG9zaXRpb25cIl07XG4gIC8qKiBSZS1maXJlcyBhbGwgYWN0aXZlIHdhdGNoUG9zaXRpb24gc3Vic2NyaWJlcnMgd2l0aCB0aGUgY3VycmVudCByZWFsIHBvc2l0aW9uLiBDYWxsIHRoaXMgd2hlbmV2ZXIgdGhlIG92ZXJyaWRlIGNoYW5nZXMgc28gYWN0aXZlIHdhdGNoZXMgcmVmbGVjdCB0aGUgbmV3IHN0YXRlIGltbWVkaWF0ZWx5LiAqL1xuICByZWZyZXNoV2F0Y2hlczogKCkgPT4gdm9pZDtcbn1cblxuLyoqXG4gKiBXcmFwcyBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24gdG8gaW50ZXJjZXB0IHBvc2l0aW9uIGNhbGxzLlxuICpcbiAqIEBwYXJhbSBnZXRPdmVycmlkZSAtIENhbGxlZCBvbiBldmVyeSBwb3NpdGlvbiByZXF1ZXN0OyByZXR1cm4gbnVsbCB0byBwYXNzIHRocm91Z2ggcmVhbCBjb29yZHMuXG4gKiBAcGFyYW0gb25Qb3NpdGlvbiAgLSBPcHRpb25hbCBjYWxsYmFjayBmaXJlZCB3aXRoIHRoZSByZWFsIChwcmUtc3Bvb2YpIGNvb3JkcywgdXNlZnVsIGZvclxuICogICAgICAgICAgICAgICAgICAgICAgcmVsYXlpbmcgb2JzZXJ2ZWQgcG9zaXRpb25zIGJhY2sgdG8gYSBzdG9yYWdlIGxheWVyLlxuICogQHJldHVybnMgTmF0aXZlIGdlbyBtZXRob2RzIChuZWVkZWQgYnkgY2FsbGVycyB0aGF0IG11c3QgYnlwYXNzIHRoZSBob29rLCBlLmcuIFwiZmlsbCB3aXRoXG4gKiAgICAgICAgICBjdXJyZW50XCIgaW4gYSBVSSBydW5uaW5nIG9uIHRoZSBzYW1lIHBhZ2UpLCBvciBudWxsIGlmIGFscmVhZHkgcGF0Y2hlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IGluc3RhbGxHZW9Ib29rID0gKFxuICBnZXRPdmVycmlkZTogKCkgPT4gR2VvT3ZlcnJpZGUgfCBudWxsLFxuICBvblBvc2l0aW9uPzogKGNvb3JkczogeyBsYXRpdHVkZTogbnVtYmVyOyBsb25naXR1ZGU6IG51bWJlciB9KSA9PiB2b2lkLFxuKTogR2VvSG9va1Jlc3VsdCB8IG51bGwgPT4ge1xuICBjb25zdCBsb2cgPSBjcmVhdGVMb2dnZXIoXCJnZW9cIik7XG4gIGNvbnN0IGdlbyA9IG5hdmlnYXRvci5nZW9sb2NhdGlvbiBhcyBQYXRjaGVkR2VvIHwgdW5kZWZpbmVkO1xuICBpZiAoIWdlbyB8fCBnZW8uX19zbmlmZmllc1BhdGNoZWQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IG5hdGl2ZUdldEN1cnJlbnRQb3NpdGlvbiA9IGdlby5nZXRDdXJyZW50UG9zaXRpb24uYmluZChnZW8pO1xuICBjb25zdCBuYXRpdmVXYXRjaFBvc2l0aW9uID0gZ2VvLndhdGNoUG9zaXRpb24uYmluZChnZW8pO1xuICBjb25zdCBuYXRpdmVDbGVhcldhdGNoID0gZ2VvLmNsZWFyV2F0Y2guYmluZChnZW8pO1xuXG4gIGNvbnN0IGFjdGl2ZVdhdGNoZXJzID0gbmV3IE1hcDxudW1iZXIsIFBvc2l0aW9uQ2FsbGJhY2s+KCk7XG5cbiAgY29uc3QgYXBwbHlPdmVycmlkZSA9IChwb3NpdGlvbjogR2VvbG9jYXRpb25Qb3NpdGlvbik6IEdlb2xvY2F0aW9uUG9zaXRpb24gPT4ge1xuICAgIGNvbnN0IG92ID0gZ2V0T3ZlcnJpZGUoKTtcbiAgICBpZiAoIW92Py5lbmFibGVkKSB7XG4gICAgICBsb2coXCJvdmVycmlkZSBkaXNhYmxlZCwgcGFzc2luZyByZWFsIGNvb3Jkc1wiLCBwb3NpdGlvbi5jb29yZHMpO1xuICAgICAgcmV0dXJuIHBvc2l0aW9uO1xuICAgIH1cbiAgICBjb25zdCBzcG9vZmVkID0ge1xuICAgICAgY29vcmRzOiB7XG4gICAgICAgIGxhdGl0dWRlOiBvdi5sYXRpdHVkZSxcbiAgICAgICAgbG9uZ2l0dWRlOiBvdi5sb25naXR1ZGUsXG4gICAgICAgIGFjY3VyYWN5OiAxMCxcbiAgICAgICAgYWx0aXR1ZGU6IG51bGwsXG4gICAgICAgIGFsdGl0dWRlQWNjdXJhY3k6IG51bGwsXG4gICAgICAgIGhlYWRpbmc6IG51bGwsXG4gICAgICAgIHNwZWVkOiBudWxsLFxuICAgICAgfSxcbiAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICB9IGFzIEdlb2xvY2F0aW9uUG9zaXRpb247XG4gICAgbG9nKFwiYXBwbHlpbmcgb3ZlcnJpZGVcIiwgc3Bvb2ZlZC5jb29yZHMpO1xuICAgIHJldHVybiBzcG9vZmVkO1xuICB9O1xuXG4gIGNvbnN0IHdyYXBTdWNjZXNzID1cbiAgICAoY2FsbGJhY2s6IFBvc2l0aW9uQ2FsbGJhY2spOiBQb3NpdGlvbkNhbGxiYWNrID0+XG4gICAgKHBvc2l0aW9uKSA9PiB7XG4gICAgICBvblBvc2l0aW9uPy4oe1xuICAgICAgICBsYXRpdHVkZTogcG9zaXRpb24uY29vcmRzLmxhdGl0dWRlLFxuICAgICAgICBsb25naXR1ZGU6IHBvc2l0aW9uLmNvb3Jkcy5sb25naXR1ZGUsXG4gICAgICB9KTtcbiAgICAgIGNhbGxiYWNrKGFwcGx5T3ZlcnJpZGUocG9zaXRpb24pKTtcbiAgICB9O1xuXG4gIGdlby5nZXRDdXJyZW50UG9zaXRpb24gPSAoc3VjY2VzcywgZXJyb3IsIG9wdGlvbnMpID0+IHtcbiAgICBsb2coXCJnZXRDdXJyZW50UG9zaXRpb24gaW50ZXJjZXB0ZWRcIik7XG4gICAgbmF0aXZlR2V0Q3VycmVudFBvc2l0aW9uKHdyYXBTdWNjZXNzKHN1Y2Nlc3MpLCBlcnJvciwgb3B0aW9ucyk7XG4gIH07XG5cbiAgZ2VvLndhdGNoUG9zaXRpb24gPSAoc3VjY2VzcywgZXJyb3IsIG9wdGlvbnMpID0+IHtcbiAgICBsb2coXCJ3YXRjaFBvc2l0aW9uIGludGVyY2VwdGVkXCIpO1xuICAgIGNvbnN0IHdyYXBwZWQgPSB3cmFwU3VjY2VzcyhzdWNjZXNzKTtcbiAgICBjb25zdCBpZCA9IG5hdGl2ZVdhdGNoUG9zaXRpb24od3JhcHBlZCwgZXJyb3IsIG9wdGlvbnMpO1xuICAgIGFjdGl2ZVdhdGNoZXJzLnNldChpZCwgd3JhcHBlZCk7XG4gICAgcmV0dXJuIGlkO1xuICB9O1xuXG4gIGdlby5jbGVhcldhdGNoID0gKGlkKSA9PiB7XG4gICAgYWN0aXZlV2F0Y2hlcnMuZGVsZXRlKGlkKTtcbiAgICBuYXRpdmVDbGVhcldhdGNoKGlkKTtcbiAgfTtcblxuICBjb25zdCByZWZyZXNoV2F0Y2hlcyA9ICgpOiB2b2lkID0+IHtcbiAgICBpZiAoYWN0aXZlV2F0Y2hlcnMuc2l6ZSA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBuYXRpdmVHZXRDdXJyZW50UG9zaXRpb24oXG4gICAgICAocG9zKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgY2Igb2YgYWN0aXZlV2F0Y2hlcnMudmFsdWVzKCkpIHtcbiAgICAgICAgICBjYihwb3MpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgeyBtYXhpbXVtQWdlOiAwIH0sXG4gICAgKTtcbiAgfTtcblxuICBnZW8uX19zbmlmZmllc1BhdGNoZWQgPSB0cnVlO1xuXG4gIHJldHVybiB7IG5hdGl2ZUdldEN1cnJlbnRQb3NpdGlvbiwgbmF0aXZlV2F0Y2hQb3NpdGlvbiwgcmVmcmVzaFdhdGNoZXMgfTtcbn07XG4iLCAiaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSBcIi4vbG9nLmpzXCI7XG5cbnR5cGUgUGF0Y2hlZFdlYlNvY2tldEN0b3IgPSB0eXBlb2YgV2ViU29ja2V0ICYgeyBfX3NuaWZmaWVzVXNlcklkUGF0Y2hlZD86IGJvb2xlYW4gfTtcblxuY29uc3QgV1NfSE9TVCA9IFwicHJvZC53cy5zbmlmZmllcy5jb21cIjtcblxuY29uc3QgZXh0cmFjdFVzZXJJZCA9ICh1cmw6IHN0cmluZyB8IFVSTCk6IHN0cmluZyB8IG51bGwgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IG5ldyBVUkwodXJsLCB0eXBlb2YgbG9jYXRpb24gIT09IFwidW5kZWZpbmVkXCIgPyBsb2NhdGlvbi5ocmVmIDogdW5kZWZpbmVkKTtcbiAgICBpZiAocGFyc2VkLmhvc3QgIT09IFdTX0hPU1QpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VkLnNlYXJjaFBhcmFtcy5nZXQoXCJ1c2VySWRcIik7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59O1xuXG4vKipcbiAqIFdyYXBzIHRoZSBnbG9iYWwgV2ViU29ja2V0IGNvbnN0cnVjdG9yIHRvIHJlYWQgdGhlIGB1c2VySWRgIHF1ZXJ5IHBhcmFtIG9mZlxuICogY29ubmVjdGlvbnMgdG8gcHJvZC53cy5zbmlmZmllcy5jb20gXHUyMDE0IHRoYXQgc29ja2V0IGNhcnJpZXMgdGhlIGxvZ2dlZC1pblxuICogdXNlcidzIG93biBpZCBvbiBldmVyeSBjb25uZWN0LCBlLmcuXG4gKiB3c3M6Ly9wcm9kLndzLnNuaWZmaWVzLmNvbS8/dXNlcklkPTxpZD4mbGF0PS4uLiZsbmc9Li4uXG4gKiBUaGUgc29ja2V0IGl0c2VsZiBpcyBsZWZ0IHVudG91Y2hlZDsgdGhpcyBvbmx5IG9ic2VydmVzIHRoZSBjb25uZWN0IFVSTC5cbiAqXG4gKiBAcmV0dXJucyBmYWxzZSBpZiBXZWJTb2NrZXQgaXMgdW5hdmFpbGFibGUgb3IgYWxyZWFkeSBwYXRjaGVkLlxuICovXG5leHBvcnQgY29uc3QgaW5zdGFsbFVzZXJJZEhvb2sgPSAob25Vc2VySWQ6ICh1c2VySWQ6IHN0cmluZykgPT4gdm9pZCk6IGJvb2xlYW4gPT4ge1xuICBjb25zdCBsb2cgPSBjcmVhdGVMb2dnZXIoXCJ1c2VyLWlkXCIpO1xuICBjb25zdCBOYXRpdmVXZWJTb2NrZXQgPSAodHlwZW9mIFdlYlNvY2tldCAhPT0gXCJ1bmRlZmluZWRcIiA/IFdlYlNvY2tldCA6IHVuZGVmaW5lZCkgYXNcbiAgICB8IFBhdGNoZWRXZWJTb2NrZXRDdG9yXG4gICAgfCB1bmRlZmluZWQ7XG4gIGlmICghTmF0aXZlV2ViU29ja2V0IHx8IE5hdGl2ZVdlYlNvY2tldC5fX3NuaWZmaWVzVXNlcklkUGF0Y2hlZCkge1xuICAgIGxvZyhcImhvb2sgbm90IGluc3RhbGxlZCAobm8gV2ViU29ja2V0IG9yIGFscmVhZHkgcGF0Y2hlZClcIik7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgUGF0Y2hlZFdlYlNvY2tldCA9IGZ1bmN0aW9uIChcbiAgICB0aGlzOiBXZWJTb2NrZXQsXG4gICAgdXJsOiBzdHJpbmcgfCBVUkwsXG4gICAgcHJvdG9jb2xzPzogc3RyaW5nIHwgc3RyaW5nW10sXG4gICk6IFdlYlNvY2tldCB7XG4gICAgY29uc3QgdXNlcklkID0gZXh0cmFjdFVzZXJJZCh1cmwpO1xuICAgIGlmICh1c2VySWQpIHtcbiAgICAgIGxvZyhcIm9ic2VydmVkIHVzZXJJZCBvbiBXZWJTb2NrZXQgY29ubmVjdFwiLCB1c2VySWQpO1xuICAgICAgb25Vc2VySWQodXNlcklkKTtcbiAgICB9XG4gICAgcmV0dXJuIHByb3RvY29scyA9PT0gdW5kZWZpbmVkXG4gICAgICA/IG5ldyBOYXRpdmVXZWJTb2NrZXQodXJsKVxuICAgICAgOiBuZXcgTmF0aXZlV2ViU29ja2V0KHVybCwgcHJvdG9jb2xzKTtcbiAgfSBhcyB1bmtub3duIGFzIFBhdGNoZWRXZWJTb2NrZXRDdG9yO1xuXG4gIC8vIFRPRE86IEkgaGF0ZSB0aGlzXG4gIFBhdGNoZWRXZWJTb2NrZXQucHJvdG90eXBlID0gTmF0aXZlV2ViU29ja2V0LnByb3RvdHlwZTtcbiAgKFBhdGNoZWRXZWJTb2NrZXQgYXMgdW5rbm93biBhcyB7IENPTk5FQ1RJTkc6IG51bWJlciB9KS5DT05ORUNUSU5HID0gTmF0aXZlV2ViU29ja2V0LkNPTk5FQ1RJTkc7XG4gIChQYXRjaGVkV2ViU29ja2V0IGFzIHVua25vd24gYXMgeyBPUEVOOiBudW1iZXIgfSkuT1BFTiA9IE5hdGl2ZVdlYlNvY2tldC5PUEVOO1xuICAoUGF0Y2hlZFdlYlNvY2tldCBhcyB1bmtub3duIGFzIHsgQ0xPU0lORzogbnVtYmVyIH0pLkNMT1NJTkcgPSBOYXRpdmVXZWJTb2NrZXQuQ0xPU0lORztcbiAgKFBhdGNoZWRXZWJTb2NrZXQgYXMgdW5rbm93biBhcyB7IENMT1NFRDogbnVtYmVyIH0pLkNMT1NFRCA9IE5hdGl2ZVdlYlNvY2tldC5DTE9TRUQ7XG4gIFBhdGNoZWRXZWJTb2NrZXQuX19zbmlmZmllc1VzZXJJZFBhdGNoZWQgPSB0cnVlO1xuXG4gIHdpbmRvdy5XZWJTb2NrZXQgPSBQYXRjaGVkV2ViU29ja2V0O1xuICBsb2coXCJob29rIGluc3RhbGxlZFwiKTtcbiAgcmV0dXJuIHRydWU7XG59O1xuIiwgImltcG9ydCB0eXBlIHsgUHJvZmlsZUJvcmRlck9wZW4gfSBmcm9tIFwiLi9zZXR0aW5ncy5qc1wiO1xuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSBcIi4vbG9nLmpzXCI7XG5cbmNvbnN0IE1BUktFUl9DT05UQUlORVJfU0VMRUNUT1IgPSAnW2RhdGEtdGVzdGlkPVwibWFya2VyVXNlckNvbnRhaW5lclwiXSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvZmlsZUJvcmRlckhvb2tSZXN1bHQge1xuICB1bmluc3RhbGw6ICgpID0+IHZvaWQ7XG59XG5cbi8qKlxuICogSW5zdGFsbHMgYSBjYXB0dXJpbmcgZG9jdW1lbnQgY2xpY2sgbGlzdGVuZXIgdGhhdCBvcGVucyBhIHByb2ZpbGUgbWFya2VyJ3NcbiAqIHBhZ2UgZGlyZWN0bHkgd2hlbiBpdCBmYWxscyBvdXRzaWRlIHRoZSB2aWV3ZXIncyBib3VuZGFyeSByYWRpdXNcbiAqIChkYXRhc2V0LndpdGhpblJhZGl1cyA9PT0gXCJmYWxzZVwiKSwgYnlwYXNzaW5nIFNuaWZmaWVzJyBvd24gcGF5d2FsbC1nYXRlZFxuICogY2xpY2sgaGFuZGxpbmcuIFVzZXMgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIHNvIG90aGVyIGNhcHR1cmUtcGhhc2UgY2xpY2tcbiAqIGxpc3RlbmVycyBvbiBkb2N1bWVudCAoZS5nLiBmYXZvcml0ZXMgbWFya2VyIGhhbmRsaW5nKSBkb24ndCBhbHNvIGZpcmUgZm9yXG4gKiB0aGUgc2FtZSBjbGljay5cbiAqXG4gKiBAcGFyYW0gZ2V0U2V0dGluZ3MgLSBDYWxsZWQgb24gZXZlcnkgY2xpY2sgdG8gcmVhZCB0aGUgY3VycmVudCBlbmFibGVkL29wZW5Jbk5ld1RhYiBzdGF0ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGluc3RhbGxQcm9maWxlQm9yZGVyUmVkaXJlY3QgPSAoXG4gIGdldFNldHRpbmdzOiAoKSA9PiBQcm9maWxlQm9yZGVyT3Blbixcbik6IFByb2ZpbGVCb3JkZXJIb29rUmVzdWx0ID0+IHtcbiAgY29uc3QgbG9nID0gY3JlYXRlTG9nZ2VyKFwicHJvZmlsZS1ib3JkZXJcIik7XG5cbiAgY29uc3QgaGFuZGxlciA9IChldmVudDogTW91c2VFdmVudCk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IHNldHRpbmdzID0gZ2V0U2V0dGluZ3MoKTtcbiAgICBpZiAoIXNldHRpbmdzLmVuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgIGlmICghKHRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRhcmdldC5jbG9zZXN0PEhUTUxFbGVtZW50PihNQVJLRVJfQ09OVEFJTkVSX1NFTEVDVE9SKTtcbiAgICBpZiAoIWNvbnRhaW5lciB8fCBjb250YWluZXIuZGF0YXNldC53aXRoaW5SYWRpdXMgIT09IFwiZmFsc2VcIiB8fCAhY29udGFpbmVyLmlkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgY29uc3QgdXJsID0gYGh0dHBzOi8vc25pZmZpZXMuY29tL3Byb2ZpbGUvJHtjb250YWluZXIuaWR9YDtcbiAgICBsb2coXCJyZWRpcmVjdGluZyB0byBvdXQtb2YtcmFkaXVzIHByb2ZpbGVcIiwgY29udGFpbmVyLmlkKTtcbiAgICBpZiAoc2V0dGluZ3Mub3BlbkluTmV3VGFiKSB7XG4gICAgICB3aW5kb3cub3Blbih1cmwsIFwiX2JsYW5rXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKHVybCk7XG4gICAgfVxuICB9O1xuXG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoYW5kbGVyLCB0cnVlKTtcblxuICByZXR1cm4ge1xuICAgIHVuaW5zdGFsbDogKCkgPT4gZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZXIsIHRydWUpLFxuICB9O1xufTtcbiIsICJpbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tIFwiLi9sb2cuanNcIjtcblxuZXhwb3J0IHR5cGUgQ2xpZW50VHlwZSA9IFwiY2hyb21lLWNsaWVudFwiIHwgXCJ1c2Vyc2NyaXB0XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9nSW5pdE9wdGlvbnMge1xuICBzZXJ2ZXJCYXNlOiBzdHJpbmc7XG4gIGNsaWVudFNlY3JldDogc3RyaW5nO1xuICB1c2VySWQ6IHN0cmluZztcbiAgY2xpZW50VHlwZTogQ2xpZW50VHlwZTtcbiAgdmVyc2lvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIEJlc3QtZWZmb3J0IHRlbGVtZXRyeSBwaW5nIGZpcmVkIG9uY2UgcGVyIGNsaWVudCBpbml0LCBzbyB0aGUgc2VydmVyIGNhblxuICogdHJhY2sgd2hpY2ggdXNlciBpZHMgYXJlIHJ1bm5pbmcgd2hpY2ggY2xpZW50L3ZlcnNpb24gY29tYmluYXRpb25zLlxuICogRmFpbHVyZXMgYXJlIHN3YWxsb3dlZCBcdTIwMTQgdGVsZW1ldHJ5IG11c3QgbmV2ZXIgYmxvY2sgb3IgYnJlYWsgdGhlIGNhbGxlci5cbiAqL1xuZXhwb3J0IGNvbnN0IGxvZ0luaXQgPSBhc3luYyAob3B0aW9uczogTG9nSW5pdE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3QgbG9nID0gY3JlYXRlTG9nZ2VyKFwibG9nLWluaXRcIik7XG4gIGNvbnN0IHsgc2VydmVyQmFzZSwgY2xpZW50U2VjcmV0LCB1c2VySWQsIGNsaWVudFR5cGUsIHZlcnNpb24gfSA9IG9wdGlvbnM7XG4gIGlmICghc2VydmVyQmFzZSB8fCAhdXNlcklkKSB7XG4gICAgbG9nKFwic2tpcHBpbmcsIG1pc3Npbmcgc2VydmVyQmFzZSBvciB1c2VySWRcIiwgeyBzZXJ2ZXJCYXNlLCB1c2VySWQgfSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxvZyhcInNlbmRpbmcgaW5pdCBwaW5nXCIsIHsgdXNlcklkLCBjbGllbnRUeXBlLCB2ZXJzaW9uIH0pO1xuICB0cnkge1xuICAgIGNvbnN0IGJhc2UgPSBzZXJ2ZXJCYXNlLnJlcGxhY2UoL1xcLyskLywgXCJcIik7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goYCR7YmFzZX0vYXBpL2xvZ0luaXRgLCB7XG4gICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke2NsaWVudFNlY3JldH1gLFxuICAgICAgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgdXNlcklkLCBjbGllbnRUeXBlLCB2ZXJzaW9uIH0pLFxuICAgIH0pO1xuICAgIGlmIChyZXMub2spIHtcbiAgICAgIGxvZyhcImluaXQgcGluZyBzZW50XCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2cuZXJyb3IoXCJpbml0IHBpbmcgcmVqZWN0ZWRcIiwgcmVzLnN0YXR1cyk7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBCZXN0LWVmZm9ydCBcdTIwMTQgbmV0d29yay9zZXJ2ZXIgZmFpbHVyZXMgYXJlIG5vdCBhY3Rpb25hYmxlIGhlcmUuXG4gICAgbG9nLmVycm9yKFwiaW5pdCBwaW5nIGZhaWxlZFwiLCBlcnIpO1xuICB9XG59O1xuIiwgIjxkZXRhaWxzIGNsYXNzPVwic2VjdGlvbiBjb2xsYXBzaWJsZVwiIGlkPVwiZ2VvLWRldGFpbHNcIj5cbiAgPHN1bW1hcnk+PGgyPkxvY2F0aW9uIFNwb29maW5nPC9oMj48L3N1bW1hcnk+XG4gIDxkaXYgY2xhc3M9XCJjb2xsYXBzaWJsZS1ib2R5XCI+XG4gICAgPHAgY2xhc3M9XCJoaW50XCI+U3Bvb2YgdGhlIGNvb3JkaW5hdGVzIFNuaWZmaWVzIHNlZXMuPC9wPlxuICAgIDxsYWJlbCBjbGFzcz1cInJvd1wiPlxuICAgICAgPGlucHV0IGlkPVwiZ2VvLWVuYWJsZWRcIiB0eXBlPVwiY2hlY2tib3hcIiAvPlxuICAgICAgPHNwYW4+RW5hYmxlPC9zcGFuPlxuICAgIDwvbGFiZWw+XG4gICAgPGRpdiBpZD1cImdlby1maWVsZHNcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImZpZWxkXCI+XG4gICAgICAgIDxzcGFuPkxhdGl0dWRlPC9zcGFuPlxuICAgICAgICA8aW5wdXQgaWQ9XCJnZW8tbGF0XCIgdHlwZT1cIm51bWJlclwiIHN0ZXA9XCJhbnlcIiBwbGFjZWhvbGRlcj1cIjQ3LjYxNDc3XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgLz5cbiAgICAgIDwvbGFiZWw+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJmaWVsZFwiPlxuICAgICAgICA8c3Bhbj5Mb25naXR1ZGU8L3NwYW4+XG4gICAgICAgIDxpbnB1dCBpZD1cImdlby1sbmdcIiB0eXBlPVwibnVtYmVyXCIgc3RlcD1cImFueVwiIHBsYWNlaG9sZGVyPVwiLTEyMi4zMjUyNVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIC8+XG4gICAgICA8L2xhYmVsPlxuICAgICAgPGJ1dHRvbiBpZD1cImdlby1maWxsLWN1cnJlbnRcIiBjbGFzcz1cInNlY29uZGFyeVwiIHR5cGU9XCJidXR0b25cIj5GaWxsIHdpdGggY3VycmVudDwvYnV0dG9uPlxuICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbnNcIj5cbiAgICAgICAgPGJ1dHRvbiBpZD1cImdlby1zYXZlXCIgY2xhc3M9XCJwcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiPlNhdmU8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHAgaWQ9XCJnZW8tc3RhdHVzXCIgY2xhc3M9XCJoaW50XCIgYXJpYS1saXZlPVwicG9saXRlXCI+PC9wPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGV0YWlscz5cbiIsICIvKiBTZWN0aW9uIHNoZWxsIFx1MjAxNCBsaWZ0ZWQgZnJvbSBwb3B1cC5jc3MgLnNlY3Rpb24sIGRldGFpbHMuY29sbGFwc2libGUsIC5jb2xsYXBzaWJsZS1ib2R5ICovXG5cbiNzbnAtZ2VvLXJvb3QgLnNlY3Rpb24ge1xuICBiYWNrZ3JvdW5kOiAjMGUxODI1O1xuICBib3JkZXI6IDFweCBzb2xpZCAjMWMyYjNhO1xuICBib3JkZXItcmFkaXVzOiA4cHg7XG4gIHBhZGRpbmc6IDE0cHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGdhcDogMTBweDtcbn1cblxuI3NucC1nZW8tcm9vdCAuc2VjdGlvbiBoMiB7XG4gIG1hcmdpbjogMDtcbiAgZm9udC1zaXplOiAxMHB4O1xuICBmb250LXdlaWdodDogNzAwO1xuICBsZXR0ZXItc3BhY2luZzogMC4xZW07XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIGNvbG9yOiAjN2E5MGE0O1xufVxuXG4jc25wLWdlby1yb290IGRldGFpbHMuY29sbGFwc2libGUge1xuICBwYWRkaW5nOiAwO1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuI3NucC1nZW8tcm9vdCBkZXRhaWxzLmNvbGxhcHNpYmxlIHN1bW1hcnkge1xuICBsaXN0LXN0eWxlOiBub25lO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHBhZGRpbmc6IDE0cHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogNnB4O1xuICB1c2VyLXNlbGVjdDogbm9uZTtcbn1cblxuI3NucC1nZW8tcm9vdCBkZXRhaWxzLmNvbGxhcHNpYmxlIHN1bW1hcnk6Oi13ZWJraXQtZGV0YWlscy1tYXJrZXIge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4jc25wLWdlby1yb290IGRldGFpbHMuY29sbGFwc2libGUgc3VtbWFyeTo6YWZ0ZXIge1xuICBjb250ZW50OiBcIlx1MjAzQVwiO1xuICBtYXJnaW4tbGVmdDogYXV0bztcbiAgZm9udC1zaXplOiAxNnB4O1xuICBsaW5lLWhlaWdodDogMTtcbiAgY29sb3I6ICM3YTkwYTQ7XG4gIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMTVzO1xufVxuXG4jc25wLWdlby1yb290IGRldGFpbHMuY29sbGFwc2libGVbb3Blbl0gc3VtbWFyeTo6YWZ0ZXIge1xuICB0cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpO1xufVxuXG4jc25wLWdlby1yb290IGRldGFpbHMuY29sbGFwc2libGUgc3VtbWFyeSBoMiB7XG4gIG1hcmdpbjogMDtcbn1cblxuI3NucC1nZW8tcm9vdCAuY29sbGFwc2libGUtYm9keSB7XG4gIHBhZGRpbmc6IDAgMTRweCAxNHB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBnYXA6IDEwcHg7XG59XG5cbi8qIEZvcm0gZmllbGRzIFx1MjAxNCBsaWZ0ZWQgZnJvbSBwb3B1cC5jc3MgLnJvdywgLmhpbnQsIC5maWVsZCwgYnV0dG9uLnByaW1hcnkvc2Vjb25kYXJ5LCAuYWN0aW9ucyAqL1xuXG4jc25wLWdlby1yb290IC5yb3cge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDhweDtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGNvbG9yOiAjZmZmZmZmO1xufVxuXG4jc25wLWdlby1yb290IC5yb3cgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdIHtcbiAgYWNjZW50LWNvbG9yOiAjZmY1NTAwO1xuICB3aWR0aDogMTRweDtcbiAgaGVpZ2h0OiAxNHB4O1xufVxuXG4jc25wLWdlby1yb290IC5oaW50IHtcbiAgZm9udC1zaXplOiAxMXB4O1xuICBjb2xvcjogIzdhOTBhNDtcbiAgbWFyZ2luOiAwO1xufVxuXG4jc25wLWdlby1yb290IGJ1dHRvbi5wcmltYXJ5IHtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBmb250LXdlaWdodDogNzAwO1xuICBwYWRkaW5nOiA3cHggMTZweDtcbiAgYm9yZGVyLXJhZGl1czogMjBweDtcbiAgYm9yZGVyOiBub25lO1xuICBiYWNrZ3JvdW5kOiAjZmY1NTAwO1xuICBjb2xvcjogI2ZmZjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBsZXR0ZXItc3BhY2luZzogMC4wMmVtO1xuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzO1xufVxuXG4jc25wLWdlby1yb290IGJ1dHRvbi5wcmltYXJ5OmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHtcbiAgYmFja2dyb3VuZDogI2UwNGEwMDtcbn1cblxuI3NucC1nZW8tcm9vdCBidXR0b24ucHJpbWFyeTpkaXNhYmxlZCB7XG4gIGJhY2tncm91bmQ6ICMxYzJiM2E7XG4gIGNvbG9yOiAjN2E5MGE0O1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuXG4jc25wLWdlby1yb290IGJ1dHRvbi5zZWNvbmRhcnkge1xuICBmb250LXNpemU6IDEycHg7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIHBhZGRpbmc6IDdweCAxNnB4O1xuICBib3JkZXItcmFkaXVzOiAyMHB4O1xuICBib3JkZXI6IDFweCBzb2xpZCAjMWMyYjNhO1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgY29sb3I6ICM3YTkwYTQ7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdHJhbnNpdGlvbjpcbiAgICBib3JkZXItY29sb3IgMC4xNXMsXG4gICAgY29sb3IgMC4xNXM7XG59XG5cbiNzbnAtZ2VvLXJvb3QgYnV0dG9uLnNlY29uZGFyeTpob3Zlcjpub3QoOmRpc2FibGVkKSB7XG4gIGJvcmRlci1jb2xvcjogIzdhOTBhNDtcbiAgY29sb3I6ICNmZmZmZmY7XG59XG5cbiNzbnAtZ2VvLXJvb3QgYnV0dG9uLnNlY29uZGFyeTpkaXNhYmxlZCB7XG4gIGNvbG9yOiAjMWMyYjNhO1xuICBib3JkZXItY29sb3I6ICMxYzJiM2E7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG5cbiNzbnAtZ2VvLXJvb3QgLmZpZWxkIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZ2FwOiA0cHg7XG4gIGZvbnQtc2l6ZTogMTFweDtcbiAgY29sb3I6ICM3YTkwYTQ7XG59XG5cbiNzbnAtZ2VvLXJvb3QgLmZpZWxkIGlucHV0IHtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBwYWRkaW5nOiA3cHggMTBweDtcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xuICBib3JkZXI6IDFweCBzb2xpZCAjMWMyYjNhO1xuICBiYWNrZ3JvdW5kOiAjMDgwZTE4O1xuICBjb2xvcjogI2ZmZmZmZjtcbiAgb3V0bGluZTogbm9uZTtcbiAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMTVzO1xufVxuXG4jc25wLWdlby1yb290IC5maWVsZCBpbnB1dDo6cGxhY2Vob2xkZXIge1xuICBjb2xvcjogIzNhNGY2Mjtcbn1cblxuI3NucC1nZW8tcm9vdCAuZmllbGQgaW5wdXQ6Zm9jdXMge1xuICBib3JkZXItY29sb3I6ICNmZjU1MDA7XG59XG5cbiNzbnAtZ2VvLXJvb3QgLmFjdGlvbnMge1xuICBkaXNwbGF5OiBmbGV4O1xuICBnYXA6IDhweDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuI3NucC1nZW8tcm9vdCAjZ2VvLWZpZWxkcyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGdhcDogMTBweDtcbn1cbiIsICJpbXBvcnQgR0VPX09WRVJSSURFX0hUTUwgZnJvbSBcIi4vZ2VvLW92ZXJyaWRlLmh0bWxcIjtcbmltcG9ydCBHRU9fT1ZFUlJJREVfQ1NTIGZyb20gXCIuL2dlby1vdmVycmlkZS5jc3NcIjtcbmltcG9ydCB0eXBlIHsgR2VvT3ZlcnJpZGUgfSBmcm9tIFwiLi9zZXR0aW5ncy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBHZW9PdmVycmlkZUZvcm1Db250cmFjdCB9IGZyb20gXCIuL2dlby1vdmVycmlkZS1mb3JtLWNvbnRyYWN0LmpzXCI7XG5cbmV4cG9ydCB7IEdFT19PVkVSUklERV9IVE1MLCBHRU9fT1ZFUlJJREVfQ1NTIH07XG5leHBvcnQgdHlwZSB7IEdlb092ZXJyaWRlRm9ybUNvbnRyYWN0IH07XG5cbmV4cG9ydCBjb25zdCB3aXJlR2VvT3ZlcnJpZGVGb3JtID0gKGNvbnRhaW5lcjogRWxlbWVudCwgb3B0aW9uczogR2VvT3ZlcnJpZGVGb3JtQ29udHJhY3QpOiB2b2lkID0+IHtcbiAgY29uc3QgZWwgPSA8VCBleHRlbmRzIEVsZW1lbnQ+KGlkOiBzdHJpbmcpOiBUID0+IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yPFQ+KGAjJHtpZH1gKSBhcyBUO1xuXG4gIGNvbnN0IGRldGFpbHMgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcjxIVE1MRGV0YWlsc0VsZW1lbnQ+KFwiI2dlby1kZXRhaWxzXCIpO1xuICBjb25zdCBnZW9FbmFibGVkID0gZWw8SFRNTElucHV0RWxlbWVudD4oXCJnZW8tZW5hYmxlZFwiKTtcbiAgY29uc3QgZ2VvRmllbGRzID0gZWw8SFRNTEVsZW1lbnQ+KFwiZ2VvLWZpZWxkc1wiKTtcbiAgY29uc3QgZ2VvTGF0ID0gZWw8SFRNTElucHV0RWxlbWVudD4oXCJnZW8tbGF0XCIpO1xuICBjb25zdCBnZW9MbmcgPSBlbDxIVE1MSW5wdXRFbGVtZW50PihcImdlby1sbmdcIik7XG4gIGNvbnN0IGZpbGxDdXJyZW50ID0gZWw8SFRNTEJ1dHRvbkVsZW1lbnQ+KFwiZ2VvLWZpbGwtY3VycmVudFwiKTtcbiAgY29uc3Qgc2F2ZUJ0biA9IGVsPEhUTUxCdXR0b25FbGVtZW50PihcImdlby1zYXZlXCIpO1xuICBjb25zdCBzdGF0dXNFbCA9IGVsPEhUTUxFbGVtZW50PihcImdlby1zdGF0dXNcIik7XG5cbiAgLy8gV2lyZSBjb2xsYXBzaWJsZVxuICBpZiAoZGV0YWlscykge1xuICAgIGRldGFpbHMub3BlbiA9IG9wdGlvbnMuaW5pdGlhbE9wZW47XG4gICAgZGV0YWlscy5hZGRFdmVudExpc3RlbmVyKFwidG9nZ2xlXCIsICgpID0+IG9wdGlvbnMub25Ub2dnbGUoZGV0YWlscy5vcGVuKSk7XG4gIH1cblxuICBjb25zdCBzZXRTdGF0dXMgPSAodGV4dDogc3RyaW5nKTogdm9pZCA9PiB7XG4gICAgc3RhdHVzRWwudGV4dENvbnRlbnQgPSB0ZXh0O1xuICB9O1xuXG4gIGNvbnN0IHJlYWRGb3JtID0gKCk6IEdlb092ZXJyaWRlID0+ICh7XG4gICAgZW5hYmxlZDogZ2VvRW5hYmxlZC5jaGVja2VkLFxuICAgIGxhdGl0dWRlOiBwYXJzZUZsb2F0KGdlb0xhdC52YWx1ZSkgfHwgMCxcbiAgICBsb25naXR1ZGU6IHBhcnNlRmxvYXQoZ2VvTG5nLnZhbHVlKSB8fCAwLFxuICB9KTtcblxuICAvLyBUcmFja3MgdGhlIGluLWZsaWdodCBnZXROYXRpdmVQb3NpdGlvbiBjYWxsIHRyaWdnZXJlZCBieSBkaXNhYmxpbmcuIEEgbmV3XG4gIC8vIG9iamVjdCBpcyBjcmVhdGVkIGVhY2ggdGltZTsgbWFya2luZyBpdCBhYm9ydGVkIHByZXZlbnRzIHN0YWxlIGNhbGxiYWNrc1xuICAvLyBmcm9tIG11dGF0aW5nIHN0YXRlIGFmdGVyIHRoZSB1c2VyIGhhcyByZS1lbmFibGVkIHNwb29maW5nLlxuICBsZXQgcGVuZGluZ0ZldGNoOiB7IGFib3J0ZWQ6IGJvb2xlYW4gfSB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0IGZpbGxXaXRoQ3VycmVudFBvc2l0aW9uID0gKG9uU3VjY2VzczogKCkgPT4gdm9pZCk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IHRva2VuID0geyBhYm9ydGVkOiBmYWxzZSB9O1xuICAgIHBlbmRpbmdGZXRjaCA9IHRva2VuO1xuICAgIHNldFN0YXR1cyhcIkdldHRpbmcgbG9jYXRpb25cdTIwMjZcIik7XG4gICAgb3B0aW9ucy5nZXROYXRpdmVQb3NpdGlvbihcbiAgICAgIChwb3MpID0+IHtcbiAgICAgICAgaWYgKHRva2VuLmFib3J0ZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcGVuZGluZ0ZldGNoID0gbnVsbDtcbiAgICAgICAgZ2VvTGF0LnZhbHVlID0gU3RyaW5nKHBvcy5jb29yZHMubGF0aXR1ZGUpO1xuICAgICAgICBnZW9MbmcudmFsdWUgPSBTdHJpbmcocG9zLmNvb3Jkcy5sb25naXR1ZGUpO1xuICAgICAgICB1cGRhdGVTYXZlVmlzaWJpbGl0eSgpO1xuICAgICAgICBvblN1Y2Nlc3MoKTtcbiAgICAgIH0sXG4gICAgICAoZXJyKSA9PiB7XG4gICAgICAgIGlmICh0b2tlbi5hYm9ydGVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHBlbmRpbmdGZXRjaCA9IG51bGw7XG4gICAgICAgIHNldFN0YXR1cyhgQ291bGQgbm90IGdldCBsb2NhdGlvbjogJHtlcnIubWVzc2FnZX0gKGNvZGUgJHtlcnIuY29kZX0pYCk7XG4gICAgICB9LFxuICAgICAgeyB0aW1lb3V0OiAxMDAwMCB9LFxuICAgICk7XG4gIH07XG5cbiAgLy8gUG9wdWxhdGUgaW5pdGlhbCB2YWx1ZXNcbiAgY29uc3QgeyBpbml0aWFsIH0gPSBvcHRpb25zO1xuICBsZXQgbGFzdFNhdmVkOiBHZW9PdmVycmlkZSA9IHsgLi4uaW5pdGlhbCB9O1xuXG4gIGNvbnN0IGZvcm1NYXRjaGVzU2F2ZWQgPSAoKTogYm9vbGVhbiA9PiB7XG4gICAgY29uc3QgZm9ybSA9IHJlYWRGb3JtKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIGZvcm0uZW5hYmxlZCA9PT0gbGFzdFNhdmVkLmVuYWJsZWQgJiZcbiAgICAgIGZvcm0ubGF0aXR1ZGUgPT09IGxhc3RTYXZlZC5sYXRpdHVkZSAmJlxuICAgICAgZm9ybS5sb25naXR1ZGUgPT09IGxhc3RTYXZlZC5sb25naXR1ZGVcbiAgICApO1xuICB9O1xuXG4gIGNvbnN0IHVwZGF0ZVNhdmVWaXNpYmlsaXR5ID0gKCk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IGhhc0Nvb3JkcyA9IGdlb0xhdC52YWx1ZS50cmltKCkgIT09IFwiXCIgJiYgZ2VvTG5nLnZhbHVlLnRyaW0oKSAhPT0gXCJcIjtcbiAgICBzYXZlQnRuLnN0eWxlLmRpc3BsYXkgPSBoYXNDb29yZHMgJiYgIWZvcm1NYXRjaGVzU2F2ZWQoKSA/IFwiXCIgOiBcIm5vbmVcIjtcbiAgfTtcblxuICBjb25zdCBjb21taXRTYXZlID0gKCk6IFByb21pc2U8dm9pZD4gPT5cbiAgICBQcm9taXNlLnJlc29sdmUob3B0aW9ucy5vblNhdmUocmVhZEZvcm0oKSkpLnRoZW4oKCkgPT4ge1xuICAgICAgbGFzdFNhdmVkID0gcmVhZEZvcm0oKTtcbiAgICAgIHNldFN0YXR1cyhcIlNhdmVkLlwiKTtcbiAgICAgIHVwZGF0ZVNhdmVWaXNpYmlsaXR5KCk7XG4gICAgfSk7XG4gIGdlb0VuYWJsZWQuY2hlY2tlZCA9IGluaXRpYWwuZW5hYmxlZDtcbiAgZ2VvRmllbGRzLnN0eWxlLmRpc3BsYXkgPSBpbml0aWFsLmVuYWJsZWQgPyBcIlwiIDogXCJub25lXCI7XG4gIGdlb0xhdC52YWx1ZSA9IGluaXRpYWwubGF0aXR1ZGUgIT09IDAgPyBTdHJpbmcoaW5pdGlhbC5sYXRpdHVkZSkgOiBcIlwiO1xuICBnZW9MbmcudmFsdWUgPSBpbml0aWFsLmxvbmdpdHVkZSAhPT0gMCA/IFN0cmluZyhpbml0aWFsLmxvbmdpdHVkZSkgOiBcIlwiO1xuICB1cGRhdGVTYXZlVmlzaWJpbGl0eSgpO1xuXG4gIGdlb0VuYWJsZWQuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCAoKSA9PiB7XG4gICAgZ2VvRmllbGRzLnN0eWxlLmRpc3BsYXkgPSBnZW9FbmFibGVkLmNoZWNrZWQgPyBcIlwiIDogXCJub25lXCI7XG4gICAgdXBkYXRlU2F2ZVZpc2liaWxpdHkoKTtcbiAgICBpZiAoZ2VvRW5hYmxlZC5jaGVja2VkKSB7XG4gICAgICBpZiAocGVuZGluZ0ZldGNoKSB7XG4gICAgICAgIHBlbmRpbmdGZXRjaC5hYm9ydGVkID0gdHJ1ZTtcbiAgICAgICAgcGVuZGluZ0ZldGNoID0gbnVsbDtcbiAgICAgICAgc2V0U3RhdHVzKFwiXCIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2b2lkIGNvbW1pdFNhdmUoKTtcbiAgICAgIGZpbGxXaXRoQ3VycmVudFBvc2l0aW9uKCgpID0+IHtcbiAgICAgICAgdm9pZCBjb21taXRTYXZlKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIGZvciAoY29uc3QgZmllbGQgb2YgW2dlb0xhdCwgZ2VvTG5nXSkge1xuICAgIGZpZWxkLmFkZEV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLCB1cGRhdGVTYXZlVmlzaWJpbGl0eSk7XG4gIH1cblxuICBmaWxsQ3VycmVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgIGZpbGxXaXRoQ3VycmVudFBvc2l0aW9uKCgpID0+IHNldFN0YXR1cyhcIlwiKSk7XG4gIH0pO1xuXG4gIHNhdmVCdG4uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICB2b2lkIGNvbW1pdFNhdmUoKTtcbiAgfSk7XG59O1xuIiwgIi5zbnAtdmVyc2lvbiB7XG4gIGZvbnQtc2l6ZTogMTBweDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgY29sb3I6ICM3YTkwYTQ7XG4gIGxldHRlci1zcGFjaW5nOiAwLjAyZW07XG59XG4iLCAiaW1wb3J0IFZFUlNJT05fQkFER0VfSFRNTCBmcm9tIFwiLi92ZXJzaW9uLWJhZGdlLmh0bWxcIjtcbmltcG9ydCBWRVJTSU9OX0JBREdFX0NTUyBmcm9tIFwiLi92ZXJzaW9uLWJhZGdlLmNzc1wiO1xuXG5leHBvcnQgeyBWRVJTSU9OX0JBREdFX0hUTUwsIFZFUlNJT05fQkFER0VfQ1NTIH07XG5cbi8qKiBSZW5kZXJzIGB2ZXJzaW9uYCBpbnRvIHRoZSBgI3NucC12ZXJzaW9uYCBlbGVtZW50IGluc2lkZSBgY29udGFpbmVyYC4gKi9cbmV4cG9ydCBjb25zdCB3aXJlVmVyc2lvbkJhZGdlID0gKGNvbnRhaW5lcjogRWxlbWVudCwgdmVyc2lvbjogc3RyaW5nKTogdm9pZCA9PiB7XG4gIGNvbnN0IGVsID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KFwiI3NucC12ZXJzaW9uXCIpO1xuICBpZiAoZWwpIHtcbiAgICBlbC50ZXh0Q29udGVudCA9IGB2JHt2ZXJzaW9ufWA7XG4gIH1cbn07XG4iLCAiPGRldGFpbHMgY2xhc3M9XCJzZWN0aW9uIGNvbGxhcHNpYmxlXCIgaWQ9XCJwcm9maWxlLWJvcmRlci1kZXRhaWxzXCI+XG4gIDxzdW1tYXJ5PjxoMj5PcGVuIFByb2ZpbGVzIE91dHNpZGUgQm91bmRhcnk8L2gyPjwvc3VtbWFyeT5cbiAgPGRpdiBjbGFzcz1cImNvbGxhcHNpYmxlLWJvZHlcIj5cbiAgICA8cCBjbGFzcz1cImhpbnRcIj5cbiAgICAgIEJ5cGFzcyB0aGUgcGF5d2FsbCBieSBkaXJlY3RseSBvcGVuaW5nIHByb2ZpbGVzIG91dHNpZGUgeW91ciBib3VuZGFyeS4gUmVjb21tZW5kIG9wZW5pbmcgaW4gYVxuICAgICAgbmV3IHRhYiwgY3VycmVudCB0YWIgdHJpZ2dlcnMgY3VycmVudCBwYWdlIHJlbG9hZC5cbiAgICA8L3A+XG4gICAgPGxhYmVsIGNsYXNzPVwicm93XCI+XG4gICAgICA8aW5wdXQgaWQ9XCJwcm9maWxlLWJvcmRlci1lbmFibGVkXCIgdHlwZT1cImNoZWNrYm94XCIgLz5cbiAgICAgIDxzcGFuPkVuYWJsZTwvc3Bhbj5cbiAgICA8L2xhYmVsPlxuICAgIDxsYWJlbCBpZD1cInByb2ZpbGUtYm9yZGVyLXRhYi1maWVsZFwiIGNsYXNzPVwiZmllbGRcIj5cbiAgICAgIDxzcGFuPk9wZW4gaW48L3NwYW4+XG4gICAgICA8c2VsZWN0IGlkPVwicHJvZmlsZS1ib3JkZXItdGFiXCI+XG4gICAgICAgIDxvcHRpb24gdmFsdWU9XCJjdXJyZW50LXRhYlwiPkN1cnJlbnQgdGFiPC9vcHRpb24+XG4gICAgICAgIDxvcHRpb24gdmFsdWU9XCJuZXctdGFiXCI+TmV3IHRhYjwvb3B0aW9uPlxuICAgICAgPC9zZWxlY3Q+XG4gICAgPC9sYWJlbD5cbiAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uc1wiPlxuICAgICAgPGJ1dHRvbiBpZD1cInByb2ZpbGUtYm9yZGVyLXNhdmVcIiBjbGFzcz1cInByaW1hcnlcIiB0eXBlPVwiYnV0dG9uXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lXCI+XG4gICAgICAgIFNhdmVcbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGV0YWlscz5cbiIsICIvKiBTZWN0aW9uIHNoZWxsIFx1MjAxNCBzaGFyZWQgd2l0aCBnZW8tb3ZlcnJpZGUuY3NzIChwb3B1cC5jc3MgLnNlY3Rpb24sIGRldGFpbHMuY29sbGFwc2libGUsIC5jb2xsYXBzaWJsZS1ib2R5KSAqL1xuXG4jc25wLXByb2ZpbGUtYm9yZGVyLXJvb3QgLnNlY3Rpb24ge1xuICBiYWNrZ3JvdW5kOiAjMGUxODI1O1xuICBib3JkZXI6IDFweCBzb2xpZCAjMWMyYjNhO1xuICBib3JkZXItcmFkaXVzOiA4cHg7XG4gIHBhZGRpbmc6IDE0cHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGdhcDogMTBweDtcbn1cblxuI3NucC1wcm9maWxlLWJvcmRlci1yb290IC5zZWN0aW9uIGgyIHtcbiAgbWFyZ2luOiAwO1xuICBmb250LXNpemU6IDEwcHg7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIGxldHRlci1zcGFjaW5nOiAwLjFlbTtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgY29sb3I6ICM3YTkwYTQ7XG59XG5cbiNzbnAtcHJvZmlsZS1ib3JkZXItcm9vdCBkZXRhaWxzLmNvbGxhcHNpYmxlIHtcbiAgcGFkZGluZzogMDtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5cbiNzbnAtcHJvZmlsZS1ib3JkZXItcm9vdCBkZXRhaWxzLmNvbGxhcHNpYmxlIHN1bW1hcnkge1xuICBsaXN0LXN0eWxlOiBub25lO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHBhZGRpbmc6IDE0cHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogNnB4O1xuICB1c2VyLXNlbGVjdDogbm9uZTtcbn1cblxuI3NucC1wcm9maWxlLWJvcmRlci1yb290IGRldGFpbHMuY29sbGFwc2libGUgc3VtbWFyeTo6LXdlYmtpdC1kZXRhaWxzLW1hcmtlciB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbiNzbnAtcHJvZmlsZS1ib3JkZXItcm9vdCBkZXRhaWxzLmNvbGxhcHNpYmxlIHN1bW1hcnk6OmFmdGVyIHtcbiAgY29udGVudDogXCJcdTIwM0FcIjtcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIGNvbG9yOiAjN2E5MGE0O1xuICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjE1cztcbn1cblxuI3NucC1wcm9maWxlLWJvcmRlci1yb290IGRldGFpbHMuY29sbGFwc2libGVbb3Blbl0gc3VtbWFyeTo6YWZ0ZXIge1xuICB0cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpO1xufVxuXG4jc25wLXByb2ZpbGUtYm9yZGVyLXJvb3QgZGV0YWlscy5jb2xsYXBzaWJsZSBzdW1tYXJ5IGgyIHtcbiAgbWFyZ2luOiAwO1xufVxuXG4jc25wLXByb2ZpbGUtYm9yZGVyLXJvb3QgLmNvbGxhcHNpYmxlLWJvZHkge1xuICBwYWRkaW5nOiAwIDE0cHggMTRweDtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZ2FwOiAxMHB4O1xufVxuXG4vKiBGb3JtIGZpZWxkcyBcdTIwMTQgc2hhcmVkIHdpdGggZ2VvLW92ZXJyaWRlLmNzcyAocG9wdXAuY3NzIC5yb3csIC5oaW50LCAuZmllbGQsIGJ1dHRvbi5wcmltYXJ5L3NlY29uZGFyeSwgLmFjdGlvbnMpICovXG5cbiNzbnAtcHJvZmlsZS1ib3JkZXItcm9vdCAucm93IHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiA4cHg7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBjb2xvcjogI2ZmZmZmZjtcbn1cblxuI3NucC1wcm9maWxlLWJvcmRlci1yb290IC5yb3cgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdIHtcbiAgYWNjZW50LWNvbG9yOiAjZmY1NTAwO1xuICB3aWR0aDogMTRweDtcbiAgaGVpZ2h0OiAxNHB4O1xufVxuXG4jc25wLXByb2ZpbGUtYm9yZGVyLXJvb3QgLmhpbnQge1xuICBmb250LXNpemU6IDExcHg7XG4gIGNvbG9yOiAjN2E5MGE0O1xuICBtYXJnaW46IDA7XG59XG5cbiNzbnAtcHJvZmlsZS1ib3JkZXItcm9vdCBidXR0b24ucHJpbWFyeSB7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgcGFkZGluZzogN3B4IDE2cHg7XG4gIGJvcmRlci1yYWRpdXM6IDIwcHg7XG4gIGJvcmRlcjogbm9uZTtcbiAgYmFja2dyb3VuZDogI2ZmNTUwMDtcbiAgY29sb3I6ICNmZmY7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgbGV0dGVyLXNwYWNpbmc6IDAuMDJlbTtcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cztcbn1cblxuI3NucC1wcm9maWxlLWJvcmRlci1yb290IGJ1dHRvbi5wcmltYXJ5OmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHtcbiAgYmFja2dyb3VuZDogI2UwNGEwMDtcbn1cblxuI3NucC1wcm9maWxlLWJvcmRlci1yb290IGJ1dHRvbi5wcmltYXJ5OmRpc2FibGVkIHtcbiAgYmFja2dyb3VuZDogIzFjMmIzYTtcbiAgY29sb3I6ICM3YTkwYTQ7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG5cbiNzbnAtcHJvZmlsZS1ib3JkZXItcm9vdCAuZmllbGQge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBnYXA6IDRweDtcbiAgZm9udC1zaXplOiAxMXB4O1xuICBjb2xvcjogIzdhOTBhNDtcbn1cblxuI3NucC1wcm9maWxlLWJvcmRlci1yb290IC5maWVsZCBzZWxlY3Qge1xuICBmb250LXNpemU6IDEzcHg7XG4gIHBhZGRpbmc6IDdweCAxMHB4O1xuICBib3JkZXItcmFkaXVzOiA2cHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkICMxYzJiM2E7XG4gIGJhY2tncm91bmQ6ICMwODBlMTg7XG4gIGNvbG9yOiAjZmZmZmZmO1xuICBvdXRsaW5lOiBub25lO1xuICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMC4xNXM7XG59XG5cbiNzbnAtcHJvZmlsZS1ib3JkZXItcm9vdCAuZmllbGQgc2VsZWN0OmZvY3VzIHtcbiAgYm9yZGVyLWNvbG9yOiAjZmY1NTAwO1xufVxuXG4jc25wLXByb2ZpbGUtYm9yZGVyLXJvb3QgLmFjdGlvbnMge1xuICBkaXNwbGF5OiBmbGV4O1xuICBnYXA6IDhweDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cbiIsICJpbXBvcnQgUFJPRklMRV9CT1JERVJfSFRNTCBmcm9tIFwiLi9wcm9maWxlLWJvcmRlci5odG1sXCI7XG5pbXBvcnQgUFJPRklMRV9CT1JERVJfQ1NTIGZyb20gXCIuL3Byb2ZpbGUtYm9yZGVyLmNzc1wiO1xuaW1wb3J0IHR5cGUgeyBQcm9maWxlQm9yZGVyT3BlbiB9IGZyb20gXCIuL3NldHRpbmdzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFByb2ZpbGVCb3JkZXJGb3JtQ29udHJhY3QgfSBmcm9tIFwiLi9wcm9maWxlLWJvcmRlci1mb3JtLWNvbnRyYWN0LmpzXCI7XG5cbmV4cG9ydCB7IFBST0ZJTEVfQk9SREVSX0hUTUwsIFBST0ZJTEVfQk9SREVSX0NTUyB9O1xuZXhwb3J0IHR5cGUgeyBQcm9maWxlQm9yZGVyRm9ybUNvbnRyYWN0IH07XG5cbmNvbnN0IFRBQl9MQUJFTFMgPSB7XG4gIGN1cnJlbnQ6IFwiQ3VycmVudCB0YWJcIixcbiAgY3VycmVudFNhdmVkOiBcIkN1cnJlbnQgdGFiIChzYXZlZClcIixcbiAgbmV3OiBcIk5ldyB0YWJcIixcbiAgbmV3U2F2ZWQ6IFwiTmV3IHRhYiAoc2F2ZWQpXCIsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3Qgd2lyZVByb2ZpbGVCb3JkZXJGb3JtID0gKFxuICBjb250YWluZXI6IEVsZW1lbnQsXG4gIG9wdGlvbnM6IFByb2ZpbGVCb3JkZXJGb3JtQ29udHJhY3QsXG4pOiB2b2lkID0+IHtcbiAgY29uc3QgZWwgPSA8VCBleHRlbmRzIEVsZW1lbnQ+KGlkOiBzdHJpbmcpOiBUID0+IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yPFQ+KGAjJHtpZH1gKSBhcyBUO1xuXG4gIGNvbnN0IGRldGFpbHMgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcjxIVE1MRGV0YWlsc0VsZW1lbnQ+KFwiI3Byb2ZpbGUtYm9yZGVyLWRldGFpbHNcIik7XG4gIGNvbnN0IGVuYWJsZWRDaGVja2JveCA9IGVsPEhUTUxJbnB1dEVsZW1lbnQ+KFwicHJvZmlsZS1ib3JkZXItZW5hYmxlZFwiKTtcbiAgY29uc3QgdGFiRmllbGQgPSBlbDxIVE1MRWxlbWVudD4oXCJwcm9maWxlLWJvcmRlci10YWItZmllbGRcIik7XG4gIGNvbnN0IHRhYlNlbGVjdCA9IGVsPEhUTUxTZWxlY3RFbGVtZW50PihcInByb2ZpbGUtYm9yZGVyLXRhYlwiKTtcbiAgY29uc3Qgb3B0aW9uQ3VycmVudCA9IHRhYlNlbGVjdC5xdWVyeVNlbGVjdG9yPEhUTUxPcHRpb25FbGVtZW50Pignb3B0aW9uW3ZhbHVlPVwiY3VycmVudC10YWJcIl0nKSE7XG4gIGNvbnN0IG9wdGlvbk5ldyA9IHRhYlNlbGVjdC5xdWVyeVNlbGVjdG9yPEhUTUxPcHRpb25FbGVtZW50Pignb3B0aW9uW3ZhbHVlPVwibmV3LXRhYlwiXScpITtcbiAgY29uc3Qgc2F2ZUJ0biA9IGVsPEhUTUxCdXR0b25FbGVtZW50PihcInByb2ZpbGUtYm9yZGVyLXNhdmVcIik7XG5cbiAgLy8gV2lyZSBjb2xsYXBzaWJsZVxuICBpZiAoZGV0YWlscykge1xuICAgIGRldGFpbHMub3BlbiA9IG9wdGlvbnMuaW5pdGlhbE9wZW47XG4gICAgZGV0YWlscy5hZGRFdmVudExpc3RlbmVyKFwidG9nZ2xlXCIsICgpID0+IG9wdGlvbnMub25Ub2dnbGUoZGV0YWlscy5vcGVuKSk7XG4gIH1cblxuICBjb25zdCBhcHBseUxhYmVscyA9IChvcGVuSW5OZXdUYWI6IGJvb2xlYW4pOiB2b2lkID0+IHtcbiAgICBvcHRpb25DdXJyZW50LnRleHQgPSBvcGVuSW5OZXdUYWIgPyBUQUJfTEFCRUxTLmN1cnJlbnQgOiBUQUJfTEFCRUxTLmN1cnJlbnRTYXZlZDtcbiAgICBvcHRpb25OZXcudGV4dCA9IG9wZW5Jbk5ld1RhYiA/IFRBQl9MQUJFTFMubmV3U2F2ZWQgOiBUQUJfTEFCRUxTLm5ldztcbiAgfTtcblxuICBjb25zdCByZWFkRm9ybSA9ICgpOiBQcm9maWxlQm9yZGVyT3BlbiA9PiAoe1xuICAgIGVuYWJsZWQ6IGVuYWJsZWRDaGVja2JveC5jaGVja2VkLFxuICAgIG9wZW5Jbk5ld1RhYjogdGFiU2VsZWN0LnZhbHVlID09PSBcIm5ldy10YWJcIixcbiAgfSk7XG5cbiAgLy8gUG9wdWxhdGUgaW5pdGlhbCB2YWx1ZXNcbiAgY29uc3QgeyBpbml0aWFsIH0gPSBvcHRpb25zO1xuICBsZXQgc2F2ZWRPcGVuSW5OZXdUYWIgPSBpbml0aWFsLm9wZW5Jbk5ld1RhYjtcblxuICBlbmFibGVkQ2hlY2tib3guY2hlY2tlZCA9IGluaXRpYWwuZW5hYmxlZDtcbiAgdGFiRmllbGQuc3R5bGUuZGlzcGxheSA9IGluaXRpYWwuZW5hYmxlZCA/IFwiXCIgOiBcIm5vbmVcIjtcbiAgdGFiU2VsZWN0LnZhbHVlID0gaW5pdGlhbC5vcGVuSW5OZXdUYWIgPyBcIm5ldy10YWJcIiA6IFwiY3VycmVudC10YWJcIjtcbiAgYXBwbHlMYWJlbHMoaW5pdGlhbC5vcGVuSW5OZXdUYWIpO1xuICBzYXZlQnRuLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcblxuICBlbmFibGVkQ2hlY2tib3guYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCAoKSA9PiB7XG4gICAgdGFiRmllbGQuc3R5bGUuZGlzcGxheSA9IGVuYWJsZWRDaGVja2JveC5jaGVja2VkID8gXCJcIiA6IFwibm9uZVwiO1xuICAgIHZvaWQgb3B0aW9ucy5vblNhdmUocmVhZEZvcm0oKSk7XG4gIH0pO1xuXG4gIHRhYlNlbGVjdC5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsICgpID0+IHtcbiAgICBjb25zdCBpc0NoYW5nZWQgPSAodGFiU2VsZWN0LnZhbHVlID09PSBcIm5ldy10YWJcIikgIT09IHNhdmVkT3BlbkluTmV3VGFiO1xuICAgIHNhdmVCdG4uc3R5bGUuZGlzcGxheSA9IGlzQ2hhbmdlZCA/IFwiXCIgOiBcIm5vbmVcIjtcbiAgfSk7XG5cbiAgc2F2ZUJ0bi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgIGNvbnN0IG5leHQgPSByZWFkRm9ybSgpO1xuICAgIHZvaWQgUHJvbWlzZS5yZXNvbHZlKG9wdGlvbnMub25TYXZlKG5leHQpKS50aGVuKCgpID0+IHtcbiAgICAgIGFwcGx5TGFiZWxzKG5leHQub3BlbkluTmV3VGFiKTtcbiAgICAgIHNhdmVkT3BlbkluTmV3VGFiID0gbmV4dC5vcGVuSW5OZXdUYWI7XG4gICAgICBzYXZlQnRuLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgICB9KTtcbiAgfSk7XG59O1xuIiwgImV4cG9ydCBpbnRlcmZhY2UgR2VvT3ZlcnJpZGUge1xuICBlbmFibGVkOiBib29sZWFuO1xuICBsYXRpdHVkZTogbnVtYmVyO1xuICBsb25naXR1ZGU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfR0VPX09WRVJSSURFOiBHZW9PdmVycmlkZSA9IHtcbiAgZW5hYmxlZDogZmFsc2UsXG4gIGxhdGl0dWRlOiAwLFxuICBsb25naXR1ZGU6IDAsXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFByb2ZpbGVCb3JkZXJPcGVuIHtcbiAgZW5hYmxlZDogYm9vbGVhbjtcbiAgb3BlbkluTmV3VGFiOiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgREVGQVVMVF9QUk9GSUxFX0JPUkRFUl9PUEVOOiBQcm9maWxlQm9yZGVyT3BlbiA9IHtcbiAgZW5hYmxlZDogZmFsc2UsXG4gIG9wZW5Jbk5ld1RhYjogdHJ1ZSxcbn07XG5cbmV4cG9ydCBjb25zdCBQSE9ORV9FMTY0X1JFR0VYID0gL15cXCtbMS05XVxcZHs2LDE0fSQvO1xuXG5leHBvcnQgY29uc3QgU0VUVElOR1NfS0VZUyA9IHtcbiAgZ3VpZDogXCJndWlkXCIsXG4gIHBob25lOiBcInBob25lXCIsXG4gIGdlb092ZXJyaWRlOiBcImdlb092ZXJyaWRlXCIsXG4gIGdlb1NlY3Rpb25PcGVuOiBcImdlb1NlY3Rpb25PcGVuXCIsXG4gIHByb2ZpbGVCb3JkZXJPcGVuOiBcInByb2ZpbGVCb3JkZXJPcGVuXCIsXG4gIHByb2ZpbGVCb3JkZXJTZWN0aW9uT3BlbjogXCJwcm9maWxlQm9yZGVyU2VjdGlvbk9wZW5cIixcbiAgZmF2b3JpdGVzRW5hYmxlZDogXCJmYXZvcml0ZXNFbmFibGVkXCIsXG4gIGZhdm9yaXRlc1NlY3Rpb25PcGVuOiBcImZhdm9yaXRlc1NlY3Rpb25PcGVuXCIsXG4gIHNuaWZmaWVzVXNlcklkOiBcInNuaWZmaWVzVXNlcklkXCIsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgaW50ZXJmYWNlIEV4dGVuc2lvbkxvY2FsU2V0dGluZ3Mge1xuICBndWlkOiBzdHJpbmc7XG4gIHBob25lOiBzdHJpbmc7XG4gIGdlb092ZXJyaWRlOiBHZW9PdmVycmlkZTtcbiAgZ2VvU2VjdGlvbk9wZW46IGJvb2xlYW47XG4gIHByb2ZpbGVCb3JkZXJPcGVuOiBQcm9maWxlQm9yZGVyT3BlbjtcbiAgcHJvZmlsZUJvcmRlclNlY3Rpb25PcGVuOiBib29sZWFuO1xuICBmYXZvcml0ZXNFbmFibGVkOiBib29sZWFuO1xuICBmYXZvcml0ZXNTZWN0aW9uT3BlbjogYm9vbGVhbjtcbiAgc25pZmZpZXNVc2VySWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTE9DQUxfU0VUVElOR1M6IEV4dGVuc2lvbkxvY2FsU2V0dGluZ3MgPSB7XG4gIGd1aWQ6IFwiXCIsXG4gIHBob25lOiBcIlwiLFxuICBnZW9PdmVycmlkZTogREVGQVVMVF9HRU9fT1ZFUlJJREUsXG4gIGdlb1NlY3Rpb25PcGVuOiBmYWxzZSxcbiAgcHJvZmlsZUJvcmRlck9wZW46IERFRkFVTFRfUFJPRklMRV9CT1JERVJfT1BFTixcbiAgcHJvZmlsZUJvcmRlclNlY3Rpb25PcGVuOiBmYWxzZSxcbiAgZmF2b3JpdGVzRW5hYmxlZDogZmFsc2UsXG4gIGZhdm9yaXRlc1NlY3Rpb25PcGVuOiBmYWxzZSxcbiAgc25pZmZpZXNVc2VySWQ6IFwiXCIsXG59O1xuIiwgIiNzbnAtZmFiIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICAvKiBUT0RPIFRoaXMgbWF5IHN0aWxsIG5lZWQgcmV3b3JraW5nICovXG4gIGJvdHRvbTogY2FsYyg4MHB4ICsgNXZoKTtcbiAgcmlnaHQ6IDE2cHg7XG4gIHotaW5kZXg6IDIxNDc0ODM2NDY7XG4gIGJhY2tncm91bmQ6IHJnYmEoMTQsIDI0LCAzNywgMC44NSk7XG4gIGJvcmRlcjogMXB4IHNvbGlkICMxYzJiM2E7XG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBmb250LXNpemU6IDIwcHg7XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICB3aWR0aDogNDRweDtcbiAgaGVpZ2h0OiA0NHB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgb3BhY2l0eTogMC45O1xuICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMTVzO1xuICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjQpO1xufVxuI3NucC1mYWI6aG92ZXIge1xuICBvcGFjaXR5OiAxO1xufVxuXG4jc25wLXBhbmVsIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDYwcHg7XG4gIHJpZ2h0OiAxMnB4O1xuICB6LWluZGV4OiAyMTQ3NDgzNjQ3O1xuICB3aWR0aDogMjgwcHg7XG4gIGJhY2tncm91bmQ6ICMwZTE4MjU7XG4gIGJvcmRlcjogMXB4IHNvbGlkICMxYzJiM2E7XG4gIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgYm94LXNoYWRvdzogMCA0cHggMjRweCByZ2JhKDAsIDAsIDAsIDAuNSk7XG4gIGZvbnQtZmFtaWx5OlxuICAgIHN5c3RlbS11aSxcbiAgICAtYXBwbGUtc3lzdGVtLFxuICAgIFwiU2Vnb2UgVUlcIixcbiAgICBzYW5zLXNlcmlmO1xuICBjb2xvcjogI2ZmZmZmZjtcbiAgcGFkZGluZzogMTRweCAxNnB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBnYXA6IDEycHg7XG59XG5cbi5zbnAtaGVhZGVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xufVxuLnNucC10aXRsZSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBiYXNlbGluZTtcbiAgZ2FwOiA2cHg7XG59XG4uc25wLWhlYWRlciBoMSB7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgbWFyZ2luOiAwO1xuICBsZXR0ZXItc3BhY2luZzogMC4wMWVtO1xufVxuXG4uc25wLWNsb3NlIHtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogbm9uZTtcbiAgY29sb3I6ICM3YTkwYTQ7XG4gIGZvbnQtc2l6ZTogMThweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBsaW5lLWhlaWdodDogMTtcbiAgcGFkZGluZzogMnB4IDRweDtcbiAgdHJhbnNpdGlvbjogY29sb3IgMC4xNXM7XG59XG4uc25wLWNsb3NlOmhvdmVyIHtcbiAgY29sb3I6ICNmZmY7XG59XG4iLCAiPGRpdiBjbGFzcz1cInNucC1oZWFkZXJcIj5cbiAgPGRpdiBjbGFzcz1cInNucC10aXRsZVwiPlxuICAgIDxoMT5TbmlmZmllcyBQbHVnLWluczwvaDE+XG4gICAgPHNwYW4gaWQ9XCJzbnAtdmVyc2lvblwiIGNsYXNzPVwic25wLXZlcnNpb25cIj48L3NwYW4+XG4gIDwvZGl2PlxuICA8YnV0dG9uIGNsYXNzPVwic25wLWNsb3NlXCIgaWQ9XCJzbnAtY2xvc2VcIiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+XHUyNzE1PC9idXR0b24+XG48L2Rpdj5cbjxkaXYgaWQ9XCJzbnAtZ2VvLXJvb3RcIj48L2Rpdj5cbjxkaXYgaWQ9XCJzbnAtcHJvZmlsZS1ib3JkZXItcm9vdFwiPjwvZGl2PlxuIiwgImltcG9ydCB7XG4gIERFRkFVTFRfR0VPX09WRVJSSURFLFxuICBERUZBVUxUX1BST0ZJTEVfQk9SREVSX09QRU4sXG4gIEdlb092ZXJyaWRlLFxuICBQcm9maWxlQm9yZGVyT3Blbixcbn0gZnJvbSBcIkBzbmlmZmllcy1wcm9qZWN0cy9jb3JlXCI7XG5cbmNvbnN0IEdFT19TVE9SQUdFX0tFWSA9IFwic25pZmZpZXMtZ2VvXCI7XG5jb25zdCBQUk9GSUxFX0JPUkRFUl9TVE9SQUdFX0tFWSA9IFwic25pZmZpZXMtcHJvZmlsZS1ib3JkZXJcIjtcblxuZXhwb3J0IGNvbnN0IGdldEdlb092ZXJyaWRlID0gKCk6IEdlb092ZXJyaWRlID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCByYXcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShHRU9fU1RPUkFHRV9LRVkpO1xuICAgIHJldHVybiByYXcgPyB7IC4uLkRFRkFVTFRfR0VPX09WRVJSSURFLCAuLi5KU09OLnBhcnNlKHJhdykgfSA6IHsgLi4uREVGQVVMVF9HRU9fT1ZFUlJJREUgfTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHsgLi4uREVGQVVMVF9HRU9fT1ZFUlJJREUgfTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHNldEdlb092ZXJyaWRlID0gKG5leHQ6IEdlb092ZXJyaWRlKTogdm9pZCA9PiB7XG4gIGxvY2FsU3RvcmFnZS5zZXRJdGVtKEdFT19TVE9SQUdFX0tFWSwgSlNPTi5zdHJpbmdpZnkobmV4dCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFByb2ZpbGVCb3JkZXJPcGVuID0gKCk6IFByb2ZpbGVCb3JkZXJPcGVuID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCByYXcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShQUk9GSUxFX0JPUkRFUl9TVE9SQUdFX0tFWSk7XG4gICAgcmV0dXJuIHJhd1xuICAgICAgPyB7IC4uLkRFRkFVTFRfUFJPRklMRV9CT1JERVJfT1BFTiwgLi4uSlNPTi5wYXJzZShyYXcpIH1cbiAgICAgIDogeyAuLi5ERUZBVUxUX1BST0ZJTEVfQk9SREVSX09QRU4gfTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHsgLi4uREVGQVVMVF9QUk9GSUxFX0JPUkRFUl9PUEVOIH07XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBzZXRQcm9maWxlQm9yZGVyT3BlbiA9IChuZXh0OiBQcm9maWxlQm9yZGVyT3Blbik6IHZvaWQgPT4ge1xuICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShQUk9GSUxFX0JPUkRFUl9TVE9SQUdFX0tFWSwgSlNPTi5zdHJpbmdpZnkobmV4dCkpO1xufTtcbiIsICJkZWNsYXJlIGNvbnN0IF9fU0VSVkVSX0JBU0VfXzogc3RyaW5nO1xuZGVjbGFyZSBjb25zdCBfX0NMSUVOVF9TRUNSRVRfXzogc3RyaW5nO1xuZGVjbGFyZSBjb25zdCBfX1ZFUlNJT05fXzogc3RyaW5nO1xuXG5leHBvcnQgY29uc3QgU0VSVkVSX0JBU0UgPSBfX1NFUlZFUl9CQVNFX187XG5leHBvcnQgY29uc3QgQ0xJRU5UX1NFQ1JFVCA9IF9fQ0xJRU5UX1NFQ1JFVF9fO1xuZXhwb3J0IGNvbnN0IFZFUlNJT04gPSBfX1ZFUlNJT05fXztcbiIsICIvLyBJbnN0YWxscyB0aGUgc2hhcmVkIHVzZXItaWQgaG9vayBhbmQgcmVwb3J0cyBjbGllbnQgaW5pdCB0ZWxlbWV0cnkgdG8gdGhlXG4vLyBzZXJ2ZXIgb25jZSBwZXIgdXNlcnNjcmlwdCBsaWZldGltZS4gVW5saWtlIHRoZSBDaHJvbWUgZXh0ZW5zaW9uLCB0aGVcbi8vIHVzZXJzY3JpcHQgcnVucyBlbnRpcmVseSBpbiB0aGUgcGFnZSdzIG93biB3b3JsZCwgc28gdGhlIG9ic2VydmVkIHVzZXJJZFxuLy8gY2FuIGJlIHJlcG9ydGVkIGRpcmVjdGx5IFx1MjAxNCBubyBwb3N0TWVzc2FnZSByZWxheSBpcyBuZWVkZWQuXG5cbmltcG9ydCB7IGluc3RhbGxVc2VySWRIb29rLCBsb2dJbml0LCBjcmVhdGVMb2dnZXIgfSBmcm9tIFwiQHNuaWZmaWVzLXByb2plY3RzL2NvcmVcIjtcbmltcG9ydCB7IENMSUVOVF9TRUNSRVQsIFNFUlZFUl9CQVNFLCBWRVJTSU9OIH0gZnJvbSBcIi4vc2hhcmVkL2Vudi5qc1wiO1xuXG5jb25zdCBsb2cgPSBjcmVhdGVMb2dnZXIoXCJ1c2VyLWlkLWxvZ2dlclwiKTtcblxuZXhwb3J0IGNvbnN0IGluc3RhbGxVc2VySWRMb2dnaW5nID0gKCk6IGJvb2xlYW4gPT4ge1xuICBsZXQgaW5pdExvZ2dlZCA9IGZhbHNlO1xuICByZXR1cm4gaW5zdGFsbFVzZXJJZEhvb2soKHVzZXJJZCkgPT4ge1xuICAgIGxvZyhcInVzZXIgaWQgb2JzZXJ2ZWRcIiwgdXNlcklkKTtcbiAgICBpZiAoaW5pdExvZ2dlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpbml0TG9nZ2VkID0gdHJ1ZTtcbiAgICB2b2lkIGxvZ0luaXQoe1xuICAgICAgc2VydmVyQmFzZTogU0VSVkVSX0JBU0UsXG4gICAgICBjbGllbnRTZWNyZXQ6IENMSUVOVF9TRUNSRVQsXG4gICAgICB1c2VySWQsXG4gICAgICBjbGllbnRUeXBlOiBcInVzZXJzY3JpcHRcIixcbiAgICAgIHZlcnNpb246IFZFUlNJT04sXG4gICAgfSk7XG4gIH0pO1xufTtcbiIsICIvLyBTbmlmZmllcyBUb29scyBcdTIwMTQgaU9TIHVzZXJzY3JpcHRcbi8vIEluc3RhbGwgdmlhIGEgdXNlcnNjcmlwdCBtYW5hZ2VyIGFwcCAoZS5nLiBVc2Vyc2NyaXB0cywgU3RheSkgdGhhdCBzdXBwb3J0c1xuLy8gdGhlID09VXNlclNjcmlwdD09IG1ldGFkYXRhIGZvcm1hdC4gVGhlIG1ldGFkYXRhIGhlYWRlciBpcyBwcmVwZW5kZWQgYnkgdGhlXG4vLyBidWlsZCBzY3JpcHQ7IHRoaXMgZmlsZSBjb250YWlucyBvbmx5IHRoZSBydW50aW1lIGxvZ2ljLlxuXG5pbXBvcnQge1xuICBpbnN0YWxsR2VvSG9vayxcbiAgdHlwZSBHZW9PdmVycmlkZSxcbiAgREVGQVVMVF9HRU9fT1ZFUlJJREUsXG4gIEdFT19PVkVSUklERV9IVE1MLFxuICBHRU9fT1ZFUlJJREVfQ1NTLFxuICB3aXJlR2VvT3ZlcnJpZGVGb3JtLFxuICBWRVJTSU9OX0JBREdFX0NTUyxcbiAgd2lyZVZlcnNpb25CYWRnZSxcbiAgaW5zdGFsbFByb2ZpbGVCb3JkZXJSZWRpcmVjdCxcbiAgdHlwZSBQcm9maWxlQm9yZGVyT3BlbixcbiAgREVGQVVMVF9QUk9GSUxFX0JPUkRFUl9PUEVOLFxuICBQUk9GSUxFX0JPUkRFUl9IVE1MLFxuICBQUk9GSUxFX0JPUkRFUl9DU1MsXG4gIHdpcmVQcm9maWxlQm9yZGVyRm9ybSxcbiAgY3JlYXRlTG9nZ2VyLFxufSBmcm9tIFwiQHNuaWZmaWVzLXByb2plY3RzL2NvcmVcIjtcbmltcG9ydCBQQU5FTF9DU1MgZnJvbSBcIi4vcGFuZWwuY3NzXCI7XG5pbXBvcnQgUEFORUxfSFRNTCBmcm9tIFwiLi9wYW5lbC5odG1sXCI7XG5pbXBvcnQge1xuICBnZXRHZW9PdmVycmlkZSxcbiAgc2V0R2VvT3ZlcnJpZGUsXG4gIGdldFByb2ZpbGVCb3JkZXJPcGVuLFxuICBzZXRQcm9maWxlQm9yZGVyT3Blbixcbn0gZnJvbSBcIi4vc2hhcmVkL3NldHRpbmdzLmpzXCI7XG5pbXBvcnQgeyBpbnN0YWxsVXNlcklkTG9nZ2luZyB9IGZyb20gXCIuL3VzZXItaWQtbG9nZ2VyLmpzXCI7XG5pbXBvcnQgeyBWRVJTSU9OIH0gZnJvbSBcIi4vc2hhcmVkL2Vudi5qc1wiO1xuXG5jb25zdCBsb2cgPSBjcmVhdGVMb2dnZXIoXCJ0b29sc1wiKTtcblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICBfX3NuaWZmaWVzSW5qZWN0ZWQ/OiBib29sZWFuO1xuICB9XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBGQUIgbW91bnQgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmNvbnN0IG1vdW50RmFiID0gKGZhYjogSFRNTEJ1dHRvbkVsZW1lbnQpOiB2b2lkID0+IHtcbiAgY29uc3QgdHJ5SW5zZXJ0ID0gKCk6IGJvb2xlYW4gPT4ge1xuICAgIGNvbnN0IG5hdlRhcmdldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KCdbdGl0bGU9XCJTaXRlbGlua3NcIl0nKTtcbiAgICBpZiAobmF2VGFyZ2V0Py5wYXJlbnRFbGVtZW50KSB7XG4gICAgICBuYXZUYXJnZXQucGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUoZmFiLCBuYXZUYXJnZXQubmV4dFNpYmxpbmcpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICBpZiAodHJ5SW5zZXJ0KCkpIHJldHVybjtcblxuICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHtcbiAgICBpZiAodHJ5SW5zZXJ0KCkpIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgfSk7XG4gIG9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuYm9keSwgeyBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUgfSk7XG59O1xuXG4vLyBcdTI1MDBcdTI1MDAgSG9va3MgKHJ1bnMgYXQgZG9jdW1lbnQtc3RhcnQsIGJlZm9yZSBwYWdlIHNjcmlwdHMpIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5pbnRlcmZhY2UgSG9va1N0YXRlIHtcbiAgY3VycmVudE92ZXJyaWRlOiBHZW9PdmVycmlkZTtcbiAgaG9vazogUmV0dXJuVHlwZTx0eXBlb2YgaW5zdGFsbEdlb0hvb2s+O1xuICBuYXRpdmVHZXRDdXJyZW50UG9zaXRpb246IEdlb2xvY2F0aW9uW1wiZ2V0Q3VycmVudFBvc2l0aW9uXCJdO1xuICBzZW5kTG9jYXRpb25VcGRhdGU6IChvdmVycmlkZTogR2VvT3ZlcnJpZGUpID0+IHZvaWQ7XG4gIGN1cnJlbnRQcm9maWxlQm9yZGVyT3BlbjogUHJvZmlsZUJvcmRlck9wZW47XG4gIHVwZGF0ZVByb2ZpbGVCb3JkZXJPcGVuOiAobmV4dDogUHJvZmlsZUJvcmRlck9wZW4pID0+IHZvaWQ7XG59XG5cbmZ1bmN0aW9uIGluc3RhbGxIb29rcygpOiBIb29rU3RhdGUge1xuICBpbnN0YWxsVXNlcklkTG9nZ2luZygpO1xuXG4gIGxldCBjdXJyZW50T3ZlcnJpZGU6IEdlb092ZXJyaWRlID0gZ2V0R2VvT3ZlcnJpZGUoKTtcbiAgY29uc3QgaG9vayA9IGluc3RhbGxHZW9Ib29rKCgpID0+IGN1cnJlbnRPdmVycmlkZSk7XG4gIGNvbnN0IG5hdGl2ZUdldEN1cnJlbnRQb3NpdGlvbiA9XG4gICAgaG9vaz8ubmF0aXZlR2V0Q3VycmVudFBvc2l0aW9uID8/XG4gICAgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbi5iaW5kKG5hdmlnYXRvci5nZW9sb2NhdGlvbik7XG5cbiAgY29uc3QgbmF0aXZlRmV0Y2ggPSB3aW5kb3cuZmV0Y2guYmluZCh3aW5kb3cpO1xuICBsZXQgbGFzdExvY2F0aW9uUmVxdWVzdDogeyB1cmw6IHN0cmluZzsgaW5pdDogUmVxdWVzdEluaXQgfSB8IG51bGwgPSBudWxsO1xuICBsZXQgYXBpQmFzZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3Qgc2VuZExvY2F0aW9uVXBkYXRlID0gKG92ZXJyaWRlOiBHZW9PdmVycmlkZSk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IHNwb29mZWQgPSB7IGxhdDogb3ZlcnJpZGUubGF0aXR1ZGUsIGxuZzogb3ZlcnJpZGUubG9uZ2l0dWRlIH07XG4gICAgaWYgKGxhc3RMb2NhdGlvblJlcXVlc3QpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnBhcnNlKChsYXN0TG9jYXRpb25SZXF1ZXN0LmluaXQuYm9keSBhcyBzdHJpbmcpID8/IFwie31cIikgYXMgUmVjb3JkPFxuICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICB1bmtub3duXG4gICAgICAgID47XG4gICAgICAgIGJvZHkudmlydHVhbExvY2F0aW9uID0gc3Bvb2ZlZDtcbiAgICAgICAgYm9keS5waHlzaWNhbExvY2F0aW9uID0gc3Bvb2ZlZDtcbiAgICAgICAgdm9pZCBuYXRpdmVGZXRjaChsYXN0TG9jYXRpb25SZXF1ZXN0LnVybCwge1xuICAgICAgICAgIC4uLmxhc3RMb2NhdGlvblJlcXVlc3QuaW5pdCxcbiAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShib2R5KSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBmYWxsIHRocm91Z2ggdG8gcHJvYWN0aXZlIHJlcXVlc3RcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGFwaUJhc2UpIHtcbiAgICAgIHZvaWQgbmF0aXZlRmV0Y2goYCR7YXBpQmFzZX0vYXBpL3Zpc2l0b3IvY3VycmVudC9sb2NhdGlvbj9zdGF0ZT1sb2FkZWRgLCB7XG4gICAgICAgIG1ldGhvZDogXCJQVVRcIixcbiAgICAgICAgY3JlZGVudGlhbHM6IFwiaW5jbHVkZVwiLFxuICAgICAgICBoZWFkZXJzOiB7IFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICB2aXJ0dWFsTG9jYXRpb246IHNwb29mZWQsXG4gICAgICAgICAgcGh5c2ljYWxMb2NhdGlvbjogc3Bvb2ZlZCxcbiAgICAgICAgICBob21lRGlzdGFuY2VJbk1pbGVzOiBudWxsLFxuICAgICAgICB9KSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICB3aW5kb3cuZmV0Y2ggPSBhc3luYyAoaW5wdXQsIGluaXQpID0+IHtcbiAgICBjb25zdCB1cmwgPVxuICAgICAgdHlwZW9mIGlucHV0ID09PSBcInN0cmluZ1wiXG4gICAgICAgID8gaW5wdXRcbiAgICAgICAgOiBpbnB1dCBpbnN0YW5jZW9mIFVSTFxuICAgICAgICAgID8gaW5wdXQuaHJlZlxuICAgICAgICAgIDogKGlucHV0IGFzIFJlcXVlc3QpLnVybDtcbiAgICBjb25zdCBiYXNlTWF0Y2ggPSB1cmwubWF0Y2goL14oaHR0cHM/OlxcL1xcL1teL10qc25pZmZpZXNcXC5jb20pLyk7XG4gICAgaWYgKGJhc2VNYXRjaCAmJiAhYXBpQmFzZSkge1xuICAgICAgYXBpQmFzZSA9IGJhc2VNYXRjaFsxXSA/PyBudWxsO1xuICAgIH1cbiAgICBpZiAodXJsLmluY2x1ZGVzKFwiL2FwaS92aXNpdG9yL2N1cnJlbnQvbG9jYXRpb25cIikpIHtcbiAgICAgIGxhc3RMb2NhdGlvblJlcXVlc3QgPSB7IHVybCwgaW5pdDogeyAuLi5pbml0IH0gfTtcbiAgICAgIGlmIChjdXJyZW50T3ZlcnJpZGUuZW5hYmxlZCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnBhcnNlKChpbml0Py5ib2R5IGFzIHN0cmluZykgPz8gXCJ7fVwiKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgICBjb25zdCBzcG9vZmVkID0geyBsYXQ6IGN1cnJlbnRPdmVycmlkZS5sYXRpdHVkZSwgbG5nOiBjdXJyZW50T3ZlcnJpZGUubG9uZ2l0dWRlIH07XG4gICAgICAgICAgYm9keS52aXJ0dWFsTG9jYXRpb24gPSBzcG9vZmVkO1xuICAgICAgICAgIGJvZHkucGh5c2ljYWxMb2NhdGlvbiA9IHNwb29mZWQ7XG4gICAgICAgICAgaW5pdCA9IHsgLi4uaW5pdCwgYm9keTogSlNPTi5zdHJpbmdpZnkoYm9keSkgfTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLy8gbGVhdmUgdW5tb2RpZmllZCBpZiBwYXJzaW5nIGZhaWxzXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5hdGl2ZUZldGNoKGlucHV0LCBpbml0KTtcbiAgfTtcblxuICBsZXQgY3VycmVudFByb2ZpbGVCb3JkZXJPcGVuOiBQcm9maWxlQm9yZGVyT3BlbiA9IGdldFByb2ZpbGVCb3JkZXJPcGVuKCk7XG4gIGluc3RhbGxQcm9maWxlQm9yZGVyUmVkaXJlY3QoKCkgPT4gY3VycmVudFByb2ZpbGVCb3JkZXJPcGVuKTtcbiAgY29uc3QgdXBkYXRlUHJvZmlsZUJvcmRlck9wZW4gPSAobmV4dDogUHJvZmlsZUJvcmRlck9wZW4pOiB2b2lkID0+IHtcbiAgICBjdXJyZW50UHJvZmlsZUJvcmRlck9wZW4gPSBuZXh0O1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgY3VycmVudE92ZXJyaWRlLFxuICAgIGhvb2ssXG4gICAgbmF0aXZlR2V0Q3VycmVudFBvc2l0aW9uLFxuICAgIHNlbmRMb2NhdGlvblVwZGF0ZSxcbiAgICBjdXJyZW50UHJvZmlsZUJvcmRlck9wZW4sXG4gICAgdXBkYXRlUHJvZmlsZUJvcmRlck9wZW4sXG4gIH07XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBVSSAocnVucyBhZnRlciBET01Db250ZW50TG9hZGVkKSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZXhwb3J0IGZ1bmN0aW9uIG1vdW50VUkoc3RhdGU6IEhvb2tTdGF0ZSB8IG51bGwpOiB2b2lkIHtcbiAgY29uc3QgaG9vayA9IHN0YXRlPy5ob29rID8/IG51bGw7XG4gIGNvbnN0IG5hdGl2ZUdldEN1cnJlbnRQb3NpdGlvbiA9XG4gICAgc3RhdGU/Lm5hdGl2ZUdldEN1cnJlbnRQb3NpdGlvbiA/P1xuICAgICgoKSA9PiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJnZW9sb2NhdGlvbiB1bmF2YWlsYWJsZVwiKTtcbiAgICB9KTtcbiAgY29uc3Qgc2VuZExvY2F0aW9uVXBkYXRlID0gc3RhdGU/LnNlbmRMb2NhdGlvblVwZGF0ZSA/PyAoKCkgPT4ge30pO1xuICBsZXQgY3VycmVudE92ZXJyaWRlID0gc3RhdGU/LmN1cnJlbnRPdmVycmlkZSA/PyB7IC4uLkRFRkFVTFRfR0VPX09WRVJSSURFIH07XG4gIGNvbnN0IHVwZGF0ZVByb2ZpbGVCb3JkZXJPcGVuID0gc3RhdGU/LnVwZGF0ZVByb2ZpbGVCb3JkZXJPcGVuID8/ICgoKSA9PiB7fSk7XG4gIGNvbnN0IGN1cnJlbnRQcm9maWxlQm9yZGVyT3BlbiA9IHN0YXRlPy5jdXJyZW50UHJvZmlsZUJvcmRlck9wZW4gPz8ge1xuICAgIC4uLkRFRkFVTFRfUFJPRklMRV9CT1JERVJfT1BFTixcbiAgfTtcblxuICBjb25zdCBzaGVsbFN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuICBzaGVsbFN0eWxlLnRleHRDb250ZW50ID0gUEFORUxfQ1NTO1xuICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHNoZWxsU3R5bGUpO1xuXG4gIGNvbnN0IGdlb1N0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuICBnZW9TdHlsZS50ZXh0Q29udGVudCA9IEdFT19PVkVSUklERV9DU1M7XG4gIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoZ2VvU3R5bGUpO1xuXG4gIGNvbnN0IHByb2ZpbGVCb3JkZXJTdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgcHJvZmlsZUJvcmRlclN0eWxlLnRleHRDb250ZW50ID0gUFJPRklMRV9CT1JERVJfQ1NTO1xuICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHByb2ZpbGVCb3JkZXJTdHlsZSk7XG5cbiAgY29uc3QgdmVyc2lvblN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuICB2ZXJzaW9uU3R5bGUudGV4dENvbnRlbnQgPSBWRVJTSU9OX0JBREdFX0NTUztcbiAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh2ZXJzaW9uU3R5bGUpO1xuXG4gIGNvbnN0IGZhYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIik7XG4gIGZhYi5pZCA9IFwic25wLWZhYlwiO1xuICBmYWIudGl0bGUgPSBcIlNuaWZmaWVzIFRvb2xzXCI7XG4gIGZhYi50ZXh0Q29udGVudCA9IFwiXHVEODNEXHVEQ0NEXCI7XG4gIG1vdW50RmFiKGZhYik7XG5cbiAgY29uc3QgcGFuZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBwYW5lbC5pZCA9IFwic25wLXBhbmVsXCI7XG4gIHBhbmVsLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgcGFuZWwuaW5uZXJIVE1MID0gUEFORUxfSFRNTDtcbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChwYW5lbCk7XG5cbiAgd2lyZVZlcnNpb25CYWRnZShwYW5lbCwgVkVSU0lPTik7XG5cbiAgY29uc3QgZ2VvUm9vdCA9IHBhbmVsLnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KFwiI3NucC1nZW8tcm9vdFwiKSE7XG4gIGdlb1Jvb3QuaW5uZXJIVE1MID0gR0VPX09WRVJSSURFX0hUTUw7XG5cbiAgd2lyZUdlb092ZXJyaWRlRm9ybShnZW9Sb290LCB7XG4gICAgaW5pdGlhbDogY3VycmVudE92ZXJyaWRlLFxuICAgIG9uU2F2ZTogKG5leHQpID0+IHtcbiAgICAgIHNldEdlb092ZXJyaWRlKG5leHQpO1xuICAgICAgY3VycmVudE92ZXJyaWRlID0gbmV4dDtcbiAgICAgIGhvb2s/LnJlZnJlc2hXYXRjaGVzKCk7XG4gICAgICBpZiAobmV4dC5lbmFibGVkKSB7XG4gICAgICAgIHNlbmRMb2NhdGlvblVwZGF0ZShuZXh0KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGdldE5hdGl2ZVBvc2l0aW9uOiBuYXRpdmVHZXRDdXJyZW50UG9zaXRpb24sXG4gICAgaW5pdGlhbE9wZW46IGZhbHNlLFxuICAgIG9uVG9nZ2xlOiAoKSA9PiB7fSxcbiAgfSk7XG5cbiAgY29uc3QgcHJvZmlsZUJvcmRlclJvb3QgPSBwYW5lbC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PihcIiNzbnAtcHJvZmlsZS1ib3JkZXItcm9vdFwiKSE7XG4gIHByb2ZpbGVCb3JkZXJSb290LmlubmVySFRNTCA9IFBST0ZJTEVfQk9SREVSX0hUTUw7XG5cbiAgd2lyZVByb2ZpbGVCb3JkZXJGb3JtKHByb2ZpbGVCb3JkZXJSb290LCB7XG4gICAgaW5pdGlhbDogY3VycmVudFByb2ZpbGVCb3JkZXJPcGVuLFxuICAgIG9uU2F2ZTogKG5leHQpID0+IHtcbiAgICAgIHNldFByb2ZpbGVCb3JkZXJPcGVuKG5leHQpO1xuICAgICAgdXBkYXRlUHJvZmlsZUJvcmRlck9wZW4obmV4dCk7XG4gICAgfSxcbiAgICBpbml0aWFsT3BlbjogZmFsc2UsXG4gICAgb25Ub2dnbGU6ICgpID0+IHt9LFxuICB9KTtcblxuICBjb25zdCBjbG9zZUJ0biA9IHBhbmVsLnF1ZXJ5U2VsZWN0b3I8SFRNTEJ1dHRvbkVsZW1lbnQ+KFwiI3NucC1jbG9zZVwiKSE7XG4gIGZhYi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgIHBhbmVsLnN0eWxlLmRpc3BsYXkgPSBwYW5lbC5zdHlsZS5kaXNwbGF5ID09PSBcIm5vbmVcIiA/IFwiZmxleFwiIDogXCJub25lXCI7XG4gIH0pO1xuICBjbG9zZUJ0bi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgIHBhbmVsLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgfSk7XG59XG5cbi8vIFx1MjUwMFx1MjUwMCBFbnRyeSBwb2ludCBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcbi8vIE11c3QgcnVuIGFmdGVyIGFsbCBjb25zdCBkZWNsYXJhdGlvbnMgYWJvdmUgYXJlIGluaXRpYWxpemVkLlxuXG5pZiAod2luZG93Ll9fc25pZmZpZXNJbmplY3RlZCkge1xuICAvLyBBbHJlYWR5IGluc3RhbGxlZCBcdTIwMTQgbm90aGluZyB0byBkby5cbn0gZWxzZSB7XG4gIHdpbmRvdy5fX3NuaWZmaWVzSW5qZWN0ZWQgPSB0cnVlO1xuICBsZXQgaG9va1N0YXRlOiBIb29rU3RhdGUgfCBudWxsID0gbnVsbDtcbiAgdHJ5IHtcbiAgICBob29rU3RhdGUgPSBpbnN0YWxsSG9va3MoKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLmVycm9yKFwiaG9vayBpbnN0YWxsIGZhaWxlZDpcIiwgZXJyKTtcbiAgfVxuICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gXCJsb2FkaW5nXCIpIHtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCAoKSA9PiBtb3VudFVJKGhvb2tTdGF0ZSksIHsgb25jZTogdHJ1ZSB9KTtcbiAgfSBlbHNlIHtcbiAgICBtb3VudFVJKGhvb2tTdGF0ZSk7XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICJtQkFlTyxJQUFNQSxFQUFhQyxHQUF5QixhQUFhQSxDQUFJLElBRXZEQyxFQUFnQkQsR0FBeUIsQ0FDcEQsSUFBTUUsRUFBTUgsRUFBVUMsQ0FBSSxFQUNwQkcsRUFBTyxJQUFJQyxJQUEwQixDQUkzQyxFQUNBLE9BQUFELEVBQUksS0FBTyxJQUFJQyxJQUEwQixDQUN2QyxRQUFRLEtBQUtGLEVBQUssR0FBR0UsQ0FBSSxDQUMzQixFQUNBRCxFQUFJLE1BQVEsSUFBSUMsSUFBMEIsQ0FDeEMsUUFBUSxNQUFNRixFQUFLLEdBQUdFLENBQUksQ0FDNUIsRUFDT0QsQ0FDVCxFQ1ZPLElBQU1FLEVBQWlCLENBQzVCQyxFQUNBQyxJQUN5QixDQUN6QixJQUFNQyxFQUFNQyxFQUFhLEtBQUssRUFDeEJDLEVBQU0sVUFBVSxZQUN0QixHQUFJLENBQUNBLEdBQU9BLEVBQUksa0JBQ2QsT0FBTyxLQUdULElBQU1DLEVBQTJCRCxFQUFJLG1CQUFtQixLQUFLQSxDQUFHLEVBQzFERSxFQUFzQkYsRUFBSSxjQUFjLEtBQUtBLENBQUcsRUFDaERHLEVBQW1CSCxFQUFJLFdBQVcsS0FBS0EsQ0FBRyxFQUUxQ0ksRUFBaUIsSUFBSSxJQUVyQkMsRUFBaUJDLEdBQXVELENBQzVFLElBQU1DLEVBQUtYLEVBQVks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USxXQUFBQyxFQUFZLFFBQUFDLENBQVEsQ0FBQyxDQUN0RCxDQUFDLEVBQ0dFLEVBQUksR0FDTlIsRUFBSSxnQkFBZ0IsRUFFcEJBLEVBQUksTUFBTSxxQkFBc0JRLEVBQUksTUFBTSxDQUU5QyxPQUFTQyxFQUFLLENBRVpULEVBQUksTUFBTSxtQkFBb0JTLENBQUcsQ0FDbkMsQ0FDRixFQzVDQSxJQUFBQyxFQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0VDQUEsSUFBQUMsRUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtB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WnJELEdBQUksTUFBTSx1QkFBd0JxRCxDQUFHLENBQ3ZDLENBQ0ksU0FBUyxhQUFlLFVBQzFCLFNBQVMsaUJBQWlCLG1CQUFvQixJQUFNeEIsRUFBUXVCLENBQVMsRUFBRyxDQUFFLEtBQU0sRUFBSyxDQUFDLEVBRXRGdkIsRUFBUXVCLENBQVMsQ0FFckIiLAogICJuYW1lcyI6IFsiZm9ybWF0VGFnIiwgIm5hbWUiLCAiY3JlYXRlTG9nZ2VyIiwgInRhZyIsICJsb2ciLCAiYXJncyIsICJpbnN0YWxsR2VvSG9vayIsICJnZXRPdmVycmlkZSIsICJvblBvc2l0aW9uIiwgImxvZyIsICJjcmVhdGVMb2dnZXIiLCAiZ2VvIiwgIm5hdGl2ZUdldEN1cnJlbnRQb3NpdGlvbiIsICJuYXRpdmVXYXRjaFBvc2l0aW9uIiwgIm5hdGl2ZUNsZWFyV2F0Y2giLCAiYWN0aXZlV2F0Y2hlcnMiLCAiYXBwbHlPdmVycmlkZSIsICJwb3NpdGlvbiIsICJvdiIsICJzcG9vZmVkIiwgIndyYXBTdWNjZXNzIiwgImNhbGxiYWNrIiwgInN1Y2Nlc3MiLCAiZXJyb3IiLCAib3B0aW9ucyIsICJ3cmFwcGVkIiwgImlkIiwgInJlZnJlc2hXYXRjaGVzIiwgInBvcyIsICJjYiIsICJXU19IT1NUIiwgImV4dHJhY3RVc2VySWQiLCAidXJsIiwgInBhcnNlZCIsICJpbnN0YWxsVXNlcklkSG9vayIsICJvblVzZXJJZCIsICJsb2ciLCAiY3JlYXRlTG9nZ2VyIiwgIk5hdGl2ZVdlYlNvY2tldCIsICJQYXRjaGVkV2ViU29ja2V0IiwgInByb3RvY29scyIsICJ1c2VySWQiLCAiTUFSS0VSX0NPTlRBSU5FUl9TRUxFQ1RPUiIsICJpbnN0YWxsUHJvZmlsZUJvcmRlclJlZGlyZWN0IiwgImdldFNldHRpbmdzIiwgImxvZyIsICJjcmVhdGVMb2dnZXIiLCAiaGFuZGxlciIsICJldmVudCIsICJzZXR0aW5ncyIsICJ0YXJnZXQiLCAiY29udGFpbmVyIiwgInVybCIsICJsb2dJbml0IiwgIm9wdGlvbnMiLCAibG9nIiwgImNyZWF0ZUxvZ2dlciIsICJzZXJ2ZXJCYXNlIiwgImNsaWVudFNlY3JldCIsICJ1c2VySWQiLCAiY2xpZW50VHlwZSIsICJ2ZXJzaW9uIiwgImJhc2UiLCAicmVzIiwgImVyciIsICJnZW9fb3ZlcnJpZGVfZGVmYXVsdCIsICJnZW9fb3ZlcnJpZGVfZGVmYXVsdCIsICJ3aXJlR2VvT3ZlcnJpZGVGb3JtIiwgImNvbnRhaW5lciIsICJvcHRpb25zIiwgImVsIiwgImlkIiwgImRldGFpbHMiLCAiZ2VvRW5hYmxlZCIsICJnZW9GaWVsZHMiLCAiZ2VvTGF0IiwgImdlb0xuZyIsICJmaWxsQ3VycmVudCIsICJzYXZlQnRuIiwgInN0YXR1c0VsIiwgInNldFN0YXR1cyIsICJ0ZXh0IiwgInJlYWRGb3JtIiwgInBlbmRpbmdGZXRjaCIsICJmaWxsV2l0aEN1cnJlbnRQb3NpdGlvbiIsICJvblN1Y2Nlc3MiLCAidG9rZW4iLCAicG9zIiwgInVwZGF0ZVNhdmVWaXNpYmlsaXR5IiwgImVyciIsICJpbml0aWFsIiwgImxhc3RTYXZlZCIsICJmb3JtTWF0Y2hlc1NhdmVkIiwgImZvcm0iLCAiaGFzQ29vcmRzIiwgImNvbW1pdFNhdmUiLCAiZmllbGQiLCAidmVyc2lvbl9iYWRnZV9kZWZhdWx0IiwgIndpcmVWZXJzaW9uQmFkZ2UiLCAiY29udGFpbmVyIiwgInZlcnNpb24iLCAiZWwiLCAicHJvZmlsZV9ib3JkZXJfZGVmYXVsdCIsICJwcm9maWxlX2JvcmRlcl9kZWZhdWx0IiwgIlRBQl9MQUJFTFMiLCAid2lyZVByb2ZpbGVCb3JkZXJGb3JtIiwgImNvbnRhaW5lciIsICJvcHRpb25zIiwgImVsIiwgImlkIiwgImRldGFpbHMiLCAiZW5hYmxlZENoZWNrYm94IiwgInRhYkZpZWxkIiwgInRhYlNlbGVjdCIsICJvcHRpb25DdXJyZW50IiwgIm9wdGlvbk5ldyIsICJzYXZlQnRuIiwgImFwcGx5TGFiZWxzIiwgIm9wZW5Jbk5ld1RhYiIsICJyZWFkRm9ybSIsICJpbml0aWFsIiwgInNhdmVkT3BlbkluTmV3VGFiIiwgImlzQ2hhbmdlZCIsICJuZXh0IiwgIkRFRkFVTFRfR0VPX09WRVJSSURFIiwgIkRFRkFVTFRfUFJPRklMRV9CT1JERVJfT1BFTiIsICJwYW5lbF9kZWZhdWx0IiwgInBhbmVsX2RlZmF1bHQiLCAiR0VPX1NUT1JBR0VfS0VZIiwgIlBST0ZJTEVfQk9SREVSX1NUT1JBR0VfS0VZIiwgImdldEdlb092ZXJyaWRlIiwgInJhdyIsICJERUZBVUxUX0dFT19PVkVSUklERSIsICJzZXRHZW9PdmVycmlkZSIsICJuZXh0IiwgImdldFByb2ZpbGVCb3JkZXJPcGVuIiwgIkRFRkFVTFRfUFJPRklMRV9CT1JERVJfT1BFTiIsICJzZXRQcm9maWxlQm9yZGVyT3BlbiIsICJTRVJWRVJfQkFTRSIsICJDTElFTlRfU0VDUkVUIiwgIlZFUlNJT04iLCAibG9nIiwgImNyZWF0ZUxvZ2dlciIsICJpbnN0YWxsVXNlcklkTG9nZ2luZyIsICJpbml0TG9nZ2VkIiwgImluc3RhbGxVc2VySWRIb29rIiwgInVzZXJJZCIsICJsb2dJbml0IiwgIlNFUlZFUl9CQVNFIiwgIkNMSUVOVF9TRUNSRVQiLCAiVkVSU0lPTiIsICJsb2ciLCAiY3JlYXRlTG9nZ2VyIiwgIm1vdW50RmFiIiwgImZhYiIsICJ0cnlJbnNlcnQiLCAibmF2VGFyZ2V0IiwgIm9ic2VydmVyIiwgImluc3RhbGxIb29rcyIsICJpbnN0YWxsVXNlcklkTG9nZ2luZyIsICJjdXJyZW50T3ZlcnJpZGUiLCAiZ2V0R2VvT3ZlcnJpZGUiLCAiaG9vayIsICJpbnN0YWxsR2VvSG9vayIsICJuYXRpdmVHZXRDdXJyZW50UG9zaXRpb24iLCAibmF0aXZlRmV0Y2giLCAibGFzdExvY2F0aW9uUmVxdWVzdCIsICJhcGlCYXNlIiwgInNlbmRMb2NhdGlvblVwZGF0ZSIsICJvdmVycmlkZSIsICJzcG9vZmVkIiwgImJvZHkiLCAiaW5wdXQiLCAiaW5pdCIsICJ1cmwiLCAiYmFzZU1hdGNoIiwgImN1cnJlbnRQcm9maWxlQm9yZGVyT3BlbiIsICJnZXRQcm9maWxlQm9yZGVyT3BlbiIsICJpbnN0YWxsUHJvZmlsZUJvcmRlclJlZGlyZWN0IiwgIm5leHQiLCAibW91bnRVSSIsICJzdGF0ZSIsICJERUZBVUxUX0dFT19PVkVSUklERSIsICJ1cGRhdGVQcm9maWxlQm9yZGVyT3BlbiIsICJERUZBVUxUX1BST0ZJTEVfQk9SREVSX09QRU4iLCAic2hlbGxTdHlsZSIsICJwYW5lbF9kZWZhdWx0IiwgImdlb1N0eWxlIiwgImdlb19vdmVycmlkZV9kZWZhdWx0IiwgInByb2ZpbGVCb3JkZXJTdHlsZSIsICJwcm9maWxlX2JvcmRlcl9kZWZhdWx0IiwgInZlcnNpb25TdHlsZSIsICJ2ZXJzaW9uX2JhZGdlX2RlZmF1bHQiLCAicGFuZWwiLCAid2lyZVZlcnNpb25CYWRnZSIsICJWRVJTSU9OIiwgImdlb1Jvb3QiLCAid2lyZUdlb092ZXJyaWRlRm9ybSIsICJzZXRHZW9PdmVycmlkZSIsICJwcm9maWxlQm9yZGVyUm9vdCIsICJ3aXJlUHJvZmlsZUJvcmRlckZvcm0iLCAic2V0UHJvZmlsZUJvcmRlck9wZW4iLCAiY2xvc2VCdG4iLCAiaG9va1N0YXRlIiwgImVyciJdCn0K